git.iko.soy/typeable/nixpkgs
on master help sign in
5402 files changed+189199−168787
since splitsnapshots
unifiedsplit
.editorconfig+5 .github/CODEOWNERS+8−4 .github/workflows/basic-eval.yml+10−9 .github/workflows/editorconfig.yml+1−1 .github/workflows/manual-nixos.yml+1−1 .github/workflows/manual-nixpkgs.yml+1−1 .github/workflows/nixos-manual.yml+1−1 .github/workflows/update-terraform-providers.yml+7−6 CONTRIBUTING.md+42−1 doc/builders/fetchers.chapter.md+12−12 doc/builders/images/dockertools.section.md+8−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+4−4 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/linux.section.md+7−7 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.xml−1 doc/builders/special/invalidateFetcherByDrvHash.section.md−31 doc/builders/testers.chapter.md+82 doc/builders/trivial-builders.chapter.md+3−3 doc/contributing/coding-conventions.chapter.md+5−5 doc/contributing/submitting-changes.chapter.md+1−1 doc/hooks/index.xml+10 doc/hooks/postgresql-test-hook.section.md+59 doc/languages-frameworks/chicken.section.md+49 doc/languages-frameworks/cuda.section.md+34 doc/languages-frameworks/gnome.section.md+16−2 doc/languages-frameworks/go.section.md+5−1 doc/languages-frameworks/index.xml+2 doc/manual.xml+2 doc/stdenv/cross-compilation.chapter.md+35−10 doc/stdenv/meta.chapter.md+34 doc/stdenv/stdenv.chapter.md+56−2 doc/using/overrides.chapter.md+6−2 lib/customisation.nix+49−2 lib/default.nix+7−2 lib/flakes.nix+22 lib/generators.nix+47−2 lib/meta.nix+14 lib/modules.nix+97−4 lib/strings.nix+196−5 lib/systems/doubles.nix+2 lib/systems/inspect.nix+3 lib/systems/platforms.nix+3−3 lib/tests/flakes/subflakeTest/flake.nix+8 lib/tests/flakes/subflakeTest/subflake/flake.nix+5 lib/tests/misc.nix+277−1 lib/tests/modules.sh+5−1 lib/tests/modules/extendModules-168767-imports.nix+41 lib/tests/systems.nix+3 lib/types.nix+8−2 maintainers/maintainer-list.nix+253−38 maintainers/scripts/dep-licenses.sh+1−1 maintainers/scripts/feature-freeze-teams.pl+98 maintainers/scripts/haskell/merge-and-open-pr.sh+1−1 maintainers/scripts/luarocks-packages.csv+2−1 maintainers/scripts/pluginupdate.py+135−108 maintainers/team-list.nix+350 nixos/doc/manual/administration/declarative-containers.section.md+1−1 nixos/doc/manual/administration/imperative-containers.section.md+2−2 nixos/doc/manual/default.nix+4 nixos/doc/manual/development/development.xml−1 nixos/doc/manual/development/settings-options.section.md+14 nixos/doc/manual/development/writing-nixos-tests.section.md+25−14 nixos/doc/manual/from_md/administration/declarative-containers.section.xml+2−2 nixos/doc/manual/from_md/administration/imperative-containers.section.xml+3−2 nixos/doc/manual/from_md/development/settings-options.section.xml+32 nixos/doc/manual/from_md/development/writing-nixos-tests.section.xml+53−35 nixos/doc/manual/from_md/development/building-nixos.chapter.xml → nixos/doc/manual/from_md/installation/building-nixos.chapter.xml+34 nixos/doc/manual/from_md/installation/installing-usb.section.xml+1−1 nixos/doc/manual/from_md/installation/installing.chapter.xml+7−7 nixos/doc/manual/from_md/release-notes/rl-1803.section.xml+8 nixos/doc/manual/from_md/release-notes/rl-2205.section.xml+686−7 nixos/doc/manual/development/building-nixos.chapter.md → nixos/doc/manual/installation/building-nixos.chapter.md+31 nixos/doc/manual/installation/installation.xml+1 nixos/doc/manual/installation/installing-usb.section.md+1−1 nixos/doc/manual/installation/installing.chapter.md+5−5 nixos/doc/manual/man-nixos-rebuild.xml+8 nixos/doc/manual/md-to-db.sh+1−1 nixos/doc/manual/release-notes/rl-1803.section.md+2 nixos/doc/manual/release-notes/rl-2205.section.md+260−3 nixos/lib/make-disk-image.nix+1 nixos/lib/make-zfs-image.nix → nixos/lib/make-multi-disk-zfs-image.nix nixos/lib/make-options-doc/mergeJSON.py+3−1 nixos/lib/make-single-disk-zfs-image.nix+322 nixos/lib/qemu-common.nix+2−2 nixos/lib/systemd-lib.nix+34−50 nixos/lib/systemd-types.nix+69 nixos/lib/systemd-unit-options.nix+560−401 nixos/lib/test-driver/test_driver/driver.py+1−1 nixos/lib/test-driver/test_driver/logger.py+6−2 nixos/lib/test-driver/test_driver/machine.py+9−2 nixos/lib/utils.nix+17 nixos/maintainers/scripts/ec2/amazon-image.nix+1−1 nixos/maintainers/scripts/lxd/lxd-image.nix+1−1 nixos/maintainers/scripts/openstack/openstack-image-zfs.nix+101 nixos/maintainers/scripts/openstack/openstack-image.nix+9−8 nixos/modules/config/console.nix+23−9 nixos/modules/config/nsswitch.nix+7−4 nixos/modules/config/terminfo.nix+25−1 nixos/modules/hardware/all-firmware.nix+7−3 nixos/modules/hardware/raid/hpsa.nix+4−1 nixos/modules/hardware/video/amdgpu-pro.nix+2−1 nixos/modules/hardware/video/nvidia.nix+9−7 nixos/modules/hardware/video/webcam/facetimehd.nix+14−6 nixos/modules/i18n/input-method/fcitx5.nix+20−11 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+1−3 nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix+1−3 nixos/modules/installer/cd-dvd/system-tarball-sheevaplug.nix+3−3 nixos/modules/installer/kexec/kexec-boot.nix+51 nixos/modules/installer/sd-card/sd-image-aarch64.nix+9 nixos/modules/installer/tools/nix-fallback-paths.nix+5−5 nixos/modules/installer/tools/tools.nix+5 nixos/modules/misc/documentation.nix+2−1 nixos/modules/misc/locate.nix+1−1 nixos/modules/misc/version.nix+26−14 nixos/modules/module-list.nix+18−3 nixos/modules/profiles/all-hardware.nix+3 nixos/modules/profiles/installation-device.nix+4 nixos/modules/profiles/qemu-guest.nix+2−2 nixos/modules/programs/adb.nix+1−2 nixos/modules/programs/chromium.nix+3 nixos/modules/programs/k3b.nix+52 nixos/modules/programs/mininet.nix+2−2 nixos/modules/programs/nethoscope.nix+30 nixos/modules/programs/ssh.nix+18−7 nixos/modules/programs/ssmtp.nix−190 nixos/modules/programs/thefuck.nix+7−6 nixos/modules/rename.nix+6 nixos/modules/security/pam.nix+113−3 nixos/modules/security/pam_mount.nix+78−6 nixos/modules/security/sudo.nix+1−1 nixos/modules/services/audio/snapserver.nix+15−7 nixos/modules/services/continuous-integration/github-runner.nix+10 nixos/modules/services/continuous-integration/gitlab-runner.nix+9−2 nixos/modules/services/continuous-integration/jenkins/slave.nix+15−1 nixos/modules/services/databases/cockroachdb.nix+37−29 nixos/modules/services/databases/couchdb.nix+6 nixos/modules/services/desktops/pipewire/daemon/pipewire-pulse.conf.json+9−8 nixos/modules/services/desktops/pipewire/pipewire-media-session.nix+4−4 nixos/modules/services/development/jupyter/default.nix+1 nixos/modules/services/editors/haste.nix+86 nixos/modules/services/hardware/udev.nix+125−23 nixos/modules/services/hardware/udisks2.nix+39 nixos/modules/services/hardware/usbrelayd.nix+44 nixos/modules/services/logging/klogd.nix+6−35 nixos/modules/services/logging/logrotate.nix+251−27 nixos/modules/services/mail/mailman.nix+14−7 nixos/modules/services/mail/postfix.nix+22−17 nixos/modules/services/matrix/matrix-synapse.nix+1−1 nixos/modules/services/misc/dendrite.nix+1 nixos/modules/services/misc/etebase-server.nix+1−1 nixos/modules/services/misc/ethminer.nix+4−4 nixos/modules/services/misc/gitea.nix+11−16 nixos/modules/services/misc/gitit.nix+1−1 nixos/modules/services/misc/gitlab.nix+9−11 nixos/modules/services/misc/nix-daemon.nix+8 nixos/modules/services/misc/paperless-ng.nix → nixos/modules/services/misc/paperless.nix+49−51 nixos/modules/services/misc/sourcehut/default.nix+1−1 nixos/modules/services/misc/taskserver/default.nix+10−6 nixos/modules/services/misc/taskserver/helper-tool.py+5−5 nixos/modules/services/misc/zookeeper.nix+8−1 nixos/modules/services/monitoring/collectd.nix+30−26 nixos/modules/services/monitoring/mimir.nix+63 nixos/modules/services/monitoring/nagios.nix+2−2 nixos/modules/services/monitoring/prometheus/default.nix+2−9 nixos/modules/services/monitoring/prometheus/exporters.xml+21 nixos/modules/services/monitoring/prometheus/exporters/bird.nix+1−1 nixos/modules/services/network-filesystems/ipfs.nix+16−10 nixos/modules/services/networking/asterisk.nix+11−43 nixos/modules/services/networking/bird.nix+1−2 nixos/modules/services/networking/cloudflare-dyndns.nix+93 nixos/modules/services/networking/consul.nix+32−6 nixos/modules/services/networking/create_ap.nix+50 nixos/modules/services/networking/envoy.nix+84 nixos/modules/services/networking/headscale.nix+1−1 nixos/modules/services/networking/kea.nix+74−8 nixos/modules/services/networking/lxd-image-server.nix+7−11 nixos/modules/services/networking/mozillavpn.nix+19 nixos/modules/services/networking/nbd.nix+28−15 nixos/modules/services/networking/ncdns.nix+2−2 nixos/modules/services/networking/networkmanager.nix+56−53 nixos/modules/services/networking/openconnect.nix+137 nixos/modules/services/networking/openfire.nix−56 nixos/modules/services/networking/pdns-recursor.nix+12−7 nixos/modules/services/networking/prosody.nix+1 nixos/modules/services/networking/shellhub-agent.nix+26−17 nixos/modules/services/networking/ssh/sshd.nix+1 nixos/modules/services/networking/supplicant.nix+1−1 nixos/modules/services/networking/syncplay.nix+17−1 nixos/modules/services/networking/tailscale.nix+9−1 nixos/modules/services/networking/zeronet.nix+1−1 nixos/modules/services/security/oauth2_proxy.nix+3 nixos/modules/services/system/nscd.nix+17−8 nixos/modules/services/ttys/kmscon.nix+24−5 nixos/modules/services/web-apps/atlassian/jira.nix+1 nixos/modules/services/web-apps/discourse.nix+9−3 nixos/modules/services/web-apps/galene.nix+29 nixos/modules/services/web-apps/keycloak.nix+360−514 nixos/modules/services/web-apps/keycloak.xml+61−81 nixos/modules/services/web-apps/nextcloud.nix+75 nixos/modules/services/web-apps/nifi.nix+318 nixos/modules/services/web-servers/apache-httpd/default.nix+8−13 nixos/modules/services/web-servers/hydron.nix+1−1 nixos/modules/services/web-servers/nginx/default.nix+25−21 nixos/modules/services/web-servers/nginx/vhost-options.nix+12−3 nixos/modules/services/x11/desktop-managers/cinnamon.nix+3−3 nixos/modules/services/x11/desktop-managers/enlightenment.nix+5 nixos/modules/services/x11/desktop-managers/gnome.nix+33−10 nixos/modules/services/x11/desktop-managers/lumina.nix+4 nixos/modules/services/x11/desktop-managers/lxqt.nix+11−2 nixos/modules/services/x11/desktop-managers/mate.nix+5−32 nixos/modules/services/x11/desktop-managers/none.nix+44−5 nixos/modules/services/x11/desktop-managers/pantheon.nix+4−3 nixos/modules/services/x11/desktop-managers/pantheon.xml+3−3 nixos/modules/services/x11/desktop-managers/xfce.nix+8−1 nixos/modules/services/x11/window-managers/qtile.nix+11−4 nixos/modules/services/x11/xserver.nix+10−3 nixos/modules/system/activation/switch-to-configuration.pl+12 nixos/modules/system/activation/top-level.nix+12−5 nixos/modules/system/boot/loader/grub/grub.nix+26 nixos/modules/system/boot/loader/grub/install-grub.pl+5−3 nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix+1−1 nixos/modules/system/boot/luksroot.nix+74−7 nixos/modules/system/boot/networkd.nix+191−2 nixos/modules/system/boot/stage-1-init.sh+3−6 nixos/modules/system/boot/stage-1.nix+33−14 nixos/modules/system/boot/stage-2-init.sh+66−94 nixos/modules/system/boot/systemd.nix+25−44 nixos/modules/system/boot/systemd/initrd-secrets.nix+36 nixos/modules/system/boot/systemd/initrd.nix+502 nixos/modules/system/boot/systemd/nspawn.nix+7−1 nixos/modules/system/boot/systemd/shutdown.nix+58 nixos/modules/system/boot/systemd/tmpfiles.nix+16 nixos/modules/system/boot/systemd/user.nix+13−18 nixos/modules/system/boot/timesyncd.nix+17−5 nixos/modules/tasks/auto-upgrade.nix+32−7 nixos/modules/tasks/bcache.nix+16−6 nixos/modules/tasks/filesystems.nix+1−1 nixos/modules/tasks/filesystems/btrfs.nix+3−3 nixos/modules/tasks/filesystems/cifs.nix+1−1 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/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+9−33 nixos/modules/tasks/lvm.nix+55−6 nixos/modules/tasks/network-interfaces.nix+11−10 nixos/modules/tasks/swraid.nix+35−9 nixos/modules/testing/test-instrumentation.nix+19−26 nixos/modules/virtualisation/azure-agent.nix+5−9 nixos/modules/virtualisation/azure-common.nix+5−1 nixos/modules/virtualisation/libvirtd.nix+4 nixos/modules/virtualisation/nixos-containers.nix+26−11 nixos/modules/virtualisation/oci-containers.nix+1−5 nixos/modules/virtualisation/openstack-config.nix+39−7 nixos/modules/virtualisation/openstack-metadata-fetcher.nix+3−3 nixos/modules/virtualisation/openstack-options.nix+71 nixos/modules/virtualisation/podman/default.nix+4−1 nixos/modules/virtualisation/qemu-vm.nix+38−5 nixos/modules/virtualisation/vmware-host.nix+166 nixos/release-combined.nix+2 nixos/release.nix+2−2 nixos/tests/all-terminfo.nix+31 nixos/tests/all-tests.nix+23−3 nixos/tests/atop.nix−8 nixos/tests/bcachefs.nix+1−1 nixos/tests/boot.nix+3−3 nixos/tests/collectd.nix+6−1 nixos/tests/common/lxd/config.yaml+24 nixos/tests/containers-ephemeral.nix+3−3 nixos/tests/containers-imperative.nix+6−6 nixos/tests/containers-tmpfs.nix+5−5 nixos/tests/custom-ca.nix+104−90 nixos/tests/docker-tools-cross.nix+2−2 nixos/tests/docker-tools.nix+1−1 nixos/tests/emacs-daemon.nix+1−1 nixos/tests/envoy.nix+33 nixos/tests/fenics.nix+1−1 nixos/tests/gitlab.nix+300−21 nixos/tests/haste-server.nix+23 nixos/tests/hbase.nix+30 nixos/tests/hibernate.nix+12−1 nixos/tests/installer-systemd-stage-1.nix+33 nixos/tests/installer.nix+15−1 nixos/tests/jenkins.nix+2 nixos/tests/kexec.nix+44−16 nixos/tests/keycloak.nix+15−11 nixos/tests/logrotate.nix+125−10 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+15−48 nixos/tests/lxd-image.nix−89 nixos/tests/lxd.nix+40−63 nixos/tests/maestral.nix+72 nixos/tests/mailcatcher.nix+7−2 nixos/tests/matrix-appservice-irc.nix+3 nixos/tests/mongodb.nix+4 nixos/tests/mtp.nix+109 nixos/tests/nar-serve.nix+1−1 nixos/tests/nbd.nix+16 nixos/tests/ncdns.nix+6−9 nixos/tests/networking.nix+1−1 nixos/tests/nextcloud/with-mysql-and-memcached.nix+1−22 nixos/tests/nixops/default.nix+1−1 nixos/tests/openssh.nix+12−6 nixos/tests/pam/pam-oath-login.nix+1−1 nixos/tests/pam/pam-ussh.nix+70 nixos/tests/paperless-ng.nix → nixos/tests/paperless.nix+11−12 nixos/tests/pdns-recursor.nix+4−1 nixos/tests/pgadmin4.nix+37−47 nixos/tests/snapcast.nix+1 nixos/tests/step-ca.nix+1 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-networkd.nix+10 nixos/tests/systemd-shutdown.nix+26 nixos/tests/taskserver.nix+1 nixos/tests/vaultwarden.nix−1 nixos/tests/web-apps/netbox.nix+1−1 nixos/tests/web-apps/nifi.nix+30 nixos/tests/web-apps/peertube.nix+3−2 nixos/tests/xmonad-xdg-autostart.nix+35 nixos/tests/xmpp/xmpp-sendmessage.nix+1−4 nixos/tests/zfs.nix+50 pkgs/applications/accessibility/espeakup/default.nix+46 pkgs/applications/accessibility/wvkbd/default.nix+36 pkgs/applications/audio/ChowPhaser/default.nix+76 pkgs/applications/audio/LibreArp/default.nix+53 pkgs/applications/audio/LibreArp/lv2.nix+53 pkgs/applications/audio/amberol/default.nix+75 pkgs/applications/audio/audacity/0001-Use-a-different-approach-to-estimate-the-disk-space-.patch−355 pkgs/applications/audio/audacity/default.nix+58−35 pkgs/applications/audio/audio-recorder/default.nix+1−1 pkgs/applications/audio/bespokesynth/default.nix+1 pkgs/applications/audio/bitwig-studio/bitwig-studio4.nix+2−2 pkgs/applications/audio/blanket/default.nix+7−7 pkgs/applications/audio/callaudiod/default.nix+2−2 pkgs/applications/audio/cardinal/default.nix+2−11 pkgs/applications/audio/carla/default.nix+2−2 pkgs/applications/audio/caudec/default.nix+2−2 pkgs/applications/audio/cider/default.nix+3−3 pkgs/applications/audio/clementine/default.nix+3−10 pkgs/applications/audio/cmus/default.nix+2−2 pkgs/applications/audio/denemo/default.nix+2−2 pkgs/applications/audio/dragonfly-reverb/default.nix+2−2 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+2−2 pkgs/applications/audio/foo-yc20/default.nix−29 pkgs/applications/audio/ft2-clone/default.nix+2−2 pkgs/applications/audio/furnace/default.nix+2−2 pkgs/applications/audio/greg/default.nix+3−3 pkgs/applications/audio/gspeech/default.nix+2−2 pkgs/applications/audio/guitarix/default.nix+2 pkgs/applications/audio/helio-workstation/default.nix+2−2 pkgs/applications/audio/hivelytracker/default.nix+1−1 pkgs/applications/audio/hqplayer-desktop/default.nix+1 pkgs/applications/audio/jacktrip/default.nix+61 pkgs/applications/audio/jamesdsp/default.nix+40−5 pkgs/applications/audio/jmusicbot/default.nix+2−2 pkgs/applications/audio/libopenmpt/default.nix−42 pkgs/applications/audio/lollypop/default.nix+2−2 pkgs/applications/audio/losslessaudiochecker/default.nix+1−1 pkgs/applications/audio/lyrebird/default.nix+1−1 pkgs/applications/audio/moc/default.nix+5−3 pkgs/applications/audio/mopidy/mopidy.nix+3−3 pkgs/applications/audio/musikcube/default.nix+5−3 pkgs/applications/audio/ncspot/default.nix+3−7 pkgs/applications/audio/ncspot/rust_1_57_support.patch−21 pkgs/applications/audio/noise-repellent/default.nix+11−9 pkgs/applications/audio/ocenaudio/default.nix+2−2 pkgs/applications/audio/odin2/default.nix+79 pkgs/applications/audio/osdlyrics/default.nix+87 pkgs/applications/audio/parlatype/default.nix−66 pkgs/applications/audio/pianobar/default.nix+2−2 pkgs/applications/audio/pipecontrol/default.nix+50 pkgs/applications/audio/plexamp/default.nix+3−3 pkgs/applications/audio/praat/default.nix+2−2 pkgs/applications/audio/pt2-clone/default.nix+2−2 pkgs/applications/audio/puddletag/default.nix+1 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+3−3 pkgs/applications/audio/qpwgraph/default.nix+3−3 pkgs/applications/audio/sfizz/default.nix+6−1 pkgs/applications/audio/sfxr-qt/default.nix+7 pkgs/applications/audio/shortwave/default.nix+9−12 pkgs/applications/audio/sonic-pi/default.nix+1−1 pkgs/applications/audio/sonixd/default.nix+27 pkgs/applications/audio/soundwireserver/default.nix+1 pkgs/applications/audio/spot/default.nix+3−3 pkgs/applications/audio/spotify-tui/default.nix+1 pkgs/applications/audio/spotify/default.nix+5−5 pkgs/applications/audio/strawberry/default.nix+1 pkgs/applications/audio/viper4linux-gui/default.nix+82 pkgs/applications/audio/viper4linux/default.nix+61 pkgs/applications/audio/whipper/default.nix+8 pkgs/applications/audio/x42-plugins/default.nix+2−2 pkgs/applications/blockchains/alfis/default.nix+3−3 pkgs/applications/blockchains/bisq-desktop/default.nix+1−2 pkgs/applications/blockchains/bitcoin/default.nix+2−2 pkgs/applications/blockchains/btcpayserver/default.nix+2−2 pkgs/applications/blockchains/btcpayserver/deps.nix+29−29 pkgs/applications/blockchains/chia-plotter/default.nix+13−6 pkgs/applications/blockchains/chia-plotter/dont_fetch_dependencies.patch+24−11 pkgs/applications/blockchains/clightning/default.nix+2−2 pkgs/applications/blockchains/electrs/default.nix+3−3 pkgs/applications/blockchains/go-ethereum/default.nix+3−3 pkgs/applications/blockchains/ledger-live-desktop/default.nix+2−2 pkgs/applications/blockchains/lightning-loop/default.nix+3−3 pkgs/applications/blockchains/lnd/default.nix+2−2 pkgs/applications/blockchains/lndmanage/default.nix+2−2 pkgs/applications/blockchains/monero-cli/default.nix+2−2 pkgs/applications/blockchains/monero-gui/default.nix+2−2 pkgs/applications/blockchains/namecoin/default.nix+5−6 pkgs/applications/blockchains/nbxplorer/default.nix+2−2 pkgs/applications/blockchains/nbxplorer/deps.nix+15 pkgs/applications/blockchains/nearcore/default.nix+42 pkgs/applications/blockchains/openethereum/default.nix+3−3 pkgs/applications/blockchains/polkadot/default.nix+2−1 pkgs/applications/blockchains/snarkos/default.nix+1−1 pkgs/applications/blockchains/solana/default.nix+10−5 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/wasabibackend/default.nix+1−1 pkgs/applications/blockchains/zcash/default.nix+6−6 pkgs/applications/editors/android-studio/common.nix+5−3 pkgs/applications/editors/android-studio/default.nix+8−7 pkgs/applications/editors/apostrophe/default.nix+2−2 pkgs/applications/editors/bluej/default.nix+35−8 pkgs/applications/editors/cudatext/default.nix+2−2 pkgs/applications/editors/cudatext/deps.json+12−12 pkgs/applications/editors/eclipse/default.nix+13−13 pkgs/applications/editors/eclipse/plugins.nix+2−2 pkgs/applications/editors/emacs/27.nix−11 pkgs/applications/editors/emacs/28.nix+5 pkgs/applications/editors/emacs/at-fdcwd.patch−15 pkgs/applications/editors/emacs/elisp-packages/cedet/default.nix−52 pkgs/applications/editors/emacs/elisp-packages/control-lock/default.nix+23 pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix+124−45 pkgs/applications/editors/emacs/elisp-packages/ement/default.nix+11−3 pkgs/applications/editors/emacs/elisp-packages/header-file-mode/default.nix+30 pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix+7−1 pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix+7 pkgs/applications/editors/emacs/elisp-packages/nongnu-generated.nix+26−32 pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json+2254−1744 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-manual+7 pkgs/applications/editors/emacs/elisp-packages/update-manual.nix+11 pkgs/applications/editors/emacs/generic.nix+9−5 pkgs/applications/editors/gnome-builder/default.nix+2−13 pkgs/applications/editors/helix/default.nix+13−10 pkgs/applications/editors/jetbrains/default.nix+20−17 pkgs/applications/editors/jetbrains/update.py+17−14 pkgs/applications/editors/jetbrains/versions.json+132−132 pkgs/applications/editors/jucipp/default.nix+1−2 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/plugins/default.nix+1−1 pkgs/applications/editors/kakoune/plugins/kakoune-plugin-names+20−19 pkgs/applications/editors/kodestudio/default.nix+1−1 pkgs/applications/editors/lapce/default.nix+23−7 pkgs/applications/editors/lapce/fix-version.patch−31 pkgs/applications/editors/lifeograph/default.nix+5−5 pkgs/applications/editors/marker/default.nix+4−1 pkgs/applications/editors/mg/default.nix+4 pkgs/applications/editors/mle/default.nix+11−1 pkgs/applications/editors/neovim/default.nix+2−2 pkgs/applications/editors/neovim/neovide/default.nix+6−6 pkgs/applications/editors/neovim/ruby_provider/Gemfile.lock+2−2 pkgs/applications/editors/neovim/ruby_provider/gemset.nix+5−5 pkgs/applications/editors/oed/default.nix+9 pkgs/applications/editors/okteta/default.nix+2 pkgs/applications/editors/oni2/common.nix−1 pkgs/applications/editors/pinegrow/default.nix+11−6 pkgs/applications/editors/poke/default.nix+2−2 pkgs/applications/editors/rstudio/default.nix+1−1 pkgs/applications/editors/setzer/default.nix+2−2 pkgs/applications/editors/sublime/3/common.nix+1−1 pkgs/applications/editors/texmaker/default.nix+2−2 pkgs/applications/editors/texstudio/default.nix+2−2 pkgs/applications/editors/tiled/default.nix+2−2 pkgs/applications/editors/vim/common.nix+2−2 pkgs/applications/editors/vim/plugins/build-vim-plugin.nix+2 pkgs/applications/editors/vim/plugins/default.nix+8−3 pkgs/applications/editors/vim/plugins/generated.nix+1344−1308 pkgs/applications/editors/vim/plugins/overrides.nix+5−6 pkgs/applications/editors/vim/plugins/update.py+47−16 pkgs/applications/editors/vim/plugins/vim-command-check-hook.sh+25 pkgs/applications/editors/vim/plugins/vim-plugin-names+1014−1010 pkgs/applications/editors/vim/plugins/vim-utils.nix+18−2 pkgs/applications/editors/vscode/extensions/default.nix+27−15 pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/default.nix+1−1 pkgs/applications/editors/vscode/extensions/ms-vsliveshare-vsliveshare/default.nix−1 pkgs/applications/editors/vscode/extensions/remote-ssh/default.nix+2−2 pkgs/applications/editors/vscode/generic.nix+9−3 pkgs/applications/editors/vscode/update-vscodium.sh+16−12 pkgs/applications/editors/vscode/vscode.nix+6−6 pkgs/applications/editors/vscode/vscodium.nix+10−13 pkgs/applications/editors/xedit/default.nix+2−2 pkgs/applications/emulators/basiliskii/default.nix+28 pkgs/applications/emulators/basiliskii/remove-redhat-6-workaround-for-scsi-sg.h.patch+10 pkgs/applications/emulators/ares/default.nix → pkgs/applications/emulators/bsnes/ares/default.nix pkgs/applications/emulators/ares/fix-ruby.patch → pkgs/applications/emulators/bsnes/ares/fix-ruby.patch pkgs/applications/emulators/bsnes-hd/default.nix → pkgs/applications/emulators/bsnes/bsnes-hd/default.nix pkgs/applications/emulators/bsnes-hd/macos-copy-app-to-prefix.patch → pkgs/applications/emulators/bsnes/bsnes-hd/macos-copy-app-to-prefix.patch pkgs/applications/emulators/bsnes-hd/macos-replace-sips-with-png2icns.patch → pkgs/applications/emulators/bsnes/bsnes-hd/macos-replace-sips-with-png2icns.patch pkgs/applications/emulators/higan/001-include-cmath.patch → pkgs/applications/emulators/bsnes/higan/001-include-cmath.patch pkgs/applications/emulators/higan/002-sips-to-png2icns.patch → pkgs/applications/emulators/bsnes/higan/002-sips-to-png2icns.patch pkgs/applications/emulators/higan/default.nix → pkgs/applications/emulators/bsnes/higan/default.nix pkgs/applications/emulators/commanderx16/emulator.nix+7−5 pkgs/applications/emulators/commanderx16/rom.nix+12−6 pkgs/applications/emulators/dolphin-emu/master.nix+4−4 pkgs/applications/emulators/dolphin-emu/primehack.nix+2−2 pkgs/applications/emulators/epsxe/default.nix−52 pkgs/applications/emulators/fakenes/build.patch−84 pkgs/applications/emulators/fakenes/default.nix−34 pkgs/applications/emulators/flycast/default.nix+2−2 pkgs/applications/emulators/mame/0001-Revert-Added-PDF-documentation-to-dist.mak.patch+37 pkgs/applications/emulators/mame/default.nix+64−14 pkgs/applications/emulators/proton-caller/default.nix+4−3 pkgs/applications/emulators/qmc2/default.nix−41 pkgs/applications/emulators/retroarch/cores.nix+16−43 pkgs/applications/emulators/retroarch/default.nix+25−8 pkgs/applications/emulators/retroarch/disable-menu-show-core-updater.patch−13 pkgs/applications/emulators/retroarch/0001-Disable-menu_show_core_updater.patch → pkgs/applications/emulators/retroarch/disable-menu_show_core_updater.patch+1−1 pkgs/applications/emulators/retroarch/hashes.json+139−150 pkgs/applications/emulators/retroarch/update.py → pkgs/applications/emulators/retroarch/update_cores.py+7−13 pkgs/applications/emulators/retroarch/0002-Use-fixed-paths-on-libretro_info_path.patch → pkgs/applications/emulators/retroarch/use-fixed-paths-on-libretro_info_path.patch+21−17 pkgs/applications/emulators/retroarch/wrapper.nix+10−6 pkgs/applications/emulators/ripes/default.nix+50 pkgs/applications/emulators/ryujinx/default.nix+7−3 pkgs/applications/emulators/ryujinx/deps.nix+9−10 pkgs/applications/emulators/ryujinx/updater.sh+51−24 pkgs/applications/emulators/snes9x-gtk/default.nix−37 pkgs/applications/emulators/snes9x/default.nix+130 pkgs/applications/emulators/tinyemu/default.nix+6−1 pkgs/applications/emulators/yuzu/base.nix−86 pkgs/applications/emulators/yuzu/compatibility-list.json+1 pkgs/applications/emulators/yuzu/default.nix+22−10 pkgs/applications/emulators/yuzu/generic.nix+157 pkgs/applications/emulators/yuzu/update.sh+102 pkgs/applications/emulators/zesarux/default.nix+8 pkgs/applications/finance/cryptowatch/default.nix+57 pkgs/applications/finance/irpf/default.nix+10−3 pkgs/applications/gis/grass/default.nix+10−36 pkgs/applications/gis/qgis/unwrapped-ltr.nix+2−2 pkgs/applications/gis/qgis/unwrapped.nix+2−2 pkgs/applications/graphics/ImageMagick/6.x.nix+1−1 pkgs/applications/graphics/ImageMagick/7.0.nix+6−11 pkgs/applications/graphics/apitrace/default.nix+6 pkgs/applications/graphics/apitrace/glibc-2.34-compat.patch+13 pkgs/applications/graphics/awesomebump/default.nix+1−1 pkgs/applications/graphics/cloudcompare/default.nix+47−12 pkgs/applications/graphics/cq-editor/default.nix+1−1 pkgs/applications/graphics/darktable/default.nix+2 pkgs/applications/graphics/digikam/default.nix+14−3 pkgs/applications/graphics/drawing/default.nix+13−2 pkgs/applications/graphics/drawio/default.nix+2−2 pkgs/applications/graphics/foxotron/default.nix+1−1 pkgs/applications/graphics/geeqie/default.nix+4−4 pkgs/applications/graphics/gimp/plugins/default.nix+40−1 pkgs/applications/graphics/graphicsmagick/default.nix+2−2 pkgs/applications/graphics/gscan2pdf/default.nix+2−4 pkgs/applications/graphics/gthumb/default.nix+2−2 pkgs/applications/graphics/hydrus/default.nix+3−3 pkgs/applications/graphics/imgbrd-grabber/default.nix+1−1 pkgs/applications/graphics/inkscape/default.nix+1 pkgs/applications/graphics/jpegrescan/default.nix+5−1 pkgs/applications/graphics/mypaint/default.nix+10 pkgs/applications/graphics/ocrfeeder/default.nix+5−8 pkgs/applications/graphics/openboard/default.nix+3−4 pkgs/applications/graphics/openscad/default.nix+4 pkgs/applications/graphics/ovito/default.nix+2−2 pkgs/applications/graphics/photivo/default.nix−54 pkgs/applications/graphics/photivo/gcc6.patch−13 pkgs/applications/graphics/pixeluvo/default.nix+1 pkgs/applications/graphics/rawtherapee/default.nix+3 pkgs/applications/graphics/rawtherapee/fix-6324.patch+356 pkgs/applications/graphics/rnote/default.nix+5−3 pkgs/applications/graphics/sane/backends/brscan4/default.nix+2−2 pkgs/applications/graphics/sane/backends/brscan5/default.nix+2−2 pkgs/applications/graphics/shotwell/default.nix+2−2 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+15−3 pkgs/applications/graphics/tesseract/tesseract5.nix+39 pkgs/applications/graphics/tesseract/wrapper.nix+29−3 pkgs/applications/graphics/unigine-sanctuary/default.nix+97 pkgs/applications/graphics/unigine-tropics/default.nix+95 pkgs/applications/graphics/unigine-valley/default.nix+120−99 pkgs/applications/graphics/yed/default.nix+2−2 pkgs/applications/kde/default.nix+4−1 pkgs/applications/networking/browsers/falkon/default.nix → pkgs/applications/kde/falkon.nix+4−13 pkgs/applications/kde/fetch.sh+1−1 pkgs/applications/kde/kaddressbook.nix+4 pkgs/applications/kde/kalarm.nix+2−2 pkgs/applications/kde/kalarmcal.nix−19 pkgs/applications/office/kalendar/default.nix → pkgs/applications/kde/kalendar.nix+1−10 pkgs/applications/kde/kdegraphics-thumbnailers.nix+2−2 pkgs/applications/kde/kdepim-addons.nix+2−2 pkgs/applications/kde/kdepim-runtime/default.nix+2−2 pkgs/applications/kde/kitinerary.nix+1−10 pkgs/applications/kde/kmousetool.nix+35 pkgs/applications/kde/picmi.nix+1−11 pkgs/applications/kde/pimcommon.nix+2−2 pkgs/applications/graphics/skanpage/default.nix → pkgs/applications/kde/skanpage.nix+3−7 pkgs/applications/kde/srcs.nix+937−921 pkgs/applications/kde/yakuake.nix+2 pkgs/applications/logging/sosreport/default.nix+51 pkgs/applications/misc/1password-gui/beta.nix+132 pkgs/applications/misc/1password-gui/default.nix+3−3 pkgs/applications/misc/1password/default.nix+5−5 pkgs/applications/misc/ArchiSteamFarm/default.nix+1 pkgs/applications/misc/ArchiSteamFarm/deps-aarch64-linux.nix+17−18 pkgs/applications/misc/ArchiSteamFarm/deps-x86_64-linux.nix+17−18 pkgs/applications/misc/HentaiAtHome/default.nix+1−1 pkgs/applications/misc/ablog/default.nix+2−2 pkgs/applications/misc/anytype/default.nix+2−2 pkgs/applications/misc/archivy/default.nix+9−3 pkgs/applications/misc/audio/wavesurfer/default.nix−30 pkgs/applications/misc/authy/default.nix+30−7 pkgs/applications/misc/autospotting/default.nix+1 pkgs/applications/misc/azuredatastudio/default.nix+3−3 pkgs/applications/misc/barrier/default.nix+12−1 pkgs/applications/misc/bikeshed/default.nix+77 pkgs/applications/misc/blender/default.nix+2−2 pkgs/applications/misc/bottles/default.nix+7−17 pkgs/applications/misc/bottles/update.py−65 pkgs/applications/misc/buku/default.nix+2−1 pkgs/applications/misc/calcoo/0001-javac-encoding.diff+21 pkgs/applications/misc/calcoo/default.nix+58 pkgs/applications/misc/calcurse/default.nix+4−3 pkgs/applications/misc/calibre/default.nix+5−1 pkgs/applications/misc/catclock/default.nix+1 pkgs/applications/misc/charm/default.nix+3−5 pkgs/applications/misc/copyq/default.nix+2−2 pkgs/applications/misc/cubiomes-viewer/default.nix+2−2 pkgs/applications/misc/dasel/default.nix+3−3 pkgs/applications/misc/dbeaver/default.nix+3−3 pkgs/applications/misc/debian-goodies/default.nix+70 pkgs/applications/misc/dunst/default.nix+2−2 pkgs/applications/misc/electrum-grs/default.nix+3−21 pkgs/applications/misc/evtest/default.nix+1−1 pkgs/applications/misc/faircamp/default.nix+4−4 pkgs/applications/misc/ff2mpv/default.nix+34 pkgs/applications/misc/firestarter/default.nix+3−1 pkgs/applications/misc/fluidd/default.nix+2−2 pkgs/applications/misc/foxitreader/default.nix+1 pkgs/applications/misc/fspy/default.nix+2−3 pkgs/applications/misc/gallery-dl/default.nix+2−2 pkgs/applications/misc/globe-cli/default.nix+1 pkgs/applications/misc/gnome-firmware-updater/default.nix−75 pkgs/applications/misc/gnome-firmware/default.nix+63 pkgs/applications/misc/gnome-secrets/default.nix+4−10 pkgs/applications/misc/gnome-solanum/default.nix+10 pkgs/applications/misc/gofu/default.nix+3−3 pkgs/applications/misc/gpsprune/default.nix+2−2 pkgs/applications/misc/gpxsee/default.nix+2−2 pkgs/applications/misc/gremlin-console/default.nix+2−2 pkgs/applications/misc/gsctl/default.nix+13−7 pkgs/applications/misc/hello/default.nix+11−9 pkgs/applications/misc/hello/test.nix+8 pkgs/applications/misc/hubstaff/default.nix+1−1 pkgs/applications/misc/hugo/default.nix+6−6 pkgs/applications/misc/index-fm/default.nix−2 pkgs/applications/misc/ipmiview/default.nix+3−3 pkgs/applications/misc/join-desktop/default.nix+73 pkgs/applications/misc/joplin-desktop/default.nix+3−3 pkgs/applications/misc/josm/default.nix+4−4 pkgs/applications/misc/k4dirstat/default.nix+2−2 pkgs/applications/misc/keylight-controller-mschneider82/default.nix+53 pkgs/applications/misc/kiln/default.nix+3−3 pkgs/applications/misc/kjv/default.nix+2−2 pkgs/applications/misc/kratos/default.nix+3−3 pkgs/applications/misc/libosmocore/default.nix+21−6 pkgs/applications/misc/lighthouse/default.nix−35 pkgs/applications/misc/lutris/default.nix+14−12 pkgs/applications/misc/lutris/fixes.patch−67 pkgs/applications/misc/marktext/default.nix+5−6 pkgs/applications/misc/masterpdfeditor/default.nix+2−2 pkgs/applications/misc/mediainfo/default.nix+2−2 pkgs/applications/misc/megacmd/default.nix+5−10 pkgs/applications/misc/megasync/default.nix+2−2 pkgs/applications/misc/mepo/default.nix+34−8 pkgs/applications/misc/metadata-cleaner/default.nix+2−2 pkgs/applications/misc/minigalaxy/default.nix+4 pkgs/applications/misc/mob/default.nix+2−2 pkgs/applications/misc/moonlight-qt/default.nix+2−2 pkgs/applications/misc/mop/default.nix+7−8 pkgs/applications/misc/mop/deps.nix−11 pkgs/applications/misc/multibootusb/default.nix+1−1 pkgs/applications/misc/nnn/default.nix+2−2 pkgs/applications/misc/notejot/default.nix+4−11 pkgs/applications/misc/nut/default.nix+2 pkgs/applications/misc/obsidian/default.nix+25−25 pkgs/applications/misc/octoprint/default.nix+7−245 pkgs/applications/misc/opencpn/default.nix+85−16 pkgs/applications/misc/organicmaps/default.nix+7−12 pkgs/applications/misc/osmscout-server/default.nix+3−24 pkgs/applications/misc/otpclient/default.nix+2−2 pkgs/applications/misc/p2pool/default.nix+2−2 pkgs/applications/misc/pdfslicer/default.nix+6 pkgs/applications/misc/pdfstudio/default.nix+4−4 pkgs/applications/misc/phwmon/default.nix+1−1 pkgs/applications/misc/polybar/default.nix+12−2 pkgs/applications/misc/polybar/remove-hardcoded-etc.diff+13 pkgs/applications/misc/portfolio-filemanager/default.nix+6−2 pkgs/applications/misc/prusa-slicer/default.nix+2−2 pkgs/applications/misc/prusa-slicer/super-slicer.nix+2−2 pkgs/applications/misc/pure-maps/default.nix+3−2 pkgs/applications/misc/pytrainer/default.nix+2−2 pkgs/applications/misc/ranger/default.nix+13−4 pkgs/applications/misc/rm-improved/default.nix+1 pkgs/applications/misc/sampler/default.nix+5−2 pkgs/applications/misc/seatd/default.nix+7−3 pkgs/applications/misc/sigal/default.nix+17−13 pkgs/applications/misc/sigi/default.nix+7−10 pkgs/applications/misc/sioyek/default.nix+56 pkgs/applications/misc/skate/default.nix+3−3 pkgs/applications/misc/skytemple/default.nix+5−2 pkgs/applications/misc/slides/default.nix+5−4 pkgs/applications/misc/solaar/default.nix+3−2 pkgs/applications/misc/sqls/default.nix+5−3 pkgs/applications/misc/stork/default.nix+3−3 pkgs/applications/misc/taskwarrior-tui/default.nix+3−3 pkgs/applications/misc/taskwarrior/default.nix+2−2 pkgs/applications/misc/terminal-typeracer/default.nix+1 pkgs/applications/misc/timewarrior/default.nix+1 pkgs/applications/misc/toipe/default.nix+20 pkgs/applications/misc/trenchbroom/default.nix+13 pkgs/applications/misc/tty-solitaire/default.nix+1 pkgs/applications/misc/tut/default.nix+2−2 pkgs/applications/misc/tvbrowser/bin.nix+1−1 pkgs/applications/misc/udiskie/default.nix+30−25 pkgs/applications/misc/udiskie/locale-path.patch+17 pkgs/applications/misc/upwork/default.nix+14−4 pkgs/applications/misc/veracrypt/default.nix+2−2 pkgs/applications/misc/vit/default.nix+3−5 pkgs/applications/misc/wlclock/default.nix+46 pkgs/applications/misc/xmrig/default.nix+2−2 pkgs/applications/misc/xmrig/moneroocean.nix+2−2 pkgs/applications/misc/xpdf/default.nix+2−2 pkgs/applications/misc/xplr/default.nix+3−3 pkgs/applications/misc/xteddy/default.nix+1−1 pkgs/applications/misc/ydict/default.nix+28 pkgs/applications/misc/zathura/core/default.nix+2−2 pkgs/applications/misc/zettlr/default.nix+2−2 pkgs/applications/misc/zola/default.nix+2−2 pkgs/applications/networking/alpnpass/default.nix+34 pkgs/applications/networking/appgate-sdp/default.nix+2−2 pkgs/applications/networking/bee/bee.nix+1−3 pkgs/applications/networking/browsers/brave/default.nix+72−53 pkgs/applications/networking/browsers/chromium/browser.nix+1−1 pkgs/applications/networking/browsers/chromium/common.nix+16−9 pkgs/applications/networking/browsers/chromium/default.nix+1−3 pkgs/applications/networking/browsers/chromium/get-commit-message.py+3−3 pkgs/applications/networking/browsers/chromium/upstream-info.json+30−30 pkgs/applications/networking/browsers/firefox-bin/devedition_sources.nix+393−393 pkgs/applications/networking/browsers/firefox-bin/release_sources.nix+393−393 pkgs/applications/networking/browsers/firefox/common.nix+3−14 pkgs/applications/networking/browsers/firefox/librewolf/src.json+5−5 pkgs/applications/networking/browsers/firefox/packages.nix+4−4 pkgs/applications/networking/browsers/google-chrome/default.nix+1−1 pkgs/applications/networking/browsers/lagrange/default.nix+2−2 pkgs/applications/networking/browsers/links2/default.nix+1 pkgs/applications/networking/browsers/microsoft-edge/default.nix+6−6 pkgs/applications/networking/browsers/palemoon/default.nix+21−14 pkgs/applications/networking/browsers/qtchan/default.nix+1−1 pkgs/applications/networking/browsers/qutebrowser/default.nix+8−5 pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix+11−4 pkgs/applications/networking/browsers/vieb/default.nix+2−2 pkgs/applications/networking/browsers/vivaldi/default.nix+2−2 pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix+3−3 pkgs/applications/networking/browsers/vivaldi/widevine.nix+2−2 pkgs/applications/networking/c14/default.nix−22 pkgs/applications/networking/cloudflare-dyndns/default.nix+53 pkgs/applications/networking/cloudflared/default.nix+17−6 pkgs/applications/networking/cluster/argo/default.nix+3−3 pkgs/applications/networking/cluster/argocd-autopilot/default.nix+4−5 pkgs/applications/networking/cluster/argocd/default.nix+7−11 pkgs/applications/networking/cluster/arkade/default.nix+4−4 pkgs/applications/networking/cluster/atlantis/default.nix+8−5 pkgs/applications/networking/cluster/cilium/default.nix+2−2 pkgs/applications/networking/cluster/cloudfoundry-cli/default.nix+1 pkgs/applications/networking/cluster/cmctl/default.nix+3−3 pkgs/applications/networking/cluster/driftctl/default.nix+3−3 pkgs/applications/networking/cluster/flink/default.nix+2−2 pkgs/applications/networking/cluster/fluxcd/default.nix+5−5 pkgs/applications/networking/cluster/fluxcd/update.sh+38−31 pkgs/applications/networking/cluster/fluxctl/default.nix+3−3 pkgs/applications/networking/cluster/hadoop/default.nix+5 pkgs/applications/networking/cluster/helm-docs/default.nix+3−3 pkgs/applications/networking/cluster/helm/default.nix+21−9 pkgs/applications/networking/cluster/helmfile/default.nix+3−3 pkgs/applications/networking/cluster/istioctl/default.nix+9−6 pkgs/applications/networking/cluster/k3s/default.nix+23−8 pkgs/applications/networking/cluster/k3s/patches/0002-Don-t-build-a-static-binary-in-package-cli.patch−37 pkgs/applications/networking/cluster/kn/default.nix+2−2 pkgs/applications/networking/cluster/kompose/default.nix+17−7 pkgs/applications/networking/cluster/kops/default.nix+2−2 pkgs/applications/networking/cluster/krane/Gemfile.lock+12−12 pkgs/applications/networking/cluster/krane/gemset.nix+20−20 pkgs/applications/networking/cluster/kube3d/default.nix+29−12 pkgs/applications/networking/cluster/kubecfg/default.nix+7−7 pkgs/applications/networking/cluster/kubeless/default.nix−38 pkgs/applications/networking/cluster/kubernetes/kubectl.nix+1 pkgs/applications/networking/cluster/kubeseal/default.nix−2 pkgs/applications/networking/cluster/kuttl/default.nix+1 pkgs/applications/networking/cluster/nerdctl/default.nix+3−3 pkgs/applications/networking/cluster/nomad-pack/default.nix+4−4 pkgs/applications/networking/cluster/nomad/1.1.nix+3−3 pkgs/applications/networking/cluster/ocm/default.nix+2−2 pkgs/applications/networking/cluster/odo/default.nix+2−2 pkgs/applications/networking/cluster/openshift/default.nix+2−2 pkgs/applications/networking/cluster/pachyderm/default.nix+1 pkgs/applications/networking/cluster/pgo-client/default.nix+1 pkgs/applications/networking/cluster/popeye/default.nix+3−3 pkgs/applications/networking/cluster/sonobuoy/default.nix+4−4 pkgs/applications/networking/cluster/spark/default.nix+11−6 pkgs/applications/networking/cluster/ssm-session-manager-plugin/default.nix+9−4 pkgs/applications/networking/cluster/starboard/default.nix+15−9 pkgs/applications/networking/cluster/talosctl/default.nix+11−9 pkgs/applications/networking/cluster/tanka/default.nix+1 pkgs/applications/networking/cluster/tektoncd-cli/default.nix+2−1 pkgs/applications/networking/cluster/terraform-providers/default.nix+6−2 pkgs/applications/networking/cluster/terraform-providers/providers.json+312−278 pkgs/applications/networking/cluster/terraform/default.nix+5−4 pkgs/applications/networking/cluster/vcluster/default.nix+2−2 pkgs/applications/networking/cluster/waypoint/default.nix+3−3 pkgs/applications/networking/cluster/werf/default.nix+11−4 pkgs/applications/networking/feedreaders/newsboat/default.nix+3−3 pkgs/applications/networking/feedreaders/rss2email/default.nix+1−1 pkgs/applications/networking/firewalld/default.nix+104 pkgs/applications/networking/firewalld/respect-xml-catalog-files-var.patch+13 pkgs/applications/networking/flexget/default.nix+6−3 pkgs/applications/networking/gmailctl/default.nix+4−6 pkgs/applications/networking/gns3/default.nix+7−8 pkgs/applications/networking/gns3/gui.nix+29−7 pkgs/applications/networking/gns3/server.nix+36−22 pkgs/applications/networking/ids/zeek/default.nix+2−2 pkgs/applications/networking/instant-messengers/alfaview/default.nix+2−2 pkgs/applications/networking/instant-messengers/bitlbee-discord/default.nix+1−1 pkgs/applications/networking/instant-messengers/bluejeans/default.nix+2−2 pkgs/applications/networking/instant-messengers/caprine-bin/build-from-appimage.nix+50 pkgs/applications/networking/instant-messengers/caprine-bin/build-from-dmg.nix+35 pkgs/applications/networking/instant-messengers/caprine-bin/default.nix+25 pkgs/applications/networking/instant-messengers/chatty/default.nix+4−2 pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix+6−5 pkgs/development/libraries/libdeltachat/darwin-dylib.patch → pkgs/applications/networking/instant-messengers/deltachat-desktop/libdeltachat-darwin-dylib.patch pkgs/applications/networking/instant-messengers/deltachat-desktop/package.json+2−2 pkgs/applications/networking/instant-messengers/discord/default.nix+2−2 pkgs/applications/networking/instant-messengers/element/element-desktop-package.json+2−1 pkgs/applications/networking/instant-messengers/element/pin.json+4−4 pkgs/applications/networking/instant-messengers/ferdi/default.nix+3−3 pkgs/applications/networking/instant-messengers/franz/default.nix+2−2 pkgs/applications/networking/instant-messengers/gajim/default.nix+1−1 pkgs/applications/networking/instant-messengers/gotktrix/default.nix+3−3 pkgs/applications/networking/instant-messengers/gtmess/default.nix−20 pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix+4−3 pkgs/applications/networking/instant-messengers/kaidan/default.nix+2 pkgs/applications/networking/instant-messengers/kdeltachat/default.nix+3−3 pkgs/applications/networking/instant-messengers/linphone/default.nix+40−13 pkgs/applications/networking/instant-messengers/linphone/do-not-build-linphone-sdk.patch+56−31 pkgs/applications/networking/instant-messengers/linphone/no-store-path-in-autostart.patch+27 pkgs/applications/networking/instant-messengers/linphone/remove-bc_compute_full_version-usage.patch+6−6 pkgs/applications/networking/instant-messengers/pond/default.nix+1−1 pkgs/applications/networking/instant-messengers/psi-plus/default.nix+2−2 pkgs/applications/networking/instant-messengers/ripcord/default.nix+1−1 pkgs/applications/networking/instant-messengers/rocketchat-desktop/default.nix+3−3 pkgs/applications/networking/instant-messengers/session-desktop-appimage/default.nix+2−2 pkgs/applications/networking/instant-messengers/signal-desktop/default.nix+2−2 pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix+2−2 pkgs/applications/networking/instant-messengers/skypeforlinux/default.nix+2−2 pkgs/applications/networking/instant-messengers/slack/default.nix+7−7 pkgs/applications/networking/instant-messengers/teams/default.nix+3−3 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix+1−21 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/kf594.patch+57 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/kotato-10.12-sdk.patch+31−22 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt-10.12-sdk.patch+17−4 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt.nix+15−7 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/with-webkit.nix+23 pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix+8 pkgs/applications/networking/instant-messengers/telegram/tdesktop/kf594.diff+57 pkgs/applications/networking/instant-messengers/threema-desktop/default.nix+3−3 pkgs/applications/networking/instant-messengers/torchat/default.nix+1−1 pkgs/applications/networking/instant-messengers/wire-desktop/default.nix+6−5 pkgs/applications/networking/instant-messengers/zoom-us/default.nix+47−8 pkgs/applications/networking/instant-messengers/zulip/default.nix+2−2 pkgs/applications/networking/ipfs-cluster/default.nix+3−12 pkgs/applications/networking/ipfs/default.nix+2−2 pkgs/applications/networking/irc/senpai/default.nix+4−4 pkgs/applications/networking/irc/weechat/default.nix+2−2 pkgs/applications/networking/irc/wraith/configure.patch+1−1 pkgs/applications/networking/irc/wraith/default.nix+3−3 pkgs/applications/networking/maestral-qt/default.nix+3 pkgs/applications/networking/mailreaders/aerc/default.nix+23−14 pkgs/applications/networking/mailreaders/aerc/runtime-sharedir.patch+86−56 pkgs/applications/networking/mailreaders/claws-mail/default.nix+6−14 pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix+2−2 pkgs/applications/networking/mailreaders/evolution/evolution/default.nix+2−2 pkgs/applications/networking/mailreaders/mailspring/default.nix+9−4 pkgs/applications/networking/mailreaders/meli/default.nix+1−2 pkgs/applications/networking/mailreaders/mutt/default.nix+2−2 pkgs/applications/networking/mailreaders/neomutt/default.nix+2−12 pkgs/applications/networking/mailreaders/notbit/default.nix−30 pkgs/applications/networking/mailreaders/notmuch-bower/default.nix+2−2 pkgs/applications/networking/mailreaders/notmuch/default.nix+2−2 pkgs/applications/networking/mailreaders/thunderbird-bin/default.nix+2−2 pkgs/applications/networking/mailreaders/thunderbird-bin/release_sources.nix+261−261 pkgs/applications/networking/mailreaders/thunderbird/packages.nix+2−2 pkgs/applications/networking/modem-manager-gui/default.nix+15 pkgs/applications/networking/mullvad/default.nix+8 pkgs/applications/networking/mullvad/libwg.nix+35 pkgs/applications/networking/mullvad/mullvad.nix+107 pkgs/applications/networking/mullvad/openvpn.nix+87 pkgs/applications/networking/n8n/node-packages.nix+706−774 pkgs/applications/networking/newsreaders/liferea/default.nix+2−2 pkgs/applications/networking/nextcloud-client/default.nix+26−3 pkgs/applications/networking/nextdns/default.nix+3−5 pkgs/applications/networking/owncloud-client/default.nix+2−2 pkgs/applications/networking/p2p/gnunet/default.nix+2−2 pkgs/tools/networking/p2p/jesec-rtorrent/rtorrent.nix → pkgs/applications/networking/p2p/jesec-rtorrent/default.nix+3−3 pkgs/tools/networking/p2p/jesec-rtorrent/libtorrent.nix → pkgs/applications/networking/p2p/jesec-rtorrent/libtorrent.nix+7−3 pkgs/applications/networking/p2p/qbittorrent/default.nix+2−2 pkgs/tools/networking/p2p/rakshasa-rtorrent/rtorrent.nix → pkgs/applications/networking/p2p/rakshasa-rtorrent/default.nix pkgs/tools/networking/p2p/rakshasa-rtorrent/libtorrent.nix → pkgs/applications/networking/p2p/rakshasa-rtorrent/libtorrent.nix pkgs/applications/networking/p2p/tribler/default.nix+2−2 pkgs/applications/networking/p2p/twister/default.nix−70 pkgs/applications/networking/ping/default.nix−76 pkgs/applications/networking/pjsip/default.nix+7−1 pkgs/applications/networking/protonvpn-gui/default.nix+3−3 pkgs/applications/networking/remote/citrix-workspace/generic.nix+1−1 pkgs/applications/networking/remote/freerdp/default.nix+2−2 pkgs/applications/networking/remote/rustdesk/default.nix+1−1 pkgs/applications/networking/remote/vmware-horizon-client/default.nix+3−3 pkgs/applications/networking/resilio-sync/default.nix+19−19 pkgs/applications/networking/seafile-client/default.nix+5−3 pkgs/applications/networking/seahub/default.nix+12−5 pkgs/applications/networking/seaweedfs/default.nix+6−5 pkgs/applications/networking/shellhub-agent/default.nix+3−3 pkgs/applications/networking/sniffers/wireshark/default.nix+22−7 pkgs/applications/networking/soju/default.nix+3−3 pkgs/applications/networking/sync/lsyncd/default.nix+2−1 pkgs/applications/networking/sync/onedrive/default.nix+2−2 pkgs/applications/networking/sync/rclone/default.nix+3−3 pkgs/applications/networking/syncplay/default.nix+6−4 pkgs/applications/networking/syncthing/default.nix+3−3 pkgs/applications/networking/synology-drive-client/default.nix+4−4 pkgs/applications/networking/termius/default.nix+3−3 pkgs/applications/networking/tetrd/default.nix+1−1 pkgs/applications/networking/zerobin/default.nix+1−1 pkgs/applications/office/banking/default.nix+20−9 pkgs/applications/office/beamerpresenter/default.nix+45−22 pkgs/applications/office/bookworm/default.nix−2 pkgs/applications/office/buho/default.nix+58 pkgs/applications/office/calligra/default.nix+16 pkgs/applications/office/fava/default.nix+15−3 pkgs/applications/office/foliate/default.nix−1 pkgs/applications/office/gnumeric/default.nix+3−2 pkgs/applications/office/jameica/default.nix+1−1 pkgs/applications/office/khronos/default.nix+2−9 pkgs/applications/office/ledger/default.nix+2−2 pkgs/applications/office/libreoffice/soffice-template.desktop+6 pkgs/applications/office/libreoffice/wrapper.nix+25−12 pkgs/applications/office/morgen/default.nix+2−2 pkgs/applications/office/paperless-ng/default.nix → pkgs/applications/office/paperless-ngx/default.nix+16−34 pkgs/applications/office/paperwork/paperwork-gtk.nix+1−1 pkgs/applications/office/portfolio/default.nix+3−3 pkgs/applications/office/qownnotes/default.nix+2−2 pkgs/applications/office/trilium/default.nix+3−3 pkgs/applications/office/tusk/default.nix+3−2 pkgs/applications/office/vnote/default.nix+2−2 pkgs/applications/office/zotero/default.nix+3−3 pkgs/applications/radio/cubicsdr/default.nix+3−21 pkgs/applications/radio/flex-ncat/default.nix+1 pkgs/applications/radio/flrig/default.nix+4−2 pkgs/applications/radio/gnss-sdr/default.nix+6 pkgs/applications/radio/gnuradio/3.9.nix+8−2 pkgs/applications/radio/gnuradio/default.nix+10−3 pkgs/applications/radio/gnuradio/wrapper.nix+1−1 pkgs/applications/radio/gqrx/default.nix+2−2 pkgs/applications/radio/kalibrate-rtl/default.nix+5−5 pkgs/applications/radio/rtl-ais/default.nix+1 pkgs/applications/radio/rtl-sdr/default.nix+11−7 pkgs/applications/radio/splat/default.nix+55 pkgs/applications/radio/uhd/default.nix+2 pkgs/applications/science/astronomy/astrolabe-generator/default.nix+1 pkgs/applications/science/astronomy/openspace/assets.patch−100 pkgs/applications/science/astronomy/openspace/config.patch−49 pkgs/applications/science/astronomy/openspace/constexpr.patch−91 pkgs/applications/science/astronomy/openspace/default.nix−90 pkgs/applications/science/astronomy/openspace/vrpn.patch−13 pkgs/applications/science/astronomy/stellarium/default.nix+2−2 pkgs/applications/science/biology/bayescan/default.nix+1 pkgs/applications/science/biology/blast/default.nix+2−2 pkgs/applications/science/biology/bwa/default.nix+2 pkgs/applications/science/biology/clustal-omega/default.nix+1 pkgs/applications/science/biology/cmtk/default.nix+4−1 pkgs/applications/science/biology/dcm2niix/default.nix+42−7 pkgs/applications/science/biology/dcm2niix/dont-fetch-external-libs.patch+36 pkgs/applications/science/biology/eggnog-mapper/default.nix+30−16 pkgs/applications/science/biology/megahit/default.nix+3 pkgs/applications/science/biology/ncbi-tools/default.nix−34 pkgs/applications/science/biology/picard-tools/default.nix+1 pkgs/applications/science/biology/quast/default.nix+1−3 pkgs/applications/science/biology/samtools/default.nix+8−1 pkgs/applications/science/biology/tebreak/default.nix+2−2 pkgs/applications/science/chemistry/jmol/default.nix+2−2 pkgs/applications/science/computer-architecture/qtrvsim/default.nix+2−2 pkgs/applications/science/electronics/eagle/eagle7.nix−97 pkgs/applications/science/electronics/verilator/default.nix+2−2 pkgs/applications/science/engineering/brmodelo/default.nix+109 pkgs/applications/science/logic/abc/default.nix+3−3 pkgs/applications/science/logic/coq/default.nix+14−14 pkgs/applications/science/logic/cvc5/default.nix+34 pkgs/applications/science/logic/easycrypt/default.nix+50 pkgs/applications/science/logic/easycrypt/runtest.nix+24 pkgs/applications/science/logic/elan/default.nix+3−3 pkgs/applications/science/logic/fast-downward/default.nix+19−12 pkgs/applications/science/logic/isabelle/default.nix+31−2 pkgs/applications/science/logic/jonprl/default.nix−35 pkgs/applications/science/logic/key/default.nix+2−3 pkgs/applications/science/logic/lean2/default.nix−37 pkgs/applications/science/logic/naproche/default.nix+3−3 pkgs/applications/science/logic/otter/default.nix−53 pkgs/applications/science/logic/potassco/clingcon.nix+5 pkgs/applications/science/logic/symbiyosys/default.nix+1 pkgs/applications/science/logic/symfpu/default.nix+26 pkgs/applications/science/logic/tlaplus/toolbox.nix+1−1 pkgs/applications/science/logic/z3/default.nix+66−66 pkgs/applications/science/machine-learning/finalfusion-utils/default.nix+1 pkgs/applications/science/math/adolc/default.nix+23 pkgs/applications/science/math/caffe/default.nix+9−4 pkgs/applications/science/math/calc/default.nix+2−2 pkgs/applications/science/math/calculix/calculix.patch+10−9 pkgs/applications/science/math/calculix/default.nix+6−3 pkgs/applications/science/math/cntk/default.nix+6−2 pkgs/applications/science/math/giac/default.nix+12−16 pkgs/applications/science/math/mxnet/default.nix+14−2 pkgs/applications/science/math/qalculate-gtk/default.nix+2−2 pkgs/applications/science/math/sage/patches/docutils-0.18.1-deprecation.patch+13 pkgs/applications/science/math/sage/sage-env.nix+2 pkgs/applications/science/math/sage/sage-src.nix+51−11 pkgs/applications/science/math/sage/sagelib.nix+8−3 pkgs/applications/science/math/wolfram-engine/default.nix+143 pkgs/applications/science/math/wolfram-engine/l10ns.nix+51 pkgs/applications/science/math/wolfram-engine/notebook.nix+9 pkgs/applications/science/math/wxmaxima/default.nix+2−2 pkgs/applications/science/medicine/xmedcon/default.nix+2−2 pkgs/applications/science/misc/bada-bib/default.nix+3−3 pkgs/applications/science/misc/colmap/default.nix+22−6 pkgs/applications/science/misc/cwltool/default.nix+2−2 pkgs/applications/science/misc/fityk/default.nix+4 pkgs/applications/science/misc/netlogo/default.nix+1−1 pkgs/applications/science/misc/openmvs/default.nix−77 pkgs/applications/science/misc/root/5.nix+5 pkgs/applications/science/misc/snakemake/default.nix+27−13 pkgs/applications/science/molecular-dynamics/gromacs/default.nix+2−2 pkgs/applications/science/physics/xfitter/default.nix+34−30 pkgs/applications/science/physics/xfitter/undefined_behavior.patch−454 pkgs/applications/science/programming/jflap/default.nix+32 pkgs/applications/science/robotics/mavproxy/default.nix+2−2 pkgs/applications/science/robotics/sumorobot-manager/default.nix+1−1 pkgs/applications/terminal-emulators/alacritty/default.nix−2 pkgs/applications/terminal-emulators/foot/default.nix+3−2 pkgs/applications/terminal-emulators/hyper/default.nix+2−2 pkgs/applications/terminal-emulators/kitty/default.nix+5 pkgs/applications/terminal-emulators/syncterm/default.nix+2 pkgs/applications/terminal-emulators/wezterm/default.nix+21−10 pkgs/applications/version-management/bitkeeper/default.nix−56 pkgs/applications/version-management/commit-formatter/default.nix+1 pkgs/applications/version-management/git-and-tools/bfg-repo-cleaner/default.nix+1 pkgs/applications/version-management/git-and-tools/bitbucket-server-cli/default.nix+1 pkgs/applications/version-management/git-and-tools/gh/default.nix+2−2 pkgs/applications/version-management/git-and-tools/ghorg/default.nix+2−2 pkgs/applications/version-management/git-and-tools/git-annex-utils/default.nix+1 pkgs/applications/version-management/git-and-tools/git-branchless/default.nix+3−3 pkgs/applications/version-management/git-and-tools/git-cliff/default.nix+3−3 pkgs/applications/version-management/git-and-tools/git-crypt/default.nix+17−7 pkgs/applications/version-management/git-and-tools/git-dit/default.nix−58 pkgs/applications/version-management/git-and-tools/git-extras/default.nix+2−2 pkgs/applications/version-management/git-and-tools/git-interactive-rebase-tool/default.nix+5−12 pkgs/applications/version-management/git-and-tools/git-machete/default.nix+3−3 pkgs/applications/version-management/git-and-tools/git/default.nix+27−18 pkgs/applications/version-management/git-and-tools/gitbatch/default.nix+12−10 pkgs/applications/version-management/git-and-tools/gitbatch/deps.nix−543 pkgs/applications/version-management/git-and-tools/glab/default.nix+10−1 pkgs/applications/version-management/git-and-tools/hut/default.nix+5−8 pkgs/applications/version-management/git-and-tools/scmpuff/default.nix+14−9 pkgs/applications/version-management/git-and-tools/scmpuff/deps.nix−273 pkgs/applications/version-management/git-lfs/default.nix+2−2 pkgs/applications/version-management/git-repo/default.nix+2−2 pkgs/applications/version-management/git-review/default.nix+2−2 pkgs/applications/version-management/git-sizer/default.nix+15−6 pkgs/applications/version-management/gitea/default.nix+2−2 pkgs/applications/version-management/github-desktop/default.nix+2−2 pkgs/applications/version-management/gitkraken/default.nix+4−4 pkgs/applications/version-management/gitlab/data.json+8−8 pkgs/applications/version-management/gitlab/gitaly/Gemfile+1−1 pkgs/applications/version-management/gitlab/gitaly/Gemfile.lock+13−13 pkgs/applications/version-management/gitlab/gitaly/default.nix+4−4 pkgs/applications/version-management/gitlab/gitaly/gemset.nix+16−16 pkgs/applications/version-management/gitlab/gitlab-shell/default.nix+3−3 pkgs/applications/version-management/gitlab/gitlab-workhorse/default.nix+2−2 pkgs/applications/version-management/gitlab/rubyEnv/Gemfile+11−10 pkgs/applications/version-management/gitlab/rubyEnv/Gemfile.lock+91−87 pkgs/applications/version-management/gitlab/rubyEnv/gemset.nix+77−66 pkgs/applications/version-management/gitoxide/default.nix+3−3 pkgs/applications/version-management/gogs/default.nix+3−3 pkgs/applications/version-management/jujutsu/default.nix+3−2 pkgs/applications/version-management/mercurial/default.nix+3−8 pkgs/applications/version-management/mercurial/fix-rhg-type-aarch64.patch−12 pkgs/applications/version-management/monotone/default.nix+2 pkgs/applications/version-management/p4/default.nix+1−1 pkgs/applications/version-management/pijul/default.nix+3−3 pkgs/applications/version-management/rcs/default.nix+1−1 pkgs/applications/version-management/redmine/Gemfile+2−2 pkgs/applications/version-management/redmine/Gemfile.lock+48−50 pkgs/applications/version-management/redmine/default.nix+4−6 pkgs/applications/version-management/redmine/gemset.nix+39−49 pkgs/applications/version-management/redmine/update.sh+17 pkgs/applications/version-management/subversion/default.nix+5−10 pkgs/applications/version-management/verco/default.nix+3−3 pkgs/applications/version-management/yadm/default.nix+2−2 pkgs/applications/video/ani-cli/default.nix+2−2 pkgs/applications/video/celluloid/default.nix+2−4 pkgs/applications/video/clickshare-csc1/default.nix−2 pkgs/applications/video/davinci-resolve/default.nix+179 pkgs/applications/video/epgstation/default.nix+3−5 pkgs/applications/video/epgstation/update.nix+2−4 pkgs/applications/video/f1viewer/default.nix+2−2 pkgs/applications/video/ffmpeg-normalize/default.nix+2−2 pkgs/applications/video/handbrake/default.nix+2−2 pkgs/applications/video/hdhomerun-config-gui/default.nix+3−1 pkgs/applications/video/hyperion-ng/default.nix+50 pkgs/applications/video/kodi/add-KODI_WEBSERVER_EXTRA_WHITELIST.patch+88 pkgs/applications/video/kodi/unwrapped.nix+17−2 pkgs/applications/video/kodi/wrapper.nix−6 pkgs/applications/video/lightworks/default.nix+4−4 pkgs/applications/video/mirakurun/default.nix+4−6 pkgs/applications/video/mirakurun/update.nix+3−7 pkgs/applications/video/mkvtoolnix/default.nix+2−2 pkgs/applications/video/mpv/scripts/autocrop.nix+19 pkgs/applications/video/mpv/scripts/autodeint.nix+19 pkgs/applications/video/obs-studio/default.nix+2−2 pkgs/applications/video/obs-studio/plugins/default.nix+1 pkgs/applications/video/obs-studio/plugins/obs-vkcapture.nix+35 pkgs/applications/video/peek/default.nix−2 pkgs/applications/video/pitivi/default.nix+8 pkgs/applications/video/quvi/library.nix+1 pkgs/applications/video/quvi/scripts.nix+1 pkgs/applications/video/quvi/tool.nix+1 pkgs/applications/video/vdr/plugins.nix+5−80 pkgs/applications/video/vlc/default.nix+2−2 pkgs/applications/video/webcamoid/default.nix+4−9 pkgs/applications/video/webtorrent_desktop/default.nix+68−87 pkgs/applications/virtualization/cloud-hypervisor/default.nix+3−3 pkgs/applications/virtualization/containerd/default.nix+2−2 pkgs/applications/virtualization/crosvm/Cargo.lock+31−22 pkgs/applications/virtualization/crosvm/generate-cargo.sh+7 pkgs/applications/virtualization/crosvm/update.py+10−2 pkgs/applications/virtualization/crosvm/upstream-info.json+5−5 pkgs/applications/virtualization/crun/default.nix+2−2 pkgs/applications/virtualization/distrobox/default.nix+2−2 pkgs/applications/virtualization/docker-slim/default.nix+2−2 pkgs/applications/virtualization/docker/buildx.nix+2−2 pkgs/applications/virtualization/docker/compose.nix+3−3 pkgs/applications/virtualization/ecs-agent/default.nix+1 pkgs/applications/virtualization/firectl/default.nix+6−6 pkgs/applications/virtualization/firectl/gomod.patch−15 pkgs/applications/virtualization/imgcrypt/default.nix+2−2 pkgs/applications/virtualization/kvmtool/default.nix+23 pkgs/applications/virtualization/lima/default.nix+8−3 pkgs/applications/virtualization/podman-tui/default.nix+4−4 pkgs/applications/virtualization/podman/default.nix+3−2 pkgs/applications/virtualization/qemu/allow-virtfs-on-darwin.patch−77 pkgs/applications/virtualization/qemu/default.nix+18−65 pkgs/applications/virtualization/qemu/provide-fallback-for-utimensat.patch+4−4 pkgs/applications/virtualization/qemu/rename-9p-util.patch−54 pkgs/applications/virtualization/qemu/revert-ui-cocoa-add-clipboard-support.patch+208 pkgs/applications/virtualization/virt-manager/default.nix+12−2 pkgs/applications/virtualization/virtualbox/guest-additions/default.nix+3−7 pkgs/applications/virtualization/vmware-workstation/default.nix+341 pkgs/applications/virtualization/vmware-workstation/vmware-bootstrap+11 pkgs/applications/virtualization/vmware-workstation/vmware-config+21 pkgs/applications/virtualization/vmware-workstation/vmware-installer-bootstrap+5 pkgs/applications/virtualization/vmware-workstation/vmware-modconfig+8 pkgs/applications/virtualization/x11docker/default.nix+2−2 pkgs/applications/window-managers/afterstep/default.nix+13−1 pkgs/applications/window-managers/berry/default.nix+2−2 pkgs/applications/window-managers/clfswm/default.nix−51 pkgs/applications/window-managers/clfswm/require-clx.patch−13 pkgs/applications/window-managers/herbstluftwm/default.nix+9−4 pkgs/applications/window-managers/i3/status-rust.nix+3−3 pkgs/applications/window-managers/phosh/default.nix+2−2 pkgs/applications/window-managers/sway/idle.nix+2 pkgs/applications/window-managers/sway/lock-effects.nix+8 pkgs/applications/window-managers/wmfs/default.nix+1−5 pkgs/applications/window-managers/wmii-hg/default.nix−46 pkgs/applications/window-managers/wmii/default.nix+72 pkgs/build-support/build-fhs-userenv-bubblewrap/env.nix+1−1 pkgs/build-support/build-graalvm-native-image/default.nix+7−5 pkgs/build-support/docker/default.nix+17−25 pkgs/build-support/docker/examples.nix+1−1 pkgs/build-support/dotnet/build-dotnet-module/default.nix+10−5 pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-build-hook.sh+2−1 pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-check-hook.sh+2−1 pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh+5−1 pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-fixup-hook.sh+5−4 pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-install-hook.sh+2−1 pkgs/build-support/dotnet/make-nuget-source/default.nix+26−18 pkgs/build-support/dotnet/nuget-to-nix/default.nix+25−3 pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh+3−1 pkgs/build-support/emacs/wrapper.nix+16−2 pkgs/build-support/emacs/wrapper.sh+1−1 pkgs/build-support/fake-nss/default.nix+24 pkgs/build-support/fetchfirefoxaddon/default.nix+2−2 pkgs/build-support/fetchgit/default.nix+2−1 pkgs/build-support/fetchnextcloudapp/default.nix+1−6 pkgs/build-support/fetchurl/default.nix+1−1 pkgs/build-support/fetchurl/mirrors.nix+1 pkgs/build-support/kernel/make-initrd-ng-tool.nix+16 pkgs/build-support/kernel/make-initrd-ng.nix+93 pkgs/build-support/kernel/make-initrd-ng/Cargo.lock+5 pkgs/build-support/kernel/make-initrd-ng/Cargo.toml+9 pkgs/build-support/kernel/make-initrd-ng/README.md+79 pkgs/build-support/kernel/make-initrd-ng/src/main.rs+216 pkgs/build-support/kernel/make-initrd.nix+2−2 pkgs/build-support/kernel/make-initrd.sh+1−1 pkgs/build-support/make-darwin-bundle/default.nix+4−4 pkgs/build-support/make-desktopitem/default.nix+3−8 pkgs/build-support/ocaml/dune.nix+2−2 pkgs/build-support/ocaml/oasis.nix+1−1 pkgs/build-support/rust/build-rust-crate/build-crate.nix+3−2 pkgs/build-support/rust/build-rust-crate/configure-crate.nix+2−1 pkgs/build-support/rust/build-rust-crate/default.nix+11−4 pkgs/build-support/rust/default-crate-overrides.nix+1−1 pkgs/build-support/setup-hooks/auto-patchelf.py+23−17 pkgs/build-support/setup-hooks/auto-patchelf.sh+9−1 pkgs/build-support/setup-hooks/copy-desktop-items.sh+5−4 pkgs/build-support/setup-hooks/desktop-to-darwin-bundle.sh+26−6 pkgs/build-support/setup-hooks/make-wrapper.sh+5 pkgs/build-support/setup-hooks/postgresql-test-hook/default.nix+9 pkgs/build-support/setup-hooks/postgresql-test-hook/postgresql-test-hook.sh+79 pkgs/build-support/setup-hooks/postgresql-test-hook/test.nix+27 pkgs/build-support/setup-hooks/wrap-gapps-hook/wrap-gapps-hook.sh−4 pkgs/build-support/testers/default.nix+18 pkgs/build-support/test-equal-derivation.nix → pkgs/build-support/testers/test-equal-derivation.nix+1−18 pkgs/build-support/trivial-builders.nix+9−39 pkgs/build-support/trivial-builders/test/write-text-file.nix+34 pkgs/build-support/writers/default.nix+3−3 pkgs/common-updater/git-updater.nix+6−2 pkgs/common-updater/scripts/list-git-tags+1−1 pkgs/data/documentation/rnrs/r3rs.nix−7 pkgs/data/documentation/scheme-manpages/default.nix+3−3 pkgs/data/fonts/amiri/default.nix+2−2 pkgs/data/fonts/annapurna-sil/default.nix+29 pkgs/data/fonts/comic-mono/comic-mono-weight.conf+14 pkgs/data/fonts/comic-mono/default.nix+35 pkgs/data/fonts/ezra-sil/default.nix+26 pkgs/data/fonts/galatia-sil/default.nix+29 pkgs/data/fonts/iosevka/bin.nix+3−2 pkgs/data/fonts/iosevka/variants.nix+92−92 pkgs/data/fonts/kacst/default.nix+22 pkgs/data/fonts/lao/default.nix+22 pkgs/data/fonts/material-design-icons/default.nix+3−6 pkgs/data/fonts/noto-fonts/default.nix+4−4 pkgs/data/fonts/sarasa-gothic/default.nix+2−2 pkgs/data/fonts/sudo/default.nix+2−2 pkgs/data/fonts/times-newer-roman/default.nix+1−1 pkgs/data/fonts/uni-vga/default.nix+4−6 pkgs/data/fonts/unifont/default.nix+4−6 pkgs/data/fonts/unifont_upper/default.nix+2−2 pkgs/data/icons/comixcursors/default.nix+5−25 pkgs/data/icons/elementary-xfce-icon-theme/default.nix+3−3 pkgs/data/icons/hicolor-icon-theme/default.nix+3−2 pkgs/data/icons/luna-icons/default.nix+5−2 pkgs/data/misc/cacert/default.nix+2−2 pkgs/data/misc/cacert/update.sh+7−10 pkgs/data/misc/cldr-annotations/default.nix+24 pkgs/data/misc/cldr-emoji-annotation/default.nix−27 pkgs/data/misc/dns-root-data/default.nix+2−1 pkgs/data/misc/freepats/default.nix+3−2 pkgs/data/misc/hackage/default.nix+2−1 pkgs/data/misc/hackage/pin.json+4−4 pkgs/data/misc/iana-etc/default.nix+2−3 pkgs/data/misc/nixos-artwork/wallpapers.nix+16 pkgs/data/misc/shared-mime-info/default.nix+1 pkgs/data/misc/tzdata/default.nix+3−3 pkgs/data/misc/unicode-emoji/default.nix+4−12 pkgs/data/misc/wireless-regdb/default.nix+2−2 pkgs/data/sgml+xml/schemas/xml-dtd/docbook-ebnf/default.nix+4−3 pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.1.2.nix+3−8 pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.2.nix+2−5 pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.3.nix+2−5 pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.4.nix+2−5 pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.5.nix+2−5 pkgs/data/sgml+xml/schemas/xml-dtd/docbook/generic.nix+6−4 pkgs/data/sgml+xml/schemas/xml-dtd/xhtml1/default.nix+3−2 pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/default.nix+5−1 pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/fix-man-options-duplication.patch+11 pkgs/data/themes/arc/default.nix+2−2 pkgs/data/themes/flat-remix-gnome/default.nix+4−4 pkgs/data/themes/flat-remix-gtk/default.nix+2−2 pkgs/data/themes/gnome-breeze/default.nix−29 pkgs/data/themes/orchis-theme/default.nix+2−2 pkgs/data/themes/vimix/default.nix+12−4 pkgs/data/themes/yaru/default.nix+2−5 pkgs/desktops/cdesktopenv/default.nix+15−2 pkgs/desktops/enlightenment/econnman/default.nix+4−4 pkgs/desktops/enlightenment/ecrire/default.nix+1−1 pkgs/desktops/enlightenment/efl/default.nix+1−1 pkgs/desktops/enlightenment/enlightenment/default.nix+1−1 pkgs/desktops/enlightenment/ephoto/default.nix+1−1 pkgs/desktops/enlightenment/evisum/default.nix+1−1 pkgs/desktops/enlightenment/rage/default.nix+1−1 pkgs/desktops/enlightenment/terminology/default.nix+1−1 pkgs/desktops/gnome-2/bindings/gnome-python/default.nix+4−4 pkgs/desktops/gnome-2/default.nix+1−1 pkgs/desktops/gnome-2/desktop/scrollkeeper/default.nix+6−4 pkgs/desktops/gnome-2/platform/ORBit2/default.nix+3−3 pkgs/desktops/gnome-2/platform/gnome-common/default.nix+4−4 pkgs/desktops/gnome-2/platform/gnome-mime-data/default.nix+5−4 pkgs/desktops/gnome-2/platform/gnome-vfs/default.nix+4−4 pkgs/desktops/gnome-2/platform/gtkhtml/default.nix+4−3 pkgs/desktops/gnome-2/platform/libIDL/default.nix+4−4 pkgs/desktops/gnome-2/platform/libart_lgpl/default.nix+4−3 pkgs/desktops/gnome-2/platform/libbonobo/default.nix+4−4 pkgs/desktops/gnome-2/platform/libbonoboui/default.nix+4−4 pkgs/desktops/gnome-2/platform/libglade/default.nix+6−8 pkgs/desktops/gnome-2/platform/libgnome/default.nix+4−4 pkgs/desktops/gnome-2/platform/libgnomecanvas/default.nix+4−4 pkgs/desktops/gnome-2/platform/libgnomecanvasmm/default.nix+5−4 pkgs/desktops/gnome-2/platform/libgnomecups/default.nix+4−3 pkgs/desktops/gnome-2/platform/libgnomeprint/default.nix+3−2 pkgs/desktops/gnome-2/platform/libgnomeprintui/default.nix+5−4 pkgs/desktops/gnome-2/platform/libgnomeui/default.nix+4−4 pkgs/desktops/gnome-2/platform/libgtkhtml/default.nix+5−4 pkgs/desktops/gnome/apps/gedit/default.nix+5−2 pkgs/desktops/gnome/apps/ghex/default.nix+8−27 pkgs/desktops/gnome/apps/gnome-boxes/default.nix+7 pkgs/desktops/gnome/apps/gnome-boxes/fix-gir-lib-path.patch+22 pkgs/desktops/gnome/apps/gnome-calendar/default.nix+2−2 pkgs/desktops/gnome/apps/gnome-connections/default.nix+2−2 pkgs/desktops/gnome/apps/gnome-maps/default.nix+2−13 pkgs/desktops/gnome/apps/gnome-music/default.nix+4−5 pkgs/desktops/gnome/apps/gnome-nettool/default.nix+61−11 pkgs/desktops/gnome/apps/gnome-text-editor/default.nix+2−2 pkgs/desktops/gnome/apps/gnome-todo/default.nix+3−3 pkgs/desktops/gnome/core/eog/default.nix+9−2 pkgs/desktops/gnome/core/eog/fix-gir-lib-path.patch+13 pkgs/desktops/gnome/core/epiphany/default.nix+2−2 pkgs/desktops/gnome/core/evince/default.nix+2−2 pkgs/desktops/gnome/core/evolution-data-server/default.nix+2−2 pkgs/tools/bluetooth/blueberry/gnome-bluetooth.nix → pkgs/desktops/gnome/core/gnome-bluetooth/1.0/default.nix+5−4 pkgs/desktops/gnome/core/gnome-initial-setup/default.nix+2−2 pkgs/desktops/gnome/core/gnome-remote-desktop/default.nix+2−2 pkgs/desktops/gnome/core/gnome-software/default.nix+2−2 pkgs/desktops/gnome/core/gucharmap/default.nix+2−2 pkgs/desktops/gnome/core/mutter/3.38/default.nix+3−1 pkgs/desktops/gnome/core/mutter/default.nix+3−1 pkgs/desktops/gnome/core/nautilus/default.nix+2−2 pkgs/desktops/gnome/core/simple-scan/default.nix+3−4 pkgs/desktops/gnome/core/sushi/default.nix+2−2 pkgs/desktops/gnome/core/zenity/default.nix+2−2 pkgs/desktops/gnome/default.nix+3−16 pkgs/desktops/gnome/extensions/arcmenu/default.nix+2−2 pkgs/desktops/gnome/extensions/collisions.json+32 pkgs/desktops/gnome/extensions/default.nix+1−1 pkgs/desktops/gnome/extensions/extensionRenames.nix+15−12 pkgs/desktops/gnome/extensions/extensions.json+248−223 pkgs/desktops/gnome/extensions/impatience/default.nix+3−3 pkgs/desktops/gnome/extensions/manuallyPackaged.nix−1 pkgs/desktops/gnome/extensions/night-theme-switcher/default.nix−35 pkgs/desktops/gnome/extensions/system-monitor/default.nix+11−24 pkgs/desktops/gnome/extensions/update-extensions.py+66−47 pkgs/desktops/gnome/games/aisleriot/default.nix+4−4 pkgs/desktops/gnome/games/five-or-more/default.nix+31−6 pkgs/desktops/gnome/games/hitori/default.nix+2−14 pkgs/desktops/gnome/games/swell-foop/default.nix+3−4 pkgs/desktops/gnome/games/tali/default.nix+2−2 pkgs/desktops/gnome/misc/gnome-flashback/default.nix+4−3 pkgs/desktops/gnome/misc/gnome-panel/default.nix+12−1 pkgs/desktops/lumina/lumina-calculator/default.nix+1−1 pkgs/desktops/lumina/lumina-pdf/default.nix+1−1 pkgs/desktops/lumina/lumina/default.nix+1−1 pkgs/desktops/lxqt/compton-conf/default.nix+1−1 pkgs/desktops/lxqt/default.nix+2−5 pkgs/desktops/lxqt/libfm-qt/default.nix+3−3 pkgs/desktops/lxqt/liblxqt/default.nix+3−3 pkgs/desktops/lxqt/libqtxdg/default.nix+3−3 pkgs/desktops/lxqt/libsysstat/default.nix+1−1 pkgs/desktops/lxqt/lximage-qt/default.nix+3−3 pkgs/desktops/lxqt/lxqt-about/default.nix+3−3 pkgs/desktops/lxqt/lxqt-admin/default.nix+3−3 pkgs/desktops/lxqt/lxqt-archiver/default.nix+3−3 pkgs/desktops/lxqt/lxqt-build-tools/default.nix+3−3 pkgs/desktops/lxqt/lxqt-config/default.nix+3−3 pkgs/desktops/lxqt/lxqt-globalkeys/default.nix+3−3 pkgs/desktops/lxqt/lxqt-notificationd/default.nix+3−3 pkgs/desktops/lxqt/lxqt-openssh-askpass/default.nix+3−3 pkgs/desktops/lxqt/lxqt-panel/default.nix+4−3 pkgs/desktops/lxqt/lxqt-policykit/default.nix+3−3 pkgs/desktops/lxqt/lxqt-powermanagement/default.nix+3−3 pkgs/desktops/lxqt/lxqt-qtplugin/default.nix+3−3 pkgs/desktops/lxqt/lxqt-runner/default.nix+3−3 pkgs/desktops/lxqt/lxqt-session/default.nix+3−3 pkgs/desktops/lxqt/lxqt-sudo/default.nix+3−3 pkgs/desktops/lxqt/lxqt-themes/default.nix+3−3 pkgs/desktops/lxqt/obconf-qt/default.nix+1−1 pkgs/desktops/lxqt/pavucontrol-qt/default.nix+3−3 pkgs/desktops/lxqt/pcmanfm-qt/default.nix+3−3 pkgs/desktops/lxqt/qlipper/default.nix+1−1 pkgs/desktops/lxqt/qps/default.nix+3−3 pkgs/desktops/lxqt/qterminal/default.nix+3−3 pkgs/desktops/lxqt/qtermwidget/default.nix+3−3 pkgs/desktops/lxqt/screengrab/default.nix+3−3 pkgs/desktops/lxqt/xdg-desktop-portal-lxqt/default.nix+41 pkgs/desktops/mate/caja-extensions/default.nix+17−1 pkgs/desktops/mate/caja-extensions/hardcode-gsettings.patch+169 pkgs/desktops/mate/default.nix+2 pkgs/desktops/mate/mate-control-center/default.nix+3−1 pkgs/desktops/mate/mate-panel/default.nix+7 pkgs/desktops/mate/mate-settings-daemon/wrapped.nix+22 pkgs/desktops/pantheon/apps/elementary-code/default.nix+2−12 pkgs/desktops/pantheon/apps/elementary-dock/default.nix+8 pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix+2−2 pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/default.nix+2−2 pkgs/desktops/pantheon/apps/switchboard-plugs/onlineaccounts/default.nix+2−2 pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix+2−2 pkgs/desktops/pantheon/apps/switchboard/default.nix+2−15 pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix+12−5 pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix+6−6 pkgs/desktops/pantheon/default.nix+4−2 pkgs/desktops/pantheon/desktop/gala/default.nix+4−15 pkgs/desktops/pantheon/desktop/gnome-bluetooth-contract/default.nix+4−5 pkgs/desktops/pantheon/granite/7/default.nix+73 pkgs/desktops/pantheon/services/elementary-notifications/default.nix+2−2 pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix+2−2 pkgs/desktops/plasma-5/3rdparty/addons/bismuth/default.nix+2−2 pkgs/desktops/plasma-5/3rdparty/kwin/scripts/dynamic-workspaces.nix+1−1 pkgs/desktops/plasma-5/default.nix+1−1 pkgs/desktops/plasma-5/fetch.sh+1−1 pkgs/desktops/plasma-5/kscreen.nix+2−2 pkgs/desktops/plasma-5/srcs.nix+214−214 pkgs/desktops/xfce/applications/mousepad/default.nix+2−2 pkgs/desktops/xfce/applications/xfce4-screensaver/default.nix+49 pkgs/desktops/xfce/applications/xfce4-terminal/default.nix+2−2 pkgs/desktops/xfce/core/thunar/default.nix+2−2 pkgs/desktops/xfce/core/xfce4-panel/default.nix+2−2 pkgs/desktops/xfce/default.nix+3−1 pkgs/desktops/xfce/panel-plugins/xfce4-eyes-plugin/default.nix+2−2 pkgs/development/beam-modules/elvis-erlang/default.nix+2−1 pkgs/development/beam-modules/erlang-ls/default.nix+3−3 pkgs/development/beam-modules/erlang-ls/rebar-deps.nix+8−7 pkgs/development/compilers/abcl/default.nix+6−1 pkgs/development/compilers/adoptopenjdk-bin/generate-sources.py+1 pkgs/development/compilers/adoptopenjdk-bin/jdk-darwin-base.nix+4−3 pkgs/development/compilers/adoptopenjdk-bin/jdk-linux-base.nix+3−3 pkgs/development/compilers/adoptopenjdk-bin/sources.json+244−100 pkgs/development/compilers/alan/2.nix+31 pkgs/development/compilers/alan/default.nix+48 pkgs/development/compilers/aldor/default.nix−54 pkgs/development/compilers/algol68g/default.nix+1 pkgs/development/compilers/aliceml/default.nix−59 pkgs/development/compilers/aliceml/make.patch−20 pkgs/development/compilers/aliceml/seam.patch−13 pkgs/development/compilers/bluespec/default.nix+13−5 pkgs/development/compilers/bupc/default.nix−1 pkgs/development/compilers/chez/default.nix+3−3 pkgs/development/compilers/chicken/5/chicken.nix+6−1 pkgs/development/compilers/chicken/5/eggs.nix+464−4 pkgs/development/compilers/chicken/5/eggs.scm+8 pkgs/development/compilers/coreclr/default.nix−100 pkgs/development/compilers/crystal/build-package.nix+5−1 pkgs/development/compilers/crystal/default.nix+1−1 pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh+14 pkgs/development/compilers/cudatoolkit/common.nix+1 pkgs/development/compilers/cudatoolkit/default.nix−90 pkgs/development/compilers/cudatoolkit/extension.nix+15 pkgs/development/compilers/cudatoolkit/redist/build-cuda-redist-package.nix+51 pkgs/development/compilers/cudatoolkit/redist/extension.nix+32 pkgs/development/compilers/cudatoolkit/redist/manifests/redistrib_11.4.4.json+862 pkgs/development/compilers/cudatoolkit/redist/manifests/redistrib_11.5.2.json+873 pkgs/development/compilers/cudatoolkit/redist/manifests/redistrib_11.6.2.json+873 pkgs/development/compilers/cudatoolkit/redist/overrides.nix+72 pkgs/development/compilers/cudatoolkit/versions.toml+61 pkgs/development/compilers/dmd/binary.nix+3−2 pkgs/development/compilers/dotnet/default.nix+27−27 pkgs/development/compilers/elm/default.nix+12 pkgs/development/compilers/elm/packages/node-packages.nix+1122−860 pkgs/development/compilers/fennel/default.nix+2−2 pkgs/development/compilers/gambit/build.nix+2−2 pkgs/development/compilers/gcc/10/default.nix+11−10 pkgs/development/compilers/gcc/10/gcc10-asan-glibc-2.34.patch+70 pkgs/development/compilers/gcc/11/default.nix+2−7 pkgs/development/compilers/gcc/4.8/default.nix+3−8 pkgs/development/compilers/gcc/4.9/default.nix+3−8 pkgs/development/compilers/gcc/6/default.nix+4−7 pkgs/development/compilers/gcc/6/gnat-glibc234.patch+30 pkgs/development/compilers/gcc/7/default.nix+6−7 pkgs/development/compilers/gcc/7/gcc8-asan-glibc-2.34.patch+70 pkgs/development/compilers/gcc/8/default.nix+3−7 pkgs/development/compilers/gcc/9/default.nix+9−8 pkgs/development/compilers/gcc/9/gcc9-asan-glibc-2.34.patch+70 pkgs/development/compilers/gcc/builder.sh+4 pkgs/development/compilers/ghc/8.10.2-binary.nix+14 pkgs/development/compilers/ghc/8.10.7-binary.nix+14−1 pkgs/development/compilers/ghc/8.10.7.nix+1−1 pkgs/development/compilers/ghc/9.0.2.nix+21 pkgs/development/compilers/ghc/head.nix+3−3 pkgs/development/compilers/ghcjs/8.10/common-overrides.nix+32−3 pkgs/development/compilers/ghcjs/8.10/default.nix+2−1 pkgs/development/compilers/glslang/default.nix+2−2 pkgs/development/compilers/go-jsonnet/default.nix+2−2 pkgs/development/compilers/go/1.16.nix+1−2 pkgs/development/compilers/go/1.17.nix+3−4 pkgs/development/compilers/go/1.18.nix+3−4 pkgs/development/compilers/go/2-dev.nix−276 pkgs/development/compilers/go/ssl-cert-file-2-dev.patch−54 pkgs/development/compilers/graalvm/community-edition/default.nix+58−10 pkgs/development/compilers/graalvm/community-edition/graalvm11-ce-sources.json+42 pkgs/development/compilers/graalvm/community-edition/graalvm17-ce-sources.json+42 pkgs/development/compilers/graalvm/community-edition/hashes.nix−57 pkgs/development/compilers/graalvm/community-edition/mkGraal.nix+112−112 pkgs/development/compilers/graalvm/community-edition/update.nix+225 pkgs/development/compilers/graalvm/community-edition/update.sh−81 pkgs/development/compilers/graalvm/enterprise-edition.nix−183 pkgs/development/compilers/hare/config-template.mk+27 pkgs/development/compilers/hare/hare.nix+93 pkgs/development/compilers/hare/harec.nix+45 pkgs/development/compilers/hhvm/default.nix−68 pkgs/development/compilers/hhvm/flexible-array-members-gcc6.patch−20 pkgs/development/compilers/inklecate/default.nix+1−1 pkgs/development/compilers/inklecate/deps-darwin.nix+1−1 pkgs/development/compilers/inklecate/deps-linux.nix+1−1 pkgs/development/compilers/jasmin-compiler/default.nix+41 pkgs/development/compilers/julia/1.6-bin.nix+2−2 pkgs/development/compilers/kotlin/default.nix+2−2 pkgs/development/compilers/kotlin/native.nix+4−4 pkgs/development/compilers/ldc/binary.nix+3−2 pkgs/development/compilers/llvm/10/llvm/default.nix+6 pkgs/development/compilers/llvm/11/llvm/default.nix+6 pkgs/development/compilers/llvm/12/llvm/default.nix+6 pkgs/development/compilers/llvm/13/llvm/default.nix+6 pkgs/development/compilers/llvm/14/clang/default.nix+1 pkgs/development/compilers/llvm/14/default.nix+2−2 pkgs/development/compilers/llvm/14/llvm/default.nix+6 pkgs/development/compilers/llvm/5/llvm/default.nix+6 pkgs/development/compilers/llvm/6/llvm/default.nix+6 pkgs/development/compilers/llvm/7/llvm/default.nix+6 pkgs/development/compilers/llvm/8/llvm/default.nix+6 pkgs/development/compilers/llvm/9/llvm/default.nix+6 pkgs/development/compilers/llvm/git/llvm/default.nix+6 pkgs/development/compilers/llvm/multi.nix+2−2 pkgs/development/compilers/mruby/default.nix+9−1 pkgs/development/compilers/mrustc/default.nix+1 pkgs/development/compilers/muon/default.nix → pkgs/development/compilers/muonlang/default.nix pkgs/development/compilers/obliv-c/default.nix+5−3 pkgs/development/compilers/ocaml/4.00.1.nix+7−1 pkgs/development/compilers/ocaml/4.01.0.nix+7−1 pkgs/development/compilers/ocaml/4.02.nix+7−1 pkgs/development/compilers/ocaml/4.03.nix+6 pkgs/development/compilers/ocaml/4.04.nix+6 pkgs/development/compilers/ocaml/4.05.nix+6 pkgs/development/compilers/ocaml/4.06.nix+6 pkgs/development/compilers/ocaml/4.07.nix+6 pkgs/development/compilers/ocaml/4.08.nix+6 pkgs/development/compilers/ocaml/4.09.nix+6 pkgs/development/compilers/ocaml/4.10.nix+3 pkgs/development/compilers/ocaml/4.11.nix+3 pkgs/development/compilers/ocaml/4.12.nix+5 pkgs/development/compilers/ocaml/4.14.nix+2−5 pkgs/development/compilers/ocaml/Makefile.nixpkgs+16 pkgs/development/compilers/ocaml/generic.nix+24−12 pkgs/development/compilers/ocaml/glibc-2.34-for-ocaml-4.10-and-11.patch+37 pkgs/development/compilers/ocaml/metaocaml-3.09.nix−34 pkgs/development/compilers/open-watcom/v2.nix+3−3 pkgs/development/compilers/opendylan/bin.nix+2−2 pkgs/development/compilers/openjdk/11.nix+8−4 pkgs/development/compilers/openjdk/16.nix+1 pkgs/development/compilers/openjdk/17.nix+3−3 pkgs/development/compilers/openjdk/8.nix+2−1 pkgs/development/compilers/openjdk/darwin/8.nix+6 pkgs/development/compilers/openjdk/fix-glibc-2.34.patch+24 pkgs/development/compilers/openjdk/fix-library-path-jdk11.patch+21−3 pkgs/development/compilers/polyml/5.6.nix+9−1 pkgs/development/compilers/polyml/5.7.nix+10−2 pkgs/development/compilers/polyml/default.nix+7−1 pkgs/development/compilers/ponyc/default.nix+2−11 pkgs/development/compilers/ponyc/disable-tests.patch+9−7 pkgs/development/compilers/ponyc/make-safe-for-sandbox.patch+17−12 pkgs/development/compilers/ponyc/pony-corral.nix+2−2 pkgs/development/compilers/purescript/purescript/default.nix+5−7 pkgs/development/compilers/purescript/purescript/test-minimal-module/Main.js+1−1 pkgs/development/compilers/purescript/purescript/test-minimal-module/default.nix+2−2 pkgs/development/compilers/qbe/default.nix+3−3 pkgs/development/compilers/rust/1_58.nix−63 pkgs/development/compilers/rust/1_60.nix+64 pkgs/development/compilers/rust/binary.nix+2−2 pkgs/development/compilers/rust/cargo.nix+1−1 pkgs/development/compilers/rust/rustfmt.nix+4−4 pkgs/development/compilers/sbcl/2.2.4.nix+4 pkgs/development/compilers/scryer-prolog/cargo.patch+27−74 pkgs/development/compilers/scryer-prolog/default.nix+19−6 pkgs/development/compilers/scryer-prolog/fix-tests.patch+29 pkgs/development/compilers/solc/default.nix+34−11 pkgs/development/compilers/squeak/default.nix+1−3 pkgs/development/compilers/swift/default.nix−6 pkgs/development/compilers/tinygo/default.nix+1−1 pkgs/development/compilers/uasm/default.nix+31−18 pkgs/development/compilers/urweb/default.nix+1−1 pkgs/development/compilers/vala/default.nix+2−2 pkgs/development/compilers/vlang/default.nix+1−1 pkgs/development/compilers/yosys/default.nix+2−2 pkgs/development/compilers/zulu/8.nix+9−3 pkgs/development/compilers/zulu/default.nix+7−1 pkgs/development/coq-modules/CoLoR/default.nix+2−1 pkgs/development/coq-modules/Verdi/default.nix+3 pkgs/development/coq-modules/aac-tactics/default.nix+6−2 pkgs/development/coq-modules/coqprime/default.nix+2−1 pkgs/development/coq-modules/coqtail-math/default.nix+6−1 pkgs/development/coq-modules/flocq/default.nix+2−2 pkgs/development/coq-modules/gappalib/default.nix+2−1 pkgs/development/coq-modules/mathcomp-word/default.nix+2−1 pkgs/development/coq-modules/metacoq/default.nix+76 pkgs/development/coq-modules/metalib/default.nix+7−3 pkgs/development/coq-modules/parsec/default.nix+6−2 pkgs/development/coq-modules/relation-algebra/default.nix+8−1 pkgs/development/coq-modules/simple-io/default.nix+10−3 pkgs/development/coq-modules/smtcoq/default.nix+26 pkgs/development/coq-modules/tlc/default.nix+2 pkgs/development/coq-modules/trakt/default.nix+24 pkgs/development/embedded/fpga/apio/default.nix+5−4 pkgs/development/embedded/openocd/default.nix+11 pkgs/development/embedded/platformio/core.nix+2−1 pkgs/development/embedded/stm32/betaflight/default.nix−64 pkgs/development/embedded/stm32/inav/default.nix−56 pkgs/development/embedded/stm32/stm32flash/default.nix+2−2 pkgs/development/gnuradio-modules/osmosdr/default.nix+2 pkgs/development/go-modules/generic/default.nix+12−5 pkgs/development/go-packages/generic/default.nix+11−3 pkgs/development/haskell-modules/HACKING.md+1−1 pkgs/development/haskell-modules/configuration-arm.nix−1 pkgs/development/haskell-modules/configuration-common.nix+119−64 pkgs/development/haskell-modules/configuration-darwin.nix+6−9 pkgs/development/haskell-modules/configuration-ghc-8.10.x.nix+25−9 pkgs/development/haskell-modules/configuration-ghc-8.6.x.nix+6 pkgs/development/haskell-modules/configuration-ghc-8.8.x.nix+23−8 pkgs/development/haskell-modules/configuration-ghc-9.0.x.nix+10 pkgs/development/haskell-modules/configuration-ghc-9.2.x.nix+14−2 pkgs/development/haskell-modules/configuration-ghc-head.nix+14−4 pkgs/development/haskell-modules/configuration-ghcjs.nix+1−1 pkgs/development/haskell-modules/configuration-hackage2nix/broken.yaml+30−4 pkgs/development/haskell-modules/configuration-hackage2nix/main.yaml+19−2 pkgs/development/haskell-modules/configuration-hackage2nix/stackage.yaml+167−159 pkgs/development/haskell-modules/configuration-hackage2nix/transitive-broken.yaml+18−10 pkgs/development/haskell-modules/configuration-nix.nix+16−3 pkgs/development/haskell-modules/generic-builder.nix+9−6 pkgs/development/haskell-modules/hackage-packages.nix+2961−3147 pkgs/development/haskell-modules/non-hackage-packages.nix+1 pkgs/development/haskell-modules/patches/graphql-engine-mapkeys.patch−33 pkgs/development/haskell-modules/with-packages-wrapper.nix+4−4 pkgs/development/idris-modules/default.nix+1−1 pkgs/development/interpreters/acl2/default.nix+3−3 pkgs/development/interpreters/alda/default.nix+3−3 pkgs/development/interpreters/bats/default.nix+2−2 pkgs/development/interpreters/clojure/babashka.nix+2−2 pkgs/development/interpreters/clojure/default.nix+2−2 pkgs/development/interpreters/dart/default.nix+6−1 pkgs/development/interpreters/duktape/default.nix+1 pkgs/development/interpreters/elixir/1.13.nix+2−2 pkgs/development/interpreters/gnu-apl/default.nix+3−1 pkgs/development/interpreters/guile/1.8.nix−1 pkgs/development/interpreters/guile/2.0.nix−1 pkgs/development/interpreters/guile/2.2.nix−1 pkgs/development/interpreters/guile/3.0.nix−1 pkgs/development/interpreters/janet/default.nix+2−2 pkgs/development/interpreters/joker/default.nix+2−2 pkgs/development/interpreters/lolcode/default.nix+1 pkgs/development/interpreters/luajit/2.0.nix+3−3 pkgs/development/interpreters/luajit/2.1.nix+3−3 pkgs/development/interpreters/luajit/default.nix+2−2 pkgs/development/interpreters/maude/default.nix+4 pkgs/development/interpreters/nickel/default.nix+33 pkgs/development/interpreters/octave/default.nix+3−10 pkgs/development/interpreters/perl/default.nix+21−18 pkgs/development/interpreters/php/7.4.nix+2−2 pkgs/development/interpreters/php/8.0.nix+2−2 pkgs/development/interpreters/php/8.1.nix+2−2 pkgs/development/interpreters/php/generic.nix+5−1 pkgs/development/interpreters/pixie/default.nix−94 pkgs/development/interpreters/pixie/dust.nix−46 pkgs/development/interpreters/pixie/load_paths.patch−25 pkgs/development/interpreters/pixie/make-paths-configurable.patch−119 pkgs/development/interpreters/pure/default.nix−46 pkgs/development/interpreters/python/cpython/3.11/python-3.x-distutils-C++.patch+257 pkgs/development/interpreters/python/cpython/default.nix+16−10 pkgs/development/interpreters/python/default.nix+7−12 pkgs/development/interpreters/python/graalpython/default.nix−21 pkgs/development/interpreters/python/hooks/default.nix+6 pkgs/development/interpreters/python/hooks/setuptools-build-hook.sh+3 pkgs/development/interpreters/python/hooks/sphinx-hook.sh+57 pkgs/development/interpreters/python/update-python-libraries/update-python-libraries.py+10−8 pkgs/development/interpreters/python/wrapper.nix+2−2 pkgs/development/interpreters/racket/default.nix+2−2 pkgs/development/interpreters/racket/minimal.nix+1−1 pkgs/development/interpreters/rakudo/default.nix+2−2 pkgs/development/interpreters/rakudo/moarvm.nix+2−2 pkgs/development/interpreters/rakudo/nqp.nix+12−2 pkgs/development/interpreters/ruby/default.nix+26−30 pkgs/development/interpreters/ruby/patchsets.nix+3−3 pkgs/development/interpreters/ruby/rbinstall-new-rubygems-compat.patch+87 pkgs/development/interpreters/ruby/rubygems/default.nix+1−1 pkgs/development/interpreters/scsh/default.nix+2−2 pkgs/development/interpreters/sollya/default.nix+2−2 pkgs/development/interpreters/spidermonkey/91.nix+2−2 pkgs/development/interpreters/starlark/default.nix+23 pkgs/development/interpreters/supercollider/default.nix+36−13 pkgs/development/interpreters/supercollider/plugins/sc3-plugins.nix+33 pkgs/development/interpreters/supercollider/supercollider-3.12.0-env-dirs.patch+65 pkgs/development/interpreters/supercollider/wrapper.nix+18 pkgs/development/interpreters/trealla/default.nix+1 pkgs/development/interpreters/wasmtime/default.nix+19−9 pkgs/development/interpreters/yex-lang/default.nix+1 pkgs/development/interpreters/zuo/default.nix+23 pkgs/development/java-modules/liquibase_redshift_extension/default.nix+27 pkgs/development/java-modules/redshift_jdbc/default.nix+28 pkgs/development/libraries/CoinMP/default.nix+2 pkgs/development/libraries/SDL2/default.nix+13−1 pkgs/development/libraries/SDL2/find-headers.patch+34 pkgs/development/libraries/SDL_audiolib/default.nix+53 pkgs/development/libraries/allegro/5.nix+2−1 pkgs/development/libraries/allegro/default.nix+2−1 pkgs/development/libraries/amdvlk/default.nix+2−2 pkgs/development/libraries/apache-activemq/default.nix+2−2 pkgs/development/libraries/applet-window-buttons/default.nix+2−2 pkgs/development/libraries/apr-util/default.nix+1−1 pkgs/development/libraries/aqbanking/gwenhywfar.nix+1−1 pkgs/development/libraries/argagg/0001-catch.diff+20 pkgs/development/libraries/argagg/default.nix+46 pkgs/development/libraries/armadillo/default.nix+2−2 pkgs/development/libraries/aspell/default.nix+19−2 pkgs/development/libraries/at-spi2-core/default.nix+2−2 pkgs/development/libraries/audio/libopenmpt/default.nix+66 pkgs/development/libraries/audio/libopenmpt/update.sh+31 pkgs/development/libraries/audio/libspecbleach/default.nix+26 pkgs/development/libraries/audio/lilv/default.nix+1 pkgs/development/libraries/audio/lv2/default.nix+2 pkgs/development/libraries/audio/sratom/default.nix+1 pkgs/development/libraries/avahi/default.nix+5−1 pkgs/development/libraries/avro-c/default.nix+2−2 pkgs/development/libraries/aws-c-sdkutils/default.nix+2−2 pkgs/development/libraries/aws-sdk-cpp/default.nix+41−12 pkgs/development/libraries/bash/bash-preexec/default.nix+2−2 pkgs/development/libraries/bashup-events/generic.nix+2−2 pkgs/development/libraries/bc-decaf/default.nix+36 pkgs/development/libraries/bctoolbox/default.nix+19−7 pkgs/development/libraries/belcard/default.nix+4−3 pkgs/development/libraries/belle-sip/default.nix+10−9 pkgs/development/libraries/belr/default.nix+4−3 pkgs/development/libraries/boost/1.69.nix+2 pkgs/development/libraries/boost/1.70.nix+2 pkgs/development/libraries/boost/1.72.nix+2 pkgs/development/libraries/boost/1.78.nix+15 pkgs/development/libraries/boost/default.nix+1 pkgs/development/libraries/boost/generic.nix+23−5 pkgs/development/libraries/boost/pthread-stack-min-fix.patch+15 pkgs/development/libraries/botan/default.nix−17 pkgs/development/libraries/bullet/default.nix+2−2 pkgs/development/libraries/bzrtp/default.nix+5−6 pkgs/development/libraries/catch/default.nix+6 pkgs/development/libraries/cgreen/default.nix+6 pkgs/development/libraries/civetweb/default.nix+2−1 pkgs/development/libraries/clucene-core/2.x.nix+4−1 pkgs/development/libraries/clucene-core/default.nix+4 pkgs/development/libraries/cpp-hocon/default.nix+4 pkgs/development/libraries/cpp-ipfs-api/default.nix+4 pkgs/development/libraries/cpp-utilities/default.nix+2−2 pkgs/development/libraries/cutelyst/default.nix+13−4 pkgs/development/libraries/cwiid/default.nix+2−2 pkgs/development/libraries/cxxopts/default.nix+2−2 pkgs/development/libraries/cyrus-sasl/cyrus-sasl-ac-try-run-fix.patch+12−11 pkgs/development/libraries/cyrus-sasl/default.nix+12−13 pkgs/development/libraries/cyrus-sasl/missing-size_t.patch−13 pkgs/development/libraries/dav1d/default.nix+4−2 pkgs/development/libraries/dbus/default.nix+7 pkgs/development/libraries/docopt_cpp/default.nix+10−2 pkgs/development/libraries/doctest/default.nix+5−5 pkgs/development/libraries/dotconf/default.nix+1−1 pkgs/development/libraries/duckdb/default.nix+36−3 pkgs/development/libraries/entt/default.nix+2−2 pkgs/development/libraries/expat/default.nix+3−2 pkgs/development/libraries/faudio/default.nix+2−2 pkgs/development/libraries/fcft/default.nix+2−2 pkgs/development/libraries/ffmpeg/0001-fate-ffmpeg-add-missing-samples-dependency-to-fate-s.patch−27 pkgs/development/libraries/ffmpeg/5.nix+2−4 pkgs/development/libraries/ffmpegthumbnailer/default.nix+3−3 pkgs/development/libraries/flatcc/default.nix+5 pkgs/development/libraries/flint/default.nix+2 pkgs/development/libraries/fltk/common.nix+2−9 pkgs/development/libraries/freeimage/default.nix+4−4 pkgs/development/libraries/freeimage/unbundle.diff+39−39 pkgs/development/libraries/freetype/default.nix+2−2 pkgs/development/libraries/gcc/libgcc/default.nix+1−1 pkgs/development/libraries/gcr/default.nix+2−7 pkgs/development/libraries/gdal/2.4.nix+11−1 pkgs/development/libraries/gdal/default.nix+40 pkgs/development/libraries/gdata-sharp/default.nix−42 pkgs/development/libraries/gdcm/default.nix+2−2 pkgs/development/libraries/gecode/3.nix+2−2 pkgs/development/libraries/gensio/default.nix+2−2 pkgs/development/libraries/geos/3.9.nix+25 pkgs/development/libraries/geos/default.nix+15−6 pkgs/development/libraries/ggz_base_libs/default.nix+3−4 pkgs/development/libraries/ghc_filesystem/default.nix+2−2 pkgs/development/libraries/glfw/3.x.nix+4−5 pkgs/development/libraries/glib/default.nix+9−3 pkgs/development/libraries/glib/elementary-terminal-support.patch+16 pkgs/development/libraries/glib/gnome-console-support.patch+55 pkgs/development/libraries/glibc/0001-Revert-Remove-all-usage-of-BASH-or-BASH-in-installed.patch+131 pkgs/development/libraries/glibc/2.33-master.patch.gz pkgs/development/libraries/glibc/2.34-master.patch.gz pkgs/development/libraries/glibc/common.nix+21−8 pkgs/development/libraries/glibc/default.nix+15−7 pkgs/development/libraries/glibc/nix-locale-archive.patch+24−21 pkgs/development/libraries/glibmm/2.68.nix+2−2 pkgs/development/libraries/glibmm/default.nix+2−2 pkgs/development/libraries/glm/default.nix+5 pkgs/development/libraries/globalplatform/default.nix−21 pkgs/development/libraries/globalplatform/gppcscconnectionplugin.nix−21 pkgs/development/libraries/glog/default.nix+5−14 pkgs/development/libraries/gmp/6.x.nix+1−1 pkgs/development/libraries/gnome-online-accounts/default.nix+2−2 pkgs/development/libraries/gnutls-kdh/3.5.nix−12 pkgs/development/libraries/gnutls-kdh/generic.nix−95 pkgs/development/libraries/goffice/default.nix+3−3 pkgs/development/libraries/goocanvas/2.x.nix+2−2 pkgs/development/libraries/graphene-hardened-malloc/default.nix+15−8 pkgs/development/libraries/graphene/0001-meson-add-options-for-tests-installation-dirs.patch+13−59 pkgs/development/libraries/graphene/default.nix+14−3 pkgs/development/libraries/grpc/default.nix+2−2 pkgs/development/libraries/gsettings-desktop-schemas/default.nix+9−3 pkgs/development/libraries/gspell/default.nix+2−2 pkgs/development/libraries/gstreamer/bad/default.nix+5−3 pkgs/development/libraries/gstreamer/base/default.nix+2−2 pkgs/development/libraries/gstreamer/core/default.nix+2−2 pkgs/development/libraries/gstreamer/default.nix+2 pkgs/development/libraries/gstreamer/devtools/default.nix+2−2 pkgs/development/libraries/gstreamer/ges/default.nix+2−2 pkgs/development/libraries/gstreamer/good/default.nix+2−2 pkgs/development/libraries/gstreamer/libav/default.nix+2−2 pkgs/development/libraries/gstreamer/rtsp-server/default.nix+2−2 pkgs/development/libraries/gstreamer/ugly/default.nix+2−2 pkgs/development/libraries/gstreamer/vaapi/default.nix+2−2 pkgs/development/libraries/gstreamer/viperfx/default.nix+41 pkgs/development/libraries/gtk-frdp/default.nix+3−5 pkgs/development/libraries/gtk/4.x.nix+2−2 pkgs/development/libraries/gtkmathview/default.nix−29 pkgs/development/libraries/gtkmathview/gcc-4.3-build-fixes.patch−74 pkgs/development/libraries/gtkmathview/gcc-4.4-build-fixes.patch−21 pkgs/development/libraries/gtkmm/2.x.nix+3−3 pkgs/development/libraries/gtksourceview/5.x.nix+2−2 pkgs/development/libraries/gusb/default.nix+2−2 pkgs/development/libraries/gvfs/default.nix+2−2 pkgs/development/libraries/hivex/default.nix+2−2 pkgs/development/libraries/hspell/dicts.nix+4−4 pkgs/development/libraries/htmlcxx/c++17.patch+24 pkgs/development/libraries/htmlcxx/default.nix+7−4 pkgs/development/libraries/http-parser/default.nix+9−2 pkgs/development/libraries/hunspell/dictionaries.nix+2−3 pkgs/development/libraries/hwloc/default.nix+2−2 pkgs/development/libraries/hyperscan/default.nix+2−2 pkgs/development/libraries/igraph/default.nix+10−6 pkgs/development/libraries/ijs/default.nix+2−3 pkgs/development/libraries/ilixi/default.nix−35 pkgs/development/libraries/imath/default.nix+2−2 pkgs/development/libraries/inih/default.nix+3−3 pkgs/development/libraries/intel-media-driver/default.nix+2−2 pkgs/development/libraries/intel-media-sdk/default.nix+2−2 pkgs/development/libraries/isl/generic.nix+2−1 pkgs/development/libraries/jarowinkler-cpp/default.nix+41 pkgs/development/libraries/java/commons/daemon/default.nix+2−2 pkgs/development/libraries/jcal/default.nix+1−1 pkgs/development/libraries/jellyfin-ffmpeg/default.nix+30 pkgs/development/libraries/jsoncpp/default.nix+27−3 pkgs/development/libraries/kde-frameworks/attica.nix+1−1 pkgs/development/libraries/kde-frameworks/baloo.nix+1−1 pkgs/development/libraries/kde-frameworks/bluez-qt.nix+1−1 pkgs/development/libraries/kde-frameworks/breeze-icons.nix+1−1 pkgs/development/libraries/kde-frameworks/default.nix+4−5 pkgs/development/libraries/kde-frameworks/extra-cmake-modules/default.nix+1−1 pkgs/development/libraries/kde-frameworks/fetch.sh+1−1 pkgs/development/libraries/kde-frameworks/frameworkintegration.nix+1−1 pkgs/development/libraries/kde-frameworks/kactivities-stats.nix+1−1 pkgs/development/libraries/kde-frameworks/kactivities.nix+1−1 pkgs/development/libraries/kde-frameworks/kapidox.nix+1−1 pkgs/development/libraries/kde-frameworks/karchive.nix+1−1 pkgs/development/libraries/kde-frameworks/kauth/default.nix+1−1 pkgs/development/libraries/kde-frameworks/kbookmarks.nix+1−1 pkgs/development/libraries/kde-frameworks/kcalendarcore.nix+1−1 pkgs/development/libraries/kde-frameworks/kcmutils/default.nix+1−1 pkgs/development/libraries/kde-frameworks/kcodecs.nix+1−1 pkgs/development/libraries/kde-frameworks/kcompletion.nix+1−1 pkgs/development/libraries/kde-frameworks/kconfig.nix+1−1 pkgs/development/libraries/kde-frameworks/kconfigwidgets/default.nix+1−1 pkgs/development/libraries/kde-frameworks/kcontacts.nix+1−1 pkgs/development/libraries/kde-frameworks/kcoreaddons.nix+1−1 pkgs/development/libraries/kde-frameworks/kcrash.nix+1−1 pkgs/development/libraries/kde-frameworks/kdav.nix+1−1 pkgs/development/libraries/kde-frameworks/kdbusaddons.nix+1−1 pkgs/development/libraries/kde-frameworks/kdeclarative.nix+1−1 pkgs/development/libraries/kde-frameworks/kded.nix+1−1 pkgs/development/libraries/kde-frameworks/kdelibs4support/default.nix+1−1 pkgs/development/libraries/kde-frameworks/kdesignerplugin.nix+1−1 pkgs/development/libraries/kde-frameworks/kdesu/default.nix+1−1 pkgs/development/libraries/kde-frameworks/kdewebkit.nix+1−1 pkgs/development/libraries/kde-frameworks/kdnssd.nix+1−1 pkgs/development/libraries/kde-frameworks/kdoctools/default.nix+1−1 pkgs/development/libraries/kde-frameworks/kemoticons.nix+1−1 pkgs/development/libraries/kde-frameworks/kfilemetadata/default.nix+1−1 pkgs/development/libraries/kde-frameworks/kglobalaccel.nix+1−1 pkgs/development/libraries/kde-frameworks/kguiaddons.nix+1−1 pkgs/development/libraries/kde-frameworks/kholidays.nix+1−1 pkgs/development/libraries/kde-frameworks/khtml.nix+1−1 pkgs/development/libraries/kde-frameworks/ki18n.nix+1−1 pkgs/development/libraries/kde-frameworks/kiconthemes/default.nix+1−1 pkgs/development/libraries/kde-frameworks/kidletime.nix+1−1 pkgs/development/libraries/kde-frameworks/kimageformats.nix+1−1 pkgs/development/libraries/kde-frameworks/kinit/default.nix+1−1 pkgs/development/libraries/kde-frameworks/kio/default.nix+1−1 pkgs/development/libraries/kde-frameworks/kirigami2.nix+1−1 pkgs/development/libraries/kde-frameworks/kitemmodels.nix+1−1 pkgs/development/libraries/kde-frameworks/kitemviews.nix+1−1 pkgs/development/libraries/kde-frameworks/kjobwidgets.nix+1−1 pkgs/development/libraries/kde-frameworks/kjs.nix+1−1 pkgs/development/libraries/kde-frameworks/kjsembed.nix+1−1 pkgs/development/libraries/kde-frameworks/kmediaplayer.nix+1−1 pkgs/development/libraries/kde-frameworks/knewstuff/default.nix+1−1 pkgs/development/libraries/kde-frameworks/knotifications.nix+1−1 pkgs/development/libraries/kde-frameworks/knotifyconfig.nix+1−1 pkgs/development/libraries/kde-frameworks/kpackage/default.nix+1−1 pkgs/development/libraries/kde-frameworks/kparts.nix+1−1 pkgs/development/libraries/kde-frameworks/kpeople.nix+1−1 pkgs/development/libraries/kde-frameworks/kplotting.nix+1−1 pkgs/development/libraries/kde-frameworks/kpty.nix+1−1 pkgs/development/libraries/kde-frameworks/kquickcharts.nix+1−1 pkgs/development/libraries/kde-frameworks/kross.nix+1−1 pkgs/development/libraries/kde-frameworks/krunner.nix+1−1 pkgs/development/libraries/kde-frameworks/kservice/default.nix+1−1 pkgs/development/libraries/kde-frameworks/ktexteditor.nix+1−1 pkgs/development/libraries/kde-frameworks/ktextwidgets.nix+1−1 pkgs/development/libraries/kde-frameworks/kunitconversion.nix+1−1 pkgs/development/libraries/kde-frameworks/kwallet.nix+1−1 pkgs/development/libraries/kde-frameworks/kwayland.nix+1−1 pkgs/development/libraries/kde-frameworks/kwidgetsaddons.nix+1−1 pkgs/development/libraries/kde-frameworks/kwindowsystem/default.nix+1−1 pkgs/development/libraries/kde-frameworks/kxmlgui.nix+1−1 pkgs/development/libraries/kde-frameworks/kxmlrpcclient.nix+1−1 pkgs/development/libraries/kde-frameworks/modemmanager-qt.nix+1−1 pkgs/development/libraries/kde-frameworks/networkmanager-qt.nix+1−1 pkgs/development/libraries/kde-frameworks/oxygen-icons5.nix+1−1 pkgs/development/libraries/kde-frameworks/plasma-framework.nix+1−1 pkgs/development/libraries/kde-frameworks/prison.nix+1−1 pkgs/development/libraries/kde-frameworks/purpose.nix+1−1 pkgs/development/libraries/kde-frameworks/qqc2-desktop-style.nix+1−1 pkgs/development/libraries/kde-frameworks/solid.nix+1−1 pkgs/development/libraries/kde-frameworks/sonnet.nix+1−1 pkgs/development/libraries/kde-frameworks/srcs.nix+332−332 pkgs/development/libraries/kde-frameworks/syndication.nix+1−1 pkgs/development/libraries/kde-frameworks/syntax-highlighting.nix+1−1 pkgs/development/libraries/kde-frameworks/threadweaver.nix+1−1 pkgs/development/libraries/kerberos/krb5.nix+1−1 pkgs/development/libraries/khronos-ocl-icd-loader/default.nix+1−1 pkgs/development/libraries/kpmcore/default.nix+10−18 pkgs/development/libraries/languagemachines/frog.nix+1−1 pkgs/development/libraries/languagemachines/frogdata.nix+1−1 pkgs/development/libraries/languagemachines/libfolia.nix+1−1 pkgs/development/libraries/languagemachines/mbt.nix+1−1 pkgs/development/libraries/languagemachines/ticcutils.nix+1−1 pkgs/development/libraries/languagemachines/timbl.nix+1−1 pkgs/development/libraries/languagemachines/timblserver.nix+1−1 pkgs/development/libraries/languagemachines/ucto.nix+1−1 pkgs/development/libraries/languagemachines/uctodata.nix+1−1 pkgs/development/libraries/lasso/default.nix+35−9 pkgs/development/libraries/leatherman/default.nix+2 pkgs/development/libraries/leveldb/default.nix+1−5 pkgs/development/libraries/libadwaita/default.nix+2−2 pkgs/development/libraries/libappindicator/default.nix+2−2 pkgs/development/libraries/libarchive/default.nix+75−33 pkgs/development/libraries/libargon2/default.nix+3−1 pkgs/development/libraries/libargs/default.nix+2−2 pkgs/development/libraries/libavif/default.nix+2−2 pkgs/development/libraries/libcbor/default.nix+2−2 pkgs/development/libraries/libcef/default.nix+6−6 pkgs/development/libraries/libcollectdclient/default.nix+2−1 pkgs/development/libraries/libdeltachat/default.nix+3−5 pkgs/development/libraries/libdvbcsa/default.nix+22 pkgs/development/libraries/libe57format/default.nix+9 pkgs/development/libraries/libechonest/default.nix+3 pkgs/development/libraries/libepoxy/default.nix+2−3 pkgs/development/libraries/libevdev/default.nix+2−2 pkgs/development/libraries/libfido2/default.nix+2−2 pkgs/development/libraries/libfive/default.nix+1 pkgs/development/libraries/libgcrypt/default.nix+2−2 pkgs/development/libraries/libguestfs/default.nix+2−2 pkgs/development/libraries/libhandy/default.nix+5−2 pkgs/development/libraries/libinjection/default.nix+12−4 pkgs/development/libraries/libinput/default.nix+17−7 pkgs/development/libraries/libixp-hg/default.nix−27 pkgs/development/libraries/libixp/default.nix+28 pkgs/development/libraries/libjcat/default.nix+4−3 pkgs/development/libraries/libjpeg-turbo/default.nix+2−2 pkgs/development/libraries/libjson/default.nix+1 pkgs/development/libraries/libjxl/default.nix+1−1 pkgs/development/libraries/libkqueue/default.nix+23 pkgs/development/libraries/liblastfm/default.nix+5 pkgs/development/libraries/liblinphone/default.nix+23−9 pkgs/development/libraries/liblinphone/use-normal-jsoncpp.patch+57 pkgs/development/libraries/libmnl/default.nix+2−2 pkgs/development/libraries/libnet/default.nix+14−6 pkgs/development/libraries/libnet/fix-includes.patch−29 pkgs/development/libraries/libnetfilter_conntrack/default.nix+11−3 pkgs/development/libraries/libnfc/default.nix+10−7 pkgs/development/libraries/libnfnetlink/Use-stdlib-uint-instead-of-u_int.patch−499 pkgs/development/libraries/libnfnetlink/default.nix+2−6 pkgs/development/libraries/libnftnl/default.nix+1−1 pkgs/development/libraries/libngspice/default.nix+2−2 pkgs/development/libraries/libosmscout/default.nix+11−8 pkgs/development/libraries/libotr/default.nix+2 pkgs/development/libraries/libotr/fix-regtest-client.patch+11 pkgs/development/libraries/libowfat/default.nix+3 pkgs/development/libraries/libpinyin/default.nix+3−3 pkgs/development/libraries/libpostal/default.nix+1−1 pkgs/development/libraries/libpqxx/6.nix+4−4 pkgs/development/libraries/libpqxx/default.nix+2−2 pkgs/development/libraries/libqalculate/default.nix+2−2 pkgs/development/libraries/libraspberrypi/default.nix+3−3 pkgs/development/libraries/libraw/default.nix+4−4 pkgs/development/libraries/libraw/unstable.nix+12 pkgs/development/libraries/librealsense/default.nix+3−3 pkgs/development/libraries/libressl/fix-build-with-glibc.patch+92 pkgs/development/libraries/libsecret/default.nix+25−10 pkgs/development/libraries/libslirp/default.nix+2−2 pkgs/development/libraries/libsoup/3.x.nix+2−2 pkgs/development/libraries/libspf2/default.nix+9−1 pkgs/development/libraries/libsystemtap/default.nix+9−6 pkgs/development/libraries/libtiff/default.nix+30 pkgs/development/libraries/libuldaq/default.nix+2−2 pkgs/development/libraries/libunistring/default.nix+2−2 pkgs/development/libraries/libunwind/default.nix+9−1 pkgs/development/libraries/libusb1/default.nix+4−10 pkgs/development/libraries/libuv/default.nix+3−2 pkgs/development/libraries/libva/1.0.0.nix−37 pkgs/development/libraries/libva/1.nix+50 pkgs/development/libraries/libva/default.nix+4−4 pkgs/development/libraries/libva/utils.nix+3−3 pkgs/development/libraries/libvdpau/default.nix+2−2 pkgs/development/libraries/libviperfx/default.nix+30 pkgs/development/libraries/libvirt/default.nix+7−1 pkgs/development/libraries/libvmaf/default.nix+2−2 pkgs/development/libraries/libwacom/default.nix+2−2 pkgs/development/libraries/libwebsockets/default.nix+14−3 pkgs/development/libraries/libxcrypt/default.nix+6−2 pkgs/development/libraries/libxmlb/default.nix+4−12 pkgs/development/libraries/libxsmm/default.nix+1−3 pkgs/development/libraries/libyang/default.nix+2−2 pkgs/development/libraries/lime/default.nix+15−5 pkgs/development/libraries/liquid-dsp/default.nix+4−5 pkgs/development/libraries/live555/default.nix+2−2 pkgs/development/libraries/log4shib/default.nix+2 pkgs/development/libraries/mapbox-gl-native/default.nix+5 pkgs/development/libraries/mapbox-gl-qml/default.nix+4−7 pkgs/development/libraries/maplibre-gl-native/default.nix+66 pkgs/development/libraries/mediastreamer/default.nix+22−15 pkgs/development/libraries/mediastreamer/msopenh264.nix+6−7 pkgs/development/libraries/mesa/default.nix+8−5 pkgs/development/libraries/mimetic/default.nix+8−2 pkgs/development/libraries/mlt/qt-5.nix+1 pkgs/development/libraries/mpich/default.nix+5−2 pkgs/development/libraries/mustache-hpp/default.nix+3−3 pkgs/development/libraries/mvapich/default.nix+1 pkgs/development/libraries/netcdf-fortran/default.nix+3 pkgs/development/libraries/netcdf/default.nix+6−18 pkgs/development/libraries/nghttp2/default.nix+63−43 pkgs/development/libraries/nghttp3/default.nix+3−3 pkgs/development/libraries/ngtcp2/default.nix+3−3 pkgs/development/libraries/nlopt/default.nix+2−2 pkgs/development/libraries/notcurses/default.nix+3−3 pkgs/development/libraries/nss/85_security_load_3.77+.patch+76 pkgs/development/libraries/nss/esr.nix+4 pkgs/development/libraries/nss/generic.nix+11−11 pkgs/development/libraries/nss/latest.nix+10 pkgs/development/libraries/ntdb/default.nix−51 pkgs/development/libraries/openal-soft/default.nix+14−8 pkgs/development/libraries/openal-soft/search-out.patch+2−2 pkgs/development/libraries/opendht/default.nix+2−2 pkgs/development/libraries/openfst/default.nix+2−2 pkgs/development/libraries/openjpeg/default.nix+1−1 pkgs/development/libraries/openldap/default.nix+1−1 pkgs/development/libraries/openmpi/default.nix+2−2 pkgs/development/libraries/openssl/1.0.2/darwin64-arm64.patch−12 pkgs/development/libraries/openssl/1.0.2/nix-ssl-cert-file.patch−16 pkgs/development/libraries/openssl/1.0.2/use-etc-ssl-certs-darwin.patch−13 pkgs/development/libraries/openssl/1.0.2/use-etc-ssl-certs.patch−13 pkgs/development/libraries/openssl/chacha.nix−82 pkgs/development/libraries/openssl/default.nix+8−16 pkgs/development/libraries/opensubdiv/default.nix+9−2 pkgs/development/libraries/openvino/default.nix+3−1 pkgs/development/libraries/ortp/default.nix+5−4 pkgs/development/libraries/pcmsolver/default.nix+9−2 pkgs/development/libraries/pcre/default.nix+1−1 pkgs/development/libraries/pcre2/default.nix+1−3 pkgs/development/libraries/pdal/default.nix+2−2 pkgs/development/libraries/phash/default.nix+2−2 pkgs/development/libraries/physics/cernlib/default.nix+2−2 pkgs/development/libraries/physics/lhapdf/maintainer.sh+2−2 pkgs/development/libraries/physics/lhapdf/pdf_sets.nix+431−129 pkgs/development/libraries/physics/qcdnum/default.nix+4 pkgs/development/libraries/pipewire/default.nix+8−2 pkgs/development/libraries/pmdk/default.nix+4−2 pkgs/development/libraries/pocketsphinx/default.nix−48 pkgs/development/libraries/polkit-qt-1/default.nix+2−2 pkgs/development/libraries/polkit/default.nix+6 pkgs/development/libraries/poppler/0.61-CVE-2019-9959.patch−20 pkgs/development/libraries/poppler/0.61.nix−94 pkgs/development/libraries/proj/default.nix+17−8 pkgs/development/libraries/protobuf/2.5.nix−10 pkgs/development/libraries/protobuf/generic.nix−61 pkgs/development/libraries/protolock/default.nix−2 pkgs/development/libraries/ptex/default.nix+2−2 pkgs/development/libraries/qca-qt5/2.3.2.nix+30 pkgs/development/libraries/qca-qt5/default.nix+5−10 pkgs/development/libraries/qrupdate/default.nix+8−6 pkgs/development/libraries/qt-5/5.12/default.nix+9−1 pkgs/development/libraries/qt-5/5.14/default.nix+8−2 pkgs/development/libraries/qt-5/5.14/qtwayland-libdrm-build.patch−56 pkgs/development/libraries/qt-5/5.15/default.nix+1−1 pkgs/development/libraries/qt-5/5.15/srcs-generated.json+63−63 pkgs/development/libraries/qt-5/modules/qtbase.nix+10−6 pkgs/development/libraries/qt-5/modules/qtmultimedia.nix+3−2 pkgs/development/libraries/qt-5/modules/qtwayland-app_id.patch+36 pkgs/development/libraries/qt-5/modules/qtwayland.nix+6 pkgs/development/libraries/qt-5/modules/qtwebengine.nix+22−6 pkgs/development/libraries/qt-5/qtModule.nix+1−1 pkgs/development/libraries/qtutilities/default.nix+2−2 pkgs/development/libraries/quictls/default.nix+3−8 pkgs/development/libraries/qwt/default.nix+2 pkgs/development/libraries/qxt/default.nix−34 pkgs/development/libraries/rapidcheck/default.nix+1−1 pkgs/development/libraries/rapidfuzz-cpp/default.nix+41 pkgs/development/libraries/re2/default.nix+2−2 pkgs/development/libraries/recastnavigation/default.nix+7−1 pkgs/development/libraries/redis-plus-plus/default.nix+38 pkgs/development/libraries/rlottie/default.nix+16−1 pkgs/development/libraries/robin-map/default.nix+2−2 pkgs/development/libraries/rocclr/default.nix+2−2 pkgs/development/libraries/rocm-comgr/default.nix+2−2 pkgs/development/libraries/rocm-device-libs/default.nix+2−2 pkgs/development/libraries/rocm-runtime/default.nix+2−2 pkgs/development/libraries/rocm-thunk/default.nix+2−2 pkgs/development/libraries/s2n-tls/default.nix+3 pkgs/development/libraries/science/astronomy/indilib/default.nix+2−2 pkgs/development/libraries/science/astronomy/wcslib/default.nix+2−2 pkgs/development/libraries/science/biology/htslib/default.nix+18−2 pkgs/development/libraries/science/math/blis/default.nix+2−2 pkgs/development/libraries/science/math/caffe2/default.nix−147 pkgs/development/libraries/science/math/caffe2/fix_compilation_on_gcc7.patch−46 pkgs/development/libraries/science/math/caffe2/update_clang_cvtsh_bugfix.patch−55 pkgs/development/libraries/science/math/cudnn/default.nix−118 pkgs/development/libraries/science/math/cudnn/extension.nix+116 pkgs/development/libraries/science/math/cudnn/generic.nix+62−43 pkgs/development/libraries/science/math/cutensor/default.nix−49 pkgs/development/libraries/science/math/cutensor/generic.nix+2−2 pkgs/development/libraries/science/math/liblapack/default.nix+2−11 pkgs/development/libraries/science/math/libtorch/test/default.nix+3−2 pkgs/development/libraries/science/math/magma/default.nix+7−20 pkgs/development/libraries/science/math/nccl/default.nix+6−2 pkgs/development/libraries/science/math/petsc/default.nix+2−2 pkgs/development/libraries/science/math/scalapack/default.nix+8−1 pkgs/development/libraries/science/math/tensorflow/bin.nix+4−1 pkgs/development/libraries/science/math/zn_poly/default.nix+4−14 pkgs/development/libraries/seasocks/default.nix+7−1 pkgs/development/libraries/simgear/default.nix+2−2 pkgs/development/libraries/simpleitk/default.nix+2 pkgs/development/libraries/skalibs/default.nix+2−2 pkgs/development/libraries/slang/default.nix+7 pkgs/development/libraries/smesh/default.nix+2 pkgs/development/libraries/snack/default.nix−36 pkgs/development/libraries/soci/bc-soci.nix+53 pkgs/development/libraries/soci/default.nix+1−1 pkgs/development/libraries/spdlog/default.nix+7−3 pkgs/development/libraries/sphinxbase/default.nix−40 pkgs/development/libraries/spirv-headers/default.nix+2−2 pkgs/development/libraries/sqlite/default.nix+4−2 pkgs/development/libraries/sqlite/tools.nix+2−2 pkgs/development/libraries/sundials/default.nix+13 pkgs/development/libraries/symengine/default.nix+5 pkgs/development/libraries/tachyon/default.nix+2−2 pkgs/development/libraries/talloc/default.nix+2−1 pkgs/development/libraries/taskflow/default.nix+50 pkgs/development/libraries/taskflow/unvendor-doctest.patch+21 pkgs/development/libraries/tdlib/default.nix+3−3 pkgs/development/libraries/template-glib/default.nix+2−2 pkgs/development/libraries/tomlc99/default.nix+30 pkgs/development/libraries/tomlcpp/0001-missing-headers.diff+15 pkgs/development/libraries/tomlcpp/default.nix+35 pkgs/development/libraries/tpm2-tss/default.nix+7−3 pkgs/development/libraries/umockdev/default.nix+2−2 pkgs/development/libraries/unixODBCDrivers/default.nix+47−4 pkgs/development/libraries/utmps/default.nix+2−2 pkgs/development/libraries/valhalla/default.nix+2−2 pkgs/development/libraries/vapoursynth/default.nix+4−7 pkgs/development/libraries/vigra/default.nix+3−15 pkgs/development/libraries/vulkan-headers/default.nix+2−2 pkgs/development/libraries/vulkan-loader/default.nix+6−3 pkgs/development/libraries/vulkan-loader/fix-pkgconfig.patch+14 pkgs/development/libraries/wasilibc/default.nix+19−14 pkgs/development/libraries/waylandpp/default.nix+4−3 pkgs/development/libraries/webkitgtk/default.nix+2−2 pkgs/development/libraries/wolfssl/default.nix+2−2 pkgs/development/libraries/wxwidgets/wxGTK28.nix−2 pkgs/development/libraries/wxwidgets/wxGTK29.nix−1 pkgs/development/libraries/wxwidgets/wxGTK30.nix+2−3 pkgs/development/libraries/wxwidgets/wxGTK31.nix+3−5 pkgs/development/libraries/wxwidgets/wxmac30.nix+7−5 pkgs/development/libraries/xalanc/default.nix+2−1 pkgs/development/libraries/xdg-desktop-portal-gnome/default.nix+2−2 pkgs/development/libraries/xdg-desktop-portal-gtk/default.nix+2−2 pkgs/development/libraries/xdg-desktop-portal/default.nix+18−12 pkgs/development/libraries/xdg-desktop-portal/fix-paths.patch−13 pkgs/development/libraries/xgboost/default.nix+5−5 pkgs/development/libraries/zeroc-ice/3.6.nix−59 pkgs/development/libraries/zeroc-ice/default.nix+13 pkgs/development/libraries/zeroc-ice/uninitialized-variable-warning.patch−20 pkgs/development/libraries/zlib/CVE-2018-25032-1.patch+346 pkgs/development/libraries/zlib/CVE-2018-25032-2.patch+27 pkgs/development/libraries/zlib/default.nix+6−4 pkgs/development/libraries/zlib/disable-cygwin-widechar.patch−13 pkgs/development/libraries/zlib/fix-configure-issue-cross.patch+24 pkgs/development/lisp-modules-new/.gitattributes+1 pkgs/development/lisp-modules-new/.gitignore+3 pkgs/development/lisp-modules-new/doc/api.md+197 pkgs/development/lisp-modules-new/doc/nix-cl.md+98 pkgs/development/lisp-modules-new/doc/quicklisp.md+54 pkgs/development/lisp-modules-new/doc/quirks.md+5 pkgs/development/lisp-modules-new/examples/abcl-package-set.nix+24 pkgs/development/lisp-modules-new/examples/abcl-with-packages.nix+23 pkgs/development/lisp-modules-new/examples/bordeaux-threads.nix+43 pkgs/development/lisp-modules-new/examples/sbcl-with-bt.nix+31 pkgs/development/lisp-modules-new/import/api.lisp+18 pkgs/development/lisp-modules-new/import/database/sqlite.lisp+134 pkgs/development/lisp-modules-new/import/init.sql+41 pkgs/development/lisp-modules-new/import/main.lisp+40 pkgs/development/lisp-modules-new/import/nix.lisp+81 pkgs/development/lisp-modules-new/import/org.lispbuilds.nix.asd+24 pkgs/development/lisp-modules-new/import/repository/quicklisp.lisp+199 pkgs/development/lisp-modules-new/import/util.lisp+16 pkgs/development/lisp-modules-new/imported.nix+65675 pkgs/development/lisp-modules-new/lisp-packages.nix+432 pkgs/development/lisp-modules-new/old-make-wrapper.sh+155 pkgs/development/lisp-modules-new/packages.nix+369 pkgs/development/lisp-modules-new/patches/swank-pure-paths.patch+28 pkgs/development/lisp-modules-new/ql-import.lisp+6 pkgs/development/lisp-modules-new/ql.nix+140 pkgs/development/lisp-modules-new/readme.md+34 pkgs/development/lisp-modules-new/shell.nix+7 pkgs/development/lisp-modules-new/test/lispPackagesToTest.txt+395 pkgs/development/lisp-modules-new/test/test.lisp+94 pkgs/development/lisp-modules/quicklisp-to-nix-overrides.nix+1−1 pkgs/development/lua-modules/generated-packages.nix+42−9 pkgs/development/lua-modules/luaexpat.patch−36 pkgs/development/lua-modules/overrides.nix+8−7 pkgs/development/misc/breakpad/default.nix+5 pkgs/development/misc/datafusion/default.nix+34 pkgs/development/misc/haskell/hasura/ekg-core.nix+8−9 pkgs/development/misc/haskell/hasura/ekg-json.nix+6−3 pkgs/development/misc/haskell/hasura/graphql-engine.nix+70−50 pkgs/development/misc/haskell/hasura/graphql-parser.nix+16−12 pkgs/development/misc/haskell/hasura/kriti-lang.nix+41 pkgs/development/misc/haskell/hasura/pg-client.nix+18−17 pkgs/development/misc/haskell/hasura/pool.nix+1−1 pkgs/development/misc/haskell/hasura/update.sh+11−1 pkgs/development/misc/msp430/mspds/binary.nix+2−1 pkgs/development/misc/resholve/README.md+111−58 pkgs/development/misc/resholve/default.nix+5−37 pkgs/development/misc/resholve/resholve-package.nix−37 pkgs/development/misc/resholve/resholve-utils.nix+149−20 pkgs/development/misc/resholve/resholve.nix+7−6 pkgs/development/misc/resholve/source.nix+2−2 pkgs/development/misc/resholve/test.nix+18−57 pkgs/development/mobile/androidenv/build-tools.nix+2−2 pkgs/development/mobile/androidenv/platform-tools.nix+1−2 pkgs/development/nim-packages/tempfile/default.nix+1 pkgs/development/node-packages/composition.nix+1−1 pkgs/development/node-packages/default.nix+24−42 pkgs/development/node-packages/node-env.nix+21−11 pkgs/development/node-packages/node-packages.json+4−2 pkgs/development/node-packages/node-packages.nix+7383−6986 pkgs/development/ocaml-modules/alcotest/default.nix+6−4 pkgs/development/ocaml-modules/asn1-combinators/default.nix+1−3 pkgs/development/ocaml-modules/atd/default.nix+6−14 pkgs/development/ocaml-modules/atdgen/codec-runtime.nix+18 pkgs/development/ocaml-modules/atdgen/default.nix+8−17 pkgs/development/ocaml-modules/atdgen/runtime.nix+15 pkgs/development/ocaml-modules/bap/default.nix+5−4 pkgs/development/ocaml-modules/batteries/default.nix+1−1 pkgs/development/ocaml-modules/bitstring/ppx.nix+1−1 pkgs/development/ocaml-modules/bitv/default.nix+1−1 pkgs/development/ocaml-modules/bjack/default.nix+25 pkgs/development/ocaml-modules/brisk-reconciler/default.nix+33 pkgs/development/ocaml-modules/bz2/default.nix+1−1 pkgs/development/ocaml-modules/camlp-streams/default.nix+20 pkgs/development/ocaml-modules/camlpdf/default.nix+1−1 pkgs/development/ocaml-modules/caqti/default.nix+9−4 pkgs/development/ocaml-modules/cmdliner/default.nix+15−23 pkgs/development/ocaml-modules/coin/default.nix+6−9 pkgs/development/ocaml-modules/cpdf/default.nix+1−1 pkgs/development/ocaml-modules/cstruct/lwt.nix+1−1 pkgs/development/ocaml-modules/cstruct/ppx.nix+1−1 pkgs/development/ocaml-modules/cstruct/sexp.nix+1−1 pkgs/development/ocaml-modules/cstruct/unix.nix+1−1 pkgs/development/ocaml-modules/csv/lwt.nix+1−1 pkgs/development/ocaml-modules/ctypes/default.nix+3−3 pkgs/development/ocaml-modules/dssi/default.nix+25 pkgs/development/ocaml-modules/dune-action-plugin/default.nix+4 pkgs/development/ocaml-modules/dune-glob/default.nix+4 pkgs/development/ocaml-modules/dune-private-libs/default.nix+4 pkgs/development/ocaml-modules/dune-rpc/default.nix+23 pkgs/development/ocaml-modules/dune-site/default.nix+4 pkgs/development/ocaml-modules/eliom/default.nix+9−3 pkgs/development/ocaml-modules/erm_xml/default.nix+1−1 pkgs/development/ocaml-modules/expat/default.nix+1−1 pkgs/development/ocaml-modules/farfadet/default.nix+1−1 pkgs/development/ocaml-modules/ffmpeg/base.nix+2−2 pkgs/development/ocaml-modules/fiber/default.nix+23 pkgs/development/ocaml-modules/flex/default.nix+22 pkgs/development/ocaml-modules/fmt/default.nix+1−1 pkgs/development/ocaml-modules/fpath/default.nix+1−1 pkgs/development/ocaml-modules/frontc/default.nix+8−25 pkgs/development/ocaml-modules/gen_js_api/default.nix+41 pkgs/development/ocaml-modules/gen_js_api/ojs.nix+21 pkgs/development/ocaml-modules/hacl-star/raw.nix+3 pkgs/development/ocaml-modules/javalib/default.nix+1−1 pkgs/development/ocaml-modules/lablgl/default.nix+1−1 pkgs/development/ocaml-modules/lablgtk-extras/default.nix+1−1 pkgs/development/ocaml-modules/ladspa/default.nix+25 pkgs/development/ocaml-modules/lastfm/default.nix+32 pkgs/development/ocaml-modules/llvm/default.nix+2−2 pkgs/development/ocaml-modules/logs/default.nix+1−1 pkgs/development/ocaml-modules/lua-ml/default.nix+1−1 pkgs/development/ocaml-modules/lwt/default.nix+3−3 pkgs/development/ocaml-modules/nocrypto/default.nix+1−1 pkgs/development/ocaml-modules/notty/default.nix+1−1 pkgs/development/ocaml-modules/ocaml-lsp/default.nix+7−8 pkgs/development/ocaml-modules/ocaml-lsp/jsonrpc.nix+8−4 pkgs/development/ocaml-modules/ocaml-lsp/lsp.nix+25−5 pkgs/development/ocaml-modules/ocamlformat-rpc-lib/default.nix+15−3 pkgs/development/ocaml-modules/ocp-ocamlres/default.nix+1−1 pkgs/development/ocaml-modules/ocsigen-deriving/default.nix+1−1 pkgs/development/ocaml-modules/ocsigen-ppx-rpc/default.nix+23 pkgs/development/ocaml-modules/ocsigen-server/default.nix+4−4 pkgs/development/ocaml-modules/ocsigen-start/default.nix+4−2 pkgs/development/ocaml-modules/ocsigen-toolkit/default.nix+2−2 pkgs/development/ocaml-modules/ocsipersist/default.nix+20 pkgs/development/ocaml-modules/ocsipersist/lib.nix+27 pkgs/development/ocaml-modules/ocsipersist/pgsql.nix+24 pkgs/development/ocaml-modules/ocsipersist/sqlite.nix+23 pkgs/development/ocaml-modules/phylogenetics/default.nix+2−4 pkgs/development/ocaml-modules/ppxlib/default.nix+1−1 pkgs/development/ocaml-modules/ptime/default.nix+5−5 pkgs/development/ocaml-modules/pure-splitmix/default.nix+22 pkgs/development/ocaml-modules/reactivedata/default.nix+1−1 pkgs/development/ocaml-modules/rebez/default.nix+22 pkgs/development/ocaml-modules/reperf/default.nix+41 pkgs/development/ocaml-modules/samplerate/default.nix+25 pkgs/development/ocaml-modules/sawja/default.nix+1−1 pkgs/development/ocaml-modules/sedlex/default.nix+1−1 pkgs/development/ocaml-modules/sosa/default.nix+1−1 pkgs/development/ocaml-modules/sqlite3EZ/default.nix−36 pkgs/development/ocaml-modules/stdune/default.nix+6−2 pkgs/development/ocaml-modules/tezos/010-PtGRANAD-test-helpers.nix−39 pkgs/development/ocaml-modules/tezos/011-PtHangz2-test-helpers.nix−35 pkgs/development/ocaml-modules/tezos/base-test-helpers.nix−32 pkgs/development/ocaml-modules/tezos/base.nix−37 pkgs/development/ocaml-modules/tezos/clic.nix−28 pkgs/development/ocaml-modules/tezos/client-010-PtGRANAD.nix−38 pkgs/development/ocaml-modules/tezos/client-011-PtHangz2.nix−44 pkgs/development/ocaml-modules/tezos/client-base.nix−28 pkgs/development/ocaml-modules/tezos/context.nix−34 pkgs/development/ocaml-modules/tezos/crypto.nix−42 pkgs/development/ocaml-modules/tezos/embedded-protocol-010-PtGRANAD.nix−23 pkgs/development/ocaml-modules/tezos/embedded-protocol-demo-noops.nix−23 pkgs/development/ocaml-modules/tezos/error-monad.nix−35 pkgs/development/ocaml-modules/tezos/event-logging-test-helpers.nix−25 pkgs/development/ocaml-modules/tezos/event-logging.nix−28 pkgs/development/ocaml-modules/tezos/hacl-glue-unix.nix−26 pkgs/development/ocaml-modules/tezos/hacl-glue.nix−17 pkgs/development/ocaml-modules/tezos/legacy-store.nix−42 pkgs/development/ocaml-modules/tezos/lmdb.nix−51 pkgs/development/ocaml-modules/tezos/lwt-result-stdlib.nix−31 pkgs/development/ocaml-modules/tezos/micheline.nix−32 pkgs/development/ocaml-modules/tezos/mockup-proxy.nix−27 pkgs/development/ocaml-modules/tezos/mockup-registration.nix−23 pkgs/development/ocaml-modules/tezos/p2p-services.nix−19 pkgs/development/ocaml-modules/tezos/p2p.nix−38 pkgs/development/ocaml-modules/tezos/protocol-010-PtGRANAD-parameters.nix−23 pkgs/development/ocaml-modules/tezos/protocol-010-PtGRANAD.nix−28 pkgs/development/ocaml-modules/tezos/protocol-011-PtHangz2-parameters.nix−23 pkgs/development/ocaml-modules/tezos/protocol-011-PtHangz2.nix−28 pkgs/development/ocaml-modules/tezos/protocol-alpha.nix−21 pkgs/development/ocaml-modules/tezos/protocol-compiler.nix−34 pkgs/development/ocaml-modules/tezos/protocol-demo-noops.nix−21 pkgs/development/ocaml-modules/tezos/protocol-environment-packer.nix−18 pkgs/development/ocaml-modules/tezos/protocol-environment-sigs.nix−42 pkgs/development/ocaml-modules/tezos/protocol-environment-structs.nix−25 pkgs/development/ocaml-modules/tezos/protocol-environment.nix−43 pkgs/development/ocaml-modules/tezos/protocol-plugin-010-PtGRANAD.nix−23 pkgs/development/ocaml-modules/tezos/protocol-plugin-011-PtHangz2.nix−23 pkgs/development/ocaml-modules/tezos/protocol-plugin-alpha.nix−21 pkgs/development/ocaml-modules/tezos/protocol-updater.nix−26 pkgs/development/ocaml-modules/tezos/proxy.nix−36 pkgs/development/ocaml-modules/tezos/requester.nix−34 pkgs/development/ocaml-modules/tezos/rpc-http-client-unix.nix−23 pkgs/development/ocaml-modules/tezos/rpc-http-client.nix−23 pkgs/development/ocaml-modules/tezos/rpc-http.nix−25 pkgs/development/ocaml-modules/tezos/rpc.nix−25 pkgs/development/ocaml-modules/tezos/sapling.nix−35 pkgs/development/ocaml-modules/tezos/shell-context.nix−21 pkgs/development/ocaml-modules/tezos/shell-services-test-helpers.nix−32 pkgs/development/ocaml-modules/tezos/shell-services.nix−30 pkgs/development/ocaml-modules/tezos/shell.nix−44 pkgs/development/ocaml-modules/tezos/signer-backends.nix−30 pkgs/development/ocaml-modules/tezos/signer-services.nix−21 pkgs/development/ocaml-modules/tezos/stdlib-unix.nix−33 pkgs/development/ocaml-modules/tezos/stdlib.nix−64 pkgs/development/ocaml-modules/tezos/store.nix−50 pkgs/development/ocaml-modules/tezos/test-helpers.nix−28 pkgs/development/ocaml-modules/tezos/validation.nix−28 pkgs/development/ocaml-modules/tezos/version.nix−21 pkgs/development/ocaml-modules/tezos/workers.nix−21 pkgs/development/ocaml-modules/toml/default.nix+2−4 pkgs/development/ocaml-modules/torch/default.nix+1 pkgs/development/ocaml-modules/tsdl/default.nix+1−1 pkgs/development/ocaml-modules/type_conv/108.08.00.nix−31 pkgs/development/ocaml-modules/type_conv/109.60.01.nix−32 pkgs/development/ocaml-modules/type_conv/112.01.01.nix−26 pkgs/development/ocaml-modules/unionFind/default.nix+24 pkgs/development/ocaml-modules/uri/sexp.nix+1−1 pkgs/development/ocaml-modules/uucp/default.nix+1−1 pkgs/development/ocaml-modules/uunf/default.nix+1−1 pkgs/development/ocaml-modules/uuuu/default.nix+6−9 pkgs/development/ocaml-modules/vg/default.nix+2−2 pkgs/development/ocaml-modules/wasm/default.nix+1−1 pkgs/development/ocaml-modules/xdg/default.nix+17 pkgs/development/ocaml-modules/xmlm/default.nix+1−1 pkgs/development/ocaml-modules/xmlplaylist/default.nix+25 pkgs/development/ocaml-modules/z3/default.nix+1−6 pkgs/development/ocaml-modules/z3/ocamlfind.patch−13 pkgs/development/ocaml-modules/zarith/default.nix+1−1 pkgs/development/octave-modules/octproj/default.nix+1 pkgs/development/php-packages/composer/default.nix+2−2 pkgs/development/php-packages/datadog_trace/default.nix+22 pkgs/development/php-packages/openswoole/default.nix+22 pkgs/development/php-packages/pdepend/default.nix+41 pkgs/development/php-packages/phpstan/default.nix+2−2 pkgs/development/php-packages/xdebug/default.nix+2−2 pkgs/development/pure-modules/audio/default.nix−24 pkgs/development/pure-modules/avahi/default.nix−24 pkgs/development/pure-modules/csv/default.nix−24 pkgs/development/pure-modules/doc/default.nix−23 pkgs/development/pure-modules/fastcgi/default.nix−24 pkgs/development/pure-modules/faust/default.nix−24 pkgs/development/pure-modules/ffi/default.nix−24 pkgs/development/pure-modules/gen/default.nix−26 pkgs/development/pure-modules/generic-setup-hook.sh−2 pkgs/development/pure-modules/gl/default.nix−27 pkgs/development/pure-modules/glpk/default.nix−40 pkgs/development/pure-modules/gplot/default.nix−24 pkgs/development/pure-modules/gsl/default.nix−24 pkgs/development/pure-modules/gtk/default.nix−24 pkgs/development/pure-modules/liblo/default.nix−24 pkgs/development/pure-modules/lilv/default.nix−24 pkgs/development/pure-modules/lv2/default.nix−24 pkgs/development/pure-modules/midi/default.nix−24 pkgs/development/pure-modules/mpfr/default.nix−24 pkgs/development/pure-modules/octave/default.nix−26 pkgs/development/pure-modules/odbc/default.nix−24 pkgs/development/pure-modules/pandoc/default.nix−28 pkgs/development/pure-modules/rational/default.nix−24 pkgs/development/pure-modules/readline/default.nix−24 pkgs/development/pure-modules/sockets/default.nix−24 pkgs/development/pure-modules/sql3/default.nix−24 pkgs/development/pure-modules/stldict/default.nix−30 pkgs/development/pure-modules/stllib/default.nix−30 pkgs/development/pure-modules/tk/default.nix−24 pkgs/development/pure-modules/xml/default.nix−24 pkgs/development/python-modules/Cython/default.nix+2−9 pkgs/development/python-modules/Mako/default.nix+31−4 pkgs/development/python-modules/Nikola/default.nix+2−2 pkgs/development/python-modules/Theano/default.nix+10−4 pkgs/development/python-modules/XlsxWriter/default.nix+25−13 pkgs/development/python-modules/adafruit-io/default.nix+3−3 pkgs/development/python-modules/adafruit-platformdetect/default.nix+2−2 pkgs/development/python-modules/adb-shell/default.nix+12−3 pkgs/development/python-modules/adblock/default.nix+4−4 pkgs/development/python-modules/add-trailing-comma/default.nix+2−2 pkgs/development/python-modules/advocate/default.nix+45 pkgs/development/python-modules/aenum/default.nix+2−2 pkgs/development/python-modules/aesara/default.nix+3−3 pkgs/development/python-modules/aesedb/default.nix+45 pkgs/development/python-modules/afdko/default.nix+5−9 pkgs/development/python-modules/afsapi/default.nix+3−3 pkgs/development/python-modules/ailment/default.nix+3−3 pkgs/development/python-modules/aio-geojson-generic-client/default.nix+51 pkgs/development/python-modules/aio-georss-client/default.nix+2−2 pkgs/development/python-modules/aio-georss-gdacs/default.nix+2−2 pkgs/development/python-modules/aioairzone/default.nix+3−3 pkgs/development/python-modules/aiobotocore/default.nix+2−2 pkgs/development/python-modules/aioconsole/default.nix+2 pkgs/development/python-modules/aiodiscover/default.nix+2−2 pkgs/development/python-modules/aioftp/default.nix+2−2 pkgs/development/python-modules/aioguardian/default.nix+2−2 pkgs/development/python-modules/aioh2/default.nix−24 pkgs/development/python-modules/aiohomekit/default.nix+3−3 pkgs/development/python-modules/aiohttp-apispec/default.nix+2−7 pkgs/development/python-modules/aiohttp-remotes/default.nix+6 pkgs/development/python-modules/aiohttp-swagger/default.nix+10−2 pkgs/development/python-modules/aiohttp/default.nix+4 pkgs/development/python-modules/aiolifx/default.nix+8−5 pkgs/development/python-modules/aiomysql/default.nix+17−27 pkgs/development/python-modules/aionotify/default.nix+5 pkgs/development/python-modules/aiooncue/default.nix+2−2 pkgs/development/python-modules/aioqsw/default.nix+40 pkgs/development/python-modules/aioshelly/default.nix+3−3 pkgs/development/python-modules/aioslimproto/default.nix+41 pkgs/development/python-modules/aioswitcher/default.nix+3−3 pkgs/development/python-modules/aiotractive/default.nix+2−2 pkgs/development/python-modules/alembic/default.nix+2−6 pkgs/development/python-modules/amazon-ion/default.nix+27−9 pkgs/development/python-modules/amberelectric/default.nix+2−2 pkgs/development/python-modules/amply/default.nix+2−2 pkgs/development/python-modules/amqp/default.nix+3−3 pkgs/development/python-modules/androidtv/default.nix+12−4 pkgs/development/python-modules/angr/default.nix+3−3 pkgs/development/python-modules/angrop/default.nix+3−3 pkgs/development/python-modules/ansi/default.nix+20−8 pkgs/development/python-modules/ansi2html/default.nix+3−2 pkgs/development/python-modules/ansible-compat/default.nix+2−2 pkgs/development/python-modules/ansible-doctor/default.nix+32−25 pkgs/development/python-modules/ansible-later/default.nix+3−3 pkgs/development/python-modules/ansible-lint/default.nix−4 pkgs/development/python-modules/ansible-runner/default.nix+8−3 pkgs/development/python-modules/ansible/base.nix−88 pkgs/development/python-modules/ansible/core.nix+5−14 pkgs/development/python-modules/ansible/default.nix+15−8 pkgs/development/python-modules/ansible/legacy.nix−55 pkgs/development/python-modules/anybadge/default.nix+2−2 pkgs/development/python-modules/anyconfig/default.nix+2−2 pkgs/development/python-modules/anyio/default.nix+11−2 pkgs/development/python-modules/apache-airflow/default.nix+2−2 pkgs/development/python-modules/apache-beam/default.nix+16−19 pkgs/development/python-modules/apache-beam/fix-cython.patch−41 pkgs/development/python-modules/apache-beam/relax-deps.patch−20 pkgs/development/python-modules/apispec/default.nix+13−9 pkgs/development/python-modules/aplpy/default.nix+5−25 pkgs/development/python-modules/apprise/default.nix+4−4 pkgs/development/python-modules/approvaltests/default.nix+33−11 pkgs/development/python-modules/appthreat-vulnerability-db/default.nix+3−3 pkgs/development/python-modules/aprslib/default.nix+2−2 pkgs/development/python-modules/apsw/default.nix+10−25 pkgs/development/python-modules/apycula/default.nix+2−2 pkgs/development/python-modules/archinfo/default.nix+4−14 pkgs/development/python-modules/arris-tg2492lg/default.nix+43 pkgs/development/python-modules/arrow/default.nix+2−2 pkgs/development/python-modules/asana/default.nix+26−16 pkgs/development/python-modules/asciimatics/default.nix+2−2 pkgs/development/python-modules/asdf-standard/default.nix+43 pkgs/development/python-modules/asdf-transform-schemas/default.nix+46 pkgs/development/python-modules/asdf/default.nix+18−7 pkgs/development/python-modules/asgiref/default.nix+14−4 pkgs/development/python-modules/asn1crypto/default.nix+13−7 pkgs/development/python-modules/astroid/default.nix+6−2 pkgs/development/python-modules/astropy-extension-helpers/default.nix+15−4 pkgs/development/python-modules/astropy/default.nix+2−2 pkgs/development/python-modules/astroquery/default.nix+30−8 pkgs/development/python-modules/asttokens/default.nix+6−1 pkgs/development/python-modules/async-lru/default.nix+4 pkgs/development/python-modules/async-upnp-client/default.nix+2−2 pkgs/development/python-modules/async_generator/default.nix−2 pkgs/development/python-modules/asyncsleepiq/default.nix+2−2 pkgs/development/python-modules/asyncssh/default.nix+2−2 pkgs/development/python-modules/atlassian-python-api/default.nix+2−2 pkgs/development/python-modules/atom/default.nix+35−9 pkgs/development/python-modules/atomman/default.nix+13−5 pkgs/development/python-modules/aurorapy/default.nix+2 pkgs/development/python-modules/authcaptureproxy/default.nix+2−2 pkgs/development/python-modules/authheaders/default.nix+2−2 pkgs/development/python-modules/autobahn/default.nix+2−2 pkgs/development/python-modules/autograd/default.nix+2−2 pkgs/development/python-modules/av/default.nix+130−16 pkgs/development/python-modules/awesomeversion/default.nix+2−2 pkgs/development/python-modules/aws-adfs/default.nix+33−25 pkgs/development/python-modules/aws-lambda-builders/default.nix+3−3 pkgs/development/python-modules/awscrt/default.nix+2−2 pkgs/development/python-modules/awsiotpythonsdk/default.nix+3−3 pkgs/development/python-modules/azure-common/default.nix+2−2 pkgs/development/python-modules/azure-core/default.nix+5−3 pkgs/development/python-modules/azure-eventgrid/default.nix+10−3 pkgs/development/python-modules/azure-identity/default.nix+15−13 pkgs/development/python-modules/azure-keyvault-keys/default.nix+2−2 pkgs/development/python-modules/azure-keyvault/default.nix+9−4 pkgs/development/python-modules/azure-mgmt-containerservice/default.nix+2−2 pkgs/development/python-modules/azure-mgmt-core/default.nix+2 pkgs/development/python-modules/azure-mgmt-datafactory/default.nix+6−6 pkgs/development/python-modules/azure-mgmt-kusto/azure-mgmt-apimanagement/default.nix+2−2 pkgs/development/python-modules/azure-mgmt-loganalytics/default.nix−2 pkgs/development/python-modules/azure-mgmt-msi/default.nix+2−2 pkgs/development/python-modules/azure-mgmt-reservations/default.nix+6−6 pkgs/development/python-modules/azure-mgmt-servicelinker/default.nix+2−2 pkgs/development/python-modules/azure-mgmt-storage/default.nix+12−6 pkgs/development/python-modules/azure-mgmt-trafficmanager/default.nix+4−2 pkgs/development/python-modules/azure-servicebus/default.nix+2−2 pkgs/development/python-modules/azure-synapse-artifacts/default.nix+2−2 pkgs/development/python-modules/backports-zoneinfo/default.nix+3 pkgs/development/python-modules/basemap/default.nix+2−2 pkgs/development/python-modules/bc-python-hcl2/default.nix+2−2 pkgs/development/python-modules/bcrypt/default.nix+33−8 pkgs/development/python-modules/beautifulsoup4/default.nix+9−3 pkgs/development/python-modules/beautifultable/default.nix+6−1 pkgs/development/python-modules/behave/default.nix+4−4 pkgs/development/python-modules/bimmer-connected/default.nix+2−2 pkgs/development/python-modules/bip_utils/default.nix+2−2 pkgs/development/python-modules/bitarray/default.nix+2−2 pkgs/development/python-modules/bitbox02/default.nix+2−2 pkgs/development/python-modules/bitcoin-price-api/default.nix−24 pkgs/development/python-modules/bitcoinlib/default.nix+1−1 pkgs/development/python-modules/bitstruct/default.nix+15−4 pkgs/development/python-modules/bjoern/default.nix+10−5 pkgs/development/python-modules/black/default.nix+2−2 pkgs/development/python-modules/bleach/default.nix+2−2 pkgs/development/python-modules/bleak/default.nix+2−2 pkgs/development/python-modules/blessed/default.nix+2−2 pkgs/development/python-modules/blinker/default.nix+8−3 pkgs/development/python-modules/blspy/default.nix+3−3 pkgs/development/python-modules/boltztrap2/default.nix+26−13 pkgs/development/python-modules/boschshcpy/default.nix+2−2 pkgs/development/python-modules/boto3/default.nix+2−2 pkgs/development/python-modules/botocore/default.nix+2−2 pkgs/development/python-modules/bottleneck/default.nix+31−16 pkgs/development/python-modules/boxx/default.nix+11−4 pkgs/development/python-modules/bpython/default.nix+16−2 pkgs/development/python-modules/breezy/default.nix+20−5 pkgs/development/python-modules/brother/default.nix+16−15 pkgs/development/python-modules/browser-cookie3/default.nix+6−5 pkgs/development/python-modules/bsblan/default.nix+24−16 pkgs/development/python-modules/build/default.nix−2 pkgs/development/python-modules/buildbot/default.nix+5−2 pkgs/development/python-modules/buildbot/pkg.nix+1−1 pkgs/development/python-modules/buildbot/plugins.nix+5−5 pkgs/development/python-modules/buildbot/worker.nix+41−7 pkgs/development/python-modules/caldav/default.nix+3−3 pkgs/development/python-modules/can/default.nix+9−4 pkgs/development/python-modules/canonicaljson/default.nix+3−3 pkgs/development/python-modules/casbin/default.nix+3−3 pkgs/development/python-modules/cattrs/default.nix+5 pkgs/development/python-modules/cbor2/default.nix+2−2 pkgs/development/python-modules/cdcs/default.nix+2−2 pkgs/development/python-modules/celery/default.nix+2−2 pkgs/development/python-modules/cert-chain-resolver/default.nix+22−7 pkgs/development/python-modules/certbot/default.nix+2−2 pkgs/development/python-modules/certomancer/default.nix+71 pkgs/development/python-modules/cffi/default.nix+5−4 pkgs/development/python-modules/chainer/default.nix+4−2 pkgs/development/python-modules/chalice/default.nix+3−3 pkgs/development/python-modules/cherrypy/default.nix+2−2 pkgs/development/python-modules/chex/default.nix+3−5 pkgs/development/python-modules/chiavdf/default.nix+2−2 pkgs/development/python-modules/ciscoconfparse/default.nix+1 pkgs/development/python-modules/ckcc-protocol/default.nix+2−2 pkgs/development/python-modules/claripy/default.nix+7−5 pkgs/development/python-modules/cle/default.nix+5−3 pkgs/development/python-modules/click-log/default.nix+2−2 pkgs/development/python-modules/click/default.nix+3−8 pkgs/development/python-modules/clickhouse-driver/default.nix−2 pkgs/development/python-modules/clize/default.nix+26−9 pkgs/development/python-modules/clldutils/default.nix+8−2 pkgs/development/python-modules/cloudflare/default.nix+11−4 pkgs/development/python-modules/cma/default.nix+2−2 pkgs/development/python-modules/cmd2/default.nix+2−2 pkgs/development/python-modules/codepy/default.nix+35 pkgs/development/python-modules/collections-extended/default.nix+10−5 pkgs/development/python-modules/commoncode/default.nix+8−3 pkgs/development/python-modules/connexion/default.nix+10−16 pkgs/development/python-modules/construct/default.nix+2−2 pkgs/development/python-modules/contexttimer/default.nix+42 pkgs/development/python-modules/convertdate/default.nix+10−7 pkgs/development/python-modules/coqpit/default.nix+3−3 pkgs/development/python-modules/coverage/default.nix+2−2 pkgs/development/python-modules/cppy/default.nix+12−7 pkgs/development/python-modules/cryptography/default.nix+24−26 pkgs/development/python-modules/cryptography/vectors.nix+9−6 pkgs/development/python-modules/crytic-compile/default.nix+3−3 pkgs/development/python-modules/cssselect2/default.nix+8−2 pkgs/development/python-modules/cupy/default.nix+13−4 pkgs/development/python-modules/cx_freeze/default.nix+2−2 pkgs/development/python-modules/cyclonedx-python-lib/default.nix+15−6 pkgs/development/python-modules/cypherpunkpay/default.nix+97 pkgs/development/python-modules/dask-mpi/default.nix+2−2 pkgs/development/python-modules/dask-yarn/default.nix+47 pkgs/development/python-modules/dask/default.nix+2−4 pkgs/development/python-modules/databricks-connect/default.nix+2−2 pkgs/development/python-modules/datadog/default.nix+8−2 pkgs/development/python-modules/dataset/default.nix+11−5 pkgs/development/python-modules/datasets/default.nix+20−7 pkgs/development/python-modules/datasette/default.nix+12−12 pkgs/development/python-modules/datashader/default.nix−1 pkgs/development/python-modules/datatable/default.nix+3−9 pkgs/development/python-modules/dateparser/default.nix+2−2 pkgs/development/python-modules/db-dtypes/default.nix+39 pkgs/development/python-modules/debtcollector/default.nix+2−2 pkgs/development/python-modules/debugpy/default.nix−1 pkgs/development/python-modules/deep-translator/default.nix+2−2 pkgs/development/python-modules/deepdiff/default.nix+6−3 pkgs/development/python-modules/deezer-python/default.nix+3−3 pkgs/development/python-modules/deltachat/default.nix+7−3 pkgs/development/python-modules/denonavr/default.nix+2−2 pkgs/development/python-modules/detect-secrets/default.nix+2−2 pkgs/development/python-modules/devito/default.nix+100 pkgs/development/python-modules/devolo-home-control-api/default.nix+2−2 pkgs/development/python-modules/devtools/default.nix+7 pkgs/development/python-modules/dictpath/default.nix+2 pkgs/development/python-modules/diff-cover/default.nix+4−2 pkgs/development/python-modules/diskcache/default.nix−4 pkgs/development/python-modules/distributed/default.nix+2−2 pkgs/development/python-modules/distro/default.nix+2−2 pkgs/development/python-modules/django-allauth/default.nix+25−11 pkgs/development/python-modules/django-appconf/default.nix+45 pkgs/development/python-modules/django-hijack-admin/default.nix+3 pkgs/development/python-modules/django-hijack/default.nix+22−22 pkgs/development/python-modules/django-raster/default.nix+1−3 pkgs/development/python-modules/django-statici18n/default.nix+2−2 pkgs/development/python-modules/django-taggit/default.nix+2−2 pkgs/development/python-modules/django-widget-tweaks/default.nix+32−9 pkgs/development/python-modules/django/1.10-gis-libs.template.patch−24 pkgs/development/python-modules/django/2.nix−39 pkgs/development/python-modules/django/3.nix+2−2 pkgs/development/python-modules/django/4.nix+2−2 pkgs/development/python-modules/django_appconf/default.nix−35 pkgs/development/python-modules/django_compressor/default.nix+2−2 pkgs/development/python-modules/django_contrib_comments/default.nix+2−2 pkgs/development/python-modules/django_modelcluster/default.nix+27−9 pkgs/development/python-modules/django_reversion/default.nix+2−2 pkgs/development/python-modules/dm-haiku/default.nix+10−3 pkgs/development/python-modules/dm-sonnet/default.nix−91 pkgs/development/python-modules/dnspython/default.nix+14−6 pkgs/development/python-modules/doc8/default.nix+2−2 pkgs/development/python-modules/dockerfile-parse/default.nix+27−9 pkgs/development/python-modules/docstring-parser/default.nix+25−11 pkgs/development/python-modules/docutils/default.nix+2−2 pkgs/development/python-modules/doit/default.nix+7−4 pkgs/development/python-modules/dotmap/default.nix+12−4 pkgs/development/python-modules/dragonfly/default.nix+2−2 pkgs/development/python-modules/dropbox/default.nix+41−12 pkgs/development/python-modules/duckdb-engine/default.nix+40 pkgs/development/python-modules/dugong/default.nix+5 pkgs/development/python-modules/dunamai/default.nix+2−2 pkgs/development/python-modules/dungeon-eos/default.nix+2−2 pkgs/development/python-modules/durus/default.nix+28 pkgs/development/python-modules/dynalite-devices/default.nix+2−2 pkgs/development/python-modules/eagle100/default.nix+37 pkgs/development/python-modules/easygui/default.nix+2−6 pkgs/development/python-modules/easyprocess/default.nix+2−2 pkgs/development/python-modules/editables/default.nix+2−2 pkgs/development/python-modules/elastic-apm/default.nix+2−2 pkgs/development/python-modules/elementpath/default.nix+4−4 pkgs/development/python-modules/elkm1-lib/default.nix+2−2 pkgs/development/python-modules/enaml/default.nix+6−3 pkgs/development/python-modules/entrypoint2/default.nix+2−2 pkgs/development/python-modules/entrypoints/default.nix+17−12 pkgs/development/python-modules/env-canada/default.nix+3−3 pkgs/development/python-modules/envs/default.nix+15−11 pkgs/development/python-modules/ephemeral-port-reserve/default.nix+42 pkgs/development/python-modules/exceptiongroup/default.nix+39 pkgs/development/python-modules/exchangelib/default.nix+3−3 pkgs/development/python-modules/faker/default.nix+2−2 pkgs/development/python-modules/fakeredis/default.nix+5 pkgs/development/python-modules/falcon/default.nix+46−33 pkgs/development/python-modules/faraday-agent-parameters-types/default.nix+6−1 pkgs/development/python-modules/faraday-plugins/default.nix+3−3 pkgs/development/python-modules/fastapi/default.nix+17−3 pkgs/development/python-modules/fastavro/default.nix+3−3 pkgs/development/python-modules/fastbencode/default.nix+26 pkgs/development/python-modules/fastcore/default.nix+3−3 pkgs/development/python-modules/fasteners/default.nix+11−24 pkgs/development/python-modules/fastjsonschema/default.nix+3−14 pkgs/development/python-modules/fastparquet/default.nix+2−2 pkgs/development/python-modules/fenics/default.nix+12−20 pkgs/development/python-modules/ffcv/default.nix+3−2 pkgs/development/python-modules/filelock/default.nix+2−2 pkgs/development/python-modules/filetype/default.nix+26−6 pkgs/development/python-modules/findpython/default.nix+53 pkgs/development/python-modules/fints/default.nix+2−2 pkgs/development/python-modules/fipy/default.nix+8 pkgs/development/python-modules/fipy/gmsh.patch+182 pkgs/development/python-modules/fitbit/default.nix+24−16 pkgs/development/python-modules/fivem-api/default.nix+42 pkgs/development/python-modules/flake8-blind-except/default.nix+5 pkgs/development/python-modules/flake8-bugbear/default.nix+9−4 pkgs/development/python-modules/flake8-debugger/default.nix+23−14 pkgs/development/python-modules/flake8/default.nix+1−1 pkgs/development/python-modules/flask-admin/default.nix+5 pkgs/development/python-modules/flask-appbuilder/default.nix+4−13 pkgs/development/python-modules/flask-bcrypt/default.nix+9−3 pkgs/development/python-modules/flask-compress/default.nix+26−8 pkgs/development/python-modules/flask-httpauth/default.nix+2−2 pkgs/development/python-modules/flask-jwt-extended/default.nix+31−10 pkgs/development/python-modules/flask-login/default.nix+2−2 pkgs/development/python-modules/flask-paranoid/default.nix+2−2 pkgs/development/python-modules/flask-restful/default.nix+4 pkgs/development/python-modules/flask-restful/werkzeug-2.1.0-compat.patch+114 pkgs/development/python-modules/flask-restx/default.nix+15 pkgs/development/python-modules/flask-seasurf/default.nix+13−3 pkgs/development/python-modules/flask-security-too/default.nix+66−32 pkgs/development/python-modules/flask-socketio/default.nix+6−2 pkgs/development/python-modules/flask-talisman/default.nix+2−2 pkgs/development/python-modules/flask-testing/default.nix+41−15 pkgs/development/python-modules/flask/default.nix+6−8 pkgs/development/python-modules/flatbuffers/default.nix+1 pkgs/development/python-modules/flatdict/default.nix+2−2 pkgs/development/python-modules/flax/default.nix+7−3 pkgs/development/python-modules/flickrapi/default.nix+50−19 pkgs/development/python-modules/flit-core/default.nix+2−2 pkgs/development/python-modules/flit/default.nix+10−11 pkgs/development/python-modules/flux-led/default.nix+2−2 pkgs/development/python-modules/fn/default.nix+22−8 pkgs/development/python-modules/fontmake/default.nix+42 pkgs/development/python-modules/fontparts/default.nix+5−3 pkgs/development/python-modules/fonttools/default.nix+8−5 pkgs/development/python-modules/fqdn/default.nix+36 pkgs/development/python-modules/freezegun/default.nix+21−10 pkgs/development/python-modules/frozendict/default.nix+2−2 pkgs/development/python-modules/fs/default.nix+2−2 pkgs/development/python-modules/ftfy/default.nix+8−2 pkgs/development/python-modules/funcparserlib/default.nix+2 pkgs/development/python-modules/furo/default.nix+2−2 pkgs/development/python-modules/fuse-python/default.nix+2−2 pkgs/development/python-modules/garminconnect/default.nix+3−3 pkgs/development/python-modules/gattlib/default.nix+68 pkgs/development/python-modules/gattlib/setup.patch+18 pkgs/development/python-modules/gb-io/default.nix+45 pkgs/development/python-modules/gbulb/default.nix+43 pkgs/development/python-modules/gcal-sync/default.nix+46 pkgs/development/python-modules/gehomesdk/default.nix+2−2 pkgs/development/python-modules/genshi/default.nix+2−2 pkgs/development/python-modules/gensim/default.nix+37−20 pkgs/development/python-modules/geoalchemy2/default.nix+13−2 pkgs/development/python-modules/geocachingapi/default.nix+10−4 pkgs/development/python-modules/geopandas/default.nix+14−1 pkgs/development/python-modules/ghapi/default.nix+2−2 pkgs/development/python-modules/ghp-import/default.nix+12−4 pkgs/development/python-modules/gidgethub/default.nix+2−2 pkgs/development/python-modules/gipc/default.nix−2 pkgs/development/python-modules/git-annex-adapter/default.nix+4 pkgs/development/python-modules/github3_py/default.nix+2−2 pkgs/development/python-modules/glad/default.nix+18 pkgs/development/python-modules/glances-api/default.nix+2−2 pkgs/development/python-modules/glcontext/default.nix+3−3 pkgs/development/python-modules/glean-parser/default.nix+8−7 pkgs/development/python-modules/glfw/default.nix+3−3 pkgs/development/python-modules/globus-sdk/default.nix+3−3 pkgs/development/python-modules/glyphslib/default.nix+59 pkgs/development/python-modules/goodwe/default.nix+2−2 pkgs/development/python-modules/google-api-core/default.nix+2−2 pkgs/development/python-modules/google-api-python-client/default.nix+2−2 pkgs/development/python-modules/google-auth-oauthlib/default.nix+13−3 pkgs/development/python-modules/google-cloud-bigquery-storage/default.nix+48 pkgs/development/python-modules/google-cloud-bigquery/default.nix+15−4 pkgs/development/python-modules/google-cloud-bigtable/default.nix+2−2 pkgs/development/python-modules/google-cloud-dataproc/default.nix+2−2 pkgs/development/python-modules/google-cloud-error-reporting/default.nix+6−7 pkgs/development/python-modules/google-cloud-pubsub/default.nix+8−3 pkgs/development/python-modules/google-cloud-secret-manager/default.nix+6−2 pkgs/development/python-modules/google-cloud-testutils/default.nix+2−2 pkgs/development/python-modules/google-cloud-videointelligence/default.nix+2−2 pkgs/development/python-modules/google-nest-sdm/default.nix+4−4 pkgs/development/python-modules/google-re2/default.nix+22−7 pkgs/development/python-modules/gradient/default.nix+2−2 pkgs/development/python-modules/graph_nets/default.nix−45 pkgs/development/python-modules/graphene-django/default.nix+7−3 pkgs/development/python-modules/graphene-django/graphene-3_2_0.patch+150 pkgs/development/python-modules/graphene/default.nix+17 pkgs/development/python-modules/graphql-relay/default.nix+19−4 pkgs/development/python-modules/graphql-subscription-manager/default.nix+3−3 pkgs/development/python-modules/graphviz/default.nix+4 pkgs/development/python-modules/graspologic/default.nix+2−2 pkgs/development/python-modules/greeclimate/default.nix+3−3 pkgs/development/python-modules/gremlinpython/default.nix+3−9 pkgs/development/python-modules/grip/default.nix+2−11 pkgs/development/python-modules/grpcio-status/default.nix+2−2 pkgs/development/python-modules/grpcio-tools/default.nix+2−2 pkgs/development/python-modules/gspread/default.nix+2−2 pkgs/development/python-modules/gssapi/default.nix+2−2 pkgs/development/python-modules/gtts/default.nix+2−2 pkgs/development/python-modules/h11/default.nix+5−2 pkgs/development/python-modules/h3/default.nix+3−3 pkgs/development/python-modules/ha-av/default.nix−43 pkgs/development/python-modules/ha-philipsjs/default.nix+2−2 pkgs/development/python-modules/hachoir/default.nix+9−3 pkgs/development/python-modules/hahomematic/default.nix+4−4 pkgs/development/python-modules/hangups/default.nix+2−2 pkgs/development/python-modules/hass-nabucasa/default.nix+2−1 pkgs/development/python-modules/hatasmota/default.nix+3−3 pkgs/development/python-modules/hatchling/default.nix+79 pkgs/development/python-modules/hepunits/default.nix+31 pkgs/development/python-modules/hg-evolve/default.nix+2−2 pkgs/development/python-modules/hg-git/default.nix+15−5 pkgs/development/python-modules/hid/default.nix+2−2 pkgs/development/python-modules/hidapi/default.nix+2−2 pkgs/development/python-modules/hkavr/default.nix+37 pkgs/development/python-modules/hmmlearn/default.nix+9−8 pkgs/development/python-modules/homeconnect/default.nix+11−4 pkgs/development/python-modules/howdoi/default.nix+16−2 pkgs/development/python-modules/hpack/default.nix+19−6 pkgs/development/python-modules/html-sanitizer/default.nix+3−1 pkgs/development/python-modules/http-message-signatures/default.nix+56 pkgs/development/python-modules/http-sfv/default.nix+39 pkgs/development/python-modules/httpbin/default.nix+10 pkgs/development/python-modules/httpcore/default.nix+9−2 pkgs/development/python-modules/httplib2/default.nix+9−5 pkgs/development/python-modules/httptools/default.nix+2−2 pkgs/development/python-modules/httpx-ntlm/default.nix+7−1 pkgs/development/python-modules/httpx/default.nix+2−2 pkgs/development/python-modules/huggingface-hub/default.nix+2−2 pkgs/development/python-modules/humanize/default.nix+2−2 pkgs/development/python-modules/hwi/default.nix+11−8 pkgs/development/python-modules/hydra-check/default.nix+12−19 pkgs/development/python-modules/hyperframe/default.nix+4−1 pkgs/development/python-modules/hyperion-py/default.nix+4−3 pkgs/development/python-modules/hypothesis/default.nix+2−2 pkgs/development/python-modules/hypothesmith/default.nix+32−4 pkgs/development/python-modules/hypothesmith/remove-black.patch+88 pkgs/development/python-modules/hyppo/default.nix+6−4 pkgs/development/python-modules/ibis-framework/default.nix+34−47 pkgs/development/python-modules/idasen/default.nix+5−3 pkgs/development/python-modules/identify/default.nix+2−2 pkgs/development/python-modules/igraph/default.nix+3−2 pkgs/development/python-modules/ihatemoney/default.nix+36−34 pkgs/development/python-modules/imageio/default.nix+24−15 pkgs/development/python-modules/imageio/libgl-path.patch+13 pkgs/development/python-modules/imap-tools/default.nix+3−2 pkgs/development/python-modules/img2pdf/default.nix+2−12 pkgs/development/python-modules/immutables/default.nix+2−2 pkgs/development/python-modules/impacket/default.nix+31−5 pkgs/development/python-modules/importlib-metadata/default.nix+4−2 pkgs/development/python-modules/importlib-resources/default.nix+3−2 pkgs/development/python-modules/inquirer/default.nix+2−2 pkgs/development/python-modules/installer/default.nix+2−2

2402 more files changed are not listed.

.editorconfig+5
@@ -55,6 +55,11 @@ trim_trailing_whitespace = unset
5555[*.lock]
5656indent_size = unset
5757
58+# trailing whitespace is an actual syntax element of classic Markdown/
59+# CommonMark to enforce a line break
60+[*.md]
61+trim_trailing_whitespace = unset
62+
5863[eggs.nix]
5964trim_trailing_whitespace = unset
6065
.github/CODEOWNERS+8−4
@@ -41,7 +41,8 @@
4141/pkgs/build-support/cc-wrapper @Ericson2314
4242/pkgs/build-support/bintools-wrapper @Ericson2314
4343/pkgs/build-support/setup-hooks @Ericson2314
44−/pkgs/build-support/setup-hooks/auto-patchelf.sh @aszlig
44+/pkgs/build-support/setup-hooks/auto-patchelf.sh @layus
45+/pkgs/build-support/setup-hooks/auto-patchelf.py @layus
4546
4647# Nixpkgs build-support
4748/pkgs/build-support/writers @lassulus @Profpatsch
@@ -242,9 +243,8 @@
242243
243244# Docker tools
244245/pkgs/build-support/docker @roberth
245−/nixos/tests/docker-tools-overlay.nix @roberth
246−/nixos/tests/docker-tools.nix @roberth
247−/doc/builders/images/dockertools.xml @roberth
246+/nixos/tests/docker-tools* @roberth
247+/doc/builders/images/dockertools.section.md @roberth
248248
249249# Blockchains
250250/pkgs/applications/blockchains @mmahut @RaghavSood
@@ -285,3 +285,7 @@
285285/nixos/modules/services/misc/matrix-conduit.nix @piegamesde
286286/nixos/tests/matrix-appservice-irc.nix @piegamesde
287287/nixos/tests/matrix-conduit.nix @piegamesde
288+
289+# Dotnet
290+/pkgs/build-support/dotnet @IvarWithoutBones
291+/pkgs/development/compilers/dotnet @IvarWithoutBones
.github/workflows/basic-eval.yml+10−9
@@ -1,21 +1,22 @@
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:
1718 - uses: actions/checkout@v3
18− - uses: cachix/install-nix-action@v16
19+ - uses: cachix/install-nix-action@v17
1920 - uses: cachix/cachix-action@v10
2021 with:
2122 # This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
.github/workflows/editorconfig.yml+1−1
@@ -28,7 +28,7 @@ jobs:
2828 with:
2929 # pull_request_target checks out the base branch by default
3030 ref: refs/pull/${{ github.event.pull_request.number }}/merge
31− - uses: cachix/install-nix-action@v16
31+ - uses: cachix/install-nix-action@v17
3232 with:
3333 # nixpkgs commit is pinned so that it doesn't break
3434 # editorconfig-checker 2.4.0
.github/workflows/manual-nixos.yml+1−1
@@ -18,7 +18,7 @@ jobs:
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@v16
21+ - uses: cachix/install-nix-action@v17
2222 with:
2323 # explicitly enable sandbox
2424 extra_nix_config: sandbox = true
.github/workflows/manual-nixpkgs.yml+1−1
@@ -18,7 +18,7 @@ jobs:
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@v16
21+ - uses: cachix/install-nix-action@v17
2222 with:
2323 # explicitly enable sandbox
2424 extra_nix_config: sandbox = true
.github/workflows/nixos-manual.yml+1−1
@@ -19,7 +19,7 @@ jobs:
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@v16
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/update-terraform-providers.yml+7−6
@@ -11,7 +11,7 @@ jobs:
1111 runs-on: ubuntu-latest
1212 steps:
1313 - uses: actions/checkout@v3
14− - uses: cachix/install-nix-action@v16
14+ - uses: cachix/install-nix-action@v17
1515 - name: setup
1616 id: setup
1717 run: |
@@ -25,14 +25,15 @@ jobs:
2525 git commit -m "${{ steps.setup.outputs.title }}" providers.json
2626 popd
2727 - name: create PR
28− uses: peter-evans/create-pull-request@v3
28+ uses: peter-evans/create-pull-request@v4
2929 with:
3030 body: |
31− Automatic update of terraform providers.
31+ Automatic update by [update-terraform-providers](https://github.com/NixOS/nixpkgs/blob/master/.github/workflows/update-terraform-providers.yml) action.
3232
33− Created by [update-terraform-providers](https://github.com/NixOS/nixpkgs/blob/master/.github/workflows/update-terraform-providers.yml) action.
34−
35− Check that all providers build with `@ofborg build terraform-full`
33+ Check that all providers build with:
34+ ```
35+ @ofborg build terraform-full
36+ ```
3637 branch: terraform-providers-update
3738 delete-branch: false
3839 labels: "2.status: work-in-progress"
CONTRIBUTING.md+42−1
@@ -20,7 +20,7 @@ Below is a short excerpt of some points in there:
2020 ```
2121 (pkg-name | nixos/<module>): (from -> to | init at version | refactor | etc)
2222
23− (Motivation for change. Additional information.)
23+ (Motivation for change. Link to release notes. Additional information.)
2424 ```
2525
2626 For consistency, there should not be a period at the end of the commit message's summary line (the first line of the commit message).
@@ -29,6 +29,7 @@ Below is a short excerpt of some points in there:
2929
3030 * nginx: init at 2.0.1
3131 * firefox: 54.0.1 -> 55.0
32+ https://www.mozilla.org/en-US/firefox/55.0/releasenotes/
3233 * nixos/hydra: add bazBaz option
3334
3435 Dual baz behavior is needed to do foo.
@@ -52,6 +53,46 @@ In addition to writing properly formatted commit messages, it's important to inc
5253
5354For package version upgrades and such a one-line commit message is usually sufficient.
5455
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+
5596## Backporting changes
5697
5798Follow these steps to backport a change into a release branch in compliance with the [commit policy](https://nixos.org/nixpkgs/manual/#submitting-changes-stable-release-branches).
doc/builders/fetchers.chapter.md+12−12
@@ -6,11 +6,11 @@ When using Nix, you will frequently need to download source code and other files
66
77Because 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.
88
9−For those who develop and maintain fetchers, a similar problem arises with changes to the implementation of a fetcher. These may cause a fixed output derivation to fail, but won't normally be caught by tests because the supposed output is already in the store or cache. For the purpose of testing, you can use a trick that is embodied by the [`invalidateFetcherByDrvHash`](#sec-pkgs-invalidateFetcherByDrvHash) function. It uses the derivation `name` to create a unique output path per fetcher implementation, defeating the caching precisely where it would be harmful.
9+For those who develop and maintain fetchers, a similar problem arises with changes to the implementation of a fetcher. These may cause a fixed output derivation to fail, but won't normally be caught by tests because the supposed output is already in the store or cache. For the purpose of testing, you can use a trick that is embodied by the [`invalidateFetcherByDrvHash`](#tester-invalidateFetcherByDrvHash) function. It uses the derivation `name` to create a unique output path per fetcher implementation, defeating the caching precisely where it would be harmful.
1010
1111## `fetchurl` and `fetchzip` {#fetchurl}
1212
13−Two basic fetchers are `fetchurl` and `fetchzip`. Both of these have two required arguments, a URL and a hash. The hash is typically `sha256`, although many more hash algorithms are supported. Nixpkgs contributors are currently recommended to use `sha256`. This hash will be used by Nix to identify your source. A typical usage of fetchurl is provided below.
13+Two basic fetchers are `fetchurl` and `fetchzip`. Both of these have two required arguments, a URL and a hash. The hash is typically `sha256`, although many more hash algorithms are supported. Nixpkgs contributors are currently recommended to use `sha256`. This hash will be used by Nix to identify your source. A typical usage of `fetchurl` is provided below.
1414
1515```nix
1616{ stdenv, fetchurl }:
@@ -24,9 +24,9 @@ stdenv.mkDerivation {
2424}
2525```
2626
27−The main difference between `fetchurl` and `fetchzip` is in how they store the contents. `fetchurl` will store the unaltered contents of the URL within the Nix store. `fetchzip` on the other hand will decompress the archive for you, making files and directories directly accessible in the future. `fetchzip` can only be used with archives. Despite the name, `fetchzip` is not limited to .zip files and can also be used with any tarball.
27+The main difference between `fetchurl` and `fetchzip` is in how they store the contents. `fetchurl` will store the unaltered contents of the URL within the Nix store. `fetchzip` on the other hand, will decompress the archive for you, making files and directories directly accessible in the future. `fetchzip` can only be used with archives. Despite the name, `fetchzip` is not limited to .zip files and can also be used with any tarball.
2828
29−`fetchpatch` works very similarly to `fetchurl` with the same arguments expected. It expects patch files as a source and performs normalization on them before computing the checksum. For example it will remove comments or other unstable parts that are sometimes added by version control systems and can change over time.
29+`fetchpatch` works very similarly to `fetchurl` with the same arguments expected. It expects patch files as a source and performs normalization on them before computing the checksum. For example, it will remove comments or other unstable parts that are sometimes added by version control systems and can change over time.
3030
3131Most other fetchers return a directory rather than a single file.
3232
@@ -38,9 +38,9 @@ Used with Subversion. Expects `url` to a Subversion directory, `rev`, and `sha25
3838
3939Used 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`.
4040
41−Additionally the following optional arguments can be given: `fetchSubmodules = true` makes `fetchgit` also fetch the submodules of a repository. If `deepClone` is set to true, the entire repository is cloned as opposing to just creating a shallow clone. `deepClone = true` also implies `leaveDotGit = true` which means that the `.git` directory of the clone won't be removed after checkout.
41+Additionally, the following optional arguments can be given: `fetchSubmodules = true` makes `fetchgit` also fetch the submodules of a repository. If `deepClone` is set to true, the entire repository is cloned as opposing to just creating a shallow clone. `deepClone = true` also implies `leaveDotGit = true` which means that the `.git` directory of the clone won't be removed after checkout.
4242
43−If only parts of the repository are needed, `sparseCheckout` can be used. This will prevent git from fetching unnecessary blobs from server, see [git sparse-checkout](https://git-scm.com/docs/git-sparse-checkout) and [git clone --filter](https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---filterltfilter-specgt) for more infomation:
43+If only parts of the repository are needed, `sparseCheckout` can be used. This will prevent git from fetching unnecessary blobs from server, see [git sparse-checkout](https://git-scm.com/docs/git-sparse-checkout) and [git clone --filter](https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---filterltfilter-specgt) for more information:
4444
4545```nix
4646{ stdenv, fetchgit }:
@@ -78,17 +78,17 @@ A number of fetcher functions wrap part of `fetchurl` and `fetchzip`. They are m
7878
7979## `fetchFromGitHub` {#fetchfromgithub}
8080
81−`fetchFromGitHub` expects four arguments. `owner` is a string corresponding to the GitHub user or organization that controls this repository. `repo` corresponds to the name of the software repository. These are located at the top of every GitHub HTML page as `owner`/`repo`. `rev` corresponds to the Git commit hash or tag (e.g `v1.0`) that will be downloaded from Git. Finally, `sha256` corresponds to the hash of the extracted directory. Again, other hash algorithms are also available but `sha256` is currently preferred.
81+`fetchFromGitHub` expects four arguments. `owner` is a string corresponding to the GitHub user or organization that controls this repository. `repo` corresponds to the name of the software repository. These are located at the top of every GitHub HTML page as `owner`/`repo`. `rev` corresponds to the Git commit hash or tag (e.g `v1.0`) that will be downloaded from Git. Finally, `sha256` corresponds to the hash of the extracted directory. Again, other hash algorithms are also available, but `sha256` is currently preferred.
8282
8383`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.
8484
8585## `fetchFromGitLab` {#fetchfromgitlab}
8686
87−This is used with GitLab repositories. The arguments expected are very similar to fetchFromGitHub above.
87+This is used with GitLab repositories. The arguments expected are very similar to `fetchFromGitHub` above.
8888
8989## `fetchFromGitiles` {#fetchfromgitiles}
9090
91−This is used with Gitiles repositories. The arguments expected are similar to fetchgit.
91+This is used with Gitiles repositories. The arguments expected are similar to `fetchgit`.
9292
9393## `fetchFromBitbucket` {#fetchfrombitbucket}
9494
@@ -96,11 +96,11 @@ This is used with BitBucket repositories. The arguments expected are very simila
9696
9797## `fetchFromSavannah` {#fetchfromsavannah}
9898
99−This is used with Savannah repositories. The arguments expected are very similar to fetchFromGitHub above.
99+This is used with Savannah repositories. The arguments expected are very similar to `fetchFromGitHub` above.
100100
101101## `fetchFromRepoOrCz` {#fetchfromrepoorcz}
102102
103−This is used with repo.or.cz repositories. The arguments expected are very similar to fetchFromGitHub above.
103+This is used with repo.or.cz repositories. The arguments expected are very similar to `fetchFromGitHub` above.
104104
105105## `fetchFromSourcehut` {#fetchfromsourcehut}
106106
@@ -111,4 +111,4 @@ or "hg"), `domain` and `fetchSubmodules`.
111111
112112If `fetchSubmodules` is `true`, `fetchFromSourcehut` uses `fetchgit`
113113or `fetchhg` with `fetchSubmodules` or `fetchSubrepos` set to `true`,
114−respectively. Otherwise the fetcher uses `fetchzip`.
114+respectively. Otherwise, the fetcher uses `fetchzip`.
doc/builders/images/dockertools.section.md+8−8
@@ -58,7 +58,7 @@ After the new layer has been created, its closure (to which `contents`, `config`
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
@@ -195,9 +195,9 @@ pkgs.dockerTools.buildLayeredImage {
195195
196196Increasing the `maxLayers` increases the number of layers which have a chance to be shared between different images.
197197
198−Modern Docker installations support up to 128 layers, however older versions support as few as 42.
198+Modern Docker installations support up to 128 layers, but older versions support as few as 42.
199199
200−If the produced image will not be extended by other Docker builds, it is safe to set `maxLayers` to `128`. However it will be impossible to extend the image further.
200+If the produced image will not be extended by other Docker builds, it is safe to set `maxLayers` to `128`. However, it will be impossible to extend the image further.
201201
202202The 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.
203203
@@ -213,7 +213,7 @@ The image produced by running the output script can be piped directly into `dock
213213$(nix-build) | docker load
214214```
215215
216−Alternatively, the image be piped via `gzip` into `skopeo`, e.g. to copy it into a registry:
216+Alternatively, the image be piped via `gzip` into `skopeo`, e.g., to copy it into a registry:
217217
218218```ShellSession
219219$(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.md+4−4
@@ -1,10 +1,10 @@
11# /etc files {#etc}
22
3−Certain calls in glibc require access to runtime files found in /etc such as `/etc/protocols` or `/etc/services` -- [getprotobyname](https://linux.die.net/man/3/getprotobyname) is one such function.
3+Certain calls in glibc require access to runtime files found in `/etc` such as `/etc/protocols` or `/etc/services` -- [getprotobyname](https://linux.die.net/man/3/getprotobyname) is one such function.
44
5−On non-NixOS distributions these files are typically provided by packages (i.e. [netbase](https://packages.debian.org/sid/netbase)) if not already pre-installed in your distribution. This can cause non-reproducibility for code if they rely on these files being present.
5+On non-NixOS distributions these files are typically provided by packages (i.e., [netbase](https://packages.debian.org/sid/netbase)) if not already pre-installed in your distribution. This can cause non-reproducibility for code if they rely on these files being present.
66
7−If [iana-etc](https://hydra.nixos.org/job/nixos/trunk-combined/nixpkgs.iana-etc.x86_64-linux) is part of your _buildInputs_ then it will set the environment varaibles `NIX_ETC_PROTOCOLS` and `NIX_ETC_SERVICES` to the corresponding files in the package through a _setup-hook_.
7+If [iana-etc](https://hydra.nixos.org/job/nixos/trunk-combined/nixpkgs.iana-etc.x86_64-linux) is part of your `buildInputs`, then it will set the environment variables `NIX_ETC_PROTOCOLS` and `NIX_ETC_SERVICES` to the corresponding files in the package through a setup hook.
88
99
1010```bash
@@ -15,4 +15,4 @@ NIX_ETC_SERVICES=/nix/store/aj866hr8fad8flnggwdhrldm0g799ccz-iana-etc-20210225/e
1515NIX_ETC_PROTOCOLS=/nix/store/aj866hr8fad8flnggwdhrldm0g799ccz-iana-etc-20210225/etc/protocols
1616```
1717
18−Nixpkg's version of [glibc](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/glibc/default.nix) has been patched to check for the existence of these environment variables. If the environment variable are *not set*, then it will attempt to find the files at the default location within _/etc_.
18+Nixpkg's version of [glibc](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/glibc/default.nix) has been patched to check for the existence of these environment variables. If the environment variables are *not* set, then it will attempt to find the files at the default location within `/etc`.
doc/builders/packages/firefox.section.md+7−8
@@ -2,7 +2,7 @@
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/linux.section.md+7−7
@@ -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,19 +14,19 @@ 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
19192. 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
3232 $ nix-env -f "<nixpkgs>" -iA ncurses
@@ -34,7 +34,7 @@ How to add a new (major) version of the Linux kernel to Nixpkgs:
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
39394. 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
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` 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.xml−1
@@ -7,5 +7,4 @@
77 </para>
88 <xi:include href="special/fhs-environments.section.xml" />
99 <xi:include href="special/mkshell.section.xml" />
10− <xi:include href="special/invalidateFetcherByDrvHash.section.xml" />
1110</chapter>
doc/builders/special/invalidateFetcherByDrvHash.section.mddeleted−31
@@ -1,31 +0,0 @@
1−
2−## `invalidateFetcherByDrvHash` {#sec-pkgs-invalidateFetcherByDrvHash}
3−
4−Use the derivation hash to invalidate the output via name, for testing.
5−
6−Type: `(a@{ name, ... } -> Derivation) -> a -> Derivation`
7−
8−Normally, fixed output derivations can and should be cached by their output
9−hash only, but for testing we want to re-fetch everytime the fetcher changes.
10−
11−Changes to the fetcher become apparent in the drvPath, which is a hash of
12−how to fetch, rather than a fixed store path.
13−By inserting this hash into the name, we can make sure to re-run the fetcher
14−every time the fetcher changes.
15−
16−This relies on the assumption that Nix isn't clever enough to reuse its
17−database of local store contents to optimize fetching.
18−
19−You might notice that the "salted" name derives from the normal invocation,
20−not the final derivation. `invalidateFetcherByDrvHash` has to invoke the fetcher
21−function twice: once to get a derivation hash, and again to produce the final
22−fixed output derivation.
23−
24−Example:
25−
26− tests.fetchgit = invalidateFetcherByDrvHash fetchgit {
27− name = "nix-source";
28− url = "https://github.com/NixOS/nix";
29− rev = "9d9dbe6ed05854e03811c361a3380e09183f4f4a";
30− sha256 = "sha256-7DszvbCNTjpzGRmpIVAWXk20P0/XTrWZ79KSOGLrUWY=";
31− };
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+3−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}
@@ -219,5 +219,5 @@ produces an output path `/nix/store/<hash>-runtime-references` containing
219219/nix/store/<hash>-hello-2.10
220220```
221221
222−but none of `hello`'s dependencies, because those are not referenced directly
222+but none of `hello`'s dependencies because those are not referenced directly
223223by `hi`'s output.
doc/contributing/coding-conventions.chapter.md+5−5
@@ -214,15 +214,15 @@ Most of the time, these are the same. For instance, the package `e2fsprogs` has
214214
215215There are a few naming guidelines:
216216
217−- The `name` attribute _should_ be identical to the upstream package name.
217+- The `pname` attribute _should_ be identical to the upstream package name.
218218
219−- The `name` attribute _must not_ contain uppercase letters — e.g., `"mplayer-1.0rc2"` instead of `"MPlayer-1.0rc2"`.
219+- The `pname` and the `version` attribute _must not_ contain uppercase letters — e.g., `"mplayer" instead of `"MPlayer"`.
220220
221−- The version part of the `name` attribute _must_ start with a digit (following a dash) — e.g., `"hello-0.3.1rc2"`.
221+- The `version` attribute _must_ start with a digit e.g`"0.3.1rc2".
222222
223−- If a package is not a release but a commit from a repository, then the version part of the name _must_ be the date of that (fetched) commit. The date _must_ be in `"YYYY-MM-DD"` format. Also append `"unstable"` to the name - e.g., `"pkgname-unstable-2014-09-23"`.
223+- If a package is not a release but a commit from a repository, then the `version` attribute _must_ be the date of that (fetched) commit. The date _must_ be in `"unstable-YYYY-MM-DD"` format.
224224
225−- Dashes in the package name _should_ be preserved in new variable names, rather than converted to underscores or camel cased — e.g., `http-parser` instead of `http_parser` or `httpParser`. The hyphenated style is preferred in all three package names.
225+- Dashes in the package `pname` _should_ be preserved in new variable names, rather than converted to underscores or camel cased — e.g., `http-parser` instead of `http_parser` or `httpParser`. The hyphenated style is preferred in all three package names.
226226
227227- 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)
228228
doc/contributing/submitting-changes.chapter.md+1−1
@@ -96,7 +96,7 @@ 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`).
1011011. 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
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/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/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/gnome.section.md+16−2
@@ -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
@@ -98,7 +112,7 @@ For convenience, it also adds `dconf.lib` for a GIO module implementing a GSetti
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+5−1
@@ -142,4 +142,8 @@ Removes the pre-existing vendor directory. This should only be used if the depen
142142
143143### `subPackages` {#var-go-subPackages}
144144
145−Limits the builder from building child packages that have not been listed. If `subPackages` is not specified, all child packages will be built.
145+Specified as a string or list of strings. Limits the builder from building child packages that have not been listed. If `subPackages` is not specified, all child packages will be built.
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/index.xml+2
@@ -9,8 +9,10 @@
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" />
1517 <xi:include href="dotnet.section.xml" />
1618 <xi:include href="emscripten.section.xml" />
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+35−10
@@ -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
doc/stdenv/meta.chapter.md+34
@@ -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`.
doc/stdenv/stdenv.chapter.md+56−2
@@ -125,7 +125,7 @@ The extension of `PATH` with dependencies, alluded to above, proceeds according
125125A dependency is said to be **propagated** when some of its other-transitive (non-immediate) downstream dependencies also need it as an immediate dependency.
126126[^footnote-stdenv-propagated-dependencies]
127127
128−It is important to note that dependencies are not necessarily propagated as the same sort of dependency that they were before, but rather as the corresponding sort so that the platform rules still line up. To determine the exact rules for dependency propagation, we start by assigning to each dependency a couple of ternary numbers (`-1` for `build`, `0` for `host`, and `1` for `target`), representing how respectively its host and target platforms are "offset" from the depending derivation’s platforms. The following table summarize the different combinations that can be obtained:
128+It is important to note that dependencies are not necessarily propagated as the same sort of dependency that they were before, but rather as the corresponding sort so that the platform rules still line up. To determine the exact rules for dependency propagation, we start by assigning to each dependency a couple of ternary numbers (`-1` for `build`, `0` for `host`, and `1` for `target`) representing its [dependency type](#possible-dependency-types), which captures how its host and target platforms are each "offset" from the depending derivation’s host and target platforms. The following table summarize the different combinations that can be obtained:
129129
130130| `host → target` | attribute name | offset |
131131| ------------------- | ------------------- | -------- |
@@ -317,6 +317,60 @@ The script will be usually run from the root of the Nixpkgs repository but you s
317317
318318For information about how to run the updates, execute `nix-shell maintainers/scripts/update.nix`.
319319
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+
320374## Phases {#sec-stdenv-phases}
321375
322376`stdenv.mkDerivation` sets the Nix [derivation](https://nixos.org/manual/nix/stable/expressions/derivations.html#derivations)'s builder to a script that loads the stdenv `setup.sh` bash library and calls `genericBuild`. Most packaging functions rely on this default builder.
@@ -1043,7 +1097,7 @@ You can also specify a `runtimeDependencies` variable which lists dependencies t
10431097
10441098In 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.
10451099
1046−By default `autoPatchelf` will fail as soon as any ELF file requires a dependency which cannot be resolved via the given build inputs. In some situations you might prefer to just leave missing dependencies unpatched and continue to patch the rest. This can be achieved by setting the `autoPatchelfIgnoreMissingDeps` environment variable to a non-empty value.
1100+By default `autoPatchelf` will fail as soon as any ELF file requires a dependency which cannot be resolved via the given build inputs. In some situations you might prefer to just leave missing dependencies unpatched and continue to patch the rest. This can be achieved by setting the `autoPatchelfIgnoreMissingDeps` environment variable to a non-empty value. `autoPatchelfIgnoreMissingDeps` can be set to a list like `autoPatchelfIgnoreMissingDeps = [ "libcuda.so.1" "libcudart.so.1" ];` or to simply `[ "*" ]` to ignore all missing dependencies.
10471101
10481102The `autoPatchelf` command also recognizes a `--no-recurse` command line flag, which prevents it from recursing into subdirectories.
10491103
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).
lib/customisation.nix+49−2
@@ -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
lib/default.nix+7−2
@@ -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
@@ -94,7 +98,8 @@ let
9498 concatImapStringsSep makeSearchPath makeSearchPathOutput
9599 makeLibraryPath makeBinPath optionalString
96100 hasInfix hasPrefix hasSuffix stringToCharacters stringAsChars escape
97− escapeShellArg escapeShellArgs escapeRegex escapeXML replaceChars lowerChars
101+ escapeShellArg escapeShellArgs isValidPosixName toShellVar toShellVars
102+ escapeRegex escapeXML replaceChars lowerChars
98103 upperChars toLower toUpper addContextFrom splitString
99104 removePrefix removeSuffix versionOlder versionAtLeast
100105 getName getVersion
@@ -108,7 +113,7 @@ let
108113 makeScope makeScopeWithSplicing;
109114 inherit (self.meta) addMetaAttrs dontDistribute setName updateName
110115 appendToName mapDerivationAttrset setPrio lowPrio lowPrioSet hiPrio
111− hiPrioSet getLicenseFromSpdxId;
116+ hiPrioSet getLicenseFromSpdxId getExe;
112117 inherit (self.sources) pathType pathIsDirectory cleanSourceFilter
113118 cleanSource sourceByRegex sourceFilesBySuffices
114119 commitIdFromGitRepo cleanSourceWith pathHasContext
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+47−2
@@ -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 }:
@@ -108,7 +108,7 @@ rec {
108108 * The mk* configuration attributes can generically change
109109 * the way sections and key-value strings are generated.
110110 *
111− * For more examples see the test cases in ./tests.nix.
111+ * For more examples see the test cases in ./tests/misc.nix.
112112 */
113113 toINI = {
114114 # apply transformations (e.g. escapes) to section names
@@ -130,6 +130,51 @@ rec {
130130 # map input to ini sections
131131 mapAttrsToStringsSep "\n" mkSection attrsOfAttrs;
132132
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+
133178 /* Generate a git-config file from an attrset.
134179 *
135180 * It has two major differences from the regular INI format:
lib/meta.nix+14
@@ -126,4 +126,18 @@ rec {
126126 lib.warn "getLicenseFromSpdxId: No license matches the given SPDX ID: ${licstr}"
127127 { shortName = licstr; }
128128 );
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)}";
129143}
lib/modules.nix+97−4
@@ -46,6 +46,7 @@ let
4646 showFiles
4747 showOption
4848 unknownModule
49+ literalExpression
4950 ;
5051
5152 showDeclPrefix = loc: decl: prefix:
@@ -112,6 +113,10 @@ rec {
112113 args ? {}
113114 , # This would be remove in the future, Prefer _module.check option instead.
114115 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
115120 }:
116121 let
117122 withWarnings = x:
@@ -140,7 +145,7 @@ rec {
140145 # this module is used, to avoid conflicts and allow chaining of
141146 # extendModules.
142147 internalModule = rec {
143− _file = ./modules.nix;
148+ _file = "lib/modules.nix";
144149
145150 key = _file;
146151
@@ -153,8 +158,94 @@ rec {
153158 # a `_module.args.pkgs = import (fetchTarball { ... }) {}` won't
154159 # start a download when `pkgs` wasn't evaluated.
155160 type = types.lazyAttrsOf types.raw;
156− internal = true;
157− description = "Arguments passed to each module.";
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+ '';
158249 };
159250
160251 _module.check = mkOption {
@@ -254,15 +345,17 @@ rec {
254345 modules ? [],
255346 specialArgs ? {},
256347 prefix ? [],
348+ extensionOffset ? length modules,
257349 }:
258350 evalModules (evalModulesArgs // {
259351 modules = regularModules ++ modules;
260352 specialArgs = evalModulesArgs.specialArgs or {} // specialArgs;
261353 prefix = extendArgs.prefix or evalModulesArgs.prefix;
354+ inherit extensionOffset;
262355 });
263356
264357 type = lib.types.submoduleWith {
265− inherit modules specialArgs;
358+ inherit modules specialArgs extensionOffset;
266359 };
267360
268361 result = withWarnings {
lib/strings.nix+196−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
@@ -756,7 +813,14 @@ rec {
756813 sanitizeDerivationName pkgs.hello
757814 => "-nix-store-2g75chlbpxlrqn15zlby2dfh8hr9qwbk-hello-2.10"
758815 */
759− 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 [
760824 # Get rid of string context. This is safe under the assumption that the
761825 # resulting string is only used as a derivation name
762826 unsafeDiscardStringContext
@@ -774,4 +838,131 @@ rec {
774838 (x: if stringLength x == 0 then "unknown" else x)
775839 ];
776840
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;
777968}
lib/systems/doubles.nix+2
@@ -74,6 +74,8 @@ in {
7474 mips = filterDoubles predicates.isMips;
7575 mmix = filterDoubles predicates.isMmix;
7676 riscv = filterDoubles predicates.isRiscV;
77+ riscv32 = filterDoubles predicates.isRiscV32;
78+ riscv64 = filterDoubles predicates.isRiscV64;
7779 vc4 = filterDoubles predicates.isVc4;
7880 or1k = filterDoubles predicates.isOr1k;
7981 m68k = filterDoubles predicates.isM68k;
lib/systems/inspect.nix+3
@@ -13,6 +13,7 @@ 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; }; };
@@ -23,6 +24,8 @@ rec {
2324 isMips64n64 = { cpu = { family = "mips"; bits = 64; }; abi = { abi = "64"; }; };
2425 isMmix = { cpu = { family = "mmix"; }; };
2526 isRiscV = { cpu = { family = "riscv"; }; };
27+ isRiscV32 = { cpu = { family = "riscv"; bits = 32; }; };
28+ isRiscV64 = { cpu = { family = "riscv"; bits = 64; }; };
2629 isSparc = { cpu = { family = "sparc"; }; };
2730 isWasm = { cpu = { family = "wasm"; }; };
2831 isMsp430 = { cpu = { family = "msp430"; }; };
lib/systems/platforms.nix+3−3
@@ -3,7 +3,7 @@
33# targetPlatform, etc) containing at least the minimal set of attrs
44# required (see types.parsedPlatform in lib/systems/parse.nix). This
55# file takes an already-valid platform and further elaborates it with
6−# optional fields such as linux-kernel, gcc, etc.
6+# optional fields; currently these are: linux-kernel, gcc, and rustc.
77
88{ lib }:
99rec {
@@ -500,7 +500,7 @@ rec {
500500 # based on:
501501 # https://www.mail-archive.com/qemu-discuss@nongnu.org/msg05179.html
502502 # https://gmplib.org/~tege/qemu.html#mips64-debian
503− mips64el-qemu-linux-gnuabi64 = (import ./examples).mips64el-linux-gnuabi64 // {
503+ mips64el-qemu-linux-gnuabi64 = {
504504 linux-kernel = {
505505 name = "mips64el";
506506 baseConfig = "64r2el_defconfig";
@@ -568,5 +568,5 @@ rec {
568568
569569 else if platform.parsed.cpu == lib.systems.parse.cpuTypes.powerpc64le then powernv
570570
571− else pc;
571+ else { };
572572}
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/misc.nix+277−1
@@ -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
@@ -251,6 +260,56 @@ runTests {
251260 expected = "&quot;test&quot; &apos;test&apos; &lt; &amp; &gt;";
252261 };
253262
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+
254313# LISTS
255314
256315 testFilter = {
@@ -471,6 +530,66 @@ runTests {
471530 '';
472531 };
473532
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+
474593 /* right now only invocation check */
475594 testToJSONSimple =
476595 let val = {
@@ -649,6 +768,11 @@ runTests {
649768 expected = "foo";
650769 };
651770
771+ testSanitizeDerivationNameUnicode = testSanitizeDerivationName {
772+ name = "fö";
773+ expected = "f-";
774+ };
775+
652776 testSanitizeDerivationNameAscii = testSanitizeDerivationName {
653777 name = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
654778 expected = "-+--.-0123456789-=-?-ABCDEFGHIJKLMNOPQRSTUVWXYZ-_-abcdefghijklmnopqrstuvwxyz-";
@@ -691,7 +815,7 @@ runTests {
691815
692816 locs = filter (o: ! o.internal) (optionAttrSetToDocList options);
693817 in map (o: o.loc) locs;
694− expected = [ [ "foo" ] [ "foo" "<name>" "bar" ] [ "foo" "bar" ] ];
818+ expected = [ [ "_module" "args" ] [ "foo" ] [ "foo" "<name>" "bar" ] [ "foo" "bar" ] ];
695819 };
696820
697821 testCartesianProductOfEmptySet = {
@@ -913,4 +1037,156 @@ runTests {
9131037 };
9141038 };
9151039
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+ };
9161192}
lib/tests/modules.sh+5−1
@@ -293,7 +293,7 @@ checkConfigOutput '^"a c"$' config.result ./functionTo/merging-attrs.nix
293293
294294# moduleType
295295checkConfigOutput '^"a b"$' config.resultFoo ./declare-variants.nix ./define-variant.nix
296−checkConfigOutput '^"a y z"$' config.resultFooBar ./declare-variants.nix ./define-variant.nix
296+checkConfigOutput '^"a b y z"$' config.resultFooBar ./declare-variants.nix ./define-variant.nix
297297checkConfigOutput '^"a b c"$' config.resultFooFoo ./declare-variants.nix ./define-variant.nix
298298
299299## emptyValue's
@@ -327,6 +327,10 @@ checkConfigError 'The option .theOption.nested. in .other.nix. is already declar
327327# Test that types.optionType leaves types untouched as long as they don't need to be merged
328328checkConfigOutput 'ok' config.freeformItems.foo.bar ./adhoc-freeformType-survives-type-merge.nix
329329
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
333+
330334cat <<EOF
331335====== module tests ======
332336$pass Pass
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/systems.nix+3
@@ -19,6 +19,9 @@ with lib.systems.doubles; lib.runTests {
1919 testi686 = mseteq i686 [ "i686-linux" "i686-freebsd" "i686-genode" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" "i686-none" "i686-darwin" ];
2020 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" ];
lib/types.nix+8−2
@@ -568,6 +568,11 @@ rec {
568568 { modules
569569 , specialArgs ? {}
570570 , 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
571576 }@attrs:
572577 let
573578 inherit (lib.modules) evalModules;
@@ -579,11 +584,11 @@ rec {
579584 allModules = defs: imap1 (n: { value, file }:
580585 if isFunction value
581586 then setFunctionArgs
582− (args: lib.modules.unifyModuleSyntax file "${toString file}-${toString n}" (value args))
587+ (args: lib.modules.unifyModuleSyntax file "${toString file}-${toString (n + extensionOffset)}" (value args))
583588 (functionArgs value)
584589 else if isAttrs value
585590 then
586− lib.modules.unifyModuleSyntax file "${toString file}-${toString n}" (shorthandToModule value)
591+ lib.modules.unifyModuleSyntax file "${toString file}-${toString (n + extensionOffset)}" (shorthandToModule value)
587592 else value
588593 ) defs;
589594
@@ -620,6 +625,7 @@ rec {
620625 (base.extendModules {
621626 modules = [ { _module.args.name = last loc; } ] ++ allModules defs;
622627 prefix = loc;
628+ extensionOffset = extensionOffset + length defs;
623629 }).config;
624630 emptyValue = { value = {}; };
625631 getSubOptions = prefix: (base.extendModules
maintainers/maintainer-list.nix+253−38
@@ -380,6 +380,12 @@
380380 githubId = 209175;
381381 name = "Alesya Huzik";
382382 };
383+ aidalgol = {
384+ email = "aidalgol+nixpkgs@fastmail.net";
385+ github = "aidalgol";
386+ githubId = 2313201;
387+ name = "Aidan Gauland";
388+ };
383389 aij = {
384390 email = "aij+git@mrph.org";
385391 github = "aij";
@@ -519,6 +525,12 @@
519525 githubId = 38869148;
520526 name = "Alex Eyre";
521527 };
528+ algram = {
529+ email = "aliasgram@gmail.com";
530+ github = "Algram";
531+ githubId = 5053729;
532+ name = "Alias Gram";
533+ };
522534 alibabzo = {
523535 email = "alistair.bill@gmail.com";
524536 github = "alibabzo";
@@ -669,6 +681,18 @@
669681 githubId = 858965;
670682 name = "Andrew Morsillo";
671683 };
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+ };
672696 andehen = {
673697 email = "git@andehen.net";
674698 github = "andehen";
@@ -817,6 +841,13 @@
817841 githubId = 5327697;
818842 name = "Anatolii Prylutskyi";
819843 };
844+ anselmschueler = {
845+ email = "mail@anselmschueler.com";
846+ github = "schuelermine";
847+ githubId = 48802534;
848+ name = "Anselm Schüler";
849+ matrix = "@schuelermine:matrix.org";
850+ };
820851 antoinerg = {
821852 email = "roygobeil.antoine@gmail.com";
822853 github = "antoinerg";
@@ -1037,8 +1068,8 @@
10371068 name = "Kirill Boltaev";
10381069 };
10391070 ashley = {
1040− email = "personavinny@protonmail.com";
1041− github = "paranoidcat";
1071+ email = "ashley@kira64.xyz";
1072+ github = "kira64xyz";
10421073 githubId = 84152630;
10431074 name = "Ashley Chiara";
10441075 };
@@ -1378,6 +1409,12 @@
13781409 githubId = 164148;
13791410 name = "Ben Darwin";
13801411 };
1412+ bdd = {
1413+ email = "bdd@mindcast.org";
1414+ github = "bdd";
1415+ githubId = 11135;
1416+ name = "Berk D. Demir";
1417+ };
13811418 bdesham = {
13821419 email = "benjamin@esham.io";
13831420 github = "bdesham";
@@ -1794,6 +1831,12 @@
17941831 githubId = 7214361;
17951832 name = "Roman Gerasimenko";
17961833 };
1834+ builditluc = {
1835+ email = "builditluc@icloud.com";
1836+ github = "builditluc";
1837+ githubId = 37375448;
1838+ name = "Buildit";
1839+ };
17971840 bburdette = {
17981841 email = "bburdette@protonmail.com";
17991842 github = "bburdette";
@@ -2043,6 +2086,12 @@
20432086 githubId = 8228888;
20442087 name = "Charlie Hanley";
20452088 };
2089+ charlesbaynham = {
2090+ email = "charlesbaynham@gmail.com";
2091+ github = "charlesbaynham";
2092+ githubId = 4397637;
2093+ name = "Charles Baynham";
2094+ };
20462095 CharlesHD = {
20472096 email = "charleshdespointes@gmail.com";
20482097 github = "CharlesHD";
@@ -2083,12 +2132,6 @@
20832132 githubId = 18648043;
20842133 name = "Daniel Cartwright";
20852134 };
2086− chiiruno = {
2087− email = "okinan@protonmail.com";
2088− github = "chiiruno";
2089− githubId = 30435868;
2090− name = "Okina Matara";
2091− };
20922135 Chili-Man = {
20932136 email = "dr.elhombrechile@gmail.com";
20942137 name = "Diego Rodriguez";
@@ -2260,6 +2303,7 @@
22602303 fingerprint = "539F 0655 4D35 38A5 429A E253 13E7 9449 C052 5215";
22612304 }];
22622305 name = "ckie";
2306+ matrix = "@ckie:ckie.dev";
22632307 };
22642308 clkamp = {
22652309 email = "c@lkamp.de";
@@ -3837,6 +3881,13 @@
38373881 githubId = 222467;
38383882 name = "Dmitry Ivanov";
38393883 };
3884+ ethindp = {
3885+ name = "Ethin Probst";
3886+ email = "harlydavidsen@gmail.com";
3887+ matrix = "@ethindp:the-gdn.net";
3888+ github = "ethindp";
3889+ githubId = 8030501;
3890+ };
38403891 Etjean = {
38413892 email = "et.jean@outlook.fr";
38423893 github = "Etjean";
@@ -4073,11 +4124,18 @@
40734124 matrix = "@felschr:matrix.org";
40744125 github = "felschr";
40754126 githubId = 3314323;
4076− name = "Felix Tenley";
4077− keys = [{
4078− longkeyid = "ed25519/0x910ACB9F6BD26F58";
4079− fingerprint = "6AB3 7A28 5420 9A41 82D9 0068 910A CB9F 6BD2 6F58";
4080− }];
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+ ];
40814139 };
40824140 ffinkdevs = {
40834141 email = "fink@h0st.space";
@@ -4502,6 +4560,12 @@
45024560 githubId = 3217744;
45034561 name = "Peter Ferenczy";
45044562 };
4563+ ghostbuster91 = {
4564+ name = "Kasper Kondzielski";
4565+ email = "kghost0@gmail.com";
4566+ github = "ghostbuster91";
4567+ githubId = 5662622;
4568+ };
45054569 ghuntley = {
45064570 email = "ghuntley@ghuntley.com";
45074571 github = "ghuntley";
@@ -4656,6 +4720,12 @@
46564720 githubId = 4656860;
46574721 name = "Gaute Ravndal";
46584722 };
4723+ graysonhead = {
4724+ email = "grayson@graysonhead.net";
4725+ github = "graysonhead";
4726+ githubId = 6179496;
4727+ name = "Grayson Head";
4728+ };
46594729 grburst = {
46604730 email = "GRBurst@protonmail.com";
46614731 github = "GRBurst";
@@ -4684,6 +4754,12 @@
46844754 githubId = 201997;
46854755 name = "Eric Seidel";
46864756 };
4757+ grindhold = {
4758+ name = "grindhold";
4759+ email = "grindhold+nix@skarphed.org";
4760+ github = "grindhold";
4761+ githubId = 2592640;
4762+ };
46874763 gspia = {
46884764 email = "iahogsp@gmail.com";
46894765 github = "gspia";
@@ -4702,6 +4778,12 @@
47024778 githubId = 343415;
47034779 name = "Greg Roodt";
47044780 };
4781+ grnnja = {
4782+ email = "grnnja@gmail.com";
4783+ github = "grnnja";
4784+ githubId = 31556469;
4785+ name = "Prem Netsuwan";
4786+ };
47054787 gruve-p = {
47064788 email = "groestlcoin@gmail.com";
47074789 github = "gruve-p";
@@ -5417,6 +5499,12 @@
54175499 githubId = 41924494;
54185500 name = "Ivar";
54195501 };
5502+ iwanb = {
5503+ email = "tracnar@gmail.com";
5504+ github = "iwanb";
5505+ githubId = 4035835;
5506+ name = "Iwan";
5507+ };
54205508 ixmatus = {
54215509 email = "parnell@digitalmentat.com";
54225510 github = "ixmatus";
@@ -5561,6 +5649,12 @@
55615649 githubId = 488556;
55625650 name = "Javier Aguirre";
55635651 };
5652+ jayesh-bhoot = {
5653+ name = "Jayesh Bhoot";
5654+ email = "jayesh@bhoot.sh";
5655+ github = "jayesh-bhoot";
5656+ githubId = 1915507;
5657+ };
55645658 jb55 = {
55655659 email = "jb55@jb55.com";
55665660 github = "jb55";
@@ -6791,12 +6885,6 @@
67916885 githubId = 99639;
67926886 name = "Pawel Kruszewski";
67936887 };
6794− ktosiek = {
6795− email = "tomasz.kontusz@gmail.com";
6796− github = "ktosiek";
6797− githubId = 278013;
6798− name = "Tomasz Kontusz";
6799− };
68006888 kubukoz = {
68016889 email = "kubukoz@gmail.com";
68026890 github = "kubukoz";
@@ -7130,6 +7218,13 @@
71307218 githubId = 1769386;
71317219 name = "Liam Diprose";
71327220 };
7221+ libjared = {
7222+ email = "jared@perrycode.com";
7223+ github = "libjared";
7224+ githubId = 3746656;
7225+ matrix = "@libjared:matrix.org";
7226+ name = "Jared Perry";
7227+ };
71337228 liff = {
71347229 email = "liff@iki.fi";
71357230 github = "liff";
@@ -7160,6 +7255,13 @@
71607255 githubId = 714;
71617256 name = "Lily Ballard";
71627257 };
7258+ lilyinstarlight = {
7259+ email = "lily@lily.flowers";
7260+ matrix = "@lily:lily.flowers";
7261+ github = "lilyinstarlight";
7262+ githubId = 298109;
7263+ name = "Lily Foster";
7264+ };
71637265 limeytexan = {
71647266 email = "limeytexan@gmail.com";
71657267 github = "limeytexan";
@@ -7288,7 +7390,7 @@
72887390 name = "Anthony Lodi";
72897391 };
72907392 loicreynier = {
7291− email = "loic@loireynier.fr";
7393+ email = "loic@loicreynier.fr";
72927394 github = "loicreynier";
72937395 githubId = 88983487;
72947396 name = "Loïc Reynier";
@@ -8079,6 +8181,12 @@
80798181 githubId = 20536514;
80808182 name = "Magdalena Haselsteiner";
80818183 };
8184+ mh182 = {
8185+ email = "mh182@chello.at";
8186+ github = "mh182";
8187+ githubId = 9980864;
8188+ name = "Max Hofer";
8189+ };
80828190 mic92 = {
80838191 email = "joerg@thalheim.io";
80848192 matrix = "@mic92:nixos.dev";
@@ -8252,6 +8360,17 @@
82528360 githubId = 1776903;
82538361 name = "Andrew Abbott";
82548362 };
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+ };
82558374 mitchmindtree = {
82568375 email = "mail@mitchellnordine.com";
82578376 github = "mitchmindtree";
@@ -8549,7 +8668,7 @@
85498668 };
85508669 msfjarvis = {
85518670 github = "msfjarvis";
8552− githubId = 3348378;
8671+ githubId = 13348378;
85538672 name = "Harsh Shandilya";
85548673 email = "nixos@msfjarvis.dev";
85558674 keys = [{
@@ -8803,6 +8922,12 @@
88038922 githubId = 3747396;
88048923 name = "Nathan Isom";
88058924 };
8925+ neilmayhew = {
8926+ email = "nix@neil.mayhew.name";
8927+ github = "neilmayhew";
8928+ githubId = 166791;
8929+ name = "Neil Mayhew";
8930+ };
88068931 nelsonjeppesen = {
88078932 email = "nix@jeppesen.io";
88088933 github = "NelsonJeppesen";
@@ -9910,6 +10035,12 @@
991010035 fingerprint = "2CD2 B030 BD22 32EF DF5A 008A 3618 20A4 5DB4 1E9A";
991110036 }];
991210037 };
10038+ podocarp = {
10039+ email = "xdjiaxd@gmail.com";
10040+ github = "podocarp";
10041+ githubId = 10473184;
10042+ name = "Jia Xiaodong";
10043+ };
991310044 polendri = {
991410045 email = "paul@ijj.li";
991510046 github = "polendri";
@@ -10169,6 +10300,12 @@
1016910300 githubId = 115877;
1017010301 name = "Kenny Shen";
1017110302 };
10303+ quag = {
10304+ email = "quaggy@gmail.com";
10305+ github = "quag";
10306+ githubId = 35086;
10307+ name = "Jonathan Wright";
10308+ };
1017210309 queezle = {
1017310310 email = "git@queezle.net";
1017410311 github = "qzle";
@@ -10989,28 +11126,22 @@
1098911126 githubId = 132835;
1099011127 name = "Samuel Dionne-Riel";
1099111128 };
10992− samuelgrf = {
10993− email = "s@muel.gr";
10994− github = "samuelgrf";
10995− githubId = 67663538;
10996− name = "Samuel Gräfenstein";
10997− keys = [
10998− {
10999− longkeyid = "rsa4096/0xDE75F92E318123F0";
11000− fingerprint = "6F2E 2A90 423C 8111 BFF2 895E DE75 F92E 3181 23F0";
11001− }
11002− {
11003− longkeyid = "rsa4096/0xEF76A063F15C63C8";
11004− fingerprint = "FF24 5832 8FAF 4660 18C6 186E EF76 A063 F15C 63C8";
11005− }
11006− ];
11007− };
1100811129 samuelrivas = {
1100911130 email = "samuelrivas@gmail.com";
1101011131 github = "samuelrivas";
1101111132 githubId = 107703;
1101211133 name = "Samuel Rivas";
1101311134 };
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+ };
1101411145 sander = {
1101511146 email = "s.vanderburg@tudelft.nl";
1101611147 github = "svanderburg";
@@ -11117,6 +11248,16 @@
1111711248 email = "schristopher@konputa.com";
1111811249 name = "Scott Christopher";
1111911250 };
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+};
1112011261 scode = {
1112111262 email = "peter.schuller@infidyne.com";
1112211263 github = "scode";
@@ -11227,6 +11368,12 @@
1122711368 githubId = 307899;
1122811369 name = "Gurkan Gur";
1122911370 };
11371+ serge = {
11372+ email = "sb@canva.com";
11373+ github = "serge-belov";
11374+ githubId = 38824235;
11375+ name = "Serge Belov";
11376+ };
1123011377 sersorrel = {
1123111378 email = "ash@sorrel.sh";
1123211379 github = "sersorrel";
@@ -11271,6 +11418,12 @@
1127111418 githubId = 1151264;
1127211419 name = "Sebastian Graf";
1127311420 };
11421+ shadaj = {
11422+ email = "shadaj@users.noreply.github.com";
11423+ github = "shadaj";
11424+ githubId = 543055;
11425+ name = "Shadaj Laddad";
11426+ };
1127411427 shahrukh330 = {
1127511428 email = "shahrukh330@gmail.com";
1127611429 github = "shahrukh330";
@@ -11467,6 +11620,12 @@
1146711620 githubId = 2770647;
1146811621 name = "Simon Vandel Sillesen";
1146911622 };
11623+ sir4ur0n = {
11624+ email = "sir4ur0n@users.noreply.github.com";
11625+ github = "sir4ur0n";
11626+ githubId = 1204125;
11627+ name = "sir4ur0n";
11628+ };
1147011629 siraben = {
1147111630 email = "bensiraphob@gmail.com";
1147211631 matrix = "@siraben:matrix.org";
@@ -11904,6 +12063,12 @@
1190412063 githubId = 1694705;
1190512064 name = "Sam Stites";
1190612065 };
12066+ strager = {
12067+ email = "strager.nds@gmail.com";
12068+ github = "strager";
12069+ githubId = 48666;
12070+ name = "Matthew \"strager\" Glazar";
12071+ };
1190712072 stumoss = {
1190812073 email = "samoss@gmail.com";
1190912074 github = "stumoss";
@@ -12396,6 +12561,12 @@
1239612561 githubId = 844343;
1239712562 name = "Thiago K. Okada";
1239812563 };
12564+ thibaultlemaire = {
12565+ email = "thibault.lemaire@protonmail.com";
12566+ github = "ThibaultLemaire";
12567+ githubId = 21345269;
12568+ name = "Thibault Lemaire";
12569+ };
1239912570 thibautmarty = {
1240012571 email = "github@thibautmarty.fr";
1240112572 matrix = "@thibaut:thibautmarty.fr";
@@ -12642,6 +12813,13 @@
1264212813 githubId = 90456;
1264312814 name = "Rebecca (Bex) Kelly";
1264412815 };
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+ };
1264512823 travisbhartwell = {
1264612824 email = "nafai@travishartwell.net";
1264712825 github = "travisbhartwell";
@@ -13116,6 +13294,12 @@
1311613294 githubId = 1771332;
1311713295 name = "László Vaskó";
1311813296 };
13297+ vlinkz = {
13298+ email = "vmfuentes64@gmail.com";
13299+ github = "vlinkz";
13300+ githubId = 20145996;
13301+ name = "Victor Fuentes";
13302+ };
1311913303 vlstill = {
1312013304 email = "xstill@fi.muni.cz";
1312113305 github = "vlstill";
@@ -13408,7 +13592,7 @@
1340813592 name = "Andrei Pampu";
1340913593 };
1341013594 wolfangaukang = {
13411− email = "liquid.query960@4wrd.cc";
13595+ email = "clone.gleeful135+nixpkgs@anonaddy.me";
1341213596 github = "wolfangaukang";
1341313597 githubId = 8378365;
1341413598 name = "P. R. d. O.";
@@ -13461,6 +13645,13 @@
1346113645 github = "wunderbrick";
1346213646 githubId = 52174714;
1346313647 };
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+ };
1346413655 wyvie = {
1346513656 email = "elijahrum@gmail.com";
1346613657 github = "wyvie";
@@ -14020,6 +14211,12 @@
1402014211 github = "deifactor";
1402114212 githubId = 30192992;
1402214213 };
14214+ deinferno = {
14215+ name = "deinferno";
14216+ email = "14363193+deinferno@users.noreply.github.com";
14217+ github = "deinferno";
14218+ githubId = 14363193;
14219+ };
1402314220 fzakaria = {
1402414221 name = "Farid Zakaria";
1402514222 email = "farid.m.zakaria@gmail.com";
@@ -14143,6 +14340,12 @@
1414314340 github = "zbioe";
1414414341 githubId = 7332055;
1414514342 };
14343+ zendo = {
14344+ name = "zendo";
14345+ email = "linzway@qq.com";
14346+ github = "zendo";
14347+ githubId = 348013;
14348+ };
1414614349 zenithal = {
1414714350 name = "zenithal";
1414814351 email = "i@zenithal.me";
@@ -14263,4 +14466,16 @@
1426314466 github = "kuwii";
1426414467 githubId = 10705175;
1426514468 };
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;
14480+ };
1426614481}
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/haskell/merge-and-open-pr.sh+1−1
@@ -99,7 +99,7 @@ This PR is the regular merge of the \`haskell-updates\` branch into \`master\`.
9999
100100This 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).
101101
102−We roughly aim to merge these \`haskell-updates\` PRs at least once every two weeks. See the @NixOS/haskell [team calendar](https://cloud.maralorn.de/apps/calendar/p/Mw5WLnzsP7fC4Zky) for who is currently in charge of this branch.
102+We roughly aim to merge these \`haskell-updates\` PRs at least once every two weeks. See the @NixOS/haskell [team calendar](https://cloud.maralorn.de/apps/calendar/p/H6migHmKX7xHoTFa) for who is currently in charge of this branch.
103103
104104### haskellPackages Workflow Summary
105105
maintainers/scripts/luarocks-packages.csv+2−1
@@ -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,6 +64,7 @@ luasocket,,,,,,
6464luasql-sqlite3,,,,,,vyp
6565luassert,,,,,,
6666luasystem,,,,,,
67+luaunbound,,,,,
6768luautf8,,,,,,pstn
6869luazip,,,,,,
6970lua-yajl,,,,,,pstn
maintainers/scripts/pluginupdate.py+135−108
@@ -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
@@ -85,21 +86,31 @@ def make_request(url: str, token=None) -> urllib.request.Request:
8586 headers["Authorization"] = f"token {token}"
8687 return urllib.request.Request(url, headers=headers)
8788
89+
90+# a dictionary of plugins and their new repositories
91+Redirects = Dict['PluginDesc', 'Repo']
92+
8893class Repo:
8994 def __init__(
90− self, uri: str, branch: str, alias: Optional[str]
95+ self, uri: str, branch: str
9196 ) -> None:
9297 self.uri = uri
9398 '''Url to the repo'''
94− self.branch = branch
95− self.alias = alias
96− self.redirect: Dict[str, str] = {}
99+ self._branch = branch
100+ # Redirect is the new Repo to use
101+ self.redirect: Optional['Repo'] = None
97102 self.token = "dummy_token"
98103
99104 @property
100105 def name(self):
101106 return self.uri.split('/')[-1]
102107
108+ @property
109+ def branch(self):
110+ return self._branch or "HEAD"
111+
112+ def __str__(self) -> str:
113+ return f"{self.uri}"
103114 def __repr__(self) -> str:
104115 return f"Repo({self.name}, {self.uri})"
105116
@@ -109,6 +120,7 @@ class Repo:
109120
110121 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
111122 def latest_commit(self) -> Tuple[str, datetime]:
123+ log.debug("Latest commit")
112124 loaded = self._prefetch(None)
113125 updated = datetime.strptime(loaded['date'], "%Y-%m-%dT%H:%M:%S%z")
114126
@@ -124,6 +136,7 @@ class Repo:
124136 return loaded
125137
126138 def prefetch(self, ref: Optional[str]) -> str:
139+ print("Prefetching")
127140 loaded = self._prefetch(ref)
128141 return loaded["sha256"]
129142
@@ -137,21 +150,22 @@ class Repo:
137150
138151class RepoGitHub(Repo):
139152 def __init__(
140− self, owner: str, repo: str, branch: str, alias: Optional[str]
153+ self, owner: str, repo: str, branch: str
141154 ) -> None:
142155 self.owner = owner
143156 self.repo = repo
144157 self.token = None
145158 '''Url to the repo'''
146− super().__init__(self.url(""), branch, alias)
147− log.debug("Instantiating github repo %s/%s", self.owner, self.repo)
159+ super().__init__(self.url(""), branch)
160+ log.debug("Instantiating github repo owner=%s and repo=%s", self.owner, self.repo)
148161
149162 @property
150163 def name(self):
151164 return self.repo
152165
153166 def url(self, path: str) -> str:
154− return urljoin(f"https://github.com/{self.owner}/{self.name}/", path)
167+ res = urljoin(f"https://github.com/{self.owner}/{self.repo}/", path)
168+ return res
155169
156170 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
157171 def has_submodules(self) -> bool:
@@ -168,6 +182,7 @@ class RepoGitHub(Repo):
168182 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
169183 def latest_commit(self) -> Tuple[str, datetime]:
170184 commit_url = self.url(f"commits/{self.branch}.atom")
185+ log.debug("Sending request to %s", commit_url)
171186 commit_req = make_request(commit_url, self.token)
172187 with urllib.request.urlopen(commit_req, timeout=10) as req:
173188 self._check_for_redirect(commit_url, req)
@@ -191,12 +206,9 @@ class RepoGitHub(Repo):
191206 new_owner, new_name = (
192207 urllib.parse.urlsplit(response_url).path.strip("/").split("/")[:2]
193208 )
194− end_line = "\n" if self.alias is None else f" as {self.alias}\n"
195− plugin_line = "{owner}/{name}" + end_line
196209
197− old_plugin = plugin_line.format(owner=self.owner, name=self.name)
198− new_plugin = plugin_line.format(owner=new_owner, name=new_name)
199− self.redirect[old_plugin] = new_plugin
210+ new_repo = RepoGitHub(owner=new_owner, repo=new_name, branch=self.branch)
211+ self.redirect = new_repo
200212
201213
202214 def prefetch(self, commit: str) -> str:
@@ -207,9 +219,9 @@ class RepoGitHub(Repo):
207219 return sha256
208220
209221 def prefetch_github(self, ref: str) -> str:
210− data = subprocess.check_output(
211− ["nix-prefetch-url", "--unpack", self.url(f"archive/{ref}.tar.gz")]
212− )
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)
213225 return data.strip().decode("utf-8")
214226
215227 def as_nix(self, plugin: "Plugin") -> str:
@@ -226,7 +238,7 @@ class RepoGitHub(Repo):
226238 }}'''
227239
228240
229−@dataclass
241+@dataclass(frozen=True)
230242class PluginDesc:
231243 repo: Repo
232244 branch: str
@@ -239,21 +251,38 @@ class PluginDesc:
239251 else:
240252 return self.alias
241253
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)
242278
279+@dataclass
243280class Plugin:
244− def __init__(
245− self,
246− name: str,
247− commit: str,
248− has_submodules: bool,
249− sha256: str,
250− date: Optional[datetime] = None,
251− ) -> None:
252− self.name = name
253− self.commit = commit
254− self.has_submodules = has_submodules
255− self.sha256 = sha256
256− self.date = date
281+ name: str
282+ commit: str
283+ has_submodules: bool
284+ sha256: str
285+ date: Optional[datetime] = None
257286
258287 @property
259288 def normalized_name(self) -> str:
@@ -270,6 +299,27 @@ class Plugin:
270299 return copy
271300
272301
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+
273323
274324class Editor:
275325 """The configuration of the update script."""
@@ -293,20 +343,20 @@ class Editor:
293343 self.deprecated = deprecated or root.joinpath("deprecated.json")
294344 self.cache_file = cache_file or f"{name}-plugin-cache.json"
295345
296− def get_current_plugins(self):
346+ def get_current_plugins(self) -> List[Plugin]:
297347 """To fill the cache"""
298− return get_current_plugins(self)
299−
300− def load_plugin_spec(self, config: FetchConfig, plugin_file) -> List[PluginDesc]:
348+ data = run_nix_expr(self.get_plugins)
301349 plugins = []
302− with open(plugin_file) as f:
303− for line in f:
304− if line.startswith("#"):
305− continue
306− plugin = parse_plugin_line(config, line)
307− plugins.append(plugin)
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)
308354 return plugins
309355
356+ def load_plugin_spec(self, config: FetchConfig, plugin_file) -> List[PluginDesc]:
357+ '''CSV spec'''
358+ return load_plugins_from_csv(config, plugin_file)
359+
310360 def generate_nix(self, plugins, outfile: str):
311361 '''Returns nothing for now, writes directly to outfile'''
312362 raise NotImplementedError()
@@ -316,11 +366,11 @@ class Editor:
316366 _prefetch = functools.partial(prefetch, cache=cache)
317367
318368 def update() -> dict:
319− plugin_names = self.load_plugin_spec(config, input_file)
369+ plugins = self.load_plugin_spec(config, input_file)
320370
321371 try:
322372 pool = Pool(processes=config.proc)
323− results = pool.map(_prefetch, plugin_names)
373+ results = pool.map(_prefetch, plugins)
324374 finally:
325375 cache.store()
326376
@@ -415,23 +465,10 @@ class CleanEnvironment(object):
415465 self.empty_config.close()
416466
417467
418−def get_current_plugins(editor: Editor) -> List[Plugin]:
419− with CleanEnvironment():
420− cmd = ["nix", "eval", "--extra-experimental-features", "nix-command", "--impure", "--json", "--expr", editor.get_plugins]
421− log.debug("Running command %s", cmd)
422− out = subprocess.check_output(cmd)
423− data = json.loads(out)
424− plugins = []
425− for name, attr in data.items():
426− p = Plugin(name, attr["rev"], attr["submodules"], attr["sha256"])
427− plugins.append(p)
428− return plugins
429−
430−
431468def prefetch_plugin(
432469 p: PluginDesc,
433470 cache: "Optional[Cache]" = None,
434−) -> Tuple[Plugin, Dict[str, str]]:
471+) -> Tuple[Plugin, Optional[Repo]]:
435472 repo, branch, alias = p.repo, p.branch, p.alias
436473 name = alias or p.repo.name
437474 commit = None
@@ -445,7 +482,7 @@ def prefetch_plugin(
445482 return cached_plugin, repo.redirect
446483
447484 has_submodules = repo.has_submodules()
448− print(f"prefetch {name}")
485+ log.debug(f"prefetch {name}")
449486 sha256 = repo.prefetch(commit)
450487
451488 return (
@@ -454,12 +491,7 @@ def prefetch_plugin(
454491 )
455492
456493
457−def fetch_plugin_from_pluginline(config: FetchConfig, plugin_line: str) -> Plugin:
458− plugin, _ = prefetch_plugin(parse_plugin_line(config, plugin_line))
459− return plugin
460−
461−
462−def print_download_error(plugin: str, ex: Exception):
494+def print_download_error(plugin: PluginDesc, ex: Exception):
463495 print(f"{plugin}: {ex}", file=sys.stderr)
464496 ex_traceback = ex.__traceback__
465497 tb_lines = [
@@ -468,20 +500,22 @@ def print_download_error(plugin: str, ex: Exception):
468500 ]
469501 print("\n".join(tb_lines))
470502
471−
472503def check_results(
473− results: List[Tuple[PluginDesc, Union[Exception, Plugin], Dict[str, str]]]
474−) -> Tuple[List[Tuple[PluginDesc, Plugin]], Dict[str, str]]:
504+ results: List[Tuple[PluginDesc, Union[Exception, Plugin], Optional[Repo]]]
505+) -> Tuple[List[Tuple[PluginDesc, Plugin]], Redirects]:
475506 ''' '''
476− failures: List[Tuple[str, Exception]] = []
507+ failures: List[Tuple[PluginDesc, Exception]] = []
477508 plugins = []
478− redirects: Dict[str, str] = {}
509+ redirects: Redirects = {}
479510 for (pdesc, result, redirect) in results:
480511 if isinstance(result, Exception):
481− failures.append((pdesc.name, result))
512+ failures.append((pdesc, result))
482513 else:
483− plugins.append((pdesc, result))
484− 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))
485519
486520 print(f"{len(results) - len(failures)} plugins were checked", end="")
487521 if len(failures) == 0:
@@ -495,31 +529,17 @@ def check_results(
495529
496530 sys.exit(1)
497531
498−def make_repo(uri, branch, alias) -> Repo:
532+def make_repo(uri: str, branch) -> Repo:
499533 '''Instantiate a Repo with the correct specialization depending on server (gitub spec)'''
500534 # dumb check to see if it's of the form owner/repo (=> github) or https://...
501− res = uri.split('/')
502− if len(res) <= 2:
503− repo = RepoGitHub(res[0], res[1], branch, alias)
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)
504539 else:
505− repo = Repo(uri.strip(), branch, alias)
540+ repo = Repo(uri.strip(), branch)
506541 return repo
507542
508−def parse_plugin_line(config: FetchConfig, line: str) -> PluginDesc:
509− branch = "HEAD"
510− alias = None
511− uri = line
512− if " as " in uri:
513− uri, alias = uri.split(" as ")
514− alias = alias.strip()
515− if "@" in uri:
516− uri, branch = uri.split("@")
517−
518− repo = make_repo(uri.strip(), branch.strip(), alias)
519− repo.token = config.github_token
520−
521− return PluginDesc(repo, branch.strip(), alias)
522−
523543
524544def get_cache_path(cache_file_name: str) -> Optional[Path]:
525545 xdg_cache = os.environ.get("XDG_CACHE_HOME", None)
@@ -576,36 +596,37 @@ class Cache:
576596
577597def prefetch(
578598 pluginDesc: PluginDesc, cache: Cache
579−) -> Tuple[PluginDesc, Union[Exception, Plugin], dict]:
599+) -> Tuple[PluginDesc, Union[Exception, Plugin], Optional[Repo]]:
580600 try:
581601 plugin, redirect = prefetch_plugin(pluginDesc, cache)
582602 cache[plugin.commit] = plugin
583603 return (pluginDesc, plugin, redirect)
584604 except Exception as e:
585− return (pluginDesc, e, {})
605+ return (pluginDesc, e, None)
606+
586607
587608
588609def rewrite_input(
589610 config: FetchConfig,
590611 input_file: Path,
591612 deprecated: Path,
592− redirects: Dict[str, str] = None,
593− append: Tuple = (),
613+ # old pluginDesc and the new
614+ redirects: Redirects = {},
615+ append: List[PluginDesc] = [],
594616):
595− with open(input_file, "r") as f:
596− lines = f.readlines()
617+ plugins = load_plugins_from_csv(config, input_file,)
597618
598− lines.extend(append)
619+ plugins.extend(append)
599620
600621 if redirects:
601− lines = [redirects.get(line, line) for line in lines]
602622
603623 cur_date_iso = datetime.now().strftime("%Y-%m-%d")
604624 with open(deprecated, "r") as f:
605625 deprecations = json.load(f)
606− for old, new in redirects.items():
607− old_plugin = fetch_plugin_from_pluginline(config, old)
608− new_plugin = fetch_plugin_from_pluginline(config, 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)
609630 if old_plugin.normalized_name != new_plugin.normalized_name:
610631 deprecations[old_plugin.normalized_name] = {
611632 "new": new_plugin.normalized_name,
@@ -615,10 +636,14 @@ def rewrite_input(
615636 json.dump(deprecations, f, indent=4, sort_keys=True)
616637 f.write("\n")
617638
618− lines = sorted(lines, key=str.casefold)
619−
620639 with open(input_file, "w") as f:
621− f.writelines(lines)
640+ log.debug("Writing into %s", input_file)
641+ # fields = dataclasses.fields(PluginDesc)
642+ fieldnames = ['repo', 'branch', 'alias']
643+ writer = csv.DictWriter(f, fieldnames, dialect='unix', quoting=csv.QUOTE_NONE)
644+ writer.writeheader()
645+ for plugin in sorted(plugins):
646+ writer.writerow(asdict(plugin))
622647
623648
624649def commit(repo: git.Repo, message: str, files: List[Path]) -> None:
@@ -660,9 +685,11 @@ def update_plugins(editor: Editor, args):
660685 )
661686
662687 for plugin_line in args.add_plugins:
663− editor.rewrite_input(fetch_config, 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)
664691 update()
665− plugin = fetch_plugin_from_pluginline(fetch_config, plugin_line)
692+ plugin, _ = prefetch_plugin(pdesc, )
666693 if autocommit:
667694 commit(
668695 nixpkgs_repo,
maintainers/team-list.nix+350
@@ -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,7 @@ with lib.maintainers; {
2734 m1cr0man
2835 ];
2936 scope = "Maintain ACME-related packages and modules.";
37+ shortName = "ACME";
3038 };
3139
3240 bazel = {
@@ -41,6 +49,8 @@ with lib.maintainers; {
4149 ylecornec
4250 ];
4351 scope = "Bazel build tool & related tools https://bazel.build/";
52+ shortName = "Bazel";
53+ enableFeatureFreezePing = true;
4454 };
4555
4656 beam = {
@@ -53,7 +63,32 @@ with lib.maintainers; {
5363 minijackson
5464 yurrriq
5565 ];
66+ githubTeams = [
67+ "beam"
68+ ];
5669 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;
5792 };
5893
5994 cinnamon = {
@@ -61,6 +96,8 @@ with lib.maintainers; {
6196 mkg20001
6297 ];
6398 scope = "Maintain Cinnamon desktop environment and applications made by the LinuxMint team.";
99+ shortName = "Cinnamon";
100+ enableFeatureFreezePing = true;
64101 };
65102
66103 chia = {
@@ -68,6 +105,32 @@ with lib.maintainers; {
68105 lourkeur
69106 ];
70107 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;
71134 };
72135
73136 cosmopolitan = {
@@ -84,6 +147,7 @@ with lib.maintainers; {
84147 limeytexan
85148 ];
86149 scope = "Group registration for D. E. Shaw employees who collectively maintain packages.";
150+ shortName = "Shaw employees";
87151 };
88152
89153 determinatesystems = {
@@ -93,11 +157,75 @@ with lib.maintainers; {
93157 grahamc
94158 ];
95159 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;
96223 };
97224
98225 freedesktop = {
99226 members = [ jtojnar ];
100227 scope = "Maintain Freedesktop.org packages for graphical desktop.";
228+ shortName = "freedesktop.org packaging";
101229 };
102230
103231 gcc = {
@@ -107,6 +235,7 @@ with lib.maintainers; {
107235 ericson2314
108236 ];
109237 scope = "Maintain GCC (GNU Compiler Collection) compilers";
238+ shortName = "GCC";
110239 };
111240
112241 golang = {
@@ -121,6 +250,8 @@ with lib.maintainers; {
121250 zowoq
122251 ];
123252 scope = "Maintain Golang compilers.";
253+ shortName = "Go";
254+ enableFeatureFreezePing = true;
124255 };
125256
126257 gnome = {
@@ -131,7 +262,12 @@ with lib.maintainers; {
131262 dasj19
132263 maxeaubrey
133264 ];
265+ githubTeams = [
266+ "gnome"
267+ ];
134268 scope = "Maintain GNOME desktop environment and platform.";
269+ shortName = "GNOME";
270+ enableFeatureFreezePing = true;
135271 };
136272
137273 haskell = {
@@ -141,7 +277,12 @@ with lib.maintainers; {
141277 maralorn
142278 sternenseemann
143279 ];
280+ githubTeams = [
281+ "haskell"
282+ ];
144283 scope = "Maintain Haskell packages and infrastructure.";
284+ shortName = "Haskell";
285+ enableFeatureFreezePing = true;
145286 };
146287
147288 home-assistant = {
@@ -152,6 +293,7 @@ with lib.maintainers; {
152293 mic92
153294 ];
154295 scope = "Maintain the Home Assistant ecosystem";
296+ shortName = "Home Assistant";
155297 };
156298
157299 iog = {
@@ -163,6 +305,7 @@ with lib.maintainers; {
163305 nrdxp
164306 ];
165307 scope = "Input-Output Global employees, which maintain critical software";
308+ shortName = "Input-Output Global employees";
166309 };
167310
168311 jitsi = {
@@ -173,6 +316,7 @@ with lib.maintainers; {
173316 yuka
174317 ];
175318 scope = "Maintain Jitsi.";
319+ shortName = "Jitsi";
176320 };
177321
178322 kubernetes = {
@@ -184,6 +328,7 @@ with lib.maintainers; {
184328 zowoq
185329 ];
186330 scope = "Maintain the Kubernetes package and module";
331+ shortName = "Kubernetes";
187332 };
188333
189334 kodi = {
@@ -196,6 +341,7 @@ with lib.maintainers; {
196341 sephalon
197342 ];
198343 scope = "Maintain Kodi and related packages.";
344+ shortName = "Kodi";
199345 };
200346
201347 linux-kernel = {
@@ -206,6 +352,41 @@ with lib.maintainers; {
206352 qyliss
207353 ];
208354 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;
209390 };
210391
211392 mate = {
@@ -214,6 +395,7 @@ with lib.maintainers; {
214395 romildo
215396 ];
216397 scope = "Maintain Mate desktop environment and related packages.";
398+ shortName = "MATE";
217399 };
218400
219401 matrix = {
@@ -227,6 +409,40 @@ with lib.maintainers; {
227409 sumnerevans
228410 ];
229411 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;
230446 };
231447
232448 openstack = {
@@ -235,6 +451,7 @@ with lib.maintainers; {
235451 SuperSandro2000
236452 ];
237453 scope = "Maintain the ecosystem around OpenStack";
454+ shortName = "OpenStack";
238455 };
239456
240457 pantheon = {
@@ -242,7 +459,21 @@ with lib.maintainers; {
242459 davidak
243460 bobby285271
244461 ];
462+ githubTeams = [
463+ "pantheon"
464+ ];
245465 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;
246477 };
247478
248479 php = {
@@ -254,7 +485,12 @@ with lib.maintainers; {
254485 ma27
255486 talyz
256487 ];
488+ githubTeams = [
489+ "php"
490+ ];
257491 scope = "Maintain PHP related packages and extensions.";
492+ shortName = "PHP";
493+ enableFeatureFreezePing = true;
258494 };
259495
260496 podman = {
@@ -264,7 +500,54 @@ with lib.maintainers; {
264500 vdemeester
265501 zowoq
266502 ];
503+ githubTeams = [
504+ "podman"
505+ ];
267506 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;
268551 };
269552
270553 redcodelabs = {
@@ -274,6 +557,38 @@ with lib.maintainers; {
274557 wintrmvte
275558 ];
276559 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;
277592 };
278593
279594 sage = {
@@ -284,6 +599,7 @@ with lib.maintainers; {
284599 collares
285600 ];
286601 scope = "Maintain SageMath and the dependencies that are likely to break it.";
602+ shortName = "SageMath";
287603 };
288604
289605 sphinx = {
@@ -291,6 +607,7 @@ with lib.maintainers; {
291607 SuperSandro2000
292608 ];
293609 scope = "Maintain Sphinx related packages.";
610+ shortName = "Sphinx";
294611 };
295612
296613 serokell = {
@@ -300,6 +617,26 @@ with lib.maintainers; {
300617 mkaito
301618 ];
302619 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;
303640 };
304641
305642 tts = {
@@ -308,6 +645,18 @@ with lib.maintainers; {
308645 mic92
309646 ];
310647 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;
311660 };
312661
313662 xfce = {
@@ -315,5 +664,6 @@ with lib.maintainers; {
315664 romildo
316665 ];
317666 scope = "Maintain Xfce desktop environment and related packages.";
667+ shortName = "Xfce";
318668 };
319669}
nixos/doc/manual/administration/declarative-containers.section.md+1−1
@@ -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/default.nix+4
@@ -14,6 +14,10 @@ with pkgs;
1414let
1515 lib = pkgs.lib;
1616
17+ docbook_xsl_ns = pkgs.docbook-xsl-ns.override {
18+ withManOptDedupPatch = true;
19+ };
20+
1721 # We need to strip references to /nix/store/* from options,
1822 # including any `extraSources` if some modules came from elsewhere,
1923 # or else the build will fail.
nixos/doc/manual/development/development.xml−1
@@ -14,7 +14,6 @@
1414 <xi:include href="../from_md/development/building-parts.chapter.xml" />
1515 <xi:include href="../from_md/development/what-happens-during-a-system-switch.chapter.xml" />
1616 <xi:include href="../from_md/development/writing-documentation.chapter.xml" />
17− <xi:include href="../from_md/development/building-nixos.chapter.xml" />
1817 <xi:include href="../from_md/development/nixos-tests.chapter.xml" />
1918 <xi:include href="../from_md/development/testing-installer.chapter.xml" />
2019</part>
nixos/doc/manual/development/settings-options.section.md+14
@@ -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)
nixos/doc/manual/development/writing-nixos-tests.section.md+25−14
@@ -159,34 +159,42 @@ The following methods are available on machine objects:
159159`execute`
160160
161161: Execute a shell command, returning a list `(status, stdout)`.
162+
163+ Commands are run with `set -euo pipefail` set:
164+
165+ - If several commands are separated by `;` and one fails, the
166+ command as a whole will fail.
167+
168+ - For pipelines, the last non-zero exit status will be returned
169+ (if there is one; otherwise zero will be returned).
170+
171+ - Dereferencing unset variables fails the command.
172+
173+ - It will wait for stdout to be closed.
174+
162175 If the command detaches, it must close stdout, as `execute` will wait
163176 for this to consume all output reliably. This can be achieved by
164177 redirecting stdout to stderr `>&2`, to `/dev/console`, `/dev/null` or
165178 a file. Examples of detaching commands are `sleep 365d &`, where the
166179 shell forks a new process that can write to stdout and `xclip -i`, where
167180 the `xclip` command itself forks without closing stdout.
181+
168182 Takes an optional parameter `check_return` that defaults to `True`.
169183 Setting this parameter to `False` will not check for the return code
170184 and return -1 instead. This can be used for commands that shut down
171185 the VM and would therefore break the pipe that would be used for
172186 retrieving the return code.
173187
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+
174192`succeed`
175193
176194: Execute a shell command, raising an exception if the exit status is
177− not zero, otherwise returning the standard output. Commands are run
178− with `set -euo pipefail` set:
179−
180− - If several commands are separated by `;` and one fails, the
181− command as a whole will fail.
182−
183− - For pipelines, the last non-zero exit status will be returned
184− (if there is one, zero will be returned otherwise).
185−
186− - Dereferencing unset variables fail the command.
187−
188− - It will wait for stdout to be closed. See `execute` for the
189− implications.
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.
190198
191199`fail`
192200
@@ -196,10 +204,13 @@ The following methods are available on machine objects:
196204`wait_until_succeeds`
197205
198206: 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.
199210
200211`wait_until_fails`
201212
202−: Repeat a shell command with 1-second intervals until it fails.
213+: Like `wait_until_succeeds`, but repeating the command until it fails.
203214
204215`wait_for_unit`
205216
nixos/doc/manual/from_md/administration/declarative-containers.section.xml+2−2
@@ -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/development/settings-options.section.xml+32
@@ -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> { }
nixos/doc/manual/from_md/development/writing-nixos-tests.section.xml+53−35
@@ -274,35 +274,9 @@ start_all()
274274 <listitem>
275275 <para>
276276 Execute a shell command, returning a list
277− <literal>(status, stdout)</literal>. If the command
278− detaches, it must close stdout, as
279− <literal>execute</literal> will wait for this to consume all
280− output reliably. This can be achieved by redirecting stdout
281− to stderr <literal>&gt;&amp;2</literal>, to
282− <literal>/dev/console</literal>,
283− <literal>/dev/null</literal> or a file. Examples of
284− detaching commands are <literal>sleep 365d &amp;</literal>,
285− where the shell forks a new process that can write to stdout
286− and <literal>xclip -i</literal>, where the
287− <literal>xclip</literal> command itself forks without
288− closing stdout. Takes an optional parameter
289− <literal>check_return</literal> that defaults to
290− <literal>True</literal>. Setting this parameter to
291− <literal>False</literal> will not check for the return code
292− and return -1 instead. This can be used for commands that
293− shut down the VM and would therefore break the pipe that
294− would be used for retrieving the return code.
277+ <literal>(status, stdout)</literal>.
295278 </para>
296− </listitem>
297− </varlistentry>
298− <varlistentry>
299− <term>
300− <literal>succeed</literal>
301− </term>
302− <listitem>
303279 <para>
304− Execute a shell command, raising an exception if the exit
305− status is not zero, otherwise returning the standard output.
306280 Commands are run with <literal>set -euo pipefail</literal>
307281 set:
308282 </para>
@@ -317,22 +291,63 @@ start_all()
317291 <listitem>
318292 <para>
319293 For pipelines, the last non-zero exit status will be
320− returned (if there is one, zero will be returned
321− otherwise).
294+ returned (if there is one; otherwise zero will be
295+ returned).
322296 </para>
323297 </listitem>
324298 <listitem>
325299 <para>
326− Dereferencing unset variables fail the command.
300+ Dereferencing unset variables fails the command.
327301 </para>
328302 </listitem>
329303 <listitem>
330304 <para>
331− It will wait for stdout to be closed. See
332− <literal>execute</literal> for the implications.
305+ It will wait for stdout to be closed.
333306 </para>
334307 </listitem>
335308 </itemizedlist>
309+ <para>
310+ If the command detaches, it must close stdout, as
311+ <literal>execute</literal> will wait for this to consume all
312+ output reliably. This can be achieved by redirecting stdout
313+ to stderr <literal>&gt;&amp;2</literal>, to
314+ <literal>/dev/console</literal>,
315+ <literal>/dev/null</literal> or a file. Examples of
316+ detaching commands are <literal>sleep 365d &amp;</literal>,
317+ where the shell forks a new process that can write to stdout
318+ and <literal>xclip -i</literal>, where the
319+ <literal>xclip</literal> command itself forks without
320+ closing stdout.
321+ </para>
322+ <para>
323+ Takes an optional parameter <literal>check_return</literal>
324+ that defaults to <literal>True</literal>. Setting this
325+ parameter to <literal>False</literal> will not check for the
326+ return code and return -1 instead. This can be used for
327+ commands that shut down the VM and would therefore break the
328+ pipe that would be used for retrieving the return code.
329+ </para>
330+ <para>
331+ A timeout for the command can be specified (in seconds)
332+ using the optional <literal>timeout</literal> parameter,
333+ e.g., <literal>execute(cmd, timeout=10)</literal> or
334+ <literal>execute(cmd, timeout=None)</literal>. The default
335+ is 900 seconds.
336+ </para>
337+ </listitem>
338+ </varlistentry>
339+ <varlistentry>
340+ <term>
341+ <literal>succeed</literal>
342+ </term>
343+ <listitem>
344+ <para>
345+ Execute a shell command, raising an exception if the exit
346+ status is not zero, otherwise returning the standard output.
347+ Similar to <literal>execute</literal>, except that the
348+ timeout is <literal>None</literal> by default. See
349+ <literal>execute</literal> for details on command execution.
350+ </para>
336351 </listitem>
337352 </varlistentry>
338353 <varlistentry>
@@ -353,7 +368,10 @@ start_all()
353368 <listitem>
354369 <para>
355370 Repeat a shell command with 1-second intervals until it
356− succeeds.
371+ succeeds. Has a default timeout of 900 seconds which can be
372+ modified, e.g.
373+ <literal>wait_until_succeeds(cmd, timeout=10)</literal>. See
374+ <literal>execute</literal> for details on command execution.
357375 </para>
358376 </listitem>
359377 </varlistentry>
@@ -363,8 +381,8 @@ start_all()
363381 </term>
364382 <listitem>
365383 <para>
366− Repeat a shell command with 1-second intervals until it
367− fails.
384+ Like <literal>wait_until_succeeds</literal>, but repeating
385+ the command until it fails.
368386 </para>
369387 </listitem>
370388 </varlistentry>
nixos/doc/manual/from_md/development/building-nixos.chapter.xml → nixos/doc/manual/from_md/installation/building-nixos.chapter.xmlrenamed+34
@@ -43,6 +43,40 @@ $ nix-build -A config.system.build.isoImage -I nixos-config=modules/installer/cd
4343 </para>
4444 <programlisting>
4545# mount -o loop -t iso9660 ./result/iso/cd.iso /mnt/iso
46+</programlisting>
47+ </section>
48+ <section xml:id="sec-building-image-drivers">
49+ <title>Additional drivers or firmware</title>
50+ <para>
51+ If you need additional (non-distributable) drivers or firmware in
52+ the installer, you might want to extend these configurations.
53+ </para>
54+ <para>
55+ For example, to build the GNOME graphical installer ISO, but with
56+ support for certain WiFi adapters present in some MacBooks, you
57+ can create the following file at
58+ <literal>modules/installer/cd-dvd/installation-cd-graphical-gnome-macbook.nix</literal>:
59+ </para>
60+ <programlisting language="bash">
61+{ config, ... }:
62+
63+{
64+ imports = [ ./installation-cd-graphical-gnome.nix ];
65+
66+ boot.initrd.kernelModules = [ &quot;wl&quot; ];
67+
68+ boot.kernelModules = [ &quot;kvm-intel&quot; &quot;wl&quot; ];
69+ boot.extraModulePackages = [ config.boot.kernelPackages.broadcom_sta ];
70+}
71+</programlisting>
72+ <para>
73+ Then build it like in the example above:
74+ </para>
75+ <programlisting>
76+$ git clone https://github.com/NixOS/nixpkgs.git
77+$ cd nixpkgs/nixos
78+$ export NIXPKGS_ALLOW_UNFREE=1
79+$ nix-build -A config.system.build.isoImage -I nixos-config=modules/installer/cd-dvd/installation-cd-graphical-gnome-macbook.nix default.nix
4680</programlisting>
4781 </section>
4882 <section xml:id="sec-building-image-tech-notes">
nixos/doc/manual/from_md/installation/installing-usb.section.xml+1−1
@@ -17,7 +17,7 @@ $ diskutil list
1717[..]
1818$ diskutil unmountDisk diskN
1919Unmount of all volumes on diskN was successful
20−$ sudo dd if=nix.iso of=/dev/rdiskN
20+$ sudo dd if=nix.iso of=/dev/rdiskN bs=1M
2121</programlisting>
2222 <para>
2323 Using the 'raw' <literal>rdiskN</literal> device instead of
nixos/doc/manual/from_md/installation/installing.chapter.xml+7−7
@@ -411,6 +411,13 @@ OK
411411 specify on which disk the GRUB boot loader is to be
412412 installed. Without it, NixOS cannot boot.
413413 </para>
414+ <para>
415+ If there are other operating systems running on the
416+ machine before installing NixOS, the
417+ <xref linkend="opt-boot.loader.grub.useOSProber" />
418+ option can be set to <literal>true</literal> to
419+ automatically add them to the grub menu.
420+ </para>
414421 </listitem>
415422 </varlistentry>
416423 <varlistentry>
@@ -436,13 +443,6 @@ OK
436443 </listitem>
437444 </varlistentry>
438445 </variablelist>
439− <para>
440− If there are other operating systems running on the machine
441− before installing NixOS, the
442− <xref linkend="opt-boot.loader.grub.useOSProber" /> option can
443− be set to <literal>true</literal> to automatically add them to
444− the grub menu.
445− </para>
446446 <para>
447447 If you need to configure networking for your machine the
448448 configuration options are described in
nixos/doc/manual/from_md/release-notes/rl-1803.section.xml+8
@@ -866,6 +866,14 @@
866866 package.
867867 </para>
868868 </listitem>
869+ <listitem>
870+ <para>
871+ The vim/kakoune plugin updater now reads from a CSV file:
872+ check
873+ <literal>pkgs/applications/editors/vim/plugins/vim-plugin-names</literal>
874+ out to see the new format
875+ </para>
876+ </listitem>
869877 </itemizedlist>
870878 </section>
871879</section>
nixos/doc/manual/from_md/release-notes/rl-2205.section.xml+686−7
@@ -43,6 +43,33 @@
4343 Shell.
4444 </para>
4545 </listitem>
46+ <listitem>
47+ <para>
48+ <literal>stdenv.mkDerivation</literal> now supports a
49+ self-referencing <literal>finalAttrs:</literal> parameter
50+ containing the final <literal>mkDerivation</literal> arguments
51+ including overrides. <literal>drv.overrideAttrs</literal> now
52+ supports two parameters
53+ <literal>finalAttrs: previousAttrs:</literal>. This allows
54+ packaging configuration to be overridden in a consistent
55+ manner by providing an alternative to
56+ <literal>rec {}</literal> syntax.
57+ </para>
58+ <para>
59+ Additionally, <literal>passthru</literal> can now reference
60+ <literal>finalAttrs.finalPackage</literal> containing the
61+ final package, including attributes such as the output paths
62+ and <literal>overrideAttrs</literal>.
63+ </para>
64+ <para>
65+ New language integrations can be simplified by overriding a
66+ <quote>prototype</quote> package containing the
67+ language-specific logic. This removes the need for a extra
68+ layer of overriding for the <quote>generic builder</quote>
69+ arguments, thus removing a usability problem and source of
70+ error.
71+ </para>
72+ </listitem>
4673 <listitem>
4774 <para>
4875 PHP 8.1 is now available
@@ -68,6 +95,34 @@
6895 granular distinction between reloads and restarts.
6996 </para>
7097 </listitem>
98+ <listitem>
99+ <para>
100+ Systemd has been upgraded to the version 250.
101+ </para>
102+ </listitem>
103+ <listitem>
104+ <para>
105+ Pulseaudio has been upgraded to version 15.0 and now
106+ optionally
107+ <link xlink:href="https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/15.0/#supportforldacandaptxbluetoothcodecsplussbcxqsbcwithhigher-qualityparameters">supports
108+ additional Bluetooth audio codecs</link> like aptX or LDAC,
109+ with codec switching support being available in
110+ <literal>pavucontrol</literal>. This feature is disabled by
111+ default but can be enabled by using
112+ <literal>hardware.pulseaudio.package = pkgs.pulseaudioFull;</literal>.
113+ Existing 3rd party modules that provided similar
114+ functionality, like <literal>pulseaudio-modules-bt</literal>
115+ or <literal>pulseaudio-hsphfpd</literal> are deprecated and
116+ have been removed.
117+ </para>
118+ </listitem>
119+ <listitem>
120+ <para>
121+ The new
122+ <link xlink:href="https://nixos.org/manual/nixpkgs/stable/#sec-postgresqlTestHook"><literal>postgresqlTestHook</literal></link>
123+ runs a PostgreSQL server for the duration of package checks.
124+ </para>
125+ </listitem>
71126 <listitem>
72127 <para>
73128 <link xlink:href="https://kops.sigs.k8s.io"><literal>kops</literal></link>
@@ -96,6 +151,14 @@
96151 default.
97152 </para>
98153 </listitem>
154+ <listitem>
155+ <para>
156+ The GNOME and Plasma installation CDs now use
157+ <literal>pkgs.calamares</literal> and
158+ <literal>pkgs.calamares-nixos-extensions</literal> to allow
159+ users to easily install and set up NixOS with a GUI.
160+ </para>
161+ </listitem>
99162 </itemizedlist>
100163 </section>
101164 <section xml:id="sec-release-22.05-new-services">
@@ -125,6 +188,13 @@
125188 <link xlink:href="option.html#opt-services.matrix-conduit.enable">services.matrix-conduit</link>.
126189 </para>
127190 </listitem>
191+ <listitem>
192+ <para>
193+ <link xlink:href="https://github.com/vvilhonen/nethoscope">nethoscope</link>,
194+ listen to your network traffic. Available as
195+ <link linkend="opt-programs.nethoscope.enable">programs.nethoscope</link>.
196+ </para>
197+ </listitem>
128198 <listitem>
129199 <para>
130200 <link xlink:href="https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html">filebeat</link>,
@@ -214,6 +284,15 @@
214284 to be able to access the device.
215285 </para>
216286 </listitem>
287+ <listitem>
288+ <para>
289+ <link xlink:href="https://github.com/mozilla-mobile/mozilla-vpn-client">mozillavpn</link>,
290+ the client for the
291+ <link xlink:href="https://vpn.mozilla.org/">Mozilla VPN</link>
292+ service. Available as
293+ <link xlink:href="options.html#opt-services.mozillavpn">services.mozillavpn</link>.
294+ </para>
295+ </listitem>
217296 <listitem>
218297 <para>
219298 <link xlink:href="https://github.com/mgumz/mtr-exporter">mtr-exporter</link>,
@@ -347,6 +426,14 @@
347426 <link xlink:href="options.html#opt-services.headscale.enable">services.headscale</link>
348427 </para>
349428 </listitem>
429+ <listitem>
430+ <para>
431+ <link xlink:href="https://github.com/lakinduakash/linux-wifi-hotspot">create_ap</link>,
432+ a module for creating wifi hotspots using the program
433+ linux-wifi-hotspot. Available as
434+ <link xlink:href="options.html#opt-services.create_ap.enable">services.create_ap</link>.
435+ </para>
436+ </listitem>
350437 <listitem>
351438 <para>
352439 <link xlink:href="https://0xerr0r.github.io/blocky/">blocky</link>,
@@ -360,6 +447,14 @@
360447 cluster resource manager
361448 </para>
362449 </listitem>
450+ <listitem>
451+ <para>
452+ <link xlink:href="https://nifi.apache.org">nifi</link>, an
453+ easy to use, powerful, and reliable system to process and
454+ distribute data. Available as
455+ <link xlink:href="options.html#opt-services.nifi.enable">services.nifi</link>.
456+ </para>
457+ </listitem>
363458 </itemizedlist>
364459 </section>
365460 <section xml:id="sec-release-22.05-incompatibilities">
@@ -427,6 +522,85 @@
427522 new versions will release.
428523 </para>
429524 </listitem>
525+ <listitem>
526+ <para>
527+ The configuration and state directories used by
528+ <literal>nixos-containers</literal> have been moved from
529+ <literal>/etc/containers</literal> and
530+ <literal>/var/lib/containers</literal> to
531+ <literal>/etc/nixos-containers</literal> and
532+ <literal>/var/lib/nixos-containers</literal>.
533+ </para>
534+ <para>
535+ If you are changing <literal>system.stateVersion</literal> to
536+ <literal>&quot;22.05&quot;</literal> manually on an existing
537+ system you are responsible for migrating these directories
538+ yourself.
539+ </para>
540+ <para>
541+ This is to improve compatibility with
542+ <literal>libcontainer</literal> based software such as Podman
543+ and Skopeo which assumes they have ownership over
544+ <literal>/etc/containers</literal>.
545+ </para>
546+ </listitem>
547+ <listitem>
548+ <para>
549+ For new installations
550+ <literal>virtualisation.oci-containers.backend</literal> is
551+ now set to <literal>podman</literal> by default. If you still
552+ want to use Docker on systems where
553+ <literal>system.stateVersion</literal> is set to to
554+ <literal>&quot;22.05&quot;</literal> set
555+ <literal>virtualisation.oci-containers.backend = &quot;docker&quot;;</literal>.Old
556+ systems with older <literal>stateVersion</literal>s stay with
557+ <quote>docker</quote>.
558+ </para>
559+ </listitem>
560+ <listitem>
561+ <para>
562+ <literal>security.klogd</literal> was removed. Logging of
563+ kernel messages is handled by systemd since Linux 3.5.
564+ </para>
565+ </listitem>
566+ <listitem>
567+ <para>
568+ <literal>pkgs.ssmtp</literal> has been dropped due to the
569+ program being unmaintained. <literal>pkgs.msmtp</literal> can
570+ be used instead as a substitute <literal>sendmail</literal>
571+ implementation. The corresponding options
572+ <literal>services.ssmtp.*</literal> have been removed as well.
573+ <literal>programs.msmtp.*</literal> can be used instead for an
574+ equivalent setup. For example:
575+ </para>
576+ <programlisting language="bash">
577+{
578+ # Original ssmtp configuration:
579+ services.ssmtp = {
580+ enable = true;
581+ useTLS = true;
582+ useSTARTTLS = true;
583+ hostName = &quot;smtp.example:587&quot;;
584+ authUser = &quot;someone&quot;;
585+ authPassFile = &quot;/secrets/password.txt&quot;;
586+ };
587+
588+ # Equivalent msmtp configuration:
589+ programs.msmtp = {
590+ enable = true;
591+ accounts.default = {
592+ tls = true;
593+ tls_starttls = true;
594+ auth = true;
595+ host = &quot;smtp.example&quot;;
596+ port = 587;
597+ user = &quot;someone&quot;;
598+ passwordeval = &quot;cat /secrets/password.txt&quot;;
599+ };
600+ };
601+}
602+</programlisting>
603+ </listitem>
430604 <listitem>
431605 <para>
432606 <literal>services.kubernetes.addons.dashboard</literal> was
@@ -444,6 +618,53 @@
444618 relying on the insecure behaviour before upgrading.
445619 </para>
446620 </listitem>
621+ <listitem>
622+ <para>
623+ In the PowerDNS Recursor module
624+ (<literal>services.pdns-recursor</literal>), default values of
625+ several IP address-related NixOS options have been updated to
626+ match the default upstream behavior. In particular, Recursor
627+ by default will:
628+ </para>
629+ <itemizedlist spacing="compact">
630+ <listitem>
631+ <para>
632+ listen on (and allows connections from) both IPv4 and IPv6
633+ addresses
634+ (<literal>services.pdns-recursor.dns.address</literal>,
635+ <literal>services.pdns-recursor.dns.allowFrom</literal>);
636+ </para>
637+ </listitem>
638+ <listitem>
639+ <para>
640+ allow only local connections to the REST API server
641+ (<literal>services.pdns-recursor.api.allowFrom</literal>).
642+ </para>
643+ </listitem>
644+ </itemizedlist>
645+ </listitem>
646+ <listitem>
647+ <para>
648+ In the ncdns module, the default value of
649+ <literal>services.ncdns.address</literal> has been changed to
650+ the IPv6 loopback address (<literal>::1</literal>).
651+ </para>
652+ </listitem>
653+ <listitem>
654+ <para>
655+ <literal>openssh</literal> has been update to 8.9p1, changing
656+ the FIDO security key middleware interface.
657+ </para>
658+ </listitem>
659+ <listitem>
660+ <para>
661+ <literal>git</literal> no longer hardcodes the path to
662+ openssh’ ssh binary to reduce the amount of rebuilds. If you
663+ are using git with ssh remotes and do not have a ssh binary in
664+ your enviroment consider adding <literal>openssh</literal> to
665+ it or switching to <literal>gitFull</literal>.
666+ </para>
667+ </listitem>
447668 <listitem>
448669 <para>
449670 <literal>services.k3s.enable</literal> no longer implies
@@ -476,6 +697,13 @@
476697}
477698</programlisting>
478699 </listitem>
700+ <listitem>
701+ <para>
702+ <literal>services.prometheus.alertManagerTimeout</literal> has
703+ been removed as it has been deprecated upstream and has no
704+ effect.
705+ </para>
706+ </listitem>
479707 <listitem>
480708 <para>
481709 The DHCP server (<literal>services.dhcpd4</literal>,
@@ -509,6 +737,24 @@
509737 work.
510738 </para>
511739 </listitem>
740+ <listitem>
741+ <para>
742+ <literal>hbase</literal> version 0.98.24 has been removed. The
743+ package now defaults to version 2.4.11. Versions 1.7.1 and
744+ 3.0.0-alpha-2 are also available.
745+ </para>
746+ </listitem>
747+ <listitem>
748+ <para>
749+ <literal>services.paperless-ng</literal> was renamed to
750+ <literal>services.paperless</literal>. Accordingly, the
751+ <literal>paperless-ng-manage</literal> script (located in
752+ <literal>dataDir</literal>) was renamed to
753+ <literal>paperless-manage</literal>.
754+ <literal>services.paperless</literal> now uses
755+ <literal>paperless-ngx</literal>.
756+ </para>
757+ </listitem>
512758 <listitem>
513759 <para>
514760 The <literal>matrix-synapse</literal> service
@@ -631,6 +877,136 @@
631877 to the new location if the <literal>stateVersion</literal> is
632878 updated.
633879 </para>
880+ <para>
881+ As of Synapse 1.58.0, the old groups/communities feature has
882+ been disabled by default. It will be completely removed with
883+ Synapse 1.61.0.
884+ </para>
885+ </listitem>
886+ <listitem>
887+ <para>
888+ The Keycloak package (<literal>pkgs.keycloak</literal>) has
889+ been switched from the Wildfly version, which will soon be
890+ deprecated, to the Quarkus based version. The Keycloak service
891+ (<literal>services.keycloak</literal>) has been updated to
892+ accommodate the change and now differs from the previous
893+ version in a few ways:
894+ </para>
895+ <itemizedlist>
896+ <listitem>
897+ <para>
898+ <literal>services.keycloak.extraConfig</literal> has been
899+ removed in favor of the new
900+ <link xlink:href="https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md">settings-style</link>
901+ <link linkend="opt-services.keycloak.settings"><literal>services.keycloak.settings</literal></link>
902+ option. The available options correspond directly to
903+ parameters in <literal>conf/keycloak.conf</literal>. Some
904+ of the most important parameters are documented as
905+ suboptions, the rest can be found in the
906+ <link xlink:href="https://www.keycloak.org/server/all-config">All
907+ configuration section of the Keycloak Server Installation
908+ and Configuration Guide</link>. While the new
909+ configuration is much simpler and cleaner than the old
910+ JBoss CLI one, this unfortunately mean that there’s no
911+ straightforward way to convert an old configuration to the
912+ new format and some settings may not even be available
913+ anymore.
914+ </para>
915+ </listitem>
916+ <listitem>
917+ <para>
918+ <literal>services.keycloak.frontendUrl</literal> was
919+ removed and the frontend URL is now configured through the
920+ <literal>hostname</literal> family of settings in
921+ <link linkend="opt-services.keycloak.settings"><literal>services.keycloak.settings</literal></link>
922+ instead. See the
923+ <link xlink:href="https://www.keycloak.org/server/hostname">Hostname
924+ section of the Keycloak Server Installation and
925+ Configuration Guide</link> for more details. Additionally,
926+ <literal>/auth</literal> was removed from the default
927+ context path and needs to be added back in
928+ <link linkend="opt-services.keycloak.settings.http-relative-path"><literal>services.keycloak.settings.http-relative-path</literal></link>
929+ if you want to keep compatibility with your current
930+ clients.
931+ </para>
932+ </listitem>
933+ <listitem>
934+ <para>
935+ <literal>services.keycloak.bindAddress</literal>,
936+ <literal>services.keycloak.forceBackendUrlToFrontendUrl</literal>,
937+ <literal>services.keycloak.httpPort</literal> and
938+ <literal>services.keycloak.httpsPort</literal> have been
939+ removed in favor of their equivalent options in
940+ <link linkend="opt-services.keycloak.settings"><literal>services.keycloak.settings</literal></link>.
941+ <literal>httpPort</literal> and
942+ <literal>httpsPort</literal> have additionally had their
943+ types changed from <literal>str</literal> to
944+ <literal>port</literal>.
945+ </para>
946+ <para>
947+ The new names are as follows:
948+ </para>
949+ <itemizedlist spacing="compact">
950+ <listitem>
951+ <para>
952+ <literal>bindAddress</literal>:
953+ <link linkend="opt-services.keycloak.settings.http-host"><literal>services.keycloak.settings.http-host</literal></link>
954+ </para>
955+ </listitem>
956+ <listitem>
957+ <para>
958+ <literal>forceBackendUrlToFrontendUrl</literal>:
959+ <link linkend="opt-services.keycloak.settings.hostname-strict-backchannel"><literal>services.keycloak.settings.hostname-strict-backchannel</literal></link>
960+ </para>
961+ </listitem>
962+ <listitem>
963+ <para>
964+ <literal>httpPort</literal>:
965+ <link linkend="opt-services.keycloak.settings.http-port"><literal>services.keycloak.settings.http-port</literal></link>
966+ </para>
967+ </listitem>
968+ <listitem>
969+ <para>
970+ <literal>httpsPort</literal>:
971+ <link linkend="opt-services.keycloak.settings.https-port"><literal>services.keycloak.settings.https-port</literal></link>
972+ </para>
973+ </listitem>
974+ </itemizedlist>
975+ </listitem>
976+ </itemizedlist>
977+ <para>
978+ For example, when using a reverse proxy the migration could
979+ look like this:
980+ </para>
981+ <para>
982+ Before:
983+ </para>
984+ <programlisting language="bash">
985+ services.keycloak = {
986+ enable = true;
987+ httpPort = &quot;8080&quot;;
988+ frontendUrl = &quot;https://keycloak.example.com/auth&quot;;
989+ database.passwordFile = &quot;/run/keys/db_password&quot;;
990+ extraConfig = {
991+ &quot;subsystem=undertow&quot;.&quot;server=default-server&quot;.&quot;http-listener=default&quot;.proxy-address-forwarding = true;
992+ };
993+ };
994+</programlisting>
995+ <para>
996+ After:
997+ </para>
998+ <programlisting language="bash">
999+ services.keycloak = {
1000+ enable = true;
1001+ settings = {
1002+ http-port = 8080;
1003+ hostname = &quot;keycloak.example.com&quot;;
1004+ http-relative-path = &quot;/auth&quot;;
1005+ proxy = &quot;edge&quot;;
1006+ };
1007+ database.passwordFile = &quot;/run/keys/db_password&quot;;
1008+ };
1009+</programlisting>
6341010 </listitem>
6351011 <listitem>
6361012 <para>
@@ -766,6 +1142,14 @@
7661142 <literal>admin</literal> and <literal>password</literal>.
7671143 </para>
7681144 </listitem>
1145+ <listitem>
1146+ <para>
1147+ The <literal>taskserver</literal> module no longer implicitly
1148+ opens ports in the firewall configuration. This is now
1149+ controlled through the option
1150+ <literal>services.taskserver.openFirewall</literal>.
1151+ </para>
1152+ </listitem>
7691153 <listitem>
7701154 <para>
7711155 The <literal>autorestic</literal> package has been upgraded
@@ -968,6 +1352,14 @@
9681352 <literal>systemd.nspawn.&lt;name&gt;.execConfig.PrivateUsers = false</literal>
9691353 </para>
9701354 </listitem>
1355+ <listitem>
1356+ <para>
1357+ <literal>systemd-shutdown</literal> is now properly linked on
1358+ shutdown to unmount all filesystems and device mapper devices
1359+ cleanly. This can be disabled using
1360+ <literal>systemd.shutdownRamfs.enable</literal>.
1361+ </para>
1362+ </listitem>
9711363 <listitem>
9721364 <para>
9731365 The Tor SOCKS proxy is now actually disabled if
@@ -978,6 +1370,15 @@
9781370 <literal>true</literal>.
9791371 </para>
9801372 </listitem>
1373+ <listitem>
1374+ <para>
1375+ <literal>services.github-runner</literal> has been hardened.
1376+ Notably address families and system calls have been
1377+ restricted, which may adversely affect some kinds of testing,
1378+ e.g. using <literal>AF_BLUETOOTH</literal> to test bluetooth
1379+ devices.
1380+ </para>
1381+ </listitem>
9811382 <listitem>
9821383 <para>
9831384 The terraform 0.12 compatibility has been removed and the
@@ -1022,6 +1423,16 @@
10221423 <literal>otelcorecol</literal> and enjoy a 7x smaller binary.
10231424 </para>
10241425 </listitem>
1426+ <listitem>
1427+ <para>
1428+ <literal>services.zookeeper</literal> has a new option
1429+ <literal>jre</literal> for specifying the JRE to start
1430+ zookeeper with. It defaults to the JRE that
1431+ <literal>pkgs.zookeeper</literal> was wrapped with, instead of
1432+ <literal>pkgs.jre</literal>. This changes the JRE to
1433+ <literal>pkgs.jdk11_headless</literal> by default.
1434+ </para>
1435+ </listitem>
10251436 <listitem>
10261437 <para>
10271438 <literal>pkgs.pgadmin</literal> now refers to
@@ -1268,6 +1679,33 @@
12681679 example.
12691680 </para>
12701681 </listitem>
1682+ <listitem>
1683+ <para>
1684+ Existing <literal>resholve*</literal> functions have been
1685+ renamed and nested under <literal>pkgs.resholve</literal>.
1686+ Update uses to:
1687+ </para>
1688+ <itemizedlist spacing="compact">
1689+ <listitem>
1690+ <para>
1691+ <literal>resholvePackage</literal> -&gt;
1692+ <literal>resholve.mkDerivation</literal>
1693+ </para>
1694+ </listitem>
1695+ <listitem>
1696+ <para>
1697+ <literal>resholveScript</literal> -&gt;
1698+ <literal>resholve.writeScript</literal>
1699+ </para>
1700+ </listitem>
1701+ <listitem>
1702+ <para>
1703+ <literal>resholveScriptBin</literal> -&gt;
1704+ <literal>resholve.writeScriptBin</literal>
1705+ </para>
1706+ </listitem>
1707+ </itemizedlist>
1708+ </listitem>
12711709 <listitem>
12721710 <para>
12731711 <literal>pkgs.cosmopolitan</literal> no longer provides the
@@ -1275,6 +1713,17 @@
12751713 <literal>pkgs.cosmoc</literal>.
12761714 </para>
12771715 </listitem>
1716+ <listitem>
1717+ <para>
1718+ <literal>pkgs.graalvmXX-ce</literal> packages no longer
1719+ provide support for Python/Ruby/WASM, instead focusing only in
1720+ Java and Native Image Support. If you need to add support
1721+ back, please see the
1722+ <literal>pkgs.graalvmCEPackages.mkGraal</literal> function to
1723+ create your own customized version of GraalVM with support for
1724+ what you need.
1725+ </para>
1726+ </listitem>
12781727 </itemizedlist>
12791728 </section>
12801729 <section xml:id="sec-release-22.05-notable-changes">
@@ -1388,6 +1837,14 @@
13881837 </listitem>
13891838 </itemizedlist>
13901839 </listitem>
1840+ <listitem>
1841+ <para>
1842+ The auto-upgrade service now accepts persistent (default:
1843+ true) parameter. By default auto-upgrade will now run
1844+ immediately if it would have been triggered at least once
1845+ during the time when the timer was inactive.
1846+ </para>
1847+ </listitem>
13911848 <listitem>
13921849 <para>
13931850 If you are using Wayland you can choose to use the Ozone
@@ -1401,6 +1858,35 @@
14011858 versions.
14021859 </para>
14031860 </listitem>
1861+ <listitem>
1862+ <para>
1863+ A new option group
1864+ <literal>systemd.network.wait-online</literal> was added, with
1865+ options to configure
1866+ <literal>systemd-networkd-wait-online.service</literal>:
1867+ </para>
1868+ <itemizedlist spacing="compact">
1869+ <listitem>
1870+ <para>
1871+ <literal>anyInterface</literal> allows specifying that the
1872+ network should be considered online when <emphasis>at
1873+ least one</emphasis> interface is online (useful on
1874+ laptops)
1875+ </para>
1876+ </listitem>
1877+ <listitem>
1878+ <para>
1879+ <literal>timeout</literal> defines how long to wait for
1880+ the network to come online
1881+ </para>
1882+ </listitem>
1883+ <listitem>
1884+ <para>
1885+ <literal>extraArgs</literal> for everything else
1886+ </para>
1887+ </listitem>
1888+ </itemizedlist>
1889+ </listitem>
14041890 <listitem>
14051891 <para>
14061892 The <literal>influxdb2</literal> package was split into
@@ -1425,6 +1911,15 @@
14251911 takes a list of strings instead of a string.
14261912 </para>
14271913 </listitem>
1914+ <listitem>
1915+ <para>
1916+ The <literal>asterisk</literal> and
1917+ <literal>asterisk-stable</literal> packages were switched from
1918+ <literal>asterisk_18</literal> to the newly-packaged
1919+ <literal>asterisk_19</literal>. Asterisk 13 and 17 have been
1920+ removed as they have reached their end of life.
1921+ </para>
1922+ </listitem>
14281923 <listitem>
14291924 <para>
14301925 The <literal>services.unifi.openPorts</literal> option default
@@ -1483,9 +1978,11 @@
14831978 <para>
14841979 <link linkend="opt-programs.ssh.knownHosts">programs.ssh.knownHosts</link>
14851980 has gained an <literal>extraHostNames</literal> option to
1486− replace <literal>hostNames</literal>.
1487− <literal>hostNames</literal> is deprecated, but still
1488− available for now.
1981+ augment <literal>hostNames</literal>. It is now possible to
1982+ use the attribute name of a <literal>knownHosts</literal>
1983+ entry as the primary host name and specify secondary host
1984+ names using <literal>extraHostNames</literal> without having
1985+ to duplicate the primary host name.
14891986 </para>
14901987 </listitem>
14911988 <listitem>
@@ -1496,6 +1993,36 @@
14961993 configuration.
14971994 </para>
14981995 </listitem>
1996+ <listitem>
1997+ <para>
1998+ The option
1999+ <link linkend="opt-services.xserver.desktopManager.runXdgAutostartIfNone">services.xserver.desktopManager.runXdgAutostartIfNone</link>
2000+ was added in order to automatically run XDG autostart files
2001+ for sessions without a desktop manager. This replaces helpers
2002+ like the <literal>dex</literal> package.
2003+ </para>
2004+ </listitem>
2005+ <listitem>
2006+ <para>
2007+ When setting
2008+ <link linkend="opt-i18n.inputMethod.enabled">i18n.inputMethod.enabled</link>
2009+ to <literal>fcitx5</literal>, it no longer creates
2010+ corresponding systemd user services. It now relies on XDG
2011+ autostart files to start and work properly in your desktop
2012+ sessions. If you are using only a window manager without a
2013+ desktop manager, you need to enable
2014+ <literal>services.xserver.desktopManager.runXdgAutostartIfNone</literal>
2015+ or using the <literal>dex</literal> package to make
2016+ <literal>fcitx5</literal> work.
2017+ </para>
2018+ </listitem>
2019+ <listitem>
2020+ <para>
2021+ A new module was added for the Envoy reverse proxy, providing
2022+ the options <literal>services.envoy.enable</literal> and
2023+ <literal>services.envoy.settings</literal>.
2024+ </para>
2025+ </listitem>
14992026 <listitem>
15002027 <para>
15012028 The option <literal>services.duplicati.dataDir</literal> has
@@ -1520,10 +2047,51 @@
15202047 </listitem>
15212048 <listitem>
15222049 <para>
1523− ORY Kratos was updated to version 0.8.3-alpha.1.pre.0, which
2050+ ORY Kratos was updated to version 0.9.0-alpha.3, which
15242051 introduces some breaking changes:
15252052 </para>
15262053 <itemizedlist spacing="compact">
2054+ <listitem>
2055+ <para>
2056+ All endpoints at the Admin API are now exposed at
2057+ <literal>/admin/</literal>. For example, endpoint
2058+ <literal>https://kratos:4434/identities</literal> is now
2059+ exposed at
2060+ <literal>https://kratos:4434/admin/identities</literal>
2061+ </para>
2062+ </listitem>
2063+ <listitem>
2064+ <para>
2065+ Configuration key
2066+ <literal>selfservice.whitelisted_return_urls</literal> has
2067+ been renamed to <literal>allowed_return_urls</literal>
2068+ </para>
2069+ </listitem>
2070+ <listitem>
2071+ <para>
2072+ The <literal>password_identifier</literal> form field of
2073+ the password login strategy has been renamed to
2074+ <literal>identifier</literal> to make compatibility with
2075+ passwordless flows possible.
2076+ </para>
2077+ </listitem>
2078+ <listitem>
2079+ <para>
2080+ Instead of having a global
2081+ <literal>default_schema_url</literal> which developers
2082+ used to update their schema, you now need to define the
2083+ <literal>default_schema_id</literal> which must reference
2084+ schema ID in your config.
2085+ </para>
2086+ </listitem>
2087+ <listitem>
2088+ <para>
2089+ Calling <literal>/self-service/recovery</literal> without
2090+ flow ID or with an invalid flow ID while authenticated
2091+ will now respond with an error instead of redirecting to
2092+ the default page.
2093+ </para>
2094+ </listitem>
15272095 <listitem>
15282096 <para>
15292097 If you are relying on the SQLite images, update your
@@ -1560,6 +2128,18 @@
15602128 Notes for v0.8.2-alpha-1</link>
15612129 </para>
15622130 </listitem>
2131+ <listitem>
2132+ <para>
2133+ <link xlink:href="https://github.com/ory/kratos/releases/tag/v0.9.0-alpha.1">Release
2134+ Notes for v0.9.0-alpha-1</link>
2135+ </para>
2136+ </listitem>
2137+ <listitem>
2138+ <para>
2139+ <link xlink:href="https://github.com/ory/kratos/releases/tag/v0.9.0-alpha.3">Release
2140+ Notes for v0.9.0-alpha-3</link>
2141+ </para>
2142+ </listitem>
15632143 </itemizedlist>
15642144 </listitem>
15652145 </itemizedlist>
@@ -1573,6 +2153,13 @@
15732153 <literal>true</literal>.
15742154 </para>
15752155 </listitem>
2156+ <listitem>
2157+ <para>
2158+ A module for declarative configuration of openconnect VPN
2159+ profiles was added under
2160+ <literal>networking.openconnect</literal>.
2161+ </para>
2162+ </listitem>
15762163 <listitem>
15772164 <para>
15782165 The <literal>element-desktop</literal> package now has an
@@ -1655,9 +2242,35 @@
16552242 </listitem>
16562243 <listitem>
16572244 <para>
1658− <literal>services.logrotate.enable</literal> now defaults to
1659− true if any rotate path has been defined, and some paths have
1660− been added by default.
2245+ <link linkend="opt-services.logrotate.enable">services.logrotate.enable</link>
2246+ now defaults to true if any rotate path has been defined, and
2247+ some paths have been added by default.
2248+ </para>
2249+ </listitem>
2250+ <listitem>
2251+ <para>
2252+ The logrotate module also has been updated to freeform syntax:
2253+ <link linkend="opt-services.logrotate.paths">services.logrotate.paths</link>
2254+ and
2255+ <link linkend="opt-services.logrotate.extraConfig">services.logrotate.extraConfig</link>
2256+ will work, but issue deprecation warnings and
2257+ <link linkend="opt-services.logrotate.settings">services.logrotate.settings</link>
2258+ should now be used instead.
2259+ </para>
2260+ </listitem>
2261+ <listitem>
2262+ <para>
2263+ <literal>security.pam.ussh</literal> has been added, which
2264+ allows authorizing PAM sessions based on SSH
2265+ <emphasis>certificates</emphasis> held within an SSH agent,
2266+ using
2267+ <link xlink:href="https://github.com/uber/pam-ussh">pam-ussh</link>.
2268+ </para>
2269+ </listitem>
2270+ <listitem>
2271+ <para>
2272+ The <literal>vscode-extensions.ionide.ionide-fsharp</literal>
2273+ package has been updated to 6.0.0 and now requires .NET 6.0.
16612274 </para>
16622275 </listitem>
16632276 <listitem>
@@ -1685,6 +2298,24 @@
16852298 </listitem>
16862299 </itemizedlist>
16872300 </listitem>
2301+ <listitem>
2302+ <para>
2303+ The <literal>polybar</literal> package has been updated from
2304+ 3.5.7 to 3.6.2. See
2305+ <link xlink:href="https://github.com/polybar/polybar/releases/tag/3.6.0">the
2306+ changelog</link> for more details.
2307+ </para>
2308+ <itemizedlist spacing="compact">
2309+ <listitem>
2310+ <para>
2311+ Breaking changes include changes to escaping rules in
2312+ configuration values, changes in behavior when
2313+ encountering invalid tag names, and changes to
2314+ inter-process-messaging (IPC).
2315+ </para>
2316+ </listitem>
2317+ </itemizedlist>
2318+ </listitem>
16882319 <listitem>
16892320 <para>
16902321 Renamed option
@@ -1740,6 +2371,27 @@
17402371 desktop environments as needed.
17412372 </para>
17422373 </listitem>
2374+ <listitem>
2375+ <para>
2376+ xfsprogs was update to version 5.15, which enables inobtcount
2377+ and bigtime by default on filesystem creation. Support for
2378+ these features was added in kernel 5.10 and deemed stable in
2379+ kernel 5.15. If you want to be able to mount XFS filesystems
2380+ created with this release of xfsprogs on kernel releases older
2381+ than 5.10, you need to format them with
2382+ <literal>mkfs.xfs -m bigtime=0 -m inobtcount=0</literal>.
2383+ </para>
2384+ </listitem>
2385+ <listitem>
2386+ <para>
2387+ <literal>services.xserver.desktopManager.xfce</literal> now
2388+ includes Xfce’s screen locker,
2389+ <literal>xfce4-screensaver</literal> that is enabled by
2390+ default. You can disable it by setting
2391+ <literal>false</literal> to
2392+ <link linkend="opt-services.xserver.desktopManager.xfce.enableScreensaver">services.xserver.desktopManager.xfce.enableScreensaver</link>.
2393+ </para>
2394+ </listitem>
17432395 <listitem>
17442396 <para>
17452397 The <literal>hadoop</literal> package has added support for
@@ -1755,6 +2407,24 @@
17552407 (<link xlink:href="https://github.com/NixOS/nixpkgs/pull/158992">#158992</link>).
17562408 </para>
17572409 </listitem>
2410+ <listitem>
2411+ <para>
2412+ The <literal>nss</literal> package was split into
2413+ <literal>nss_esr</literal> and <literal>nss_latest</literal>,
2414+ with <literal>nss</literal> being an alias for
2415+ <literal>nss_esr</literal>. This was done to ease maintenance
2416+ of <literal>nss</literal> and dependent high-profile packages
2417+ like <literal>firefox</literal>.
2418+ </para>
2419+ </listitem>
2420+ <listitem>
2421+ <para>
2422+ The Nextcloud module now supports to create a Mysql database
2423+ automatically with
2424+ <literal>services.nextcloud.database.createLocally</literal>
2425+ enabled.
2426+ </para>
2427+ </listitem>
17582428 <listitem>
17592429 <para>
17602430 The <literal>spark3</literal> package has been updated from
@@ -1786,6 +2456,15 @@
17862456 generating host-global NNCP configuration.
17872457 </para>
17882458 </listitem>
2459+ <listitem>
2460+ <para>
2461+ The option <literal>services.snapserver.openFirewall</literal>
2462+ will no longer default to <literal>true</literal> starting
2463+ with NixOS 22.11. Enable it explicitly if you need to control
2464+ Snapserver remotely or connect streamig clients from other
2465+ hosts.
2466+ </para>
2467+ </listitem>
17892468 </itemizedlist>
17902469 </section>
17912470</section>
nixos/doc/manual/development/building-nixos.chapter.md → nixos/doc/manual/installation/building-nixos.chapter.mdrenamed+31
@@ -30,6 +30,37 @@ To check the content of an ISO image, mount it like so:
3030# mount -o loop -t iso9660 ./result/iso/cd.iso /mnt/iso
3131```
3232
33+## Additional drivers or firmware {#sec-building-image-drivers}
34+
35+If you need additional (non-distributable) drivers or firmware in the
36+installer, you might want to extend these configurations.
37+
38+For example, to build the GNOME graphical installer ISO, but with support for
39+certain WiFi adapters present in some MacBooks, you can create the following
40+file at `modules/installer/cd-dvd/installation-cd-graphical-gnome-macbook.nix`:
41+
42+```nix
43+{ config, ... }:
44+
45+{
46+ imports = [ ./installation-cd-graphical-gnome.nix ];
47+
48+ boot.initrd.kernelModules = [ "wl" ];
49+
50+ boot.kernelModules = [ "kvm-intel" "wl" ];
51+ boot.extraModulePackages = [ config.boot.kernelPackages.broadcom_sta ];
52+}
53+```
54+
55+Then build it like in the example above:
56+
57+```ShellSession
58+$ git clone https://github.com/NixOS/nixpkgs.git
59+$ cd nixpkgs/nixos
60+$ export NIXPKGS_ALLOW_UNFREE=1
61+$ nix-build -A config.system.build.isoImage -I nixos-config=modules/installer/cd-dvd/installation-cd-graphical-gnome-macbook.nix default.nix
62+```
63+
3364## Technical Notes {#sec-building-image-tech-notes}
3465
3566The config value enforcement is implemented via `mkImageMediaOverride = mkOverride 60;`
nixos/doc/manual/installation/installation.xml+1
@@ -14,4 +14,5 @@
1414 <xi:include href="../from_md/installation/installing.chapter.xml" />
1515 <xi:include href="../from_md/installation/changing-config.chapter.xml" />
1616 <xi:include href="../from_md/installation/upgrading.chapter.xml" />
17+ <xi:include href="../from_md/installation/building-nixos.chapter.xml" />
1718</part>
nixos/doc/manual/installation/installing-usb.section.md+1−1
@@ -18,7 +18,7 @@ $ diskutil list
1818[..]
1919$ diskutil unmountDisk diskN
2020Unmount of all volumes on diskN was successful
21−$ sudo dd if=nix.iso of=/dev/rdiskN
21+$ sudo dd if=nix.iso of=/dev/rdiskN bs=1M
2222```
2323
2424Using the \'raw\' `rdiskN` device instead of `diskN` completes in
nixos/doc/manual/installation/installing.chapter.md+5−5
@@ -296,6 +296,11 @@ Use the following commands:
296296 specify on which disk the GRUB boot loader is to be installed.
297297 Without it, NixOS cannot boot.
298298
299+ : If there are other operating systems running on the machine before
300+ installing NixOS, the [](#opt-boot.loader.grub.useOSProber)
301+ option can be set to `true` to automatically add them to the grub
302+ menu.
303+
299304 UEFI systems
300305
301306 : You *must* set the option [](#opt-boot.loader.systemd-boot.enable)
@@ -307,11 +312,6 @@ Use the following commands:
307312 [`boot.loader.systemd-boot`](#opt-boot.loader.systemd-boot.enable)
308313 as well.
309314
310− If there are other operating systems running on the machine before
311− installing NixOS, the [](#opt-boot.loader.grub.useOSProber)
312− option can be set to `true` to automatically add them to the grub
313− menu.
314−
315315 If you need to configure networking for your machine the
316316 configuration options are described in [](#sec-networking). In
317317 particular, while wifi is supported on the installation image, it is
nixos/doc/manual/man-nixos-rebuild.xml+8
@@ -548,6 +548,14 @@
548548 (<replaceable>user@host</replaceable>). You can also set ssh options by
549549 defining the <envar>NIX_SSHOPTS</envar> environment variable.
550550 </para>
551+
552+ <para>
553+ Note that <command>nixos-rebuild</command> honors the
554+ <literal>nixpkgs.crossSystem</literal> setting of the given configuration
555+ but disregards the true architecture of the target host. Hence the
556+ <literal>nixpkgs.crossSystem</literal> setting has to match the target
557+ platform or else activation will fail.
558+ </para>
551559 </listitem>
552560 </varlistentry>
553561
nixos/doc/manual/md-to-db.sh+1−1
@@ -1,5 +1,5 @@
11#! /usr/bin/env nix-shell
2−#! nix-shell -I nixpkgs=channel:nixpkgs-unstable -i bash -p pandoc
2+#! nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/tarball/21.11 -i bash -p pandoc
33
44# This script is temporarily needed while we transition the manual to
55# CommonMark. It converts the .md files in the regular manual folder
nixos/doc/manual/release-notes/rl-1803.section.md+2
@@ -282,3 +282,5 @@ When upgrading from a previous release, please be aware of the following incompa
282282- The NixOS test driver supports user services declared by `systemd.user.services`. The methods `waitForUnit`, `getUnitInfo`, `startJob` and `stopJob` provide an optional `$user` argument for that purpose.
283283
284284- Enabling bash completion on NixOS, `programs.bash.enableCompletion`, will now also enable completion for the Nix command line tools by installing the [nix-bash-completions](https://github.com/hedning/nix-bash-completions) package.
285+
286+- The vim/kakoune plugin updater now reads from a CSV file: check `pkgs/applications/editors/vim/plugins/vim-plugin-names` out to see the new format
nixos/doc/manual/release-notes/rl-2205.section.md+260−3
@@ -17,6 +17,21 @@ In addition to numerous new and upgraded packages, this release has the followin
1717
1818- GNOME has been upgraded to 42. Please take a look at their [Release Notes](https://release.gnome.org/42/) for details. Notably, it replaces gedit with GNOME Text Editor, GNOME Terminal with GNOME Console (formerly King’s Cross), and GNOME Screenshot with a tool built into the Shell.
1919
20+- `stdenv.mkDerivation` now supports a self-referencing `finalAttrs:` parameter
21+ containing the final `mkDerivation` arguments including overrides.
22+ `drv.overrideAttrs` now supports two parameters `finalAttrs: previousAttrs:`.
23+ This allows packaging configuration to be overridden in a consistent manner by
24+ providing an alternative to `rec {}` syntax.
25+
26+ Additionally, `passthru` can now reference `finalAttrs.finalPackage` containing
27+ the final package, including attributes such as the output paths and
28+ `overrideAttrs`.
29+
30+ New language integrations can be simplified by overriding a "prototype"
31+ package containing the language-specific logic. This removes the need for a
32+ extra layer of overriding for the "generic builder" arguments, thus removing a
33+ usability problem and source of error.
34+
2035- PHP 8.1 is now available
2136
2237- Mattermost has been updated to extended support release 6.3, as the previously packaged extended support release 5.37 is [reaching its end of life](https://docs.mattermost.com/upgrade/extended-support-release.html).
@@ -25,12 +40,21 @@ In addition to numerous new and upgraded packages, this release has the followin
2540
2641- systemd services can now set [systemd.services.\<name\>.reloadTriggers](#opt-systemd.services) instead of `reloadIfChanged` for a more granular distinction between reloads and restarts.
2742
43+- Systemd has been upgraded to the version 250.
44+
45+- Pulseaudio has been upgraded to version 15.0 and now optionally [supports additional Bluetooth audio codecs](https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/15.0/#supportforldacandaptxbluetoothcodecsplussbcxqsbcwithhigher-qualityparameters) like aptX or LDAC, with codec switching support being available in `pavucontrol`. This feature is disabled by default but can be enabled by using `hardware.pulseaudio.package = pkgs.pulseaudioFull;`.
46+ Existing 3rd party modules that provided similar functionality, like `pulseaudio-modules-bt` or `pulseaudio-hsphfpd` are deprecated and have been removed.
47+
48+- The new [`postgresqlTestHook`](https://nixos.org/manual/nixpkgs/stable/#sec-postgresqlTestHook) runs a PostgreSQL server for the duration of package checks.
49+
2850- [`kops`](https://kops.sigs.k8s.io) defaults to 1.22.4, which will enable [Instance Metadata Service Version 2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) and require tokens on new clusters with Kubernetes 1.22. This will increase security by default, but may break some types of workloads. See the [release notes](https://kops.sigs.k8s.io/releases/1.22-notes/) for details.
2951
3052- Module authors can use `mkRenamedOptionModuleWith` to automate the deprecation cycle without annoying out-of-tree module authors and their users.
3153
3254- The default GHC version has been updated from 8.10.7 to 9.0.2. `pkgs.haskellPackages` and `pkgs.ghc` will now use this version by default.
3355
56+- The GNOME and Plasma installation CDs now use `pkgs.calamares` and `pkgs.calamares-nixos-extensions` to allow users to easily install and set up NixOS with a GUI.
57+
3458## New Services {#sec-release-22.05-new-services}
3559
3660- [aesmd](https://github.com/intel/linux-sgx#install-the-intelr-sgx-psw), the Intel SGX Architectural Enclave Service Manager. Available as [services.aesmd](#opt-services.aesmd.enable).
@@ -39,6 +63,8 @@ In addition to numerous new and upgraded packages, this release has the followin
3963
4064- [matrix-conduit](https://conduit.rs/), a simple, fast and reliable chat server powered by matrix. Available as [services.matrix-conduit](option.html#opt-services.matrix-conduit.enable).
4165
66+- [nethoscope](https://github.com/vvilhonen/nethoscope), listen to your network traffic. Available as [programs.nethoscope](#opt-programs.nethoscope.enable).
67+
4268- [filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html), a lightweight shipper for forwarding and centralizing log data. Available as [services.filebeat](#opt-services.filebeat.enable).
4369
4470- [apfs](https://github.com/linux-apfs/linux-apfs-rw), a kernel module for mounting the Apple File System (APFS).
@@ -63,6 +89,8 @@ In addition to numerous new and upgraded packages, this release has the followin
6389
6490- [K40-Whisperer](https://www.scorchworks.com/K40whisperer/k40whisperer.html), a program to control cheap Chinese laser cutters. Available as [programs.k40-whisperer.enable](options.html#opt-programs.k4-whisperer.enable). Users must add themselves to the `k40` group to be able to access the device.
6591
92+- [mozillavpn](https://github.com/mozilla-mobile/mozilla-vpn-client), the client for the [Mozilla VPN](https://vpn.mozilla.org/) service. Available as [services.mozillavpn](options.html#opt-services.mozillavpn).
93+
6694- [mtr-exporter](https://github.com/mgumz/mtr-exporter), a Prometheus exporter for mtr metrics. Available as [services.mtr-exporter](options.html#opt-services.mtr-exporter.enable).
6795
6896- [prometheus-pve-exporter](https://github.com/prometheus-pve/prometheus-pve-exporter), a tool that exposes information from the Proxmox VE API for use by Prometheus. Available as [services.prometheus.exporters.pve](options.html#opt-services.prometheus.exporters.pve).
@@ -99,10 +127,14 @@ In addition to numerous new and upgraded packages, this release has the followin
99127
100128- [headscale](https://github.com/juanfont/headscale), an Open Source implementation of the [Tailscale](https://tailscale.io) Control Server. Available as [services.headscale](options.html#opt-services.headscale.enable)
101129
130+- [create_ap](https://github.com/lakinduakash/linux-wifi-hotspot), a module for creating wifi hotspots using the program linux-wifi-hotspot. Available as [services.create_ap](options.html#opt-services.create_ap.enable).
131+
102132- [blocky](https://0xerr0r.github.io/blocky/), fast and lightweight DNS proxy as ad-blocker for local network with many features.
103133
104134- [pacemaker](https://clusterlabs.org/pacemaker/) cluster resource manager
105135
136+- [nifi](https://nifi.apache.org), an easy to use, powerful, and reliable system to process and distribute data. Available as [services.nifi](options.html#opt-services.nifi.enable).
137+
106138<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
107139
108140## Backward Incompatibilities {#sec-release-22.05-incompatibilities}
@@ -139,10 +171,71 @@ In addition to numerous new and upgraded packages, this release has the followin
139171 org-contrib, refer to the ones in `pkgs.emacsPackages.elpaPackages` and
140172 `pkgs.emacsPackages.nongnuPackages` where the new versions will release.
141173
174+- The configuration and state directories used by `nixos-containers` have been
175+ moved from `/etc/containers` and `/var/lib/containers` to
176+ `/etc/nixos-containers` and `/var/lib/nixos-containers`.
177+
178+ If you are changing `system.stateVersion` to `"22.05"` manually on an existing
179+ system you are responsible for migrating these directories yourself.
180+
181+ This is to improve compatibility with `libcontainer` based software such as Podman and Skopeo
182+ which assumes they have ownership over `/etc/containers`.
183+
184+- For new installations `virtualisation.oci-containers.backend` is now set to `podman` by default.
185+ If you still want to use Docker on systems where `system.stateVersion` is set to to `"22.05"` set `virtualisation.oci-containers.backend = "docker";`.Old systems with older `stateVersion`s stay with "docker".
186+
187+- `security.klogd` was removed. Logging of kernel messages is handled
188+ by systemd since Linux 3.5.
189+
190+- `pkgs.ssmtp` has been dropped due to the program being unmaintained.
191+ `pkgs.msmtp` can be used instead as a substitute `sendmail` implementation.
192+ The corresponding options `services.ssmtp.*` have been removed as well.
193+ `programs.msmtp.*` can be used instead for an equivalent setup. For example:
194+
195+ ```nix
196+ {
197+ # Original ssmtp configuration:
198+ services.ssmtp = {
199+ enable = true;
200+ useTLS = true;
201+ useSTARTTLS = true;
202+ hostName = "smtp.example:587";
203+ authUser = "someone";
204+ authPassFile = "/secrets/password.txt";
205+ };
206+
207+ # Equivalent msmtp configuration:
208+ programs.msmtp = {
209+ enable = true;
210+ accounts.default = {
211+ tls = true;
212+ tls_starttls = true;
213+ auth = true;
214+ host = "smtp.example";
215+ port = 587;
216+ user = "someone";
217+ passwordeval = "cat /secrets/password.txt";
218+ };
219+ };
220+ }
221+ ```
222+
142223- `services.kubernetes.addons.dashboard` was removed due to it being an outdated version.
143224
144225- `services.kubernetes.scheduler.{port,address}` now set `--secure-port` and `--bind-address` instead of `--port` and `--address`, since the former have been deprecated and are no longer functional in kubernetes>=1.23. Ensure that you are not relying on the insecure behaviour before upgrading.
145226
227+- In the PowerDNS Recursor module (`services.pdns-recursor`), default values of several IP address-related NixOS options have been updated to match the default upstream behavior.
228+ In particular, Recursor by default will:
229+ - listen on (and allows connections from) both IPv4 and IPv6 addresses
230+ (`services.pdns-recursor.dns.address`, `services.pdns-recursor.dns.allowFrom`);
231+ - allow only local connections to the REST API server (`services.pdns-recursor.api.allowFrom`).
232+
233+- In the ncdns module, the default value of `services.ncdns.address` has been changed to the IPv6 loopback address (`::1`).
234+
235+- `openssh` has been update to 8.9p1, changing the FIDO security key middleware interface.
236+
237+- `git` no longer hardcodes the path to openssh' ssh binary to reduce the amount of rebuilds. If you are using git with ssh remotes and do not have a ssh binary in your enviroment consider adding `openssh` to it or switching to `gitFull`.
238+
146239- `services.k3s.enable` no longer implies `systemd.enableUnifiedCgroupHierarchy = false`, and will default to the 'systemd' cgroup driver when using `services.k3s.docker = true`.
147240 This change may require a reboot to take effect, and k3s may not be able to run if the boot cgroup hierarchy does not match its configuration.
148241 The previous behavior may be retained by explicitly setting `systemd.enableUnifiedCgroupHierarchy = false` in your configuration.
@@ -160,6 +253,8 @@ In addition to numerous new and upgraded packages, this release has the followin
160253 }
161254 ```
162255
256+- `services.prometheus.alertManagerTimeout` has been removed as it has been deprecated upstream and has no effect.
257+
163258- The DHCP server (`services.dhcpd4`, `services.dhcpd6`) has been hardened.
164259 The service is now using the systemd's `DynamicUser` mechanism to run as an unprivileged dynamically-allocated user with limited capabilities.
165260 The dhcpd state files are now always stored in `/var/lib/dhcpd{4,6}` and the `services.dhcpd4.stateDir` and `service.dhcpd6.stateDir` options have been removed.
@@ -169,6 +264,10 @@ In addition to numerous new and upgraded packages, this release has the followin
169264
170265- `services.ipfs.extraFlags` is now escaped with `utils.escapeSystemdExecArgs`. If you rely on systemd interpolating `extraFlags` in the service `ExecStart`, this will no longer work.
171266
267+- `hbase` version 0.98.24 has been removed. The package now defaults to version 2.4.11. Versions 1.7.1 and 3.0.0-alpha-2 are also available.
268+
269+- `services.paperless-ng` was renamed to `services.paperless`. Accordingly, the `paperless-ng-manage` script (located in `dataDir`) was renamed to `paperless-manage`. `services.paperless` now uses `paperless-ngx`.
270+
172271- The `matrix-synapse` service (`services.matrix-synapse`) has been converted to use the `settings` option defined in RFC42.
173272 This means that options that are part of your `homeserver.yaml` configuration, and that were specified at the top-level of the
174273 module (`services.matrix-synapse`) now need to be moved into `services.matrix-synapse.settings`. And while not all options you
@@ -263,6 +362,83 @@ In addition to numerous new and upgraded packages, this release has the followin
263362 `media_store_path` was changed from `${dataDir}/media` to `${dataDir}/media_store` if `system.stateVersion` is at least `22.05`. Files will need to be manually moved to the new
264363 location if the `stateVersion` is updated.
265364
365+ As of Synapse 1.58.0, the old groups/communities feature has been disabled by default. It will be completely removed with Synapse 1.61.0.
366+
367+- The Keycloak package (`pkgs.keycloak`) has been switched from the
368+ Wildfly version, which will soon be deprecated, to the Quarkus based
369+ version. The Keycloak service (`services.keycloak`) has been updated
370+ to accommodate the change and now differs from the previous version
371+ in a few ways:
372+
373+ - `services.keycloak.extraConfig` has been removed in favor of the
374+ new [settings-style](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md)
375+ [`services.keycloak.settings`](#opt-services.keycloak.settings)
376+ option. The available options correspond directly to parameters in
377+ `conf/keycloak.conf`. Some of the most important parameters are
378+ documented as suboptions, the rest can be found in the [All
379+ configuration section of the Keycloak Server Installation and
380+ Configuration
381+ Guide](https://www.keycloak.org/server/all-config). While the new
382+ configuration is much simpler and cleaner than the old JBoss CLI
383+ one, this unfortunately mean that there's no straightforward way
384+ to convert an old configuration to the new format and some
385+ settings may not even be available anymore.
386+
387+ - `services.keycloak.frontendUrl` was removed and the frontend URL
388+ is now configured through the `hostname` family of settings in
389+ [`services.keycloak.settings`](#opt-services.keycloak.settings)
390+ instead. See the [Hostname section of the Keycloak Server
391+ Installation and Configuration
392+ Guide](https://www.keycloak.org/server/hostname) for more
393+ details. Additionally, `/auth` was removed from the default
394+ context path and needs to be added back in
395+ [`services.keycloak.settings.http-relative-path`](#opt-services.keycloak.settings.http-relative-path)
396+ if you want to keep compatibility with your current clients.
397+
398+ - `services.keycloak.bindAddress`,
399+ `services.keycloak.forceBackendUrlToFrontendUrl`,
400+ `services.keycloak.httpPort` and `services.keycloak.httpsPort`
401+ have been removed in favor of their equivalent options in
402+ [`services.keycloak.settings`](#opt-services.keycloak.settings). `httpPort`
403+ and `httpsPort` have additionally had their types changed from
404+ `str` to `port`.
405+
406+ The new names are as follows:
407+ - `bindAddress`: [`services.keycloak.settings.http-host`](#opt-services.keycloak.settings.http-host)
408+ - `forceBackendUrlToFrontendUrl`: [`services.keycloak.settings.hostname-strict-backchannel`](#opt-services.keycloak.settings.hostname-strict-backchannel)
409+ - `httpPort`: [`services.keycloak.settings.http-port`](#opt-services.keycloak.settings.http-port)
410+ - `httpsPort`: [`services.keycloak.settings.https-port`](#opt-services.keycloak.settings.https-port)
411+
412+ For example, when using a reverse proxy the migration could look
413+ like this:
414+
415+ Before:
416+ ```nix
417+ services.keycloak = {
418+ enable = true;
419+ httpPort = "8080";
420+ frontendUrl = "https://keycloak.example.com/auth";
421+ database.passwordFile = "/run/keys/db_password";
422+ extraConfig = {
423+ "subsystem=undertow"."server=default-server"."http-listener=default".proxy-address-forwarding = true;
424+ };
425+ };
426+ ```
427+
428+ After:
429+ ```nix
430+ services.keycloak = {
431+ enable = true;
432+ settings = {
433+ http-port = 8080;
434+ hostname = "keycloak.example.com";
435+ http-relative-path = "/auth";
436+ proxy = "edge";
437+ };
438+ database.passwordFile = "/run/keys/db_password";
439+ };
440+ ```
441+
266442- The MoinMoin wiki engine (`services.moinmoin`) has been removed, because Python 2 is being retired from nixpkgs.
267443
268444- Services in the `hadoop` module previously set `openFirewall` to true by default.
@@ -304,6 +480,10 @@ In addition to numerous new and upgraded packages, this release has the followin
304480
305481- `services.miniflux.adminCredentialFiles` is now required, instead of defaulting to `admin` and `password`.
306482
483+- The `taskserver` module no longer implicitly opens ports in the firewall
484+ configuration. This is now controlled through the option
485+ `services.taskserver.openFirewall`.
486+
307487- The `autorestic` package has been upgraded from 1.3.0 to 1.5.0 which introduces breaking changes in config file, check [their migration guide](https://autorestic.vercel.app/migration/1.4_1.5) for more details.
308488
309489- For `pkgs.python3.pkgs.ipython`, its direct dependency `pkgs.python3.pkgs.matplotlib-inline`
@@ -355,8 +535,14 @@ In addition to numerous new and upgraded packages, this release has the followin
355535
356536- `systemd-nspawn@.service` settings have been reverted to the default systemd behaviour. User namespaces are now activated by default. If you want to keep running nspawn containers without user namespaces you need to set `systemd.nspawn.<name>.execConfig.PrivateUsers = false`
357537
538+- `systemd-shutdown` is now properly linked on shutdown to unmount all filesystems and device mapper devices cleanly. This can be disabled using `systemd.shutdownRamfs.enable`.
539+
358540- The Tor SOCKS proxy is now actually disabled if `services.tor.client.enable` is set to `false` (the default). If you are using this functionality but didn't change the setting or set it to `false`, you now need to set it to `true`.
359541
542+- `services.github-runner` has been hardened. Notably address families and
543+ system calls have been restricted, which may adversely affect some kinds of
544+ testing, e.g. using `AF_BLUETOOTH` to test bluetooth devices.
545+
360546- The terraform 0.12 compatibility has been removed and the `terraform.withPlugins` and `terraform-providers.mkProvider` implementations simplified. Providers now need to be stored under
361547`$out/libexec/terraform-providers/<registry>/<owner>/<name>/<version>/<os>_<arch>/terraform-provider-<name>_v<version>` (which mkProvider does).
362548
@@ -377,6 +563,10 @@ In addition to numerous new and upgraded packages, this release has the followin
377563 you should change the package you refer to. If you don't need them update your
378564 commands from `otelcontribcol` to `otelcorecol` and enjoy a 7x smaller binary.
379565
566+- `services.zookeeper` has a new option `jre` for specifying the JRE to start
567+ zookeeper with. It defaults to the JRE that `pkgs.zookeeper` was wrapped with,
568+ instead of `pkgs.jre`. This changes the JRE to `pkgs.jdk11_headless` by default.
569+
380570- `pkgs.pgadmin` now refers to `pkgs.pgadmin4`. `pgadmin3` has been removed.
381571
382572- `pkgs.noto-fonts-cjk` is now deprecated in favor of `pkgs.noto-fonts-cjk-sans`
@@ -447,8 +637,15 @@ In addition to numerous new and upgraded packages, this release has the followin
447637
448638 See the `vscode` package for a more detailed example.
449639
640+- Existing `resholve*` functions have been renamed and nested under `pkgs.resholve`. Update uses to:
641+ - `resholvePackage` -> `resholve.mkDerivation`
642+ - `resholveScript` -> `resholve.writeScript`
643+ - `resholveScriptBin` -> `resholve.writeScriptBin`
644+
450645- `pkgs.cosmopolitan` no longer provides the `cosmoc` command. It has been moved to `pkgs.cosmoc`.
451646
647+- `pkgs.graalvmXX-ce` packages no longer provide support for Python/Ruby/WASM, instead focusing only in Java and Native Image Support. If you need to add support back, please see the `pkgs.graalvmCEPackages.mkGraal` function to create your own customized version of GraalVM with support for what you need.
648+
452649<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
453650
454651## Other Notable Changes {#sec-release-22.05-notable-changes}
@@ -490,6 +687,10 @@ In addition to numerous new and upgraded packages, this release has the followin
490687 - Support for older versions of hadoop have been added to the module
491688 - Overriding and extending site XML files has been made easier
492689
690+- The auto-upgrade service now accepts persistent (default: true) parameter.
691+ By default auto-upgrade will now run immediately if it would have been triggered at least
692+ once during the time when the timer was inactive.
693+
493694- If you are using Wayland you can choose to use the Ozone Wayland support
494695 in Chrome and several Electron apps by setting the environment variable
495696 `NIXOS_OZONE_WL=1` (for example via
@@ -498,6 +699,11 @@ In addition to numerous new and upgraded packages, this release has the followin
498699 still under heavy development and behavior is not always flawless.
499700 Furthermore, not all Electron apps use the latest Electron versions.
500701
702+- A new option group `systemd.network.wait-online` was added, with options to configure `systemd-networkd-wait-online.service`:
703+ - `anyInterface` allows specifying that the network should be considered online when *at least one* interface is online (useful on laptops)
704+ - `timeout` defines how long to wait for the network to come online
705+ - `extraArgs` for everything else
706+
501707- The `influxdb2` package was split into `influxdb2-server` and
502708 `influxdb2-cli`, matching the split that took place upstream. A
503709 combined `influxdb2` package is still provided in this release for
@@ -508,6 +714,8 @@ In addition to numerous new and upgraded packages, this release has the followin
508714
509715- `programs.zsh.autosuggestions.strategy` now takes a list of strings instead of a string.
510716
717+- The `asterisk` and `asterisk-stable` packages were switched from `asterisk_18` to the newly-packaged `asterisk_19`. Asterisk 13 and 17 have been removed as they have reached their end of life.
718+
511719- The `services.unifi.openPorts` option default value of `true` is now deprecated and will be changed to `false` in 22.11.
512720 Configurations using this default will print a warning when rebuilt.
513721
@@ -532,28 +740,53 @@ In addition to numerous new and upgraded packages, this release has the followin
532740 e.g. Wayland.
533741
534742- [programs.ssh.knownHosts](#opt-programs.ssh.knownHosts) has gained an `extraHostNames`
535− option to replace `hostNames`. `hostNames` is deprecated, but still available for now.
743+ option to augment `hostNames`. It is now possible to use the attribute name of a `knownHosts`
744+ entry as the primary host name and specify secondary host names using `extraHostNames` without
745+ having to duplicate the primary host name.
536746
537747- The `services.stubby` module was converted to a [settings-style](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md) configuration.
538748
749+- The option
750+ [services.xserver.desktopManager.runXdgAutostartIfNone](#opt-services.xserver.desktopManager.runXdgAutostartIfNone)
751+ was added in order to automatically run XDG autostart files for sessions without a desktop manager.
752+ This replaces helpers like the `dex` package.
753+
754+- When setting [i18n.inputMethod.enabled](#opt-i18n.inputMethod.enabled) to `fcitx5`,
755+ it no longer creates corresponding systemd user services.
756+ It now relies on XDG autostart files to start and work properly in your desktop sessions.
757+ If you are using only a window manager without a desktop manager, you need to enable
758+ `services.xserver.desktopManager.runXdgAutostartIfNone` or using the `dex` package to make `fcitx5` work.
759+
760+- A new module was added for the Envoy reverse proxy, providing the options `services.envoy.enable` and `services.envoy.settings`.
761+
539762- The option `services.duplicati.dataDir` has been added to allow changing the location of duplicati's files.
540763
541764- The options `boot.extraModprobeConfig` and `boot.blacklistedKernelModules` now also take effect in the initrd by copying the file `/etc/modprobe.d/nixos.conf` into the initrd.
542765
543766- `nixos-generate-config` now puts the dhcp configuration in `hardware-configuration.nix` instead of `configuration.nix`.
544767
545−- ORY Kratos was updated to version 0.8.3-alpha.1.pre.0, which introduces some breaking changes:
768+- ORY Kratos was updated to version 0.9.0-alpha.3, which introduces some breaking changes:
769+ - All endpoints at the Admin API are now exposed at `/admin/`. For example, endpoint `https://kratos:4434/identities` is now exposed at `https://kratos:4434/admin/identities`
770+ - Configuration key `selfservice.whitelisted_return_urls` has been renamed to `allowed_return_urls`
771+ - The `password_identifier` form field of the password login strategy has been renamed to `identifier` to make compatibility with passwordless flows possible.
772+ - Instead of having a global `default_schema_url` which developers used to update their schema, you now need to define the `default_schema_id` which must reference schema ID in your config.
773+ - Calling `/self-service/recovery` without flow ID or with an invalid flow ID while authenticated will now respond with an error instead of redirecting to the default page.
546774 - If you are relying on the SQLite images, update your Docker Pull commands as follows:
547775 - `docker pull oryd/kratos:{version}`
548776 - Additionally, all passwords now have to be at least 8 characters long.
549777 - For more details, see:
550778 - [Release Notes for v0.8.1-alpha-1](https://github.com/ory/kratos/releases/tag/v0.8.1-alpha.1)
551779 - [Release Notes for v0.8.2-alpha-1](https://github.com/ory/kratos/releases/tag/v0.8.2-alpha.1)
780+ - [Release Notes for v0.9.0-alpha-1](https://github.com/ory/kratos/releases/tag/v0.9.0-alpha.1)
781+ - [Release Notes for v0.9.0-alpha-3](https://github.com/ory/kratos/releases/tag/v0.9.0-alpha.3)
782+
552783
553784- `fetchFromSourcehut` now allows fetching repositories recursively
554785 using `fetchgit` or `fetchhg` if the argument `fetchSubmodules`
555786 is set to `true`.
556787
788+- A module for declarative configuration of openconnect VPN profiles was added under `networking.openconnect`.
789+
557790- The `element-desktop` package now has an `useKeytar` option (defaults to `true`),
558791 which allows disabling `keytar` and in turn `libsecret` usage
559792 (which binds to native credential managers / keychain libraries).
@@ -578,14 +811,24 @@ In addition to numerous new and upgraded packages, this release has the followin
578811- `services.mattermost.plugins` has been added to allow the declarative installation of Mattermost plugins.
579812 Plugins are automatically repackaged using autoPatchelf.
580813
581−- `services.logrotate.enable` now defaults to true if any rotate path has
814+- [services.logrotate.enable](#opt-services.logrotate.enable) now defaults to true if any rotate path has
582815 been defined, and some paths have been added by default.
816+- The logrotate module also has been updated to freeform syntax: [services.logrotate.paths](#opt-services.logrotate.paths)
817+ and [services.logrotate.extraConfig](#opt-services.logrotate.extraConfig) will work, but issue deprecation
818+ warnings and [services.logrotate.settings](#opt-services.logrotate.settings) should now be used instead.
819+
820+- `security.pam.ussh` has been added, which allows authorizing PAM sessions based on SSH _certificates_ held within an SSH agent, using [pam-ussh](https://github.com/uber/pam-ussh).
821+
822+- The `vscode-extensions.ionide.ionide-fsharp` package has been updated to 6.0.0 and now requires .NET 6.0.
583823
584824- The `zrepl` package has been updated from 0.4.0 to 0.5:
585825
586826 - The RPC protocol version was bumped; all zrepl daemons in a setup must be updated and restarted before replication can resume.
587827 - A bug involving encrypt-on-receive has been fixed. Read the [zrepl documentation](https://zrepl.github.io/configuration/sendrecvoptions.html#job-recv-options-placeholder) and check the output of `zfs get -r encryption,zrepl:placeholder PATH_TO_ROOTFS` on the receiver.
588828
829+- The `polybar` package has been updated from 3.5.7 to 3.6.2. See [the changelog](https://github.com/polybar/polybar/releases/tag/3.6.0) for more details.
830+ - Breaking changes include changes to escaping rules in configuration values, changes in behavior when encountering invalid tag names, and changes to inter-process-messaging (IPC).
831+
589832- Renamed option `services.openssh.challengeResponseAuthentication` to `services.openssh.kbdInteractiveAuthentication`.
590833 Reason is that the old name has been deprecated upstream.
591834 Using the old option name will still work, but produce a warning.
@@ -607,10 +850,20 @@ In addition to numerous new and upgraded packages, this release has the followin
607850
608851- The polkit service, available at `security.polkit.enable`, is now disabled by default. It will automatically be enabled through services and desktop environments as needed.
609852
853+- xfsprogs was update to version 5.15, which enables inobtcount and bigtime by default on filesystem creation. Support for these features was added in kernel 5.10 and deemed stable in kernel 5.15.
854+ If you want to be able to mount XFS filesystems created with this release of xfsprogs on kernel releases older than 5.10, you need to format them with `mkfs.xfs -m bigtime=0 -m inobtcount=0`.
855+
856+- `services.xserver.desktopManager.xfce` now includes Xfce's screen locker, `xfce4-screensaver` that is enabled by default. You can disable it by setting `false` to [services.xserver.desktopManager.xfce.enableScreensaver](#opt-services.xserver.desktopManager.xfce.enableScreensaver).
857+
610858- The `hadoop` package has added support for `aarch64-linux` and `aarch64-darwin` as of 3.3.1 ([#158613](https://github.com/NixOS/nixpkgs/pull/158613)).
611859
612860- The `R` package now builds again on `aarch64-darwin` ([#158992](https://github.com/NixOS/nixpkgs/pull/158992)).
613861
862+- The `nss` package was split into `nss_esr` and `nss_latest`, with `nss` being an alias for `nss_esr`. This was done to ease maintenance of `nss` and dependent high-profile packages like `firefox`.
863+
864+- The Nextcloud module now supports to create a Mysql database automatically
865+ with `services.nextcloud.database.createLocally` enabled.
866+
614867- The `spark3` package has been updated from 3.1.2 to 3.2.1 ([#160075](https://github.com/NixOS/nixpkgs/pull/160075)):
615868
616869 - Testing has been enabled for `aarch64-linux` in addition to `x86_64-linux`.
@@ -618,4 +871,8 @@ In addition to numerous new and upgraded packages, this release has the followin
618871
619872- The `programs.nncp` options were added for generating host-global NNCP configuration.
620873
874+- The option `services.snapserver.openFirewall` will no longer default to
875+ `true` starting with NixOS 22.11. Enable it explicitly if you need to control
876+ Snapserver remotely or connect streamig clients from other hosts.
877+
621878<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
nixos/lib/make-disk-image.nix+1
@@ -170,6 +170,7 @@ let format' = format; in let
170170 config.system.build.nixos-install
171171 config.system.build.nixos-enter
172172 nix
173+ systemdMinimal
173174 ] ++ stdenv.initialPath);
174175
175176 # I'm preserving the line below because I'm going to search for it across nixpkgs to consolidate
nixos/lib/make-zfs-image.nix → nixos/lib/make-multi-disk-zfs-image.nixrenamed

The content is the same.

nixos/lib/make-options-doc/mergeJSON.py+3−1
@@ -48,7 +48,9 @@ overrides = pivot(json.load(open(sys.argv[2 + optOffset], 'r')))
4848
4949# fix up declaration paths in lazy options, since we don't eval them from a full nixpkgs dir
5050for (k, v) in options.items():
51− v.value['declarations'] = list(map(lambda s: f'nixos/modules/{s}', v.value['declarations']))
51+ # The _module options are not declared in nixos/modules
52+ if v.value['loc'][0] != "_module":
53+ v.value['declarations'] = list(map(lambda s: f'nixos/modules/{s}', v.value['declarations']))
5254
5355# merge both descriptions
5456for (k, v) in overrides.items():
nixos/lib/make-single-disk-zfs-image.nixnew file+322
@@ -0,0 +1,322 @@
1+# Note: This is a private API, internal to NixOS. Its interface is subject
2+# to change without notice.
3+#
4+# The result of this builder is a single disk image, partitioned like this:
5+#
6+# * partition #1: a very small, 1MiB partition to leave room for Grub.
7+#
8+# * partition #2: boot, a partition formatted with FAT to be used for /boot.
9+# FAT is chosen to support EFI.
10+#
11+# * partition #3: nixos, a partition dedicated to a zpool.
12+#
13+# This single-disk approach does not satisfy ZFS's requirements for autoexpand,
14+# however automation can expand it anyway. For example, with
15+# `services.zfs.expandOnBoot`.
16+{ lib
17+, pkgs
18+, # The NixOS configuration to be installed onto the disk image.
19+ config
20+
21+, # size of the FAT partition, in megabytes.
22+ bootSize ? 1024
23+
24+, # The size of the root partition, in megabytes.
25+ rootSize ? 2048
26+
27+, # The name of the ZFS pool
28+ rootPoolName ? "tank"
29+
30+, # zpool properties
31+ rootPoolProperties ? {
32+ autoexpand = "on";
33+ }
34+, # pool-wide filesystem properties
35+ rootPoolFilesystemProperties ? {
36+ acltype = "posixacl";
37+ atime = "off";
38+ compression = "on";
39+ mountpoint = "legacy";
40+ xattr = "sa";
41+ }
42+
43+, # datasets, with per-attribute options:
44+ # mount: (optional) mount point in the VM
45+ # properties: (optional) ZFS properties on the dataset, like filesystemProperties
46+ # Notes:
47+ # 1. datasets will be created from shorter to longer names as a simple topo-sort
48+ # 2. you should define a root's dataset's mount for `/`
49+ datasets ? { }
50+
51+, # The files and directories to be placed in the target file system.
52+ # This is a list of attribute sets {source, target} where `source'
53+ # is the file system object (regular file or directory) to be
54+ # grafted in the file system at path `target'.
55+ contents ? [ ]
56+
57+, # The initial NixOS configuration file to be copied to
58+ # /etc/nixos/configuration.nix. This configuration will be embedded
59+ # inside a configuration which includes the described ZFS fileSystems.
60+ configFile ? null
61+
62+, # Shell code executed after the VM has finished.
63+ postVM ? ""
64+
65+, name ? "nixos-disk-image"
66+
67+, # Disk image format, one of qcow2, qcow2-compressed, vdi, vpc, raw.
68+ format ? "raw"
69+
70+, # Include a copy of Nixpkgs in the disk image
71+ includeChannel ? true
72+}:
73+let
74+ formatOpt = if format == "qcow2-compressed" then "qcow2" else format;
75+
76+ compress = lib.optionalString (format == "qcow2-compressed") "-c";
77+
78+ filenameSuffix = "." + {
79+ qcow2 = "qcow2";
80+ vdi = "vdi";
81+ vpc = "vhd";
82+ raw = "img";
83+ }.${formatOpt} or formatOpt;
84+ rootFilename = "nixos.root${filenameSuffix}";
85+
86+ # FIXME: merge with channel.nix / make-channel.nix.
87+ channelSources =
88+ let
89+ nixpkgs = lib.cleanSource pkgs.path;
90+ in
91+ pkgs.runCommand "nixos-${config.system.nixos.version}" { } ''
92+ mkdir -p $out
93+ cp -prd ${nixpkgs.outPath} $out/nixos
94+ chmod -R u+w $out/nixos
95+ if [ ! -e $out/nixos/nixpkgs ]; then
96+ ln -s . $out/nixos/nixpkgs
97+ fi
98+ rm -rf $out/nixos/.git
99+ echo -n ${config.system.nixos.versionSuffix} > $out/nixos/.version-suffix
100+ '';
101+
102+ closureInfo = pkgs.closureInfo {
103+ rootPaths = [ config.system.build.toplevel ]
104+ ++ (lib.optional includeChannel channelSources);
105+ };
106+
107+ modulesTree = pkgs.aggregateModules
108+ (with config.boot.kernelPackages; [ kernel zfs ]);
109+
110+ tools = lib.makeBinPath (
111+ with pkgs; [
112+ config.system.build.nixos-enter
113+ config.system.build.nixos-install
114+ dosfstools
115+ e2fsprogs
116+ gptfdisk
117+ nix
118+ parted
119+ utillinux
120+ zfs
121+ ]
122+ );
123+
124+ hasDefinedMount = disk: ((disk.mount or null) != null);
125+
126+ stringifyProperties = prefix: properties: lib.concatStringsSep " \\\n" (
127+ lib.mapAttrsToList
128+ (
129+ property: value: "${prefix} ${lib.escapeShellArg property}=${lib.escapeShellArg value}"
130+ )
131+ properties
132+ );
133+
134+ featuresToProperties = features:
135+ lib.listToAttrs
136+ (builtins.map
137+ (feature: {
138+ name = "feature@${feature}";
139+ value = "enabled";
140+ })
141+ features);
142+
143+ createDatasets =
144+ let
145+ datasetlist = lib.mapAttrsToList lib.nameValuePair datasets;
146+ sorted = lib.sort (left: right: (lib.stringLength left.name) < (lib.stringLength right.name)) datasetlist;
147+ cmd = { name, value }:
148+ let
149+ properties = stringifyProperties "-o" (value.properties or { });
150+ in
151+ "zfs create -p ${properties} ${name}";
152+ in
153+ lib.concatMapStringsSep "\n" cmd sorted;
154+
155+ mountDatasets =
156+ let
157+ datasetlist = lib.mapAttrsToList lib.nameValuePair datasets;
158+ mounts = lib.filter ({ value, ... }: hasDefinedMount value) datasetlist;
159+ sorted = lib.sort (left: right: (lib.stringLength left.value.mount) < (lib.stringLength right.value.mount)) mounts;
160+ cmd = { name, value }:
161+ ''
162+ mkdir -p /mnt${lib.escapeShellArg value.mount}
163+ mount -t zfs ${name} /mnt${lib.escapeShellArg value.mount}
164+ '';
165+ in
166+ lib.concatMapStringsSep "\n" cmd sorted;
167+
168+ unmountDatasets =
169+ let
170+ datasetlist = lib.mapAttrsToList lib.nameValuePair datasets;
171+ mounts = lib.filter ({ value, ... }: hasDefinedMount value) datasetlist;
172+ sorted = lib.sort (left: right: (lib.stringLength left.value.mount) > (lib.stringLength right.value.mount)) mounts;
173+ cmd = { name, value }:
174+ ''
175+ umount /mnt${lib.escapeShellArg value.mount}
176+ '';
177+ in
178+ lib.concatMapStringsSep "\n" cmd sorted;
179+
180+
181+ fileSystemsCfgFile =
182+ let
183+ mountable = lib.filterAttrs (_: value: hasDefinedMount value) datasets;
184+ in
185+ pkgs.runCommand "filesystem-config.nix"
186+ {
187+ buildInputs = with pkgs; [ jq nixpkgs-fmt ];
188+ filesystems = builtins.toJSON {
189+ fileSystems = lib.mapAttrs'
190+ (
191+ dataset: attrs:
192+ {
193+ name = attrs.mount;
194+ value = {
195+ fsType = "zfs";
196+ device = "${dataset}";
197+ };
198+ }
199+ )
200+ mountable;
201+ };
202+ passAsFile = [ "filesystems" ];
203+ } ''
204+ (
205+ echo "builtins.fromJSON '''"
206+ jq . < "$filesystemsPath"
207+ echo "'''"
208+ ) > $out
209+
210+ nixpkgs-fmt $out
211+ '';
212+
213+ mergedConfig =
214+ if configFile == null
215+ then fileSystemsCfgFile
216+ else
217+ pkgs.runCommand "configuration.nix"
218+ {
219+ buildInputs = with pkgs; [ nixpkgs-fmt ];
220+ }
221+ ''
222+ (
223+ echo '{ imports = ['
224+ printf "(%s)\n" "$(cat ${fileSystemsCfgFile})";
225+ printf "(%s)\n" "$(cat ${configFile})";
226+ echo ']; }'
227+ ) > $out
228+
229+ nixpkgs-fmt $out
230+ '';
231+
232+ image = (
233+ pkgs.vmTools.override {
234+ rootModules =
235+ [ "zfs" "9p" "9pnet_virtio" "virtio_pci" "virtio_blk" ] ++
236+ (pkgs.lib.optional pkgs.stdenv.hostPlatform.isx86 "rtc_cmos");
237+ kernel = modulesTree;
238+ }
239+ ).runInLinuxVM (
240+ pkgs.runCommand name
241+ {
242+ memSize = 1024;
243+ QEMU_OPTS = "-drive file=$rootDiskImage,if=virtio,cache=unsafe,werror=report";
244+ preVM = ''
245+ PATH=$PATH:${pkgs.qemu_kvm}/bin
246+ mkdir $out
247+
248+ rootDiskImage=root.raw
249+ qemu-img create -f raw $rootDiskImage ${toString (bootSize + rootSize)}M
250+ '';
251+
252+ postVM = ''
253+ ${if formatOpt == "raw" then ''
254+ mv $rootDiskImage $out/${rootFilename}
255+ '' else ''
256+ ${pkgs.qemu}/bin/qemu-img convert -f raw -O ${formatOpt} ${compress} $rootDiskImage $out/${rootFilename}
257+ ''}
258+ rootDiskImage=$out/${rootFilename}
259+ set -x
260+ ${postVM}
261+ '';
262+ } ''
263+ export PATH=${tools}:$PATH
264+ set -x
265+
266+ cp -sv /dev/vda /dev/sda
267+ cp -sv /dev/vda /dev/xvda
268+
269+ parted --script /dev/vda -- \
270+ mklabel gpt \
271+ mkpart no-fs 1MiB 2MiB \
272+ set 1 bios_grub on \
273+ align-check optimal 1 \
274+ mkpart primary fat32 2MiB ${toString bootSize}MiB \
275+ align-check optimal 2 \
276+ mkpart primary fat32 ${toString bootSize}MiB -1MiB \
277+ align-check optimal 3 \
278+ print
279+
280+ sfdisk --dump /dev/vda
281+
282+
283+ zpool create \
284+ ${stringifyProperties " -o" rootPoolProperties} \
285+ ${stringifyProperties " -O" rootPoolFilesystemProperties} \
286+ ${rootPoolName} /dev/vda3
287+ parted --script /dev/vda -- print
288+
289+ ${createDatasets}
290+ ${mountDatasets}
291+
292+ mkdir -p /mnt/boot
293+ mkfs.vfat -n ESP /dev/vda2
294+ mount /dev/vda2 /mnt/boot
295+
296+ mount
297+
298+ # Install a configuration.nix
299+ mkdir -p /mnt/etc/nixos
300+ # `cat` so it is mutable on the fs
301+ cat ${mergedConfig} > /mnt/etc/nixos/configuration.nix
302+
303+ export NIX_STATE_DIR=$TMPDIR/state
304+ nix-store --load-db < ${closureInfo}/registration
305+
306+ nixos-install \
307+ --root /mnt \
308+ --no-root-passwd \
309+ --system ${config.system.build.toplevel} \
310+ --substituters "" \
311+ ${lib.optionalString includeChannel ''--channel ${channelSources}''}
312+
313+ df -h
314+
315+ umount /mnt/boot
316+ ${unmountDatasets}
317+
318+ zpool export ${rootPoolName}
319+ ''
320+ );
321+in
322+image
nixos/lib/qemu-common.nix+2−2
@@ -23,8 +23,8 @@ rec {
2323
2424 qemuBinary = qemuPkg: {
2525 x86_64-linux = "${qemuPkg}/bin/qemu-kvm -cpu max";
26− armv7l-linux = "${qemuPkg}/bin/qemu-system-arm -enable-kvm -machine virt -cpu host";
27− aarch64-linux = "${qemuPkg}/bin/qemu-system-aarch64 -enable-kvm -machine virt,gic-version=host -cpu host";
26+ armv7l-linux = "${qemuPkg}/bin/qemu-system-arm -machine virt,accel=kvm:tcg -cpu max";
27+ aarch64-linux = "${qemuPkg}/bin/qemu-system-aarch64 -machine virt,gic-version=max,accel=kvm:tcg -cpu max";
2828 powerpc64le-linux = "${qemuPkg}/bin/qemu-system-ppc64 -machine powernv";
2929 powerpc64-linux = "${qemuPkg}/bin/qemu-system-ppc64 -machine powernv";
3030 x86_64-darwin = "${qemuPkg}/bin/qemu-kvm -cpu max";
nixos/lib/systemd-lib.nix+34−50
@@ -122,10 +122,15 @@ in rec {
122122 (if isList value then value else [value]))
123123 as));
124124
125− generateUnits = generateUnits' true;
126−
127− generateUnits' = allowCollisions: type: units: upstreamUnits: upstreamWants:
128− pkgs.runCommand "${type}-units"
125+ generateUnits = { allowCollisions ? true, type, units, upstreamUnits, upstreamWants, packages ? cfg.packages, package ? cfg.package }:
126+ let
127+ typeDir = ({
128+ system = "system";
129+ initrd = "system";
130+ user = "user";
131+ nspawn = "nspawn";
132+ }).${type};
133+ in pkgs.runCommand "${type}-units"
129134 { preferLocalBuild = true;
130135 allowSubstitutes = false;
131136 } ''
@@ -133,7 +138,7 @@ in rec {
133138
134139 # Copy the upstream systemd units we're interested in.
135140 for i in ${toString upstreamUnits}; do
136− fn=${cfg.package}/example/systemd/${type}/$i
141+ fn=${package}/example/systemd/${typeDir}/$i
137142 if ! [ -e $fn ]; then echo "missing $fn"; false; fi
138143 if [ -L $fn ]; then
139144 target="$(readlink "$fn")"
@@ -150,7 +155,7 @@ in rec {
150155 # Copy .wants links, but only those that point to units that
151156 # we're interested in.
152157 for i in ${toString upstreamWants}; do
153− fn=${cfg.package}/example/systemd/${type}/$i
158+ fn=${package}/example/systemd/${typeDir}/$i
154159 if ! [ -e $fn ]; then echo "missing $fn"; false; fi
155160 x=$out/$(basename $fn)
156161 mkdir $x
@@ -162,14 +167,14 @@ in rec {
162167 done
163168
164169 # Symlink all units provided listed in systemd.packages.
165− packages="${toString cfg.packages}"
170+ packages="${toString packages}"
166171
167172 # Filter duplicate directories
168173 declare -A unique_packages
169174 for k in $packages ; do unique_packages[$k]=1 ; done
170175
171176 for i in ''${!unique_packages[@]}; do
172− for fn in $i/etc/systemd/${type}/* $i/lib/systemd/${type}/*; do
177+ for fn in $i/etc/systemd/${typeDir}/* $i/lib/systemd/${typeDir}/*; do
173178 if ! [[ "$fn" =~ .wants$ ]]; then
174179 if [[ -d "$fn" ]]; then
175180 targetDir="$out/$(basename "$fn")"
@@ -270,9 +275,9 @@ in rec {
270275 { Conflicts = toString config.conflicts; }
271276 // optionalAttrs (config.requisite != [])
272277 { Requisite = toString config.requisite; }
273− // optionalAttrs (config.restartTriggers != [])
278+ // optionalAttrs (config ? restartTriggers && config.restartTriggers != [])
274279 { X-Restart-Triggers = toString config.restartTriggers; }
275− // optionalAttrs (config.reloadTriggers != [])
280+ // optionalAttrs (config ? reloadTriggers && config.reloadTriggers != [])
276281 { X-Reload-Triggers = toString config.reloadTriggers; }
277282 // optionalAttrs (config.description != "") {
278283 Description = config.description; }
@@ -288,45 +293,24 @@ in rec {
288293 };
289294 };
290295
291− serviceConfig = { name, config, ... }: {
292− config = mkMerge
293− [ { # Default path for systemd services. Should be quite minimal.
294− path = mkAfter
295− [ pkgs.coreutils
296− pkgs.findutils
297− pkgs.gnugrep
298− pkgs.gnused
299− systemd
300− ];
301− environment.PATH = "${makeBinPath config.path}:${makeSearchPathOutput "bin" "sbin" config.path}";
302− }
303− (mkIf (config.preStart != "")
304− { serviceConfig.ExecStartPre =
305− [ (makeJobScript "${name}-pre-start" config.preStart) ];
306− })
307− (mkIf (config.script != "")
308− { serviceConfig.ExecStart =
309− makeJobScript "${name}-start" config.script + " " + config.scriptArgs;
310− })
311− (mkIf (config.postStart != "")
312− { serviceConfig.ExecStartPost =
313− [ (makeJobScript "${name}-post-start" config.postStart) ];
314− })
315− (mkIf (config.reload != "")
316− { serviceConfig.ExecReload =
317− makeJobScript "${name}-reload" config.reload;
318− })
319− (mkIf (config.preStop != "")
320− { serviceConfig.ExecStop =
321− makeJobScript "${name}-pre-stop" config.preStop;
322− })
323− (mkIf (config.postStop != "")
324− { serviceConfig.ExecStopPost =
325− makeJobScript "${name}-post-stop" config.postStop;
326− })
327− ];
296+ serviceConfig = { config, ... }: {
297+ config.environment.PATH = mkIf (config.path != []) "${makeBinPath config.path}:${makeSearchPathOutput "bin" "sbin" config.path}";
328298 };
329299
300+ stage2ServiceConfig = {
301+ imports = [ serviceConfig ];
302+ # Default path for systemd services. Should be quite minimal.
303+ config.path = mkAfter [
304+ pkgs.coreutils
305+ pkgs.findutils
306+ pkgs.gnugrep
307+ pkgs.gnused
308+ systemd
309+ ];
310+ };
311+
312+ stage1ServiceConfig = serviceConfig;
313+
330314 mountConfig = { config, ... }: {
331315 config = {
332316 mountConfig =
@@ -374,12 +358,12 @@ in rec {
374358 # systemd max line length is now 1MiB
375359 # https://github.com/systemd/systemd/commit/e6dde451a51dc5aaa7f4d98d39b8fe735f73d2af
376360 in if stringLength s >= 1048576 then throw "The value of the environment variable ‘${n}’ in systemd service ‘${name}.service’ is too long." else s) (attrNames env)}
377− ${if def.reloadIfChanged then ''
361+ ${if def ? reloadIfChanged && def.reloadIfChanged then ''
378362 X-ReloadIfChanged=true
379− '' else if !def.restartIfChanged then ''
363+ '' else if (def ? restartIfChanged && !def.restartIfChanged) then ''
380364 X-RestartIfChanged=false
381365 '' else ""}
382− ${optionalString (!def.stopIfChanged) "X-StopIfChanged=false"}
366+ ${optionalString (def ? stopIfChanged && !def.stopIfChanged) "X-StopIfChanged=false"}
383367 ${attrsToSection def.serviceConfig}
384368 '';
385369 };
nixos/lib/systemd-types.nixnew file+69
@@ -0,0 +1,69 @@
1+{ lib, systemdUtils, pkgs }:
2+
3+with systemdUtils.lib;
4+with systemdUtils.unitOptions;
5+with lib;
6+
7+rec {
8+ units = with types;
9+ attrsOf (submodule ({ name, config, ... }: {
10+ options = concreteUnitOptions;
11+ config = { unit = mkDefault (systemdUtils.lib.makeUnit name config); };
12+ }));
13+
14+ services = with types; attrsOf (submodule [ stage2ServiceOptions unitConfig stage2ServiceConfig ]);
15+ initrdServices = with types; attrsOf (submodule [ stage1ServiceOptions unitConfig stage1ServiceConfig ]);
16+
17+ targets = with types; attrsOf (submodule [ stage2CommonUnitOptions unitConfig ]);
18+ initrdTargets = with types; attrsOf (submodule [ stage1CommonUnitOptions unitConfig ]);
19+
20+ sockets = with types; attrsOf (submodule [ stage2SocketOptions unitConfig ]);
21+ initrdSockets = with types; attrsOf (submodule [ stage1SocketOptions unitConfig ]);
22+
23+ timers = with types; attrsOf (submodule [ stage2TimerOptions unitConfig ]);
24+ initrdTimers = with types; attrsOf (submodule [ stage1TimerOptions unitConfig ]);
25+
26+ paths = with types; attrsOf (submodule [ stage2PathOptions unitConfig ]);
27+ initrdPaths = with types; attrsOf (submodule [ stage1PathOptions unitConfig ]);
28+
29+ slices = with types; attrsOf (submodule [ stage2SliceOptions unitConfig ]);
30+ initrdSlices = with types; attrsOf (submodule [ stage1SliceOptions unitConfig ]);
31+
32+ mounts = with types; listOf (submodule [ stage2MountOptions unitConfig mountConfig ]);
33+ initrdMounts = with types; listOf (submodule [ stage1MountOptions unitConfig mountConfig ]);
34+
35+ automounts = with types; listOf (submodule [ stage2AutomountOptions unitConfig automountConfig ]);
36+ initrdAutomounts = with types; attrsOf (submodule [ stage1AutomountOptions unitConfig automountConfig ]);
37+
38+ initrdContents = types.attrsOf (types.submodule ({ config, options, name, ... }: {
39+ options = {
40+ enable = mkEnableOption "copying of this file and symlinking it" // { default = true; };
41+
42+ target = mkOption {
43+ type = types.path;
44+ description = ''
45+ Path of the symlink.
46+ '';
47+ default = name;
48+ };
49+
50+ text = mkOption {
51+ default = null;
52+ type = types.nullOr types.lines;
53+ description = "Text of the file.";
54+ };
55+
56+ source = mkOption {
57+ type = types.path;
58+ description = "Path of the source file.";
59+ };
60+ };
61+
62+ config = {
63+ source = mkIf (config.text != null) (
64+ let name' = "initrd-" + baseNameOf name;
65+ in mkDerivedConfig options.text (pkgs.writeText name')
66+ );
67+ };
68+ }));
69+}
nixos/lib/systemd-unit-options.nix+560−401
@@ -94,459 +94,618 @@ in rec {
9494
9595 };
9696
97− commonUnitOptions = sharedOptions // {
97+ commonUnitOptions = {
98+ options = sharedOptions // {
99+
100+ description = mkOption {
101+ default = "";
102+ type = types.singleLineStr;
103+ description = "Description of this unit used in systemd messages and progress indicators.";
104+ };
105+
106+ documentation = mkOption {
107+ default = [];
108+ type = types.listOf types.str;
109+ description = "A list of URIs referencing documentation for this unit or its configuration.";
110+ };
111+
112+ requires = mkOption {
113+ default = [];
114+ type = types.listOf unitNameType;
115+ description = ''
116+ Start the specified units when this unit is started, and stop
117+ this unit when the specified units are stopped or fail.
118+ '';
119+ };
120+
121+ wants = mkOption {
122+ default = [];
123+ type = types.listOf unitNameType;
124+ description = ''
125+ Start the specified units when this unit is started.
126+ '';
127+ };
128+
129+ after = mkOption {
130+ default = [];
131+ type = types.listOf unitNameType;
132+ description = ''
133+ If the specified units are started at the same time as
134+ this unit, delay this unit until they have started.
135+ '';
136+ };
137+
138+ before = mkOption {
139+ default = [];
140+ type = types.listOf unitNameType;
141+ description = ''
142+ If the specified units are started at the same time as
143+ this unit, delay them until this unit has started.
144+ '';
145+ };
146+
147+ bindsTo = mkOption {
148+ default = [];
149+ type = types.listOf unitNameType;
150+ description = ''
151+ Like ‘requires’, but in addition, if the specified units
152+ unexpectedly disappear, this unit will be stopped as well.
153+ '';
154+ };
155+
156+ partOf = mkOption {
157+ default = [];
158+ type = types.listOf unitNameType;
159+ description = ''
160+ If the specified units are stopped or restarted, then this
161+ unit is stopped or restarted as well.
162+ '';
163+ };
164+
165+ conflicts = mkOption {
166+ default = [];
167+ type = types.listOf unitNameType;
168+ description = ''
169+ If the specified units are started, then this unit is stopped
170+ and vice versa.
171+ '';
172+ };
173+
174+ requisite = mkOption {
175+ default = [];
176+ type = types.listOf unitNameType;
177+ description = ''
178+ Similar to requires. However if the units listed are not started,
179+ they will not be started and the transaction will fail.
180+ '';
181+ };
182+
183+ unitConfig = mkOption {
184+ default = {};
185+ example = { RequiresMountsFor = "/data"; };
186+ type = types.attrsOf unitOption;
187+ description = ''
188+ Each attribute in this set specifies an option in the
189+ <literal>[Unit]</literal> section of the unit. See
190+ <citerefentry><refentrytitle>systemd.unit</refentrytitle>
191+ <manvolnum>5</manvolnum></citerefentry> for details.
192+ '';
193+ };
194+
195+ onFailure = mkOption {
196+ default = [];
197+ type = types.listOf unitNameType;
198+ description = ''
199+ A list of one or more units that are activated when
200+ this unit enters the "failed" state.
201+ '';
202+ };
203+
204+ startLimitBurst = mkOption {
205+ type = types.int;
206+ description = ''
207+ Configure unit start rate limiting. Units which are started
208+ more than startLimitBurst times within an interval time
209+ interval are not permitted to start any more.
210+ '';
211+ };
212+
213+ startLimitIntervalSec = mkOption {
214+ type = types.int;
215+ description = ''
216+ Configure unit start rate limiting. Units which are started
217+ more than startLimitBurst times within an interval time
218+ interval are not permitted to start any more.
219+ '';
220+ };
98221
99− description = mkOption {
100− default = "";
101− type = types.singleLineStr;
102− description = "Description of this unit used in systemd messages and progress indicators.";
103222 };
104−
105− documentation = mkOption {
106− default = [];
107− type = types.listOf types.str;
108− description = "A list of URIs referencing documentation for this unit or its configuration.";
109− };
110−
111− requires = mkOption {
112− default = [];
113− type = types.listOf unitNameType;
114− description = ''
115− Start the specified units when this unit is started, and stop
116− this unit when the specified units are stopped or fail.
117− '';
118− };
119−
120− wants = mkOption {
121− default = [];
122− type = types.listOf unitNameType;
123− description = ''
124− Start the specified units when this unit is started.
125− '';
126− };
127−
128− after = mkOption {
129− default = [];
130− type = types.listOf unitNameType;
131− description = ''
132− If the specified units are started at the same time as
133− this unit, delay this unit until they have started.
134− '';
135− };
136−
137− before = mkOption {
138− default = [];
139− type = types.listOf unitNameType;
140− description = ''
141− If the specified units are started at the same time as
142− this unit, delay them until this unit has started.
143− '';
144− };
145−
146− bindsTo = mkOption {
147− default = [];
148− type = types.listOf unitNameType;
149− description = ''
150− Like ‘requires’, but in addition, if the specified units
151− unexpectedly disappear, this unit will be stopped as well.
152− '';
153− };
154−
155− partOf = mkOption {
156− default = [];
157− type = types.listOf unitNameType;
158− description = ''
159− If the specified units are stopped or restarted, then this
160− unit is stopped or restarted as well.
161− '';
162− };
163−
164− conflicts = mkOption {
165− default = [];
166− type = types.listOf unitNameType;
167− description = ''
168− If the specified units are started, then this unit is stopped
169− and vice versa.
170− '';
171− };
172−
173− requisite = mkOption {
174− default = [];
175− type = types.listOf unitNameType;
176− description = ''
177− Similar to requires. However if the units listed are not started,
178− they will not be started and the transaction will fail.
179− '';
180− };
181−
182− unitConfig = mkOption {
183− default = {};
184− example = { RequiresMountsFor = "/data"; };
185− type = types.attrsOf unitOption;
186− description = ''
187− Each attribute in this set specifies an option in the
188− <literal>[Unit]</literal> section of the unit. See
189− <citerefentry><refentrytitle>systemd.unit</refentrytitle>
190− <manvolnum>5</manvolnum></citerefentry> for details.
191− '';
192− };
193−
194− restartTriggers = mkOption {
195− default = [];
196− type = types.listOf types.unspecified;
197− description = ''
198− An arbitrary list of items such as derivations. If any item
199− in the list changes between reconfigurations, the service will
200− be restarted.
201− '';
202− };
203−
204− reloadTriggers = mkOption {
205− default = [];
206− type = types.listOf unitOption;
207− description = ''
208− An arbitrary list of items such as derivations. If any item
209− in the list changes between reconfigurations, the service will
210− be reloaded. If anything but a reload trigger changes in the
211− unit file, the unit will be restarted instead.
212− '';
213− };
214−
215− onFailure = mkOption {
216− default = [];
217− type = types.listOf unitNameType;
218− description = ''
219− A list of one or more units that are activated when
220− this unit enters the "failed" state.
221− '';
222− };
223−
224− startLimitBurst = mkOption {
225− type = types.int;
226− description = ''
227− Configure unit start rate limiting. Units which are started
228− more than startLimitBurst times within an interval time
229− interval are not permitted to start any more.
230− '';
231− };
232−
233− startLimitIntervalSec = mkOption {
234− type = types.int;
235− description = ''
236− Configure unit start rate limiting. Units which are started
237− more than startLimitBurst times within an interval time
238− interval are not permitted to start any more.
239− '';
240− };
241−
242223 };
243224
244−
245− serviceOptions = commonUnitOptions // {
246−
247− environment = mkOption {
248− default = {};
249− type = with types; attrsOf (nullOr (oneOf [ str path package ]));
250− example = { PATH = "/foo/bar/bin"; LANG = "nl_NL.UTF-8"; };
251− description = "Environment variables passed to the service's processes.";
252− };
253−
254− path = mkOption {
255− default = [];
256− type = with types; listOf (oneOf [ package str ]);
257− description = ''
258− Packages added to the service's <envar>PATH</envar>
259− environment variable. Both the <filename>bin</filename>
260− and <filename>sbin</filename> subdirectories of each
261− package are added.
262− '';
225+ stage2CommonUnitOptions = {
226+ imports = [
227+ commonUnitOptions
228+ ];
229+
230+ options = {
231+ restartTriggers = mkOption {
232+ default = [];
233+ type = types.listOf types.unspecified;
234+ description = ''
235+ An arbitrary list of items such as derivations. If any item
236+ in the list changes between reconfigurations, the service will
237+ be restarted.
238+ '';
239+ };
240+
241+ reloadTriggers = mkOption {
242+ default = [];
243+ type = types.listOf unitOption;
244+ description = ''
245+ An arbitrary list of items such as derivations. If any item
246+ in the list changes between reconfigurations, the service will
247+ be reloaded. If anything but a reload trigger changes in the
248+ unit file, the unit will be restarted instead.
249+ '';
250+ };
263251 };
252+ };
253+ stage1CommonUnitOptions = commonUnitOptions;
254+
255+ serviceOptions = { name, config, ... }: {
256+ options = {
257+
258+ environment = mkOption {
259+ default = {};
260+ type = with types; attrsOf (nullOr (oneOf [ str path package ]));
261+ example = { PATH = "/foo/bar/bin"; LANG = "nl_NL.UTF-8"; };
262+ description = "Environment variables passed to the service's processes.";
263+ };
264+
265+ path = mkOption {
266+ default = [];
267+ type = with types; listOf (oneOf [ package str ]);
268+ description = ''
269+ Packages added to the service's <envar>PATH</envar>
270+ environment variable. Both the <filename>bin</filename>
271+ and <filename>sbin</filename> subdirectories of each
272+ package are added.
273+ '';
274+ };
275+
276+ serviceConfig = mkOption {
277+ default = {};
278+ example =
279+ { RestartSec = 5;
280+ };
281+ type = types.addCheck (types.attrsOf unitOption) checkService;
282+ description = ''
283+ Each attribute in this set specifies an option in the
284+ <literal>[Service]</literal> section of the unit. See
285+ <citerefentry><refentrytitle>systemd.service</refentrytitle>
286+ <manvolnum>5</manvolnum></citerefentry> for details.
287+ '';
288+ };
289+
290+ script = mkOption {
291+ type = types.lines;
292+ default = "";
293+ description = "Shell commands executed as the service's main process.";
294+ };
295+
296+ scriptArgs = mkOption {
297+ type = types.str;
298+ default = "";
299+ description = "Arguments passed to the main process script.";
300+ };
301+
302+ preStart = mkOption {
303+ type = types.lines;
304+ default = "";
305+ description = ''
306+ Shell commands executed before the service's main process
307+ is started.
308+ '';
309+ };
310+
311+ postStart = mkOption {
312+ type = types.lines;
313+ default = "";
314+ description = ''
315+ Shell commands executed after the service's main process
316+ is started.
317+ '';
318+ };
319+
320+ reload = mkOption {
321+ type = types.lines;
322+ default = "";
323+ description = ''
324+ Shell commands executed when the service's main process
325+ is reloaded.
326+ '';
327+ };
328+
329+ preStop = mkOption {
330+ type = types.lines;
331+ default = "";
332+ description = ''
333+ Shell commands executed to stop the service.
334+ '';
335+ };
336+
337+ postStop = mkOption {
338+ type = types.lines;
339+ default = "";
340+ description = ''
341+ Shell commands executed after the service's main process
342+ has exited.
343+ '';
344+ };
345+
346+ jobScripts = mkOption {
347+ type = with types; coercedTo path singleton (listOf path);
348+ internal = true;
349+ description = "A list of all job script derivations of this unit.";
350+ default = [];
351+ };
352+
353+ };
354+
355+ config = mkMerge [
356+ (mkIf (config.preStart != "") rec {
357+ jobScripts = makeJobScript "${name}-pre-start" config.preStart;
358+ serviceConfig.ExecStartPre = [ jobScripts ];
359+ })
360+ (mkIf (config.script != "") rec {
361+ jobScripts = makeJobScript "${name}-start" config.script;
362+ serviceConfig.ExecStart = jobScripts + " " + config.scriptArgs;
363+ })
364+ (mkIf (config.postStart != "") rec {
365+ jobScripts = (makeJobScript "${name}-post-start" config.postStart);
366+ serviceConfig.ExecStartPost = [ jobScripts ];
367+ })
368+ (mkIf (config.reload != "") rec {
369+ jobScripts = makeJobScript "${name}-reload" config.reload;
370+ serviceConfig.ExecReload = jobScripts;
371+ })
372+ (mkIf (config.preStop != "") rec {
373+ jobScripts = makeJobScript "${name}-pre-stop" config.preStop;
374+ serviceConfig.ExecStop = jobScripts;
375+ })
376+ (mkIf (config.postStop != "") rec {
377+ jobScripts = makeJobScript "${name}-post-stop" config.postStop;
378+ serviceConfig.ExecStopPost = jobScripts;
379+ })
380+ ];
264381
265− serviceConfig = mkOption {
266− default = {};
267− example =
268− { RestartSec = 5;
269− };
270− type = types.addCheck (types.attrsOf unitOption) checkService;
271− description = ''
272− Each attribute in this set specifies an option in the
273− <literal>[Service]</literal> section of the unit. See
274− <citerefentry><refentrytitle>systemd.service</refentrytitle>
275− <manvolnum>5</manvolnum></citerefentry> for details.
276− '';
277− };
382+ };
278383
279− script = mkOption {
280− type = types.lines;
281− default = "";
282− description = "Shell commands executed as the service's main process.";
384+ stage2ServiceOptions = {
385+ imports = [
386+ stage2CommonUnitOptions
387+ serviceOptions
388+ ];
389+
390+ options = {
391+ restartIfChanged = mkOption {
392+ type = types.bool;
393+ default = true;
394+ description = ''
395+ Whether the service should be restarted during a NixOS
396+ configuration switch if its definition has changed.
397+ '';
398+ };
399+
400+ reloadIfChanged = mkOption {
401+ type = types.bool;
402+ default = false;
403+ description = ''
404+ Whether the service should be reloaded during a NixOS
405+ configuration switch if its definition has changed. If
406+ enabled, the value of <option>restartIfChanged</option> is
407+ ignored.
408+
409+ This option should not be used anymore in favor of
410+ <option>reloadTriggers</option> which allows more granular
411+ control of when a service is reloaded and when a service
412+ is restarted.
413+ '';
414+ };
415+
416+ stopIfChanged = mkOption {
417+ type = types.bool;
418+ default = true;
419+ description = ''
420+ If set, a changed unit is restarted by calling
421+ <command>systemctl stop</command> in the old configuration,
422+ then <command>systemctl start</command> in the new one.
423+ Otherwise, it is restarted in a single step using
424+ <command>systemctl restart</command> in the new configuration.
425+ The latter is less correct because it runs the
426+ <literal>ExecStop</literal> commands from the new
427+ configuration.
428+ '';
429+ };
430+
431+ startAt = mkOption {
432+ type = with types; either str (listOf str);
433+ default = [];
434+ example = "Sun 14:00:00";
435+ description = ''
436+ Automatically start this unit at the given date/time, which
437+ must be in the format described in
438+ <citerefentry><refentrytitle>systemd.time</refentrytitle>
439+ <manvolnum>7</manvolnum></citerefentry>. This is equivalent
440+ to adding a corresponding timer unit with
441+ <option>OnCalendar</option> set to the value given here.
442+ '';
443+ apply = v: if isList v then v else [ v ];
444+ };
283445 };
446+ };
284447
285− scriptArgs = mkOption {
286− type = types.str;
287− default = "";
288− description = "Arguments passed to the main process script.";
289− };
448+ stage1ServiceOptions = {
449+ imports = [
450+ stage1CommonUnitOptions
451+ serviceOptions
452+ ];
453+ };
290454
291− preStart = mkOption {
292− type = types.lines;
293− default = "";
294− description = ''
295− Shell commands executed before the service's main process
296− is started.
297− '';
298− };
299455
300− postStart = mkOption {
301− type = types.lines;
302− default = "";
303− description = ''
304− Shell commands executed after the service's main process
305− is started.
306− '';
456+ socketOptions = {
457+ options = {
458+
459+ listenStreams = mkOption {
460+ default = [];
461+ type = types.listOf types.str;
462+ example = [ "0.0.0.0:993" "/run/my-socket" ];
463+ description = ''
464+ For each item in this list, a <literal>ListenStream</literal>
465+ option in the <literal>[Socket]</literal> section will be created.
466+ '';
467+ };
468+
469+ listenDatagrams = mkOption {
470+ default = [];
471+ type = types.listOf types.str;
472+ example = [ "0.0.0.0:993" "/run/my-socket" ];
473+ description = ''
474+ For each item in this list, a <literal>ListenDatagram</literal>
475+ option in the <literal>[Socket]</literal> section will be created.
476+ '';
477+ };
478+
479+ socketConfig = mkOption {
480+ default = {};
481+ example = { ListenStream = "/run/my-socket"; };
482+ type = types.attrsOf unitOption;
483+ description = ''
484+ Each attribute in this set specifies an option in the
485+ <literal>[Socket]</literal> section of the unit. See
486+ <citerefentry><refentrytitle>systemd.socket</refentrytitle>
487+ <manvolnum>5</manvolnum></citerefentry> for details.
488+ '';
489+ };
307490 };
308491
309− reload = mkOption {
310− type = types.lines;
311− default = "";
312− description = ''
313− Shell commands executed when the service's main process
314− is reloaded.
315− '';
316− };
492+ };
317493
318− preStop = mkOption {
319− type = types.lines;
320− default = "";
321− description = ''
322− Shell commands executed to stop the service.
323− '';
324− };
494+ stage2SocketOptions = {
495+ imports = [
496+ stage2CommonUnitOptions
497+ socketOptions
498+ ];
499+ };
325500
326− postStop = mkOption {
327− type = types.lines;
328− default = "";
329− description = ''
330− Shell commands executed after the service's main process
331− has exited.
332− '';
333− };
501+ stage1SocketOptions = {
502+ imports = [
503+ stage1CommonUnitOptions
504+ socketOptions
505+ ];
506+ };
334507
335− restartIfChanged = mkOption {
336− type = types.bool;
337− default = true;
338− description = ''
339− Whether the service should be restarted during a NixOS
340− configuration switch if its definition has changed.
341− '';
342− };
343508
344− reloadIfChanged = mkOption {
345− type = types.bool;
346− default = false;
347− description = ''
348− Whether the service should be reloaded during a NixOS
349− configuration switch if its definition has changed. If
350− enabled, the value of <option>restartIfChanged</option> is
351− ignored.
352−
353− This option should not be used anymore in favor of
354− <option>reloadTriggers</option> which allows more granular
355− control of when a service is reloaded and when a service
356− is restarted.
357− '';
358− };
509+ timerOptions = {
510+ options = {
359511
360− stopIfChanged = mkOption {
361− type = types.bool;
362− default = true;
363− description = ''
364− If set, a changed unit is restarted by calling
365− <command>systemctl stop</command> in the old configuration,
366− then <command>systemctl start</command> in the new one.
367− Otherwise, it is restarted in a single step using
368− <command>systemctl restart</command> in the new configuration.
369− The latter is less correct because it runs the
370− <literal>ExecStop</literal> commands from the new
371− configuration.
372− '';
373− };
512+ timerConfig = mkOption {
513+ default = {};
514+ example = { OnCalendar = "Sun 14:00:00"; Unit = "foo.service"; };
515+ type = types.attrsOf unitOption;
516+ description = ''
517+ Each attribute in this set specifies an option in the
518+ <literal>[Timer]</literal> section of the unit. See
519+ <citerefentry><refentrytitle>systemd.timer</refentrytitle>
520+ <manvolnum>5</manvolnum></citerefentry> and
521+ <citerefentry><refentrytitle>systemd.time</refentrytitle>
522+ <manvolnum>7</manvolnum></citerefentry> for details.
523+ '';
524+ };
374525
375− startAt = mkOption {
376− type = with types; either str (listOf str);
377− default = [];
378− example = "Sun 14:00:00";
379− description = ''
380− Automatically start this unit at the given date/time, which
381− must be in the format described in
382− <citerefentry><refentrytitle>systemd.time</refentrytitle>
383− <manvolnum>7</manvolnum></citerefentry>. This is equivalent
384− to adding a corresponding timer unit with
385− <option>OnCalendar</option> set to the value given here.
386− '';
387− apply = v: if isList v then v else [ v ];
388526 };
527+ };
389528
529+ stage2TimerOptions = {
530+ imports = [
531+ stage2CommonUnitOptions
532+ timerOptions
533+ ];
390534 };
391535
536+ stage1TimerOptions = {
537+ imports = [
538+ stage1CommonUnitOptions
539+ timerOptions
540+ ];
541+ };
392542
393− socketOptions = commonUnitOptions // {
394543
395− listenStreams = mkOption {
396− default = [];
397− type = types.listOf types.str;
398− example = [ "0.0.0.0:993" "/run/my-socket" ];
399− description = ''
400− For each item in this list, a <literal>ListenStream</literal>
401− option in the <literal>[Socket]</literal> section will be created.
402− '';
403− };
544+ pathOptions = {
545+ options = {
404546
405− listenDatagrams = mkOption {
406− default = [];
407− type = types.listOf types.str;
408− example = [ "0.0.0.0:993" "/run/my-socket" ];
409− description = ''
410− For each item in this list, a <literal>ListenDatagram</literal>
411− option in the <literal>[Socket]</literal> section will be created.
412− '';
413− };
547+ pathConfig = mkOption {
548+ default = {};
549+ example = { PathChanged = "/some/path"; Unit = "changedpath.service"; };
550+ type = types.attrsOf unitOption;
551+ description = ''
552+ Each attribute in this set specifies an option in the
553+ <literal>[Path]</literal> section of the unit. See
554+ <citerefentry><refentrytitle>systemd.path</refentrytitle>
555+ <manvolnum>5</manvolnum></citerefentry> for details.
556+ '';
557+ };
414558
415− socketConfig = mkOption {
416− default = {};
417− example = { ListenStream = "/run/my-socket"; };
418− type = types.attrsOf unitOption;
419− description = ''
420− Each attribute in this set specifies an option in the
421− <literal>[Socket]</literal> section of the unit. See
422− <citerefentry><refentrytitle>systemd.socket</refentrytitle>
423− <manvolnum>5</manvolnum></citerefentry> for details.
424− '';
425559 };
426−
427560 };
428561
562+ stage2PathOptions = {
563+ imports = [
564+ stage2CommonUnitOptions
565+ pathOptions
566+ ];
567+ };
429568
430− timerOptions = commonUnitOptions // {
431−
432− timerConfig = mkOption {
433− default = {};
434− example = { OnCalendar = "Sun 14:00:00"; Unit = "foo.service"; };
435− type = types.attrsOf unitOption;
436− description = ''
437− Each attribute in this set specifies an option in the
438− <literal>[Timer]</literal> section of the unit. See
439− <citerefentry><refentrytitle>systemd.timer</refentrytitle>
440− <manvolnum>5</manvolnum></citerefentry> and
441− <citerefentry><refentrytitle>systemd.time</refentrytitle>
442− <manvolnum>7</manvolnum></citerefentry> for details.
443− '';
444− };
445−
569+ stage1PathOptions = {
570+ imports = [
571+ stage1CommonUnitOptions
572+ pathOptions
573+ ];
446574 };
447575
448576
449− pathOptions = commonUnitOptions // {
577+ mountOptions = {
578+ options = {
579+
580+ what = mkOption {
581+ example = "/dev/sda1";
582+ type = types.str;
583+ description = "Absolute path of device node, file or other resource. (Mandatory)";
584+ };
585+
586+ where = mkOption {
587+ example = "/mnt";
588+ type = types.str;
589+ description = ''
590+ Absolute path of a directory of the mount point.
591+ Will be created if it doesn't exist. (Mandatory)
592+ '';
593+ };
594+
595+ type = mkOption {
596+ default = "";
597+ example = "ext4";
598+ type = types.str;
599+ description = "File system type.";
600+ };
601+
602+ options = mkOption {
603+ default = "";
604+ example = "noatime";
605+ type = types.commas;
606+ description = "Options used to mount the file system.";
607+ };
608+
609+ mountConfig = mkOption {
610+ default = {};
611+ example = { DirectoryMode = "0775"; };
612+ type = types.attrsOf unitOption;
613+ description = ''
614+ Each attribute in this set specifies an option in the
615+ <literal>[Mount]</literal> section of the unit. See
616+ <citerefentry><refentrytitle>systemd.mount</refentrytitle>
617+ <manvolnum>5</manvolnum></citerefentry> for details.
618+ '';
619+ };
450620
451− pathConfig = mkOption {
452− default = {};
453− example = { PathChanged = "/some/path"; Unit = "changedpath.service"; };
454− type = types.attrsOf unitOption;
455− description = ''
456− Each attribute in this set specifies an option in the
457− <literal>[Path]</literal> section of the unit. See
458− <citerefentry><refentrytitle>systemd.path</refentrytitle>
459− <manvolnum>5</manvolnum></citerefentry> for details.
460− '';
461621 };
462−
463622 };
464623
624+ stage2MountOptions = {
625+ imports = [
626+ stage2CommonUnitOptions
627+ mountOptions
628+ ];
629+ };
465630
466− mountOptions = commonUnitOptions // {
467−
468− what = mkOption {
469− example = "/dev/sda1";
470− type = types.str;
471− description = "Absolute path of device node, file or other resource. (Mandatory)";
472− };
631+ stage1MountOptions = {
632+ imports = [
633+ stage1CommonUnitOptions
634+ mountOptions
635+ ];
636+ };
473637
474− where = mkOption {
475− example = "/mnt";
476− type = types.str;
477− description = ''
478− Absolute path of a directory of the mount point.
479− Will be created if it doesn't exist. (Mandatory)
480− '';
481− };
638+ automountOptions = {
639+ options = {
640+
641+ where = mkOption {
642+ example = "/mnt";
643+ type = types.str;
644+ description = ''
645+ Absolute path of a directory of the mount point.
646+ Will be created if it doesn't exist. (Mandatory)
647+ '';
648+ };
649+
650+ automountConfig = mkOption {
651+ default = {};
652+ example = { DirectoryMode = "0775"; };
653+ type = types.attrsOf unitOption;
654+ description = ''
655+ Each attribute in this set specifies an option in the
656+ <literal>[Automount]</literal> section of the unit. See
657+ <citerefentry><refentrytitle>systemd.automount</refentrytitle>
658+ <manvolnum>5</manvolnum></citerefentry> for details.
659+ '';
660+ };
482661
483− type = mkOption {
484− default = "";
485− example = "ext4";
486− type = types.str;
487− description = "File system type.";
488662 };
663+ };
489664
490− options = mkOption {
491− default = "";
492− example = "noatime";
493− type = types.commas;
494− description = "Options used to mount the file system.";
495− };
665+ stage2AutomountOptions = {
666+ imports = [
667+ stage2CommonUnitOptions
668+ automountOptions
669+ ];
670+ };
496671
497− mountConfig = mkOption {
498− default = {};
499− example = { DirectoryMode = "0775"; };
500− type = types.attrsOf unitOption;
501− description = ''
502− Each attribute in this set specifies an option in the
503− <literal>[Mount]</literal> section of the unit. See
504− <citerefentry><refentrytitle>systemd.mount</refentrytitle>
505− <manvolnum>5</manvolnum></citerefentry> for details.
506− '';
507− };
672+ stage1AutomountOptions = {
673+ imports = [
674+ stage1CommonUnitOptions
675+ automountOptions
676+ ];
508677 };
509678
510− automountOptions = commonUnitOptions // {
679+ sliceOptions = {
680+ options = {
511681
512− where = mkOption {
513− example = "/mnt";
514− type = types.str;
515− description = ''
516− Absolute path of a directory of the mount point.
517− Will be created if it doesn't exist. (Mandatory)
518− '';
519− };
682+ sliceConfig = mkOption {
683+ default = {};
684+ example = { MemoryMax = "2G"; };
685+ type = types.attrsOf unitOption;
686+ description = ''
687+ Each attribute in this set specifies an option in the
688+ <literal>[Slice]</literal> section of the unit. See
689+ <citerefentry><refentrytitle>systemd.slice</refentrytitle>
690+ <manvolnum>5</manvolnum></citerefentry> for details.
691+ '';
692+ };
520693
521− automountConfig = mkOption {
522− default = {};
523− example = { DirectoryMode = "0775"; };
524− type = types.attrsOf unitOption;
525− description = ''
526− Each attribute in this set specifies an option in the
527− <literal>[Automount]</literal> section of the unit. See
528− <citerefentry><refentrytitle>systemd.automount</refentrytitle>
529− <manvolnum>5</manvolnum></citerefentry> for details.
530− '';
531694 };
532695 };
533696
534− targetOptions = commonUnitOptions;
535−
536− sliceOptions = commonUnitOptions // {
537−
538− sliceConfig = mkOption {
539− default = {};
540− example = { MemoryMax = "2G"; };
541− type = types.attrsOf unitOption;
542− description = ''
543− Each attribute in this set specifies an option in the
544− <literal>[Slice]</literal> section of the unit. See
545− <citerefentry><refentrytitle>systemd.slice</refentrytitle>
546− <manvolnum>5</manvolnum></citerefentry> for details.
547− '';
548− };
697+ stage2SliceOptions = {
698+ imports = [
699+ stage2CommonUnitOptions
700+ sliceOptions
701+ ];
702+ };
549703
704+ stage1SliceOptions = {
705+ imports = [
706+ stage1CommonUnitOptions
707+ sliceOptions
708+ ];
550709 };
551710
552711}
nixos/lib/test-driver/test_driver/driver.py+1−1
@@ -86,7 +86,7 @@ class Driver:
8686
8787 def subtest(self, name: str) -> Iterator[None]:
8888 """Group logs under a given test name"""
89− with rootlog.nested(name):
89+ with rootlog.nested("subtest: " + name):
9090 try:
9191 yield
9292 return True
nixos/lib/test-driver/test_driver/logger.py+6−2
@@ -1,4 +1,4 @@
1−from colorama import Style
1+from colorama import Style, Fore
22from contextlib import contextmanager
33from typing import Any, Dict, Iterator
44from queue import Queue, Empty
@@ -81,7 +81,11 @@ class Logger:
8181
8282 @contextmanager
8383 def nested(self, message: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
84− self._eprint(self.maybe_prefix(message, attributes))
84+ self._eprint(
85+ self.maybe_prefix(
86+ Style.BRIGHT + Fore.GREEN + message + Style.RESET_ALL, attributes
87+ )
88+ )
8589
8690 self.xml.startElement("nest", attrs={})
8791 self.xml.startElement("head", attributes)
nixos/lib/test-driver/test_driver/machine.py+9−2
@@ -526,10 +526,17 @@ class Machine:
526526 self.run_callbacks()
527527 self.connect()
528528
529+ # Always run command with shell opts
530+ command = f"set -euo pipefail; {command}"
531+
532+ timeout_str = ""
529533 if timeout is not None:
530− command = "timeout {} sh -c {}".format(timeout, shlex.quote(command))
534+ timeout_str = f"timeout {timeout}"
535+
536+ out_command = (
537+ f"{timeout_str} sh -c {shlex.quote(command)} | (base64 --wrap 0; echo)\n"
538+ )
531539
532− out_command = f"( set -euo pipefail; {command} ) | (base64 --wrap 0; echo)\n"
533540 assert self.shell
534541 self.shell.send(out_command.encode())
535542
nixos/lib/utils.nix+17
@@ -194,8 +194,25 @@ rec {
194194 (( ! $inherit_errexit_enabled )) && shopt -u inherit_errexit
195195 '';
196196
197+ /* Remove packages of packagesToRemove from packages, based on their names.
198+ Relies on package names and has quadratic complexity so use with caution!
199+
200+ Type:
201+ removePackagesByName :: [package] -> [package] -> [package]
202+
203+ Example:
204+ removePackagesByName [ nautilus file-roller ] [ file-roller totem ]
205+ => [ nautilus ]
206+ */
207+ removePackagesByName = packages: packagesToRemove:
208+ let
209+ namesToRemove = map lib.getName packagesToRemove;
210+ in
211+ lib.filter (x: !(builtins.elem (lib.getName x) namesToRemove)) packages;
212+
197213 systemdUtils = {
198214 lib = import ./systemd-lib.nix { inherit lib config pkgs; };
199215 unitOptions = import ./systemd-unit-options.nix { inherit lib systemdUtils; };
216+ types = import ./systemd-types.nix { inherit lib systemdUtils pkgs; };
200217 };
201218}
nixos/maintainers/scripts/ec2/amazon-image.nix+1−1
@@ -73,7 +73,7 @@ in {
7373 }
7474 '';
7575
76− zfsBuilder = import ../../../lib/make-zfs-image.nix {
76+ zfsBuilder = import ../../../lib/make-multi-disk-zfs-image.nix {
7777 inherit lib config configFile;
7878 inherit (cfg) contents format name;
7979 pkgs = import ../../../.. { inherit (pkgs) system; }; # ensure we use the regular qemu-kvm package
nixos/maintainers/scripts/lxd/lxd-image.nix+1−1
@@ -27,7 +27,7 @@ with lib;
2727 networking.useDHCP = false;
2828 networking.interfaces.eth0.useDHCP = true;
2929
30− # As this is intended as a stadalone image, undo some of the minimal profile stuff
30+ # As this is intended as a standalone image, undo some of the minimal profile stuff
3131 documentation.enable = true;
3232 documentation.nixos.enable = true;
3333 environment.noXlibs = false;
nixos/maintainers/scripts/openstack/openstack-image-zfs.nixnew file+101
@@ -0,0 +1,101 @@
1+# nix-build '<nixpkgs/nixos>' -A config.system.build.openstackImage --arg configuration "{ imports = [ ./nixos/maintainers/scripts/openstack/openstack-image.nix ]; }"
2+
3+{ config, lib, pkgs, ... }:
4+let
5+ inherit (lib) mkOption types;
6+ copyChannel = true;
7+ cfg = config.openstackImage;
8+ imageBootMode = if config.openstack.efi then "uefi" else "legacy-bios";
9+in
10+{
11+ imports = [
12+ ../../../modules/virtualisation/openstack-config.nix
13+ ] ++ (lib.optional copyChannel ../../../modules/installer/cd-dvd/channel.nix);
14+
15+
16+ options.openstackImage = {
17+ name = mkOption {
18+ type = types.str;
19+ description = "The name of the generated derivation";
20+ default = "nixos-openstack-image-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}";
21+ };
22+
23+ sizeMB = mkOption {
24+ type = types.int;
25+ default = 8192;
26+ description = "The size in MB of the image";
27+ };
28+
29+ format = mkOption {
30+ type = types.enum [ "raw" "qcow2" ];
31+ default = "qcow2";
32+ description = "The image format to output";
33+ };
34+ };
35+
36+ config = {
37+ documentation.enable = copyChannel;
38+ openstack = {
39+ efi = true;
40+ zfs = {
41+ enable = true;
42+ datasets = {
43+ "tank/system/root".mount = "/";
44+ "tank/system/var".mount = "/var";
45+ "tank/local/nix".mount = "/nix";
46+ "tank/user/home".mount = "/home";
47+ };
48+ };
49+ };
50+
51+ system.build.openstackImage = import ../../../lib/make-single-disk-zfs-image.nix {
52+ inherit lib config;
53+ inherit (cfg) contents format name;
54+ pkgs = import ../../../.. { inherit (pkgs) system; }; # ensure we use the regular qemu-kvm package
55+
56+ configFile = pkgs.writeText "configuration.nix"
57+ ''
58+ { modulesPath, ... }: {
59+ imports = [ "''${modulesPath}/virtualisation/openstack-config.nix" ];
60+ openstack.zfs.enable = true;
61+ }
62+ '';
63+
64+ includeChannel = copyChannel;
65+
66+ bootSize = 1000;
67+
68+ rootSize = cfg.sizeMB;
69+ rootPoolProperties = {
70+ ashift = 12;
71+ autoexpand = "on";
72+ };
73+
74+ datasets = config.openstack.zfs.datasets;
75+
76+ postVM = ''
77+ extension=''${rootDiskImage##*.}
78+ friendlyName=$out/${cfg.name}
79+ rootDisk="$friendlyName.root.$extension"
80+ mv "$rootDiskImage" "$rootDisk"
81+
82+ mkdir -p $out/nix-support
83+ echo "file ${cfg.format} $rootDisk" >> $out/nix-support/hydra-build-products
84+
85+ ${pkgs.jq}/bin/jq -n \
86+ --arg system_label ${lib.escapeShellArg config.system.nixos.label} \
87+ --arg system ${lib.escapeShellArg pkgs.stdenv.hostPlatform.system} \
88+ --arg root_logical_bytes "$(${pkgs.qemu}/bin/qemu-img info --output json "$rootDisk" | ${pkgs.jq}/bin/jq '."virtual-size"')" \
89+ --arg boot_mode "${imageBootMode}" \
90+ --arg root "$rootDisk" \
91+ '{}
92+ | .label = $system_label
93+ | .boot_mode = $boot_mode
94+ | .system = $system
95+ | .disks.root.logical_bytes = $root_logical_bytes
96+ | .disks.root.file = $root
97+ ' > $out/nix-support/image-info.json
98+ '';
99+ };
100+ };
101+}
nixos/maintainers/scripts/openstack/openstack-image.nix+9−8
@@ -1,17 +1,18 @@
11# nix-build '<nixpkgs/nixos>' -A config.system.build.openstackImage --arg configuration "{ imports = [ ./nixos/maintainers/scripts/openstack/openstack-image.nix ]; }"
22
33{ config, lib, pkgs, ... }:
4−
5−with lib;
6−
4+let
5+ copyChannel = true;
6+in
77{
8− imports =
9− [ ../../../modules/installer/cd-dvd/channel.nix
10− ../../../modules/virtualisation/openstack-config.nix
11− ];
8+ imports = [
9+ ../../../modules/virtualisation/openstack-config.nix
10+ ] ++ (lib.optional copyChannel ../../../modules/installer/cd-dvd/channel.nix);
11+
12+ documentation.enable = copyChannel;
1213
1314 system.build.openstackImage = import ../../../lib/make-disk-image.nix {
14− inherit lib config;
15+ inherit lib config copyChannel;
1516 additionalSpace = "1024M";
1617 pkgs = import ../../../.. { inherit (pkgs) system; }; # ensure we use the regular qemu-kvm package
1718 format = "qcow2";
nixos/modules/config/console.nix+23−9
@@ -12,7 +12,7 @@ let
1212
1313 optimizedKeymap = pkgs.runCommand "keymap" {
1414 nativeBuildInputs = [ pkgs.buildPackages.kbd ];
15− LOADKEYS_KEYMAP_PATH = "${consoleEnv}/share/keymaps/**";
15+ LOADKEYS_KEYMAP_PATH = "${consoleEnv pkgs.kbd}/share/keymaps/**";
1616 preferLocalBuild = true;
1717 } ''
1818 loadkeys -b ${optionalString isUnicode "-u"} "${cfg.keyMap}" > $out
@@ -24,9 +24,9 @@ let
2424 FONT=${cfg.font}
2525 '';
2626
27− consoleEnv = pkgs.buildEnv {
27+ consoleEnv = kbd: pkgs.buildEnv {
2828 name = "console-env";
29− paths = [ pkgs.kbd ] ++ cfg.packages;
29+ paths = [ kbd ] ++ cfg.packages;
3030 pathsToLink = [
3131 "/share/consolefonts"
3232 "/share/consoletrans"
@@ -136,9 +136,9 @@ in
136136 # virtual consoles.
137137 environment.etc."vconsole.conf".source = vconsoleConf;
138138 # Provide kbd with additional packages.
139− environment.etc.kbd.source = "${consoleEnv}/share";
139+ environment.etc.kbd.source = "${consoleEnv pkgs.kbd}/share";
140140
141− boot.initrd.preLVMCommands = mkBefore ''
141+ boot.initrd.preLVMCommands = mkIf (!config.boot.initrd.systemd.enable) (mkBefore ''
142142 kbd_mode ${if isUnicode then "-u" else "-a"} -C /dev/console
143143 printf "\033%%${if isUnicode then "G" else "@"}" >> /dev/console
144144 loadkmap < ${optimizedKeymap}
@@ -146,12 +146,26 @@ in
146146 ${optionalString cfg.earlySetup ''
147147 setfont -C /dev/console $extraUtils/share/consolefonts/font.psf
148148 ''}
149− '';
149+ '');
150+
151+ boot.initrd.systemd.contents = {
152+ "/etc/vconsole.conf".source = vconsoleConf;
153+ # Add everything if we want full console setup...
154+ "/etc/kbd" = lib.mkIf cfg.earlySetup { source = "${consoleEnv config.boot.initrd.systemd.package.kbd}/share"; };
155+ # ...but only the keymaps if we don't
156+ "/etc/kbd/keymaps" = lib.mkIf (!cfg.earlySetup) { source = "${consoleEnv config.boot.initrd.systemd.package.kbd}/share/keymaps"; };
157+ };
158+ boot.initrd.systemd.storePaths = [
159+ "${config.boot.initrd.systemd.package}/lib/systemd/systemd-vconsole-setup"
160+ "${config.boot.initrd.systemd.package.kbd}/bin/setfont"
161+ "${config.boot.initrd.systemd.package.kbd}/bin/loadkeys"
162+ "${config.boot.initrd.systemd.package.kbd.gzip}/bin/gzip" # keyboard layouts are compressed
163+ ];
150164
151165 systemd.services.reload-systemd-vconsole-setup =
152166 { description = "Reset console on configuration changes";
153167 wantedBy = [ "multi-user.target" ];
154− restartTriggers = [ vconsoleConf consoleEnv ];
168+ restartTriggers = [ vconsoleConf (consoleEnv pkgs.kbd) ];
155169 reloadIfChanged = true;
156170 serviceConfig =
157171 { RemainAfterExit = true;
@@ -169,13 +183,13 @@ in
169183 ];
170184 })
171185
172− (mkIf cfg.earlySetup {
186+ (mkIf (cfg.earlySetup && !config.boot.initrd.systemd.enable) {
173187 boot.initrd.extraUtilsCommands = ''
174188 mkdir -p $out/share/consolefonts
175189 ${if substring 0 1 cfg.font == "/" then ''
176190 font="${cfg.font}"
177191 '' else ''
178− font="$(echo ${consoleEnv}/share/consolefonts/${cfg.font}.*)"
192+ font="$(echo ${consoleEnv pkgs.kbd}/share/consolefonts/${cfg.font}.*)"
179193 ''}
180194 if [[ $font == *.gz ]]; then
181195 gzip -cd $font > $out/share/consolefonts/font.psf
nixos/modules/config/nsswitch.nix+7−4
@@ -95,11 +95,14 @@ with lib;
9595 config = {
9696 assertions = [
9797 {
98− # Prevent users from disabling nscd, with nssModules being set.
99− # If disabling nscd is really necessary, it's still possible to opt out
100− # by forcing config.system.nssModules to [].
10198 assertion = config.system.nssModules.path != "" -> config.services.nscd.enable;
102− message = "Loading NSS modules from system.nssModules (${config.system.nssModules.path}), requires services.nscd.enable being set to true.";
99+ message = ''
100+ Loading NSS modules from system.nssModules (${config.system.nssModules.path}),
101+ requires services.nscd.enable being set to true.
102+
103+ If disabling nscd is really necessary, it is possible to disable loading NSS modules
104+ by setting `system.nssModules = lib.mkForce [];` in your configuration.nix.
105+ '';
103106 }
104107 ];
105108
nixos/modules/config/terminfo.nix+25−1
@@ -1,9 +1,33 @@
11# This module manages the terminfo database
22# and its integration in the system.
3−{ config, ... }:
3+{ config, lib, pkgs, ... }:
4+
5+with lib;
6+
47{
8+
9+ options.environment.enableAllTerminfo = with lib; mkOption {
10+ default = false;
11+ type = types.bool;
12+ description = ''
13+ Whether to install all terminfo outputs
14+ '';
15+ };
16+
517 config = {
618
19+ # can be generated with: filter (drv: (builtins.tryEval (drv ? terminfo)).value) (attrValues pkgs)
20+ environment.systemPackages = mkIf config.environment.enableAllTerminfo (map (x: x.terminfo) (with pkgs; [
21+ alacritty
22+ foot
23+ kitty
24+ mtm
25+ rxvt-unicode-unwrapped
26+ rxvt-unicode-unwrapped-emoji
27+ termite
28+ wezterm
29+ ]));
30+
731 environment.pathsToLink = [
832 "/share/terminfo"
933 ];
nixos/modules/hardware/all-firmware.nix+7−3
@@ -27,7 +27,8 @@ in {
2727 };
2828
2929 hardware.enableRedistributableFirmware = mkOption {
30− default = false;
30+ default = config.hardware.enableAllFirmware;
31+ defaultText = lib.literalExpression "config.hardware.enableAllFirmware";
3132 type = types.bool;
3233 description = ''
3334 Turn on this option if you want to enable all the firmware with a license allowing redistribution.
@@ -71,7 +72,7 @@ in {
7172 })
7273 (mkIf cfg.enableAllFirmware {
7374 assertions = [{
74− assertion = !cfg.enableAllFirmware || (config.nixpkgs.config.allowUnfree or false);
75+ assertion = !cfg.enableAllFirmware || config.nixpkgs.config.allowUnfree;
7576 message = ''
7677 the list of hardware.enableAllFirmware contains non-redistributable licensed firmware files.
7778 This requires nixpkgs.config.allowUnfree to be true.
@@ -84,7 +85,10 @@ in {
8485 b43Firmware_6_30_163_46
8586 b43FirmwareCutter
8687 xow_dongle-firmware
87− ] ++ optional pkgs.stdenv.hostPlatform.isx86 facetimehd-firmware;
88+ ] ++ optionals pkgs.stdenv.hostPlatform.isx86 [
89+ facetimehd-calibration
90+ facetimehd-firmware
91+ ];
8892 })
8993 (mkIf cfg.wirelessRegulatoryDatabase {
9094 hardware.firmware = [ pkgs.wireless-regdb ];
nixos/modules/hardware/raid/hpsa.nix+4−1
@@ -8,7 +8,10 @@ let
88 version = "2.40-13.0";
99
1010 src = pkgs.fetchurl {
11− url = "https://downloads.linux.hpe.com/SDR/downloads/MCP/Ubuntu/pool/non-free/${pname}-${version}_amd64.deb";
11+ urls = [
12+ "https://downloads.linux.hpe.com/SDR/downloads/MCP/Ubuntu/pool/non-free/${pname}-${version}_amd64.deb"
13+ "http://apt.netangels.net/pool/main/h/hpssacli/${pname}-${version}_amd64.deb"
14+ ];
1215 sha256 = "11w7fwk93lmfw0yya4jpjwdmgjimqxx6412sqa166g1pz4jil4sw";
1316 };
1417
nixos/modules/hardware/video/amdgpu-pro.nix+2−1
@@ -51,9 +51,10 @@ in
5151 (isYes "KALLSYMS_ALL")
5252 ];
5353
54− boot.initrd.extraUdevRulesCommands = ''
54+ boot.initrd.extraUdevRulesCommands = mkIf (!config.boot.initrd.systemd.enable) ''
5555 cp -v ${package}/etc/udev/rules.d/*.rules $out/
5656 '';
57+ boot.initrd.services.udev.packages = [ package ];
5758
5859 environment.systemPackages =
5960 [ package.vulkan ] ++
nixos/modules/hardware/video/nvidia.nix+9−7
@@ -24,6 +24,7 @@ let
2424 primeEnabled = syncCfg.enable || offloadCfg.enable;
2525 nvidiaPersistencedEnabled = cfg.nvidiaPersistenced;
2626 nvidiaSettings = cfg.nvidiaSettings;
27+ busIDType = types.strMatching "([[:print:]]+\:[0-9]{1,3}\:[0-9]{1,2}\:[0-9])?";
2728in
2829
2930{
@@ -68,7 +69,7 @@ in
6869 };
6970
7071 hardware.nvidia.prime.nvidiaBusId = mkOption {
71− type = types.str;
72+ type = busIDType;
7273 default = "";
7374 example = "PCI:1:0:0";
7475 description = ''
@@ -78,7 +79,7 @@ in
7879 };
7980
8081 hardware.nvidia.prime.intelBusId = mkOption {
81− type = types.str;
82+ type = busIDType;
8283 default = "";
8384 example = "PCI:0:2:0";
8485 description = ''
@@ -88,7 +89,7 @@ in
8889 };
8990
9091 hardware.nvidia.prime.amdgpuBusId = mkOption {
91− type = types.str;
92+ type = busIDType;
9293 default = "";
9394 example = "PCI:4:0:0";
9495 description = ''
@@ -360,11 +361,12 @@ in
360361 services.udev.extraRules =
361362 ''
362363 # Create /dev/nvidia-uvm when the nvidia-uvm module is loaded.
363− KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidiactl c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) 255'"
364− KERNEL=="nvidia_modeset", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-modeset c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) 254'"
365− KERNEL=="card*", SUBSYSTEM=="drm", DRIVERS=="nvidia", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia%n c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) %n'"
364+ KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidiactl c 195 255'"
365+ KERNEL=="nvidia_modeset", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-modeset c 195 254'"
366+ KERNEL=="card*", SUBSYSTEM=="drm", DRIVERS=="nvidia", PROGRAM="${pkgs.gnugrep}/bin/grep 'Device Minor:' /proc/driver/nvidia/gpus/%b/information", \
367+ RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia%c{3} c 195 %c{3}"
366368 KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'"
367− KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm-tools c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'"
369+ KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm-tools c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 1'"
368370 '' + optionalString cfg.powerManagement.finegrained ''
369371 # Remove NVIDIA USB xHCI Host Controller devices, if present
370372 ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{remove}="1"
nixos/modules/hardware/video/webcam/facetimehd.nix+14−6
@@ -14,12 +14,19 @@ in
1414
1515 options.hardware.facetimehd.enable = mkEnableOption "facetimehd kernel module";
1616
17− config = mkIf cfg.enable {
17+ options.hardware.facetimehd.withCalibration = mkOption {
18+ default = false;
19+ example = true;
20+ type = types.bool;
21+ description = ''
22+ Whether to include sensor calibration files for facetimehd.
23+ This makes colors look much better but is experimental, see
24+ <link xlink:href="https://github.com/patjak/facetimehd/wiki/Extracting-the-sensor-calibration-files"/>
25+ for details.
26+ '';
27+ };
1828
19− assertions = singleton {
20− assertion = versionAtLeast kernelPackages.kernel.version "3.19";
21− message = "facetimehd is not supported for kernels older than 3.19";
22− };
29+ config = mkIf cfg.enable {
2330
2431 boot.kernelModules = [ "facetimehd" ];
2532
@@ -27,7 +34,8 @@ in
2734
2835 boot.extraModulePackages = [ kernelPackages.facetimehd ];
2936
30− hardware.firmware = [ pkgs.facetimehd-firmware ];
37+ hardware.firmware = [ pkgs.facetimehd-firmware ]
38+ ++ optional cfg.withCalibration pkgs.facetimehd-calibration;
3139
3240 # unload module during suspend/hibernate as it crashes the whole system
3341 powerManagement.powerDownCommands = ''
nixos/modules/i18n/input-method/fcitx5.nix+20−11
@@ -5,7 +5,9 @@ with lib;
55let
66 im = config.i18n.inputMethod;
77 cfg = im.fcitx5;
8− fcitx5Package = pkgs.fcitx5-with-addons.override { inherit (cfg) addons; };
8+ addons = cfg.addons ++ optional cfg.enableRimeData pkgs.rime-data;
9+ fcitx5Package = pkgs.fcitx5-with-addons.override { inherit addons; };
10+ whetherRimeDataDir = any (p: p.pname == "fcitx5-rime") cfg.addons;
911in {
1012 options = {
1113 i18n.inputMethod.fcitx5 = {
@@ -17,22 +19,29 @@ in {
1719 Enabled Fcitx5 addons.
1820 '';
1921 };
22+
23+ enableRimeData = mkEnableOption "default rime-data with fcitx5-rime";
2024 };
2125 };
2226
2327 config = mkIf (im.enabled == "fcitx5") {
2428 i18n.inputMethod.package = fcitx5Package;
2529
26− environment.variables = {
27− GTK_IM_MODULE = "fcitx";
28− QT_IM_MODULE = "fcitx";
29− XMODIFIERS = "@im=fcitx";
30− };
30+ environment = mkMerge [{
31+ variables = {
32+ GTK_IM_MODULE = "fcitx";
33+ QT_IM_MODULE = "fcitx";
34+ XMODIFIERS = "@im=fcitx";
35+ };
36+ }
37+ (mkIf whetherRimeDataDir {
38+ pathsToLink = [
39+ "/share/rime-data"
40+ ];
3141
32− systemd.user.services.fcitx5-daemon = {
33− enable = true;
34− script = "${fcitx5Package}/bin/fcitx5";
35− wantedBy = [ "graphical-session.target" ];
36− };
42+ variables = {
43+ NIX_RIME_DATA_DIR = "/run/current-system/sw/share/rime-data";
44+ };
45+ })];
3746 };
3847}
nixos/modules/installer/cd-dvd/channel.nix+2−1
@@ -39,7 +39,8 @@ in
3939 echo "unpacking the NixOS/Nixpkgs sources..."
4040 mkdir -p /nix/var/nix/profiles/per-user/root
4141 ${config.nix.package.out}/bin/nix-env -p /nix/var/nix/profiles/per-user/root/channels \
42− -i ${channelSources} --quiet --option build-use-substitutes false
42+ -i ${channelSources} --quiet --option build-use-substitutes false \
43+ ${optionalString config.boot.initrd.systemd.enable "--option sandbox false"} # There's an issue with pivot_root
4344 mkdir -m 0700 -p /root/.nix-defexpr
4445 ln -s /nix/var/nix/profiles/per-user/root/channels /root/.nix-defexpr/channels
4546 mkdir -m 0755 -p /var/lib/nixos
nixos/modules/installer/cd-dvd/installation-cd-graphical-base.nix+14−8
@@ -35,22 +35,28 @@ with lib;
3535 # Enable sound in graphical iso's.
3636 hardware.pulseaudio.enable = true;
3737
38− environment.systemPackages = [
38+ # Spice guest additions
39+ services.spice-vdagentd.enable = true;
40+
41+ # Enable plymouth
42+ boot.plymouth.enable = true;
43+
44+ environment.defaultPackages = with pkgs; [
3945 # Include gparted for partitioning disks.
40− pkgs.gparted
46+ gparted
4147
4248 # Include some editors.
43− pkgs.vim
44− pkgs.bvi # binary editor
45− pkgs.joe
49+ vim
50+ nano
4651
4752 # Include some version control tools.
48− pkgs.git
53+ git
54+ rsync
4955
5056 # Firefox for reading the manual.
51− pkgs.firefox
57+ firefox
5258
53− pkgs.glxinfo
59+ glxinfo
5460 ];
5561
5662}
nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-gnome.nixnew file+59
@@ -0,0 +1,59 @@
1+# This module defines a NixOS installation CD that contains GNOME.
2+
3+{ pkgs, ... }:
4+
5+{
6+ imports = [ ./installation-cd-graphical-calamares.nix ];
7+
8+ isoImage.edition = "gnome";
9+
10+ services.xserver.desktopManager.gnome = {
11+ # Add Firefox and other tools useful for installation to the launcher
12+ favoriteAppsOverride = ''
13+ [org.gnome.shell]
14+ favorite-apps=[ 'firefox.desktop', 'nixos-manual.desktop', 'org.gnome.Console.desktop', 'org.gnome.Nautilus.desktop', 'gparted.desktop', 'io.calamares.calamares.desktop' ]
15+ '';
16+
17+ # Override GNOME defaults to disable GNOME tour and disable suspend
18+ extraGSettingsOverrides = ''
19+ [org.gnome.shell]
20+ welcome-dialog-last-shown-version='9999999999'
21+
22+ [org.gnome.settings-daemon.plugins.power]
23+ sleep-inactive-ac-type='nothing'
24+ sleep-inactive-battery-type='nothing'
25+ '';
26+
27+ extraGSettingsOverridePackages = [ pkgs.gnome.gnome-settings-daemon ];
28+
29+ enable = true;
30+ };
31+
32+ # Theme calamares with GNOME theme
33+ qt5 = {
34+ enable = true;
35+ platformTheme = "gnome";
36+ };
37+
38+ # Fix scaling for calamares on wayland
39+ environment.variables = {
40+ QT_QPA_PLATFORM = "$([[ $XDG_SESSION_TYPE = \"wayland\" ]] && echo \"wayland\")";
41+ };
42+
43+ services.xserver.displayManager = {
44+ gdm = {
45+ enable = true;
46+ # autoSuspend makes the machine automatically suspend after inactivity.
47+ # It's possible someone could/try to ssh'd into the machine and obviously
48+ # have issues because it's inactive.
49+ # See:
50+ # * https://github.com/NixOS/nixpkgs/pull/63790
51+ # * https://gitlab.gnome.org/GNOME/gnome-control-center/issues/22
52+ autoSuspend = false;
53+ };
54+ autoLogin = {
55+ enable = true;
56+ user = "nixos";
57+ };
58+ };
59+}
nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-plasma5.nixnew file+49
@@ -0,0 +1,49 @@
1+# This module defines a NixOS installation CD that contains X11 and
2+# Plasma 5.
3+
4+{ pkgs, ... }:
5+
6+{
7+ imports = [ ./installation-cd-graphical-calamares.nix ];
8+
9+ isoImage.edition = "plasma5";
10+
11+ services.xserver = {
12+ desktopManager.plasma5 = {
13+ enable = true;
14+ };
15+
16+ # Automatically login as nixos.
17+ displayManager = {
18+ sddm.enable = true;
19+ autoLogin = {
20+ enable = true;
21+ user = "nixos";
22+ };
23+ };
24+ };
25+
26+ environment.systemPackages = with pkgs; [
27+ # Graphical text editor
28+ kate
29+ ];
30+
31+ system.activationScripts.installerDesktop = let
32+
33+ # Comes from documentation.nix when xserver and nixos.enable are true.
34+ manualDesktopFile = "/run/current-system/sw/share/applications/nixos-manual.desktop";
35+
36+ homeDir = "/home/nixos/";
37+ desktopDir = homeDir + "Desktop/";
38+
39+ in ''
40+ mkdir -p ${desktopDir}
41+ chown nixos ${homeDir} ${desktopDir}
42+
43+ ln -sfT ${manualDesktopFile} ${desktopDir + "nixos-manual.desktop"}
44+ ln -sfT ${pkgs.gparted}/share/applications/gparted.desktop ${desktopDir + "gparted.desktop"}
45+ ln -sfT ${pkgs.konsole}/share/applications/org.kde.konsole.desktop ${desktopDir + "org.kde.konsole.desktop"}
46+ ln -sfT ${pkgs.calamares-nixos}/share/applications/io.calamares.calamares.desktop ${desktopDir + "io.calamares.calamares.desktop"}
47+ '';
48+
49+}
nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares.nixnew file+20
@@ -0,0 +1,20 @@
1+# This module adds the calamares installer to the basic graphical NixOS
2+# installation CD.
3+
4+{ pkgs, ... }:
5+let
6+ calamares-nixos-autostart = pkgs.makeAutostartItem { name = "io.calamares.calamares"; package = pkgs.calamares-nixos; };
7+in
8+{
9+ imports = [ ./installation-cd-graphical-base.nix ];
10+
11+ environment.systemPackages = with pkgs; [
12+ # Calamares for graphical installation
13+ libsForQt5.kpmcore
14+ calamares-nixos
15+ calamares-nixos-autostart
16+ calamares-nixos-extensions
17+ # Needed for calamares QML module packagechooserq
18+ libsForQt5.full
19+ ];
20+}
nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix+1−3
@@ -1,8 +1,6 @@
11# This module defines a NixOS installation CD that contains GNOME.
22
3−{ lib, ... }:
4−
5−with lib;
3+{ ... }:
64
75{
86 imports = [ ./installation-cd-graphical-base.nix ];
nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix+1−3
@@ -1,9 +1,7 @@
11# This module defines a NixOS installation CD that contains X11 and
22# Plasma 5.
33
4−{ config, lib, pkgs, ... }:
5−
6−with lib;
4+{ pkgs, ... }:
75
86{
97 imports = [ ./installation-cd-graphical-base.nix ];
nixos/modules/installer/cd-dvd/system-tarball-sheevaplug.nix+3−3
@@ -87,19 +87,19 @@ in
8787 boot.initrd.availableKernelModules =
8888 [ "mvsdio" "reiserfs" "ext3" "ums-cypress" "rtc_mv" "ext4" ];
8989
90− boot.postBootCommands =
90+ boot.postBootCommands = lib.mkIf (!boot.initrd.systemd.enable)
9191 ''
9292 mkdir -p /mnt
9393
9494 cp ${dummyConfiguration} /etc/nixos/configuration.nix
9595 '';
9696
97− boot.initrd.extraUtilsCommands =
97+ boot.initrd.extraUtilsCommands = lib.mkIf (!boot.initrd.systemd.enable)
9898 ''
9999 copy_bin_and_libs ${pkgs.util-linux}/sbin/hwclock
100100 '';
101101
102− boot.initrd.postDeviceCommands =
102+ boot.initrd.postDeviceCommands = lib.mkIf (!boot.initrd.systemd.enable)
103103 ''
104104 hwclock -s
105105 '';
nixos/modules/installer/kexec/kexec-boot.nixnew file+51
@@ -0,0 +1,51 @@
1+# This module exposes a config.system.build.kexecBoot attribute,
2+# which returns a directory with kernel, initrd and a shell script
3+# running the necessary kexec commands.
4+
5+# It's meant to be scp'ed to a machine with working ssh and kexec binary
6+# installed.
7+
8+# This is useful for (cloud) providers where you can't boot a custom image, but
9+# get some Debian or Ubuntu installation.
10+
11+{ pkgs
12+, modulesPath
13+, config
14+, ...
15+}:
16+{
17+ imports = [
18+ (modulesPath + "/installer/netboot/netboot-minimal.nix")
19+ ];
20+
21+ config = {
22+ system.build.kexecBoot =
23+ let
24+ kexecScript = pkgs.writeScript "kexec-boot" ''
25+ #!/usr/bin/env bash
26+ if ! kexec -v >/dev/null 2>&1; then
27+ echo "kexec not found: please install kexec-tools" 2>&1
28+ exit 1
29+ fi
30+ SCRIPT_DIR=$( cd -- "$( dirname -- "''${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
31+ kexec --load ''${SCRIPT_DIR}/bzImage \
32+ --initrd=''${SCRIPT_DIR}/initrd.gz \
33+ --command-line "init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams}"
34+ kexec -e
35+ ''; in
36+ pkgs.linkFarm "kexec-tree" [
37+ {
38+ name = "initrd.gz";
39+ path = "${config.system.build.netbootRamdisk}/initrd";
40+ }
41+ {
42+ name = "bzImage";
43+ path = "${config.system.build.kernel}/${config.system.boot.loader.kernelFile}";
44+ }
45+ {
46+ name = "kexec-boot";
47+ path = kexecScript;
48+ }
49+ ];
50+ };
51+}
nixos/modules/installer/sd-card/sd-image-aarch64.nix+9
@@ -39,6 +39,12 @@
3939 # Supported in newer board revisions
4040 arm_boost=1
4141
42+ [cm4]
43+ # Enable host mode on the 2711 built-in XHCI USB controller.
44+ # This line should be removed if the legacy DWC2 controller is required
45+ # (e.g. for USB device mode) or if USB support is not required.
46+ otg_mode=1
47+
4248 [all]
4349 # Boot in 64-bit mode.
4450 arm_64bit=1
@@ -65,6 +71,9 @@
6571 cp ${pkgs.ubootRaspberryPi4_64bit}/u-boot.bin firmware/u-boot-rpi4.bin
6672 cp ${pkgs.raspberrypi-armstubs}/armstub8-gic.bin firmware/armstub8-gic.bin
6773 cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-4-b.dtb firmware/
74+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-400.dtb firmware/
75+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-cm4.dtb firmware/
76+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-cm4s.dtb firmware/
6877 '';
6978 populateRootCommands = ''
7079 mkdir -p ./files/boot
nixos/modules/installer/tools/nix-fallback-paths.nix+5−5
@@ -1,7 +1,7 @@
11{
2− x86_64-linux = "/nix/store/0n2wfvi1i3fg97cjc54wslvk0804y0sn-nix-2.7.0";
3− i686-linux = "/nix/store/4p27c1k9z99pli6x8cxfph20yfyzn9nh-nix-2.7.0";
4− aarch64-linux = "/nix/store/r9yr8ijsb0gi9r7y92y3yzyld59yp0kj-nix-2.7.0";
5− x86_64-darwin = "/nix/store/hyfj5imsd0c4amlcjpf8l6w4q2draaj3-nix-2.7.0";
6− aarch64-darwin = "/nix/store/9l96qllhbb6xrsjaai76dn74ap7rq92n-nix-2.7.0";
2+ x86_64-linux = "/nix/store/yx36yzxpw1hn4fz8iyf1rfyd56jg3yf4-nix-2.8.0";
3+ i686-linux = "/nix/store/c0hg806zvwg800qbszzj8ff4a224kjgf-nix-2.8.0";
4+ aarch64-linux = "/nix/store/wic2832ll53q392r2wks4xr2nrk7p8p5-nix-2.8.0";
5+ x86_64-darwin = "/nix/store/5yqdvnkmkrhl36xh0qy31pymdphjimdd-nix-2.8.0";
6+ aarch64-darwin = "/nix/store/izc9592szrnpv8n86hr88bhpyc9g6b4s-nix-2.8.0";
77}
nixos/modules/installer/tools/tools.nix+5
@@ -206,6 +206,11 @@ in
206206 # Or disable the firewall altogether.
207207 # networking.firewall.enable = false;
208208
209+ # Copy the NixOS configuration file and link it from the resulting system
210+ # (/run/current-system/configuration.nix). This is useful in case you
211+ # accidentally delete configuration.nix.
212+ # system.copySystemConfiguration = true;
213+
209214 # This value determines the NixOS release from which the default
210215 # settings for stateful data, like file locations and database versions
211216 # on your system were taken. It‘s perfectly fine and recommended to leave
nixos/modules/misc/documentation.nix+2−1
@@ -64,7 +64,8 @@ let
6464 filter =
6565 builtins.filterSource
6666 (n: t:
67− (t == "directory" -> baseNameOf n != "tests")
67+ cleanSourceFilter n t
68+ && (t == "directory" -> baseNameOf n != "tests")
6869 && (t == "file" -> hasSuffix ".nix" n)
6970 );
7071 in
nixos/modules/misc/locate.nix+1−1
@@ -27,7 +27,7 @@ in
2727
2828 locate = mkOption {
2929 type = package;
30− default = pkgs.findutils;
30+ default = pkgs.findutils.locate;
3131 defaultText = literalExpression "pkgs.findutils";
3232 example = literalExpression "pkgs.mlocate";
3333 description = ''
nixos/modules/misc/version.nix+26−14
@@ -15,6 +15,26 @@ let
1515 mapAttrsToList (n: v: ''${n}=${escapeIfNeccessary (toString v)}'') attrs
1616 );
1717
18+ osReleaseContents = {
19+ NAME = "NixOS";
20+ ID = "nixos";
21+ VERSION = "${cfg.release} (${cfg.codeName})";
22+ VERSION_CODENAME = toLower cfg.codeName;
23+ VERSION_ID = cfg.release;
24+ BUILD_ID = cfg.version;
25+ PRETTY_NAME = "NixOS ${cfg.release} (${cfg.codeName})";
26+ LOGO = "nix-snowflake";
27+ HOME_URL = "https://nixos.org/";
28+ DOCUMENTATION_URL = "https://nixos.org/learn.html";
29+ SUPPORT_URL = "https://nixos.org/community.html";
30+ BUG_REPORT_URL = "https://github.com/NixOS/nixpkgs/issues";
31+ };
32+
33+ initrdReleaseContents = osReleaseContents // {
34+ PRETTY_NAME = "${osReleaseContents.PRETTY_NAME} (Initrd)";
35+ };
36+ initrdRelease = pkgs.writeText "initrd-release" (attrsToText initrdReleaseContents);
37+
1838in
1939{
2040 imports = [
@@ -119,20 +139,12 @@ in
119139 DISTRIB_DESCRIPTION = "NixOS ${cfg.release} (${cfg.codeName})";
120140 };
121141
122− "os-release".text = attrsToText {
123− NAME = "NixOS";
124− ID = "nixos";
125− VERSION = "${cfg.release} (${cfg.codeName})";
126− VERSION_CODENAME = toLower cfg.codeName;
127− VERSION_ID = cfg.release;
128− BUILD_ID = cfg.version;
129− PRETTY_NAME = "NixOS ${cfg.release} (${cfg.codeName})";
130− LOGO = "nix-snowflake";
131− HOME_URL = "https://nixos.org/";
132− DOCUMENTATION_URL = "https://nixos.org/learn.html";
133− SUPPORT_URL = "https://nixos.org/community.html";
134− BUG_REPORT_URL = "https://github.com/NixOS/nixpkgs/issues";
135− };
142+ "os-release".text = attrsToText osReleaseContents;
143+ };
144+
145+ boot.initrd.systemd.contents = {
146+ "/etc/os-release".source = initrdRelease;
147+ "/etc/initrd-release".source = initrdRelease;
136148 };
137149 };
138150
nixos/modules/module-list.nix+18−3
@@ -172,6 +172,7 @@
172172 ./programs/java.nix
173173 ./programs/k40-whisperer.nix
174174 ./programs/kclock.nix
175+ ./programs/k3b.nix
175176 ./programs/kdeconnect.nix
176177 ./programs/kbdlight.nix
177178 ./programs/less.nix
@@ -185,6 +186,7 @@
185186 ./programs/nbd.nix
186187 ./programs/nix-ld.nix
187188 ./programs/neovim.nix
189+ ./programs/nethoscope.nix
188190 ./programs/nm-applet.nix
189191 ./programs/nncp.nix
190192 ./programs/npm.nix
@@ -204,7 +206,6 @@
204206 ./programs/spacefm.nix
205207 ./programs/singularity.nix
206208 ./programs/ssh.nix
207− ./programs/ssmtp.nix
208209 ./programs/sysdig.nix
209210 ./programs/systemtap.nix
210211 ./programs/starship.nix
@@ -409,6 +410,7 @@
409410 ./services/display-managers/greetd.nix
410411 ./services/editors/emacs.nix
411412 ./services/editors/infinoted.nix
413+ ./services/editors/haste.nix
412414 ./services/finance/odoo.nix
413415 ./services/games/asf.nix
414416 ./services/games/crossfire-server.nix
@@ -458,6 +460,7 @@
458460 ./services/hardware/udisks2.nix
459461 ./services/hardware/upower.nix
460462 ./services/hardware/usbmuxd.nix
463+ ./services/hardware/usbrelayd.nix
461464 ./services/hardware/thermald.nix
462465 ./services/hardware/undervolt.nix
463466 ./services/hardware/vdr.nix
@@ -596,7 +599,7 @@
596599 ./services/misc/osrm.nix
597600 ./services/misc/owncast.nix
598601 ./services/misc/packagekit.nix
599− ./services/misc/paperless-ng.nix
602+ ./services/misc/paperless.nix
600603 ./services/misc/parsoid.nix
601604 ./services/misc/plex.nix
602605 ./services/misc/plikd.nix
@@ -660,6 +663,7 @@
660663 ./services/monitoring/longview.nix
661664 ./services/monitoring/mackerel-agent.nix
662665 ./services/monitoring/metricbeat.nix
666+ ./services/monitoring/mimir.nix
663667 ./services/monitoring/monit.nix
664668 ./services/monitoring/munin.nix
665669 ./services/monitoring/nagios.nix
@@ -733,12 +737,14 @@
733737 ./services/networking/blocky.nix
734738 ./services/networking/charybdis.nix
735739 ./services/networking/cjdns.nix
740+ ./services/networking/cloudflare-dyndns.nix
736741 ./services/networking/cntlm.nix
737742 ./services/networking/connman.nix
738743 ./services/networking/consul.nix
739744 ./services/networking/coredns.nix
740745 ./services/networking/corerad.nix
741746 ./services/networking/coturn.nix
747+ ./services/networking/create_ap.nix
742748 ./services/networking/croc.nix
743749 ./services/networking/dante.nix
744750 ./services/networking/ddclient.nix
@@ -753,6 +759,7 @@
753759 ./services/networking/ncdns.nix
754760 ./services/networking/nomad.nix
755761 ./services/networking/ejabberd.nix
762+ ./services/networking/envoy.nix
756763 ./services/networking/epmd.nix
757764 ./services/networking/ergo.nix
758765 ./services/networking/ergochat.nix
@@ -815,6 +822,7 @@
815822 ./services/networking/mosquitto.nix
816823 ./services/networking/monero.nix
817824 ./services/networking/morty.nix
825+ ./services/networking/mozillavpn.nix
818826 ./services/networking/miredo.nix
819827 ./services/networking/mstpd.nix
820828 ./services/networking/mtprotoproxy.nix
@@ -850,7 +858,7 @@
850858 ./services/networking/ofono.nix
851859 ./services/networking/oidentd.nix
852860 ./services/networking/onedrive.nix
853− ./services/networking/openfire.nix
861+ ./services/networking/openconnect.nix
854862 ./services/networking/openvpn.nix
855863 ./services/networking/ostinato.nix
856864 ./services/networking/owamp.nix
@@ -977,6 +985,7 @@
977985 ./services/security/shibboleth-sp.nix
978986 ./services/security/sks.nix
979987 ./services/security/sshguard.nix
988+ ./services/security/sslmate-agent.nix
980989 ./services/security/step-ca.nix
981990 ./services/security/tor.nix
982991 ./services/security/torify.nix
@@ -1051,6 +1060,7 @@
10511060 ./services/web-apps/netbox.nix
10521061 ./services/web-apps/nextcloud.nix
10531062 ./services/web-apps/nexus.nix
1063+ ./services/web-apps/nifi.nix
10541064 ./services/web-apps/node-red.nix
10551065 ./services/web-apps/pict-rs.nix
10561066 ./services/web-apps/peertube.nix
@@ -1175,9 +1185,12 @@
11751185 ./system/boot/stage-2.nix
11761186 ./system/boot/systemd.nix
11771187 ./system/boot/systemd/coredump.nix
1188+ ./system/boot/systemd/initrd-secrets.nix
1189+ ./system/boot/systemd/initrd.nix
11781190 ./system/boot/systemd/journald.nix
11791191 ./system/boot/systemd/logind.nix
11801192 ./system/boot/systemd/nspawn.nix
1193+ ./system/boot/systemd/shutdown.nix
11811194 ./system/boot/systemd/tmpfiles.nix
11821195 ./system/boot/systemd/user.nix
11831196 ./system/boot/timesyncd.nix
@@ -1233,6 +1246,7 @@
12331246 ./virtualisation/amazon-options.nix
12341247 ./virtualisation/hyperv-guest.nix
12351248 ./virtualisation/kvmgt.nix
1249+ ./virtualisation/openstack-options.nix
12361250 ./virtualisation/openvswitch.nix
12371251 ./virtualisation/parallels-guest.nix
12381252 ./virtualisation/podman/default.nix
@@ -1242,6 +1256,7 @@
12421256 ./virtualisation/virtualbox-guest.nix
12431257 ./virtualisation/virtualbox-host.nix
12441258 ./virtualisation/vmware-guest.nix
1259+ ./virtualisation/vmware-host.nix
12451260 ./virtualisation/waydroid.nix
12461261 ./virtualisation/xen-dom0.nix
12471262 ./virtualisation/xe-guest-utilities.nix
nixos/modules/profiles/all-hardware.nix+3
@@ -40,6 +40,9 @@ in
4040 # SD cards.
4141 "sdhci_pci"
4242
43+ # NVMe drives
44+ "nvme"
45+
4346 # Firewire support. Not tested.
4447 "ohci1394" "sbp2"
4548
nixos/modules/profiles/installation-device.nix+4
@@ -99,6 +99,10 @@ with lib;
9999 stdenvNoCC # for runCommand
100100 busybox
101101 jq # for closureInfo
102+ # For boot.initrd.systemd
103+ makeInitrdNGTool
104+ systemdStage1
105+ systemdStage1Network
102106 ];
103107
104108 # Show all debug messages from the kernel but don't log refused packets
nixos/modules/profiles/qemu-guest.nix+2−2
@@ -1,13 +1,13 @@
11# Common configuration for virtual machines running under QEMU (using
22# virtio).
33
4−{ ... }:
4+{ config, lib, ... }:
55
66{
77 boot.initrd.availableKernelModules = [ "virtio_net" "virtio_pci" "virtio_mmio" "virtio_blk" "virtio_scsi" "9p" "9pnet_virtio" ];
88 boot.initrd.kernelModules = [ "virtio_balloon" "virtio_console" "virtio_rng" ];
99
10− boot.initrd.postDeviceCommands =
10+ boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
1111 ''
1212 # Set the system time from the hardware clock to work around a
1313 # bug in qemu-kvm > 1.5.2 (where the VM clock is initialised
nixos/modules/programs/adb.nix+1−2
@@ -23,8 +23,7 @@ with lib;
2323 ###### implementation
2424 config = mkIf config.programs.adb.enable {
2525 services.udev.packages = [ pkgs.android-udev-rules ];
26− # Give platform-tools lower priority so mke2fs+friends are taken from other packages first
27− environment.systemPackages = [ (lowPrio pkgs.androidenv.androidPkgs_9_0.platform-tools) ];
26+ environment.systemPackages = [ pkgs.android-tools ];
2827 users.groups.adbusers = {};
2928 };
3029}
nixos/modules/programs/chromium.nix+3
@@ -108,5 +108,8 @@ in
108108 # for google-chrome https://www.chromium.org/administrators/linux-quick-start
109109 environment.etc."opt/chrome/policies/managed/default.json".text = builtins.toJSON defaultProfile;
110110 environment.etc."opt/chrome/policies/managed/extra.json".text = builtins.toJSON cfg.extraOpts;
111+ # for brave
112+ environment.etc."brave/policies/managed/default.json".text = builtins.toJSON defaultProfile;
113+ environment.etc."brave/policies/managed/extra.json".text = builtins.toJSON cfg.extraOpts;
111114 };
112115}
nixos/modules/programs/k3b.nixnew file+52
@@ -0,0 +1,52 @@
1+{ config, pkgs, lib, ... }:
2+
3+with lib;
4+
5+{
6+ # interface
7+ options.programs.k3b = {
8+ enable = mkOption {
9+ type = types.bool;
10+ default = false;
11+ description = ''
12+ Whether to enable k3b, the KDE disk burning application.
13+
14+ Additionally to installing <package>k3b</package> enabling this will
15+ add <literal>setuid</literal> wrappers in <literal>/run/wrappers/bin</literal>
16+ for both <package>cdrdao</package> and <package>cdrecord</package>. On first
17+ run you must manually configure the path of <package>cdrdae</package> and
18+ <package>cdrecord</package> to correspond to the appropriate paths under
19+ <literal>/run/wrappers/bin</literal> in the "Setup External Programs" menu.
20+ '';
21+ };
22+ };
23+
24+ # implementation
25+ config = mkIf config.programs.k3b.enable {
26+
27+ environment.systemPackages = with pkgs; [
28+ k3b
29+ dvdplusrwtools
30+ cdrdao
31+ cdrkit
32+ ];
33+
34+ security.wrappers = {
35+ cdrdao = {
36+ setuid = true;
37+ owner = "root";
38+ group = "cdrom";
39+ permissions = "u+wrx,g+x";
40+ source = "${pkgs.cdrdao}/bin/cdrdao";
41+ };
42+ cdrecord = {
43+ setuid = true;
44+ owner = "root";
45+ group = "cdrom";
46+ permissions = "u+wrx,g+x";
47+ source = "${pkgs.cdrkit}/bin/cdrecord";
48+ };
49+ };
50+
51+ };
52+}
nixos/modules/programs/mininet.nix+2−2
@@ -23,8 +23,8 @@ let
2323 ln -s ${pyEnv}/bin/mn $out/bin/mn
2424
2525 # mn errors out without a telnet binary
26− # pkgs.telnet brings an undesired ifconfig into PATH see #43105
27− ln -s ${pkgs.telnet}/bin/telnet $out/bin/telnet
26+ # pkgs.inetutils brings an undesired ifconfig into PATH see #43105
27+ ln -s ${pkgs.inetutils}/bin/telnet $out/bin/telnet
2828 '';
2929in
3030{
nixos/modules/programs/nethoscope.nixnew file+30
@@ -0,0 +1,30 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+
5+let cfg = config.programs.nethoscope;
6+in
7+{
8+ meta.maintainers = with maintainers; [ _0x4A6F ];
9+
10+ options = {
11+ programs.nethoscope = {
12+ enable = mkOption {
13+ type = types.bool;
14+ default = false;
15+ description = ''
16+ Whether to add nethoscope to the global environment and configure a
17+ setcap wrapper for it.
18+ '';
19+ };
20+ };
21+ };
22+
23+ config = mkIf cfg.enable {
24+ environment.systemPackages = with pkgs; [ nethoscope ];
25+ security.wrappers.nethoscope = {
26+ source = "${pkgs.nethoscope}/bin/nethoscope";
27+ capabilities = "cap_net_raw,cap_net_admin=eip";
28+ };
29+ };
30+}
nixos/modules/programs/ssh.nix+18−7
@@ -157,9 +157,13 @@ in
157157 default = [ name ] ++ config.extraHostNames;
158158 defaultText = literalExpression "[ ${name} ] ++ config.${options.extraHostNames}";
159159 description = ''
160− DEPRECATED, please use <literal>extraHostNames</literal>.
161160 A list of host names and/or IP numbers used for accessing
162− the host's ssh service.
161+ the host's ssh service. This list includes the name of the
162+ containing <literal>knownHosts</literal> attribute by default
163+ for convenience. If you wish to configure multiple host keys
164+ for the same host use multiple <literal>knownHosts</literal>
165+ entries with different attribute names and the same
166+ <literal>hostNames</literal> list.
163167 '';
164168 };
165169 extraHostNames = mkOption {
@@ -167,7 +171,8 @@ in
167171 default = [];
168172 description = ''
169173 A list of additional host names and/or IP numbers used for
170− accessing the host's ssh service.
174+ accessing the host's ssh service. This list is ignored if
175+ <literal>hostNames</literal> is set explicitly.
171176 '';
172177 };
173178 publicKey = mkOption {
@@ -198,7 +203,12 @@ in
198203 };
199204 }));
200205 description = ''
201− The set of system-wide known SSH hosts.
206+ The set of system-wide known SSH hosts. To make simple setups more
207+ convenient the name of an attribute in this set is used as a host name
208+ for the entry. This behaviour can be disabled by setting
209+ <literal>hostNames</literal> explicitly. You can use
210+ <literal>extraHostNames</literal> to add additional host names without
211+ disabling this default.
202212 '';
203213 example = literalExpression ''
204214 {
@@ -207,6 +217,10 @@ in
207217 publicKeyFile = ./pubkeys/myhost_ssh_host_dsa_key.pub;
208218 };
209219 "myhost2.net".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILIRuJ8p1Fi+m6WkHV0KWnRfpM1WxoW8XAS+XvsSKsTK";
220+ "myhost2.net/dsa" = {
221+ hostNames = [ "myhost2.net" ];
222+ publicKeyFile = ./pubkeys/myhost2_ssh_host_dsa_key.pub;
223+ };
210224 }
211225 '';
212226 };
@@ -279,9 +293,6 @@ in
279293 message = "knownHost ${name} must contain either a publicKey or publicKeyFile";
280294 });
281295
282− warnings = mapAttrsToList (name: _: ''programs.ssh.knownHosts.${name}.hostNames is deprecated, use programs.ssh.knownHosts.${name}.extraHostNames'')
283− (filterAttrs (name: {hostNames, extraHostNames, ...}: hostNames != [ name ] ++ extraHostNames) cfg.knownHosts);
284−
285296 # SSH configuration. Slight duplication of the sshd_config
286297 # generation in the sshd service.
287298 environment.etc."ssh/ssh_config".text =
nixos/modules/programs/ssmtp.nixdeleted−190
@@ -1,190 +0,0 @@
1−# Configuration for `ssmtp', a trivial mail transfer agent that can
2−# replace sendmail/postfix on simple systems. It delivers email
3−# directly to an SMTP server defined in its configuration file, without
4−# queueing mail locally.
5−
6−{ config, lib, pkgs, ... }:
7−
8−with lib;
9−
10−let
11− cfg = config.services.ssmtp;
12−
13−in
14−{
15−
16− imports = [
17− (mkRenamedOptionModule [ "networking" "defaultMailServer" "directDelivery" ] [ "services" "ssmtp" "enable" ])
18− (mkRenamedOptionModule [ "networking" "defaultMailServer" "hostName" ] [ "services" "ssmtp" "hostName" ])
19− (mkRenamedOptionModule [ "networking" "defaultMailServer" "domain" ] [ "services" "ssmtp" "domain" ])
20− (mkRenamedOptionModule [ "networking" "defaultMailServer" "root" ] [ "services" "ssmtp" "root" ])
21− (mkRenamedOptionModule [ "networking" "defaultMailServer" "useTLS" ] [ "services" "ssmtp" "useTLS" ])
22− (mkRenamedOptionModule [ "networking" "defaultMailServer" "useSTARTTLS" ] [ "services" "ssmtp" "useSTARTTLS" ])
23− (mkRenamedOptionModule [ "networking" "defaultMailServer" "authUser" ] [ "services" "ssmtp" "authUser" ])
24− (mkRenamedOptionModule [ "networking" "defaultMailServer" "authPassFile" ] [ "services" "ssmtp" "authPassFile" ])
25− (mkRenamedOptionModule [ "networking" "defaultMailServer" "setSendmail" ] [ "services" "ssmtp" "setSendmail" ])
26−
27− (mkRemovedOptionModule [ "networking" "defaultMailServer" "authPass" ] "authPass has been removed since it leaks the clear-text password into the world-readable store. Use authPassFile instead and make sure it's not a store path")
28− (mkRemovedOptionModule [ "services" "ssmtp" "authPass" ] "authPass has been removed since it leaks the clear-text password into the world-readable store. Use authPassFile instead and make sure it's not a store path")
29− ];
30−
31− options = {
32−
33− services.ssmtp = {
34−
35− enable = mkOption {
36− type = types.bool;
37− default = false;
38− description = ''
39− Use the trivial Mail Transfer Agent (MTA)
40− <command>ssmtp</command> package to allow programs to send
41− e-mail. If you don't want to run a “real” MTA like
42− <command>sendmail</command> or <command>postfix</command> on
43− your machine, set this option to <literal>true</literal>, and
44− set the option
45− <option>services.ssmtp.hostName</option> to the
46− host name of your preferred mail server.
47− '';
48− };
49−
50− settings = mkOption {
51− type = with types; attrsOf (oneOf [ bool str ]);
52− default = {};
53− description = ''
54− <citerefentry><refentrytitle>ssmtp</refentrytitle><manvolnum>5</manvolnum></citerefentry> configuration. Refer
55− to <link xlink:href="https://linux.die.net/man/5/ssmtp.conf"/> for details on supported values.
56− '';
57− example = literalExpression ''
58− {
59− Debug = true;
60− FromLineOverride = false;
61− }
62− '';
63− };
64−
65− hostName = mkOption {
66− type = types.str;
67− example = "mail.example.org";
68− description = ''
69− The host name of the default mail server to use to deliver
70− e-mail. Can also contain a port number (ex: mail.example.org:587),
71− defaults to port 25 if no port is given.
72− '';
73− };
74−
75− root = mkOption {
76− type = types.str;
77− default = "";
78− example = "root@example.org";
79− description = ''
80− The e-mail to which mail for users with UID &lt; 1000 is forwarded.
81− '';
82− };
83−
84− domain = mkOption {
85− type = types.str;
86− default = "";
87− example = "example.org";
88− description = ''
89− The domain from which mail will appear to be sent.
90− '';
91− };
92−
93− useTLS = mkOption {
94− type = types.bool;
95− default = false;
96− description = ''
97− Whether TLS should be used to connect to the default mail
98− server.
99− '';
100− };
101−
102− useSTARTTLS = mkOption {
103− type = types.bool;
104− default = false;
105− description = ''
106− Whether the STARTTLS should be used to connect to the default
107− mail server. (This is needed for TLS-capable mail servers
108− running on the default SMTP port 25.)
109− '';
110− };
111−
112− authUser = mkOption {
113− type = types.str;
114− default = "";
115− example = "foo@example.org";
116− description = ''
117− Username used for SMTP auth. Leave blank to disable.
118− '';
119− };
120−
121− authPassFile = mkOption {
122− type = types.nullOr types.str;
123− default = null;
124− example = "/run/keys/ssmtp-authpass";
125− description = ''
126− Path to a file that contains the password used for SMTP auth. The file
127− should not contain a trailing newline, if the password does not contain one
128− (e.g. use <command>echo -n "password" > file</command>).
129− This file should be readable by the users that need to execute ssmtp.
130− '';
131− };
132−
133− setSendmail = mkOption {
134− type = types.bool;
135− default = true;
136− description = "Whether to set the system sendmail to ssmtp's.";
137− };
138−
139− };
140−
141− };
142−
143−
144− config = mkIf cfg.enable {
145−
146− assertions = [
147− {
148− assertion = cfg.useSTARTTLS -> cfg.useTLS;
149− message = "services.ssmtp.useSTARTTLS has no effect without services.ssmtp.useTLS";
150− }
151− ];
152−
153− services.ssmtp.settings = mkMerge [
154− ({
155− MailHub = cfg.hostName;
156− FromLineOverride = mkDefault true;
157− UseTLS = cfg.useTLS;
158− UseSTARTTLS = cfg.useSTARTTLS;
159− })
160− (mkIf (cfg.root != "") { root = cfg.root; })
161− (mkIf (cfg.domain != "") { rewriteDomain = cfg.domain; })
162− (mkIf (cfg.authUser != "") { AuthUser = cfg.authUser; })
163− (mkIf (cfg.authPassFile != null) { AuthPassFile = cfg.authPassFile; })
164− ];
165−
166− # careful here: ssmtp REQUIRES all config lines to end with a newline char!
167− environment.etc."ssmtp/ssmtp.conf".text = with generators; toKeyValue {
168− mkKeyValue = mkKeyValueDefault {
169− mkValueString = value:
170− if value == true then "YES"
171− else if value == false then "NO"
172− else mkValueStringDefault {} value
173− ;
174− } "=";
175− } cfg.settings;
176−
177− environment.systemPackages = [pkgs.ssmtp];
178−
179− services.mail.sendmailSetuidWrapper = mkIf cfg.setSendmail {
180− program = "sendmail";
181− source = "${pkgs.ssmtp}/bin/sendmail";
182− setuid = false;
183− setgid = false;
184− owner = "root";
185− group = "root";
186− };
187−
188− };
189−
190−}
nixos/modules/programs/thefuck.nix+7−6
@@ -6,9 +6,12 @@ let
66 prg = config.programs;
77 cfg = prg.thefuck;
88
9− initScript = ''
9+ bashAndZshInitScript = ''
1010 eval $(${pkgs.thefuck}/bin/thefuck --alias ${cfg.alias})
1111 '';
12+ fishInitScript = ''
13+ ${pkgs.thefuck}/bin/thefuck --alias ${cfg.alias} | source
14+ '';
1215in
1316 {
1417 options = {
@@ -30,10 +33,8 @@ in
3033 config = mkIf cfg.enable {
3134 environment.systemPackages = with pkgs; [ thefuck ];
3235
33− programs.bash.interactiveShellInit = initScript;
34− programs.zsh.interactiveShellInit = mkIf prg.zsh.enable initScript;
35− programs.fish.interactiveShellInit = mkIf prg.fish.enable ''
36− ${pkgs.thefuck}/bin/thefuck --alias | source
37− '';
36+ programs.bash.interactiveShellInit = bashAndZshInitScript;
37+ programs.zsh.interactiveShellInit = mkIf prg.zsh.enable bashAndZshInitScript;
38+ programs.fish.interactiveShellInit = mkIf prg.fish.enable fishInitScript;
3839 };
3940 }
nixos/modules/rename.nix+6
@@ -69,6 +69,11 @@ with lib;
6969 '')
7070 (mkRemovedOptionModule [ "services" "quagga" ] "the corresponding package has been removed from nixpkgs")
7171 (mkRemovedOptionModule [ "services" "seeks" ] "")
72+ (mkRemovedOptionModule [ "services" "ssmtp" ] ''
73+ The ssmtp package and the corresponding module have been removed due to
74+ the program being unmaintained. The options `programs.msmtp.*` can be
75+ used instead.
76+ '')
7277 (mkRemovedOptionModule [ "services" "venus" ] "The corresponding package was removed from nixpkgs.")
7378 (mkRemovedOptionModule [ "services" "wakeonlan"] "This module was removed in favor of enabling it with networking.interfaces.<name>.wakeOnLan")
7479 (mkRemovedOptionModule [ "services" "winstone" ] "The corresponding package was removed from nixpkgs.")
@@ -91,6 +96,7 @@ with lib;
9196 (mkRemovedOptionModule [ "services" "shellinabox" ] "The corresponding package was removed from nixpkgs.")
9297 (mkRemovedOptionModule [ "services" "gogoclient" ] "The corresponding package was removed from nixpkgs.")
9398 (mkRemovedOptionModule [ "services" "virtuoso" ] "The corresponding package was removed from nixpkgs.")
99+ (mkRemovedOptionModule [ "services" "openfire" ] "The corresponding package was removed from nixpkgs.")
94100
95101 # Do NOT add any option renames here, see top of the file
96102 ];
nixos/modules/security/pam.nix+113−3
@@ -61,6 +61,19 @@ let
6161 '';
6262 };
6363
64+ usshAuth = mkOption {
65+ default = false;
66+ type = types.bool;
67+ description = ''
68+ If set, users with an SSH certificate containing an authorized principal
69+ in their SSH agent are able to log in. Specific options are controlled
70+ using the <option>security.pam.ussh</option> options.
71+
72+ Note that the <option>security.pam.ussh.enable</option> must also be
73+ set for this option to take effect.
74+ '';
75+ };
76+
6477 yubicoAuth = mkOption {
6578 default = config.security.pam.yubico.enable;
6679 defaultText = literalExpression "config.security.pam.yubico.enable";
@@ -475,8 +488,11 @@ let
475488 optionalString cfg.usbAuth ''
476489 auth sufficient ${pkgs.pam_usb}/lib/security/pam_usb.so
477490 '' +
491+ (let ussh = config.security.pam.ussh; in optionalString (config.security.pam.ussh.enable && cfg.usshAuth) ''
492+ auth ${ussh.control} ${pkgs.pam_ussh}/lib/security/pam_ussh.so ${optionalString (ussh.caFile != null) "ca_file=${ussh.caFile}"} ${optionalString (ussh.authorizedPrincipals != null) "authorized_principals=${ussh.authorizedPrincipals}"} ${optionalString (ussh.authorizedPrincipalsFile != null) "authorized_principals_file=${ussh.authorizedPrincipalsFile}"} ${optionalString (ussh.group != null) "group=${ussh.group}"}
493+ '') +
478494 (let oath = config.security.pam.oath; in optionalString cfg.oathAuth ''
479− auth requisite ${pkgs.oathToolkit}/lib/security/pam_oath.so window=${toString oath.window} usersfile=${toString oath.usersFile} digits=${toString oath.digits}
495+ auth requisite ${pkgs.oath-toolkit}/lib/security/pam_oath.so window=${toString oath.window} usersfile=${toString oath.usersFile} digits=${toString oath.digits}
480496 '') +
481497 (let yubi = config.security.pam.yubico; in optionalString cfg.yubicoAuth ''
482498 auth ${yubi.control} ${pkgs.yubico-pam}/lib/security/pam_yubico.so mode=${toString yubi.mode} ${optionalString (yubi.challengeResponsePath != null) "chalresp_path=${yubi.challengeResponsePath}"} ${optionalString (yubi.mode == "client") "id=${toString yubi.id}"} ${optionalString yubi.debug "debug"}
@@ -594,6 +610,7 @@ let
594610 session optional ${pkgs.ecryptfs}/lib/security/pam_ecryptfs.so
595611 '' +
596612 optionalString cfg.pamMount ''
613+ session [success=1 default=ignore] ${pkgs.pam}/lib/security/pam_succeed_if.so service = systemd-user quiet
597614 session optional ${pkgs.pam_mount}/lib/security/pam_mount.so disable_interactive
598615 '' +
599616 optionalString use_ldap ''
@@ -926,6 +943,96 @@ in
926943 };
927944 };
928945
946+ security.pam.ussh = {
947+ enable = mkOption {
948+ default = false;
949+ type = types.bool;
950+ description = ''
951+ Enables Uber's USSH PAM (<literal>pam-ussh</literal>) module.
952+
953+ This is similar to <literal>pam-ssh-agent</literal>, except that
954+ the presence of a CA-signed SSH key with a valid principal is checked
955+ instead.
956+
957+ Note that this module must both be enabled using this option and on a
958+ per-PAM-service level as well (using <literal>usshAuth</literal>).
959+
960+ More information can be found <link
961+ xlink:href="https://github.com/uber/pam-ussh">here</link>.
962+ '';
963+ };
964+
965+ caFile = mkOption {
966+ default = null;
967+ type = with types; nullOr path;
968+ description = ''
969+ By default <literal>pam-ussh</literal> reads the trusted user CA keys
970+ from <filename>/etc/ssh/trusted_user_ca</filename>.
971+
972+ This should be set the same as your <literal>TrustedUserCAKeys</literal>
973+ option for sshd.
974+ '';
975+ };
976+
977+ authorizedPrincipals = mkOption {
978+ default = null;
979+ type = with types; nullOr commas;
980+ description = ''
981+ Comma-separated list of authorized principals to permit; if the user
982+ presents a certificate with one of these principals, then they will be
983+ authorized.
984+
985+ Note that <literal>pam-ussh</literal> also requires that the certificate
986+ contain a principal matching the user's username. The principals from
987+ this list are in addition to those principals.
988+
989+ Mutually exclusive with <literal>authorizedPrincipalsFile</literal>.
990+ '';
991+ };
992+
993+ authorizedPrincipalsFile = mkOption {
994+ default = null;
995+ type = with types; nullOr path;
996+ description = ''
997+ Path to a list of principals; if the user presents a certificate with
998+ one of these principals, then they will be authorized.
999+
1000+ Note that <literal>pam-ussh</literal> also requires that the certificate
1001+ contain a principal matching the user's username. The principals from
1002+ this file are in addition to those principals.
1003+
1004+ Mutually exclusive with <literal>authorizedPrincipals</literal>.
1005+ '';
1006+ };
1007+
1008+ group = mkOption {
1009+ default = null;
1010+ type = with types; nullOr str;
1011+ description = ''
1012+ If set, then the authenticating user must be a member of this group
1013+ to use this module.
1014+ '';
1015+ };
1016+
1017+ control = mkOption {
1018+ default = "sufficient";
1019+ type = types.enum [ "required" "requisite" "sufficient" "optional" ];
1020+ description = ''
1021+ This option sets pam "control".
1022+ If you want to have multi factor authentication, use "required".
1023+ If you want to use the SSH certificate instead of the regular password,
1024+ use "sufficient".
1025+
1026+ Read
1027+ <citerefentry>
1028+ <refentrytitle>pam.conf</refentrytitle>
1029+ <manvolnum>5</manvolnum>
1030+ </citerefentry>
1031+ for better understanding of this option.
1032+ '';
1033+ };
1034+ };
1035+
9291036 security.pam.yubico = {
9301037 enable = mkOption {
9311038 default = false;
@@ -1024,7 +1131,7 @@ in
10241131 ++ optional config.services.sssd.enable pkgs.sssd
10251132 ++ optionals config.krb5.enable [pam_krb5 pam_ccreds]
10261133 ++ optionals config.security.pam.enableOTPW [ pkgs.otpw ]
1027− ++ optionals config.security.pam.oath.enable [ pkgs.oathToolkit ]
1134+ ++ optionals config.security.pam.oath.enable [ pkgs.oath-toolkit ]
10281135 ++ optionals config.security.pam.p11.enable [ pkgs.pam_p11 ]
10291136 ++ optionals config.security.pam.u2f.enable [ pkgs.pam_u2f ];
10301137
@@ -1110,8 +1217,11 @@ in
11101217 optionalString (isEnabled (cfg: cfg.usbAuth)) ''
11111218 mr ${pkgs.pam_usb}/lib/security/pam_usb.so,
11121219 '' +
1220+ optionalString (isEnabled (cfg: cfg.usshAuth)) ''
1221+ mr ${pkgs.pam_ussh}/lib/security/pam_ussh.so,
1222+ '' +
11131223 optionalString (isEnabled (cfg: cfg.oathAuth)) ''
1114− "mr ${pkgs.oathToolkit}/lib/security/pam_oath.so,
1224+ "mr ${pkgs.oath-toolkit}/lib/security/pam_oath.so,
11151225 '' +
11161226 optionalString (isEnabled (cfg: cfg.yubicoAuth)) ''
11171227 mr ${pkgs.yubico-pam}/lib/security/pam_yubico.so,
nixos/modules/security/pam_mount.nix+78−6
@@ -5,6 +5,14 @@ with lib;
55let
66 cfg = config.security.pam.mount;
77
8+ oflRequired = cfg.logoutHup || cfg.logoutTerm || cfg.logoutKill;
9+
10+ fake_ofl = pkgs.writeShellScriptBin "fake_ofl" ''
11+ SIGNAL=$1
12+ MNTPT=$2
13+ ${pkgs.lsof}/bin/lsof | ${pkgs.gnugrep}/bin/grep $MNTPT | ${pkgs.gawk}/bin/awk '{print $2}' | ${pkgs.findutils}/bin/xargs ${pkgs.util-linux}/bin/kill -$SIGNAL
14+ '';
15+
816 anyPamMount = any (attrByPath ["pamMount"] false) (attrValues config.security.pam.services);
917in
1018
@@ -51,6 +59,71 @@ in
5159 You can define volume-specific options in the volume definitions.
5260 '';
5361 };
62+
63+ debugLevel = mkOption {
64+ type = types.int;
65+ default = 0;
66+ example = 1;
67+ description = ''
68+ Sets the Debug-Level. 0 disables debugging, 1 enables pam_mount tracing,
69+ and 2 additionally enables tracing in mount.crypt. The default is 0.
70+ For more information, visit <link
71+ xlink:href="http://pam-mount.sourceforge.net/pam_mount.conf.5.html" />.
72+ '';
73+ };
74+
75+ logoutWait = mkOption {
76+ type = types.int;
77+ default = 0;
78+ description = ''
79+ Amount of microseconds to wait until killing remaining processes after
80+ final logout.
81+ For more information, visit <link
82+ xlink:href="http://pam-mount.sourceforge.net/pam_mount.conf.5.html" />.
83+ '';
84+ };
85+
86+ logoutHup = mkOption {
87+ type = types.bool;
88+ default = false;
89+ description = ''
90+ Kill remaining processes after logout by sending a SIGHUP.
91+ '';
92+ };
93+
94+ logoutTerm = mkOption {
95+ type = types.bool;
96+ default = false;
97+ description = ''
98+ Kill remaining processes after logout by sending a SIGTERM.
99+ '';
100+ };
101+
102+ logoutKill = mkOption {
103+ type = types.bool;
104+ default = false;
105+ description = ''
106+ Kill remaining processes after logout by sending a SIGKILL.
107+ '';
108+ };
109+
110+ createMountPoints = mkOption {
111+ type = types.bool;
112+ default = true;
113+ description = ''
114+ Create mountpoints for volumes if they do not exist.
115+ '';
116+ };
117+
118+ removeCreatedMountPoints = mkOption {
119+ type = types.bool;
120+ default = true;
121+ description = ''
122+ Remove mountpoints created by pam_mount after logout. This
123+ only affects mountpoints that have been created by pam_mount
124+ in the same session.
125+ '';
126+ };
54127 };
55128
56129 };
@@ -77,21 +150,20 @@ in
77150 <!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
78151 <!-- auto generated from Nixos: modules/config/users-groups.nix -->
79152 <pam_mount>
80− <debug enable="0" />
81−
153+ <debug enable="${toString cfg.debugLevel}" />
82154 <!-- if activated, requires ofl from hxtools to be present -->
83− <logout wait="0" hup="no" term="no" kill="no" />
155+ <logout wait="${toString cfg.logoutWait}" hup="${if cfg.logoutHup then "yes" else "no"}" term="${if cfg.logoutTerm then "yes" else "no"}" kill="${if cfg.logoutKill then "yes" else "no"}" />
84156 <!-- set PATH variable for pam_mount module -->
85157 <path>${makeBinPath ([ pkgs.util-linux ] ++ cfg.additionalSearchPaths)}</path>
86158 <!-- create mount point if not present -->
87− <mkmountpoint enable="1" remove="true" />
88−
159+ <mkmountpoint enable="${if cfg.createMountPoints then "1" else "0"}" remove="${if cfg.removeCreatedMountPoints then "true" else "false"}" />
89160 <!-- specify the binaries to be called -->
90161 <fusemount>${pkgs.fuse}/bin/mount.fuse %(VOLUME) %(MNTPT) -o ${concatStringsSep "," (cfg.fuseMountOptions ++ [ "%(OPTIONS)" ])}</fusemount>
162+ <fuseumount>${pkgs.fuse}/bin/fusermount -u %(MNTPT)</fuseumount>
91163 <cryptmount>${pkgs.pam_mount}/bin/mount.crypt %(VOLUME) %(MNTPT)</cryptmount>
92164 <cryptumount>${pkgs.pam_mount}/bin/umount.crypt %(MNTPT)</cryptumount>
93165 <pmvarrun>${pkgs.pam_mount}/bin/pmvarrun -u %(USER) -o %(OPERATION)</pmvarrun>
94−
166+ ${optionalString oflRequired "<ofl>${fake_ofl}/bin/fake_ofl %(SIGNAL) %(MNTPT)</ofl>"}
95167 ${concatStrings (map userVolumeEntry (attrValues extraUserVolumes))}
96168 ${concatStringsSep "\n" cfg.extraVolumes}
97169 </pam_mount>
nixos/modules/security/sudo.nix+1−1
@@ -245,7 +245,7 @@ in
245245
246246 environment.systemPackages = [ sudo ];
247247
248− security.pam.services.sudo = { sshAgentAuth = true; };
248+ security.pam.services.sudo = { sshAgentAuth = true; usshAuth = true; };
249249
250250 environment.etc.sudoers =
251251 { source =
nixos/modules/services/audio/snapserver.nix+15−7
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, options, lib, pkgs, ... }:
22
33with lib;
44
@@ -101,6 +101,8 @@ in {
101101
102102 openFirewall = mkOption {
103103 type = types.bool;
104+ # Make the behavior consistent with other services. Set the default to
105+ # false and remove the accompanying warning after NixOS 22.05 is released.
104106 default = true;
105107 description = ''
106108 Whether to automatically open the specified ports in the firewall.
@@ -273,10 +275,16 @@ in {
273275
274276 config = mkIf cfg.enable {
275277
276− # https://github.com/badaix/snapcast/blob/98ac8b2fb7305084376607b59173ce4097c620d8/server/streamreader/stream_manager.cpp#L85
277− warnings = filter (w: w != "") (mapAttrsToList (k: v: if v.type == "spotify" then ''
278− services.snapserver.streams.${k}.type = "spotify" is deprecated, use services.snapserver.streams.${k}.type = "librespot" instead.
279− '' else "") cfg.streams);
278+ warnings =
279+ # https://github.com/badaix/snapcast/blob/98ac8b2fb7305084376607b59173ce4097c620d8/server/streamreader/stream_manager.cpp#L85
280+ filter (w: w != "") (mapAttrsToList (k: v: if v.type == "spotify" then ''
281+ services.snapserver.streams.${k}.type = "spotify" is deprecated, use services.snapserver.streams.${k}.type = "librespot" instead.
282+ '' else "") cfg.streams)
283+ # Remove this warning after NixOS 22.05 is released.
284+ ++ optional (options.services.snapserver.openFirewall.highestPrio >= (mkOptionDefault null).priority) ''
285+ services.snapserver.openFirewall will no longer default to true starting with NixOS 22.11.
286+ Enable it explicitly if you need to control Snapserver remotely.
287+ '';
280288
281289 systemd.services.snapserver = {
282290 after = [ "network.target" ];
@@ -304,8 +312,8 @@ in {
304312
305313 networking.firewall.allowedTCPPorts =
306314 optionals cfg.openFirewall [ cfg.port ]
307− ++ optional cfg.tcp.enable cfg.tcp.port
308− ++ optional cfg.http.enable cfg.http.port;
315+ ++ optional (cfg.openFirewall && cfg.tcp.enable) cfg.tcp.port
316+ ++ optional (cfg.openFirewall && cfg.http.enable) cfg.http.port;
309317 };
310318
311319 meta = {
nixos/modules/services/continuous-integration/github-runner.nix+10
@@ -299,6 +299,16 @@ in
299299 RestrictRealtime = true;
300300 RestrictSUIDSGID = true;
301301 UMask = "0066";
302+ ProtectProc = "invisible";
303+ ProcSubset = "pid";
304+ SystemCallFilter = [
305+ "~@debug"
306+ "~@mount"
307+ "~@privileged"
308+ "~@cpu-emulation"
309+ "~@obsolete"
310+ ];
311+ RestrictAddressFamilies = [ "AF_INET" "AF_INET6" "AF_UNIX" "AF_NETLINK" ];
302312
303313 # Needs network access
304314 PrivateNetwork = false;
nixos/modules/services/continuous-integration/gitlab-runner.nix+9−2
@@ -36,12 +36,12 @@ let
3636
3737 # register new services
3838 ${concatStringsSep "\n" (mapAttrsToList (name: service: ''
39− if echo "$NEW_SERVICES" | grep -xq ${name}; then
39+ if echo "$NEW_SERVICES" | grep -xq "${name}"; then
4040 bash -c ${escapeShellArg (concatStringsSep " \\\n " ([
4141 "set -a && source ${service.registrationConfigFile} &&"
4242 "gitlab-runner register"
4343 "--non-interactive"
44− "--name ${name}"
44+ (if service.description != null then "--description \"${service.description}\"" else "--name '${name}'")
4545 "--executor ${service.executor}"
4646 "--limit ${toString service.limit}"
4747 "--request-concurrency ${toString service.requestConcurrency}"
@@ -365,6 +365,13 @@ in
365365 with <literal>RUNNER_ENV</literal> variable set.
366366 '';
367367 };
368+ description = mkOption {
369+ type = types.nullOr types.str;
370+ default = null;
371+ description = ''
372+ Name/description of the runner.
373+ '';
374+ };
368375 executor = mkOption {
369376 type = types.str;
370377 default = "docker";
nixos/modules/services/continuous-integration/jenkins/slave.nix+15−1
@@ -1,4 +1,4 @@
1−{ config, lib, ... }:
1+{ config, lib, pkgs, ... }:
22with lib;
33let
44 cfg = config.services.jenkinsSlave;
@@ -46,6 +46,15 @@ in {
4646 this is the home of the "jenkins" user.
4747 '';
4848 };
49+
50+ javaPackage = mkOption {
51+ default = pkgs.jdk;
52+ defaultText = literalExpression "pkgs.jdk";
53+ description = ''
54+ Java package to install.
55+ '';
56+ type = types.package;
57+ };
4958 };
5059 };
5160
@@ -64,5 +73,10 @@ in {
6473 uid = config.ids.uids.jenkins;
6574 };
6675 };
76+
77+ programs.java = {
78+ enable = true;
79+ package = cfg.javaPackage;
80+ };
6781 };
6882}
nixos/modules/services/databases/cockroachdb.nix+37−29
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, pkgs, utils, ... }:
22
33with lib;
44
@@ -6,46 +6,44 @@ let
66 cfg = config.services.cockroachdb;
77 crdb = cfg.package;
88
9− escape = builtins.replaceStrings ["%"] ["%%"];
10− ifNotNull = v: s: optionalString (v != null) s;
11−
12− startupCommand = lib.concatStringsSep " "
13− [ # Basic startup
14− "${crdb}/bin/cockroach start"
9+ startupCommand = utils.escapeSystemdExecArgs
10+ ([
11+ # Basic startup
12+ "${crdb}/bin/cockroach"
13+ "start"
1514 "--logtostderr"
1615 "--store=/var/lib/cockroachdb"
17− (ifNotNull cfg.locality "--locality='${cfg.locality}'")
1816
1917 # WebUI settings
20− "--http-addr='${cfg.http.address}:${toString cfg.http.port}'"
18+ "--http-addr=${cfg.http.address}:${toString cfg.http.port}"
2119
2220 # Cluster listen address
23− "--listen-addr='${cfg.listen.address}:${toString cfg.listen.port}'"
24−
25− # Cluster configuration
26− (ifNotNull cfg.join "--join=${cfg.join}")
21+ "--listen-addr=${cfg.listen.address}:${toString cfg.listen.port}"
2722
28− # Cache and memory settings. Must be escaped.
29− "--cache='${escape cfg.cache}'"
30− "--max-sql-memory='${escape cfg.maxSqlMemory}'"
23+ # Cache and memory settings.
24+ "--cache=${cfg.cache}"
25+ "--max-sql-memory=${cfg.maxSqlMemory}"
3126
3227 # Certificate/security settings.
3328 (if cfg.insecure then "--insecure" else "--certs-dir=${cfg.certsDir}")
34− ];
35−
36− addressOption = descr: defaultPort: {
37− address = mkOption {
38− type = types.str;
39− default = "localhost";
40− description = "Address to bind to for ${descr}";
41− };
29+ ]
30+ ++ lib.optional (cfg.join != null) "--join=${cfg.join}"
31+ ++ lib.optional (cfg.locality != null) "--locality=${cfg.locality}"
32+ ++ cfg.extraArgs);
33+
34+ addressOption = descr: defaultPort: {
35+ address = mkOption {
36+ type = types.str;
37+ default = "localhost";
38+ description = "Address to bind to for ${descr}";
39+ };
4240
43− port = mkOption {
44− type = types.port;
45− default = defaultPort;
46− description = "Port to bind to for ${descr}";
47− };
41+ port = mkOption {
42+ type = types.port;
43+ default = defaultPort;
44+ description = "Port to bind to for ${descr}";
4845 };
46+ };
4947in
5048
5149{
@@ -159,6 +157,16 @@ in
159157 only contain open source features and open source code).
160158 '';
161159 };
160+
161+ extraArgs = mkOption {
162+ type = types.listOf types.str;
163+ default = [];
164+ example = [ "--advertise-addr" "[fe80::f6f2:::]" ];
165+ description = ''
166+ Extra CLI arguments passed to <command>cockroach start</command>.
167+ For the full list of supported argumemnts, check <link xlink:href="https://www.cockroachlabs.com/docs/stable/cockroach-start.html#flags"/>
168+ '';
169+ };
162170 };
163171 };
164172
nixos/modules/services/databases/couchdb.nix+6
@@ -193,6 +193,11 @@ in {
193193
194194 preStart = ''
195195 touch ${cfg.configFile}
196+ if ! test -e ${cfg.databaseDir}/.erlang.cookie; then
197+ touch ${cfg.databaseDir}/.erlang.cookie
198+ chmod 600 ${cfg.databaseDir}/.erlang.cookie
199+ dd if=/dev/random bs=16 count=1 | base64 > ${cfg.databaseDir}/.erlang.cookie
200+ fi
196201 '';
197202
198203 environment = {
@@ -204,6 +209,7 @@ in {
204209 ERL_FLAGS= ''-couch_ini ${cfg.package}/etc/default.ini ${configFile} ${pkgs.writeText "couchdb-extra.ini" cfg.extraConfig} ${cfg.configFile}'';
205210 # 5. the vm.args file
206211 COUCHDB_ARGS_FILE=''${cfg.argsFile}'';
212+ HOME =''${cfg.databaseDir}'';
207213 };
208214
209215 serviceConfig = {
nixos/modules/services/desktops/pipewire/daemon/pipewire-pulse.conf.json+9−8
@@ -29,14 +29,7 @@
2929 },
3030 {
3131 "name": "libpipewire-module-protocol-pulse",
32− "args": {
33− "server.address": [
34− "unix:native"
35− ],
36− "vm.overrides": {
37− "pulse.min.quantum": "1024/48000"
38− }
39− }
32+ "args": {}
4033 }
4134 ],
4235 "context.exec": [
@@ -46,6 +39,14 @@
4639 }
4740 ],
4841 "stream.properties": {},
42+ "pulse.properties": {
43+ "server.address": [
44+ "unix:native"
45+ ],
46+ "vm.overrides": {
47+ "pulse.min.quantum": "1024/48000"
48+ }
49+ },
4950 "pulse.rules": [
5051 {
5152 "matches": [
nixos/modules/services/desktops/pipewire/pipewire-media-session.nix+4−4
@@ -58,7 +58,7 @@ in {
5858 Configuration for the media session core. For details see
5959 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/media-session.conf
6060 '';
61− default = {};
61+ default = defaults.media-session;
6262 };
6363
6464 alsa-monitor = mkOption {
@@ -67,7 +67,7 @@ in {
6767 Configuration for the alsa monitor. For details see
6868 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/alsa-monitor.conf
6969 '';
70− default = {};
70+ default = defaults.alsa-monitor;
7171 };
7272
7373 bluez-monitor = mkOption {
@@ -76,7 +76,7 @@ in {
7676 Configuration for the bluez5 monitor. For details see
7777 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/bluez-monitor.conf
7878 '';
79− default = {};
79+ default = defaults.bluez-monitor;
8080 };
8181
8282 v4l2-monitor = mkOption {
@@ -85,7 +85,7 @@ in {
8585 Configuration for the V4L2 monitor. For details see
8686 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/v4l2-monitor.conf
8787 '';
88− default = {};
88+ default = defaults.v4l2-monitor;
8989 };
9090 };
9191 };
nixos/modules/services/development/jupyter/default.nix+1
@@ -194,6 +194,7 @@ in {
194194 extraGroups = [ cfg.group ];
195195 home = "/var/lib/jupyter";
196196 createHome = true;
197+ isSystemUser = true;
197198 useDefaultShell = true; # needed so that the user can start a terminal.
198199 };
199200 })
nixos/modules/services/editors/haste.nixnew file+86
@@ -0,0 +1,86 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+
5+let
6+ pkg = pkgs.haste-server;
7+ cfg = config.services.haste-server;
8+
9+ format = pkgs.formats.json {};
10+in
11+{
12+ options.services.haste-server = {
13+ enable = mkEnableOption "haste-server";
14+ openFirewall = mkEnableOption "firewall passthrough for haste-server";
15+
16+ settings = mkOption {
17+ description = ''
18+ Configuration for haste-server.
19+ For documentation see <link xlink:href="https://github.com/toptal/haste-server#settings">project readme</link>
20+ '';
21+ type = format.type;
22+ };
23+ };
24+
25+ config = mkIf (cfg.enable) {
26+ networking.firewall.allowedTCPPorts = mkIf (cfg.openFirewall) [ cfg.settings.port ];
27+
28+ services.haste-server = {
29+ settings = {
30+ host = mkDefault "::";
31+ port = mkDefault 7777;
32+
33+ keyLength = mkDefault 10;
34+ maxLength = mkDefault 400000;
35+
36+ staticMaxAge = mkDefault 86400;
37+ recompressStaticAssets = mkDefault false;
38+
39+ logging = mkDefault [
40+ {
41+ level = "verbose";
42+ type = "Console";
43+ colorize = true;
44+ }
45+ ];
46+
47+ keyGenerator = mkDefault {
48+ type = "phonetic";
49+ };
50+
51+ rateLimits = {
52+ categories = {
53+ normal = {
54+ totalRequests = mkDefault 500;
55+ every = mkDefault 60000;
56+ };
57+ };
58+ };
59+
60+ storage = mkDefault {
61+ type = "file";
62+ };
63+
64+ documents = {
65+ about = mkDefault "${pkg}/share/haste-server/about.md";
66+ };
67+ };
68+ };
69+
70+ systemd.services.haste-server = {
71+ wantedBy = [ "multi-user.target" ];
72+ requires = [ "network.target" ];
73+ after = [ "network.target" ];
74+
75+ serviceConfig = {
76+ User = "haste-server";
77+ DynamicUser = true;
78+ StateDirectory = "haste-server";
79+ WorkingDirectory = "/var/lib/haste-server";
80+ ExecStart = "${pkg}/bin/haste-server ${format.generate "config.json" cfg.settings}";
81+ };
82+
83+ path = with pkgs; [ pkg coreutils ];
84+ };
85+ };
86+}
nixos/modules/services/hardware/udev.nix+125−23
@@ -8,6 +8,24 @@ let
88
99 cfg = config.services.udev;
1010
11+ initrdUdevRules = pkgs.runCommand "initrd-udev-rules" {} ''
12+ mkdir -p $out/etc/udev/rules.d
13+ for f in 60-cdrom_id 60-persistent-storage 75-net-description 80-drivers 80-net-setup-link; do
14+ ln -s ${config.boot.initrd.systemd.package}/lib/udev/rules.d/$f.rules $out/etc/udev/rules.d
15+ done
16+ '';
17+
18+
19+ # networkd link files are used early by udev to set up interfaces early.
20+ # This must be done in stage 1 to avoid race conditions between udev and
21+ # network daemons.
22+ # TODO move this into the initrd-network module when it exists
23+ initrdLinkUnits = pkgs.runCommand "initrd-link-units" {} ''
24+ mkdir -p $out
25+ ln -s ${udev}/lib/systemd/network/*.link $out/
26+ ${lib.concatMapStringsSep "\n" (file: "ln -s ${file} $out/") (lib.mapAttrsToList (n: v: "${v.unit}/${n}") (lib.filterAttrs (n: _: hasSuffix ".link" n) config.systemd.network.units))}
27+ '';
28+
1129 extraUdevRules = pkgs.writeTextFile {
1230 name = "extra-udev-rules";
1331 text = cfg.extraRules;
@@ -23,17 +41,16 @@ let
2341 nixosRules = ''
2442 # Miscellaneous devices.
2543 KERNEL=="kvm", MODE="0666"
26− KERNEL=="kqemu", MODE="0666"
2744
2845 # Needed for gpm.
2946 SUBSYSTEM=="input", KERNEL=="mice", TAG+="systemd"
3047 '';
3148
3249 # Perform substitutions in all udev rules files.
33− udevRules = pkgs.runCommand "udev-rules"
50+ udevRulesFor = { name, udevPackages, udevPath, udev, systemd, binPackages, initrdBin ? null }: pkgs.runCommand name
3451 { preferLocalBuild = true;
3552 allowSubstitutes = false;
36− packages = unique (map toString cfg.packages);
53+ packages = unique (map toString udevPackages);
3754 }
3855 ''
3956 mkdir -p $out
@@ -61,6 +78,9 @@ let
6178 --replace \"/bin/mount \"${pkgs.util-linux}/bin/mount \
6279 --replace /usr/bin/readlink ${pkgs.coreutils}/bin/readlink \
6380 --replace /usr/bin/basename ${pkgs.coreutils}/bin/basename
81+ ${optionalString (initrdBin != null) ''
82+ substituteInPlace $i --replace '/run/current-system/systemd' "${removeSuffix "/bin" initrdBin}"
83+ ''}
6484 done
6585
6686 echo -n "Checking that all programs called by relative paths in udev rules exist in ${udev}/lib/udev... "
@@ -85,8 +105,9 @@ let
85105 for i in $import_progs $run_progs; do
86106 # if the path refers to /run/current-system/systemd, replace with config.systemd.package
87107 if [[ $i == /run/current-system/systemd* ]]; then
88− i="${config.systemd.package}/''${i#/run/current-system/systemd/}"
108+ i="${systemd}/''${i#/run/current-system/systemd/}"
89109 fi
110+
90111 if [[ ! -x $i ]]; then
91112 echo "FAIL"
92113 echo "$i is called in udev rules but is not executable or does not exist"
@@ -103,7 +124,7 @@ let
103124 echo "Consider fixing the following udev rules:"
104125 echo "$filesToFixup" | while read localFile; do
105126 remoteFile="origin unknown"
106− for i in ${toString cfg.packages}; do
127+ for i in ${toString binPackages}; do
107128 for j in "$i"/*/udev/rules.d/*; do
108129 [ -e "$out/$(basename "$j")" ] || continue
109130 [ "$(basename "$j")" = "$(basename "$localFile")" ] || continue
@@ -126,7 +147,7 @@ let
126147 ${optionalString (!config.boot.hardwareScan) ''
127148 ln -s /dev/null $out/80-drivers.rules
128149 ''}
129− ''; # */
150+ '';
130151
131152 hwdbBin = pkgs.runCommand "hwdb.bin"
132153 { preferLocalBuild = true;
@@ -202,20 +223,6 @@ in
202223 '';
203224 };
204225
205− initrdRules = mkOption {
206− default = "";
207− example = ''
208− SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1D:60:B9:6D:4F", KERNEL=="eth*", NAME="my_fast_network_card"
209− '';
210− type = types.lines;
211− description = ''
212− <command>udev</command> rules to include in the initrd
213− <emphasis>only</emphasis>. They'll be written into file
214− <filename>99-local.rules</filename>. Thus they are read and applied
215− after the essential initrd rules.
216− '';
217− };
218−
219226 extraRules = mkOption {
220227 default = "";
221228 example = ''
@@ -283,6 +290,52 @@ in
283290 '';
284291 };
285292
293+ boot.initrd.services.udev = {
294+
295+ packages = mkOption {
296+ type = types.listOf types.path;
297+ default = [];
298+ visible = false;
299+ description = ''
300+ <emphasis>This will only be used when systemd is used in stage 1.</emphasis>
301+
302+ List of packages containing <command>udev</command> rules that will be copied to stage 1.
303+ All files found in
304+ <filename><replaceable>pkg</replaceable>/etc/udev/rules.d</filename> and
305+ <filename><replaceable>pkg</replaceable>/lib/udev/rules.d</filename>
306+ will be included.
307+ '';
308+ };
309+
310+ binPackages = mkOption {
311+ type = types.listOf types.path;
312+ default = [];
313+ visible = false;
314+ description = ''
315+ <emphasis>This will only be used when systemd is used in stage 1.</emphasis>
316+
317+ Packages to search for binaries that are referenced by the udev rules in stage 1.
318+ This list always contains /bin of the initrd.
319+ '';
320+ apply = map getBin;
321+ };
322+
323+ rules = mkOption {
324+ default = "";
325+ example = ''
326+ SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1D:60:B9:6D:4F", KERNEL=="eth*", NAME="my_fast_network_card"
327+ '';
328+ type = types.lines;
329+ description = ''
330+ <command>udev</command> rules to include in the initrd
331+ <emphasis>only</emphasis>. They'll be written into file
332+ <filename>99-local.rules</filename>. Thus they are read and applied
333+ after the essential initrd rules.
334+ '';
335+ };
336+
337+ };
338+
286339 };
287340
288341
@@ -298,16 +351,61 @@ in
298351
299352 boot.kernelParams = mkIf (!config.networking.usePredictableInterfaceNames) [ "net.ifnames=0" ];
300353
301− boot.initrd.extraUdevRulesCommands = optionalString (cfg.initrdRules != "")
354+ boot.initrd.extraUdevRulesCommands = optionalString (!config.boot.initrd.systemd.enable && config.boot.initrd.services.udev.rules != "")
302355 ''
303356 cat <<'EOF' > $out/99-local.rules
304− ${cfg.initrdRules}
357+ ${config.boot.initrd.services.udev.rules}
305358 EOF
306359 '';
307360
361+ boot.initrd.systemd.additionalUpstreamUnits = [
362+ # TODO: "initrd-udevadm-cleanup-db.service" is commented out because of https://github.com/systemd/systemd/issues/12953
363+ "systemd-udevd-control.socket"
364+ "systemd-udevd-kernel.socket"
365+ "systemd-udevd.service"
366+ "systemd-udev-settle.service"
367+ "systemd-udev-trigger.service"
368+ ];
369+ boot.initrd.systemd.storePaths = [
370+ "${config.boot.initrd.systemd.package}/lib/systemd/systemd-udevd"
371+ "${config.boot.initrd.systemd.package}/lib/udev/ata_id"
372+ "${config.boot.initrd.systemd.package}/lib/udev/cdrom_id"
373+ "${config.boot.initrd.systemd.package}/lib/udev/scsi_id"
374+ "${config.boot.initrd.systemd.package}/lib/udev/rules.d"
375+ ] ++ map (x: "${x}/bin") config.boot.initrd.services.udev.binPackages;
376+
377+ # Generate the udev rules for the initrd
378+ boot.initrd.systemd.contents = {
379+ "/etc/udev/rules.d".source = udevRulesFor {
380+ name = "initrd-udev-rules";
381+ initrdBin = config.boot.initrd.systemd.contents."/bin".source;
382+ udevPackages = config.boot.initrd.services.udev.packages;
383+ udevPath = config.boot.initrd.systemd.contents."/bin".source;
384+ udev = config.boot.initrd.systemd.package;
385+ systemd = config.boot.initrd.systemd.package;
386+ binPackages = config.boot.initrd.services.udev.binPackages ++ [ config.boot.initrd.systemd.contents."/bin".source ];
387+ };
388+ "/etc/systemd/network".source = initrdLinkUnits;
389+ };
390+ # Insert initrd rules
391+ boot.initrd.services.udev.packages = [
392+ initrdUdevRules
393+ (mkIf (config.boot.initrd.services.udev.rules != "") (pkgs.writeTextFile {
394+ name = "initrd-udev-rules";
395+ destination = "/etc/udev/rules.d/99-local.rules";
396+ text = config.boot.initrd.services.udev.rules;
397+ }))
398+ ];
399+
308400 environment.etc =
309401 {
310− "udev/rules.d".source = udevRules;
402+ "udev/rules.d".source = udevRulesFor {
403+ name = "udev-rules";
404+ udevPackages = cfg.packages;
405+ systemd = config.systemd.package;
406+ binPackages = cfg.packages;
407+ inherit udevPath udev;
408+ };
311409 "udev/hwdb.bin".source = hwdbBin;
312410 };
313411
@@ -338,4 +436,8 @@ in
338436 };
339437
340438 };
439+
440+ imports = [
441+ (mkRenamedOptionModule [ "services" "udev" "initrdRules" ] [ "boot" "initrd" "services" "udev" "rules" ])
442+ ];
341443}
nixos/modules/services/hardware/udisks2.nix+39
@@ -4,6 +4,13 @@
44
55with lib;
66
7+let
8+ settingsFormat = pkgs.formats.ini {
9+ listToValue = concatMapStringsSep "," (generators.mkValueStringDefault {});
10+ };
11+ configFiles = mapAttrs (name: value: (settingsFormat.generate name value)) (mapAttrs' (name: value: nameValuePair name value ) config.services.udisks2.settings);
12+in
13+
714{
815
916 ###### interface
@@ -21,6 +28,36 @@ with lib;
2128 '';
2229 };
2330
31+ settings = mkOption rec {
32+ type = types.attrsOf settingsFormat.type;
33+ apply = recursiveUpdate default;
34+ default = {
35+ "udisks2.conf" = {
36+ udisks2 = {
37+ modules = [ "*" ];
38+ modules_load_preference = "ondemand";
39+ };
40+ defaults = {
41+ encryption = "luks2";
42+ };
43+ };
44+ };
45+ example = literalExpression ''
46+ {
47+ "WDC-WD10EZEX-60M2NA0-WD-WCC3F3SJ0698.conf" = {
48+ ATA = {
49+ StandbyTimeout = 50;
50+ };
51+ };
52+ };
53+ '';
54+ description = ''
55+ Options passed to udisksd.
56+ See <link xlink:href="http://manpages.ubuntu.com/manpages/latest/en/man5/udisks2.conf.5.html">here</link> and
57+ drive configuration in <link xlink:href="http://manpages.ubuntu.com/manpages/latest/en/man8/udisks.8.html">here</link> for supported options.
58+ '';
59+ };
60+
2461 };
2562
2663 };
@@ -32,6 +69,8 @@ with lib;
3269
3370 environment.systemPackages = [ pkgs.udisks2 ];
3471
72+ environment.etc = mapAttrs' (name: value: nameValuePair "udisks2/${name}" { source = value; } ) configFiles;
73+
3574 security.polkit.enable = true;
3675
3776 services.dbus.packages = [ pkgs.udisks2 ];
nixos/modules/services/hardware/usbrelayd.nixnew file+44
@@ -0,0 +1,44 @@
1+{ config, lib, pkgs, ... }:
2+with lib;
3+let
4+ cfg = config.services.usbrelayd;
5+in
6+{
7+ options.services.usbrelayd = with types; {
8+ enable = mkEnableOption "USB Relay MQTT daemon";
9+
10+ broker = mkOption {
11+ type = str;
12+ description = "Hostname or IP address of your MQTT Broker.";
13+ default = "127.0.0.1";
14+ example = [
15+ "mqtt"
16+ "192.168.1.1"
17+ ];
18+ };
19+
20+ clientName = mkOption {
21+ type = str;
22+ description = "Name, your client connects as.";
23+ default = "MyUSBRelay";
24+ };
25+ };
26+
27+ config = mkIf cfg.enable {
28+
29+ # TODO: Rename to .conf in upcomming release
30+ environment.etc."usbrelayd.ini".text = ''
31+ [MQTT]
32+ BROKER = ${cfg.broker}
33+ CLIENTNAME = ${cfg.clientName}
34+ '';
35+
36+ services.udev.packages = [ pkgs.usbrelayd ];
37+ systemd.packages = [ pkgs.usbrelayd ];
38+ users.users.usbrelay = {
39+ isSystemUser = true;
40+ group = "usbrelay";
41+ };
42+ users.groups.usbrelay = { };
43+ };
44+}
nixos/modules/services/logging/klogd.nix+6−35
@@ -1,38 +1,9 @@
1−{ config, lib, pkgs, ... }:
2−
3−with lib;
1+{ lib, ... }:
42
53{
6− ###### interface
7−
8− options = {
9−
10− services.klogd.enable = mkOption {
11− type = types.bool;
12− default = versionOlder (getVersion config.boot.kernelPackages.kernel) "3.5";
13− defaultText = literalExpression ''versionOlder (getVersion config.boot.kernelPackages.kernel) "3.5"'';
14− description = ''
15− Whether to enable klogd, the kernel log message processing
16− daemon. Since systemd handles logging of kernel messages on
17− Linux 3.5 and later, this is only useful if you're running an
18− older kernel.
19− '';
20− };
21−
22− };
23−
24−
25− ###### implementation
26−
27− config = mkIf config.services.klogd.enable {
28− systemd.services.klogd = {
29− description = "Kernel Log Daemon";
30− wantedBy = [ "multi-user.target" ];
31− path = [ pkgs.sysklogd ];
32− unitConfig.ConditionVirtualization = "!systemd-nspawn";
33− script =
34− "klogd -c 1 -2 -n " +
35− "-k $(dirname $(readlink -f /run/booted-system/kernel))/System.map";
36− };
37− };
4+ imports = [
5+ (lib.mkRemovedOptionModule [ "security" "klogd" "enable" ] ''
6+ Logging of kernel messages is now handled by systemd.
7+ '')
8+ ];
389}
nixos/modules/services/logging/logrotate.nix+251−27
@@ -5,7 +5,10 @@ with lib;
55let
66 cfg = config.services.logrotate;
77
8− pathOpts = { name, ... }: {
8+ # deprecated legacy compat settings
9+ # these options will be removed before 22.11 in the following PR:
10+ # https://github.com/NixOS/nixpkgs/pull/164169
11+ pathOpts = { name, ... }: {
912 options = {
1013 enable = mkOption {
1114 type = types.bool;
@@ -86,23 +89,113 @@ let
8689 config.name = name;
8790 };
8891
89− mkConf = pathOpts: ''
90− # generated by NixOS using the `services.logrotate.paths.${pathOpts.name}` attribute set
91− ${concatMapStringsSep " " (path: ''"${path}"'') (toList pathOpts.path)} {
92− ${optionalString (pathOpts.user != null || pathOpts.group != null) "su ${pathOpts.user} ${pathOpts.group}"}
93− ${pathOpts.frequency}
94− rotate ${toString pathOpts.keep}
95− ${pathOpts.extraConfig}
96− }
97− '';
98−
99− paths = sortProperties (attrValues (filterAttrs (_: pathOpts: pathOpts.enable) cfg.paths));
100− configFile = pkgs.writeText "logrotate.conf" (
101− concatStringsSep "\n" (
102− [ "missingok" "notifempty" cfg.extraConfig ] ++ (map mkConf paths)
103− )
92+ generateLine = n: v:
93+ if builtins.elem n [ "files" "priority" "enable" "global" ] || v == null then null
94+ else if builtins.elem n [ "extraConfig" "frequency" ] then "${v}\n"
95+ else if builtins.elem n [ "firstaction" "lastaction" "prerotate" "postrotate" "preremove" ]
96+ then "${n}\n ${v}\n endscript\n"
97+ else if isInt v then "${n} ${toString v}\n"
98+ else if v == true then "${n}\n"
99+ else if v == false then "no${n}\n"
100+ else "${n} ${v}\n";
101+ generateSection = indent: settings: concatStringsSep (fixedWidthString indent " " "") (
102+ filter (x: x != null) (mapAttrsToList generateLine settings)
104103 );
105104
105+ # generateSection includes a final newline hence weird closing brace
106+ mkConf = settings:
107+ if settings.global or false then generateSection 0 settings
108+ else ''
109+ ${concatMapStringsSep "\n" (files: ''"${files}"'') (toList settings.files)} {
110+ ${generateSection 2 settings}}
111+ '';
112+
113+ # below two mapPaths are compat functions
114+ mapPathOptToSetting = n: v:
115+ if n == "keep" then nameValuePair "rotate" v
116+ else if n == "path" then nameValuePair "files" v
117+ else nameValuePair n v;
118+
119+ mapPathsToSettings = path: pathOpts:
120+ nameValuePair path (
121+ filterAttrs (n: v: ! builtins.elem n [ "user" "group" "name" ] && v != "") (
122+ (mapAttrs' mapPathOptToSetting pathOpts) //
123+ {
124+ su =
125+ if pathOpts.user != null
126+ then "${pathOpts.user} ${pathOpts.group}"
127+ else null;
128+ }
129+ )
130+ );
131+
132+ settings = sortProperties (attrValues (filterAttrs (_: settings: settings.enable) (
133+ foldAttrs recursiveUpdate { } [
134+ {
135+ header = {
136+ enable = true;
137+ missingok = true;
138+ notifempty = true;
139+ frequency = "weekly";
140+ rotate = 4;
141+ };
142+ # compat section
143+ extraConfig = {
144+ enable = (cfg.extraConfig != "");
145+ global = true;
146+ extraConfig = cfg.extraConfig;
147+ priority = 101;
148+ };
149+ }
150+ (mapAttrs' mapPathsToSettings cfg.paths)
151+ cfg.settings
152+ { header = { global = true; priority = 100; }; }
153+ ]
154+ )));
155+ configFile = pkgs.writeTextFile {
156+ name = "logrotate.conf";
157+ text = concatStringsSep "\n" (
158+ map mkConf settings
159+ );
160+ checkPhase = optionalString cfg.checkConfig ''
161+ # logrotate --debug also checks that users specified in config
162+ # file exist, but we only have sandboxed users here so brown these
163+ # out. according to man page that means su, create and createolddir.
164+ # files required to exist also won't be present, so missingok is forced.
165+ user=$(${pkgs.buildPackages.coreutils}/bin/id -un)
166+ group=$(${pkgs.buildPackages.coreutils}/bin/id -gn)
167+ sed -e "s/\bsu\s.*/su $user $group/" \
168+ -e "s/\b\(create\s\+[0-9]*\s*\|createolddir\s\+[0-9]*\s\+\).*/\1$user $group/" \
169+ -e "1imissingok" -e "s/\bnomissingok\b//" \
170+ $out > /tmp/logrotate.conf
171+ # Since this makes for very verbose builds only show real error.
172+ # There is no way to control log level, but logrotate hardcodes
173+ # 'error:' at common log level, so we can use grep, taking care
174+ # to keep error codes
175+ set -o pipefail
176+ if ! ${pkgs.buildPackages.logrotate}/sbin/logrotate --debug /tmp/logrotate.conf 2>&1 \
177+ | ( ! grep "error:" ) > /tmp/logrotate-error; then
178+ echo "Logrotate configuration check failed."
179+ echo "The failing configuration (after adjustments to pass tests in sandbox) was:"
180+ printf "%s\n" "-------"
181+ cat /tmp/logrotate.conf
182+ printf "%s\n" "-------"
183+ echo "The error reported by logrotate was as follow:"
184+ printf "%s\n" "-------"
185+ cat /tmp/logrotate-error
186+ printf "%s\n" "-------"
187+ echo "You can disable this check with services.logrotate.checkConfig = false,"
188+ echo "but if you think it should work please report this failure along with"
189+ echo "the config file being tested!"
190+ false
191+ fi
192+ '';
193+ };
194+
195+ mailOption =
196+ if foldr (n: a: a || n ? mail) false (attrValues cfg.settings)
197+ then "--mail=${pkgs.mailutils}/bin/mail"
198+ else "";
106199in
107200{
108201 imports = [
@@ -112,17 +205,121 @@ in
112205 options = {
113206 services.logrotate = {
114207 enable = mkEnableOption "the logrotate systemd service" // {
115− default = foldr (n: a: a || n.enable) false (attrValues cfg.paths);
116− defaultText = literalExpression "cfg.paths != {}";
208+ default = foldr (n: a: a || n.enable) false (attrValues cfg.settings);
209+ defaultText = literalExpression "cfg.settings != {}";
210+ };
211+
212+ settings = mkOption {
213+ default = { };
214+ description = ''
215+ logrotate freeform settings: each attribute here will define its own section,
216+ ordered by priority, which can either define files to rotate with their settings
217+ or settings common to all further files settings.
218+ Refer to <link xlink:href="https://linux.die.net/man/8/logrotate"/> for details.
219+ '';
220+ type = types.attrsOf (types.submodule ({ name, ... }: {
221+ freeformType = with types; attrsOf (nullOr (oneOf [ int bool str ]));
222+
223+ options = {
224+ enable = mkEnableOption "setting individual kill switch" // {
225+ default = true;
226+ };
227+
228+ global = mkOption {
229+ type = types.bool;
230+ default = false;
231+ description = ''
232+ Whether this setting is a global option or not: set to have these
233+ settings apply to all files settings with a higher priority.
234+ '';
235+ };
236+ files = mkOption {
237+ type = with types; either str (listOf str);
238+ default = name;
239+ defaultText = ''
240+ The attrset name if not specified
241+ '';
242+ description = ''
243+ Single or list of files for which rules are defined.
244+ The files are quoted with double-quotes in logrotate configuration,
245+ so globs and spaces are supported.
246+ Note this setting is ignored if globals is true.
247+ '';
248+ };
249+
250+ frequency = mkOption {
251+ type = types.nullOr types.str;
252+ default = null;
253+ description = ''
254+ How often to rotate the logs. Defaults to previously set global setting,
255+ which itself defauts to weekly.
256+ '';
257+ };
258+
259+ priority = mkOption {
260+ type = types.int;
261+ default = 1000;
262+ description = ''
263+ Order of this logrotate block in relation to the others. The semantics are
264+ the same as with `lib.mkOrder`. Smaller values are inserted first.
265+ '';
266+ };
267+ };
268+
269+ }));
270+ };
271+
272+ configFile = mkOption {
273+ type = types.path;
274+ default = configFile;
275+ defaultText = ''
276+ A configuration file automatically generated by NixOS.
277+ '';
278+ description = ''
279+ Override the configuration file used by MySQL. By default,
280+ NixOS generates one automatically from <xref linkend="opt-services.logrotate.settings"/>.
281+ '';
282+ example = literalExpression ''
283+ pkgs.writeText "logrotate.conf" '''
284+ missingok
285+ "/var/log/*.log" {
286+ rotate 4
287+ weekly
288+ }
289+ ''';
290+ '';
117291 };
118292
293+ checkConfig = mkOption {
294+ type = types.bool;
295+ default = true;
296+ description = ''
297+ Whether the config should be checked at build time.
298+
299+ Some options are not checkable at build time because of the build sandbox:
300+ for example, the test does not know about existing files and system users are
301+ not known.
302+ These limitations mean we must adjust the file for tests (missingok is forced
303+ and users are replaced by dummy users), so tests are complemented by a
304+ logrotate-checkconf service that is enabled by default.
305+ This extra check can be disabled by disabling it at the systemd level with the
306+ <option>services.systemd.services.logrotate-checkconf.enable</option> option.
307+
308+ Conversely there are still things that might make this check fail incorrectly
309+ (e.g. a file path where we don't have access to intermediate directories):
310+ in this case you can disable the failing check with this option.
311+ '';
312+ };
313+
314+ # deprecated legacy compat settings
119315 paths = mkOption {
120316 type = with types; attrsOf (submodule pathOpts);
121− default = {};
317+ default = { };
122318 description = ''
123319 Attribute set of paths to rotate. The order each block appears in the generated configuration file
124320 can be controlled by the <link linkend="opt-services.logrotate.paths._name_.priority">priority</link> option
125321 using the same semantics as `lib.mkOrder`. Smaller values have a greater priority.
322+ This setting has been deprecated in favor of <link linkend="opt-services.logrotate.settings">logrotate settings</link>.
126323 '';
127324 example = literalExpression ''
128325 {
@@ -151,19 +348,37 @@ in
151348 description = ''
152349 Extra contents to append to the logrotate configuration file. Refer to
153350 <link xlink:href="https://linux.die.net/man/8/logrotate"/> for details.
351+ This setting has been deprecated in favor of
352+ <link linkend="opt-services.logrotate.settings">logrotate settings</link>.
154353 '';
155354 };
156355 };
157356 };
158357
159358 config = mkIf cfg.enable {
160− assertions = mapAttrsToList (name: pathOpts:
161− { assertion = (pathOpts.user != null) == (pathOpts.group != null);
162− message = ''
163− If either of `services.logrotate.paths.${name}.user` or `services.logrotate.paths.${name}.group` are specified then *both* must be specified.
164− '';
165− }
166− ) cfg.paths;
359+ assertions =
360+ mapAttrsToList
361+ (name: pathOpts:
362+ {
363+ assertion = (pathOpts.user != null) == (pathOpts.group != null);
364+ message = ''
365+ If either of `services.logrotate.paths.${name}.user` or `services.logrotate.paths.${name}.group` are specified then *both* must be specified.
366+ '';
367+ })
368+ cfg.paths;
369+
370+ warnings =
371+ (mapAttrsToList
372+ (name: pathOpts: ''
373+ Using config.services.logrotate.paths.${name} is deprecated and will become unsupported in a future release.
374+ Please use services.logrotate.settings instead.
375+ '')
376+ cfg.paths
377+ ) ++
378+ (optional (cfg.extraConfig != "") ''
379+ Using config.services.logrotate.extraConfig is deprecated and will become unsupported in a future release.
380+ Please use services.logrotate.settings with globals=true instead.
381+ '');
167382
168383 systemd.services.logrotate = {
169384 description = "Logrotate Service";
@@ -172,7 +387,16 @@ in
172387 serviceConfig = {
173388 Restart = "no";
174389 User = "root";
175− ExecStart = "${pkgs.logrotate}/sbin/logrotate ${configFile}";
390+ ExecStart = "${pkgs.logrotate}/sbin/logrotate ${mailOption} ${cfg.configFile}";
391+ };
392+ };
393+ systemd.services.logrotate-checkconf = {
394+ description = "Logrotate configuration check";
395+ wantedBy = [ "multi-user.target" ];
396+ serviceConfig = {
397+ Type = "oneshot";
398+ RemainAfterExit = true;
399+ ExecStart = "${pkgs.logrotate}/sbin/logrotate --debug ${cfg.configFile}";
176400 };
177401 };
178402 };
nixos/modules/services/mail/mailman.nix+14−7
@@ -192,7 +192,6 @@ in {
192192 log_dir = "/var/log/mailman";
193193 lock_dir = "$var_dir/lock";
194194 etc_dir = "/etc";
195− ext_dir = "$etc_dir/mailman.d";
196195 pid_file = "/run/mailman/master.pid";
197196 };
198197
@@ -225,7 +224,14 @@ in {
225224 See <https://mailman.readthedocs.io/en/latest/src/mailman/docs/mta.html>.
226225 '';
227226 };
228− in (lib.optionals cfg.enablePostfix [
227+ in [
228+ { assertion = cfg.webHosts != [];
229+ message = ''
230+ services.mailman.serve.enable requires there to be at least one entry
231+ in services.mailman.webHosts.
232+ '';
233+ }
234+ ] ++ (lib.optionals cfg.enablePostfix [
229235 { assertion = postfix.enable;
230236 message = ''
231237 Mailman's default NixOS configuration requires Postfix to be enabled.
@@ -275,15 +281,14 @@ in {
275281 globals().update(json.load(f))
276282 '';
277283
278− services.nginx = mkIf cfg.serve.enable {
284+ services.nginx = mkIf (cfg.serve.enable && cfg.webHosts != []) {
279285 enable = mkDefault true;
280− virtualHosts."${lib.head cfg.webHosts}" = {
281− serverAliases = cfg.webHosts;
286+ virtualHosts = lib.genAttrs cfg.webHosts (webHost: {
282287 locations = {
283288 "/".extraConfig = "uwsgi_pass unix:/run/mailman-web.socket;";
284289 "/static/".alias = webSettings.STATIC_ROOT + "/";
285290 };
286− };
291+ });
287292 };
288293
289294 environment.systemPackages = [ (pkgs.buildEnv {
@@ -313,7 +318,9 @@ in {
313318 systemd.services = {
314319 mailman = {
315320 description = "GNU Mailman Master Process";
316− after = [ "network.target" ];
321+ before = lib.optional cfg.enablePostfix "postfix.service";
322+ after = [ "network.target" ]
323+ ++ lib.optional cfg.enablePostfix "postfix-setup.service";
317324 restartTriggers = [ config.environment.etc."mailman.cfg".source ];
318325 wantedBy = [ "multi-user.target" ];
319326 serviceConfig = {
nixos/modules/services/mail/postfix.nix+22−17
@@ -723,23 +723,10 @@ in
723723 { ${setgidGroup}.gid = config.ids.gids.postdrop;
724724 };
725725
726− systemd.services.postfix =
727− { description = "Postfix mail server";
728−
729− wantedBy = [ "multi-user.target" ];
730− after = [ "network.target" ];
731− path = [ pkgs.postfix ];
732−
733− serviceConfig = {
734− Type = "forking";
735− Restart = "always";
736− PIDFile = "/var/lib/postfix/queue/pid/master.pid";
737− ExecStart = "${pkgs.postfix}/bin/postfix start";
738− ExecStop = "${pkgs.postfix}/bin/postfix stop";
739− ExecReload = "${pkgs.postfix}/bin/postfix reload";
740− };
741−
742− preStart = ''
726+ systemd.services.postfix-setup =
727+ { description = "Setup for Postfix mail server";
728+ serviceConfig.Type = "oneshot";
729+ script = ''
743730 # Backwards compatibility
744731 if [ ! -d /var/lib/postfix ] && [ -d /var/postfix ]; then
745732 mkdir -p /var/lib
@@ -777,6 +764,24 @@ in
777764 '';
778765 };
779766
767+ systemd.services.postfix =
768+ { description = "Postfix mail server";
769+
770+ wantedBy = [ "multi-user.target" ];
771+ after = [ "network.target" "postfix-setup.service" ];
772+ requires = [ "postfix-setup.service" ];
773+ path = [ pkgs.postfix ];
774+
775+ serviceConfig = {
776+ Type = "forking";
777+ Restart = "always";
778+ PIDFile = "/var/lib/postfix/queue/pid/master.pid";
779+ ExecStart = "${pkgs.postfix}/bin/postfix start";
780+ ExecStop = "${pkgs.postfix}/bin/postfix stop";
781+ ExecReload = "${pkgs.postfix}/bin/postfix reload";
782+ };
783+ };
784+
780785 services.postfix.config = (mapAttrs (_: v: mkDefault v) {
781786 compatibility_level = pkgs.postfix.version;
782787 mail_owner = cfg.user;
nixos/modules/services/matrix/matrix-synapse.nix+1−1
@@ -81,7 +81,7 @@ in {
8181 (mkRemovedOptionModule [ "services" "matrix-synapse" "verbose" ] "Use a log config instead." )
8282
8383 # options that were moved into rfc42 style settigns
84− (mkRemovedOptionModule [ "services" "matrix-synapse" "app_service_config_files" ] "Use settings.app_service_config_Files instead" )
84+ (mkRemovedOptionModule [ "services" "matrix-synapse" "app_service_config_files" ] "Use settings.app_service_config_files instead" )
8585 (mkRemovedOptionModule [ "services" "matrix-synapse" "database_args" ] "Use settings.database.args instead" )
8686 (mkRemovedOptionModule [ "services" "matrix-synapse" "database_name" ] "Use settings.database.args.database instead" )
8787 (mkRemovedOptionModule [ "services" "matrix-synapse" "database_type" ] "Use settings.database.name instead" )
nixos/modules/services/misc/dendrite.nix+1
@@ -247,6 +247,7 @@ in
247247 WorkingDirectory = workingDir;
248248 RuntimeDirectory = "dendrite";
249249 RuntimeDirectoryMode = "0700";
250+ LimitNOFILE = 65535;
250251 EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile;
251252 ExecStartPre = ''
252253 ${pkgs.envsubst}/bin/envsubst \
nixos/modules/services/misc/etebase-server.nix+1−1
@@ -166,7 +166,7 @@ in
166166 } ''
167167 makeWrapper ${pythonEnv}/bin/etebase-server \
168168 $out/bin/etebase-server \
169− --run "cd ${cfg.dataDir}" \
169+ --chdir ${escapeShellArg cfg.dataDir} \
170170 --prefix ETEBASE_EASY_CONFIG_PATH : "${configIni}"
171171 '')
172172 ];
nixos/modules/services/misc/ethminer.nix+4−4
@@ -22,7 +22,7 @@ in
2222 };
2323
2424 recheckInterval = mkOption {
25− type = types.int;
25+ type = types.ints.unsigned;
2626 default = 2000;
2727 description = "Interval in milliseconds between farm rechecks.";
2828 };
@@ -70,7 +70,7 @@ in
7070 };
7171
7272 maxPower = mkOption {
73− type = types.int;
73+ type = types.ints.unsigned;
7474 default = 113;
7575 description = "Miner max watt usage.";
7676 };
@@ -85,7 +85,7 @@ in
8585 config = mkIf cfg.enable {
8686
8787 systemd.services.ethminer = {
88− path = [ pkgs.cudatoolkit ];
88+ path = optional (cfg.toolkit == "cuda") [ pkgs.cudaPackages.cudatoolkit ];
8989 description = "ethminer ethereum mining service";
9090 wantedBy = [ "multi-user.target" ];
9191 after = [ "network.target" ];
@@ -97,7 +97,7 @@ in
9797 Restart = "always";
9898 };
9999
100− environment = {
100+ environment = mkIf (cfg.toolkit == "cuda") {
101101 LD_LIBRARY_PATH = "${config.boot.kernelPackages.nvidia_x11}/lib";
102102 };
103103
nixos/modules/services/misc/gitea.nix+11−16
@@ -499,6 +499,7 @@ in
499499 oldLfsJwtSecret = "${cfg.stateDir}/custom/conf/jwt_secret"; # old file for LFS_JWT_SECRET
500500 lfsJwtSecret = "${cfg.stateDir}/custom/conf/lfs_jwt_secret"; # new file for LFS_JWT_SECRET
501501 internalToken = "${cfg.stateDir}/custom/conf/internal_token";
502+ replaceSecretBin = "${pkgs.replace-secret}/bin/replace-secret";
502503 in ''
503504 # copy custom configuration and generate a random secret key if needed
504505 ${optionalString (cfg.useWizard == false) ''
@@ -526,23 +527,17 @@ in
526527 ${gitea}/bin/gitea generate secret INTERNAL_TOKEN > ${internalToken}
527528 fi
528529
529− SECRETKEY="$(head -n1 ${secretKey})"
530− DBPASS="$(head -n1 ${cfg.database.passwordFile})"
531− OAUTH2JWTSECRET="$(head -n1 ${oauth2JwtSecret})"
532− LFSJWTSECRET="$(head -n1 ${lfsJwtSecret})"
533− INTERNALTOKEN="$(head -n1 ${internalToken})"
534− ${if (cfg.mailerPasswordFile == null) then ''
535− MAILERPASSWORD="#mailerpass#"
536− '' else ''
537− MAILERPASSWORD="$(head -n1 ${cfg.mailerPasswordFile} || :)"
530+ chmod u+w '${runConfig}'
531+ ${replaceSecretBin} '#secretkey#' '${secretKey}' '${runConfig}'
532+ ${replaceSecretBin} '#dbpass#' '${cfg.database.passwordFile}' '${runConfig}'
533+ ${replaceSecretBin} '#oauth2jwtsecret#' '${oauth2JwtSecret}' '${runConfig}'
534+ ${replaceSecretBin} '#lfsjwtsecret#' '${lfsJwtSecret}' '${runConfig}'
535+ ${replaceSecretBin} '#internaltoken#' '${internalToken}' '${runConfig}'
536+
537+ ${lib.optionalString (cfg.mailerPasswordFile != null) ''
538+ ${replaceSecretBin} '#mailerpass#' '${cfg.mailerPasswordFile}' '${runConfig}'
538539 ''}
539− sed -e "s,#secretkey#,$SECRETKEY,g" \
540− -e "s,#dbpass#,$DBPASS,g" \
541− -e "s,#oauth2jwtsecret#,$OAUTH2JWTSECRET,g" \
542− -e "s,#lfsjwtsecret#,$LFSJWTSECRET,g" \
543− -e "s,#internaltoken#,$INTERNALTOKEN,g" \
544− -e "s,#mailerpass#,$MAILERPASSWORD,g" \
545− -i ${runConfig}
540+ chmod u-w '${runConfig}'
546541 }
547542 (umask 027; gitea_setup)
548543 ''}
nixos/modules/services/misc/gitit.nix+1−1
@@ -10,7 +10,7 @@ let
1010
1111 toYesNo = b: if b then "yes" else "no";
1212
13− gititShared = with cfg.haskellPackages; gitit + "/share/" + pkgs.stdenv.hostPlatform.system + "-" + ghc.name + "/" + gitit.pname + "-" + gitit.version;
13+ gititShared = with cfg.haskellPackages; gitit + "/share/" + ghc.targetPrefix + ghc.haskellCompilerName + "/" + gitit.pname + "-" + gitit.version;
1414
1515 gititWithPkgs = hsPkgs: extras: hsPkgs.ghcWithPackages (self: with self; [ gitit ] ++ (extras self));
1616
nixos/modules/services/misc/gitlab.nix+9−11
@@ -179,7 +179,7 @@ let
179179 ${concatStrings (mapAttrsToList (name: value: "--set ${name} '${value}' ") gitlabEnv)} \
180180 --set PATH '${lib.makeBinPath [ pkgs.nodejs pkgs.gzip pkgs.git pkgs.gnutar postgresqlPackage pkgs.coreutils pkgs.procps ]}:$PATH' \
181181 --set RAKEOPT '-f ${cfg.packages.gitlab}/share/gitlab/Rakefile' \
182− --run 'cd ${cfg.packages.gitlab}/share/gitlab'
182+ --chdir '${cfg.packages.gitlab}/share/gitlab'
183183 '';
184184 };
185185
@@ -193,7 +193,7 @@ let
193193 makeWrapper ${cfg.packages.gitlab.rubyEnv}/bin/rails $out/bin/gitlab-rails \
194194 ${concatStrings (mapAttrsToList (name: value: "--set ${name} '${value}' ") gitlabEnv)} \
195195 --set PATH '${lib.makeBinPath [ pkgs.nodejs pkgs.gzip pkgs.git pkgs.gnutar postgresqlPackage pkgs.coreutils pkgs.procps ]}:$PATH' \
196− --run 'cd ${cfg.packages.gitlab}/share/gitlab'
196+ --chdir '${cfg.packages.gitlab}/share/gitlab'
197197 '';
198198 };
199199
@@ -848,10 +848,7 @@ in {
848848
849849 extraConfig = mkOption {
850850 type = types.lines;
851− default = ''
852− copytruncate
853− compress
854− '';
851+ default = "";
855852 description = ''
856853 Extra logrotate config options for this path. Refer to
857854 <link xlink:href="https://linux.die.net/man/8/logrotate"/> for details.
@@ -977,13 +974,14 @@ in {
977974 # Enable rotation of log files
978975 services.logrotate = {
979976 enable = cfg.logrotate.enable;
980− paths = {
977+ settings = {
981978 gitlab = {
982− path = "${cfg.statePath}/log/*.log";
983− user = cfg.user;
984− group = cfg.group;
979+ files = "${cfg.statePath}/log/*.log";
980+ su = "${cfg.user} ${cfg.group}";
985981 frequency = cfg.logrotate.frequency;
986− keep = cfg.logrotate.keep;
982+ rotate = cfg.logrotate.keep;
983+ copytruncate = true;
984+ compress = true;
987985 extraConfig = cfg.logrotate.extraConfig;
988986 };
989987 };
nixos/modules/services/misc/nix-daemon.nix+8
@@ -708,6 +708,14 @@ in
708708
709709 systemd.packages = [ nixPackage ];
710710
711+ # Will only work once https://github.com/NixOS/nix/pull/6285 is merged
712+ # systemd.tmpfiles.packages = [ nixPackage ];
713+
714+ # Can be dropped for Nix > https://github.com/NixOS/nix/pull/6285
715+ systemd.tmpfiles.rules = [
716+ "d /nix/var/nix/daemon-socket 0755 root root - -"
717+ ];
718+
711719 systemd.sockets.nix-daemon.wantedBy = [ "sockets.target" ];
712720
713721 systemd.services.nix-daemon =
nixos/modules/services/misc/paperless-ng.nix → nixos/modules/services/misc/paperless.nixrenamed+49−51
@@ -2,11 +2,13 @@
22
33with lib;
44let
5− cfg = config.services.paperless-ng;
5+ cfg = config.services.paperless;
66
77 defaultUser = "paperless";
88
9− hasCustomRedis = hasAttr "PAPERLESS_REDIS" cfg.extraConfig;
9+ # Don't start a redis instance if the user sets a custom redis connection
10+ enableRedis = !hasAttr "PAPERLESS_REDIS" cfg.extraConfig;
11+ redisServer = config.services.redis.servers.paperless;
1012
1113 env = {
1214 PAPERLESS_DATA_DIR = cfg.dataDir;
@@ -15,15 +17,15 @@ let
1517 GUNICORN_CMD_ARGS = "--bind=${cfg.address}:${toString cfg.port}";
1618 } // (
1719 lib.mapAttrs (_: toString) cfg.extraConfig
18− ) // (optionalAttrs (!hasCustomRedis) {
19− PAPERLESS_REDIS = "unix://${config.services.redis.servers.paperless-ng.unixSocket}";
20+ ) // (optionalAttrs enableRedis {
21+ PAPERLESS_REDIS = "unix://${redisServer.unixSocket}";
2022 });
2123
2224 manage = let
2325 setupEnv = lib.concatStringsSep "\n" (mapAttrsToList (name: val: "export ${name}=\"${val}\"") env);
2426 in pkgs.writeShellScript "manage" ''
2527 ${setupEnv}
26− exec ${cfg.package}/bin/paperless-ng "$@"
28+ exec ${cfg.package}/bin/paperless-ngx "$@"
2729 '';
2830
2931 # Secure the services
@@ -36,7 +38,7 @@ let
3638 "-/etc/hosts"
3739 "-/etc/localtime"
3840 "-/run/postgresql"
39− ] ++ (optional (!hasCustomRedis) config.services.redis.servers.paperless-ng.unixSocket);
41+ ] ++ (optional enableRedis redisServer.unixSocket);
4042 BindPaths = [
4143 cfg.consumptionDir
4244 cfg.dataDir
@@ -53,7 +55,6 @@ let
5355 PrivateNetwork = true;
5456 PrivateTmp = true;
5557 PrivateUsers = true;
56− ProcSubset = "pid";
5758 ProtectClock = true;
5859 # Breaks if the home dir of the user is in /home
5960 # Also does not add much value in combination with the TemporaryFileSystem.
@@ -66,11 +67,15 @@ let
6667 ProtectKernelModules = true;
6768 ProtectKernelTunables = true;
6869 ProtectProc = "invisible";
70+ # Don't restrict ProcSubset because django-q requires read access to /proc/stat
71+ # to query CPU and memory information.
72+ # Note that /proc only contains processes of user `paperless`, so this is safe.
73+ # ProcSubset = "pid";
6974 RestrictAddressFamilies = [ "AF_UNIX" "AF_INET" "AF_INET6" ];
7075 RestrictNamespaces = true;
7176 RestrictRealtime = true;
7277 RestrictSUIDSGID = true;
73− SupplementaryGroups = optional (!hasCustomRedis) config.services.redis.servers.paperless-ng.user;
78+ SupplementaryGroups = optional enableRedis redisServer.user;
7479 SystemCallArchitectures = "native";
7580 SystemCallFilter = [ "@system-service" "~@privileged @resources @setuid @keyring" ];
7681 # Does not work well with the temporary root
@@ -81,26 +86,22 @@ in
8186 meta.maintainers = with maintainers; [ earvstedt Flakebi ];
8287
8388 imports = [
84− (mkRemovedOptionModule [ "services" "paperless"] ''
85− The paperless module has been removed as the upstream project died.
86− Users should migrate to the paperless-ng module (services.paperless-ng).
87− More information can be found in the NixOS 21.11 release notes.
88− '')
89+ (mkRenamedOptionModule [ "services" "paperless-ng" ] [ "services" "paperless" ])
8990 ];
9091
91− options.services.paperless-ng = {
92+ options.services.paperless = {
9293 enable = mkOption {
9394 type = lib.types.bool;
9495 default = false;
9596 description = ''
96− Enable Paperless-ng.
97+ Enable Paperless.
9798
9899 When started, the Paperless database is automatically created if it doesn't
99100 exist and updated if the Paperless package has changed.
100101 Both tasks are achieved by running a Django migration.
101102
102103 A script to manage the Paperless instance (by wrapping Django's manage.py) is linked to
103− <literal>''${dataDir}/paperless-ng-manage</literal>.
104+ <literal>''${dataDir}/paperless-manage</literal>.
104105 '';
105106 };
106107
@@ -133,13 +134,13 @@ in
133134 passwordFile = mkOption {
134135 type = types.nullOr types.path;
135136 default = null;
136− example = "/run/keys/paperless-ng-password";
137+ example = "/run/keys/paperless-password";
137138 description = ''
138139 A file containing the superuser password.
139140
140141 A superuser is required to access the web interface.
141142 If unset, you can create a superuser manually by running
142− <literal>''${dataDir}/paperless-ng-manage createsuperuser</literal>.
143+ <literal>''${dataDir}/paperless-manage createsuperuser</literal>.
143144
144145 The default superuser name is <literal>admin</literal>. To change it, set
145146 option <option>extraConfig.PAPERLESS_ADMIN_USER</option>.
@@ -168,9 +169,9 @@ in
168169 type = types.attrs;
169170 default = {};
170171 description = ''
171− Extra paperless-ng config options.
172+ Extra paperless config options.
172173
173− See <link xlink:href="https://paperless-ng.readthedocs.io/en/latest/configuration.html">the documentation</link>
174+ See <link xlink:href="https://paperless-ngx.readthedocs.io/en/latest/configuration.html">the documentation</link>
174175 for available options.
175176 '';
176177 example = literalExpression ''
@@ -188,15 +189,14 @@ in
188189
189190 package = mkOption {
190191 type = types.package;
191− default = pkgs.paperless-ng;
192− defaultText = literalExpression "pkgs.paperless-ng";
192+ default = pkgs.paperless-ngx;
193+ defaultText = literalExpression "pkgs.paperless-ngx";
193194 description = "The Paperless package to use.";
194195 };
195196 };
196197
197198 config = mkIf cfg.enable {
198− # Enable redis if no special url is set
199− services.redis.servers.paperless-ng.enable = mkIf (!hasCustomRedis) true;
199+ services.redis.servers.paperless.enable = mkIf enableRedis true;
200200
201201 systemd.tmpfiles.rules = [
202202 "d '${cfg.dataDir}' - ${cfg.user} ${config.users.users.${cfg.user}.group} - -"
@@ -208,11 +208,11 @@ in
208208 )
209209 ];
210210
211− systemd.services.paperless-ng-server = {
212− description = "Paperless document server";
211+ systemd.services.paperless-scheduler = {
212+ description = "Paperless scheduler";
213213 serviceConfig = defaultServiceConfig // {
214214 User = cfg.user;
215− ExecStart = "${cfg.package}/bin/paperless-ng qcluster";
215+ ExecStart = "${cfg.package}/bin/paperless-ngx qcluster";
216216 Restart = "on-failure";
217217 # The `mbind` syscall is needed for running the classifier.
218218 SystemCallFilter = defaultServiceConfig.SystemCallFilter ++ [ "mbind" ];
@@ -221,15 +221,15 @@ in
221221 };
222222 environment = env;
223223 wantedBy = [ "multi-user.target" ];
224− wants = [ "paperless-ng-consumer.service" "paperless-ng-web.service" ];
224+ wants = [ "paperless-consumer.service" "paperless-web.service" ];
225225
226226 preStart = ''
227− ln -sf ${manage} ${cfg.dataDir}/paperless-ng-manage
227+ ln -sf ${manage} ${cfg.dataDir}/paperless-manage
228228
229229 # Auto-migrate on first run or if the package has changed
230230 versionFile="${cfg.dataDir}/src-version"
231231 if [[ $(cat "$versionFile" 2>/dev/null) != ${cfg.package} ]]; then
232− ${cfg.package}/bin/paperless-ng migrate
232+ ${cfg.package}/bin/paperless-ngx migrate
233233 echo ${cfg.package} > "$versionFile"
234234 fi
235235 ''
@@ -240,20 +240,18 @@ in
240240 superuserStateFile="${cfg.dataDir}/superuser-state"
241241
242242 if [[ $(cat "$superuserStateFile" 2>/dev/null) != $superuserState ]]; then
243− ${cfg.package}/bin/paperless-ng manage_superuser
243+ ${cfg.package}/bin/paperless-ngx manage_superuser
244244 echo "$superuserState" > "$superuserStateFile"
245245 fi
246246 '';
247− } // optionalAttrs (!hasCustomRedis) {
248− after = [ "redis-paperless-ng.service" ];
247+ } // optionalAttrs enableRedis {
248+ after = [ "redis-paperless.service" ];
249249 };
250250
251− # Password copying can't be implemented as a privileged preStart script
252− # in 'paperless-ng-server' because 'defaultServiceConfig' limits the filesystem
253− # paths accessible by the service.
254− systemd.services.paperless-ng-copy-password = mkIf (cfg.passwordFile != null) {
255− requiredBy = [ "paperless-ng-server.service" ];
256− before = [ "paperless-ng-server.service" ];
251+ # Reading the user-provided password file requires root access
252+ systemd.services.paperless-copy-password = mkIf (cfg.passwordFile != null) {
253+ requiredBy = [ "paperless-scheduler.service" ];
254+ before = [ "paperless-scheduler.service" ];
257255 serviceConfig = {
258256 ExecStart = ''
259257 ${pkgs.coreutils}/bin/install --mode 600 --owner '${cfg.user}' --compare \
@@ -263,27 +261,27 @@ in
263261 };
264262 };
265263
266− systemd.services.paperless-ng-consumer = {
264+ systemd.services.paperless-consumer = {
267265 description = "Paperless document consumer";
268266 serviceConfig = defaultServiceConfig // {
269267 User = cfg.user;
270− ExecStart = "${cfg.package}/bin/paperless-ng document_consumer";
268+ ExecStart = "${cfg.package}/bin/paperless-ngx document_consumer";
271269 Restart = "on-failure";
272270 };
273271 environment = env;
274− # Bind to `paperless-ng-server` so that the consumer never runs
272+ # Bind to `paperless-scheduler` so that the consumer never runs
275273 # during migrations
276− bindsTo = [ "paperless-ng-server.service" ];
277− after = [ "paperless-ng-server.service" ];
274+ bindsTo = [ "paperless-scheduler.service" ];
275+ after = [ "paperless-scheduler.service" ];
278276 };
279277
280− systemd.services.paperless-ng-web = {
278+ systemd.services.paperless-web = {
281279 description = "Paperless web server";
282280 serviceConfig = defaultServiceConfig // {
283281 User = cfg.user;
284282 ExecStart = ''
285283 ${pkgs.python3Packages.gunicorn}/bin/gunicorn \
286− -c ${cfg.package}/lib/paperless-ng/gunicorn.conf.py paperless.asgi:application
284+ -c ${cfg.package}/lib/paperless-ngx/gunicorn.conf.py paperless.asgi:application
287285 '';
288286 Restart = "on-failure";
289287
@@ -296,15 +294,15 @@ in
296294 };
297295 environment = env // {
298296 PATH = mkForce cfg.package.path;
299− PYTHONPATH = "${cfg.package.pythonPath}:${cfg.package}/lib/paperless-ng/src";
297+ PYTHONPATH = "${cfg.package.pythonPath}:${cfg.package}/lib/paperless-ngx/src";
300298 };
301299 # Allow the web interface to access the private /tmp directory of the server.
302300 # This is required to support uploading files via the web interface.
303− unitConfig.JoinsNamespaceOf = "paperless-ng-server.service";
304− # Bind to `paperless-ng-server` so that the web server never runs
301+ unitConfig.JoinsNamespaceOf = "paperless-scheduler.service";
302+ # Bind to `paperless-scheduler` so that the web server never runs
305303 # during migrations
306− bindsTo = [ "paperless-ng-server.service" ];
307− after = [ "paperless-ng-server.service" ];
304+ bindsTo = [ "paperless-scheduler.service" ];
305+ after = [ "paperless-scheduler.service" ];
308306 };
309307
310308 users = optionalAttrs (cfg.user == defaultUser) {
nixos/modules/services/misc/sourcehut/default.nix+1−1
@@ -1018,7 +1018,7 @@ in
10181018 inherit configIniOfService;
10191019 mainService = mkMerge [ baseService {
10201020 serviceConfig.StateDirectory = [ "sourcehut/gitsrht" "sourcehut/gitsrht/repos" ];
1021− preStart = mkIf (!versionAtLeast config.system.stateVersion "22.05") (mkBefore ''
1021+ preStart = mkIf (versionOlder config.system.stateVersion "22.05") (mkBefore ''
10221022 # Fix Git hooks of repositories pre-dating https://github.com/NixOS/nixpkgs/pull/133984
10231023 (
10241024 set +f
nixos/modules/services/misc/taskserver/default.nix+10−6
@@ -106,7 +106,7 @@ let
106106
107107 certtool = "${pkgs.gnutls.bin}/bin/certtool";
108108
109− nixos-taskserver = with pkgs.python2.pkgs; buildPythonApplication {
109+ nixos-taskserver = with pkgs.python3.pkgs; buildPythonApplication {
110110 name = "nixos-taskserver";
111111
112112 src = pkgs.runCommand "nixos-taskserver-src" { preferLocalBuild = true; } ''
@@ -277,10 +277,6 @@ in {
277277 example = "::";
278278 description = ''
279279 The address (IPv4, IPv6 or DNS) to listen on.
280−
281− If the value is something else than <literal>localhost</literal> the
282− port defined by <option>listenPort</option> is automatically added to
283− <option>networking.firewall.allowedTCPPorts</option>.
284280 '';
285281 };
286282
@@ -292,6 +288,14 @@ in {
292288 '';
293289 };
294290
291+ openFirewall = mkOption {
292+ type = types.bool;
293+ default = false;
294+ description = ''
295+ Whether to open the firewall for the specified Taskserver port.
296+ '';
297+ };
298+
295299 fqdn = mkOption {
296300 type = types.str;
297301 default = "localhost";
@@ -560,7 +564,7 @@ in {
560564 '';
561565 };
562566 })
563− (mkIf (cfg.enable && cfg.listenHost != "localhost") {
567+ (mkIf (cfg.enable && cfg.openFirewall) {
564568 networking.firewall.allowedTCPPorts = [ cfg.listenPort ];
565569 })
566570 ];
nixos/modules/services/misc/taskserver/helper-tool.py+5−5
@@ -90,7 +90,7 @@ def certtool_cmd(*args, **kwargs):
9090 """
9191 return subprocess.check_output(
9292 [CERTTOOL_COMMAND] + list(args),
93− preexec_fn=lambda: os.umask(0077),
93+ preexec_fn=lambda: os.umask(0o077),
9494 stderr=subprocess.STDOUT,
9595 **kwargs
9696 )
@@ -164,7 +164,7 @@ def generate_key(org, user):
164164 pubcert = os.path.join(basedir, "public.cert")
165165
166166 try:
167− os.makedirs(basedir, mode=0700)
167+ os.makedirs(basedir, mode=0o700)
168168
169169 certtool_cmd("-p", "--bits", CERT_BITS, "--outfile", privkey)
170170
@@ -301,7 +301,7 @@ class Organisation(object):
301301 return None
302302 if name not in self.users.keys():
303303 output = taskd_cmd("add", "user", self.name, name,
304− capture_stdout=True)
304+ capture_stdout=True, encoding='utf-8')
305305 key = RE_USERKEY.search(output)
306306 if key is None:
307307 msg = "Unable to find key while creating user {}."
@@ -412,9 +412,9 @@ class Manager(object):
412412 if org is not None:
413413 if self.ignore_imperative and is_imperative(name):
414414 return
415− for user in org.users.keys():
415+ for user in list(org.users.keys()):
416416 org.del_user(user)
417− for group in org.groups.keys():
417+ for group in list(org.groups.keys()):
418418 org.del_group(group)
419419 taskd_cmd("remove", "org", name)
420420 del self._lazy_orgs[name]
nixos/modules/services/misc/zookeeper.nix+8−1
@@ -114,6 +114,13 @@ in {
114114 type = types.package;
115115 };
116116
117+ jre = mkOption {
118+ description = "The JRE with which to run Zookeeper";
119+ default = cfg.package.jre;
120+ defaultText = literalExpression "pkgs.zookeeper.jre";
121+ example = literalExpression "pkgs.jre";
122+ type = types.package;
123+ };
117124 };
118125
119126
@@ -131,7 +138,7 @@ in {
131138 after = [ "network.target" ];
132139 serviceConfig = {
133140 ExecStart = ''
134− ${pkgs.jre}/bin/java \
141+ ${cfg.jre}/bin/java \
135142 -cp "${cfg.package}/lib/*:${configDir}" \
136143 ${escapeShellArgs cfg.extraCmdLineOptions} \
137144 -Dzookeeper.datadir.autocreate=false \
nixos/modules/services/monitoring/collectd.nix+30−26
@@ -5,36 +5,15 @@ with lib;
55let
66 cfg = config.services.collectd;
77
8− unvalidated_conf = pkgs.writeText "collectd-unvalidated.conf" ''
9− BaseDir "${cfg.dataDir}"
10− AutoLoadPlugin ${boolToString cfg.autoLoadPlugin}
11− Hostname "${config.networking.hostName}"
12−
13− LoadPlugin syslog
14− <Plugin "syslog">
15− LogLevel "info"
16− NotifyLevel "OKAY"
17− </Plugin>
18−
19− ${concatStrings (mapAttrsToList (plugin: pluginConfig: ''
20− LoadPlugin ${plugin}
21− <Plugin "${plugin}">
22− ${pluginConfig}
23− </Plugin>
24− '') cfg.plugins)}
25−
26− ${concatMapStrings (f: ''
27− Include "${f}"
28− '') cfg.include}
29−
30− ${cfg.extraConfig}
31− '';
8+ baseDirLine = ''BaseDir "${cfg.dataDir}"'';
9+ unvalidated_conf = pkgs.writeText "collectd-unvalidated.conf" cfg.extraConfig;
3210
3311 conf = if cfg.validateConfig then
3412 pkgs.runCommand "collectd.conf" {} ''
3513 echo testing ${unvalidated_conf}
14+ cp ${unvalidated_conf} collectd.conf
3615 # collectd -t fails if BaseDir does not exist.
37− sed '1s/^BaseDir.*$/BaseDir "."/' ${unvalidated_conf} > collectd.conf
16+ substituteInPlace collectd.conf --replace ${lib.escapeShellArgs [ baseDirLine ]} 'BaseDir "."'
3817 ${package}/bin/collectd -t -C collectd.conf
3918 cp ${unvalidated_conf} $out
4019 '' else unvalidated_conf;
@@ -123,7 +102,8 @@ in {
123102 extraConfig = mkOption {
124103 default = "";
125104 description = ''
126− Extra configuration for collectd.
105+ Extra configuration for collectd. Use mkBefore to add lines before the
106+ default config, and mkAfter to add them below.
127107 '';
128108 type = lines;
129109 };
@@ -131,6 +111,30 @@ in {
131111 };
132112
133113 config = mkIf cfg.enable {
114+ # 1200 is after the default (1000) but before mkAfter (1500).
115+ services.collectd.extraConfig = lib.mkOrder 1200 ''
116+ ${baseDirLine}
117+ AutoLoadPlugin ${boolToString cfg.autoLoadPlugin}
118+ Hostname "${config.networking.hostName}"
119+
120+ LoadPlugin syslog
121+ <Plugin "syslog">
122+ LogLevel "info"
123+ NotifyLevel "OKAY"
124+ </Plugin>
125+
126+ ${concatStrings (mapAttrsToList (plugin: pluginConfig: ''
127+ LoadPlugin ${plugin}
128+ <Plugin "${plugin}">
129+ ${pluginConfig}
130+ </Plugin>
131+ '') cfg.plugins)}
132+
133+ ${concatMapStrings (f: ''
134+ Include "${f}"
135+ '') cfg.include}
136+ '';
137+
134138 systemd.tmpfiles.rules = [
135139 "d '${cfg.dataDir}' - ${cfg.user} - - -"
136140 ];
nixos/modules/services/monitoring/mimir.nixnew file+63
@@ -0,0 +1,63 @@
1+{ config, lib, pkgs, ... }:
2+
3+let
4+ inherit (lib) escapeShellArgs mkEnableOption mkIf mkOption types;
5+
6+ cfg = config.services.mimir;
7+
8+ settingsFormat = pkgs.formats.yaml {};
9+in {
10+ options.services.mimir = {
11+ enable = mkEnableOption "mimir";
12+
13+ configuration = mkOption {
14+ type = (pkgs.formats.json {}).type;
15+ default = {};
16+ description = ''
17+ Specify the configuration for Mimir in Nix.
18+ '';
19+ };
20+
21+ configFile = mkOption {
22+ type = types.nullOr types.path;
23+ default = null;
24+ description = ''
25+ Specify a configuration file that Mimir should use.
26+ '';
27+ };
28+ };
29+
30+ config = mkIf cfg.enable {
31+ assertions = [{
32+ assertion = (
33+ (cfg.configuration == {} -> cfg.configFile != null) &&
34+ (cfg.configFile != null -> cfg.configuration == {})
35+ );
36+ message = ''
37+ Please specify either
38+ 'services.mimir.configuration' or
39+ 'services.mimir.configFile'.
40+ '';
41+ }];
42+
43+ systemd.services.mimir = {
44+ description = "mimir Service Daemon";
45+ wantedBy = [ "multi-user.target" ];
46+
47+ serviceConfig = let
48+ conf = if cfg.configFile == null
49+ then settingsFormat.generate "config.yaml" cfg.configuration
50+ else cfg.configFile;
51+ in
52+ {
53+ ExecStart = "${pkgs.grafana-mimir}/bin/mimir --config.file=${conf}";
54+ DynamicUser = true;
55+ Restart = "always";
56+ ProtectSystem = "full";
57+ DevicePolicy = "closed";
58+ NoNewPrivileges = true;
59+ StateDirectory = "mimir";
60+ };
61+ };
62+ };
63+}
nixos/modules/services/monitoring/nagios.nix+2−2
@@ -102,8 +102,8 @@ in
102102
103103 plugins = mkOption {
104104 type = types.listOf types.package;
105− default = with pkgs; [ monitoring-plugins ssmtp mailutils ];
106− defaultText = literalExpression "[pkgs.monitoring-plugins pkgs.ssmtp pkgs.mailutils]";
105+ default = with pkgs; [ monitoring-plugins msmtp mailutils ];
106+ defaultText = literalExpression "[pkgs.monitoring-plugins pkgs.msmtp pkgs.mailutils]";
107107 description = "
108108 Packages to be added to the Nagios <envar>PATH</envar>.
109109 Typically used to add plugins, but can be anything.
nixos/modules/services/monitoring/prometheus/default.nix+2−9
@@ -74,7 +74,6 @@ let
7474 }"
7575 "--web.listen-address=${cfg.listenAddress}:${builtins.toString cfg.port}"
7676 "--alertmanager.notification-queue-capacity=${toString cfg.alertmanagerNotificationQueueCapacity}"
77− "--alertmanager.timeout=${toString cfg.alertmanagerTimeout}s"
7877 ] ++ optional (cfg.webExternalUrl != null) "--web.external-url=${cfg.webExternalUrl}"
7978 ++ optional (cfg.retentionTime != null) "--storage.tsdb.retention.time=${cfg.retentionTime}";
8079
@@ -1563,6 +1562,8 @@ in
15631562 (mkRenamedOptionModule [ "services" "prometheus2" ] [ "services" "prometheus" ])
15641563 (mkRemovedOptionModule [ "services" "prometheus" "environmentFile" ]
15651564 "It has been removed since it was causing issues (https://github.com/NixOS/nixpkgs/issues/126083) and Prometheus now has native support for secret files, i.e. `basic_auth.password_file` and `authorization.credentials_file`.")
1565+ (mkRemovedOptionModule [ "services" "prometheus" "alertmanagerTimeout" ]
1566+ "Deprecated upstream and no longer had any effect")
15661567 ];
15671568
15681569 options.services.prometheus = {
@@ -1719,14 +1720,6 @@ in
17191720 '';
17201721 };
17211722
1722− alertmanagerTimeout = mkOption {
1723− type = types.int;
1724− default = 10;
1725− description = ''
1726− Alert manager HTTP API timeout (in seconds).
1727− '';
1728− };
1729−
17301723 webExternalUrl = mkOption {
17311724 type = types.nullOr types.str;
17321725 default = null;
nixos/modules/services/monitoring/prometheus/exporters.xml+21
@@ -19,6 +19,7 @@
1919<programlisting>
2020 services.prometheus.exporters.node = {
2121 enable = true;
22+ port = 9100;
2223 enabledCollectors = [
2324 "logind"
2425 "systemd"
@@ -42,6 +43,26 @@
4243 <link xlink:href="https://nixos.org/nixos/options.html#prometheus.exporters">available
4344 options</link>.
4445 </para>
46+
47+ <para>
48+ Prometheus can now be configured to consume the metrics produced by the exporter:
49+ <programlisting>
50+ services.prometheus = {
51+ # ...
52+
53+ scrapeConfigs = [
54+ {
55+ job_name = "node";
56+ static_configs = [{
57+ targets = [ "localhost:${toString config.services.prometheus.exporters.node.port}" ];
58+ }];
59+ }
60+ ];
61+
62+ # ...
63+ }
64+ </programlisting>
65+ </para>
4566 </section>
4667 <section xml:id="module-services-prometheus-exporters-new-exporter">
4768 <title>Adding a new exporter</title>
nixos/modules/services/monitoring/prometheus/exporters/bird.nix+1−1
@@ -17,7 +17,7 @@ in
1717 };
1818 birdSocket = mkOption {
1919 type = types.path;
20− default = "/var/run/bird.ctl";
20+ default = "/run/bird/bird.ctl";
2121 description = ''
2222 Path to BIRD2 (or BIRD1 v4) socket.
2323 '';
nixos/modules/services/network-filesystems/ipfs.nix+16−10
@@ -1,8 +1,7 @@
1−{ config, lib, pkgs, options, utils, ... }:
1+{ config, lib, pkgs, utils, ... }:
22with lib;
33let
44 cfg = config.services.ipfs;
5− opt = options.services.ipfs;
65
76 ipfsFlags = utils.escapeSystemdExecArgs (
87 optional cfg.autoMount "--mount" ++
@@ -255,23 +254,27 @@ in
255254 else
256255 # After an unclean shutdown this file may exist which will cause the config command to attempt to talk to the daemon. This will hang forever if systemd is holding our sockets open.
257256 rm -vf "$IPFS_PATH/api"
258−
257+ '' + optionalString cfg.autoMigrate ''
258+ ${pkgs.ipfs-migrator}/bin/fs-repo-migrations -to '${cfg.package.repoVersion}' -y
259+ '' + ''
259260 ipfs --offline config profile apply ${profile}
260261 fi
261262 '' + optionalString cfg.autoMount ''
262263 ipfs --offline config Mounts.FuseAllowOther --json true
263264 ipfs --offline config Mounts.IPFS ${cfg.ipfsMountDir}
264265 ipfs --offline config Mounts.IPNS ${cfg.ipnsMountDir}
265− '' + optionalString cfg.autoMigrate ''
266− ${pkgs.ipfs-migrator}/bin/fs-repo-migrations -to '${cfg.package.repoVersion}' -y
267266 '' + ''
268267 ipfs --offline config show \
269268 | ${pkgs.jq}/bin/jq '. * $extraConfig' --argjson extraConfig ${
270− escapeShellArg (builtins.toJSON ({
271− Addresses.API = cfg.apiAddress;
272− Addresses.Gateway = cfg.gatewayAddress;
273− Addresses.Swarm = cfg.swarmAddress;
274− } // cfg.extraConfig))
269+ escapeShellArg (builtins.toJSON (
270+ recursiveUpdate
271+ {
272+ Addresses.API = cfg.apiAddress;
273+ Addresses.Gateway = cfg.gatewayAddress;
274+ Addresses.Swarm = cfg.swarmAddress;
275+ }
276+ cfg.extraConfig
277+ ))
275278 } \
276279 | ipfs --offline config replace -
277280 '';
@@ -312,6 +315,9 @@ in
312315 in
313316 [ "" "%t/ipfs.sock" ] ++ lib.optional (fromCfg != null) fromCfg;
314317 };
318+ };
315319
320+ meta = {
321+ maintainers = with lib.maintainers; [ Luflosi ];
316322 };
317323}
nixos/modules/services/networking/asterisk.nix+11−43
@@ -14,28 +14,9 @@ let
1414
1515 # Add filecontents from files of useTheseDefaultConfFiles to confFiles, do not override
1616 defaultConfFiles = subtractLists (attrNames cfg.confFiles) cfg.useTheseDefaultConfFiles;
17− allConfFiles =
18− cfg.confFiles //
19− builtins.listToAttrs (map (x: { name = x;
20− value = builtins.readFile (cfg.package + "/etc/asterisk/" + x); })
21− defaultConfFiles);
22−
23− asteriskEtc = pkgs.stdenv.mkDerivation
24− ((mapAttrs' (name: value: nameValuePair
25− # Fudge the names to make bash happy
26− ((replaceChars ["."] ["_"] name) + "_")
27− (value)
28− ) allConfFiles) //
29− {
30− confFilesString = concatStringsSep " " (
31− attrNames allConfFiles
32− );
33−
34− name = "asterisk-etc";
35−
17+ allConfFiles = {
3618 # Default asterisk.conf file
37− # (Notice that astetcdir will be set to the path of this derivation)
38− asteriskConf = ''
19+ "asterisk.conf".text = ''
3920 [directories]
4021 astetcdir => /etc/asterisk
4122 astmoddir => ${cfg.package}/lib/asterisk/modules
@@ -48,43 +29,28 @@ let
4829 astrundir => /run/asterisk
4930 astlogdir => /var/log/asterisk
5031 astsbindir => ${cfg.package}/sbin
32+ ${cfg.extraConfig}
5133 '';
52− extraConf = cfg.extraConfig;
5334
5435 # Loading all modules by default is considered sensible by the authors of
5536 # "Asterisk: The Definitive Guide". Secure sites will likely want to
5637 # specify their own "modules.conf" in the confFiles option.
57− modulesConf = ''
38+ "modules.conf".text = ''
5839 [modules]
5940 autoload=yes
6041 '';
6142
6243 # Use syslog for logging so logs can be viewed with journalctl
63− loggerConf = ''
44+ "logger.conf".text = ''
6445 [general]
6546
6647 [logfiles]
6748 syslog.local0 => notice,warning,error
6849 '';
50+ } //
51+ mapAttrs (name: text: { inherit text; }) cfg.confFiles //
52+ listToAttrs (map (x: nameValuePair x { source = cfg.package + "/etc/asterisk/" + x; }) defaultConfFiles);
6953
70− buildCommand = ''
71− mkdir -p "$out"
72−
73− # Create asterisk.conf, pointing astetcdir to the path of this derivation
74− echo "$asteriskConf" | sed "s|@out@|$out|g" > "$out"/asterisk.conf
75− echo "$extraConf" >> "$out"/asterisk.conf
76−
77− echo "$modulesConf" > "$out"/modules.conf
78−
79− echo "$loggerConf" > "$out"/logger.conf
80−
81− # Config files specified in confFiles option override all other files
82− for i in $confFilesString; do
83− conf=$(echo "$i"_ | sed 's/\./_/g')
84− echo "''${!conf}" > "$out"/"$i"
85− done
86− '';
87− });
8854in
8955
9056{
@@ -209,7 +175,9 @@ in
209175 config = mkIf cfg.enable {
210176 environment.systemPackages = [ cfg.package ];
211177
212− environment.etc.asterisk.source = asteriskEtc;
178+ environment.etc = mapAttrs' (name: value:
179+ nameValuePair "asterisk/${name}" value
180+ ) allConfFiles;
213181
214182 users.users.asterisk =
215183 { name = asteriskUser;
nixos/modules/services/networking/bird.nix+1−2
@@ -68,8 +68,7 @@ in
6868 systemd.services.bird2 = {
6969 description = "BIRD Internet Routing Daemon";
7070 wantedBy = [ "multi-user.target" ];
71− reloadIfChanged = true;
72− restartTriggers = [ config.environment.etc."bird/bird2.conf".source ];
71+ reloadTriggers = [ config.environment.etc."bird/bird2.conf".source ];
7372 serviceConfig = {
7473 Type = "forking";
7574 Restart = "on-failure";
nixos/modules/services/networking/cloudflare-dyndns.nixnew file+93
@@ -0,0 +1,93 @@
1+{ config, pkgs, lib, ... }:
2+
3+with lib;
4+
5+let
6+ cfg = config.services.cloudflare-dyndns;
7+in
8+{
9+ options = {
10+ services.cloudflare-dyndns = {
11+ enable = mkEnableOption "Cloudflare Dynamic DNS Client";
12+
13+ apiTokenFile = mkOption {
14+ type = types.nullOr types.str;
15+ default = null;
16+ description = ''
17+ The path to a file containing the CloudFlare API token.
18+
19+ The file must have the form `CLOUDFLARE_API_TOKEN=...`
20+ '';
21+ };
22+
23+ domains = mkOption {
24+ type = types.listOf types.str;
25+ default = [ ];
26+ description = ''
27+ List of domain names to update records for.
28+ '';
29+ };
30+
31+ proxied = mkOption {
32+ type = types.bool;
33+ default = false;
34+ description = ''
35+ Whether this is a DNS-only record, or also being proxied through CloudFlare.
36+ '';
37+ };
38+
39+ ipv4 = mkOption {
40+ type = types.bool;
41+ default = true;
42+ description = ''
43+ Whether to enable setting IPv4 A records.
44+ '';
45+ };
46+
47+ ipv6 = mkOption {
48+ type = types.bool;
49+ default = false;
50+ description = ''
51+ Whether to enable setting IPv6 AAAA records.
52+ '';
53+ };
54+
55+ deleteMissing = mkOption {
56+ type = types.bool;
57+ default = false;
58+ description = ''
59+ Whether to delete the record when no IP address is found.
60+ '';
61+ };
62+ };
63+ };
64+
65+ config = mkIf cfg.enable {
66+ systemd.services.cloudflare-dyndns = {
67+ description = "CloudFlare Dynamic DNS Client";
68+ after = [ "network.target" ];
69+ wantedBy = [ "multi-user.target" ];
70+ startAt = "*:0/5";
71+
72+ environment = {
73+ CLOUDFLARE_DOMAINS = toString cfg.domains;
74+ };
75+
76+ serviceConfig = {
77+ Type = "simple";
78+ DynamicUser = true;
79+ StateDirectory = "cloudflare-dyndns";
80+ EnvironmentFile = cfg.apiTokenFile;
81+ ExecStart =
82+ let
83+ args = [ "--cache-file /var/lib/cloudflare-dyndns/ip.cache" ]
84+ ++ (if cfg.ipv4 then [ "-4" ] else [ "-no-4" ])
85+ ++ (if cfg.ipv6 then [ "-6" ] else [ "-no-6" ])
86+ ++ optional cfg.deleteMissing "--delete-missing"
87+ ++ optional cfg.proxied "--proxied";
88+ in
89+ "${pkgs.cloudflare-dyndns}/bin/cloudflare-dyndns ${toString args}";
90+ };
91+ };
92+ };
93+}
nixos/modules/services/networking/consul.nix+32−6
@@ -80,13 +80,21 @@ in
8080 The name of the interface to pull the bind_addr from.
8181 '';
8282 };
83+ };
8384
85+ forceAddrFamily = mkOption {
86+ type = types.enum [ "any" "ipv4" "ipv6" ];
87+ default = "any";
88+ description = ''
89+ Whether to bind ipv4/ipv6 or both kind of addresses.
90+ '';
8491 };
8592
8693 forceIpv4 = mkOption {
87− type = types.bool;
88− default = false;
94+ type = types.nullOr types.bool;
95+ default = null;
8996 description = ''
97+ Deprecated: Use consul.forceAddrFamily instead.
9098 Whether we should force the interfaces to only pull ipv4 addresses.
9199 '';
92100 };
@@ -175,6 +183,13 @@ in
175183 systemPackages = [ cfg.package ];
176184 };
177185
186+ warnings = lib.flatten [
187+ (lib.optional (cfg.forceIpv4 != null) ''
188+ The option consul.forceIpv4 is deprecated, please use
189+ consul.forceAddrFamily instead.
190+ '')
191+ ];
192+
178193 systemd.services.consul = {
179194 wantedBy = [ "multi-user.target" ];
180195 after = [ "network.target" ] ++ systemdDevices;
@@ -196,15 +211,21 @@ in
196211 });
197212
198213 path = with pkgs; [ iproute2 gnugrep gawk consul ];
199− preStart = ''
214+ preStart = let
215+ family = if cfg.forceAddrFamily == "ipv6" then
216+ "-6"
217+ else if cfg.forceAddrFamily == "ipv4" then
218+ "-4"
219+ else
220+ "";
221+ in ''
200222 mkdir -m 0700 -p ${dataDir}
201223 chown -R consul ${dataDir}
202224
203225 # Determine interface addresses
204226 getAddrOnce () {
205− ip addr show dev "$1" \
206− | grep 'inet${optionalString (cfg.forceIpv4) " "}.*scope global' \
207− | awk -F '[ /\t]*' '{print $3}' | head -n 1
227+ ip ${family} addr show dev "$1" scope global \
228+ | awk -F '[ /\t]*' '/inet/ {print $3}' | head -n 1
208229 }
209230 getAddr () {
210231 ADDR="$(getAddrOnce $1)"
@@ -234,6 +255,11 @@ in
234255 };
235256 }
236257
258+ # deprecated
259+ (mkIf (cfg.forceIpv4 != null && cfg.forceIpv4) {
260+ services.consul.forceAddrFamily = "ipv4";
261+ })
262+
237263 (mkIf (cfg.alerts.enable) {
238264 systemd.services.consul-alerts = {
239265 wantedBy = [ "multi-user.target" ];
nixos/modules/services/networking/create_ap.nixnew file+50
@@ -0,0 +1,50 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+
5+let
6+ cfg = config.services.create_ap;
7+ configFile = pkgs.writeText "create_ap.conf" (generators.toKeyValue { } cfg.settings);
8+in {
9+ options = {
10+ services.create_ap = {
11+ enable = mkEnableOption "setup wifi hotspots using create_ap";
12+ settings = mkOption {
13+ type = with types; attrsOf (oneOf [ int bool str ]);
14+ default = {};
15+ description = ''
16+ Configuration for <package>create_ap</package>.
17+ See <link xlink:href="https://raw.githubusercontent.com/lakinduakash/linux-wifi-hotspot/master/src/scripts/create_ap.conf">upstream example configuration</link>
18+ for supported values.
19+ '';
20+ example = {
21+ INTERNET_IFACE = "eth0";
22+ WIFI_IFACE = "wlan0";
23+ SSID = "My Wifi Hotspot";
24+ PASSPHRASE = "12345678";
25+ };
26+ };
27+ };
28+ };
29+
30+ config = mkIf cfg.enable {
31+
32+ systemd = {
33+ services.create_ap = {
34+ wantedBy = [ "multi-user.target" ];
35+ description = "Create AP Service";
36+ after = [ "network.target" ];
37+ restartTriggers = [ configFile ];
38+ serviceConfig = {
39+ ExecStart = "${pkgs.linux-wifi-hotspot}/bin/create_ap --config ${configFile}";
40+ KillSignal = "SIGINT";
41+ Restart = "on-failure";
42+ };
43+ };
44+ };
45+
46+ };
47+
48+ meta.maintainers = with lib.maintainers; [ onny ];
49+
50+}
nixos/modules/services/networking/envoy.nixnew file+84
@@ -0,0 +1,84 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+
5+let
6+ cfg = config.services.envoy;
7+ format = pkgs.formats.json { };
8+ conf = format.generate "envoy.json" cfg.settings;
9+ validateConfig = file:
10+ pkgs.runCommand "validate-envoy-conf" { } ''
11+ ${pkgs.envoy}/bin/envoy --log-level error --mode validate -c "${file}"
12+ cp "${file}" "$out"
13+ '';
14+
15+in
16+
17+{
18+ options.services.envoy = {
19+ enable = mkEnableOption "Envoy reverse proxy";
20+
21+ settings = mkOption {
22+ type = format.type;
23+ default = { };
24+ example = literalExpression ''
25+ {
26+ admin = {
27+ access_log_path = "/dev/null";
28+ address = {
29+ socket_address = {
30+ protocol = "TCP";
31+ address = "127.0.0.1";
32+ port_value = 9901;
33+ };
34+ };
35+ };
36+ static_resources = {
37+ listeners = [];
38+ clusters = [];
39+ };
40+ }
41+ '';
42+ description = ''
43+ Specify the configuration for Envoy in Nix.
44+ '';
45+ };
46+ };
47+
48+ config = mkIf cfg.enable {
49+ environment.systemPackages = [ pkgs.envoy ];
50+ systemd.services.envoy = {
51+ description = "Envoy reverse proxy";
52+ after = [ "network-online.target" ];
53+ requires = [ "network-online.target" ];
54+ wantedBy = [ "multi-user.target" ];
55+ serviceConfig = {
56+ ExecStart = "${pkgs.envoy}/bin/envoy -c ${validateConfig conf}";
57+ DynamicUser = true;
58+ Restart = "no";
59+ CacheDirectory = "envoy";
60+ LogsDirectory = "envoy";
61+ AmbientCapabilities = "CAP_NET_BIND_SERVICE";
62+ CapabilityBoundingSet = "CAP_NET_BIND_SERVICE";
63+ RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK AF_XDP";
64+ SystemCallArchitectures = "native";
65+ LockPersonality = true;
66+ RestrictNamespaces = true;
67+ RestrictRealtime = true;
68+ PrivateUsers = false; # breaks CAP_NET_BIND_SERVICE
69+ PrivateDevices = true;
70+ ProtectClock = true;
71+ ProtectControlGroups = true;
72+ ProtectHome = true;
73+ ProtectKernelLogs = true;
74+ ProtectKernelModules = true;
75+ ProtectKernelTunables = true;
76+ ProtectProc = "ptraceable";
77+ ProtectHostname = true;
78+ ProtectSystem = "strict";
79+ UMask = "0066";
80+ SystemCallFilter = "~@clock @module @mount @reboot @swap @obsolete @cpu-emulation";
81+ };
82+ };
83+ };
84+}
nixos/modules/services/networking/headscale.nix+1−1
@@ -479,7 +479,7 @@ in
479479 NoNewPrivileges = true;
480480 LockPersonality = true;
481481 RestrictRealtime = true;
482− SystemCallFilter = [ "@system-service" "~@priviledged" "@chown" ];
482+ SystemCallFilter = [ "@system-service" "~@privileged" "@chown" ];
483483 SystemCallArchitectures = "native";
484484 RestrictAddressFamilies = "AF_INET AF_INET6 AF_UNIX";
485485 };
nixos/modules/services/networking/kea.nix+74−8
@@ -9,20 +9,26 @@ with lib;
99let
1010 cfg = config.services.kea;
1111
12+ xor = x: y: (!x && y) || (x && !y);
1213 format = pkgs.formats.json {};
1314
14− ctrlAgentConfig = format.generate "kea-ctrl-agent.conf" {
15+ chooseNotNull = x: y: if x != null then x else y;
16+
17+ ctrlAgentConfig = chooseNotNull cfg.ctrl-agent.configFile (format.generate "kea-ctrl-agent.conf" {
1518 Control-agent = cfg.ctrl-agent.settings;
16− };
17− dhcp4Config = format.generate "kea-dhcp4.conf" {
19+ });
20+
21+ dhcp4Config = chooseNotNull cfg.dhcp4.configFile (format.generate "kea-dhcp4.conf" {
1822 Dhcp4 = cfg.dhcp4.settings;
19− };
20− dhcp6Config = format.generate "kea-dhcp6.conf" {
23+ });
24+
25+ dhcp6Config = chooseNotNull cfg.dhcp6.configFile (format.generate "kea-dhcp6.conf" {
2126 Dhcp6 = cfg.dhcp6.settings;
22− };
23− dhcpDdnsConfig = format.generate "kea-dhcp-ddns.conf" {
27+ });
28+
29+ dhcpDdnsConfig = chooseNotNull cfg.dhcp-ddns.configFile (format.generate "kea-dhcp-ddns.conf" {
2430 DhcpDdns = cfg.dhcp-ddns.settings;
25− };
31+ });
2632
2733 package = pkgs.kea;
2834in
@@ -45,6 +51,17 @@ in
4551 '';
4652 };
4753
54+ configFile = mkOption {
55+ type = nullOr path;
56+ default = null;
57+ description = ''
58+ Kea Control Agent configuration as a path, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/agent.html"/>.
59+
60+ Takes preference over <link linkend="opt-services.kea.ctrl-agent.settings">settings</link>.
61+ Most users should prefer using <link linkend="opt-services.kea.ctrl-agent.settings">settings</link> instead.
62+ '';
63+ };
64+
4865 settings = mkOption {
4966 type = format.type;
5067 default = null;
@@ -73,6 +90,17 @@ in
7390 '';
7491 };
7592
93+ configFile = mkOption {
94+ type = nullOr path;
95+ default = null;
96+ description = ''
97+ Kea DHCP4 configuration as a path, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp4-srv.html"/>.
98+
99+ Takes preference over <link linkend="opt-services.kea.dhcp4.settings">settings</link>.
100+ Most users should prefer using <link linkend="opt-services.kea.dhcp4.settings">settings</link> instead.
101+ '';
102+ };
103+
76104 settings = mkOption {
77105 type = format.type;
78106 default = null;
@@ -122,6 +150,17 @@ in
122150 '';
123151 };
124152
153+ configFile = mkOption {
154+ type = nullOr path;
155+ default = null;
156+ description = ''
157+ Kea DHCP6 configuration as a path, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp6-srv.html"/>.
158+
159+ Takes preference over <link linkend="opt-services.kea.dhcp6.settings">settings</link>.
160+ Most users should prefer using <link linkend="opt-services.kea.dhcp6.settings">settings</link> instead.
161+ '';
162+ };
163+
125164 settings = mkOption {
126165 type = format.type;
127166 default = null;
@@ -172,6 +211,17 @@ in
172211 '';
173212 };
174213
214+ configFile = mkOption {
215+ type = nullOr path;
216+ default = null;
217+ description = ''
218+ Kea DHCP-DDNS configuration as a path, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/ddns.html"/>.
219+
220+ Takes preference over <link linkend="opt-services.kea.dhcp-ddns.settings">settings</link>.
221+ Most users should prefer using <link linkend="opt-services.kea.dhcp-ddns.settings">settings</link> instead.
222+ '';
223+ };
224+
175225 settings = mkOption {
176226 type = format.type;
177227 default = null;
@@ -214,6 +264,10 @@ in
214264 }
215265
216266 (mkIf cfg.ctrl-agent.enable {
267+ assertions = [{
268+ assertion = xor (cfg.ctrl-agent.settings == null) (cfg.ctrl-agent.configFile == null);
269+ message = "Either services.kea.ctrl-agent.settings or services.kea.ctrl-agent.configFile must be set to a non-null value.";
270+ }];
217271
218272 environment.etc."kea/ctrl-agent.conf".source = ctrlAgentConfig;
219273
@@ -252,6 +306,10 @@ in
252306 })
253307
254308 (mkIf cfg.dhcp4.enable {
309+ assertions = [{
310+ assertion = xor (cfg.dhcp4.settings == null) (cfg.dhcp4.configFile == null);
311+ message = "Either services.kea.dhcp4.settings or services.kea.dhcp4.configFile must be set to a non-null value.";
312+ }];
255313
256314 environment.etc."kea/dhcp4-server.conf".source = dhcp4Config;
257315
@@ -295,6 +353,10 @@ in
295353 })
296354
297355 (mkIf cfg.dhcp6.enable {
356+ assertions = [{
357+ assertion = xor (cfg.dhcp6.settings == null) (cfg.dhcp6.configFile == null);
358+ message = "Either services.kea.dhcp6.settings or services.kea.dhcp6.configFile must be set to a non-null value.";
359+ }];
298360
299361 environment.etc."kea/dhcp6-server.conf".source = dhcp6Config;
300362
@@ -336,6 +398,10 @@ in
336398 })
337399
338400 (mkIf cfg.dhcp-ddns.enable {
401+ assertions = [{
402+ assertion = xor (cfg.dhcp-ddns.settings == null) (cfg.dhcp-ddns.configFile == null);
403+ message = "Either services.kea.dhcp-ddns.settings or services.kea.dhcp-ddns.configFile must be set to a non-null value.";
404+ }];
339405
340406 environment.etc."kea/dhcp-ddns.conf".source = dhcpDdnsConfig;
341407
nixos/modules/services/networking/lxd-image-server.nix+7−11
@@ -51,18 +51,14 @@ in
5151
5252 environment.etc."lxd-image-server/config.toml".source = format.generate "config.toml" cfg.settings;
5353
54− services.logrotate.paths.lxd-image-server = {
55− path = "/var/log/lxd-image-server/lxd-image-server.log";
54+ services.logrotate.settings.lxd-image-server = {
55+ files = "/var/log/lxd-image-server/lxd-image-server.log";
5656 frequency = "daily";
57− keep = 21;
58− extraConfig = ''
59− create 755 lxd-image-server ${cfg.group}
60− missingok
61− compress
62− delaycompress
63− copytruncate
64− notifempty
65− '';
57+ rotate = 21;
58+ create = "755 lxd-image-server ${cfg.group}";
59+ compress = true;
60+ delaycompress = true;
61+ copytruncate = true;
6662 };
6763
6864 systemd.tmpfiles.rules = [
nixos/modules/services/networking/mozillavpn.nixnew file+19
@@ -0,0 +1,19 @@
1+{ config, lib, pkgs, ... }:
2+
3+{
4+ options.services.mozillavpn.enable = lib.mkOption {
5+ type = lib.types.bool;
6+ default = false;
7+ description = ''
8+ Enable the Mozilla VPN daemon.
9+ '';
10+ };
11+
12+ config = lib.mkIf config.services.mozillavpn.enable {
13+ environment.systemPackages = [ pkgs.mozillavpn ];
14+ services.dbus.packages = [ pkgs.mozillavpn ];
15+ systemd.packages = [ pkgs.mozillavpn ];
16+ };
17+
18+ meta.maintainers = with lib.maintainers; [ andersk ];
19+}
nixos/modules/services/networking/nbd.nix+28−15
@@ -4,28 +4,34 @@ with lib;
44
55let
66 cfg = config.services.nbd;
7− configFormat = pkgs.formats.ini { };
87 iniFields = with types; attrsOf (oneOf [ bool int float str ]);
9− serverConfig = configFormat.generate "nbd-server-config"
10− ({
11− generic =
12− (cfg.server.extraOptions // {
13− user = "root";
14− group = "root";
15− port = cfg.server.listenPort;
16− } // (optionalAttrs (cfg.server.listenAddress != null) {
17− listenaddr = cfg.server.listenAddress;
18− }));
19− }
20− // (mapAttrs
8+ # The `[generic]` section must come before all the others in the
9+ # config file. This means we can't just dump an attrset to INI
10+ # because that sorts the sections by name. Instead, we serialize it
11+ # on its own first.
12+ genericSection = {
13+ generic = (cfg.server.extraOptions // {
14+ user = "root";
15+ group = "root";
16+ port = cfg.server.listenPort;
17+ } // (optionalAttrs (cfg.server.listenAddress != null) {
18+ listenaddr = cfg.server.listenAddress;
19+ }));
20+ };
21+ exportSections =
22+ mapAttrs
2123 (_: { path, allowAddresses, extraOptions }:
2224 extraOptions // {
2325 exportname = path;
2426 } // (optionalAttrs (allowAddresses != null) {
2527 authfile = pkgs.writeText "authfile" (concatStringsSep "\n" allowAddresses);
2628 }))
27− cfg.server.exports)
28− );
29+ cfg.server.exports;
30+ serverConfig =
31+ pkgs.writeText "nbd-server-config" ''
32+ ${lib.generators.toINI {} genericSection}
33+ ${lib.generators.toINI {} exportSections}
34+ '';
2935 splitLists =
3036 partition
3137 (path: hasPrefix "/dev/" path)
@@ -103,6 +109,13 @@ in
103109 };
104110
105111 config = mkIf cfg.server.enable {
112+ assertions = [
113+ {
114+ assertion = !(cfg.server.exports ? "generic");
115+ message = "services.nbd.server exports must not be named 'generic'";
116+ }
117+ ];
118+
106119 boot.kernelModules = [ "nbd" ];
107120
108121 systemd.services.nbd-server = {
nixos/modules/services/networking/ncdns.nix+2−2
@@ -58,7 +58,7 @@ in
5858
5959 address = mkOption {
6060 type = types.str;
61− default = "127.0.0.1";
61+ default = "[::1]";
6262 description = ''
6363 The IP address the ncdns resolver will bind to. Leave this unchanged
6464 if you do not wish to directly expose the resolver.
@@ -202,7 +202,7 @@ in
202202 config = mkIf cfg.enable {
203203
204204 services.pdns-recursor = mkIf cfgs.pdns-recursor.resolveNamecoin {
205− forwardZonesRecurse.bit = "127.0.0.1:${toString cfg.port}";
205+ forwardZonesRecurse.bit = "${cfg.address}:${toString cfg.port}";
206206 luaConfig =
207207 if cfg.dnssec.enable
208208 then ''readTrustAnchorsFromFile("${cfg.dnssec.keys.public}")''
nixos/modules/services/networking/networkmanager.nix+56−53
@@ -5,18 +5,6 @@ with lib;
55let
66 cfg = config.networking.networkmanager;
77
8− basePackages = with pkgs; [
9− modemmanager
10− networkmanager
11− networkmanager-fortisslvpn
12− networkmanager-iodine
13− networkmanager-l2tp
14− networkmanager-openconnect
15− networkmanager-openvpn
16− networkmanager-vpnc
17− networkmanager-sstp
18− ] ++ optional (!delegateWireless && !enableIwd) wpa_supplicant;
19−
208 delegateWireless = config.networking.wireless.enable == true && cfg.unmanaged != [];
219
2210 enableIwd = cfg.wifi.backend == "iwd";
@@ -145,6 +133,15 @@ let
145133 '';
146134 };
147135
136+ packages = [
137+ pkgs.modemmanager
138+ pkgs.networkmanager
139+ ]
140+ ++ cfg.plugins
141+ ++ lib.optionals (!delegateWireless && !enableIwd) [
142+ pkgs.wpa_supplicant
143+ ];
144+
148145in {
149146
150147 meta = {
@@ -227,17 +224,33 @@ in {
227224 '';
228225 };
229226
230− packages = mkOption {
231− type = types.listOf types.package;
227+ plugins = mkOption {
228+ type =
229+ let
230+ networkManagerPluginPackage = types.package // {
231+ description = "NetworkManager plug-in";
232+ check =
233+ p:
234+ lib.assertMsg
235+ (types.package.check p
236+ && p ? networkManagerPlugin
237+ && lib.isString p.networkManagerPlugin)
238+ ''
239+ Package ‘${p.name}’, is not a NetworkManager plug-in.
240+ Those need to have a ‘networkManagerPlugin’ attribute.
241+ '';
242+ };
243+ in
244+ types.listOf networkManagerPluginPackage;
232245 default = [ ];
233246 description = ''
234− Extra packages that provide NetworkManager plugins.
247+ List of NetworkManager plug-ins to enable.
248+ Some plug-ins are enabled by the NetworkManager module by default.
235249 '';
236− apply = list: basePackages ++ list;
237250 };
238251
239252 dhcp = mkOption {
240− type = types.enum [ "dhclient" "dhcpcd" "internal" ];
253+ type = types.enum [ "dhcpcd" "internal" ];
241254 default = "internal";
242255 description = ''
243256 Which program (or internal library) should be used for DHCP.
@@ -380,7 +393,7 @@ in {
380393 </para><para>
381394 If you enable this option the
382395 <literal>networkmanager_strongswan</literal> plugin will be added to
383− the <option>networking.networkmanager.packages</option> option
396+ the <option>networking.networkmanager.plugins</option> option
384397 so you don't need to to that yourself.
385398 '';
386399 };
@@ -399,6 +412,9 @@ in {
399412 };
400413
401414 imports = [
415+ (mkRenamedOptionModule
416+ [ "networking" "networkmanager" "packages" ]
417+ [ "networking" "networkmanager" "plugins" ])
402418 (mkRenamedOptionModule [ "networking" "networkmanager" "useDnsmasq" ] [ "networking" "networkmanager" "dns" ])
403419 (mkRemovedOptionModule ["networking" "networkmanager" "dynamicHosts"] ''
404420 This option was removed because allowing (multiple) regular users to
@@ -426,31 +442,12 @@ in {
426442
427443 hardware.wirelessRegulatoryDatabase = true;
428444
429− environment.etc = with pkgs; {
430− "NetworkManager/NetworkManager.conf".source = configFile;
431−
432− "NetworkManager/VPN/nm-openvpn-service.name".source =
433− "${networkmanager-openvpn}/lib/NetworkManager/VPN/nm-openvpn-service.name";
434−
435− "NetworkManager/VPN/nm-vpnc-service.name".source =
436− "${networkmanager-vpnc}/lib/NetworkManager/VPN/nm-vpnc-service.name";
437−
438− "NetworkManager/VPN/nm-openconnect-service.name".source =
439− "${networkmanager-openconnect}/lib/NetworkManager/VPN/nm-openconnect-service.name";
440−
441− "NetworkManager/VPN/nm-fortisslvpn-service.name".source =
442− "${networkmanager-fortisslvpn}/lib/NetworkManager/VPN/nm-fortisslvpn-service.name";
443−
444− "NetworkManager/VPN/nm-l2tp-service.name".source =
445− "${networkmanager-l2tp}/lib/NetworkManager/VPN/nm-l2tp-service.name";
446−
447− "NetworkManager/VPN/nm-iodine-service.name".source =
448− "${networkmanager-iodine}/lib/NetworkManager/VPN/nm-iodine-service.name";
449−
450− "NetworkManager/VPN/nm-sstp-service.name".source =
451− "${networkmanager-sstp}/lib/NetworkManager/VPN/nm-sstp-service.name";
452−
445+ environment.etc = {
446+ "NetworkManager/NetworkManager.conf".source = configFile;
453447 }
448+ // builtins.listToAttrs (map (pkg: nameValuePair "NetworkManager/${pkg.networkManagerPlugin}" {
449+ source = "${pkg}/lib/NetworkManager/${pkg.networkManagerPlugin}";
450+ }) cfg.plugins)
454451 // optionalAttrs cfg.enableFccUnlock
455452 {
456453 "ModemManager/fcc-unlock.d".source =
@@ -460,18 +457,13 @@ in {
460457 {
461458 "NetworkManager/dispatcher.d/02overridedns".source = overrideNameserversScript;
462459 }
463− // optionalAttrs cfg.enableStrongSwan
464− {
465− "NetworkManager/VPN/nm-strongswan-service.name".source =
466− "${pkgs.networkmanager_strongswan}/lib/NetworkManager/VPN/nm-strongswan-service.name";
467− }
468460 // listToAttrs (lib.imap1 (i: s:
469461 {
470462 name = "NetworkManager/dispatcher.d/${dispatcherTypesSubdirMap.${s.type}}03userscript${lib.fixedWidthNumber 4 i}";
471463 value = { mode = "0544"; inherit (s) source; };
472464 }) cfg.dispatcherScripts);
473465
474− environment.systemPackages = cfg.packages;
466+ environment.systemPackages = packages;
475467
476468 users.groups = {
477469 networkmanager.gid = config.ids.gids.networkmanager;
@@ -490,14 +482,13 @@ in {
490482 };
491483 };
492484
493− systemd.packages = cfg.packages;
485+ systemd.packages = packages;
494486
495487 systemd.tmpfiles.rules = [
496488 "d /etc/NetworkManager/system-connections 0700 root root -"
497489 "d /etc/ipsec.d 0700 root root -"
498490 "d /var/lib/NetworkManager-fortisslvpn 0700 root root -"
499491
500− "d /var/lib/dhclient 0755 root root -"
501492 "d /var/lib/misc 0755 root root -" # for dnsmasq.leases
502493 ];
503494
@@ -534,8 +525,20 @@ in {
534525 useDHCP = false;
535526 })
536527
528+ {
529+ networkmanager.plugins = with pkgs; [
530+ networkmanager-fortisslvpn
531+ networkmanager-iodine
532+ networkmanager-l2tp
533+ networkmanager-openconnect
534+ networkmanager-openvpn
535+ networkmanager-vpnc
536+ networkmanager-sstp
537+ ];
538+ }
539+
537540 (mkIf cfg.enableStrongSwan {
538− networkmanager.packages = [ pkgs.networkmanager_strongswan ];
541+ networkmanager.plugins = [ pkgs.networkmanager_strongswan ];
539542 })
540543
541544 (mkIf enableIwd {
@@ -559,10 +562,10 @@ in {
559562 security.polkit.enable = true;
560563 security.polkit.extraConfig = polkitConf;
561564
562− services.dbus.packages = cfg.packages
565+ services.dbus.packages = packages
563566 ++ optional cfg.enableStrongSwan pkgs.strongswanNM
564567 ++ optional (cfg.dns == "dnsmasq") pkgs.dnsmasq;
565568
566− services.udev.packages = cfg.packages;
569+ services.udev.packages = packages;
567570 };
568571}
nixos/modules/services/networking/openconnect.nixnew file+137
@@ -0,0 +1,137 @@
1+{ config, lib, options, pkgs, ... }:
2+with lib;
3+let
4+ cfg = config.networking.openconnect;
5+ openconnect = cfg.package;
6+ pkcs11 = types.strMatching "pkcs11:.+" // {
7+ name = "pkcs11";
8+ description = "PKCS#11 URI";
9+ };
10+ interfaceOptions = {
11+ options = {
12+ gateway = mkOption {
13+ description = "Gateway server to connect to.";
14+ example = "gateway.example.com";
15+ type = types.str;
16+ };
17+
18+ protocol = mkOption {
19+ description = "Protocol to use.";
20+ example = "anyconnect";
21+ type =
22+ types.enum [ "anyconnect" "array" "nc" "pulse" "gp" "f5" "fortinet" ];
23+ };
24+
25+ user = mkOption {
26+ description = "Username to authenticate with.";
27+ example = "example-user";
28+ type = types.nullOr types.str;
29+ };
30+
31+ # Note: It does not make sense to provide a way to declaratively
32+ # set an authentication cookie, because they have to be requested
33+ # for every new connection and would only work once.
34+ passwordFile = mkOption {
35+ description = ''
36+ File containing the password to authenticate with. This
37+ is passed to <code>openconnect</code> via the
38+ <code>--passwd-on-stdin</code> option.
39+ '';
40+ default = null;
41+ example = "/var/lib/secrets/openconnect-passwd";
42+ type = types.nullOr types.path;
43+ };
44+
45+ certificate = mkOption {
46+ description = "Certificate to authenticate with.";
47+ default = null;
48+ example = "/var/lib/secrets/openconnect_certificate.pem";
49+ type = with types; nullOr (either path pkcs11);
50+ };
51+
52+ privateKey = mkOption {
53+ description = "Private key to authenticate with.";
54+ example = "/var/lib/secrets/openconnect_private_key.pem";
55+ default = null;
56+ type = with types; nullOr (either path pkcs11);
57+ };
58+
59+ extraOptions = mkOption {
60+ description = ''
61+ Extra config to be appended to the interface config. It should
62+ contain long-format options as would be accepted on the command
63+ line by <code>openconnect</code>
64+ (see https://www.infradead.org/openconnect/manual.html).
65+ Non-key-value options like <code>deflate</code> can be used by
66+ declaring them as booleans, i. e. <code>deflate = true;</code>.
67+ '';
68+ default = { };
69+ example = {
70+ compression = "stateless";
71+
72+ no-http-keepalive = true;
73+ no-dtls = true;
74+ };
75+ type = with types; attrsOf (either str bool);
76+ };
77+ };
78+ };
79+ generateExtraConfig = extra_cfg:
80+ strings.concatStringsSep "\n" (attrsets.mapAttrsToList
81+ (name: value: if (value == true) then name else "${name}=${value}")
82+ (attrsets.filterAttrs (_: value: value != false) extra_cfg));
83+ generateConfig = name: icfg:
84+ pkgs.writeText "config" ''
85+ interface=${name}
86+ ${optionalString (icfg.user != null) "user=${icfg.user}"}
87+ ${optionalString (icfg.passwordFile != null) "passwd-on-stdin"}
88+ ${optionalString (icfg.certificate != null)
89+ "certificate=${icfg.certificate}"}
90+ ${optionalString (icfg.privateKey != null) "sslkey=${icfg.privateKey}"}
91+
92+ ${generateExtraConfig icfg.extraOptions}
93+ '';
94+ generateUnit = name: icfg: {
95+ description = "OpenConnect Interface - ${name}";
96+ requires = [ "network-online.target" ];
97+ after = [ "network.target" "network-online.target" ];
98+ wantedBy = [ "multi-user.target" ];
99+
100+ serviceConfig = {
101+ Type = "simple";
102+ ExecStart = "${openconnect}/bin/openconnect --config=${
103+ generateConfig name icfg
104+ } ${icfg.gateway}";
105+ StandardInput = "file:${icfg.passwordFile}";
106+
107+ ProtectHome = true;
108+ };
109+ };
110+in {
111+ options.networking.openconnect = {
112+ package = mkPackageOption pkgs "openconnect" { };
113+
114+ interfaces = mkOption {
115+ description = "OpenConnect interfaces.";
116+ default = { };
117+ example = {
118+ openconnect0 = {
119+ gateway = "gateway.example.com";
120+ protocol = "anyconnect";
121+ user = "example-user";
122+ passwordFile = "/var/lib/secrets/openconnect-passwd";
123+ };
124+ };
125+ type = with types; attrsOf (submodule interfaceOptions);
126+ };
127+ };
128+
129+ config = {
130+ systemd.services = mapAttrs' (name: value: {
131+ name = "openconnect-${name}";
132+ value = generateUnit name value;
133+ }) cfg.interfaces;
134+ };
135+
136+ meta.maintainers = with maintainers; [ alyaeanyx ];
137+}
nixos/modules/services/networking/openfire.nixdeleted−56
@@ -1,56 +0,0 @@
1−{ config, lib, pkgs, ... }:
2−
3−with lib;
4−
5−{
6− ###### interface
7−
8− options = {
9−
10− services.openfire = {
11−
12− enable = mkEnableOption "OpenFire XMPP server";
13−
14− usePostgreSQL = mkOption {
15− type = types.bool;
16− default = true;
17− description = "
18− Whether you use PostgreSQL service for your storage back-end.
19− ";
20− };
21−
22− };
23−
24− };
25−
26−
27− ###### implementation
28−
29− config = mkIf config.services.openfire.enable {
30−
31− assertions = singleton
32− { assertion = !(config.services.openfire.usePostgreSQL -> config.services.postgresql.enable);
33− message = "OpenFire configured to use PostgreSQL but services.postgresql.enable is not enabled.";
34− };
35−
36− systemd.services.openfire = {
37− description = "OpenFire XMPP server";
38− wantedBy = [ "multi-user.target" ];
39− after = [ "networking.target" ] ++
40− optional config.services.openfire.usePostgreSQL "postgresql.service";
41− path = with pkgs; [ jre openfire coreutils which gnugrep gawk gnused ];
42− script = ''
43− export HOME=/tmp
44− mkdir /var/log/openfire || true
45− mkdir /etc/openfire || true
46− for i in ${pkgs.openfire}/conf.inst/*; do
47− if ! test -f /etc/openfire/$(basename $i); then
48− cp $i /etc/openfire/
49− fi
50− done
51− openfire start
52− ''; # */
53− };
54− };
55−
56−}
nixos/modules/services/networking/pdns-recursor.nix+12−7
@@ -30,10 +30,10 @@ in {
3030 enable = mkEnableOption "PowerDNS Recursor, a recursive DNS server";
3131
3232 dns.address = mkOption {
33− type = types.str;
34− default = "0.0.0.0";
33+ type = oneOrMore types.str;
34+ default = [ "::" "0.0.0.0" ];
3535 description = ''
36− IP address Recursor DNS server will bind to.
36+ IP addresses Recursor DNS server will bind to.
3737 '';
3838 };
3939
@@ -47,8 +47,12 @@ in {
4747
4848 dns.allowFrom = mkOption {
4949 type = types.listOf types.str;
50− default = [ "10.0.0.0/8" "172.16.0.0/12" "192.168.0.0/16" ];
51− example = [ "0.0.0.0/0" ];
50+ default = [
51+ "127.0.0.0/8" "10.0.0.0/8" "100.64.0.0/10"
52+ "169.254.0.0/16" "192.168.0.0/16" "172.16.0.0/12"
53+ "::1/128" "fc00::/7" "fe80::/10"
54+ ];
55+ example = [ "0.0.0.0/0" "::/0" ];
5256 description = ''
5357 IP address ranges of clients allowed to make DNS queries.
5458 '';
@@ -72,7 +76,8 @@ in {
7276
7377 api.allowFrom = mkOption {
7478 type = types.listOf types.str;
75− default = [ "0.0.0.0/0" ];
79+ default = [ "127.0.0.1" "::1" ];
80+ example = [ "0.0.0.0/0" "::/0" ];
7681 description = ''
7782 IP address ranges of clients allowed to make API requests.
7883 '';
@@ -96,7 +101,7 @@ in {
96101
97102 forwardZonesRecurse = mkOption {
98103 type = types.attrs;
99− example = { eth = "127.0.0.1:5353"; };
104+ example = { eth = "[::1]:5353"; };
100105 default = {};
101106 description = ''
102107 DNS zones to be forwarded to other recursive servers.
nixos/modules/services/networking/prosody.nix+1
@@ -820,6 +820,7 @@ in
820820 '') cfg.muc}
821821
822822 ${ lib.optionalString (cfg.uploadHttp != null) ''
823+ -- TODO: think about migrating this to mod-http_file_share instead.
823824 Component ${toLua cfg.uploadHttp.domain} "http_upload"
824825 http_upload_file_size_limit = ${cfg.uploadHttp.uploadFileSizeLimit}
825826 http_upload_expire_after = ${cfg.uploadHttp.uploadExpireAfter}
nixos/modules/services/networking/shellhub-agent.nix+26−17
@@ -1,31 +1,37 @@
11{ config, lib, pkgs, ... }:
22
33with lib;
4+
45let
56 cfg = config.services.shellhub-agent;
6−in {
7−
7+in
8+{
89 ###### interface
910
1011 options = {
1112
1213 services.shellhub-agent = {
1314
14− enable = mkOption {
15− type = types.bool;
16− default = false;
15+ enable = mkEnableOption "ShellHub Agent daemon";
16+
17+ package = mkPackageOption pkgs "shellhub-agent" { };
18+
19+ preferredHostname = mkOption {
20+ type = types.str;
21+ default = "";
1722 description = ''
18− Whether to enable the ShellHub Agent daemon, which allows
19− secure remote logins.
23+ Set the device preferred hostname. This provides a hint to
24+ the server to use this as hostname if it is available.
2025 '';
2126 };
2227
23− package = mkOption {
24− type = types.package;
25− default = pkgs.shellhub-agent;
26− defaultText = literalExpression "pkgs.shellhub-agent";
28+ keepAliveInterval = mkOption {
29+ type = types.int;
30+ default = 30;
2731 description = ''
28− Which ShellHub Agent package to use.
32+ Determine the interval to send the keep alive message to
33+ the server. This has a direct impact of the bandwidth
34+ used by the device.
2935 '';
3036 };
3137
@@ -74,9 +80,13 @@ in {
7480 "time-sync.target"
7581 ];
7682
77− environment.SERVER_ADDRESS = cfg.server;
78− environment.PRIVATE_KEY = cfg.privateKey;
79− environment.TENANT_ID = cfg.tenantId;
83+ environment = {
84+ SHELLHUB_SERVER_ADDRESS = cfg.server;
85+ SHELLHUB_PRIVATE_KEY = cfg.privateKey;
86+ SHELLHUB_TENANT_ID = cfg.tenantId;
87+ SHELLHUB_KEEPALIVE_INTERVAL = toString cfg.keepAliveInterval;
88+ SHELLHUB_PREFERRED_HOSTNAME = cfg.preferredHostname;
89+ };
8090
8191 serviceConfig = {
8292 # The service starts sessions for different users.
@@ -85,7 +95,6 @@ in {
8595 ExecStart = "${cfg.package}/bin/agent";
8696 };
8797 };
88−
89− environment.systemPackages = [ cfg.package ];
9098 };
9199}
100+
nixos/modules/services/networking/ssh/sshd.nix+1
@@ -441,6 +441,7 @@ in
441441
442442 ${flip concatMapStrings cfg.hostKeys (k: ''
443443 if ! [ -s "${k.path}" ]; then
444+ rm -f "${k.path}"
444445 ssh-keygen \
445446 -t "${k.type}" \
446447 ${if k ? bits then "-b ${toString k.bits}" else ""} \
nixos/modules/services/networking/supplicant.nix+1−1
@@ -43,7 +43,7 @@ let
4343 path = [ pkgs.coreutils ];
4444
4545 preStart = ''
46− ${optionalString (suppl.configFile.path!=null) ''
46+ ${optionalString (suppl.configFile.path!=null && suppl.configFile.writable) ''
4747 (umask 077 && touch -a "${suppl.configFile.path}")
4848 ''}
4949 ${optionalString suppl.userControlled.enable ''
nixos/modules/services/networking/syncplay.nix+17−1
@@ -61,6 +61,15 @@ in
6161 Group to use when running Syncplay.
6262 '';
6363 };
64+
65+ passwordFile = mkOption {
66+ type = types.nullOr types.path;
67+ default = null;
68+ description = ''
69+ Path to the file that contains the server password. If
70+ <literal>null</literal>, the server doesn't require a password.
71+ '';
72+ };
6473 };
6574 };
6675
@@ -71,10 +80,17 @@ in
7180 after = [ "network-online.target" ];
7281
7382 serviceConfig = {
74− ExecStart = "${pkgs.syncplay}/bin/syncplay-server ${escapeShellArgs cmdArgs}";
7583 User = cfg.user;
7684 Group = cfg.group;
85+ LoadCredential = lib.mkIf (cfg.passwordFile != null) "password:${cfg.passwordFile}";
7786 };
87+
88+ script = ''
89+ ${lib.optionalString (cfg.passwordFile != null) ''
90+ export SYNCPLAY_PASSWORD=$(cat "''${CREDENTIALS_DIRECTORY}/password")
91+ ''}
92+ exec ${pkgs.syncplay-nogui}/bin/syncplay-server ${escapeShellArgs cmdArgs}
93+ '';
7894 };
7995 };
8096}
nixos/modules/services/networking/tailscale.nix+9−1
@@ -21,6 +21,12 @@ in {
2121 description = ''The interface name for tunnel traffic. Use "userspace-networking" (beta) to not use TUN.'';
2222 };
2323
24+ permitCertUid = mkOption {
25+ type = types.nullOr types.nonEmptyStr;
26+ default = null;
27+ description = "Username or user ID of the user allowed to to fetch Tailscale TLS certificates for the node.";
28+ };
29+
2430 package = mkOption {
2531 type = types.package;
2632 default = pkgs.tailscale;
@@ -38,7 +44,9 @@ in {
3844 serviceConfig.Environment = [
3945 "PORT=${toString cfg.port}"
4046 ''"FLAGS=--tun ${lib.escapeShellArg cfg.interfaceName}"''
41− ];
47+ ] ++ (lib.optionals (cfg.permitCertUid != null) [
48+ "TS_PERMIT_CERT_UID=${cfg.permitCertUid}"
49+ ]);
4250 };
4351 };
4452}
nixos/modules/services/networking/zeronet.nix+1−1
@@ -90,5 +90,5 @@ in with lib; {
9090 (mkRemovedOptionModule [ "services" "zeronet" "logDir" ] "Zeronet will log by default in /var/lib/zeronet")
9191 ];
9292
93− meta.maintainers = with maintainers; [ chiiruno ];
93+ meta.maintainers = with maintainers; [ Madouura ];
9494}
nixos/modules/services/security/oauth2_proxy.nix+3
@@ -571,8 +571,11 @@ in
571571 users.users.oauth2_proxy = {
572572 description = "OAuth2 Proxy";
573573 isSystemUser = true;
574+ group = "oauth2_proxy";
574575 };
575576
577+ users.groups.oauth2_proxy = {};
578+
576579 systemd.services.oauth2_proxy = {
577580 description = "OAuth2 Proxy";
578581 path = [ cfg.package ];
nixos/modules/services/system/nscd.nix+17−8
@@ -7,10 +7,6 @@ let
77 nssModulesPath = config.system.nssModules.path;
88 cfg = config.services.nscd;
99
10− nscd = if pkgs.stdenv.hostPlatform.libc == "glibc"
11− then pkgs.stdenv.cc.libc.bin
12− else pkgs.glibc.bin;
13−
1410in
1511
1612{
@@ -37,6 +33,19 @@ in
3733 description = "Configuration to use for Name Service Cache Daemon.";
3834 };
3935
36+ package = mkOption {
37+ type = types.package;
38+ default = if pkgs.stdenv.hostPlatform.libc == "glibc"
39+ then pkgs.stdenv.cc.libc.bin
40+ else pkgs.glibc.bin;
41+ defaultText = lib.literalExpression ''
42+ if pkgs.stdenv.hostPlatform.libc == "glibc"
43+ then pkgs.stdenv.cc.libc.bin
44+ else pkgs.glibc.bin;
45+ '';
46+ description = "package containing the nscd binary to be used by the service";
47+ };
48+
4049 };
4150
4251 };
@@ -69,16 +78,16 @@ in
6978 # files. So prefix the ExecStart command with "!" to prevent systemd
7079 # from dropping privileges early. See ExecStart in systemd.service(5).
7180 serviceConfig =
72− { ExecStart = "!@${nscd}/sbin/nscd nscd";
81+ { ExecStart = "!@${cfg.package}/bin/nscd nscd";
7382 Type = "forking";
7483 DynamicUser = true;
7584 RuntimeDirectory = "nscd";
7685 PIDFile = "/run/nscd/nscd.pid";
7786 Restart = "always";
7887 ExecReload =
79− [ "${nscd}/sbin/nscd --invalidate passwd"
80− "${nscd}/sbin/nscd --invalidate group"
81− "${nscd}/sbin/nscd --invalidate hosts"
88+ [ "${cfg.package}/bin/nscd --invalidate passwd"
89+ "${cfg.package}/bin/nscd --invalidate group"
90+ "${cfg.package}/bin/nscd --invalidate hosts"
8291 ];
8392 };
8493 };
nixos/modules/services/ttys/kmscon.nix+24−5
@@ -1,6 +1,6 @@
11{ config, pkgs, lib, ... }:
22let
3− inherit (lib) mkOption types mkIf;
3+ inherit (lib) mapAttrs mkIf mkOption optional optionals types;
44
55 cfg = config.services.kmscon;
66
@@ -28,6 +28,19 @@ in {
2828 default = false;
2929 };
3030
31+ fonts = mkOption {
32+ description = "Fonts used by kmscon, in order of priority.";
33+ default = null;
34+ example = lib.literalExpression ''[ { name = "Source Code Pro"; package = pkgs.source-code-pro; } ]'';
35+ type = with types;
36+ let fontType = submodule {
37+ options = {
38+ name = mkOption { type = str; description = "Font name, as used by fontconfig."; };
39+ package = mkOption { type = package; description = "Package providing the font."; };
40+ };
41+ }; in nullOr (nonEmptyListOf fontType);
42+ };
43+
3144 extraConfig = mkOption {
3245 description = "Extra contents of the kmscon.conf file.";
3346 type = types.lines;
@@ -87,11 +100,17 @@ in {
87100
88101 systemd.services.systemd-vconsole-setup.enable = false;
89102
90− services.kmscon.extraConfig = mkIf cfg.hwRender ''
91− drm
92− hwaccel
93− '';
103+ services.kmscon.extraConfig =
104+ let
105+ render = optionals cfg.hwRender [ "drm" "hwaccel" ];
106+ fonts = optional (cfg.fonts != null) "font-name=${lib.concatMapStringsSep ", " (f: f.name) cfg.fonts}";
107+ in lib.concatStringsSep "\n" (render ++ fonts);
94108
95109 hardware.opengl.enable = mkIf cfg.hwRender true;
110+
111+ fonts = mkIf (cfg.fonts != null) {
112+ fontconfig.enable = true;
113+ fonts = map (f: f.package) cfg.fonts;
114+ };
96115 };
97116}
nixos/modules/services/web-apps/atlassian/jira.nix+1
@@ -151,6 +151,7 @@ in
151151 users.users.${cfg.user} = {
152152 isSystemUser = true;
153153 group = cfg.group;
154+ home = cfg.home;
154155 };
155156
156157 users.groups.${cfg.group} = {};
nixos/modules/services/web-apps/discourse.nix+9−3
@@ -609,6 +609,7 @@ in
609609 connection_reaper_interval = 30;
610610 relative_url_root = null;
611611 message_bus_max_backlog_size = 100;
612+ message_bus_clear_every = 50;
612613 secret_key_base = cfg.secretKeyBaseFile;
613614 fallback_assets_path = null;
614615
@@ -655,7 +656,12 @@ in
655656 long_polling_interval = null;
656657 };
657658
658− services.redis.enable = lib.mkDefault (cfg.redis.host == "localhost");
659+ services.redis.servers.discourse =
660+ lib.mkIf (lib.elem cfg.redis.host [ "localhost" "127.0.0.1" ]) {
661+ enable = true;
662+ bind = cfg.redis.host;
663+ port = cfg.backendSettings.redis_port;
664+ };
659665
660666 services.postgresql = lib.mkIf databaseActuallyCreateLocally {
661667 enable = true;
@@ -696,12 +702,12 @@ in
696702 systemd.services.discourse = {
697703 wantedBy = [ "multi-user.target" ];
698704 after = [
699− "redis.service"
705+ "redis-discourse.service"
700706 "postgresql.service"
701707 "discourse-postgresql.service"
702708 ];
703709 bindsTo = [
704− "redis.service"
710+ "redis-discourse.service"
705711 ] ++ lib.optionals (cfg.database.host == null) [
706712 "postgresql.service"
707713 "discourse-postgresql.service"
nixos/modules/services/web-apps/galene.nix+29
@@ -164,6 +164,35 @@ in
164164 optional (cfg.dataDir == defaultdataDir) "galene/data" ++
165165 optional (cfg.groupsDir == defaultgroupsDir) "galene/groups" ++
166166 optional (cfg.recordingsDir == defaultrecordingsDir) "galene/recordings";
167+
168+ # Hardening
169+ CapabilityBoundingSet = [ "" ];
170+ DeviceAllow = [ "" ];
171+ LockPersonality = true;
172+ MemoryDenyWriteExecute = true;
173+ NoNewPrivileges = true;
174+ PrivateDevices = true;
175+ PrivateTmp = true;
176+ PrivateUsers = true;
177+ ProcSubset = "pid";
178+ ProtectClock = true;
179+ ProtectControlGroups = true;
180+ ProtectHome = true;
181+ ProtectHostname = true;
182+ ProtectKernelLogs = true;
183+ ProtectKernelModules = true;
184+ ProtectKernelTunables = true;
185+ ProtectProc = "invisible";
186+ ProtectSystem = "strict";
187+ ReadWritePaths = cfg.recordingsDir;
188+ RemoveIPC = true;
189+ RestrictAddressFamilies = [ "AF_INET" "AF_INET6" ];
190+ RestrictNamespaces = true;
191+ RestrictRealtime = true;
192+ RestrictSUIDSGID = true;
193+ SystemCallArchitectures = "native";
194+ SystemCallFilter = [ "@system-service" "~@privileged" "~@resources" ];
195+ UMask = "0077";
167196 }
168197 ];
169198 };
nixos/modules/services/web-apps/keycloak.nix+360−514
@@ -4,20 +4,94 @@ let
44 cfg = config.services.keycloak;
55 opt = options.services.keycloak;
66
7− inherit (lib) types mkOption concatStringsSep mapAttrsToList
8− escapeShellArg recursiveUpdate optionalAttrs boolToString mkOrder
9− sort filterAttrs concatMapStringsSep concatStrings mkIf
10− optionalString optionals mkDefault literalExpression hasSuffix
11− foldl' isAttrs filter attrNames elem literalDocBook
12− maintainers;
13−
14− inherit (builtins) match typeOf;
7+ inherit (lib)
8+ types
9+ mkMerge
10+ mkOption
11+ mkChangedOptionModule
12+ mkRenamedOptionModule
13+ mkRemovedOptionModule
14+ concatStringsSep
15+ mapAttrsToList
16+ escapeShellArg
17+ mkIf
18+ optionalString
19+ optionals
20+ mkDefault
21+ literalExpression
22+ isAttrs
23+ literalDocBook
24+ maintainers
25+ catAttrs
26+ collect
27+ splitString
28+ ;
29+
30+ inherit (builtins)
31+ elem
32+ typeOf
33+ isInt
34+ isString
35+ hashString
36+ isPath
37+ ;
38+
39+ prefixUnlessEmpty = prefix: string: optionalString (string != "") "${prefix}${string}";
1540in
1641{
42+ imports =
43+ [
44+ (mkRenamedOptionModule
45+ [ "services" "keycloak" "bindAddress" ]
46+ [ "services" "keycloak" "settings" "http-host" ])
47+ (mkRenamedOptionModule
48+ [ "services" "keycloak" "forceBackendUrlToFrontendUrl"]
49+ [ "services" "keycloak" "settings" "hostname-strict-backchannel"])
50+ (mkChangedOptionModule
51+ [ "services" "keycloak" "httpPort" ]
52+ [ "services" "keycloak" "settings" "http-port" ]
53+ (config:
54+ builtins.fromJSON config.services.keycloak.httpPort))
55+ (mkChangedOptionModule
56+ [ "services" "keycloak" "httpsPort" ]
57+ [ "services" "keycloak" "settings" "https-port" ]
58+ (config:
59+ builtins.fromJSON config.services.keycloak.httpsPort))
60+ (mkRemovedOptionModule
61+ [ "services" "keycloak" "frontendUrl" ]
62+ ''
63+ Set `services.keycloak.settings.hostname' and `services.keycloak.settings.http-relative-path' instead.
64+ NOTE: You likely want to set 'http-relative-path' to '/auth' to keep compatibility with your clients.
65+ See its description for more information.
66+ '')
67+ (mkRemovedOptionModule
68+ [ "services" "keycloak" "extraConfig" ]
69+ "Use `services.keycloak.settings' instead.")
70+ ];
71+
1772 options.services.keycloak =
1873 let
19− inherit (types) bool str nullOr attrsOf path enum anything
20− package port;
74+ inherit (types)
75+ bool
76+ str
77+ int
78+ nullOr
79+ attrsOf
80+ oneOf
81+ path
82+ enum
83+ package
84+ port;
85+
86+ assertStringPath = optionName: value:
87+ if isPath value then
88+ throw ''
89+ services.keycloak.${optionName}:
90+ ${toString value}
91+ is a Nix path, but should be a string, since Nix
92+ paths are copied into the world-readable Nix store.
93+ ''
94+ else value;
2195 in
2296 {
2397 enable = mkOption {
@@ -30,89 +104,14 @@ in
30104 '';
31105 };
32106
33− bindAddress = mkOption {
34− type = str;
35− default = "\${jboss.bind.address:0.0.0.0}";
36− example = "127.0.0.1";
37− description = ''
38− On which address Keycloak should accept new connections.
39−
40− A special syntax can be used to allow command line Java system
41− properties to override the value: ''${property.name:value}
42− '';
43− };
44−
45− httpPort = mkOption {
46− type = str;
47− default = "\${jboss.http.port:80}";
48− example = "8080";
49− description = ''
50− On which port Keycloak should listen for new HTTP connections.
51−
52− A special syntax can be used to allow command line Java system
53− properties to override the value: ''${property.name:value}
54− '';
55− };
56−
57− httpsPort = mkOption {
58− type = str;
59− default = "\${jboss.https.port:443}";
60− example = "8443";
61− description = ''
62− On which port Keycloak should listen for new HTTPS connections.
63−
64− A special syntax can be used to allow command line Java system
65− properties to override the value: ''${property.name:value}
66− '';
67− };
68−
69− frontendUrl = mkOption {
70− type = str;
71− apply = x:
72− if x == "" || hasSuffix "/" x then
73− x
74− else
75− x + "/";
76− example = "keycloak.example.com/auth";
77− description = ''
78− The public URL used as base for all frontend requests. Should
79− normally include a trailing <literal>/auth</literal>.
80−
81− See <link xlink:href="https://www.keycloak.org/docs/latest/server_installation/#_hostname">the
82− Hostname section of the Keycloak server installation
83− manual</link> for more information.
84− '';
85− };
86−
87− forceBackendUrlToFrontendUrl = mkOption {
88− type = bool;
89− default = false;
90− example = true;
91− description = ''
92− Whether Keycloak should force all requests to go through the
93− frontend URL configured in <xref
94− linkend="opt-services.keycloak.frontendUrl" />. By default,
95− Keycloak allows backend requests to instead use its local
96− hostname or IP address and may also advertise it to clients
97− through its OpenID Connect Discovery endpoint.
98−
99− See <link
100− xlink:href="https://www.keycloak.org/docs/latest/server_installation/#_hostname">the
101− Hostname section of the Keycloak server installation
102− manual</link> for more information.
103− '';
104− };
105−
106107 sslCertificate = mkOption {
107108 type = nullOr path;
108109 default = null;
109110 example = "/run/keys/ssl_cert";
111+ apply = assertStringPath "sslCertificate";
110112 description = ''
111113 The path to a PEM formatted certificate to use for TLS/SSL
112114 connections.
113−
114− This should be a string, not a Nix path, since Nix paths are
115− copied into the world-readable Nix store.
116115 '';
117116 };
118117
@@ -120,28 +119,28 @@ in
120119 type = nullOr path;
121120 default = null;
122121 example = "/run/keys/ssl_key";
122+ apply = assertStringPath "sslCertificateKey";
123123 description = ''
124124 The path to a PEM formatted private key to use for TLS/SSL
125125 connections.
126−
127− This should be a string, not a Nix path, since Nix paths are
128− copied into the world-readable Nix store.
129126 '';
130127 };
131128
132129 plugins = lib.mkOption {
133130 type = lib.types.listOf lib.types.path;
134− default = [];
131+ default = [ ];
135132 description = ''
136− Keycloak plugin jar, ear files or derivations with them
133+ Keycloak plugin jar, ear files or derivations containing
134+ them. Packaged plugins are available through
135+ <literal>pkgs.keycloak.plugins</literal>.
137136 '';
138137 };
139138
140139 database = {
141140 type = mkOption {
142− type = enum [ "mysql" "postgresql" ];
141+ type = enum [ "mysql" "mariadb" "postgresql" ];
143142 default = "postgresql";
144− example = "mysql";
143+ example = "mariadb";
145144 description = ''
146145 The type of database Keycloak should connect to.
147146 '';
@@ -159,6 +158,7 @@ in
159158 let
160159 dbPorts = {
161160 postgresql = 5432;
161+ mariadb = 3306;
162162 mysql = 3306;
163163 };
164164 in
@@ -207,6 +207,21 @@ in
207207 '';
208208 };
209209
210+ name = mkOption {
211+ type = str;
212+ default = "keycloak";
213+ description = ''
214+ Database name to use when connecting to an external or
215+ manually provisioned database; has no effect when a local
216+ database is automatically provisioned.
217+
218+ To use this with a local database, set <xref
219+ linkend="opt-services.keycloak.database.createLocally" /> to
220+ <literal>false</literal> and create the database and user
221+ manually.
222+ '';
223+ };
224+
210225 username = mkOption {
211226 type = str;
212227 default = "keycloak";
@@ -218,19 +233,16 @@ in
218233 To use this with a local database, set <xref
219234 linkend="opt-services.keycloak.database.createLocally" /> to
220235 <literal>false</literal> and create the database and user
221− manually. The database should be called
222− <literal>keycloak</literal>.
236+ manually.
223237 '';
224238 };
225239
226240 passwordFile = mkOption {
227241 type = path;
228242 example = "/run/keys/db_password";
243+ apply = assertStringPath "passwordFile";
229244 description = ''
230− File containing the database password.
231−
232− This should be a string, not a Nix path, since Nix paths are
233− copied into the world-readable Nix store.
245+ The path to a file containing the database password.
234246 '';
235247 };
236248 };
@@ -268,67 +280,181 @@ in
268280 '';
269281 };
270282
271− extraConfig = mkOption {
272− type = attrsOf anything;
273− default = { };
283+ settings = mkOption {
284+ type = lib.types.submodule {
285+ freeformType = attrsOf (nullOr (oneOf [ str int bool (attrsOf path) ]));
286+
287+ options = {
288+ http-host = mkOption {
289+ type = str;
290+ default = "0.0.0.0";
291+ example = "127.0.0.1";
292+ description = ''
293+ On which address Keycloak should accept new connections.
294+ '';
295+ };
296+
297+ http-port = mkOption {
298+ type = port;
299+ default = 80;
300+ example = 8080;
301+ description = ''
302+ On which port Keycloak should listen for new HTTP connections.
303+ '';
304+ };
305+
306+ https-port = mkOption {
307+ type = port;
308+ default = 443;
309+ example = 8443;
310+ description = ''
311+ On which port Keycloak should listen for new HTTPS connections.
312+ '';
313+ };
314+
315+ http-relative-path = mkOption {
316+ type = str;
317+ default = "";
318+ example = "/auth";
319+ description = ''
320+ The path relative to <literal>/</literal> for serving
321+ resources.
322+
323+ <note>
324+ <para>
325+ In versions of Keycloak using Wildfly (&lt;17),
326+ this defaulted to <literal>/auth</literal>. If
327+ upgrading from the Wildfly version of Keycloak,
328+ i.e. a NixOS version before 22.05, you'll likely
329+ want to set this to <literal>/auth</literal> to
330+ keep compatibility with your clients.
331+
332+ See <link
333+ xlink:href="https://www.keycloak.org/migration/migrating-to-quarkus"
334+ /> for more information on migrating from Wildfly
335+ to Quarkus.
336+ </para>
337+ </note>
338+ '';
339+ };
340+
341+ hostname = mkOption {
342+ type = str;
343+ example = "keycloak.example.com";
344+ description = ''
345+ The hostname part of the public URL used as base for
346+ all frontend requests.
347+
348+ See <link xlink:href="https://www.keycloak.org/server/hostname" />
349+ for more information about hostname configuration.
350+ '';
351+ };
352+
353+ hostname-strict-backchannel = mkOption {
354+ type = bool;
355+ default = false;
356+ example = true;
357+ description = ''
358+ Whether Keycloak should force all requests to go
359+ through the frontend URL. By default, Keycloak allows
360+ backend requests to instead use its local hostname or
361+ IP address and may also advertise it to clients
362+ through its OpenID Connect Discovery endpoint.
363+
364+ See <link xlink:href="https://www.keycloak.org/server/hostname" />
365+ for more information about hostname configuration.
366+ '';
367+ };
368+
369+ proxy = mkOption {
370+ type = enum [ "edge" "reencrypt" "passthrough" "none" ];
371+ default = "none";
372+ example = "edge";
373+ description = ''
374+ The proxy address forwarding mode if the server is
375+ behind a reverse proxy.
376+
377+ <variablelist>
378+ <varlistentry>
379+ <term>edge</term>
380+ <listitem>
381+ <para>
382+ Enables communication through HTTP between the
383+ proxy and Keycloak.
384+ </para>
385+ </listitem>
386+ </varlistentry>
387+ <varlistentry>
388+ <term>reencrypt</term>
389+ <listitem>
390+ <para>
391+ Requires communication through HTTPS between the
392+ proxy and Keycloak.
393+ </para>
394+ </listitem>
395+ </varlistentry>
396+ <varlistentry>
397+ <term>passthrough</term>
398+ <listitem>
399+ <para>
400+ Enables communication through HTTP or HTTPS between
401+ the proxy and Keycloak.
402+ </para>
403+ </listitem>
404+ </varlistentry>
405+ </variablelist>
406+
407+ See <link
408+ xlink:href="https://www.keycloak.org/server/reverseproxy"
409+ /> for more information.
410+ '';
411+ };
412+ };
413+ };
414+
274415 example = literalExpression ''
275416 {
276− "subsystem=keycloak-server" = {
277− "spi=hostname" = {
278− "provider=default" = null;
279− "provider=fixed" = {
280− enabled = true;
281− properties.hostname = "keycloak.example.com";
282− };
283− default-provider = "fixed";
284− };
285− };
417+ hostname = "keycloak.example.com";
418+ proxy = "reencrypt";
419+ https-key-store-file = "/path/to/file";
420+ https-key-store-password = { _secret = "/run/keys/store_password"; };
286421 }
287422 '';
423+
288424 description = ''
289− Additional Keycloak configuration options to set in
290− <literal>standalone.xml</literal>.
291−
292− Options are expressed as a Nix attribute set which matches the
293− structure of the jboss-cli configuration. The configuration is
294− effectively overlayed on top of the default configuration
295− shipped with Keycloak. To remove existing nodes and undefine
296− attributes from the default configuration, set them to
297− <literal>null</literal>.
298−
299− The example configuration does the equivalent of the following
300− script, which removes the hostname provider
301− <literal>default</literal>, adds the deprecated hostname
302− provider <literal>fixed</literal> and defines it the default:
303−
304− <programlisting>
305− /subsystem=keycloak-server/spi=hostname/provider=default:remove()
306− /subsystem=keycloak-server/spi=hostname/provider=fixed:add(enabled = true, properties = { hostname = "keycloak.example.com" })
307− /subsystem=keycloak-server/spi=hostname:write-attribute(name=default-provider, value="fixed")
308− </programlisting>
309−
310− You can discover available options by using the <link
311− xlink:href="http://docs.wildfly.org/21/Admin_Guide.html#Command_Line_Interface">jboss-cli.sh</link>
312− program and by referring to the <link
313− xlink:href="https://www.keycloak.org/docs/latest/server_installation/index.html">Keycloak
314− Server Installation and Configuration Guide</link>.
425+ Configuration options corresponding to parameters set in
426+ <filename>conf/keycloak.conf</filename>.
427+
428+ Most available options are documented at <link
429+ xlink:href="https://www.keycloak.org/server/all-config" />.
430+
431+ Options containing secret data should be set to an attribute
432+ set containing the attribute <literal>_secret</literal> - a
433+ string pointing to a file containing the value the option
434+ should be set to. See the example to get a better picture of
435+ this: in the resulting
436+ <filename>conf/keycloak.conf</filename> file, the
437+ <literal>https-key-store-password</literal> key will be set
438+ to the contents of the
439+ <filename>/run/keys/store_password</filename> file.
315440 '';
316441 };
317−
318442 };
319443
320444 config =
321445 let
322− # We only want to create a database if we're actually going to connect to it.
446+ # We only want to create a database if we're actually going to
447+ # connect to it.
323448 databaseActuallyCreateLocally = cfg.database.createLocally && cfg.database.host == "localhost";
324449 createLocalPostgreSQL = databaseActuallyCreateLocally && cfg.database.type == "postgresql";
325− createLocalMySQL = databaseActuallyCreateLocally && cfg.database.type == "mysql";
450+ createLocalMySQL = databaseActuallyCreateLocally && elem cfg.database.type [ "mysql" "mariadb" ];
326451
327452 mySqlCaKeystore = pkgs.runCommand "mysql-ca-keystore" { } ''
328453 ${pkgs.jre}/bin/keytool -importcert -trustcacerts -alias MySQLCACert -file ${cfg.database.caCert} -keystore $out -storepass notsosecretpassword -noprompt
329454 '';
330455
331− # Both theme and theme type directories need to be actual directories in one hierarchy to pass Keycloak checks.
456+ # Both theme and theme type directories need to be actual
457+ # directories in one hierarchy to pass Keycloak checks.
332458 themesBundle = pkgs.runCommand "keycloak-themes" { } ''
333459 linkTheme() {
334460 theme="$1"
@@ -347,7 +473,7 @@ in
347473 }
348474
349475 mkdir -p "$out"
350− for theme in ${cfg.package}/themes/*; do
476+ for theme in ${keycloakBuild}/themes/*; do
351477 if [ -d "$theme" ]; then
352478 linkTheme "$theme" "$(basename "$theme")"
353479 fi
@@ -356,329 +482,25 @@ in
356482 ${concatStringsSep "\n" (mapAttrsToList (name: theme: "linkTheme ${theme} ${escapeShellArg name}") cfg.themes)}
357483 '';
358484
359− keycloakConfig' = foldl' recursiveUpdate
360− {
361− "interface=public".inet-address = cfg.bindAddress;
362− "socket-binding-group=standard-sockets"."socket-binding=http".port = cfg.httpPort;
363− "subsystem=keycloak-server" = {
364− "spi=hostname"."provider=default" = {
365− enabled = true;
366− properties = {
367− inherit (cfg) frontendUrl forceBackendUrlToFrontendUrl;
368− };
369− };
370− "theme=defaults".dir = toString themesBundle;
371− };
372− "subsystem=datasources"."data-source=KeycloakDS" = {
373− max-pool-size = "20";
374− user-name = if databaseActuallyCreateLocally then "keycloak" else cfg.database.username;
375− password = "@db-password@";
376− };
377− } [
378− (optionalAttrs (cfg.database.type == "postgresql") {
379− "subsystem=datasources" = {
380− "jdbc-driver=postgresql" = {
381− driver-module-name = "org.postgresql";
382− driver-name = "postgresql";
383− driver-xa-datasource-class-name = "org.postgresql.xa.PGXADataSource";
384− };
385− "data-source=KeycloakDS" = {
386− connection-url = "jdbc:postgresql://${cfg.database.host}:${toString cfg.database.port}/keycloak";
387− driver-name = "postgresql";
388− "connection-properties=ssl".value = boolToString cfg.database.useSSL;
389− } // (optionalAttrs (cfg.database.caCert != null) {
390− "connection-properties=sslrootcert".value = cfg.database.caCert;
391− "connection-properties=sslmode".value = "verify-ca";
392− });
393− };
394− })
395− (optionalAttrs (cfg.database.type == "mysql") {
396− "subsystem=datasources" = {
397− "jdbc-driver=mysql" = {
398− driver-module-name = "com.mysql";
399− driver-name = "mysql";
400− driver-class-name = "com.mysql.jdbc.Driver";
401− };
402− "data-source=KeycloakDS" = {
403− connection-url = "jdbc:mysql://${cfg.database.host}:${toString cfg.database.port}/keycloak";
404− driver-name = "mysql";
405− "connection-properties=useSSL".value = boolToString cfg.database.useSSL;
406− "connection-properties=requireSSL".value = boolToString cfg.database.useSSL;
407− "connection-properties=verifyServerCertificate".value = boolToString cfg.database.useSSL;
408− "connection-properties=characterEncoding".value = "UTF-8";
409− valid-connection-checker-class-name = "org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker";
410− validate-on-match = true;
411− exception-sorter-class-name = "org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter";
412− } // (optionalAttrs (cfg.database.caCert != null) {
413− "connection-properties=trustCertificateKeyStoreUrl".value = "file:${mySqlCaKeystore}";
414− "connection-properties=trustCertificateKeyStorePassword".value = "notsosecretpassword";
415− });
416− };
417− })
418− (optionalAttrs (cfg.sslCertificate != null && cfg.sslCertificateKey != null) {
419− "socket-binding-group=standard-sockets"."socket-binding=https".port = cfg.httpsPort;
420− "subsystem=elytron" = mkOrder 900 {
421− "key-store=httpsKS" = mkOrder 900 {
422− path = "/run/keycloak/ssl/certificate_private_key_bundle.p12";
423− credential-reference.clear-text = "notsosecretpassword";
424− type = "JKS";
425− };
426− "key-manager=httpsKM" = mkOrder 901 {
427− key-store = "httpsKS";
428− credential-reference.clear-text = "notsosecretpassword";
429− };
430− "server-ssl-context=httpsSSC" = mkOrder 902 {
431− key-manager = "httpsKM";
432− };
433− };
434− "subsystem=undertow" = mkOrder 901 {
435− "server=default-server"."https-listener=https".ssl-context = "httpsSSC";
436− };
437− })
438− cfg.extraConfig
439− ];
440−
441−
442− /* Produces a JBoss CLI script that creates paths and sets
443− attributes matching those described by `attrs`. When the
444− script is run, the existing settings are effectively overlayed
445− by those from `attrs`. Existing attributes can be unset by
446− defining them `null`.
447−
448− JBoss paths and attributes / maps are distinguished by their
449− name, where paths follow a `key=value` scheme.
450−
451− Example:
452− mkJbossScript {
453− "subsystem=keycloak-server"."spi=hostname" = {
454− "provider=fixed" = null;
455− "provider=default" = {
456− enabled = true;
457− properties = {
458− inherit frontendUrl;
459− forceBackendUrlToFrontendUrl = false;
460− };
461− };
462− };
463− }
464− => ''
465− if (outcome != success) of /:read-resource()
466− /:add()
467− end-if
468− if (outcome != success) of /subsystem=keycloak-server:read-resource()
469− /subsystem=keycloak-server:add()
470− end-if
471− if (outcome != success) of /subsystem=keycloak-server/spi=hostname:read-resource()
472− /subsystem=keycloak-server/spi=hostname:add()
473− end-if
474− if (outcome != success) of /subsystem=keycloak-server/spi=hostname/provider=default:read-resource()
475− /subsystem=keycloak-server/spi=hostname/provider=default:add(enabled = true, properties = { forceBackendUrlToFrontendUrl = false, frontendUrl = "https://keycloak.example.com/auth" })
476− end-if
477− if (result != true) of /subsystem=keycloak-server/spi=hostname/provider=default:read-attribute(name="enabled")
478− /subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=enabled, value=true)
479− end-if
480− if (result != false) of /subsystem=keycloak-server/spi=hostname/provider=default:read-attribute(name="properties.forceBackendUrlToFrontendUrl")
481− /subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=properties.forceBackendUrlToFrontendUrl, value=false)
482− end-if
483− if (result != "https://keycloak.example.com/auth") of /subsystem=keycloak-server/spi=hostname/provider=default:read-attribute(name="properties.frontendUrl")
484− /subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=properties.frontendUrl, value="https://keycloak.example.com/auth")
485− end-if
486− if (outcome != success) of /subsystem=keycloak-server/spi=hostname/provider=fixed:read-resource()
487− /subsystem=keycloak-server/spi=hostname/provider=fixed:remove()
488− end-if
489− ''
490− */
491− mkJbossScript = attrs:
492− let
493− /* From a JBoss path and an attrset, produces a JBoss CLI
494− snippet that writes the corresponding attributes starting
495− at `path`. Recurses down into subattrsets as necessary,
496− producing the variable name from its full path in the
497− attrset.
498−
499− Example:
500− writeAttributes "/subsystem=keycloak-server/spi=hostname/provider=default" {
501− enabled = true;
502− properties = {
503− forceBackendUrlToFrontendUrl = false;
504− frontendUrl = "https://keycloak.example.com/auth";
505− };
506− }
507− => ''
508− if (result != true) of /subsystem=keycloak-server/spi=hostname/provider=default:read-attribute(name="enabled")
509− /subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=enabled, value=true)
510− end-if
511− if (result != false) of /subsystem=keycloak-server/spi=hostname/provider=default:read-attribute(name="properties.forceBackendUrlToFrontendUrl")
512− /subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=properties.forceBackendUrlToFrontendUrl, value=false)
513− end-if
514− if (result != "https://keycloak.example.com/auth") of /subsystem=keycloak-server/spi=hostname/provider=default:read-attribute(name="properties.frontendUrl")
515− /subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=properties.frontendUrl, value="https://keycloak.example.com/auth")
516− end-if
517− ''
518− */
519− writeAttributes = path: set:
520− let
521− # JBoss expressions like `${var}` need to be prefixed
522− # with `expression` to evaluate.
523− prefixExpression = string:
524− let
525− matchResult = match ''"\$\{.*}"'' string;
526− in
527− if matchResult != null then
528− "expression " + string
529− else
530− string;
531−
532− writeAttribute = attribute: value:
533− let
534− type = typeOf value;
535− in
536− if type == "set" then
537− let
538− names = attrNames value;
539− in
540− foldl' (text: name: text + (writeAttribute "${attribute}.${name}" value.${name})) "" names
541− else if value == null then ''
542− if (outcome == success) of ${path}:read-attribute(name="${attribute}")
543− ${path}:undefine-attribute(name="${attribute}")
544− end-if
545− ''
546− else if elem type [ "string" "path" "bool" ] then
547− let
548− value' = if type == "bool" then boolToString value else ''"${value}"'';
549− in
550− ''
551− if (result != ${prefixExpression value'}) of ${path}:read-attribute(name="${attribute}")
552− ${path}:write-attribute(name=${attribute}, value=${value'})
553− end-if
554− ''
555− else throw "Unsupported type '${type}' for path '${path}'!";
556− in
557− concatStrings
558− (mapAttrsToList
559− (attribute: value: (writeAttribute attribute value))
560− set);
561−
562−
563− /* Produces an argument list for the JBoss `add()` function,
564− which adds a JBoss path and takes as its arguments the
565− required subpaths and attributes.
566−
567− Example:
568− makeArgList {
569− enabled = true;
570− properties = {
571− forceBackendUrlToFrontendUrl = false;
572− frontendUrl = "https://keycloak.example.com/auth";
573− };
574− }
575− => ''
576− enabled = true, properties = { forceBackendUrlToFrontendUrl = false, frontendUrl = "https://keycloak.example.com/auth" }
577− ''
578− */
579− makeArgList = set:
580− let
581− makeArg = attribute: value:
582− let
583− type = typeOf value;
584− in
585− if type == "set" then
586− "${attribute} = { " + (makeArgList value) + " }"
587− else if elem type [ "string" "path" "bool" ] then
588− "${attribute} = ${if type == "bool" then boolToString value else ''"${value}"''}"
589− else if value == null then
590− ""
591− else
592− throw "Unsupported type '${type}' for attribute '${attribute}'!";
593−
594− in
595− concatStringsSep ", " (mapAttrsToList makeArg set);
596−
597−
598− /* Recurses into the `nodeValue` attrset. Only subattrsets that
599− are JBoss paths, i.e. follows the `key=value` format, are recursed
600− into - the rest are considered JBoss attributes / maps.
601− */
602− recurse = nodePath: nodeValue:
603− let
604− nodeContent =
605− if isAttrs nodeValue && nodeValue._type or "" == "order" then
606− nodeValue.content
607− else
608− nodeValue;
609− isPath = name:
610− let
611− value = nodeContent.${name};
612− in
613− if (match ".*([=]).*" name) == [ "=" ] then
614− if isAttrs value || value == null then
615− true
616− else
617− throw "Parsing path '${concatStringsSep "." (nodePath ++ [ name ])}' failed: JBoss attributes cannot contain '='!"
618− else
619− false;
620− jbossPath = "/" + concatStringsSep "/" nodePath;
621− children = if !isAttrs nodeContent then { } else nodeContent;
622− subPaths = filter isPath (attrNames children);
623− getPriority = name:
624− let
625− value = children.${name};
626− in
627− if value._type or "" == "order" then value.priority else 1000;
628− orderedSubPaths = sort (a: b: getPriority a < getPriority b) subPaths;
629− jbossAttrs = filterAttrs (name: _: !(isPath name)) children;
630− text =
631− if nodeContent != null then
632− ''
633− if (outcome != success) of ${jbossPath}:read-resource()
634− ${jbossPath}:add(${makeArgList jbossAttrs})
635− end-if
636− '' + writeAttributes jbossPath jbossAttrs
637− else
638− ''
639− if (outcome == success) of ${jbossPath}:read-resource()
640− ${jbossPath}:remove()
641− end-if
642− '';
643− in
644− text + concatMapStringsSep "\n" (name: recurse (nodePath ++ [ name ]) children.${name}) orderedSubPaths;
645− in
646− recurse [ ] attrs;
647−
648− jbossCliScript = pkgs.writeText "jboss-cli-script" (mkJbossScript keycloakConfig');
649−
650− keycloakConfig = pkgs.runCommand "keycloak-config"
651− {
652− nativeBuildInputs = [ cfg.package ];
653− }
654− ''
655− export JBOSS_BASE_DIR="$(pwd -P)";
656− export JBOSS_MODULEPATH="${cfg.package}/modules";
657− export JBOSS_LOG_DIR="$JBOSS_BASE_DIR/log";
658−
659− cp -r ${cfg.package}/standalone/configuration .
660− chmod -R u+rwX ./configuration
661−
662− mkdir -p {deployments,ssl}
663−
664− standalone.sh&
665−
666− attempt=1
667− max_attempts=30
668− while ! jboss-cli.sh --connect ':read-attribute(name=server-state)'; do
669− if [[ "$attempt" == "$max_attempts" ]]; then
670− echo "ERROR: Could not connect to Keycloak after $attempt attempts! Failing.." >&2
671− exit 1
672− fi
673− echo "Keycloak not fully started yet, retrying.. ($attempt/$max_attempts)"
674− sleep 1
675− (( attempt++ ))
676− done
677−
678− jboss-cli.sh --connect --file=${jbossCliScript} --echo-command
485+ keycloakConfig = lib.generators.toKeyValue {
486+ mkKeyValue = lib.flip lib.generators.mkKeyValueDefault "=" {
487+ mkValueString = v: with builtins;
488+ if isInt v then toString v
489+ else if isString v then v
490+ else if true == v then "true"
491+ else if false == v then "false"
492+ else if isSecret v then hashString "sha256" v._secret
493+ else throw "unsupported type ${typeOf v}: ${(lib.generators.toPretty {}) v}";
494+ };
495+ };
679496
680− cp configuration/standalone.xml $out
681− '';
497+ isSecret = v: isAttrs v && v ? _secret && isString v._secret;
498+ filteredConfig = lib.converge (lib.filterAttrsRecursive (_: v: ! elem v [{ } null])) cfg.settings;
499+ confFile = pkgs.writeText "keycloak.conf" (keycloakConfig filteredConfig);
500+ keycloakBuild = cfg.package.override {
501+ inherit confFile;
502+ plugins = cfg.package.enabledPlugins ++ cfg.plugins;
503+ };
682504 in
683505 mkIf cfg.enable
684506 {
@@ -689,7 +511,46 @@ in
689511 }
690512 ];
691513
692− environment.systemPackages = [ cfg.package ];
514+ environment.systemPackages = [ keycloakBuild ];
515+
516+ services.keycloak.settings =
517+ let
518+ postgresParams = concatStringsSep "&" (
519+ optionals cfg.database.useSSL [
520+ "ssl=true"
521+ ] ++ optionals (cfg.database.caCert != null) [
522+ "sslrootcert=${cfg.database.caCert}"
523+ "sslmode=verify-ca"
524+ ]
525+ );
526+ mariadbParams = concatStringsSep "&" ([
527+ "characterEncoding=UTF-8"
528+ ] ++ optionals cfg.database.useSSL [
529+ "useSSL=true"
530+ "requireSSL=true"
531+ "verifyServerCertificate=true"
532+ ] ++ optionals (cfg.database.caCert != null) [
533+ "trustCertificateKeyStoreUrl=file:${mySqlCaKeystore}"
534+ "trustCertificateKeyStorePassword=notsosecretpassword"
535+ ]);
536+ dbProps = if cfg.database.type == "postgresql" then postgresParams else mariadbParams;
537+ in
538+ mkMerge [
539+ {
540+ db = if cfg.database.type == "postgresql" then "postgres" else cfg.database.type;
541+ db-username = if databaseActuallyCreateLocally then "keycloak" else cfg.database.username;
542+ db-password._secret = cfg.database.passwordFile;
543+ db-url-host = cfg.database.host;
544+ db-url-port = toString cfg.database.port;
545+ db-url-database = if databaseActuallyCreateLocally then "keycloak" else cfg.database.name;
546+ db-url-properties = prefixUnlessEmpty "?" dbProps;
547+ db-url = null;
548+ }
549+ (mkIf (cfg.sslCertificate != null && cfg.sslCertificateKey != null) {
550+ https-certificate-file = "/run/keycloak/ssl/ssl_cert";
551+ https-certificate-key-file = "/run/keycloak/ssl/ssl_key";
552+ })
553+ ];
693554
694555 systemd.services.keycloakPostgreSQLInit = mkIf createLocalPostgreSQL {
695556 after = [ "postgresql.service" ];
@@ -752,41 +613,37 @@ in
752613 "mysql.service"
753614 ]
754615 else [ ];
616+ secretPaths = catAttrs "_secret" (collect isSecret cfg.settings);
617+ mkSecretReplacement = file: ''
618+ replace-secret ${hashString "sha256" file} $CREDENTIALS_DIRECTORY/${baseNameOf file} /run/keycloak/conf/keycloak.conf
619+ '';
620+ secretReplacements = lib.concatMapStrings mkSecretReplacement secretPaths;
755621 in
756622 {
757623 after = databaseServices;
758624 bindsTo = databaseServices;
759625 wantedBy = [ "multi-user.target" ];
760626 path = with pkgs; [
761− cfg.package
627+ keycloakBuild
762628 openssl
763629 replace-secret
764630 ];
765631 environment = {
766− JBOSS_LOG_DIR = "/var/log/keycloak";
767− JBOSS_BASE_DIR = "/run/keycloak";
768− JBOSS_MODULEPATH = "${cfg.package}/modules";
632+ KC_HOME_DIR = "/run/keycloak";
633+ KC_CONF_DIR = "/run/keycloak/conf";
769634 };
770635 serviceConfig = {
771− LoadCredential = [
772− "db_password:${cfg.database.passwordFile}"
773− ] ++ optionals (cfg.sslCertificate != null && cfg.sslCertificateKey != null) [
774− "ssl_cert:${cfg.sslCertificate}"
775− "ssl_key:${cfg.sslCertificateKey}"
776− ];
636+ LoadCredential =
637+ map (p: "${baseNameOf p}:${p}") secretPaths
638+ ++ optionals (cfg.sslCertificate != null && cfg.sslCertificateKey != null) [
639+ "ssl_cert:${cfg.sslCertificate}"
640+ "ssl_key:${cfg.sslCertificateKey}"
641+ ];
777642 User = "keycloak";
778643 Group = "keycloak";
779644 DynamicUser = true;
780− RuntimeDirectory = map (p: "keycloak/" + p) [
781− "configuration"
782− "deployments"
783− "data"
784− "ssl"
785− "log"
786− "tmp"
787− ];
645+ RuntimeDirectory = "keycloak";
788646 RuntimeDirectoryMode = 0700;
789− LogsDirectory = "keycloak";
790647 AmbientCapabilities = "CAP_NET_BIND_SERVICE";
791648 };
792649 script = ''
@@ -795,41 +652,30 @@ in
795652
796653 umask u=rwx,g=,o=
797654
798− install_plugin() {
799− if [ -d "$1" ]; then
800− find "$1" -type f \( -iname \*.ear -o -iname \*.jar \) -exec install -m 0500 -o keycloak -g keycloak "{}" "/run/keycloak/deployments/" \;
801− else
802− install -m 0500 -o keycloak -g keycloak "$1" "/run/keycloak/deployments/"
803− fi
804− }
805−
806− install -m 0600 ${cfg.package}/standalone/configuration/*.properties /run/keycloak/configuration
807− install -T -m 0600 ${keycloakConfig} /run/keycloak/configuration/standalone.xml
808−
809− replace-secret '@db-password@' "$CREDENTIALS_DIRECTORY/db_password" /run/keycloak/configuration/standalone.xml
810−
811− export JAVA_OPTS=-Djboss.server.config.user.dir=/run/keycloak/configuration
812− add-user-keycloak.sh -u admin -p '${cfg.initialAdminPassword}'
813− ''
814− + lib.optionalString (cfg.plugins != []) (lib.concatStringsSep "\n" (map (pl: "install_plugin ${lib.escapeShellArg pl}") cfg.plugins)) + "\n"
815− + optionalString (cfg.sslCertificate != null && cfg.sslCertificateKey != null) ''
816− pushd /run/keycloak/ssl/
817− cat "$CREDENTIALS_DIRECTORY/ssl_cert" <(echo) \
818− "$CREDENTIALS_DIRECTORY/ssl_key" <(echo) \
819− /etc/ssl/certs/ca-certificates.crt \
820− > allcerts.pem
821− openssl pkcs12 -export -in "$CREDENTIALS_DIRECTORY/ssl_cert" -inkey "$CREDENTIALS_DIRECTORY/ssl_key" -chain \
822− -name "${cfg.frontendUrl}" -out certificate_private_key_bundle.p12 \
823− -CAfile allcerts.pem -passout pass:notsosecretpassword
824− popd
655+ ln -s ${themesBundle} /run/keycloak/themes
656+ ln -s ${keycloakBuild}/providers /run/keycloak/
657+
658+ install -D -m 0600 ${confFile} /run/keycloak/conf/keycloak.conf
659+
660+ ${secretReplacements}
661+
662+ '' + optionalString (cfg.sslCertificate != null && cfg.sslCertificateKey != null) ''
663+ mkdir -p /run/keycloak/ssl
664+ cp $CREDENTIALS_DIRECTORY/ssl_{cert,key} /run/keycloak/ssl/
825665 '' + ''
826− ${cfg.package}/bin/standalone.sh
666+ export KEYCLOAK_ADMIN=admin
667+ export KEYCLOAK_ADMIN_PASSWORD=${cfg.initialAdminPassword}
668+ kc.sh start
827669 '';
828670 };
829671
830672 services.postgresql.enable = mkDefault createLocalPostgreSQL;
831673 services.mysql.enable = mkDefault createLocalMySQL;
832− services.mysql.package = mkIf createLocalMySQL pkgs.mariadb;
674+ services.mysql.package =
675+ let
676+ dbPkg = if cfg.database.type == "mariadb" then pkgs.mariadb else pkgs.mysql80;
677+ in
678+ mkIf createLocalMySQL (mkDefault dbPkg);
833679 };
834680
835681 meta.doc = ./keycloak.xml;
nixos/modules/services/web-apps/keycloak.xml+61−81
@@ -27,10 +27,10 @@
2727
2828 <para>
2929 Refer to the <link
30− xlink:href="https://www.keycloak.org/docs/latest/server_admin/index.html#admin-console">Admin
31− Console section of the Keycloak Server Administration Guide</link> for
32− information on how to administer your
33− <productname>Keycloak</productname> instance.
30+ xlink:href="https://www.keycloak.org/docs/latest/server_admin/index.html">
31+ Keycloak Server Administration Guide</link> for information on
32+ how to administer your <productname>Keycloak</productname>
33+ instance.
3434 </para>
3535 </section>
3636
@@ -38,27 +38,28 @@
3838 <title>Database access</title>
3939 <para>
4040 <productname>Keycloak</productname> can be used with either
41− <productname>PostgreSQL</productname> or
41+ <productname>PostgreSQL</productname>,
42+ <productname>MariaDB</productname> or
4243 <productname>MySQL</productname>. Which one is used can be
4344 configured in <xref
4445 linkend="opt-services.keycloak.database.type" />. The selected
4546 database will automatically be enabled and a database and role
4647 created unless <xref
47− linkend="opt-services.keycloak.database.host" /> is changed from
48− its default of <literal>localhost</literal> or <xref
49− linkend="opt-services.keycloak.database.createLocally" /> is set
50− to <literal>false</literal>.
48+ linkend="opt-services.keycloak.database.host" /> is changed
49+ from its default of <literal>localhost</literal> or <xref
50+ linkend="opt-services.keycloak.database.createLocally" /> is
51+ set to <literal>false</literal>.
5152 </para>
5253
5354 <para>
5455 External database access can also be configured by setting
5556 <xref linkend="opt-services.keycloak.database.host" />, <xref
57+ linkend="opt-services.keycloak.database.name" />, <xref
5658 linkend="opt-services.keycloak.database.username" />, <xref
5759 linkend="opt-services.keycloak.database.useSSL" /> and <xref
5860 linkend="opt-services.keycloak.database.caCert" /> as
59− appropriate. Note that you need to manually create a database
60− called <literal>keycloak</literal> and allow the configured
61− database user full access to it.
61+ appropriate. Note that you need to manually create the database
62+ and allow the configured database user full access to it.
6263 </para>
6364
6465 <para>
@@ -79,22 +80,27 @@
7980 </warning>
8081 </section>
8182
82− <section xml:id="module-services-keycloak-frontendurl">
83− <title>Frontend URL</title>
83+ <section xml:id="module-services-keycloak-hostname">
84+ <title>Hostname</title>
8485 <para>
85− The frontend URL is used as base for all frontend requests and
86− must be configured through <xref linkend="opt-services.keycloak.frontendUrl" />.
87− It should normally include a trailing <literal>/auth</literal>
88− (the default web context). If you use a reverse proxy, you need
89− to set this option to <literal>""</literal>, so that frontend URL
90− is derived from HTTP headers. <literal>X-Forwarded-*</literal> headers
91− support also should be enabled, using <link
92− xlink:href="https://www.keycloak.org/docs/latest/server_installation/index.html#identifying-client-ip-addresses">
93− respective guidelines</link>.
86+ The hostname is used to build the public URL used as base for
87+ all frontend requests and must be configured through <xref
88+ linkend="opt-services.keycloak.settings.hostname" />.
9489 </para>
9590
91+ <note>
92+ <para>
93+ If you're migrating an old Wildfly based Keycloak instance
94+ and want to keep compatibility with your current clients,
95+ you'll likely want to set <xref
96+ linkend="opt-services.keycloak.settings.http-relative-path"
97+ /> to <literal>/auth</literal>. See the option description
98+ for more details.
99+ </para>
100+ </note>
101+
96102 <para>
97− <xref linkend="opt-services.keycloak.forceBackendUrlToFrontendUrl" />
103+ <xref linkend="opt-services.keycloak.settings.hostname-strict-backchannel" />
98104 determines whether Keycloak should force all requests to go
99105 through the frontend URL. By default,
100106 <productname>Keycloak</productname> allows backend requests to
@@ -104,10 +110,10 @@
104110 </para>
105111
106112 <para>
107− See the <link
108− xlink:href="https://www.keycloak.org/docs/latest/server_installation/#_hostname">Hostname
109− section of the Keycloak Server Installation and Configuration
110− Guide</link> for more information.
113+ For more information on hostname configuration, see the <link
114+ xlink:href="https://www.keycloak.org/server/hostname">Hostname
115+ section of the Keycloak Server Installation and Configuration
116+ Guide</link>.
111117 </para>
112118 </section>
113119
@@ -139,68 +145,40 @@
139145 <section xml:id="module-services-keycloak-themes">
140146 <title>Themes</title>
141147 <para>
142− You can package custom themes and make them visible to Keycloak via
143− <xref linkend="opt-services.keycloak.themes" />
144− option. See the <link xlink:href="https://www.keycloak.org/docs/latest/server_development/#_themes">
148+ You can package custom themes and make them visible to
149+ Keycloak through <xref linkend="opt-services.keycloak.themes"
150+ />. See the <link
151+ xlink:href="https://www.keycloak.org/docs/latest/server_development/#_themes">
145152 Themes section of the Keycloak Server Development Guide</link>
146− and respective NixOS option description for more information.
153+ and the description of the aforementioned NixOS option for
154+ more information.
147155 </para>
148156 </section>
149157
150− <section xml:id="module-services-keycloak-extra-config">
151− <title>Additional configuration</title>
158+ <section xml:id="module-services-keycloak-settings">
159+ <title>Configuration file settings</title>
152160 <para>
153− Additional Keycloak configuration options, for which no
154− explicit <productname>NixOS</productname> options are provided,
155− can be set in <xref linkend="opt-services.keycloak.extraConfig" />.
161+ Keycloak server configuration parameters can be set in <xref
162+ linkend="opt-services.keycloak.settings" />. These correspond
163+ directly to options in
164+ <filename>conf/keycloak.conf</filename>. Some of the most
165+ important parameters are documented as suboptions, the rest can
166+ be found in the <link
167+ xlink:href="https://www.keycloak.org/server/all-config">All
168+ configuration section of the Keycloak Server Installation and
169+ Configuration Guide</link>.
156170 </para>
157171
158172 <para>
159− Options are expressed as a Nix attribute set which matches the
160− structure of the jboss-cli configuration. The configuration is
161− effectively overlayed on top of the default configuration
162− shipped with Keycloak. To remove existing nodes and undefine
163− attributes from the default configuration, set them to
164− <literal>null</literal>.
165− </para>
166− <para>
167− For example, the following script, which removes the hostname
168− provider <literal>default</literal>, adds the deprecated
169− hostname provider <literal>fixed</literal> and defines it the
170− default:
171−
172−<programlisting>
173−/subsystem=keycloak-server/spi=hostname/provider=default:remove()
174−/subsystem=keycloak-server/spi=hostname/provider=fixed:add(enabled = true, properties = { hostname = "keycloak.example.com" })
175−/subsystem=keycloak-server/spi=hostname:write-attribute(name=default-provider, value="fixed")
176−</programlisting>
177−
178− would be expressed as
179−
180−<programlisting>
181−services.keycloak.extraConfig = {
182− "subsystem=keycloak-server" = {
183− "spi=hostname" = {
184− "provider=default" = null;
185− "provider=fixed" = {
186− enabled = true;
187− properties.hostname = "keycloak.example.com";
188− };
189− default-provider = "fixed";
190− };
191− };
192−};
193−</programlisting>
194− </para>
195− <para>
196− You can discover available options by using the <link
197− xlink:href="http://docs.wildfly.org/21/Admin_Guide.html#Command_Line_Interface">jboss-cli.sh</link>
198− program and by referring to the <link
199− xlink:href="https://www.keycloak.org/docs/latest/server_installation/index.html">Keycloak
200− Server Installation and Configuration Guide</link>.
173+ Options containing secret data should be set to an attribute
174+ set containing the attribute <literal>_secret</literal> - a
175+ string pointing to a file containing the value the option
176+ should be set to. See the description of <xref
177+ linkend="opt-services.keycloak.settings" /> for an example.
201178 </para>
202179 </section>
203180
181+
204182 <section xml:id="module-services-keycloak-example-config">
205183 <title>Example configuration</title>
206184 <para>
@@ -208,9 +186,11 @@ services.keycloak.extraConfig = {
208186<programlisting>
209187services.keycloak = {
210188 <link linkend="opt-services.keycloak.enable">enable</link> = true;
189+ settings = {
190+ <link linkend="opt-services.keycloak.settings.hostname">hostname</link> = "keycloak.example.com";
191+ <link linkend="opt-services.keycloak.settings.hostname-strict-backchannel">hostname-strict-backchannel</link> = true;
192+ };
211193 <link linkend="opt-services.keycloak.initialAdminPassword">initialAdminPassword</link> = "e6Wcm0RrtegMEHl"; # change on first login
212− <link linkend="opt-services.keycloak.frontendUrl">frontendUrl</link> = "https://keycloak.example.com/auth";
213− <link linkend="opt-services.keycloak.forceBackendUrlToFrontendUrl">forceBackendUrlToFrontendUrl</link> = true;
214194 <link linkend="opt-services.keycloak.sslCertificate">sslCertificate</link> = "/run/keys/ssl_cert";
215195 <link linkend="opt-services.keycloak.sslCertificateKey">sslCertificateKey</link> = "/run/keys/ssl_key";
216196 <link linkend="opt-services.keycloak.database.passwordFile">database.passwordFile</link> = "/run/keys/db_password";
nixos/modules/services/web-apps/nextcloud.nix+75
@@ -251,6 +251,23 @@ in {
251251 '';
252252 };
253253
254+ database = {
255+
256+ createLocally = mkOption {
257+ type = types.bool;
258+ default = false;
259+ description = ''
260+ Create the database and database user locally. Only available for
261+ mysql database.
262+ Note that this option will use the latest version of MariaDB which
263+ is not officially supported by Nextcloud. As for now a workaround
264+ is used to also support MariaDB version >= 10.6.
265+ '';
266+ };
267+
268+ };
269+
270+
254271 config = {
255272 dbtype = mkOption {
256273 type = types.enum [ "sqlite" "pgsql" "mysql" ];
@@ -505,6 +522,29 @@ in {
505522 The nextcloud-occ program preconfigured to target this Nextcloud instance.
506523 '';
507524 };
525+ globalProfiles = mkEnableOption "global profiles" // {
526+ description = ''
527+ Makes user-profiles globally available under <literal>nextcloud.tld/u/user.name</literal>.
528+ Even though it's enabled by default in Nextcloud, it must be explicitly enabled
529+ here because it has the side-effect that personal information is even accessible to
530+ unauthenticated users by default.
531+
532+ By default, the following properties are set to <quote>Show to everyone</quote>
533+ if this flag is enabled:
534+ <itemizedlist>
535+ <listitem><para>About</para></listitem>
536+ <listitem><para>Full name</para></listitem>
537+ <listitem><para>Headline</para></listitem>
538+ <listitem><para>Organisation</para></listitem>
539+ <listitem><para>Profile picture</para></listitem>
540+ <listitem><para>Role</para></listitem>
541+ <listitem><para>Twitter</para></listitem>
542+ <listitem><para>Website</para></listitem>
543+ </itemizedlist>
544+
545+ Only has an effect in Nextcloud 23 and later.
546+ '';
547+ };
508548
509549 nginx.recommendedHttpHeaders = mkOption {
510550 type = types.bool;
@@ -583,6 +623,12 @@ in {
583623 else pkgs.php80;
584624 }
585625
626+ { assertions = [
627+ { assertion = cfg.database.createLocally -> cfg.config.dbtype == "mysql";
628+ message = ''services.nextcloud.config.dbtype must be set to mysql if services.nextcloud.database.createLocally is set to true.'';
629+ }
630+ ]; }
631+
586632 { systemd.timers.nextcloud-cron = {
587633 wantedBy = [ "timers.target" ];
588634 timerConfig.OnBootSec = "5m";
@@ -627,6 +673,8 @@ in {
627673 if x == null then "false"
628674 else boolToString x;
629675
676+ nextcloudGreaterOrEqualThan = req: versionAtLeast cfg.package.version req;
677+
630678 overrideConfig = pkgs.writeText "nextcloud-config.php" ''
631679 <?php
632680 ${optionalString requiresReadSecretFunction ''
@@ -666,6 +714,7 @@ in {
666714 'trusted_domains' => ${writePhpArrary ([ cfg.hostName ] ++ c.extraTrustedDomains)},
667715 'trusted_proxies' => ${writePhpArrary (c.trustedProxies)},
668716 ${optionalString (c.defaultPhoneRegion != null) "'default_phone_region' => '${c.defaultPhoneRegion}',"}
717+ ${optionalString (nextcloudGreaterOrEqualThan "23") "'profile.enabled' => ${boolToString cfg.globalProfiles}"}
669718 ${objectstoreConfig}
670719 ];
671720 '';
@@ -811,6 +860,32 @@ in {
811860
812861 environment.systemPackages = [ occ ];
813862
863+ services.mysql = lib.mkIf cfg.database.createLocally {
864+ enable = true;
865+ package = lib.mkDefault pkgs.mariadb;
866+ ensureDatabases = [ cfg.config.dbname ];
867+ ensureUsers = [{
868+ name = cfg.config.dbuser;
869+ ensurePermissions = { "${cfg.config.dbname}.*" = "ALL PRIVILEGES"; };
870+ }];
871+ # FIXME(@Ma27) Nextcloud isn't compatible with mariadb 10.6,
872+ # this is a workaround.
873+ # See https://help.nextcloud.com/t/update-to-next-cloud-21-0-2-has-get-an-error/117028/22
874+ settings = {
875+ mysqld = {
876+ innodb_read_only_compressed = 0;
877+ };
878+ };
879+ initialScript = pkgs.writeText "mysql-init" ''
880+ CREATE USER '${cfg.config.dbname}'@'localhost' IDENTIFIED BY '${builtins.readFile( cfg.config.dbpassFile )}';
881+ CREATE DATABASE IF NOT EXISTS ${cfg.config.dbname};
882+ GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,
883+ CREATE TEMPORARY TABLES ON ${cfg.config.dbname}.* TO '${cfg.config.dbuser}'@'localhost'
884+ IDENTIFIED BY '${builtins.readFile( cfg.config.dbpassFile )}';
885+ FLUSH privileges;
886+ '';
887+ };
888+
814889 services.nginx.enable = mkDefault true;
815890
816891 services.nginx.virtualHosts.${cfg.hostName} = {
nixos/modules/services/web-apps/nifi.nixnew file+318
@@ -0,0 +1,318 @@
1+{ lib, pkgs, config, options, ... }:
2+
3+let
4+ cfg = config.services.nifi;
5+ opt = options.services.nifi;
6+
7+ env = {
8+ NIFI_OVERRIDE_NIFIENV = "true";
9+ NIFI_HOME = "/var/lib/nifi";
10+ NIFI_PID_DIR = "/run/nifi";
11+ NIFI_LOG_DIR = "/var/log/nifi";
12+ };
13+
14+ envFile = pkgs.writeText "nifi.env" (lib.concatMapStrings (s: s + "\n") (
15+ (lib.concatLists (lib.mapAttrsToList (name: value:
16+ if value != null then [
17+ "${name}=\"${toString value}\""
18+ ] else []
19+ ) env))));
20+
21+ nifiEnv = pkgs.writeShellScriptBin "nifi-env" ''
22+ set -a
23+ source "${envFile}"
24+ eval -- "\$@"
25+ '';
26+
27+in {
28+ options = {
29+ services.nifi = {
30+ enable = lib.mkEnableOption "Apache NiFi";
31+
32+ package = lib.mkOption {
33+ type = lib.types.package;
34+ default = pkgs.nifi;
35+ defaultText = lib.literalExpression "pkgs.nifi";
36+ description = "Apache NiFi package to use.";
37+ };
38+
39+ user = lib.mkOption {
40+ type = lib.types.str;
41+ default = "nifi";
42+ description = "User account where Apache NiFi runs.";
43+ };
44+
45+ group = lib.mkOption {
46+ type = lib.types.str;
47+ default = "nifi";
48+ description = "Group account where Apache NiFi runs.";
49+ };
50+
51+ enableHTTPS = lib.mkOption {
52+ type = lib.types.bool;
53+ default = true;
54+ description = "Enable HTTPS protocol. Don`t use in production.";
55+ };
56+
57+ listenHost = lib.mkOption {
58+ type = lib.types.str;
59+ default = if cfg.enableHTTPS then "0.0.0.0" else "127.0.0.1";
60+ defaultText = lib.literalExpression ''
61+ if config.${opt.enableHTTPS}
62+ then "0.0.0.0"
63+ else "127.0.0.1"
64+ '';
65+ description = "Bind to an ip for Apache NiFi web-ui.";
66+ };
67+
68+ listenPort = lib.mkOption {
69+ type = lib.types.int;
70+ default = if cfg.enableHTTPS then 8443 else 8080;
71+ defaultText = lib.literalExpression ''
72+ if config.${opt.enableHTTPS}
73+ then "8443"
74+ else "8000"
75+ '';
76+ description = "Bind to a port for Apache NiFi web-ui.";
77+ };
78+
79+ proxyHost = lib.mkOption {
80+ type = lib.types.nullOr lib.types.str;
81+ default = if cfg.enableHTTPS then "0.0.0.0" else null;
82+ defaultText = lib.literalExpression ''
83+ if config.${opt.enableHTTPS}
84+ then "0.0.0.0"
85+ else null
86+ '';
87+ description = "Allow requests from a specific host.";
88+ };
89+
90+ proxyPort = lib.mkOption {
91+ type = lib.types.nullOr lib.types.int;
92+ default = if cfg.enableHTTPS then 8443 else null;
93+ defaultText = lib.literalExpression ''
94+ if config.${opt.enableHTTPS}
95+ then "8443"
96+ else null
97+ '';
98+ description = "Allow requests from a specific port.";
99+ };
100+
101+ initUser = lib.mkOption {
102+ type = lib.types.nullOr lib.types.str;
103+ default = null;
104+ description = "Initial user account for Apache NiFi. Username must be at least 4 characters.";
105+ };
106+
107+ initPasswordFile = lib.mkOption {
108+ type = lib.types.nullOr lib.types.path;
109+ default = null;
110+ example = "/run/keys/nifi/password-nifi";
111+ description = "nitial password for Apache NiFi. Password must be at least 12 characters.";
112+ };
113+
114+ initJavaHeapSize = lib.mkOption {
115+ type = lib.types.nullOr lib.types.int;
116+ default = null;
117+ example = 1024;
118+ description = "Set the initial heap size for the JVM in MB.";
119+ };
120+
121+ maxJavaHeapSize = lib.mkOption {
122+ type = lib.types.nullOr lib.types.int;
123+ default = null;
124+ example = 2048;
125+ description = "Set the initial heap size for the JVM in MB.";
126+ };
127+ };
128+ };
129+
130+ config = lib.mkIf cfg.enable {
131+ assertions = [
132+ { assertion = cfg.initUser!=null || cfg.initPasswordFile==null;
133+ message = ''
134+ <option>services.nifi.initUser</option> needs to be set if <option>services.nifi.initPasswordFile</option> enabled.
135+ '';
136+ }
137+ { assertion = cfg.initUser==null || cfg.initPasswordFile!=null;
138+ message = ''
139+ <option>services.nifi.initPasswordFile</option> needs to be set if <option>services.nifi.initUser</option> enabled.
140+ '';
141+ }
142+ { assertion = cfg.proxyHost==null || cfg.proxyPort!=null;
143+ message = ''
144+ <option>services.nifi.proxyPort</option> needs to be set if <option>services.nifi.proxyHost</option> value specified.
145+ '';
146+ }
147+ { assertion = cfg.proxyHost!=null || cfg.proxyPort==null;
148+ message = ''
149+ <option>services.nifi.proxyHost</option> needs to be set if <option>services.nifi.proxyPort</option> value specified.
150+ '';
151+ }
152+ { assertion = cfg.initJavaHeapSize==null || cfg.maxJavaHeapSize!=null;
153+ message = ''
154+ <option>services.nifi.maxJavaHeapSize</option> needs to be set if <option>services.nifi.initJavaHeapSize</option> value specified.
155+ '';
156+ }
157+ { assertion = cfg.initJavaHeapSize!=null || cfg.maxJavaHeapSize==null;
158+ message = ''
159+ <option>services.nifi.initJavaHeapSize</option> needs to be set if <option>services.nifi.maxJavaHeapSize</option> value specified.
160+ '';
161+ }
162+ ];
163+
164+ warnings = lib.optional (cfg.enableHTTPS==false) ''
165+ Please do not disable HTTPS mode in production. In this mode, access to the nifi is opened without authentication.
166+ '';
167+
168+ systemd.tmpfiles.rules = [
169+ "d '/var/lib/nifi/conf' 0750 ${cfg.user} ${cfg.group}"
170+ "L+ '/var/lib/nifi/lib' - - - - ${cfg.package}/lib"
171+ ];
172+
173+
174+ systemd.services.nifi = {
175+ description = "Apache NiFi";
176+ after = [ "network.target" ];
177+ wantedBy = [ "multi-user.target" ];
178+
179+ environment = env;
180+ path = [ pkgs.gawk ];
181+
182+ serviceConfig = {
183+ Type = "forking";
184+ PIDFile = "/run/nifi/nifi.pid";
185+ ExecStartPre = pkgs.writeScript "nifi-pre-start.sh" ''
186+ #!/bin/sh
187+ umask 077
188+ test -f '/var/lib/nifi/conf/authorizers.xml' || (cp '${cfg.package}/share/nifi/conf/authorizers.xml' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/authorizers.xml')
189+ test -f '/var/lib/nifi/conf/bootstrap.conf' || (cp '${cfg.package}/share/nifi/conf/bootstrap.conf' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/bootstrap.conf')
190+ test -f '/var/lib/nifi/conf/bootstrap-hashicorp-vault.conf' || (cp '${cfg.package}/share/nifi/conf/bootstrap-hashicorp-vault.conf' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/bootstrap-hashicorp-vault.conf')
191+ test -f '/var/lib/nifi/conf/bootstrap-notification-services.xml' || (cp '${cfg.package}/share/nifi/conf/bootstrap-notification-services.xml' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/bootstrap-notification-services.xml')
192+ test -f '/var/lib/nifi/conf/logback.xml' || (cp '${cfg.package}/share/nifi/conf/logback.xml' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/logback.xml')
193+ test -f '/var/lib/nifi/conf/login-identity-providers.xml' || (cp '${cfg.package}/share/nifi/conf/login-identity-providers.xml' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/login-identity-providers.xml')
194+ test -f '/var/lib/nifi/conf/nifi.properties' || (cp '${cfg.package}/share/nifi/conf/nifi.properties' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/nifi.properties')
195+ test -f '/var/lib/nifi/conf/stateless-logback.xml' || (cp '${cfg.package}/share/nifi/conf/stateless-logback.xml' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/stateless-logback.xml')
196+ test -f '/var/lib/nifi/conf/stateless.properties' || (cp '${cfg.package}/share/nifi/conf/stateless.properties' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/stateless.properties')
197+ test -f '/var/lib/nifi/conf/state-management.xml' || (cp '${cfg.package}/share/nifi/conf/state-management.xml' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/state-management.xml')
198+ test -f '/var/lib/nifi/conf/zookeeper.properties' || (cp '${cfg.package}/share/nifi/conf/zookeeper.properties' '/var/lib/nifi/conf/' && chmod 0640 '/var/lib/nifi/conf/zookeeper.properties')
199+ test -d '/var/lib/nifi/docs/html' || (mkdir -p /var/lib/nifi/docs && cp -r '${cfg.package}/share/nifi/docs/html' '/var/lib/nifi/docs/html')
200+ ${lib.optionalString ((cfg.initUser != null) && (cfg.initPasswordFile != null)) ''
201+ awk -F'[<|>]' '/property name="Username"/ {if ($3!="") f=1} END{exit !f}' /var/lib/nifi/conf/login-identity-providers.xml || ${cfg.package}/bin/nifi.sh set-single-user-credentials ${cfg.initUser} $(cat ${cfg.initPasswordFile})
202+ ''}
203+ ${lib.optionalString (cfg.enableHTTPS == false) ''
204+ sed -i /var/lib/nifi/conf/nifi.properties \
205+ -e 's|nifi.remote.input.secure=.*|nifi.remote.input.secure=false|g' \
206+ -e 's|nifi.web.http.host=.*|nifi.web.http.host=${cfg.listenHost}|g' \
207+ -e 's|nifi.web.http.port=.*|nifi.web.http.port=${(toString cfg.listenPort)}|g' \
208+ -e 's|nifi.web.https.host=.*|nifi.web.https.host=|g' \
209+ -e 's|nifi.web.https.port=.*|nifi.web.https.port=|g' \
210+ -e 's|nifi.security.keystore=.*|nifi.security.keystore=|g' \
211+ -e 's|nifi.security.keystoreType=.*|nifi.security.keystoreType=|g' \
212+ -e 's|nifi.security.truststore=.*|nifi.security.truststore=|g' \
213+ -e 's|nifi.security.truststoreType=.*|nifi.security.truststoreType=|g' \
214+ -e '/nifi.security.keystorePasswd/s|^|#|' \
215+ -e '/nifi.security.keyPasswd/s|^|#|' \
216+ -e '/nifi.security.truststorePasswd/s|^|#|'
217+ ''}
218+ ${lib.optionalString (cfg.enableHTTPS == true) ''
219+ sed -i /var/lib/nifi/conf/nifi.properties \
220+ -e 's|nifi.remote.input.secure=.*|nifi.remote.input.secure=true|g' \
221+ -e 's|nifi.web.http.host=.*|nifi.web.http.host=|g' \
222+ -e 's|nifi.web.http.port=.*|nifi.web.http.port=|g' \
223+ -e 's|nifi.web.https.host=.*|nifi.web.https.host=${cfg.listenHost}|g' \
224+ -e 's|nifi.web.https.port=.*|nifi.web.https.port=${(toString cfg.listenPort)}|g' \
225+ -e 's|nifi.security.keystore=.*|nifi.security.keystore=./conf/keystore.p12|g' \
226+ -e 's|nifi.security.keystoreType=.*|nifi.security.keystoreType=PKCS12|g' \
227+ -e 's|nifi.security.truststore=.*|nifi.security.truststore=./conf/truststore.p12|g' \
228+ -e 's|nifi.security.truststoreType=.*|nifi.security.truststoreType=PKCS12|g' \
229+ -e '/nifi.security.keystorePasswd/s|^#\+||' \
230+ -e '/nifi.security.keyPasswd/s|^#\+||' \
231+ -e '/nifi.security.truststorePasswd/s|^#\+||'
232+ ''}
233+ ${lib.optionalString ((cfg.enableHTTPS == true) && (cfg.proxyHost != null) && (cfg.proxyPort != null)) ''
234+ sed -i /var/lib/nifi/conf/nifi.properties \
235+ -e 's|nifi.web.proxy.host=.*|nifi.web.proxy.host=${cfg.proxyHost}:${(toString cfg.proxyPort)}|g'
236+ ''}
237+ ${lib.optionalString ((cfg.enableHTTPS == false) || (cfg.proxyHost == null) && (cfg.proxyPort == null)) ''
238+ sed -i /var/lib/nifi/conf/nifi.properties \
239+ -e 's|nifi.web.proxy.host=.*|nifi.web.proxy.host=|g'
240+ ''}
241+ ${lib.optionalString ((cfg.initJavaHeapSize != null) && (cfg.maxJavaHeapSize != null))''
242+ sed -i /var/lib/nifi/conf/bootstrap.conf \
243+ -e 's|java.arg.2=.*|java.arg.2=-Xms${(toString cfg.initJavaHeapSize)}m|g' \
244+ -e 's|java.arg.3=.*|java.arg.3=-Xmx${(toString cfg.maxJavaHeapSize)}m|g'
245+ ''}
246+ ${lib.optionalString ((cfg.initJavaHeapSize == null) && (cfg.maxJavaHeapSize == null))''
247+ sed -i /var/lib/nifi/conf/bootstrap.conf \
248+ -e 's|java.arg.2=.*|java.arg.2=-Xms512m|g' \
249+ -e 's|java.arg.3=.*|java.arg.3=-Xmx512m|g'
250+ ''}
251+ '';
252+ ExecStart = "${cfg.package}/bin/nifi.sh start";
253+ ExecStop = "${cfg.package}/bin/nifi.sh stop";
254+ # User and group
255+ User = cfg.user;
256+ Group = cfg.group;
257+ # Runtime directory and mode
258+ RuntimeDirectory = "nifi";
259+ RuntimeDirectoryMode = "0750";
260+ # State directory and mode
261+ StateDirectory = "nifi";
262+ StateDirectoryMode = "0750";
263+ # Logs directory and mode
264+ LogsDirectory = "nifi";
265+ LogsDirectoryMode = "0750";
266+ # Proc filesystem
267+ ProcSubset = "pid";
268+ ProtectProc = "invisible";
269+ # Access write directories
270+ ReadWritePaths = [ cfg.initPasswordFile ];
271+ UMask = "0027";
272+ # Capabilities
273+ CapabilityBoundingSet = "";
274+ # Security
275+ NoNewPrivileges = true;
276+ # Sandboxing
277+ ProtectSystem = "strict";
278+ ProtectHome = true;
279+ PrivateTmp = true;
280+ PrivateDevices = true;
281+ PrivateIPC = true;
282+ PrivateUsers = true;
283+ ProtectHostname = true;
284+ ProtectClock = true;
285+ ProtectKernelTunables = true;
286+ ProtectKernelModules = true;
287+ ProtectKernelLogs = true;
288+ ProtectControlGroups = true;
289+ RestrictAddressFamilies = [ "AF_INET AF_INET6" ];
290+ RestrictNamespaces = true;
291+ LockPersonality = true;
292+ MemoryDenyWriteExecute = false;
293+ RestrictRealtime = true;
294+ RestrictSUIDSGID = true;
295+ RemoveIPC = true;
296+ PrivateMounts = true;
297+ # System Call Filtering
298+ SystemCallArchitectures = "native";
299+ SystemCallFilter = [ "~@cpu-emulation @debug @keyring @memlock @mount @obsolete @resources @privileged @setuid" "@chown" ];
300+ };
301+ };
302+
303+ users.users = lib.mkMerge [
304+ (lib.mkIf (cfg.user == "nifi") {
305+ nifi = {
306+ group = cfg.group;
307+ isSystemUser = true;
308+ home = cfg.package;
309+ };
310+ })
311+ (lib.attrsets.setAttrByPath [ cfg.user "packages" ] [ cfg.package nifiEnv ])
312+ ];
313+
314+ users.groups = lib.optionalAttrs (cfg.group == "nifi") {
315+ nifi = { };
316+ };
317+ };
318+}
nixos/modules/services/web-servers/apache-httpd/default.nix+8−13
@@ -710,20 +710,15 @@ in
710710
711711 services.logrotate = optionalAttrs (cfg.logFormat != "none") {
712712 enable = mkDefault true;
713− paths.httpd = {
714− path = "${cfg.logDir}/*.log";
715− user = cfg.user;
716− group = cfg.group;
713+ settings.httpd = {
714+ files = "${cfg.logDir}/*.log";
715+ su = "${cfg.user} ${cfg.group}";
717716 frequency = "daily";
718− keep = 28;
719− extraConfig = ''
720− sharedscripts
721− compress
722− delaycompress
723− postrotate
724− systemctl reload httpd.service > /dev/null 2>/dev/null || true
725− endscript
726− '';
717+ rotate = 28;
718+ sharedscripts = true;
719+ compress = true;
720+ delaycompress = true;
721+ postrotate = "systemctl reload httpd.service > /dev/null 2>/dev/null || true";
727722 };
728723 };
729724
nixos/modules/services/web-servers/hydron.nix+1−1
@@ -161,5 +161,5 @@ in with lib; {
161161 (mkRenamedOptionModule [ "services" "hydron" "baseDir" ] [ "services" "hydron" "dataDir" ])
162162 ];
163163
164− meta.maintainers = with maintainers; [ chiiruno ];
164+ meta.maintainers = with maintainers; [ Madouura ];
165165}
nixos/modules/services/web-servers/nginx/default.nix+25−21
@@ -255,20 +255,22 @@ let
255255 else defaultListen;
256256
257257 listenString = { addr, port, ssl, extraParameters ? [], ... }:
258− "listen ${addr}:${toString port} "
259− + optionalString ssl "ssl "
258+ (if ssl && vhost.http3 then "
259+ # UDP listener for **QUIC+HTTP/3
260+ listen ${addr}:${toString port} http3 "
261+ + optionalString vhost.default "default_server "
262+ + optionalString vhost.reuseport "reuseport "
263+ + optionalString (extraParameters != []) (concatStringsSep " " extraParameters)
264+ + ";" else "")
265+ + "
266+
267+ listen ${addr}:${toString port} "
260268 + optionalString (ssl && vhost.http2) "http2 "
269+ + optionalString ssl "ssl "
261270 + optionalString vhost.default "default_server "
271+ + optionalString vhost.reuseport "reuseport "
262272 + optionalString (extraParameters != []) (concatStringsSep " " extraParameters)
263− + ";"
264− + (if ssl && vhost.http3 then ''
265− # UDP listener for **QUIC+HTTP/3
266− listen ${addr}:${toString port} http3 reuseport;
267− # Advertise that HTTP/3 is available
268− add_header Alt-Svc 'h3=":443"';
269− # Sent when QUIC was used
270− add_header QUIC-Status $quic;
271− '' else "");
273+ + ";";
272274
273275 redirectListen = filter (x: !x.ssl) defaultListen;
274276
@@ -321,6 +323,11 @@ let
321323 ssl_conf_command Options KTLS;
322324 ''}
323325
326+ ${optionalString (hasSSL && vhost.http3) ''
327+ # Advertise that HTTP/3 is available
328+ add_header Alt-Svc 'h3=":443"; ma=86400' always;
329+ ''}
330+
324331 ${mkBasicAuth vhostName vhost}
325332
326333 ${mkLocations vhost.locations}
@@ -989,17 +996,14 @@ in
989996 nginx.gid = config.ids.gids.nginx;
990997 };
991998
992− services.logrotate.paths.nginx = mapAttrs (_: mkDefault) {
993− path = "/var/log/nginx/*.log";
999+ services.logrotate.settings.nginx = mapAttrs (_: mkDefault) {
1000+ files = "/var/log/nginx/*.log";
9941001 frequency = "weekly";
995− keep = 26;
996− extraConfig = ''
997− compress
998− delaycompress
999− postrotate
1000− [ ! -f /var/run/nginx/nginx.pid ] || kill -USR1 `cat /var/run/nginx/nginx.pid`
1001− endscript
1002− '';
1002+ su = "${cfg.user} ${cfg.group}";
1003+ rotate = 26;
1004+ compress = true;
1005+ delaycompress = true;
1006+ postrotate = "[ ! -f /var/run/nginx/nginx.pid ] || kill -USR1 `cat /var/run/nginx/nginx.pid`";
10031007 };
10041008 };
10051009}
nixos/modules/services/web-servers/nginx/vhost-options.nix+12−3
@@ -20,7 +20,7 @@ with lib;
2020 serverAliases = mkOption {
2121 type = types.listOf types.str;
2222 default = [];
23− example = ["www.example.org" "example.org"];
23+ example = [ "www.example.org" "example.org" ];
2424 description = ''
2525 Additional names of virtual hosts served by this virtual host configuration.
2626 '';
@@ -31,11 +31,11 @@ with lib;
3131 addr = mkOption { type = str; description = "IP address."; };
3232 port = mkOption { type = int; description = "Port number."; default = 80; };
3333 ssl = mkOption { type = bool; description = "Enable SSL."; default = false; };
34− extraParameters = mkOption { type = listOf str; description = "Extra parameters of this listen directive."; default = []; example = [ "reuseport" "deferred" ]; };
34+ extraParameters = mkOption { type = listOf str; description = "Extra parameters of this listen directive."; default = []; example = [ "backlog=1024" "deferred" ]; };
3535 }; });
3636 default = [];
3737 example = [
38− { addr = "195.154.1.1"; port = 443; ssl = true;}
38+ { addr = "195.154.1.1"; port = 443; ssl = true; }
3939 { addr = "192.154.1.1"; port = 80; }
4040 ];
4141 description = ''
@@ -207,6 +207,15 @@ with lib;
207207 '';
208208 };
209209
210+ reuseport = mkOption {
211+ type = types.bool;
212+ default = false;
213+ description = ''
214+ Create an individual listening socket .
215+ It is required to specify only once on one of the hosts.
216+ '';
217+ };
218+
210219 root = mkOption {
211220 type = types.nullOr types.path;
212221 default = null;
nixos/modules/services/x11/desktop-managers/cinnamon.nix+3−3
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, pkgs, utils, ... }:
22
33with lib;
44
@@ -196,7 +196,7 @@ in
196196 programs.evince.enable = mkDefault true;
197197 programs.file-roller.enable = mkDefault true;
198198
199− environment.systemPackages = (with pkgs // pkgs.gnome // pkgs.cinnamon; pkgs.gnome.removePackagesByName [
199+ environment.systemPackages = with pkgs // pkgs.gnome // pkgs.cinnamon; utils.removePackagesByName [
200200 # cinnamon team apps
201201 bulky
202202 blueberry
@@ -212,7 +212,7 @@ in
212212 # external apps shipped with linux-mint
213213 hexchat
214214 gnome-calculator
215− ] config.environment.cinnamon.excludePackages);
215+ ] config.environment.cinnamon.excludePackages;
216216 })
217217 ];
218218}
nixos/modules/services/x11/desktop-managers/enlightenment.nix+5
@@ -16,6 +16,10 @@ let
1616in
1717
1818{
19+ meta = {
20+ maintainers = teams.enlightenment.members;
21+ };
22+
1923 imports = [
2024 (mkRenamedOptionModule [ "services" "xserver" "desktopManager" "e19" "enable" ] [ "services" "xserver" "desktopManager" "enlightenment" "enable" ])
2125 ];
@@ -92,6 +96,7 @@ in
9296
9397 services.udisks2.enable = true;
9498 services.upower.enable = config.powerManagement.enable;
99+ services.xserver.libinput.enable = mkDefault true;
95100
96101 services.dbus.packages = [ e.efl ];
97102
nixos/modules/services/x11/desktop-managers/gnome.nix+33−10
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, pkgs, utils, ... }:
22
33with lib;
44
@@ -22,6 +22,9 @@ let
2222 favorite-apps=[ 'org.gnome.Epiphany.desktop', 'org.gnome.Geary.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Photos.desktop', 'org.gnome.Nautilus.desktop' ]
2323 '';
2424
25+ nixos-background-ligtht = pkgs.nixos-artwork.wallpapers.simple-blue;
26+ nixos-background-dark = pkgs.nixos-artwork.wallpapers.simple-dark-gray;
27+
2528 nixos-gsettings-desktop-schemas = let
2629 defaultPackages = with pkgs; [ gsettings-desktop-schemas gnome.gnome-shell ];
2730 in
@@ -42,10 +45,11 @@ let
4245 chmod -R a+w $out/share/gsettings-schemas/nixos-gsettings-overrides
4346 cat - > $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/nixos-defaults.gschema.override <<- EOF
4447 [org.gnome.desktop.background]
45− picture-uri='file://${pkgs.nixos-artwork.wallpapers.simple-dark-gray.gnomeFilePath}'
48+ picture-uri='file://${nixos-background-ligtht.gnomeFilePath}'
49+ picture-uri-dark='file://${nixos-background-dark.gnomeFilePath}'
4650
4751 [org.gnome.desktop.screensaver]
48− picture-uri='file://${pkgs.nixos-artwork.wallpapers.simple-dark-gray-bottom.gnomeFilePath}'
52+ picture-uri='file://${nixos-background-dark.gnomeFilePath}'
4953
5054 ${cfg.favoriteAppsOverride}
5155
@@ -55,6 +59,26 @@ let
5559 ${pkgs.glib.dev}/bin/glib-compile-schemas $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/
5660 '';
5761
62+ nixos-background-info = pkgs.writeTextFile rec {
63+ name = "nixos-background-info";
64+ text = ''
65+ <?xml version="1.0"?>
66+ <!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
67+ <wallpapers>
68+ <wallpaper deleted="false">
69+ <name>Blobs</name>
70+ <filename>${nixos-background-ligtht.gnomeFilePath}</filename>
71+ <filename-dark>${nixos-background-dark.gnomeFilePath}</filename-dark>
72+ <options>zoom</options>
73+ <shade_type>solid</shade_type>
74+ <pcolor>#3a4ba0</pcolor>
75+ <scolor>#2f302f</scolor>
76+ </wallpaper>
77+ </wallpapers>
78+ '';
79+ destination = "/share/gnome-background-properties/nixos.xml";
80+ };
81+
5882 flashbackEnabled = cfg.flashback.enableMetacity || length cfg.flashback.customSessions > 0;
5983 flashbackWms = optional cfg.flashback.enableMetacity {
6084 wmName = "metacity";
@@ -430,6 +454,7 @@ in
430454 # Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/blob/gnome-3-38/elements/core/meta-gnome-core-shell.bst
431455 environment.systemPackages = with pkgs.gnome; [
432456 adwaita-icon-theme
457+ nixos-background-info
433458 gnome-backgrounds
434459 gnome-bluetooth
435460 gnome-color-manager
@@ -438,8 +463,6 @@ in
438463 gnome-shell-extensions
439464 gnome-themes-extra
440465 pkgs.gnome-tour # GNOME Shell detects the .desktop file on first log-in.
441− pkgs.nixos-artwork.wallpapers.simple-dark-gray
442− pkgs.nixos-artwork.wallpapers.simple-dark-gray-bottom
443466 pkgs.gnome-user-docs
444467 pkgs.orca
445468 pkgs.glib # for gsettings
@@ -455,7 +478,7 @@ in
455478 (mkIf serviceCfg.core-utilities.enable {
456479 environment.systemPackages =
457480 with pkgs.gnome;
458− removePackagesByName
481+ utils.removePackagesByName
459482 ([
460483 baobab
461484 cheese
@@ -515,7 +538,7 @@ in
515538 })
516539
517540 (mkIf serviceCfg.games.enable {
518− environment.systemPackages = (with pkgs.gnome; removePackagesByName [
541+ environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [
519542 aisleriot
520543 atomix
521544 five-or-more
@@ -536,12 +559,12 @@ in
536559 quadrapassel
537560 swell-foop
538561 tali
539− ] config.environment.gnome.excludePackages);
562+ ] config.environment.gnome.excludePackages;
540563 })
541564
542565 # Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/-/blob/3.38.0/elements/core/meta-gnome-core-developer-tools.bst
543566 (mkIf serviceCfg.core-developer-tools.enable {
544− environment.systemPackages = (with pkgs.gnome; removePackagesByName [
567+ environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [
545568 dconf-editor
546569 devhelp
547570 pkgs.gnome-builder
@@ -550,7 +573,7 @@ in
550573 # in default configurations.
551574 # https://github.com/NixOS/nixpkgs/issues/60908
552575 /* gnome-boxes */
553− ] config.environment.gnome.excludePackages);
576+ ] config.environment.gnome.excludePackages;
554577
555578 services.sysprof.enable = notExcluded pkgs.sysprof;
556579 })
nixos/modules/services/x11/desktop-managers/lumina.nix+4
@@ -10,6 +10,10 @@ let
1010in
1111
1212{
13+ meta = {
14+ maintainers = teams.lumina.members;
15+ };
16+
1317 options = {
1418
1519 services.xserver.desktopManager.lumina.enable = mkOption {
nixos/modules/services/x11/desktop-managers/lxqt.nix+11−2
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, pkgs, utils, ... }:
22
33with lib;
44
@@ -9,6 +9,10 @@ let
99in
1010
1111{
12+ meta = {
13+ maintainers = teams.lxqt.members;
14+ };
15+
1216 options = {
1317
1418 services.xserver.desktopManager.lxqt.enable = mkOption {
@@ -51,7 +55,7 @@ in
5155 environment.systemPackages =
5256 pkgs.lxqt.preRequisitePackages ++
5357 pkgs.lxqt.corePackages ++
54− (pkgs.gnome.removePackagesByName
58+ (utils.removePackagesByName
5559 pkgs.lxqt.optionalPackages
5660 config.environment.lxqt.excludePackages);
5761
@@ -62,6 +66,11 @@ in
6266 services.gvfs.enable = true;
6367
6468 services.upower.enable = config.powerManagement.enable;
69+
70+ services.xserver.libinput.enable = mkDefault true;
71+
72+ xdg.portal.enable = true;
73+ xdg.portal.extraPortals = [ pkgs.lxqt.xdg-desktop-portal-lxqt ];
6574 };
6675
6776}
nixos/modules/services/x11/desktop-managers/mate.nix+5−32
@@ -1,20 +1,9 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, pkgs, utils, ... }:
22
33with lib;
44
55let
66
7− addToXDGDirs = p: ''
8− if [ -d "${p}/share/gsettings-schemas/${p.name}" ]; then
9− export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${p}/share/gsettings-schemas/${p.name}
10− fi
11−
12− if [ -d "${p}/lib/girepository-1.0" ]; then
13− export GI_TYPELIB_PATH=$GI_TYPELIB_PATH''${GI_TYPELIB_PATH:+:}${p}/lib/girepository-1.0
14− export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${p}/lib
15− fi
16− '';
17−
187 xcfg = config.services.xserver;
198 cfg = xcfg.desktopManager.mate;
209
@@ -48,24 +37,8 @@ in
4837 pkgs.mate.mate-session-manager
4938 ];
5039
51− services.xserver.displayManager.sessionCommands = ''
52− if test "$XDG_CURRENT_DESKTOP" = "MATE"; then
53− export XDG_MENU_PREFIX=mate-
54−
55− # Let caja find extensions
56− export CAJA_EXTENSION_DIRS=$CAJA_EXTENSION_DIRS''${CAJA_EXTENSION_DIRS:+:}${config.system.path}/lib/caja/extensions-2.0
57−
58− # Let caja extensions find gsettings schemas
59− ${concatMapStrings (p: ''
60− if [ -d "${p}/lib/caja/extensions-2.0" ]; then
61− ${addToXDGDirs p}
62− fi
63− '') config.environment.systemPackages}
64−
65− # Add mate-control-center paths to some XDG variables because its schemas are needed by mate-settings-daemon, and mate-settings-daemon is a dependency for mate-control-center (that is, they are mutually recursive)
66− ${addToXDGDirs pkgs.mate.mate-control-center}
67− fi
68− '';
40+ # Let caja find extensions
41+ environment.sessionVariables.CAJA_EXTENSION_DIRS = [ "${config.system.path}/lib/caja/extensions-2.0" ];
6942
7043 # Let mate-panel find applets
7144 environment.sessionVariables."MATE_PANEL_APPLETS_DIR" = "${config.system.path}/share/mate-panel/applets";
@@ -74,7 +47,7 @@ in
7447 # Debugging
7548 environment.sessionVariables.MATE_SESSION_DEBUG = mkIf cfg.debug "1";
7649
77− environment.systemPackages = pkgs.gnome.removePackagesByName
50+ environment.systemPackages = utils.removePackagesByName
7851 (pkgs.mate.basePackages ++
7952 pkgs.mate.extraPackages ++
8053 [
@@ -83,7 +56,6 @@ in
8356 pkgs.gtk3.out
8457 pkgs.shared-mime-info
8558 pkgs.xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/
86− pkgs.mate.mate-settings-daemon
8759 pkgs.yelp # for 'Contents' in 'Help' menus
8860 ])
8961 config.environment.mate.excludePackages;
@@ -101,6 +73,7 @@ in
10173 services.udev.packages = [ pkgs.mate.mate-settings-daemon ];
10274 services.gvfs.enable = true;
10375 services.upower.enable = config.powerManagement.enable;
76+ services.xserver.libinput.enable = mkDefault true;
10477
10578 security.pam.services.mate-screensaver.unixAuth = true;
10679
nixos/modules/services/x11/desktop-managers/none.nix+44−5
@@ -1,7 +1,46 @@
1+{ config, lib, pkgs, ... }:
2+with lib;
3+let
4+ runXdgAutostart = config.services.xserver.desktopManager.runXdgAutostartIfNone;
5+in
16{
2− services.xserver.desktopManager.session =
3− [ { name = "none";
4− start = "";
5− }
6− ];
7+ options = {
8+ services.xserver.desktopManager.runXdgAutostartIfNone = mkOption {
9+ type = types.bool;
10+ default = false;
11+ description = ''
12+ Whether to run XDG autostart files for sessions without a desktop manager
13+ (with only a window manager), these sessions usually don't handle XDG
14+ autostart files by default.
15+
16+ Some services like <option>i18n.inputMethod</option> and
17+ <option>service.earlyoom</option> use XDG autostart files to start.
18+ If this option is not set to <literal>true</literal> and you are using
19+ a window manager without a desktop manager, you need to manually start
20+ them or running <package>dex</package> somewhere.
21+ '';
22+ };
23+ };
24+
25+ config = mkMerge [
26+ {
27+ services.xserver.desktopManager.session = [
28+ {
29+ name = "none";
30+ start = optionalString runXdgAutostart ''
31+ /run/current-system/systemd/bin/systemctl --user start xdg-autostart-if-no-desktop-manager.target
32+ '';
33+ }
34+ ];
35+ }
36+ (mkIf runXdgAutostart {
37+ systemd.user.targets.xdg-autostart-if-no-desktop-manager = {
38+ description = "Run XDG autostart files";
39+ # From `plasma-workspace`, `share/systemd/user/plasma-workspace@.target`.
40+ requires = [ "xdg-desktop-autostart.target" "graphical-session.target" ];
41+ before = [ "xdg-desktop-autostart.target" "graphical-session.target" ];
42+ bindsTo = [ "graphical-session.target" ];
43+ };
44+ })
45+ ];
746}
nixos/modules/services/x11/desktop-managers/pantheon.nix+4−3
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, utils, pkgs, ... }:
22
33with lib;
44
@@ -214,7 +214,7 @@ in
214214 elementary-settings-daemon
215215 pantheon-agent-geoclue2
216216 pantheon-agent-polkit
217− ]) ++ (gnome.removePackagesByName [
217+ ]) ++ (utils.removePackagesByName [
218218 gnome.gnome-font-viewer
219219 gnome.gnome-settings-daemon338
220220 ] config.environment.pantheon.excludePackages);
@@ -272,7 +272,7 @@ in
272272 })
273273
274274 (mkIf serviceCfg.apps.enable {
275− environment.systemPackages = with pkgs.pantheon; pkgs.gnome.removePackagesByName ([
275+ environment.systemPackages = with pkgs.pantheon; utils.removePackagesByName ([
276276 elementary-calculator
277277 elementary-calendar
278278 elementary-camera
@@ -302,6 +302,7 @@ in
302302 environment.systemPackages = with pkgs.pantheon; [
303303 contractor
304304 file-roller-contract
305+ gnome-bluetooth-contract
305306 ];
306307
307308 environment.pathsToLink = [
nixos/modules/services/x11/desktop-managers/pantheon.xml+3−3
@@ -3,7 +3,7 @@
33 xml:id="chap-pantheon">
44 <title>Pantheon Desktop</title>
55 <para>
6− Pantheon is the desktop environment created for the elementary OS distribution. It is written from scratch in Vala, utilizing GNOME technologies with GTK 3 and Granite.
6+ Pantheon is the desktop environment created for the elementary OS distribution. It is written from scratch in Vala, utilizing GNOME technologies with GTK and Granite.
77 </para>
88 <section xml:id="sec-pantheon-enable">
99 <title>Enabling Pantheon</title>
@@ -89,9 +89,9 @@ switchboard-with-plugs.override {
8989 </para>
9090 </listitem>
9191 </varlistentry>
92− <varlistentry xml:id="sec-pantheon-faq-gnome3-and-pantheon">
92+ <varlistentry xml:id="sec-pantheon-faq-gnome-and-pantheon">
9393 <term>
94− I cannot enable both GNOME 3 and Pantheon.
94+ I cannot enable both GNOME and Pantheon.
9595 </term>
9696 <listitem>
9797 <para>
nixos/modules/services/x11/desktop-managers/xfce.nix+8−1
@@ -66,6 +66,12 @@ in
6666 default = true;
6767 description = "Enable the XFWM (default) window manager.";
6868 };
69+
70+ enableScreensaver = mkOption {
71+ type = types.bool;
72+ default = true;
73+ description = "Enable the XFCE screensaver.";
74+ };
6975 };
7076 };
7177
@@ -122,7 +128,7 @@ in
122128 ] ++ optionals (!cfg.noDesktop) [
123129 xfce4-panel
124130 xfdesktop
125− ];
131+ ] ++ optional cfg.enableScreensaver xfce4-screensaver;
126132
127133 environment.pathsToLink = [
128134 "/share/xfce4"
@@ -168,5 +174,6 @@ in
168174 xfce4-notifyd
169175 ];
170176
177+ security.pam.services.xfce4-screensaver.unixAuth = cfg.enableScreensaver;
171178 };
172179}
nixos/modules/services/x11/window-managers/qtile.nix+11−4
@@ -7,19 +7,26 @@ let
77in
88
99{
10− options = {
11− services.xserver.windowManager.qtile.enable = mkEnableOption "qtile";
10+ options.services.xserver.windowManager.qtile = {
11+ enable = mkEnableOption "qtile";
12+
13+ package = mkPackageOption pkgs "qtile" { };
1214 };
1315
1416 config = mkIf cfg.enable {
1517 services.xserver.windowManager.session = [{
1618 name = "qtile";
1719 start = ''
18− ${pkgs.qtile}/bin/qtile start &
20+ ${cfg.package}/bin/qtile start &
1921 waitPID=$!
2022 '';
2123 }];
2224
23− environment.systemPackages = [ pkgs.qtile ];
25+ environment.systemPackages = [
26+ # pkgs.qtile is currently a buildenv of qtile and its dependencies.
27+ # For userland commands, we want the underlying package so that
28+ # packages such as python don't bleed into userland and overwrite intended behavior.
29+ (cfg.package.unwrapped or cfg.package)
30+ ];
2431 };
2532}
nixos/modules/services/x11/xserver.nix+10−3
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, lib, utils, pkgs, ... }:
22
33with lib;
44
@@ -181,6 +181,13 @@ in
181181 '';
182182 };
183183
184+ excludePackages = mkOption {
185+ default = [];
186+ example = literalExpression "[ pkgs.xterm ]";
187+ type = types.listOf types.package;
188+ description = "Which X11 packages to exclude from the default environment";
189+ };
190+
184191 exportConfiguration = mkOption {
185192 type = types.bool;
186193 default = false;
@@ -655,7 +662,7 @@ in
655662 ${cfgPath}.source = xorg.xf86inputevdev.out + "/share" + cfgPath;
656663 });
657664
658− environment.systemPackages =
665+ environment.systemPackages = utils.removePackagesByName
659666 [ xorg.xorgserver.out
660667 xorg.xrandr
661668 xorg.xrdb
@@ -671,7 +678,7 @@ in
671678 pkgs.xdg-utils
672679 xorg.xf86inputevdev.out # get evdev.4 man page
673680 pkgs.nixos-icons # needed for gnome and pantheon about dialog, nixos-manual and maybe more
674− ]
681+ ] config.services.xserver.excludePackages
675682 ++ optional (elem "virtualbox" cfg.videoDrivers) xorg.xrefresh;
676683
677684 environment.pathsToLink = [ "/share/X11" ];
nixos/modules/system/activation/switch-to-configuration.pl+12
@@ -1,5 +1,17 @@
11#! @perl@/bin/perl
22
3+# Issue #166838 uncovered a situation in which a configuration not suitable
4+# for the target architecture caused a cryptic error message instead of
5+# a clean failure. Due to this mismatch, the perl interpreter in the shebang
6+# line wasn't able to be executed, causing this script to be misinterpreted
7+# as a shell script.
8+#
9+# Let's detect this situation to give a more meaningful error
10+# message. The following two lines are carefully written to be both valid Perl
11+# and Bash.
12+printf "Perl script erroneously interpreted as shell script,\ndoes target platform match nixpkgs.crossSystem platform?\n" && exit 1
13+ if 0;
14+
315use strict;
416use warnings;
517use Config::IniFiles;
nixos/modules/system/activation/top-level.nix+12−5
@@ -55,11 +55,18 @@ let
5555 substituteInPlace $out/dry-activate --subst-var out
5656 chmod u+x $out/activate $out/dry-activate
5757 unset activationScript dryActivationScript
58− ${pkgs.stdenv.shellDryRun} $out/activate
59− ${pkgs.stdenv.shellDryRun} $out/dry-activate
6058
61− cp ${config.system.build.bootStage2} $out/init
62− substituteInPlace $out/init --subst-var-by systemConfig $out
59+ ${if config.boot.initrd.systemd.enable then ''
60+ cp ${config.system.build.bootStage2} $out/prepare-root
61+ substituteInPlace $out/prepare-root --subst-var-by systemConfig $out
62+ # This must not be a symlink or the abs_path of the grub builder for the tests
63+ # will resolve the symlink and we end up with a path that doesn't point to a
64+ # system closure.
65+ cp "$systemd/lib/systemd/systemd" $out/init
66+ '' else ''
67+ cp ${config.system.build.bootStage2} $out/init
68+ substituteInPlace $out/init --subst-var-by systemConfig $out
69+ ''}
6370
6471 ln -s ${config.system.build.etc}/etc $out/etc
6572 ln -s ${config.system.path} $out/sw
@@ -156,7 +163,7 @@ in
156163
157164 specialisation = mkOption {
158165 default = {};
159− example = lib.literalExpression "{ fewJobsManyCores.configuration = { nix.settings = { core = 0; max-jobs = 1; }; }";
166+ example = lib.literalExpression "{ fewJobsManyCores.configuration = { nix.settings = { core = 0; max-jobs = 1; }; }; }";
160167 description = ''
161168 Additional configurations to build. If
162169 <literal>inheritParentConfig</literal> is true, the system
nixos/modules/system/boot/loader/grub/grub.nix+26
@@ -44,6 +44,8 @@ let
4444 { splashImage = f cfg.splashImage;
4545 splashMode = f cfg.splashMode;
4646 backgroundColor = f cfg.backgroundColor;
47+ entryOptions = f cfg.entryOptions;
48+ subEntryOptions = f cfg.subEntryOptions;
4749 grub = f grub;
4850 grubTarget = f (grub.grubTarget or "");
4951 shell = "${pkgs.runtimeShell}";
@@ -448,6 +450,30 @@ in
448450 '';
449451 };
450452
453+ entryOptions = mkOption {
454+ default = "--class nixos --unrestricted";
455+ type = types.nullOr types.str;
456+ description = ''
457+ Options applied to the primary NixOS menu entry.
458+
459+ <note><para>
460+ This options has no effect for GRUB 1.
461+ </para></note>
462+ '';
463+ };
464+
465+ subEntryOptions = mkOption {
466+ default = "--class nixos";
467+ type = types.nullOr types.str;
468+ description = ''
469+ Options applied to the secondary NixOS submenu entry.
470+
471+ <note><para>
472+ This options has no effect for GRUB 1.
473+ </para></note>
474+ '';
475+ };
476+
451477 theme = mkOption {
452478 type = types.nullOr types.path;
453479 example = literalExpression "pkgs.nixos-grub2-theme";
nixos/modules/system/boot/loader/grub/install-grub.pl+5−3
@@ -64,6 +64,8 @@ my $extraEntries = get("extraEntries");
6464my $extraEntriesBeforeNixOS = get("extraEntriesBeforeNixOS") eq "true";
6565my $splashImage = get("splashImage");
6666my $splashMode = get("splashMode");
67+my $entryOptions = get("entryOptions");
68+my $subEntryOptions = get("subEntryOptions");
6769my $backgroundColor = get("backgroundColor");
6870my $configurationLimit = int(get("configurationLimit"));
6971my $copyKernels = get("copyKernels") eq "true";
@@ -509,7 +511,7 @@ sub addEntry {
509511# Add default entries.
510512$conf .= "$extraEntries\n" if $extraEntriesBeforeNixOS;
511513
512−addEntry("NixOS - Default", $defaultConfig, "--unrestricted");
514+addEntry("NixOS - Default", $defaultConfig, $entryOptions);
513515
514516$conf .= "$extraEntries\n" unless $extraEntriesBeforeNixOS;
515517
@@ -546,7 +548,7 @@ sub addProfile {
546548 my ($profile, $description) = @_;
547549
548550 # Add entries for all generations of this profile.
549− $conf .= "submenu \"$description\" {\n" if $grubVersion == 2;
551+ $conf .= "submenu \"$description\" --class submenu {\n" if $grubVersion == 2;
550552
551553 sub nrFromGen { my ($x) = @_; $x =~ /\/\w+-(\d+)-link/; return $1; }
552554
@@ -566,7 +568,7 @@ sub addProfile {
566568 -e "$link/nixos-version"
567569 ? readFile("$link/nixos-version")
568570 : basename((glob(dirname(Cwd::abs_path("$link/kernel")) . "/lib/modules/*"))[0]);
569− addEntry("NixOS - Configuration " . nrFromGen($link) . " ($date - $version)", $link);
571+ addEntry("NixOS - Configuration " . nrFromGen($link) . " ($date - $version)", $link, $subEntryOptions);
570572 }
571573
572574 $conf .= "}\n" if $grubVersion == 2;
nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix+1−1
@@ -33,7 +33,7 @@ let
3333 netbootxyz = if cfg.netbootxyz.enable then pkgs.netbootxyz-efi else "";
3434
3535 copyExtraFiles = pkgs.writeShellScript "copy-extra-files" ''
36− empty_file=$(mktemp)
36+ empty_file=$(${pkgs.coreutils}/bin/mktemp)
3737
3838 ${concatStrings (mapAttrsToList (n: v: ''
3939 ${pkgs.coreutils}/bin/install -Dp "${v}" "${efi.efiSysMountPoint}/"${escapeShellArg n}
nixos/modules/system/boot/luksroot.nix+74−7
@@ -1,10 +1,11 @@
1−{ config, lib, pkgs, ... }:
1+{ config, options, lib, pkgs, ... }:
22
33with lib;
44
55let
66 luks = config.boot.initrd.luks;
77 kernelPackages = config.boot.kernelPackages;
8+ defaultPrio = (mkOptionDefault {}).priority;
89
910 commonFunctions = ''
1011 die() {
@@ -474,6 +475,16 @@ let
474475 preLVM = filterAttrs (n: v: v.preLVM) luks.devices;
475476 postLVM = filterAttrs (n: v: !v.preLVM) luks.devices;
476477
478+ stage1Crypttab = pkgs.writeText "initrd-crypttab" (lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: let
479+ opts = v.crypttabExtraOpts
480+ ++ optional v.allowDiscards "discard"
481+ ++ optionals v.bypassWorkqueues [ "no-read-workqueue" "no-write-workqueue" ]
482+ ++ optional (v.header != null) "header=${v.header}"
483+ ++ optional (v.keyFileOffset != null) "keyfile-offset=${v.keyFileOffset}"
484+ ++ optional (v.keyFileSize != null) "keyfile-size=${v.keyFileSize}"
485+ ;
486+ in "${n} ${v.device} ${if v.keyFile == null then "-" else v.keyFile} ${lib.concatStringsSep "," opts}") luks.devices));
487+
477488in
478489{
479490 imports = [
@@ -802,6 +813,18 @@ in
802813 Commands that should be run right after we have mounted our LUKS device.
803814 '';
804815 };
816+
817+ crypttabExtraOpts = mkOption {
818+ type = with types; listOf singleLineStr;
819+ default = [];
820+ example = [ "_netdev" ];
821+ visible = false;
822+ description = ''
823+ Only used with systemd stage 1.
824+
825+ Extra options to append to the last column of the generated crypttab file.
826+ '';
827+ };
805828 };
806829 }));
807830 };
@@ -853,6 +876,31 @@ in
853876 -> versionAtLeast kernelPackages.kernel.version "5.9";
854877 message = "boot.initrd.luks.devices.<name>.bypassWorkqueues is not supported for kernels older than 5.9";
855878 }
879+
880+ { assertion = config.boot.initrd.systemd.enable -> all (dev: !dev.fallbackToPassword) (attrValues luks.devices);
881+ message = "boot.initrd.luks.devices.<name>.fallbackToPassword is implied by systemd stage 1.";
882+ }
883+ { assertion = config.boot.initrd.systemd.enable -> all (dev: dev.preLVM) (attrValues luks.devices);
884+ message = "boot.initrd.luks.devices.<name>.preLVM is not used by systemd stage 1.";
885+ }
886+ { assertion = config.boot.initrd.systemd.enable -> options.boot.initrd.luks.reusePassphrases.highestPrio == defaultPrio;
887+ message = "boot.initrd.luks.reusePassphrases has no effect with systemd stage 1.";
888+ }
889+ { assertion = config.boot.initrd.systemd.enable -> all (dev: dev.preOpenCommands == "" && dev.postOpenCommands == "") (attrValues luks.devices);
890+ message = "boot.initrd.luks.devices.<name>.preOpenCommands and postOpenCommands is not supported by systemd stage 1. Please bind a service to cryptsetup.target or cryptsetup-pre.target instead.";
891+ }
892+ # TODO
893+ { assertion = config.boot.initrd.systemd.enable -> !luks.gpgSupport;
894+ message = "systemd stage 1 does not support GPG smartcards yet.";
895+ }
896+ # TODO
897+ { assertion = config.boot.initrd.systemd.enable -> !luks.fido2Support;
898+ message = "systemd stage 1 does not support FIDO2 yet.";
899+ }
900+ # TODO
901+ { assertion = config.boot.initrd.systemd.enable -> !luks.yubikeySupport;
902+ message = "systemd stage 1 does not support Yubikeys yet.";
903+ }
856904 ];
857905
858906 # actually, sbp2 driver is the one enabling the DMA attack, but this needs to be tested
@@ -867,7 +915,7 @@ in
867915 ++ (if builtins.elem "xts" luks.cryptoModules then ["ecb"] else []);
868916
869917 # copy the cryptsetup binary and it's dependencies
870− boot.initrd.extraUtilsCommands = ''
918+ boot.initrd.extraUtilsCommands = mkIf (!config.boot.initrd.systemd.enable) ''
871919 copy_bin_and_libs ${pkgs.cryptsetup}/bin/cryptsetup
872920 copy_bin_and_libs ${askPass}/bin/cryptsetup-askpass
873921 sed -i s,/bin/sh,$out/bin/sh, $out/bin/cryptsetup-askpass
@@ -877,7 +925,7 @@ in
877925 copy_bin_and_libs ${pkgs.yubikey-personalization}/bin/ykinfo
878926 copy_bin_and_libs ${pkgs.openssl.bin}/bin/openssl
879927
880− cc -O3 -I${pkgs.openssl.dev}/include -L${pkgs.openssl.out}/lib ${./pbkdf2-sha512.c} -o pbkdf2-sha512 -lcrypto
928+ cc -O3 -I${pkgs.openssl.dev}/include -L${lib.getLib pkgs.openssl}/lib ${./pbkdf2-sha512.c} -o pbkdf2-sha512 -lcrypto
881929 strip -s pbkdf2-sha512
882930 copy_bin_and_libs pbkdf2-sha512
883931
@@ -915,7 +963,7 @@ in
915963 ''}
916964 '';
917965
918− boot.initrd.extraUtilsCommandsTest = ''
966+ boot.initrd.extraUtilsCommandsTest = mkIf (!config.boot.initrd.systemd.enable) ''
919967 $out/bin/cryptsetup --version
920968 ${optionalString luks.yubikeySupport ''
921969 $out/bin/ykchalresp -V
@@ -932,9 +980,28 @@ in
932980 ''}
933981 '';
934982
935− boot.initrd.preFailCommands = postCommands;
936− boot.initrd.preLVMCommands = commonFunctions + preCommands + concatStrings (mapAttrsToList openCommand preLVM) + postCommands;
937− boot.initrd.postDeviceCommands = commonFunctions + preCommands + concatStrings (mapAttrsToList openCommand postLVM) + postCommands;
983+ boot.initrd.systemd = {
984+ contents."/etc/crypttab".source = stage1Crypttab;
985+
986+ extraBin.systemd-cryptsetup = "${config.boot.initrd.systemd.package}/lib/systemd/systemd-cryptsetup";
987+
988+ additionalUpstreamUnits = [
989+ "cryptsetup-pre.target"
990+ "cryptsetup.target"
991+ "remote-cryptsetup.target"
992+ ];
993+ storePaths = [
994+ "${config.boot.initrd.systemd.package}/lib/systemd/systemd-cryptsetup"
995+ "${config.boot.initrd.systemd.package}/lib/systemd/system-generators/systemd-cryptsetup-generator"
996+ ];
997+
998+ };
999+ # We do this because we need the udev rules from the package
1000+ boot.initrd.services.lvm.enable = true;
1001+
1002+ boot.initrd.preFailCommands = mkIf (!config.boot.initrd.systemd.enable) postCommands;
1003+ boot.initrd.preLVMCommands = mkIf (!config.boot.initrd.systemd.enable) (commonFunctions + preCommands + concatStrings (mapAttrsToList openCommand preLVM) + postCommands);
1004+ boot.initrd.postDeviceCommands = mkIf (!config.boot.initrd.systemd.enable) (commonFunctions + preCommands + concatStrings (mapAttrsToList openCommand postLVM) + postCommands);
9381005
9391006 environment.systemPackages = [ pkgs.cryptsetup ];
9401007 };
nixos/modules/system/boot/networkd.nix+191−2
@@ -10,6 +10,36 @@ let
1010
1111 check = {
1212
13+ global = {
14+ sectionNetwork = checkUnitConfig "Network" [
15+ (assertOnlyFields [
16+ "SpeedMeter"
17+ "SpeedMeterIntervalSec"
18+ "ManageForeignRoutingPolicyRules"
19+ "ManageForeignRoutes"
20+ "RouteTable"
21+ ])
22+ (assertValueOneOf "SpeedMeter" boolValues)
23+ (assertInt "SpeedMeterIntervalSec")
24+ (assertValueOneOf "ManageForeignRoutingPolicyRules" boolValues)
25+ (assertValueOneOf "ManageForeignRoutes" boolValues)
26+ ];
27+
28+ sectionDHCPv4 = checkUnitConfig "DHCPv4" [
29+ (assertOnlyFields [
30+ "DUIDType"
31+ "DUIDRawData"
32+ ])
33+ ];
34+
35+ sectionDHCPv6 = checkUnitConfig "DHCPv6" [
36+ (assertOnlyFields [
37+ "DUIDType"
38+ "DUIDRawData"
39+ ])
40+ ];
41+ };
42+
1343 link = {
1444
1545 sectionLink = checkUnitConfig "Link" [
@@ -281,6 +311,8 @@ let
281311 "PrivateKeyFile"
282312 "ListenPort"
283313 "FirewallMark"
314+ "RouteTable"
315+ "RouteMetric"
284316 ])
285317 (assertInt "FirewallMark")
286318 (assertRange "FirewallMark" 1 4294967295)
@@ -296,6 +328,8 @@ let
296328 "AllowedIPs"
297329 "Endpoint"
298330 "PersistentKeepalive"
331+ "RouteTable"
332+ "RouteMetric"
299333 ])
300334 (assertInt "PersistentKeepalive")
301335 (assertRange "PersistentKeepalive" 0 65535)
@@ -867,6 +901,44 @@ let
867901 };
868902 };
869903
904+ networkdOptions = {
905+ networkConfig = mkOption {
906+ default = {};
907+ example = { SpeedMeter = true; ManageForeignRoutingPolicyRules = false; };
908+ type = types.addCheck (types.attrsOf unitOption) check.global.sectionNetwork;
909+ description = ''
910+ Each attribute in this set specifies an option in the
911+ <literal>[Network]</literal> section of the networkd config.
912+ See <citerefentry><refentrytitle>networkd.conf</refentrytitle>
913+ <manvolnum>5</manvolnum></citerefentry> for details.
914+ '';
915+ };
916+
917+ dhcpV4Config = mkOption {
918+ default = {};
919+ example = { DUIDType = "vendor"; };
920+ type = types.addCheck (types.attrsOf unitOption) check.global.sectionDHCPv4;
921+ description = ''
922+ Each attribute in this set specifies an option in the
923+ <literal>[DHCPv4]</literal> section of the networkd config.
924+ See <citerefentry><refentrytitle>networkd.conf</refentrytitle>
925+ <manvolnum>5</manvolnum></citerefentry> for details.
926+ '';
927+ };
928+
929+ dhcpV6Config = mkOption {
930+ default = {};
931+ example = { DUIDType = "vendor"; };
932+ type = types.addCheck (types.attrsOf unitOption) check.global.sectionDHCPv6;
933+ description = ''
934+ Each attribute in this set specifies an option in the
935+ <literal>[DHCPv6]</literal> section of the networkd config.
936+ See <citerefentry><refentrytitle>networkd.conf</refentrytitle>
937+ <manvolnum>5</manvolnum></citerefentry> for details.
938+ '';
939+ };
940+ };
941+
870942 linkOptions = commonNetworkOptions // {
871943 # overwrite enable option from above
872944 enable = mkOption {
@@ -1515,6 +1587,39 @@ let
15151587 };
15161588 };
15171589
1590+ networkdConfig = { config, ... }: {
1591+ options = {
1592+ routeTables = mkOption {
1593+ default = {};
1594+ example = { foo = 27; };
1595+ type = with types; attrsOf int;
1596+ description = ''
1597+ Defines route table names as an attrset of name to number.
1598+ See <citerefentry><refentrytitle>networkd.conf</refentrytitle>
1599+ <manvolnum>5</manvolnum></citerefentry> for details.
1600+ '';
1601+ };
1602+
1603+ addRouteTablesToIPRoute2 = mkOption {
1604+ default = true;
1605+ example = false;
1606+ type = types.bool;
1607+ description = ''
1608+ If true and routeTables are set, then the specified route tables
1609+ will also be installed into /etc/iproute2/rt_tables.
1610+ '';
1611+ };
1612+ };
1613+
1614+ config = {
1615+ networkConfig = optionalAttrs (config.routeTables != { }) {
1616+ RouteTable = mapAttrsToList
1617+ (name: number: "${name}:${toString number}")
1618+ config.routeTables;
1619+ };
1620+ };
1621+ };
1622+
15181623 commonMatchText = def: optionalString (def.matchConfig != { }) ''
15191624 [Match]
15201625 ${attrsToSection def.matchConfig}
@@ -1596,6 +1701,20 @@ let
15961701 + def.extraConfig;
15971702 };
15981703
1704+ renderConfig = def:
1705+ { text = ''
1706+ [Network]
1707+ ${attrsToSection def.networkConfig}
1708+ ''
1709+ + optionalString (def.dhcpV4Config != { }) ''
1710+ [DHCPv4]
1711+ ${attrsToSection def.dhcpV4Config}
1712+ ''
1713+ + optionalString (def.dhcpV6Config != { }) ''
1714+ [DHCPv6]
1715+ ${attrsToSection def.dhcpV6Config}
1716+ ''; };
1717+
15991718 networkToUnit = name: def:
16001719 { inherit (def) enable;
16011720 text = commonMatchText def
@@ -1728,6 +1847,12 @@ in
17281847 description = "Definition of systemd networks.";
17291848 };
17301849
1850+ systemd.network.config = mkOption {
1851+ default = {};
1852+ type = with types; submodule [ { options = networkdOptions; } networkdConfig ];
1853+ description = "Definition of global systemd network config.";
1854+ };
1855+
17311856 systemd.network.units = mkOption {
17321857 description = "Definition of networkd units.";
17331858 default = {};
@@ -1741,6 +1866,48 @@ in
17411866 }));
17421867 };
17431868
1869+ systemd.network.wait-online = {
1870+ anyInterface = mkOption {
1871+ description = ''
1872+ Whether to consider the network online when any interface is online, as opposed to all of them.
1873+ This is useful on portable machines with a wired and a wireless interface, for example.
1874+ '';
1875+ type = types.bool;
1876+ default = false;
1877+ };
1878+
1879+ ignoredInterfaces = mkOption {
1880+ description = ''
1881+ Network interfaces to be ignored when deciding if the system is online.
1882+ '';
1883+ type = with types; listOf str;
1884+ default = [];
1885+ example = [ "wg0" ];
1886+ };
1887+
1888+ timeout = mkOption {
1889+ description = ''
1890+ Time to wait for the network to come online, in seconds. Set to 0 to disable.
1891+ '';
1892+ type = types.ints.unsigned;
1893+ default = 120;
1894+ example = 0;
1895+ };
1896+
1897+ extraArgs = mkOption {
1898+ description = ''
1899+ Extra command-line arguments to pass to systemd-networkd-wait-online.
1900+ These also affect per-interface <literal>systemd-network-wait-online@</literal> services.
1901+
1902+ See <link xlink:href="https://www.freedesktop.org/software/systemd/man/systemd-networkd-wait-online.service.html">
1903+ <citerefentry><refentrytitle>systemd-networkd-wait-online.service</refentrytitle><manvolnum>8</manvolnum>
1904+ </citerefentry></link> for all available options.
1905+ '';
1906+ type = with types; listOf str;
1907+ default = [];
1908+ };
1909+ };
1910+
17441911 };
17451912
17461913 config = mkMerge [
@@ -1749,6 +1916,11 @@ in
17491916 {
17501917 systemd.network.units = mapAttrs' (n: v: nameValuePair "${n}.link" (linkToUnit n v)) cfg.links;
17511918 environment.etc = unitFiles;
1919+
1920+ systemd.network.wait-online.extraArgs =
1921+ [ "--timeout=${toString cfg.wait-online.timeout}" ]
1922+ ++ optional cfg.wait-online.anyInterface "--any"
1923+ ++ map (i: "--ignore=${i}") cfg.wait-online.ignoredInterfaces;
17521924 }
17531925
17541926 (mkIf config.systemd.network.enable {
@@ -1772,11 +1944,17 @@ in
17721944 systemd.services.systemd-networkd = {
17731945 wantedBy = [ "multi-user.target" ];
17741946 aliases = [ "dbus-org.freedesktop.network1.service" ];
1775− restartTriggers = map (x: x.source) (attrValues unitFiles);
1947+ restartTriggers = map (x: x.source) (attrValues unitFiles) ++ [
1948+ config.environment.etc."systemd/networkd.conf".source
1949+ ];
17761950 };
17771951
17781952 systemd.services.systemd-networkd-wait-online = {
17791953 wantedBy = [ "network-online.target" ];
1954+ serviceConfig.ExecStart = [
1955+ ""
1956+ "${config.systemd.package}/lib/systemd/systemd-networkd-wait-online ${utils.escapeSystemdExecArgs cfg.wait-online.extraArgs}"
1957+ ];
17801958 };
17811959
17821960 systemd.services."systemd-network-wait-online@" = {
@@ -1787,10 +1965,21 @@ in
17871965 serviceConfig = {
17881966 Type = "oneshot";
17891967 RemainAfterExit = true;
1790− ExecStart = "${config.systemd.package}/lib/systemd/systemd-networkd-wait-online -i %I";
1968+ ExecStart = "${config.systemd.package}/lib/systemd/systemd-networkd-wait-online -i %I ${utils.escapeSystemdExecArgs cfg.wait-online.extraArgs}";
17911969 };
17921970 };
17931971
1972+ environment.etc."systemd/networkd.conf" = renderConfig cfg.config;
1973+
1974+ networking.iproute2 = mkIf (cfg.config.addRouteTablesToIPRoute2 && cfg.config.routeTables != { }) {
1975+ enable = mkDefault true;
1976+ rttablesExtraConfig = ''
1977+
1978+ # Extra tables defined in NixOS systemd.networkd.config.routeTables.
1979+ ${concatStringsSep "\n" (mapAttrsToList (name: number: "${toString number} ${name}") cfg.config.routeTables)}
1980+ '';
1981+ };
1982+
17941983 services.resolved.enable = mkDefault true;
17951984 })
17961985 ];
nixos/modules/system/boot/stage-1-init.sh+3−6
@@ -232,7 +232,8 @@ done
232232mkdir -p /lib
233233ln -s @modulesClosure@/lib/modules /lib/modules
234234ln -s @modulesClosure@/lib/firmware /lib/firmware
235−echo @extraUtils@/bin/modprobe > /proc/sys/kernel/modprobe
235+# see comment in stage-1.nix for explanation
236+echo @extraUtils@/bin/modprobe-kernel > /proc/sys/kernel/modprobe
236237for i in @kernelModules@; do
237238 info "loading module $(basename $i)..."
238239 modprobe $i
@@ -317,11 +318,7 @@ checkFS() {
317318
318319 echo "checking $device..."
319320
320− fsckFlags=
321− if test "$fsType" != "btrfs"; then
322− fsckFlags="-V -a"
323− fi
324− fsck $fsckFlags "$device"
321+ fsck -V -a "$device"
325322 fsckResult=$?
326323
327324 if test $(($fsckResult | 2)) = $fsckResult; then
nixos/modules/system/boot/stage-1.nix+33−14
@@ -131,6 +131,26 @@ let
131131 copy_bin_and_libs ${pkgs.kmod}/bin/kmod
132132 ln -sf kmod $out/bin/modprobe
133133
134+ # Dirty hack to make sure the kernel properly loads modules
135+ # such as ext4 on demand (e.g. on a `mount(2)` syscall). This is necessary
136+ # because `kmod` isn't linked against `libpthread.so.0` anymore (since
137+ # it was merged into `libc.so.6` since version `2.34`), but still needs
138+ # to access it for some reason. This is not an issue in stage-1 itself
139+ # because of the `LD_LIBRARY_PATH`-variable and anytime later because the rpath of
140+ # kmod/modprobe points to glibc's `$out/lib` where `libpthread.so.6` exists.
141+ # However, this is a problem when the kernel calls `modprobe` inside
142+ # the initial ramdisk because it doesn't know about the
143+ # `LD_LIBRARY_PATH` and the rpath was nuked.
144+ #
145+ # Also, we can't use `makeWrapper` here because `kmod` only does
146+ # `modprobe` functionality if `argv[0] == "modprobe"`.
147+ cat >$out/bin/modprobe-kernel <<EOF
148+ #!$out/bin/ash
149+ export LD_LIBRARY_PATH=$out/lib
150+ exec $out/bin/modprobe "\$@"
151+ EOF
152+ chmod +x $out/bin/modprobe-kernel
153+
134154 # Copy resize2fs if any ext* filesystems are to be resized
135155 ${optionalString (any (fs: fs.autoResize && (lib.hasPrefix "ext" fs.fsType)) fileSystems) ''
136156 # We need mke2fs in the initrd.
@@ -335,7 +355,7 @@ let
335355 [ { object = bootStage1;
336356 symlink = "/init";
337357 }
338− { object = pkgs.writeText "mdadm.conf" config.boot.initrd.mdadmConf;
358+ { object = pkgs.writeText "mdadm.conf" config.boot.initrd.services.swraid.mdadmConf;
339359 symlink = "/etc/mdadm.conf";
340360 }
341361 { object = pkgs.runCommand "initrd-kmod-blacklist-ubuntu" {
@@ -400,7 +420,7 @@ let
400420 ${lib.optionalString (config.boot.initrd.secrets == {})
401421 "exit 0"}
402422
403− export PATH=${pkgs.coreutils}/bin:${pkgs.cpio}/bin:${pkgs.gzip}/bin:${pkgs.findutils}/bin
423+ export PATH=${pkgs.coreutils}/bin:${pkgs.libarchive}/bin:${pkgs.gzip}/bin:${pkgs.findutils}/bin
404424
405425 function cleanup {
406426 if [ -n "$tmp" -a -d "$tmp" ]; then
@@ -420,7 +440,7 @@ let
420440 ) config.boot.initrd.secrets)
421441 }
422442
423− (cd "$tmp" && find . -print0 | sort -z | cpio --quiet -o -H newc -R +0:+0 --reproducible --null) | \
443+ (cd "$tmp" && find . -print0 | sort -z | bsdtar --uid 0 --gid 0 -cnf - -T - | bsdtar --null -cf - --format=newc @-) | \
424444 ${compressorExe} ${lib.escapeShellArgs initialRamdisk.compressorArgs} >> "$1"
425445 '';
426446
@@ -485,14 +505,6 @@ in
485505 '';
486506 };
487507
488− boot.initrd.mdadmConf = mkOption {
489− default = "";
490− type = types.lines;
491− description = ''
492− Contents of <filename>/etc/mdadm.conf</filename> in stage 1.
493− '';
494− };
495−
496508 boot.initrd.preLVMCommands = mkOption {
497509 default = "";
498510 type = types.lines;
@@ -703,8 +715,12 @@ in
703715 }
704716 ];
705717
706− system.build =
707− { inherit bootStage1 initialRamdisk initialRamdiskSecretAppender extraUtils; };
718+ system.build = mkMerge [
719+ { inherit bootStage1 initialRamdiskSecretAppender extraUtils; }
720+
721+ # generated in nixos/modules/system/boot/systemd/initrd.nix
722+ (mkIf (!config.boot.initrd.systemd.enable) { inherit initialRamdisk; })
723+ ];
708724
709725 system.requiredKernelConfig = with config.lib.kernelConfig; [
710726 (isYes "TMPFS")
@@ -712,6 +728,9 @@ in
712728 ];
713729
714730 boot.initrd.supportedFilesystems = map (fs: fs.fsType) fileSystems;
715−
716731 };
732+
733+ imports = [
734+ (mkRenamedOptionModule [ "boot" "initrd" "mdadmConf" ] [ "boot" "initrd" "services" "swraid" "mdadmConf" ])
735+ ];
717736}
nixos/modules/system/boot/stage-2-init.sh+66−94
@@ -5,32 +5,30 @@ systemConfig=@systemConfig@
55export HOME=/root PATH="@path@"
66
77
8−# Process the kernel command line.
9−for o in $(</proc/cmdline); do
10− case $o in
11− boot.debugtrace)
12− # Show each command.
13− set -x
14− ;;
15− resume=*)
16− set -- $(IFS==; echo $o)
17− resumeDevice=$2
18− ;;
19− esac
20−done
21−
22−
23−# Print a greeting.
24−echo
25−echo -e "\e[1;32m<<< NixOS Stage 2 >>>\e[0m"
26−echo
27−
28−
29−# Normally, stage 1 mounts the root filesystem read/writable.
30−# However, in some environments, stage 2 is executed directly, and the
31−# root is read-only. So make it writable here.
32−if [ -z "$container" ]; then
33− mount -n -o remount,rw none /
8+if [ "${IN_NIXOS_SYSTEMD_STAGE1:-}" != true ]; then
9+ # Process the kernel command line.
10+ for o in $(</proc/cmdline); do
11+ case $o in
12+ boot.debugtrace)
13+ # Show each command.
14+ set -x
15+ ;;
16+ esac
17+ done
18+
19+
20+ # Print a greeting.
21+ echo
22+ echo -e "\e[1;32m<<< NixOS Stage 2 >>>\e[0m"
23+ echo
24+
25+
26+ # Normally, stage 1 mounts the root filesystem read/writable.
27+ # However, in some environments, stage 2 is executed directly, and the
28+ # root is read-only. So make it writable here.
29+ if [ -z "$container" ]; then
30+ mount -n -o remount,rw none /
31+ fi
3432fi
3533
3634
@@ -43,6 +41,12 @@ if [ ! -e /proc/1 ]; then
4341 local options="$3"
4442 local fsType="$4"
4543
44+ # We must not overwrite this mount because it's bind-mounted
45+ # from stage 1's /run
46+ if [ "${IN_NIXOS_SYSTEMD_STAGE1:-}" = true ] && [ "${mountPoint}" = /run ]; then
47+ return
48+ fi
49+
4650 install -m 0755 -d "$mountPoint"
4751 mount -n -t "$fsType" -o "$options" "$device" "$mountPoint"
4852 }
@@ -50,7 +54,11 @@ if [ ! -e /proc/1 ]; then
5054fi
5155
5256
53−echo "booting system configuration $systemConfig" > /dev/kmsg
57+if [ "${IN_NIXOS_SYSTEMD_STAGE1:-}" = true ]; then
58+ echo "booting system configuration ${systemConfig}"
59+else
60+ echo "booting system configuration $systemConfig" > /dev/kmsg
61+fi
5462
5563
5664# Make /nix/store a read-only bind mount to enforce immutability of
@@ -72,59 +80,32 @@ if [ -n "@readOnlyStore@" ]; then
7280fi
7381
7482
75−# Provide a /etc/mtab.
76−install -m 0755 -d /etc
77−test -e /etc/fstab || touch /etc/fstab # to shut up mount
78−rm -f /etc/mtab* # not that we care about stale locks
79−ln -s /proc/mounts /etc/mtab
80−
81−
82−# More special file systems, initialise required directories.
83−[ -e /proc/bus/usb ] && mount -t usbfs usbfs /proc/bus/usb # UML doesn't have USB by default
84−install -m 01777 -d /tmp
85−install -m 0755 -d /var/{log,lib,db} /nix/var /etc/nixos/ \
86− /run/lock /home /bin # for the /bin/sh symlink
87−
88−
89−# Miscellaneous boot time cleanup.
90−rm -rf /var/run /var/lock
91−rm -f /etc/{group,passwd,shadow}.lock
92−
93−
94−# Also get rid of temporary GC roots.
95−rm -rf /nix/var/nix/gcroots/tmp /nix/var/nix/temproots
96−
97−
98−# For backwards compatibility, symlink /var/run to /run, and /var/lock
99−# to /run/lock.
100−ln -s /run /var/run
101−ln -s /run/lock /var/lock
83+if [ "${IN_NIXOS_SYSTEMD_STAGE1:-}" != true ]; then
84+ # Use /etc/resolv.conf supplied by systemd-nspawn, if applicable.
85+ if [ -n "@useHostResolvConf@" ] && [ -e /etc/resolv.conf ]; then
86+ resolvconf -m 1000 -a host </etc/resolv.conf
87+ fi
10288
10389
104−# Clear the resume device.
105−if test -n "$resumeDevice"; then
106− mkswap "$resumeDevice" || echo 'Failed to clear saved image.'
90+ # Log the script output to /dev/kmsg or /run/log/stage-2-init.log.
91+ # Only at this point are all the necessary prerequisites ready for these commands.
92+ exec {logOutFd}>&1 {logErrFd}>&2
93+ if test -w /dev/kmsg; then
94+ exec > >(tee -i /proc/self/fd/"$logOutFd" | while read -r line; do
95+ if test -n "$line"; then
96+ echo "<7>stage-2-init: $line" > /dev/kmsg
97+ fi
98+ done) 2>&1
99+ else
100+ mkdir -p /run/log
101+ exec > >(tee -i /run/log/stage-2-init.log) 2>&1
102+ fi
107103fi
108104
109105
110−# Use /etc/resolv.conf supplied by systemd-nspawn, if applicable.
111−if [ -n "@useHostResolvConf@" ] && [ -e /etc/resolv.conf ]; then
112− resolvconf -m 1000 -a host </etc/resolv.conf
113−fi
114−
115−# Log the script output to /dev/kmsg or /run/log/stage-2-init.log.
116−# Only at this point are all the necessary prerequisites ready for these commands.
117−exec {logOutFd}>&1 {logErrFd}>&2
118−if test -w /dev/kmsg; then
119− exec > >(tee -i /proc/self/fd/"$logOutFd" | while read -r line; do
120− if test -n "$line"; then
121− echo "<7>stage-2-init: $line" > /dev/kmsg
122− fi
123− done) 2>&1
124−else
125− mkdir -p /run/log
126− exec > >(tee -i /run/log/stage-2-init.log) 2>&1
127−fi
106+# Required by the activation script
107+install -m 0755 -d /etc /etc/nixos
108+install -m 01777 -d /tmp
128109
129110
130111# Run the script that performs all configuration activation that does
@@ -133,22 +114,9 @@ echo "running activation script..."
133114$systemConfig/activate
134115
135116
136−# Restore the system time from the hardware clock. We do this after
137−# running the activation script to be sure that /etc/localtime points
138−# at the current time zone.
139−if [ -e /dev/rtc ]; then
140− hwclock --hctosys
141−fi
142−
143−
144117# Record the boot configuration.
145118ln -sfn "$systemConfig" /run/booted-system
146119
147−# Prevent the booted system from being garbage-collected. If it weren't
148−# a gcroot, if we were running a different kernel, switched system,
149−# and garbage collected all, we could not load kernel modules anymore.
150−ln -sfn /run/booted-system /nix/var/nix/gcroots/booted-system
151−
152120
153121# Run any user-specified commands.
154122@shell@ @postBootCommands@
@@ -162,11 +130,15 @@ ln -sfn /run/booted-system /nix/var/nix/gcroots/booted-system
162130: >> /etc/machine-id
163131
164132
165−# Reset the logging file descriptors.
166−exec 1>&$logOutFd 2>&$logErrFd
167−exec {logOutFd}>&- {logErrFd}>&-
133+# No need to restore the stdout/stderr streams we never redirected and
134+# especially no need to start systemd
135+if [ "${IN_NIXOS_SYSTEMD_STAGE1:-}" != true ]; then
136+ # Reset the logging file descriptors.
137+ exec 1>&$logOutFd 2>&$logErrFd
138+ exec {logOutFd}>&- {logErrFd}>&-
168139
169140
170−# Start systemd in a clean environment.
171−echo "starting systemd..."
172−exec env - @systemdExecutable@ "$@"
141+ # Start systemd in a clean environment.
142+ echo "starting systemd..."
143+ exec @systemdExecutable@ "$@"
144+fi
nixos/modules/system/boot/systemd.nix+25−44
@@ -11,14 +11,7 @@ let
1111 systemd = cfg.package;
1212
1313 inherit (systemdUtils.lib)
14− makeUnit
1514 generateUnits
16− makeJobScript
17− unitConfig
18− serviceConfig
19− mountConfig
20− automountConfig
21− commonUnitText
2215 targetToUnit
2316 serviceToUnit
2417 socketToUnit
@@ -185,13 +178,7 @@ in
185178 systemd.units = mkOption {
186179 description = "Definition of systemd units.";
187180 default = {};
188− type = with types; attrsOf (submodule (
189− { name, config, ... }:
190− { options = concreteUnitOptions;
191− config = {
192− unit = mkDefault (makeUnit name config);
193− };
194− }));
181+ type = systemdUtils.types.units;
195182 };
196183
197184 systemd.packages = mkOption {
@@ -203,37 +190,37 @@ in
203190
204191 systemd.targets = mkOption {
205192 default = {};
206− type = with types; attrsOf (submodule [ { options = targetOptions; } unitConfig] );
193+ type = systemdUtils.types.targets;
207194 description = "Definition of systemd target units.";
208195 };
209196
210197 systemd.services = mkOption {
211198 default = {};
212− type = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig serviceConfig ]);
199+ type = systemdUtils.types.services;
213200 description = "Definition of systemd service units.";
214201 };
215202
216203 systemd.sockets = mkOption {
217204 default = {};
218− type = with types; attrsOf (submodule [ { options = socketOptions; } unitConfig ]);
205+ type = systemdUtils.types.sockets;
219206 description = "Definition of systemd socket units.";
220207 };
221208
222209 systemd.timers = mkOption {
223210 default = {};
224− type = with types; attrsOf (submodule [ { options = timerOptions; } unitConfig ]);
211+ type = systemdUtils.types.timers;
225212 description = "Definition of systemd timer units.";
226213 };
227214
228215 systemd.paths = mkOption {
229216 default = {};
230− type = with types; attrsOf (submodule [ { options = pathOptions; } unitConfig ]);
217+ type = systemdUtils.types.paths;
231218 description = "Definition of systemd path units.";
232219 };
233220
234221 systemd.mounts = mkOption {
235222 default = [];
236− type = with types; listOf (submodule [ { options = mountOptions; } unitConfig mountConfig ]);
223+ type = systemdUtils.types.mounts;
237224 description = ''
238225 Definition of systemd mount units.
239226 This is a list instead of an attrSet, because systemd mandates the names to be derived from
@@ -243,7 +230,7 @@ in
243230
244231 systemd.automounts = mkOption {
245232 default = [];
246− type = with types; listOf (submodule [ { options = automountOptions; } unitConfig automountConfig ]);
233+ type = systemdUtils.types.automounts;
247234 description = ''
248235 Definition of systemd automount units.
249236 This is a list instead of an attrSet, because systemd mandates the names to be derived from
@@ -253,7 +240,7 @@ in
253240
254241 systemd.slices = mkOption {
255242 default = {};
256− type = with types; attrsOf (submodule [ { options = sliceOptions; } unitConfig] );
243+ type = systemdUtils.types.slices;
257244 description = "Definition of slice configurations.";
258245 };
259246
@@ -362,10 +349,11 @@ in
362349 type = types.listOf types.str;
363350 example = [ "systemd-backlight@.service" ];
364351 description = ''
365− A list of units to suppress when generating system systemd configuration directory. This has
352+ A list of units to skip when generating system systemd configuration directory. This has
366353 priority over upstream units, <option>systemd.units</option>, and
367354 <option>systemd.additionalUpstreamSystemUnits</option>. The main purpose of this is to
368− suppress a upstream systemd unit with any modifications made to it by other NixOS modules.
355+ prevent a upstream systemd unit from being added to the initrd with any modifications made to it
356+ by other NixOS modules.
369357 '';
370358 };
371359
@@ -482,7 +470,12 @@ in
482470 enabledUnits = filterAttrs (n: v: ! elem n cfg.suppressedSystemUnits) cfg.units;
483471
484472 in ({
485− "systemd/system".source = generateUnits "system" enabledUnits enabledUpstreamSystemUnits upstreamSystemWants;
473+ "systemd/system".source = generateUnits {
474+ type = "system";
475+ units = enabledUnits;
476+ upstreamUnits = enabledUpstreamSystemUnits;
477+ upstreamWants = upstreamSystemWants;
478+ };
486479
487480 "systemd/system.conf".text = ''
488481 [Manager]
@@ -580,14 +573,6 @@ in
580573 })
581574 (filterAttrs (name: service: service.enable && service.startAt != []) cfg.services);
582575
583− # Generate timer units for all services that have a ‘startAt’ value.
584− systemd.user.timers =
585− mapAttrs (name: service:
586− { wantedBy = [ "timers.target" ];
587− timerConfig.OnCalendar = service.startAt;
588− })
589− (filterAttrs (name: service: service.startAt != []) cfg.user.services);
590−
591576 # Some overrides to upstream units.
592577 systemd.services."systemd-backlight@".restartIfChanged = false;
593578 systemd.services."systemd-fsck@".restartIfChanged = false;
@@ -612,22 +597,18 @@ in
612597
613598 boot.kernelParams = optional (!cfg.enableUnifiedCgroupHierarchy) "systemd.unified_cgroup_hierarchy=0";
614599
615− services.logrotate.paths = {
600+ services.logrotate.settings = {
616601 "/var/log/btmp" = mapAttrs (_: mkDefault) {
617602 frequency = "monthly";
618− keep = 1;
619− extraConfig = ''
620− create 0660 root ${config.users.groups.utmp.name}
621− minsize 1M
622− '';
603+ rotate = 1;
604+ create = "0660 root ${config.users.groups.utmp.name}";
605+ minsize = "1M";
623606 };
624607 "/var/log/wtmp" = mapAttrs (_: mkDefault) {
625608 frequency = "monthly";
626− keep = 1;
627− extraConfig = ''
628− create 0664 root ${config.users.groups.utmp.name}
629− minsize 1M
630− '';
609+ rotate = 1;
610+ create = "0664 root ${config.users.groups.utmp.name}";
611+ minsize = "1M";
631612 };
632613 };
633614 };
nixos/modules/system/boot/systemd/initrd-secrets.nixnew file+36
@@ -0,0 +1,36 @@
1+{ config, pkgs, lib, ... }:
2+
3+{
4+ config = lib.mkIf (config.boot.initrd.enable && config.boot.initrd.systemd.enable) {
5+ # Copy secrets into the initrd if they cannot be appended
6+ boot.initrd.systemd.contents = lib.mkIf (!config.boot.loader.supportsInitrdSecrets)
7+ (lib.mapAttrs' (dest: source: lib.nameValuePair "/.initrd-secrets/${dest}" { source = if source == null then dest else source; }) config.boot.initrd.secrets);
8+
9+ # Copy secrets to their respective locations
10+ boot.initrd.systemd.services.initrd-nixos-copy-secrets = lib.mkIf (config.boot.initrd.secrets != {}) {
11+ description = "Copy secrets into place";
12+ # Run as early as possible
13+ wantedBy = [ "sysinit.target" ];
14+ before = [ "cryptsetup-pre.target" ];
15+ unitConfig.DefaultDependencies = false;
16+
17+ # We write the secrets to /.initrd-secrets and move them because this allows
18+ # secrets to be written to /run. If we put the secret directly to /run and
19+ # drop this service, we'd mount the /run tmpfs over the secret, making it
20+ # invisible in stage 2.
21+ script = ''
22+ for secret in $(cd /.initrd-secrets; find . -type f); do
23+ mkdir -p "$(dirname "/$secret")"
24+ cp "/.initrd-secrets/$secret" "/$secret"
25+ done
26+ '';
27+
28+ unitConfig = {
29+ Type = "oneshot";
30+ RemainAfterExit = true;
31+ };
32+ };
33+ # The script needs this
34+ boot.initrd.systemd.extraBin.find = "${pkgs.findutils}/bin/find";
35+ };
36+}
nixos/modules/system/boot/systemd/initrd.nixnew file+502
@@ -0,0 +1,502 @@
1+{ lib, config, utils, pkgs, ... }:
2+
3+with lib;
4+
5+let
6+ inherit (utils) systemdUtils escapeSystemdPath;
7+ inherit (systemdUtils.lib)
8+ generateUnits
9+ pathToUnit
10+ serviceToUnit
11+ sliceToUnit
12+ socketToUnit
13+ targetToUnit
14+ timerToUnit
15+ mountToUnit
16+ automountToUnit;
17+
18+
19+ cfg = config.boot.initrd.systemd;
20+
21+ # Copied from fedora
22+ upstreamUnits = [
23+ "basic.target"
24+ "ctrl-alt-del.target"
25+ "emergency.service"
26+ "emergency.target"
27+ "final.target"
28+ "halt.target"
29+ "initrd-cleanup.service"
30+ "initrd-fs.target"
31+ "initrd-parse-etc.service"
32+ "initrd-root-device.target"
33+ "initrd-root-fs.target"
34+ "initrd-switch-root.service"
35+ "initrd-switch-root.target"
36+ "initrd.target"
37+ "kexec.target"
38+ "kmod-static-nodes.service"
39+ "local-fs-pre.target"
40+ "local-fs.target"
41+ "multi-user.target"
42+ "paths.target"
43+ "poweroff.target"
44+ "reboot.target"
45+ "rescue.service"
46+ "rescue.target"
47+ "rpcbind.target"
48+ "shutdown.target"
49+ "sigpwr.target"
50+ "slices.target"
51+ "sockets.target"
52+ "swap.target"
53+ "sysinit.target"
54+ "sys-kernel-config.mount"
55+ "syslog.socket"
56+ "systemd-ask-password-console.path"
57+ "systemd-ask-password-console.service"
58+ "systemd-fsck@.service"
59+ "systemd-halt.service"
60+ "systemd-hibernate-resume@.service"
61+ "systemd-journald-audit.socket"
62+ "systemd-journald-dev-log.socket"
63+ "systemd-journald.service"
64+ "systemd-journald.socket"
65+ "systemd-kexec.service"
66+ "systemd-modules-load.service"
67+ "systemd-poweroff.service"
68+ "systemd-reboot.service"
69+ "systemd-sysctl.service"
70+ "systemd-tmpfiles-setup-dev.service"
71+ "systemd-tmpfiles-setup.service"
72+ "timers.target"
73+ "umount.target"
74+
75+ # TODO: Networking
76+ # "network-online.target"
77+ # "network-pre.target"
78+ # "network.target"
79+ # "nss-lookup.target"
80+ # "nss-user-lookup.target"
81+ # "remote-fs-pre.target"
82+ # "remote-fs.target"
83+ ] ++ cfg.additionalUpstreamUnits;
84+
85+ upstreamWants = [
86+ "sysinit.target.wants"
87+ ];
88+
89+ enabledUpstreamUnits = filter (n: ! elem n cfg.suppressedUnits) upstreamUnits;
90+ enabledUnits = filterAttrs (n: v: ! elem n cfg.suppressedUnits) cfg.units;
91+ jobScripts = concatLists (mapAttrsToList (_: unit: unit.jobScripts or []) (filterAttrs (_: v: v.enable) cfg.services));
92+
93+ stage1Units = generateUnits {
94+ type = "initrd";
95+ units = enabledUnits;
96+ upstreamUnits = enabledUpstreamUnits;
97+ inherit upstreamWants;
98+ inherit (cfg) packages package;
99+ };
100+
101+ fileSystems = filter utils.fsNeededForBoot config.system.build.fileSystems;
102+
103+ fstab = pkgs.writeText "initrd-fstab" (lib.concatMapStringsSep "\n"
104+ ({ fsType, mountPoint, device, options, autoFormat, autoResize, ... }@fs: let
105+ opts = options ++ optional autoFormat "x-systemd.makefs" ++ optional autoResize "x-systemd.growfs";
106+ in "${device} /sysroot${mountPoint} ${fsType} ${lib.concatStringsSep "," opts}") fileSystems);
107+
108+ needMakefs = lib.any (fs: fs.autoFormat) fileSystems;
109+ needGrowfs = lib.any (fs: fs.autoResize) fileSystems;
110+
111+ kernel-name = config.boot.kernelPackages.kernel.name or "kernel";
112+ modulesTree = config.system.modulesTree.override { name = kernel-name + "-modules"; };
113+ firmware = config.hardware.firmware;
114+ # Determine the set of modules that we need to mount the root FS.
115+ modulesClosure = pkgs.makeModulesClosure {
116+ rootModules = config.boot.initrd.availableKernelModules ++ config.boot.initrd.kernelModules;
117+ kernel = modulesTree;
118+ firmware = firmware;
119+ allowMissing = false;
120+ };
121+
122+ initrdBinEnv = pkgs.buildEnv {
123+ name = "initrd-bin-env";
124+ paths = map getBin cfg.initrdBin;
125+ pathsToLink = ["/bin" "/sbin"];
126+ postBuild = concatStringsSep "\n" (mapAttrsToList (n: v: "ln -s '${v}' $out/bin/'${n}'") cfg.extraBin);
127+ };
128+
129+ initialRamdisk = pkgs.makeInitrdNG {
130+ name = "initrd-${kernel-name}";
131+ inherit (config.boot.initrd) compressor compressorArgs prepend;
132+
133+ contents = map (path: { object = path; symlink = ""; }) (subtractLists cfg.suppressedStorePaths cfg.storePaths)
134+ ++ mapAttrsToList (_: v: { object = v.source; symlink = v.target; }) (filterAttrs (_: v: v.enable) cfg.contents);
135+ };
136+
137+in {
138+ options.boot.initrd.systemd = {
139+ enable = mkEnableOption ''systemd in initrd.
140+
141+ Note: This is in very early development and is highly
142+ experimental. Most of the features NixOS supports in initrd are
143+ not yet supported by the intrd generated with this option.
144+ '';
145+
146+ package = (mkPackageOption pkgs "systemd" {
147+ default = "systemdStage1";
148+ }) // {
149+ visible = false;
150+ };
151+
152+ contents = mkOption {
153+ description = "Set of files that have to be linked into the initrd";
154+ example = literalExpression ''
155+ {
156+ "/etc/hostname".text = "mymachine";
157+ }
158+ '';
159+ visible = false;
160+ default = {};
161+ type = utils.systemdUtils.types.initrdContents;
162+ };
163+
164+ storePaths = mkOption {
165+ description = ''
166+ Store paths to copy into the initrd as well.
167+ '';
168+ type = with types; listOf (oneOf [ singleLineStr package ]);
169+ default = [];
170+ };
171+
172+ extraBin = mkOption {
173+ description = ''
174+ Tools to add to /bin
175+ '';
176+ example = literalExpression ''
177+ {
178+ umount = ''${pkgs.util-linux}/bin/umount;
179+ }
180+ '';
181+ type = types.attrsOf types.path;
182+ default = {};
183+ };
184+
185+ suppressedStorePaths = mkOption {
186+ description = ''
187+ Store paths specified in the storePaths option that
188+ should not be copied.
189+ '';
190+ type = types.listOf types.singleLineStr;
191+ default = [];
192+ };
193+
194+ emergencyAccess = mkOption {
195+ type = with types; oneOf [ bool singleLineStr ];
196+ visible = false;
197+ description = ''
198+ Set to true for unauthenticated emergency access, and false for
199+ no emergency access.
200+
201+ Can also be set to a hashed super user password to allow
202+ authenticated access to the emergency mode.
203+ '';
204+ default = false;
205+ };
206+
207+ initrdBin = mkOption {
208+ type = types.listOf types.package;
209+ default = [];
210+ visible = false;
211+ description = ''
212+ Packages to include in /bin for the stage 1 emergency shell.
213+ '';
214+ };
215+
216+ additionalUpstreamUnits = mkOption {
217+ default = [ ];
218+ type = types.listOf types.str;
219+ visible = false;
220+ example = [ "debug-shell.service" "systemd-quotacheck.service" ];
221+ description = ''
222+ Additional units shipped with systemd that shall be enabled.
223+ '';
224+ };
225+
226+ suppressedUnits = mkOption {
227+ default = [ ];
228+ type = types.listOf types.str;
229+ example = [ "systemd-backlight@.service" ];
230+ visible = false;
231+ description = ''
232+ A list of units to skip when generating system systemd configuration directory. This has
233+ priority over upstream units, <option>boot.initrd.systemd.units</option>, and
234+ <option>boot.initrd.systemd.additionalUpstreamUnits</option>. The main purpose of this is to
235+ prevent a upstream systemd unit from being added to the initrd with any modifications made to it
236+ by other NixOS modules.
237+ '';
238+ };
239+
240+ units = mkOption {
241+ description = "Definition of systemd units.";
242+ default = {};
243+ visible = false;
244+ type = systemdUtils.types.units;
245+ };
246+
247+ packages = mkOption {
248+ default = [];
249+ visible = false;
250+ type = types.listOf types.package;
251+ example = literalExpression "[ pkgs.systemd-cryptsetup-generator ]";
252+ description = "Packages providing systemd units and hooks.";
253+ };
254+
255+ targets = mkOption {
256+ default = {};
257+ visible = false;
258+ type = systemdUtils.types.initrdTargets;
259+ description = "Definition of systemd target units.";
260+ };
261+
262+ services = mkOption {
263+ default = {};
264+ type = systemdUtils.types.initrdServices;
265+ visible = false;
266+ description = "Definition of systemd service units.";
267+ };
268+
269+ sockets = mkOption {
270+ default = {};
271+ type = systemdUtils.types.initrdSockets;
272+ visible = false;
273+ description = "Definition of systemd socket units.";
274+ };
275+
276+ timers = mkOption {
277+ default = {};
278+ type = systemdUtils.types.initrdTimers;
279+ visible = false;
280+ description = "Definition of systemd timer units.";
281+ };
282+
283+ paths = mkOption {
284+ default = {};
285+ type = systemdUtils.types.initrdPaths;
286+ visible = false;
287+ description = "Definition of systemd path units.";
288+ };
289+
290+ mounts = mkOption {
291+ default = [];
292+ type = systemdUtils.types.initrdMounts;
293+ visible = false;
294+ description = ''
295+ Definition of systemd mount units.
296+ This is a list instead of an attrSet, because systemd mandates the names to be derived from
297+ the 'where' attribute.
298+ '';
299+ };
300+
301+ automounts = mkOption {
302+ default = [];
303+ type = systemdUtils.types.automounts;
304+ visible = false;
305+ description = ''
306+ Definition of systemd automount units.
307+ This is a list instead of an attrSet, because systemd mandates the names to be derived from
308+ the 'where' attribute.
309+ '';
310+ };
311+
312+ slices = mkOption {
313+ default = {};
314+ type = systemdUtils.types.slices;
315+ visible = false;
316+ description = "Definition of slice configurations.";
317+ };
318+ };
319+
320+ config = mkIf (config.boot.initrd.enable && cfg.enable) {
321+ system.build = { inherit initialRamdisk; };
322+
323+ boot.initrd.availableKernelModules = [ "autofs4" ]; # systemd needs this for some features
324+
325+ boot.initrd.systemd = {
326+ initrdBin = [pkgs.bash pkgs.coreutils cfg.package.kmod cfg.package] ++ config.system.fsPackages;
327+ extraBin = {
328+ less = "${pkgs.less}/bin/less";
329+ mount = "${cfg.package.util-linux}/bin/mount";
330+ umount = "${cfg.package.util-linux}/bin/umount";
331+ };
332+
333+ contents = {
334+ "/init".source = "${cfg.package}/lib/systemd/systemd";
335+ "/etc/systemd/system".source = stage1Units;
336+
337+ "/etc/systemd/system.conf".text = ''
338+ [Manager]
339+ DefaultEnvironment=PATH=/bin:/sbin ${optionalString (isBool cfg.emergencyAccess && cfg.emergencyAccess) "SYSTEMD_SULOGIN_FORCE=1"}
340+ '';
341+
342+ "/etc/fstab".source = fstab;
343+
344+ "/lib/modules".source = "${modulesClosure}/lib/modules";
345+ "/lib/firmware".source = "${modulesClosure}/lib/firmware";
346+
347+ "/etc/modules-load.d/nixos.conf".text = concatStringsSep "\n" config.boot.initrd.kernelModules;
348+
349+ "/etc/passwd".source = "${pkgs.fakeNss}/etc/passwd";
350+ "/etc/shadow".text = "root:${if isBool cfg.emergencyAccess then "!" else cfg.emergencyAccess}:::::::";
351+
352+ "/bin".source = "${initrdBinEnv}/bin";
353+ "/sbin".source = "${initrdBinEnv}/sbin";
354+
355+ "/etc/sysctl.d/nixos.conf".text = "kernel.modprobe = /sbin/modprobe";
356+ "/etc/modprobe.d/systemd.conf".source = "${cfg.package}/lib/modprobe.d/systemd.conf";
357+ "/etc/modprobe.d/ubuntu.conf".source = pkgs.runCommand "initrd-kmod-blacklist-ubuntu" { } ''
358+ ${pkgs.buildPackages.perl}/bin/perl -0pe 's/## file: iwlwifi.conf(.+?)##/##/s;' $src > $out
359+ '';
360+ "/etc/modprobe.d/debian.conf".source = pkgs.kmod-debian-aliases;
361+
362+ };
363+
364+ storePaths = [
365+ # systemd tooling
366+ "${cfg.package}/lib/systemd/systemd-fsck"
367+ (lib.mkIf needGrowfs "${cfg.package}/lib/systemd/systemd-growfs")
368+ "${cfg.package}/lib/systemd/systemd-hibernate-resume"
369+ "${cfg.package}/lib/systemd/systemd-journald"
370+ (lib.mkIf needMakefs "${cfg.package}/lib/systemd/systemd-makefs")
371+ "${cfg.package}/lib/systemd/systemd-modules-load"
372+ "${cfg.package}/lib/systemd/systemd-remount-fs"
373+ "${cfg.package}/lib/systemd/systemd-shutdown"
374+ "${cfg.package}/lib/systemd/systemd-sulogin-shell"
375+ "${cfg.package}/lib/systemd/systemd-sysctl"
376+
377+ # generators
378+ "${cfg.package}/lib/systemd/system-generators/systemd-debug-generator"
379+ "${cfg.package}/lib/systemd/system-generators/systemd-fstab-generator"
380+ "${cfg.package}/lib/systemd/system-generators/systemd-gpt-auto-generator"
381+ "${cfg.package}/lib/systemd/system-generators/systemd-hibernate-resume-generator"
382+ "${cfg.package}/lib/systemd/system-generators/systemd-run-generator"
383+
384+ # utilities needed by systemd
385+ "${cfg.package.util-linux}/bin/mount"
386+ "${cfg.package.util-linux}/bin/umount"
387+ "${cfg.package.util-linux}/bin/sulogin"
388+
389+ # so NSS can look up usernames
390+ "${pkgs.glibc}/lib/libnss_files.so.2"
391+ ] ++ jobScripts;
392+
393+ targets.initrd.aliases = ["default.target"];
394+ units =
395+ mapAttrs' (n: v: nameValuePair "${n}.path" (pathToUnit n v)) cfg.paths
396+ // mapAttrs' (n: v: nameValuePair "${n}.service" (serviceToUnit n v)) cfg.services
397+ // mapAttrs' (n: v: nameValuePair "${n}.slice" (sliceToUnit n v)) cfg.slices
398+ // mapAttrs' (n: v: nameValuePair "${n}.socket" (socketToUnit n v)) cfg.sockets
399+ // mapAttrs' (n: v: nameValuePair "${n}.target" (targetToUnit n v)) cfg.targets
400+ // mapAttrs' (n: v: nameValuePair "${n}.timer" (timerToUnit n v)) cfg.timers
401+ // listToAttrs (map
402+ (v: let n = escapeSystemdPath v.where;
403+ in nameValuePair "${n}.mount" (mountToUnit n v)) cfg.mounts)
404+ // listToAttrs (map
405+ (v: let n = escapeSystemdPath v.where;
406+ in nameValuePair "${n}.automount" (automountToUnit n v)) cfg.automounts);
407+
408+ # The unit in /run/systemd/generator shadows the unit in
409+ # /etc/systemd/system, but will still apply drop-ins from
410+ # /etc/systemd/system/foo.service.d/
411+ #
412+ # We need IgnoreOnIsolate, otherwise the Requires dependency of
413+ # a mount unit on its makefs unit causes it to be unmounted when
414+ # we isolate for switch-root. Use a dummy package so that
415+ # generateUnits will generate drop-ins instead of unit files.
416+ packages = [(pkgs.runCommand "dummy" {} ''
417+ mkdir -p $out/etc/systemd/system
418+ touch $out/etc/systemd/system/systemd-{makefs,growfs}@.service
419+ '')];
420+ services."systemd-makefs@" = lib.mkIf needMakefs { unitConfig.IgnoreOnIsolate = true; };
421+ services."systemd-growfs@" = lib.mkIf needGrowfs { unitConfig.IgnoreOnIsolate = true; };
422+
423+ services.initrd-nixos-activation = {
424+ after = [ "initrd-fs.target" ];
425+ requiredBy = [ "initrd.target" ];
426+ unitConfig.AssertPathExists = "/etc/initrd-release";
427+ serviceConfig.Type = "oneshot";
428+ description = "NixOS Activation";
429+
430+ script = /* bash */ ''
431+ set -uo pipefail
432+ export PATH="/bin:${cfg.package.util-linux}/bin"
433+
434+ # Figure out what closure to boot
435+ closure=
436+ for o in $(< /proc/cmdline); do
437+ case $o in
438+ init=*)
439+ IFS== read -r -a initParam <<< "$o"
440+ closure="$(dirname "''${initParam[1]}")"
441+ ;;
442+ esac
443+ done
444+
445+ # Sanity check
446+ if [ -z "''${closure:-}" ]; then
447+ echo 'No init= parameter on the kernel command line' >&2
448+ exit 1
449+ fi
450+
451+ # If we are not booting a NixOS closure (e.g. init=/bin/sh),
452+ # we don't know what root to prepare so we don't do anything
453+ if ! [ -x "/sysroot$closure/prepare-root" ]; then
454+ echo "NEW_INIT=''${initParam[1]}" > /etc/switch-root.conf
455+ echo "$closure does not look like a NixOS installation - not activating"
456+ exit 0
457+ fi
458+ echo 'NEW_INIT=' > /etc/switch-root.conf
459+
460+
461+ # We need to propagate /run for things like /run/booted-system
462+ # and /run/current-system.
463+ mkdir -p /sysroot/run
464+ mount --bind /run /sysroot/run
465+
466+ # Initialize the system
467+ export IN_NIXOS_SYSTEMD_STAGE1=true
468+ exec chroot /sysroot $closure/prepare-root
469+ '';
470+ };
471+
472+ # This will either call systemctl with the new init as the last parameter (which
473+ # is the case when not booting a NixOS system) or with an empty string, causing
474+ # systemd to bypass its verification code that checks whether the next file is a systemd
475+ # and using its compiled-in value
476+ services.initrd-switch-root.serviceConfig = {
477+ EnvironmentFile = "-/etc/switch-root.conf";
478+ ExecStart = [
479+ ""
480+ ''systemctl --no-block switch-root /sysroot "''${NEW_INIT}"''
481+ ];
482+ };
483+
484+ services.panic-on-fail = {
485+ wantedBy = ["emergency.target"];
486+ unitConfig = {
487+ DefaultDependencies = false;
488+ ConditionKernelCommandLine = [
489+ "|boot.panic_on_fail"
490+ "|stage1panic"
491+ ];
492+ };
493+ script = ''
494+ echo c > /proc/sysrq-trigger
495+ '';
496+ serviceConfig.Type = "oneshot";
497+ };
498+ };
499+
500+ boot.kernelParams = lib.mkIf (config.boot.resumeDevice != "") [ "resume=${config.boot.resumeDevice}" ];
501+ };
502+}
nixos/modules/system/boot/systemd/nspawn.nix+7−1
@@ -116,7 +116,13 @@ in {
116116 in
117117 mkMerge [
118118 (mkIf (cfg != {}) {
119− environment.etc."systemd/nspawn".source = mkIf (cfg != {}) (generateUnits' false "nspawn" units [] []);
119+ environment.etc."systemd/nspawn".source = mkIf (cfg != {}) (generateUnits {
120+ allowCollisions = false;
121+ type = "nspawn";
122+ inherit units;
123+ upstreamUnits = [];
124+ upstreamWants = [];
125+ });
120126 })
121127 {
122128 systemd.targets.multi-user.wants = [ "machines.target" ];
nixos/modules/system/boot/systemd/shutdown.nixnew file+58
@@ -0,0 +1,58 @@
1+{ config, lib, utils, pkgs, ... }: let
2+
3+ cfg = config.systemd.shutdownRamfs;
4+
5+ ramfsContents = let
6+ storePaths = map (p: "${p}\n") cfg.storePaths;
7+ contents = lib.mapAttrsToList (_: v: "${v.source}\n${v.target}") (lib.filterAttrs (_: v: v.enable) cfg.contents);
8+ in pkgs.writeText "shutdown-ramfs-contents" (lib.concatStringsSep "\n" (storePaths ++ contents));
9+
10+in {
11+ options.systemd.shutdownRamfs = {
12+ enable = lib.mkEnableOption "pivoting back to an initramfs for shutdown" // { default = true; };
13+ contents = lib.mkOption {
14+ description = "Set of files that have to be linked into the shutdown ramfs";
15+ example = lib.literalExpression ''
16+ {
17+ "/lib/systemd/system-shutdown/zpool-sync-shutdown".source = writeShellScript "zpool" "exec ''${zfs}/bin/zpool sync"
18+ }
19+ '';
20+ type = utils.systemdUtils.types.initrdContents;
21+ };
22+
23+ storePaths = lib.mkOption {
24+ description = ''
25+ Store paths to copy into the shutdown ramfs as well.
26+ '';
27+ type = lib.types.listOf lib.types.singleLineStr;
28+ default = [];
29+ };
30+ };
31+
32+ config = lib.mkIf cfg.enable {
33+ systemd.shutdownRamfs.contents."/shutdown".source = "${config.systemd.package}/lib/systemd/systemd-shutdown";
34+ systemd.shutdownRamfs.storePaths = [pkgs.runtimeShell "${pkgs.coreutils}/bin"];
35+
36+ systemd.services.generate-shutdown-ramfs = {
37+ description = "Generate shutdown ramfs";
38+ wantedBy = [ "shutdown.target" ];
39+ before = [ "shutdown.target" ];
40+ unitConfig = {
41+ DefaultDependencies = false;
42+ ConditionFileIsExecutable = [
43+ "!/run/initramfs/shutdown"
44+ ];
45+ };
46+
47+ path = [pkgs.util-linux pkgs.makeInitrdNGTool];
48+ serviceConfig.Type = "oneshot";
49+ script = ''
50+ mkdir -p /run/initramfs
51+ if ! mountpoint -q /run/initramfs; then
52+ mount -t tmpfs tmpfs /run/initramfs
53+ fi
54+ make-initrd-ng ${ramfsContents} /run/initramfs
55+ '';
56+ };
57+ };
58+}
nixos/modules/system/boot/systemd/tmpfiles.nix+16
@@ -100,5 +100,21 @@ in
100100 '';
101101 })
102102 ];
103+
104+ systemd.tmpfiles.rules = [
105+ "d /nix/var 0755 root root - -"
106+ "L+ /nix/var/nix/gcroots/booted-system 0755 root root - /run/booted-system"
107+ "d /run/lock 0755 root root - -"
108+ "d /var/db 0755 root root - -"
109+ "L /etc/mtab - - - - ../proc/mounts"
110+ "L /var/lock - - - - ../run/lock"
111+ # Boot-time cleanup
112+ "R! /etc/group.lock - - - - -"
113+ "R! /etc/passwd.lock - - - - -"
114+ "R! /etc/shadow.lock - - - - -"
115+ "R! /etc/mtab* - - - - -"
116+ "R! /nix/var/nix/gcroots/tmp - - - - -"
117+ "R! /nix/var/nix/temproots - - - - -"
118+ ];
103119 };
104120}
nixos/modules/system/boot/systemd/user.nix+13−18
@@ -12,10 +12,6 @@ let
1212 (systemdUtils.lib)
1313 makeUnit
1414 generateUnits
15− makeJobScript
16− unitConfig
17− serviceConfig
18− commonUnitText
1915 targetToUnit
2016 serviceToUnit
2117 socketToUnit
@@ -57,48 +53,42 @@ in {
5753 systemd.user.units = mkOption {
5854 description = "Definition of systemd per-user units.";
5955 default = {};
60− type = with types; attrsOf (submodule (
61− { name, config, ... }:
62− { options = concreteUnitOptions;
63− config = {
64− unit = mkDefault (makeUnit name config);
65− };
66− }));
56+ type = systemdUtils.types.units;
6757 };
6858
6959 systemd.user.paths = mkOption {
7060 default = {};
71− type = with types; attrsOf (submodule [ { options = pathOptions; } unitConfig ]);
61+ type = systemdUtils.types.paths;
7262 description = "Definition of systemd per-user path units.";
7363 };
7464
7565 systemd.user.services = mkOption {
7666 default = {};
77− type = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig serviceConfig ] );
67+ type = systemdUtils.types.services;
7868 description = "Definition of systemd per-user service units.";
7969 };
8070
8171 systemd.user.slices = mkOption {
8272 default = {};
83− type = with types; attrsOf (submodule [ { options = sliceOptions; } unitConfig ] );
73+ type = systemdUtils.types.slices;
8474 description = "Definition of systemd per-user slice units.";
8575 };
8676
8777 systemd.user.sockets = mkOption {
8878 default = {};
89− type = with types; attrsOf (submodule [ { options = socketOptions; } unitConfig ] );
79+ type = systemdUtils.types.sockets;
9080 description = "Definition of systemd per-user socket units.";
9181 };
9282
9383 systemd.user.targets = mkOption {
9484 default = {};
95− type = with types; attrsOf (submodule [ { options = targetOptions; } unitConfig] );
85+ type = systemdUtils.types.targets;
9686 description = "Definition of systemd per-user target units.";
9787 };
9888
9989 systemd.user.timers = mkOption {
10090 default = {};
101− type = with types; attrsOf (submodule [ { options = timerOptions; } unitConfig ] );
91+ type = systemdUtils.types.timers;
10292 description = "Definition of systemd per-user timer units.";
10393 };
10494
@@ -119,7 +109,12 @@ in {
119109 ];
120110
121111 environment.etc = {
122− "systemd/user".source = generateUnits "user" cfg.units upstreamUserUnits [];
112+ "systemd/user".source = generateUnits {
113+ type = "user";
114+ inherit (cfg) units;
115+ upstreamUnits = upstreamUserUnits;
116+ upstreamWants = [];
117+ };
123118
124119 "systemd/user.conf".text = ''
125120 [Manager]
nixos/modules/system/boot/timesyncd.nix+17−5
@@ -60,15 +60,27 @@ with lib;
6060 };
6161 users.groups.systemd-timesync.gid = config.ids.gids.systemd-timesync;
6262
63− system.activationScripts.systemd-timesyncd-migration = mkIf (versionOlder config.system.stateVersion "19.09") ''
63+ system.activationScripts.systemd-timesyncd-migration =
6464 # workaround an issue of systemd-timesyncd not starting due to upstream systemd reverting their dynamic users changes
6565 # - https://github.com/NixOS/nixpkgs/pull/61321#issuecomment-492423742
6666 # - https://github.com/systemd/systemd/issues/12131
67− if [ -L /var/lib/systemd/timesync ]; then
68− rm /var/lib/systemd/timesync
69− mv /var/lib/private/systemd/timesync /var/lib/systemd/timesync
67+ mkIf (versionOlder config.system.stateVersion "19.09") ''
68+ if [ -L /var/lib/systemd/timesync ]; then
69+ rm /var/lib/systemd/timesync
70+ mv /var/lib/private/systemd/timesync /var/lib/systemd/timesync
71+ fi
72+ '';
73+ system.activationScripts.systemd-timesyncd-init-clock =
74+ # Ensure that we have some stored time to prevent systemd-timesyncd to
75+ # resort back to the fallback time.
76+ # If the file doesn't exist we assume that our current system clock is
77+ # good enough to provide an initial value.
78+ ''
79+ if ! [ -f /var/lib/systemd/timesync/clock ]; then
80+ test -d /var/lib/systemd/timesync || mkdir -p /var/lib/systemd/timesync
81+ touch /var/lib/systemd/timesync/clock
7082 fi
71− '';
83+ '';
7284 };
7385
7486}
nixos/modules/tasks/auto-upgrade.nix+32−7
@@ -63,13 +63,16 @@ in {
6363 };
6464
6565 dates = mkOption {
66− default = "04:40";
6766 type = types.str;
67+ default = "04:40";
68+ example = "daily";
6869 description = ''
69− Specification (in the format described by
70+ How often or when upgrade occurs. For most desktop and server systems
71+ a sufficient upgrade frequency is once a day.
72+
73+ The format is described in
7074 <citerefentry><refentrytitle>systemd.time</refentrytitle>
71− <manvolnum>7</manvolnum></citerefentry>) of the time at
72− which the update will occur.
75+ <manvolnum>7</manvolnum></citerefentry>.
7376 '';
7477 };
7578
@@ -123,6 +126,22 @@ in {
123126 });
124127 };
125128
129+ persistent = mkOption {
130+ default = true;
131+ type = types.bool;
132+ example = false;
133+ description = ''
134+ Takes a boolean argument. If true, the time when the service
135+ unit was last triggered is stored on disk. When the timer is
136+ activated, the service unit is triggered immediately if it
137+ would have been triggered at least once during the time when
138+ the timer was inactive. Such triggering is nonetheless
139+ subject to the delay imposed by RandomizedDelaySec=. This is
140+ useful to catch up on missed runs of the service when the
141+ system was powered down.
142+ '';
143+ };
144+
126145 };
127146
128147 };
@@ -217,11 +236,17 @@ in {
217236 '';
218237
219238 startAt = cfg.dates;
220− };
221239
222− systemd.timers.nixos-upgrade.timerConfig.RandomizedDelaySec =
223− cfg.randomizedDelaySec;
240+ after = [ "network-online.target" ];
241+ wants = [ "network-online.target" ];
242+ };
224243
244+ systemd.timers.nixos-upgrade = {
245+ timerConfig = {
246+ RandomizedDelaySec = cfg.randomizedDelaySec;
247+ Persistent = cfg.persistent;
248+ };
249+ };
225250 };
226251
227252}
nixos/modules/tasks/bcache.nix+16−6
@@ -1,13 +1,23 @@
1−{ pkgs, ... }:
1+{ config, lib, pkgs, ... }:
22
33{
4+ options.boot.initrd.services.bcache.enable = (lib.mkEnableOption "bcache support in the initrd") // {
5+ visible = false; # only works with systemd stage 1
6+ };
47
5− environment.systemPackages = [ pkgs.bcache-tools ];
8+ config = {
69
7− services.udev.packages = [ pkgs.bcache-tools ];
10+ environment.systemPackages = [ pkgs.bcache-tools ];
811
9− boot.initrd.extraUdevRulesCommands = ''
10− cp -v ${pkgs.bcache-tools}/lib/udev/rules.d/*.rules $out/
11− '';
12+ services.udev.packages = [ pkgs.bcache-tools ];
1213
14+ boot.initrd.extraUdevRulesCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
15+ cp -v ${pkgs.bcache-tools}/lib/udev/rules.d/*.rules $out/
16+ '';
17+
18+ boot.initrd.services.udev = lib.mkIf config.boot.initrd.services.bcache.enable {
19+ packages = [ pkgs.bcache-tools ];
20+ binPackages = [ pkgs.bcache-tools ];
21+ };
22+ };
1323}
nixos/modules/tasks/filesystems.nix+1−1
@@ -352,7 +352,7 @@ in
352352 unitConfig.DefaultDependencies = false; # needed to prevent a cycle
353353 serviceConfig.Type = "oneshot";
354354 };
355− in listToAttrs (map formatDevice (filter (fs: fs.autoFormat) fileSystems)) // {
355+ in listToAttrs (map formatDevice (filter (fs: fs.autoFormat && !(utils.fsNeededForBoot fs)) fileSystems)) // {
356356 # Mount /sys/fs/pstore for evacuating panic logs and crashdumps from persistent storage onto the disk using systemd-pstore.
357357 # This cannot be done with the other special filesystems because the pstore module (which creates the mount point) is not loaded then.
358358 "mount-pstore" = {
nixos/modules/tasks/filesystems/btrfs.nix+3−3
@@ -66,19 +66,19 @@ in
6666 ]
6767 );
6868
69− boot.initrd.extraUtilsCommands = mkIf inInitrd
69+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
7070 ''
7171 copy_bin_and_libs ${pkgs.btrfs-progs}/bin/btrfs
7272 ln -sv btrfs $out/bin/btrfsck
7373 ln -sv btrfsck $out/bin/fsck.btrfs
7474 '';
7575
76− boot.initrd.extraUtilsCommandsTest = mkIf inInitrd
76+ boot.initrd.extraUtilsCommandsTest = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
7777 ''
7878 $out/bin/btrfs --version
7979 '';
8080
81− boot.initrd.postDeviceCommands = mkIf inInitrd
81+ boot.initrd.postDeviceCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
8282 ''
8383 btrfs device scan
8484 '';
nixos/modules/tasks/filesystems/cifs.nix+1−1
@@ -16,7 +16,7 @@ in
1616 boot.initrd.availableKernelModules = mkIf inInitrd
1717 [ "cifs" "nls_utf8" "hmac" "md4" "ecb" "des_generic" "sha256" ];
1818
19− boot.initrd.extraUtilsCommands = mkIf inInitrd
19+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
2020 ''
2121 copy_bin_and_libs ${pkgs.cifs-utils}/sbin/mount.cifs
2222 '';
nixos/modules/tasks/filesystems/ext.nix+10−4
@@ -1,14 +1,20 @@
1−{ pkgs, ... }:
1+{ config, lib, pkgs, ... }:
2+
3+let
4+
5+ inInitrd = lib.any (fs: fs == "ext2" || fs == "ext3" || fs == "ext4") config.boot.initrd.supportedFilesystems;
6+
7+in
28
39{
410 config = {
511
6− system.fsPackages = [ pkgs.e2fsprogs ];
12+ system.fsPackages = lib.mkIf (config.boot.initrd.systemd.enable -> inInitrd) [ pkgs.e2fsprogs ];
713
814 # As of kernel 4.3, there is no separate ext3 driver (they're also handled by ext4.ko)
9− boot.initrd.availableKernelModules = [ "ext2" "ext4" ];
15+ boot.initrd.availableKernelModules = lib.mkIf (config.boot.initrd.systemd.enable -> inInitrd) [ "ext2" "ext4" ];
1016
11− boot.initrd.extraUtilsCommands =
17+ boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
1218 ''
1319 # Copy e2fsck and friends.
1420 copy_bin_and_libs ${pkgs.e2fsprogs}/sbin/e2fsck
nixos/modules/tasks/filesystems/f2fs.nix+1−1
@@ -13,7 +13,7 @@ in
1313
1414 boot.initrd.availableKernelModules = mkIf inInitrd [ "f2fs" "crc32" ];
1515
16− boot.initrd.extraUtilsCommands = mkIf inInitrd ''
16+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable) ''
1717 copy_bin_and_libs ${pkgs.f2fs-tools}/sbin/fsck.f2fs
1818 ${optionalString (any (fs: fs.autoResize) fileSystems) ''
1919 # We need f2fs-tools' tools to resize filesystems
nixos/modules/tasks/filesystems/jfs.nix+1−1
@@ -12,7 +12,7 @@ in
1212
1313 boot.initrd.kernelModules = mkIf inInitrd [ "jfs" ];
1414
15− boot.initrd.extraUtilsCommands = mkIf inInitrd ''
15+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !boot.initrd.systemd.enable) ''
1616 copy_bin_and_libs ${pkgs.jfsutils}/sbin/fsck.jfs
1717 '';
1818 };
nixos/modules/tasks/filesystems/reiserfs.nix+1−1
@@ -15,7 +15,7 @@ in
1515
1616 boot.initrd.kernelModules = mkIf inInitrd [ "reiserfs" ];
1717
18− boot.initrd.extraUtilsCommands = mkIf inInitrd
18+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
1919 ''
2020 copy_bin_and_libs ${pkgs.reiserfsprogs}/sbin/reiserfsck
2121 ln -s reiserfsck $out/bin/fsck.reiserfs
nixos/modules/tasks/filesystems/unionfs-fuse.nix+13−2
@@ -6,7 +6,7 @@
66 (lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.initrd.supportedFilesystems) {
77 boot.initrd.kernelModules = [ "fuse" ];
88
9− boot.initrd.extraUtilsCommands = ''
9+ boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
1010 copy_bin_and_libs ${pkgs.fuse}/sbin/mount.fuse
1111 copy_bin_and_libs ${pkgs.unionfs-fuse}/bin/unionfs
1212 substitute ${pkgs.unionfs-fuse}/sbin/mount.unionfs-fuse $out/bin/mount.unionfs-fuse \
@@ -16,12 +16,23 @@
1616 chmod +x $out/bin/mount.unionfs-fuse
1717 '';
1818
19− boot.initrd.postDeviceCommands = ''
19+ boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
2020 # Hacky!!! fuse hard-codes the path to mount
2121 mkdir -p /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.util-linux.name}-bin/bin
2222 ln -s $(which mount) /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.util-linux.name}-bin/bin
2323 ln -s $(which umount) /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.util-linux.name}-bin/bin
2424 '';
25+
26+ boot.initrd.systemd.extraBin = {
27+ "mount.fuse" = "${pkgs.fuse}/bin/mount.fuse";
28+ "unionfs" = "${pkgs.unionfs-fuse}/bin/unionfs";
29+ "mount.unionfs-fuse" = pkgs.runCommand "mount.unionfs-fuse" {} ''
30+ substitute ${pkgs.unionfs-fuse}/sbin/mount.unionfs-fuse $out \
31+ --replace '${pkgs.bash}/bin/bash' /bin/sh \
32+ --replace '${pkgs.fuse}/sbin' /bin \
33+ --replace '${pkgs.unionfs-fuse}/bin' /bin
34+ '';
35+ };
2536 })
2637
2738 (lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.supportedFilesystems) {
nixos/modules/tasks/filesystems/vfat.nix+1−1
@@ -15,7 +15,7 @@ in
1515
1616 boot.initrd.kernelModules = mkIf inInitrd [ "vfat" "nls_cp437" "nls_iso8859-1" ];
1717
18− boot.initrd.extraUtilsCommands = mkIf inInitrd
18+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
1919 ''
2020 copy_bin_and_libs ${pkgs.dosfstools}/sbin/dosfsck
2121 ln -sv dosfsck $out/bin/fsck.vfat
nixos/modules/tasks/filesystems/xfs.nix+2−2
@@ -15,14 +15,14 @@ in
1515
1616 boot.initrd.availableKernelModules = mkIf inInitrd [ "xfs" "crc32c" ];
1717
18− boot.initrd.extraUtilsCommands = mkIf inInitrd
18+ boot.initrd.extraUtilsCommands = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
1919 ''
2020 copy_bin_and_libs ${pkgs.xfsprogs.bin}/bin/fsck.xfs
2121 copy_bin_and_libs ${pkgs.xfsprogs.bin}/bin/xfs_repair
2222 '';
2323
2424 # Trick just to set 'sh' after the extraUtils nuke-refs.
25− boot.initrd.extraUtilsCommandsTest = mkIf inInitrd
25+ boot.initrd.extraUtilsCommandsTest = mkIf (inInitrd && !config.boot.initrd.systemd.enable)
2626 ''
2727 sed -i -e 's,^#!.*,#!'$out/bin/sh, $out/bin/fsck.xfs
2828 '';
nixos/modules/tasks/filesystems/zfs.nix+9−33
@@ -466,6 +466,11 @@ in
466466 '') rootPools));
467467 };
468468
469+ systemd.shutdownRamfs.contents."/etc/systemd/system-shutdown/zpool".source = pkgs.writeShellScript "zpool-sync-shutdown" ''
470+ exec ${cfgZfs.package}/bin/zpool sync
471+ '';
472+ systemd.shutdownRamfs.storePaths = ["${cfgZfs.package}/bin/zpool"];
473+
469474 # TODO FIXME See https://github.com/NixOS/nixpkgs/pull/99386#issuecomment-798813567. To not break people's bootloader and as probably not everybody would read release notes that thoroughly add inSystem.
470475 boot.loader.grub = mkIf (inInitrd || inSystem) {
471476 zfsSupport = true;
@@ -642,41 +647,14 @@ in
642647 };
643648
644649 scriptArgs = "%i";
645− path = [ pkgs.gawk cfgZfs.package ];
646−
647− # ZFS has no way of enumerating just devices in a pool in a way
648− # that 'zpool online -e' supports. Thus, we've implemented a
649− # bit of a strange approach of highlighting just devices.
650− # See: https://github.com/openzfs/zfs/issues/12505
651− script = let
652− # This UUID has been chosen at random and is to provide a
653− # collision-proof, predictable token to search for
654− magicIdentifier = "NIXOS-ZFS-ZPOOL-DEVICE-IDENTIFIER-37108bec-aff6-4b58-9e5e-53c7c9766f05";
655− zpoolScripts = pkgs.writeShellScriptBin "device-highlighter" ''
656− echo "${magicIdentifier}"
657− '';
658− in ''
650+ path = [ cfgZfs.package ];
651+
652+ script = ''
659653 pool=$1
660654
661655 echo "Expanding all devices for $pool."
662656
663− # Put our device-highlighter script it to the PATH
664− export ZPOOL_SCRIPTS_PATH=${zpoolScripts}/bin
665−
666− # Enable running our precisely specified zpool script as root
667− export ZPOOL_SCRIPTS_AS_ROOT=1
668−
669− devices() (
670− zpool status -c device-highlighter "$pool" \
671− | awk '($2 == "ONLINE" && $6 == "${magicIdentifier}") { print $1; }'
672− )
673−
674− for device in $(devices); do
675− echo "Attempting to expand $device of $pool..."
676− if ! zpool online -e "$pool" "$device"; then
677− echo "Failed to expand '$device' of '$pool'."
678− fi
679− done
657+ ${pkgs.zpool-auto-expand-partitions}/bin/zpool_part_disks --automatically-grow "$pool"
680658 '';
681659 };
682660
@@ -701,8 +679,6 @@ in
701679 RemainAfterExit = true;
702680 };
703681
704− path = [ pkgs.gawk cfgZfs.package ];
705−
706682 script = ''
707683 for pool in ${poolListProvider}; do
708684 systemctl start --no-block "zpool-expand@$pool"
nixos/modules/tasks/lvm.nix+55−6
@@ -7,17 +7,22 @@ in {
77 options.services.lvm = {
88 package = mkOption {
99 type = types.package;
10− default = if cfg.dmeventd.enable then pkgs.lvm2_dmeventd else pkgs.lvm2;
10+ default = pkgs.lvm2;
1111 internal = true;
1212 defaultText = literalExpression "pkgs.lvm2";
1313 description = ''
1414 This option allows you to override the LVM package that's used on the system
1515 (udev rules, tmpfiles, systemd services).
16− Defaults to pkgs.lvm2, or pkgs.lvm2_dmeventd if dmeventd is enabled.
16+ Defaults to pkgs.lvm2, pkgs.lvm2_dmeventd if dmeventd or pkgs.lvm2_vdo if vdo is enabled.
1717 '';
1818 };
1919 dmeventd.enable = mkEnableOption "the LVM dmevent daemon";
2020 boot.thin.enable = mkEnableOption "support for booting from ThinLVs";
21+ boot.vdo.enable = mkEnableOption "support for booting from VDOLVs";
22+ };
23+
24+ options.boot.initrd.services.lvm.enable = (mkEnableOption "enable booting from LVM2 in the initrd") // {
25+ visible = false;
2126 };
2227
2328 config = mkMerge [
@@ -30,8 +35,13 @@ in {
3035 environment.systemPackages = [ cfg.package ];
3136 systemd.packages = [ cfg.package ];
3237
33− # TODO: update once https://github.com/NixOS/nixpkgs/pull/93006 was merged
3438 services.udev.packages = [ cfg.package.out ];
39+
40+ # We need lvm2 for the device-mapper rules
41+ boot.initrd.services.udev.packages = lib.mkIf config.boot.initrd.services.lvm.enable [ cfg.package ];
42+ # The device-mapper rules want to call tools from lvm2
43+ boot.initrd.systemd.initrdBin = lib.mkIf config.boot.initrd.services.lvm.enable [ cfg.package ];
44+ boot.initrd.services.udev.binPackages = lib.mkIf config.boot.initrd.services.lvm.enable [ cfg.package ];
3545 })
3646 (mkIf cfg.dmeventd.enable {
3747 systemd.sockets."dm-event".wantedBy = [ "sockets.target" ];
@@ -40,18 +50,21 @@ in {
4050 environment.etc."lvm/lvm.conf".text = ''
4151 dmeventd/executable = "${cfg.package}/bin/dmeventd"
4252 '';
53+ services.lvm.package = mkDefault pkgs.lvm2_dmeventd;
4354 })
4455 (mkIf cfg.boot.thin.enable {
4556 boot.initrd = {
4657 kernelModules = [ "dm-snapshot" "dm-thin-pool" ];
4758
48− extraUtilsCommands = ''
59+ systemd.initrdBin = lib.mkIf config.boot.initrd.services.lvm.enable [ pkgs.thin-provisioning-tools ];
60+
61+ extraUtilsCommands = mkIf (!config.boot.initrd.systemd.enable) ''
4962 for BIN in ${pkgs.thin-provisioning-tools}/bin/*; do
5063 copy_bin_and_libs $BIN
5164 done
5265 '';
5366
54− extraUtilsCommandsTest = ''
67+ extraUtilsCommandsTest = mkIf (!config.boot.initrd.systemd.enable) ''
5568 ls ${pkgs.thin-provisioning-tools}/bin/ | grep -v pdata_tools | while read BIN; do
5669 $out/bin/$(basename $BIN) --help > /dev/null
5770 done
@@ -61,9 +74,45 @@ in {
6174 environment.etc."lvm/lvm.conf".text = concatMapStringsSep "\n"
6275 (bin: "global/${bin}_executable = ${pkgs.thin-provisioning-tools}/bin/${bin}")
6376 [ "thin_check" "thin_dump" "thin_repair" "cache_check" "cache_dump" "cache_repair" ];
77+
78+ environment.systemPackages = [ pkgs.thin-provisioning-tools ];
79+ })
80+ (mkIf cfg.boot.vdo.enable {
81+ boot = {
82+ initrd = {
83+ kernelModules = [ "kvdo" ];
84+
85+ systemd.initrdBin = lib.mkIf config.boot.initrd.services.lvm.enable [ pkgs.vdo ];
86+
87+ extraUtilsCommands = mkIf (!config.boot.initrd.systemd.enable)''
88+ ls ${pkgs.vdo}/bin/ | grep -v adaptLVMVDO | while read BIN; do
89+ copy_bin_and_libs ${pkgs.vdo}/bin/$BIN
90+ done
91+ '';
92+
93+ extraUtilsCommandsTest = mkIf (!config.boot.initrd.systemd.enable)''
94+ ls ${pkgs.vdo}/bin/ | grep -v adaptLVMVDO | while read BIN; do
95+ $out/bin/$(basename $BIN) --help > /dev/null
96+ done
97+ '';
98+ };
99+ extraModulePackages = [ config.boot.kernelPackages.kvdo ];
100+ };
101+
102+ services.lvm.package = mkOverride 999 pkgs.lvm2_vdo; # this overrides mkDefault
103+
104+ environment.systemPackages = [ pkgs.vdo ];
64105 })
65106 (mkIf (cfg.dmeventd.enable || cfg.boot.thin.enable) {
66− boot.initrd.preLVMCommands = ''
107+ boot.initrd.systemd.contents."/etc/lvm/lvm.conf".text = optionalString (config.boot.initrd.services.lvm.enable && cfg.boot.thin.enable) (concatMapStringsSep "\n"
108+ (bin: "global/${bin}_executable = /bin/${bin}")
109+ [ "thin_check" "thin_dump" "thin_repair" "cache_check" "cache_dump" "cache_repair" ]
110+ ) + "\n" + optionalString cfg.dmeventd.enable ''
111+ dmeventd/executable = /bin/false
112+ activation/monitoring = 0
113+ '';
114+
115+ boot.initrd.preLVMCommands = mkIf (!config.boot.initrd.systemd.enable) ''
67116 mkdir -p /etc/lvm
68117 cat << EOF >> /etc/lvm/lvm.conf
69118 ${optionalString cfg.boot.thin.enable (
nixos/modules/tasks/network-interfaces.nix+11−10
@@ -403,6 +403,15 @@ let
403403 </itemizedlist>
404404 '';
405405
406+ hostidFile = pkgs.runCommand "gen-hostid" { preferLocalBuild = true; } ''
407+ hi="${cfg.hostId}"
408+ ${if pkgs.stdenv.isBigEndian then ''
409+ echo -ne "\x''${hi:0:2}\x''${hi:2:2}\x''${hi:4:2}\x''${hi:6:2}" > $out
410+ '' else ''
411+ echo -ne "\x''${hi:6:2}\x''${hi:4:2}\x''${hi:2:2}\x''${hi:0:2}" > $out
412+ ''}
413+ '';
414+
406415in
407416
408417{
@@ -1383,16 +1392,8 @@ in
13831392 domainname "${cfg.domain}"
13841393 '';
13851394
1386− environment.etc.hostid = mkIf (cfg.hostId != null)
1387− { source = pkgs.runCommand "gen-hostid" { preferLocalBuild = true; } ''
1388− hi="${cfg.hostId}"
1389− ${if pkgs.stdenv.isBigEndian then ''
1390− echo -ne "\x''${hi:0:2}\x''${hi:2:2}\x''${hi:4:2}\x''${hi:6:2}" > $out
1391− '' else ''
1392− echo -ne "\x''${hi:6:2}\x''${hi:4:2}\x''${hi:2:2}\x''${hi:0:2}" > $out
1393− ''}
1394− '';
1395− };
1395+ environment.etc.hostid = mkIf (cfg.hostId != null) { source = hostidFile; };
1396+ boot.initrd.systemd.contents."/etc/hostid" = mkIf (cfg.hostId != null) { source = hostidFile; };
13961397
13971398 # static hostname configuration needed for hostnamectl and the
13981399 # org.freedesktop.hostname1 dbus service (both provided by systemd)
nixos/modules/tasks/swraid.nix+35−9
@@ -1,17 +1,43 @@
1−{ pkgs, ... }:
1+{ config, pkgs, lib, ... }: let
22
3−{
3+ cfg = config.boot.initrd.services.swraid;
44
5− environment.systemPackages = [ pkgs.mdadm ];
5+in {
66
7− services.udev.packages = [ pkgs.mdadm ];
7+ options.boot.initrd.services.swraid = {
8+ enable = (lib.mkEnableOption "swraid support using mdadm") // {
9+ visible = false; # only has effect when the new stage 1 is in place
10+ };
811
9− systemd.packages = [ pkgs.mdadm ];
12+ mdadmConf = lib.mkOption {
13+ description = "Contents of <filename>/etc/mdadm.conf</filename> in initrd.";
14+ type = lib.types.lines;
15+ default = "";
16+ };
17+ };
1018
11− boot.initrd.availableKernelModules = [ "md_mod" "raid0" "raid1" "raid10" "raid456" ];
19+ config = {
20+ environment.systemPackages = [ pkgs.mdadm ];
1221
13− boot.initrd.extraUdevRulesCommands = ''
14− cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/
15− '';
22+ services.udev.packages = [ pkgs.mdadm ];
1623
24+ systemd.packages = [ pkgs.mdadm ];
25+
26+ boot.initrd.availableKernelModules = lib.mkIf (config.boot.initrd.systemd.enable -> cfg.enable) [ "md_mod" "raid0" "raid1" "raid10" "raid456" ];
27+
28+ boot.initrd.extraUdevRulesCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
29+ cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/
30+ '';
31+
32+ boot.initrd.systemd = lib.mkIf cfg.enable {
33+ contents."/etc/mdadm.conf" = lib.mkIf (cfg.mdadmConf != "") {
34+ text = cfg.mdadmConf;
35+ };
36+
37+ packages = [ pkgs.mdadm ];
38+ initrdBin = [ pkgs.mdadm ];
39+ };
40+
41+ boot.initrd.services.udev.packages = lib.mkIf cfg.enable [ pkgs.mdadm ];
42+ };
1743}
nixos/modules/testing/test-instrumentation.nix+19−26
@@ -65,33 +65,26 @@ in
6565 };
6666 };
6767
68− boot.initrd.preDeviceCommands =
69− ''
70− echo 600 > /proc/sys/kernel/hung_task_timeout_secs
71− '';
72−
73− boot.initrd.postDeviceCommands =
74− ''
75− # Using acpi_pm as a clock source causes the guest clock to
76− # slow down under high host load. This is usually a bad
77− # thing, but for VM tests it should provide a bit more
78− # determinism (e.g. if the VM runs at lower speed, then
79− # timeouts in the VM should also be delayed).
80− echo acpi_pm > /sys/devices/system/clocksource/clocksource0/current_clocksource
81− '';
82−
83− boot.postBootCommands =
84− ''
85− # Panic on out-of-memory conditions rather than letting the
86− # OOM killer randomly get rid of processes, since this leads
87− # to failures that are hard to diagnose.
88− echo 2 > /proc/sys/vm/panic_on_oom
89− '';
68+ boot.kernel.sysctl = {
69+ "kernel.hung_task_timeout_secs" = 600;
70+ # Panic on out-of-memory conditions rather than letting the
71+ # OOM killer randomly get rid of processes, since this leads
72+ # to failures that are hard to diagnose.
73+ "vm.panic_on_oom" = lib.mkDefault 2;
74+ };
9075
91− # Panic if an error occurs in stage 1 (rather than waiting for
92− # user intervention).
93− boot.kernelParams =
94− [ "console=${qemu-common.qemuSerialDevice}" "panic=1" "boot.panic_on_fail" ];
76+ boot.kernelParams = [
77+ "console=${qemu-common.qemuSerialDevice}"
78+ # Panic if an error occurs in stage 1 (rather than waiting for
79+ # user intervention).
80+ "panic=1" "boot.panic_on_fail"
81+ # Using acpi_pm as a clock source causes the guest clock to
82+ # slow down under high host load. This is usually a bad
83+ # thing, but for VM tests it should provide a bit more
84+ # determinism (e.g. if the VM runs at lower speed, then
85+ # timeouts in the VM should also be delayed).
86+ "clock=acpi_pm"
87+ ];
9588
9689 # `xwininfo' is used by the test driver to query open windows.
9790 environment.systemPackages = [ pkgs.xorg.xwininfo ];
nixos/modules/virtualisation/azure-agent.nix+5−9
@@ -146,15 +146,11 @@ in
146146
147147 services.logrotate = {
148148 enable = true;
149− extraConfig = ''
150− /var/log/waagent.log {
151− compress
152− monthly
153− rotate 6
154− notifempty
155− missingok
156− }
157− '';
149+ settings."/var/log/waagent.log" = {
150+ compress = true;
151+ frequency = "monthly";
152+ rotate = 6;
153+ };
158154 };
159155
160156 systemd.targets.provisioned = {
nixos/modules/virtualisation/azure-common.nix+5−1
@@ -21,7 +21,11 @@ with lib;
2121 # way to select them anyway.
2222 boot.loader.grub.configurationLimit = 0;
2323
24− fileSystems."/".device = "/dev/disk/by-label/nixos";
24+ fileSystems."/" = {
25+ device = "/dev/disk/by-label/nixos";
26+ fsType = "ext4";
27+ autoResize = true;
28+ };
2529
2630 # Allow root logins only using the SSH key that the user specified
2731 # at instance creation time, ping client connections to avoid timeouts
nixos/modules/virtualisation/libvirtd.nix+4
@@ -344,6 +344,10 @@ in
344344 restartIfChanged = false;
345345 };
346346
347+ systemd.services.virtchd = {
348+ path = [ pkgs.cloud-hypervisor ];
349+ };
350+
347351 systemd.services.libvirt-guests = {
348352 wantedBy = [ "multi-user.target" ];
349353 path = with pkgs; [ coreutils gawk cfg.package ];
nixos/modules/virtualisation/nixos-containers.nix+26−11
@@ -4,6 +4,11 @@ with lib;
44
55let
66
7+ configurationPrefix = optionalString (versionAtLeast config.system.stateVersion "22.05") "nixos-";
8+ configurationDirectoryName = "${configurationPrefix}containers";
9+ configurationDirectory = "/etc/${configurationDirectoryName}";
10+ stateDirectory = "/var/lib/${configurationPrefix}containers";
11+
712 # The container's init script, a small wrapper around the regular
813 # NixOS stage-2 init script.
914 containerInit = (cfg:
@@ -77,7 +82,7 @@ let
7782 startScript = cfg:
7883 ''
7984 mkdir -p -m 0755 "$root/etc" "$root/var/lib"
80− mkdir -p -m 0700 "$root/var/lib/private" "$root/root" /run/containers
85+ mkdir -p -m 0700 "$root/var/lib/private" "$root/root" /run/nixos-containers
8186 if ! [ -e "$root/etc/os-release" ]; then
8287 touch "$root/etc/os-release"
8388 fi
@@ -249,11 +254,11 @@ let
249254
250255 SyslogIdentifier = "container %i";
251256
252− EnvironmentFile = "-/etc/containers/%i.conf";
257+ EnvironmentFile = "-${configurationDirectory}/%i.conf";
253258
254259 Type = "notify";
255260
256− RuntimeDirectory = lib.optional cfg.ephemeral "containers/%i";
261+ RuntimeDirectory = lib.optional cfg.ephemeral "${configurationDirectoryName}/%i";
257262
258263 # Note that on reboot, systemd-nspawn returns 133, so this
259264 # unit will be restarted. On poweroff, it returns 0, so the
@@ -737,15 +742,21 @@ in
737742
738743 config = mkIf (config.boot.enableContainers) (let
739744
745+ warnings = flatten [
746+ (optional (config.virtualisation.containers.enable && versionOlder config.system.stateVersion "22.05") ''
747+ Enabling both boot.enableContainers & virtualisation.containers on system.stateVersion < 22.05 is unsupported.
748+ '')
749+ ];
750+
740751 unit = {
741752 description = "Container '%i'";
742753
743− unitConfig.RequiresMountsFor = "/var/lib/containers/%i";
754+ unitConfig.RequiresMountsFor = "${stateDirectory}/%i";
744755
745756 path = [ pkgs.iproute2 ];
746757
747758 environment = {
748− root = "/var/lib/containers/%i";
759+ root = "${stateDirectory}/%i";
749760 INSTANCE = "%i";
750761 };
751762
@@ -782,8 +793,8 @@ in
782793 script = startScript containerConfig;
783794 postStart = postStartScript containerConfig;
784795 serviceConfig = serviceDirectives containerConfig;
785− unitConfig.RequiresMountsFor = lib.optional (!containerConfig.ephemeral) "/var/lib/containers/%i";
786− environment.root = if containerConfig.ephemeral then "/run/containers/%i" else "/var/lib/containers/%i";
796+ unitConfig.RequiresMountsFor = lib.optional (!containerConfig.ephemeral) "${stateDirectory}/%i";
797+ environment.root = if containerConfig.ephemeral then "/run/nixos-containers/%i" else "${stateDirectory}/%i";
787798 } // (
788799 if containerConfig.autoStart then
789800 {
@@ -792,7 +803,7 @@ in
792803 after = [ "network.target" ];
793804 restartTriggers = [
794805 containerConfig.path
795− config.environment.etc."containers/${name}.conf".source
806+ config.environment.etc."${configurationDirectoryName}/${name}.conf".source
796807 ];
797808 restartIfChanged = true;
798809 }
@@ -800,12 +811,12 @@ in
800811 )) config.containers)
801812 ));
802813
803− # Generate a configuration file in /etc/containers for each
814+ # Generate a configuration file in /etc/nixos-containers for each
804815 # container so that container@.target can get the container
805816 # configuration.
806817 environment.etc =
807818 let mkPortStr = p: p.protocol + ":" + (toString p.hostPort) + ":" + (if p.containerPort == null then toString p.hostPort else toString p.containerPort);
808− in mapAttrs' (name: cfg: nameValuePair "containers/${name}.conf"
819+ in mapAttrs' (name: cfg: nameValuePair "${configurationDirectoryName}/${name}.conf"
809820 { text =
810821 ''
811822 SYSTEM_PATH=${cfg.path}
@@ -854,7 +865,11 @@ in
854865 ENV{INTERFACE}=="v[eb]-*", ENV{NM_UNMANAGED}="1"
855866 '';
856867
857− environment.systemPackages = [ pkgs.nixos-container ];
868+ environment.systemPackages = [
869+ (pkgs.nixos-container.override {
870+ inherit stateDirectory configurationDirectory;
871+ })
872+ ];
858873
859874 boot.kernelModules = [
860875 "bridge"
nixos/modules/virtualisation/oci-containers.nix+1−5
@@ -338,11 +338,7 @@ in {
338338
339339 backend = mkOption {
340340 type = types.enum [ "podman" "docker" ];
341− default =
342− # TODO: Once https://github.com/NixOS/nixpkgs/issues/77925 is resolved default to podman
343− # if versionAtLeast config.system.stateVersion "20.09" then "podman"
344− # else "docker";
345− "docker";
341+ default = if versionAtLeast config.system.stateVersion "22.05" then "podman" else "docker";
346342 description = "The underlying Docker implementation to use.";
347343 };
348344
nixos/modules/virtualisation/openstack-config.nix+39−7
@@ -1,8 +1,11 @@
1−{ pkgs, lib, ... }:
1+{ config, pkgs, lib, ... }:
22
3−with lib;
3+# image metadata:
4+# hw_firmware_type=uefi
45
56let
7+ inherit (lib) mkIf mkDefault;
8+ cfg = config.openstack;
69 metadataFetcher = import ./openstack-metadata-fetcher.nix {
710 targetRoot = "/";
811 wgetExtraOptions = "--retry-connrefused";
@@ -11,23 +14,47 @@ in
1114{
1215 imports = [
1316 ../profiles/qemu-guest.nix
17+
18+ # Note: While we do use the headless profile, we also explicitly
19+ # turn on the serial console on tty1 below.
20+ # Note that I could not find any documentation indicating tty1 was
21+ # the correct choice. I picked tty1 because that is what one
22+ # particular host was using.
1423 ../profiles/headless.nix
24+
1525 # The Openstack Metadata service exposes data on an EC2 API also.
1626 ./ec2-data.nix
1727 ./amazon-init.nix
1828 ];
1929
2030 config = {
21− fileSystems."/" = {
31+ fileSystems."/" = mkIf (!cfg.zfs.enable) {
2232 device = "/dev/disk/by-label/nixos";
2333 fsType = "ext4";
2434 autoResize = true;
2535 };
2636
37+ fileSystems."/boot" = mkIf (cfg.efi || cfg.zfs.enable) {
38+ # The ZFS image uses a partition labeled ESP whether or not we're
39+ # booting with EFI.
40+ device = "/dev/disk/by-label/ESP";
41+ fsType = "vfat";
42+ };
43+
2744 boot.growPartition = true;
28− boot.kernelParams = [ "console=ttyS0" ];
29− boot.loader.grub.device = "/dev/vda";
30− boot.loader.timeout = 0;
45+ boot.kernelParams = [ "console=tty1" ];
46+ boot.loader.grub.device = if (!cfg.efi) then "/dev/vda" else "nodev";
47+ boot.loader.grub.efiSupport = cfg.efi;
48+ boot.loader.grub.efiInstallAsRemovable = cfg.efi;
49+ boot.loader.timeout = 1;
50+ boot.loader.grub.extraConfig = ''
51+ serial --unit=1 --speed=115200 --word=8 --parity=no --stop=1
52+ terminal_output console serial
53+ terminal_input console serial
54+ '';
55+
56+ services.zfs.expandOnBoot = mkIf cfg.zfs.enable (lib.mkDefault "all");
57+ boot.zfs.devNodes = mkIf cfg.zfs.enable "/dev/";
3158
3259 # Allow root logins
3360 services.openssh = {
@@ -36,6 +63,11 @@ in
3663 passwordAuthentication = mkDefault false;
3764 };
3865
66+ users.users.root.initialPassword = "foobar";
67+
68+ # Enable the serial console on tty1
69+ systemd.services."serial-getty@tty1".enable = true;
70+
3971 # Force getting the hostname from Openstack metadata.
4072 networking.hostName = mkDefault "";
4173
@@ -43,7 +75,7 @@ in
4375 path = [ pkgs.wget ];
4476 description = "Fetch Metadata on startup";
4577 wantedBy = [ "multi-user.target" ];
46− before = [ "apply-ec2-data.service" "amazon-init.service"];
78+ before = [ "apply-ec2-data.service" "amazon-init.service" ];
4779 wants = [ "network-online.target" ];
4880 after = [ "network-online.target" ];
4981 script = metadataFetcher;
nixos/modules/virtualisation/openstack-metadata-fetcher.nix+3−3
@@ -14,9 +14,9 @@
1414 wget ${wgetExtraOptions} "$@"
1515 }
1616
17− wget_imds -O "$metaDir/ami-manifest-path" http://169.254.169.254/1.0/meta-data/ami-manifest-path
17+ wget_imds -O "$metaDir/ami-manifest-path" http://169.254.169.254/1.0/meta-data/ami-manifest-path || true
1818 # When no user-data is provided, the OpenStack metadata server doesn't expose the user-data route.
1919 (umask 077 && wget_imds -O "$metaDir/user-data" http://169.254.169.254/1.0/user-data || rm -f "$metaDir/user-data")
20− wget_imds -O "$metaDir/hostname" http://169.254.169.254/1.0/meta-data/hostname
21− wget_imds -O "$metaDir/public-keys-0-openssh-key" http://169.254.169.254/1.0/meta-data/public-keys/0/openssh-key
20+ wget_imds -O "$metaDir/hostname" http://169.254.169.254/1.0/meta-data/hostname || true
21+ wget_imds -O "$metaDir/public-keys-0-openssh-key" http://169.254.169.254/1.0/meta-data/public-keys/0/openssh-key || true
2222''
nixos/modules/virtualisation/openstack-options.nixnew file+71
@@ -0,0 +1,71 @@
1+{ config, lib, pkgs, ... }:
2+let
3+ inherit (lib) literalExpression types;
4+in
5+{
6+ options = {
7+ openstack = {
8+ zfs = {
9+ enable = lib.mkOption {
10+ default = false;
11+ internal = true;
12+ description = ''
13+ Whether the OpenStack instance uses a ZFS root.
14+ '';
15+ };
16+
17+ datasets = lib.mkOption {
18+ description = ''
19+ Datasets to create under the `tank` and `boot` zpools.
20+
21+ **NOTE:** This option is used only at image creation time, and
22+ does not attempt to declaratively create or manage datasets
23+ on an existing system.
24+ '';
25+
26+ default = { };
27+
28+ type = types.attrsOf (types.submodule {
29+ options = {
30+ mount = lib.mkOption {
31+ description = "Where to mount this dataset.";
32+ type = types.nullOr types.string;
33+ default = null;
34+ };
35+
36+ properties = lib.mkOption {
37+ description = "Properties to set on this dataset.";
38+ type = types.attrsOf types.string;
39+ default = { };
40+ };
41+ };
42+ });
43+ };
44+ };
45+
46+ efi = lib.mkOption {
47+ default = pkgs.stdenv.hostPlatform.isAarch64;
48+ defaultText = literalExpression "pkgs.stdenv.hostPlatform.isAarch64";
49+ internal = true;
50+ description = ''
51+ Whether the instance is using EFI.
52+ '';
53+ };
54+ };
55+ };
56+
57+ config = lib.mkIf config.openstack.zfs.enable {
58+ networking.hostId = lib.mkDefault "00000000";
59+
60+ fileSystems =
61+ let
62+ mountable = lib.filterAttrs (_: value: ((value.mount or null) != null)) config.openstack.zfs.datasets;
63+ in
64+ lib.mapAttrs'
65+ (dataset: opts: lib.nameValuePair opts.mount {
66+ device = dataset;
67+ fsType = "zfs";
68+ })
69+ mountable;
70+ };
71+}
nixos/modules/virtualisation/podman/default.nix+4−1
@@ -6,7 +6,10 @@ let
66
77 inherit (lib) mkOption types;
88
9− podmanPackage = (pkgs.podman.override { inherit (cfg) extraPackages; });
9+ podmanPackage = (pkgs.podman.override {
10+ extraPackages = cfg.extraPackages
11+ ++ lib.optional (builtins.elem "zfs" config.boot.supportedFilesystems) config.boot.zfs.package;
12+ });
1013
1114 # Provides a fake "docker" binary mapping to podman
1215 dockerCompat = pkgs.runCommand "${podmanPackage.pname}-docker-compat-${podmanPackage.version}" {
nixos/modules/virtualisation/qemu-vm.nix+38−5
@@ -754,13 +754,13 @@ in
754754 );
755755 boot.loader.grub.gfxmodeBios = with cfg.resolution; "${toString x}x${toString y}";
756756
757− boot.initrd.extraUtilsCommands =
757+ boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
758758 ''
759759 # We need mke2fs in the initrd.
760760 copy_bin_and_libs ${pkgs.e2fsprogs}/bin/mke2fs
761761 '';
762762
763− boot.initrd.postDeviceCommands =
763+ boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
764764 ''
765765 # If the disk image appears to be empty, run mke2fs to
766766 # initialise.
@@ -770,7 +770,7 @@ in
770770 fi
771771 '';
772772
773− boot.initrd.postMountCommands =
773+ boot.initrd.postMountCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
774774 ''
775775 # Mark this as a NixOS machine.
776776 mkdir -p $targetRoot/etc
@@ -789,6 +789,11 @@ in
789789 ''}
790790 '';
791791
792+ systemd.tmpfiles.rules = lib.mkIf config.boot.initrd.systemd.enable [
793+ "f /etc/NIXOS 0644 root root -"
794+ "d /boot 0644 root root -"
795+ ];
796+
792797 # After booting, register the closure of the paths in
793798 # `virtualisation.additionalPaths' in the Nix database in the VM. This
794799 # allows Nix operations to work in the VM. The path to the
@@ -853,8 +858,12 @@ in
853858 (mkIf (pkgs.stdenv.isAarch32 || pkgs.stdenv.isAarch64) [
854859 "-device virtio-gpu-pci" "-device usb-ehci,id=usb0" "-device usb-kbd" "-device usb-tablet"
855860 ])
856− (mkIf (!cfg.useBootLoader) [
857− "-kernel ${config.system.build.toplevel}/kernel"
861+ (let
862+ alphaNumericChars = lowerChars ++ upperChars ++ (map toString (range 0 9));
863+ # Replace all non-alphanumeric characters with underscores
864+ sanitizeShellIdent = s: concatMapStrings (c: if builtins.elem c alphaNumericChars then c else "_") (stringToCharacters s);
865+ in mkIf (!cfg.useBootLoader) [
866+ "-kernel \${NIXPKGS_QEMU_KERNEL_${sanitizeShellIdent config.system.name}:-${config.system.build.toplevel}/kernel}"
858867 "-initrd ${config.system.build.toplevel}/initrd"
859868 ''-append "$(cat ${config.system.build.toplevel}/kernel-params) init=${config.system.build.toplevel}/init regInfo=${regInfo}/registration ${consoles} $QEMU_KERNEL_PARAMS"''
860869 ])
@@ -923,6 +932,8 @@ in
923932 mkVMOverride (cfg.fileSystems //
924933 {
925934 "/".device = cfg.bootDevice;
935+ "/".fsType = "ext4";
936+ "/".autoFormat = true;
926937
927938 "/tmp" = mkIf config.boot.tmpOnTmpfs
928939 { device = "tmpfs";
@@ -953,6 +964,28 @@ in
953964 };
954965 } // lib.mapAttrs' mkSharedDir cfg.sharedDirectories);
955966
967+ boot.initrd.systemd = lib.mkIf (config.boot.initrd.systemd.enable && cfg.writableStore) {
968+ mounts = [{
969+ where = "/sysroot/nix/store";
970+ what = "overlay";
971+ type = "overlay";
972+ options = "lowerdir=/sysroot/nix/.ro-store,upperdir=/sysroot/nix/.rw-store/store,workdir=/sysroot/nix/.rw-store/work";
973+ wantedBy = ["local-fs.target"];
974+ before = ["local-fs.target"];
975+ requires = ["sysroot-nix-.ro\\x2dstore.mount" "sysroot-nix-.rw\\x2dstore.mount" "rw-store.service"];
976+ after = ["sysroot-nix-.ro\\x2dstore.mount" "sysroot-nix-.rw\\x2dstore.mount" "rw-store.service"];
977+ unitConfig.IgnoreOnIsolate = true;
978+ }];
979+ services.rw-store = {
980+ after = ["sysroot-nix-.rw\\x2dstore.mount"];
981+ unitConfig.DefaultDependencies = false;
982+ serviceConfig = {
983+ Type = "oneshot";
984+ ExecStart = "/bin/mkdir -p 0755 /sysroot/nix/.rw-store/store /sysroot/nix/.rw-store/work /sysroot/nix/store";
985+ };
986+ };
987+ };
988+
956989 swapDevices = mkVMOverride [ ];
957990 boot.initrd.luks.devices = mkVMOverride {};
958991
nixos/modules/virtualisation/vmware-host.nixnew file+166
@@ -0,0 +1,166 @@
1+{ config, pkgs, lib, ... }:
2+
3+let
4+ cfg = config.virtualisation.vmware.host;
5+ wrapperDir = "/run/vmware/bin"; # Perfectly fits as /usr/local/bin
6+ parentWrapperDir = dirOf wrapperDir;
7+ vmwareWrappers = # Needed as hardcoded paths workaround
8+ let mkVmwareSymlink =
9+ program:
10+ ''
11+ ln -s "${config.security.wrapperDir}/${program}" $wrapperDir/${program}
12+ '';
13+ in
14+ [
15+ (mkVmwareSymlink "pkexec")
16+ (mkVmwareSymlink "mount")
17+ (mkVmwareSymlink "umount")
18+ ];
19+in
20+{
21+ options = with lib; {
22+ virtualisation.vmware.host = {
23+ enable = mkEnableOption "VMware" // {
24+ description = ''
25+ This enables VMware host virtualisation for running VMs.
26+
27+ <important><para>
28+ <literal>vmware-vmx</literal> will cause kcompactd0 due to
29+ <literal>Transparent Hugepages</literal> feature in kernel.
30+ Apply <literal>[ "transparent_hugepage=never" ]</literal> in
31+ option <option>boot.kernelParams</option> to disable them.
32+ </para></important>
33+
34+ <note><para>
35+ If that didn't work disable <literal>TRANSPARENT_HUGEPAGE</literal>,
36+ <literal>COMPACTION</literal> configs and recompile kernel.
37+ </para></note>
38+ '';
39+ };
40+ package = mkOption {
41+ type = types.package;
42+ default = pkgs.vmware-workstation;
43+ defaultText = literalExpression "pkgs.vmware-workstation";
44+ description = "VMware host virtualisation package to use";
45+ };
46+ extraPackages = mkOption {
47+ type = with types; listOf package;
48+ default = with pkgs; [ ];
49+ description = "Extra packages to be used with VMware host.";
50+ example = "with pkgs; [ ntfs3g ]";
51+ };
52+ extraConfig = mkOption {
53+ type = types.lines;
54+ default = "";
55+ description = "Add extra config to /etc/vmware/config";
56+ example = ''
57+ # Allow unsupported device's OpenGL and Vulkan acceleration for guest vGPU
58+ mks.gl.allowUnsupportedDrivers = "TRUE"
59+ mks.vk.allowUnsupportedDevices = "TRUE"
60+ '';
61+ };
62+ };
63+ };
64+
65+ config = lib.mkIf cfg.enable {
66+ boot.extraModulePackages = [ config.boot.kernelPackages.vmware ];
67+ boot.extraModprobeConfig = "alias char-major-10-229 fuse";
68+ boot.kernelModules = [ "vmw_pvscsi" "vmw_vmci" "vmmon" "vmnet" "fuse" ];
69+
70+ environment.systemPackages = [ cfg.package ] ++ cfg.extraPackages;
71+ services.printing.drivers = [ cfg.package ];
72+
73+ environment.etc."vmware/config".text = ''
74+ ${builtins.readFile "${cfg.package}/etc/vmware/config"}
75+ ${cfg.extraConfig}
76+ '';
77+
78+ environment.etc."vmware/bootstrap".source = "${cfg.package}/etc/vmware/bootstrap";
79+ environment.etc."vmware/icu".source = "${cfg.package}/etc/vmware/icu";
80+ environment.etc."vmware-installer".source = "${cfg.package}/etc/vmware-installer";
81+
82+ # SUID wrappers
83+
84+ security.wrappers = {
85+ vmware-vmx = {
86+ setuid = true;
87+ owner = "root";
88+ group = "root";
89+ source = "${cfg.package}/lib/vmware/bin/.vmware-vmx-wrapped";
90+ };
91+ };
92+
93+ ###### wrappers activation script
94+
95+ system.activationScripts.vmwareWrappers =
96+ lib.stringAfter [ "specialfs" "users" ]
97+ ''
98+ mkdir -p "${parentWrapperDir}"
99+ chmod 755 "${parentWrapperDir}"
100+ # We want to place the tmpdirs for the wrappers to the parent dir.
101+ wrapperDir=$(mktemp --directory --tmpdir="${parentWrapperDir}" wrappers.XXXXXXXXXX)
102+ chmod a+rx "$wrapperDir"
103+ ${lib.concatStringsSep "\n" (vmwareWrappers)}
104+ if [ -L ${wrapperDir} ]; then
105+ # Atomically replace the symlink
106+ # See https://axialcorps.com/2013/07/03/atomically-replacing-files-and-directories/
107+ old=$(readlink -f ${wrapperDir})
108+ if [ -e "${wrapperDir}-tmp" ]; then
109+ rm --force --recursive "${wrapperDir}-tmp"
110+ fi
111+ ln --symbolic --force --no-dereference "$wrapperDir" "${wrapperDir}-tmp"
112+ mv --no-target-directory "${wrapperDir}-tmp" "${wrapperDir}"
113+ rm --force --recursive "$old"
114+ else
115+ # For initial setup
116+ ln --symbolic "$wrapperDir" "${wrapperDir}"
117+ fi
118+ '';
119+
120+ # Services
121+
122+ systemd.services."vmware-authdlauncher" = {
123+ description = "VMware Authentification Daemon";
124+ serviceConfig = {
125+ Type = "forking";
126+ ExecStart = [ "${cfg.package}/bin/vmware-authdlauncher" ];
127+ };
128+ wantedBy = [ "multi-user.target" ];
129+ };
130+
131+ systemd.services."vmware-networks-configuration" = {
132+ description = "VMware Networks Configuration Generation";
133+ unitConfig.ConditionPathExists = "!/etc/vmware/networking";
134+ serviceConfig = {
135+ UMask = "0077";
136+ ExecStart = [
137+ "${cfg.package}/bin/vmware-networks --postinstall vmware-player,0,1"
138+ ];
139+ Type = "oneshot";
140+ RemainAfterExit = "yes";
141+ };
142+ wantedBy = [ "multi-user.target" ];
143+ };
144+
145+ systemd.services."vmware-networks" = {
146+ description = "VMware Networks";
147+ after = [ "vmware-networks-configuration.service" ];
148+ requires = [ "vmware-networks-configuration.service" ];
149+ serviceConfig = {
150+ Type = "forking";
151+ ExecCondition = [ "${pkgs.kmod}/bin/modprobe vmnet" ];
152+ ExecStart = [ "${cfg.package}/bin/vmware-networks --start" ];
153+ ExecStop = [ "${cfg.package}/bin/vmware-networks --stop" ];
154+ };
155+ wantedBy = [ "multi-user.target" ];
156+ };
157+
158+ systemd.services."vmware-usbarbitrator" = {
159+ description = "VMware USB Arbitrator";
160+ serviceConfig = {
161+ ExecStart = [ "${cfg.package}/bin/vmware-usbarbitrator -f" ];
162+ };
163+ wantedBy = [ "multi-user.target" ];
164+ };
165+ };
166+}
nixos/release-combined.nix+2
@@ -132,12 +132,14 @@ in rec {
132132 # fails with kernel >= 5.15 https://github.com/NixOS/nixpkgs/pull/152505#issuecomment-1005049314
133133 #(onFullSupported "nixos.tests.nfs3.simple")
134134 (onFullSupported "nixos.tests.nfs4.simple")
135+ (onSystems ["x86_64-linux"] "nixos.tests.oci-containers.podman")
135136 (onFullSupported "nixos.tests.openssh")
136137 (onFullSupported "nixos.tests.pantheon")
137138 (onFullSupported "nixos.tests.php.fpm")
138139 (onFullSupported "nixos.tests.php.httpd")
139140 (onFullSupported "nixos.tests.php.pcre")
140141 (onFullSupported "nixos.tests.plasma5")
142+ (onSystems ["x86_64-linux"] "nixos.tests.podman")
141143 (onFullSupported "nixos.tests.predictable-interface-names.predictableNetworkd")
142144 (onFullSupported "nixos.tests.predictable-interface-names.predictable")
143145 (onFullSupported "nixos.tests.predictable-interface-names.unpredictableNetworkd")
nixos/release.nix+2−2
@@ -150,13 +150,13 @@ in rec {
150150 });
151151
152152 iso_plasma5 = forMatchingSystems [ "x86_64-linux" ] (system: makeIso {
153− module = ./modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix;
153+ module = ./modules/installer/cd-dvd/installation-cd-graphical-calamares-plasma5.nix;
154154 type = "plasma5";
155155 inherit system;
156156 });
157157
158158 iso_gnome = forMatchingSystems [ "x86_64-linux" ] (system: makeIso {
159− module = ./modules/installer/cd-dvd/installation-cd-graphical-gnome.nix;
159+ module = ./modules/installer/cd-dvd/installation-cd-graphical-calamares-gnome.nix;
160160 type = "gnome";
161161 inherit system;
162162 });
nixos/tests/all-terminfo.nixnew file+31
@@ -0,0 +1,31 @@
1+import ./make-test-python.nix ({ pkgs, ... }: rec {
2+ name = "all-terminfo";
3+ meta = with pkgs.lib.maintainers; {
4+ maintainers = [ jkarlson ];
5+ };
6+
7+ nodes.machine = { pkgs, config, lib, ... }:
8+ let
9+ infoFilter = name: drv:
10+ let
11+ o = builtins.tryEval drv;
12+ in
13+ o.success && lib.isDerivation o.value && o.value ? outputs && builtins.elem "terminfo" o.value.outputs;
14+ terminfos = lib.filterAttrs infoFilter pkgs;
15+ excludedTerminfos = lib.filterAttrs (_: drv: !(builtins.elem drv.terminfo config.environment.systemPackages)) terminfos;
16+ includedOuts = lib.filterAttrs (_: drv: builtins.elem drv.out config.environment.systemPackages) terminfos;
17+ in
18+ {
19+ environment = {
20+ enableAllTerminfo = true;
21+ etc."terminfo-missing".text = builtins.concatStringsSep "\n" (builtins.attrNames excludedTerminfos);
22+ etc."terminfo-extra-outs".text = builtins.concatStringsSep "\n" (builtins.attrNames includedOuts);
23+ };
24+ };
25+
26+ testScript =
27+ ''
28+ machine.fail("grep . /etc/terminfo-missing >&2")
29+ machine.fail("grep . /etc/terminfo-extra-outs >&2")
30+ '';
31+})
nixos/tests/all-tests.nix+23−3
@@ -35,6 +35,7 @@ in
3535 agate = handleTest ./web-servers/agate.nix {};
3636 agda = handleTest ./agda.nix {};
3737 airsonic = handleTest ./airsonic.nix {};
38+ allTerminfo = handleTest ./all-terminfo.nix {};
3839 amazon-init-shell = handleTest ./amazon-init-shell.nix {};
3940 apfs = handleTest ./apfs.nix {};
4041 apparmor = handleTest ./apparmor.nix {};
@@ -142,6 +143,7 @@ in
142143 engelsystem = handleTest ./engelsystem.nix {};
143144 enlightenment = handleTest ./enlightenment.nix {};
144145 env = handleTest ./env.nix {};
146+ envoy = handleTest ./envoy.nix {};
145147 ergo = handleTest ./ergo.nix {};
146148 ergochat = handleTest ./ergochat.nix {};
147149 etc = pkgs.callPackage ../modules/system/etc/test.nix { inherit evalMinimalConfig; };
@@ -194,8 +196,12 @@ in
194196 hadoop_3_2 = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop_3_2; };
195197 hadoop2 = import ./hadoop { inherit handleTestOn; package=pkgs.hadoop2; };
196198 haka = handleTest ./haka.nix {};
199+ haste-server = handleTest ./haste-server.nix {};
197200 haproxy = handleTest ./haproxy.nix {};
198201 hardened = handleTest ./hardened.nix {};
202+ hbase1 = handleTest ./hbase.nix { package=pkgs.hbase1; };
203+ hbase2 = handleTest ./hbase.nix { package=pkgs.hbase2; };
204+ hbase3 = handleTest ./hbase.nix { package=pkgs.hbase3; };
199205 hedgedoc = handleTest ./hedgedoc.nix {};
200206 herbstluftwm = handleTest ./herbstluftwm.nix {};
201207 installed-tests = pkgs.recurseIntoAttrs (handleTest ./installed-tests {});
@@ -206,6 +212,7 @@ in
206212 # hibernation. This test happens to work on x86_64-linux but
207213 # not on other platforms.
208214 hibernate = handleTestOn ["x86_64-linux"] ./hibernate.nix {};
215+ hibernate-systemd-stage-1 = handleTestOn ["x86_64-linux"] ./hibernate.nix { systemdStage1 = true; };
209216 hitch = handleTest ./hitch {};
210217 hledger-web = handleTest ./hledger-web.nix {};
211218 hocker-fetchdocker = handleTest ./hocker-fetchdocker {};
@@ -228,6 +235,7 @@ in
228235 input-remapper = handleTest ./input-remapper.nix {};
229236 inspircd = handleTest ./inspircd.nix {};
230237 installer = handleTest ./installer.nix {};
238+ installer-systemd-stage-1 = handleTest ./installer-systemd-stage-1.nix {};
231239 invoiceplane = handleTest ./invoiceplane.nix {};
232240 iodine = handleTest ./iodine.nix {};
233241 ipfs = handleTest ./ipfs.nix {};
@@ -274,13 +282,14 @@ in
274282 login = handleTest ./login.nix {};
275283 logrotate = handleTest ./logrotate.nix {};
276284 loki = handleTest ./loki.nix {};
285+ lvm2 = handleTest ./lvm2 {};
277286 lxd = handleTest ./lxd.nix {};
278− lxd-image = handleTest ./lxd-image.nix {};
279287 lxd-nftables = handleTest ./lxd-nftables.nix {};
280288 lxd-image-server = handleTest ./lxd-image-server.nix {};
281289 #logstash = handleTest ./logstash.nix {};
282290 lorri = handleTest ./lorri/default.nix {};
283291 maddy = handleTest ./maddy.nix {};
292+ maestral = handleTest ./maestral.nix {};
284293 magic-wormhole-mailbox-server = handleTest ./magic-wormhole-mailbox-server.nix {};
285294 magnetico = handleTest ./magnetico.nix {};
286295 mailcatcher = handleTest ./mailcatcher.nix {};
@@ -315,6 +324,7 @@ in
315324 moosefs = handleTest ./moosefs.nix {};
316325 mpd = handleTest ./mpd.nix {};
317326 mpv = handleTest ./mpv.nix {};
327+ mtp = handleTest ./mtp.nix {};
318328 mumble = handleTest ./mumble.nix {};
319329 musescore = handleTest ./musescore.nix {};
320330 munin = handleTest ./munin.nix {};
@@ -358,8 +368,9 @@ in
358368 nginx-sandbox = handleTestOn ["x86_64-linux"] ./nginx-sandbox.nix {};
359369 nginx-sso = handleTest ./nginx-sso.nix {};
360370 nginx-variants = handleTest ./nginx-variants.nix {};
371+ nifi = handleTestOn ["x86_64-linux"] ./web-apps/nifi.nix {};
361372 nitter = handleTest ./nitter.nix {};
362− nix-ld = handleTest ./nix-ld {};
373+ nix-ld = handleTest ./nix-ld.nix {};
363374 nix-serve = handleTest ./nix-serve.nix {};
364375 nix-serve-ssh = handleTest ./nix-serve-ssh.nix {};
365376 nixops = handleTest ./nixops/default.nix {};
@@ -394,9 +405,10 @@ in
394405 pam-file-contents = handleTest ./pam/pam-file-contents.nix {};
395406 pam-oath-login = handleTest ./pam/pam-oath-login.nix {};
396407 pam-u2f = handleTest ./pam/pam-u2f.nix {};
408+ pam-ussh = handleTest ./pam/pam-ussh.nix {};
397409 pantalaimon = handleTest ./matrix/pantalaimon.nix {};
398410 pantheon = handleTest ./pantheon.nix {};
399− paperless-ng = handleTest ./paperless-ng.nix {};
411+ paperless = handleTest ./paperless.nix {};
400412 parsedmarc = handleTest ./parsedmarc {};
401413 pdns-recursor = handleTest ./pdns-recursor.nix {};
402414 peerflix = handleTest ./peerflix.nix {};
@@ -512,6 +524,12 @@ in
512524 systemd-confinement = handleTest ./systemd-confinement.nix {};
513525 systemd-cryptenroll = handleTest ./systemd-cryptenroll.nix {};
514526 systemd-escaping = handleTest ./systemd-escaping.nix {};
527+ systemd-initrd-btrfs-raid = handleTest ./systemd-initrd-btrfs-raid.nix {};
528+ systemd-initrd-luks-keyfile = handleTest ./systemd-initrd-luks-keyfile.nix {};
529+ systemd-initrd-luks-password = handleTest ./systemd-initrd-luks-password.nix {};
530+ systemd-initrd-shutdown = handleTest ./systemd-shutdown.nix { systemdStage1 = true; };
531+ systemd-initrd-simple = handleTest ./systemd-initrd-simple.nix {};
532+ systemd-initrd-swraid = handleTest ./systemd-initrd-swraid.nix {};
515533 systemd-journal = handleTest ./systemd-journal.nix {};
516534 systemd-machinectl = handleTest ./systemd-machinectl.nix {};
517535 systemd-networkd = handleTest ./systemd-networkd.nix {};
@@ -520,6 +538,7 @@ in
520538 systemd-networkd-ipv6-prefix-delegation = handleTest ./systemd-networkd-ipv6-prefix-delegation.nix {};
521539 systemd-networkd-vrf = handleTest ./systemd-networkd-vrf.nix {};
522540 systemd-nspawn = handleTest ./systemd-nspawn.nix {};
541+ systemd-shutdown = handleTest ./systemd-shutdown.nix {};
523542 systemd-timesyncd = handleTest ./systemd-timesyncd.nix {};
524543 systemd-misc = handleTest ./systemd-misc.nix {};
525544 taskserver = handleTest ./taskserver.nix {};
@@ -580,6 +599,7 @@ in
580599 xautolock = handleTest ./xautolock.nix {};
581600 xfce = handleTest ./xfce.nix {};
582601 xmonad = handleTest ./xmonad.nix {};
602+ xmonad-xdg-autostart = handleTest ./xmonad-xdg-autostart.nix {};
583603 xrdp = handleTest ./xrdp.nix {};
584604 xss-lock = handleTest ./xss-lock.nix {};
585605 xterm = handleTest ./xterm.nix {};
nixos/tests/atop.nix−8
@@ -182,10 +182,6 @@ in
182182 atopgpu = makeTest {
183183 name = "atop-atopgpu";
184184 nodes.machine = {
185− nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (getName pkg) [
186− "cudatoolkit"
187− ];
188−
189185 programs.atop = {
190186 enable = true;
191187 atopgpu.enable = true;
@@ -205,10 +201,6 @@ in
205201 everything = makeTest {
206202 name = "atop-everthing";
207203 nodes.machine = {
208− nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (getName pkg) [
209− "cudatoolkit"
210− ];
211−
212204 programs.atop = {
213205 enable = true;
214206 settings = {
nixos/tests/bcachefs.nix+1−1
@@ -1,6 +1,6 @@
11import ./make-test-python.nix ({ pkgs, ... }: {
22 name = "bcachefs";
3− meta.maintainers = with pkgs.lib.maintainers; [ chiiruno ];
3+ meta.maintainers = with pkgs.lib.maintainers; [ Madouura ];
44
55 nodes.machine = { pkgs, ... }: {
66 virtualisation.emptyDiskImages = [ 4096 ];
nixos/tests/boot.nix+3−3
@@ -42,7 +42,7 @@ let
4242 nodes = { };
4343 testScript =
4444 ''
45− nodes.machine = create_machine(${machineConfig})
45+ machine = create_machine(${machineConfig})
4646 machine.start()
4747 machine.wait_for_unit("multi-user.target")
4848 machine.succeed("nix store verify --no-trust -r --option experimental-features nix-command /run/current-system")
@@ -83,7 +83,7 @@ let
8383 name = "boot-netboot-" + name;
8484 nodes = { };
8585 testScript = ''
86− nodes.machine = create_machine(${machineConfig})
86+ machine = create_machine(${machineConfig})
8787 machine.start()
8888 machine.wait_for_unit("multi-user.target")
8989 machine.shutdown()
@@ -138,7 +138,7 @@ in {
138138 if os.system("qemu-img create -f qcow2 -F raw -b ${sdImage} ${mutableImage}") != 0:
139139 raise RuntimeError("Could not create mutable linked image")
140140
141− nodes.machine = create_machine(${machineConfig})
141+ machine = create_machine(${machineConfig})
142142 machine.start()
143143 machine.wait_for_unit("multi-user.target")
144144 machine.succeed("nix store verify -r --no-trust --option experimental-features nix-command /run/current-system")
nixos/tests/collectd.nix+6−1
@@ -3,11 +3,14 @@ import ./make-test-python.nix ({ pkgs, ... }: {
33 meta = { };
44
55 nodes.machine =
6− { pkgs, ... }:
6+ { pkgs, lib, ... }:
77
88 {
99 services.collectd = {
1010 enable = true;
11+ extraConfig = lib.mkBefore ''
12+ Interval 30
13+ '';
1114 plugins = {
1215 rrdtool = ''
1316 DataDir "/var/lib/collectd/rrd"
@@ -26,6 +29,8 @@ import ./make-test-python.nix ({ pkgs, ... }: {
2629 machine.succeed(f"rrdinfo {file} | logger")
2730 # check that this file contains a shortterm metric
2831 machine.succeed(f"rrdinfo {file} | grep -F 'ds[shortterm].min = '")
32+ # check that interval was set before the plugins
33+ machine.succeed(f"rrdinfo {file} | grep -F 'step = 30'")
2934 # check that there are frequent updates
3035 machine.succeed(f"cp {file} before")
3136 machine.wait_until_fails(f"cmp before {file}")
nixos/tests/common/lxd/config.yamlnew file+24
@@ -0,0 +1,24 @@
1+storage_pools:
2+ - name: default
3+ driver: dir
4+ config:
5+ source: /var/lxd-pool
6+
7+networks:
8+ - name: lxdbr0
9+ type: bridge
10+ config:
11+ ipv4.address: auto
12+ ipv6.address: none
13+
14+profiles:
15+ - name: default
16+ devices:
17+ eth0:
18+ name: eth0
19+ network: lxdbr0
20+ type: nic
21+ root:
22+ path: /
23+ pool: default
24+ type: disk
nixos/tests/containers-ephemeral.nix+3−3
@@ -33,10 +33,10 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
3333 machine.succeed("nixos-container start webserver")
3434
3535 with subtest("Container got its own root folder"):
36− machine.succeed("ls /run/containers/webserver")
36+ machine.succeed("ls /run/nixos-containers/webserver")
3737
3838 with subtest("Container persistent directory is not created"):
39− machine.fail("ls /var/lib/containers/webserver")
39+ machine.fail("ls /var/lib/nixos-containers/webserver")
4040
4141 # Since "start" returns after the container has reached
4242 # multi-user.target, we should now be able to access it.
@@ -49,6 +49,6 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
4949 machine.fail(f"curl --fail --connect-timeout 2 http://{ip}/ > /dev/null")
5050
5151 with subtest("Container's root folder was removed"):
52− machine.fail("ls /run/containers/webserver")
52+ machine.fail("ls /run/nixos-containers/webserver")
5353 '';
5454})
nixos/tests/containers-imperative.nix+6−6
@@ -69,8 +69,8 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
6969
7070 with subtest(f"Put the root of {id2} into a bind mount"):
7171 machine.succeed(
72− f"mv /var/lib/containers/{id2} /id2-bindmount",
73− f"mount --bind /id2-bindmount /var/lib/containers/{id1}",
72+ f"mv /var/lib/nixos-containers/{id2} /id2-bindmount",
73+ f"mount --bind /id2-bindmount /var/lib/nixos-containers/{id1}",
7474 )
7575
7676 ip1 = machine.succeed(f"nixos-container show-ip {id1}").rstrip()
@@ -88,7 +88,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
8888 "Create a directory with a dummy file and bind-mount it into both containers."
8989 ):
9090 for id in id1, id2:
91− important_path = f"/var/lib/containers/{id}/very/important/data"
91+ important_path = f"/var/lib/nixos-containers/{id}/very/important/data"
9292 machine.succeed(
9393 f"mkdir -p {important_path}",
9494 f"mount --bind /nested-bindmount {important_path}",
@@ -154,13 +154,13 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
154154 machine.succeed("grep -qF 'important data' /nested-bindmount/dummy")
155155
156156 with subtest("Ensure that the container path is gone"):
157− print(machine.succeed("ls -lsa /var/lib/containers"))
158− machine.succeed(f"test ! -e /var/lib/containers/{id1}")
157+ print(machine.succeed("ls -lsa /var/lib/nixos-containers"))
158+ machine.succeed(f"test ! -e /var/lib/nixos-containers/{id1}")
159159
160160 with subtest("Ensure that a failed container creation doesn'leave any state"):
161161 machine.fail(
162162 "nixos-container create b0rk --config-file ${brokenCfg}"
163163 )
164− machine.succeed("test ! -e /var/lib/containers/b0rk")
164+ machine.succeed("test ! -e /var/lib/nixos-containers/b0rk")
165165 '';
166166})
nixos/tests/containers-tmpfs.nix+5−5
@@ -62,7 +62,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
6262 machine.succeed(
6363 tmpfs_cmd("touch /root/test.file"),
6464 tmpfs_cmd("ls -l /root | grep -q test.file"),
65− "test -e /var/lib/containers/tmpfs/root/test.file",
65+ "test -e /var/lib/nixos-containers/tmpfs/root/test.file",
6666 )
6767
6868 with subtest(
@@ -73,7 +73,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
7373 tmpfs_cmd("touch /some/random/path/test.file"),
7474 tmpfs_cmd("test -e /some/random/path/test.file"),
7575 )
76− machine.fail("test -e /var/lib/containers/tmpfs/some/random/path/test.file")
76+ machine.fail("test -e /var/lib/nixos-containers/tmpfs/some/random/path/test.file")
7777
7878 with subtest(
7979 "files created in the hosts container dir in a path where a tmpfs "
@@ -81,9 +81,9 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
8181 + "the do not exist in the tmpfs"
8282 ):
8383 machine.succeed(
84− "touch /var/lib/containers/tmpfs/var/test.file",
85− "test -e /var/lib/containers/tmpfs/var/test.file",
86− "ls -l /var/lib/containers/tmpfs/var/ | grep -q test.file 2>/dev/null",
84+ "touch /var/lib/nixos-containers/tmpfs/var/test.file",
85+ "test -e /var/lib/nixos-containers/tmpfs/var/test.file",
86+ "ls -l /var/lib/nixos-containers/tmpfs/var/ | grep -q test.file 2>/dev/null",
8787 )
8888 machine.fail(tmpfs_cmd("ls -l /var | grep -q test.file"))
8989 '';
nixos/tests/custom-ca.nix+104−90
@@ -1,9 +1,14 @@
11# Checks that `security.pki` options are working in curl and the main browser
2−# engines: Gecko (via Firefox), Chromium, QtWebEngine (Falkon) and WebKitGTK
3−# (via Midori). The test checks that certificates issued by a custom trusted
4−# CA are accepted but those from an unknown CA are rejected.
2+# engines: Gecko (via Firefox), Chromium, QtWebEngine (via qutebrowser) and
3+# WebKitGTK (via Midori). The test checks that certificates issued by a custom
4+# trusted CA are accepted but those from an unknown CA are rejected.
55
6−import ./make-test-python.nix ({ pkgs, lib, ... }:
6+{ system ? builtins.currentSystem,
7+ config ? {},
8+ pkgs ? import ../.. { inherit system config; }
9+}:
10+
11+with import ../lib/testing-python.nix { inherit system pkgs; };
712
813let
914 makeCert = { caName, domain }: pkgs.runCommand "example-cert"
@@ -68,24 +73,8 @@ let
6873 domain = "bad.example.com";
6974 };
7075
71−in
72−
73−{
74− name = "custom-ca";
75− meta.maintainers = with lib.maintainers; [ rnhmjoj ];
76−
77− enableOCR = true;
78−
79− nodes.machine = { pkgs, ... }:
80− { imports = [ ./common/user-account.nix ./common/x11.nix ];
81−
82− # chromium-based browsers refuse to run as root
83− test-support.displayManager.auto.user = "alice";
84−
85− # browsers may hang with the default memory
86− virtualisation.memorySize = 600;
87−
88− networking.hosts."127.0.0.1" = [ "good.example.com" "bad.example.com" ];
76+ webserverConfig =
77+ { networking.hosts."127.0.0.1" = [ "good.example.com" "bad.example.com" ];
8978 security.pki.certificateFiles = [ "${example-good-cert}/ca.crt" ];
9079
9180 services.nginx.enable = true;
@@ -107,73 +96,98 @@ in
10796 return 200 'It does not work!';
10897 '';
10998 };
110−
111− environment.systemPackages = with pkgs; [
112− xdotool
113− firefox
114− chromium
115− qutebrowser
116− midori
117− ];
11899 };
119100
120− testScript = ''
121− from typing import Tuple
122− def execute_as(user: str, cmd: str) -> Tuple[int, str]:
123− """
124− Run a shell command as a specific user.
125− """
126− return machine.execute(f"sudo -u {user} {cmd}")
127−
128−
129− def wait_for_window_as(user: str, cls: str) -> None:
130− """
131− Wait until a X11 window of a given user appears.
132− """
133−
134− def window_is_visible(last_try: bool) -> bool:
135− ret, stdout = execute_as(user, f"xdotool search --onlyvisible --class {cls}")
136− if last_try:
137− machine.log(f"Last chance to match {cls} on the window list")
138− return ret == 0
139−
140− with machine.nested("Waiting for a window to appear"):
141− retry(window_is_visible)
142−
143−
144− machine.start()
145−
146− with subtest("Good certificate is trusted in curl"):
147− machine.wait_for_unit("nginx")
148− machine.wait_for_open_port(443)
149− machine.succeed("curl -fv https://good.example.com")
150−
151− with subtest("Unknown CA is untrusted in curl"):
152− machine.fail("curl -fv https://bad.example.com")
153−
154− browsers = {
155− "firefox": "Security Risk",
156− "chromium": "not private",
157− "qutebrowser -T": "Certificate error",
158− "midori": "Security"
159− }
160−
161− machine.wait_for_x()
162− for command, error in browsers.items():
163− browser = command.split()[0]
164− with subtest("Good certificate is trusted in " + browser):
165− execute_as(
166− "alice", f"{command} https://good.example.com >&2 &"
167− )
168− wait_for_window_as("alice", browser)
169− machine.wait_for_text("It works!")
170− machine.screenshot("good" + browser)
171− execute_as("alice", "xdotool key ctrl+w") # close tab
172−
173− with subtest("Unknown CA is untrusted in " + browser):
174− execute_as("alice", f"{command} https://bad.example.com >&2 &")
175− machine.wait_for_text(error)
176− machine.screenshot("bad" + browser)
177− machine.succeed("pkill -f " + browser)
178− '';
179−})
101+ curlTest = makeTest {
102+ name = "custom-ca-curl";
103+ meta.maintainers = with lib.maintainers; [ rnhmjoj ];
104+ nodes.machine = { ... }: webserverConfig;
105+ testScript = ''
106+ with subtest("Good certificate is trusted in curl"):
107+ machine.wait_for_unit("nginx")
108+ machine.wait_for_open_port(443)
109+ machine.succeed("curl -fv https://good.example.com")
110+
111+ with subtest("Unknown CA is untrusted in curl"):
112+ machine.fail("curl -fv https://bad.example.com")
113+ '';
114+ };
115+
116+ mkBrowserTest = browser: testParams: makeTest {
117+ name = "custom-ca-${browser}";
118+ meta.maintainers = with lib.maintainers; [ rnhmjoj ];
119+
120+ enableOCR = true;
121+
122+ nodes.machine = { pkgs, ... }:
123+ { imports =
124+ [ ./common/user-account.nix
125+ ./common/x11.nix
126+ webserverConfig
127+ ];
128+
129+ # chromium-based browsers refuse to run as root
130+ test-support.displayManager.auto.user = "alice";
131+
132+ # browsers may hang with the default memory
133+ virtualisation.memorySize = 600;
134+
135+ environment.systemPackages = [ pkgs.xdotool pkgs.${browser} ];
136+ };
137+
138+ testScript = ''
139+ from typing import Tuple
140+ def execute_as(user: str, cmd: str) -> Tuple[int, str]:
141+ """
142+ Run a shell command as a specific user.
143+ """
144+ return machine.execute(f"sudo -u {user} {cmd}")
145+
146+
147+ def wait_for_window_as(user: str, cls: str) -> None:
148+ """
149+ Wait until a X11 window of a given user appears.
150+ """
151+
152+ def window_is_visible(last_try: bool) -> bool:
153+ ret, stdout = execute_as(user, f"xdotool search --onlyvisible --class {cls}")
154+ if last_try:
155+ machine.log(f"Last chance to match {cls} on the window list")
156+ return ret == 0
157+
158+ with machine.nested("Waiting for a window to appear"):
159+ retry(window_is_visible)
160+
161+
162+ machine.start()
163+ machine.wait_for_x()
164+
165+ command = "${browser} ${testParams.args or ""}"
166+ with subtest("Good certificate is trusted in ${browser}"):
167+ execute_as(
168+ "alice", f"{command} https://good.example.com >&2 &"
169+ )
170+ wait_for_window_as("alice", "${browser}")
171+ machine.sleep(4)
172+ execute_as("alice", "xdotool key ctrl+r") # reload to be safe
173+ machine.wait_for_text("It works!")
174+ machine.screenshot("good${browser}")
175+ execute_as("alice", "xdotool key ctrl+w") # close tab
176+
177+ with subtest("Unknown CA is untrusted in ${browser}"):
178+ execute_as("alice", f"{command} https://bad.example.com >&2 &")
179+ machine.wait_for_text("${testParams.error}")
180+ machine.screenshot("bad${browser}")
181+ '';
182+ };
183+
184+in
185+
186+{
187+ curl = curlTest;
188+} // pkgs.lib.mapAttrs mkBrowserTest {
189+ firefox = { error = "Security Risk"; };
190+ chromium = { error = "not private"; };
191+ qutebrowser = { args = "-T"; error = "Certificate error"; };
192+ midori = { error = "Security"; };
193+}
nixos/tests/docker-tools-cross.nix+2−2
@@ -7,7 +7,7 @@ import ./make-test-python.nix ({ pkgs, ... }:
77let
88
99 remoteSystem =
10− if pkgs.system == "aarch64-linux"
10+ if pkgs.stdenv.hostPlatform.system == "aarch64-linux"
1111 then "x86_64-linux"
1212 else "aarch64-linux";
1313
@@ -18,7 +18,7 @@ let
1818
1919 # NOTE: Since this file can't control where the test will be _run_ we don't
2020 # cross-compile _to_ a different system but _from_ a different system
21− crossSystem = pkgs.system;
21+ crossSystem = pkgs.stdenv.hostPlatform.system;
2222 };
2323
2424 hello1 = remoteCrossPkgs.dockerTools.buildImage {
nixos/tests/docker-tools.nix+1−1
@@ -315,7 +315,7 @@ import ./make-test-python.nix ({ pkgs, ... }: {
315315 "docker inspect ${pkgs.dockerTools.examples.cross.imageName} "
316316 + "| ${pkgs.jq}/bin/jq -r .[].Architecture"
317317 ).strip()
318− == "${if pkgs.system == "aarch64-linux" then "amd64" else "arm64"}"
318+ == "${if pkgs.stdenv.hostPlatform.system == "aarch64-linux" then "amd64" else "arm64"}"
319319 )
320320
321321 with subtest("buildLayeredImage doesn't dereference /nix/store symlink layers"):
nixos/tests/emacs-daemon.nix+1−1
@@ -33,7 +33,7 @@ import ./make-test-python.nix ({ pkgs, ...} : {
3333 )
3434
3535 # connects to the daemon
36− machine.succeed("emacsclient --create-frame $EDITOR >&2 &")
36+ machine.succeed("emacsclient --no-wait --frame-parameters='((display . \"'\"$DISPLAY\"'\"))' --create-frame $EDITOR >&2")
3737
3838 # checks that Emacs shows the edited filename
3939 machine.wait_for_text("emacseditor")
nixos/tests/envoy.nixnew file+33
@@ -0,0 +1,33 @@
1+import ./make-test-python.nix ({ pkgs, lib, ...} : {
2+ name = "envoy";
3+ meta = with pkgs.lib.maintainers; {
4+ maintainers = [ cameronnemo ];
5+ };
6+
7+ nodes.machine = { pkgs, ... }: {
8+ services.envoy.enable = true;
9+ services.envoy.settings = {
10+ admin = {
11+ access_log_path = "/dev/null";
12+ address = {
13+ socket_address = {
14+ protocol = "TCP";
15+ address = "127.0.0.1";
16+ port_value = 9901;
17+ };
18+ };
19+ };
20+ static_resources = {
21+ listeners = [];
22+ clusters = [];
23+ };
24+ };
25+ };
26+
27+ testScript = ''
28+ machine.start()
29+ machine.wait_for_unit("envoy.service")
30+ machine.wait_for_open_port(9901)
31+ machine.wait_until_succeeds("curl -fsS localhost:9901/ready")
32+ '';
33+})
nixos/tests/fenics.nix+1−1
@@ -44,6 +44,6 @@ in
4444 { nodes, ... }:
4545 ''
4646 start_all()
47− node1.succeed("${fenicsScript}")
47+ fenicsnode.succeed("${fenicsScript}")
4848 '';
4949})
nixos/tests/gitlab.nix+300−21
@@ -1,12 +1,34 @@
1−# This test runs gitlab and checks if it works
1+# This test runs gitlab and performs the following tests:
2+# - Creating users
3+# - Pushing commits
4+# - over the API
5+# - over SSH
6+# - Creating Merge Requests and merging them
7+# - Opening and closing issues.
8+# - Downloading repository archives as tar.gz and tar.bz2
9+import ./make-test-python.nix ({ pkgs, lib, ... }:
10+
11+with lib;
212
313let
14+ inherit (import ./ssh-keys.nix pkgs) snakeOilPrivateKey snakeOilPublicKey;
415 initialRootPassword = "notproduction";
5−in
6−import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
16+ rootProjectId = "2";
17+
18+ aliceUsername = "alice";
19+ aliceUserId = "2";
20+ alicePassword = "alicepassword";
21+ aliceProjectId = "2";
22+ aliceProjectName = "test-alice";
23+
24+ bobUsername = "bob";
25+ bobUserId = "3";
26+ bobPassword = "bobpassword";
27+ bobProjectId = "3";
28+in {
729 name = "gitlab";
830 meta = with pkgs.lib.maintainers; {
9− maintainers = [ globin ];
31+ maintainers = [ globin yayayayaka ];
1032 };
1133
1234 nodes = {
@@ -31,6 +53,8 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
3153 };
3254 };
3355
56+ services.openssh.enable = true;
57+
3458 services.dovecot2 = {
3559 enable = true;
3660 enableImap = true;
@@ -77,8 +101,43 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
77101 password = initialRootPassword;
78102 });
79103
80− createProject = pkgs.writeText "create-project.json" (builtins.toJSON {
81− name = "test";
104+ createUserAlice = pkgs.writeText "create-user-alice.json" (builtins.toJSON rec {
105+ username = aliceUsername;
106+ name = username;
107+ email = "alice@localhost";
108+ password = alicePassword;
109+ skip_confirmation = true;
110+ });
111+
112+ createUserBob = pkgs.writeText "create-user-bob.json" (builtins.toJSON rec {
113+ username = bobUsername;
114+ name = username;
115+ email = "bob@localhost";
116+ password = bobPassword;
117+ skip_confirmation = true;
118+ });
119+
120+ aliceAuth = pkgs.writeText "alice-auth.json" (builtins.toJSON {
121+ grant_type = "password";
122+ username = aliceUsername;
123+ password = alicePassword;
124+ });
125+
126+ bobAuth = pkgs.writeText "bob-auth.json" (builtins.toJSON {
127+ grant_type = "password";
128+ username = bobUsername;
129+ password = bobPassword;
130+ });
131+
132+ aliceAddSSHKey = pkgs.writeText "alice-add-ssh-key.json" (builtins.toJSON {
133+ id = aliceUserId;
134+ title = "snakeoil@nixos";
135+ key = snakeOilPublicKey;
136+ });
137+
138+ createProjectAlice = pkgs.writeText "create-project-alice.json" (builtins.toJSON {
139+ name = aliceProjectName;
140+ visibility = "public";
82141 });
83142
84143 putFile = pkgs.writeText "put-file.json" (builtins.toJSON {
@@ -89,6 +148,23 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
89148 commit_message = "create a new file";
90149 });
91150
151+ mergeRequest = pkgs.writeText "merge-request.json" (builtins.toJSON {
152+ id = bobProjectId;
153+ target_project_id = aliceProjectId;
154+ source_branch = "master";
155+ target_branch = "master";
156+ title = "Add some other file";
157+ });
158+
159+ newIssue = pkgs.writeText "new-issue.json" (builtins.toJSON {
160+ title = "useful issue title";
161+ });
162+
163+ closeIssue = pkgs.writeText "close-issue.json" (builtins.toJSON {
164+ issue_iid = 1;
165+ state_event = "close";
166+ });
167+
92168 # Wait for all GitLab services to be fully started.
93169 waitForServices = ''
94170 gitlab.wait_for_unit("gitaly.service")
@@ -105,6 +181,8 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
105181 # The actual test of GitLab. Only push data to GitLab if
106182 # `doSetup` is is true.
107183 test = doSetup: ''
184+ GIT_SSH_COMMAND = "ssh -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=/dev/null"
185+
108186 gitlab.succeed(
109187 "curl -isSf http://gitlab | grep -i location | grep http://gitlab/users/sign_in"
110188 )
@@ -112,24 +190,225 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
112190 "${pkgs.sudo}/bin/sudo -u gitlab -H gitlab-rake gitlab:check 1>&2"
113191 )
114192 gitlab.succeed(
115− "echo \"Authorization: Bearer \$(curl -X POST -H 'Content-Type: application/json' -d @${auth} http://gitlab/oauth/token | ${pkgs.jq}/bin/jq -r '.access_token')\" >/tmp/headers"
193+ "echo \"Authorization: Bearer $(curl -X POST -H 'Content-Type: application/json' -d @${auth} http://gitlab/oauth/token | ${pkgs.jq}/bin/jq -r '.access_token')\" >/tmp/headers"
116194 )
117195 '' + optionalString doSetup ''
118− gitlab.succeed(
119− "curl -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${createProject} http://gitlab/api/v4/projects"
120− )
121− gitlab.succeed(
122− "curl -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${putFile} http://gitlab/api/v4/projects/1/repository/files/some-file.txt"
123− )
196+ with subtest("Create user Alice"):
197+ gitlab.succeed(
198+ """[ "$(curl -o /dev/null -w '%{http_code}' -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${createUserAlice} http://gitlab/api/v4/users)" = "201" ]"""
199+ )
200+ gitlab.succeed(
201+ "echo \"Authorization: Bearer $(curl -X POST -H 'Content-Type: application/json' -d @${aliceAuth} http://gitlab/oauth/token | ${pkgs.jq}/bin/jq -r '.access_token')\" >/tmp/headers-alice"
202+ )
203+
204+ with subtest("Create user Bob"):
205+ gitlab.succeed(
206+ """ [ "$(curl -o /dev/null -w '%{http_code}' -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${createUserBob} http://gitlab/api/v4/users)" = "201" ]"""
207+ )
208+ gitlab.succeed(
209+ "echo \"Authorization: Bearer $(curl -X POST -H 'Content-Type: application/json' -d @${bobAuth} http://gitlab/oauth/token | ${pkgs.jq}/bin/jq -r '.access_token')\" >/tmp/headers-bob"
210+ )
211+
212+ with subtest("Setup Git and SSH for Alice"):
213+ gitlab.succeed("git config --global user.name Alice")
214+ gitlab.succeed("git config --global user.email alice@nixos.invalid")
215+ gitlab.succeed("mkdir -m 700 /root/.ssh")
216+ gitlab.succeed("cat ${snakeOilPrivateKey} > /root/.ssh/id_ecdsa")
217+ gitlab.succeed("chmod 600 /root/.ssh/id_ecdsa")
218+ gitlab.succeed(
219+ """
220+ [ "$(curl \
221+ -o /dev/null \
222+ -w '%{http_code}' \
223+ -X POST \
224+ -H 'Content-Type: application/json' \
225+ -H @/tmp/headers-alice -d @${aliceAddSSHKey} \
226+ http://gitlab/api/v4/user/keys)" = "201" ]
227+ """
228+ )
229+
230+ with subtest("Create a new repository"):
231+ # Alice creates a new repository
232+ gitlab.succeed(
233+ """
234+ [ "$(curl \
235+ -o /dev/null \
236+ -w '%{http_code}' \
237+ -X POST \
238+ -H 'Content-Type: application/json' \
239+ -H @/tmp/headers-alice \
240+ -d @${createProjectAlice} \
241+ http://gitlab/api/v4/projects)" = "201" ]
242+ """
243+ )
244+
245+ # Alice commits an initial commit
246+ gitlab.succeed(
247+ """
248+ [ "$(curl \
249+ -o /dev/null \
250+ -w '%{http_code}' \
251+ -X POST \
252+ -H 'Content-Type: application/json' \
253+ -H @/tmp/headers-alice \
254+ -d @${putFile} \
255+ http://gitlab/api/v4/projects/${aliceProjectId}/repository/files/some-file.txt)" = "201" ]"""
256+ )
257+
258+ with subtest("git clone over HTTP"):
259+ gitlab.succeed(
260+ """git clone http://gitlab/alice/${aliceProjectName}.git clone-via-http""",
261+ timeout=15
262+ )
263+
264+ with subtest("Push a commit via SSH"):
265+ gitlab.succeed(
266+ f"""GIT_SSH_COMMAND="{GIT_SSH_COMMAND}" git clone gitlab@gitlab:alice/${aliceProjectName}.git""",
267+ timeout=15
268+ )
269+ gitlab.succeed(
270+ """echo "a commit sent over ssh" > ${aliceProjectName}/ssh.txt"""
271+ )
272+ gitlab.succeed(
273+ """
274+ cd ${aliceProjectName} || exit 1
275+ git add .
276+ """
277+ )
278+ gitlab.succeed(
279+ """
280+ cd ${aliceProjectName} || exit 1
281+ git commit -m "Add a commit to be sent over ssh"
282+ """
283+ )
284+ gitlab.succeed(
285+ f"""
286+ cd ${aliceProjectName} || exit 1
287+ GIT_SSH_COMMAND="{GIT_SSH_COMMAND}" git push --set-upstream origin master
288+ """,
289+ timeout=15
290+ )
291+
292+ with subtest("Fork a project"):
293+ # Bob forks Alice's project
294+ gitlab.succeed(
295+ """
296+ [ "$(curl \
297+ -o /dev/null \
298+ -w '%{http_code}' \
299+ -X POST \
300+ -H 'Content-Type: application/json' \
301+ -H @/tmp/headers-bob \
302+ http://gitlab/api/v4/projects/${aliceProjectId}/fork)" = "201" ]
303+ """
304+ )
305+
306+ # Bob creates a commit
307+ gitlab.wait_until_succeeds(
308+ """
309+ [ "$(curl \
310+ -o /dev/null \
311+ -w '%{http_code}' \
312+ -X POST \
313+ -H 'Content-Type: application/json' \
314+ -H @/tmp/headers-bob \
315+ -d @${putFile} \
316+ http://gitlab/api/v4/projects/${bobProjectId}/repository/files/some-other-file.txt)" = "201" ]
317+ """
318+ )
319+
320+ with subtest("Create a Merge Request"):
321+ # Bob opens a merge request against Alice's repository
322+ gitlab.wait_until_succeeds(
323+ """
324+ [ "$(curl \
325+ -o /dev/null \
326+ -w '%{http_code}' \
327+ -X POST \
328+ -H 'Content-Type: application/json' \
329+ -H @/tmp/headers-bob \
330+ -d @${mergeRequest} \
331+ http://gitlab/api/v4/projects/${bobProjectId}/merge_requests)" = "201" ]
332+ """
333+ )
334+
335+ # Alice merges the MR
336+ gitlab.wait_until_succeeds(
337+ """
338+ [ "$(curl \
339+ -o /dev/null \
340+ -w '%{http_code}' \
341+ -X PUT \
342+ -H 'Content-Type: application/json' \
343+ -H @/tmp/headers-alice \
344+ -d @${mergeRequest} \
345+ http://gitlab/api/v4/projects/${aliceProjectId}/merge_requests/1/merge)" = "200" ]
346+ """
347+ )
348+
349+ with subtest("Create an Issue"):
350+ # Bob opens an issue on Alice's repository
351+ gitlab.succeed(
352+ """[ "$(curl \
353+ -o /dev/null \
354+ -w '%{http_code}' \
355+ -X POST \
356+ -H 'Content-Type: application/json' \
357+ -H @/tmp/headers-bob \
358+ -d @${newIssue} \
359+ http://gitlab/api/v4/projects/${aliceProjectId}/issues)" = "201" ]
360+ """
361+ )
362+
363+ # Alice closes the issue
364+ gitlab.wait_until_succeeds(
365+ """
366+ [ "$(curl \
367+ -o /dev/null \
368+ -w '%{http_code}' \
369+ -X PUT \
370+ -H 'Content-Type: application/json' \
371+ -H @/tmp/headers-alice -d @${closeIssue} http://gitlab/api/v4/projects/${aliceProjectId}/issues/1)" = "200" ]
372+ """
373+ )
124374 '' + ''
125− gitlab.succeed(
126− "curl -H @/tmp/headers http://gitlab/api/v4/projects/1/repository/archive.tar.gz > /tmp/archive.tar.gz"
127− )
128− gitlab.succeed(
129− "curl -H @/tmp/headers http://gitlab/api/v4/projects/1/repository/archive.tar.bz2 > /tmp/archive.tar.bz2"
130− )
131− gitlab.succeed("test -s /tmp/archive.tar.gz")
132− gitlab.succeed("test -s /tmp/archive.tar.bz2")
375+ with subtest("Download archive.tar.gz"):
376+ gitlab.succeed(
377+ """
378+ [ "$(curl \
379+ -o /dev/null \
380+ -w '%{http_code}' \
381+ -H @/tmp/headers-alice \
382+ http://gitlab/api/v4/projects/${aliceProjectId}/repository/archive.tar.gz)" = "200" ]
383+ """
384+ )
385+ gitlab.succeed(
386+ """
387+ curl \
388+ -H @/tmp/headers-alice \
389+ http://gitlab/api/v4/projects/${aliceProjectId}/repository/archive.tar.gz > /tmp/archive.tar.gz
390+ """
391+ )
392+ gitlab.succeed("test -s /tmp/archive.tar.gz")
393+
394+ with subtest("Download archive.tar.bz2"):
395+ gitlab.succeed(
396+ """
397+ [ "$(curl \
398+ -o /dev/null \
399+ -w '%{http_code}' \
400+ -H @/tmp/headers-alice \
401+ http://gitlab/api/v4/projects/${aliceProjectId}/repository/archive.tar.bz2)" = "200" ]
402+ """
403+ )
404+ gitlab.succeed(
405+ """
406+ curl \
407+ -H @/tmp/headers-alice \
408+ http://gitlab/api/v4/projects/${aliceProjectId}/repository/archive.tar.bz2 > /tmp/archive.tar.bz2
409+ """
410+ )
411+ gitlab.succeed("test -s /tmp/archive.tar.bz2")
133412 '';
134413
135414 in ''
nixos/tests/haste-server.nixnew file+23
@@ -0,0 +1,23 @@
1+import ./make-test-python.nix ({ pkgs, lib, ... }:
2+ {
3+ name = "haste-server";
4+ meta.maintainers = with lib.maintainers; [ mkg20001 ];
5+
6+ nodes.machine = { pkgs, ... }: {
7+ environment.systemPackages = with pkgs; [
8+ curl
9+ jq
10+ ];
11+
12+ services.haste-server = {
13+ enable = true;
14+ };
15+ };
16+
17+ testScript = ''
18+ machine.wait_for_unit("haste-server")
19+ machine.wait_until_succeeds("curl -s localhost:7777")
20+ machine.succeed('curl -s -X POST http://localhost:7777/documents -d "Hello World!" > bla')
21+ machine.succeed('curl http://localhost:7777/raw/$(cat bla | jq -r .key) | grep "Hello World"')
22+ '';
23+ })
nixos/tests/hbase.nixnew file+30
@@ -0,0 +1,30 @@
1+import ./make-test-python.nix ({ pkgs, lib, package ? pkgs.hbase, ... }:
2+{
3+ name = "hbase";
4+
5+ meta = with lib.maintainers; {
6+ maintainers = [ illustris ];
7+ };
8+
9+ nodes = {
10+ hbase = { pkgs, ... }: {
11+ services.hbase = {
12+ enable = true;
13+ inherit package;
14+ # Needed for standalone mode in hbase 2+
15+ # This setting and standalone mode are not suitable for production
16+ settings."hbase.unsafe.stream.capability.enforce" = "false";
17+ };
18+ environment.systemPackages = with pkgs; [
19+ package
20+ ];
21+ };
22+ };
23+
24+ testScript = ''
25+ start_all()
26+ hbase.wait_for_unit("hbase.service")
27+ hbase.wait_until_succeeds("echo \"create 't1','f1'\" | sudo -u hbase hbase shell -n")
28+ assert "NAME => 'f1'" in hbase.succeed("echo \"describe 't1'\" | sudo -u hbase hbase shell -n")
29+ '';
30+})
nixos/tests/hibernate.nix+12−1
@@ -3,6 +3,7 @@
33{ system ? builtins.currentSystem
44, config ? {}
55, pkgs ? import ../.. { inherit system config; }
6+, systemdStage1 ? false
67}:
78
89with import ../lib/testing-python.nix { inherit system pkgs; };
@@ -29,6 +30,11 @@ let
2930 "/".device = "/dev/vda2";
3031 };
3132 swapDevices = mkOverride 0 [ { device = "/dev/vda1"; } ];
33+ boot.resumeDevice = mkIf systemdStage1 "/dev/vda1";
34+ boot.initrd.systemd = mkIf systemdStage1 {
35+ enable = true;
36+ emergencyAccess = true;
37+ };
3238 };
3339 installedSystem = (import ../lib/eval-config.nix {
3440 inherit system;
@@ -39,7 +45,7 @@ in makeTest {
3945
4046 nodes = {
4147 # System configuration used for installing the installedConfig from above.
42− nodes.machine = { config, lib, pkgs, ... }: with lib; {
48+ machine = { config, lib, pkgs, ... }: with lib; {
4349 imports = [
4450 ../modules/profiles/installation-device.nix
4551 ../modules/profiles/base.nix
@@ -117,6 +123,11 @@ in makeTest {
117123 resume = create_named_machine("resume")
118124 resume.start()
119125 resume.succeed("grep 'not persisted to disk' /run/test/suspended")
126+
127+ # Ensure we don't restore from hibernation when booting again
128+ resume.crash()
129+ resume.wait_for_unit("default.target")
130+ resume.fail("grep 'not persisted to disk' /run/test/suspended")
120131 '';
121132
122133}
nixos/tests/installer-systemd-stage-1.nixnew file+33
@@ -0,0 +1,33 @@
1+{ system ? builtins.currentSystem
2+, config ? {}
3+, pkgs ? import ../.. { inherit system config; }
4+}:
5+
6+{
7+ # Some of these tests don't work with systemd stage 1 yet. Uncomment
8+ # them when fixed.
9+ inherit (import ./installer.nix { inherit system config pkgs; systemdStage1 = true; })
10+ # bcache
11+ # btrfsSimple
12+ # btrfsSubvolDefault
13+ # btrfsSubvols
14+ # encryptedFSWithKeyfile
15+ # grub1
16+ # luksroot
17+ # luksroot-format1
18+ # luksroot-format2
19+ # lvm
20+ separateBoot
21+ separateBootFat
22+ simple
23+ simpleLabels
24+ simpleProvided
25+ simpleSpecialised
26+ simpleUefiGrub
27+ simpleUefiGrubSpecialisation
28+ simpleUefiSystemdBoot
29+ # swraid
30+ # zfsroot
31+ ;
32+
33+}
nixos/tests/installer.nix+15−1
@@ -1,6 +1,7 @@
11{ system ? builtins.currentSystem,
22 config ? {},
3− pkgs ? import ../.. { inherit system config; }
3+ pkgs ? import ../.. { inherit system config; },
4+ systemdStage1 ? false
45}:
56
67with import ../lib/testing-python.nix { inherit system pkgs; };
@@ -23,6 +24,8 @@ let
2324 # To ensure that we can rebuild the grub configuration on the nixos-rebuild
2425 system.extraDependencies = with pkgs; [ stdenvNoCC ];
2526
27+ ${optionalString systemdStage1 "boot.initrd.systemd.enable = true;"}
28+
2629 ${optionalString (bootLoader == "grub") ''
2730 boot.loader.grub.version = ${toString grubVersion};
2831 ${optionalString (grubVersion == 1) ''
@@ -290,6 +293,8 @@ let
290293 virtualisation.cores = 8;
291294 virtualisation.memorySize = 1536;
292295
296+ boot.initrd.systemd.enable = systemdStage1;
297+
293298 # Use a small /dev/vdb as the root disk for the
294299 # installer. This ensures the target disk (/dev/vda) is
295300 # the same during and after installation.
@@ -299,6 +304,13 @@ let
299304 virtualisation.qemu.diskInterface =
300305 if grubVersion == 1 then "scsi" else "virtio";
301306
307+ # We don't want to have any networking in the guest whatsoever.
308+ # Also, if any vlans are enabled, the guest will reboot
309+ # (with a different configuration for legacy reasons),
310+ # and spend 5 minutes waiting for the vlan interface to show up
311+ # (which will never happen).
312+ virtualisation.vlans = [];
313+
302314 boot.loader.systemd-boot.enable = mkIf (bootLoader == "systemd-boot") true;
303315
304316 hardware.enableAllFirmware = mkForce false;
@@ -312,6 +324,8 @@ let
312324 desktop-file-utils
313325 docbook5
314326 docbook_xsl_ns
327+ kmod.dev
328+ libarchive.dev
315329 libxml2.bin
316330 libxslt.bin
317331 nixos-artwork.wallpapers.simple-dark-gray-bottom
nixos/tests/jenkins.nix+2
@@ -90,6 +90,8 @@ import ./make-test-python.nix ({ pkgs, ...} : {
9090
9191 slave.fail("systemctl is-enabled jenkins.service")
9292
93+ slave.succeed("java -fullversion")
94+
9395 with subtest("jobs are declarative"):
9496 # Check that jobs are created on disk.
9597 master.wait_for_unit("jenkins-job-builder")
nixos/tests/kexec.nix+44−16
@@ -1,22 +1,50 @@
1−# Test whether fast reboots via kexec work.
2−
3−import ./make-test-python.nix ({ pkgs, lib, ...} : {
1+import ./make-test-python.nix ({ pkgs, lib, ... }: {
42 name = "kexec";
53 meta = with lib.maintainers; {
6− maintainers = [ eelco ];
4+ maintainers = [ flokli lassulus ];
5+ };
6+
7+ nodes = {
8+ node1 = { ... }: {
9+ virtualisation.vlans = [ ];
10+ virtualisation.memorySize = 4 * 1024;
11+ virtualisation.useBootLoader = true;
12+ virtualisation.useEFIBoot = true;
13+ boot.loader.systemd-boot.enable = true;
14+ boot.loader.efi.canTouchEfiVariables = true;
15+ };
16+
17+ node2 = { modulesPath, ... }: {
18+ virtualisation.vlans = [ ];
19+ environment.systemPackages = [ pkgs.hello ];
20+ imports = [
21+ "${modulesPath}/installer/kexec/kexec-boot.nix"
22+ "${modulesPath}/profiles/minimal.nix"
23+ ];
24+ };
725 };
826
9− nodes.machine = { ... }:
10− { virtualisation.vlans = [ ]; };
27+ testScript = { nodes, ... }: ''
28+ # Test whether reboot via kexec works.
29+ node1.wait_for_unit("multi-user.target")
30+ node1.succeed('kexec --load /run/current-system/kernel --initrd /run/current-system/initrd --command-line "$(</proc/cmdline)"')
31+ node1.execute("systemctl kexec >&2 &", check_return=False)
32+ node1.connected = False
33+ node1.connect()
34+ node1.wait_for_unit("multi-user.target")
35+
36+ # Check if the machine with kexec-boot.nix profile boots up
37+ node2.wait_for_unit("multi-user.target")
38+ node2.shutdown()
39+
40+ # Kexec node1 to the toplevel of node2 via the kexec-boot script
41+ node1.succeed('touch /run/foo')
42+ node1.fail('hello')
43+ node1.execute('${nodes.node2.config.system.build.kexecBoot}/kexec-boot', check_return=False)
44+ node1.succeed('! test -e /run/foo')
45+ node1.succeed('hello')
46+ node1.succeed('[ "$(hostname)" = "node2" ]')
1147
12− testScript =
13− ''
14− machine.wait_for_unit("multi-user.target")
15− machine.succeed('kexec --load /run/current-system/kernel --initrd /run/current-system/initrd --command-line "$(</proc/cmdline)"')
16− machine.execute("systemctl kexec >&2 &", check_return=False)
17− machine.connected = False
18− machine.connect()
19− machine.wait_for_unit("multi-user.target")
20− machine.shutdown()
21− '';
48+ node1.shutdown()
49+ '';
2250})
nixos/tests/keycloak.nix+15−11
@@ -4,7 +4,7 @@
44
55let
66 certs = import ./common/acme/server/snakeoil-certs.nix;
7− frontendUrl = "https://${certs.domain}/auth";
7+ frontendUrl = "https://${certs.domain}";
88 initialAdminPassword = "h4IhoJFnt2iQIR9";
99
1010 keycloakTest = import ./make-test-python.nix (
@@ -27,20 +27,23 @@ let
2727
2828 services.keycloak = {
2929 enable = true;
30− inherit frontendUrl initialAdminPassword;
31− sslCertificate = certs.${certs.domain}.cert;
32− sslCertificateKey = certs.${certs.domain}.key;
30+ settings = {
31+ hostname = certs.domain;
32+ };
33+ inherit initialAdminPassword;
34+ sslCertificate = "${certs.${certs.domain}.cert}";
35+ sslCertificateKey = "${certs.${certs.domain}.key}";
3336 database = {
3437 type = databaseType;
3538 username = "bogus";
36− passwordFile = pkgs.writeText "dbPassword" "wzf6vOCbPp6cqTH";
39+ name = "also bogus";
40+ passwordFile = "${pkgs.writeText "dbPassword" "wzf6vOCbPp6cqTH"}";
3741 };
3842 plugins = with config.services.keycloak.package.plugins; [
3943 keycloak-discord
4044 keycloak-metrics-spi
4145 ];
4246 };
43−
4447 environment.systemPackages = with pkgs; [
4548 xmlstarlet
4649 html-tidy
@@ -99,9 +102,9 @@ let
99102 in ''
100103 keycloak.start()
101104 keycloak.wait_for_unit("keycloak.service")
105+ keycloak.wait_for_open_port(443)
102106 keycloak.wait_until_succeeds("curl -sSf ${frontendUrl}")
103107
104−
105108 ### Realm Setup ###
106109
107110 # Get an admin interface access token
@@ -117,8 +120,8 @@ let
117120 # Register the metrics SPI
118121 keycloak.succeed(
119122 "${pkgs.jre}/bin/keytool -import -alias snakeoil -file ${certs.ca.cert} -storepass aaaaaa -keystore cacert.jks -noprompt",
120− "KC_OPTS='-Djavax.net.ssl.trustStore=cacert.jks -Djavax.net.ssl.trustStorePassword=aaaaaa' ${pkgs.keycloak}/bin/kcadm.sh config credentials --server '${frontendUrl}' --realm master --user admin --password '${initialAdminPassword}'",
121− "KC_OPTS='-Djavax.net.ssl.trustStore=cacert.jks -Djavax.net.ssl.trustStorePassword=aaaaaa' ${pkgs.keycloak}/bin/kcadm.sh update events/config -s 'eventsEnabled=true' -s 'adminEventsEnabled=true' -s 'eventsListeners+=metrics-listener'",
123+ "KC_OPTS='-Djavax.net.ssl.trustStore=cacert.jks -Djavax.net.ssl.trustStorePassword=aaaaaa' kcadm.sh config credentials --server '${frontendUrl}' --realm master --user admin --password '${initialAdminPassword}'",
124+ "KC_OPTS='-Djavax.net.ssl.trustStore=cacert.jks -Djavax.net.ssl.trustStorePassword=aaaaaa' kcadm.sh update events/config -s 'eventsEnabled=true' -s 'adminEventsEnabled=true' -s 'eventsListeners+=metrics-listener'",
122125 "curl -sSf '${frontendUrl}/realms/master/metrics' | grep '^keycloak_admin_event_UPDATE'"
123126 )
124127
@@ -143,7 +146,7 @@ let
143146 # post url.
144147 keycloak.succeed(
145148 "curl -sSf -c cookie '${frontendUrl}/realms/${realm.realm}/protocol/openid-connect/auth?client_id=${client.name}&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=openid+email&response_type=code&response_mode=query&nonce=qw4o89g3qqm' >login_form",
146− "tidy -q -m login_form || true",
149+ "tidy -asxml -q -m login_form || true",
147150 "xml sel -T -t -m \"_:html/_:body/_:div/_:div/_:div/_:div/_:div/_:div/_:form[@id='kc-form-login']\" -v @action login_form >form_post_url",
148151 )
149152
@@ -151,7 +154,7 @@ let
151154 # the HTML, then extract the authorization code.
152155 keycloak.succeed(
153156 "curl -sSf -L -b cookie -d 'username=${user.username}' -d 'password=${password}' -d 'credentialId=' \"$(<form_post_url)\" >auth_code_html",
154− "tidy -q -m auth_code_html || true",
157+ "tidy -asxml -q -m auth_code_html || true",
155158 "xml sel -T -t -m \"_:html/_:body/_:div/_:div/_:div/_:div/_:div/_:input[@id='code']\" -v @value auth_code_html >auth_code",
156159 )
157160
@@ -172,5 +175,6 @@ let
172175in
173176{
174177 postgres = keycloakTest { databaseType = "postgresql"; };
178+ mariadb = keycloakTest { databaseType = "mariadb"; };
175179 mysql = keycloakTest { databaseType = "mysql"; };
176180}
nixos/tests/logrotate.nix+125−10
@@ -1,26 +1,105 @@
11# Test logrotate service works and is enabled by default
22
3−import ./make-test-python.nix ({ pkgs, ...} : rec {
3+let
4+ importTest = { ... }: {
5+ services.logrotate.settings.import = {
6+ olddir = false;
7+ };
8+ };
9+
10+in
11+
12+import ./make-test-python.nix ({ pkgs, ... }: rec {
413 name = "logrotate";
514 meta = with pkgs.lib.maintainers; {
615 maintainers = [ martinetd ];
716 };
817
9− # default machine
10− nodes.machine = { ... }: {
18+ nodes = {
19+ defaultMachine = { ... }: { };
20+ failingMachine = { ... }: {
21+ services.logrotate.configFile = pkgs.writeText "logrotate.conf" ''
22+ # self-written config file
23+ su notarealuser notagroupeither
24+ '';
25+ };
26+ machine = { config, ... }: {
27+ imports = [ importTest ];
28+
29+ services.logrotate.settings = {
30+ # remove default frequency header and add another
31+ header = {
32+ frequency = null;
33+ delaycompress = true;
34+ };
35+ # extra global setting... affecting nothing
36+ last_line = {
37+ global = true;
38+ priority = 2000;
39+ shred = true;
40+ };
41+ # using mail somewhere should add --mail to logrotate invokation
42+ sendmail = {
43+ mail = "user@domain.tld";
44+ };
45+ # postrotate should be suffixed by 'endscript'
46+ postrotate = {
47+ postrotate = "touch /dev/null";
48+ };
49+ # check checkConfig works as expected: there is nothing to check here
50+ # except that the file build passes
51+ checkConf = {
52+ su = "root utmp";
53+ createolddir = "0750 root utmp";
54+ create = "root utmp";
55+ "create " = "0750 root utmp";
56+ };
57+ # multiple paths should be aggregated
58+ multipath = {
59+ files = [ "file1" "file2" ];
60+ };
61+ # overriding imported path should keep existing attributes
62+ # (e.g. olddir is still set)
63+ import = {
64+ notifempty = true;
65+ };
66+ };
67+ # extraConfig compatibility - should be added to top level, early.
68+ services.logrotate.extraConfig = ''
69+ nomail
70+ '';
71+ # paths compatibility
72+ services.logrotate.paths = {
73+ compat_path = {
74+ path = "compat_test_path";
75+ };
76+ # user/group should be grouped as 'su user group'
77+ compat_user = {
78+ user = config.users.users.root.name;
79+ group = "root";
80+ };
81+ # extraConfig in path should be added to block
82+ compat_extraConfig = {
83+ extraConfig = "dateext";
84+ };
85+ # keep -> rotate
86+ compat_keep = {
87+ keep = 1;
88+ };
89+ };
90+ };
1191 };
1292
1393 testScript =
1494 ''
1595 with subtest("whether logrotate works"):
16− machine.succeed(
17− # we must rotate once first to create logrotate stamp
18− "systemctl start logrotate.service")
96+ # we must rotate once first to create logrotate stamp
97+ defaultMachine.succeed("systemctl start logrotate.service")
1998 # we need to wait for console text once here to
2099 # clear console buffer up to this point for next wait
21− machine.wait_for_console_text('logrotate.service: Deactivated successfully')
100+ defaultMachine.wait_for_console_text('logrotate.service: Deactivated successfully')
22101
23− machine.succeed(
102+ defaultMachine.succeed(
24103 # wtmp is present in default config.
25104 "rm -f /var/log/wtmp*",
26105 # we need to give it at least 1MB
@@ -28,10 +107,46 @@ import ./make-test-python.nix ({ pkgs, ...} : rec {
28107
29108 # move into the future and check rotation.
30109 "date -s 'now + 1 month + 1 day'")
31− machine.wait_for_console_text('logrotate.service: Deactivated successfully')
32− machine.succeed(
110+ defaultMachine.wait_for_console_text('logrotate.service: Deactivated successfully')
111+ defaultMachine.succeed(
33112 # check rotate worked
34113 "[ -e /var/log/wtmp.1 ]",
35114 )
115+ with subtest("default config does not have mail"):
116+ defaultMachine.fail("systemctl cat logrotate.service | grep -- --mail")
117+ with subtest("using mails adds mail option"):
118+ machine.succeed("systemctl cat logrotate.service | grep -- --mail")
119+ with subtest("check generated config matches expectation"):
120+ machine.succeed(
121+ # copy conf to /tmp/logrotate.conf for easy grep
122+ "conf=$(systemctl cat logrotate | grep -oE '/nix/store[^ ]*logrotate.conf'); cp $conf /tmp/logrotate.conf",
123+ "! grep weekly /tmp/logrotate.conf",
124+ "grep -E '^delaycompress' /tmp/logrotate.conf",
125+ "tail -n 1 /tmp/logrotate.conf | grep shred",
126+ "sed -ne '/\"sendmail\" {/,/}/p' /tmp/logrotate.conf | grep 'mail user@domain.tld'",
127+ "sed -ne '/\"postrotate\" {/,/}/p' /tmp/logrotate.conf | grep endscript",
128+ "grep '\"file1\"\n\"file2\" {' /tmp/logrotate.conf",
129+ "sed -ne '/\"import\" {/,/}/p' /tmp/logrotate.conf | grep noolddir",
130+ "sed -ne '1,/^\"/p' /tmp/logrotate.conf | grep nomail",
131+ "grep '\"compat_test_path\" {' /tmp/logrotate.conf",
132+ "sed -ne '/\"compat_user\" {/,/}/p' /tmp/logrotate.conf | grep 'su root root'",
133+ "sed -ne '/\"compat_extraConfig\" {/,/}/p' /tmp/logrotate.conf | grep dateext",
134+ "[[ $(sed -ne '/\"compat_keep\" {/,/}/p' /tmp/logrotate.conf | grep -w rotate) = \" rotate 1\" ]]",
135+ "! sed -ne '/\"compat_keep\" {/,/}/p' /tmp/logrotate.conf | grep -w keep",
136+ )
137+ # also check configFile option
138+ failingMachine.succeed(
139+ "conf=$(systemctl cat logrotate | grep -oE '/nix/store[^ ]*logrotate.conf'); cp $conf /tmp/logrotate.conf",
140+ "grep 'self-written config' /tmp/logrotate.conf",
141+ )
142+ with subtest("Check logrotate-checkconf service"):
143+ machine.wait_for_unit("logrotate-checkconf.service")
144+ # wait_for_unit also asserts for success, so wait for
145+ # parent target instead and check manually.
146+ failingMachine.wait_for_unit("multi-user.target")
147+ info = failingMachine.get_unit_info("logrotate-checkconf.service")
148+ if info["ActiveState"] != "failed":
149+ raise Exception('logrotate-checkconf.service was not failed')
150+
36151 '';
37152})
nixos/tests/lvm2/default.nixnew file+45
@@ -0,0 +1,45 @@
1+{ system ? builtins.currentSystem
2+, config ? { }
3+, pkgs ? import ../../.. { inherit system config; }
4+, lib ? pkgs.lib
5+, kernelVersionsToTest ? [ "4.19" "5.4" "5.10" "5.15" "latest" ]
6+}:
7+
8+# For quickly running a test, the nixosTests.lvm2.lvm-thinpool-linux-latest attribute is recommended
9+let
10+ tests = let callTest = p: lib.flip (import p) { inherit system pkgs; }; in {
11+ thinpool = { test = callTest ./thinpool.nix; kernelFilter = lib.id; };
12+ # we would like to test all versions, but the kernel module currently does not compile against the other versions
13+ vdo = { test = callTest ./vdo.nix; kernelFilter = lib.filter (v: v == "5.15"); };
14+
15+
16+ # systemd in stage 1
17+ raid-sd-stage-1 = {
18+ test = callTest ./systemd-stage-1.nix;
19+ kernelFilter = lib.id;
20+ flavour = "raid";
21+ };
22+ thinpool-sd-stage-1 = {
23+ test = callTest ./systemd-stage-1.nix;
24+ kernelFilter = lib.id;
25+ flavour = "thinpool";
26+ };
27+ vdo-sd-stage-1 = {
28+ test = callTest ./systemd-stage-1.nix;
29+ kernelFilter = lib.filter (v: v == "5.15");
30+ flavour = "vdo";
31+ };
32+ };
33+in
34+lib.listToAttrs (
35+ lib.filter (x: x.value != {}) (
36+ lib.flip lib.concatMap kernelVersionsToTest (version:
37+ let
38+ v' = lib.replaceStrings [ "." ] [ "_" ] version;
39+ in
40+ lib.flip lib.mapAttrsToList tests (name: t:
41+ lib.nameValuePair "lvm-${name}-linux-${v'}" (lib.optionalAttrs (builtins.elem version (t.kernelFilter kernelVersionsToTest)) (t.test ({ kernelPackages = pkgs."linuxPackages_${v'}"; } // builtins.removeAttrs t [ "test" "kernelFilter" ])))
42+ )
43+ )
44+ )
45+)
nixos/tests/lvm2/systemd-stage-1.nixnew file+104
@@ -0,0 +1,104 @@
1+{ kernelPackages ? null, flavour }: let
2+ preparationCode = {
3+ raid = ''
4+ machine.succeed("vgcreate test_vg /dev/vdc /dev/vdd")
5+ machine.succeed("lvcreate -L 512M --type raid0 test_vg -n test_lv")
6+ '';
7+
8+ thinpool = ''
9+ machine.succeed("vgcreate test_vg /dev/vdc")
10+ machine.succeed("lvcreate -L 512M -T test_vg/test_thin_pool")
11+ machine.succeed("lvcreate -n test_lv -V 16G --thinpool test_thin_pool test_vg")
12+ '';
13+
14+ vdo = ''
15+ machine.succeed("vgcreate test_vg /dev/vdc")
16+ machine.succeed("lvcreate --type vdo -n test_lv -L 6G -V 12G test_vg/vdo_pool_lv")
17+ '';
18+ }.${flavour};
19+
20+ extraConfig = {
21+ raid = {
22+ boot.initrd.kernelModules = [
23+ "dm-raid"
24+ "raid0"
25+ ];
26+ };
27+
28+ thinpool = {
29+ services.lvm = {
30+ boot.thin.enable = true;
31+ dmeventd.enable = true;
32+ };
33+ };
34+
35+ vdo = {
36+ services.lvm = {
37+ boot.vdo.enable = true;
38+ dmeventd.enable = true;
39+ };
40+ };
41+ }.${flavour};
42+
43+ extraCheck = {
44+ raid = ''
45+ "test_lv" in machine.succeed("lvs --select segtype=raid0")
46+ '';
47+
48+ thinpool = ''
49+ "test_lv" in machine.succeed("lvs --select segtype=thin-pool")
50+ '';
51+
52+ vdo = ''
53+ "test_lv" in machine.succeed("lvs --select segtype=vdo")
54+ '';
55+ }.${flavour};
56+
57+in import ../make-test-python.nix ({ pkgs, ... }: {
58+ name = "lvm2-${flavour}-systemd-stage-1";
59+ meta.maintainers = with pkgs.lib.maintainers; [ das_j ];
60+
61+ nodes.machine = { pkgs, lib, ... }: {
62+ imports = [ extraConfig ];
63+ # Use systemd-boot
64+ virtualisation = {
65+ emptyDiskImages = [ 8192 8192 ];
66+ useBootLoader = true;
67+ useEFIBoot = true;
68+ };
69+ boot.loader.systemd-boot.enable = true;
70+ boot.loader.efi.canTouchEfiVariables = true;
71+
72+ environment.systemPackages = with pkgs; [ e2fsprogs ]; # for mkfs.ext4
73+ boot = {
74+ initrd.systemd = {
75+ enable = true;
76+ emergencyAccess = true;
77+ };
78+ initrd.services.lvm.enable = true;
79+ kernelPackages = lib.mkIf (kernelPackages != null) kernelPackages;
80+ };
81+
82+ specialisation.boot-lvm.configuration.virtualisation.bootDevice = "/dev/test_vg/test_lv";
83+ };
84+
85+ testScript = ''
86+ machine.wait_for_unit("multi-user.target")
87+ # Create a VG for the root
88+ ${preparationCode}
89+ machine.succeed("mkfs.ext4 /dev/test_vg/test_lv")
90+ machine.succeed("mkdir -p /mnt && mount /dev/test_vg/test_lv /mnt && echo hello > /mnt/test && umount /mnt")
91+
92+ # Boot from LVM
93+ machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-lvm.conf")
94+ machine.succeed("sync")
95+ machine.crash()
96+ machine.wait_for_unit("multi-user.target")
97+
98+ # Ensure we have successfully booted from LVM
99+ assert "(initrd)" in machine.succeed("systemd-analyze") # booted with systemd in stage 1
100+ assert "/dev/mapper/test_vg-test_lv on / type ext4" in machine.succeed("mount")
101+ assert "hello" in machine.succeed("cat /test")
102+ ${extraCheck}
103+ '';
104+})
nixos/tests/lvm2/thinpool.nixnew file+32
@@ -0,0 +1,32 @@
1+{ kernelPackages ? null }:
2+import ../make-test-python.nix ({ pkgs, ... }: {
3+ name = "lvm2-thinpool";
4+ meta.maintainers = with pkgs.lib.maintainers; [ ajs124 ];
5+
6+ nodes.machine = { pkgs, lib, ... }: {
7+ virtualisation.emptyDiskImages = [ 4096 ];
8+ services.lvm = {
9+ boot.thin.enable = true;
10+ dmeventd.enable = true;
11+ };
12+ environment.systemPackages = with pkgs; [ xfsprogs ];
13+ environment.etc."lvm/lvm.conf".text = ''
14+ activation/thin_pool_autoextend_percent = 10
15+ activation/thin_pool_autoextend_threshold = 80
16+ '';
17+ boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; };
18+ };
19+
20+ testScript = ''
21+ machine.succeed("vgcreate test_vg /dev/vdb")
22+ machine.succeed("lvcreate -L 512M -T test_vg/test_thin_pool")
23+ machine.succeed("lvcreate -n test_lv -V 16G --thinpool test_thin_pool test_vg")
24+ machine.succeed("mkfs.xfs /dev/test_vg/test_lv")
25+ machine.succeed("mkdir /mnt; mount /dev/test_vg/test_lv /mnt")
26+ assert "/dev/mapper/test_vg-test_lv" == machine.succeed("findmnt -no SOURCE /mnt").strip()
27+ machine.succeed("dd if=/dev/zero of=/mnt/empty.file bs=1M count=1024")
28+ machine.succeed("journalctl -u dm-event.service | grep \"successfully resized\"")
29+ machine.succeed("umount /mnt")
30+ machine.succeed("vgchange -a n")
31+ '';
32+})
nixos/tests/lvm2/vdo.nixnew file+27
@@ -0,0 +1,27 @@
1+{ kernelPackages ? null }:
2+import ../make-test-python.nix ({ pkgs, ... }: {
3+ name = "lvm2-vdo";
4+ meta.maintainers = with pkgs.lib.maintainers; [ ajs124 ];
5+
6+ nodes.machine = { pkgs, lib, ... }: {
7+ # Minimum required size for VDO volume: 5063921664 bytes
8+ virtualisation.emptyDiskImages = [ 8192 ];
9+ services.lvm = {
10+ boot.vdo.enable = true;
11+ dmeventd.enable = true;
12+ };
13+ environment.systemPackages = with pkgs; [ xfsprogs ];
14+ boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; };
15+ };
16+
17+ testScript = ''
18+ machine.succeed("vgcreate test_vg /dev/vdb")
19+ machine.succeed("lvcreate --type vdo -n vdo_lv -L 6G -V 12G test_vg/vdo_pool_lv")
20+ machine.succeed("mkfs.xfs -K /dev/test_vg/vdo_lv")
21+ machine.succeed("mkdir /mnt; mount /dev/test_vg/vdo_lv /mnt")
22+ assert "/dev/mapper/test_vg-vdo_lv" == machine.succeed("findmnt -no SOURCE /mnt").strip()
23+ machine.succeed("umount /mnt")
24+ machine.succeed("vdostats")
25+ machine.succeed("vgchange -a n")
26+ '';
27+})
nixos/tests/lxd-image-server.nix+15−48
@@ -1,54 +1,21 @@
1−import ./make-test-python.nix ({ pkgs, ...} :
1+import ./make-test-python.nix ({ pkgs, lib, ... } :
22
33let
4− # Since we don't have access to the internet during the tests, we have to
5− # pre-fetch lxd containers beforehand.
6− #
7− # I've chosen to import Alpine Linux, because its image is turbo-tiny and,
8− # generally, sufficient for our tests.
9− alpine-meta = pkgs.fetchurl {
10− url = "https://tarballs.nixos.org/alpine/3.12/lxd.tar.xz";
11− hash = "sha256-1tcKaO9lOkvqfmG/7FMbfAEToAuFy2YMewS8ysBKuLA=";
12− };
13−
14− alpine-rootfs = pkgs.fetchurl {
15− url = "https://tarballs.nixos.org/alpine/3.12/rootfs.tar.xz";
16− hash = "sha256-Tba9sSoaiMtQLY45u7p5DMqXTSDgs/763L/SQp0bkCA=";
4+ lxd-image = import ../release.nix {
5+ configuration = {
6+ # Building documentation makes the test unnecessarily take a longer time:
7+ documentation.enable = lib.mkForce false;
8+ };
179 };
1810
19− lxd-config = pkgs.writeText "config.yaml" ''
20− storage_pools:
21− - name: default
22− driver: dir
23− config:
24− source: /var/lxd-pool
25−
26− networks:
27− - name: lxdbr0
28− type: bridge
29− config:
30− ipv4.address: auto
31− ipv6.address: none
32−
33− profiles:
34− - name: default
35− devices:
36− eth0:
37− name: eth0
38− network: lxdbr0
39− type: nic
40− root:
41− path: /
42− pool: default
43− type: disk
44− '';
45−
11+ lxd-image-metadata = lxd-image.lxdMeta.${pkgs.system};
12+ lxd-image-rootfs = lxd-image.lxdImage.${pkgs.system};
4613
4714in {
4815 name = "lxd-image-server";
4916
5017 meta = with pkgs.lib.maintainers; {
51− maintainers = [ mkg20001 ];
18+ maintainers = [ mkg20001 patryk27 ];
5219 };
5320
5421 nodes.machine = { lib, ... }: {
@@ -100,20 +67,20 @@ in {
10067 # lxd expects the pool's directory to already exist
10168 machine.succeed("mkdir /var/lxd-pool")
10269
103−
10470 machine.succeed(
105− "cat ${lxd-config} | lxd init --preseed"
71+ "cat ${./common/lxd/config.yaml} | lxd init --preseed"
10672 )
10773
10874 machine.succeed(
109− "lxc image import ${alpine-meta} ${alpine-rootfs} --alias alpine"
75+ "lxc image import ${lxd-image-metadata}/*/*.tar.xz ${lxd-image-rootfs}/*/*.tar.xz --alias nixos"
11076 )
11177
112− loc = "/var/www/simplestreams/images/iats/alpine/amd64/default/v1"
78+ loc = "/var/www/simplestreams/images/iats/nixos/amd64/default/v1"
11379
11480 with subtest("push image to server"):
115− machine.succeed("lxc launch alpine test")
116− machine.succeed("lxc stop test")
81+ machine.succeed("lxc launch nixos test")
82+ machine.sleep(5)
83+ machine.succeed("lxc stop -f test")
11784 machine.succeed("lxc publish --public test --alias=testimg")
11885 machine.succeed("lxc image export testimg")
11986 machine.succeed("ls >&2")
nixos/tests/lxd-image.nixdeleted−89
@@ -1,89 +0,0 @@
1−# This test ensures that the nixOS lxd images builds and functions properly
2−# It has been extracted from `lxd.nix` to seperate failures of just the image and the lxd software
3−
4−import ./make-test-python.nix ({ pkgs, ...} : let
5− release = import ../release.nix {
6− /* configuration = {
7− environment.systemPackages = with pkgs; [ stdenv ]; # inject stdenv so rebuild test works
8− }; */
9− };
10−
11− metadata = release.lxdMeta.${pkgs.system};
12− image = release.lxdImage.${pkgs.system};
13−
14− lxd-config = pkgs.writeText "config.yaml" ''
15− storage_pools:
16− - name: default
17− driver: dir
18− config:
19− source: /var/lxd-pool
20−
21− networks:
22− - name: lxdbr0
23− type: bridge
24− config:
25− ipv4.address: auto
26− ipv6.address: none
27−
28− profiles:
29− - name: default
30− devices:
31− eth0:
32− name: eth0
33− network: lxdbr0
34− type: nic
35− root:
36− path: /
37− pool: default
38− type: disk
39− '';
40−in {
41− name = "lxd-image";
42−
43− meta = with pkgs.lib.maintainers; {
44− maintainers = [ mkg20001 ];
45− };
46−
47− nodes.machine = { lib, ... }: {
48− virtualisation = {
49− # disk full otherwise
50− diskSize = 2048;
51−
52− lxc.lxcfs.enable = true;
53− lxd.enable = true;
54− };
55− };
56−
57− testScript = ''
58− machine.wait_for_unit("sockets.target")
59− machine.wait_for_unit("lxd.service")
60− machine.wait_for_file("/var/lib/lxd/unix.socket")
61−
62− # It takes additional second for lxd to settle
63− machine.sleep(1)
64−
65− # lxd expects the pool's directory to already exist
66− machine.succeed("mkdir /var/lxd-pool")
67−
68− machine.succeed(
69− "cat ${lxd-config} | lxd init --preseed"
70− )
71−
72− # TODO: test custom built container aswell
73−
74− with subtest("importing container works"):
75− machine.succeed("lxc image import ${metadata}/*/*.tar.xz ${image}/*/*.tar.xz --alias nixos")
76−
77− with subtest("launching container works"):
78− machine.succeed("lxc launch nixos machine -c security.nesting=true")
79− # make sure machine boots up properly
80− machine.sleep(5)
81−
82− with subtest("container shell works"):
83− machine.succeed("echo true | lxc exec machine /run/current-system/sw/bin/bash -")
84− machine.succeed("lxc exec machine /run/current-system/sw/bin/true")
85−
86− # with subtest("rebuilding works"):
87− # machine.succeed("lxc exec machine /run/current-system/sw/bin/nixos-rebuild switch")
88− '';
89−})
nixos/tests/lxd.nix+40−63
@@ -1,48 +1,18 @@
1−import ./make-test-python.nix ({ pkgs, ...} :
1+import ./make-test-python.nix ({ pkgs, lib, ... } :
22
33let
4− # Since we don't have access to the internet during the tests, we have to
5− # pre-fetch lxd containers beforehand.
6− #
7− # I've chosen to import Alpine Linux, because its image is turbo-tiny and,
8− # generally, sufficient for our tests.
9− alpine-meta = pkgs.fetchurl {
10− url = "https://tarballs.nixos.org/alpine/3.12/lxd.tar.xz";
11− hash = "sha256-1tcKaO9lOkvqfmG/7FMbfAEToAuFy2YMewS8ysBKuLA=";
12− };
4+ lxd-image = import ../release.nix {
5+ configuration = {
6+ # Building documentation makes the test unnecessarily take a longer time:
7+ documentation.enable = lib.mkForce false;
138
14− alpine-rootfs = pkgs.fetchurl {
15− url = "https://tarballs.nixos.org/alpine/3.12/rootfs.tar.xz";
16− hash = "sha256-Tba9sSoaiMtQLY45u7p5DMqXTSDgs/763L/SQp0bkCA=";
9+ # Our tests require `grep` & friends:
10+ environment.systemPackages = with pkgs; [ busybox ];
11+ };
1712 };
1813
19− lxd-config = pkgs.writeText "config.yaml" ''
20− storage_pools:
21− - name: default
22− driver: dir
23− config:
24− source: /var/lxd-pool
25−
26− networks:
27− - name: lxdbr0
28− type: bridge
29− config:
30− ipv4.address: auto
31− ipv6.address: none
32−
33− profiles:
34− - name: default
35− devices:
36− eth0:
37− name: eth0
38− network: lxdbr0
39− type: nic
40− root:
41− path: /
42− pool: default
43− type: disk
44− '';
45−
14+ lxd-image-metadata = lxd-image.lxdMeta.${pkgs.system};
15+ lxd-image-rootfs = lxd-image.lxdImage.${pkgs.system};
4616
4717in {
4818 name = "lxd";
@@ -53,6 +23,8 @@ in {
5323
5424 nodes.machine = { lib, ... }: {
5525 virtualisation = {
26+ diskSize = 2048;
27+
5628 # Since we're testing `limits.cpu`, we've gotta have a known number of
5729 # cores to lean on
5830 cores = 2;
@@ -77,61 +49,66 @@ in {
7749 machine.succeed("mkdir /var/lxd-pool")
7850
7951 machine.succeed(
80− "cat ${lxd-config} | lxd init --preseed"
52+ "cat ${./common/lxd/config.yaml} | lxd init --preseed"
8153 )
8254
8355 machine.succeed(
84− "lxc image import ${alpine-meta} ${alpine-rootfs} --alias alpine"
56+ "lxc image import ${lxd-image-metadata}/*/*.tar.xz ${lxd-image-rootfs}/*/*.tar.xz --alias nixos"
8557 )
8658
87− with subtest("Containers can be launched and destroyed"):
88− machine.succeed("lxc launch alpine test")
89− machine.succeed("lxc exec test true")
90− machine.succeed("lxc delete -f test")
59+ with subtest("Container can be managed"):
60+ machine.succeed("lxc launch nixos container")
61+ machine.sleep(5)
62+ machine.succeed("echo true | lxc exec container /run/current-system/sw/bin/bash -")
63+ machine.succeed("lxc exec container true")
64+ machine.succeed("lxc delete -f container")
9165
92− with subtest("Containers are being mounted with lxcfs inside"):
93− machine.succeed("lxc launch alpine test")
66+ with subtest("Container is mounted with lxcfs inside"):
67+ machine.succeed("lxc launch nixos container")
68+ machine.sleep(5)
9469
9570 ## ---------- ##
9671 ## limits.cpu ##
9772
98− machine.succeed("lxc config set test limits.cpu 1")
99− machine.succeed("lxc restart test")
73+ machine.succeed("lxc config set container limits.cpu 1")
74+ machine.succeed("lxc restart container")
75+ machine.sleep(5)
10076
101− # Since Alpine doesn't have `nproc` pre-installed, we've gotta resort
102− # to the primal methods
10377 assert (
10478 "1"
105− == machine.succeed("lxc exec test grep -- -c ^processor /proc/cpuinfo").strip()
79+ == machine.succeed("lxc exec container grep -- -c ^processor /proc/cpuinfo").strip()
10680 )
10781
108− machine.succeed("lxc config set test limits.cpu 2")
109− machine.succeed("lxc restart test")
82+ machine.succeed("lxc config set container limits.cpu 2")
83+ machine.succeed("lxc restart container")
84+ machine.sleep(5)
11085
11186 assert (
11287 "2"
113− == machine.succeed("lxc exec test grep -- -c ^processor /proc/cpuinfo").strip()
88+ == machine.succeed("lxc exec container grep -- -c ^processor /proc/cpuinfo").strip()
11489 )
11590
11691 ## ------------- ##
11792 ## limits.memory ##
11893
119− machine.succeed("lxc config set test limits.memory 64MB")
120− machine.succeed("lxc restart test")
94+ machine.succeed("lxc config set container limits.memory 64MB")
95+ machine.succeed("lxc restart container")
96+ machine.sleep(5)
12197
12298 assert (
12399 "MemTotal: 62500 kB"
124− == machine.succeed("lxc exec test grep -- MemTotal /proc/meminfo").strip()
100+ == machine.succeed("lxc exec container grep -- MemTotal /proc/meminfo").strip()
125101 )
126102
127− machine.succeed("lxc config set test limits.memory 128MB")
128− machine.succeed("lxc restart test")
103+ machine.succeed("lxc config set container limits.memory 128MB")
104+ machine.succeed("lxc restart container")
105+ machine.sleep(5)
129106
130107 assert (
131108 "MemTotal: 125000 kB"
132− == machine.succeed("lxc exec test grep -- MemTotal /proc/meminfo").strip()
109+ == machine.succeed("lxc exec container grep -- MemTotal /proc/meminfo").strip()
133110 )
134111
135− machine.succeed("lxc delete -f test")
112+ machine.succeed("lxc delete -f container")
136113 '';
137114})
nixos/tests/maestral.nixnew file+72
@@ -0,0 +1,72 @@
1+import ./make-test-python.nix ({ pkgs, ... }: {
2+ name = "maestral";
3+ meta = with pkgs.lib.maintainers; {
4+ maintainers = [ peterhoeg ];
5+ };
6+
7+ nodes =
8+ let
9+ common = attrs:
10+ pkgs.lib.recursiveUpdate
11+ {
12+ imports = [ ./common/user-account.nix ];
13+ systemd.user.services.maestral = {
14+ description = "Maestral Dropbox Client";
15+ serviceConfig.Type = "exec";
16+ };
17+ }
18+ attrs;
19+
20+ in
21+ {
22+ cli = { ... }: common {
23+ systemd.user.services.maestral = {
24+ wantedBy = [ "default.target" ];
25+ serviceConfig.ExecStart = "${pkgs.maestral}/bin/maestral start --foreground";
26+ };
27+ };
28+
29+ gui = { ... }: common {
30+ services.xserver = {
31+ enable = true;
32+ displayManager.sddm.enable = true;
33+ displayManager.defaultSession = "plasma";
34+ desktopManager.plasma5.enable = true;
35+ desktopManager.plasma5.runUsingSystemd = true;
36+ displayManager.autoLogin = {
37+ enable = true;
38+ user = "alice";
39+ };
40+ };
41+
42+ systemd.user.services = {
43+ maestral = {
44+ wantedBy = [ "graphical-session.target" ];
45+ serviceConfig.ExecStart = "${pkgs.maestral-gui}/bin/maestral_qt";
46+ };
47+ # PowerDevil doesn't like our VM
48+ plasma-powerdevil.enable = false;
49+ };
50+ };
51+ };
52+
53+ testScript = { nodes, ... }:
54+ let
55+ user = nodes.cli.config.users.users.alice;
56+ in
57+ ''
58+ start_all()
59+
60+ with subtest("CLI"):
61+ # we need SOME way to give the user an active login session
62+ cli.execute("loginctl enable-linger ${user.name}")
63+ cli.systemctl("start user@${toString user.uid}")
64+ cli.wait_for_unit("maestral.service", "${user.name}")
65+
66+ with subtest("GUI"):
67+ gui.wait_for_x()
68+ gui.succeed("xauth merge ${user.home}/.Xauthority")
69+ gui.wait_for_window("^Desktop ")
70+ gui.wait_for_unit("maestral.service", "${user.name}")
71+ '';
72+})
nixos/tests/mailcatcher.nix+7−2
@@ -9,8 +9,13 @@ import ./make-test-python.nix ({ lib, ... }:
99 {
1010 services.mailcatcher.enable = true;
1111
12− services.ssmtp.enable = true;
13− services.ssmtp.hostName = "localhost:1025";
12+ programs.msmtp = {
13+ enable = true;
14+ accounts.default = {
15+ host = "localhost";
16+ port = 1025;
17+ };
18+ };
1419
1520 environment.systemPackages = [ pkgs.mailutils ];
1621 };
nixos/tests/matrix-appservice-irc.nix+3
@@ -20,6 +20,9 @@ import ./make-test-python.nix ({ pkgs, ... }:
2020
2121 enable_registration = true;
2222
23+ # don't use this in production, always use some form of verification
24+ enable_registration_without_verification = true;
25+
2326 listeners = [ {
2427 # The default but tls=false
2528 bind_addresses = [
nixos/tests/mongodb.nix+4
@@ -37,6 +37,8 @@ import ./make-test-python.nix ({ pkgs, ... }:
3737 mongodb-3_6
3838 mongodb-4_0
3939 mongodb-4_2
40+ mongodb-4_4
41+ mongodb-5_0
4042 ];
4143 };
4244 };
@@ -48,6 +50,8 @@ import ./make-test-python.nix ({ pkgs, ... }:
4850 + runMongoDBTest pkgs.mongodb-3_6
4951 + runMongoDBTest pkgs.mongodb-4_0
5052 + runMongoDBTest pkgs.mongodb-4_2
53+ + runMongoDBTest pkgs.mongodb-4_4
54+ + runMongoDBTest pkgs.mongodb-5_0
5155 + ''
5256 node.shutdown()
5357 '';
nixos/tests/mtp.nixnew file+109
@@ -0,0 +1,109 @@
1+import ./make-test-python.nix ({ pkgs, ... }: {
2+ name = "mtp";
3+ meta = with pkgs.lib.maintainers; {
4+ maintainers = [ matthewcroughan nixinator ];
5+ };
6+
7+ nodes =
8+ {
9+ client = { config, pkgs, ... }: {
10+ # DBUS runs only once a user session is created, which means a user has to
11+ # login. Here, we log in as root. Once logged in, the gvfs-daemon service runs
12+ # as UID 0 in User-0.service
13+ services.getty.autologinUser = "root";
14+
15+ # XDG_RUNTIME_DIR is needed for running systemd-user services such as
16+ # gvfs-daemon as root.
17+ environment.variables.XDG_RUNTIME_DIR = "/run/user/0";
18+
19+ environment.systemPackages = with pkgs; [ usbutils glib jmtpfs tree ];
20+ services.gvfs.enable = true;
21+
22+ # Creates a usb-mtp device inside the VM, which is mapped to the host's
23+ # /tmp folder, it is able to write files to this location, but only has
24+ # permissions to read its own creations.
25+ virtualisation.qemu.options = [
26+ "-usb"
27+ "-device usb-mtp,rootdir=/tmp,readonly=false"
28+ ];
29+ };
30+ };
31+
32+
33+ testScript = { nodes, ... }:
34+ let
35+ # Creates a list of QEMU MTP devices matching USB ID (46f4:0004). This
36+ # value can be sourced in a shell script. This is so we can loop over the
37+ # devices we find, as this test may want to use more than one MTP device
38+ # in future.
39+ mtpDevices = pkgs.writeScript "mtpDevices.sh" ''
40+ export mtpDevices=$(lsusb -d 46f4:0004 | awk {'print $2","$4'} | sed 's/[:-]/ /g')
41+ '';
42+ # Qemu is only capable of creating an MTP device with Picture Transfer
43+ # Protocol. This means that gvfs must use gphoto2:// rather than mtp://
44+ # when mounting.
45+ # https://github.com/qemu/qemu/blob/970bc16f60937bcfd334f14c614bd4407c247961/hw/usb/dev-mtp.c#L278
46+ gvfs = rec {
47+ mountAllMtpDevices = pkgs.writeScript "mountAllMtpDevices.sh" ''
48+ set -e
49+ source ${mtpDevices}
50+ for i in $mtpDevices
51+ do
52+ gio mount "gphoto2://[usb:$i]/"
53+ done
54+ '';
55+ unmountAllMtpDevices = pkgs.writeScript "unmountAllMtpDevices.sh" ''
56+ set -e
57+ source ${mtpDevices}
58+ for i in $mtpDevices
59+ do
60+ gio mount -u "gphoto2://[usb:$i]/"
61+ done
62+ '';
63+ # gvfsTest:
64+ # 1. Creates a 10M test file
65+ # 2. Copies it to the device using GIO tools
66+ # 3. Checks for corruption with `diff`
67+ # 4. Removes the file, then unmounts the disks.
68+ gvfsTest = pkgs.writeScript "gvfsTest.sh" ''
69+ set -e
70+ source ${mtpDevices}
71+ ${mountAllMtpDevices}
72+ dd if=/dev/urandom of=testFile10M bs=1M count=10
73+ for i in $mtpDevices
74+ do
75+ gio copy ./testFile10M gphoto2://[usb:$i]/
76+ ls -lah /run/user/0/gvfs/*/testFile10M
77+ gio remove gphoto2://[usb:$i]/testFile10M
78+ done
79+ ${unmountAllMtpDevices}
80+ '';
81+ };
82+ jmtpfs = {
83+ # jmtpfsTest:
84+ # 1. Mounts the device on a dir named `phone` using jmtpfs
85+ # 2. Puts the current Nixpkgs libmtp version into a file
86+ # 3. Checks for corruption with `diff`
87+ # 4. Prints the directory tree
88+ jmtpfsTest = pkgs.writeScript "jmtpfsTest.sh" ''
89+ set -e
90+ mkdir phone
91+ jmtpfs phone
92+ echo "${pkgs.libmtp.version}" > phone/tmp/testFile
93+ echo "${pkgs.libmtp.version}" > testFile
94+ diff phone/tmp/testFile testFile
95+ tree phone
96+ '';
97+ };
98+ in
99+ # Using >&2 allows the results of the scripts to be printed to the terminal
100+ # when building this test with Nix. Scripts would otherwise complete
101+ # silently.
102+ ''
103+ start_all()
104+ client.wait_for_unit("multi-user.target")
105+ client.wait_for_unit("dbus.service")
106+ client.succeed("${gvfs.gvfsTest} >&2")
107+ client.succeed("${jmtpfs.jmtpfsTest} >&2")
108+ '';
109+})
nixos/tests/nar-serve.nix+1−1
@@ -31,7 +31,7 @@ import ./make-test-python.nix (
3131
3232 # Create a fake cache with Nginx service the static files
3333 server.succeed(
34− "nix copy --to file:///var/www ${pkgs.hello}"
34+ "nix --experimental-features nix-command copy --to file:///var/www ${pkgs.hello}"
3535 )
3636 server.wait_for_unit("nginx.service")
3737 server.wait_for_open_port(80)
nixos/tests/nbd.nix+16
@@ -28,6 +28,11 @@ import ./make-test-python.nix ({ pkgs, ... }:
2828 ## It's also a loopback device to test exporting /dev/...
2929 systemd.services.create-priv-file =
3030 mkCreateSmallFileService { path = "/vault-priv.disk"; loop = true; };
31+ ## `aaa.disk` is just here because "[aaa]" sorts before
32+ ## "[generic]" lexicographically, and nbd-server breaks if
33+ ## "[generic]" isn't the first section.
34+ systemd.services.create-aaa-file =
35+ mkCreateSmallFileService { path = "/aaa.disk"; };
3136
3237 # Needed only for nbd-client used in the tests.
3338 environment.systemPackages = [ pkgs.nbd ];
@@ -39,6 +44,9 @@ import ./make-test-python.nix ({ pkgs, ... }:
3944 services.nbd.server = {
4045 enable = true;
4146 exports = {
47+ aaa = {
48+ path = "/aaa.disk";
49+ };
4250 vault-pub = {
4351 path = "/vault-pub.disk";
4452 };
@@ -83,5 +91,13 @@ import ./make-test-python.nix ({ pkgs, ... }:
8391 if foundString != testString:
8492 raise Exception(f"Read the wrong string from nbd disk. Expected: '{testString}'. Found: '{foundString}'")
8593 server.succeed("nbd-client -d /dev/nbd0")
94+
95+ # Server: Successfully connect to the aaa disk
96+ server.succeed("nbd-client localhost ${toString listenPort} /dev/nbd0 -name aaa -persist")
97+ server.succeed(f"echo '{testString}' | dd of=/dev/nbd0 conv=notrunc")
98+ foundString = server.succeed(f"dd status=none if=/aaa.disk count={len(testString)}")[:len(testString)]
99+ if foundString != testString:
100+ raise Exception(f"Read the wrong string from nbd disk. Expected: '{testString}'. Found: '{foundString}'")
101+ server.succeed("nbd-client -d /dev/nbd0")
86102 '';
87103 })
nixos/tests/ncdns.nix+6−9
@@ -29,10 +29,10 @@ in
2929 };
3030
3131 nodes.server = { ... }: {
32− networking.nameservers = [ "127.0.0.1" ];
32+ networking.nameservers = [ "::1" ];
3333
3434 services.namecoind.rpc = {
35− address = "127.0.0.1";
35+ address = "::1";
3636 user = "namecoin";
3737 password = "secret";
3838 port = 8332;
@@ -45,7 +45,7 @@ in
4545 script = ''
4646 while true; do
4747 echo -e "HTTP/1.1 200 OK\n\n $(<${fakeReply})\n" \
48− | ${pkgs.netcat}/bin/nc -N -l 127.0.0.1 8332
48+ | ${pkgs.netcat}/bin/nc -N -l ::1 8332
4949 done
5050 '';
5151 };
@@ -58,14 +58,10 @@ in
5858 identity.address = "1.0.0.1";
5959 };
6060
61− services.pdns-recursor = {
62− enable = true;
63− dns.allowFrom = [ "127.0.0.0/8" ];
64− resolveNamecoin = true;
65− };
61+ services.pdns-recursor.enable = true;
62+ services.pdns-recursor.resolveNamecoin = true;
6663
6764 environment.systemPackages = [ pkgs.dnsutils ];
68−
6965 };
7066
7167 testScript =
@@ -91,6 +87,7 @@ in
9187 assert "example.com" in server.succeed("dig SOA @localhost -p 5333 bit")
9288
9389 with subtest("bit. zone forwarding works"):
90+ server.wait_for_unit("pdns-recursor")
9491 assert "1.2.3.4" in server.succeed("host test.bit")
9592 '';
9693})
nixos/tests/networking.nix+1−1
@@ -878,7 +878,7 @@ let
878878 linkConfig.Name = "custom_name";
879879 };
880880 }
881− else { services.udev.initrdRules = ''
881+ else { boot.initrd.services.udev.rules = ''
882882 SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:12:01:01", KERNEL=="eth*", NAME="custom_name"
883883 '';
884884 });
nixos/tests/nextcloud/with-mysql-and-memcached.nix+1−22
@@ -26,6 +26,7 @@ in {
2626 redis = false;
2727 memcached = true;
2828 };
29+ database.createLocally = true;
2930 config = {
3031 dbtype = "mysql";
3132 dbname = "nextcloud";
@@ -38,28 +39,6 @@ in {
3839 };
3940 };
4041
41− services.mysql = {
42− enable = true;
43− settings.mysqld = {
44− bind-address = "127.0.0.1";
45−
46− # FIXME(@Ma27) Nextcloud isn't compatible with mariadb 10.6,
47− # this is a workaround.
48− # See https://help.nextcloud.com/t/update-to-next-cloud-21-0-2-has-get-an-error/117028/22
49− innodb_read_only_compressed = 0;
50− };
51− package = pkgs.mariadb;
52−
53− initialScript = pkgs.writeText "mysql-init" ''
54− CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'hunter2';
55− CREATE DATABASE IF NOT EXISTS nextcloud;
56− GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,
57− CREATE TEMPORARY TABLES ON nextcloud.* TO 'nextcloud'@'localhost'
58− IDENTIFIED BY 'hunter2';
59− FLUSH privileges;
60− '';
61− };
62−
6342 systemd.services.nextcloud-setup= {
6443 requires = ["mysql.service"];
6544 after = ["mysql.service"];
nixos/tests/nixops/default.nix+1−1
@@ -97,7 +97,7 @@ let
9797 derivations and all build dependency outputs, all the way down.
9898 */
9999 allDrvOutputs = pkg:
100− let name = lib.strings.sanitizeDerivationName "allDrvOutputs-${pkg.pname or pkg.name or "unknown"}";
100+ let name = "allDrvOutputs-${pkg.pname or pkg.name or "unknown"}";
101101 in
102102 pkgs.runCommand name { refs = pkgs.writeReferencesToFile pkg.drvPath; } ''
103103 touch $out
nixos/tests/openssh.nix+12−6
@@ -80,17 +80,21 @@ in {
8080
8181 client.wait_for_unit("network.target")
8282 client.succeed(
83− "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server 'echo hello world' >&2"
83+ "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server 'echo hello world' >&2",
84+ timeout=30
8485 )
8586 client.succeed(
86− "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server 'ulimit -l' | grep 1024"
87+ "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server 'ulimit -l' | grep 1024",
88+ timeout=30
8789 )
8890
8991 client.succeed(
90− "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server_lazy 'echo hello world' >&2"
92+ "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server_lazy 'echo hello world' >&2",
93+ timeout=30
9194 )
9295 client.succeed(
93− "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server_lazy 'ulimit -l' | grep 1024"
96+ "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server_lazy 'ulimit -l' | grep 1024",
97+ timeout=30
9498 )
9599
96100 with subtest("configured-authkey"):
@@ -99,10 +103,12 @@ in {
99103 )
100104 client.succeed("chmod 600 privkey.snakeoil")
101105 client.succeed(
102− "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i privkey.snakeoil server true"
106+ "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i privkey.snakeoil server true",
107+ timeout=30
103108 )
104109 client.succeed(
105− "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i privkey.snakeoil server_lazy true"
110+ "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i privkey.snakeoil server_lazy true",
111+ timeout=30
106112 )
107113
108114 with subtest("localhost-only"):
nixos/tests/pam/pam-oath-login.nix+1−1
@@ -7,7 +7,7 @@ let
77 # how many passwords have been made. In this env, we'll always be on
88 # the 0th counter, so the password is static.
99 #
10− # Generated in nix-shell -p oathToolkit
10+ # Generated in nix-shell -p oath-toolkit
1111 # via: oathtool -v -d6 -w10 cdd4083ef8ff1fa9178c6d46bfb1a3
1212 # and picking a the first 4:
1313 oathSnakeOilPassword1 = "143349";
nixos/tests/pam/pam-ussh.nixnew file+70

This diff is too big to show here.

nixos/tests/paperless-ng.nix → nixos/tests/paperless.nixrenamed+11−12

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.nix+37−47

This diff is too big to show here.

nixos/tests/snapcast.nix+1

This diff is too big to show here.

nixos/tests/step-ca.nix+1

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-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/taskserver.nix+1

This diff is too big to show here.

nixos/tests/vaultwarden.nix−1

This diff is too big to show here.

nixos/tests/web-apps/netbox.nix+1−1

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.nix+3−2

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/xmpp/xmpp-sendmessage.nix+1−4

This diff is too big to show here.

nixos/tests/zfs.nix+50

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/wvkbd/default.nixnew file+36

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/amberol/default.nixnew file+75

This diff is too big to show here.

pkgs/applications/audio/audacity/0001-Use-a-different-approach-to-estimate-the-disk-space-.patchdeleted−355

This diff is too big to show here.

pkgs/applications/audio/audacity/default.nix+58−35

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/bespokesynth/default.nix+1

This diff is too big to show here.

pkgs/applications/audio/bitwig-studio/bitwig-studio4.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/blanket/default.nix+7−7

This diff is too big to show here.

pkgs/applications/audio/callaudiod/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/cardinal/default.nix+2−11

This diff is too big to show here.

pkgs/applications/audio/carla/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/caudec/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/cider/default.nix+3−3

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/cmus/default.nix+2−2

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/dragonfly-reverb/default.nix+2−2

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+2−2

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/ft2-clone/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/furnace/default.nix+2−2

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/guitarix/default.nix+2

This diff is too big to show here.

pkgs/applications/audio/helio-workstation/default.nix+2−2

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/jacktrip/default.nixnew file+61

This diff is too big to show here.

pkgs/applications/audio/jamesdsp/default.nix+40−5

This diff is too big to show here.

pkgs/applications/audio/jmusicbot/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/libopenmpt/default.nixdeleted−42

This diff is too big to show here.

pkgs/applications/audio/lollypop/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/losslessaudiochecker/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/lyrebird/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/moc/default.nix+5−3

This diff is too big to show here.

pkgs/applications/audio/mopidy/mopidy.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/musikcube/default.nix+5−3

This diff is too big to show here.

pkgs/applications/audio/ncspot/default.nix+3−7

This diff is too big to show here.

pkgs/applications/audio/ncspot/rust_1_57_support.patchdeleted−21

This diff is too big to show here.

pkgs/applications/audio/noise-repellent/default.nix+11−9

This diff is too big to show here.

pkgs/applications/audio/ocenaudio/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/odin2/default.nixnew file+79

This diff is too big to show here.

pkgs/applications/audio/osdlyrics/default.nixnew file+87

This diff is too big to show here.

pkgs/applications/audio/parlatype/default.nixdeleted−66

This diff is too big to show here.

pkgs/applications/audio/pianobar/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/pipecontrol/default.nixnew file+50

This diff is too big to show here.

pkgs/applications/audio/plexamp/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/praat/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/pt2-clone/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/puddletag/default.nix+1

This diff is too big to show here.

pkgs/applications/audio/pulseaudio-modules-bt/default.nixdeleted−91

This diff is too big to show here.

pkgs/applications/audio/pulseaudio-modules-bt/fix-install-path.patchdeleted−11

This diff is too big to show here.

pkgs/applications/audio/pyradio/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/qpwgraph/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/sfizz/default.nix+6−1

This diff is too big to show here.

pkgs/applications/audio/sfxr-qt/default.nix+7

This diff is too big to show here.

pkgs/applications/audio/shortwave/default.nix+9−12

This diff is too big to show here.

pkgs/applications/audio/sonic-pi/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/sonixd/default.nixnew file+27

This diff is too big to show here.

pkgs/applications/audio/soundwireserver/default.nix+1

This diff is too big to show here.

pkgs/applications/audio/spot/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/spotify-tui/default.nix+1

This diff is too big to show here.

pkgs/applications/audio/spotify/default.nix+5−5

This diff is too big to show here.

pkgs/applications/audio/strawberry/default.nix+1

This diff is too big to show here.

pkgs/applications/audio/viper4linux-gui/default.nixnew file+82

This diff is too big to show here.

pkgs/applications/audio/viper4linux/default.nixnew file+61

This diff is too big to show here.

pkgs/applications/audio/whipper/default.nix+8

This diff is too big to show here.

pkgs/applications/audio/x42-plugins/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/alfis/default.nix+3−3

This diff is too big to show here.

pkgs/applications/blockchains/bisq-desktop/default.nix+1−2

This diff is too big to show here.

pkgs/applications/blockchains/bitcoin/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/btcpayserver/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/btcpayserver/deps.nix+29−29

This diff is too big to show here.

pkgs/applications/blockchains/chia-plotter/default.nix+13−6

This diff is too big to show here.

pkgs/applications/blockchains/chia-plotter/dont_fetch_dependencies.patch+24−11

This diff is too big to show here.

pkgs/applications/blockchains/clightning/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/electrs/default.nix+3−3

This diff is too big to show here.

pkgs/applications/blockchains/go-ethereum/default.nix+3−3

This diff is too big to show here.

pkgs/applications/blockchains/ledger-live-desktop/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/lightning-loop/default.nix+3−3

This diff is too big to show here.

pkgs/applications/blockchains/lnd/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/lndmanage/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/monero-cli/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/monero-gui/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/namecoin/default.nix+5−6

This diff is too big to show here.

pkgs/applications/blockchains/nbxplorer/default.nix+2−2

This diff is too big to show here.

pkgs/applications/blockchains/nbxplorer/deps.nix+15

This diff is too big to show here.

pkgs/applications/blockchains/nearcore/default.nixnew file+42

This diff is too big to show here.

pkgs/applications/blockchains/openethereum/default.nix+3−3

This diff is too big to show here.

pkgs/applications/blockchains/polkadot/default.nix+2−1

This diff is too big to show here.

pkgs/applications/blockchains/snarkos/default.nix+1−1

This diff is too big to show here.

pkgs/applications/blockchains/solana/default.nix+10−5

This diff is too big to show here.

pkgs/applications/blockchains/solana/pin.jsonnew file+5

This diff is too big to show here.

pkgs/applications/blockchains/solana/update.shnew file+33

This diff is too big to show here.

pkgs/applications/blockchains/stellar-core/default.nix+7−3

This diff is too big to show here.

pkgs/applications/blockchains/wasabibackend/default.nix+1−1

This diff is too big to show here.

pkgs/applications/blockchains/zcash/default.nix+6−6

This diff is too big to show here.

pkgs/applications/editors/android-studio/common.nix+5−3

This diff is too big to show here.

pkgs/applications/editors/android-studio/default.nix+8−7

This diff is too big to show here.

pkgs/applications/editors/apostrophe/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/bluej/default.nix+35−8

This diff is too big to show here.

pkgs/applications/editors/cudatext/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/cudatext/deps.json+12−12

This diff is too big to show here.

pkgs/applications/editors/eclipse/default.nix+13−13

This diff is too big to show here.

pkgs/applications/editors/eclipse/plugins.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/emacs/27.nixdeleted−11

This diff is too big to show here.

pkgs/applications/editors/emacs/28.nixnew file+5

This diff is too big to show here.

pkgs/applications/editors/emacs/at-fdcwd.patchdeleted−15

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/cedet/default.nixdeleted−52

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/control-lock/default.nixnew file+23

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix+124−45

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/ement/default.nix+11−3

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/header-file-mode/default.nixnew file+30

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix+7−1

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix+7

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/nongnu-generated.nix+26−32

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json+2254−1744

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/tree-sitter-langs/default-grammars.jsonnew file+32

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/tree-sitter-langs/default.nixnew file+44

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/tree-sitter-langs/update-defaults.pynew file+74

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/tsc/default.nixnew file+89

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/tsc/src.jsonnew file+10

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/tsc/update.pynew file+122

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/updatenew file+10

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/update-manualnew file+7

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/update-manual.nixnew file+11

This diff is too big to show here.

pkgs/applications/editors/emacs/generic.nix+9−5

This diff is too big to show here.

pkgs/applications/editors/gnome-builder/default.nix+2−13

This diff is too big to show here.

pkgs/applications/editors/helix/default.nix+13−10

This diff is too big to show here.

pkgs/applications/editors/jetbrains/default.nix+20−17

This diff is too big to show here.

pkgs/applications/editors/jetbrains/update.py+17−14

This diff is too big to show here.

pkgs/applications/editors/jetbrains/versions.json+132−132

This diff is too big to show here.

pkgs/applications/editors/jucipp/default.nix+1−2

This diff is too big to show here.

pkgs/applications/editors/jupyter-kernels/octave/kernel.nix+4−6

This diff is too big to show here.

pkgs/applications/editors/jupyter-kernels/wolfram/default.nixnew file+22

This diff is too big to show here.

pkgs/applications/editors/jupyter-kernels/wolfram/kernel.nixnew file+32

This diff is too big to show here.

pkgs/applications/editors/kakoune/plugins/default.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/kakoune/plugins/kakoune-plugin-names+20−19

This diff is too big to show here.

pkgs/applications/editors/kodestudio/default.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/lapce/default.nix+23−7

This diff is too big to show here.

pkgs/applications/editors/lapce/fix-version.patchdeleted−31

This diff is too big to show here.

pkgs/applications/editors/lifeograph/default.nix+5−5

This diff is too big to show here.

pkgs/applications/editors/marker/default.nix+4−1

This diff is too big to show here.

pkgs/applications/editors/mg/default.nix+4

This diff is too big to show here.

pkgs/applications/editors/mle/default.nix+11−1

This diff is too big to show here.

pkgs/applications/editors/neovim/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/neovim/neovide/default.nix+6−6

This diff is too big to show here.

pkgs/applications/editors/neovim/ruby_provider/Gemfile.lock+2−2

This diff is too big to show here.

pkgs/applications/editors/neovim/ruby_provider/gemset.nix+5−5

This diff is too big to show here.

pkgs/applications/editors/oed/default.nix+9

This diff is too big to show here.

pkgs/applications/editors/okteta/default.nix+2

This diff is too big to show here.

pkgs/applications/editors/oni2/common.nix−1

This diff is too big to show here.

pkgs/applications/editors/pinegrow/default.nix+11−6

This diff is too big to show here.

pkgs/applications/editors/poke/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/rstudio/default.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/setzer/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/sublime/3/common.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/texmaker/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/texstudio/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/tiled/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/vim/common.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/build-vim-plugin.nix+2

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/default.nix+8−3

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/generated.nix+1344−1308

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/overrides.nix+5−6

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/update.py+47−16

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/vim-command-check-hook.shnew file+25

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/vim-plugin-names+1014−1010

This diff is too big to show here.

pkgs/applications/editors/vim/plugins/vim-utils.nix+18−2

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/default.nix+27−15

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/default.nix+1−1

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/ms-vsliveshare-vsliveshare/default.nix−1

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/remote-ssh/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/vscode/generic.nix+9−3

This diff is too big to show here.

pkgs/applications/editors/vscode/update-vscodium.sh+16−12

This diff is too big to show here.

pkgs/applications/editors/vscode/vscode.nix+6−6

This diff is too big to show here.

pkgs/applications/editors/vscode/vscodium.nix+10−13

This diff is too big to show here.

pkgs/applications/editors/xedit/default.nix+2−2

This diff is too big to show here.

pkgs/applications/emulators/basiliskii/default.nixnew file+28

This diff is too big to show here.

pkgs/applications/emulators/basiliskii/remove-redhat-6-workaround-for-scsi-sg.h.patchnew file+10

This diff is too big to show here.

pkgs/applications/emulators/ares/default.nix → pkgs/applications/emulators/bsnes/ares/default.nixrenamed

The content is the same.

pkgs/applications/emulators/ares/fix-ruby.patch → pkgs/applications/emulators/bsnes/ares/fix-ruby.patchrenamed

The content is the same.

pkgs/applications/emulators/bsnes-hd/default.nix → pkgs/applications/emulators/bsnes/bsnes-hd/default.nixrenamed

The content is the same.

pkgs/applications/emulators/bsnes-hd/macos-copy-app-to-prefix.patch → pkgs/applications/emulators/bsnes/bsnes-hd/macos-copy-app-to-prefix.patchrenamed

The content is the same.

pkgs/applications/emulators/bsnes-hd/macos-replace-sips-with-png2icns.patch → pkgs/applications/emulators/bsnes/bsnes-hd/macos-replace-sips-with-png2icns.patchrenamed

The content is the same.

pkgs/applications/emulators/higan/001-include-cmath.patch → pkgs/applications/emulators/bsnes/higan/001-include-cmath.patchrenamed

The content is the same.

pkgs/applications/emulators/higan/002-sips-to-png2icns.patch → pkgs/applications/emulators/bsnes/higan/002-sips-to-png2icns.patchrenamed

The content is the same.

pkgs/applications/emulators/higan/default.nix → pkgs/applications/emulators/bsnes/higan/default.nixrenamed

The content is the same.

pkgs/applications/emulators/commanderx16/emulator.nix+7−5

This diff is too big to show here.

pkgs/applications/emulators/commanderx16/rom.nix+12−6

This diff is too big to show here.

pkgs/applications/emulators/dolphin-emu/master.nix+4−4

This diff is too big to show here.

pkgs/applications/emulators/dolphin-emu/primehack.nix+2−2

This diff is too big to show here.

pkgs/applications/emulators/epsxe/default.nixdeleted−52

This diff is too big to show here.

pkgs/applications/emulators/fakenes/build.patchdeleted−84

This diff is too big to show here.

pkgs/applications/emulators/fakenes/default.nixdeleted−34

This diff is too big to show here.

pkgs/applications/emulators/flycast/default.nix+2−2

This diff is too big to show here.

pkgs/applications/emulators/mame/0001-Revert-Added-PDF-documentation-to-dist.mak.patchnew file+37

This diff is too big to show here.

pkgs/applications/emulators/mame/default.nix+64−14

This diff is too big to show here.

pkgs/applications/emulators/proton-caller/default.nix+4−3

This diff is too big to show here.

pkgs/applications/emulators/qmc2/default.nixdeleted−41

This diff is too big to show here.

pkgs/applications/emulators/retroarch/cores.nix+16−43

This diff is too big to show here.

pkgs/applications/emulators/retroarch/default.nix+25−8

This diff is too big to show here.

pkgs/applications/emulators/retroarch/disable-menu-show-core-updater.patchdeleted−13

This diff is too big to show here.

pkgs/applications/emulators/retroarch/0001-Disable-menu_show_core_updater.patch → pkgs/applications/emulators/retroarch/disable-menu_show_core_updater.patchrenamed+1−1

This diff is too big to show here.

pkgs/applications/emulators/retroarch/hashes.json+139−150

This diff is too big to show here.

pkgs/applications/emulators/retroarch/update.py → pkgs/applications/emulators/retroarch/update_cores.pyrenamed+7−13

This diff is too big to show here.

pkgs/applications/emulators/retroarch/0002-Use-fixed-paths-on-libretro_info_path.patch → pkgs/applications/emulators/retroarch/use-fixed-paths-on-libretro_info_path.patchrenamed+21−17

This diff is too big to show here.

pkgs/applications/emulators/retroarch/wrapper.nix+10−6

This diff is too big to show here.

pkgs/applications/emulators/ripes/default.nixnew file+50

This diff is too big to show here.

pkgs/applications/emulators/ryujinx/default.nix+7−3

This diff is too big to show here.

pkgs/applications/emulators/ryujinx/deps.nix+9−10

This diff is too big to show here.

pkgs/applications/emulators/ryujinx/updater.sh+51−24

This diff is too big to show here.

pkgs/applications/emulators/snes9x-gtk/default.nixdeleted−37

This diff is too big to show here.

pkgs/applications/emulators/snes9x/default.nixnew file+130

This diff is too big to show here.

pkgs/applications/emulators/tinyemu/default.nix+6−1

This diff is too big to show here.

pkgs/applications/emulators/yuzu/base.nixdeleted−86

This diff is too big to show here.

pkgs/applications/emulators/yuzu/compatibility-list.jsonnew file+1

This diff is too big to show here.

pkgs/applications/emulators/yuzu/default.nix+22−10

This diff is too big to show here.

pkgs/applications/emulators/yuzu/generic.nixnew file+157

This diff is too big to show here.

pkgs/applications/emulators/yuzu/update.shnew file+102

This diff is too big to show here.

pkgs/applications/emulators/zesarux/default.nix+8

This diff is too big to show here.

pkgs/applications/finance/cryptowatch/default.nixnew file+57

This diff is too big to show here.

pkgs/applications/finance/irpf/default.nix+10−3

This diff is too big to show here.

pkgs/applications/gis/grass/default.nix+10−36

This diff is too big to show here.

pkgs/applications/gis/qgis/unwrapped-ltr.nix+2−2

This diff is too big to show here.

pkgs/applications/gis/qgis/unwrapped.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/ImageMagick/6.x.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/ImageMagick/7.0.nix+6−11

This diff is too big to show here.

pkgs/applications/graphics/apitrace/default.nix+6

This diff is too big to show here.

pkgs/applications/graphics/apitrace/glibc-2.34-compat.patchnew file+13

This diff is too big to show here.

pkgs/applications/graphics/awesomebump/default.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/cloudcompare/default.nix+47−12

This diff is too big to show here.

pkgs/applications/graphics/cq-editor/default.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/darktable/default.nix+2

This diff is too big to show here.

pkgs/applications/graphics/digikam/default.nix+14−3

This diff is too big to show here.

pkgs/applications/graphics/drawing/default.nix+13−2

This diff is too big to show here.

pkgs/applications/graphics/drawio/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/foxotron/default.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/geeqie/default.nix+4−4

This diff is too big to show here.

pkgs/applications/graphics/gimp/plugins/default.nix+40−1

This diff is too big to show here.

pkgs/applications/graphics/graphicsmagick/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/gscan2pdf/default.nix+2−4

This diff is too big to show here.

pkgs/applications/graphics/gthumb/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/hydrus/default.nix+3−3

This diff is too big to show here.

pkgs/applications/graphics/imgbrd-grabber/default.nix+1−1

This diff is too big to show here.

pkgs/applications/graphics/inkscape/default.nix+1

This diff is too big to show here.

pkgs/applications/graphics/jpegrescan/default.nix+5−1

This diff is too big to show here.

pkgs/applications/graphics/mypaint/default.nix+10

This diff is too big to show here.

pkgs/applications/graphics/ocrfeeder/default.nix+5−8

This diff is too big to show here.

pkgs/applications/graphics/openboard/default.nix+3−4

This diff is too big to show here.

pkgs/applications/graphics/openscad/default.nix+4

This diff is too big to show here.

pkgs/applications/graphics/ovito/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/photivo/default.nixdeleted−54

This diff is too big to show here.

pkgs/applications/graphics/photivo/gcc6.patchdeleted−13

This diff is too big to show here.

pkgs/applications/graphics/pixeluvo/default.nix+1

This diff is too big to show here.

pkgs/applications/graphics/rawtherapee/default.nix+3

This diff is too big to show here.

pkgs/applications/graphics/rawtherapee/fix-6324.patchnew file+356

This diff is too big to show here.

pkgs/applications/graphics/rnote/default.nix+5−3

This diff is too big to show here.

pkgs/applications/graphics/sane/backends/brscan4/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/sane/backends/brscan5/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/shotwell/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/synfigstudio/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/tesseract/default.nix+6

This diff is too big to show here.

pkgs/applications/graphics/tesseract/fetch-language-hashes+2−2

This diff is too big to show here.

pkgs/applications/graphics/tesseract/languages.nix+245−245

This diff is too big to show here.

pkgs/applications/graphics/tesseract/tesseract3.nix+14−3

This diff is too big to show here.

pkgs/applications/graphics/tesseract/tesseract4.nix+15−3

This diff is too big to show here.

pkgs/applications/graphics/tesseract/tesseract5.nixnew file+39

This diff is too big to show here.

pkgs/applications/graphics/tesseract/wrapper.nix+29−3

This diff is too big to show here.

pkgs/applications/graphics/unigine-sanctuary/default.nixnew file+97

This diff is too big to show here.

pkgs/applications/graphics/unigine-tropics/default.nixnew file+95

This diff is too big to show here.

pkgs/applications/graphics/unigine-valley/default.nix+120−99

This diff is too big to show here.

pkgs/applications/graphics/yed/default.nix+2−2

This diff is too big to show here.

pkgs/applications/kde/default.nix+4−1

This diff is too big to show here.

pkgs/applications/networking/browsers/falkon/default.nix → pkgs/applications/kde/falkon.nixrenamed+4−13

This diff is too big to show here.

pkgs/applications/kde/fetch.sh+1−1

This diff is too big to show here.

pkgs/applications/kde/kaddressbook.nix+4

This diff is too big to show here.

pkgs/applications/kde/kalarm.nix+2−2

This diff is too big to show here.

pkgs/applications/kde/kalarmcal.nixdeleted−19

This diff is too big to show here.

pkgs/applications/office/kalendar/default.nix → pkgs/applications/kde/kalendar.nixrenamed+1−10

This diff is too big to show here.

pkgs/applications/kde/kdegraphics-thumbnailers.nix+2−2

This diff is too big to show here.

pkgs/applications/kde/kdepim-addons.nix+2−2

This diff is too big to show here.

pkgs/applications/kde/kdepim-runtime/default.nix+2−2

This diff is too big to show here.

pkgs/applications/kde/kitinerary.nix+1−10

This diff is too big to show here.

pkgs/applications/kde/kmousetool.nixnew file+35

This diff is too big to show here.

pkgs/applications/kde/picmi.nix+1−11

This diff is too big to show here.

pkgs/applications/kde/pimcommon.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/skanpage/default.nix → pkgs/applications/kde/skanpage.nixrenamed+3−7

This diff is too big to show here.

pkgs/applications/kde/srcs.nix+937−921

This diff is too big to show here.

pkgs/applications/kde/yakuake.nix+2

This diff is too big to show here.

pkgs/applications/logging/sosreport/default.nixnew file+51

This diff is too big to show here.

pkgs/applications/misc/1password-gui/beta.nixnew file+132

This diff is too big to show here.

pkgs/applications/misc/1password-gui/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/1password/default.nix+5−5

This diff is too big to show here.

pkgs/applications/misc/ArchiSteamFarm/default.nix+1

This diff is too big to show here.

pkgs/applications/misc/ArchiSteamFarm/deps-aarch64-linux.nix+17−18

This diff is too big to show here.

pkgs/applications/misc/ArchiSteamFarm/deps-x86_64-linux.nix+17−18

This diff is too big to show here.

pkgs/applications/misc/HentaiAtHome/default.nix+1−1

This diff is too big to show here.

pkgs/applications/misc/ablog/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/anytype/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/archivy/default.nix+9−3

This diff is too big to show here.

pkgs/applications/misc/audio/wavesurfer/default.nixdeleted−30

This diff is too big to show here.

pkgs/applications/misc/authy/default.nix+30−7

This diff is too big to show here.

pkgs/applications/misc/autospotting/default.nix+1

This diff is too big to show here.

pkgs/applications/misc/azuredatastudio/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/barrier/default.nix+12−1

This diff is too big to show here.

pkgs/applications/misc/bikeshed/default.nixnew file+77

This diff is too big to show here.

pkgs/applications/misc/blender/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/bottles/default.nix+7−17

This diff is too big to show here.

pkgs/applications/misc/bottles/update.pydeleted−65

This diff is too big to show here.

pkgs/applications/misc/buku/default.nix+2−1

This diff is too big to show here.

pkgs/applications/misc/calcoo/0001-javac-encoding.diffnew file+21

This diff is too big to show here.

pkgs/applications/misc/calcoo/default.nixnew file+58

This diff is too big to show here.

pkgs/applications/misc/calcurse/default.nix+4−3

This diff is too big to show here.

pkgs/applications/misc/calibre/default.nix+5−1

This diff is too big to show here.

pkgs/applications/misc/catclock/default.nix+1

This diff is too big to show here.

pkgs/applications/misc/charm/default.nix+3−5

This diff is too big to show here.

pkgs/applications/misc/copyq/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/cubiomes-viewer/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/dasel/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/dbeaver/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/debian-goodies/default.nixnew file+70

This diff is too big to show here.

pkgs/applications/misc/dunst/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/electrum-grs/default.nix+3−21

This diff is too big to show here.

pkgs/applications/misc/evtest/default.nix+1−1

This diff is too big to show here.

pkgs/applications/misc/faircamp/default.nix+4−4

This diff is too big to show here.

pkgs/applications/misc/ff2mpv/default.nixnew file+34

This diff is too big to show here.

pkgs/applications/misc/firestarter/default.nix+3−1

This diff is too big to show here.

pkgs/applications/misc/fluidd/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/foxitreader/default.nix+1

This diff is too big to show here.

pkgs/applications/misc/fspy/default.nix+2−3

This diff is too big to show here.

pkgs/applications/misc/gallery-dl/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/globe-cli/default.nix+1

This diff is too big to show here.

pkgs/applications/misc/gnome-firmware-updater/default.nixdeleted−75

This diff is too big to show here.

pkgs/applications/misc/gnome-firmware/default.nixnew file+63

This diff is too big to show here.

pkgs/applications/misc/gnome-secrets/default.nix+4−10

This diff is too big to show here.

pkgs/applications/misc/gnome-solanum/default.nix+10

This diff is too big to show here.

pkgs/applications/misc/gofu/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/gpsprune/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/gpxsee/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/gremlin-console/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/gsctl/default.nix+13−7

This diff is too big to show here.

pkgs/applications/misc/hello/default.nix+11−9

This diff is too big to show here.

pkgs/applications/misc/hello/test.nixnew file+8

This diff is too big to show here.

pkgs/applications/misc/hubstaff/default.nix+1−1

This diff is too big to show here.

pkgs/applications/misc/hugo/default.nix+6−6

This diff is too big to show here.

pkgs/applications/misc/index-fm/default.nix−2

This diff is too big to show here.

pkgs/applications/misc/ipmiview/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/join-desktop/default.nixnew file+73

This diff is too big to show here.

pkgs/applications/misc/joplin-desktop/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/josm/default.nix+4−4

This diff is too big to show here.

pkgs/applications/misc/k4dirstat/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/keylight-controller-mschneider82/default.nixnew file+53

This diff is too big to show here.

pkgs/applications/misc/kiln/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/kjv/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/kratos/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/libosmocore/default.nix+21−6

This diff is too big to show here.

pkgs/applications/misc/lighthouse/default.nixdeleted−35

This diff is too big to show here.

pkgs/applications/misc/lutris/default.nix+14−12

This diff is too big to show here.

pkgs/applications/misc/lutris/fixes.patchdeleted−67

This diff is too big to show here.

pkgs/applications/misc/marktext/default.nix+5−6

This diff is too big to show here.

pkgs/applications/misc/masterpdfeditor/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/mediainfo/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/megacmd/default.nix+5−10

This diff is too big to show here.

pkgs/applications/misc/megasync/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/mepo/default.nix+34−8

This diff is too big to show here.

pkgs/applications/misc/metadata-cleaner/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/minigalaxy/default.nix+4

This diff is too big to show here.

pkgs/applications/misc/mob/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/moonlight-qt/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/mop/default.nix+7−8

This diff is too big to show here.

pkgs/applications/misc/mop/deps.nixdeleted−11

This diff is too big to show here.

pkgs/applications/misc/multibootusb/default.nix+1−1

This diff is too big to show here.

pkgs/applications/misc/nnn/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/notejot/default.nix+4−11

This diff is too big to show here.

pkgs/applications/misc/nut/default.nix+2

This diff is too big to show here.

pkgs/applications/misc/obsidian/default.nix+25−25

This diff is too big to show here.

pkgs/applications/misc/octoprint/default.nix+7−245

This diff is too big to show here.

pkgs/applications/misc/opencpn/default.nix+85−16

This diff is too big to show here.

pkgs/applications/misc/organicmaps/default.nix+7−12

This diff is too big to show here.

pkgs/applications/misc/osmscout-server/default.nix+3−24

This diff is too big to show here.

pkgs/applications/misc/otpclient/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/p2pool/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/pdfslicer/default.nix+6

This diff is too big to show here.

pkgs/applications/misc/pdfstudio/default.nix+4−4

This diff is too big to show here.

pkgs/applications/misc/phwmon/default.nix+1−1

This diff is too big to show here.

pkgs/applications/misc/polybar/default.nix+12−2

This diff is too big to show here.

pkgs/applications/misc/polybar/remove-hardcoded-etc.diffnew file+13

This diff is too big to show here.

pkgs/applications/misc/portfolio-filemanager/default.nix+6−2

This diff is too big to show here.

pkgs/applications/misc/prusa-slicer/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/prusa-slicer/super-slicer.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/pure-maps/default.nix+3−2

This diff is too big to show here.

pkgs/applications/misc/pytrainer/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/ranger/default.nix+13−4

This diff is too big to show here.

pkgs/applications/misc/rm-improved/default.nix+1

This diff is too big to show here.

pkgs/applications/misc/sampler/default.nix+5−2

This diff is too big to show here.

pkgs/applications/misc/seatd/default.nix+7−3

This diff is too big to show here.

pkgs/applications/misc/sigal/default.nix+17−13

This diff is too big to show here.

pkgs/applications/misc/sigi/default.nix+7−10

This diff is too big to show here.

pkgs/applications/misc/sioyek/default.nixnew file+56

This diff is too big to show here.

pkgs/applications/misc/skate/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/skytemple/default.nix+5−2

This diff is too big to show here.

pkgs/applications/misc/slides/default.nix+5−4

This diff is too big to show here.

pkgs/applications/misc/solaar/default.nix+3−2

This diff is too big to show here.

pkgs/applications/misc/sqls/default.nix+5−3

This diff is too big to show here.

pkgs/applications/misc/stork/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/taskwarrior-tui/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/taskwarrior/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/terminal-typeracer/default.nix+1

This diff is too big to show here.

pkgs/applications/misc/timewarrior/default.nix+1

This diff is too big to show here.

pkgs/applications/misc/toipe/default.nixnew file+20

This diff is too big to show here.

pkgs/applications/misc/trenchbroom/default.nix+13

This diff is too big to show here.

pkgs/applications/misc/tty-solitaire/default.nix+1

This diff is too big to show here.

pkgs/applications/misc/tut/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/tvbrowser/bin.nix+1−1

This diff is too big to show here.

pkgs/applications/misc/udiskie/default.nix+30−25

This diff is too big to show here.

pkgs/applications/misc/udiskie/locale-path.patchnew file+17

This diff is too big to show here.

pkgs/applications/misc/upwork/default.nix+14−4

This diff is too big to show here.

pkgs/applications/misc/veracrypt/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/vit/default.nix+3−5

This diff is too big to show here.

pkgs/applications/misc/wlclock/default.nixnew file+46

This diff is too big to show here.

pkgs/applications/misc/xmrig/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/xmrig/moneroocean.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/xpdf/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/xplr/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/xteddy/default.nix+1−1

This diff is too big to show here.

pkgs/applications/misc/ydict/default.nixnew file+28

This diff is too big to show here.

pkgs/applications/misc/zathura/core/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/zettlr/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/zola/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/alpnpass/default.nixnew file+34

This diff is too big to show here.

pkgs/applications/networking/appgate-sdp/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/bee/bee.nix+1−3

This diff is too big to show here.

pkgs/applications/networking/browsers/brave/default.nix+72−53

This diff is too big to show here.

pkgs/applications/networking/browsers/chromium/browser.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/browsers/chromium/common.nix+16−9

This diff is too big to show here.

pkgs/applications/networking/browsers/chromium/default.nix+1−3

This diff is too big to show here.

pkgs/applications/networking/browsers/chromium/get-commit-message.py+3−3

This diff is too big to show here.

pkgs/applications/networking/browsers/chromium/upstream-info.json+30−30

This diff is too big to show here.

pkgs/applications/networking/browsers/firefox-bin/devedition_sources.nix+393−393

This diff is too big to show here.

pkgs/applications/networking/browsers/firefox-bin/release_sources.nix+393−393

This diff is too big to show here.

pkgs/applications/networking/browsers/firefox/common.nix+3−14

This diff is too big to show here.

pkgs/applications/networking/browsers/firefox/librewolf/src.json+5−5

This diff is too big to show here.

pkgs/applications/networking/browsers/firefox/packages.nix+4−4

This diff is too big to show here.

pkgs/applications/networking/browsers/google-chrome/default.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/browsers/lagrange/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/browsers/links2/default.nix+1

This diff is too big to show here.

pkgs/applications/networking/browsers/microsoft-edge/default.nix+6−6

This diff is too big to show here.

pkgs/applications/networking/browsers/palemoon/default.nix+21−14

This diff is too big to show here.

pkgs/applications/networking/browsers/qtchan/default.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/browsers/qutebrowser/default.nix+8−5

This diff is too big to show here.

pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix+11−4

This diff is too big to show here.

pkgs/applications/networking/browsers/vieb/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/browsers/vivaldi/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/browsers/vivaldi/widevine.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/c14/default.nixdeleted−22

This diff is too big to show here.

pkgs/applications/networking/cloudflare-dyndns/default.nixnew file+53

This diff is too big to show here.

pkgs/applications/networking/cloudflared/default.nix+17−6

This diff is too big to show here.

pkgs/applications/networking/cluster/argo/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/cluster/argocd-autopilot/default.nix+4−5

This diff is too big to show here.

pkgs/applications/networking/cluster/argocd/default.nix+7−11

This diff is too big to show here.

pkgs/applications/networking/cluster/arkade/default.nix+4−4

This diff is too big to show here.

pkgs/applications/networking/cluster/atlantis/default.nix+8−5

This diff is too big to show here.

pkgs/applications/networking/cluster/cilium/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/cluster/cloudfoundry-cli/default.nix+1

This diff is too big to show here.

pkgs/applications/networking/cluster/cmctl/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/cluster/driftctl/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/cluster/flink/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/cluster/fluxcd/default.nix+5−5

This diff is too big to show here.

pkgs/applications/networking/cluster/fluxcd/update.sh+38−31

This diff is too big to show here.

pkgs/applications/networking/cluster/fluxctl/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/cluster/hadoop/default.nix+5

This diff is too big to show here.

pkgs/applications/networking/cluster/helm-docs/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/cluster/helm/default.nix+21−9

This diff is too big to show here.

pkgs/applications/networking/cluster/helmfile/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/cluster/istioctl/default.nix+9−6

This diff is too big to show here.

pkgs/applications/networking/cluster/k3s/default.nix+23−8

This diff is too big to show here.

pkgs/applications/networking/cluster/k3s/patches/0002-Don-t-build-a-static-binary-in-package-cli.patchdeleted−37

This diff is too big to show here.

pkgs/applications/networking/cluster/kn/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/cluster/kompose/default.nix+17−7

This diff is too big to show here.

pkgs/applications/networking/cluster/kops/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/cluster/krane/Gemfile.lock+12−12

This diff is too big to show here.

pkgs/applications/networking/cluster/krane/gemset.nix+20−20

This diff is too big to show here.

pkgs/applications/networking/cluster/kube3d/default.nix+29−12

This diff is too big to show here.

pkgs/applications/networking/cluster/kubecfg/default.nix+7−7

This diff is too big to show here.

pkgs/applications/networking/cluster/kubeless/default.nixdeleted−38

This diff is too big to show here.

pkgs/applications/networking/cluster/kubernetes/kubectl.nix+1

This diff is too big to show here.

pkgs/applications/networking/cluster/kubeseal/default.nix−2

This diff is too big to show here.

pkgs/applications/networking/cluster/kuttl/default.nix+1

This diff is too big to show here.

pkgs/applications/networking/cluster/nerdctl/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/cluster/nomad-pack/default.nix+4−4

This diff is too big to show here.

pkgs/applications/networking/cluster/nomad/1.1.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/cluster/ocm/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/cluster/odo/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/cluster/openshift/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/cluster/pachyderm/default.nix+1

This diff is too big to show here.

pkgs/applications/networking/cluster/pgo-client/default.nix+1

This diff is too big to show here.

pkgs/applications/networking/cluster/popeye/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/cluster/sonobuoy/default.nix+4−4

This diff is too big to show here.

pkgs/applications/networking/cluster/spark/default.nix+11−6

This diff is too big to show here.

pkgs/applications/networking/cluster/ssm-session-manager-plugin/default.nix+9−4

This diff is too big to show here.

pkgs/applications/networking/cluster/starboard/default.nix+15−9

This diff is too big to show here.

pkgs/applications/networking/cluster/talosctl/default.nix+11−9

This diff is too big to show here.

pkgs/applications/networking/cluster/tanka/default.nix+1

This diff is too big to show here.

pkgs/applications/networking/cluster/tektoncd-cli/default.nix+2−1

This diff is too big to show here.

pkgs/applications/networking/cluster/terraform-providers/default.nix+6−2

This diff is too big to show here.

pkgs/applications/networking/cluster/terraform-providers/providers.json+312−278

This diff is too big to show here.

pkgs/applications/networking/cluster/terraform/default.nix+5−4

This diff is too big to show here.

pkgs/applications/networking/cluster/vcluster/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/cluster/waypoint/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/cluster/werf/default.nix+11−4

This diff is too big to show here.

pkgs/applications/networking/feedreaders/newsboat/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/feedreaders/rss2email/default.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/firewalld/default.nixnew file+104

This diff is too big to show here.

pkgs/applications/networking/firewalld/respect-xml-catalog-files-var.patchnew file+13

This diff is too big to show here.

pkgs/applications/networking/flexget/default.nix+6−3

This diff is too big to show here.

pkgs/applications/networking/gmailctl/default.nix+4−6

This diff is too big to show here.

pkgs/applications/networking/gns3/default.nix+7−8

This diff is too big to show here.

pkgs/applications/networking/gns3/gui.nix+29−7

This diff is too big to show here.

pkgs/applications/networking/gns3/server.nix+36−22

This diff is too big to show here.

pkgs/applications/networking/ids/zeek/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/alfaview/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/bitlbee-discord/default.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/bluejeans/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/caprine-bin/build-from-appimage.nixnew file+50

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/caprine-bin/build-from-dmg.nixnew file+35

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/caprine-bin/default.nixnew file+25

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/chatty/default.nix+4−2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix+6−5

This diff is too big to show here.

pkgs/development/libraries/libdeltachat/darwin-dylib.patch → pkgs/applications/networking/instant-messengers/deltachat-desktop/libdeltachat-darwin-dylib.patchrenamed

The content is the same.

pkgs/applications/networking/instant-messengers/deltachat-desktop/package.json+2−2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/discord/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/element/element-desktop-package.json+2−1

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/element/pin.json+4−4

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/ferdi/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/franz/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/gajim/default.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/gotktrix/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/gtmess/default.nixdeleted−20

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix+4−3

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/kaidan/default.nix+2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/kdeltachat/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/linphone/default.nix+40−13

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/linphone/do-not-build-linphone-sdk.patch+56−31

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/linphone/no-store-path-in-autostart.patchnew file+27

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/linphone/remove-bc_compute_full_version-usage.patch+6−6

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/pond/default.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/psi-plus/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/ripcord/default.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/rocketchat-desktop/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/session-desktop-appimage/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/signal-desktop/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/skypeforlinux/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/slack/default.nix+7−7

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/teams/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix+1−21

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/kf594.patchnew file+57

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/kotato-10.12-sdk.patch+31−22

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt-10.12-sdk.patch+17−4

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt.nix+15−7

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/with-webkit.nixnew file+23

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix+8

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/telegram/tdesktop/kf594.diffnew file+57

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/threema-desktop/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/torchat/default.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/wire-desktop/default.nix+6−5

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/zoom-us/default.nix+47−8

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/zulip/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/ipfs-cluster/default.nix+3−12

This diff is too big to show here.

pkgs/applications/networking/ipfs/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/irc/senpai/default.nix+4−4

This diff is too big to show here.

pkgs/applications/networking/irc/weechat/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/irc/wraith/configure.patch+1−1

This diff is too big to show here.

pkgs/applications/networking/irc/wraith/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/maestral-qt/default.nix+3

This diff is too big to show here.

pkgs/applications/networking/mailreaders/aerc/default.nix+23−14

This diff is too big to show here.

pkgs/applications/networking/mailreaders/aerc/runtime-sharedir.patch+86−56

This diff is too big to show here.

pkgs/applications/networking/mailreaders/claws-mail/default.nix+6−14

This diff is too big to show here.

pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/mailreaders/evolution/evolution/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/mailreaders/mailspring/default.nix+9−4

This diff is too big to show here.

pkgs/applications/networking/mailreaders/meli/default.nix+1−2

This diff is too big to show here.

pkgs/applications/networking/mailreaders/mutt/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/mailreaders/neomutt/default.nix+2−12

This diff is too big to show here.

pkgs/applications/networking/mailreaders/notbit/default.nixdeleted−30

This diff is too big to show here.

pkgs/applications/networking/mailreaders/notmuch-bower/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/mailreaders/notmuch/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/mailreaders/thunderbird-bin/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/mailreaders/thunderbird-bin/release_sources.nix+261−261

This diff is too big to show here.

pkgs/applications/networking/mailreaders/thunderbird/packages.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/modem-manager-gui/default.nix+15

This diff is too big to show here.

pkgs/applications/networking/mullvad/default.nixnew file+8

This diff is too big to show here.

pkgs/applications/networking/mullvad/libwg.nixnew file+35

This diff is too big to show here.

pkgs/applications/networking/mullvad/mullvad.nixnew file+107

This diff is too big to show here.

pkgs/applications/networking/mullvad/openvpn.nixnew file+87

This diff is too big to show here.

pkgs/applications/networking/n8n/node-packages.nix+706−774

This diff is too big to show here.

pkgs/applications/networking/newsreaders/liferea/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/nextcloud-client/default.nix+26−3

This diff is too big to show here.

pkgs/applications/networking/nextdns/default.nix+3−5

This diff is too big to show here.

pkgs/applications/networking/owncloud-client/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/p2p/gnunet/default.nix+2−2

This diff is too big to show here.

pkgs/tools/networking/p2p/jesec-rtorrent/rtorrent.nix → pkgs/applications/networking/p2p/jesec-rtorrent/default.nixrenamed+3−3

This diff is too big to show here.

pkgs/tools/networking/p2p/jesec-rtorrent/libtorrent.nix → pkgs/applications/networking/p2p/jesec-rtorrent/libtorrent.nixrenamed+7−3

This diff is too big to show here.

pkgs/applications/networking/p2p/qbittorrent/default.nix+2−2

This diff is too big to show here.

pkgs/tools/networking/p2p/rakshasa-rtorrent/rtorrent.nix → pkgs/applications/networking/p2p/rakshasa-rtorrent/default.nixrenamed

The content is the same.

pkgs/tools/networking/p2p/rakshasa-rtorrent/libtorrent.nix → pkgs/applications/networking/p2p/rakshasa-rtorrent/libtorrent.nixrenamed

The content is the same.

pkgs/applications/networking/p2p/tribler/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/p2p/twister/default.nixdeleted−70

This diff is too big to show here.

pkgs/applications/networking/ping/default.nixdeleted−76

This diff is too big to show here.

pkgs/applications/networking/pjsip/default.nix+7−1

This diff is too big to show here.

pkgs/applications/networking/protonvpn-gui/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/remote/citrix-workspace/generic.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/remote/freerdp/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/remote/rustdesk/default.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/remote/vmware-horizon-client/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/resilio-sync/default.nix+19−19

This diff is too big to show here.

pkgs/applications/networking/seafile-client/default.nix+5−3

This diff is too big to show here.

pkgs/applications/networking/seahub/default.nix+12−5

This diff is too big to show here.

pkgs/applications/networking/seaweedfs/default.nix+6−5

This diff is too big to show here.

pkgs/applications/networking/shellhub-agent/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/sniffers/wireshark/default.nix+22−7

This diff is too big to show here.

pkgs/applications/networking/soju/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/sync/lsyncd/default.nix+2−1

This diff is too big to show here.

pkgs/applications/networking/sync/onedrive/default.nix+2−2

This diff is too big to show here.

pkgs/applications/networking/sync/rclone/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/syncplay/default.nix+6−4

This diff is too big to show here.

pkgs/applications/networking/syncthing/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/synology-drive-client/default.nix+4−4

This diff is too big to show here.

pkgs/applications/networking/termius/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/tetrd/default.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/zerobin/default.nix+1−1

This diff is too big to show here.

pkgs/applications/office/banking/default.nix+20−9

This diff is too big to show here.

pkgs/applications/office/beamerpresenter/default.nix+45−22

This diff is too big to show here.

pkgs/applications/office/bookworm/default.nix−2

This diff is too big to show here.

pkgs/applications/office/buho/default.nixnew file+58

This diff is too big to show here.

pkgs/applications/office/calligra/default.nix+16

This diff is too big to show here.

pkgs/applications/office/fava/default.nix+15−3

This diff is too big to show here.

pkgs/applications/office/foliate/default.nix−1

This diff is too big to show here.

pkgs/applications/office/gnumeric/default.nix+3−2

This diff is too big to show here.

pkgs/applications/office/jameica/default.nix+1−1

This diff is too big to show here.

pkgs/applications/office/khronos/default.nix+2−9

This diff is too big to show here.

pkgs/applications/office/ledger/default.nix+2−2

This diff is too big to show here.

pkgs/applications/office/libreoffice/soffice-template.desktopnew file+6

This diff is too big to show here.

pkgs/applications/office/libreoffice/wrapper.nix+25−12

This diff is too big to show here.

pkgs/applications/office/morgen/default.nix+2−2

This diff is too big to show here.

pkgs/applications/office/paperless-ng/default.nix → pkgs/applications/office/paperless-ngx/default.nixrenamed+16−34

This diff is too big to show here.

pkgs/applications/office/paperwork/paperwork-gtk.nix+1−1

This diff is too big to show here.

pkgs/applications/office/portfolio/default.nix+3−3

This diff is too big to show here.

pkgs/applications/office/qownnotes/default.nix+2−2

This diff is too big to show here.

pkgs/applications/office/trilium/default.nix+3−3

This diff is too big to show here.

pkgs/applications/office/tusk/default.nix+3−2

This diff is too big to show here.

pkgs/applications/office/vnote/default.nix+2−2

This diff is too big to show here.

pkgs/applications/office/zotero/default.nix+3−3

This diff is too big to show here.

pkgs/applications/radio/cubicsdr/default.nix+3−21

This diff is too big to show here.

pkgs/applications/radio/flex-ncat/default.nix+1

This diff is too big to show here.

pkgs/applications/radio/flrig/default.nix+4−2

This diff is too big to show here.

pkgs/applications/radio/gnss-sdr/default.nix+6

This diff is too big to show here.

pkgs/applications/radio/gnuradio/3.9.nix+8−2

This diff is too big to show here.

pkgs/applications/radio/gnuradio/default.nix+10−3

This diff is too big to show here.

pkgs/applications/radio/gnuradio/wrapper.nix+1−1

This diff is too big to show here.

pkgs/applications/radio/gqrx/default.nix+2−2

This diff is too big to show here.

pkgs/applications/radio/kalibrate-rtl/default.nix+5−5

This diff is too big to show here.

pkgs/applications/radio/rtl-ais/default.nix+1

This diff is too big to show here.

pkgs/applications/radio/rtl-sdr/default.nix+11−7

This diff is too big to show here.

pkgs/applications/radio/splat/default.nixnew file+55

This diff is too big to show here.

pkgs/applications/radio/uhd/default.nix+2

This diff is too big to show here.

pkgs/applications/science/astronomy/astrolabe-generator/default.nix+1

This diff is too big to show here.

pkgs/applications/science/astronomy/openspace/assets.patchdeleted−100

This diff is too big to show here.

pkgs/applications/science/astronomy/openspace/config.patchdeleted−49

This diff is too big to show here.

pkgs/applications/science/astronomy/openspace/constexpr.patchdeleted−91

This diff is too big to show here.

pkgs/applications/science/astronomy/openspace/default.nixdeleted−90

This diff is too big to show here.

pkgs/applications/science/astronomy/openspace/vrpn.patchdeleted−13

This diff is too big to show here.

pkgs/applications/science/astronomy/stellarium/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/biology/bayescan/default.nix+1

This diff is too big to show here.

pkgs/applications/science/biology/blast/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/biology/bwa/default.nix+2

This diff is too big to show here.

pkgs/applications/science/biology/clustal-omega/default.nix+1

This diff is too big to show here.

pkgs/applications/science/biology/cmtk/default.nix+4−1

This diff is too big to show here.

pkgs/applications/science/biology/dcm2niix/default.nix+42−7

This diff is too big to show here.

pkgs/applications/science/biology/dcm2niix/dont-fetch-external-libs.patchnew file+36

This diff is too big to show here.

pkgs/applications/science/biology/eggnog-mapper/default.nix+30−16

This diff is too big to show here.

pkgs/applications/science/biology/megahit/default.nix+3

This diff is too big to show here.

pkgs/applications/science/biology/ncbi-tools/default.nixdeleted−34

This diff is too big to show here.

pkgs/applications/science/biology/picard-tools/default.nix+1

This diff is too big to show here.

pkgs/applications/science/biology/quast/default.nix+1−3

This diff is too big to show here.

pkgs/applications/science/biology/samtools/default.nix+8−1

This diff is too big to show here.

pkgs/applications/science/biology/tebreak/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/chemistry/jmol/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/computer-architecture/qtrvsim/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/electronics/eagle/eagle7.nixdeleted−97

This diff is too big to show here.

pkgs/applications/science/electronics/verilator/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/engineering/brmodelo/default.nixnew file+109

This diff is too big to show here.

pkgs/applications/science/logic/abc/default.nix+3−3

This diff is too big to show here.

pkgs/applications/science/logic/coq/default.nix+14−14

This diff is too big to show here.

pkgs/applications/science/logic/cvc5/default.nixnew file+34

This diff is too big to show here.

pkgs/applications/science/logic/easycrypt/default.nixnew file+50

This diff is too big to show here.

pkgs/applications/science/logic/easycrypt/runtest.nixnew file+24

This diff is too big to show here.

pkgs/applications/science/logic/elan/default.nix+3−3

This diff is too big to show here.

pkgs/applications/science/logic/fast-downward/default.nix+19−12

This diff is too big to show here.

pkgs/applications/science/logic/isabelle/default.nix+31−2

This diff is too big to show here.

pkgs/applications/science/logic/jonprl/default.nixdeleted−35

This diff is too big to show here.

pkgs/applications/science/logic/key/default.nix+2−3

This diff is too big to show here.

pkgs/applications/science/logic/lean2/default.nixdeleted−37

This diff is too big to show here.

pkgs/applications/science/logic/naproche/default.nix+3−3

This diff is too big to show here.

pkgs/applications/science/logic/otter/default.nixdeleted−53

This diff is too big to show here.

pkgs/applications/science/logic/potassco/clingcon.nix+5

This diff is too big to show here.

pkgs/applications/science/logic/symbiyosys/default.nix+1

This diff is too big to show here.

pkgs/applications/science/logic/symfpu/default.nixnew file+26

This diff is too big to show here.

pkgs/applications/science/logic/tlaplus/toolbox.nix+1−1

This diff is too big to show here.

pkgs/applications/science/logic/z3/default.nix+66−66

This diff is too big to show here.

pkgs/applications/science/machine-learning/finalfusion-utils/default.nix+1

This diff is too big to show here.

pkgs/applications/science/math/adolc/default.nixnew file+23

This diff is too big to show here.

pkgs/applications/science/math/caffe/default.nix+9−4

This diff is too big to show here.

pkgs/applications/science/math/calc/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/math/calculix/calculix.patch+10−9

This diff is too big to show here.

pkgs/applications/science/math/calculix/default.nix+6−3

This diff is too big to show here.

pkgs/applications/science/math/cntk/default.nix+6−2

This diff is too big to show here.

pkgs/applications/science/math/giac/default.nix+12−16

This diff is too big to show here.

pkgs/applications/science/math/mxnet/default.nix+14−2

This diff is too big to show here.

pkgs/applications/science/math/qalculate-gtk/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/math/sage/patches/docutils-0.18.1-deprecation.patchnew file+13

This diff is too big to show here.

pkgs/applications/science/math/sage/sage-env.nix+2

This diff is too big to show here.

pkgs/applications/science/math/sage/sage-src.nix+51−11

This diff is too big to show here.

pkgs/applications/science/math/sage/sagelib.nix+8−3

This diff is too big to show here.

pkgs/applications/science/math/wolfram-engine/default.nixnew file+143

This diff is too big to show here.

pkgs/applications/science/math/wolfram-engine/l10ns.nixnew file+51

This diff is too big to show here.

pkgs/applications/science/math/wolfram-engine/notebook.nixnew file+9

This diff is too big to show here.

pkgs/applications/science/math/wxmaxima/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/medicine/xmedcon/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/misc/bada-bib/default.nix+3−3

This diff is too big to show here.

pkgs/applications/science/misc/colmap/default.nix+22−6

This diff is too big to show here.

pkgs/applications/science/misc/cwltool/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/misc/fityk/default.nix+4

This diff is too big to show here.

pkgs/applications/science/misc/netlogo/default.nix+1−1

This diff is too big to show here.

pkgs/applications/science/misc/openmvs/default.nixdeleted−77

This diff is too big to show here.

pkgs/applications/science/misc/root/5.nix+5

This diff is too big to show here.

pkgs/applications/science/misc/snakemake/default.nix+27−13

This diff is too big to show here.

pkgs/applications/science/molecular-dynamics/gromacs/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/physics/xfitter/default.nix+34−30

This diff is too big to show here.

pkgs/applications/science/physics/xfitter/undefined_behavior.patchdeleted−454

This diff is too big to show here.

pkgs/applications/science/programming/jflap/default.nixnew file+32

This diff is too big to show here.

pkgs/applications/science/robotics/mavproxy/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/robotics/sumorobot-manager/default.nix+1−1

This diff is too big to show here.

pkgs/applications/terminal-emulators/alacritty/default.nix−2

This diff is too big to show here.

pkgs/applications/terminal-emulators/foot/default.nix+3−2

This diff is too big to show here.

pkgs/applications/terminal-emulators/hyper/default.nix+2−2

This diff is too big to show here.

pkgs/applications/terminal-emulators/kitty/default.nix+5

This diff is too big to show here.

pkgs/applications/terminal-emulators/syncterm/default.nix+2

This diff is too big to show here.

pkgs/applications/terminal-emulators/wezterm/default.nix+21−10

This diff is too big to show here.

pkgs/applications/version-management/bitkeeper/default.nixdeleted−56

This diff is too big to show here.

pkgs/applications/version-management/commit-formatter/default.nix+1

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/bfg-repo-cleaner/default.nix+1

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/bitbucket-server-cli/default.nix+1

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/gh/default.nix+2−2

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/ghorg/default.nix+2−2

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/git-annex-utils/default.nix+1

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/git-branchless/default.nix+3−3

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/git-cliff/default.nix+3−3

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/git-crypt/default.nix+17−7

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/git-dit/default.nixdeleted−58

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/git-extras/default.nix+2−2

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/git-interactive-rebase-tool/default.nix+5−12

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/git-machete/default.nix+3−3

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/git/default.nix+27−18

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/gitbatch/default.nix+12−10

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/gitbatch/deps.nixdeleted−543

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/glab/default.nix+10−1

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/hut/default.nix+5−8

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/scmpuff/default.nix+14−9

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/scmpuff/deps.nixdeleted−273

This diff is too big to show here.

pkgs/applications/version-management/git-lfs/default.nix+2−2

This diff is too big to show here.

pkgs/applications/version-management/git-repo/default.nix+2−2

This diff is too big to show here.

pkgs/applications/version-management/git-review/default.nix+2−2

This diff is too big to show here.

pkgs/applications/version-management/git-sizer/default.nix+15−6

This diff is too big to show here.

pkgs/applications/version-management/gitea/default.nix+2−2

This diff is too big to show here.

pkgs/applications/version-management/github-desktop/default.nix+2−2

This diff is too big to show here.

pkgs/applications/version-management/gitkraken/default.nix+4−4

This diff is too big to show here.

pkgs/applications/version-management/gitlab/data.json+8−8

This diff is too big to show here.

pkgs/applications/version-management/gitlab/gitaly/Gemfile+1−1

This diff is too big to show here.

pkgs/applications/version-management/gitlab/gitaly/Gemfile.lock+13−13

This diff is too big to show here.

pkgs/applications/version-management/gitlab/gitaly/default.nix+4−4

This diff is too big to show here.

pkgs/applications/version-management/gitlab/gitaly/gemset.nix+16−16

This diff is too big to show here.

pkgs/applications/version-management/gitlab/gitlab-shell/default.nix+3−3

This diff is too big to show here.

pkgs/applications/version-management/gitlab/gitlab-workhorse/default.nix+2−2

This diff is too big to show here.

pkgs/applications/version-management/gitlab/rubyEnv/Gemfile+11−10

This diff is too big to show here.

pkgs/applications/version-management/gitlab/rubyEnv/Gemfile.lock+91−87

This diff is too big to show here.

pkgs/applications/version-management/gitlab/rubyEnv/gemset.nix+77−66

This diff is too big to show here.

pkgs/applications/version-management/gitoxide/default.nix+3−3

This diff is too big to show here.

pkgs/applications/version-management/gogs/default.nix+3−3

This diff is too big to show here.

pkgs/applications/version-management/jujutsu/default.nix+3−2

This diff is too big to show here.

pkgs/applications/version-management/mercurial/default.nix+3−8

This diff is too big to show here.

pkgs/applications/version-management/mercurial/fix-rhg-type-aarch64.patchdeleted−12

This diff is too big to show here.

pkgs/applications/version-management/monotone/default.nix+2

This diff is too big to show here.

pkgs/applications/version-management/p4/default.nix+1−1

This diff is too big to show here.

pkgs/applications/version-management/pijul/default.nix+3−3

This diff is too big to show here.

pkgs/applications/version-management/rcs/default.nix+1−1

This diff is too big to show here.

pkgs/applications/version-management/redmine/Gemfile+2−2

This diff is too big to show here.

pkgs/applications/version-management/redmine/Gemfile.lock+48−50

This diff is too big to show here.

pkgs/applications/version-management/redmine/default.nix+4−6

This diff is too big to show here.

pkgs/applications/version-management/redmine/gemset.nix+39−49

This diff is too big to show here.

pkgs/applications/version-management/redmine/update.shnew file+17

This diff is too big to show here.

pkgs/applications/version-management/subversion/default.nix+5−10

This diff is too big to show here.

pkgs/applications/version-management/verco/default.nix+3−3

This diff is too big to show here.

pkgs/applications/version-management/yadm/default.nix+2−2

This diff is too big to show here.

pkgs/applications/video/ani-cli/default.nix+2−2

This diff is too big to show here.

pkgs/applications/video/celluloid/default.nix+2−4

This diff is too big to show here.

pkgs/applications/video/clickshare-csc1/default.nix−2

This diff is too big to show here.

pkgs/applications/video/davinci-resolve/default.nixnew file+179

This diff is too big to show here.

pkgs/applications/video/epgstation/default.nix+3−5

This diff is too big to show here.

pkgs/applications/video/epgstation/update.nix+2−4

This diff is too big to show here.

pkgs/applications/video/f1viewer/default.nix+2−2

This diff is too big to show here.

pkgs/applications/video/ffmpeg-normalize/default.nix+2−2

This diff is too big to show here.

pkgs/applications/video/handbrake/default.nix+2−2

This diff is too big to show here.

pkgs/applications/video/hdhomerun-config-gui/default.nix+3−1

This diff is too big to show here.

pkgs/applications/video/hyperion-ng/default.nixnew file+50

This diff is too big to show here.

pkgs/applications/video/kodi/add-KODI_WEBSERVER_EXTRA_WHITELIST.patchnew file+88

This diff is too big to show here.

pkgs/applications/video/kodi/unwrapped.nix+17−2

This diff is too big to show here.

pkgs/applications/video/kodi/wrapper.nix−6

This diff is too big to show here.

pkgs/applications/video/lightworks/default.nix+4−4

This diff is too big to show here.

pkgs/applications/video/mirakurun/default.nix+4−6

This diff is too big to show here.

pkgs/applications/video/mirakurun/update.nix+3−7

This diff is too big to show here.

pkgs/applications/video/mkvtoolnix/default.nix+2−2

This diff is too big to show here.

pkgs/applications/video/mpv/scripts/autocrop.nixnew file+19

This diff is too big to show here.

pkgs/applications/video/mpv/scripts/autodeint.nixnew file+19

This diff is too big to show here.

pkgs/applications/video/obs-studio/default.nix+2−2

This diff is too big to show here.

pkgs/applications/video/obs-studio/plugins/default.nix+1

This diff is too big to show here.

pkgs/applications/video/obs-studio/plugins/obs-vkcapture.nixnew file+35

This diff is too big to show here.

pkgs/applications/video/peek/default.nix−2

This diff is too big to show here.

pkgs/applications/video/pitivi/default.nix+8

This diff is too big to show here.

pkgs/applications/video/quvi/library.nix+1

This diff is too big to show here.

pkgs/applications/video/quvi/scripts.nix+1

This diff is too big to show here.

pkgs/applications/video/quvi/tool.nix+1

This diff is too big to show here.

pkgs/applications/video/vdr/plugins.nix+5−80

This diff is too big to show here.

pkgs/applications/video/vlc/default.nix+2−2

This diff is too big to show here.

pkgs/applications/video/webcamoid/default.nix+4−9

This diff is too big to show here.

pkgs/applications/video/webtorrent_desktop/default.nix+68−87

This diff is too big to show here.

pkgs/applications/virtualization/cloud-hypervisor/default.nix+3−3

This diff is too big to show here.

pkgs/applications/virtualization/containerd/default.nix+2−2

This diff is too big to show here.

pkgs/applications/virtualization/crosvm/Cargo.lock+31−22

This diff is too big to show here.

pkgs/applications/virtualization/crosvm/generate-cargo.shnew file+7

This diff is too big to show here.

pkgs/applications/virtualization/crosvm/update.py+10−2

This diff is too big to show here.

pkgs/applications/virtualization/crosvm/upstream-info.json+5−5

This diff is too big to show here.

pkgs/applications/virtualization/crun/default.nix+2−2

This diff is too big to show here.

pkgs/applications/virtualization/distrobox/default.nix+2−2

This diff is too big to show here.

pkgs/applications/virtualization/docker-slim/default.nix+2−2

This diff is too big to show here.

pkgs/applications/virtualization/docker/buildx.nix+2−2

This diff is too big to show here.

pkgs/applications/virtualization/docker/compose.nix+3−3

This diff is too big to show here.

pkgs/applications/virtualization/ecs-agent/default.nix+1

This diff is too big to show here.

pkgs/applications/virtualization/firectl/default.nix+6−6

This diff is too big to show here.

pkgs/applications/virtualization/firectl/gomod.patchdeleted−15

This diff is too big to show here.

pkgs/applications/virtualization/imgcrypt/default.nix+2−2

This diff is too big to show here.

pkgs/applications/virtualization/kvmtool/default.nixnew file+23

This diff is too big to show here.

pkgs/applications/virtualization/lima/default.nix+8−3

This diff is too big to show here.

pkgs/applications/virtualization/podman-tui/default.nix+4−4

This diff is too big to show here.

pkgs/applications/virtualization/podman/default.nix+3−2

This diff is too big to show here.

pkgs/applications/virtualization/qemu/allow-virtfs-on-darwin.patchdeleted−77

This diff is too big to show here.

pkgs/applications/virtualization/qemu/default.nix+18−65

This diff is too big to show here.

pkgs/applications/virtualization/qemu/provide-fallback-for-utimensat.patch+4−4

This diff is too big to show here.

pkgs/applications/virtualization/qemu/rename-9p-util.patchdeleted−54

This diff is too big to show here.

pkgs/applications/virtualization/qemu/revert-ui-cocoa-add-clipboard-support.patchnew file+208

This diff is too big to show here.

pkgs/applications/virtualization/virt-manager/default.nix+12−2

This diff is too big to show here.

pkgs/applications/virtualization/virtualbox/guest-additions/default.nix+3−7

This diff is too big to show here.

pkgs/applications/virtualization/vmware-workstation/default.nixnew file+341

This diff is too big to show here.

pkgs/applications/virtualization/vmware-workstation/vmware-bootstrapnew file+11

This diff is too big to show here.

pkgs/applications/virtualization/vmware-workstation/vmware-confignew file+21

This diff is too big to show here.

pkgs/applications/virtualization/vmware-workstation/vmware-installer-bootstrapnew file+5

This diff is too big to show here.

pkgs/applications/virtualization/vmware-workstation/vmware-modconfignew file+8

This diff is too big to show here.

pkgs/applications/virtualization/x11docker/default.nix+2−2

This diff is too big to show here.

pkgs/applications/window-managers/afterstep/default.nix+13−1

This diff is too big to show here.

pkgs/applications/window-managers/berry/default.nix+2−2

This diff is too big to show here.

pkgs/applications/window-managers/clfswm/default.nixdeleted−51

This diff is too big to show here.

pkgs/applications/window-managers/clfswm/require-clx.patchdeleted−13

This diff is too big to show here.

pkgs/applications/window-managers/herbstluftwm/default.nix+9−4

This diff is too big to show here.

pkgs/applications/window-managers/i3/status-rust.nix+3−3

This diff is too big to show here.

pkgs/applications/window-managers/phosh/default.nix+2−2

This diff is too big to show here.

pkgs/applications/window-managers/sway/idle.nix+2

This diff is too big to show here.

pkgs/applications/window-managers/sway/lock-effects.nix+8

This diff is too big to show here.

pkgs/applications/window-managers/wmfs/default.nix+1−5

This diff is too big to show here.

pkgs/applications/window-managers/wmii-hg/default.nixdeleted−46

This diff is too big to show here.

pkgs/applications/window-managers/wmii/default.nixnew file+72

This diff is too big to show here.

pkgs/build-support/build-fhs-userenv-bubblewrap/env.nix+1−1

This diff is too big to show here.

pkgs/build-support/build-graalvm-native-image/default.nix+7−5

This diff is too big to show here.

pkgs/build-support/docker/default.nix+17−25

This diff is too big to show here.

pkgs/build-support/docker/examples.nix+1−1

This diff is too big to show here.

pkgs/build-support/dotnet/build-dotnet-module/default.nix+10−5

This diff is too big to show here.

pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-build-hook.sh+2−1

This diff is too big to show here.

pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-check-hook.sh+2−1

This diff is too big to show here.

pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh+5−1

This diff is too big to show here.

pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-fixup-hook.sh+5−4

This diff is too big to show here.

pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-install-hook.sh+2−1

This diff is too big to show here.

pkgs/build-support/dotnet/make-nuget-source/default.nix+26−18

This diff is too big to show here.

pkgs/build-support/dotnet/nuget-to-nix/default.nix+25−3

This diff is too big to show here.

pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh+3−1

This diff is too big to show here.

pkgs/build-support/emacs/wrapper.nix+16−2

This diff is too big to show here.

pkgs/build-support/emacs/wrapper.sh+1−1

This diff is too big to show here.

pkgs/build-support/fake-nss/default.nixnew file+24

This diff is too big to show here.

pkgs/build-support/fetchfirefoxaddon/default.nix+2−2

This diff is too big to show here.

pkgs/build-support/fetchgit/default.nix+2−1

This diff is too big to show here.

pkgs/build-support/fetchnextcloudapp/default.nix+1−6

This diff is too big to show here.

pkgs/build-support/fetchurl/default.nix+1−1

This diff is too big to show here.

pkgs/build-support/fetchurl/mirrors.nix+1

This diff is too big to show here.

pkgs/build-support/kernel/make-initrd-ng-tool.nixnew file+16

This diff is too big to show here.

pkgs/build-support/kernel/make-initrd-ng.nixnew file+93

This diff is too big to show here.

pkgs/build-support/kernel/make-initrd-ng/Cargo.locknew file+5

This diff is too big to show here.

pkgs/build-support/kernel/make-initrd-ng/Cargo.tomlnew file+9

This diff is too big to show here.

pkgs/build-support/kernel/make-initrd-ng/README.mdnew file+79

This diff is too big to show here.

pkgs/build-support/kernel/make-initrd-ng/src/main.rsnew file+216

This diff is too big to show here.

pkgs/build-support/kernel/make-initrd.nix+2−2

This diff is too big to show here.

pkgs/build-support/kernel/make-initrd.sh+1−1

This diff is too big to show here.

pkgs/build-support/make-darwin-bundle/default.nix+4−4

This diff is too big to show here.

pkgs/build-support/make-desktopitem/default.nix+3−8

This diff is too big to show here.

pkgs/build-support/ocaml/dune.nix+2−2

This diff is too big to show here.

pkgs/build-support/ocaml/oasis.nix+1−1

This diff is too big to show here.

pkgs/build-support/rust/build-rust-crate/build-crate.nix+3−2

This diff is too big to show here.

pkgs/build-support/rust/build-rust-crate/configure-crate.nix+2−1

This diff is too big to show here.

pkgs/build-support/rust/build-rust-crate/default.nix+11−4

This diff is too big to show here.

pkgs/build-support/rust/default-crate-overrides.nix+1−1

This diff is too big to show here.

pkgs/build-support/setup-hooks/auto-patchelf.py+23−17

This diff is too big to show here.

pkgs/build-support/setup-hooks/auto-patchelf.sh+9−1

This diff is too big to show here.

pkgs/build-support/setup-hooks/copy-desktop-items.sh+5−4

This diff is too big to show here.

pkgs/build-support/setup-hooks/desktop-to-darwin-bundle.sh+26−6

This diff is too big to show here.

pkgs/build-support/setup-hooks/make-wrapper.sh+5

This diff is too big to show here.

pkgs/build-support/setup-hooks/postgresql-test-hook/default.nixnew file+9

This diff is too big to show here.

pkgs/build-support/setup-hooks/postgresql-test-hook/postgresql-test-hook.shnew file+79

This diff is too big to show here.

pkgs/build-support/setup-hooks/postgresql-test-hook/test.nixnew file+27

This diff is too big to show here.

pkgs/build-support/setup-hooks/wrap-gapps-hook/wrap-gapps-hook.sh−4

This diff is too big to show here.

pkgs/build-support/testers/default.nixnew file+18

This diff is too big to show here.

pkgs/build-support/test-equal-derivation.nix → pkgs/build-support/testers/test-equal-derivation.nixrenamed+1−18

This diff is too big to show here.

pkgs/build-support/trivial-builders.nix+9−39

This diff is too big to show here.

pkgs/build-support/trivial-builders/test/write-text-file.nixnew file+34

This diff is too big to show here.

pkgs/build-support/writers/default.nix+3−3

This diff is too big to show here.

pkgs/common-updater/git-updater.nix+6−2

This diff is too big to show here.

pkgs/common-updater/scripts/list-git-tags+1−1

This diff is too big to show here.

pkgs/data/documentation/rnrs/r3rs.nixdeleted−7

This diff is too big to show here.

pkgs/data/documentation/scheme-manpages/default.nix+3−3

This diff is too big to show here.

pkgs/data/fonts/amiri/default.nix+2−2

This diff is too big to show here.

pkgs/data/fonts/annapurna-sil/default.nixnew file+29

This diff is too big to show here.

pkgs/data/fonts/comic-mono/comic-mono-weight.confnew file+14

This diff is too big to show here.

pkgs/data/fonts/comic-mono/default.nixnew file+35

This diff is too big to show here.

pkgs/data/fonts/ezra-sil/default.nixnew file+26

This diff is too big to show here.

pkgs/data/fonts/galatia-sil/default.nixnew file+29

This diff is too big to show here.

pkgs/data/fonts/iosevka/bin.nix+3−2

This diff is too big to show here.

pkgs/data/fonts/iosevka/variants.nix+92−92

This diff is too big to show here.

pkgs/data/fonts/kacst/default.nixnew file+22

This diff is too big to show here.

pkgs/data/fonts/lao/default.nixnew file+22

This diff is too big to show here.

pkgs/data/fonts/material-design-icons/default.nix+3−6

This diff is too big to show here.

pkgs/data/fonts/noto-fonts/default.nix+4−4

This diff is too big to show here.

pkgs/data/fonts/sarasa-gothic/default.nix+2−2

This diff is too big to show here.

pkgs/data/fonts/sudo/default.nix+2−2

This diff is too big to show here.

pkgs/data/fonts/times-newer-roman/default.nix+1−1

This diff is too big to show here.

pkgs/data/fonts/uni-vga/default.nix+4−6

This diff is too big to show here.

pkgs/data/fonts/unifont/default.nix+4−6

This diff is too big to show here.

pkgs/data/fonts/unifont_upper/default.nix+2−2

This diff is too big to show here.

pkgs/data/icons/comixcursors/default.nix+5−25

This diff is too big to show here.

pkgs/data/icons/elementary-xfce-icon-theme/default.nix+3−3

This diff is too big to show here.

pkgs/data/icons/hicolor-icon-theme/default.nix+3−2

This diff is too big to show here.

pkgs/data/icons/luna-icons/default.nix+5−2

This diff is too big to show here.

pkgs/data/misc/cacert/default.nix+2−2

This diff is too big to show here.

pkgs/data/misc/cacert/update.sh+7−10

This diff is too big to show here.

pkgs/data/misc/cldr-annotations/default.nixnew file+24

This diff is too big to show here.

pkgs/data/misc/cldr-emoji-annotation/default.nixdeleted−27

This diff is too big to show here.

pkgs/data/misc/dns-root-data/default.nix+2−1

This diff is too big to show here.

pkgs/data/misc/freepats/default.nix+3−2

This diff is too big to show here.

pkgs/data/misc/hackage/default.nix+2−1

This diff is too big to show here.

pkgs/data/misc/hackage/pin.json+4−4

This diff is too big to show here.

pkgs/data/misc/iana-etc/default.nix+2−3

This diff is too big to show here.

pkgs/data/misc/nixos-artwork/wallpapers.nix+16

This diff is too big to show here.

pkgs/data/misc/shared-mime-info/default.nix+1

This diff is too big to show here.

pkgs/data/misc/tzdata/default.nix+3−3

This diff is too big to show here.

pkgs/data/misc/unicode-emoji/default.nix+4−12

This diff is too big to show here.

pkgs/data/misc/wireless-regdb/default.nix+2−2

This diff is too big to show here.

pkgs/data/sgml+xml/schemas/xml-dtd/docbook-ebnf/default.nix+4−3

This diff is too big to show here.

pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.1.2.nix+3−8

This diff is too big to show here.

pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.2.nix+2−5

This diff is too big to show here.

pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.3.nix+2−5

This diff is too big to show here.

pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.4.nix+2−5

This diff is too big to show here.

pkgs/data/sgml+xml/schemas/xml-dtd/docbook/4.5.nix+2−5

This diff is too big to show here.

pkgs/data/sgml+xml/schemas/xml-dtd/docbook/generic.nix+6−4

This diff is too big to show here.

pkgs/data/sgml+xml/schemas/xml-dtd/xhtml1/default.nix+3−2

This diff is too big to show here.

pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/default.nix+5−1

This diff is too big to show here.

pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/fix-man-options-duplication.patchnew file+11

This diff is too big to show here.

pkgs/data/themes/arc/default.nix+2−2

This diff is too big to show here.

pkgs/data/themes/flat-remix-gnome/default.nix+4−4

This diff is too big to show here.

pkgs/data/themes/flat-remix-gtk/default.nix+2−2

This diff is too big to show here.

pkgs/data/themes/gnome-breeze/default.nixdeleted−29

This diff is too big to show here.

pkgs/data/themes/orchis-theme/default.nix+2−2

This diff is too big to show here.

pkgs/data/themes/vimix/default.nix+12−4

This diff is too big to show here.

pkgs/data/themes/yaru/default.nix+2−5

This diff is too big to show here.

pkgs/desktops/cdesktopenv/default.nix+15−2

This diff is too big to show here.

pkgs/desktops/enlightenment/econnman/default.nix+4−4

This diff is too big to show here.

pkgs/desktops/enlightenment/ecrire/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/enlightenment/efl/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/enlightenment/enlightenment/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/enlightenment/ephoto/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/enlightenment/evisum/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/enlightenment/rage/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/enlightenment/terminology/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/gnome-2/bindings/gnome-python/default.nix+4−4

This diff is too big to show here.

pkgs/desktops/gnome-2/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/gnome-2/desktop/scrollkeeper/default.nix+6−4

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/ORBit2/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/gnome-common/default.nix+4−4

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/gnome-mime-data/default.nix+5−4

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/gnome-vfs/default.nix+4−4

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/gtkhtml/default.nix+4−3

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libIDL/default.nix+4−4

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libart_lgpl/default.nix+4−3

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libbonobo/default.nix+4−4

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libbonoboui/default.nix+4−4

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libglade/default.nix+6−8

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libgnome/default.nix+4−4

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libgnomecanvas/default.nix+4−4

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libgnomecanvasmm/default.nix+5−4

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libgnomecups/default.nix+4−3

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libgnomeprint/default.nix+3−2

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libgnomeprintui/default.nix+5−4

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libgnomeui/default.nix+4−4

This diff is too big to show here.

pkgs/desktops/gnome-2/platform/libgtkhtml/default.nix+5−4

This diff is too big to show here.

pkgs/desktops/gnome/apps/gedit/default.nix+5−2

This diff is too big to show here.

pkgs/desktops/gnome/apps/ghex/default.nix+8−27

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-boxes/default.nix+7

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-boxes/fix-gir-lib-path.patchnew file+22

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-calendar/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-connections/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-maps/default.nix+2−13

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-music/default.nix+4−5

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-nettool/default.nix+61−11

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-text-editor/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-todo/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/gnome/core/eog/default.nix+9−2

This diff is too big to show here.

pkgs/desktops/gnome/core/eog/fix-gir-lib-path.patchnew file+13

This diff is too big to show here.

pkgs/desktops/gnome/core/epiphany/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/evince/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/evolution-data-server/default.nix+2−2

This diff is too big to show here.

pkgs/tools/bluetooth/blueberry/gnome-bluetooth.nix → pkgs/desktops/gnome/core/gnome-bluetooth/1.0/default.nixrenamed+5−4

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-initial-setup/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-remote-desktop/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-software/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/gucharmap/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/mutter/3.38/default.nix+3−1

This diff is too big to show here.

pkgs/desktops/gnome/core/mutter/default.nix+3−1

This diff is too big to show here.

pkgs/desktops/gnome/core/nautilus/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/simple-scan/default.nix+3−4

This diff is too big to show here.

pkgs/desktops/gnome/core/sushi/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/zenity/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/default.nix+3−16

This diff is too big to show here.

pkgs/desktops/gnome/extensions/arcmenu/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/extensions/collisions.json+32

This diff is too big to show here.

pkgs/desktops/gnome/extensions/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/gnome/extensions/extensionRenames.nix+15−12

This diff is too big to show here.

pkgs/desktops/gnome/extensions/extensions.json+248−223

This diff is too big to show here.

pkgs/desktops/gnome/extensions/impatience/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/gnome/extensions/manuallyPackaged.nix−1

This diff is too big to show here.

pkgs/desktops/gnome/extensions/night-theme-switcher/default.nixdeleted−35

This diff is too big to show here.

pkgs/desktops/gnome/extensions/system-monitor/default.nix+11−24

This diff is too big to show here.

pkgs/desktops/gnome/extensions/update-extensions.py+66−47

This diff is too big to show here.

pkgs/desktops/gnome/games/aisleriot/default.nix+4−4

This diff is too big to show here.

pkgs/desktops/gnome/games/five-or-more/default.nix+31−6

This diff is too big to show here.

pkgs/desktops/gnome/games/hitori/default.nix+2−14

This diff is too big to show here.

pkgs/desktops/gnome/games/swell-foop/default.nix+3−4

This diff is too big to show here.

pkgs/desktops/gnome/games/tali/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/misc/gnome-flashback/default.nix+4−3

This diff is too big to show here.

pkgs/desktops/gnome/misc/gnome-panel/default.nix+12−1

This diff is too big to show here.

pkgs/desktops/lumina/lumina-calculator/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/lumina/lumina-pdf/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/lumina/lumina/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/lxqt/compton-conf/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/lxqt/default.nix+2−5

This diff is too big to show here.

pkgs/desktops/lxqt/libfm-qt/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/liblxqt/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/libqtxdg/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/libsysstat/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/lxqt/lximage-qt/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-about/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-admin/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-archiver/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-build-tools/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-config/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-globalkeys/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-notificationd/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-openssh-askpass/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-panel/default.nix+4−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-policykit/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-powermanagement/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-qtplugin/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-runner/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-session/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-sudo/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/lxqt-themes/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/obconf-qt/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/lxqt/pavucontrol-qt/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/pcmanfm-qt/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/qlipper/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/lxqt/qps/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/qterminal/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/qtermwidget/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/screengrab/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/lxqt/xdg-desktop-portal-lxqt/default.nixnew file+41

This diff is too big to show here.

pkgs/desktops/mate/caja-extensions/default.nix+17−1

This diff is too big to show here.

pkgs/desktops/mate/caja-extensions/hardcode-gsettings.patchnew file+169

This diff is too big to show here.

pkgs/desktops/mate/default.nix+2

This diff is too big to show here.

pkgs/desktops/mate/mate-control-center/default.nix+3−1

This diff is too big to show here.

pkgs/desktops/mate/mate-panel/default.nix+7

This diff is too big to show here.

pkgs/desktops/mate/mate-settings-daemon/wrapped.nixnew file+22

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-code/default.nix+2−12

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-dock/default.nix+8

This diff is too big to show here.

pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/switchboard-plugs/onlineaccounts/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/switchboard/default.nix+2−15

This diff is too big to show here.

pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix+12−5

This diff is too big to show here.

pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix+6−6

This diff is too big to show here.

pkgs/desktops/pantheon/default.nix+4−2

This diff is too big to show here.

pkgs/desktops/pantheon/desktop/gala/default.nix+4−15

This diff is too big to show here.

pkgs/desktops/pantheon/desktop/gnome-bluetooth-contract/default.nix+4−5

This diff is too big to show here.

pkgs/desktops/pantheon/granite/7/default.nixnew file+73

This diff is too big to show here.

pkgs/desktops/pantheon/services/elementary-notifications/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/plasma-5/3rdparty/addons/bismuth/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/plasma-5/3rdparty/kwin/scripts/dynamic-workspaces.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/fetch.sh+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kscreen.nix+2−2

This diff is too big to show here.

pkgs/desktops/plasma-5/srcs.nix+214−214

This diff is too big to show here.

pkgs/desktops/xfce/applications/mousepad/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/xfce/applications/xfce4-screensaver/default.nixnew file+49

This diff is too big to show here.

pkgs/desktops/xfce/applications/xfce4-terminal/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/xfce/core/thunar/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/xfce/core/xfce4-panel/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/xfce/default.nix+3−1

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-eyes-plugin/default.nix+2−2

This diff is too big to show here.

pkgs/development/beam-modules/elvis-erlang/default.nix+2−1

This diff is too big to show here.

pkgs/development/beam-modules/erlang-ls/default.nix+3−3

This diff is too big to show here.

pkgs/development/beam-modules/erlang-ls/rebar-deps.nix+8−7

This diff is too big to show here.

pkgs/development/compilers/abcl/default.nix+6−1

This diff is too big to show here.

pkgs/development/compilers/adoptopenjdk-bin/generate-sources.py+1

This diff is too big to show here.

pkgs/development/compilers/adoptopenjdk-bin/jdk-darwin-base.nix+4−3

This diff is too big to show here.

pkgs/development/compilers/adoptopenjdk-bin/jdk-linux-base.nix+3−3

This diff is too big to show here.

pkgs/development/compilers/adoptopenjdk-bin/sources.json+244−100

This diff is too big to show here.

pkgs/development/compilers/alan/2.nixnew file+31

This diff is too big to show here.

pkgs/development/compilers/alan/default.nixnew file+48

This diff is too big to show here.

pkgs/development/compilers/aldor/default.nixdeleted−54

This diff is too big to show here.

pkgs/development/compilers/algol68g/default.nix+1

This diff is too big to show here.

pkgs/development/compilers/aliceml/default.nixdeleted−59

This diff is too big to show here.

pkgs/development/compilers/aliceml/make.patchdeleted−20

This diff is too big to show here.

pkgs/development/compilers/aliceml/seam.patchdeleted−13

This diff is too big to show here.

pkgs/development/compilers/bluespec/default.nix+13−5

This diff is too big to show here.

pkgs/development/compilers/bupc/default.nix−1

This diff is too big to show here.

pkgs/development/compilers/chez/default.nix+3−3

This diff is too big to show here.

pkgs/development/compilers/chicken/5/chicken.nix+6−1

This diff is too big to show here.

pkgs/development/compilers/chicken/5/eggs.nix+464−4

This diff is too big to show here.

pkgs/development/compilers/chicken/5/eggs.scm+8

This diff is too big to show here.

pkgs/development/compilers/coreclr/default.nixdeleted−100

This diff is too big to show here.

pkgs/development/compilers/crystal/build-package.nix+5−1

This diff is too big to show here.

pkgs/development/compilers/crystal/default.nix+1−1

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.shnew file+14

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/common.nix+1

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/default.nixdeleted−90

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/extension.nixnew file+15

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/redist/build-cuda-redist-package.nixnew file+51

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/redist/extension.nixnew file+32

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/redist/manifests/redistrib_11.4.4.jsonnew file+862

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/redist/manifests/redistrib_11.5.2.jsonnew file+873

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/redist/manifests/redistrib_11.6.2.jsonnew file+873

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/redist/overrides.nixnew file+72

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/versions.tomlnew file+61

This diff is too big to show here.

pkgs/development/compilers/dmd/binary.nix+3−2

This diff is too big to show here.

pkgs/development/compilers/dotnet/default.nix+27−27

This diff is too big to show here.

pkgs/development/compilers/elm/default.nix+12

This diff is too big to show here.

pkgs/development/compilers/elm/packages/node-packages.nix+1122−860

This diff is too big to show here.

pkgs/development/compilers/fennel/default.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/gambit/build.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/gcc/10/default.nix+11−10

This diff is too big to show here.

pkgs/development/compilers/gcc/10/gcc10-asan-glibc-2.34.patchnew file+70

This diff is too big to show here.

pkgs/development/compilers/gcc/11/default.nix+2−7

This diff is too big to show here.

pkgs/development/compilers/gcc/4.8/default.nix+3−8

This diff is too big to show here.

pkgs/development/compilers/gcc/4.9/default.nix+3−8

This diff is too big to show here.

pkgs/development/compilers/gcc/6/default.nix+4−7

This diff is too big to show here.

pkgs/development/compilers/gcc/6/gnat-glibc234.patchnew file+30

This diff is too big to show here.

pkgs/development/compilers/gcc/7/default.nix+6−7

This diff is too big to show here.

pkgs/development/compilers/gcc/7/gcc8-asan-glibc-2.34.patchnew file+70

This diff is too big to show here.

pkgs/development/compilers/gcc/8/default.nix+3−7

This diff is too big to show here.

pkgs/development/compilers/gcc/9/default.nix+9−8

This diff is too big to show here.

pkgs/development/compilers/gcc/9/gcc9-asan-glibc-2.34.patchnew file+70

This diff is too big to show here.

pkgs/development/compilers/gcc/builder.sh+4

This diff is too big to show here.

pkgs/development/compilers/ghc/8.10.2-binary.nix+14

This diff is too big to show here.

pkgs/development/compilers/ghc/8.10.7-binary.nix+14−1

This diff is too big to show here.

pkgs/development/compilers/ghc/8.10.7.nix+1−1

This diff is too big to show here.

pkgs/development/compilers/ghc/9.0.2.nix+21

This diff is too big to show here.

pkgs/development/compilers/ghc/head.nix+3−3

This diff is too big to show here.

pkgs/development/compilers/ghcjs/8.10/common-overrides.nix+32−3

This diff is too big to show here.

pkgs/development/compilers/ghcjs/8.10/default.nix+2−1

This diff is too big to show here.

pkgs/development/compilers/glslang/default.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/go-jsonnet/default.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/go/1.16.nix+1−2

This diff is too big to show here.

pkgs/development/compilers/go/1.17.nix+3−4

This diff is too big to show here.

pkgs/development/compilers/go/1.18.nix+3−4

This diff is too big to show here.

pkgs/development/compilers/go/2-dev.nixdeleted−276

This diff is too big to show here.

pkgs/development/compilers/go/ssl-cert-file-2-dev.patchdeleted−54

This diff is too big to show here.

pkgs/development/compilers/graalvm/community-edition/default.nix+58−10

This diff is too big to show here.

pkgs/development/compilers/graalvm/community-edition/graalvm11-ce-sources.jsonnew file+42

This diff is too big to show here.

pkgs/development/compilers/graalvm/community-edition/graalvm17-ce-sources.jsonnew file+42

This diff is too big to show here.

pkgs/development/compilers/graalvm/community-edition/hashes.nixdeleted−57

This diff is too big to show here.

pkgs/development/compilers/graalvm/community-edition/mkGraal.nix+112−112

This diff is too big to show here.

pkgs/development/compilers/graalvm/community-edition/update.nixnew file+225

This diff is too big to show here.

pkgs/development/compilers/graalvm/community-edition/update.shdeleted−81

This diff is too big to show here.

pkgs/development/compilers/graalvm/enterprise-edition.nixdeleted−183

This diff is too big to show here.

pkgs/development/compilers/hare/config-template.mknew file+27

This diff is too big to show here.

pkgs/development/compilers/hare/hare.nixnew file+93

This diff is too big to show here.

pkgs/development/compilers/hare/harec.nixnew file+45

This diff is too big to show here.

pkgs/development/compilers/hhvm/default.nixdeleted−68

This diff is too big to show here.

pkgs/development/compilers/hhvm/flexible-array-members-gcc6.patchdeleted−20

This diff is too big to show here.

pkgs/development/compilers/inklecate/default.nix+1−1

This diff is too big to show here.

pkgs/development/compilers/inklecate/deps-darwin.nix+1−1

This diff is too big to show here.

pkgs/development/compilers/inklecate/deps-linux.nix+1−1

This diff is too big to show here.

pkgs/development/compilers/jasmin-compiler/default.nixnew file+41

This diff is too big to show here.

pkgs/development/compilers/julia/1.6-bin.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/kotlin/default.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/kotlin/native.nix+4−4

This diff is too big to show here.

pkgs/development/compilers/ldc/binary.nix+3−2

This diff is too big to show here.

pkgs/development/compilers/llvm/10/llvm/default.nix+6

This diff is too big to show here.

pkgs/development/compilers/llvm/11/llvm/default.nix+6

This diff is too big to show here.

pkgs/development/compilers/llvm/12/llvm/default.nix+6

This diff is too big to show here.

pkgs/development/compilers/llvm/13/llvm/default.nix+6

This diff is too big to show here.

pkgs/development/compilers/llvm/14/clang/default.nix+1

This diff is too big to show here.

pkgs/development/compilers/llvm/14/default.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/llvm/14/llvm/default.nix+6

This diff is too big to show here.

pkgs/development/compilers/llvm/5/llvm/default.nix+6

This diff is too big to show here.

pkgs/development/compilers/llvm/6/llvm/default.nix+6

This diff is too big to show here.

pkgs/development/compilers/llvm/7/llvm/default.nix+6

This diff is too big to show here.

pkgs/development/compilers/llvm/8/llvm/default.nix+6

This diff is too big to show here.

pkgs/development/compilers/llvm/9/llvm/default.nix+6

This diff is too big to show here.

pkgs/development/compilers/llvm/git/llvm/default.nix+6

This diff is too big to show here.

pkgs/development/compilers/llvm/multi.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/mruby/default.nix+9−1

This diff is too big to show here.

pkgs/development/compilers/mrustc/default.nix+1

This diff is too big to show here.

pkgs/development/compilers/muon/default.nix → pkgs/development/compilers/muonlang/default.nixrenamed

The content is the same.

pkgs/development/compilers/obliv-c/default.nix+5−3

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.00.1.nix+7−1

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.01.0.nix+7−1

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.02.nix+7−1

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.03.nix+6

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.04.nix+6

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.05.nix+6

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.06.nix+6

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.07.nix+6

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.08.nix+6

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.09.nix+6

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.10.nix+3

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.11.nix+3

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.12.nix+5

This diff is too big to show here.

pkgs/development/compilers/ocaml/4.14.nix+2−5

This diff is too big to show here.

pkgs/development/compilers/ocaml/Makefile.nixpkgsnew file+16

This diff is too big to show here.

pkgs/development/compilers/ocaml/generic.nix+24−12

This diff is too big to show here.

pkgs/development/compilers/ocaml/glibc-2.34-for-ocaml-4.10-and-11.patchnew file+37

This diff is too big to show here.

pkgs/development/compilers/ocaml/metaocaml-3.09.nixdeleted−34

This diff is too big to show here.

pkgs/development/compilers/open-watcom/v2.nix+3−3

This diff is too big to show here.

pkgs/development/compilers/opendylan/bin.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/openjdk/11.nix+8−4

This diff is too big to show here.

pkgs/development/compilers/openjdk/16.nix+1

This diff is too big to show here.

pkgs/development/compilers/openjdk/17.nix+3−3

This diff is too big to show here.

pkgs/development/compilers/openjdk/8.nix+2−1

This diff is too big to show here.

pkgs/development/compilers/openjdk/darwin/8.nix+6

This diff is too big to show here.

pkgs/development/compilers/openjdk/fix-glibc-2.34.patchnew file+24

This diff is too big to show here.

pkgs/development/compilers/openjdk/fix-library-path-jdk11.patch+21−3

This diff is too big to show here.

pkgs/development/compilers/polyml/5.6.nix+9−1

This diff is too big to show here.

pkgs/development/compilers/polyml/5.7.nix+10−2

This diff is too big to show here.

pkgs/development/compilers/polyml/default.nix+7−1

This diff is too big to show here.

pkgs/development/compilers/ponyc/default.nix+2−11

This diff is too big to show here.

pkgs/development/compilers/ponyc/disable-tests.patch+9−7

This diff is too big to show here.

pkgs/development/compilers/ponyc/make-safe-for-sandbox.patch+17−12

This diff is too big to show here.

pkgs/development/compilers/ponyc/pony-corral.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/purescript/purescript/default.nix+5−7

This diff is too big to show here.

pkgs/development/compilers/purescript/purescript/test-minimal-module/Main.js+1−1

This diff is too big to show here.

pkgs/development/compilers/purescript/purescript/test-minimal-module/default.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/qbe/default.nix+3−3

This diff is too big to show here.

pkgs/development/compilers/rust/1_58.nixdeleted−63

This diff is too big to show here.

pkgs/development/compilers/rust/1_60.nixnew file+64

This diff is too big to show here.

pkgs/development/compilers/rust/binary.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/rust/cargo.nix+1−1

This diff is too big to show here.

pkgs/development/compilers/rust/rustfmt.nix+4−4

This diff is too big to show here.

pkgs/development/compilers/sbcl/2.2.4.nixnew file+4

This diff is too big to show here.

pkgs/development/compilers/scryer-prolog/cargo.patch+27−74

This diff is too big to show here.

pkgs/development/compilers/scryer-prolog/default.nix+19−6

This diff is too big to show here.

pkgs/development/compilers/scryer-prolog/fix-tests.patchnew file+29

This diff is too big to show here.

pkgs/development/compilers/solc/default.nix+34−11

This diff is too big to show here.

pkgs/development/compilers/squeak/default.nix+1−3

This diff is too big to show here.

pkgs/development/compilers/swift/default.nix−6

This diff is too big to show here.

pkgs/development/compilers/tinygo/default.nix+1−1

This diff is too big to show here.

pkgs/development/compilers/uasm/default.nix+31−18

This diff is too big to show here.

pkgs/development/compilers/urweb/default.nix+1−1

This diff is too big to show here.

pkgs/development/compilers/vala/default.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/vlang/default.nix+1−1

This diff is too big to show here.

pkgs/development/compilers/yosys/default.nix+2−2

This diff is too big to show here.

pkgs/development/compilers/zulu/8.nix+9−3

This diff is too big to show here.

pkgs/development/compilers/zulu/default.nix+7−1

This diff is too big to show here.

pkgs/development/coq-modules/CoLoR/default.nix+2−1

This diff is too big to show here.

pkgs/development/coq-modules/Verdi/default.nix+3

This diff is too big to show here.

pkgs/development/coq-modules/aac-tactics/default.nix+6−2

This diff is too big to show here.

pkgs/development/coq-modules/coqprime/default.nix+2−1

This diff is too big to show here.

pkgs/development/coq-modules/coqtail-math/default.nix+6−1

This diff is too big to show here.

pkgs/development/coq-modules/flocq/default.nix+2−2

This diff is too big to show here.

pkgs/development/coq-modules/gappalib/default.nix+2−1

This diff is too big to show here.

pkgs/development/coq-modules/mathcomp-word/default.nix+2−1

This diff is too big to show here.

pkgs/development/coq-modules/metacoq/default.nixnew file+76

This diff is too big to show here.

pkgs/development/coq-modules/metalib/default.nix+7−3

This diff is too big to show here.

pkgs/development/coq-modules/parsec/default.nix+6−2

This diff is too big to show here.

pkgs/development/coq-modules/relation-algebra/default.nix+8−1

This diff is too big to show here.

pkgs/development/coq-modules/simple-io/default.nix+10−3

This diff is too big to show here.

pkgs/development/coq-modules/smtcoq/default.nixnew file+26

This diff is too big to show here.

pkgs/development/coq-modules/tlc/default.nix+2

This diff is too big to show here.

pkgs/development/coq-modules/trakt/default.nixnew file+24

This diff is too big to show here.

pkgs/development/embedded/fpga/apio/default.nix+5−4

This diff is too big to show here.

pkgs/development/embedded/openocd/default.nix+11

This diff is too big to show here.

pkgs/development/embedded/platformio/core.nix+2−1

This diff is too big to show here.

pkgs/development/embedded/stm32/betaflight/default.nixdeleted−64

This diff is too big to show here.

pkgs/development/embedded/stm32/inav/default.nixdeleted−56

This diff is too big to show here.

pkgs/development/embedded/stm32/stm32flash/default.nix+2−2

This diff is too big to show here.

pkgs/development/gnuradio-modules/osmosdr/default.nix+2

This diff is too big to show here.

pkgs/development/go-modules/generic/default.nix+12−5

This diff is too big to show here.

pkgs/development/go-packages/generic/default.nix+11−3

This diff is too big to show here.

pkgs/development/haskell-modules/HACKING.md+1−1

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-arm.nix−1

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-common.nix+119−64

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-darwin.nix+6−9

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-ghc-8.10.x.nix+25−9

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-ghc-8.6.x.nix+6

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-ghc-8.8.x.nix+23−8

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-ghc-9.0.x.nix+10

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-ghc-9.2.x.nix+14−2

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-ghc-head.nix+14−4

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-ghcjs.nix+1−1

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-hackage2nix/broken.yaml+30−4

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-hackage2nix/main.yaml+19−2

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-hackage2nix/stackage.yaml+167−159

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-hackage2nix/transitive-broken.yaml+18−10

This diff is too big to show here.

pkgs/development/haskell-modules/configuration-nix.nix+16−3

This diff is too big to show here.

pkgs/development/haskell-modules/generic-builder.nix+9−6

This diff is too big to show here.

pkgs/development/haskell-modules/hackage-packages.nix+2961−3147

This diff is too big to show here.

pkgs/development/haskell-modules/non-hackage-packages.nix+1

This diff is too big to show here.

pkgs/development/haskell-modules/patches/graphql-engine-mapkeys.patch−33

This diff is too big to show here.

pkgs/development/haskell-modules/with-packages-wrapper.nix+4−4

This diff is too big to show here.

pkgs/development/idris-modules/default.nix+1−1

This diff is too big to show here.

pkgs/development/interpreters/acl2/default.nix+3−3

This diff is too big to show here.

pkgs/development/interpreters/alda/default.nix+3−3

This diff is too big to show here.

pkgs/development/interpreters/bats/default.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/clojure/babashka.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/clojure/default.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/dart/default.nix+6−1

This diff is too big to show here.

pkgs/development/interpreters/duktape/default.nix+1

This diff is too big to show here.

pkgs/development/interpreters/elixir/1.13.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/gnu-apl/default.nix+3−1

This diff is too big to show here.

pkgs/development/interpreters/guile/1.8.nix−1

This diff is too big to show here.

pkgs/development/interpreters/guile/2.0.nix−1

This diff is too big to show here.

pkgs/development/interpreters/guile/2.2.nix−1

This diff is too big to show here.

pkgs/development/interpreters/guile/3.0.nix−1

This diff is too big to show here.

pkgs/development/interpreters/janet/default.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/joker/default.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/lolcode/default.nix+1

This diff is too big to show here.

pkgs/development/interpreters/luajit/2.0.nix+3−3

This diff is too big to show here.

pkgs/development/interpreters/luajit/2.1.nix+3−3

This diff is too big to show here.

pkgs/development/interpreters/luajit/default.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/maude/default.nix+4

This diff is too big to show here.

pkgs/development/interpreters/nickel/default.nix+33

This diff is too big to show here.

pkgs/development/interpreters/octave/default.nix+3−10

This diff is too big to show here.

pkgs/development/interpreters/perl/default.nix+21−18

This diff is too big to show here.

pkgs/development/interpreters/php/7.4.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/php/8.0.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/php/8.1.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/php/generic.nix+5−1

This diff is too big to show here.

pkgs/development/interpreters/pixie/default.nix−94

This diff is too big to show here.

pkgs/development/interpreters/pixie/dust.nix−46

This diff is too big to show here.

pkgs/development/interpreters/pixie/load_paths.patch−25

This diff is too big to show here.

pkgs/development/interpreters/pixie/make-paths-configurable.patch−119

This diff is too big to show here.

pkgs/development/interpreters/pure/default.nix−46

This diff is too big to show here.

pkgs/development/interpreters/python/cpython/3.11/python-3.x-distutils-C++.patch+257

This diff is too big to show here.

pkgs/development/interpreters/python/cpython/default.nix+16−10

This diff is too big to show here.

pkgs/development/interpreters/python/default.nix+7−12

This diff is too big to show here.

pkgs/development/interpreters/python/graalpython/default.nix−21

This diff is too big to show here.

pkgs/development/interpreters/python/hooks/default.nix+6

This diff is too big to show here.

pkgs/development/interpreters/python/hooks/setuptools-build-hook.sh+3

This diff is too big to show here.

pkgs/development/interpreters/python/hooks/sphinx-hook.sh+57

This diff is too big to show here.

pkgs/development/interpreters/python/update-python-libraries/update-python-libraries.py+10−8

This diff is too big to show here.

pkgs/development/interpreters/python/wrapper.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/racket/default.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/racket/minimal.nix+1−1

This diff is too big to show here.

pkgs/development/interpreters/rakudo/default.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/rakudo/moarvm.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/rakudo/nqp.nix+12−2

This diff is too big to show here.

pkgs/development/interpreters/ruby/default.nix+26−30

This diff is too big to show here.

pkgs/development/interpreters/ruby/patchsets.nix+3−3

This diff is too big to show here.

pkgs/development/interpreters/ruby/rbinstall-new-rubygems-compat.patch+87

This diff is too big to show here.

pkgs/development/interpreters/ruby/rubygems/default.nix+1−1

This diff is too big to show here.

pkgs/development/interpreters/scsh/default.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/sollya/default.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/spidermonkey/91.nix+2−2

This diff is too big to show here.

pkgs/development/interpreters/starlark/default.nix+23

This diff is too big to show here.

pkgs/development/interpreters/supercollider/default.nix+36−13

This diff is too big to show here.

pkgs/development/interpreters/supercollider/plugins/sc3-plugins.nix+33

This diff is too big to show here.

pkgs/development/interpreters/supercollider/supercollider-3.12.0-env-dirs.patch+65

This diff is too big to show here.

pkgs/development/interpreters/supercollider/wrapper.nix+18

This diff is too big to show here.

pkgs/development/interpreters/trealla/default.nix+1

This diff is too big to show here.

pkgs/development/interpreters/wasmtime/default.nix+19−9

This diff is too big to show here.

pkgs/development/interpreters/yex-lang/default.nix+1

This diff is too big to show here.

pkgs/development/interpreters/zuo/default.nix+23

This diff is too big to show here.

pkgs/development/java-modules/liquibase_redshift_extension/default.nix+27

This diff is too big to show here.

pkgs/development/java-modules/redshift_jdbc/default.nix+28

This diff is too big to show here.

pkgs/development/libraries/CoinMP/default.nix+2

This diff is too big to show here.

pkgs/development/libraries/SDL2/default.nix+13−1

This diff is too big to show here.

pkgs/development/libraries/SDL2/find-headers.patch+34

This diff is too big to show here.

pkgs/development/libraries/SDL_audiolib/default.nix+53

This diff is too big to show here.

pkgs/development/libraries/allegro/5.nix+2−1

This diff is too big to show here.

pkgs/development/libraries/allegro/default.nix+2−1

This diff is too big to show here.

pkgs/development/libraries/amdvlk/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/apache-activemq/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/applet-window-buttons/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/apr-util/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/aqbanking/gwenhywfar.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/argagg/0001-catch.diff+20

This diff is too big to show here.

pkgs/development/libraries/argagg/default.nix+46

This diff is too big to show here.

pkgs/development/libraries/armadillo/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/aspell/default.nix+19−2

This diff is too big to show here.

pkgs/development/libraries/at-spi2-core/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/audio/libopenmpt/default.nix+66

This diff is too big to show here.

pkgs/development/libraries/audio/libopenmpt/update.sh+31

This diff is too big to show here.

pkgs/development/libraries/audio/libspecbleach/default.nix+26

This diff is too big to show here.

pkgs/development/libraries/audio/lilv/default.nix+1

This diff is too big to show here.

pkgs/development/libraries/audio/lv2/default.nix+2

This diff is too big to show here.

pkgs/development/libraries/audio/sratom/default.nix+1

This diff is too big to show here.

pkgs/development/libraries/avahi/default.nix+5−1

This diff is too big to show here.

pkgs/development/libraries/avro-c/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/aws-c-sdkutils/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/aws-sdk-cpp/default.nix+41−12

This diff is too big to show here.

pkgs/development/libraries/bash/bash-preexec/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/bashup-events/generic.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/bc-decaf/default.nix+36

This diff is too big to show here.

pkgs/development/libraries/bctoolbox/default.nix+19−7

This diff is too big to show here.

pkgs/development/libraries/belcard/default.nix+4−3

This diff is too big to show here.

pkgs/development/libraries/belle-sip/default.nix+10−9

This diff is too big to show here.

pkgs/development/libraries/belr/default.nix+4−3

This diff is too big to show here.

pkgs/development/libraries/boost/1.69.nix+2

This diff is too big to show here.

pkgs/development/libraries/boost/1.70.nix+2

This diff is too big to show here.

pkgs/development/libraries/boost/1.72.nix+2

This diff is too big to show here.

pkgs/development/libraries/boost/1.78.nix+15

This diff is too big to show here.

pkgs/development/libraries/boost/default.nix+1

This diff is too big to show here.

pkgs/development/libraries/boost/generic.nix+23−5

This diff is too big to show here.

pkgs/development/libraries/boost/pthread-stack-min-fix.patch+15

This diff is too big to show here.

pkgs/development/libraries/botan/default.nix−17

This diff is too big to show here.

pkgs/development/libraries/bullet/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/bzrtp/default.nix+5−6

This diff is too big to show here.

pkgs/development/libraries/catch/default.nix+6

This diff is too big to show here.

pkgs/development/libraries/cgreen/default.nix+6

This diff is too big to show here.

pkgs/development/libraries/civetweb/default.nix+2−1

This diff is too big to show here.

pkgs/development/libraries/clucene-core/2.x.nix+4−1

This diff is too big to show here.

pkgs/development/libraries/clucene-core/default.nix+4

This diff is too big to show here.

pkgs/development/libraries/cpp-hocon/default.nix+4

This diff is too big to show here.

pkgs/development/libraries/cpp-ipfs-api/default.nix+4

This diff is too big to show here.

pkgs/development/libraries/cpp-utilities/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/cutelyst/default.nix+13−4

This diff is too big to show here.

pkgs/development/libraries/cwiid/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/cxxopts/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/cyrus-sasl/cyrus-sasl-ac-try-run-fix.patch+12−11

This diff is too big to show here.

pkgs/development/libraries/cyrus-sasl/default.nix+12−13

This diff is too big to show here.

pkgs/development/libraries/cyrus-sasl/missing-size_t.patch−13

This diff is too big to show here.

pkgs/development/libraries/dav1d/default.nix+4−2

This diff is too big to show here.

pkgs/development/libraries/dbus/default.nix+7

This diff is too big to show here.

pkgs/development/libraries/docopt_cpp/default.nix+10−2

This diff is too big to show here.

pkgs/development/libraries/doctest/default.nix+5−5

This diff is too big to show here.

pkgs/development/libraries/dotconf/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/duckdb/default.nix+36−3

This diff is too big to show here.

pkgs/development/libraries/entt/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/expat/default.nix+3−2

This diff is too big to show here.

pkgs/development/libraries/faudio/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/fcft/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/ffmpeg/0001-fate-ffmpeg-add-missing-samples-dependency-to-fate-s.patch−27

This diff is too big to show here.

pkgs/development/libraries/ffmpeg/5.nix+2−4

This diff is too big to show here.

pkgs/development/libraries/ffmpegthumbnailer/default.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/flatcc/default.nix+5

This diff is too big to show here.

pkgs/development/libraries/flint/default.nix+2

This diff is too big to show here.

pkgs/development/libraries/fltk/common.nix+2−9

This diff is too big to show here.

pkgs/development/libraries/freeimage/default.nix+4−4

This diff is too big to show here.

pkgs/development/libraries/freeimage/unbundle.diff+39−39

This diff is too big to show here.

pkgs/development/libraries/freetype/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gcc/libgcc/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/gcr/default.nix+2−7

This diff is too big to show here.

pkgs/development/libraries/gdal/2.4.nix+11−1

This diff is too big to show here.

pkgs/development/libraries/gdal/default.nix+40

This diff is too big to show here.

pkgs/development/libraries/gdata-sharp/default.nix−42

This diff is too big to show here.

pkgs/development/libraries/gdcm/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gecode/3.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gensio/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/geos/3.9.nix+25

This diff is too big to show here.

pkgs/development/libraries/geos/default.nix+15−6

This diff is too big to show here.

pkgs/development/libraries/ggz_base_libs/default.nix+3−4

This diff is too big to show here.

pkgs/development/libraries/ghc_filesystem/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/glfw/3.x.nix+4−5

This diff is too big to show here.

pkgs/development/libraries/glib/default.nix+9−3

This diff is too big to show here.

pkgs/development/libraries/glib/elementary-terminal-support.patch+16

This diff is too big to show here.

pkgs/development/libraries/glib/gnome-console-support.patch+55

This diff is too big to show here.

pkgs/development/libraries/glibc/0001-Revert-Remove-all-usage-of-BASH-or-BASH-in-installed.patch+131

This diff is too big to show here.

pkgs/development/libraries/glibc/2.33-master.patch.gz

This diff is too big to show here.

pkgs/development/libraries/glibc/2.34-master.patch.gz

This diff is too big to show here.

pkgs/development/libraries/glibc/common.nix+21−8

This diff is too big to show here.

pkgs/development/libraries/glibc/default.nix+15−7

This diff is too big to show here.

pkgs/development/libraries/glibc/nix-locale-archive.patch+24−21

This diff is too big to show here.

pkgs/development/libraries/glibmm/2.68.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/glibmm/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/glm/default.nix+5

This diff is too big to show here.

pkgs/development/libraries/globalplatform/default.nix−21

This diff is too big to show here.

pkgs/development/libraries/globalplatform/gppcscconnectionplugin.nix−21

This diff is too big to show here.

pkgs/development/libraries/glog/default.nix+5−14

This diff is too big to show here.

pkgs/development/libraries/gmp/6.x.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/gnome-online-accounts/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gnutls-kdh/3.5.nix−12

This diff is too big to show here.

pkgs/development/libraries/gnutls-kdh/generic.nix−95

This diff is too big to show here.

pkgs/development/libraries/goffice/default.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/goocanvas/2.x.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/graphene-hardened-malloc/default.nix+15−8

This diff is too big to show here.

pkgs/development/libraries/graphene/0001-meson-add-options-for-tests-installation-dirs.patch+13−59

This diff is too big to show here.

pkgs/development/libraries/graphene/default.nix+14−3

This diff is too big to show here.

pkgs/development/libraries/grpc/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gsettings-desktop-schemas/default.nix+9−3

This diff is too big to show here.

pkgs/development/libraries/gspell/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gstreamer/bad/default.nix+5−3

This diff is too big to show here.

pkgs/development/libraries/gstreamer/base/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gstreamer/core/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gstreamer/default.nix+2

This diff is too big to show here.

pkgs/development/libraries/gstreamer/devtools/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gstreamer/ges/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gstreamer/good/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gstreamer/libav/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gstreamer/rtsp-server/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gstreamer/ugly/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gstreamer/vaapi/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gstreamer/viperfx/default.nix+41

This diff is too big to show here.

pkgs/development/libraries/gtk-frdp/default.nix+3−5

This diff is too big to show here.

pkgs/development/libraries/gtk/4.x.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gtkmathview/default.nix−29

This diff is too big to show here.

pkgs/development/libraries/gtkmathview/gcc-4.3-build-fixes.patch−74

This diff is too big to show here.

pkgs/development/libraries/gtkmathview/gcc-4.4-build-fixes.patch−21

This diff is too big to show here.

pkgs/development/libraries/gtkmm/2.x.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/gtksourceview/5.x.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gusb/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/gvfs/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/hivex/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/hspell/dicts.nix+4−4

This diff is too big to show here.

pkgs/development/libraries/htmlcxx/c++17.patch+24

This diff is too big to show here.

pkgs/development/libraries/htmlcxx/default.nix+7−4

This diff is too big to show here.

pkgs/development/libraries/http-parser/default.nix+9−2

This diff is too big to show here.

pkgs/development/libraries/hunspell/dictionaries.nix+2−3

This diff is too big to show here.

pkgs/development/libraries/hwloc/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/hyperscan/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/igraph/default.nix+10−6

This diff is too big to show here.

pkgs/development/libraries/ijs/default.nix+2−3

This diff is too big to show here.

pkgs/development/libraries/ilixi/default.nix−35

This diff is too big to show here.

pkgs/development/libraries/imath/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/inih/default.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/intel-media-driver/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/intel-media-sdk/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/isl/generic.nix+2−1

This diff is too big to show here.

pkgs/development/libraries/jarowinkler-cpp/default.nix+41

This diff is too big to show here.

pkgs/development/libraries/java/commons/daemon/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/jcal/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/jellyfin-ffmpeg/default.nix+30

This diff is too big to show here.

pkgs/development/libraries/jsoncpp/default.nix+27−3

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/attica.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/baloo.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/bluez-qt.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/breeze-icons.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/default.nix+4−5

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/extra-cmake-modules/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/fetch.sh+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/frameworkintegration.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kactivities-stats.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kactivities.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kapidox.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/karchive.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kauth/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kbookmarks.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kcalendarcore.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kcmutils/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kcodecs.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kcompletion.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kconfig.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kconfigwidgets/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kcontacts.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kcoreaddons.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kcrash.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kdav.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kdbusaddons.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kdeclarative.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kded.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kdelibs4support/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kdesignerplugin.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kdesu/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kdewebkit.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kdnssd.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kdoctools/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kemoticons.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kfilemetadata/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kglobalaccel.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kguiaddons.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kholidays.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/khtml.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/ki18n.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kiconthemes/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kidletime.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kimageformats.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kinit/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kio/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kirigami2.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kitemmodels.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kitemviews.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kjobwidgets.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kjs.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kjsembed.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kmediaplayer.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/knewstuff/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/knotifications.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/knotifyconfig.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kpackage/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kparts.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kpeople.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kplotting.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kpty.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kquickcharts.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kross.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/krunner.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kservice/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/ktexteditor.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/ktextwidgets.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kunitconversion.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kwallet.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kwayland.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kwidgetsaddons.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kwindowsystem/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kxmlgui.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/kxmlrpcclient.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/modemmanager-qt.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/networkmanager-qt.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/oxygen-icons5.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/plasma-framework.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/prison.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/purpose.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/qqc2-desktop-style.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/solid.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/sonnet.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/srcs.nix+332−332

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/syndication.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/syntax-highlighting.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kde-frameworks/threadweaver.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kerberos/krb5.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/khronos-ocl-icd-loader/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/kpmcore/default.nix+10−18

This diff is too big to show here.

pkgs/development/libraries/languagemachines/frog.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/languagemachines/frogdata.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/languagemachines/libfolia.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/languagemachines/mbt.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/languagemachines/ticcutils.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/languagemachines/timbl.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/languagemachines/timblserver.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/languagemachines/ucto.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/languagemachines/uctodata.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/lasso/default.nix+35−9

This diff is too big to show here.

pkgs/development/libraries/leatherman/default.nix+2

This diff is too big to show here.

pkgs/development/libraries/leveldb/default.nix+1−5

This diff is too big to show here.

pkgs/development/libraries/libadwaita/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libappindicator/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libarchive/default.nix+75−33

This diff is too big to show here.

pkgs/development/libraries/libargon2/default.nix+3−1

This diff is too big to show here.

pkgs/development/libraries/libargs/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libavif/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libcbor/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libcef/default.nix+6−6

This diff is too big to show here.

pkgs/development/libraries/libcollectdclient/default.nix+2−1

This diff is too big to show here.

pkgs/development/libraries/libdeltachat/default.nix+3−5

This diff is too big to show here.

pkgs/development/libraries/libdvbcsa/default.nix+22

This diff is too big to show here.

pkgs/development/libraries/libe57format/default.nix+9

This diff is too big to show here.

pkgs/development/libraries/libechonest/default.nix+3

This diff is too big to show here.

pkgs/development/libraries/libepoxy/default.nix+2−3

This diff is too big to show here.

pkgs/development/libraries/libevdev/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libfido2/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libfive/default.nix+1

This diff is too big to show here.

pkgs/development/libraries/libgcrypt/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libguestfs/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libhandy/default.nix+5−2

This diff is too big to show here.

pkgs/development/libraries/libinjection/default.nix+12−4

This diff is too big to show here.

pkgs/development/libraries/libinput/default.nix+17−7

This diff is too big to show here.

pkgs/development/libraries/libixp-hg/default.nix−27

This diff is too big to show here.

pkgs/development/libraries/libixp/default.nix+28

This diff is too big to show here.

pkgs/development/libraries/libjcat/default.nix+4−3

This diff is too big to show here.

pkgs/development/libraries/libjpeg-turbo/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libjson/default.nix+1

This diff is too big to show here.

pkgs/development/libraries/libjxl/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/libkqueue/default.nix+23

This diff is too big to show here.

pkgs/development/libraries/liblastfm/default.nix+5

This diff is too big to show here.

pkgs/development/libraries/liblinphone/default.nix+23−9

This diff is too big to show here.

pkgs/development/libraries/liblinphone/use-normal-jsoncpp.patch+57

This diff is too big to show here.

pkgs/development/libraries/libmnl/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libnet/default.nix+14−6

This diff is too big to show here.

pkgs/development/libraries/libnet/fix-includes.patch−29

This diff is too big to show here.

pkgs/development/libraries/libnetfilter_conntrack/default.nix+11−3

This diff is too big to show here.

pkgs/development/libraries/libnfc/default.nix+10−7

This diff is too big to show here.

pkgs/development/libraries/libnfnetlink/Use-stdlib-uint-instead-of-u_int.patch−499

This diff is too big to show here.

pkgs/development/libraries/libnfnetlink/default.nix+2−6

This diff is too big to show here.

pkgs/development/libraries/libnftnl/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/libngspice/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libosmscout/default.nix+11−8

This diff is too big to show here.

pkgs/development/libraries/libotr/default.nix+2

This diff is too big to show here.

pkgs/development/libraries/libotr/fix-regtest-client.patch+11

This diff is too big to show here.

pkgs/development/libraries/libowfat/default.nix+3

This diff is too big to show here.

pkgs/development/libraries/libpinyin/default.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/libpostal/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/libpqxx/6.nix+4−4

This diff is too big to show here.

pkgs/development/libraries/libpqxx/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libqalculate/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libraspberrypi/default.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/libraw/default.nix+4−4

This diff is too big to show here.

pkgs/development/libraries/libraw/unstable.nix+12

This diff is too big to show here.

pkgs/development/libraries/librealsense/default.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/libressl/fix-build-with-glibc.patch+92

This diff is too big to show here.

pkgs/development/libraries/libsecret/default.nix+25−10

This diff is too big to show here.

pkgs/development/libraries/libslirp/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libsoup/3.x.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libspf2/default.nix+9−1

This diff is too big to show here.

pkgs/development/libraries/libsystemtap/default.nix+9−6

This diff is too big to show here.

pkgs/development/libraries/libtiff/default.nix+30

This diff is too big to show here.

pkgs/development/libraries/libuldaq/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libunistring/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libunwind/default.nix+9−1

This diff is too big to show here.

pkgs/development/libraries/libusb1/default.nix+4−10

This diff is too big to show here.

pkgs/development/libraries/libuv/default.nix+3−2

This diff is too big to show here.

pkgs/development/libraries/libva/1.0.0.nix−37

This diff is too big to show here.

pkgs/development/libraries/libva/1.nix+50

This diff is too big to show here.

pkgs/development/libraries/libva/default.nix+4−4

This diff is too big to show here.

pkgs/development/libraries/libva/utils.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/libvdpau/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libviperfx/default.nix+30

This diff is too big to show here.

pkgs/development/libraries/libvirt/default.nix+7−1

This diff is too big to show here.

pkgs/development/libraries/libvmaf/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libwacom/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/libwebsockets/default.nix+14−3

This diff is too big to show here.

pkgs/development/libraries/libxcrypt/default.nix+6−2

This diff is too big to show here.

pkgs/development/libraries/libxmlb/default.nix+4−12

This diff is too big to show here.

pkgs/development/libraries/libxsmm/default.nix+1−3

This diff is too big to show here.

pkgs/development/libraries/libyang/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/lime/default.nix+15−5

This diff is too big to show here.

pkgs/development/libraries/liquid-dsp/default.nix+4−5

This diff is too big to show here.

pkgs/development/libraries/live555/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/log4shib/default.nix+2

This diff is too big to show here.

pkgs/development/libraries/mapbox-gl-native/default.nix+5

This diff is too big to show here.

pkgs/development/libraries/mapbox-gl-qml/default.nix+4−7

This diff is too big to show here.

pkgs/development/libraries/maplibre-gl-native/default.nix+66

This diff is too big to show here.

pkgs/development/libraries/mediastreamer/default.nix+22−15

This diff is too big to show here.

pkgs/development/libraries/mediastreamer/msopenh264.nix+6−7

This diff is too big to show here.

pkgs/development/libraries/mesa/default.nix+8−5

This diff is too big to show here.

pkgs/development/libraries/mimetic/default.nix+8−2

This diff is too big to show here.

pkgs/development/libraries/mlt/qt-5.nix+1

This diff is too big to show here.

pkgs/development/libraries/mpich/default.nix+5−2

This diff is too big to show here.

pkgs/development/libraries/mustache-hpp/default.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/mvapich/default.nix+1

This diff is too big to show here.

pkgs/development/libraries/netcdf-fortran/default.nix+3

This diff is too big to show here.

pkgs/development/libraries/netcdf/default.nix+6−18

This diff is too big to show here.

pkgs/development/libraries/nghttp2/default.nix+63−43

This diff is too big to show here.

pkgs/development/libraries/nghttp3/default.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/ngtcp2/default.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/nlopt/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/notcurses/default.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/nss/85_security_load_3.77+.patch+76

This diff is too big to show here.

pkgs/development/libraries/nss/esr.nix+4

This diff is too big to show here.

pkgs/development/libraries/nss/generic.nix+11−11

This diff is too big to show here.

pkgs/development/libraries/nss/latest.nix+10

This diff is too big to show here.

pkgs/development/libraries/ntdb/default.nix−51

This diff is too big to show here.

pkgs/development/libraries/openal-soft/default.nix+14−8

This diff is too big to show here.

pkgs/development/libraries/openal-soft/search-out.patch+2−2

This diff is too big to show here.

pkgs/development/libraries/opendht/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/openfst/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/openjpeg/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/openldap/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/openmpi/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/openssl/1.0.2/darwin64-arm64.patch−12

This diff is too big to show here.

pkgs/development/libraries/openssl/1.0.2/nix-ssl-cert-file.patch−16

This diff is too big to show here.

pkgs/development/libraries/openssl/1.0.2/use-etc-ssl-certs-darwin.patch−13

This diff is too big to show here.

pkgs/development/libraries/openssl/1.0.2/use-etc-ssl-certs.patch−13

This diff is too big to show here.

pkgs/development/libraries/openssl/chacha.nix−82

This diff is too big to show here.

pkgs/development/libraries/openssl/default.nix+8−16

This diff is too big to show here.

pkgs/development/libraries/opensubdiv/default.nix+9−2

This diff is too big to show here.

pkgs/development/libraries/openvino/default.nix+3−1

This diff is too big to show here.

pkgs/development/libraries/ortp/default.nix+5−4

This diff is too big to show here.

pkgs/development/libraries/pcmsolver/default.nix+9−2

This diff is too big to show here.

pkgs/development/libraries/pcre/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/pcre2/default.nix+1−3

This diff is too big to show here.

pkgs/development/libraries/pdal/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/phash/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/physics/cernlib/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/physics/lhapdf/maintainer.sh+2−2

This diff is too big to show here.

pkgs/development/libraries/physics/lhapdf/pdf_sets.nix+431−129

This diff is too big to show here.

pkgs/development/libraries/physics/qcdnum/default.nix+4

This diff is too big to show here.

pkgs/development/libraries/pipewire/default.nix+8−2

This diff is too big to show here.

pkgs/development/libraries/pmdk/default.nix+4−2

This diff is too big to show here.

pkgs/development/libraries/pocketsphinx/default.nix−48

This diff is too big to show here.

pkgs/development/libraries/polkit-qt-1/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/polkit/default.nix+6

This diff is too big to show here.

pkgs/development/libraries/poppler/0.61-CVE-2019-9959.patch−20

This diff is too big to show here.

pkgs/development/libraries/poppler/0.61.nix−94

This diff is too big to show here.

pkgs/development/libraries/proj/default.nix+17−8

This diff is too big to show here.

pkgs/development/libraries/protobuf/2.5.nix−10

This diff is too big to show here.

pkgs/development/libraries/protobuf/generic.nix−61

This diff is too big to show here.

pkgs/development/libraries/protolock/default.nix−2

This diff is too big to show here.

pkgs/development/libraries/ptex/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/qca-qt5/2.3.2.nix+30

This diff is too big to show here.

pkgs/development/libraries/qca-qt5/default.nix+5−10

This diff is too big to show here.

pkgs/development/libraries/qrupdate/default.nix+8−6

This diff is too big to show here.

pkgs/development/libraries/qt-5/5.12/default.nix+9−1

This diff is too big to show here.

pkgs/development/libraries/qt-5/5.14/default.nix+8−2

This diff is too big to show here.

pkgs/development/libraries/qt-5/5.14/qtwayland-libdrm-build.patch−56

This diff is too big to show here.

pkgs/development/libraries/qt-5/5.15/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/qt-5/5.15/srcs-generated.json+63−63

This diff is too big to show here.

pkgs/development/libraries/qt-5/modules/qtbase.nix+10−6

This diff is too big to show here.

pkgs/development/libraries/qt-5/modules/qtmultimedia.nix+3−2

This diff is too big to show here.

pkgs/development/libraries/qt-5/modules/qtwayland-app_id.patch+36

This diff is too big to show here.

pkgs/development/libraries/qt-5/modules/qtwayland.nix+6

This diff is too big to show here.

pkgs/development/libraries/qt-5/modules/qtwebengine.nix+22−6

This diff is too big to show here.

pkgs/development/libraries/qt-5/qtModule.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/qtutilities/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/quictls/default.nix+3−8

This diff is too big to show here.

pkgs/development/libraries/qwt/default.nix+2

This diff is too big to show here.

pkgs/development/libraries/qxt/default.nix−34

This diff is too big to show here.

pkgs/development/libraries/rapidcheck/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/rapidfuzz-cpp/default.nix+41

This diff is too big to show here.

pkgs/development/libraries/re2/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/recastnavigation/default.nix+7−1

This diff is too big to show here.

pkgs/development/libraries/redis-plus-plus/default.nix+38

This diff is too big to show here.

pkgs/development/libraries/rlottie/default.nix+16−1

This diff is too big to show here.

pkgs/development/libraries/robin-map/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/rocclr/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/rocm-comgr/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/rocm-device-libs/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/rocm-runtime/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/rocm-thunk/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/s2n-tls/default.nix+3

This diff is too big to show here.

pkgs/development/libraries/science/astronomy/indilib/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/science/astronomy/wcslib/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/science/biology/htslib/default.nix+18−2

This diff is too big to show here.

pkgs/development/libraries/science/math/blis/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/science/math/caffe2/default.nix−147

This diff is too big to show here.

pkgs/development/libraries/science/math/caffe2/fix_compilation_on_gcc7.patch−46

This diff is too big to show here.

pkgs/development/libraries/science/math/caffe2/update_clang_cvtsh_bugfix.patch−55

This diff is too big to show here.

pkgs/development/libraries/science/math/cudnn/default.nix−118

This diff is too big to show here.

pkgs/development/libraries/science/math/cudnn/extension.nix+116

This diff is too big to show here.

pkgs/development/libraries/science/math/cudnn/generic.nix+62−43

This diff is too big to show here.

pkgs/development/libraries/science/math/cutensor/default.nix−49

This diff is too big to show here.

pkgs/development/libraries/science/math/cutensor/generic.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/science/math/liblapack/default.nix+2−11

This diff is too big to show here.

pkgs/development/libraries/science/math/libtorch/test/default.nix+3−2

This diff is too big to show here.

pkgs/development/libraries/science/math/magma/default.nix+7−20

This diff is too big to show here.

pkgs/development/libraries/science/math/nccl/default.nix+6−2

This diff is too big to show here.

pkgs/development/libraries/science/math/petsc/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/science/math/scalapack/default.nix+8−1

This diff is too big to show here.

pkgs/development/libraries/science/math/tensorflow/bin.nix+4−1

This diff is too big to show here.

pkgs/development/libraries/science/math/zn_poly/default.nix+4−14

This diff is too big to show here.

pkgs/development/libraries/seasocks/default.nix+7−1

This diff is too big to show here.

pkgs/development/libraries/simgear/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/simpleitk/default.nix+2

This diff is too big to show here.

pkgs/development/libraries/skalibs/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/slang/default.nix+7

This diff is too big to show here.

pkgs/development/libraries/smesh/default.nix+2

This diff is too big to show here.

pkgs/development/libraries/snack/default.nix−36

This diff is too big to show here.

pkgs/development/libraries/soci/bc-soci.nix+53

This diff is too big to show here.

pkgs/development/libraries/soci/default.nix+1−1

This diff is too big to show here.

pkgs/development/libraries/spdlog/default.nix+7−3

This diff is too big to show here.

pkgs/development/libraries/sphinxbase/default.nix−40

This diff is too big to show here.

pkgs/development/libraries/spirv-headers/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/sqlite/default.nix+4−2

This diff is too big to show here.

pkgs/development/libraries/sqlite/tools.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/sundials/default.nix+13

This diff is too big to show here.

pkgs/development/libraries/symengine/default.nix+5

This diff is too big to show here.

pkgs/development/libraries/tachyon/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/talloc/default.nix+2−1

This diff is too big to show here.

pkgs/development/libraries/taskflow/default.nix+50

This diff is too big to show here.

pkgs/development/libraries/taskflow/unvendor-doctest.patch+21

This diff is too big to show here.

pkgs/development/libraries/tdlib/default.nix+3−3

This diff is too big to show here.

pkgs/development/libraries/template-glib/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/tomlc99/default.nix+30

This diff is too big to show here.

pkgs/development/libraries/tomlcpp/0001-missing-headers.diff+15

This diff is too big to show here.

pkgs/development/libraries/tomlcpp/default.nix+35

This diff is too big to show here.

pkgs/development/libraries/tpm2-tss/default.nix+7−3

This diff is too big to show here.

pkgs/development/libraries/umockdev/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/unixODBCDrivers/default.nix+47−4

This diff is too big to show here.

pkgs/development/libraries/utmps/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/valhalla/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/vapoursynth/default.nix+4−7

This diff is too big to show here.

pkgs/development/libraries/vigra/default.nix+3−15

This diff is too big to show here.

pkgs/development/libraries/vulkan-headers/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/vulkan-loader/default.nix+6−3

This diff is too big to show here.

pkgs/development/libraries/vulkan-loader/fix-pkgconfig.patch+14

This diff is too big to show here.

pkgs/development/libraries/wasilibc/default.nix+19−14

This diff is too big to show here.

pkgs/development/libraries/waylandpp/default.nix+4−3

This diff is too big to show here.

pkgs/development/libraries/webkitgtk/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/wolfssl/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/wxwidgets/wxGTK28.nix−2

This diff is too big to show here.

pkgs/development/libraries/wxwidgets/wxGTK29.nix−1

This diff is too big to show here.

pkgs/development/libraries/wxwidgets/wxGTK30.nix+2−3

This diff is too big to show here.

pkgs/development/libraries/wxwidgets/wxGTK31.nix+3−5

This diff is too big to show here.

pkgs/development/libraries/wxwidgets/wxmac30.nix+7−5

This diff is too big to show here.

pkgs/development/libraries/xalanc/default.nix+2−1

This diff is too big to show here.

pkgs/development/libraries/xdg-desktop-portal-gnome/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/xdg-desktop-portal-gtk/default.nix+2−2

This diff is too big to show here.

pkgs/development/libraries/xdg-desktop-portal/default.nix+18−12

This diff is too big to show here.

pkgs/development/libraries/xdg-desktop-portal/fix-paths.patch−13

This diff is too big to show here.

pkgs/development/libraries/xgboost/default.nix+5−5

This diff is too big to show here.

pkgs/development/libraries/zeroc-ice/3.6.nix−59

This diff is too big to show here.

pkgs/development/libraries/zeroc-ice/default.nix+13

This diff is too big to show here.

pkgs/development/libraries/zeroc-ice/uninitialized-variable-warning.patch−20

This diff is too big to show here.

pkgs/development/libraries/zlib/CVE-2018-25032-1.patch+346

This diff is too big to show here.

pkgs/development/libraries/zlib/CVE-2018-25032-2.patch+27

This diff is too big to show here.

pkgs/development/libraries/zlib/default.nix+6−4

This diff is too big to show here.

pkgs/development/libraries/zlib/disable-cygwin-widechar.patch−13

This diff is too big to show here.

pkgs/development/libraries/zlib/fix-configure-issue-cross.patch+24

This diff is too big to show here.

pkgs/development/lisp-modules-new/.gitattributes+1

This diff is too big to show here.

pkgs/development/lisp-modules-new/.gitignore+3

This diff is too big to show here.

pkgs/development/lisp-modules-new/doc/api.md+197

This diff is too big to show here.

pkgs/development/lisp-modules-new/doc/nix-cl.md+98

This diff is too big to show here.

pkgs/development/lisp-modules-new/doc/quicklisp.md+54

This diff is too big to show here.

pkgs/development/lisp-modules-new/doc/quirks.md+5

This diff is too big to show here.

pkgs/development/lisp-modules-new/examples/abcl-package-set.nix+24

This diff is too big to show here.

pkgs/development/lisp-modules-new/examples/abcl-with-packages.nix+23

This diff is too big to show here.

pkgs/development/lisp-modules-new/examples/bordeaux-threads.nix+43

This diff is too big to show here.

pkgs/development/lisp-modules-new/examples/sbcl-with-bt.nix+31

This diff is too big to show here.

pkgs/development/lisp-modules-new/import/api.lisp+18

This diff is too big to show here.

pkgs/development/lisp-modules-new/import/database/sqlite.lisp+134

This diff is too big to show here.

pkgs/development/lisp-modules-new/import/init.sql+41

This diff is too big to show here.

pkgs/development/lisp-modules-new/import/main.lisp+40

This diff is too big to show here.

pkgs/development/lisp-modules-new/import/nix.lisp+81

This diff is too big to show here.

pkgs/development/lisp-modules-new/import/org.lispbuilds.nix.asd+24

This diff is too big to show here.

pkgs/development/lisp-modules-new/import/repository/quicklisp.lisp+199

This diff is too big to show here.

pkgs/development/lisp-modules-new/import/util.lisp+16

This diff is too big to show here.

pkgs/development/lisp-modules-new/imported.nix+65675

This diff is too big to show here.

pkgs/development/lisp-modules-new/lisp-packages.nix+432

This diff is too big to show here.

pkgs/development/lisp-modules-new/old-make-wrapper.sh+155

This diff is too big to show here.

pkgs/development/lisp-modules-new/packages.nix+369

This diff is too big to show here.

pkgs/development/lisp-modules-new/patches/swank-pure-paths.patch+28

This diff is too big to show here.

pkgs/development/lisp-modules-new/ql-import.lisp+6

This diff is too big to show here.

pkgs/development/lisp-modules-new/ql.nix+140

This diff is too big to show here.

pkgs/development/lisp-modules-new/readme.md+34

This diff is too big to show here.

pkgs/development/lisp-modules-new/shell.nix+7

This diff is too big to show here.

pkgs/development/lisp-modules-new/test/lispPackagesToTest.txt+395

This diff is too big to show here.

pkgs/development/lisp-modules-new/test/test.lisp+94

This diff is too big to show here.

pkgs/development/lisp-modules/quicklisp-to-nix-overrides.nix+1−1

This diff is too big to show here.

pkgs/development/lua-modules/generated-packages.nix+42−9

This diff is too big to show here.

pkgs/development/lua-modules/luaexpat.patch−36

This diff is too big to show here.

pkgs/development/lua-modules/overrides.nix+8−7

This diff is too big to show here.

pkgs/development/misc/breakpad/default.nix+5

This diff is too big to show here.

pkgs/development/misc/datafusion/default.nix+34

This diff is too big to show here.

pkgs/development/misc/haskell/hasura/ekg-core.nix+8−9

This diff is too big to show here.

pkgs/development/misc/haskell/hasura/ekg-json.nix+6−3

This diff is too big to show here.

pkgs/development/misc/haskell/hasura/graphql-engine.nix+70−50

This diff is too big to show here.

pkgs/development/misc/haskell/hasura/graphql-parser.nix+16−12

This diff is too big to show here.

pkgs/development/misc/haskell/hasura/kriti-lang.nix+41

This diff is too big to show here.

pkgs/development/misc/haskell/hasura/pg-client.nix+18−17

This diff is too big to show here.

pkgs/development/misc/haskell/hasura/pool.nix+1−1

This diff is too big to show here.

pkgs/development/misc/haskell/hasura/update.sh+11−1

This diff is too big to show here.

pkgs/development/misc/msp430/mspds/binary.nix+2−1

This diff is too big to show here.

pkgs/development/misc/resholve/README.md+111−58

This diff is too big to show here.

pkgs/development/misc/resholve/default.nix+5−37

This diff is too big to show here.

pkgs/development/misc/resholve/resholve-package.nix−37

This diff is too big to show here.

pkgs/development/misc/resholve/resholve-utils.nix+149−20

This diff is too big to show here.

pkgs/development/misc/resholve/resholve.nix+7−6

This diff is too big to show here.

pkgs/development/misc/resholve/source.nix+2−2

This diff is too big to show here.

pkgs/development/misc/resholve/test.nix+18−57

This diff is too big to show here.

pkgs/development/mobile/androidenv/build-tools.nix+2−2

This diff is too big to show here.

pkgs/development/mobile/androidenv/platform-tools.nix+1−2

This diff is too big to show here.

pkgs/development/nim-packages/tempfile/default.nix+1

This diff is too big to show here.

pkgs/development/node-packages/composition.nix+1−1

This diff is too big to show here.

pkgs/development/node-packages/default.nix+24−42

This diff is too big to show here.

pkgs/development/node-packages/node-env.nix+21−11

This diff is too big to show here.

pkgs/development/node-packages/node-packages.json+4−2

This diff is too big to show here.

pkgs/development/node-packages/node-packages.nix+7383−6986

This diff is too big to show here.

pkgs/development/ocaml-modules/alcotest/default.nix+6−4

This diff is too big to show here.

pkgs/development/ocaml-modules/asn1-combinators/default.nix+1−3

This diff is too big to show here.

pkgs/development/ocaml-modules/atd/default.nix+6−14

This diff is too big to show here.

pkgs/development/ocaml-modules/atdgen/codec-runtime.nix+18

This diff is too big to show here.

pkgs/development/ocaml-modules/atdgen/default.nix+8−17

This diff is too big to show here.

pkgs/development/ocaml-modules/atdgen/runtime.nix+15

This diff is too big to show here.

pkgs/development/ocaml-modules/bap/default.nix+5−4

This diff is too big to show here.

pkgs/development/ocaml-modules/batteries/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/bitstring/ppx.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/bitv/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/bjack/default.nix+25

This diff is too big to show here.

pkgs/development/ocaml-modules/brisk-reconciler/default.nix+33

This diff is too big to show here.

pkgs/development/ocaml-modules/bz2/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/camlp-streams/default.nix+20

This diff is too big to show here.

pkgs/development/ocaml-modules/camlpdf/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/caqti/default.nix+9−4

This diff is too big to show here.

pkgs/development/ocaml-modules/cmdliner/default.nix+15−23

This diff is too big to show here.

pkgs/development/ocaml-modules/coin/default.nix+6−9

This diff is too big to show here.

pkgs/development/ocaml-modules/cpdf/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/cstruct/lwt.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/cstruct/ppx.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/cstruct/sexp.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/cstruct/unix.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/csv/lwt.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/ctypes/default.nix+3−3

This diff is too big to show here.

pkgs/development/ocaml-modules/dssi/default.nix+25

This diff is too big to show here.

pkgs/development/ocaml-modules/dune-action-plugin/default.nix+4

This diff is too big to show here.

pkgs/development/ocaml-modules/dune-glob/default.nix+4

This diff is too big to show here.

pkgs/development/ocaml-modules/dune-private-libs/default.nix+4

This diff is too big to show here.

pkgs/development/ocaml-modules/dune-rpc/default.nix+23

This diff is too big to show here.

pkgs/development/ocaml-modules/dune-site/default.nix+4

This diff is too big to show here.

pkgs/development/ocaml-modules/eliom/default.nix+9−3

This diff is too big to show here.

pkgs/development/ocaml-modules/erm_xml/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/expat/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/farfadet/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/ffmpeg/base.nix+2−2

This diff is too big to show here.

pkgs/development/ocaml-modules/fiber/default.nix+23

This diff is too big to show here.

pkgs/development/ocaml-modules/flex/default.nix+22

This diff is too big to show here.

pkgs/development/ocaml-modules/fmt/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/fpath/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/frontc/default.nix+8−25

This diff is too big to show here.

pkgs/development/ocaml-modules/gen_js_api/default.nix+41

This diff is too big to show here.

pkgs/development/ocaml-modules/gen_js_api/ojs.nix+21

This diff is too big to show here.

pkgs/development/ocaml-modules/hacl-star/raw.nix+3

This diff is too big to show here.

pkgs/development/ocaml-modules/javalib/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/lablgl/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/lablgtk-extras/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/ladspa/default.nix+25

This diff is too big to show here.

pkgs/development/ocaml-modules/lastfm/default.nix+32

This diff is too big to show here.

pkgs/development/ocaml-modules/llvm/default.nix+2−2

This diff is too big to show here.

pkgs/development/ocaml-modules/logs/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/lua-ml/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/lwt/default.nix+3−3

This diff is too big to show here.

pkgs/development/ocaml-modules/nocrypto/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/notty/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/ocaml-lsp/default.nix+7−8

This diff is too big to show here.

pkgs/development/ocaml-modules/ocaml-lsp/jsonrpc.nix+8−4

This diff is too big to show here.

pkgs/development/ocaml-modules/ocaml-lsp/lsp.nix+25−5

This diff is too big to show here.

pkgs/development/ocaml-modules/ocamlformat-rpc-lib/default.nix+15−3

This diff is too big to show here.

pkgs/development/ocaml-modules/ocp-ocamlres/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/ocsigen-deriving/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/ocsigen-ppx-rpc/default.nix+23

This diff is too big to show here.

pkgs/development/ocaml-modules/ocsigen-server/default.nix+4−4

This diff is too big to show here.

pkgs/development/ocaml-modules/ocsigen-start/default.nix+4−2

This diff is too big to show here.

pkgs/development/ocaml-modules/ocsigen-toolkit/default.nix+2−2

This diff is too big to show here.

pkgs/development/ocaml-modules/ocsipersist/default.nix+20

This diff is too big to show here.

pkgs/development/ocaml-modules/ocsipersist/lib.nix+27

This diff is too big to show here.

pkgs/development/ocaml-modules/ocsipersist/pgsql.nix+24

This diff is too big to show here.

pkgs/development/ocaml-modules/ocsipersist/sqlite.nix+23

This diff is too big to show here.

pkgs/development/ocaml-modules/phylogenetics/default.nix+2−4

This diff is too big to show here.

pkgs/development/ocaml-modules/ppxlib/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/ptime/default.nix+5−5

This diff is too big to show here.

pkgs/development/ocaml-modules/pure-splitmix/default.nix+22

This diff is too big to show here.

pkgs/development/ocaml-modules/reactivedata/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/rebez/default.nix+22

This diff is too big to show here.

pkgs/development/ocaml-modules/reperf/default.nix+41

This diff is too big to show here.

pkgs/development/ocaml-modules/samplerate/default.nix+25

This diff is too big to show here.

pkgs/development/ocaml-modules/sawja/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/sedlex/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/sosa/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/sqlite3EZ/default.nix−36

This diff is too big to show here.

pkgs/development/ocaml-modules/stdune/default.nix+6−2

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/010-PtGRANAD-test-helpers.nix−39

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/011-PtHangz2-test-helpers.nix−35

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/base-test-helpers.nix−32

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/base.nix−37

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/clic.nix−28

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/client-010-PtGRANAD.nix−38

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/client-011-PtHangz2.nix−44

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/client-base.nix−28

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/context.nix−34

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/crypto.nix−42

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/embedded-protocol-010-PtGRANAD.nix−23

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/embedded-protocol-demo-noops.nix−23

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/error-monad.nix−35

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/event-logging-test-helpers.nix−25

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/event-logging.nix−28

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/hacl-glue-unix.nix−26

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/hacl-glue.nix−17

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/legacy-store.nix−42

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/lmdb.nix−51

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/lwt-result-stdlib.nix−31

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/micheline.nix−32

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/mockup-proxy.nix−27

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/mockup-registration.nix−23

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/p2p-services.nix−19

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/p2p.nix−38

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-010-PtGRANAD-parameters.nix−23

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-010-PtGRANAD.nix−28

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-011-PtHangz2-parameters.nix−23

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-011-PtHangz2.nix−28

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-alpha.nix−21

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-compiler.nix−34

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-demo-noops.nix−21

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-environment-packer.nix−18

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-environment-sigs.nix−42

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-environment-structs.nix−25

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-environment.nix−43

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-plugin-010-PtGRANAD.nix−23

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-plugin-011-PtHangz2.nix−23

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-plugin-alpha.nix−21

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/protocol-updater.nix−26

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/proxy.nix−36

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/requester.nix−34

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/rpc-http-client-unix.nix−23

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/rpc-http-client.nix−23

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/rpc-http.nix−25

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/rpc.nix−25

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/sapling.nix−35

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/shell-context.nix−21

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/shell-services-test-helpers.nix−32

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/shell-services.nix−30

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/shell.nix−44

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/signer-backends.nix−30

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/signer-services.nix−21

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/stdlib-unix.nix−33

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/stdlib.nix−64

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/store.nix−50

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/test-helpers.nix−28

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/validation.nix−28

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/version.nix−21

This diff is too big to show here.

pkgs/development/ocaml-modules/tezos/workers.nix−21

This diff is too big to show here.

pkgs/development/ocaml-modules/toml/default.nix+2−4

This diff is too big to show here.

pkgs/development/ocaml-modules/torch/default.nix+1

This diff is too big to show here.

pkgs/development/ocaml-modules/tsdl/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/type_conv/108.08.00.nix−31

This diff is too big to show here.

pkgs/development/ocaml-modules/type_conv/109.60.01.nix−32

This diff is too big to show here.

pkgs/development/ocaml-modules/type_conv/112.01.01.nix−26

This diff is too big to show here.

pkgs/development/ocaml-modules/unionFind/default.nix+24

This diff is too big to show here.

pkgs/development/ocaml-modules/uri/sexp.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/uucp/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/uunf/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/uuuu/default.nix+6−9

This diff is too big to show here.

pkgs/development/ocaml-modules/vg/default.nix+2−2

This diff is too big to show here.

pkgs/development/ocaml-modules/wasm/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/xdg/default.nix+17

This diff is too big to show here.

pkgs/development/ocaml-modules/xmlm/default.nix+1−1

This diff is too big to show here.

pkgs/development/ocaml-modules/xmlplaylist/default.nix+25

This diff is too big to show here.

pkgs/development/ocaml-modules/z3/default.nix+1−6

This diff is too big to show here.

pkgs/development/ocaml-modules/z3/ocamlfind.patch−13

This diff is too big to show here.

pkgs/development/ocaml-modules/zarith/default.nix+1−1

This diff is too big to show here.

pkgs/development/octave-modules/octproj/default.nix+1

This diff is too big to show here.

pkgs/development/php-packages/composer/default.nix+2−2

This diff is too big to show here.

pkgs/development/php-packages/datadog_trace/default.nix+22

This diff is too big to show here.

pkgs/development/php-packages/openswoole/default.nix+22

This diff is too big to show here.

pkgs/development/php-packages/pdepend/default.nix+41

This diff is too big to show here.

pkgs/development/php-packages/phpstan/default.nix+2−2

This diff is too big to show here.

pkgs/development/php-packages/xdebug/default.nix+2−2

This diff is too big to show here.

pkgs/development/pure-modules/audio/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/avahi/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/csv/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/doc/default.nix−23

This diff is too big to show here.

pkgs/development/pure-modules/fastcgi/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/faust/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/ffi/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/gen/default.nix−26

This diff is too big to show here.

pkgs/development/pure-modules/generic-setup-hook.sh−2

This diff is too big to show here.

pkgs/development/pure-modules/gl/default.nix−27

This diff is too big to show here.

pkgs/development/pure-modules/glpk/default.nix−40

This diff is too big to show here.

pkgs/development/pure-modules/gplot/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/gsl/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/gtk/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/liblo/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/lilv/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/lv2/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/midi/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/mpfr/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/octave/default.nix−26

This diff is too big to show here.

pkgs/development/pure-modules/odbc/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/pandoc/default.nix−28

This diff is too big to show here.

pkgs/development/pure-modules/rational/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/readline/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/sockets/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/sql3/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/stldict/default.nix−30

This diff is too big to show here.

pkgs/development/pure-modules/stllib/default.nix−30

This diff is too big to show here.

pkgs/development/pure-modules/tk/default.nix−24

This diff is too big to show here.

pkgs/development/pure-modules/xml/default.nix−24

This diff is too big to show here.

pkgs/development/python-modules/Cython/default.nix+2−9

This diff is too big to show here.

pkgs/development/python-modules/Mako/default.nix+31−4

This diff is too big to show here.

pkgs/development/python-modules/Nikola/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/Theano/default.nix+10−4

This diff is too big to show here.

pkgs/development/python-modules/XlsxWriter/default.nix+25−13

This diff is too big to show here.

pkgs/development/python-modules/adafruit-io/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/adafruit-platformdetect/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/adb-shell/default.nix+12−3

This diff is too big to show here.

pkgs/development/python-modules/adblock/default.nix+4−4

This diff is too big to show here.

pkgs/development/python-modules/add-trailing-comma/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/advocate/default.nix+45

This diff is too big to show here.

pkgs/development/python-modules/aenum/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/aesara/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/aesedb/default.nix+45

This diff is too big to show here.

pkgs/development/python-modules/afdko/default.nix+5−9

This diff is too big to show here.

pkgs/development/python-modules/afsapi/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/ailment/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/aio-geojson-generic-client/default.nix+51

This diff is too big to show here.

pkgs/development/python-modules/aio-georss-client/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/aio-georss-gdacs/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/aioairzone/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/aiobotocore/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/aioconsole/default.nix+2

This diff is too big to show here.

pkgs/development/python-modules/aiodiscover/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/aioftp/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/aioguardian/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/aioh2/default.nix−24

This diff is too big to show here.

pkgs/development/python-modules/aiohomekit/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/aiohttp-apispec/default.nix+2−7

This diff is too big to show here.

pkgs/development/python-modules/aiohttp-remotes/default.nix+6

This diff is too big to show here.

pkgs/development/python-modules/aiohttp-swagger/default.nix+10−2

This diff is too big to show here.

pkgs/development/python-modules/aiohttp/default.nix+4

This diff is too big to show here.

pkgs/development/python-modules/aiolifx/default.nix+8−5

This diff is too big to show here.

pkgs/development/python-modules/aiomysql/default.nix+17−27

This diff is too big to show here.

pkgs/development/python-modules/aionotify/default.nix+5

This diff is too big to show here.

pkgs/development/python-modules/aiooncue/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/aioqsw/default.nix+40

This diff is too big to show here.

pkgs/development/python-modules/aioshelly/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/aioslimproto/default.nix+41

This diff is too big to show here.

pkgs/development/python-modules/aioswitcher/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/aiotractive/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/alembic/default.nix+2−6

This diff is too big to show here.

pkgs/development/python-modules/amazon-ion/default.nix+27−9

This diff is too big to show here.

pkgs/development/python-modules/amberelectric/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/amply/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/amqp/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/androidtv/default.nix+12−4

This diff is too big to show here.

pkgs/development/python-modules/angr/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/angrop/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/ansi/default.nix+20−8

This diff is too big to show here.

pkgs/development/python-modules/ansi2html/default.nix+3−2

This diff is too big to show here.

pkgs/development/python-modules/ansible-compat/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/ansible-doctor/default.nix+32−25

This diff is too big to show here.

pkgs/development/python-modules/ansible-later/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/ansible-lint/default.nix−4

This diff is too big to show here.

pkgs/development/python-modules/ansible-runner/default.nix+8−3

This diff is too big to show here.

pkgs/development/python-modules/ansible/base.nix−88

This diff is too big to show here.

pkgs/development/python-modules/ansible/core.nix+5−14

This diff is too big to show here.

pkgs/development/python-modules/ansible/default.nix+15−8

This diff is too big to show here.

pkgs/development/python-modules/ansible/legacy.nix−55

This diff is too big to show here.

pkgs/development/python-modules/anybadge/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/anyconfig/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/anyio/default.nix+11−2

This diff is too big to show here.

pkgs/development/python-modules/apache-airflow/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/apache-beam/default.nix+16−19

This diff is too big to show here.

pkgs/development/python-modules/apache-beam/fix-cython.patch−41

This diff is too big to show here.

pkgs/development/python-modules/apache-beam/relax-deps.patch−20

This diff is too big to show here.

pkgs/development/python-modules/apispec/default.nix+13−9

This diff is too big to show here.

pkgs/development/python-modules/aplpy/default.nix+5−25

This diff is too big to show here.

pkgs/development/python-modules/apprise/default.nix+4−4

This diff is too big to show here.

pkgs/development/python-modules/approvaltests/default.nix+33−11

This diff is too big to show here.

pkgs/development/python-modules/appthreat-vulnerability-db/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/aprslib/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/apsw/default.nix+10−25

This diff is too big to show here.

pkgs/development/python-modules/apycula/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/archinfo/default.nix+4−14

This diff is too big to show here.

pkgs/development/python-modules/arris-tg2492lg/default.nix+43

This diff is too big to show here.

pkgs/development/python-modules/arrow/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/asana/default.nix+26−16

This diff is too big to show here.

pkgs/development/python-modules/asciimatics/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/asdf-standard/default.nix+43

This diff is too big to show here.

pkgs/development/python-modules/asdf-transform-schemas/default.nix+46

This diff is too big to show here.

pkgs/development/python-modules/asdf/default.nix+18−7

This diff is too big to show here.

pkgs/development/python-modules/asgiref/default.nix+14−4

This diff is too big to show here.

pkgs/development/python-modules/asn1crypto/default.nix+13−7

This diff is too big to show here.

pkgs/development/python-modules/astroid/default.nix+6−2

This diff is too big to show here.

pkgs/development/python-modules/astropy-extension-helpers/default.nix+15−4

This diff is too big to show here.

pkgs/development/python-modules/astropy/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/astroquery/default.nix+30−8

This diff is too big to show here.

pkgs/development/python-modules/asttokens/default.nix+6−1

This diff is too big to show here.

pkgs/development/python-modules/async-lru/default.nix+4

This diff is too big to show here.

pkgs/development/python-modules/async-upnp-client/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/async_generator/default.nix−2

This diff is too big to show here.

pkgs/development/python-modules/asyncsleepiq/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/asyncssh/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/atlassian-python-api/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/atom/default.nix+35−9

This diff is too big to show here.

pkgs/development/python-modules/atomman/default.nix+13−5

This diff is too big to show here.

pkgs/development/python-modules/aurorapy/default.nix+2

This diff is too big to show here.

pkgs/development/python-modules/authcaptureproxy/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/authheaders/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/autobahn/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/autograd/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/av/default.nix+130−16

This diff is too big to show here.

pkgs/development/python-modules/awesomeversion/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/aws-adfs/default.nix+33−25

This diff is too big to show here.

pkgs/development/python-modules/aws-lambda-builders/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/awscrt/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/awsiotpythonsdk/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/azure-common/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/azure-core/default.nix+5−3

This diff is too big to show here.

pkgs/development/python-modules/azure-eventgrid/default.nix+10−3

This diff is too big to show here.

pkgs/development/python-modules/azure-identity/default.nix+15−13

This diff is too big to show here.

pkgs/development/python-modules/azure-keyvault-keys/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/azure-keyvault/default.nix+9−4

This diff is too big to show here.

pkgs/development/python-modules/azure-mgmt-containerservice/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/azure-mgmt-core/default.nix+2

This diff is too big to show here.

pkgs/development/python-modules/azure-mgmt-datafactory/default.nix+6−6

This diff is too big to show here.

pkgs/development/python-modules/azure-mgmt-kusto/azure-mgmt-apimanagement/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/azure-mgmt-loganalytics/default.nix−2

This diff is too big to show here.

pkgs/development/python-modules/azure-mgmt-msi/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/azure-mgmt-reservations/default.nix+6−6

This diff is too big to show here.

pkgs/development/python-modules/azure-mgmt-servicelinker/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/azure-mgmt-storage/default.nix+12−6

This diff is too big to show here.

pkgs/development/python-modules/azure-mgmt-trafficmanager/default.nix+4−2

This diff is too big to show here.

pkgs/development/python-modules/azure-servicebus/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/azure-synapse-artifacts/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/backports-zoneinfo/default.nix+3

This diff is too big to show here.

pkgs/development/python-modules/basemap/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/bc-python-hcl2/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/bcrypt/default.nix+33−8

This diff is too big to show here.

pkgs/development/python-modules/beautifulsoup4/default.nix+9−3

This diff is too big to show here.

pkgs/development/python-modules/beautifultable/default.nix+6−1

This diff is too big to show here.

pkgs/development/python-modules/behave/default.nix+4−4

This diff is too big to show here.

pkgs/development/python-modules/bimmer-connected/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/bip_utils/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/bitarray/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/bitbox02/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/bitcoin-price-api/default.nix−24

This diff is too big to show here.

pkgs/development/python-modules/bitcoinlib/default.nix+1−1

This diff is too big to show here.

pkgs/development/python-modules/bitstruct/default.nix+15−4

This diff is too big to show here.

pkgs/development/python-modules/bjoern/default.nix+10−5

This diff is too big to show here.

pkgs/development/python-modules/black/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/bleach/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/bleak/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/blessed/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/blinker/default.nix+8−3

This diff is too big to show here.

pkgs/development/python-modules/blspy/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/boltztrap2/default.nix+26−13

This diff is too big to show here.

pkgs/development/python-modules/boschshcpy/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/boto3/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/botocore/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/bottleneck/default.nix+31−16

This diff is too big to show here.

pkgs/development/python-modules/boxx/default.nix+11−4

This diff is too big to show here.

pkgs/development/python-modules/bpython/default.nix+16−2

This diff is too big to show here.

pkgs/development/python-modules/breezy/default.nix+20−5

This diff is too big to show here.

pkgs/development/python-modules/brother/default.nix+16−15

This diff is too big to show here.

pkgs/development/python-modules/browser-cookie3/default.nix+6−5

This diff is too big to show here.

pkgs/development/python-modules/bsblan/default.nix+24−16

This diff is too big to show here.

pkgs/development/python-modules/build/default.nix−2

This diff is too big to show here.

pkgs/development/python-modules/buildbot/default.nix+5−2

This diff is too big to show here.

pkgs/development/python-modules/buildbot/pkg.nix+1−1

This diff is too big to show here.

pkgs/development/python-modules/buildbot/plugins.nix+5−5

This diff is too big to show here.

pkgs/development/python-modules/buildbot/worker.nix+41−7

This diff is too big to show here.

pkgs/development/python-modules/caldav/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/can/default.nix+9−4

This diff is too big to show here.

pkgs/development/python-modules/canonicaljson/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/casbin/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/cattrs/default.nix+5

This diff is too big to show here.

pkgs/development/python-modules/cbor2/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/cdcs/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/celery/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/cert-chain-resolver/default.nix+22−7

This diff is too big to show here.

pkgs/development/python-modules/certbot/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/certomancer/default.nix+71

This diff is too big to show here.

pkgs/development/python-modules/cffi/default.nix+5−4

This diff is too big to show here.

pkgs/development/python-modules/chainer/default.nix+4−2

This diff is too big to show here.

pkgs/development/python-modules/chalice/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/cherrypy/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/chex/default.nix+3−5

This diff is too big to show here.

pkgs/development/python-modules/chiavdf/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/ciscoconfparse/default.nix+1

This diff is too big to show here.

pkgs/development/python-modules/ckcc-protocol/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/claripy/default.nix+7−5

This diff is too big to show here.

pkgs/development/python-modules/cle/default.nix+5−3

This diff is too big to show here.

pkgs/development/python-modules/click-log/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/click/default.nix+3−8

This diff is too big to show here.

pkgs/development/python-modules/clickhouse-driver/default.nix−2

This diff is too big to show here.

pkgs/development/python-modules/clize/default.nix+26−9

This diff is too big to show here.

pkgs/development/python-modules/clldutils/default.nix+8−2

This diff is too big to show here.

pkgs/development/python-modules/cloudflare/default.nix+11−4

This diff is too big to show here.

pkgs/development/python-modules/cma/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/cmd2/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/codepy/default.nix+35

This diff is too big to show here.

pkgs/development/python-modules/collections-extended/default.nix+10−5

This diff is too big to show here.

pkgs/development/python-modules/commoncode/default.nix+8−3

This diff is too big to show here.

pkgs/development/python-modules/connexion/default.nix+10−16

This diff is too big to show here.

pkgs/development/python-modules/construct/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/contexttimer/default.nix+42

This diff is too big to show here.

pkgs/development/python-modules/convertdate/default.nix+10−7

This diff is too big to show here.

pkgs/development/python-modules/coqpit/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/coverage/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/cppy/default.nix+12−7

This diff is too big to show here.

pkgs/development/python-modules/cryptography/default.nix+24−26

This diff is too big to show here.

pkgs/development/python-modules/cryptography/vectors.nix+9−6

This diff is too big to show here.

pkgs/development/python-modules/crytic-compile/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/cssselect2/default.nix+8−2

This diff is too big to show here.

pkgs/development/python-modules/cupy/default.nix+13−4

This diff is too big to show here.

pkgs/development/python-modules/cx_freeze/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/cyclonedx-python-lib/default.nix+15−6

This diff is too big to show here.

pkgs/development/python-modules/cypherpunkpay/default.nix+97

This diff is too big to show here.

pkgs/development/python-modules/dask-mpi/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/dask-yarn/default.nix+47

This diff is too big to show here.

pkgs/development/python-modules/dask/default.nix+2−4

This diff is too big to show here.

pkgs/development/python-modules/databricks-connect/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/datadog/default.nix+8−2

This diff is too big to show here.

pkgs/development/python-modules/dataset/default.nix+11−5

This diff is too big to show here.

pkgs/development/python-modules/datasets/default.nix+20−7

This diff is too big to show here.

pkgs/development/python-modules/datasette/default.nix+12−12

This diff is too big to show here.

pkgs/development/python-modules/datashader/default.nix−1

This diff is too big to show here.

pkgs/development/python-modules/datatable/default.nix+3−9

This diff is too big to show here.

pkgs/development/python-modules/dateparser/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/db-dtypes/default.nix+39

This diff is too big to show here.

pkgs/development/python-modules/debtcollector/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/debugpy/default.nix−1

This diff is too big to show here.

pkgs/development/python-modules/deep-translator/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/deepdiff/default.nix+6−3

This diff is too big to show here.

pkgs/development/python-modules/deezer-python/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/deltachat/default.nix+7−3

This diff is too big to show here.

pkgs/development/python-modules/denonavr/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/detect-secrets/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/devito/default.nix+100

This diff is too big to show here.

pkgs/development/python-modules/devolo-home-control-api/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/devtools/default.nix+7

This diff is too big to show here.

pkgs/development/python-modules/dictpath/default.nix+2

This diff is too big to show here.

pkgs/development/python-modules/diff-cover/default.nix+4−2

This diff is too big to show here.

pkgs/development/python-modules/diskcache/default.nix−4

This diff is too big to show here.

pkgs/development/python-modules/distributed/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/distro/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/django-allauth/default.nix+25−11

This diff is too big to show here.

pkgs/development/python-modules/django-appconf/default.nix+45

This diff is too big to show here.

pkgs/development/python-modules/django-hijack-admin/default.nix+3

This diff is too big to show here.

pkgs/development/python-modules/django-hijack/default.nix+22−22

This diff is too big to show here.

pkgs/development/python-modules/django-raster/default.nix+1−3

This diff is too big to show here.

pkgs/development/python-modules/django-statici18n/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/django-taggit/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/django-widget-tweaks/default.nix+32−9

This diff is too big to show here.

pkgs/development/python-modules/django/1.10-gis-libs.template.patch−24

This diff is too big to show here.

pkgs/development/python-modules/django/2.nix−39

This diff is too big to show here.

pkgs/development/python-modules/django/3.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/django/4.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/django_appconf/default.nix−35

This diff is too big to show here.

pkgs/development/python-modules/django_compressor/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/django_contrib_comments/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/django_modelcluster/default.nix+27−9

This diff is too big to show here.

pkgs/development/python-modules/django_reversion/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/dm-haiku/default.nix+10−3

This diff is too big to show here.

pkgs/development/python-modules/dm-sonnet/default.nix−91

This diff is too big to show here.

pkgs/development/python-modules/dnspython/default.nix+14−6

This diff is too big to show here.

pkgs/development/python-modules/doc8/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/dockerfile-parse/default.nix+27−9

This diff is too big to show here.

pkgs/development/python-modules/docstring-parser/default.nix+25−11

This diff is too big to show here.

pkgs/development/python-modules/docutils/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/doit/default.nix+7−4

This diff is too big to show here.

pkgs/development/python-modules/dotmap/default.nix+12−4

This diff is too big to show here.

pkgs/development/python-modules/dragonfly/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/dropbox/default.nix+41−12

This diff is too big to show here.

pkgs/development/python-modules/duckdb-engine/default.nix+40

This diff is too big to show here.

pkgs/development/python-modules/dugong/default.nix+5

This diff is too big to show here.

pkgs/development/python-modules/dunamai/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/dungeon-eos/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/durus/default.nix+28

This diff is too big to show here.

pkgs/development/python-modules/dynalite-devices/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/eagle100/default.nix+37

This diff is too big to show here.

pkgs/development/python-modules/easygui/default.nix+2−6

This diff is too big to show here.

pkgs/development/python-modules/easyprocess/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/editables/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/elastic-apm/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/elementpath/default.nix+4−4

This diff is too big to show here.

pkgs/development/python-modules/elkm1-lib/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/enaml/default.nix+6−3

This diff is too big to show here.

pkgs/development/python-modules/entrypoint2/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/entrypoints/default.nix+17−12

This diff is too big to show here.

pkgs/development/python-modules/env-canada/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/envs/default.nix+15−11

This diff is too big to show here.

pkgs/development/python-modules/ephemeral-port-reserve/default.nix+42

This diff is too big to show here.

pkgs/development/python-modules/exceptiongroup/default.nix+39

This diff is too big to show here.

pkgs/development/python-modules/exchangelib/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/faker/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/fakeredis/default.nix+5

This diff is too big to show here.

pkgs/development/python-modules/falcon/default.nix+46−33

This diff is too big to show here.

pkgs/development/python-modules/faraday-agent-parameters-types/default.nix+6−1

This diff is too big to show here.

pkgs/development/python-modules/faraday-plugins/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/fastapi/default.nix+17−3

This diff is too big to show here.

pkgs/development/python-modules/fastavro/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/fastbencode/default.nix+26

This diff is too big to show here.

pkgs/development/python-modules/fastcore/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/fasteners/default.nix+11−24

This diff is too big to show here.

pkgs/development/python-modules/fastjsonschema/default.nix+3−14

This diff is too big to show here.

pkgs/development/python-modules/fastparquet/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/fenics/default.nix+12−20

This diff is too big to show here.

pkgs/development/python-modules/ffcv/default.nix+3−2

This diff is too big to show here.

pkgs/development/python-modules/filelock/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/filetype/default.nix+26−6

This diff is too big to show here.

pkgs/development/python-modules/findpython/default.nix+53

This diff is too big to show here.

pkgs/development/python-modules/fints/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/fipy/default.nix+8

This diff is too big to show here.

pkgs/development/python-modules/fipy/gmsh.patch+182

This diff is too big to show here.

pkgs/development/python-modules/fitbit/default.nix+24−16

This diff is too big to show here.

pkgs/development/python-modules/fivem-api/default.nix+42

This diff is too big to show here.

pkgs/development/python-modules/flake8-blind-except/default.nix+5

This diff is too big to show here.

pkgs/development/python-modules/flake8-bugbear/default.nix+9−4

This diff is too big to show here.

pkgs/development/python-modules/flake8-debugger/default.nix+23−14

This diff is too big to show here.

pkgs/development/python-modules/flake8/default.nix+1−1

This diff is too big to show here.

pkgs/development/python-modules/flask-admin/default.nix+5

This diff is too big to show here.

pkgs/development/python-modules/flask-appbuilder/default.nix+4−13

This diff is too big to show here.

pkgs/development/python-modules/flask-bcrypt/default.nix+9−3

This diff is too big to show here.

pkgs/development/python-modules/flask-compress/default.nix+26−8

This diff is too big to show here.

pkgs/development/python-modules/flask-httpauth/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/flask-jwt-extended/default.nix+31−10

This diff is too big to show here.

pkgs/development/python-modules/flask-login/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/flask-paranoid/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/flask-restful/default.nix+4

This diff is too big to show here.

pkgs/development/python-modules/flask-restful/werkzeug-2.1.0-compat.patch+114

This diff is too big to show here.

pkgs/development/python-modules/flask-restx/default.nix+15

This diff is too big to show here.

pkgs/development/python-modules/flask-seasurf/default.nix+13−3

This diff is too big to show here.

pkgs/development/python-modules/flask-security-too/default.nix+66−32

This diff is too big to show here.

pkgs/development/python-modules/flask-socketio/default.nix+6−2

This diff is too big to show here.

pkgs/development/python-modules/flask-talisman/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/flask-testing/default.nix+41−15

This diff is too big to show here.

pkgs/development/python-modules/flask/default.nix+6−8

This diff is too big to show here.

pkgs/development/python-modules/flatbuffers/default.nix+1

This diff is too big to show here.

pkgs/development/python-modules/flatdict/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/flax/default.nix+7−3

This diff is too big to show here.

pkgs/development/python-modules/flickrapi/default.nix+50−19

This diff is too big to show here.

pkgs/development/python-modules/flit-core/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/flit/default.nix+10−11

This diff is too big to show here.

pkgs/development/python-modules/flux-led/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/fn/default.nix+22−8

This diff is too big to show here.

pkgs/development/python-modules/fontmake/default.nix+42

This diff is too big to show here.

pkgs/development/python-modules/fontparts/default.nix+5−3

This diff is too big to show here.

pkgs/development/python-modules/fonttools/default.nix+8−5

This diff is too big to show here.

pkgs/development/python-modules/fqdn/default.nix+36

This diff is too big to show here.

pkgs/development/python-modules/freezegun/default.nix+21−10

This diff is too big to show here.

pkgs/development/python-modules/frozendict/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/fs/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/ftfy/default.nix+8−2

This diff is too big to show here.

pkgs/development/python-modules/funcparserlib/default.nix+2

This diff is too big to show here.

pkgs/development/python-modules/furo/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/fuse-python/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/garminconnect/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/gattlib/default.nix+68

This diff is too big to show here.

pkgs/development/python-modules/gattlib/setup.patch+18

This diff is too big to show here.

pkgs/development/python-modules/gb-io/default.nix+45

This diff is too big to show here.

pkgs/development/python-modules/gbulb/default.nix+43

This diff is too big to show here.

pkgs/development/python-modules/gcal-sync/default.nix+46

This diff is too big to show here.

pkgs/development/python-modules/gehomesdk/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/genshi/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/gensim/default.nix+37−20

This diff is too big to show here.

pkgs/development/python-modules/geoalchemy2/default.nix+13−2

This diff is too big to show here.

pkgs/development/python-modules/geocachingapi/default.nix+10−4

This diff is too big to show here.

pkgs/development/python-modules/geopandas/default.nix+14−1

This diff is too big to show here.

pkgs/development/python-modules/ghapi/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/ghp-import/default.nix+12−4

This diff is too big to show here.

pkgs/development/python-modules/gidgethub/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/gipc/default.nix−2

This diff is too big to show here.

pkgs/development/python-modules/git-annex-adapter/default.nix+4

This diff is too big to show here.

pkgs/development/python-modules/github3_py/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/glad/default.nix+18

This diff is too big to show here.

pkgs/development/python-modules/glances-api/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/glcontext/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/glean-parser/default.nix+8−7

This diff is too big to show here.

pkgs/development/python-modules/glfw/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/globus-sdk/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/glyphslib/default.nix+59

This diff is too big to show here.

pkgs/development/python-modules/goodwe/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/google-api-core/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/google-api-python-client/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/google-auth-oauthlib/default.nix+13−3

This diff is too big to show here.

pkgs/development/python-modules/google-cloud-bigquery-storage/default.nix+48

This diff is too big to show here.

pkgs/development/python-modules/google-cloud-bigquery/default.nix+15−4

This diff is too big to show here.

pkgs/development/python-modules/google-cloud-bigtable/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/google-cloud-dataproc/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/google-cloud-error-reporting/default.nix+6−7

This diff is too big to show here.

pkgs/development/python-modules/google-cloud-pubsub/default.nix+8−3

This diff is too big to show here.

pkgs/development/python-modules/google-cloud-secret-manager/default.nix+6−2

This diff is too big to show here.

pkgs/development/python-modules/google-cloud-testutils/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/google-cloud-videointelligence/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/google-nest-sdm/default.nix+4−4

This diff is too big to show here.

pkgs/development/python-modules/google-re2/default.nix+22−7

This diff is too big to show here.

pkgs/development/python-modules/gradient/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/graph_nets/default.nix−45

This diff is too big to show here.

pkgs/development/python-modules/graphene-django/default.nix+7−3

This diff is too big to show here.

pkgs/development/python-modules/graphene-django/graphene-3_2_0.patch+150

This diff is too big to show here.

pkgs/development/python-modules/graphene/default.nix+17

This diff is too big to show here.

pkgs/development/python-modules/graphql-relay/default.nix+19−4

This diff is too big to show here.

pkgs/development/python-modules/graphql-subscription-manager/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/graphviz/default.nix+4

This diff is too big to show here.

pkgs/development/python-modules/graspologic/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/greeclimate/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/gremlinpython/default.nix+3−9

This diff is too big to show here.

pkgs/development/python-modules/grip/default.nix+2−11

This diff is too big to show here.

pkgs/development/python-modules/grpcio-status/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/grpcio-tools/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/gspread/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/gssapi/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/gtts/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/h11/default.nix+5−2

This diff is too big to show here.

pkgs/development/python-modules/h3/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/ha-av/default.nix−43

This diff is too big to show here.

pkgs/development/python-modules/ha-philipsjs/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/hachoir/default.nix+9−3

This diff is too big to show here.

pkgs/development/python-modules/hahomematic/default.nix+4−4

This diff is too big to show here.

pkgs/development/python-modules/hangups/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/hass-nabucasa/default.nix+2−1

This diff is too big to show here.

pkgs/development/python-modules/hatasmota/default.nix+3−3

This diff is too big to show here.

pkgs/development/python-modules/hatchling/default.nix+79

This diff is too big to show here.

pkgs/development/python-modules/hepunits/default.nix+31

This diff is too big to show here.

pkgs/development/python-modules/hg-evolve/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/hg-git/default.nix+15−5

This diff is too big to show here.

pkgs/development/python-modules/hid/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/hidapi/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/hkavr/default.nix+37

This diff is too big to show here.

pkgs/development/python-modules/hmmlearn/default.nix+9−8

This diff is too big to show here.

pkgs/development/python-modules/homeconnect/default.nix+11−4

This diff is too big to show here.

pkgs/development/python-modules/howdoi/default.nix+16−2

This diff is too big to show here.

pkgs/development/python-modules/hpack/default.nix+19−6

This diff is too big to show here.

pkgs/development/python-modules/html-sanitizer/default.nix+3−1

This diff is too big to show here.

pkgs/development/python-modules/http-message-signatures/default.nix+56

This diff is too big to show here.

pkgs/development/python-modules/http-sfv/default.nix+39

This diff is too big to show here.

pkgs/development/python-modules/httpbin/default.nix+10

This diff is too big to show here.

pkgs/development/python-modules/httpcore/default.nix+9−2

This diff is too big to show here.

pkgs/development/python-modules/httplib2/default.nix+9−5

This diff is too big to show here.

pkgs/development/python-modules/httptools/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/httpx-ntlm/default.nix+7−1

This diff is too big to show here.

pkgs/development/python-modules/httpx/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/huggingface-hub/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/humanize/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/hwi/default.nix+11−8

This diff is too big to show here.

pkgs/development/python-modules/hydra-check/default.nix+12−19

This diff is too big to show here.

pkgs/development/python-modules/hyperframe/default.nix+4−1

This diff is too big to show here.

pkgs/development/python-modules/hyperion-py/default.nix+4−3

This diff is too big to show here.

pkgs/development/python-modules/hypothesis/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/hypothesmith/default.nix+32−4

This diff is too big to show here.

pkgs/development/python-modules/hypothesmith/remove-black.patch+88

This diff is too big to show here.

pkgs/development/python-modules/hyppo/default.nix+6−4

This diff is too big to show here.

pkgs/development/python-modules/ibis-framework/default.nix+34−47

This diff is too big to show here.

pkgs/development/python-modules/idasen/default.nix+5−3

This diff is too big to show here.

pkgs/development/python-modules/identify/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/igraph/default.nix+3−2

This diff is too big to show here.

pkgs/development/python-modules/ihatemoney/default.nix+36−34

This diff is too big to show here.

pkgs/development/python-modules/imageio/default.nix+24−15

This diff is too big to show here.

pkgs/development/python-modules/imageio/libgl-path.patch+13

This diff is too big to show here.

pkgs/development/python-modules/imap-tools/default.nix+3−2

This diff is too big to show here.

pkgs/development/python-modules/img2pdf/default.nix+2−12

This diff is too big to show here.

pkgs/development/python-modules/immutables/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/impacket/default.nix+31−5

This diff is too big to show here.

pkgs/development/python-modules/importlib-metadata/default.nix+4−2

This diff is too big to show here.

pkgs/development/python-modules/importlib-resources/default.nix+3−2

This diff is too big to show here.

pkgs/development/python-modules/inquirer/default.nix+2−2

This diff is too big to show here.

pkgs/development/python-modules/installer/default.nix+2−2

This diff is too big to show here.