git.iko.soy/typeable/nixpkgs
on master help sign in
19139 files changed+764890−466153
since splitsnapshots
unifiedsplit
.editorconfig+5−14 .git-blame-ignore-revs+32 .github/CODEOWNERS+103−45 .github/ISSUE_TEMPLATE/bug_report.md−8 .github/ISSUE_TEMPLATE/out_of_date_package_report.md+3−3 .github/PULL_REQUEST_TEMPLATE.md+25−15 .github/labeler.yml+10−6 .github/workflows/backport.yml+7−1 .github/workflows/basic-eval.yml+16−10 .github/workflows/direct-push.yml+1−1 .github/workflows/editorconfig.yml+10−13 .github/workflows/labels.yml+6−1 .github/workflows/manual-nixos.yml+3−3 .github/workflows/manual-nixpkgs.yml+3−3 .github/workflows/nixos-manual.yml+2−2 .github/workflows/pending-set.yml+5 .github/workflows/periodic-merge-24h.yml+10−2 .github/workflows/periodic-merge-6h.yml+2−6 .github/workflows/update-terraform-providers.yml+48 .gitignore+7 .version+1−1 CONTRIBUTING.md+55−10 COPYING+1−1 README.md+12−7 doc/build-aux/pandoc-filters/link-unix-man-references.lua+1−2 doc/builders/fetchers.chapter.md+49−12 doc/builders/images/dockertools.section.md+14−8 doc/builders/images/ocitools.section.md+3−3 doc/builders/images/snaptools.section.md+1−1 doc/builders/packages/citrix.section.md+5−5 doc/builders/packages/eclipse.section.md+5−5 doc/builders/packages/elm.section.md+1−1 doc/builders/packages/emacs.section.md+3−3 doc/builders/packages/etc-files.section.md+18 doc/builders/packages/firefox.section.md+7−8 doc/builders/packages/fish.section.md+1−1 doc/builders/packages/fuse.section.md+2−2 doc/builders/packages/ibus.section.md+3−3 doc/builders/packages/index.xml+1 doc/builders/packages/linux.section.md+11−11 doc/builders/packages/locales.section.md+2−2 doc/builders/packages/nginx.section.md+2−2 doc/builders/packages/opengl.section.md+1−1 doc/builders/packages/shell-helpers.section.md+1−1 doc/builders/packages/steam.section.md+8−8 doc/builders/packages/urxvt.section.md+4−4 doc/builders/packages/weechat.section.md+5−5 doc/builders/special/fhs-environments.section.md+2 doc/builders/special/mkshell.section.md+26−6 doc/builders/testers.chapter.md+82 doc/builders/trivial-builders.chapter.md+127−3 doc/contributing/coding-conventions.chapter.md+24−8 doc/contributing/contributing-to-documentation.chapter.md+1−1 doc/contributing/reviewing-contributions.chapter.md+5−4 doc/contributing/submitting-changes.chapter.md+20−10 doc/functions/library/attrsets.xml+3−3 doc/hooks/index.xml+10 doc/hooks/postgresql-test-hook.section.md+59 doc/languages-frameworks/agda.section.md+63−1 doc/languages-frameworks/beam.section.md+33−8 doc/languages-frameworks/chicken.section.md+49 doc/languages-frameworks/coq.section.md+4−3 doc/languages-frameworks/crystal.section.md+2−2 doc/languages-frameworks/cuda.section.md+34 doc/languages-frameworks/dhall.section.md+46−15 doc/languages-frameworks/dotnet.section.md+63−6 doc/languages-frameworks/emscripten.section.md+2−2 doc/languages-frameworks/gnome.section.md+17−3 doc/languages-frameworks/go.section.md+6−6 doc/languages-frameworks/idris.section.md+1−4 doc/languages-frameworks/index.xml+5 doc/languages-frameworks/java.section.md+9 doc/languages-frameworks/javascript.section.md+24−2 doc/languages-frameworks/lua.section.md+1−1 doc/languages-frameworks/nim.section.md+91 doc/languages-frameworks/ocaml.section.md+44−6 doc/languages-frameworks/octave.section.md+92 doc/languages-frameworks/perl.section.md+4−8 doc/languages-frameworks/python.section.md+56−8 doc/languages-frameworks/r.section.md+12−8 doc/languages-frameworks/ruby.section.md+14−1 doc/languages-frameworks/rust.section.md+155−87 doc/languages-frameworks/texlive.section.md+1−1 doc/languages-frameworks/vim.section.md+9−6 doc/manual.xml+2 doc/stdenv/cross-compilation.chapter.md+37−12 doc/stdenv/meta.chapter.md+34−4 doc/stdenv/multiple-output.chapter.md+1−1 doc/stdenv/stdenv.chapter.md+110−21 doc/using/overlays.chapter.md+21−3 doc/using/overrides.chapter.md+6−2 flake.nix+9−59 lib/asserts.nix+10−12 lib/attrsets.nix+131−22 lib/customisation.nix+50−3 lib/default.nix+24−14 lib/flakes.nix+22 lib/generators.nix+76−4 lib/licenses.nix+40 lib/lists.nix+11−13 lib/meta.nix+42−1 lib/modules.nix+339−89 lib/options.nix+82−18 lib/sources.nix+70−49 lib/strings.nix+209−5 lib/systems/default.nix+4−1 lib/systems/doubles.nix+13−6 lib/systems/examples.nix+31 lib/systems/inspect.nix+8−1 lib/systems/parse.nix+10−2 lib/systems/platforms.nix+53−4 lib/systems/supported.nix+26 lib/tests/flakes/subflakeTest/flake.nix+8 lib/tests/flakes/subflakeTest/subflake/flake.nix+5 lib/tests/maintainers.nix+4 lib/tests/misc.nix+454−2 lib/tests/modules.sh+180−121 lib/tests/modules/adhoc-freeformType-survives-type-merge.nix+14 lib/tests/modules/declare-attrsOf.nix+8−1 lib/tests/modules/declare-bare-submodule-deep-option-duplicate.nix+10 lib/tests/modules/declare-bare-submodule-deep-option.nix+10 lib/tests/modules/declare-bare-submodule-nested-option.nix+19 lib/tests/modules/declare-bare-submodule.nix+18 lib/tests/modules/declare-set.nix+12 lib/tests/modules/declare-submodule-via-evalModules.nix+28 lib/tests/modules/declare-variants.nix+9 lib/tests/modules/define-bare-submodule-values.nix+4 lib/tests/modules/define-shorthandOnlyDefinesConfig-true.nix+1 lib/tests/modules/define-variant.nix+22 lib/tests/modules/emptyValues.nix+36 lib/tests/modules/extendModules-168767-imports.nix+41 lib/tests/modules/freeform-nested.nix+8−1 lib/tests/modules/freeform-submodules.nix+22 lib/tests/modules/optionTypeFile.nix+28 lib/tests/modules/optionTypeMerging.nix+27 lib/tests/modules/raw.nix+30 lib/tests/modules/types-anything/functions.nix+9−3 lib/tests/release.nix+4 lib/tests/sources.sh+11−9 lib/tests/systems.nix+5−2 lib/trivial.nix+123−8 lib/types.nix+135−51 maintainers/maintainer-list.nix+2232−182 maintainers/scripts/check-maintainer-github-handles.sh+9−9 maintainers/scripts/dep-licenses.sh+1−1 maintainers/scripts/feature-freeze-teams.pl+98 maintainers/scripts/find-tarballs.nix+1−1 maintainers/scripts/haskell/dependencies.nix+10 maintainers/scripts/haskell/hydra-report.hs+115−33 maintainers/scripts/haskell/maintained-broken-pkgs.nix+22 maintainers/scripts/haskell/maintainer-handles.nix+7 maintainers/scripts/haskell/merge-and-open-pr.sh+122 maintainers/scripts/haskell/regenerate-hackage-packages.sh+1−1 maintainers/scripts/haskell/test-configurations.nix+136 maintainers/scripts/haskell/update-stackage.sh+25−12 maintainers/scripts/haskell/upload-nixos-package-list-to-hackage.sh+1 maintainers/scripts/luarocks-packages.csv+5−4 maintainers/scripts/pluginupdate.py+284−165 maintainers/scripts/rebuild-amount.sh+86−79 maintainers/scripts/remove-old-aliases.py+211 maintainers/scripts/update-luarocks-packages+9−13 maintainers/scripts/update.nix+3−3 maintainers/scripts/update.py+5−1 maintainers/scripts/vanity.sh+19−19 maintainers/team-list.nix+437−4 nixos/default.nix+1−24 nixos/doc/manual/administration/cleaning-store.chapter.md+2−2 nixos/doc/manual/administration/containers.chapter.md+28 nixos/doc/manual/administration/containers.xml−34 nixos/doc/manual/administration/declarative-containers.section.md+2−2 nixos/doc/manual/administration/imperative-containers.section.md+2−2 nixos/doc/manual/administration/running.xml+2−2 nixos/doc/manual/administration/troubleshooting.chapter.md+12 nixos/doc/manual/administration/troubleshooting.xml−16 nixos/doc/manual/configuration/config-syntax.chapter.md+19 nixos/doc/manual/configuration/config-syntax.xml−25 nixos/doc/manual/configuration/configuration.xml+5−5 nixos/doc/manual/configuration/declarative-packages.section.md+46 nixos/doc/manual/configuration/declarative-packages.xml−54 nixos/doc/manual/configuration/file-systems.chapter.md+42 nixos/doc/manual/configuration/file-systems.xml−58 nixos/doc/manual/configuration/linux-kernel.chapter.md+21−16 nixos/doc/manual/configuration/networking.chapter.md+16 nixos/doc/manual/configuration/networking.xml−20 nixos/doc/manual/configuration/package-mgmt.chapter.md+18 nixos/doc/manual/configuration/package-mgmt.xml−31 nixos/doc/manual/configuration/profiles.chapter.md+34 nixos/doc/manual/configuration/profiles.xml−39 nixos/doc/manual/configuration/renaming-interfaces.section.md+1−1 nixos/doc/manual/default.nix+18−5 nixos/doc/manual/development/activation-script.section.md+72 nixos/doc/manual/development/building-nixos.chapter.md−46 nixos/doc/manual/development/development.xml+3−3 nixos/doc/manual/development/meta-attributes.section.md+27−1 nixos/doc/manual/development/nixos-tests.chapter.md+13 nixos/doc/manual/development/nixos-tests.xml−20 nixos/doc/manual/development/option-declarations.section.md+101−16 nixos/doc/manual/development/option-types.section.md+29−4 nixos/doc/manual/development/running-nixos-tests-interactively.section.md+9−9 nixos/doc/manual/development/running-nixos-tests.section.md+2−2 nixos/doc/manual/development/settings-options.section.md+59 nixos/doc/manual/development/unit-handling.section.md+62 nixos/doc/manual/development/what-happens-during-a-system-switch.chapter.md+53 nixos/doc/manual/development/writing-modules.chapter.md+208 nixos/doc/manual/development/writing-modules.xml−191 nixos/doc/manual/development/writing-nixos-tests.section.md+111−30 nixos/doc/manual/from_md/administration/cleaning-store.chapter.xml+2−1 nixos/doc/manual/from_md/administration/containers.chapter.xml+31 nixos/doc/manual/from_md/administration/declarative-containers.section.xml+3−3 nixos/doc/manual/from_md/administration/imperative-containers.section.xml+3−2 nixos/doc/manual/from_md/administration/troubleshooting.chapter.xml+12 nixos/doc/manual/from_md/configuration/config-syntax.chapter.xml+21 nixos/doc/manual/from_md/configuration/declarative-packages.section.xml+53 nixos/doc/manual/from_md/configuration/file-systems.chapter.xml+55 nixos/doc/manual/from_md/configuration/linux-kernel.chapter.xml+22−15 nixos/doc/manual/from_md/configuration/networking.chapter.xml+15 nixos/doc/manual/from_md/configuration/package-mgmt.chapter.xml+28 nixos/doc/manual/from_md/configuration/profiles.chapter.xml+38 nixos/doc/manual/from_md/configuration/renaming-interfaces.section.xml+1−1 nixos/doc/manual/from_md/development/activation-script.section.xml+150 nixos/doc/manual/from_md/development/building-nixos.chapter.xml−72 nixos/doc/manual/from_md/development/meta-attributes.section.xml+42−2 nixos/doc/manual/from_md/development/nixos-tests.chapter.xml+14 nixos/doc/manual/from_md/development/option-declarations.section.xml+231−107 nixos/doc/manual/from_md/development/option-types.section.xml+56−5 nixos/doc/manual/from_md/development/running-nixos-tests-interactively.section.xml+9−9 nixos/doc/manual/from_md/development/running-nixos-tests.section.xml+2−2 nixos/doc/manual/from_md/development/settings-options.section.xml+136 nixos/doc/manual/from_md/development/unit-handling.section.xml+131 nixos/doc/manual/from_md/development/what-happens-during-a-system-switch.chapter.xml+122 nixos/doc/manual/from_md/development/writing-modules.chapter.xml+245 nixos/doc/manual/from_md/development/writing-nixos-tests.section.xml+521−392 nixos/doc/manual/from_md/installation/building-nixos.chapter.xml+106 nixos/doc/manual/from_md/installation/installing-pxe.section.xml+2−2 nixos/doc/manual/from_md/installation/installing-usb.section.xml+1−1 nixos/doc/manual/from_md/installation/installing.chapter.xml+645 nixos/doc/manual/from_md/installation/upgrading.chapter.xml+8−8 nixos/doc/manual/from_md/release-notes/rl-1803.section.xml+8 nixos/doc/manual/from_md/release-notes/rl-2009.section.xml+7−3 nixos/doc/manual/from_md/release-notes/rl-2111.section.xml+982−17 nixos/doc/manual/from_md/release-notes/rl-2205.section.xml+2470 nixos/doc/manual/installation/building-nixos.chapter.md+77 nixos/doc/manual/installation/installation.xml+2−1 nixos/doc/manual/installation/installing-pxe.section.md+2−2 nixos/doc/manual/installation/installing-usb.section.md+1−1 nixos/doc/manual/installation/installing.chapter.md+482 nixos/doc/manual/installation/installing.xml−616 nixos/doc/manual/installation/upgrading.chapter.md+8−8 nixos/doc/manual/man-nixos-install.xml+9−4 nixos/doc/manual/man-nixos-rebuild.xml+45−7 nixos/doc/manual/man-pages.xml+7−2 nixos/doc/manual/md-to-db.sh+4−4 nixos/doc/manual/release-notes/release-notes.xml+1 nixos/doc/manual/release-notes/rl-1803.section.md+2 nixos/doc/manual/release-notes/rl-2009.section.md+3−1 nixos/doc/manual/release-notes/rl-2111.section.md+321−68 nixos/doc/manual/release-notes/rl-2205.section.md+878 nixos/lib/build-vms.nix+16−9 nixos/lib/default.nix+33 nixos/lib/eval-cacheable-options.nix+53 nixos/lib/eval-config-minimal.nix+49 nixos/lib/eval-config.nix+54−16 nixos/lib/make-disk-image.nix+66−23 nixos/lib/make-iso9660-image.sh+1 nixos/lib/make-multi-disk-zfs-image.nix+333 nixos/lib/make-options-doc/default.nix+78−103 nixos/lib/make-options-doc/generateAsciiDoc.py+37 nixos/lib/make-options-doc/generateCommonMark.py+27 nixos/lib/make-options-doc/mergeJSON.py+95 nixos/lib/make-options-doc/options-to-docbook.xsl+30−20 nixos/lib/make-options-doc/optionsJSONtoXML.nix+6 nixos/lib/make-options-doc/sortXML.py+27 nixos/lib/make-single-disk-zfs-image.nix+322 nixos/lib/make-squashfs.nix+8−1 nixos/lib/make-zfs-image.nix−333 nixos/lib/qemu-common.nix+32 nixos/lib/qemu-flags.nix−32 nixos/lib/systemd-lib.nix+426 nixos/lib/systemd-types.nix+69 nixos/lib/systemd-unit-options.nix+711 nixos/lib/test-driver/default.nix+32 nixos/lib/test-driver/setup.py+13 nixos/lib/test-driver/test-driver.py−1098 nixos/lib/test-driver/test_driver/__init__.py+128 nixos/lib/test-driver/test_driver/driver.py+226 nixos/lib/test-driver/test_driver/logger.py+105 nixos/lib/test-driver/test_driver/machine.py+1023 nixos/lib/test-driver/test_driver/polling_condition.py+77 nixos/lib/test-driver/test_driver/vlan.py+58 nixos/lib/testing-python.nix+75−187 nixos/lib/utils.nix+53−3 nixos/maintainers/scripts/azure-new/examples/basic/image.nix+1−1 nixos/maintainers/scripts/azure-new/examples/basic/system.nix+1−1 nixos/maintainers/scripts/ec2/amazon-image.nix+9−4 nixos/maintainers/scripts/ec2/create-amis.sh+83−45 nixos/maintainers/scripts/lxd/lxd-image-inner.nix+102 nixos/maintainers/scripts/lxd/lxd-image.nix+34 nixos/maintainers/scripts/lxd/nix.tpl+9 nixos/maintainers/scripts/openstack/openstack-image-zfs.nix+101 nixos/maintainers/scripts/openstack/openstack-image.nix+9−8 nixos/modules/config/console.nix+28−10 nixos/modules/config/fonts/fontdir.nix+2−2 nixos/modules/config/fonts/fonts.nix+1−6 nixos/modules/config/gtk/gtk-icon-cache.nix+1 nixos/modules/config/i18n.nix+7−1 nixos/modules/config/krb5/default.nix+8−8 nixos/modules/config/malloc.nix+22−3 nixos/modules/config/networking.nix+11−7 nixos/modules/config/nsswitch.nix+7−4 nixos/modules/config/power-management.nix+2−2 nixos/modules/config/pulseaudio.nix+5−5 nixos/modules/config/resolvconf.nix+2−4 nixos/modules/config/shells-environment.nix+3−5 nixos/modules/config/swap.nix+12−7 nixos/modules/config/sysctl.nix+1−1 nixos/modules/config/system-path.nix+19−9 nixos/modules/config/terminfo.nix+25−1 nixos/modules/config/unix-odbc-drivers.nix+1−1 nixos/modules/config/update-users-groups.pl+1−1 nixos/modules/config/users-groups.nix+53−17 nixos/modules/config/xdg/mime.nix+64−2 nixos/modules/config/xdg/portal.nix+23−12 nixos/modules/config/xdg/portals/wlr.nix+1−1 nixos/modules/hardware/all-firmware.nix+11−6 nixos/modules/hardware/ckb-next.nix+1−1 nixos/modules/hardware/cpu/intel-sgx.nix+69 nixos/modules/hardware/device-tree.nix+5−5 nixos/modules/hardware/digitalbitbox.nix+1−1 nixos/modules/hardware/flirc.nix+12 nixos/modules/hardware/gkraken.nix+18 nixos/modules/hardware/gpgsmartcards.nix+37 nixos/modules/hardware/hackrf.nix+23 nixos/modules/hardware/keyboard/zsa.nix−3 nixos/modules/hardware/network/b43.nix−4 nixos/modules/hardware/onlykey/onlykey.udev+2−2 nixos/modules/hardware/opengl.nix+2−2 nixos/modules/hardware/opentabletdriver.nix+1−1 nixos/modules/hardware/pcmcia.nix+1 nixos/modules/hardware/printers.nix+6−11 nixos/modules/hardware/raid/hpsa.nix+4−1 nixos/modules/hardware/rtl-sdr.nix+8−4 nixos/modules/hardware/sata.nix+1−1 nixos/modules/hardware/system-76.nix+6−2 nixos/modules/hardware/video/amdgpu-pro.nix+25−22 nixos/modules/hardware/video/capture/mwprocapture.nix−5 nixos/modules/hardware/video/hidpi.nix−1 nixos/modules/hardware/video/nvidia.nix+34−23 nixos/modules/hardware/video/uvcvideo/default.nix+1−1 nixos/modules/hardware/video/webcam/facetimehd.nix+14−6 nixos/modules/hardware/xone.nix+23 nixos/modules/i18n/input-method/fcitx.nix+4−1 nixos/modules/i18n/input-method/fcitx5.nix+21−12 nixos/modules/i18n/input-method/ibus.nix+5−2 nixos/modules/i18n/input-method/kime.nix+4−2 nixos/modules/installer/cd-dvd/channel.nix+2−1 nixos/modules/installer/cd-dvd/installation-cd-graphical-base.nix+14−8 nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-gnome.nix+59 nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-plasma5.nix+49 nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares.nix+20 nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix+3−5 nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix+1−3 nixos/modules/installer/cd-dvd/iso-image.nix+42−32 nixos/modules/installer/cd-dvd/system-tarball-fuloong2f.nix+1−1 nixos/modules/installer/cd-dvd/system-tarball-pc.nix+1−1 nixos/modules/installer/cd-dvd/system-tarball-sheevaplug.nix+4−4 nixos/modules/installer/cd-dvd/system-tarball.nix+2−2 nixos/modules/installer/kexec/kexec-boot.nix+51 nixos/modules/installer/netboot/netboot.nix+4−2 nixos/modules/installer/sd-card/sd-image-aarch64.nix+15 nixos/modules/installer/sd-card/sd-image-raspberrypi.nix+1−1 nixos/modules/installer/sd-card/sd-image-riscv64-qemu-installer.nix+10 nixos/modules/installer/sd-card/sd-image-riscv64-qemu.nix+32 nixos/modules/installer/sd-card/sd-image-x86_64.nix+27 nixos/modules/installer/sd-card/sd-image.nix+5−5 nixos/modules/installer/tools/nix-fallback-paths.nix+5−5 nixos/modules/installer/tools/nixos-build-vms/build-vms.nix+18−5 nixos/modules/installer/tools/nixos-build-vms/nixos-build-vms.sh+4−3 nixos/modules/installer/tools/nixos-enter.sh+33−1 nixos/modules/installer/tools/nixos-generate-config.pl+24−6 nixos/modules/installer/tools/nixos-install.sh+19−18 nixos/modules/installer/tools/nixos-version.sh+1 nixos/modules/installer/tools/tools.nix+28−4 nixos/modules/installer/virtualbox-demo.nix+1−1 nixos/modules/misc/documentation.nix+128−61 nixos/modules/misc/extra-arguments.nix+2−2 nixos/modules/misc/ids.nix+58−52 nixos/modules/misc/locate.nix+134−69 nixos/modules/misc/man-db.nix+73 nixos/modules/misc/mandoc.nix+61 nixos/modules/misc/meta.nix+16−1 nixos/modules/misc/nixpkgs.nix+17−9 nixos/modules/misc/nixpkgs/test.nix+8 nixos/modules/misc/version.nix+52−19 nixos/modules/misc/wordlist.nix+59 nixos/modules/module-list.nix+128−29 nixos/modules/profiles/all-hardware.nix+5−2 nixos/modules/profiles/base.nix+1 nixos/modules/profiles/hardened.nix+1−1 nixos/modules/profiles/installation-device.nix+4 nixos/modules/profiles/minimal.nix+2 nixos/modules/profiles/qemu-guest.nix+2−2 nixos/modules/programs/_1password-gui.nix+68 nixos/modules/programs/_1password.nix+44 nixos/modules/programs/adb.nix+1−2 nixos/modules/programs/atop.nix+11−4 nixos/modules/programs/bandwhich.nix+3−1 nixos/modules/programs/bcc.nix+3−3 nixos/modules/programs/calls.nix+2 nixos/modules/programs/captive-browser.nix+38−14 nixos/modules/programs/ccache.nix+2 nixos/modules/programs/chromium.nix+13−2 nixos/modules/programs/cnping.nix+21 nixos/modules/programs/command-not-found/command-not-found.pl+37−12 nixos/modules/programs/dconf.nix+1−1 nixos/modules/programs/digitalbitbox/default.nix+1−1 nixos/modules/programs/dmrconfig.nix+1−1 nixos/modules/programs/environment.nix+8−2 nixos/modules/programs/evince.nix+13−4 nixos/modules/programs/extra-container.nix+17 nixos/modules/programs/feedbackd.nix+1 nixos/modules/programs/file-roller.nix+13−4 nixos/modules/programs/firejail.nix+15−8 nixos/modules/programs/flexoptix-app.nix+1−1 nixos/modules/programs/freetds.nix+1−1 nixos/modules/programs/gamemode.nix+3−1 nixos/modules/programs/git.nix+69 nixos/modules/programs/gnupg.nix+4−1 nixos/modules/programs/htop.nix+58 nixos/modules/programs/iftop.nix+3−1 nixos/modules/programs/iotop.nix+3−1 nixos/modules/programs/java.nix+1−1 nixos/modules/programs/k3b.nix+52 nixos/modules/programs/k40-whisperer.nix+40 nixos/modules/programs/kbdlight.nix+6−1 nixos/modules/programs/kclock.nix+13 nixos/modules/programs/kdeconnect.nix+2−2 nixos/modules/programs/less.nix+9−6 nixos/modules/programs/liboping.nix+3−1 nixos/modules/programs/mininet.nix+2−2 nixos/modules/programs/mosh.nix+1−1 nixos/modules/programs/msmtp.nix+2 nixos/modules/programs/mtr.nix+4−1 nixos/modules/programs/nbd.nix+19 nixos/modules/programs/neovim.nix+28−16 nixos/modules/programs/nethoscope.nix+30 nixos/modules/programs/nix-ld.nix+12 nixos/modules/programs/nncp.nix+101 nixos/modules/programs/noisetorch.nix+4−1 nixos/modules/programs/npm.nix+3−2 nixos/modules/programs/pantheon-tweaks.nix+19 nixos/modules/programs/phosh.nix+9−10 nixos/modules/programs/plotinus.nix+1−1 nixos/modules/programs/proxychains.nix+1−1 nixos/modules/programs/qt5ct.nix+1−1 nixos/modules/programs/shadow.nix+15−8 nixos/modules/programs/singularity.nix+6−1 nixos/modules/programs/slock.nix+6−1 nixos/modules/programs/spacefm.nix+6−6 nixos/modules/programs/ssh.nix+71−17 nixos/modules/programs/ssmtp.nix−188 nixos/modules/programs/starship.nix+51 nixos/modules/programs/sway.nix+7−4 nixos/modules/programs/thefuck.nix+7−6 nixos/modules/programs/tilp2.nix−28 nixos/modules/programs/tmux.nix+14−1 nixos/modules/programs/traceroute.nix+3−1 nixos/modules/programs/tsm-client.nix+8−8 nixos/modules/programs/udevil.nix+6−1 nixos/modules/programs/vim.nix+2−2 nixos/modules/programs/wavemon.nix+3−1 nixos/modules/programs/weylus.nix+47 nixos/modules/programs/wireshark.nix+1−1 nixos/modules/programs/wshowkeys.nix+6−1 nixos/modules/programs/xonsh.nix+2−1 nixos/modules/programs/xss-lock.nix+2−1 nixos/modules/programs/xwayland.nix+4−5 nixos/modules/programs/yabar.nix+2−1 nixos/modules/programs/zsh/oh-my-zsh.nix+1−1 nixos/modules/programs/zsh/zsh-autoenv.nix+1−1 nixos/modules/programs/zsh/zsh-autosuggestions.nix+20−11 nixos/modules/programs/zsh/zsh-syntax-highlighting.nix+2−2 nixos/modules/programs/zsh/zsh.nix+5−16 nixos/modules/rename.nix+63−44 nixos/modules/security/acme.nix−810 nixos/modules/security/acme.xml−298 nixos/modules/security/acme/default.nix+921 nixos/modules/security/acme/doc.xml+413 nixos/modules/security/acme/mk-cert-ownership-assertion.nix+4 nixos/modules/security/ca.nix+11−12 nixos/modules/security/chromium-suid-sandbox.nix+6−1 nixos/modules/security/dhparams.nix+5−3 nixos/modules/security/doas.nix+8−5 nixos/modules/security/duosec.nix+6−1 nixos/modules/security/google_oslogin.nix+6−3 nixos/modules/security/lock-kernel-modules.nix+19−9 nixos/modules/security/misc.nix+2−2 nixos/modules/security/pam.nix+424−150 nixos/modules/security/pam_mount.nix+80−8 nixos/modules/security/pam_usb.nix+12−2 nixos/modules/security/polkit.nix+13−7 nixos/modules/security/rtkit.nix+4−1 nixos/modules/security/sudo.nix+3−3 nixos/modules/security/systemd-confinement.nix+6−8 nixos/modules/security/tpm2.nix+5−5 nixos/modules/security/wrappers/default.nix+189−98 nixos/modules/services/admin/meshcentral.nix+1−1 nixos/modules/services/admin/oxidized.nix+2−2 nixos/modules/services/admin/pgadmin.nix+127 nixos/modules/services/amqp/activemq/default.nix+2−1 nixos/modules/services/amqp/rabbitmq.nix+10−21 nixos/modules/services/audio/botamusique.nix+1 nixos/modules/services/audio/hqplayerd.nix+1−1 nixos/modules/services/audio/icecast.nix+1 nixos/modules/services/audio/jack.nix+3−3 nixos/modules/services/audio/jmusicbot.nix+8−1 nixos/modules/services/audio/liquidsoap.nix+3−3 nixos/modules/services/audio/mopidy.nix+1−1 nixos/modules/services/audio/mpd.nix+24−44 nixos/modules/services/audio/mpdscribble.nix+12−1 nixos/modules/services/audio/navidrome.nix+1−1 nixos/modules/services/audio/roon-server.nix+5−2 nixos/modules/services/audio/slimserver.nix+1−1 nixos/modules/services/audio/snapserver.nix+31−23 nixos/modules/services/audio/spotifyd.nix+26−1 nixos/modules/services/audio/squeezelite.nix+17−21 nixos/modules/services/audio/ympd.nix+1−1 nixos/modules/services/backup/automysqlbackup.nix+3−2 nixos/modules/services/backup/bacula.nix+3 nixos/modules/services/backup/borgbackup.nix+76−22 nixos/modules/services/backup/btrbk.nix+1−1 nixos/modules/services/backup/duplicati.nix+26−9 nixos/modules/services/backup/mysql-backup.nix+2−1 nixos/modules/services/backup/postgresql-backup.nix+1−1 nixos/modules/services/backup/postgresql-wal-receiver.nix+5−5 nixos/modules/services/backup/restic-rest-server.nix+5−1 nixos/modules/services/backup/restic.nix+17−5 nixos/modules/services/backup/sanoid.nix+11−3 nixos/modules/services/backup/syncoid.nix+66−15 nixos/modules/services/backup/tarsnap.nix+25−18 nixos/modules/services/backup/tsm.nix+33−14 nixos/modules/services/backup/znapzend.nix+7−7 nixos/modules/services/backup/zrepl.nix+3 nixos/modules/services/blockchain/ethereum/geth.nix+1 nixos/modules/services/cluster/corosync/default.nix+112 nixos/modules/services/cluster/hadoop/conf.nix+25−12 nixos/modules/services/cluster/hadoop/default.nix+175−23 nixos/modules/services/cluster/hadoop/hdfs.nix+175−44 nixos/modules/services/cluster/hadoop/yarn.nix+155−29 nixos/modules/services/cluster/k3s/default.nix+2−7 nixos/modules/services/cluster/kubernetes/addon-manager.nix+4−3 nixos/modules/services/cluster/kubernetes/addons/dashboard.nix−332 nixos/modules/services/cluster/kubernetes/addons/dns.nix+24−15 nixos/modules/services/cluster/kubernetes/apiserver.nix+7−1 nixos/modules/services/cluster/kubernetes/controller-manager.nix+7−1 nixos/modules/services/cluster/kubernetes/default.nix+31−21 nixos/modules/services/cluster/kubernetes/flannel.nix+2 nixos/modules/services/cluster/kubernetes/kubelet.nix+11−3 nixos/modules/services/cluster/kubernetes/pki.nix+4−1 nixos/modules/services/cluster/kubernetes/proxy.nix+6−1 nixos/modules/services/cluster/kubernetes/scheduler.nix+7−3 nixos/modules/services/cluster/pacemaker/default.nix+52 nixos/modules/services/cluster/spark/default.nix+162 nixos/modules/services/computing/boinc/client.nix+2−2 nixos/modules/services/computing/foldingathome/client.nix+1−1 nixos/modules/services/computing/slurm/slurm.nix+18−9 nixos/modules/services/continuous-integration/buildbot/master.nix+11−8 nixos/modules/services/continuous-integration/buildbot/worker.nix+6−4 nixos/modules/services/continuous-integration/buildkite-agents.nix+4−3 nixos/modules/services/continuous-integration/github-runner.nix+48−35 nixos/modules/services/continuous-integration/gitlab-runner.nix+15−8 nixos/modules/services/continuous-integration/gocd-agent/default.nix+12−2 nixos/modules/services/continuous-integration/gocd-server/default.nix+17−2 nixos/modules/services/continuous-integration/hail.nix+1−1 nixos/modules/services/continuous-integration/hercules-ci-agent/common.nix+74−18 nixos/modules/services/continuous-integration/hercules-ci-agent/default.nix+4−4 nixos/modules/services/continuous-integration/hydra/default.nix+18−14 nixos/modules/services/continuous-integration/jenkins/default.nix+3−3 nixos/modules/services/continuous-integration/jenkins/job-builder.nix+2−2 nixos/modules/services/continuous-integration/jenkins/slave.nix+15−1 nixos/modules/services/databases/aerospike.nix+1−1 nixos/modules/services/databases/cassandra.nix+6−4 nixos/modules/services/databases/clickhouse.nix+13−4 nixos/modules/services/databases/cockroachdb.nix+38−30 nixos/modules/services/databases/couchdb.nix+22−5 nixos/modules/services/databases/firebird.nix+3−5 nixos/modules/services/databases/hbase.nix+39−17 nixos/modules/services/databases/influxdb.nix+4−4 nixos/modules/services/databases/influxdb2.nix+18−5 nixos/modules/services/databases/memcached.nix+2 nixos/modules/services/databases/monetdb.nix+1−1 nixos/modules/services/databases/mongodb.nix+4−2 nixos/modules/services/databases/mysql.nix+191−201 nixos/modules/services/databases/neo4j.nix+12−2 nixos/modules/services/databases/openldap.nix+7−6 nixos/modules/services/databases/opentsdb.nix+1−2 nixos/modules/services/databases/pgmanage.nix+1−1 nixos/modules/services/databases/postgresql.nix+11−9 nixos/modules/services/databases/postgresql.xml+54−32 nixos/modules/services/databases/redis.nix+275−222 nixos/modules/services/databases/riak.nix+1−2 nixos/modules/services/databases/victoriametrics.nix+1−1 nixos/modules/services/databases/virtuoso.nix−99 nixos/modules/services/desktops/cpupower-gui.nix+56 nixos/modules/services/desktops/flatpak.nix+2 nixos/modules/services/desktops/geoclue2.nix+1−3 nixos/modules/services/desktops/gnome/evolution-data-server.nix+1−1 nixos/modules/services/desktops/gnome/glib-networking.nix+1−1 nixos/modules/services/desktops/gnome/gnome-keyring.nix+3−1 nixos/modules/services/desktops/gnome/gnome-settings-daemon.nix+4−18 nixos/modules/services/desktops/gnome/tracker-miners.nix+2 nixos/modules/services/desktops/gnome/tracker.nix+24−1 nixos/modules/services/desktops/gsignond.nix+1−1 nixos/modules/services/desktops/gvfs.nix+3−2 nixos/modules/services/desktops/pantheon/files.nix−13 nixos/modules/services/desktops/pipewire/bluez-hardware.conf.json−243 nixos/modules/services/desktops/pipewire/client-rt.conf.json → nixos/modules/services/desktops/pipewire/daemon/client-rt.conf.json+1−1 nixos/modules/services/desktops/pipewire/client.conf.json → nixos/modules/services/desktops/pipewire/daemon/client.conf.json nixos/modules/services/desktops/pipewire/jack.conf.json → nixos/modules/services/desktops/pipewire/daemon/jack.conf.json nixos/modules/services/desktops/pipewire/daemon/minimal.conf.json+118 nixos/modules/services/desktops/pipewire/daemon/pipewire-pulse.conf.json+100 nixos/modules/services/desktops/pipewire/pipewire.conf.json → nixos/modules/services/desktops/pipewire/daemon/pipewire.conf.json+5−2 nixos/modules/services/desktops/pipewire/alsa-monitor.conf.json → nixos/modules/services/desktops/pipewire/media-session/alsa-monitor.conf.json nixos/modules/services/desktops/pipewire/bluez-monitor.conf.json → nixos/modules/services/desktops/pipewire/media-session/bluez-monitor.conf.json nixos/modules/services/desktops/pipewire/media-session.conf.json → nixos/modules/services/desktops/pipewire/media-session/media-session.conf.json nixos/modules/services/desktops/pipewire/v4l2-monitor.conf.json → nixos/modules/services/desktops/pipewire/media-session/v4l2-monitor.conf.json nixos/modules/services/desktops/pipewire/pipewire-media-session.nix+29−23 nixos/modules/services/desktops/pipewire/pipewire-pulse.conf.json−42 nixos/modules/services/desktops/pipewire/pipewire.nix+72−12 nixos/modules/services/desktops/pipewire/wireplumber.nix+54 nixos/modules/services/development/blackfire.nix+4−9 nixos/modules/services/development/blackfire.xml+2−1 nixos/modules/services/development/distccd.nix+1−1 nixos/modules/services/development/hoogle.nix+4−3 nixos/modules/services/development/jupyter/default.nix+4−5 nixos/modules/services/development/jupyter/kernel-options.nix+4−4 nixos/modules/services/development/jupyterhub/default.nix+20−8 nixos/modules/services/development/lorri.nix+1−2 nixos/modules/services/development/rstudio-server/default.nix+107 nixos/modules/services/development/zammad.nix+323 nixos/modules/services/display-managers/greetd.nix+9−4 nixos/modules/services/editors/emacs.nix+1−1 nixos/modules/services/editors/haste.nix+86 nixos/modules/services/editors/infinoted.nix+1−1 nixos/modules/services/finance/odoo.nix+122 nixos/modules/services/games/asf.nix+236 nixos/modules/services/games/crossfire-server.nix+179 nixos/modules/services/games/deliantra-server.nix+172 nixos/modules/services/games/factorio.nix+14−5 nixos/modules/services/games/minecraft-server.nix+29−6 nixos/modules/services/games/quake3-server.nix+1 nixos/modules/services/games/terraria.nix+3−2 nixos/modules/services/hardware/acpid.nix+1−1 nixos/modules/services/hardware/actkbd.nix+1−1 nixos/modules/services/hardware/bluetooth.nix+3−7 nixos/modules/services/hardware/ddccontrol.nix+3 nixos/modules/services/hardware/fancontrol.nix+1 nixos/modules/services/hardware/freefall.nix+1−1 nixos/modules/services/hardware/fwupd.nix+2−1 nixos/modules/services/hardware/interception-tools.nix+1 nixos/modules/services/hardware/joycond.nix+36 nixos/modules/services/hardware/lirc.nix+1−1 nixos/modules/services/hardware/pcscd.nix+2−2 nixos/modules/services/hardware/power-profiles-daemon.nix+2 nixos/modules/services/hardware/rasdaemon.nix+170 nixos/modules/services/hardware/sane.nix+2−1 nixos/modules/services/hardware/sane_extra_backends/brscan4.nix+4−4 nixos/modules/services/hardware/sane_extra_backends/brscan5.nix+4−4 nixos/modules/services/hardware/spacenavd.nix−1 nixos/modules/services/hardware/tcsd.nix+7−5 nixos/modules/services/hardware/thermald.nix+4−2 nixos/modules/services/hardware/thinkfan.nix+2−2 nixos/modules/services/hardware/triggerhappy.nix+2−2 nixos/modules/services/hardware/udev.nix+127−24 nixos/modules/services/hardware/udisks2.nix+41 nixos/modules/services/hardware/undervolt.nix+2−4 nixos/modules/services/hardware/upower.nix+7−8 nixos/modules/services/hardware/usbrelayd.nix+44 nixos/modules/services/hardware/vdr.nix+2−2 nixos/modules/services/home-automation/home-assistant.nix+552 nixos/modules/services/misc/zigbee2mqtt.nix → nixos/modules/services/home-automation/zigbee2mqtt.nix+6−9 nixos/modules/services/logging/SystemdJournal2Gelf.nix+1 nixos/modules/services/logging/awstats.nix+4−4 nixos/modules/services/logging/filebeat.nix+253 nixos/modules/services/logging/fluentd.nix+1−1 nixos/modules/services/logging/graylog.nix+5−4 nixos/modules/services/logging/journalbeat.nix+4−17 nixos/modules/services/logging/journalwatch.nix+1 nixos/modules/services/logging/klogd.nix+6−34 nixos/modules/services/logging/logcheck.nix+6−2 nixos/modules/services/logging/logrotate.nix+267−33 nixos/modules/services/logging/logstash.nix+23−9 nixos/modules/services/logging/promtail.nix+5−1 nixos/modules/services/logging/syslog-ng.nix+2−2 nixos/modules/services/mail/davmail.nix+1−1 nixos/modules/services/mail/dovecot.nix+18−44 nixos/modules/services/mail/exim.nix+8−3 nixos/modules/services/mail/maddy.nix+273 nixos/modules/services/mail/mail.nix+2−1 nixos/modules/services/mail/mailman.nix+16−9 nixos/modules/services/mail/offlineimap.nix+2−2 nixos/modules/services/mail/opendkim.nix+1 nixos/modules/services/mail/opensmtpd.nix+5−2 nixos/modules/services/mail/postfix.nix+30−20 nixos/modules/services/mail/postfixadmin.nix+1−1 nixos/modules/services/mail/roundcube.nix+5−4 nixos/modules/services/mail/rspamd.nix+6−9 nixos/modules/services/mail/sympa.nix+4−4 nixos/modules/services/misc/matrix-synapse-log_config.yaml → nixos/modules/services/matrix/matrix-synapse-log_config.yaml nixos/modules/services/matrix/matrix-synapse.nix+773 nixos/modules/services/misc/matrix-synapse.xml → nixos/modules/services/matrix/matrix-synapse.xml+18−17 nixos/modules/services/matrix/mjolnir.nix+242 nixos/modules/services/matrix/mjolnir.xml+134 nixos/modules/services/matrix/pantalaimon-options.nix+70 nixos/modules/services/matrix/pantalaimon.nix+70 nixos/modules/services/misc/airsonic.nix+13−8 nixos/modules/services/misc/ananicy.nix+107 nixos/modules/services/misc/ankisyncd.nix+1−1 nixos/modules/services/misc/apache-kafka.nix+5−3 nixos/modules/services/misc/autofs.nix+1−1 nixos/modules/services/misc/autorandr.nix+309−2 nixos/modules/services/misc/bees.nix+5−2 nixos/modules/services/misc/cfdyndns.nix+1−1 nixos/modules/services/misc/cgminer.nix+7−3 nixos/modules/services/misc/clipcat.nix+1−1 nixos/modules/services/misc/clipmenu.nix+1−1 nixos/modules/services/misc/confd.nix+1−1 nixos/modules/services/misc/couchpotato.nix−42 nixos/modules/services/misc/dendrite.nix+100−8 nixos/modules/services/misc/dictd.nix+2−2 nixos/modules/services/misc/disnix.nix+1−2 nixos/modules/services/misc/docker-registry.nix+2 nixos/modules/services/misc/dwm-status.nix+2−2 nixos/modules/services/misc/dysnomia.nix+6 nixos/modules/services/misc/etcd.nix+13−3 nixos/modules/services/misc/etebase-server.nix+4−4 nixos/modules/services/misc/ethminer.nix+4−4 nixos/modules/services/misc/exhibitor.nix+4−1 nixos/modules/services/misc/felix.nix+1−1 nixos/modules/services/misc/freeswitch.nix+4−5 nixos/modules/services/misc/gammu-smsd.nix+2−2 nixos/modules/services/misc/gitea.nix+46−26 nixos/modules/services/misc/gitit.nix+27−27 nixos/modules/services/misc/gitlab.nix+91−30 nixos/modules/services/misc/gitolite.nix+7−5 nixos/modules/services/misc/gitweb.nix+1 nixos/modules/services/misc/gogs.nix+4−1 nixos/modules/services/misc/gollum.nix+1 nixos/modules/services/misc/gpsd.nix+1 nixos/modules/services/misc/greenclip.nix+1−1 nixos/modules/services/misc/headphones.nix+3−1 nixos/modules/services/misc/heisenbridge.nix+222 nixos/modules/services/misc/home-assistant.nix−402 nixos/modules/services/misc/ihaskell.nix+4−3 nixos/modules/services/misc/input-remapper.nix+30 nixos/modules/services/misc/jackett.nix+1−1 nixos/modules/services/misc/jellyfin.nix+6−4 nixos/modules/services/misc/klipper.nix+1 nixos/modules/services/misc/lidarr.nix+1−1 nixos/modules/services/misc/mame.nix+3−1 nixos/modules/services/misc/matrix-appservice-discord.nix+7−2 nixos/modules/services/misc/matrix-appservice-irc.nix+3 nixos/modules/services/misc/matrix-conduit.nix+149 nixos/modules/services/misc/matrix-synapse.nix−778 nixos/modules/services/misc/mautrix-facebook.nix+195 nixos/modules/services/misc/mautrix-telegram.nix+5−2 nixos/modules/services/misc/mbpfan.nix+59−61 nixos/modules/services/misc/mediatomb.nix+10−7 nixos/modules/services/misc/moonraker.nix+44−1 nixos/modules/services/misc/mwlib.nix−258 nixos/modules/services/misc/mx-puppet-discord.nix+9−7 nixos/modules/services/misc/n8n.nix+2−1 nixos/modules/services/misc/nitter.nix+12−5 nixos/modules/services/misc/nix-daemon.nix+508−282 nixos/modules/services/misc/nix-gc.nix+9−3 nixos/modules/services/misc/nix-optimise.nix+8−2 nixos/modules/services/misc/nix-ssh-serve.nix+4−2 nixos/modules/services/misc/nzbhydra2.nix+1−1 nixos/modules/services/misc/octoprint.nix+2−2 nixos/modules/services/misc/owncast.nix+98 nixos/modules/services/misc/packagekit.nix+4−2 nixos/modules/services/misc/paperless-ng.nix−308 nixos/modules/services/misc/paperless.nix+320 nixos/modules/services/misc/plex.nix+43−14 nixos/modules/services/misc/prowlarr.nix+41 nixos/modules/services/misc/redmine.nix+9−8 nixos/modules/services/misc/ripple-data-api.nix+3−1 nixos/modules/services/misc/rippled.nix+11−5 nixos/modules/services/misc/rmfakecloud.nix+147 nixos/modules/services/misc/safeeyes.nix+4 nixos/modules/services/misc/sickbeard.nix+6−3 nixos/modules/services/misc/signald.nix+105 nixos/modules/services/misc/snapper.nix+42−19 nixos/modules/services/misc/sourcehut/builds.nix+5−3 nixos/modules/services/misc/sourcehut/default.nix+1321−133 nixos/modules/services/misc/sourcehut/dispatch.nix+3−1 nixos/modules/services/misc/sourcehut/git.nix+6−3 nixos/modules/services/misc/sourcehut/hg.nix+3−1 nixos/modules/services/misc/sourcehut/hub.nix+3−1 nixos/modules/services/misc/sourcehut/lists.nix+3−1 nixos/modules/services/misc/sourcehut/man.nix+3−1 nixos/modules/services/misc/sourcehut/meta.nix+3−1 nixos/modules/services/misc/sourcehut/paste.nix+3−1 nixos/modules/services/misc/sourcehut/service.nix+370−61 nixos/modules/services/misc/sourcehut/sourcehut.xml+14−10 nixos/modules/services/misc/sourcehut/todo.nix+3−1 nixos/modules/services/misc/ssm-agent.nix+1−1 nixos/modules/services/misc/subsonic.nix+8−4 nixos/modules/services/misc/taskserver/default.nix+15−10 nixos/modules/services/misc/taskserver/doc.xml+1−1 nixos/modules/services/misc/taskserver/helper-tool.py+5−5 nixos/modules/services/misc/tautulli.nix+1−1 nixos/modules/services/misc/tp-auto-kbbl.nix+58 nixos/modules/services/misc/uhub.nix+1−1 nixos/modules/services/misc/weechat.nix+9−5 nixos/modules/services/misc/xmr-stak.nix+1−1 nixos/modules/services/misc/xmrig.nix+76 nixos/modules/services/misc/zoneminder.nix+4−4 nixos/modules/services/misc/zookeeper.nix+12−3 nixos/modules/services/monitoring/alerta.nix−4 nixos/modules/services/monitoring/arbtt.nix+1−2 nixos/modules/services/monitoring/bosun.nix+1−2 nixos/modules/services/monitoring/cadvisor.nix+2 nixos/modules/services/monitoring/collectd.nix+56−28 nixos/modules/services/monitoring/datadog-agent.nix+9−7 nixos/modules/services/monitoring/grafana-reporter.nix+3−2 nixos/modules/services/monitoring/grafana.nix+13−6 nixos/modules/services/monitoring/graphite.nix+16−4 nixos/modules/services/monitoring/heapster.nix+4−2 nixos/modules/services/monitoring/incron.nix+7−2 nixos/modules/services/monitoring/kapacitor.nix+1−4 nixos/modules/services/monitoring/loki.nix+2−2 nixos/modules/services/monitoring/mackerel-agent.nix−1 nixos/modules/services/monitoring/metricbeat.nix+3−4 nixos/modules/services/monitoring/mimir.nix+63 nixos/modules/services/monitoring/munin.nix+7−5 nixos/modules/services/monitoring/nagios.nix+7−6 nixos/modules/services/monitoring/netdata.nix+82−42 nixos/modules/services/monitoring/parsedmarc.md+113 nixos/modules/services/monitoring/parsedmarc.nix+542 nixos/modules/services/monitoring/parsedmarc.xml+125 nixos/modules/services/monitoring/prometheus/alertmanager.nix+1−1 nixos/modules/services/monitoring/prometheus/default.nix+1258−380 nixos/modules/services/monitoring/prometheus/exporters.nix+29−3 nixos/modules/services/monitoring/prometheus/exporters.xml+21 nixos/modules/services/monitoring/prometheus/exporters/bird.nix+5−1 nixos/modules/services/monitoring/prometheus/exporters/buildkite-agent.nix+1−1 nixos/modules/services/monitoring/prometheus/exporters/dmarc.nix+117 nixos/modules/services/monitoring/prometheus/exporters/dovecot.nix+4 nixos/modules/services/monitoring/prometheus/exporters/fastly.nix+41 nixos/modules/services/monitoring/prometheus/exporters/flow.nix+1−1 nixos/modules/services/monitoring/prometheus/exporters/kea.nix+9−1 nixos/modules/services/monitoring/prometheus/exporters/knot.nix+5−1 nixos/modules/services/monitoring/prometheus/exporters/mail.nix+1−1 nixos/modules/services/monitoring/prometheus/exporters/mikrotik.nix+2−2 nixos/modules/services/monitoring/prometheus/exporters/modemmanager.nix+4 nixos/modules/services/monitoring/prometheus/exporters/nginx.nix+5−5 nixos/modules/services/monitoring/prometheus/exporters/node.nix+11−2 nixos/modules/services/monitoring/prometheus/exporters/pihole.nix+2−2 nixos/modules/services/monitoring/prometheus/exporters/postfix.nix+3 nixos/modules/services/monitoring/prometheus/exporters/postgres.nix+4 nixos/modules/services/monitoring/prometheus/exporters/process.nix+6−8 nixos/modules/services/monitoring/prometheus/exporters/pve.nix+118 nixos/modules/services/monitoring/prometheus/exporters/rspamd.nix+2−2 nixos/modules/services/monitoring/prometheus/exporters/rtl_433.nix+5 nixos/modules/services/monitoring/prometheus/exporters/script.nix+1−1 nixos/modules/services/monitoring/prometheus/exporters/smartctl.nix+75 nixos/modules/services/monitoring/prometheus/exporters/smokeping.nix+1 nixos/modules/services/monitoring/prometheus/exporters/snmp.nix+7−9 nixos/modules/services/monitoring/prometheus/exporters/sql.nix+4 nixos/modules/services/monitoring/prometheus/exporters/systemd.nix+5−1 nixos/modules/services/monitoring/prometheus/exporters/unbound.nix+4 nixos/modules/services/monitoring/prometheus/exporters/varnish.nix+3−2 nixos/modules/services/monitoring/prometheus/exporters/wireguard.nix+5 nixos/modules/services/monitoring/prometheus/pushgateway.nix+1−1 nixos/modules/services/monitoring/scollector.nix+2−3 nixos/modules/services/monitoring/smartd.nix+6−1 nixos/modules/services/monitoring/teamviewer.nix+6−3 nixos/modules/services/monitoring/telegraf.nix+2−2 nixos/modules/services/monitoring/thanos.nix+7−4 nixos/modules/services/monitoring/tuptime.nix+1 nixos/modules/services/monitoring/unifi-poller.nix+80−4 nixos/modules/services/monitoring/uptime.nix+7−3 nixos/modules/services/monitoring/zabbix-agent.nix+5−5 nixos/modules/services/monitoring/zabbix-proxy.nix+18−7 nixos/modules/services/monitoring/zabbix-server.nix+17−6 nixos/modules/services/network-filesystems/ceph.nix+12−22 nixos/modules/services/network-filesystems/drbd.nix+5−7 nixos/modules/services/network-filesystems/glusterfs.nix+1−4 nixos/modules/services/network-filesystems/ipfs.nix+53−39 nixos/modules/services/network-filesystems/litestream/default.nix+1−1 nixos/modules/services/network-filesystems/moosefs.nix+249 nixos/modules/services/network-filesystems/openafs/client.nix+7−8 nixos/modules/services/network-filesystems/openafs/server.nix+3−3 nixos/modules/services/network-filesystems/orangefs/client.nix−1 nixos/modules/services/network-filesystems/orangefs/server.nix+9−9 nixos/modules/services/network-filesystems/rsyncd.nix+1−1 nixos/modules/services/network-filesystems/samba.nix+17−6 nixos/modules/services/network-filesystems/tahoe.nix+2−4 nixos/modules/services/network-filesystems/webdav-server-rs.nix+144 nixos/modules/services/network-filesystems/webdav.nix+107 nixos/modules/services/network-filesystems/xtreemfs.nix+2−2 nixos/modules/services/networking/3proxy.nix+3−16 nixos/modules/services/networking/adguardhome.nix+67−5 nixos/modules/services/networking/amuled.nix+6−2 nixos/modules/services/networking/antennas.nix+80 nixos/modules/services/networking/asterisk.nix+13−45 nixos/modules/services/networking/atftpd.nix+1−1 nixos/modules/services/networking/avahi-daemon.nix+3−3 nixos/modules/services/networking/bee.nix+2−2 nixos/modules/services/networking/biboumi.nix+1 nixos/modules/services/networking/bind.nix+15−4 nixos/modules/services/networking/bird.nix+90−75 nixos/modules/services/networking/bitcoind.nix+2−2 nixos/modules/services/networking/bitlbee.nix+8−16 nixos/modules/services/networking/blockbook-frontend.nix+6−9 nixos/modules/services/networking/blocky.nix+40 nixos/modules/services/networking/charybdis.nix+8−1 nixos/modules/services/networking/cjdns.nix+2−2 nixos/modules/services/networking/cloudflare-dyndns.nix+93 nixos/modules/services/networking/connman.nix+5−4 nixos/modules/services/networking/consul.nix+40−10 nixos/modules/services/networking/coredns.nix+1−1 nixos/modules/services/networking/corerad.nix+3−3 nixos/modules/services/networking/coturn.nix+4−2 nixos/modules/services/networking/create_ap.nix+50 nixos/modules/services/networking/croc.nix+1−1 nixos/modules/services/networking/ddclient.nix+44−23 nixos/modules/services/networking/dhcpcd.nix+22−1 nixos/modules/services/networking/dhcpd.nix+49−50 nixos/modules/services/networking/dnscache.nix+1−1 nixos/modules/services/networking/dnscrypt-proxy2.nix+6−3 nixos/modules/services/networking/dnscrypt-wrapper.nix+2 nixos/modules/services/networking/dnsmasq.nix+3−1 nixos/modules/services/networking/doh-proxy-rust.nix+1−1 nixos/modules/services/networking/ejabberd.nix+2−2 nixos/modules/services/networking/envoy.nix+84 nixos/modules/services/networking/epmd.nix+1 nixos/modules/services/networking/ergo.nix+4−2 nixos/modules/services/networking/ergochat.nix+155 nixos/modules/services/networking/eternal-terminal.nix+2−2 nixos/modules/services/networking/ferm.nix+2−2 nixos/modules/services/networking/firefox/sync-server.nix−183 nixos/modules/services/networking/firewall.nix+4−9 nixos/modules/services/networking/flannel.nix+5−2 nixos/modules/services/networking/freeradius.nix+2 nixos/modules/services/networking/frr.nix+211 nixos/modules/services/networking/ghostunnel.nix+2−2 nixos/modules/services/networking/git-daemon.nix+1 nixos/modules/services/networking/globalprotect-vpn.nix+1−1 nixos/modules/services/networking/gnunet.nix+2−2 nixos/modules/services/networking/gobgpd.nix+1−1 nixos/modules/services/networking/gogoclient.nix−87 nixos/modules/services/networking/hans.nix+1−1 nixos/modules/services/networking/headscale.nix+490 nixos/modules/services/networking/https-dns-proxy.nix+128 nixos/modules/services/networking/hylafax/options.nix+11−13 nixos/modules/services/networking/i2pd.nix+17−10 nixos/modules/services/networking/icecream/daemon.nix+1−1 nixos/modules/services/networking/icecream/scheduler.nix+1−1 nixos/modules/services/networking/inspircd.nix+2−2 nixos/modules/services/networking/iodine.nix+2−1 nixos/modules/services/networking/ircd-hybrid/default.nix+2−2 nixos/modules/services/networking/iscsi/initiator.nix+1−1 nixos/modules/services/networking/iscsi/root-initiator.nix+9 nixos/modules/services/networking/iwd.nix+15−6 nixos/modules/services/networking/jibri/default.nix+417 nixos/modules/services/networking/jibri/logging.properties-journal+32 nixos/modules/services/networking/jicofo.nix+1−1 nixos/modules/services/networking/jitsi-videobridge.nix+5−3 nixos/modules/services/networking/kea.nix+81−9 nixos/modules/services/networking/keepalived/vrrp-instance-options.nix+1−3 nixos/modules/services/networking/keepalived/vrrp-script-options.nix+1−1 nixos/modules/services/networking/kippo.nix−117 nixos/modules/services/networking/knot.nix+43−8 nixos/modules/services/networking/kresd.nix+7−6 nixos/modules/services/networking/lambdabot.nix+1−1 nixos/modules/services/networking/libreswan.nix+2−2 nixos/modules/services/networking/lxd-image-server.nix+133 nixos/modules/services/networking/mailpile.nix−74 nixos/modules/services/networking/minidlna.nix+1−1 nixos/modules/services/networking/miredo.nix+1−1 nixos/modules/services/networking/monero.nix+1−1 nixos/modules/services/networking/morty.nix+4−5 nixos/modules/services/networking/mosquitto.md+102 nixos/modules/services/networking/mosquitto.nix+541−175 nixos/modules/services/networking/mosquitto.xml+147 nixos/modules/services/networking/mozillavpn.nix+19 nixos/modules/services/networking/mtr-exporter.nix+87 nixos/modules/services/networking/multipath.nix+557 nixos/modules/services/networking/murmur.nix+3−3 nixos/modules/services/networking/mxisd.nix+1−1 nixos/modules/services/networking/nat.nix+1−1 nixos/modules/services/networking/nats.nix+1−2 nixos/modules/services/networking/nbd.nix+159 nixos/modules/services/networking/ncdns.nix+6−3 nixos/modules/services/networking/ndppd.nix+1−1 nixos/modules/services/networking/nebula.nix+6−8 nixos/modules/services/networking/networkmanager.nix+75−61 nixos/modules/services/networking/nftables.nix+6−12 nixos/modules/services/networking/ngircd.nix+5−2 nixos/modules/services/networking/nix-serve.nix+19−5 nixos/modules/services/networking/nixops-dns.nix−1 nixos/modules/services/networking/nntp-proxy.nix+18−18 nixos/modules/services/networking/nomad.nix+20−7 nixos/modules/services/networking/nsd.nix+11−16 nixos/modules/services/networking/ntopng.nix+57−13 nixos/modules/services/networking/ntp/chrony.nix+2−1 nixos/modules/services/networking/ntp/ntpd.nix+8−7 nixos/modules/services/networking/ntp/openntpd.nix+4−1 nixos/modules/services/networking/ofono.nix+1−1 nixos/modules/services/networking/onedrive.nix+1−2 nixos/modules/services/networking/openconnect.nix+137 nixos/modules/services/networking/openfire.nix−56 nixos/modules/services/networking/openvpn.nix+1−1 nixos/modules/services/networking/ostinato.nix+2−2 nixos/modules/services/networking/pdns-recursor.nix+13−8 nixos/modules/services/networking/pleroma.nix+12−4 nixos/modules/services/networking/pleroma.xml+177−121 nixos/modules/services/networking/powerdns.nix+2−2 nixos/modules/services/networking/pppd.nix+1−1 nixos/modules/services/networking/privoxy.nix+1−1 nixos/modules/services/networking/prosody.nix+3−2 nixos/modules/services/networking/prosody.xml+1−1 nixos/modules/services/networking/quassel.nix+6−3 nixos/modules/services/networking/quorum.nix+5−3 nixos/modules/services/networking/racoon.nix−45 nixos/modules/services/networking/radicale.nix+9−5 nixos/modules/services/networking/radvd.nix+4−1 nixos/modules/services/networking/rdnssd.nix+3−1 nixos/modules/services/networking/resilio.nix+1 nixos/modules/services/networking/sabnzbd.nix+8−1 nixos/modules/services/networking/seafile.nix+287 nixos/modules/services/networking/searx.nix+3−4 nixos/modules/services/networking/shadowsocks.nix+4−6 nixos/modules/services/networking/shairport-sync.nix+29−2 nixos/modules/services/networking/shellhub-agent.nix+26−17 nixos/modules/services/networking/shorewall.nix+1−1 nixos/modules/services/networking/shorewall6.nix+1−1 nixos/modules/services/networking/shout.nix+3−1 nixos/modules/services/networking/skydns.nix+2−1 nixos/modules/services/networking/smartdns.nix+1−1 nixos/modules/services/networking/smokeping.nix+61−21 nixos/modules/services/networking/sniproxy.nix+6−17 nixos/modules/services/networking/snowflake-proxy.nix+81 nixos/modules/services/networking/softether.nix+1−1 nixos/modules/services/networking/soju.nix+1 nixos/modules/services/networking/spacecookie.nix+2−2 nixos/modules/services/networking/spiped.nix+1−1 nixos/modules/services/networking/squid.nix+23−4 nixos/modules/services/networking/ssh/sshd.nix+13−6 nixos/modules/services/networking/strongswan-swanctl/module.nix+1−1 nixos/modules/services/networking/strongswan-swanctl/swanctl-params.nix+10 nixos/modules/services/networking/strongswan.nix+2−2 nixos/modules/services/networking/stubby.nix+46−174 nixos/modules/services/networking/stunnel.nix+3−2 nixos/modules/services/networking/supplicant.nix+3−3 nixos/modules/services/networking/supybot.nix+4−3 nixos/modules/services/networking/syncplay.nix+18−2 nixos/modules/services/networking/syncthing.nix+28−8 nixos/modules/services/networking/tailscale.nix+10−2 nixos/modules/services/networking/teamspeak3.nix+20−2 nixos/modules/services/networking/tedicross.nix+1−1 nixos/modules/services/networking/teleport.nix+99 nixos/modules/services/networking/tetrd.nix+96 nixos/modules/services/networking/thelounge.nix+39−8 nixos/modules/services/networking/tinc.nix+6−6 nixos/modules/services/networking/tinydns.nix+5−1 nixos/modules/services/networking/tox-bootstrapd.nix+8−13 nixos/modules/services/networking/tox-node.nix+1−6 nixos/modules/services/networking/toxvpn.nix+4−2 nixos/modules/services/networking/trickster.nix+1−1 nixos/modules/services/networking/tvheadend.nix+3−1 nixos/modules/services/networking/ucarp.nix+5−5 nixos/modules/services/networking/unbound.nix+3−2 nixos/modules/services/networking/unifi.nix+47−62 nixos/modules/services/networking/v2ray.nix+13−5 nixos/modules/services/networking/vsftpd.nix+5−2 nixos/modules/services/networking/wakeonlan.nix−70 nixos/modules/services/networking/wasabibackend.nix+4−2 nixos/modules/services/networking/websockify.nix+1−1 nixos/modules/services/networking/wg-netmanager.nix+42 nixos/modules/services/networking/wg-quick.nix+12−13 nixos/modules/services/networking/wicd.nix−40 nixos/modules/services/networking/wireguard.nix+7−7 nixos/modules/services/networking/wpa_supplicant.nix+147−20 nixos/modules/services/networking/x2goserver.nix+10−7 nixos/modules/services/networking/xandikos.nix+2−2 nixos/modules/services/networking/xrdp.nix+9−3 nixos/modules/services/networking/yggdrasil.nix+1−1 nixos/modules/services/networking/yggdrasil.xml−1 nixos/modules/services/networking/zeronet.nix+3−5 nixos/modules/services/networking/zerotierone.nix+1−2 nixos/modules/services/networking/znc/default.nix+3−3 nixos/modules/services/networking/znc/options.nix+3−3 nixos/modules/services/printing/cupsd.nix+1−1 nixos/modules/services/scheduling/atd.nix+3−1 nixos/modules/services/scheduling/cron.nix+7−2 nixos/modules/services/scheduling/fcron.nix+3 nixos/modules/services/search/elasticsearch.nix+27−6 nixos/modules/services/search/hound.nix+13−11 nixos/modules/services/search/kibana.nix+9−4 nixos/modules/services/search/meilisearch.md+39 nixos/modules/services/search/meilisearch.nix+132 nixos/modules/services/search/meilisearch.xml+85 nixos/modules/services/search/solr.nix+1−1 nixos/modules/services/security/aesmd.nix+236 nixos/modules/services/security/certmgr.nix+2−2 nixos/modules/services/security/cfssl.nix+56−43 nixos/modules/services/security/clamav.nix+4−5 nixos/modules/services/security/fail2ban.nix+6−4 nixos/modules/services/security/fprintd.nix+2−2 nixos/modules/services/security/fprot.nix−82 nixos/modules/services/security/haka.nix+1−1 nixos/modules/services/security/haveged.nix+39−29 nixos/modules/services/security/hockeypuck.nix+3−1 nixos/modules/services/security/nginx-sso.nix+2−2 nixos/modules/services/security/oauth2_proxy.nix+10−5 nixos/modules/services/security/oauth2_proxy_nginx.nix+1 nixos/modules/services/security/opensnitch.nix+125 nixos/modules/services/security/physlock.nix+6−4 nixos/modules/services/security/privacyidea.nix+10−6 nixos/modules/services/security/shibboleth-sp.nix+1−1 nixos/modules/services/security/sks.nix+2−2 nixos/modules/services/security/sslmate-agent.nix+32 nixos/modules/services/security/step-ca.nix+13−1 nixos/modules/services/security/tor.nix+28−7 nixos/modules/services/security/torsocks.nix+1 nixos/modules/services/security/usbguard.nix+1−1 nixos/modules/services/security/vault.nix+8−2 nixos/modules/services/security/vaultwarden/default.nix+9−6 nixos/modules/services/security/yubikey-agent.nix+8−2 nixos/modules/services/system/cachix-agent/default.nix+57 nixos/modules/services/system/cloud-init.nix+15−1 nixos/modules/services/system/earlyoom.nix+134−97 nixos/modules/services/system/kerberos/heimdal.nix+1−1 nixos/modules/services/system/localtime.nix+2 nixos/modules/services/system/nscd.nix+20−9 nixos/modules/services/system/saslauthd.nix+1−1 nixos/modules/services/system/self-deploy.nix+3−2 nixos/modules/services/system/systembus-notify.nix+27 nixos/modules/services/torrent/deluge.nix+2−2 nixos/modules/services/torrent/flexget.nix+1−1 nixos/modules/services/torrent/magnetico.nix+3−1 nixos/modules/services/torrent/opentracker.nix+1−1 nixos/modules/services/torrent/peerflix.nix+8−2 nixos/modules/services/torrent/rtorrent.nix+4−2 nixos/modules/services/torrent/transmission.nix+225−135 nixos/modules/services/ttys/getty.nix+11−13 nixos/modules/services/ttys/kmscon.nix+24−5 nixos/modules/services/video/epgstation/default.nix+192−153 nixos/modules/services/video/epgstation/streaming.json+129−108 nixos/modules/services/video/mirakurun.nix+4−4 nixos/modules/services/video/replay-sorcery.nix+4−2 nixos/modules/services/video/rtsp-simple-server.nix+80 nixos/modules/services/video/unifi-video.nix+88−82 nixos/modules/services/wayland/cage.nix+6−1 nixos/modules/services/web-apps/atlassian/confluence.nix+2−2 nixos/modules/services/web-apps/atlassian/crowd.nix+2−2 nixos/modules/services/web-apps/atlassian/jira.nix+3−2 nixos/modules/services/web-apps/baget.nix+170 nixos/modules/services/web-apps/bookstack.nix+154−73 nixos/modules/services/web-apps/code-server.nix+139 nixos/modules/services/web-apps/cryptpad.nix+2−2 nixos/modules/services/web-apps/dex.nix+118 nixos/modules/services/web-apps/discourse.nix+59−29 nixos/modules/services/web-apps/discourse.xml+2−2 nixos/modules/services/web-apps/documize.nix+1 nixos/modules/services/web-apps/dokuwiki.nix+325−274 nixos/modules/services/web-apps/engelsystem.nix+2−2 nixos/modules/services/web-apps/ethercalc.nix+62 nixos/modules/services/web-apps/fluidd.nix+6−4 nixos/modules/services/web-apps/galene.nix+36−2 nixos/modules/services/web-apps/gerrit.nix+4−1 nixos/modules/services/web-apps/hedgedoc.nix+72−8 nixos/modules/services/web-apps/hledger-web.nix+2−2 nixos/modules/services/web-apps/icingaweb2/icingaweb2.nix+1−1 nixos/modules/services/web-apps/ihatemoney/default.nix+17−2 nixos/modules/services/web-apps/invidious.nix+264 nixos/modules/services/web-apps/invoiceplane.nix+305 nixos/modules/services/web-apps/isso.nix+2−2 nixos/modules/services/web-apps/jirafeau.nix+10−6 nixos/modules/services/web-apps/jitsi-meet.nix+127−11 nixos/modules/services/web-apps/jitsi-meet.xml+2−2 nixos/modules/services/web-apps/keycloak.nix+546−599 nixos/modules/services/web-apps/keycloak.xml+65−69 nixos/modules/services/web-apps/lemmy.md+34 nixos/modules/services/web-apps/lemmy.nix+236 nixos/modules/services/web-apps/lemmy.xml+56 nixos/modules/services/web-apps/limesurvey.nix+5−5 nixos/modules/services/web-apps/mastodon.nix+50−11 nixos/modules/services/web-apps/matomo.nix+36−17 nixos/modules/services/web-apps/mattermost.nix+145−37 nixos/modules/services/web-apps/mediawiki.nix+6−5 nixos/modules/services/web-apps/miniflux.nix+27−30 nixos/modules/services/web-apps/moinmoin.nix−304 nixos/modules/services/web-apps/moodle.nix+6−6 nixos/modules/services/web-apps/netbox.nix+265 nixos/modules/services/web-apps/nextcloud.nix+373−93 nixos/modules/services/web-apps/nextcloud.xml+7−1 nixos/modules/services/web-apps/nexus.nix+22 nixos/modules/services/web-apps/nifi.nix+318 nixos/modules/services/web-apps/node-red.nix+4−3 nixos/modules/services/web-apps/openwebrx.nix+34 nixos/modules/services/web-apps/peertube.nix+475 nixos/modules/services/web-apps/pgpkeyserver-lite.nix+5−2 nixos/modules/services/web-apps/pict-rs.md+88 nixos/modules/services/web-apps/pict-rs.nix+50 nixos/modules/services/web-apps/pict-rs.xml+162 nixos/modules/services/web-apps/plantuml-server.nix+21−4 nixos/modules/services/web-apps/plausible.nix+49−42 nixos/modules/services/web-apps/powerdns-admin.nix+152 nixos/modules/services/web-apps/prosody-filer.nix+86 nixos/modules/services/web-apps/restya-board.nix+1−4 nixos/modules/services/web-apps/rss-bridge.nix+2−4 nixos/modules/services/web-apps/selfoss.nix−1 nixos/modules/services/web-apps/shiori.nix+1−1 nixos/modules/services/web-apps/timetagger.nix+80 nixos/modules/services/web-apps/trac.nix−79 nixos/modules/services/web-apps/tt-rss.nix+4−6 nixos/modules/services/web-apps/vikunja.nix+3−3 nixos/modules/services/web-apps/whitebophir.nix+1−1 nixos/modules/services/web-apps/wordpress.nix+93−75 nixos/modules/services/web-apps/youtrack.nix+3−2 nixos/modules/services/web-apps/zabbix.nix+12−5 nixos/modules/services/web-servers/agate.nix+148 nixos/modules/services/web-servers/apache-httpd/default.nix+38−23 nixos/modules/services/web-servers/apache-httpd/vhost-options.nix+7−4 nixos/modules/services/web-servers/caddy/default.nix+247−128 nixos/modules/services/web-servers/caddy/vhost-options.nix+61−10 nixos/modules/services/web-servers/hydron.nix+1−1 nixos/modules/services/web-servers/lighttpd/cgit.nix+7−5 nixos/modules/services/web-servers/lighttpd/collectd.nix+5−1 nixos/modules/services/web-servers/lighttpd/default.nix+13−1 nixos/modules/services/web-servers/minio.nix+1−1 nixos/modules/services/web-servers/molly-brown.nix+1−1 nixos/modules/services/web-servers/nginx/default.nix+81−29 nixos/modules/services/web-servers/nginx/gitweb.nix+1−1 nixos/modules/services/web-servers/nginx/location-options.nix+2−2 nixos/modules/services/web-servers/nginx/vhost-options.nix+32−9 nixos/modules/services/web-servers/phpfpm/default.nix+5−5 nixos/modules/services/web-servers/pomerium.nix+7−3 nixos/modules/services/web-servers/shellinabox.nix−122 nixos/modules/services/web-servers/tomcat.nix+6−5 nixos/modules/services/web-servers/traefik.nix+3−3 nixos/modules/services/web-servers/trafficserver.nix−318 nixos/modules/services/web-servers/trafficserver/default.nix+310 nixos/modules/services/web-servers/trafficserver/ip_allow.json+36 nixos/modules/services/web-servers/trafficserver/logging.json+37 nixos/modules/services/web-servers/ttyd.nix+1−1 nixos/modules/services/web-servers/unit/default.nix+2−2 nixos/modules/services/web-servers/uwsgi.nix+10−12 nixos/modules/services/web-servers/varnish/default.nix+9−7 nixos/modules/services/web-servers/zope2.nix+6−2 nixos/modules/services/x11/clight.nix+8 nixos/modules/services/x11/desktop-managers/cde.nix+4−3 nixos/modules/services/x11/desktop-managers/cinnamon.nix+14−7 nixos/modules/services/x11/desktop-managers/default.nix+1−1 nixos/modules/services/x11/desktop-managers/enlightenment.nix+24−3 nixos/modules/services/x11/desktop-managers/gnome.nix+62−77 nixos/modules/services/x11/desktop-managers/gnome.xml−24 nixos/modules/services/x11/desktop-managers/kodi.nix+2−2 nixos/modules/services/x11/desktop-managers/lumina.nix+4 nixos/modules/services/x11/desktop-managers/lxqt.nix+12−3 nixos/modules/services/x11/desktop-managers/mate.nix+10−38 nixos/modules/services/x11/desktop-managers/none.nix+44−5 nixos/modules/services/x11/desktop-managers/pantheon.nix+37−22 nixos/modules/services/x11/desktop-managers/pantheon.xml+11−5 nixos/modules/services/x11/desktop-managers/plasma5.nix+330−131 nixos/modules/services/x11/desktop-managers/retroarch.nix+40 nixos/modules/services/x11/desktop-managers/surf-display.nix+2−1 nixos/modules/services/x11/desktop-managers/xfce.nix+10−3 nixos/modules/services/x11/desktop-managers/xterm.nix+2−2 nixos/modules/services/x11/display-managers/default.nix+16−11 nixos/modules/services/x11/display-managers/gdm.nix+38−55 nixos/modules/services/x11/display-managers/lightdm-greeters/enso-os.nix+3−3 nixos/modules/services/x11/display-managers/lightdm-greeters/gtk.nix+3−3 nixos/modules/services/x11/display-managers/lightdm.nix+5−3 nixos/modules/services/x11/display-managers/sddm.nix+9−8 nixos/modules/services/x11/display-managers/startx.nix−3 nixos/modules/services/x11/display-managers/sx.nix+2−5 nixos/modules/services/x11/extra-layouts.nix+9−48 nixos/modules/services/x11/hardware/libinput.nix+20−4 nixos/modules/services/x11/hardware/synaptics.nix+6−1 nixos/modules/services/x11/imwheel.nix+11−9 nixos/modules/services/x11/picom.nix+13−3 nixos/modules/services/x11/redshift.nix+1−1 nixos/modules/services/x11/touchegg.nix+38 nixos/modules/services/x11/unclutter-xfixes.nix+1−1 nixos/modules/services/x11/unclutter.nix+1−1 nixos/modules/services/x11/urxvtd.nix+1−1 nixos/modules/services/x11/window-managers/awesome.nix+1−1 nixos/modules/services/x11/window-managers/bspwm.nix+6−6 nixos/modules/services/x11/window-managers/clfswm.nix+1−1 nixos/modules/services/x11/window-managers/exwm.nix+4−3 nixos/modules/services/x11/window-managers/herbstluftwm.nix+1−1 nixos/modules/services/x11/window-managers/i3.nix+3−3 nixos/modules/services/x11/window-managers/qtile.nix+11−4 nixos/modules/services/x11/window-managers/wmderland.nix+1−1 nixos/modules/services/x11/window-managers/xmonad.nix+51−15 nixos/modules/services/x11/xautolock.nix+4−3 nixos/modules/services/x11/xserver.nix+37−15 nixos/modules/system/activation/activation-script.nix+19−8 nixos/modules/system/activation/switch-to-configuration.pl+692−259 nixos/modules/system/activation/top-level.nix+93−31 nixos/modules/system/boot/binfmt.nix+50−8 nixos/modules/system/boot/initrd-openvpn.nix+1−1 nixos/modules/system/boot/initrd-ssh.nix+1−1 nixos/modules/system/boot/kernel.nix+13−10 nixos/modules/system/boot/kernel_config.nix+1−1 nixos/modules/system/boot/loader/generic-extlinux-compatible/default.nix+18−1 nixos/modules/system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.sh+9−3 nixos/modules/system/boot/loader/grub/grub.nix+33−6 nixos/modules/system/boot/loader/grub/install-grub.pl+93−91 nixos/modules/system/boot/loader/grub/ipxe.nix+1−1 nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py+102−60 nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix+152−3 nixos/modules/system/boot/luksroot.nix+75−9 nixos/modules/system/boot/modprobe.nix+2 nixos/modules/system/boot/networkd.nix+328−14 nixos/modules/system/boot/plymouth.nix+9−2 nixos/modules/system/boot/resolved.nix+1 nixos/modules/system/boot/stage-1-init.sh+40−39 nixos/modules/system/boot/stage-1.nix+91−22 nixos/modules/system/boot/stage-2-init.sh+71−100 nixos/modules/system/boot/stage-2.nix+2−39 nixos/modules/system/boot/systemd-lib.nix−237 nixos/modules/system/boot/systemd-nspawn.nix−133 nixos/modules/system/boot/systemd-unit-options.nix−536 nixos/modules/system/boot/systemd.nix+85−677 nixos/modules/system/boot/systemd/coredump.nix+57 nixos/modules/system/boot/systemd/initrd-secrets.nix+36 nixos/modules/system/boot/systemd/initrd.nix+502 nixos/modules/system/boot/systemd/journald.nix+131 nixos/modules/system/boot/systemd/logind.nix+114 nixos/modules/system/boot/systemd/nspawn.nix+131 nixos/modules/system/boot/systemd/shutdown.nix+58 nixos/modules/system/boot/systemd/tmpfiles.nix+120 nixos/modules/system/boot/systemd/user.nix+153 nixos/modules/system/boot/timesyncd.nix+19−5 nixos/modules/system/boot/tmp.nix+20−2 nixos/modules/system/build.nix+21 nixos/modules/system/etc/etc-activation.nix+12 nixos/modules/system/etc/etc.nix+10−10 nixos/modules/system/etc/setup-etc.pl+6 nixos/modules/system/etc/test.nix+70 nixos/modules/tasks/auto-upgrade.nix+105−20 nixos/modules/tasks/bcache.nix+16−6 nixos/modules/tasks/filesystems.nix+32−3 nixos/modules/tasks/filesystems/apfs.nix+22 nixos/modules/tasks/filesystems/btrfs.nix+3−3 nixos/modules/tasks/filesystems/cifs.nix+1−1 nixos/modules/tasks/filesystems/ecryptfs.nix+12−2 nixos/modules/tasks/filesystems/ext.nix+10−4 nixos/modules/tasks/filesystems/f2fs.nix+1−1 nixos/modules/tasks/filesystems/jfs.nix+1−1 nixos/modules/tasks/filesystems/nfs.nix+1−1 nixos/modules/tasks/filesystems/reiserfs.nix+1−1 nixos/modules/tasks/filesystems/unionfs-fuse.nix+13−2 nixos/modules/tasks/filesystems/vfat.nix+1−1 nixos/modules/tasks/filesystems/xfs.nix+2−2 nixos/modules/tasks/filesystems/zfs.nix+19−39 nixos/modules/tasks/lvm.nix+56−7 nixos/modules/tasks/network-interfaces-scripted.nix+71 nixos/modules/tasks/network-interfaces-systemd.nix+115−2 nixos/modules/tasks/network-interfaces.nix+245−28 nixos/modules/tasks/snapraid.nix+2−2 nixos/modules/tasks/swraid.nix+35−9 nixos/modules/testing/test-instrumentation.nix+32−32 nixos/modules/virtualisation/amazon-ec2-amis.nix+444 nixos/modules/virtualisation/amazon-image.nix+6−1 nixos/modules/virtualisation/amazon-options.nix+2−1 nixos/modules/virtualisation/anbox.nix+1−1 nixos/modules/virtualisation/azure-agent.nix+6−10 nixos/modules/virtualisation/azure-common.nix+5−1 nixos/modules/virtualisation/build-vm.nix+58 nixos/modules/virtualisation/container-config.nix+1−1 nixos/modules/virtualisation/containerd.nix+6−2 nixos/modules/virtualisation/containers.nix+4−4 nixos/modules/virtualisation/cri-o.nix+8−4 nixos/modules/virtualisation/digital-ocean-init.nix+1−1 nixos/modules/virtualisation/docker-rootless.nix+102 nixos/modules/virtualisation/docker.nix+32−8 nixos/modules/virtualisation/ec2-amis.nix+9−371 nixos/modules/virtualisation/ecs-agent.nix+1−1 nixos/modules/virtualisation/fetch-instance-ssh-keys.bash−36 nixos/modules/virtualisation/google-compute-config.nix+32−103 nixos/modules/virtualisation/hyperv-guest.nix+1−1 nixos/modules/virtualisation/kubevirt.nix+30 nixos/modules/virtualisation/kvmgt.nix+1−1 nixos/modules/virtualisation/libvirtd.nix+166−67 nixos/modules/virtualisation/lxc-container.nix+161−13 nixos/modules/virtualisation/lxd.nix+5−5 nixos/modules/virtualisation/nixos-containers.nix+31−16 nixos/modules/virtualisation/oci-containers.nix+15−17 nixos/modules/virtualisation/openstack-config.nix+39−7 nixos/modules/virtualisation/openstack-metadata-fetcher.nix+5−4 nixos/modules/virtualisation/openstack-options.nix+71 nixos/modules/virtualisation/openvswitch.nix+9−54 nixos/modules/virtualisation/parallels-guest.nix+1−2 nixos/modules/virtualisation/podman-network-socket.nix−91 nixos/modules/virtualisation/podman.nix−184 nixos/modules/virtualisation/podman/default.nix+187 nixos/modules/virtualisation/podman-dnsname.nix → nixos/modules/virtualisation/podman/dnsname.nix nixos/modules/virtualisation/podman-network-socket-ghostunnel.nix → nixos/modules/virtualisation/podman/network-socket-ghostunnel.nix nixos/modules/virtualisation/podman/network-socket.nix+95 nixos/modules/virtualisation/proxmox-image.nix+169 nixos/modules/virtualisation/proxmox-lxc.nix+64 nixos/modules/virtualisation/qemu-guest-agent.nix+2−1 nixos/modules/virtualisation/qemu-vm.nix+366−89 nixos/modules/virtualisation/railcar.nix+3−4 nixos/modules/virtualisation/spice-usb-redirection.nix+4−2 nixos/modules/virtualisation/virtualbox-guest.nix+2−2 nixos/modules/virtualisation/virtualbox-host.nix+10−2 nixos/modules/virtualisation/vmware-guest.nix+25−1 nixos/modules/virtualisation/vmware-host.nix+166 nixos/modules/virtualisation/waydroid.nix+75 nixos/modules/virtualisation/xen-dom0.nix+4−5 nixos/release-combined.nix+4−2 nixos/release-small.nix+4−2 nixos/release.nix+33−2 nixos/tests/acme.nix+366−210 nixos/tests/adguardhome.nix+57 nixos/tests/aesmd.nix+62 nixos/tests/agda.nix+1−1 nixos/tests/airsonic.nix+1−5 nixos/tests/all-terminfo.nix+31 nixos/tests/all-tests.nix+156−33 nixos/tests/amazon-init-shell.nix+1−1 nixos/tests/ammonite.nix−20 nixos/tests/apfs.nix+54 nixos/tests/apparmor.nix+1−1 nixos/tests/atd.nix+1−1 nixos/tests/atop.nix+6−16 nixos/tests/avahi.nix+1−1 nixos/tests/awscli.nix−17 nixos/tests/bat.nix−12 nixos/tests/bcachefs.nix+8−9 nixos/tests/beanstalkd.nix+1−1 nixos/tests/bees.nix+1−1 nixos/tests/bind.nix+1−1 nixos/tests/bird.nix+129 nixos/tests/bitcoind.nix+1−1 nixos/tests/bittorrent.nix+1−1 nixos/tests/blockbook-frontend.nix+1−1 nixos/tests/blocky.nix+34 nixos/tests/boot-stage1.nix+3−1 nixos/tests/boot.nix+44−9 nixos/tests/borgbackup.nix+34−1 nixos/tests/botamusique.nix+4 nixos/tests/bpf.nix+29 nixos/tests/breitbandmessung.nix+33 nixos/tests/brscan5.nix+2−1 nixos/tests/btrbk.nix+1−1 nixos/tests/buildkite-agents.nix+1−1 nixos/tests/caddy.nix+3−3 nixos/tests/cage.nix+1−2 nixos/tests/cagebreak.nix+1−2 nixos/tests/calibre-web.nix−10 nixos/tests/cassandra.nix−1 nixos/tests/ceph-multi-node.nix+1−2 nixos/tests/ceph-single-node-bluestore.nix−1 nixos/tests/ceph-single-node.nix−1 nixos/tests/cfssl.nix+1−1 nixos/tests/chromium.nix+26−20 nixos/tests/cifs-utils.nix−12 nixos/tests/clickhouse.nix+1−1 nixos/tests/cloud-init.nix+27−2 nixos/tests/cntr.nix+18−6 nixos/tests/collectd.nix+38 nixos/tests/common/acme/client/default.nix+4−2 nixos/tests/common/acme/server/default.nix+5 nixos/tests/common/lxd/config.yaml+24 nixos/tests/common/wayland-cage.nix+13 nixos/tests/containers-bridge.nix+2−3 nixos/tests/containers-custom-pkgs.nix+1−1 nixos/tests/containers-ephemeral.nix+4−5 nixos/tests/containers-extra_veth.nix+2−3 nixos/tests/containers-hosts.nix+1−2 nixos/tests/containers-imperative.nix+11−12 nixos/tests/containers-ip.nix+2−3 nixos/tests/containers-macvlans.nix−2 nixos/tests/containers-names.nix+1−1 nixos/tests/containers-nested.nix+1−1 nixos/tests/containers-physical_interfaces.nix−4 nixos/tests/containers-portforward.nix+2−3 nixos/tests/containers-tmpfs.nix+7−8 nixos/tests/couchdb.nix+3 nixos/tests/cri-o.nix+1−1 nixos/tests/croc.nix+1−1 nixos/tests/custom-ca.nix+104−93 nixos/tests/deluge.nix+11−22 nixos/tests/dex-oidc.nix+78 nixos/tests/disable-installer-tools.nix+29 nixos/tests/discourse.nix+2 nixos/tests/dnsdist.nix+48 nixos/tests/doas.nix+9−1 nixos/tests/docker-rootless.nix+41 nixos/tests/docker-tools-cross.nix+2−2 nixos/tests/docker-tools.nix+47−6 nixos/tests/documize.nix+1−1 nixos/tests/doh-proxy-rust.nix+1−1 nixos/tests/dokuwiki.nix+60−25 nixos/tests/domination.nix+26 nixos/tests/dovecot.nix+1−1 nixos/tests/drbd.nix+87 nixos/tests/earlyoom.nix+16 nixos/tests/ec2.nix+5 nixos/tests/ecryptfs.nix+1−1 nixos/tests/elk.nix+98−45 nixos/tests/emacs-daemon.nix+2−2 nixos/tests/empty-file nixos/tests/enlightenment.nix+4−5 nixos/tests/env.nix+1−1 nixos/tests/envoy.nix+33 nixos/tests/ergochat.nix+97 nixos/tests/etebase-server.nix+1−1 nixos/tests/etesync-dav.nix+2−2 nixos/tests/fancontrol.nix+1−1 nixos/tests/fcitx/default.nix+1−2 nixos/tests/fenics.nix+1−2 nixos/tests/firefox.nix+3−6 nixos/tests/fish.nix+1−1 nixos/tests/fluentd.nix+1−1 nixos/tests/fontconfig-default-fonts.nix+1−1 nixos/tests/frr.nix+104 nixos/tests/fsck.nix+1−1 nixos/tests/ft2-clone.nix+2−2 nixos/tests/gerrit.nix−1 nixos/tests/geth.nix+2−2 nixos/tests/ghostunnel.nix+2−3 nixos/tests/gitlab.nix+302−21 nixos/tests/gitolite-fcgiwrap.nix+2−2 nixos/tests/gnome-xorg.nix+17−2 nixos/tests/gnome.nix+17−2 nixos/tests/google-oslogin/default.nix+2−2 nixos/tests/google-oslogin/server.nix+2−4 nixos/tests/google-oslogin/server.py nixos/tests/gotify-server.nix+1−1 nixos/tests/graphite.nix−1 nixos/tests/graylog.nix+1−1 nixos/tests/grocy.nix+1−1 nixos/tests/grub.nix+1−1 nixos/tests/hadoop/default.nix+7 nixos/tests/hadoop/hadoop.nix+255 nixos/tests/hadoop/hdfs.nix+57−27 nixos/tests/hadoop/yarn.nix+22−23 nixos/tests/handbrake.nix−31 nixos/tests/haproxy.nix−1 nixos/tests/hardened.nix+4−5 nixos/tests/haste-server.nix+23 nixos/tests/hbase.nix+30 nixos/tests/herbstluftwm.nix+1−2 nixos/tests/hibernate.nix+21−8 nixos/tests/hitch/default.nix+1−1 nixos/tests/hocker-fetchdocker/default.nix+1−1 nixos/tests/hockeypuck.nix+1−1 nixos/tests/home-assistant.nix+85−34 nixos/tests/hostname.nix+1−1 nixos/tests/hound.nix+1−1 nixos/tests/hydra/common.nix+1−1 nixos/tests/hydra/default.nix+2−2 nixos/tests/i3wm.nix+1−1 nixos/tests/ihatemoney.nix−62 nixos/tests/ihatemoney/default.nix+78 nixos/tests/ihatemoney/rates.json+39 nixos/tests/ihatemoney/server.crt+28 nixos/tests/ihatemoney/server.key+52 nixos/tests/incron.nix+1−1 nixos/tests/initrd-network.nix+1−1 nixos/tests/initrd-secrets.nix+9−3 nixos/tests/input-remapper.nix+52 nixos/tests/installed-tests/appstream-qt.nix+9 nixos/tests/installed-tests/appstream.nix+9 nixos/tests/installed-tests/default.nix+4−1 nixos/tests/installed-tests/flatpak.nix+1 nixos/tests/installed-tests/fwupd.nix−1 nixos/tests/installed-tests/gjs.nix+6 nixos/tests/installed-tests/power-profiles-daemon.nix+9 nixos/tests/installer-systemd-stage-1.nix+33 nixos/tests/installer.nix+44−37 nixos/tests/invidious.nix+81 nixos/tests/invoiceplane.nix+82 nixos/tests/ipfs.nix+5 nixos/tests/iscsi-multipath-root.nix+267 nixos/tests/iscsi-root.nix+5−5 nixos/tests/isso.nix+1−1 nixos/tests/jellyfin.nix+1−1 nixos/tests/jenkins.nix+2 nixos/tests/jibri.nix+69 nixos/tests/jitsi-meet.nix+2−3 nixos/tests/k3s-single-node-docker.nix+84 nixos/tests/k3s-single-node.nix+82 nixos/tests/k3s.nix−78 nixos/tests/kafka.nix−1 nixos/tests/kbd-setfont-decompress.nix+1−1 nixos/tests/kbd-update-search-paths-patch.nix+1−1 nixos/tests/keepassxc.nix+43−9 nixos/tests/kerberos/heimdal.nix+2−2 nixos/tests/kerberos/mit.nix+1−1 nixos/tests/kernel-generic.nix+10−17 nixos/tests/kernel-latest-ath-user-regd.nix+1−1 nixos/tests/kexec.nix+44−19 nixos/tests/keycloak.nix+33−14 nixos/tests/keymap.nix+1−1 nixos/tests/knot.nix+6 nixos/tests/krb5/deprecated-config.nix+1−1 nixos/tests/krb5/example-config.nix+1−1 nixos/tests/ksm.nix+1−1 nixos/tests/kubernetes/base.nix+2−10 nixos/tests/kubernetes/default.nix+1−1 nixos/tests/kubernetes/dns.nix+3−3 nixos/tests/kubernetes/e2e.nix+1−1 nixos/tests/kubernetes/rbac.nix+9−9 nixos/tests/libinput.nix+38 nixos/tests/libresprite.nix+30 nixos/tests/libreswan.nix+1−1 nixos/tests/lightdm.nix+1−1 nixos/tests/limesurvey.nix+1−1 nixos/tests/litestream.nix+1−1 nixos/tests/login.nix+1−1 nixos/tests/logrotate.nix+152 nixos/tests/loki.nix+1−1 nixos/tests/lorri/default.nix+1−1 nixos/tests/lsd.nix−12 nixos/tests/lvm2/default.nix+45 nixos/tests/lvm2/systemd-stage-1.nix+104 nixos/tests/lvm2/thinpool.nix+32 nixos/tests/lvm2/vdo.nix+27 nixos/tests/lxd-image-server.nix+94 nixos/tests/lxd-nftables.nix+1−1 nixos/tests/lxd.nix+41−68 nixos/tests/maddy.nix+58 nixos/tests/maestral.nix+72 nixos/tests/magic-wormhole-mailbox-server.nix+1−1 nixos/tests/magnetico.nix+1−1 nixos/tests/mailcatcher.nix+8−3 nixos/tests/mailhog.nix+1−1 nixos/tests/man.nix+100 nixos/tests/matomo.nix+1−1 nixos/tests/matrix-appservice-irc.nix+125−63 nixos/tests/matrix-conduit.nix+95 nixos/tests/matrix-synapse.nix+46−18 nixos/tests/matrix/mjolnir.nix+170 nixos/tests/matrix/pantalaimon.nix+88 nixos/tests/mattermost.nix+124 nixos/tests/mediawiki.nix+1−1 nixos/tests/meilisearch.nix+60 nixos/tests/memcached.nix+1−1 nixos/tests/metabase.nix−1 nixos/tests/minecraft.nix+1−1 nixos/tests/minidlna.nix+4−2 nixos/tests/miniflux.nix+18−6 nixos/tests/minio.nix+4−1 nixos/tests/misc.nix+7−6 nixos/tests/mod_perl.nix+1−1 nixos/tests/moinmoin.nix−28 nixos/tests/mongodb.nix+4 nixos/tests/moodle.nix+1−1 nixos/tests/moonraker.nix+45 nixos/tests/moosefs.nix+89 nixos/tests/mosquitto.nix+166−51 nixos/tests/mpd.nix+1−1 nixos/tests/mpv.nix+2−2 nixos/tests/mtp.nix+109 nixos/tests/mumble.nix+2−2 nixos/tests/musescore.nix+2−2 nixos/tests/mysql/common.nix+10 nixos/tests/mysql/mariadb-galera-mariabackup.nix−223 nixos/tests/mysql/mariadb-galera-rsync.nix−216 nixos/tests/mysql/mariadb-galera.nix+250 nixos/tests/mysql/mysql-autobackup.nix+48−33 nixos/tests/mysql/mysql-backup.nix+60−44 nixos/tests/mysql/mysql-replication.nix+84−74 nixos/tests/mysql/mysql.nix+134−188 nixos/tests/nagios.nix+1−1 nixos/tests/nano.nix−44 nixos/tests/nar-serve.nix+1−1 nixos/tests/nats.nix+11−13 nixos/tests/navidrome.nix+1−1 nixos/tests/nbd.nix+103 nixos/tests/ncdns.nix+6−9 nixos/tests/networking-proxy.nix−1 nixos/tests/networking.nix+206−15 nixos/tests/nextcloud/basic.nix+12−3 nixos/tests/nextcloud/default.nix+20−8 nixos/tests/nextcloud/with-mysql-and-memcached.nix+8−18 nixos/tests/nextcloud/with-postgresql-and-redis.nix+5−2 nixos/tests/nfs/simple.nix+1−1 nixos/tests/nginx-etag.nix+1−2 nixos/tests/nginx-modsecurity.nix+39 nixos/tests/nginx-pubhtml.nix+1−1 nixos/tests/nginx-sandbox.nix+1−1 nixos/tests/nginx-sso.nix+1−1 nixos/tests/nginx-variants.nix+1−1 nixos/tests/nix-ld.nix+20 nixos/tests/nix-serve-ssh.nix+45 nixos/tests/nix-serve.nix+1−1 nixos/tests/nix-ssh-serve.nix−45 nixos/tests/nixops/default.nix+114 nixos/tests/nixops/legacy/base-configuration.nix+31 nixos/tests/nixops/legacy/nixops.nix+15 nixos/tests/nixos-generate-config.nix+1−1 nixos/tests/noto-fonts.nix+44 nixos/tests/novacomd.nix+1−1 nixos/tests/odoo.nix+27 nixos/tests/oh-my-zsh.nix+1−1 nixos/tests/openarena.nix+2−2 nixos/tests/openldap.nix+3−3 nixos/tests/openresty-lua.nix+55 nixos/tests/opensmtpd-rspamd.nix−1 nixos/tests/openssh.nix+12−6 nixos/tests/opentabletdriver.nix+1−1 nixos/tests/os-prober.nix+10−10 nixos/tests/osrm-backend.nix+1−1 nixos/tests/overlayfs.nix+1−1 nixos/tests/owncast.nix+42 nixos/tests/pacemaker.nix+110 nixos/tests/packagekit.nix+1−1 nixos/tests/pam/pam-file-contents.nix+25 nixos/tests/pam-oath-login.nix → nixos/tests/pam/pam-oath-login.nix+3−3 nixos/tests/pam-u2f.nix → nixos/tests/pam/pam-u2f.nix+2−2 nixos/tests/pam/pam-ussh.nix+70 nixos/tests/pam/test_chfn.py+27 nixos/tests/pantheon.nix+7−8 nixos/tests/paperless-ng.nix−46 nixos/tests/paperless.nix+44 nixos/tests/parsedmarc/default.nix+235 nixos/tests/pdns-recursor.nix+4−1 nixos/tests/pgadmin4-standalone.nix+43 nixos/tests/pgadmin4.nix+132 nixos/tests/php/fpm.nix+2−2 nixos/tests/php/httpd.nix+1−1 nixos/tests/php/pcre.nix+1−1 nixos/tests/pict-rs.nix+17 nixos/tests/plasma5-systemd-start.nix+42 nixos/tests/plasma5.nix+5−6 nixos/tests/plausible.nix+4−1 nixos/tests/pleroma.nix+2−19 nixos/tests/plikd.nix+1−1 nixos/tests/plotinus.nix+2−2 nixos/tests/podman-dnsname.nix−42 nixos/tests/podman-tls-ghostunnel.nix−150 nixos/tests/podman.nix−144 nixos/tests/podman/default.nix+144 nixos/tests/podman/dnsname.nix+42 nixos/tests/podman/tls-ghostunnel.nix+150 nixos/tests/postfix-raise-smtpd-tls-security-level.nix+1−1 nixos/tests/postfix.nix+1−1 nixos/tests/postfixadmin.nix+1−1 nixos/tests/postgresql-wal-receiver.nix+1−1 nixos/tests/postgresql.nix+1−1 nixos/tests/power-profiles-daemon.nix+1−1 nixos/tests/powerdns-admin.nix+117 nixos/tests/powerdns.nix+1 nixos/tests/predictable-interface-names.nix+1−1 nixos/tests/printing.nix+2−10 nixos/tests/privacyidea.nix+1−2 nixos/tests/privoxy.nix+1−1 nixos/tests/prometheus-exporters.nix+73−5 nixos/tests/prometheus.nix+91−1 nixos/tests/prowlarr.nix+18 nixos/tests/pt2-clone.nix+2−2 nixos/tests/pulseaudio.nix+71 nixos/tests/qboot.nix+1−1 nixos/tests/quorum.nix+32−9 nixos/tests/rabbitmq.nix+1−1 nixos/tests/radicale.nix+1−1 nixos/tests/rasdaemon.nix+34 nixos/tests/redis.nix+19−17 nixos/tests/redmine.nix+1−1 nixos/tests/restart-by-activation-script.nix+73 nixos/tests/retroarch.nix+49 nixos/tests/riak.nix+1−1 nixos/tests/rspamd.nix+5−10 nixos/tests/rstudio-server.nix+24 nixos/tests/rsyslogd.nix+2−2 nixos/tests/run-in-machine.nix−23 nixos/tests/sabnzbd.nix+22 nixos/tests/samba-wsdd.nix+1−1 nixos/tests/samba.nix+1−2 nixos/tests/sddm.nix+2−2 nixos/tests/seafile.nix+121 nixos/tests/service-runner.nix+1−1 nixos/tests/sfxr-qt.nix+32 nixos/tests/shattered-pixel-dungeon.nix+2−2 nixos/tests/shiori.nix+1−2 nixos/tests/signal-desktop.nix+2−3 nixos/tests/simple.nix+1−1 nixos/tests/snapcast.nix+9 nixos/tests/snapper.nix+1−1 nixos/tests/soapui.nix+2−2 nixos/tests/solr.nix+1−1 nixos/tests/sourcehut.nix+193−10 nixos/tests/spark/default.nix+27 nixos/tests/spark/spark_sample.py+40 nixos/tests/spike.nix−22 nixos/tests/ssh-keys.nix+1−1 nixos/tests/sssd-ldap.nix+79−81 nixos/tests/sssd.nix+1−1 nixos/tests/starship.nix+42 nixos/tests/step-ca.nix+77 nixos/tests/sudo.nix+5−1 nixos/tests/sway.nix+51−26 nixos/tests/switch-test.nix+1016−6 nixos/tests/sympa.nix+1−2 nixos/tests/syncthing-init.nix+1−1 nixos/tests/syncthing-relay.nix+1−1 nixos/tests/systemd-analyze.nix+1−1 nixos/tests/systemd-binfmt.nix+86−20 nixos/tests/systemd-boot.nix+169−5 nixos/tests/systemd-confinement.nix+45−24 nixos/tests/systemd-cryptenroll.nix+54 nixos/tests/systemd-escaping.nix+45 nixos/tests/systemd-initrd-btrfs-raid.nix+45 nixos/tests/systemd-initrd-luks-keyfile.nix+53 nixos/tests/systemd-initrd-luks-password.nix+48 nixos/tests/systemd-initrd-simple.nix+44 nixos/tests/systemd-initrd-swraid.nix+50 nixos/tests/systemd-journal.nix+1−1 nixos/tests/systemd-machinectl.nix+85 nixos/tests/systemd-misc.nix+62 nixos/tests/systemd-networkd-dhcpserver-static-leases.nix+81 nixos/tests/systemd-networkd-ipv6-prefix-delegation.nix+5−12 nixos/tests/systemd-networkd-vrf.nix+2 nixos/tests/systemd-networkd.nix+10 nixos/tests/systemd-shutdown.nix+26 nixos/tests/systemd-unit-path.nix−47 nixos/tests/systemd.nix+17−2 nixos/tests/taskserver.nix+1 nixos/tests/teeworlds.nix+2−2 nixos/tests/telegraf.nix+1−1 nixos/tests/teleport.nix+99 nixos/tests/terminal-emulators.nix+207 nixos/tests/thelounge.nix+29 nixos/tests/tigervnc.nix+4−4 nixos/tests/tinydns.nix+15−1 nixos/tests/tinywl.nix+57 nixos/tests/tomcat.nix+21 nixos/tests/tor.nix+10−15 nixos/tests/trac.nix−19 nixos/tests/transmission.nix+1−1 nixos/tests/tsm-client-gui.nix+57 nixos/tests/tuptime.nix+1−1 nixos/tests/turbovnc-headless-server.nix+4−4 nixos/tests/tuxguitar.nix+2−2 nixos/tests/txredisapi.nix+6−4 nixos/tests/ucg.nix−18 nixos/tests/udisks2.nix+2−2 nixos/tests/unbound.nix+10−1 nixos/tests/unifi.nix+36 nixos/tests/usbguard.nix+2−2 nixos/tests/user-activation-scripts.nix+33 nixos/tests/uwsgi.nix+1−1 nixos/tests/v2ray.nix+1−1 nixos/tests/vault-postgresql.nix+2−3 nixos/tests/vault.nix+1−2 nixos/tests/vaultwarden.nix−2 nixos/tests/vector.nix+1−1 nixos/tests/vengi-tools.nix+29 nixos/tests/virtualbox.nix+2−2 nixos/tests/vscodium.nix+66−35 nixos/tests/vsftpd.nix+42 nixos/tests/wasabibackend.nix+1−1 nixos/tests/web-apps/mastodon.nix+170 nixos/tests/web-apps/netbox.nix+30 nixos/tests/web-apps/nifi.nix+30 nixos/tests/web-apps/peertube.nix+131 nixos/tests/web-servers/agate.nix+29 nixos/tests/web-servers/unit-php.nix+1−1 nixos/tests/wiki-js.nix+1−1 nixos/tests/wine.nix+48 nixos/tests/without-nix.nix+32 nixos/tests/wmderland.nix+1−1 nixos/tests/wordpress.nix+20−7 nixos/tests/wpa_supplicant.nix+96 nixos/tests/xfce.nix+2−3 nixos/tests/xmonad-xdg-autostart.nix+35 nixos/tests/xmonad.nix+84−17 nixos/tests/xmpp/prosody-mysql.nix+65−33 nixos/tests/xmpp/prosody.nix+1 nixos/tests/xmpp/xmpp-sendmessage.nix+1−4 nixos/tests/xrdp.nix+2−2 nixos/tests/xterm.nix+2−2 nixos/tests/xxh.nix+67 nixos/tests/yabar.nix+1−1 nixos/tests/yq.nix−12 nixos/tests/zammad.nix+60 nixos/tests/zfs.nix+51−1 nixos/tests/zigbee2mqtt.nix+1−1 nixos/tests/zoneminder.nix+1−1 nixos/tests/zrepl.nix+66 pkgs/applications/accessibility/contrast/default.nix+14−14 pkgs/applications/accessibility/espeakup/default.nix+46 pkgs/applications/accessibility/squeekboard/default.nix+9−6 pkgs/applications/accessibility/svkbd/default.nix+2−2 pkgs/applications/accessibility/wvkbd/default.nix+36 pkgs/applications/audio/CHOWTapeModel/default.nix+40−32 pkgs/applications/audio/ChowCentaur/default.nix+53 pkgs/applications/audio/ChowKick/default.nix+106 pkgs/applications/audio/ChowPhaser/default.nix+76 pkgs/applications/audio/LibreArp/default.nix+53 pkgs/applications/audio/LibreArp/lv2.nix+53 pkgs/applications/audio/aether-lv2/default.nix+33 pkgs/applications/audio/airwave/default.nix+2−2 pkgs/applications/audio/aj-snapshot/default.nix+2−3 pkgs/applications/audio/amberol/default.nix+75 pkgs/applications/audio/ams/default.nix+1−1 pkgs/applications/audio/ardour/5.nix−161 pkgs/applications/audio/ardour/default.nix+1−1 pkgs/applications/audio/ashuffle/default.nix+2−2 pkgs/applications/audio/audacious/default.nix+6−4 pkgs/applications/audio/audacity/default.nix+99−59 pkgs/applications/audio/audio-recorder/default.nix+1−1 pkgs/applications/audio/aumix/default.nix+28−13 pkgs/applications/audio/bambootracker/default.nix−4 pkgs/applications/audio/bchoppr/default.nix+2−2 pkgs/applications/audio/bespokesynth/default.nix+148 pkgs/applications/audio/bitwig-studio/bitwig-studio2.nix+1−1 pkgs/applications/audio/bitwig-studio/bitwig-studio4.nix+7−2 pkgs/applications/audio/bjumblr/default.nix+2−2 pkgs/applications/audio/blanket/default.nix+69 pkgs/applications/audio/boops/default.nix+2−2 pkgs/applications/audio/bschaffl/default.nix+2−2 pkgs/applications/audio/bsequencer/default.nix+2−2 pkgs/applications/audio/bucklespring/default.nix+3−3 pkgs/applications/audio/cadence/default.nix+48−38 pkgs/applications/audio/callaudiod/default.nix+5−3 pkgs/applications/audio/cantata/default.nix+2−2 pkgs/applications/audio/cardinal/default.nix+67 pkgs/applications/audio/carla/default.nix+11−3 pkgs/applications/audio/caudec/default.nix+6−10 pkgs/applications/audio/cdparanoia/default.nix+9 pkgs/applications/audio/cider/default.nix+30 pkgs/applications/audio/clementine/default.nix+3−10 pkgs/applications/audio/clerk/default.nix+33−10 pkgs/applications/audio/cmt/default.nix+2−2 pkgs/applications/audio/cmus/default.nix+2−2 pkgs/applications/audio/cmusfm/default.nix+16−10 pkgs/applications/audio/cozy/default.nix+2−2 pkgs/applications/audio/csound/default.nix+4−7 pkgs/applications/audio/cyanrip/default.nix+3−3 pkgs/applications/audio/deadbeef/default.nix−1 pkgs/applications/audio/denemo/default.nix+2−2 pkgs/applications/audio/dfasma/default.nix+1−1 pkgs/applications/audio/dragonfly-reverb/default.nix+2−2 pkgs/applications/audio/easyeffects/default.nix+17−11 pkgs/applications/audio/ecasound/default.nix+11 pkgs/applications/audio/espeak-ng/default.nix+10 pkgs/applications/audio/espeak/default.nix+3−2 pkgs/applications/audio/espeak/edit.nix+3−2 pkgs/applications/audio/eteroj.lv2/default.nix−23 pkgs/applications/audio/faust/faust2.nix+2−2 pkgs/applications/audio/faust/faustlive.nix+9−12 pkgs/applications/audio/faustPhysicalModeling/default.nix+2−2 pkgs/applications/audio/flac/default.nix+2−10 pkgs/applications/audio/fluidsynth/default.nix+7−23 pkgs/applications/audio/fomp/default.nix+4−4 pkgs/applications/audio/foo-yc20/default.nix−29 pkgs/applications/audio/freac/default.nix+2−2 pkgs/applications/audio/freewheeling/default.nix+2−2 pkgs/applications/audio/freqtweak/default.nix+1−1 pkgs/applications/audio/friture/default.nix+19−6 pkgs/applications/audio/friture/unlock_constraints.patch−34 pkgs/applications/audio/ft2-clone/default.nix+2−2 pkgs/applications/audio/furnace/default.nix+100 pkgs/applications/audio/game-music-emu/default.nix+1−1 pkgs/applications/audio/geonkick/default.nix+2−2 pkgs/applications/audio/giada/default.nix+39−25 pkgs/applications/audio/gigedit/default.nix+20−3 pkgs/applications/audio/gmu/default.nix+19−1 pkgs/applications/audio/gnome-podcasts/default.nix+15−3 pkgs/applications/audio/goattracker/default.nix+2−3 pkgs/applications/audio/gpodder/default.nix+9−4 pkgs/applications/audio/gpodder/disable-autoupdate.patch+8−29 pkgs/applications/audio/greg/default.nix+3−3 pkgs/applications/audio/gspeech/default.nix+2−2 pkgs/applications/audio/gtklick/default.nix−34 pkgs/applications/audio/gtkpod/default.nix+5−4 pkgs/applications/audio/guitarix/default.nix+4−2 pkgs/applications/audio/helio-workstation/default.nix+5−5 pkgs/applications/audio/helm/default.nix+6−11 pkgs/applications/audio/helvum/default.nix+36−23 pkgs/applications/audio/hivelytracker/default.nix+1−1 pkgs/applications/audio/hqplayer-desktop/default.nix+1 pkgs/applications/audio/hushboard/default.nix+73 pkgs/applications/audio/hybridreverb2/default.nix+45−10 pkgs/applications/audio/hydrogen/0.nix+28−6 pkgs/applications/audio/hydrogen/default.nix+2−2 pkgs/applications/audio/in-formant/default.nix+45 pkgs/applications/audio/indicator-sound-switcher/default.nix+62 pkgs/applications/audio/industrializer/default.nix+1−3 pkgs/applications/audio/jacktrip/default.nix+61 pkgs/applications/audio/jamesdsp/default.nix+95 pkgs/applications/audio/jamin/default.nix+1−1 pkgs/applications/audio/jamulus/default.nix+2−2 pkgs/applications/audio/japa/default.nix+2−2 pkgs/applications/audio/jconvolver/default.nix+114 pkgs/applications/audio/jellycli/default.nix+33 pkgs/applications/audio/jellycli/fix-test-dir.patch+13 pkgs/applications/audio/jmusicbot/default.nix+3−3 pkgs/applications/audio/kapitonov-plugins-pack/default.nix+1−1 pkgs/applications/audio/kid3/default.nix+2−2 pkgs/applications/audio/ladspa-plugins/default.nix+17−7 pkgs/applications/audio/lastfmsubmitd/default.nix−21 pkgs/applications/audio/libopenmpt/default.nix−32 pkgs/applications/audio/librespot/cargo-lock.patch−3817 pkgs/applications/audio/librespot/default.nix+11−17 pkgs/applications/audio/linuxband/default.nix−37 pkgs/applications/audio/lmms/default.nix+3−3 pkgs/applications/audio/lollypop/default.nix+2−2 pkgs/applications/audio/losslessaudiochecker/default.nix+29 pkgs/applications/audio/lsp-plugins/default.nix+2−2 pkgs/applications/audio/lv2lint/default.nix+22 pkgs/applications/audio/lyrebird/default.nix+2−2 pkgs/applications/audio/magnetophonDSP/faustCompressors/default.nix+1−1 pkgs/applications/audio/mbrola/default.nix+3 pkgs/applications/audio/meters_lv2/default.nix+43−36 pkgs/applications/audio/mi2ly/default.nix+16−25 pkgs/applications/audio/mi2ly/default.upstream−3 pkgs/applications/audio/mid2key/default.nix+7−4 pkgs/applications/audio/midas/generic.nix+4−5 pkgs/applications/audio/midi-visualizer/default.nix+2−2 pkgs/applications/audio/milkytracker/default.nix+8−2 pkgs/applications/audio/mimic/default.nix+14−6 pkgs/applications/audio/mimms/default.nix−31 pkgs/applications/audio/miniaudicle/default.nix+2−2 pkgs/applications/audio/mixxx/default.nix+3−3 pkgs/applications/audio/mmtc/default.nix+6−7 pkgs/applications/audio/moc/default.nix+5−3 pkgs/applications/audio/mod-arpeggiator-lv2/default.nix+26 pkgs/applications/audio/mod-distortion/default.nix+2−2 pkgs/applications/audio/molot-lite/default.nix+5−4 pkgs/applications/audio/mopidy/default.nix+6 pkgs/applications/audio/mopidy/iris.nix+2−2 pkgs/applications/audio/mopidy/jellyfin.nix+25 pkgs/applications/audio/mopidy/mopidy.nix+3−3 pkgs/applications/audio/mopidy/mpd.nix+2−2 pkgs/applications/audio/mopidy/mpris.nix+2−2 pkgs/applications/audio/mopidy/muse.nix+29 pkgs/applications/audio/mopidy/youtube.nix+43−15 pkgs/applications/audio/mopidy/ytmusic.nix+35 pkgs/applications/audio/mousai/default.nix+12−2 pkgs/applications/audio/mousai/paths.patch+13 pkgs/applications/audio/mp3blaster/default.nix+11−1 pkgs/applications/audio/mpc/default.nix+41−13 pkgs/applications/audio/mpdevil/default.nix+4−3 pkgs/applications/audio/mpg123/default.nix+2−2 pkgs/applications/audio/munt/default.nix−51 pkgs/applications/audio/munt/libmt32emu.nix+38 pkgs/applications/audio/munt/mt32emu-qt.nix+75 pkgs/applications/audio/munt/mt32emu-smf2wav.nix+50 pkgs/applications/audio/musescore/darwin.nix−1 pkgs/applications/audio/musescore/default.nix+4−5 pkgs/applications/audio/musikcube/default.nix+19−4 pkgs/applications/audio/ncmpc/default.nix+2−2 pkgs/applications/audio/ncspot/default.nix+14−16 pkgs/applications/audio/netease-cloud-music-gtk/cargo-lock.patch+2007 pkgs/applications/audio/netease-cloud-music-gtk/default.nix+60 pkgs/applications/audio/netease-cloud-music-gtk/update-cargo-lock.sh+20 pkgs/applications/audio/netease-music-tui/default.nix+3−3 pkgs/applications/audio/new-session-manager/default.nix+3−3 pkgs/applications/audio/noise-repellent/default.nix+11−9 pkgs/applications/audio/noisetorch/default.nix+3−3 pkgs/applications/audio/non/default.nix+7−7 pkgs/applications/audio/nootka/unstable.nix+25−7 pkgs/applications/audio/ocenaudio/default.nix+3−3 pkgs/applications/audio/odin2/default.nix+79 pkgs/applications/audio/open-music-kontrollers/eteroj.nix+10 pkgs/applications/audio/open-music-kontrollers/generic.nix+37 pkgs/applications/audio/open-music-kontrollers/jit.nix+12 pkgs/applications/audio/open-music-kontrollers/mephisto.nix+17 pkgs/applications/audio/open-music-kontrollers/midi_matrix.nix+10 pkgs/applications/audio/open-music-kontrollers/moony.nix+13 pkgs/applications/audio/open-music-kontrollers/orbit.nix+12 pkgs/applications/audio/open-music-kontrollers/patchmatrix.nix+13 pkgs/applications/audio/open-music-kontrollers/router.nix+11 pkgs/applications/audio/open-music-kontrollers/sherlock.nix+12 pkgs/applications/audio/open-music-kontrollers/synthpod.nix+13 pkgs/applications/audio/open-music-kontrollers/vm.nix+10 pkgs/applications/audio/orca-c/default.nix+5−2 pkgs/applications/audio/osdlyrics/default.nix+87 pkgs/applications/audio/oxefmsynth/default.nix+1−1 pkgs/applications/audio/padthv1/default.nix+2−2 pkgs/applications/audio/pamix/default.nix+15−1 pkgs/applications/audio/pamixer/default.nix+6−6 pkgs/applications/audio/paprefs/default.nix+6−4 pkgs/applications/audio/parlatype/default.nix−68 pkgs/applications/audio/patchage/default.nix+33−11 pkgs/applications/audio/pavucontrol/default.nix+24−15 pkgs/applications/audio/pd-plugins/zexy/default.nix+2−1 pkgs/applications/audio/pianobar/default.nix+2−2 pkgs/applications/audio/picard/default.nix+5−2 pkgs/applications/audio/pifi/Gemfile−2 pkgs/applications/audio/pifi/Gemfile.lock−39 pkgs/applications/audio/pifi/default.nix−18 pkgs/applications/audio/pifi/gemset.nix−137 pkgs/applications/audio/pipecontrol/default.nix+50 pkgs/applications/audio/pithos/default.nix+2−2 pkgs/applications/audio/plexamp/default.nix+6−7 pkgs/applications/audio/plujain-ramp/default.nix+1−1 pkgs/applications/audio/pocket-casts/default.nix+55 pkgs/applications/audio/praat/default.nix+2−2 pkgs/applications/audio/psst/default.nix+39 pkgs/applications/audio/pt2-clone/default.nix+2−2 pkgs/applications/audio/ptcollab/default.nix+13−4 pkgs/applications/audio/puddletag/default.nix+46−9 pkgs/applications/audio/pulseaudio-ctl/default.nix+2−2 pkgs/applications/audio/pulseaudio-dlna/0001-setup.py-remove-dbus-python-from-list.patch+25 pkgs/applications/audio/pulseaudio-dlna/default.nix+54−33 pkgs/applications/audio/pulseaudio-modules-bt/default.nix−91 pkgs/applications/audio/pulseaudio-modules-bt/fix-install-path.patch−11 pkgs/applications/audio/pyradio/default.nix+30 pkgs/applications/audio/qjackctl/default.nix+2−2 pkgs/applications/audio/qmidiarp/default.nix+2−2 pkgs/applications/audio/qmidinet/default.nix+2−2 pkgs/applications/audio/qmmp/default.nix−1 pkgs/applications/audio/qpwgraph/default.nix+34 pkgs/applications/audio/qsynth/default.nix+2−2 pkgs/applications/audio/qtractor/default.nix+2−2 pkgs/applications/audio/r128gain/default.nix+2−8 pkgs/applications/audio/reaper/default.nix+7−5 pkgs/applications/audio/redux/default.nix+49 pkgs/applications/audio/rhvoice/default.nix+2−2 pkgs/applications/audio/rhythmbox/default.nix+10 pkgs/applications/audio/rofi-pulse-select/default.nix+40 pkgs/applications/audio/roomeqwizard/default.nix+118 pkgs/applications/audio/rubyripper/default.nix+23−11 pkgs/applications/audio/samplv1/default.nix+2−2 pkgs/applications/audio/sayonara/default.nix+2−2 pkgs/applications/audio/sc68/default.nix+3−3 pkgs/applications/audio/schismtracker/default.nix+6−4 pkgs/applications/audio/scream/default.nix+2−2 pkgs/applications/audio/setbfree/default.nix+7−5 pkgs/applications/audio/sfizz/default.nix+15−12 pkgs/applications/audio/sfxr-qt/default.nix+29−3 pkgs/applications/audio/sfxr-qt/test-export-square-wave/default.nix+6 pkgs/applications/audio/sfxr-qt/test-export-square-wave/input.sfxj+29 pkgs/applications/audio/shortwave/default.nix+9−11 pkgs/applications/audio/sidplayfp/default.nix+2−2 pkgs/applications/audio/sisco.lv2/default.nix+2−2 pkgs/applications/audio/snapcast/default.nix+6−3 pkgs/applications/audio/snd/default.nix+6−3 pkgs/applications/audio/songrec/default.nix+5−4 pkgs/applications/audio/sonic-pi/default.nix+59−41 pkgs/applications/audio/sonixd/default.nix+27 pkgs/applications/audio/sony-headphones-client/default.nix+44 pkgs/applications/audio/sorcer/default.nix+2−2 pkgs/applications/audio/sound-juicer/default.nix+10 pkgs/applications/audio/soundconverter/default.nix+85 pkgs/applications/audio/soundkonverter/default.nix+1−1 pkgs/applications/audio/soundscape-renderer/default.nix+13−11 pkgs/applications/audio/soundwireserver/default.nix+40 pkgs/applications/audio/spectmorph/default.nix+1−1 pkgs/applications/audio/split2flac/default.nix+2−2 pkgs/applications/audio/spot/default.nix+12−7 pkgs/applications/audio/spotify-qt/default.nix+2−2 pkgs/applications/audio/spotify-tui/default.nix+1 pkgs/applications/audio/spotify/default.nix+10−9 pkgs/applications/audio/spotifyd/default.nix+10−9 pkgs/applications/audio/sptlrx/default.nix+24 pkgs/applications/audio/squeezelite/default.nix+48−30 pkgs/applications/audio/squishyball/default.nix+21−11 pkgs/applications/audio/strawberry/default.nix+6−2 pkgs/applications/audio/sublime-music/default.nix+14−7 pkgs/applications/audio/sunvox/default.nix+3−3 pkgs/applications/audio/surge-XT/default.nix+93 pkgs/applications/audio/swh-lv2/default.nix+6−4 pkgs/applications/audio/synaesthesia/default.nix+33 pkgs/applications/audio/synthv1/default.nix+2−2 pkgs/applications/audio/tagutil/default.nix+5 pkgs/applications/audio/tauon/default.nix+122 pkgs/applications/audio/tenacity/default.nix+148 pkgs/applications/audio/termusic/default.nix+28 pkgs/applications/audio/timemachine/default.nix+2−2 pkgs/applications/audio/tonelib-gfx/default.nix+32−39 pkgs/applications/audio/tonelib-jam/default.nix+33−37 pkgs/applications/audio/tonelib-metal/default.nix+60 pkgs/applications/audio/tonelib-zoom/default.nix+33−23 pkgs/applications/audio/transcribe/default.nix+50−13 pkgs/applications/audio/vgmstream/default.nix+21−12 pkgs/applications/audio/vgmstream/update.sh+77 pkgs/applications/audio/vimpc/default.nix+11 pkgs/applications/audio/viper4linux-gui/default.nix+82 pkgs/applications/audio/viper4linux/default.nix+61 pkgs/applications/audio/vmpk/default.nix+2−2 pkgs/applications/audio/vocal/default.nix+8−1 pkgs/applications/audio/wavegain/default.nix+15−2 pkgs/applications/audio/whipper/default.nix+9−1 pkgs/applications/audio/x42-avldrums/default.nix+2−2 pkgs/applications/audio/x42-plugins/default.nix+2−2 pkgs/applications/audio/xsynth-dssi/default.nix+2−1 pkgs/applications/audio/yoshimi/default.nix+49−18 pkgs/applications/audio/zam-plugins/default.nix+2−2 pkgs/applications/audio/zrythm/default.nix+174 pkgs/applications/audio/zynaddsubfx/default.nix+13 pkgs/applications/backup/areca/default.nix+6−3 pkgs/applications/backup/deja-dup/default.nix+12−12 pkgs/applications/backup/deja-dup/fix-paths.patch+3−3 pkgs/applications/backup/pika-backup/default.nix+12−3 pkgs/applications/backup/urbackup-client/default.nix+23 pkgs/applications/backup/vorta/default.nix+2−3 pkgs/applications/blockchains/aeon/default.nix+2−2 pkgs/applications/blockchains/alfis/default.nix+28−13 pkgs/applications/blockchains/besu/default.nix+29 pkgs/applications/blockchains/bisq-desktop/default.nix+4−5 pkgs/applications/blockchains/bitcoin-classic/default.nix+1−1 pkgs/applications/blockchains/bitcoin-knots/default.nix+69−27 pkgs/applications/blockchains/bitcoin-unlimited/default.nix+1−1 pkgs/applications/blockchains/bitcoin/default.nix+8−6 pkgs/applications/blockchains/btcpayserver/default.nix+14−38 pkgs/applications/blockchains/btcpayserver/deps.nix+685−685 pkgs/applications/blockchains/cgminer/default.nix+2−2 pkgs/applications/blockchains/charge-lnd/default.nix+2−2 pkgs/applications/blockchains/chia-plotter/default.nix+15−8 pkgs/applications/blockchains/chia-plotter/dont_fetch_dependencies.patch+24−11 pkgs/applications/blockchains/chia/default.nix+29−27 pkgs/applications/blockchains/clightning/default.nix+18−10 pkgs/applications/blockchains/crypto-org-wallet/default.nix+1−1 pkgs/applications/blockchains/dashpay/default.nix+1−1 pkgs/applications/blockchains/dero/default.nix−25 pkgs/applications/blockchains/dogecoin/default.nix+3−3 pkgs/applications/blockchains/eclair/default.nix+4−4 pkgs/applications/blockchains/electrs/default.nix+15−3 pkgs/applications/blockchains/electrs/update.sh+40 pkgs/applications/blockchains/elements/default.nix+8−10 pkgs/applications/blockchains/ergo/default.nix+2−2 pkgs/applications/blockchains/erigon.nix+4−4 pkgs/applications/blockchains/exodus/default.nix+2−2 pkgs/applications/blockchains/fulcrum/default.nix+36 pkgs/applications/blockchains/go-ethereum/default.nix+6−5 pkgs/applications/blockchains/groestlcoin/default.nix+93 pkgs/applications/blockchains/ledger-live-desktop/default.nix+17−4 pkgs/applications/blockchains/ledger-live-desktop/systemd.patch+14 pkgs/applications/blockchains/lightning-loop/default.nix+3−3 pkgs/applications/blockchains/lightning-pool/default.nix+3−3 pkgs/applications/blockchains/lightwalletd/default.nix+2−2 pkgs/applications/blockchains/litecoin/default.nix+1−2 pkgs/applications/blockchains/lnd/default.nix+5−5 pkgs/applications/blockchains/lndmanage/default.nix+2−2 pkgs/applications/blockchains/monero-cli/default.nix+60 pkgs/applications/blockchains/monero-cli/use-system-libraries.patch+52 pkgs/applications/blockchains/monero-gui/default.nix+9−9 pkgs/applications/blockchains/monero/default.nix−60 pkgs/applications/blockchains/monero/use-system-libraries.patch−69 pkgs/applications/blockchains/mycrypto/default.nix+4−4 pkgs/applications/blockchains/namecoin/default.nix+6−7 pkgs/applications/blockchains/nbxplorer/default.nix+12−36 pkgs/applications/blockchains/nbxplorer/deps.nix+263−243 pkgs/applications/blockchains/nbxplorer/util/create-deps.sh+2−2 pkgs/applications/blockchains/nbxplorer/util/update-common.sh+3−3 pkgs/applications/blockchains/nearcore/default.nix+42 pkgs/applications/blockchains/openethereum/default.nix+4−4 pkgs/applications/blockchains/oxen/default.nix+4−3 pkgs/applications/blockchains/parity-ui/default.nix−48 pkgs/applications/blockchains/parity-ui/env.nix−19 pkgs/applications/blockchains/particl-core/default.nix+10−7 pkgs/applications/blockchains/pivx/default.nix+1−1 pkgs/applications/blockchains/polkadot/default.nix+27−4 pkgs/applications/blockchains/snarkos/default.nix+61 pkgs/applications/blockchains/solana/default.nix+61 pkgs/applications/blockchains/solana/pin.json+5 pkgs/applications/blockchains/solana/update.sh+33 pkgs/applications/blockchains/stellar-core/default.nix+7−3 pkgs/applications/blockchains/trezor-suite/default.nix+4−5 pkgs/applications/blockchains/wasabibackend/create_deps.sh−98 pkgs/applications/blockchains/wasabibackend/default.nix+22−72 pkgs/applications/blockchains/wasabibackend/deps.nix+202−955 pkgs/applications/blockchains/wasabiwallet/default.nix+4−3 pkgs/applications/blockchains/whirlpool-gui/default.nix−104 pkgs/applications/blockchains/wownero/default.nix+17−16 pkgs/applications/blockchains/zcash/default.nix+6−6 pkgs/applications/display-managers/lightdm-enso-os-greeter/default.nix+8−7 pkgs/applications/display-managers/sddm/default.nix+7 pkgs/applications/display-managers/sddm/sddm-default-session.patch+71 pkgs/applications/editors/aewan/default.nix+12−1 pkgs/applications/editors/android-studio/common.nix+13−9 pkgs/applications/editors/android-studio/default.nix+8−7 pkgs/applications/editors/apostrophe/default.nix+8−8 pkgs/applications/editors/atom/default.nix+4−4 pkgs/applications/editors/atom/env.nix+2−2 pkgs/applications/editors/bless/default.nix+12−6 pkgs/applications/editors/bluefish/default.nix+25−8 pkgs/applications/editors/bluej/default.nix+37−10 pkgs/applications/editors/bonzomatic/default.nix+2−2 pkgs/applications/editors/bviplus/default.nix+13−1 pkgs/applications/editors/code-browser/default.nix+31−20 pkgs/applications/editors/cpeditor/default.nix+40 pkgs/applications/editors/cudatext/default.nix+5−3 pkgs/applications/editors/cudatext/deps.json+20−20 pkgs/applications/editors/cudatext/update.sh+23 pkgs/applications/editors/deadpixi-sam/default.nix+9−7 pkgs/applications/editors/eclipse/build-eclipse.nix+5−5 pkgs/applications/editors/eclipse/default.nix+18−14 pkgs/applications/editors/eclipse/plugins.nix+98−3 pkgs/applications/editors/ed/default.nix+2−2 pkgs/applications/editors/elvis/default.nix+10−7 pkgs/applications/editors/em/default.nix+29 pkgs/applications/editors/emacs/27.nix−12 pkgs/applications/editors/emacs/28.nix+5 pkgs/applications/editors/emacs/at-fdcwd.patch−15 pkgs/applications/editors/emacs/elisp-packages/agda-input/default.nix+18 pkgs/applications/editors/emacs/elisp-packages/agda2-mode/default.nix+27 pkgs/applications/editors/emacs/elisp-packages/apheleia/default.nix+23−25 pkgs/applications/editors/emacs/elisp-packages/bqn-mode/default.nix+22 pkgs/applications/editors/emacs/elisp-packages/cedet/default.nix−51 pkgs/applications/editors/emacs/elisp-packages/cedille/default.nix+11−8 pkgs/applications/editors/emacs/elisp-packages/color-theme-solarized/default.nix+22−17 pkgs/applications/editors/emacs/elisp-packages/control-lock/default.nix+23 pkgs/applications/editors/emacs/elisp-packages/ebuild-mode/default.nix+2−2 pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix+882−219 pkgs/applications/editors/emacs/elisp-packages/elpa-packages.nix+12−9 pkgs/applications/editors/emacs/elisp-packages/emacs2nix.nix+5−4 pkgs/applications/editors/emacs/elisp-packages/emacspeak/default.nix+29−11 pkgs/applications/editors/emacs/elisp-packages/ement/default.nix+44 pkgs/applications/editors/emacs/elisp-packages/ement/handle-nil-images.patch+28 pkgs/applications/editors/emacs/elisp-packages/ess-R-object-popup/default.nix+21−13 pkgs/applications/editors/emacs/elisp-packages/evil-markdown/default.nix+19−31 pkgs/applications/editors/emacs/elisp-packages/font-lock-plus/default.nix+15−10 pkgs/applications/editors/emacs/elisp-packages/git-undo/default.nix+13−23 pkgs/applications/editors/emacs/elisp-packages/header-file-mode/default.nix+30 pkgs/applications/editors/emacs/elisp-packages/helm-words/default.nix+20−15 pkgs/applications/editors/emacs/elisp-packages/ido-ubiquitous/default.nix−27 pkgs/applications/editors/emacs/elisp-packages/isearch-plus/default.nix+14−25 pkgs/applications/editors/emacs/elisp-packages/isearch-prop/default.nix+14−24 pkgs/applications/editors/emacs/elisp-packages/jam-mode/default.nix+10−3 pkgs/applications/editors/emacs/elisp-packages/libgenerated.nix+4−1 pkgs/applications/editors/emacs/elisp-packages/llvm-mode/default.nix+17 pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix+54−112 pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix+47−2 pkgs/applications/editors/emacs/elisp-packages/mu4e-patch/default.nix−38 pkgs/applications/editors/emacs/elisp-packages/nano-theme/default.nix+5−12 pkgs/applications/editors/emacs/elisp-packages/nongnu-generated.nix+1613−195 pkgs/applications/editors/emacs/elisp-packages/nongnu-packages.nix+2−1 pkgs/applications/editors/emacs/elisp-packages/org-generated.nix−33 pkgs/applications/editors/emacs/elisp-packages/org-mac-link/default.nix−32 pkgs/applications/editors/emacs/elisp-packages/org-packages.nix−33 pkgs/applications/editors/emacs/elisp-packages/ott-mode/default.nix+19 pkgs/applications/editors/emacs/elisp-packages/plz/default.nix+31 pkgs/applications/editors/emacs/elisp-packages/power-mode/default.nix+4−11 pkgs/applications/editors/emacs/elisp-packages/prolog/default.nix+2−2 pkgs/applications/editors/emacs/elisp-packages/railgun/default.nix−22 pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json+10654−7300 pkgs/applications/editors/emacs/elisp-packages/rect-mark/default.nix+15−24 pkgs/applications/editors/emacs/elisp-packages/session-management-for-emacs/default.nix+11−9 pkgs/applications/editors/emacs/elisp-packages/sunrise-commander/default.nix+5−18 pkgs/applications/editors/emacs/elisp-packages/sv-kalender/default.nix+2−5 pkgs/applications/editors/emacs/elisp-packages/tramp/default.nix−28 pkgs/applications/editors/emacs/elisp-packages/tree-sitter-langs/default-grammars.json+32 pkgs/applications/editors/emacs/elisp-packages/tree-sitter-langs/default.nix+44 pkgs/applications/editors/emacs/elisp-packages/tree-sitter-langs/update-defaults.py+74 pkgs/applications/editors/emacs/elisp-packages/tsc/default.nix+89 pkgs/applications/editors/emacs/elisp-packages/tsc/src.json+10 pkgs/applications/editors/emacs/elisp-packages/tsc/update.py+122 pkgs/applications/editors/emacs/elisp-packages/update+10 pkgs/applications/editors/emacs/elisp-packages/update-from-overlay−4 pkgs/applications/editors/emacs/elisp-packages/update-manual+7 pkgs/applications/editors/emacs/elisp-packages/update-manual.nix+11 pkgs/applications/editors/emacs/elisp-packages/update-org−4 pkgs/applications/editors/emacs/elisp-packages/urweb-mode/default.nix+27 pkgs/applications/editors/emacs/elisp-packages/youtube-dl/default.nix+13−21 pkgs/applications/editors/emacs/elisp-packages/zeitgeist/default.nix−25 pkgs/applications/editors/emacs/generic.nix+34−8 pkgs/applications/editors/emacs/macport.nix+5−4 pkgs/applications/editors/emacs/tramp-detect-wrapped-gvfsd-26.patch−14 pkgs/applications/editors/emacs/tramp-detect-wrapped-gvfsd.patch−11 pkgs/applications/editors/featherpad/default.nix+2−2 pkgs/applications/editors/fte/default.nix+2−1 pkgs/applications/editors/geany/default.nix+2−2 pkgs/applications/editors/ghostwriter/default.nix+2−2 pkgs/applications/editors/gnome-builder/default.nix+24−21 pkgs/applications/editors/gobby/default.nix+1−1 pkgs/applications/editors/gophernotes/default.nix+3−3 pkgs/applications/editors/helix/default.nix+13−10 pkgs/applications/editors/heme/default.nix−29 pkgs/applications/editors/hexcurse/default.nix+16 pkgs/applications/editors/hexdino/default.nix+6−6 pkgs/applications/editors/jetbrains/common.nix−97 pkgs/applications/editors/jetbrains/darwin.nix+36 pkgs/applications/editors/jetbrains/default.nix+130−113 pkgs/applications/editors/jetbrains/linux.nix+93 pkgs/applications/editors/jetbrains/update.pl−101 pkgs/applications/editors/jetbrains/update.py+100 pkgs/applications/editors/jetbrains/versions.json+296 pkgs/applications/editors/jove/default.nix+2−1 pkgs/applications/editors/jucipp/default.nix+3−4 pkgs/applications/editors/jupyter-kernels/octave/default.nix+2−1 pkgs/applications/editors/jupyter-kernels/octave/kernel.nix+4−6 pkgs/applications/editors/jupyter-kernels/wolfram/default.nix+22 pkgs/applications/editors/jupyter-kernels/wolfram/kernel.nix+32 pkgs/applications/editors/kakoune/default.nix+3−2 pkgs/applications/editors/kakoune/plugins/aliases.nix+1−1 pkgs/applications/editors/kakoune/plugins/default.nix+1−1 pkgs/applications/editors/kakoune/plugins/kakoune-plugin-names+20−19 pkgs/applications/editors/kakoune/plugins/update-shell.nix+15 pkgs/applications/editors/kakoune/plugins/update.py+3−3 pkgs/applications/editors/kdevelop5/kdev-php.nix+2−2 pkgs/applications/editors/kdevelop5/kdev-python.nix+2−2 pkgs/applications/editors/kile/default.nix+3−2 pkgs/applications/editors/kodestudio/default.nix+2−2 pkgs/applications/editors/lapce/default.nix+99 pkgs/applications/editors/leo-editor/default.nix+6−7 pkgs/applications/editors/libresprite/default.nix+111 pkgs/applications/editors/lifeograph/default.nix+40 pkgs/applications/editors/lighttable/default.nix+2−2 pkgs/applications/editors/lite-xl/0001-replace-unpack-with-table-unpack.patch+91 pkgs/applications/editors/lite-xl/default.nix+52 pkgs/applications/editors/manuskript/default.nix+3−3 pkgs/applications/editors/marker/default.nix+6−3 pkgs/applications/editors/mg/default.nix+6−2 pkgs/applications/editors/micro/default.nix+3−1 pkgs/applications/editors/micro/test-with-expect.nix+30 pkgs/applications/editors/mindforger/default.nix−1 pkgs/applications/editors/mle/default.nix+11−1 pkgs/applications/editors/moe/default.nix+2−2 pkgs/applications/editors/monodevelop/default.nix−81 pkgs/applications/editors/monodevelop/git-revert-12d610fb3f6dce121df538e36f21d8c2eeb0a6e3.patch−57 pkgs/applications/editors/music/tuxguitar/default.nix+3−3 pkgs/applications/editors/nano/default.nix+6−4 pkgs/applications/editors/nano/nanorc/default.nix−2 pkgs/applications/editors/nano/test-with-expect.nix+35 pkgs/applications/editors/ne/default.nix+2−2 pkgs/applications/editors/neovim/default.nix+14−22 pkgs/applications/editors/neovim/neovide/default.nix+22−9 pkgs/applications/editors/neovim/neovide/skia-externals.json+6−6 pkgs/applications/editors/neovim/neovim-remote.nix+2−3 pkgs/applications/editors/neovim/ruby_provider/Gemfile.lock+2−2 pkgs/applications/editors/neovim/ruby_provider/gemset.nix+5−5 pkgs/applications/editors/neovim/tests.nix+29−1 pkgs/applications/editors/neovim/utils.nix+4−5 pkgs/applications/editors/neovim/wrapper.nix+3−2 pkgs/applications/editors/netbeans/default.nix+5−5 pkgs/applications/editors/nvi/default.nix+1 pkgs/applications/editors/nvpy/default.nix+11−7 pkgs/applications/editors/oed/default.nix+9 pkgs/applications/editors/okteta/default.nix+4−2 pkgs/applications/editors/oni2/common.nix+251 pkgs/applications/editors/oni2/default.nix+16 pkgs/applications/editors/oni2/esy_skia_use_nixpkgs.patch+13 pkgs/applications/editors/oni2/extensions.lock+497 pkgs/applications/editors/oni2/extensions.nix+629 pkgs/applications/editors/oni2/node.lock+376 pkgs/applications/editors/oni2/node.nix+453 pkgs/applications/editors/pinegrow/default.nix+80 pkgs/applications/editors/poke/default.nix+28−3 pkgs/applications/editors/quartus-prime/default.nix+2−1 pkgs/applications/editors/qxmledit/default.nix+1−1 pkgs/applications/editors/rednotebook/default.nix+4−3 pkgs/applications/editors/rehex/default.nix+14−8 pkgs/applications/editors/retext/default.nix+37−16 pkgs/applications/editors/rstudio/clang-location.patch+51−15 pkgs/applications/editors/rstudio/default.nix+202−104 pkgs/applications/editors/rstudio/package.json+83 pkgs/applications/editors/rstudio/r-location.patch+20−15 pkgs/applications/editors/rstudio/yarn.lock+3835 pkgs/applications/editors/rstudio/yarndeps.nix+4373 pkgs/applications/editors/setzer/default.nix+3−2 pkgs/applications/editors/sigil/default.nix+2−2 pkgs/applications/editors/spacevim/default.nix+2−2 pkgs/applications/editors/standardnotes/default.nix+9−8 pkgs/applications/editors/sublime/2/default.nix+11−9 pkgs/applications/editors/sublime/3/common.nix+1−1 pkgs/applications/editors/sublime/4/common.nix+1−1 pkgs/applications/editors/sublime/4/packages.nix+6−6 pkgs/applications/editors/supertux-editor/default.nix+2−2 pkgs/applications/editors/texmaker/default.nix+2−2 pkgs/applications/editors/texstudio/default.nix+2−2 pkgs/applications/editors/texworks/default.nix+2−2 pkgs/applications/editors/thiefmd/default.nix+48 pkgs/applications/editors/thonny/default.nix+16−1 pkgs/applications/editors/tiled/default.nix+4−4 pkgs/applications/editors/typora/default.nix−72 pkgs/applications/editors/vim/common.nix+2−2 pkgs/applications/editors/vim/configurable.nix+17−34 pkgs/applications/editors/vim/default.nix−2 pkgs/applications/editors/vim/macvim.nix+3−3 pkgs/applications/editors/vim/macvim.patch+32−34 pkgs/applications/editors/vim/plugins/aliases.nix+143 pkgs/applications/editors/vim/plugins/build-vim-plugin.nix+54 pkgs/applications/editors/vim/plugins/default.nix+52 pkgs/applications/editors/vim/plugins/deprecated.json+8 pkgs/applications/editors/vim/plugins/generated.nix+12184 pkgs/applications/editors/vim/plugins/markdown-preview-nvim/fix-node-paths.patch+46 pkgs/applications/editors/vim/plugins/markdown-preview-nvim/package.json+17 pkgs/applications/editors/vim/plugins/overrides.nix+1160 pkgs/applications/editors/vim/plugins/patches/fruzzy/get_version.patch pkgs/applications/editors/vim/plugins/patches/lens-vim/remove_duplicate_g_lens_animate.patch pkgs/applications/editors/vim/plugins/patches/sniprun/fix-paths.patch+36 pkgs/applications/editors/vim/plugins/patches/vim-grammarous/set_default_languagetool.patch pkgs/applications/editors/vim/plugins/readme.md pkgs/applications/editors/vim/plugins/update-shell.nix+16 pkgs/applications/editors/vim/plugins/update.py+128 pkgs/applications/editors/vim/plugins/vim-command-check-hook.sh+25 pkgs/applications/editors/vim/plugins/vim-gen-doc-hook.sh+2−3 pkgs/applications/editors/vim/plugins/vim-plugin-names+1014 pkgs/applications/editors/vim/plugins/vim-utils.nix+119−78 pkgs/applications/editors/vim/plugins/vim2nix/README.txt pkgs/applications/editors/vim/plugins/vim2nix/addon-info.json pkgs/applications/editors/vim/plugins/vim2nix/autoload/nix.vim pkgs/applications/editors/vim/vimacs.nix+1−1 pkgs/applications/editors/vis/default.nix+11−16 pkgs/applications/editors/vscode/extensions/_maintainers/update-bin-srcs-lib.sh+11−5 pkgs/applications/editors/vscode/extensions/cpptools/default.nix+111 pkgs/applications/editors/vscode/extensions/cpptools/missing_elf_deps.sh pkgs/applications/editors/vscode/extensions/cpptools/package-activation-events.json pkgs/applications/editors/vscode/extensions/cpptools/update_helper.sh pkgs/applications/editors/vscode/extensions/default.nix+2348 pkgs/applications/editors/vscode/extensions/language-packs.nix+89 pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/default.nix+152 pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/rt-deps-bin-srcs.json+94 pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/update-bin-srcs+21 pkgs/applications/editors/vscode/extensions/ms-toolsai-jupyter/default.nix+42 pkgs/applications/editors/vscode/extensions/ms-vsliveshare-vsliveshare/default.nix+133 pkgs/applications/editors/vscode/extensions/ms-vsliveshare-vsliveshare/noop-syslog.c pkgs/applications/editors/vscode/extensions/python/default.nix+128 pkgs/applications/editors/vscode/extensions/python/extract-nuget.nix pkgs/applications/editors/vscode/extensions/remote-ssh/default.nix+54 pkgs/applications/editors/vscode/extensions/rescript/default.nix+28 pkgs/applications/editors/vscode/extensions/rescript/rescript-editor-analysis.nix+31 pkgs/applications/editors/vscode/extensions/rust-analyzer/build-deps/package.json+19 pkgs/applications/editors/vscode/extensions/rust-analyzer/default.nix+88 pkgs/applications/editors/vscode/extensions/rust-analyzer/update.sh+49 pkgs/applications/editors/vscode/extensions/terraform/default.nix+20 pkgs/applications/editors/vscode/extensions/terraform/fix-terraform-ls.patch+19 pkgs/applications/editors/vscode/extensions/updateSettings.nix+1−1 pkgs/applications/editors/vscode/extensions/updateSettingsTest.nix pkgs/applications/editors/vscode/extensions/update_installed_exts.sh+17−1 pkgs/applications/editors/vscode/extensions/vscode-lldb/build-deps/package.json+23 pkgs/applications/editors/vscode/extensions/vscode-lldb/cmake-build-extension-only.patch pkgs/applications/editors/vscode/extensions/vscode-lldb/default.nix+104 pkgs/applications/editors/vscode/extensions/vscode-lldb/lldb.nix pkgs/applications/editors/vscode/extensions/vscode-lldb/reset-cargo-config.patch pkgs/applications/editors/vscode/extensions/vscode-lldb/update.sh+46 pkgs/applications/editors/vscode/extensions/vscode-utils.nix+10−4 pkgs/applications/editors/vscode/extensions/vscodeEnv.nix pkgs/applications/editors/vscode/extensions/vscodeEnvTest.nix pkgs/applications/editors/vscode/extensions/vscodeExts2nix.nix pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix pkgs/applications/editors/vscode/extensions/wakatime/default.nix+22 pkgs/applications/editors/vscode/generic.nix+60−41 pkgs/applications/editors/vscode/update-shell.nix+18 pkgs/applications/editors/vscode/update-vscode.sh+2−2 pkgs/applications/editors/vscode/update-vscodium.sh+18−14 pkgs/applications/editors/vscode/vscode.nix+7−7 pkgs/applications/editors/vscode/vscodium.nix+11−14 pkgs/applications/editors/wxhexeditor/default.nix+3−2 pkgs/applications/editors/xed-editor/default.nix+2−2 pkgs/applications/editors/xedit/default.nix+45 pkgs/applications/editors/xxe-pe/default.nix+1−1 pkgs/applications/editors/your-editor/default.nix+30 pkgs/applications/emulators/atari++/default.nix pkgs/applications/emulators/atari800/default.nix pkgs/applications/emulators/attract-mode/default.nix+33 pkgs/applications/emulators/basiliskii/default.nix+28 pkgs/applications/emulators/basiliskii/remove-redhat-6-workaround-for-scsi-sg.h.patch+10 pkgs/applications/emulators/bochs/default.nix+136 pkgs/applications/emulators/bsnes/ares/default.nix+84 pkgs/applications/emulators/bsnes/ares/fix-ruby.patch+27 pkgs/applications/emulators/bsnes/bsnes-hd/default.nix pkgs/applications/emulators/bsnes/bsnes-hd/macos-copy-app-to-prefix.patch pkgs/applications/emulators/bsnes/bsnes-hd/macos-replace-sips-with-png2icns.patch pkgs/applications/emulators/bsnes/higan/001-include-cmath.patch+8 pkgs/applications/emulators/bsnes/higan/002-sips-to-png2icns.patch+24 pkgs/applications/emulators/bsnes/higan/default.nix+155 pkgs/applications/emulators/caprice32/default.nix pkgs/applications/emulators/caprice32/string.patch pkgs/applications/emulators/ccemux/default.nix+67 pkgs/applications/emulators/cdemu/analyzer.nix+1−1 pkgs/applications/emulators/cdemu/base.nix+36 pkgs/applications/emulators/cdemu/client.nix+16 pkgs/applications/emulators/cdemu/daemon.nix+9 pkgs/applications/emulators/cdemu/gui.nix+1−1 pkgs/applications/emulators/cdemu/libmirage.nix+1−1 pkgs/applications/emulators/cdemu/vhba.nix+22 pkgs/applications/emulators/cen64/default.nix pkgs/applications/emulators/citra/default.nix+91 pkgs/applications/emulators/collapseos-cvm/default.nix+30 pkgs/applications/emulators/commanderx16/emulator.nix+44 pkgs/applications/emulators/commanderx16/rom.nix+52 pkgs/applications/emulators/commanderx16/run.nix+37 pkgs/applications/emulators/craftos-pc/default.nix pkgs/applications/emulators/darcnes/default.nix pkgs/applications/emulators/darcnes/label.patch pkgs/applications/emulators/desmume/default.nix+87 pkgs/applications/emulators/dgen-sdl/default.nix+69 pkgs/applications/emulators/dlx/default.nix pkgs/applications/emulators/dolphin-emu/default.nix pkgs/applications/emulators/dolphin-emu/master.nix+89 pkgs/applications/emulators/dolphin-emu/primehack.nix+151 pkgs/applications/emulators/dosbox-staging/default.nix+112 pkgs/applications/emulators/dosbox/default.nix+75 pkgs/applications/emulators/duckstation/default.nix+106 pkgs/applications/emulators/dynamips/default.nix+36 pkgs/applications/emulators/emu2/default.nix+26 pkgs/applications/emulators/emulationstation/default.nix pkgs/applications/emulators/fceux/default.nix+24 pkgs/applications/emulators/firebird-emu/default.nix+36 pkgs/applications/emulators/flycast/default.nix+52 pkgs/applications/emulators/fs-uae/default.nix+65 pkgs/applications/emulators/fs-uae/launcher.nix+43 pkgs/applications/emulators/fuse-emulator/default.nix pkgs/applications/emulators/gens-gs/default.nix pkgs/applications/emulators/goldberg-emu/default.nix+52 pkgs/applications/emulators/goldberg-emu/dont-install-unsupported.patch+34 pkgs/applications/emulators/gxemul/0001-fix-attributes.patch pkgs/applications/emulators/gxemul/default.nix pkgs/applications/emulators/hatari/default.nix pkgs/applications/emulators/hercules/default.nix+27 pkgs/applications/emulators/kega-fusion/default.nix pkgs/applications/emulators/lambda-delta/default.nix pkgs/applications/emulators/libdsk/default.nix+19 pkgs/applications/emulators/maiko/default.nix pkgs/applications/emulators/mame/0001-Revert-Added-PDF-documentation-to-dist.mak.patch+37 pkgs/applications/emulators/mame/default.nix+155 pkgs/applications/emulators/mame/emuopts.patch pkgs/applications/emulators/mednafen/default.nix+98 pkgs/applications/emulators/mednafen/server.nix pkgs/applications/emulators/mednaffe/default.nix+41 pkgs/applications/emulators/melonDS/default.nix+43 pkgs/applications/emulators/mgba/default.nix+87 pkgs/applications/emulators/mupen64plus/default.nix pkgs/applications/emulators/nestopia/build-fix.patch pkgs/applications/emulators/nestopia/default.nix+72 pkgs/applications/emulators/nestopia/gcc6.patch pkgs/applications/emulators/np2kai/default.nix pkgs/applications/emulators/oberon-risc-emu/default.nix pkgs/applications/emulators/openmsx/custom-nix.mk pkgs/applications/emulators/openmsx/default.nix pkgs/applications/emulators/pcem/default.nix pkgs/applications/emulators/pcsx2/default.nix+93 pkgs/applications/emulators/pcsxr/0001-libpcsxcore-fix-build-with-ffmpeg-4.patch+76 pkgs/applications/emulators/pcsxr/default.nix+89 pkgs/applications/emulators/pcsxr/uncompress2.patch pkgs/applications/emulators/ppsspp/default.nix+72 pkgs/applications/emulators/proton-caller/default.nix+24 pkgs/applications/emulators/punes/default.nix+64 pkgs/applications/emulators/py65/default.nix pkgs/applications/emulators/resim/default.nix+21 pkgs/applications/emulators/retroarch/cores.nix+892 pkgs/applications/emulators/retroarch/default.nix+139 pkgs/applications/emulators/retroarch/disable-menu_show_core_updater.patch+25 pkgs/applications/emulators/retroarch/fix-config.patch+26 pkgs/applications/emulators/retroarch/fix-libretro-paths.patch+28 pkgs/applications/emulators/retroarch/hashes.json+488 pkgs/applications/emulators/retroarch/kodi-advanced-launchers.nix+1−3 pkgs/applications/emulators/retroarch/update_cores.py+173 pkgs/applications/emulators/retroarch/use-fixed-paths-on-libretro_info_path.patch+84 pkgs/applications/emulators/retroarch/wrapper.nix+41 pkgs/applications/emulators/retrofe/default.nix+78 pkgs/applications/emulators/retrofe/include-paths.patch pkgs/applications/emulators/ripes/default.nix+50 pkgs/applications/emulators/rpcs3/0001-llvm-ExecutionEngine-IntelJITEvents-only-use-ITTAPI_.patch+62 pkgs/applications/emulators/rpcs3/default.nix+80 pkgs/applications/emulators/rpcs3/update.sh+59 pkgs/applications/emulators/ruffle/default.nix+60 pkgs/applications/emulators/ryujinx/appdir.patch+23 pkgs/applications/emulators/ryujinx/default.nix+108 pkgs/applications/emulators/ryujinx/deps.nix+227 pkgs/applications/emulators/ryujinx/updater.sh+86 pkgs/applications/emulators/sameboy/default.nix+48 pkgs/applications/emulators/simh/default.nix pkgs/applications/emulators/simplenes/default.nix pkgs/applications/emulators/snes9x/default.nix+130 pkgs/applications/emulators/stella/default.nix+45 pkgs/applications/emulators/termtekst/default.nix pkgs/applications/emulators/tilem/default.nix pkgs/applications/emulators/tiny8086/default.nix+68 pkgs/applications/emulators/tinyemu/default.nix+46 pkgs/applications/emulators/uae/default.nix+27 pkgs/applications/emulators/uxn/default.nix+54 pkgs/applications/emulators/vbam/default.nix pkgs/applications/emulators/vice/default.nix+187 pkgs/applications/emulators/wine/base.nix+199 pkgs/applications/emulators/wine/builder-wow.sh+3−2 pkgs/applications/emulators/wine/cert-path.patch+15 pkgs/applications/emulators/wine/darwin-metal-compat.patch+31 pkgs/applications/emulators/wine/default.nix+67 pkgs/applications/emulators/wine/fonts.nix pkgs/applications/emulators/wine/packages.nix+44 pkgs/applications/emulators/wine/setup-hook-darwin.sh+37 pkgs/applications/emulators/wine/sources.nix+93 pkgs/applications/emulators/wine/staging.nix+1−1 pkgs/applications/emulators/wine/util.nix pkgs/applications/emulators/wine/vkd3d.nix+28 pkgs/applications/emulators/wine/winetricks.nix+33 pkgs/applications/emulators/xcpc/default.nix pkgs/applications/emulators/yabause/0001-Fixes-for-Qt-5.11-upgrade.patch pkgs/applications/emulators/yabause/default.nix pkgs/applications/emulators/yabause/linkage-rwx-linux-elf.patch pkgs/applications/emulators/yapesdl/default.nix pkgs/applications/emulators/yuzu/compatibility-list.json+1 pkgs/applications/emulators/yuzu/default.nix+40 pkgs/applications/emulators/yuzu/generic.nix+157 pkgs/applications/emulators/yuzu/update.sh+102 pkgs/applications/emulators/zesarux/default.nix+97 pkgs/applications/emulators/zsnes/default.nix+64 pkgs/applications/finance/cryptowatch/default.nix+57 pkgs/applications/finance/irpf/default.nix+73 pkgs/applications/finance/odoo/default.nix+103 pkgs/applications/gis/gmt/dcw.nix+2−2 pkgs/applications/gis/gmt/default.nix+2−2 pkgs/applications/gis/grass/default.nix+32−44 pkgs/applications/gis/openorienteering-mapper/default.nix−3 pkgs/applications/gis/qgis/default.nix+10−4 pkgs/applications/gis/qgis/ltr.nix+32 pkgs/applications/gis/qgis/unwrapped-ltr.nix+153 pkgs/applications/gis/qgis/unwrapped.nix+74−18 pkgs/applications/gis/qmapshack/default.nix+12−4 pkgs/applications/gis/qmapshack/fix-qttranslations-path.patch+74 pkgs/applications/gis/saga/default.nix+2−2 pkgs/applications/gis/whitebox-tools/default.nix+8−4 pkgs/applications/gis/whitebox-tools/update-cargo-lock.patch+578 pkgs/applications/gis/zombietrackergps/default.nix+15−5 pkgs/applications/graphics/ImageMagick/6.x.nix+3−3 pkgs/applications/graphics/ImageMagick/7.0.nix+55−14 pkgs/applications/graphics/akira/default.nix+2−1 pkgs/applications/graphics/antimony/default.nix+3−7 pkgs/applications/graphics/apitrace/default.nix+6 pkgs/applications/graphics/apitrace/glibc-2.34-compat.patch+13 pkgs/applications/graphics/ascii-image-converter/default.nix+22 pkgs/applications/graphics/autopanosiftc/default.nix+5−4 pkgs/applications/graphics/autotrace/autofig.nix+2−1 pkgs/applications/graphics/avocode/default.nix+3−3 pkgs/applications/graphics/awesomebump/default.nix+1−1 pkgs/applications/graphics/azpainter/default.nix+20−11 pkgs/applications/graphics/blockbench-electron/default.nix+5−5 pkgs/applications/graphics/c3d/default.nix+8−6 pkgs/applications/graphics/ciano/default.nix+76 pkgs/applications/graphics/cloudcompare/default.nix+46−18 pkgs/applications/graphics/comical/default.nix+8−5 pkgs/applications/graphics/coreimage/default.nix−31 pkgs/applications/graphics/cq-editor/default.nix+1−1 pkgs/applications/graphics/darktable/default.nix+117−29 pkgs/applications/graphics/deskew/default.nix+11−9 pkgs/applications/graphics/digikam/default.nix+15−4 pkgs/applications/graphics/displaycal/default.nix−72 pkgs/applications/graphics/drawing/default.nix+15−2 pkgs/applications/graphics/drawio/default.nix+9−3 pkgs/applications/graphics/drawpile/default.nix+2−2 pkgs/applications/graphics/epick/default.nix+56 pkgs/applications/graphics/evilpixie/default.nix+4−4 pkgs/applications/graphics/exrdisplay/default.nix+4−3 pkgs/applications/graphics/exrtools/default.nix+1−1 pkgs/applications/graphics/f3d/default.nix+6−7 pkgs/applications/graphics/fbida/default.nix+52−8 pkgs/applications/graphics/feh/default.nix+9−9 pkgs/applications/graphics/fig2dev/default.nix+3−1 pkgs/applications/graphics/fiji/default.nix+72 pkgs/applications/graphics/fluxus/default.nix+3−2 pkgs/applications/graphics/fondo/default.nix+5−4 pkgs/applications/graphics/foxotron/default.nix+3−3 pkgs/applications/graphics/freecad/default.nix+3−1 pkgs/applications/graphics/freepv/default.nix+18−5 pkgs/applications/graphics/gcolor3/default.nix+6−2 pkgs/applications/graphics/geeqie/default.nix+21−8 pkgs/applications/graphics/gimp/default.nix+6−5 pkgs/applications/graphics/gimp/plugins/default.nix+51−6 pkgs/applications/graphics/gimp/wrapper.nix+2 pkgs/applications/graphics/glabels/default.nix+1−1 pkgs/applications/graphics/glimpse/default.nix+1 pkgs/applications/graphics/glimpse/wrapper.nix+2 pkgs/applications/graphics/gnome-obfuscate/default.nix+70 pkgs/applications/graphics/gnome-photos/default.nix+2−3 pkgs/applications/graphics/gocr/default.nix+3−2 pkgs/applications/graphics/gpicview/default.nix+11−10 pkgs/applications/graphics/gqview/default.nix+8−10 pkgs/applications/graphics/grafx2/default.nix+1−1 pkgs/applications/graphics/graphicsmagick/default.nix+18−4 pkgs/applications/graphics/gscan2pdf/default.nix+3−3 pkgs/applications/graphics/gthumb/default.nix+2−2 pkgs/applications/graphics/hdr-plus/default.nix+5−13 pkgs/applications/graphics/hdrmerge/default.nix+76 pkgs/applications/graphics/hugin/default.nix+62−18 pkgs/applications/graphics/hydrus/default.nix+7−3 pkgs/applications/graphics/icon-library/default.nix+37 pkgs/applications/graphics/ideogram/default.nix+2−1 pkgs/applications/graphics/image-roll/default.nix+39 pkgs/applications/graphics/imagej/default.nix+11−4 pkgs/applications/graphics/imgbrd-grabber/default.nix+8−3 pkgs/applications/graphics/imlibsetroot/default.nix+13−6 pkgs/applications/graphics/imv/default.nix+6−5 pkgs/applications/graphics/inkscape/default.nix+9−11 pkgs/applications/graphics/inkscape/extensions.nix+2−2 pkgs/applications/graphics/inkscape/extensions/applytransforms/default.nix+1−1 pkgs/applications/graphics/ipe/default.nix+26−6 pkgs/applications/graphics/jpegrescan/default.nix+5−1 pkgs/applications/graphics/k3d/default.nix−51 pkgs/applications/graphics/krita/default.nix+6−52 pkgs/applications/graphics/krita/generic.nix+59 pkgs/applications/graphics/lightburn/default.nix+2−2 pkgs/applications/graphics/mandelbulber/default.nix+3−3 pkgs/applications/graphics/mcomix3/default.nix+2−1 pkgs/applications/graphics/megapixels/default.nix+21−10 pkgs/applications/graphics/menyoki/default.nix+46 pkgs/applications/graphics/meshlab/default.nix+11−2 pkgs/applications/graphics/minidjvu/default.nix+7−5 pkgs/applications/graphics/monado/default.nix+12 pkgs/applications/graphics/mtpaint/default.nix+3−5 pkgs/applications/graphics/mypaint/default.nix+10 pkgs/applications/graphics/nomacs/default.nix−1 pkgs/applications/graphics/nsxiv/default.nix+61 pkgs/applications/graphics/ocrfeeder/default.nix+5−8 pkgs/applications/graphics/odafileconverter/default.nix+1−1 pkgs/applications/graphics/openboard/default.nix+11−3 pkgs/applications/graphics/openscad/default.nix+5−4 pkgs/applications/graphics/opentoonz/default.nix+4−2 pkgs/applications/graphics/opentoonz/libtiff.nix+44−9 pkgs/applications/graphics/opentoonz/source.nix+3−3 pkgs/applications/graphics/ovito/default.nix+31−10 pkgs/applications/graphics/paraview/default.nix+2−2 pkgs/applications/graphics/pbrt/default.nix+1−1 pkgs/applications/graphics/pdfcpu/default.nix+9−3 pkgs/applications/graphics/photivo/default.nix−40 pkgs/applications/graphics/photivo/gcc6.patch−13 pkgs/applications/graphics/photoflow/default.nix+4 pkgs/applications/graphics/pinta/default.nix+68−63 pkgs/applications/graphics/pinta/deps.nix+12 pkgs/applications/graphics/pixeluvo/default.nix+56 pkgs/applications/graphics/pixinsight/default.nix+132 pkgs/applications/graphics/qimgv/default.nix+2−2 pkgs/applications/graphics/qiv/default.upstream−3 pkgs/applications/graphics/qscreenshot/default.nix+3−2 pkgs/applications/graphics/qvge/default.nix+7−5 pkgs/applications/graphics/rawtherapee/default.nix+3 pkgs/applications/graphics/rawtherapee/fix-6324.patch+356 pkgs/applications/graphics/renderdoc/default.nix+28−7 pkgs/applications/graphics/rnote/default.nix+78 pkgs/applications/graphics/sane/backends/airscan/default.nix+2−2 pkgs/applications/graphics/sane/backends/brscan4/default.nix+2−2 pkgs/applications/graphics/sane/backends/brscan4/udev_rules_type1.nix+4−3 pkgs/applications/graphics/sane/backends/brscan5/default.nix+32−22 pkgs/applications/graphics/sane/backends/default.nix−1 pkgs/applications/graphics/sane/config.nix+1−1 pkgs/applications/graphics/sane/frontends.nix−1 pkgs/applications/graphics/sane/xsane.nix+21−13 pkgs/applications/graphics/scantailor/default.nix+9−6 pkgs/applications/graphics/screencloud/default.nix+3−3 pkgs/applications/graphics/shotwell/default.nix+3−3 pkgs/applications/graphics/shutter/default.nix+5−5 pkgs/applications/graphics/smartdeblur/default.nix+12−13 pkgs/applications/graphics/solvespace/default.nix+63−15 pkgs/applications/graphics/swingsane/default.nix+1−1 pkgs/applications/graphics/symbolic-preview/default.nix+31 pkgs/applications/graphics/synfigstudio/default.nix+2−2 pkgs/applications/graphics/tesseract/default.nix+6 pkgs/applications/graphics/tesseract/fetch-language-hashes+2−2 pkgs/applications/graphics/tesseract/languages.nix+245−245 pkgs/applications/graphics/tesseract/tesseract3.nix+14−3 pkgs/applications/graphics/tesseract/tesseract4.nix+28−4 pkgs/applications/graphics/tesseract/tesseract5.nix+39 pkgs/applications/graphics/tesseract/wrapper.nix+29−3 pkgs/applications/graphics/tev/default.nix+5−9 pkgs/applications/graphics/unigine-heaven/default.nix+107 pkgs/applications/graphics/unigine-sanctuary/default.nix+97 pkgs/applications/graphics/unigine-superposition/default.nix+146 pkgs/applications/graphics/unigine-tropics/default.nix+95 pkgs/applications/graphics/unigine-valley/default.nix+120−99 pkgs/applications/graphics/vengi-tools/default.nix+112 pkgs/applications/graphics/vengi-tools/test-voxconvert-all-formats.nix+15 pkgs/applications/graphics/vengi-tools/test-voxconvert-roundtrip.nix+15 pkgs/applications/graphics/viewnior/default.nix+2−2 pkgs/applications/graphics/weylus/default.nix+86 pkgs/applications/graphics/wings/default.nix+9−7 pkgs/applications/graphics/write_stylus/default.nix+1−1 pkgs/applications/graphics/xfig/default.nix+13−2 pkgs/applications/graphics/xournal/default.nix+5−5 pkgs/applications/graphics/xournalpp/default.nix+4−3 pkgs/applications/graphics/xrgears/default.nix+14−3 pkgs/applications/graphics/yacreader/default.nix+2−2 pkgs/applications/graphics/yed/default.nix+2−2 pkgs/applications/kde/akonadi-contacts.nix+3−3 pkgs/applications/kde/akonadi/default.nix+7 pkgs/applications/kde/akregator.nix+2 pkgs/applications/kde/ark/default.nix+1 pkgs/applications/kde/bovo.nix+1−1 pkgs/applications/kde/default.nix+11−3 pkgs/applications/kde/dolphin.nix+2 pkgs/applications/kde/dragon.nix+1 pkgs/applications/kde/elisa.nix+1 pkgs/applications/kde/falkon.nix+40 pkgs/applications/kde/fetch.sh+1−1 pkgs/applications/kde/filelight.nix+2 pkgs/applications/kde/gwenview.nix+2 pkgs/applications/kde/k3b.nix+3−1 pkgs/applications/kde/kaddressbook.nix+6 pkgs/applications/kde/kalarm.nix+5−3 pkgs/applications/kde/kalarmcal.nix−19 pkgs/applications/kde/kalendar.nix+94 pkgs/applications/kde/kalzium.nix+1−1 pkgs/applications/kde/kamoso.nix+6−2 pkgs/applications/kde/kate.nix+2 pkgs/applications/kde/kbreakout.nix+5−1 pkgs/applications/kde/kcachegrind.nix+2 pkgs/applications/kde/kcalc.nix+2 pkgs/applications/kde/kcharselect.nix+1 pkgs/applications/kde/kcolorchooser.nix+2 pkgs/applications/kde/kdebugsettings.nix+3−1 pkgs/applications/kde/kdeconnect-kde.nix+6 pkgs/applications/kde/kdegraphics-thumbnailers.nix+2−2 pkgs/applications/kde/kdenlive/default.nix+2 pkgs/applications/kde/kdepim-addons.nix+2−2 pkgs/applications/kde/kdepim-runtime/default.nix+2−2 pkgs/applications/kde/kdialog.nix+2 pkgs/applications/kde/kfind.nix+2 pkgs/applications/kde/kgeography.nix+2 pkgs/applications/kde/kget.nix+2 pkgs/applications/kde/kgpg.nix+2 pkgs/applications/kde/khelpcenter.nix+9−5 pkgs/applications/kde/kig.nix+2−1 pkgs/applications/kde/kio-extras.nix+7 pkgs/applications/kde/kipi-plugins.nix+1−1 pkgs/applications/kde/kitinerary.nix+8−4 pkgs/applications/kde/kleopatra.nix+2 pkgs/applications/kde/klettres.nix+1−1 pkgs/applications/kde/kmahjongg.nix+2 pkgs/applications/kde/kmail.nix+2 pkgs/applications/kde/kmix.nix+2 pkgs/applications/kde/kmousetool.nix+35 pkgs/applications/kde/kmplot.nix+2 pkgs/applications/kde/knotes.nix+15−11 pkgs/applications/kde/kolf.nix+2 pkgs/applications/kde/kolourpaint.nix+2 pkgs/applications/kde/kompare.nix+5−1 pkgs/applications/kde/konqueror.nix+2 pkgs/applications/kde/konquest.nix+2 pkgs/applications/kde/konsole.nix+5−1 pkgs/applications/kde/kontact.nix+2 pkgs/applications/kde/korganizer.nix+2 pkgs/applications/kde/kpublictransport.nix+13 pkgs/applications/kde/krdc.nix+1 pkgs/applications/kde/krfb.nix+9−8 pkgs/applications/kde/kruler.nix+2 pkgs/applications/kde/kspaceduel.nix+5−1 pkgs/applications/kde/ksudoku.nix+2 pkgs/applications/kde/ksystemlog.nix+2 pkgs/applications/kde/ktorrent.nix+22 pkgs/applications/kde/ktouch.nix+17−17 pkgs/applications/kde/kturtle.nix+1−1 pkgs/applications/kde/kwalletmanager.nix+3 pkgs/applications/kde/libktorrent.nix+22 pkgs/applications/kde/marble.nix+5−1 pkgs/applications/kde/minuet.nix+2 pkgs/applications/kde/okular.nix+1 pkgs/applications/kde/picmi.nix+2 pkgs/applications/kde/pim-data-exporter.nix+2 pkgs/applications/kde/pimcommon.nix+2−2 pkgs/applications/kde/skanlite.nix+18 pkgs/applications/kde/skanpage.nix+32 pkgs/applications/kde/spectacle.nix+2 pkgs/applications/kde/srcs.nix+968−912 pkgs/applications/kde/yakuake.nix+2 pkgs/applications/kde/zanshin.nix+18 pkgs/applications/logging/humioctl/default.nix+2−2 pkgs/applications/logging/sosreport/default.nix+51 pkgs/applications/misc/1password-gui/beta.nix+132 pkgs/applications/misc/1password-gui/default.nix+20−4 pkgs/applications/misc/1password/default.nix+50−30 pkgs/applications/misc/ArchiSteamFarm/default.nix+42−28 pkgs/applications/misc/ArchiSteamFarm/deps-aarch64-linux.nix+280 pkgs/applications/misc/ArchiSteamFarm/deps-x86_64-linux.nix+280 pkgs/applications/misc/ArchiSteamFarm/updater.sh+44 pkgs/applications/misc/ArchiSteamFarm/web-ui/default.nix+40 pkgs/applications/misc/ArchiSteamFarm/web-ui/node-composition.nix+17 pkgs/applications/misc/ArchiSteamFarm/web-ui/node-packages.nix+7645 pkgs/applications/misc/ArchiSteamFarm/web-ui/update.sh+26 pkgs/applications/misc/HentaiAtHome/default.nix+37 pkgs/applications/misc/OSCAR/default.nix+6−4 pkgs/applications/misc/ablog/default.nix+36 pkgs/applications/misc/abook/default.nix+8−7 pkgs/applications/misc/adobe-reader/default.nix+23−15 pkgs/applications/misc/airtame/default.nix−79 pkgs/applications/misc/almanah/default.nix+13−1 pkgs/applications/misc/anup/default.nix+3−1 pkgs/applications/misc/anytype/default.nix+2−2 pkgs/applications/misc/appeditor/default.nix+9−3 pkgs/applications/misc/apvlv/default.nix+2−2 pkgs/applications/misc/archivebox/default.nix+16−24 pkgs/applications/misc/archiver/default.nix+3−3 pkgs/applications/misc/archivy/default.nix+16−26 pkgs/applications/misc/artha/default.nix+4−8 pkgs/applications/misc/artha/gio-underlink.patch−13 pkgs/applications/misc/audio/sox/default.nix+64−39 pkgs/applications/misc/audio/soxr/default.nix+13−10 pkgs/applications/misc/audio/wavesurfer/default.nix−29 pkgs/applications/misc/audio/wavrsocvt/default.nix+11−10 pkgs/applications/misc/ausweisapp2/default.nix+2−2 pkgs/applications/misc/authy/default.nix+30−7 pkgs/applications/misc/auto-multiple-choice/default.nix+164 pkgs/applications/misc/autospotting/default.nix+1 pkgs/applications/misc/avizo/default.nix+37 pkgs/applications/misc/avrdudess/default.nix+6−4 pkgs/applications/misc/azuredatastudio/default.nix+62−5 pkgs/applications/misc/barrier/default.nix+14−3 pkgs/applications/misc/batsignal/default.nix+2−2 pkgs/applications/misc/bemenu/default.nix+3−3 pkgs/applications/misc/bicon/default.nix+1−1 pkgs/applications/misc/bikeshed/default.nix+77 pkgs/applications/misc/binance/default.nix+55 pkgs/applications/misc/bklk/default.nix+2 pkgs/applications/misc/bleachbit/default.nix+5−4

16139 more files changed are not listed.

.editorconfig+5−14
@@ -55,13 +55,15 @@ trim_trailing_whitespace = unset
5555[*.lock]
5656indent_size = unset
5757
58−[eggs.nix]
58+# trailing whitespace is an actual syntax element of classic Markdown/
59+# CommonMark to enforce a line break
60+[*.md]
5961trim_trailing_whitespace = unset
6062
61−[nixos/modules/services/networking/ircd-hybrid/*.{conf,in}]
63+[eggs.nix]
6264trim_trailing_whitespace = unset
6365
64−[nixos/tests/systemd-networkd-vrf.nix]
66+[nixos/modules/services/networking/ircd-hybrid/*.{conf,in}]
6567trim_trailing_whitespace = unset
6668
6769[pkgs/build-support/dotnetenv/Wrapper/**]
@@ -70,10 +72,6 @@ indent_style = unset
7072insert_final_newline = unset
7173trim_trailing_whitespace = unset
7274
73−[pkgs/build-support/upstream-updater/**]
74−indent_style = unset
75−trim_trailing_whitespace = unset
76−
7775[pkgs/development/compilers/elm/registry.dat]
7876end_of_line = unset
7977insert_final_newline = unset
@@ -87,10 +85,3 @@ trim_trailing_whitespace = unset
8785
8886[pkgs/tools/misc/timidity/timidity.cfg]
8987trim_trailing_whitespace = unset
90−
91−[pkgs/tools/security/enpass/data.json]
92−insert_final_newline = unset
93−trim_trailing_whitespace = unset
94−
95−[pkgs/top-level/emscripten-packages.nix]
96−trim_trailing_whitespace = unset
.git-blame-ignore-revsnew file+32
@@ -0,0 +1,32 @@
1+# This file contains a list of commits that are not likely what you
2+# are looking for in a blame, such as mass reformatting or renaming.
3+# You can set this file as a default ignore file for blame by running
4+# the following command.
5+#
6+# $ git config blame.ignoreRevsFile .git-blame-ignore-revs
7+#
8+# To temporarily not use this file add
9+# --ignore-revs-file=""
10+# to your blame command.
11+#
12+# The ignoreRevsFile can't be set globally due to blame failing if the file isn't present.
13+# To not have to set the option in every repository it is needed in,
14+# save the following script in your path with the name "git-bblame"
15+# now you can run
16+# $ git bblame $FILE
17+# to use the .git-blame-ignore-revs file if it is present.
18+#
19+# #!/usr/bin/env bash
20+# repo_root=$(git rev-parse --show-toplevel)
21+# if [[ -e $repo_root/.git-blame-ignore-revs ]]; then
22+# git blame --ignore-revs-file="$repo_root/.git-blame-ignore-revs" $@
23+# else
24+# git blame $@
25+# fi
26+
27+
28+# nixos/modules/rename: Sort alphabetically
29+1f71224fe86605ef4cd23ed327b3da7882dad382
30+
31+# nixos: fix module paths in rename.nix
32+d08ede042b74b8199dc748323768227b88efcf7c
.github/CODEOWNERS+103−45
@@ -6,6 +6,10 @@
66#
77# For documentation on this file, see https://help.github.com/articles/about-codeowners/
88# Mentioned users will get code review requests.
9+#
10+# IMPORTANT NOTE: in order to actually get pinged, commit access is required.
11+# This also holds true for GitHub teams. Since almost none of our teams have write
12+# permissions, you need to list all members of the team with commit access individually.
913
1014# This file
1115/.github/CODEOWNERS @edolstra
@@ -19,7 +23,7 @@
1923
2024# Libraries
2125/lib @edolstra @nbp @infinisil
22−/lib/systems @nbp @ericson2314 @matthewbauer
26+/lib/systems @alyssais @nbp @ericson2314 @matthewbauer
2327/lib/generators.nix @edolstra @nbp @Profpatsch
2428/lib/cli.nix @edolstra @nbp @Profpatsch
2529/lib/debug.nix @edolstra @nbp @Profpatsch
@@ -34,10 +38,11 @@
3438/pkgs/top-level/release-cross.nix @Ericson2314 @matthewbauer
3539/pkgs/stdenv/generic @Ericson2314 @matthewbauer
3640/pkgs/stdenv/cross @Ericson2314 @matthewbauer
37−/pkgs/build-support/cc-wrapper @Ericson2314 @orivej
38−/pkgs/build-support/bintools-wrapper @Ericson2314 @orivej
41+/pkgs/build-support/cc-wrapper @Ericson2314
42+/pkgs/build-support/bintools-wrapper @Ericson2314
3943/pkgs/build-support/setup-hooks @Ericson2314
40−/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
4146
4247# Nixpkgs build-support
4348/pkgs/build-support/writers @lassulus @Profpatsch
@@ -65,10 +70,17 @@
6570/nixos/doc/manual/development/writing-modules.xml @nbp
6671/nixos/doc/manual/man-nixos-option.xml @nbp
6772/nixos/modules/installer/tools/nixos-option.sh @nbp
73+/nixos/modules/system @dasJ
6874
6975# NixOS integration test driver
7076/nixos/lib/test-driver @tfc
7177
78+# Systemd
79+/nixos/modules/system/boot/systemd.nix @NixOS/systemd
80+/nixos/modules/system/boot/systemd @NixOS/systemd
81+/nixos/lib/systemd-*.nix @NixOS/systemd
82+/pkgs/os-specific/linux/systemd @NixOS/systemd
83+
7284# Updaters
7385## update.nix
7486/maintainers/scripts/update.nix @jtojnar
@@ -83,8 +95,7 @@
8395/pkgs/development/python-modules @FRidh @jonringer
8496/doc/languages-frameworks/python.section.md @FRidh
8597/pkgs/development/tools/poetry2nix @adisbladis
86−/pkgs/development/interpreters/python/hooks @FRidh @jonringer @DavHau
87−/pkgs/development/interpreters/python/conda @DavHau
98+/pkgs/development/interpreters/python/hooks @FRidh @jonringer
8899
89100# Haskell
90101/doc/languages-frameworks/haskell.section.md @cdepillabout @sternenseemann @maralorn @expipiplus1
@@ -96,13 +107,13 @@
96107/pkgs/top-level/haskell-packages.nix @cdepillabout @sternenseemann @maralorn @expipiplus1
97108
98109# Perl
99−/pkgs/development/interpreters/perl @volth @stigtsp
100−/pkgs/top-level/perl-packages.nix @volth @stigtsp
101−/pkgs/development/perl-modules @volth @stigtsp
110+/pkgs/development/interpreters/perl @stigtsp @zakame
111+/pkgs/top-level/perl-packages.nix @stigtsp @zakame
112+/pkgs/development/perl-modules @stigtsp @zakame
102113
103114# R
104−/pkgs/applications/science/math/R @jbedo @bcdarwin
105−/pkgs/development/r-modules @jbedo @bcdarwin
115+/pkgs/applications/science/math/R @jbedo
116+/pkgs/development/r-modules @jbedo
106117
107118# Ruby
108119/pkgs/development/interpreters/ruby @marsam
@@ -110,11 +121,8 @@
110121
111122# Rust
112123/pkgs/development/compilers/rust @Mic92 @LnL7 @zowoq
113−/pkgs/build-support/rust @andir @danieldk @zowoq
114−
115−# Darwin-related
116−/pkgs/stdenv/darwin @NixOS/darwin-maintainers
117−/pkgs/os-specific/darwin @NixOS/darwin-maintainers
124+/pkgs/build-support/rust @zowoq
125+/doc/languages-frameworks/rust.section.md @zowoq
118126
119127# C compilers
120128/pkgs/development/compilers/gcc @matthewbauer
@@ -124,14 +132,14 @@
124132/pkgs/top-level/unix-tools.nix @matthewbauer
125133/pkgs/development/tools/xcbuild @matthewbauer
126134
127−# Beam-related (Erlang, Elixir, LFE, etc)
128−/pkgs/development/beam-modules @gleber
129−/pkgs/development/interpreters/erlang @gleber
130−/pkgs/development/interpreters/lfe @gleber
131−/pkgs/development/interpreters/elixir @gleber
132−/pkgs/development/tools/build-managers/rebar @gleber
133−/pkgs/development/tools/build-managers/rebar3 @gleber
134−/pkgs/development/tools/erlang @gleber
135+# Audio
136+/nixos/modules/services/audio/botamusique.nix @mweinelt
137+/nixos/modules/services/audio/snapserver.nix @mweinelt
138+/nixos/tests/modules/services/audio/botamusique.nix @mweinelt
139+/nixos/tests/snapcast.nix @mweinelt
140+
141+# Browsers
142+/pkgs/applications/networking/browsers/firefox @mweinelt
135143
136144# Jetbrains
137145/pkgs/applications/editors/jetbrains @edwtjo
@@ -159,12 +167,30 @@
159167/nixos/tests/hardened.nix @joachifm
160168/pkgs/os-specific/linux/kernel/hardened-config.nix @joachifm
161169
170+# Home Automation
171+/nixos/modules/services/misc/home-assistant.nix @mweinelt
172+/nixos/modules/services/misc/zigbee2mqtt.nix @mweinelt
173+/nixos/tests/home-assistant.nix @mweinelt
174+/nixos/tests/zigbee2mqtt.nix @mweinelt
175+/pkgs/servers/home-assistant @mweinelt
176+/pkgs/tools/misc/esphome @mweinelt
177+
162178# Network Time Daemons
163179/pkgs/tools/networking/chrony @thoughtpolice
164180/pkgs/tools/networking/ntp @thoughtpolice
165181/pkgs/tools/networking/openntpd @thoughtpolice
166182/nixos/modules/services/networking/ntp @thoughtpolice
167183
184+# Network
185+/pkgs/tools/networking/kea/default.nix @mweinelt
186+/pkgs/tools/networking/babeld/default.nix @mweinelt
187+/nixos/modules/services/networking/babeld.nix @mweinelt
188+/nixos/modules/services/networking/kea.nix @mweinelt
189+/nixos/modules/services/networking/knot.nix @mweinelt
190+/nixos/tests/babeld.nix @mweinelt
191+/nixos/tests/kea.nix @mweinelt
192+/nixos/tests/knot.nix @mweinelt
193+
168194# Dhall
169195/pkgs/development/dhall-modules @Gabriel439 @Profpatsch @ehmry
170196/pkgs/development/interpreters/dhall @Gabriel439 @Profpatsch @ehmry
@@ -173,7 +199,7 @@
173199/pkgs/development/idris-modules @Infinisil
174200
175201# Bazel
176−/pkgs/development/tools/build-managers/bazel @mboes @Profpatsch
202+/pkgs/development/tools/build-managers/bazel @Profpatsch
177203
178204# NixOS modules for e-mail and dns services
179205/nixos/modules/services/mail/mailman.nix @peti
@@ -182,18 +208,18 @@
182208/nixos/modules/services/mail/rspamd.nix @peti
183209
184210# Emacs
185−/pkgs/applications/editors/emacs-modes @adisbladis
186−/pkgs/applications/editors/emacs @adisbladis
187−/pkgs/top-level/emacs-packages.nix @adisbladis
211+/pkgs/applications/editors/emacs/elisp-packages @adisbladis
212+/pkgs/applications/editors/emacs @adisbladis
213+/pkgs/top-level/emacs-packages.nix @adisbladis
188214
189215# Neovim
190216/pkgs/applications/editors/neovim @jonringer @teto
191217
192218# VimPlugins
193−/pkgs/misc/vim-plugins @jonringer @softinio
219+/pkgs/applications/editors/vim/plugins @jonringer
194220
195221# VsCode Extensions
196−/pkgs/misc/vscode-extensions @jonringer
222+/pkgs/applications/editors/vscode/extensions @jonringer
197223
198224# Prometheus exporter modules and tests
199225/nixos/modules/services/monitoring/prometheus/exporters.nix @WilliButz
@@ -201,33 +227,65 @@
201227/nixos/tests/prometheus-exporters.nix @WilliButz
202228
203229# PHP interpreter, packages, extensions, tests and documentation
204−/doc/languages-frameworks/php.section.md @NixOS/php @aanderse @etu @globin @ma27 @talyz
205−/nixos/tests/php @NixOS/php @aanderse @etu @globin @ma27 @talyz
206−/pkgs/build-support/build-pecl.nix @NixOS/php @aanderse @etu @globin @ma27 @talyz
207−/pkgs/development/interpreters/php @jtojnar @NixOS/php @aanderse @etu @globin @ma27 @talyz
208−/pkgs/development/php-packages @NixOS/php @aanderse @etu @globin @ma27 @talyz
209−/pkgs/top-level/php-packages.nix @jtojnar @NixOS/php @aanderse @etu @globin @ma27 @talyz
230+/doc/languages-frameworks/php.section.md @aanderse @etu @globin @ma27 @talyz
231+/nixos/tests/php @aanderse @etu @globin @ma27 @talyz
232+/pkgs/build-support/build-pecl.nix @aanderse @etu @globin @ma27 @talyz
233+/pkgs/development/interpreters/php @jtojnar @aanderse @etu @globin @ma27 @talyz
234+/pkgs/development/php-packages @aanderse @etu @globin @ma27 @talyz
235+/pkgs/top-level/php-packages.nix @jtojnar @aanderse @etu @globin @ma27 @talyz
210236
211237# Podman, CRI-O modules and related
212−/nixos/modules/virtualisation/containers.nix @NixOS/podman @zowoq
213−/nixos/modules/virtualisation/cri-o.nix @NixOS/podman @zowoq
214−/nixos/modules/virtualisation/podman.nix @NixOS/podman @zowoq
215−/nixos/tests/cri-o.nix @NixOS/podman @zowoq
216−/nixos/tests/podman.nix @NixOS/podman @zowoq
238+/nixos/modules/virtualisation/containers.nix @zowoq @adisbladis
239+/nixos/modules/virtualisation/cri-o.nix @zowoq @adisbladis
240+/nixos/modules/virtualisation/podman @zowoq @adisbladis
241+/nixos/tests/cri-o.nix @zowoq @adisbladis
242+/nixos/tests/podman @zowoq @adisbladis
217243
218244# Docker tools
219−/pkgs/build-support/docker @roberth @utdemir
220−/nixos/tests/docker-tools-overlay.nix @roberth
221−/nixos/tests/docker-tools.nix @roberth
222−/doc/builders/images/dockertools.xml @roberth
245+/pkgs/build-support/docker @roberth
246+/nixos/tests/docker-tools* @roberth
247+/doc/builders/images/dockertools.section.md @roberth
223248
224249# Blockchains
225250/pkgs/applications/blockchains @mmahut @RaghavSood
226251
227252# Go
253+/doc/languages-frameworks/go.section.md @kalbasit @Mic92 @zowoq
228254/pkgs/development/compilers/go @kalbasit @Mic92 @zowoq
229255/pkgs/development/go-modules @kalbasit @Mic92 @zowoq
230256/pkgs/development/go-packages @kalbasit @Mic92 @zowoq
231257
258+# GNOME
259+/pkgs/desktops/gnome @jtojnar @hedning
260+/pkgs/desktops/gnome/extensions @piegamesde @jtojnar @hedning
261+
232262# Cinnamon
233263/pkgs/desktops/cinnamon @mkg20001
264+
265+# nim
266+/pkgs/development/compilers/nim @ehmry
267+/pkgs/development/nim-packages @ehmry
268+/pkgs/top-level/nim-packages.nix @ehmry
269+
270+# terraform providers
271+/pkgs/applications/networking/cluster/terraform-providers @zowoq
272+
273+# kubernetes
274+/nixos/doc/manual/configuration/kubernetes.chapter.md @zowoq
275+/nixos/modules/services/cluster/kubernetes @zowoq
276+/nixos/tests/kubernetes @zowoq
277+/pkgs/applications/networking/cluster/kubernetes @zowoq
278+
279+# Matrix
280+/pkgs/servers/heisenbridge @piegamesde
281+/pkgs/servers/matrix-conduit @piegamesde
282+/pkgs/servers/matrix-synapse/matrix-appservice-irc @piegamesde
283+/nixos/modules/services/misc/heisenbridge.nix @piegamesde
284+/nixos/modules/services/misc/matrix-appservice-irc.nix @piegamesde
285+/nixos/modules/services/misc/matrix-conduit.nix @piegamesde
286+/nixos/tests/matrix-appservice-irc.nix @piegamesde
287+/nixos/tests/matrix-conduit.nix @piegamesde
288+
289+# Dotnet
290+/pkgs/build-support/dotnet @IvarWithoutBones
291+/pkgs/development/compilers/dotnet @IvarWithoutBones
.github/ISSUE_TEMPLATE/bug_report.md−8
@@ -38,11 +38,3 @@ Please run `nix-shell -p nix-info --run "nix-info -m"` and paste the result.
3838[user@system:~]$ nix-shell -p nix-info --run "nix-info -m"
3939output here
4040```
41−
42−Maintainer information:
43−```yaml
44−# a list of nixpkgs attributes affected by the problem
45−attribute:
46−# a list of nixos modules affected by the problem
47−module:
48−```
.github/ISSUE_TEMPLATE/out_of_date_package_report.md+3−3
@@ -13,10 +13,10 @@ assignees: ''
1313<!-- Note that these are hard requirements -->
1414
1515<!--
16−You can use the "Go to file" functionality on github to find the package
16+You can use the "Go to file" functionality on GitHub to find the package
1717Then you can go to the history for this package
1818Find the latest "package_name: old_version -> new_version" commit
19−The "new_version" is the the current version of the package
19+The "new_version" is the current version of the package
2020-->
2121- [ ] Checked the [nixpkgs master branch](https://github.com/NixOS/nixpkgs)
2222<!--
@@ -29,7 +29,7 @@ There's a high chance that you'll have the new version right away while helping
2929###### Project name
3030`nix search` name:
3131<!--
32−The current version can be found easily with the same process than above for checking the master branch
32+The current version can be found easily with the same process as above for checking the master branch
3333If an open PR is present for the package, take this version as the current one and link to the PR
3434-->
3535current version:
.github/PULL_REQUEST_TEMPLATE.md+25−15
@@ -1,16 +1,10 @@
1+###### Description of changes
2+
13<!--
2−To help with the large amounts of pull requests, we would appreciate your
3−reviews of other pull requests, especially simple package updates. Just leave a
4−comment describing what you have tested in the relevant package/service.
5−Reviewing helps to reduce the average time-to-merge for everyone.
6−Thanks a lot if you do!
7−List of open PRs: https://github.com/NixOS/nixpkgs/pulls
8−Reviewing guidelines: https://nixos.org/manual/nixpkgs/unstable/#chap-reviewing-contributions
4+For package updates please link to a changelog or describe changes, this helps your fellow maintainers discover breaking updates.
5+For new packages please briefly describe the package or provide a link to its homepage.
96-->
107
11−###### Motivation for this change
12−
13−
148###### Things done
159
1610<!-- Please check what applies. Note that these are not hard requirements but merely serve as information for reviewers. -->
@@ -20,12 +14,28 @@ Reviewing guidelines: https://nixos.org/manual/nixpkgs/unstable/#chap-reviewing-
2014 - [ ] aarch64-linux
2115 - [ ] x86_64-darwin
2216 - [ ] aarch64-darwin
23−- [ ] For non-Linux: Is `sandbox = true` set in `nix.conf`? (See [Nix manual](https://nixos.org/manual/nix/stable/#sec-conf-file))
24−- [ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside [nixos/tests](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests))
25−- [ ] Tested compilation of all packages that depend on this change using `nix-shell -p nixpkgs-review --run "nixpkgs-review wip"`
26−- [ ] Tested execution of all binary files (usually in `./result/bin/`)
27−- [21.11 Release Notes (or backporting 21.05 Release notes)](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#generating-2111-release-notes)
17+- [ ] For non-Linux: Is `sandbox = true` set in `nix.conf`? (See [Nix manual](https://nixos.org/manual/nix/stable/command-ref/conf-file.html))
18+- [ ] Tested, as applicable:
19+ - [NixOS test(s)](https://nixos.org/manual/nixos/unstable/index.html#sec-nixos-tests) (look inside [nixos/tests](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests))
20+ - and/or [package tests](https://nixos.org/manual/nixpkgs/unstable/#sec-package-tests)
21+ - or, for functions and "core" functionality, tests in [lib/tests](https://github.com/NixOS/nixpkgs/blob/master/lib/tests) or [pkgs/test](https://github.com/NixOS/nixpkgs/blob/master/pkgs/test)
22+ - made sure NixOS tests are [linked](https://nixos.org/manual/nixpkgs/unstable/#ssec-nixos-tests-linking) to the relevant packages
23+- [ ] Tested compilation of all packages that depend on this change using `nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD"`. Note: all changes have to be committed, also see [nixpkgs-review usage](https://github.com/Mic92/nixpkgs-review#usage)
24+- [ ] Tested basic functionality of all binary files (usually in `./result/bin/`)
25+- [22.05 Release Notes (or backporting 21.11 Release notes)](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#generating-2205-release-notes)
2826 - [ ] (Package updates) Added a release notes entry if the change is major or breaking
2927 - [ ] (Module updates) Added a release notes entry if the change is significant
3028 - [ ] (Module addition) Added a release notes entry if adding a new NixOS module
29+ - [ ] (Release notes changes) Ran `nixos/doc/manual/md-to-db.sh` to update generated release notes
3130- [ ] Fits [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md).
31+
32+<!--
33+To help with the large amounts of pull requests, we would appreciate your
34+reviews of other pull requests, especially simple package updates. Just leave a
35+comment describing what you have tested in the relevant package/service.
36+Reviewing helps to reduce the average time-to-merge for everyone.
37+Thanks a lot if you do!
38+
39+List of open PRs: https://github.com/NixOS/nixpkgs/pulls
40+Reviewing guidelines: https://nixos.org/manual/nixpkgs/unstable/#chap-reviewing-contributions
41+-->
.github/labeler.yml+10−6
@@ -5,10 +5,6 @@
55 - pkgs/development/libraries/agda/**/*
66 - pkgs/top-level/agda-packages.nix
77
8−"6.topic: bsd":
9− - pkgs/os-specific/bsd/**/*
10− - pkgs/stdenv/freebsd/**/*
11−
128"6.topic: cinnamon":
139 - pkgs/desktops/cinnamon/**/*
1410
@@ -16,7 +12,7 @@
1612 - nixos/modules/services/editors/emacs.nix
1713 - nixos/modules/services/editors/emacs.xml
1814 - nixos/tests/emacs-daemon.nix
19− - pkgs/applications/editors/emacs-modes/**/*
15+ - pkgs/applications/editors/emacs/elisp-packages/**/*
2016 - pkgs/applications/editors/emacs/**/*
2117 - pkgs/build-support/emacs/**/*
2218 - pkgs/top-level/emacs-packages.nix
@@ -72,6 +68,12 @@
7268 - nixos/**/*
7369 - pkgs/os-specific/linux/nixos-rebuild/**/*
7470
71+"6.topic: nim":
72+ - doc/languages-frameworks/nim.section.md
73+ - pkgs/development/compilers/nim/*
74+ - pkgs/development/nim-packages/**/*
75+ - pkgs/top-level/nim-packages.nix
76+
7577"6.topic: ocaml":
7678 - doc/languages-frameworks/ocaml.section.md
7779 - pkgs/development/compilers/ocaml/**/*
@@ -136,7 +138,9 @@
136138"6.topic: vim":
137139 - doc/languages-frameworks/vim.section.md
138140 - pkgs/applications/editors/vim/**/*
139− - pkgs/misc/vim-plugins/**/*
141+ - pkgs/applications/editors/vim/plugins/**/*
142+ - nixos/modules/programs/neovim.nix
143+ - pkgs/applications/editors/neovim/**/*
140144
141145"6.topic: xfce":
142146 - nixos/doc/manual/configuration/xfce.xml
.github/workflows/backport.yml+7−1
@@ -2,13 +2,19 @@ name: Backport
22on:
33 pull_request_target:
44 types: [closed, labeled]
5+
6+# WARNING:
7+# When extending this action, be aware that $GITHUB_TOKEN allows write access to
8+# the GitHub repository. This means that it should not evaluate user input in a
9+# way that allows code injection.
10+
511jobs:
612 backport:
713 name: Backport Pull Request
814 if: github.repository_owner == 'NixOS' && github.event.pull_request.merged == true && (github.event_name != 'labeled' || startsWith('backport', github.event.label.name))
915 runs-on: ubuntu-latest
1016 steps:
11− - uses: actions/checkout@v2
17+ - uses: actions/checkout@v3
1218 with:
1319 # required to find all branches
1420 fetch-depth: 0
.github/workflows/basic-eval.yml+16−10
@@ -1,20 +1,26 @@
11name: Basic evaluation checks
22
33on:
4− pull_request:
5− branches:
6− - master
7− - release-**
8− push:
9− branches:
10− - master
11− - release-**
4+ workflow_dispatch
5+ # pull_request:
6+ # branches:
7+ # - master
8+ # - release-**
9+ # push:
10+ # branches:
11+ # - master
12+ # - release-**
1213jobs:
1314 tests:
1415 runs-on: ubuntu-latest
1516 # we don't limit this action to only NixOS repo since the checks are cheap and useful developer feedback
1617 steps:
17− - uses: actions/checkout@v2
18− - uses: cachix/install-nix-action@v13
18+ - uses: actions/checkout@v3
19+ - uses: cachix/install-nix-action@v17
20+ - uses: cachix/cachix-action@v10
21+ with:
22+ # This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
23+ name: nixpkgs-ci
24+ signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
1925 # explicit list of supportedSystems is needed until aarch64-darwin becomes part of the trunk jobset
2026 - run: nix-build pkgs/top-level/release.nix -A tarball.nixpkgs-basic-release-checks --arg supportedSystems '[ "aarch64-darwin" "aarch64-linux" "x86_64-linux" "x86_64-darwin" ]'
.github/workflows/direct-push.yml+1−1
@@ -22,7 +22,7 @@ jobs:
2222 if: steps.ismerge.outputs.ismerge != 'true'
2323 - name: Warn if the commit was a direct push
2424 if: steps.ismerge.outputs.ismerge != 'true'
25− uses: peter-evans/commit-comment@v1
25+ uses: peter-evans/commit-comment@v2
2626 with:
2727 body: |
2828 @${{ github.actor }}, you pushed a commit directly to master/release branch
.github/workflows/editorconfig.yml+10−13
@@ -11,36 +11,33 @@ on:
1111jobs:
1212 tests:
1313 runs-on: ubuntu-latest
14− if: github.repository_owner == 'NixOS'
14+ if: "github.repository_owner == 'NixOS' && !contains(github.event.pull_request.title, '[skip editorconfig]')"
1515 steps:
1616 - name: Get list of changed files from PR
1717 env:
1818 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1919 run: |
20− echo 'PR_DIFF<<EOF' >> $GITHUB_ENV
2120 gh api \
2221 repos/NixOS/nixpkgs/pulls/${{github.event.number}}/files --paginate \
2322 | jq '.[] | select(.status != "removed") | .filename' \
24− >> $GITHUB_ENV
25− echo 'EOF' >> $GITHUB_ENV
26− - uses: actions/checkout@v2
23+ > "$HOME/changed_files"
24+ - name: print list of changed files
25+ run: |
26+ cat "$HOME/changed_files"
27+ - uses: actions/checkout@v3
2728 with:
2829 # pull_request_target checks out the base branch by default
2930 ref: refs/pull/${{ github.event.pull_request.number }}/merge
30− if: env.PR_DIFF
31− - uses: cachix/install-nix-action@v13
32− if: env.PR_DIFF
31+ - uses: cachix/install-nix-action@v17
3332 with:
3433 # nixpkgs commit is pinned so that it doesn't break
35− nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/f93ecc4f6bc60414d8b73dbdf615ceb6a2c604df.tar.gz
34+ # editorconfig-checker 2.4.0
35+ nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/c473cc8714710179df205b153f4e9fa007107ff9.tar.gz
3636 - name: install editorconfig-checker
3737 run: nix-env -iA editorconfig-checker -f '<nixpkgs>'
38− if: env.PR_DIFF
3938 - name: Checking EditorConfig
40− if: env.PR_DIFF
4139 run: |
42− echo "$PR_DIFF" | xargs editorconfig-checker -disable-indent-size
40+ cat "$HOME/changed_files" | xargs -r editorconfig-checker -disable-indent-size
4341 - if: ${{ failure() }}
4442 run: |
4543 echo "::error :: Hey! It looks like your changes don't follow our editorconfig settings. Read https://editorconfig.org/#download to configure your editor so you never see this error again."
46−
.github/workflows/labels.yml+6−1
@@ -4,6 +4,11 @@ on:
44 pull_request_target:
55 types: [edited, opened, synchronize, reopened]
66
7+# WARNING:
8+# When extending this action, be aware that $GITHUB_TOKEN allows some write
9+# access to the GitHub API. This means that it should not evaluate user input in
10+# a way that allows code injection.
11+
712permissions:
813 contents: read
914 pull-requests: write
@@ -13,7 +18,7 @@ jobs:
1318 runs-on: ubuntu-latest
1419 if: github.repository_owner == 'NixOS'
1520 steps:
16− - uses: actions/labeler@v3
21+ - uses: actions/labeler@v4
1722 with:
1823 repo-token: ${{ secrets.GITHUB_TOKEN }}
1924 sync-labels: true
.github/workflows/manual-nixos.yml+3−3
@@ -14,17 +14,17 @@ jobs:
1414 runs-on: ubuntu-latest
1515 if: github.repository_owner == 'NixOS'
1616 steps:
17− - uses: actions/checkout@v2
17+ - uses: actions/checkout@v3
1818 with:
1919 # pull_request_target checks out the base branch by default
2020 ref: refs/pull/${{ github.event.pull_request.number }}/merge
21− - uses: cachix/install-nix-action@v13
21+ - uses: cachix/install-nix-action@v17
2222 with:
2323 # explicitly enable sandbox
2424 extra_nix_config: sandbox = true
2525 - uses: cachix/cachix-action@v10
2626 with:
27− # This cache is for the nixos/nixpkgs manual builds and should not be trusted or used elsewhere.
27+ # This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
2828 name: nixpkgs-ci
2929 signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
3030 - name: Building NixOS manual
.github/workflows/manual-nixpkgs.yml+3−3
@@ -14,17 +14,17 @@ jobs:
1414 runs-on: ubuntu-latest
1515 if: github.repository_owner == 'NixOS'
1616 steps:
17− - uses: actions/checkout@v2
17+ - uses: actions/checkout@v3
1818 with:
1919 # pull_request_target checks out the base branch by default
2020 ref: refs/pull/${{ github.event.pull_request.number }}/merge
21− - uses: cachix/install-nix-action@v13
21+ - uses: cachix/install-nix-action@v17
2222 with:
2323 # explicitly enable sandbox
2424 extra_nix_config: sandbox = true
2525 - uses: cachix/cachix-action@v10
2626 with:
27− # This cache is for the nixos/nixpkgs manual builds and should not be trusted or used elsewhere.
27+ # This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
2828 name: nixpkgs-ci
2929 signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
3030 - name: Building Nixpkgs manual
.github/workflows/nixos-manual.yml+2−2
@@ -15,11 +15,11 @@ jobs:
1515 runs-on: ubuntu-latest
1616 if: github.repository_owner == 'NixOS'
1717 steps:
18− - uses: actions/checkout@v2
18+ - uses: actions/checkout@v3
1919 with:
2020 # pull_request_target checks out the base branch by default
2121 ref: refs/pull/${{ github.event.pull_request.number }}/merge
22− - uses: cachix/install-nix-action@v12
22+ - uses: cachix/install-nix-action@v17
2323 - name: Check DocBook files generated from Markdown are consistent
2424 run: |
2525 nixos/doc/manual/md-to-db.sh
.github/workflows/pending-set.yml+5
@@ -3,6 +3,11 @@ name: "set pending status"
33on:
44 pull_request_target:
55
6+# WARNING:
7+# When extending this action, be aware that $GITHUB_TOKEN allows write access to
8+# the GitHub repository. This means that it should not evaluate user input in a
9+# way that allows code injection.
10+
611jobs:
712 action:
813 runs-on: ubuntu-latest
.github/workflows/periodic-merge-24h.yml+10−2
@@ -28,9 +28,17 @@ jobs:
2828 pairs:
2929 - from: master
3030 into: haskell-updates
31+ - from: release-21.05
32+ into: staging-next-21.05
33+ - from: staging-next-21.05
34+ into: staging-21.05
35+ - from: release-21.11
36+ into: staging-next-21.11
37+ - from: staging-next-21.11
38+ into: staging-21.11
3139 name: ${{ matrix.pairs.from }} → ${{ matrix.pairs.into }}
3240 steps:
33− - uses: actions/checkout@v2
41+ - uses: actions/checkout@v3
3442
3543 - name: ${{ matrix.pairs.from }} → ${{ matrix.pairs.into }}
3644 uses: devmasx/merge-branch@1.4.0
@@ -41,7 +49,7 @@ jobs:
4149 github_token: ${{ secrets.GITHUB_TOKEN }}
4250
4351 - name: Comment on failure
44− uses: peter-evans/create-or-update-comment@v1
52+ uses: peter-evans/create-or-update-comment@v2
4553 if: ${{ failure() }}
4654 with:
4755 issue-number: 105153
.github/workflows/periodic-merge-6h.yml+2−6
@@ -30,13 +30,9 @@ jobs:
3030 into: staging-next
3131 - from: staging-next
3232 into: staging
33− - from: release-21.05
34− into: staging-next-21.05
35− - from: staging-next-21.05
36− into: staging-21.05
3733 name: ${{ matrix.pairs.from }} → ${{ matrix.pairs.into }}
3834 steps:
39− - uses: actions/checkout@v2
35+ - uses: actions/checkout@v3
4036
4137 - name: ${{ matrix.pairs.from }} → ${{ matrix.pairs.into }}
4238 uses: devmasx/merge-branch@1.4.0
@@ -47,7 +43,7 @@ jobs:
4743 github_token: ${{ secrets.GITHUB_TOKEN }}
4844
4945 - name: Comment on failure
50− uses: peter-evans/create-or-update-comment@v1
46+ uses: peter-evans/create-or-update-comment@v2
5147 if: ${{ failure() }}
5248 with:
5349 issue-number: 105153
.github/workflows/update-terraform-providers.ymlnew file+48
@@ -0,0 +1,48 @@
1+name: "Update terraform-providers"
2+
3+on:
4+ schedule:
5+ - cron: "14 3 * * 1"
6+ workflow_dispatch:
7+
8+jobs:
9+ tf-providers:
10+ if: github.repository_owner == 'NixOS' && github.ref == 'refs/heads/master' # ensure workflow_dispatch only runs on master
11+ runs-on: ubuntu-latest
12+ steps:
13+ - uses: actions/checkout@v3
14+ - uses: cachix/install-nix-action@v17
15+ - name: setup
16+ id: setup
17+ run: |
18+ echo ::set-output name=title::"terraform-providers: update $(date -u +"%Y-%m-%d")"
19+ - name: update terraform-providers
20+ run: |
21+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
22+ git config user.name "github-actions[bot]"
23+ pushd pkgs/applications/networking/cluster/terraform-providers
24+ ./update-all-providers --no-build
25+ git commit -m "${{ steps.setup.outputs.title }}" providers.json
26+ popd
27+ - name: create PR
28+ uses: peter-evans/create-pull-request@v4
29+ with:
30+ body: |
31+ Automatic update by [update-terraform-providers](https://github.com/NixOS/nixpkgs/blob/master/.github/workflows/update-terraform-providers.yml) action.
32+
33+ Check that all providers build with:
34+ ```
35+ @ofborg build terraform-full
36+ ```
37+ branch: terraform-providers-update
38+ delete-branch: false
39+ labels: "2.status: work-in-progress"
40+ title: ${{ steps.setup.outputs.title }}
41+ token: ${{ secrets.GITHUB_TOKEN }}
42+ - name: comment on failure
43+ uses: peter-evans/create-or-update-comment@v2
44+ if: ${{ failure() }}
45+ with:
46+ issue-number: 153416
47+ body: |
48+ Automatic update of terraform providers [failed](https://github.com/NixOS/nixpkgs/actions/runs/${{ github.run_id }}).
.gitignore+7
@@ -2,8 +2,12 @@
22,*
33.*.swp
44.*.swo
5+.idea/
6+.vscode/
7+outputs/
58result
69result-*
10+source/
711/doc/NEWS.html
812/doc/NEWS.txt
913/doc/manual.html
@@ -20,3 +24,6 @@ __pycache__
2024
2125# generated by pkgs/common-updater/update-script.nix
2226update-git-commits.txt
27+
28+# JetBrains IDEA module declaration file
29+/nixpkgs.iml
.version+1−1
@@ -1 +1 @@
1−21.11
1+22.05
CONTRIBUTING.md+55−10
@@ -11,12 +11,16 @@ under the terms of [COPYING](COPYING), which is an MIT-like license.
1111
1212## Submitting changes
1313
14+Read the ["Submitting changes"](https://nixos.org/nixpkgs/manual/#chap-submitting-changes) section of the nixpkgs manual. It explains how to write, test, and iterate on your change, and which branch to base your pull request against.
15+
16+Below is a short excerpt of some points in there:
17+
1418* Format the commit messages in the following way:
1519
1620 ```
1721 (pkg-name | nixos/<module>): (from -> to | init at version | refactor | etc)
1822
19− (Motivation for change. Additional information.)
23+ (Motivation for change. Link to release notes. Additional information.)
2024 ```
2125
2226 For consistency, there should not be a period at the end of the commit message's summary line (the first line of the commit message).
@@ -25,6 +29,7 @@ under the terms of [COPYING](COPYING), which is an MIT-like license.
2529
2630 * nginx: init at 2.0.1
2731 * firefox: 54.0.1 -> 55.0
32+ https://www.mozilla.org/en-US/firefox/55.0/releasenotes/
2833 * nixos/hydra: add bazBaz option
2934
3035 Dual baz behavior is needed to do foo.
@@ -40,7 +45,7 @@ under the terms of [COPYING](COPYING), which is an MIT-like license.
4045 * If there is no upstream license, `meta.license` should default to `lib.licenses.unfree`.
4146* `meta.maintainers` must be set.
4247
43−See the nixpkgs manual for more details on [standard meta-attributes](https://nixos.org/nixpkgs/manual/#sec-standard-meta-attributes) and on how to [submit changes to nixpkgs](https://nixos.org/nixpkgs/manual/#chap-submitting-changes).
48+See the nixpkgs manual for more details on [standard meta-attributes](https://nixos.org/nixpkgs/manual/#sec-standard-meta-attributes).
4449
4550## Writing good commit messages
4651
@@ -48,15 +53,55 @@ In addition to writing properly formatted commit messages, it's important to inc
4853
4954For package version upgrades and such a one-line commit message is usually sufficient.
5055
56+## Rebasing between branches (i.e. from master to staging)
57+
58+From time to time, changes between branches must be rebased, for example, if the
59+number of new rebuilds they would cause is too large for the target branch. When
60+rebasing, care must be taken to include only the intended changes, otherwise
61+many CODEOWNERS will be inadvertently requested for review. To achieve this,
62+rebasing should not be performed directly on the target branch, but on the merge
63+base between the current and target branch.
64+
65+In the following example, we see a rebase from `master` onto the merge base
66+between `master` and `staging`, so that a change can eventually be retargeted to
67+`staging`. The example uses `upstream` as the remote for `NixOS/nixpkgs.git`
68+while the `origin` remote is used for the remote you are pushing to.
69+
70+
71+```console
72+# Find the common base between two branches
73+common=$(git merge-base upstream/master upstream/staging)
74+# Find the common base between your feature branch and master
75+commits=$(git merge-base $(git branch --show-current) upstream/master)
76+# Rebase all commits onto the common base
77+git rebase --onto=$common $commits
78+# Force push your changes
79+git push origin $(git branch --show-current) --force-with-lease
80+```
81+
82+Then change the base branch in the GitHub PR using the *Edit* button in the upper
83+right corner, and switch from `master` to `staging`. After the PR has been
84+retargeted it might be necessary to do a final rebase onto the target branch, to
85+resolve any outstanding merge conflicts.
86+
87+```console
88+# Rebase onto target branch
89+git rebase upstream/staging
90+# Review and fixup possible conflicts
91+git status
92+# Force push your changes
93+git push origin $(git branch --show-current) --force-with-lease
94+```
95+
5196## Backporting changes
5297
5398Follow these steps to backport a change into a release branch in compliance with the [commit policy](https://nixos.org/nixpkgs/manual/#submitting-changes-stable-release-branches).
5499
551001. Take note of the commits in which the change was introduced into `master` branch.
56−2. Check out the target _release branch_, e.g. `release-20.09`. Do not use a _channel branch_ like `nixos-20.09` or `nixpkgs-20.09`.
101+2. Check out the target _release branch_, e.g. `release-21.11`. Do not use a _channel branch_ like `nixos-21.11` or `nixpkgs-21.11-darwin`.
571023. Create a branch for your change, e.g. `git checkout -b backport`.
581034. When the reason to backport is not obvious from the original commit message, use `git cherry-pick -xe <original commit>` and add a reason. Otherwise use `git cherry-pick -x <original commit>`. That's fine for minor version updates that only include security and bug fixes, commits that fixes an otherwise broken package or similar. Please also ensure the commits exists on the master branch; in the case of squashed or rebased merges, the commit hash will change and the new commits can be found in the merge message at the bottom of the master pull request.
59−5. Push to GitHub and open a backport pull request. Make sure to select the release branch (e.g. `release-20.09`) as the target branch of the pull request, and link to the pull request in which the original change was comitted to `master`. The pull request title should be the commit title with the release version as prefix, e.g. `[20.09]`.
104+5. Push to GitHub and open a backport pull request. Make sure to select the release branch (e.g. `release-21.11`) as the target branch of the pull request, and link to the pull request in which the original change was comitted to `master`. The pull request title should be the commit title with the release version as prefix, e.g. `[21.11]`.
601056. When the backport pull request is merged and you have the necessary privileges you can also replace the label `9.needs: port to stable` with `8.has: port to stable` on the original pull request. This way maintainers can keep track of missing backports easier.
61106
62107## Criteria for Backporting changes
@@ -68,17 +113,17 @@ Anything that does not cause user or downstream dependency regressions can be ba
68113- Services which require a client to be up-to-date regardless. (E.g. `spotify`, `steam`, or `discord`)
69114- Security critical applications (E.g. `firefox`)
70115
71−## Generating 21.11 Release Notes
116+## Generating 22.05 Release Notes
72117
73−(This section also applies to backporting 21.05 release notes: substitute "rl-2111" for "rl-2105".)
118+(This section also applies to backporting 21.11 release notes: substitute "rl-2205" for "rl-2111".)
74119
75120Documentation in nixpkgs is transitioning to a markdown-centric workflow. Release notes now require a translation step to convert from markdown to a compatible docbook document.
76121
77−Steps for updating 21.11 Release notes:
122+Steps for updating 22.05 Release notes:
78123
79−1. Edit `nixos/doc/manual/release-notes/rl-2111.section.md` with the desired changes
80−2. Run `./nixos/doc/manual/md-to-db.sh` to render `nixos/doc/manual/from_md/release-notes/rl-2111.section.xml`
81−3. Include changes to `rl-2111.section.md` and `rl-2111.section.xml` in the same commit.
124+1. Edit `nixos/doc/manual/release-notes/rl-2205.section.md` with the desired changes
125+2. Run `./nixos/doc/manual/md-to-db.sh` to render `nixos/doc/manual/from_md/release-notes/rl-2205.section.xml`
126+3. Include changes to `rl-2205.section.md` and `rl-2205.section.xml` in the same commit.
82127
83128## Reviewing contributions
84129
COPYING+1−1
@@ -1,4 +1,4 @@
1−Copyright (c) 2003-2021 Eelco Dolstra and the Nixpkgs/NixOS contributors
1+Copyright (c) 2003-2022 Eelco Dolstra and the Nixpkgs/NixOS contributors
22
33Permission is hereby granted, free of charge, to any person obtaining
44a copy of this software and associated documentation files (the
README.md+12−7
@@ -1,14 +1,19 @@
11<p align="center">
2− <a href="https://nixos.org/nixos"><img src="https://nixos.org/logo/nixos-hires.png" width="500px" alt="NixOS logo" /></a>
2+ <a href="https://nixos.org#gh-light-mode-only">
3+ <img src="https://raw.githubusercontent.com/NixOS/nixos-homepage/master/logo/nixos-hires.png" width="500px" alt="NixOS logo"/>
4+ </a>
5+ <a href="https://nixos.org#gh-dark-mode-only">
6+ <img src="https://raw.githubusercontent.com/NixOS/nixos-artwork/master/logo/nixos-white.png" width="500px" alt="NixOS logo"/>
7+ </a>
38</p>
49
510<p align="center">
6− <a href="https://www.codetriage.com/nixos/nixpkgs"><img src="https://www.codetriage.com/nixos/nixpkgs/badges/users.svg" alt="Code Triagers badge" /></a>
7− <a href="https://opencollective.com/nixos"><img src="https://opencollective.com/nixos/tiers/supporter/badge.svg?label=Supporter&color=brightgreen" alt="Open Collective supporters" /></a>
11+ <a href="https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md"><img src="https://img.shields.io/github/contributors-anon/NixOS/nixpkgs" alt="Contributors badge" /></a>
12+ <a href="https://opencollective.com/nixos"><img src="https://opencollective.com/nixos/tiers/supporter/badge.svg?label=supporters&color=brightgreen" alt="Open Collective supporters" /></a>
813</p>
914
1015[Nixpkgs](https://github.com/nixos/nixpkgs) is a collection of over
11−60,000 software packages that can be installed with the
16+80,000 software packages that can be installed with the
1217[Nix](https://nixos.org/nix/) package manager. It also implements
1318[NixOS](https://nixos.org/nixos/), a purely-functional Linux distribution.
1419
@@ -46,14 +51,14 @@ Nixpkgs and NixOS are built and tested by our continuous integration
4651system, [Hydra](https://hydra.nixos.org/).
4752
4853* [Continuous package builds for unstable/master](https://hydra.nixos.org/jobset/nixos/trunk-combined)
49−* [Continuous package builds for the NixOS 21.05 release](https://hydra.nixos.org/jobset/nixos/release-21.05)
54+* [Continuous package builds for the NixOS 21.11 release](https://hydra.nixos.org/jobset/nixos/release-21.11)
5055* [Tests for unstable/master](https://hydra.nixos.org/job/nixos/trunk-combined/tested#tabs-constituents)
51−* [Tests for the NixOS 21.05 release](https://hydra.nixos.org/job/nixos/release-21.05/tested#tabs-constituents)
56+* [Tests for the NixOS 21.11 release](https://hydra.nixos.org/job/nixos/release-21.11/tested#tabs-constituents)
5257
5358Artifacts successfully built with Hydra are published to cache at
5459https://cache.nixos.org/. When successful build and test criteria are
5560met, the Nixpkgs expressions are distributed via [Nix
56−channels](https://nixos.org/nix/manual/#sec-channels).
61+channels](https://nixos.org/manual/nix/stable/package-management/channels.html).
5762
5863# Contributing
5964
doc/build-aux/pandoc-filters/link-unix-man-references.lua+1−2
@@ -1,6 +1,5 @@
11--[[
2−Turns a manpage reference into a link, when a mapping is defined
3−in the unix-man-urls.lua file.
2+Turns a manpage reference into a link, when a mapping is defined below.
43]]
54
65local man_urls = {
doc/builders/fetchers.chapter.md+49−12
@@ -1,8 +1,16 @@
11# Fetchers {#chap-pkgs-fetchers}
22
3−When using Nix, you will frequently need to download source code and other files from the internet. Nixpkgs comes with a few helper functions that allow you to fetch fixed-output derivations in a structured way.
3+When using Nix, you will frequently need to download source code and other files from the internet. For this purpose, Nix provides the [_fixed output derivation_](https://nixos.org/manual/nix/stable/#fixed-output-drvs) feature and Nixpkgs provides various functions that implement the actual fetching from various protocols and services.
44
5−The two fetcher primitives 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.
5+## Caveats
6+
7+Because 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.
8+
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.
10+
11+## `fetchurl` and `fetchzip` {#fetchurl}
12+
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.
614
715```nix
816{ stdenv, fetchurl }:
@@ -16,11 +24,11 @@ stdenv.mkDerivation {
1624}
1725```
1826
19−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.
2028
21−`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.
2230
23−Other fetcher functions allow you to add source code directly from a VCS such as subversion or git. These are mostly straightforward nambes based on the name of the command used with the VCS system. Because they give you a working repository, they act most like `fetchzip`.
31+Most other fetchers return a directory rather than a single file.
2432
2533## `fetchsvn` {#fetchsvn}
2634
@@ -30,7 +38,25 @@ Used with Subversion. Expects `url` to a Subversion directory, `rev`, and `sha25
3038
3139Used 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`.
3240
33−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.
42+
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:
44+
45+```nix
46+{ stdenv, fetchgit }:
47+
48+stdenv.mkDerivation {
49+ name = "hello";
50+ src = fetchgit {
51+ url = "https://...";
52+ sparseCheckout = ''
53+ path/to/be/included
54+ another/path
55+ '';
56+ sha256 = "0000000000000000000000000000000000000000000000000000";
57+ };
58+}
59+```
3460
3561## `fetchfossil` {#fetchfossil}
3662
@@ -46,19 +72,23 @@ Used with Mercurial. Expects `url`, `rev`, and `sha256`.
4672
4773A number of fetcher functions wrap part of `fetchurl` and `fetchzip`. They are mainly convenience functions intended for commonly used destinations of source code in Nixpkgs. These wrapper fetchers are listed below.
4874
75+## `fetchFromGitea` {#fetchfromgitea}
76+
77+`fetchFromGitea` expects five arguments. `domain` is the gitea server name. `owner` is a string corresponding to the Gitea user or organization that controls this repository. `repo` corresponds to the name of the software repository. These are located at the top of every Gitea 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.
78+
4979## `fetchFromGitHub` {#fetchfromgithub}
5080
51−`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.
5282
5383`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.
5484
5585## `fetchFromGitLab` {#fetchfromgitlab}
5686
57−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.
5888
5989## `fetchFromGitiles` {#fetchfromgitiles}
6090
61−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`.
6292
6393## `fetchFromBitbucket` {#fetchfrombitbucket}
6494
@@ -66,12 +96,19 @@ This is used with BitBucket repositories. The arguments expected are very simila
6696
6797## `fetchFromSavannah` {#fetchfromsavannah}
6898
69−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.
70100
71101## `fetchFromRepoOrCz` {#fetchfromrepoorcz}
72102
73−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.
74104
75105## `fetchFromSourcehut` {#fetchfromsourcehut}
76106
77−This is used with sourcehut repositories. The arguments expected are very similar to fetchFromGitHub above. Don't forget the tilde (~) in front of the user name!
107+This is used with sourcehut repositories. Similar to `fetchFromGitHub` above,
108+it expects `owner`, `repo`, `rev` and `sha256`, but don't forget the tilde (~)
109+in front of the username! Expected arguments also include `vc` ("git" (default)
110+or "hg"), `domain` and `fetchSubmodules`.
111+
112+If `fetchSubmodules` is `true`, `fetchFromSourcehut` uses `fetchgit`
113+or `fetchhg` with `fetchSubmodules` or `fetchSubrepos` set to `true`,
114+respectively. Otherwise, the fetcher uses `fetchzip`.
doc/builders/images/dockertools.section.md+14−8
@@ -58,7 +58,7 @@ After the new layer has been created, its closure (to which `contents`, `config`
5858
5959At the end of the process, only one new single layer will be produced and added to the resulting image.
6060
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`.
6262
6363It is possible to inspect the arguments with which an image was built using its `buildArgs` attribute.
6464
@@ -87,7 +87,7 @@ pkgs.dockerTools.buildImage {
8787}
8888```
8989
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:
9191
9292```ShellSession
9393$ docker images
@@ -95,7 +95,7 @@ REPOSITORY TAG IMAGE ID CREATED SIZE
9595hello latest de2bf4786de6 About a minute ago 25.2MB
9696```
9797
98−however, the produced images will not be binary reproducible.
98+However, the produced images will not be binary reproducible.
9999
100100## buildLayeredImage {#ssec-pkgs-dockerTools-buildLayeredImage}
101101
@@ -119,13 +119,13 @@ Create a Docker image with many of the store paths being on their own layer to i
119119
120120`contents` _optional_
121121
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.
123123
124124 *Default:* `[]`
125125
126126`config` _optional_
127127
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).
129129
130130 *Default:* `{}`
131131
@@ -151,6 +151,12 @@ Create a Docker image with many of the store paths being on their own layer to i
151151
152152: Shell commands to run while creating the archive for the final layer in a fakeroot environment. Unlike `extraCommands`, you can run `chown` to change the owners of the files in the archive, changing fakeroot's state instead of the real filesystem. The latter would require privileges that the build user does not have. Static binaries do not interact with the fakeroot environment. By default all files in the archive will be owned by root.
153153
154+`enableFakechroot` _optional_
155+
156+: Whether to run in `fakeRootCommands` in `fakechroot`, making programs behave as though `/` is the root of the image being created, while files in the Nix store are available as usual. This allows scripts that perform installation in `/` to work as expected. Considering that `fakechroot` is implemented via the same mechanism as `fakeroot`, the same caveats apply.
157+
158+ *Default:* `false`
159+
154160### Behavior of `contents` in the final image {#dockerTools-buildLayeredImage-arg-contents}
155161
156162Each path directly listed in `contents` will have a symlink in the root of the image.
@@ -189,9 +195,9 @@ pkgs.dockerTools.buildLayeredImage {
189195
190196Increasing the `maxLayers` increases the number of layers which have a chance to be shared between different images.
191197
192−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.
193199
194−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.
195201
196202The 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.
197203
@@ -207,7 +213,7 @@ The image produced by running the output script can be piped directly into `dock
207213$(nix-build) | docker load
208214```
209215
210−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:
211217
212218```ShellSession
213219$(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 @@
11# pkgs.ociTools {#sec-pkgs-ociTools}
22
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.
44
55## buildContainer {#ssec-pkgs-ociTools-buildContainer}
66
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.
88
99The parameters of `buildContainer` with an example value are described below:
1010
@@ -30,7 +30,7 @@ buildContainer {
3030}
3131```
3232
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.
3434
3535- `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)
3636
doc/builders/images/snaptools.section.md+1−1
@@ -33,7 +33,7 @@ in snapTools.makeSnap {
3333
3434## Build a Graphical Snap {#ssec-pkgs-snapTools-build-a-snap-firefox}
3535
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.
3737
3838``` {#ex-snapTools-buildSnap-firefox .nix}
3939let
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
44
55## Basic usage {#sec-citrix-base}
66
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.
88
9−## Citrix Selfservice {#sec-citrix-selfservice}
9+## Citrix Self-service {#sec-citrix-selfservice}
1010
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.
1212
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:
1414
1515```ShellSession
1616$ storebrowse -C ~/Downloads/receiverconfig.cr
@@ -19,7 +19,7 @@ $ selfservice
1919
2020## Custom certificates {#sec-citrix-custom-certs}
2121
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`:
2323
2424```nix
2525with 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
88$ nix-env -f '<nixpkgs>' -qaP -A eclipses --description
99```
1010
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.
1212
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:
1414
1515```nix
1616packageOverrides = pkgs: {
@@ -22,15 +22,15 @@ packageOverrides = pkgs: {
2222}
2323```
2424
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:
2626
2727```ShellSession
2828$ nix-env -f '<nixpkgs>' -qaP -A eclipses.plugins --description
2929```
3030
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.
3232
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:
3434
3535```nix
3636packageOverrides = pkgs: {
doc/builders/packages/elm.section.md+1−1
@@ -1,6 +1,6 @@
11# Elm {#sec-elm}
22
3−To start a development environment do
3+To start a development environment, run:
44
55```ShellSession
66nix-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.
2020}
2121```
2222
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.
2424
2525```nix
2626{
@@ -101,9 +101,9 @@ You can install it like any other packages via `nix-env -iA myEmacs`. However, t
101101}
102102```
103103
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.
105105
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'`.
107107
108108```nix
109109overrides = self: super: rec {
doc/builders/packages/etc-files.section.mdnew file+18
@@ -0,0 +1,18 @@
1+# /etc files {#etc}
2+
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.
4+
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.
6+
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.
8+
9+
10+```bash
11+> nix-shell -p iana-etc
12+
13+[nix-shell:~]$ env | grep NIX_ETC
14+NIX_ETC_SERVICES=/nix/store/aj866hr8fad8flnggwdhrldm0g799ccz-iana-etc-20210225/etc/services
15+NIX_ETC_PROTOCOLS=/nix/store/aj866hr8fad8flnggwdhrldm0g799ccz-iana-etc-20210225/etc/protocols
16+```
17+
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 @@
22
33## Build wrapped Firefox with extensions and policies {#build-wrapped-firefox-with-extensions-and-policies}
44
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:
66
77```nix
88{
@@ -40,13 +40,12 @@ The `wrapFirefox` function allows to pass policies, preferences and extension th
4040}
4141```
4242
43−If `nixExtensions != null` then all manually installed addons will be uninstalled from your browser profile.
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`.
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.
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)
45+or type into the Firefox URL bar: `about:policies#documentation`.
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.
4747
4848## 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.
50−
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.
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.
5250
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.
3636## Fish wrapper {#sec-fish-wrapper}
3737
3838The `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
4040snippets and functions sourced from the given paths. This provides a convenient
4141way to test Fish plugins and scripts without having to alter the environment.
4242
doc/builders/packages/fuse.section.md+2−2
@@ -24,10 +24,10 @@ packages on macOS:
2424 checking for fuse.h... no
2525 configure: error: No fuse.h found.
2626
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
2828`AC_CHECK_LIBS` to detect libfuse, and will occur even when the `fuse` package
2929is 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
3131`FUSE_USE_VERSION`, but only inside C source files. This results in the above
3232error at configure time because the configure script would attempt to compile
3333sample 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.
66
77IBus 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).
88
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:
1010
1111```nix
1212{ pkgs, ... }: {
@@ -19,7 +19,7 @@ On NixOS you need to explicitly enable `ibus` with given engines before customiz
1919
2020## Using custom hunspell dictionaries {#sec-ibus-typing-booster-customize-hunspell}
2121
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:
2323
2424```nix
2525ibus-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
3131
3232The `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:
3333
34−On NixOS it can be installed using the following expression:
34+On NixOS, it can be installed using the following expression:
3535
3636```nix
3737{ pkgs, ... }: { fonts.fonts = with pkgs; [ noto-fonts-emoji ]; }
doc/builders/packages/index.xml+1
@@ -17,6 +17,7 @@
1717 <xi:include href="kakoune.section.xml" />
1818 <xi:include href="linux.section.xml" />
1919 <xi:include href="locales.section.xml" />
20+ <xi:include href="etc-files.section.xml" />
2021 <xi:include href="nginx.section.xml" />
2122 <xi:include href="opengl.section.xml" />
2223 <xi:include href="shell-helpers.section.xml" />
doc/builders/packages/linux.section.md+11−11
@@ -4,7 +4,7 @@ The Nix expressions to build the Linux kernel are in [`pkgs/os-specific/linux/ke
44
55The 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`).
66
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:
88
99```nix
1010modulesTree = [kernel]
@@ -14,28 +14,28 @@ modulesTree = [kernel]
1414
1515How to add a new (major) version of the Linux kernel to Nixpkgs:
1616
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.
1818
19−2. Add the new kernel to `all-packages.nix` (e.g., create an attribute `kernel_2_6_22`).
19+2. Add the new kernel to the `kernels` attribute set in `linux-kernels.nix` (e.g., create an attribute `kernel_2_6_22`).
2020
21213. 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:
2222
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`).
2424
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.
2626
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`).
2828
29− 4. If needed you can also run `make menuconfig`:
29+ 4. If needed, you can also run `make menuconfig`:
3030
3131 ```ShellSession
32− $ nix-env -i ncurses
32+ $ nix-env -f "<nixpkgs>" -iA ncurses
3333 $ export NIX_CFLAGS_LINK=-lncurses
3434 $ make menuconfig ARCH=arch
3535 ```
3636
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`).
3838
39−4. Test building the kernel: `nix-build -A kernel_2_6_22`. If it compiles, ship it! For extra credit, try booting NixOS with it.
39+4. 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.
4040
41−5. It may be that the new kernel requires updating the external kernel modules and kernel-dependent packages listed in the `linuxPackagesFor` function in `all-packages.nix` (such as the NVIDIA drivers, AUFS, etc.). If the updated packages aren’t backwards compatible with older kernels, you may need to keep the older versions around.
41+5. It may be that the new kernel requires updating the external kernel modules and kernel-dependent packages listed in the `linuxPackagesFor` function in `linux-kernels.nix` (such as the NVIDIA drivers, AUFS, etc.). If the updated packages aren’t backwards compatible with older kernels, you may need to keep the older versions around.
doc/builders/packages/locales.section.md+2−2
@@ -1,5 +1,5 @@
11# Locales {#locales}
22
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.
44
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 @@
44
55## ETags on static files served from the Nix store {#sec-nginx-etag}
66
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).
88
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.
1010
1111As 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
1212
1313If 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.
1414
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
44
55- `fzf` : `fzf-share`
66
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:
88
99```bash
1010source "$(fzf-share)/completion.bash"
doc/builders/packages/steam.section.md+8−8
@@ -2,20 +2,20 @@
22
33## Steam in Nix {#sec-steam-nix}
44
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`.
66
77Nix problems and constraints:
88
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`.
1010- 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.
1212- The steam binary cannot be patched, it's also checked.
1313
1414The 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.
1515
1616## How to play {#sec-steam-play}
1717
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.
1919
2020## Troubleshooting {#sec-steam-troub}
2121
@@ -32,7 +32,7 @@ Use `programs.steam.enable = true;` if you want to add steam to systemPackages a
3232- **Using the FOSS Radeon or nouveau (nvidia) drivers**
3333
3434 - 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:
3636
3737 ```
3838 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
4242
4343- **Java**
4444
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:
4646
4747 ```
4848 /home/foo/.local/share/Steam/SteamApps/common/towns/towns.sh: line 1: java: command not found
4949 ```
5050
51− you need to add
51+ you need to add:
5252
5353 ```nix
5454 steam.override { withJava = true; };
@@ -56,7 +56,7 @@ Use `programs.steam.enable = true;` if you want to add steam to systemPackages a
5656
5757## steam-run {#sec-steam-run}
5858
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-native` 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:
6060
6161```
6262steam-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.
44
55## Configuring urxvt {#sec-urxvt-conf}
66
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:
88
99```nix
1010rxvt-unicode.override {
@@ -58,14 +58,14 @@ rxvt-unicode.override {
5858
5959## Packaging urxvt plugins {#sec-urxvt-pkg}
6060
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`.
6262
6363A 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.
6464
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:
6666
6767```nix
6868passthru.perlPackages = [ "self" ];
6969```
7070
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}
22
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:
44
55```nix
66weechat.override {configure = {availablePlugins, ...}: {
@@ -13,7 +13,7 @@ If the `configure` function returns an attrset without the `plugins` attribute,
1313
1414The plugins currently available are `python`, `perl`, `ruby`, `guile`, `tcl` and `lua`.
1515
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:
1717
1818```nix
1919weechat.override { configure = {availablePlugins, ...}: {
@@ -49,7 +49,7 @@ weechat.override {
4949
5050Further values can be added to the list of commands when running `weechat --run-command "your-commands"`.
5151
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`:
5353
5454```nix
5555weechat.override {
@@ -64,7 +64,7 @@ weechat.override {
6464}
6565```
6666
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:
6868
6969```nix
7070{ stdenv, fetchurl }:
doc/builders/special/fhs-environments.section.md+2
@@ -45,3 +45,5 @@ One can create a simple environment using a `shell.nix` like that:
4545```
4646
4747Running `nix-shell` would then drop you into a shell with these libraries and binaries available. You can use this to run closed-source applications which expect FHS structure without hassles: simply change `runScript` to the application path, e.g. `./bin/start.sh` -- relative paths are supported.
48+
49+Additionally, the FHS builder links all relocated gsettings-schemas (the glib setup-hook moves them to `share/gsettings-schemas/${name}/glib-2.0/schemas`) to their standard FHS location. This means you don't need to wrap binaries with `wrapGAppsHook`.
doc/builders/special/mkshell.section.md+26−6
@@ -1,17 +1,37 @@
11# pkgs.mkShell {#sec-pkgs-mkShell}
22
3−`pkgs.mkShell` is a special kind of derivation that is only useful when using
4−it combined with `nix-shell`. It will in fact fail to instantiate when invoked
5−with `nix-build`.
3+`pkgs.mkShell` is a specialized `stdenv.mkDerivation` that removes some
4+repetition when using it with `nix-shell` (or `nix develop`).
65
76## Usage {#sec-pkgs-mkShell-usage}
87
8+Here is a common usage example:
9+
910```nix
1011{ pkgs ? import <nixpkgs> {} }:
1112pkgs.mkShell {
12− # specify which packages to add to the shell environment
1313 packages = [ pkgs.gnumake ];
14− # add all the dependencies, of the given packages, to the shell environment
15− inputsFrom = with pkgs; [ hello gnutar ];
14+
15+ inputsFrom = [ pkgs.hello pkgs.gnutar ];
16+
17+ shellHook = ''
18+ export DEBUG=1
19+ '';
1620}
1721```
22+
23+## Attributes
24+
25+* `name` (default: `nix-shell`). Set the name of the derivation.
26+* `packages` (default: `[]`). Add executable packages to the `nix-shell` environment.
27+* `inputsFrom` (default: `[]`). Add build dependencies of the listed derivations to the `nix-shell` environment.
28+* `shellHook` (default: `""`). Bash statements that are executed by `nix-shell`.
29+
30+... all the attributes of `stdenv.mkDerivation`.
31+
32+## Building the shell
33+
34+This derivation output will contain a text file that contains a reference to
35+all the build inputs. This is useful in CI where we want to make sure that
36+every derivation, and its dependencies, build properly. Or when creating a GC
37+root so that the build dependencies don't get garbage-collected.
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.
3+
4+## `testVersion` {#tester-testVersion}
5+
6+Checks the command output contains the specified version
7+
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.
13+
14+Examples:
15+
16+```nix
17+passthru.tests.version = testVersion { package = hello; };
18+
19+passthru.tests.version = testVersion {
20+ package = seaweedfs;
21+ command = "weed version";
22+};
23+
24+passthru.tests.version = testVersion {
25+ package = key;
26+ command = "KeY --help";
27+ # Wrong '2.5' version in the code. Drop on next version.
28+ version = "2.5";
29+};
30+```
31+
32+## `testEqualDerivation` {#tester-testEqualDerivation}
33+
34+Checks that two packages produce the exact same build instructions.
35+
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.
38+
39+When the derivations are equal, the return value is an empty file.
40+Otherwise, the build log explains the difference via `nix-diff`.
41+
42+Example:
43+
44+```nix
45+testEqualDerivation
46+ "The hello package must stay the same when enabling checks."
47+ hello
48+ (hello.overrideAttrs(o: { doCheck = true; }))
49+```
50+
51+## `invalidateFetcherByDrvHash` {#tester-invalidateFetcherByDrvHash}
52+
53+Use the derivation hash to invalidate the output via name, for testing.
54+
55+Type: `(a@{ name, ... } -> Derivation) -> a -> Derivation`
56+
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.
59+
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.
64+
65+This relies on the assumption that Nix isn't clever enough to reuse its
66+database of local store contents to optimize fetching.
67+
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.
72+
73+Example:
74+
75+```nix
76+tests.fetchgit = invalidateFetcherByDrvHash fetchgit {
77+ name = "nix-source";
78+ url = "https://github.com/NixOS/nix";
79+ rev = "9d9dbe6ed05854e03811c361a3380e09183f4f4a";
80+ sha256 = "sha256-7DszvbCNTjpzGRmpIVAWXk20P0/XTrWZ79KSOGLrUWY=";
81+};
82+```
doc/builders/trivial-builders.chapter.md+127−3
@@ -35,10 +35,10 @@ This works just like `runCommand`. The only difference is that it also provides
3535
3636## `runCommandLocal` {#trivial-builder-runCommandLocal}
3737
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.
3939
4040::: {.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`.
4242:::
4343
4444## `writeTextFile`, `writeText`, `writeTextDir`, `writeScript`, `writeScriptBin` {#trivial-builder-writeText}
@@ -47,9 +47,133 @@ These functions write `text` to the Nix store. This is useful for creating scrip
4747
4848Many more commands wrap `writeTextFile` including `writeText`, `writeTextDir`, `writeScript`, and `writeScriptBin`. These are convenience functions over `writeTextFile`.
4949
50+Here are a few examples:
51+```nix
52+# Writes my-file to /nix/store/<store path>
53+writeTextFile {
54+ name = "my-file";
55+ text = ''
56+ Contents of File
57+ '';
58+}
59+# See also the `writeText` helper function below.
60+
61+# Writes executable my-file to /nix/store/<store path>/bin/my-file
62+writeTextFile {
63+ name = "my-file";
64+ text = ''
65+ Contents of File
66+ '';
67+ executable = true;
68+ destination = "/bin/my-file";
69+}
70+# Writes contents of file to /nix/store/<store path>
71+writeText "my-file"
72+ ''
73+ Contents of File
74+ '';
75+# Writes contents of file to /nix/store/<store path>/share/my-file
76+writeTextDir "share/my-file"
77+ ''
78+ Contents of File
79+ '';
80+# Writes my-file to /nix/store/<store path> and makes executable
81+writeScript "my-file"
82+ ''
83+ Contents of File
84+ '';
85+# Writes my-file to /nix/store/<store path>/bin/my-file and makes executable.
86+writeScriptBin "my-file"
87+ ''
88+ Contents of File
89+ '';
90+# Writes my-file to /nix/store/<store path> and makes executable.
91+writeShellScript "my-file"
92+ ''
93+ Contents of File
94+ '';
95+# Writes my-file to /nix/store/<store path>/bin/my-file and makes executable.
96+writeShellScriptBin "my-file"
97+ ''
98+ Contents of File
99+ '';
100+
101+```
102+
103+## `concatTextFile`, `concatText`, `concatScript` {#trivial-builder-concatText}
104+
105+These functions concatenate `files` to the Nix store in a single file. This is useful for configuration files structured in lines of text. `concatTextFile` takes an attribute set and expects two arguments, `name` and `files`. `name` corresponds to the name used in the Nix store path. `files` will be the files to be concatenated. You can also set `executable` to true to make this file have the executable bit set.
106+`concatText` and`concatScript` are simple wrappers over `concatTextFile`.
107+
108+Here are a few examples:
109+```nix
110+
111+# Writes my-file to /nix/store/<store path>
112+concatTextFile {
113+ name = "my-file";
114+ files = [ drv1 "${drv2}/path/to/file" ];
115+}
116+# See also the `concatText` helper function below.
117+
118+# Writes executable my-file to /nix/store/<store path>/bin/my-file
119+concatTextFile {
120+ name = "my-file";
121+ files = [ drv1 "${drv2}/path/to/file" ];
122+ executable = true;
123+ destination = "/bin/my-file";
124+}
125+# Writes contents of files to /nix/store/<store path>
126+concatText "my-file" [ file1 file2 ]
127+
128+# Writes contents of files to /nix/store/<store path>
129+concatScript "my-file" [ file1 file2 ]
130+```
131+
132+## `writeShellApplication` {#trivial-builder-writeShellApplication}
133+
134+This can be used to easily produce a shell script that has some dependencies (`runtimeInputs`). It automatically sets the `PATH` of the script to contain all of the listed inputs, sets some sanity shellopts (`errexit`, `nounset`, `pipefail`), and checks the resulting script with [`shellcheck`](https://github.com/koalaman/shellcheck).
135+
136+For example, look at the following code:
137+
138+```nix
139+writeShellApplication {
140+ name = "show-nixos-org";
141+
142+ runtimeInputs = [ curl w3m ];
143+
144+ text = ''
145+ curl -s 'https://nixos.org' | w3m -dump -T text/html
146+ '';
147+}
148+```
149+
150+Unlike with normal `writeShellScriptBin`, there is no need to manually write out `${curl}/bin/curl`, setting the PATH
151+was handled by `writeShellApplication`. Moreover, the script is being checked with `shellcheck` for more strict
152+validation.
153+
50154## `symlinkJoin` {#trivial-builder-symlinkJoin}
51155
52156This can be used to put many derivations into the same directory structure. It works by creating a new derivation and adding symlinks to each of the paths listed. It expects two arguments, `name`, and `paths`. `name` is the name used in the Nix store path for the created derivation. `paths` is a list of paths that will be symlinked. These paths can be to Nix store derivations or any other subdirectory contained within.
157+Here is an example:
158+```nix
159+# adds symlinks of hello and stack to current build and prints "links added"
160+symlinkJoin { name = "myexample"; paths = [ pkgs.hello pkgs.stack ]; postBuild = "echo links added"; }
161+```
162+This creates a derivation with a directory structure like the following:
163+```
164+/nix/store/sglsr5g079a5235hy29da3mq3hv8sjmm-myexample
165+|-- bin
166+| |-- hello -> /nix/store/qy93dp4a3rqyn2mz63fbxjg228hffwyw-hello-2.10/bin/hello
167+| `-- stack -> /nix/store/6lzdpxshx78281vy056lbk553ijsdr44-stack-2.1.3.1/bin/stack
168+`-- share
169+ |-- bash-completion
170+ | `-- completions
171+ | `-- stack -> /nix/store/6lzdpxshx78281vy056lbk553ijsdr44-stack-2.1.3.1/share/bash-completion/completions/stack
172+ |-- fish
173+ | `-- vendor_completions.d
174+ | `-- stack.fish -> /nix/store/6lzdpxshx78281vy056lbk553ijsdr44-stack-2.1.3.1/share/fish/vendor_completions.d/stack.fish
175+...
176+```
53177
54178## `writeReferencesToFile` {#trivial-builder-writeReferencesToFile}
55179
@@ -95,5 +219,5 @@ produces an output path `/nix/store/<hash>-runtime-references` containing
95219/nix/store/<hash>-hello-2.10
96220```
97221
98−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
99223by `hi`'s output.
doc/contributing/coding-conventions.chapter.md+24−8
@@ -181,6 +181,21 @@
181181 rev = "${version}";
182182 ```
183183
184+- Building lists conditionally _should_ be done with `lib.optional(s)` instead of using `if cond then [ ... ] else null` or `if cond then [ ... ] else [ ]`.
185+
186+ ```nix
187+ buildInputs = lib.optional stdenv.isDarwin iconv;
188+ ```
189+
190+ instead of
191+
192+ ```nix
193+ buildInputs = if stdenv.isDarwin then [ iconv ] else null;
194+ ```
195+
196+ As an exception, an explicit conditional expression with null can be used when fixing a important bug without triggering a mass rebuild.
197+ If this is done a follow up pull request _should_ be created to change the code to `lib.optional(s)`.
198+
184199- Arguments should be listed in the order they are used, with the exception of `lib`, which always goes first.
185200
186201## Package naming {#sec-package-naming}
@@ -199,17 +214,17 @@ Most of the time, these are the same. For instance, the package `e2fsprogs` has
199214
200215There are a few naming guidelines:
201216
202−- The `name` attribute _should_ be identical to the upstream package name.
217+- The `pname` attribute _should_ be identical to the upstream package name.
203218
204−- 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"`.
205220
206−- 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".
207222
208−- 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.
209224
210−- 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.
211226
212−- 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)
213228
214229## File naming and organisation {#sec-organisation}
215230
@@ -525,10 +540,11 @@ If you do need to do create this sort of patch file, one way to do so is with gi
525540
526541If a patch is available online but does not cleanly apply, it can be modified in some fixed ways by using additional optional arguments for `fetchpatch`:
527542
543+- `relative`: Similar to using `git-diff`'s `--relative` flag, only keep changes inside the specified directory, making paths relative to it.
528544- `stripLen`: Remove the first `stripLen` components of pathnames in the patch.
529545- `extraPrefix`: Prefix pathnames by this string.
530−- `excludes`: Exclude files matching this pattern.
531−- `includes`: Include only files matching this pattern.
546+- `excludes`: Exclude files matching these patterns (applies after the above arguments).
547+- `includes`: Include only files matching these patterns (applies after the above arguments).
532548- `revert`: Revert the patch.
533549
534550Note that because the checksum is computed after applying these effects, using or modifying these arguments will have no effect unless the `sha256` argument is changed as well.
doc/contributing/contributing-to-documentation.chapter.md+1−1
@@ -55,7 +55,7 @@ Additionally, the following syntax extensions are currently used:
5555- []{#ssec-contributing-markup-inline-roles}
5656 If you want to link to a man page, you can use `` {manpage}`nix.conf(5)` ``, which will turn into {manpage}`nix.conf(5)`.
5757
58− The references will turn into links when a mapping exists in {file}`doc/build-aux/pandoc-filters/unix-man-urls.lua`.
58+ The references will turn into links when a mapping exists in {file}`doc/build-aux/pandoc-filters/link-unix-man-references.lua`.
5959
6060 This syntax is taken from [MyST](https://myst-parser.readthedocs.io/en/latest/syntax/syntax.html#roles-an-in-line-extension-point). Though, the feature originates from [reStructuredText](https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-manpage) with slightly different syntax.
6161
doc/contributing/reviewing-contributions.chapter.md+5−4
@@ -103,7 +103,8 @@ Sample template for a new package review is provided below.
103103- [ ] `meta.maintainers` is set
104104- [ ] build time only dependencies are declared in `nativeBuildInputs`
105105- [ ] source is fetched using the appropriate function
106−- [ ] phases are respected
106+- [ ] the list of `phases` is not overridden
107+- [ ] when a phase (like `installPhase`) is overridden it starts with `runHook preInstall` and ends with `runHook postInstall`.
107108- [ ] patches that are remotely available are fetched with `fetchpatch`
108109
109110##### Possible improvements
@@ -121,10 +122,10 @@ Reviewing process:
121122 - [CODEOWNERS](https://help.github.com/articles/about-codeowners/) will make GitHub notify users based on the submitted changes, but it can happen that it misses some of the package maintainers.
122123- Ensure that the module tests, if any, are succeeding.
123124- Ensure that the introduced options are correct.
124− - Type should be appropriate (string related types differs in their merging capabilities, `optionSet` and `string` types are deprecated).
125+ - Type should be appropriate (string related types differs in their merging capabilities, `loaOf` and `string` types are deprecated).
125126 - Description, default and example should be provided.
126127- Ensure that option changes are backward compatible.
127− - `mkRenamedOptionModule` and `mkAliasOptionModule` functions provide way to make option changes backward compatible.
128+ - `mkRenamedOptionModuleWith` provides a way to make option changes backward compatible.
128129- Ensure that removed options are declared with `mkRemovedOptionModule`
129130- Ensure that changes that are not backward compatible are mentioned in release notes.
130131- Ensure that documentations affected by the change is updated.
@@ -156,7 +157,7 @@ Reviewing process:
156157
157158- Ensure that the module tests, if any, are succeeding.
158159- Ensure that the introduced options are correct.
159− - Type should be appropriate (string related types differs in their merging capabilities, `optionSet` and `string` types are deprecated).
160+ - Type should be appropriate (string related types differs in their merging capabilities, `loaOf` and `string` types are deprecated).
160161 - Description, default and example should be provided.
161162- Ensure that module `meta` field is present
162163 - Maintainers should be declared in `meta.maintainers`.
doc/contributing/submitting-changes.chapter.md+20−10
@@ -43,13 +43,13 @@
4343 - nixpkgs:
4444
4545 - update pkg
46− - `nix-env -i pkg-name -f <path to your local nixpkgs folder>`
46+ - `nix-env -iA pkg-attribute-name -f <path to your local nixpkgs folder>`
4747 - add pkg
4848 - Make sure it’s in `pkgs/top-level/all-packages.nix`
49− - `nix-env -i pkg-name -f <path to your local nixpkgs folder>`
49+ - `nix-env -iA pkg-attribute-name -f <path to your local nixpkgs folder>`
5050 - _If you don’t want to install pkg in you profile_.
51− - `nix-build -A pkg-attribute-name <path to your local nixpkgs folder>/default.nix` and check results in the folder `result`. It will appear in the same directory where you did `nix-build`.
52− - If you did `nix-env -i pkg-name` you can do `nix-env -e pkg-name` to uninstall it from your system.
51+ - `nix-build -A pkg-attribute-name <path to your local nixpkgs folder>` and check results in the folder `result`. It will appear in the same directory where you did `nix-build`.
52+ - If you installed your package with `nix-env`, you can run `nix-env -e pkg-name` where `pkg-name` is as reported by `nix-env -q` to uninstall it from your system.
5353
5454 - NixOS and its modules:
5555 - You can add new module to your NixOS configuration file (usually it’s `/etc/nixos/configuration.nix`). And do `sudo nixos-rebuild test -I nixpkgs=<path to your local nixpkgs folder> --fast`.
@@ -96,9 +96,9 @@ We use jbidwatcher as an example for a discontinued project here.
9696
97971. Have Nixpkgs checked out locally and up to date.
98981. 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`
1001001. Remove the package from the list of all packages (`pkgs/top-level/all-packages.nix`).
101−1. Add an alias for the package name in `pkgs/top-level/aliases.nix` (There is also `pkgs/misc/vim-plugins/aliases.nix`. Package sets typically do not have aliases, so we can't add them there.)
101+1. 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.)
102102
103103 For example in this case:
104104
@@ -227,7 +227,7 @@ digraph {
227227}
228228```
229229
230−[This GitHub Action](https://github.com/NixOS/nixpkgs/blob/master/.github/workflows/merge-staging.yml) brings changes from `master` to `staging-next` and from `staging-next` to `staging` every 6 hours.
230+[This GitHub Action](https://github.com/NixOS/nixpkgs/blob/master/.github/workflows/periodic-merge-6h.yml) brings changes from `master` to `staging-next` and from `staging-next` to `staging` every 6 hours.
231231
232232
233233### Master branch {#submitting-changes-master-branch}
@@ -246,11 +246,21 @@ If the branch is already in a broken state, please refrain from adding extra new
246246
247247### Stable release branches {#submitting-changes-stable-release-branches}
248248
249−For cherry-picking a commit to a stable release branch (“backporting”), use `git cherry-pick -x <original commit>` so that the original commit id is included in the commit.
249+The same staging workflow applies to stable release branches, but the main branch is called `release-*` instead of `master`.
250250
251−Add a reason for the backport by using `git cherry-pick -xe <original commit>` instead when it is not obvious from the original commit message. It is not needed when it's a minor version update that includes security and bug fixes but don't add new features or when the commit fixes an otherwise broken package.
251+Example branch names: `release-21.11`, `staging-21.11`, `staging-next-21.11`.
252252
253−For backporting Pull Requests to stable branches, assign label `backport <branch>` to the original Pull Requests and automation should take care of the rest once the Pull Requests is merged.
253+Most changes added to the stable release branches are cherry-picked (“backported”) from the `master` and staging branches.
254+
255+#### Automatically backporting a Pull Request {#submitting-changes-stable-release-branches-automatic-backports}
256+
257+Assign label `backport <branch>` (e.g. `backport release-21.11`) to the PR and a backport PR is automatically created after the PR is merged.
258+
259+#### Manually backporting changes {#submitting-changes-stable-release-branches-manual-backports}
260+
261+Cherry-pick changes via `git cherry-pick -x <original commit>` so that the original commit id is included in the commit message.
262+
263+Add a reason for the backport when it is not obvious from the original commit message. You can do this by cherry picking with `git cherry-pick -xe <original commit>`, which allows editing the commit message. This is not needed for minor version updates that include security and bug fixes but don't add new features or when the commit fixes an otherwise broken package.
254264
255265Here is an example of a cherry-picked commit message with good reason description:
256266
doc/functions/library/attrsets.xml+3−3
@@ -166,7 +166,7 @@ lib.attrsets.setAttrByPath [ "a" "b" ] 3
166166 <xi:include href="./locations.xml" xpointer="lib.attrsets.getAttrFromPath" />
167167
168168 <para>
169− Like [](#function-library-lib.attrsets.attrByPath) except without a default, and it will throw if the value doesn't exist.
169+ Like <xref linkend="function-library-lib.attrsets.attrByPath" /> except without a default, and it will throw if the value doesn't exist.
170170 </para>
171171
172172 <variablelist>
@@ -1474,13 +1474,13 @@ lib.attrsets.zipAttrsWith
14741474 <section xml:id="function-library-lib.attrsets.zipAttrs">
14751475 <title><function>lib.attrsets.zipAttrs</function></title>
14761476
1477− <subtitle><literal>zipAttrsWith :: [ AttrSet ] -> AttrSet</literal>
1477+ <subtitle><literal>zipAttrs :: [ AttrSet ] -> AttrSet</literal>
14781478 </subtitle>
14791479
14801480 <xi:include href="./locations.xml" xpointer="lib.attrsets.zipAttrs" />
14811481
14821482 <para>
1483− Merge sets of attributes and combine each attribute value in to a list. Similar to [](#function-library-lib.attrsets.zipAttrsWith) where the merge function returns a list of all values.
1483+ Merge sets of attributes and combine each attribute value in to a list. Similar to <xref linkend="function-library-lib.attrsets.zipAttrsWith" /> where the merge function returns a list of all values.
14841484 </para>
14851485
14861486 <variablelist>
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"
4+ xml:id="chap-hooks">
5+ <title>Hooks reference</title>
6+ <para>
7+ Nixpkgs has several hook packages that augment the stdenv phases.
8+ </para>
9+ <xi:include href="./postgresql-test-hook.section.xml" />
10+</chapter>
doc/hooks/postgresql-test-hook.section.mdnew file+59
@@ -0,0 +1,59 @@
1+
2+# `postgresqlTestHook` {#sec-postgresqlTestHook}
3+
4+This hook starts a PostgreSQL server during the `checkPhase`. Example:
5+
6+```nix
7+{ stdenv, postgresql, postgresqlTestHook }:
8+stdenv.mkDerivation {
9+
10+ # ...
11+
12+ checkInputs = [
13+ postgresql
14+ postgresqlTestHook
15+ ];
16+}
17+```
18+
19+If you use a custom `checkPhase`, remember to add the `runHook` calls:
20+```nix
21+ checkPhase ''
22+ runHook preCheck
23+
24+ # ... your tests
25+
26+ runHook postCheck
27+ ''
28+```
29+
30+## Variables {#sec-postgresqlTestHook-variables}
31+
32+The hook logic will read a number of variables and set them to a default value if unset or empty.
33+
34+Exported variables:
35+
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`.
40+
41+Bash-only variables:
42+
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`.
48+
49+## TCP and the Nix sandbox {#sec-postgresqlTestHook-tcp}
50+
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.
53+
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.
56+
57+::: {.note}
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.
59+:::
doc/languages-frameworks/agda.section.md+63−1
@@ -158,7 +158,23 @@ This can be overridden.
158158
159159By default, Agda sources are files ending on `.agda`, or literate Agda files ending on `.lagda`, `.lagda.tex`, `.lagda.org`, `.lagda.md`, `.lagda.rst`. The list of recognised Agda source extensions can be extended by setting the `extraExtensions` config variable.
160160
161−## Adding Agda packages to Nixpkgs {#adding-agda-packages-to-nixpkgs}
161+## Maintaining the Agda package set on Nixpkgs {#maintaining-the-agda-package-set-on-nixpkgs}
162+
163+We are aiming at providing all common Agda libraries as packages on `nixpkgs`,
164+and keeping them up to date.
165+Contributions and maintenance help is always appreciated,
166+but the maintenance effort is typically low since the Agda ecosystem is quite small.
167+
168+The `nixpkgs` Agda package set tries to take up a role similar to that of [Stackage](https://www.stackage.org/) in the Haskell world.
169+It is a curated set of libraries that:
170+
171+1. Always work together.
172+2. Are as up-to-date as possible.
173+
174+While the Haskell ecosystem is huge, and Stackage is highly automatised,
175+the Agda package set is small and can (still) be maintained by hand.
176+
177+### Adding Agda packages to Nixpkgs {#adding-agda-packages-to-nixpkgs}
162178
163179To add an Agda package to `nixpkgs`, the derivation should be written to `pkgs/development/libraries/agda/${library-name}/` and an entry should be added to `pkgs/top-level/agda-packages.nix`. Here it is called in a scope with access to all other Agda libraries, so the top line of the `default.nix` can look like:
164180
@@ -192,3 +208,49 @@ mkDerivation {
192208This library has a file called `.agda-lib`, and so we give an empty string to `libraryFile` as nothing precedes `.agda-lib` in the filename. This file contains `name: IAL-1.3`, and so we let `libraryName = "IAL-1.3"`. This library does not use an `Everything.agda` file and instead has a Makefile, so there is no need to set `everythingFile` and we set a custom `buildPhase`.
193209
194210When writing an Agda package it is essential to make sure that no `.agda-lib` file gets added to the store as a single file (for example by using `writeText`). This causes Agda to think that the nix store is a Agda library and it will attempt to write to it whenever it typechecks something. See [https://github.com/agda/agda/issues/4613](https://github.com/agda/agda/issues/4613).
211+
212+In the pull request adding this library,
213+you can test whether it builds correctly by writing in a comment:
214+
215+```
216+@ofborg build agdaPackages.iowa-stdlib
217+```
218+
219+### Maintaining Agda packages
220+
221+As mentioned before, the aim is to have a compatible, and up-to-date package set.
222+These two conditions sometimes exclude each other:
223+For example, if we update `agdaPackages.standard-library` because there was an upstream release,
224+this will typically break many reverse dependencies,
225+i.e. downstream Agda libraries that depend on the standard library.
226+In `nixpkgs` we are typically among the first to notice this,
227+since we have build tests in place to check this.
228+
229+In a pull request updating e.g. the standard library, you should write the following comment:
230+
231+```
232+@ofborg build agdaPackages.standard-library.passthru.tests
233+```
234+
235+This will build all reverse dependencies of the standard library,
236+for example `agdaPackages.agda-categories`, or `agdaPackages.generic`.
237+
238+In some cases it is useful to build _all_ Agda packages.
239+This can be done with the following Github comment:
240+
241+```
242+@ofborg build agda.passthru.tests.allPackages
243+```
244+
245+Sometimes, the builds of the reverse dependencies fail because they have not yet been updated and released.
246+You should drop the maintainers a quick issue notifying them of the breakage,
247+citing the build error (which you can get from the ofborg logs).
248+If you are motivated, you might even send a pull request that fixes it.
249+Usually, the maintainers will answer within a week or two with a new release.
250+Bumping the version of that reverse dependency should be a further commit on your PR.
251+
252+In the rare case that a new release is not to be expected within an acceptable time,
253+simply mark the broken package as broken by setting `meta.broken = true;`.
254+This will exclude it from the build test.
255+It can be added later when it is fixed,
256+and does not hinder the advancement of the whole package set in the meantime.
doc/languages-frameworks/beam.section.md+33−8
@@ -74,7 +74,7 @@ there are 3 steps, frontend dependencies (javascript), backend dependencies (eli
7474
7575##### mixRelease - Frontend dependencies (javascript) {#mix-release-javascript-deps}
7676
77−for phoenix projects, inside of nixpkgs you can either use yarn2nix (mkYarnModule) or node2nix. An example with yarn2nix can be found [here](https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/web-apps/plausible/default.nix#L39). An example with node2nix will follow. To package something outside of nixpkgs, you have alternatives like [npmlock2nix](https://github.com/nix-community/npmlock2nix) or [nix-npm-buildpackage](https://github.com/serokell/nix-npm-buildpackage)
77+For phoenix projects, inside of nixpkgs you can either use yarn2nix (mkYarnModule) or node2nix. An example with yarn2nix can be found [here](https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/web-apps/plausible/default.nix#L39). An example with node2nix will follow. To package something outside of nixpkgs, you have alternatives like [npmlock2nix](https://github.com/nix-community/npmlock2nix) or [nix-npm-buildpackage](https://github.com/serokell/nix-npm-buildpackage)
7878
7979##### mixRelease - backend dependencies (mix) {#mix-release-mix-deps}
8080
@@ -82,13 +82,13 @@ There are 2 ways to package backend dependencies. With mix2nix and with a fixed-
8282
8383###### mix2nix {#mix2nix}
8484
85−mix2nix is a cli tool available in nixpkgs. it will generate a nix expression from a mix.lock file. It is quite standard in the 2nix tool series.
85+`mix2nix` is a cli tool available in nixpkgs. it will generate a nix expression from a mix.lock file. It is quite standard in the 2nix tool series.
8686
8787Note that currently mix2nix can't handle git dependencies inside the mix.lock file. If you have git dependencies, you can either add them manually (see [example](https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/pleroma/default.nix#L20)) or use the FOD method.
8888
8989The advantage of using mix2nix is that nix will know your whole dependency graph. On a dependency update, this won't trigger a full rebuild and download of all the dependencies, where FOD will do so.
9090
91−practical steps:
91+Practical steps:
9292
9393- run `mix2nix > mix_deps.nix` in the upstream repo.
9494- pass `mixNixDeps = with pkgs; import ./mix_deps.nix { inherit lib beamPackages; };` as an argument to mixRelease.
@@ -280,6 +280,30 @@ mkShell {
280280}
281281```
282282
283+### Using an overlay
284+
285+If you need to use an overlay to change some attributes of a derivation, e.g. if you need a bugfix from a version that is not yet available in nixpkgs, you can override attributes such as `version` (and the corresponding `sha256`) and then use this overlay in your development environment:
286+
287+#### `shell.nix`
288+
289+```nix
290+let
291+ elixir_1_13_1_overlay = (self: super: {
292+ elixir_1_13 = super.elixir_1_13.override {
293+ version = "1.13.1";
294+ sha256 = "0z0b1w2vvw4vsnb99779c2jgn9bgslg7b1pmd9vlbv02nza9qj5p";
295+ };
296+ });
297+ pkgs = import <nixpkgs> { overlays = [ elixir_1_13_1_overlay ]; };
298+in
299+with pkgs;
300+mkShell {
301+ buildInputs = [
302+ elixir_1_13
303+ ];
304+}
305+```
306+
283307#### Elixir - Phoenix project {#elixir---phoenix-project}
284308
285309Here is an example `shell.nix`.
@@ -291,10 +315,10 @@ let
291315 # define packages to install
292316 basePackages = [
293317 git
294− # replace with beam.packages.erlang.elixir_1_11 if you need
318+ # replace with beam.packages.erlang.elixir_1_13 if you need
295319 beam.packages.erlang.elixir
296320 nodejs
297− postgresql_13
321+ postgresql_14
298322 # only used for frontend dependencies
299323 # you are free to use yarn2nix as well
300324 nodePackages.node2nix
@@ -312,10 +336,11 @@ let
312336 mkdir -p .nix-mix .nix-hex
313337 export MIX_HOME=$PWD/.nix-mix
314338 export HEX_HOME=$PWD/.nix-mix
339+ # make hex from Nixpkgs available
340+ # `mix local.hex` will install hex into MIX_HOME and should take precedence
341+ export MIX_PATH="${beam.packages.erlang.hex}/lib/erlang/lib/hex/ebin"
315342 export PATH=$MIX_HOME/bin:$HEX_HOME/bin:$PATH
316− # TODO: not sure how to make hex available without installing it afterwards.
317− mix local.hex --if-missing
318− export LANG=en_US.UTF-8
343+ export LANG=C.UTF-8
319344 # keep your shell history in iex
320345 export ERL_AFLAGS="-kernel shell_history enabled"
321346
doc/languages-frameworks/chicken.section.mdnew file+49
@@ -0,0 +1,49 @@
1+# CHICKEN {#sec-chicken}
2+
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".
6+
7+## Using Eggs
8+
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
13+might write:
14+
15+```nix
16+ buildInputs = [
17+ chicken
18+ chickenPackages.chickenEggs.srfi-189
19+ ];
20+```
21+
22+Both `chicken` and its eggs have a setup hook which configures the environment
23+variables `CHICKEN_INCLUDE_PATH` and `CHICKEN_REPOSITORY_PATH`.
24+
25+## Updating Eggs
26+
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.
30+
31+The package set is regenerated by running the following shell commands:
32+
33+```
34+$ nix-shell -p chickenPackages.egg2nix
35+$ cd pkgs/development/compilers/chicken/5/
36+$ egg2nix eggs.scm > eggs.nix
37+```
38+
39+## Adding Eggs
40+
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.
45+
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/coq.section.md+4−3
@@ -28,12 +28,13 @@ The recommended way of defining a derivation for a Coq library, is to use the `c
2828* `domain` (optional, defaults to `"github.com"`), domains including the strings `"github"` or `"gitlab"` in their names are automatically supported, otherwise, one must change the `fetcher` argument to support them (cf `pkgs/development/coq-modules/heq/default.nix` for an example),
2929* `releaseRev` (optional, defaults to `(v: v)`), provides a default mapping from release names to revision hashes/branch names/tags,
3030* `displayVersion` (optional), provides a way to alter the computation of `name` from `pname`, by explaining how to display version numbers,
31−* `namePrefix` (optional), provides a way to alter the computation of `name` from `pname`, by explaining which dependencies must occur in `name`,
32−* `extraBuildInputs` (optional), by default `buildInputs` just contains `coq`, this allows to add more build inputs,
31+* `namePrefix` (optional, defaults to `[ "coq" ]`), provides a way to alter the computation of `name` from `pname`, by explaining which dependencies must occur in `name`,
32+* `extraNativeBuildInputs` (optional), by default `nativeBuildInputs` just contains `coq`, this allows to add more native build inputs, `nativeBuildInputs` are executables and `buildInputs` are libraries and dependencies,
33+* `extraBuildInputs` (optional), this allows to add more build inputs,
3334* `mlPlugin` (optional, defaults to `false`). Some extensions (plugins) might require OCaml and sometimes other OCaml packages. Standard dependencies can be added by setting the current option to `true`. For a finer grain control, the `coq.ocamlPackages` attribute can be used in `extraBuildInputs` to depend on the same package set Coq was built against.
3435* `useDune2ifVersion` (optional, default to `(x: false)` uses Dune2 to build the package if the provided predicate evaluates to true on the version, e.g. `useDune2if = versions.isGe "1.1"` will use dune if the version of the package is greater or equal to `"1.1"`,
3536* `useDune2` (optional, defaults to `false`) uses Dune2 to build the package if set to true, the presence of this attribute overrides the behavior of the previous one.
36−* `opam-name` (optional, defaults to `coq-` followed by the value of `pname`), name of the Dune package to build.
37+* `opam-name` (optional, defaults to concatenating with a dash separator the components of `namePrefix` and `pname`), name of the Dune package to build.
3738* `enableParallelBuilding` (optional, defaults to `true`), since it is activated by default, we provide a way to disable it.
3839* `extraInstallFlags` (optional), allows to extend `installFlags` which initializes the variable `COQMF_COQLIB` so as to install in the proper subdirectory. Indeed Coq libraries should be installed in `$(out)/lib/coq/${coq.coq-version}/user-contrib/`. Such directories are automatically added to the `$COQPATH` environment variable by the hook defined in the Coq derivation.
3940* `setCOQBIN` (optional, defaults to `true`), by default, the environment variable `$COQBIN` is set to the current Coq's binary, but one can disable this behavior by setting it to `false`,
doc/languages-frameworks/crystal.section.md+2−2
@@ -4,12 +4,12 @@
44
55This section uses [Mint](https://github.com/mint-lang/mint) as an example for how to build a Crystal package.
66
7−If the Crystal project has any dependencies, the first step is to get a `shards.nix` file encoding those. Get a copy of the project and go to its root directory such that its `shard.lock` file is in the current directory, then run `crystal2nix` in it
8−
7+If the Crystal project has any dependencies, the first step is to get a `shards.nix` file encoding those. Get a copy of the project and go to its root directory such that its `shard.lock` file is in the current directory. Executable projects should usually commit the `shard.lock` file, but sometimes that's not the case, which means you need to generate it yourself. With an existing `shard.lock` file, `crystal2nix` can be run.
98```bash
109$ git clone https://github.com/mint-lang/mint
1110$ cd mint
1211$ git checkout 0.5.0
12+$ if [ ! -f shard.lock ]; then nix-shell -p shards --run "shards lock"; fi
1313$ nix-shell -p crystal2nix --run crystal2nix
1414```
1515
doc/languages-frameworks/cuda.section.mdnew file+34
@@ -0,0 +1,34 @@
1+# CUDA {#cuda}
2+
3+CUDA-only packages are stored in the `cudaPackages` packages set. This set
4+includes the `cudatoolkit`, portions of the toolkit in separate derivations,
5+`cudnn`, `cutensor` and `nccl`.
6+
7+A package set is available for each CUDA version, so for example
8+`cudaPackages_11_6`. Within each set is a matching version of the above listed
9+packages. Additionally, other versions of the packages that are packaged and
10+compatible are available as well. For example, there can be a
11+`cudaPackages.cudnn_8_3_2` package.
12+
13+To use one or more CUDA packages in an expression, give the expression a `cudaPackages` parameter, and in case CUDA is optional
14+```nix
15+cudaSupport ? false
16+cudaPackages ? {}
17+```
18+
19+When using `callPackage`, you can choose to pass in a different variant, e.g.
20+when a different version of the toolkit suffices
21+```nix
22+mypkg = callPackage { cudaPackages = cudaPackages_11_5; }
23+```
24+
25+If another version of say `cudnn` or `cutensor` is needed, you can override the
26+package set to make it the default. This guarantees you get a consistent package
27+set.
28+```nix
29+mypkg = let
30+ cudaPackages = cudaPackages_11_5.overrideScope' (final: prev {
31+ cudnn = prev.cudnn_8_3_2;
32+ }});
33+in callPackage { inherit cudaPackages; };
34+```
doc/languages-frameworks/dhall.section.md+46−15
@@ -50,7 +50,7 @@ expression does not protect the Prelude import with a semantic integrity
5050check, so the first step is to freeze the expression using `dhall freeze`,
5151like this:
5252
53−```bash
53+```ShellSession
5454$ dhall freeze --inplace ./true.dhall
5555```
5656
@@ -113,7 +113,7 @@ in
113113
114114… which we can then build using this command:
115115
116−```bash
116+```ShellSession
117117$ nix build --file ./example.nix dhallPackages.true
118118```
119119
@@ -121,7 +121,7 @@ $ nix build --file ./example.nix dhallPackages.true
121121
122122The above package produces the following directory tree:
123123
124−```bash
124+```ShellSession
125125$ tree -a ./result
126126result
127127├── .cache
@@ -135,7 +135,7 @@ result
135135
136136* `source.dhall` contains the result of interpreting our Dhall package:
137137
138− ```bash
138+ ```ShellSession
139139 $ cat ./result/source.dhall
140140 True
141141 ```
@@ -143,7 +143,7 @@ result
143143* The `.cache` subdirectory contains one binary cache product encoding the
144144 same result as `source.dhall`:
145145
146− ```bash
146+ ```ShellSession
147147 $ dhall decode < ./result/.cache/dhall/122027abdeddfe8503496adeb623466caa47da5f63abd2bc6fa19f6cfcb73ecfed70
148148 True
149149 ```
@@ -151,7 +151,7 @@ result
151151* `binary.dhall` contains a Dhall expression which handles fetching and decoding
152152 the same cache product:
153153
154− ```bash
154+ ```ShellSession
155155 $ cat ./result/binary.dhall
156156 missing sha256:27abdeddfe8503496adeb623466caa47da5f63abd2bc6fa19f6cfcb73ecfed70
157157 $ cp -r ./result/.cache .cache
@@ -168,7 +168,7 @@ to conserve disk space when they are used exclusively as dependencies. For
168168example, if we build the Prelude package it will only contain the binary
169169encoding of the expression:
170170
171−```bash
171+```ShellSession
172172$ nix build --file ./example.nix dhallPackages.Prelude
173173
174174$ tree -a result
@@ -199,7 +199,7 @@ Dhall overlay like this:
199199… and now the Prelude will contain the fully decoded result of interpreting
200200the Prelude:
201201
202−```bash
202+```ShellSession
203203$ nix build --file ./example.nix dhallPackages.Prelude
204204
205205$ tree -a result
@@ -302,7 +302,7 @@ Additionally, `buildDhallGitHubPackage` accepts the same arguments as
302302You can use the `dhall-to-nixpkgs` command-line utility to automate
303303packaging Dhall code. For example:
304304
305−```bash
305+```ShellSession
306306$ nix-env --install --attr haskellPackages.dhall-nixpkgs
307307
308308$ nix-env --install --attr nix-prefetch-git # Used by dhall-to-nixpkgs
@@ -329,12 +329,12 @@ The utility takes care of automatically detecting remote imports and converting
329329them to package dependencies. You can also use the utility on local
330330Dhall directories, too:
331331
332−```bash
332+```ShellSession
333333$ dhall-to-nixpkgs directory ~/proj/dhall-semver
334334{ buildDhallDirectoryPackage, Prelude }:
335335 buildDhallDirectoryPackage {
336336 name = "proj";
337− src = /Users/gabriel/proj/dhall-semver;
337+ src = ~/proj/dhall-semver;
338338 file = "package.dhall";
339339 source = false;
340340 document = false;
@@ -342,6 +342,37 @@ $ dhall-to-nixpkgs directory ~/proj/dhall-semver
342342 }
343343```
344344
345+### Remote imports as fixed-output derivations {#ssec-dhall-remote-imports-as-fod}
346+
347+`dhall-to-nixpkgs` has the ability to fetch and build remote imports as
348+fixed-output derivations by using their Dhall integrity check. This is
349+sometimes easier than manually packaging all remote imports.
350+
351+This can be used like the following:
352+
353+```ShellSession
354+$ dhall-to-nixpkgs directory --fixed-output-derivations ~/proj/dhall-semver
355+{ buildDhallDirectoryPackage, buildDhallUrl }:
356+ buildDhallDirectoryPackage {
357+ name = "proj";
358+ src = ~/proj/dhall-semver;
359+ file = "package.dhall";
360+ source = false;
361+ document = false;
362+ dependencies = [
363+ (buildDhallUrl {
364+ url = "https://prelude.dhall-lang.org/v17.0.0/package.dhall";
365+ hash = "sha256-ENs8kZwl6QRoM9+Jeo/+JwHcOQ+giT2VjDQwUkvlpD4=";
366+ dhallHash = "sha256:10db3c919c25e9046833df897a8ffe2701dc390fa0893d958c3430524be5a43e";
367+ })
368+ ];
369+ }
370+```
371+
372+Here, `dhall-semver`'s `Prelude` dependency is fetched and built with the
373+`buildDhallUrl` helper function, instead of being passed in as a function
374+argument.
375+
345376## Overriding dependency versions {#ssec-dhall-overriding-dependency-versions}
346377
347378Suppose that we change our `true.dhall` example expression to depend on an older
@@ -359,7 +390,7 @@ in Prelude.Bool.not False
359390
360391If we try to rebuild that expression the build will fail:
361392
362−```
393+```ShellSession
363394$ nix build --file ./example.nix dhallPackages.true
364395builder for '/nix/store/0f1hla7ff1wiaqyk1r2ky4wnhnw114fi-true.drv' failed with exit code 1; last 10 log lines:
365396
@@ -385,7 +416,7 @@ importing the URL.
385416However, we can override the default Prelude version by using `dhall-to-nixpkgs`
386417to create a Dhall package for our desired Prelude:
387418
388−```bash
419+```ShellSession
389420$ dhall-to-nixpkgs github https://github.com/dhall-lang/dhall-lang.git \
390421 --name Prelude \
391422 --directory Prelude \
@@ -396,7 +427,7 @@ $ dhall-to-nixpkgs github https://github.com/dhall-lang/dhall-lang.git \
396427… and then referencing that package in our Dhall overlay, by either overriding
397428the Prelude globally for all packages, like this:
398429
399−```bash
430+```nix
400431 dhallOverrides = self: super: {
401432 true = self.callPackage ./true.nix { };
402433
@@ -407,7 +438,7 @@ the Prelude globally for all packages, like this:
407438… or selectively overriding the Prelude dependency for just the `true` package,
408439like this:
409440
410−```bash
441+```nix
411442 dhallOverrides = self: super: {
412443 true = self.callPackage ./true.nix {
413444 Prelude = self.callPackage ./Prelude.nix { };
doc/languages-frameworks/dotnet.section.md+63−6
@@ -28,8 +28,7 @@ mkShell {
2828 packages = [
2929 (with dotnetCorePackages; combinePackages [
3030 sdk_3_1
31− sdk_3_0
32− sdk_2_1
31+ sdk_5_0
3332 ])
3433 ];
3534}
@@ -64,12 +63,70 @@ $ dotnet --info
6463
6564The `dotnetCorePackages.sdk_X_Y` is preferred over the old dotnet-sdk as both major and minor version are very important for a dotnet environment. If a given minor version isn't present (or was changed), then this will likely break your ability to build a project.
6665
67−## dotnetCorePackages.sdk vs dotnetCorePackages.net vs dotnetCorePackages.netcore vs dotnetCorePackages.aspnetcore {#dotnetcorepackages.sdk-vs-dotnetcorepackages.net-vs-dotnetcorepackages.netcore-vs-dotnetcorepackages.aspnetcore}
66+## dotnetCorePackages.sdk vs dotnetCorePackages.runtime vs dotnetCorePackages.aspnetcore {#dotnetcorepackages.sdk-vs-dotnetcorepackages.runtime-vs-dotnetcorepackages.aspnetcore}
6867
69−The `dotnetCorePackages.sdk` contains both a runtime and the full sdk of a given version. The `net`, `netcore` and `aspnetcore` packages are meant to serve as minimal runtimes to deploy alongside already built applications. For runtime versions >= .NET 5 `net` is used while `netcore` is used for older .NET Core runtime version.
68+The `dotnetCorePackages.sdk` contains both a runtime and the full sdk of a given version. The `runtime` and `aspnetcore` packages are meant to serve as minimal runtimes to deploy alongside already built applications.
7069
7170## Packaging a Dotnet Application {#packaging-a-dotnet-application}
7271
73−Ideally, we would like to build against the sdk, then only have the dotnet runtime available in the runtime closure.
72+To package Dotnet applications, you can use `buildDotnetModule`. This has similar arguments to `stdenv.mkDerivation`, with the following additions:
73+
74+* `projectFile` has to be used for specifying the dotnet project file relative to the source root. These usually have `.sln` or `.csproj` file extensions. This can be an array of multiple projects as well.
75+* `nugetDeps` has to be used to specify the NuGet dependency file. Unfortunately, these cannot be deterministically fetched without a lockfile. A script to fetch these is available as `passthru.fetch-deps`. This file can also be generated manually using `nuget-to-nix` tool, which is available in nixpkgs.
76+* `packNupkg` is used to pack project as a `nupkg`, and installs it to `$out/share`. If set to `true`, the derivation can be used as a dependency for another dotnet project by adding it to `projectReferences`.
77+* `projectReferences` can be used to resolve `ProjectReference` project items. Referenced projects can be packed with `buildDotnetModule` by setting the `packNupkg = true` attribute and passing a list of derivations to `projectReferences`. Since we are sharing referenced projects as NuGets they must be added to csproj/fsproj files as `PackageReference` as well.
78+ For example, your project has a local dependency:
79+ ```xml
80+ <ProjectReference Include="../foo/bar.fsproj" />
81+ ```
82+ To enable discovery through `projectReferences` you would need to add:
83+ ```xml
84+ <ProjectReference Include="../foo/bar.fsproj" />
85+ <PackageReference Include="bar" Version="*" Condition=" '$(ContinuousIntegrationBuild)'=='true' "/>
86+ ```
87+* `executables` is used to specify which executables get wrapped to `$out/bin`, relative to `$out/lib/$pname`. If this is unset, all executables generated will get installed. If you do not want to install any, set this to `[]`. This gets done in the `preFixup` phase.
88+* `runtimeDeps` is used to wrap libraries into `LD_LIBRARY_PATH`. This is how dotnet usually handles runtime dependencies.
89+* `buildType` is used to change the type of build. Possible values are `Release`, `Debug`, etc. By default, this is set to `Release`.
90+* `dotnet-sdk` is useful in cases where you need to change what dotnet SDK is being used.
91+* `dotnet-runtime` is useful in cases where you need to change what dotnet runtime is being used. This can be either a regular dotnet runtime, or an aspnetcore.
92+* `dotnet-test-sdk` is useful in cases where unit tests expect a different dotnet SDK. By default, this is set to the `dotnet-sdk` attribute.
93+* `testProjectFile` is useful in cases where the regular project file does not contain the unit tests. It gets restored and build, but not installed. You may need to regenerate your nuget lockfile after setting this.
94+* `disabledTests` is used to disable running specific unit tests. This gets passed as: `dotnet test --filter "FullyQualifiedName!={}"`, to ensure compatibility with all unit test frameworks.
95+* `dotnetRestoreFlags` can be used to pass flags to `dotnet restore`.
96+* `dotnetBuildFlags` can be used to pass flags to `dotnet build`.
97+* `dotnetTestFlags` can be used to pass flags to `dotnet test`. Used only if `doCheck` is set to `true`.
98+* `dotnetInstallFlags` can be used to pass flags to `dotnet install`.
99+* `dotnetPackFlags` can be used to pass flags to `dotnet pack`. Used only if `packNupkg` is set to `true`.
100+* `dotnetFlags` can be used to pass flags to all of the above phases.
101+
102+When packaging a new application, you need to fetch it's dependencies. You can set `nugetDeps` to an empty string to make the derivation temporarily evaluate, and then run `nix-build -A package.passthru.fetch-deps` to generate it's dependency fetching script. After running the script, you should have the location of the generated lockfile printed to the console. This can be copied to a stable directory. Note that if either `projectFile` or `nugetDeps` are unset, this script cannot be generated!
103+
104+Here is an example `default.nix`, using some of the previously discussed arguments:
105+```nix
106+{ lib, buildDotnetModule, dotnetCorePackages, ffmpeg }:
107+
108+let
109+ referencedProject = import ../../bar { ... };
110+in buildDotnetModule rec {
111+ pname = "someDotnetApplication";
112+ version = "0.1";
113+
114+ src = ./.;
115+
116+ projectFile = "src/project.sln";
117+ nugetDeps = ./deps.nix; # File generated with `nix-build -A package.passthru.fetch-deps`.
118+
119+ projectReferences = [ referencedProject ]; # `referencedProject` must contain `nupkg` in the folder structure.
74120
75−TODO: Create closure-friendly way to package dotnet applications
121+ dotnet-sdk = dotnetCorePackages.sdk_3_1;
122+ dotnet-runtime = dotnetCorePackages.net_5_0;
123+ dotnetFlags = [ "--runtime linux-x64" ];
124+
125+ executables = [ "foo" ]; # This wraps "$out/lib/$pname/foo" to `$out/bin/foo`.
126+ executables = []; # Don't install any executables.
127+
128+ packNupkg = true; # This packs the project as "foo-0.1.nupkg" at `$out/share`.
129+
130+ runtimeDeps = [ ffmpeg ]; # This will wrap ffmpeg's library path into `LD_LIBRARY_PATH`.
131+}
132+```
doc/languages-frameworks/emscripten.section.md+2−2
@@ -15,12 +15,12 @@ Modes of use of `emscripten`:
1515
1616 If you want to work with `emcc`, `emconfigure` and `emmake` as you are used to from Ubuntu and similar distributions you can use these commands:
1717
18− * `nix-env -i emscripten`
18+ * `nix-env -f "<nixpkgs>" -iA emscripten`
1919 * `nix-shell -p emscripten`
2020
2121* **Declarative usage**:
2222
23− This mode is far more power full since this makes use of `nix` for dependency management of emscripten libraries and targets by using the `mkDerivation` which is implemented by `pkgs.emscriptenStdenv` and `pkgs.buildEmscriptenPackage`. The source for the packages is in `pkgs/top-level/emscripten-packages.nix` and the abstraction behind it in `pkgs/development/em-modules/generic/default.nix`.
23+ This mode is far more power full since this makes use of `nix` for dependency management of emscripten libraries and targets by using the `mkDerivation` which is implemented by `pkgs.emscriptenStdenv` and `pkgs.buildEmscriptenPackage`. The source for the packages is in `pkgs/top-level/emscripten-packages.nix` and the abstraction behind it in `pkgs/development/em-modules/generic/default.nix`. From the root of the nixpkgs repository:
2424 * build and install all packages:
2525 * `nix-env -iA emscriptenPackages`
2626
doc/languages-frameworks/gnome.section.md+17−3
@@ -42,7 +42,21 @@ Unlike other libraries mentioned in this section, GdkPixbuf only supports a sing
4242
4343### Icons {#ssec-gnome-icons}
4444
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.
46+
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:
48+
49+```nix
50+ buildInputs = [
51+ pantheon.elementary-icon-theme
52+ ];
53+ preFixup = ''
54+ gappsWrapperArgs+=(
55+ # The icon theme is hardcoded.
56+ --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS"
57+ )
58+ '';
59+```
4660
4761To 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.
4862
@@ -92,13 +106,13 @@ For convenience, it also adds `dconf.lib` for a GIO module implementing a GSetti
92106
93107- []{#ssec-gnome-hooks-glib} `glib` setup hook will populate `GSETTINGS_SCHEMAS_PATH` and then `wrapGAppsHook` will prepend it to `XDG_DATA_DIRS`.
94108
95−- []{#ssec-gnome-hooks-gdk-pixbuf} `gdk-pixbuf` setup hook will populate `GDK_PIXBUF_MODULE_FILE` with the path to biggest `loaders.cache` file from the dependencies containing [GdkPixbuf loaders](ssec-gnome-gdk-pixbuf-loaders). This works fine when there are only two packages containing loaders (`gdk-pixbuf` and e.g. `librsvg`) – it will choose the second one, reasonably expecting that it will be bigger since it describes extra loader in addition to the default ones. But when there are more than two loader packages, this logic will break. One possible solution would be constructing a custom cache file for each package containing a program like `services/x11/gdk-pixbuf.nix` NixOS module does. `wrapGAppsHook` copies the `GDK_PIXBUF_MODULE_FILE` environment variable into the produced wrapper.
109+- []{#ssec-gnome-hooks-gdk-pixbuf} `gdk-pixbuf` setup hook will populate `GDK_PIXBUF_MODULE_FILE` with the path to biggest `loaders.cache` file from the dependencies containing [GdkPixbuf loaders](#ssec-gnome-gdk-pixbuf-loaders). This works fine when there are only two packages containing loaders (`gdk-pixbuf` and e.g. `librsvg`) – it will choose the second one, reasonably expecting that it will be bigger since it describes extra loader in addition to the default ones. But when there are more than two loader packages, this logic will break. One possible solution would be constructing a custom cache file for each package containing a program like `services/x11/gdk-pixbuf.nix` NixOS module does. `wrapGAppsHook` copies the `GDK_PIXBUF_MODULE_FILE` environment variable into the produced wrapper.
96110
97111- []{#ssec-gnome-hooks-gtk-drop-icon-theme-cache} One of `gtk3`’s setup hooks will remove `icon-theme.cache` files from package’s icon theme directories to avoid conflicts. Icon theme packages should prevent this with `dontDropIconThemeCache = true;`.
98112
99113- []{#ssec-gnome-hooks-dconf} `dconf.lib` is a dependency of `wrapGAppsHook`, which then also adds it to the `GIO_EXTRA_MODULES` variable.
100114
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`.
102116
103117- []{#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`.
104118
doc/languages-frameworks/go.section.md+6−6
@@ -12,8 +12,7 @@ The function `buildGoModule` builds Go programs managed with Go modules. It buil
1212In the following is an example expression using `buildGoModule`, the following arguments are of special significance to the function:
1313
1414- `vendorSha256`: is the hash of the output of the intermediate fetcher derivation. `vendorSha256` can also take `null` as an input. When `null` is used as a value, rather than fetching the dependencies and vendoring them, we use the vendoring included within the source repo. If you'd like to not have to update this field on dependency changes, run `go mod vendor` in your source repo and set `vendorSha256 = null;`
15−- `runVend`: runs the vend command to generate the vendor directory. This is useful if your code depends on c code and go mod tidy does not include the needed sources to build.
16−- `proxyVendor`: Fetches (go mod download) and proxies the vendor directory. This is useful if any dependency has case-insensitive conflicts which will produce platform dependant `vendorSha256` checksums.
15+- `proxyVendor`: Fetches (go mod download) and proxies the vendor directory. This is useful if your code depends on c code and go mod tidy does not include the needed sources to build or if any dependency has case-insensitive conflicts which will produce platform dependant `vendorSha256` checksums.
1716
1817```nix
1918pet = buildGoModule rec {
@@ -29,14 +28,11 @@ pet = buildGoModule rec {
2928
3029 vendorSha256 = "1879j77k96684wi554rkjxydrj8g3hpp0kvxz03sd8dmwr3lh83j";
3130
32− runVend = true;
33−
3431 meta = with lib; {
3532 description = "Simple command-line snippet manager, written in Go";
3633 homepage = "https://github.com/knqyf263/pet";
3734 license = licenses.mit;
3835 maintainers = with maintainers; [ kalbasit ];
39− platforms = platforms.linux ++ platforms.darwin;
4036 };
4137}
4238```
@@ -146,4 +142,8 @@ Removes the pre-existing vendor directory. This should only be used if the depen
146142
147143### `subPackages` {#var-go-subPackages}
148144
149−Limits the builder from building child packages that have not been listed. If `subPackages` is not specified, all child packages will be built.
145+Specified as a string or list of strings. Limits the builder from building child packages that have not been listed. If `subPackages` is not specified, all child packages will be built.
146+
147+### `excludedPackages` {#var-go-excludedPackages}
148+
149+Specified as a string or list of strings. Causes the builder to skip building child packages that match any of the provided values. If `excludedPackages` is not specified, all child packages will be built.
doc/languages-frameworks/idris.section.md+1−4
@@ -5,10 +5,7 @@
55The easiest way to get a working idris version is to install the `idris` attribute:
66
77```ShellSession
8−$ # On NixOS
9−$ nix-env -i nixos.idris
10−$ # On non-NixOS
11−$ nix-env -i nixpkgs.idris
8+$ nix-env -f "<nixpkgs>" -iA idris
129```
1310
1411This however only provides the `prelude` and `base` libraries. To install idris with additional libraries, you can use the `idrisPackages.with-packages` function, e.g. in an overlay in `~/.config/nixpkgs/overlays/my-idris.nix`:
doc/languages-frameworks/index.xml+5
@@ -9,9 +9,12 @@
99 <xi:include href="android.section.xml" />
1010 <xi:include href="beam.section.xml" />
1111 <xi:include href="bower.section.xml" />
12+ <xi:include href="chicken.section.xml" />
1213 <xi:include href="coq.section.xml" />
1314 <xi:include href="crystal.section.xml" />
15+ <xi:include href="cuda.section.xml" />
1416 <xi:include href="dhall.section.xml" />
17+ <xi:include href="dotnet.section.xml" />
1518 <xi:include href="emscripten.section.xml" />
1619 <xi:include href="gnome.section.xml" />
1720 <xi:include href="go.section.xml" />
@@ -23,7 +26,9 @@
2326 <xi:include href="javascript.section.xml" />
2427 <xi:include href="lua.section.xml" />
2528 <xi:include href="maven.section.xml" />
29+ <xi:include href="nim.section.xml" />
2630 <xi:include href="ocaml.section.xml" />
31+ <xi:include href="octave.section.xml" />
2732 <xi:include href="perl.section.xml" />
2833 <xi:include href="php.section.xml" />
2934 <xi:include href="python.section.xml" />
doc/languages-frameworks/java.section.md+9
@@ -72,6 +72,15 @@ in
7272 ...
7373```
7474
75+You can also specify what JDK your JRE should be based on, for example
76+selecting a 'headless' build to avoid including a link to GTK+:
77+
78+```nix
79+my_jre = pkgs.jre_minimal.override {
80+ jdk = jdk11_headless;
81+};
82+```
83+
7584Note all JDKs passthru `home`, so if your application requires
7685environment variables like `JAVA_HOME` being set, that can be done in a
7786generic fashion with the `--set` argument of `makeWrapper`:
doc/languages-frameworks/javascript.section.md+24−2
@@ -85,7 +85,7 @@ you will still need to commit the modified version of the lock files, but at lea
8585
8686each tool has an abstraction to just build the node_modules (dependencies) directory. you can always use the stdenv.mkDerivation with the node_modules to build the package (symlink the node_modules directory and then use the package build command). the node_modules abstraction can be also used to build some web framework frontends. For an example of this see how [plausible](https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/web-apps/plausible/default.nix) is built. mkYarnModules to make the derivation containing node_modules. Then when building the frontend you can just symlink the node_modules directory
8787
88−## javascript packages inside nixpkgs {#javascript-packages-nixpkgs}
88+## Javascript packages inside nixpkgs {#javascript-packages-nixpkgs}
8989
9090The `pkgs/development/node-packages` folder contains a generated collection of
9191[NPM packages](https://npmjs.com/) that can be installed with the Nix package
@@ -121,12 +121,14 @@ requires `node-gyp-build`, so [we override](https://github.com/NixOS/nixpkgs/blo
121121 };
122122```
123123
124+### Adding and Updating Javascript packages in nixpkgs
125+
124126To add a package from NPM to nixpkgs:
125127
1261281. Modify `pkgs/development/node-packages/node-packages.json` to add, update
127129 or remove package entries to have it included in `nodePackages` and
128130 `nodePackages_latest`.
129−2. Run the script: `cd pkgs/development/node-packages && ./generate.sh`.
131+2. Run the script: `./pkgs/development/node-packages/generate.sh`.
1301323. Build your new package to test your changes:
131133 `cd /path/to/nixpkgs && nix-build -A nodePackages.<new-or-updated-package>`.
132134 To build against the latest stable Current Node.js version (e.g. 14.x):
@@ -137,6 +139,26 @@ For more information about the generation process, consult the
137139[README.md](https://github.com/svanderburg/node2nix) file of the `node2nix`
138140tool.
139141
142+To update NPM packages in nixpkgs, run the same `generate.sh` script:
143+
144+```sh
145+./pkgs/development/node-packages/generate.sh
146+```
147+
148+#### Git protocol error
149+
150+Some packages may have Git dependencies from GitHub specified with `git://`.
151+GitHub has
152+[disabled unecrypted Git connections](https://github.blog/2021-09-01-improving-git-protocol-security-github/#no-more-unauthenticated-git),
153+so you may see the following error when running the generate script:
154+`The unauthenticated git protocol on port 9418 is no longer supported`.
155+
156+Use the following Git configuration to resolve the issue:
157+
158+```sh
159+git config --global url."https://github.com/".insteadOf git://github.com/
160+```
161+
140162## Tool specific instructions {#javascript-tool-specific}
141163
142164### node2nix {#javascript-node2nix}
doc/languages-frameworks/lua.section.md+1−1
@@ -128,7 +128,7 @@ Let's present the luarocks way first and the manual one in a second time.
128128
129129### Packaging a library on luarocks {#packaging-a-library-on-luarocks}
130130
131−[Luarocks.org](www.luarocks.org) is the main repository of lua packages.
131+[Luarocks.org](https://luarocks.org/) is the main repository of lua packages.
132132The site proposes two types of packages, the rockspec and the src.rock
133133(equivalent of a [rockspec](https://github.com/luarocks/luarocks/wiki/Rockspec-format) but with the source).
134134These packages can have different build types such as `cmake`, `builtin` etc .
doc/languages-frameworks/nim.section.mdnew file+91
@@ -0,0 +1,91 @@
1+# Nim {#nim}
2+
3+## Overview {#nim-overview}
4+
5+The Nim compiler, a builder function, and some packaged libraries are available
6+in Nixpkgs. Until now each compiler release has been effectively backwards
7+compatible so only the latest version is available.
8+
9+## Nim program packages in Nixpkgs {#nim-program-packages-in-nixpkgs}
10+
11+Nim programs can be built using `nimPackages.buildNimPackage`. In the
12+case of packages not containing exported library code the attribute
13+`nimBinOnly` should be set to `true`.
14+
15+The following example shows a Nim program that depends only on Nim libraries:
16+
17+```nix
18+{ lib, nimPackages, fetchurl }:
19+
20+nimPackages.buildNimPackage rec {
21+ pname = "hottext";
22+ version = "1.4";
23+
24+ nimBinOnly = true;
25+
26+ src = fetchurl {
27+ url = "https://git.sr.ht/~ehmry/hottext/archive/v${version}.tar.gz";
28+ sha256 = "sha256-hIUofi81zowSMbt1lUsxCnVzfJGN3FEiTtN8CEFpwzY=";
29+ };
30+
31+ buildInputs = with nimPackages; [
32+ bumpy
33+ chroma
34+ flatty
35+ nimsimd
36+ pixie
37+ sdl2
38+ typography
39+ vmath
40+ zippy
41+ ];
42+}
43+
44+```
45+
46+## Nim library packages in Nixpkgs {#nim-library-packages-in-nixpkgs}
47+
48+
49+Nim libraries can also be built using `nimPackages.buildNimPackage`, but
50+often the product of a fetcher is sufficient to satisfy a dependency.
51+The `fetchgit`, `fetchFromGitHub`, and `fetchNimble` functions yield an
52+output that can be discovered during the `configurePhase` of `buildNimPackage`.
53+
54+Nim library packages are listed in
55+[pkgs/top-level/nim-packages.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/nim-packages.nix) and implemented at
56+[pkgs/development/nim-packages](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/nim-packages).
57+
58+The following example shows a Nim library that propagates a dependency on a
59+non-Nim package:
60+```nix
61+{ lib, buildNimPackage, fetchNimble, SDL2 }:
62+
63+buildNimPackage rec {
64+ pname = "sdl2";
65+ version = "2.0.4";
66+ src = fetchNimble {
67+ inherit pname version;
68+ hash = "sha256-Vtcj8goI4zZPQs2TbFoBFlcR5UqDtOldaXSH/+/xULk=";
69+ };
70+ propagatedBuildInputs = [ SDL2 ];
71+}
72+```
73+
74+## `buildNimPackage` parameters {#buildnimpackage-parameters}
75+
76+All parameters from `stdenv.mkDerivation` function are still supported. The
77+following are specific to `buildNimPackage`:
78+
79+* `nimBinOnly ? false`: If `true` then build only the programs listed in
80+ the Nimble file in the packages sources.
81+* `nimbleFile`: Specify the Nimble file location of the package being built
82+ rather than discover the file at build-time.
83+* `nimRelease ? true`: Build the package in *release* mode.
84+* `nimDefines ? []`: A list of Nim defines. Key-value tuples are not supported.
85+* `nimFlags ? []`: A list of command line arguments to pass to the Nim compiler.
86+ Use this to specify defines with arguments in the form of `-d:${name}=${value}`.
87+* `nimDoc` ? false`: Build and install HTML documentation.
88+
89+* `buildInputs` ? []: The packages listed here will be searched for `*.nimble`
90+ files which are used to populate the Nim library path. Otherwise the standard
91+ behavior is in effect.
doc/languages-frameworks/ocaml.section.md+44−6
@@ -1,19 +1,49 @@
11# OCaml {#sec-language-ocaml}
22
3+## User guide {#sec-language-ocaml-user-guide}
4+
5+OCaml libraries are available in attribute sets of the form `ocaml-ng.ocamlPackages_X_XX` where X is to be replaced with the desired compiler version. For example, ocamlgraph compiled with OCaml 4.12 can be found in `ocaml-ng.ocamlPackages_4_12.ocamlgraph`. The compiler itself is also located in this set, under the name `ocaml`.
6+
7+If you don't care about the exact compiler version, `ocamlPackages` is a top-level alias pointing to a recent version of OCaml.
8+
9+OCaml applications are usually available top-level, and not inside `ocamlPackages`. Notable exceptions are build tools that must be built with the same compiler version as the compiler you intend to use like `dune` or `ocaml-lsp`.
10+
11+To open a shell able to build a typical OCaml project, put the dependencies in `buildInputs` and add `ocamlPackages.ocaml` and `ocamlPackages.findlib` to `nativeBuildInputs` at least.
12+For example:
13+```nix
14+let
15+ pkgs = import <nixpkgs> {};
16+ # choose the ocaml version you want to use
17+ ocamlPackages = pkgs.ocaml-ng.ocamlPackages_4_12;
18+in
19+pkgs.mkShell {
20+ # build tools
21+ nativeBuildInputs = with ocamlPackages; [ ocaml findlib dune_2 ocaml-lsp ];
22+ # dependencies
23+ buildInputs = with ocamlPackages; [ ocamlgraph ];
24+}
25+```
26+
27+## Packaging guide {#sec-language-ocaml-packaging}
28+
329OCaml libraries should be installed in `$(out)/lib/ocaml/${ocaml.version}/site-lib/`. Such directories are automatically added to the `$OCAMLPATH` environment variable when building another package that depends on them or when opening a `nix-shell`.
430
531Given that most of the OCaml ecosystem is now built with dune, nixpkgs includes a convenience build support function called `buildDunePackage` that will build an OCaml package using dune, OCaml and findlib and any additional dependencies provided as `buildInputs` or `propagatedBuildInputs`.
632
733Here is a simple package example.
834
9−- It defines an (optional) attribute `minimalOCamlVersion` that will be used to
10− throw a descriptive evaluation error if building with an older OCaml is
11− attempted.
35+- It defines an (optional) attribute `minimalOCamlVersion` (see note below)
36+ that will be used to throw a descriptive evaluation error if building with
37+ an older OCaml is attempted.
1238
1339- It uses the `fetchFromGitHub` fetcher to get its source.
1440
15−- `useDune2 = true` ensures that the latest version of Dune is used for the
16− build (this may become the default value in a future release).
41+- `duneVersion = "2"` ensures that Dune version 2 is used for the
42+ build (this is the default; valid values are `"1"`, `"2"`, and `"3"`);
43+ note that there is also a legacy `useDune2` boolean attribute:
44+ set to `false` it corresponds to `duneVersion = "1"`; set to `true` it
45+ corresponds to `duneVersion = "2"`. If both arguments (`duneVersion` and
46+ `useDune2`) are given, the second one (`useDune2`) is silently ignored.
1747
1848- It sets the optional `doCheck` attribute such that tests will be run with
1949 `dune runtest -p angstrom` after the build (`dune build -p angstrom`) is
@@ -41,7 +71,7 @@ Here is a simple package example.
4171buildDunePackage rec {
4272 pname = "angstrom";
4373 version = "0.15.0";
44− useDune2 = true;
74+ duneVersion = "2";
4575
4676 minimalOCamlVersion = "4.04";
4777
@@ -91,3 +121,11 @@ buildDunePackage rec {
91121 };
92122}
93123```
124+
125+Note about `minimalOCamlVersion`. A deprecated version of this argument was
126+spelled `minimumOCamlVersion`; setting the old attribute wrongly modifies the
127+derivation hash and is therefore inappropriate. As a technical dept, currently
128+packaged libraries may still use the old spelling: maintainers are invited to
129+fix this when updating packages. Massive renaming is strongly discouraged as it
130+would be challenging to review, difficult to test, and will cause unnecessary
131+rebuild.
doc/languages-frameworks/octave.section.mdnew file+92
@@ -0,0 +1,92 @@
1+# Octave {#sec-octave}
2+
3+## Introduction {#ssec-octave-introduction}
4+
5+Octave is a modular scientific programming language and environment.
6+A majority of the packages supported by Octave from their [website](https://octave.sourceforge.io/packages.php) are packaged in nixpkgs.
7+
8+## Structure {#ssec-octave-structure}
9+
10+All Octave add-on packages are available in two ways:
11+1. Under the top-level `Octave` attribute, `octave.pkgs`.
12+2. As a top-level attribute, `octavePackages`.
13+
14+## Packaging Octave Packages {#ssec-octave-packaging}
15+
16+Nixpkgs provides a function `buildOctavePackage`, a generic package builder function for any Octave package that complies with the Octave's current packaging format.
17+
18+All Octave packages are defined in [pkgs/top-level/octave-packages.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/octave-packages.nix) rather than `pkgs/all-packages.nix`.
19+Each package is defined in their own file in the [pkgs/development/octave-modules](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/octave-modules) directory.
20+Octave packages are made available through `all-packages.nix` through both the attribute `octavePackages` and `octave.pkgs`.
21+You can test building an Octave package as follows:
22+
23+```ShellSession
24+$ nix-build -A octavePackages.symbolic
25+```
26+
27+To install it into your user profile, run this command from the root of the repository:
28+
29+```ShellSession
30+$ nix-env -f. -iA octavePackages.symbolic
31+```
32+
33+You can build Octave with packages by using the `withPackages` passed-through function.
34+
35+```ShellSession
36+$ nix-shell -p 'octave.withPackages (ps: with ps; [ symbolic ])'
37+```
38+
39+This will also work in a `shell.nix` file.
40+
41+```nix
42+{ pkgs ? import <nixpkgs> { }}:
43+
44+pkgs.mkShell {
45+ nativeBuildInputs = with pkgs; [
46+ (octave.withPackages (opkgs: with opkgs; [ symbolic ]))
47+ ];
48+}
49+```
50+
51+### `buildOctavePackage` Steps {#sssec-buildOctavePackage-steps}
52+
53+The `buildOctavePackage` does several things to make sure things work properly.
54+
55+1. Sets the environment variable `OCTAVE_HISTFILE` to `/dev/null` during package compilation so that the commands run through the Octave interpreter directly are not logged.
56+2. Skips the configuration step, because the packages are stored as gzipped tarballs, which Octave itself handles directly.
57+3. Change the hierarchy of the tarball so that only a single directory is at the top-most level of the tarball.
58+4. Use Octave itself to run the `pkg build` command, which unzips the tarball, extracts the necessary files written in Octave, and compiles any code written in C++ or Fortran, and places the fully compiled artifact in `$out`.
59+
60+`buildOctavePackage` is built on top of `stdenv` in a standard way, allowing most things to be customized.
61+
62+### Handling Dependencies {#sssec-octave-handling-dependencies}
63+
64+In Octave packages, there are four sets of dependencies that can be specified:
65+
66+`nativeBuildInputs`
67+: Just like other packages, `nativeBuildInputs` is intended for architecture-dependent build-time-only dependencies.
68+
69+`buildInputs`
70+: Like other packages, `buildInputs` is intended for architecture-independent build-time-only dependencies.
71+
72+`propagatedBuildInputs`
73+: Similar to other packages, `propagatedBuildInputs` is intended for packages that are required for both building and running of the package.
74+See [Symbolic](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/octave-modules/symbolic/default.nix) for how this works and why it is needed.
75+
76+`requiredOctavePackages`
77+: This is a special dependency that ensures the specified Octave packages are dependent on others, and are made available simultaneously when loading them in Octave.
78+
79+### Installing Octave Packages {#sssec-installing-octave-packages}
80+
81+By default, the `buildOctavePackage` function does _not_ install the requested package into Octave for use.
82+The function will only build the requested package.
83+This is due to Octave maintaining an text-based database about which packages are installed where.
84+To this end, when all the requested packages have been built, the Octave package and all its add-on packages are put together into an environment, similar to Python.
85+
86+1. First, all the Octave binaries are wrapped with the environment variable `OCTAVE_SITE_INITFILE` set to a file in `$out`, which is required for Octave to be able to find the non-standard package database location.
87+2. Because of the way `buildEnv` works, all tarballs that are present (which should be all Octave packages to install) should be removed.
88+3. The path down to the default install location of Octave packages is recreated so that Nix-operated Octave can install the packages.
89+4. Install the packages into the `$out` environment while writing package entries to the database file.
90+This database file is unique for each different (according to Nix) environment invocation.
91+5. Rewrite the Octave-wide startup file to read from the list of packages installed in that particular environment.
92+6. Wrap any programs that are required by the Octave packages so that they work with all the paths defined within the environment.
doc/languages-frameworks/perl.section.md+4−8
@@ -58,13 +58,7 @@ in `all-packages.nix`. You can test building a Perl package as follows:
5858$ nix-build -A perlPackages.ClassC3
5959```
6060
61−`buildPerlPackage` adds `perl-` to the start of the name attribute, so the package above is actually called `perl-Class-C3-0.21`. So to install it, you can say:
62−
63−```ShellSession
64−$ nix-env -i perl-Class-C3
65−```
66−
67−(Of course you can also install using the attribute name: `nix-env -i -A perlPackages.ClassC3`.)
61+To install it with `nix-env` instead: `nix-env -f. -iA perlPackages.ClassC3`.
6862
6963So what does `buildPerlPackage` do? It does the following:
7064
@@ -135,9 +129,11 @@ This will remove the `-I` flags from the shebang line, rewrite them in the `use
135129Nix expressions for Perl packages can be generated (almost) automatically from CPAN. This is done by the program `nix-generate-from-cpan`, which can be installed as follows:
136130
137131```ShellSession
138−$ nix-env -i nix-generate-from-cpan
132+$ nix-env -f "<nixpkgs>" -iA nix-generate-from-cpan
139133```
140134
135+Substitute `<nixpkgs>` by the path of a nixpkgs clone to use the latest version.
136+
141137This program takes a Perl module name, looks it up on CPAN, fetches and unpacks the corresponding package, and prints a Nix expression on standard output. For example:
142138
143139```ShellSession
doc/languages-frameworks/python.section.md+56−8
@@ -764,8 +764,8 @@ and in this case the `python38` interpreter is automatically used.
764764
765765### Interpreters {#interpreters}
766766
767−Versions 2.7, 3.6, 3.7, 3.8 and 3.9 of the CPython interpreter are available as
768−respectively `python27`, `python36`, `python37`, `python38` and `python39`. The
767+Versions 2.7, 3.7, 3.8 and 3.9 of the CPython interpreter are available as
768+respectively `python27`, `python37`, `python38` and `python39`. The
769769aliases `python2` and `python3` correspond to respectively `python27` and
770770`python39`. The attribute `python` maps to `python2`. The PyPy interpreters
771771compatible with Python 2.7 and 3 are available as `pypy27` and `pypy3`, with
@@ -830,10 +830,11 @@ attribute set is created for each available Python interpreter. The available
830830sets are
831831
832832* `pkgs.python27Packages`
833−* `pkgs.python36Packages`
834833* `pkgs.python37Packages`
835834* `pkgs.python38Packages`
836835* `pkgs.python39Packages`
836+* `pkgs.python310Packages`
837+* `pkgs.python311Packages`
837838* `pkgs.pypyPackages`
838839
839840and the aliases
@@ -978,6 +979,31 @@ with import <nixpkgs> {};
978979in python.withPackages(ps: [ps.blaze])).env
979980```
980981
982+#### Optional extra dependencies
983+
984+Some packages define optional dependencies for additional features. With
985+`setuptools` this is called `extras_require` and `flit` calls it `extras-require`. A
986+method for supporting this is by declaring the extras of a package in its
987+`passthru`, e.g. in case of the package `dask`
988+
989+```nix
990+passthru.extras-require = {
991+ complete = [ distributed ];
992+};
993+```
994+
995+and letting the package requiring the extra add the list to its dependencies
996+
997+```nix
998+propagatedBuildInputs = [
999+ ...
1000+] ++ dask.extras-require.complete;
1001+```
1002+
1003+Note this method is preferred over adding parameters to builders, as that can
1004+result in packages depending on different variants and thereby causing
1005+collisions.
1006+
9811007#### `buildPythonApplication` function {#buildpythonapplication-function}
9821008
9831009The `buildPythonApplication` function is practically the same as
@@ -995,18 +1021,18 @@ called with `callPackage` and passed `python` or `pythonPackages` (possibly
9951021specifying an interpreter version), like this:
9961022
9971023```nix
998−{ lib, python3Packages }:
1024+{ lib, python3 }:
9991025
1000−python3Packages.buildPythonApplication rec {
1026+python3.pkgs.buildPythonApplication rec {
10011027 pname = "luigi";
10021028 version = "2.7.9";
10031029
1004− src = python3Packages.fetchPypi {
1030+ src = python3.pkgs.fetchPypi {
10051031 inherit pname version;
10061032 sha256 = "035w8gqql36zlan0xjrzz9j4lh9hs0qrsgnbyw07qs7lnkvbdv9x";
10071033 };
10081034
1009− propagatedBuildInputs = with python3Packages; [ tornado_4 python-daemon ];
1035+ propagatedBuildInputs = with python3.pkgs; [ tornado python-daemon ];
10101036
10111037 meta = with lib; {
10121038 ...
@@ -1513,7 +1539,7 @@ If you need to change a package's attribute(s) from `configuration.nix` you coul
15131539 python = super.python.override {
15141540 packageOverrides = python-self: python-super: {
15151541 twisted = python-super.twisted.overrideAttrs (oldAttrs: {
1516− src = super.fetchPipy {
1542+ src = super.fetchPypi {
15171543 pname = "twisted";
15181544 version = "19.10.0";
15191545 sha256 = "7394ba7f272ae722a74f3d969dcf599bc4ef093bc392038748a490f1724a515d";
@@ -1632,3 +1658,25 @@ would be:
16321658```ShellSession
16331659$ maintainers/scripts/update-python-libraries --target minor --commit --use-pkgs-prefix pkgs/development/python-modules/**/default.nix
16341660```
1661+
1662+## CPython Update Schedule
1663+
1664+With [PEP 602](https://www.python.org/dev/peps/pep-0602/), CPython now
1665+follows a yearly release cadence. In nixpkgs, all supported interpreters
1666+are made available, but only the most recent two
1667+interpreters package sets are built; this is a compromise between being
1668+the latest interpreter, and what the majority of the Python packages support.
1669+
1670+New CPython interpreters are released in October. Generally, it takes some
1671+time for the majority of active Python projects to support the latest stable
1672+interpreter. To help ease the migration for Nixpkgs users
1673+between Python interpreters the schedule below will be used:
1674+
1675+| When | Event |
1676+| --- | --- |
1677+| After YY.11 Release | Bump CPython package set window. The latest and previous latest stable should now be built. |
1678+| After YY.05 Release | Bump default CPython interpreter to latest stable. |
1679+
1680+In practice, this means that the Python community will have had a stable interpreter
1681+for ~2 months before attempting to update the package set. And this will
1682+allow for ~7 months for Python applications to support the latest interpreter.
doc/languages-frameworks/r.section.md+12−8
@@ -96,6 +96,11 @@ re-enter the shell.
9696
9797## Updating the package set {#updating-the-package-set}
9898
99+There is a script and associated environment for regenerating the package
100+sets and synchronising the rPackages tree to the current CRAN and matching
101+BIOC release. These scripts are found in the `pkgs/development/r-modules`
102+directory and executed as follows:
103+
99104```bash
100105nix-shell generate-shell.nix
101106
@@ -112,12 +117,11 @@ Rscript generate-r-packages.R bioc-experiment > bioc-experiment-packages.nix.new
112117mv bioc-experiment-packages.nix.new bioc-experiment-packages.nix
113118```
114119
115−`generate-r-packages.R <repo>` reads `<repo>-packages.nix`, therefor the renaming.
116−
117−## Testing if the Nix-expression could be evaluated {#testing-if-the-nix-expression-could-be-evaluated}
118−
119−```bash
120−nix-build test-evaluation.nix --dry-run
121−```
120+`generate-r-packages.R <repo>` reads `<repo>-packages.nix`, therefore
121+the renaming.
122122
123−If this exits fine, the expression is ok. If not, you have to edit `default.nix`
123+Some packages require overrides to specify external dependencies or other
124+patches and special requirements. These overrides are specified in the
125+`pkgs/development/r-modules/default.nix` file. As the `*-packages.nix`
126+contents are automatically generated it should not be edited and broken
127+builds should be addressed using overrides.
doc/languages-frameworks/ruby.section.md+14−1
@@ -8,7 +8,7 @@ In the Nixpkgs tree, Ruby packages can be found throughout, depending on what th
88
99There are two main approaches for using Ruby with gems. One is to use a specifically locked `Gemfile` for an application that has very strict dependencies. The other is to depend on the common gems, which we'll explain further down, and rely on them being updated regularly.
1010
11−The interpreters have common attributes, namely `gems`, and `withPackages`. So you can refer to `ruby.gems.nokogiri`, or `ruby_2_6.gems.nokogiri` to get the Nokogiri gem already compiled and ready to use.
11+The interpreters have common attributes, namely `gems`, and `withPackages`. So you can refer to `ruby.gems.nokogiri`, or `ruby_2_7.gems.nokogiri` to get the Nokogiri gem already compiled and ready to use.
1212
1313Since not all gems have executables like `nokogiri`, it's usually more convenient to use the `withPackages` function like this: `ruby.withPackages (p: with p; [ nokogiri ])`. This will also make sure that the Ruby in your environment will be able to find the gem and it can be used in your Ruby code (for example via `ruby` or `irb` executables) via `require "nokogiri"` as usual.
1414
@@ -201,6 +201,19 @@ $ nix-shell --run 'ruby -rpg -e "puts PG.library_version"'
201201
202202Of course for this use-case one could also use overlays since the configuration for `pg` depends on the `postgresql` alias, but for demonstration purposes this has to suffice.
203203
204+### Platform-specific gems
205+
206+Right now, bundix has some issues with pre-built, platform-specific gems: [bundix PR #68](https://github.com/nix-community/bundix/pull/68).
207+Until this is solved, you can tell bundler to not use platform-specific gems and instead build them from source each time:
208+- globally (will be set in `~/.config/.bundle/config`):
209+```shell
210+$ bundle config set force_ruby_platform true
211+```
212+- locally (will be set in `<project-root>/.bundle/config`):
213+```shell
214+$ bundle config set --local force_ruby_platform true
215+```
216+
204217### Adding a gem to the default gemset {#adding-a-gem-to-the-default-gemset}
205218
206219Now that you know how to get a working Ruby environment with Nix, it's time to go forward and start actually developing with Ruby. We will first have a look at how Ruby gems are packaged on Nix. Then, we will look at how you can use development mode with your code.
doc/languages-frameworks/rust.section.md+155−87
@@ -13,14 +13,14 @@ into your `configuration.nix` or bring them into scope with `nix-shell -p rustc
1313
1414For other versions such as daily builds (beta and nightly),
1515use either `rustup` from nixpkgs (which will manage the rust installation in your home directory),
16−or use Mozilla's [Rust nightlies overlay](#using-the-rust-nightlies-overlay).
16+or use a community maintained [Rust overlay](#using-community-rust-overlays).
1717
1818## Compiling Rust applications with Cargo {#compiling-rust-applications-with-cargo}
1919
2020Rust applications are packaged by using the `buildRustPackage` helper from `rustPlatform`:
2121
2222```nix
23−{ lib, rustPlatform }:
23+{ lib, fetchFromGitHub, rustPlatform }:
2424
2525rustPlatform.buildRustPackage rec {
2626 pname = "ripgrep";
@@ -116,22 +116,44 @@ is updated after every change to `Cargo.lock`. Therefore,
116116a `Cargo.lock` file using the `cargoLock` argument. For example:
117117
118118```nix
119−rustPlatform.buildRustPackage rec {
119+rustPlatform.buildRustPackage {
120120 pname = "myproject";
121121 version = "1.0.0";
122122
123123 cargoLock = {
124124 lockFile = ./Cargo.lock;
125− }
125+ };
126126
127127 # ...
128128}
129129```
130130
131131This will retrieve the dependencies using fixed-output derivations from
132−the specified lockfile. Note that setting `cargoLock.lockFile` doesn't
133−add a `Cargo.lock` to your `src`, and a `Cargo.lock` is still required
134−to build a rust package. A simple fix is to use:
132+the specified lockfile.
133+
134+One caveat is that `Cargo.lock` cannot be patched in the `patchPhase`
135+because it runs after the dependencies have already been fetched. If
136+you need to patch or generate the lockfile you can alternatively set
137+`cargoLock.lockFileContents` to a string of its contents:
138+
139+```nix
140+rustPlatform.buildRustPackage {
141+ pname = "myproject";
142+ version = "1.0.0";
143+
144+ cargoLock = let
145+ fixupLockFile = path: f (builtins.readFile path);
146+ in {
147+ lockFileContents = fixupLockFile ./Cargo.lock;
148+ };
149+
150+ # ...
151+}
152+```
153+
154+Note that setting `cargoLock.lockFile` or `cargoLock.lockFileContents`
155+doesn't add a `Cargo.lock` to your `src`, and a `Cargo.lock` is still
156+required to build a rust package. A simple fix is to use:
135157
136158```nix
137159postPatch = ''
@@ -164,6 +186,33 @@ added. To find the correct hash, you can first use `lib.fakeSha256` or
164186`lib.fakeHash` as a stub hash. Building the package (and thus the
165187vendored dependencies) will then inform you of the correct hash.
166188
189+### Cargo features {#cargo-features}
190+
191+You can disable default features using `buildNoDefaultFeatures`, and
192+extra features can be added with `buildFeatures`.
193+
194+If you want to use different features for check phase, you can use
195+`checkNoDefaultFeatures` and `checkFeatures`. They are only passed to
196+`cargo test` and not `cargo build`. If left unset, they default to
197+`buildNoDefaultFeatures` and `buildFeatures`.
198+
199+For example:
200+
201+```nix
202+rustPlatform.buildRustPackage rec {
203+ pname = "myproject";
204+ version = "1.0.0";
205+
206+ buildNoDefaultFeatures = true;
207+ buildFeatures = [ "color" "net" ];
208+
209+ # disable network features in tests
210+ checkFeatures = [ "color" ];
211+
212+ # ...
213+}
214+```
215+
167216### Cross compilation {#cross-compilation}
168217
169218By default, Rust packages are compiled for the host platform, just like any
@@ -215,22 +264,6 @@ where they are known to differ. But there are ways to customize the argument:
215264 --target /nix/store/asdfasdfsadf-thumb-crazy.json # contains {"foo":"","bar":""}
216265 ```
217266
218−Finally, as an ad-hoc escape hatch, a computed target (string or JSON file
219−path) can be passed directly to `buildRustPackage`:
220−
221−```nix
222−pkgs.rustPlatform.buildRustPackage {
223− /* ... */
224− target = "x86_64-fortanix-unknown-sgx";
225−}
226−```
227−
228−This is useful to avoid rebuilding Rust tools, since they are actually target
229−agnostic and don't need to be rebuilt. But in the future, we should always
230−build the Rust tools and standard library crates separately so there is no
231−reason not to take the `stdenv.hostPlatform.rustc`-modifying approach, and the
232−ad-hoc escape hatch to `buildRustPackage` can be removed.
233−
234267Note that currently custom targets aren't compiled with `std`, so `cargo test`
235268will fail. This can be ignored by adding `doCheck = false;` to your derivation.
236269
@@ -255,12 +288,12 @@ rustPlatform.buildRustPackage {
255288Please note that the code will be compiled twice here: once in `release` mode
256289for the `buildPhase`, and again in `debug` mode for the `checkPhase`.
257290
258−Test flags, e.g., `--features xxx/yyy`, can be passed to `cargo test` via the
291+Test flags, e.g., `--package foo`, can be passed to `cargo test` via the
259292`cargoTestFlags` attribute.
260293
261294Another attribute, called `checkFlags`, is used to pass arguments to the test
262295binary itself, as stated
263−(here)[https://doc.rust-lang.org/cargo/commands/cargo-test.html].
296+[here](https://doc.rust-lang.org/cargo/commands/cargo-test.html).
264297
265298#### Tests relying on the structure of the `target/` directory {#tests-relying-on-the-structure-of-the-target-directory}
266299
@@ -405,7 +438,7 @@ you of the correct hash.
405438
406439`rustPlatform` provides the following hooks to automate Cargo builds:
407440
408−* `cargoSetupHook`: configure Cargo to use depenencies vendored
441+* `cargoSetupHook`: configure Cargo to use dependencies vendored
409442 through `fetchCargoTarball`. This hook uses the `cargoDeps`
410443 environment variable to find the vendored dependencies. If a project
411444 already vendors its dependencies, the variable `cargoVendorDir` can
@@ -415,20 +448,24 @@ you of the correct hash.
415448* `cargoBuildHook`: use Cargo to build a crate. If the crate to be
416449 built is a crate in e.g. a Cargo workspace, the relative path to the
417450 crate to build can be set through the optional `buildAndTestSubdir`
418− environment variable. Additional Cargo build flags can be passed
419− through `cargoBuildFlags`.
451+ environment variable. Features can be specified with
452+ `cargoBuildNoDefaultFeatures` and `cargoBuildFeatures`. Additional
453+ Cargo build flags can be passed through `cargoBuildFlags`.
420454* `maturinBuildHook`: use [Maturin](https://github.com/PyO3/maturin)
421455 to build a Python wheel. Similar to `cargoBuildHook`, the optional
422456 variable `buildAndTestSubdir` can be used to build a crate in a
423− Cargo workspace. Additional maturin flags can be passed through
457+ Cargo workspace. Additional Maturin flags can be passed through
424458 `maturinBuildFlags`.
425459* `cargoCheckHook`: run tests using Cargo. The build type for checks
426− can be set using `cargoCheckType`. Additional flags can be passed to
427− the tests using `checkFlags` and `checkFlagsArray`. By default,
428− tests are run in parallel. This can be disabled by setting
429− `dontUseCargoParallelTests`.
460+ can be set using `cargoCheckType`. Features can be specified with
461+ `cargoCheckNoDefaultFeaatures` and `cargoCheckFeatures`. Additional
462+ flags can be passed to the tests using `checkFlags` and
463+ `checkFlagsArray`. By default, tests are run in parallel. This can
464+ be disabled by setting `dontUseCargoParallelTests`.
430465* `cargoInstallHook`: install binaries and static/shared libraries
431466 that were built using `cargoBuildHook`.
467+* `bindgenHook`: for crates which use `bindgen` as a build dependency, lets
468+ `bindgen` find `libclang` and `libclang` find the libraries in `buildInputs`.
432469
433470### Examples {#examples}
434471
@@ -441,7 +478,7 @@ dependencies. The build itself is then performed by
441478
442479The following example outlines how the `tokenizers` Python package is
443480built. Since the Python package is in the `source/bindings/python`
444−directory of the *tokenizers* project's source archive, we use
481+directory of the `tokenizers` project's source archive, we use
445482`sourceRoot` to point the tooling to this directory:
446483
447484```nix
@@ -666,7 +703,7 @@ Some crates require external libraries. For crates from
666703`defaultCrateOverrides` package in nixpkgs itself.
667704
668705Starting from that file, one can add more overrides, to add features
669−or build inputs by overriding the hello crate in a seperate file.
706+or build inputs by overriding the hello crate in a separate file.
670707
671708```nix
672709with import <nixpkgs> {};
@@ -723,7 +760,7 @@ with import <nixpkgs> {};
723760Actually, the overrides introduced in the previous section are more
724761general. A number of other parameters can be overridden:
725762
726−- The version of rustc used to compile the crate:
763+- The version of `rustc` used to compile the crate:
727764
728765 ```nix
729766 (hello {}).override { rust = pkgs.rust; };
@@ -736,7 +773,7 @@ general. A number of other parameters can be overridden:
736773 (hello {}).override { release = false; };
737774 ```
738775
739−- Whether to print the commands sent to rustc when building
776+- Whether to print the commands sent to `rustc` when building
740777 (equivalent to `--verbose` in cargo:
741778
742779 ```nix
@@ -865,76 +902,107 @@ rustc 1.26.0-nightly (188e693b3 2018-03-26)
865902
866903To see that you are using nightly.
867904
868−## Using the Rust nightlies overlay {#using-the-rust-nightlies-overlay}
869−
870−Mozilla provides an overlay for nixpkgs to bring a nightly version of Rust into scope.
871−This overlay can _also_ be used to install recent unstable or stable versions
872−of Rust, if desired.
873−
874−### Rust overlay installation {#rust-overlay-installation}
875−
876−You can use this overlay by either changing your local nixpkgs configuration,
877−or by adding the overlay declaratively in a nix expression, e.g. in `configuration.nix`.
878−For more information see [the manual on installing overlays](#sec-overlays-install).
905+## Using community Rust overlays {#using-community-rust-overlays}
879906
880−#### Imperative rust overlay installation {#imperative-rust-overlay-installation}
907+There are two community maintained approaches to Rust toolchain management:
908+- [oxalica's Rust overlay](https://github.com/oxalica/rust-overlay)
909+- [fenix](https://github.com/nix-community/fenix)
881910
882−Clone [nixpkgs-mozilla](https://github.com/mozilla/nixpkgs-mozilla),
883−and create a symbolic link to the file
884−[rust-overlay.nix](https://github.com/mozilla/nixpkgs-mozilla/blob/master/rust-overlay.nix)
885−in the `~/.config/nixpkgs/overlays` directory.
911+Oxalica's overlay allows you to select a particular Rust version and components.
912+See [their documentation](https://github.com/oxalica/rust-overlay#rust-overlay) for more
913+detailed usage.
886914
887−```ShellSession
888−$ git clone https://github.com/mozilla/nixpkgs-mozilla.git
889−$ mkdir -p ~/.config/nixpkgs/overlays
890−$ ln -s $(pwd)/nixpkgs-mozilla/rust-overlay.nix ~/.config/nixpkgs/overlays/rust-overlay.nix
891−```
915+Fenix is an alternative to `rustup` and can also be used as an overlay.
892916
893−### Declarative rust overlay installation {#declarative-rust-overlay-installation}
917+Both oxalica's overlay and fenix better integrate with nix and cache optimizations.
918+Because of this and ergonomics, either of those community projects
919+should be preferred to the Mozilla's Rust overlay (`nixpkgs-mozilla`).
894920
895−Add the following to your `configuration.nix`, `home-configuration.nix`, `shell.nix`, or similar:
921+### How to select a specific `rustc` and toolchain version {#how-to-select-a-specific-rustc-and-toolchain-version}
896922
923+You can consume the oxalica overlay and use it to grab a specific Rust toolchain version.
924+Here is an example `shell.nix` showing how to grab the current stable toolchain:
897925```nix
898926{ pkgs ? import <nixpkgs> {
899927 overlays = [
900− (import (builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz))
901− # Further overlays go here
928+ (import (fetchTarball "https://github.com/oxalica/rust-overlay/archive/master.tar.gz"))
902929 ];
903− };
904−};
930+ }
931+}:
932+pkgs.mkShell {
933+ nativeBuildInputs = with pkgs; [
934+ pkg-config
935+ rust-bin.stable.latest.minimal
936+ ];
937+}
905938```
906939
907−Note that this will fetch the latest overlay version when rebuilding your system.
940+You can try this out by:
941+1. Saving that to `shell.nix`
942+2. Executing `nix-shell --pure --command 'rustc --version'`
908943
909−### Rust overlay usage {#rust-overlay-usage}
944+As of writing, this prints out `rustc 1.56.0 (09c42c458 2021-10-18)`.
910945
911−The overlay contains attribute sets corresponding to different versions of the rust toolchain, such as:
946+### How to use an overlay toolchain in a derivation {#how-to-use-an-overlay-toolchain-in-a-derivation}
912947
913−* `latest.rustChannels.stable`
914−* `latest.rustChannels.nightly`
915−* a function `rustChannelOf`, called as `(rustChannelOf { date = "2018-04-11"; channel = "nightly"; })`, or...
916−* `(nixpkgs.rustChannelOf { rustToolchain = ./rust-toolchain; })` if you have a local `rust-toolchain` file (see https://github.com/mozilla/nixpkgs-mozilla#using-in-nix-expressions for an example)
948+You can also use an overlay's Rust toolchain with `buildRustPackage`.
949+The below snippet demonstrates invoking `buildRustPackage` with an oxalica overlay selected Rust toolchain:
950+```nix
951+with import <nixpkgs> {
952+ overlays = [
953+ (import (fetchTarball "https://github.com/oxalica/rust-overlay/archive/master.tar.gz"))
954+ ];
955+};
917956
918−Each of these contain packages such as `rust`, which contains your usual rust development tools with the respective toolchain chosen.
919−For example, you might want to add `latest.rustChannels.stable.rust` to the list of packages in your configuration.
957+rustPlatform.buildRustPackage rec {
958+ pname = "ripgrep";
959+ version = "12.1.1";
960+ nativeBuildInputs = [
961+ rust-bin.stable.latest.minimal
962+ ];
963+
964+ src = fetchFromGitHub {
965+ owner = "BurntSushi";
966+ repo = "ripgrep";
967+ rev = version;
968+ sha256 = "1hqps7l5qrjh9f914r5i6kmcz6f1yb951nv4lby0cjnp5l253kps";
969+ };
920970
921−Imperatively, the latest stable version can be installed with the following command:
971+ cargoSha256 = "03wf9r2csi6jpa7v5sw5lpxkrk4wfzwmzx7k3991q3bdjzcwnnwp";
922972
923−```ShellSession
924−$ nix-env -Ai nixpkgs.latest.rustChannels.stable.rust
973+ meta = with lib; {
974+ description = "A fast line-oriented regex search tool, similar to ag and ack";
975+ homepage = "https://github.com/BurntSushi/ripgrep";
976+ license = licenses.unlicense;
977+ maintainers = [ maintainers.tailhook ];
978+ };
979+}
925980```
926981
927−Or using the attribute with nix-shell:
982+Follow the below steps to try that snippet.
983+1. create a new directory
984+1. save the above snippet as `default.nix` in that directory
985+1. cd into that directory and run `nix-build`
928986
929−```ShellSession
930−$ nix-shell -p nixpkgs.latest.rustChannels.stable.rust
931−```
987+### Rust overlay installation {#rust-overlay-installation}
988+
989+You can use this overlay by either changing your local nixpkgs configuration,
990+or by adding the overlay declaratively in a nix expression, e.g. in `configuration.nix`.
991+For more information see [the manual on installing overlays](#sec-overlays-install).
932992
933−Substitute the `nixpkgs` prefix with `nixos` on NixOS.
934−To install the beta or nightly channel, "stable" should be substituted by
935−"nightly" or "beta", or
936−use the function provided by this overlay to pull a version based on a
937−build date.
993+### Declarative Rust overlay installation {#declarative-rust-overlay-installation}
938994
939−The overlay automatically updates itself as it uses the same source as
940−[rustup](https://www.rustup.rs/).
995+This snippet shows how to use oxalica's Rust overlay.
996+Add the following to your `configuration.nix`, `home-configuration.nix`, `shell.nix`, or similar:
997+
998+```nix
999+{ pkgs ? import <nixpkgs> {
1000+ overlays = [
1001+ (import (builtins.fetchTarball "https://github.com/oxalica/rust-overlay/archive/master.tar.gz"))
1002+ # Further overlays go here
1003+ ];
1004+ };
1005+};
1006+```
1007+
1008+Note that this will fetch the latest overlay version when rebuilding your system.
doc/languages-frameworks/texlive.section.md+1−1
@@ -6,7 +6,7 @@ Since release 15.09 there is a new TeX Live packaging that lives entirely under
66
77- For basic usage just pull `texlive.combined.scheme-basic` for an environment with basic LaTeX support.
88
9−- It typically won't work to use separately installed packages together. Instead, you can build a custom set of packages like this:
9+- It typically won't work to use separately installed packages together. Instead, you can build a custom set of packages like this. Most CTAN packages should be available:
1010
1111 ```nix
1212 texlive.combine {
doc/languages-frameworks/vim.section.md+9−6
@@ -18,7 +18,7 @@ Adding custom .vimrc lines can be done using the following code:
1818
1919```nix
2020vim_configurable.customize {
21− # `name` specifies the name of the executable and package
21+ # `name` optionally specifies the name of the executable and package
2222 name = "vim-with-plugins";
2323
2424 vimrcConfig.customRC = ''
@@ -28,6 +28,9 @@ vim_configurable.customize {
2828```
2929
3030This configuration is used when Vim is invoked with the command specified as name, in this case `vim-with-plugins`.
31+You can also omit `name` to customize Vim itself. See the
32+[definition of `vimUtils.makeCustomizable`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/vim-utils.nix#L408)
33+for all supported options.
3134
3235For Neovim the `configure` argument can be overridden to achieve the same:
3336
@@ -286,7 +289,7 @@ Sample output1:
286289"reload" = buildVimPluginFrom2Nix { # created by nix#NixDerivation
287290 name = "reload";
288291 src = fetchgit {
289− url = "git://github.com/xolox/vim-reload";
292+ url = "https://github.com/xolox/vim-reload";
290293 rev = "0a601a668727f5b675cb1ddc19f6861f3f7ab9e1";
291294 sha256 = "0vb832l9yxj919f5hfg6qj6bn9ni57gnjd3bj7zpq7d4iv2s4wdh";
292295 };
@@ -309,9 +312,9 @@ Sample output2:
309312
310313## Adding new plugins to nixpkgs {#adding-new-plugins-to-nixpkgs}
311314
312−Nix expressions for Vim plugins are stored in [pkgs/misc/vim-plugins](/pkgs/misc/vim-plugins). For the vast majority of plugins, Nix expressions are automatically generated by running [`./update.py`](/pkgs/misc/vim-plugins/update.py). This creates a [generated.nix](/pkgs/misc/vim-plugins/generated.nix) file based on the plugins listed in [vim-plugin-names](/pkgs/misc/vim-plugins/vim-plugin-names). Plugins are listed in alphabetical order in `vim-plugin-names` using the format `[github username]/[repository]@[gitref]`. For example https://github.com/scrooloose/nerdtree becomes `scrooloose/nerdtree`.
315+Nix expressions for Vim plugins are stored in [pkgs/applications/editors/vim/plugins](https://github.com/NixOS/nixpkgs/tree/master/pkgs/applications/editors/vim/plugins). For the vast majority of plugins, Nix expressions are automatically generated by running [`./update.py`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/update.py). This creates a [generated.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/generated.nix) file based on the plugins listed in [vim-plugin-names](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/vim-plugin-names). Plugins are listed in alphabetical order in `vim-plugin-names` using the format `[github username]/[repository]@[gitref]`. For example https://github.com/scrooloose/nerdtree becomes `scrooloose/nerdtree`.
313316
314−Some plugins require overrides in order to function properly. Overrides are placed in [overrides.nix](/pkgs/misc/vim-plugins/overrides.nix). Overrides are most often required when a plugin requires some dependencies, or extra steps are required during the build process. For example `deoplete-fish` requires both `deoplete-nvim` and `vim-fish`, and so the following override was added:
317+Some plugins require overrides in order to function properly. Overrides are placed in [overrides.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/overrides.nix). Overrides are most often required when a plugin requires some dependencies, or extra steps are required during the build process. For example `deoplete-fish` requires both `deoplete-nvim` and `vim-fish`, and so the following override was added:
315318
316319```nix
317320deoplete-fish = super.deoplete-fish.overrideAttrs(old: {
@@ -330,13 +333,13 @@ Finally, there are some plugins that are also packaged in nodePackages because t
330333Run the update script with a GitHub API token that has at least `public_repo` access. Running the script without the token is likely to result in rate-limiting (429 errors). For steps on creating an API token, please refer to [GitHub's token documentation](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token).
331334
332335```sh
333−GITHUB_API_TOKEN=my_token ./pkgs/misc/vim-plugins/update.py
336+GITHUB_API_TOKEN=my_token ./pkgs/applications/editors/vim/plugins/update.py
334337```
335338
336339Alternatively, set the number of processes to a lower count to avoid rate-limiting.
337340
338341```sh
339−./pkgs/misc/vim-plugins/update.py --proc 1
342+./pkgs/applications/editors/vim/plugins/update.py --proc 1
340343```
341344
342345## Important repositories {#important-repositories}
doc/manual.xml+2
@@ -25,8 +25,10 @@
2525 <title>Builders</title>
2626 <xi:include href="builders/fetchers.chapter.xml" />
2727 <xi:include href="builders/trivial-builders.chapter.xml" />
28+ <xi:include href="builders/testers.chapter.xml" />
2829 <xi:include href="builders/special.xml" />
2930 <xi:include href="builders/images.xml" />
31+ <xi:include href="hooks/index.xml" />
3032 <xi:include href="languages-frameworks/index.xml" />
3133 <xi:include href="builders/packages/index.xml" />
3234 </part>
doc/stdenv/cross-compilation.chapter.md+37−12
@@ -78,21 +78,46 @@ If both the dependency and depending packages aren't compilers or other machine-
7878
7979Finally, if the depending package is a compiler or other machine-code-producing tool, it might need dependencies that run at "emit time". This is for compilers that (regrettably) insist on being built together with their source languages' standard libraries. Assuming build != host != target, a run-time dependency of the standard library cannot be run at the compiler's build time or run time, but only at the run time of code emitted by the compiler.
8080
81−Putting this all together, that means we have dependencies in the form "host → target", in at most the following six combinations:
81+Putting this all together, that means that we have dependency types of the form "X→ E", which means that the dependency executes on X and emits code for E; each of X and E can be `build`, `host`, or `target`, and E can be `*` to indicate that the dependency is not a compiler-like package.
82+
83+Dependency types describe the relationships that a package has with each of its transitive dependencies. You could think of attaching one or more dependency types to each of the formal parameters at the top of a package's `.nix` file, as well as to all of *their* formal parameters, and so on. Triples like `(foo, bar, baz)`, on the other hand, are a property of an instantiated derivation -- you could would attach a triple `(mips-linux, mips-linux, sparc-solaris)` to a `.drv` file in `/nix/store`.
84+
85+Only nine dependency types matter in practice:
8286
8387#### Possible dependency types {#possible-dependency-types}
8488
85−| Dependency’s host platform | Dependency’s target platform |
86−|----------------------------|------------------------------|
87−| build | build |
88−| build | host |
89−| build | target |
90−| host | host |
91−| host | target |
92−| target | target |
89+| Dependency type | Dependency’s host platform | Dependency’s target platform |
90+|-----------------|----------------------------|------------------------------|
91+| build → * | build | (none) |
92+| build → build | build | build |
93+| build → host | build | host |
94+| build → target | build | target |
95+| host → * | host | (none) |
96+| host → host | host | host |
97+| host → target | host | target |
98+| target → * | target | (none) |
99+| target → target | target | target |
100+
101+Let's use `g++` as an example to make this table clearer. `g++` is a C++ compiler written in C. Suppose we are building `g++` with a `(build, host, target)` platform triple of `(foo, bar, baz)`. This means we are using a `foo`-machine to build a copy of `g++` which will run on a `bar`-machine and emit binaries for the `baz`-machine.
102+
103+* `g++` links against the host platform's `glibc` C library, which is a "host→ *" dependency with a triple of `(bar, bar, *)`. Since it is a library, not a compiler, it has no "target".
104+
105+* Since `g++` is written in C, the `gcc` compiler used to compile it is a "build→ host" dependency of `g++` with a triple of `(foo, foo, bar)`. This compiler runs on the build platform and emits code for the host platform.
106+
107+* `gcc` links against the build platform's `glibc` C library, which is a "build→ *" dependency with a triple of `(foo, foo, *)`. Since it is a library, not a compiler, it has no "target".
108+
109+* This `gcc` is itself compiled by an *earlier* copy of `gcc`. This earlier copy of `gcc` is a "build→ build" dependency of `g++` with a triple of `(foo, foo, foo)`. This "early `gcc`" runs on the build platform and emits code for the build platform.
110+
111+* `g++` is bundled with `libgcc`, which includes a collection of target-machine routines for exception handling and
112+software floating point emulation. `libgcc` would be a "target→ *" dependency with triple `(foo, baz, *)`, because it consists of machine code which gets linked against the output of the compiler that we are building. It is a library, not a compiler, so it has no target of its own.
113+
114+* `libgcc` is written in C and compiled with `gcc`. The `gcc` that compiles it will be a "build→ target" dependency with triple `(foo, foo, baz)`. It gets compiled *and run* at `g++`-build-time (on platform `foo`), but must emit code for the `baz`-platform.
115+
116+* `g++` allows inline assembler code, so it depends on access to a copy of the `gas` assembler. This would be a "host→ target" dependency with triple `(foo, bar, baz)`.
93117
118+* `g++` (and `gcc`) include a library `libgccjit.so`, which wrap the compiler in a library to create a just-in-time compiler. In nixpkgs, this library is in the `libgccjit` package; if C++ required that programs have access to a JIT, `g++` would need to add a "target→ target" dependency for `libgccjit` with triple `(foo, baz, baz)`. This would ensure that the compiler ships with a copy of `libgccjit` which both executes on and generates code for the `baz`-platform.
94119
95−Some examples will make this table clearer. Suppose there's some package that is being built with a `(build, host, target)` platform triple of `(foo, bar, baz)`. If it has a build-time library dependency, that would be a "host → build" dependency with a triple of `(foo, foo, *)` (the target platform is irrelevant). If it needs a compiler to be built, that would be a "build → host" dependency with a triple of `(foo, foo, *)` (the target platform is irrelevant). That compiler, would be built with another compiler, also "build → host" dependency, with a triple of `(foo, foo, foo)`.
120+* If `g++` itself linked against `libgccjit.so` (for example, to allow compile-time-evaluated C++ expressions), then the `libgccjit` package used to provide this functionality would be a "host→ host" dependency of `g++`: it is code which runs on the `host` and emits code for execution on the `host`.
96121
97122### Cross packaging cookbook {#ssec-cross-cookbook}
98123
@@ -158,9 +183,9 @@ One would think that `localSystem` and `crossSystem` overlap horribly with the t
158183
159184### Implementation of dependencies {#ssec-cross-dependency-implementation}
160185
161−The categories of dependencies developed in [](#ssec-cross-dependency-categorization) are specified as lists of derivations given to `mkDerivation`, as documented in [](#ssec-stdenv-dependencies). In short, each list of dependencies for "host → target" of "foo → bar" is called `depsFooBar`, with exceptions for backwards compatibility that `depsBuildHost` is instead called `nativeBuildInputs` and `depsHostTarget` is instead called `buildInputs`. Nixpkgs is now structured so that each `depsFooBar` is automatically taken from `pkgsFooBar`. (These `pkgsFooBar`s are quite new, so there is no special case for `nativeBuildInputs` and `buildInputs`.) For example, `pkgsBuildHost.gcc` should be used at build-time, while `pkgsHostTarget.gcc` should be used at run-time.
186+The categories of dependencies developed in [](#ssec-cross-dependency-categorization) are specified as lists of derivations given to `mkDerivation`, as documented in [](#ssec-stdenv-dependencies). In short, each list of dependencies for "host → target" is called `deps<host><target>` (where `host`, and `target` values are either `build`, `host`, or `target`), with exceptions for backwards compatibility that `depsBuildHost` is instead called `nativeBuildInputs` and `depsHostTarget` is instead called `buildInputs`. Nixpkgs is now structured so that each `deps<host><target>` is automatically taken from `pkgs<host><target>`. (These `pkgs<host><target>`s are quite new, so there is no special case for `nativeBuildInputs` and `buildInputs`.) For example, `pkgsBuildHost.gcc` should be used at build-time, while `pkgsHostTarget.gcc` should be used at run-time.
162187
163−Now, for most of Nixpkgs's history, there were no `pkgsFooBar` attributes, and most packages have not been refactored to use it explicitly. Prior to those, there were just `buildPackages`, `pkgs`, and `targetPackages`. Those are now redefined as aliases to `pkgsBuildHost`, `pkgsHostTarget`, and `pkgsTargetTarget`. It is acceptable, even recommended, to use them for libraries to show that the host platform is irrelevant.
188+Now, for most of Nixpkgs's history, there were no `pkgs<host><target>` attributes, and most packages have not been refactored to use it explicitly. Prior to those, there were just `buildPackages`, `pkgs`, and `targetPackages`. Those are now redefined as aliases to `pkgsBuildHost`, `pkgsHostTarget`, and `pkgsTargetTarget`. It is acceptable, even recommended, to use them for libraries to show that the host platform is irrelevant.
164189
165190But before that, there was just `pkgs`, even though both `buildInputs` and `nativeBuildInputs` existed. \[Cross barely worked, and those were implemented with some hacks on `mkDerivation` to override dependencies.\] What this means is the vast majority of packages do not use any explicit package set to populate their dependencies, just using whatever `callPackage` gives them even if they do correctly sort their dependencies into the multiple lists described above. And indeed, asking that users both sort their dependencies, _and_ take them from the right attribute set, is both too onerous and redundant, so the recommended approach (for now) is to continue just categorizing by list and not using an explicit package set.
166191
doc/stdenv/meta.chapter.md+34−4
@@ -175,6 +175,40 @@ The NixOS tests are available as `nixosTests` in parameters of derivations. For
175175
176176NixOS 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).
177177
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.
183+
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
186+all places.
187+
188+```nix
189+# my-package/default.nix
190+{ stdenv, callPackage }:
191+stdenv.mkDerivation (finalAttrs: {
192+ # ...
193+ passthru.tests.example = callPackage ./example.nix { my-package = finalAttrs.finalPackage; };
194+})
195+```
196+
197+```nix
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" ];
203+} ''
204+ my-package --help
205+ my-package <example.in >example.actual
206+ diff -U3 --color=auto example.expected example.actual
207+ mkdir $out
208+''
209+```
210+
211+
178212### `timeout` {#var-meta-timeout}
179213
180214A 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`.
@@ -192,10 +226,6 @@ meta.hydraPlatforms = [];
192226
193227If set to `true`, the package is marked as "broken", meaning that it won’t show up in `nix-env -qa`, and cannot be built or installed. Such packages should be removed from Nixpkgs eventually unless they are fixed.
194228
195−### `updateWalker` {#var-meta-updateWalker}
196−
197−If set to `true`, the package is tested to be updated correctly by the `update-walker.sh` script without additional settings. Such packages have `meta.version` set and their homepage (or the page specified by `meta.downloadPage`) contains a direct link to the package tarball.
198−
199229## Licenses {#sec-meta-license}
200230
201231The `meta.license` attribute should preferably contain a value from `lib.licenses` defined in [`nixpkgs/lib/licenses.nix`](https://github.com/NixOS/nixpkgs/blob/master/lib/licenses.nix), or in-place license description of the same format if the license is unlikely to be useful in another expression.
doc/stdenv/multiple-output.chapter.md+1−1
@@ -79,7 +79,7 @@ A commonly adopted convention in `nixpkgs` is that executables provided by the p
7979
8080The `glibc` package is a deliberate single exception to the “binaries first” convention. The `glibc` has `libs` as its first output allowing the libraries provided by `glibc` to be referenced directly (e.g. `${stdenv.glibc}/lib/ld-linux-x86-64.so.2`). The executables provided by `glibc` can be accessed via its `bin` attribute (e.g. `${stdenv.glibc.bin}/bin/ldd`).
8181
82−The reason for why `glibc` deviates from the convention is because referencing a library provided by `glibc` is a very common operation among Nix packages. For instance, third-party executables packaged by Nix are typically patched and relinked with the relevant version of `glibc` libraries from Nix packages (please see the documentation on [patchelf](https://github.com/NixOS/patchelf/blob/master/README) for more details).
82+The reason for why `glibc` deviates from the convention is because referencing a library provided by `glibc` is a very common operation among Nix packages. For instance, third-party executables packaged by Nix are typically patched and relinked with the relevant version of `glibc` libraries from Nix packages (please see the documentation on [patchelf](https://github.com/NixOS/patchelf) for more details).
8383
8484### File type groups {#multiple-output-file-type-groups}
8585
doc/stdenv/stdenv.chapter.md+110−21
@@ -116,15 +116,27 @@ On Linux, `stdenv` also includes the `patchelf` utility.
116116
117117## Specifying dependencies {#ssec-stdenv-dependencies}
118118
119−As described in the Nix manual, almost any `*.drv` store path in a derivation’s attribute set will induce a dependency on that derivation. `mkDerivation`, however, takes a few attributes intended to, between them, include all the dependencies of a package. This is done both for structure and consistency, but also so that certain other setup can take place. For example, certain dependencies need their bin directories added to the `PATH`. That is built-in, but other setup is done via a pluggable mechanism that works in conjunction with these dependency attributes. See [](#ssec-setup-hooks) for details.
119+As described in the Nix manual, almost any `*.drv` store path in a derivation’s attribute set will induce a dependency on that derivation. `mkDerivation`, however, takes a few attributes intended to include all the dependencies of a package. This is done both for structure and consistency, but also so that certain other setup can take place. For example, certain dependencies need their bin directories added to the `PATH`. That is built-in, but other setup is done via a pluggable mechanism that works in conjunction with these dependency attributes. See [](#ssec-setup-hooks) for details.
120120
121121Dependencies can be broken down along three axes: their host and target platforms relative to the new derivation’s, and whether they are propagated. The platform distinctions are motivated by cross compilation; see [](#chap-cross) for exactly what each platform means. [^footnote-stdenv-ignored-build-platform] But even if one is not cross compiling, the platforms imply whether or not the dependency is needed at run-time or build-time, a concept that makes perfect sense outside of cross compilation. By default, the run-time/build-time distinction is just a hint for mental clarity, but with `strictDeps` set it is mostly enforced even in the native case.
122122
123123The extension of `PATH` with dependencies, alluded to above, proceeds according to the relative platforms alone. The process is carried out only for dependencies whose host platform matches the new derivation’s build platform i.e. dependencies which run on the platform where the new derivation will be built. [^footnote-stdenv-native-dependencies-in-path] For each dependency \<dep\> of those dependencies, `dep/bin`, if present, is added to the `PATH` environment variable.
124124
125−The dependency is propagated when it forces some of its other-transitive (non-immediate) downstream dependencies to also take it on as an immediate dependency. Nix itself already takes a package’s transitive dependencies into account, but this propagation ensures nixpkgs-specific infrastructure like setup hooks (mentioned above) also are run as if the propagated dependency.
125+A dependency is said to be **propagated** when some of its other-transitive (non-immediate) downstream dependencies also need it as an immediate dependency.
126+[^footnote-stdenv-propagated-dependencies]
126127
127−It is important to note that dependencies are not necessarily propagated as the same sort of dependency that they were before, but rather as the corresponding sort so that the platform rules still line up. The exact rules for dependency propagation can be given by assigning to each dependency two integers based one how its host and target platforms are offset from the depending derivation’s platforms. Those offsets are given below in the descriptions of each dependency list attribute. Algorithmically, we traverse propagated inputs, accumulating every propagated dependency’s propagated dependencies and adjusting them to account for the “shift in perspective” described by the current dependency’s platform offsets. This results in sort a transitive closure of the dependency relation, with the offsets being approximately summed when two dependency links are combined. We also prune transitive dependencies whose combined offsets go out-of-bounds, which can be viewed as a filter over that transitive closure removing dependencies that are blatantly absurd.
128+It is important to note that dependencies are not necessarily propagated as the same sort of dependency that they were before, but rather as the corresponding sort so that the platform rules still line up. To determine the exact rules for dependency propagation, we start by assigning to each dependency a couple of ternary numbers (`-1` for `build`, `0` for `host`, and `1` for `target`) representing its [dependency type](#possible-dependency-types), which captures how its host and target platforms are each "offset" from the depending derivation’s host and target platforms. The following table summarize the different combinations that can be obtained:
129+
130+| `host → target` | attribute name | offset |
131+| ------------------- | ------------------- | -------- |
132+| `build --> build` | `depsBuildBuild` | `-1, -1` |
133+| `build --> host` | `nativeBuildInputs` | `-1, 0` |
134+| `build --> target` | `depsBuildTarget` | `-1, 1` |
135+| `host --> host` | `depsHostHost` | `0, 0` |
136+| `host --> target` | `buildInputs` | `0, 1` |
137+| `target --> target` | `depsTargetTarget` | `1, 1` |
138+
139+Algorithmically, we traverse propagated inputs, accumulating every propagated dependency’s propagated dependencies and adjusting them to account for the “shift in perspective” described by the current dependency’s platform offsets. This results is sort of a transitive closure of the dependency relation, with the offsets being approximately summed when two dependency links are combined. We also prune transitive dependencies whose combined offsets go out-of-bounds, which can be viewed as a filter over that transitive closure removing dependencies that are blatantly absurd.
128140
129141We can define the process precisely with [Natural Deduction](https://en.wikipedia.org/wiki/Natural_deduction) using the inference rules. This probably seems a bit obtuse, but so is the bash code that actually implements it! [^footnote-stdenv-find-inputs-location] They’re confusing in very different ways so… hopefully if something doesn’t make sense in one presentation, it will in the other!
130142
@@ -179,37 +191,37 @@ Overall, the unifying theme here is that propagation shouldn’t be introducing
179191
180192#### `depsBuildBuild` {#var-stdenv-depsBuildBuild}
181193
182−A list of dependencies whose host and target platforms are the new derivation’s build platform. This means a `-1` host and `-1` target offset from the new derivation’s platforms. These are programs and libraries used at build time that produce programs and libraries also used at build time. If the dependency doesn’t care about the target platform (i.e. isn’t a compiler or similar tool), put it in `nativeBuildInputs` instead. The most common use of this `buildPackages.stdenv.cc`, the default C compiler for this role. That example crops up more than one might think in old commonly used C libraries.
194+A list of dependencies whose host and target platforms are the new derivation’s build platform. These are programs and libraries used at build time that produce programs and libraries also used at build time. If the dependency doesn’t care about the target platform (i.e. isn’t a compiler or similar tool), put it in `nativeBuildInputs` instead. The most common use of this `buildPackages.stdenv.cc`, the default C compiler for this role. That example crops up more than one might think in old commonly used C libraries.
183195
184196Since these packages are able to be run at build-time, they are always added to the `PATH`, as described above. But since these packages are only guaranteed to be able to run then, they shouldn’t persist as run-time dependencies. This isn’t currently enforced, but could be in the future.
185197
186198#### `nativeBuildInputs` {#var-stdenv-nativeBuildInputs}
187199
188−A list of dependencies whose host platform is the new derivation’s build platform, and target platform is the new derivation’s host platform. This means a `-1` host offset and `0` target offset from the new derivation’s platforms. These are programs and libraries used at build-time that, if they are a compiler or similar tool, produce code to run at run-time—i.e. tools used to build the new derivation. If the dependency doesn’t care about the target platform (i.e. isn’t a compiler or similar tool), put it here, rather than in `depsBuildBuild` or `depsBuildTarget`. This could be called `depsBuildHost` but `nativeBuildInputs` is used for historical continuity.
200+A list of dependencies whose host platform is the new derivation’s build platform, and target platform is the new derivation’s host platform. These are programs and libraries used at build-time that, if they are a compiler or similar tool, produce code to run at run-time—i.e. tools used to build the new derivation. If the dependency doesn’t care about the target platform (i.e. isn’t a compiler or similar tool), put it here, rather than in `depsBuildBuild` or `depsBuildTarget`. This could be called `depsBuildHost` but `nativeBuildInputs` is used for historical continuity.
189201
190202Since these packages are able to be run at build-time, they are added to the `PATH`, as described above. But since these packages are only guaranteed to be able to run then, they shouldn’t persist as run-time dependencies. This isn’t currently enforced, but could be in the future.
191203
192204#### `depsBuildTarget` {#var-stdenv-depsBuildTarget}
193205
194−A list of dependencies whose host platform is the new derivation’s build platform, and target platform is the new derivation’s target platform. This means a `-1` host offset and `1` target offset from the new derivation’s platforms. These are programs used at build time that produce code to run with code produced by the depending package. Most commonly, these are tools used to build the runtime or standard library that the currently-being-built compiler will inject into any code it compiles. In many cases, the currently-being-built-compiler is itself employed for that task, but when that compiler won’t run (i.e. its build and host platform differ) this is not possible. Other times, the compiler relies on some other tool, like binutils, that is always built separately so that the dependency is unconditional.
206+A list of dependencies whose host platform is the new derivation’s build platform, and target platform is the new derivation’s target platform. These are programs used at build time that produce code to run with code produced by the depending package. Most commonly, these are tools used to build the runtime or standard library that the currently-being-built compiler will inject into any code it compiles. In many cases, the currently-being-built-compiler is itself employed for that task, but when that compiler won’t run (i.e. its build and host platform differ) this is not possible. Other times, the compiler relies on some other tool, like binutils, that is always built separately so that the dependency is unconditional.
195207
196−This is a somewhat confusing concept to wrap one’s head around, and for good reason. As the only dependency type where the platform offsets are not adjacent integers, it requires thinking of a bootstrapping stage *two* away from the current one. It and its use-case go hand in hand and are both considered poor form: try to not need this sort of dependency, and try to avoid building standard libraries and runtimes in the same derivation as the compiler produces code using them. Instead strive to build those like a normal library, using the newly-built compiler just as a normal library would. In short, do not use this attribute unless you are packaging a compiler and are sure it is needed.
208+This is a somewhat confusing concept to wrap one’s head around, and for good reason. As the only dependency type where the platform offsets, `-1` and `1`, are not adjacent integers, it requires thinking of a bootstrapping stage *two* away from the current one. It and its use-case go hand in hand and are both considered poor form: try to not need this sort of dependency, and try to avoid building standard libraries and runtimes in the same derivation as the compiler produces code using them. Instead strive to build those like a normal library, using the newly-built compiler just as a normal library would. In short, do not use this attribute unless you are packaging a compiler and are sure it is needed.
197209
198210Since these packages are able to run at build time, they are added to the `PATH`, as described above. But since these packages are only guaranteed to be able to run then, they shouldn’t persist as run-time dependencies. This isn’t currently enforced, but could be in the future.
199211
200212#### `depsHostHost` {#var-stdenv-depsHostHost}
201213
202−A list of dependencies whose host and target platforms match the new derivation’s host platform. This means a `0` host offset and `0` target offset from the new derivation’s host platform. These are packages used at run-time to generate code also used at run-time. In practice, this would usually be tools used by compilers for macros or a metaprogramming system, or libraries used by the macros or metaprogramming code itself. It’s always preferable to use a `depsBuildBuild` dependency in the derivation being built over a `depsHostHost` on the tool doing the building for this purpose.
214+A list of dependencies whose host and target platforms match the new derivation’s host platform. In practice, this would usually be tools used by compilers for macros or a metaprogramming system, or libraries used by the macros or metaprogramming code itself. It’s always preferable to use a `depsBuildBuild` dependency in the derivation being built over a `depsHostHost` on the tool doing the building for this purpose.
203215
204216#### `buildInputs` {#var-stdenv-buildInputs}
205217
206−A list of dependencies whose host platform and target platform match the new derivation’s. This means a `0` host offset and a `1` target offset from the new derivation’s host platform. This would be called `depsHostTarget` but for historical continuity. If the dependency doesn’t care about the target platform (i.e. isn’t a compiler or similar tool), put it here, rather than in `depsBuildBuild`.
218+A list of dependencies whose host platform and target platform match the new derivation’s. This would be called `depsHostTarget` but for historical continuity. If the dependency doesn’t care about the target platform (i.e. isn’t a compiler or similar tool), put it here, rather than in `depsBuildBuild`.
207219
208220These are often programs and libraries used by the new derivation at *run*-time, but that isn’t always the case. For example, the machine code in a statically-linked library is only used at run-time, but the derivation containing the library is only needed at build-time. Even in the dynamic case, the library may also be needed at build-time to appease the linker.
209221
210222#### `depsTargetTarget` {#var-stdenv-depsTargetTarget}
211223
212−A list of dependencies whose host platform matches the new derivation’s target platform. This means a `1` offset from the new derivation’s platforms. These are packages that run on the target platform, e.g. the standard library or run-time deps of standard library that a compiler insists on knowing about. It’s poor form in almost all cases for a package to depend on another from a future stage \[future stage corresponding to positive offset\]. Do not use this attribute unless you are packaging a compiler and are sure it is needed.
224+A list of dependencies whose host platform matches the new derivation’s target platform. These are packages that run on the target platform, e.g. the standard library or run-time deps of standard library that a compiler insists on knowing about. It’s poor form in almost all cases for a package to depend on another from a future stage \[future stage corresponding to positive offset\]. Do not use this attribute unless you are packaging a compiler and are sure it is needed.
213225
214226#### `depsBuildBuildPropagated` {#var-stdenv-depsBuildBuildPropagated}
215227
@@ -305,12 +317,72 @@ The script will be usually run from the root of the Nixpkgs repository but you s
305317
306318For information about how to run the updates, execute `nix-shell maintainers/scripts/update.nix`.
307319
320+### Recursive attributes in `mkDerivation`
321+
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:
323+
324+```nix
325+mkDerivation (finalAttrs: {
326+ pname = "hello";
327+ withFeature = true;
328+ configureFlags =
329+ lib.optionals finalAttrs.withFeature ["--with-feature"];
330+})
331+```
332+
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.
335+
336+Instead, the definition references `finalAttrs`, allowing users to change `withFeature`
337+consistently with `overrideAttrs`.
338+
339+`finalAttrs` also contains the attribute `finalPackage`, which includes the output paths, etc.
340+
341+Let's look at a more elaborate example to understand the differences between
342+various bindings:
343+
344+```nix
345+# `pkg` is the _original_ definition (for illustration purposes)
346+let pkg =
347+ mkDerivation (finalAttrs: {
348+ # ...
349+
350+ # An example attribute
351+ packages = [];
352+
353+ # `passthru.tests` is a commonly defined attribute.
354+ passthru.tests.simple = f finalAttrs.finalPackage;
355+
356+ # An example of an attribute containing a function
357+ passthru.appendPackages = packages':
358+ finalAttrs.finalPackage.overrideAttrs (newSelf: super: {
359+ packages = super.packages ++ packages';
360+ });
361+
362+ # For illustration purposes; referenced as
363+ # `(pkg.overrideAttrs(x)).finalAttrs` etc in the text below.
364+ passthru.finalAttrs = finalAttrs;
365+ passthru.original = pkg;
366+ });
367+in pkg
368+```
369+
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`.
371+
372+See also the section about [`passthru.tests`](#var-meta-tests).
373+
308374## Phases {#sec-stdenv-phases}
309375
310−The generic builder has a number of *phases*. Package builds are split into phases to make it easier to override specific parts of the build (e.g., unpacking the sources or installing the binaries). Furthermore, it allows a nicer presentation of build logs in the Nix build farm.
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.
377+
378+This generic command invokes a number of *phases*. Package builds are split into phases to make it easier to override specific parts of the build (e.g., unpacking the sources or installing the binaries).
311379
312380Each phase can be overridden in its entirety either by setting the environment variable `namePhase` to a string containing some shell commands to be executed, or by redefining the shell function `namePhase`. The former is convenient to override a phase from the derivation, while the latter is convenient from a build script. However, typically one only wants to *add* some commands to a phase, e.g. by defining `postInstall` or `preFixup`, as skipping some of the default actions may have unexpected consequences. The default script for each phase is defined in the file `pkgs/stdenv/generic/setup.sh`.
313381
382+When overriding a phase, for example `installPhase`, it is important to start with `runHook preInstall` and end it with `runHook postInstall`, otherwise `preInstall` and `postInstall` will not be run. Even if you don't use them directly, it is good practice to do so anyways for downstream users who would want to add a `postInstall` by overriding your derivation.
383+
384+While inside an interactive `nix-shell`, if you wanted to run all phases in the order they would be run in an actual build, you can invoke `genericBuild` yourself.
385+
314386### Controlling phases {#ssec-controlling-phases}
315387
316388There are a number of variables that control what phases are executed and in what order:
@@ -321,7 +393,8 @@ There are a number of variables that control what phases are executed and in wha
321393
322394Specifies the phases. You can change the order in which phases are executed, or add new phases, by setting this variable. If it’s not set, the default value is used, which is `$prePhases unpackPhase patchPhase $preConfigurePhases configurePhase $preBuildPhases buildPhase checkPhase $preInstallPhases installPhase fixupPhase installCheckPhase $preDistPhases distPhase $postPhases`.
323395
324−Usually, if you just want to add a few phases, it’s more convenient to set one of the variables below (such as `preInstallPhases`), as you then don’t specify all the normal phases.
396+It is discouraged to set this variable, as it is easy to miss some important functionality hidden in some of the less obviously needed phases (like `fixupPhase` which patches the shebang of scripts).
397+Usually, if you just want to add a few phases, it’s more convenient to set one of the variables below (such as `preInstallPhases`).
325398
326399##### `prePhases` {#var-stdenv-prePhases}
327400
@@ -373,11 +446,11 @@ Additional file types can be supported by setting the `unpackCmd` variable (see
373446
374447##### `srcs` / `src` {#var-stdenv-src}
375448
376−The list of source files or directories to be unpacked or copied. One of these must be set.
449+The list of source files or directories to be unpacked or copied. One of these must be set. Note that if you use `srcs`, you should also set `sourceRoot` or `setSourceRoot`.
377450
378451##### `sourceRoot` {#var-stdenv-sourceRoot}
379452
380−After running `unpackPhase`, the generic builder changes the current directory to the directory created by unpacking the sources. If there are multiple source directories, you should set `sourceRoot` to the name of the intended directory.
453+After running `unpackPhase`, the generic builder changes the current directory to the directory created by unpacking the sources. If there are multiple source directories, you should set `sourceRoot` to the name of the intended directory. Set `sourceRoot = ".";` if you use `srcs` and control the unpack phase yourself.
381454
382455##### `setSourceRoot` {#var-stdenv-setSourceRoot}
383456
@@ -778,13 +851,13 @@ Hook executed at the start of the distribution phase.
778851
779852Hook executed at the end of the distribution phase.
780853
781−## Shell functions {#ssec-stdenv-functions}
854+## Shell functions and utilities {#ssec-stdenv-functions}
782855
783856The standard environment provides a number of useful functions.
784857
785858### `makeWrapper` \<executable\> \<wrapperfile\> \<args\> {#fun-makeWrapper}
786859
787−Constructs a wrapper for a program with various possible arguments. For example:
860+Constructs a wrapper for a program with various possible arguments. It is defined as part of 2 setup-hooks named `makeWrapper` and `makeBinaryWrapper` that implement the same bash functions. Hence, to use it you have to add `makeWrapper` to your `nativeBuildInputs`. Here's an example usage:
788861
789862```bash
790863# adds `FOOBAR=baz` to `$out/bin/foo`’s environment
@@ -796,9 +869,24 @@ makeWrapper $out/bin/foo $wrapperfile --set FOOBAR baz
796869makeWrapper $out/bin/foo $wrapperfile --prefix PATH : ${lib.makeBinPath [ hello git ]}
797870```
798871
799−There’s many more kinds of arguments, they are documented in `nixpkgs/pkgs/build-support/setup-hooks/make-wrapper.sh`.
872+There’s many more kinds of arguments, they are documented in `nixpkgs/pkgs/build-support/setup-hooks/make-wrapper.sh` for the `makeWrapper` implementation and in `nixpkgs/pkgs/build-support/setup-hooks/make-binary-wrapper.sh` for the `makeBinaryWrapper` implementation.
873+
874+`wrapProgram` is a convenience function you probably want to use most of the time, implemented by both `makeWrapper` and `makeBinaryWrapper`.
875+
876+Using the `makeBinaryWrapper` implementation is usually preferred, as it creates a tiny _compiled_ wrapper executable, that can be used as a shebang interpreter. This is needed mostly on Darwin, where shebangs cannot point to scripts, [due to a limitation with the `execve`-syscall](https://stackoverflow.com/questions/67100831/macos-shebang-with-absolute-path-not-working). Compiled wrappers generated by `makeBinaryWrapper` can be inspected with `less <path-to-wrapper>` - by scrolling past the binary data you should be able to see the shell command that generated the executable and there see the environment variables that were injected into the wrapper.
800877
801−`wrapProgram` is a convenience function you probably want to use most of the time.
878+### `remove-references-to -t` \<storepath\> [ `-t` \<storepath\> ... ] \<file\> ... {#fun-remove-references-to}
879+
880+Removes the references of the specified files to the specified store files. This is done without changing the size of the file by replacing the hash by `eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee`, and should work on compiled executables. This is meant to be used to remove the dependency of the output on inputs that are known to be unnecessary at runtime. Of course, reckless usage will break the patched programs.
881+To use this, add `removeReferencesTo` to `nativeBuildInputs`.
882+
883+As `remove-references-to` is an actual executable and not a shell function, it can be used with `find`.
884+Example removing all references to the compiler in the output:
885+```nix
886+postInstall = ''
887+ find "$out" -type f -exec remove-references-to -t ${stdenv.cc} '{}' +
888+'';
889+```
802890
803891### `substitute` \<infile\> \<outfile\> \<subs\> {#fun-substitute}
804892
@@ -873,9 +961,9 @@ someVar=$(stripHash $name)
873961
874962### `wrapProgram` \<executable\> \<makeWrapperArgs\> {#fun-wrapProgram}
875963
876−Convenience function for `makeWrapper` that automatically creates a sane wrapper file. It takes all the same arguments as `makeWrapper`, except for `--argv0`.
964+Convenience function for `makeWrapper` that replaces `<\executable\>` with a wrapper that executes the original program. It takes all the same arguments as `makeWrapper`, except for `--inherit-argv0` (used by the `makeBinaryWrapper` implementation) and `--argv0` (used by both `makeWrapper` and `makeBinaryWrapper` wrapper implementations).
877965
878−It cannot be applied multiple times, since it will overwrite the wrapper file.
966+If you will apply it multiple times, it will overwrite the wrapper file and you will end up with double wrapping, which should be avoided.
879967
880968## Package setup hooks {#ssec-setup-hooks}
881969
@@ -1009,7 +1097,7 @@ You can also specify a `runtimeDependencies` variable which lists dependencies t
10091097
10101098In 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.
10111099
1012−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.
10131101
10141102The `autoPatchelf` command also recognizes a `--no-recurse` command line flag, which prevents it from recursing into subdirectories.
10151103
@@ -1228,6 +1316,7 @@ If the libraries lack `-fPIE`, you will get the error `recompile with -fPIE`.
12281316
12291317[^footnote-stdenv-ignored-build-platform]: The build platform is ignored because it is a mere implementation detail of the package satisfying the dependency: As a general programming principle, dependencies are always *specified* as interfaces, not concrete implementation.
12301318[^footnote-stdenv-native-dependencies-in-path]: Currently, this means for native builds all dependencies are put on the `PATH`. But in the future that may not be the case for sake of matching cross: the platforms would be assumed to be unique for native and cross builds alike, so only the `depsBuild*` and `nativeBuildInputs` would be added to the `PATH`.
1319+[^footnote-stdenv-propagated-dependencies]: Nix itself already takes a package’s transitive dependencies into account, but this propagation ensures nixpkgs-specific infrastructure like setup hooks (mentioned above) also are run as if the propagated dependency.
12311320[^footnote-stdenv-find-inputs-location]: The `findInputs` function, currently residing in `pkgs/stdenv/generic/setup.sh`, implements the propagation logic.
12321321[^footnote-stdenv-sys-lib-search-path]: It clears the `sys_lib_*search_path` variables in the Libtool script to prevent Libtool from using libraries in `/usr/lib` and such.
12331322[^footnote-stdenv-build-time-guessing-impurity]: Eventually these will be passed building natively as well, to improve determinism: build-time guessing, as is done today, is a risk of impurity.
doc/using/overlays.chapter.md+21−3
@@ -77,7 +77,7 @@ In Nixpkgs, we have multiple implementations of the BLAS/LAPACK numerical linear
7777
7878 The Nixpkgs attribute is `openblas` for ILP64 (integer width = 64 bits) and `openblasCompat` for LP64 (integer width = 32 bits). `openblasCompat` is the default.
7979
80−- [LAPACK reference](http://www.netlib.org/lapack/) (also provides BLAS)
80+- [LAPACK reference](http://www.netlib.org/lapack/) (also provides BLAS and CBLAS)
8181
8282 The Nixpkgs attribute is `lapack-reference`.
8383
@@ -112,12 +112,28 @@ self: super:
112112This overlay uses Intel's MKL library for both BLAS and LAPACK interfaces. Note that the same can be accomplished at runtime using `LD_LIBRARY_PATH` of `libblas.so.3` and `liblapack.so.3`. For instance:
113113
114114```ShellSession
115−$ LD_LIBRARY_PATH=$(nix-build -A mkl)/lib:$LD_LIBRARY_PATH nix-shell -p octave --run octave
115+$ LD_LIBRARY_PATH=$(nix-build -A mkl)/lib${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH nix-shell -p octave --run octave
116116```
117117
118118Intel MKL requires an `openmp` implementation when running with multiple processors. By default, `mkl` will use Intel's `iomp` implementation if no other is specified, but this is a runtime-only dependency and binary compatible with the LLVM implementation. To use that one instead, Intel recommends users set it with `LD_PRELOAD`. Note that `mkl` is only available on `x86_64-linux` and `x86_64-darwin`. Moreover, Hydra is not building and distributing pre-compiled binaries using it.
119119
120−For BLAS/LAPACK switching to work correctly, all packages must depend on `blas` or `lapack`. This ensures that only one BLAS/LAPACK library is used at one time. There are two versions of BLAS/LAPACK currently in the wild, `LP64` (integer size = 32 bits) and `ILP64` (integer size = 64 bits). Some software needs special flags or patches to work with `ILP64`. You can check if `ILP64` is used in Nixpkgs with `blas.isILP64` and `lapack.isILP64`. Some software does NOT work with `ILP64`, and derivations need to specify an assertion to prevent this. You can prevent `ILP64` from being used with the following:
120+To override `blas` and `lapack` with its reference implementations (i.e. for development purposes), one can use the following overlay:
121+
122+```nix
123+self: super:
124+
125+{
126+ blas = super.blas.override {
127+ blasProvider = self.lapack-reference;
128+ };
129+
130+ lapack = super.lapack.override {
131+ lapackProvider = self.lapack-reference;
132+ };
133+}
134+```
135+
136+For BLAS/LAPACK switching to work correctly, all packages must depend on `blas` or `lapack`. This ensures that only one BLAS/LAPACK library is used at one time. There are two versions of BLAS/LAPACK currently in the wild, `LP64` (integer size = 32 bits) and `ILP64` (integer size = 64 bits). The attributes `blas` and `lapack` are `LP64` by default. Their `ILP64` version are provided through the attributes `blas-ilp64` and `lapack-ilp64`. Some software needs special flags or patches to work with `ILP64`. You can check if `ILP64` is used in Nixpkgs with `blas.isILP64` and `lapack.isILP64`. Some software does NOT work with `ILP64`, and derivations need to specify an assertion to prevent this. You can prevent `ILP64` from being used with the following:
121137
122138```nix
123139{ stdenv, blas, lapack, ... }:
@@ -138,6 +154,8 @@ All programs that are built with [MPI](https://en.wikipedia.org/wiki/Message_Pas
138154
139155- [MPICH](https://www.mpich.org/), attribute name `mpich`
140156
157+- [MVAPICH](https://mvapich.cse.ohio-state.edu/), attribute name `mvapich`
158+
141159To provide MPI enabled applications that use `MPICH`, instead of the default `Open MPI`, simply use the following overlay:
142160
143161```nix
doc/using/overrides.chapter.md+6−2
@@ -39,14 +39,18 @@ The function `overrideAttrs` allows overriding the attribute set passed to a `st
3939Example usage:
4040
4141```nix
42−helloWithDebug = pkgs.hello.overrideAttrs (oldAttrs: rec {
42+helloWithDebug = pkgs.hello.overrideAttrs (finalAttrs: previousAttrs: {
4343 separateDebugInfo = true;
4444});
4545```
4646
4747In 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.
4848
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`.
50+
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.
52+
53+If only a one-argument function is written, the argument has the meaning of `previousAttrs`.
5054
5155::: {.note}
5256Note 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).
flake.nix+9−59
@@ -11,73 +11,23 @@
1111
1212 lib = import ./lib;
1313
14− systems = [
15− "x86_64-linux"
16− "i686-linux"
17− "x86_64-darwin"
18− "aarch64-linux"
19− "armv6l-linux"
20− "armv7l-linux"
21− "aarch64-darwin"
22− ];
14+ systems = lib.systems.supported.hydra;
2315
2416 forAllSystems = f: lib.genAttrs systems (system: f system);
2517
2618 in
2719 {
2820 lib = lib.extend (final: prev: {
29− nixosSystem = { modules, ... } @ args:
30− import ./nixos/lib/eval-config.nix (args // {
31− modules =
32− let
33− vmConfig = (import ./nixos/lib/eval-config.nix
34− (args // {
35− modules = modules ++ [ ./nixos/modules/virtualisation/qemu-vm.nix ];
36− })).config;
37−
38− vmWithBootLoaderConfig = (import ./nixos/lib/eval-config.nix
39− (args // {
40− modules = modules ++ [
41− ./nixos/modules/virtualisation/qemu-vm.nix
42− { virtualisation.useBootLoader = true; }
43− ({ config, ... }: {
44− virtualisation.useEFIBoot =
45− config.boot.loader.systemd-boot.enable ||
46− config.boot.loader.efi.canTouchEfiVariables;
47− })
48− ];
49− })).config;
50−
51− moduleDeclarationFile =
52− let
53− # Even though `modules` is a mandatory argument for `nixosSystem`, it doesn't
54− # mean that the evaluator always keeps track of its position. If there
55− # are too many levels of indirection, the position gets lost at some point.
56− intermediatePos = builtins.unsafeGetAttrPos "modules" args;
57− in
58− if intermediatePos == null then null else intermediatePos.file;
5921
60− # Add the invoking file as error message location for modules
61− # that don't have their own locations; presumably inline modules.
62− addModuleDeclarationFile =
63− m: if moduleDeclarationFile == null then m else {
64− _file = moduleDeclarationFile;
65− imports = [ m ];
66− };
22+ nixos = import ./nixos/lib { lib = final; };
6723
68− in
69− map addModuleDeclarationFile modules ++ [
70− {
71− system.nixos.versionSuffix =
72− ".${final.substring 0 8 (self.lastModifiedDate or self.lastModified or "19700101")}.${self.shortRev or "dirty"}";
73− system.nixos.revision = final.mkIf (self ? rev) self.rev;
74−
75− system.build = {
76− vm = vmConfig.system.build.vm;
77− vmWithBootLoader = vmWithBootLoaderConfig.system.build.vm;
78− };
79− }
80− ];
24+ nixosSystem = args:
25+ import ./nixos/lib/eval-config.nix (args // {
26+ modules = args.modules ++ [ {
27+ system.nixos.versionSuffix =
28+ ".${final.substring 0 8 (self.lastModifiedDate or self.lastModified or "19700101")}.${self.shortRev or "dirty"}";
29+ system.nixos.revision = final.mkIf (self ? rev) self.rev;
30+ } ];
8131 });
8232 });
8333
lib/asserts.nix+10−12
@@ -2,35 +2,33 @@
22
33rec {
44
5− /* Print a trace message if pred is false.
5+ /* Throw if pred is false, else return pred.
66 Intended to be used to augment asserts with helpful error messages.
77
88 Example:
99 assertMsg false "nope"
10− => false
11− stderr> trace: nope
10+ stderr> error: nope
1211
13− assert (assertMsg ("foo" == "bar") "foo is not bar, silly"); ""
14− stderr> trace: foo is not bar, silly
15− stderr> assert failed at …
12+ assert assertMsg ("foo" == "bar") "foo is not bar, silly"; ""
13+ stderr> error: foo is not bar, silly
1614
1715 Type:
1816 assertMsg :: Bool -> String -> Bool
1917 */
2018 # TODO(Profpatsch): add tests that check stderr
2119 assertMsg = pred: msg:
22− if pred
23− then true
24− else builtins.trace msg false;
20+ pred || builtins.throw msg;
2521
2622 /* Specialized `assertMsg` for checking if val is one of the elements
2723 of a list. Useful for checking enums.
2824
2925 Example:
30− let sslLibrary = "libressl"
26+ let sslLibrary = "libressl";
3127 in assertOneOf "sslLibrary" sslLibrary [ "openssl" "bearssl" ]
32− => false
33− stderr> trace: sslLibrary must be one of "openssl", "bearssl", but is: "libressl"
28+ stderr> error: sslLibrary must be one of [
29+ stderr> "openssl"
30+ stderr> "bearssl"
31+ stderr> ], but is: "libressl"
3432
3533 Type:
3634 assertOneOf :: String -> ComparableVal -> List ComparableVal -> Bool
lib/attrsets.nix+131−22
@@ -3,9 +3,9 @@
33
44let
55 inherit (builtins) head tail length;
6− inherit (lib.trivial) and;
7− inherit (lib.strings) concatStringsSep sanitizeDerivationName;
8− inherit (lib.lists) foldr foldl' concatMap concatLists elemAt;
6+ inherit (lib.trivial) id;
7+ inherit (lib.strings) concatStringsSep concatMapStringsSep escapeNixIdentifier sanitizeDerivationName;
8+ inherit (lib.lists) foldr foldl' concatMap concatLists elemAt all partition groupBy take foldl;
99in
1010
1111rec {
@@ -73,10 +73,107 @@ rec {
7373 getAttrFromPath ["z" "z"] x
7474 => error: cannot find attribute `z.z'
7575 */
76− getAttrFromPath = attrPath: set:
76+ getAttrFromPath = attrPath:
7777 let errorMsg = "cannot find attribute `" + concatStringsSep "." attrPath + "'";
78− in attrByPath attrPath (abort errorMsg) set;
78+ in attrByPath attrPath (abort errorMsg);
79+
80+
81+ /* Update or set specific paths of an attribute set.
82+
83+ Takes a list of updates to apply and an attribute set to apply them to,
84+ and returns the attribute set with the updates applied. Updates are
85+ represented as { path = ...; update = ...; } values, where `path` is a
86+ list of strings representing the attribute path that should be updated,
87+ and `update` is a function that takes the old value at that attribute path
88+ as an argument and returns the new
89+ value it should be.
90+
91+ Properties:
92+ - Updates to deeper attribute paths are applied before updates to more
93+ shallow attribute paths
94+ - Multiple updates to the same attribute path are applied in the order
95+ they appear in the update list
96+ - If any but the last `path` element leads into a value that is not an
97+ attribute set, an error is thrown
98+ - If there is an update for an attribute path that doesn't exist,
99+ accessing the argument in the update function causes an error, but
100+ intermediate attribute sets are implicitly created as needed
79101
102+ Example:
103+ updateManyAttrsByPath [
104+ {
105+ path = [ "a" "b" ];
106+ update = old: { d = old.c; };
107+ }
108+ {
109+ path = [ "a" "b" "c" ];
110+ update = old: old + 1;
111+ }
112+ {
113+ path = [ "x" "y" ];
114+ update = old: "xy";
115+ }
116+ ] { a.b.c = 0; }
117+ => { a = { b = { d = 1; }; }; x = { y = "xy"; }; }
118+ */
119+ updateManyAttrsByPath = let
120+ # When recursing into attributes, instead of updating the `path` of each
121+ # update using `tail`, which needs to allocate an entirely new list,
122+ # we just pass a prefix length to use and make sure to only look at the
123+ # path without the prefix length, so that we can reuse the original list
124+ # entries.
125+ go = prefixLength: hasValue: value: updates:
126+ let
127+ # Splits updates into ones on this level (split.right)
128+ # And ones on levels further down (split.wrong)
129+ split = partition (el: length el.path == prefixLength) updates;
130+
131+ # Groups updates on further down levels into the attributes they modify
132+ nested = groupBy (el: elemAt el.path prefixLength) split.wrong;
133+
134+ # Applies only nested modification to the input value
135+ withNestedMods =
136+ # Return the value directly if we don't have any nested modifications
137+ if split.wrong == [] then
138+ if hasValue then value
139+ else
140+ # Throw an error if there is no value. This `head` call here is
141+ # safe, but only in this branch since `go` could only be called
142+ # with `hasValue == false` for nested updates, in which case
143+ # it's also always called with at least one update
144+ let updatePath = (head split.right).path; in
145+ throw
146+ ( "updateManyAttrsByPath: Path '${showAttrPath updatePath}' does "
147+ + "not exist in the given value, but the first update to this "
148+ + "path tries to access the existing value.")
149+ else
150+ # If there are nested modifications, try to apply them to the value
151+ if ! hasValue then
152+ # But if we don't have a value, just use an empty attribute set
153+ # as the value, but simplify the code a bit
154+ mapAttrs (name: go (prefixLength + 1) false null) nested
155+ else if isAttrs value then
156+ # If we do have a value and it's an attribute set, override it
157+ # with the nested modifications
158+ value //
159+ mapAttrs (name: go (prefixLength + 1) (value ? ${name}) value.${name}) nested
160+ else
161+ # However if it's not an attribute set, we can't apply the nested
162+ # modifications, throw an error
163+ let updatePath = (head split.wrong).path; in
164+ throw
165+ ( "updateManyAttrsByPath: Path '${showAttrPath updatePath}' needs to "
166+ + "be updated, but path '${showAttrPath (take prefixLength updatePath)}' "
167+ + "of the given value is not an attribute set, so we can't "
168+ + "update an attribute inside of it.");
169+
170+ # We get the final result by applying all the updates on this level
171+ # after having applied all the nested updates
172+ # We use foldl instead of foldl' so that in case of multiple updates,
173+ # intermediate values aren't evaluated if not needed
174+ in foldl (acc: el: el.update acc) withNestedMods split.right;
175+
176+ in updates: value: go 0 true value updates;
80177
81178 /* Return the specified attributes from a set.
82179
@@ -154,12 +251,12 @@ rec {
154251 foldAttrs (n: a: [n] ++ a) [] [{ a = 2; } { a = 3; }]
155252 => { a = [ 2 3 ]; }
156253 */
157− foldAttrs = op: nul: list_of_attrs:
254+ foldAttrs = op: nul:
158255 foldr (n: a:
159256 foldr (name: o:
160257 o // { ${name} = op n.${name} (a.${name} or nul); }
161258 ) a (attrNames n)
162− ) {} list_of_attrs;
259+ ) {};
163260
164261
165262 /* Recursively collect sets that verify a given predicate named `pred'
@@ -276,7 +373,7 @@ rec {
276373
277374
278375 /* Like `mapAttrsRecursive', but it takes an additional predicate
279− function that tells it whether to recursive into an attribute
376+ function that tells it whether to recurse into an attribute
280377 set. If it returns false, `mapAttrsRecursiveCond' does not
281378 recurse, but does apply the map function. If it returns true, it
282379 does recurse, and does not apply the map function.
@@ -295,14 +392,14 @@ rec {
295392 */
296393 mapAttrsRecursiveCond = cond: f: set:
297394 let
298− recurse = path: set:
395+ recurse = path:
299396 let
300397 g =
301398 name: value:
302399 if isAttrs value && cond value
303400 then recurse (path ++ [name]) value
304401 else f (path ++ [name]) value;
305− in mapAttrs g set;
402+ in mapAttrs g;
306403 in recurse [] set;
307404
308405
@@ -327,7 +424,7 @@ rec {
327424 isDerivation "foobar"
328425 => false
329426 */
330− isDerivation = x: isAttrs x && x ? type && x.type == "derivation";
427+ isDerivation = x: x.type or null == "derivation";
331428
332429 /* Converts a store path to a fake derivation. */
333430 toDerivation = path:
@@ -369,7 +466,7 @@ rec {
369466 value = f name (catAttrs name sets);
370467 }) names);
371468
372− /* Implementation note: Common names appear multiple times in the list of
469+ /* Implementation note: Common names appear multiple times in the list of
373470 names, hopefully this does not affect the system because the maximal
374471 laziness avoid computing twice the same expression and listToAttrs does
375472 not care about duplicated attribute names.
@@ -378,7 +475,8 @@ rec {
378475 zipAttrsWith (name: values: values) [{a = "x";} {a = "y"; b = "z";}]
379476 => { a = ["x" "y"]; b = ["z"] }
380477 */
381− zipAttrsWith = f: sets: zipAttrsWithNames (concatMap attrNames sets) f sets;
478+ zipAttrsWith =
479+ builtins.zipAttrsWith or (f: sets: zipAttrsWithNames (concatMap attrNames sets) f sets);
382480 /* Like `zipAttrsWith' with `(name: values: values)' as the function.
383481
384482 Example:
@@ -419,8 +517,8 @@ rec {
419517 let f = attrPath:
420518 zipAttrsWith (n: values:
421519 let here = attrPath ++ [n]; in
422− if tail values == []
423− || pred here (head (tail values)) (head values) then
520+ if length values == 1
521+ || pred here (elemAt values 1) (head values) then
424522 head values
425523 else
426524 f here values
@@ -446,10 +544,7 @@ rec {
446544 }
447545
448546 */
449− recursiveUpdate = lhs: rhs:
450− recursiveUpdateUntil (path: lhs: rhs:
451− !(isAttrs lhs && isAttrs rhs)
452− ) lhs rhs;
547+ recursiveUpdate = recursiveUpdateUntil (path: lhs: rhs: !(isAttrs lhs && isAttrs rhs));
453548
454549 /* Returns true if the pattern is contained in the set. False otherwise.
455550
@@ -458,8 +553,8 @@ rec {
458553 => true
459554 */
460555 matchAttrs = pattern: attrs: assert isAttrs pattern;
461− foldr and true (attrValues (zipAttrsWithNames (attrNames pattern) (n: values:
462− let pat = head values; val = head (tail values); in
556+ all id (attrValues (zipAttrsWithNames (attrNames pattern) (n: values:
557+ let pat = head values; val = elemAt values 1; in
463558 if length values == 1 then false
464559 else if isAttrs pat then isAttrs val && matchAttrs pat val
465560 else pat == val
@@ -479,6 +574,20 @@ rec {
479574 overrideExisting = old: new:
480575 mapAttrs (name: value: new.${name} or value) old;
481576
577+ /* Turns a list of strings into a human-readable description of those
578+ strings represented as an attribute path. The result of this function is
579+ not intended to be machine-readable.
580+
581+ Example:
582+ showAttrPath [ "foo" "10" "bar" ]
583+ => "foo.\"10\".bar"
584+ showAttrPath []
585+ => "<root attribute path>"
586+ */
587+ showAttrPath = path:
588+ if path == [] then "<root attribute path>"
589+ else concatMapStringsSep "." escapeNixIdentifier path;
590+
482591 /* Get a package output.
483592 If no output is found, fallback to `.out` and then to the default.
484593
@@ -487,7 +596,7 @@ rec {
487596 => "/nix/store/9rz8gxhzf8sw4kf2j2f1grr49w8zx5vj-openssl-1.0.1r-dev"
488597 */
489598 getOutput = output: pkg:
490− if pkg.outputUnspecified or false
599+ if ! pkg ? outputSpecified || ! pkg.outputSpecified
491600 then pkg.${output} or pkg.out or pkg
492601 else pkg;
493602
lib/customisation.nix+50−3
@@ -117,8 +117,55 @@ rec {
117117 callPackageWith = autoArgs: fn: args:
118118 let
119119 f = if lib.isFunction fn then fn else import fn;
120− auto = builtins.intersectAttrs (lib.functionArgs f) autoArgs;
121− in makeOverridable f (auto // args);
120+ fargs = lib.functionArgs f;
121+
122+ # All arguments that will be passed to the function
123+ # This includes automatic ones and ones passed explicitly
124+ allArgs = builtins.intersectAttrs fargs autoArgs // args;
125+
126+ # A list of argument names that the function requires, but
127+ # wouldn't be passed to it
128+ missingArgs = lib.attrNames
129+ # Filter out arguments that have a default value
130+ (lib.filterAttrs (name: value: ! value)
131+ # Filter out arguments that would be passed
132+ (removeAttrs fargs (lib.attrNames allArgs)));
133+
134+ # Get a list of suggested argument names for a given missing one
135+ getSuggestions = arg: lib.pipe (autoArgs // args) [
136+ lib.attrNames
137+ # Only use ones that are at most 2 edits away. While mork would work,
138+ # levenshteinAtMost is only fast for 2 or less.
139+ (lib.filter (lib.strings.levenshteinAtMost 2 arg))
140+ # Put strings with shorter distance first
141+ (lib.sort (x: y: lib.strings.levenshtein x arg < lib.strings.levenshtein y arg))
142+ # Only take the first couple results
143+ (lib.take 3)
144+ # Quote all entries
145+ (map (x: "\"" + x + "\""))
146+ ];
147+
148+ prettySuggestions = suggestions:
149+ if suggestions == [] then ""
150+ else if lib.length suggestions == 1 then ", did you mean ${lib.elemAt suggestions 0}?"
151+ else ", did you mean ${lib.concatStringsSep ", " (lib.init suggestions)} or ${lib.last suggestions}?";
152+
153+ errorForArg = arg:
154+ let
155+ loc = builtins.unsafeGetAttrPos arg fargs;
156+ # loc' can be removed once lib/minver.nix is >2.3.4, since that includes
157+ # https://github.com/NixOS/nix/pull/3468 which makes loc be non-null
158+ loc' = if loc != null then loc.file + ":" + toString loc.line
159+ else if ! lib.isFunction fn then
160+ toString fn + lib.optionalString (lib.sources.pathIsDirectory fn) "/default.nix"
161+ else "<unknown location>";
162+ in "Function called without required argument \"${arg}\" at "
163+ + "${loc'}${prettySuggestions (getSuggestions arg)}";
164+
165+ # Only show the error for the first missing argument
166+ error = errorForArg (lib.head missingArgs);
167+
168+ in if missingArgs == [] then makeOverridable f allArgs else throw error;
122169
123170
124171 /* Like callPackage, but for a function that returns an attribute
@@ -152,6 +199,7 @@ rec {
152199 { name = outputName;
153200 value = commonAttrs // {
154201 inherit (drv.${outputName}) type outputName;
202+ outputSpecified = true;
155203 drvPath = assert condition; drv.${outputName}.drvPath;
156204 outPath = assert condition; drv.${outputName}.outPath;
157205 };
@@ -159,7 +207,6 @@ rec {
159207
160208 outputsList = map outputToAttrListElement outputs;
161209 in commonAttrs // {
162− outputUnspecified = true;
163210 drvPath = assert condition; drv.drvPath;
164211 outPath = assert condition; drv.outPath;
165212 };
lib/default.nix+24−14
@@ -11,6 +11,9 @@ let
1111 callLibs = file: import file { lib = self; };
1212 in {
1313
14+ # interacting with flakes
15+ flakes = callLibs ./flakes.nix;
16+
1417 # often used, or depending on very little
1518 trivial = callLibs ./trivial.nix;
1619 fixedPoints = callLibs ./fixed-points.nix;
@@ -59,6 +62,7 @@ let
5962 # linux kernel configuration
6063 kernel = callLibs ./kernel.nix;
6164
65+ inherit (self.flakes) callLocklessFlake;
6266 inherit (builtins) add addErrorContext attrNames concatLists
6367 deepSeq elem elemAt filter genericClosure genList getAttr
6468 hasAttr head isAttrs isBool isInt isList isString length
@@ -66,8 +70,10 @@ let
6670 stringLength sub substring tail trace;
6771 inherit (self.trivial) id const pipe concat or and bitAnd bitOr bitXor
6872 bitNot boolToString mergeAttrs flip mapNullable inNixShell isFloat min max
69− importJSON importTOML warn warnIf info showWarnings nixpkgsVersion version
70− mod compare splitByAndCompare functionArgs setFunctionArgs isFunction
73+ importJSON importTOML warn warnIf warnIfNot throwIf throwIfNot checkListOfEnum
74+ info showWarnings nixpkgsVersion version isInOldestRelease
75+ mod compare splitByAndCompare
76+ functionArgs setFunctionArgs isFunction toFunction
7177 toHexString toBaseDigits;
7278 inherit (self.fixedPoints) fix fix' converge extends composeExtensions
7379 composeManyExtensions makeExtensible makeExtensibleWithCustomName;
@@ -77,9 +83,10 @@ let
7783 mapAttrs' mapAttrsToList mapAttrsRecursive mapAttrsRecursiveCond
7884 genAttrs isDerivation toDerivation optionalAttrs
7985 zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil
80− recursiveUpdate matchAttrs overrideExisting getOutput getBin
86+ recursiveUpdate matchAttrs overrideExisting showAttrPath getOutput getBin
8187 getLib getDev getMan chooseDevOutputs zipWithNames zip
82− recurseIntoAttrs dontRecurseIntoAttrs cartesianProductOfSets;
88+ recurseIntoAttrs dontRecurseIntoAttrs cartesianProductOfSets
89+ updateManyAttrsByPath;
8390 inherit (self.lists) singleton forEach foldr fold foldl foldl' imap0 imap1
8491 concatMap flatten remove findSingle findFirst any all count
8592 optional optionals toList range partition zipListsWith zipLists
@@ -91,7 +98,8 @@ let
9198 concatImapStringsSep makeSearchPath makeSearchPathOutput
9299 makeLibraryPath makeBinPath optionalString
93100 hasInfix hasPrefix hasSuffix stringToCharacters stringAsChars escape
94− escapeShellArg escapeShellArgs escapeRegex replaceChars lowerChars
101+ escapeShellArg escapeShellArgs isValidPosixName toShellVar toShellVars
102+ escapeRegex escapeXML replaceChars lowerChars
95103 upperChars toLower toUpper addContextFrom splitString
96104 removePrefix removeSuffix versionOlder versionAtLeast
97105 getName getVersion
@@ -105,26 +113,28 @@ let
105113 makeScope makeScopeWithSplicing;
106114 inherit (self.meta) addMetaAttrs dontDistribute setName updateName
107115 appendToName mapDerivationAttrset setPrio lowPrio lowPrioSet hiPrio
108− hiPrioSet;
116+ hiPrioSet getLicenseFromSpdxId getExe;
109117 inherit (self.sources) pathType pathIsDirectory cleanSourceFilter
110118 cleanSource sourceByRegex sourceFilesBySuffices
111119 commitIdFromGitRepo cleanSourceWith pathHasContext
112120 canCleanSource pathIsRegularFile pathIsGitRepo;
113− inherit (self.modules) evalModules unifyModuleSyntax
114− applyIfFunction mergeModules
121+ inherit (self.modules) evalModules setDefaultModuleLocation
122+ unifyModuleSyntax applyModuleArgsIfFunction mergeModules
115123 mergeModules' mergeOptionDecls evalOptionValue mergeDefinitions
116124 pushDownProperties dischargeProperties filterOverrides
117125 sortProperties fixupOptionType mkIf mkAssert mkMerge mkOverride
118126 mkOptionDefault mkDefault mkImageMediaOverride mkForce mkVMOverride
119127 mkFixStrictness mkOrder mkBefore mkAfter mkAliasDefinitions
120128 mkAliasAndWrapDefinitions fixMergeModules mkRemovedOptionModule
121− mkRenamedOptionModule mkMergedOptionModule mkChangedOptionModule
122− mkAliasOptionModule doRename;
129+ mkRenamedOptionModule mkRenamedOptionModuleWith
130+ mkMergedOptionModule mkChangedOptionModule
131+ mkAliasOptionModule mkDerivedConfig doRename;
123132 inherit (self.options) isOption mkEnableOption mkSinkUndeclaredOptions
124− mergeDefaultOption mergeOneOption mergeEqualOption getValues
125− getFiles optionAttrSetToDocList optionAttrSetToDocList'
126− scrubOptionValue literalExample showOption showFiles
127− unknownModule mkOption;
133+ mergeDefaultOption mergeOneOption mergeEqualOption mergeUniqueOption
134+ getValues getFiles
135+ optionAttrSetToDocList optionAttrSetToDocList'
136+ scrubOptionValue literalExpression literalExample literalDocBook
137+ showOption showFiles unknownModule mkOption mkPackageOption;
128138 inherit (self.types) isType setType defaultTypeMerge defaultFunctor
129139 isOptionType mkOptionType;
130140 inherit (self.asserts)
lib/flakes.nixnew file+22
@@ -0,0 +1,22 @@
1+{ lib }:
2+
3+rec {
4+
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.
8+
9+ Example:
10+ callLocklessFlake {
11+ path = ./directoryContainingFlake;
12+ inputs = { inherit nixpkgs; };
13+ }
14+ */
15+ callLocklessFlake = { path, inputs ? { } }:
16+ let
17+ self = { outPath = path; } //
18+ ((import (path + "/flake.nix")).outputs (inputs // { self = self; }));
19+ in
20+ self;
21+
22+}
lib/generators.nix+76−4
@@ -10,7 +10,7 @@
1010 * are mostly generators themselves, called with
1111 * their respective default values; they can be reused.
1212 *
13− * Tests can be found in ./tests.nix
13+ * Tests can be found in ./tests/misc.nix
1414 * Documentation in the manual, #sec-generators
1515 */
1616{ lib }:
@@ -35,6 +35,8 @@ rec {
3535 ("generators.mkValueStringDefault: " +
3636 "${t} not supported: ${toPretty {} v}");
3737 in if isInt v then toString v
38+ # convert derivations to store paths
39+ else if lib.isDerivation v then toString v
3840 # we default to not quoting strings
3941 else if isString v then v
4042 # isString returns "1", which is not a good default
@@ -106,7 +108,7 @@ rec {
106108 * The mk* configuration attributes can generically change
107109 * the way sections and key-value strings are generated.
108110 *
109− * For more examples see the test cases in ./tests.nix.
111+ * For more examples see the test cases in ./tests/misc.nix.
110112 */
111113 toINI = {
112114 # apply transformations (e.g. escapes) to section names
@@ -128,6 +130,51 @@ rec {
128130 # map input to ini sections
129131 mapAttrsToStringsSep "\n" mkSection attrsOfAttrs;
130132
133+ /* Generate an INI-style config file from an attrset
134+ * specifying the global section (no header), and an
135+ * attrset of sections to an attrset of key-value pairs.
136+ *
137+ * generators.toINIWithGlobalSection {} {
138+ * globalSection = {
139+ * someGlobalKey = "hi";
140+ * };
141+ * sections = {
142+ * foo = { hi = "${pkgs.hello}"; ciao = "bar"; };
143+ * baz = { "also, integers" = 42; };
144+ * }
145+ *
146+ *> someGlobalKey=hi
147+ *>
148+ *> [baz]
149+ *> also, integers=42
150+ *>
151+ *> [foo]
152+ *> ciao=bar
153+ *> hi=/nix/store/y93qql1p5ggfnaqjjqhxcw0vqw95rlz0-hello-2.10
154+ *
155+ * The mk* configuration attributes can generically change
156+ * the way sections and key-value strings are generated.
157+ *
158+ * For more examples see the test cases in ./tests/misc.nix.
159+ *
160+ * If you don’t need a global section, you can also use
161+ * `generators.toINI` directly, which only takes
162+ * the part in `sections`.
163+ */
164+ toINIWithGlobalSection = {
165+ # apply transformations (e.g. escapes) to section names
166+ mkSectionName ? (name: libStr.escape [ "[" "]" ] name),
167+ # format a setting line from key and value
168+ mkKeyValue ? mkKeyValueDefault {} "=",
169+ # allow lists as values for duplicate keys
170+ listsAsDuplicateKeys ? false
171+ }: { globalSection, sections }:
172+ ( if globalSection == {}
173+ then ""
174+ else (toKeyValue { inherit mkKeyValue listsAsDuplicateKeys; } globalSection)
175+ + "\n")
176+ + (toINI { inherit mkSectionName mkKeyValue listsAsDuplicateKeys; } sections);
177+
131178 /* Generate a git-config file from an attrset.
132179 *
133180 * It has two major differences from the regular INI format:
@@ -169,7 +216,7 @@ rec {
169216 # converts { a.b.c = 5; } to { "a.b".c = 5; } for toINI
170217 gitFlattenAttrs = let
171218 recurse = path: value:
172− if isAttrs value then
219+ if isAttrs value && !lib.isDerivation value then
173220 lib.mapAttrsToList (name: value: recurse ([ name ] ++ path) value) value
174221 else if length path > 1 then {
175222 ${concatStringsSep "." (lib.reverseList (tail path))}.${head path} = value;
@@ -195,6 +242,30 @@ rec {
195242 */
196243 toYAML = {}@args: toJSON args;
197244
245+ withRecursion =
246+ args@{
247+ /* If this option is not null, the given value will stop evaluating at a certain depth */
248+ depthLimit
249+ /* If this option is true, an error will be thrown, if a certain given depth is exceeded */
250+ , throwOnDepthLimit ? true
251+ }:
252+ assert builtins.isInt depthLimit;
253+ let
254+ transform = depth:
255+ if depthLimit != null && depth > depthLimit then
256+ if throwOnDepthLimit
257+ then throw "Exceeded maximum eval-depth limit of ${toString depthLimit} while trying to evaluate with `generators.withRecursion'!"
258+ else const "<unevaluated>"
259+ else id;
260+ mapAny = with builtins; depth: v:
261+ let
262+ evalNext = x: mapAny (depth + 1) (transform (depth + 1) x);
263+ in
264+ if isAttrs v then mapAttrs (const evalNext) v
265+ else if isList v then map evalNext v
266+ else transform (depth + 1) v;
267+ in
268+ mapAny 0;
198269
199270 /* Pretty print a value, akin to `builtins.trace`.
200271 * Should probably be a builtin as well.
@@ -206,7 +277,8 @@ rec {
206277 allowPrettyValues ? false,
207278 /* If this option is true, the output is indented with newlines for attribute sets and lists */
208279 multiline ? true
209− }@args: let
280+ }@args:
281+ let
210282 go = indent: v: with builtins;
211283 let isPath = v: typeOf v == "path";
212284 introSpace = if multiline then "\n${indent} " else " ";
lib/licenses.nix+40
@@ -67,6 +67,11 @@ in mkLicense lset) ({
6767 free = false;
6868 };
6969
70+ aom = {
71+ fullName = "Alliance for Open Media Patent License 1.0";
72+ url = "https://aomedia.org/license/patent-license/";
73+ };
74+
7075 apsl20 = {
7176 spdxId = "APSL-2.0";
7277 fullName = "Apple Public Source License 2.0";
@@ -153,6 +158,11 @@ in mkLicense lset) ({
153158 free = false;
154159 };
155160
161+ capec = {
162+ fullName = "Common Attack Pattern Enumeration and Classification";
163+ url = "https://capec.mitre.org/about/termsofuse.html";
164+ };
165+
156166 clArtistic = {
157167 spdxId = "ClArtistic";
158168 fullName = "Clarified Artistic License";
@@ -240,6 +250,11 @@ in mkLicense lset) ({
240250 fullName = "CeCILL Free Software License Agreement v2.0";
241251 };
242252
253+ cecill21 = {
254+ spdxId = "CECILL-2.1";
255+ fullName = "CeCILL Free Software License Agreement v2.1";
256+ };
257+
243258 cecill-b = {
244259 spdxId = "CECILL-B";
245260 fullName = "CeCILL-B Free Software License Agreement";
@@ -374,6 +389,11 @@ in mkLicense lset) ({
374389 free = false;
375390 };
376391
392+ generaluser = {
393+ fullName = "GeneralUser GS License v2.0";
394+ url = "http://www.schristiancollins.com/generaluser.php"; # license included in sources
395+ };
396+
377397 gpl1Only = {
378398 spdxId = "GPL-1.0-only";
379399 fullName = "GNU General Public License v1.0 only";
@@ -450,6 +470,11 @@ in mkLicense lset) ({
450470 spdxId = "imagemagick";
451471 };
452472
473+ imlib2 = {
474+ spdxId = "Imlib2";
475+ fullName = "Imlib2 License";
476+ };
477+
453478 inria-compcert = {
454479 fullName = "INRIA Non-Commercial License Agreement for the CompCert verified compiler";
455480 url = "https://compcert.org/doc/LICENSE.txt";
@@ -576,6 +601,21 @@ in mkLicense lset) ({
576601 spdxId = "MIT";
577602 fullName = "MIT License";
578603 };
604+ # https://spdx.org/licenses/MIT-feh.html
605+ mit-feh = {
606+ spdxId = "MIT-feh";
607+ fullName = "feh License";
608+ };
609+
610+ mitAdvertising = {
611+ spdxId = "MIT-advertising";
612+ fullName = "Enlightenment License (e16)";
613+ };
614+
615+ mit0 = {
616+ spdxId = "MIT-0";
617+ fullName = "MIT No Attribution";
618+ };
579619
580620 mpl10 = {
581621 spdxId = "MPL-1.0";
lib/lists.nix+11−13
@@ -4,6 +4,7 @@
44let
55 inherit (lib.strings) toInt;
66 inherit (lib.trivial) compare min;
7+ inherit (lib.attrsets) mapAttrs;
78in
89rec {
910
@@ -340,15 +341,15 @@ rec {
340341 groupBy' builtins.add 0 (x: boolToString (x > 2)) [ 5 1 2 3 4 ]
341342 => { true = 12; false = 3; }
342343 */
343− groupBy' = op: nul: pred: lst:
344− foldl' (r: e:
345− let
346− key = pred e;
347− in
348− r // { ${key} = op (r.${key} or nul) e; }
349− ) {} lst;
344+ groupBy' = op: nul: pred: lst: mapAttrs (name: foldl op nul) (groupBy pred lst);
350345
351− groupBy = groupBy' (sum: e: sum ++ [e]) [];
346+ groupBy = builtins.groupBy or (
347+ pred: foldl' (r: e:
348+ let
349+ key = pred e;
350+ in
351+ r // { ${key} = (r.${key} or []) ++ [e]; }
352+ ) {});
352353
353354 /* Merges two lists of the same size together. If the sizes aren't the same
354355 the merging stops at the shortest. How both lists are merged is defined
@@ -642,7 +643,7 @@ rec {
642643 unique [ 3 2 3 4 ]
643644 => [ 3 2 4 ]
644645 */
645− unique = foldl' (acc: e: if elem e acc then acc else acc ++ [ e ]) [];
646+ unique = foldl' (acc: e: if elem e acc then acc else acc ++ [ e ]) [];
646647
647648 /* Intersects list 'e' and another list. O(nm) complexity.
648649
@@ -663,9 +664,6 @@ rec {
663664 /* Test if two lists have no common element.
664665 It should be slightly more efficient than (intersectLists a b == [])
665666 */
666− mutuallyExclusive = a: b:
667− (builtins.length a) == 0 ||
668− (!(builtins.elem (builtins.head a) b) &&
669− mutuallyExclusive (builtins.tail a) b);
667+ mutuallyExclusive = a: b: length a == 0 || !(any (x: elem x a) b);
670668
671669}
lib/meta.nix+42−1
@@ -78,7 +78,7 @@ rec {
7878
7979 2. (modern) a pattern for the platform `parsed` field.
8080
81− We can inject these into a patten for the whole of a structured platform,
81+ We can inject these into a pattern for the whole of a structured platform,
8282 and then match that.
8383 */
8484 platformMatch = platform: elem: let
@@ -99,4 +99,45 @@ rec {
9999 availableOn = platform: pkg:
100100 lib.any (platformMatch platform) pkg.meta.platforms &&
101101 lib.all (elem: !platformMatch platform elem) (pkg.meta.badPlatforms or []);
102+
103+ /* Get the corresponding attribute in lib.licenses
104+ from the SPDX ID.
105+ For SPDX IDs, see
106+ https://spdx.org/licenses
107+
108+ Type:
109+ getLicenseFromSpdxId :: str -> AttrSet
110+
111+ Example:
112+ lib.getLicenseFromSpdxId "MIT" == lib.licenses.mit
113+ => true
114+ lib.getLicenseFromSpdxId "mIt" == lib.licenses.mit
115+ => true
116+ lib.getLicenseFromSpdxId "MY LICENSE"
117+ => trace: warning: getLicenseFromSpdxId: No license matches the given SPDX ID: MY LICENSE
118+ => { shortName = "MY LICENSE"; }
119+ */
120+ getLicenseFromSpdxId =
121+ let
122+ spdxLicenses = lib.mapAttrs (id: ls: assert lib.length ls == 1; builtins.head ls)
123+ (lib.groupBy (l: lib.toLower l.spdxId) (lib.filter (l: l ? spdxId) (lib.attrValues lib.licenses)));
124+ in licstr:
125+ spdxLicenses.${ lib.toLower licstr } or (
126+ lib.warn "getLicenseFromSpdxId: No license matches the given SPDX ID: ${licstr}"
127+ { shortName = licstr; }
128+ );
129+
130+ /* Get the path to the main program of a derivation with either
131+ meta.mainProgram or pname or name
132+
133+ Type: getExe :: derivation -> string
134+
135+ Example:
136+ getExe pkgs.hello
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"
140+ */
141+ getExe = x:
142+ "${lib.getBin x}/bin/${x.meta.mainProgram or (lib.getName x)}";
102143}
lib/modules.nix+339−89
@@ -9,12 +9,10 @@ let
99 catAttrs
1010 concatLists
1111 concatMap
12− count
12+ concatStringsSep
1313 elem
1414 filter
1515 findFirst
16− flip
17− foldl
1816 foldl'
1917 getAttrFromPath
2018 head
@@ -39,6 +37,7 @@ let
3937 toList
4038 types
4139 warnIf
40+ zipAttrsWith
4241 ;
4342 inherit (lib.options)
4443 isOption
@@ -47,20 +46,63 @@ let
4746 showFiles
4847 showOption
4948 unknownModule
49+ literalExpression
5050 ;
51+
52+ showDeclPrefix = loc: decl: prefix:
53+ " - option(s) with prefix `${showOption (loc ++ [prefix])}' in module `${decl._file}'";
54+ showRawDecls = loc: decls:
55+ concatStringsSep "\n"
56+ (sort (a: b: a < b)
57+ (concatMap
58+ (decl: map
59+ (showDeclPrefix loc decl)
60+ (attrNames decl.options)
61+ )
62+ decls
63+ ));
64+
5165in
5266
5367rec {
5468
55− /* Evaluate a set of modules. The result is a set of two
56− attributes: ‘options’: the nested set of all option declarations,
57− and ‘config’: the nested set of all option values.
69+ /*
70+ Evaluate a set of modules. The result is a set with the attributes:
71+
72+ ‘options’: The nested set of all option declarations,
73+
74+ ‘config’: The nested set of all option values.
75+
76+ ‘type’: A module system type representing the module set as a submodule,
77+ to be extended by configuration from the containing module set.
78+
79+ This is also available as the module argument ‘moduleType’.
80+
81+ ‘extendModules’: A function similar to ‘evalModules’ but building on top
82+ of the module set. Its arguments, ‘modules’ and ‘specialArgs’ are
83+ added to the existing values.
84+
85+ Using ‘extendModules’ a few times has no performance impact as long
86+ as you only reference the final ‘options’ and ‘config’.
87+ If you do reference multiple ‘config’ (or ‘options’) from before and
88+ after ‘extendModules’, performance is the same as with multiple
89+ ‘evalModules’ invocations, because the new modules' ability to
90+ override existing configuration fundamentally requires a new
91+ fixpoint to be constructed.
92+
93+ This is also available as a module argument.
94+
95+ ‘_module’: A portion of the configuration tree which is elided from
96+ ‘config’. It contains some values that are mostly internal to the
97+ module system implementation.
98+
5899 !!! Please think twice before adding to this argument list! The more
59100 that is specified here instead of in the modules themselves the harder
60101 it is to transparently move a set of modules to be a submodule of another
61102 config (as the proper arguments need to be replicated at each call to
62103 evalModules) and the less declarative the module set is. */
63− evalModules = { modules
104+ evalModules = evalModulesArgs@
105+ { modules
64106 , prefix ? []
65107 , # This should only be used for special arguments that need to be evaluated
66108 # when resolving module structure (like in imports). For everything else,
@@ -71,13 +113,39 @@ rec {
71113 args ? {}
72114 , # This would be remove in the future, Prefer _module.check option instead.
73115 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
74120 }:
75121 let
122+ withWarnings = x:
123+ lib.warnIf (evalModulesArgs?args) "The args argument to evalModules is deprecated. Please set config._module.args instead."
124+ lib.warnIf (evalModulesArgs?check) "The check argument to evalModules is deprecated. Please set config._module.check instead."
125+ x;
126+
127+ legacyModules =
128+ optional (evalModulesArgs?args) {
129+ config = {
130+ _module.args = args;
131+ };
132+ }
133+ ++ optional (evalModulesArgs?check) {
134+ config = {
135+ _module.check = mkDefault check;
136+ };
137+ };
138+ regularModules = modules ++ legacyModules;
139+
76140 # This internal module declare internal options under the `_module'
77141 # attribute. These options are fragile, as they are used by the
78142 # module system to change the interpretation of modules.
143+ #
144+ # When extended with extendModules or moduleType, a fresh instance of
145+ # this module is used, to avoid conflicts and allow chaining of
146+ # extendModules.
79147 internalModule = rec {
80− _file = ./modules.nix;
148+ _file = "lib/modules.nix";
81149
82150 key = _file;
83151
@@ -89,21 +157,106 @@ rec {
89157 # support for that, in turn it's lazy in its values. This means e.g.
90158 # a `_module.args.pkgs = import (fetchTarball { ... }) {}` won't
91159 # start a download when `pkgs` wasn't evaluated.
92− type = types.lazyAttrsOf types.unspecified;
93− internal = true;
94− description = "Arguments passed to each module.";
160+ type = types.lazyAttrsOf types.raw;
161+ # Only render documentation once at the root of the option tree,
162+ # not for all individual submodules.
163+ # Allow merging option decls to make this internal regardless.
164+ ${if prefix == []
165+ then null # unset => visible
166+ else "internal"} = true;
167+ # TODO: Change the type of this option to a submodule with a
168+ # freeformType, so that individual arguments can be documented
169+ # separately
170+ description = ''
171+ Additional arguments passed to each module in addition to ones
172+ like <literal>lib</literal>, <literal>config</literal>,
173+ and <literal>pkgs</literal>, <literal>modulesPath</literal>.
174+ </para>
175+ <para>
176+ This option is also available to all submodules. Submodules do not
177+ inherit args from their parent module, nor do they provide args to
178+ their parent module or sibling submodules. The sole exception to
179+ this is the argument <literal>name</literal> which is provided by
180+ parent modules to a submodule and contains the attribute name
181+ the submodule is bound to, or a unique generated name if it is
182+ not bound to an attribute.
183+ </para>
184+ <para>
185+ Some arguments are already passed by default, of which the
186+ following <emphasis>cannot</emphasis> be changed with this option:
187+ <itemizedlist>
188+ <listitem>
189+ <para>
190+ <varname>lib</varname>: The nixpkgs library.
191+ </para>
192+ </listitem>
193+ <listitem>
194+ <para>
195+ <varname>config</varname>: The results of all options after merging the values from all modules together.
196+ </para>
197+ </listitem>
198+ <listitem>
199+ <para>
200+ <varname>options</varname>: The options declared in all modules.
201+ </para>
202+ </listitem>
203+ <listitem>
204+ <para>
205+ <varname>specialArgs</varname>: The <literal>specialArgs</literal> argument passed to <literal>evalModules</literal>.
206+ </para>
207+ </listitem>
208+ <listitem>
209+ <para>
210+ All attributes of <varname>specialArgs</varname>
211+ </para>
212+ <para>
213+ Whereas option values can generally depend on other option values
214+ thanks to laziness, this does not apply to <literal>imports</literal>, which
215+ must be computed statically before anything else.
216+ </para>
217+ <para>
218+ For this reason, callers of the module system can provide <literal>specialArgs</literal>
219+ which are available during import resolution.
220+ </para>
221+ <para>
222+ For NixOS, <literal>specialArgs</literal> includes
223+ <varname>modulesPath</varname>, which allows you to import
224+ extra modules from the nixpkgs package tree without having to
225+ somehow make the module aware of the location of the
226+ <literal>nixpkgs</literal> or NixOS directories.
227+ <programlisting>
228+ { modulesPath, ... }: {
229+ imports = [
230+ (modulesPath + "/profiles/minimal.nix")
231+ ];
232+ }
233+ </programlisting>
234+ </para>
235+ </listitem>
236+ </itemizedlist>
237+ </para>
238+ <para>
239+ For NixOS, the default value for this option includes at least this argument:
240+ <itemizedlist>
241+ <listitem>
242+ <para>
243+ <varname>pkgs</varname>: The nixpkgs package set according to
244+ the <option>nixpkgs.pkgs</option> option.
245+ </para>
246+ </listitem>
247+ </itemizedlist>
248+ '';
95249 };
96250
97251 _module.check = mkOption {
98252 type = types.bool;
99253 internal = true;
100− default = check;
254+ default = true;
101255 description = "Whether to check whether all option definitions have matching declarations.";
102256 };
103257
104258 _module.freeformType = mkOption {
105− # Disallow merging for now, but could be implemented nicely with a `types.optionType`
106− type = types.nullOr (types.uniq types.attrs);
259+ type = types.nullOr types.optionType;
107260 internal = true;
108261 default = null;
109262 description = ''
@@ -120,14 +273,17 @@ rec {
120273 };
121274
122275 config = {
123− _module.args = args;
276+ _module.args = {
277+ inherit extendModules;
278+ moduleType = type;
279+ };
124280 };
125281 };
126282
127283 merged =
128284 let collected = collectModules
129285 (specialArgs.modulesPath or "")
130− (modules ++ [ internalModule ])
286+ (regularModules ++ [ internalModule ])
131287 ({ inherit lib options config specialArgs; } // specialArgs);
132288 in mergeModules prefix (reverseList collected);
133289
@@ -162,20 +318,51 @@ rec {
162318 baseMsg = "The option `${showOption (prefix ++ firstDef.prefix)}' does not exist. Definition values:${showDefs [ firstDef ]}";
163319 in
164320 if attrNames options == [ "_module" ]
165− then throw ''
166− ${baseMsg}
167−
168− However there are no options defined in `${showOption prefix}'. Are you sure you've
169− declared your options properly? This can happen if you e.g. declared your options in `types.submodule'
170− under `config' rather than `options'.
171− ''
321+ then
322+ let
323+ optionName = showOption prefix;
324+ in
325+ if optionName == ""
326+ then throw ''
327+ ${baseMsg}
328+
329+ It seems as if you're trying to declare an option by placing it into `config' rather than `options'!
330+ ''
331+ else
332+ throw ''
333+ ${baseMsg}
334+
335+ However there are no options defined in `${showOption prefix}'. Are you sure you've
336+ declared your options properly? This can happen if you e.g. declared your options in `types.submodule'
337+ under `config' rather than `options'.
338+ ''
172339 else throw baseMsg
173340 else null;
174341
175− result = builtins.seq checkUnmatched {
176− inherit options;
177− config = removeAttrs config [ "_module" ];
178− inherit (config) _module;
342+ checked = builtins.seq checkUnmatched;
343+
344+ extendModules = extendArgs@{
345+ modules ? [],
346+ specialArgs ? {},
347+ prefix ? [],
348+ extensionOffset ? length modules,
349+ }:
350+ evalModules (evalModulesArgs // {
351+ modules = regularModules ++ modules;
352+ specialArgs = evalModulesArgs.specialArgs or {} // specialArgs;
353+ prefix = extendArgs.prefix or evalModulesArgs.prefix;
354+ inherit extensionOffset;
355+ });
356+
357+ type = lib.types.submoduleWith {
358+ inherit modules specialArgs extensionOffset;
359+ };
360+
361+ result = withWarnings {
362+ options = checked options;
363+ config = checked (removeAttrs config [ "_module" ]);
364+ _module = checked (config._module);
365+ inherit extendModules type;
179366 };
180367 in result;
181368
@@ -188,11 +375,11 @@ rec {
188375 # Like unifyModuleSyntax, but also imports paths and calls functions if necessary
189376 loadModule = args: fallbackFile: fallbackKey: m:
190377 if isFunction m || isAttrs m then
191− unifyModuleSyntax fallbackFile fallbackKey (applyIfFunction fallbackKey m args)
378+ unifyModuleSyntax fallbackFile fallbackKey (applyModuleArgsIfFunction fallbackKey m args)
192379 else if isList m then
193380 let defs = [{ file = fallbackFile; value = m; }]; in
194381 throw "Module imports can't be nested lists. Perhaps you meant to remove one level of lists? Definitions: ${showDefs defs}"
195− else unifyModuleSyntax (toString m) (toString m) (applyIfFunction (toString m) (import m) args);
382+ else unifyModuleSyntax (toString m) (toString m) (applyModuleArgsIfFunction (toString m) (import m) args);
196383
197384 /*
198385 Collects all modules recursively into the form
@@ -253,6 +440,10 @@ rec {
253440 in modulesPath: initialModules: args:
254441 filterModules modulesPath (collectStructuredModules unknownModule "" initialModules args);
255442
443+ /* Wrap a module with a default location for reporting errors. */
444+ setDefaultModuleLocation = file: m:
445+ { _file = file; imports = [ m ]; };
446+
256447 /* Massage a module into canonical form, that is, a set consisting
257448 of ‘options’, ‘config’ and ‘imports’ attributes. */
258449 unifyModuleSyntax = file: key: m:
@@ -285,7 +476,7 @@ rec {
285476 config = addFreeformType (addMeta (removeAttrs m ["_file" "key" "disabledModules" "require" "imports" "freeformType"]));
286477 };
287478
288− applyIfFunction = key: f: args@{ config, options, lib, ... }: if isFunction f then
479+ applyModuleArgsIfFunction = key: f: args@{ config, options, lib, ... }: if isFunction f then
289480 let
290481 # Module arguments are resolved in a strict manner when attribute set
291482 # deconstruction is used. As the arguments are now defined with the
@@ -362,10 +553,11 @@ rec {
362553 }
363554 */
364555 byName = attr: f: modules:
365− foldl' (acc: module:
366− if !(builtins.isAttrs module.${attr}) then
556+ zipAttrsWith (n: concatLists)
557+ (map (module: let subtree = module.${attr}; in
558+ if !(builtins.isAttrs subtree) then
367559 throw ''
368− You're trying to declare a value of type `${builtins.typeOf module.${attr}}'
560+ You're trying to declare a value of type `${builtins.typeOf subtree}'
369561 rather than an attribute-set for the option
370562 `${builtins.concatStringsSep "." prefix}'!
371563
@@ -374,11 +566,8 @@ rec {
374566 this option by e.g. referring to `man 5 configuration.nix'!
375567 ''
376568 else
377− acc // (mapAttrs (n: v:
378− (acc.${n} or []) ++ f module v
379− ) module.${attr}
380− )
381− ) {} modules;
569+ mapAttrs (n: f module) subtree
570+ ) modules);
382571 # an attrset 'name' => list of submodules that declare ‘name’.
383572 declsByName = byName "options" (module: option:
384573 [{ inherit (module) _file; options = option; }]
@@ -392,28 +581,63 @@ rec {
392581 [{ inherit (module) file; inherit value; }]
393582 ) configs;
394583
395− resultsByName = flip mapAttrs declsByName (name: decls:
584+ # Convert an option tree decl to a submodule option decl
585+ optionTreeToOption = decl:
586+ if isOption decl.options
587+ then decl
588+ else decl // {
589+ options = mkOption {
590+ type = types.submoduleWith {
591+ modules = [ { options = decl.options; } ];
592+ # `null` is not intended for use by modules. It is an internal
593+ # value that means "whatever the user has declared elsewhere".
594+ # This might become obsolete with https://github.com/NixOS/nixpkgs/issues/162398
595+ shorthandOnlyDefinesConfig = null;
596+ };
597+ };
598+ };
599+
600+ resultsByName = mapAttrs (name: decls:
396601 # We're descending into attribute ‘name’.
397602 let
398603 loc = prefix ++ [name];
399604 defns = defnsByName.${name} or [];
400605 defns' = defnsByName'.${name} or [];
401− nrOptions = count (m: isOption m.options) decls;
606+ optionDecls = filter (m: isOption m.options) decls;
402607 in
403− if nrOptions == length decls then
608+ if length optionDecls == length decls then
404609 let opt = fixupOptionType loc (mergeOptionDecls loc decls);
405610 in {
406611 matchedOptions = evalOptionValue loc opt defns';
407612 unmatchedDefns = [];
408613 }
409− else if nrOptions != 0 then
410− let
411− firstOption = findFirst (m: isOption m.options) "" decls;
412− firstNonOption = findFirst (m: !isOption m.options) "" decls;
413− in
414− throw "The option `${showOption loc}' in `${firstOption._file}' is a prefix of options in `${firstNonOption._file}'."
614+ else if optionDecls != [] then
615+ if all (x: x.options.type.name == "submodule") optionDecls
616+ # Raw options can only be merged into submodules. Merging into
617+ # attrsets might be nice, but ambiguous. Suppose we have
618+ # attrset as a `attrsOf submodule`. User declares option
619+ # attrset.foo.bar, this could mean:
620+ # a. option `bar` is only available in `attrset.foo`
621+ # b. option `foo.bar` is available in all `attrset.*`
622+ # c. reject and require "<name>" as a reminder that it behaves like (b).
623+ # d. magically combine (a) and (c).
624+ # All of the above are merely syntax sugar though.
625+ then
626+ let opt = fixupOptionType loc (mergeOptionDecls loc (map optionTreeToOption decls));
627+ in {
628+ matchedOptions = evalOptionValue loc opt defns';
629+ unmatchedDefns = [];
630+ }
631+ else
632+ let
633+ firstNonOption = findFirst (m: !isOption m.options) "" decls;
634+ nonOptions = filter (m: !isOption m.options) decls;
635+ in
636+ throw "The option `${showOption loc}' in module `${(lib.head optionDecls)._file}' would be a parent of the following options, but its type `${(lib.head optionDecls).options.type.description or "<no description>"}' does not support nested options.\n${
637+ showRawDecls loc nonOptions
638+ }"
415639 else
416− mergeModules' loc decls defns);
640+ mergeModules' loc decls defns) declsByName;
417641
418642 matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName;
419643
@@ -427,12 +651,19 @@ rec {
427651 inherit matchedOptions;
428652
429653 # Transforms unmatchedDefnsByName into a list of definitions
430− unmatchedDefns = concatLists (mapAttrsToList (name: defs:
431− map (def: def // {
432− # Set this so we know when the definition first left unmatched territory
433− prefix = [name] ++ (def.prefix or []);
434− }) defs
435− ) unmatchedDefnsByName);
654+ unmatchedDefns =
655+ if configs == []
656+ then
657+ # When no config values exist, there can be no unmatched config, so
658+ # we short circuit and avoid evaluating more _options_ than necessary.
659+ []
660+ else
661+ concatLists (mapAttrsToList (name: defs:
662+ map (def: def // {
663+ # Set this so we know when the definition first left unmatched territory
664+ prefix = [name] ++ (def.prefix or []);
665+ }) defs
666+ ) unmatchedDefnsByName);
436667 };
437668
438669 /* Merge multiple option declarations into a single declaration. In
@@ -448,11 +679,9 @@ rec {
448679 correspond to the definition of 'loc' in 'opt.file'. */
449680 mergeOptionDecls =
450681 let
451− packSubmodule = file: m:
452− { _file = file; imports = [ m ]; };
453682 coerceOption = file: opt:
454− if isFunction opt then packSubmodule file opt
455− else packSubmodule file { options = opt; };
683+ if isFunction opt then setDefaultModuleLocation file opt
684+ else setDefaultModuleLocation file { options = opt; };
456685 in loc: opts:
457686 foldl' (res: opt:
458687 let t = res.type;
@@ -473,17 +702,9 @@ rec {
473702 throw "The option `${showOption loc}' in `${opt._file}' is already declared in ${showFiles res.declarations}."
474703 else
475704 let
476− /* Add the modules of the current option to the list of modules
477− already collected. The options attribute except either a list of
478− submodules or a submodule. For each submodule, we add the file of the
479− current option declaration as the file use for the submodule. If the
480− submodule defines any filename, then we ignore the enclosing option file. */
481− options' = toList opt.options.options;
482−
483705 getSubModules = opt.options.type.getSubModules or null;
484706 submodules =
485− if getSubModules != null then map (packSubmodule opt._file) getSubModules ++ res.options
486− else if opt.options ? options then map (coerceOption opt._file) options' ++ res.options
707+ if getSubModules != null then map (setDefaultModuleLocation opt._file) getSubModules ++ res.options
487708 else res.options;
488709 in opt.options // res //
489710 { declarations = res.declarations ++ [opt._file];
@@ -527,6 +748,8 @@ rec {
527748 definitions = map (def: def.value) res.defsFinal;
528749 files = map (def: def.file) res.defsFinal;
529750 inherit (res) isDefined;
751+ # This allows options to be correctly displayed using `${options.path.to.it}`
752+ __toString = _: showOption loc;
530753 };
531754
532755 # Merge definitions of a value of a given type.
@@ -664,26 +887,13 @@ rec {
664887 compare = a: b: (a.priority or 1000) < (b.priority or 1000);
665888 in sort compare defs';
666889
667− /* Hack for backward compatibility: convert options of type
668− optionSet to options of type submodule. FIXME: remove
669− eventually. */
890+ # This calls substSubModules, whose entire purpose is only to ensure that
891+ # option declarations in submodules have accurate position information.
892+ # TODO: Merge this into mergeOptionDecls
670893 fixupOptionType = loc: opt:
671− let
672− options = opt.options or
673− (throw "Option `${showOption loc}' has type optionSet but has no option attribute, in ${showFiles opt.declarations}.");
674− f = tp:
675− let optionSetIn = type: (tp.name == type) && (tp.functor.wrapped.name == "optionSet");
676− in
677− if tp.name == "option set" || tp.name == "submodule" then
678− throw "The option ${showOption loc} uses submodules without a wrapping type, in ${showFiles opt.declarations}."
679− else if optionSetIn "attrsOf" then types.attrsOf (types.submodule options)
680− else if optionSetIn "listOf" then types.listOf (types.submodule options)
681− else if optionSetIn "nullOr" then types.nullOr (types.submodule options)
682− else tp;
683− in
684− if opt.type.getSubModules or null == null
685− then opt // { type = f (opt.type or types.unspecified); }
686− else opt // { type = opt.type.substSubModules opt.options; options = []; };
894+ if opt.type.getSubModules or null == null
895+ then opt // { type = opt.type or types.unspecified; }
896+ else opt // { type = opt.type.substSubModules opt.options; options = []; };
687897
688898
689899 /* Properties. */
@@ -815,6 +1025,26 @@ rec {
8151025 use = builtins.trace "Obsolete option `${showOption from}' is used. It was renamed to `${showOption to}'.";
8161026 };
8171027
1028+ mkRenamedOptionModuleWith = {
1029+ /* Old option path as list of strings. */
1030+ from,
1031+ /* New option path as list of strings. */
1032+ to,
1033+
1034+ /*
1035+ Release number of the first release that contains the rename, ignoring backports.
1036+ Set it to the upcoming release, matching the nixpkgs/.version file.
1037+ */
1038+ sinceRelease,
1039+
1040+ }: doRename {
1041+ inherit from to;
1042+ visible = false;
1043+ warn = lib.isInOldestRelease sinceRelease;
1044+ use = lib.warnIf (lib.isInOldestRelease sinceRelease)
1045+ "Obsolete option `${showOption from}' is used. It was renamed to `${showOption to}'.";
1046+ };
1047+
8181048 /* Return a module that causes a warning to be shown if any of the "from"
8191049 option is defined; the defined values can be used in the "mergeFn" to set
8201050 the "to" value.
@@ -846,7 +1076,7 @@ rec {
8461076 mkMergedOptionModule = from: to: mergeFn:
8471077 { config, options, ... }:
8481078 {
849− options = foldl recursiveUpdate {} (map (path: setAttrByPath path (mkOption {
1079+ options = foldl' recursiveUpdate {} (map (path: setAttrByPath path (mkOption {
8501080 visible = false;
8511081 # To use the value in mergeFn without triggering errors
8521082 default = "_mkMergedOptionModule";
@@ -901,6 +1131,26 @@ rec {
9011131 use = id;
9021132 };
9031133
1134+ /* mkDerivedConfig : Option a -> (a -> Definition b) -> Definition b
1135+
1136+ Create config definitions with the same priority as the definition of another option.
1137+ This should be used for option definitions where one option sets the value of another as a convenience.
1138+ For instance a config file could be set with a `text` or `source` option, where text translates to a `source`
1139+ value using `mkDerivedConfig options.text (pkgs.writeText "filename.conf")`.
1140+
1141+ It takes care of setting the right priority using `mkOverride`.
1142+ */
1143+ # TODO: make the module system error message include information about `opt` in
1144+ # error messages about conflicts. E.g. introduce a variation of `mkOverride` which
1145+ # adds extra location context to the definition object. This will allow context to be added
1146+ # to all messages that report option locations "this value was derived from <full option name>
1147+ # which was defined in <locations>". It can provide a trace of options that contributed
1148+ # to definitions.
1149+ mkDerivedConfig = opt: f:
1150+ mkOverride
1151+ (opt.highestPrio or defaultPriority)
1152+ (f opt.value);
1153+
9041154 doRename = { from, to, visible, warn, use, withPriority ? true }:
9051155 { config, options, ... }:
9061156 let
@@ -930,7 +1180,7 @@ rec {
9301180
9311181 /* Use this function to import a JSON file as NixOS configuration.
9321182
933− importJSON -> path -> attrs
1183+ modules.importJSON :: path -> attrs
9341184 */
9351185 importJSON = file: {
9361186 _file = file;
@@ -939,7 +1189,7 @@ rec {
9391189
9401190 /* Use this function to import a TOML file as NixOS configuration.
9411191
942− importTOML -> path -> attrs
1192+ modules.importTOML :: path -> attrs
9431193 */
9441194 importTOML = file: {
9451195 _file = file;
lib/options.nix+82−18
@@ -26,6 +26,7 @@ let
2626 take
2727 ;
2828 inherit (lib.attrsets)
29+ attrByPath
2930 optionalAttrs
3031 ;
3132 inherit (lib.strings)
@@ -54,7 +55,7 @@ rec {
5455
5556 Example:
5657 mkOption { } // => { _type = "option"; }
57− mkOption { defaultText = "foo"; } // => { _type = "option"; defaultText = "foo"; }
58+ mkOption { default = "foo"; } // => { _type = "option"; default = "foo"; }
5859 */
5960 mkOption =
6061 {
@@ -74,12 +75,10 @@ rec {
7475 apply ? null,
7576 # Whether the option is for NixOS developers only.
7677 internal ? null,
77− # Whether the option shows up in the manual.
78+ # Whether the option shows up in the manual. Default: true. Use false to hide the option and any sub-options from submodules. Use "shallow" to hide only sub-options.
7879 visible ? null,
7980 # Whether the option can be set only once
8081 readOnly ? null,
81− # Deprecated, used by types.optionSet.
82− options ? null
8382 } @ attrs:
8483 attrs // { _type = "option"; };
8584
@@ -99,6 +98,49 @@ rec {
9998 type = lib.types.bool;
10099 };
101100
101+ /* Creates an Option attribute set for an option that specifies the
102+ package a module should use for some purpose.
103+
104+ Type: mkPackageOption :: pkgs -> string -> { default :: [string], example :: null | string | [string] } -> option
105+
106+ The package is specified as a list of strings representing its attribute path in nixpkgs.
107+
108+ Because of this, you need to pass nixpkgs itself as the first argument.
109+
110+ The second argument is the name of the option, used in the description "The <name> package to use.".
111+
112+ You can also pass an example value, either a literal string or a package's attribute path.
113+
114+ You can omit the default path if the name of the option is also attribute path in nixpkgs.
115+
116+ Example:
117+ mkPackageOption pkgs "hello" { }
118+ => { _type = "option"; default = «derivation /nix/store/3r2vg51hlxj3cx5vscp0vkv60bqxkaq0-hello-2.10.drv»; defaultText = { ... }; description = "The hello package to use."; type = { ... }; }
119+
120+ Example:
121+ mkPackageOption pkgs "GHC" {
122+ default = [ "ghc" ];
123+ example = "pkgs.haskell.package.ghc922.ghc.withPackages (hkgs: [ hkgs.primes ])";
124+ }
125+ => { _type = "option"; default = «derivation /nix/store/jxx55cxsjrf8kyh3fp2ya17q99w7541r-ghc-8.10.7.drv»; defaultText = { ... }; description = "The GHC package to use."; example = { ... }; type = { ... }; }
126+ */
127+ mkPackageOption =
128+ # Package set (a specific version of nixpkgs)
129+ pkgs:
130+ # Name for the package, shown in option description
131+ name:
132+ { default ? [ name ], example ? null }:
133+ let default' = if !isList default then [ default ] else default;
134+ in mkOption {
135+ type = lib.types.package;
136+ description = "The ${name} package to use.";
137+ default = attrByPath default'
138+ (throw "${concatStringsSep "." default'} cannot be found in pkgs") pkgs;
139+ defaultText = literalExpression ("pkgs." + concatStringsSep "." default');
140+ ${if example != null then "example" else null} = literalExpression
141+ (if isList example then "pkgs." + concatStringsSep "." example else example);
142+ };
143+
102144 /* This option accepts anything, but it does not produce any result.
103145
104146 This is useful for sharing a module across different module sets
@@ -128,11 +170,13 @@ rec {
128170 else if all isInt list && all (x: x == head list) list then head list
129171 else throw "Cannot merge definitions of `${showOption loc}'. Definition values:${showDefs defs}";
130172
131− mergeOneOption = loc: defs:
132− if defs == [] then abort "This case should never happen."
133− else if length defs != 1 then
134− throw "The unique option `${showOption loc}' is defined multiple times. Definition values:${showDefs defs}"
135− else (head defs).value;
173+ mergeOneOption = mergeUniqueOption { message = ""; };
174+
175+ mergeUniqueOption = { message }: loc: defs:
176+ if length defs == 1
177+ then (head defs).value
178+ else assert length defs > 1;
179+ throw "The option `${showOption loc}' is defined multiple times.\n${message}\nDefinition values:${showDefs defs}";
136180
137181 /* "Merge" option definitions by checking that they all have the same value. */
138182 mergeEqualOption = loc: defs:
@@ -177,12 +221,15 @@ rec {
177221 docOption = rec {
178222 loc = opt.loc;
179223 name = showOption opt.loc;
180− description = opt.description or (lib.warn "Option `${name}' has no description." "This option has no description.");
224+ description = opt.description or null;
181225 declarations = filter (x: x != unknownModule) opt.declarations;
182226 internal = opt.internal or false;
183− visible = opt.visible or true;
227+ visible =
228+ if (opt?visible && opt.visible == "shallow")
229+ then true
230+ else opt.visible or true;
184231 readOnly = opt.readOnly or false;
185− type = opt.type.description or null;
232+ type = opt.type.description or "unspecified";
186233 }
187234 // optionalAttrs (opt ? example) { example = scrubOptionValue opt.example; }
188235 // optionalAttrs (opt ? default) { default = scrubOptionValue opt.default; }
@@ -192,8 +239,9 @@ rec {
192239 subOptions =
193240 let ss = opt.type.getSubOptions opt.loc;
194241 in if ss != {} then optionAttrSetToDocList' opt.loc ss else [];
242+ subOptionsVisible = docOption.visible && opt.visible or null != "shallow";
195243 in
196− [ docOption ] ++ optionals docOption.visible subOptions) (collect isOption options);
244+ [ docOption ] ++ optionals subOptionsVisible subOptions) (collect isOption options);
197245
198246
199247 /* This function recursively removes all derivation attributes from
@@ -212,11 +260,25 @@ rec {
212260 else x;
213261
214262
215− /* For use in the `example` option attribute. It causes the given
216− text to be included verbatim in documentation. This is necessary
217− for example values that are not simple values, e.g., functions.
263+ /* For use in the `defaultText` and `example` option attributes. Causes the
264+ given string to be rendered verbatim in the documentation as Nix code. This
265+ is necessary for complex values, e.g. functions, or values that depend on
266+ other values or packages.
267+ */
268+ literalExpression = text:
269+ if ! isString text then throw "literalExpression expects a string."
270+ else { _type = "literalExpression"; inherit text; };
271+
272+ literalExample = lib.warn "literalExample is deprecated, use literalExpression instead, or use literalDocBook for a non-Nix description." literalExpression;
273+
274+
275+ /* For use in the `defaultText` and `example` option attributes. Causes the
276+ given DocBook text to be inserted verbatim in the documentation, for when
277+ a `literalExpression` would be too hard to read.
218278 */
219− literalExample = text: { _type = "literalExample"; inherit text; };
279+ literalDocBook = text:
280+ if ! isString text then throw "literalDocBook expects a string."
281+ else { _type = "literalDocBook"; inherit text; };
220282
221283 # Helper functions.
222284
@@ -247,7 +309,9 @@ rec {
247309 showDefs = defs: concatMapStrings (def:
248310 let
249311 # Pretty print the value for display, if successful
250− prettyEval = builtins.tryEval (lib.generators.toPretty {} def.value);
312+ prettyEval = builtins.tryEval
313+ (lib.generators.toPretty { }
314+ (lib.generators.withRecursion { depthLimit = 10; throwOnDepthLimit = false; } def.value));
251315 # Split it into its lines
252316 lines = filter (v: ! isList v) (builtins.split "\n" prettyEval.value);
253317 # Only display the first 5 lines, and indent them for better visibility
lib/sources.nix+70−49
@@ -20,17 +20,26 @@ let
2020 readFile
2121 ;
2222
23− # Returns the type of a path: regular (for file), symlink, or directory
24− pathType = p: getAttr (baseNameOf p) (readDir (dirOf p));
23+ /*
24+ Returns the type of a path: regular (for file), symlink, or directory.
25+ */
26+ pathType = path: getAttr (baseNameOf path) (readDir (dirOf path));
2527
26− # Returns true if the path exists and is a directory, false otherwise
27− pathIsDirectory = p: if pathExists p then (pathType p) == "directory" else false;
28+ /*
29+ Returns true if the path exists and is a directory, false otherwise.
30+ */
31+ pathIsDirectory = path: if pathExists path then (pathType path) == "directory" else false;
2832
29− # Returns true if the path exists and is a regular file, false otherwise
30− pathIsRegularFile = p: if pathExists p then (pathType p) == "regular" else false;
33+ /*
34+ Returns true if the path exists and is a regular file, false otherwise.
35+ */
36+ pathIsRegularFile = path: if pathExists path then (pathType path) == "regular" else false;
3137
32− # Bring in a path as a source, filtering out all Subversion and CVS
33− # directories, as well as backup files (*~).
38+ /*
39+ A basic filter for `cleanSourceWith` that removes
40+ directories of version control system, backup files (*~)
41+ and some generated files.
42+ */
3443 cleanSourceFilter = name: type: let baseName = baseNameOf (toString name); in ! (
3544 # Filter out version control software files/directories
3645 (baseName == ".git" || type == "directory" && (baseName == ".svn" || baseName == "CVS" || baseName == ".hg")) ||
@@ -43,46 +52,53 @@ let
4352 lib.hasSuffix ".o" baseName ||
4453 lib.hasSuffix ".so" baseName ||
4554 # Filter out nix-build result symlinks
46− (type == "symlink" && lib.hasPrefix "result" baseName)
55+ (type == "symlink" && lib.hasPrefix "result" baseName) ||
56+ # Filter out sockets and other types of files we can't have in the store.
57+ (type == "unknown")
4758 );
4859
49− # Filters a source tree removing version control files and directories using cleanSourceWith
50− #
51− # Example:
52− # cleanSource ./.
60+ /*
61+ Filters a source tree removing version control files and directories using cleanSourceFilter.
62+
63+ Example:
64+ cleanSource ./.
65+ */
5366 cleanSource = src: cleanSourceWith { filter = cleanSourceFilter; inherit src; };
5467
55− # Like `builtins.filterSource`, except it will compose with itself,
56− # allowing you to chain multiple calls together without any
57− # intermediate copies being put in the nix store.
58− #
59− # lib.cleanSourceWith {
60− # filter = f;
61− # src = lib.cleanSourceWith {
62− # filter = g;
63− # src = ./.;
64− # };
65− # }
66− # # Succeeds!
67− #
68− # builtins.filterSource f (builtins.filterSource g ./.)
69− # # Fails!
70− #
71− # Parameters:
72− #
73− # src: A path or cleanSourceWith result to filter and/or rename.
74− #
75− # filter: A function (path -> type -> bool)
76− # Optional with default value: constant true (include everything)
77− # The function will be combined with the && operator such
78− # that src.filter is called lazily.
79− # For implementing a filter, see
80− # https://nixos.org/nix/manual/#builtin-filterSource
81− #
82− # name: Optional name to use as part of the store path.
83− # This defaults to `src.name` or otherwise `"source"`.
84− #
85− cleanSourceWith = { filter ? _path: _type: true, src, name ? null }:
68+ /*
69+ Like `builtins.filterSource`, except it will compose with itself,
70+ allowing you to chain multiple calls together without any
71+ intermediate copies being put in the nix store.
72+
73+ Example:
74+ lib.cleanSourceWith {
75+ filter = f;
76+ src = lib.cleanSourceWith {
77+ filter = g;
78+ src = ./.;
79+ };
80+ }
81+ # Succeeds!
82+
83+ builtins.filterSource f (builtins.filterSource g ./.)
84+ # Fails!
85+
86+ */
87+ cleanSourceWith =
88+ {
89+ # A path or cleanSourceWith result to filter and/or rename.
90+ src,
91+ # Optional with default value: constant true (include everything)
92+ # The function will be combined with the && operator such
93+ # that src.filter is called lazily.
94+ # For implementing a filter, see
95+ # https://nixos.org/nix/manual/#builtin-filterSource
96+ # Type: A function (path -> type -> bool)
97+ filter ? _path: _type: true,
98+ # Optional name to use as part of the store path.
99+ # This defaults to `src.name` or otherwise `"source"`.
100+ name ? null
101+ }:
86102 let
87103 orig = toSourceAttributes src;
88104 in fromSourceAttributes {
@@ -114,9 +130,11 @@ let
114130 satisfiesSubpathInvariant = src ? satisfiesSubpathInvariant && src.satisfiesSubpathInvariant;
115131 };
116132
117− # Filter sources by a list of regular expressions.
118− #
119− # E.g. `src = sourceByRegex ./my-subproject [".*\.py$" "^database.sql$"]`
133+ /*
134+ Filter sources by a list of regular expressions.
135+
136+ Example: src = sourceByRegex ./my-subproject [".*\.py$" "^database.sql$"]
137+ */
120138 sourceByRegex = src: regexes:
121139 let
122140 isFiltered = src ? _isLibCleanSourceWith;
@@ -151,8 +169,11 @@ let
151169
152170 pathIsGitRepo = path: (tryEval (commitIdFromGitRepo path)).success;
153171
154− # Get the commit id of a git repo
155− # Example: commitIdFromGitRepo <nixpkgs/.git>
172+ /*
173+ Get the commit id of a git repo.
174+
175+ Example: commitIdFromGitRepo <nixpkgs/.git>
176+ */
156177 commitIdFromGitRepo =
157178 let readCommitFromFile = file: path:
158179 let fileName = toString path + "/" + file;
lib/strings.nix+209−5
@@ -17,6 +17,7 @@ rec {
1717 head
1818 isInt
1919 isList
20+ isAttrs
2021 isString
2122 match
2223 parseDrvName
@@ -253,10 +254,7 @@ rec {
253254 => false
254255 */
255256 hasInfix = infix: content:
256− let
257− drop = x: substring 1 (stringLength x) x;
258− in hasPrefix infix content
259− || content != "" && hasInfix infix (drop content);
257+ builtins.match ".*${escapeRegex infix}.*" "${content}" != null;
260258
261259 /* Convert a string to a list of characters (i.e. singleton strings).
262260 This allows you to, e.g., map a function over each character. However,
@@ -327,6 +325,65 @@ rec {
327325 */
328326 escapeShellArgs = concatMapStringsSep " " escapeShellArg;
329327
328+ /* Test whether the given name is a valid POSIX shell variable name.
329+
330+ Type: string -> bool
331+
332+ Example:
333+ isValidPosixName "foo_bar000"
334+ => true
335+ isValidPosixName "0-bad.jpg"
336+ => false
337+ */
338+ isValidPosixName = name: match "[a-zA-Z_][a-zA-Z0-9_]*" name != null;
339+
340+ /* Translate a Nix value into a shell variable declaration, with proper escaping.
341+
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.
345+
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).
348+
349+ Type: string -> (string | listOf string | attrsOf string) -> string
350+
351+ Example:
352+ ''
353+ ${toShellVar "foo" "some string"}
354+ [[ "$foo" == "some string" ]]
355+ ''
356+ */
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}"
363+ ) value)
364+ })"
365+ else if isList value then
366+ "declare -a ${name}=(${escapeShellArgs value})"
367+ else
368+ "${name}=${escapeShellArg value}"
369+ );
370+
371+ /* Translate an attribute set into corresponding shell variable declarations
372+ using `toShellVar`.
373+
374+ Type: attrsOf (string | listOf string | attrsOf string) -> string
375+
376+ Example:
377+ let
378+ foo = "value";
379+ bar = foo;
380+ in ''
381+ ${toShellVars { inherit foo bar; }}
382+ [[ "$foo" == "$bar" ]]
383+ ''
384+ */
385+ toShellVars = vars: concatStringsSep "\n" (lib.mapAttrsToList toShellVar vars);
386+
330387 /* Turn a string into a Nix expression representing that string
331388
332389 Type: string -> string
@@ -362,6 +419,19 @@ rec {
362419 if match "[a-zA-Z_][a-zA-Z0-9_'-]*" s != null
363420 then s else escapeNixString s;
364421
422+ /* Escapes a string such that it is safe to include verbatim in an XML
423+ document.
424+
425+ Type: string -> string
426+
427+ Example:
428+ escapeXML ''"test" 'test' < & >''
429+ => "&quot;test&quot; &apos;test&apos; &lt; &amp; &gt;"
430+ */
431+ escapeXML = builtins.replaceStrings
432+ ["\"" "'" "<" ">" "&"]
433+ ["&quot;" "&apos;" "&lt;" "&gt;" "&amp;"];
434+
365435 # Obsolete - use replaceStrings instead.
366436 replaceChars = builtins.replaceStrings or (
367437 del: new: s:
@@ -743,7 +813,14 @@ rec {
743813 sanitizeDerivationName pkgs.hello
744814 => "-nix-store-2g75chlbpxlrqn15zlby2dfh8hr9qwbk-hello-2.10"
745815 */
746− sanitizeDerivationName = string: lib.pipe string [
816+ sanitizeDerivationName =
817+ let okRegex = match "[[:alnum:]+_?=-][[:alnum:]+._?=-]*";
818+ in
819+ string:
820+ # First detect the common case of already valid strings, to speed those up
821+ if stringLength string <= 207 && okRegex string != null
822+ then unsafeDiscardStringContext string
823+ else lib.pipe string [
747824 # Get rid of string context. This is safe under the assumption that the
748825 # resulting string is only used as a derivation name
749826 unsafeDiscardStringContext
@@ -761,4 +838,131 @@ rec {
761838 (x: if stringLength x == 0 then "unknown" else x)
762839 ];
763840
841+ /* Computes the Levenshtein distance between two strings.
842+ Complexity O(n*m) where n and m are the lengths of the strings.
843+ Algorithm adjusted from https://stackoverflow.com/a/9750974/6605742
844+
845+ Type: levenshtein :: string -> string -> int
846+
847+ Example:
848+ levenshtein "foo" "foo"
849+ => 0
850+ levenshtein "book" "hook"
851+ => 1
852+ levenshtein "hello" "Heyo"
853+ => 3
854+ */
855+ levenshtein = a: b: let
856+ # Two dimensional array with dimensions (stringLength a + 1, stringLength b + 1)
857+ arr = lib.genList (i:
858+ lib.genList (j:
859+ dist i j
860+ ) (stringLength b + 1)
861+ ) (stringLength a + 1);
862+ d = x: y: lib.elemAt (lib.elemAt arr x) y;
863+ dist = i: j:
864+ let c = if substring (i - 1) 1 a == substring (j - 1) 1 b
865+ then 0 else 1;
866+ in
867+ if j == 0 then i
868+ else if i == 0 then j
869+ else lib.min
870+ ( lib.min (d (i - 1) j + 1) (d i (j - 1) + 1))
871+ ( d (i - 1) (j - 1) + c );
872+ in d (stringLength a) (stringLength b);
873+
874+ /* Returns the length of the prefix common to both strings.
875+ */
876+ commonPrefixLength = a: b:
877+ let
878+ m = lib.min (stringLength a) (stringLength b);
879+ go = i: if i >= m then m else if substring i 1 a == substring i 1 b then go (i + 1) else i;
880+ in go 0;
881+
882+ /* Returns the length of the suffix common to both strings.
883+ */
884+ commonSuffixLength = a: b:
885+ let
886+ m = lib.min (stringLength a) (stringLength b);
887+ go = i: if i >= m then m else if substring (stringLength a - i - 1) 1 a == substring (stringLength b - i - 1) 1 b then go (i + 1) else i;
888+ in go 0;
889+
890+ /* Returns whether the levenshtein distance between two strings is at most some value
891+ Complexity is O(min(n,m)) for k <= 2 and O(n*m) otherwise
892+
893+ Type: levenshteinAtMost :: int -> string -> string -> bool
894+
895+ Example:
896+ levenshteinAtMost 0 "foo" "foo"
897+ => true
898+ levenshteinAtMost 1 "foo" "boa"
899+ => false
900+ levenshteinAtMost 2 "foo" "boa"
901+ => true
902+ levenshteinAtMost 2 "This is a sentence" "this is a sentense."
903+ => false
904+ levenshteinAtMost 3 "This is a sentence" "this is a sentense."
905+ => true
906+
907+ */
908+ levenshteinAtMost = let
909+ infixDifferAtMost1 = x: y: stringLength x <= 1 && stringLength y <= 1;
910+
911+ # This function takes two strings stripped by their common pre and suffix,
912+ # and returns whether they differ by at most two by Levenshtein distance.
913+ # Because of this stripping, if they do indeed differ by at most two edits,
914+ # we know that those edits were (if at all) done at the start or the end,
915+ # while the middle has to have stayed the same. This fact is used in the
916+ # implementation.
917+ infixDifferAtMost2 = x: y:
918+ let
919+ xlen = stringLength x;
920+ ylen = stringLength y;
921+ # This function is only called with |x| >= |y| and |x| - |y| <= 2, so
922+ # diff is one of 0, 1 or 2
923+ diff = xlen - ylen;
924+
925+ # Infix of x and y, stripped by the left and right most character
926+ xinfix = substring 1 (xlen - 2) x;
927+ yinfix = substring 1 (ylen - 2) y;
928+
929+ # x and y but a character deleted at the left or right
930+ xdelr = substring 0 (xlen - 1) x;
931+ xdell = substring 1 (xlen - 1) x;
932+ ydelr = substring 0 (ylen - 1) y;
933+ ydell = substring 1 (ylen - 1) y;
934+ in
935+ # A length difference of 2 can only be gotten with 2 delete edits,
936+ # which have to have happened at the start and end of x
937+ # Example: "abcdef" -> "bcde"
938+ if diff == 2 then xinfix == y
939+ # A length difference of 1 can only be gotten with a deletion on the
940+ # right and a replacement on the left or vice versa.
941+ # Example: "abcdef" -> "bcdez" or "zbcde"
942+ else if diff == 1 then xinfix == ydelr || xinfix == ydell
943+ # No length difference can either happen through replacements on both
944+ # sides, or a deletion on the left and an insertion on the right or
945+ # vice versa
946+ # Example: "abcdef" -> "zbcdez" or "bcdefz" or "zabcde"
947+ else xinfix == yinfix || xdelr == ydell || xdell == ydelr;
948+
949+ in k: if k <= 0 then a: b: a == b else
950+ let f = a: b:
951+ let
952+ alen = stringLength a;
953+ blen = stringLength b;
954+ prelen = commonPrefixLength a b;
955+ suflen = commonSuffixLength a b;
956+ presuflen = prelen + suflen;
957+ ainfix = substring prelen (alen - presuflen) a;
958+ binfix = substring prelen (blen - presuflen) b;
959+ in
960+ # Make a be the bigger string
961+ if alen < blen then f b a
962+ # If a has over k more characters than b, even with k deletes on a, b can't be reached
963+ else if alen - blen > k then false
964+ else if k == 1 then infixDifferAtMost1 ainfix binfix
965+ else if k == 2 then infixDifferAtMost2 ainfix binfix
966+ else levenshtein ainfix binfix <= k;
967+ in f;
764968}
lib/systems/default.nix+4−1
@@ -8,6 +8,7 @@ rec {
88 platforms = import ./platforms.nix { inherit lib; };
99 examples = import ./examples.nix { inherit lib; };
1010 architectures = import ./architectures.nix { inherit lib; };
11+ supported = import ./supported.nix { inherit lib; };
1112
1213 # Elaborate a `localSystem` or `crossSystem` so that it contains everything
1314 # necessary.
@@ -104,9 +105,11 @@ rec {
104105 else if final.isAarch64 then "arm64"
105106 else if final.isx86_32 then "i386"
106107 else if final.isx86_64 then "x86_64"
107− else if final.isMips then "mips"
108+ else if final.isMips32 then "mips"
109+ else if final.isMips64 then "mips" # linux kernel does not distinguish mips32/mips64
108110 else if final.isPower then "powerpc"
109111 else if final.isRiscV then "riscv"
112+ else if final.isS390 then "s390"
110113 else final.parsed.cpu.name;
111114
112115 qemuArch =
lib/systems/doubles.nix+13−6
@@ -26,9 +26,9 @@ let
2626
2727 # Linux
2828 "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux"
29− "armv7l-linux" "i686-linux" "m68k-linux" "mipsel-linux"
29+ "armv7l-linux" "i686-linux" "m68k-linux" "mipsel-linux" "mips64el-linux"
3030 "powerpc64-linux" "powerpc64le-linux" "riscv32-linux"
31− "riscv64-linux" "s390-linux" "x86_64-linux"
31+ "riscv64-linux" "s390-linux" "s390x-linux" "x86_64-linux"
3232
3333 # MMIXware
3434 "mmix-mmixware"
@@ -39,9 +39,10 @@ let
3939 "riscv32-netbsd" "riscv64-netbsd" "x86_64-netbsd"
4040
4141 # none
42− "aarch64-none" "arm-none" "armv6l-none" "avr-none" "i686-none"
43− "msp430-none" "or1k-none" "m68k-none" "powerpc-none"
44− "riscv32-none" "riscv64-none" "s390-none" "vc4-none" "x86_64-none"
42+ "aarch64_be-none" "aarch64-none" "arm-none" "armv6l-none" "avr-none" "i686-none"
43+ "msp430-none" "or1k-none" "m68k-none" "powerpc-none" "powerpcle-none"
44+ "riscv32-none" "riscv64-none" "s390-none" "s390x-none" "vc4-none"
45+ "x86_64-none"
4546
4647 # OpenBSD
4748 "i686-openbsd" "x86_64-openbsd"
@@ -73,6 +74,8 @@ in {
7374 mips = filterDoubles predicates.isMips;
7475 mmix = filterDoubles predicates.isMmix;
7576 riscv = filterDoubles predicates.isRiscV;
77+ riscv32 = filterDoubles predicates.isRiscV32;
78+ riscv64 = filterDoubles predicates.isRiscV64;
7679 vc4 = filterDoubles predicates.isVc4;
7780 or1k = filterDoubles predicates.isOr1k;
7881 m68k = filterDoubles predicates.isM68k;
@@ -86,7 +89,11 @@ in {
8689 darwin = filterDoubles predicates.isDarwin;
8790 freebsd = filterDoubles predicates.isFreeBSD;
8891 # Should be better, but MinGW is unclear.
89− gnu = filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnu; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabi; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabihf; });
92+ gnu = filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnu; })
93+ ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabi; })
94+ ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabihf; })
95+ ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnuabin32; })
96+ ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnuabi64; });
9097 illumos = filterDoubles predicates.isSunOS;
9198 linux = filterDoubles predicates.isLinux;
9299 netbsd = filterDoubles predicates.isNetBSD;
lib/systems/examples.nix+31
@@ -93,6 +93,26 @@ rec {
9393 config = "mipsel-unknown-linux-gnu";
9494 } // platforms.fuloong2f_n32;
9595
96+ # MIPS ABI table transcribed from here: https://wiki.debian.org/Multiarch/Tuples
97+
98+ # can execute on 32bit chip
99+ mips-linux-gnu = { config = "mips-linux-gnu"; } // platforms.gcc_mips32r2_o32;
100+ mipsel-linux-gnu = { config = "mipsel-linux-gnu"; } // platforms.gcc_mips32r2_o32;
101+ mipsisa32r6-linux-gnu = { config = "mipsisa32r6-linux-gnu"; } // platforms.gcc_mips32r6_o32;
102+ mipsisa32r6el-linux-gnu = { config = "mipsisa32r6el-linux-gnu"; } // platforms.gcc_mips32r6_o32;
103+
104+ # require 64bit chip (for more registers, 64-bit floating point, 64-bit "long long") but use 32bit pointers
105+ mips64-linux-gnuabin32 = { config = "mips64-linux-gnuabin32"; } // platforms.gcc_mips64r2_n32;
106+ mips64el-linux-gnuabin32 = { config = "mips64el-linux-gnuabin32"; } // platforms.gcc_mips64r2_n32;
107+ mipsisa64r6-linux-gnuabin32 = { config = "mipsisa64r6-linux-gnuabin32"; } // platforms.gcc_mips64r6_n32;
108+ mipsisa64r6el-linux-gnuabin32 = { config = "mipsisa64r6el-linux-gnuabin32"; } // platforms.gcc_mips64r6_n32;
109+
110+ # 64bit pointers
111+ mips64-linux-gnuabi64 = { config = "mips64-linux-gnuabi64"; } // platforms.gcc_mips64r2_64;
112+ mips64el-linux-gnuabi64 = { config = "mips64el-linux-gnuabi64"; } // platforms.gcc_mips64r2_64;
113+ mipsisa64r6-linux-gnuabi64 = { config = "mipsisa64r6-linux-gnuabi64"; } // platforms.gcc_mips64r6_64;
114+ mipsisa64r6el-linux-gnuabi64 = { config = "mipsisa64r6el-linux-gnuabi64"; } // platforms.gcc_mips64r6_64;
115+
96116 muslpi = raspberryPi // {
97117 config = "armv6l-unknown-linux-musleabihf";
98118 };
@@ -152,6 +172,10 @@ rec {
152172 config = "s390-unknown-linux-gnu";
153173 };
154174
175+ s390x = {
176+ config = "s390x-unknown-linux-gnu";
177+ };
178+
155179 arm-embedded = {
156180 config = "arm-none-eabi";
157181 libc = "newlib";
@@ -254,6 +278,12 @@ rec {
254278 platform = {};
255279 };
256280
281+ x86_64-darwin = {
282+ config = "x86_64-apple-darwin";
283+ xcodePlatform = "MacOSX";
284+ platform = {};
285+ };
286+
257287 #
258288 # Windows
259289 #
@@ -280,6 +310,7 @@ rec {
280310 libc = "nblibc";
281311 };
282312
313+ # this is broken and never worked fully
283314 x86_64-netbsd-llvm = {
284315 config = "x86_64-unknown-netbsd";
285316 libc = "nblibc";
lib/systems/inspect.nix+8−1
@@ -13,12 +13,19 @@ rec {
1313 isx86_64 = { cpu = { family = "x86"; bits = 64; }; };
1414 isPowerPC = { cpu = cpuTypes.powerpc; };
1515 isPower = { cpu = { family = "power"; }; };
16+ isPower64 = { cpu = { family = "power"; bits = 64; }; };
1617 isx86 = { cpu = { family = "x86"; }; };
1718 isAarch32 = { cpu = { family = "arm"; bits = 32; }; };
1819 isAarch64 = { cpu = { family = "arm"; bits = 64; }; };
1920 isMips = { cpu = { family = "mips"; }; };
21+ isMips32 = { cpu = { family = "mips"; bits = 32; }; };
22+ isMips64 = { cpu = { family = "mips"; bits = 64; }; };
23+ isMips64n32 = { cpu = { family = "mips"; bits = 64; }; abi = { abi = "n32"; }; };
24+ isMips64n64 = { cpu = { family = "mips"; bits = 64; }; abi = { abi = "64"; }; };
2025 isMmix = { cpu = { family = "mmix"; }; };
2126 isRiscV = { cpu = { family = "riscv"; }; };
27+ isRiscV32 = { cpu = { family = "riscv"; bits = 32; }; };
28+ isRiscV64 = { cpu = { family = "riscv"; bits = 64; }; };
2229 isSparc = { cpu = { family = "sparc"; }; };
2330 isWasm = { cpu = { family = "wasm"; }; };
2431 isMsp430 = { cpu = { family = "msp430"; }; };
@@ -57,7 +64,7 @@ rec {
5764
5865 isAndroid = [ { abi = abis.android; } { abi = abis.androideabi; } ];
5966 isGnu = with abis; map (a: { abi = a; }) [ gnuabi64 gnu gnueabi gnueabihf ];
60− isMusl = with abis; map (a: { abi = a; }) [ musl musleabi musleabihf ];
67+ isMusl = with abis; map (a: { abi = a; }) [ musl musleabi musleabihf muslabin32 muslabi64 ];
6168 isUClibc = with abis; map (a: { abi = a; }) [ uclibc uclibceabi uclibceabihf ];
6269
6370 isEfi = map (family: { cpu.family = family; })
lib/systems/parse.nix+10−2
@@ -106,6 +106,7 @@ rec {
106106 riscv64 = { bits = 64; significantByte = littleEndian; family = "riscv"; };
107107
108108 s390 = { bits = 32; significantByte = bigEndian; family = "s390"; };
109+ s390x = { bits = 64; significantByte = bigEndian; family = "s390"; };
109110
110111 sparc = { bits = 32; significantByte = bigEndian; family = "sparc"; };
111112 sparc64 = { bits = 64; significantByte = bigEndian; family = "sparc"; };
@@ -358,13 +359,20 @@ rec {
358359 ];
359360 };
360361 gnuabi64 = { abi = "64"; };
362+ muslabi64 = { abi = "64"; };
363+
364+ # NOTE: abi=n32 requires a 64-bit MIPS chip! That is not a typo.
365+ # It is basically the 64-bit abi with 32-bit pointers. Details:
366+ # https://www.linux-mips.org/pub/linux/mips/doc/ABI/MIPS-N32-ABI-Handbook.pdf
367+ gnuabin32 = { abi = "n32"; };
368+ muslabin32 = { abi = "n32"; };
361369
362370 musleabi = { float = "soft"; };
363371 musleabihf = { float = "hard"; };
364372 musl = {};
365373
366− uclibceabihf = { float = "soft"; };
367− uclibceabi = { float = "hard"; };
374+ uclibceabi = { float = "soft"; };
375+ uclibceabihf = { float = "hard"; };
368376 uclibc = {};
369377
370378 unknown = {};
lib/systems/platforms.nix+53−4
@@ -1,3 +1,10 @@
1+# Note: lib/systems/default.nix takes care of producing valid,
2+# fully-formed "platform" values (e.g. hostPlatform, buildPlatform,
3+# targetPlatform, etc) containing at least the minimal set of attrs
4+# required (see types.parsedPlatform in lib/systems/parse.nix). This
5+# file takes an already-valid platform and further elaborates it with
6+# optional fields; currently these are: linux-kernel, gcc, and rustc.
7+
18{ lib }:
29rec {
310 pc = {
@@ -20,15 +27,17 @@ rec {
2027 name = "PowerNV";
2128
2229 baseConfig = "powernv_defconfig";
23− target = "zImage";
24− installTarget = "install";
25− file = "vmlinux";
30+ target = "vmlinux";
2631 autoModules = true;
2732 # avoid driver/FS trouble arising from unusual page size
2833 extraConfig = ''
2934 PPC_64K_PAGES n
3035 PPC_4K_PAGES y
3136 IPV6 y
37+
38+ ATA_BMDMA y
39+ ATA_SFF y
40+ VIRTIO_MENU y
3241 '';
3342 };
3443 };
@@ -480,6 +489,43 @@ rec {
480489 };
481490 };
482491
492+ # can execute on 32bit chip
493+ gcc_mips32r2_o32 = { gcc = { arch = "mips32r2"; abi = "o32"; }; };
494+ gcc_mips32r6_o32 = { gcc = { arch = "mips32r6"; abi = "o32"; }; };
495+ gcc_mips64r2_n32 = { gcc = { arch = "mips64r2"; abi = "n32"; }; };
496+ gcc_mips64r6_n32 = { gcc = { arch = "mips64r6"; abi = "n32"; }; };
497+ gcc_mips64r2_64 = { gcc = { arch = "mips64r2"; abi = "64"; }; };
498+ gcc_mips64r6_64 = { gcc = { arch = "mips64r6"; abi = "64"; }; };
499+
500+ # based on:
501+ # https://www.mail-archive.com/qemu-discuss@nongnu.org/msg05179.html
502+ # https://gmplib.org/~tege/qemu.html#mips64-debian
503+ mips64el-qemu-linux-gnuabi64 = {
504+ linux-kernel = {
505+ name = "mips64el";
506+ baseConfig = "64r2el_defconfig";
507+ target = "vmlinuz";
508+ autoModules = false;
509+ DTB = true;
510+ # for qemu 9p passthrough filesystem
511+ extraConfig = ''
512+ MIPS_MALTA y
513+ PAGE_SIZE_4KB y
514+ CPU_LITTLE_ENDIAN y
515+ CPU_MIPS64_R2 y
516+ 64BIT y
517+ CPU_MIPS64_R2 y
518+
519+ NET_9P y
520+ NET_9P_VIRTIO y
521+ 9P_FS y
522+ 9P_FS_POSIX_ACL y
523+ PCI y
524+ VIRTIO_PCI y
525+ '';
526+ };
527+ };
528+
483529 ##
484530 ## Other
485531 ##
@@ -497,6 +543,9 @@ rec {
497543 };
498544 };
499545
546+ # This function takes a minimally-valid "platform" and returns an
547+ # attrset containing zero or more additional attrs which should be
548+ # included in the platform in order to further elaborate it.
500549 select = platform:
501550 # x86
502551 /**/ if platform.isx86 then pc
@@ -519,5 +568,5 @@ rec {
519568
520569 else if platform.parsed.cpu == lib.systems.parse.cpuTypes.powerpc64le then powernv
521570
522− else pc;
571+ else { };
523572}
lib/systems/supported.nixnew file+26
@@ -0,0 +1,26 @@
1+# Supported systems according to RFC0046's definition.
2+#
3+# https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md
4+{ lib }:
5+rec {
6+ # List of systems that are built by Hydra.
7+ hydra = tier1 ++ tier2 ++ tier3 ++ [
8+ "aarch64-darwin"
9+ ];
10+
11+ tier1 = [
12+ "x86_64-linux"
13+ ];
14+
15+ tier2 = [
16+ "aarch64-linux"
17+ "x86_64-darwin"
18+ ];
19+
20+ tier3 = [
21+ "armv6l-linux"
22+ "armv7l-linux"
23+ "i686-linux"
24+ "mipsel-linux"
25+ ];
26+}
lib/tests/flakes/subflakeTest/flake.nixnew file+8
@@ -0,0 +1,8 @@
1+{
2+ outputs = { self, subflake, callLocklessFlake }: rec {
3+ x = (callLocklessFlake {
4+ path = subflake;
5+ inputs = {};
6+ }).subflakeOutput;
7+ };
8+}
lib/tests/flakes/subflakeTest/subflake/flake.nixnew file+5
@@ -0,0 +1,5 @@
1+{
2+ outputs = { self }: {
3+ subflakeOutput = 1;
4+ };
5+}
lib/tests/maintainers.nix+4
@@ -16,6 +16,10 @@ let
1616 email = lib.mkOption {
1717 type = types.str;
1818 };
19+ matrix = lib.mkOption {
20+ type = types.nullOr types.str;
21+ default = null;
22+ };
1923 github = lib.mkOption {
2024 type = types.nullOr types.str;
2125 default = null;
lib/tests/misc.nix+454−2
@@ -22,6 +22,15 @@ in
2222
2323runTests {
2424
25+# FLAKES
26+
27+ testCallLocklessFlake = {
28+ expr = callLocklessFlake {
29+ path = ./flakes/subflakeTest;
30+ inputs = { subflake = ./flakes/subflakeTest/subflake; inherit callLocklessFlake; };
31+ };
32+ expected = { x = 1; outPath = ./flakes/subflakeTest; };
33+ };
2534
2635# TRIVIAL
2736
@@ -246,6 +255,61 @@ runTests {
246255 };
247256 };
248257
258+ testEscapeXML = {
259+ expr = escapeXML ''"test" 'test' < & >'';
260+ expected = "&quot;test&quot; &apos;test&apos; &lt; &amp; &gt;";
261+ };
262+
263+ testToShellVars = {
264+ expr = ''
265+ ${toShellVars {
266+ STRing01 = "just a 'string'";
267+ _array_ = [ "with" "more strings" ];
268+ assoc."with some" = ''
269+ strings
270+ possibly newlines
271+ '';
272+ }}
273+ '';
274+ expected = ''
275+ STRing01='just a '\'''string'\''''
276+ declare -a _array_=('with' 'more strings')
277+ declare -A assoc=(['with some']='strings
278+ possibly newlines
279+ ')
280+ '';
281+ };
282+
283+ testHasInfixFalse = {
284+ expr = hasInfix "c" "abde";
285+ expected = false;
286+ };
287+
288+ testHasInfixTrue = {
289+ expr = hasInfix "c" "abcde";
290+ expected = true;
291+ };
292+
293+ testHasInfixDerivation = {
294+ expr = hasInfix "hello" (import ../.. { system = "x86_64-linux"; }).hello;
295+ expected = true;
296+ };
297+
298+ testHasInfixPath = {
299+ expr = hasInfix "tests" ./.;
300+ expected = true;
301+ };
302+
303+ testHasInfixPathStoreDir = {
304+ expr = hasInfix builtins.storeDir ./.;
305+ expected = true;
306+ };
307+
308+ testHasInfixToString = {
309+ expr = hasInfix "a" { __toString = _: "a"; };
310+ expected = true;
311+ };
312+
249313# LISTS
250314
251315 testFilter = {
@@ -466,6 +530,66 @@ runTests {
466530 '';
467531 };
468532
533+ testToINIWithGlobalSectionEmpty = {
534+ expr = generators.toINIWithGlobalSection {} {
535+ globalSection = {
536+ };
537+ sections = {
538+ };
539+ };
540+ expected = ''
541+ '';
542+ };
543+
544+ testToINIWithGlobalSectionGlobalEmptyIsTheSameAsToINI =
545+ let
546+ sections = {
547+ "section 1" = {
548+ attribute1 = 5;
549+ x = "Me-se JarJar Binx";
550+ };
551+ "foo" = {
552+ "he\\h=he" = "this is okay";
553+ };
554+ };
555+ in {
556+ expr =
557+ generators.toINIWithGlobalSection {} {
558+ globalSection = {};
559+ sections = sections;
560+ };
561+ expected = generators.toINI {} sections;
562+ };
563+
564+ testToINIWithGlobalSectionFull = {
565+ expr = generators.toINIWithGlobalSection {} {
566+ globalSection = {
567+ foo = "bar";
568+ test = false;
569+ };
570+ sections = {
571+ "section 1" = {
572+ attribute1 = 5;
573+ x = "Me-se JarJar Binx";
574+ };
575+ "foo" = {
576+ "he\\h=he" = "this is okay";
577+ };
578+ };
579+ };
580+ expected = ''
581+ foo=bar
582+ test=false
583+
584+ [foo]
585+ he\h\=he=this is okay
586+
587+ [section 1]
588+ attribute1=5
589+ x=Me-se JarJar Binx
590+ '';
591+ };
592+
469593 /* right now only invocation check */
470594 testToJSONSimple =
471595 let val = {
@@ -491,7 +615,7 @@ runTests {
491615
492616 testToPretty =
493617 let
494− deriv = derivation { name = "test"; builder = "/bin/sh"; system = builtins.currentSystem; };
618+ deriv = derivation { name = "test"; builder = "/bin/sh"; system = "aarch64-linux"; };
495619 in {
496620 expr = mapAttrs (const (generators.toPretty { multiline = false; })) rec {
497621 int = 42;
@@ -529,6 +653,25 @@ runTests {
529653 };
530654 };
531655
656+ testToPrettyLimit =
657+ let
658+ a.b = 1;
659+ a.c = a;
660+ in {
661+ expr = generators.toPretty { } (generators.withRecursion { throwOnDepthLimit = false; depthLimit = 2; } a);
662+ expected = "{\n b = 1;\n c = {\n b = \"<unevaluated>\";\n c = {\n b = \"<unevaluated>\";\n c = \"<unevaluated>\";\n };\n };\n}";
663+ };
664+
665+ testToPrettyLimitThrow =
666+ let
667+ a.b = 1;
668+ a.c = a;
669+ in {
670+ expr = (builtins.tryEval
671+ (generators.toPretty { } (generators.withRecursion { depthLimit = 2; } a))).success;
672+ expected = false;
673+ };
674+
532675 testToPrettyMultiline = {
533676 expr = mapAttrs (const (generators.toPretty { })) rec {
534677 list = [ 3 4 [ false ] ];
@@ -625,6 +768,11 @@ runTests {
625768 expected = "foo";
626769 };
627770
771+ testSanitizeDerivationNameUnicode = testSanitizeDerivationName {
772+ name = "fö";
773+ expected = "f-";
774+ };
775+
628776 testSanitizeDerivationNameAscii = testSanitizeDerivationName {
629777 name = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
630778 expected = "-+--.-0123456789-=-?-ABCDEFGHIJKLMNOPQRSTUVWXYZ-_-abcdefghijklmnopqrstuvwxyz-";
@@ -667,7 +815,7 @@ runTests {
667815
668816 locs = filter (o: ! o.internal) (optionAttrSetToDocList options);
669817 in map (o: o.loc) locs;
670− expected = [ [ "foo" ] [ "foo" "<name>" "bar" ] [ "foo" "bar" ] ];
818+ expected = [ [ "_module" "args" ] [ "foo" ] [ "foo" "<name>" "bar" ] [ "foo" "bar" ] ];
671819 };
672820
673821 testCartesianProductOfEmptySet = {
@@ -737,4 +885,308 @@ runTests {
737885 { a = 3; b = 30; c = 300; }
738886 ];
739887 };
888+
889+ # The example from the showAttrPath documentation
890+ testShowAttrPathExample = {
891+ expr = showAttrPath [ "foo" "10" "bar" ];
892+ expected = "foo.\"10\".bar";
893+ };
894+
895+ testShowAttrPathEmpty = {
896+ expr = showAttrPath [];
897+ expected = "<root attribute path>";
898+ };
899+
900+ testShowAttrPathVarious = {
901+ expr = showAttrPath [
902+ "."
903+ "foo"
904+ "2"
905+ "a2-b"
906+ "_bc'de"
907+ ];
908+ expected = ''".".foo."2".a2-b._bc'de'';
909+ };
910+
911+ testGroupBy = {
912+ expr = groupBy (n: toString (mod n 5)) (range 0 16);
913+ expected = {
914+ "0" = [ 0 5 10 15 ];
915+ "1" = [ 1 6 11 16 ];
916+ "2" = [ 2 7 12 ];
917+ "3" = [ 3 8 13 ];
918+ "4" = [ 4 9 14 ];
919+ };
920+ };
921+
922+ testGroupBy' = {
923+ expr = groupBy' builtins.add 0 (x: boolToString (x > 2)) [ 5 1 2 3 4 ];
924+ expected = { false = 3; true = 12; };
925+ };
926+
927+ # The example from the updateManyAttrsByPath documentation
928+ testUpdateManyAttrsByPathExample = {
929+ expr = updateManyAttrsByPath [
930+ {
931+ path = [ "a" "b" ];
932+ update = old: { d = old.c; };
933+ }
934+ {
935+ path = [ "a" "b" "c" ];
936+ update = old: old + 1;
937+ }
938+ {
939+ path = [ "x" "y" ];
940+ update = old: "xy";
941+ }
942+ ] { a.b.c = 0; };
943+ expected = { a = { b = { d = 1; }; }; x = { y = "xy"; }; };
944+ };
945+
946+ # If there are no updates, the value is passed through
947+ testUpdateManyAttrsByPathNone = {
948+ expr = updateManyAttrsByPath [] "something";
949+ expected = "something";
950+ };
951+
952+ # A single update to the root path is just like applying the function directly
953+ testUpdateManyAttrsByPathSingleIncrement = {
954+ expr = updateManyAttrsByPath [
955+ {
956+ path = [ ];
957+ update = old: old + 1;
958+ }
959+ ] 0;
960+ expected = 1;
961+ };
962+
963+ # Multiple updates can be applied are done in order
964+ testUpdateManyAttrsByPathMultipleIncrements = {
965+ expr = updateManyAttrsByPath [
966+ {
967+ path = [ ];
968+ update = old: old + "a";
969+ }
970+ {
971+ path = [ ];
972+ update = old: old + "b";
973+ }
974+ {
975+ path = [ ];
976+ update = old: old + "c";
977+ }
978+ ] "";
979+ expected = "abc";
980+ };
981+
982+ # If an update doesn't use the value, all previous updates are not evaluated
983+ testUpdateManyAttrsByPathLazy = {
984+ expr = updateManyAttrsByPath [
985+ {
986+ path = [ ];
987+ update = old: old + throw "nope";
988+ }
989+ {
990+ path = [ ];
991+ update = old: "untainted";
992+ }
993+ ] (throw "start");
994+ expected = "untainted";
995+ };
996+
997+ # Deeply nested attributes can be updated without affecting others
998+ testUpdateManyAttrsByPathDeep = {
999+ expr = updateManyAttrsByPath [
1000+ {
1001+ path = [ "a" "b" "c" ];
1002+ update = old: old + 1;
1003+ }
1004+ ] {
1005+ a.b.c = 0;
1006+
1007+ a.b.z = 0;
1008+ a.y.z = 0;
1009+ x.y.z = 0;
1010+ };
1011+ expected = {
1012+ a.b.c = 1;
1013+
1014+ a.b.z = 0;
1015+ a.y.z = 0;
1016+ x.y.z = 0;
1017+ };
1018+ };
1019+
1020+ # Nested attributes are updated first
1021+ testUpdateManyAttrsByPathNestedBeforehand = {
1022+ expr = updateManyAttrsByPath [
1023+ {
1024+ path = [ "a" ];
1025+ update = old: old // { x = old.b; };
1026+ }
1027+ {
1028+ path = [ "a" "b" ];
1029+ update = old: old + 1;
1030+ }
1031+ ] {
1032+ a.b = 0;
1033+ };
1034+ expected = {
1035+ a.b = 1;
1036+ a.x = 1;
1037+ };
1038+ };
1039+
1040+ ## Levenshtein distance functions and co.
1041+ testCommonPrefixLengthEmpty = {
1042+ expr = strings.commonPrefixLength "" "hello";
1043+ expected = 0;
1044+ };
1045+
1046+ testCommonPrefixLengthSame = {
1047+ expr = strings.commonPrefixLength "hello" "hello";
1048+ expected = 5;
1049+ };
1050+
1051+ testCommonPrefixLengthDiffering = {
1052+ expr = strings.commonPrefixLength "hello" "hey";
1053+ expected = 2;
1054+ };
1055+
1056+ testCommonSuffixLengthEmpty = {
1057+ expr = strings.commonSuffixLength "" "hello";
1058+ expected = 0;
1059+ };
1060+
1061+ testCommonSuffixLengthSame = {
1062+ expr = strings.commonSuffixLength "hello" "hello";
1063+ expected = 5;
1064+ };
1065+
1066+ testCommonSuffixLengthDiffering = {
1067+ expr = strings.commonSuffixLength "test" "rest";
1068+ expected = 3;
1069+ };
1070+
1071+ testLevenshteinEmpty = {
1072+ expr = strings.levenshtein "" "";
1073+ expected = 0;
1074+ };
1075+
1076+ testLevenshteinOnlyAdd = {
1077+ expr = strings.levenshtein "" "hello there";
1078+ expected = 11;
1079+ };
1080+
1081+ testLevenshteinOnlyRemove = {
1082+ expr = strings.levenshtein "hello there" "";
1083+ expected = 11;
1084+ };
1085+
1086+ testLevenshteinOnlyTransform = {
1087+ expr = strings.levenshtein "abcdef" "ghijkl";
1088+ expected = 6;
1089+ };
1090+
1091+ testLevenshteinMixed = {
1092+ expr = strings.levenshtein "kitchen" "sitting";
1093+ expected = 5;
1094+ };
1095+
1096+ testLevenshteinAtMostZeroFalse = {
1097+ expr = strings.levenshteinAtMost 0 "foo" "boo";
1098+ expected = false;
1099+ };
1100+
1101+ testLevenshteinAtMostZeroTrue = {
1102+ expr = strings.levenshteinAtMost 0 "foo" "foo";
1103+ expected = true;
1104+ };
1105+
1106+ testLevenshteinAtMostOneFalse = {
1107+ expr = strings.levenshteinAtMost 1 "car" "ct";
1108+ expected = false;
1109+ };
1110+
1111+ testLevenshteinAtMostOneTrue = {
1112+ expr = strings.levenshteinAtMost 1 "car" "cr";
1113+ expected = true;
1114+ };
1115+
1116+ # We test levenshteinAtMost 2 particularly well because it uses a complicated
1117+ # implementation
1118+ testLevenshteinAtMostTwoIsEmpty = {
1119+ expr = strings.levenshteinAtMost 2 "" "";
1120+ expected = true;
1121+ };
1122+
1123+ testLevenshteinAtMostTwoIsZero = {
1124+ expr = strings.levenshteinAtMost 2 "abcdef" "abcdef";
1125+ expected = true;
1126+ };
1127+
1128+ testLevenshteinAtMostTwoIsOne = {
1129+ expr = strings.levenshteinAtMost 2 "abcdef" "abddef";
1130+ expected = true;
1131+ };
1132+
1133+ testLevenshteinAtMostTwoDiff0False = {
1134+ expr = strings.levenshteinAtMost 2 "abcdef" "aczyef";
1135+ expected = false;
1136+ };
1137+
1138+ testLevenshteinAtMostTwoDiff0Outer = {
1139+ expr = strings.levenshteinAtMost 2 "abcdef" "zbcdez";
1140+ expected = true;
1141+ };
1142+
1143+ testLevenshteinAtMostTwoDiff0DelLeft = {
1144+ expr = strings.levenshteinAtMost 2 "abcdef" "bcdefz";
1145+ expected = true;
1146+ };
1147+
1148+ testLevenshteinAtMostTwoDiff0DelRight = {
1149+ expr = strings.levenshteinAtMost 2 "abcdef" "zabcde";
1150+ expected = true;
1151+ };
1152+
1153+ testLevenshteinAtMostTwoDiff1False = {
1154+ expr = strings.levenshteinAtMost 2 "abcdef" "bddez";
1155+ expected = false;
1156+ };
1157+
1158+ testLevenshteinAtMostTwoDiff1DelLeft = {
1159+ expr = strings.levenshteinAtMost 2 "abcdef" "bcdez";
1160+ expected = true;
1161+ };
1162+
1163+ testLevenshteinAtMostTwoDiff1DelRight = {
1164+ expr = strings.levenshteinAtMost 2 "abcdef" "zbcde";
1165+ expected = true;
1166+ };
1167+
1168+ testLevenshteinAtMostTwoDiff2False = {
1169+ expr = strings.levenshteinAtMost 2 "hello" "hxo";
1170+ expected = false;
1171+ };
1172+
1173+ testLevenshteinAtMostTwoDiff2True = {
1174+ expr = strings.levenshteinAtMost 2 "hello" "heo";
1175+ expected = true;
1176+ };
1177+
1178+ testLevenshteinAtMostTwoDiff3 = {
1179+ expr = strings.levenshteinAtMost 2 "hello" "ho";
1180+ expected = false;
1181+ };
1182+
1183+ testLevenshteinAtMostThreeFalse = {
1184+ expr = strings.levenshteinAtMost 3 "hello" "Holla!";
1185+ expected = false;
1186+ };
1187+
1188+ testLevenshteinAtMostThreeTrue = {
1189+ expr = strings.levenshteinAtMost 3 "hello" "Holla";
1190+ expected = true;
1191+ };
7401192}
lib/tests/modules.sh+180−121
@@ -1,8 +1,11 @@
1−#!/bin/sh
1+#!/usr/bin/env bash
22#
33# This script is used to test that the module system is working as expected.
44# By default it test the version of nixpkgs which is defined in the NIX_PATH.
55
6+set -o errexit -o noclobber -o nounset -o pipefail
7+shopt -s failglob inherit_errexit
8+
69# https://stackoverflow.com/a/246128/6605742
710DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
811
@@ -13,101 +16,103 @@ fail=0
1316
1417evalConfig() {
1518 local attr=$1
16− shift;
17− local script="import ./default.nix { modules = [ $@ ];}"
19+ shift
20+ local script="import ./default.nix { modules = [ $* ];}"
1821 nix-instantiate --timeout 1 -E "$script" -A "$attr" --eval-only --show-trace --read-write-mode
1922}
2023
2124reportFailure() {
2225 local attr=$1
23− shift;
24− local script="import ./default.nix { modules = [ $@ ];}"
26+ shift
27+ local script="import ./default.nix { modules = [ $* ];}"
2528 echo 2>&1 "$ nix-instantiate -E '$script' -A '$attr' --eval-only"
26− evalConfig "$attr" "$@"
27− fail=$((fail + 1))
29+ evalConfig "$attr" "$@" || true
30+ ((++fail))
2831}
2932
3033checkConfigOutput() {
3134 local outputContains=$1
32− shift;
35+ shift
3336 if evalConfig "$@" 2>/dev/null | grep --silent "$outputContains" ; then
34− pass=$((pass + 1))
35− return 0;
37+ ((++pass))
3638 else
3739 echo 2>&1 "error: Expected result matching '$outputContains', while evaluating"
3840 reportFailure "$@"
39− return 1
4041 fi
4142}
4243
4344checkConfigError() {
4445 local errorContains=$1
4546 local err=""
46− shift;
47− if err==$(evalConfig "$@" 2>&1 >/dev/null); then
47+ shift
48+ if err="$(evalConfig "$@" 2>&1 >/dev/null)"; then
4849 echo 2>&1 "error: Expected error code, got exit code 0, while evaluating"
4950 reportFailure "$@"
50− return 1
5151 else
5252 if echo "$err" | grep -zP --silent "$errorContains" ; then
53− pass=$((pass + 1))
54− return 0;
53+ ((++pass))
5554 else
5655 echo 2>&1 "error: Expected error matching '$errorContains', while evaluating"
5756 reportFailure "$@"
58− return 1
5957 fi
6058 fi
6159}
6260
6361# Check boolean option.
64−checkConfigOutput "false" config.enable ./declare-enable.nix
65−checkConfigError 'The option .* does not exist. Definition values:\n- In .*: true' config.enable ./define-enable.nix
62+checkConfigOutput '^false$' config.enable ./declare-enable.nix
63+checkConfigError 'The option .* does not exist. Definition values:\n\s*- In .*: true' config.enable ./define-enable.nix
64+
65+checkConfigOutput '^1$' config.bare-submodule.nested ./declare-bare-submodule.nix ./declare-bare-submodule-nested-option.nix
66+checkConfigOutput '^2$' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-deep-option.nix
67+checkConfigOutput '^42$' config.bare-submodule.nested ./declare-bare-submodule.nix ./declare-bare-submodule-nested-option.nix ./declare-bare-submodule-deep-option.nix ./define-bare-submodule-values.nix
68+checkConfigOutput '^420$' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-nested-option.nix ./declare-bare-submodule-deep-option.nix ./define-bare-submodule-values.nix
69+checkConfigOutput '^2$' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-deep-option.nix ./define-shorthandOnlyDefinesConfig-true.nix
70+checkConfigError 'The option .bare-submodule.deep. in .*/declare-bare-submodule-deep-option.nix. is already declared in .*/declare-bare-submodule-deep-option-duplicate.nix' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-deep-option.nix ./declare-bare-submodule-deep-option-duplicate.nix
6671
6772# Check integer types.
6873# unsigned
69−checkConfigOutput "42" config.value ./declare-int-unsigned-value.nix ./define-value-int-positive.nix
70−checkConfigError 'A definition for option .* is not of type.*unsigned integer.*. Definition values:\n- In .*: -23' config.value ./declare-int-unsigned-value.nix ./define-value-int-negative.nix
74+checkConfigOutput '^42$' config.value ./declare-int-unsigned-value.nix ./define-value-int-positive.nix
75+checkConfigError 'A definition for option .* is not of type.*unsigned integer.*. Definition values:\n\s*- In .*: -23' config.value ./declare-int-unsigned-value.nix ./define-value-int-negative.nix
7176# positive
72−checkConfigError 'A definition for option .* is not of type.*positive integer.*. Definition values:\n- In .*: 0' config.value ./declare-int-positive-value.nix ./define-value-int-zero.nix
77+checkConfigError 'A definition for option .* is not of type.*positive integer.*. Definition values:\n\s*- In .*: 0' config.value ./declare-int-positive-value.nix ./define-value-int-zero.nix
7378# between
74−checkConfigOutput "42" config.value ./declare-int-between-value.nix ./define-value-int-positive.nix
75−checkConfigError 'A definition for option .* is not of type.*between.*-21 and 43.*inclusive.*. Definition values:\n- In .*: -23' config.value ./declare-int-between-value.nix ./define-value-int-negative.nix
79+checkConfigOutput '^42$' config.value ./declare-int-between-value.nix ./define-value-int-positive.nix
80+checkConfigError 'A definition for option .* is not of type.*between.*-21 and 43.*inclusive.*. Definition values:\n\s*- In .*: -23' config.value ./declare-int-between-value.nix ./define-value-int-negative.nix
7681
7782# Check either types
7883# types.either
79−checkConfigOutput "42" config.value ./declare-either.nix ./define-value-int-positive.nix
80−checkConfigOutput "\"24\"" config.value ./declare-either.nix ./define-value-string.nix
84+checkConfigOutput '^42$' config.value ./declare-either.nix ./define-value-int-positive.nix
85+checkConfigOutput '^"24"$' config.value ./declare-either.nix ./define-value-string.nix
8186# types.oneOf
82−checkConfigOutput "42" config.value ./declare-oneOf.nix ./define-value-int-positive.nix
83−checkConfigOutput "[ ]" config.value ./declare-oneOf.nix ./define-value-list.nix
84−checkConfigOutput "\"24\"" config.value ./declare-oneOf.nix ./define-value-string.nix
87+checkConfigOutput '^42$' config.value ./declare-oneOf.nix ./define-value-int-positive.nix
88+checkConfigOutput '^\[ \]$' config.value ./declare-oneOf.nix ./define-value-list.nix
89+checkConfigOutput '^"24"$' config.value ./declare-oneOf.nix ./define-value-string.nix
8590
8691# Check mkForce without submodules.
8792set -- config.enable ./declare-enable.nix ./define-enable.nix
88−checkConfigOutput "true" "$@"
89−checkConfigOutput "false" "$@" ./define-force-enable.nix
90−checkConfigOutput "false" "$@" ./define-enable-force.nix
93+checkConfigOutput '^true$' "$@"
94+checkConfigOutput '^false$' "$@" ./define-force-enable.nix
95+checkConfigOutput '^false$' "$@" ./define-enable-force.nix
9196
9297# Check mkForce with option and submodules.
9398checkConfigError 'attribute .*foo.* .* not found' config.attrsOfSub.foo.enable ./declare-attrsOfSub-any-enable.nix
94−checkConfigOutput 'false' config.attrsOfSub.foo.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix
99+checkConfigOutput '^false$' config.attrsOfSub.foo.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix
95100set -- config.attrsOfSub.foo.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo-enable.nix
96−checkConfigOutput 'true' "$@"
97−checkConfigOutput 'false' "$@" ./define-force-attrsOfSub-foo-enable.nix
98−checkConfigOutput 'false' "$@" ./define-attrsOfSub-force-foo-enable.nix
99−checkConfigOutput 'false' "$@" ./define-attrsOfSub-foo-force-enable.nix
100−checkConfigOutput 'false' "$@" ./define-attrsOfSub-foo-enable-force.nix
101+checkConfigOutput '^true$' "$@"
102+checkConfigOutput '^false$' "$@" ./define-force-attrsOfSub-foo-enable.nix
103+checkConfigOutput '^false$' "$@" ./define-attrsOfSub-force-foo-enable.nix
104+checkConfigOutput '^false$' "$@" ./define-attrsOfSub-foo-force-enable.nix
105+checkConfigOutput '^false$' "$@" ./define-attrsOfSub-foo-enable-force.nix
101106
102107# Check overriding effect of mkForce on submodule definitions.
103108checkConfigError 'attribute .*bar.* .* not found' config.attrsOfSub.bar.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix
104−checkConfigOutput 'false' config.attrsOfSub.bar.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix ./define-attrsOfSub-bar.nix
109+checkConfigOutput '^false$' config.attrsOfSub.bar.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix ./define-attrsOfSub-bar.nix
105110set -- config.attrsOfSub.bar.enable ./declare-attrsOfSub-any-enable.nix ./define-attrsOfSub-foo.nix ./define-attrsOfSub-bar-enable.nix
106−checkConfigOutput 'true' "$@"
111+checkConfigOutput '^true$' "$@"
107112checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-force-attrsOfSub-foo-enable.nix
108113checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-attrsOfSub-force-foo-enable.nix
109−checkConfigOutput 'true' "$@" ./define-attrsOfSub-foo-force-enable.nix
110−checkConfigOutput 'true' "$@" ./define-attrsOfSub-foo-enable-force.nix
114+checkConfigOutput '^true$' "$@" ./define-attrsOfSub-foo-force-enable.nix
115+checkConfigOutput '^true$' "$@" ./define-attrsOfSub-foo-enable-force.nix
111116
112117# Check mkIf with submodules.
113118checkConfigError 'attribute .*foo.* .* not found' config.attrsOfSub.foo.enable ./declare-enable.nix ./declare-attrsOfSub-any-enable.nix
@@ -115,24 +120,24 @@ set -- config.attrsOfSub.foo.enable ./declare-enable.nix ./declare-attrsOfSub-an
115120checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-if-attrsOfSub-foo-enable.nix
116121checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-attrsOfSub-if-foo-enable.nix
117122checkConfigError 'attribute .*foo.* .* not found' "$@" ./define-attrsOfSub-foo-if-enable.nix
118−checkConfigOutput 'false' "$@" ./define-attrsOfSub-foo-enable-if.nix
119−checkConfigOutput 'true' "$@" ./define-enable.nix ./define-if-attrsOfSub-foo-enable.nix
120−checkConfigOutput 'true' "$@" ./define-enable.nix ./define-attrsOfSub-if-foo-enable.nix
121−checkConfigOutput 'true' "$@" ./define-enable.nix ./define-attrsOfSub-foo-if-enable.nix
122−checkConfigOutput 'true' "$@" ./define-enable.nix ./define-attrsOfSub-foo-enable-if.nix
123+checkConfigOutput '^false$' "$@" ./define-attrsOfSub-foo-enable-if.nix
124+checkConfigOutput '^true$' "$@" ./define-enable.nix ./define-if-attrsOfSub-foo-enable.nix
125+checkConfigOutput '^true$' "$@" ./define-enable.nix ./define-attrsOfSub-if-foo-enable.nix
126+checkConfigOutput '^true$' "$@" ./define-enable.nix ./define-attrsOfSub-foo-if-enable.nix
127+checkConfigOutput '^true$' "$@" ./define-enable.nix ./define-attrsOfSub-foo-enable-if.nix
123128
124129# Check disabledModules with config definitions and option declarations.
125130set -- config.enable ./define-enable.nix ./declare-enable.nix
126−checkConfigOutput "true" "$@"
127−checkConfigOutput "false" "$@" ./disable-define-enable.nix
128−checkConfigError "The option .*enable.* does not exist. Definition values:\n- In .*: true" "$@" ./disable-declare-enable.nix
131+checkConfigOutput '^true$' "$@"
132+checkConfigOutput '^false$' "$@" ./disable-define-enable.nix
133+checkConfigError "The option .*enable.* does not exist. Definition values:\n\s*- In .*: true" "$@" ./disable-declare-enable.nix
129134checkConfigError "attribute .*enable.* in selection path .*config.enable.* not found" "$@" ./disable-define-enable.nix ./disable-declare-enable.nix
130135checkConfigError "attribute .*enable.* in selection path .*config.enable.* not found" "$@" ./disable-enable-modules.nix
131136
132137# Check _module.args.
133138set -- config.enable ./declare-enable.nix ./define-enable-with-custom-arg.nix
134139checkConfigError 'while evaluating the module argument .*custom.* in .*define-enable-with-custom-arg.nix.*:' "$@"
135−checkConfigOutput "true" "$@" ./define-_module-args-custom.nix
140+checkConfigOutput '^true$' "$@" ./define-_module-args-custom.nix
136141
137142# Check that using _module.args on imports cause infinite recursions, with
138143# the proper error context.
@@ -142,71 +147,78 @@ checkConfigError 'infinite recursion encountered' "$@"
142147
143148# Check _module.check.
144149set -- config.enable ./declare-enable.nix ./define-enable.nix ./define-attrsOfSub-foo.nix
145−checkConfigError 'The option .* does not exist. Definition values:\n- In .*' "$@"
146−checkConfigOutput "true" "$@" ./define-module-check.nix
150+checkConfigError 'The option .* does not exist. Definition values:\n\s*- In .*' "$@"
151+checkConfigOutput '^true$' "$@" ./define-module-check.nix
147152
148153# Check coerced value.
149−checkConfigOutput "\"42\"" config.value ./declare-coerced-value.nix
150−checkConfigOutput "\"24\"" config.value ./declare-coerced-value.nix ./define-value-string.nix
151−checkConfigError 'A definition for option .* is not.*string or signed integer convertible to it.*. Definition values:\n- In .*: \[ \]' config.value ./declare-coerced-value.nix ./define-value-list.nix
154+checkConfigOutput '^"42"$' config.value ./declare-coerced-value.nix
155+checkConfigOutput '^"24"$' config.value ./declare-coerced-value.nix ./define-value-string.nix
156+checkConfigError 'A definition for option .* is not.*string or signed integer convertible to it.*. Definition values:\n\s*- In .*: \[ \]' config.value ./declare-coerced-value.nix ./define-value-list.nix
152157
153158# Check coerced value with unsound coercion
154−checkConfigOutput "12" config.value ./declare-coerced-value-unsound.nix
155−checkConfigError 'A definition for option .* is not of type .*. Definition values:\n- In .*: "1000"' config.value ./declare-coerced-value-unsound.nix ./define-value-string-bigint.nix
156−checkConfigError 'unrecognised JSON value' config.value ./declare-coerced-value-unsound.nix ./define-value-string-arbitrary.nix
159+checkConfigOutput '^12$' config.value ./declare-coerced-value-unsound.nix
160+checkConfigError 'A definition for option .* is not of type .*. Definition values:\n\s*- In .*: "1000"' config.value ./declare-coerced-value-unsound.nix ./define-value-string-bigint.nix
161+checkConfigError 'json.exception.parse_error' config.value ./declare-coerced-value-unsound.nix ./define-value-string-arbitrary.nix
157162
158163# Check mkAliasOptionModule.
159−checkConfigOutput "true" config.enable ./alias-with-priority.nix
160−checkConfigOutput "true" config.enableAlias ./alias-with-priority.nix
161−checkConfigOutput "false" config.enable ./alias-with-priority-can-override.nix
162−checkConfigOutput "false" config.enableAlias ./alias-with-priority-can-override.nix
164+checkConfigOutput '^true$' config.enable ./alias-with-priority.nix
165+checkConfigOutput '^true$' config.enableAlias ./alias-with-priority.nix
166+checkConfigOutput '^false$' config.enable ./alias-with-priority-can-override.nix
167+checkConfigOutput '^false$' config.enableAlias ./alias-with-priority-can-override.nix
163168
164169# submoduleWith
165170
166171## specialArgs should work
167−checkConfigOutput "foo" config.submodule.foo ./declare-submoduleWith-special.nix
172+checkConfigOutput '^"foo"$' config.submodule.foo ./declare-submoduleWith-special.nix
168173
169174## shorthandOnlyDefines config behaves as expected
170−checkConfigOutput "true" config.submodule.config ./declare-submoduleWith-shorthand.nix ./define-submoduleWith-shorthand.nix
175+checkConfigOutput '^true$' config.submodule.config ./declare-submoduleWith-shorthand.nix ./define-submoduleWith-shorthand.nix
171176checkConfigError 'is not of type `boolean' config.submodule.config ./declare-submoduleWith-shorthand.nix ./define-submoduleWith-noshorthand.nix
172−checkConfigError "You're trying to declare a value of type \`bool'\nrather than an attribute-set for the option" config.submodule.config ./declare-submoduleWith-noshorthand.nix ./define-submoduleWith-shorthand.nix
173−checkConfigOutput "true" config.submodule.config ./declare-submoduleWith-noshorthand.nix ./define-submoduleWith-noshorthand.nix
177+checkConfigError "You're trying to declare a value of type \`bool'\n\s*rather than an attribute-set for the option" config.submodule.config ./declare-submoduleWith-noshorthand.nix ./define-submoduleWith-shorthand.nix
178+checkConfigOutput '^true$' config.submodule.config ./declare-submoduleWith-noshorthand.nix ./define-submoduleWith-noshorthand.nix
174179
175180## submoduleWith should merge all modules in one swoop
176−checkConfigOutput "true" config.submodule.inner ./declare-submoduleWith-modules.nix
177−checkConfigOutput "true" config.submodule.outer ./declare-submoduleWith-modules.nix
181+checkConfigOutput '^true$' config.submodule.inner ./declare-submoduleWith-modules.nix
182+checkConfigOutput '^true$' config.submodule.outer ./declare-submoduleWith-modules.nix
183+# Should also be able to evaluate the type name (which evaluates freeformType,
184+# which evaluates all the modules defined by the type)
185+checkConfigOutput '^"submodule"$' options.submodule.type.description ./declare-submoduleWith-modules.nix
186+
187+## submodules can be declared using (evalModules {...}).type
188+checkConfigOutput '^true$' config.submodule.inner ./declare-submodule-via-evalModules.nix
189+checkConfigOutput '^true$' config.submodule.outer ./declare-submodule-via-evalModules.nix
178190# Should also be able to evaluate the type name (which evaluates freeformType,
179191# which evaluates all the modules defined by the type)
180−checkConfigOutput "submodule" options.submodule.type.description ./declare-submoduleWith-modules.nix
192+checkConfigOutput '^"submodule"$' options.submodule.type.description ./declare-submodule-via-evalModules.nix
181193
182194## Paths should be allowed as values and work as expected
183−checkConfigOutput "true" config.submodule.enable ./declare-submoduleWith-path.nix
195+checkConfigOutput '^true$' config.submodule.enable ./declare-submoduleWith-path.nix
184196
185197# Check that disabledModules works recursively and correctly
186−checkConfigOutput "true" config.enable ./disable-recursive/main.nix
187−checkConfigOutput "true" config.enable ./disable-recursive/{main.nix,disable-foo.nix}
188−checkConfigOutput "true" config.enable ./disable-recursive/{main.nix,disable-bar.nix}
189−checkConfigError 'The option .* does not exist. Definition values:\n- In .*: true' config.enable ./disable-recursive/{main.nix,disable-foo.nix,disable-bar.nix}
198+checkConfigOutput '^true$' config.enable ./disable-recursive/main.nix
199+checkConfigOutput '^true$' config.enable ./disable-recursive/{main.nix,disable-foo.nix}
200+checkConfigOutput '^true$' config.enable ./disable-recursive/{main.nix,disable-bar.nix}
201+checkConfigError 'The option .* does not exist. Definition values:\n\s*- In .*: true' config.enable ./disable-recursive/{main.nix,disable-foo.nix,disable-bar.nix}
190202
191203# Check that imports can depend on derivations
192−checkConfigOutput "true" config.enable ./import-from-store.nix
204+checkConfigOutput '^true$' config.enable ./import-from-store.nix
193205
194206# Check that configs can be conditional on option existence
195−checkConfigOutput true config.enable ./define-option-dependently.nix ./declare-enable.nix ./declare-int-positive-value.nix
196−checkConfigOutput 360 config.value ./define-option-dependently.nix ./declare-enable.nix ./declare-int-positive-value.nix
197−checkConfigOutput 7 config.value ./define-option-dependently.nix ./declare-int-positive-value.nix
198−checkConfigOutput true config.set.enable ./define-option-dependently-nested.nix ./declare-enable-nested.nix ./declare-int-positive-value-nested.nix
199−checkConfigOutput 360 config.set.value ./define-option-dependently-nested.nix ./declare-enable-nested.nix ./declare-int-positive-value-nested.nix
200−checkConfigOutput 7 config.set.value ./define-option-dependently-nested.nix ./declare-int-positive-value-nested.nix
207+checkConfigOutput '^true$' config.enable ./define-option-dependently.nix ./declare-enable.nix ./declare-int-positive-value.nix
208+checkConfigOutput '^360$' config.value ./define-option-dependently.nix ./declare-enable.nix ./declare-int-positive-value.nix
209+checkConfigOutput '^7$' config.value ./define-option-dependently.nix ./declare-int-positive-value.nix
210+checkConfigOutput '^true$' config.set.enable ./define-option-dependently-nested.nix ./declare-enable-nested.nix ./declare-int-positive-value-nested.nix
211+checkConfigOutput '^360$' config.set.value ./define-option-dependently-nested.nix ./declare-enable-nested.nix ./declare-int-positive-value-nested.nix
212+checkConfigOutput '^7$' config.set.value ./define-option-dependently-nested.nix ./declare-int-positive-value-nested.nix
201213
202214# Check attrsOf and lazyAttrsOf. Only lazyAttrsOf should be lazy, and only
203215# attrsOf should work with conditional definitions
204216# In addition, lazyAttrsOf should honor an options emptyValue
205217checkConfigError "is not lazy" config.isLazy ./declare-attrsOf.nix ./attrsOf-lazy-check.nix
206−checkConfigOutput "true" config.isLazy ./declare-lazyAttrsOf.nix ./attrsOf-lazy-check.nix
207−checkConfigOutput "true" config.conditionalWorks ./declare-attrsOf.nix ./attrsOf-conditional-check.nix
208−checkConfigOutput "false" config.conditionalWorks ./declare-lazyAttrsOf.nix ./attrsOf-conditional-check.nix
209−checkConfigOutput "empty" config.value.foo ./declare-lazyAttrsOf.nix ./attrsOf-conditional-check.nix
218+checkConfigOutput '^true$' config.isLazy ./declare-lazyAttrsOf.nix ./attrsOf-lazy-check.nix
219+checkConfigOutput '^true$' config.conditionalWorks ./declare-attrsOf.nix ./attrsOf-conditional-check.nix
220+checkConfigOutput '^false$' config.conditionalWorks ./declare-lazyAttrsOf.nix ./attrsOf-conditional-check.nix
221+checkConfigOutput '^"empty"$' config.value.foo ./declare-lazyAttrsOf.nix ./attrsOf-conditional-check.nix
210222
211223
212224# Even with multiple assignments, a type error should be thrown if any of them aren't valid
@@ -215,62 +227,109 @@ checkConfigError 'A definition for option .* is not of type .*' \
215227
216228## Freeform modules
217229# Assigning without a declared option should work
218−checkConfigOutput 24 config.value ./freeform-attrsOf.nix ./define-value-string.nix
230+checkConfigOutput '^"24"$' config.value ./freeform-attrsOf.nix ./define-value-string.nix
219231# No freeform assigments shouldn't make it error
220−checkConfigOutput '{ }' config ./freeform-attrsOf.nix
232+checkConfigOutput '^{ }$' config ./freeform-attrsOf.nix
221233# but only if the type matches
222234checkConfigError 'A definition for option .* is not of type .*' config.value ./freeform-attrsOf.nix ./define-value-list.nix
223235# and properties should be applied
224−checkConfigOutput yes config.value ./freeform-attrsOf.nix ./define-value-string-properties.nix
236+checkConfigOutput '^"yes"$' config.value ./freeform-attrsOf.nix ./define-value-string-properties.nix
225237# Options should still be declarable, and be able to have a type that doesn't match the freeform type
226−checkConfigOutput false config.enable ./freeform-attrsOf.nix ./define-value-string.nix ./declare-enable.nix
227−checkConfigOutput 24 config.value ./freeform-attrsOf.nix ./define-value-string.nix ./declare-enable.nix
238+checkConfigOutput '^false$' config.enable ./freeform-attrsOf.nix ./define-value-string.nix ./declare-enable.nix
239+checkConfigOutput '^"24"$' config.value ./freeform-attrsOf.nix ./define-value-string.nix ./declare-enable.nix
228240# and this should work too with nested values
229−checkConfigOutput false config.nest.foo ./freeform-attrsOf.nix ./freeform-nested.nix
230−checkConfigOutput bar config.nest.bar ./freeform-attrsOf.nix ./freeform-nested.nix
241+checkConfigOutput '^false$' config.nest.foo ./freeform-attrsOf.nix ./freeform-nested.nix
242+checkConfigOutput '^"bar"$' config.nest.bar ./freeform-attrsOf.nix ./freeform-nested.nix
231243# Check whether a declared option can depend on an freeform-typed one
232−checkConfigOutput null config.foo ./freeform-attrsOf.nix ./freeform-str-dep-unstr.nix
233−checkConfigOutput 24 config.foo ./freeform-attrsOf.nix ./freeform-str-dep-unstr.nix ./define-value-string.nix
244+checkConfigOutput '^null$' config.foo ./freeform-attrsOf.nix ./freeform-str-dep-unstr.nix
245+checkConfigOutput '^"24"$' config.foo ./freeform-attrsOf.nix ./freeform-str-dep-unstr.nix ./define-value-string.nix
234246# Check whether an freeform-typed value can depend on a declared option, this can only work with lazyAttrsOf
235247checkConfigError 'infinite recursion encountered' config.foo ./freeform-attrsOf.nix ./freeform-unstr-dep-str.nix
236248checkConfigError 'The option .* is used but not defined' config.foo ./freeform-lazyAttrsOf.nix ./freeform-unstr-dep-str.nix
237−checkConfigOutput 24 config.foo ./freeform-lazyAttrsOf.nix ./freeform-unstr-dep-str.nix ./define-value-string.nix
249+checkConfigOutput '^"24"$' config.foo ./freeform-lazyAttrsOf.nix ./freeform-unstr-dep-str.nix ./define-value-string.nix
250+# submodules in freeformTypes should have their locations annotated
251+checkConfigOutput '/freeform-submodules.nix"$' config.fooDeclarations.0 ./freeform-submodules.nix
252+# freeformTypes can get merged using `types.type`, including submodules
253+checkConfigOutput '^10$' config.free.xxx.foo ./freeform-submodules.nix
254+checkConfigOutput '^10$' config.free.yyy.bar ./freeform-submodules.nix
238255
239256## types.anything
240257# Check that attribute sets are merged recursively
241−checkConfigOutput null config.value.foo ./types-anything/nested-attrs.nix
242−checkConfigOutput null config.value.l1.foo ./types-anything/nested-attrs.nix
243−checkConfigOutput null config.value.l1.l2.foo ./types-anything/nested-attrs.nix
244−checkConfigOutput null config.value.l1.l2.l3.foo ./types-anything/nested-attrs.nix
258+checkConfigOutput '^null$' config.value.foo ./types-anything/nested-attrs.nix
259+checkConfigOutput '^null$' config.value.l1.foo ./types-anything/nested-attrs.nix
260+checkConfigOutput '^null$' config.value.l1.l2.foo ./types-anything/nested-attrs.nix
261+checkConfigOutput '^null$' config.value.l1.l2.l3.foo ./types-anything/nested-attrs.nix
245262# Attribute sets that are coercible to strings shouldn't be recursed into
246−checkConfigOutput foo config.value.outPath ./types-anything/attrs-coercible.nix
263+checkConfigOutput '^"foo"$' config.value.outPath ./types-anything/attrs-coercible.nix
247264# Multiple lists aren't concatenated together
248265checkConfigError 'The option .* has conflicting definitions' config.value ./types-anything/lists.nix
249266# Check that all equalizable atoms can be used as long as all definitions are equal
250−checkConfigOutput 0 config.value.int ./types-anything/equal-atoms.nix
251−checkConfigOutput false config.value.bool ./types-anything/equal-atoms.nix
252−checkConfigOutput '""' config.value.string ./types-anything/equal-atoms.nix
253−checkConfigOutput / config.value.path ./types-anything/equal-atoms.nix
254−checkConfigOutput null config.value.null ./types-anything/equal-atoms.nix
255−checkConfigOutput 0.1 config.value.float ./types-anything/equal-atoms.nix
267+checkConfigOutput '^0$' config.value.int ./types-anything/equal-atoms.nix
268+checkConfigOutput '^false$' config.value.bool ./types-anything/equal-atoms.nix
269+checkConfigOutput '^""$' config.value.string ./types-anything/equal-atoms.nix
270+checkConfigOutput '^/$' config.value.path ./types-anything/equal-atoms.nix
271+checkConfigOutput '^null$' config.value.null ./types-anything/equal-atoms.nix
272+checkConfigOutput '^0.1$' config.value.float ./types-anything/equal-atoms.nix
256273# Functions can't be merged together
257−checkConfigError "The option .* has conflicting definition values" config.value.multiple-lambdas ./types-anything/functions.nix
258−checkConfigOutput '<LAMBDA>' config.value.single-lambda ./types-anything/functions.nix
274+checkConfigError "The option .value.multiple-lambdas.<function body>. has conflicting option types" config.applied.multiple-lambdas ./types-anything/functions.nix
275+checkConfigOutput '^<LAMBDA>$' config.value.single-lambda ./types-anything/functions.nix
276+checkConfigOutput '^null$' config.applied.merging-lambdas.x ./types-anything/functions.nix
277+checkConfigOutput '^null$' config.applied.merging-lambdas.y ./types-anything/functions.nix
259278# Check that all mk* modifiers are applied
260279checkConfigError 'attribute .* not found' config.value.mkiffalse ./types-anything/mk-mods.nix
261−checkConfigOutput '{ }' config.value.mkiftrue ./types-anything/mk-mods.nix
262−checkConfigOutput 1 config.value.mkdefault ./types-anything/mk-mods.nix
263−checkConfigOutput '{ }' config.value.mkmerge ./types-anything/mk-mods.nix
264−checkConfigOutput true config.value.mkbefore ./types-anything/mk-mods.nix
265−checkConfigOutput 1 config.value.nested.foo ./types-anything/mk-mods.nix
266−checkConfigOutput baz config.value.nested.bar.baz ./types-anything/mk-mods.nix
280+checkConfigOutput '^{ }$' config.value.mkiftrue ./types-anything/mk-mods.nix
281+checkConfigOutput '^1$' config.value.mkdefault ./types-anything/mk-mods.nix
282+checkConfigOutput '^{ }$' config.value.mkmerge ./types-anything/mk-mods.nix
283+checkConfigOutput '^true$' config.value.mkbefore ./types-anything/mk-mods.nix
284+checkConfigOutput '^1$' config.value.nested.foo ./types-anything/mk-mods.nix
285+checkConfigOutput '^"baz"$' config.value.nested.bar.baz ./types-anything/mk-mods.nix
267286
268287## types.functionTo
269−checkConfigOutput "input is input" config.result ./functionTo/trivial.nix
270−checkConfigOutput "a b" config.result ./functionTo/merging-list.nix
271−checkConfigError 'A definition for option .fun.\[function body\]. is not of type .string.. Definition values:\n- In .*wrong-type.nix' config.result ./functionTo/wrong-type.nix
272−checkConfigOutput "b a" config.result ./functionTo/list-order.nix
273−checkConfigOutput "a c" config.result ./functionTo/merging-attrs.nix
288+checkConfigOutput '^"input is input"$' config.result ./functionTo/trivial.nix
289+checkConfigOutput '^"a b"$' config.result ./functionTo/merging-list.nix
290+checkConfigError 'A definition for option .fun.\[function body\]. is not of type .string.. Definition values:\n\s*- In .*wrong-type.nix' config.result ./functionTo/wrong-type.nix
291+checkConfigOutput '^"b a"$' config.result ./functionTo/list-order.nix
292+checkConfigOutput '^"a c"$' config.result ./functionTo/merging-attrs.nix
293+
294+# moduleType
295+checkConfigOutput '^"a b"$' config.resultFoo ./declare-variants.nix ./define-variant.nix
296+checkConfigOutput '^"a b y z"$' config.resultFooBar ./declare-variants.nix ./define-variant.nix
297+checkConfigOutput '^"a b c"$' config.resultFooFoo ./declare-variants.nix ./define-variant.nix
298+
299+## emptyValue's
300+checkConfigOutput "[ ]" config.list.a ./emptyValues.nix
301+checkConfigOutput "{ }" config.attrs.a ./emptyValues.nix
302+checkConfigOutput "null" config.null.a ./emptyValues.nix
303+checkConfigOutput "{ }" config.submodule.a ./emptyValues.nix
304+# These types don't have empty values
305+checkConfigError 'The option .int.a. is used but not defined' config.int.a ./emptyValues.nix
306+checkConfigError 'The option .nonEmptyList.a. is used but not defined' config.nonEmptyList.a ./emptyValues.nix
307+
308+## types.raw
309+checkConfigOutput "{ foo = <CODE>; }" config.unprocessedNesting ./raw.nix
310+checkConfigOutput "10" config.processedToplevel ./raw.nix
311+checkConfigError "The option .multiple. is defined multiple times" config.multiple ./raw.nix
312+checkConfigOutput "bar" config.priorities ./raw.nix
313+
314+## Option collision
315+checkConfigError \
316+ 'The option .set. in module .*/declare-set.nix. would be a parent of the following options, but its type .attribute set of signed integers. does not support nested options.\n\s*- option[(]s[)] with prefix .set.enable. in module .*/declare-enable-nested.nix.' \
317+ config.set \
318+ ./declare-set.nix ./declare-enable-nested.nix
319+
320+# Test that types.optionType merges types correctly
321+checkConfigOutput '^10$' config.theOption.int ./optionTypeMerging.nix
322+checkConfigOutput '^"hello"$' config.theOption.str ./optionTypeMerging.nix
323+
324+# Test that types.optionType correctly annotates option locations
325+checkConfigError 'The option .theOption.nested. in .other.nix. is already declared in .optionTypeFile.nix.' config.theOption.nested ./optionTypeFile.nix
326+
327+# Test that types.optionType leaves types untouched as long as they don't need to be merged
328+checkConfigOutput 'ok' config.freeformItems.foo.bar ./adhoc-freeformType-survives-type-merge.nix
329+
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
274333
275334cat <<EOF
276335====== module tests ======
@@ -278,7 +337,7 @@ $pass Pass
278337$fail Fail
279338EOF
280339
281−if test $fail -ne 0; then
340+if [ "$fail" -ne 0 ]; then
282341 exit 1
283342fi
284343exit 0
lib/tests/modules/adhoc-freeformType-survives-type-merge.nixnew file+14
@@ -0,0 +1,14 @@
1+{ lib, ... }: {
2+ options.dummy = lib.mkOption { type = lib.types.anything; default = {}; };
3+ freeformType =
4+ let
5+ a = lib.types.attrsOf (lib.types.submodule { options.bar = lib.mkOption { }; });
6+ in
7+ # modifying types like this breaks type merging.
8+ # This test makes sure that type merging is not performed when only a single declaration exists.
9+ # Don't modify types in practice!
10+ a // {
11+ merge = loc: defs: { freeformItems = a.merge loc defs; };
12+ };
13+ config.foo.bar = "ok";
14+}
lib/tests/modules/declare-attrsOf.nix+8−1
@@ -1,6 +1,13 @@
1−{ lib, ... }: {
1+{ lib, ... }:
2+let
3+ deathtrapArgs = lib.mapAttrs
4+ (k: _: throw "The module system is too strict, accessing an unused option's ${k} mkOption-attribute.")
5+ (lib.functionArgs lib.mkOption);
6+in
7+{
28 options.value = lib.mkOption {
39 type = lib.types.attrsOf lib.types.str;
410 default = {};
511 };
12+ options.testing-laziness-so-don't-read-me = lib.mkOption deathtrapArgs;
613}
lib/tests/modules/declare-bare-submodule-deep-option-duplicate.nixnew file+10
@@ -0,0 +1,10 @@
1+{ lib, ... }:
2+let
3+ inherit (lib) mkOption types;
4+in
5+{
6+ options.bare-submodule.deep = mkOption {
7+ type = types.int;
8+ default = 2;
9+ };
10+}
lib/tests/modules/declare-bare-submodule-deep-option.nixnew file+10
@@ -0,0 +1,10 @@
1+{ lib, ... }:
2+let
3+ inherit (lib) mkOption types;
4+in
5+{
6+ options.bare-submodule.deep = mkOption {
7+ type = types.int;
8+ default = 2;
9+ };
10+}
lib/tests/modules/declare-bare-submodule-nested-option.nixnew file+19
@@ -0,0 +1,19 @@
1+{ config, lib, ... }:
2+let
3+ inherit (lib) mkOption types;
4+in
5+{
6+ options.bare-submodule = mkOption {
7+ type = types.submoduleWith {
8+ shorthandOnlyDefinesConfig = config.shorthandOnlyDefinesConfig;
9+ modules = [
10+ {
11+ options.nested = mkOption {
12+ type = types.int;
13+ default = 1;
14+ };
15+ }
16+ ];
17+ };
18+ };
19+}
lib/tests/modules/declare-bare-submodule.nixnew file+18
@@ -0,0 +1,18 @@
1+{ config, lib, ... }:
2+let
3+ inherit (lib) mkOption types;
4+in
5+{
6+ options.bare-submodule = mkOption {
7+ type = types.submoduleWith {
8+ modules = [ ];
9+ shorthandOnlyDefinesConfig = config.shorthandOnlyDefinesConfig;
10+ };
11+ default = {};
12+ };
13+
14+ # config-dependent options: won't recommend, but useful for making this test parameterized
15+ options.shorthandOnlyDefinesConfig = mkOption {
16+ default = false;
17+ };
18+}
lib/tests/modules/declare-set.nixnew file+12
@@ -0,0 +1,12 @@
1+{ lib, ... }:
2+
3+{
4+ options.set = lib.mkOption {
5+ default = { };
6+ example = { a = 1; };
7+ type = lib.types.attrsOf lib.types.int;
8+ description = ''
9+ Some descriptive text
10+ '';
11+ };
12+}
lib/tests/modules/declare-submodule-via-evalModules.nixnew file+28
@@ -0,0 +1,28 @@
1+{ lib, ... }: {
2+ options.submodule = lib.mkOption {
3+ inherit (lib.evalModules {
4+ modules = [
5+ {
6+ options.inner = lib.mkOption {
7+ type = lib.types.bool;
8+ default = false;
9+ };
10+ }
11+ ];
12+ }) type;
13+ default = {};
14+ };
15+
16+ config.submodule = lib.mkMerge [
17+ ({ lib, ... }: {
18+ options.outer = lib.mkOption {
19+ type = lib.types.bool;
20+ default = false;
21+ };
22+ })
23+ {
24+ inner = true;
25+ outer = true;
26+ }
27+ ];
28+}
lib/tests/modules/declare-variants.nixnew file+9
@@ -0,0 +1,9 @@
1+{ lib, moduleType, ... }:
2+let inherit (lib) mkOption types;
3+in
4+{
5+ options.variants = mkOption {
6+ type = types.lazyAttrsOf moduleType;
7+ default = {};
8+ };
9+}
lib/tests/modules/define-bare-submodule-values.nixnew file+4
@@ -0,0 +1,4 @@
1+{
2+ bare-submodule.nested = 42;
3+ bare-submodule.deep = 420;
4+}
lib/tests/modules/define-shorthandOnlyDefinesConfig-true.nixnew file+1
@@ -0,0 +1 @@
1+{ shorthandOnlyDefinesConfig = true; }
lib/tests/modules/define-variant.nixnew file+22
@@ -0,0 +1,22 @@
1+{ config, lib, ... }:
2+let inherit (lib) types mkOption attrNames;
3+in
4+{
5+ options = {
6+ attrs = mkOption { type = types.attrsOf lib.types.int; };
7+ result = mkOption { };
8+ resultFoo = mkOption { };
9+ resultFooBar = mkOption { };
10+ resultFooFoo = mkOption { };
11+ };
12+ config = {
13+ attrs.a = 1;
14+ variants.foo.attrs.b = 1;
15+ variants.bar.attrs.y = 1;
16+ variants.foo.variants.bar.attrs.z = 1;
17+ variants.foo.variants.foo.attrs.c = 3;
18+ resultFoo = lib.concatMapStringsSep " " toString (attrNames config.variants.foo.attrs);
19+ resultFooBar = lib.concatMapStringsSep " " toString (attrNames config.variants.foo.variants.bar.attrs);
20+ resultFooFoo = lib.concatMapStringsSep " " toString (attrNames config.variants.foo.variants.foo.attrs);
21+ };
22+}
lib/tests/modules/emptyValues.nixnew file+36
@@ -0,0 +1,36 @@
1+{ lib, ... }:
2+let
3+ inherit (lib) types;
4+in {
5+
6+ options = {
7+ int = lib.mkOption {
8+ type = types.lazyAttrsOf types.int;
9+ };
10+ list = lib.mkOption {
11+ type = types.lazyAttrsOf (types.listOf types.int);
12+ };
13+ nonEmptyList = lib.mkOption {
14+ type = types.lazyAttrsOf (types.nonEmptyListOf types.int);
15+ };
16+ attrs = lib.mkOption {
17+ type = types.lazyAttrsOf (types.attrsOf types.int);
18+ };
19+ null = lib.mkOption {
20+ type = types.lazyAttrsOf (types.nullOr types.int);
21+ };
22+ submodule = lib.mkOption {
23+ type = types.lazyAttrsOf (types.submodule {});
24+ };
25+ };
26+
27+ config = {
28+ int.a = lib.mkIf false null;
29+ list.a = lib.mkIf false null;
30+ nonEmptyList.a = lib.mkIf false null;
31+ attrs.a = lib.mkIf false null;
32+ null.a = lib.mkIf false null;
33+ submodule.a = lib.mkIf false null;
34+ };
35+
36+}
lib/tests/modules/extendModules-168767-imports.nixnew file+41
@@ -0,0 +1,41 @@
1+{ lib
2+, extendModules
3+, ...
4+}:
5+with lib;
6+{
7+ imports = [
8+
9+ {
10+ options.sub = mkOption {
11+ default = { };
12+ type = types.submodule (
13+ { config
14+ , extendModules
15+ , ...
16+ }:
17+ {
18+ options.value = mkOption {
19+ type = types.int;
20+ };
21+
22+ options.specialisation = mkOption {
23+ default = { };
24+ inherit
25+ (extendModules {
26+ modules = [{
27+ specialisation = mkOverride 0 { };
28+ }];
29+ })
30+ type;
31+ };
32+ }
33+ );
34+ };
35+ }
36+
37+ { config.sub.value = 1; }
38+
39+
40+ ];
41+}
lib/tests/modules/freeform-nested.nix+8−1
@@ -1,7 +1,14 @@
1−{ lib, ... }: {
1+{ lib, ... }:
2+let
3+ deathtrapArgs = lib.mapAttrs
4+ (k: _: throw "The module system is too strict, accessing an unused option's ${k} mkOption-attribute.")
5+ (lib.functionArgs lib.mkOption);
6+in
7+{
28 options.nest.foo = lib.mkOption {
39 type = lib.types.bool;
410 default = false;
511 };
12+ options.nest.unused = lib.mkOption deathtrapArgs;
613 config.nest.bar = "bar";
714}
lib/tests/modules/freeform-submodules.nixnew file+22
@@ -0,0 +1,22 @@
1+{ lib, options, ... }: with lib.types; {
2+
3+ options.fooDeclarations = lib.mkOption {
4+ default = (options.free.type.getSubOptions [])._freeformOptions.foo.declarations;
5+ };
6+
7+ options.free = lib.mkOption {
8+ type = submodule {
9+ config._module.freeformType = lib.mkMerge [
10+ (attrsOf (submodule {
11+ options.foo = lib.mkOption {};
12+ }))
13+ (attrsOf (submodule {
14+ options.bar = lib.mkOption {};
15+ }))
16+ ];
17+ };
18+ };
19+
20+ config.free.xxx.foo = 10;
21+ config.free.yyy.bar = 10;
22+}
lib/tests/modules/optionTypeFile.nixnew file+28
@@ -0,0 +1,28 @@
1+{ config, lib, ... }: {
2+
3+ _file = "optionTypeFile.nix";
4+
5+ options.theType = lib.mkOption {
6+ type = lib.types.optionType;
7+ };
8+
9+ options.theOption = lib.mkOption {
10+ type = config.theType;
11+ default = {};
12+ };
13+
14+ config.theType = lib.mkMerge [
15+ (lib.types.submodule {
16+ options.nested = lib.mkOption {
17+ type = lib.types.int;
18+ };
19+ })
20+ (lib.types.submodule {
21+ _file = "other.nix";
22+ options.nested = lib.mkOption {
23+ type = lib.types.str;
24+ };
25+ })
26+ ];
27+
28+}
lib/tests/modules/optionTypeMerging.nixnew file+27
@@ -0,0 +1,27 @@
1+{ config, lib, ... }: {
2+
3+ options.theType = lib.mkOption {
4+ type = lib.types.optionType;
5+ };
6+
7+ options.theOption = lib.mkOption {
8+ type = config.theType;
9+ };
10+
11+ config.theType = lib.mkMerge [
12+ (lib.types.submodule {
13+ options.int = lib.mkOption {
14+ type = lib.types.int;
15+ default = 10;
16+ };
17+ })
18+ (lib.types.submodule {
19+ options.str = lib.mkOption {
20+ type = lib.types.str;
21+ };
22+ })
23+ ];
24+
25+ config.theOption.str = "hello";
26+
27+}
lib/tests/modules/raw.nixnew file+30
@@ -0,0 +1,30 @@
1+{ lib, ... }: {
2+
3+ options = {
4+ processedToplevel = lib.mkOption {
5+ type = lib.types.raw;
6+ };
7+ unprocessedNesting = lib.mkOption {
8+ type = lib.types.raw;
9+ };
10+ multiple = lib.mkOption {
11+ type = lib.types.raw;
12+ };
13+ priorities = lib.mkOption {
14+ type = lib.types.raw;
15+ };
16+ };
17+
18+ config = {
19+ processedToplevel = lib.mkIf true 10;
20+ unprocessedNesting.foo = throw "foo";
21+ multiple = lib.mkMerge [
22+ "foo"
23+ "foo"
24+ ];
25+ priorities = lib.mkMerge [
26+ "foo"
27+ (lib.mkForce "bar")
28+ ];
29+ };
30+}
lib/tests/modules/types-anything/functions.nix+9−3
@@ -1,16 +1,22 @@
1−{ lib, ... }: {
1+{ lib, config, ... }: {
22
33 options.value = lib.mkOption {
44 type = lib.types.anything;
55 };
66
7+ options.applied = lib.mkOption {
8+ default = lib.mapAttrs (name: fun: fun null) config.value;
9+ };
10+
711 config = lib.mkMerge [
812 {
913 value.single-lambda = x: x;
10− value.multiple-lambdas = x: x;
14+ value.multiple-lambdas = x: { inherit x; };
15+ value.merging-lambdas = x: { inherit x; };
1116 }
1217 {
13− value.multiple-lambdas = x: x;
18+ value.multiple-lambdas = x: [ x ];
19+ value.merging-lambdas = y: { inherit y; };
1420 }
1521 ];
1622
lib/tests/release.nix+4
@@ -23,6 +23,10 @@ pkgs.runCommand "nixpkgs-lib-tests" {
2323 export NIX_STORE_DIR=$TEST_ROOT/store
2424 export PAGER=cat
2525 cacheDir=$TEST_ROOT/binary-cache
26+
27+ mkdir -p $NIX_CONF_DIR
28+ echo "experimental-features = nix-command" >> $NIX_CONF_DIR/nix.conf
29+
2630 nix-store --init
2731
2832 cp -r ${../.} lib
lib/tests/sources.sh+11−9
@@ -1,5 +1,6 @@
11#!/usr/bin/env bash
22set -euo pipefail
3+shopt -s inherit_errexit
34
45# Use
56# || die
@@ -9,27 +10,28 @@ die() {
910}
1011
1112if test -n "${TEST_LIB:-}"; then
12− export NIX_PATH=nixpkgs="$(dirname "$TEST_LIB")"
13+ NIX_PATH=nixpkgs="$(dirname "$TEST_LIB")"
1314else
14− export NIX_PATH=nixpkgs="$(cd $(dirname ${BASH_SOURCE[0]})/../..; pwd)"
15+ NIX_PATH=nixpkgs="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.."; pwd)"
1516fi
17+export NIX_PATH
1618
1719work="$(mktemp -d)"
1820clean_up() {
1921 rm -rf "$work"
2022}
2123trap clean_up EXIT
22−cd $work
24+cd "$work"
2325
2426touch {README.md,module.o,foo.bar}
2527
2628# nix-instantiate doesn't write out the source, only computing the hash, so
2729# this uses the experimental nix command instead.
2830
29−dir="$(nix eval --raw '(with import <nixpkgs/lib>; "${
31+dir="$(nix eval --impure --raw --expr '(with import <nixpkgs/lib>; "${
3032 cleanSource ./.
3133}")')"
32−(cd $dir; find) | sort -f | diff -U10 - <(cat <<EOF
34+(cd "$dir"; find) | sort -f | diff -U10 - <(cat <<EOF
3335.
3436./foo.bar
3537./README.md
@@ -37,20 +39,20 @@ EOF
3739) || die "cleanSource 1"
3840
3941
40−dir="$(nix eval --raw '(with import <nixpkgs/lib>; "${
42+dir="$(nix eval --impure --raw --expr '(with import <nixpkgs/lib>; "${
4143 cleanSourceWith { src = '"$work"'; filter = path: type: ! hasSuffix ".bar" path; }
4244}")')"
43−(cd $dir; find) | sort -f | diff -U10 - <(cat <<EOF
45+(cd "$dir"; find) | sort -f | diff -U10 - <(cat <<EOF
4446.
4547./module.o
4648./README.md
4749EOF
4850) || die "cleanSourceWith 1"
4951
50−dir="$(nix eval --raw '(with import <nixpkgs/lib>; "${
52+dir="$(nix eval --impure --raw --expr '(with import <nixpkgs/lib>; "${
5153 cleanSourceWith { src = cleanSource '"$work"'; filter = path: type: ! hasSuffix ".bar" path; }
5254}")')"
53−(cd $dir; find) | sort -f | diff -U10 - <(cat <<EOF
55+(cd "$dir"; find) | sort -f | diff -U10 - <(cat <<EOF
5456.
5557./README.md
5658EOF
lib/tests/systems.nix+5−2
@@ -17,8 +17,11 @@ with lib.systems.doubles; lib.runTests {
1717
1818 testarm = mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv6l-netbsd" "armv6l-none" "armv7a-linux" "armv7a-netbsd" "armv7l-linux" "armv7l-netbsd" "arm-none" "armv7a-darwin" ];
1919 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 [ "mipsel-linux" "mipsel-netbsd" ];
20+ testmips = mseteq mips [ "mips64el-linux" "mipsel-linux" "mipsel-netbsd" ];
2121 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" ];
2225 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" ];
2326
2427 testcygwin = mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ];
@@ -28,7 +31,7 @@ with lib.systems.doubles; lib.runTests {
2831 testredox = mseteq redox [ "x86_64-redox" ];
2932 testgnu = mseteq gnu (linux /* ++ kfreebsd ++ ... */);
3033 testillumos = mseteq illumos [ "x86_64-solaris" ];
31− testlinux = mseteq linux [ "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux" "armv7l-linux" "i686-linux" "mipsel-linux" "riscv32-linux" "riscv64-linux" "x86_64-linux" "powerpc64-linux" "powerpc64le-linux" "m68k-linux" "s390-linux" ];
34+ testlinux = mseteq linux [ "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux" "armv7l-linux" "i686-linux" "mips64el-linux" "mipsel-linux" "riscv32-linux" "riscv64-linux" "x86_64-linux" "powerpc64-linux" "powerpc64le-linux" "m68k-linux" "s390-linux" "s390x-linux" ];
3235 testnetbsd = mseteq netbsd [ "aarch64-netbsd" "armv6l-netbsd" "armv7a-netbsd" "armv7l-netbsd" "i686-netbsd" "m68k-netbsd" "mipsel-netbsd" "powerpc-netbsd" "riscv32-netbsd" "riscv64-netbsd" "x86_64-netbsd" ];
3336 testopenbsd = mseteq openbsd [ "i686-openbsd" "x86_64-openbsd" ];
3437 testwindows = mseteq windows [ "i686-cygwin" "x86_64-cygwin" "i686-windows" "x86_64-windows" ];
lib/trivial.nix+123−8
@@ -61,11 +61,11 @@ rec {
6161 pipe = val: functions:
6262 let reverseApply = x: f: f x;
6363 in builtins.foldl' reverseApply val functions;
64− /* note please don’t add a function like `compose = flip pipe`.
65− This would confuse users, because the order of the functions
66− in the list is not clear. With pipe, it’s obvious that it
67− goes first-to-last. With `compose`, not so much.
68− */
64+
65+ # note please don’t add a function like `compose = flip pipe`.
66+ # This would confuse users, because the order of the functions
67+ # in the list is not clear. With pipe, it’s obvious that it
68+ # goes first-to-last. With `compose`, not so much.
6969
7070 ## Named versions corresponding to some builtin operators.
7171
@@ -166,12 +166,36 @@ rec {
166166 /* Returns the current nixpkgs release number as string. */
167167 release = lib.strings.fileContents ../.version;
168168
169+ /* The latest release that is supported, at the time of release branch-off,
170+ if applicable.
171+
172+ Ideally, out-of-tree modules should be able to evaluate cleanly with all
173+ supported Nixpkgs versions (master, release and old release until EOL).
174+ So if possible, deprecation warnings should take effect only when all
175+ out-of-tree expressions/libs/modules can upgrade to the new way without
176+ losing support for supported Nixpkgs versions.
177+
178+ This release number allows deprecation warnings to be implemented such that
179+ they take effect as soon as the oldest release reaches end of life. */
180+ oldestSupportedRelease =
181+ # Update on master only. Do not backport.
182+ 2111;
183+
184+ /* Whether a feature is supported in all supported releases (at the time of
185+ release branch-off, if applicable). See `oldestSupportedRelease`. */
186+ isInOldestRelease =
187+ /* Release number of feature introduction as an integer, e.g. 2111 for 21.11.
188+ Set it to the upcoming release, matching the nixpkgs/.version file.
189+ */
190+ release:
191+ release <= lib.trivial.oldestSupportedRelease;
192+
169193 /* Returns the current nixpkgs release code name.
170194
171195 On each release the first letter is bumped and a new animal is chosen
172196 starting with that new letter.
173197 */
174− codeName = "Porcupine";
198+ codeName = "Quokka";
175199
176200 /* Returns the current nixpkgs version suffix as string. */
177201 versionSuffix =
@@ -303,8 +327,80 @@ rec {
303327 # TODO: figure out a clever way to integrate location information from
304328 # something like __unsafeGetAttrPos.
305329
306− warn = msg: builtins.trace "warning: ${msg}";
307− warnIf = cond: msg: if cond then warn msg else id;
330+ /*
331+ Print a warning before returning the second argument. This function behaves
332+ like `builtins.trace`, but requires a string message and formats it as a
333+ warning, including the `warning: ` prefix.
334+
335+ To get a call stack trace and abort evaluation, set the environment variable
336+ `NIX_ABORT_ON_WARN=true` and set the Nix options `--option pure-eval false --show-trace`
337+
338+ Type: string -> a -> a
339+ */
340+ warn =
341+ if lib.elem (builtins.getEnv "NIX_ABORT_ON_WARN") ["1" "true" "yes"]
342+ then msg: builtins.trace "warning: ${msg}" (abort "NIX_ABORT_ON_WARN=true; warnings are treated as unrecoverable errors.")
343+ else msg: builtins.trace "warning: ${msg}";
344+
345+ /*
346+ Like warn, but only warn when the first argument is `true`.
347+
348+ Type: bool -> string -> a -> a
349+ */
350+ warnIf = cond: msg: if cond then warn msg else x: x;
351+
352+ /*
353+ Like warnIf, but negated (warn if the first argument is `false`).
354+
355+ Type: bool -> string -> a -> a
356+ */
357+ warnIfNot = cond: msg: if cond then x: x else warn msg;
358+
359+ /*
360+ Like the `assert b; e` expression, but with a custom error message and
361+ without the semicolon.
362+
363+ If true, return the identity function, `r: r`.
364+
365+ If false, throw the error message.
366+
367+ Calls can be juxtaposed using function application, as `(r: r) a = a`, so
368+ `(r: r) (r: r) a = a`, and so forth.
369+
370+ Type: bool -> string -> a -> a
371+
372+ Example:
373+
374+ throwIfNot (lib.isList overlays) "The overlays argument to nixpkgs must be a list."
375+ lib.foldr (x: throwIfNot (lib.isFunction x) "All overlays passed to nixpkgs must be functions.") (r: r) overlays
376+ pkgs
377+
378+ */
379+ throwIfNot = cond: msg: if cond then x: x else throw msg;
380+
381+ /*
382+ Like throwIfNot, but negated (throw if the first argument is `true`).
383+
384+ Type: bool -> string -> a -> a
385+ */
386+ throwIf = cond: msg: if cond then throw msg else x: x;
387+
388+ /* Check if the elements in a list are valid values from a enum, returning the identity function, or throwing an error message otherwise.
389+
390+ Example:
391+ let colorVariants = ["bright" "dark" "black"]
392+ in checkListOfEnum "color variants" [ "standard" "light" "dark" ] colorVariants;
393+ =>
394+ error: color variants: bright, black unexpected; valid ones: standard, light, dark
395+
396+ Type: String -> List ComparableVal -> List ComparableVal -> a -> a
397+ */
398+ checkListOfEnum = msg: valid: given:
399+ let
400+ unexpected = lib.subtractLists valid given;
401+ in
402+ lib.throwIfNot (unexpected == [])
403+ "${msg}: ${builtins.concatStringsSep ", " (builtins.map builtins.toString unexpected)} unexpected; valid ones: ${builtins.concatStringsSep ", " (builtins.map builtins.toString valid)}";
308404
309405 info = msg: builtins.trace "INFO: ${msg}";
310406
@@ -345,6 +441,25 @@ rec {
345441 isFunction = f: builtins.isFunction f ||
346442 (f ? __functor && isFunction (f.__functor f));
347443
444+ /*
445+ Turns any non-callable values into constant functions.
446+ Returns callable values as is.
447+
448+ Example:
449+
450+ nix-repl> lib.toFunction 1 2
451+ 1
452+
453+ nix-repl> lib.toFunction (x: x + 1) 2
454+ 3
455+ */
456+ toFunction =
457+ # Any value
458+ v:
459+ if isFunction v
460+ then v
461+ else k: v;
462+
348463 /* Convert the given positive integer to a string of its hexadecimal
349464 representation. For example:
350465
lib/types.nix+135−51
@@ -32,7 +32,6 @@ let
3232 last
3333 length
3434 tail
35− unique
3635 ;
3736 inherit (lib.attrsets)
3837 attrNames
@@ -48,6 +47,7 @@ let
4847 mergeDefaultOption
4948 mergeEqualOption
5049 mergeOneOption
50+ mergeUniqueOption
5151 showFiles
5252 showOption
5353 ;
@@ -61,7 +61,11 @@ let
6161 boolToString
6262 ;
6363
64− inherit (lib.modules) mergeDefinitions;
64+ inherit (lib.modules)
65+ mergeDefinitions
66+ fixupOptionType
67+ mergeOptionDecls
68+ ;
6569 outer_types =
6670rec {
6771 isType = type: x: (x._type or "") == type;
@@ -162,6 +166,13 @@ rec {
162166 # nixos/doc/manual/development/option-types.xml!
163167 types = rec {
164168
169+ raw = mkOptionType rec {
170+ name = "raw";
171+ description = "raw value";
172+ check = value: true;
173+ merge = mergeOneOption;
174+ };
175+
165176 anything = mkOptionType {
166177 name = "anything";
167178 description = "anything";
@@ -192,6 +203,12 @@ rec {
192203 else (listOf anything).merge;
193204 # This is the type of packages, only accept a single definition
194205 stringCoercibleSet = mergeOneOption;
206+ lambda = loc: defs: arg: anything.merge
207+ (loc ++ [ "<function body>" ])
208+ (map (def: {
209+ file = def.file;
210+ value = def.value arg;
211+ }) defs);
195212 # Otherwise fall back to only allowing all equal definitions
196213 }.${commonType} or mergeEqualOption;
197214 in mergeFunction loc defs;
@@ -294,6 +311,19 @@ rec {
294311 inherit (str) merge;
295312 };
296313
314+ # Allow a newline character at the end and trim it in the merge function.
315+ singleLineStr =
316+ let
317+ inherit (strMatching "[^\n\r]*\n?") check merge;
318+ in
319+ mkOptionType {
320+ name = "singleLineStr";
321+ description = "(optionally newline-terminated) single-line string";
322+ inherit check;
323+ merge = loc: defs:
324+ lib.removeSuffix "\n" (merge loc defs);
325+ };
326+
297327 strMatching = pattern: mkOptionType {
298328 name = "strMatching ${escapeNixString pattern}";
299329 description = "string matching the pattern ${pattern}";
@@ -338,13 +368,21 @@ rec {
338368 emptyValue = { value = {}; };
339369 };
340370
341− # derivation is a reserved keyword.
371+ # A package is a top-level store path (/nix/store/hash-name). This includes:
372+ # - derivations
373+ # - more generally, attribute sets with an `outPath` or `__toString` attribute
374+ # pointing to a store path, e.g. flake inputs
375+ # - strings with context, e.g. "${pkgs.foo}" or (toString pkgs.foo)
376+ # - hardcoded store path literals (/nix/store/hash-foo) or strings without context
377+ # ("/nix/store/hash-foo"). These get a context added to them using builtins.storePath.
342378 package = mkOptionType {
343379 name = "package";
344380 check = x: isDerivation x || isStorePath x;
345381 merge = loc: defs:
346382 let res = mergeOneOption loc defs;
347− in if isDerivation res then res else toDerivation res;
383+ in if builtins.isPath res || (builtins.isString res && ! builtins.hasContext res)
384+ then toDerivation res
385+ else res;
348386 };
349387
350388 shellPackage = package // {
@@ -371,7 +409,7 @@ rec {
371409 ).optionalValue
372410 ) def.value
373411 ) defs)));
374− emptyValue = { value = {}; };
412+ emptyValue = { value = []; };
375413 getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["*"]);
376414 getSubModules = elemType.getSubModules;
377415 substSubModules = m: listOf (elemType.substSubModules m);
@@ -383,7 +421,7 @@ rec {
383421 let list = addCheck (types.listOf elemType) (l: l != []);
384422 in list // {
385423 description = "non-empty " + list.description;
386− # Note: emptyValue is left as is, because another module may define an element.
424+ emptyValue = { }; # no .value attr, meaning unset
387425 };
388426
389427 attrsOf = elemType: mkOptionType rec {
@@ -451,6 +489,18 @@ rec {
451489 nestedTypes.elemType = elemType;
452490 };
453491
492+ unique = { message }: type: mkOptionType rec {
493+ name = "unique";
494+ inherit (type) description check;
495+ merge = mergeUniqueOption { inherit message; };
496+ emptyValue = type.emptyValue;
497+ getSubOptions = type.getSubOptions;
498+ getSubModules = type.getSubModules;
499+ substSubModules = m: uniq (type.substSubModules m);
500+ functor = (defaultFunctor name) // { wrapped = type; };
501+ nestedTypes.elemType = type;
502+ };
503+
454504 # Null or value of ...
455505 nullOr = elemType: mkOptionType rec {
456506 name = "nullOr";
@@ -472,7 +522,7 @@ rec {
472522
473523 functionTo = elemType: mkOptionType {
474524 name = "functionTo";
475− description = "function that evaluates to a(n) ${elemType.name}";
525+ description = "function that evaluates to a(n) ${elemType.description}";
476526 check = isFunction;
477527 merge = loc: defs:
478528 fnArgs: (mergeDefinitions (loc ++ [ "[function body]" ]) elemType (map (fn: { inherit (fn) file; value = fn.value fnArgs; }) defs)).mergedValue;
@@ -487,29 +537,84 @@ rec {
487537 modules = toList modules;
488538 };
489539
540+ # The type of a type!
541+ optionType = mkOptionType {
542+ name = "optionType";
543+ description = "optionType";
544+ check = value: value._type or null == "option-type";
545+ merge = loc: defs:
546+ if length defs == 1
547+ then (head defs).value
548+ else let
549+ # Prepares the type definitions for mergeOptionDecls, which
550+ # annotates submodules types with file locations
551+ optionModules = map ({ value, file }:
552+ {
553+ _file = file;
554+ # There's no way to merge types directly from the module system,
555+ # but we can cheat a bit by just declaring an option with the type
556+ options = lib.mkOption {
557+ type = value;
558+ };
559+ }
560+ ) defs;
561+ # Merges all the types into a single one, including submodule merging.
562+ # This also propagates file information to all submodules
563+ mergedOption = fixupOptionType loc (mergeOptionDecls loc optionModules);
564+ in mergedOption.type;
565+ };
566+
490567 submoduleWith =
491568 { modules
492569 , specialArgs ? {}
493570 , shorthandOnlyDefinesConfig ? false
571+
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
494576 }@attrs:
495577 let
496578 inherit (lib.modules) evalModules;
497579
498− coerce = unify: value: if isFunction value
499− then setFunctionArgs (args: unify (value args)) (functionArgs value)
500− else unify (if shorthandOnlyDefinesConfig then { config = value; } else value);
501−
502− allModules = defs: modules ++ imap1 (n: { value, file }:
503− if isAttrs value || isFunction value then
504− # Annotate the value with the location of its definition for better error messages
505− coerce (lib.modules.unifyModuleSyntax file "${toString file}-${toString n}") value
580+ shorthandToModule = if shorthandOnlyDefinesConfig == false
581+ then value: value
582+ else value: { config = value; };
583+
584+ allModules = defs: imap1 (n: { value, file }:
585+ if isFunction value
586+ then setFunctionArgs
587+ (args: lib.modules.unifyModuleSyntax file "${toString file}-${toString (n + extensionOffset)}" (value args))
588+ (functionArgs value)
589+ else if isAttrs value
590+ then
591+ lib.modules.unifyModuleSyntax file "${toString file}-${toString (n + extensionOffset)}" (shorthandToModule value)
506592 else value
507593 ) defs;
508594
509− freeformType = (evalModules {
510− inherit modules specialArgs;
511− args.name = "‹name›";
512− })._module.freeformType;
595+ base = evalModules {
596+ inherit specialArgs;
597+ modules = [{
598+ # This is a work-around for the fact that some sub-modules,
599+ # such as the one included in an attribute set, expects an "args"
600+ # attribute to be given to the sub-module. As the option
601+ # evaluation does not have any specific attribute name yet, we
602+ # provide a default for the documentation and the freeform type.
603+ #
604+ # This is necessary as some option declaration might use the
605+ # "name" attribute given as argument of the submodule and use it
606+ # as the default of option declarations.
607+ #
608+ # We use lookalike unicode single angle quotation marks because
609+ # of the docbook transformation the options receive. In all uses
610+ # &gt; and &lt; wouldn't be encoded correctly so the encoded values
611+ # would be used, and use of `<` and `>` would break the XML document.
612+ # It shouldn't cause an issue since this is cosmetic for the manual.
613+ _module.args.name = lib.mkOptionDefault "‹name›";
614+ }] ++ modules;
615+ };
616+
617+ freeformType = base._module.freeformType;
513618
514619 in
515620 mkOptionType rec {
@@ -517,32 +622,14 @@ rec {
517622 description = freeformType.description or name;
518623 check = x: isAttrs x || isFunction x || path.check x;
519624 merge = loc: defs:
520− (evalModules {
521− modules = allModules defs;
522− inherit specialArgs;
523− args.name = last loc;
625+ (base.extendModules {
626+ modules = [ { _module.args.name = last loc; } ] ++ allModules defs;
524627 prefix = loc;
628+ extensionOffset = extensionOffset + length defs;
525629 }).config;
526630 emptyValue = { value = {}; };
527− getSubOptions = prefix: (evalModules
528− { inherit modules prefix specialArgs;
529− # This is a work-around due to the fact that some sub-modules,
530− # such as the one included in an attribute set, expects a "args"
531− # attribute to be given to the sub-module. As the option
532− # evaluation does not have any specific attribute name, we
533− # provide a default one for the documentation.
534− #
535− # This is mandatory as some option declaration might use the
536− # "name" attribute given as argument of the submodule and use it
537− # as the default of option declarations.
538− #
539− # Using lookalike unicode single angle quotation marks because
540− # of the docbook transformation the options receive. In all uses
541− # &gt; and &lt; wouldn't be encoded correctly so the encoded values
542− # would be used, and use of `<` and `>` would break the XML document.
543− # It shouldn't cause an issue since this is cosmetic for the manual.
544− args.name = "‹name›";
545− }).options // optionalAttrs (freeformType != null) {
631+ getSubOptions = prefix: (base.extendModules
632+ { inherit prefix; }).options // optionalAttrs (freeformType != null) {
546633 # Expose the sub options of the freeform type. Note that the option
547634 # discovery doesn't care about the attribute name used here, so this
548635 # is just to avoid conflicts with potential options from the submodule
@@ -570,7 +657,11 @@ rec {
570657 then lhs.specialArgs // rhs.specialArgs
571658 else throw "A submoduleWith option is declared multiple times with the same specialArgs \"${toString (attrNames intersecting)}\"";
572659 shorthandOnlyDefinesConfig =
573− if lhs.shorthandOnlyDefinesConfig == rhs.shorthandOnlyDefinesConfig
660+ if lhs.shorthandOnlyDefinesConfig == null
661+ then rhs.shorthandOnlyDefinesConfig
662+ else if rhs.shorthandOnlyDefinesConfig == null
663+ then lhs.shorthandOnlyDefinesConfig
664+ else if lhs.shorthandOnlyDefinesConfig == rhs.shorthandOnlyDefinesConfig
574665 then lhs.shorthandOnlyDefinesConfig
575666 else throw "A submoduleWith option is declared multiple times with conflicting shorthandOnlyDefinesConfig values";
576667 };
@@ -580,6 +671,7 @@ rec {
580671 # A value from a set of allowed ones.
581672 enum = values:
582673 let
674+ inherit (lib.lists) unique;
583675 show = v:
584676 if builtins.isString v then ''"${v}"''
585677 else if builtins.isInt v then builtins.toString v
@@ -663,14 +755,6 @@ rec {
663755 nestedTypes.finalType = finalType;
664756 };
665757
666− # Obsolete alternative to configOf. It takes its option
667− # declarations from the ‘options’ attribute of containing option
668− # declaration.
669− optionSet = mkOptionType {
670− name = "optionSet";
671− description = "option set";
672− deprecationMessage = "Use `types.submodule' instead";
673− };
674758 # Augment the given type with an additional type check function.
675759 addCheck = elemType: check: elemType // { check = x: elemType.check x && check x; };
676760
maintainers/maintainer-list.nix+2232−182
@@ -6,6 +6,7 @@
66 email = "address@example.org";
77
88 # Optional
9+ matrix = "@user:example.org";
910 github = "GithubUsername";
1011 githubId = your-github-id;
1112 keys = [{
@@ -19,7 +20,8 @@
1920
2021 - `handle` is the handle you are going to use in nixpkgs expressions,
2122 - `name` is your, preferably real, name,
22− - `email` is your maintainer email address, and
23+ - `email` is your maintainer email address,
24+ - `matrix` is your Matrix user ID,
2325 - `github` is your GitHub handle (as it appears in the URL of your profile page, `https://github.com/<userhandle>`),
2426 - `githubId` is your GitHub user ID, which can be found at `https://api.github.com/users/<userhandle>`,
2527 - `keys` is a list of your PGP/GPG key IDs and fingerprints.
@@ -56,6 +58,7 @@
5658 };
5759 _0x4A6F = {
5860 email = "mail-maintainer@0x4A6F.dev";
61+ matrix = "@0x4a6f:matrix.org";
5962 name = "Joachim Ernst";
6063 github = "0x4A6F";
6164 githubId = 9675338;
@@ -92,6 +95,12 @@
9295 githubId = 7414843;
9396 name = "Nicholas von Klitzing";
9497 };
98+ _13r0ck = {
99+ name = "Brock Szuszczewicz";
100+ email = "bnr@tuta.io";
101+ github = "13r0ck";
102+ githubId = 58987761;
103+ };
95104 _3noch = {
96105 email = "eacameron@gmail.com";
97106 github = "3noch";
@@ -116,18 +125,32 @@
116125 githubId = 241628;
117126 name = "Adam Russell";
118127 };
128+ aadibajpai = {
129+ email = "hello@aadibajpai.com";
130+ github = "aadibajpai";
131+ githubId = 27063113;
132+ name = "Aadi Bajpai";
133+ };
119134 aanderse = {
120135 email = "aaron@fosslib.net";
136+ matrix = "@aanderse:nixos.dev";
121137 github = "aanderse";
122138 githubId = 7755101;
123139 name = "Aaron Andersen";
124140 };
125141 aaronjanse = {
126142 email = "aaron@ajanse.me";
143+ matrix = "@aaronjanse:matrix.org";
127144 github = "aaronjanse";
128145 githubId = 16829510;
129146 name = "Aaron Janse";
130147 };
148+ aaronjheng = {
149+ email = "wentworth@outlook.com";
150+ github = "aaronjheng";
151+ githubId = 806876;
152+ name = "Aaron Jheng";
153+ };
131154 aaronschif = {
132155 email = "aaronschif@gmail.com";
133156 github = "aaronschif";
@@ -154,6 +177,7 @@
154177 };
155178 abbe = {
156179 email = "ashish.is@lostca.se";
180+ matrix = "@abbe:badti.me";
157181 github = "wahjava";
158182 githubId = 2255192;
159183 name = "Ashish SHUKLA";
@@ -242,12 +266,14 @@
242266 };
243267 addict3d = {
244268 email = "nickbathum@gmail.com";
269+ matrix = "@nbathum:matrix.org";
245270 github = "addict3d";
246271 githubId = 49227;
247272 name = "Nick Bathum";
248273 };
249274 adisbladis = {
250275 email = "adisbladis@gmail.com";
276+ matrix = "@adis:blad.is";
251277 github = "adisbladis";
252278 githubId = 63286;
253279 name = "Adam Hose";
@@ -270,6 +296,12 @@
270296 githubId = 1250775;
271297 name = "Adolfo E. García Castro";
272298 };
299+ AdsonCicilioti = {
300+ name = "Adson Cicilioti";
301+ email = "adson.cicilioti@live.com";
302+ github = "AdsonCicilioti";
303+ githubId = 6278398;
304+ };
273305 adsr = {
274306 email = "as@php.net";
275307 github = "adsr";
@@ -343,10 +375,16 @@
343375 name = "AmirHossein Roozbahani";
344376 };
345377 ahuzik = {
346− email = "ales.guzik@gmail.com";
347− github = "alesguzik";
378+ email = "ah1990au@gmail.com";
379+ github = "alesya-h";
348380 githubId = 209175;
349− name = "Ales Huzik";
381+ name = "Alesya Huzik";
382+ };
383+ aidalgol = {
384+ email = "aidalgol+nixpkgs@fastmail.net";
385+ github = "aidalgol";
386+ githubId = 2313201;
387+ name = "Aidan Gauland";
350388 };
351389 aij = {
352390 email = "aij+git@mrph.org";
@@ -354,8 +392,15 @@
354392 githubId = 4732885;
355393 name = "Ivan Jager";
356394 };
395+ airwoodix = {
396+ email = "airwoodix@posteo.me";
397+ github = "airwoodix";
398+ githubId = 44871469;
399+ name = "Etienne Wodey";
400+ };
357401 ajs124 = {
358402 email = "nix@ajs124.de";
403+ matrix = "@andreas.schraegle:helsinki-systems.de";
359404 github = "ajs124";
360405 githubId = 1229027;
361406 name = "Andreas Schrägle";
@@ -426,6 +471,12 @@
426471 githubId = 173595;
427472 name = "Caleb Maclennan";
428473 };
474+ ALEX11BR = {
475+ email = "alexioanpopa11@gmail.com";
476+ github = "ALEX11BR";
477+ githubId = 49609151;
478+ name = "Popa Ioan Alexandru";
479+ };
429480 alexarice = {
430481 email = "alexrice999@hotmail.co.uk";
431482 github = "alexarice";
@@ -456,6 +507,12 @@
456507 githubId = 2335822;
457508 name = "Alexandre Esteves";
458509 };
510+ alexnortung = {
511+ name = "alexnortung";
512+ email = "alex_nortung@live.dk";
513+ github = "alexnortung";
514+ githubId = 1552267;
515+ };
459516 alexvorobiev = {
460517 email = "alexander.vorobiev@gmail.com";
461518 github = "alexvorobiev";
@@ -468,9 +525,11 @@
468525 githubId = 38869148;
469526 name = "Alex Eyre";
470527 };
471− algorith = {
472− email = "dries_van_daele@telenet.be";
473− name = "Dries Van Daele";
528+ algram = {
529+ email = "aliasgram@gmail.com";
530+ github = "Algram";
531+ githubId = 5053729;
532+ name = "Alias Gram";
474533 };
475534 alibabzo = {
476535 email = "alistair.bill@gmail.com";
@@ -532,6 +591,16 @@
532591 fingerprint = "B422 CFB1 C9EF 73F7 E1E2 698D F53E 3233 42F7 A6D3A";
533592 }];
534593 };
594+ alyaeanyx = {
595+ email = "alexandra.hollmeier@mailbox.org";
596+ github = "alyaeanyx";
597+ githubId = 74795488;
598+ name = "Alexandra Hollmeier";
599+ keys = [{
600+ longkeyid = "rsa3072/0x87D1AADCD25B8DEE";
601+ fingerprint = "1F73 8879 5E5A 3DFC E2B3 FA32 87D1 AADC D25B 8DEE";
602+ }];
603+ };
535604 amanjeev = {
536605 email = "aj@amanjeev.com";
537606 github = "amanjeev";
@@ -544,6 +613,12 @@
544613 githubId = 15623522;
545614 name = "Amar Paul";
546615 };
616+ amarshall = {
617+ email = "andrew@johnandrewmarshall.com";
618+ github = "amarshall";
619+ githubId = 153175;
620+ name = "Andrew Marshall";
621+ };
547622 ambroisie = {
548623 email = "bruno.nixpkgs@belanyi.fr";
549624 github = "ambroisie";
@@ -556,6 +631,22 @@
556631 githubId = 2626481;
557632 name = "Ambroz Bizjak";
558633 };
634+ ametrine = {
635+ name = "Matilde Ametrine";
636+ email = "matilde@diffyq.xyz";
637+ github = "matilde-ametrine";
638+ githubId = 90799677;
639+ keys = [{
640+ longkeyid = "rsa3072/0x07EE1FFCA58A11C5";
641+ fingerprint = "7931 EB4E 4712 D7BE 04F8 6D34 07EE 1FFC A58A 11C5";
642+ }];
643+ };
644+ amfl = {
645+ email = "amfl@none.none";
646+ github = "amfl";
647+ githubId = 382798;
648+ name = "amfl";
649+ };
559650 amiddelk = {
560651 email = "amiddelk@gmail.com";
561652 github = "amiddelk";
@@ -590,6 +681,18 @@
590681 githubId = 858965;
591682 name = "Andrew Morsillo";
592683 };
684+ an-empty-string = {
685+ name = "Tris Emmy Wilson";
686+ email = "tris@tris.fyi";
687+ github = "an-empty-string";
688+ githubId = 681716;
689+ };
690+ AnatolyPopov = {
691+ email = "aipopov@live.ru";
692+ github = "AnatolyPopov";
693+ githubId = 2312534;
694+ name = "Anatolii Popov";
695+ };
593696 andehen = {
594697 email = "git@andehen.net";
595698 github = "andehen";
@@ -692,12 +795,6 @@
692795 githubId = 11699655;
693796 name = "Stanislas Lange";
694797 };
695− angustrau = {
696− name = "Angus Trau";
697− email = "nix@angus.ws";
698− github = "angustrau";
699− githubId = 13267947;
700− };
701798 anhdle14 = {
702799 name = "Le Anh Duc";
703800 email = "anhdle14@icloud.com";
@@ -714,6 +811,12 @@
714811 githubId = 1771266;
715812 name = "Vo Anh Duy";
716813 };
814+ anirrudh = {
815+ email = "anik597@gmail.com";
816+ github = "anirrudh";
817+ githubId = 6091755;
818+ name = "Anirrudh Krishnan";
819+ };
717820 ankhers = {
718821 email = "me@ankhers.dev";
719822 github = "ankhers";
@@ -738,6 +841,13 @@
738841 githubId = 5327697;
739842 name = "Anatolii Prylutskyi";
740843 };
844+ anselmschueler = {
845+ email = "mail@anselmschueler.com";
846+ github = "schuelermine";
847+ githubId = 48802534;
848+ name = "Anselm Schüler";
849+ matrix = "@schuelermine:matrix.org";
850+ };
741851 antoinerg = {
742852 email = "roygobeil.antoine@gmail.com";
743853 github = "antoinerg";
@@ -850,6 +960,18 @@
850960 githubId = 1296771;
851961 name = "Anders Riutta";
852962 };
963+ arjan-s = {
964+ email = "github@anymore.nl";
965+ github = "arjan-s";
966+ githubId = 10400299;
967+ name = "Arjan Schrijver";
968+ };
969+ arkivm = {
970+ email = "vikram186@gmail.com";
971+ github = "arkivm";
972+ githubId = 1118815;
973+ name = "Vikram Narayanan";
974+ };
853975 armijnhemel = {
854976 email = "armijn@tjaldur.nl";
855977 github = "armijnhemel";
@@ -868,6 +990,12 @@
868990 githubId = 59696216;
869991 name = "Arnold Farkas";
870992 };
993+ arnoutkroeze = {
994+ email = "nixpkgs@arnoutkroeze.nl";
995+ github = "arnoutkroeze";
996+ githubId = 37151054;
997+ name = "Arnout Kroeze";
998+ };
871999 arobyn = {
8721000 email = "shados@shados.net";
8731001 github = "shados";
@@ -910,6 +1038,7 @@
9101038 };
9111039 asbachb = {
9121040 email = "asbachb-nixpkgs-5c2a@impl.it";
1041+ matrix = "@asbachb:matrix.org";
9131042 github = "asbachb";
9141043 githubId = 1482768;
9151044 name = "Benjamin Asbach";
@@ -939,8 +1068,8 @@
9391068 name = "Kirill Boltaev";
9401069 };
9411070 ashley = {
942− email = "personavinny@protonmail.com";
943− github = "paranoidcat";
1071+ email = "ashley@kira64.xyz";
1072+ github = "kira64xyz";
9441073 githubId = 84152630;
9451074 name = "Ashley Chiara";
9461075 };
@@ -990,6 +1119,12 @@
9901119 githubId = 55833;
9911120 name = "Troels Henriksen";
9921121 };
1122+ atila = {
1123+ name = "Átila Saraiva";
1124+ email = "atilasaraiva@gmail.com";
1125+ github = "AtilaSaraiva";
1126+ githubId = 29521461;
1127+ };
9931128 atkinschang = {
9941129 email = "atkinschang+nixpkgs@gmail.com";
9951130 github = "AtkinsChang";
@@ -1020,6 +1155,12 @@
10201155 githubId = 354741;
10211156 name = "Austin Butler";
10221157 };
1158+ autophagy = {
1159+ email = "mail@autophagy.io";
1160+ github = "autophagy";
1161+ githubId = 12958979;
1162+ name = "Mika Naylor";
1163+ };
10231164 avaq = {
10241165 email = "nixpkgs@account.avaq.it";
10251166 github = "avaq";
@@ -1080,10 +1221,34 @@
10801221 };
10811222 artturin = {
10821223 email = "artturin@artturin.com";
1224+ matrix = "@artturin:matrix.org";
10831225 github = "artturin";
10841226 githubId = 56650223;
10851227 name = "Artturi N";
10861228 };
1229+ azahi = {
1230+ name = "Azat Bahawi";
1231+ email = "azat@bahawi.net";
1232+ matrix = "@azahi:azahi.cc";
1233+ github = "azahi";
1234+ githubId = 22211000;
1235+ keys = [{
1236+ longkeyid = "rsa4096/0xC8C6BDDB3847F72B";
1237+ fingerprint = "2688 0377 C31D 9E81 9BDF 83A8 C8C6 BDDB 3847 F72B";
1238+ }];
1239+ };
1240+ ayazhafiz = {
1241+ email = "ayaz.hafiz.1@gmail.com";
1242+ github = "ayazhafiz";
1243+ githubId = 262763;
1244+ name = "Ayaz Hafiz";
1245+ };
1246+ azuwis = {
1247+ email = "azuwis@gmail.com";
1248+ github = "azuwis";
1249+ githubId = 9315;
1250+ name = "Zhong Jianxin";
1251+ };
10871252 b4dm4n = {
10881253 email = "fabianm88@gmail.com";
10891254 github = "B4dM4n";
@@ -1116,6 +1281,7 @@
11161281 };
11171282 bachp = {
11181283 email = "pascal.bach@nextrem.ch";
1284+ matrix = "@bachp:matrix.org";
11191285 github = "bachp";
11201286 githubId = 333807;
11211287 name = "Pascal Bach";
@@ -1136,6 +1302,12 @@
11361302 email = "sivaraman.balaji@gmail.com";
11371303 name = "Balaji Sivaraman";
11381304 };
1305+ balodja = {
1306+ email = "balodja@gmail.com";
1307+ github = "balodja";
1308+ githubId = 294444;
1309+ name = "Vladimir Korolev";
1310+ };
11391311 baloo = {
11401312 email = "nixpkgs@superbaloo.net";
11411313 github = "baloo";
@@ -1160,12 +1332,24 @@
11601332 githubId = 127523;
11611333 name = "Herman Fries";
11621334 };
1335+ BarinovMaxim = {
1336+ name = "Barinov Maxim";
1337+ email = "barinov274@gmail.com";
1338+ github = "barinov274";
1339+ githubId = 54442153;
1340+ };
11631341 barrucadu = {
11641342 email = "mike@barrucadu.co.uk";
11651343 github = "barrucadu";
11661344 githubId = 75235;
11671345 name = "Michael Walker";
11681346 };
1347+ bartsch = {
1348+ email = "consume.noise@gmail.com";
1349+ github = "bartsch";
1350+ githubId = 3390885;
1351+ name = "Daniel Martin";
1352+ };
11691353 bartuka = {
11701354 email = "wand@hey.com";
11711355 github = "wandersoncferreira";
@@ -1190,6 +1374,7 @@
11901374 };
11911375 bb010g = {
11921376 email = "me@bb010g.com";
1377+ matrix = "@bb010g:matrix.org";
11931378 github = "bb010g";
11941379 githubId = 340132;
11951380 name = "Brayden Banks";
@@ -1224,6 +1409,12 @@
12241409 githubId = 164148;
12251410 name = "Ben Darwin";
12261411 };
1412+ bdd = {
1413+ email = "bdd@mindcast.org";
1414+ github = "bdd";
1415+ githubId = 11135;
1416+ name = "Berk D. Demir";
1417+ };
12271418 bdesham = {
12281419 email = "benjamin@esham.io";
12291420 github = "bdesham";
@@ -1250,6 +1441,7 @@
12501441 };
12511442 bendlas = {
12521443 email = "herwig@bendlas.net";
1444+ matrix = "@bendlas:matrix.org";
12531445 github = "bendlas";
12541446 githubId = 214787;
12551447 name = "Herwig Hochleitner";
@@ -1296,6 +1488,7 @@
12961488 };
12971489 berberman = {
12981490 email = "berberman@yandex.com";
1491+ matrix = "@berberman:mozilla.org";
12991492 github = "berberman";
13001493 githubId = 26041945;
13011494 name = "Potato Hatsue";
@@ -1318,6 +1511,12 @@
13181511 githubId = 251106;
13191512 name = "Daniel Bergey";
13201513 };
1514+ bergkvist = {
1515+ email = "tobias@bergkv.ist";
1516+ github = "bergkvist";
1517+ githubId = 410028;
1518+ name = "Tobias Bergkvist";
1519+ };
13211520 betaboon = {
13221521 email = "betaboon@0x80.ninja";
13231522 github = "betaboon";
@@ -1360,6 +1559,12 @@
13601559 githubId = 28444296;
13611560 name = "Benjamin Hougland";
13621561 };
1562+ billewanick = {
1563+ email = "bill@ewanick.com";
1564+ github = "billewanick";
1565+ githubId = 13324165;
1566+ name = "Bill Ewanick";
1567+ };
13631568 binarin = {
13641569 email = "binarin@binarin.ru";
13651570 github = "binarin";
@@ -1396,6 +1601,7 @@
13961601 };
13971602 blitz = {
13981603 email = "js@alien8.de";
1604+ matrix = "@js:ukvly.org";
13991605 github = "blitz";
14001606 githubId = 37907;
14011607 name = "Julian Stecklina";
@@ -1433,6 +1639,7 @@
14331639 bobby285271 = {
14341640 name = "Bobby Rong";
14351641 email = "rjl931189261@126.com";
1642+ matrix = "@bobby285271:matrix.org";
14361643 github = "bobby285271";
14371644 githubId = 20080233;
14381645 };
@@ -1466,6 +1673,16 @@
14661673 githubId = 87764;
14671674 name = "Ben Ford";
14681675 };
1676+ boppyt = {
1677+ email = "boppy@nwcpz.com";
1678+ github = "boppyt";
1679+ githubId = 71049646;
1680+ name = "Zack A";
1681+ keys = [{
1682+ longkeyid = "rsa4096/0x6310C97DE31D1545";
1683+ fingerprint = "E8D7 5C19 9F65 269B 439D F77B 6310 C97D E31D 1545";
1684+ }];
1685+ };
14691686 borisbabic = {
14701687 email = "boris.ivan.babic@gmail.com";
14711688 github = "borisbabic";
@@ -1520,6 +1737,12 @@
15201737 githubId = 355401;
15211738 name = "Brian Hicks";
15221739 };
1740+ brianmcgee = {
1741+ name = "Brian McGee";
1742+ email = "brian@41north.dev";
1743+ github = "brianmcgee";
1744+ githubId = 1173648;
1745+ };
15231746 Br1ght0ne = {
15241747 email = "brightone@protonmail.com";
15251748 github = "Br1ght0ne";
@@ -1570,8 +1793,15 @@
15701793 fingerprint = "BF4FCB85C69989B4ED95BF938AE74787A4B7C07E";
15711794 }];
15721795 };
1796+ broke = {
1797+ email = "broke@in-fucking.space";
1798+ github = "broke";
1799+ githubId = 1071610;
1800+ name = "Gunnar Nitsche";
1801+ };
15731802 bryanasdev000 = {
15741803 email = "bryanasdev000@gmail.com";
1804+ matrix = "@bryanasdev000:matrix.org";
15751805 github = "bryanasdev000";
15761806 githubId = 53131727;
15771807 name = "Bryan Albuquerque";
@@ -1584,6 +1814,7 @@
15841814 };
15851815 buckley310 = {
15861816 email = "sean.bck@gmail.com";
1817+ matrix = "@buckley310:matrix.org";
15871818 github = "buckley310";
15881819 githubId = 2379774;
15891820 name = "Sean Buckley";
@@ -1600,6 +1831,12 @@
16001831 githubId = 7214361;
16011832 name = "Roman Gerasimenko";
16021833 };
1834+ builditluc = {
1835+ email = "builditluc@icloud.com";
1836+ github = "builditluc";
1837+ githubId = 37375448;
1838+ name = "Buildit";
1839+ };
16031840 bburdette = {
16041841 email = "bburdette@protonmail.com";
16051842 github = "bburdette";
@@ -1677,6 +1914,12 @@
16771914 githubId = 7435854;
16781915 name = "Victor Calvert";
16791916 };
1917+ cameronnemo = {
1918+ email = "cnemo@tutanota.com";
1919+ github = "cameronnemo";
1920+ githubId = 3212452;
1921+ name = "Cameron Nemo";
1922+ };
16801923 campadrenalin = {
16811924 email = "campadrenalin@gmail.com";
16821925 github = "campadrenalin";
@@ -1713,6 +1956,12 @@
17131956 githubId = 82591;
17141957 name = "Carl Sverre";
17151958 };
1959+ carpinchomug = {
1960+ email = "aki.suda@protonmail.com";
1961+ github = "carpinchomug";
1962+ githubId = 101536256;
1963+ name = "Akiyoshi Suda";
1964+ };
17161965 cartr = {
17171966 email = "carter.sande@duodecima.technology";
17181967 github = "cartr";
@@ -1737,6 +1986,13 @@
17371986 githubId = 495429;
17381987 name = "Claas Augner";
17391988 };
1989+ cawilliamson = {
1990+ email = "home@chrisaw.com";
1991+ github = "cawilliamson";
1992+ githubId = 1141769;
1993+ matrix = "@cawilliamson:nixos.dev";
1994+ name = "Christopher A. Williamson";
1995+ };
17401996 cbley = {
17411997 email = "claudio.bley@gmail.com";
17421998 github = "avdv";
@@ -1748,15 +2004,14 @@
17482004 github = "cburstedde";
17492005 githubId = 109908;
17502006 name = "Carsten Burstedde";
1751− keys = [
1752− {
1753− longkeyid = "rsa2048/0x0704CD9E550A6BCD";
1754− fingerprint = "1127 A432 6524 BF02 737B 544E 0704 CD9E 550A 6BCD";
1755− }
1756− ];
2007+ keys = [{
2008+ longkeyid = "rsa2048/0x0704CD9E550A6BCD";
2009+ fingerprint = "1127 A432 6524 BF02 737B 544E 0704 CD9E 550A 6BCD";
2010+ }];
17572011 };
17582012 cdepillabout = {
17592013 email = "cdep.illabout@gmail.com";
2014+ matrix = "@cdepillabout:matrix.org";
17602015 github = "cdepillabout";
17612016 githubId = 64804;
17622017 name = "Dennis Gosnell";
@@ -1779,6 +2034,12 @@
17792034 githubId = 543423;
17802035 name = "Alex Wied";
17812036 };
2037+ cfhammill = {
2038+ email = "cfhammill@gmail.com";
2039+ github = "cfhammill";
2040+ githubId = 7467038;
2041+ name = "Chris Hammill";
2042+ };
17822043 cfouche = {
17832044 email = "chaddai.fouche@gmail.com";
17842045 github = "Chaddai";
@@ -1819,6 +2080,18 @@
18192080 githubId = 1762540;
18202081 name = "Changlin Li";
18212082 };
2083+ chanley = {
2084+ email = "charlieshanley@gmail.com";
2085+ github = "charlieshanley";
2086+ githubId = 8228888;
2087+ name = "Charlie Hanley";
2088+ };
2089+ charlesbaynham = {
2090+ email = "charlesbaynham@gmail.com";
2091+ github = "charlesbaynham";
2092+ githubId = 4397637;
2093+ name = "Charles Baynham";
2094+ };
18222095 CharlesHD = {
18232096 email = "charleshdespointes@gmail.com";
18242097 github = "CharlesHD";
@@ -1835,6 +2108,12 @@
18352108 email = "me@philscotted.com";
18362109 name = "Phil Scott";
18372110 };
2111+ chekoopa = {
2112+ email = "chekoopa@mail.ru";
2113+ github = "chekoopa";
2114+ githubId = 1689801;
2115+ name = "Mikhail Chekan";
2116+ };
18382117 ChengCat = {
18392118 email = "yu@cheng.cat";
18402119 github = "ChengCat";
@@ -1853,12 +2132,6 @@
18532132 githubId = 18648043;
18542133 name = "Daniel Cartwright";
18552134 };
1856− chiiruno = {
1857− email = "okinan@protonmail.com";
1858− github = "chiiruno";
1859− githubId = 30435868;
1860− name = "Okina Matara";
1861− };
18622135 Chili-Man = {
18632136 email = "dr.elhombrechile@gmail.com";
18642137 name = "Diego Rodriguez";
@@ -1875,6 +2148,12 @@
18752148 githubId = 3086255;
18762149 name = "Barry Moore II";
18772150 };
2151+ chisui = {
2152+ email = "chisui.pd@gmail.com";
2153+ github = "chisui";
2154+ githubId = 4526429;
2155+ name = "Philipp Dargel";
2156+ };
18782157 chivay = {
18792158 email = "hubert.jasudowicz@gmail.com";
18802159 github = "chivay";
@@ -1911,12 +2190,6 @@
19112190 githubId = 399718;
19122191 name = "Chris Martin";
19132192 };
1914− chrisaw = {
1915− email = "home@chrisaw.com";
1916− github = "cawilliamson";
1917− githubId = 1141769;
1918− name = "Christopher A. Williamson";
1919− };
19202193 chrisjefferson = {
19212194 email = "chris@bubblescope.net";
19222195 github = "chrisjefferson";
@@ -1957,18 +2230,42 @@
19572230 githubId = 12386805;
19582231 name = "Chua Hou";
19592232 };
2233+ chuangzhu = {
2234+ name = "Chuang Zhu";
2235+ email = "chuang@melty.land";
2236+ matrix = "@chuangzhu:matrix.org";
2237+ github = "chuangzhu";
2238+ githubId = 31200881;
2239+ keys = [{
2240+ longkeyid = "rsa4096/E838CED81CFFD3F9";
2241+ fingerprint = "5D03 A5E6 0754 A3E3 CA57 5037 E838 CED8 1CFF D3F9";
2242+ }];
2243+ };
19602244 chvp = {
19612245 email = "nixpkgs@cvpetegem.be";
2246+ matrix = "@charlotte:vanpetegem.me";
19622247 github = "chvp";
19632248 githubId = 42220376;
19642249 name = "Charlotte Van Petegem";
19652250 };
2251+ cigrainger = {
2252+ name = "Christopher Grainger";
2253+ email = "chris@amplified.ai";
2254+ github = "cigrainger";
2255+ githubId = 3984794;
2256+ };
19662257 ciil = {
19672258 email = "simon@lackerbauer.com";
19682259 github = "ciil";
19692260 githubId = 3956062;
19702261 name = "Simon Lackerbauer";
19712262 };
2263+ cirno-999 = {
2264+ email = "reverene@protonmail.com";
2265+ github = "cirno-999";
2266+ githubId = 73712874;
2267+ name = "cirno-999";
2268+ };
19722269 citadelcore = {
19732270 email = "alex@arctarus.co.uk";
19742271 github = "citadelcore";
@@ -1997,6 +2294,17 @@
19972294 githubId = 25088352;
19982295 name = "Christian Kögler";
19992296 };
2297+ ckie = {
2298+ email = "nixpkgs-0efe364@ckie.dev";
2299+ github = "ckiee";
2300+ githubId = 25263210;
2301+ keys = [{
2302+ longkeyid = "rsa4096/0x13E79449C0525215";
2303+ fingerprint = "539F 0655 4D35 38A5 429A E253 13E7 9449 C052 5215";
2304+ }];
2305+ name = "ckie";
2306+ matrix = "@ckie:ckie.dev";
2307+ };
20002308 clkamp = {
20012309 email = "c@lkamp.de";
20022310 github = "clkamp";
@@ -2021,8 +2329,15 @@
20212329 githubId = 199180;
20222330 name = "Claes Wallin";
20232331 };
2332+ cleeyv = {
2333+ email = "cleeyv@riseup.net";
2334+ github = "cleeyv";
2335+ githubId = 71959829;
2336+ name = "Cleeyv";
2337+ };
20242338 cleverca22 = {
20252339 email = "cleverca22@gmail.com";
2340+ matrix = "@cleverca22:matrix.org";
20262341 github = "cleverca22";
20272342 githubId = 848609;
20282343 name = "Michael Bishop";
@@ -2067,6 +2382,12 @@
20672382 githubId = 34317;
20682383 name = "Corey O'Connor";
20692384 };
2385+ CodeLongAndProsper90 = {
2386+ github = "CodeLongAndProsper90";
2387+ githubId = 50145141;
2388+ email = "jupiter@m.rdis.dev";
2389+ name = "Scott Little";
2390+ };
20702391 codsl = {
20712392 email = "codsl@riseup.net";
20722393 github = "codsl";
@@ -2079,6 +2400,13 @@
20792400 githubId = 5561189;
20802401 name = "Cody Opel";
20812402 };
2403+ Cogitri = {
2404+ email = "oss@cogitri.dev";
2405+ github = "Cogitri";
2406+ githubId = 8766773;
2407+ matrix = "@cogitri:cogitri.dev";
2408+ name = "Rasmus Thomsen";
2409+ };
20822410 cohei = {
20832411 email = "a.d.xvii.kal.mai@gmail.com";
20842412 github = "cohei";
@@ -2093,6 +2421,7 @@
20932421 };
20942422 colemickens = {
20952423 email = "cole.mickens@gmail.com";
2424+ matrix = "@colemickens:matrix.org";
20962425 github = "colemickens";
20972426 githubId = 327028;
20982427 name = "Cole Mickens";
@@ -2106,6 +2435,7 @@
21062435 cole-h = {
21072436 name = "Cole Helbling";
21082437 email = "cole.e.helbling@outlook.com";
2438+ matrix = "@cole-h:matrix.org";
21092439 github = "cole-h";
21102440 githubId = 28582702;
21112441 keys = [{
@@ -2149,6 +2479,13 @@
21492479 githubId = 11145016;
21502480 name = "J.C.";
21512481 };
2482+ congee = {
2483+ email = "changshengwu@pm.me";
2484+ matrix = "@congeec:matrix.org";
2485+ github = "congee";
2486+ name = "Changsheng Wu";
2487+ githubId = 2083950;
2488+ };
21522489 contrun = {
21532490 email = "uuuuuu@protonmail.com";
21542491 github = "contrun";
@@ -2161,6 +2498,23 @@
21612498 githubId = 5510514;
21622499 name = "Conrad Mearns";
21632500 };
2501+ corbanr = {
2502+ email = "corban@raunco.co";
2503+ github = "CorbanR";
2504+ githubId = 1918683;
2505+ matrix = "@corbansolo:matrix.org";
2506+ name = "Corban Raun";
2507+ keys = [
2508+ {
2509+ longkeyid = "rsa4096/0xA697A56F1F151189";
2510+ fingerprint = "6607 0B24 8CE5 64ED 22CE 0950 A697 A56F 1F15 1189";
2511+ }
2512+ {
2513+ longkeyid = "ed25519/0x230F4AC153F90F29";
2514+ fingerprint = "D8CB 816A B678 A4E6 1EC7 5325 230F 4AC1 53F9 0F29";
2515+ }
2516+ ];
2517+ };
21642518 couchemar = {
21652519 email = "couchemar@yandex.ru";
21662520 github = "couchemar";
@@ -2201,6 +2555,12 @@
22012555 githubId = 12202789;
22022556 name = "CrazedProgrammer";
22032557 };
2558+ creator54 = {
2559+ email = "hi.creator54@gmail.com";
2560+ github = "creator54";
2561+ githubId = 34543609;
2562+ name = "creator54";
2563+ };
22042564 cript0nauta = {
22052565 email = "shareman1204@gmail.com";
22062566 github = "cript0nauta";
@@ -2209,6 +2569,7 @@
22092569 };
22102570 CRTified = {
22112571 email = "carl.schneider+nixos@rub.de";
2572+ matrix = "@schnecfk:ruhr-uni-bochum.de";
22122573 github = "CRTified";
22132574 githubId = 2440581;
22142575 name = "Carl Richard Theodor Schneider";
@@ -2263,6 +2624,12 @@
22632624 githubId = 1382175;
22642625 name = "Oliver Matthews";
22652626 };
2627+ cyounkins = {
2628+ name = "Craig Younkins";
2629+ email = "cyounkins@gmail.com";
2630+ github = "cyounkins";
2631+ githubId = 346185;
2632+ };
22662633 cypherpunk2140 = {
22672634 email = "stefan.mihaila@pm.me";
22682635 github = "stefan-mihaila";
@@ -2281,6 +2648,7 @@
22812648 };
22822649 cyplo = {
22832650 email = "nixos@cyplo.dev";
2651+ matrix = "@cyplo:cyplo.dev";
22842652 github = "cyplo";
22852653 githubId = 217899;
22862654 name = "Cyryl Płotnicki";
@@ -2317,6 +2685,12 @@
23172685 githubId = 4331004;
23182686 name = "Naoya Hatta";
23192687 };
2688+ dalpd = {
2689+ email = "denizalpd@ogr.iu.edu.tr";
2690+ github = "dalpd";
2691+ githubId = 16895361;
2692+ name = "Deniz Alp Durmaz";
2693+ };
23202694 DamienCassou = {
23212695 email = "damien@cassou.me";
23222696 github = "DamienCassou";
@@ -2343,6 +2717,7 @@
23432717 };
23442718 dandellion = {
23452719 email = "daniel@dodsorf.as";
2720+ matrix = "@dandellion:dodsorf.as";
23462721 github = "dali99";
23472722 githubId = 990767;
23482723 name = "Daniel Olsen";
@@ -2377,12 +2752,30 @@
23772752 githubId = 1298344;
23782753 name = "Daniel Fullmer";
23792754 };
2755+ danth = {
2756+ name = "Daniel Thwaites";
2757+ email = "danthwaites30@btinternet.com";
2758+ matrix = "@danth:matrix.org";
2759+ github = "danth";
2760+ githubId = 28959268;
2761+ keys = [{
2762+ longkeyid = "rsa3072/0xD8AFC4BF05670F9D";
2763+ fingerprint = "4779 D1D5 3C97 2EAE 34A5 ED3D D8AF C4BF 0567 0F9D";
2764+ }];
2765+ };
23802766 dan4ik605743 = {
23812767 email = "6057430gu@gmail.com";
23822768 github = "dan4ik605743";
23832769 githubId = 86075850;
23842770 name = "Danil Danevich";
23852771 };
2772+ darkonion0 = {
2773+ name = "Alexandre Peruggia";
2774+ email = "darkgenius1@protonmail.com";
2775+ matrix = "@alexoo:matrix.org";
2776+ github = "DarkOnion0";
2777+ githubId = 68606322;
2778+ };
23862779 das-g = {
23872780 email = "nixpkgs@raphael.dasgupta.ch";
23882781 github = "das-g";
@@ -2391,6 +2784,7 @@
23912784 };
23922785 das_j = {
23932786 email = "janne@hess.ooo";
2787+ matrix = "@janne.hess:helsinki-systems.de";
23942788 github = "dasJ";
23952789 githubId = 4971975;
23962790 name = "Janne Heß";
@@ -2415,6 +2809,12 @@
24152809 email = "christoph.senjak@googlemail.com";
24162810 name = "Christoph-Simon Senjak";
24172811 };
2812+ datafoo = {
2813+ email = "34766150+datafoo@users.noreply.github.com";
2814+ github = "datafoo";
2815+ githubId = 34766150;
2816+ name = "datafoo";
2817+ };
24182818 davhau = {
24192819 email = "d.hauer.it@gmail.com";
24202820 name = "David Hauer";
@@ -2435,10 +2835,17 @@
24352835 };
24362836 davidak = {
24372837 email = "post@davidak.de";
2838+ matrix = "@davidak:matrix.org";
24382839 github = "davidak";
24392840 githubId = 91113;
24402841 name = "David Kleuker";
24412842 };
2843+ davidarmstronglewis = {
2844+ email = "davidlewis@mac.com";
2845+ github = "davidarmstronglewis";
2846+ githubId = 6754950;
2847+ name = "David Armstrong Lewis";
2848+ };
24422849 davidrusu = {
24432850 email = "davidrusu.me@gmail.com";
24442851 github = "davidrusu";
@@ -2467,6 +2874,12 @@
24672874 githubId = 49904992;
24682875 name = "Dawid Sowa";
24692876 };
2877+ dbeckwith = {
2878+ email = "djbsnx@gmail.com";
2879+ github = "dbeckwith";
2880+ githubId = 1279939;
2881+ name = "Daniel Beckwith";
2882+ };
24702883 dbirks = {
24712884 email = "david@birks.dev";
24722885 github = "dbirks";
@@ -2541,6 +2954,16 @@
25412954 githubId = 202798;
25422955 name = "Pierre Bourdon";
25432956 };
2957+ delta = {
2958+ email = "d4delta@outlook.fr";
2959+ name = "Delta";
2960+ };
2961+ deltadelta = {
2962+ email = "contact@libellules.eu";
2963+ name = "Dara Ly";
2964+ github = "tournemire";
2965+ githubId = 20159432;
2966+ };
25442967 deltaevo = {
25452968 email = "deltaduartedavid@gmail.com";
25462969 github = "DeltaEvo";
@@ -2571,12 +2994,24 @@
25712994 githubId = 706758;
25722995 name = "Christian Gerbrandt";
25732996 };
2997+ derekcollison = {
2998+ email = "derek@nats.io";
2999+ github = "derekcollison";
3000+ githubId = 90097;
3001+ name = "Derek Collison";
3002+ };
25743003 DerGuteMoritz = {
25753004 email = "moritz@twoticketsplease.de";
25763005 github = "DerGuteMoritz";
25773006 githubId = 19733;
25783007 name = "Moritz Heidkamp";
25793008 };
3009+ DerickEddington = {
3010+ email = "derick.eddington@pm.me";
3011+ github = "DerickEddington";
3012+ githubId = 4731128;
3013+ name = "Derick Eddington";
3014+ };
25803015 dermetfan = {
25813016 email = "serverkorken@gmail.com";
25823017 github = "dermetfan";
@@ -2637,6 +3072,12 @@
26373072 githubId = 2439413;
26383073 name = "Derek Gonyeo";
26393074 };
3075+ dguenther = {
3076+ email = "dguenther9@gmail.com";
3077+ github = "dguenther";
3078+ githubId = 767083;
3079+ name = "Derek Guenther";
3080+ };
26403081 dhkl = {
26413082 email = "david@davidslab.com";
26423083 github = "dhl";
@@ -2655,6 +3096,12 @@
26553096 githubId = 8404455;
26563097 name = "Diego Lelis";
26573098 };
3099+ DieracDelta = {
3100+ email = "justin@restivo.me";
3101+ github = "DieracDelta";
3102+ githubId = 13730968;
3103+ name = "Justin Restivo";
3104+ };
26583105 diffumist = {
26593106 email = "git@diffumist.me";
26603107 github = "diffumist";
@@ -2691,6 +3138,12 @@
26913138 githubId = 40633781;
26923139 name = "Sergei S.";
26933140 };
3141+ dit7ya = {
3142+ email = "7rat13@gmail.com";
3143+ github = "dit7ya";
3144+ githubId = 14034137;
3145+ name = "Mostly Void";
3146+ };
26943147 dizfer = {
26953148 email = "david@izquierdofernandez.com";
26963149 github = "dizfer";
@@ -2727,6 +3180,12 @@
27273180 githubId = 28980797;
27283181 name = "David Leslie";
27293182 };
3183+ dlip = {
3184+ email = "dane@lipscombe.com.au";
3185+ github = "dlip";
3186+ githubId = 283316;
3187+ name = "Dane Lipscombe";
3188+ };
27303189 dmalikov = {
27313190 email = "malikov.d.y@gmail.com";
27323191 github = "dmalikov";
@@ -2789,6 +3248,7 @@
27893248 };
27903249 dotlambda = {
27913250 email = "rschuetz17@gmail.com";
3251+ matrix = "@robert:funklause.de";
27923252 github = "dotlambda";
27933253 githubId = 6806011;
27943254 name = "Robert Schütz";
@@ -2859,9 +3319,20 @@
28593319 githubId = 10198051;
28603320 name = "Drew Risinger";
28613321 };
3322+ drperceptron = {
3323+ email = "92106371+drperceptron@users.noreply.github.com";
3324+ github = "drperceptron";
3325+ githubId = 92106371;
3326+ name = "Dr Perceptron";
3327+ keys = [{
3328+ longkeyid = "rsa4096/0x95EB6DFF26D1CEB0";
3329+ fingerprint = "7E38 89D9 B1A8 B381 C8DE A15F 95EB 6DFF 26D1 CEB0";
3330+ }];
3331+ };
28623332 drupol = {
28633333 name = "Pol Dellaiera";
28643334 email = "pol.dellaiera@protonmail.com";
3335+ matrix = "@drupol:matrix.org";
28653336 github = "drupol";
28663337 githubId = 252042;
28673338 keys = [{
@@ -2869,6 +3340,18 @@
28693340 fingerprint = "85F3 72DF 4AF3 EF13 ED34 72A3 0AAF 2901 E804 0715";
28703341 }];
28713342 };
3343+ drzoidberg = {
3344+ email = "jakob@mast3rsoft.com";
3345+ github = "jakobneufeld";
3346+ githubId = 24791219;
3347+ name = "Jakob Neufeld";
3348+ };
3349+ dsalaza4 = {
3350+ email = "podany270895@gmail.com";
3351+ github = "dsalaza4";
3352+ githubId = 11205987;
3353+ name = "Daniel Salazar";
3354+ };
28723355 dschrempf = {
28733356 name = "Dominik Schrempf";
28743357 email = "dominik.schrempf@gmail.com";
@@ -2925,6 +3408,7 @@
29253408 };
29263409 dywedir = {
29273410 email = "dywedir@gra.red";
3411+ matrix = "@dywedir:matrix.org";
29283412 github = "dywedir";
29293413 githubId = 399312;
29303414 name = "Vladyslav M.";
@@ -2967,10 +3451,21 @@
29673451 };
29683452 earvstedt = {
29693453 email = "erik.arvstedt@gmail.com";
3454+ matrix = "@erikarvstedt:matrix.org";
29703455 github = "erikarvstedt";
29713456 githubId = 36110478;
29723457 name = "Erik Arvstedt";
29733458 };
3459+ ebbertd = {
3460+ email = "daniel@ebbert.nrw";
3461+ github = "ebbertd";
3462+ githubId = 20522234;
3463+ name = "Daniel Ebbert";
3464+ keys = [{
3465+ longkeyid = "rsa2048/0x47BC155927CBB9C7";
3466+ fingerprint = "E765 FCA3 D9BF 7FDB 856E AD73 47BC 1559 27CB B9C7";
3467+ }];
3468+ };
29743469 ebzzry = {
29753470 email = "ebzzry@ebzzry.io";
29763471 github = "ebzzry";
@@ -3001,11 +3496,11 @@
30013496 githubId = 50854;
30023497 name = "edef";
30033498 };
3004− edibopp = {
3005− email = "eduard.bopp@aepsil0n.de";
3006− github = "edibopp";
3007− githubId = 3098430;
3008− name = "Eduard Bopp";
3499+ edlimerkaj = {
3500+ name = "Edli Merkaj";
3501+ email = "edli.merkaj@identinet.io";
3502+ github = "edlimerkaj";
3503+ githubId = 71988351;
30093504 };
30103505 emantor = {
30113506 email = "rouven+nixos@czerwinskis.de";
@@ -3025,6 +3520,12 @@
30253520 githubId = 18535642;
30263521 name = "Emily";
30273522 };
3523+ emilytrau = {
3524+ name = "Emily Trau";
3525+ email = "nix@angus.ws";
3526+ github = "emilytrau";
3527+ githubId = 13267947;
3528+ };
30283529 enderger = {
30293530 email = "endergeryt@gmail.com";
30303531 github = "enderger";
@@ -3043,12 +3544,6 @@
30433544 githubId = 119483;
30443545 name = "Matthew Brown";
30453546 };
3046− eduardosm = {
3047− email = "esm@eduardosm.net";
3048− github = "eduardosm";
3049− githubId = 761151;
3050− name = "Eduardo Sánchez Muñoz";
3051− };
30523547 eduarrrd = {
30533548 email = "e.bachmakov@gmail.com";
30543549 github = "eduarrrd";
@@ -3093,6 +3588,7 @@
30933588 };
30943589 ekleog = {
30953590 email = "leo@gaspard.io";
3591+ matrix = "@leo:gaspard.ninja";
30963592 github = "ekleog";
30973593 githubId = 411447;
30983594 name = "Leo Gaspard";
@@ -3103,6 +3599,12 @@
31033599 githubId = 4742;
31043600 name = "Aaron Bull Schaefer";
31053601 };
3602+ elatov = {
3603+ email = "elatov@gmail.com";
3604+ github = "elatov";
3605+ githubId = 7494394;
3606+ name = "Karim Elatov";
3607+ };
31063608 eleanor = {
31073609 email = "dejan@proteansec.com";
31083610 github = "proteansec";
@@ -3115,6 +3617,12 @@
31153617 githubId = 103082;
31163618 name = "Ed Brindley";
31173619 };
3620+ elliot = {
3621+ email = "hack00mind@gmail.com";
3622+ github = "Eliot00";
3623+ githubId = 18375468;
3624+ name = "Elliot Xu";
3625+ };
31183626 elliottvillars = {
31193627 email = "elliottvillars@gmail.com";
31203628 github = "elliottvillars";
@@ -3123,6 +3631,7 @@
31233631 };
31243632 eliasp = {
31253633 email = "mail@eliasprobst.eu";
3634+ matrix = "@eliasp:kde.org";
31263635 github = "eliasp";
31273636 githubId = 48491;
31283637 name = "Elias Probst";
@@ -3182,11 +3691,18 @@
31823691 name = "Leo Maroni";
31833692 };
31843693 emmanuelrosa = {
3185− email = "emmanuel_rosa@aol.com";
3694+ email = "emmanuelrosa@protonmail.com";
3695+ matrix = "@emmanuelrosa:matrix.org";
31863696 github = "emmanuelrosa";
31873697 githubId = 13485450;
31883698 name = "Emmanuel Rosa";
31893699 };
3700+ emptyflask = {
3701+ email = "jon@emptyflask.dev";
3702+ github = "emptyflask";
3703+ githubId = 28287;
3704+ name = "Jon Roberts";
3705+ };
31903706 endgame = {
31913707 email = "jack@jackkelly.name";
31923708 github = "endgame";
@@ -3205,9 +3721,9 @@
32053721 githubId = 5493775;
32063722 name = "Ente";
32073723 };
3208− enzime = {
3724+ Enzime = {
32093725 email = "enzime@users.noreply.github.com";
3210− github = "enzime";
3726+ github = "Enzime";
32113727 githubId = 10492681;
32123728 name = "Michael Hoang";
32133729 };
@@ -3257,6 +3773,7 @@
32573773 };
32583774 ereslibre = {
32593775 email = "ereslibre@ereslibre.es";
3776+ matrix = "@ereslibre:matrix.org";
32603777 github = "ereslibre";
32613778 githubId = 8706;
32623779 name = "Rafael Fernández López";
@@ -3281,6 +3798,7 @@
32813798 };
32823799 ericson2314 = {
32833800 email = "John.Ericson@Obsidian.Systems";
3801+ matrix = "@ericson2314:matrix.org";
32843802 github = "ericson2314";
32853803 githubId = 1055245;
32863804 name = "John Ericson";
@@ -3363,8 +3881,22 @@
33633881 githubId = 222467;
33643882 name = "Dmitry Ivanov";
33653883 };
3884+ ethindp = {
3885+ name = "Ethin Probst";
3886+ email = "harlydavidsen@gmail.com";
3887+ matrix = "@ethindp:the-gdn.net";
3888+ github = "ethindp";
3889+ githubId = 8030501;
3890+ };
3891+ Etjean = {
3892+ email = "et.jean@outlook.fr";
3893+ github = "Etjean";
3894+ githubId = 32169529;
3895+ name = "Etienne Jean";
3896+ };
33663897 etu = {
33673898 email = "elis@hirwing.se";
3899+ matrix = "@etu:semi.social";
33683900 github = "etu";
33693901 githubId = 461970;
33703902 name = "Elis Hirwing";
@@ -3382,6 +3914,7 @@
33823914 evalexpr = {
33833915 name = "Jonathan Wilkins";
33843916 email = "nixos@wilkins.tech";
3917+ matrix = "@evalexpr:matrix.org";
33853918 github = "evalexpr";
33863919 githubId = 23485511;
33873920 keys = [{
@@ -3415,6 +3948,7 @@
34153948 };
34163949 evils = {
34173950 email = "evils.devils@protonmail.com";
3951+ matrix = "@evils:nixos.dev";
34183952 github = "evils";
34193953 githubId = 30512529;
34203954 name = "Evils";
@@ -3451,9 +3985,14 @@
34513985 };
34523986 expipiplus1 = {
34533987 email = "nix@monoid.al";
3988+ matrix = "@ellie:monoid.al";
34543989 github = "expipiplus1";
34553990 githubId = 857308;
3456− name = "Joe Hermaszewski";
3991+ name = "Ellie Hermaszewska";
3992+ keys = [{
3993+ longkeyid = "rsa4096/0xC8116E3A0C1CA76A";
3994+ fingerprint = "FC1D 3E4F CBCA 80DF E870 6397 C811 6E3A 0C1C A76A";
3995+ }];
34573996 };
34583997 extends = {
34593998 email = "sharosari@gmail.com";
@@ -3463,6 +4002,7 @@
34634002 };
34644003 eyjhb = {
34654004 email = "eyjhbb@gmail.com";
4005+ matrix = "@eyjhb:eyjhb.dk";
34664006 github = "eyJhb";
34674007 githubId = 25955146;
34684008 name = "eyJhb";
@@ -3481,6 +4021,7 @@
34814021 };
34824022 fab = {
34834023 email = "mail@fabian-affolter.ch";
4024+ matrix = "@fabaff:matrix.org";
34844025 name = "Fabian Affolter";
34854026 github = "fabaff";
34864027 githubId = 116184;
@@ -3535,6 +4076,12 @@
35354076 githubId = 1276854;
35364077 name = "Florian Peter";
35374078 };
4079+ fbeffa = {
4080+ email = "beffa@fbengineering.ch";
4081+ github = "fedeinthemix";
4082+ githubId = 7670450;
4083+ name = "Federico Beffa";
4084+ };
35384085 fbrs = {
35394086 email = "yuuki@protonmail.com";
35404087 github = "cideM";
@@ -3547,6 +4094,13 @@
35474094 githubId = 541748;
35484095 name = "Felipe Espinoza";
35494096 };
4097+ fedx-sudo = {
4098+ email = "fedx-sudo@pm.me";
4099+ github = "Fedx-sudo";
4100+ githubId = 66258975;
4101+ name = "Fedx sudo";
4102+ matrix = "fedx:matrix.org";
4103+ };
35504104 fehnomenal = {
35514105 email = "fehnomenal@fehn.systems";
35524106 github = "fehnomenal";
@@ -3567,13 +4121,21 @@
35674121 };
35684122 felschr = {
35694123 email = "dev@felschr.com";
4124+ matrix = "@felschr:matrix.org";
35704125 github = "felschr";
35714126 githubId = 3314323;
3572− name = "Felix Tenley";
3573− keys = [{
3574− longkeyid = "ed25519/0x910ACB9F6BD26F58";
3575− fingerprint = "6AB3 7A28 5420 9A41 82D9 0068 910A CB9F 6BD2 6F58";
3576− }];
4127+ name = "Felix Schröter";
4128+ keys = [
4129+ {
4130+ # historical
4131+ longkeyid = "ed25519/0x910ACB9F6BD26F58";
4132+ fingerprint = "6AB3 7A28 5420 9A41 82D9 0068 910A CB9F 6BD2 6F58";
4133+ }
4134+ {
4135+ longkeyid = "ed25519/0x671E39E6744C807D";
4136+ fingerprint = "7E08 6842 0934 AA1D 6821 1F2A 671E 39E6 744C 807D";
4137+ }
4138+ ];
35774139 };
35784140 ffinkdevs = {
35794141 email = "fink@h0st.space";
@@ -3583,12 +4145,14 @@
35834145 };
35844146 fgaz = {
35854147 email = "fgaz@fgaz.me";
4148+ matrix = "@fgaz:matrix.org";
35864149 github = "fgaz";
35874150 githubId = 8182846;
35884151 name = "Francesco Gazzetta";
35894152 };
35904153 figsoda = {
35914154 email = "figsoda@pm.me";
4155+ matrix = "@figsoda:matrix.org";
35924156 github = "figsoda";
35934157 githubId = 40620903;
35944158 name = "figsoda";
@@ -3617,6 +4181,12 @@
36174181 github = "fitzgibbon";
36184182 githubId = 617048;
36194183 };
4184+ fkautz = {
4185+ name = "Frederick F. Kautz IV";
4186+ email = "fkautz@alumni.cmu.edu";
4187+ github = "fkautz";
4188+ githubId = 135706;
4189+ };
36204190 Flakebi = {
36214191 email = "flakebi@t-online.de";
36224192 github = "Flakebi";
@@ -3651,6 +4221,12 @@
36514221 githubId = 183879;
36524222 name = "Florian Klink";
36534223 };
4224+ florentc = {
4225+ email = "florentc@users.noreply.github.com";
4226+ github = "florentc";
4227+ githubId = 1149048;
4228+ name = "Florent Ch.";
4229+ };
36544230 FlorianFranzen = {
36554231 email = "Florian.Franzen@gmail.com";
36564232 github = "FlorianFranzen";
@@ -3707,6 +4283,7 @@
37074283 };
37084284 fortuneteller2k = {
37094285 email = "lythe1107@gmail.com";
4286+ matrix = "@fortuneteller2k:matrix.org";
37104287 github = "fortuneteller2k";
37114288 githubId = 20619776;
37124289 name = "fortuneteller2k";
@@ -3734,19 +4311,18 @@
37344311 githubId = 119691;
37354312 name = "Michael Gough";
37364313 };
3737−
4314+ freax13 = {
4315+ email = "erbse.13@gmx.de";
4316+ github = "freax13";
4317+ githubId = 14952658;
4318+ name = "Tom Dohrmann";
4319+ };
37384320 fredeb = {
37394321 email = "im@fredeb.dev";
37404322 github = "fredeeb";
37414323 githubId = 7551358;
37424324 name = "Frede Emil";
37434325 };
3744− freepotion = {
3745− email = "42352817+freepotion@users.noreply.github.com";
3746− github = "freepotion";
3747− githubId = 42352817;
3748− name = "Free Potion";
3749− };
37504326 freezeboy = {
37514327 email = "freezeboy@users.noreply.github.com";
37524328 github = "freezeboy";
@@ -3869,6 +4445,16 @@
38694445 githubId = 1313787;
38704446 name = "Gabriel Gonzalez";
38714447 };
4448+ gador = {
4449+ email = "florian.brandes@posteo.de";
4450+ github = "gador";
4451+ githubId = 1883533;
4452+ name = "Florian Brandes";
4453+ keys = [{
4454+ longkeyid = "rsa4096/0xBBB3E40E53797FD9";
4455+ fingerprint = "0200 3EF8 8D2B CF2D 8F00 FFDC BBB3 E40E 5379 7FD9";
4456+ }];
4457+ };
38724458 gal_bolle = {
38734459 email = "florent.becker@ens-lyon.org";
38744460 github = "FlorentBecker";
@@ -3893,6 +4479,12 @@
38934479 githubId = 20208;
38944480 name = "Rok Garbas";
38954481 };
4482+ gardspirito = {
4483+ name = "gardspirito";
4484+ email = "nyxoroso@gmail.com";
4485+ github = "gardspirito";
4486+ githubId = 29687558;
4487+ };
38964488 garrison = {
38974489 email = "jim@garrison.cc";
38984490 github = "garrison";
@@ -3911,12 +4503,28 @@
39114503 githubId = 16470252;
39124504 name = "Gemini Lasswell";
39134505 };
4506+ gbtb = {
4507+ email = "goodbetterthebeast3@gmail.com";
4508+ github = "gbtb";
4509+ githubId = 37017396;
4510+ name = "gbtb";
4511+ };
39144512 gebner = {
39154513 email = "gebner@gebner.org";
39164514 github = "gebner";
39174515 githubId = 313929;
39184516 name = "Gabriel Ebner";
39194517 };
4518+ genofire = {
4519+ name = "genofire";
4520+ email = "geno+dev@fireorbit.de";
4521+ github = "genofire";
4522+ githubId = 6905586;
4523+ keys = [{
4524+ longkeyid = "rsa4096/0xFC83907C125BC2BC";
4525+ fingerprint = "386E D1BF 848A BB4A 6B4A 3C45 FC83 907C 125B C2BC";
4526+ }];
4527+ };
39204528 georgewhewell = {
39214529 email = "georgerw@gmail.com";
39224530 github = "georgewhewell";
@@ -3947,10 +4555,17 @@
39474555 };
39484556 ggpeti = {
39494557 email = "ggpeti@gmail.com";
4558+ matrix = "@ggpeti:ggpeti.com";
39504559 github = "ggpeti";
39514560 githubId = 3217744;
39524561 name = "Peter Ferenczy";
39534562 };
4563+ ghostbuster91 = {
4564+ name = "Kasper Kondzielski";
4565+ email = "kghost0@gmail.com";
4566+ github = "ghostbuster91";
4567+ githubId = 5662622;
4568+ };
39544569 ghuntley = {
39554570 email = "ghuntley@ghuntley.com";
39564571 github = "ghuntley";
@@ -3969,12 +4584,24 @@
39694584 githubId = 27668;
39704585 name = "Tobias Pflug";
39714586 };
4587+ gin66 = {
4588+ email = "jochen@kiemes.de";
4589+ github = "gin66";
4590+ githubId = 5549373;
4591+ name = "Jochen Kiemes";
4592+ };
39724593 giogadi = {
39734594 email = "lgtorres42@gmail.com";
39744595 github = "giogadi";
39754596 githubId = 1713676;
39764597 name = "Luis G. Torres";
39774598 };
4599+ GKasparov = {
4600+ email = "mizozahr@gmail.com";
4601+ github = "GKasparov";
4602+ githubId = 60962839;
4603+ name = "Mazen Zahr";
4604+ };
39784605 gleber = {
39794606 email = "gleber.p@gmail.com";
39804607 github = "gleber";
@@ -4039,6 +4666,16 @@
40394666 githubId = 1621335;
40404667 name = "Andrew Trachenko";
40414668 };
4669+ gordias = {
4670+ name = "Gordias";
4671+ email = "gordias@disroot.org";
4672+ github = "gordiasdot";
4673+ githubId = 94724133;
4674+ keys = [{
4675+ longkeyid = "ed25519/0x5D47284830FAA4FA";
4676+ fingerprint = "C006 B8A0 0618 F3B6 E0E4 2ECD 5D47 2848 30FA A4FA";
4677+ }];
4678+ };
40424679 govanify = {
40434680 name = "Gauvain 'GovanifY' Roussel-Tarbouriech";
40444681 email = "gauvain@govanify.com";
@@ -4083,6 +4720,12 @@
40834720 githubId = 4656860;
40844721 name = "Gaute Ravndal";
40854722 };
4723+ graysonhead = {
4724+ email = "grayson@graysonhead.net";
4725+ github = "graysonhead";
4726+ githubId = 6179496;
4727+ name = "Grayson Head";
4728+ };
40864729 grburst = {
40874730 email = "GRBurst@protonmail.com";
40884731 github = "GRBurst";
@@ -4111,6 +4754,12 @@
41114754 githubId = 201997;
41124755 name = "Eric Seidel";
41134756 };
4757+ grindhold = {
4758+ name = "grindhold";
4759+ email = "grindhold+nix@skarphed.org";
4760+ github = "grindhold";
4761+ githubId = 2592640;
4762+ };
41144763 gspia = {
41154764 email = "iahogsp@gmail.com";
41164765 github = "gspia";
@@ -4129,6 +4778,18 @@
41294778 githubId = 343415;
41304779 name = "Greg Roodt";
41314780 };
4781+ grnnja = {
4782+ email = "grnnja@gmail.com";
4783+ github = "grnnja";
4784+ githubId = 31556469;
4785+ name = "Prem Netsuwan";
4786+ };
4787+ gruve-p = {
4788+ email = "groestlcoin@gmail.com";
4789+ github = "gruve-p";
4790+ githubId = 11212268;
4791+ name = "gruve-p";
4792+ };
41324793 gschwartz = {
41334794 email = "gsch@pennmedicine.upenn.edu";
41344795 github = "GregorySchwartz";
@@ -4180,6 +4841,7 @@
41804841 gytis-ivaskevicius = {
41814842 name = "Gytis Ivaskevicius";
41824843 email = "me@gytis.io";
4844+ matrix = "@gytis-ivaskevicius:matrix.org";
41834845 github = "gytis-ivaskevicius";
41844846 githubId = 23264966;
41854847 };
@@ -4225,6 +4887,7 @@
42254887 };
42264888 happysalada = {
42274889 email = "raphael@megzari.com";
4890+ matrix = "@happysalada:matrix.org";
42284891 github = "happysalada";
42294892 githubId = 5317234;
42304893 name = "Raphael Megzari";
@@ -4235,6 +4898,16 @@
42354898 githubId = 54728477;
42364899 name = "Happy River";
42374900 };
4901+ hardselius = {
4902+ email = "martin@hardselius.dev";
4903+ github = "hardselius";
4904+ githubId = 1422583;
4905+ name = "Martin Hardselius";
4906+ keys = [{
4907+ longkeyid = "rsa4096/0x03A6E6F786936619";
4908+ fingerprint = "3F35 E4CA CBF4 2DE1 2E90 53E5 03A6 E6F7 8693 6619";
4909+ }];
4910+ };
42384911 haslersn = {
42394912 email = "haslersn@fius.informatik.uni-stuttgart.de";
42404913 github = "haslersn";
@@ -4247,8 +4920,15 @@
42474920 githubId = 731722;
42484921 name = "Ryan Scheel";
42494922 };
4923+ hawkw = {
4924+ email = "eliza@elizas.website";
4925+ github = "hawkw";
4926+ githubId = 2796466;
4927+ name = "Eliza Weisman";
4928+ };
42504929 hax404 = {
42514930 email = "hax404foogit@hax404.de";
4931+ matrix = "@hax404:hax404.de";
42524932 github = "hax404";
42534933 githubId = 1379411;
42544934 name = "Georg Haas";
@@ -4299,6 +4979,13 @@
42994979 githubId = 2405974;
43004980 name = "Sébastian Méric de Bellefon";
43014981 };
4982+ henkkalkwater = {
4983+ email = "chris+nixpkgs@netsoj.nl";
4984+ github = "HenkKalkwater";
4985+ githubId = 4262067;
4986+ matrix = "@chris:netsoj.nl";
4987+ name = "Chris Josten";
4988+ };
43024989 henrikolsson = {
43034990 email = "henrik@fixme.se";
43044991 github = "henrikolsson";
@@ -4325,6 +5012,7 @@
43255012 };
43265013 hexa = {
43275014 email = "hexa@darmstadt.ccc.de";
5015+ matrix = "@hexa:lossy.network";
43285016 github = "mweinelt";
43295017 githubId = 131599;
43305018 name = "Martin Weinelt";
@@ -4353,6 +5041,12 @@
43535041 github = "higebu";
43545042 githubId = 733288;
43555043 };
5044+ hiljusti = {
5045+ name = "J.R. Hill";
5046+ email = "hiljusti@so.dang.cool";
5047+ github = "hiljusti";
5048+ githubId = 17605298;
5049+ };
43565050 hinton = {
43575051 email = "t@larkery.com";
43585052 name = "Tom Hinton";
@@ -4389,6 +5083,12 @@
43895083 fingerprint = "D618 7A03 A40A 3D56 62F5 4B46 03EF BF83 9A5F DC15";
43905084 }];
43915085 };
5086+ hleboulanger = {
5087+ email = "hleboulanger@protonmail.com";
5088+ name = "Harold Leboulanger";
5089+ github = "thbkrhsw";
5090+ githubId = 33122;
5091+ };
43925092 hlolli = {
43935093 email = "hlolli@gmail.com";
43945094 github = "hlolli";
@@ -4417,6 +5117,12 @@
44175117 githubId = 896431;
44185118 name = "Chris Hodapp";
44195119 };
5120+ hollowman6 = {
5121+ email = "hollowman@hollowman.ml";
5122+ github = "HollowMan6";
5123+ githubId = 43995067;
5124+ name = "Songlin Jiang";
5125+ };
44205126 holymonson = {
44215127 email = "holymonson@gmail.com";
44225128 github = "holymonson";
@@ -4437,6 +5143,7 @@
44375143 };
44385144 hoverbear = {
44395145 email = "operator+nix@hoverbear.org";
5146+ matrix = "@hoverbear:matrix.org";
44405147 github = "hoverbear";
44415148 githubId = 130903;
44425149 name = "Ana Hobden";
@@ -4495,6 +5202,16 @@
44955202 githubId = 12491746;
44965203 name = "Masato Yonekawa";
44975204 };
5205+ hyshka = {
5206+ name = "Bryan Hyshka";
5207+ email = "bryan@hyshka.com";
5208+ github = "hyshka";
5209+ githubId = 2090758;
5210+ keys = [{
5211+ longkeyid = "rsa2048/0xDB2D93D1BFAAA6EA";
5212+ fingerprint = "24F4 1925 28C4 8797 E539 F247 DB2D 93D1 BFAA A6EA";
5213+ }];
5214+ };
44985215 hyzual = {
44995216 email = "hyzual@gmail.com";
45005217 github = "Hyzual";
@@ -4513,8 +5230,19 @@
45135230 githubId = 2789926;
45145231 name = "Imran Hossain";
45155232 };
5233+ iagoq = {
5234+ email = "18238046+iagocq@users.noreply.github.com";
5235+ github = "iagocq";
5236+ githubId = 18238046;
5237+ name = "Iago Manoel Brito";
5238+ keys = [{
5239+ longkeyid = "rsa4096/0x35D39F9A9A1BC8DA";
5240+ fingerprint = "DF90 9D58 BEE4 E73A 1B8C 5AF3 35D3 9F9A 9A1B C8DA";
5241+ }];
5242+ };
45165243 iammrinal0 = {
45175244 email = "nixpkgs@mrinalpurohit.in";
5245+ matrix = "@iammrinal0:nixos.dev";
45185246 github = "iammrinal0";
45195247 githubId = 890062;
45205248 name = "Mrinal";
@@ -4546,6 +5274,7 @@
45465274 icy-thought = {
45475275 name = "Icy-Thought";
45485276 email = "gilganyx@pm.me";
5277+ matrix = "@gilganix:matrix.org";
45495278 github = "Icy-Thought";
45505279 githubId = 53710398;
45515280 };
@@ -4585,6 +5314,13 @@
45855314 githubId = 36193715;
45865315 name = "Lassi Haasio";
45875316 };
5317+ ilkecan = {
5318+ email = "ilkecan@protonmail.com";
5319+ matrix = "@ilkecan:matrix.org";
5320+ github = "ilkecan";
5321+ githubId = 40234257;
5322+ name = "ilkecan bozdogan";
5323+ };
45885324 illegalprime = {
45895325 email = "themichaeleden@gmail.com";
45905326 github = "illegalprime";
@@ -4633,6 +5369,12 @@
46335369 githubId = 993484;
46345370 name = "Greg Hale";
46355371 };
5372+ imgabe = {
5373+ email = "gabrielpmonte@hotmail.com";
5374+ github = "imgabe";
5375+ githubId = 24387926;
5376+ name = "Gabriel Pereira";
5377+ };
46365378 imlonghao = {
46375379 email = "nixos@esd.cc";
46385380 github = "imlonghao";
@@ -4641,6 +5383,7 @@
46415383 };
46425384 immae = {
46435385 email = "ismael@bouya.org";
5386+ matrix = "@immae:immae.eu";
46445387 github = "immae";
46455388 githubId = 510202;
46465389 name = "Ismaël Bouya";
@@ -4651,8 +5394,15 @@
46515394 githubId = 4085046;
46525395 name = "Imuli";
46535396 };
5397+ ineol = {
5398+ email = "leo.stefanesco@gmail.com";
5399+ github = "ineol";
5400+ githubId = 37965;
5401+ name = "Léo Stefanesco";
5402+ };
46545403 infinisil = {
46555404 email = "contact@infinisil.com";
5405+ matrix = "@infinisil:matrix.org";
46565406 github = "infinisil";
46575407 githubId = 20525370;
46585408 name = "Silvan Mosberger";
@@ -4670,6 +5420,7 @@
46705420 irenes = {
46715421 name = "Irene Knapp";
46725422 email = "ireneista@gmail.com";
5423+ matrix = "@irenes:matrix.org";
46735424 github = "IreneKnapp";
46745425 githubId = 157678;
46755426 keys = [{
@@ -4693,6 +5444,13 @@
46935444 fingerprint = "1412 816B A9FA F62F D051 1975 D3E1 B013 B463 1293";
46945445 }];
46955446 };
5447+ ius = {
5448+ email = "j.de.gram@gmail.com";
5449+ name = "Joerie de Gram";
5450+ matrix = "@ius:nltrix.net";
5451+ github = "ius";
5452+ githubId = 529626;
5453+ };
46965454 ivan = {
46975455 email = "ivan@ludios.org";
46985456 github = "ivan";
@@ -4726,7 +5484,7 @@
47265484 }];
47275485 };
47285486 ivankovnatsky = {
4729− email = "ikovnatsky@protonmail.ch";
5487+ email = "75213+ivankovnatsky@users.noreply.github.com";
47305488 github = "ivankovnatsky";
47315489 githubId = 75213;
47325490 name = "Ivan Kovnatsky";
@@ -4741,6 +5499,12 @@
47415499 githubId = 41924494;
47425500 name = "Ivar";
47435501 };
5502+ iwanb = {
5503+ email = "tracnar@gmail.com";
5504+ github = "iwanb";
5505+ githubId = 4035835;
5506+ name = "Iwan";
5507+ };
47445508 ixmatus = {
47455509 email = "parnell@digitalmentat.com";
47465510 github = "ixmatus";
@@ -4759,6 +5523,12 @@
47595523 githubId = 26877687;
47605524 name = "Yurii Izorkin";
47615525 };
5526+ j0xaf = {
5527+ email = "j0xaf@j0xaf.de";
5528+ name = "Jörn Gersdorf";
5529+ github = "j0xaf";
5530+ githubId = 932697;
5531+ };
47625532 j0hax = {
47635533 name = "Johannes Arnold";
47645534 email = "johannes.arnold@stud.uni-hannover.de";
@@ -4879,6 +5649,12 @@
48795649 githubId = 488556;
48805650 name = "Javier Aguirre";
48815651 };
5652+ jayesh-bhoot = {
5653+ name = "Jayesh Bhoot";
5654+ email = "jayesh@bhoot.sh";
5655+ github = "jayesh-bhoot";
5656+ githubId = 1915507;
5657+ };
48825658 jb55 = {
48835659 email = "jb55@jb55.com";
48845660 github = "jb55";
@@ -4893,6 +5669,7 @@
48935669 };
48945670 jbedo = {
48955671 email = "cu@cua0.org";
5672+ matrix = "@jb:vk3.wtf";
48965673 github = "jbedo";
48975674 githubId = 372912;
48985675 name = "Justin Bedő";
@@ -4903,12 +5680,34 @@
49035680 githubId = 221929;
49045681 name = "Jean-Baptiste Giraudeau";
49055682 };
5683+ jc = {
5684+ name = "Josh Cooper";
5685+ email = "josh@cooper.is";
5686+ github = "joshua-cooper";
5687+ githubId = 35612334;
5688+ };
5689+ jceb = {
5690+ name = "jceb";
5691+ email = "jceb@e-jc.de";
5692+ github = "jceb";
5693+ githubId = 101593;
5694+ };
49065695 jchw = {
49075696 email = "johnwchadwick@gmail.com";
49085697 github = "jchv";
49095698 githubId = 938744;
49105699 name = "John Chadwick";
49115700 };
5701+ jcouyang = {
5702+ email = "oyanglulu@gmail.com";
5703+ github = "jcouyang";
5704+ githubId = 1235045;
5705+ name = "Jichao Ouyang";
5706+ keys = [{
5707+ longkeyid = "rsa2048/0xDA8B833B52604E63";
5708+ fingerprint = "A506 C38D 5CC8 47D0 DF01 134A DA8B 833B 5260 4E63";
5709+ }];
5710+ };
49125711 jcumming = {
49135712 email = "jack@mudshark.org";
49145713 github = "jcumming";
@@ -4949,12 +5748,24 @@
49495748 githubId = 117874;
49505749 name = "Jeroen de Haas";
49515750 };
5751+ jdreaver = {
5752+ email = "johndreaver@gmail.com";
5753+ github = "jdreaver";
5754+ githubId = 1253071;
5755+ name = "David Reaver";
5756+ };
49525757 jduan = {
49535758 name = "Jingjing Duan";
49545759 email = "duanjingjing@gmail.com";
49555760 github = "jduan";
49565761 githubId = 452450;
49575762 };
5763+ jdupak = {
5764+ name = "Jakub Dupak";
5765+ email = "dev@jakubdupak.com";
5766+ github = "jdupak";
5767+ githubId = 22683640;
5768+ };
49585769 jecaro = {
49595770 email = "jeancharles.quillet@gmail.com";
49605771 github = "jecaro";
@@ -5009,6 +5820,16 @@
50095820 githubId = 143075;
50105821 name = "James Felix Black";
50115822 };
5823+ jfchevrette = {
5824+ email = "jfchevrette@gmail.com";
5825+ github = "jfchevrette";
5826+ githubId = 3001;
5827+ name = "Jean-Francois Chevrette";
5828+ keys = [{
5829+ longkeyid = "rsa4096/0x67A0585801290DC6";
5830+ fingerprint = "B612 96A9 498E EECD D5E9 C0F0 67A0 5858 0129 0DC6";
5831+ }];
5832+ };
50125833 jflanglois = {
50135834 email = "yourstruly@julienlanglois.me";
50145835 github = "jflanglois";
@@ -5024,6 +5845,7 @@
50245845 jfroche = {
50255846 name = "Jean-François Roche";
50265847 email = "jfroche@pyxel.be";
5848+ matrix = "@jfroche:matrix.pyxel.cloud";
50275849 github = "jfroche";
50285850 githubId = 207369;
50295851 keys = [{
@@ -5099,10 +5921,17 @@
50995921 };
51005922 jk = {
51015923 email = "hello+nixpkgs@j-k.io";
5924+ matrix = "@j-k:matrix.org";
51025925 github = "06kellyjac";
51035926 githubId = 9866621;
51045927 name = "Jack";
51055928 };
5929+ jkarlson = {
5930+ email = "jekarlson@gmail.com";
5931+ github = "jkarlson";
5932+ githubId = 1204734;
5933+ name = "Emil Karlson";
5934+ };
51065935 jlesquembre = {
51075936 email = "jl@lafuente.me";
51085937 github = "jlesquembre";
@@ -5133,12 +5962,36 @@
51335962 githubId = 8900;
51345963 name = "Johan Magnus Jonsson";
51355964 };
5965+ jmc-figueira = {
5966+ email = "business+nixos@jmc-figueira.dev";
5967+ github = "jmc-figueira";
5968+ githubId = 6634716;
5969+ name = "João Figueira";
5970+ keys = [
5971+ # GitHub signing key
5972+ {
5973+ longkeyid = "rsa4096/0xDC7AE56AE98E02D7";
5974+ fingerprint = "EC08 7AA3 DEAD A972 F015 6371 DC7A E56A E98E 02D7";
5975+ }
5976+ # Email encryption
5977+ {
5978+ longkeyid = "ed25519/0x197F9A632D139E30";
5979+ fingerprint = "816D 23F5 E672 EC58 7674 4A73 197F 9A63 2D13 9E30";
5980+ }
5981+ ];
5982+ };
51365983 jmettes = {
51375984 email = "jonathan@jmettes.com";
51385985 github = "jmettes";
51395986 githubId = 587870;
51405987 name = "Jonathan Mettes";
51415988 };
5989+ jmgilman = {
5990+ email = "joshuagilman@gmail.com";
5991+ github = "jmgilman";
5992+ githubId = 2308444;
5993+ name = "Joshua Gilman";
5994+ };
51425995 jo1gi = {
51435996 email = "joakimholm@protonmail.com";
51445997 github = "jo1gi";
@@ -5193,6 +6046,7 @@
51936046 };
51946047 joepie91 = {
51956048 email = "admin@cryto.net";
6049+ matrix = "@joepie91:pixie.town";
51966050 name = "Sven Slootweg";
51976051 github = "joepie91";
51986052 githubId = 1663259;
@@ -5239,6 +6093,12 @@
52396093 githubId = 8735102;
52406094 name = "John Ramsden";
52416095 };
6096+ johnrichardrinehart = {
6097+ email = "johnrichardrinehart@gmail.com";
6098+ github = "johnrichardrinehart";
6099+ githubId = 6321578;
6100+ name = "John Rinehart";
6101+ };
52426102 johntitor = {
52436103 email = "huyuumi.dev@gmail.com";
52446104 github = "JohnTitor";
@@ -5248,6 +6108,7 @@
52486108 jojosch = {
52496109 name = "Johannes Schleifenbaum";
52506110 email = "johannes@js-webcoding.de";
6111+ matrix = "@jojosch:jswc.de";
52516112 github = "jojosch";
52526113 githubId = 327488;
52536114 keys = [{
@@ -5286,6 +6147,7 @@
52866147 };
52876148 jonringer = {
52886149 email = "jonringer117@gmail.com";
6150+ matrix = "@jonringer:matrix.org";
52896151 github = "jonringer";
52906152 githubId = 7673602;
52916153 name = "Jonathan Ringer";
@@ -5356,8 +6218,15 @@
53566218 githubId = 4611077;
53576219 name = "Raymond Gauthier";
53586220 };
6221+ jrpotter = {
6222+ email = "jrpotter2112@gmail.com";
6223+ github = "jrpotter";
6224+ githubId = 3267697;
6225+ name = "Joshua Potter";
6226+ };
53596227 jschievink = {
53606228 email = "jonasschievink@gmail.com";
6229+ matrix = "@jschievink:matrix.org";
53616230 github = "jonas-schievink";
53626231 githubId = 1786438;
53636232 name = "Jonas Schievink";
@@ -5374,6 +6243,13 @@
53746243 githubId = 107689;
53756244 name = "Josh Holland";
53766245 };
6246+ jsierles = {
6247+ email = "joshua@hey.com";
6248+ matrix = "@jsierles:matrix.org";
6249+ name = "Joshua Sierles";
6250+ github = "jsierles";
6251+ githubId = 82;
6252+ };
53776253 jtcoolen = {
53786254 email = "jtcoolen@pm.me";
53796255 name = "Julien Coolen";
@@ -5392,6 +6268,7 @@
53926268 };
53936269 jtojnar = {
53946270 email = "jtojnar@gmail.com";
6271+ matrix = "@jtojnar:matrix.org";
53956272 github = "jtojnar";
53966273 githubId = 705123;
53976274 name = "Jan Tojnar";
@@ -5402,12 +6279,24 @@
54026279 githubId = 810075;
54036280 name = "Juan Rodal";
54046281 };
6282+ juboba = {
6283+ email = "juboba@gmail.com";
6284+ github = "juboba";
6285+ githubId = 1189739;
6286+ name = "Julio Borja Barra";
6287+ };
54056288 juliendehos = {
54066289 email = "dehos@lisic.univ-littoral.fr";
54076290 github = "juliendehos";
54086291 githubId = 11947756;
54096292 name = "Julien Dehos";
54106293 };
6294+ julienmalka = {
6295+ email = "julien.malka@me.com";
6296+ github = "JulienMalka";
6297+ githubId = 1792886;
6298+ name = "Julien Malka";
6299+ };
54116300 julm = {
54126301 email = "julm+nixpkgs@sourcephile.fr";
54136302 github = "ju1m";
@@ -5420,6 +6309,12 @@
54206309 githubId = 39434424;
54216310 name = "Felix Springer";
54226311 };
6312+ junjihashimoto = {
6313+ email = "junji.hashimoto@gmail.com";
6314+ github = "junjihashimoto";
6315+ githubId = 2469618;
6316+ name = "Junji Hashimoto";
6317+ };
54236318 justinas = {
54246319 email = "justinas@justinas.org";
54256320 github = "justinas";
@@ -5438,6 +6333,16 @@
54386333 githubId = 2396926;
54396334 name = "Justin Woo";
54406335 };
6336+ jvanbruegge = {
6337+ email = "supermanitu@gmail.com";
6338+ github = "jvanbruegge";
6339+ githubId = 1529052;
6340+ name = "Jan van Brügge";
6341+ keys = [{
6342+ longkeyid = "rsa4096/0x366572BE7D6C78A2";
6343+ fingerprint = "3513 5CE5 77AD 711F 3825 9A99 3665 72BE 7D6C 78A2";
6344+ }];
6345+ };
54416346 jwatt = {
54426347 email = "jwatt@broken.watch";
54436348 github = "jjwatt";
@@ -5472,6 +6377,16 @@
54726377 githubId = 20658981;
54736378 name = "Jarosław Wygoda";
54746379 };
6380+ jyooru = {
6381+ email = "joel@joel.tokyo";
6382+ github = "jyooru";
6383+ githubId = 63786778;
6384+ name = "Joel";
6385+ keys = [{
6386+ longkeyid = "rsa4096/18550BD205E9EF64";
6387+ fingerprint = "9148 DC9E F4D5 3EB6 A30E 8EF0 1855 0BD2 05E9 EF64";
6388+ }];
6389+ };
54756390 jyp = {
54766391 email = "jeanphilippe.bernardy@gmail.com";
54776392 github = "jyp";
@@ -5484,6 +6399,19 @@
54846399 githubId = 66669;
54856400 name = "Jeff Zellner";
54866401 };
6402+ k4leg = {
6403+ name = "k4leg";
6404+ email = "python.bogdan@gmail.com";
6405+ github = "k4leg";
6406+ githubId = 39882583;
6407+ };
6408+ k900 = {
6409+ name = "Ilya K.";
6410+ email = "me@0upti.me";
6411+ github = "K900";
6412+ githubId = 386765;
6413+ matrix = "@k900:0upti.me";
6414+ };
54876415 kaction = {
54886416 name = "Dmitry Bogatov";
54896417 email = "KAction@disroot.org";
@@ -5502,6 +6430,7 @@
55026430 };
55036431 kalbasit = {
55046432 email = "wael.nasreddine@gmail.com";
6433+ matrix = "@kalbasit:matrix.org";
55056434 github = "kalbasit";
55066435 githubId = 87115;
55076436 name = "Wael Nasreddine";
@@ -5534,6 +6463,12 @@
55346463 githubId = 3831860;
55356464 name = "Arnold Krille";
55366465 };
6466+ kanashimia = {
6467+ email = "chad@redpilled.dev";
6468+ github = "kanashimia";
6469+ githubId = 56224949;
6470+ name = "Mia Kanashi";
6471+ };
55376472 karantan = {
55386473 name = "Gasper Vozel";
55396474 email = "karantan@gmail.com";
@@ -5568,6 +6503,12 @@
55686503 githubId = 37185887;
55696504 name = "Calvin Kim";
55706505 };
6506+ keldu = {
6507+ email = "mail@keldu.de";
6508+ github = "keldu";
6509+ githubId = 15373888;
6510+ name = "Claudius Holeksa";
6511+ };
55716512 kennyballou = {
55726513 email = "kb@devnulllabs.io";
55736514 github = "kennyballou";
@@ -5592,6 +6533,7 @@
55926533 };
55936534 kevincox = {
55946535 email = "kevincox@kevincox.ca";
6536+ matrix = "@kevincox:matrix.org";
55956537 github = "kevincox";
55966538 githubId = 494012;
55976539 name = "Kevin Cox";
@@ -5602,6 +6544,12 @@
56026544 githubId = 209729;
56036545 name = "Kevin Griffin";
56046546 };
6547+ kevink = {
6548+ email = "kevin@kevink.dev";
6549+ github = "Unkn0wnCat";
6550+ githubId = 8211181;
6551+ name = "Kevin Kandlbinder";
6552+ };
56056553 kfollesdal = {
56066554 email = "kfollesdal@gmail.com";
56076555 github = "kfollesdal";
@@ -5692,6 +6640,7 @@
56926640 };
56936641 kirelagin = {
56946642 email = "kirelagin@gmail.com";
6643+ matrix = "@kirelagin:matrix.org";
56956644 github = "kirelagin";
56966645 githubId = 451835;
56976646 name = "Kirill Elagin";
@@ -5716,7 +6665,7 @@
57166665 keys = [{
57176666 longkeyid = "rsa4096/0x7248991EFA8EFBEE";
57186667 fingerprint = "01F5 0A29 D4AA 9117 5A11 BDB1 7248 991E FA8E FBEE";
5719− }];
6668+ }];
57206669 };
57216670 kiwi = {
57226671 email = "envy1988@gmail.com";
@@ -5734,10 +6683,22 @@
57346683 githubId = 8260207;
57356684 name = "Karthik Iyengar";
57366685 };
6686+ kjeremy = {
6687+ email = "kjeremy@gmail.com";
6688+ name = "Jeremy Kolb";
6689+ github = "kjeremy";
6690+ githubId = 4325700;
6691+ };
57376692 kkallio = {
57386693 email = "tierpluspluslists@gmail.com";
57396694 name = "Karn Kallio";
57406695 };
6696+ klden = {
6697+ name = "Kenzyme Le";
6698+ email = "kl@kenzymele.com";
6699+ github = "klDen";
6700+ githubId = 5478260;
6701+ };
57416702 klntsky = {
57426703 email = "klntsky@gmail.com";
57436704 name = "Vladimir Kalnitsky";
@@ -5745,7 +6706,8 @@
57456706 githubId = 18447310;
57466707 };
57476708 kloenk = {
5748− email = "me@kloenk.de";
6709+ email = "me@kloenk.dev";
6710+ matrix = "@kloenk:petabyte.dev";
57496711 name = "Finn Behrens";
57506712 github = "kloenk";
57516713 githubId = 12898828;
@@ -5768,7 +6730,7 @@
57686730 };
57696731
57706732 kmein = {
5771− email = "kieran.meinhardt@gmail.com";
6733+ email = "kmein@posteo.de";
57726734 name = "Kierán Meinhardt";
57736735 github = "kmein";
57746736 githubId = 10352507;
@@ -5821,6 +6783,12 @@
58216783 githubId = 15692230;
58226784 name = "Muhammad Herdiansyah";
58236785 };
6786+ koozz = {
6787+ email = "koozz@linux.com";
6788+ github = "koozz";
6789+ githubId = 264372;
6790+ name = "Jan van den Berg";
6791+ };
58246792 koral = {
58256793 email = "koral@mailoo.org";
58266794 github = "k0ral";
@@ -5845,6 +6813,12 @@
58456813 githubId = 787421;
58466814 name = "Kevin Quick";
58476815 };
6816+ kradalby = {
6817+ name = "Kristoffer Dalby";
6818+ email = "kristoffer@dalby.cc";
6819+ github = "kradalby";
6820+ githubId = 98431;
6821+ };
58486822 kraem = {
58496823 email = "me@kraem.xyz";
58506824 github = "kraem";
@@ -5911,11 +6885,11 @@
59116885 githubId = 99639;
59126886 name = "Pawel Kruszewski";
59136887 };
5914− ktosiek = {
5915− email = "tomasz.kontusz@gmail.com";
5916− github = "ktosiek";
5917− githubId = 278013;
5918− name = "Tomasz Kontusz";
6888+ kubukoz = {
6889+ email = "kubukoz@gmail.com";
6890+ github = "kubukoz";
6891+ githubId = 894884;
6892+ name = "Jakub Kozłowski";
59196893 };
59206894 kurnevsky = {
59216895 email = "kurnevsky@gmail.com";
@@ -5929,6 +6903,13 @@
59296903 githubId = 449813;
59306904 name = "Roman Kuznetsov";
59316905 };
6906+ kvark = {
6907+ name = "Dzmitry Malyshau";
6908+ email = "kvark@fastmail.com";
6909+ matrix = "@kvark:matrix.org";
6910+ github = "kvark";
6911+ githubId = 107301;
6912+ };
59326913 kwohlfahrt = {
59336914 email = "kai.wohlfahrt@gmail.com";
59346915 github = "kwohlfahrt";
@@ -5947,7 +6928,7 @@
59476928 };
59486929 kylesferrazza = {
59496930 name = "Kyle Sferrazza";
5950− email = "kyle.sferrazza@gmail.com";
6931+ email = "nixpkgs@kylesferrazza.com";
59516932
59526933 github = "kylesferrazza";
59536934 githubId = 6677292;
@@ -5959,6 +6940,7 @@
59596940 };
59606941 l-as = {
59616942 email = "las@protonmail.ch";
6943+ matrix = "@Las:matrix.org";
59626944 github = "L-as";
59636945 githubId = 22075344;
59646946 keys = [{
@@ -5969,6 +6951,7 @@
59696951 };
59706952 l3af = {
59716953 email = "L3afMeAlon3@gmail.com";
6954+ matrix = "@L3afMe:matrix.org";
59726955 github = "L3afMe";
59736956 githubId = 72546287;
59746957 name = "L3af";
@@ -5989,6 +6972,12 @@
59896972 githubId = 55911173;
59906973 name = "Gwendolyn Quasebarth";
59916974 };
6975+ lammermann = {
6976+ email = "k.o.b.e.r@web.de";
6977+ github = "lammermann";
6978+ githubId = 695526;
6979+ name = "Benjamin Kober";
6980+ };
59926981 larsr = {
59936982 email = "Lars.Rasmusson@gmail.com";
59946983 github = "larsr";
@@ -6009,6 +6998,7 @@
60096998 };
60106999 lassulus = {
60117000 email = "lassulus@gmail.com";
7001+ matrix = "@lassulus:nixos.dev";
60127002 github = "Lassulus";
60137003 githubId = 621759;
60147004 name = "Lassulus";
@@ -6050,6 +7040,12 @@
60507040 githubId = 1104419;
60517041 name = "Lucas Hoffmann";
60527042 };
7043+ lucasew = {
7044+ email = "lucas59356@gmail.com";
7045+ github = "lucasew";
7046+ githubId = 15693688;
7047+ name = "Lucas Eduardo Wendt";
7048+ };
60537049 lde = {
60547050 email = "lilian.deloche@puck.fr";
60557051 github = "lde";
@@ -6070,6 +7066,7 @@
60707066 };
60717067 ldesgoui = {
60727068 email = "ldesgoui@gmail.com";
7069+ matrix = "@ldesgoui:matrix.org";
60737070 github = "ldesgoui";
60747071 githubId = 2472678;
60757072 name = "Lucas Desgouilles";
@@ -6110,11 +7107,27 @@
61107107 githubId = 4158274;
61117108 name = "Michiel Leenaars";
61127109 };
6113− legendofmiracles = {
7110+ lom = {
61147111 email = "legendofmiracles@protonmail.com";
7112+ matrix = "@legendofmiracles:matrix.org";
61157113 github = "legendofmiracles";
61167114 githubId = 30902201;
61177115 name = "legendofmiracles";
7116+ keys = [{
7117+ longkeyid = "rsa4096/0x19B082B3DEFE5451";
7118+ fingerprint = "CC50 F82C 985D 2679 0703 AF15 19B0 82B3 DEFE 5451";
7119+ }];
7120+ };
7121+ leixb = {
7122+ email = "abone9999+nixpkgs@gmail.com";
7123+ matrix = "@leix_b:matrix.org";
7124+ github = "LeixB";
7125+ githubId = 17183803;
7126+ name = "Aleix Boné";
7127+ keys = [{
7128+ longkeyid = "rsa4096/0xFC035BB2BB28E15D";
7129+ fingerprint = "63D3 F436 EDE8 7E1F 1292 24AF FC03 5BB2 BB28 E15D";
7130+ }];
61187131 };
61197132 lejonet = {
61207133 email = "daniel@kuehn.se";
@@ -6160,6 +7173,7 @@
61607173 };
61617174 lewo = {
61627175 email = "lewo@abesis.fr";
7176+ matrix = "@lewo:matrix.org";
61637177 github = "nlewo";
61647178 githubId = 3425311;
61657179 name = "Antoine Eiche";
@@ -6204,6 +7218,13 @@
62047218 githubId = 1769386;
62057219 name = "Liam Diprose";
62067220 };
7221+ libjared = {
7222+ email = "jared@perrycode.com";
7223+ github = "libjared";
7224+ githubId = 3746656;
7225+ matrix = "@libjared:matrix.org";
7226+ name = "Jared Perry";
7227+ };
62077228 liff = {
62087229 email = "liff@iki.fi";
62097230 github = "liff";
@@ -6234,18 +7255,19 @@
62347255 githubId = 714;
62357256 name = "Lily Ballard";
62367257 };
7258+ lilyinstarlight = {
7259+ email = "lily@lily.flowers";
7260+ matrix = "@lily:lily.flowers";
7261+ github = "lilyinstarlight";
7262+ githubId = 298109;
7263+ name = "Lily Foster";
7264+ };
62377265 limeytexan = {
62387266 email = "limeytexan@gmail.com";
62397267 github = "limeytexan";
62407268 githubId = 36448130;
62417269 name = "Michael Brantley";
62427270 };
6243− linarcx = {
6244− email = "linarcx@gmail.com";
6245− github = "linarcx";
6246− githubId = 10884422;
6247− name = "Kaveh Ahangar";
6248− };
62497271 linc01n = {
62507272 email = "git@lincoln.hk";
62517273 github = "linc01n";
@@ -6258,6 +7280,12 @@
62587280 githubId = 791115;
62597281 name = "Linquize";
62607282 };
7283+ linsui = {
7284+ email = "linsui555@gmail.com";
7285+ github = "linsui";
7286+ githubId = 36977733;
7287+ name = "linsui";
7288+ };
62617289 linus = {
62627290 email = "linusarver@gmail.com";
62637291 github = "listx";
@@ -6284,12 +7312,30 @@
62847312 fingerprint = "5B93 9CFA E8FC 4D8F E07A 3AEA DFE1 D4A0 1733 7E2A";
62857313 }];
62867314 };
7315+ lorenzleutgeb = {
7316+ email = "lorenz@leutgeb.xyz";
7317+ github = "lorenzleutgeb";
7318+ githubId = 542154;
7319+ name = "Lorenz Leutgeb";
7320+ };
62877321 luis = {
62887322 email = "luis.nixos@gmail.com";
62897323 github = "Luis-Hebendanz";
62907324 githubId = 22085373;
62917325 name = "Luis Hebendanz";
62927326 };
7327+ lunarequest = {
7328+ email = "nullarequest@vivlaid.net";
7329+ github = "Lunarequest";
7330+ githubId = 30698906;
7331+ name = "Luna D Dragon";
7332+ };
7333+ LunNova = {
7334+ email = "nixpkgs-maintainer@lunnova.dev";
7335+ github = "LunNova";
7336+ githubId = 782440;
7337+ name = "Luna Nova";
7338+ };
62937339 lionello = {
62947340 email = "lio@lunesu.com";
62957341 github = "lionello";
@@ -6326,6 +7372,29 @@
63267372 githubId = 1267527;
63277373 name = "Daniel Firth";
63287374 };
7375+ lockejan = {
7376+ email = "git@smittie.de";
7377+ matrix = "@jan:smittie.de";
7378+ github = "lockejan";
7379+ githubId = 25434434;
7380+ name = "Jan Schmitt";
7381+ keys = [{
7382+ longkeyid = "dsa2048/0xA2BC3C6F14351991";
7383+ fingerprint = "1763 9903 2D7C 5B82 5D5A 0EAD A2BC 3C6F 1435 1991";
7384+ }];
7385+ };
7386+ lodi = {
7387+ email = "anthony.lodi@gmail.com";
7388+ github = "lodi";
7389+ githubId = 918448;
7390+ name = "Anthony Lodi";
7391+ };
7392+ loicreynier = {
7393+ email = "loic@loicreynier.fr";
7394+ github = "loicreynier";
7395+ githubId = 88983487;
7396+ name = "Loïc Reynier";
7397+ };
63297398 lopsided98 = {
63307399 email = "benwolsieffer@gmail.com";
63317400 github = "lopsided98";
@@ -6358,6 +7427,7 @@
63587427 };
63597428 lovesegfault = {
63607429 email = "meurerbernardo@gmail.com";
7430+ matrix = "@lovesegfault:matrix.org";
63617431 github = "lovesegfault";
63627432 githubId = 7243783;
63637433 name = "Bernardo Meurer";
@@ -6372,6 +7442,12 @@
63727442 githubId = 10626;
63737443 name = "Andreas Wagner";
63747444 };
7445+ lrewega = {
7446+ email = "lrewega@c32.ca";
7447+ github = "lrewega";
7448+ githubId = 639066;
7449+ name = "Luke Rewega";
7450+ };
63757451 lromor = {
63767452 email = "leonardo.romor@gmail.com";
63777453 github = "lromor";
@@ -6384,6 +7460,7 @@
63847460 };
63857461 lschuermann = {
63867462 email = "leon.git@is.currently.online";
7463+ matrix = "@leons:is.currently.online";
63877464 github = "lschuermann";
63887465 githubId = 5341193;
63897466 name = "Leon Schuermann";
@@ -6460,6 +7537,7 @@
64607537 };
64617538 lukegb = {
64627539 email = "nix@lukegb.com";
7540+ matrix = "@lukegb:zxcvbnm.ninja";
64637541 github = "lukegb";
64647542 githubId = 246745;
64657543 name = "Luke Granger-Brown";
@@ -6470,6 +7548,12 @@
64707548 githubId = 13791;
64717549 name = "Luke Gorrie";
64727550 };
7551+ luker = {
7552+ email = "luker@fenrirproject.org";
7553+ github = "LucaFulchir";
7554+ githubId = 2486026;
7555+ name = "Luca Fulchir";
7556+ };
64737557 lumi = {
64747558 email = "lumi@pew.im";
64757559 github = "lumi-me-not";
@@ -6478,6 +7562,7 @@
64787562 };
64797563 lunik1 = {
64807564 email = "ch.nixpkgs@themaw.xyz";
7565+ matrix = "@lunik1:lunik.one";
64817566 github = "lunik1";
64827567 githubId = 13547699;
64837568 name = "Corin Hoad";
@@ -6486,6 +7571,12 @@
64867571 fingerprint = "BA3A 5886 AE6D 526E 20B4 57D6 6A37 DF94 8318 8492";
64877572 }];
64887573 };
7574+ lux = {
7575+ email = "lux@lux.name";
7576+ githubId = 1208273;
7577+ matrix = "@lux:ontheblueplanet.com";
7578+ name = "Lux";
7579+ };
64897580 luz = {
64907581 email = "luz666@daum.net";
64917582 github = "Luz";
@@ -6514,6 +7605,12 @@
65147605 email = "wheatdoge@gmail.com";
65157606 name = "Tim Liou";
65167607 };
7608+ m00wl = {
7609+ name = "Moritz Lumme";
7610+ email = "moritz.lumme@gmail.com";
7611+ github = "m00wl";
7612+ githubId = 46034439;
7613+ };
65177614 m1cr0man = {
65187615 email = "lucas+nix@m1cr0man.com";
65197616 github = "m1cr0man";
@@ -6526,6 +7623,7 @@
65267623 };
65277624 ma27 = {
65287625 email = "maximilian@mbosch.me";
7626+ matrix = "@ma27:nicht-so.sexy";
65297627 github = "ma27";
65307628 githubId = 6025220;
65317629 name = "Maximilian Bosch";
@@ -6548,6 +7646,12 @@
65487646 githubId = 109141;
65497647 name = "Georges Dubus";
65507648 };
7649+ Madouura = {
7650+ email = "madouura@gmail.com";
7651+ github = "Madouura";
7652+ githubId = 93990818;
7653+ name = "Madoura";
7654+ };
65517655 mafo = {
65527656 email = "Marc.Fontaine@gmx.de";
65537657 github = "MarcFontaine";
@@ -6616,12 +7720,14 @@
66167720 };
66177721 manveru = {
66187722 email = "m.fellinger@gmail.com";
7723+ matrix = "@manveru:matrix.org";
66197724 github = "manveru";
66207725 githubId = 3507;
66217726 name = "Michael Fellinger";
66227727 };
66237728 maralorn = {
66247729 email = "malte.brandy@maralorn.de";
7730+ matrix = "@maralorn:maralorn.de";
66257731 github = "maralorn";
66267732 githubId = 1651325;
66277733 name = "Malte Brandy";
@@ -6684,12 +7790,24 @@
66847790 githubId = 623509;
66857791 name = "Martijn Vermaat";
66867792 };
7793+ martinetd = {
7794+ email = "f.ktfhrvnznqxacf@noclue.notk.org";
7795+ github = "martinetd";
7796+ githubId = 1729331;
7797+ name = "Dominique Martinet";
7798+ };
66877799 martingms = {
66887800 email = "martin@mg.am";
66897801 github = "martingms";
66907802 githubId = 458783;
66917803 name = "Martin Gammelsæter";
66927804 };
7805+ martfont = {
7806+ name = "Martino Fontana";
7807+ email = "tinozzo123@tutanota.com";
7808+ github = "SuperSamus";
7809+ githubId = 40663462;
7810+ };
66937811 marzipankaiser = {
66947812 email = "nixos@gaisseml.de";
66957813 github = "marzipankaiser";
@@ -6712,16 +7830,6 @@
67127830 githubId = 29855073;
67137831 name = "Michael Colicchia";
67147832 };
6715− matdsoupe = {
6716− github = "matdsoupe";
6717− githubId = 44469426;
6718− name = "Matheus de Souza Pessanha";
6719− email = "matheus_pessanha2001@outlook.com";
6720− keys = [{
6721− longkeyid = "rsa4096/0x2671964AB1E06A08";
6722− fingerprint = "2F32 CFEF E11A D73B A740 FA47 2671 964A B1E0 6A08";
6723− }];
6724− };
67257833 matejc = {
67267834 email = "cotman.matej@gmail.com";
67277835 github = "matejc";
@@ -6760,6 +7868,7 @@
67607868 };
67617869 matthiasbeyer = {
67627870 email = "mail@beyermatthias.de";
7871+ matrix = "@musicmatze:beyermatthi.as";
67637872 github = "matthiasbeyer";
67647873 githubId = 427866;
67657874 name = "Matthias Beyer";
@@ -6776,6 +7885,16 @@
67767885 githubId = 279868;
67777886 name = "Matti Kariluoma";
67787887 };
7888+ matthewpi = {
7889+ email = "me+nix@matthewp.io";
7890+ github = "matthewpi";
7891+ githubId = 26559841;
7892+ name = "Matthew Penner";
7893+ keys = [{
7894+ longkeyid = "ed25519/0x31311906AD4CF6D6";
7895+ fingerprint = "5118 F1CC B7B0 6C17 4DD1 5267 3131 1906 AD4C F6D6";
7896+ }];
7897+ };
67797898 maurer = {
67807899 email = "matthew.r.maurer+nix@gmail.com";
67817900 github = "maurer";
@@ -6788,6 +7907,16 @@
67887907 githubId = 95194;
67897908 name = "Mauricio Scheffer";
67907909 };
7910+ max-niederman = {
7911+ email = "max@maxniederman.com";
7912+ github = "max-niederman";
7913+ githubId = 19580458;
7914+ name = "Max Niederman";
7915+ keys = [{
7916+ longkeyid = "rsa3072/0x9AED881481D8444E";
7917+ fingerprint = "1DE4 424D BF77 1192 5DC4 CF5E 9AED 8814 81D8 444E";
7918+ }];
7919+ };
67917920 maxdamantus = {
67927921 email = "maxdamantus@gmail.com";
67937922 github = "Maxdamantus";
@@ -6812,6 +7941,12 @@
68127941 githubId = 1187050;
68137942 name = "Maximilian Huber";
68147943 };
7944+ maximsmol = {
7945+ email = "maximsmol@gmail.com";
7946+ github = "maximsmol";
7947+ githubId = 1472826;
7948+ name = "Max Smolin";
7949+ };
68157950 maxxk = {
68167951 email = "maxim.krivchikov@gmail.com";
68177952 github = "maxxk";
@@ -6866,6 +8001,12 @@
68668001 githubId = 51356;
68678002 name = "Mathieu Boespflug";
68688003 };
8004+ mbprtpmnr = {
8005+ name = "mbprtpmnr";
8006+ email = "mbprtpmnr@pm.me";
8007+ github = "mbprtpmnr";
8008+ githubId = 88109321;
8009+ };
68698010 mbrgm = {
68708011 email = "marius@yeai.de";
68718012 github = "mbrgm";
@@ -6986,12 +8127,6 @@
69868127 github = "kira-bruneau";
69878128 githubId = 382041;
69888129 };
6989− meutraa = {
6990− email = "paul+nixpkgs@lost.host";
6991− name = "Paul Meredith";
6992− github = "meutraa";
6993− githubId = 68550871;
6994− };
69958130 mephistophiles = {
69968131 email = "mussitantesmortem@gmail.com";
69978132 name = "Maxim Zhukov";
@@ -7034,14 +8169,27 @@
70348169 githubId = 668926;
70358170 name = "Maximilian Güntner";
70368171 };
8172+ mh = {
8173+ email = "68288772+markus-heinrich@users.noreply.github.com";
8174+ github = "markus-heinrich";
8175+ githubId = 68288772;
8176+ name = "Markus Heinrich";
8177+ };
70378178 mhaselsteiner = {
70388179 email = "magdalena.haselsteiner@gmx.at";
70398180 github = "mhaselsteiner";
70408181 githubId = 20536514;
70418182 name = "Magdalena Haselsteiner";
70428183 };
8184+ mh182 = {
8185+ email = "mh182@chello.at";
8186+ github = "mh182";
8187+ githubId = 9980864;
8188+ name = "Max Hofer";
8189+ };
70438190 mic92 = {
70448191 email = "joerg@thalheim.io";
8192+ matrix = "@mic92:nixos.dev";
70458193 github = "mic92";
70468194 githubId = 96200;
70478195 name = "Jörg Thalheim";
@@ -7081,6 +8229,12 @@
70818229 githubId = 21156022;
70828230 name = "Michal Minář";
70838231 };
8232+ michzappa = {
8233+ email = "me@michzappa.com";
8234+ github = "michzappa";
8235+ githubId = 59343378;
8236+ name = "Michael Zappa";
8237+ };
70848238 mickours = {
70858239 email = "mickours@gmail.com<";
70868240 github = "mickours";
@@ -7089,6 +8243,7 @@
70898243 };
70908244 midchildan = {
70918245 email = "git@midchildan.org";
8246+ matrix = "@midchildan:matrix.org";
70928247 github = "midchildan";
70938248 githubId = 7343721;
70948249 name = "midchildan";
@@ -7097,6 +8252,12 @@
70978252 fingerprint = "FEF0 AE2D 5449 3482 5F06 40AA 186A 1EDA C5C6 3F83";
70988253 }];
70998254 };
8255+ mihnea-s = {
8256+ email = "mihn.stn@gmail.com";
8257+ github = "mihnea-s";
8258+ githubId = 43088426;
8259+ name = "Mihnea Stoian";
8260+ };
71008261 mikefaille = {
71018262 email = "michael@faille.io";
71028263 github = "mikefaille";
@@ -7125,18 +8286,36 @@
71258286 fingerprint = "DB43 2895 CF68 F0CE D4B7 EF60 DA01 5B05 B5A1 1B22";
71268287 }];
71278288 };
8289+ milahu = {
8290+ email = "milahu@gmail.com";
8291+ github = "milahu";
8292+ githubId = 12958815;
8293+ name = "Milan Hauth";
8294+ };
71288295 milesbreslin = {
71298296 email = "milesbreslin@gmail.com";
71308297 github = "milesbreslin";
71318298 githubId = 38543128;
71328299 name = "Miles Breslin";
71338300 };
8301+ milibopp = {
8302+ email = "contact@ebopp.de";
8303+ github = "milibopp";
8304+ githubId = 3098430;
8305+ name = "Emilia Bopp";
8306+ };
71348307 millerjason = {
71358308 email = "mailings-github@millerjason.com";
71368309 github = "millerjason";
71378310 githubId = 7610974;
71388311 name = "Jason Miller";
71398312 };
8313+ milogert = {
8314+ email = "milo@milogert.com";
8315+ github = "milogert";
8316+ githubId = 5378535;
8317+ name = "Milo Gertjejansen";
8318+ };
71408319 miltador = {
71418320 email = "miltador@yandex.ua";
71428321 name = "Vasiliy Solovey";
@@ -7181,6 +8360,17 @@
71818360 githubId = 1776903;
71828361 name = "Andrew Abbott";
71838362 };
8363+ misterio77 = {
8364+ email = "eu@misterio.me";
8365+ github = "misterio77";
8366+ githubId = 5727578;
8367+ matrix = "@misterio:matrix.org";
8368+ name = "Gabriel Fontes";
8369+ keys = [{
8370+ longkeyid = "rsa3072/0x245CAB70B4C225E9";
8371+ fingerprint = "7088 C742 1873 E0DB 97FF 17C2 245C AB70 B4C2 25E9";
8372+ }];
8373+ };
71848374 mitchmindtree = {
71858375 email = "mail@mitchellnordine.com";
71868376 github = "mitchmindtree";
@@ -7193,12 +8383,6 @@
71938383 githubId = 1001112;
71948384 name = "Marcin Janczyk";
71958385 };
7196− mjlbach = {
7197− email = "m.j.lbach@gmail.com";
7198− github = "mjlbach";
7199− githubId = 13316262;
7200− name = "Michael Lingelbach";
7201− };
72028386 mjp = {
72038387 email = "mike@mythik.co.uk";
72048388 github = "MikePlayle";
@@ -7235,6 +8419,7 @@
72358419 };
72368420 mkg20001 = {
72378421 email = "mkg20001+nix@gmail.com";
8422+ matrix = "@mkg20001:matrix.org";
72388423 github = "mkg20001";
72398424 githubId = 7735145;
72408425 name = "Maciej Krüger";
@@ -7318,6 +8503,7 @@
73188503 mohe2015 = {
73198504 name = "Moritz Hedtke";
73208505 email = "Moritz.Hedtke@t-online.de";
8506+ matrix = "@moritz.hedtke:matrix.org";
73218507 github = "mohe2015";
73228508 githubId = 13287984;
73238509 keys = [{
@@ -7359,6 +8545,12 @@
73598545 githubId = 99988;
73608546 name = "Maarten Hoogendoorn";
73618547 };
8548+ MoritzBoehme = {
8549+ email = "mail@moritzboeh.me";
8550+ github = "MoritzBoehme";
8551+ githubId = 42215704;
8552+ name = "Moritz Böhme";
8553+ };
73628554 MostAwesomeDude = {
73638555 email = "cds@corbinsimpson.com";
73648556 github = "MostAwesomeDude";
@@ -7425,6 +8617,17 @@
74258617 githubId = 3073833;
74268618 name = "Massimo Redaelli";
74278619 };
8620+ mrhedgehog = {
8621+ name = "Mr Hedgehog";
8622+ email = "hedgehog@mrhedgehog.xyz";
8623+ matrix = "@mrhedgehog:jupiterbroadcasting.com";
8624+ github = "ModdedGamers";
8625+ githubId = 35778371;
8626+ keys = [{
8627+ longkeyid = "rsa4096/0x7D5107866B1C6752";
8628+ fingerprint = "38A0 29B0 4A7E 4C13 A4BB 86C8 7D51 0786 6B1C 6752";
8629+ }];
8630+ };
74288631 mrkkrp = {
74298632 email = "markkarpov92@gmail.com";
74308633 github = "mrkkrp";
@@ -7465,7 +8668,7 @@
74658668 };
74668669 msfjarvis = {
74678670 github = "msfjarvis";
7468− githubId = 3348378;
8671+ githubId = 13348378;
74698672 name = "Harsh Shandilya";
74708673 email = "nixos@msfjarvis.dev";
74718674 keys = [{
@@ -7509,6 +8712,12 @@
75098712 githubId = 4996739;
75108713 name = "Masayuki Takeda";
75118714 };
8715+ mtesseract = {
8716+ email = "moritz@stackrox.com";
8717+ github = "mtesseract";
8718+ githubId = 11706080;
8719+ name = "Moritz Clasmeier";
8720+ };
75128721 MtP = {
75138722 email = "marko.nixos@poikonen.de";
75148723 github = "MtP76";
@@ -7563,12 +8772,30 @@
75638772 githubId = 25388474;
75648773 name = "Matej Urbas";
75658774 };
8775+ mvisonneau = {
8776+ name = "Maxime VISONNEAU";
8777+ email = "maxime@visonneau.fr";
8778+ matrix = "@maxime:visonneau.fr";
8779+ github = "mvisonneau";
8780+ githubId = 1761583;
8781+ keys = [{
8782+ longkeyid = "rsa4096/0x150D6F0AE9198D24";
8783+ fingerprint = "EC63 0CEA E8BC 5EE5 5C58 F2E3 150D 6F0A E919 8D24";
8784+ }];
8785+ };
75668786 mvnetbiz = {
75678787 email = "mvnetbiz@gmail.com";
8788+ matrix = "@mvtva:matrix.org";
75688789 github = "mvnetbiz";
75698790 githubId = 6455574;
75708791 name = "Matt Votava";
75718792 };
8793+ mvs = {
8794+ email = "mvs@nya.yt";
8795+ github = "illdefined";
8796+ githubId = 772914;
8797+ name = "Mikael Voss";
8798+ };
75728799 maxwilson = {
75738800 email = "nixpkgs@maxwilson.dev";
75748801 github = "mwilsoncoding";
@@ -7581,6 +8808,12 @@
75818808 githubId = 9636071;
75828809 name = "Myrl Hex";
75838810 };
8811+ n0emis = {
8812+ email = "nixpkgs@n0emis.network";
8813+ github = "n0emis";
8814+ githubId = 22817873;
8815+ name = "Ember Keske";
8816+ };
75848817 nadrieril = {
75858818 email = "nadrieril@gmail.com";
75868819 github = "nadrieril";
@@ -7637,6 +8870,23 @@
76378870 githubId = 56316606;
76388871 name = "Amneesh Singh";
76398872 };
8873+ nazarewk = {
8874+ name = "Krzysztof Nazarewski";
8875+ email = "3494992+nazarewk@users.noreply.github.com";
8876+ matrix = "@nazarewk:matrix.org";
8877+ github = "nazarewk";
8878+ githubId = 3494992;
8879+ keys = [{
8880+ longkeyid = "rsa4096/0x916D8B67241892AE";
8881+ fingerprint = "4BFF 0614 03A2 47F0 AA0B 4BC4 916D 8B67 2418 92AE";
8882+ }];
8883+ };
8884+ nbr = {
8885+ email = "nbr@users.noreply.github.com";
8886+ github = "nbr";
8887+ githubId = 3819225;
8888+ name = "Nick Braga";
8889+ };
76408890 nbren12 = {
76418891 email = "nbren12@gmail.com";
76428892 github = "nbren12";
@@ -7645,6 +8895,7 @@
76458895 };
76468896 ncfavier = {
76478897 email = "n@monade.li";
8898+ matrix = "@ncfavier:matrix.org";
76488899 github = "ncfavier";
76498900 githubId = 4323933;
76508901 name = "Naïm Favier";
@@ -7671,12 +8922,30 @@
76718922 githubId = 3747396;
76728923 name = "Nathan Isom";
76738924 };
8925+ neilmayhew = {
8926+ email = "nix@neil.mayhew.name";
8927+ github = "neilmayhew";
8928+ githubId = 166791;
8929+ name = "Neil Mayhew";
8930+ };
8931+ nelsonjeppesen = {
8932+ email = "nix@jeppesen.io";
8933+ github = "NelsonJeppesen";
8934+ githubId = 50854675;
8935+ name = "Nelson Jeppesen";
8936+ };
76748937 neonfuz = {
76758938 email = "neonfuz@gmail.com";
76768939 github = "neonfuz";
76778940 githubId = 2590830;
76788941 name = "Sage Raflik";
76798942 };
8943+ neosimsim = {
8944+ email = "me@abn.sh";
8945+ github = "neosimsim";
8946+ githubId = 1771772;
8947+ name = "Alexander Ben Nasrallah";
8948+ };
76808949 nequissimus = {
76818950 email = "tim@nequissimus.com";
76828951 github = "nequissimus";
@@ -7713,10 +8982,16 @@
77138982 name = "Xinhao Luo";
77148983 };
77158984 newam = {
7716− email = "alexmgit@protonmail.com";
8985+ email = "alex@thinglab.org";
77178986 github = "newAM";
77188987 githubId = 7845120;
7719− name = "Alex M.";
8988+ name = "Alex Martens";
8989+ };
8990+ nialov = {
8991+ email = "nikolasovaskainen@gmail.com";
8992+ github = "nialov";
8993+ githubId = 47318483;
8994+ name = "Nikolas Ovaskainen";
77208995 };
77218996 nikitavoloboev = {
77228997 email = "nikita.voloboev@gmail.com";
@@ -7730,6 +9005,7 @@
77309005 };
77319006 nh2 = {
77329007 email = "mail@nh2.me";
9008+ matrix = "@nh2:matrix.org";
77339009 github = "nh2";
77349010 githubId = 399535;
77359011 name = "Niklas Hambüchen";
@@ -7780,6 +9056,12 @@
77809056 githubId = 8214542;
77819057 name = "Nicolò Balzarotti";
77829058 };
9059+ nidabdella = {
9060+ name = "Mohamed Nidabdella";
9061+ email = "nidabdella.mohamed@gmail.com";
9062+ github = "nidabdella";
9063+ githubId = 8083813;
9064+ };
77839065 NieDzejkob = {
77849066 email = "kuba@kadziolka.net";
77859067 github = "NieDzejkob";
@@ -7816,6 +9098,7 @@
78169098 };
78179099 ninjatrappeur = {
78189100 email = "felix@alternativebit.fr";
9101+ matrix = "@ninjatrappeur:matrix.org";
78199102 github = "ninjatrappeur";
78209103 githubId = 1219785;
78219104 name = "Félix Baylac-Jacqué";
@@ -7870,6 +9153,7 @@
78709153 };
78719154 nixinator = {
78729155 email = "33lockdown33@protonmail.com";
9156+ matrix = "@nixinator:nixos.dev";
78739157 github = "nixinator";
78749158 githubId = 66913205;
78759159 name = "Rick Sanchez";
@@ -7880,6 +9164,12 @@
78809164 githubId = 7588406;
78819165 name = "Andrew R. M.";
78829166 };
9167+ nkalupahana = {
9168+ email = "hello@nisa.la";
9169+ github = "nkalupahana";
9170+ githubId = 7347290;
9171+ name = "Nisala Kalupahana";
9172+ };
78839173 nloomans = {
78849174 email = "noah@nixos.noahloomans.com";
78859175 github = "nloomans";
@@ -7904,6 +9194,12 @@
79049194 githubId = 810877;
79059195 name = "Tom Doggett";
79069196 };
9197+ noisersup = {
9198+ email = "patryk@kwiatek.xyz";
9199+ github = "noisersup";
9200+ githubId = 42322511;
9201+ name = "Patryk Kwiatek";
9202+ };
79079203 nomeata = {
79089204 email = "mail@joachim-breitner.de";
79099205 github = "nomeata";
@@ -7918,13 +9214,14 @@
79189214 };
79199215 noneucat = {
79209216 email = "andy@lolc.at";
9217+ matrix = "@noneucat:lolc.at";
79219218 github = "noneucat";
79229219 githubId = 40049608;
79239220 name = "Andy Chun";
79249221 };
79259222 noreferences = {
79269223 email = "norkus@norkus.net";
7927− github = "noreferences";
9224+ github = "jozuas";
79289225 githubId = 13085275;
79299226 name = "Juozas Norkus";
79309227 };
@@ -7940,9 +9237,9 @@
79409237 githubId = 2946283;
79419238 name = "Brian Cohen";
79429239 };
7943− novoxudonoser = {
9240+ novoxd = {
79449241 email = "radnovox@gmail.com";
7945− github = "novoxudonoser";
9242+ github = "novoxd";
79469243 githubId = 6052922;
79479244 name = "Kirill Struokov";
79489245 };
@@ -7960,6 +9257,7 @@
79609257 };
79619258 nrdxp = {
79629259 email = "tim.deh@pm.me";
9260+ matrix = "@timdeh:matrix.org";
79639261 github = "nrdxp";
79649262 githubId = 34083928;
79659263 name = "Tim DeHerrera";
@@ -8001,6 +9299,7 @@
80019299 numkem = {
80029300 name = "Sebastien Bariteau";
80039301 email = "numkem@numkem.org";
9302+ matrix = "@numkem:matrix.org";
80049303 github = "numkem";
80059304 githubId = 332423;
80069305 };
@@ -8022,6 +9321,17 @@
80229321 githubId = 127548;
80239322 name = "Judson Lester";
80249323 };
9324+ nzbr = {
9325+ email = "nixos@nzbr.de";
9326+ github = "nzbr";
9327+ githubId = 7851175;
9328+ name = "nzbr";
9329+ matrix = "@nzbr:nzbr.de";
9330+ keys = [{
9331+ longkeyid = "rsa2048/0x6C78B50B97A42F8A";
9332+ fingerprint = "BF3A 3EE6 3144 2C5F C9FB 39A7 6C78 B50B 97A4 2F8A";
9333+ }];
9334+ };
80259335 nzhang-zh = {
80269336 email = "n.zhang.hp.au@gmail.com";
80279337 github = "nzhang-zh";
@@ -8042,6 +9352,7 @@
80429352 };
80439353 obfusk = {
80449354 email = "flx@obfusk.net";
9355+ matrix = "@obfusk:matrix.org";
80459356 github = "obfusk";
80469357 githubId = 1260687;
80479358 name = "Felix C. Stegerman";
@@ -8056,6 +9367,12 @@
80569367 githubId = 158758;
80579368 name = "Oliver Dunkl";
80589369 };
9370+ ofek = {
9371+ email = "oss@ofek.dev";
9372+ github = "ofek";
9373+ githubId = 9677399;
9374+ name = "Ofek Lev";
9375+ };
80599376 offline = {
80609377 email = "jaka@x-truder.net";
80619378 github = "offlinehacker";
@@ -8090,6 +9407,12 @@
80909407 githubId = 72201;
80919408 name = "Ole Jørgen Brønner";
80929409 };
9410+ ollieB = {
9411+ email = "1237862+oliverbunting@users.noreply.github.com";
9412+ github = "oliverbunting";
9413+ githubId = 1237862;
9414+ name = "Ollie Bunting";
9415+ };
80939416 olynch = {
80949417 email = "owen@olynch.me";
80959418 github = "olynch";
@@ -8144,6 +9467,12 @@
81449467 githubId = 23431373;
81459468 name = "Christoph Neidahl";
81469469 };
9470+ opeik = {
9471+ email = "sandro@stikic.com";
9472+ github = "opeik";
9473+ githubId = 11566773;
9474+ name = "Sandro Stikić";
9475+ };
81479476 orbekk = {
81489477 email = "kjetil.orbekk@gmail.com";
81499478 github = "orbekk";
@@ -8162,6 +9491,12 @@
81629491 githubId = 101514;
81639492 name = "Orivej Desh";
81649493 };
9494+ ornxka = {
9495+ email = "ornxka@littledevil.sh";
9496+ github = "ornxka";
9497+ githubId = 52086525;
9498+ name = "ornxka";
9499+ };
81659500 oro = {
81669501 email = "marco@orovecchia.at";
81679502 github = "oro";
@@ -8222,6 +9557,12 @@
82229557 githubId = 15930073;
82239558 name = "Moritz Scheuren";
82249559 };
9560+ ozkutuk = {
9561+ email = "ozkutuk@protonmail.com";
9562+ github = "ozkutuk";
9563+ githubId = 5948762;
9564+ name = "Berk Özkütük";
9565+ };
82259566 pablovsky = {
82269567 email = "dealberapablo07@gmail.com";
82279568 github = "pablo1107";
@@ -8236,6 +9577,7 @@
82369577 };
82379578 pacman99 = {
82389579 email = "pachum99@gmail.com";
9580+ matrix = "@pachumicchu:myrdd.info";
82399581 github = "Pacman99";
82409582 githubId = 16345849;
82419583 name = "Parthiv Seetharaman";
@@ -8266,6 +9608,7 @@
82669608 };
82679609 pamplemousse = {
82689610 email = "xav.maso@gmail.com";
9611+ matrix = "@pamplemouss_:matrix.org";
82699612 github = "Pamplemousse";
82709613 githubId = 2647236;
82719614 name = "Xavier Maso";
@@ -8288,6 +9631,13 @@
82889631 githubId = 71795;
82899632 name = "Mica Semrick";
82909633 };
9634+ papojari = {
9635+ email = "papojari-git.ovoid@aleeas.com";
9636+ matrix = "@papojari:artemislena.eu";
9637+ github = "papojari";
9638+ githubId = 81317317;
9639+ name = "papojari";
9640+ };
82919641 paraseba = {
82929642 email = "paraseba@gmail.com";
82939643 github = "paraseba";
@@ -8319,7 +9669,7 @@
83199669 name = "pasqui23";
83209670 };
83219671 patryk27 = {
8322− email = "wychowaniec.patryk@gmail.com";
9672+ email = "pwychowaniec@pm.me";
83239673 github = "Patryk27";
83249674 githubId = 3395477;
83259675 name = "Patryk Wychowaniec";
@@ -8346,6 +9696,12 @@
83469696 githubId = 116740;
83479697 name = "Paweł Pacana";
83489698 };
9699+ pb- = {
9700+ email = "pbaecher@gmail.com";
9701+ github = "pb-";
9702+ githubId = 84886;
9703+ name = "Paul Baecher";
9704+ };
83499705 pbogdan = {
83509706 email = "ppbogdan@gmail.com";
83519707 github = "pbogdan";
@@ -8370,18 +9726,18 @@
83709726 githubId = 8641;
83719727 name = "Pierre Carrier";
83729728 };
8373− pengmeiyu = {
8374− email = "pengmyu@gmail.com";
8375− github = "pmeiyu";
8376− githubId = 8529551;
8377− name = "Peng Mei Yu";
8378− };
83799729 penguwin = {
83809730 email = "penguwin@penguwin.eu";
83819731 github = "penguwin";
83829732 githubId = 13225611;
83839733 name = "Nicolas Martin";
83849734 };
9735+ pennae = {
9736+ name = "pennae";
9737+ email = "github@quasiparticle.net";
9738+ github = "pennae";
9739+ githubId = 82953136;
9740+ };
83859741 p3psi = {
83869742 name = "Elliot Boo";
83879743 email = "p3psi.boo@gmail.com";
@@ -8396,6 +9752,7 @@
83969752 };
83979753 petabyteboy = {
83989754 email = "milan@petabyte.dev";
9755+ matrix = "@milan:petabyte.dev";
83999756 github = "petabyteboy";
84009757 githubId = 3250809;
84019758 name = "Milan Pässler";
@@ -8408,6 +9765,7 @@
84089765 };
84099766 peterhoeg = {
84109767 email = "peter@hoeg.com";
9768+ matrix = "@peter:hoeg.com";
84119769 github = "peterhoeg";
84129770 githubId = 722550;
84139771 name = "Peter Hoeg";
@@ -8472,11 +9830,11 @@
84729830 githubId = 421510;
84739831 name = "Noé Rubinstein";
84749832 };
8475− phreedom = {
8476− email = "phreedom@yandex.ru";
8477− github = "phreedom";
8478− githubId = 62577;
8479− name = "Evgeny Egorochkin";
9833+ photex = {
9834+ email = "photex@gmail.com";
9835+ github = "photex";
9836+ githubId = 301903;
9837+ name = "Chip Collier";
84809838 };
84819839 phryneas = {
84829840 email = "mail@lenzw.de";
@@ -8493,6 +9851,7 @@
84939851 piegames = {
84949852 name = "piegames";
84959853 email = "nix@piegames.de";
9854+ matrix = "@piegames:matrix.org";
84969855 github = "piegamesde";
84979856 githubId = 14054505;
84989857 };
@@ -8542,7 +9901,7 @@
85429901 githubId = 1719781;
85439902 name = "Pablo Ovelleiro Corral";
85449903 keys = [{
8545− longkeyid = "sa4096/0x823A6154426408D3";
9904+ longkeyid = "rsa4096/0x823A6154426408D3";
85469905 fingerprint = "D03B 218C AE77 1F77 D7F9 20D9 823A 6154 4264 08D3";
85479906 }];
85489907 };
@@ -8636,6 +9995,12 @@
86369995 githubId = 178496;
86379996 name = "Philipp Middendorf";
86389997 };
9998+ pmy = {
9999+ email = "pmy@xqzp.net";
10000+ github = "pmeiyu";
10001+ githubId = 8529551;
10002+ name = "Peng Mei Yu";
10003+ };
863910004 pmyjavec = {
864010005 email = "pauly@myjavec.com";
864110006 github = "pmyjavec";
@@ -8654,6 +10019,12 @@
865410019 githubId = 11365056;
865510020 name = "Kevin Liu";
865610021 };
10022+ pnmadelaine = {
10023+ name = "Paul-Nicolas Madelaine";
10024+ email = "pnm@pnm.tf";
10025+ github = "pnmadelaine";
10026+ githubId = 21977014;
10027+ };
865710028 pnotequalnp = {
865810029 email = "kevin@pnotequalnp.com";
865910030 github = "pnotequalnp";
@@ -8664,6 +10035,12 @@
866410035 fingerprint = "2CD2 B030 BD22 32EF DF5A 008A 3618 20A4 5DB4 1E9A";
866510036 }];
866610037 };
10038+ podocarp = {
10039+ email = "xdjiaxd@gmail.com";
10040+ github = "podocarp";
10041+ githubId = 10473184;
10042+ name = "Jia Xiaodong";
10043+ };
866710044 polendri = {
866810045 email = "paul@ijj.li";
866910046 github = "polendri";
@@ -8704,6 +10081,18 @@
870410081 fingerprint = "48AD DE10 F27B AFB4 7BB0 CCAF 2D25 95A0 0D08 ACE0";
870510082 }];
870610083 };
10084+ ppenguin = {
10085+ name = "Jeroen Versteeg";
10086+ email = "hieronymusv@gmail.com";
10087+ github = "ppenguin";
10088+ githubId = 17690377;
10089+ };
10090+ ppom = {
10091+ name = "Paco Pompeani";
10092+ email = "paco@ecomail.io";
10093+ github = "aopom";
10094+ githubId = 38916722;
10095+ };
870710096 pradeepchhetri = {
870810097 email = "pradeep.chhetri89@gmail.com";
870910098 github = "pradeepchhetri";
@@ -8740,6 +10129,7 @@
874010129 };
874110130 primeos = {
874210131 email = "dev.primeos@gmail.com";
10132+ matrix = "@primeos:matrix.org";
874310133 github = "primeos";
874410134 githubId = 7537109;
874510135 name = "Michael Weiss";
@@ -8800,14 +10190,23 @@
880010190 githubId = 33375;
880110191 name = "Peter Sanford";
880210192 };
10193+ pshirshov = {
10194+ email = "pshirshov@eml.cc";
10195+ github = "pshirshov";
10196+ githubId = 295225;
10197+ name = "Pavel Shirshov";
10198+ };
880310199 psibi = {
880410200 email = "sibi@psibi.in";
10201+ matrix = "@psibi:matrix.org";
880510202 github = "psibi";
880610203 githubId = 737477;
880710204 name = "Sibi Prabakaran";
880810205 };
880910206 pstn = {
881010207 email = "philipp@xndr.de";
10208+ github = "pstn";
10209+ githubId = 1329940;
881110210 name = "Philipp Steinpaß";
881210211 };
881310212 pSub = {
@@ -8822,6 +10221,12 @@
882210221 githubId = 20524473;
882310222 name = "Psyanticy";
882410223 };
10224+ psydvl = {
10225+ email = "psydvl@fea.st";
10226+ github = "psydvl";
10227+ githubId = 43755002;
10228+ name = "Dmitriy P";
10229+ };
882510230 ptival = {
882610231 email = "valentin.robert.42@gmail.com";
882710232 github = "Ptival";
@@ -8854,6 +10259,7 @@
885410259 };
885510260 putchar = {
885610261 email = "slim.cadoux@gmail.com";
10262+ matrix = "@putch4r:matrix.org";
885710263 github = "putchar";
885810264 githubId = 8208767;
885910265 name = "Slim Cadoux";
@@ -8894,6 +10300,12 @@
889410300 githubId = 115877;
889510301 name = "Kenny Shen";
889610302 };
10303+ quag = {
10304+ email = "quaggy@gmail.com";
10305+ github = "quag";
10306+ githubId = 35086;
10307+ name = "Jonathan Wright";
10308+ };
889710309 queezle = {
889810310 email = "git@queezle.net";
889910311 github = "qzle";
@@ -8922,8 +10334,15 @@
892210334 githubId = 52847440;
892310335 name = "Ryan Burns";
892410336 };
10337+ r3dl3g = {
10338+ email = "redleg@rothfuss-web.de";
10339+ github = "r3dl3g";
10340+ githubId = 35229674;
10341+ name = "Armin Rothfuss";
10342+ };
892510343 raboof = {
892610344 email = "arnout@bzzt.net";
10345+ matrix = "@raboof:matrix.org";
892710346 github = "raboof";
892810347 githubId = 131856;
892910348 name = "Arnout Engelen";
@@ -8940,6 +10359,13 @@
894010359 githubId = 1016742;
894110360 name = "Rafael García";
894210361 };
10362+ raitobezarius = {
10363+ email = "ryan@lahfa.xyz";
10364+ matrix = "@raitobezarius:matrix.org";
10365+ github = "RaitoBezarius";
10366+ githubId = 314564;
10367+ name = "Ryan Lahfa";
10368+ };
894310369 raquelgb = {
894410370 email = "raquel.garcia.bautista@gmail.com";
894510371 github = "raquelgb";
@@ -8954,6 +10380,7 @@
895410380 };
895510381 ralith = {
895610382 email = "ben.e.saunders@gmail.com";
10383+ matrix = "@ralith:ralith.com";
895710384 github = "ralith";
895810385 githubId = 104558;
895910386 name = "Benjamin Saunders";
@@ -9022,6 +10449,16 @@
902210449 githubId = 16487165;
902310450 name = "Rafael Basso";
902410451 };
10452+ rbreslow = {
10453+ name = "Rocky Breslow";
10454+ email = "1774125+rbreslow@users.noreply.github.com";
10455+ github = "rbreslow";
10456+ githubId = 1774125;
10457+ keys = [{
10458+ longkeyid = "ed25519/0xA0D32ACCA38B88ED";
10459+ fingerprint = "B5B7 BCA0 EE6F F31E 263A 69E3 A0D3 2ACC A38B 88ED";
10460+ }];
10461+ };
902510462 rbrewer = {
902610463 email = "rwb123@gmail.com";
902710464 github = "rbrewer123";
@@ -9040,6 +10477,20 @@
904010477 githubId = 16624;
904110478 name = "Maxim Ivanov";
904210479 };
10480+ reckenrode = {
10481+ name = "Randy Eckenrode";
10482+ email = "randy@largeandhighquality.com";
10483+ matrix = "@reckenrode:matrix.org";
10484+ github = "reckenrode";
10485+ githubId = 7413633;
10486+ keys = [
10487+ # compare with https://keybase.io/reckenrode
10488+ {
10489+ longkeyid = "ed25519/0xFBF19A982CCE0048";
10490+ fingerprint = "01D7 5486 3A6D 64EA AC77 0D26 FBF1 9A98 2CCE 0048";
10491+ }
10492+ ];
10493+ };
904310494 redfish64 = {
904410495 email = "engler@gmail.com";
904510496 github = "redfish64";
@@ -9094,6 +10545,12 @@
909410545 githubId = 546296;
909510546 name = "Eric Ren";
909610547 };
10548+ renesat = {
10549+ name = "Ivan Smolyakov";
10550+ email = "smol.ivan97@gmail.com";
10551+ github = "renesat";
10552+ githubId = 11363539;
10553+ };
909710554 renzo = {
909810555 email = "renzocarbonara@gmail.com";
909910556 github = "k0001";
@@ -9106,12 +10563,40 @@
910610563 githubId = 500703;
910710564 name = "Tadas Barzdžius";
910810565 };
10566+ revol-xut = {
10567+ email = "revol-xut@protonmail.com";
10568+ name = "Tassilo Tanneberger";
10569+ github = "revol-xut";
10570+ githubId = 32239737;
10571+ keys = [{
10572+ longkeyid = "rsa4096/B966009D57E69CC6";
10573+ fingerprint = "91EB E870 1639 1323 642A 6803 B966 009D 57E6 9CC6";
10574+ }];
10575+ };
910910576 rexim = {
911010577 email = "reximkut@gmail.com";
911110578 github = "rexim";
911210579 githubId = 165283;
911310580 name = "Alexey Kutepov";
911410581 };
10582+ rewine = {
10583+ email = "lhongxu@outlook.com";
10584+ github = "wineee";
10585+ githubId = 22803888;
10586+ name = "Lu Hongxu";
10587+ };
10588+ rgnns = {
10589+ email = "jglievano@gmail.com";
10590+ github = "rgnns";
10591+ githubId = 811827;
10592+ name = "Gabriel Lievano";
10593+ };
10594+ rgrinberg = {
10595+ name = "Rudi Grinberg";
10596+ email = "me@rgrinberg.com";
10597+ github = "rgrinberg";
10598+ githubId = 139003;
10599+ };
911510600 rgrunbla = {
911610601 email = "remy@grunblatt.org";
911710602 github = "rgrunbla";
@@ -9136,6 +10621,13 @@
913610621 githubId = 6047658;
913710622 name = "Ryan Horiguchi";
913810623 };
10624+ rhysmdnz = {
10625+ email = "rhys@memes.nz";
10626+ matrix = "@rhys:memes.nz";
10627+ github = "rhysmdnz";
10628+ githubId = 2162021;
10629+ name = "Rhys Davies";
10630+ };
913910631 ribose-jeffreylau = {
914010632 name = "Jeffrey Lau";
914110633 email = "jeffrey.lau@ribose.com";
@@ -9160,6 +10652,13 @@
916010652 githubId = 16779;
916110653 name = "Rickard Nilsson";
916210654 };
10655+ ricochet = {
10656+ email = "behayes2@gmail.com";
10657+ github = "ricochet";
10658+ githubId = 974323;
10659+ matrix = "@ricochetcode:matrix.org";
10660+ name = "Bailey Hayes";
10661+ };
916310662 riey = {
916410663 email = "creeper844@gmail.com";
916510664 github = "Riey";
@@ -9178,6 +10677,12 @@
917810677 githubId = 37246692;
917910678 name = "Riley Inman";
918010679 };
10680+ riotbib = {
10681+ email = "github-nix@lnrt.de";
10682+ github = "riotbib";
10683+ githubId = 43172581;
10684+ name = "Lennart Mühlenmeier";
10685+ };
918110686 ris = {
918210687 email = "code@humanleg.org.uk";
918310688 github = "risicle";
@@ -9187,6 +10692,7 @@
918710692 risson = {
918810693 name = "Marc Schmitt";
918910694 email = "marc.schmitt@risson.space";
10695+ matrix = "@risson:lama-corp.space";
919010696 github = "rissson";
919110697 githubId = 18313093;
919210698 keys = [
@@ -9200,12 +10706,6 @@
920010706 }
920110707 ];
920210708 };
9203− rittelle = {
9204− email = "rittelle@posteo.de";
9205− github = "rittelle";
9206− githubId = 33598633;
9207− name = "Lennart Rittel";
9208− };
920910709 rixed = {
921010710 email = "rixed-github@happyleptic.org";
921110711 github = "rixed";
@@ -9244,12 +10744,14 @@
924410744 };
924510745 rmcgibbo = {
924610746 email = "rmcgibbo@gmail.com";
10747+ matrix = "@rmcgibbo:matrix.org";
924710748 github = "rmcgibbo";
924810749 githubId = 641278;
924910750 name = "Robert T. McGibbon";
925010751 };
925110752 rnhmjoj = {
925210753 email = "rnhmjoj@inventati.org";
10754+ matrix = "@rnhmjoj:maxwell.ydns.eu";
925310755 github = "rnhmjoj";
925410756 githubId = 2817565;
925510757 name = "Michele Guerini Rocco";
@@ -9290,6 +10792,7 @@
929010792 };
929110793 roberth = {
929210794 email = "nixpkgs@roberthensing.nl";
10795+ matrix = "@roberthensing:matrix.org";
929310796 github = "roberth";
929410797 githubId = 496447;
929510798 name = "Robert Hensing";
@@ -9348,18 +10851,9 @@
934810851 githubId = 1312525;
934910852 name = "Rongcui Dong";
935010853 };
9351− ronthecookie = {
9352− name = "Ron B";
9353− email = "me@ronthecookie.me";
9354− github = "ronthecookie";
9355− githubId = 2526321;
9356− keys = [{
9357− longkeyid = "rsa2048/0x6F5B32DE5E5FA80C";
9358− fingerprint = "4B2C DDA5 FA35 642D 956D 7294 6F5B 32DE 5E5F A80C";
9359− }];
9360− };
936110854 roosemberth = {
936210855 email = "roosembert.palacios+nixpkgs@posteo.ch";
10856+ matrix = "@roosemberth:orbstheorem.ch";
936310857 github = "roosemberth";
936410858 githubId = 3621083;
936510859 name = "Roosembert (Roosemberth) Palacios";
@@ -9396,6 +10890,12 @@
939610890 githubId = 592876;
939710891 name = "Robert W. Pearce";
939810892 };
10893+ rprecenth = {
10894+ email = "rasmus@precenth.eu";
10895+ github = "Prillan";
10896+ githubId = 1675190;
10897+ name = "Rasmus Précenth";
10898+ };
939910899 rprospero = {
940010900 email = "rprospero+nix@gmail.com";
940110901 github = "rprospero";
@@ -9414,6 +10914,12 @@
941410914 githubId = 373566;
941510915 name = "Ronuk Raval";
941610916 };
10917+ rski = {
10918+ name = "rski";
10919+ email = "rom.skiad+nix@gmail.com";
10920+ github = "rski";
10921+ githubId = 2960312;
10922+ };
941710923 rszibele = {
941810924 email = "richard@szibele.com";
941910925 github = "rszibele";
@@ -9500,6 +11006,7 @@
950011006 };
950111007 ryantm = {
950211008 email = "ryan@ryantm.com";
11009+ matrix = "@ryantm:matrix.org";
950311010 github = "ryantm";
950411011 githubId = 4804;
950511012 name = "Ryan Mulligan";
@@ -9550,10 +11057,28 @@
955011057 };
955111058 s1341 = {
955211059 email = "s1341@shmarya.net";
11060+ matrix = "@s1341:matrix.org";
955311061 name = "Shmarya Rubenstein";
955411062 github = "s1341";
955511063 githubId = 5682183;
955611064 };
11065+ sagikazarmark = {
11066+ name = "Mark Sagi-Kazar";
11067+ email = "mark.sagikazar@gmail.com";
11068+ matrix = "@mark.sagikazar:matrix.org";
11069+ github = "sagikazarmark";
11070+ githubId = 1226384;
11071+ keys = [{
11072+ longkeyid = "rsa4096/0xF251ADDC9D041C7E";
11073+ fingerprint = "E628 C811 6FB8 1657 F706 4EA4 F251 ADDC 9D04 1C7E";
11074+ }];
11075+ };
11076+ samalws = {
11077+ email = "sam@samalws.com";
11078+ name = "Sam Alws";
11079+ github = "samalws";
11080+ githubId = 20981725;
11081+ };
955711082 samb96 = {
955811083 email = "samb96@gmail.com";
955911084 github = "samb96";
@@ -9588,28 +11113,35 @@
958811113 githubId = 115821;
958911114 name = "Sam Rose";
959011115 };
11116+ samuela = {
11117+ email = "skainsworth@gmail.com";
11118+ github = "samuela";
11119+ githubId = 226872;
11120+ name = "Samuel Ainsworth";
11121+ };
959111122 samueldr = {
959211123 email = "samuel@dionne-riel.com";
11124+ matrix = "@samueldr:matrix.org";
959311125 github = "samueldr";
959411126 githubId = 132835;
959511127 name = "Samuel Dionne-Riel";
959611128 };
9597− samuelgrf = {
9598− email = "git@samuelgrf.com";
9599− github = "samuelgrf";
9600− githubId = 67663538;
9601− name = "Samuel Gräfenstein";
9602− keys = [{
9603− longkeyid = "rsa4096/0xEF76A063F15C63C8";
9604− fingerprint = "FF24 5832 8FAF 4660 18C6 186E EF76 A063 F15C 63C8";
9605− }];
9606− };
960711129 samuelrivas = {
960811130 email = "samuelrivas@gmail.com";
960911131 github = "samuelrivas";
961011132 githubId = 107703;
961111133 name = "Samuel Rivas";
961211134 };
11135+ samyak = {
11136+ name = "Samyak Sarnayak";
11137+ email = "samyak201@gmail.com";
11138+ github = "Samyak2";
11139+ githubId = 34161949;
11140+ keys = [{
11141+ longkeyid = "rsa4096/0x365873F2F0C6153B";
11142+ fingerprint = "155C F413 0129 C058 9A5F 5524 3658 73F2 F0C6 153B";
11143+ }];
11144+ };
961311145 sander = {
961411146 email = "s.vanderburg@tudelft.nl";
961511147 github = "svanderburg";
@@ -9658,6 +11190,12 @@
965811190 githubId = 720864;
965911191 name = "Sébastien Bourdeauducq";
966011192 };
11193+ sbellem = {
11194+ email = "sbellem@gmail.com";
11195+ github = "sbellem";
11196+ githubId = 125458;
11197+ name = "Sylvain Bellemare";
11198+ };
966111199 sbond75 = {
966211200 name = "sbond75";
966311201 email = "43617712+sbond75@users.noreply.github.com";
@@ -9710,6 +11248,16 @@
971011248 email = "schristopher@konputa.com";
971111249 name = "Scott Christopher";
971211250 };
11251+ sciencentistguy = {
11252+ email = "jamie@quigley.xyz";
11253+ name = "Jamie Quigley";
11254+ github = "Sciencentistguy";
11255+ githubId = 4983935;
11256+ keys = [{
11257+ longkeyid = "rsa2048/0x8E8FF66E2AE8D970";
11258+ fingerprint = "30BB FF3F AB0B BB3E 0435 F83C 8E8F F66E 2AE8 D970";
11259+ }];
11260+};
971311261 scode = {
971411262 email = "peter.schuller@infidyne.com";
971511263 github = "scode";
@@ -9730,6 +11278,7 @@
973011278 };
973111279 Scriptkiddi = {
973211280 email = "nixos@scriptkiddi.de";
11281+ matrix = "@fritz.otlinghaus:helsinki-systems.de";
973311282 github = "scriptkiddi";
973411283 githubId = 3598650;
973511284 name = "Fritz Otlinghaus";
@@ -9742,16 +11291,11 @@
974211291 };
974311292 sdier = {
974411293 email = "scott@dier.name";
11294+ matrix = "@sdier:matrix.org";
974511295 github = "sdier";
974611296 githubId = 11613056;
974711297 name = "Scott Dier";
974811298 };
9749− sdll = {
9750− email = "sasha.delly@gmail.com";
9751− github = "sdll";
9752− githubId = 17913919;
9753− name = "Sasha Illarionov";
9754− };
975511299 SeanZicari = {
975611300 email = "sean.zicari@gmail.com";
975711301 github = "SeanZicari";
@@ -9764,6 +11308,12 @@
976411308 githubId = 19472270;
976511309 name = "Sebastian";
976611310 };
11311+ sebastianblunt = {
11312+ name = "Sebastian Blunt";
11313+ email = "nix@sebastianblunt.com";
11314+ github = "sebastianblunt";
11315+ githubId = 47431204;
11316+ };
976711317 sebbadk = {
976811318 email = "sebastian@sebba.dk";
976911319 github = "SEbbaDK";
@@ -9818,6 +11368,18 @@
981811368 githubId = 307899;
981911369 name = "Gurkan Gur";
982011370 };
11371+ serge = {
11372+ email = "sb@canva.com";
11373+ github = "serge-belov";
11374+ githubId = 38824235;
11375+ name = "Serge Belov";
11376+ };
11377+ sersorrel = {
11378+ email = "ash@sorrel.sh";
11379+ github = "sersorrel";
11380+ githubId = 9433472;
11381+ name = "ash";
11382+ };
982111383 servalcatty = {
982211384 email = "servalcat@pm.me";
982311385 github = "servalcatty";
@@ -9856,6 +11418,12 @@
985611418 githubId = 1151264;
985711419 name = "Sebastian Graf";
985811420 };
11421+ shadaj = {
11422+ email = "shadaj@users.noreply.github.com";
11423+ github = "shadaj";
11424+ githubId = 543055;
11425+ name = "Shadaj Laddad";
11426+ };
985911427 shahrukh330 = {
986011428 email = "shahrukh330@gmail.com";
986111429 github = "shahrukh330";
@@ -9880,12 +11448,28 @@
988011448 githubId = 6720672;
988111449 name = "Shane Pearlman";
988211450 };
11451+ shanesveller = {
11452+ email = "shane@sveller.dev";
11453+ github = "shanesveller";
11454+ githubId = 831;
11455+ keys = [{
11456+ longkeyid = "rsa4096/0x9210C218023C15CD";
11457+ fingerprint = "F83C 407C ADC4 5A0F 1F2F 44E8 9210 C218 023C 15CD";
11458+ }];
11459+ name = "Shane Sveller";
11460+ };
988311461 shawndellysse = {
988411462 email = "sdellysse@gmail.com";
988511463 github = "shawndellysse";
988611464 githubId = 293035;
988711465 name = "Shawn Dellysse";
988811466 };
11467+ shawn8901 = {
11468+ email = "shawn8901@googlemail.com";
11469+ github = "shawn8901";
11470+ githubId = 12239057;
11471+ name = "Shawn8901";
11472+ };
988911473 shazow = {
989011474 email = "andrey.petrov@shazow.net";
989111475 github = "shazow";
@@ -9916,6 +11500,22 @@
991611500 githubId = 251028;
991711501 name = "Shell Turner";
991811502 };
11503+ shikanime = {
11504+ name = "William Phetsinorath";
11505+ email = "deva.shikanime@protonmail.com";
11506+ github = "shikanime";
11507+ githubId = 22115108;
11508+ };
11509+ shiryel = {
11510+ email = "contact@shiryel.com";
11511+ name = "Shiryel";
11512+ github = "shiryel";
11513+ githubId = 35617139;
11514+ keys = [{
11515+ longkeyid = "ed25519/0xC4041EA6B32633DE";
11516+ fingerprint = "AB63 4CD9 3322 BD42 6231 F764 C404 1EA6 B326 33DE";
11517+ }];
11518+ };
991911519 shlevy = {
992011520 email = "shea@shealevy.com";
992111521 github = "shlevy";
@@ -9987,7 +11587,7 @@
998711587 name = "Yann Hodique";
998811588 };
998911589 sikmir = {
9990− email = "sikmir@gmail.com";
11590+ email = "sikmir@disroot.org";
999111591 github = "sikmir";
999211592 githubId = 688044;
999311593 name = "Nikolay Korotkiy";
@@ -9996,6 +11596,12 @@
999611596 fingerprint = "ADF4 C13D 0E36 1240 BD01 9B51 D1DE 6D7F 6936 63A5";
999711597 }];
999811598 };
11599+ simarra = {
11600+ name = "simarra";
11601+ email = "loic.martel@protonmail.com";
11602+ github = "simarra";
11603+ githubId = 14372987;
11604+ };
999911605 simonchatts = {
1000011606 email = "code@chatts.net";
1000111607 github = "simonchatts";
@@ -10014,8 +11620,15 @@
1001411620 githubId = 2770647;
1001511621 name = "Simon Vandel Sillesen";
1001611622 };
11623+ sir4ur0n = {
11624+ email = "sir4ur0n@users.noreply.github.com";
11625+ github = "sir4ur0n";
11626+ githubId = 1204125;
11627+ name = "sir4ur0n";
11628+ };
1001711629 siraben = {
1001811630 email = "bensiraphob@gmail.com";
11631+ matrix = "@siraben:matrix.org";
1001911632 github = "siraben";
1002011633 githubId = 8219659;
1002111634 name = "Siraphob Phipathananunth";
@@ -10030,6 +11643,12 @@
1003011643 fingerprint = "B234 EFD4 2B42 FE81 EE4D 7627 F72C 4A88 7F9A 24CA";
1003111644 }];
1003211645 };
11646+ sirseruju = {
11647+ email = "sir.seruju@yandex.ru";
11648+ github = "sirseruju";
11649+ githubId = 74881555;
11650+ name = "Fofanov Sergey";
11651+ };
1003311652 sivteck = {
1003411653 email = "sivaram1992@gmail.com";
1003511654 github = "sivteck";
@@ -10088,6 +11707,7 @@
1008811707 };
1008911708 SlothOfAnarchy = {
1009011709 email = "slothofanarchy1@gmail.com";
11710+ matrix = "@michel.weitbrecht:helsinki-systems.de";
1009111711 github = "SlothOfAnarchy";
1009211712 githubId = 12828415;
1009311713 name = "Michel Weitbrecht";
@@ -10118,12 +11738,25 @@
1011811738 fingerprint = "4242 834C D401 86EF 8281 4093 86E3 0E5A 0F5F C59C";
1011911739 }];
1012011740 };
11741+ smasher164 = {
11742+ email = "aindurti@gmail.com";
11743+ github = "smasher164";
11744+ githubId = 12636891;
11745+ name = "Akhil Indurti";
11746+ };
1012111747 smironov = {
1012211748 email = "grrwlf@gmail.com";
1012311749 github = "grwlf";
1012411750 githubId = 4477729;
1012511751 name = "Sergey Mironov";
1012611752 };
11753+ smitop = {
11754+ name = "Smitty van Bodegom";
11755+ email = "me@smitop.com";
11756+ matrix = "@smitop:kde.org";
11757+ github = "Smittyvb";
11758+ githubId = 10530973;
11759+ };
1012711760 sna = {
1012811761 email = "abouzahra.9@wright.edu";
1012911762 github = "s-na";
@@ -10162,10 +11795,18 @@
1016211795 };
1016311796 solson = {
1016411797 email = "scott@solson.me";
11798+ matrix = "@solson:matrix.org";
1016511799 github = "solson";
1016611800 githubId = 26806;
1016711801 name = "Scott Olson";
1016811802 };
11803+ SomeoneSerge = {
11804+ email = "sergei.kozlukov@aalto.fi";
11805+ matrix = "@ss:someonex.net";
11806+ github = "SomeoneSerge";
11807+ githubId = 9720532;
11808+ name = "Sergei K";
11809+ };
1016911810 sondr3 = {
1017011811 email = "nilsen.sondre@gmail.com";
1017111812 github = "sondr3";
@@ -10214,6 +11855,7 @@
1021411855 };
1021511856 spencerjanssen = {
1021611857 email = "spencerjanssen@gmail.com";
11858+ matrix = "@sjanssen:matrix.org";
1021711859 github = "spencerjanssen";
1021811860 githubId = 2600039;
1021911861 name = "Spencer Janssen";
@@ -10262,6 +11904,7 @@
1026211904 };
1026311905 srhb = {
1026411906 email = "sbrofeldt@gmail.com";
11907+ matrix = "@srhb:matrix.org";
1026511908 github = "srhb";
1026611909 githubId = 219362;
1026711910 name = "Sarah Brofeldt";
@@ -10284,12 +11927,41 @@
1028411927 github = "staccato";
1028511928 githubId = 86573128;
1028611929 };
11930+ stackshadow = {
11931+ email = "stackshadow@evilbrain.de";
11932+ github = "stackshadow";
11933+ githubId = 7512804;
11934+ name = "Martin Langlotz";
11935+ };
11936+ steamwalker = {
11937+ email = "steamwalker@xs4all.nl";
11938+ github = "steamwalker";
11939+ githubId = 94006354;
11940+ name = "steamwalker";
11941+ };
1028711942 steell = {
1028811943 email = "steve@steellworks.com";
1028911944 github = "Steell";
1029011945 githubId = 1699155;
1029111946 name = "Steve Elliott";
1029211947 };
11948+ stehessel = {
11949+ email = "stephan@stehessel.de";
11950+ github = "stehessel";
11951+ githubId = 55607356;
11952+ name = "Stephan Heßelmann";
11953+ };
11954+ steinybot = {
11955+ name = "Jason Pickens";
11956+ email = "jasonpickensnz@gmail.com";
11957+ matrix = "@steinybot:matrix.org";
11958+ github = "steinybot";
11959+ githubId = 4659562;
11960+ keys = [{
11961+ longkeyid = "ed25519/0x21DE1CAE59762A0F";
11962+ fingerprint = "2709 1DEC CC42 4635 4299 569C 21DE 1CAE 5976 2A0F";
11963+ }];
11964+ };
1029311965 stelcodes = {
1029411966 email = "stel@stel.codes";
1029511967 github = "stelcodes";
@@ -10298,6 +11970,7 @@
1029811970 };
1029911971 stephank = {
1030011972 email = "nix@stephank.nl";
11973+ matrix = "@skochen:matrix.org";
1030111974 github = "stephank";
1030211975 githubId = 89950;
1030311976 name = "Stéphan Kochen";
@@ -10360,6 +12033,12 @@
1036012033 githubId = 1181362;
1036112034 name = "Stefan Junker";
1036212035 };
12036+ stevenroose = {
12037+ email = "github@stevenroose.org";
12038+ github = "stevenroose";
12039+ githubId = 853468;
12040+ name = "Steven Roose";
12041+ };
1036312042 stianlagstad = {
1036412043 email = "stianlagstad@gmail.com";
1036512044 github = "stianlagstad";
@@ -10384,6 +12063,12 @@
1038412063 githubId = 1694705;
1038512064 name = "Sam Stites";
1038612065 };
12066+ strager = {
12067+ email = "strager.nds@gmail.com";
12068+ github = "strager";
12069+ githubId = 48666;
12070+ name = "Matthew \"strager\" Glazar";
12071+ };
1038712072 stumoss = {
1038812073 email = "samoss@gmail.com";
1038912074 github = "stumoss";
@@ -10403,10 +12088,10 @@
1040312088 name = "Justus K";
1040412089 };
1040512090 SubhrajyotiSen = {
10406− email = "subhrajyoti12@gmail.com";
10407− github = "SubhrajyotiSen";
10408− githubId = 12984845;
10409− name = "Subhrajyoti Sen";
12091+ email = "subhrajyoti12@gmail.com";
12092+ github = "SubhrajyotiSen";
12093+ githubId = 12984845;
12094+ name = "Subhrajyoti Sen";
1041012095 };
1041112096 suhr = {
1041212097 email = "suhr@i2pmail.org";
@@ -10429,11 +12114,13 @@
1042912114 superherointj = {
1043012115 name = "Sérgio G.";
1043112116 email = "5861043+superherointj@users.noreply.github.com";
12117+ matrix = "@superherointj:matrix.org";
1043212118 github = "superherointj";
1043312119 githubId = 5861043;
1043412120 };
1043512121 SuperSandro2000 = {
1043612122 email = "sandro.jaeckel@gmail.com";
12123+ matrix = "@sandro:supersandro.de";
1043712124 github = "SuperSandro2000";
1043812125 githubId = 7258858;
1043912126 name = "Sandro Jäckel";
@@ -10518,6 +12205,7 @@
1051812205 };
1051912206 symphorien = {
1052012207 email = "symphorien_nixpkgs@xlumurb.eu";
12208+ matrix = "@symphorien:xlumurb.eu";
1052112209 github = "symphorien";
1052212210 githubId = 12595971;
1052312211 name = "Guillaume Girol";
@@ -10586,6 +12274,16 @@
1058612274 githubId = 321799;
1058712275 name = "Paul Colomiets";
1058812276 };
12277+ taikx4 = {
12278+ email = "taikx4@taikx4szlaj2rsdupcwabg35inbny4jk322ngeb7qwbbhd5i55nf5yyd.onion";
12279+ github = "taikx4";
12280+ githubId = 94917129;
12281+ name = "taikx4";
12282+ keys = [{
12283+ longkeyid = "ed25519/0xCCD52C7B37BB837E";
12284+ fingerprint = "6B02 8103 C4E5 F68C D77C 9E54 CCD5 2C7B 37BB 837E";
12285+ }];
12286+ };
1058912287 takagiy = {
1059012288 email = "takagiy.4dev@gmail.com";
1059112289 github = "takagiy";
@@ -10606,6 +12304,7 @@
1060612304 };
1060712305 taktoa = {
1060812306 email = "taktoa@gmail.com";
12307+ matrix = "@taktoa:matrix.org";
1060912308 github = "taktoa";
1061012309 githubId = 553443;
1061112310 name = "Remy Goldschmidt";
@@ -10624,6 +12323,7 @@
1062412323 };
1062512324 talyz = {
1062612325 email = "kim.lindberger@gmail.com";
12326+ matrix = "@talyz:matrix.org";
1062712327 github = "talyz";
1062812328 githubId = 63433;
1062912329 name = "Kim Lindberger";
@@ -10658,6 +12358,13 @@
1065812358 githubId = 863327;
1065912359 name = "Tyler Benster";
1066012360 };
12361+ tboerger = {
12362+ email = "thomas@webhippie.de";
12363+ matrix = "@tboerger:matrix.org";
12364+ github = "tboerger";
12365+ githubId = 156964;
12366+ name = "Thomas Boerger";
12367+ };
1066112368 tcbravo = {
1066212369 email = "tomas.bravo@protonmail.ch";
1066312370 github = "tcbravo";
@@ -10670,6 +12377,12 @@
1067012377 githubId = 2389333;
1067112378 name = "Andy Tockman";
1067212379 };
12380+ techknowlogick = {
12381+ email = "techknowlogick@gitea.io";
12382+ github = "techknowlogick";
12383+ githubId = 164197;
12384+ name = "techknowlogick";
12385+ };
1067312386 Technical27 = {
1067412387 email = "38222826+Technical27@users.noreply.github.com";
1067512388 github = "Technical27";
@@ -10706,6 +12419,12 @@
1070612419 githubId = 280235;
1070712420 name = "Terje Larsen";
1070812421 };
12422+ terrorjack = {
12423+ email = "astrohavoc@gmail.com";
12424+ github = "TerrorJack";
12425+ githubId = 3889585;
12426+ name = "Cheng Shao";
12427+ };
1070912428 tesq0 = {
1071012429 email = "mikolaj.galkowski@gmail.com";
1071112430 github = "tesq0";
@@ -10732,6 +12451,7 @@
1073212451 };
1073312452 tfc = {
1073412453 email = "jacek@galowicz.de";
12454+ matrix = "@jonge:ukvly.org";
1073512455 github = "tfc";
1073612456 githubId = 29044;
1073712457 name = "Jacek Galowicz";
@@ -10742,6 +12462,12 @@
1074212462 githubId = 378734;
1074312463 name = "TG ⊗ Θ";
1074412464 };
12465+ tgunnoe = {
12466+ email = "t@gvno.net";
12467+ github = "tgunnoe";
12468+ githubId = 7254833;
12469+ name = "Taylor Gunnoe";
12470+ };
1074512471 th0rgal = {
1074612472 email = "thomas.marchand@tuta.io";
1074712473 github = "Th0rgal";
@@ -10766,6 +12492,17 @@
1076612492 githubId = 1141680;
1076712493 name = "Thane Gill";
1076812494 };
12495+ thblt = {
12496+ name = "Thibault Polge";
12497+ email = "thibault@thb.lt";
12498+ matrix = "@thbltp:matrix.org";
12499+ github = "thblt";
12500+ githubId = 2453136;
12501+ keys = [{
12502+ longkeyid = "rsa4096/0x63A44817A52EAB7B";
12503+ fingerprint = "D2A2 F0A1 E7A8 5E6F B711 DEE5 63A4 4817 A52E AB7B";
12504+ }];
12505+ };
1076912506 TheBrainScrambler = {
1077012507 email = "esthromeris@riseup.net";
1077112508 github = "TheBrainScrambler";
@@ -10824,8 +12561,15 @@
1082412561 githubId = 844343;
1082512562 name = "Thiago K. Okada";
1082612563 };
12564+ thibaultlemaire = {
12565+ email = "thibault.lemaire@protonmail.com";
12566+ github = "ThibaultLemaire";
12567+ githubId = 21345269;
12568+ name = "Thibault Lemaire";
12569+ };
1082712570 thibautmarty = {
1082812571 email = "github@thibautmarty.fr";
12572+ matrix = "@thibaut:thibautmarty.fr";
1082912573 github = "ThibautMarty";
1083012574 githubId = 3268082;
1083112575 name = "Thibaut Marty";
@@ -10888,6 +12632,13 @@
1088812632 githubId = 1618946;
1088912633 name = "Tiago Castro";
1089012634 };
12635+ tilcreator = {
12636+ name = "TilCreator";
12637+ email = "contact.nixos@tc-j.de";
12638+ matrix = "@tilcreator:matrix.org";
12639+ github = "TilCreator";
12640+ githubId = 18621411;
12641+ };
1089112642 tilpner = {
1089212643 email = "till@hoeppner.ws";
1089312644 github = "tilpner";
@@ -10952,6 +12703,12 @@
1095212703 fingerprint = "556A 403F B0A2 D423 F656 3424 8489 B911 F9ED 617B";
1095312704 }];
1095412705 };
12706+ tmarkovski = {
12707+ email = "tmarkovski@gmail.com";
12708+ github = "tmarkovski";
12709+ githubId = 1280118;
12710+ name = "Tomislav Markovski";
12711+ };
1095512712 tmountain = {
1095612713 email = "tinymountain@gmail.com";
1095712714 github = "tmountain";
@@ -10966,12 +12723,14 @@
1096612723 };
1096712724 tnias = {
1096812725 email = "phil@grmr.de";
12726+ matrix = "@tnias:stratum0.org";
1096912727 github = "tnias";
1097012728 githubId = 9853194;
1097112729 name = "Philipp Bartsch";
1097212730 };
1097312731 toastal = {
1097412732 email = "toastal+nix@posteo.net";
12733+ matrix = "@toastal:matrix.org";
1097512734 github = "toastal";
1097612735 githubId = 561087;
1097712736 name = "toastal";
@@ -11012,6 +12771,7 @@
1101212771 };
1101312772 tomberek = {
1101412773 email = "tomberek@gmail.com";
12774+ matrix = "@tomberek:matrix.org";
1101512775 github = "tomberek";
1101612776 githubId = 178444;
1101712777 name = "Thomas Bereknyei";
@@ -11030,6 +12790,7 @@
1103012790 };
1103112791 toonn = {
1103212792 email = "nixpkgs@toonn.io";
12793+ matrix = "@toonn:matrix.org";
1103312794 github = "toonn";
1103412795 githubId = 1486805;
1103512796 name = "Toon Nolten";
@@ -11052,12 +12813,25 @@
1105212813 githubId = 90456;
1105312814 name = "Rebecca (Bex) Kelly";
1105412815 };
12816+ tpw_rules = {
12817+ name = "Thomas Watson";
12818+ email = "twatson52@icloud.com";
12819+ matrix = "@tpw_rules:matrix.org";
12820+ github = "tpwrules";
12821+ githubId = 208010;
12822+ };
1105512823 travisbhartwell = {
1105612824 email = "nafai@travishartwell.net";
1105712825 github = "travisbhartwell";
1105812826 githubId = 10110;
1105912827 name = "Travis B. Hartwell";
1106012828 };
12829+ travisdavis-ops = {
12830+ email = "travisdavismedia@gmail.com";
12831+ github = "travisdavis-ops";
12832+ githubId = 52011418;
12833+ name = "Travis Davis";
12834+ };
1106112835 TredwellGit = {
1106212836 email = "tredwell@tutanota.com";
1106312837 github = "TredwellGit";
@@ -11106,12 +12880,24 @@
1110612880 githubId = 1183303;
1110712881 name = "Jakob Klepp";
1110812882 };
12883+ trundle = {
12884+ name = "Andreas Stührk";
12885+ email = "andy@hammerhartes.de";
12886+ github = "Trundle";
12887+ githubId = 332418;
12888+ };
1110912889 tscholak = {
1111012890 email = "torsten.scholak@googlemail.com";
1111112891 github = "tscholak";
1111212892 githubId = 1568873;
1111312893 name = "Torsten Scholak";
1111412894 };
12895+ tshaynik = {
12896+ email = "tshaynik@protonmail.com";
12897+ github = "tshaynik";
12898+ githubId = 15064765;
12899+ name = "tshaynik";
12900+ };
1111512901 tstrobel = {
1111612902 email = "4ZKTUB6TEP74PYJOPWIR013S2AV29YUBW5F9ZH2F4D5UMJUJ6S@hash.domains";
1111712903 name = "Thomas Strobel";
@@ -11202,6 +12988,12 @@
1120212988 githubId = 1983821;
1120312989 name = "Eric Wolf";
1120412990 };
12991+ uakci = {
12992+ name = "uakci";
12993+ email = "uakci@uakci.pl";
12994+ github = "uakci";
12995+ githubId = 6961268;
12996+ };
1120512997 udono = {
1120612998 email = "udono@virtual-things.biz";
1120712999 github = "udono";
@@ -11224,12 +13016,26 @@
1122413016 fingerprint = "EE59 5E29 BB5B F2B3 5ED2 3F1C D276 FF74 6700 7335";
1122513017 }];
1122613018 };
13019+ uniquepointer = {
13020+ email = "uniquepointer@mailbox.org";
13021+ matrix = "@uniquepointer:matrix.org";
13022+ github = "uniquepointer";
13023+ githubId = 71751817;
13024+ name = "uniquepointer";
13025+ };
1122713026 unode = {
1122813027 email = "alves.rjc@gmail.com";
13028+ matrix = "@renato_alves:matrix.org";
1122913029 github = "unode";
1123013030 githubId = 122319;
1123113031 name = "Renato Alves";
1123213032 };
13033+ unrooted = {
13034+ name = "Konrad Klawikowski";
13035+ email = "konrad.root.klawikowski@gmail.com";
13036+ github = "unrooted";
13037+ githubId = 30440603;
13038+ };
1123313039 uralbash = {
1123413040 email = "root@uralbash.ru";
1123513041 github = "uralbash";
@@ -11286,6 +13092,7 @@
1128613092 };
1128713093 vaibhavsagar = {
1128813094 email = "vaibhavsagar@gmail.com";
13095+ matrix = "@vaibhavsagar:matrix.org";
1128913096 github = "vaibhavsagar";
1129013097 githubId = 1525767;
1129113098 name = "Vaibhav Sagar";
@@ -11304,6 +13111,7 @@
1130413111 };
1130513112 valodim = {
1130613113 email = "look@my.amazin.horse";
13114+ matrix = "@Valodim:stratum0.org";
1130713115 github = "valodim";
1130813116 githubId = 27813;
1130913117 name = "Vincent Breitmoser";
@@ -11320,8 +13128,8 @@
1132013128 githubId = 25173827;
1132113129 name = "Vanilla";
1132213130 keys = [{
11323− longkeyid = "rsa4096/0x4DFA2BDD7305E739";
11324− fingerprint = "5C16 5178 7DE2 EE5A AF98 3EA3 4DFA 2BDD 7305 E739";
13131+ longkeyid = "rsa4096/0x3750028ED04FA42E";
13132+ fingerprint = "2649 340C C909 F821 D251 6714 3750 028E D04F A42E";
1132513133 }];
1132613134 };
1132713135 vanschelven = {
@@ -11364,6 +13172,7 @@
1136413172 name = "Vladimír Čunát";
1136513173 # vcunat@gmail.com predominated in commits before 2019/03
1136613174 email = "v@cunat.cz";
13175+ matrix = "@vcunat:matrix.org";
1136713176 github = "vcunat";
1136813177 githubId = 1785925;
1136913178 keys = [{
@@ -11423,9 +13232,9 @@
1142313232 githubId = 5837359;
1142413233 name = "Adrian Pistol";
1142513234 };
11426− vika_nezrimaya = {
13235+ vikanezrimaya = {
1142713236 email = "vika@fireburn.ru";
11428− github = "kisik21";
13237+ github = "vikanezrimaya";
1142913238 githubId = 7953163;
1143013239 name = "Vika Shleina";
1143113240 keys = [{
@@ -11449,6 +13258,12 @@
1144913258 githubId = 118959;
1145013259 name = "VinyMeuh";
1145113260 };
13261+ viraptor = {
13262+ email = "nix@viraptor.info";
13263+ github = "viraptor";
13264+ githubId = 188063;
13265+ name = "Stanisław Pitucha";
13266+ };
1145213267 viric = {
1145313268 email = "viric@viric.name";
1145413269 github = "viric";
@@ -11479,6 +13294,12 @@
1147913294 githubId = 1771332;
1148013295 name = "László Vaskó";
1148113296 };
13297+ vlinkz = {
13298+ email = "vmfuentes64@gmail.com";
13299+ github = "vlinkz";
13300+ githubId = 20145996;
13301+ name = "Victor Fuentes";
13302+ };
1148213303 vlstill = {
1148313304 email = "xstill@fi.muni.cz";
1148413305 github = "vlstill";
@@ -11568,6 +13389,16 @@
1156813389 githubId = 3889405;
1156913390 name = "vyp";
1157013391 };
13392+ wackbyte = {
13393+ name = "wackbyte";
13394+ email = "wackbyte@pm.me";
13395+ github = "wackbyte";
13396+ githubId = 29505620;
13397+ keys = [{
13398+ longkeyid = "rsa4096/0x937F2AE5CCEFBF59";
13399+ fingerprint = "E595 7FE4 FEF6 714B 1AD3 1483 937F 2AE5 CCEF BF59";
13400+ }];
13401+ };
1157113402 wakira = {
1157213403 name = "Sheng Wang";
1157313404 email = "sheng@a64.work";
@@ -11596,16 +13427,44 @@
1159613427 githubId = 34962284;
1159713428 name = "wchresta";
1159813429 };
13430+ wdavidw = {
13431+ name = "David Worms";
13432+ email = "david@adaltas.com";
13433+ github = "wdavidw";
13434+ githubId = 46896;
13435+ };
1159913436 wedens = {
1160013437 email = "kirill.wedens@gmail.com";
1160113438 name = "wedens";
1160213439 };
13440+ wegank = {
13441+ name = "Weijia Wang";
13442+ email = "contact@weijia.wang";
13443+ github = "wegank";
13444+ githubId = 9713184;
13445+ };
1160313446 weihua = {
1160413447 email = "luwh364@gmail.com";
1160513448 github = "weihua-lu";
1160613449 githubId = 9002575;
1160713450 name = "Weihua Lu";
1160813451 };
13452+ welteki = {
13453+ email = "welteki@pm.me";
13454+ github = "welteki";
13455+ githubId = 16267532;
13456+ name = "Han Verstraete";
13457+ keys = [{
13458+ longkeyid = "rsa4096/0x11F7BAEA856743FF";
13459+ fingerprint = "2145 955E 3F5E 0C95 3458 41B5 11F7 BAEA 8567 43FF";
13460+ }];
13461+ };
13462+ wentasah = {
13463+ name = "Michal Sojka";
13464+ email = "wsh@2x.cz";
13465+ github = "wentasah";
13466+ githubId = 140542;
13467+ };
1160913468 wheelsandmetal = {
1161013469 email = "jakob@schmutz.co.uk";
1161113470 github = "wheelsandmetal";
@@ -11644,6 +13503,12 @@
1164413503 email = "tim.williams.public@gmail.com";
1164513504 name = "Tim Philip Williams";
1164613505 };
13506+ willcohen = {
13507+ email = "willcohen@users.noreply.github.com";
13508+ github = "willcohen";
13509+ githubId = 5185341;
13510+ name = "Will Cohen";
13511+ };
1164713512 winden = {
1164813513 email = "windenntw@gmail.com";
1164913514 name = "Antonio Vargas Gonzalez";
@@ -11654,12 +13519,18 @@
1165413519 githubId = 6016963;
1165513520 name = "Patrick Winter";
1165613521 };
11657− winterqt = {
13522+ winter = {
1165813523 email = "nixos@winter.cafe";
1165913524 github = "winterqt";
1166013525 githubId = 78392041;
1166113526 name = "Winter";
1166213527 };
13528+ wintrmvte = {
13529+ name = "Jakub Lutczyn";
13530+ email = "kubalutczyn@gmail.com";
13531+ github = "wintrmvte";
13532+ githubId = 41823252;
13533+ };
1166313534 wirew0rm = {
1166413535 email = "alex@wirew0rm.de";
1166513536 github = "wirew0rm";
@@ -11721,7 +13592,7 @@
1172113592 name = "Andrei Pampu";
1172213593 };
1172313594 wolfangaukang = {
11724− email = "liquid.query960@4wrd.cc";
13595+ email = "clone.gleeful135+nixpkgs@anonaddy.me";
1172513596 github = "wolfangaukang";
1172613597 githubId = 8378365;
1172713598 name = "P. R. d. O.";
@@ -11738,6 +13609,12 @@
1173813609 githubId = 28888242;
1173913610 name = "WORLDofPEACE";
1174013611 };
13612+ wr0belj = {
13613+ name = "Jakub Wróbel";
13614+ email = "wrobel.jakub@protonmail.com";
13615+ github = "wr0belj";
13616+ githubId = 40501814;
13617+ };
1174113618 wscott = {
1174213619 email = "wsc9tt@gmail.com";
1174313620 github = "wscott";
@@ -11745,7 +13622,7 @@
1174513622 name = "Wayne Scott";
1174613623 };
1174713624 wucke13 = {
11748− email = "info@wucke13.de";
13625+ email = "wucke13@gmail.com";
1174913626 github = "wucke13";
1175013627 githubId = 20400405;
1175113628 name = "Wucke";
@@ -11768,12 +13645,25 @@
1176813645 github = "wunderbrick";
1176913646 githubId = 52174714;
1177013647 };
13648+ wyndon = {
13649+ email = "72203260+wyndon@users.noreply.github.com";
13650+ matrix = "@wyndon:envs.net";
13651+ github = "wyndon";
13652+ githubId = 72203260;
13653+ name = "wyndon";
13654+ };
1177113655 wyvie = {
1177213656 email = "elijahrum@gmail.com";
1177313657 github = "wyvie";
1177413658 githubId = 3992240;
1177513659 name = "Elijah Rum";
1177613660 };
13661+ x3ro = {
13662+ name = "^x3ro";
13663+ email = "nix@x3ro.dev";
13664+ github = "x3rAx";
13665+ githubId = 2268851;
13666+ };
1177713667 xaverdh = {
1177813668 email = "hoe.dom@gmx.de";
1177913669 github = "xaverdh";
@@ -11794,6 +13684,7 @@
1179413684 };
1179513685 xe = {
1179613686 email = "me@christine.website";
13687+ matrix = "@withoutwithin:matrix.org";
1179713688 github = "Xe";
1179813689 githubId = 529003;
1179913690 name = "Christine Dodrill";
@@ -11812,10 +13703,17 @@
1181213703 };
1181313704 xfix = {
1181413705 email = "konrad@borowski.pw";
13706+ matrix = "@xfix:matrix.org";
1181513707 github = "xfix";
1181613708 githubId = 1297598;
1181713709 name = "Konrad Borowski";
1181813710 };
13711+ xgroleau = {
13712+ email = "xgroleau@gmail.com";
13713+ github = "xgroleau";
13714+ githubId = 31734358;
13715+ name = "Xavier Groleau";
13716+ };
1181913717 xiorcale = {
1182013718 email = "quentin.vaucher@pm.me";
1182113719 github = "xiorcale";
@@ -11870,6 +13768,12 @@
1187013768 githubId = 2242427;
1187113769 name = "Yoann Ono";
1187213770 };
13771+ yana = {
13772+ email = "yana@riseup.net";
13773+ github = "sowelisuwi";
13774+ githubId = 1643293;
13775+ name = "Yana Timoshenko";
13776+ };
1187313777 yarny = {
1187413778 email = "41838844+Yarny0@users.noreply.github.com";
1187513779 github = "Yarny0";
@@ -11884,22 +13788,29 @@
1188413788 };
1188513789 yayayayaka = {
1188613790 email = "nixpkgs@uwu.is";
13791+ matrix = "@lara:uwu.is";
1188713792 github = "yayayayaka";
1188813793 githubId = 73759599;
1188913794 name = "Lara A.";
1189013795 };
11891− yegortimoshenko = {
11892− email = "yegortimoshenko@riseup.net";
11893− github = "yegortimoshenko";
11894− githubId = 1643293;
11895− name = "Yegor Timoshenko";
11896− };
1189713796 yesbox = {
1189813797 email = "jesper.geertsen.jonsson@gmail.com";
1189913798 github = "yesbox";
1190013799 githubId = 4113027;
1190113800 name = "Jesper Geertsen Jonsson";
1190213801 };
13802+ yinfeng = {
13803+ email = "lin.yinfeng@outlook.com";
13804+ github = "linyinfeng";
13805+ githubId = 11229748;
13806+ name = "Lin Yinfeng";
13807+ };
13808+ ylecornec = {
13809+ email = "yves.stan.lecornec@tweag.io";
13810+ github = "ylecornec";
13811+ githubId = 5978566;
13812+ name = "Yves-Stan Le Cornec";
13813+ };
1190313814 ylwghst = {
1190413815 email = "ylwghst@onionmail.info";
1190513816 github = "ylwghst";
@@ -11926,6 +13837,7 @@
1192613837 };
1192713838 yorickvp = {
1192813839 email = "yorickvanpelt@gmail.com";
13840+ matrix = "@yorickvp:matrix.org";
1192913841 github = "yorickvp";
1193013842 githubId = 647076;
1193113843 name = "Yorick van Pelt";
@@ -11936,6 +13848,12 @@
1193613848 githubId = 452;
1193713849 name = "Yurii Rashkovskii";
1193813850 };
13851+ yrd = {
13852+ name = "Yannik Rödel";
13853+ email = "nix@yannik.info";
13854+ github = "yrd";
13855+ githubId = 1820447;
13856+ };
1193913857 ysndr = {
1194013858 email = "me@ysndr.de";
1194113859 github = "ysndr";
@@ -11966,12 +13884,14 @@
1196613884 };
1196713885 yuka = {
1196813886 email = "yuka@yuka.dev";
13887+ matrix = "@yuka:yuka.dev";
1196913888 github = "yu-re-ka";
1197013889 githubId = 86169957;
1197113890 name = "Yureka";
1197213891 };
1197313892 yusdacra = {
1197413893 email = "y.bera003.06@protonmail.com";
13894+ matrix = "@yusdacra:nixos.dev";
1197513895 github = "yusdacra";
1197613896 githubId = 19897088;
1197713897 name = "Yusuf Bera Ertan";
@@ -11980,6 +13900,16 @@
1198013900 fingerprint = "9270 66BD 8125 A45B 4AC4 0326 6180 7181 F60E FCB2";
1198113901 }];
1198213902 };
13903+ yuu = {
13904+ email = "yuuyin@protonmail.com";
13905+ github = "yuuyins";
13906+ githubId = 86538850;
13907+ name = "Yuu Yin";
13908+ keys = [{
13909+ longkeyid = "rsa4096/0x416F303B43C20AC3";
13910+ fingerprint = "9F19 3AE8 AA25 647F FC31 46B5 416F 303B 43C2 0AC3";
13911+ }];
13912+ };
1198313913 yvesf = {
1198413914 email = "yvesf+nix@xapek.org";
1198513915 github = "yvesf";
@@ -12074,6 +14004,7 @@
1207414004 };
1207514005 zhaofengli = {
1207614006 email = "hello@zhaofeng.li";
14007+ matrix = "@zhaofeng:zhaofeng.li";
1207714008 github = "zhaofengli";
1207814009 githubId = 2189609;
1207914010 name = "Zhaofeng Li";
@@ -12102,12 +14033,6 @@
1210214033 githubId = 1772064;
1210314034 name = "Tim Zook";
1210414035 };
12105− zoomulator = {
12106− email = "zoomulator@gmail.com";
12107− github = "zoomulator";
12108− githubId = 1069303;
12109− name = "Kim Simmons";
12110− };
1211114036 zopieux = {
1211214037 email = "zopieux@gmail.com";
1211314038 github = "zopieux";
@@ -12286,9 +14211,16 @@
1228614211 github = "deifactor";
1228714212 githubId = 30192992;
1228814213 };
14214+ deinferno = {
14215+ name = "deinferno";
14216+ email = "14363193+deinferno@users.noreply.github.com";
14217+ github = "deinferno";
14218+ githubId = 14363193;
14219+ };
1228914220 fzakaria = {
1229014221 name = "Farid Zakaria";
1229114222 email = "farid.m.zakaria@gmail.com";
14223+ matrix = "@fzakaria:matrix.org";
1229214224 github = "fzakaria";
1229314225 githubId = 605070;
1229414226 };
@@ -12298,15 +14230,16 @@
1229814230 github = "nagisa";
1229914231 githubId = 679122;
1230014232 };
12301− yevhenshymotiuk = {
14233+ yshym = {
1230214234 name = "Yevhen Shymotiuk";
12303− email = "yevhenshymotiuk@gmail.com";
12304− github = "yevhenshymotiuk";
14235+ email = "yshym@pm.me";
14236+ github = "yshym";
1230514237 githubId = 44244245;
1230614238 };
1230714239 hmenke = {
1230814240 name = "Henri Menke";
1230914241 email = "henri@henrimenke.de";
14242+ matrix = "@hmenke:matrix.org";
1231014243 github = "hmenke";
1231114244 githubId = 1903556;
1231214245 keys = [{
@@ -12373,6 +14306,7 @@
1237314306 princemachiavelli = {
1237414307 name = "Josh Hoffer";
1237514308 email = "jhoffer@sansorgan.es";
14309+ matrix = "@princemachiavelli:matrix.org";
1237614310 github = "princemachiavelli";
1237714311 githubId = 2730968;
1237814312 keys = [{
@@ -12400,12 +14334,51 @@
1240014334 fingerprint = "61AE D40F 368B 6F26 9DAE 3892 6861 6B2D 8AC4 DCC5";
1240114335 }];
1240214336 };
14337+ zbioe = {
14338+ name = "Iury Fukuda";
14339+ email = "zbioe@protonmail.com";
14340+ github = "zbioe";
14341+ githubId = 7332055;
14342+ };
14343+ zendo = {
14344+ name = "zendo";
14345+ email = "linzway@qq.com";
14346+ github = "zendo";
14347+ githubId = 348013;
14348+ };
14349+ zenithal = {
14350+ name = "zenithal";
14351+ email = "i@zenithal.me";
14352+ github = "ZenithalHourlyRate";
14353+ githubId = 19512674;
14354+ keys = [{
14355+ longkeyid = "rsa4096/0x87E17EEF9B18B6C9";
14356+ fingerprint = "1127 F188 280A E312 3619 3329 87E1 7EEF 9B18 B6C9";
14357+ }];
14358+ };
1240314359 zeri = {
1240414360 name = "zeri";
1240514361 email = "68825133+zeri42@users.noreply.github.com";
14362+ matrix = "@zeri:matrix.org";
1240614363 github = "zeri42";
1240714364 githubId = 68825133;
1240814365 };
14366+ zoedsoupe = {
14367+ github = "zoedsoupe";
14368+ githubId = 44469426;
14369+ name = "Zoey de Souza Pessanha";
14370+ email = "zoey.spessanha@outlook.com";
14371+ keys = [{
14372+ longkeyid = "rsa4096/0x1E1E889CDBD6A315";
14373+ fingerprint = "EAA1 51DB 472B 0122 109A CB17 1E1E 889C DBD6 A315";
14374+ }];
14375+ };
14376+ zombiezen = {
14377+ name = "Ross Light";
14378+ email = "ross@zombiezen.com";
14379+ github = "zombiezen";
14380+ githubId = 181535;
14381+ };
1240914382 zseri = {
1241014383 name = "zseri";
1241114384 email = "zseri.devel@ytrizja.de";
@@ -12422,10 +14395,87 @@
1242214395 github = "zupo";
1242314396 githubId = 311580;
1242414397 };
12425− rski = {
12426− name = "rski";
12427− email = "rom.skiad+nix@gmail.com";
12428− github = "rski";
12429− githubId = 2960312;
14398+ sei40kr = {
14399+ name = "Seong Yong-ju";
14400+ email = "sei40kr@gmail.com";
14401+ github = "sei40kr";
14402+ githubId = 11665236;
14403+ };
14404+ vdot0x23 = {
14405+ name = "Victor Büttner";
14406+ email = "nix.victor@0x23.dk";
14407+ github = "vdot0x23";
14408+ githubId = 40716069;
14409+ };
14410+ jpagex = {
14411+ name = "Jérémy Pagé";
14412+ email = "contact@jeremypage.me";
14413+ github = "jpagex";
14414+ githubId = 635768;
14415+ };
14416+ vbrandl = {
14417+ name = "Valentin Brandl";
14418+ email = "mail+nixpkgs@vbrandl.net";
14419+ github = "vbrandl";
14420+ githubId = 20639051;
14421+ };
14422+ portothree = {
14423+ name = "Gustavo Porto";
14424+ email = "gustavoporto@ya.ru";
14425+ github = "portothree";
14426+ githubId = 3718120;
14427+ };
14428+ pwoelfel = {
14429+ name = "Philipp Woelfel";
14430+ email = "philipp.woelfel@gmail.com";
14431+ github = "PhilippWoelfel";
14432+ githubId = 19400064;
14433+ };
14434+ qbit = {
14435+ name = "Aaron Bieber";
14436+ email = "aaron@bolddaemon.com";
14437+ github = "qbit";
14438+ githubId = 68368;
14439+ matrix = "@qbit:tapenet.org";
14440+ keys = [{
14441+ longkeyid = "rsa4096/0x1F81112D62A9ADCE";
14442+ fingerprint = "3586 3350 BFEA C101 DB1A 4AF0 1F81 112D 62A9 ADCE";
14443+ }];
14444+ };
14445+ ameer = {
14446+ name = "Ameer Taweel";
14447+ email = "ameertaweel2002@gmail.com";
14448+ github = "AmeerTaweel";
14449+ githubId = 20538273;
14450+ };
14451+ nigelgbanks = {
14452+ name = "Nigel Banks";
14453+ email = "nigel.g.banks@gmail.com";
14454+ github = "nigelgbanks";
14455+ githubId = 487373;
14456+ };
14457+ zanculmarktum = {
14458+ name = "Azure Zanculmarktum";
14459+ email = "zanculmarktum@gmail.com";
14460+ github = "zanculmarktum";
14461+ githubId = 16958511;
14462+ };
14463+ kuwii = {
14464+ name = "kuwii";
14465+ email = "kuwii.someone@gmail.com";
14466+ github = "kuwii";
14467+ githubId = 10705175;
14468+ };
14469+ melias122 = {
14470+ name = "Martin Elias";
14471+ email = "martin+nixpkgs@elias.sx";
14472+ github = "melias122";
14473+ githubId = 1027766;
14474+ };
14475+ bryanhonof = {
14476+ name = "Bryan Honof";
14477+ email = "bryanhonof@gmail.com";
14478+ github = "bryanhonof";
14479+ githubId = 5932804;
1243014480 };
1243114481}
maintainers/scripts/check-maintainer-github-handles.sh+9−9
@@ -4,20 +4,19 @@
44# Example how to work with the `lib.maintainers` attrset.
55# Can be used to check whether all user handles are still valid.
66
7−set -e
8−
9−# nixpkgs='<nixpkgs>'
10−# if [ -n "$1" ]; then
7+set -o errexit -o noclobber -o nounset -o pipefail
8+shopt -s failglob inherit_errexit
119
1210function checkCommits {
13− local user="$1"
14− local tmp=$(mktemp)
11+ local ret status tmp user
12+ user="$1"
13+ tmp=$(mktemp)
1514 curl --silent -w "%{http_code}" \
1615 "https://github.com/NixOS/nixpkgs/commits?author=$user" \
1716 > "$tmp"
1817 # the last line of tmp contains the http status
19− local status=$(tail -n1 "$tmp")
20− local ret=
18+ status=$(tail -n1 "$tmp")
19+ ret=
2120 case $status in
2221 200) if <"$tmp" grep -i "no commits found" > /dev/null; then
2322 ret=1
@@ -31,7 +30,7 @@ function checkCommits {
3130 checkCommits "$user"
3231 ret=$?
3332 ;;
34− *) printf "BAD STATUS: $(tail -n1 $tmp) for %s\n" "$user"; ret=1
33+ *) printf "BAD STATUS: $(tail -n1 "$tmp") for %s\n" "$user"; ret=1
3534 ret=1
3635 ;;
3736 esac
@@ -63,4 +62,5 @@ nix-instantiate -A lib.maintainers --eval --strict --json \
6362 | jq -r '.[]|.github|select(.)' \
6463 | parallel -j5 checkUser
6564
65+# To check some arbitrary users:
6666# parallel -j100 checkUser ::: "eelco" "profpatsch" "Profpatsch" "a"
maintainers/scripts/dep-licenses.sh+1−1
@@ -9,7 +9,7 @@ tmp=$(mktemp --tmpdir -d nixpkgs-dep-license.XXXXXX)
99exitHandler() {
1010 exitCode=$?
1111 rm -rf "$tmp"
12− exit $exitCode
12+ return $exitCode
1313}
1414
1515trap "exitHandler" EXIT
maintainers/scripts/feature-freeze-teams.plnew file+98
@@ -0,0 +1,98 @@
1+#!/usr/bin/env nix-shell
2+#!nix-shell -i perl -p perl -p perlPackages.JSON perlPackages.LWPUserAgent perlPackages.LWPProtocolHttps perlPackages.TermReadKey
3+
4+# This script generates a list of teams to ping for the Feature Freeze announcement on Discourse.
5+# It's intended to be used by Release Managers before creating such posts.
6+#
7+# The script interactively reads a GitHub username and a corresponding GitHub Personal Access token.
8+# This is required to access the GitHub Teams API so the token needs at least the read:org privilege.
9+
10+## no critic (InputOutput::RequireCheckedSyscalls, InputOutput::ProhibitBacktickOperators)
11+use strict;
12+use warnings;
13+use Carp;
14+use Cwd 'abs_path';
15+use File::Basename;
16+use JSON qw(decode_json);
17+use LWP::UserAgent;
18+use Term::ReadKey qw(ReadLine ReadMode);
19+
20+sub github_team_members {
21+ my ($team_name, $username, $token) = @_;
22+ my @ret;
23+
24+ my $req = HTTP::Request->new('GET', "https://api.github.com/orgs/NixOS/teams/$team_name/members", [ 'Accept' => 'application/vnd.github.v3+json' ]);
25+ $req->authorization_basic($username, $token);
26+ my $response = LWP::UserAgent->new->request($req);
27+
28+ if ($response->is_success) {
29+ my $content = decode_json($response->decoded_content);
30+ foreach (@{$content}) {
31+ push @ret, $_->{'login'};
32+ }
33+ } else {
34+ print {*STDERR} "!! Requesting members of GitHub Team '$team_name' failed: $response->status_line";
35+ }
36+
37+ return \@ret;
38+}
39+
40+# Read GitHub credentials
41+print {*STDERR} 'GitHub username: ';
42+my $github_user = ReadLine(0);
43+ReadMode('noecho');
44+print {*STDERR} 'GitHub personal access token (no echo): ';
45+my $github_token = ReadLine(0);
46+ReadMode('restore');
47+print {*STDERR} "\n";
48+chomp $github_user;
49+chomp $github_token;
50+
51+# Read nix output
52+my $nix_version = `nix --version`;
53+my $out;
54+my $lib_path = abs_path(dirname(__FILE__)) . '../../../lib';
55+if ($nix_version =~ m/2[.]3[.]/msx) {
56+ $out = `nix eval --json '(import $lib_path).teams'` || croak 'nix eval failed';
57+} else {
58+ $out = `nix --extra-experimental-features nix-command eval --json --impure --expr '(import $lib_path).teams'` || croak('nix eval failed');
59+}
60+my $data = decode_json($out);
61+
62+# Process teams
63+print {*STDERR} "\n";
64+while (my ($team_nix_key, $team_config) = each %{$data}) {
65+ # Ignore teams that don't want to be or can't be pinged
66+ if (not defined $team_config->{enableFeatureFreezePing} or not $team_config->{enableFeatureFreezePing}) {
67+ next;
68+ }
69+ if (not defined $team_config->{shortName}) {
70+ print {*STDERR} "!! The team with the nix key '$team_nix_key' has no shortName set - ignoring";
71+ next;
72+ }
73+ # Team name
74+ print {*STDERR} "$team_config->{shortName}:";
75+ # GitHub Teams
76+ my @github_members;
77+ if (defined $team_config->{githubTeams}) {
78+ foreach (@{$team_config->{githubTeams}}) {
79+ print {*STDERR} " \@NixOS/${_}";
80+ push @github_members, @{github_team_members($_, $github_user, $github_token)};
81+ }
82+ }
83+ my %github_members = map { $_ => 1 } @github_members;
84+ # Members
85+ if (defined $team_config->{members}) {
86+ foreach (@{$team_config->{members}}) {
87+ my %user = %{$_};
88+ my $github_handle = $user{'github'};
89+ # Ensure we don't ping team members twice (as team member and directly)
90+ if (defined $github_members{$github_handle}) {
91+ next;
92+ }
93+ print {*STDERR} " \@$github_handle";
94+ }
95+ }
96+
97+ print {*STDERR} "\n";
98+}
maintainers/scripts/find-tarballs.nix+1−1
@@ -37,7 +37,7 @@ let
3737 keyDrv = drv: if canEval drv.drvPath then { key = drv.drvPath; value = drv; } else { };
3838
3939 immediateDependenciesOf = drv:
40− concatLists (mapAttrsToList (n: v: derivationsIn v) (removeAttrs drv ["meta" "passthru"]));
40+ concatLists (mapAttrsToList (n: v: derivationsIn v) (removeAttrs drv (["meta" "passthru"] ++ optionals (drv?passthru) (attrNames drv.passthru))));
4141
4242 derivationsIn = x:
4343 if !canEval x then []
maintainers/scripts/haskell/dependencies.nixnew file+10
@@ -0,0 +1,10 @@
1+# Nix script to calculate the Haskell dependencies of every haskellPackage. Used by ./hydra-report.hs.
2+let
3+ pkgs = import ../../.. {};
4+ inherit (pkgs) lib;
5+ getDeps = _: pkg: {
6+ deps = builtins.filter (x: !isNull x) (map (x: x.pname or null) (pkg.propagatedBuildInputs or []));
7+ broken = (pkg.meta.hydraPlatforms or [null]) == [];
8+ };
9+in
10+ lib.mapAttrs getDeps pkgs.haskellPackages
maintainers/scripts/haskell/hydra-report.hs+115−33
@@ -26,6 +26,8 @@ Because step 1) is quite expensive and takes roughly ~5 minutes the result is ca
2626{-# LANGUAGE ScopedTypeVariables #-}
2727{-# LANGUAGE TupleSections #-}
2828{-# OPTIONS_GHC -Wall #-}
29+{-# LANGUAGE ViewPatterns #-}
30+{-# LANGUAGE TupleSections #-}
2931
3032import Control.Monad (forM_, (<=<))
3133import Control.Monad.Trans (MonadIO (liftIO))
@@ -41,7 +43,7 @@ import Data.List.NonEmpty (NonEmpty, nonEmpty)
4143import qualified Data.List.NonEmpty as NonEmpty
4244import Data.Map.Strict (Map)
4345import qualified Data.Map.Strict as Map
44−import Data.Maybe (fromMaybe, mapMaybe)
46+import Data.Maybe (fromMaybe, mapMaybe, isNothing)
4547import Data.Monoid (Sum (Sum, getSum))
4648import Data.Sequence (Seq)
4749import qualified Data.Sequence as Seq
@@ -70,6 +72,12 @@ import System.Directory (XdgDirectory (XdgCache), getXdgDirectory)
7072import System.Environment (getArgs)
7173import System.Process (readProcess)
7274import Prelude hiding (id)
75+import Data.List (sortOn)
76+import Control.Concurrent.Async (concurrently)
77+import Control.Exception (evaluate)
78+import qualified Data.IntMap.Strict as IntMap
79+import qualified Data.IntSet as IntSet
80+import Data.Bifunctor (second)
7381
7482newtype JobsetEvals = JobsetEvals
7583 { evals :: Seq Eval
@@ -134,20 +142,17 @@ hydraEvalCommand = "hydra-eval-jobs"
134142hydraEvalParams :: [String]
135143hydraEvalParams = ["-I", ".", "pkgs/top-level/release-haskell.nix"]
136144
137−handlesCommand :: FilePath
138−handlesCommand = "nix-instantiate"
139−
140−handlesParams :: [String]
141−handlesParams = ["--eval", "--strict", "--json", "-"]
145+nixExprCommand :: FilePath
146+nixExprCommand = "nix-instantiate"
142147
143−handlesExpression :: String
144−handlesExpression = "with import ./. {}; with lib; zipAttrsWith (_: builtins.head) (mapAttrsToList (_: v: if v ? github then { \"${v.email}\" = v.github; } else {}) (import maintainers/maintainer-list.nix))"
148+nixExprParams :: [String]
149+nixExprParams = ["--eval", "--strict", "--json"]
145150
146151-- | This newtype is used to parse a Hydra job output from @hydra-eval-jobs@.
147152-- The only field we are interested in is @maintainers@, which is why this
148153-- is just a newtype.
149154--
150−-- Note that there are occassionally jobs that don't have a maintainers
155+-- Note that there are occasionally jobs that don't have a maintainers
151156-- field, which is why this has to be @Maybe Text@.
152157newtype Maintainers = Maintainers { maintainers :: Maybe Text }
153158 deriving stock (Generic, Show)
@@ -195,13 +200,49 @@ type EmailToGitHubHandles = Map Text Text
195200-- @@
196201type MaintainerMap = Map Text (NonEmpty Text)
197202
198−-- | Generate a mapping of Hydra job names to maintainer GitHub handles.
203+-- | Information about a package which lists its dependencies and whether the
204+-- package is marked broken.
205+data DepInfo = DepInfo {
206+ deps :: Set Text,
207+ broken :: Bool
208+}
209+ deriving stock (Generic, Show)
210+ deriving anyclass (FromJSON, ToJSON)
211+
212+-- | Map from package names to their DepInfo. This is the data we get out of a
213+-- nix call.
214+type DependencyMap = Map Text DepInfo
215+
216+-- | Map from package names to its broken state, number of reverse dependencies (fst) and
217+-- unbroken reverse dependencies (snd).
218+type ReverseDependencyMap = Map Text (Int, Int)
219+
220+-- | Calculate the (unbroken) reverse dependencies of a package by transitively
221+-- going through all packages if it’s a dependency of them.
222+calculateReverseDependencies :: DependencyMap -> ReverseDependencyMap
223+calculateReverseDependencies depMap = Map.fromDistinctAscList $ zip keys (zip (rdepMap False) (rdepMap True))
224+ where
225+ -- This code tries to efficiently invert the dependency map and calculate
226+ -- it’s transitive closure by internally identifying every pkg with it’s index
227+ -- in the package list and then using memoization.
228+ keys = Map.keys depMap
229+ pkgToIndexMap = Map.fromDistinctAscList (zip keys [0..])
230+ intDeps = zip [0..] $ (\DepInfo{broken,deps} -> (broken,mapMaybe (`Map.lookup` pkgToIndexMap) $ Set.toList deps)) <$> Map.elems depMap
231+ rdepMap onlyUnbroken = IntSet.size <$> resultList
232+ where
233+ resultList = go <$> [0..]
234+ oneStepMap = IntMap.fromListWith IntSet.union $ (\(key,(_,deps)) -> (,IntSet.singleton key) <$> deps) <=< filter (\(_, (broken,_)) -> not (broken && onlyUnbroken)) $ intDeps
235+ go pkg = IntSet.unions (oneStep:((resultList !!) <$> IntSet.toList oneStep))
236+ where oneStep = IntMap.findWithDefault mempty pkg oneStepMap
237+
238+-- | Generate a mapping of Hydra job names to maintainer GitHub handles. Calls
239+-- hydra-eval-jobs and the nix script ./maintainer-handles.nix.
199240getMaintainerMap :: IO MaintainerMap
200241getMaintainerMap = do
201242 hydraJobs :: HydraJobs <-
202− readJSONProcess hydraEvalCommand hydraEvalParams "" "Failed to decode hydra-eval-jobs output: "
243+ readJSONProcess hydraEvalCommand hydraEvalParams "Failed to decode hydra-eval-jobs output: "
203244 handlesMap :: EmailToGitHubHandles <-
204− readJSONProcess handlesCommand handlesParams handlesExpression "Failed to decode nix output for lookup of github handles: "
245+ readJSONProcess nixExprCommand ("maintainers/scripts/haskell/maintainer-handles.nix":nixExprParams) "Failed to decode nix output for lookup of github handles: "
205246 pure $ Map.mapMaybe (splitMaintainersToGitHubHandles handlesMap) hydraJobs
206247 where
207248 -- Split a comma-spearated string of Maintainers into a NonEmpty list of
@@ -211,6 +252,12 @@ getMaintainerMap = do
211252 splitMaintainersToGitHubHandles handlesMap (Maintainers maint) =
212253 nonEmpty . mapMaybe (`Map.lookup` handlesMap) . Text.splitOn ", " $ fromMaybe "" maint
213254
255+-- | Get the a map of all dependencies of every package by calling the nix
256+-- script ./dependencies.nix.
257+getDependencyMap :: IO DependencyMap
258+getDependencyMap =
259+ readJSONProcess nixExprCommand ("maintainers/scripts/haskell/dependencies.nix":nixExprParams) "Failed to decode nix output for lookup of dependencies: "
260+
214261-- | Run a process that produces JSON on stdout and and decode the JSON to a
215262-- data type.
216263--
@@ -219,11 +266,10 @@ readJSONProcess
219266 :: FromJSON a
220267 => FilePath -- ^ Filename of executable.
221268 -> [String] -- ^ Arguments
222− -> String -- ^ stdin to pass to the process
223269 -> String -- ^ String to prefix to JSON-decode error.
224270 -> IO a
225−readJSONProcess exe args input err = do
226− output <- readProcess exe args input
271+readJSONProcess exe args err = do
272+ output <- readProcess exe args ""
227273 let eitherDecodedOutput = eitherDecodeStrict' . encodeUtf8 . Text.pack $ output
228274 case eitherDecodedOutput of
229275 Left decodeErr -> error $ err <> decodeErr <> "\nRaw: '" <> take 1000 output <> "'"
@@ -264,7 +310,13 @@ platformIcon (Platform x) = case x of
264310data BuildResult = BuildResult {state :: BuildState, id :: Int} deriving (Show, Eq, Ord)
265311newtype Platform = Platform {platform :: Text} deriving (Show, Eq, Ord)
266312newtype Table row col a = Table (Map (row, col) a)
267−type StatusSummary = Map Text (Table Text Platform BuildResult, Set Text)
313+data SummaryEntry = SummaryEntry {
314+ summaryBuilds :: Table Text Platform BuildResult,
315+ summaryMaintainers :: Set Text,
316+ summaryReverseDeps :: Int,
317+ summaryUnbrokenReverseDeps :: Int
318+}
319+type StatusSummary = Map Text SummaryEntry
268320
269321instance (Ord row, Ord col, Semigroup a) => Semigroup (Table row col a) where
270322 Table l <> Table r = Table (Map.unionWith (<>) l r)
@@ -275,11 +327,11 @@ instance Functor (Table row col) where
275327instance Foldable (Table row col) where
276328 foldMap f (Table a) = foldMap f a
277329
278−buildSummary :: MaintainerMap -> Seq Build -> StatusSummary
279−buildSummary maintainerMap = foldl (Map.unionWith unionSummary) Map.empty . fmap toSummary
330+buildSummary :: MaintainerMap -> ReverseDependencyMap -> Seq Build -> StatusSummary
331+buildSummary maintainerMap reverseDependencyMap = foldl (Map.unionWith unionSummary) Map.empty . fmap toSummary
280332 where
281− unionSummary (Table l, l') (Table r, r') = (Table $ Map.union l r, l' <> r')
282− toSummary Build{finished, buildstatus, job, id, system} = Map.singleton name (Table (Map.singleton (set, Platform system) (BuildResult state id)), maintainers)
333+ unionSummary (SummaryEntry (Table lb) lm lr lu) (SummaryEntry (Table rb) rm rr ru) = SummaryEntry (Table $ Map.union lb rb) (lm <> rm) (max lr rr) (max lu ru)
334+ toSummary Build{finished, buildstatus, job, id, system} = Map.singleton name (SummaryEntry (Table (Map.singleton (set, Platform system) (BuildResult state id))) maintainers reverseDeps unbrokenReverseDeps)
283335 where
284336 state :: BuildState
285337 state = case (finished, buildstatus) of
@@ -297,6 +349,7 @@ buildSummary maintainerMap = foldl (Map.unionWith unionSummary) Map.empty . fmap
297349 name = maybe packageName NonEmpty.last splitted
298350 set = maybe "" (Text.intercalate "." . NonEmpty.init) splitted
299351 maintainers = maybe mempty (Set.fromList . toList) (Map.lookup job maintainerMap)
352+ (reverseDeps, unbrokenReverseDeps) = Map.findWithDefault (0,0) name reverseDependencyMap
300353
301354readBuildReports :: IO (Eval, UTCTime, Seq Build)
302355readBuildReports = do
@@ -339,25 +392,29 @@ makeSearchLink evalId linkLabel query = "[" <> linkLabel <> "](" <> "https://hyd
339392statusToNumSummary :: StatusSummary -> NumSummary
340393statusToNumSummary = fmap getSum . foldMap (fmap Sum . jobTotals)
341394
342−jobTotals :: (Table Text Platform BuildResult, a) -> Table Platform BuildState Int
343−jobTotals (Table mapping, _) = getSum <$> Table (Map.foldMapWithKey (\(_, platform) (BuildResult buildstate _) -> Map.singleton (platform, buildstate) (Sum 1)) mapping)
395+jobTotals :: SummaryEntry -> Table Platform BuildState Int
396+jobTotals (summaryBuilds -> Table mapping) = getSum <$> Table (Map.foldMapWithKey (\(_, platform) (BuildResult buildstate _) -> Map.singleton (platform, buildstate) (Sum 1)) mapping)
344397
345398details :: Text -> [Text] -> [Text]
346399details summary content = ["<details><summary>" <> summary <> " </summary>", ""] <> content <> ["</details>", ""]
347400
348−printBuildSummary :: Eval -> UTCTime -> StatusSummary -> Text
401+printBuildSummary :: Eval -> UTCTime -> StatusSummary -> [(Text, Int)] -> Text
349402printBuildSummary
350403 Eval{id, jobsetevalinputs = JobsetEvalInputs{nixpkgs = Nixpkgs{revision}}}
351404 fetchTime
352− summary =
405+ summary
406+ topBrokenRdeps =
353407 Text.unlines $
354− headline <> totals
408+ headline <> [""] <> tldr <> ((" * "<>) <$> (errors <> warnings)) <> [""]
409+ <> totals
355410 <> optionalList "#### Maintained packages with build failure" (maintainedList fails)
356411 <> optionalList "#### Maintained packages with failed dependency" (maintainedList failedDeps)
357412 <> optionalList "#### Maintained packages with unknown error" (maintainedList unknownErr)
358413 <> optionalHideableList "#### Unmaintained packages with build failure" (unmaintainedList fails)
359414 <> optionalHideableList "#### Unmaintained packages with failed dependency" (unmaintainedList failedDeps)
360415 <> optionalHideableList "#### Unmaintained packages with unknown error" (unmaintainedList unknownErr)
416+ <> optionalHideableList "#### Top 50 broken packages, sorted by number of reverse dependencies" (brokenLine <$> topBrokenRdeps)
417+ <> ["","*:arrow_heading_up:: The number of packages that depend (directly or indirectly) on this package (if any). If two numbers are shown the first (lower) number considers only packages which currently have enabled hydra jobs, i.e. are not marked broken. The second (higher) number considers all packages.*",""]
361418 <> footer
362419 where
363420 footer = ["*Report generated with [maintainers/scripts/haskell/hydra-report.hs](https://github.com/NixOS/nixpkgs/blob/haskell-updates/maintainers/scripts/haskell/hydra-report.sh)*"]
@@ -365,7 +422,7 @@ printBuildSummary
365422 [ "#### Build summary"
366423 , ""
367424 ]
368− <> printTable "Platform" (\x -> makeSearchLink id (platform x <> " " <> platformIcon x) ("." <> platform x)) (\x -> showT x <> " " <> icon x) showT (statusToNumSummary summary)
425+ <> printTable "Platform" (\x -> makeSearchLink id (platform x <> " " <> platformIcon x) ("." <> platform x)) (\x -> showT x <> " " <> icon x) showT numSummary
369426 headline =
370427 [ "### [haskell-updates build report from hydra](https://hydra.nixos.org/jobset/nixpkgs/haskell-updates)"
371428 , "*evaluation ["
@@ -380,24 +437,49 @@ printBuildSummary
380437 <> Text.pack (formatTime defaultTimeLocale "%Y-%m-%d %H:%M UTC" fetchTime)
381438 <> "*"
382439 ]
383− jobsByState predicate = Map.filter (predicate . foldl' min Success . fmap state . fst) summary
440+ brokenLine (name, rdeps) = "[" <> name <> "](https://packdeps.haskellers.com/reverse/" <> name <> ") :arrow_heading_up: " <> Text.pack (show rdeps) <> " "
441+ numSummary = statusToNumSummary summary
442+ jobsByState predicate = Map.filter (predicate . worstState) summary
443+ worstState = foldl' min Success . fmap state . summaryBuilds
384444 fails = jobsByState (== Failed)
385445 failedDeps = jobsByState (== DependencyFailed)
386446 unknownErr = jobsByState (\x -> x > DependencyFailed && x < TimedOut)
387− withMaintainer = Map.mapMaybe (\(x, m) -> (x,) <$> nonEmpty (Set.toList m))
388− withoutMaintainer = Map.mapMaybe (\(x, m) -> if Set.null m then Just x else Nothing)
447+ withMaintainer = Map.mapMaybe (\e -> (summaryBuilds e,) <$> nonEmpty (Set.toList (summaryMaintainers e)))
448+ withoutMaintainer = Map.mapMaybe (\e -> if Set.null (summaryMaintainers e) then Just e else Nothing)
389449 optionalList heading list = if null list then mempty else [heading] <> list
390450 optionalHideableList heading list = if null list then mempty else [heading] <> details (showT (length list) <> " job(s)") list
391451 maintainedList = showMaintainedBuild <=< Map.toList . withMaintainer
392− unmaintainedList = showBuild <=< Map.toList . withoutMaintainer
393− showBuild (name, table) = printJob id name (table, "")
452+ unmaintainedList = showBuild <=< sortOn (\(snd -> x) -> (negate (summaryUnbrokenReverseDeps x), negate (summaryReverseDeps x))) . Map.toList . withoutMaintainer
453+ showBuild (name, entry) = printJob id name (summaryBuilds entry, Text.pack (if summaryReverseDeps entry > 0 then " :arrow_heading_up: " <> show (summaryUnbrokenReverseDeps entry) <>" | "<> show (summaryReverseDeps entry) else ""))
394454 showMaintainedBuild (name, (table, maintainers)) = printJob id name (table, Text.intercalate " " (fmap ("@" <>) (toList maintainers)))
455+ tldr = case (errors, warnings) of
456+ ([],[]) -> [":green_circle: **Ready to merge**"]
457+ ([],_) -> [":yellow_circle: **Potential issues**"]
458+ _ -> [":red_circle: **Branch not mergeable**"]
459+ warnings =
460+ if' (Unfinished > maybe Success worstState maintainedJob) "`maintained` jobset failed." <>
461+ if' (Unfinished == maybe Success worstState mergeableJob) "`mergeable` jobset is not finished." <>
462+ if' (Unfinished == maybe Success worstState maintainedJob) "`maintained` jobset is not finished."
463+ errors =
464+ if' (isNothing mergeableJob) "No `mergeable` job found." <>
465+ if' (isNothing maintainedJob) "No `maintained` job found." <>
466+ if' (Unfinished > maybe Success worstState mergeableJob) "`mergeable` jobset failed." <>
467+ if' (outstandingJobs (Platform "x86_64-linux") > 100) "Too many outstanding jobs on x86_64-linux." <>
468+ if' (outstandingJobs (Platform "aarch64-linux") > 100) "Too many outstanding jobs on aarch64-linux."
469+ if' p e = if p then [e] else mempty
470+ outstandingJobs platform | Table m <- numSummary = Map.findWithDefault 0 (platform, Unfinished) m
471+ maintainedJob = Map.lookup "maintained" summary
472+ mergeableJob = Map.lookup "mergeable" summary
395473
396474printMaintainerPing :: IO ()
397475printMaintainerPing = do
398− maintainerMap <- getMaintainerMap
476+ (maintainerMap, (reverseDependencyMap, topBrokenRdeps)) <- concurrently getMaintainerMap do
477+ depMap <- getDependencyMap
478+ rdepMap <- evaluate . calculateReverseDependencies $ depMap
479+ let tops = take 50 . sortOn (negate . snd) . fmap (second fst) . filter (\x -> maybe False broken $ Map.lookup (fst x) depMap) . Map.toList $ rdepMap
480+ pure (rdepMap, tops)
399481 (eval, fetchTime, buildReport) <- readBuildReports
400− putStrLn (Text.unpack (printBuildSummary eval fetchTime (buildSummary maintainerMap buildReport)))
482+ putStrLn (Text.unpack (printBuildSummary eval fetchTime (buildSummary maintainerMap reverseDependencyMap buildReport) topBrokenRdeps))
401483
402484printMarkBrokenList :: IO ()
403485printMarkBrokenList = do
maintainers/scripts/haskell/maintained-broken-pkgs.nixnew file+22
@@ -0,0 +1,22 @@
1+let
2+ nixpkgs = import ../../..;
3+ inherit (nixpkgs {}) haskellPackages lib;
4+ maintainedPkgs = lib.filterAttrs (
5+ _: v: builtins.length (v.meta.maintainers or []) > 0
6+ ) haskellPackages;
7+ brokenPkgs = lib.filterAttrs (_: v: v.meta.broken) maintainedPkgs;
8+ transitiveBrokenPkgs = lib.filterAttrs
9+ (_: v: !(builtins.tryEval (v.outPath or null)).success && !v.meta.broken)
10+ maintainedPkgs;
11+ infoList = pkgs: lib.concatStringsSep "\n" (lib.mapAttrsToList (name: drv: "${name} ${(builtins.elemAt drv.meta.maintainers 0).github}") pkgs);
12+in {
13+ report = ''
14+ BROKEN:
15+ ${infoList brokenPkgs}
16+
17+ TRANSITIVE BROKEN:
18+ ${infoList transitiveBrokenPkgs}
19+ '';
20+ transitiveErrors =
21+ builtins.attrValues transitiveBrokenPkgs;
22+}
maintainers/scripts/haskell/maintainer-handles.nixnew file+7
@@ -0,0 +1,7 @@
1+# Nix script to lookup maintainer github handles from their email address. Used by ./hydra-report.hs.
2+let
3+ pkgs = import ../../.. {};
4+ maintainers = import ../../maintainer-list.nix;
5+ inherit (pkgs) lib;
6+ mkMailGithubPair = _: maintainer: if maintainer ? github then { "${maintainer.email}" = maintainer.github; } else {};
7+in lib.zipAttrsWith (_: builtins.head) (lib.mapAttrsToList mkMailGithubPair maintainers)
maintainers/scripts/haskell/merge-and-open-pr.shnew file+122
@@ -0,0 +1,122 @@
1+#! /usr/bin/env nix-shell
2+#! nix-shell -i bash -p git gh -I nixpkgs=.
3+#
4+# Script to merge the currently open haskell-updates PR into master, bump the
5+# Stackage version and Hackage versions, and open the next haskell-updates PR.
6+
7+set -eu -o pipefail
8+
9+# exit after printing first argument to this function
10+function die {
11+ # echo the first argument
12+ echo "ERROR: $1"
13+ echo "Aborting!"
14+
15+ exit 1
16+}
17+
18+function help {
19+ echo "Usage: $0 HASKELL_UPDATES_PR_NUM"
20+ echo "Merge the currently open haskell-updates PR into master, and open the next one."
21+ echo
22+ echo " -h, --help print this help"
23+ echo " HASKELL_UPDATES_PR_NUM number of the currently open PR on NixOS/nixpkgs"
24+ echo " for the haskell-updates branch"
25+ echo
26+ echo "Example:"
27+ echo " \$ $0 137340"
28+
29+ exit 1
30+}
31+
32+# Read in the current haskell-updates PR number from the command line.
33+while [[ $# -gt 0 ]]; do
34+ key="$1"
35+
36+ case $key in
37+ -h|--help)
38+ help
39+ ;;
40+ *)
41+ curr_haskell_updates_pr_num="$1"
42+ shift
43+ ;;
44+ esac
45+done
46+
47+if [[ -z "${curr_haskell_updates_pr_num-}" ]] ; then
48+ die "You must pass the current haskell-updates PR number as the first argument to this script."
49+fi
50+
51+# Make sure you have gh authentication setup.
52+if ! gh auth status 2>/dev/null ; then
53+ die "You must setup the \`gh\` command. Run \`gh auth login\`."
54+fi
55+
56+# Fetch nixpkgs to get an up-to-date origin/haskell-updates branch.
57+echo "Fetching origin..."
58+git fetch origin >/dev/null
59+
60+# Make sure we are currently on a local haskell-updates branch.
61+curr_branch="$(git rev-parse --abbrev-ref HEAD)"
62+if [[ "$curr_branch" != "haskell-updates" ]]; then
63+ die "Current branch is not called \"haskell-updates\"."
64+fi
65+
66+# Make sure our local haskell-updates branch is on the same commit as
67+# origin/haskell-updates.
68+curr_branch_commit="$(git rev-parse haskell-updates)"
69+origin_haskell_updates_commit="$(git rev-parse origin/haskell-updates)"
70+if [[ "$curr_branch_commit" != "$origin_haskell_updates_commit" ]]; then
71+ die "Current branch is not at the same commit as origin/haskell-updates"
72+fi
73+
74+# Merge the current open haskell-updates PR.
75+echo "Merging https://github.com/NixOS/nixpkgs/pull/${curr_haskell_updates_pr_num}..."
76+gh pr merge --repo NixOS/nixpkgs --merge "$curr_haskell_updates_pr_num"
77+
78+# Update the list of Haskell package versions in NixOS on Hackage.
79+echo "Updating list of Haskell package versions in NixOS on Hackage..."
80+./maintainers/scripts/haskell/upload-nixos-package-list-to-hackage.sh
81+
82+# Update stackage, Hackage hashes, and regenerate Haskell package set
83+echo "Updating Stackage..."
84+./maintainers/scripts/haskell/update-stackage.sh --do-commit
85+echo "Updating Hackage hashes..."
86+./maintainers/scripts/haskell/update-hackage.sh --do-commit
87+echo "Regenerating Hackage packages..."
88+./maintainers/scripts/haskell/regenerate-hackage-packages.sh --do-commit
89+
90+# Push these new commits to the haskell-updates branch
91+echo "Pushing commits just created to the remote haskell-updates branch..."
92+git push
93+
94+# Open new PR
95+new_pr_body=$(cat <<EOF
96+### This Merge
97+
98+This PR is the regular merge of the \`haskell-updates\` branch into \`master\`.
99+
100+This branch is being continually built and tested by hydra at https://hydra.nixos.org/jobset/nixpkgs/haskell-updates. You may be able to find an up-to-date Hydra build report at [cdepillabout/nix-haskell-updates-status](https://github.com/cdepillabout/nix-haskell-updates-status).
101+
102+We roughly aim to merge these \`haskell-updates\` PRs at least once every two weeks. See the @NixOS/haskell [team calendar](https://cloud.maralorn.de/apps/calendar/p/H6migHmKX7xHoTFa) for who is currently in charge of this branch.
103+
104+### haskellPackages Workflow Summary
105+
106+Our workflow is currently described in [\`pkgs/development/haskell-modules/HACKING.md\`](https://github.com/NixOS/nixpkgs/blob/haskell-updates/pkgs/development/haskell-modules/HACKING.md).
107+
108+The short version is this:
109+* We regularly update the Stackage and Hackage pins on \`haskell-updates\` (normally at the beginning of a merge window).
110+* The community fixes builds of Haskell packages on that branch.
111+* We aim at at least one merge of \`haskell-updates\` into \`master\` every two weeks.
112+* We only do the merge if the [\`mergeable\`](https://hydra.nixos.org/job/nixpkgs/haskell-updates/mergeable) job is succeeding on hydra.
113+* If a [\`maintained\`](https://hydra.nixos.org/job/nixpkgs/haskell-updates/maintained) package is still broken at the time of merge, we will only merge if the maintainer has been pinged 7 days in advance. (If you care about a Haskell package, become a maintainer!)
114+
115+---
116+
117+This is the follow-up to #${curr_haskell_updates_pr_num}. Come to [#haskell:nixos.org](https://matrix.to/#/#haskell:nixos.org) if you have any questions.
118+EOF
119+)
120+
121+echo "Opening a PR for the next haskell-updates merge cycle..."
122+gh pr create --repo NixOS/nixpkgs --base master --head haskell-updates --title "haskellPackages: update stackage and hackage" --body "$new_pr_body"
maintainers/scripts/haskell/regenerate-hackage-packages.sh+1−1
@@ -20,7 +20,7 @@ HACKAGE2NIX="${HACKAGE2NIX:-hackage2nix}"
2020# See: https://github.com/NixOS/nixpkgs/pull/122023
2121export LC_ALL=C.UTF-8
2222
23−extraction_derivation='with import ./. {}; runCommand "unpacked-cabal-hashes" { } "tar xf ${all-cabal-hashes} --strip-components=1 --one-top-level=$out"'
23+extraction_derivation='with import ./. {}; runCommandLocal "unpacked-cabal-hashes" { } "tar xf ${all-cabal-hashes} --strip-components=1 --one-top-level=$out"'
2424unpacked_hackage="$(nix-build -E "$extraction_derivation" --no-out-link)"
2525config_dir=pkgs/development/haskell-modules/configuration-hackage2nix
2626
maintainers/scripts/haskell/test-configurations.nixnew file+136
@@ -0,0 +1,136 @@
1+/* Nix expression to test for regressions in the Haskell configuration overlays.
2+
3+ test-configurations.nix determines all attributes touched by given Haskell
4+ configuration overlays (i. e. pkgs/development/haskell-modules/configuration-*.nix)
5+ and builds all derivations (or at least a reasonable subset) affected by
6+ these overrides.
7+
8+ By default, it checks `configuration-{common,nix,ghc-8.10.x}.nix`. You can
9+ invoke it like this:
10+
11+ nix-build maintainers/scripts/haskell/test-configurations.nix --keep-going
12+
13+ It is possible to specify other configurations:
14+
15+ nix-build maintainers/scripts/haskell/test-configurations.nix \
16+ --arg files '[ "configuration-ghc-9.0.x.nix" "configuration-ghc-9.2.x.nix" ]' \
17+ --keep-going
18+
19+ You can also just supply a single string:
20+
21+ nix-build maintainers/scripts/haskell/test-configurations.nix \
22+ --argstr files "configuration-arm.nix" --keep-going
23+
24+ You can even supply full paths which is handy, as it allows for tab-completing
25+ the configurations:
26+
27+ nix-build maintainers/scripts/haskell/test-configurations.nix \
28+ --argstr files pkgs/development/haskell-modules/configuration-arm.nix \
29+ --keep-going
30+
31+ By default, derivation that fail to evaluate are skipped, unless they are
32+ “just” marked as broken. You can check for other eval errors like this:
33+
34+ nix-build maintainers/scripts/haskell/test-configurations.nix \
35+ --arg skipEvalErrors false --keep-going
36+
37+ You can also disable checking broken packages by passing a nixpkgs config:
38+
39+ nix-build maintainers/scripts/haskell/test-configurations.nix \
40+ --arg config '{ allowBroken = false; }' --keep-going
41+
42+ By default the haskell.packages.ghc*Binary sets used for bootstrapping GHC
43+ are _not_ tested. You can change this using:
44+
45+ nix-build maintainers/scripts/haskell/test-configurations.nix \
46+ --arg skipBinaryGHCs false --keep-going
47+
48+*/
49+{ files ? [
50+ "configuration-common.nix"
51+ "configuration-nix.nix"
52+ "configuration-ghc-8.10.x.nix"
53+ ]
54+, nixpkgsPath ? ../../..
55+, config ? { allowBroken = true; }
56+, skipEvalErrors ? true
57+, skipBinaryGHCs ? true
58+}:
59+
60+let
61+ pkgs = import nixpkgsPath { inherit config; };
62+ inherit (pkgs) lib;
63+
64+ # see usage explanation for the input format `files` allows
65+ files' = builtins.map builtins.baseNameOf (
66+ if !builtins.isList files then [ files ] else files
67+ );
68+
69+ setsForFile = fileName:
70+ let
71+ # extract the unique part of the config's file name
72+ configName = builtins.head (
73+ builtins.match "configuration-(.+).nix" fileName
74+ );
75+ # match the major and minor version of the GHC the config is intended for, if any
76+ configVersion = lib.concatStrings (
77+ builtins.match "ghc-([0-9]+).([0-9]+).x" configName
78+ );
79+ # return all package sets under haskell.packages matching the version components
80+ setsForVersion = builtins.map (name: pkgs.haskell.packages.${name}) (
81+ builtins.filter (setName:
82+ lib.hasPrefix "ghc${configVersion}" setName
83+ && (skipBinaryGHCs -> !(lib.hasInfix "Binary" setName))
84+ ) (
85+ builtins.attrNames pkgs.haskell.packages
86+ )
87+ );
88+
89+ defaultSets = [ pkgs.haskellPackages ];
90+ in {
91+ # use plain haskellPackages for the version-agnostic files
92+ # TODO(@sternenseemann): also consider currently selected versioned sets
93+ "common" = defaultSets;
94+ "nix" = defaultSets;
95+ "arm" = defaultSets;
96+ "darwin" = defaultSets;
97+ }.${configName} or setsForVersion;
98+
99+ # attribute set that has all the attributes of haskellPackages set to null
100+ availableHaskellPackages = builtins.listToAttrs (
101+ builtins.map (attr: lib.nameValuePair attr null) (
102+ builtins.attrNames pkgs.haskellPackages
103+ )
104+ );
105+
106+ # evaluate a configuration and only return the attributes changed by it,
107+ # pass availableHaskellPackages as super in case intersectAttrs is used
108+ overriddenAttrs = fileName: builtins.attrNames (
109+ lib.fix (self:
110+ import (nixpkgsPath + "/pkgs/development/haskell-modules/${fileName}") {
111+ haskellLib = pkgs.haskell.lib.compose;
112+ inherit pkgs;
113+ } self availableHaskellPackages
114+ )
115+ );
116+
117+ # list of derivations that are affected by overrides in the given configuration
118+ # overlays. For common, nix, darwin etc. only the derivation from the default
119+ # package set will be emitted.
120+ packages = builtins.filter (v:
121+ lib.warnIf (v.meta.broken or false) "${v.pname} is marked as broken" (
122+ v != null
123+ && (skipEvalErrors -> (builtins.tryEval (v.outPath or v)).success)
124+ )
125+ ) (
126+ lib.concatMap (fileName:
127+ let
128+ sets = setsForFile fileName;
129+ attrs = overriddenAttrs fileName;
130+ in
131+ lib.concatMap (set: builtins.map (attr: set.${attr}) attrs) sets
132+ ) files'
133+ );
134+in
135+
136+packages
maintainers/scripts/haskell/update-stackage.sh+25−12
@@ -1,26 +1,38 @@
11#! /usr/bin/env nix-shell
22#! nix-shell -i bash -p nix curl jq nix-prefetch-github git gnused gnugrep -I nixpkgs=.
3+# shellcheck shell=bash
34
45set -eu -o pipefail
56
6−tmpfile=$(mktemp "update-stackage.XXXXXXX")
7−# shellcheck disable=SC2064
7+# Stackage solver to use, LTS or Nightly
8+# (should be capitalized like the display name)
9+SOLVER=LTS
10+TMP_TEMPLATE=update-stackage.XXXXXXX
11+readonly SOLVER
12+readonly TMP_TEMPLATE
13+
14+toLower() {
15+ printf "%s" "$1" | tr '[:upper:]' '[:lower:]'
16+}
17+
18+tmpfile=$(mktemp "$TMP_TEMPLATE")
19+tmpfile_new=$(mktemp "$TMP_TEMPLATE")
820
921stackage_config="pkgs/development/haskell-modules/configuration-hackage2nix/stackage.yaml"
1022
11−trap "rm ${tmpfile} ${tmpfile}.new" 0
12−touch "$tmpfile" "$tmpfile.new" # Creating files here so that trap creates no errors.
23+trap 'rm "${tmpfile}" "${tmpfile_new}"' 0
24+touch "$tmpfile" "$tmpfile_new" # Creating files here so that trap creates no errors.
1325
14−curl -L -s "https://stackage.org/lts/cabal.config" >"$tmpfile"
15−old_version=$(grep "# Stackage" $stackage_config | sed -E 's/.*([0-9]{2}\.[0-9]+)/\1/')
16−version=$(sed -rn "s/^--.*http:..(www.)?stackage.org.snapshot.lts-//p" "$tmpfile")
26+curl -L -s "https://stackage.org/$(toLower "$SOLVER")/cabal.config" >"$tmpfile"
27+old_version=$(grep '^# Stackage' $stackage_config | sed -e 's/.\+ \([A-Za-z]\+ [0-9.-]\+\)$/\1/g')
28+version="$SOLVER $(sed -rn "s/^--.*http:..(www.)?stackage.org.snapshot.$(toLower "$SOLVER")-//p" "$tmpfile")"
1729
1830if [[ "$old_version" == "$version" ]]; then
1931 echo "No new stackage version"
2032 exit 0 # Nothing to do
2133fi
2234
23−echo "Updating Stackage LTS from $old_version to $version."
35+echo "Updating Stackage from $old_version to $version."
2436
2537# Create a simple yaml version of the file.
2638sed -r \
@@ -30,10 +42,10 @@ sed -r \
3042 -e 's|,$||' \
3143 -e '/installed$/d' \
3244 -e '/^$/d' \
33− < "${tmpfile}" | sort --ignore-case >"${tmpfile}.new"
45+ < "${tmpfile}" | sort --ignore-case >"${tmpfile_new}"
3446
3547cat > $stackage_config << EOF
36−# Stackage LTS $version
48+# Stackage $version
3749# This file is auto-generated by
3850# maintainers/scripts/haskell/update-stackage.sh
3951default-package-overrides:
@@ -45,12 +57,13 @@ sed -r \
4557 -e '/ distribution-nixpkgs /d' \
4658 -e '/ jailbreak-cabal /d' \
4759 -e '/ language-nix /d' \
48− < "${tmpfile}.new" >> $stackage_config
60+ -e '/ cabal-install /d' \
61+ < "${tmpfile_new}" >> $stackage_config
4962
5063if [[ "${1:-}" == "--do-commit" ]]; then
5164git add $stackage_config
5265git commit -F - << EOF
53−haskellPackages: stackage-lts $old_version -> $version
66+haskellPackages: stackage $old_version -> $version
5467
5568This commit has been generated by maintainers/scripts/haskell/update-stackage.sh
5669EOF
maintainers/scripts/haskell/upload-nixos-package-list-to-hackage.sh+1
@@ -19,3 +19,4 @@ package_list="$(nix-build -A haskell.package-list)/nixos-hackage-packages.csv"
1919username=$(grep "^username:" ~/.cabal/config | sed "s/^username: //")
2020password_command=$(grep "^password-command:" ~/.cabal/config | sed "s/^password-command: //")
2121curl -u "$username:$($password_command | head -n1)" --digest -H "Content-type: text/csv" -T "$package_list" http://hackage.haskell.org/distro/NixOS/packages.csv
22+echo
maintainers/scripts/luarocks-packages.csv+5−4
@@ -52,7 +52,7 @@ luadbi-postgresql,,,,,,
5252luadbi-sqlite3,,,,,,
5353luaepnf,,,,,,
5454luaevent,,,,,,
55−luaexpat,,,,1.3.0-1,,arobyn flosse
55+luaexpat,,,,1.4.1-1,,arobyn flosse
5656luaffi,,,http://luarocks.org/dev,,,
5757luafilesystem,,,,1.7.0-2,,flosse
5858lualogging,,,,,,
@@ -64,16 +64,17 @@ luasocket,,,,,,
6464luasql-sqlite3,,,,,,vyp
6565luassert,,,,,,
6666luasystem,,,,,,
67+luaunbound,,,,,
6768luautf8,,,,,,pstn
6869luazip,,,,,,
6970lua-yajl,,,,,,pstn
7071luuid,,,,,,
71−luv,,,,1.30.0-0,,
72+luv,,,,1.43.0-0,,
7273lyaml,,,,,,lblasc
7374markdown,,,,,,
7475mediator_lua,,,,,,
7576mpack,,,,,,
76−moonscript,,,,,,arobyn
77+moonscript,https://github.com/leafo/moonscript.git,dev-1,,,,arobyn
7778nvim-client,https://github.com/neovim/lua-client.git,,,,,
7879penlight,https://github.com/lunarmodules/Penlight.git,,,,,alerque
7980plenary.nvim,https://github.com/nvim-lua/plenary.nvim.git,,,,lua5_1,
@@ -81,6 +82,6 @@ rapidjson,https://github.com/xpol/lua-rapidjson.git,,,,,
8182readline,,,,,,
8283say,https://github.com/Olivine-Labs/say.git,,,,,
8384std._debug,https://github.com/lua-stdlib/_debug.git,,,,,
84−std.normalize,git://github.com/lua-stdlib/normalize.git,,,,,
85+std.normalize,https://github.com/lua-stdlib/normalize.git,,,,,
8586stdlib,,,,41.2.2,,vyp
8687vstruct,https://github.com/ToxicFrog/vstruct.git,,,,,
maintainers/scripts/pluginupdate.py+284−165
@@ -1,4 +1,4 @@
1−# Used by pkgs/misc/vim-plugins/update.py and pkgs/applications/editors/kakoune/plugins/update.py
1+# Used by pkgs/applications/editors/vim/plugins/update.py and pkgs/applications/editors/kakoune/plugins/update.py
22
33# format:
44# $ nix run nixpkgs.python3Packages.black -c black update.py
@@ -8,6 +8,7 @@
88# $ nix run nixpkgs.python3Packages.flake8 -c flake8 --ignore E501,E265 update.py
99
1010import argparse
11+import csv
1112import functools
1213import http
1314import json
@@ -28,7 +29,7 @@ from pathlib import Path
2829from typing import Dict, List, Optional, Tuple, Union, Any, Callable
2930from urllib.parse import urljoin, urlparse
3031from tempfile import NamedTemporaryFile
31−from dataclasses import dataclass
32+from dataclasses import dataclass, asdict
3233
3334import git
3435
@@ -73,42 +74,103 @@ def retry(ExceptionToCheck: Any, tries: int = 4, delay: float = 3, backoff: floa
7374
7475 return deco_retry
7576
77+@dataclass
78+class FetchConfig:
79+ proc: int
80+ github_token: str
81+
7682
77−def make_request(url: str) -> urllib.request.Request:
78− token = os.getenv("GITHUB_API_TOKEN")
83+def make_request(url: str, token=None) -> urllib.request.Request:
7984 headers = {}
8085 if token is not None:
8186 headers["Authorization"] = f"token {token}"
8287 return urllib.request.Request(url, headers=headers)
8388
84−@dataclass
85−class PluginDesc:
86− owner: str
87− repo: str
88− branch: str
89− alias: Optional[str]
9089
90+# a dictionary of plugins and their new repositories
91+Redirects = Dict['PluginDesc', 'Repo']
9192
9293class Repo:
9394 def __init__(
94− self, owner: str, name: str, branch: str, alias: Optional[str]
95+ self, uri: str, branch: str
9596 ) -> None:
96− self.owner = owner
97− self.name = name
98− self.branch = branch
99− self.alias = alias
100− self.redirect: Dict[str, str] = {}
97+ self.uri = uri
98+ '''Url to the repo'''
99+ self._branch = branch
100+ # Redirect is the new Repo to use
101+ self.redirect: Optional['Repo'] = None
102+ self.token = "dummy_token"
101103
102− def url(self, path: str) -> str:
103− return urljoin(f"https://github.com/{self.owner}/{self.name}/", path)
104+ @property
105+ def name(self):
106+ return self.uri.split('/')[-1]
104107
108+ @property
109+ def branch(self):
110+ return self._branch or "HEAD"
111+
112+ def __str__(self) -> str:
113+ return f"{self.uri}"
105114 def __repr__(self) -> str:
106− return f"Repo({self.owner}, {self.name})"
115+ return f"Repo({self.name}, {self.uri})"
116+
117+ @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
118+ def has_submodules(self) -> bool:
119+ return True
120+
121+ @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
122+ def latest_commit(self) -> Tuple[str, datetime]:
123+ log.debug("Latest commit")
124+ loaded = self._prefetch(None)
125+ updated = datetime.strptime(loaded['date'], "%Y-%m-%dT%H:%M:%S%z")
126+
127+ return loaded['rev'], updated
128+
129+ def _prefetch(self, ref: Optional[str]):
130+ cmd = ["nix-prefetch-git", "--quiet", "--fetch-submodules", self.uri]
131+ if ref is not None:
132+ cmd.append(ref)
133+ log.debug(cmd)
134+ data = subprocess.check_output(cmd)
135+ loaded = json.loads(data)
136+ return loaded
137+
138+ def prefetch(self, ref: Optional[str]) -> str:
139+ print("Prefetching")
140+ loaded = self._prefetch(ref)
141+ return loaded["sha256"]
142+
143+ def as_nix(self, plugin: "Plugin") -> str:
144+ return f'''fetchgit {{
145+ url = "{self.uri}";
146+ rev = "{plugin.commit}";
147+ sha256 = "{plugin.sha256}";
148+ }}'''
149+
150+
151+class RepoGitHub(Repo):
152+ def __init__(
153+ self, owner: str, repo: str, branch: str
154+ ) -> None:
155+ self.owner = owner
156+ self.repo = repo
157+ self.token = None
158+ '''Url to the repo'''
159+ super().__init__(self.url(""), branch)
160+ log.debug("Instantiating github repo owner=%s and repo=%s", self.owner, self.repo)
161+
162+ @property
163+ def name(self):
164+ return self.repo
165+
166+ def url(self, path: str) -> str:
167+ res = urljoin(f"https://github.com/{self.owner}/{self.repo}/", path)
168+ return res
107169
108170 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
109171 def has_submodules(self) -> bool:
110172 try:
111− req = make_request(self.url(f"blob/{self.branch}/.gitmodules"))
173+ req = make_request(self.url(f"blob/{self.branch}/.gitmodules"), self.token)
112174 urllib.request.urlopen(req, timeout=10).close()
113175 except urllib.error.HTTPError as e:
114176 if e.code == 404:
@@ -120,9 +182,10 @@ class Repo:
120182 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
121183 def latest_commit(self) -> Tuple[str, datetime]:
122184 commit_url = self.url(f"commits/{self.branch}.atom")
123− commit_req = make_request(commit_url)
185+ log.debug("Sending request to %s", commit_url)
186+ commit_req = make_request(commit_url, self.token)
124187 with urllib.request.urlopen(commit_req, timeout=10) as req:
125− self.check_for_redirect(commit_url, req)
188+ self._check_for_redirect(commit_url, req)
126189 xml = req.read()
127190 root = ET.fromstring(xml)
128191 latest_entry = root.find(ATOM_ENTRY)
@@ -137,46 +200,89 @@ class Repo:
137200 updated = datetime.strptime(updated_tag.text, "%Y-%m-%dT%H:%M:%SZ")
138201 return Path(str(url.path)).name, updated
139202
140− def check_for_redirect(self, url: str, req: http.client.HTTPResponse):
203+ def _check_for_redirect(self, url: str, req: http.client.HTTPResponse):
141204 response_url = req.geturl()
142205 if url != response_url:
143206 new_owner, new_name = (
144207 urllib.parse.urlsplit(response_url).path.strip("/").split("/")[:2]
145208 )
146− end_line = "\n" if self.alias is None else f" as {self.alias}\n"
147− plugin_line = "{owner}/{name}" + end_line
148209
149− old_plugin = plugin_line.format(owner=self.owner, name=self.name)
150− new_plugin = plugin_line.format(owner=new_owner, name=new_name)
151− self.redirect[old_plugin] = new_plugin
210+ new_repo = RepoGitHub(owner=new_owner, repo=new_name, branch=self.branch)
211+ self.redirect = new_repo
152212
153− def prefetch_git(self, ref: str) -> str:
154− data = subprocess.check_output(
155− ["nix-prefetch-git", "--fetch-submodules", self.url(""), ref]
156− )
157− return json.loads(data)["sha256"]
213+
214+ def prefetch(self, commit: str) -> str:
215+ if self.has_submodules():
216+ sha256 = super().prefetch(commit)
217+ else:
218+ sha256 = self.prefetch_github(commit)
219+ return sha256
158220
159221 def prefetch_github(self, ref: str) -> str:
160− data = subprocess.check_output(
161− ["nix-prefetch-url", "--unpack", self.url(f"archive/{ref}.tar.gz")]
162− )
222+ cmd = ["nix-prefetch-url", "--unpack", self.url(f"archive/{ref}.tar.gz")]
223+ log.debug("Running %s", cmd)
224+ data = subprocess.check_output(cmd)
163225 return data.strip().decode("utf-8")
164226
227+ def as_nix(self, plugin: "Plugin") -> str:
228+ if plugin.has_submodules:
229+ submodule_attr = "\n fetchSubmodules = true;"
230+ else:
231+ submodule_attr = ""
232+
233+ return f'''fetchFromGitHub {{
234+ owner = "{self.owner}";
235+ repo = "{self.repo}";
236+ rev = "{plugin.commit}";
237+ sha256 = "{plugin.sha256}";{submodule_attr}
238+ }}'''
239+
240+
241+@dataclass(frozen=True)
242+class PluginDesc:
243+ repo: Repo
244+ branch: str
245+ alias: Optional[str]
246+
247+ @property
248+ def name(self):
249+ if self.alias is None:
250+ return self.repo.name
251+ else:
252+ return self.alias
253+
254+ def __lt__(self, other):
255+ return self.repo.name < other.repo.name
256+
257+ @staticmethod
258+ def load_from_csv(config: FetchConfig, row: Dict[str, str]) -> 'PluginDesc':
259+ branch = row["branch"]
260+ repo = make_repo(row['repo'], branch.strip())
261+ repo.token = config.github_token
262+ return PluginDesc(repo, branch.strip(), row["alias"])
263+
264+
265+ @staticmethod
266+ def load_from_string(config: FetchConfig, line: str) -> 'PluginDesc':
267+ branch = "HEAD"
268+ alias = None
269+ uri = line
270+ if " as " in uri:
271+ uri, alias = uri.split(" as ")
272+ alias = alias.strip()
273+ if "@" in uri:
274+ uri, branch = uri.split("@")
275+ repo = make_repo(uri.strip(), branch.strip())
276+ repo.token = config.github_token
277+ return PluginDesc(repo, branch.strip(), alias)
165278
279+@dataclass
166280class Plugin:
167− def __init__(
168− self,
169− name: str,
170− commit: str,
171− has_submodules: bool,
172− sha256: str,
173− date: Optional[datetime] = None,
174− ) -> None:
175− self.name = name
176− self.commit = commit
177− self.has_submodules = has_submodules
178− self.sha256 = sha256
179− self.date = date
281+ name: str
282+ commit: str
283+ has_submodules: bool
284+ sha256: str
285+ date: Optional[datetime] = None
180286
181287 @property
182288 def normalized_name(self) -> str:
@@ -193,6 +299,28 @@ class Plugin:
193299 return copy
194300
195301
302+def load_plugins_from_csv(config: FetchConfig, input_file: Path,) -> List[PluginDesc]:
303+ log.debug("Load plugins from csv %s", input_file)
304+ plugins = []
305+ with open(input_file, newline='') as csvfile:
306+ log.debug("Writing into %s", input_file)
307+ reader = csv.DictReader(csvfile,)
308+ for line in reader:
309+ plugin = PluginDesc.load_from_csv(config, line)
310+ plugins.append(plugin)
311+
312+ return plugins
313+
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)
321+ return data
322+
323+
196324class Editor:
197325 """The configuration of the update script."""
198326
@@ -215,19 +343,45 @@ class Editor:
215343 self.deprecated = deprecated or root.joinpath("deprecated.json")
216344 self.cache_file = cache_file or f"{name}-plugin-cache.json"
217345
218− def get_current_plugins(self):
346+ def get_current_plugins(self) -> List[Plugin]:
219347 """To fill the cache"""
220− return get_current_plugins(self)
221−
222− def load_plugin_spec(self, plugin_file) -> List[PluginDesc]:
223− return load_plugin_spec(plugin_file)
348+ data = run_nix_expr(self.get_plugins)
349+ 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"])
353+ plugins.append(p)
354+ return plugins
355+
356+ def load_plugin_spec(self, config: FetchConfig, plugin_file) -> List[PluginDesc]:
357+ '''CSV spec'''
358+ return load_plugins_from_csv(config, plugin_file)
224359
225360 def generate_nix(self, plugins, outfile: str):
226361 '''Returns nothing for now, writes directly to outfile'''
227362 raise NotImplementedError()
228363
229− def get_update(self, input_file: str, outfile: str, proc: int):
230− return get_update(input_file, outfile, proc, editor=self)
364+ def get_update(self, input_file: str, outfile: str, config: FetchConfig):
365+ cache: Cache = Cache(self.get_current_plugins(), self.cache_file)
366+ _prefetch = functools.partial(prefetch, cache=cache)
367+
368+ def update() -> dict:
369+ plugins = self.load_plugin_spec(config, input_file)
370+
371+ try:
372+ pool = Pool(processes=config.proc)
373+ results = pool.map(_prefetch, plugins)
374+ finally:
375+ cache.store()
376+
377+ plugins, redirects = check_results(results)
378+
379+ self.generate_nix(plugins, outfile)
380+
381+ return redirects
382+
383+ return update
384+
231385
232386 @property
233387 def attr_path(self):
@@ -241,9 +395,9 @@ class Editor:
241395
242396 def create_parser(self):
243397 parser = argparse.ArgumentParser(
244− description=(
245− f"Updates nix derivations for {self.name} plugins"
246− f"By default from {self.default_in} to {self.default_out}"
398+ description=(f"""
399+ Updates nix derivations for {self.name} plugins.\n
400+ By default from {self.default_in} to {self.default_out}"""
247401 )
248402 )
249403 parser.add_argument(
@@ -273,7 +427,15 @@ class Editor:
273427 dest="proc",
274428 type=int,
275429 default=30,
276− help="Number of concurrent processes to spawn.",
430+ help="Number of concurrent processes to spawn. Setting --github-token allows higher values.",
431+ )
432+ parser.add_argument(
433+ "--github-token",
434+ "-t",
435+ type=str,
436+ default=os.getenv("GITHUB_API_TOKEN"),
437+ help="""Allows to set --proc to higher values.
438+ Uses GITHUB_API_TOKEN environment variables as the default value.""",
277439 )
278440 parser.add_argument(
279441 "--no-commit", "-n", action="store_true", default=False,
@@ -303,53 +465,33 @@ class CleanEnvironment(object):
303465 self.empty_config.close()
304466
305467
306−def get_current_plugins(editor: Editor) -> List[Plugin]:
307− with CleanEnvironment():
308− cmd = ["nix", "eval", "--json", editor.get_plugins]
309− log.debug("Running command %s", cmd)
310− out = subprocess.check_output(cmd)
311− data = json.loads(out)
312− plugins = []
313− for name, attr in data.items():
314− p = Plugin(name, attr["rev"], attr["submodules"], attr["sha256"])
315− plugins.append(p)
316− return plugins
317−
318−
319468def prefetch_plugin(
320469 p: PluginDesc,
321470 cache: "Optional[Cache]" = None,
322−) -> Tuple[Plugin, Dict[str, str]]:
323− user, repo_name, branch, alias = p.owner, p.repo, p.branch, p.alias
324− log.info(f"Fetching last commit for plugin {user}/{repo_name}@{branch}")
325− repo = Repo(user, repo_name, branch, alias)
471+) -> Tuple[Plugin, Optional[Repo]]:
472+ repo, branch, alias = p.repo, p.branch, p.alias
473+ name = alias or p.repo.name
474+ commit = None
475+ log.info(f"Fetching last commit for plugin {name} from {repo.uri}@{branch}")
326476 commit, date = repo.latest_commit()
327− has_submodules = repo.has_submodules()
328477 cached_plugin = cache[commit] if cache else None
329478 if cached_plugin is not None:
330479 log.debug("Cache hit !")
331− cached_plugin.name = alias or repo_name
480+ cached_plugin.name = name
332481 cached_plugin.date = date
333482 return cached_plugin, repo.redirect
334483
335− print(f"prefetch {user}/{repo_name}")
336− if has_submodules:
337− sha256 = repo.prefetch_git(commit)
338− else:
339− sha256 = repo.prefetch_github(commit)
484+ has_submodules = repo.has_submodules()
485+ log.debug(f"prefetch {name}")
486+ sha256 = repo.prefetch(commit)
340487
341488 return (
342− Plugin(alias or repo_name, commit, has_submodules, sha256, date=date),
489+ Plugin(name, commit, has_submodules, sha256, date=date),
343490 repo.redirect,
344491 )
345492
346493
347−def fetch_plugin_from_pluginline(plugin_line: str) -> Plugin:
348− plugin, _ = prefetch_plugin(parse_plugin_line(plugin_line))
349− return plugin
350−
351−
352−def print_download_error(plugin: str, ex: Exception):
494+def print_download_error(plugin: PluginDesc, ex: Exception):
353495 print(f"{plugin}: {ex}", file=sys.stderr)
354496 ex_traceback = ex.__traceback__
355497 tb_lines = [
@@ -358,19 +500,22 @@ def print_download_error(plugin: str, ex: Exception):
358500 ]
359501 print("\n".join(tb_lines))
360502
361−
362503def check_results(
363− results: List[Tuple[str, str, Union[Exception, Plugin], Dict[str, str]]]
364−) -> Tuple[List[Tuple[str, str, Plugin]], Dict[str, str]]:
365− failures: List[Tuple[str, Exception]] = []
504+ results: List[Tuple[PluginDesc, Union[Exception, Plugin], Optional[Repo]]]
505+) -> Tuple[List[Tuple[PluginDesc, Plugin]], Redirects]:
506+ ''' '''
507+ failures: List[Tuple[PluginDesc, Exception]] = []
366508 plugins = []
367− redirects: Dict[str, str] = {}
368− for (owner, name, result, redirect) in results:
509+ redirects: Redirects = {}
510+ for (pdesc, result, redirect) in results:
369511 if isinstance(result, Exception):
370− failures.append((name, result))
512+ failures.append((pdesc, result))
371513 else:
372− plugins.append((owner, name, result))
373− redirects.update(redirect)
514+ new_pdesc = pdesc
515+ if redirect is not None:
516+ redirects.update({pdesc: redirect})
517+ new_pdesc = PluginDesc(redirect, pdesc.branch, pdesc.alias)
518+ plugins.append((new_pdesc, result))
374519
375520 print(f"{len(results) - len(failures)} plugins were checked", end="")
376521 if len(failures) == 0:
@@ -384,30 +529,16 @@ def check_results(
384529
385530 sys.exit(1)
386531
387−def parse_plugin_line(line: str) -> PluginDesc:
388− branch = "master"
389− alias = None
390− name, repo = line.split("/")
391− if " as " in repo:
392− repo, alias = repo.split(" as ")
393− alias = alias.strip()
394− if "@" in repo:
395− repo, branch = repo.split("@")
396−
397− return PluginDesc(name.strip(), repo.strip(), branch.strip(), alias)
398−
399−
400−def load_plugin_spec(plugin_file: str) -> List[PluginDesc]:
401− plugins = []
402− with open(plugin_file) as f:
403− for line in f:
404− plugin = parse_plugin_line(line)
405− if not plugin.owner:
406− msg = f"Invalid repository {line}, must be in the format owner/repo[ as alias]"
407− print(msg, file=sys.stderr)
408− sys.exit(1)
409− plugins.append(plugin)
410− return plugins
532+def make_repo(uri: str, branch) -> Repo:
533+ '''Instantiate a Repo with the correct specialization depending on server (gitub spec)'''
534+ # dumb check to see if it's of the form owner/repo (=> github) or https://...
535+ res = urlparse(uri)
536+ if res.netloc in [ "github.com", ""]:
537+ res = res.path.strip('/').split('/')
538+ repo = RepoGitHub(res[0], res[1], branch)
539+ else:
540+ repo = Repo(uri.strip(), branch)
541+ return repo
411542
412543
413544def get_cache_path(cache_file_name: str) -> Optional[Path]:
@@ -465,36 +596,37 @@ class Cache:
465596
466597def prefetch(
467598 pluginDesc: PluginDesc, cache: Cache
468−) -> Tuple[str, str, Union[Exception, Plugin], dict]:
469− owner, repo = pluginDesc.owner, pluginDesc.repo
599+) -> Tuple[PluginDesc, Union[Exception, Plugin], Optional[Repo]]:
470600 try:
471601 plugin, redirect = prefetch_plugin(pluginDesc, cache)
472602 cache[plugin.commit] = plugin
473− return (owner, repo, plugin, redirect)
603+ return (pluginDesc, plugin, redirect)
474604 except Exception as e:
475− return (owner, repo, e, {})
605+ return (pluginDesc, e, None)
606+
476607
477608
478609def rewrite_input(
610+ config: FetchConfig,
479611 input_file: Path,
480612 deprecated: Path,
481− redirects: Dict[str, str] = None,
482− append: Tuple = (),
613+ # old pluginDesc and the new
614+ redirects: Redirects = {},
615+ append: List[PluginDesc] = [],
483616):
484− with open(input_file, "r") as f:
485− lines = f.readlines()
617+ plugins = load_plugins_from_csv(config, input_file,)
486618
487− lines.extend(append)
619+ plugins.extend(append)
488620
489621 if redirects:
490− lines = [redirects.get(line, line) for line in lines]
491622
492623 cur_date_iso = datetime.now().strftime("%Y-%m-%d")
493624 with open(deprecated, "r") as f:
494625 deprecations = json.load(f)
495− for old, new in redirects.items():
496− old_plugin = fetch_plugin_from_pluginline(old)
497− new_plugin = fetch_plugin_from_pluginline(new)
626+ for pdesc, new_repo in redirects.items():
627+ new_pdesc = PluginDesc(new_repo, pdesc.branch, pdesc.alias)
628+ old_plugin, _ = prefetch_plugin(pdesc)
629+ new_plugin, _ = prefetch_plugin(new_pdesc)
498630 if old_plugin.normalized_name != new_plugin.normalized_name:
499631 deprecations[old_plugin.normalized_name] = {
500632 "new": new_plugin.normalized_name,
@@ -504,10 +636,14 @@ def rewrite_input(
504636 json.dump(deprecations, f, indent=4, sort_keys=True)
505637 f.write("\n")
506638
507− lines = sorted(lines, key=str.casefold)
508−
509639 with open(input_file, "w") as f:
510− f.writelines(lines)
640+ log.debug("Writing into %s", input_file)
641+ # fields = dataclasses.fields(PluginDesc)
642+ fieldnames = ['repo', 'branch', 'alias']
643+ writer = csv.DictWriter(f, fieldnames, dialect='unix', quoting=csv.QUOTE_NONE)
644+ writer.writeheader()
645+ for plugin in sorted(plugins):
646+ writer.writerow(asdict(plugin))
511647
512648
513649def commit(repo: git.Repo, message: str, files: List[Path]) -> None:
@@ -520,40 +656,21 @@ def commit(repo: git.Repo, message: str, files: List[Path]) -> None:
520656 print("no changes in working tree to commit")
521657
522658
523−def get_update(input_file: str, outfile: str, proc: int, editor: Editor):
524− cache: Cache = Cache(editor.get_current_plugins(), editor.cache_file)
525− _prefetch = functools.partial(prefetch, cache=cache)
526−
527− def update() -> dict:
528− plugin_names = editor.load_plugin_spec(input_file)
529−
530− try:
531− pool = Pool(processes=proc)
532− results = pool.map(_prefetch, plugin_names)
533− finally:
534− cache.store()
535−
536− plugins, redirects = check_results(results)
537−
538− editor.generate_nix(plugins, outfile)
539−
540− return redirects
541−
542− return update
543−
544659
545660def update_plugins(editor: Editor, args):
546661 """The main entry function of this module. All input arguments are grouped in the `Editor`."""
547662
548663 log.setLevel(LOG_LEVELS[args.debug])
549664 log.info("Start updating plugins")
550− update = editor.get_update(args.input_file, args.outfile, args.proc)
665+ fetch_config = FetchConfig(args.proc, args.github_token)
666+ update = editor.get_update(args.input_file, args.outfile, fetch_config)
551667
552668 redirects = update()
553− editor.rewrite_input(args.input_file, editor.deprecated, redirects)
669+ editor.rewrite_input(fetch_config, args.input_file, editor.deprecated, redirects)
554670
555671 autocommit = not args.no_commit
556672
673+ nixpkgs_repo = None
557674 if autocommit:
558675 nixpkgs_repo = git.Repo(editor.root, search_parent_directories=True)
559676 commit(nixpkgs_repo, f"{editor.attr_path}: update", [args.outfile])
@@ -568,9 +685,11 @@ def update_plugins(editor: Editor, args):
568685 )
569686
570687 for plugin_line in args.add_plugins:
571− editor.rewrite_input(args.input_file, editor.deprecated, append=(plugin_line + "\n",))
688+ pdesc = PluginDesc.load_from_string(fetch_config, plugin_line)
689+ append = [ pdesc ]
690+ editor.rewrite_input(fetch_config, args.input_file, editor.deprecated, append=append)
572691 update()
573− plugin = fetch_plugin_from_pluginline(plugin_line)
692+ plugin, _ = prefetch_plugin(pdesc, )
574693 if autocommit:
575694 commit(
576695 nixpkgs_repo,
maintainers/scripts/rebuild-amount.sh+86−79
@@ -4,123 +4,130 @@ set -e
44# --print: avoid dependency on environment
55optPrint=
66if [ "$1" == "--print" ]; then
7− optPrint=true
8− shift
7+ optPrint=true
8+ shift
99fi
1010
1111if [ "$#" != 1 ] && [ "$#" != 2 ]; then
12− cat <<-EOF
13− Usage: $0 [--print] commit-spec [commit-spec]
14− You need to be in a git-controlled nixpkgs tree.
15− The current state of the tree will be used if the second commit is missing.
16− EOF
17− exit 1
12+ cat <<EOF
13+ Usage: $0 [--print] from-commit-spec [to-commit-spec]
14+ You need to be in a git-controlled nixpkgs tree.
15+ The current state of the tree will be used if the second commit is missing.
16+
17+ Examples:
18+ effect of latest commit:
19+ $ $0 HEAD^
20+ $ $0 --print HEAD^
21+ effect of the whole patch series for 'staging' branch:
22+ $ $0 origin/staging staging
23+EOF
24+ exit 1
1825fi
1926
2027# A slightly hacky way to get the config.
2128parallel="$(echo 'config.rebuild-amount.parallel or false' | nix-repl . 2>/dev/null \
22− | grep -v '^\(nix-repl.*\)\?$' | tail -n 1 || true)"
29+ | grep -v '^\(nix-repl.*\)\?$' | tail -n 1 || true)"
2330
24−echo "Estimating rebuild amount by counting changed Hydra jobs."
31+echo "Estimating rebuild amount by counting changed Hydra jobs (parallel=${parallel:-unset})."
2532
2633toRemove=()
2734
2835cleanup() {
29− rm -rf "${toRemove[@]}"
36+ rm -rf "${toRemove[@]}"
3037}
3138trap cleanup EXIT SIGINT SIGQUIT ERR
3239
3340MKTEMP='mktemp --tmpdir nix-rebuild-amount-XXXXXXXX'
3441
3542nixexpr() {
36− cat <<-EONIX
37− let
38− lib = import $1/lib;
39− hydraJobs = import $1/pkgs/top-level/release.nix
40− # Compromise: accuracy vs. resources needed for evaluation.
41− { supportedSystems = cfg.systems or [ "x86_64-linux" "x86_64-darwin" ]; };
42− cfg = (import $1 {}).config.rebuild-amount or {};
43−
44− recurseIntoAttrs = attrs: attrs // { recurseForDerivations = true; };
45−
46− # hydraJobs leaves recurseForDerivations as empty attrmaps;
47− # that would break nix-env and we also need to recurse everywhere.
48− tweak = lib.mapAttrs
49− (name: val:
50− if name == "recurseForDerivations" then true
51− else if lib.isAttrs val && val.type or null != "derivation"
52− then recurseIntoAttrs (tweak val)
53− else val
54− );
55−
56− # Some of these contain explicit references to platform(s) we want to avoid;
57− # some even (transitively) depend on ~/.nixpkgs/config.nix (!)
58− blacklist = [
59− "tarball" "metrics" "manual"
60− "darwin-tested" "unstable" "stdenvBootstrapTools"
61− "moduleSystem" "lib-tests" # these just confuse the output
62− ];
63−
64− in
65− tweak (builtins.removeAttrs hydraJobs blacklist)
66− EONIX
43+ cat <<EONIX
44+ let
45+ lib = import $1/lib;
46+ hydraJobs = import $1/pkgs/top-level/release.nix
47+ # Compromise: accuracy vs. resources needed for evaluation.
48+ { supportedSystems = cfg.systems or [ "x86_64-linux" "x86_64-darwin" ]; };
49+ cfg = (import $1 {}).config.rebuild-amount or {};
50+
51+ recurseIntoAttrs = attrs: attrs // { recurseForDerivations = true; };
52+
53+ # hydraJobs leaves recurseForDerivations as empty attrmaps;
54+ # that would break nix-env and we also need to recurse everywhere.
55+ tweak = lib.mapAttrs
56+ (name: val:
57+ if name == "recurseForDerivations" then true
58+ else if lib.isAttrs val && val.type or null != "derivation"
59+ then recurseIntoAttrs (tweak val)
60+ else val
61+ );
62+
63+ # Some of these contain explicit references to platform(s) we want to avoid;
64+ # some even (transitively) depend on ~/.nixpkgs/config.nix (!)
65+ blacklist = [
66+ "tarball" "metrics" "manual"
67+ "darwin-tested" "unstable" "stdenvBootstrapTools"
68+ "moduleSystem" "lib-tests" # these just confuse the output
69+ ];
70+
71+ in
72+ tweak (builtins.removeAttrs hydraJobs blacklist)
73+EONIX
6774}
6875
6976# Output packages in tree $2 that weren't in $1.
7077# Changing the output hash or name is taken as a change.
7178# Extra nix-env parameters can be in $3
7279newPkgs() {
73− # We use files instead of pipes, as running multiple nix-env processes
74− # could eat too much memory for a standard 4GiB machine.
75− local -a list
76− for i in 1 2; do
77− local l="$($MKTEMP)"
78− list[$i]="$l"
79− toRemove+=("$l")
80−
81− local expr="$($MKTEMP)"
82− toRemove+=("$expr")
83− nixexpr "${!i}" > "$expr"
84−
85− nix-env -f "$expr" -qaP --no-name --out-path --show-trace $3 \
86− | sort > "${list[$i]}" &
87−
88− if [ "$parallel" != "true" ]; then
89− wait
90− fi
91− done
92−
93− wait
94− comm -13 "${list[@]}"
80+ # We use files instead of pipes, as running multiple nix-env processes
81+ # could eat too much memory for a standard 4GiB machine.
82+ local -a list
83+ for i in 1 2; do
84+ local l="$($MKTEMP)"
85+ list[$i]="$l"
86+ toRemove+=("$l")
87+
88+ local expr="$($MKTEMP)"
89+ toRemove+=("$expr")
90+ nixexpr "${!i}" > "$expr"
91+
92+ nix-env -f "$expr" -qaP --no-name --out-path --show-trace $3 \
93+ | sort > "${list[$i]}" &
94+
95+ if [ "$parallel" != "true" ]; then
96+ wait
97+ fi
98+ done
99+
100+ wait
101+ comm -13 "${list[@]}"
95102}
96103
97104# Prepare nixpkgs trees.
98105declare -a tree
99106for i in 1 2; do
100− if [ -n "${!i}" ]; then # use the given commit
101− dir="$($MKTEMP -d)"
102− tree[$i]="$dir"
103− toRemove+=("$dir")
104−
105− git clone --shared --no-checkout --quiet . "${tree[$i]}"
106− (cd "${tree[$i]}" && git checkout --quiet "${!i}")
107− else #use the current tree
108− tree[$i]="$(pwd)"
109− fi
107+ if [ -n "${!i}" ]; then # use the given commit
108+ dir="$($MKTEMP -d)"
109+ tree[$i]="$dir"
110+ toRemove+=("$dir")
111+
112+ git clone --shared --no-checkout --quiet . "${tree[$i]}"
113+ (cd "${tree[$i]}" && git checkout --quiet "${!i}")
114+ else #use the current tree
115+ tree[$i]="$(pwd)"
116+ fi
110117done
111118
112119newlist="$($MKTEMP)"
113120toRemove+=("$newlist")
114121# Notes:
115−# - the evaluation is done on x86_64-linux, like on Hydra.
116−# - using $newlist file so that newPkgs() isn't in a sub-shell (because of toRemove)
122+# - the evaluation is done on x86_64-linux, like on Hydra.
123+# - using $newlist file so that newPkgs() isn't in a sub-shell (because of toRemove)
117124newPkgs "${tree[1]}" "${tree[2]}" '--argstr system "x86_64-linux"' > "$newlist"
118125
119126# Hacky: keep only the last word of each attribute path and sort.
120127sed -n 's/\([^. ]*\.\)*\([^. ]*\) .*$/\2/p' < "$newlist" \
121− | sort | uniq -c
128+ | sort | uniq -c
122129
123130if [ -n "$optPrint" ]; then
124− echo
125− cat "$newlist"
131+ echo
132+ cat "$newlist"
126133fi
maintainers/scripts/remove-old-aliases.pynew file+211
@@ -0,0 +1,211 @@
1+#!/usr/bin/env nix-shell
2+#!nix-shell -i python3 -p "python3.withPackages(ps: with ps; [ ])" nix
3+"""
4+A program to remove old aliases or convert old aliases to throws
5+Example usage:
6+./maintainers/scripts/remove-old-aliases.py --year 2018 --file ./pkgs/top-level/aliases.nix
7+
8+Check this file with mypy after every change!
9+$ mypy --strict maintainers/scripts/remove-old-aliases.py
10+"""
11+import argparse
12+import shutil
13+import subprocess
14+from datetime import date as datetimedate
15+from datetime import datetime
16+from pathlib import Path
17+
18+
19+def process_args() -> argparse.Namespace:
20+ """process args"""
21+ arg_parser = argparse.ArgumentParser()
22+ arg_parser.add_argument(
23+ "--year", required=True, type=int, help="operate on aliases older than $year"
24+ )
25+ arg_parser.add_argument(
26+ "--month",
27+ type=int,
28+ default=1,
29+ help="operate on aliases older than $year-$month",
30+ )
31+ arg_parser.add_argument(
32+ "--only-throws",
33+ action="store_true",
34+ help="only operate on throws. e.g remove throws older than $date",
35+ )
36+ arg_parser.add_argument("--file", required=True, type=Path, help="alias file")
37+ arg_parser.add_argument(
38+ "--dry-run", action="store_true", help="don't modify files, only print results"
39+ )
40+ return arg_parser.parse_args()
41+
42+
43+def get_date_lists(
44+ txt: list[str], cutoffdate: datetimedate, only_throws: bool
45+) -> tuple[list[str], list[str], list[str]]:
46+ """get a list of lines in which the date is older than $cutoffdate"""
47+ date_older_list: list[str] = []
48+ date_older_throw_list: list[str] = []
49+ date_sep_line_list: list[str] = []
50+
51+ for lineno, line in enumerate(txt, start=1):
52+ line = line.rstrip()
53+ my_date = None
54+ for string in line.split():
55+ string = string.strip(":")
56+ try:
57+ # strip ':' incase there is a string like 2019-11-01:
58+ my_date = datetime.strptime(string, "%Y-%m-%d").date()
59+ except ValueError:
60+ try:
61+ my_date = datetime.strptime(string, "%Y-%m").date()
62+ except ValueError:
63+ continue
64+
65+ if (
66+ my_date is None
67+ or my_date > cutoffdate
68+ or "preserve, reason:" in line.lower()
69+ ):
70+ continue
71+
72+ if "=" not in line:
73+ date_sep_line_list.append(f"{lineno} {line}")
74+ # 'if' lines could be complicated
75+ elif "if " in line and "if =" not in line:
76+ print(f"RESOLVE MANUALLY {line}")
77+ elif "throw" in line:
78+ date_older_throw_list.append(line)
79+ elif not only_throws:
80+ date_older_list.append(line)
81+
82+ return (
83+ date_older_list,
84+ date_sep_line_list,
85+ date_older_throw_list,
86+ )
87+
88+
89+def convert_to_throw(date_older_list: list[str]) -> list[tuple[str, str]]:
90+ """convert a list of lines to throws"""
91+ converted_list = []
92+ for line in date_older_list.copy():
93+ indent: str = " " * (len(line) - len(line.lstrip()))
94+ before_equal = ""
95+ after_equal = ""
96+ try:
97+ before_equal, after_equal = (x.strip() for x in line.split("=", maxsplit=2))
98+ except ValueError as err:
99+ print(err, line, "\n")
100+ date_older_list.remove(line)
101+ continue
102+
103+ alias = before_equal.strip()
104+ after_equal_list = [x.strip(";:") for x in after_equal.split()]
105+
106+ converted = (
107+ f"{indent}{alias} = throw \"'{alias}' has been renamed to/replaced by"
108+ f" '{after_equal_list.pop(0)}'\";"
109+ f' # Converted to throw {datetime.today().strftime("%Y-%m-%d")}'
110+ )
111+ converted_list.append((line, converted))
112+
113+ return converted_list
114+
115+
116+def generate_text_to_write(
117+ txt: list[str],
118+ date_older_list: list[str],
119+ converted_to_throw: list[tuple[str, str]],
120+ date_older_throw_list: list[str],
121+) -> list[str]:
122+ """generate a list of text to be written to the aliasfile"""
123+ text_to_write: list[str] = []
124+ for line in txt:
125+ text_to_append: str = ""
126+ if converted_to_throw:
127+ for tupl in converted_to_throw:
128+ if line == tupl[0]:
129+ text_to_append = f"{tupl[1]}\n"
130+ if line not in date_older_list and line not in date_older_throw_list:
131+ text_to_append = f"{line}\n"
132+ if text_to_append:
133+ text_to_write.append(text_to_append)
134+
135+ return text_to_write
136+
137+
138+def write_file(
139+ aliasfile: Path,
140+ text_to_write: list[str],
141+) -> None:
142+ """write file"""
143+ temp_aliasfile = Path(f"{aliasfile}.raliases")
144+ with open(temp_aliasfile, "w", encoding="utf-8") as far:
145+ for line in text_to_write:
146+ far.write(line)
147+ print("\nChecking the syntax of the new aliasfile")
148+ try:
149+ subprocess.run(
150+ ["nix-instantiate", "--eval", temp_aliasfile],
151+ check=True,
152+ stdout=subprocess.DEVNULL,
153+ )
154+ except subprocess.CalledProcessError:
155+ print(
156+ "\nSyntax check failed,",
157+ "there may have been a line which only has\n"
158+ 'aliasname = "reason why";\n'
159+ "when it should have been\n"
160+ 'aliasname = throw "reason why";',
161+ )
162+ temp_aliasfile.unlink()
163+ return
164+ shutil.move(f"{aliasfile}.raliases", aliasfile)
165+ print(f"{aliasfile} modified! please verify with 'git diff'.")
166+
167+
168+def main() -> None:
169+ """main"""
170+ args = process_args()
171+
172+ only_throws = args.only_throws
173+ aliasfile = Path(args.file).absolute()
174+ cutoffdate = (datetime.strptime(f"{args.year}-{args.month}-01", "%Y-%m-%d")).date()
175+
176+ txt: list[str] = (aliasfile.read_text(encoding="utf-8")).splitlines()
177+
178+ date_older_list: list[str] = []
179+ date_sep_line_list: list[str] = []
180+ date_older_throw_list: list[str] = []
181+
182+ date_older_list, date_sep_line_list, date_older_throw_list = get_date_lists(
183+ txt, cutoffdate, only_throws
184+ )
185+
186+ converted_to_throw: list[tuple[str, str]] = []
187+ if date_older_list:
188+ converted_to_throw = convert_to_throw(date_older_list)
189+ print(" Will be converted to throws. ".center(100, "-"))
190+ for l_n in date_older_list:
191+ print(l_n)
192+
193+ if date_older_throw_list:
194+ print(" Will be removed. ".center(100, "-"))
195+ for l_n in date_older_throw_list:
196+ print(l_n)
197+
198+ if date_sep_line_list:
199+ print(" On separate line, resolve manually. ".center(100, "-"))
200+ for l_n in date_sep_line_list:
201+ print(l_n)
202+
203+ if not args.dry_run:
204+ text_to_write = generate_text_to_write(
205+ txt, date_older_list, converted_to_throw, date_older_throw_list
206+ )
207+ write_file(aliasfile, text_to_write)
208+
209+
210+if __name__ == "__main__":
211+ main()
maintainers/scripts/update-luarocks-packages+9−13
@@ -25,16 +25,15 @@ from pathlib import Path
2525log = logging.getLogger()
2626log.addHandler(logging.StreamHandler())
2727
28−ROOT = Path(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))).parent.parent
29−from pluginupdate import Editor, update_plugins, PluginDesc, CleanEnvironment, LOG_LEVELS, Cache
28+ROOT = Path(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))).parent.parent # type: ignore
29+from pluginupdate import Editor, update_plugins, FetchConfig, CleanEnvironment
3030
3131PKG_LIST="maintainers/scripts/luarocks-packages.csv"
3232TMP_FILE="$(mktemp)"
3333GENERATED_NIXFILE="pkgs/development/lua-modules/generated-packages.nix"
3434LUAROCKS_CONFIG="$NIXPKGS_PATH/maintainers/scripts/luarocks-config.lua"
3535
36−HEADER = """
37−/* {GENERATED_NIXFILE} is an auto-generated file -- DO NOT EDIT!
36+HEADER = """/* {GENERATED_NIXFILE} is an auto-generated file -- DO NOT EDIT!
3837Regenerate it with:
3938nixpkgs$ ./maintainers/scripts/update-luarocks-packages
4039
@@ -99,9 +98,8 @@ class LuaEditor(Editor):
9998 header2 = textwrap.dedent(
10099 # header2 = inspect.cleandoc(
101100 """
102− { self, stdenv, lib, fetchurl, fetchgit, ... } @ args:
103− self: super:
104− with self;
101+ { self, stdenv, lib, fetchurl, fetchgit, callPackage, ... } @ args:
102+ final: prev:
105103 {
106104 """)
107105 f.write(header2)
@@ -120,7 +118,7 @@ class LuaEditor(Editor):
120118 def attr_path(self):
121119 return "luaPackages"
122120
123− def get_update(self, input_file: str, outfile: str, proc: int):
121+ def get_update(self, input_file: str, outfile: str, config: FetchConfig):
124122 _prefetch = generate_pkg_nix
125123
126124 def update() -> dict:
@@ -128,14 +126,14 @@ class LuaEditor(Editor):
128126 sorted_plugin_specs = sorted(plugin_specs, key=lambda v: v.name.lower())
129127
130128 try:
131− pool = Pool(processes=proc)
129+ pool = Pool(processes=config.proc)
132130 results = pool.map(_prefetch, sorted_plugin_specs)
133131 finally:
134132 pass
135133
136134 self.generate_nix(results, outfile)
137135
138− redirects = []
136+ redirects = {}
139137 return redirects
140138
141139 return update
@@ -183,11 +181,9 @@ def generate_pkg_nix(plug: LuaPlugin):
183181
184182 cmd.append(plug.version)
185183
186− #
187184 if plug.server != "src" and plug.server:
188185 cmd.append(f"--only-server={plug.server}")
189186
190−
191187 if plug.luaversion:
192188 with CleanEnvironment():
193189 local_pkgs = str(ROOT.resolve())
@@ -199,6 +195,7 @@ def generate_pkg_nix(plug: LuaPlugin):
199195
200196 log.debug("running %s", ' '.join(cmd))
201197 output = subprocess.check_output(cmd, text=True)
198+ output = "callPackage(" + output.strip() + ") {};\n\n"
202199 return (plug, output)
203200
204201def main():
@@ -210,7 +207,6 @@ def main():
210207
211208 parser = editor.create_parser()
212209 args = parser.parse_args()
213− log.setLevel(LOG_LEVELS[args.debug])
214210
215211 update_plugins(editor, args)
216212
maintainers/scripts/update.nix+3−3
@@ -103,7 +103,7 @@ let
103103 pathContent = lib.attrByPath prefix null pkgs;
104104 in
105105 if pathContent == null then
106− builtins.throw "Attribute path `${path}` does not exists."
106+ builtins.throw "Attribute path `${path}` does not exist."
107107 else
108108 packagesWithPath prefix (path: pkg: builtins.hasAttr "updateScript" pkg)
109109 pathContent;
@@ -115,7 +115,7 @@ let
115115 package = lib.attrByPath (lib.splitString "." path) null pkgs;
116116 in
117117 if package == null then
118− builtins.throw "Package with an attribute name `${path}` does not exists."
118+ builtins.throw "Package with an attribute name `${path}` does not exist."
119119 else if ! builtins.hasAttr "updateScript" package then
120120 builtins.throw "Package with an attribute name `${path}` does not have a `passthru.updateScript` attribute defined."
121121 else
@@ -147,7 +147,7 @@ let
147147
148148 to run update script for specific package, or
149149
150− % nix-shell maintainers/scripts/update.nix --arg predicate '(path: pkg: builtins.isList pkg.updateScript && builtins.length pkg.updateScript >= 1 && (let script = builtins.head pkg.updateScript; in builtins.isAttrs script && script.name == "gnome-update-script"))'
150+ % nix-shell maintainers/scripts/update.nix --arg predicate '(path: pkg: pkg.updateScript.name or null == "gnome-update-script")'
151151
152152 to run update script for all packages matching given predicate, or
153153
maintainers/scripts/update.py+5−1
@@ -88,6 +88,10 @@ async def commit_changes(name: str, merge_lock: asyncio.Lock, worktree: str, bra
8888 async with merge_lock:
8989 await check_subprocess('git', 'add', *change['files'], cwd=worktree)
9090 commit_message = '{attrPath}: {oldVersion} → {newVersion}'.format(**change)
91+ if 'commitMessage' in change:
92+ commit_message = change['commitMessage']
93+ elif 'commitBody' in change:
94+ commit_message = commit_message + '\n\n' + change['commitBody']
9195 await check_subprocess('git', 'commit', '--quiet', '-m', commit_message, cwd=worktree)
9296 await check_subprocess('git', 'cherry-pick', branch)
9397
@@ -114,7 +118,7 @@ async def check_changes(package: Dict, worktree: str, update_info: str):
114118 changes[0]['newVersion'] = json.loads((await obtain_new_version_process.stdout.read()).decode('utf-8'))
115119
116120 if 'files' not in changes[0]:
117− changed_files_process = await check_subprocess('git', 'diff', '--name-only', stdout=asyncio.subprocess.PIPE, cwd=worktree)
121+ changed_files_process = await check_subprocess('git', 'diff', '--name-only', 'HEAD', stdout=asyncio.subprocess.PIPE, cwd=worktree)
118122 changed_files = (await changed_files_process.stdout.read()).splitlines()
119123 changes[0]['files'] = changed_files
120124
maintainers/scripts/vanity.sh+19−19
@@ -30,7 +30,7 @@ fetchGithubName () {
3030 curl https://github.com/NixOS/nixpkgs/commit/"$commitid" 2>/dev/null |
3131 grep committed -B10 | grep 'href="/' |
3232 sed -re 's@.* href="/@@; s@".*@@' |
33− grep -v "/commit/"
33+ grep -v "/commit/"
3434 )";
3535 echo "$userid"
3636}
@@ -38,7 +38,7 @@ fetchGithubName () {
3838[ -n "$NIXPKGS_GITHUB_NAME_CACHE" ] && {
3939 echo "$emails" | while read email; do
4040 line="$(grep "$email " "$NIXPKGS_GITHUB_NAME_CACHE")"
41− [ -z "$line" ] && {
41+ [ -z "$line" ] && {
4242 echo "$email $(fetchGithubName "$email")" >> \
4343 "$NIXPKGS_GITHUB_NAME_CACHE"
4444 }
@@ -47,11 +47,11 @@ fetchGithubName () {
4747
4848# For RDF
4949normalize_name () {
50− sed -e 's/%/%25/g; s/ /%20/g; s/'\''/%27/g; s/"/%22/g; s/`/%60/g; s/\^/%5e/g; '
50+ sed -e 's/%/%25/g; s/ /%20/g; s/'\''/%27/g; s/"/%22/g; s/`/%60/g; s/\^/%5e/g; '
5151}
5252
5353denormalize_name () {
54− sed -e 's/%20/ /g; s/%27/'\''/g; s/%22/"/g; s/%60/`/g; s/%5e/^/g; s/%25/%/g;';
54+ sed -e 's/%20/ /g; s/%27/'\''/g; s/%22/"/g; s/%60/`/g; s/%5e/^/g; s/%25/%/g;';
5555}
5656
5757n3="$(mktemp --suffix .n3)"
@@ -75,22 +75,22 @@ echo "$maintainers" | cut -f 2 | sed -e 's@.*@<my://name/&> <my://is-name> <my:/
7575# Get transitive closure
7676sparql="$(nix-build '<nixpkgs>' -Q -A apache-jena --no-out-link)/bin/sparql"
7777name_list="$(
78− "$sparql" --results=TSV --data="$n3" "
79− select ?x ?y ?g where {
80− ?x <my://can-be>+ ?y.
81− ?x <my://is-name> ?g.
78+ "$sparql" --results=TSV --data="$n3" "
79+ select ?x ?y ?g where {
80+ ?x <my://can-be>+ ?y.
81+ ?x <my://is-name> ?g.
8282 }
83− " | tail -n +2 |
84− sed -re 's@<my://name/@@g; s@<my://@@g; s@>@@g;' |
85− sort -k 2,3 -t ' '
83+ " | tail -n +2 |
84+ sed -re 's@<my://name/@@g; s@<my://@@g; s@>@@g;' |
85+ sort -k 2,3 -t ' '
8686)"
8787github_name_list="$(
88− "$sparql" --results=TSV --data="$n3" "
89− select ?x ?y where {
90− ?x (<my://can-be>+ / <my://at-github>) ?y.
88+ "$sparql" --results=TSV --data="$n3" "
89+ select ?x ?y where {
90+ ?x (<my://can-be>+ / <my://at-github>) ?y.
9191 }
92− " | tail -n +2 |
93− sed -re 's@<my://(name|github)/@@g; s@<my://@@g; s@>@@g;'
92+ " | tail -n +2 |
93+ sed -re 's@<my://(name|github)/@@g; s@<my://@@g; s@>@@g;'
9494)"
9595
9696# Take first spelling option for every person
@@ -104,10 +104,10 @@ if [ -n "$NIXPKGS_GITHUB_NAME_CACHE" ]; then
104104 github_adder_script="$(mktemp)"
105105 echo "$github_name_list" |
106106 grep -E "$(echo "$name_list_canonical" | cut -f 2 |
107− tr '\n' '|' )" |
108− sort | uniq |
107+ tr '\n' '|' )" |
108+ sort | uniq |
109109 sed -re 's/(.*)\t(.*)/s| \1$| \1\t\2|g;/' |
110− denormalize_name > "$github_adder_script"
110+ denormalize_name > "$github_adder_script"
111111else
112112 github_adder_script='/dev/null'
113113fi
maintainers/team-list.nix+437−4
@@ -3,12 +3,19 @@
33 # Required
44 members = [ maintainer1 maintainer2 ];
55 scope = "Maintain foo packages.";
6+ shortName = "foo";
7+ # Optional
8+ enableFeatureFreezePing = true;
9+ githubTeams = [ "my-subsystem" ];
610 };
711
812 where
913
1014 - `members` is the list of maintainers belonging to the group,
1115 - `scope` describes the scope of the group.
16+ - `shortName` short human-readable name
17+ - `enableFeatureFreezePing` will ping this team during the Feature Freeze announcements on releases
18+ - `githubTeams` will ping specified GitHub teams as well
1219
1320 More fields may be added in the future.
1421
@@ -27,6 +34,23 @@ with lib.maintainers; {
2734 m1cr0man
2835 ];
2936 scope = "Maintain ACME-related packages and modules.";
37+ shortName = "ACME";
38+ };
39+
40+ bazel = {
41+ members = [
42+ mboes
43+ marsam
44+ uri-canva
45+ cbley
46+ olebedev
47+ groodt
48+ aherrmann
49+ ylecornec
50+ ];
51+ scope = "Bazel build tool & related tools https://bazel.build/";
52+ shortName = "Bazel";
53+ enableFeatureFreezePing = true;
3054 };
3155
3256 beam = {
@@ -36,9 +60,35 @@ with lib.maintainers; {
3660 DianaOlympos
3761 gleber
3862 happysalada
63+ minijackson
3964 yurrriq
4065 ];
66+ githubTeams = [
67+ "beam"
68+ ];
4169 scope = "Maintain BEAM-related packages and modules.";
70+ shortName = "BEAM";
71+ enableFeatureFreezePing = true;
72+ };
73+
74+ blockchains = {
75+ members = [
76+ mmahut
77+ RaghavSood
78+ ];
79+ scope = "Maintain Blockchain packages and modules.";
80+ shortName = "Blockchains";
81+ enableFeatureFreezePing = true;
82+ };
83+
84+ c = {
85+ members = [
86+ matthewbauer
87+ mic92
88+ ];
89+ scope = "Maintain C libraries and tooling.";
90+ shortName = "C";
91+ enableFeatureFreezePing = true;
4292 };
4393
4494 cinnamon = {
@@ -46,14 +96,49 @@ with lib.maintainers; {
4696 mkg20001
4797 ];
4898 scope = "Maintain Cinnamon desktop environment and applications made by the LinuxMint team.";
99+ shortName = "Cinnamon";
100+ enableFeatureFreezePing = true;
49101 };
50102
51103 chia = {
52104 members = [
53− atemu
54105 lourkeur
55106 ];
56107 scope = "Maintain the Chia blockchain and its dependencies";
108+ shortName = "Chia Blockchain";
109+ };
110+
111+ coq = {
112+ members = [
113+ cohencyril
114+ Zimmi48
115+ # gares has no entry in the maintainers list
116+ siraben
117+ vbgl
118+ ];
119+ scope = "Maintain the Coq theorem prover and related packages.";
120+ shortName = "Coq";
121+ enableFeatureFreezePing = true;
122+ };
123+
124+ darwin = {
125+ members = [
126+ toonn
127+ ];
128+ githubTeams = [
129+ "darwin-maintainers"
130+ ];
131+ scope = "Maintain Darwin compatibility of packages and Darwin-only packages.";
132+ shortName = "Darwin";
133+ enableFeatureFreezePing = true;
134+ };
135+
136+ cosmopolitan = {
137+ members = [
138+ lourkeur
139+ tomberek
140+ ];
141+ scope = "Maintain the Cosmopolitan LibC and related programs.";
57142 };
58143
59144 deshaw = {
@@ -62,6 +147,7 @@ with lib.maintainers; {
62147 limeytexan
63148 ];
64149 scope = "Group registration for D. E. Shaw employees who collectively maintain packages.";
150+ shortName = "Shaw employees";
65151 };
66152
67153 determinatesystems = {
@@ -71,11 +157,75 @@ with lib.maintainers; {
71157 grahamc
72158 ];
73159 scope = "Group registration for packages maintained by Determinate Systems.";
160+ shortName = "Determinate Systems employees";
161+ };
162+
163+ dhall = {
164+ members = [
165+ Gabriel439
166+ ehmry
167+ ];
168+ scope = "Maintain Dhall and related packages.";
169+ shortName = "Dhall";
170+ enableFeatureFreezePing = true;
171+ };
172+
173+ docker = {
174+ members = [
175+ roberth
176+ utdemir
177+ ];
178+ scope = "Maintain Docker and related tools.";
179+ shortName = "DockerTools";
180+ enableFeatureFreezePing = true;
181+ };
182+
183+ docs = {
184+ members = [
185+ ryantm
186+ ];
187+ scope = "Maintain nixpkgs/NixOS documentation and tools for building it.";
188+ shortName = "Docs";
189+ enableFeatureFreezePing = true;
190+ };
191+
192+ emacs = {
193+ members = [
194+ adisbladis
195+ ];
196+ scope = "Maintain the Emacs editor and packages.";
197+ shortName = "Emacs";
198+ enableFeatureFreezePing = true;
199+ };
200+
201+ enlightenment = {
202+ members = [
203+ romildo
204+ ];
205+ githubTeams = [
206+ "enlightenment"
207+ ];
208+ scope = "Maintain Enlightenment desktop environment and related packages.";
209+ shortName = "Enlightenment";
210+ enableFeatureFreezePing = true;
211+ };
212+
213+ # Dummy group for the "everyone else" section
214+ feature-freeze-everyone-else = {
215+ members = [ ];
216+ githubTeams = [
217+ "nixpkgs-committers"
218+ "release-engineers"
219+ ];
220+ scope = "Dummy team for the #everyone else' section during feture freezes, not to be used as package maintainers!";
221+ shortName = "Everyone else";
222+ enableFeatureFreezePing = true;
74223 };
75224
76225 freedesktop = {
77226 members = [ jtojnar ];
78227 scope = "Maintain Freedesktop.org packages for graphical desktop.";
228+ shortName = "freedesktop.org packaging";
79229 };
80230
81231 gcc = {
@@ -85,6 +235,7 @@ with lib.maintainers; {
85235 ericson2314
86236 ];
87237 scope = "Maintain GCC (GNU Compiler Collection) compilers";
238+ shortName = "GCC";
88239 };
89240
90241 golang = {
@@ -93,23 +244,30 @@ with lib.maintainers; {
93244 cstrahan
94245 Frostman
95246 kalbasit
96− mdlayher
97247 mic92
98248 orivej
99249 rvolosatovs
100250 zowoq
101251 ];
102252 scope = "Maintain Golang compilers.";
253+ shortName = "Go";
254+ enableFeatureFreezePing = true;
103255 };
104256
105257 gnome = {
106258 members = [
259+ bobby285271
107260 hedning
108261 jtojnar
109262 dasj19
110263 maxeaubrey
111264 ];
265+ githubTeams = [
266+ "gnome"
267+ ];
112268 scope = "Maintain GNOME desktop environment and platform.";
269+ shortName = "GNOME";
270+ enableFeatureFreezePing = true;
113271 };
114272
115273 haskell = {
@@ -119,7 +277,12 @@ with lib.maintainers; {
119277 maralorn
120278 sternenseemann
121279 ];
280+ githubTeams = [
281+ "haskell"
282+ ];
122283 scope = "Maintain Haskell packages and infrastructure.";
284+ shortName = "Haskell";
285+ enableFeatureFreezePing = true;
123286 };
124287
125288 home-assistant = {
@@ -130,6 +293,7 @@ with lib.maintainers; {
130293 mic92
131294 ];
132295 scope = "Maintain the Home Assistant ecosystem";
296+ shortName = "Home Assistant";
133297 };
134298
135299 iog = {
@@ -137,19 +301,34 @@ with lib.maintainers; {
137301 cleverca22
138302 disassembler
139303 jonringer
140− maveru
304+ manveru
141305 nrdxp
142306 ];
143307 scope = "Input-Output Global employees, which maintain critical software";
308+ shortName = "Input-Output Global employees";
144309 };
145310
146311 jitsi = {
147312 members = [
313+ cleeyv
148314 petabyteboy
149315 ryantm
150316 yuka
151317 ];
152318 scope = "Maintain Jitsi.";
319+ shortName = "Jitsi";
320+ };
321+
322+ kubernetes = {
323+ members = [
324+ johanot
325+ offline
326+ saschagrunert
327+ srhb
328+ zowoq
329+ ];
330+ scope = "Maintain the Kubernetes package and module";
331+ shortName = "Kubernetes";
153332 };
154333
155334 kodi = {
@@ -162,6 +341,61 @@ with lib.maintainers; {
162341 sephalon
163342 ];
164343 scope = "Maintain Kodi and related packages.";
344+ shortName = "Kodi";
345+ };
346+
347+ linux-kernel = {
348+ members = [
349+ TredwellGit
350+ ma27
351+ nequissimus
352+ qyliss
353+ ];
354+ scope = "Maintain the Linux kernel.";
355+ shortName = "Linux Kernel";
356+ };
357+
358+ lumina = {
359+ members = [
360+ romildo
361+ ];
362+ githubTeams = [
363+ "lumina"
364+ ];
365+ scope = "Maintain lumina desktop environment and related packages.";
366+ shortName = "Lumina";
367+ enableFeatureFreezePing = true;
368+ };
369+
370+ lxqt = {
371+ members = [
372+ romildo
373+ ];
374+ githubTeams = [
375+ "lxqt"
376+ ];
377+ scope = "Maintain LXQt desktop environment and related packages.";
378+ shortName = "LXQt";
379+ enableFeatureFreezePing = true;
380+ };
381+
382+ marketing = {
383+ members = [
384+ garbas
385+ tomberek
386+ ];
387+ scope = "Marketing of Nix/NixOS/nixpkgs.";
388+ shortName = "Marketing";
389+ enableFeatureFreezePing = true;
390+ };
391+
392+ mate = {
393+ members = [
394+ j03
395+ romildo
396+ ];
397+ scope = "Maintain Mate desktop environment and related packages.";
398+ shortName = "MATE";
165399 };
166400
167401 matrix = {
@@ -171,11 +405,53 @@ with lib.maintainers; {
171405 mguentner
172406 ekleog
173407 ralith
174− mjlbach
175408 dandellion
176409 sumnerevans
177410 ];
178411 scope = "Maintain the ecosystem around Matrix, a decentralized messenger.";
412+ shortName = "Matrix";
413+ };
414+
415+ mobile = {
416+ members = [
417+ samueldr
418+ ];
419+ scope = "Maintain Mobile NixOS.";
420+ shortName = "Mobile";
421+ enableFeatureFreezePing = true;
422+ };
423+
424+ nix = {
425+ members = [
426+ Profpatsch
427+ eelco
428+ grahamc
429+ pierron
430+ ];
431+ scope = "Maintain the Nix package manager.";
432+ shortName = "Nix/nix-cli ecosystem";
433+ enableFeatureFreezePing = true;
434+ };
435+
436+ nixos-modules = {
437+ members = [
438+ ericson2314
439+ infinisil
440+ qyliss
441+ roberth
442+ ];
443+ scope = "Maintain nixpkgs module system internals.";
444+ shortName = "NixOS Modules / internals";
445+ enableFeatureFreezePing = true;
446+ };
447+
448+ openstack = {
449+ members = [
450+ emilytrau
451+ SuperSandro2000
452+ ];
453+ scope = "Maintain the ecosystem around OpenStack";
454+ shortName = "OpenStack";
179455 };
180456
181457 pantheon = {
@@ -183,18 +459,38 @@ with lib.maintainers; {
183459 davidak
184460 bobby285271
185461 ];
462+ githubTeams = [
463+ "pantheon"
464+ ];
186465 scope = "Maintain Pantheon desktop environment and platform.";
466+ shortName = "Pantheon";
467+ enableFeatureFreezePing = true;
468+ };
469+
470+ perl = {
471+ members = [
472+ sgo
473+ ];
474+ scope = "Maintain the Perl interpreter and Perl packages.";
475+ shortName = "Perl";
476+ enableFeatureFreezePing = true;
187477 };
188478
189479 php = {
190480 members = [
191481 aanderse
482+ drupol
192483 etu
193484 globin
194485 ma27
195486 talyz
196487 ];
488+ githubTeams = [
489+ "php"
490+ ];
197491 scope = "Maintain PHP related packages and extensions.";
492+ shortName = "PHP";
493+ enableFeatureFreezePing = true;
198494 };
199495
200496 podman = {
@@ -204,7 +500,95 @@ with lib.maintainers; {
204500 vdemeester
205501 zowoq
206502 ];
503+ githubTeams = [
504+ "podman"
505+ ];
207506 scope = "Maintain Podman and CRI-O related packages and modules.";
507+ shortName = "Podman";
508+ enableFeatureFreezePing = true;
509+ };
510+
511+ postgres = {
512+ members = [
513+ thoughtpolice
514+ ];
515+ scope = "Maintain the PostgreSQL package and plugins along with the NixOS module.";
516+ shortName = "PostgreSQL";
517+ enableFeatureFreezePing = true;
518+ };
519+
520+ python = {
521+ members = [
522+ fridh
523+ hexa
524+ jonringer
525+ ];
526+ scope = "Maintain the Python interpreter and related packages.";
527+ shortName = "Python";
528+ enableFeatureFreezePing = true;
529+ };
530+
531+ qt-kde = {
532+ members = [
533+ ttuegel
534+ ];
535+ githubTeams = [
536+ "qt-kde"
537+ ];
538+ scope = "Maintain the KDE desktop environment and Qt.";
539+ shortName = "Qt / KDE";
540+ enableFeatureFreezePing = true;
541+ };
542+
543+ r = {
544+ members = [
545+ bcdarwin
546+ jbedo
547+ ];
548+ scope = "Maintain the R programming language and related packages.";
549+ shortName = "R";
550+ enableFeatureFreezePing = true;
551+ };
552+
553+ redcodelabs = {
554+ members = [
555+ unrooted
556+ wr0belj
557+ wintrmvte
558+ ];
559+ scope = "Maintain Red Code Labs related packages and modules.";
560+ shortName = "Red Code Labs";
561+ };
562+
563+ release = {
564+ members = [ ];
565+ githubTeams = [
566+ "nixos-release-managers"
567+ ];
568+ scope = "Manage the current nixpkgs/NixOS release.";
569+ shortName = "Release";
570+ enableFeatureFreezePing = true;
571+ };
572+
573+ ruby = {
574+ members = [
575+ marsam
576+ ];
577+ scope = "Maintain the Ruby interpreter and related packages.";
578+ shortName = "Ruby";
579+ enableFeatureFreezePing = true;
580+ };
581+
582+ rust = {
583+ members = [
584+ andir
585+ lnl7
586+ mic92
587+ zowoq
588+ ];
589+ scope = "Maintain the Rust compiler toolchain and nixpkgs integration.";
590+ shortName = "Rust";
591+ enableFeatureFreezePing = true;
208592 };
209593
210594 sage = {
@@ -215,6 +599,15 @@ with lib.maintainers; {
215599 collares
216600 ];
217601 scope = "Maintain SageMath and the dependencies that are likely to break it.";
602+ shortName = "SageMath";
603+ };
604+
605+ sphinx = {
606+ members = [
607+ SuperSandro2000
608+ ];
609+ scope = "Maintain Sphinx related packages.";
610+ shortName = "Sphinx";
218611 };
219612
220613 serokell = {
@@ -224,6 +617,26 @@ with lib.maintainers; {
224617 mkaito
225618 ];
226619 scope = "Group registration for Serokell employees who collectively maintain packages.";
620+ shortName = "Serokell employees";
621+ };
622+
623+ systemd = {
624+ members = [ ];
625+ githubTeams = [
626+ "systemd"
627+ ];
628+ scope = "Maintain systemd for NixOS.";
629+ shortName = "systemd";
630+ enableFeatureFreezePing = true;
631+ };
632+
633+ tests = {
634+ members = [
635+ tfc
636+ ];
637+ scope = "Maintain the NixOS VM test runner.";
638+ shortName = "NixOS tests";
639+ enableFeatureFreezePing = true;
227640 };
228641
229642 tts = {
@@ -232,5 +645,25 @@ with lib.maintainers; {
232645 mic92
233646 ];
234647 scope = "coqui-ai TTS (formerly Mozilla TTS) and leaf packages";
648+ shortName = "coqui-ai TTS";
649+ };
650+
651+ vim = {
652+ members = [
653+ jonringer
654+ softinio
655+ teto
656+ ];
657+ scope = "Maintain the vim and neovim text editors and related packages.";
658+ shortName = "Vim/Neovim";
659+ enableFeatureFreezePing = true;
660+ };
661+
662+ xfce = {
663+ members = [
664+ romildo
665+ ];
666+ scope = "Maintain Xfce desktop environment and related packages.";
667+ shortName = "Xfce";
235668 };
236669}
nixos/default.nix+1−24
@@ -9,27 +9,6 @@ let
99 modules = [ configuration ];
1010 };
1111
12− # This is for `nixos-rebuild build-vm'.
13− vmConfig = (import ./lib/eval-config.nix {
14− inherit system;
15− modules = [ configuration ./modules/virtualisation/qemu-vm.nix ];
16− }).config;
17−
18− # This is for `nixos-rebuild build-vm-with-bootloader'.
19− vmWithBootLoaderConfig = (import ./lib/eval-config.nix {
20− inherit system;
21− modules =
22− [ configuration
23− ./modules/virtualisation/qemu-vm.nix
24− { virtualisation.useBootLoader = true; }
25− ({ config, ... }: {
26− virtualisation.useEFIBoot =
27− config.boot.loader.systemd-boot.enable ||
28− config.boot.loader.efi.canTouchEfiVariables;
29− })
30− ];
31− }).config;
32−
3312in
3413
3514{
@@ -37,7 +16,5 @@ in
3716
3817 system = eval.config.system.build.toplevel;
3918
40− vm = vmConfig.system.build.vm;
41−
42− vmWithBootLoader = vmWithBootLoaderConfig.system.build.vm;
19+ inherit (eval.config.system.build) vm vmWithBootLoader;
4320}
nixos/doc/manual/administration/cleaning-store.chapter.md+2−2
@@ -58,5 +58,5 @@ a while to finish.
5858## NixOS Boot Entries {#sect-nixos-gc-boot-entries}
5959
6060If your `/boot` partition runs out of space, after clearing old profiles
61−you must rebuild your system with `nixos-rebuild` to update the `/boot`
62−partition and clear space.
61+you must rebuild your system with `nixos-rebuild boot` or `nixos-rebuild
62+switch` to update the `/boot` partition and clear space.
nixos/doc/manual/administration/containers.chapter.mdnew file+28
@@ -0,0 +1,28 @@
1+# Container Management {#ch-containers}
2+
3+NixOS allows you to easily run other NixOS instances as *containers*.
4+Containers are a light-weight approach to virtualisation that runs
5+software in the container at the same speed as in the host system. NixOS
6+containers share the Nix store of the host, making container creation
7+very efficient.
8+
9+::: {.warning}
10+Currently, NixOS containers are not perfectly isolated from the host
11+system. This means that a user with root access to the container can do
12+things that affect the host. So you should not give container root
13+access to untrusted users.
14+:::
15+
16+NixOS containers can be created in two ways: imperatively, using the
17+command `nixos-container`, and declaratively, by specifying them in your
18+`configuration.nix`. The declarative approach implies that containers
19+get upgraded along with your host system when you run `nixos-rebuild`,
20+which is often not what you want. By contrast, in the imperative
21+approach, containers are configured and updated independently from the
22+host system.
23+
24+```{=docbook}
25+<xi:include href="imperative-containers.section.xml" />
26+<xi:include href="declarative-containers.section.xml" />
27+<xi:include href="container-networking.section.xml" />
28+```
nixos/doc/manual/administration/containers.xmldeleted−34
@@ -1,34 +0,0 @@
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"
4− version="5.0"
5− xml:id="ch-containers">
6− <title>Container Management</title>
7− <para>
8− NixOS allows you to easily run other NixOS instances as
9− <emphasis>containers</emphasis>. Containers are a light-weight approach to
10− virtualisation that runs software in the container at the same speed as in
11− the host system. NixOS containers share the Nix store of the host, making
12− container creation very efficient.
13− </para>
14− <warning>
15− <para>
16− Currently, NixOS containers are not perfectly isolated from the host system.
17− This means that a user with root access to the container can do things that
18− affect the host. So you should not give container root access to untrusted
19− users.
20− </para>
21− </warning>
22− <para>
23− NixOS containers can be created in two ways: imperatively, using the command
24− <command>nixos-container</command>, and declaratively, by specifying them in
25− your <filename>configuration.nix</filename>. The declarative approach implies
26− that containers get upgraded along with your host system when you run
27− <command>nixos-rebuild</command>, which is often not what you want. By
28− contrast, in the imperative approach, containers are configured and updated
29− independently from the host system.
30− </para>
31− <xi:include href="../from_md/administration/imperative-containers.section.xml" />
32− <xi:include href="../from_md/administration/declarative-containers.section.xml" />
33− <xi:include href="../from_md/administration/container-networking.section.xml" />
34−</chapter>
nixos/doc/manual/administration/declarative-containers.section.md+2−2
@@ -9,7 +9,7 @@ containers.database =
99 { config =
1010 { config, pkgs, ... }:
1111 { services.postgresql.enable = true;
12− services.postgresql.package = pkgs.postgresql_9_6;
12+ services.postgresql.package = pkgs.postgresql_10;
1313 };
1414 };
1515```
@@ -40,7 +40,7 @@ section for details on container networking.)
4040To disable the container, just remove it from `configuration.nix` and
4141run `nixos-rebuild
4242 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
4444the imperative method: `nixos-container destroy foo`.
4545
4646Declarative 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:
1010# nixos-container create foo
1111```
1212
13−This creates the container's root directory in `/var/lib/containers/foo`
14−and a small configuration file in `/etc/containers/foo.conf`. It also
13+This creates the container's root directory in `/var/lib/nixos-containers/foo`
14+and a small configuration file in `/etc/nixos-containers/foo.conf`. It also
1515builds the container's initial system configuration and stores it in
1616`/nix/var/nix/profiles/per-container/foo/system`. You can modify the
1717initial configuration of the container on the command line. For
nixos/doc/manual/administration/running.xml+2−2
@@ -16,6 +16,6 @@
1616 <xi:include href="../from_md/administration/control-groups.chapter.xml" />
1717 <xi:include href="../from_md/administration/logging.chapter.xml" />
1818 <xi:include href="../from_md/administration/cleaning-store.chapter.xml" />
19− <xi:include href="containers.xml" />
20− <xi:include href="troubleshooting.xml" />
19+ <xi:include href="../from_md/administration/containers.chapter.xml" />
20+ <xi:include href="../from_md/administration/troubleshooting.chapter.xml" />
2121</part>
nixos/doc/manual/administration/troubleshooting.chapter.mdnew file+12
@@ -0,0 +1,12 @@
1+# Troubleshooting {#ch-troubleshooting}
2+
3+This chapter describes solutions to common problems you might encounter
4+when you manage your NixOS system.
5+
6+```{=docbook}
7+<xi:include href="boot-problems.section.xml" />
8+<xi:include href="maintenance-mode.section.xml" />
9+<xi:include href="rollback.section.xml" />
10+<xi:include href="store-corruption.section.xml" />
11+<xi:include href="network-problems.section.xml" />
12+```
nixos/doc/manual/administration/troubleshooting.xmldeleted−16
@@ -1,16 +0,0 @@
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"
4− version="5.0"
5− xml:id="ch-troubleshooting">
6− <title>Troubleshooting</title>
7− <para>
8− This chapter describes solutions to common problems you might encounter when
9− you manage your NixOS system.
10− </para>
11− <xi:include href="../from_md/administration/boot-problems.section.xml" />
12− <xi:include href="../from_md/administration/maintenance-mode.section.xml" />
13− <xi:include href="../from_md/administration/rollback.section.xml" />
14− <xi:include href="../from_md/administration/store-corruption.section.xml" />
15− <xi:include href="../from_md/administration/network-problems.section.xml" />
16−</chapter>
nixos/doc/manual/configuration/config-syntax.chapter.mdnew file+19
@@ -0,0 +1,19 @@
1+# Configuration Syntax {#sec-configuration-syntax}
2+
3+The NixOS configuration file `/etc/nixos/configuration.nix` is actually
4+a *Nix expression*, which is the Nix package manager's purely functional
5+language for describing how to build packages and configurations. This
6+means you have all the expressive power of that language at your
7+disposal, including the ability to abstract over common patterns, which
8+is very useful when managing complex systems. The syntax and semantics
9+of the Nix language are fully described in the [Nix
10+manual](https://nixos.org/nix/manual/#chap-writing-nix-expressions), but
11+here we give a short overview of the most important constructs useful in
12+NixOS configuration files.
13+
14+```{=docbook}
15+<xi:include href="config-file.section.xml" />
16+<xi:include href="abstractions.section.xml" />
17+<xi:include href="modularity.section.xml" />
18+<xi:include href="summary.section.xml" />
19+```
nixos/doc/manual/configuration/config-syntax.xmldeleted−25
@@ -1,25 +0,0 @@
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"
4− version="5.0"
5− xml:id="sec-configuration-syntax">
6− <title>Configuration Syntax</title>
7− <para>
8− The NixOS configuration file
9− <filename>/etc/nixos/configuration.nix</filename> is actually a <emphasis>Nix
10− expression</emphasis>, which is the Nix package manager’s purely functional
11− language for describing how to build packages and configurations. This means
12− you have all the expressive power of that language at your disposal,
13− including the ability to abstract over common patterns, which is very useful
14− when managing complex systems. The syntax and semantics of the Nix language
15− are fully described in the
16− <link
17−xlink:href="https://nixos.org/nix/manual/#chap-writing-nix-expressions">Nix
18− manual</link>, but here we give a short overview of the most important
19− constructs useful in NixOS configuration files.
20− </para>
21− <xi:include href="../from_md/configuration/config-file.section.xml" />
22− <xi:include href="../from_md/configuration/abstractions.section.xml" />
23− <xi:include href="../from_md/configuration/modularity.section.xml" />
24− <xi:include href="../from_md/configuration/summary.section.xml" />
25−</chapter>
nixos/doc/manual/configuration/configuration.xml+5−5
@@ -13,19 +13,19 @@
1313 effect after you run <command>nixos-rebuild</command>.
1414 </para>
1515 </partintro>
16− <xi:include href="config-syntax.xml" />
17− <xi:include href="package-mgmt.xml" />
16+ <xi:include href="../from_md/configuration/config-syntax.chapter.xml" />
17+ <xi:include href="../from_md/configuration/package-mgmt.chapter.xml" />
1818 <xi:include href="../from_md/configuration/user-mgmt.chapter.xml" />
19− <xi:include href="file-systems.xml" />
19+ <xi:include href="../from_md/configuration/file-systems.chapter.xml" />
2020 <xi:include href="../from_md/configuration/x-windows.chapter.xml" />
2121 <xi:include href="../from_md/configuration/wayland.chapter.xml" />
2222 <xi:include href="../from_md/configuration/gpu-accel.chapter.xml" />
2323 <xi:include href="../from_md/configuration/xfce.chapter.xml" />
24− <xi:include href="networking.xml" />
24+ <xi:include href="../from_md/configuration/networking.chapter.xml" />
2525 <xi:include href="../from_md/configuration/linux-kernel.chapter.xml" />
2626 <xi:include href="../from_md/configuration/subversion.chapter.xml" />
2727 <xi:include href="../generated/modules.xml" xpointer="xpointer(//section[@id='modules']/*)" />
28− <xi:include href="profiles.xml" />
28+ <xi:include href="../from_md/configuration/profiles.chapter.xml" />
2929 <xi:include href="../from_md/configuration/kubernetes.chapter.xml" />
3030<!-- Apache; libvirtd virtualisation -->
3131</part>
nixos/doc/manual/configuration/declarative-packages.section.mdnew file+46
@@ -0,0 +1,46 @@
1+# Declarative Package Management {#sec-declarative-package-mgmt}
2+
3+With declarative package management, you specify which packages you want
4+on your system by setting the option
5+[](#opt-environment.systemPackages). For instance, adding the
6+following line to `configuration.nix` enables the Mozilla Thunderbird
7+email application:
8+
9+```nix
10+environment.systemPackages = [ pkgs.thunderbird ];
11+```
12+
13+The effect of this specification is that the Thunderbird package from
14+Nixpkgs will be built or downloaded as part of the system when you run
15+`nixos-rebuild switch`.
16+
17+::: {.note}
18+Some packages require additional global configuration such as D-Bus or
19+systemd service registration so adding them to
20+[](#opt-environment.systemPackages) might not be sufficient. You are
21+advised to check the [list of options](#ch-options) whether a NixOS
22+module for the package does not exist.
23+:::
24+
25+You can get a list of the available packages as follows:
26+
27+```ShellSession
28+$ nix-env -qaP '*' --description
29+nixos.firefox firefox-23.0 Mozilla Firefox - the browser, reloaded
30+...
31+```
32+
33+The first column in the output is the *attribute name*, such as
34+`nixos.thunderbird`.
35+
36+Note: the `nixos` prefix tells us that we want to get the package from
37+the `nixos` channel and works only in CLI tools. In declarative
38+configuration use `pkgs` prefix (variable).
39+
40+To "uninstall" a package, simply remove it from
41+[](#opt-environment.systemPackages) and run `nixos-rebuild switch`.
42+
43+```{=docbook}
44+<xi:include href="customizing-packages.section.xml" />
45+<xi:include href="adding-custom-packages.section.xml" />
46+```
nixos/doc/manual/configuration/declarative-packages.xmldeleted−54
@@ -1,54 +0,0 @@
1−<section xmlns="http://docbook.org/ns/docbook"
2− xmlns:xlink="http://www.w3.org/1999/xlink"
3− xmlns:xi="http://www.w3.org/2001/XInclude"
4− version="5.0"
5− xml:id="sec-declarative-package-mgmt">
6− <title>Declarative Package Management</title>
7−
8− <para>
9− With declarative package management, you specify which packages you want on
10− your system by setting the option
11− <xref linkend="opt-environment.systemPackages"/>. For instance, adding the
12− following line to <filename>configuration.nix</filename> enables the Mozilla
13− Thunderbird email application:
14−<programlisting>
15−<xref linkend="opt-environment.systemPackages"/> = [ pkgs.thunderbird ];
16−</programlisting>
17− The effect of this specification is that the Thunderbird package from Nixpkgs
18− will be built or downloaded as part of the system when you run
19− <command>nixos-rebuild switch</command>.
20− </para>
21−
22− <note>
23− <para>
24− Some packages require additional global configuration such as D-Bus or systemd service registration so adding them to <xref linkend="opt-environment.systemPackages"/> might not be sufficient. You are advised to check the <link xlink:href="#ch-options">list of options</link> whether a NixOS module for the package does not exist.
25− </para>
26− </note>
27−
28− <para>
29− You can get a list of the available packages as follows:
30−<screen>
31−<prompt>$ </prompt>nix-env -qaP '*' --description
32−nixos.firefox firefox-23.0 Mozilla Firefox - the browser, reloaded
33−<replaceable>...</replaceable>
34−</screen>
35− The first column in the output is the <emphasis>attribute name</emphasis>,
36− such as <literal>nixos.thunderbird</literal>.
37− </para>
38− <para>
39− Note: the <literal>nixos</literal> prefix tells us that we want to get the
40− package from the <literal>nixos</literal> channel and works only in CLI tools.
41−
42− In declarative configuration use <literal>pkgs</literal> prefix (variable).
43− </para>
44−
45− <para>
46− To “uninstall” a package, simply remove it from
47− <xref linkend="opt-environment.systemPackages"/> and run
48− <command>nixos-rebuild switch</command>.
49− </para>
50−
51− <xi:include href="../from_md/configuration/customizing-packages.section.xml" />
52−
53− <xi:include href="../from_md/configuration/adding-custom-packages.section.xml" />
54−</section>
nixos/doc/manual/configuration/file-systems.chapter.mdnew file+42
@@ -0,0 +1,42 @@
1+# File Systems {#ch-file-systems}
2+
3+You can define file systems using the `fileSystems` configuration
4+option. For instance, the following definition causes NixOS to mount the
5+Ext4 file system on device `/dev/disk/by-label/data` onto the mount
6+point `/data`:
7+
8+```nix
9+fileSystems."/data" =
10+ { device = "/dev/disk/by-label/data";
11+ fsType = "ext4";
12+ };
13+```
14+
15+This will create an entry in `/etc/fstab`, which will generate a
16+corresponding [systemd.mount](https://www.freedesktop.org/software/systemd/man/systemd.mount.html)
17+unit via [systemd-fstab-generator](https://www.freedesktop.org/software/systemd/man/systemd-fstab-generator.html).
18+The filesystem will be mounted automatically unless `"noauto"` is
19+present in [options](#opt-fileSystems._name_.options). `"noauto"`
20+filesystems can be mounted explicitly using `systemctl` e.g.
21+`systemctl start data.mount`. Mount points are created automatically if they don't
22+already exist. For `device`, it's best to use the topology-independent
23+device aliases in `/dev/disk/by-label` and `/dev/disk/by-uuid`, as these
24+don't change if the topology changes (e.g. if a disk is moved to another
25+IDE controller).
26+
27+You can usually omit the file system type (`fsType`), since `mount` can
28+usually detect the type and load the necessary kernel module
29+automatically. However, if the file system is needed at early boot (in
30+the initial ramdisk) and is not `ext2`, `ext3` or `ext4`, then it's best
31+to specify `fsType` to ensure that the kernel module is available.
32+
33+::: {.note}
34+System startup will fail if any of the filesystems fails to mount,
35+dropping you to the emergency shell. You can make a mount asynchronous
36+and non-critical by adding `options = [ "nofail" ];`.
37+:::
38+
39+```{=docbook}
40+<xi:include href="luks-file-systems.section.xml" />
41+<xi:include href="sshfs-file-systems.section.xml" />
42+```
nixos/doc/manual/configuration/file-systems.xmldeleted−58
@@ -1,58 +0,0 @@
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"
4− version="5.0"
5− xml:id="ch-file-systems">
6− <title>File Systems</title>
7− <para>
8− You can define file systems using the <option>fileSystems</option>
9− configuration option. For instance, the following definition causes NixOS to
10− mount the Ext4 file system on device
11− <filename>/dev/disk/by-label/data</filename> onto the mount point
12− <filename>/data</filename>:
13−<programlisting>
14−<xref linkend="opt-fileSystems"/>."/data" =
15− { device = "/dev/disk/by-label/data";
16− fsType = "ext4";
17− };
18−</programlisting>
19− This will create an entry in <filename>/etc/fstab</filename>, which will
20− generate a corresponding
21− <link xlink:href="https://www.freedesktop.org/software/systemd/man/systemd.mount.html">systemd.mount</link>
22− unit via
23− <link xlink:href="https://www.freedesktop.org/software/systemd/man/systemd-fstab-generator.html">systemd-fstab-generator</link>.
24− The filesystem will be mounted automatically unless
25− <literal>"noauto"</literal> is present in <link
26− linkend="opt-fileSystems._name_.options">options</link>.
27− <literal>"noauto"</literal> filesystems can be mounted explicitly using
28− <command>systemctl</command> e.g. <command>systemctl start
29− data.mount</command>.
30− Mount points are created automatically if they don’t already exist. For
31− <option><link linkend="opt-fileSystems._name_.device">device</link></option>,
32− it’s best to use the topology-independent device aliases in
33− <filename>/dev/disk/by-label</filename> and
34− <filename>/dev/disk/by-uuid</filename>, as these don’t change if the
35− topology changes (e.g. if a disk is moved to another IDE controller).
36− </para>
37− <para>
38− You can usually omit the file system type
39− (<option><link linkend="opt-fileSystems._name_.fsType">fsType</link></option>),
40− since <command>mount</command> can usually detect the type and load the
41− necessary kernel module automatically. However, if the file system is needed
42− at early boot (in the initial ramdisk) and is not <literal>ext2</literal>,
43− <literal>ext3</literal> or <literal>ext4</literal>, then it’s best to
44− specify <option>fsType</option> to ensure that the kernel module is
45− available.
46− </para>
47− <note>
48− <para>
49− System startup will fail if any of the filesystems fails to mount, dropping
50− you to the emergency shell. You can make a mount asynchronous and
51− non-critical by adding
52− <literal><link linkend="opt-fileSystems._name_.options">options</link> = [
53− "nofail" ];</literal>.
54− </para>
55− </note>
56− <xi:include href="../from_md/configuration/luks-file-systems.section.xml" />
57− <xi:include href="../from_md/configuration/sshfs-file-systems.section.xml" />
58−</chapter>
nixos/doc/manual/configuration/linux-kernel.chapter.md+21−16
@@ -5,13 +5,18 @@ option `boot.kernelPackages`. For instance, this selects the Linux 3.10
55kernel:
66
77```nix
8−boot.kernelPackages = pkgs.linuxPackages_3_10;
8+boot.kernelPackages = pkgs.linuxKernel.packages.linux_3_10;
99```
1010
1111Note that this not only replaces the kernel, but also packages that are
1212specific to the kernel version, such as the NVIDIA video drivers. This
1313ensures that driver packages are consistent with the kernel.
1414
15+While `pkgs.linuxKernel.packages` contains all available kernel packages,
16+you may want to use one of the unversioned `pkgs.linuxPackages_*` aliases
17+such as `pkgs.linuxPackages_latest`, that are kept up to date with new
18+versions.
19+
1520The default Linux kernel configuration should be fine for most users.
1621You can see the configuration of your current kernel with the following
1722command:
@@ -25,14 +30,13 @@ If you want to change the kernel configuration, you can use the
2530instance, to enable support for the kernel debugger KGDB:
2631
2732```nix
28−nixpkgs.config.packageOverrides = pkgs:
29− { linux_3_4 = pkgs.linux_3_4.override {
30− extraConfig =
31− ''
32− KGDB y
33− '';
34− };
33+nixpkgs.config.packageOverrides = pkgs: pkgs.lib.recursiveUpdate pkgs {
34+ linuxKernel.kernels.linux_5_10 = pkgs.linuxKernel.kernels.linux_5_10.override {
35+ extraConfig = ''
36+ KGDB y
37+ '';
3538 };
39+};
3640```
3741
3842`extraConfig` takes a list of Linux kernel configuration options, one
@@ -72,16 +76,17 @@ available parameters, run `sysctl -a`.
7276
7377The first step before compiling the kernel is to generate an appropriate
7478`.config` configuration. Either you pass your own config via the
75−`configfile` setting of `linuxManualConfig`:
79+`configfile` setting of `linuxKernel.manualConfig`:
7680
7781```nix
78−custom-kernel = super.linuxManualConfig {
79− inherit (super) stdenv hostPlatform;
80− inherit (linux_4_9) src;
81− version = "${linux_4_9.version}-custom";
82−
83− configfile = /home/me/my_kernel_config;
84− allowImportFromDerivation = true;
82+custom-kernel = let base_kernel = linuxKernel.kernels.linux_4_9;
83+ in super.linuxKernel.manualConfig {
84+ inherit (super) stdenv hostPlatform;
85+ inherit (base_kernel) src;
86+ version = "${base_kernel.version}-custom";
87+
88+ configfile = /home/me/my_kernel_config;
89+ allowImportFromDerivation = true;
8590};
8691```
8792
nixos/doc/manual/configuration/networking.chapter.mdnew file+16
@@ -0,0 +1,16 @@
1+# Networking {#sec-networking}
2+
3+This section describes how to configure networking components
4+on your NixOS machine.
5+
6+```{=docbook}
7+<xi:include href="network-manager.section.xml" />
8+<xi:include href="ssh.section.xml" />
9+<xi:include href="ipv4-config.section.xml" />
10+<xi:include href="ipv6-config.section.xml" />
11+<xi:include href="firewall.section.xml" />
12+<xi:include href="wireless.section.xml" />
13+<xi:include href="ad-hoc-network-config.section.xml" />
14+<xi:include href="renaming-interfaces.section.xml" />
15+```
16+<!-- TODO: OpenVPN, NAT -->
nixos/doc/manual/configuration/networking.xmldeleted−20
@@ -1,20 +0,0 @@
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"
4− version="5.0"
5− xml:id="sec-networking">
6− <title>Networking</title>
7− <para>
8− This section describes how to configure networking components on your NixOS
9− machine.
10− </para>
11− <xi:include href="../from_md/configuration/network-manager.section.xml" />
12− <xi:include href="../from_md/configuration/ssh.section.xml" />
13− <xi:include href="../from_md/configuration/ipv4-config.section.xml" />
14− <xi:include href="../from_md/configuration/ipv6-config.section.xml" />
15− <xi:include href="../from_md/configuration/firewall.section.xml" />
16− <xi:include href="../from_md/configuration/wireless.section.xml" />
17− <xi:include href="../from_md/configuration/ad-hoc-network-config.section.xml" />
18− <xi:include href="../from_md/configuration/renaming-interfaces.section.xml" />
19−<!-- TODO: OpenVPN, NAT -->
20−</chapter>
nixos/doc/manual/configuration/package-mgmt.chapter.mdnew file+18
@@ -0,0 +1,18 @@
1+# Package Management {#sec-package-management}
2+
3+This section describes how to add additional packages to your system.
4+NixOS has two distinct styles of package management:
5+
6+- *Declarative*, where you declare what packages you want in your
7+ `configuration.nix`. Every time you run `nixos-rebuild`, NixOS will
8+ ensure that you get a consistent set of binaries corresponding to
9+ your specification.
10+
11+- *Ad hoc*, where you install, upgrade and uninstall packages via the
12+ `nix-env` command. This style allows mixing packages from different
13+ Nixpkgs versions. It's the only choice for non-root users.
14+
15+```{=docbook}
16+<xi:include href="declarative-packages.section.xml" />
17+<xi:include href="ad-hoc-packages.section.xml" />
18+```
nixos/doc/manual/configuration/package-mgmt.xmldeleted−31
@@ -1,31 +0,0 @@
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"
4− version="5.0"
5− xml:id="sec-package-management">
6− <title>Package Management</title>
7− <para>
8− This section describes how to add additional packages to your system. NixOS
9− has two distinct styles of package management:
10− <itemizedlist>
11− <listitem>
12− <para>
13− <emphasis>Declarative</emphasis>, where you declare what packages you want
14− in your <filename>configuration.nix</filename>. Every time you run
15− <command>nixos-rebuild</command>, NixOS will ensure that you get a
16− consistent set of binaries corresponding to your specification.
17− </para>
18− </listitem>
19− <listitem>
20− <para>
21− <emphasis>Ad hoc</emphasis>, where you install, upgrade and uninstall
22− packages via the <command>nix-env</command> command. This style allows
23− mixing packages from different Nixpkgs versions. It’s the only choice
24− for non-root users.
25− </para>
26− </listitem>
27− </itemizedlist>
28− </para>
29− <xi:include href="declarative-packages.xml" />
30− <xi:include href="../from_md/configuration/ad-hoc-packages.section.xml" />
31−</chapter>
nixos/doc/manual/configuration/profiles.chapter.mdnew file+34
@@ -0,0 +1,34 @@
1+# Profiles {#ch-profiles}
2+
3+In some cases, it may be desirable to take advantage of commonly-used,
4+predefined configurations provided by nixpkgs, but different from those
5+that come as default. This is a role fulfilled by NixOS\'s Profiles,
6+which come as files living in `<nixpkgs/nixos/modules/profiles>`. That
7+is to say, expected usage is to add them to the imports list of your
8+`/etc/configuration.nix` as such:
9+
10+```nix
11+imports = [
12+ <nixpkgs/nixos/modules/profiles/profile-name.nix>
13+];
14+```
15+
16+Even if some of these profiles seem only useful in the context of
17+install media, many are actually intended to be used in real installs.
18+
19+What follows is a brief explanation on the purpose and use-case for each
20+profile. Detailing each option configured by each one is out of scope.
21+
22+```{=docbook}
23+<xi:include href="profiles/all-hardware.section.xml" />
24+<xi:include href="profiles/base.section.xml" />
25+<xi:include href="profiles/clone-config.section.xml" />
26+<xi:include href="profiles/demo.section.xml" />
27+<xi:include href="profiles/docker-container.section.xml" />
28+<xi:include href="profiles/graphical.section.xml" />
29+<xi:include href="profiles/hardened.section.xml" />
30+<xi:include href="profiles/headless.section.xml" />
31+<xi:include href="profiles/installation-device.section.xml" />
32+<xi:include href="profiles/minimal.section.xml" />
33+<xi:include href="profiles/qemu-guest.section.xml" />
34+```
nixos/doc/manual/configuration/profiles.xmldeleted−39
@@ -1,39 +0,0 @@
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"
4− version="5.0"
5− xml:id="ch-profiles">
6− <title>Profiles</title>
7− <para>
8− In some cases, it may be desirable to take advantage of commonly-used,
9− predefined configurations provided by nixpkgs, but different from those that
10− come as default. This is a role fulfilled by NixOS's Profiles, which come as
11− files living in <filename>&lt;nixpkgs/nixos/modules/profiles&gt;</filename>.
12− That is to say, expected usage is to add them to the imports list of your
13− <filename>/etc/configuration.nix</filename> as such:
14− </para>
15−<programlisting>
16− imports = [
17− &lt;nixpkgs/nixos/modules/profiles/profile-name.nix&gt;
18− ];
19−</programlisting>
20− <para>
21− Even if some of these profiles seem only useful in the context of install
22− media, many are actually intended to be used in real installs.
23− </para>
24− <para>
25− What follows is a brief explanation on the purpose and use-case for each
26− profile. Detailing each option configured by each one is out of scope.
27− </para>
28− <xi:include href="../from_md/configuration/profiles/all-hardware.section.xml" />
29− <xi:include href="../from_md/configuration/profiles/base.section.xml" />
30− <xi:include href="../from_md/configuration/profiles/clone-config.section.xml" />
31− <xi:include href="../from_md/configuration/profiles/demo.section.xml" />
32− <xi:include href="../from_md/configuration/profiles/docker-container.section.xml" />
33− <xi:include href="../from_md/configuration/profiles/graphical.section.xml" />
34− <xi:include href="../from_md/configuration/profiles/hardened.section.xml" />
35− <xi:include href="../from_md/configuration/profiles/headless.section.xml" />
36− <xi:include href="../from_md/configuration/profiles/installation-device.section.xml" />
37− <xi:include href="../from_md/configuration/profiles/minimal.section.xml" />
38− <xi:include href="../from_md/configuration/profiles/qemu-guest.section.xml" />
39−</chapter>
nixos/doc/manual/configuration/renaming-interfaces.section.md+1−1
@@ -26,7 +26,7 @@ we assign the name `wan` to the interface with MAC address
2626
2727```nix
2828systemd.network.links."10-wan" = {
29− matchConfig.MACAddress = "52:54:00:12:01:01";
29+ matchConfig.PermanentMACAddress = "52:54:00:12:01:01";
3030 linkConfig.Name = "wan";
3131};
3232```
nixos/doc/manual/default.nix+18−5
@@ -1,21 +1,34 @@
1−{ pkgs, options, config, version, revision, extraSources ? [] }:
1+{ pkgs
2+, options
3+, config
4+, version
5+, revision
6+, extraSources ? []
7+, baseOptionsJSON ? null
8+, warningsAreErrors ? true
9+, prefix ? ../../..
10+}:
211
312with pkgs;
413
514let
615 lib = pkgs.lib;
716
17+ docbook_xsl_ns = pkgs.docbook-xsl-ns.override {
18+ withManOptDedupPatch = true;
19+ };
20+
821 # We need to strip references to /nix/store/* from options,
922 # including any `extraSources` if some modules came from elsewhere,
1023 # or else the build will fail.
1124 #
1225 # E.g. if some `options` came from modules in ${pkgs.customModules}/nix,
1326 # you'd need to include `extraSources = [ pkgs.customModules ]`
14− prefixesToStrip = map (p: "${toString p}/") ([ ../../.. ] ++ extraSources);
27+ prefixesToStrip = map (p: "${toString p}/") ([ prefix ] ++ extraSources);
1528 stripAnyPrefixes = lib.flip (lib.foldr lib.removePrefix) prefixesToStrip;
1629
1730 optionsDoc = buildPackages.nixosOptionsDoc {
18− inherit options revision;
31+ inherit options revision baseOptionsJSON warningsAreErrors;
1932 transformOptions = opt: opt // {
2033 # Clean up declaration sites to not refer to the NixOS source tree.
2134 declarations = map stripAnyPrefixes opt.declarations;
@@ -161,7 +174,7 @@ let
161174in rec {
162175 inherit generatedSources;
163176
164− inherit (optionsDoc) optionsJSON optionsXML optionsDocBook;
177+ inherit (optionsDoc) optionsJSON optionsNix optionsDocBook;
165178
166179 # Generate the NixOS manual.
167180 manualHTML = runCommand "nixos-manual-html"
@@ -205,7 +218,7 @@ in rec {
205218
206219 manualEpub = runCommand "nixos-manual-epub"
207220 { inherit sources;
208− buildInputs = [ libxml2.bin libxslt.bin zip ];
221+ nativeBuildInputs = [ buildPackages.libxml2.bin buildPackages.libxslt.bin buildPackages.zip ];
209222 }
210223 ''
211224 # Generate the epub manual.
nixos/doc/manual/development/activation-script.section.mdnew file+72
@@ -0,0 +1,72 @@
1+# Activation script {#sec-activation-script}
2+
3+The activation script is a bash script called to activate the new
4+configuration which resides in a NixOS system in `$out/activate`. Since its
5+contents depend on your system configuration, the contents may differ.
6+This chapter explains how the script works in general and some common NixOS
7+snippets. Please be aware that the script is executed on every boot and system
8+switch, so tasks that can be performed in other places should be performed
9+there (for example letting a directory of a service be created by systemd using
10+mechanisms like `StateDirectory`, `CacheDirectory`, ... or if that's not
11+possible using `preStart` of the service).
12+
13+Activation scripts are defined as snippets using
14+[](#opt-system.activationScripts). They can either be a simple multiline string
15+or an attribute set that can depend on other snippets. The builder for the
16+activation script will take these dependencies into account and order the
17+snippets accordingly. As a simple example:
18+
19+```nix
20+system.activationScripts.my-activation-script = {
21+ deps = [ "etc" ];
22+ # supportsDryActivation = true;
23+ text = ''
24+ echo "Hallo i bims"
25+ '';
26+};
27+```
28+
29+This example creates an activation script snippet that is run after the `etc`
30+snippet. The special variable `supportsDryActivation` can be set so the snippet
31+is also run when `nixos-rebuild dry-activate` is run. To differentiate between
32+real and dry activation, the `$NIXOS_ACTION` environment variable can be
33+read which is set to `dry-activate` when a dry activation is done.
34+
35+An activation script can write to special files instructing
36+`switch-to-configuration` to restart/reload units. The script will take these
37+requests into account and will incorperate the unit configuration as described
38+above. This means that the activation script will "fake" a modified unit file
39+and `switch-to-configuration` will act accordingly. By doing so, configuration
40+like [systemd.services.\<name\>.restartIfChanged](#opt-systemd.services) is
41+respected. Since the activation script is run **after** services are already
42+stopped, [systemd.services.\<name\>.stopIfChanged](#opt-systemd.services)
43+cannot be taken into account anymore and the unit is always restarted instead
44+of being stopped and started afterwards.
45+
46+The files that can be written to are `/run/nixos/activation-restart-list` and
47+`/run/nixos/activation-reload-list` with their respective counterparts for
48+dry activation being `/run/nixos/dry-activation-restart-list` and
49+`/run/nixos/dry-activation-reload-list`. Those files can contain
50+newline-separated lists of unit names where duplicates are being ignored. These
51+files are not create automatically and activation scripts must take the
52+possiblility into account that they have to create them first.
53+
54+## NixOS snippets {#sec-activation-script-nixos-snippets}
55+
56+There are some snippets NixOS enables by default because disabling them would
57+most likely break you system. This section lists a few of them and what they
58+do:
59+
60+- `binsh` creates `/bin/sh` which points to the runtime shell
61+- `etc` sets up the contents of `/etc`, this includes systemd units and
62+ excludes `/etc/passwd`, `/etc/group`, and `/etc/shadow` (which are managed by
63+ the `users` snippet)
64+- `hostname` sets the system's hostname in the kernel (not in `/etc`)
65+- `modprobe` sets the path to the `modprobe` binary for module auto-loading
66+- `nix` prepares the nix store and adds a default initial channel
67+- `specialfs` is responsible for mounting filesystems like `/proc` and `sys`
68+- `users` creates and removes users and groups by managing `/etc/passwd`,
69+ `/etc/group` and `/etc/shadow`. This also creates home directories
70+- `usrbinenv` creates `/usr/bin/env`
71+- `var` creates some directories in `/var` that are not service-specific
72+- `wrappers` creates setuid wrappers like `ping` and `sudo`
nixos/doc/manual/development/building-nixos.chapter.mddeleted−46
@@ -1,46 +0,0 @@
1−# Building a NixOS (Live) ISO {#sec-building-image}
2−
3−Default live installer configurations are available inside `nixos/modules/installer/cd-dvd`.
4−For building other system images, [nixos-generators] is a good place to start looking at.
5−
6−You have two options:
7−
8−- Use any of those default configurations as is
9−- Combine them with (any of) your host config(s)
10−
11−System images, such as the live installer ones, know how to enforce configuration settings
12−on wich they immediately depend in order to work correctly.
13−
14−However, if you are confident, you can opt to override those
15−enforced values with `mkForce`.
16−
17−[nixos-generators]: https://github.com/nix-community/nixos-generators
18−
19−## Practical Instructions {#sec-building-image-instructions}
20−
21−```ShellSession
22−$ git clone https://github.com/NixOS/nixpkgs.git
23−$ cd nixpkgs/nixos
24−$ nix-build -A config.system.build.isoImage -I nixos-config=modules/installer/cd-dvd/installation-cd-minimal.nix default.nix
25−```
26−
27−To check the content of an ISO image, mount it like so:
28−
29−```ShellSession
30−# mount -o loop -t iso9660 ./result/iso/cd.iso /mnt/iso
31−```
32−
33−## Technical Notes {#sec-building-image-tech-notes}
34−
35−The config value enforcement is implemented via `mkImageMediaOverride = mkOverride 60;`
36−and therefore primes over simple value assignments, but also yields to `mkForce`.
37−
38−This property allows image designers to implement in semantically correct ways those
39−configuration values upon which the correct functioning of the image depends.
40−
41−For example, the iso base image overrides those file systems which it needs at a minimum
42−for correct functioning, while the installer base image overrides the entire file system
43−layout because there can't be any other guarantees on a live medium than those given
44−by the live medium itself. The latter is especially true befor formatting the target
45−block device(s). On the other hand, the netboot iso only overrides its minimum dependencies
46−since netboot images are always made-to-target.
nixos/doc/manual/development/development.xml+3−3
@@ -10,10 +10,10 @@
1010 </para>
1111 </partintro>
1212 <xi:include href="../from_md/development/sources.chapter.xml" />
13− <xi:include href="writing-modules.xml" />
13+ <xi:include href="../from_md/development/writing-modules.chapter.xml" />
1414 <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" />
1516 <xi:include href="../from_md/development/writing-documentation.chapter.xml" />
16− <xi:include href="../from_md/development/building-nixos.chapter.xml" />
17− <xi:include href="nixos-tests.xml" />
17+ <xi:include href="../from_md/development/nixos-tests.chapter.xml" />
1818 <xi:include href="../from_md/development/testing-installer.chapter.xml" />
1919</part>
nixos/doc/manual/development/meta-attributes.section.md+27−1
@@ -5,7 +5,7 @@ extra information. Module meta attributes are defined in the `meta.nix`
55special module.
66
77`meta` is a top level attribute like `options` and `config`. Available
8−meta-attributes are `maintainers` and `doc`.
8+meta-attributes are `maintainers`, `doc`, and `buildDocsInSandbox`.
99
1010Each of the meta-attributes must be defined at most once per module
1111file.
@@ -24,6 +24,7 @@ file.
2424 meta = {
2525 maintainers = with lib.maintainers; [ ericsagnes ];
2626 doc = ./default.xml;
27+ buildDocsInSandbox = true;
2728 };
2829}
2930```
@@ -38,3 +39,28 @@ file.
3839 ```ShellSession
3940 $ nix-build nixos/release.nix -A manual.x86_64-linux
4041 ```
42+
43+- `buildDocsInSandbox` indicates whether the option documentation for the
44+ module can be built in a derivation sandbox. This option is currently only
45+ honored for modules shipped by nixpkgs. User modules and modules taken from
46+ `NIXOS_EXTRA_MODULE_PATH` are always built outside of the sandbox, as has
47+ been the case in previous releases.
48+
49+ Building NixOS option documentation in a sandbox allows caching of the built
50+ documentation, which greatly decreases the amount of time needed to evaluate
51+ a system configuration that has NixOS documentation enabled. The sandbox also
52+ restricts which attributes may be referenced by documentation attributes
53+ (such as option descriptions) to the `options` and `lib` module arguments and
54+ the `pkgs.formats` attribute of the `pkgs` argument, `config` and the rest of
55+ `pkgs` are disallowed and will cause doc build failures when used. This
56+ restriction is necessary because we cannot reproduce the full nixpkgs
57+ instantiation with configuration and overlays from a system configuration
58+ inside the sandbox. The `options` argument only includes options of modules
59+ that are also built inside the sandbox, referencing an option of a module
60+ that isn't built in the sandbox is also forbidden.
61+
62+ The default is `true` and should usually not be changed; set it to `false`
63+ only if the module requires access to `pkgs` in its documentation (e.g.
64+ because it loads information from a linked package to build an option type)
65+ or if its documentation depends on other modules that also aren't sandboxed
66+ (e.g. by using types defined in the other module).
nixos/doc/manual/development/nixos-tests.chapter.mdnew file+13
@@ -0,0 +1,13 @@
1+# NixOS Tests {#sec-nixos-tests}
2+
3+When you add some feature to NixOS, you should write a test for it.
4+NixOS tests are kept in the directory `nixos/tests`, and are executed
5+(using Nix) by a testing framework that automatically starts one or more
6+virtual machines containing the NixOS system(s) required for the test.
7+
8+```{=docbook}
9+<xi:include href="writing-nixos-tests.section.xml" />
10+<xi:include href="running-nixos-tests.section.xml" />
11+<xi:include href="running-nixos-tests-interactively.section.xml" />
12+<xi:include href="linking-nixos-tests-to-packages.section.xml" />
13+```
nixos/doc/manual/development/nixos-tests.xmldeleted−20
@@ -1,20 +0,0 @@
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"
4− version="5.0"
5− xml:id="sec-nixos-tests">
6− <title>NixOS Tests</title>
7− <para>
8− When you add some feature to NixOS, you should write a test for it. NixOS
9− tests are kept in the directory
10− <filename
11−xlink:href="https://github.com/NixOS/nixpkgs/tree/master/nixos/tests">nixos/tests</filename>,
12− and are executed (using Nix) by a testing framework that automatically starts
13− one or more virtual machines containing the NixOS system(s) required for the
14− test.
15− </para>
16− <xi:include href="../from_md/development/writing-nixos-tests.section.xml" />
17− <xi:include href="../from_md/development/running-nixos-tests.section.xml" />
18− <xi:include href="../from_md/development/running-nixos-tests-interactively.section.xml" />
19− <xi:include href="../from_md/development/linking-nixos-tests-to-packages.section.xml" />
20−</chapter>
nixos/doc/manual/development/option-declarations.section.md+101−16
@@ -27,9 +27,10 @@ The function `mkOption` accepts the following arguments.
2727
2828`type`
2929
30−: The type of the option (see [](#sec-option-types)). It may be
31− omitted, but that's not advisable since it may lead to errors that
32− are hard to diagnose.
30+: The type of the option (see [](#sec-option-types)). This
31+ argument is mandatory for nixpkgs modules. Setting this is highly
32+ recommended for the sake of documentation and type checking. In case it is
33+ not set, a fallback type with unspecified behavior is used.
3334
3435`default`
3536
@@ -38,15 +39,99 @@ The function `mkOption` accepts the following arguments.
3839 of the module will have to define the value of the option, otherwise
3940 an error will be thrown.
4041
42+`defaultText`
43+
44+: A textual representation of the default value to be rendered verbatim in
45+ the manual. Useful if the default value is a complex expression or depends
46+ on other values or packages.
47+ Use `lib.literalExpression` for a Nix expression, `lib.literalDocBook` for
48+ a plain English description in DocBook format.
49+
4150`example`
4251
4352: An example value that will be shown in the NixOS manual.
53+ You can use `lib.literalExpression` and `lib.literalDocBook` in the same way
54+ as in `defaultText`.
4455
4556`description`
4657
4758: A textual description of the option, in DocBook format, that will be
4859 included in the NixOS manual.
4960
61+## Utility functions for common option patterns {#sec-option-declarations-util}
62+
63+### `mkEnableOption` {#sec-option-declarations-util-mkEnableOption}
64+
65+Creates an Option attribute set for a boolean value option i.e an
66+option to be toggled on or off.
67+
68+This function takes a single string argument, the name of the thing to be toggled.
69+
70+The option's description is "Whether to enable \<name\>.".
71+
72+For example:
73+
74+::: {#ex-options-declarations-util-mkEnableOption-magic .example}
75+```nix
76+lib.mkEnableOption "magic"
77+# is like
78+lib.mkOption {
79+ type = lib.types.bool;
80+ default = false;
81+ example = true;
82+ description = "Whether to enable magic.";
83+}
84+```
85+
86+### `mkPackageOption` {#sec-option-declarations-util-mkPackageOption}
87+
88+Usage:
89+
90+```nix
91+mkPackageOption pkgs "name" { default = [ "path" "in" "pkgs" ]; example = "literal example"; }
92+```
93+
94+Creates an Option attribute set for an option that specifies the package a module should use for some purpose.
95+
96+**Note**: You shouldn’t necessarily make package options for all of your modules. You can always overwrite a specific package throughout nixpkgs by using [nixpkgs overlays](https://nixos.org/manual/nixpkgs/stable/#chap-overlays).
97+
98+The default package is specified as a list of strings representing its attribute path in nixpkgs. Because of this, you need to pass nixpkgs itself as the first argument.
99+
100+The second argument is the name of the option, used in the description "The \<name\> package to use.". You can also pass an example value, either a literal string or a package's attribute path.
101+
102+You can omit the default path if the name of the option is also attribute path in nixpkgs.
103+
104+::: {#ex-options-declarations-util-mkPackageOption .title}
105+Examples:
106+
107+::: {#ex-options-declarations-util-mkPackageOption-hello .example}
108+```nix
109+lib.mkPackageOption pkgs "hello" { }
110+# is like
111+lib.mkOption {
112+ type = lib.types.package;
113+ default = pkgs.hello;
114+ defaultText = lib.literalExpression "pkgs.hello";
115+ description = "The hello package to use.";
116+}
117+```
118+
119+::: {#ex-options-declarations-util-mkPackageOption-ghc .example}
120+```nix
121+lib.mkPackageOption pkgs "GHC" {
122+ default = [ "ghc" ];
123+ example = "pkgs.haskell.package.ghc922.ghc.withPackages (hkgs: [ hkgs.primes ])";
124+}
125+# is like
126+lib.mkOption {
127+ type = lib.types.package;
128+ default = pkgs.ghc;
129+ defaultText = lib.literalExpression "pkgs.ghc";
130+ example = lib.literalExpression "pkgs.haskell.package.ghc922.ghc.withPackages (hkgs: [ hkgs.primes ])";
131+ description = "The GHC package to use.";
132+}
133+```
134+
50135## Extensible Option Types {#sec-option-declarations-eot}
51136
52137Extensible option types is a feature that allow to extend certain types
@@ -61,26 +146,26 @@ As an example, we will take the case of display managers. There is a
61146central display manager module for generic display manager options and a
62147module file per display manager backend (sddm, gdm \...).
63148
64−There are two approach to this module structure:
149+There are two approaches we could take with this module structure:
65150
66−- Managing the display managers independently by adding an enable
151+- Configuring the display managers independently by adding an enable
67152 option to every display manager module backend. (NixOS)
68153
69−- Managing the display managers in the central module by adding an
70− option to select which display manager backend to use.
154+- Configuring the display managers in the central module by adding
155+ an option to select which display manager backend to use.
71156
72157Both approaches have problems.
73158
74159Making backends independent can quickly become hard to manage. For
75−display managers, there can be only one enabled at a time, but the type
76−system can not enforce this restriction as there is no relation between
77−each backend `enable` option. As a result, this restriction has to be
78−done explicitely by adding assertions in each display manager backend
79−module.
160+display managers, there can only be one enabled at a time, but the
161+type system cannot enforce this restriction as there is no relation
162+between each backend's `enable` option. As a result, this restriction
163+has to be done explicitly by adding assertions in each display manager
164+backend module.
80165
81−On the other hand, managing the display managers backends in the central
82−module will require to change the central module option every time a new
83−backend is added or removed.
166+On the other hand, managing the display manager backends in the
167+central module will require changing the central module option every
168+time a new backend is added or removed.
84169
85170By using extensible option types, it is possible to create a placeholder
86171option in the central module
@@ -91,7 +176,7 @@ and to extend it in each backend module
91176
92177As a result, `displayManager.enable` option values can be added without
93178changing the main service module file and the type system automatically
94−enforce that there can only be a single display manager enabled.
179+enforces that there can only be a single display manager enabled.
95180
96181::: {#ex-option-declaration-eot-service .example}
97182::: {.title}
nixos/doc/manual/development/option-types.section.md+29−4
@@ -16,13 +16,14 @@ merging is handled.
1616
1717`types.path`
1818
19−: A filesystem path, defined as anything that when coerced to a string
20− starts with a slash. Even if derivations can be considered as path,
21− the more specific `types.package` should be preferred.
19+: A filesystem path is anything that starts with a slash when
20+ coerced to a string. Even if derivations can be considered as
21+ paths, the more specific `types.package` should be preferred.
2222
2323`types.package`
2424
25−: A derivation or a store path.
25+: A top-level store path. This can be an attribute set pointing
26+ to a store path, like a derivation or a flake input.
2627
2728`types.anything`
2829
@@ -63,6 +64,24 @@ merging is handled.
6364 ```
6465 :::
6566
67+`types.raw`
68+
69+: A type which doesn't do any checking, merging or nested evaluation. It
70+ accepts a single arbitrary value that is not recursed into, making it
71+ useful for values coming from outside the module system, such as package
72+ sets or arbitrary data. Options of this type are still evaluated according
73+ to priorities and conditionals, so `mkForce`, `mkIf` and co. still work on
74+ the option value itself, but not for any value nested within it. This type
75+ should only be used when checking, merging and nested evaluation are not
76+ desirable.
77+
78+`types.optionType`
79+
80+: The type of an option's type. Its merging operation ensures that nested
81+ options have the correct file location annotated, and that if possible,
82+ multiple option definitions are correctly merged together. The main use
83+ case is as the type of the `_module.freeformType` option.
84+
6685`types.attrs`
6786
6887: A free-form attribute set.
@@ -250,6 +269,12 @@ Composed types are types that take a type as parameter. `listOf
250269: Ensures that type *`t`* cannot be merged. It is used to ensure option
251270 definitions are declared only once.
252271
272+`types.unique` `{ message = m }` *`t`*
273+
274+: Ensures that type *`t`* cannot be merged. Prints the message *`m`*, after
275+ the line `The option <option path> is defined multiple times.` and before
276+ a list of definition locations.
277+
253278`types.either` *`t1 t2`*
254279
255280: Type *`t1`* or type *`t2`*, e.g. `with types; either int str`.
nixos/doc/manual/development/running-nixos-tests-interactively.section.md+9−9
@@ -4,19 +4,19 @@ The test itself can be run interactively. This is particularly useful
44when developing or debugging a test:
55
66```ShellSession
7−$ nix-build nixos/tests/login.nix -A driverInteractive
8−$ ./result/bin/nixos-test-driver --interactive
9−starting VDE switch for network 1
10−>
7+$ nix-build . -A nixosTests.login.driverInteractive
8+$ ./result/bin/nixos-test-driver
9+[...]
10+>>>
1111```
1212
1313You can then take any Python statement, e.g.
1414
1515```py
16−> start_all()
17−> test_script()
18−> machine.succeed("touch /tmp/foo")
19−> print(machine.succeed("pwd")) # Show stdout of command
16+>>> start_all()
17+>>> test_script()
18+>>> machine.succeed("touch /tmp/foo")
19+>>> print(machine.succeed("pwd")) # Show stdout of command
2020```
2121
2222The function `test_script` executes the entire test script and drops you
@@ -28,7 +28,7 @@ You can re-use the VM states coming from a previous run by setting the
2828`--keep-vm-state` flag.
2929
3030```ShellSession
31−$ ./result/bin/nixos-test-driver --interactive --keep-vm-state
31+$ ./result/bin/nixos-test-driver --keep-vm-state
3232```
3333
3434The machine state is stored in the `$TMPDIR/vm-state-machinename`
nixos/doc/manual/development/running-nixos-tests.section.md+2−2
@@ -24,8 +24,8 @@ After building/downloading all required dependencies, this will perform
2424a build that starts a QEMU/KVM virtual machine containing a NixOS
2525system. The virtual machine mounts the Nix store of the host; this makes
2626VM creation very fast, as no disk image needs to be created. Afterwards,
27−you can view a pretty-printed log of the test:
27+you can view a log of the test:
2828
2929```ShellSession
30−$ firefox result/log.html
30+$ nix-store --read-log result
3131```
nixos/doc/manual/development/settings-options.section.md+59
@@ -32,6 +32,20 @@ type of this option should represent the format. The most common formats
3232have a predefined type and string generator already declared under
3333`pkgs.formats`:
3434
35+`pkgs.formats.javaProperties` { *`comment`* ? `"Generated with Nix"` }
36+
37+: A function taking an attribute set with values
38+
39+ `comment`
40+
41+ : A string to put at the start of the
42+ file in a comment. It can have multiple
43+ lines.
44+
45+ It returns the `type`: `attrsOf str` and a function
46+ `generate` to build a Java `.properties` file, taking
47+ care of the correct escaping, etc.
48+
3549`pkgs.formats.json` { }
3650
3751: A function taking an empty attribute set (for future extensibility)
@@ -66,6 +80,45 @@ have a predefined type and string generator already declared under
6680 and returning a set with TOML-specific attributes `type` and
6781 `generate` as specified [below](#pkgs-formats-result).
6882
83+`pkgs.formats.elixirConf { elixir ? pkgs.elixir }`
84+
85+: A function taking an attribute set with values
86+
87+ `elixir`
88+
89+ : The Elixir package which will be used to format the generated output
90+
91+ It returns a set with Elixir-Config-specific attributes `type`, `lib`, and
92+ `generate` as specified [below](#pkgs-formats-result).
93+
94+ The `lib` attribute contains functions to be used in settings, for
95+ generating special Elixir values:
96+
97+ `mkRaw elixirCode`
98+
99+ : Outputs the given string as raw Elixir code
100+
101+ `mkGetEnv { envVariable, fallback ? null }`
102+
103+ : Makes the configuration fetch an environment variable at runtime
104+
105+ `mkAtom atom`
106+
107+ : Outputs the given string as an Elixir atom, instead of the default
108+ Elixir binary string. Note: lowercase atoms still needs to be prefixed
109+ with `:`
110+
111+ `mkTuple array`
112+
113+ : Outputs the given array as an Elixir tuple, instead of the default
114+ Elixir list
115+
116+ `mkMap attrset`
117+
118+ : Outputs the given attribute set as an Elixir map, instead of the
119+ default Elixir keyword list
120+
121+
69122::: {#pkgs-formats-result}
70123These functions all return an attribute set with these values:
71124:::
@@ -74,6 +127,12 @@ These functions all return an attribute set with these values:
74127
75128: A module system type representing a value of the format
76129
130+`lib`
131+
132+: Utility functions for convenience, or special interactions with the format.
133+ This attribute is optional. It may contain inside a `types` attribute
134+ containing types specific to this format.
135+
77136`generate` *`filename jsonValue`*
78137
79138: A function that can render a value of the format to a file. Returns
nixos/doc/manual/development/unit-handling.section.mdnew file+62
@@ -0,0 +1,62 @@
1+# Unit handling {#sec-unit-handling}
2+
3+To figure out what units need to be started/stopped/restarted/reloaded, the
4+script first checks the current state of the system, similar to what `systemctl
5+list-units` shows. For each of the units, the script goes through the following
6+checks:
7+
8+- Is the unit file still in the new system? If not, **stop** the service unless
9+ it sets `X-StopOnRemoval` in the `[Unit]` section to `false`.
10+
11+- Is it a `.target` unit? If so, **start** it unless it sets
12+ `RefuseManualStart` in the `[Unit]` section to `true` or `X-OnlyManualStart`
13+ in the `[Unit]` section to `true`. Also **stop** the unit again unless it
14+ sets `X-StopOnReconfiguration` to `false`.
15+
16+- Are the contents of the unit files different? They are compared by parsing
17+ them and comparing their contents. If they are different but only
18+ `X-Reload-Triggers` in the `[Unit]` section is changed, **reload** the unit.
19+ The NixOS module system allows setting these triggers with the option
20+ [systemd.services.\<name\>.reloadTriggers](#opt-systemd.services). There are
21+ some additional keys in the `[Unit]` section that are ignored as well. If the
22+ unit files differ in any way, the following actions are performed:
23+
24+ - `.path` and `.slice` units are ignored. There is no need to restart them
25+ since changes in their values are applied by systemd when systemd is
26+ reloaded.
27+
28+ - `.mount` units are **reload**ed. These mostly come from the `/etc/fstab`
29+ parser.
30+
31+ - `.socket` units are currently ignored. This is to be fixed at a later
32+ point.
33+
34+ - The rest of the units (mostly `.service` units) are then **reload**ed if
35+ `X-ReloadIfChanged` in the `[Service]` section is set to `true` (exposed
36+ via [systemd.services.\<name\>.reloadIfChanged](#opt-systemd.services)).
37+ A little exception is done for units that were deactivated in the meantime,
38+ for example because they require a unit that got stopped before. These
39+ are **start**ed instead of reloaded.
40+
41+ - If the reload flag is not set, some more flags decide if the unit is
42+ skipped. These flags are `X-RestartIfChanged` in the `[Service]` section
43+ (exposed via
44+ [systemd.services.\<name\>.restartIfChanged](#opt-systemd.services)),
45+ `RefuseManualStop` in the `[Unit]` section, and `X-OnlyManualStart` in the
46+ `[Unit]` section.
47+
48+ - Further behavior depends on the unit having `X-StopIfChanged` in the
49+ `[Service]` section set to `true` (exposed via
50+ [systemd.services.\<name\>.stopIfChanged](#opt-systemd.services)). This is
51+ set to `true` by default and must be explicitly turned off if not wanted.
52+ If the flag is enabled, the unit is **stop**ped and then **start**ed. If
53+ not, the unit is **restart**ed. The goal of the flag is to make sure that
54+ the new unit never runs in the old environment which is still in place
55+ before the activation script is run. This behavior is different when the
56+ service is socket-activated, as outlined in the following steps.
57+
58+ - The last thing that is taken into account is whether the unit is a service
59+ and socket-activated. If `X-StopIfChanged` is **not** set, the service
60+ is **restart**ed with the others. If it is set, both the service and the
61+ socket are **stop**ped and the socket is **start**ed, leaving socket
62+ activation to start the service when it's needed.
nixos/doc/manual/development/what-happens-during-a-system-switch.chapter.mdnew file+53
@@ -0,0 +1,53 @@
1+# What happens during a system switch? {#sec-switching-systems}
2+
3+Running `nixos-rebuild switch` is one of the more common tasks under NixOS.
4+This chapter explains some of the internals of this command to make it simpler
5+for new module developers to configure their units correctly and to make it
6+easier to understand what is happening and why for curious administrators.
7+
8+`nixos-rebuild`, like many deployment solutions, calls `switch-to-configuration`
9+which resides in a NixOS system at `$out/bin/switch-to-configuration`. The
10+script is called with the action that is to be performed like `switch`, `test`,
11+`boot`. There is also the `dry-activate` action which does not really perform
12+the actions but rather prints what it would do if you called it with `test`.
13+This feature can be used to check what service states would be changed if the
14+configuration was switched to.
15+
16+If the action is `switch` or `boot`, the bootloader is updated first so the
17+configuration will be the next one to boot. Unless `NIXOS_NO_SYNC` is set to
18+`1`, `/nix/store` is synced to disk.
19+
20+If the action is `switch` or `test`, the currently running system is inspected
21+and the actions to switch to the new system are calculated. This process takes
22+two data sources into account: `/etc/fstab` and the current systemd status.
23+Mounts and swaps are read from `/etc/fstab` and the corresponding actions are
24+generated. If a new mount is added, for example, the proper `.mount` unit is
25+marked to be started. The current systemd state is inspected, the difference
26+between the current system and the desired configuration is calculated and
27+actions are generated to get to this state. There are a lot of nuances that can
28+be controlled by the units which are explained here.
29+
30+After calculating what should be done, the actions are carried out. The order
31+of actions is always the same:
32+- Stop units (`systemctl stop`)
33+- Run activation script (`$out/activate`)
34+- See if the activation script requested more units to restart
35+- Restart systemd if needed (`systemd daemon-reexec`)
36+- Forget about the failed state of units (`systemctl reset-failed`)
37+- Reload systemd (`systemctl daemon-reload`)
38+- Reload systemd user instances (`systemctl --user daemon-reload`)
39+- Set up tmpfiles (`systemd-tmpfiles --create`)
40+- Reload units (`systemctl reload`)
41+- Restart units (`systemctl restart`)
42+- Start units (`systemctl start`)
43+- Inspect what changed during these actions and print units that failed and
44+ that were newly started
45+
46+Most of these actions are either self-explaining but some of them have to do
47+with our units or the activation script. For this reason, these topics are
48+explained in the next sections.
49+
50+```{=docbook}
51+<xi:include href="unit-handling.section.xml" />
52+<xi:include href="activation-script.section.xml" />
53+```
nixos/doc/manual/development/writing-modules.chapter.mdnew file+208
@@ -0,0 +1,208 @@
1+# Writing NixOS Modules {#sec-writing-modules}
2+
3+NixOS has a modular system for declarative configuration. This system
4+combines multiple *modules* to produce the full system configuration.
5+One of the modules that constitute the configuration is
6+`/etc/nixos/configuration.nix`. Most of the others live in the
7+[`nixos/modules`](https://github.com/NixOS/nixpkgs/tree/master/nixos/modules)
8+subdirectory of the Nixpkgs tree.
9+
10+Each NixOS module is a file that handles one logical aspect of the
11+configuration, such as a specific kind of hardware, a service, or
12+network settings. A module configuration does not have to handle
13+everything from scratch; it can use the functionality provided by other
14+modules for its implementation. Thus a module can *declare* options that
15+can be used by other modules, and conversely can *define* options
16+provided by other modules in its own implementation. For example, the
17+module
18+[`pam.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/security/pam.nix)
19+declares the option `security.pam.services` that allows other modules (e.g.
20+[`sshd.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/networking/ssh/sshd.nix))
21+to define PAM services; and it defines the option `environment.etc` (declared by
22+[`etc.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/system/etc/etc.nix))
23+to cause files to be created in `/etc/pam.d`.
24+
25+In [](#sec-configuration-syntax), we saw the following structure of
26+NixOS modules:
27+
28+```nix
29+{ config, pkgs, ... }:
30+
31+{ option definitions
32+}
33+```
34+
35+This is actually an *abbreviated* form of module that only defines
36+options, but does not declare any. The structure of full NixOS modules
37+is shown in [Example: Structure of NixOS Modules](#ex-module-syntax).
38+
39+::: {#ex-module-syntax .example}
40+::: {.title}
41+**Example: Structure of NixOS Modules**
42+:::
43+```nix
44+{ config, pkgs, ... }:
45+
46+{
47+ imports =
48+ [ paths of other modules
49+ ];
50+
51+ options = {
52+ option declarations
53+ };
54+
55+ config = {
56+ option definitions
57+ };
58+}
59+```
60+:::
61+
62+The meaning of each part is as follows.
63+
64+- The first line makes the current Nix expression a function. The variable
65+ `pkgs` contains Nixpkgs (by default, it takes the `nixpkgs` entry of
66+ `NIX_PATH`, see the [Nix manual](https://nixos.org/manual/nix/stable/#sec-common-env)
67+ for further details), while `config` contains the full system
68+ configuration. This line can be omitted if there is no reference to
69+ `pkgs` and `config` inside the module.
70+
71+- This `imports` list enumerates the paths to other NixOS modules that
72+ should be included in the evaluation of the system configuration. A
73+ default set of modules is defined in the file `modules/module-list.nix`.
74+ These don\'t need to be added in the import list.
75+
76+- The attribute `options` is a nested set of *option declarations*
77+ (described below).
78+
79+- The attribute `config` is a nested set of *option definitions* (also
80+ described below).
81+
82+[Example: NixOS Module for the "locate" Service](#locate-example)
83+shows a module that handles the regular update of the "locate" database,
84+an index of all files in the file system. This module declares two
85+options that can be defined by other modules (typically the user's
86+`configuration.nix`): `services.locate.enable` (whether the database should
87+be updated) and `services.locate.interval` (when the update should be done).
88+It implements its functionality by defining two options declared by other
89+modules: `systemd.services` (the set of all systemd services) and
90+`systemd.timers` (the list of commands to be executed periodically by
91+`systemd`).
92+
93+Care must be taken when writing systemd services using `Exec*` directives. By
94+default systemd performs substitution on `%<char>` specifiers in these
95+directives, expands environment variables from `$FOO` and `${FOO}`, splits
96+arguments on whitespace, and splits commands on `;`. All of these must be escaped
97+to avoid unexpected substitution or splitting when interpolating into an `Exec*`
98+directive, e.g. when using an `extraArgs` option to pass additional arguments to
99+the service. The functions `utils.escapeSystemdExecArg` and
100+`utils.escapeSystemdExecArgs` are provided for this, see [Example: Escaping in
101+Exec directives](#exec-escaping-example) for an example. When using these
102+functions system environment substitution should *not* be disabled explicitly.
103+
104+::: {#locate-example .example}
105+::: {.title}
106+**Example: NixOS Module for the "locate" Service**
107+:::
108+```nix
109+{ config, lib, pkgs, ... }:
110+
111+with lib;
112+
113+let
114+ cfg = config.services.locate;
115+in {
116+ options.services.locate = {
117+ enable = mkOption {
118+ type = types.bool;
119+ default = false;
120+ description = ''
121+ If enabled, NixOS will periodically update the database of
122+ files used by the locate command.
123+ '';
124+ };
125+
126+ interval = mkOption {
127+ type = types.str;
128+ default = "02:15";
129+ example = "hourly";
130+ description = ''
131+ Update the locate database at this interval. Updates by
132+ default at 2:15 AM every day.
133+
134+ The format is described in
135+ systemd.time(7).
136+ '';
137+ };
138+
139+ # Other options omitted for documentation
140+ };
141+
142+ config = {
143+ systemd.services.update-locatedb =
144+ { description = "Update Locate Database";
145+ path = [ pkgs.su ];
146+ script =
147+ ''
148+ mkdir -m 0755 -p $(dirname ${toString cfg.output})
149+ exec updatedb \
150+ --localuser=${cfg.localuser} \
151+ ${optionalString (!cfg.includeStore) "--prunepaths='/nix/store'"} \
152+ --output=${toString cfg.output} ${concatStringsSep " " cfg.extraFlags}
153+ '';
154+ };
155+
156+ systemd.timers.update-locatedb = mkIf cfg.enable
157+ { description = "Update timer for locate database";
158+ partOf = [ "update-locatedb.service" ];
159+ wantedBy = [ "timers.target" ];
160+ timerConfig.OnCalendar = cfg.interval;
161+ };
162+ };
163+}
164+```
165+:::
166+
167+::: {#exec-escaping-example .example}
168+::: {.title}
169+**Example: Escaping in Exec directives**
170+:::
171+```nix
172+{ config, lib, pkgs, utils, ... }:
173+
174+with lib;
175+
176+let
177+ cfg = config.services.echo;
178+ echoAll = pkgs.writeScript "echo-all" ''
179+ #! ${pkgs.runtimeShell}
180+ for s in "$@"; do
181+ printf '%s\n' "$s"
182+ done
183+ '';
184+ args = [ "a%Nything" "lang=\${LANG}" ";" "/bin/sh -c date" ];
185+in {
186+ systemd.services.echo =
187+ { description = "Echo to the journal";
188+ wantedBy = [ "multi-user.target" ];
189+ serviceConfig.Type = "oneshot";
190+ serviceConfig.ExecStart = ''
191+ ${echoAll} ${utils.escapeSystemdExecArgs args}
192+ '';
193+ };
194+}
195+```
196+:::
197+
198+```{=docbook}
199+<xi:include href="option-declarations.section.xml" />
200+<xi:include href="option-types.section.xml" />
201+<xi:include href="option-def.section.xml" />
202+<xi:include href="assertions.section.xml" />
203+<xi:include href="meta-attributes.section.xml" />
204+<xi:include href="importing-modules.section.xml" />
205+<xi:include href="replace-modules.section.xml" />
206+<xi:include href="freeform-modules.section.xml" />
207+<xi:include href="settings-options.section.xml" />
208+```
nixos/doc/manual/development/writing-modules.xmldeleted−191
@@ -1,191 +0,0 @@
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"
4− version="5.0"
5− xml:id="sec-writing-modules">
6− <title>Writing NixOS Modules</title>
7− <para>
8− NixOS has a modular system for declarative configuration. This system
9− combines multiple <emphasis>modules</emphasis> to produce the full system
10− configuration. One of the modules that constitute the configuration is
11− <filename>/etc/nixos/configuration.nix</filename>. Most of the others live in
12− the
13− <link
14−xlink:href="https://github.com/NixOS/nixpkgs/tree/master/nixos/modules"><filename>nixos/modules</filename></link>
15− subdirectory of the Nixpkgs tree.
16− </para>
17− <para>
18− Each NixOS module is a file that handles one logical aspect of the
19− configuration, such as a specific kind of hardware, a service, or network
20− settings. A module configuration does not have to handle everything from
21− scratch; it can use the functionality provided by other modules for its
22− implementation. Thus a module can <emphasis>declare</emphasis> options that
23− can be used by other modules, and conversely can <emphasis>define</emphasis>
24− options provided by other modules in its own implementation. For example, the
25− module
26− <link
27−xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/security/pam.nix"><filename>pam.nix</filename></link>
28− declares the option <option>security.pam.services</option> that allows other
29− modules (e.g.
30− <link
31−xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/networking/ssh/sshd.nix"><filename>sshd.nix</filename></link>)
32− to define PAM services; and it defines the option
33− <option>environment.etc</option> (declared by
34− <link
35−xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/system/etc/etc.nix"><filename>etc.nix</filename></link>)
36− to cause files to be created in <filename>/etc/pam.d</filename>.
37− </para>
38− <para xml:id="para-module-syn">
39− In <xref
40−linkend="sec-configuration-syntax"/>, we saw the following structure
41− of NixOS modules:
42−<programlisting>
43−{ config, pkgs, ... }:
44−
45−{ <replaceable>option definitions</replaceable>
46−}
47−</programlisting>
48− This is actually an <emphasis>abbreviated</emphasis> form of module that only
49− defines options, but does not declare any. The structure of full NixOS
50− modules is shown in <xref linkend='ex-module-syntax' />.
51− </para>
52− <example xml:id='ex-module-syntax'>
53− <title>Structure of NixOS Modules</title>
54−<programlisting>
55−{ config, pkgs, ... }: <co xml:id='module-syntax-1' />
56−
57−{
58− imports =
59− [ <replaceable>paths of other modules</replaceable> <co xml:id='module-syntax-2' />
60− ];
61−
62− options = {
63− <replaceable>option declarations</replaceable> <co xml:id='module-syntax-3' />
64− };
65−
66− config = {
67− <replaceable>option definitions</replaceable> <co xml:id='module-syntax-4' />
68− };
69−}</programlisting>
70− </example>
71− <para>
72− The meaning of each part is as follows.
73− <calloutlist>
74− <callout arearefs='module-syntax-1'>
75− <para>
76− This line makes the current Nix expression a function. The variable
77− <varname>pkgs</varname> contains Nixpkgs (by default, it takes the
78− <varname>nixpkgs</varname> entry of <envar>NIX_PATH</envar>, see the <link
79− xlink:href="https://nixos.org/manual/nix/stable/#sec-common-env">Nix
80− manual</link> for further details), while <varname>config</varname>
81− contains the full system configuration. This line can be omitted if there
82− is no reference to <varname>pkgs</varname> and <varname>config</varname>
83− inside the module.
84− </para>
85− </callout>
86− <callout arearefs='module-syntax-2'>
87− <para>
88− This list enumerates the paths to other NixOS modules that should be
89− included in the evaluation of the system configuration. A default set of
90− modules is defined in the file
91− <filename>modules/module-list.nix</filename>. These don't need to be added
92− in the import list.
93− </para>
94− </callout>
95− <callout arearefs='module-syntax-3'>
96− <para>
97− The attribute <varname>options</varname> is a nested set of
98− <emphasis>option declarations</emphasis> (described below).
99− </para>
100− </callout>
101− <callout arearefs='module-syntax-4'>
102− <para>
103− The attribute <varname>config</varname> is a nested set of
104− <emphasis>option definitions</emphasis> (also described below).
105− </para>
106− </callout>
107− </calloutlist>
108− </para>
109− <para>
110− <xref linkend='locate-example' /> shows a module that handles the regular
111− update of the “locate” database, an index of all files in the file
112− system. This module declares two options that can be defined by other modules
113− (typically the user’s <filename>configuration.nix</filename>):
114− <option>services.locate.enable</option> (whether the database should be
115− updated) and <option>services.locate.interval</option> (when the update
116− should be done). It implements its functionality by defining two options
117− declared by other modules: <option>systemd.services</option> (the set of all
118− systemd services) and <option>systemd.timers</option> (the list of commands
119− to be executed periodically by <command>systemd</command>).
120− </para>
121− <example xml:id='locate-example'>
122− <title>NixOS Module for the “locate” Service</title>
123−<programlisting>
124−{ config, lib, pkgs, ... }:
125−
126−with lib;
127−
128−let
129− cfg = config.services.locate;
130−in {
131− options.services.locate = {
132− enable = mkOption {
133− type = types.bool;
134− default = false;
135− description = ''
136− If enabled, NixOS will periodically update the database of
137− files used by the <command>locate</command> command.
138− '';
139− };
140−
141− interval = mkOption {
142− type = types.str;
143− default = "02:15";
144− example = "hourly";
145− description = ''
146− Update the locate database at this interval. Updates by
147− default at 2:15 AM every day.
148−
149− The format is described in
150− <citerefentry><refentrytitle>systemd.time</refentrytitle>
151− <manvolnum>7</manvolnum></citerefentry>.
152− '';
153− };
154−
155− # Other options omitted for documentation
156− };
157−
158− config = {
159− systemd.services.update-locatedb =
160− { description = "Update Locate Database";
161− path = [ pkgs.su ];
162− script =
163− ''
164− mkdir -m 0755 -p $(dirname ${toString cfg.output})
165− exec updatedb \
166− --localuser=${cfg.localuser} \
167− ${optionalString (!cfg.includeStore) "--prunepaths='/nix/store'"} \
168− --output=${toString cfg.output} ${concatStringsSep " " cfg.extraFlags}
169− '';
170− };
171−
172− systemd.timers.update-locatedb = mkIf cfg.enable
173− { description = "Update timer for locate database";
174− partOf = [ "update-locatedb.service" ];
175− wantedBy = [ "timers.target" ];
176− timerConfig.OnCalendar = cfg.interval;
177− };
178− };
179−}
180−</programlisting>
181− </example>
182− <xi:include href="../from_md/development/option-declarations.section.xml" />
183− <xi:include href="../from_md/development/option-types.section.xml" />
184− <xi:include href="../from_md/development/option-def.section.xml" />
185− <xi:include href="../from_md/development/assertions.section.xml" />
186− <xi:include href="../from_md/development/meta-attributes.section.xml" />
187− <xi:include href="../from_md/development/importing-modules.section.xml" />
188− <xi:include href="../from_md/development/replace-modules.section.xml" />
189− <xi:include href="../from_md/development/freeform-modules.section.xml" />
190− <xi:include href="../from_md/development/settings-options.section.xml" />
191−</chapter>
nixos/doc/manual/development/writing-nixos-tests.section.md+111−30
@@ -5,15 +5,9 @@ A NixOS test is a Nix expression that has the following structure:
55```nix
66import ./make-test-python.nix {
77
8− # Either the configuration of a single machine:
9− machine =
10− { config, pkgs, ... }:
11− { configuration…
12− };
13−
14− # Or a set of machines:
8+ # One or more machines:
159 nodes =
16− { machine1 =
10+ { machine =
1711 { config, pkgs, ... }: { … };
1812 machine2 =
1913 { config, pkgs, ... }: { … };
@@ -29,17 +23,16 @@ import ./make-test-python.nix {
2923
3024The attribute `testScript` is a bit of Python code that executes the
3125test (described below). During the test, it will start one or more
32−virtual machines, the configuration of which is described by the
33−attribute `machine` (if you need only one machine in your test) or by
34−the attribute `nodes` (if you need multiple machines). For instance,
35−[`login.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix)
36−only needs a single machine to test whether users can log in
26+virtual machines, the configuration of which is described by
27+the attribute `nodes`.
28+
29+An example of a single-node test is
30+[`login.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix).
31+It only needs a single machine to test whether users can log in
3732on the virtual console, whether device ownership is correctly maintained
38−when switching between consoles, and so on. On the other hand,
39−[`nfs/simple.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/nfs/simple.nix),
40−which tests NFS client and server functionality in the
41−Linux kernel (including whether locks are maintained across server
42−crashes), requires three machines: a server and two clients.
33+when switching between consoles, and so on. An interesting multi-node test is
34+[`nfs/simple.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/nfs/simple.nix).
35+It uses two client nodes to test correct locking across server crashes.
4336
4437There are a few special NixOS configuration options for test VMs:
4538
@@ -67,8 +60,7 @@ The test script is a sequence of Python statements that perform various
6760actions, such as starting VMs, executing commands in the VMs, and so on.
6861Each virtual machine is represented as an object stored in the variable
6962`name` if this is also the identifier of the machine in the declarative
70−config. If you didn\'t specify multiple machines using the `nodes`
71−attribute, it is just `machine`. The following example starts the
63+config. If you specified a node `nodes.machine`, the following example starts the
7264machine, waits until it has finished booting, then executes a command
7365and checks that the output is more-or-less correct:
7466
@@ -79,7 +71,7 @@ if not "Linux" in machine.succeed("uname"):
7971 raise Exception("Wrong OS")
8072```
8173
82−The first line is actually unnecessary; machines are implicitly started
74+The first line is technically unnecessary; machines are implicitly started
8375when you first execute an action on them (such as `wait_for_unit` or
8476`succeed`). If you have multiple machines, you can speed up the test by
8577starting them in parallel:
@@ -88,6 +80,8 @@ starting them in parallel:
8880start_all()
8981```
9082
83+## Machine objects {#ssec-machine-objects}
84+
9185The following methods are available on machine objects:
9286
9387`start`
@@ -156,23 +150,51 @@ The following methods are available on machine objects:
156150 e.g., `send_chars("foobar\n")` will type the string `foobar`
157151 followed by the Enter key.
158152
153+`send_console`
154+
155+: Send keys to the kernel console. This allows interaction with the systemd
156+ emergency mode, for example. Takes a string that is sent, e.g.,
157+ `send_console("\n\nsystemctl default\n")`.
158+
159159`execute`
160160
161161: Execute a shell command, returning a list `(status, stdout)`.
162162
163−`succeed`
164−
165−: Execute a shell command, raising an exception if the exit status is
166− not zero, otherwise returning the standard output. Commands are run
167− with `set -euo pipefail` set:
163+ Commands are run with `set -euo pipefail` set:
168164
169165 - If several commands are separated by `;` and one fails, the
170166 command as a whole will fail.
171167
172168 - For pipelines, the last non-zero exit status will be returned
173− (if there is one, zero will be returned otherwise).
169+ (if there is one; otherwise zero will be returned).
170+
171+ - Dereferencing unset variables fails the command.
174172
175− - Dereferencing unset variables fail the command.
173+ - It will wait for stdout to be closed.
174+
175+ If the command detaches, it must close stdout, as `execute` will wait
176+ for this to consume all output reliably. This can be achieved by
177+ redirecting stdout to stderr `>&2`, to `/dev/console`, `/dev/null` or
178+ a file. Examples of detaching commands are `sleep 365d &`, where the
179+ shell forks a new process that can write to stdout and `xclip -i`, where
180+ the `xclip` command itself forks without closing stdout.
181+
182+ Takes an optional parameter `check_return` that defaults to `True`.
183+ Setting this parameter to `False` will not check for the return code
184+ and return -1 instead. This can be used for commands that shut down
185+ the VM and would therefore break the pipe that would be used for
186+ retrieving the return code.
187+
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.
191+
192+`succeed`
193+
194+: Execute a shell command, raising an exception if the exit status is
195+ not zero, otherwise returning the standard output. Similar to `execute`,
196+ except that the timeout is `None` by default. See `execute` for details on
197+ command execution.
176198
177199`fail`
178200
@@ -182,10 +204,13 @@ The following methods are available on machine objects:
182204`wait_until_succeeds`
183205
184206: 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
209+ command execution.
185210
186211`wait_until_fails`
187212
188−: Repeat a shell command with 1-second intervals until it fails.
213+: Like `wait_until_succeeds`, but repeating the command until it fails.
189214
190215`wait_for_unit`
191216
@@ -256,6 +281,13 @@ The following methods are available on machine objects:
256281 Killing the interactive session with `Ctrl-d` or `Ctrl-c` also ends
257282 the guest session.
258283
284+`console_interact`
285+
286+: Allows you to directly interact with QEMU's stdin. This should
287+ only be used during test development, not in production tests.
288+ Output from QEMU is only read line-wise. `Ctrl-c` kills QEMU and
289+ `Ctrl-d` closes console and returns to the test runner.
290+
259291To test user units declared by `systemd.user.services` the optional
260292`user` argument can be used:
261293
@@ -274,7 +306,7 @@ For faster dev cycles it\'s also possible to disable the code-linters
274306```nix
275307import ./make-test-python.nix {
276308 skipLint = true;
277− machine =
309+ nodes.machine =
278310 { config, pkgs, ... }:
279311 { configuration…
280312 };
@@ -299,3 +331,52 @@ repository):
299331 # fmt: on
300332 '';
301333```
334+
335+## Failing tests early {#ssec-failing-tests-early}
336+
337+To fail tests early when certain invariables are no longer met (instead of waiting for the build to time out), the decorator `polling_condition` is provided. For example, if we are testing a program `foo` that should not quit after being started, we might write the following:
338+
339+```py
340+@polling_condition
341+def foo_running():
342+ machine.succeed("pgrep -x foo")
343+
344+
345+machine.succeed("foo --start")
346+machine.wait_until_succeeds("pgrep -x foo")
347+
348+with foo_running:
349+ ... # Put `foo` through its paces
350+```
351+
352+
353+`polling_condition` takes the following (optional) arguments:
354+
355+`seconds_interval`
356+
357+:
358+ specifies how often the condition should be polled:
359+
360+ ```py
361+ @polling_condition(seconds_interval=10)
362+ def foo_running():
363+ machine.succeed("pgrep -x foo")
364+ ```
365+
366+`description`
367+
368+:
369+ is used in the log when the condition is checked. If this is not provided, the description is pulled from the docstring of the function. These two are therefore equivalent:
370+
371+ ```py
372+ @polling_condition
373+ def foo_running():
374+ "check that foo is running"
375+ machine.succeed("pgrep -x foo")
376+ ```
377+
378+ ```py
379+ @polling_condition(description="check that foo is running")
380+ def foo_running():
381+ machine.succeed("pgrep -x foo")
382+ ```
nixos/doc/manual/from_md/administration/cleaning-store.chapter.xml+2−1
@@ -64,7 +64,8 @@ $ nix-store --optimise
6464 <para>
6565 If your <literal>/boot</literal> partition runs out of space,
6666 after clearing old profiles you must rebuild your system with
67− <literal>nixos-rebuild</literal> to update the
67+ <literal>nixos-rebuild boot</literal> or
68+ <literal>nixos-rebuild switch</literal> to update the
6869 <literal>/boot</literal> partition and clear space.
6970 </para>
7071 </section>
nixos/doc/manual/from_md/administration/containers.chapter.xmlnew file+31
@@ -0,0 +1,31 @@
1+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="ch-containers">
2+ <title>Container Management</title>
3+ <para>
4+ NixOS allows you to easily run other NixOS instances as
5+ <emphasis>containers</emphasis>. Containers are a light-weight
6+ approach to virtualisation that runs software in the container at
7+ the same speed as in the host system. NixOS containers share the Nix
8+ store of the host, making container creation very efficient.
9+ </para>
10+ <warning>
11+ <para>
12+ Currently, NixOS containers are not perfectly isolated from the
13+ host system. This means that a user with root access to the
14+ container can do things that affect the host. So you should not
15+ give container root access to untrusted users.
16+ </para>
17+ </warning>
18+ <para>
19+ NixOS containers can be created in two ways: imperatively, using the
20+ command <literal>nixos-container</literal>, and declaratively, by
21+ specifying them in your <literal>configuration.nix</literal>. The
22+ declarative approach implies that containers get upgraded along with
23+ your host system when you run <literal>nixos-rebuild</literal>,
24+ which is often not what you want. By contrast, in the imperative
25+ approach, containers are configured and updated independently from
26+ the host system.
27+ </para>
28+ <xi:include href="imperative-containers.section.xml" />
29+ <xi:include href="declarative-containers.section.xml" />
30+ <xi:include href="container-networking.section.xml" />
31+</chapter>
nixos/doc/manual/from_md/administration/declarative-containers.section.xml+3−3
@@ -11,7 +11,7 @@ containers.database =
1111 { config =
1212 { config, pkgs, ... }:
1313 { services.postgresql.enable = true;
14− services.postgresql.package = pkgs.postgresql_9_6;
14+ services.postgresql.package = pkgs.postgresql_10;
1515 };
1616 };
1717</programlisting>
@@ -48,8 +48,8 @@ containers.database = {
4848 <literal>configuration.nix</literal> and run
4949 <literal>nixos-rebuild switch</literal>. Note that this will not
5050 delete the root directory of the container in
51− <literal>/var/lib/containers</literal>. Containers can be destroyed
52− using the imperative method:
51+ <literal>/var/lib/nixos-containers</literal>. Containers can be
52+ destroyed using the imperative method:
5353 <literal>nixos-container destroy foo</literal>.
5454 </para>
5555 <para>
nixos/doc/manual/from_md/administration/imperative-containers.section.xml+3−2
@@ -14,8 +14,9 @@
1414</programlisting>
1515 <para>
1616 This creates the container’s root directory in
17− <literal>/var/lib/containers/foo</literal> and a small configuration
18− file in <literal>/etc/containers/foo.conf</literal>. It also builds
17+ <literal>/var/lib/nixos-containers/foo</literal> and a small
18+ configuration file in
19+ <literal>/etc/nixos-containers/foo.conf</literal>. It also builds
1920 the container’s initial system configuration and stores it in
2021 <literal>/nix/var/nix/profiles/per-container/foo/system</literal>.
2122 You can modify the initial configuration of the container on the
nixos/doc/manual/from_md/administration/troubleshooting.chapter.xmlnew file+12
@@ -0,0 +1,12 @@
1+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="ch-troubleshooting">
2+ <title>Troubleshooting</title>
3+ <para>
4+ This chapter describes solutions to common problems you might
5+ encounter when you manage your NixOS system.
6+ </para>
7+ <xi:include href="boot-problems.section.xml" />
8+ <xi:include href="maintenance-mode.section.xml" />
9+ <xi:include href="rollback.section.xml" />
10+ <xi:include href="store-corruption.section.xml" />
11+ <xi:include href="network-problems.section.xml" />
12+</chapter>
nixos/doc/manual/from_md/configuration/config-syntax.chapter.xmlnew file+21
@@ -0,0 +1,21 @@
1+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="sec-configuration-syntax">
2+ <title>Configuration Syntax</title>
3+ <para>
4+ The NixOS configuration file
5+ <literal>/etc/nixos/configuration.nix</literal> is actually a
6+ <emphasis>Nix expression</emphasis>, which is the Nix package
7+ manager’s purely functional language for describing how to build
8+ packages and configurations. This means you have all the expressive
9+ power of that language at your disposal, including the ability to
10+ abstract over common patterns, which is very useful when managing
11+ complex systems. The syntax and semantics of the Nix language are
12+ fully described in the
13+ <link xlink:href="https://nixos.org/nix/manual/#chap-writing-nix-expressions">Nix
14+ manual</link>, but here we give a short overview of the most
15+ important constructs useful in NixOS configuration files.
16+ </para>
17+ <xi:include href="config-file.section.xml" />
18+ <xi:include href="abstractions.section.xml" />
19+ <xi:include href="modularity.section.xml" />
20+ <xi:include href="summary.section.xml" />
21+</chapter>
nixos/doc/manual/from_md/configuration/declarative-packages.section.xmlnew file+53
@@ -0,0 +1,53 @@
1+<section xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="sec-declarative-package-mgmt">
2+ <title>Declarative Package Management</title>
3+ <para>
4+ With declarative package management, you specify which packages you
5+ want on your system by setting the option
6+ <xref linkend="opt-environment.systemPackages" />. For instance,
7+ adding the following line to <literal>configuration.nix</literal>
8+ enables the Mozilla Thunderbird email application:
9+ </para>
10+ <programlisting language="bash">
11+environment.systemPackages = [ pkgs.thunderbird ];
12+</programlisting>
13+ <para>
14+ The effect of this specification is that the Thunderbird package
15+ from Nixpkgs will be built or downloaded as part of the system when
16+ you run <literal>nixos-rebuild switch</literal>.
17+ </para>
18+ <note>
19+ <para>
20+ Some packages require additional global configuration such as
21+ D-Bus or systemd service registration so adding them to
22+ <xref linkend="opt-environment.systemPackages" /> might not be
23+ sufficient. You are advised to check the
24+ <link linkend="ch-options">list of options</link> whether a NixOS
25+ module for the package does not exist.
26+ </para>
27+ </note>
28+ <para>
29+ You can get a list of the available packages as follows:
30+ </para>
31+ <programlisting>
32+$ nix-env -qaP '*' --description
33+nixos.firefox firefox-23.0 Mozilla Firefox - the browser, reloaded
34+...
35+</programlisting>
36+ <para>
37+ The first column in the output is the <emphasis>attribute
38+ name</emphasis>, such as <literal>nixos.thunderbird</literal>.
39+ </para>
40+ <para>
41+ Note: the <literal>nixos</literal> prefix tells us that we want to
42+ get the package from the <literal>nixos</literal> channel and works
43+ only in CLI tools. In declarative configuration use
44+ <literal>pkgs</literal> prefix (variable).
45+ </para>
46+ <para>
47+ To <quote>uninstall</quote> a package, simply remove it from
48+ <xref linkend="opt-environment.systemPackages" /> and run
49+ <literal>nixos-rebuild switch</literal>.
50+ </para>
51+ <xi:include href="customizing-packages.section.xml" />
52+ <xi:include href="adding-custom-packages.section.xml" />
53+</section>
nixos/doc/manual/from_md/configuration/file-systems.chapter.xmlnew file+55
@@ -0,0 +1,55 @@
1+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="ch-file-systems">
2+ <title>File Systems</title>
3+ <para>
4+ You can define file systems using the <literal>fileSystems</literal>
5+ configuration option. For instance, the following definition causes
6+ NixOS to mount the Ext4 file system on device
7+ <literal>/dev/disk/by-label/data</literal> onto the mount point
8+ <literal>/data</literal>:
9+ </para>
10+ <programlisting language="bash">
11+fileSystems.&quot;/data&quot; =
12+ { device = &quot;/dev/disk/by-label/data&quot;;
13+ fsType = &quot;ext4&quot;;
14+ };
15+</programlisting>
16+ <para>
17+ This will create an entry in <literal>/etc/fstab</literal>, which
18+ will generate a corresponding
19+ <link xlink:href="https://www.freedesktop.org/software/systemd/man/systemd.mount.html">systemd.mount</link>
20+ unit via
21+ <link xlink:href="https://www.freedesktop.org/software/systemd/man/systemd-fstab-generator.html">systemd-fstab-generator</link>.
22+ The filesystem will be mounted automatically unless
23+ <literal>&quot;noauto&quot;</literal> is present in
24+ <link linkend="opt-fileSystems._name_.options">options</link>.
25+ <literal>&quot;noauto&quot;</literal> filesystems can be mounted
26+ explicitly using <literal>systemctl</literal> e.g.
27+ <literal>systemctl start data.mount</literal>. Mount points are
28+ created automatically if they don’t already exist. For
29+ <literal>device</literal>, it’s best to use the topology-independent
30+ device aliases in <literal>/dev/disk/by-label</literal> and
31+ <literal>/dev/disk/by-uuid</literal>, as these don’t change if the
32+ topology changes (e.g. if a disk is moved to another IDE
33+ controller).
34+ </para>
35+ <para>
36+ You can usually omit the file system type
37+ (<literal>fsType</literal>), since <literal>mount</literal> can
38+ usually detect the type and load the necessary kernel module
39+ automatically. However, if the file system is needed at early boot
40+ (in the initial ramdisk) and is not <literal>ext2</literal>,
41+ <literal>ext3</literal> or <literal>ext4</literal>, then it’s best
42+ to specify <literal>fsType</literal> to ensure that the kernel
43+ module is available.
44+ </para>
45+ <note>
46+ <para>
47+ System startup will fail if any of the filesystems fails to mount,
48+ dropping you to the emergency shell. You can make a mount
49+ asynchronous and non-critical by adding
50+ <literal>options = [ &quot;nofail&quot; ];</literal>.
51+ </para>
52+ </note>
53+ <xi:include href="luks-file-systems.section.xml" />
54+ <xi:include href="sshfs-file-systems.section.xml" />
55+</chapter>
nixos/doc/manual/from_md/configuration/linux-kernel.chapter.xml+22−15
@@ -6,7 +6,7 @@
66 selects the Linux 3.10 kernel:
77 </para>
88 <programlisting language="bash">
9−boot.kernelPackages = pkgs.linuxPackages_3_10;
9+boot.kernelPackages = pkgs.linuxKernel.packages.linux_3_10;
1010</programlisting>
1111 <para>
1212 Note that this not only replaces the kernel, but also packages that
@@ -14,6 +14,13 @@ boot.kernelPackages = pkgs.linuxPackages_3_10;
1414 drivers. This ensures that driver packages are consistent with the
1515 kernel.
1616 </para>
17+ <para>
18+ While <literal>pkgs.linuxKernel.packages</literal> contains all
19+ available kernel packages, you may want to use one of the
20+ unversioned <literal>pkgs.linuxPackages_*</literal> aliases such as
21+ <literal>pkgs.linuxPackages_latest</literal>, that are kept up to
22+ date with new versions.
23+ </para>
1724 <para>
1825 The default Linux kernel configuration should be fine for most
1926 users. You can see the configuration of your current kernel with the
@@ -29,14 +36,13 @@ zcat /proc/config.gz
2936 enable support for the kernel debugger KGDB:
3037 </para>
3138 <programlisting language="bash">
32−nixpkgs.config.packageOverrides = pkgs:
33− { linux_3_4 = pkgs.linux_3_4.override {
34− extraConfig =
35− ''
36− KGDB y
37− '';
38− };
39+nixpkgs.config.packageOverrides = pkgs: pkgs.lib.recursiveUpdate pkgs {
40+ linuxKernel.kernels.linux_5_10 = pkgs.linuxKernel.kernels.linux_5_10.override {
41+ extraConfig = ''
42+ KGDB y
43+ '';
3944 };
45+};
4046</programlisting>
4147 <para>
4248 <literal>extraConfig</literal> takes a list of Linux kernel
@@ -82,16 +88,17 @@ boot.kernel.sysctl.&quot;net.ipv4.tcp_keepalive_time&quot; = 120;
8288 The first step before compiling the kernel is to generate an
8389 appropriate <literal>.config</literal> configuration. Either you
8490 pass your own config via the <literal>configfile</literal> setting
85− of <literal>linuxManualConfig</literal>:
91+ of <literal>linuxKernel.manualConfig</literal>:
8692 </para>
8793 <programlisting language="bash">
88−custom-kernel = super.linuxManualConfig {
89− inherit (super) stdenv hostPlatform;
90− inherit (linux_4_9) src;
91− version = &quot;${linux_4_9.version}-custom&quot;;
94+custom-kernel = let base_kernel = linuxKernel.kernels.linux_4_9;
95+ in super.linuxKernel.manualConfig {
96+ inherit (super) stdenv hostPlatform;
97+ inherit (base_kernel) src;
98+ version = &quot;${base_kernel.version}-custom&quot;;
9299
93− configfile = /home/me/my_kernel_config;
94− allowImportFromDerivation = true;
100+ configfile = /home/me/my_kernel_config;
101+ allowImportFromDerivation = true;
95102};
96103</programlisting>
97104 <para>
nixos/doc/manual/from_md/configuration/networking.chapter.xmlnew file+15
@@ -0,0 +1,15 @@
1+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="sec-networking">
2+ <title>Networking</title>
3+ <para>
4+ This section describes how to configure networking components on
5+ your NixOS machine.
6+ </para>
7+ <xi:include href="network-manager.section.xml" />
8+ <xi:include href="ssh.section.xml" />
9+ <xi:include href="ipv4-config.section.xml" />
10+ <xi:include href="ipv6-config.section.xml" />
11+ <xi:include href="firewall.section.xml" />
12+ <xi:include href="wireless.section.xml" />
13+ <xi:include href="ad-hoc-network-config.section.xml" />
14+ <xi:include href="renaming-interfaces.section.xml" />
15+</chapter>
nixos/doc/manual/from_md/configuration/package-mgmt.chapter.xmlnew file+28
@@ -0,0 +1,28 @@
1+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="sec-package-management">
2+ <title>Package Management</title>
3+ <para>
4+ This section describes how to add additional packages to your
5+ system. NixOS has two distinct styles of package management:
6+ </para>
7+ <itemizedlist>
8+ <listitem>
9+ <para>
10+ <emphasis>Declarative</emphasis>, where you declare what
11+ packages you want in your <literal>configuration.nix</literal>.
12+ Every time you run <literal>nixos-rebuild</literal>, NixOS will
13+ ensure that you get a consistent set of binaries corresponding
14+ to your specification.
15+ </para>
16+ </listitem>
17+ <listitem>
18+ <para>
19+ <emphasis>Ad hoc</emphasis>, where you install, upgrade and
20+ uninstall packages via the <literal>nix-env</literal> command.
21+ This style allows mixing packages from different Nixpkgs
22+ versions. It’s the only choice for non-root users.
23+ </para>
24+ </listitem>
25+ </itemizedlist>
26+ <xi:include href="declarative-packages.section.xml" />
27+ <xi:include href="ad-hoc-packages.section.xml" />
28+</chapter>
nixos/doc/manual/from_md/configuration/profiles.chapter.xmlnew file+38
@@ -0,0 +1,38 @@
1+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="ch-profiles">
2+ <title>Profiles</title>
3+ <para>
4+ In some cases, it may be desirable to take advantage of
5+ commonly-used, predefined configurations provided by nixpkgs, but
6+ different from those that come as default. This is a role fulfilled
7+ by NixOS's Profiles, which come as files living in
8+ <literal>&lt;nixpkgs/nixos/modules/profiles&gt;</literal>. That is
9+ to say, expected usage is to add them to the imports list of your
10+ <literal>/etc/configuration.nix</literal> as such:
11+ </para>
12+ <programlisting language="bash">
13+imports = [
14+ &lt;nixpkgs/nixos/modules/profiles/profile-name.nix&gt;
15+];
16+</programlisting>
17+ <para>
18+ Even if some of these profiles seem only useful in the context of
19+ install media, many are actually intended to be used in real
20+ installs.
21+ </para>
22+ <para>
23+ What follows is a brief explanation on the purpose and use-case for
24+ each profile. Detailing each option configured by each one is out of
25+ scope.
26+ </para>
27+ <xi:include href="profiles/all-hardware.section.xml" />
28+ <xi:include href="profiles/base.section.xml" />
29+ <xi:include href="profiles/clone-config.section.xml" />
30+ <xi:include href="profiles/demo.section.xml" />
31+ <xi:include href="profiles/docker-container.section.xml" />
32+ <xi:include href="profiles/graphical.section.xml" />
33+ <xi:include href="profiles/hardened.section.xml" />
34+ <xi:include href="profiles/headless.section.xml" />
35+ <xi:include href="profiles/installation-device.section.xml" />
36+ <xi:include href="profiles/minimal.section.xml" />
37+ <xi:include href="profiles/qemu-guest.section.xml" />
38+</chapter>
nixos/doc/manual/from_md/configuration/renaming-interfaces.section.xml+1−1
@@ -32,7 +32,7 @@
3232 </para>
3333 <programlisting language="bash">
3434systemd.network.links.&quot;10-wan&quot; = {
35− matchConfig.MACAddress = &quot;52:54:00:12:01:01&quot;;
35+ matchConfig.PermanentMACAddress = &quot;52:54:00:12:01:01&quot;;
3636 linkConfig.Name = &quot;wan&quot;;
3737};
3838</programlisting>
nixos/doc/manual/from_md/development/activation-script.section.xmlnew file+150
@@ -0,0 +1,150 @@
1+<section xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="sec-activation-script">
2+ <title>Activation script</title>
3+ <para>
4+ The activation script is a bash script called to activate the new
5+ configuration which resides in a NixOS system in
6+ <literal>$out/activate</literal>. Since its contents depend on your
7+ system configuration, the contents may differ. This chapter explains
8+ how the script works in general and some common NixOS snippets.
9+ Please be aware that the script is executed on every boot and system
10+ switch, so tasks that can be performed in other places should be
11+ performed there (for example letting a directory of a service be
12+ created by systemd using mechanisms like
13+ <literal>StateDirectory</literal>,
14+ <literal>CacheDirectory</literal>, … or if that’s not possible using
15+ <literal>preStart</literal> of the service).
16+ </para>
17+ <para>
18+ Activation scripts are defined as snippets using
19+ <xref linkend="opt-system.activationScripts" />. They can either be
20+ a simple multiline string or an attribute set that can depend on
21+ other snippets. The builder for the activation script will take
22+ these dependencies into account and order the snippets accordingly.
23+ As a simple example:
24+ </para>
25+ <programlisting language="bash">
26+system.activationScripts.my-activation-script = {
27+ deps = [ &quot;etc&quot; ];
28+ # supportsDryActivation = true;
29+ text = ''
30+ echo &quot;Hallo i bims&quot;
31+ '';
32+};
33+</programlisting>
34+ <para>
35+ This example creates an activation script snippet that is run after
36+ the <literal>etc</literal> snippet. The special variable
37+ <literal>supportsDryActivation</literal> can be set so the snippet
38+ is also run when <literal>nixos-rebuild dry-activate</literal> is
39+ run. To differentiate between real and dry activation, the
40+ <literal>$NIXOS_ACTION</literal> environment variable can be read
41+ which is set to <literal>dry-activate</literal> when a dry
42+ activation is done.
43+ </para>
44+ <para>
45+ An activation script can write to special files instructing
46+ <literal>switch-to-configuration</literal> to restart/reload units.
47+ The script will take these requests into account and will
48+ incorperate the unit configuration as described above. This means
49+ that the activation script will <quote>fake</quote> a modified unit
50+ file and <literal>switch-to-configuration</literal> will act
51+ accordingly. By doing so, configuration like
52+ <link linkend="opt-systemd.services">systemd.services.&lt;name&gt;.restartIfChanged</link>
53+ is respected. Since the activation script is run
54+ <emphasis role="strong">after</emphasis> services are already
55+ stopped,
56+ <link linkend="opt-systemd.services">systemd.services.&lt;name&gt;.stopIfChanged</link>
57+ cannot be taken into account anymore and the unit is always
58+ restarted instead of being stopped and started afterwards.
59+ </para>
60+ <para>
61+ The files that can be written to are
62+ <literal>/run/nixos/activation-restart-list</literal> and
63+ <literal>/run/nixos/activation-reload-list</literal> with their
64+ respective counterparts for dry activation being
65+ <literal>/run/nixos/dry-activation-restart-list</literal> and
66+ <literal>/run/nixos/dry-activation-reload-list</literal>. Those
67+ files can contain newline-separated lists of unit names where
68+ duplicates are being ignored. These files are not create
69+ automatically and activation scripts must take the possiblility into
70+ account that they have to create them first.
71+ </para>
72+ <section xml:id="sec-activation-script-nixos-snippets">
73+ <title>NixOS snippets</title>
74+ <para>
75+ There are some snippets NixOS enables by default because disabling
76+ them would most likely break you system. This section lists a few
77+ of them and what they do:
78+ </para>
79+ <itemizedlist spacing="compact">
80+ <listitem>
81+ <para>
82+ <literal>binsh</literal> creates <literal>/bin/sh</literal>
83+ which points to the runtime shell
84+ </para>
85+ </listitem>
86+ <listitem>
87+ <para>
88+ <literal>etc</literal> sets up the contents of
89+ <literal>/etc</literal>, this includes systemd units and
90+ excludes <literal>/etc/passwd</literal>,
91+ <literal>/etc/group</literal>, and
92+ <literal>/etc/shadow</literal> (which are managed by the
93+ <literal>users</literal> snippet)
94+ </para>
95+ </listitem>
96+ <listitem>
97+ <para>
98+ <literal>hostname</literal> sets the system’s hostname in the
99+ kernel (not in <literal>/etc</literal>)
100+ </para>
101+ </listitem>
102+ <listitem>
103+ <para>
104+ <literal>modprobe</literal> sets the path to the
105+ <literal>modprobe</literal> binary for module auto-loading
106+ </para>
107+ </listitem>
108+ <listitem>
109+ <para>
110+ <literal>nix</literal> prepares the nix store and adds a
111+ default initial channel
112+ </para>
113+ </listitem>
114+ <listitem>
115+ <para>
116+ <literal>specialfs</literal> is responsible for mounting
117+ filesystems like <literal>/proc</literal> and
118+ <literal>sys</literal>
119+ </para>
120+ </listitem>
121+ <listitem>
122+ <para>
123+ <literal>users</literal> creates and removes users and groups
124+ by managing <literal>/etc/passwd</literal>,
125+ <literal>/etc/group</literal> and
126+ <literal>/etc/shadow</literal>. This also creates home
127+ directories
128+ </para>
129+ </listitem>
130+ <listitem>
131+ <para>
132+ <literal>usrbinenv</literal> creates
133+ <literal>/usr/bin/env</literal>
134+ </para>
135+ </listitem>
136+ <listitem>
137+ <para>
138+ <literal>var</literal> creates some directories in
139+ <literal>/var</literal> that are not service-specific
140+ </para>
141+ </listitem>
142+ <listitem>
143+ <para>
144+ <literal>wrappers</literal> creates setuid wrappers like
145+ <literal>ping</literal> and <literal>sudo</literal>
146+ </para>
147+ </listitem>
148+ </itemizedlist>
149+ </section>
150+</section>
nixos/doc/manual/from_md/development/building-nixos.chapter.xmldeleted−72
@@ -1,72 +0,0 @@
1−<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="sec-building-image">
2− <title>Building a NixOS (Live) ISO</title>
3− <para>
4− Default live installer configurations are available inside
5− <literal>nixos/modules/installer/cd-dvd</literal>. For building
6− other system images,
7− <link xlink:href="https://github.com/nix-community/nixos-generators">nixos-generators</link>
8− is a good place to start looking at.
9− </para>
10− <para>
11− You have two options:
12− </para>
13− <itemizedlist spacing="compact">
14− <listitem>
15− <para>
16− Use any of those default configurations as is
17− </para>
18− </listitem>
19− <listitem>
20− <para>
21− Combine them with (any of) your host config(s)
22− </para>
23− </listitem>
24− </itemizedlist>
25− <para>
26− System images, such as the live installer ones, know how to enforce
27− configuration settings on wich they immediately depend in order to
28− work correctly.
29− </para>
30− <para>
31− However, if you are confident, you can opt to override those
32− enforced values with <literal>mkForce</literal>.
33− </para>
34− <section xml:id="sec-building-image-instructions">
35− <title>Practical Instructions</title>
36− <programlisting>
37−$ git clone https://github.com/NixOS/nixpkgs.git
38−$ cd nixpkgs/nixos
39−$ nix-build -A config.system.build.isoImage -I nixos-config=modules/installer/cd-dvd/installation-cd-minimal.nix default.nix
40−</programlisting>
41− <para>
42− To check the content of an ISO image, mount it like so:
43− </para>
44− <programlisting>
45−# mount -o loop -t iso9660 ./result/iso/cd.iso /mnt/iso
46−</programlisting>
47− </section>
48− <section xml:id="sec-building-image-tech-notes">
49− <title>Technical Notes</title>
50− <para>
51− The config value enforcement is implemented via
52− <literal>mkImageMediaOverride = mkOverride 60;</literal> and
53− therefore primes over simple value assignments, but also yields to
54− <literal>mkForce</literal>.
55− </para>
56− <para>
57− This property allows image designers to implement in semantically
58− correct ways those configuration values upon which the correct
59− functioning of the image depends.
60− </para>
61− <para>
62− For example, the iso base image overrides those file systems which
63− it needs at a minimum for correct functioning, while the installer
64− base image overrides the entire file system layout because there
65− can’t be any other guarantees on a live medium than those given by
66− the live medium itself. The latter is especially true befor
67− formatting the target block device(s). On the other hand, the
68− netboot iso only overrides its minimum dependencies since netboot
69− images are always made-to-target.
70− </para>
71− </section>
72−</chapter>
nixos/doc/manual/from_md/development/meta-attributes.section.xml+42−2
@@ -8,8 +8,8 @@
88 <para>
99 <literal>meta</literal> is a top level attribute like
1010 <literal>options</literal> and <literal>config</literal>. Available
11− meta-attributes are <literal>maintainers</literal> and
12− <literal>doc</literal>.
11+ meta-attributes are <literal>maintainers</literal>,
12+ <literal>doc</literal>, and <literal>buildDocsInSandbox</literal>.
1313 </para>
1414 <para>
1515 Each of the meta-attributes must be defined at most once per module
@@ -29,6 +29,7 @@
2929 meta = {
3030 maintainers = with lib.maintainers; [ ericsagnes ];
3131 doc = ./default.xml;
32+ buildDocsInSandbox = true;
3233 };
3334}
3435</programlisting>
@@ -51,5 +52,44 @@
5152$ nix-build nixos/release.nix -A manual.x86_64-linux
5253</programlisting>
5354 </listitem>
55+ <listitem>
56+ <para>
57+ <literal>buildDocsInSandbox</literal> indicates whether the
58+ option documentation for the module can be built in a derivation
59+ sandbox. This option is currently only honored for modules
60+ shipped by nixpkgs. User modules and modules taken from
61+ <literal>NIXOS_EXTRA_MODULE_PATH</literal> are always built
62+ outside of the sandbox, as has been the case in previous
63+ releases.
64+ </para>
65+ <para>
66+ Building NixOS option documentation in a sandbox allows caching
67+ of the built documentation, which greatly decreases the amount
68+ of time needed to evaluate a system configuration that has NixOS
69+ documentation enabled. The sandbox also restricts which
70+ attributes may be referenced by documentation attributes (such
71+ as option descriptions) to the <literal>options</literal> and
72+ <literal>lib</literal> module arguments and the
73+ <literal>pkgs.formats</literal> attribute of the
74+ <literal>pkgs</literal> argument, <literal>config</literal> and
75+ the rest of <literal>pkgs</literal> are disallowed and will
76+ cause doc build failures when used. This restriction is
77+ necessary because we cannot reproduce the full nixpkgs
78+ instantiation with configuration and overlays from a system
79+ configuration inside the sandbox. The <literal>options</literal>
80+ argument only includes options of modules that are also built
81+ inside the sandbox, referencing an option of a module that isn’t
82+ built in the sandbox is also forbidden.
83+ </para>
84+ <para>
85+ The default is <literal>true</literal> and should usually not be
86+ changed; set it to <literal>false</literal> only if the module
87+ requires access to <literal>pkgs</literal> in its documentation
88+ (e.g. because it loads information from a linked package to
89+ build an option type) or if its documentation depends on other
90+ modules that also aren’t sandboxed (e.g. by using types defined
91+ in the other module).
92+ </para>
93+ </listitem>
5494 </itemizedlist>
5595</section>
nixos/doc/manual/from_md/development/nixos-tests.chapter.xmlnew file+14
@@ -0,0 +1,14 @@
1+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="sec-nixos-tests">
2+ <title>NixOS Tests</title>
3+ <para>
4+ When you add some feature to NixOS, you should write a test for it.
5+ NixOS tests are kept in the directory
6+ <literal>nixos/tests</literal>, and are executed (using Nix) by a
7+ testing framework that automatically starts one or more virtual
8+ machines containing the NixOS system(s) required for the test.
9+ </para>
10+ <xi:include href="writing-nixos-tests.section.xml" />
11+ <xi:include href="running-nixos-tests.section.xml" />
12+ <xi:include href="running-nixos-tests-interactively.section.xml" />
13+ <xi:include href="linking-nixos-tests-to-packages.section.xml" />
14+</chapter>
nixos/doc/manual/from_md/development/option-declarations.section.xml+231−107
@@ -38,9 +38,11 @@ options = {
3838 <listitem>
3939 <para>
4040 The type of the option (see
41− <xref linkend="sec-option-types" />). It may be omitted, but
42− that’s not advisable since it may lead to errors that are hard
43− to diagnose.
41+ <xref linkend="sec-option-types" />). This argument is
42+ mandatory for nixpkgs modules. Setting this is highly
43+ recommended for the sake of documentation and type checking.
44+ In case it is not set, a fallback type with unspecified
45+ behavior is used.
4446 </para>
4547 </listitem>
4648 </varlistentry>
@@ -57,13 +59,31 @@ options = {
5759 </para>
5860 </listitem>
5961 </varlistentry>
62+ <varlistentry>
63+ <term>
64+ <literal>defaultText</literal>
65+ </term>
66+ <listitem>
67+ <para>
68+ A textual representation of the default value to be rendered
69+ verbatim in the manual. Useful if the default value is a
70+ complex expression or depends on other values or packages. Use
71+ <literal>lib.literalExpression</literal> for a Nix expression,
72+ <literal>lib.literalDocBook</literal> for a plain English
73+ description in DocBook format.
74+ </para>
75+ </listitem>
76+ </varlistentry>
6077 <varlistentry>
6178 <term>
6279 <literal>example</literal>
6380 </term>
6481 <listitem>
6582 <para>
66− An example value that will be shown in the NixOS manual.
83+ An example value that will be shown in the NixOS manual. You
84+ can use <literal>lib.literalExpression</literal> and
85+ <literal>lib.literalDocBook</literal> in the same way as in
86+ <literal>defaultText</literal>.
6787 </para>
6888 </listitem>
6989 </varlistentry>
@@ -79,125 +99,229 @@ options = {
7999 </listitem>
80100 </varlistentry>
81101 </variablelist>
82− <section xml:id="sec-option-declarations-eot">
83− <title>Extensible Option Types</title>
84− <para>
85− Extensible option types is a feature that allow to extend certain
86− types declaration through multiple module files. This feature only
87− work with a restricted set of types, namely
88− <literal>enum</literal> and <literal>submodules</literal> and any
89− composed forms of them.
90− </para>
91− <para>
92− Extensible option types can be used for <literal>enum</literal>
93− options that affects multiple modules, or as an alternative to
94− related <literal>enable</literal> options.
95− </para>
96− <para>
97− As an example, we will take the case of display managers. There is
98− a central display manager module for generic display manager
99− options and a module file per display manager backend (sddm, gdm
100− ...).
101− </para>
102− <para>
103− There are two approach to this module structure:
104− </para>
105− <itemizedlist>
106− <listitem>
102+ <section xml:id="sec-option-declarations-util">
103+ <title>Utility functions for common option patterns</title>
104+ <section xml:id="sec-option-declarations-util-mkEnableOption">
105+ <title><literal>mkEnableOption</literal></title>
106+ <para>
107+ Creates an Option attribute set for a boolean value option i.e
108+ an option to be toggled on or off.
109+ </para>
110+ <para>
111+ This function takes a single string argument, the name of the
112+ thing to be toggled.
113+ </para>
114+ <para>
115+ The option’s description is <quote>Whether to enable
116+ &lt;name&gt;.</quote>.
117+ </para>
118+ <para>
119+ For example:
120+ </para>
121+ <anchor xml:id="ex-options-declarations-util-mkEnableOption-magic" />
122+ <programlisting language="bash">
123+lib.mkEnableOption &quot;magic&quot;
124+# is like
125+lib.mkOption {
126+ type = lib.types.bool;
127+ default = false;
128+ example = true;
129+ description = &quot;Whether to enable magic.&quot;;
130+}
131+</programlisting>
132+ <section xml:id="sec-option-declarations-util-mkPackageOption">
133+ <title><literal>mkPackageOption</literal></title>
107134 <para>
108− Managing the display managers independently by adding an
109− enable option to every display manager module backend. (NixOS)
135+ Usage:
110136 </para>
111− </listitem>
112− <listitem>
137+ <programlisting language="bash">
138+mkPackageOption pkgs &quot;name&quot; { default = [ &quot;path&quot; &quot;in&quot; &quot;pkgs&quot; ]; example = &quot;literal example&quot;; }
139+</programlisting>
113140 <para>
114− Managing the display managers in the central module by adding
115− an option to select which display manager backend to use.
141+ Creates an Option attribute set for an option that specifies
142+ the package a module should use for some purpose.
116143 </para>
117− </listitem>
118− </itemizedlist>
119− <para>
120− Both approaches have problems.
121− </para>
122− <para>
123− Making backends independent can quickly become hard to manage. For
124− display managers, there can be only one enabled at a time, but the
125− type system can not enforce this restriction as there is no
126− relation between each backend <literal>enable</literal> option. As
127− a result, this restriction has to be done explicitely by adding
128− assertions in each display manager backend module.
129− </para>
130− <para>
131− On the other hand, managing the display managers backends in the
132− central module will require to change the central module option
133− every time a new backend is added or removed.
134− </para>
135− <para>
136− By using extensible option types, it is possible to create a
137− placeholder option in the central module
138− (<link linkend="ex-option-declaration-eot-service">Example:
139− Extensible type placeholder in the service module</link>), and to
140− extend it in each backend module
141− (<link linkend="ex-option-declaration-eot-backend-gdm">Example:
142− Extending
143− <literal>services.xserver.displayManager.enable</literal> in the
144− <literal>gdm</literal> module</link>,
145− <link linkend="ex-option-declaration-eot-backend-sddm">Example:
146− Extending
147− <literal>services.xserver.displayManager.enable</literal> in the
148− <literal>sddm</literal> module</link>).
149− </para>
150− <para>
151− As a result, <literal>displayManager.enable</literal> option
152− values can be added without changing the main service module file
153− and the type system automatically enforce that there can only be a
154− single display manager enabled.
155− </para>
156− <anchor xml:id="ex-option-declaration-eot-service" />
157− <para>
158− <emphasis role="strong">Example: Extensible type placeholder in
159− the service module</emphasis>
160− </para>
161− <programlisting language="bash">
144+ <para>
145+ <emphasis role="strong">Note</emphasis>: You shouldn’t
146+ necessarily make package options for all of your modules. You
147+ can always overwrite a specific package throughout nixpkgs by
148+ using
149+ <link xlink:href="https://nixos.org/manual/nixpkgs/stable/#chap-overlays">nixpkgs
150+ overlays</link>.
151+ </para>
152+ <para>
153+ The default package is specified as a list of strings
154+ representing its attribute path in nixpkgs. Because of this,
155+ you need to pass nixpkgs itself as the first argument.
156+ </para>
157+ <para>
158+ The second argument is the name of the option, used in the
159+ description <quote>The &lt;name&gt; package to use.</quote>.
160+ You can also pass an example value, either a literal string or
161+ a package’s attribute path.
162+ </para>
163+ <para>
164+ You can omit the default path if the name of the option is
165+ also attribute path in nixpkgs.
166+ </para>
167+ <anchor xml:id="ex-options-declarations-util-mkPackageOption" />
168+ <para>
169+ Examples:
170+ </para>
171+ <anchor xml:id="ex-options-declarations-util-mkPackageOption-hello" />
172+ <programlisting language="bash">
173+lib.mkPackageOption pkgs &quot;hello&quot; { }
174+# is like
175+lib.mkOption {
176+ type = lib.types.package;
177+ default = pkgs.hello;
178+ defaultText = lib.literalExpression &quot;pkgs.hello&quot;;
179+ description = &quot;The hello package to use.&quot;;
180+}
181+</programlisting>
182+ <anchor xml:id="ex-options-declarations-util-mkPackageOption-ghc" />
183+ <programlisting language="bash">
184+lib.mkPackageOption pkgs &quot;GHC&quot; {
185+ default = [ &quot;ghc&quot; ];
186+ example = &quot;pkgs.haskell.package.ghc922.ghc.withPackages (hkgs: [ hkgs.primes ])&quot;;
187+}
188+# is like
189+lib.mkOption {
190+ type = lib.types.package;
191+ default = pkgs.ghc;
192+ defaultText = lib.literalExpression &quot;pkgs.ghc&quot;;
193+ example = lib.literalExpression &quot;pkgs.haskell.package.ghc922.ghc.withPackages (hkgs: [ hkgs.primes ])&quot;;
194+ description = &quot;The GHC package to use.&quot;;
195+}
196+</programlisting>
197+ <section xml:id="sec-option-declarations-eot">
198+ <title>Extensible Option Types</title>
199+ <para>
200+ Extensible option types is a feature that allow to extend
201+ certain types declaration through multiple module files.
202+ This feature only work with a restricted set of types,
203+ namely <literal>enum</literal> and
204+ <literal>submodules</literal> and any composed forms of
205+ them.
206+ </para>
207+ <para>
208+ Extensible option types can be used for
209+ <literal>enum</literal> options that affects multiple
210+ modules, or as an alternative to related
211+ <literal>enable</literal> options.
212+ </para>
213+ <para>
214+ As an example, we will take the case of display managers.
215+ There is a central display manager module for generic
216+ display manager options and a module file per display
217+ manager backend (sddm, gdm ...).
218+ </para>
219+ <para>
220+ There are two approaches we could take with this module
221+ structure:
222+ </para>
223+ <itemizedlist>
224+ <listitem>
225+ <para>
226+ Configuring the display managers independently by adding
227+ an enable option to every display manager module
228+ backend. (NixOS)
229+ </para>
230+ </listitem>
231+ <listitem>
232+ <para>
233+ Configuring the display managers in the central module
234+ by adding an option to select which display manager
235+ backend to use.
236+ </para>
237+ </listitem>
238+ </itemizedlist>
239+ <para>
240+ Both approaches have problems.
241+ </para>
242+ <para>
243+ Making backends independent can quickly become hard to
244+ manage. For display managers, there can only be one enabled
245+ at a time, but the type system cannot enforce this
246+ restriction as there is no relation between each backend’s
247+ <literal>enable</literal> option. As a result, this
248+ restriction has to be done explicitly by adding assertions
249+ in each display manager backend module.
250+ </para>
251+ <para>
252+ On the other hand, managing the display manager backends in
253+ the central module will require changing the central module
254+ option every time a new backend is added or removed.
255+ </para>
256+ <para>
257+ By using extensible option types, it is possible to create a
258+ placeholder option in the central module
259+ (<link linkend="ex-option-declaration-eot-service">Example:
260+ Extensible type placeholder in the service module</link>),
261+ and to extend it in each backend module
262+ (<link linkend="ex-option-declaration-eot-backend-gdm">Example:
263+ Extending
264+ <literal>services.xserver.displayManager.enable</literal> in
265+ the <literal>gdm</literal> module</link>,
266+ <link linkend="ex-option-declaration-eot-backend-sddm">Example:
267+ Extending
268+ <literal>services.xserver.displayManager.enable</literal> in
269+ the <literal>sddm</literal> module</link>).
270+ </para>
271+ <para>
272+ As a result, <literal>displayManager.enable</literal> option
273+ values can be added without changing the main service module
274+ file and the type system automatically enforces that there
275+ can only be a single display manager enabled.
276+ </para>
277+ <anchor xml:id="ex-option-declaration-eot-service" />
278+ <para>
279+ <emphasis role="strong">Example: Extensible type placeholder
280+ in the service module</emphasis>
281+ </para>
282+ <programlisting language="bash">
162283services.xserver.displayManager.enable = mkOption {
163284 description = &quot;Display manager to use&quot;;
164285 type = with types; nullOr (enum [ ]);
165286};
166287</programlisting>
167− <anchor xml:id="ex-option-declaration-eot-backend-gdm" />
168− <para>
169− <emphasis role="strong">Example: Extending
170− <literal>services.xserver.displayManager.enable</literal> in the
171− <literal>gdm</literal> module</emphasis>
172− </para>
173− <programlisting language="bash">
288+ <anchor xml:id="ex-option-declaration-eot-backend-gdm" />
289+ <para>
290+ <emphasis role="strong">Example: Extending
291+ <literal>services.xserver.displayManager.enable</literal> in
292+ the <literal>gdm</literal> module</emphasis>
293+ </para>
294+ <programlisting language="bash">
174295services.xserver.displayManager.enable = mkOption {
175296 type = with types; nullOr (enum [ &quot;gdm&quot; ]);
176297};
177298</programlisting>
178− <anchor xml:id="ex-option-declaration-eot-backend-sddm" />
179− <para>
180− <emphasis role="strong">Example: Extending
181− <literal>services.xserver.displayManager.enable</literal> in the
182− <literal>sddm</literal> module</emphasis>
183− </para>
184− <programlisting language="bash">
299+ <anchor xml:id="ex-option-declaration-eot-backend-sddm" />
300+ <para>
301+ <emphasis role="strong">Example: Extending
302+ <literal>services.xserver.displayManager.enable</literal> in
303+ the <literal>sddm</literal> module</emphasis>
304+ </para>
305+ <programlisting language="bash">
185306services.xserver.displayManager.enable = mkOption {
186307 type = with types; nullOr (enum [ &quot;sddm&quot; ]);
187308};
188309</programlisting>
189− <para>
190− The placeholder declaration is a standard
191− <literal>mkOption</literal> declaration, but it is important that
192− extensible option declarations only use the
193− <literal>type</literal> argument.
194− </para>
195− <para>
196− Extensible option types work with any of the composed variants of
197− <literal>enum</literal> such as
198− <literal>with types; nullOr (enum [ &quot;foo&quot; &quot;bar&quot; ])</literal>
199− or
200− <literal>with types; listOf (enum [ &quot;foo&quot; &quot;bar&quot; ])</literal>.
201− </para>
310+ <para>
311+ The placeholder declaration is a standard
312+ <literal>mkOption</literal> declaration, but it is important
313+ that extensible option declarations only use the
314+ <literal>type</literal> argument.
315+ </para>
316+ <para>
317+ Extensible option types work with any of the composed
318+ variants of <literal>enum</literal> such as
319+ <literal>with types; nullOr (enum [ &quot;foo&quot; &quot;bar&quot; ])</literal>
320+ or
321+ <literal>with types; listOf (enum [ &quot;foo&quot; &quot;bar&quot; ])</literal>.
322+ </para>
323+ </section>
324+ </section>
325+ </section>
202326 </section>
203327</section>
nixos/doc/manual/from_md/development/option-types.section.xml+56−5
@@ -30,10 +30,10 @@
3030 </term>
3131 <listitem>
3232 <para>
33− A filesystem path, defined as anything that when coerced to
34− a string starts with a slash. Even if derivations can be
35− considered as path, the more specific
36− <literal>types.package</literal> should be preferred.
33+ A filesystem path is anything that starts with a slash when
34+ coerced to a string. Even if derivations can be considered
35+ as paths, the more specific <literal>types.package</literal>
36+ should be preferred.
3737 </para>
3838 </listitem>
3939 </varlistentry>
@@ -43,7 +43,9 @@
4343 </term>
4444 <listitem>
4545 <para>
46− A derivation or a store path.
46+ A top-level store path. This can be an attribute set
47+ pointing to a store path, like a derivation or a flake
48+ input.
4749 </para>
4850 </listitem>
4951 </varlistentry>
@@ -92,6 +94,39 @@
9294</programlisting>
9395 </listitem>
9496 </varlistentry>
97+ <varlistentry>
98+ <term>
99+ <literal>types.raw</literal>
100+ </term>
101+ <listitem>
102+ <para>
103+ A type which doesn’t do any checking, merging or nested
104+ evaluation. It accepts a single arbitrary value that is not
105+ recursed into, making it useful for values coming from
106+ outside the module system, such as package sets or arbitrary
107+ data. Options of this type are still evaluated according to
108+ priorities and conditionals, so <literal>mkForce</literal>,
109+ <literal>mkIf</literal> and co. still work on the option
110+ value itself, but not for any value nested within it. This
111+ type should only be used when checking, merging and nested
112+ evaluation are not desirable.
113+ </para>
114+ </listitem>
115+ </varlistentry>
116+ <varlistentry>
117+ <term>
118+ <literal>types.optionType</literal>
119+ </term>
120+ <listitem>
121+ <para>
122+ The type of an option’s type. Its merging operation ensures
123+ that nested options have the correct file location
124+ annotated, and that if possible, multiple option definitions
125+ are correctly merged together. The main use case is as the
126+ type of the <literal>_module.freeformType</literal> option.
127+ </para>
128+ </listitem>
129+ </varlistentry>
95130 <varlistentry>
96131 <term>
97132 <literal>types.attrs</literal>
@@ -496,6 +531,22 @@
496531 </para>
497532 </listitem>
498533 </varlistentry>
534+ <varlistentry>
535+ <term>
536+ <literal>types.unique</literal>
537+ <literal>{ message = m }</literal>
538+ <emphasis><literal>t</literal></emphasis>
539+ </term>
540+ <listitem>
541+ <para>
542+ Ensures that type <emphasis><literal>t</literal></emphasis>
543+ cannot be merged. Prints the message
544+ <emphasis><literal>m</literal></emphasis>, after the line
545+ <literal>The option &lt;option path&gt; is defined multiple times.</literal>
546+ and before a list of definition locations.
547+ </para>
548+ </listitem>
549+ </varlistentry>
499550 <varlistentry>
500551 <term>
501552 <literal>types.either</literal>
nixos/doc/manual/from_md/development/running-nixos-tests-interactively.section.xml+9−9
@@ -5,19 +5,19 @@
55 useful when developing or debugging a test:
66 </para>
77 <programlisting>
8−$ nix-build nixos/tests/login.nix -A driverInteractive
9−$ ./result/bin/nixos-test-driver --interactive
10−starting VDE switch for network 1
11−&gt;
8+$ nix-build . -A nixosTests.login.driverInteractive
9+$ ./result/bin/nixos-test-driver
10+[...]
11+&gt;&gt;&gt;
1212</programlisting>
1313 <para>
1414 You can then take any Python statement, e.g.
1515 </para>
1616 <programlisting language="python">
17−&gt; start_all()
18−&gt; test_script()
19−&gt; machine.succeed(&quot;touch /tmp/foo&quot;)
20−&gt; print(machine.succeed(&quot;pwd&quot;)) # Show stdout of command
17+&gt;&gt;&gt; start_all()
18+&gt;&gt;&gt; test_script()
19+&gt;&gt;&gt; machine.succeed(&quot;touch /tmp/foo&quot;)
20+&gt;&gt;&gt; print(machine.succeed(&quot;pwd&quot;)) # Show stdout of command
2121</programlisting>
2222 <para>
2323 The function <literal>test_script</literal> executes the entire test
@@ -30,7 +30,7 @@ starting VDE switch for network 1
3030 the <literal>--keep-vm-state</literal> flag.
3131 </para>
3232 <programlisting>
33−$ ./result/bin/nixos-test-driver --interactive --keep-vm-state
33+$ ./result/bin/nixos-test-driver --keep-vm-state
3434</programlisting>
3535 <para>
3636 The machine state is stored in the
nixos/doc/manual/from_md/development/running-nixos-tests.section.xml+2−2
@@ -26,9 +26,9 @@ machine: QEMU running (pid 8841)
2626 perform a build that starts a QEMU/KVM virtual machine containing a
2727 NixOS system. The virtual machine mounts the Nix store of the host;
2828 this makes VM creation very fast, as no disk image needs to be
29− created. Afterwards, you can view a pretty-printed log of the test:
29+ created. Afterwards, you can view a log of the test:
3030 </para>
3131 <programlisting>
32−$ firefox result/log.html
32+$ nix-store --read-log result
3333</programlisting>
3434</section>
nixos/doc/manual/from_md/development/settings-options.section.xml+136
@@ -53,6 +53,38 @@
5353 <literal>pkgs.formats</literal>:
5454 </para>
5555 <variablelist>
56+ <varlistentry>
57+ <term>
58+ <literal>pkgs.formats.javaProperties</literal> {
59+ <emphasis><literal>comment</literal></emphasis> ?
60+ <literal>&quot;Generated with Nix&quot;</literal> }
61+ </term>
62+ <listitem>
63+ <para>
64+ A function taking an attribute set with values
65+ </para>
66+ <variablelist>
67+ <varlistentry>
68+ <term>
69+ <literal>comment</literal>
70+ </term>
71+ <listitem>
72+ <para>
73+ A string to put at the start of the file in a comment.
74+ It can have multiple lines.
75+ </para>
76+ </listitem>
77+ </varlistentry>
78+ </variablelist>
79+ <para>
80+ It returns the <literal>type</literal>:
81+ <literal>attrsOf str</literal> and a function
82+ <literal>generate</literal> to build a Java
83+ <literal>.properties</literal> file, taking care of the
84+ correct escaping, etc.
85+ </para>
86+ </listitem>
87+ </varlistentry>
5688 <varlistentry>
5789 <term>
5890 <literal>pkgs.formats.json</literal> { }
@@ -137,6 +169,97 @@
137169 </para>
138170 </listitem>
139171 </varlistentry>
172+ <varlistentry>
173+ <term>
174+ <literal>pkgs.formats.elixirConf { elixir ? pkgs.elixir }</literal>
175+ </term>
176+ <listitem>
177+ <para>
178+ A function taking an attribute set with values
179+ </para>
180+ <variablelist>
181+ <varlistentry>
182+ <term>
183+ <literal>elixir</literal>
184+ </term>
185+ <listitem>
186+ <para>
187+ The Elixir package which will be used to format the
188+ generated output
189+ </para>
190+ </listitem>
191+ </varlistentry>
192+ </variablelist>
193+ <para>
194+ It returns a set with Elixir-Config-specific attributes
195+ <literal>type</literal>, <literal>lib</literal>, and
196+ <literal>generate</literal> as specified
197+ <link linkend="pkgs-formats-result">below</link>.
198+ </para>
199+ <para>
200+ The <literal>lib</literal> attribute contains functions to
201+ be used in settings, for generating special Elixir values:
202+ </para>
203+ <variablelist>
204+ <varlistentry>
205+ <term>
206+ <literal>mkRaw elixirCode</literal>
207+ </term>
208+ <listitem>
209+ <para>
210+ Outputs the given string as raw Elixir code
211+ </para>
212+ </listitem>
213+ </varlistentry>
214+ <varlistentry>
215+ <term>
216+ <literal>mkGetEnv { envVariable, fallback ? null }</literal>
217+ </term>
218+ <listitem>
219+ <para>
220+ Makes the configuration fetch an environment variable
221+ at runtime
222+ </para>
223+ </listitem>
224+ </varlistentry>
225+ <varlistentry>
226+ <term>
227+ <literal>mkAtom atom</literal>
228+ </term>
229+ <listitem>
230+ <para>
231+ Outputs the given string as an Elixir atom, instead of
232+ the default Elixir binary string. Note: lowercase
233+ atoms still needs to be prefixed with
234+ <literal>:</literal>
235+ </para>
236+ </listitem>
237+ </varlistentry>
238+ <varlistentry>
239+ <term>
240+ <literal>mkTuple array</literal>
241+ </term>
242+ <listitem>
243+ <para>
244+ Outputs the given array as an Elixir tuple, instead of
245+ the default Elixir list
246+ </para>
247+ </listitem>
248+ </varlistentry>
249+ <varlistentry>
250+ <term>
251+ <literal>mkMap attrset</literal>
252+ </term>
253+ <listitem>
254+ <para>
255+ Outputs the given attribute set as an Elixir map,
256+ instead of the default Elixir keyword list
257+ </para>
258+ </listitem>
259+ </varlistentry>
260+ </variablelist>
261+ </listitem>
262+ </varlistentry>
140263 </variablelist>
141264 <para xml:id="pkgs-formats-result">
142265 These functions all return an attribute set with these values:
@@ -152,6 +275,19 @@
152275 </para>
153276 </listitem>
154277 </varlistentry>
278+ <varlistentry>
279+ <term>
280+ <literal>lib</literal>
281+ </term>
282+ <listitem>
283+ <para>
284+ Utility functions for convenience, or special interactions
285+ with the format. This attribute is optional. It may contain
286+ inside a <literal>types</literal> attribute containing types
287+ specific to this format.
288+ </para>
289+ </listitem>
290+ </varlistentry>
155291 <varlistentry>
156292 <term>
157293 <literal>generate</literal>
nixos/doc/manual/from_md/development/unit-handling.section.xmlnew file+131
@@ -0,0 +1,131 @@
1+<section xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="sec-unit-handling">
2+ <title>Unit handling</title>
3+ <para>
4+ To figure out what units need to be
5+ started/stopped/restarted/reloaded, the script first checks the
6+ current state of the system, similar to what
7+ <literal>systemctl list-units</literal> shows. For each of the
8+ units, the script goes through the following checks:
9+ </para>
10+ <itemizedlist>
11+ <listitem>
12+ <para>
13+ Is the unit file still in the new system? If not,
14+ <emphasis role="strong">stop</emphasis> the service unless it
15+ sets <literal>X-StopOnRemoval</literal> in the
16+ <literal>[Unit]</literal> section to <literal>false</literal>.
17+ </para>
18+ </listitem>
19+ <listitem>
20+ <para>
21+ Is it a <literal>.target</literal> unit? If so,
22+ <emphasis role="strong">start</emphasis> it unless it sets
23+ <literal>RefuseManualStart</literal> in the
24+ <literal>[Unit]</literal> section to <literal>true</literal> or
25+ <literal>X-OnlyManualStart</literal> in the
26+ <literal>[Unit]</literal> section to <literal>true</literal>.
27+ Also <emphasis role="strong">stop</emphasis> the unit again
28+ unless it sets <literal>X-StopOnReconfiguration</literal> to
29+ <literal>false</literal>.
30+ </para>
31+ </listitem>
32+ <listitem>
33+ <para>
34+ Are the contents of the unit files different? They are compared
35+ by parsing them and comparing their contents. If they are
36+ different but only <literal>X-Reload-Triggers</literal> in the
37+ <literal>[Unit]</literal> section is changed,
38+ <emphasis role="strong">reload</emphasis> the unit. The NixOS
39+ module system allows setting these triggers with the option
40+ <link linkend="opt-systemd.services">systemd.services.&lt;name&gt;.reloadTriggers</link>.
41+ There are some additional keys in the <literal>[Unit]</literal>
42+ section that are ignored as well. If the unit files differ in
43+ any way, the following actions are performed:
44+ </para>
45+ <itemizedlist>
46+ <listitem>
47+ <para>
48+ <literal>.path</literal> and <literal>.slice</literal> units
49+ are ignored. There is no need to restart them since changes
50+ in their values are applied by systemd when systemd is
51+ reloaded.
52+ </para>
53+ </listitem>
54+ <listitem>
55+ <para>
56+ <literal>.mount</literal> units are
57+ <emphasis role="strong">reload</emphasis>ed. These mostly
58+ come from the <literal>/etc/fstab</literal> parser.
59+ </para>
60+ </listitem>
61+ <listitem>
62+ <para>
63+ <literal>.socket</literal> units are currently ignored. This
64+ is to be fixed at a later point.
65+ </para>
66+ </listitem>
67+ <listitem>
68+ <para>
69+ The rest of the units (mostly <literal>.service</literal>
70+ units) are then <emphasis role="strong">reload</emphasis>ed
71+ if <literal>X-ReloadIfChanged</literal> in the
72+ <literal>[Service]</literal> section is set to
73+ <literal>true</literal> (exposed via
74+ <link linkend="opt-systemd.services">systemd.services.&lt;name&gt;.reloadIfChanged</link>).
75+ A little exception is done for units that were deactivated
76+ in the meantime, for example because they require a unit
77+ that got stopped before. These are
78+ <emphasis role="strong">start</emphasis>ed instead of
79+ reloaded.
80+ </para>
81+ </listitem>
82+ <listitem>
83+ <para>
84+ If the reload flag is not set, some more flags decide if the
85+ unit is skipped. These flags are
86+ <literal>X-RestartIfChanged</literal> in the
87+ <literal>[Service]</literal> section (exposed via
88+ <link linkend="opt-systemd.services">systemd.services.&lt;name&gt;.restartIfChanged</link>),
89+ <literal>RefuseManualStop</literal> in the
90+ <literal>[Unit]</literal> section, and
91+ <literal>X-OnlyManualStart</literal> in the
92+ <literal>[Unit]</literal> section.
93+ </para>
94+ </listitem>
95+ <listitem>
96+ <para>
97+ Further behavior depends on the unit having
98+ <literal>X-StopIfChanged</literal> in the
99+ <literal>[Service]</literal> section set to
100+ <literal>true</literal> (exposed via
101+ <link linkend="opt-systemd.services">systemd.services.&lt;name&gt;.stopIfChanged</link>).
102+ This is set to <literal>true</literal> by default and must
103+ be explicitly turned off if not wanted. If the flag is
104+ enabled, the unit is
105+ <emphasis role="strong">stop</emphasis>ped and then
106+ <emphasis role="strong">start</emphasis>ed. If not, the unit
107+ is <emphasis role="strong">restart</emphasis>ed. The goal of
108+ the flag is to make sure that the new unit never runs in the
109+ old environment which is still in place before the
110+ activation script is run. This behavior is different when
111+ the service is socket-activated, as outlined in the
112+ following steps.
113+ </para>
114+ </listitem>
115+ <listitem>
116+ <para>
117+ The last thing that is taken into account is whether the
118+ unit is a service and socket-activated. If
119+ <literal>X-StopIfChanged</literal> is
120+ <emphasis role="strong">not</emphasis> set, the service is
121+ <emphasis role="strong">restart</emphasis>ed with the
122+ others. If it is set, both the service and the socket are
123+ <emphasis role="strong">stop</emphasis>ped and the socket is
124+ <emphasis role="strong">start</emphasis>ed, leaving socket
125+ activation to start the service when it’s needed.
126+ </para>
127+ </listitem>
128+ </itemizedlist>
129+ </listitem>
130+ </itemizedlist>
131+</section>
nixos/doc/manual/from_md/development/what-happens-during-a-system-switch.chapter.xmlnew file+122
@@ -0,0 +1,122 @@
1+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="sec-switching-systems">
2+ <title>What happens during a system switch?</title>
3+ <para>
4+ Running <literal>nixos-rebuild switch</literal> is one of the more
5+ common tasks under NixOS. This chapter explains some of the
6+ internals of this command to make it simpler for new module
7+ developers to configure their units correctly and to make it easier
8+ to understand what is happening and why for curious administrators.
9+ </para>
10+ <para>
11+ <literal>nixos-rebuild</literal>, like many deployment solutions,
12+ calls <literal>switch-to-configuration</literal> which resides in a
13+ NixOS system at <literal>$out/bin/switch-to-configuration</literal>.
14+ The script is called with the action that is to be performed like
15+ <literal>switch</literal>, <literal>test</literal>,
16+ <literal>boot</literal>. There is also the
17+ <literal>dry-activate</literal> action which does not really perform
18+ the actions but rather prints what it would do if you called it with
19+ <literal>test</literal>. This feature can be used to check what
20+ service states would be changed if the configuration was switched
21+ to.
22+ </para>
23+ <para>
24+ If the action is <literal>switch</literal> or
25+ <literal>boot</literal>, the bootloader is updated first so the
26+ configuration will be the next one to boot. Unless
27+ <literal>NIXOS_NO_SYNC</literal> is set to <literal>1</literal>,
28+ <literal>/nix/store</literal> is synced to disk.
29+ </para>
30+ <para>
31+ If the action is <literal>switch</literal> or
32+ <literal>test</literal>, the currently running system is inspected
33+ and the actions to switch to the new system are calculated. This
34+ process takes two data sources into account:
35+ <literal>/etc/fstab</literal> and the current systemd status. Mounts
36+ and swaps are read from <literal>/etc/fstab</literal> and the
37+ corresponding actions are generated. If a new mount is added, for
38+ example, the proper <literal>.mount</literal> unit is marked to be
39+ started. The current systemd state is inspected, the difference
40+ between the current system and the desired configuration is
41+ calculated and actions are generated to get to this state. There are
42+ a lot of nuances that can be controlled by the units which are
43+ explained here.
44+ </para>
45+ <para>
46+ After calculating what should be done, the actions are carried out.
47+ The order of actions is always the same:
48+ </para>
49+ <itemizedlist spacing="compact">
50+ <listitem>
51+ <para>
52+ Stop units (<literal>systemctl stop</literal>)
53+ </para>
54+ </listitem>
55+ <listitem>
56+ <para>
57+ Run activation script (<literal>$out/activate</literal>)
58+ </para>
59+ </listitem>
60+ <listitem>
61+ <para>
62+ See if the activation script requested more units to restart
63+ </para>
64+ </listitem>
65+ <listitem>
66+ <para>
67+ Restart systemd if needed
68+ (<literal>systemd daemon-reexec</literal>)
69+ </para>
70+ </listitem>
71+ <listitem>
72+ <para>
73+ Forget about the failed state of units
74+ (<literal>systemctl reset-failed</literal>)
75+ </para>
76+ </listitem>
77+ <listitem>
78+ <para>
79+ Reload systemd (<literal>systemctl daemon-reload</literal>)
80+ </para>
81+ </listitem>
82+ <listitem>
83+ <para>
84+ Reload systemd user instances
85+ (<literal>systemctl --user daemon-reload</literal>)
86+ </para>
87+ </listitem>
88+ <listitem>
89+ <para>
90+ Set up tmpfiles (<literal>systemd-tmpfiles --create</literal>)
91+ </para>
92+ </listitem>
93+ <listitem>
94+ <para>
95+ Reload units (<literal>systemctl reload</literal>)
96+ </para>
97+ </listitem>
98+ <listitem>
99+ <para>
100+ Restart units (<literal>systemctl restart</literal>)
101+ </para>
102+ </listitem>
103+ <listitem>
104+ <para>
105+ Start units (<literal>systemctl start</literal>)
106+ </para>
107+ </listitem>
108+ <listitem>
109+ <para>
110+ Inspect what changed during these actions and print units that
111+ failed and that were newly started
112+ </para>
113+ </listitem>
114+ </itemizedlist>
115+ <para>
116+ Most of these actions are either self-explaining but some of them
117+ have to do with our units or the activation script. For this reason,
118+ these topics are explained in the next sections.
119+ </para>
120+ <xi:include href="unit-handling.section.xml" />
121+ <xi:include href="activation-script.section.xml" />
122+</chapter>
nixos/doc/manual/from_md/development/writing-modules.chapter.xmlnew file+245
@@ -0,0 +1,245 @@
1+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="sec-writing-modules">
2+ <title>Writing NixOS Modules</title>
3+ <para>
4+ NixOS has a modular system for declarative configuration. This
5+ system combines multiple <emphasis>modules</emphasis> to produce the
6+ full system configuration. One of the modules that constitute the
7+ configuration is <literal>/etc/nixos/configuration.nix</literal>.
8+ Most of the others live in the
9+ <link xlink:href="https://github.com/NixOS/nixpkgs/tree/master/nixos/modules"><literal>nixos/modules</literal></link>
10+ subdirectory of the Nixpkgs tree.
11+ </para>
12+ <para>
13+ Each NixOS module is a file that handles one logical aspect of the
14+ configuration, such as a specific kind of hardware, a service, or
15+ network settings. A module configuration does not have to handle
16+ everything from scratch; it can use the functionality provided by
17+ other modules for its implementation. Thus a module can
18+ <emphasis>declare</emphasis> options that can be used by other
19+ modules, and conversely can <emphasis>define</emphasis> options
20+ provided by other modules in its own implementation. For example,
21+ the module
22+ <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/security/pam.nix"><literal>pam.nix</literal></link>
23+ declares the option <literal>security.pam.services</literal> that
24+ allows other modules (e.g.
25+ <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/networking/ssh/sshd.nix"><literal>sshd.nix</literal></link>)
26+ to define PAM services; and it defines the option
27+ <literal>environment.etc</literal> (declared by
28+ <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/system/etc/etc.nix"><literal>etc.nix</literal></link>)
29+ to cause files to be created in <literal>/etc/pam.d</literal>.
30+ </para>
31+ <para>
32+ In <xref linkend="sec-configuration-syntax" />, we saw the following
33+ structure of NixOS modules:
34+ </para>
35+ <programlisting language="bash">
36+{ config, pkgs, ... }:
37+
38+{ option definitions
39+}
40+</programlisting>
41+ <para>
42+ This is actually an <emphasis>abbreviated</emphasis> form of module
43+ that only defines options, but does not declare any. The structure
44+ of full NixOS modules is shown in
45+ <link linkend="ex-module-syntax">Example: Structure of NixOS
46+ Modules</link>.
47+ </para>
48+ <anchor xml:id="ex-module-syntax" />
49+ <para>
50+ <emphasis role="strong">Example: Structure of NixOS
51+ Modules</emphasis>
52+ </para>
53+ <programlisting language="bash">
54+{ config, pkgs, ... }:
55+
56+{
57+ imports =
58+ [ paths of other modules
59+ ];
60+
61+ options = {
62+ option declarations
63+ };
64+
65+ config = {
66+ option definitions
67+ };
68+}
69+</programlisting>
70+ <para>
71+ The meaning of each part is as follows.
72+ </para>
73+ <itemizedlist>
74+ <listitem>
75+ <para>
76+ The first line makes the current Nix expression a function. The
77+ variable <literal>pkgs</literal> contains Nixpkgs (by default,
78+ it takes the <literal>nixpkgs</literal> entry of
79+ <literal>NIX_PATH</literal>, see the
80+ <link xlink:href="https://nixos.org/manual/nix/stable/#sec-common-env">Nix
81+ manual</link> for further details), while
82+ <literal>config</literal> contains the full system
83+ configuration. This line can be omitted if there is no reference
84+ to <literal>pkgs</literal> and <literal>config</literal> inside
85+ the module.
86+ </para>
87+ </listitem>
88+ <listitem>
89+ <para>
90+ This <literal>imports</literal> list enumerates the paths to
91+ other NixOS modules that should be included in the evaluation of
92+ the system configuration. A default set of modules is defined in
93+ the file <literal>modules/module-list.nix</literal>. These don't
94+ need to be added in the import list.
95+ </para>
96+ </listitem>
97+ <listitem>
98+ <para>
99+ The attribute <literal>options</literal> is a nested set of
100+ <emphasis>option declarations</emphasis> (described below).
101+ </para>
102+ </listitem>
103+ <listitem>
104+ <para>
105+ The attribute <literal>config</literal> is a nested set of
106+ <emphasis>option definitions</emphasis> (also described below).
107+ </para>
108+ </listitem>
109+ </itemizedlist>
110+ <para>
111+ <link linkend="locate-example">Example: NixOS Module for the
112+ <quote>locate</quote> Service</link> shows a module that handles the
113+ regular update of the <quote>locate</quote> database, an index of
114+ all files in the file system. This module declares two options that
115+ can be defined by other modules (typically the user’s
116+ <literal>configuration.nix</literal>):
117+ <literal>services.locate.enable</literal> (whether the database
118+ should be updated) and <literal>services.locate.interval</literal>
119+ (when the update should be done). It implements its functionality by
120+ defining two options declared by other modules:
121+ <literal>systemd.services</literal> (the set of all systemd
122+ services) and <literal>systemd.timers</literal> (the list of
123+ commands to be executed periodically by <literal>systemd</literal>).
124+ </para>
125+ <para>
126+ Care must be taken when writing systemd services using
127+ <literal>Exec*</literal> directives. By default systemd performs
128+ substitution on <literal>%&lt;char&gt;</literal> specifiers in these
129+ directives, expands environment variables from
130+ <literal>$FOO</literal> and <literal>${FOO}</literal>, splits
131+ arguments on whitespace, and splits commands on
132+ <literal>;</literal>. All of these must be escaped to avoid
133+ unexpected substitution or splitting when interpolating into an
134+ <literal>Exec*</literal> directive, e.g. when using an
135+ <literal>extraArgs</literal> option to pass additional arguments to
136+ the service. The functions
137+ <literal>utils.escapeSystemdExecArg</literal> and
138+ <literal>utils.escapeSystemdExecArgs</literal> are provided for
139+ this, see <link linkend="exec-escaping-example">Example: Escaping in
140+ Exec directives</link> for an example. When using these functions
141+ system environment substitution should <emphasis>not</emphasis> be
142+ disabled explicitly.
143+ </para>
144+ <anchor xml:id="locate-example" />
145+ <para>
146+ <emphasis role="strong">Example: NixOS Module for the
147+ <quote>locate</quote> Service</emphasis>
148+ </para>
149+ <programlisting language="bash">
150+{ config, lib, pkgs, ... }:
151+
152+with lib;
153+
154+let
155+ cfg = config.services.locate;
156+in {
157+ options.services.locate = {
158+ enable = mkOption {
159+ type = types.bool;
160+ default = false;
161+ description = ''
162+ If enabled, NixOS will periodically update the database of
163+ files used by the locate command.
164+ '';
165+ };
166+
167+ interval = mkOption {
168+ type = types.str;
169+ default = &quot;02:15&quot;;
170+ example = &quot;hourly&quot;;
171+ description = ''
172+ Update the locate database at this interval. Updates by
173+ default at 2:15 AM every day.
174+
175+ The format is described in
176+ systemd.time(7).
177+ '';
178+ };
179+
180+ # Other options omitted for documentation
181+ };
182+
183+ config = {
184+ systemd.services.update-locatedb =
185+ { description = &quot;Update Locate Database&quot;;
186+ path = [ pkgs.su ];
187+ script =
188+ ''
189+ mkdir -m 0755 -p $(dirname ${toString cfg.output})
190+ exec updatedb \
191+ --localuser=${cfg.localuser} \
192+ ${optionalString (!cfg.includeStore) &quot;--prunepaths='/nix/store'&quot;} \
193+ --output=${toString cfg.output} ${concatStringsSep &quot; &quot; cfg.extraFlags}
194+ '';
195+ };
196+
197+ systemd.timers.update-locatedb = mkIf cfg.enable
198+ { description = &quot;Update timer for locate database&quot;;
199+ partOf = [ &quot;update-locatedb.service&quot; ];
200+ wantedBy = [ &quot;timers.target&quot; ];
201+ timerConfig.OnCalendar = cfg.interval;
202+ };
203+ };
204+}
205+</programlisting>
206+ <anchor xml:id="exec-escaping-example" />
207+ <para>
208+ <emphasis role="strong">Example: Escaping in Exec
209+ directives</emphasis>
210+ </para>
211+ <programlisting language="bash">
212+{ config, lib, pkgs, utils, ... }:
213+
214+with lib;
215+
216+let
217+ cfg = config.services.echo;
218+ echoAll = pkgs.writeScript &quot;echo-all&quot; ''
219+ #! ${pkgs.runtimeShell}
220+ for s in &quot;$@&quot;; do
221+ printf '%s\n' &quot;$s&quot;
222+ done
223+ '';
224+ args = [ &quot;a%Nything&quot; &quot;lang=\${LANG}&quot; &quot;;&quot; &quot;/bin/sh -c date&quot; ];
225+in {
226+ systemd.services.echo =
227+ { description = &quot;Echo to the journal&quot;;
228+ wantedBy = [ &quot;multi-user.target&quot; ];
229+ serviceConfig.Type = &quot;oneshot&quot;;
230+ serviceConfig.ExecStart = ''
231+ ${echoAll} ${utils.escapeSystemdExecArgs args}
232+ '';
233+ };
234+}
235+</programlisting>
236+ <xi:include href="option-declarations.section.xml" />
237+ <xi:include href="option-types.section.xml" />
238+ <xi:include href="option-def.section.xml" />
239+ <xi:include href="assertions.section.xml" />
240+ <xi:include href="meta-attributes.section.xml" />
241+ <xi:include href="importing-modules.section.xml" />
242+ <xi:include href="replace-modules.section.xml" />
243+ <xi:include href="freeform-modules.section.xml" />
244+ <xi:include href="settings-options.section.xml" />
245+</chapter>
nixos/doc/manual/from_md/development/writing-nixos-tests.section.xml+521−392

This diff is too big to show here.

nixos/doc/manual/from_md/installation/building-nixos.chapter.xmlnew file+106

This diff is too big to show here.

nixos/doc/manual/from_md/installation/installing-pxe.section.xml+2−2

This diff is too big to show here.

nixos/doc/manual/from_md/installation/installing-usb.section.xml+1−1

This diff is too big to show here.

nixos/doc/manual/from_md/installation/installing.chapter.xmlnew file+645

This diff is too big to show here.

nixos/doc/manual/from_md/installation/upgrading.chapter.xml+8−8

This diff is too big to show here.

nixos/doc/manual/from_md/release-notes/rl-1803.section.xml+8

This diff is too big to show here.

nixos/doc/manual/from_md/release-notes/rl-2009.section.xml+7−3

This diff is too big to show here.

nixos/doc/manual/from_md/release-notes/rl-2111.section.xml+982−17

This diff is too big to show here.

nixos/doc/manual/from_md/release-notes/rl-2205.section.xmlnew file+2470

This diff is too big to show here.

nixos/doc/manual/installation/building-nixos.chapter.mdnew file+77

This diff is too big to show here.

nixos/doc/manual/installation/installation.xml+2−1

This diff is too big to show here.

nixos/doc/manual/installation/installing-pxe.section.md+2−2

This diff is too big to show here.

nixos/doc/manual/installation/installing-usb.section.md+1−1

This diff is too big to show here.

nixos/doc/manual/installation/installing.chapter.mdnew file+482

This diff is too big to show here.

nixos/doc/manual/installation/installing.xmldeleted−616

This diff is too big to show here.

nixos/doc/manual/installation/upgrading.chapter.md+8−8

This diff is too big to show here.

nixos/doc/manual/man-nixos-install.xml+9−4

This diff is too big to show here.

nixos/doc/manual/man-nixos-rebuild.xml+45−7

This diff is too big to show here.

nixos/doc/manual/man-pages.xml+7−2

This diff is too big to show here.

nixos/doc/manual/md-to-db.sh+4−4

This diff is too big to show here.

nixos/doc/manual/release-notes/release-notes.xml+1

This diff is too big to show here.

nixos/doc/manual/release-notes/rl-1803.section.md+2

This diff is too big to show here.

nixos/doc/manual/release-notes/rl-2009.section.md+3−1

This diff is too big to show here.

nixos/doc/manual/release-notes/rl-2111.section.md+321−68

This diff is too big to show here.

nixos/doc/manual/release-notes/rl-2205.section.mdnew file+878

This diff is too big to show here.

nixos/lib/build-vms.nix+16−9

This diff is too big to show here.

nixos/lib/default.nixnew file+33

This diff is too big to show here.

nixos/lib/eval-cacheable-options.nixnew file+53

This diff is too big to show here.

nixos/lib/eval-config-minimal.nixnew file+49

This diff is too big to show here.

nixos/lib/eval-config.nix+54−16

This diff is too big to show here.

nixos/lib/make-disk-image.nix+66−23

This diff is too big to show here.

nixos/lib/make-iso9660-image.sh+1

This diff is too big to show here.

nixos/lib/make-multi-disk-zfs-image.nixnew file+333

This diff is too big to show here.

nixos/lib/make-options-doc/default.nix+78−103

This diff is too big to show here.

nixos/lib/make-options-doc/generateAsciiDoc.pynew file+37

This diff is too big to show here.

nixos/lib/make-options-doc/generateCommonMark.pynew file+27

This diff is too big to show here.

nixos/lib/make-options-doc/mergeJSON.pynew file+95

This diff is too big to show here.

nixos/lib/make-options-doc/options-to-docbook.xsl+30−20

This diff is too big to show here.

nixos/lib/make-options-doc/optionsJSONtoXML.nixnew file+6

This diff is too big to show here.

nixos/lib/make-options-doc/sortXML.pynew file+27

This diff is too big to show here.

nixos/lib/make-single-disk-zfs-image.nixnew file+322

This diff is too big to show here.

nixos/lib/make-squashfs.nix+8−1

This diff is too big to show here.

nixos/lib/make-zfs-image.nixdeleted−333

This diff is too big to show here.

nixos/lib/qemu-common.nixnew file+32

This diff is too big to show here.

nixos/lib/qemu-flags.nixdeleted−32

This diff is too big to show here.

nixos/lib/systemd-lib.nixnew file+426

This diff is too big to show here.

nixos/lib/systemd-types.nixnew file+69

This diff is too big to show here.

nixos/lib/systemd-unit-options.nixnew file+711

This diff is too big to show here.

nixos/lib/test-driver/default.nixnew file+32

This diff is too big to show here.

nixos/lib/test-driver/setup.pynew file+13

This diff is too big to show here.

nixos/lib/test-driver/test-driver.pydeleted−1098

This diff is too big to show here.

nixos/lib/test-driver/test_driver/__init__.pynew file+128

This diff is too big to show here.

nixos/lib/test-driver/test_driver/driver.pynew file+226

This diff is too big to show here.

nixos/lib/test-driver/test_driver/logger.pynew file+105

This diff is too big to show here.

nixos/lib/test-driver/test_driver/machine.pynew file+1023

This diff is too big to show here.

nixos/lib/test-driver/test_driver/polling_condition.pynew file+77

This diff is too big to show here.

nixos/lib/test-driver/test_driver/vlan.pynew file+58

This diff is too big to show here.

nixos/lib/testing-python.nix+75−187

This diff is too big to show here.

nixos/lib/utils.nix+53−3

This diff is too big to show here.

nixos/maintainers/scripts/azure-new/examples/basic/image.nix+1−1

This diff is too big to show here.

nixos/maintainers/scripts/azure-new/examples/basic/system.nix+1−1

This diff is too big to show here.

nixos/maintainers/scripts/ec2/amazon-image.nix+9−4

This diff is too big to show here.

nixos/maintainers/scripts/ec2/create-amis.sh+83−45

This diff is too big to show here.

nixos/maintainers/scripts/lxd/lxd-image-inner.nixnew file+102

This diff is too big to show here.

nixos/maintainers/scripts/lxd/lxd-image.nixnew file+34

This diff is too big to show here.

nixos/maintainers/scripts/lxd/nix.tplnew file+9

This diff is too big to show here.

nixos/maintainers/scripts/openstack/openstack-image-zfs.nixnew file+101

This diff is too big to show here.

nixos/maintainers/scripts/openstack/openstack-image.nix+9−8

This diff is too big to show here.

nixos/modules/config/console.nix+28−10

This diff is too big to show here.

nixos/modules/config/fonts/fontdir.nix+2−2

This diff is too big to show here.

nixos/modules/config/fonts/fonts.nix+1−6

This diff is too big to show here.

nixos/modules/config/gtk/gtk-icon-cache.nix+1

This diff is too big to show here.

nixos/modules/config/i18n.nix+7−1

This diff is too big to show here.

nixos/modules/config/krb5/default.nix+8−8

This diff is too big to show here.

nixos/modules/config/malloc.nix+22−3

This diff is too big to show here.

nixos/modules/config/networking.nix+11−7

This diff is too big to show here.

nixos/modules/config/nsswitch.nix+7−4

This diff is too big to show here.

nixos/modules/config/power-management.nix+2−2

This diff is too big to show here.

nixos/modules/config/pulseaudio.nix+5−5

This diff is too big to show here.

nixos/modules/config/resolvconf.nix+2−4

This diff is too big to show here.

nixos/modules/config/shells-environment.nix+3−5

This diff is too big to show here.

nixos/modules/config/swap.nix+12−7

This diff is too big to show here.

nixos/modules/config/sysctl.nix+1−1

This diff is too big to show here.

nixos/modules/config/system-path.nix+19−9

This diff is too big to show here.

nixos/modules/config/terminfo.nix+25−1

This diff is too big to show here.

nixos/modules/config/unix-odbc-drivers.nix+1−1

This diff is too big to show here.

nixos/modules/config/update-users-groups.pl+1−1

This diff is too big to show here.

nixos/modules/config/users-groups.nix+53−17

This diff is too big to show here.

nixos/modules/config/xdg/mime.nix+64−2

This diff is too big to show here.

nixos/modules/config/xdg/portal.nix+23−12

This diff is too big to show here.

nixos/modules/config/xdg/portals/wlr.nix+1−1

This diff is too big to show here.

nixos/modules/hardware/all-firmware.nix+11−6

This diff is too big to show here.

nixos/modules/hardware/ckb-next.nix+1−1

This diff is too big to show here.

nixos/modules/hardware/cpu/intel-sgx.nixnew file+69

This diff is too big to show here.

nixos/modules/hardware/device-tree.nix+5−5

This diff is too big to show here.

nixos/modules/hardware/digitalbitbox.nix+1−1

This diff is too big to show here.

nixos/modules/hardware/flirc.nixnew file+12

This diff is too big to show here.

nixos/modules/hardware/gkraken.nixnew file+18

This diff is too big to show here.

nixos/modules/hardware/gpgsmartcards.nixnew file+37

This diff is too big to show here.

nixos/modules/hardware/hackrf.nixnew file+23

This diff is too big to show here.

nixos/modules/hardware/keyboard/zsa.nix−3

This diff is too big to show here.

nixos/modules/hardware/network/b43.nix−4

This diff is too big to show here.

nixos/modules/hardware/onlykey/onlykey.udev+2−2

This diff is too big to show here.

nixos/modules/hardware/opengl.nix+2−2

This diff is too big to show here.

nixos/modules/hardware/opentabletdriver.nix+1−1

This diff is too big to show here.

nixos/modules/hardware/pcmcia.nix+1

This diff is too big to show here.

nixos/modules/hardware/printers.nix+6−11

This diff is too big to show here.

nixos/modules/hardware/raid/hpsa.nix+4−1

This diff is too big to show here.

nixos/modules/hardware/rtl-sdr.nix+8−4

This diff is too big to show here.

nixos/modules/hardware/sata.nix+1−1

This diff is too big to show here.

nixos/modules/hardware/system-76.nix+6−2

This diff is too big to show here.

nixos/modules/hardware/video/amdgpu-pro.nix+25−22

This diff is too big to show here.

nixos/modules/hardware/video/capture/mwprocapture.nix−5

This diff is too big to show here.

nixos/modules/hardware/video/hidpi.nix−1

This diff is too big to show here.

nixos/modules/hardware/video/nvidia.nix+34−23

This diff is too big to show here.

nixos/modules/hardware/video/uvcvideo/default.nix+1−1

This diff is too big to show here.

nixos/modules/hardware/video/webcam/facetimehd.nix+14−6

This diff is too big to show here.

nixos/modules/hardware/xone.nixnew file+23

This diff is too big to show here.

nixos/modules/i18n/input-method/fcitx.nix+4−1

This diff is too big to show here.

nixos/modules/i18n/input-method/fcitx5.nix+21−12

This diff is too big to show here.

nixos/modules/i18n/input-method/ibus.nix+5−2

This diff is too big to show here.

nixos/modules/i18n/input-method/kime.nix+4−2

This diff is too big to show here.

nixos/modules/installer/cd-dvd/channel.nix+2−1

This diff is too big to show here.

nixos/modules/installer/cd-dvd/installation-cd-graphical-base.nix+14−8

This diff is too big to show here.

nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-gnome.nixnew file+59

This diff is too big to show here.

nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-plasma5.nixnew file+49

This diff is too big to show here.

nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares.nixnew file+20

This diff is too big to show here.

nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix+3−5

This diff is too big to show here.

nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix+1−3

This diff is too big to show here.

nixos/modules/installer/cd-dvd/iso-image.nix+42−32

This diff is too big to show here.

nixos/modules/installer/cd-dvd/system-tarball-fuloong2f.nix+1−1

This diff is too big to show here.

nixos/modules/installer/cd-dvd/system-tarball-pc.nix+1−1

This diff is too big to show here.

nixos/modules/installer/cd-dvd/system-tarball-sheevaplug.nix+4−4

This diff is too big to show here.

nixos/modules/installer/cd-dvd/system-tarball.nix+2−2

This diff is too big to show here.

nixos/modules/installer/kexec/kexec-boot.nixnew file+51

This diff is too big to show here.

nixos/modules/installer/netboot/netboot.nix+4−2

This diff is too big to show here.

nixos/modules/installer/sd-card/sd-image-aarch64.nix+15

This diff is too big to show here.

nixos/modules/installer/sd-card/sd-image-raspberrypi.nix+1−1

This diff is too big to show here.

nixos/modules/installer/sd-card/sd-image-riscv64-qemu-installer.nixnew file+10

This diff is too big to show here.

nixos/modules/installer/sd-card/sd-image-riscv64-qemu.nixnew file+32

This diff is too big to show here.

nixos/modules/installer/sd-card/sd-image-x86_64.nixnew file+27

This diff is too big to show here.

nixos/modules/installer/sd-card/sd-image.nix+5−5

This diff is too big to show here.

nixos/modules/installer/tools/nix-fallback-paths.nix+5−5

This diff is too big to show here.

nixos/modules/installer/tools/nixos-build-vms/build-vms.nix+18−5

This diff is too big to show here.

nixos/modules/installer/tools/nixos-build-vms/nixos-build-vms.sh+4−3

This diff is too big to show here.

nixos/modules/installer/tools/nixos-enter.sh+33−1

This diff is too big to show here.

nixos/modules/installer/tools/nixos-generate-config.pl+24−6

This diff is too big to show here.

nixos/modules/installer/tools/nixos-install.sh+19−18

This diff is too big to show here.

nixos/modules/installer/tools/nixos-version.sh+1

This diff is too big to show here.

nixos/modules/installer/tools/tools.nix+28−4

This diff is too big to show here.

nixos/modules/installer/virtualbox-demo.nix+1−1

This diff is too big to show here.

nixos/modules/misc/documentation.nix+128−61

This diff is too big to show here.

nixos/modules/misc/extra-arguments.nix+2−2

This diff is too big to show here.

nixos/modules/misc/ids.nix+58−52

This diff is too big to show here.

nixos/modules/misc/locate.nix+134−69

This diff is too big to show here.

nixos/modules/misc/man-db.nixnew file+73

This diff is too big to show here.

nixos/modules/misc/mandoc.nixnew file+61

This diff is too big to show here.

nixos/modules/misc/meta.nix+16−1

This diff is too big to show here.

nixos/modules/misc/nixpkgs.nix+17−9

This diff is too big to show here.

nixos/modules/misc/nixpkgs/test.nixnew file+8

This diff is too big to show here.

nixos/modules/misc/version.nix+52−19

This diff is too big to show here.

nixos/modules/misc/wordlist.nixnew file+59

This diff is too big to show here.

nixos/modules/module-list.nix+128−29

This diff is too big to show here.

nixos/modules/profiles/all-hardware.nix+5−2

This diff is too big to show here.

nixos/modules/profiles/base.nix+1

This diff is too big to show here.

nixos/modules/profiles/hardened.nix+1−1

This diff is too big to show here.

nixos/modules/profiles/installation-device.nix+4

This diff is too big to show here.

nixos/modules/profiles/minimal.nix+2

This diff is too big to show here.

nixos/modules/profiles/qemu-guest.nix+2−2

This diff is too big to show here.

nixos/modules/programs/_1password-gui.nixnew file+68

This diff is too big to show here.

nixos/modules/programs/_1password.nixnew file+44

This diff is too big to show here.

nixos/modules/programs/adb.nix+1−2

This diff is too big to show here.

nixos/modules/programs/atop.nix+11−4

This diff is too big to show here.

nixos/modules/programs/bandwhich.nix+3−1

This diff is too big to show here.

nixos/modules/programs/bcc.nix+3−3

This diff is too big to show here.

nixos/modules/programs/calls.nix+2

This diff is too big to show here.

nixos/modules/programs/captive-browser.nix+38−14

This diff is too big to show here.

nixos/modules/programs/ccache.nix+2

This diff is too big to show here.

nixos/modules/programs/chromium.nix+13−2

This diff is too big to show here.

nixos/modules/programs/cnping.nixnew file+21

This diff is too big to show here.

nixos/modules/programs/command-not-found/command-not-found.pl+37−12

This diff is too big to show here.

nixos/modules/programs/dconf.nix+1−1

This diff is too big to show here.

nixos/modules/programs/digitalbitbox/default.nix+1−1

This diff is too big to show here.

nixos/modules/programs/dmrconfig.nix+1−1

This diff is too big to show here.

nixos/modules/programs/environment.nix+8−2

This diff is too big to show here.

nixos/modules/programs/evince.nix+13−4

This diff is too big to show here.

nixos/modules/programs/extra-container.nixnew file+17

This diff is too big to show here.

nixos/modules/programs/feedbackd.nix+1

This diff is too big to show here.

nixos/modules/programs/file-roller.nix+13−4

This diff is too big to show here.

nixos/modules/programs/firejail.nix+15−8

This diff is too big to show here.

nixos/modules/programs/flexoptix-app.nix+1−1

This diff is too big to show here.

nixos/modules/programs/freetds.nix+1−1

This diff is too big to show here.

nixos/modules/programs/gamemode.nix+3−1

This diff is too big to show here.

nixos/modules/programs/git.nixnew file+69

This diff is too big to show here.

nixos/modules/programs/gnupg.nix+4−1

This diff is too big to show here.

nixos/modules/programs/htop.nixnew file+58

This diff is too big to show here.

nixos/modules/programs/iftop.nix+3−1

This diff is too big to show here.

nixos/modules/programs/iotop.nix+3−1

This diff is too big to show here.

nixos/modules/programs/java.nix+1−1

This diff is too big to show here.

nixos/modules/programs/k3b.nixnew file+52

This diff is too big to show here.

nixos/modules/programs/k40-whisperer.nixnew file+40

This diff is too big to show here.

nixos/modules/programs/kbdlight.nix+6−1

This diff is too big to show here.

nixos/modules/programs/kclock.nixnew file+13

This diff is too big to show here.

nixos/modules/programs/kdeconnect.nix+2−2

This diff is too big to show here.

nixos/modules/programs/less.nix+9−6

This diff is too big to show here.

nixos/modules/programs/liboping.nix+3−1

This diff is too big to show here.

nixos/modules/programs/mininet.nix+2−2

This diff is too big to show here.

nixos/modules/programs/mosh.nix+1−1

This diff is too big to show here.

nixos/modules/programs/msmtp.nix+2

This diff is too big to show here.

nixos/modules/programs/mtr.nix+4−1

This diff is too big to show here.

nixos/modules/programs/nbd.nixnew file+19

This diff is too big to show here.

nixos/modules/programs/neovim.nix+28−16

This diff is too big to show here.

nixos/modules/programs/nethoscope.nixnew file+30

This diff is too big to show here.

nixos/modules/programs/nix-ld.nixnew file+12

This diff is too big to show here.

nixos/modules/programs/nncp.nixnew file+101

This diff is too big to show here.

nixos/modules/programs/noisetorch.nix+4−1

This diff is too big to show here.

nixos/modules/programs/npm.nix+3−2

This diff is too big to show here.

nixos/modules/programs/pantheon-tweaks.nixnew file+19

This diff is too big to show here.

nixos/modules/programs/phosh.nix+9−10

This diff is too big to show here.

nixos/modules/programs/plotinus.nix+1−1

This diff is too big to show here.

nixos/modules/programs/proxychains.nix+1−1

This diff is too big to show here.

nixos/modules/programs/qt5ct.nix+1−1

This diff is too big to show here.

nixos/modules/programs/shadow.nix+15−8

This diff is too big to show here.

nixos/modules/programs/singularity.nix+6−1

This diff is too big to show here.

nixos/modules/programs/slock.nix+6−1

This diff is too big to show here.

nixos/modules/programs/spacefm.nix+6−6

This diff is too big to show here.

nixos/modules/programs/ssh.nix+71−17

This diff is too big to show here.

nixos/modules/programs/ssmtp.nixdeleted−188

This diff is too big to show here.

nixos/modules/programs/starship.nixnew file+51

This diff is too big to show here.

nixos/modules/programs/sway.nix+7−4

This diff is too big to show here.

nixos/modules/programs/thefuck.nix+7−6

This diff is too big to show here.

nixos/modules/programs/tilp2.nixdeleted−28

This diff is too big to show here.

nixos/modules/programs/tmux.nix+14−1

This diff is too big to show here.

nixos/modules/programs/traceroute.nix+3−1

This diff is too big to show here.

nixos/modules/programs/tsm-client.nix+8−8

This diff is too big to show here.

nixos/modules/programs/udevil.nix+6−1

This diff is too big to show here.

nixos/modules/programs/vim.nix+2−2

This diff is too big to show here.

nixos/modules/programs/wavemon.nix+3−1

This diff is too big to show here.

nixos/modules/programs/weylus.nixnew file+47

This diff is too big to show here.

nixos/modules/programs/wireshark.nix+1−1

This diff is too big to show here.

nixos/modules/programs/wshowkeys.nix+6−1

This diff is too big to show here.

nixos/modules/programs/xonsh.nix+2−1

This diff is too big to show here.

nixos/modules/programs/xss-lock.nix+2−1

This diff is too big to show here.

nixos/modules/programs/xwayland.nix+4−5

This diff is too big to show here.

nixos/modules/programs/yabar.nix+2−1

This diff is too big to show here.

nixos/modules/programs/zsh/oh-my-zsh.nix+1−1

This diff is too big to show here.

nixos/modules/programs/zsh/zsh-autoenv.nix+1−1

This diff is too big to show here.

nixos/modules/programs/zsh/zsh-autosuggestions.nix+20−11

This diff is too big to show here.

nixos/modules/programs/zsh/zsh-syntax-highlighting.nix+2−2

This diff is too big to show here.

nixos/modules/programs/zsh/zsh.nix+5−16

This diff is too big to show here.

nixos/modules/rename.nix+63−44

This diff is too big to show here.

nixos/modules/security/acme.nixdeleted−810

This diff is too big to show here.

nixos/modules/security/acme.xmldeleted−298

This diff is too big to show here.

nixos/modules/security/acme/default.nixnew file+921

This diff is too big to show here.

nixos/modules/security/acme/doc.xmlnew file+413

This diff is too big to show here.

nixos/modules/security/acme/mk-cert-ownership-assertion.nixnew file+4

This diff is too big to show here.

nixos/modules/security/ca.nix+11−12

This diff is too big to show here.

nixos/modules/security/chromium-suid-sandbox.nix+6−1

This diff is too big to show here.

nixos/modules/security/dhparams.nix+5−3

This diff is too big to show here.

nixos/modules/security/doas.nix+8−5

This diff is too big to show here.

nixos/modules/security/duosec.nix+6−1

This diff is too big to show here.

nixos/modules/security/google_oslogin.nix+6−3

This diff is too big to show here.

nixos/modules/security/lock-kernel-modules.nix+19−9

This diff is too big to show here.

nixos/modules/security/misc.nix+2−2

This diff is too big to show here.

nixos/modules/security/pam.nix+424−150

This diff is too big to show here.

nixos/modules/security/pam_mount.nix+80−8

This diff is too big to show here.

nixos/modules/security/pam_usb.nix+12−2

This diff is too big to show here.

nixos/modules/security/polkit.nix+13−7

This diff is too big to show here.

nixos/modules/security/rtkit.nix+4−1

This diff is too big to show here.

nixos/modules/security/sudo.nix+3−3

This diff is too big to show here.

nixos/modules/security/systemd-confinement.nix+6−8

This diff is too big to show here.

nixos/modules/security/tpm2.nix+5−5

This diff is too big to show here.

nixos/modules/security/wrappers/default.nix+189−98

This diff is too big to show here.

nixos/modules/services/admin/meshcentral.nix+1−1

This diff is too big to show here.

nixos/modules/services/admin/oxidized.nix+2−2

This diff is too big to show here.

nixos/modules/services/admin/pgadmin.nixnew file+127

This diff is too big to show here.

nixos/modules/services/amqp/activemq/default.nix+2−1

This diff is too big to show here.

nixos/modules/services/amqp/rabbitmq.nix+10−21

This diff is too big to show here.

nixos/modules/services/audio/botamusique.nix+1

This diff is too big to show here.

nixos/modules/services/audio/hqplayerd.nix+1−1

This diff is too big to show here.

nixos/modules/services/audio/icecast.nix+1

This diff is too big to show here.

nixos/modules/services/audio/jack.nix+3−3

This diff is too big to show here.

nixos/modules/services/audio/jmusicbot.nix+8−1

This diff is too big to show here.

nixos/modules/services/audio/liquidsoap.nix+3−3

This diff is too big to show here.

nixos/modules/services/audio/mopidy.nix+1−1

This diff is too big to show here.

nixos/modules/services/audio/mpd.nix+24−44

This diff is too big to show here.

nixos/modules/services/audio/mpdscribble.nix+12−1

This diff is too big to show here.

nixos/modules/services/audio/navidrome.nix+1−1

This diff is too big to show here.

nixos/modules/services/audio/roon-server.nix+5−2

This diff is too big to show here.

nixos/modules/services/audio/slimserver.nix+1−1

This diff is too big to show here.

nixos/modules/services/audio/snapserver.nix+31−23

This diff is too big to show here.

nixos/modules/services/audio/spotifyd.nix+26−1

This diff is too big to show here.

nixos/modules/services/audio/squeezelite.nix+17−21

This diff is too big to show here.

nixos/modules/services/audio/ympd.nix+1−1

This diff is too big to show here.

nixos/modules/services/backup/automysqlbackup.nix+3−2

This diff is too big to show here.

nixos/modules/services/backup/bacula.nix+3

This diff is too big to show here.

nixos/modules/services/backup/borgbackup.nix+76−22

This diff is too big to show here.

nixos/modules/services/backup/btrbk.nix+1−1

This diff is too big to show here.

nixos/modules/services/backup/duplicati.nix+26−9

This diff is too big to show here.

nixos/modules/services/backup/mysql-backup.nix+2−1

This diff is too big to show here.

nixos/modules/services/backup/postgresql-backup.nix+1−1

This diff is too big to show here.

nixos/modules/services/backup/postgresql-wal-receiver.nix+5−5

This diff is too big to show here.

nixos/modules/services/backup/restic-rest-server.nix+5−1

This diff is too big to show here.

nixos/modules/services/backup/restic.nix+17−5

This diff is too big to show here.

nixos/modules/services/backup/sanoid.nix+11−3

This diff is too big to show here.

nixos/modules/services/backup/syncoid.nix+66−15

This diff is too big to show here.

nixos/modules/services/backup/tarsnap.nix+25−18

This diff is too big to show here.

nixos/modules/services/backup/tsm.nix+33−14

This diff is too big to show here.

nixos/modules/services/backup/znapzend.nix+7−7

This diff is too big to show here.

nixos/modules/services/backup/zrepl.nix+3

This diff is too big to show here.

nixos/modules/services/blockchain/ethereum/geth.nix+1

This diff is too big to show here.

nixos/modules/services/cluster/corosync/default.nixnew file+112

This diff is too big to show here.

nixos/modules/services/cluster/hadoop/conf.nix+25−12

This diff is too big to show here.

nixos/modules/services/cluster/hadoop/default.nix+175−23

This diff is too big to show here.

nixos/modules/services/cluster/hadoop/hdfs.nix+175−44

This diff is too big to show here.

nixos/modules/services/cluster/hadoop/yarn.nix+155−29

This diff is too big to show here.

nixos/modules/services/cluster/k3s/default.nix+2−7

This diff is too big to show here.

nixos/modules/services/cluster/kubernetes/addon-manager.nix+4−3

This diff is too big to show here.

nixos/modules/services/cluster/kubernetes/addons/dashboard.nixdeleted−332

This diff is too big to show here.

nixos/modules/services/cluster/kubernetes/addons/dns.nix+24−15

This diff is too big to show here.

nixos/modules/services/cluster/kubernetes/apiserver.nix+7−1

This diff is too big to show here.

nixos/modules/services/cluster/kubernetes/controller-manager.nix+7−1

This diff is too big to show here.

nixos/modules/services/cluster/kubernetes/default.nix+31−21

This diff is too big to show here.

nixos/modules/services/cluster/kubernetes/flannel.nix+2

This diff is too big to show here.

nixos/modules/services/cluster/kubernetes/kubelet.nix+11−3

This diff is too big to show here.

nixos/modules/services/cluster/kubernetes/pki.nix+4−1

This diff is too big to show here.

nixos/modules/services/cluster/kubernetes/proxy.nix+6−1

This diff is too big to show here.

nixos/modules/services/cluster/kubernetes/scheduler.nix+7−3

This diff is too big to show here.

nixos/modules/services/cluster/pacemaker/default.nixnew file+52

This diff is too big to show here.

nixos/modules/services/cluster/spark/default.nixnew file+162

This diff is too big to show here.

nixos/modules/services/computing/boinc/client.nix+2−2

This diff is too big to show here.

nixos/modules/services/computing/foldingathome/client.nix+1−1

This diff is too big to show here.

nixos/modules/services/computing/slurm/slurm.nix+18−9

This diff is too big to show here.

nixos/modules/services/continuous-integration/buildbot/master.nix+11−8

This diff is too big to show here.

nixos/modules/services/continuous-integration/buildbot/worker.nix+6−4

This diff is too big to show here.

nixos/modules/services/continuous-integration/buildkite-agents.nix+4−3

This diff is too big to show here.

nixos/modules/services/continuous-integration/github-runner.nix+48−35

This diff is too big to show here.

nixos/modules/services/continuous-integration/gitlab-runner.nix+15−8

This diff is too big to show here.

nixos/modules/services/continuous-integration/gocd-agent/default.nix+12−2

This diff is too big to show here.

nixos/modules/services/continuous-integration/gocd-server/default.nix+17−2

This diff is too big to show here.

nixos/modules/services/continuous-integration/hail.nix+1−1

This diff is too big to show here.

nixos/modules/services/continuous-integration/hercules-ci-agent/common.nix+74−18

This diff is too big to show here.

nixos/modules/services/continuous-integration/hercules-ci-agent/default.nix+4−4

This diff is too big to show here.

nixos/modules/services/continuous-integration/hydra/default.nix+18−14

This diff is too big to show here.

nixos/modules/services/continuous-integration/jenkins/default.nix+3−3

This diff is too big to show here.

nixos/modules/services/continuous-integration/jenkins/job-builder.nix+2−2

This diff is too big to show here.

nixos/modules/services/continuous-integration/jenkins/slave.nix+15−1

This diff is too big to show here.

nixos/modules/services/databases/aerospike.nix+1−1

This diff is too big to show here.

nixos/modules/services/databases/cassandra.nix+6−4

This diff is too big to show here.

nixos/modules/services/databases/clickhouse.nix+13−4

This diff is too big to show here.

nixos/modules/services/databases/cockroachdb.nix+38−30

This diff is too big to show here.

nixos/modules/services/databases/couchdb.nix+22−5

This diff is too big to show here.

nixos/modules/services/databases/firebird.nix+3−5

This diff is too big to show here.

nixos/modules/services/databases/hbase.nix+39−17

This diff is too big to show here.

nixos/modules/services/databases/influxdb.nix+4−4

This diff is too big to show here.

nixos/modules/services/databases/influxdb2.nix+18−5

This diff is too big to show here.

nixos/modules/services/databases/memcached.nix+2

This diff is too big to show here.

nixos/modules/services/databases/monetdb.nix+1−1

This diff is too big to show here.

nixos/modules/services/databases/mongodb.nix+4−2

This diff is too big to show here.

nixos/modules/services/databases/mysql.nix+191−201

This diff is too big to show here.

nixos/modules/services/databases/neo4j.nix+12−2

This diff is too big to show here.

nixos/modules/services/databases/openldap.nix+7−6

This diff is too big to show here.

nixos/modules/services/databases/opentsdb.nix+1−2

This diff is too big to show here.

nixos/modules/services/databases/pgmanage.nix+1−1

This diff is too big to show here.

nixos/modules/services/databases/postgresql.nix+11−9

This diff is too big to show here.

nixos/modules/services/databases/postgresql.xml+54−32

This diff is too big to show here.

nixos/modules/services/databases/redis.nix+275−222

This diff is too big to show here.

nixos/modules/services/databases/riak.nix+1−2

This diff is too big to show here.

nixos/modules/services/databases/victoriametrics.nix+1−1

This diff is too big to show here.

nixos/modules/services/databases/virtuoso.nixdeleted−99

This diff is too big to show here.

nixos/modules/services/desktops/cpupower-gui.nixnew file+56

This diff is too big to show here.

nixos/modules/services/desktops/flatpak.nix+2

This diff is too big to show here.

nixos/modules/services/desktops/geoclue2.nix+1−3

This diff is too big to show here.

nixos/modules/services/desktops/gnome/evolution-data-server.nix+1−1

This diff is too big to show here.

nixos/modules/services/desktops/gnome/glib-networking.nix+1−1

This diff is too big to show here.

nixos/modules/services/desktops/gnome/gnome-keyring.nix+3−1

This diff is too big to show here.

nixos/modules/services/desktops/gnome/gnome-settings-daemon.nix+4−18

This diff is too big to show here.

nixos/modules/services/desktops/gnome/tracker-miners.nix+2

This diff is too big to show here.

nixos/modules/services/desktops/gnome/tracker.nix+24−1

This diff is too big to show here.

nixos/modules/services/desktops/gsignond.nix+1−1

This diff is too big to show here.

nixos/modules/services/desktops/gvfs.nix+3−2

This diff is too big to show here.

nixos/modules/services/desktops/pantheon/files.nixdeleted−13

This diff is too big to show here.

nixos/modules/services/desktops/pipewire/bluez-hardware.conf.jsondeleted−243

This diff is too big to show here.

nixos/modules/services/desktops/pipewire/client-rt.conf.json → nixos/modules/services/desktops/pipewire/daemon/client-rt.conf.jsonrenamed+1−1

This diff is too big to show here.

nixos/modules/services/desktops/pipewire/client.conf.json → nixos/modules/services/desktops/pipewire/daemon/client.conf.jsonrenamed

The content is the same.

nixos/modules/services/desktops/pipewire/jack.conf.json → nixos/modules/services/desktops/pipewire/daemon/jack.conf.jsonrenamed

The content is the same.

nixos/modules/services/desktops/pipewire/daemon/minimal.conf.jsonnew file+118

This diff is too big to show here.

nixos/modules/services/desktops/pipewire/daemon/pipewire-pulse.conf.jsonnew file+100

This diff is too big to show here.

nixos/modules/services/desktops/pipewire/pipewire.conf.json → nixos/modules/services/desktops/pipewire/daemon/pipewire.conf.jsonrenamed+5−2

This diff is too big to show here.

nixos/modules/services/desktops/pipewire/alsa-monitor.conf.json → nixos/modules/services/desktops/pipewire/media-session/alsa-monitor.conf.jsonrenamed

The content is the same.

nixos/modules/services/desktops/pipewire/bluez-monitor.conf.json → nixos/modules/services/desktops/pipewire/media-session/bluez-monitor.conf.jsonrenamed

The content is the same.

nixos/modules/services/desktops/pipewire/media-session.conf.json → nixos/modules/services/desktops/pipewire/media-session/media-session.conf.jsonrenamed

The content is the same.

nixos/modules/services/desktops/pipewire/v4l2-monitor.conf.json → nixos/modules/services/desktops/pipewire/media-session/v4l2-monitor.conf.jsonrenamed

The content is the same.

nixos/modules/services/desktops/pipewire/pipewire-media-session.nix+29−23

This diff is too big to show here.

nixos/modules/services/desktops/pipewire/pipewire-pulse.conf.jsondeleted−42

This diff is too big to show here.

nixos/modules/services/desktops/pipewire/pipewire.nix+72−12

This diff is too big to show here.

nixos/modules/services/desktops/pipewire/wireplumber.nixnew file+54

This diff is too big to show here.

nixos/modules/services/development/blackfire.nix+4−9

This diff is too big to show here.

nixos/modules/services/development/blackfire.xml+2−1

This diff is too big to show here.

nixos/modules/services/development/distccd.nix+1−1

This diff is too big to show here.

nixos/modules/services/development/hoogle.nix+4−3

This diff is too big to show here.

nixos/modules/services/development/jupyter/default.nix+4−5

This diff is too big to show here.

nixos/modules/services/development/jupyter/kernel-options.nix+4−4

This diff is too big to show here.

nixos/modules/services/development/jupyterhub/default.nix+20−8

This diff is too big to show here.

nixos/modules/services/development/lorri.nix+1−2

This diff is too big to show here.

nixos/modules/services/development/rstudio-server/default.nixnew file+107

This diff is too big to show here.

nixos/modules/services/development/zammad.nixnew file+323

This diff is too big to show here.

nixos/modules/services/display-managers/greetd.nix+9−4

This diff is too big to show here.

nixos/modules/services/editors/emacs.nix+1−1

This diff is too big to show here.

nixos/modules/services/editors/haste.nixnew file+86

This diff is too big to show here.

nixos/modules/services/editors/infinoted.nix+1−1

This diff is too big to show here.

nixos/modules/services/finance/odoo.nixnew file+122

This diff is too big to show here.

nixos/modules/services/games/asf.nixnew file+236

This diff is too big to show here.

nixos/modules/services/games/crossfire-server.nixnew file+179

This diff is too big to show here.

nixos/modules/services/games/deliantra-server.nixnew file+172

This diff is too big to show here.

nixos/modules/services/games/factorio.nix+14−5

This diff is too big to show here.

nixos/modules/services/games/minecraft-server.nix+29−6

This diff is too big to show here.

nixos/modules/services/games/quake3-server.nix+1

This diff is too big to show here.

nixos/modules/services/games/terraria.nix+3−2

This diff is too big to show here.

nixos/modules/services/hardware/acpid.nix+1−1

This diff is too big to show here.

nixos/modules/services/hardware/actkbd.nix+1−1

This diff is too big to show here.

nixos/modules/services/hardware/bluetooth.nix+3−7

This diff is too big to show here.

nixos/modules/services/hardware/ddccontrol.nix+3

This diff is too big to show here.

nixos/modules/services/hardware/fancontrol.nix+1

This diff is too big to show here.

nixos/modules/services/hardware/freefall.nix+1−1

This diff is too big to show here.

nixos/modules/services/hardware/fwupd.nix+2−1

This diff is too big to show here.

nixos/modules/services/hardware/interception-tools.nix+1

This diff is too big to show here.

nixos/modules/services/hardware/joycond.nixnew file+36

This diff is too big to show here.

nixos/modules/services/hardware/lirc.nix+1−1

This diff is too big to show here.

nixos/modules/services/hardware/pcscd.nix+2−2

This diff is too big to show here.

nixos/modules/services/hardware/power-profiles-daemon.nix+2

This diff is too big to show here.

nixos/modules/services/hardware/rasdaemon.nixnew file+170

This diff is too big to show here.

nixos/modules/services/hardware/sane.nix+2−1

This diff is too big to show here.

nixos/modules/services/hardware/sane_extra_backends/brscan4.nix+4−4

This diff is too big to show here.

nixos/modules/services/hardware/sane_extra_backends/brscan5.nix+4−4

This diff is too big to show here.

nixos/modules/services/hardware/spacenavd.nix−1

This diff is too big to show here.

nixos/modules/services/hardware/tcsd.nix+7−5

This diff is too big to show here.

nixos/modules/services/hardware/thermald.nix+4−2

This diff is too big to show here.

nixos/modules/services/hardware/thinkfan.nix+2−2

This diff is too big to show here.

nixos/modules/services/hardware/triggerhappy.nix+2−2

This diff is too big to show here.

nixos/modules/services/hardware/udev.nix+127−24

This diff is too big to show here.

nixos/modules/services/hardware/udisks2.nix+41

This diff is too big to show here.

nixos/modules/services/hardware/undervolt.nix+2−4

This diff is too big to show here.

nixos/modules/services/hardware/upower.nix+7−8

This diff is too big to show here.

nixos/modules/services/hardware/usbrelayd.nixnew file+44

This diff is too big to show here.

nixos/modules/services/hardware/vdr.nix+2−2

This diff is too big to show here.

nixos/modules/services/home-automation/home-assistant.nixnew file+552

This diff is too big to show here.

nixos/modules/services/misc/zigbee2mqtt.nix → nixos/modules/services/home-automation/zigbee2mqtt.nixrenamed+6−9

This diff is too big to show here.

nixos/modules/services/logging/SystemdJournal2Gelf.nix+1

This diff is too big to show here.

nixos/modules/services/logging/awstats.nix+4−4

This diff is too big to show here.

nixos/modules/services/logging/filebeat.nixnew file+253

This diff is too big to show here.

nixos/modules/services/logging/fluentd.nix+1−1

This diff is too big to show here.

nixos/modules/services/logging/graylog.nix+5−4

This diff is too big to show here.

nixos/modules/services/logging/journalbeat.nix+4−17

This diff is too big to show here.

nixos/modules/services/logging/journalwatch.nix+1

This diff is too big to show here.

nixos/modules/services/logging/klogd.nix+6−34

This diff is too big to show here.

nixos/modules/services/logging/logcheck.nix+6−2

This diff is too big to show here.

nixos/modules/services/logging/logrotate.nix+267−33

This diff is too big to show here.

nixos/modules/services/logging/logstash.nix+23−9

This diff is too big to show here.

nixos/modules/services/logging/promtail.nix+5−1

This diff is too big to show here.

nixos/modules/services/logging/syslog-ng.nix+2−2

This diff is too big to show here.

nixos/modules/services/mail/davmail.nix+1−1

This diff is too big to show here.

nixos/modules/services/mail/dovecot.nix+18−44

This diff is too big to show here.

nixos/modules/services/mail/exim.nix+8−3

This diff is too big to show here.

nixos/modules/services/mail/maddy.nixnew file+273

This diff is too big to show here.

nixos/modules/services/mail/mail.nix+2−1

This diff is too big to show here.

nixos/modules/services/mail/mailman.nix+16−9

This diff is too big to show here.

nixos/modules/services/mail/offlineimap.nix+2−2

This diff is too big to show here.

nixos/modules/services/mail/opendkim.nix+1

This diff is too big to show here.

nixos/modules/services/mail/opensmtpd.nix+5−2

This diff is too big to show here.

nixos/modules/services/mail/postfix.nix+30−20

This diff is too big to show here.

nixos/modules/services/mail/postfixadmin.nix+1−1

This diff is too big to show here.

nixos/modules/services/mail/roundcube.nix+5−4

This diff is too big to show here.

nixos/modules/services/mail/rspamd.nix+6−9

This diff is too big to show here.

nixos/modules/services/mail/sympa.nix+4−4

This diff is too big to show here.

nixos/modules/services/misc/matrix-synapse-log_config.yaml → nixos/modules/services/matrix/matrix-synapse-log_config.yamlrenamed

The content is the same.

nixos/modules/services/matrix/matrix-synapse.nixnew file+773

This diff is too big to show here.

nixos/modules/services/misc/matrix-synapse.xml → nixos/modules/services/matrix/matrix-synapse.xmlrenamed+18−17

This diff is too big to show here.

nixos/modules/services/matrix/mjolnir.nixnew file+242

This diff is too big to show here.

nixos/modules/services/matrix/mjolnir.xmlnew file+134

This diff is too big to show here.

nixos/modules/services/matrix/pantalaimon-options.nixnew file+70

This diff is too big to show here.

nixos/modules/services/matrix/pantalaimon.nixnew file+70

This diff is too big to show here.

nixos/modules/services/misc/airsonic.nix+13−8

This diff is too big to show here.

nixos/modules/services/misc/ananicy.nixnew file+107

This diff is too big to show here.

nixos/modules/services/misc/ankisyncd.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/apache-kafka.nix+5−3

This diff is too big to show here.

nixos/modules/services/misc/autofs.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/autorandr.nix+309−2

This diff is too big to show here.

nixos/modules/services/misc/bees.nix+5−2

This diff is too big to show here.

nixos/modules/services/misc/cfdyndns.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/cgminer.nix+7−3

This diff is too big to show here.

nixos/modules/services/misc/clipcat.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/clipmenu.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/confd.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/couchpotato.nixdeleted−42

This diff is too big to show here.

nixos/modules/services/misc/dendrite.nix+100−8

This diff is too big to show here.

nixos/modules/services/misc/dictd.nix+2−2

This diff is too big to show here.

nixos/modules/services/misc/disnix.nix+1−2

This diff is too big to show here.

nixos/modules/services/misc/docker-registry.nix+2

This diff is too big to show here.

nixos/modules/services/misc/dwm-status.nix+2−2

This diff is too big to show here.

nixos/modules/services/misc/dysnomia.nix+6

This diff is too big to show here.

nixos/modules/services/misc/etcd.nix+13−3

This diff is too big to show here.

nixos/modules/services/misc/etebase-server.nix+4−4

This diff is too big to show here.

nixos/modules/services/misc/ethminer.nix+4−4

This diff is too big to show here.

nixos/modules/services/misc/exhibitor.nix+4−1

This diff is too big to show here.

nixos/modules/services/misc/felix.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/freeswitch.nix+4−5

This diff is too big to show here.

nixos/modules/services/misc/gammu-smsd.nix+2−2

This diff is too big to show here.

nixos/modules/services/misc/gitea.nix+46−26

This diff is too big to show here.

nixos/modules/services/misc/gitit.nix+27−27

This diff is too big to show here.

nixos/modules/services/misc/gitlab.nix+91−30

This diff is too big to show here.

nixos/modules/services/misc/gitolite.nix+7−5

This diff is too big to show here.

nixos/modules/services/misc/gitweb.nix+1

This diff is too big to show here.

nixos/modules/services/misc/gogs.nix+4−1

This diff is too big to show here.

nixos/modules/services/misc/gollum.nix+1

This diff is too big to show here.

nixos/modules/services/misc/gpsd.nix+1

This diff is too big to show here.

nixos/modules/services/misc/greenclip.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/headphones.nix+3−1

This diff is too big to show here.

nixos/modules/services/misc/heisenbridge.nixnew file+222

This diff is too big to show here.

nixos/modules/services/misc/home-assistant.nixdeleted−402

This diff is too big to show here.

nixos/modules/services/misc/ihaskell.nix+4−3

This diff is too big to show here.

nixos/modules/services/misc/input-remapper.nixnew file+30

This diff is too big to show here.

nixos/modules/services/misc/jackett.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/jellyfin.nix+6−4

This diff is too big to show here.

nixos/modules/services/misc/klipper.nix+1

This diff is too big to show here.

nixos/modules/services/misc/lidarr.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/mame.nix+3−1

This diff is too big to show here.

nixos/modules/services/misc/matrix-appservice-discord.nix+7−2

This diff is too big to show here.

nixos/modules/services/misc/matrix-appservice-irc.nix+3

This diff is too big to show here.

nixos/modules/services/misc/matrix-conduit.nixnew file+149

This diff is too big to show here.

nixos/modules/services/misc/matrix-synapse.nixdeleted−778

This diff is too big to show here.

nixos/modules/services/misc/mautrix-facebook.nixnew file+195

This diff is too big to show here.

nixos/modules/services/misc/mautrix-telegram.nix+5−2

This diff is too big to show here.

nixos/modules/services/misc/mbpfan.nix+59−61

This diff is too big to show here.

nixos/modules/services/misc/mediatomb.nix+10−7

This diff is too big to show here.

nixos/modules/services/misc/moonraker.nix+44−1

This diff is too big to show here.

nixos/modules/services/misc/mwlib.nixdeleted−258

This diff is too big to show here.

nixos/modules/services/misc/mx-puppet-discord.nix+9−7

This diff is too big to show here.

nixos/modules/services/misc/n8n.nix+2−1

This diff is too big to show here.

nixos/modules/services/misc/nitter.nix+12−5

This diff is too big to show here.

nixos/modules/services/misc/nix-daemon.nix+508−282

This diff is too big to show here.

nixos/modules/services/misc/nix-gc.nix+9−3

This diff is too big to show here.

nixos/modules/services/misc/nix-optimise.nix+8−2

This diff is too big to show here.

nixos/modules/services/misc/nix-ssh-serve.nix+4−2

This diff is too big to show here.

nixos/modules/services/misc/nzbhydra2.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/octoprint.nix+2−2

This diff is too big to show here.

nixos/modules/services/misc/owncast.nixnew file+98

This diff is too big to show here.

nixos/modules/services/misc/packagekit.nix+4−2

This diff is too big to show here.

nixos/modules/services/misc/paperless-ng.nixdeleted−308

This diff is too big to show here.

nixos/modules/services/misc/paperless.nixnew file+320

This diff is too big to show here.

nixos/modules/services/misc/plex.nix+43−14

This diff is too big to show here.

nixos/modules/services/misc/prowlarr.nixnew file+41

This diff is too big to show here.

nixos/modules/services/misc/redmine.nix+9−8

This diff is too big to show here.

nixos/modules/services/misc/ripple-data-api.nix+3−1

This diff is too big to show here.

nixos/modules/services/misc/rippled.nix+11−5

This diff is too big to show here.

nixos/modules/services/misc/rmfakecloud.nixnew file+147

This diff is too big to show here.

nixos/modules/services/misc/safeeyes.nix+4

This diff is too big to show here.

nixos/modules/services/misc/sickbeard.nix+6−3

This diff is too big to show here.

nixos/modules/services/misc/signald.nixnew file+105

This diff is too big to show here.

nixos/modules/services/misc/snapper.nix+42−19

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/builds.nix+5−3

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/default.nix+1321−133

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/dispatch.nix+3−1

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/git.nix+6−3

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/hg.nix+3−1

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/hub.nix+3−1

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/lists.nix+3−1

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/man.nix+3−1

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/meta.nix+3−1

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/paste.nix+3−1

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/service.nix+370−61

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/sourcehut.xml+14−10

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/todo.nix+3−1

This diff is too big to show here.

nixos/modules/services/misc/ssm-agent.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/subsonic.nix+8−4

This diff is too big to show here.

nixos/modules/services/misc/taskserver/default.nix+15−10

This diff is too big to show here.

nixos/modules/services/misc/taskserver/doc.xml+1−1

This diff is too big to show here.

nixos/modules/services/misc/taskserver/helper-tool.py+5−5

This diff is too big to show here.

nixos/modules/services/misc/tautulli.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/tp-auto-kbbl.nixnew file+58

This diff is too big to show here.

nixos/modules/services/misc/uhub.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/weechat.nix+9−5

This diff is too big to show here.

nixos/modules/services/misc/xmr-stak.nix+1−1

This diff is too big to show here.

nixos/modules/services/misc/xmrig.nixnew file+76

This diff is too big to show here.

nixos/modules/services/misc/zoneminder.nix+4−4

This diff is too big to show here.

nixos/modules/services/misc/zookeeper.nix+12−3

This diff is too big to show here.

nixos/modules/services/monitoring/alerta.nix−4

This diff is too big to show here.

nixos/modules/services/monitoring/arbtt.nix+1−2

This diff is too big to show here.

nixos/modules/services/monitoring/bosun.nix+1−2

This diff is too big to show here.

nixos/modules/services/monitoring/cadvisor.nix+2

This diff is too big to show here.

nixos/modules/services/monitoring/collectd.nix+56−28

This diff is too big to show here.

nixos/modules/services/monitoring/datadog-agent.nix+9−7

This diff is too big to show here.

nixos/modules/services/monitoring/grafana-reporter.nix+3−2

This diff is too big to show here.

nixos/modules/services/monitoring/grafana.nix+13−6

This diff is too big to show here.

nixos/modules/services/monitoring/graphite.nix+16−4

This diff is too big to show here.

nixos/modules/services/monitoring/heapster.nix+4−2

This diff is too big to show here.

nixos/modules/services/monitoring/incron.nix+7−2

This diff is too big to show here.

nixos/modules/services/monitoring/kapacitor.nix+1−4

This diff is too big to show here.

nixos/modules/services/monitoring/loki.nix+2−2

This diff is too big to show here.

nixos/modules/services/monitoring/mackerel-agent.nix−1

This diff is too big to show here.

nixos/modules/services/monitoring/metricbeat.nix+3−4

This diff is too big to show here.

nixos/modules/services/monitoring/mimir.nixnew file+63

This diff is too big to show here.

nixos/modules/services/monitoring/munin.nix+7−5

This diff is too big to show here.

nixos/modules/services/monitoring/nagios.nix+7−6

This diff is too big to show here.

nixos/modules/services/monitoring/netdata.nix+82−42

This diff is too big to show here.

nixos/modules/services/monitoring/parsedmarc.mdnew file+113

This diff is too big to show here.

nixos/modules/services/monitoring/parsedmarc.nixnew file+542

This diff is too big to show here.

nixos/modules/services/monitoring/parsedmarc.xmlnew file+125

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/alertmanager.nix+1−1

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/default.nix+1258−380

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters.nix+29−3

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters.xml+21

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/bird.nix+5−1

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/buildkite-agent.nix+1−1

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/dmarc.nixnew file+117

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/dovecot.nix+4

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/fastly.nixnew file+41

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/flow.nix+1−1

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/kea.nix+9−1

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/knot.nix+5−1

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/mail.nix+1−1

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/mikrotik.nix+2−2

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/modemmanager.nix+4

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/nginx.nix+5−5

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/node.nix+11−2

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/pihole.nix+2−2

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/postfix.nix+3

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/postgres.nix+4

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/process.nix+6−8

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/pve.nixnew file+118

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/rspamd.nix+2−2

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/rtl_433.nix+5

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/script.nix+1−1

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/smartctl.nixnew file+75

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/smokeping.nix+1

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/snmp.nix+7−9

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/sql.nix+4

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/systemd.nix+5−1

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/unbound.nix+4

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/varnish.nix+3−2

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/exporters/wireguard.nix+5

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/pushgateway.nix+1−1

This diff is too big to show here.

nixos/modules/services/monitoring/scollector.nix+2−3

This diff is too big to show here.

nixos/modules/services/monitoring/smartd.nix+6−1

This diff is too big to show here.

nixos/modules/services/monitoring/teamviewer.nix+6−3

This diff is too big to show here.

nixos/modules/services/monitoring/telegraf.nix+2−2

This diff is too big to show here.

nixos/modules/services/monitoring/thanos.nix+7−4

This diff is too big to show here.

nixos/modules/services/monitoring/tuptime.nix+1

This diff is too big to show here.

nixos/modules/services/monitoring/unifi-poller.nix+80−4

This diff is too big to show here.

nixos/modules/services/monitoring/uptime.nix+7−3

This diff is too big to show here.

nixos/modules/services/monitoring/zabbix-agent.nix+5−5

This diff is too big to show here.

nixos/modules/services/monitoring/zabbix-proxy.nix+18−7

This diff is too big to show here.

nixos/modules/services/monitoring/zabbix-server.nix+17−6

This diff is too big to show here.

nixos/modules/services/network-filesystems/ceph.nix+12−22

This diff is too big to show here.

nixos/modules/services/network-filesystems/drbd.nix+5−7

This diff is too big to show here.

nixos/modules/services/network-filesystems/glusterfs.nix+1−4

This diff is too big to show here.

nixos/modules/services/network-filesystems/ipfs.nix+53−39

This diff is too big to show here.

nixos/modules/services/network-filesystems/litestream/default.nix+1−1

This diff is too big to show here.

nixos/modules/services/network-filesystems/moosefs.nixnew file+249

This diff is too big to show here.

nixos/modules/services/network-filesystems/openafs/client.nix+7−8

This diff is too big to show here.

nixos/modules/services/network-filesystems/openafs/server.nix+3−3

This diff is too big to show here.

nixos/modules/services/network-filesystems/orangefs/client.nix−1

This diff is too big to show here.

nixos/modules/services/network-filesystems/orangefs/server.nix+9−9

This diff is too big to show here.

nixos/modules/services/network-filesystems/rsyncd.nix+1−1

This diff is too big to show here.

nixos/modules/services/network-filesystems/samba.nix+17−6

This diff is too big to show here.

nixos/modules/services/network-filesystems/tahoe.nix+2−4

This diff is too big to show here.

nixos/modules/services/network-filesystems/webdav-server-rs.nixnew file+144

This diff is too big to show here.

nixos/modules/services/network-filesystems/webdav.nixnew file+107

This diff is too big to show here.

nixos/modules/services/network-filesystems/xtreemfs.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/3proxy.nix+3−16

This diff is too big to show here.

nixos/modules/services/networking/adguardhome.nix+67−5

This diff is too big to show here.

nixos/modules/services/networking/amuled.nix+6−2

This diff is too big to show here.

nixos/modules/services/networking/antennas.nixnew file+80

This diff is too big to show here.

nixos/modules/services/networking/asterisk.nix+13−45

This diff is too big to show here.

nixos/modules/services/networking/atftpd.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/avahi-daemon.nix+3−3

This diff is too big to show here.

nixos/modules/services/networking/bee.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/biboumi.nix+1

This diff is too big to show here.

nixos/modules/services/networking/bind.nix+15−4

This diff is too big to show here.

nixos/modules/services/networking/bird.nix+90−75

This diff is too big to show here.

nixos/modules/services/networking/bitcoind.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/bitlbee.nix+8−16

This diff is too big to show here.

nixos/modules/services/networking/blockbook-frontend.nix+6−9

This diff is too big to show here.

nixos/modules/services/networking/blocky.nixnew file+40

This diff is too big to show here.

nixos/modules/services/networking/charybdis.nix+8−1

This diff is too big to show here.

nixos/modules/services/networking/cjdns.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/cloudflare-dyndns.nixnew file+93

This diff is too big to show here.

nixos/modules/services/networking/connman.nix+5−4

This diff is too big to show here.

nixos/modules/services/networking/consul.nix+40−10

This diff is too big to show here.

nixos/modules/services/networking/coredns.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/corerad.nix+3−3

This diff is too big to show here.

nixos/modules/services/networking/coturn.nix+4−2

This diff is too big to show here.

nixos/modules/services/networking/create_ap.nixnew file+50

This diff is too big to show here.

nixos/modules/services/networking/croc.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/ddclient.nix+44−23

This diff is too big to show here.

nixos/modules/services/networking/dhcpcd.nix+22−1

This diff is too big to show here.

nixos/modules/services/networking/dhcpd.nix+49−50

This diff is too big to show here.

nixos/modules/services/networking/dnscache.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/dnscrypt-proxy2.nix+6−3

This diff is too big to show here.

nixos/modules/services/networking/dnscrypt-wrapper.nix+2

This diff is too big to show here.

nixos/modules/services/networking/dnsmasq.nix+3−1

This diff is too big to show here.

nixos/modules/services/networking/doh-proxy-rust.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/ejabberd.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/envoy.nixnew file+84

This diff is too big to show here.

nixos/modules/services/networking/epmd.nix+1

This diff is too big to show here.

nixos/modules/services/networking/ergo.nix+4−2

This diff is too big to show here.

nixos/modules/services/networking/ergochat.nixnew file+155

This diff is too big to show here.

nixos/modules/services/networking/eternal-terminal.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/ferm.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/firefox/sync-server.nixdeleted−183

This diff is too big to show here.

nixos/modules/services/networking/firewall.nix+4−9

This diff is too big to show here.

nixos/modules/services/networking/flannel.nix+5−2

This diff is too big to show here.

nixos/modules/services/networking/freeradius.nix+2

This diff is too big to show here.

nixos/modules/services/networking/frr.nixnew file+211

This diff is too big to show here.

nixos/modules/services/networking/ghostunnel.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/git-daemon.nix+1

This diff is too big to show here.

nixos/modules/services/networking/globalprotect-vpn.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/gnunet.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/gobgpd.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/gogoclient.nixdeleted−87

This diff is too big to show here.

nixos/modules/services/networking/hans.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/headscale.nixnew file+490

This diff is too big to show here.

nixos/modules/services/networking/https-dns-proxy.nixnew file+128

This diff is too big to show here.

nixos/modules/services/networking/hylafax/options.nix+11−13

This diff is too big to show here.

nixos/modules/services/networking/i2pd.nix+17−10

This diff is too big to show here.

nixos/modules/services/networking/icecream/daemon.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/icecream/scheduler.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/inspircd.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/iodine.nix+2−1

This diff is too big to show here.

nixos/modules/services/networking/ircd-hybrid/default.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/iscsi/initiator.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/iscsi/root-initiator.nix+9

This diff is too big to show here.

nixos/modules/services/networking/iwd.nix+15−6

This diff is too big to show here.

nixos/modules/services/networking/jibri/default.nixnew file+417

This diff is too big to show here.

nixos/modules/services/networking/jibri/logging.properties-journalnew file+32

This diff is too big to show here.

nixos/modules/services/networking/jicofo.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/jitsi-videobridge.nix+5−3

This diff is too big to show here.

nixos/modules/services/networking/kea.nix+81−9

This diff is too big to show here.

nixos/modules/services/networking/keepalived/vrrp-instance-options.nix+1−3

This diff is too big to show here.

nixos/modules/services/networking/keepalived/vrrp-script-options.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/kippo.nixdeleted−117

This diff is too big to show here.

nixos/modules/services/networking/knot.nix+43−8

This diff is too big to show here.

nixos/modules/services/networking/kresd.nix+7−6

This diff is too big to show here.

nixos/modules/services/networking/lambdabot.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/libreswan.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/lxd-image-server.nixnew file+133

This diff is too big to show here.

nixos/modules/services/networking/mailpile.nixdeleted−74

This diff is too big to show here.

nixos/modules/services/networking/minidlna.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/miredo.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/monero.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/morty.nix+4−5

This diff is too big to show here.

nixos/modules/services/networking/mosquitto.mdnew file+102

This diff is too big to show here.

nixos/modules/services/networking/mosquitto.nix+541−175

This diff is too big to show here.

nixos/modules/services/networking/mosquitto.xmlnew file+147

This diff is too big to show here.

nixos/modules/services/networking/mozillavpn.nixnew file+19

This diff is too big to show here.

nixos/modules/services/networking/mtr-exporter.nixnew file+87

This diff is too big to show here.

nixos/modules/services/networking/multipath.nixnew file+557

This diff is too big to show here.

nixos/modules/services/networking/murmur.nix+3−3

This diff is too big to show here.

nixos/modules/services/networking/mxisd.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/nat.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/nats.nix+1−2

This diff is too big to show here.

nixos/modules/services/networking/nbd.nixnew file+159

This diff is too big to show here.

nixos/modules/services/networking/ncdns.nix+6−3

This diff is too big to show here.

nixos/modules/services/networking/ndppd.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/nebula.nix+6−8

This diff is too big to show here.

nixos/modules/services/networking/networkmanager.nix+75−61

This diff is too big to show here.

nixos/modules/services/networking/nftables.nix+6−12

This diff is too big to show here.

nixos/modules/services/networking/ngircd.nix+5−2

This diff is too big to show here.

nixos/modules/services/networking/nix-serve.nix+19−5

This diff is too big to show here.

nixos/modules/services/networking/nixops-dns.nix−1

This diff is too big to show here.

nixos/modules/services/networking/nntp-proxy.nix+18−18

This diff is too big to show here.

nixos/modules/services/networking/nomad.nix+20−7

This diff is too big to show here.

nixos/modules/services/networking/nsd.nix+11−16

This diff is too big to show here.

nixos/modules/services/networking/ntopng.nix+57−13

This diff is too big to show here.

nixos/modules/services/networking/ntp/chrony.nix+2−1

This diff is too big to show here.

nixos/modules/services/networking/ntp/ntpd.nix+8−7

This diff is too big to show here.

nixos/modules/services/networking/ntp/openntpd.nix+4−1

This diff is too big to show here.

nixos/modules/services/networking/ofono.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/onedrive.nix+1−2

This diff is too big to show here.

nixos/modules/services/networking/openconnect.nixnew file+137

This diff is too big to show here.

nixos/modules/services/networking/openfire.nixdeleted−56

This diff is too big to show here.

nixos/modules/services/networking/openvpn.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/ostinato.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/pdns-recursor.nix+13−8

This diff is too big to show here.

nixos/modules/services/networking/pleroma.nix+12−4

This diff is too big to show here.

nixos/modules/services/networking/pleroma.xml+177−121

This diff is too big to show here.

nixos/modules/services/networking/powerdns.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/pppd.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/privoxy.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/prosody.nix+3−2

This diff is too big to show here.

nixos/modules/services/networking/prosody.xml+1−1

This diff is too big to show here.

nixos/modules/services/networking/quassel.nix+6−3

This diff is too big to show here.

nixos/modules/services/networking/quorum.nix+5−3

This diff is too big to show here.

nixos/modules/services/networking/racoon.nixdeleted−45

This diff is too big to show here.

nixos/modules/services/networking/radicale.nix+9−5

This diff is too big to show here.

nixos/modules/services/networking/radvd.nix+4−1

This diff is too big to show here.

nixos/modules/services/networking/rdnssd.nix+3−1

This diff is too big to show here.

nixos/modules/services/networking/resilio.nix+1

This diff is too big to show here.

nixos/modules/services/networking/sabnzbd.nix+8−1

This diff is too big to show here.

nixos/modules/services/networking/seafile.nixnew file+287

This diff is too big to show here.

nixos/modules/services/networking/searx.nix+3−4

This diff is too big to show here.

nixos/modules/services/networking/shadowsocks.nix+4−6

This diff is too big to show here.

nixos/modules/services/networking/shairport-sync.nix+29−2

This diff is too big to show here.

nixos/modules/services/networking/shellhub-agent.nix+26−17

This diff is too big to show here.

nixos/modules/services/networking/shorewall.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/shorewall6.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/shout.nix+3−1

This diff is too big to show here.

nixos/modules/services/networking/skydns.nix+2−1

This diff is too big to show here.

nixos/modules/services/networking/smartdns.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/smokeping.nix+61−21

This diff is too big to show here.

nixos/modules/services/networking/sniproxy.nix+6−17

This diff is too big to show here.

nixos/modules/services/networking/snowflake-proxy.nixnew file+81

This diff is too big to show here.

nixos/modules/services/networking/softether.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/soju.nix+1

This diff is too big to show here.

nixos/modules/services/networking/spacecookie.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/spiped.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/squid.nix+23−4

This diff is too big to show here.

nixos/modules/services/networking/ssh/sshd.nix+13−6

This diff is too big to show here.

nixos/modules/services/networking/strongswan-swanctl/module.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/strongswan-swanctl/swanctl-params.nix+10

This diff is too big to show here.

nixos/modules/services/networking/strongswan.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/stubby.nix+46−174

This diff is too big to show here.

nixos/modules/services/networking/stunnel.nix+3−2

This diff is too big to show here.

nixos/modules/services/networking/supplicant.nix+3−3

This diff is too big to show here.

nixos/modules/services/networking/supybot.nix+4−3

This diff is too big to show here.

nixos/modules/services/networking/syncplay.nix+18−2

This diff is too big to show here.

nixos/modules/services/networking/syncthing.nix+28−8

This diff is too big to show here.

nixos/modules/services/networking/tailscale.nix+10−2

This diff is too big to show here.

nixos/modules/services/networking/teamspeak3.nix+20−2

This diff is too big to show here.

nixos/modules/services/networking/tedicross.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/teleport.nixnew file+99

This diff is too big to show here.

nixos/modules/services/networking/tetrd.nixnew file+96

This diff is too big to show here.

nixos/modules/services/networking/thelounge.nix+39−8

This diff is too big to show here.

nixos/modules/services/networking/tinc.nix+6−6

This diff is too big to show here.

nixos/modules/services/networking/tinydns.nix+5−1

This diff is too big to show here.

nixos/modules/services/networking/tox-bootstrapd.nix+8−13

This diff is too big to show here.

nixos/modules/services/networking/tox-node.nix+1−6

This diff is too big to show here.

nixos/modules/services/networking/toxvpn.nix+4−2

This diff is too big to show here.

nixos/modules/services/networking/trickster.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/tvheadend.nix+3−1

This diff is too big to show here.

nixos/modules/services/networking/ucarp.nix+5−5

This diff is too big to show here.

nixos/modules/services/networking/unbound.nix+3−2

This diff is too big to show here.

nixos/modules/services/networking/unifi.nix+47−62

This diff is too big to show here.

nixos/modules/services/networking/v2ray.nix+13−5

This diff is too big to show here.

nixos/modules/services/networking/vsftpd.nix+5−2

This diff is too big to show here.

nixos/modules/services/networking/wakeonlan.nixdeleted−70

This diff is too big to show here.

nixos/modules/services/networking/wasabibackend.nix+4−2

This diff is too big to show here.

nixos/modules/services/networking/websockify.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/wg-netmanager.nixnew file+42

This diff is too big to show here.

nixos/modules/services/networking/wg-quick.nix+12−13

This diff is too big to show here.

nixos/modules/services/networking/wicd.nixdeleted−40

This diff is too big to show here.

nixos/modules/services/networking/wireguard.nix+7−7

This diff is too big to show here.

nixos/modules/services/networking/wpa_supplicant.nix+147−20

This diff is too big to show here.

nixos/modules/services/networking/x2goserver.nix+10−7

This diff is too big to show here.

nixos/modules/services/networking/xandikos.nix+2−2

This diff is too big to show here.

nixos/modules/services/networking/xrdp.nix+9−3

This diff is too big to show here.

nixos/modules/services/networking/yggdrasil.nix+1−1

This diff is too big to show here.

nixos/modules/services/networking/yggdrasil.xml−1

This diff is too big to show here.

nixos/modules/services/networking/zeronet.nix+3−5

This diff is too big to show here.

nixos/modules/services/networking/zerotierone.nix+1−2

This diff is too big to show here.

nixos/modules/services/networking/znc/default.nix+3−3

This diff is too big to show here.

nixos/modules/services/networking/znc/options.nix+3−3

This diff is too big to show here.

nixos/modules/services/printing/cupsd.nix+1−1

This diff is too big to show here.

nixos/modules/services/scheduling/atd.nix+3−1

This diff is too big to show here.

nixos/modules/services/scheduling/cron.nix+7−2

This diff is too big to show here.

nixos/modules/services/scheduling/fcron.nix+3

This diff is too big to show here.

nixos/modules/services/search/elasticsearch.nix+27−6

This diff is too big to show here.

nixos/modules/services/search/hound.nix+13−11

This diff is too big to show here.

nixos/modules/services/search/kibana.nix+9−4

This diff is too big to show here.

nixos/modules/services/search/meilisearch.mdnew file+39

This diff is too big to show here.

nixos/modules/services/search/meilisearch.nixnew file+132

This diff is too big to show here.

nixos/modules/services/search/meilisearch.xmlnew file+85

This diff is too big to show here.

nixos/modules/services/search/solr.nix+1−1

This diff is too big to show here.

nixos/modules/services/security/aesmd.nixnew file+236

This diff is too big to show here.

nixos/modules/services/security/certmgr.nix+2−2

This diff is too big to show here.

nixos/modules/services/security/cfssl.nix+56−43

This diff is too big to show here.

nixos/modules/services/security/clamav.nix+4−5

This diff is too big to show here.

nixos/modules/services/security/fail2ban.nix+6−4

This diff is too big to show here.

nixos/modules/services/security/fprintd.nix+2−2

This diff is too big to show here.

nixos/modules/services/security/fprot.nixdeleted−82

This diff is too big to show here.

nixos/modules/services/security/haka.nix+1−1

This diff is too big to show here.

nixos/modules/services/security/haveged.nix+39−29

This diff is too big to show here.

nixos/modules/services/security/hockeypuck.nix+3−1

This diff is too big to show here.

nixos/modules/services/security/nginx-sso.nix+2−2

This diff is too big to show here.

nixos/modules/services/security/oauth2_proxy.nix+10−5

This diff is too big to show here.

nixos/modules/services/security/oauth2_proxy_nginx.nix+1

This diff is too big to show here.

nixos/modules/services/security/opensnitch.nixnew file+125

This diff is too big to show here.

nixos/modules/services/security/physlock.nix+6−4

This diff is too big to show here.

nixos/modules/services/security/privacyidea.nix+10−6

This diff is too big to show here.

nixos/modules/services/security/shibboleth-sp.nix+1−1

This diff is too big to show here.

nixos/modules/services/security/sks.nix+2−2

This diff is too big to show here.

nixos/modules/services/security/sslmate-agent.nixnew file+32

This diff is too big to show here.

nixos/modules/services/security/step-ca.nix+13−1

This diff is too big to show here.

nixos/modules/services/security/tor.nix+28−7

This diff is too big to show here.

nixos/modules/services/security/torsocks.nix+1

This diff is too big to show here.

nixos/modules/services/security/usbguard.nix+1−1

This diff is too big to show here.

nixos/modules/services/security/vault.nix+8−2

This diff is too big to show here.

nixos/modules/services/security/vaultwarden/default.nix+9−6

This diff is too big to show here.

nixos/modules/services/security/yubikey-agent.nix+8−2

This diff is too big to show here.

nixos/modules/services/system/cachix-agent/default.nixnew file+57

This diff is too big to show here.

nixos/modules/services/system/cloud-init.nix+15−1

This diff is too big to show here.

nixos/modules/services/system/earlyoom.nix+134−97

This diff is too big to show here.

nixos/modules/services/system/kerberos/heimdal.nix+1−1

This diff is too big to show here.

nixos/modules/services/system/localtime.nix+2

This diff is too big to show here.

nixos/modules/services/system/nscd.nix+20−9

This diff is too big to show here.

nixos/modules/services/system/saslauthd.nix+1−1

This diff is too big to show here.

nixos/modules/services/system/self-deploy.nix+3−2

This diff is too big to show here.

nixos/modules/services/system/systembus-notify.nixnew file+27

This diff is too big to show here.

nixos/modules/services/torrent/deluge.nix+2−2

This diff is too big to show here.

nixos/modules/services/torrent/flexget.nix+1−1

This diff is too big to show here.

nixos/modules/services/torrent/magnetico.nix+3−1

This diff is too big to show here.

nixos/modules/services/torrent/opentracker.nix+1−1

This diff is too big to show here.

nixos/modules/services/torrent/peerflix.nix+8−2

This diff is too big to show here.

nixos/modules/services/torrent/rtorrent.nix+4−2

This diff is too big to show here.

nixos/modules/services/torrent/transmission.nix+225−135

This diff is too big to show here.

nixos/modules/services/ttys/getty.nix+11−13

This diff is too big to show here.

nixos/modules/services/ttys/kmscon.nix+24−5

This diff is too big to show here.

nixos/modules/services/video/epgstation/default.nix+192−153

This diff is too big to show here.

nixos/modules/services/video/epgstation/streaming.json+129−108

This diff is too big to show here.

nixos/modules/services/video/mirakurun.nix+4−4

This diff is too big to show here.

nixos/modules/services/video/replay-sorcery.nix+4−2

This diff is too big to show here.

nixos/modules/services/video/rtsp-simple-server.nixnew file+80

This diff is too big to show here.

nixos/modules/services/video/unifi-video.nix+88−82

This diff is too big to show here.

nixos/modules/services/wayland/cage.nix+6−1

This diff is too big to show here.

nixos/modules/services/web-apps/atlassian/confluence.nix+2−2

This diff is too big to show here.

nixos/modules/services/web-apps/atlassian/crowd.nix+2−2

This diff is too big to show here.

nixos/modules/services/web-apps/atlassian/jira.nix+3−2

This diff is too big to show here.

nixos/modules/services/web-apps/baget.nixnew file+170

This diff is too big to show here.

nixos/modules/services/web-apps/bookstack.nix+154−73

This diff is too big to show here.

nixos/modules/services/web-apps/code-server.nixnew file+139

This diff is too big to show here.

nixos/modules/services/web-apps/cryptpad.nix+2−2

This diff is too big to show here.

nixos/modules/services/web-apps/dex.nixnew file+118

This diff is too big to show here.

nixos/modules/services/web-apps/discourse.nix+59−29

This diff is too big to show here.

nixos/modules/services/web-apps/discourse.xml+2−2

This diff is too big to show here.

nixos/modules/services/web-apps/documize.nix+1

This diff is too big to show here.

nixos/modules/services/web-apps/dokuwiki.nix+325−274

This diff is too big to show here.

nixos/modules/services/web-apps/engelsystem.nix+2−2

This diff is too big to show here.

nixos/modules/services/web-apps/ethercalc.nixnew file+62

This diff is too big to show here.

nixos/modules/services/web-apps/fluidd.nix+6−4

This diff is too big to show here.

nixos/modules/services/web-apps/galene.nix+36−2

This diff is too big to show here.

nixos/modules/services/web-apps/gerrit.nix+4−1

This diff is too big to show here.

nixos/modules/services/web-apps/hedgedoc.nix+72−8

This diff is too big to show here.

nixos/modules/services/web-apps/hledger-web.nix+2−2

This diff is too big to show here.

nixos/modules/services/web-apps/icingaweb2/icingaweb2.nix+1−1

This diff is too big to show here.

nixos/modules/services/web-apps/ihatemoney/default.nix+17−2

This diff is too big to show here.

nixos/modules/services/web-apps/invidious.nixnew file+264

This diff is too big to show here.

nixos/modules/services/web-apps/invoiceplane.nixnew file+305

This diff is too big to show here.

nixos/modules/services/web-apps/isso.nix+2−2

This diff is too big to show here.

nixos/modules/services/web-apps/jirafeau.nix+10−6

This diff is too big to show here.

nixos/modules/services/web-apps/jitsi-meet.nix+127−11

This diff is too big to show here.

nixos/modules/services/web-apps/jitsi-meet.xml+2−2

This diff is too big to show here.

nixos/modules/services/web-apps/keycloak.nix+546−599

This diff is too big to show here.

nixos/modules/services/web-apps/keycloak.xml+65−69

This diff is too big to show here.

nixos/modules/services/web-apps/lemmy.mdnew file+34

This diff is too big to show here.

nixos/modules/services/web-apps/lemmy.nixnew file+236

This diff is too big to show here.

nixos/modules/services/web-apps/lemmy.xmlnew file+56

This diff is too big to show here.

nixos/modules/services/web-apps/limesurvey.nix+5−5

This diff is too big to show here.

nixos/modules/services/web-apps/mastodon.nix+50−11

This diff is too big to show here.

nixos/modules/services/web-apps/matomo.nix+36−17

This diff is too big to show here.

nixos/modules/services/web-apps/mattermost.nix+145−37

This diff is too big to show here.

nixos/modules/services/web-apps/mediawiki.nix+6−5

This diff is too big to show here.

nixos/modules/services/web-apps/miniflux.nix+27−30

This diff is too big to show here.

nixos/modules/services/web-apps/moinmoin.nixdeleted−304

This diff is too big to show here.

nixos/modules/services/web-apps/moodle.nix+6−6

This diff is too big to show here.

nixos/modules/services/web-apps/netbox.nixnew file+265

This diff is too big to show here.

nixos/modules/services/web-apps/nextcloud.nix+373−93

This diff is too big to show here.

nixos/modules/services/web-apps/nextcloud.xml+7−1

This diff is too big to show here.

nixos/modules/services/web-apps/nexus.nix+22

This diff is too big to show here.

nixos/modules/services/web-apps/nifi.nixnew file+318

This diff is too big to show here.

nixos/modules/services/web-apps/node-red.nix+4−3

This diff is too big to show here.

nixos/modules/services/web-apps/openwebrx.nixnew file+34

This diff is too big to show here.

nixos/modules/services/web-apps/peertube.nixnew file+475

This diff is too big to show here.

nixos/modules/services/web-apps/pgpkeyserver-lite.nix+5−2

This diff is too big to show here.

nixos/modules/services/web-apps/pict-rs.mdnew file+88

This diff is too big to show here.

nixos/modules/services/web-apps/pict-rs.nixnew file+50

This diff is too big to show here.

nixos/modules/services/web-apps/pict-rs.xmlnew file+162

This diff is too big to show here.

nixos/modules/services/web-apps/plantuml-server.nix+21−4

This diff is too big to show here.

nixos/modules/services/web-apps/plausible.nix+49−42

This diff is too big to show here.

nixos/modules/services/web-apps/powerdns-admin.nixnew file+152

This diff is too big to show here.

nixos/modules/services/web-apps/prosody-filer.nixnew file+86

This diff is too big to show here.

nixos/modules/services/web-apps/restya-board.nix+1−4

This diff is too big to show here.

nixos/modules/services/web-apps/rss-bridge.nix+2−4

This diff is too big to show here.

nixos/modules/services/web-apps/selfoss.nix−1

This diff is too big to show here.

nixos/modules/services/web-apps/shiori.nix+1−1

This diff is too big to show here.

nixos/modules/services/web-apps/timetagger.nixnew file+80

This diff is too big to show here.

nixos/modules/services/web-apps/trac.nixdeleted−79

This diff is too big to show here.

nixos/modules/services/web-apps/tt-rss.nix+4−6

This diff is too big to show here.

nixos/modules/services/web-apps/vikunja.nix+3−3

This diff is too big to show here.

nixos/modules/services/web-apps/whitebophir.nix+1−1

This diff is too big to show here.

nixos/modules/services/web-apps/wordpress.nix+93−75

This diff is too big to show here.

nixos/modules/services/web-apps/youtrack.nix+3−2

This diff is too big to show here.

nixos/modules/services/web-apps/zabbix.nix+12−5

This diff is too big to show here.

nixos/modules/services/web-servers/agate.nixnew file+148

This diff is too big to show here.

nixos/modules/services/web-servers/apache-httpd/default.nix+38−23

This diff is too big to show here.

nixos/modules/services/web-servers/apache-httpd/vhost-options.nix+7−4

This diff is too big to show here.

nixos/modules/services/web-servers/caddy/default.nix+247−128

This diff is too big to show here.

nixos/modules/services/web-servers/caddy/vhost-options.nix+61−10

This diff is too big to show here.

nixos/modules/services/web-servers/hydron.nix+1−1

This diff is too big to show here.

nixos/modules/services/web-servers/lighttpd/cgit.nix+7−5

This diff is too big to show here.

nixos/modules/services/web-servers/lighttpd/collectd.nix+5−1

This diff is too big to show here.

nixos/modules/services/web-servers/lighttpd/default.nix+13−1

This diff is too big to show here.

nixos/modules/services/web-servers/minio.nix+1−1

This diff is too big to show here.

nixos/modules/services/web-servers/molly-brown.nix+1−1

This diff is too big to show here.

nixos/modules/services/web-servers/nginx/default.nix+81−29

This diff is too big to show here.

nixos/modules/services/web-servers/nginx/gitweb.nix+1−1

This diff is too big to show here.

nixos/modules/services/web-servers/nginx/location-options.nix+2−2

This diff is too big to show here.

nixos/modules/services/web-servers/nginx/vhost-options.nix+32−9

This diff is too big to show here.

nixos/modules/services/web-servers/phpfpm/default.nix+5−5

This diff is too big to show here.

nixos/modules/services/web-servers/pomerium.nix+7−3

This diff is too big to show here.

nixos/modules/services/web-servers/shellinabox.nixdeleted−122

This diff is too big to show here.

nixos/modules/services/web-servers/tomcat.nix+6−5

This diff is too big to show here.

nixos/modules/services/web-servers/traefik.nix+3−3

This diff is too big to show here.

nixos/modules/services/web-servers/trafficserver.nixdeleted−318

This diff is too big to show here.

nixos/modules/services/web-servers/trafficserver/default.nixnew file+310

This diff is too big to show here.

nixos/modules/services/web-servers/trafficserver/ip_allow.jsonnew file+36

This diff is too big to show here.

nixos/modules/services/web-servers/trafficserver/logging.jsonnew file+37

This diff is too big to show here.

nixos/modules/services/web-servers/ttyd.nix+1−1

This diff is too big to show here.

nixos/modules/services/web-servers/unit/default.nix+2−2

This diff is too big to show here.

nixos/modules/services/web-servers/uwsgi.nix+10−12

This diff is too big to show here.

nixos/modules/services/web-servers/varnish/default.nix+9−7

This diff is too big to show here.

nixos/modules/services/web-servers/zope2.nix+6−2

This diff is too big to show here.

nixos/modules/services/x11/clight.nix+8

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/cde.nix+4−3

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/cinnamon.nix+14−7

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/default.nix+1−1

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/enlightenment.nix+24−3

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/gnome.nix+62−77

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/gnome.xml−24

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/kodi.nix+2−2

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/lumina.nix+4

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/lxqt.nix+12−3

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/mate.nix+10−38

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/none.nix+44−5

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/pantheon.nix+37−22

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/pantheon.xml+11−5

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/plasma5.nix+330−131

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/retroarch.nixnew file+40

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/surf-display.nix+2−1

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/xfce.nix+10−3

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/xterm.nix+2−2

This diff is too big to show here.

nixos/modules/services/x11/display-managers/default.nix+16−11

This diff is too big to show here.

nixos/modules/services/x11/display-managers/gdm.nix+38−55

This diff is too big to show here.

nixos/modules/services/x11/display-managers/lightdm-greeters/enso-os.nix+3−3

This diff is too big to show here.

nixos/modules/services/x11/display-managers/lightdm-greeters/gtk.nix+3−3

This diff is too big to show here.

nixos/modules/services/x11/display-managers/lightdm.nix+5−3

This diff is too big to show here.

nixos/modules/services/x11/display-managers/sddm.nix+9−8

This diff is too big to show here.

nixos/modules/services/x11/display-managers/startx.nix−3

This diff is too big to show here.

nixos/modules/services/x11/display-managers/sx.nix+2−5

This diff is too big to show here.

nixos/modules/services/x11/extra-layouts.nix+9−48

This diff is too big to show here.

nixos/modules/services/x11/hardware/libinput.nix+20−4

This diff is too big to show here.

nixos/modules/services/x11/hardware/synaptics.nix+6−1

This diff is too big to show here.

nixos/modules/services/x11/imwheel.nix+11−9

This diff is too big to show here.

nixos/modules/services/x11/picom.nix+13−3

This diff is too big to show here.

nixos/modules/services/x11/redshift.nix+1−1

This diff is too big to show here.

nixos/modules/services/x11/touchegg.nixnew file+38

This diff is too big to show here.

nixos/modules/services/x11/unclutter-xfixes.nix+1−1

This diff is too big to show here.

nixos/modules/services/x11/unclutter.nix+1−1

This diff is too big to show here.

nixos/modules/services/x11/urxvtd.nix+1−1

This diff is too big to show here.

nixos/modules/services/x11/window-managers/awesome.nix+1−1

This diff is too big to show here.

nixos/modules/services/x11/window-managers/bspwm.nix+6−6

This diff is too big to show here.

nixos/modules/services/x11/window-managers/clfswm.nix+1−1

This diff is too big to show here.

nixos/modules/services/x11/window-managers/exwm.nix+4−3

This diff is too big to show here.

nixos/modules/services/x11/window-managers/herbstluftwm.nix+1−1

This diff is too big to show here.

nixos/modules/services/x11/window-managers/i3.nix+3−3

This diff is too big to show here.

nixos/modules/services/x11/window-managers/qtile.nix+11−4

This diff is too big to show here.

nixos/modules/services/x11/window-managers/wmderland.nix+1−1

This diff is too big to show here.

nixos/modules/services/x11/window-managers/xmonad.nix+51−15

This diff is too big to show here.

nixos/modules/services/x11/xautolock.nix+4−3

This diff is too big to show here.

nixos/modules/services/x11/xserver.nix+37−15

This diff is too big to show here.

nixos/modules/system/activation/activation-script.nix+19−8

This diff is too big to show here.

nixos/modules/system/activation/switch-to-configuration.plmode 100644 → 100755+692−259

This diff is too big to show here.

nixos/modules/system/activation/top-level.nix+93−31

This diff is too big to show here.

nixos/modules/system/boot/binfmt.nix+50−8

This diff is too big to show here.

nixos/modules/system/boot/initrd-openvpn.nix+1−1

This diff is too big to show here.

nixos/modules/system/boot/initrd-ssh.nix+1−1

This diff is too big to show here.

nixos/modules/system/boot/kernel.nix+13−10

This diff is too big to show here.

nixos/modules/system/boot/kernel_config.nix+1−1

This diff is too big to show here.

nixos/modules/system/boot/loader/generic-extlinux-compatible/default.nix+18−1

This diff is too big to show here.

nixos/modules/system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.sh+9−3

This diff is too big to show here.

nixos/modules/system/boot/loader/grub/grub.nix+33−6

This diff is too big to show here.

nixos/modules/system/boot/loader/grub/install-grub.pl+93−91

This diff is too big to show here.

nixos/modules/system/boot/loader/grub/ipxe.nix+1−1

This diff is too big to show here.

nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py+102−60

This diff is too big to show here.

nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix+152−3

This diff is too big to show here.

nixos/modules/system/boot/luksroot.nix+75−9

This diff is too big to show here.

nixos/modules/system/boot/modprobe.nix+2

This diff is too big to show here.

nixos/modules/system/boot/networkd.nix+328−14

This diff is too big to show here.

nixos/modules/system/boot/plymouth.nix+9−2

This diff is too big to show here.

nixos/modules/system/boot/resolved.nix+1

This diff is too big to show here.

nixos/modules/system/boot/stage-1-init.sh+40−39

This diff is too big to show here.

nixos/modules/system/boot/stage-1.nix+91−22

This diff is too big to show here.

nixos/modules/system/boot/stage-2-init.shmode 100644 → 100755+71−100

This diff is too big to show here.

nixos/modules/system/boot/stage-2.nix+2−39

This diff is too big to show here.

nixos/modules/system/boot/systemd-lib.nixdeleted−237

This diff is too big to show here.

nixos/modules/system/boot/systemd-nspawn.nixdeleted−133

This diff is too big to show here.

nixos/modules/system/boot/systemd-unit-options.nixdeleted−536

This diff is too big to show here.

nixos/modules/system/boot/systemd.nix+85−677

This diff is too big to show here.

nixos/modules/system/boot/systemd/coredump.nixnew file+57

This diff is too big to show here.

nixos/modules/system/boot/systemd/initrd-secrets.nixnew file+36

This diff is too big to show here.

nixos/modules/system/boot/systemd/initrd.nixnew file+502

This diff is too big to show here.

nixos/modules/system/boot/systemd/journald.nixnew file+131

This diff is too big to show here.

nixos/modules/system/boot/systemd/logind.nixnew file+114

This diff is too big to show here.

nixos/modules/system/boot/systemd/nspawn.nixnew file+131

This diff is too big to show here.

nixos/modules/system/boot/systemd/shutdown.nixnew file+58

This diff is too big to show here.

nixos/modules/system/boot/systemd/tmpfiles.nixnew file+120

This diff is too big to show here.

nixos/modules/system/boot/systemd/user.nixnew file+153

This diff is too big to show here.

nixos/modules/system/boot/timesyncd.nix+19−5

This diff is too big to show here.

nixos/modules/system/boot/tmp.nix+20−2

This diff is too big to show here.

nixos/modules/system/build.nixnew file+21

This diff is too big to show here.

nixos/modules/system/etc/etc-activation.nixnew file+12

This diff is too big to show here.

nixos/modules/system/etc/etc.nix+10−10

This diff is too big to show here.

nixos/modules/system/etc/setup-etc.pl+6

This diff is too big to show here.

nixos/modules/system/etc/test.nixnew file+70

This diff is too big to show here.

nixos/modules/tasks/auto-upgrade.nix+105−20

This diff is too big to show here.

nixos/modules/tasks/bcache.nix+16−6

This diff is too big to show here.

nixos/modules/tasks/filesystems.nix+32−3

This diff is too big to show here.

nixos/modules/tasks/filesystems/apfs.nixnew file+22

This diff is too big to show here.

nixos/modules/tasks/filesystems/btrfs.nix+3−3

This diff is too big to show here.

nixos/modules/tasks/filesystems/cifs.nix+1−1

This diff is too big to show here.

nixos/modules/tasks/filesystems/ecryptfs.nix+12−2

This diff is too big to show here.

nixos/modules/tasks/filesystems/ext.nix+10−4

This diff is too big to show here.

nixos/modules/tasks/filesystems/f2fs.nix+1−1

This diff is too big to show here.

nixos/modules/tasks/filesystems/jfs.nix+1−1

This diff is too big to show here.

nixos/modules/tasks/filesystems/nfs.nix+1−1

This diff is too big to show here.

nixos/modules/tasks/filesystems/reiserfs.nix+1−1

This diff is too big to show here.

nixos/modules/tasks/filesystems/unionfs-fuse.nix+13−2

This diff is too big to show here.

nixos/modules/tasks/filesystems/vfat.nix+1−1

This diff is too big to show here.

nixos/modules/tasks/filesystems/xfs.nix+2−2

This diff is too big to show here.

nixos/modules/tasks/filesystems/zfs.nix+19−39

This diff is too big to show here.

nixos/modules/tasks/lvm.nix+56−7

This diff is too big to show here.

nixos/modules/tasks/network-interfaces-scripted.nix+71

This diff is too big to show here.

nixos/modules/tasks/network-interfaces-systemd.nix+115−2

This diff is too big to show here.

nixos/modules/tasks/network-interfaces.nix+245−28

This diff is too big to show here.

nixos/modules/tasks/snapraid.nix+2−2

This diff is too big to show here.

nixos/modules/tasks/swraid.nix+35−9

This diff is too big to show here.

nixos/modules/testing/test-instrumentation.nix+32−32

This diff is too big to show here.

nixos/modules/virtualisation/amazon-ec2-amis.nixnew file+444

This diff is too big to show here.

nixos/modules/virtualisation/amazon-image.nix+6−1

This diff is too big to show here.

nixos/modules/virtualisation/amazon-options.nix+2−1

This diff is too big to show here.

nixos/modules/virtualisation/anbox.nix+1−1

This diff is too big to show here.

nixos/modules/virtualisation/azure-agent.nix+6−10

This diff is too big to show here.

nixos/modules/virtualisation/azure-common.nix+5−1

This diff is too big to show here.

nixos/modules/virtualisation/build-vm.nixnew file+58

This diff is too big to show here.

nixos/modules/virtualisation/container-config.nix+1−1

This diff is too big to show here.

nixos/modules/virtualisation/containerd.nix+6−2

This diff is too big to show here.

nixos/modules/virtualisation/containers.nix+4−4

This diff is too big to show here.

nixos/modules/virtualisation/cri-o.nix+8−4

This diff is too big to show here.

nixos/modules/virtualisation/digital-ocean-init.nix+1−1

This diff is too big to show here.

nixos/modules/virtualisation/docker-rootless.nixnew file+102

This diff is too big to show here.

nixos/modules/virtualisation/docker.nix+32−8

This diff is too big to show here.

nixos/modules/virtualisation/ec2-amis.nix+9−371

This diff is too big to show here.

nixos/modules/virtualisation/ecs-agent.nix+1−1

This diff is too big to show here.

nixos/modules/virtualisation/fetch-instance-ssh-keys.bashdeleted−36

This diff is too big to show here.

nixos/modules/virtualisation/google-compute-config.nix+32−103

This diff is too big to show here.

nixos/modules/virtualisation/hyperv-guest.nix+1−1

This diff is too big to show here.

nixos/modules/virtualisation/kubevirt.nixnew file+30

This diff is too big to show here.

nixos/modules/virtualisation/kvmgt.nix+1−1

This diff is too big to show here.

nixos/modules/virtualisation/libvirtd.nix+166−67

This diff is too big to show here.

nixos/modules/virtualisation/lxc-container.nix+161−13

This diff is too big to show here.

nixos/modules/virtualisation/lxd.nix+5−5

This diff is too big to show here.

nixos/modules/virtualisation/nixos-containers.nix+31−16

This diff is too big to show here.

nixos/modules/virtualisation/oci-containers.nix+15−17

This diff is too big to show here.

nixos/modules/virtualisation/openstack-config.nix+39−7

This diff is too big to show here.

nixos/modules/virtualisation/openstack-metadata-fetcher.nix+5−4

This diff is too big to show here.

nixos/modules/virtualisation/openstack-options.nixnew file+71

This diff is too big to show here.

nixos/modules/virtualisation/openvswitch.nix+9−54

This diff is too big to show here.

nixos/modules/virtualisation/parallels-guest.nix+1−2

This diff is too big to show here.

nixos/modules/virtualisation/podman-network-socket.nixdeleted−91

This diff is too big to show here.

nixos/modules/virtualisation/podman.nixdeleted−184

This diff is too big to show here.

nixos/modules/virtualisation/podman/default.nixnew file+187

This diff is too big to show here.

nixos/modules/virtualisation/podman-dnsname.nix → nixos/modules/virtualisation/podman/dnsname.nixrenamed

The content is the same.

nixos/modules/virtualisation/podman-network-socket-ghostunnel.nix → nixos/modules/virtualisation/podman/network-socket-ghostunnel.nixrenamed

The content is the same.

nixos/modules/virtualisation/podman/network-socket.nixnew file+95

This diff is too big to show here.

nixos/modules/virtualisation/proxmox-image.nixnew file+169

This diff is too big to show here.

nixos/modules/virtualisation/proxmox-lxc.nixnew file+64

This diff is too big to show here.

nixos/modules/virtualisation/qemu-guest-agent.nix+2−1

This diff is too big to show here.

nixos/modules/virtualisation/qemu-vm.nix+366−89

This diff is too big to show here.

nixos/modules/virtualisation/railcar.nix+3−4

This diff is too big to show here.

nixos/modules/virtualisation/spice-usb-redirection.nix+4−2

This diff is too big to show here.

nixos/modules/virtualisation/virtualbox-guest.nix+2−2

This diff is too big to show here.

nixos/modules/virtualisation/virtualbox-host.nix+10−2

This diff is too big to show here.

nixos/modules/virtualisation/vmware-guest.nix+25−1

This diff is too big to show here.

nixos/modules/virtualisation/vmware-host.nixnew file+166

This diff is too big to show here.

nixos/modules/virtualisation/waydroid.nixnew file+75

This diff is too big to show here.

nixos/modules/virtualisation/xen-dom0.nix+4−5

This diff is too big to show here.

nixos/release-combined.nix+4−2

This diff is too big to show here.

nixos/release-small.nix+4−2

This diff is too big to show here.

nixos/release.nix+33−2

This diff is too big to show here.

nixos/tests/acme.nix+366−210

This diff is too big to show here.

nixos/tests/adguardhome.nixnew file+57

This diff is too big to show here.

nixos/tests/aesmd.nixnew file+62

This diff is too big to show here.

nixos/tests/agda.nix+1−1

This diff is too big to show here.

nixos/tests/airsonic.nix+1−5

This diff is too big to show here.

nixos/tests/all-terminfo.nixnew file+31

This diff is too big to show here.

nixos/tests/all-tests.nix+156−33

This diff is too big to show here.

nixos/tests/amazon-init-shell.nix+1−1

This diff is too big to show here.

nixos/tests/ammonite.nixdeleted−20

This diff is too big to show here.

nixos/tests/apfs.nixnew file+54

This diff is too big to show here.

nixos/tests/apparmor.nix+1−1

This diff is too big to show here.

nixos/tests/atd.nix+1−1

This diff is too big to show here.

nixos/tests/atop.nix+6−16

This diff is too big to show here.

nixos/tests/avahi.nix+1−1

This diff is too big to show here.

nixos/tests/awscli.nixdeleted−17

This diff is too big to show here.

nixos/tests/bat.nixdeleted−12

This diff is too big to show here.

nixos/tests/bcachefs.nix+8−9

This diff is too big to show here.

nixos/tests/beanstalkd.nix+1−1

This diff is too big to show here.

nixos/tests/bees.nix+1−1

This diff is too big to show here.

nixos/tests/bind.nix+1−1

This diff is too big to show here.

nixos/tests/bird.nixnew file+129

This diff is too big to show here.

nixos/tests/bitcoind.nix+1−1

This diff is too big to show here.

nixos/tests/bittorrent.nix+1−1

This diff is too big to show here.

nixos/tests/blockbook-frontend.nix+1−1

This diff is too big to show here.

nixos/tests/blocky.nixnew file+34

This diff is too big to show here.

nixos/tests/boot-stage1.nix+3−1

This diff is too big to show here.

nixos/tests/boot.nix+44−9

This diff is too big to show here.

nixos/tests/borgbackup.nix+34−1

This diff is too big to show here.

nixos/tests/botamusique.nix+4

This diff is too big to show here.

nixos/tests/bpf.nixnew file+29

This diff is too big to show here.

nixos/tests/breitbandmessung.nixnew file+33

This diff is too big to show here.

nixos/tests/brscan5.nix+2−1

This diff is too big to show here.

nixos/tests/btrbk.nix+1−1

This diff is too big to show here.

nixos/tests/buildkite-agents.nix+1−1

This diff is too big to show here.

nixos/tests/caddy.nix+3−3

This diff is too big to show here.

nixos/tests/cage.nix+1−2

This diff is too big to show here.

nixos/tests/cagebreak.nix+1−2

This diff is too big to show here.

nixos/tests/calibre-web.nix−10

This diff is too big to show here.

nixos/tests/cassandra.nix−1

This diff is too big to show here.

nixos/tests/ceph-multi-node.nix+1−2

This diff is too big to show here.

nixos/tests/ceph-single-node-bluestore.nix−1

This diff is too big to show here.

nixos/tests/ceph-single-node.nix−1

This diff is too big to show here.

nixos/tests/cfssl.nix+1−1

This diff is too big to show here.

nixos/tests/chromium.nix+26−20

This diff is too big to show here.

nixos/tests/cifs-utils.nixdeleted−12

This diff is too big to show here.

nixos/tests/clickhouse.nix+1−1

This diff is too big to show here.

nixos/tests/cloud-init.nix+27−2

This diff is too big to show here.

nixos/tests/cntr.nix+18−6

This diff is too big to show here.

nixos/tests/collectd.nixnew file+38

This diff is too big to show here.

nixos/tests/common/acme/client/default.nix+4−2

This diff is too big to show here.

nixos/tests/common/acme/server/default.nix+5

This diff is too big to show here.

nixos/tests/common/lxd/config.yamlnew file+24

This diff is too big to show here.

nixos/tests/common/wayland-cage.nixnew file+13

This diff is too big to show here.

nixos/tests/containers-bridge.nix+2−3

This diff is too big to show here.

nixos/tests/containers-custom-pkgs.nix+1−1

This diff is too big to show here.

nixos/tests/containers-ephemeral.nix+4−5

This diff is too big to show here.

nixos/tests/containers-extra_veth.nix+2−3

This diff is too big to show here.

nixos/tests/containers-hosts.nix+1−2

This diff is too big to show here.

nixos/tests/containers-imperative.nix+11−12

This diff is too big to show here.

nixos/tests/containers-ip.nix+2−3

This diff is too big to show here.

nixos/tests/containers-macvlans.nix−2

This diff is too big to show here.

nixos/tests/containers-names.nix+1−1

This diff is too big to show here.

nixos/tests/containers-nested.nix+1−1

This diff is too big to show here.

nixos/tests/containers-physical_interfaces.nix−4

This diff is too big to show here.

nixos/tests/containers-portforward.nix+2−3

This diff is too big to show here.

nixos/tests/containers-tmpfs.nix+7−8

This diff is too big to show here.

nixos/tests/couchdb.nix+3

This diff is too big to show here.

nixos/tests/cri-o.nix+1−1

This diff is too big to show here.

nixos/tests/croc.nix+1−1

This diff is too big to show here.

nixos/tests/custom-ca.nix+104−93

This diff is too big to show here.

nixos/tests/deluge.nix+11−22

This diff is too big to show here.

nixos/tests/dex-oidc.nixnew file+78

This diff is too big to show here.

nixos/tests/disable-installer-tools.nixnew file+29

This diff is too big to show here.

nixos/tests/discourse.nix+2

This diff is too big to show here.

nixos/tests/dnsdist.nixnew file+48

This diff is too big to show here.

nixos/tests/doas.nix+9−1

This diff is too big to show here.

nixos/tests/docker-rootless.nixnew file+41

This diff is too big to show here.

nixos/tests/docker-tools-cross.nix+2−2

This diff is too big to show here.

nixos/tests/docker-tools.nix+47−6

This diff is too big to show here.

nixos/tests/documize.nix+1−1

This diff is too big to show here.

nixos/tests/doh-proxy-rust.nix+1−1

This diff is too big to show here.

nixos/tests/dokuwiki.nix+60−25

This diff is too big to show here.

nixos/tests/domination.nixnew file+26

This diff is too big to show here.

nixos/tests/dovecot.nix+1−1

This diff is too big to show here.

nixos/tests/drbd.nixnew file+87

This diff is too big to show here.

nixos/tests/earlyoom.nixnew file+16

This diff is too big to show here.

nixos/tests/ec2.nix+5

This diff is too big to show here.

nixos/tests/ecryptfs.nix+1−1

This diff is too big to show here.

nixos/tests/elk.nix+98−45

This diff is too big to show here.

nixos/tests/emacs-daemon.nix+2−2

This diff is too big to show here.

nixos/tests/empty-filenew file

No changes to the content.

nixos/tests/enlightenment.nix+4−5

This diff is too big to show here.

nixos/tests/env.nix+1−1

This diff is too big to show here.

nixos/tests/envoy.nixnew file+33

This diff is too big to show here.

nixos/tests/ergochat.nixnew file+97

This diff is too big to show here.

nixos/tests/etebase-server.nix+1−1

This diff is too big to show here.

nixos/tests/etesync-dav.nix+2−2

This diff is too big to show here.

nixos/tests/fancontrol.nix+1−1

This diff is too big to show here.

nixos/tests/fcitx/default.nix+1−2

This diff is too big to show here.

nixos/tests/fenics.nix+1−2

This diff is too big to show here.

nixos/tests/firefox.nix+3−6

This diff is too big to show here.

nixos/tests/fish.nix+1−1

This diff is too big to show here.

nixos/tests/fluentd.nix+1−1

This diff is too big to show here.

nixos/tests/fontconfig-default-fonts.nix+1−1

This diff is too big to show here.

nixos/tests/frr.nixnew file+104

This diff is too big to show here.

nixos/tests/fsck.nix+1−1

This diff is too big to show here.

nixos/tests/ft2-clone.nix+2−2

This diff is too big to show here.

nixos/tests/gerrit.nix−1

This diff is too big to show here.

nixos/tests/geth.nix+2−2

This diff is too big to show here.

nixos/tests/ghostunnel.nix+2−3

This diff is too big to show here.

nixos/tests/gitlab.nix+302−21

This diff is too big to show here.

nixos/tests/gitolite-fcgiwrap.nix+2−2

This diff is too big to show here.

nixos/tests/gnome-xorg.nix+17−2

This diff is too big to show here.

nixos/tests/gnome.nix+17−2

This diff is too big to show here.

nixos/tests/google-oslogin/default.nix+2−2

This diff is too big to show here.

nixos/tests/google-oslogin/server.nix+2−4

This diff is too big to show here.

nixos/tests/google-oslogin/server.pymode 100644 → 100755

Only the mode changed.

nixos/tests/gotify-server.nix+1−1

This diff is too big to show here.

nixos/tests/graphite.nix−1

This diff is too big to show here.

nixos/tests/graylog.nix+1−1

This diff is too big to show here.

nixos/tests/grocy.nix+1−1

This diff is too big to show here.

nixos/tests/grub.nix+1−1

This diff is too big to show here.

nixos/tests/hadoop/default.nixnew file+7

This diff is too big to show here.

nixos/tests/hadoop/hadoop.nixnew file+255

This diff is too big to show here.

nixos/tests/hadoop/hdfs.nix+57−27

This diff is too big to show here.

nixos/tests/hadoop/yarn.nix+22−23

This diff is too big to show here.

nixos/tests/handbrake.nixdeleted−31

This diff is too big to show here.

nixos/tests/haproxy.nix−1

This diff is too big to show here.

nixos/tests/hardened.nix+4−5

This diff is too big to show here.

nixos/tests/haste-server.nixnew file+23

This diff is too big to show here.

nixos/tests/hbase.nixnew file+30

This diff is too big to show here.

nixos/tests/herbstluftwm.nix+1−2

This diff is too big to show here.

nixos/tests/hibernate.nix+21−8

This diff is too big to show here.

nixos/tests/hitch/default.nix+1−1

This diff is too big to show here.

nixos/tests/hocker-fetchdocker/default.nix+1−1

This diff is too big to show here.

nixos/tests/hockeypuck.nix+1−1

This diff is too big to show here.

nixos/tests/home-assistant.nix+85−34

This diff is too big to show here.

nixos/tests/hostname.nix+1−1

This diff is too big to show here.

nixos/tests/hound.nix+1−1

This diff is too big to show here.

nixos/tests/hydra/common.nix+1−1

This diff is too big to show here.

nixos/tests/hydra/default.nix+2−2

This diff is too big to show here.

nixos/tests/i3wm.nix+1−1

This diff is too big to show here.

nixos/tests/ihatemoney.nixdeleted−62

This diff is too big to show here.

nixos/tests/ihatemoney/default.nixnew file+78

This diff is too big to show here.

nixos/tests/ihatemoney/rates.jsonnew file+39

This diff is too big to show here.

nixos/tests/ihatemoney/server.crtnew file+28

This diff is too big to show here.

nixos/tests/ihatemoney/server.keynew file+52

This diff is too big to show here.

nixos/tests/incron.nix+1−1

This diff is too big to show here.

nixos/tests/initrd-network.nix+1−1

This diff is too big to show here.

nixos/tests/initrd-secrets.nix+9−3

This diff is too big to show here.

nixos/tests/input-remapper.nixnew file+52

This diff is too big to show here.

nixos/tests/installed-tests/appstream-qt.nixnew file+9

This diff is too big to show here.

nixos/tests/installed-tests/appstream.nixnew file+9

This diff is too big to show here.

nixos/tests/installed-tests/default.nix+4−1

This diff is too big to show here.

nixos/tests/installed-tests/flatpak.nix+1

This diff is too big to show here.

nixos/tests/installed-tests/fwupd.nix−1

This diff is too big to show here.

nixos/tests/installed-tests/gjs.nix+6

This diff is too big to show here.

nixos/tests/installed-tests/power-profiles-daemon.nixnew file+9

This diff is too big to show here.

nixos/tests/installer-systemd-stage-1.nixnew file+33

This diff is too big to show here.

nixos/tests/installer.nix+44−37

This diff is too big to show here.

nixos/tests/invidious.nixnew file+81

This diff is too big to show here.

nixos/tests/invoiceplane.nixnew file+82

This diff is too big to show here.

nixos/tests/ipfs.nix+5

This diff is too big to show here.

nixos/tests/iscsi-multipath-root.nixnew file+267

This diff is too big to show here.

nixos/tests/iscsi-root.nix+5−5

This diff is too big to show here.

nixos/tests/isso.nix+1−1

This diff is too big to show here.

nixos/tests/jellyfin.nix+1−1

This diff is too big to show here.

nixos/tests/jenkins.nix+2

This diff is too big to show here.

nixos/tests/jibri.nixnew file+69

This diff is too big to show here.

nixos/tests/jitsi-meet.nix+2−3

This diff is too big to show here.

nixos/tests/k3s-single-node-docker.nixnew file+84

This diff is too big to show here.

nixos/tests/k3s-single-node.nixnew file+82

This diff is too big to show here.

nixos/tests/k3s.nixdeleted−78

This diff is too big to show here.

nixos/tests/kafka.nix−1

This diff is too big to show here.

nixos/tests/kbd-setfont-decompress.nix+1−1

This diff is too big to show here.

nixos/tests/kbd-update-search-paths-patch.nix+1−1

This diff is too big to show here.

nixos/tests/keepassxc.nix+43−9

This diff is too big to show here.

nixos/tests/kerberos/heimdal.nix+2−2

This diff is too big to show here.

nixos/tests/kerberos/mit.nix+1−1

This diff is too big to show here.

nixos/tests/kernel-generic.nix+10−17

This diff is too big to show here.

nixos/tests/kernel-latest-ath-user-regd.nix+1−1

This diff is too big to show here.

nixos/tests/kexec.nix+44−19

This diff is too big to show here.

nixos/tests/keycloak.nix+33−14

This diff is too big to show here.

nixos/tests/keymap.nix+1−1

This diff is too big to show here.

nixos/tests/knot.nix+6

This diff is too big to show here.

nixos/tests/krb5/deprecated-config.nix+1−1

This diff is too big to show here.

nixos/tests/krb5/example-config.nix+1−1

This diff is too big to show here.

nixos/tests/ksm.nix+1−1

This diff is too big to show here.

nixos/tests/kubernetes/base.nix+2−10

This diff is too big to show here.

nixos/tests/kubernetes/default.nix+1−1

This diff is too big to show here.

nixos/tests/kubernetes/dns.nix+3−3

This diff is too big to show here.

nixos/tests/kubernetes/e2e.nix+1−1

This diff is too big to show here.

nixos/tests/kubernetes/rbac.nix+9−9

This diff is too big to show here.

nixos/tests/libinput.nixnew file+38

This diff is too big to show here.

nixos/tests/libresprite.nixnew file+30

This diff is too big to show here.

nixos/tests/libreswan.nix+1−1

This diff is too big to show here.

nixos/tests/lightdm.nix+1−1

This diff is too big to show here.

nixos/tests/limesurvey.nix+1−1

This diff is too big to show here.

nixos/tests/litestream.nix+1−1

This diff is too big to show here.

nixos/tests/login.nix+1−1

This diff is too big to show here.

nixos/tests/logrotate.nixnew file+152

This diff is too big to show here.

nixos/tests/loki.nix+1−1

This diff is too big to show here.

nixos/tests/lorri/default.nix+1−1

This diff is too big to show here.

nixos/tests/lsd.nixdeleted−12

This diff is too big to show here.

nixos/tests/lvm2/default.nixnew file+45

This diff is too big to show here.

nixos/tests/lvm2/systemd-stage-1.nixnew file+104

This diff is too big to show here.

nixos/tests/lvm2/thinpool.nixnew file+32

This diff is too big to show here.

nixos/tests/lvm2/vdo.nixnew file+27

This diff is too big to show here.

nixos/tests/lxd-image-server.nixnew file+94

This diff is too big to show here.

nixos/tests/lxd-nftables.nix+1−1

This diff is too big to show here.

nixos/tests/lxd.nix+41−68

This diff is too big to show here.

nixos/tests/maddy.nixnew file+58

This diff is too big to show here.

nixos/tests/maestral.nixnew file+72

This diff is too big to show here.

nixos/tests/magic-wormhole-mailbox-server.nix+1−1

This diff is too big to show here.

nixos/tests/magnetico.nix+1−1

This diff is too big to show here.

nixos/tests/mailcatcher.nix+8−3

This diff is too big to show here.

nixos/tests/mailhog.nix+1−1

This diff is too big to show here.

nixos/tests/man.nixnew file+100

This diff is too big to show here.

nixos/tests/matomo.nix+1−1

This diff is too big to show here.

nixos/tests/matrix-appservice-irc.nix+125−63

This diff is too big to show here.

nixos/tests/matrix-conduit.nixnew file+95

This diff is too big to show here.

nixos/tests/matrix-synapse.nix+46−18

This diff is too big to show here.

nixos/tests/matrix/mjolnir.nixnew file+170

This diff is too big to show here.

nixos/tests/matrix/pantalaimon.nixnew file+88

This diff is too big to show here.

nixos/tests/mattermost.nixnew file+124

This diff is too big to show here.

nixos/tests/mediawiki.nix+1−1

This diff is too big to show here.

nixos/tests/meilisearch.nixnew file+60

This diff is too big to show here.

nixos/tests/memcached.nix+1−1

This diff is too big to show here.

nixos/tests/metabase.nix−1

This diff is too big to show here.

nixos/tests/minecraft.nix+1−1

This diff is too big to show here.

nixos/tests/minidlna.nix+4−2

This diff is too big to show here.

nixos/tests/miniflux.nix+18−6

This diff is too big to show here.

nixos/tests/minio.nix+4−1

This diff is too big to show here.

nixos/tests/misc.nix+7−6

This diff is too big to show here.

nixos/tests/mod_perl.nix+1−1

This diff is too big to show here.

nixos/tests/moinmoin.nixdeleted−28

This diff is too big to show here.

nixos/tests/mongodb.nix+4

This diff is too big to show here.

nixos/tests/moodle.nix+1−1

This diff is too big to show here.

nixos/tests/moonraker.nixnew file+45

This diff is too big to show here.

nixos/tests/moosefs.nixnew file+89

This diff is too big to show here.

nixos/tests/mosquitto.nix+166−51

This diff is too big to show here.

nixos/tests/mpd.nix+1−1

This diff is too big to show here.

nixos/tests/mpv.nix+2−2

This diff is too big to show here.

nixos/tests/mtp.nixnew file+109

This diff is too big to show here.

nixos/tests/mumble.nix+2−2

This diff is too big to show here.

nixos/tests/musescore.nix+2−2

This diff is too big to show here.

nixos/tests/mysql/common.nixnew file+10

This diff is too big to show here.

nixos/tests/mysql/mariadb-galera-mariabackup.nixdeleted−223

This diff is too big to show here.

nixos/tests/mysql/mariadb-galera-rsync.nixdeleted−216

This diff is too big to show here.

nixos/tests/mysql/mariadb-galera.nixnew file+250

This diff is too big to show here.

nixos/tests/mysql/mysql-autobackup.nix+48−33

This diff is too big to show here.

nixos/tests/mysql/mysql-backup.nix+60−44

This diff is too big to show here.

nixos/tests/mysql/mysql-replication.nix+84−74

This diff is too big to show here.

nixos/tests/mysql/mysql.nix+134−188

This diff is too big to show here.

nixos/tests/nagios.nix+1−1

This diff is too big to show here.

nixos/tests/nano.nixdeleted−44

This diff is too big to show here.

nixos/tests/nar-serve.nix+1−1

This diff is too big to show here.

nixos/tests/nats.nix+11−13

This diff is too big to show here.

nixos/tests/navidrome.nix+1−1

This diff is too big to show here.

nixos/tests/nbd.nixnew file+103

This diff is too big to show here.

nixos/tests/ncdns.nix+6−9

This diff is too big to show here.

nixos/tests/networking-proxy.nix−1

This diff is too big to show here.

nixos/tests/networking.nix+206−15

This diff is too big to show here.

nixos/tests/nextcloud/basic.nix+12−3

This diff is too big to show here.

nixos/tests/nextcloud/default.nix+20−8

This diff is too big to show here.

nixos/tests/nextcloud/with-mysql-and-memcached.nix+8−18

This diff is too big to show here.

nixos/tests/nextcloud/with-postgresql-and-redis.nix+5−2

This diff is too big to show here.

nixos/tests/nfs/simple.nix+1−1

This diff is too big to show here.

nixos/tests/nginx-etag.nix+1−2

This diff is too big to show here.

nixos/tests/nginx-modsecurity.nixnew file+39

This diff is too big to show here.

nixos/tests/nginx-pubhtml.nix+1−1

This diff is too big to show here.

nixos/tests/nginx-sandbox.nix+1−1

This diff is too big to show here.

nixos/tests/nginx-sso.nix+1−1

This diff is too big to show here.

nixos/tests/nginx-variants.nix+1−1

This diff is too big to show here.

nixos/tests/nix-ld.nixnew file+20

This diff is too big to show here.

nixos/tests/nix-serve-ssh.nixnew file+45

This diff is too big to show here.

nixos/tests/nix-serve.nix+1−1

This diff is too big to show here.

nixos/tests/nix-ssh-serve.nixdeleted−45

This diff is too big to show here.

nixos/tests/nixops/default.nixnew file+114

This diff is too big to show here.

nixos/tests/nixops/legacy/base-configuration.nixnew file+31

This diff is too big to show here.

nixos/tests/nixops/legacy/nixops.nixnew file+15

This diff is too big to show here.

nixos/tests/nixos-generate-config.nix+1−1

This diff is too big to show here.

nixos/tests/noto-fonts.nixnew file+44

This diff is too big to show here.

nixos/tests/novacomd.nix+1−1

This diff is too big to show here.

nixos/tests/odoo.nixnew file+27

This diff is too big to show here.

nixos/tests/oh-my-zsh.nix+1−1

This diff is too big to show here.

nixos/tests/openarena.nix+2−2

This diff is too big to show here.

nixos/tests/openldap.nix+3−3

This diff is too big to show here.

nixos/tests/openresty-lua.nixnew file+55

This diff is too big to show here.

nixos/tests/opensmtpd-rspamd.nix−1

This diff is too big to show here.

nixos/tests/openssh.nix+12−6

This diff is too big to show here.

nixos/tests/opentabletdriver.nix+1−1

This diff is too big to show here.

nixos/tests/os-prober.nix+10−10

This diff is too big to show here.

nixos/tests/osrm-backend.nix+1−1

This diff is too big to show here.

nixos/tests/overlayfs.nix+1−1

This diff is too big to show here.

nixos/tests/owncast.nixnew file+42

This diff is too big to show here.

nixos/tests/pacemaker.nixnew file+110

This diff is too big to show here.

nixos/tests/packagekit.nix+1−1

This diff is too big to show here.

nixos/tests/pam/pam-file-contents.nixnew file+25

This diff is too big to show here.

nixos/tests/pam-oath-login.nix → nixos/tests/pam/pam-oath-login.nixrenamed+3−3

This diff is too big to show here.

nixos/tests/pam-u2f.nix → nixos/tests/pam/pam-u2f.nixrenamed+2−2

This diff is too big to show here.

nixos/tests/pam/pam-ussh.nixnew file+70

This diff is too big to show here.

nixos/tests/pam/test_chfn.pynew file+27

This diff is too big to show here.

nixos/tests/pantheon.nix+7−8

This diff is too big to show here.

nixos/tests/paperless-ng.nixdeleted−46

This diff is too big to show here.

nixos/tests/paperless.nixnew file+44

This diff is too big to show here.

nixos/tests/parsedmarc/default.nixnew file+235

This diff is too big to show here.

nixos/tests/pdns-recursor.nix+4−1

This diff is too big to show here.

nixos/tests/pgadmin4-standalone.nixnew file+43

This diff is too big to show here.

nixos/tests/pgadmin4.nixnew file+132

This diff is too big to show here.

nixos/tests/php/fpm.nix+2−2

This diff is too big to show here.

nixos/tests/php/httpd.nix+1−1

This diff is too big to show here.

nixos/tests/php/pcre.nix+1−1

This diff is too big to show here.

nixos/tests/pict-rs.nixnew file+17

This diff is too big to show here.

nixos/tests/plasma5-systemd-start.nixnew file+42

This diff is too big to show here.

nixos/tests/plasma5.nix+5−6

This diff is too big to show here.

nixos/tests/plausible.nix+4−1

This diff is too big to show here.

nixos/tests/pleroma.nix+2−19

This diff is too big to show here.

nixos/tests/plikd.nix+1−1

This diff is too big to show here.

nixos/tests/plotinus.nix+2−2

This diff is too big to show here.

nixos/tests/podman-dnsname.nixdeleted−42

This diff is too big to show here.

nixos/tests/podman-tls-ghostunnel.nixdeleted−150

This diff is too big to show here.

nixos/tests/podman.nixdeleted−144

This diff is too big to show here.

nixos/tests/podman/default.nixnew file+144

This diff is too big to show here.

nixos/tests/podman/dnsname.nixnew file+42

This diff is too big to show here.

nixos/tests/podman/tls-ghostunnel.nixnew file+150

This diff is too big to show here.

nixos/tests/postfix-raise-smtpd-tls-security-level.nix+1−1

This diff is too big to show here.

nixos/tests/postfix.nix+1−1

This diff is too big to show here.

nixos/tests/postfixadmin.nix+1−1

This diff is too big to show here.

nixos/tests/postgresql-wal-receiver.nix+1−1

This diff is too big to show here.

nixos/tests/postgresql.nix+1−1

This diff is too big to show here.

nixos/tests/power-profiles-daemon.nix+1−1

This diff is too big to show here.

nixos/tests/powerdns-admin.nixnew file+117

This diff is too big to show here.

nixos/tests/powerdns.nix+1

This diff is too big to show here.

nixos/tests/predictable-interface-names.nix+1−1

This diff is too big to show here.

nixos/tests/printing.nix+2−10

This diff is too big to show here.

nixos/tests/privacyidea.nix+1−2

This diff is too big to show here.

nixos/tests/privoxy.nix+1−1

This diff is too big to show here.

nixos/tests/prometheus-exporters.nix+73−5

This diff is too big to show here.

nixos/tests/prometheus.nix+91−1

This diff is too big to show here.

nixos/tests/prowlarr.nixnew file+18

This diff is too big to show here.

nixos/tests/pt2-clone.nix+2−2

This diff is too big to show here.

nixos/tests/pulseaudio.nixnew file+71

This diff is too big to show here.

nixos/tests/qboot.nix+1−1

This diff is too big to show here.

nixos/tests/quorum.nix+32−9

This diff is too big to show here.

nixos/tests/rabbitmq.nix+1−1

This diff is too big to show here.

nixos/tests/radicale.nix+1−1

This diff is too big to show here.

nixos/tests/rasdaemon.nixnew file+34

This diff is too big to show here.

nixos/tests/redis.nix+19−17

This diff is too big to show here.

nixos/tests/redmine.nix+1−1

This diff is too big to show here.

nixos/tests/restart-by-activation-script.nixnew file+73

This diff is too big to show here.

nixos/tests/retroarch.nixnew file+49

This diff is too big to show here.

nixos/tests/riak.nix+1−1

This diff is too big to show here.

nixos/tests/rspamd.nix+5−10

This diff is too big to show here.

nixos/tests/rstudio-server.nixnew file+24

This diff is too big to show here.

nixos/tests/rsyslogd.nix+2−2

This diff is too big to show here.

nixos/tests/run-in-machine.nixdeleted−23

This diff is too big to show here.

nixos/tests/sabnzbd.nixnew file+22

This diff is too big to show here.

nixos/tests/samba-wsdd.nix+1−1

This diff is too big to show here.

nixos/tests/samba.nix+1−2

This diff is too big to show here.

nixos/tests/sddm.nix+2−2

This diff is too big to show here.

nixos/tests/seafile.nixnew file+121

This diff is too big to show here.

nixos/tests/service-runner.nix+1−1

This diff is too big to show here.

nixos/tests/sfxr-qt.nixnew file+32

This diff is too big to show here.

nixos/tests/shattered-pixel-dungeon.nix+2−2

This diff is too big to show here.

nixos/tests/shiori.nix+1−2

This diff is too big to show here.

nixos/tests/signal-desktop.nix+2−3

This diff is too big to show here.

nixos/tests/simple.nix+1−1

This diff is too big to show here.

nixos/tests/snapcast.nix+9

This diff is too big to show here.

nixos/tests/snapper.nix+1−1

This diff is too big to show here.

nixos/tests/soapui.nix+2−2

This diff is too big to show here.

nixos/tests/solr.nix+1−1

This diff is too big to show here.

nixos/tests/sourcehut.nix+193−10

This diff is too big to show here.

nixos/tests/spark/default.nixnew file+27

This diff is too big to show here.

nixos/tests/spark/spark_sample.pynew file+40

This diff is too big to show here.

nixos/tests/spike.nixdeleted−22

This diff is too big to show here.

nixos/tests/ssh-keys.nix+1−1

This diff is too big to show here.

nixos/tests/sssd-ldap.nix+79−81

This diff is too big to show here.

nixos/tests/sssd.nix+1−1

This diff is too big to show here.

nixos/tests/starship.nixnew file+42

This diff is too big to show here.

nixos/tests/step-ca.nixnew file+77

This diff is too big to show here.

nixos/tests/sudo.nix+5−1

This diff is too big to show here.

nixos/tests/sway.nix+51−26

This diff is too big to show here.

nixos/tests/switch-test.nix+1016−6

This diff is too big to show here.

nixos/tests/sympa.nix+1−2

This diff is too big to show here.

nixos/tests/syncthing-init.nix+1−1

This diff is too big to show here.

nixos/tests/syncthing-relay.nix+1−1

This diff is too big to show here.

nixos/tests/systemd-analyze.nix+1−1

This diff is too big to show here.

nixos/tests/systemd-binfmt.nix+86−20

This diff is too big to show here.

nixos/tests/systemd-boot.nix+169−5

This diff is too big to show here.

nixos/tests/systemd-confinement.nix+45−24

This diff is too big to show here.

nixos/tests/systemd-cryptenroll.nixnew file+54

This diff is too big to show here.

nixos/tests/systemd-escaping.nixnew file+45

This diff is too big to show here.

nixos/tests/systemd-initrd-btrfs-raid.nixnew file+45

This diff is too big to show here.

nixos/tests/systemd-initrd-luks-keyfile.nixnew file+53

This diff is too big to show here.

nixos/tests/systemd-initrd-luks-password.nixnew file+48

This diff is too big to show here.

nixos/tests/systemd-initrd-simple.nixnew file+44

This diff is too big to show here.

nixos/tests/systemd-initrd-swraid.nixnew file+50

This diff is too big to show here.

nixos/tests/systemd-journal.nix+1−1

This diff is too big to show here.

nixos/tests/systemd-machinectl.nixnew file+85

This diff is too big to show here.

nixos/tests/systemd-misc.nixnew file+62

This diff is too big to show here.

nixos/tests/systemd-networkd-dhcpserver-static-leases.nixnew file+81

This diff is too big to show here.

nixos/tests/systemd-networkd-ipv6-prefix-delegation.nix+5−12

This diff is too big to show here.

nixos/tests/systemd-networkd-vrf.nix+2

This diff is too big to show here.

nixos/tests/systemd-networkd.nix+10

This diff is too big to show here.

nixos/tests/systemd-shutdown.nixnew file+26

This diff is too big to show here.

nixos/tests/systemd-unit-path.nixdeleted−47

This diff is too big to show here.

nixos/tests/systemd.nix+17−2

This diff is too big to show here.

nixos/tests/taskserver.nix+1

This diff is too big to show here.

nixos/tests/teeworlds.nix+2−2

This diff is too big to show here.

nixos/tests/telegraf.nix+1−1

This diff is too big to show here.

nixos/tests/teleport.nixnew file+99

This diff is too big to show here.

nixos/tests/terminal-emulators.nixnew file+207

This diff is too big to show here.

nixos/tests/thelounge.nixnew file+29

This diff is too big to show here.

nixos/tests/tigervnc.nix+4−4

This diff is too big to show here.

nixos/tests/tinydns.nix+15−1

This diff is too big to show here.

nixos/tests/tinywl.nixnew file+57

This diff is too big to show here.

nixos/tests/tomcat.nixnew file+21

This diff is too big to show here.

nixos/tests/tor.nix+10−15

This diff is too big to show here.

nixos/tests/trac.nixdeleted−19

This diff is too big to show here.

nixos/tests/transmission.nix+1−1

This diff is too big to show here.

nixos/tests/tsm-client-gui.nixnew file+57

This diff is too big to show here.

nixos/tests/tuptime.nix+1−1

This diff is too big to show here.

nixos/tests/turbovnc-headless-server.nix+4−4

This diff is too big to show here.

nixos/tests/tuxguitar.nix+2−2

This diff is too big to show here.

nixos/tests/txredisapi.nix+6−4

This diff is too big to show here.

nixos/tests/ucg.nixdeleted−18

This diff is too big to show here.

nixos/tests/udisks2.nix+2−2

This diff is too big to show here.

nixos/tests/unbound.nix+10−1

This diff is too big to show here.

nixos/tests/unifi.nixnew file+36

This diff is too big to show here.

nixos/tests/usbguard.nix+2−2

This diff is too big to show here.

nixos/tests/user-activation-scripts.nixnew file+33

This diff is too big to show here.

nixos/tests/uwsgi.nix+1−1

This diff is too big to show here.

nixos/tests/v2ray.nix+1−1

This diff is too big to show here.

nixos/tests/vault-postgresql.nix+2−3

This diff is too big to show here.

nixos/tests/vault.nix+1−2

This diff is too big to show here.

nixos/tests/vaultwarden.nix−2

This diff is too big to show here.

nixos/tests/vector.nix+1−1

This diff is too big to show here.

nixos/tests/vengi-tools.nixnew file+29

This diff is too big to show here.

nixos/tests/virtualbox.nix+2−2

This diff is too big to show here.

nixos/tests/vscodium.nix+66−35

This diff is too big to show here.

nixos/tests/vsftpd.nixnew file+42

This diff is too big to show here.

nixos/tests/wasabibackend.nix+1−1

This diff is too big to show here.

nixos/tests/web-apps/mastodon.nixnew file+170

This diff is too big to show here.

nixos/tests/web-apps/netbox.nixnew file+30

This diff is too big to show here.

nixos/tests/web-apps/nifi.nixnew file+30

This diff is too big to show here.

nixos/tests/web-apps/peertube.nixnew file+131

This diff is too big to show here.

nixos/tests/web-servers/agate.nixnew file+29

This diff is too big to show here.

nixos/tests/web-servers/unit-php.nix+1−1

This diff is too big to show here.

nixos/tests/wiki-js.nix+1−1

This diff is too big to show here.

nixos/tests/wine.nixnew file+48

This diff is too big to show here.

nixos/tests/without-nix.nixnew file+32

This diff is too big to show here.

nixos/tests/wmderland.nix+1−1

This diff is too big to show here.

nixos/tests/wordpress.nix+20−7

This diff is too big to show here.

nixos/tests/wpa_supplicant.nixnew file+96

This diff is too big to show here.

nixos/tests/xfce.nix+2−3

This diff is too big to show here.

nixos/tests/xmonad-xdg-autostart.nixnew file+35

This diff is too big to show here.

nixos/tests/xmonad.nix+84−17

This diff is too big to show here.

nixos/tests/xmpp/prosody-mysql.nix+65−33

This diff is too big to show here.

nixos/tests/xmpp/prosody.nix+1

This diff is too big to show here.

nixos/tests/xmpp/xmpp-sendmessage.nix+1−4

This diff is too big to show here.

nixos/tests/xrdp.nix+2−2

This diff is too big to show here.

nixos/tests/xterm.nix+2−2

This diff is too big to show here.

nixos/tests/xxh.nixnew file+67

This diff is too big to show here.

nixos/tests/yabar.nix+1−1

This diff is too big to show here.

nixos/tests/yq.nixdeleted−12

This diff is too big to show here.

nixos/tests/zammad.nixnew file+60

This diff is too big to show here.

nixos/tests/zfs.nix+51−1

This diff is too big to show here.

nixos/tests/zigbee2mqtt.nix+1−1

This diff is too big to show here.

nixos/tests/zoneminder.nix+1−1

This diff is too big to show here.

nixos/tests/zrepl.nixnew file+66

This diff is too big to show here.

pkgs/applications/accessibility/contrast/default.nix+14−14

This diff is too big to show here.

pkgs/applications/accessibility/espeakup/default.nixnew file+46

This diff is too big to show here.

pkgs/applications/accessibility/squeekboard/default.nix+9−6

This diff is too big to show here.

pkgs/applications/accessibility/svkbd/default.nix+2−2

This diff is too big to show here.

pkgs/applications/accessibility/wvkbd/default.nixnew file+36

This diff is too big to show here.

pkgs/applications/audio/CHOWTapeModel/default.nix+40−32

This diff is too big to show here.

pkgs/applications/audio/ChowCentaur/default.nixnew file+53

This diff is too big to show here.

pkgs/applications/audio/ChowKick/default.nixnew file+106

This diff is too big to show here.

pkgs/applications/audio/ChowPhaser/default.nixnew file+76

This diff is too big to show here.

pkgs/applications/audio/LibreArp/default.nixnew file+53

This diff is too big to show here.

pkgs/applications/audio/LibreArp/lv2.nixnew file+53

This diff is too big to show here.

pkgs/applications/audio/aether-lv2/default.nixnew file+33

This diff is too big to show here.

pkgs/applications/audio/airwave/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/aj-snapshot/default.nix+2−3

This diff is too big to show here.

pkgs/applications/audio/amberol/default.nixnew file+75

This diff is too big to show here.

pkgs/applications/audio/ams/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/ardour/5.nixdeleted−161

This diff is too big to show here.

pkgs/applications/audio/ardour/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/ashuffle/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/audacious/default.nix+6−4

This diff is too big to show here.

pkgs/applications/audio/audacity/default.nix+99−59

This diff is too big to show here.

pkgs/applications/audio/audio-recorder/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/aumix/default.nix+28−13

This diff is too big to show here.

pkgs/applications/audio/bambootracker/default.nix−4

This diff is too big to show here.

pkgs/applications/audio/bchoppr/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/bespokesynth/default.nixnew file+148

This diff is too big to show here.

pkgs/applications/audio/bitwig-studio/bitwig-studio2.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/bitwig-studio/bitwig-studio4.nix+7−2

This diff is too big to show here.

pkgs/applications/audio/bjumblr/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/blanket/default.nixnew file+69

This diff is too big to show here.

pkgs/applications/audio/boops/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/bschaffl/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/bsequencer/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/bucklespring/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/cadence/default.nix+48−38

This diff is too big to show here.

pkgs/applications/audio/callaudiod/default.nix+5−3

This diff is too big to show here.

pkgs/applications/audio/cantata/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/cardinal/default.nixnew file+67

This diff is too big to show here.

pkgs/applications/audio/carla/default.nix+11−3

This diff is too big to show here.

pkgs/applications/audio/caudec/default.nix+6−10

This diff is too big to show here.

pkgs/applications/audio/cdparanoia/default.nix+9

This diff is too big to show here.

pkgs/applications/audio/cider/default.nixnew file+30

This diff is too big to show here.

pkgs/applications/audio/clementine/default.nix+3−10

This diff is too big to show here.

pkgs/applications/audio/clerk/default.nix+33−10

This diff is too big to show here.

pkgs/applications/audio/cmt/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/cmus/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/cmusfm/default.nix+16−10

This diff is too big to show here.

pkgs/applications/audio/cozy/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/csound/default.nix+4−7

This diff is too big to show here.

pkgs/applications/audio/cyanrip/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/deadbeef/default.nix−1

This diff is too big to show here.

pkgs/applications/audio/denemo/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/dfasma/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/dragonfly-reverb/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/easyeffects/default.nix+17−11

This diff is too big to show here.

pkgs/applications/audio/ecasound/default.nix+11

This diff is too big to show here.

pkgs/applications/audio/espeak-ng/default.nix+10

This diff is too big to show here.

pkgs/applications/audio/espeak/default.nix+3−2

This diff is too big to show here.

pkgs/applications/audio/espeak/edit.nix+3−2

This diff is too big to show here.

pkgs/applications/audio/eteroj.lv2/default.nixdeleted−23

This diff is too big to show here.

pkgs/applications/audio/faust/faust2.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/faust/faustlive.nix+9−12

This diff is too big to show here.

pkgs/applications/audio/faustPhysicalModeling/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/flac/default.nix+2−10

This diff is too big to show here.

pkgs/applications/audio/fluidsynth/default.nix+7−23

This diff is too big to show here.

pkgs/applications/audio/fomp/default.nix+4−4

This diff is too big to show here.

pkgs/applications/audio/foo-yc20/default.nixdeleted−29

This diff is too big to show here.

pkgs/applications/audio/freac/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/freewheeling/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/freqtweak/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/friture/default.nix+19−6

This diff is too big to show here.

pkgs/applications/audio/friture/unlock_constraints.patchdeleted−34

This diff is too big to show here.

pkgs/applications/audio/ft2-clone/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/furnace/default.nixnew file+100

This diff is too big to show here.

pkgs/applications/audio/game-music-emu/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/geonkick/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/giada/default.nix+39−25

This diff is too big to show here.

pkgs/applications/audio/gigedit/default.nix+20−3

This diff is too big to show here.

pkgs/applications/audio/gmu/default.nix+19−1

This diff is too big to show here.

pkgs/applications/audio/gnome-podcasts/default.nix+15−3

This diff is too big to show here.

pkgs/applications/audio/goattracker/default.nix+2−3

This diff is too big to show here.

pkgs/applications/audio/gpodder/default.nix+9−4

This diff is too big to show here.

pkgs/applications/audio/gpodder/disable-autoupdate.patch+8−29

This diff is too big to show here.

pkgs/applications/audio/greg/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/gspeech/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/gtklick/default.nixdeleted−34

This diff is too big to show here.

pkgs/applications/audio/gtkpod/default.nix+5−4

This diff is too big to show here.

pkgs/applications/audio/guitarix/default.nix+4−2

This diff is too big to show here.

pkgs/applications/audio/helio-workstation/default.nix+5−5

This diff is too big to show here.

pkgs/applications/audio/helm/default.nix+6−11

This diff is too big to show here.

pkgs/applications/audio/helvum/default.nix+36−23

This diff is too big to show here.

pkgs/applications/audio/hivelytracker/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/hqplayer-desktop/default.nix+1

This diff is too big to show here.

pkgs/applications/audio/hushboard/default.nixnew file+73

This diff is too big to show here.

pkgs/applications/audio/hybridreverb2/default.nix+45−10

This diff is too big to show here.

pkgs/applications/audio/hydrogen/0.nix+28−6

This diff is too big to show here.

pkgs/applications/audio/hydrogen/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/in-formant/default.nixnew file+45

This diff is too big to show here.

pkgs/applications/audio/indicator-sound-switcher/default.nixnew file+62

This diff is too big to show here.

pkgs/applications/audio/industrializer/default.nix+1−3

This diff is too big to show here.

pkgs/applications/audio/jacktrip/default.nixnew file+61

This diff is too big to show here.

pkgs/applications/audio/jamesdsp/default.nixnew file+95

This diff is too big to show here.

pkgs/applications/audio/jamin/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/jamulus/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/japa/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/jconvolver/default.nixnew file+114

This diff is too big to show here.

pkgs/applications/audio/jellycli/default.nixnew file+33

This diff is too big to show here.

pkgs/applications/audio/jellycli/fix-test-dir.patchnew file+13

This diff is too big to show here.

pkgs/applications/audio/jmusicbot/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/kapitonov-plugins-pack/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/kid3/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/ladspa-plugins/default.nix+17−7

This diff is too big to show here.

pkgs/applications/audio/lastfmsubmitd/default.nixdeleted−21

This diff is too big to show here.

pkgs/applications/audio/libopenmpt/default.nixdeleted−32

This diff is too big to show here.

pkgs/applications/audio/librespot/cargo-lock.patchdeleted−3817

This diff is too big to show here.

pkgs/applications/audio/librespot/default.nix+11−17

This diff is too big to show here.

pkgs/applications/audio/linuxband/default.nixdeleted−37

This diff is too big to show here.

pkgs/applications/audio/lmms/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/lollypop/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/losslessaudiochecker/default.nixnew file+29

This diff is too big to show here.

pkgs/applications/audio/lsp-plugins/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/lv2lint/default.nixnew file+22

This diff is too big to show here.

pkgs/applications/audio/lyrebird/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/magnetophonDSP/faustCompressors/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/mbrola/default.nix+3

This diff is too big to show here.

pkgs/applications/audio/meters_lv2/default.nix+43−36

This diff is too big to show here.

pkgs/applications/audio/mi2ly/default.nix+16−25

This diff is too big to show here.

pkgs/applications/audio/mi2ly/default.upstreamdeleted−3

This diff is too big to show here.

pkgs/applications/audio/mid2key/default.nix+7−4

This diff is too big to show here.

pkgs/applications/audio/midas/generic.nix+4−5

This diff is too big to show here.

pkgs/applications/audio/midi-visualizer/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/milkytracker/default.nix+8−2

This diff is too big to show here.

pkgs/applications/audio/mimic/default.nix+14−6

This diff is too big to show here.

pkgs/applications/audio/mimms/default.nixdeleted−31

This diff is too big to show here.

pkgs/applications/audio/miniaudicle/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/mixxx/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/mmtc/default.nix+6−7

This diff is too big to show here.

pkgs/applications/audio/moc/default.nix+5−3

This diff is too big to show here.

pkgs/applications/audio/mod-arpeggiator-lv2/default.nixnew file+26

This diff is too big to show here.

pkgs/applications/audio/mod-distortion/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/molot-lite/default.nix+5−4

This diff is too big to show here.

pkgs/applications/audio/mopidy/default.nix+6

This diff is too big to show here.

pkgs/applications/audio/mopidy/iris.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/mopidy/jellyfin.nixnew file+25

This diff is too big to show here.

pkgs/applications/audio/mopidy/mopidy.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/mopidy/mpd.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/mopidy/mpris.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/mopidy/muse.nixnew file+29

This diff is too big to show here.

pkgs/applications/audio/mopidy/youtube.nix+43−15

This diff is too big to show here.

pkgs/applications/audio/mopidy/ytmusic.nixnew file+35

This diff is too big to show here.

pkgs/applications/audio/mousai/default.nix+12−2

This diff is too big to show here.

pkgs/applications/audio/mousai/paths.patchnew file+13

This diff is too big to show here.

pkgs/applications/audio/mp3blaster/default.nix+11−1

This diff is too big to show here.

pkgs/applications/audio/mpc/default.nix+41−13

This diff is too big to show here.

pkgs/applications/audio/mpdevil/default.nix+4−3

This diff is too big to show here.

pkgs/applications/audio/mpg123/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/munt/default.nixdeleted−51

This diff is too big to show here.

pkgs/applications/audio/munt/libmt32emu.nixnew file+38

This diff is too big to show here.

pkgs/applications/audio/munt/mt32emu-qt.nixnew file+75

This diff is too big to show here.

pkgs/applications/audio/munt/mt32emu-smf2wav.nixnew file+50

This diff is too big to show here.

pkgs/applications/audio/musescore/darwin.nix−1

This diff is too big to show here.

pkgs/applications/audio/musescore/default.nix+4−5

This diff is too big to show here.

pkgs/applications/audio/musikcube/default.nix+19−4

This diff is too big to show here.

pkgs/applications/audio/ncmpc/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/ncspot/default.nix+14−16

This diff is too big to show here.

pkgs/applications/audio/netease-cloud-music-gtk/cargo-lock.patchnew file+2007

This diff is too big to show here.

pkgs/applications/audio/netease-cloud-music-gtk/default.nixnew file+60

This diff is too big to show here.

pkgs/applications/audio/netease-cloud-music-gtk/update-cargo-lock.shnew file+20

This diff is too big to show here.

pkgs/applications/audio/netease-music-tui/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/new-session-manager/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/noise-repellent/default.nix+11−9

This diff is too big to show here.

pkgs/applications/audio/noisetorch/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/non/default.nix+7−7

This diff is too big to show here.

pkgs/applications/audio/nootka/unstable.nix+25−7

This diff is too big to show here.

pkgs/applications/audio/ocenaudio/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/odin2/default.nixnew file+79

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/eteroj.nixnew file+10

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/generic.nixnew file+37

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/jit.nixnew file+12

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/mephisto.nixnew file+17

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/midi_matrix.nixnew file+10

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/moony.nixnew file+13

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/orbit.nixnew file+12

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/patchmatrix.nixnew file+13

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/router.nixnew file+11

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/sherlock.nixnew file+12

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/synthpod.nixnew file+13

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/vm.nixnew file+10

This diff is too big to show here.

pkgs/applications/audio/orca-c/default.nix+5−2

This diff is too big to show here.

pkgs/applications/audio/osdlyrics/default.nixnew file+87

This diff is too big to show here.

pkgs/applications/audio/oxefmsynth/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/padthv1/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/pamix/default.nix+15−1

This diff is too big to show here.

pkgs/applications/audio/pamixer/default.nix+6−6

This diff is too big to show here.

pkgs/applications/audio/paprefs/default.nix+6−4

This diff is too big to show here.

pkgs/applications/audio/parlatype/default.nixdeleted−68

This diff is too big to show here.

pkgs/applications/audio/patchage/default.nix+33−11

This diff is too big to show here.

pkgs/applications/audio/pavucontrol/default.nix+24−15

This diff is too big to show here.

pkgs/applications/audio/pd-plugins/zexy/default.nix+2−1

This diff is too big to show here.

pkgs/applications/audio/pianobar/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/picard/default.nix+5−2

This diff is too big to show here.

pkgs/applications/audio/pifi/Gemfiledeleted−2

This diff is too big to show here.

pkgs/applications/audio/pifi/Gemfile.lockdeleted−39

This diff is too big to show here.

pkgs/applications/audio/pifi/default.nixdeleted−18

This diff is too big to show here.

pkgs/applications/audio/pifi/gemset.nixdeleted−137

This diff is too big to show here.

pkgs/applications/audio/pipecontrol/default.nixnew file+50

This diff is too big to show here.

pkgs/applications/audio/pithos/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/plexamp/default.nix+6−7

This diff is too big to show here.

pkgs/applications/audio/plujain-ramp/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/pocket-casts/default.nixnew file+55

This diff is too big to show here.

pkgs/applications/audio/praat/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/psst/default.nixnew file+39

This diff is too big to show here.

pkgs/applications/audio/pt2-clone/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/ptcollab/default.nix+13−4

This diff is too big to show here.

pkgs/applications/audio/puddletag/default.nix+46−9

This diff is too big to show here.

pkgs/applications/audio/pulseaudio-ctl/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/pulseaudio-dlna/0001-setup.py-remove-dbus-python-from-list.patchnew file+25

This diff is too big to show here.

pkgs/applications/audio/pulseaudio-dlna/default.nix+54−33

This diff is too big to show here.

pkgs/applications/audio/pulseaudio-modules-bt/default.nixdeleted−91

This diff is too big to show here.

pkgs/applications/audio/pulseaudio-modules-bt/fix-install-path.patchdeleted−11

This diff is too big to show here.

pkgs/applications/audio/pyradio/default.nixnew file+30

This diff is too big to show here.

pkgs/applications/audio/qjackctl/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/qmidiarp/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/qmidinet/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/qmmp/default.nix−1

This diff is too big to show here.

pkgs/applications/audio/qpwgraph/default.nixnew file+34

This diff is too big to show here.

pkgs/applications/audio/qsynth/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/qtractor/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/r128gain/default.nix+2−8

This diff is too big to show here.

pkgs/applications/audio/reaper/default.nix+7−5

This diff is too big to show here.

pkgs/applications/audio/redux/default.nixnew file+49

This diff is too big to show here.

pkgs/applications/audio/rhvoice/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/rhythmbox/default.nix+10

This diff is too big to show here.

pkgs/applications/audio/rofi-pulse-select/default.nixnew file+40

This diff is too big to show here.

pkgs/applications/audio/roomeqwizard/default.nixnew file+118

This diff is too big to show here.

pkgs/applications/audio/rubyripper/default.nix+23−11

This diff is too big to show here.

pkgs/applications/audio/samplv1/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/sayonara/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/sc68/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/schismtracker/default.nix+6−4

This diff is too big to show here.

pkgs/applications/audio/scream/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/setbfree/default.nix+7−5

This diff is too big to show here.

pkgs/applications/audio/sfizz/default.nix+15−12

This diff is too big to show here.

pkgs/applications/audio/sfxr-qt/default.nix+29−3

This diff is too big to show here.

pkgs/applications/audio/sfxr-qt/test-export-square-wave/default.nixnew file+6

This diff is too big to show here.

pkgs/applications/audio/sfxr-qt/test-export-square-wave/input.sfxjnew file+29

This diff is too big to show here.

pkgs/applications/audio/shortwave/default.nix+9−11

This diff is too big to show here.

pkgs/applications/audio/sidplayfp/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/sisco.lv2/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/snapcast/default.nix+6−3

This diff is too big to show here.

pkgs/applications/audio/snd/default.nix+6−3

This diff is too big to show here.

pkgs/applications/audio/songrec/default.nix+5−4

This diff is too big to show here.

pkgs/applications/audio/sonic-pi/default.nix+59−41

This diff is too big to show here.

pkgs/applications/audio/sonixd/default.nixnew file+27

This diff is too big to show here.

pkgs/applications/audio/sony-headphones-client/default.nixnew file+44

This diff is too big to show here.

pkgs/applications/audio/sorcer/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/sound-juicer/default.nix+10

This diff is too big to show here.

pkgs/applications/audio/soundconverter/default.nixnew file+85

This diff is too big to show here.

pkgs/applications/audio/soundkonverter/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/soundscape-renderer/default.nix+13−11

This diff is too big to show here.

pkgs/applications/audio/soundwireserver/default.nixnew file+40

This diff is too big to show here.

pkgs/applications/audio/spectmorph/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/split2flac/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/spot/default.nix+12−7

This diff is too big to show here.

pkgs/applications/audio/spotify-qt/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/spotify-tui/default.nix+1

This diff is too big to show here.

pkgs/applications/audio/spotify/default.nix+10−9

This diff is too big to show here.

pkgs/applications/audio/spotifyd/default.nix+10−9

This diff is too big to show here.

pkgs/applications/audio/sptlrx/default.nixnew file+24

This diff is too big to show here.

pkgs/applications/audio/squeezelite/default.nix+48−30

This diff is too big to show here.

pkgs/applications/audio/squishyball/default.nix+21−11

This diff is too big to show here.

pkgs/applications/audio/strawberry/default.nix+6−2

This diff is too big to show here.

pkgs/applications/audio/sublime-music/default.nix+14−7

This diff is too big to show here.

pkgs/applications/audio/sunvox/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/surge-XT/default.nixnew file+93

This diff is too big to show here.

pkgs/applications/audio/swh-lv2/default.nix+6−4

This diff is too big to show here.

pkgs/applications/audio/synaesthesia/default.nixnew file+33

This diff is too big to show here.

pkgs/applications/audio/synthv1/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/tagutil/default.nix+5

This diff is too big to show here.

pkgs/applications/audio/tauon/default.nixnew file+122

This diff is too big to show here.

pkgs/applications/audio/tenacity/default.nixnew file+148

This diff is too big to show here.

pkgs/applications/audio/termusic/default.nixnew file+28

This diff is too big to show here.

pkgs/applications/audio/timemachine/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/tonelib-gfx/default.nix+32−39

This diff is too big to show here.

pkgs/applications/audio/tonelib-jam/default.nix+33−37

This diff is too big to show here.

pkgs/applications/audio/tonelib-metal/default.nixnew file+60

This diff is too big to show here.

pkgs/applications/audio/tonelib-zoom/default.nix+33−23

This diff is too big to show here.

pkgs/applications/audio/transcribe/default.nix+50−13

This diff is too big to show here.

pkgs/applications/audio/vgmstream/default.nix+21−12

This diff is too big to show here.

pkgs/applications/audio/vgmstream/update.shnew file+77

This diff is too big to show here.

pkgs/applications/audio/vimpc/default.nix+11

This diff is too big to show here.

pkgs/applications/audio/viper4linux-gui/default.nixnew file+82

This diff is too big to show here.

pkgs/applications/audio/viper4linux/default.nixnew file+61

This diff is too big to show here.

pkgs/applications/audio/vmpk/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/vocal/default.nix+8−1

This diff is too big to show here.

pkgs/applications/audio/wavegain/default.nix+15−2

This diff is too big to show here.

pkgs/applications/audio/whipper/default.nix+9−1

This diff is too big to show here.

pkgs/applications/audio/x42-avldrums/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/x42-plugins/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/xsynth-dssi/default.nix+2−1

This diff is too big to show here.

pkgs/applications/audio/yoshimi/default.nix+49−18

This diff is too big to show here.

pkgs/applications/audio/zam-plugins/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/zrythm/default.nixnew file+174

This diff is too big to show here.

pkgs/applications/audio/zynaddsubfx/default.nix+13

This diff is too big to show here.

pkgs/applications/backup/areca/default.nix+6−3

This diff is too big to show here.

pkgs/applications/backup/deja-dup/default.nix+12−12

This diff is too big to show here.

pkgs/applications/backup/deja-dup/fix-paths.patch+3−3

This diff is too big to show here.

pkgs/applications/backup/pika-backup/default.nix+12−3

This diff is too big to show here.

pkgs/applications/backup/urbackup-client/default.nixnew file+23

This diff is too big to show here.

pkgs/applications/backup/vorta/default.nix+2−3

This diff is too big to show here.

pkgs/applications/blockchains/aeon/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/alfis/default.nix+28−13

This diff is too big to show here.

pkgs/applications/blockchains/besu/default.nixnew file+29

This diff is too big to show here.

pkgs/applications/blockchains/bisq-desktop/default.nix+4−5

This diff is too big to show here.

pkgs/applications/blockchains/bitcoin-classic/default.nix+1−1

This diff is too big to show here.

pkgs/applications/blockchains/bitcoin-knots/default.nix+69−27

This diff is too big to show here.

pkgs/applications/blockchains/bitcoin-unlimited/default.nix+1−1

This diff is too big to show here.

pkgs/applications/blockchains/bitcoin/default.nix+8−6

This diff is too big to show here.

pkgs/applications/blockchains/btcpayserver/default.nix+14−38

This diff is too big to show here.

pkgs/applications/blockchains/btcpayserver/deps.nix+685−685

This diff is too big to show here.

pkgs/applications/blockchains/cgminer/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/charge-lnd/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/chia-plotter/default.nix+15−8

This diff is too big to show here.

pkgs/applications/blockchains/chia-plotter/dont_fetch_dependencies.patch+24−11

This diff is too big to show here.

pkgs/applications/blockchains/chia/default.nix+29−27

This diff is too big to show here.

pkgs/applications/blockchains/clightning/default.nix+18−10

This diff is too big to show here.

pkgs/applications/blockchains/crypto-org-wallet/default.nix+1−1

This diff is too big to show here.

pkgs/applications/blockchains/dashpay/default.nix+1−1

This diff is too big to show here.

pkgs/applications/blockchains/dero/default.nixdeleted−25

This diff is too big to show here.

pkgs/applications/blockchains/dogecoin/default.nix+3−3

This diff is too big to show here.

pkgs/applications/blockchains/eclair/default.nix+4−4

This diff is too big to show here.

pkgs/applications/blockchains/electrs/default.nix+15−3

This diff is too big to show here.

pkgs/applications/blockchains/electrs/update.shnew file+40

This diff is too big to show here.

pkgs/applications/blockchains/elements/default.nix+8−10

This diff is too big to show here.

pkgs/applications/blockchains/ergo/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/erigon.nix+4−4

This diff is too big to show here.

pkgs/applications/blockchains/exodus/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/fulcrum/default.nixnew file+36

This diff is too big to show here.

pkgs/applications/blockchains/go-ethereum/default.nix+6−5

This diff is too big to show here.

pkgs/applications/blockchains/groestlcoin/default.nixnew file+93

This diff is too big to show here.

pkgs/applications/blockchains/ledger-live-desktop/default.nix+17−4

This diff is too big to show here.

pkgs/applications/blockchains/ledger-live-desktop/systemd.patchnew file+14

This diff is too big to show here.

pkgs/applications/blockchains/lightning-loop/default.nix+3−3

This diff is too big to show here.

pkgs/applications/blockchains/lightning-pool/default.nix+3−3

This diff is too big to show here.

pkgs/applications/blockchains/lightwalletd/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/litecoin/default.nix+1−2

This diff is too big to show here.

pkgs/applications/blockchains/lnd/default.nix+5−5

This diff is too big to show here.

pkgs/applications/blockchains/lndmanage/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/monero-cli/default.nixnew file+60

This diff is too big to show here.

pkgs/applications/blockchains/monero-cli/use-system-libraries.patchnew file+52

This diff is too big to show here.

pkgs/applications/blockchains/monero-gui/default.nix+9−9

This diff is too big to show here.

pkgs/applications/blockchains/monero/default.nixdeleted−60

This diff is too big to show here.

pkgs/applications/blockchains/monero/use-system-libraries.patchdeleted−69

This diff is too big to show here.

pkgs/applications/blockchains/mycrypto/default.nix+4−4

This diff is too big to show here.

pkgs/applications/blockchains/namecoin/default.nix+6−7

This diff is too big to show here.

pkgs/applications/blockchains/nbxplorer/default.nix+12−36

This diff is too big to show here.

pkgs/applications/blockchains/nbxplorer/deps.nix+263−243

This diff is too big to show here.

pkgs/applications/blockchains/nbxplorer/util/create-deps.sh+2−2

This diff is too big to show here.

pkgs/applications/blockchains/nbxplorer/util/update-common.sh+3−3

This diff is too big to show here.

pkgs/applications/blockchains/nearcore/default.nixnew file+42

This diff is too big to show here.

pkgs/applications/blockchains/openethereum/default.nix+4−4

This diff is too big to show here.

pkgs/applications/blockchains/oxen/default.nix+4−3

This diff is too big to show here.

pkgs/applications/blockchains/parity-ui/default.nixdeleted−48

This diff is too big to show here.

pkgs/applications/blockchains/parity-ui/env.nixdeleted−19

This diff is too big to show here.

pkgs/applications/blockchains/particl-core/default.nix+10−7

This diff is too big to show here.

pkgs/applications/blockchains/pivx/default.nix+1−1

This diff is too big to show here.

pkgs/applications/blockchains/polkadot/default.nix+27−4

This diff is too big to show here.

pkgs/applications/blockchains/snarkos/default.nixnew file+61

This diff is too big to show here.

pkgs/applications/blockchains/solana/default.nixnew file+61

This diff is too big to show here.

pkgs/applications/blockchains/solana/pin.jsonnew file+5

This diff is too big to show here.

pkgs/applications/blockchains/solana/update.shnew file+33

This diff is too big to show here.

pkgs/applications/blockchains/stellar-core/default.nix+7−3

This diff is too big to show here.

pkgs/applications/blockchains/trezor-suite/default.nix+4−5

This diff is too big to show here.

pkgs/applications/blockchains/wasabibackend/create_deps.shdeleted−98

This diff is too big to show here.

pkgs/applications/blockchains/wasabibackend/default.nix+22−72

This diff is too big to show here.

pkgs/applications/blockchains/wasabibackend/deps.nix+202−955

This diff is too big to show here.

pkgs/applications/blockchains/wasabiwallet/default.nix+4−3

This diff is too big to show here.

pkgs/applications/blockchains/whirlpool-gui/default.nixdeleted−104

This diff is too big to show here.

pkgs/applications/blockchains/wownero/default.nix+17−16

This diff is too big to show here.

pkgs/applications/blockchains/zcash/default.nix+6−6

This diff is too big to show here.

pkgs/applications/display-managers/lightdm-enso-os-greeter/default.nix+8−7

This diff is too big to show here.

pkgs/applications/display-managers/sddm/default.nix+7

This diff is too big to show here.

pkgs/applications/display-managers/sddm/sddm-default-session.patchnew file+71

This diff is too big to show here.

pkgs/applications/editors/aewan/default.nix+12−1

This diff is too big to show here.

pkgs/applications/editors/android-studio/common.nix+13−9

This diff is too big to show here.

pkgs/applications/editors/android-studio/default.nix+8−7

This diff is too big to show here.

pkgs/applications/editors/apostrophe/default.nix+8−8

This diff is too big to show here.

pkgs/applications/editors/atom/default.nix+4−4

This diff is too big to show here.

pkgs/applications/editors/atom/env.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/bless/default.nix+12−6

This diff is too big to show here.

pkgs/applications/editors/bluefish/default.nix+25−8

This diff is too big to show here.

pkgs/applications/editors/bluej/default.nix+37−10

This diff is too big to show here.

pkgs/applications/editors/bonzomatic/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/bviplus/default.nix+13−1

This diff is too big to show here.

pkgs/applications/editors/code-browser/default.nix+31−20

This diff is too big to show here.

pkgs/applications/editors/cpeditor/default.nixnew file+40

This diff is too big to show here.

pkgs/applications/editors/cudatext/default.nix+5−3

This diff is too big to show here.

pkgs/applications/editors/cudatext/deps.json+20−20

This diff is too big to show here.

pkgs/applications/editors/cudatext/update.shnew file+23

This diff is too big to show here.

pkgs/applications/editors/deadpixi-sam/default.nix+9−7

This diff is too big to show here.

pkgs/applications/editors/eclipse/build-eclipse.nix+5−5

This diff is too big to show here.

pkgs/applications/editors/eclipse/default.nix+18−14

This diff is too big to show here.

pkgs/applications/editors/eclipse/plugins.nix+98−3

This diff is too big to show here.

pkgs/applications/editors/ed/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/elvis/default.nix+10−7

This diff is too big to show here.

pkgs/applications/editors/em/default.nixnew file+29

This diff is too big to show here.

pkgs/applications/editors/emacs/27.nixdeleted−12

This diff is too big to show here.

pkgs/applications/editors/emacs/28.nixnew file+5

This diff is too big to show here.

pkgs/applications/editors/emacs/at-fdcwd.patchdeleted−15

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/agda-input/default.nixnew file+18

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/agda2-mode/default.nixnew file+27

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/apheleia/default.nix+23−25

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/bqn-mode/default.nixnew file+22

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/cedet/default.nixdeleted−51

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/cedille/default.nix+11−8

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/color-theme-solarized/default.nix+22−17

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/control-lock/default.nixnew file+23

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/ebuild-mode/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix+882−219

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/elpa-packages.nix+12−9

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/emacs2nix.nix+5−4

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/emacspeak/default.nix+29−11

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/ement/default.nixnew file+44

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/ement/handle-nil-images.patchnew file+28

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/ess-R-object-popup/default.nix+21−13

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/evil-markdown/default.nix+19−31

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/font-lock-plus/default.nix+15−10

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/git-undo/default.nix+13−23

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/header-file-mode/default.nixnew file+30

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/helm-words/default.nix+20−15

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/ido-ubiquitous/default.nixdeleted−27

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/isearch-plus/default.nix+14−25

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/isearch-prop/default.nix+14−24

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/jam-mode/default.nix+10−3

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/libgenerated.nix+4−1

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/llvm-mode/default.nixnew file+17

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix+54−112

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix+47−2

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/mu4e-patch/default.nixdeleted−38

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/nano-theme/default.nix+5−12

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/nongnu-generated.nix+1613−195

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/nongnu-packages.nix+2−1

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/org-generated.nixdeleted−33

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/org-mac-link/default.nixdeleted−32

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/org-packages.nixdeleted−33

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/ott-mode/default.nixnew file+19

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/plz/default.nixnew file+31

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/power-mode/default.nix+4−11

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/prolog/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/railgun/default.nixdeleted−22

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json+10654−7300

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/rect-mark/default.nix+15−24

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/session-management-for-emacs/default.nix+11−9

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/sunrise-commander/default.nix+5−18

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/sv-kalender/default.nix+2−5

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/tramp/default.nixdeleted−28

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-from-overlay−4

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/elisp-packages/update-orgdeleted−4

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/urweb-mode/default.nixnew file+27

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/youtube-dl/default.nix+13−21

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/zeitgeist/default.nixdeleted−25

This diff is too big to show here.

pkgs/applications/editors/emacs/generic.nix+34−8

This diff is too big to show here.

pkgs/applications/editors/emacs/macport.nix+5−4

This diff is too big to show here.

pkgs/applications/editors/emacs/tramp-detect-wrapped-gvfsd-26.patchdeleted−14

This diff is too big to show here.

pkgs/applications/editors/emacs/tramp-detect-wrapped-gvfsd.patchdeleted−11

This diff is too big to show here.

pkgs/applications/editors/featherpad/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/fte/default.nix+2−1

This diff is too big to show here.

pkgs/applications/editors/geany/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/ghostwriter/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/gnome-builder/default.nix+24−21

This diff is too big to show here.

pkgs/applications/editors/gobby/default.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/gophernotes/default.nix+3−3

This diff is too big to show here.

pkgs/applications/editors/helix/default.nix+13−10

This diff is too big to show here.

pkgs/applications/editors/heme/default.nixdeleted−29

This diff is too big to show here.

pkgs/applications/editors/hexcurse/default.nix+16

This diff is too big to show here.

pkgs/applications/editors/hexdino/default.nix+6−6

This diff is too big to show here.

pkgs/applications/editors/jetbrains/common.nixdeleted−97

This diff is too big to show here.

pkgs/applications/editors/jetbrains/darwin.nixnew file+36

This diff is too big to show here.

pkgs/applications/editors/jetbrains/default.nix+130−113

This diff is too big to show here.

pkgs/applications/editors/jetbrains/linux.nixnew file+93

This diff is too big to show here.

pkgs/applications/editors/jetbrains/update.pldeleted−101

This diff is too big to show here.

pkgs/applications/editors/jetbrains/update.pynew file+100

This diff is too big to show here.

pkgs/applications/editors/jetbrains/versions.jsonnew file+296

This diff is too big to show here.

pkgs/applications/editors/jove/default.nix+2−1

This diff is too big to show here.

pkgs/applications/editors/jucipp/default.nix+3−4

This diff is too big to show here.

pkgs/applications/editors/jupyter-kernels/octave/default.nix+2−1

This diff is too big to show here.

pkgs/applications/editors/jupyter-kernels/octave/kernel.nix+4−6

This diff is too big to show here.

pkgs/applications/editors/jupyter-kernels/wolfram/default.nixnew file+22

This diff is too big to show here.

pkgs/applications/editors/jupyter-kernels/wolfram/kernel.nixnew file+32

This diff is too big to show here.

pkgs/applications/editors/kakoune/default.nix+3−2

This diff is too big to show here.

pkgs/applications/editors/kakoune/plugins/aliases.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/kakoune/plugins/default.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/kakoune/plugins/kakoune-plugin-names+20−19

This diff is too big to show here.

pkgs/applications/editors/kakoune/plugins/update-shell.nixnew file+15

This diff is too big to show here.

pkgs/applications/editors/kakoune/plugins/update.py+3−3

This diff is too big to show here.

pkgs/applications/editors/kdevelop5/kdev-php.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/kdevelop5/kdev-python.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/kile/default.nix+3−2

This diff is too big to show here.

pkgs/applications/editors/kodestudio/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/lapce/default.nixnew file+99

This diff is too big to show here.

pkgs/applications/editors/leo-editor/default.nix+6−7

This diff is too big to show here.

pkgs/applications/editors/libresprite/default.nixnew file+111

This diff is too big to show here.

pkgs/applications/editors/lifeograph/default.nixnew file+40

This diff is too big to show here.

pkgs/applications/editors/lighttable/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/lite-xl/0001-replace-unpack-with-table-unpack.patchnew file+91

This diff is too big to show here.

pkgs/applications/editors/lite-xl/default.nixnew file+52

This diff is too big to show here.

pkgs/applications/editors/manuskript/default.nix+3−3

This diff is too big to show here.

pkgs/applications/editors/marker/default.nix+6−3

This diff is too big to show here.

pkgs/applications/editors/mg/default.nix+6−2

This diff is too big to show here.

pkgs/applications/editors/micro/default.nix+3−1

This diff is too big to show here.

pkgs/applications/editors/micro/test-with-expect.nixnew file+30

This diff is too big to show here.

pkgs/applications/editors/mindforger/default.nix−1

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/moe/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/monodevelop/default.nixdeleted−81

This diff is too big to show here.

pkgs/applications/editors/monodevelop/git-revert-12d610fb3f6dce121df538e36f21d8c2eeb0a6e3.patchdeleted−57

This diff is too big to show here.

pkgs/applications/editors/music/tuxguitar/default.nix+3−3

This diff is too big to show here.

pkgs/applications/editors/nano/default.nix+6−4

This diff is too big to show here.

pkgs/applications/editors/nano/nanorc/default.nix−2

This diff is too big to show here.

pkgs/applications/editors/nano/test-with-expect.nixnew file+35

This diff is too big to show here.

pkgs/applications/editors/ne/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/neovim/default.nix+14−22

This diff is too big to show here.

pkgs/applications/editors/neovim/neovide/default.nix+22−9

This diff is too big to show here.

pkgs/applications/editors/neovim/neovide/skia-externals.json+6−6

This diff is too big to show here.

pkgs/applications/editors/neovim/neovim-remote.nix+2−3

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/neovim/tests.nix+29−1

This diff is too big to show here.

pkgs/applications/editors/neovim/utils.nix+4−5

This diff is too big to show here.

pkgs/applications/editors/neovim/wrapper.nix+3−2

This diff is too big to show here.

pkgs/applications/editors/netbeans/default.nix+5−5

This diff is too big to show here.

pkgs/applications/editors/nvi/default.nix+1

This diff is too big to show here.

pkgs/applications/editors/nvpy/default.nix+11−7

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+4−2

This diff is too big to show here.

pkgs/applications/editors/oni2/common.nixnew file+251

This diff is too big to show here.

pkgs/applications/editors/oni2/default.nixnew file+16

This diff is too big to show here.

pkgs/applications/editors/oni2/esy_skia_use_nixpkgs.patchnew file+13

This diff is too big to show here.

pkgs/applications/editors/oni2/extensions.locknew file+497

This diff is too big to show here.

pkgs/applications/editors/oni2/extensions.nixnew file+629

This diff is too big to show here.

pkgs/applications/editors/oni2/node.locknew file+376

This diff is too big to show here.

pkgs/applications/editors/oni2/node.nixnew file+453

This diff is too big to show here.

pkgs/applications/editors/pinegrow/default.nixnew file+80

This diff is too big to show here.

pkgs/applications/editors/poke/default.nix+28−3

This diff is too big to show here.

pkgs/applications/editors/quartus-prime/default.nix+2−1

This diff is too big to show here.

pkgs/applications/editors/qxmledit/default.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/rednotebook/default.nix+4−3

This diff is too big to show here.

pkgs/applications/editors/rehex/default.nix+14−8

This diff is too big to show here.

pkgs/applications/editors/retext/default.nix+37−16

This diff is too big to show here.

pkgs/applications/editors/rstudio/clang-location.patch+51−15

This diff is too big to show here.

pkgs/applications/editors/rstudio/default.nix+202−104

This diff is too big to show here.

pkgs/applications/editors/rstudio/package.jsonnew file+83

This diff is too big to show here.

pkgs/applications/editors/rstudio/r-location.patch+20−15

This diff is too big to show here.

pkgs/applications/editors/rstudio/yarn.lock+3835

This diff is too big to show here.

pkgs/applications/editors/rstudio/yarndeps.nix+4373

This diff is too big to show here.

pkgs/applications/editors/setzer/default.nix+3−2

This diff is too big to show here.

pkgs/applications/editors/sigil/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/spacevim/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/standardnotes/default.nix+9−8

This diff is too big to show here.

pkgs/applications/editors/sublime/2/default.nix+11−9

This diff is too big to show here.

pkgs/applications/editors/sublime/3/common.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/sublime/4/common.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/sublime/4/packages.nix+6−6

This diff is too big to show here.

pkgs/applications/editors/supertux-editor/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/texworks/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/thiefmd/default.nix+48

This diff is too big to show here.

pkgs/applications/editors/thonny/default.nix+16−1

This diff is too big to show here.

pkgs/applications/editors/tiled/default.nix+4−4

This diff is too big to show here.

pkgs/applications/editors/typora/default.nix−72

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/configurable.nix+17−34

This diff is too big to show here.

pkgs/applications/editors/vim/default.nix−2

This diff is too big to show here.

pkgs/applications/editors/vim/macvim.nix+3−3

This diff is too big to show here.

pkgs/applications/editors/vim/macvim.patch+32−34

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/aliases.nix+143

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/build-vim-plugin.nix+54

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/default.nix+52

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/deprecated.json+8

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/generated.nix+12184

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/markdown-preview-nvim/fix-node-paths.patch+46

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/markdown-preview-nvim/package.json+17

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/overrides.nix+1160

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/patches/fruzzy/get_version.patch

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/patches/lens-vim/remove_duplicate_g_lens_animate.patch

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/patches/sniprun/fix-paths.patch+36

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/patches/vim-grammarous/set_default_languagetool.patch

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/readme.md

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/update-shell.nix+16

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/update.py+128

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/vim-command-check-hook.sh+25

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/vim-gen-doc-hook.sh+2−3

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/vim-plugin-names+1014

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/vim-utils.nix+119−78

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/vim2nix/README.txt

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/vim2nix/addon-info.json

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/vim2nix/autoload/nix.vim

This diff is too big to show here.

pkgs/applications/editors/vim/vimacs.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/vis/default.nix+11−16

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/_maintainers/update-bin-srcs-lib.sh+11−5

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/cpptools/default.nix+111

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/cpptools/missing_elf_deps.sh

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/cpptools/package-activation-events.json

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/cpptools/update_helper.sh

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/default.nix+2348

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/language-packs.nix+89

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/default.nix+152

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/rt-deps-bin-srcs.json+94

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/update-bin-srcs+21

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/ms-toolsai-jupyter/default.nix+42

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/ms-vsliveshare-vsliveshare/default.nix+133

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/ms-vsliveshare-vsliveshare/noop-syslog.c

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/python/default.nix+128

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/python/extract-nuget.nix

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/remote-ssh/default.nix+54

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/rescript/default.nix+28

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/rescript/rescript-editor-analysis.nix+31

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/rust-analyzer/build-deps/package.json+19

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/rust-analyzer/default.nix+88

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/rust-analyzer/update.sh+49

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/terraform/default.nix+20

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/terraform/fix-terraform-ls.patch+19

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/updateSettings.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/updateSettingsTest.nix

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/update_installed_exts.sh+17−1

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/vscode-lldb/build-deps/package.json+23

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/vscode-lldb/cmake-build-extension-only.patch

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/vscode-lldb/default.nix+104

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/vscode-lldb/lldb.nix

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/vscode-lldb/reset-cargo-config.patch

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/vscode-lldb/update.sh+46

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/vscode-utils.nix+10−4

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/vscodeEnv.nix

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/vscodeEnvTest.nix

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/vscodeExts2nix.nix

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/wakatime/default.nix+22

This diff is too big to show here.

pkgs/applications/editors/vscode/generic.nix+60−41

This diff is too big to show here.

pkgs/applications/editors/vscode/update-shell.nix+18

This diff is too big to show here.

pkgs/applications/editors/vscode/update-vscode.sh+2−2

This diff is too big to show here.

pkgs/applications/editors/vscode/update-vscodium.sh+18−14

This diff is too big to show here.

pkgs/applications/editors/vscode/vscode.nix+7−7

This diff is too big to show here.

pkgs/applications/editors/vscode/vscodium.nix+11−14

This diff is too big to show here.

pkgs/applications/editors/wxhexeditor/default.nix+3−2

This diff is too big to show here.

pkgs/applications/editors/xed-editor/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/xedit/default.nix+45

This diff is too big to show here.

pkgs/applications/editors/xxe-pe/default.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/your-editor/default.nix+30

This diff is too big to show here.

pkgs/applications/emulators/atari++/default.nix

This diff is too big to show here.

pkgs/applications/emulators/atari800/default.nix

This diff is too big to show here.

pkgs/applications/emulators/attract-mode/default.nix+33

This diff is too big to show here.

pkgs/applications/emulators/basiliskii/default.nix+28

This diff is too big to show here.

pkgs/applications/emulators/basiliskii/remove-redhat-6-workaround-for-scsi-sg.h.patch+10

This diff is too big to show here.

pkgs/applications/emulators/bochs/default.nix+136

This diff is too big to show here.

pkgs/applications/emulators/bsnes/ares/default.nix+84

This diff is too big to show here.

pkgs/applications/emulators/bsnes/ares/fix-ruby.patch+27

This diff is too big to show here.

pkgs/applications/emulators/bsnes/bsnes-hd/default.nix

This diff is too big to show here.

pkgs/applications/emulators/bsnes/bsnes-hd/macos-copy-app-to-prefix.patch

This diff is too big to show here.

pkgs/applications/emulators/bsnes/bsnes-hd/macos-replace-sips-with-png2icns.patch

This diff is too big to show here.

pkgs/applications/emulators/bsnes/higan/001-include-cmath.patch+8

This diff is too big to show here.

pkgs/applications/emulators/bsnes/higan/002-sips-to-png2icns.patch+24

This diff is too big to show here.

pkgs/applications/emulators/bsnes/higan/default.nix+155

This diff is too big to show here.

pkgs/applications/emulators/caprice32/default.nix

This diff is too big to show here.

pkgs/applications/emulators/caprice32/string.patch

This diff is too big to show here.

pkgs/applications/emulators/ccemux/default.nix+67

This diff is too big to show here.

pkgs/applications/emulators/cdemu/analyzer.nix+1−1

This diff is too big to show here.

pkgs/applications/emulators/cdemu/base.nix+36

This diff is too big to show here.

pkgs/applications/emulators/cdemu/client.nix+16

This diff is too big to show here.

pkgs/applications/emulators/cdemu/daemon.nix+9

This diff is too big to show here.

pkgs/applications/emulators/cdemu/gui.nix+1−1

This diff is too big to show here.

pkgs/applications/emulators/cdemu/libmirage.nix+1−1

This diff is too big to show here.

pkgs/applications/emulators/cdemu/vhba.nix+22

This diff is too big to show here.

pkgs/applications/emulators/cen64/default.nix

This diff is too big to show here.

pkgs/applications/emulators/citra/default.nix+91

This diff is too big to show here.

pkgs/applications/emulators/collapseos-cvm/default.nix+30

This diff is too big to show here.

pkgs/applications/emulators/commanderx16/emulator.nix+44

This diff is too big to show here.

pkgs/applications/emulators/commanderx16/rom.nix+52

This diff is too big to show here.

pkgs/applications/emulators/commanderx16/run.nix+37

This diff is too big to show here.

pkgs/applications/emulators/craftos-pc/default.nix

This diff is too big to show here.

pkgs/applications/emulators/darcnes/default.nix

This diff is too big to show here.

pkgs/applications/emulators/darcnes/label.patch

This diff is too big to show here.

pkgs/applications/emulators/desmume/default.nix+87

This diff is too big to show here.

pkgs/applications/emulators/dgen-sdl/default.nix+69

This diff is too big to show here.

pkgs/applications/emulators/dlx/default.nix

This diff is too big to show here.

pkgs/applications/emulators/dolphin-emu/default.nix

This diff is too big to show here.

pkgs/applications/emulators/dolphin-emu/master.nix+89

This diff is too big to show here.

pkgs/applications/emulators/dolphin-emu/primehack.nix+151

This diff is too big to show here.

pkgs/applications/emulators/dosbox-staging/default.nix+112

This diff is too big to show here.

pkgs/applications/emulators/dosbox/default.nix+75

This diff is too big to show here.

pkgs/applications/emulators/duckstation/default.nix+106

This diff is too big to show here.

pkgs/applications/emulators/dynamips/default.nix+36

This diff is too big to show here.

pkgs/applications/emulators/emu2/default.nix+26

This diff is too big to show here.

pkgs/applications/emulators/emulationstation/default.nix

This diff is too big to show here.

pkgs/applications/emulators/fceux/default.nix+24

This diff is too big to show here.

pkgs/applications/emulators/firebird-emu/default.nix+36

This diff is too big to show here.

pkgs/applications/emulators/flycast/default.nix+52

This diff is too big to show here.

pkgs/applications/emulators/fs-uae/default.nix+65

This diff is too big to show here.

pkgs/applications/emulators/fs-uae/launcher.nix+43

This diff is too big to show here.

pkgs/applications/emulators/fuse-emulator/default.nix

This diff is too big to show here.

pkgs/applications/emulators/gens-gs/default.nix

This diff is too big to show here.

pkgs/applications/emulators/goldberg-emu/default.nix+52

This diff is too big to show here.

pkgs/applications/emulators/goldberg-emu/dont-install-unsupported.patch+34

This diff is too big to show here.

pkgs/applications/emulators/gxemul/0001-fix-attributes.patch

This diff is too big to show here.

pkgs/applications/emulators/gxemul/default.nix

This diff is too big to show here.

pkgs/applications/emulators/hatari/default.nix

This diff is too big to show here.

pkgs/applications/emulators/hercules/default.nix+27

This diff is too big to show here.

pkgs/applications/emulators/kega-fusion/default.nix

This diff is too big to show here.

pkgs/applications/emulators/lambda-delta/default.nix

This diff is too big to show here.

pkgs/applications/emulators/libdsk/default.nix+19

This diff is too big to show here.

pkgs/applications/emulators/maiko/default.nix

This diff is too big to show here.

pkgs/applications/emulators/mame/0001-Revert-Added-PDF-documentation-to-dist.mak.patch+37

This diff is too big to show here.

pkgs/applications/emulators/mame/default.nix+155

This diff is too big to show here.

pkgs/applications/emulators/mame/emuopts.patch

This diff is too big to show here.

pkgs/applications/emulators/mednafen/default.nix+98

This diff is too big to show here.

pkgs/applications/emulators/mednafen/server.nix

This diff is too big to show here.

pkgs/applications/emulators/mednaffe/default.nix+41

This diff is too big to show here.

pkgs/applications/emulators/melonDS/default.nix+43

This diff is too big to show here.

pkgs/applications/emulators/mgba/default.nix+87

This diff is too big to show here.

pkgs/applications/emulators/mupen64plus/default.nix

This diff is too big to show here.

pkgs/applications/emulators/nestopia/build-fix.patch

This diff is too big to show here.

pkgs/applications/emulators/nestopia/default.nix+72

This diff is too big to show here.

pkgs/applications/emulators/nestopia/gcc6.patch

This diff is too big to show here.

pkgs/applications/emulators/np2kai/default.nix

This diff is too big to show here.

pkgs/applications/emulators/oberon-risc-emu/default.nix

This diff is too big to show here.

pkgs/applications/emulators/openmsx/custom-nix.mk

This diff is too big to show here.

pkgs/applications/emulators/openmsx/default.nix

This diff is too big to show here.

pkgs/applications/emulators/pcem/default.nix

This diff is too big to show here.

pkgs/applications/emulators/pcsx2/default.nix+93

This diff is too big to show here.

pkgs/applications/emulators/pcsxr/0001-libpcsxcore-fix-build-with-ffmpeg-4.patch+76

This diff is too big to show here.

pkgs/applications/emulators/pcsxr/default.nix+89

This diff is too big to show here.

pkgs/applications/emulators/pcsxr/uncompress2.patch

This diff is too big to show here.

pkgs/applications/emulators/ppsspp/default.nix+72

This diff is too big to show here.

pkgs/applications/emulators/proton-caller/default.nix+24

This diff is too big to show here.

pkgs/applications/emulators/punes/default.nix+64

This diff is too big to show here.

pkgs/applications/emulators/py65/default.nix

This diff is too big to show here.

pkgs/applications/emulators/resim/default.nix+21

This diff is too big to show here.

pkgs/applications/emulators/retroarch/cores.nix+892

This diff is too big to show here.

pkgs/applications/emulators/retroarch/default.nix+139

This diff is too big to show here.

pkgs/applications/emulators/retroarch/disable-menu_show_core_updater.patch+25

This diff is too big to show here.

pkgs/applications/emulators/retroarch/fix-config.patch+26

This diff is too big to show here.

pkgs/applications/emulators/retroarch/fix-libretro-paths.patch+28

This diff is too big to show here.

pkgs/applications/emulators/retroarch/hashes.json+488

This diff is too big to show here.

pkgs/applications/emulators/retroarch/kodi-advanced-launchers.nix+1−3

This diff is too big to show here.

pkgs/applications/emulators/retroarch/update_cores.py+173

This diff is too big to show here.

pkgs/applications/emulators/retroarch/use-fixed-paths-on-libretro_info_path.patch+84

This diff is too big to show here.

pkgs/applications/emulators/retroarch/wrapper.nix+41

This diff is too big to show here.

pkgs/applications/emulators/retrofe/default.nix+78

This diff is too big to show here.

pkgs/applications/emulators/retrofe/include-paths.patch

This diff is too big to show here.

pkgs/applications/emulators/ripes/default.nix+50

This diff is too big to show here.

pkgs/applications/emulators/rpcs3/0001-llvm-ExecutionEngine-IntelJITEvents-only-use-ITTAPI_.patch+62

This diff is too big to show here.

pkgs/applications/emulators/rpcs3/default.nix+80

This diff is too big to show here.

pkgs/applications/emulators/rpcs3/update.sh+59

This diff is too big to show here.

pkgs/applications/emulators/ruffle/default.nix+60

This diff is too big to show here.

pkgs/applications/emulators/ryujinx/appdir.patch+23

This diff is too big to show here.

pkgs/applications/emulators/ryujinx/default.nix+108

This diff is too big to show here.

pkgs/applications/emulators/ryujinx/deps.nix+227

This diff is too big to show here.

pkgs/applications/emulators/ryujinx/updater.sh+86

This diff is too big to show here.

pkgs/applications/emulators/sameboy/default.nix+48

This diff is too big to show here.

pkgs/applications/emulators/simh/default.nix

This diff is too big to show here.

pkgs/applications/emulators/simplenes/default.nix

This diff is too big to show here.

pkgs/applications/emulators/snes9x/default.nix+130

This diff is too big to show here.

pkgs/applications/emulators/stella/default.nix+45

This diff is too big to show here.

pkgs/applications/emulators/termtekst/default.nix

This diff is too big to show here.

pkgs/applications/emulators/tilem/default.nix

This diff is too big to show here.

pkgs/applications/emulators/tiny8086/default.nix+68

This diff is too big to show here.

pkgs/applications/emulators/tinyemu/default.nix+46

This diff is too big to show here.

pkgs/applications/emulators/uae/default.nix+27

This diff is too big to show here.

pkgs/applications/emulators/uxn/default.nix+54

This diff is too big to show here.

pkgs/applications/emulators/vbam/default.nix

This diff is too big to show here.

pkgs/applications/emulators/vice/default.nix+187

This diff is too big to show here.

pkgs/applications/emulators/wine/base.nix+199

This diff is too big to show here.

pkgs/applications/emulators/wine/builder-wow.sh+3−2

This diff is too big to show here.

pkgs/applications/emulators/wine/cert-path.patch+15

This diff is too big to show here.

pkgs/applications/emulators/wine/darwin-metal-compat.patch+31

This diff is too big to show here.

pkgs/applications/emulators/wine/default.nix+67

This diff is too big to show here.

pkgs/applications/emulators/wine/fonts.nix

This diff is too big to show here.

pkgs/applications/emulators/wine/packages.nix+44

This diff is too big to show here.

pkgs/applications/emulators/wine/setup-hook-darwin.sh+37

This diff is too big to show here.

pkgs/applications/emulators/wine/sources.nix+93

This diff is too big to show here.

pkgs/applications/emulators/wine/staging.nix+1−1

This diff is too big to show here.

pkgs/applications/emulators/wine/util.nix

This diff is too big to show here.

pkgs/applications/emulators/wine/vkd3d.nix+28

This diff is too big to show here.

pkgs/applications/emulators/wine/winetricks.nix+33

This diff is too big to show here.

pkgs/applications/emulators/xcpc/default.nix

This diff is too big to show here.

pkgs/applications/emulators/yabause/0001-Fixes-for-Qt-5.11-upgrade.patch

This diff is too big to show here.

pkgs/applications/emulators/yabause/default.nix

This diff is too big to show here.

pkgs/applications/emulators/yabause/linkage-rwx-linux-elf.patch

This diff is too big to show here.

pkgs/applications/emulators/yapesdl/default.nix

This diff is too big to show here.

pkgs/applications/emulators/yuzu/compatibility-list.json+1

This diff is too big to show here.

pkgs/applications/emulators/yuzu/default.nix+40

This diff is too big to show here.

pkgs/applications/emulators/yuzu/generic.nix+157

This diff is too big to show here.

pkgs/applications/emulators/yuzu/update.sh+102

This diff is too big to show here.

pkgs/applications/emulators/zesarux/default.nix+97

This diff is too big to show here.

pkgs/applications/emulators/zsnes/default.nix+64

This diff is too big to show here.

pkgs/applications/finance/cryptowatch/default.nix+57

This diff is too big to show here.

pkgs/applications/finance/irpf/default.nix+73

This diff is too big to show here.

pkgs/applications/finance/odoo/default.nix+103

This diff is too big to show here.

pkgs/applications/gis/gmt/dcw.nix+2−2

This diff is too big to show here.

pkgs/applications/gis/gmt/default.nix+2−2

This diff is too big to show here.

pkgs/applications/gis/grass/default.nix+32−44

This diff is too big to show here.

pkgs/applications/gis/openorienteering-mapper/default.nix−3

This diff is too big to show here.

pkgs/applications/gis/qgis/default.nix+10−4

This diff is too big to show here.

pkgs/applications/gis/qgis/ltr.nix+32

This diff is too big to show here.

pkgs/applications/gis/qgis/unwrapped-ltr.nix+153

This diff is too big to show here.

pkgs/applications/gis/qgis/unwrapped.nix+74−18

This diff is too big to show here.

pkgs/applications/gis/qmapshack/default.nix+12−4

This diff is too big to show here.

pkgs/applications/gis/qmapshack/fix-qttranslations-path.patch+74

This diff is too big to show here.

pkgs/applications/gis/saga/default.nix+2−2

This diff is too big to show here.

pkgs/applications/gis/whitebox-tools/default.nix+8−4

This diff is too big to show here.

pkgs/applications/gis/whitebox-tools/update-cargo-lock.patch+578

This diff is too big to show here.

pkgs/applications/gis/zombietrackergps/default.nix+15−5

This diff is too big to show here.

pkgs/applications/graphics/ImageMagick/6.x.nix+3−3

This diff is too big to show here.

pkgs/applications/graphics/ImageMagick/7.0.nix+55−14

This diff is too big to show here.

pkgs/applications/graphics/akira/default.nix+2−1

This diff is too big to show here.

pkgs/applications/graphics/antimony/default.nix+3−7

This diff is too big to show here.

pkgs/applications/graphics/apitrace/default.nix+6

This diff is too big to show here.

pkgs/applications/graphics/apitrace/glibc-2.34-compat.patch+13

This diff is too big to show here.

pkgs/applications/graphics/ascii-image-converter/default.nix+22

This diff is too big to show here.

pkgs/applications/graphics/autopanosiftc/default.nix+5−4

This diff is too big to show here.

pkgs/applications/graphics/autotrace/autofig.nix+2−1

This diff is too big to show here.

pkgs/applications/graphics/avocode/default.nix+3−3

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/azpainter/default.nix+20−11

This diff is too big to show here.

pkgs/applications/graphics/blockbench-electron/default.nix+5−5

This diff is too big to show here.

pkgs/applications/graphics/c3d/default.nix+8−6

This diff is too big to show here.

pkgs/applications/graphics/ciano/default.nix+76

This diff is too big to show here.

pkgs/applications/graphics/cloudcompare/default.nix+46−18

This diff is too big to show here.

pkgs/applications/graphics/comical/default.nix+8−5

This diff is too big to show here.

pkgs/applications/graphics/coreimage/default.nix−31

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+117−29

This diff is too big to show here.

pkgs/applications/graphics/deskew/default.nix+11−9

This diff is too big to show here.

pkgs/applications/graphics/digikam/default.nix+15−4

This diff is too big to show here.

pkgs/applications/graphics/displaycal/default.nix−72

This diff is too big to show here.

pkgs/applications/graphics/drawing/default.nix+15−2

This diff is too big to show here.

pkgs/applications/graphics/drawio/default.nix+9−3

This diff is too big to show here.

pkgs/applications/graphics/drawpile/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/epick/default.nix+56

This diff is too big to show here.

pkgs/applications/graphics/evilpixie/default.nix+4−4

This diff is too big to show here.

pkgs/applications/graphics/exrdisplay/default.nix+4−3

This diff is too big to show here.

pkgs/applications/graphics/exrtools/default.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/f3d/default.nix+6−7

This diff is too big to show here.

pkgs/applications/graphics/fbida/default.nix+52−8

This diff is too big to show here.

pkgs/applications/graphics/feh/default.nix+9−9

This diff is too big to show here.

pkgs/applications/graphics/fig2dev/default.nix+3−1

This diff is too big to show here.

pkgs/applications/graphics/fiji/default.nix+72

This diff is too big to show here.

pkgs/applications/graphics/fluxus/default.nix+3−2

This diff is too big to show here.

pkgs/applications/graphics/fondo/default.nix+5−4

This diff is too big to show here.

pkgs/applications/graphics/foxotron/default.nix+3−3

This diff is too big to show here.

pkgs/applications/graphics/freecad/default.nix+3−1

This diff is too big to show here.

pkgs/applications/graphics/freepv/default.nix+18−5

This diff is too big to show here.

pkgs/applications/graphics/gcolor3/default.nix+6−2

This diff is too big to show here.

pkgs/applications/graphics/geeqie/default.nix+21−8

This diff is too big to show here.

pkgs/applications/graphics/gimp/default.nix+6−5

This diff is too big to show here.

pkgs/applications/graphics/gimp/plugins/default.nix+51−6

This diff is too big to show here.

pkgs/applications/graphics/gimp/wrapper.nix+2

This diff is too big to show here.

pkgs/applications/graphics/glabels/default.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/glimpse/default.nix+1

This diff is too big to show here.

pkgs/applications/graphics/glimpse/wrapper.nix+2

This diff is too big to show here.

pkgs/applications/graphics/gnome-obfuscate/default.nix+70

This diff is too big to show here.

pkgs/applications/graphics/gnome-photos/default.nix+2−3

This diff is too big to show here.

pkgs/applications/graphics/gocr/default.nix+3−2

This diff is too big to show here.

pkgs/applications/graphics/gpicview/default.nix+11−10

This diff is too big to show here.

pkgs/applications/graphics/gqview/default.nix+8−10

This diff is too big to show here.

pkgs/applications/graphics/grafx2/default.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/graphicsmagick/default.nix+18−4

This diff is too big to show here.

pkgs/applications/graphics/gscan2pdf/default.nix+3−3

This diff is too big to show here.

pkgs/applications/graphics/gthumb/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/hdr-plus/default.nix+5−13

This diff is too big to show here.

pkgs/applications/graphics/hdrmerge/default.nix+76

This diff is too big to show here.

pkgs/applications/graphics/hugin/default.nix+62−18

This diff is too big to show here.

pkgs/applications/graphics/hydrus/default.nix+7−3

This diff is too big to show here.

pkgs/applications/graphics/icon-library/default.nix+37

This diff is too big to show here.

pkgs/applications/graphics/ideogram/default.nix+2−1

This diff is too big to show here.

pkgs/applications/graphics/image-roll/default.nix+39

This diff is too big to show here.

pkgs/applications/graphics/imagej/default.nix+11−4

This diff is too big to show here.

pkgs/applications/graphics/imgbrd-grabber/default.nix+8−3

This diff is too big to show here.

pkgs/applications/graphics/imlibsetroot/default.nix+13−6

This diff is too big to show here.

pkgs/applications/graphics/imv/default.nix+6−5

This diff is too big to show here.

pkgs/applications/graphics/inkscape/default.nix+9−11

This diff is too big to show here.

pkgs/applications/graphics/inkscape/extensions.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/inkscape/extensions/applytransforms/default.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/ipe/default.nix+26−6

This diff is too big to show here.

pkgs/applications/graphics/jpegrescan/default.nix+5−1

This diff is too big to show here.

pkgs/applications/graphics/k3d/default.nix−51

This diff is too big to show here.

pkgs/applications/graphics/krita/default.nix+6−52

This diff is too big to show here.

pkgs/applications/graphics/krita/generic.nix+59

This diff is too big to show here.

pkgs/applications/graphics/lightburn/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/mandelbulber/default.nix+3−3

This diff is too big to show here.

pkgs/applications/graphics/mcomix3/default.nix+2−1

This diff is too big to show here.

pkgs/applications/graphics/megapixels/default.nix+21−10

This diff is too big to show here.

pkgs/applications/graphics/menyoki/default.nix+46

This diff is too big to show here.

pkgs/applications/graphics/meshlab/default.nix+11−2

This diff is too big to show here.

pkgs/applications/graphics/minidjvu/default.nix+7−5

This diff is too big to show here.

pkgs/applications/graphics/monado/default.nix+12

This diff is too big to show here.

pkgs/applications/graphics/mtpaint/default.nix+3−5

This diff is too big to show here.

pkgs/applications/graphics/mypaint/default.nix+10

This diff is too big to show here.

pkgs/applications/graphics/nomacs/default.nix−1

This diff is too big to show here.

pkgs/applications/graphics/nsxiv/default.nix+61

This diff is too big to show here.

pkgs/applications/graphics/ocrfeeder/default.nix+5−8

This diff is too big to show here.

pkgs/applications/graphics/odafileconverter/default.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/openboard/default.nix+11−3

This diff is too big to show here.

pkgs/applications/graphics/openscad/default.nix+5−4

This diff is too big to show here.

pkgs/applications/graphics/opentoonz/default.nix+4−2

This diff is too big to show here.

pkgs/applications/graphics/opentoonz/libtiff.nix+44−9

This diff is too big to show here.

pkgs/applications/graphics/opentoonz/source.nix+3−3

This diff is too big to show here.

pkgs/applications/graphics/ovito/default.nix+31−10

This diff is too big to show here.

pkgs/applications/graphics/paraview/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/pbrt/default.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/pdfcpu/default.nix+9−3

This diff is too big to show here.

pkgs/applications/graphics/photivo/default.nix−40

This diff is too big to show here.

pkgs/applications/graphics/photivo/gcc6.patch−13

This diff is too big to show here.

pkgs/applications/graphics/photoflow/default.nix+4

This diff is too big to show here.

pkgs/applications/graphics/pinta/default.nix+68−63

This diff is too big to show here.

pkgs/applications/graphics/pinta/deps.nix+12

This diff is too big to show here.

pkgs/applications/graphics/pixeluvo/default.nix+56

This diff is too big to show here.

pkgs/applications/graphics/pixinsight/default.nix+132

This diff is too big to show here.

pkgs/applications/graphics/qimgv/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/qiv/default.upstream−3

This diff is too big to show here.

pkgs/applications/graphics/qscreenshot/default.nix+3−2

This diff is too big to show here.

pkgs/applications/graphics/qvge/default.nix+7−5

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.patch+356

This diff is too big to show here.

pkgs/applications/graphics/renderdoc/default.nix+28−7

This diff is too big to show here.

pkgs/applications/graphics/rnote/default.nix+78

This diff is too big to show here.

pkgs/applications/graphics/sane/backends/airscan/default.nix+2−2

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/brscan4/udev_rules_type1.nix+4−3

This diff is too big to show here.

pkgs/applications/graphics/sane/backends/brscan5/default.nix+32−22

This diff is too big to show here.

pkgs/applications/graphics/sane/backends/default.nix−1

This diff is too big to show here.

pkgs/applications/graphics/sane/config.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/sane/frontends.nix−1

This diff is too big to show here.

pkgs/applications/graphics/sane/xsane.nix+21−13

This diff is too big to show here.

pkgs/applications/graphics/scantailor/default.nix+9−6

This diff is too big to show here.

pkgs/applications/graphics/screencloud/default.nix+3−3

This diff is too big to show here.

pkgs/applications/graphics/shotwell/default.nix+3−3

This diff is too big to show here.

pkgs/applications/graphics/shutter/default.nix+5−5

This diff is too big to show here.

pkgs/applications/graphics/smartdeblur/default.nix+12−13

This diff is too big to show here.

pkgs/applications/graphics/solvespace/default.nix+63−15

This diff is too big to show here.

pkgs/applications/graphics/swingsane/default.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/symbolic-preview/default.nix+31

This diff is too big to show here.

pkgs/applications/graphics/synfigstudio/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/tesseract/default.nix+6

This diff is too big to show here.

pkgs/applications/graphics/tesseract/fetch-language-hashes+2−2

This diff is too big to show here.

pkgs/applications/graphics/tesseract/languages.nix+245−245

This diff is too big to show here.

pkgs/applications/graphics/tesseract/tesseract3.nix+14−3

This diff is too big to show here.

pkgs/applications/graphics/tesseract/tesseract4.nix+28−4

This diff is too big to show here.

pkgs/applications/graphics/tesseract/tesseract5.nix+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/tev/default.nix+5−9

This diff is too big to show here.

pkgs/applications/graphics/unigine-heaven/default.nix+107

This diff is too big to show here.

pkgs/applications/graphics/unigine-sanctuary/default.nix+97

This diff is too big to show here.

pkgs/applications/graphics/unigine-superposition/default.nix+146

This diff is too big to show here.

pkgs/applications/graphics/unigine-tropics/default.nix+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/vengi-tools/default.nix+112

This diff is too big to show here.

pkgs/applications/graphics/vengi-tools/test-voxconvert-all-formats.nix+15

This diff is too big to show here.

pkgs/applications/graphics/vengi-tools/test-voxconvert-roundtrip.nix+15

This diff is too big to show here.

pkgs/applications/graphics/viewnior/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/weylus/default.nix+86

This diff is too big to show here.

pkgs/applications/graphics/wings/default.nix+9−7

This diff is too big to show here.

pkgs/applications/graphics/write_stylus/default.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/xfig/default.nix+13−2

This diff is too big to show here.

pkgs/applications/graphics/xournal/default.nix+5−5

This diff is too big to show here.

pkgs/applications/graphics/xournalpp/default.nix+4−3

This diff is too big to show here.

pkgs/applications/graphics/xrgears/default.nix+14−3

This diff is too big to show here.

pkgs/applications/graphics/yacreader/default.nix+2−2

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/akonadi-contacts.nix+3−3

This diff is too big to show here.

pkgs/applications/kde/akonadi/default.nix+7

This diff is too big to show here.

pkgs/applications/kde/akregator.nix+2

This diff is too big to show here.

pkgs/applications/kde/ark/default.nix+1

This diff is too big to show here.

pkgs/applications/kde/bovo.nix+1−1

This diff is too big to show here.

pkgs/applications/kde/default.nix+11−3

This diff is too big to show here.

pkgs/applications/kde/dolphin.nix+2

This diff is too big to show here.

pkgs/applications/kde/dragon.nix+1

This diff is too big to show here.

pkgs/applications/kde/elisa.nix+1

This diff is too big to show here.

pkgs/applications/kde/falkon.nix+40

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/filelight.nix+2

This diff is too big to show here.

pkgs/applications/kde/gwenview.nix+2

This diff is too big to show here.

pkgs/applications/kde/k3b.nix+3−1

This diff is too big to show here.

pkgs/applications/kde/kaddressbook.nix+6

This diff is too big to show here.

pkgs/applications/kde/kalarm.nix+5−3

This diff is too big to show here.

pkgs/applications/kde/kalarmcal.nix−19

This diff is too big to show here.

pkgs/applications/kde/kalendar.nix+94

This diff is too big to show here.

pkgs/applications/kde/kalzium.nix+1−1

This diff is too big to show here.

pkgs/applications/kde/kamoso.nix+6−2

This diff is too big to show here.

pkgs/applications/kde/kate.nix+2

This diff is too big to show here.

pkgs/applications/kde/kbreakout.nix+5−1

This diff is too big to show here.

pkgs/applications/kde/kcachegrind.nix+2

This diff is too big to show here.

pkgs/applications/kde/kcalc.nix+2

This diff is too big to show here.

pkgs/applications/kde/kcharselect.nix+1

This diff is too big to show here.

pkgs/applications/kde/kcolorchooser.nix+2

This diff is too big to show here.

pkgs/applications/kde/kdebugsettings.nix+3−1

This diff is too big to show here.

pkgs/applications/kde/kdeconnect-kde.nix+6

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/kdenlive/default.nix+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/kdialog.nix+2

This diff is too big to show here.

pkgs/applications/kde/kfind.nix+2

This diff is too big to show here.

pkgs/applications/kde/kgeography.nix+2

This diff is too big to show here.

pkgs/applications/kde/kget.nix+2

This diff is too big to show here.

pkgs/applications/kde/kgpg.nix+2

This diff is too big to show here.

pkgs/applications/kde/khelpcenter.nix+9−5

This diff is too big to show here.

pkgs/applications/kde/kig.nix+2−1

This diff is too big to show here.

pkgs/applications/kde/kio-extras.nix+7

This diff is too big to show here.

pkgs/applications/kde/kipi-plugins.nix+1−1

This diff is too big to show here.

pkgs/applications/kde/kitinerary.nix+8−4

This diff is too big to show here.

pkgs/applications/kde/kleopatra.nix+2

This diff is too big to show here.

pkgs/applications/kde/klettres.nix+1−1

This diff is too big to show here.

pkgs/applications/kde/kmahjongg.nix+2

This diff is too big to show here.

pkgs/applications/kde/kmail.nix+2

This diff is too big to show here.

pkgs/applications/kde/kmix.nix+2

This diff is too big to show here.

pkgs/applications/kde/kmousetool.nix+35

This diff is too big to show here.

pkgs/applications/kde/kmplot.nix+2

This diff is too big to show here.

pkgs/applications/kde/knotes.nix+15−11

This diff is too big to show here.

pkgs/applications/kde/kolf.nix+2

This diff is too big to show here.

pkgs/applications/kde/kolourpaint.nix+2

This diff is too big to show here.

pkgs/applications/kde/kompare.nix+5−1

This diff is too big to show here.

pkgs/applications/kde/konqueror.nix+2

This diff is too big to show here.

pkgs/applications/kde/konquest.nix+2

This diff is too big to show here.

pkgs/applications/kde/konsole.nix+5−1

This diff is too big to show here.

pkgs/applications/kde/kontact.nix+2

This diff is too big to show here.

pkgs/applications/kde/korganizer.nix+2

This diff is too big to show here.

pkgs/applications/kde/kpublictransport.nix+13

This diff is too big to show here.

pkgs/applications/kde/krdc.nix+1

This diff is too big to show here.

pkgs/applications/kde/krfb.nix+9−8

This diff is too big to show here.

pkgs/applications/kde/kruler.nix+2

This diff is too big to show here.

pkgs/applications/kde/kspaceduel.nix+5−1

This diff is too big to show here.

pkgs/applications/kde/ksudoku.nix+2

This diff is too big to show here.

pkgs/applications/kde/ksystemlog.nix+2

This diff is too big to show here.

pkgs/applications/kde/ktorrent.nix+22

This diff is too big to show here.

pkgs/applications/kde/ktouch.nix+17−17

This diff is too big to show here.

pkgs/applications/kde/kturtle.nix+1−1

This diff is too big to show here.

pkgs/applications/kde/kwalletmanager.nix+3

This diff is too big to show here.

pkgs/applications/kde/libktorrent.nix+22

This diff is too big to show here.

pkgs/applications/kde/marble.nix+5−1

This diff is too big to show here.

pkgs/applications/kde/minuet.nix+2

This diff is too big to show here.

pkgs/applications/kde/okular.nix+1

This diff is too big to show here.

pkgs/applications/kde/picmi.nix+2

This diff is too big to show here.

pkgs/applications/kde/pim-data-exporter.nix+2

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/kde/skanlite.nix+18

This diff is too big to show here.

pkgs/applications/kde/skanpage.nix+32

This diff is too big to show here.

pkgs/applications/kde/spectacle.nix+2

This diff is too big to show here.

pkgs/applications/kde/srcs.nix+968−912

This diff is too big to show here.

pkgs/applications/kde/yakuake.nix+2

This diff is too big to show here.

pkgs/applications/kde/zanshin.nix+18

This diff is too big to show here.

pkgs/applications/logging/humioctl/default.nix+2−2

This diff is too big to show here.

pkgs/applications/logging/sosreport/default.nix+51

This diff is too big to show here.

pkgs/applications/misc/1password-gui/beta.nix+132

This diff is too big to show here.

pkgs/applications/misc/1password-gui/default.nix+20−4

This diff is too big to show here.

pkgs/applications/misc/1password/default.nix+50−30

This diff is too big to show here.

pkgs/applications/misc/ArchiSteamFarm/default.nix+42−28

This diff is too big to show here.

pkgs/applications/misc/ArchiSteamFarm/deps-aarch64-linux.nix+280

This diff is too big to show here.

pkgs/applications/misc/ArchiSteamFarm/deps-x86_64-linux.nix+280

This diff is too big to show here.

pkgs/applications/misc/ArchiSteamFarm/updater.sh+44

This diff is too big to show here.

pkgs/applications/misc/ArchiSteamFarm/web-ui/default.nix+40

This diff is too big to show here.

pkgs/applications/misc/ArchiSteamFarm/web-ui/node-composition.nix+17

This diff is too big to show here.

pkgs/applications/misc/ArchiSteamFarm/web-ui/node-packages.nix+7645

This diff is too big to show here.

pkgs/applications/misc/ArchiSteamFarm/web-ui/update.sh+26

This diff is too big to show here.

pkgs/applications/misc/HentaiAtHome/default.nix+37

This diff is too big to show here.

pkgs/applications/misc/OSCAR/default.nix+6−4

This diff is too big to show here.

pkgs/applications/misc/ablog/default.nix+36

This diff is too big to show here.

pkgs/applications/misc/abook/default.nix+8−7

This diff is too big to show here.

pkgs/applications/misc/adobe-reader/default.nix+23−15

This diff is too big to show here.

pkgs/applications/misc/airtame/default.nix−79

This diff is too big to show here.

pkgs/applications/misc/almanah/default.nix+13−1

This diff is too big to show here.

pkgs/applications/misc/anup/default.nix+3−1

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/appeditor/default.nix+9−3

This diff is too big to show here.

pkgs/applications/misc/apvlv/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/archivebox/default.nix+16−24

This diff is too big to show here.

pkgs/applications/misc/archiver/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/archivy/default.nix+16−26

This diff is too big to show here.

pkgs/applications/misc/artha/default.nix+4−8

This diff is too big to show here.

pkgs/applications/misc/artha/gio-underlink.patch−13

This diff is too big to show here.

pkgs/applications/misc/audio/sox/default.nix+64−39

This diff is too big to show here.

pkgs/applications/misc/audio/soxr/default.nix+13−10

This diff is too big to show here.

pkgs/applications/misc/audio/wavesurfer/default.nix−29

This diff is too big to show here.

pkgs/applications/misc/audio/wavrsocvt/default.nix+11−10

This diff is too big to show here.

pkgs/applications/misc/ausweisapp2/default.nix+2−2

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/auto-multiple-choice/default.nix+164

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/avizo/default.nix+37

This diff is too big to show here.

pkgs/applications/misc/avrdudess/default.nix+6−4

This diff is too big to show here.

pkgs/applications/misc/azuredatastudio/default.nix+62−5

This diff is too big to show here.

pkgs/applications/misc/barrier/default.nix+14−3

This diff is too big to show here.

pkgs/applications/misc/batsignal/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/bemenu/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/bicon/default.nix+1−1

This diff is too big to show here.

pkgs/applications/misc/bikeshed/default.nix+77

This diff is too big to show here.

pkgs/applications/misc/binance/default.nix+55

This diff is too big to show here.

pkgs/applications/misc/bklk/default.nix+2

This diff is too big to show here.

pkgs/applications/misc/bleachbit/default.nix+5−4

This diff is too big to show here.