git.iko.soy/typeable/nixpkgs
on master help sign in
9020 files changed+312263−234644
since splitsnapshots
unifiedsplit
.editorconfig+5 .git-blame-ignore-revs+32 .github/CODEOWNERS+43−50 .github/PULL_REQUEST_TEMPLATE.md+15−10 .github/labeler.yml+1−5 .github/workflows/backport.yml+7−1 .github/workflows/basic-eval.yml+16−10 .github/workflows/direct-push.yml+1−1 .github/workflows/editorconfig.yml+2−2 .github/workflows/labels.yml+6−1 .github/workflows/manual-nixos.yml+3−3 .github/workflows/manual-nixpkgs.yml+3−3 .github/workflows/nixos-manual.yml+2−2 .github/workflows/pending-set.yml+5 .github/workflows/periodic-merge-24h.yml+2−2 .github/workflows/periodic-merge-6h.yml+2−2 .github/workflows/update-terraform-providers.yml+9−8 CONTRIBUTING.md+42−1 README.md+6−1 doc/builders/fetchers.chapter.md+16−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/fhs-environments.section.md+2 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+8−7 doc/contributing/reviewing-contributions.chapter.md+3−3 doc/contributing/submitting-changes.chapter.md+2−2 doc/functions/library/attrsets.xml+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/coq.section.md+2−1 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/languages-frameworks/javascript.section.md+24−2 doc/languages-frameworks/ocaml.section.md+7−3 doc/languages-frameworks/python.section.md+25 doc/languages-frameworks/rust.section.md+2 doc/languages-frameworks/texlive.section.md+1−1 doc/languages-frameworks/vim.section.md+9−6 doc/manual.xml+2 doc/stdenv/cross-compilation.chapter.md+35−10 doc/stdenv/meta.chapter.md+34 doc/stdenv/stdenv.chapter.md+56−2 doc/using/overlays.chapter.md+18−2 doc/using/overrides.chapter.md+6−2 lib/attrsets.nix+114−3 lib/customisation.nix+49−2 lib/default.nix+18−10 lib/flakes.nix+22 lib/generators.nix+47−2 lib/licenses.nix+10 lib/lists.nix+9−8 lib/meta.nix+14 lib/modules.nix+186−46 lib/options.nix+2−4 lib/strings.nix+196−5 lib/systems/default.nix+2−1 lib/systems/doubles.nix+8−2 lib/systems/examples.nix+20 lib/systems/inspect.nix+8−1 lib/systems/parse.nix+9−2 lib/systems/platforms.nix+48−1 lib/tests/flakes/subflakeTest/flake.nix+8 lib/tests/flakes/subflakeTest/subflake/flake.nix+5 lib/tests/misc.nix+429−1 lib/tests/modules.sh+48−1 lib/tests/modules/adhoc-freeformType-survives-type-merge.nix+14 lib/tests/modules/declare-bare-submodule-deep-option-duplicate.nix+10 lib/tests/modules/declare-bare-submodule-deep-option.nix+10 lib/tests/modules/declare-bare-submodule-nested-option.nix+19 lib/tests/modules/declare-bare-submodule.nix+18 lib/tests/modules/declare-set.nix+12 lib/tests/modules/define-bare-submodule-values.nix+4 lib/tests/modules/define-shorthandOnlyDefinesConfig-true.nix+1 lib/tests/modules/emptyValues.nix+36 lib/tests/modules/extendModules-168767-imports.nix+41 lib/tests/modules/freeform-submodules.nix+22 lib/tests/modules/optionTypeFile.nix+28 lib/tests/modules/optionTypeMerging.nix+27 lib/tests/modules/raw.nix+30 lib/tests/systems.nix+5−2 lib/trivial.nix+58−1 lib/types.nix+73−21 maintainers/maintainer-list.nix+556−49 maintainers/scripts/dep-licenses.sh+1−1 maintainers/scripts/feature-freeze-teams.pl+98 maintainers/scripts/haskell/maintained-broken-pkgs.nix+22 maintainers/scripts/haskell/merge-and-open-pr.sh+1−1 maintainers/scripts/haskell/regenerate-hackage-packages.sh+1−1 maintainers/scripts/haskell/update-stackage.sh+25−12 maintainers/scripts/luarocks-packages.csv+4−3 maintainers/scripts/pluginupdate.py+181−142 maintainers/scripts/remove-old-aliases.py+211 maintainers/scripts/update-luarocks-packages+5−8 maintainers/scripts/update.nix+1−1 maintainers/scripts/update.py+4 maintainers/team-list.nix+360−1 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/option-declarations.section.md+19−18 nixos/doc/manual/development/option-types.section.md+23−4 nixos/doc/manual/development/settings-options.section.md+59 nixos/doc/manual/development/unit-handling.section.md+13−8 nixos/doc/manual/development/writing-modules.chapter.md+42 nixos/doc/manual/development/writing-nixos-tests.section.md+52−36 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/option-declarations.section.xml+22−19 nixos/doc/manual/from_md/development/option-types.section.xml+40−5 nixos/doc/manual/from_md/development/settings-options.section.xml+136 nixos/doc/manual/from_md/development/unit-handling.section.xml+22−10 nixos/doc/manual/from_md/development/writing-modules.chapter.xml+49 nixos/doc/manual/from_md/development/writing-nixos-tests.section.xml+95−56 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-2111.section.xml+41−2 nixos/doc/manual/from_md/release-notes/rl-2205.section.xml+1476−21 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+26 nixos/doc/manual/man-pages.xml+7−2 nixos/doc/manual/md-to-db.sh+1−1 nixos/doc/manual/release-notes/release-notes.xml+1 nixos/doc/manual/release-notes/rl-1803.section.md+2 nixos/doc/manual/release-notes/rl-2111.section.md+19−1 nixos/doc/manual/release-notes/rl-2205.section.md+544−6 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+11−2 nixos/lib/make-single-disk-zfs-image.nix+322 nixos/lib/qemu-common.nix+2−2 nixos/lib/systemd-lib.nix+200−12 nixos/lib/systemd-types.nix+69 nixos/lib/systemd-unit-options.nix+560−401 nixos/lib/test-driver/test_driver/driver.py+2−1 nixos/lib/test-driver/test_driver/logger.py+6−2 nixos/lib/test-driver/test_driver/machine.py+38−3 nixos/lib/testing-python.nix+15−16 nixos/lib/utils.nix+40−2 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/fonts/fonts.nix−5 nixos/modules/config/nsswitch.nix+7−4 nixos/modules/config/resolvconf.nix+2−4 nixos/modules/config/terminfo.nix+25−1 nixos/modules/hardware/all-firmware.nix+8−3 nixos/modules/hardware/raid/hpsa.nix+4−1 nixos/modules/hardware/video/amdgpu-pro.nix+2−1 nixos/modules/hardware/video/nvidia.nix+26−14 nixos/modules/hardware/video/webcam/facetimehd.nix+14−6 nixos/modules/hardware/xone.nix+23 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/iso-image.nix+33−22 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+15 nixos/modules/installer/tools/nix-fallback-paths.nix+5−5 nixos/modules/installer/tools/nixos-enter.sh+11−11 nixos/modules/installer/tools/nixos-generate-config.pl+8−1 nixos/modules/installer/tools/tools.nix+6−1 nixos/modules/misc/documentation.nix+3−2 nixos/modules/misc/ids.nix+3−3 nixos/modules/misc/locate.nix+6−2 nixos/modules/misc/version.nix+47−18 nixos/modules/misc/wordlist.nix+59 nixos/modules/module-list.nix+45−8 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/_1password-gui.nix+68 nixos/modules/programs/_1password.nix+44 nixos/modules/programs/adb.nix+1−2 nixos/modules/programs/captive-browser.nix+19−1 nixos/modules/programs/chromium.nix+3 nixos/modules/programs/environment.nix+3−1 nixos/modules/programs/firejail.nix+2−2 nixos/modules/programs/k3b.nix+52 nixos/modules/programs/k40-whisperer.nix+40 nixos/modules/programs/kclock.nix+13 nixos/modules/programs/mininet.nix+2−2 nixos/modules/programs/nbd.nix+19 nixos/modules/programs/nethoscope.nix+30 nixos/modules/programs/nix-ld.nix+12 nixos/modules/programs/nncp.nix+101 nixos/modules/programs/phosh.nix+9−10 nixos/modules/programs/ssh.nix+18−7 nixos/modules/programs/ssmtp.nix−190 nixos/modules/programs/sway.nix+1 nixos/modules/programs/thefuck.nix+7−6 nixos/modules/programs/zsh/zsh-autosuggestions.nix+11−10 nixos/modules/rename.nix+8−2 nixos/modules/security/pam.nix+114−4 nixos/modules/security/pam_mount.nix+78−6 nixos/modules/security/polkit.nix+1−5 nixos/modules/security/sudo.nix+1−1 nixos/modules/security/systemd-confinement.nix+2−2 nixos/modules/services/admin/pgadmin.nix+127 nixos/modules/services/audio/snapserver.nix+28−20 nixos/modules/services/audio/squeezelite.nix+17−21 nixos/modules/services/backup/zrepl.nix+3 nixos/modules/services/cluster/corosync/default.nix+112 nixos/modules/services/cluster/hadoop/conf.nix+11−11 nixos/modules/services/cluster/hadoop/default.nix+72−25 nixos/modules/services/cluster/hadoop/hdfs.nix+148−147 nixos/modules/services/cluster/hadoop/yarn.nix+85−13 nixos/modules/services/cluster/k3s/default.nix+1−5 nixos/modules/services/cluster/kubernetes/pki.nix+1−1 nixos/modules/services/cluster/pacemaker/default.nix+52 nixos/modules/services/continuous-integration/buildbot/master.nix+2−2 nixos/modules/services/continuous-integration/github-runner.nix+18 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/databases/redis.nix+8−5 nixos/modules/services/databases/virtuoso.nix−99 nixos/modules/services/desktops/flatpak.nix+2 nixos/modules/services/desktops/pipewire/daemon/client-rt.conf.json+1−1 nixos/modules/services/desktops/pipewire/daemon/minimal.conf.json+118 nixos/modules/services/desktops/pipewire/daemon/pipewire-pulse.conf.json+68−10 nixos/modules/services/desktops/pipewire/daemon/pipewire.conf.json+5−2 nixos/modules/services/desktops/pipewire/pipewire-media-session.nix+11−7 nixos/modules/services/desktops/pipewire/pipewire.nix+21−3 nixos/modules/services/desktops/pipewire/wireplumber.nix+18−5 nixos/modules/services/development/jupyter/default.nix+1 nixos/modules/services/development/zammad.nix+323 nixos/modules/services/editors/haste.nix+86 nixos/modules/services/games/factorio.nix+9 nixos/modules/services/games/minecraft-server.nix+1−1 nixos/modules/services/hardware/joycond.nix+2−6 nixos/modules/services/hardware/udev.nix+125−23 nixos/modules/services/hardware/udisks2.nix+41 nixos/modules/services/hardware/usbrelayd.nix+44 nixos/modules/services/home-automation/home-assistant.nix+2−6 nixos/modules/services/misc/zigbee2mqtt.nix → nixos/modules/services/home-automation/zigbee2mqtt.nix nixos/modules/services/logging/graylog.nix+1−1 nixos/modules/services/logging/klogd.nix+6−35 nixos/modules/services/logging/logrotate.nix+252−46 nixos/modules/services/mail/mailman.nix+14−7 nixos/modules/services/mail/postfix.nix+22−17 nixos/modules/services/misc/matrix-synapse-log_config.yaml → nixos/modules/services/matrix/matrix-synapse-log_config.yaml nixos/modules/services/matrix/matrix-synapse.nix+773 nixos/modules/services/misc/matrix-synapse.xml → nixos/modules/services/matrix/matrix-synapse.xml+18−17 nixos/modules/services/misc/autorandr.nix+308−2 nixos/modules/services/misc/dendrite.nix+100−8 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/input-remapper.nix+14−13 nixos/modules/services/misc/jellyfin.nix+5−3 nixos/modules/services/misc/matrix-synapse.nix−844 nixos/modules/services/misc/moonraker.nix+40 nixos/modules/services/misc/nitter.nix+11−4 nixos/modules/services/misc/nix-daemon.nix+48−6 nixos/modules/services/misc/nix-gc.nix+9−3 nixos/modules/services/misc/nix-optimise.nix+8−2 nixos/modules/services/misc/paperless-ng.nix → nixos/modules/services/misc/paperless.nix+53−53 nixos/modules/services/misc/plex.nix+13 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/grafana.nix+5 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.nix+2 nixos/modules/services/monitoring/prometheus/exporters.xml+21 nixos/modules/services/monitoring/prometheus/exporters/bird.nix+1−1 nixos/modules/services/monitoring/prometheus/exporters/dmarc.nix+117 nixos/modules/services/monitoring/prometheus/exporters/kea.nix+4 nixos/modules/services/monitoring/prometheus/exporters/pve.nix+118 nixos/modules/services/monitoring/prometheus/exporters/systemd.nix+1−1 nixos/modules/services/monitoring/prometheus/exporters/varnish.nix+3−2 nixos/modules/services/network-filesystems/ipfs.nix+30−18 nixos/modules/services/network-filesystems/samba.nix+1 nixos/modules/services/networking/amuled.nix+1−1 nixos/modules/services/networking/asterisk.nix+11−43 nixos/modules/services/networking/bird.nix+89−92 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/dhcpd.nix+5−3 nixos/modules/services/networking/envoy.nix+84 nixos/modules/services/networking/headscale.nix+1−1 nixos/modules/services/networking/https-dns-proxy.nix+128 nixos/modules/services/networking/iwd.nix+15−6 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/murmur.nix+1−1 nixos/modules/services/networking/nbd.nix+159 nixos/modules/services/networking/ncdns.nix+2−2 nixos/modules/services/networking/networkmanager.nix+57−53 nixos/modules/services/networking/nsd.nix+8−12 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/pleroma.nix+4−4 nixos/modules/services/networking/powerdns.nix+2−2 nixos/modules/services/networking/prosody.nix+1 nixos/modules/services/networking/shellhub-agent.nix+26−17 nixos/modules/services/networking/snowflake-proxy.nix+81 nixos/modules/services/networking/squid.nix+14−3 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/tetrd.nix+1−1 nixos/modules/services/networking/tox-node.nix+1−6 nixos/modules/services/networking/unbound.nix+1 nixos/modules/services/networking/vsftpd.nix+1 nixos/modules/services/networking/wg-quick.nix+8−1 nixos/modules/services/networking/zeronet.nix+1−1 nixos/modules/services/security/clamav.nix+4−5 nixos/modules/services/security/fprot.nix−82 nixos/modules/services/security/oauth2_proxy.nix+9−4 nixos/modules/services/security/opensnitch.nix+102−1 nixos/modules/services/security/sslmate-agent.nix+32 nixos/modules/services/security/step-ca.nix+11 nixos/modules/services/security/tor.nix+11−2 nixos/modules/services/security/vaultwarden/default.nix+2−2 nixos/modules/services/system/earlyoom.nix+133−97 nixos/modules/services/system/nscd.nix+17−8 nixos/modules/services/system/systembus-notify.nix+27 nixos/modules/services/ttys/kmscon.nix+24−5 nixos/modules/services/video/epgstation/default.nix+180−168 nixos/modules/services/video/epgstation/streaming.json+129−108 nixos/modules/services/video/unifi-video.nix+86−82 nixos/modules/services/wayland/cage.nix+2 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/jitsi-meet.nix+1−1 nixos/modules/services/web-apps/keycloak.nix+368−502 nixos/modules/services/web-apps/keycloak.xml+61−81 nixos/modules/services/web-apps/mastodon.nix+3−1 nixos/modules/services/web-apps/miniflux.nix+19−27 nixos/modules/services/web-apps/netbox.nix+265 nixos/modules/services/web-apps/nextcloud.nix+76−10 nixos/modules/services/web-apps/nifi.nix+318 nixos/modules/services/web-apps/peertube.nix+11−1 nixos/modules/services/web-apps/plantuml-server.nix+18−3 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+29−12 nixos/modules/services/web-servers/nginx/vhost-options.nix+12−3 nixos/modules/services/web-servers/pomerium.nix+7−3 nixos/modules/services/web-servers/tomcat.nix+4−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+43−69 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+9−37 nixos/modules/services/x11/desktop-managers/none.nix+44−5 nixos/modules/services/x11/desktop-managers/pantheon.nix+4−5 nixos/modules/services/x11/desktop-managers/pantheon.xml+3−3 nixos/modules/services/x11/desktop-managers/plasma5.nix+2−2 nixos/modules/services/x11/desktop-managers/xfce.nix+8−1 nixos/modules/services/x11/display-managers/default.nix+1 nixos/modules/services/x11/display-managers/gdm.nix+1−1 nixos/modules/services/x11/display-managers/lightdm.nix+2 nixos/modules/services/x11/window-managers/qtile.nix+11−4 nixos/modules/services/x11/xserver.nix+10−6 nixos/modules/system/activation/switch-to-configuration.pl+460−301 nixos/modules/system/activation/top-level.nix+12−5 nixos/modules/system/boot/kernel.nix+2−2 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-builder.py+16−5 nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix+1−1 nixos/modules/system/boot/luksroot.nix+74−7 nixos/modules/system/boot/modprobe.nix+2−20 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+34−18 nixos/modules/system/boot/stage-2-init.sh+66−98 nixos/modules/system/boot/stage-2.nix+2−39 nixos/modules/system/boot/systemd.nix+66−672 nixos/modules/system/boot/systemd/coredump.nix+57 nixos/modules/system/boot/systemd/initrd-secrets.nix+36 nixos/modules/system/boot/systemd/initrd.nix+502 nixos/modules/system/boot/systemd/journald.nix+131 nixos/modules/system/boot/systemd/logind.nix+114 nixos/modules/system/boot/systemd-nspawn.nix → nixos/modules/system/boot/systemd/nspawn.nix+7−9 nixos/modules/system/boot/systemd/shutdown.nix+58 nixos/modules/system/boot/systemd/tmpfiles.nix+120 nixos/modules/system/boot/systemd/user.nix+153 nixos/modules/system/boot/timesyncd.nix+17−5 nixos/modules/tasks/auto-upgrade.nix+104−20 nixos/modules/tasks/bcache.nix+16−6 nixos/modules/tasks/filesystems.nix+30−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-scripted.nix+2 nixos/modules/tasks/network-interfaces-systemd.nix+2 nixos/modules/tasks/network-interfaces.nix+36−13 nixos/modules/tasks/swraid.nix+35−9 nixos/modules/testing/test-instrumentation.nix+19−26 nixos/modules/virtualisation/amazon-image.nix+5 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+7−9 nixos/modules/virtualisation/openstack-config.nix+39−7 nixos/modules/virtualisation/openstack-metadata-fetcher.nix+5−4 nixos/modules/virtualisation/openstack-options.nix+71 nixos/modules/virtualisation/podman/default.nix+4−1 nixos/modules/virtualisation/proxmox-lxc.nix+64 nixos/modules/virtualisation/qemu-vm.nix+43−7 nixos/modules/virtualisation/vmware-host.nix+166 nixos/modules/virtualisation/waydroid.nix+4−2 nixos/release-combined.nix+4−2 nixos/release-small.nix+4−2 nixos/release.nix+2−2 nixos/tests/aesmd.nix+1−1 nixos/tests/agda.nix+1−1 nixos/tests/airsonic.nix+1−1 nixos/tests/all-terminfo.nix+31 nixos/tests/all-tests.nix+48−8 nixos/tests/amazon-init-shell.nix+1−1 nixos/tests/apfs.nix+1−1 nixos/tests/apparmor.nix+1−1 nixos/tests/atd.nix+1−1 nixos/tests/atop.nix+6−14 nixos/tests/avahi.nix+1−1 nixos/tests/bcachefs.nix+6−7 nixos/tests/beanstalkd.nix+1−1 nixos/tests/bees.nix+1−1 nixos/tests/bind.nix+1−1 nixos/tests/bird.nix+28−104 nixos/tests/bitcoind.nix+1−1 nixos/tests/blockbook-frontend.nix+1−1 nixos/tests/boot-stage1.nix+1−1 nixos/tests/boot.nix−1 nixos/tests/botamusique.nix+4 nixos/tests/bpf.nix+1−1 nixos/tests/breitbandmessung.nix+1−1 nixos/tests/brscan5.nix+1−1 nixos/tests/buildkite-agents.nix+1−1 nixos/tests/caddy.nix+3−3 nixos/tests/cage.nix+1−1 nixos/tests/cagebreak.nix+1−1 nixos/tests/ceph-multi-node.nix+1−1 nixos/tests/cfssl.nix+1−1 nixos/tests/chromium.nix+20−18 nixos/tests/clickhouse.nix+1−1 nixos/tests/cloud-init.nix+1−1 nixos/tests/cntr.nix+17−5 nixos/tests/collectd.nix+7−2 nixos/tests/common/lxd/config.yaml+24 nixos/tests/containers-bridge.nix+1−1 nixos/tests/containers-custom-pkgs.nix+1−1 nixos/tests/containers-ephemeral.nix+4−4 nixos/tests/containers-extra_veth.nix+1−1 nixos/tests/containers-hosts.nix+1−1 nixos/tests/containers-imperative.nix+7−7 nixos/tests/containers-ip.nix+1−1 nixos/tests/containers-names.nix+1−1 nixos/tests/containers-nested.nix+1−1 nixos/tests/containers-portforward.nix+1−1 nixos/tests/containers-tmpfs.nix+6−6 nixos/tests/cri-o.nix+1−1 nixos/tests/custom-ca.nix+104−90 nixos/tests/disable-installer-tools.nix+1−1 nixos/tests/dnsdist.nix+1−1 nixos/tests/doas.nix+1−1 nixos/tests/docker-tools-cross.nix+2−2 nixos/tests/docker-tools.nix+1−1 nixos/tests/documize.nix+1−1 nixos/tests/domination.nix+1−1 nixos/tests/dovecot.nix+1−1 nixos/tests/earlyoom.nix+16 nixos/tests/ecryptfs.nix+1−1 nixos/tests/emacs-daemon.nix+2−2 nixos/tests/empty-file nixos/tests/enlightenment.nix+1−1 nixos/tests/env.nix+1−1 nixos/tests/envoy.nix+33 nixos/tests/etebase-server.nix+1−1 nixos/tests/etesync-dav.nix+1−1 nixos/tests/fancontrol.nix+1−1 nixos/tests/fcitx/default.nix+1−1 nixos/tests/fenics.nix+1−1 nixos/tests/firefox.nix+1−1 nixos/tests/fish.nix+1−1 nixos/tests/fluentd.nix+1−1 nixos/tests/fontconfig-default-fonts.nix+1−1 nixos/tests/fsck.nix+1−1 nixos/tests/ft2-clone.nix+1−1 nixos/tests/geth.nix+1−1 nixos/tests/gitlab.nix+300−21 nixos/tests/gitolite-fcgiwrap.nix+1−1 nixos/tests/gnome-xorg.nix+2−1 nixos/tests/gnome.nix+2−1 nixos/tests/gotify-server.nix+1−1 nixos/tests/graylog.nix+1−1 nixos/tests/grocy.nix+1−1 nixos/tests/grub.nix+1−1 nixos/tests/hadoop/default.nix+7 nixos/tests/hadoop/hadoop.nix+150−123 nixos/tests/hadoop/hdfs.nix+43−18 nixos/tests/hadoop/yarn.nix+21−13 nixos/tests/hardened.nix+1−1 nixos/tests/haste-server.nix+23 nixos/tests/hbase.nix+30 nixos/tests/herbstluftwm.nix+1−1 nixos/tests/hibernate.nix+11 nixos/tests/hitch/default.nix+1−1 nixos/tests/hocker-fetchdocker/default.nix+1−1 nixos/tests/hockeypuck.nix+1−1 nixos/tests/home-assistant.nix−43 nixos/tests/hostname.nix+1−1 nixos/tests/hound.nix+1−1 nixos/tests/hydra/default.nix+1−1 nixos/tests/i3wm.nix+1−1 nixos/tests/ihatemoney/default.nix+1−1 nixos/tests/incron.nix+1−1 nixos/tests/initrd-network.nix+1−1 nixos/tests/initrd-secrets.nix+1−1 nixos/tests/input-remapper.nix+52 nixos/tests/installed-tests/appstream-qt.nix+9 nixos/tests/installed-tests/appstream.nix+9 nixos/tests/installed-tests/default.nix+3−1 nixos/tests/installed-tests/gjs.nix+6 nixos/tests/installer-systemd-stage-1.nix+33 nixos/tests/installer.nix+16−2 nixos/tests/invidious.nix+1−1 nixos/tests/ipfs.nix+5 nixos/tests/isso.nix+1−1 nixos/tests/jellyfin.nix+1−1 nixos/tests/jenkins.nix+2 nixos/tests/jibri.nix+1−1 nixos/tests/jitsi-meet.nix+2−2 nixos/tests/k3s-single-node-docker.nix+1−1 nixos/tests/k3s-single-node.nix+1−1 nixos/tests/kbd-setfont-decompress.nix+1−1 nixos/tests/kbd-update-search-paths-patch.nix+1−1 nixos/tests/keepassxc.nix+43−9 nixos/tests/kerberos/heimdal.nix+1−1 nixos/tests/kerberos/mit.nix+1−1 nixos/tests/kernel-generic.nix+1−1 nixos/tests/kernel-latest-ath-user-regd.nix+1−1 nixos/tests/kexec.nix+44−16 nixos/tests/keycloak.nix+33−13 nixos/tests/krb5/deprecated-config.nix+1−1 nixos/tests/krb5/example-config.nix+1−1 nixos/tests/ksm.nix+1−1 nixos/tests/kubernetes/base.nix+2−2 nixos/tests/kubernetes/rbac.nix+2−2 nixos/tests/libinput.nix+1−1 nixos/tests/libresprite.nix+1−1 nixos/tests/lightdm.nix+1−1 nixos/tests/limesurvey.nix+1−1 nixos/tests/litestream.nix+1−1 nixos/tests/login.nix+1−1 nixos/tests/logrotate.nix+152 nixos/tests/loki.nix+1−1 nixos/tests/lorri/default.nix+1−1 nixos/tests/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+16−49 nixos/tests/lxd-image.nix−89 nixos/tests/lxd-nftables.nix+1−1 nixos/tests/lxd.nix+41−64 nixos/tests/maestral.nix+72 nixos/tests/magnetico.nix+1−1 nixos/tests/mailcatcher.nix+8−3 nixos/tests/mailhog.nix+1−1 nixos/tests/matomo.nix+1−1 nixos/tests/matrix-appservice-irc.nix+28−21 nixos/tests/matrix-synapse.nix+46−18 nixos/tests/matrix/mjolnir.nix+24−19 nixos/tests/matrix/pantalaimon.nix+27−4 nixos/tests/mediawiki.nix+1−1 nixos/tests/meilisearch.nix+1−1 nixos/tests/memcached.nix+1−1 nixos/tests/minidlna.nix+4−2 nixos/tests/miniflux.nix+18−6 nixos/tests/misc.nix+4−4 nixos/tests/mod_perl.nix+1−1 nixos/tests/mongodb.nix+4 nixos/tests/moodle.nix+1−1 nixos/tests/moonraker.nix+45 nixos/tests/mtp.nix+109 nixos/tests/musescore.nix+1−1 nixos/tests/mysql/mysql-autobackup.nix+1−1 nixos/tests/nagios.nix+1−1 nixos/tests/nano.nix−44 nixos/tests/nar-serve.nix+1−1 nixos/tests/nats.nix+11−13 nixos/tests/navidrome.nix+1−1 nixos/tests/nbd.nix+103 nixos/tests/ncdns.nix+6−9 nixos/tests/networking.nix+56−11 nixos/tests/nextcloud/default.nix+1−1 nixos/tests/nextcloud/with-mysql-and-memcached.nix+1−22 nixos/tests/nginx-modsecurity.nix+39 nixos/tests/nginx-pubhtml.nix+1−1 nixos/tests/nginx-sandbox.nix+1−1 nixos/tests/nginx-sso.nix+1−1 nixos/tests/nginx-variants.nix+1−1 nixos/tests/nix-ld.nix+20 nixos/tests/nix-serve.nix+1−1 nixos/tests/nixops/default.nix+2−2 nixos/tests/nixos-generate-config.nix+1−1 nixos/tests/noto-fonts.nix+1−1 nixos/tests/novacomd.nix+1−1 nixos/tests/oh-my-zsh.nix+1−1 nixos/tests/openldap.nix+3−3 nixos/tests/openssh.nix+12−6 nixos/tests/opentabletdriver.nix+1−1 nixos/tests/os-prober.nix+1−1 nixos/tests/osrm-backend.nix+1−1 nixos/tests/overlayfs.nix+1−1 nixos/tests/pacemaker.nix+110 nixos/tests/packagekit.nix+1−1 nixos/tests/pam/pam-oath-login.nix+2−2 nixos/tests/pam/pam-u2f.nix+1−1 nixos/tests/pam/pam-ussh.nix+70 nixos/tests/pantheon.nix+1−1 nixos/tests/paperless-ng.nix → nixos/tests/paperless.nix+11−12 nixos/tests/pdns-recursor.nix+4−1 nixos/tests/pgadmin4-standalone.nix+43 nixos/tests/pgadmin4.nix+132 nixos/tests/php/fpm.nix+1−1 nixos/tests/php/httpd.nix+1−1 nixos/tests/php/pcre.nix+1−1 nixos/tests/pict-rs.nix+1−1 nixos/tests/plasma5-systemd-start.nix+1−1 nixos/tests/plasma5.nix+1−1 nixos/tests/plausible.nix+1−1 nixos/tests/pleroma.nix+2−18 nixos/tests/plikd.nix+1−1 nixos/tests/plotinus.nix+1−1 nixos/tests/podman/default.nix+1−1 nixos/tests/podman/tls-ghostunnel.nix+1−1 nixos/tests/postfix-raise-smtpd-tls-security-level.nix+1−1 nixos/tests/postfix.nix+1−1 nixos/tests/postgresql-wal-receiver.nix+1−1 nixos/tests/postgresql.nix+1−1 nixos/tests/power-profiles-daemon.nix+1−1 nixos/tests/powerdns.nix+1 nixos/tests/predictable-interface-names.nix+1−1 nixos/tests/privacyidea.nix+1−1 nixos/tests/privoxy.nix+1−1 nixos/tests/prometheus-exporters.nix+30 nixos/tests/pt2-clone.nix+1−1 nixos/tests/pulseaudio.nix+1−1 nixos/tests/qboot.nix+1−1 nixos/tests/rabbitmq.nix+1−1 nixos/tests/radicale.nix+1−1 nixos/tests/rasdaemon.nix+1−1 nixos/tests/redmine.nix+1−1 nixos/tests/restart-by-activation-script.nix+1−1 nixos/tests/retroarch.nix+1−1 nixos/tests/riak.nix+1−1 nixos/tests/rspamd.nix+5−5 nixos/tests/rstudio-server.nix−6 nixos/tests/rsyslogd.nix+2−2 nixos/tests/sabnzbd.nix+1−1 nixos/tests/sddm.nix+2−2 nixos/tests/sfxr-qt.nix+32 nixos/tests/shattered-pixel-dungeon.nix+1−1 nixos/tests/shiori.nix+1−2 nixos/tests/signal-desktop.nix+1−1 nixos/tests/simple.nix+1−1 nixos/tests/snapcast.nix+1 nixos/tests/snapper.nix+1−1 nixos/tests/soapui.nix+1−1 nixos/tests/solr.nix+1−1 nixos/tests/sourcehut.nix+1−1 nixos/tests/sssd-ldap.nix+1−1 nixos/tests/sssd.nix+1−1 nixos/tests/starship.nix+1−1 nixos/tests/step-ca.nix+3−2 nixos/tests/sway.nix+1−1 nixos/tests/switch-test.nix+339−36 nixos/tests/sympa.nix+1−1 nixos/tests/syncthing-init.nix+1−1 nixos/tests/syncthing-relay.nix+1−1 nixos/tests/systemd-analyze.nix+1−1 nixos/tests/systemd-binfmt.nix+3−3 nixos/tests/systemd-boot.nix+9−9 nixos/tests/systemd-confinement.nix+27−4 nixos/tests/systemd-cryptenroll.nix+1−1 nixos/tests/systemd-escaping.nix+45 nixos/tests/systemd-initrd-btrfs-raid.nix+45 nixos/tests/systemd-initrd-luks-keyfile.nix+53 nixos/tests/systemd-initrd-luks-password.nix+48 nixos/tests/systemd-initrd-simple.nix+44 nixos/tests/systemd-initrd-swraid.nix+50 nixos/tests/systemd-journal.nix+1−1 nixos/tests/systemd-machinectl.nix+85 nixos/tests/systemd-unit-path.nix → nixos/tests/systemd-misc.nix+17−2 nixos/tests/systemd-networkd.nix+10 nixos/tests/systemd-shutdown.nix+26 nixos/tests/systemd.nix+5−1 nixos/tests/taskserver.nix+1 nixos/tests/telegraf.nix+1−1 nixos/tests/terminal-emulators.nix+207 nixos/tests/tinywl.nix+2−1 nixos/tests/tomcat.nix+21 nixos/tests/tor.nix+10−15 nixos/tests/transmission.nix+1−1 nixos/tests/tsm-client-gui.nix+1−1 nixos/tests/tuptime.nix+1−1 nixos/tests/turbovnc-headless-server.nix+1−1 nixos/tests/tuxguitar.nix+1−1 nixos/tests/udisks2.nix+1−1 nixos/tests/usbguard.nix+1−1 nixos/tests/user-activation-scripts.nix+1−1 nixos/tests/uwsgi.nix+1−1 nixos/tests/v2ray.nix+1−1 nixos/tests/vault-postgresql.nix+1−1 nixos/tests/vault.nix+1−1 nixos/tests/vaultwarden.nix−1 nixos/tests/vector.nix+1−1 nixos/tests/vengi-tools.nix+1−1 nixos/tests/virtualbox.nix+1−1 nixos/tests/vsftpd.nix+42 nixos/tests/web-apps/mastodon.nix+170 nixos/tests/web-apps/netbox.nix+30 nixos/tests/web-apps/nifi.nix+30 nixos/tests/web-apps/peertube.nix+6−2 nixos/tests/web-servers/unit-php.nix+1−1 nixos/tests/wiki-js.nix+1−1 nixos/tests/wine.nix+11−4 nixos/tests/without-nix.nix+15−6 nixos/tests/wmderland.nix+1−1 nixos/tests/wpa_supplicant.nix+1−1 nixos/tests/xfce.nix+1−1 nixos/tests/xmonad-xdg-autostart.nix+35 nixos/tests/xmonad.nix+1−1 nixos/tests/xmpp/prosody-mysql.nix+124 nixos/tests/xmpp/prosody.nix+1 nixos/tests/xmpp/xmpp-sendmessage.nix+1−4 nixos/tests/xterm.nix+1−1 nixos/tests/yabar.nix+1−1 nixos/tests/zammad.nix+60 nixos/tests/zfs.nix+51−1 nixos/tests/zigbee2mqtt.nix+1−1 nixos/tests/zoneminder.nix+1−1 nixos/tests/zrepl.nix+66 pkgs/applications/accessibility/espeakup/default.nix+46 pkgs/applications/accessibility/squeekboard/default.nix+2−1 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/airwave/default.nix+2−2 pkgs/applications/audio/aj-snapshot/default.nix+2−3 pkgs/applications/audio/amberol/default.nix+75 pkgs/applications/audio/ams/default.nix+1−1 pkgs/applications/audio/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-studio2.nix+1−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/cantata/default.nix+2−2 pkgs/applications/audio/cardinal/default.nix+67 pkgs/applications/audio/carla/default.nix+2−2 pkgs/applications/audio/caudec/default.nix+2−2 pkgs/applications/audio/cider/default.nix+30 pkgs/applications/audio/clementine/default.nix+3−10 pkgs/applications/audio/cmt/default.nix+2−2 pkgs/applications/audio/cmus/default.nix+2−2 pkgs/applications/audio/cmusfm/default.nix+16−10 pkgs/applications/audio/csound/default.nix+4−4 pkgs/applications/audio/deadbeef/default.nix−1 pkgs/applications/audio/denemo/default.nix+2−2 pkgs/applications/audio/dragonfly-reverb/default.nix+2−2 pkgs/applications/audio/easyeffects/default.nix+2−2 pkgs/applications/audio/eteroj.lv2/default.nix−23 pkgs/applications/audio/faust/faust2.nix+2−2 pkgs/applications/audio/faust/faustlive.nix+9−12 pkgs/applications/audio/faustPhysicalModeling/default.nix+2−2 pkgs/applications/audio/flac/default.nix+2−10 pkgs/applications/audio/fluidsynth/default.nix+2−2 pkgs/applications/audio/foo-yc20/default.nix−29 pkgs/applications/audio/friture/default.nix+3−12 pkgs/applications/audio/ft2-clone/default.nix+2−2 pkgs/applications/audio/furnace/default.nix+100 pkgs/applications/audio/geonkick/default.nix+2−2 pkgs/applications/audio/gnome-podcasts/default.nix+11 pkgs/applications/audio/goattracker/default.nix+2−3 pkgs/applications/audio/gpodder/default.nix+9−4 pkgs/applications/audio/gpodder/disable-autoupdate.patch+8−29 pkgs/applications/audio/greg/default.nix+3−3 pkgs/applications/audio/gspeech/default.nix+2−2 pkgs/applications/audio/gtkpod/default.nix+5−4 pkgs/applications/audio/guitarix/default.nix+2 pkgs/applications/audio/helio-workstation/default.nix+2−2 pkgs/applications/audio/helvum/default.nix+1−2 pkgs/applications/audio/hivelytracker/default.nix+1−1 pkgs/applications/audio/hqplayer-desktop/default.nix+1 pkgs/applications/audio/industrializer/default.nix+1−3 pkgs/applications/audio/jacktrip/default.nix+61 pkgs/applications/audio/jamesdsp/default.nix+43−12 pkgs/applications/audio/jamin/default.nix+1−1 pkgs/applications/audio/jamulus/default.nix+2−2 pkgs/applications/audio/jellycli/default.nix+33 pkgs/applications/audio/jellycli/fix-test-dir.patch+13 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/lv2lint/default.nix+22 pkgs/applications/audio/lyrebird/default.nix+2−2 pkgs/applications/audio/magnetophonDSP/faustCompressors/default.nix+1−1 pkgs/applications/audio/mid2key/default.nix+7−4 pkgs/applications/audio/midas/generic.nix+4−5 pkgs/applications/audio/moc/default.nix+5−3 pkgs/applications/audio/mopidy/mopidy.nix+3−3 pkgs/applications/audio/mopidy/youtube.nix+6−5 pkgs/applications/audio/mopidy/ytmusic.nix+11−2 pkgs/applications/audio/musescore/darwin.nix−1 pkgs/applications/audio/musescore/default.nix−1 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/netease-cloud-music-gtk/default.nix−1 pkgs/applications/audio/new-session-manager/default.nix+3−3 pkgs/applications/audio/noise-repellent/default.nix+11−9 pkgs/applications/audio/ocenaudio/default.nix+3−3 pkgs/applications/audio/odin2/default.nix+79 pkgs/applications/audio/open-music-kontrollers/eteroj.nix+10 pkgs/applications/audio/open-music-kontrollers/generic.nix+37 pkgs/applications/audio/open-music-kontrollers/jit.nix+12 pkgs/applications/audio/open-music-kontrollers/mephisto.nix+17 pkgs/applications/audio/open-music-kontrollers/midi_matrix.nix+10 pkgs/applications/audio/open-music-kontrollers/moony.nix+13 pkgs/applications/audio/open-music-kontrollers/orbit.nix+12 pkgs/applications/audio/open-music-kontrollers/patchmatrix.nix+13 pkgs/applications/audio/open-music-kontrollers/router.nix+11 pkgs/applications/audio/open-music-kontrollers/sherlock.nix+12 pkgs/applications/audio/open-music-kontrollers/synthpod.nix+13 pkgs/applications/audio/open-music-kontrollers/vm.nix+10 pkgs/applications/audio/osdlyrics/default.nix+87 pkgs/applications/audio/parlatype/default.nix−66 pkgs/applications/audio/patchage/default.nix+33−11 pkgs/applications/audio/patchmatrix/default.nix−45 pkgs/applications/audio/pd-plugins/zexy/default.nix+2−1 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/plujain-ramp/default.nix+1−1 pkgs/applications/audio/praat/default.nix+2−2 pkgs/applications/audio/psst/default.nix+39 pkgs/applications/audio/pt2-clone/default.nix+2−2 pkgs/applications/audio/puddletag/default.nix+46−9 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/qmidiarp/default.nix+2−2 pkgs/applications/audio/qmmp/default.nix−1 pkgs/applications/audio/qpwgraph/default.nix+3−3 pkgs/applications/audio/r128gain/default.nix+2−8 pkgs/applications/audio/rhythmbox/default.nix+10 pkgs/applications/audio/roomeqwizard/default.nix+3−3 pkgs/applications/audio/rubyripper/default.nix+23−11 pkgs/applications/audio/sfizz/default.nix+6−1 pkgs/applications/audio/sfxr-qt/default.nix+24−2 pkgs/applications/audio/sfxr-qt/test-export-square-wave/default.nix+6 pkgs/applications/audio/sfxr-qt/test-export-square-wave/input.sfxj+29 pkgs/applications/audio/shortwave/default.nix+9−12 pkgs/applications/audio/sisco.lv2/default.nix+2−2 pkgs/applications/audio/snd/default.nix+2−2 pkgs/applications/audio/sonic-pi/default.nix+59−41 pkgs/applications/audio/sonixd/default.nix+27 pkgs/applications/audio/sony-headphones-client/default.nix+1−1 pkgs/applications/audio/sound-juicer/default.nix+10 pkgs/applications/audio/soundconverter/default.nix+85 pkgs/applications/audio/soundkonverter/default.nix+1−1 pkgs/applications/audio/soundscape-renderer/default.nix+13−11 pkgs/applications/audio/soundwireserver/default.nix+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/sptlrx/default.nix+3−3 pkgs/applications/audio/squeezelite/default.nix+48−30 pkgs/applications/audio/strawberry/default.nix+5−2 pkgs/applications/audio/sunvox/default.nix+3−3 pkgs/applications/audio/synaesthesia/default.nix+33 pkgs/applications/audio/tauon/default.nix+2−2 pkgs/applications/audio/termusic/default.nix+28 pkgs/applications/audio/timemachine/default.nix+2−2 pkgs/applications/audio/tonelib-gfx/default.nix+3−3 pkgs/applications/audio/tonelib-jam/default.nix+3−3 pkgs/applications/audio/tonelib-metal/default.nix+60 pkgs/applications/audio/vgmstream/default.nix+21−12 pkgs/applications/audio/vgmstream/update.sh+77 pkgs/applications/audio/viper4linux-gui/default.nix+82 pkgs/applications/audio/viper4linux/default.nix+61 pkgs/applications/audio/vmpk/default.nix+2−2 pkgs/applications/audio/vocal/default.nix+7−1 pkgs/applications/audio/whipper/default.nix+8 pkgs/applications/audio/x42-plugins/default.nix+2−2 pkgs/applications/audio/xsynth-dssi/default.nix+2−1 pkgs/applications/audio/yoshimi/default.nix+49−18 pkgs/applications/audio/zrythm/default.nix+11−7 pkgs/applications/backup/pika-backup/default.nix+9 pkgs/applications/blockchains/alfis/default.nix+3−3 pkgs/applications/blockchains/bisq-desktop/default.nix+4−5 pkgs/applications/blockchains/bitcoin-unlimited/default.nix+1−1 pkgs/applications/blockchains/bitcoin/default.nix+2−2 pkgs/applications/blockchains/btcpayserver/default.nix+2−2 pkgs/applications/blockchains/btcpayserver/deps.nix+34−39 pkgs/applications/blockchains/cgminer/default.nix+2−2 pkgs/applications/blockchains/chia-plotter/default.nix+13−6 pkgs/applications/blockchains/chia-plotter/dont_fetch_dependencies.patch+24−11 pkgs/applications/blockchains/chia/default.nix+6−2 pkgs/applications/blockchains/clightning/default.nix+15−5 pkgs/applications/blockchains/crypto-org-wallet/default.nix+1−1 pkgs/applications/blockchains/dogecoin/default.nix+1−1 pkgs/applications/blockchains/electrs/default.nix+3−3 pkgs/applications/blockchains/elements/default.nix+2−2 pkgs/applications/blockchains/erigon.nix+3−3 pkgs/applications/blockchains/exodus/default.nix+2−2 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/lightwalletd/default.nix+2−2 pkgs/applications/blockchains/litecoin/default.nix+1−2 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+3−3 pkgs/applications/blockchains/mycrypto/default.nix+1−1 pkgs/applications/blockchains/namecoin/default.nix+6−7 pkgs/applications/blockchains/nbxplorer/default.nix+2−2 pkgs/applications/blockchains/nbxplorer/deps.nix+15 pkgs/applications/blockchains/nbxplorer/util/update-common.sh+1−1 pkgs/applications/blockchains/nearcore/default.nix+42 pkgs/applications/blockchains/openethereum/default.nix+3−3 pkgs/applications/blockchains/oxen/default.nix+4−3 pkgs/applications/blockchains/pivx/default.nix+1−1 pkgs/applications/blockchains/polkadot/default.nix+21−25 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/trezor-suite/default.nix+3−3 pkgs/applications/blockchains/wasabibackend/default.nix+1−1 pkgs/applications/blockchains/wasabiwallet/default.nix+1−1 pkgs/applications/blockchains/zcash/default.nix+6−6 pkgs/applications/display-managers/lightdm-enso-os-greeter/default.nix+6−5 pkgs/applications/editors/android-studio/common.nix+11−9 pkgs/applications/editors/android-studio/default.nix+8−7 pkgs/applications/editors/apostrophe/default.nix+2−2 pkgs/applications/editors/bless/default.nix+12−6 pkgs/applications/editors/bluej/default.nix+37−10 pkgs/applications/editors/cudatext/default.nix+2−2 pkgs/applications/editors/cudatext/deps.json+16−16 pkgs/applications/editors/cudatext/update.sh+1−1 pkgs/applications/editors/eclipse/build-eclipse.nix+3−2 pkgs/applications/editors/eclipse/default.nix+13−13 pkgs/applications/editors/eclipse/plugins.nix+2−2 pkgs/applications/editors/ed/default.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/ebuild-mode/default.nix+2−2 pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix+308−109 pkgs/applications/editors/emacs/elisp-packages/elpa-packages.nix+2−1 pkgs/applications/editors/emacs/elisp-packages/emacs2nix.nix+4−3 pkgs/applications/editors/emacs/elisp-packages/emacspeak/default.nix+2−1 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+8 pkgs/applications/editors/emacs/elisp-packages/nongnu-generated.nix+72−58 pkgs/applications/editors/emacs/elisp-packages/nongnu-packages.nix+2−1 pkgs/applications/editors/emacs/elisp-packages/plz/default.nix+12−4 pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json+4430−3091 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+15−6 pkgs/applications/editors/ghostwriter/default.nix+2−2 pkgs/applications/editors/gnome-builder/default.nix+8−18 pkgs/applications/editors/helix/default.nix+13−10 pkgs/applications/editors/hexdino/default.nix+6−6 pkgs/applications/editors/jetbrains/darwin.nix+36 pkgs/applications/editors/jetbrains/default.nix+121−113 pkgs/applications/editors/jetbrains/common.nix → pkgs/applications/editors/jetbrains/linux.nix+18−23 pkgs/applications/editors/jetbrains/update.pl−101 pkgs/applications/editors/jetbrains/update.py+100 pkgs/applications/editors/jetbrains/versions.json+296 pkgs/applications/editors/jucipp/default.nix+1−2 pkgs/applications/editors/jupyter-kernels/octave/default.nix+2−1 pkgs/applications/editors/jupyter-kernels/octave/kernel.nix+4−6 pkgs/applications/editors/jupyter-kernels/wolfram/default.nix+22 pkgs/applications/editors/jupyter-kernels/wolfram/kernel.nix+32 pkgs/applications/editors/kakoune/plugins/default.nix+1−1 pkgs/applications/editors/kakoune/plugins/kakoune-plugin-names+20−19 pkgs/applications/editors/kakoune/plugins/update.py+2−2 pkgs/applications/editors/kdevelop5/kdev-php.nix+4−6 pkgs/applications/editors/kdevelop5/kdev-python.nix+4−6 pkgs/applications/editors/kodestudio/default.nix+2−2 pkgs/applications/editors/lapce/default.nix+99 pkgs/applications/editors/leo-editor/default.nix+5−7 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/micro/default.nix+3−1 pkgs/applications/editors/micro/test-with-expect.nix+30 pkgs/applications/editors/mle/default.nix+11−1 pkgs/applications/editors/music/tuxguitar/default.nix+3−3 pkgs/applications/editors/nano/default.nix+6−4 pkgs/applications/editors/nano/test-with-expect.nix+35 pkgs/applications/editors/neovim/default.nix+13−22 pkgs/applications/editors/neovim/neovide/default.nix+6−6 pkgs/applications/editors/neovim/neovim-remote.nix+2−3 pkgs/applications/editors/neovim/ruby_provider/Gemfile.lock+2−2 pkgs/applications/editors/neovim/ruby_provider/gemset.nix+5−5 pkgs/applications/editors/netbeans/default.nix+3−3 pkgs/applications/editors/oed/default.nix+9 pkgs/applications/editors/okteta/default.nix+4−2 pkgs/applications/editors/oni2/common.nix−1 pkgs/applications/editors/pinegrow/default.nix+80 pkgs/applications/editors/poke/default.nix+2−2 pkgs/applications/editors/quartus-prime/default.nix+1−1 pkgs/applications/editors/qxmledit/default.nix+1−1 pkgs/applications/editors/rednotebook/default.nix+2−2 pkgs/applications/editors/rstudio/default.nix+8−3 pkgs/applications/editors/setzer/default.nix+2−2 pkgs/applications/editors/sigil/default.nix+2−2 pkgs/applications/editors/sublime/2/default.nix+1−1 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/texworks/default.nix+2−2 pkgs/applications/editors/thonny/default.nix+1−1 pkgs/applications/editors/tiled/default.nix+2−2 pkgs/applications/editors/vim/common.nix+2−2 pkgs/applications/editors/vim/configurable.nix+7−34 pkgs/applications/editors/vim/macvim.nix+3−3 pkgs/applications/editors/vim/macvim.patch+32−34 pkgs/misc/vim-plugins/aliases.nix → pkgs/applications/editors/vim/plugins/aliases.nix pkgs/misc/vim-plugins/build-vim-plugin.nix → pkgs/applications/editors/vim/plugins/build-vim-plugin.nix+2 pkgs/misc/vim-plugins/default.nix → pkgs/applications/editors/vim/plugins/default.nix+8−3 pkgs/misc/vim-plugins/deprecated.json → pkgs/applications/editors/vim/plugins/deprecated.json pkgs/misc/vim-plugins/generated.nix → pkgs/applications/editors/vim/plugins/generated.nix+1777−1548 pkgs/misc/vim-plugins/markdown-preview-nvim/fix-node-paths.patch → pkgs/applications/editors/vim/plugins/markdown-preview-nvim/fix-node-paths.patch pkgs/misc/vim-plugins/markdown-preview-nvim/package.json → pkgs/applications/editors/vim/plugins/markdown-preview-nvim/package.json pkgs/misc/vim-plugins/overrides.nix → pkgs/applications/editors/vim/plugins/overrides.nix+38−9 pkgs/misc/vim-plugins/patches/fruzzy/get_version.patch → pkgs/applications/editors/vim/plugins/patches/fruzzy/get_version.patch pkgs/misc/vim-plugins/patches/lens-vim/remove_duplicate_g_lens_animate.patch → pkgs/applications/editors/vim/plugins/patches/lens-vim/remove_duplicate_g_lens_animate.patch pkgs/misc/vim-plugins/patches/sniprun/fix-paths.patch → pkgs/applications/editors/vim/plugins/patches/sniprun/fix-paths.patch pkgs/misc/vim-plugins/patches/vim-grammarous/set_default_languagetool.patch → pkgs/applications/editors/vim/plugins/patches/vim-grammarous/set_default_languagetool.patch pkgs/misc/vim-plugins/readme.md → pkgs/applications/editors/vim/plugins/readme.md pkgs/misc/vim-plugins/update-shell.nix → pkgs/applications/editors/vim/plugins/update-shell.nix+2−1 pkgs/misc/vim-plugins/update.py → pkgs/applications/editors/vim/plugins/update.py+53−18 pkgs/applications/editors/vim/plugins/vim-command-check-hook.sh+25 pkgs/misc/vim-plugins/vim-gen-doc-hook.sh → pkgs/applications/editors/vim/plugins/vim-gen-doc-hook.sh pkgs/applications/editors/vim/plugins/vim-plugin-names+1014 pkgs/misc/vim-plugins/vim-utils.nix → pkgs/applications/editors/vim/plugins/vim-utils.nix+93−58 pkgs/misc/vim-plugins/vim2nix/README.txt → pkgs/applications/editors/vim/plugins/vim2nix/README.txt pkgs/misc/vim-plugins/vim2nix/addon-info.json → pkgs/applications/editors/vim/plugins/vim2nix/addon-info.json pkgs/misc/vim-plugins/vim2nix/autoload/nix.vim → pkgs/applications/editors/vim/plugins/vim2nix/autoload/nix.vim pkgs/applications/editors/vis/default.nix+4−8 pkgs/misc/vscode-extensions/_maintainers/update-bin-srcs-lib.sh → pkgs/applications/editors/vscode/extensions/_maintainers/update-bin-srcs-lib.sh pkgs/misc/vscode-extensions/cpptools/default.nix → pkgs/applications/editors/vscode/extensions/cpptools/default.nix+16−4 pkgs/misc/vscode-extensions/cpptools/missing_elf_deps.sh → pkgs/applications/editors/vscode/extensions/cpptools/missing_elf_deps.sh pkgs/misc/vscode-extensions/cpptools/package-activation-events.json → pkgs/applications/editors/vscode/extensions/cpptools/package-activation-events.json pkgs/misc/vscode-extensions/cpptools/update_helper.sh → pkgs/applications/editors/vscode/extensions/cpptools/update_helper.sh pkgs/misc/vscode-extensions/default.nix → pkgs/applications/editors/vscode/extensions/default.nix+174−39 pkgs/misc/vscode-extensions/language-packs.nix → pkgs/applications/editors/vscode/extensions/language-packs.nix pkgs/misc/vscode-extensions/mktplcExtRefToFetchArgs.nix → pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix pkgs/misc/vscode-extensions/ms-dotnettools-csharp/default.nix → pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/default.nix+1−1 pkgs/misc/vscode-extensions/ms-dotnettools-csharp/rt-deps-bin-srcs.json → pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/rt-deps-bin-srcs.json pkgs/misc/vscode-extensions/ms-dotnettools-csharp/update-bin-srcs → pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/update-bin-srcs pkgs/misc/vscode-extensions/ms-toolsai-jupyter/default.nix → pkgs/applications/editors/vscode/extensions/ms-toolsai-jupyter/default.nix pkgs/misc/vscode-extensions/ms-vsliveshare-vsliveshare/default.nix → pkgs/applications/editors/vscode/extensions/ms-vsliveshare-vsliveshare/default.nix−1 pkgs/misc/vscode-extensions/ms-vsliveshare-vsliveshare/noop-syslog.c → pkgs/applications/editors/vscode/extensions/ms-vsliveshare-vsliveshare/noop-syslog.c pkgs/misc/vscode-extensions/python/default.nix → pkgs/applications/editors/vscode/extensions/python/default.nix+2−2 pkgs/misc/vscode-extensions/python/extract-nuget.nix → pkgs/applications/editors/vscode/extensions/python/extract-nuget.nix pkgs/misc/vscode-extensions/remote-ssh/default.nix → pkgs/applications/editors/vscode/extensions/remote-ssh/default.nix+2−2 pkgs/misc/vscode-extensions/rescript/default.nix → pkgs/applications/editors/vscode/extensions/rescript/default.nix pkgs/misc/vscode-extensions/rescript/rescript-editor-analysis.nix → pkgs/applications/editors/vscode/extensions/rescript/rescript-editor-analysis.nix pkgs/applications/editors/vscode/extensions/rust-analyzer/build-deps/package.json+19 pkgs/misc/vscode-extensions/rust-analyzer/default.nix → pkgs/applications/editors/vscode/extensions/rust-analyzer/default.nix+3−3 pkgs/applications/editors/vscode/extensions/rust-analyzer/update.sh+49 pkgs/misc/vscode-extensions/terraform/default.nix → pkgs/applications/editors/vscode/extensions/terraform/default.nix pkgs/misc/vscode-extensions/terraform/fix-terraform-ls.patch → pkgs/applications/editors/vscode/extensions/terraform/fix-terraform-ls.patch pkgs/misc/vscode-extensions/updateSettings.nix → pkgs/applications/editors/vscode/extensions/updateSettings.nix pkgs/misc/vscode-extensions/updateSettingsTest.nix → pkgs/applications/editors/vscode/extensions/updateSettingsTest.nix pkgs/misc/vscode-extensions/update_installed_exts.sh → pkgs/applications/editors/vscode/extensions/update_installed_exts.sh+1−1 pkgs/misc/vscode-extensions/vscode-lldb/build-deps/package.json → pkgs/applications/editors/vscode/extensions/vscode-lldb/build-deps/package.json pkgs/misc/vscode-extensions/vscode-lldb/cmake-build-extension-only.patch → pkgs/applications/editors/vscode/extensions/vscode-lldb/cmake-build-extension-only.patch pkgs/misc/vscode-extensions/vscode-lldb/default.nix → pkgs/applications/editors/vscode/extensions/vscode-lldb/default.nix+1−1 pkgs/misc/vscode-extensions/vscode-lldb/lldb.nix → pkgs/applications/editors/vscode/extensions/vscode-lldb/lldb.nix pkgs/misc/vscode-extensions/vscode-lldb/reset-cargo-config.patch → pkgs/applications/editors/vscode/extensions/vscode-lldb/reset-cargo-config.patch pkgs/misc/vscode-extensions/vscode-lldb/update.sh → pkgs/applications/editors/vscode/extensions/vscode-lldb/update.sh+5−3 pkgs/misc/vscode-extensions/vscode-utils.nix → pkgs/applications/editors/vscode/extensions/vscode-utils.nix pkgs/misc/vscode-extensions/vscodeEnv.nix → pkgs/applications/editors/vscode/extensions/vscodeEnv.nix pkgs/misc/vscode-extensions/vscodeEnvTest.nix → pkgs/applications/editors/vscode/extensions/vscodeEnvTest.nix pkgs/misc/vscode-extensions/vscodeExts2nix.nix → pkgs/applications/editors/vscode/extensions/vscodeExts2nix.nix pkgs/misc/vscode-extensions/vscodeWithConfiguration.nix → pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix pkgs/misc/vscode-extensions/wakatime/default.nix → pkgs/applications/editors/vscode/extensions/wakatime/default.nix+2−2 pkgs/applications/editors/vscode/generic.nix+27−25 pkgs/applications/editors/vscode/update-shell.nix+18 pkgs/applications/editors/vscode/update-vscode.sh+2−2 pkgs/applications/editors/vscode/update-vscodium.sh+18−14 pkgs/applications/editors/vscode/vscode.nix+6−6 pkgs/applications/editors/vscode/vscodium.nix+10−13 pkgs/applications/editors/wxhexeditor/default.nix+2−1 pkgs/applications/editors/xedit/default.nix+2−2 pkgs/applications/editors/xxe-pe/default.nix+1−1 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/ccemux/default.nix+1−1 pkgs/applications/emulators/cdemu/vhba.nix+1−1 pkgs/applications/emulators/collapseos-cvm/default.nix+30 pkgs/applications/emulators/commanderx16/emulator.nix+7−5 pkgs/applications/emulators/commanderx16/rom.nix+12−6 pkgs/applications/emulators/dolphin-emu/master.nix+7−7 pkgs/applications/emulators/dolphin-emu/primehack.nix+2−2 pkgs/applications/emulators/dosbox-staging/default.nix+1−1 pkgs/applications/emulators/dosbox/default.nix+1−1 pkgs/applications/emulators/epsxe/default.nix−52 pkgs/applications/emulators/fakenes/build.patch−84 pkgs/applications/emulators/fakenes/default.nix−34 pkgs/applications/emulators/fceux/default.nix+2−2 pkgs/applications/emulators/flycast/default.nix+52 pkgs/applications/emulators/goldberg-emu/default.nix+52 pkgs/applications/emulators/goldberg-emu/dont-install-unsupported.patch+34 pkgs/applications/emulators/mame/0001-Revert-Added-PDF-documentation-to-dist.mak.patch+37 pkgs/applications/emulators/mame/default.nix+65−15 pkgs/applications/emulators/mednafen/default.nix+12−6 pkgs/applications/emulators/mednaffe/default.nix+7−3 pkgs/applications/emulators/melonDS/default.nix+2−2 pkgs/applications/emulators/mgba/default.nix+2−2 pkgs/applications/emulators/proton-caller/default.nix+4−3 pkgs/applications/emulators/punes/default.nix+2−12 pkgs/applications/emulators/qmc2/default.nix−41 pkgs/applications/emulators/reicast/default.nix−52 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/rpcs3/default.nix+4−4 pkgs/applications/emulators/ryujinx/appdir.patch+23 pkgs/applications/emulators/ryujinx/default.nix+46−28 pkgs/applications/emulators/ryujinx/deps.nix+11−11 pkgs/applications/emulators/ryujinx/log.patch−21 pkgs/applications/emulators/ryujinx/updater.sh+71−25 pkgs/applications/emulators/snes9x-gtk/default.nix−36 pkgs/applications/emulators/snes9x/default.nix+130 pkgs/applications/emulators/tinyemu/default.nix+6−1 pkgs/applications/emulators/vice/default.nix+108−12 pkgs/applications/emulators/wine/base.nix+4−4 pkgs/applications/emulators/wine/packages.nix+3−3 pkgs/applications/emulators/wine/sources.nix+3−3 pkgs/applications/emulators/wine/vkd3d.nix+5−3 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/emulators/zsnes/default.nix+1−1 pkgs/applications/finance/cryptowatch/default.nix+57 pkgs/applications/finance/irpf/default.nix+73 pkgs/applications/gis/grass/default.nix+11−37 pkgs/applications/gis/qgis/unwrapped-ltr.nix+11−6 pkgs/applications/gis/qgis/unwrapped.nix+3−3 pkgs/applications/graphics/ImageMagick/6.x.nix+1−1 pkgs/applications/graphics/ImageMagick/7.0.nix+56−22 pkgs/applications/graphics/antimony/default.nix+3−7 pkgs/applications/graphics/apitrace/default.nix+6 pkgs/applications/graphics/apitrace/glibc-2.34-compat.patch+13 pkgs/applications/graphics/avocode/default.nix+3−3 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+15−2 pkgs/applications/graphics/drawio/default.nix+2−2 pkgs/applications/graphics/evilpixie/default.nix+2−2 pkgs/applications/graphics/exrtools/default.nix+1−1 pkgs/applications/graphics/fiji/default.nix+4−9 pkgs/applications/graphics/foxotron/default.nix+3−3 pkgs/applications/graphics/geeqie/default.nix+4−4 pkgs/applications/graphics/gimp/default.nix+1 pkgs/applications/graphics/gimp/plugins/default.nix+40−1 pkgs/applications/graphics/gimp/wrapper.nix+2 pkgs/applications/graphics/glimpse/default.nix+1 pkgs/applications/graphics/glimpse/wrapper.nix+2 pkgs/applications/graphics/gnome-obfuscate/default.nix+70 pkgs/applications/graphics/gnome-photos/default.nix+2−2 pkgs/applications/graphics/gpicview/default.nix−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/hdrmerge/default.nix+76 pkgs/applications/graphics/hugin/default.nix+2−11 pkgs/applications/graphics/hydrus/default.nix+6−3 pkgs/applications/graphics/icon-library/default.nix+18−12 pkgs/applications/graphics/imagej/default.nix+1−1 pkgs/applications/graphics/imgbrd-grabber/default.nix+1−1 pkgs/applications/graphics/inkscape/default.nix+9 pkgs/applications/graphics/inkscape/extensions.nix+2−2 pkgs/applications/graphics/ipe/default.nix+4−6 pkgs/applications/graphics/jpegrescan/default.nix+5−1 pkgs/applications/graphics/lightburn/default.nix+2−2 pkgs/applications/graphics/mandelbulber/default.nix+3−3 pkgs/applications/graphics/menyoki/default.nix+3−3 pkgs/applications/graphics/meshlab/default.nix+2−2 pkgs/applications/graphics/mtpaint/default.nix+3−5 pkgs/applications/graphics/mypaint/default.nix+10 pkgs/applications/graphics/nomacs/default.nix−1 pkgs/applications/graphics/nsxiv/default.nix+61 pkgs/applications/graphics/ocrfeeder/default.nix+5−8 pkgs/applications/graphics/openboard/default.nix+11−3 pkgs/applications/graphics/openscad/default.nix+4 pkgs/applications/graphics/ovito/default.nix+2−2 pkgs/applications/graphics/paraview/default.nix+2−2 pkgs/applications/graphics/photivo/default.nix−54 pkgs/applications/graphics/photivo/gcc6.patch−13 pkgs/applications/graphics/pinta/default.nix+4 pkgs/applications/graphics/pixeluvo/default.nix+1 pkgs/applications/graphics/pixinsight/default.nix+3−3 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+29−21 pkgs/applications/graphics/sane/config.nix+1−1 pkgs/applications/graphics/shotwell/default.nix+2−2 pkgs/applications/graphics/swingsane/default.nix+1−1 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-heaven/default.nix+107 pkgs/applications/graphics/unigine-sanctuary/default.nix+97 pkgs/applications/graphics/unigine-superposition/default.nix+146 pkgs/applications/graphics/unigine-tropics/default.nix+95 pkgs/applications/graphics/unigine-valley/default.nix+120−99 pkgs/applications/graphics/weylus/default.nix+53−38 pkgs/applications/graphics/write_stylus/default.nix+1−1 pkgs/applications/graphics/xfig/default.nix+13−2 pkgs/applications/graphics/xournal/default.nix+5−5 pkgs/applications/graphics/yed/default.nix+2−2 pkgs/applications/kde/default.nix+8−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/kmousetool.nix+35 pkgs/applications/kde/konsole.nix+3−1 pkgs/applications/kde/ktorrent.nix+22 pkgs/applications/kde/libktorrent.nix+22 pkgs/applications/kde/picmi.nix+1−11 pkgs/applications/kde/pimcommon.nix+2−2 pkgs/applications/kde/skanlite.nix+18 pkgs/applications/kde/skanpage.nix+32 pkgs/applications/kde/srcs.nix+937−921 pkgs/applications/kde/yakuake.nix+2 pkgs/applications/kde/zanshin.nix+18 pkgs/applications/logging/sosreport/default.nix+51 pkgs/applications/misc/1password-gui/beta.nix+132 pkgs/applications/misc/1password-gui/default.nix+18−5 pkgs/applications/misc/1password/default.nix+46−29 pkgs/applications/misc/ArchiSteamFarm/default.nix+1 pkgs/applications/misc/ArchiSteamFarm/deps-aarch64-linux.nix+18−18 pkgs/applications/misc/ArchiSteamFarm/deps-x86_64-linux.nix+18−18 pkgs/applications/misc/HentaiAtHome/default.nix+1−1 pkgs/applications/misc/OSCAR/default.nix+6−4 pkgs/applications/misc/ablog/default.nix+36 pkgs/applications/misc/abook/default.nix+1−1 pkgs/applications/misc/almanah/default.nix+13−1 pkgs/applications/misc/anytype/default.nix+2−2 pkgs/applications/misc/appeditor/default.nix+5 pkgs/applications/misc/archivy/default.nix+16−26 pkgs/applications/misc/audio/sox/default.nix+14−7 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/avizo/default.nix+2−9 pkgs/applications/misc/avizo/use-sysconfdir-instead-of-etc.patch−15 pkgs/applications/misc/avrdudess/default.nix+5−4 pkgs/applications/misc/azuredatastudio/default.nix+19−23 pkgs/applications/misc/barrier/default.nix+12−1 pkgs/applications/misc/batsignal/default.nix+2−2 pkgs/applications/misc/bemenu/default.nix+2−2 pkgs/applications/misc/bikeshed/default.nix+77 pkgs/applications/misc/blender/default.nix+16−15 pkgs/applications/misc/bottles/default.nix+11−11 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+9−7 pkgs/applications/misc/catclock/default.nix+1 pkgs/applications/misc/charm/default.nix+3−5 pkgs/applications/misc/cherrytree/default.nix+2−2 pkgs/applications/misc/cobang/0001-Poetry-core-and-pillow-9.patch+31 pkgs/applications/misc/cobang/default.nix+102 pkgs/applications/misc/copyq/default.nix+2−2 pkgs/applications/misc/corectrl/default.nix+2−2 pkgs/applications/misc/crow-translate/default.nix+4−4 pkgs/applications/misc/crow-translate/dont-fetch-external-libs.patch+1−1 pkgs/applications/misc/cubiomes-viewer/default.nix+4−4 pkgs/applications/misc/cura/stable.nix+1−1 pkgs/applications/misc/curaengine/default.nix+2−2 pkgs/applications/misc/dasel/default.nix+3−3 pkgs/applications/misc/dbeaver/default.nix+9−37 pkgs/applications/misc/ddgr/default.nix+2−2 pkgs/applications/misc/debian-goodies/default.nix+70 pkgs/applications/misc/dunst/default.nix+4−4 pkgs/applications/misc/electron-cash/default.nix+3−2 pkgs/applications/misc/electrum-grs/default.nix+4−22 pkgs/applications/misc/electrum/default.nix+4−35 pkgs/applications/misc/emojipick/default.nix+71 pkgs/applications/misc/eos-installer/default.nix+48 pkgs/applications/misc/evtest/default.nix+1−1 pkgs/applications/misc/faircamp/default.nix+56 pkgs/applications/misc/faircamp/test-wav.nix+14 pkgs/applications/misc/ff2mpv/default.nix+34 pkgs/applications/misc/firefly-desktop/default.nix+2−2 pkgs/applications/misc/firestarter/default.nix+3−1 pkgs/applications/misc/fluidd/default.nix+2−2 pkgs/applications/misc/fnott/default.nix+2−2 pkgs/applications/misc/font-manager/default.nix+2−12 pkgs/applications/misc/foxitreader/default.nix+1 pkgs/applications/misc/free42/default.nix+2−4 pkgs/applications/misc/freeplane/default.nix+20−15 pkgs/applications/misc/fspy/default.nix+2−3 pkgs/applications/misc/fuzzel/default.nix+2 pkgs/applications/misc/gallery-dl/default.nix+2−2 pkgs/applications/misc/ganttproject-bin/default.nix+1−1 pkgs/applications/misc/genact/default.nix+3−3 pkgs/applications/misc/geoipupdate/default.nix+5−3 pkgs/applications/misc/gkrellm/default.nix+1−1 pkgs/applications/misc/globe-cli/default.nix+21 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+80 pkgs/applications/misc/gofu/default.nix+3−3 pkgs/applications/misc/golden-cheetah/default.nix+1−1 pkgs/applications/misc/gometer/default.nix+47 pkgs/applications/misc/gosmore/default.nix+2−4 pkgs/applications/misc/gpsprune/default.nix+3−3 pkgs/applications/misc/gpxsee/default.nix+2−2 pkgs/applications/misc/gramps/default.nix+4 pkgs/applications/misc/gremlin-console/default.nix+2−2 pkgs/applications/misc/gsctl/default.nix+18−7 pkgs/applications/misc/gsimplecal/default.nix+2−2 pkgs/applications/misc/gtk2fontsel/default.nix+1−1 pkgs/applications/misc/hcl2json/default.nix+27 pkgs/applications/misc/hello/default.nix+11−9 pkgs/applications/misc/hello/test.nix+8 pkgs/applications/misc/hubstaff/default.nix+4−4 pkgs/applications/misc/hugo/default.nix+6−6 pkgs/applications/misc/ideamaker/default.nix+2−2 pkgs/applications/misc/index-fm/default.nix−2 pkgs/applications/misc/ipmiview/default.nix+4−4 pkgs/applications/misc/join-desktop/default.nix+73 pkgs/applications/misc/joplin-desktop/default.nix+3−3 pkgs/applications/misc/joshuto/default.nix+3−3 pkgs/applications/misc/josm/default.nix+4−4 pkgs/applications/misc/jotta-cli/default.nix+2−2 pkgs/applications/misc/k40-whisperer/default.nix+74 pkgs/applications/misc/k4dirstat/default.nix+2−2 pkgs/applications/misc/kchmviewer/default.nix+48 pkgs/applications/misc/keepass/default.nix+2−5 pkgs/applications/misc/keepassx/community.nix+2−1 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/klayout/default.nix+8−6 pkgs/applications/misc/koreader/default.nix+2−2 pkgs/applications/misc/kratos/default.nix+4−4 pkgs/applications/misc/libosmocore/default.nix+21−6 pkgs/applications/misc/lighthouse/default.nix−35 pkgs/applications/misc/limesctl/default.nix+3−3 pkgs/applications/misc/logseq/default.nix+5−4 pkgs/applications/misc/lsd2dsl/default.nix+1−1 pkgs/applications/misc/lutris/default.nix+14−12 pkgs/applications/misc/lutris/fhsenv.nix+1−1 pkgs/applications/misc/lutris/fixes.patch−67 pkgs/applications/misc/mapproxy/default.nix+2−2 pkgs/applications/misc/markets/default.nix+2−2 pkgs/applications/misc/marktext/default.nix+7−8 pkgs/applications/misc/masterpdfeditor/default.nix+2−2 pkgs/applications/misc/mdzk/default.nix+3−3 pkgs/applications/misc/mediaelch/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/michabo/default.nix−1 pkgs/applications/misc/minigalaxy/default.nix+7−3 pkgs/applications/misc/mkgmap/default.nix+2−2 pkgs/applications/misc/mkgmap/splitter/default.nix+2−2 pkgs/applications/misc/mob/default.nix+4−4 pkgs/applications/misc/mobilecoin-wallet/default.nix+2−2 pkgs/applications/misc/moonlight-qt/default.nix+3−2 pkgs/applications/misc/mop/default.nix+12−13 pkgs/applications/misc/mop/deps.nix−11 pkgs/applications/misc/mucommander/default.nix+4−4 pkgs/applications/misc/multibootusb/default.nix+1−1 pkgs/applications/misc/mupdf/0001-Use-command-v-in-favor-of-which.patch+25 pkgs/applications/misc/mupdf/0002-Add-Darwin-deps.patch+57 pkgs/applications/misc/mupdf/1.17.nix−1 pkgs/applications/misc/mupdf/default.nix+45−16 pkgs/applications/misc/natural-docs/default.nix+2−2 pkgs/applications/misc/neo/default.nix+2−2 pkgs/applications/misc/nerd-font-patcher/default.nix+9−8 pkgs/applications/misc/nix-tour/default.nix+35−19 pkgs/applications/misc/nnn/default.nix+2−2 pkgs/applications/misc/notejot/default.nix+4−11 pkgs/applications/misc/nut/default.nix+2−1 pkgs/applications/misc/nwg-drawer/default.nix+21−7 pkgs/applications/misc/obinskit/default.nix+1−1 pkgs/applications/misc/obsidian/default.nix+74−60 pkgs/applications/misc/octoprint/default.nix+8−205 pkgs/applications/misc/oil-buku/default.nix+44 pkgs/applications/misc/opencpn/default.nix+85−16 pkgs/applications/misc/openlp/default.nix+2−1 pkgs/applications/misc/opentrack/default.nix+1−1 pkgs/applications/misc/orca/default.nix+2−2 pkgs/applications/misc/organicmaps/default.nix+86 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/pcmanx-gtk2/default.nix+2−2 pkgs/applications/misc/pdfdiff/default.nix+3−5 pkgs/applications/misc/pdfpc/default.nix+3−4 pkgs/applications/misc/pdfsam-basic/default.nix+2−2 pkgs/applications/misc/pdfslicer/default.nix+6 pkgs/applications/misc/pdfstudio/common.nix+2−4 pkgs/applications/misc/pdfstudio/default.nix+4−4 pkgs/applications/misc/pgadmin/default.nix−64 pkgs/applications/misc/phoc/default.nix+10−3 pkgs/applications/misc/phwmon/default.nix+1−1 pkgs/applications/misc/plater/default.nix+1−1 pkgs/applications/misc/playonlinux/default.nix+18−3 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/premid/default.nix+1−1 pkgs/applications/misc/prusa-slicer/default.nix+6−6 pkgs/applications/misc/prusa-slicer/super-slicer.nix+5−5 pkgs/applications/misc/pure-maps/default.nix+3−2 pkgs/applications/misc/pytrainer/default.nix+2−2 pkgs/applications/misc/qMasterPassword/default.nix+5−5 pkgs/applications/misc/qmetro/default.nix+2−3 pkgs/applications/misc/ranger/default.nix+13−4 pkgs/applications/misc/regextester/default.nix−1 pkgs/applications/misc/remarkable/remarkable-mouse/default.nix+2−2 pkgs/applications/misc/remarkable/rmview/default.nix+2−6 pkgs/applications/misc/rm-improved/default.nix+1 pkgs/applications/misc/robo3t/default.nix+1−1 pkgs/applications/misc/rofi/default.nix+4−3 pkgs/applications/misc/sampler/default.nix+5−2 pkgs/applications/misc/seatd/default.nix+9−5 pkgs/applications/misc/sidequest/default.nix+1−1 pkgs/applications/misc/sigal/default.nix+17−13 pkgs/applications/misc/sigi/default.nix+9−7 pkgs/applications/misc/simplenote/default.nix+2−3 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/sleepyhead/default.nix+2−4 pkgs/applications/misc/slic3r/default.nix+6−5 pkgs/applications/misc/slides/default.nix+5−4 pkgs/applications/misc/slmenu/default.nix+10−21 pkgs/applications/misc/snapmaker-luban/default.nix+1−1 pkgs/applications/misc/snowsql/default.nix+4−3 pkgs/applications/misc/solaar/default.nix+3−2 pkgs/applications/misc/spicetify-cli/default.nix+3−3 pkgs/applications/misc/sqls/default.nix+5−3 pkgs/applications/misc/stag/default.nix+1−1 pkgs/applications/misc/stog/default.nix+1−1 pkgs/applications/misc/stork/default.nix+3−3 pkgs/applications/misc/stretchly/default.nix+1−1 pkgs/applications/misc/survex/default.nix+36−43 pkgs/applications/misc/sway-launcher-desktop/default.nix+42 pkgs/applications/misc/sweethome3d/default.nix+1−1 pkgs/applications/misc/sweethome3d/editors.nix+1−1 pkgs/applications/misc/systembus-notify/default.nix+39−5 pkgs/applications/misc/taskwarrior-tui/default.nix+3−3 pkgs/applications/misc/taskwarrior/default.nix+2−2 pkgs/applications/misc/teleprompter/default.nix−1 pkgs/applications/misc/terminal-typeracer/default.nix+1 pkgs/applications/misc/ticker/default.nix+3−3 pkgs/applications/misc/timewarrior/default.nix+1 pkgs/applications/misc/toggldesktop/default.nix+1−1 pkgs/applications/misc/toipe/default.nix+20 pkgs/applications/misc/tootle/default.nix+5 pkgs/applications/misc/tpmmanager/default.nix+6−5 pkgs/applications/misc/trenchbroom/default.nix+14−1 pkgs/applications/misc/tty-share/default.nix+6−4 pkgs/applications/misc/tty-solitaire/default.nix+1 pkgs/applications/misc/tuhi/default.nix+3−3 pkgs/applications/misc/tut/default.nix+2−2 pkgs/applications/misc/tvbrowser/bin.nix+4−6 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/urlview/default.nix+5−5 pkgs/applications/misc/veracrypt/default.nix+2−2 pkgs/applications/misc/vit/default.nix+3−5 pkgs/applications/misc/waybar/default.nix+2−2 pkgs/applications/misc/wego/default.nix+11−13 pkgs/applications/misc/wego/deps.nix−48 pkgs/applications/misc/whalebird/default.nix+2−2 pkgs/applications/misc/wlclock/default.nix+46 pkgs/applications/misc/xmind/default.nix+2−2 pkgs/applications/misc/xmr-stak/default.nix+1−1 pkgs/applications/misc/xmrig/default.nix+2−2 pkgs/applications/misc/xmrig/moneroocean.nix+2−2 pkgs/applications/misc/xpdf/default.nix+3−4 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/yubioath-desktop/default.nix+1−1 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/misc/zscroll/default.nix+3−3 pkgs/applications/networking/aether/default.nix+2−2 pkgs/applications/networking/alpnpass/default.nix+34 pkgs/applications/networking/apache-directory-studio/default.nix+1−1 pkgs/applications/networking/appgate-sdp/default.nix+2−2 pkgs/applications/networking/bee/bee.nix+1−3 pkgs/applications/networking/blocky/default.nix+3−3 pkgs/applications/networking/browsers/bombadillo/default.nix+2−2 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+29−34 pkgs/applications/networking/browsers/chromium/default.nix+7−9 pkgs/applications/networking/browsers/chromium/get-commit-message.py+3−3 pkgs/applications/networking/browsers/chromium/ungoogled-flags.toml+23 pkgs/applications/networking/browsers/chromium/update.py+11 pkgs/applications/networking/browsers/chromium/upstream-info.json+30−30 pkgs/applications/networking/browsers/firefox-bin/beta_sources.nix+393−393 pkgs/applications/networking/browsers/firefox-bin/default.nix+1−3 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+286−190 pkgs/applications/networking/browsers/firefox/librewolf/default.nix+2−2 pkgs/applications/networking/browsers/firefox/librewolf/src.json+5−5 pkgs/applications/networking/browsers/firefox/packages.nix+6−5 pkgs/applications/networking/browsers/firefox/wrapper.nix+19−21 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/browser.nix+191 pkgs/applications/networking/browsers/microsoft-edge/default.nix+20 pkgs/applications/networking/browsers/microsoft-edge/update.sh+50 pkgs/applications/networking/browsers/opera/default.nix+2−2 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/surf/default.nix+1−1 pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix+14−5 pkgs/applications/networking/browsers/vieb/default.nix+4−4 pkgs/applications/networking/browsers/vieb/package.json+12−17 pkgs/applications/networking/browsers/vieb/yarn.lock+1276−1481 pkgs/applications/networking/browsers/vieb/yarn.nix+1330−1546 pkgs/applications/networking/browsers/vivaldi/default.nix+5−3 pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix+3−3 pkgs/applications/networking/browsers/vivaldi/update.sh+5−1 pkgs/applications/networking/browsers/vivaldi/widevine.nix+2−2 pkgs/applications/networking/browsers/webbrowser/default.nix−109 pkgs/applications/networking/browsers/yandex-browser/default.nix+18−11 pkgs/applications/networking/c14/default.nix−22 pkgs/applications/networking/cawbird/default.nix+2−2 pkgs/applications/networking/charles/default.nix+10−3 pkgs/applications/networking/cisco-packet-tracer/7.nix+1−1 pkgs/applications/networking/cisco-packet-tracer/8.nix+4−3 pkgs/applications/networking/cloudflare-dyndns/default.nix+53 pkgs/applications/networking/cloudflared/default.nix+17−6 pkgs/applications/networking/cluster/argo-rollouts/default.nix+27 pkgs/applications/networking/cluster/argo/default.nix+9−6 pkgs/applications/networking/cluster/argocd-autopilot/default.nix+54 pkgs/applications/networking/cluster/argocd/default.nix+16−32 pkgs/applications/networking/cluster/arkade/default.nix+4−4 pkgs/applications/networking/cluster/atlantis/default.nix+8−5 pkgs/applications/networking/cluster/bosh-cli/default.nix+2−2 pkgs/applications/networking/cluster/cilium/default.nix+2−2 pkgs/applications/networking/cluster/cloudfoundry-cli/default.nix+4−3 pkgs/applications/networking/cluster/clusterctl/default.nix+3−3 pkgs/applications/networking/cluster/cmctl/default.nix+3−3 pkgs/applications/networking/cluster/cni/plugins.nix+2−2 pkgs/applications/networking/cluster/driftctl/default.nix+41−41 pkgs/applications/networking/cluster/flink/default.nix+2−3 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/fn-cli/default.nix+2−2 pkgs/applications/networking/cluster/glooctl/default.nix+3−3 pkgs/applications/networking/cluster/hadoop/default.nix+52−16 pkgs/applications/networking/cluster/helm-docs/default.nix+3−3 pkgs/applications/networking/cluster/helm/chart-testing/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+39−22 pkgs/applications/networking/cluster/k3s/patches/0002-Don-t-build-a-static-binary-in-package-cli.patch−37 pkgs/applications/networking/cluster/k3s/update.sh+49−7 pkgs/applications/networking/cluster/k9s/default.nix+3−2 pkgs/applications/networking/cluster/kn/default.nix+2−2 pkgs/applications/networking/cluster/kompose/default.nix+17−7 pkgs/applications/networking/cluster/kontemplate/default.nix−1 pkgs/applications/networking/cluster/kops/default.nix+9−9 pkgs/applications/networking/cluster/krane/Gemfile.lock+12−12 pkgs/applications/networking/cluster/krane/gemset.nix+20−20 pkgs/applications/networking/cluster/krelay/default.nix+31 pkgs/applications/networking/cluster/kube-capacity/default.nix+3−3 pkgs/applications/networking/cluster/kube3d/default.nix+29−12 pkgs/applications/networking/cluster/kubecfg/default.nix+7−7 pkgs/applications/networking/cluster/kubecolor/default.nix+3−1 pkgs/applications/networking/cluster/kubeconform/default.nix+2−2 pkgs/applications/networking/cluster/kubeless/default.nix−38 pkgs/applications/networking/cluster/kubemqctl/default.nix+25 pkgs/applications/networking/cluster/kubent/default.nix+29 pkgs/applications/networking/cluster/kubernetes/default.nix+17−16 pkgs/applications/networking/cluster/kubernetes/kubectl.nix+19−10 pkgs/applications/networking/cluster/kubeseal/default.nix−2 pkgs/applications/networking/cluster/kuttl/default.nix+1 pkgs/applications/networking/cluster/linkerd/edge.nix+3−3 pkgs/applications/networking/cluster/minikube/default.nix+3−3 pkgs/applications/networking/cluster/nerdctl/default.nix+3−3 pkgs/applications/networking/cluster/nixops/default.nix+2 pkgs/applications/networking/cluster/nixops/poetry-git-overlay.nix+7−7 pkgs/applications/networking/cluster/nixops/poetry.lock+88−117 pkgs/applications/networking/cluster/nixops/pyproject.toml+4−1 pkgs/applications/networking/cluster/nomad-autoscaler/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+32 pkgs/applications/networking/cluster/octant/default.nix+5−5 pkgs/applications/networking/cluster/odo/default.nix+38 pkgs/applications/networking/cluster/openshift/default.nix+36−45 pkgs/applications/networking/cluster/pachyderm/default.nix+1 pkgs/applications/networking/cluster/pgo-client/default.nix+1 pkgs/applications/networking/cluster/pluto/default.nix+27 pkgs/applications/networking/cluster/popeye/default.nix+3−4 pkgs/applications/networking/cluster/qbec/default.nix+3−3 pkgs/applications/networking/cluster/rancher/default.nix+3−5 pkgs/applications/networking/cluster/sonobuoy/default.nix+4−4 pkgs/applications/networking/cluster/spark/default.nix+42−27 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+13−11 pkgs/applications/networking/cluster/tanka/default.nix+1 pkgs/applications/networking/cluster/tektoncd-cli/default.nix+9−6 pkgs/applications/networking/cluster/terraform-providers/default.nix+6−2 pkgs/applications/networking/cluster/terraform-providers/providers.json+389−337 pkgs/applications/networking/cluster/terraform-providers/update-all-providers+8−5 pkgs/applications/networking/cluster/terraform-providers/update-provider+34−36 pkgs/applications/networking/cluster/terraform/default.nix+5−4 pkgs/applications/networking/cluster/terragrunt/default.nix+2−2 pkgs/applications/networking/cluster/tfswitch/default.nix+3−3 pkgs/applications/networking/cluster/tgswitch/default.nix+2−2 pkgs/applications/networking/cluster/tilt/default.nix+2−2 pkgs/applications/networking/cluster/vcluster/default.nix+2−2 pkgs/applications/networking/cluster/velero/default.nix+4−4 pkgs/applications/networking/cluster/waypoint/default.nix+3−3 pkgs/applications/networking/cluster/werf/default.nix+11−4 pkgs/applications/networking/cozy-drive/default.nix+2−2 pkgs/applications/networking/dnscontrol/default.nix+3−3 pkgs/applications/networking/dropbox/default.nix+2−2 pkgs/applications/networking/feedreaders/gnome-feeds/default.nix+2 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+10−4 pkgs/applications/networking/gmailctl/default.nix+4−4 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/bitlbee-steam/default.nix+2−2 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+6−4 pkgs/applications/networking/instant-messengers/cinny/default.nix+2−2 pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix+30−28 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+12−9 pkgs/applications/networking/instant-messengers/deltachat-desktop/update.sh+1−1 pkgs/applications/networking/instant-messengers/discord/default.nix+4−4 pkgs/applications/networking/instant-messengers/discord/linux.nix+2−2 pkgs/applications/networking/instant-messengers/element/element-desktop-package.json+4−3 pkgs/applications/networking/instant-messengers/element/element-desktop.nix+26−9 pkgs/applications/networking/instant-messengers/element/keytar/default.nix+8−1 pkgs/applications/networking/instant-messengers/element/pin.json+4−4 pkgs/applications/networking/instant-messengers/element/seshat/default.nix+9−3 pkgs/applications/networking/instant-messengers/ferdi/default.nix+3−3 pkgs/applications/networking/instant-messengers/fluffychat/default.nix+51−1 pkgs/applications/networking/instant-messengers/fractal/default.nix+12−1 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/gitter/default.nix+1−1 pkgs/applications/networking/instant-messengers/gomuks/default.nix+2−2 pkgs/applications/networking/instant-messengers/gotktrix/default.nix+42 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/jitsi/default.nix+1−1 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/matrixcli/default.nix+5−5 pkgs/applications/networking/instant-messengers/mikutter/default.nix+2−2 pkgs/applications/networking/instant-messengers/mirage/default.nix+1 pkgs/applications/networking/instant-messengers/mm/default.nix+1−1 pkgs/applications/networking/instant-messengers/neochat/default.nix+8−2 pkgs/applications/networking/instant-messengers/nheko/default.nix+4−2 pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-mra/default.nix+8−10 pkgs/applications/networking/instant-messengers/pidgin-plugins/telegram-purple/default.nix+6−8 pkgs/applications/networking/instant-messengers/pond/default.nix+8−8 pkgs/applications/networking/instant-messengers/profanity/default.nix+4−22 pkgs/applications/networking/instant-messengers/psi-plus/default.nix+2−2 pkgs/applications/networking/instant-messengers/qtox/default.nix+2−2 pkgs/applications/networking/instant-messengers/rambox/rambox.nix+1−2 pkgs/applications/networking/instant-messengers/ricochet/default.nix+1−1 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/schildichat/pin.json+7−4 pkgs/applications/networking/instant-messengers/schildichat/schildichat-desktop.nix+9−10 pkgs/applications/networking/instant-messengers/schildichat/schildichat-web.nix+35−10 pkgs/applications/networking/instant-messengers/schildichat/update.sh+16−8 pkgs/applications/networking/instant-messengers/session-desktop-appimage/default.nix+41−3 pkgs/applications/networking/instant-messengers/signal-desktop/default.nix+6−4 pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix+2−2 pkgs/applications/networking/instant-messengers/signald/0001-Fetch-buildconfig-during-gradle-build-inside-Nix-FOD.patch+35 pkgs/applications/networking/instant-messengers/signald/0002-buildconfig-local-deps-fixes.patch+60 pkgs/applications/networking/instant-messengers/signald/default.nix+12−27 pkgs/applications/networking/instant-messengers/signald/gradle-plugin.patch−19 pkgs/applications/networking/instant-messengers/sky/default.nix+66 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/teamspeak/client.nix+3−3 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix+191−33 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/kf594.patch+57 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/kotato-10.12-sdk.patch+424 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/shortcuts-binary-path.patch+38 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt-10.12-sdk.patch+68 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt.nix+111−15 pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/with-webkit.nix+23 pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix+10−2 pkgs/applications/networking/instant-messengers/telegram/tdesktop/kf594.diff+57 pkgs/applications/networking/instant-messengers/telegram/tdesktop/tg_owt.nix+5−3 pkgs/applications/networking/instant-messengers/tensor/default.nix+7−6 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/vk-messenger/default.nix+5−5 pkgs/applications/networking/instant-messengers/wavebox/default.nix+1−1 pkgs/applications/networking/instant-messengers/wire-desktop/default.nix+8−9 pkgs/applications/networking/instant-messengers/zoom-us/default.nix+48−9 pkgs/applications/networking/instant-messengers/zulip/default.nix+2−2 pkgs/applications/networking/ipfs-cluster/default.nix+4−4 pkgs/applications/networking/ipfs-migrator/all-migrations.nix+63 pkgs/applications/networking/ipfs-migrator/default.nix+16−20 pkgs/applications/networking/ipfs-migrator/unwrapped.nix+35 pkgs/applications/networking/ipfs/default.nix+20−10 pkgs/applications/networking/irc/bip/default.nix+2−1 pkgs/applications/networking/irc/catgirl/default.nix+2−2 pkgs/applications/networking/irc/communi/default.nix+5−4 pkgs/applications/networking/irc/ircdog/default.nix+5−4 pkgs/applications/networking/irc/irssi/fish/default.nix+2−2 pkgs/applications/networking/irc/kirc/default.nix+3−3 pkgs/applications/networking/irc/quassel/default.nix−1 pkgs/applications/networking/irc/senpai/default.nix+4−4 pkgs/applications/networking/irc/tiny/default.nix+8−4 pkgs/applications/networking/irc/weechat/default.nix+3−3 pkgs/applications/networking/irc/wraith/configure.patch+1−1 pkgs/applications/networking/irc/wraith/default.nix+3−3 pkgs/applications/networking/juju/default.nix+3−3 pkgs/applications/networking/lieer/default.nix−1 pkgs/applications/networking/linssid/default.nix+3−3 pkgs/applications/networking/maestral-qt/default.nix+7−2 pkgs/applications/networking/mailreaders/aerc/default.nix+23−14 pkgs/applications/networking/mailreaders/aerc/runtime-sharedir.patch+86−56 pkgs/applications/networking/mailreaders/alot/default.nix+1−7 pkgs/applications/networking/mailreaders/claws-mail/default.nix+6−14 pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix+3−3 pkgs/applications/networking/mailreaders/evolution/evolution/default.nix+11−4 pkgs/applications/networking/mailreaders/himalaya/default.nix+10−6 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+8−3 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+6−4 pkgs/applications/networking/misc/zammad/0001-nulldb.patch+15 pkgs/applications/networking/misc/zammad/default.nix+141 pkgs/applications/networking/misc/zammad/gemset.nix+2608 pkgs/applications/networking/misc/zammad/package.json+18 pkgs/applications/networking/misc/zammad/source.json+7 pkgs/applications/networking/misc/zammad/update.nix+37 pkgs/applications/networking/misc/zammad/update.sh+68 pkgs/applications/networking/misc/zammad/yarn.lock+1275 pkgs/applications/networking/misc/zammad/yarn.nix+1549 pkgs/applications/networking/modem-manager-gui/default.nix+15 pkgs/applications/networking/mullvad-vpn/default.nix+2−2 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/mumble/default.nix+47−73 pkgs/applications/networking/mumble/fix-rnnoise-argument.patch−16 pkgs/applications/networking/n8n/default.nix+7−1 pkgs/applications/networking/n8n/node-packages.nix+995−929 pkgs/applications/networking/newsreaders/liferea/default.nix+2−2 pkgs/applications/networking/nextcloud-client/default.nix+28−3 pkgs/applications/networking/nextdns/default.nix+3−5 pkgs/applications/networking/opsdroid/default.nix+2−2 pkgs/applications/networking/ostinato/default.nix+6−9 pkgs/applications/networking/owamp/default.nix+2−1 pkgs/applications/networking/owncloud-client/default.nix+2−2 pkgs/applications/networking/p2p/fragments/default.nix+54−41 pkgs/applications/networking/p2p/fragments/dependency-resolution.patch−25 pkgs/applications/networking/p2p/frostwire/default.nix+7−7 pkgs/applications/networking/p2p/frostwire/frostwire-bin.nix+17−4 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/ktorrent/default.nix−32 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/transgui/default.nix+3−7 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+9−3 pkgs/applications/networking/protonvpn-gui/default.nix+33−16 pkgs/applications/networking/remote/anydesk/default.nix+2−2 pkgs/applications/networking/remote/citrix-workspace/generic.nix+1−1 pkgs/applications/networking/remote/freerdp/default.nix+2−2 pkgs/applications/networking/remote/remmina/default.nix+10−6 pkgs/applications/networking/remote/rustdesk/cargo.patch+50 pkgs/applications/networking/remote/rustdesk/default.nix+104 pkgs/applications/networking/remote/vmware-horizon-client/default.nix+6−5 pkgs/applications/networking/remote/x2goclient/default.nix+36−6 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+5−7 pkgs/applications/networking/sniffers/sngrep/default.nix+2−13 pkgs/applications/networking/sniffers/wireshark/default.nix+22−7 pkgs/applications/networking/soju/default.nix+3−3 pkgs/applications/networking/ssb-patchwork/default.nix+1−1 pkgs/applications/networking/sync/desync/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+10−5 pkgs/applications/networking/sync/unison/default.nix+5−8 pkgs/applications/networking/sync/wdt/default.nix+34 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+9−14 pkgs/applications/networking/testssl/default.nix+2−2 pkgs/applications/networking/tetrd/default.nix+1−1 pkgs/applications/networking/zerobin/default.nix+1−1 pkgs/applications/office/appflowy/default.nix+6−5 pkgs/applications/office/autokey/remove-requires-dbus-python.patch−11 pkgs/applications/office/banking/default.nix+20−9 pkgs/applications/office/beamerpresenter/default.nix+45−22 pkgs/applications/office/bookworm/default.nix+48−26 pkgs/applications/office/buho/default.nix+58 pkgs/applications/office/calligra/default.nix+16 pkgs/applications/office/elementary-planner/default.nix+14−1 pkgs/applications/office/espanso/default.nix+1 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/hledger-check-fancyassertions/default.nix+4−9 pkgs/applications/office/jabref/default.nix+1−1 pkgs/applications/office/jameica/default.nix+9−8 pkgs/applications/office/khronos/default.nix+2−9 pkgs/applications/office/ledger/default.nix+2−2 pkgs/applications/office/libreoffice/default.nix+11−2 pkgs/applications/office/libreoffice/soffice-template.desktop+6 pkgs/applications/office/libreoffice/wrapper.nix+25−12 pkgs/applications/office/micropad/default.nix+101 pkgs/applications/office/micropad/package.json+87 pkgs/applications/office/micropad/yarn.lock+2006 pkgs/applications/office/micropad/yarn.nix+2341 pkgs/applications/office/mmex/default.nix+26−29 pkgs/applications/office/morgen/default.nix+2−2 pkgs/applications/office/paperless-ng/default.nix → pkgs/applications/office/paperless-ngx/default.nix+33−41 pkgs/applications/office/paperwork/openpaperwork-core.nix+1 pkgs/applications/office/paperwork/openpaperwork-gtk.nix+1 pkgs/applications/office/paperwork/paperwork-gtk.nix+19−3 pkgs/applications/office/paperwork/src.nix+2−2 pkgs/applications/office/pinpoint/default.nix+2−2 pkgs/applications/office/portfolio/default.nix+4−4 pkgs/applications/office/pyspread/default.nix+1−1 pkgs/applications/office/qownnotes/default.nix+2−2 pkgs/applications/office/scribus/unstable.nix+30 pkgs/applications/office/skanlite/default.nix−30 pkgs/applications/office/softmaker/desktop_items.nix+72−18 pkgs/applications/office/spice-up/default.nix−1 pkgs/applications/office/timeline/default.nix+4−7 pkgs/applications/office/treesheets/default.nix+29−31 pkgs/applications/office/trilium/default.nix+4−4 pkgs/applications/office/tusk/default.nix+4−3 pkgs/applications/office/vnote/default.nix+2−2 pkgs/applications/office/wpsoffice/default.nix−1 pkgs/applications/office/zanshin/default.nix−38 pkgs/applications/office/zotero/default.nix+49−44 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/freedv/default.nix+8−4 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+5−4 pkgs/applications/radio/gqrx/default.nix+2−2 pkgs/applications/radio/kalibrate-rtl/default.nix+5−5 pkgs/applications/radio/pothos/default.nix+2−2 pkgs/applications/radio/rtl-ais/default.nix+2−1 pkgs/applications/radio/rtl-sdr/default.nix+11−7 pkgs/applications/radio/sdrplay/default.nix+1−1 pkgs/applications/radio/soapysdrplay/default.nix+2−2 pkgs/applications/radio/soundmodem/default.nix+3−3 pkgs/applications/radio/splat/default.nix+55 pkgs/applications/radio/srsran/default.nix+49 pkgs/applications/radio/svxlink/default.nix+1−1 pkgs/applications/radio/uhd/default.nix+2 pkgs/applications/radio/urh/default.nix+2−2 pkgs/applications/science/astronomy/astrolabe-generator/default.nix+1 pkgs/applications/science/astronomy/gnuastro/default.nix+36 pkgs/applications/science/astronomy/gprojector/default.nix+4−4 pkgs/applications/science/astronomy/kstars/default.nix+2−2 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/phd2/default.nix+2−2 pkgs/applications/science/astronomy/siril/default.nix+2−2 pkgs/applications/science/astronomy/stellarium/default.nix+4−4 pkgs/applications/science/biology/angsd/default.nix+25 pkgs/applications/science/biology/bayescan/default.nix+1 pkgs/applications/science/biology/bcftools/default.nix+2−2 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/febio-studio/default.nix+61 pkgs/applications/science/biology/febio-studio/febio-studio-cmake.patch+38 pkgs/applications/science/biology/flywheel-cli/default.nix+49 pkgs/applications/science/biology/kssd/default.nix+2−1 pkgs/applications/science/biology/last/default.nix+4−4 pkgs/applications/science/biology/megahit/default.nix+3 pkgs/applications/science/biology/minimap2/default.nix+2−1 pkgs/applications/science/biology/ncbi-tools/default.nix−34 pkgs/applications/science/biology/neuron/default.nix+1−1 pkgs/applications/science/biology/picard-tools/default.nix+3−2 pkgs/applications/science/biology/quast/default.nix+1−3 pkgs/applications/science/biology/raxml/default.nix+2−2 pkgs/applications/science/biology/samtools/default.nix+8−1 pkgs/applications/science/biology/tebreak/default.nix+2−2 pkgs/applications/science/chemistry/d-seams/default.nix+2−2 pkgs/applications/science/chemistry/jmol/default.nix+12−4 pkgs/applications/science/chemistry/marvin/default.nix+2−2 pkgs/applications/science/chemistry/pymol/default.nix+10−2 pkgs/applications/science/computer-architecture/qtrvsim/default.nix+30 pkgs/applications/science/electronics/caneda/default.nix+2−2 pkgs/applications/science/electronics/diylc/default.nix+1−1 pkgs/applications/science/electronics/eagle/eagle.nix+1−1 pkgs/applications/science/electronics/eagle/eagle7.nix−97 pkgs/applications/science/electronics/gaw/default.nix+34 pkgs/applications/science/electronics/gerbv/default.nix+2−2 pkgs/applications/science/electronics/kicad/versions.nix+21−21 pkgs/applications/science/electronics/magic-vlsi/0002-fix-format-security.patch−19 pkgs/applications/science/electronics/magic-vlsi/default.nix+2−3 pkgs/applications/science/electronics/ngspice/default.nix+2−2 pkgs/applications/science/electronics/verilator/default.nix+2−2 pkgs/applications/science/electronics/xcircuit/default.nix+4−8 pkgs/applications/science/electronics/xschem/default.nix+46 pkgs/applications/science/engineering/brmodelo/default.nix+109 pkgs/applications/science/logic/abc/default.nix+3−3 pkgs/applications/science/logic/alt-ergo/default.nix+7−10 pkgs/applications/science/logic/anders/default.nix+4−1 pkgs/applications/science/logic/coq/default.nix+20−17 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/components/default.nix+5 pkgs/applications/science/logic/isabelle/components/isabelle-linter.nix+22 pkgs/applications/science/logic/isabelle/components/mkBuild.nix+36 pkgs/applications/science/logic/isabelle/default.nix+81−4 pkgs/applications/science/logic/jonprl/default.nix−35 pkgs/applications/science/logic/key/default.nix+3−4 pkgs/applications/science/logic/klee/default.nix+64−17 pkgs/applications/science/logic/klee/klee-uclibc.nix+98 pkgs/applications/science/logic/lean/default.nix+3−3 pkgs/applications/science/logic/lean2/default.nix−37 pkgs/applications/science/logic/logisim-evolution/default.nix+1−1 pkgs/applications/science/logic/logisim/default.nix+1−1 pkgs/applications/science/logic/naproche/default.nix+38 pkgs/applications/science/logic/nuXmv/default.nix+33 pkgs/applications/science/logic/opensmt/default.nix+2−2 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/tlaps.nix+4−4 pkgs/applications/science/logic/tlaplus/toolbox.nix+3−5 pkgs/applications/science/logic/why3/default.nix+5−5 pkgs/applications/science/logic/why3/with-provers.nix+1−1 pkgs/applications/science/logic/workcraft/default.nix+2−2 pkgs/applications/science/logic/z3/4.4.0.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/R/default.nix+2−2 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/cemu/default.nix+2−2 pkgs/applications/science/math/cntk/default.nix+12−7 pkgs/applications/science/math/fricas/default.nix+3−6 pkgs/applications/science/math/geogebra/default.nix+2−2 pkgs/applications/science/math/getdp/default.nix+1−1 pkgs/applications/science/math/giac/default.nix+12−16 pkgs/applications/science/math/gmsh/default.nix+2−2 pkgs/applications/science/math/gurobi/default.nix+2−2 pkgs/applications/science/math/mxnet/default.nix+14−2 pkgs/applications/science/math/nasc/default.nix−1 pkgs/applications/science/math/qalculate-gtk/default.nix+2−2 pkgs/applications/science/math/sage/README.md+2−2 pkgs/applications/science/math/sage/default.nix+4−2 pkgs/applications/science/math/sage/patches/docutils-0.18.1-deprecation.patch+13 pkgs/applications/science/math/sage/patches/no-cython-sources-in-tracebacks-on-ipython8.patch−52 pkgs/applications/science/math/sage/patches/tachyon-renamed-focallength.patch+81 pkgs/applications/science/math/sage/sage-env.nix+2 pkgs/applications/science/math/sage/sage-src.nix+57−16 pkgs/applications/science/math/sage/sage.nix+2−1 pkgs/applications/science/math/sage/sagelib.nix+8−3 pkgs/applications/science/math/scilab-bin/default.nix+17−20 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+7−8 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+6−5 pkgs/applications/science/misc/golly/beta.nix−50 pkgs/applications/science/misc/netlogo/default.nix+2−2 pkgs/applications/science/misc/openmvs/default.nix−77 pkgs/applications/science/misc/rink/default.nix+3−3 pkgs/applications/science/misc/root/5.nix+5 pkgs/applications/science/misc/root/default.nix+1−1 pkgs/applications/science/misc/simgrid/default.nix+4−2 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/groove/default.nix+1−1 pkgs/applications/science/programming/jflap/default.nix+32 pkgs/applications/science/robotics/inav-configurator/default.nix+2−2 pkgs/applications/science/robotics/mavproxy/default.nix+2−2 pkgs/applications/science/robotics/mission-planner/default.nix+2−2 pkgs/applications/science/robotics/sumorobot-manager/default.nix+1−1 pkgs/applications/system/monitor/default.nix+3−3 pkgs/applications/terminal-emulators/alacritty/default.nix+7−6 pkgs/applications/terminal-emulators/contour/default.nix+3−1 pkgs/applications/terminal-emulators/cool-retro-term/default.nix+3−1 pkgs/applications/terminal-emulators/ctx/default.nix+3 pkgs/applications/terminal-emulators/darktile/default.nix+3 pkgs/applications/terminal-emulators/eterm/default.nix+3 pkgs/applications/terminal-emulators/foot/default.nix+3−2 pkgs/applications/terminal-emulators/germinal/default.nix+3 pkgs/applications/terminal-emulators/gnome-console/default.nix+69 pkgs/applications/terminal-emulators/guake/default.nix+3 pkgs/applications/terminal-emulators/hyper/default.nix+5−3 pkgs/applications/terminal-emulators/iterm2/default.nix+24−30 pkgs/applications/terminal-emulators/kermit-terminal/default.nix+3 pkgs/applications/terminal-emulators/kgx/default.nix−76 pkgs/applications/terminal-emulators/kitty/default.nix+58−26 pkgs/applications/terminal-emulators/lxterminal/default.nix+3−1 pkgs/applications/terminal-emulators/mlterm/default.nix+5−5 pkgs/applications/terminal-emulators/mrxvt/default.nix+3 pkgs/applications/terminal-emulators/roxterm/default.nix+5−3 pkgs/applications/terminal-emulators/rxvt-unicode-plugins/urxvt-font-size/default.nix+1−1 pkgs/applications/terminal-emulators/rxvt-unicode/default.nix+4−1 pkgs/applications/terminal-emulators/rxvt-unicode/wrapper.nix+5−1 pkgs/applications/terminal-emulators/sakura/default.nix+3 pkgs/applications/terminal-emulators/st/default.nix+3 pkgs/applications/terminal-emulators/stupidterm/default.nix+3−1 pkgs/applications/terminal-emulators/syncterm/default.nix+2 pkgs/applications/terminal-emulators/terminator/default.nix+3 pkgs/applications/terminal-emulators/termite/default.nix+5−2 pkgs/applications/terminal-emulators/termonad/default.nix+5−2 pkgs/applications/terminal-emulators/tilda/default.nix+3 pkgs/applications/terminal-emulators/tilix/default.nix+5−2 pkgs/applications/terminal-emulators/wayst/default.nix+6−6 pkgs/applications/terminal-emulators/wezterm/default.nix+23−9 pkgs/applications/terminal-emulators/xterm/default.nix+6−3 pkgs/applications/version-management/bcompare/default.nix+3−3 pkgs/applications/version-management/bitkeeper/default.nix−56 pkgs/applications/version-management/commit-formatter/default.nix+1 pkgs/applications/version-management/commitizen/default.nix+28−15 pkgs/applications/version-management/dvc/default.nix+25−11 pkgs/applications/version-management/dvc/dvc-daemon.patch+1−1 pkgs/applications/version-management/fnc/default.nix+40 pkgs/applications/version-management/fossil/default.nix+2−2 pkgs/applications/version-management/gerrit/default.nix+2−2 pkgs/applications/version-management/git-and-tools/bfg-repo-cleaner/default.nix+41−44 pkgs/applications/version-management/git-and-tools/bitbucket-server-cli/default.nix+1 pkgs/applications/version-management/git-and-tools/cgit/common.nix+77 pkgs/applications/version-management/git-and-tools/cgit/default.nix+7−69 pkgs/applications/version-management/git-and-tools/cgit/pink.nix+23 pkgs/applications/version-management/git-and-tools/darcs-to-git/default.nix+5−4 pkgs/applications/version-management/git-and-tools/delta/default.nix+3−3 pkgs/applications/version-management/git-and-tools/gg/default.nix+17−8 pkgs/applications/version-management/git-and-tools/gg/skip-broken-revert-tests.patch−12 pkgs/applications/version-management/git-and-tools/gh/default.nix+3−3 pkgs/applications/version-management/git-and-tools/ghorg/default.nix+3−3 pkgs/applications/version-management/git-and-tools/git-annex-remote-b2/default.nix+7−7 pkgs/applications/version-management/git-and-tools/git-annex-utils/default.nix+3−1 pkgs/applications/version-management/git-and-tools/git-branchless/default.nix+5−5 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-gone/default.nix+19−16 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+5−10 pkgs/applications/version-management/git-and-tools/git-remote-hg/default.nix+2−2 pkgs/applications/version-management/git-and-tools/git-secret/default.nix+3−6 pkgs/applications/version-management/git-and-tools/git-team/default.nix+31 pkgs/applications/version-management/git-and-tools/git-vendor/default.nix+2−2 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/glitter/default.nix+3−3 pkgs/applications/version-management/git-and-tools/hut/default.nix+40 pkgs/applications/version-management/git-and-tools/lab/default.nix+3−3 pkgs/applications/version-management/git-and-tools/lucky-commit/default.nix+3−3 pkgs/applications/version-management/git-and-tools/pass-git-helper/default.nix+2−2 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-and-tools/subgit/default.nix+2−2 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+4−8 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+11−6 pkgs/applications/version-management/gitlab/data.json+8−8 pkgs/applications/version-management/gitlab/default.nix+5−2 pkgs/applications/version-management/gitlab/gitaly/Gemfile+1−1 pkgs/applications/version-management/gitlab/gitaly/Gemfile.lock+14−14 pkgs/applications/version-management/gitlab/gitaly/default.nix+8−22 pkgs/applications/version-management/gitlab/gitaly/gemset.nix+18−18 pkgs/applications/version-management/gitlab/gitlab-shell/default.nix+4−4 pkgs/applications/version-management/gitlab/gitlab-workhorse/default.nix+3−3 pkgs/applications/version-management/gitlab/remove-hardcoded-locations.patch+10 pkgs/applications/version-management/gitlab/rubyEnv/Gemfile+30−28 pkgs/applications/version-management/gitlab/rubyEnv/Gemfile.lock+168−138 pkgs/applications/version-management/gitlab/rubyEnv/gemset.nix+265−158 pkgs/applications/version-management/gitoxide/default.nix+3−3 pkgs/applications/version-management/gitqlient/default.nix+41 pkgs/applications/version-management/gogs/default.nix+3−3 pkgs/applications/version-management/got/default.nix+3−4 pkgs/applications/version-management/jujutsu/default.nix+61 pkgs/applications/version-management/meld/default.nix+11 pkgs/applications/version-management/mercurial/default.nix+11−7 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+70−69 pkgs/applications/version-management/redmine/default.nix+3−3 pkgs/applications/version-management/redmine/gemset.nix+79−78 pkgs/applications/version-management/redmine/update.sh+17 pkgs/applications/version-management/smartgithg/default.nix+7−11 pkgs/applications/version-management/subversion/default.nix+5−10 pkgs/applications/version-management/tkcvs/default.nix → pkgs/applications/version-management/tkrev/default.nix+8−5 pkgs/applications/version-management/tortoisehg/default.nix+2−2 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+44 pkgs/applications/video/byzanz/default.nix+1−1 pkgs/applications/video/celluloid/default.nix+2−4 pkgs/applications/video/clapper/default.nix+2−2 pkgs/applications/video/clickshare-csc1/default.nix−2 pkgs/applications/video/clipgrab/default.nix+1−1 pkgs/applications/video/corrscope/default.nix+4−12 pkgs/applications/video/davinci-resolve/default.nix+179 pkgs/applications/video/entangle/default.nix+14−6 pkgs/applications/video/epgstation/client/package.json+57 pkgs/applications/video/epgstation/default.nix+58−23 pkgs/applications/video/epgstation/epgstation.1+5−1 pkgs/applications/video/epgstation/package.json+50−63 pkgs/applications/video/epgstation/update.nix+13−16 pkgs/applications/video/epgstation/use-mysql-over-domain-socket.patch+42−13 pkgs/applications/video/f1viewer/default.nix+3−3 pkgs/applications/video/ffmpeg-normalize/default.nix+2−2 pkgs/applications/video/filebot/default.nix+5−5 pkgs/applications/video/freetube/default.nix+2−2 pkgs/applications/video/go-chromecast/default.nix+3−3 pkgs/applications/video/gpac/default.nix+2−2 pkgs/applications/video/gpu-screen-recorder/default.nix+50 pkgs/applications/video/gpu-screen-recorder/fix-nvfbc-check.patch+38 pkgs/applications/video/gpu-screen-recorder/gpu-screen-recorder-gtk.nix+46 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/addons/pvr-hdhomerun/default.nix+2−2 pkgs/applications/video/kodi/unwrapped.nix+22−7 pkgs/applications/video/kodi/wrapper.nix−6 pkgs/applications/video/lbry/default.nix+2−2 pkgs/applications/video/lightworks/default.nix+4−4 pkgs/applications/video/losslesscut-bin/appimage.nix+2−2 pkgs/applications/video/losslesscut-bin/default.nix+5−5 pkgs/applications/video/losslesscut-bin/dmg.nix+2−2 pkgs/applications/video/losslesscut-bin/windows.nix+3−2 pkgs/applications/video/makemkv/default.nix+12−12 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/default.nix+3−2 pkgs/applications/video/mpv/scripts/autocrop.nix+19 pkgs/applications/video/mpv/scripts/autodeint.nix+19 pkgs/applications/video/mpv/scripts/vr-reversal.nix+35 pkgs/applications/video/natron/default.nix+3−2 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/p2pvc/default.nix+2−1 pkgs/applications/video/peek/default.nix−2 pkgs/applications/video/pitivi/default.nix+10−1 pkgs/applications/video/qmplay2/default.nix+2−2 pkgs/applications/video/quvi/library.nix+1 pkgs/applications/video/quvi/scripts.nix+1 pkgs/applications/video/quvi/tool.nix+1 pkgs/applications/video/rtabmap/0001-remove-printer-support.patch+139 pkgs/applications/video/rtabmap/default.nix+59 pkgs/applications/video/shotcut/default.nix+2−4 pkgs/applications/video/smplayer/default.nix+5−3 pkgs/applications/video/streamlink-twitch-gui/bin.nix+6−6 pkgs/applications/video/streamlink/default.nix+2−3 pkgs/applications/video/vdr/plugins.nix+5−80 pkgs/applications/video/vlc/default.nix+2−7 pkgs/applications/video/webcamoid/default.nix+4−9 pkgs/applications/video/webtorrent_desktop/default.nix+68−87 pkgs/applications/video/yuview/default.nix+45 pkgs/applications/video/yuview/disable_version_check.patch+15 pkgs/applications/virtualization/OVMF/default.nix+2−1 pkgs/applications/virtualization/arion/default.nix+7−5 pkgs/applications/virtualization/cloud-hypervisor/default.nix+5−3 pkgs/applications/virtualization/colima/default.nix+2−2 pkgs/applications/virtualization/containerd/1.4.nix−51 pkgs/applications/virtualization/containerd/default.nix+2−2 pkgs/applications/virtualization/cri-o/default.nix+2−2 pkgs/applications/virtualization/crosvm/Cargo.lock+1500 pkgs/applications/virtualization/crosvm/default.nix+9−41 pkgs/applications/virtualization/crosvm/generate-cargo.sh+7 pkgs/applications/virtualization/crosvm/update.py+23−22 pkgs/applications/virtualization/crosvm/upstream-info.json+11−20 pkgs/applications/virtualization/crun/default.nix+3−2 pkgs/applications/virtualization/distrobox/default.nix+38 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/docker/default.nix+22−12 pkgs/applications/virtualization/docker/gc.nix+3−3 pkgs/applications/virtualization/docker/proxy.nix+3−3 pkgs/applications/virtualization/ecs-agent/default.nix+1 pkgs/applications/virtualization/firecracker/default.nix+3−3 pkgs/applications/virtualization/firectl/default.nix+6−6 pkgs/applications/virtualization/firectl/gomod.patch−15 pkgs/applications/virtualization/flintlock/default.nix+49 pkgs/applications/virtualization/gvisor/containerd-shim.nix+2−2 pkgs/applications/virtualization/gvisor/default.nix+1−1 pkgs/applications/virtualization/imgcrypt/default.nix+2−2 pkgs/applications/virtualization/kvmtool/default.nix+23 pkgs/applications/virtualization/libgovirt/default.nix+23−9 pkgs/applications/virtualization/lima/default.nix+8−3 pkgs/applications/virtualization/looking-glass-client/default.nix+1−1 pkgs/applications/virtualization/open-vm-tools/default.nix+20−5 pkgs/applications/virtualization/podman-tui/default.nix+11−3 pkgs/applications/virtualization/podman/default.nix+25−19 pkgs/applications/virtualization/podman/wrapper.nix+22 pkgs/applications/virtualization/qemu/9p-ignore-noatime.patch−44 pkgs/applications/virtualization/qemu/default.nix+26−13 pkgs/applications/virtualization/qemu/provide-fallback-for-utimensat.patch+190 pkgs/applications/virtualization/qemu/revert-ui-cocoa-add-clipboard-support.patch+208 pkgs/applications/virtualization/qemu/utils.nix+2−2 pkgs/applications/virtualization/runc/default.nix+2−2 pkgs/applications/virtualization/seabios/default.nix+7−6 pkgs/applications/virtualization/singularity/default.nix+2−2 pkgs/applications/virtualization/spike/default.nix+9−14 pkgs/applications/virtualization/virt-manager/default.nix+37−23 pkgs/applications/virtualization/virt-viewer/default.nix+12−3 pkgs/applications/virtualization/virtualbox/guest-additions/default.nix+4−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+4−6 pkgs/applications/window-managers/btops/default.nix+5−5 pkgs/applications/window-managers/clfswm/default.nix−50 pkgs/applications/window-managers/clfswm/require-clx.patch−13 pkgs/applications/window-managers/herbstluftwm/default.nix+9−4 pkgs/applications/window-managers/i3/balance-workspace.nix+2−2 pkgs/applications/window-managers/i3/status-rust.nix+4−4 pkgs/applications/window-managers/i3/swallow.nix+44 pkgs/applications/window-managers/i3/wsr.nix+3−3 pkgs/applications/window-managers/icewm/default.nix+9−8 pkgs/applications/window-managers/jwm/default.nix+2−2 pkgs/applications/window-managers/labwc/default.nix+3−8 pkgs/applications/window-managers/labwc/relax-the-version-constraint-for-wlroots.patch−29 pkgs/applications/window-managers/phosh/default.nix+4−5 pkgs/applications/window-managers/qtile/default.nix+26−3 pkgs/applications/window-managers/sway/bg.nix+2−2 pkgs/applications/window-managers/sway/default.nix+18−5 pkgs/applications/window-managers/sway/idle.nix+7−3 pkgs/applications/window-managers/sway/lock-effects.nix+8 pkgs/applications/window-managers/sway/lock.nix+2−7 pkgs/applications/window-managers/sway/wrapper.nix+2−1 pkgs/applications/window-managers/taffybar/default.nix+2−1 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/applications/window-managers/xmonad/wrapper.nix+2−1 pkgs/build-support/alternatives/blas/default.nix+17−14 pkgs/build-support/alternatives/lapack/default.nix+16−13 pkgs/build-support/appimage/default.nix+4−1 pkgs/build-support/build-fhs-userenv-bubblewrap/env.nix+34−2 pkgs/build-support/build-fhs-userenv/env.nix+33−1 pkgs/build-support/build-graalvm-native-image/default.nix+7−5 pkgs/build-support/cc-wrapper/add-flags.sh+14−4 pkgs/build-support/coq/default.nix+6−3 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+56−180 pkgs/build-support/dotnet/build-dotnet-module/hooks/default.nix+62 pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-build-hook.sh+42 pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-check-hook.sh+34 pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh+34 pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-fixup-hook.sh+43 pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-install-hook.sh+43 pkgs/build-support/dotnet/make-nuget-deps/default.nix+9 pkgs/build-support/dotnet/make-nuget-source/default.nix+38 pkgs/build-support/dotnet/nuget-to-nix/default.nix+25−3 pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh+9−3 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/fetchipfs/default.nix−2 pkgs/build-support/fetchnextcloudapp/default.nix+1−6 pkgs/build-support/fetchpatch/default.nix+32−17 pkgs/build-support/fetchpatch/tests.nix+16 pkgs/build-support/fetchurl/default.nix+5−4 pkgs/build-support/fetchurl/mirrors.nix+265−233 pkgs/build-support/fetchzip/default.nix+4−4 pkgs/build-support/flutter/default.nix+8−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-darwin-bundle/write-darwin-bundle.nix+13−14 pkgs/build-support/make-desktopitem/default.nix+101−50 pkgs/build-support/nix-gitignore/default.nix−6 pkgs/build-support/ocaml/default.nix+2 pkgs/build-support/ocaml/dune.nix+8−5 pkgs/build-support/ocaml/oasis.nix+5−3 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/rust/hooks/default.nix+10 pkgs/build-support/rust/hooks/rust-bindgen-hook.sh+13 pkgs/build-support/rust/import-cargo-lock.nix+6−1 pkgs/build-support/setup-hooks/auto-patchelf.py+335 pkgs/build-support/setup-hooks/auto-patchelf.sh+23−312 pkgs/build-support/setup-hooks/copy-desktop-items.sh+5−4 pkgs/build-support/setup-hooks/desktop-to-darwin-bundle.sh+193−22 pkgs/build-support/setup-hooks/make-wrapper.sh+22−1 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/singularity-tools/default.nix+3−1 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+39−3 pkgs/build-support/writers/test.nix+27 pkgs/common-updater/generic-updater.nix+1−1 pkgs/common-updater/git-updater.nix+21 pkgs/common-updater/http-two-levels-updater.nix+19 pkgs/common-updater/scripts/list-archive-two-level-versions−35 pkgs/common-updater/scripts/list-archive-two-levels-versions+54 pkgs/common-updater/scripts/list-git-tags+37−16 pkgs/data/documentation/execline-man-pages/default.nix+2−2 pkgs/data/documentation/gnome-user-docs/default.nix+2−2 pkgs/data/documentation/man-pages/default.nix−1 pkgs/data/documentation/rnrs/r3rs.nix−7 pkgs/data/documentation/s6-man-pages/default.nix+1−1 pkgs/data/documentation/s6-networking-man-pages/default.nix+2−2 pkgs/data/documentation/scheme-manpages/default.nix+3−3 pkgs/data/documentation/std-man-pages/default.nix+4−3 pkgs/data/documentation/zeal/default.nix+2−2 pkgs/data/fonts/agave/default.nix+22−11 pkgs/data/fonts/amiri/default.nix+2−2 pkgs/data/fonts/andika/default.nix+2−2 pkgs/data/fonts/annapurna-sil/default.nix+29 pkgs/data/fonts/borg-sans-mono/default.nix+26 pkgs/data/fonts/ccsymbols/default.nix+32 pkgs/data/fonts/charis-sil/default.nix+2−2 pkgs/data/fonts/comic-mono/comic-mono-weight.conf+14 pkgs/data/fonts/comic-mono/default.nix+35 pkgs/data/fonts/dancing-script/default.nix+27 pkgs/data/fonts/doulos-sil/default.nix+2−2 pkgs/data/fonts/ezra-sil/default.nix+26 pkgs/data/fonts/galatia-sil/default.nix+29 pkgs/data/fonts/gentium/default.nix+2−2 pkgs/data/fonts/google-fonts/default.nix+3−3 pkgs/data/fonts/iosevka/bin.nix+3−2 pkgs/data/fonts/iosevka/update-default.sh+1−1 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/lmodern/default.nix+5−5 pkgs/data/fonts/lxgw-wenkai/default.nix+23 pkgs/data/fonts/material-design-icons/default.nix+3−6 pkgs/data/fonts/mplus-outline-fonts/default.nix+39−19 pkgs/data/fonts/noto-fonts/default.nix+13−17 pkgs/data/fonts/parastoo-fonts/default.nix+2−2 pkgs/data/fonts/redhat-official/default.nix+6−4 pkgs/data/fonts/rictydiminished-with-firacode/default.nix+5−4 pkgs/data/fonts/sarasa-gothic/default.nix+2−2 pkgs/data/fonts/source-sans-pro/default.nix+30 pkgs/data/fonts/source-serif-pro/default.nix+30 pkgs/data/fonts/sudo/default.nix+2−2 pkgs/data/fonts/times-newer-roman/default.nix+1−1 pkgs/data/fonts/twitter-color-emoji/default.nix+2−2 pkgs/data/fonts/uni-vga/default.nix+4−6 pkgs/data/fonts/unifont/default.nix+3−3 pkgs/data/fonts/unifont_upper/default.nix+2−2 pkgs/data/fonts/vazir-fonts/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/faba-icon-theme/default.nix+2−3 pkgs/data/icons/flat-remix-icon-theme/default.nix+6−5 pkgs/data/icons/hicolor-icon-theme/default.nix+3−2 pkgs/data/icons/humanity-icon-theme/default.nix+4−4 pkgs/data/icons/kora-icon-theme/default.nix+2−2 pkgs/data/icons/luna-icons/default.nix+5−2 pkgs/data/icons/numix-icon-theme-circle/default.nix+2−2 pkgs/data/icons/numix-icon-theme-square/default.nix+2−2 pkgs/data/icons/papirus-icon-theme/default.nix+2−2 pkgs/data/icons/tango-icon-theme/default.nix+3−2 pkgs/data/icons/tela-circle-icon-theme/default.nix+7−4 pkgs/data/icons/tela-icon-theme/default.nix+2−2 pkgs/data/icons/whitesur-icon-theme/default.nix+2−2 pkgs/data/misc/brise/default.nix+2−1 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/ddccontrol-db/default.nix+1−2 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/miscfiles/default.nix+3−2 pkgs/data/misc/mobile-broadband-provider-info/default.nix+2−2 pkgs/data/misc/nixos-artwork/wallpapers.nix+16 pkgs/data/misc/osinfo-db/default.nix+15−4 pkgs/data/misc/shared-desktop-ontologies/default.nix+3−2 pkgs/data/misc/shared-mime-info/default.nix+1 pkgs/data/misc/spdx-license-list-data/default.nix+21−4 pkgs/data/misc/tzdata/default.nix+5−4 pkgs/data/misc/unicode-emoji/default.nix+4−12 pkgs/data/misc/v2ray-domain-list-community/default.nix+2−2 pkgs/data/misc/v2ray-geoip/default.nix+3−3 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/soundfonts/fluid/default.nix+2−1 pkgs/data/soundfonts/generaluser/default.nix+25 pkgs/data/soundfonts/ydp-grand/default.nix+23 pkgs/data/themes/arc/default.nix+15−12 pkgs/data/themes/dracula-theme/default.nix+1−1 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−25 pkgs/data/themes/graphite-gtk-theme/default.nix+7−4 pkgs/data/themes/greybird/default.nix+16−3 pkgs/data/themes/kwin-decorations/kde-rounded-corners/default.nix+3−3 pkgs/data/themes/layan-kde/default.nix+46 pkgs/data/themes/marwaita/default.nix+5−2 pkgs/data/themes/nordic/default.nix+17−17 pkgs/data/themes/orchis-theme/default.nix+2−2 pkgs/data/themes/vimix/default.nix+12−4 pkgs/data/themes/whitesur/default.nix+38−3 pkgs/data/themes/yaru/default.nix+2−5 pkgs/desktops/arcan/arcan/clone-sources.nix+1−1 pkgs/desktops/arcan/durden/default.nix+7−3 pkgs/desktops/arcan/pipeworld/default.nix+7−3 pkgs/desktops/arcan/prio/default.nix+5−1 pkgs/desktops/arcan/xarcan/default.nix+4−12 pkgs/desktops/cdesktopenv/default.nix+17−4 pkgs/desktops/cinnamon/xreader/default.nix+2−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+4−2 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/file-roller/default.nix+4−16 pkgs/desktops/gnome/apps/gedit/default.nix+5−2 pkgs/desktops/gnome/apps/ghex/default.nix+22−13 pkgs/desktops/gnome/apps/gnome-books/default.nix+12−1 pkgs/desktops/gnome/apps/gnome-boxes/default.nix+9−2 pkgs/desktops/gnome/apps/gnome-boxes/fix-gir-lib-path.patch+22 pkgs/desktops/gnome/apps/gnome-calendar/default.nix+20−36 pkgs/desktops/gnome/apps/gnome-calendar/gtk_image_reset_crash.patch−17 pkgs/desktops/gnome/apps/gnome-characters/default.nix+19−19 pkgs/desktops/gnome/apps/gnome-clocks/default.nix+11−12 pkgs/desktops/gnome/apps/gnome-connections/default.nix+6−4 pkgs/desktops/gnome/apps/gnome-logs/default.nix+8−15 pkgs/desktops/gnome/apps/gnome-maps/default.nix+5−5 pkgs/desktops/gnome/apps/gnome-music/default.nix+8−18 pkgs/desktops/gnome/apps/gnome-nettool/default.nix+61−11 pkgs/desktops/gnome/apps/gnome-notes/default.nix+12−1 pkgs/desktops/gnome/apps/gnome-sound-recorder/default.nix+8−7 pkgs/desktops/gnome/apps/gnome-text-editor/default.nix+2−10 pkgs/desktops/gnome/apps/gnome-todo/default.nix+3−3 pkgs/desktops/gnome/apps/gnome-weather/default.nix+7−9 pkgs/desktops/gnome/apps/polari/default.nix+59−12 pkgs/desktops/gnome/core/adwaita-icon-theme/default.nix+2−2 pkgs/desktops/gnome/core/baobab/default.nix+16−10 pkgs/desktops/gnome/core/dconf-editor/default.nix+13 pkgs/desktops/gnome/core/dconf-editor/schema-override-variable.patch+14 pkgs/desktops/gnome/core/eog/default.nix+23−19 pkgs/desktops/gnome/core/eog/fix-gir-lib-path.patch+13 pkgs/desktops/gnome/core/epiphany/default.nix+2−20 pkgs/desktops/gnome/core/evince/default.nix+17−27 pkgs/desktops/gnome/core/evolution-data-server/default.nix+82−14 pkgs/desktops/gnome/core/gdm/default.nix+4−2 pkgs/desktops/gnome/core/gnome-backgrounds/default.nix+23−8 pkgs/desktops/gnome/core/gnome-bluetooth/1.0/default.nix+97 pkgs/desktops/gnome/core/gnome-bluetooth/default.nix+12−15 pkgs/desktops/gnome/core/gnome-calculator/default.nix+8−16 pkgs/desktops/gnome/core/gnome-contacts/default.nix+14−25 pkgs/desktops/gnome/core/gnome-control-center/default.nix+31−23 pkgs/desktops/gnome/core/gnome-dictionary/default.nix+56−7 pkgs/desktops/gnome/core/gnome-disk-utility/default.nix+2−2 pkgs/desktops/gnome/core/gnome-font-viewer/default.nix+36−8 pkgs/desktops/gnome/core/gnome-initial-setup/default.nix+4−2 pkgs/desktops/gnome/core/gnome-keyring/default.nix+2−3 pkgs/desktops/gnome/core/gnome-remote-desktop/default.nix+33−7 pkgs/desktops/gnome/core/gnome-screenshot/default.nix+54−15 pkgs/desktops/gnome/core/gnome-session/ctl.nix+2−2 pkgs/desktops/gnome/core/gnome-session/default.nix+2−2 pkgs/desktops/gnome/core/gnome-settings-daemon/3.38/default.nix+20−1 pkgs/desktops/gnome/core/gnome-settings-daemon/default.nix+2−2 pkgs/desktops/gnome/core/gnome-shell-extensions/default.nix+2−2 pkgs/desktops/gnome/core/gnome-shell/default.nix+7−8 pkgs/desktops/gnome/core/gnome-shell/wrap-services.patch+5−5 pkgs/desktops/gnome/core/gnome-software/default.nix+8−6 pkgs/desktops/gnome/core/gnome-system-monitor/default.nix+2−10 pkgs/desktops/gnome/core/gnome-terminal/default.nix+5−2 pkgs/desktops/gnome/core/gnome-tour/default.nix+6−11 pkgs/desktops/gnome/core/gnome-user-share/default.nix+5 pkgs/desktops/gnome/core/gucharmap/default.nix+4−4 pkgs/desktops/gnome/core/mutter/3.38/default.nix+3−1 pkgs/desktops/gnome/core/mutter/default.nix+6−4 pkgs/desktops/gnome/core/nautilus/default.nix+4−17 pkgs/desktops/gnome/core/simple-scan/default.nix+3−4 pkgs/desktops/gnome/core/sushi/default.nix+2−2 pkgs/desktops/gnome/core/totem/default.nix+6−8 pkgs/desktops/gnome/core/yelp-xsl/default.nix+2−2 pkgs/desktops/gnome/core/yelp/default.nix+4−2 pkgs/desktops/gnome/core/zenity/default.nix+2−2 pkgs/desktops/gnome/default.nix+8−22 pkgs/desktops/gnome/devtools/devhelp/default.nix+12−1 pkgs/desktops/gnome/extensions/arcmenu/default.nix+2−2 pkgs/desktops/gnome/extensions/collisions.json+50 pkgs/desktops/gnome/extensions/dash-to-dock/default.nix+3−3 pkgs/desktops/gnome/extensions/default.nix+3−2 pkgs/desktops/gnome/extensions/extensionOverrides.nix+28 pkgs/desktops/gnome/extensions/extensionOverridesPatches/freon_at_UshakovVasilii_Github.yahoo.com.patch+15−15 pkgs/desktops/gnome/extensions/extensionRenames.nix+17−9 pkgs/desktops/gnome/extensions/extensions.json+413−346 pkgs/desktops/gnome/extensions/freon/default.nix−61 pkgs/desktops/gnome/extensions/gsconnect/default.nix+4−4 pkgs/desktops/gnome/extensions/impatience/default.nix+3−3 pkgs/desktops/gnome/extensions/manuallyPackaged.nix−2 pkgs/desktops/gnome/extensions/night-theme-switcher/default.nix−35 pkgs/desktops/gnome/extensions/pop-shell/default.nix+3−3 pkgs/desktops/gnome/extensions/sound-output-device-chooser/default.nix+5−3 pkgs/desktops/gnome/extensions/system-monitor/default.nix+11−24 pkgs/desktops/gnome/extensions/update-extensions.py+67−47 pkgs/desktops/gnome/games/aisleriot/default.nix+4−5 pkgs/desktops/gnome/games/five-or-more/default.nix+31−6 pkgs/desktops/gnome/games/gnome-2048/default.nix+12−1 pkgs/desktops/gnome/games/gnome-chess/default.nix+4−3 pkgs/desktops/gnome/games/gnome-mahjongg/default.nix+38−6 pkgs/desktops/gnome/games/gnome-mines/default.nix+2−2 pkgs/desktops/gnome/games/gnome-sudoku/default.nix+2−2 pkgs/desktops/gnome/games/gnome-tetravex/default.nix+45−8 pkgs/desktops/gnome/games/hitori/default.nix+4−5 pkgs/desktops/gnome/games/swell-foop/default.nix+3−4 pkgs/desktops/gnome/games/tali/default.nix+2−2 pkgs/desktops/gnome/misc/gitg/default.nix+10 pkgs/desktops/gnome/misc/gnome-applets/default.nix+2−2 pkgs/desktops/gnome/misc/gnome-flashback/default.nix+6−5 pkgs/desktops/gnome/misc/gnome-panel/default.nix+14−3 pkgs/desktops/gnome/misc/gnome-tweaks/default.nix+4−3 pkgs/desktops/gnome/misc/gpaste/default.nix+9−4 pkgs/desktops/gnome/misc/gpaste/fix-paths.patch+13−7 pkgs/desktops/gnome/misc/metacity/default.nix+2−2 pkgs/desktops/gnome/update.nix+27−11 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+3−7 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+10−5 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+3−3 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+6−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+4−3 pkgs/desktops/mate/mate-backgrounds/default.nix+10−1 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/mate/mate-terminal/default.nix+3−1 pkgs/desktops/mate/mate-tweak/default.nix+4−6 pkgs/desktops/pantheon/apps/appcenter/default.nix+12−2 pkgs/desktops/pantheon/apps/elementary-calculator/default.nix−2 pkgs/desktops/pantheon/apps/elementary-calendar/default.nix−2 pkgs/desktops/pantheon/apps/elementary-camera/default.nix−2 pkgs/desktops/pantheon/apps/elementary-code/default.nix+2−14 pkgs/desktops/pantheon/apps/elementary-dock/default.nix+8 pkgs/desktops/pantheon/apps/elementary-feedback/default.nix−2 pkgs/desktops/pantheon/apps/elementary-files/default.nix−2 pkgs/desktops/pantheon/apps/elementary-mail/default.nix+10−2 pkgs/desktops/pantheon/apps/elementary-music/default.nix−2 pkgs/desktops/pantheon/apps/elementary-photos/default.nix+10−2 pkgs/desktops/pantheon/apps/elementary-screenshot/default.nix−2 pkgs/desktops/pantheon/apps/elementary-tasks/default.nix−2 pkgs/desktops/pantheon/apps/elementary-terminal/default.nix−2 pkgs/desktops/pantheon/apps/elementary-videos/default.nix−2 pkgs/desktops/pantheon/apps/sideload/default.nix−2 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−17 pkgs/desktops/pantheon/apps/switchboard/wrapper.nix+2−1 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+10−12 pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix+6−15 pkgs/desktops/pantheon/desktop/elementary-greeter/fix-crash.patch−21 pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix−2 pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix−2 pkgs/desktops/pantheon/desktop/gala/default.nix+4−17 pkgs/desktops/pantheon/desktop/gnome-bluetooth-contract/default.nix+4−2 pkgs/desktops/pantheon/desktop/wingpanel/default.nix+4−2 pkgs/desktops/pantheon/desktop/wingpanel/wrapper.nix+2−1 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/addons/krunner-ssh.nix+43 pkgs/desktops/plasma-5/3rdparty/kwin/scripts/dynamic-workspaces.nix+1−1 pkgs/desktops/plasma-5/3rdparty/kwin/scripts/krohnkite.nix+2−2 pkgs/desktops/plasma-5/bluedevil.nix+1−1 pkgs/desktops/plasma-5/breeze-grub.nix+1−1 pkgs/desktops/plasma-5/breeze-gtk.nix+1−1 pkgs/desktops/plasma-5/breeze-plymouth/default.nix+1−1 pkgs/desktops/plasma-5/breeze-qt5.nix+1−1 pkgs/desktops/plasma-5/default.nix+7−6 pkgs/desktops/plasma-5/discover.nix+1−1 pkgs/desktops/plasma-5/fetch.sh+1−1 pkgs/desktops/plasma-5/kactivitymanagerd.nix+1−1 pkgs/desktops/plasma-5/kde-cli-tools.nix+1−1 pkgs/desktops/plasma-5/kde-gtk-config/default.nix+1−1 pkgs/desktops/plasma-5/kdecoration.nix+3−3 pkgs/desktops/plasma-5/kdeplasma-addons.nix+1−1 pkgs/desktops/plasma-5/kgamma5.nix+1−1 pkgs/desktops/plasma-5/khotkeys.nix+1−1 pkgs/desktops/plasma-5/kinfocenter.nix+1−1 pkgs/desktops/plasma-5/kmenuedit.nix+1−1 pkgs/desktops/plasma-5/kscreen.nix+3−3 pkgs/desktops/plasma-5/kscreenlocker.nix+1−1 pkgs/desktops/plasma-5/ksshaskpass.nix+1−1 pkgs/desktops/plasma-5/ksystemstats.nix+1−1 pkgs/desktops/plasma-5/kwallet-pam.nix+1−1 pkgs/desktops/plasma-5/kwayland-integration.nix+1−1 pkgs/desktops/plasma-5/kwayland-server/default.nix+1−1 pkgs/desktops/plasma-5/kwin/0001-NixOS-Unwrap-executable-name-for-.desktop-search.patch+4−4 pkgs/desktops/plasma-5/kwin/default.nix+1−1 pkgs/desktops/plasma-5/kwrited.nix+1−1 pkgs/desktops/plasma-5/layer-shell-qt.nix+1−1 pkgs/desktops/plasma-5/libkscreen/default.nix+1−1 pkgs/desktops/plasma-5/libksysguard/0001-qdiriterator-follow-symlinks.patch+2−3 pkgs/desktops/plasma-5/libksysguard/default.nix+1−1 pkgs/desktops/plasma-5/milou.nix+1−1 pkgs/desktops/plasma-5/oxygen.nix+1−1 pkgs/desktops/plasma-5/plasma-browser-integration.nix+1−1 pkgs/desktops/plasma-5/plasma-desktop/default.nix+1−1 pkgs/desktops/plasma-5/plasma-disks.nix+1−1 pkgs/desktops/plasma-5/plasma-integration/default.nix+1−1 pkgs/desktops/plasma-5/plasma-mobile/default.nix+3−3 pkgs/desktops/plasma-5/plasma-nano/default.nix+1−1 pkgs/desktops/plasma-5/plasma-nm/default.nix+1−1 pkgs/desktops/plasma-5/plasma-pa.nix+1−1 pkgs/desktops/plasma-5/plasma-sdk.nix+1−1 pkgs/desktops/plasma-5/plasma-systemmonitor.nix+7−1 pkgs/desktops/plasma-5/plasma-thunderbolt.nix+1−1 pkgs/desktops/plasma-5/plasma-vault/default.nix+1−1 pkgs/desktops/plasma-5/plasma-workspace-wallpapers.nix+1−1 pkgs/desktops/plasma-5/plasma-workspace/0001-startkde.patch+17−26 pkgs/desktops/plasma-5/plasma-workspace/0002-absolute-wallpaper-install-dir.patch+2−2 pkgs/desktops/plasma-5/plasma-workspace/default.nix+1−1 pkgs/desktops/plasma-5/polkit-kde-agent.nix+1−1 pkgs/desktops/plasma-5/powerdevil.nix+1−1 pkgs/desktops/plasma-5/qqc2-breeze-style.nix+1−1 pkgs/desktops/plasma-5/sddm-kcm.nix+1−1 pkgs/desktops/plasma-5/srcs.nix+216−216 pkgs/desktops/plasma-5/systemsettings.nix+1−1 pkgs/desktops/plasma-5/xdg-desktop-portal-kde.nix+1−1 pkgs/desktops/xfce/applications/mousepad/default.nix+2−2 pkgs/desktops/xfce/applications/orage/default.nix+35−41 pkgs/desktops/xfce/applications/xfce4-screensaver/default.nix+49 pkgs/desktops/xfce/applications/xfce4-screenshooter/default.nix+2−2 pkgs/desktops/xfce/applications/xfce4-terminal/default.nix+5−3 pkgs/desktops/xfce/art/xfce4-icon-theme/default.nix+1−5 pkgs/desktops/xfce/art/xfwm4-themes/default.nix+1−5 pkgs/desktops/xfce/core/thunar/default.nix+2−2 pkgs/desktops/xfce/core/xfce4-panel/default.nix+2−2 pkgs/desktops/xfce/default.nix+10−12 pkgs/desktops/xfce/mkXfceDerivation.nix+2−3 pkgs/desktops/xfce/panel-plugins/xfce4-cpufreq-plugin/default.nix+2−2 pkgs/desktops/xfce/panel-plugins/xfce4-cpugraph-plugin/default.nix+1−5 pkgs/desktops/xfce/panel-plugins/xfce4-embed-plugin/default.nix+1−5 pkgs/desktops/xfce/panel-plugins/xfce4-eyes-plugin/default.nix+3−7 pkgs/desktops/xfce/panel-plugins/xfce4-fsguard-plugin/default.nix+1−5 pkgs/desktops/xfce/panel-plugins/xfce4-genmon-plugin/default.nix+1−5 pkgs/desktops/xfce/panel-plugins/xfce4-mailwatch-plugin/default.nix+1−5 pkgs/desktops/xfce/panel-plugins/xfce4-mpc-plugin/default.nix+1−5 pkgs/desktops/xfce/panel-plugins/xfce4-namebar-plugin/default.nix+4−3 pkgs/desktops/xfce/panel-plugins/xfce4-notes-plugin/default.nix+1−5 pkgs/desktops/xfce/panel-plugins/xfce4-sensors-plugin/default.nix+1−5 pkgs/desktops/xfce/panel-plugins/xfce4-systemload-plugin/default.nix+1−5 pkgs/desktops/xfce/panel-plugins/xfce4-timer-plugin/default.nix+1−5 pkgs/desktops/xfce/panel-plugins/xfce4-weather-plugin/default.nix+1−5 pkgs/desktops/xfce/panel-plugins/xfce4-windowck-plugin/default.nix+2−3 pkgs/desktops/xfce/thunar-plugins/dropbox/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/chez-modules/chez-mit/default.nix+8−7 pkgs/development/chez-modules/chez-scmutils/default.nix+8−7 pkgs/development/chez-modules/chez-srfi/default.nix+5−4 pkgs/development/compilers/4th/001-install-manual-fixup.diff+12 pkgs/development/compilers/4th/default.nix+12−5 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−53 pkgs/development/compilers/algol68g/default.nix+1 pkgs/development/compilers/aliceml/default.nix−58 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/bs-platform/ocaml.nix+1−1 pkgs/development/compilers/bupc/default.nix−1 pkgs/development/compilers/carp/default.nix+6 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/ciao/default.nix+2−2 pkgs/development/compilers/coreclr/default.nix−100 pkgs/development/compilers/crystal/build-package.nix+26−4 pkgs/development/compilers/crystal/default.nix+10−2 pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh+14 pkgs/development/compilers/cudatoolkit/common.nix+40−18 pkgs/development/compilers/cudatoolkit/default.nix−83 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/dictu/default.nix+2−2 pkgs/development/compilers/dmd/binary.nix+3−2 pkgs/development/compilers/dotnet/build-dotnet.nix+17−18 pkgs/development/compilers/dotnet/default.nix+136−50

6020 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
.git-blame-ignore-revsnew file+32
@@ -0,0 +1,32 @@
1+# This file contains a list of commits that are not likely what you
2+# are looking for in a blame, such as mass reformatting or renaming.
3+# You can set this file as a default ignore file for blame by running
4+# the following command.
5+#
6+# $ git config blame.ignoreRevsFile .git-blame-ignore-revs
7+#
8+# To temporarily not use this file add
9+# --ignore-revs-file=""
10+# to your blame command.
11+#
12+# The ignoreRevsFile can't be set globally due to blame failing if the file isn't present.
13+# To not have to set the option in every repository it is needed in,
14+# save the following script in your path with the name "git-bblame"
15+# now you can run
16+# $ git bblame $FILE
17+# to use the .git-blame-ignore-revs file if it is present.
18+#
19+# #!/usr/bin/env bash
20+# repo_root=$(git rev-parse --show-toplevel)
21+# if [[ -e $repo_root/.git-blame-ignore-revs ]]; then
22+# git blame --ignore-revs-file="$repo_root/.git-blame-ignore-revs" $@
23+# else
24+# git blame $@
25+# fi
26+
27+
28+# nixos/modules/rename: Sort alphabetically
29+1f71224fe86605ef4cd23ed327b3da7882dad382
30+
31+# nixos: fix module paths in rename.nix
32+d08ede042b74b8199dc748323768227b88efcf7c
.github/CODEOWNERS+43−50
@@ -10,9 +10,6 @@
1010# IMPORTANT NOTE: in order to actually get pinged, commit access is required.
1111# This also holds true for GitHub teams. Since almost none of our teams have write
1212# permissions, you need to list all members of the team with commit access individually.
13−# We still add the team to the list next to its members, this helps keeping things
14−# in sync. (Put non team members before the team to distinguish them.)
15−# See https://github.com/NixOS/nixpkgs/issues/124085 for more details
1613
1714# This file
1815/.github/CODEOWNERS @edolstra
@@ -39,12 +36,13 @@
3936/pkgs/top-level/stage.nix @nbp @Ericson2314 @matthewbauer
4037/pkgs/top-level/splice.nix @Ericson2314 @matthewbauer
4138/pkgs/top-level/release-cross.nix @Ericson2314 @matthewbauer
42−/pkgs/stdenv/generic @Ericson2314 @matthewbauer @cab404
39+/pkgs/stdenv/generic @Ericson2314 @matthewbauer
4340/pkgs/stdenv/cross @Ericson2314 @matthewbauer
44−/pkgs/build-support/cc-wrapper @Ericson2314 @orivej
45−/pkgs/build-support/bintools-wrapper @Ericson2314 @orivej
41+/pkgs/build-support/cc-wrapper @Ericson2314
42+/pkgs/build-support/bintools-wrapper @Ericson2314
4643/pkgs/build-support/setup-hooks @Ericson2314
47−/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
4846
4947# Nixpkgs build-support
5048/pkgs/build-support/writers @lassulus @Profpatsch
@@ -77,6 +75,12 @@
7775# NixOS integration test driver
7876/nixos/lib/test-driver @tfc
7977
78+# Systemd
79+/nixos/modules/system/boot/systemd.nix @NixOS/systemd
80+/nixos/modules/system/boot/systemd @NixOS/systemd
81+/nixos/lib/systemd-*.nix @NixOS/systemd
82+/pkgs/os-specific/linux/systemd @NixOS/systemd
83+
8084# Updaters
8185## update.nix
8286/maintainers/scripts/update.nix @jtojnar
@@ -91,8 +95,7 @@
9195/pkgs/development/python-modules @FRidh @jonringer
9296/doc/languages-frameworks/python.section.md @FRidh
9397/pkgs/development/tools/poetry2nix @adisbladis
94−/pkgs/development/interpreters/python/hooks @FRidh @jonringer @DavHau
95−/pkgs/development/interpreters/python/conda @DavHau
98+/pkgs/development/interpreters/python/hooks @FRidh @jonringer
9699
97100# Haskell
98101/doc/languages-frameworks/haskell.section.md @cdepillabout @sternenseemann @maralorn @expipiplus1
@@ -104,13 +107,13 @@
104107/pkgs/top-level/haskell-packages.nix @cdepillabout @sternenseemann @maralorn @expipiplus1
105108
106109# Perl
107−/pkgs/development/interpreters/perl @volth @stigtsp @zakame
108−/pkgs/top-level/perl-packages.nix @volth @stigtsp @zakame
109−/pkgs/development/perl-modules @volth @stigtsp @zakame
110+/pkgs/development/interpreters/perl @stigtsp @zakame
111+/pkgs/top-level/perl-packages.nix @stigtsp @zakame
112+/pkgs/development/perl-modules @stigtsp @zakame
110113
111114# R
112−/pkgs/applications/science/math/R @jbedo @bcdarwin
113−/pkgs/development/r-modules @jbedo @bcdarwin
115+/pkgs/applications/science/math/R @jbedo
116+/pkgs/development/r-modules @jbedo
114117
115118# Ruby
116119/pkgs/development/interpreters/ruby @marsam
@@ -121,10 +124,6 @@
121124/pkgs/build-support/rust @zowoq
122125/doc/languages-frameworks/rust.section.md @zowoq
123126
124−# Darwin-related
125−/pkgs/stdenv/darwin @NixOS/darwin-maintainers
126−/pkgs/os-specific/darwin @NixOS/darwin-maintainers
127−
128127# C compilers
129128/pkgs/development/compilers/gcc @matthewbauer
130129/pkgs/development/compilers/llvm @matthewbauer
@@ -133,15 +132,6 @@
133132/pkgs/top-level/unix-tools.nix @matthewbauer
134133/pkgs/development/tools/xcbuild @matthewbauer
135134
136−# Beam-related (Erlang, Elixir, LFE, etc)
137−/pkgs/development/beam-modules @gleber
138−/pkgs/development/interpreters/erlang @gleber
139−/pkgs/development/interpreters/lfe @gleber
140−/pkgs/development/interpreters/elixir @gleber
141−/pkgs/development/tools/build-managers/rebar @gleber
142−/pkgs/development/tools/build-managers/rebar3 @gleber
143−/pkgs/development/tools/erlang @gleber
144−
145135# Audio
146136/nixos/modules/services/audio/botamusique.nix @mweinelt
147137/nixos/modules/services/audio/snapserver.nix @mweinelt
@@ -209,7 +199,7 @@
209199/pkgs/development/idris-modules @Infinisil
210200
211201# Bazel
212−/pkgs/development/tools/build-managers/bazel @mboes @Profpatsch
202+/pkgs/development/tools/build-managers/bazel @Profpatsch
213203
214204# NixOS modules for e-mail and dns services
215205/nixos/modules/services/mail/mailman.nix @peti
@@ -226,10 +216,10 @@
226216/pkgs/applications/editors/neovim @jonringer @teto
227217
228218# VimPlugins
229−/pkgs/misc/vim-plugins @jonringer @softinio
219+/pkgs/applications/editors/vim/plugins @jonringer
230220
231221# VsCode Extensions
232−/pkgs/misc/vscode-extensions @jonringer
222+/pkgs/applications/editors/vscode/extensions @jonringer
233223
234224# Prometheus exporter modules and tests
235225/nixos/modules/services/monitoring/prometheus/exporters.nix @WilliButz
@@ -237,25 +227,24 @@
237227/nixos/tests/prometheus-exporters.nix @WilliButz
238228
239229# PHP interpreter, packages, extensions, tests and documentation
240−/doc/languages-frameworks/php.section.md @NixOS/php @aanderse @etu @globin @ma27 @talyz
241−/nixos/tests/php @NixOS/php @aanderse @etu @globin @ma27 @talyz
242−/pkgs/build-support/build-pecl.nix @NixOS/php @aanderse @etu @globin @ma27 @talyz
243−/pkgs/development/interpreters/php @jtojnar @NixOS/php @aanderse @etu @globin @ma27 @talyz
244−/pkgs/development/php-packages @NixOS/php @aanderse @etu @globin @ma27 @talyz
245−/pkgs/top-level/php-packages.nix @jtojnar @NixOS/php @aanderse @etu @globin @ma27 @talyz
230+/doc/languages-frameworks/php.section.md @aanderse @etu @globin @ma27 @talyz
231+/nixos/tests/php @aanderse @etu @globin @ma27 @talyz
232+/pkgs/build-support/build-pecl.nix @aanderse @etu @globin @ma27 @talyz
233+/pkgs/development/interpreters/php @jtojnar @aanderse @etu @globin @ma27 @talyz
234+/pkgs/development/php-packages @aanderse @etu @globin @ma27 @talyz
235+/pkgs/top-level/php-packages.nix @jtojnar @aanderse @etu @globin @ma27 @talyz
246236
247237# Podman, CRI-O modules and related
248−/nixos/modules/virtualisation/containers.nix @NixOS/podman @zowoq @adisbladis
249−/nixos/modules/virtualisation/cri-o.nix @NixOS/podman @zowoq @adisbladis
250−/nixos/modules/virtualisation/podman @NixOS/podman @zowoq @adisbladis
251−/nixos/tests/cri-o.nix @NixOS/podman @zowoq @adisbladis
252−/nixos/tests/podman @NixOS/podman @zowoq @adisbladis
238+/nixos/modules/virtualisation/containers.nix @zowoq @adisbladis
239+/nixos/modules/virtualisation/cri-o.nix @zowoq @adisbladis
240+/nixos/modules/virtualisation/podman @zowoq @adisbladis
241+/nixos/tests/cri-o.nix @zowoq @adisbladis
242+/nixos/tests/podman @zowoq @adisbladis
253243
254244# Docker tools
255−/pkgs/build-support/docker @roberth @utdemir
256−/nixos/tests/docker-tools-overlay.nix @roberth
257−/nixos/tests/docker-tools.nix @roberth
258−/doc/builders/images/dockertools.xml @roberth
245+/pkgs/build-support/docker @roberth
246+/nixos/tests/docker-tools* @roberth
247+/doc/builders/images/dockertools.section.md @roberth
259248
260249# Blockchains
261250/pkgs/applications/blockchains @mmahut @RaghavSood
@@ -267,8 +256,8 @@
267256/pkgs/development/go-packages @kalbasit @Mic92 @zowoq
268257
269258# GNOME
270−/pkgs/desktops/gnome @NixOS/GNOME @jtojnar @hedning
271−/pkgs/desktops/gnome/extensions @piegamesde @NixOS/GNOME @jtojnar @hedning
259+/pkgs/desktops/gnome @jtojnar @hedning
260+/pkgs/desktops/gnome/extensions @piegamesde @jtojnar @hedning
272261
273262# Cinnamon
274263/pkgs/desktops/cinnamon @mkg20001
@@ -289,10 +278,14 @@
289278
290279# Matrix
291280/pkgs/servers/heisenbridge @piegamesde
292−/pkgs/servers/matrix-conduit @piegamesde @pstn
281+/pkgs/servers/matrix-conduit @piegamesde
293282/pkgs/servers/matrix-synapse/matrix-appservice-irc @piegamesde
294283/nixos/modules/services/misc/heisenbridge.nix @piegamesde
295284/nixos/modules/services/misc/matrix-appservice-irc.nix @piegamesde
296−/nixos/modules/services/misc/matrix-conduit.nix @piegamesde @pstn
285+/nixos/modules/services/misc/matrix-conduit.nix @piegamesde
297286/nixos/tests/matrix-appservice-irc.nix @piegamesde
298−/nixos/tests/matrix-conduit.nix @piegamesde @pstn
287+/nixos/tests/matrix-conduit.nix @piegamesde
288+
289+# Dotnet
290+/pkgs/build-support/dotnet @IvarWithoutBones
291+/pkgs/development/compilers/dotnet @IvarWithoutBones
.github/PULL_REQUEST_TEMPLATE.md+15−10
@@ -1,16 +1,10 @@
1+###### Description of changes
2+
13<!--
2−To help with the large amounts of pull requests, we would appreciate your
3−reviews of other pull requests, especially simple package updates. Just leave a
4−comment describing what you have tested in the relevant package/service.
5−Reviewing helps to reduce the average time-to-merge for everyone.
6−Thanks a lot if you do!
7−List of open PRs: https://github.com/NixOS/nixpkgs/pulls
8−Reviewing guidelines: https://nixos.org/manual/nixpkgs/unstable/#chap-reviewing-contributions
4+For package updates please link to a changelog or describe changes, this helps your fellow maintainers discover breaking updates.
5+For new packages please briefly describe the package or provide a link to its homepage.
96-->
107
11−###### Motivation for this change
12−
13−
148###### Things done
159
1610<!-- Please check what applies. Note that these are not hard requirements but merely serve as information for reviewers. -->
@@ -34,3 +28,14 @@ Reviewing guidelines: https://nixos.org/manual/nixpkgs/unstable/#chap-reviewing-
3428 - [ ] (Module addition) Added a release notes entry if adding a new NixOS module
3529 - [ ] (Release notes changes) Ran `nixos/doc/manual/md-to-db.sh` to update generated release notes
3630- [ ] Fits [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md).
31+
32+<!--
33+To help with the large amounts of pull requests, we would appreciate your
34+reviews of other pull requests, especially simple package updates. Just leave a
35+comment describing what you have tested in the relevant package/service.
36+Reviewing helps to reduce the average time-to-merge for everyone.
37+Thanks a lot if you do!
38+
39+List of open PRs: https://github.com/NixOS/nixpkgs/pulls
40+Reviewing guidelines: https://nixos.org/manual/nixpkgs/unstable/#chap-reviewing-contributions
41+-->
.github/labeler.yml+1−5
@@ -5,10 +5,6 @@
55 - pkgs/development/libraries/agda/**/*
66 - pkgs/top-level/agda-packages.nix
77
8−"6.topic: bsd":
9− - pkgs/os-specific/bsd/**/*
10− - pkgs/stdenv/freebsd/**/*
11−
128"6.topic: cinnamon":
139 - pkgs/desktops/cinnamon/**/*
1410
@@ -142,7 +138,7 @@
142138"6.topic: vim":
143139 - doc/languages-frameworks/vim.section.md
144140 - pkgs/applications/editors/vim/**/*
145− - pkgs/misc/vim-plugins/**/*
141+ - pkgs/applications/editors/vim/plugins/**/*
146142 - nixos/modules/programs/neovim.nix
147143 - pkgs/applications/editors/neovim/**/*
148144
.github/workflows/backport.yml+7−1
@@ -2,13 +2,19 @@ name: Backport
22on:
33 pull_request_target:
44 types: [closed, labeled]
5+
6+# WARNING:
7+# When extending this action, be aware that $GITHUB_TOKEN allows write access to
8+# the GitHub repository. This means that it should not evaluate user input in a
9+# way that allows code injection.
10+
511jobs:
612 backport:
713 name: Backport Pull Request
814 if: github.repository_owner == 'NixOS' && github.event.pull_request.merged == true && (github.event_name != 'labeled' || startsWith('backport', github.event.label.name))
915 runs-on: ubuntu-latest
1016 steps:
11− - uses: actions/checkout@v2
17+ - uses: actions/checkout@v3
1218 with:
1319 # required to find all branches
1420 fetch-depth: 0
.github/workflows/basic-eval.yml+16−10
@@ -1,20 +1,26 @@
11name: Basic evaluation checks
22
33on:
4− pull_request:
5− branches:
6− - master
7− - release-**
8− push:
9− branches:
10− - master
11− - release-**
4+ workflow_dispatch
5+ # pull_request:
6+ # branches:
7+ # - master
8+ # - release-**
9+ # push:
10+ # branches:
11+ # - master
12+ # - release-**
1213jobs:
1314 tests:
1415 runs-on: ubuntu-latest
1516 # we don't limit this action to only NixOS repo since the checks are cheap and useful developer feedback
1617 steps:
17− - uses: actions/checkout@v2
18− - uses: cachix/install-nix-action@v16
18+ - uses: actions/checkout@v3
19+ - uses: cachix/install-nix-action@v17
20+ - uses: cachix/cachix-action@v10
21+ with:
22+ # This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
23+ name: nixpkgs-ci
24+ signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
1925 # explicit list of supportedSystems is needed until aarch64-darwin becomes part of the trunk jobset
2026 - run: nix-build pkgs/top-level/release.nix -A tarball.nixpkgs-basic-release-checks --arg supportedSystems '[ "aarch64-darwin" "aarch64-linux" "x86_64-linux" "x86_64-darwin" ]'
.github/workflows/direct-push.yml+1−1
@@ -22,7 +22,7 @@ jobs:
2222 if: steps.ismerge.outputs.ismerge != 'true'
2323 - name: Warn if the commit was a direct push
2424 if: steps.ismerge.outputs.ismerge != 'true'
25− uses: peter-evans/commit-comment@v1
25+ uses: peter-evans/commit-comment@v2
2626 with:
2727 body: |
2828 @${{ github.actor }}, you pushed a commit directly to master/release branch
.github/workflows/editorconfig.yml+2−2
@@ -24,11 +24,11 @@ jobs:
2424 - name: print list of changed files
2525 run: |
2626 cat "$HOME/changed_files"
27− - uses: actions/checkout@v2
27+ - uses: actions/checkout@v3
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/labels.yml+6−1
@@ -4,6 +4,11 @@ on:
44 pull_request_target:
55 types: [edited, opened, synchronize, reopened]
66
7+# WARNING:
8+# When extending this action, be aware that $GITHUB_TOKEN allows some write
9+# access to the GitHub API. This means that it should not evaluate user input in
10+# a way that allows code injection.
11+
712permissions:
813 contents: read
914 pull-requests: write
@@ -13,7 +18,7 @@ jobs:
1318 runs-on: ubuntu-latest
1419 if: github.repository_owner == 'NixOS'
1520 steps:
16− - uses: actions/labeler@v3
21+ - uses: actions/labeler@v4
1722 with:
1823 repo-token: ${{ secrets.GITHUB_TOKEN }}
1924 sync-labels: true
.github/workflows/manual-nixos.yml+3−3
@@ -14,17 +14,17 @@ jobs:
1414 runs-on: ubuntu-latest
1515 if: github.repository_owner == 'NixOS'
1616 steps:
17− - uses: actions/checkout@v2
17+ - uses: actions/checkout@v3
1818 with:
1919 # pull_request_target checks out the base branch by default
2020 ref: refs/pull/${{ github.event.pull_request.number }}/merge
21− - uses: cachix/install-nix-action@v16
21+ - uses: cachix/install-nix-action@v17
2222 with:
2323 # explicitly enable sandbox
2424 extra_nix_config: sandbox = true
2525 - uses: cachix/cachix-action@v10
2626 with:
27− # This cache is for the nixos/nixpkgs manual builds and should not be trusted or used elsewhere.
27+ # This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
2828 name: nixpkgs-ci
2929 signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
3030 - name: Building NixOS manual
.github/workflows/manual-nixpkgs.yml+3−3
@@ -14,17 +14,17 @@ jobs:
1414 runs-on: ubuntu-latest
1515 if: github.repository_owner == 'NixOS'
1616 steps:
17− - uses: actions/checkout@v2
17+ - uses: actions/checkout@v3
1818 with:
1919 # pull_request_target checks out the base branch by default
2020 ref: refs/pull/${{ github.event.pull_request.number }}/merge
21− - uses: cachix/install-nix-action@v16
21+ - uses: cachix/install-nix-action@v17
2222 with:
2323 # explicitly enable sandbox
2424 extra_nix_config: sandbox = true
2525 - uses: cachix/cachix-action@v10
2626 with:
27− # This cache is for the nixos/nixpkgs manual builds and should not be trusted or used elsewhere.
27+ # This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
2828 name: nixpkgs-ci
2929 signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
3030 - name: Building Nixpkgs manual
.github/workflows/nixos-manual.yml+2−2
@@ -15,11 +15,11 @@ jobs:
1515 runs-on: ubuntu-latest
1616 if: github.repository_owner == 'NixOS'
1717 steps:
18− - uses: actions/checkout@v2
18+ - uses: actions/checkout@v3
1919 with:
2020 # pull_request_target checks out the base branch by default
2121 ref: refs/pull/${{ github.event.pull_request.number }}/merge
22− - uses: cachix/install-nix-action@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/pending-set.yml+5
@@ -3,6 +3,11 @@ name: "set pending status"
33on:
44 pull_request_target:
55
6+# WARNING:
7+# When extending this action, be aware that $GITHUB_TOKEN allows write access to
8+# the GitHub repository. This means that it should not evaluate user input in a
9+# way that allows code injection.
10+
611jobs:
712 action:
813 runs-on: ubuntu-latest
.github/workflows/periodic-merge-24h.yml+2−2
@@ -38,7 +38,7 @@ jobs:
3838 into: staging-21.11
3939 name: ${{ matrix.pairs.from }} → ${{ matrix.pairs.into }}
4040 steps:
41− - uses: actions/checkout@v2
41+ - uses: actions/checkout@v3
4242
4343 - name: ${{ matrix.pairs.from }} → ${{ matrix.pairs.into }}
4444 uses: devmasx/merge-branch@1.4.0
@@ -49,7 +49,7 @@ jobs:
4949 github_token: ${{ secrets.GITHUB_TOKEN }}
5050
5151 - name: Comment on failure
52− uses: peter-evans/create-or-update-comment@v1
52+ uses: peter-evans/create-or-update-comment@v2
5353 if: ${{ failure() }}
5454 with:
5555 issue-number: 105153
.github/workflows/periodic-merge-6h.yml+2−2
@@ -32,7 +32,7 @@ jobs:
3232 into: staging
3333 name: ${{ matrix.pairs.from }} → ${{ matrix.pairs.into }}
3434 steps:
35− - uses: actions/checkout@v2
35+ - uses: actions/checkout@v3
3636
3737 - name: ${{ matrix.pairs.from }} → ${{ matrix.pairs.into }}
3838 uses: devmasx/merge-branch@1.4.0
@@ -43,7 +43,7 @@ jobs:
4343 github_token: ${{ secrets.GITHUB_TOKEN }}
4444
4545 - name: Comment on failure
46− uses: peter-evans/create-or-update-comment@v1
46+ uses: peter-evans/create-or-update-comment@v2
4747 if: ${{ failure() }}
4848 with:
4949 issue-number: 105153
.github/workflows/update-terraform-providers.yml+9−8
@@ -10,8 +10,8 @@ jobs:
1010 if: github.repository_owner == 'NixOS' && github.ref == 'refs/heads/master' # ensure workflow_dispatch only runs on master
1111 runs-on: ubuntu-latest
1212 steps:
13− - uses: actions/checkout@v2
14− - uses: cachix/install-nix-action@v16
13+ - uses: actions/checkout@v3
14+ - uses: cachix/install-nix-action@v17
1515 - name: setup
1616 id: setup
1717 run: |
@@ -25,21 +25,22 @@ 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"
3940 title: ${{ steps.setup.outputs.title }}
4041 token: ${{ secrets.GITHUB_TOKEN }}
4142 - name: comment on failure
42− uses: peter-evans/create-or-update-comment@v1
43+ uses: peter-evans/create-or-update-comment@v2
4344 if: ${{ failure() }}
4445 with:
4546 issue-number: 153416
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).
README.md+6−1
@@ -1,5 +1,10 @@
11<p align="center">
2− <a href="https://nixos.org/nixos"><img src="https://nixos.org/logo/nixos-hires.png" width="500px" alt="NixOS logo" /></a>
2+ <a href="https://nixos.org#gh-light-mode-only">
3+ <img src="https://raw.githubusercontent.com/NixOS/nixos-homepage/master/logo/nixos-hires.png" width="500px" alt="NixOS logo"/>
4+ </a>
5+ <a href="https://nixos.org#gh-dark-mode-only">
6+ <img src="https://raw.githubusercontent.com/NixOS/nixos-artwork/master/logo/nixos-white.png" width="500px" alt="NixOS logo"/>
7+ </a>
38</p>
49
510<p align="center">
doc/builders/fetchers.chapter.md+16−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 }:
@@ -72,19 +72,23 @@ Used with Mercurial. Expects `url`, `rev`, and `sha256`.
7272
7373A number of fetcher functions wrap part of `fetchurl` and `fetchzip`. They are mainly convenience functions intended for commonly used destinations of source code in Nixpkgs. These wrapper fetchers are listed below.
7474
75+## `fetchFromGitea` {#fetchfromgitea}
76+
77+`fetchFromGitea` expects five arguments. `domain` is the gitea server name. `owner` is a string corresponding to the Gitea user or organization that controls this repository. `repo` corresponds to the name of the software repository. These are located at the top of every Gitea HTML page as `owner`/`repo`. `rev` corresponds to the Git commit hash or tag (e.g `v1.0`) that will be downloaded from Git. Finally, `sha256` corresponds to the hash of the extracted directory. Again, other hash algorithms are also available but `sha256` is currently preferred.
78+
7579## `fetchFromGitHub` {#fetchfromgithub}
7680
77−`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.
7882
7983`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.
8084
8185## `fetchFromGitLab` {#fetchfromgitlab}
8286
83−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.
8488
8589## `fetchFromGitiles` {#fetchfromgitiles}
8690
87−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`.
8892
8993## `fetchFromBitbucket` {#fetchfrombitbucket}
9094
@@ -92,11 +96,11 @@ This is used with BitBucket repositories. The arguments expected are very simila
9296
9397## `fetchFromSavannah` {#fetchfromsavannah}
9498
95−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.
96100
97101## `fetchFromRepoOrCz` {#fetchfromrepoorcz}
98102
99−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.
100104
101105## `fetchFromSourcehut` {#fetchfromsourcehut}
102106
@@ -107,4 +111,4 @@ or "hg"), `domain` and `fetchSubmodules`.
107111
108112If `fetchSubmodules` is `true`, `fetchFromSourcehut` uses `fetchgit`
109113or `fetchhg` with `fetchSubmodules` or `fetchSubrepos` set to `true`,
110−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-native` package and run the game with
59+The FHS-compatible chroot used for Steam can also be used to run other Linux games that expect a FHS environment. To use it, install the `steam-run` package and run the game with:
6060
6161```
6262steam-run ./foo
doc/builders/packages/urxvt.section.md+4−4
@@ -4,7 +4,7 @@ Urxvt, also known as rxvt-unicode, is a highly customizable terminal emulator.
44
55## Configuring urxvt {#sec-urxvt-conf}
66
7−In `nixpkgs`, urxvt is provided by the package `rxvt-unicode`. It can be configured to include your choice of plugins, reducing its closure size from the default configuration which includes all available plugins. To make use of this functionality, use an overlay or directly install an expression that overrides its configuration, such as
7+In `nixpkgs`, urxvt is provided by the package `rxvt-unicode`. It can be configured to include your choice of plugins, reducing its closure size from the default configuration which includes all available plugins. To make use of this functionality, use an overlay or directly install an expression that overrides its configuration, such as:
88
99```nix
1010rxvt-unicode.override {
@@ -58,14 +58,14 @@ rxvt-unicode.override {
5858
5959## Packaging urxvt plugins {#sec-urxvt-pkg}
6060
61−Urxvt plugins resides in `pkgs/applications/misc/rxvt-unicode-plugins`. To add a new plugin create an expression in a subdirectory and add the package to the set in `pkgs/applications/misc/rxvt-unicode-plugins/default.nix`.
61+Urxvt plugins resides in `pkgs/applications/misc/rxvt-unicode-plugins`. To add a new plugin, create an expression in a subdirectory and add the package to the set in `pkgs/applications/misc/rxvt-unicode-plugins/default.nix`.
6262
6363A plugin can be any kind of derivation, the only requirement is that it should always install perl scripts in `$out/lib/urxvt/perl`. Look for existing plugins for examples.
6464
65−If the plugin is itself a perl package that needs to be imported from other plugins or scripts, add the following passthrough:
65+If the plugin is itself a Perl package that needs to be imported from other plugins or scripts, add the following passthrough:
6666
6767```nix
6868passthru.perlPackages = [ "self" ];
6969```
7070
71−This will make the urxvt wrapper pick up the dependency and set up the perl path accordingly.
71+This will make the urxvt wrapper pick up the dependency and set up the Perl path accordingly.
doc/builders/packages/weechat.section.md+5−5
@@ -1,6 +1,6 @@
1−# Weechat {#sec-weechat}
1+# WeeChat {#sec-weechat}
22
3−Weechat can be configured to include your choice of plugins, reducing its closure size from the default configuration which includes all available plugins. To make use of this functionality, install an expression that overrides its configuration such as
3+WeeChat can be configured to include your choice of plugins, reducing its closure size from the default configuration which includes all available plugins. To make use of this functionality, install an expression that overrides its configuration, such as:
44
55```nix
66weechat.override {configure = {availablePlugins, ...}: {
@@ -13,7 +13,7 @@ If the `configure` function returns an attrset without the `plugins` attribute,
1313
1414The plugins currently available are `python`, `perl`, `ruby`, `guile`, `tcl` and `lua`.
1515
16−The python and perl plugins allows the addition of extra libraries. For instance, the `inotify.py` script in `weechat-scripts` requires D-Bus or libnotify, and the `fish.py` script requires `pycrypto`. To use these scripts, use the plugin's `withPackages` attribute:
16+The Python and Perl plugins allows the addition of extra libraries. For instance, the `inotify.py` script in `weechat-scripts` requires D-Bus or libnotify, and the `fish.py` script requires `pycrypto`. To use these scripts, use the plugin's `withPackages` attribute:
1717
1818```nix
1919weechat.override { configure = {availablePlugins, ...}: {
@@ -49,7 +49,7 @@ weechat.override {
4949
5050Further values can be added to the list of commands when running `weechat --run-command "your-commands"`.
5151
52−Additionally it's possible to specify scripts to be loaded when starting `weechat`. These will be loaded before the commands from `init`:
52+Additionally, it's possible to specify scripts to be loaded when starting `weechat`. These will be loaded before the commands from `init`:
5353
5454```nix
5555weechat.override {
@@ -64,7 +64,7 @@ weechat.override {
6464}
6565```
6666
67−In `nixpkgs` there's a subpackage which contains derivations for WeeChat scripts. Such derivations expect a `passthru.scripts` attribute which contains a list of all scripts inside the store path. Furthermore all scripts have to live in `$out/share`. An exemplary derivation looks like this:
67+In `nixpkgs` there's a subpackage which contains derivations for WeeChat scripts. Such derivations expect a `passthru.scripts` attribute, which contains a list of all scripts inside the store path. Furthermore, all scripts have to live in `$out/share`. An exemplary derivation looks like this:
6868
6969```nix
7070{ stdenv, fetchurl }:
doc/builders/special.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/fhs-environments.section.md+2
@@ -45,3 +45,5 @@ One can create a simple environment using a `shell.nix` like that:
4545```
4646
4747Running `nix-shell` would then drop you into a shell with these libraries and binaries available. You can use this to run closed-source applications which expect FHS structure without hassles: simply change `runScript` to the application path, e.g. `./bin/start.sh` -- relative paths are supported.
48+
49+Additionally, the FHS builder links all relocated gsettings-schemas (the glib setup-hook moves them to `share/gsettings-schemas/${name}/glib-2.0/schemas`) to their standard FHS location. This means you don't need to wrap binaries with `wrapGAppsHook`.
doc/builders/special/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+8−7
@@ -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
@@ -540,10 +540,11 @@ If you do need to do create this sort of patch file, one way to do so is with gi
540540
541541If a patch is available online but does not cleanly apply, it can be modified in some fixed ways by using additional optional arguments for `fetchpatch`:
542542
543+- `relative`: Similar to using `git-diff`'s `--relative` flag, only keep changes inside the specified directory, making paths relative to it.
543544- `stripLen`: Remove the first `stripLen` components of pathnames in the patch.
544545- `extraPrefix`: Prefix pathnames by this string.
545−- `excludes`: Exclude files matching this pattern.
546−- `includes`: Include only files matching this pattern.
546+- `excludes`: Exclude files matching these patterns (applies after the above arguments).
547+- `includes`: Include only files matching these patterns (applies after the above arguments).
547548- `revert`: Revert the patch.
548549
549550Note that because the checksum is computed after applying these effects, using or modifying these arguments will have no effect unless the `sha256` argument is changed as well.
doc/contributing/reviewing-contributions.chapter.md+3−3
@@ -122,10 +122,10 @@ Reviewing process:
122122 - [CODEOWNERS](https://help.github.com/articles/about-codeowners/) will make GitHub notify users based on the submitted changes, but it can happen that it misses some of the package maintainers.
123123- Ensure that the module tests, if any, are succeeding.
124124- Ensure that the introduced options are correct.
125− - Type should be appropriate (string related types differs in their merging capabilities, `optionSet` and `string` types are deprecated).
125+ - Type should be appropriate (string related types differs in their merging capabilities, `loaOf` and `string` types are deprecated).
126126 - Description, default and example should be provided.
127127- Ensure that option changes are backward compatible.
128− - `mkRenamedOptionModule` and `mkAliasOptionModule` functions provide way to make option changes backward compatible.
128+ - `mkRenamedOptionModuleWith` provides a way to make option changes backward compatible.
129129- Ensure that removed options are declared with `mkRemovedOptionModule`
130130- Ensure that changes that are not backward compatible are mentioned in release notes.
131131- Ensure that documentations affected by the change is updated.
@@ -157,7 +157,7 @@ Reviewing process:
157157
158158- Ensure that the module tests, if any, are succeeding.
159159- Ensure that the introduced options are correct.
160− - Type should be appropriate (string related types differs in their merging capabilities, `optionSet` and `string` types are deprecated).
160+ - Type should be appropriate (string related types differs in their merging capabilities, `loaOf` and `string` types are deprecated).
161161 - Description, default and example should be provided.
162162- Ensure that module `meta` field is present
163163 - Maintainers should be declared in `meta.maintainers`.
doc/contributing/submitting-changes.chapter.md+2−2
@@ -96,9 +96,9 @@ We use jbidwatcher as an example for a discontinued project here.
9696
97971. Have Nixpkgs checked out locally and up to date.
98981. Create a new branch for your change, e.g. `git checkout -b jbidwatcher`
99−1. Remove the actual package including its directory, e.g. `rm -rf pkgs/applications/misc/jbidwatcher`
99+1. Remove the actual package including its directory, e.g. `git rm -rf pkgs/applications/misc/jbidwatcher`
1001001. Remove the package from the list of all packages (`pkgs/top-level/all-packages.nix`).
101−1. Add an alias for the package name in `pkgs/top-level/aliases.nix` (There is also `pkgs/misc/vim-plugins/aliases.nix`. Package sets typically do not have aliases, so we can't add them there.)
101+1. Add an alias for the package name in `pkgs/top-level/aliases.nix` (There is also `pkgs/applications/editors/vim/plugins/aliases.nix`. Package sets typically do not have aliases, so we can't add them there.)
102102
103103 For example in this case:
104104
doc/functions/library/attrsets.xml+1−1
@@ -1474,7 +1474,7 @@ lib.attrsets.zipAttrsWith
14741474 <section xml:id="function-library-lib.attrsets.zipAttrs">
14751475 <title><function>lib.attrsets.zipAttrs</function></title>
14761476
1477− <subtitle><literal>zipAttrsWith :: [ AttrSet ] -> AttrSet</literal>
1477+ <subtitle><literal>zipAttrs :: [ AttrSet ] -> AttrSet</literal>
14781478 </subtitle>
14791479
14801480 <xi:include href="./locations.xml" xpointer="lib.attrsets.zipAttrs" />
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/coq.section.md+2−1
@@ -29,7 +29,8 @@ The recommended way of defining a derivation for a Coq library, is to use the `c
2929* `releaseRev` (optional, defaults to `(v: v)`), provides a default mapping from release names to revision hashes/branch names/tags,
3030* `displayVersion` (optional), provides a way to alter the computation of `name` from `pname`, by explaining how to display version numbers,
3131* `namePrefix` (optional, defaults to `[ "coq" ]`), provides a way to alter the computation of `name` from `pname`, by explaining which dependencies must occur in `name`,
32−* `extraBuildInputs` (optional), by default `buildInputs` just contains `coq`, this allows to add more build inputs,
32+* `extraNativeBuildInputs` (optional), by default `nativeBuildInputs` just contains `coq`, this allows to add more native build inputs, `nativeBuildInputs` are executables and `buildInputs` are libraries and dependencies,
33+* `extraBuildInputs` (optional), this allows to add more build inputs,
3334* `mlPlugin` (optional, defaults to `false`). Some extensions (plugins) might require OCaml and sometimes other OCaml packages. Standard dependencies can be added by setting the current option to `true`. For a finer grain control, the `coq.ocamlPackages` attribute can be used in `extraBuildInputs` to depend on the same package set Coq was built against.
3435* `useDune2ifVersion` (optional, default to `(x: false)` uses Dune2 to build the package if the provided predicate evaluates to true on the version, e.g. `useDune2if = versions.isGe "1.1"` will use dune if the version of the package is greater or equal to `"1.1"`,
3536* `useDune2` (optional, defaults to `false`) uses Dune2 to build the package if set to true, the presence of this attribute overrides the behavior of the previous one.
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/languages-frameworks/javascript.section.md+24−2
@@ -85,7 +85,7 @@ you will still need to commit the modified version of the lock files, but at lea
8585
8686each tool has an abstraction to just build the node_modules (dependencies) directory. you can always use the stdenv.mkDerivation with the node_modules to build the package (symlink the node_modules directory and then use the package build command). the node_modules abstraction can be also used to build some web framework frontends. For an example of this see how [plausible](https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/web-apps/plausible/default.nix) is built. mkYarnModules to make the derivation containing node_modules. Then when building the frontend you can just symlink the node_modules directory
8787
88−## javascript packages inside nixpkgs {#javascript-packages-nixpkgs}
88+## Javascript packages inside nixpkgs {#javascript-packages-nixpkgs}
8989
9090The `pkgs/development/node-packages` folder contains a generated collection of
9191[NPM packages](https://npmjs.com/) that can be installed with the Nix package
@@ -121,12 +121,14 @@ requires `node-gyp-build`, so [we override](https://github.com/NixOS/nixpkgs/blo
121121 };
122122```
123123
124+### Adding and Updating Javascript packages in nixpkgs
125+
124126To add a package from NPM to nixpkgs:
125127
1261281. Modify `pkgs/development/node-packages/node-packages.json` to add, update
127129 or remove package entries to have it included in `nodePackages` and
128130 `nodePackages_latest`.
129−2. Run the script: `cd pkgs/development/node-packages && ./generate.sh`.
131+2. Run the script: `./pkgs/development/node-packages/generate.sh`.
1301323. Build your new package to test your changes:
131133 `cd /path/to/nixpkgs && nix-build -A nodePackages.<new-or-updated-package>`.
132134 To build against the latest stable Current Node.js version (e.g. 14.x):
@@ -137,6 +139,26 @@ For more information about the generation process, consult the
137139[README.md](https://github.com/svanderburg/node2nix) file of the `node2nix`
138140tool.
139141
142+To update NPM packages in nixpkgs, run the same `generate.sh` script:
143+
144+```sh
145+./pkgs/development/node-packages/generate.sh
146+```
147+
148+#### Git protocol error
149+
150+Some packages may have Git dependencies from GitHub specified with `git://`.
151+GitHub has
152+[disabled unecrypted Git connections](https://github.blog/2021-09-01-improving-git-protocol-security-github/#no-more-unauthenticated-git),
153+so you may see the following error when running the generate script:
154+`The unauthenticated git protocol on port 9418 is no longer supported`.
155+
156+Use the following Git configuration to resolve the issue:
157+
158+```sh
159+git config --global url."https://github.com/".insteadOf git://github.com/
160+```
161+
140162## Tool specific instructions {#javascript-tool-specific}
141163
142164### node2nix {#javascript-node2nix}
doc/languages-frameworks/ocaml.section.md+7−3
@@ -38,8 +38,12 @@ Here is a simple package example.
3838
3939- It uses the `fetchFromGitHub` fetcher to get its source.
4040
41−- `useDune2 = true` ensures that the latest version of Dune is used for the
42− build (this may become the default value in a future release).
41+- `duneVersion = "2"` ensures that Dune version 2 is used for the
42+ build (this is the default; valid values are `"1"`, `"2"`, and `"3"`);
43+ note that there is also a legacy `useDune2` boolean attribute:
44+ set to `false` it corresponds to `duneVersion = "1"`; set to `true` it
45+ corresponds to `duneVersion = "2"`. If both arguments (`duneVersion` and
46+ `useDune2`) are given, the second one (`useDune2`) is silently ignored.
4347
4448- It sets the optional `doCheck` attribute such that tests will be run with
4549 `dune runtest -p angstrom` after the build (`dune build -p angstrom`) is
@@ -67,7 +71,7 @@ Here is a simple package example.
6771buildDunePackage rec {
6872 pname = "angstrom";
6973 version = "0.15.0";
70− useDune2 = true;
74+ duneVersion = "2";
7175
7276 minimalOCamlVersion = "4.04";
7377
doc/languages-frameworks/python.section.md+25
@@ -979,6 +979,31 @@ with import <nixpkgs> {};
979979in python.withPackages(ps: [ps.blaze])).env
980980```
981981
982+#### Optional extra dependencies
983+
984+Some packages define optional dependencies for additional features. With
985+`setuptools` this is called `extras_require` and `flit` calls it `extras-require`. A
986+method for supporting this is by declaring the extras of a package in its
987+`passthru`, e.g. in case of the package `dask`
988+
989+```nix
990+passthru.extras-require = {
991+ complete = [ distributed ];
992+};
993+```
994+
995+and letting the package requiring the extra add the list to its dependencies
996+
997+```nix
998+propagatedBuildInputs = [
999+ ...
1000+] ++ dask.extras-require.complete;
1001+```
1002+
1003+Note this method is preferred over adding parameters to builders, as that can
1004+result in packages depending on different variants and thereby causing
1005+collisions.
1006+
9821007#### `buildPythonApplication` function {#buildpythonapplication-function}
9831008
9841009The `buildPythonApplication` function is practically the same as
doc/languages-frameworks/rust.section.md+2
@@ -464,6 +464,8 @@ you of the correct hash.
464464 be disabled by setting `dontUseCargoParallelTests`.
465465* `cargoInstallHook`: install binaries and static/shared libraries
466466 that were built using `cargoBuildHook`.
467+* `bindgenHook`: for crates which use `bindgen` as a build dependency, lets
468+ `bindgen` find `libclang` and `libclang` find the libraries in `buildInputs`.
467469
468470### Examples {#examples}
469471
doc/languages-frameworks/texlive.section.md+1−1
@@ -6,7 +6,7 @@ Since release 15.09 there is a new TeX Live packaging that lives entirely under
66
77- For basic usage just pull `texlive.combined.scheme-basic` for an environment with basic LaTeX support.
88
9−- It typically won't work to use separately installed packages together. Instead, you can build a custom set of packages like this:
9+- It typically won't work to use separately installed packages together. Instead, you can build a custom set of packages like this. Most CTAN packages should be available:
1010
1111 ```nix
1212 texlive.combine {
doc/languages-frameworks/vim.section.md+9−6
@@ -18,7 +18,7 @@ Adding custom .vimrc lines can be done using the following code:
1818
1919```nix
2020vim_configurable.customize {
21− # `name` specifies the name of the executable and package
21+ # `name` optionally specifies the name of the executable and package
2222 name = "vim-with-plugins";
2323
2424 vimrcConfig.customRC = ''
@@ -28,6 +28,9 @@ vim_configurable.customize {
2828```
2929
3030This configuration is used when Vim is invoked with the command specified as name, in this case `vim-with-plugins`.
31+You can also omit `name` to customize Vim itself. See the
32+[definition of `vimUtils.makeCustomizable`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/vim-utils.nix#L408)
33+for all supported options.
3134
3235For Neovim the `configure` argument can be overridden to achieve the same:
3336
@@ -286,7 +289,7 @@ Sample output1:
286289"reload" = buildVimPluginFrom2Nix { # created by nix#NixDerivation
287290 name = "reload";
288291 src = fetchgit {
289− url = "git://github.com/xolox/vim-reload";
292+ url = "https://github.com/xolox/vim-reload";
290293 rev = "0a601a668727f5b675cb1ddc19f6861f3f7ab9e1";
291294 sha256 = "0vb832l9yxj919f5hfg6qj6bn9ni57gnjd3bj7zpq7d4iv2s4wdh";
292295 };
@@ -309,9 +312,9 @@ Sample output2:
309312
310313## Adding new plugins to nixpkgs {#adding-new-plugins-to-nixpkgs}
311314
312−Nix expressions for Vim plugins are stored in [pkgs/misc/vim-plugins](https://github.com/NixOS/nixpkgs/tree/master/pkgs/misc/vim-plugins). For the vast majority of plugins, Nix expressions are automatically generated by running [`./update.py`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/misc/vim-plugins/update.py). This creates a [generated.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/misc/vim-plugins/generated.nix) file based on the plugins listed in [vim-plugin-names](https://github.com/NixOS/nixpkgs/blob/master/pkgs/misc/vim-plugins/vim-plugin-names). Plugins are listed in alphabetical order in `vim-plugin-names` using the format `[github username]/[repository]@[gitref]`. For example https://github.com/scrooloose/nerdtree becomes `scrooloose/nerdtree`.
315+Nix expressions for Vim plugins are stored in [pkgs/applications/editors/vim/plugins](https://github.com/NixOS/nixpkgs/tree/master/pkgs/applications/editors/vim/plugins). For the vast majority of plugins, Nix expressions are automatically generated by running [`./update.py`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/update.py). This creates a [generated.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/generated.nix) file based on the plugins listed in [vim-plugin-names](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/vim-plugin-names). Plugins are listed in alphabetical order in `vim-plugin-names` using the format `[github username]/[repository]@[gitref]`. For example https://github.com/scrooloose/nerdtree becomes `scrooloose/nerdtree`.
313316
314−Some plugins require overrides in order to function properly. Overrides are placed in [overrides.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/misc/vim-plugins/overrides.nix). Overrides are most often required when a plugin requires some dependencies, or extra steps are required during the build process. For example `deoplete-fish` requires both `deoplete-nvim` and `vim-fish`, and so the following override was added:
317+Some plugins require overrides in order to function properly. Overrides are placed in [overrides.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/overrides.nix). Overrides are most often required when a plugin requires some dependencies, or extra steps are required during the build process. For example `deoplete-fish` requires both `deoplete-nvim` and `vim-fish`, and so the following override was added:
315318
316319```nix
317320deoplete-fish = super.deoplete-fish.overrideAttrs(old: {
@@ -330,13 +333,13 @@ Finally, there are some plugins that are also packaged in nodePackages because t
330333Run the update script with a GitHub API token that has at least `public_repo` access. Running the script without the token is likely to result in rate-limiting (429 errors). For steps on creating an API token, please refer to [GitHub's token documentation](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token).
331334
332335```sh
333−GITHUB_API_TOKEN=my_token ./pkgs/misc/vim-plugins/update.py
336+GITHUB_API_TOKEN=my_token ./pkgs/applications/editors/vim/plugins/update.py
334337```
335338
336339Alternatively, set the number of processes to a lower count to avoid rate-limiting.
337340
338341```sh
339−./pkgs/misc/vim-plugins/update.py --proc 1
342+./pkgs/applications/editors/vim/plugins/update.py --proc 1
340343```
341344
342345## Important repositories {#important-repositories}
doc/manual.xml+2
@@ -25,8 +25,10 @@
2525 <title>Builders</title>
2626 <xi:include href="builders/fetchers.chapter.xml" />
2727 <xi:include href="builders/trivial-builders.chapter.xml" />
28+ <xi:include href="builders/testers.chapter.xml" />
2829 <xi:include href="builders/special.xml" />
2930 <xi:include href="builders/images.xml" />
31+ <xi:include href="hooks/index.xml" />
3032 <xi:include href="languages-frameworks/index.xml" />
3133 <xi:include href="builders/packages/index.xml" />
3234 </part>
doc/stdenv/cross-compilation.chapter.md+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/overlays.chapter.md+18−2
@@ -77,7 +77,7 @@ In Nixpkgs, we have multiple implementations of the BLAS/LAPACK numerical linear
7777
7878 The Nixpkgs attribute is `openblas` for ILP64 (integer width = 64 bits) and `openblasCompat` for LP64 (integer width = 32 bits). `openblasCompat` is the default.
7979
80−- [LAPACK reference](http://www.netlib.org/lapack/) (also provides BLAS)
80+- [LAPACK reference](http://www.netlib.org/lapack/) (also provides BLAS and CBLAS)
8181
8282 The Nixpkgs attribute is `lapack-reference`.
8383
@@ -117,7 +117,23 @@ $ LD_LIBRARY_PATH=$(nix-build -A mkl)/lib${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH n
117117
118118Intel MKL requires an `openmp` implementation when running with multiple processors. By default, `mkl` will use Intel's `iomp` implementation if no other is specified, but this is a runtime-only dependency and binary compatible with the LLVM implementation. To use that one instead, Intel recommends users set it with `LD_PRELOAD`. Note that `mkl` is only available on `x86_64-linux` and `x86_64-darwin`. Moreover, Hydra is not building and distributing pre-compiled binaries using it.
119119
120−For BLAS/LAPACK switching to work correctly, all packages must depend on `blas` or `lapack`. This ensures that only one BLAS/LAPACK library is used at one time. There are two versions of BLAS/LAPACK currently in the wild, `LP64` (integer size = 32 bits) and `ILP64` (integer size = 64 bits). Some software needs special flags or patches to work with `ILP64`. You can check if `ILP64` is used in Nixpkgs with `blas.isILP64` and `lapack.isILP64`. Some software does NOT work with `ILP64`, and derivations need to specify an assertion to prevent this. You can prevent `ILP64` from being used with the following:
120+To override `blas` and `lapack` with its reference implementations (i.e. for development purposes), one can use the following overlay:
121+
122+```nix
123+self: super:
124+
125+{
126+ blas = super.blas.override {
127+ blasProvider = self.lapack-reference;
128+ };
129+
130+ lapack = super.lapack.override {
131+ lapackProvider = self.lapack-reference;
132+ };
133+}
134+```
135+
136+For BLAS/LAPACK switching to work correctly, all packages must depend on `blas` or `lapack`. This ensures that only one BLAS/LAPACK library is used at one time. There are two versions of BLAS/LAPACK currently in the wild, `LP64` (integer size = 32 bits) and `ILP64` (integer size = 64 bits). The attributes `blas` and `lapack` are `LP64` by default. Their `ILP64` version are provided through the attributes `blas-ilp64` and `lapack-ilp64`. Some software needs special flags or patches to work with `ILP64`. You can check if `ILP64` is used in Nixpkgs with `blas.isILP64` and `lapack.isILP64`. Some software does NOT work with `ILP64`, and derivations need to specify an assertion to prevent this. You can prevent `ILP64` from being used with the following:
121137
122138```nix
123139{ stdenv, blas, lapack, ... }:
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/attrsets.nix+114−3
@@ -4,8 +4,8 @@
44let
55 inherit (builtins) head tail length;
66 inherit (lib.trivial) id;
7− inherit (lib.strings) concatStringsSep sanitizeDerivationName;
8− inherit (lib.lists) foldr foldl' concatMap concatLists elemAt all;
7+ inherit (lib.strings) concatStringsSep concatMapStringsSep escapeNixIdentifier sanitizeDerivationName;
8+ inherit (lib.lists) foldr foldl' concatMap concatLists elemAt all partition groupBy take foldl;
99in
1010
1111rec {
@@ -78,6 +78,103 @@ rec {
7878 in attrByPath attrPath (abort errorMsg);
7979
8080
81+ /* Update or set specific paths of an attribute set.
82+
83+ Takes a list of updates to apply and an attribute set to apply them to,
84+ and returns the attribute set with the updates applied. Updates are
85+ represented as { path = ...; update = ...; } values, where `path` is a
86+ list of strings representing the attribute path that should be updated,
87+ and `update` is a function that takes the old value at that attribute path
88+ as an argument and returns the new
89+ value it should be.
90+
91+ Properties:
92+ - Updates to deeper attribute paths are applied before updates to more
93+ shallow attribute paths
94+ - Multiple updates to the same attribute path are applied in the order
95+ they appear in the update list
96+ - If any but the last `path` element leads into a value that is not an
97+ attribute set, an error is thrown
98+ - If there is an update for an attribute path that doesn't exist,
99+ accessing the argument in the update function causes an error, but
100+ intermediate attribute sets are implicitly created as needed
101+
102+ Example:
103+ updateManyAttrsByPath [
104+ {
105+ path = [ "a" "b" ];
106+ update = old: { d = old.c; };
107+ }
108+ {
109+ path = [ "a" "b" "c" ];
110+ update = old: old + 1;
111+ }
112+ {
113+ path = [ "x" "y" ];
114+ update = old: "xy";
115+ }
116+ ] { a.b.c = 0; }
117+ => { a = { b = { d = 1; }; }; x = { y = "xy"; }; }
118+ */
119+ updateManyAttrsByPath = let
120+ # When recursing into attributes, instead of updating the `path` of each
121+ # update using `tail`, which needs to allocate an entirely new list,
122+ # we just pass a prefix length to use and make sure to only look at the
123+ # path without the prefix length, so that we can reuse the original list
124+ # entries.
125+ go = prefixLength: hasValue: value: updates:
126+ let
127+ # Splits updates into ones on this level (split.right)
128+ # And ones on levels further down (split.wrong)
129+ split = partition (el: length el.path == prefixLength) updates;
130+
131+ # Groups updates on further down levels into the attributes they modify
132+ nested = groupBy (el: elemAt el.path prefixLength) split.wrong;
133+
134+ # Applies only nested modification to the input value
135+ withNestedMods =
136+ # Return the value directly if we don't have any nested modifications
137+ if split.wrong == [] then
138+ if hasValue then value
139+ else
140+ # Throw an error if there is no value. This `head` call here is
141+ # safe, but only in this branch since `go` could only be called
142+ # with `hasValue == false` for nested updates, in which case
143+ # it's also always called with at least one update
144+ let updatePath = (head split.right).path; in
145+ throw
146+ ( "updateManyAttrsByPath: Path '${showAttrPath updatePath}' does "
147+ + "not exist in the given value, but the first update to this "
148+ + "path tries to access the existing value.")
149+ else
150+ # If there are nested modifications, try to apply them to the value
151+ if ! hasValue then
152+ # But if we don't have a value, just use an empty attribute set
153+ # as the value, but simplify the code a bit
154+ mapAttrs (name: go (prefixLength + 1) false null) nested
155+ else if isAttrs value then
156+ # If we do have a value and it's an attribute set, override it
157+ # with the nested modifications
158+ value //
159+ mapAttrs (name: go (prefixLength + 1) (value ? ${name}) value.${name}) nested
160+ else
161+ # However if it's not an attribute set, we can't apply the nested
162+ # modifications, throw an error
163+ let updatePath = (head split.wrong).path; in
164+ throw
165+ ( "updateManyAttrsByPath: Path '${showAttrPath updatePath}' needs to "
166+ + "be updated, but path '${showAttrPath (take prefixLength updatePath)}' "
167+ + "of the given value is not an attribute set, so we can't "
168+ + "update an attribute inside of it.");
169+
170+ # We get the final result by applying all the updates on this level
171+ # after having applied all the nested updates
172+ # We use foldl instead of foldl' so that in case of multiple updates,
173+ # intermediate values aren't evaluated if not needed
174+ in foldl (acc: el: el.update acc) withNestedMods split.right;
175+
176+ in updates: value: go 0 true value updates;
177+
81178 /* Return the specified attributes from a set.
82179
83180 Example:
@@ -327,7 +424,7 @@ rec {
327424 isDerivation "foobar"
328425 => false
329426 */
330− isDerivation = x: isAttrs x && x ? type && x.type == "derivation";
427+ isDerivation = x: x.type or null == "derivation";
331428
332429 /* Converts a store path to a fake derivation. */
333430 toDerivation = path:
@@ -477,6 +574,20 @@ rec {
477574 overrideExisting = old: new:
478575 mapAttrs (name: value: new.${name} or value) old;
479576
577+ /* Turns a list of strings into a human-readable description of those
578+ strings represented as an attribute path. The result of this function is
579+ not intended to be machine-readable.
580+
581+ Example:
582+ showAttrPath [ "foo" "10" "bar" ]
583+ => "foo.\"10\".bar"
584+ showAttrPath []
585+ => "<root attribute path>"
586+ */
587+ showAttrPath = path:
588+ if path == [] then "<root attribute path>"
589+ else concatMapStringsSep "." escapeNixIdentifier path;
590+
480591 /* Get a package output.
481592 If no output is found, fallback to `.out` and then to the default.
482593
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+18−10
@@ -11,6 +11,9 @@ let
1111 callLibs = file: import file { lib = self; };
1212 in {
1313
14+ # interacting with flakes
15+ flakes = callLibs ./flakes.nix;
16+
1417 # often used, or depending on very little
1518 trivial = callLibs ./trivial.nix;
1619 fixedPoints = callLibs ./fixed-points.nix;
@@ -59,6 +62,7 @@ let
5962 # linux kernel configuration
6063 kernel = callLibs ./kernel.nix;
6164
65+ inherit (self.flakes) callLocklessFlake;
6266 inherit (builtins) add addErrorContext attrNames concatLists
6367 deepSeq elem elemAt filter genericClosure genList getAttr
6468 hasAttr head isAttrs isBool isInt isList isString length
@@ -66,9 +70,10 @@ let
6670 stringLength sub substring tail trace;
6771 inherit (self.trivial) id const pipe concat or and bitAnd bitOr bitXor
6872 bitNot boolToString mergeAttrs flip mapNullable inNixShell isFloat min max
69− importJSON importTOML warn warnIf throwIfNot checkListOfEnum
70− info showWarnings nixpkgsVersion version
71− mod compare splitByAndCompare functionArgs setFunctionArgs isFunction
73+ importJSON importTOML warn warnIf warnIfNot throwIf throwIfNot checkListOfEnum
74+ info showWarnings nixpkgsVersion version isInOldestRelease
75+ mod compare splitByAndCompare
76+ functionArgs setFunctionArgs isFunction toFunction
7277 toHexString toBaseDigits;
7378 inherit (self.fixedPoints) fix fix' converge extends composeExtensions
7479 composeManyExtensions makeExtensible makeExtensibleWithCustomName;
@@ -78,9 +83,10 @@ let
7883 mapAttrs' mapAttrsToList mapAttrsRecursive mapAttrsRecursiveCond
7984 genAttrs isDerivation toDerivation optionalAttrs
8085 zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil
81− recursiveUpdate matchAttrs overrideExisting getOutput getBin
86+ recursiveUpdate matchAttrs overrideExisting showAttrPath getOutput getBin
8287 getLib getDev getMan chooseDevOutputs zipWithNames zip
83− recurseIntoAttrs dontRecurseIntoAttrs cartesianProductOfSets;
88+ recurseIntoAttrs dontRecurseIntoAttrs cartesianProductOfSets
89+ updateManyAttrsByPath;
8490 inherit (self.lists) singleton forEach foldr fold foldl foldl' imap0 imap1
8591 concatMap flatten remove findSingle findFirst any all count
8692 optional optionals toList range partition zipListsWith zipLists
@@ -92,7 +98,8 @@ let
9298 concatImapStringsSep makeSearchPath makeSearchPathOutput
9399 makeLibraryPath makeBinPath optionalString
94100 hasInfix hasPrefix hasSuffix stringToCharacters stringAsChars escape
95− escapeShellArg escapeShellArgs escapeRegex escapeXML replaceChars lowerChars
101+ escapeShellArg escapeShellArgs isValidPosixName toShellVar toShellVars
102+ escapeRegex escapeXML replaceChars lowerChars
96103 upperChars toLower toUpper addContextFrom splitString
97104 removePrefix removeSuffix versionOlder versionAtLeast
98105 getName getVersion
@@ -106,27 +113,28 @@ let
106113 makeScope makeScopeWithSplicing;
107114 inherit (self.meta) addMetaAttrs dontDistribute setName updateName
108115 appendToName mapDerivationAttrset setPrio lowPrio lowPrioSet hiPrio
109− hiPrioSet getLicenseFromSpdxId;
116+ hiPrioSet getLicenseFromSpdxId getExe;
110117 inherit (self.sources) pathType pathIsDirectory cleanSourceFilter
111118 cleanSource sourceByRegex sourceFilesBySuffices
112119 commitIdFromGitRepo cleanSourceWith pathHasContext
113120 canCleanSource pathIsRegularFile pathIsGitRepo;
114121 inherit (self.modules) evalModules setDefaultModuleLocation
115− unifyModuleSyntax applyIfFunction mergeModules
122+ unifyModuleSyntax applyModuleArgsIfFunction mergeModules
116123 mergeModules' mergeOptionDecls evalOptionValue mergeDefinitions
117124 pushDownProperties dischargeProperties filterOverrides
118125 sortProperties fixupOptionType mkIf mkAssert mkMerge mkOverride
119126 mkOptionDefault mkDefault mkImageMediaOverride mkForce mkVMOverride
120127 mkFixStrictness mkOrder mkBefore mkAfter mkAliasDefinitions
121128 mkAliasAndWrapDefinitions fixMergeModules mkRemovedOptionModule
122− mkRenamedOptionModule mkMergedOptionModule mkChangedOptionModule
129+ mkRenamedOptionModule mkRenamedOptionModuleWith
130+ mkMergedOptionModule mkChangedOptionModule
123131 mkAliasOptionModule mkDerivedConfig doRename;
124132 inherit (self.options) isOption mkEnableOption mkSinkUndeclaredOptions
125133 mergeDefaultOption mergeOneOption mergeEqualOption mergeUniqueOption
126134 getValues getFiles
127135 optionAttrSetToDocList optionAttrSetToDocList'
128136 scrubOptionValue literalExpression literalExample literalDocBook
129− showOption showFiles unknownModule mkOption;
137+ showOption showFiles unknownModule mkOption mkPackageOption;
130138 inherit (self.types) isType setType defaultTypeMerge defaultFunctor
131139 isOptionType mkOptionType;
132140 inherit (self.asserts)
lib/flakes.nixnew file+22
@@ -0,0 +1,22 @@
1+{ lib }:
2+
3+rec {
4+
5+ /* imports a flake.nix without acknowledging its lock file, useful for
6+ referencing subflakes from a parent flake. The second argument allows
7+ specifying the inputs of this flake.
8+
9+ Example:
10+ callLocklessFlake {
11+ path = ./directoryContainingFlake;
12+ inputs = { inherit nixpkgs; };
13+ }
14+ */
15+ callLocklessFlake = { path, inputs ? { } }:
16+ let
17+ self = { outPath = path; } //
18+ ((import (path + "/flake.nix")).outputs (inputs // { self = self; }));
19+ in
20+ self;
21+
22+}
lib/generators.nix+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/licenses.nix+10
@@ -389,6 +389,11 @@ in mkLicense lset) ({
389389 free = false;
390390 };
391391
392+ generaluser = {
393+ fullName = "GeneralUser GS License v2.0";
394+ url = "http://www.schristiancollins.com/generaluser.php"; # license included in sources
395+ };
396+
392397 gpl1Only = {
393398 spdxId = "GPL-1.0-only";
394399 fullName = "GNU General Public License v1.0 only";
@@ -607,6 +612,11 @@ in mkLicense lset) ({
607612 fullName = "Enlightenment License (e16)";
608613 };
609614
615+ mit0 = {
616+ spdxId = "MIT-0";
617+ fullName = "MIT No Attribution";
618+ };
619+
610620 mpl10 = {
611621 spdxId = "MPL-1.0";
612622 fullName = "Mozilla Public License 1.0";
lib/lists.nix+9−8
@@ -4,6 +4,7 @@
44let
55 inherit (lib.strings) toInt;
66 inherit (lib.trivial) compare min;
7+ inherit (lib.attrsets) mapAttrs;
78in
89rec {
910
@@ -340,15 +341,15 @@ rec {
340341 groupBy' builtins.add 0 (x: boolToString (x > 2)) [ 5 1 2 3 4 ]
341342 => { true = 12; false = 3; }
342343 */
343− groupBy' = op: nul: pred: lst:
344− foldl' (r: e:
345− let
346− key = pred e;
347− in
348− r // { ${key} = op (r.${key} or nul) e; }
349− ) {} lst;
344+ groupBy' = op: nul: pred: lst: mapAttrs (name: foldl op nul) (groupBy pred lst);
350345
351− groupBy = groupBy' (sum: e: sum ++ [e]) [];
346+ groupBy = builtins.groupBy or (
347+ pred: foldl' (r: e:
348+ let
349+ key = pred e;
350+ in
351+ r // { ${key} = (r.${key} or []) ++ [e]; }
352+ ) {});
352353
353354 /* Merges two lists of the same size together. If the sizes aren't the same
354355 the merging stops at the shortest. How both lists are merged is defined
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+186−46
@@ -9,7 +9,7 @@ let
99 catAttrs
1010 concatLists
1111 concatMap
12− count
12+ concatStringsSep
1313 elem
1414 filter
1515 findFirst
@@ -46,7 +46,22 @@ let
4646 showFiles
4747 showOption
4848 unknownModule
49+ literalExpression
4950 ;
51+
52+ showDeclPrefix = loc: decl: prefix:
53+ " - option(s) with prefix `${showOption (loc ++ [prefix])}' in module `${decl._file}'";
54+ showRawDecls = loc: decls:
55+ concatStringsSep "\n"
56+ (sort (a: b: a < b)
57+ (concatMap
58+ (decl: map
59+ (showDeclPrefix loc decl)
60+ (attrNames decl.options)
61+ )
62+ decls
63+ ));
64+
5065in
5166
5267rec {
@@ -98,6 +113,10 @@ rec {
98113 args ? {}
99114 , # This would be remove in the future, Prefer _module.check option instead.
100115 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
101120 }:
102121 let
103122 withWarnings = x:
@@ -126,7 +145,7 @@ rec {
126145 # this module is used, to avoid conflicts and allow chaining of
127146 # extendModules.
128147 internalModule = rec {
129− _file = ./modules.nix;
148+ _file = "lib/modules.nix";
130149
131150 key = _file;
132151
@@ -138,9 +157,95 @@ rec {
138157 # support for that, in turn it's lazy in its values. This means e.g.
139158 # a `_module.args.pkgs = import (fetchTarball { ... }) {}` won't
140159 # start a download when `pkgs` wasn't evaluated.
141− type = types.lazyAttrsOf types.unspecified;
142− internal = true;
143− description = "Arguments passed to each module.";
160+ type = types.lazyAttrsOf types.raw;
161+ # Only render documentation once at the root of the option tree,
162+ # not for all individual submodules.
163+ # Allow merging option decls to make this internal regardless.
164+ ${if prefix == []
165+ then null # unset => visible
166+ else "internal"} = true;
167+ # TODO: Change the type of this option to a submodule with a
168+ # freeformType, so that individual arguments can be documented
169+ # separately
170+ description = ''
171+ Additional arguments passed to each module in addition to ones
172+ like <literal>lib</literal>, <literal>config</literal>,
173+ and <literal>pkgs</literal>, <literal>modulesPath</literal>.
174+ </para>
175+ <para>
176+ This option is also available to all submodules. Submodules do not
177+ inherit args from their parent module, nor do they provide args to
178+ their parent module or sibling submodules. The sole exception to
179+ this is the argument <literal>name</literal> which is provided by
180+ parent modules to a submodule and contains the attribute name
181+ the submodule is bound to, or a unique generated name if it is
182+ not bound to an attribute.
183+ </para>
184+ <para>
185+ Some arguments are already passed by default, of which the
186+ following <emphasis>cannot</emphasis> be changed with this option:
187+ <itemizedlist>
188+ <listitem>
189+ <para>
190+ <varname>lib</varname>: The nixpkgs library.
191+ </para>
192+ </listitem>
193+ <listitem>
194+ <para>
195+ <varname>config</varname>: The results of all options after merging the values from all modules together.
196+ </para>
197+ </listitem>
198+ <listitem>
199+ <para>
200+ <varname>options</varname>: The options declared in all modules.
201+ </para>
202+ </listitem>
203+ <listitem>
204+ <para>
205+ <varname>specialArgs</varname>: The <literal>specialArgs</literal> argument passed to <literal>evalModules</literal>.
206+ </para>
207+ </listitem>
208+ <listitem>
209+ <para>
210+ All attributes of <varname>specialArgs</varname>
211+ </para>
212+ <para>
213+ Whereas option values can generally depend on other option values
214+ thanks to laziness, this does not apply to <literal>imports</literal>, which
215+ must be computed statically before anything else.
216+ </para>
217+ <para>
218+ For this reason, callers of the module system can provide <literal>specialArgs</literal>
219+ which are available during import resolution.
220+ </para>
221+ <para>
222+ For NixOS, <literal>specialArgs</literal> includes
223+ <varname>modulesPath</varname>, which allows you to import
224+ extra modules from the nixpkgs package tree without having to
225+ somehow make the module aware of the location of the
226+ <literal>nixpkgs</literal> or NixOS directories.
227+ <programlisting>
228+ { modulesPath, ... }: {
229+ imports = [
230+ (modulesPath + "/profiles/minimal.nix")
231+ ];
232+ }
233+ </programlisting>
234+ </para>
235+ </listitem>
236+ </itemizedlist>
237+ </para>
238+ <para>
239+ For NixOS, the default value for this option includes at least this argument:
240+ <itemizedlist>
241+ <listitem>
242+ <para>
243+ <varname>pkgs</varname>: The nixpkgs package set according to
244+ the <option>nixpkgs.pkgs</option> option.
245+ </para>
246+ </listitem>
247+ </itemizedlist>
248+ '';
144249 };
145250
146251 _module.check = mkOption {
@@ -151,8 +256,7 @@ rec {
151256 };
152257
153258 _module.freeformType = mkOption {
154− # Disallow merging for now, but could be implemented nicely with a `types.optionType`
155− type = types.nullOr (types.uniq types.attrs);
259+ type = types.nullOr types.optionType;
156260 internal = true;
157261 default = null;
158262 description = ''
@@ -241,15 +345,17 @@ rec {
241345 modules ? [],
242346 specialArgs ? {},
243347 prefix ? [],
348+ extensionOffset ? length modules,
244349 }:
245350 evalModules (evalModulesArgs // {
246351 modules = regularModules ++ modules;
247352 specialArgs = evalModulesArgs.specialArgs or {} // specialArgs;
248353 prefix = extendArgs.prefix or evalModulesArgs.prefix;
354+ inherit extensionOffset;
249355 });
250356
251357 type = lib.types.submoduleWith {
252− inherit modules specialArgs;
358+ inherit modules specialArgs extensionOffset;
253359 };
254360
255361 result = withWarnings {
@@ -269,11 +375,11 @@ rec {
269375 # Like unifyModuleSyntax, but also imports paths and calls functions if necessary
270376 loadModule = args: fallbackFile: fallbackKey: m:
271377 if isFunction m || isAttrs m then
272− unifyModuleSyntax fallbackFile fallbackKey (applyIfFunction fallbackKey m args)
378+ unifyModuleSyntax fallbackFile fallbackKey (applyModuleArgsIfFunction fallbackKey m args)
273379 else if isList m then
274380 let defs = [{ file = fallbackFile; value = m; }]; in
275381 throw "Module imports can't be nested lists. Perhaps you meant to remove one level of lists? Definitions: ${showDefs defs}"
276− else unifyModuleSyntax (toString m) (toString m) (applyIfFunction (toString m) (import m) args);
382+ else unifyModuleSyntax (toString m) (toString m) (applyModuleArgsIfFunction (toString m) (import m) args);
277383
278384 /*
279385 Collects all modules recursively into the form
@@ -370,7 +476,7 @@ rec {
370476 config = addFreeformType (addMeta (removeAttrs m ["_file" "key" "disabledModules" "require" "imports" "freeformType"]));
371477 };
372478
373− applyIfFunction = key: f: args@{ config, options, lib, ... }: if isFunction f then
479+ applyModuleArgsIfFunction = key: f: args@{ config, options, lib, ... }: if isFunction f then
374480 let
375481 # Module arguments are resolved in a strict manner when attribute set
376482 # deconstruction is used. As the arguments are now defined with the
@@ -475,26 +581,61 @@ rec {
475581 [{ inherit (module) file; inherit value; }]
476582 ) configs;
477583
584+ # Convert an option tree decl to a submodule option decl
585+ optionTreeToOption = decl:
586+ if isOption decl.options
587+ then decl
588+ else decl // {
589+ options = mkOption {
590+ type = types.submoduleWith {
591+ modules = [ { options = decl.options; } ];
592+ # `null` is not intended for use by modules. It is an internal
593+ # value that means "whatever the user has declared elsewhere".
594+ # This might become obsolete with https://github.com/NixOS/nixpkgs/issues/162398
595+ shorthandOnlyDefinesConfig = null;
596+ };
597+ };
598+ };
599+
478600 resultsByName = mapAttrs (name: decls:
479601 # We're descending into attribute ‘name’.
480602 let
481603 loc = prefix ++ [name];
482604 defns = defnsByName.${name} or [];
483605 defns' = defnsByName'.${name} or [];
484− nrOptions = count (m: isOption m.options) decls;
606+ optionDecls = filter (m: isOption m.options) decls;
485607 in
486− if nrOptions == length decls then
608+ if length optionDecls == length decls then
487609 let opt = fixupOptionType loc (mergeOptionDecls loc decls);
488610 in {
489611 matchedOptions = evalOptionValue loc opt defns';
490612 unmatchedDefns = [];
491613 }
492− else if nrOptions != 0 then
493− let
494− firstOption = findFirst (m: isOption m.options) "" decls;
495− firstNonOption = findFirst (m: !isOption m.options) "" decls;
496− in
497− throw "The option `${showOption loc}' in `${firstOption._file}' is a prefix of options in `${firstNonOption._file}'."
614+ else if optionDecls != [] then
615+ if all (x: x.options.type.name == "submodule") optionDecls
616+ # Raw options can only be merged into submodules. Merging into
617+ # attrsets might be nice, but ambiguous. Suppose we have
618+ # attrset as a `attrsOf submodule`. User declares option
619+ # attrset.foo.bar, this could mean:
620+ # a. option `bar` is only available in `attrset.foo`
621+ # b. option `foo.bar` is available in all `attrset.*`
622+ # c. reject and require "<name>" as a reminder that it behaves like (b).
623+ # d. magically combine (a) and (c).
624+ # All of the above are merely syntax sugar though.
625+ then
626+ let opt = fixupOptionType loc (mergeOptionDecls loc (map optionTreeToOption decls));
627+ in {
628+ matchedOptions = evalOptionValue loc opt defns';
629+ unmatchedDefns = [];
630+ }
631+ else
632+ let
633+ firstNonOption = findFirst (m: !isOption m.options) "" decls;
634+ nonOptions = filter (m: !isOption m.options) decls;
635+ in
636+ throw "The option `${showOption loc}' in module `${(lib.head optionDecls)._file}' would be a parent of the following options, but its type `${(lib.head optionDecls).options.type.description or "<no description>"}' does not support nested options.\n${
637+ showRawDecls loc nonOptions
638+ }"
498639 else
499640 mergeModules' loc decls defns) declsByName;
500641
@@ -561,17 +702,9 @@ rec {
561702 throw "The option `${showOption loc}' in `${opt._file}' is already declared in ${showFiles res.declarations}."
562703 else
563704 let
564− /* Add the modules of the current option to the list of modules
565− already collected. The options attribute except either a list of
566− submodules or a submodule. For each submodule, we add the file of the
567− current option declaration as the file use for the submodule. If the
568− submodule defines any filename, then we ignore the enclosing option file. */
569− options' = toList opt.options.options;
570−
571705 getSubModules = opt.options.type.getSubModules or null;
572706 submodules =
573707 if getSubModules != null then map (setDefaultModuleLocation opt._file) getSubModules ++ res.options
574− else if opt.options ? options then map (coerceOption opt._file) options' ++ res.options
575708 else res.options;
576709 in opt.options // res //
577710 { declarations = res.declarations ++ [opt._file];
@@ -754,26 +887,13 @@ rec {
754887 compare = a: b: (a.priority or 1000) < (b.priority or 1000);
755888 in sort compare defs';
756889
757− /* Hack for backward compatibility: convert options of type
758− optionSet to options of type submodule. FIXME: remove
759− eventually. */
890+ # This calls substSubModules, whose entire purpose is only to ensure that
891+ # option declarations in submodules have accurate position information.
892+ # TODO: Merge this into mergeOptionDecls
760893 fixupOptionType = loc: opt:
761− let
762− options = opt.options or
763− (throw "Option `${showOption loc}' has type optionSet but has no option attribute, in ${showFiles opt.declarations}.");
764− f = tp:
765− let optionSetIn = type: (tp.name == type) && (tp.functor.wrapped.name == "optionSet");
766− in
767− if tp.name == "option set" || tp.name == "submodule" then
768− throw "The option ${showOption loc} uses submodules without a wrapping type, in ${showFiles opt.declarations}."
769− else if optionSetIn "attrsOf" then types.attrsOf (types.submodule options)
770− else if optionSetIn "listOf" then types.listOf (types.submodule options)
771− else if optionSetIn "nullOr" then types.nullOr (types.submodule options)
772− else tp;
773− in
774− if opt.type.getSubModules or null == null
775− then opt // { type = f (opt.type or types.unspecified); }
776− else opt // { type = opt.type.substSubModules opt.options; options = []; };
894+ if opt.type.getSubModules or null == null
895+ then opt // { type = opt.type or types.unspecified; }
896+ else opt // { type = opt.type.substSubModules opt.options; options = []; };
777897
778898
779899 /* Properties. */
@@ -905,6 +1025,26 @@ rec {
9051025 use = builtins.trace "Obsolete option `${showOption from}' is used. It was renamed to `${showOption to}'.";
9061026 };
9071027
1028+ mkRenamedOptionModuleWith = {
1029+ /* Old option path as list of strings. */
1030+ from,
1031+ /* New option path as list of strings. */
1032+ to,
1033+
1034+ /*
1035+ Release number of the first release that contains the rename, ignoring backports.
1036+ Set it to the upcoming release, matching the nixpkgs/.version file.
1037+ */
1038+ sinceRelease,
1039+
1040+ }: doRename {
1041+ inherit from to;
1042+ visible = false;
1043+ warn = lib.isInOldestRelease sinceRelease;
1044+ use = lib.warnIf (lib.isInOldestRelease sinceRelease)
1045+ "Obsolete option `${showOption from}' is used. It was renamed to `${showOption to}'.";
1046+ };
1047+
9081048 /* Return a module that causes a warning to be shown if any of the "from"
9091049 option is defined; the defined values can be used in the "mergeFn" to set
9101050 the "to" value.
lib/options.nix+2−4
@@ -79,8 +79,6 @@ rec {
7979 visible ? null,
8080 # Whether the option can be set only once
8181 readOnly ? null,
82− # Deprecated, used by types.optionSet.
83− options ? null
8482 } @ attrs:
8583 attrs // { _type = "option"; };
8684
@@ -122,7 +120,7 @@ rec {
122120 Example:
123121 mkPackageOption pkgs "GHC" {
124122 default = [ "ghc" ];
125− example = "pkgs.haskell.package.ghc921.ghc.withPackages (hkgs: [ hkgs.primes ])";
123+ example = "pkgs.haskell.package.ghc922.ghc.withPackages (hkgs: [ hkgs.primes ])";
126124 }
127125 => { _type = "option"; default = «derivation /nix/store/jxx55cxsjrf8kyh3fp2ya17q99w7541r-ghc-8.10.7.drv»; defaultText = { ... }; description = "The GHC package to use."; example = { ... }; type = { ... }; }
128126 */
@@ -231,7 +229,7 @@ rec {
231229 then true
232230 else opt.visible or true;
233231 readOnly = opt.readOnly or false;
234− type = opt.type.description or null;
232+ type = opt.type.description or "unspecified";
235233 }
236234 // optionalAttrs (opt ? example) { example = scrubOptionValue opt.example; }
237235 // optionalAttrs (opt ? default) { default = scrubOptionValue opt.default; }
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/default.nix+2−1
@@ -105,7 +105,8 @@ rec {
105105 else if final.isAarch64 then "arm64"
106106 else if final.isx86_32 then "i386"
107107 else if final.isx86_64 then "x86_64"
108− else if final.isMips then "mips"
108+ else if final.isMips32 then "mips"
109+ else if final.isMips64 then "mips" # linux kernel does not distinguish mips32/mips64
109110 else if final.isPower then "powerpc"
110111 else if final.isRiscV then "riscv"
111112 else if final.isS390 then "s390"
lib/systems/doubles.nix+8−2
@@ -26,7 +26,7 @@ let
2626
2727 # Linux
2828 "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux"
29− "armv7l-linux" "i686-linux" "m68k-linux" "mipsel-linux"
29+ "armv7l-linux" "i686-linux" "m68k-linux" "mipsel-linux" "mips64el-linux"
3030 "powerpc64-linux" "powerpc64le-linux" "riscv32-linux"
3131 "riscv64-linux" "s390-linux" "s390x-linux" "x86_64-linux"
3232
@@ -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;
@@ -87,7 +89,11 @@ in {
8789 darwin = filterDoubles predicates.isDarwin;
8890 freebsd = filterDoubles predicates.isFreeBSD;
8991 # Should be better, but MinGW is unclear.
90− gnu = filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnu; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabi; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabihf; });
92+ gnu = filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnu; })
93+ ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabi; })
94+ ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabihf; })
95+ ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnuabin32; })
96+ ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnuabi64; });
9197 illumos = filterDoubles predicates.isSunOS;
9298 linux = filterDoubles predicates.isLinux;
9399 netbsd = filterDoubles predicates.isNetBSD;
lib/systems/examples.nix+20
@@ -93,6 +93,26 @@ rec {
9393 config = "mipsel-unknown-linux-gnu";
9494 } // platforms.fuloong2f_n32;
9595
96+ # MIPS ABI table transcribed from here: https://wiki.debian.org/Multiarch/Tuples
97+
98+ # can execute on 32bit chip
99+ mips-linux-gnu = { config = "mips-linux-gnu"; } // platforms.gcc_mips32r2_o32;
100+ mipsel-linux-gnu = { config = "mipsel-linux-gnu"; } // platforms.gcc_mips32r2_o32;
101+ mipsisa32r6-linux-gnu = { config = "mipsisa32r6-linux-gnu"; } // platforms.gcc_mips32r6_o32;
102+ mipsisa32r6el-linux-gnu = { config = "mipsisa32r6el-linux-gnu"; } // platforms.gcc_mips32r6_o32;
103+
104+ # require 64bit chip (for more registers, 64-bit floating point, 64-bit "long long") but use 32bit pointers
105+ mips64-linux-gnuabin32 = { config = "mips64-linux-gnuabin32"; } // platforms.gcc_mips64r2_n32;
106+ mips64el-linux-gnuabin32 = { config = "mips64el-linux-gnuabin32"; } // platforms.gcc_mips64r2_n32;
107+ mipsisa64r6-linux-gnuabin32 = { config = "mipsisa64r6-linux-gnuabin32"; } // platforms.gcc_mips64r6_n32;
108+ mipsisa64r6el-linux-gnuabin32 = { config = "mipsisa64r6el-linux-gnuabin32"; } // platforms.gcc_mips64r6_n32;
109+
110+ # 64bit pointers
111+ mips64-linux-gnuabi64 = { config = "mips64-linux-gnuabi64"; } // platforms.gcc_mips64r2_64;
112+ mips64el-linux-gnuabi64 = { config = "mips64el-linux-gnuabi64"; } // platforms.gcc_mips64r2_64;
113+ mipsisa64r6-linux-gnuabi64 = { config = "mipsisa64r6-linux-gnuabi64"; } // platforms.gcc_mips64r6_64;
114+ mipsisa64r6el-linux-gnuabi64 = { config = "mipsisa64r6el-linux-gnuabi64"; } // platforms.gcc_mips64r6_64;
115+
96116 muslpi = raspberryPi // {
97117 config = "armv6l-unknown-linux-musleabihf";
98118 };
lib/systems/inspect.nix+8−1
@@ -13,12 +13,19 @@ rec {
1313 isx86_64 = { cpu = { family = "x86"; bits = 64; }; };
1414 isPowerPC = { cpu = cpuTypes.powerpc; };
1515 isPower = { cpu = { family = "power"; }; };
16+ isPower64 = { cpu = { family = "power"; bits = 64; }; };
1617 isx86 = { cpu = { family = "x86"; }; };
1718 isAarch32 = { cpu = { family = "arm"; bits = 32; }; };
1819 isAarch64 = { cpu = { family = "arm"; bits = 64; }; };
1920 isMips = { cpu = { family = "mips"; }; };
21+ isMips32 = { cpu = { family = "mips"; bits = 32; }; };
22+ isMips64 = { cpu = { family = "mips"; bits = 64; }; };
23+ isMips64n32 = { cpu = { family = "mips"; bits = 64; }; abi = { abi = "n32"; }; };
24+ isMips64n64 = { cpu = { family = "mips"; bits = 64; }; abi = { abi = "64"; }; };
2025 isMmix = { cpu = { family = "mmix"; }; };
2126 isRiscV = { cpu = { family = "riscv"; }; };
27+ isRiscV32 = { cpu = { family = "riscv"; bits = 32; }; };
28+ isRiscV64 = { cpu = { family = "riscv"; bits = 64; }; };
2229 isSparc = { cpu = { family = "sparc"; }; };
2330 isWasm = { cpu = { family = "wasm"; }; };
2431 isMsp430 = { cpu = { family = "msp430"; }; };
@@ -57,7 +64,7 @@ rec {
5764
5865 isAndroid = [ { abi = abis.android; } { abi = abis.androideabi; } ];
5966 isGnu = with abis; map (a: { abi = a; }) [ gnuabi64 gnu gnueabi gnueabihf ];
60− isMusl = with abis; map (a: { abi = a; }) [ musl musleabi musleabihf ];
67+ isMusl = with abis; map (a: { abi = a; }) [ musl musleabi musleabihf muslabin32 muslabi64 ];
6168 isUClibc = with abis; map (a: { abi = a; }) [ uclibc uclibceabi uclibceabihf ];
6269
6370 isEfi = map (family: { cpu.family = family; })
lib/systems/parse.nix+9−2
@@ -359,13 +359,20 @@ rec {
359359 ];
360360 };
361361 gnuabi64 = { abi = "64"; };
362+ muslabi64 = { abi = "64"; };
363+
364+ # NOTE: abi=n32 requires a 64-bit MIPS chip! That is not a typo.
365+ # It is basically the 64-bit abi with 32-bit pointers. Details:
366+ # https://www.linux-mips.org/pub/linux/mips/doc/ABI/MIPS-N32-ABI-Handbook.pdf
367+ gnuabin32 = { abi = "n32"; };
368+ muslabin32 = { abi = "n32"; };
362369
363370 musleabi = { float = "soft"; };
364371 musleabihf = { float = "hard"; };
365372 musl = {};
366373
367− uclibceabihf = { float = "soft"; };
368− uclibceabi = { float = "hard"; };
374+ uclibceabi = { float = "soft"; };
375+ uclibceabihf = { float = "hard"; };
369376 uclibc = {};
370377
371378 unknown = {};
lib/systems/platforms.nix+48−1
@@ -1,3 +1,10 @@
1+# Note: lib/systems/default.nix takes care of producing valid,
2+# fully-formed "platform" values (e.g. hostPlatform, buildPlatform,
3+# targetPlatform, etc) containing at least the minimal set of attrs
4+# required (see types.parsedPlatform in lib/systems/parse.nix). This
5+# file takes an already-valid platform and further elaborates it with
6+# optional fields; currently these are: linux-kernel, gcc, and rustc.
7+
18{ lib }:
29rec {
310 pc = {
@@ -482,6 +489,43 @@ rec {
482489 };
483490 };
484491
492+ # can execute on 32bit chip
493+ gcc_mips32r2_o32 = { gcc = { arch = "mips32r2"; abi = "o32"; }; };
494+ gcc_mips32r6_o32 = { gcc = { arch = "mips32r6"; abi = "o32"; }; };
495+ gcc_mips64r2_n32 = { gcc = { arch = "mips64r2"; abi = "n32"; }; };
496+ gcc_mips64r6_n32 = { gcc = { arch = "mips64r6"; abi = "n32"; }; };
497+ gcc_mips64r2_64 = { gcc = { arch = "mips64r2"; abi = "64"; }; };
498+ gcc_mips64r6_64 = { gcc = { arch = "mips64r6"; abi = "64"; }; };
499+
500+ # based on:
501+ # https://www.mail-archive.com/qemu-discuss@nongnu.org/msg05179.html
502+ # https://gmplib.org/~tege/qemu.html#mips64-debian
503+ mips64el-qemu-linux-gnuabi64 = {
504+ linux-kernel = {
505+ name = "mips64el";
506+ baseConfig = "64r2el_defconfig";
507+ target = "vmlinuz";
508+ autoModules = false;
509+ DTB = true;
510+ # for qemu 9p passthrough filesystem
511+ extraConfig = ''
512+ MIPS_MALTA y
513+ PAGE_SIZE_4KB y
514+ CPU_LITTLE_ENDIAN y
515+ CPU_MIPS64_R2 y
516+ 64BIT y
517+ CPU_MIPS64_R2 y
518+
519+ NET_9P y
520+ NET_9P_VIRTIO y
521+ 9P_FS y
522+ 9P_FS_POSIX_ACL y
523+ PCI y
524+ VIRTIO_PCI y
525+ '';
526+ };
527+ };
528+
485529 ##
486530 ## Other
487531 ##
@@ -499,6 +543,9 @@ rec {
499543 };
500544 };
501545
546+ # This function takes a minimally-valid "platform" and returns an
547+ # attrset containing zero or more additional attrs which should be
548+ # included in the platform in order to further elaborate it.
502549 select = platform:
503550 # x86
504551 /**/ if platform.isx86 then pc
@@ -521,5 +568,5 @@ rec {
521568
522569 else if platform.parsed.cpu == lib.systems.parse.cpuTypes.powerpc64le then powernv
523570
524− else pc;
571+ else { };
525572}
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+429−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 = {
@@ -761,4 +885,308 @@ runTests {
761885 { a = 3; b = 30; c = 300; }
762886 ];
763887 };
888+
889+ # The example from the showAttrPath documentation
890+ testShowAttrPathExample = {
891+ expr = showAttrPath [ "foo" "10" "bar" ];
892+ expected = "foo.\"10\".bar";
893+ };
894+
895+ testShowAttrPathEmpty = {
896+ expr = showAttrPath [];
897+ expected = "<root attribute path>";
898+ };
899+
900+ testShowAttrPathVarious = {
901+ expr = showAttrPath [
902+ "."
903+ "foo"
904+ "2"
905+ "a2-b"
906+ "_bc'de"
907+ ];
908+ expected = ''".".foo."2".a2-b._bc'de'';
909+ };
910+
911+ testGroupBy = {
912+ expr = groupBy (n: toString (mod n 5)) (range 0 16);
913+ expected = {
914+ "0" = [ 0 5 10 15 ];
915+ "1" = [ 1 6 11 16 ];
916+ "2" = [ 2 7 12 ];
917+ "3" = [ 3 8 13 ];
918+ "4" = [ 4 9 14 ];
919+ };
920+ };
921+
922+ testGroupBy' = {
923+ expr = groupBy' builtins.add 0 (x: boolToString (x > 2)) [ 5 1 2 3 4 ];
924+ expected = { false = 3; true = 12; };
925+ };
926+
927+ # The example from the updateManyAttrsByPath documentation
928+ testUpdateManyAttrsByPathExample = {
929+ expr = updateManyAttrsByPath [
930+ {
931+ path = [ "a" "b" ];
932+ update = old: { d = old.c; };
933+ }
934+ {
935+ path = [ "a" "b" "c" ];
936+ update = old: old + 1;
937+ }
938+ {
939+ path = [ "x" "y" ];
940+ update = old: "xy";
941+ }
942+ ] { a.b.c = 0; };
943+ expected = { a = { b = { d = 1; }; }; x = { y = "xy"; }; };
944+ };
945+
946+ # If there are no updates, the value is passed through
947+ testUpdateManyAttrsByPathNone = {
948+ expr = updateManyAttrsByPath [] "something";
949+ expected = "something";
950+ };
951+
952+ # A single update to the root path is just like applying the function directly
953+ testUpdateManyAttrsByPathSingleIncrement = {
954+ expr = updateManyAttrsByPath [
955+ {
956+ path = [ ];
957+ update = old: old + 1;
958+ }
959+ ] 0;
960+ expected = 1;
961+ };
962+
963+ # Multiple updates can be applied are done in order
964+ testUpdateManyAttrsByPathMultipleIncrements = {
965+ expr = updateManyAttrsByPath [
966+ {
967+ path = [ ];
968+ update = old: old + "a";
969+ }
970+ {
971+ path = [ ];
972+ update = old: old + "b";
973+ }
974+ {
975+ path = [ ];
976+ update = old: old + "c";
977+ }
978+ ] "";
979+ expected = "abc";
980+ };
981+
982+ # If an update doesn't use the value, all previous updates are not evaluated
983+ testUpdateManyAttrsByPathLazy = {
984+ expr = updateManyAttrsByPath [
985+ {
986+ path = [ ];
987+ update = old: old + throw "nope";
988+ }
989+ {
990+ path = [ ];
991+ update = old: "untainted";
992+ }
993+ ] (throw "start");
994+ expected = "untainted";
995+ };
996+
997+ # Deeply nested attributes can be updated without affecting others
998+ testUpdateManyAttrsByPathDeep = {
999+ expr = updateManyAttrsByPath [
1000+ {
1001+ path = [ "a" "b" "c" ];
1002+ update = old: old + 1;
1003+ }
1004+ ] {
1005+ a.b.c = 0;
1006+
1007+ a.b.z = 0;
1008+ a.y.z = 0;
1009+ x.y.z = 0;
1010+ };
1011+ expected = {
1012+ a.b.c = 1;
1013+
1014+ a.b.z = 0;
1015+ a.y.z = 0;
1016+ x.y.z = 0;
1017+ };
1018+ };
1019+
1020+ # Nested attributes are updated first
1021+ testUpdateManyAttrsByPathNestedBeforehand = {
1022+ expr = updateManyAttrsByPath [
1023+ {
1024+ path = [ "a" ];
1025+ update = old: old // { x = old.b; };
1026+ }
1027+ {
1028+ path = [ "a" "b" ];
1029+ update = old: old + 1;
1030+ }
1031+ ] {
1032+ a.b = 0;
1033+ };
1034+ expected = {
1035+ a.b = 1;
1036+ a.x = 1;
1037+ };
1038+ };
1039+
1040+ ## Levenshtein distance functions and co.
1041+ testCommonPrefixLengthEmpty = {
1042+ expr = strings.commonPrefixLength "" "hello";
1043+ expected = 0;
1044+ };
1045+
1046+ testCommonPrefixLengthSame = {
1047+ expr = strings.commonPrefixLength "hello" "hello";
1048+ expected = 5;
1049+ };
1050+
1051+ testCommonPrefixLengthDiffering = {
1052+ expr = strings.commonPrefixLength "hello" "hey";
1053+ expected = 2;
1054+ };
1055+
1056+ testCommonSuffixLengthEmpty = {
1057+ expr = strings.commonSuffixLength "" "hello";
1058+ expected = 0;
1059+ };
1060+
1061+ testCommonSuffixLengthSame = {
1062+ expr = strings.commonSuffixLength "hello" "hello";
1063+ expected = 5;
1064+ };
1065+
1066+ testCommonSuffixLengthDiffering = {
1067+ expr = strings.commonSuffixLength "test" "rest";
1068+ expected = 3;
1069+ };
1070+
1071+ testLevenshteinEmpty = {
1072+ expr = strings.levenshtein "" "";
1073+ expected = 0;
1074+ };
1075+
1076+ testLevenshteinOnlyAdd = {
1077+ expr = strings.levenshtein "" "hello there";
1078+ expected = 11;
1079+ };
1080+
1081+ testLevenshteinOnlyRemove = {
1082+ expr = strings.levenshtein "hello there" "";
1083+ expected = 11;
1084+ };
1085+
1086+ testLevenshteinOnlyTransform = {
1087+ expr = strings.levenshtein "abcdef" "ghijkl";
1088+ expected = 6;
1089+ };
1090+
1091+ testLevenshteinMixed = {
1092+ expr = strings.levenshtein "kitchen" "sitting";
1093+ expected = 5;
1094+ };
1095+
1096+ testLevenshteinAtMostZeroFalse = {
1097+ expr = strings.levenshteinAtMost 0 "foo" "boo";
1098+ expected = false;
1099+ };
1100+
1101+ testLevenshteinAtMostZeroTrue = {
1102+ expr = strings.levenshteinAtMost 0 "foo" "foo";
1103+ expected = true;
1104+ };
1105+
1106+ testLevenshteinAtMostOneFalse = {
1107+ expr = strings.levenshteinAtMost 1 "car" "ct";
1108+ expected = false;
1109+ };
1110+
1111+ testLevenshteinAtMostOneTrue = {
1112+ expr = strings.levenshteinAtMost 1 "car" "cr";
1113+ expected = true;
1114+ };
1115+
1116+ # We test levenshteinAtMost 2 particularly well because it uses a complicated
1117+ # implementation
1118+ testLevenshteinAtMostTwoIsEmpty = {
1119+ expr = strings.levenshteinAtMost 2 "" "";
1120+ expected = true;
1121+ };
1122+
1123+ testLevenshteinAtMostTwoIsZero = {
1124+ expr = strings.levenshteinAtMost 2 "abcdef" "abcdef";
1125+ expected = true;
1126+ };
1127+
1128+ testLevenshteinAtMostTwoIsOne = {
1129+ expr = strings.levenshteinAtMost 2 "abcdef" "abddef";
1130+ expected = true;
1131+ };
1132+
1133+ testLevenshteinAtMostTwoDiff0False = {
1134+ expr = strings.levenshteinAtMost 2 "abcdef" "aczyef";
1135+ expected = false;
1136+ };
1137+
1138+ testLevenshteinAtMostTwoDiff0Outer = {
1139+ expr = strings.levenshteinAtMost 2 "abcdef" "zbcdez";
1140+ expected = true;
1141+ };
1142+
1143+ testLevenshteinAtMostTwoDiff0DelLeft = {
1144+ expr = strings.levenshteinAtMost 2 "abcdef" "bcdefz";
1145+ expected = true;
1146+ };
1147+
1148+ testLevenshteinAtMostTwoDiff0DelRight = {
1149+ expr = strings.levenshteinAtMost 2 "abcdef" "zabcde";
1150+ expected = true;
1151+ };
1152+
1153+ testLevenshteinAtMostTwoDiff1False = {
1154+ expr = strings.levenshteinAtMost 2 "abcdef" "bddez";
1155+ expected = false;
1156+ };
1157+
1158+ testLevenshteinAtMostTwoDiff1DelLeft = {
1159+ expr = strings.levenshteinAtMost 2 "abcdef" "bcdez";
1160+ expected = true;
1161+ };
1162+
1163+ testLevenshteinAtMostTwoDiff1DelRight = {
1164+ expr = strings.levenshteinAtMost 2 "abcdef" "zbcde";
1165+ expected = true;
1166+ };
1167+
1168+ testLevenshteinAtMostTwoDiff2False = {
1169+ expr = strings.levenshteinAtMost 2 "hello" "hxo";
1170+ expected = false;
1171+ };
1172+
1173+ testLevenshteinAtMostTwoDiff2True = {
1174+ expr = strings.levenshteinAtMost 2 "hello" "heo";
1175+ expected = true;
1176+ };
1177+
1178+ testLevenshteinAtMostTwoDiff3 = {
1179+ expr = strings.levenshteinAtMost 2 "hello" "ho";
1180+ expected = false;
1181+ };
1182+
1183+ testLevenshteinAtMostThreeFalse = {
1184+ expr = strings.levenshteinAtMost 3 "hello" "Holla!";
1185+ expected = false;
1186+ };
1187+
1188+ testLevenshteinAtMostThreeTrue = {
1189+ expr = strings.levenshteinAtMost 3 "hello" "Holla";
1190+ expected = true;
1191+ };
7641192}
lib/tests/modules.sh+48−1
@@ -62,6 +62,13 @@ checkConfigError() {
6262checkConfigOutput '^false$' config.enable ./declare-enable.nix
6363checkConfigError 'The option .* does not exist. Definition values:\n\s*- In .*: true' config.enable ./define-enable.nix
6464
65+checkConfigOutput '^1$' config.bare-submodule.nested ./declare-bare-submodule.nix ./declare-bare-submodule-nested-option.nix
66+checkConfigOutput '^2$' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-deep-option.nix
67+checkConfigOutput '^42$' config.bare-submodule.nested ./declare-bare-submodule.nix ./declare-bare-submodule-nested-option.nix ./declare-bare-submodule-deep-option.nix ./define-bare-submodule-values.nix
68+checkConfigOutput '^420$' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-nested-option.nix ./declare-bare-submodule-deep-option.nix ./define-bare-submodule-values.nix
69+checkConfigOutput '^2$' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-deep-option.nix ./define-shorthandOnlyDefinesConfig-true.nix
70+checkConfigError 'The option .bare-submodule.deep. in .*/declare-bare-submodule-deep-option.nix. is already declared in .*/declare-bare-submodule-deep-option-duplicate.nix' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-deep-option.nix ./declare-bare-submodule-deep-option-duplicate.nix
71+
6572# Check integer types.
6673# unsigned
6774checkConfigOutput '^42$' config.value ./declare-int-unsigned-value.nix ./define-value-int-positive.nix
@@ -240,6 +247,11 @@ checkConfigOutput '^"24"$' config.foo ./freeform-attrsOf.nix ./freeform-str-dep-
240247checkConfigError 'infinite recursion encountered' config.foo ./freeform-attrsOf.nix ./freeform-unstr-dep-str.nix
241248checkConfigError 'The option .* is used but not defined' config.foo ./freeform-lazyAttrsOf.nix ./freeform-unstr-dep-str.nix
242249checkConfigOutput '^"24"$' config.foo ./freeform-lazyAttrsOf.nix ./freeform-unstr-dep-str.nix ./define-value-string.nix
250+# submodules in freeformTypes should have their locations annotated
251+checkConfigOutput '/freeform-submodules.nix"$' config.fooDeclarations.0 ./freeform-submodules.nix
252+# freeformTypes can get merged using `types.type`, including submodules
253+checkConfigOutput '^10$' config.free.xxx.foo ./freeform-submodules.nix
254+checkConfigOutput '^10$' config.free.yyy.bar ./freeform-submodules.nix
243255
244256## types.anything
245257# Check that attribute sets are merged recursively
@@ -281,9 +293,44 @@ checkConfigOutput '^"a c"$' config.result ./functionTo/merging-attrs.nix
281293
282294# moduleType
283295checkConfigOutput '^"a b"$' config.resultFoo ./declare-variants.nix ./define-variant.nix
284−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
285297checkConfigOutput '^"a b c"$' config.resultFooFoo ./declare-variants.nix ./define-variant.nix
286298
299+## emptyValue's
300+checkConfigOutput "[ ]" config.list.a ./emptyValues.nix
301+checkConfigOutput "{ }" config.attrs.a ./emptyValues.nix
302+checkConfigOutput "null" config.null.a ./emptyValues.nix
303+checkConfigOutput "{ }" config.submodule.a ./emptyValues.nix
304+# These types don't have empty values
305+checkConfigError 'The option .int.a. is used but not defined' config.int.a ./emptyValues.nix
306+checkConfigError 'The option .nonEmptyList.a. is used but not defined' config.nonEmptyList.a ./emptyValues.nix
307+
308+## types.raw
309+checkConfigOutput "{ foo = <CODE>; }" config.unprocessedNesting ./raw.nix
310+checkConfigOutput "10" config.processedToplevel ./raw.nix
311+checkConfigError "The option .multiple. is defined multiple times" config.multiple ./raw.nix
312+checkConfigOutput "bar" config.priorities ./raw.nix
313+
314+## Option collision
315+checkConfigError \
316+ 'The option .set. in module .*/declare-set.nix. would be a parent of the following options, but its type .attribute set of signed integers. does not support nested options.\n\s*- option[(]s[)] with prefix .set.enable. in module .*/declare-enable-nested.nix.' \
317+ config.set \
318+ ./declare-set.nix ./declare-enable-nested.nix
319+
320+# Test that types.optionType merges types correctly
321+checkConfigOutput '^10$' config.theOption.int ./optionTypeMerging.nix
322+checkConfigOutput '^"hello"$' config.theOption.str ./optionTypeMerging.nix
323+
324+# Test that types.optionType correctly annotates option locations
325+checkConfigError 'The option .theOption.nested. in .other.nix. is already declared in .optionTypeFile.nix.' config.theOption.nested ./optionTypeFile.nix
326+
327+# Test that types.optionType leaves types untouched as long as they don't need to be merged
328+checkConfigOutput 'ok' config.freeformItems.foo.bar ./adhoc-freeformType-survives-type-merge.nix
329+
330+# Anonymous submodules don't get nixed by import resolution/deduplication
331+# because of an `extendModules` bug, issue 168767.
332+checkConfigOutput '^1$' config.sub.specialisation.value ./extendModules-168767-imports.nix
333+
287334cat <<EOF
288335====== module tests ======
289336$pass Pass
lib/tests/modules/adhoc-freeformType-survives-type-merge.nixnew file+14
@@ -0,0 +1,14 @@
1+{ lib, ... }: {
2+ options.dummy = lib.mkOption { type = lib.types.anything; default = {}; };
3+ freeformType =
4+ let
5+ a = lib.types.attrsOf (lib.types.submodule { options.bar = lib.mkOption { }; });
6+ in
7+ # modifying types like this breaks type merging.
8+ # This test makes sure that type merging is not performed when only a single declaration exists.
9+ # Don't modify types in practice!
10+ a // {
11+ merge = loc: defs: { freeformItems = a.merge loc defs; };
12+ };
13+ config.foo.bar = "ok";
14+}
lib/tests/modules/declare-bare-submodule-deep-option-duplicate.nixnew file+10
@@ -0,0 +1,10 @@
1+{ lib, ... }:
2+let
3+ inherit (lib) mkOption types;
4+in
5+{
6+ options.bare-submodule.deep = mkOption {
7+ type = types.int;
8+ default = 2;
9+ };
10+}
lib/tests/modules/declare-bare-submodule-deep-option.nixnew file+10
@@ -0,0 +1,10 @@
1+{ lib, ... }:
2+let
3+ inherit (lib) mkOption types;
4+in
5+{
6+ options.bare-submodule.deep = mkOption {
7+ type = types.int;
8+ default = 2;
9+ };
10+}
lib/tests/modules/declare-bare-submodule-nested-option.nixnew file+19
@@ -0,0 +1,19 @@
1+{ config, lib, ... }:
2+let
3+ inherit (lib) mkOption types;
4+in
5+{
6+ options.bare-submodule = mkOption {
7+ type = types.submoduleWith {
8+ shorthandOnlyDefinesConfig = config.shorthandOnlyDefinesConfig;
9+ modules = [
10+ {
11+ options.nested = mkOption {
12+ type = types.int;
13+ default = 1;
14+ };
15+ }
16+ ];
17+ };
18+ };
19+}
lib/tests/modules/declare-bare-submodule.nixnew file+18
@@ -0,0 +1,18 @@
1+{ config, lib, ... }:
2+let
3+ inherit (lib) mkOption types;
4+in
5+{
6+ options.bare-submodule = mkOption {
7+ type = types.submoduleWith {
8+ modules = [ ];
9+ shorthandOnlyDefinesConfig = config.shorthandOnlyDefinesConfig;
10+ };
11+ default = {};
12+ };
13+
14+ # config-dependent options: won't recommend, but useful for making this test parameterized
15+ options.shorthandOnlyDefinesConfig = mkOption {
16+ default = false;
17+ };
18+}
lib/tests/modules/declare-set.nixnew file+12
@@ -0,0 +1,12 @@
1+{ lib, ... }:
2+
3+{
4+ options.set = lib.mkOption {
5+ default = { };
6+ example = { a = 1; };
7+ type = lib.types.attrsOf lib.types.int;
8+ description = ''
9+ Some descriptive text
10+ '';
11+ };
12+}
lib/tests/modules/define-bare-submodule-values.nixnew file+4
@@ -0,0 +1,4 @@
1+{
2+ bare-submodule.nested = 42;
3+ bare-submodule.deep = 420;
4+}
lib/tests/modules/define-shorthandOnlyDefinesConfig-true.nixnew file+1
@@ -0,0 +1 @@
1+{ shorthandOnlyDefinesConfig = true; }
lib/tests/modules/emptyValues.nixnew file+36
@@ -0,0 +1,36 @@
1+{ lib, ... }:
2+let
3+ inherit (lib) types;
4+in {
5+
6+ options = {
7+ int = lib.mkOption {
8+ type = types.lazyAttrsOf types.int;
9+ };
10+ list = lib.mkOption {
11+ type = types.lazyAttrsOf (types.listOf types.int);
12+ };
13+ nonEmptyList = lib.mkOption {
14+ type = types.lazyAttrsOf (types.nonEmptyListOf types.int);
15+ };
16+ attrs = lib.mkOption {
17+ type = types.lazyAttrsOf (types.attrsOf types.int);
18+ };
19+ null = lib.mkOption {
20+ type = types.lazyAttrsOf (types.nullOr types.int);
21+ };
22+ submodule = lib.mkOption {
23+ type = types.lazyAttrsOf (types.submodule {});
24+ };
25+ };
26+
27+ config = {
28+ int.a = lib.mkIf false null;
29+ list.a = lib.mkIf false null;
30+ nonEmptyList.a = lib.mkIf false null;
31+ attrs.a = lib.mkIf false null;
32+ null.a = lib.mkIf false null;
33+ submodule.a = lib.mkIf false null;
34+ };
35+
36+}
lib/tests/modules/extendModules-168767-imports.nixnew file+41
@@ -0,0 +1,41 @@
1+{ lib
2+, extendModules
3+, ...
4+}:
5+with lib;
6+{
7+ imports = [
8+
9+ {
10+ options.sub = mkOption {
11+ default = { };
12+ type = types.submodule (
13+ { config
14+ , extendModules
15+ , ...
16+ }:
17+ {
18+ options.value = mkOption {
19+ type = types.int;
20+ };
21+
22+ options.specialisation = mkOption {
23+ default = { };
24+ inherit
25+ (extendModules {
26+ modules = [{
27+ specialisation = mkOverride 0 { };
28+ }];
29+ })
30+ type;
31+ };
32+ }
33+ );
34+ };
35+ }
36+
37+ { config.sub.value = 1; }
38+
39+
40+ ];
41+}
lib/tests/modules/freeform-submodules.nixnew file+22
@@ -0,0 +1,22 @@
1+{ lib, options, ... }: with lib.types; {
2+
3+ options.fooDeclarations = lib.mkOption {
4+ default = (options.free.type.getSubOptions [])._freeformOptions.foo.declarations;
5+ };
6+
7+ options.free = lib.mkOption {
8+ type = submodule {
9+ config._module.freeformType = lib.mkMerge [
10+ (attrsOf (submodule {
11+ options.foo = lib.mkOption {};
12+ }))
13+ (attrsOf (submodule {
14+ options.bar = lib.mkOption {};
15+ }))
16+ ];
17+ };
18+ };
19+
20+ config.free.xxx.foo = 10;
21+ config.free.yyy.bar = 10;
22+}
lib/tests/modules/optionTypeFile.nixnew file+28
@@ -0,0 +1,28 @@
1+{ config, lib, ... }: {
2+
3+ _file = "optionTypeFile.nix";
4+
5+ options.theType = lib.mkOption {
6+ type = lib.types.optionType;
7+ };
8+
9+ options.theOption = lib.mkOption {
10+ type = config.theType;
11+ default = {};
12+ };
13+
14+ config.theType = lib.mkMerge [
15+ (lib.types.submodule {
16+ options.nested = lib.mkOption {
17+ type = lib.types.int;
18+ };
19+ })
20+ (lib.types.submodule {
21+ _file = "other.nix";
22+ options.nested = lib.mkOption {
23+ type = lib.types.str;
24+ };
25+ })
26+ ];
27+
28+}
lib/tests/modules/optionTypeMerging.nixnew file+27
@@ -0,0 +1,27 @@
1+{ config, lib, ... }: {
2+
3+ options.theType = lib.mkOption {
4+ type = lib.types.optionType;
5+ };
6+
7+ options.theOption = lib.mkOption {
8+ type = config.theType;
9+ };
10+
11+ config.theType = lib.mkMerge [
12+ (lib.types.submodule {
13+ options.int = lib.mkOption {
14+ type = lib.types.int;
15+ default = 10;
16+ };
17+ })
18+ (lib.types.submodule {
19+ options.str = lib.mkOption {
20+ type = lib.types.str;
21+ };
22+ })
23+ ];
24+
25+ config.theOption.str = "hello";
26+
27+}
lib/tests/modules/raw.nixnew file+30
@@ -0,0 +1,30 @@
1+{ lib, ... }: {
2+
3+ options = {
4+ processedToplevel = lib.mkOption {
5+ type = lib.types.raw;
6+ };
7+ unprocessedNesting = lib.mkOption {
8+ type = lib.types.raw;
9+ };
10+ multiple = lib.mkOption {
11+ type = lib.types.raw;
12+ };
13+ priorities = lib.mkOption {
14+ type = lib.types.raw;
15+ };
16+ };
17+
18+ config = {
19+ processedToplevel = lib.mkIf true 10;
20+ unprocessedNesting.foo = throw "foo";
21+ multiple = lib.mkMerge [
22+ "foo"
23+ "foo"
24+ ];
25+ priorities = lib.mkMerge [
26+ "foo"
27+ (lib.mkForce "bar")
28+ ];
29+ };
30+}
lib/tests/systems.nix+5−2
@@ -17,8 +17,11 @@ with lib.systems.doubles; lib.runTests {
1717
1818 testarm = mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv6l-netbsd" "armv6l-none" "armv7a-linux" "armv7a-netbsd" "armv7l-linux" "armv7l-netbsd" "arm-none" "armv7a-darwin" ];
1919 testi686 = mseteq i686 [ "i686-linux" "i686-freebsd" "i686-genode" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" "i686-none" "i686-darwin" ];
20− testmips = mseteq mips [ "mipsel-linux" "mipsel-netbsd" ];
20+ testmips = mseteq mips [ "mips64el-linux" "mipsel-linux" "mipsel-netbsd" ];
2121 testmmix = mseteq mmix [ "mmix-mmixware" ];
22+ testriscv = mseteq riscv [ "riscv32-linux" "riscv64-linux" "riscv32-netbsd" "riscv64-netbsd" "riscv32-none" "riscv64-none" ];
23+ testriscv32 = mseteq riscv32 [ "riscv32-linux" "riscv32-netbsd" "riscv32-none" ];
24+ testriscv64 = mseteq riscv64 [ "riscv64-linux" "riscv64-netbsd" "riscv64-none" ];
2225 testx86_64 = mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-genode" "x86_64-redox" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" "x86_64-windows" "x86_64-none" ];
2326
2427 testcygwin = mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ];
@@ -28,7 +31,7 @@ with lib.systems.doubles; lib.runTests {
2831 testredox = mseteq redox [ "x86_64-redox" ];
2932 testgnu = mseteq gnu (linux /* ++ kfreebsd ++ ... */);
3033 testillumos = mseteq illumos [ "x86_64-solaris" ];
31− testlinux = mseteq linux [ "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux" "armv7l-linux" "i686-linux" "mipsel-linux" "riscv32-linux" "riscv64-linux" "x86_64-linux" "powerpc64-linux" "powerpc64le-linux" "m68k-linux" "s390-linux" "s390x-linux" ];
34+ testlinux = mseteq linux [ "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux" "armv7l-linux" "i686-linux" "mips64el-linux" "mipsel-linux" "riscv32-linux" "riscv64-linux" "x86_64-linux" "powerpc64-linux" "powerpc64le-linux" "m68k-linux" "s390-linux" "s390x-linux" ];
3235 testnetbsd = mseteq netbsd [ "aarch64-netbsd" "armv6l-netbsd" "armv7a-netbsd" "armv7l-netbsd" "i686-netbsd" "m68k-netbsd" "mipsel-netbsd" "powerpc-netbsd" "riscv32-netbsd" "riscv64-netbsd" "x86_64-netbsd" ];
3336 testopenbsd = mseteq openbsd [ "i686-openbsd" "x86_64-openbsd" ];
3437 testwindows = mseteq windows [ "i686-cygwin" "x86_64-cygwin" "i686-windows" "x86_64-windows" ];
lib/trivial.nix+58−1
@@ -166,6 +166,30 @@ rec {
166166 /* Returns the current nixpkgs release number as string. */
167167 release = lib.strings.fileContents ../.version;
168168
169+ /* The latest release that is supported, at the time of release branch-off,
170+ if applicable.
171+
172+ Ideally, out-of-tree modules should be able to evaluate cleanly with all
173+ supported Nixpkgs versions (master, release and old release until EOL).
174+ So if possible, deprecation warnings should take effect only when all
175+ out-of-tree expressions/libs/modules can upgrade to the new way without
176+ losing support for supported Nixpkgs versions.
177+
178+ This release number allows deprecation warnings to be implemented such that
179+ they take effect as soon as the oldest release reaches end of life. */
180+ oldestSupportedRelease =
181+ # Update on master only. Do not backport.
182+ 2111;
183+
184+ /* Whether a feature is supported in all supported releases (at the time of
185+ release branch-off, if applicable). See `oldestSupportedRelease`. */
186+ isInOldestRelease =
187+ /* Release number of feature introduction as an integer, e.g. 2111 for 21.11.
188+ Set it to the upcoming release, matching the nixpkgs/.version file.
189+ */
190+ release:
191+ release <= lib.trivial.oldestSupportedRelease;
192+
169193 /* Returns the current nixpkgs release code name.
170194
171195 On each release the first letter is bumped and a new animal is chosen
@@ -323,7 +347,14 @@ rec {
323347
324348 Type: bool -> string -> a -> a
325349 */
326− warnIf = cond: msg: if cond then warn msg else id;
350+ warnIf = cond: msg: if cond then warn msg else x: x;
351+
352+ /*
353+ Like warnIf, but negated (warn if the first argument is `false`).
354+
355+ Type: bool -> string -> a -> a
356+ */
357+ warnIfNot = cond: msg: if cond then x: x else warn msg;
327358
328359 /*
329360 Like the `assert b; e` expression, but with a custom error message and
@@ -347,6 +378,13 @@ rec {
347378 */
348379 throwIfNot = cond: msg: if cond then x: x else throw msg;
349380
381+ /*
382+ Like throwIfNot, but negated (throw if the first argument is `true`).
383+
384+ Type: bool -> string -> a -> a
385+ */
386+ throwIf = cond: msg: if cond then throw msg else x: x;
387+
350388 /* Check if the elements in a list are valid values from a enum, returning the identity function, or throwing an error message otherwise.
351389
352390 Example:
@@ -403,6 +441,25 @@ rec {
403441 isFunction = f: builtins.isFunction f ||
404442 (f ? __functor && isFunction (f.__functor f));
405443
444+ /*
445+ Turns any non-callable values into constant functions.
446+ Returns callable values as is.
447+
448+ Example:
449+
450+ nix-repl> lib.toFunction 1 2
451+ 1
452+
453+ nix-repl> lib.toFunction (x: x + 1) 2
454+ 3
455+ */
456+ toFunction =
457+ # Any value
458+ v:
459+ if isFunction v
460+ then v
461+ else k: v;
462+
406463 /* Convert the given positive integer to a string of its hexadecimal
407464 representation. For example:
408465
lib/types.nix+73−21
@@ -61,7 +61,11 @@ let
6161 boolToString
6262 ;
6363
64− inherit (lib.modules) mergeDefinitions;
64+ inherit (lib.modules)
65+ mergeDefinitions
66+ fixupOptionType
67+ mergeOptionDecls
68+ ;
6569 outer_types =
6670rec {
6771 isType = type: x: (x._type or "") == type;
@@ -162,6 +166,13 @@ rec {
162166 # nixos/doc/manual/development/option-types.xml!
163167 types = rec {
164168
169+ raw = mkOptionType rec {
170+ name = "raw";
171+ description = "raw value";
172+ check = value: true;
173+ merge = mergeOneOption;
174+ };
175+
165176 anything = mkOptionType {
166177 name = "anything";
167178 description = "anything";
@@ -357,13 +368,21 @@ rec {
357368 emptyValue = { value = {}; };
358369 };
359370
360− # derivation is a reserved keyword.
371+ # A package is a top-level store path (/nix/store/hash-name). This includes:
372+ # - derivations
373+ # - more generally, attribute sets with an `outPath` or `__toString` attribute
374+ # pointing to a store path, e.g. flake inputs
375+ # - strings with context, e.g. "${pkgs.foo}" or (toString pkgs.foo)
376+ # - hardcoded store path literals (/nix/store/hash-foo) or strings without context
377+ # ("/nix/store/hash-foo"). These get a context added to them using builtins.storePath.
361378 package = mkOptionType {
362379 name = "package";
363380 check = x: isDerivation x || isStorePath x;
364381 merge = loc: defs:
365382 let res = mergeOneOption loc defs;
366− in if isDerivation res then res else toDerivation res;
383+ in if builtins.isPath res || (builtins.isString res && ! builtins.hasContext res)
384+ then toDerivation res
385+ else res;
367386 };
368387
369388 shellPackage = package // {
@@ -390,7 +409,7 @@ rec {
390409 ).optionalValue
391410 ) def.value
392411 ) defs)));
393− emptyValue = { value = {}; };
412+ emptyValue = { value = []; };
394413 getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["*"]);
395414 getSubModules = elemType.getSubModules;
396415 substSubModules = m: listOf (elemType.substSubModules m);
@@ -402,7 +421,7 @@ rec {
402421 let list = addCheck (types.listOf elemType) (l: l != []);
403422 in list // {
404423 description = "non-empty " + list.description;
405− # Note: emptyValue is left as is, because another module may define an element.
424+ emptyValue = { }; # no .value attr, meaning unset
406425 };
407426
408427 attrsOf = elemType: mkOptionType rec {
@@ -503,7 +522,7 @@ rec {
503522
504523 functionTo = elemType: mkOptionType {
505524 name = "functionTo";
506− description = "function that evaluates to a(n) ${elemType.name}";
525+ description = "function that evaluates to a(n) ${elemType.description}";
507526 check = isFunction;
508527 merge = loc: defs:
509528 fnArgs: (mergeDefinitions (loc ++ [ "[function body]" ]) elemType (map (fn: { inherit (fn) file; value = fn.value fnArgs; }) defs)).mergedValue;
@@ -518,22 +537,58 @@ rec {
518537 modules = toList modules;
519538 };
520539
540+ # The type of a type!
541+ optionType = mkOptionType {
542+ name = "optionType";
543+ description = "optionType";
544+ check = value: value._type or null == "option-type";
545+ merge = loc: defs:
546+ if length defs == 1
547+ then (head defs).value
548+ else let
549+ # Prepares the type definitions for mergeOptionDecls, which
550+ # annotates submodules types with file locations
551+ optionModules = map ({ value, file }:
552+ {
553+ _file = file;
554+ # There's no way to merge types directly from the module system,
555+ # but we can cheat a bit by just declaring an option with the type
556+ options = lib.mkOption {
557+ type = value;
558+ };
559+ }
560+ ) defs;
561+ # Merges all the types into a single one, including submodule merging.
562+ # This also propagates file information to all submodules
563+ mergedOption = fixupOptionType loc (mergeOptionDecls loc optionModules);
564+ in mergedOption.type;
565+ };
566+
521567 submoduleWith =
522568 { modules
523569 , specialArgs ? {}
524570 , 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
525576 }@attrs:
526577 let
527578 inherit (lib.modules) evalModules;
528579
529− coerce = unify: value: if isFunction value
530− then setFunctionArgs (args: unify (value args)) (functionArgs value)
531− else unify (if shorthandOnlyDefinesConfig then { config = value; } else value);
580+ shorthandToModule = if shorthandOnlyDefinesConfig == false
581+ then value: value
582+ else value: { config = value; };
532583
533584 allModules = defs: imap1 (n: { value, file }:
534− if isAttrs value || isFunction value then
535− # Annotate the value with the location of its definition for better error messages
536− coerce (lib.modules.unifyModuleSyntax file "${toString file}-${toString n}") value
585+ if isFunction value
586+ then setFunctionArgs
587+ (args: lib.modules.unifyModuleSyntax file "${toString file}-${toString (n + extensionOffset)}" (value args))
588+ (functionArgs value)
589+ else if isAttrs value
590+ then
591+ lib.modules.unifyModuleSyntax file "${toString file}-${toString (n + extensionOffset)}" (shorthandToModule value)
537592 else value
538593 ) defs;
539594
@@ -570,6 +625,7 @@ rec {
570625 (base.extendModules {
571626 modules = [ { _module.args.name = last loc; } ] ++ allModules defs;
572627 prefix = loc;
628+ extensionOffset = extensionOffset + length defs;
573629 }).config;
574630 emptyValue = { value = {}; };
575631 getSubOptions = prefix: (base.extendModules
@@ -601,7 +657,11 @@ rec {
601657 then lhs.specialArgs // rhs.specialArgs
602658 else throw "A submoduleWith option is declared multiple times with the same specialArgs \"${toString (attrNames intersecting)}\"";
603659 shorthandOnlyDefinesConfig =
604− if lhs.shorthandOnlyDefinesConfig == rhs.shorthandOnlyDefinesConfig
660+ if lhs.shorthandOnlyDefinesConfig == null
661+ then rhs.shorthandOnlyDefinesConfig
662+ else if rhs.shorthandOnlyDefinesConfig == null
663+ then lhs.shorthandOnlyDefinesConfig
664+ else if lhs.shorthandOnlyDefinesConfig == rhs.shorthandOnlyDefinesConfig
605665 then lhs.shorthandOnlyDefinesConfig
606666 else throw "A submoduleWith option is declared multiple times with conflicting shorthandOnlyDefinesConfig values";
607667 };
@@ -695,14 +755,6 @@ rec {
695755 nestedTypes.finalType = finalType;
696756 };
697757
698− # Obsolete alternative to configOf. It takes its option
699− # declarations from the ‘options’ attribute of containing option
700− # declaration.
701− optionSet = mkOptionType {
702− name = "optionSet";
703− description = "option set";
704− deprecationMessage = "Use `types.submodule' instead";
705− };
706758 # Augment the given type with an additional type check function.
707759 addCheck = elemType: check: elemType // { check = x: elemType.check x && check x; };
708760
maintainers/maintainer-list.nix+556−49
@@ -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";
@@ -929,6 +960,12 @@
929960 githubId = 1296771;
930961 name = "Anders Riutta";
931962 };
963+ arjan-s = {
964+ email = "github@anymore.nl";
965+ github = "arjan-s";
966+ githubId = 10400299;
967+ name = "Arjan Schrijver";
968+ };
932969 arkivm = {
933970 email = "vikram186@gmail.com";
934971 github = "arkivm";
@@ -1031,8 +1068,8 @@
10311068 name = "Kirill Boltaev";
10321069 };
10331070 ashley = {
1034− email = "personavinny@protonmail.com";
1035− github = "paranoidcat";
1071+ email = "ashley@kira64.xyz";
1072+ github = "kira64xyz";
10361073 githubId = 84152630;
10371074 name = "Ashley Chiara";
10381075 };
@@ -1295,12 +1332,24 @@
12951332 githubId = 127523;
12961333 name = "Herman Fries";
12971334 };
1335+ BarinovMaxim = {
1336+ name = "Barinov Maxim";
1337+ email = "barinov274@gmail.com";
1338+ github = "barinov274";
1339+ githubId = 54442153;
1340+ };
12981341 barrucadu = {
12991342 email = "mike@barrucadu.co.uk";
13001343 github = "barrucadu";
13011344 githubId = 75235;
13021345 name = "Michael Walker";
13031346 };
1347+ bartsch = {
1348+ email = "consume.noise@gmail.com";
1349+ github = "bartsch";
1350+ githubId = 3390885;
1351+ name = "Daniel Martin";
1352+ };
13041353 bartuka = {
13051354 email = "wand@hey.com";
13061355 github = "wandersoncferreira";
@@ -1360,6 +1409,12 @@
13601409 githubId = 164148;
13611410 name = "Ben Darwin";
13621411 };
1412+ bdd = {
1413+ email = "bdd@mindcast.org";
1414+ github = "bdd";
1415+ githubId = 11135;
1416+ name = "Berk D. Demir";
1417+ };
13631418 bdesham = {
13641419 email = "benjamin@esham.io";
13651420 github = "bdesham";
@@ -1682,6 +1737,12 @@
16821737 githubId = 355401;
16831738 name = "Brian Hicks";
16841739 };
1740+ brianmcgee = {
1741+ name = "Brian McGee";
1742+ email = "brian@41north.dev";
1743+ github = "brianmcgee";
1744+ githubId = 1173648;
1745+ };
16851746 Br1ght0ne = {
16861747 email = "brightone@protonmail.com";
16871748 github = "Br1ght0ne";
@@ -1770,6 +1831,12 @@
17701831 githubId = 7214361;
17711832 name = "Roman Gerasimenko";
17721833 };
1834+ builditluc = {
1835+ email = "builditluc@icloud.com";
1836+ github = "builditluc";
1837+ githubId = 37375448;
1838+ name = "Buildit";
1839+ };
17731840 bburdette = {
17741841 email = "bburdette@protonmail.com";
17751842 github = "bburdette";
@@ -1889,6 +1956,12 @@
18891956 githubId = 82591;
18901957 name = "Carl Sverre";
18911958 };
1959+ carpinchomug = {
1960+ email = "aki.suda@protonmail.com";
1961+ github = "carpinchomug";
1962+ githubId = 101536256;
1963+ name = "Akiyoshi Suda";
1964+ };
18921965 cartr = {
18931966 email = "carter.sande@duodecima.technology";
18941967 github = "cartr";
@@ -2013,6 +2086,12 @@
20132086 githubId = 8228888;
20142087 name = "Charlie Hanley";
20152088 };
2089+ charlesbaynham = {
2090+ email = "charlesbaynham@gmail.com";
2091+ github = "charlesbaynham";
2092+ githubId = 4397637;
2093+ name = "Charles Baynham";
2094+ };
20162095 CharlesHD = {
20172096 email = "charleshdespointes@gmail.com";
20182097 github = "CharlesHD";
@@ -2053,12 +2132,6 @@
20532132 githubId = 18648043;
20542133 name = "Daniel Cartwright";
20552134 };
2056− chiiruno = {
2057− email = "okinan@protonmail.com";
2058− github = "chiiruno";
2059− githubId = 30435868;
2060− name = "Okina Matara";
2061− };
20622135 Chili-Man = {
20632136 email = "dr.elhombrechile@gmail.com";
20642137 name = "Diego Rodriguez";
@@ -2175,6 +2248,12 @@
21752248 githubId = 42220376;
21762249 name = "Charlotte Van Petegem";
21772250 };
2251+ cigrainger = {
2252+ name = "Christopher Grainger";
2253+ email = "chris@amplified.ai";
2254+ github = "cigrainger";
2255+ githubId = 3984794;
2256+ };
21782257 ciil = {
21792258 email = "simon@lackerbauer.com";
21802259 github = "ciil";
@@ -2218,12 +2297,13 @@
22182297 ckie = {
22192298 email = "nixpkgs-0efe364@ckie.dev";
22202299 github = "ckiee";
2221− githubId = 2526321;
2300+ githubId = 25263210;
22222301 keys = [{
22232302 longkeyid = "rsa4096/0x13E79449C0525215";
22242303 fingerprint = "539F 0655 4D35 38A5 429A E253 13E7 9449 C052 5215";
22252304 }];
22262305 name = "ckie";
2306+ matrix = "@ckie:ckie.dev";
22272307 };
22282308 clkamp = {
22292309 email = "c@lkamp.de";
@@ -2418,6 +2498,23 @@
24182498 githubId = 5510514;
24192499 name = "Conrad Mearns";
24202500 };
2501+ corbanr = {
2502+ email = "corban@raunco.co";
2503+ github = "CorbanR";
2504+ githubId = 1918683;
2505+ matrix = "@corbansolo:matrix.org";
2506+ name = "Corban Raun";
2507+ keys = [
2508+ {
2509+ longkeyid = "rsa4096/0xA697A56F1F151189";
2510+ fingerprint = "6607 0B24 8CE5 64ED 22CE 0950 A697 A56F 1F15 1189";
2511+ }
2512+ {
2513+ longkeyid = "ed25519/0x230F4AC153F90F29";
2514+ fingerprint = "D8CB 816A B678 A4E6 1EC7 5325 230F 4AC1 53F9 0F29";
2515+ }
2516+ ];
2517+ };
24212518 couchemar = {
24222519 email = "couchemar@yandex.ru";
24232520 github = "couchemar";
@@ -2777,6 +2874,12 @@
27772874 githubId = 49904992;
27782875 name = "Dawid Sowa";
27792876 };
2877+ dbeckwith = {
2878+ email = "djbsnx@gmail.com";
2879+ github = "dbeckwith";
2880+ githubId = 1279939;
2881+ name = "Daniel Beckwith";
2882+ };
27802883 dbirks = {
27812884 email = "david@birks.dev";
27822885 github = "dbirks";
@@ -2993,6 +3096,12 @@
29933096 githubId = 8404455;
29943097 name = "Diego Lelis";
29953098 };
3099+ DieracDelta = {
3100+ email = "justin@restivo.me";
3101+ github = "DieracDelta";
3102+ githubId = 13730968;
3103+ name = "Justin Restivo";
3104+ };
29963105 diffumist = {
29973106 email = "git@diffumist.me";
29983107 github = "diffumist";
@@ -3772,6 +3881,13 @@
37723881 githubId = 222467;
37733882 name = "Dmitry Ivanov";
37743883 };
3884+ ethindp = {
3885+ name = "Ethin Probst";
3886+ email = "harlydavidsen@gmail.com";
3887+ matrix = "@ethindp:the-gdn.net";
3888+ github = "ethindp";
3889+ githubId = 8030501;
3890+ };
37753891 Etjean = {
37763892 email = "et.jean@outlook.fr";
37773893 github = "Etjean";
@@ -4008,11 +4124,18 @@
40084124 matrix = "@felschr:matrix.org";
40094125 github = "felschr";
40104126 githubId = 3314323;
4011− name = "Felix Tenley";
4012− keys = [{
4013− longkeyid = "ed25519/0x910ACB9F6BD26F58";
4014− fingerprint = "6AB3 7A28 5420 9A41 82D9 0068 910A CB9F 6BD2 6F58";
4015− }];
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+ ];
40164139 };
40174140 ffinkdevs = {
40184141 email = "fink@h0st.space";
@@ -4188,7 +4311,12 @@
41884311 githubId = 119691;
41894312 name = "Michael Gough";
41904313 };
4191−
4314+ freax13 = {
4315+ email = "erbse.13@gmx.de";
4316+ github = "freax13";
4317+ githubId = 14952658;
4318+ name = "Tom Dohrmann";
4319+ };
41924320 fredeb = {
41934321 email = "im@fredeb.dev";
41944322 github = "fredeeb";
@@ -4432,6 +4560,12 @@
44324560 githubId = 3217744;
44334561 name = "Peter Ferenczy";
44344562 };
4563+ ghostbuster91 = {
4564+ name = "Kasper Kondzielski";
4565+ email = "kghost0@gmail.com";
4566+ github = "ghostbuster91";
4567+ githubId = 5662622;
4568+ };
44354569 ghuntley = {
44364570 email = "ghuntley@ghuntley.com";
44374571 github = "ghuntley";
@@ -4586,6 +4720,12 @@
45864720 githubId = 4656860;
45874721 name = "Gaute Ravndal";
45884722 };
4723+ graysonhead = {
4724+ email = "grayson@graysonhead.net";
4725+ github = "graysonhead";
4726+ githubId = 6179496;
4727+ name = "Grayson Head";
4728+ };
45894729 grburst = {
45904730 email = "GRBurst@protonmail.com";
45914731 github = "GRBurst";
@@ -4614,6 +4754,12 @@
46144754 githubId = 201997;
46154755 name = "Eric Seidel";
46164756 };
4757+ grindhold = {
4758+ name = "grindhold";
4759+ email = "grindhold+nix@skarphed.org";
4760+ github = "grindhold";
4761+ githubId = 2592640;
4762+ };
46174763 gspia = {
46184764 email = "iahogsp@gmail.com";
46194765 github = "gspia";
@@ -4632,6 +4778,12 @@
46324778 githubId = 343415;
46334779 name = "Greg Roodt";
46344780 };
4781+ grnnja = {
4782+ email = "grnnja@gmail.com";
4783+ github = "grnnja";
4784+ githubId = 31556469;
4785+ name = "Prem Netsuwan";
4786+ };
46354787 gruve-p = {
46364788 email = "groestlcoin@gmail.com";
46374789 github = "gruve-p";
@@ -5347,6 +5499,12 @@
53475499 githubId = 41924494;
53485500 name = "Ivar";
53495501 };
5502+ iwanb = {
5503+ email = "tracnar@gmail.com";
5504+ github = "iwanb";
5505+ githubId = 4035835;
5506+ name = "Iwan";
5507+ };
53505508 ixmatus = {
53515509 email = "parnell@digitalmentat.com";
53525510 github = "ixmatus";
@@ -5491,6 +5649,12 @@
54915649 githubId = 488556;
54925650 name = "Javier Aguirre";
54935651 };
5652+ jayesh-bhoot = {
5653+ name = "Jayesh Bhoot";
5654+ email = "jayesh@bhoot.sh";
5655+ github = "jayesh-bhoot";
5656+ githubId = 1915507;
5657+ };
54945658 jb55 = {
54955659 email = "jb55@jb55.com";
54965660 github = "jb55";
@@ -5596,6 +5760,12 @@
55965760 github = "jduan";
55975761 githubId = 452450;
55985762 };
5763+ jdupak = {
5764+ name = "Jakub Dupak";
5765+ email = "dev@jakubdupak.com";
5766+ github = "jdupak";
5767+ githubId = 22683640;
5768+ };
55995769 jecaro = {
56005770 email = "jeancharles.quillet@gmail.com";
56015771 github = "jecaro";
@@ -5816,6 +5986,12 @@
58165986 githubId = 587870;
58175987 name = "Jonathan Mettes";
58185988 };
5989+ jmgilman = {
5990+ email = "joshuagilman@gmail.com";
5991+ github = "jmgilman";
5992+ githubId = 2308444;
5993+ name = "Joshua Gilman";
5994+ };
58195995 jo1gi = {
58205996 email = "joakimholm@protonmail.com";
58215997 github = "jo1gi";
@@ -6327,6 +6503,12 @@
63276503 githubId = 37185887;
63286504 name = "Calvin Kim";
63296505 };
6506+ keldu = {
6507+ email = "mail@keldu.de";
6508+ github = "keldu";
6509+ githubId = 15373888;
6510+ name = "Claudius Holeksa";
6511+ };
63306512 kennyballou = {
63316513 email = "kb@devnulllabs.io";
63326514 github = "kennyballou";
@@ -6524,7 +6706,7 @@
65246706 githubId = 18447310;
65256707 };
65266708 kloenk = {
6527− email = "me@kloenk.de";
6709+ email = "me@kloenk.dev";
65286710 matrix = "@kloenk:petabyte.dev";
65296711 name = "Finn Behrens";
65306712 github = "kloenk";
@@ -6703,12 +6885,6 @@
67036885 githubId = 99639;
67046886 name = "Pawel Kruszewski";
67056887 };
6706− ktosiek = {
6707− email = "tomasz.kontusz@gmail.com";
6708− github = "ktosiek";
6709− githubId = 278013;
6710− name = "Tomasz Kontusz";
6711− };
67126888 kubukoz = {
67136889 email = "kubukoz@gmail.com";
67146890 github = "kubukoz";
@@ -7042,6 +7218,13 @@
70427218 githubId = 1769386;
70437219 name = "Liam Diprose";
70447220 };
7221+ libjared = {
7222+ email = "jared@perrycode.com";
7223+ github = "libjared";
7224+ githubId = 3746656;
7225+ matrix = "@libjared:matrix.org";
7226+ name = "Jared Perry";
7227+ };
70457228 liff = {
70467229 email = "liff@iki.fi";
70477230 github = "liff";
@@ -7072,6 +7255,13 @@
70727255 githubId = 714;
70737256 name = "Lily Ballard";
70747257 };
7258+ lilyinstarlight = {
7259+ email = "lily@lily.flowers";
7260+ matrix = "@lily:lily.flowers";
7261+ github = "lilyinstarlight";
7262+ githubId = 298109;
7263+ name = "Lily Foster";
7264+ };
70757265 limeytexan = {
70767266 email = "limeytexan@gmail.com";
70777267 github = "limeytexan";
@@ -7182,6 +7372,29 @@
71827372 githubId = 1267527;
71837373 name = "Daniel Firth";
71847374 };
7375+ lockejan = {
7376+ email = "git@smittie.de";
7377+ matrix = "@jan:smittie.de";
7378+ github = "lockejan";
7379+ githubId = 25434434;
7380+ name = "Jan Schmitt";
7381+ keys = [{
7382+ longkeyid = "dsa2048/0xA2BC3C6F14351991";
7383+ fingerprint = "1763 9903 2D7C 5B82 5D5A 0EAD A2BC 3C6F 1435 1991";
7384+ }];
7385+ };
7386+ lodi = {
7387+ email = "anthony.lodi@gmail.com";
7388+ github = "lodi";
7389+ githubId = 918448;
7390+ name = "Anthony Lodi";
7391+ };
7392+ loicreynier = {
7393+ email = "loic@loicreynier.fr";
7394+ github = "loicreynier";
7395+ githubId = 88983487;
7396+ name = "Loïc Reynier";
7397+ };
71857398 lopsided98 = {
71867399 email = "benwolsieffer@gmail.com";
71877400 github = "lopsided98";
@@ -7672,6 +7885,16 @@
76727885 githubId = 279868;
76737886 name = "Matti Kariluoma";
76747887 };
7888+ matthewpi = {
7889+ email = "me+nix@matthewp.io";
7890+ github = "matthewpi";
7891+ githubId = 26559841;
7892+ name = "Matthew Penner";
7893+ keys = [{
7894+ longkeyid = "ed25519/0x31311906AD4CF6D6";
7895+ fingerprint = "5118 F1CC B7B0 6C17 4DD1 5267 3131 1906 AD4C F6D6";
7896+ }];
7897+ };
76757898 maurer = {
76767899 email = "matthew.r.maurer+nix@gmail.com";
76777900 github = "maurer";
@@ -7718,6 +7941,12 @@
77187941 githubId = 1187050;
77197942 name = "Maximilian Huber";
77207943 };
7944+ maximsmol = {
7945+ email = "maximsmol@gmail.com";
7946+ github = "maximsmol";
7947+ githubId = 1472826;
7948+ name = "Max Smolin";
7949+ };
77217950 maxxk = {
77227951 email = "maxim.krivchikov@gmail.com";
77237952 github = "maxxk";
@@ -7898,12 +8127,6 @@
78988127 github = "kira-bruneau";
78998128 githubId = 382041;
79008129 };
7901− meutraa = {
7902− email = "paul+nixpkgs@lost.host";
7903− name = "Paul Meredith";
7904− github = "meutraa";
7905− githubId = 68550871;
7906− };
79078130 mephistophiles = {
79088131 email = "mussitantesmortem@gmail.com";
79098132 name = "Maxim Zhukov";
@@ -7946,12 +8169,24 @@
79468169 githubId = 668926;
79478170 name = "Maximilian Güntner";
79488171 };
8172+ mh = {
8173+ email = "68288772+markus-heinrich@users.noreply.github.com";
8174+ github = "markus-heinrich";
8175+ githubId = 68288772;
8176+ name = "Markus Heinrich";
8177+ };
79498178 mhaselsteiner = {
79508179 email = "magdalena.haselsteiner@gmx.at";
79518180 github = "mhaselsteiner";
79528181 githubId = 20536514;
79538182 name = "Magdalena Haselsteiner";
79548183 };
8184+ mh182 = {
8185+ email = "mh182@chello.at";
8186+ github = "mh182";
8187+ githubId = 9980864;
8188+ name = "Max Hofer";
8189+ };
79558190 mic92 = {
79568191 email = "joerg@thalheim.io";
79578192 matrix = "@mic92:nixos.dev";
@@ -8125,6 +8360,17 @@
81258360 githubId = 1776903;
81268361 name = "Andrew Abbott";
81278362 };
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+ };
81288374 mitchmindtree = {
81298375 email = "mail@mitchellnordine.com";
81308376 github = "mitchmindtree";
@@ -8371,6 +8617,17 @@
83718617 githubId = 3073833;
83728618 name = "Massimo Redaelli";
83738619 };
8620+ mrhedgehog = {
8621+ name = "Mr Hedgehog";
8622+ email = "hedgehog@mrhedgehog.xyz";
8623+ matrix = "@mrhedgehog:jupiterbroadcasting.com";
8624+ github = "ModdedGamers";
8625+ githubId = 35778371;
8626+ keys = [{
8627+ longkeyid = "rsa4096/0x7D5107866B1C6752";
8628+ fingerprint = "38A0 29B0 4A7E 4C13 A4BB 86C8 7D51 0786 6B1C 6752";
8629+ }];
8630+ };
83748631 mrkkrp = {
83758632 email = "markkarpov92@gmail.com";
83768633 github = "mrkkrp";
@@ -8411,7 +8668,7 @@
84118668 };
84128669 msfjarvis = {
84138670 github = "msfjarvis";
8414− githubId = 3348378;
8671+ githubId = 13348378;
84158672 name = "Harsh Shandilya";
84168673 email = "nixos@msfjarvis.dev";
84178674 keys = [{
@@ -8515,6 +8772,17 @@
85158772 githubId = 25388474;
85168773 name = "Matej Urbas";
85178774 };
8775+ mvisonneau = {
8776+ name = "Maxime VISONNEAU";
8777+ email = "maxime@visonneau.fr";
8778+ matrix = "@maxime:visonneau.fr";
8779+ github = "mvisonneau";
8780+ githubId = 1761583;
8781+ keys = [{
8782+ longkeyid = "rsa4096/0x150D6F0AE9198D24";
8783+ fingerprint = "EC63 0CEA E8BC 5EE5 5C58 F2E3 150D 6F0A E919 8D24";
8784+ }];
8785+ };
85188786 mvnetbiz = {
85198787 email = "mvnetbiz@gmail.com";
85208788 matrix = "@mvtva:matrix.org";
@@ -8540,6 +8808,12 @@
85408808 githubId = 9636071;
85418809 name = "Myrl Hex";
85428810 };
8811+ n0emis = {
8812+ email = "nixpkgs@n0emis.network";
8813+ github = "n0emis";
8814+ githubId = 22817873;
8815+ name = "Ember Keske";
8816+ };
85438817 nadrieril = {
85448818 email = "nadrieril@gmail.com";
85458819 github = "nadrieril";
@@ -8607,6 +8881,12 @@
86078881 fingerprint = "4BFF 0614 03A2 47F0 AA0B 4BC4 916D 8B67 2418 92AE";
86088882 }];
86098883 };
8884+ nbr = {
8885+ email = "nbr@users.noreply.github.com";
8886+ github = "nbr";
8887+ githubId = 3819225;
8888+ name = "Nick Braga";
8889+ };
86108890 nbren12 = {
86118891 email = "nbren12@gmail.com";
86128892 github = "nbren12";
@@ -8642,6 +8922,12 @@
86428922 githubId = 3747396;
86438923 name = "Nathan Isom";
86448924 };
8925+ neilmayhew = {
8926+ email = "nix@neil.mayhew.name";
8927+ github = "neilmayhew";
8928+ githubId = 166791;
8929+ name = "Neil Mayhew";
8930+ };
86458931 nelsonjeppesen = {
86468932 email = "nix@jeppesen.io";
86478933 github = "NelsonJeppesen";
@@ -8770,6 +9056,12 @@
87709056 githubId = 8214542;
87719057 name = "Nicolò Balzarotti";
87729058 };
9059+ nidabdella = {
9060+ name = "Mohamed Nidabdella";
9061+ email = "nidabdella.mohamed@gmail.com";
9062+ github = "nidabdella";
9063+ githubId = 8083813;
9064+ };
87739065 NieDzejkob = {
87749066 email = "kuba@kadziolka.net";
87759067 github = "NieDzejkob";
@@ -9075,6 +9367,12 @@
90759367 githubId = 158758;
90769368 name = "Oliver Dunkl";
90779369 };
9370+ ofek = {
9371+ email = "oss@ofek.dev";
9372+ github = "ofek";
9373+ githubId = 9677399;
9374+ name = "Ofek Lev";
9375+ };
90789376 offline = {
90799377 email = "jaka@x-truder.net";
90809378 github = "offlinehacker";
@@ -9169,6 +9467,12 @@
91699467 githubId = 23431373;
91709468 name = "Christoph Neidahl";
91719469 };
9470+ opeik = {
9471+ email = "sandro@stikic.com";
9472+ github = "opeik";
9473+ githubId = 11566773;
9474+ name = "Sandro Stikić";
9475+ };
91729476 orbekk = {
91739477 email = "kjetil.orbekk@gmail.com";
91749478 github = "orbekk";
@@ -9253,6 +9557,12 @@
92539557 githubId = 15930073;
92549558 name = "Moritz Scheuren";
92559559 };
9560+ ozkutuk = {
9561+ email = "ozkutuk@protonmail.com";
9562+ github = "ozkutuk";
9563+ githubId = 5948762;
9564+ name = "Berk Özkütük";
9565+ };
92569566 pablovsky = {
92579567 email = "dealberapablo07@gmail.com";
92589568 github = "pablo1107";
@@ -9321,6 +9631,13 @@
93219631 githubId = 71795;
93229632 name = "Mica Semrick";
93239633 };
9634+ papojari = {
9635+ email = "papojari-git.ovoid@aleeas.com";
9636+ matrix = "@papojari:artemislena.eu";
9637+ github = "papojari";
9638+ githubId = 81317317;
9639+ name = "papojari";
9640+ };
93249641 paraseba = {
93259642 email = "paraseba@gmail.com";
93269643 github = "paraseba";
@@ -9718,6 +10035,12 @@
971810035 fingerprint = "2CD2 B030 BD22 32EF DF5A 008A 3618 20A4 5DB4 1E9A";
971910036 }];
972010037 };
10038+ podocarp = {
10039+ email = "xdjiaxd@gmail.com";
10040+ github = "podocarp";
10041+ githubId = 10473184;
10042+ name = "Jia Xiaodong";
10043+ };
972110044 polendri = {
972210045 email = "paul@ijj.li";
972310046 github = "polendri";
@@ -9758,6 +10081,12 @@
975810081 fingerprint = "48AD DE10 F27B AFB4 7BB0 CCAF 2D25 95A0 0D08 ACE0";
975910082 }];
976010083 };
10084+ ppenguin = {
10085+ name = "Jeroen Versteeg";
10086+ email = "hieronymusv@gmail.com";
10087+ github = "ppenguin";
10088+ githubId = 17690377;
10089+ };
976110090 ppom = {
976210091 name = "Paco Pompeani";
976310092 email = "paco@ecomail.io";
@@ -9971,6 +10300,12 @@
997110300 githubId = 115877;
997210301 name = "Kenny Shen";
997310302 };
10303+ quag = {
10304+ email = "quaggy@gmail.com";
10305+ github = "quag";
10306+ githubId = 35086;
10307+ name = "Jonathan Wright";
10308+ };
997410309 queezle = {
997510310 email = "git@queezle.net";
997610311 github = "qzle";
@@ -10114,6 +10449,16 @@
1011410449 githubId = 16487165;
1011510450 name = "Rafael Basso";
1011610451 };
10452+ rbreslow = {
10453+ name = "Rocky Breslow";
10454+ email = "1774125+rbreslow@users.noreply.github.com";
10455+ github = "rbreslow";
10456+ githubId = 1774125;
10457+ keys = [{
10458+ longkeyid = "ed25519/0xA0D32ACCA38B88ED";
10459+ fingerprint = "B5B7 BCA0 EE6F F31E 263A 69E3 A0D3 2ACC A38B 88ED";
10460+ }];
10461+ };
1011710462 rbrewer = {
1011810463 email = "rwb123@gmail.com";
1011910464 github = "rbrewer123";
@@ -10240,6 +10585,18 @@
1024010585 githubId = 22803888;
1024110586 name = "Lu Hongxu";
1024210587 };
10588+ rgnns = {
10589+ email = "jglievano@gmail.com";
10590+ github = "rgnns";
10591+ githubId = 811827;
10592+ name = "Gabriel Lievano";
10593+ };
10594+ rgrinberg = {
10595+ name = "Rudi Grinberg";
10596+ email = "me@rgrinberg.com";
10597+ github = "rgrinberg";
10598+ githubId = 139003;
10599+ };
1024310600 rgrunbla = {
1024410601 email = "remy@grunblatt.org";
1024510602 github = "rgrunbla";
@@ -10264,6 +10621,13 @@
1026410621 githubId = 6047658;
1026510622 name = "Ryan Horiguchi";
1026610623 };
10624+ rhysmdnz = {
10625+ email = "rhys@memes.nz";
10626+ matrix = "@rhys:memes.nz";
10627+ github = "rhysmdnz";
10628+ githubId = 2162021;
10629+ name = "Rhys Davies";
10630+ };
1026710631 ribose-jeffreylau = {
1026810632 name = "Jeffrey Lau";
1026910633 email = "jeffrey.lau@ribose.com";
@@ -10762,28 +11126,22 @@
1076211126 githubId = 132835;
1076311127 name = "Samuel Dionne-Riel";
1076411128 };
10765− samuelgrf = {
10766− email = "s@muel.gr";
10767− github = "samuelgrf";
10768− githubId = 67663538;
10769− name = "Samuel Gräfenstein";
10770− keys = [
10771− {
10772− longkeyid = "rsa4096/0xDE75F92E318123F0";
10773− fingerprint = "6F2E 2A90 423C 8111 BFF2 895E DE75 F92E 3181 23F0";
10774− }
10775− {
10776− longkeyid = "rsa4096/0xEF76A063F15C63C8";
10777− fingerprint = "FF24 5832 8FAF 4660 18C6 186E EF76 A063 F15C 63C8";
10778− }
10779− ];
10780− };
1078111129 samuelrivas = {
1078211130 email = "samuelrivas@gmail.com";
1078311131 github = "samuelrivas";
1078411132 githubId = 107703;
1078511133 name = "Samuel Rivas";
1078611134 };
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+ };
1078711145 sander = {
1078811146 email = "s.vanderburg@tudelft.nl";
1078911147 github = "svanderburg";
@@ -10890,6 +11248,16 @@
1089011248 email = "schristopher@konputa.com";
1089111249 name = "Scott Christopher";
1089211250 };
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+};
1089311261 scode = {
1089411262 email = "peter.schuller@infidyne.com";
1089511263 github = "scode";
@@ -10940,6 +11308,12 @@
1094011308 githubId = 19472270;
1094111309 name = "Sebastian";
1094211310 };
11311+ sebastianblunt = {
11312+ name = "Sebastian Blunt";
11313+ email = "nix@sebastianblunt.com";
11314+ github = "sebastianblunt";
11315+ githubId = 47431204;
11316+ };
1094311317 sebbadk = {
1094411318 email = "sebastian@sebba.dk";
1094511319 github = "SEbbaDK";
@@ -10994,6 +11368,12 @@
1099411368 githubId = 307899;
1099511369 name = "Gurkan Gur";
1099611370 };
11371+ serge = {
11372+ email = "sb@canva.com";
11373+ github = "serge-belov";
11374+ githubId = 38824235;
11375+ name = "Serge Belov";
11376+ };
1099711377 sersorrel = {
1099811378 email = "ash@sorrel.sh";
1099911379 github = "sersorrel";
@@ -11038,6 +11418,12 @@
1103811418 githubId = 1151264;
1103911419 name = "Sebastian Graf";
1104011420 };
11421+ shadaj = {
11422+ email = "shadaj@users.noreply.github.com";
11423+ github = "shadaj";
11424+ githubId = 543055;
11425+ name = "Shadaj Laddad";
11426+ };
1104111427 shahrukh330 = {
1104211428 email = "shahrukh330@gmail.com";
1104311429 github = "shahrukh330";
@@ -11078,6 +11464,12 @@
1107811464 githubId = 293035;
1107911465 name = "Shawn Dellysse";
1108011466 };
11467+ shawn8901 = {
11468+ email = "shawn8901@googlemail.com";
11469+ github = "shawn8901";
11470+ githubId = 12239057;
11471+ name = "Shawn8901";
11472+ };
1108111473 shazow = {
1108211474 email = "andrey.petrov@shazow.net";
1108311475 github = "shazow";
@@ -11228,6 +11620,12 @@
1122811620 githubId = 2770647;
1122911621 name = "Simon Vandel Sillesen";
1123011622 };
11623+ sir4ur0n = {
11624+ email = "sir4ur0n@users.noreply.github.com";
11625+ github = "sir4ur0n";
11626+ githubId = 1204125;
11627+ name = "sir4ur0n";
11628+ };
1123111629 siraben = {
1123211630 email = "bensiraphob@gmail.com";
1123311631 matrix = "@siraben:matrix.org";
@@ -11547,6 +11945,23 @@
1154711945 githubId = 1699155;
1154811946 name = "Steve Elliott";
1154911947 };
11948+ stehessel = {
11949+ email = "stephan@stehessel.de";
11950+ github = "stehessel";
11951+ githubId = 55607356;
11952+ name = "Stephan Heßelmann";
11953+ };
11954+ steinybot = {
11955+ name = "Jason Pickens";
11956+ email = "jasonpickensnz@gmail.com";
11957+ matrix = "@steinybot:matrix.org";
11958+ github = "steinybot";
11959+ githubId = 4659562;
11960+ keys = [{
11961+ longkeyid = "ed25519/0x21DE1CAE59762A0F";
11962+ fingerprint = "2709 1DEC CC42 4635 4299 569C 21DE 1CAE 5976 2A0F";
11963+ }];
11964+ };
1155011965 stelcodes = {
1155111966 email = "stel@stel.codes";
1155211967 github = "stelcodes";
@@ -11648,6 +12063,12 @@
1164812063 githubId = 1694705;
1164912064 name = "Sam Stites";
1165012065 };
12066+ strager = {
12067+ email = "strager.nds@gmail.com";
12068+ github = "strager";
12069+ githubId = 48666;
12070+ name = "Matthew \"strager\" Glazar";
12071+ };
1165112072 stumoss = {
1165212073 email = "samoss@gmail.com";
1165312074 github = "stumoss";
@@ -12140,6 +12561,12 @@
1214012561 githubId = 844343;
1214112562 name = "Thiago K. Okada";
1214212563 };
12564+ thibaultlemaire = {
12565+ email = "thibault.lemaire@protonmail.com";
12566+ github = "ThibaultLemaire";
12567+ githubId = 21345269;
12568+ name = "Thibault Lemaire";
12569+ };
1214312570 thibautmarty = {
1214412571 email = "github@thibautmarty.fr";
1214512572 matrix = "@thibaut:thibautmarty.fr";
@@ -12386,6 +12813,13 @@
1238612813 githubId = 90456;
1238712814 name = "Rebecca (Bex) Kelly";
1238812815 };
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+ };
1238912823 travisbhartwell = {
1239012824 email = "nafai@travishartwell.net";
1239112825 github = "travisbhartwell";
@@ -12554,6 +12988,12 @@
1255412988 githubId = 1983821;
1255512989 name = "Eric Wolf";
1255612990 };
12991+ uakci = {
12992+ name = "uakci";
12993+ email = "uakci@uakci.pl";
12994+ github = "uakci";
12995+ githubId = 6961268;
12996+ };
1255712997 udono = {
1255812998 email = "udono@virtual-things.biz";
1255912999 github = "udono";
@@ -12792,9 +13232,9 @@
1279213232 githubId = 5837359;
1279313233 name = "Adrian Pistol";
1279413234 };
12795− vika_nezrimaya = {
13235+ vikanezrimaya = {
1279613236 email = "vika@fireburn.ru";
12797− github = "kisik21";
13237+ github = "vikanezrimaya";
1279813238 githubId = 7953163;
1279913239 name = "Vika Shleina";
1280013240 keys = [{
@@ -12818,6 +13258,12 @@
1281813258 githubId = 118959;
1281913259 name = "VinyMeuh";
1282013260 };
13261+ viraptor = {
13262+ email = "nix@viraptor.info";
13263+ github = "viraptor";
13264+ githubId = 188063;
13265+ name = "Stanisław Pitucha";
13266+ };
1282113267 viric = {
1282213268 email = "viric@viric.name";
1282313269 github = "viric";
@@ -12848,6 +13294,12 @@
1284813294 githubId = 1771332;
1284913295 name = "László Vaskó";
1285013296 };
13297+ vlinkz = {
13298+ email = "vmfuentes64@gmail.com";
13299+ github = "vlinkz";
13300+ githubId = 20145996;
13301+ name = "Victor Fuentes";
13302+ };
1285113303 vlstill = {
1285213304 email = "xstill@fi.muni.cz";
1285313305 github = "vlstill";
@@ -12975,6 +13427,12 @@
1297513427 githubId = 34962284;
1297613428 name = "wchresta";
1297713429 };
13430+ wdavidw = {
13431+ name = "David Worms";
13432+ email = "david@adaltas.com";
13433+ github = "wdavidw";
13434+ githubId = 46896;
13435+ };
1297813436 wedens = {
1297913437 email = "kirill.wedens@gmail.com";
1298013438 name = "wedens";
@@ -13134,7 +13592,7 @@
1313413592 name = "Andrei Pampu";
1313513593 };
1313613594 wolfangaukang = {
13137− email = "liquid.query960@4wrd.cc";
13595+ email = "clone.gleeful135+nixpkgs@anonaddy.me";
1313813596 github = "wolfangaukang";
1313913597 githubId = 8378365;
1314013598 name = "P. R. d. O.";
@@ -13164,7 +13622,7 @@
1316413622 name = "Wayne Scott";
1316513623 };
1316613624 wucke13 = {
13167− email = "info@wucke13.de";
13625+ email = "wucke13@gmail.com";
1316813626 github = "wucke13";
1316913627 githubId = 20400405;
1317013628 name = "Wucke";
@@ -13187,6 +13645,13 @@
1318713645 github = "wunderbrick";
1318813646 githubId = 52174714;
1318913647 };
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+ };
1319013655 wyvie = {
1319113656 email = "elijahrum@gmail.com";
1319213657 github = "wyvie";
@@ -13746,6 +14211,12 @@
1374614211 github = "deifactor";
1374714212 githubId = 30192992;
1374814213 };
14214+ deinferno = {
14215+ name = "deinferno";
14216+ email = "14363193+deinferno@users.noreply.github.com";
14217+ github = "deinferno";
14218+ githubId = 14363193;
14219+ };
1374914220 fzakaria = {
1375014221 name = "Farid Zakaria";
1375114222 email = "farid.m.zakaria@gmail.com";
@@ -13869,6 +14340,12 @@
1386914340 github = "zbioe";
1387014341 githubId = 7332055;
1387114342 };
14343+ zendo = {
14344+ name = "zendo";
14345+ email = "linzway@qq.com";
14346+ github = "zendo";
14347+ githubId = 348013;
14348+ };
1387214349 zenithal = {
1387314350 name = "zenithal";
1387414351 email = "i@zenithal.me";
@@ -13936,6 +14413,12 @@
1393614413 github = "jpagex";
1393714414 githubId = 635768;
1393814415 };
14416+ vbrandl = {
14417+ name = "Valentin Brandl";
14418+ email = "mail+nixpkgs@vbrandl.net";
14419+ github = "vbrandl";
14420+ githubId = 20639051;
14421+ };
1393914422 portothree = {
1394014423 name = "Gustavo Porto";
1394114424 email = "gustavoporto@ya.ru";
@@ -13971,4 +14454,28 @@
1397114454 github = "nigelgbanks";
1397214455 githubId = 487373;
1397314456 };
14457+ zanculmarktum = {
14458+ name = "Azure Zanculmarktum";
14459+ email = "zanculmarktum@gmail.com";
14460+ github = "zanculmarktum";
14461+ githubId = 16958511;
14462+ };
14463+ kuwii = {
14464+ name = "kuwii";
14465+ email = "kuwii.someone@gmail.com";
14466+ github = "kuwii";
14467+ githubId = 10705175;
14468+ };
14469+ melias122 = {
14470+ name = "Martin Elias";
14471+ email = "martin+nixpkgs@elias.sx";
14472+ github = "melias122";
14473+ githubId = 1027766;
14474+ };
14475+ bryanhonof = {
14476+ name = "Bryan Honof";
14477+ email = "bryanhonof@gmail.com";
14478+ github = "bryanhonof";
14479+ githubId = 5932804;
14480+ };
1397414481}
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/maintained-broken-pkgs.nixnew file+22
@@ -0,0 +1,22 @@
1+let
2+ nixpkgs = import ../../..;
3+ inherit (nixpkgs {}) haskellPackages lib;
4+ maintainedPkgs = lib.filterAttrs (
5+ _: v: builtins.length (v.meta.maintainers or []) > 0
6+ ) haskellPackages;
7+ brokenPkgs = lib.filterAttrs (_: v: v.meta.broken) maintainedPkgs;
8+ transitiveBrokenPkgs = lib.filterAttrs
9+ (_: v: !(builtins.tryEval (v.outPath or null)).success && !v.meta.broken)
10+ maintainedPkgs;
11+ infoList = pkgs: lib.concatStringsSep "\n" (lib.mapAttrsToList (name: drv: "${name} ${(builtins.elemAt drv.meta.maintainers 0).github}") pkgs);
12+in {
13+ report = ''
14+ BROKEN:
15+ ${infoList brokenPkgs}
16+
17+ TRANSITIVE BROKEN:
18+ ${infoList transitiveBrokenPkgs}
19+ '';
20+ transitiveErrors =
21+ builtins.attrValues transitiveBrokenPkgs;
22+}
maintainers/scripts/haskell/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/haskell/regenerate-hackage-packages.sh+1−1
@@ -20,7 +20,7 @@ HACKAGE2NIX="${HACKAGE2NIX:-hackage2nix}"
2020# See: https://github.com/NixOS/nixpkgs/pull/122023
2121export LC_ALL=C.UTF-8
2222
23−extraction_derivation='with import ./. {}; runCommand "unpacked-cabal-hashes" { } "tar xf ${all-cabal-hashes} --strip-components=1 --one-top-level=$out"'
23+extraction_derivation='with import ./. {}; runCommandLocal "unpacked-cabal-hashes" { } "tar xf ${all-cabal-hashes} --strip-components=1 --one-top-level=$out"'
2424unpacked_hackage="$(nix-build -E "$extraction_derivation" --no-out-link)"
2525config_dir=pkgs/development/haskell-modules/configuration-hackage2nix
2626
maintainers/scripts/haskell/update-stackage.sh+25−12
@@ -1,26 +1,38 @@
11#! /usr/bin/env nix-shell
22#! nix-shell -i bash -p nix curl jq nix-prefetch-github git gnused gnugrep -I nixpkgs=.
3+# shellcheck shell=bash
34
45set -eu -o pipefail
56
6−tmpfile=$(mktemp "update-stackage.XXXXXXX")
7−# shellcheck disable=SC2064
7+# Stackage solver to use, LTS or Nightly
8+# (should be capitalized like the display name)
9+SOLVER=LTS
10+TMP_TEMPLATE=update-stackage.XXXXXXX
11+readonly SOLVER
12+readonly TMP_TEMPLATE
13+
14+toLower() {
15+ printf "%s" "$1" | tr '[:upper:]' '[:lower:]'
16+}
17+
18+tmpfile=$(mktemp "$TMP_TEMPLATE")
19+tmpfile_new=$(mktemp "$TMP_TEMPLATE")
820
921stackage_config="pkgs/development/haskell-modules/configuration-hackage2nix/stackage.yaml"
1022
11−trap "rm ${tmpfile} ${tmpfile}.new" 0
12−touch "$tmpfile" "$tmpfile.new" # Creating files here so that trap creates no errors.
23+trap 'rm "${tmpfile}" "${tmpfile_new}"' 0
24+touch "$tmpfile" "$tmpfile_new" # Creating files here so that trap creates no errors.
1325
14−curl -L -s "https://stackage.org/lts/cabal.config" >"$tmpfile"
15−old_version=$(grep "# Stackage" $stackage_config | sed -E 's/.*([0-9]{2}\.[0-9]+)/\1/')
16−version=$(sed -rn "s/^--.*http:..(www.)?stackage.org.snapshot.lts-//p" "$tmpfile")
26+curl -L -s "https://stackage.org/$(toLower "$SOLVER")/cabal.config" >"$tmpfile"
27+old_version=$(grep '^# Stackage' $stackage_config | sed -e 's/.\+ \([A-Za-z]\+ [0-9.-]\+\)$/\1/g')
28+version="$SOLVER $(sed -rn "s/^--.*http:..(www.)?stackage.org.snapshot.$(toLower "$SOLVER")-//p" "$tmpfile")"
1729
1830if [[ "$old_version" == "$version" ]]; then
1931 echo "No new stackage version"
2032 exit 0 # Nothing to do
2133fi
2234
23−echo "Updating Stackage LTS from $old_version to $version."
35+echo "Updating Stackage from $old_version to $version."
2436
2537# Create a simple yaml version of the file.
2638sed -r \
@@ -30,10 +42,10 @@ sed -r \
3042 -e 's|,$||' \
3143 -e '/installed$/d' \
3244 -e '/^$/d' \
33− < "${tmpfile}" | sort --ignore-case >"${tmpfile}.new"
45+ < "${tmpfile}" | sort --ignore-case >"${tmpfile_new}"
3446
3547cat > $stackage_config << EOF
36−# Stackage LTS $version
48+# Stackage $version
3749# This file is auto-generated by
3850# maintainers/scripts/haskell/update-stackage.sh
3951default-package-overrides:
@@ -45,12 +57,13 @@ sed -r \
4557 -e '/ distribution-nixpkgs /d' \
4658 -e '/ jailbreak-cabal /d' \
4759 -e '/ language-nix /d' \
48− < "${tmpfile}.new" >> $stackage_config
60+ -e '/ cabal-install /d' \
61+ < "${tmpfile_new}" >> $stackage_config
4962
5063if [[ "${1:-}" == "--do-commit" ]]; then
5164git add $stackage_config
5265git commit -F - << EOF
53−haskellPackages: stackage-lts $old_version -> $version
66+haskellPackages: stackage $old_version -> $version
5467
5568This commit has been generated by maintainers/scripts/haskell/update-stackage.sh
5669EOF
maintainers/scripts/luarocks-packages.csv+4−3
@@ -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,11 +64,12 @@ luasocket,,,,,,
6464luasql-sqlite3,,,,,,vyp
6565luassert,,,,,,
6666luasystem,,,,,,
67+luaunbound,,,,,
6768luautf8,,,,,,pstn
6869luazip,,,,,,
6970lua-yajl,,,,,,pstn
7071luuid,,,,,,
71−luv,,,,1.42.0-0,,
72+luv,,,,1.43.0-0,,
7273lyaml,,,,,,lblasc
7374markdown,,,,,,
7475mediator_lua,,,,,,
@@ -81,6 +82,6 @@ rapidjson,https://github.com/xpol/lua-rapidjson.git,,,,,
8182readline,,,,,,
8283say,https://github.com/Olivine-Labs/say.git,,,,,
8384std._debug,https://github.com/lua-stdlib/_debug.git,,,,,
84−std.normalize,git://github.com/lua-stdlib/normalize.git,,,,,
85+std.normalize,https://github.com/lua-stdlib/normalize.git,,,,,
8586stdlib,,,,41.2.2,,vyp
8687vstruct,https://github.com/ToxicFrog/vstruct.git,,,,,
maintainers/scripts/pluginupdate.py+181−142
@@ -1,4 +1,4 @@
1−# Used by pkgs/misc/vim-plugins/update.py and pkgs/applications/editors/kakoune/plugins/update.py
1+# Used by pkgs/applications/editors/vim/plugins/update.py and pkgs/applications/editors/kakoune/plugins/update.py
22
33# format:
44# $ nix run nixpkgs.python3Packages.black -c black update.py
@@ -8,6 +8,7 @@
88# $ nix run nixpkgs.python3Packages.flake8 -c flake8 --ignore E501,E265 update.py
99
1010import argparse
11+import csv
1112import functools
1213import http
1314import json
@@ -28,7 +29,7 @@ from pathlib import Path
2829from typing import Dict, List, Optional, Tuple, Union, Any, Callable
2930from urllib.parse import urljoin, urlparse
3031from tempfile import NamedTemporaryFile
31−from dataclasses import dataclass
32+from dataclasses import dataclass, asdict
3233
3334import git
3435
@@ -73,28 +74,43 @@ def retry(ExceptionToCheck: Any, tries: int = 4, delay: float = 3, backoff: floa
7374
7475 return deco_retry
7576
77+@dataclass
78+class FetchConfig:
79+ proc: int
80+ github_token: str
81+
7682
77−def make_request(url: str) -> urllib.request.Request:
78− token = os.getenv("GITHUB_API_TOKEN")
83+def make_request(url: str, token=None) -> urllib.request.Request:
7984 headers = {}
8085 if token is not None:
8186 headers["Authorization"] = f"token {token}"
8287 return urllib.request.Request(url, headers=headers)
8388
89+
90+# a dictionary of plugins and their new repositories
91+Redirects = Dict['PluginDesc', 'Repo']
92+
8493class Repo:
8594 def __init__(
86− self, uri: str, branch: str, alias: Optional[str]
95+ self, uri: str, branch: str
8796 ) -> None:
8897 self.uri = uri
8998 '''Url to the repo'''
90− self.branch = branch
91− self.alias = alias
92− self.redirect: Dict[str, str] = {}
99+ self._branch = branch
100+ # Redirect is the new Repo to use
101+ self.redirect: Optional['Repo'] = None
102+ self.token = "dummy_token"
93103
94104 @property
95105 def name(self):
96106 return self.uri.split('/')[-1]
97107
108+ @property
109+ def branch(self):
110+ return self._branch or "HEAD"
111+
112+ def __str__(self) -> str:
113+ return f"{self.uri}"
98114 def __repr__(self) -> str:
99115 return f"Repo({self.name}, {self.uri})"
100116
@@ -104,6 +120,7 @@ class Repo:
104120
105121 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
106122 def latest_commit(self) -> Tuple[str, datetime]:
123+ log.debug("Latest commit")
107124 loaded = self._prefetch(None)
108125 updated = datetime.strptime(loaded['date'], "%Y-%m-%dT%H:%M:%S%z")
109126
@@ -119,6 +136,7 @@ class Repo:
119136 return loaded
120137
121138 def prefetch(self, ref: Optional[str]) -> str:
139+ print("Prefetching")
122140 loaded = self._prefetch(ref)
123141 return loaded["sha256"]
124142
@@ -132,25 +150,27 @@ class Repo:
132150
133151class RepoGitHub(Repo):
134152 def __init__(
135− self, owner: str, repo: str, branch: str, alias: Optional[str]
153+ self, owner: str, repo: str, branch: str
136154 ) -> None:
137155 self.owner = owner
138156 self.repo = repo
157+ self.token = None
139158 '''Url to the repo'''
140− super().__init__(self.url(""), branch, alias)
141− 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)
142161
143162 @property
144163 def name(self):
145164 return self.repo
146165
147166 def url(self, path: str) -> str:
148− 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
149169
150170 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
151171 def has_submodules(self) -> bool:
152172 try:
153− req = make_request(self.url(f"blob/{self.branch}/.gitmodules"))
173+ req = make_request(self.url(f"blob/{self.branch}/.gitmodules"), self.token)
154174 urllib.request.urlopen(req, timeout=10).close()
155175 except urllib.error.HTTPError as e:
156176 if e.code == 404:
@@ -162,7 +182,8 @@ class RepoGitHub(Repo):
162182 @retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
163183 def latest_commit(self) -> Tuple[str, datetime]:
164184 commit_url = self.url(f"commits/{self.branch}.atom")
165− commit_req = make_request(commit_url)
185+ log.debug("Sending request to %s", commit_url)
186+ commit_req = make_request(commit_url, self.token)
166187 with urllib.request.urlopen(commit_req, timeout=10) as req:
167188 self._check_for_redirect(commit_url, req)
168189 xml = req.read()
@@ -185,12 +206,9 @@ class RepoGitHub(Repo):
185206 new_owner, new_name = (
186207 urllib.parse.urlsplit(response_url).path.strip("/").split("/")[:2]
187208 )
188− end_line = "\n" if self.alias is None else f" as {self.alias}\n"
189− plugin_line = "{owner}/{name}" + end_line
190209
191− old_plugin = plugin_line.format(owner=self.owner, name=self.name)
192− new_plugin = plugin_line.format(owner=new_owner, name=new_name)
193− self.redirect[old_plugin] = new_plugin
210+ new_repo = RepoGitHub(owner=new_owner, repo=new_name, branch=self.branch)
211+ self.redirect = new_repo
194212
195213
196214 def prefetch(self, commit: str) -> str:
@@ -201,9 +219,9 @@ class RepoGitHub(Repo):
201219 return sha256
202220
203221 def prefetch_github(self, ref: str) -> str:
204− data = subprocess.check_output(
205− ["nix-prefetch-url", "--unpack", self.url(f"archive/{ref}.tar.gz")]
206− )
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)
207225 return data.strip().decode("utf-8")
208226
209227 def as_nix(self, plugin: "Plugin") -> str:
@@ -220,7 +238,7 @@ class RepoGitHub(Repo):
220238 }}'''
221239
222240
223−@dataclass
241+@dataclass(frozen=True)
224242class PluginDesc:
225243 repo: Repo
226244 branch: str
@@ -233,21 +251,38 @@ class PluginDesc:
233251 else:
234252 return self.alias
235253
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)
236278
279+@dataclass
237280class Plugin:
238− def __init__(
239− self,
240− name: str,
241− commit: str,
242− has_submodules: bool,
243− sha256: str,
244− date: Optional[datetime] = None,
245− ) -> None:
246− self.name = name
247− self.commit = commit
248− self.has_submodules = has_submodules
249− self.sha256 = sha256
250− self.date = date
281+ name: str
282+ commit: str
283+ has_submodules: bool
284+ sha256: str
285+ date: Optional[datetime] = None
251286
252287 @property
253288 def normalized_name(self) -> str:
@@ -264,6 +299,27 @@ class Plugin:
264299 return copy
265300
266301
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+
267323
268324class Editor:
269325 """The configuration of the update script."""
@@ -287,19 +343,45 @@ class Editor:
287343 self.deprecated = deprecated or root.joinpath("deprecated.json")
288344 self.cache_file = cache_file or f"{name}-plugin-cache.json"
289345
290− def get_current_plugins(self):
346+ def get_current_plugins(self) -> List[Plugin]:
291347 """To fill the cache"""
292− return get_current_plugins(self)
293−
294− def load_plugin_spec(self, plugin_file) -> List[PluginDesc]:
295− return load_plugin_spec(plugin_file)
348+ data = run_nix_expr(self.get_plugins)
349+ plugins = []
350+ for name, attr in data.items():
351+ print("get_current_plugins: name %s" % name)
352+ p = Plugin(name, attr["rev"], attr["submodules"], attr["sha256"])
353+ plugins.append(p)
354+ return plugins
355+
356+ def load_plugin_spec(self, config: FetchConfig, plugin_file) -> List[PluginDesc]:
357+ '''CSV spec'''
358+ return load_plugins_from_csv(config, plugin_file)
296359
297360 def generate_nix(self, plugins, outfile: str):
298361 '''Returns nothing for now, writes directly to outfile'''
299362 raise NotImplementedError()
300363
301− def get_update(self, input_file: str, outfile: str, proc: int):
302− return get_update(input_file, outfile, proc, editor=self)
364+ def get_update(self, input_file: str, outfile: str, config: FetchConfig):
365+ cache: Cache = Cache(self.get_current_plugins(), self.cache_file)
366+ _prefetch = functools.partial(prefetch, cache=cache)
367+
368+ def update() -> dict:
369+ plugins = self.load_plugin_spec(config, input_file)
370+
371+ try:
372+ pool = Pool(processes=config.proc)
373+ results = pool.map(_prefetch, plugins)
374+ finally:
375+ cache.store()
376+
377+ plugins, redirects = check_results(results)
378+
379+ self.generate_nix(plugins, outfile)
380+
381+ return redirects
382+
383+ return update
384+
303385
304386 @property
305387 def attr_path(self):
@@ -345,7 +427,15 @@ class Editor:
345427 dest="proc",
346428 type=int,
347429 default=30,
348− help="Number of concurrent processes to spawn. Export GITHUB_API_TOKEN allows higher values.",
430+ help="Number of concurrent processes to spawn. Setting --github-token allows higher values.",
431+ )
432+ parser.add_argument(
433+ "--github-token",
434+ "-t",
435+ type=str,
436+ default=os.getenv("GITHUB_API_TOKEN"),
437+ help="""Allows to set --proc to higher values.
438+ Uses GITHUB_API_TOKEN environment variables as the default value.""",
349439 )
350440 parser.add_argument(
351441 "--no-commit", "-n", action="store_true", default=False,
@@ -375,23 +465,10 @@ class CleanEnvironment(object):
375465 self.empty_config.close()
376466
377467
378−def get_current_plugins(editor: Editor) -> List[Plugin]:
379− with CleanEnvironment():
380− cmd = ["nix", "eval", "--extra-experimental-features", "nix-command", "--impure", "--json", "--expr", editor.get_plugins]
381− log.debug("Running command %s", cmd)
382− out = subprocess.check_output(cmd)
383− data = json.loads(out)
384− plugins = []
385− for name, attr in data.items():
386− p = Plugin(name, attr["rev"], attr["submodules"], attr["sha256"])
387− plugins.append(p)
388− return plugins
389−
390−
391468def prefetch_plugin(
392469 p: PluginDesc,
393470 cache: "Optional[Cache]" = None,
394−) -> Tuple[Plugin, Dict[str, str]]:
471+) -> Tuple[Plugin, Optional[Repo]]:
395472 repo, branch, alias = p.repo, p.branch, p.alias
396473 name = alias or p.repo.name
397474 commit = None
@@ -405,7 +482,7 @@ def prefetch_plugin(
405482 return cached_plugin, repo.redirect
406483
407484 has_submodules = repo.has_submodules()
408− print(f"prefetch {name}")
485+ log.debug(f"prefetch {name}")
409486 sha256 = repo.prefetch(commit)
410487
411488 return (
@@ -414,12 +491,7 @@ def prefetch_plugin(
414491 )
415492
416493
417−def fetch_plugin_from_pluginline(plugin_line: str) -> Plugin:
418− plugin, _ = prefetch_plugin(parse_plugin_line(plugin_line))
419− return plugin
420−
421−
422−def print_download_error(plugin: str, ex: Exception):
494+def print_download_error(plugin: PluginDesc, ex: Exception):
423495 print(f"{plugin}: {ex}", file=sys.stderr)
424496 ex_traceback = ex.__traceback__
425497 tb_lines = [
@@ -428,20 +500,22 @@ def print_download_error(plugin: str, ex: Exception):
428500 ]
429501 print("\n".join(tb_lines))
430502
431−
432503def check_results(
433− results: List[Tuple[PluginDesc, Union[Exception, Plugin], Dict[str, str]]]
434−) -> 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]:
435506 ''' '''
436− failures: List[Tuple[str, Exception]] = []
507+ failures: List[Tuple[PluginDesc, Exception]] = []
437508 plugins = []
438− redirects: Dict[str, str] = {}
509+ redirects: Redirects = {}
439510 for (pdesc, result, redirect) in results:
440511 if isinstance(result, Exception):
441− failures.append((pdesc.name, result))
512+ failures.append((pdesc, result))
442513 else:
443− plugins.append((pdesc, result))
444− 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))
445519
446520 print(f"{len(results) - len(failures)} plugins were checked", end="")
447521 if len(failures) == 0:
@@ -455,41 +529,17 @@ def check_results(
455529
456530 sys.exit(1)
457531
458−def make_repo(uri, branch, alias) -> Repo:
532+def make_repo(uri: str, branch) -> Repo:
459533 '''Instantiate a Repo with the correct specialization depending on server (gitub spec)'''
460534 # dumb check to see if it's of the form owner/repo (=> github) or https://...
461− res = uri.split('/')
462− if len(res) <= 2:
463− 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)
464539 else:
465− repo = Repo(uri.strip(), branch, alias)
540+ repo = Repo(uri.strip(), branch)
466541 return repo
467542
468−def parse_plugin_line(line: str) -> PluginDesc:
469− branch = "HEAD"
470− alias = None
471− uri = line
472− if " as " in uri:
473− uri, alias = uri.split(" as ")
474− alias = alias.strip()
475− if "@" in uri:
476− uri, branch = uri.split("@")
477−
478− repo = make_repo(uri.strip(), branch.strip(), alias)
479−
480− return PluginDesc(repo, branch.strip(), alias)
481−
482−
483−def load_plugin_spec(plugin_file: str) -> List[PluginDesc]:
484− plugins = []
485− with open(plugin_file) as f:
486− for line in f:
487− if line.startswith("#"):
488− continue
489− plugin = parse_plugin_line(line)
490− plugins.append(plugin)
491− return plugins
492−
493543
494544def get_cache_path(cache_file_name: str) -> Optional[Path]:
495545 xdg_cache = os.environ.get("XDG_CACHE_HOME", None)
@@ -546,35 +596,37 @@ class Cache:
546596
547597def prefetch(
548598 pluginDesc: PluginDesc, cache: Cache
549−) -> Tuple[PluginDesc, Union[Exception, Plugin], dict]:
599+) -> Tuple[PluginDesc, Union[Exception, Plugin], Optional[Repo]]:
550600 try:
551601 plugin, redirect = prefetch_plugin(pluginDesc, cache)
552602 cache[plugin.commit] = plugin
553603 return (pluginDesc, plugin, redirect)
554604 except Exception as e:
555− return (pluginDesc, e, {})
605+ return (pluginDesc, e, None)
606+
556607
557608
558609def rewrite_input(
610+ config: FetchConfig,
559611 input_file: Path,
560612 deprecated: Path,
561− redirects: Dict[str, str] = None,
562− append: Tuple = (),
613+ # old pluginDesc and the new
614+ redirects: Redirects = {},
615+ append: List[PluginDesc] = [],
563616):
564− with open(input_file, "r") as f:
565− lines = f.readlines()
617+ plugins = load_plugins_from_csv(config, input_file,)
566618
567− lines.extend(append)
619+ plugins.extend(append)
568620
569621 if redirects:
570− lines = [redirects.get(line, line) for line in lines]
571622
572623 cur_date_iso = datetime.now().strftime("%Y-%m-%d")
573624 with open(deprecated, "r") as f:
574625 deprecations = json.load(f)
575− for old, new in redirects.items():
576− old_plugin = fetch_plugin_from_pluginline(old)
577− new_plugin = fetch_plugin_from_pluginline(new)
626+ for pdesc, new_repo in redirects.items():
627+ new_pdesc = PluginDesc(new_repo, pdesc.branch, pdesc.alias)
628+ old_plugin, _ = prefetch_plugin(pdesc)
629+ new_plugin, _ = prefetch_plugin(new_pdesc)
578630 if old_plugin.normalized_name != new_plugin.normalized_name:
579631 deprecations[old_plugin.normalized_name] = {
580632 "new": new_plugin.normalized_name,
@@ -584,10 +636,14 @@ def rewrite_input(
584636 json.dump(deprecations, f, indent=4, sort_keys=True)
585637 f.write("\n")
586638
587− lines = sorted(lines, key=str.casefold)
588−
589639 with open(input_file, "w") as f:
590− 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))
591647
592648
593649def commit(repo: git.Repo, message: str, files: List[Path]) -> None:
@@ -600,40 +656,21 @@ def commit(repo: git.Repo, message: str, files: List[Path]) -> None:
600656 print("no changes in working tree to commit")
601657
602658
603−def get_update(input_file: str, outfile: str, proc: int, editor: Editor):
604− cache: Cache = Cache(editor.get_current_plugins(), editor.cache_file)
605− _prefetch = functools.partial(prefetch, cache=cache)
606−
607− def update() -> dict:
608− plugin_names = editor.load_plugin_spec(input_file)
609−
610− try:
611− pool = Pool(processes=proc)
612− results = pool.map(_prefetch, plugin_names)
613− finally:
614− cache.store()
615−
616− plugins, redirects = check_results(results)
617−
618− editor.generate_nix(plugins, outfile)
619−
620− return redirects
621−
622− return update
623−
624659
625660def update_plugins(editor: Editor, args):
626661 """The main entry function of this module. All input arguments are grouped in the `Editor`."""
627662
628663 log.setLevel(LOG_LEVELS[args.debug])
629664 log.info("Start updating plugins")
630− update = editor.get_update(args.input_file, args.outfile, args.proc)
665+ fetch_config = FetchConfig(args.proc, args.github_token)
666+ update = editor.get_update(args.input_file, args.outfile, fetch_config)
631667
632668 redirects = update()
633− editor.rewrite_input(args.input_file, editor.deprecated, redirects)
669+ editor.rewrite_input(fetch_config, args.input_file, editor.deprecated, redirects)
634670
635671 autocommit = not args.no_commit
636672
673+ nixpkgs_repo = None
637674 if autocommit:
638675 nixpkgs_repo = git.Repo(editor.root, search_parent_directories=True)
639676 commit(nixpkgs_repo, f"{editor.attr_path}: update", [args.outfile])
@@ -648,9 +685,11 @@ def update_plugins(editor: Editor, args):
648685 )
649686
650687 for plugin_line in args.add_plugins:
651− editor.rewrite_input(args.input_file, editor.deprecated, append=(plugin_line + "\n",))
688+ pdesc = PluginDesc.load_from_string(fetch_config, plugin_line)
689+ append = [ pdesc ]
690+ editor.rewrite_input(fetch_config, args.input_file, editor.deprecated, append=append)
652691 update()
653− plugin = fetch_plugin_from_pluginline(plugin_line)
692+ plugin, _ = prefetch_plugin(pdesc, )
654693 if autocommit:
655694 commit(
656695 nixpkgs_repo,
maintainers/scripts/remove-old-aliases.pynew file+211
@@ -0,0 +1,211 @@
1+#!/usr/bin/env nix-shell
2+#!nix-shell -i python3 -p "python3.withPackages(ps: with ps; [ ])" nix
3+"""
4+A program to remove old aliases or convert old aliases to throws
5+Example usage:
6+./maintainers/scripts/remove-old-aliases.py --year 2018 --file ./pkgs/top-level/aliases.nix
7+
8+Check this file with mypy after every change!
9+$ mypy --strict maintainers/scripts/remove-old-aliases.py
10+"""
11+import argparse
12+import shutil
13+import subprocess
14+from datetime import date as datetimedate
15+from datetime import datetime
16+from pathlib import Path
17+
18+
19+def process_args() -> argparse.Namespace:
20+ """process args"""
21+ arg_parser = argparse.ArgumentParser()
22+ arg_parser.add_argument(
23+ "--year", required=True, type=int, help="operate on aliases older than $year"
24+ )
25+ arg_parser.add_argument(
26+ "--month",
27+ type=int,
28+ default=1,
29+ help="operate on aliases older than $year-$month",
30+ )
31+ arg_parser.add_argument(
32+ "--only-throws",
33+ action="store_true",
34+ help="only operate on throws. e.g remove throws older than $date",
35+ )
36+ arg_parser.add_argument("--file", required=True, type=Path, help="alias file")
37+ arg_parser.add_argument(
38+ "--dry-run", action="store_true", help="don't modify files, only print results"
39+ )
40+ return arg_parser.parse_args()
41+
42+
43+def get_date_lists(
44+ txt: list[str], cutoffdate: datetimedate, only_throws: bool
45+) -> tuple[list[str], list[str], list[str]]:
46+ """get a list of lines in which the date is older than $cutoffdate"""
47+ date_older_list: list[str] = []
48+ date_older_throw_list: list[str] = []
49+ date_sep_line_list: list[str] = []
50+
51+ for lineno, line in enumerate(txt, start=1):
52+ line = line.rstrip()
53+ my_date = None
54+ for string in line.split():
55+ string = string.strip(":")
56+ try:
57+ # strip ':' incase there is a string like 2019-11-01:
58+ my_date = datetime.strptime(string, "%Y-%m-%d").date()
59+ except ValueError:
60+ try:
61+ my_date = datetime.strptime(string, "%Y-%m").date()
62+ except ValueError:
63+ continue
64+
65+ if (
66+ my_date is None
67+ or my_date > cutoffdate
68+ or "preserve, reason:" in line.lower()
69+ ):
70+ continue
71+
72+ if "=" not in line:
73+ date_sep_line_list.append(f"{lineno} {line}")
74+ # 'if' lines could be complicated
75+ elif "if " in line and "if =" not in line:
76+ print(f"RESOLVE MANUALLY {line}")
77+ elif "throw" in line:
78+ date_older_throw_list.append(line)
79+ elif not only_throws:
80+ date_older_list.append(line)
81+
82+ return (
83+ date_older_list,
84+ date_sep_line_list,
85+ date_older_throw_list,
86+ )
87+
88+
89+def convert_to_throw(date_older_list: list[str]) -> list[tuple[str, str]]:
90+ """convert a list of lines to throws"""
91+ converted_list = []
92+ for line in date_older_list.copy():
93+ indent: str = " " * (len(line) - len(line.lstrip()))
94+ before_equal = ""
95+ after_equal = ""
96+ try:
97+ before_equal, after_equal = (x.strip() for x in line.split("=", maxsplit=2))
98+ except ValueError as err:
99+ print(err, line, "\n")
100+ date_older_list.remove(line)
101+ continue
102+
103+ alias = before_equal.strip()
104+ after_equal_list = [x.strip(";:") for x in after_equal.split()]
105+
106+ converted = (
107+ f"{indent}{alias} = throw \"'{alias}' has been renamed to/replaced by"
108+ f" '{after_equal_list.pop(0)}'\";"
109+ f' # Converted to throw {datetime.today().strftime("%Y-%m-%d")}'
110+ )
111+ converted_list.append((line, converted))
112+
113+ return converted_list
114+
115+
116+def generate_text_to_write(
117+ txt: list[str],
118+ date_older_list: list[str],
119+ converted_to_throw: list[tuple[str, str]],
120+ date_older_throw_list: list[str],
121+) -> list[str]:
122+ """generate a list of text to be written to the aliasfile"""
123+ text_to_write: list[str] = []
124+ for line in txt:
125+ text_to_append: str = ""
126+ if converted_to_throw:
127+ for tupl in converted_to_throw:
128+ if line == tupl[0]:
129+ text_to_append = f"{tupl[1]}\n"
130+ if line not in date_older_list and line not in date_older_throw_list:
131+ text_to_append = f"{line}\n"
132+ if text_to_append:
133+ text_to_write.append(text_to_append)
134+
135+ return text_to_write
136+
137+
138+def write_file(
139+ aliasfile: Path,
140+ text_to_write: list[str],
141+) -> None:
142+ """write file"""
143+ temp_aliasfile = Path(f"{aliasfile}.raliases")
144+ with open(temp_aliasfile, "w", encoding="utf-8") as far:
145+ for line in text_to_write:
146+ far.write(line)
147+ print("\nChecking the syntax of the new aliasfile")
148+ try:
149+ subprocess.run(
150+ ["nix-instantiate", "--eval", temp_aliasfile],
151+ check=True,
152+ stdout=subprocess.DEVNULL,
153+ )
154+ except subprocess.CalledProcessError:
155+ print(
156+ "\nSyntax check failed,",
157+ "there may have been a line which only has\n"
158+ 'aliasname = "reason why";\n'
159+ "when it should have been\n"
160+ 'aliasname = throw "reason why";',
161+ )
162+ temp_aliasfile.unlink()
163+ return
164+ shutil.move(f"{aliasfile}.raliases", aliasfile)
165+ print(f"{aliasfile} modified! please verify with 'git diff'.")
166+
167+
168+def main() -> None:
169+ """main"""
170+ args = process_args()
171+
172+ only_throws = args.only_throws
173+ aliasfile = Path(args.file).absolute()
174+ cutoffdate = (datetime.strptime(f"{args.year}-{args.month}-01", "%Y-%m-%d")).date()
175+
176+ txt: list[str] = (aliasfile.read_text(encoding="utf-8")).splitlines()
177+
178+ date_older_list: list[str] = []
179+ date_sep_line_list: list[str] = []
180+ date_older_throw_list: list[str] = []
181+
182+ date_older_list, date_sep_line_list, date_older_throw_list = get_date_lists(
183+ txt, cutoffdate, only_throws
184+ )
185+
186+ converted_to_throw: list[tuple[str, str]] = []
187+ if date_older_list:
188+ converted_to_throw = convert_to_throw(date_older_list)
189+ print(" Will be converted to throws. ".center(100, "-"))
190+ for l_n in date_older_list:
191+ print(l_n)
192+
193+ if date_older_throw_list:
194+ print(" Will be removed. ".center(100, "-"))
195+ for l_n in date_older_throw_list:
196+ print(l_n)
197+
198+ if date_sep_line_list:
199+ print(" On separate line, resolve manually. ".center(100, "-"))
200+ for l_n in date_sep_line_list:
201+ print(l_n)
202+
203+ if not args.dry_run:
204+ text_to_write = generate_text_to_write(
205+ txt, date_older_list, converted_to_throw, date_older_throw_list
206+ )
207+ write_file(aliasfile, text_to_write)
208+
209+
210+if __name__ == "__main__":
211+ main()
maintainers/scripts/update-luarocks-packages+5−8
@@ -25,8 +25,8 @@ from pathlib import Path
2525log = logging.getLogger()
2626log.addHandler(logging.StreamHandler())
2727
28−ROOT = Path(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))).parent.parent
29−from pluginupdate import Editor, update_plugins, PluginDesc, CleanEnvironment, LOG_LEVELS, Cache
28+ROOT = Path(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))).parent.parent # type: ignore
29+from pluginupdate import Editor, update_plugins, FetchConfig, CleanEnvironment
3030
3131PKG_LIST="maintainers/scripts/luarocks-packages.csv"
3232TMP_FILE="$(mktemp)"
@@ -118,7 +118,7 @@ class LuaEditor(Editor):
118118 def attr_path(self):
119119 return "luaPackages"
120120
121− def get_update(self, input_file: str, outfile: str, proc: int):
121+ def get_update(self, input_file: str, outfile: str, config: FetchConfig):
122122 _prefetch = generate_pkg_nix
123123
124124 def update() -> dict:
@@ -126,14 +126,14 @@ class LuaEditor(Editor):
126126 sorted_plugin_specs = sorted(plugin_specs, key=lambda v: v.name.lower())
127127
128128 try:
129− pool = Pool(processes=proc)
129+ pool = Pool(processes=config.proc)
130130 results = pool.map(_prefetch, sorted_plugin_specs)
131131 finally:
132132 pass
133133
134134 self.generate_nix(results, outfile)
135135
136− redirects = []
136+ redirects = {}
137137 return redirects
138138
139139 return update
@@ -181,11 +181,9 @@ def generate_pkg_nix(plug: LuaPlugin):
181181
182182 cmd.append(plug.version)
183183
184− #
185184 if plug.server != "src" and plug.server:
186185 cmd.append(f"--only-server={plug.server}")
187186
188−
189187 if plug.luaversion:
190188 with CleanEnvironment():
191189 local_pkgs = str(ROOT.resolve())
@@ -209,7 +207,6 @@ def main():
209207
210208 parser = editor.create_parser()
211209 args = parser.parse_args()
212− log.setLevel(LOG_LEVELS[args.debug])
213210
214211 update_plugins(editor, args)
215212
maintainers/scripts/update.nix+1−1
@@ -147,7 +147,7 @@ let
147147
148148 to run update script for specific package, or
149149
150− % nix-shell maintainers/scripts/update.nix --arg predicate '(path: pkg: builtins.isList pkg.updateScript && builtins.length pkg.updateScript >= 1 && (let script = builtins.head pkg.updateScript; in builtins.isAttrs script && script.name == "gnome-update-script"))'
150+ % nix-shell maintainers/scripts/update.nix --arg predicate '(path: pkg: pkg.updateScript.name or null == "gnome-update-script")'
151151
152152 to run update script for all packages matching given predicate, or
153153
maintainers/scripts/update.py+4
@@ -88,6 +88,10 @@ async def commit_changes(name: str, merge_lock: asyncio.Lock, worktree: str, bra
8888 async with merge_lock:
8989 await check_subprocess('git', 'add', *change['files'], cwd=worktree)
9090 commit_message = '{attrPath}: {oldVersion} → {newVersion}'.format(**change)
91+ if 'commitMessage' in change:
92+ commit_message = change['commitMessage']
93+ elif 'commitBody' in change:
94+ commit_message = commit_message + '\n\n' + change['commitBody']
9195 await check_subprocess('git', 'commit', '--quiet', '-m', commit_message, cwd=worktree)
9296 await check_subprocess('git', 'cherry-pick', branch)
9397
maintainers/team-list.nix+360−1
@@ -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 = {
@@ -50,9 +60,35 @@ with lib.maintainers; {
5060 DianaOlympos
5161 gleber
5262 happysalada
63+ minijackson
5364 yurrriq
5465 ];
66+ githubTeams = [
67+ "beam"
68+ ];
5569 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;
5692 };
5793
5894 cinnamon = {
@@ -60,14 +96,49 @@ with lib.maintainers; {
6096 mkg20001
6197 ];
6298 scope = "Maintain Cinnamon desktop environment and applications made by the LinuxMint team.";
99+ shortName = "Cinnamon";
100+ enableFeatureFreezePing = true;
63101 };
64102
65103 chia = {
66104 members = [
67− atemu
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;
134+ };
135+
136+ cosmopolitan = {
137+ members = [
138+ lourkeur
139+ tomberek
140+ ];
141+ scope = "Maintain the Cosmopolitan LibC and related programs.";
71142 };
72143
73144 deshaw = {
@@ -76,6 +147,7 @@ with lib.maintainers; {
76147 limeytexan
77148 ];
78149 scope = "Group registration for D. E. Shaw employees who collectively maintain packages.";
150+ shortName = "Shaw employees";
79151 };
80152
81153 determinatesystems = {
@@ -85,11 +157,75 @@ with lib.maintainers; {
85157 grahamc
86158 ];
87159 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;
88223 };
89224
90225 freedesktop = {
91226 members = [ jtojnar ];
92227 scope = "Maintain Freedesktop.org packages for graphical desktop.";
228+ shortName = "freedesktop.org packaging";
93229 };
94230
95231 gcc = {
@@ -99,6 +235,7 @@ with lib.maintainers; {
99235 ericson2314
100236 ];
101237 scope = "Maintain GCC (GNU Compiler Collection) compilers";
238+ shortName = "GCC";
102239 };
103240
104241 golang = {
@@ -113,16 +250,24 @@ with lib.maintainers; {
113250 zowoq
114251 ];
115252 scope = "Maintain Golang compilers.";
253+ shortName = "Go";
254+ enableFeatureFreezePing = true;
116255 };
117256
118257 gnome = {
119258 members = [
259+ bobby285271
120260 hedning
121261 jtojnar
122262 dasj19
123263 maxeaubrey
124264 ];
265+ githubTeams = [
266+ "gnome"
267+ ];
125268 scope = "Maintain GNOME desktop environment and platform.";
269+ shortName = "GNOME";
270+ enableFeatureFreezePing = true;
126271 };
127272
128273 haskell = {
@@ -132,7 +277,12 @@ with lib.maintainers; {
132277 maralorn
133278 sternenseemann
134279 ];
280+ githubTeams = [
281+ "haskell"
282+ ];
135283 scope = "Maintain Haskell packages and infrastructure.";
284+ shortName = "Haskell";
285+ enableFeatureFreezePing = true;
136286 };
137287
138288 home-assistant = {
@@ -143,6 +293,7 @@ with lib.maintainers; {
143293 mic92
144294 ];
145295 scope = "Maintain the Home Assistant ecosystem";
296+ shortName = "Home Assistant";
146297 };
147298
148299 iog = {
@@ -154,6 +305,7 @@ with lib.maintainers; {
154305 nrdxp
155306 ];
156307 scope = "Input-Output Global employees, which maintain critical software";
308+ shortName = "Input-Output Global employees";
157309 };
158310
159311 jitsi = {
@@ -164,6 +316,7 @@ with lib.maintainers; {
164316 yuka
165317 ];
166318 scope = "Maintain Jitsi.";
319+ shortName = "Jitsi";
167320 };
168321
169322 kubernetes = {
@@ -175,6 +328,7 @@ with lib.maintainers; {
175328 zowoq
176329 ];
177330 scope = "Maintain the Kubernetes package and module";
331+ shortName = "Kubernetes";
178332 };
179333
180334 kodi = {
@@ -187,6 +341,7 @@ with lib.maintainers; {
187341 sephalon
188342 ];
189343 scope = "Maintain Kodi and related packages.";
344+ shortName = "Kodi";
190345 };
191346
192347 linux-kernel = {
@@ -197,6 +352,41 @@ with lib.maintainers; {
197352 qyliss
198353 ];
199354 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;
200390 };
201391
202392 mate = {
@@ -205,6 +395,7 @@ with lib.maintainers; {
205395 romildo
206396 ];
207397 scope = "Maintain Mate desktop environment and related packages.";
398+ shortName = "MATE";
208399 };
209400
210401 matrix = {
@@ -218,6 +409,40 @@ with lib.maintainers; {
218409 sumnerevans
219410 ];
220411 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;
221446 };
222447
223448 openstack = {
@@ -226,6 +451,7 @@ with lib.maintainers; {
226451 SuperSandro2000
227452 ];
228453 scope = "Maintain the ecosystem around OpenStack";
454+ shortName = "OpenStack";
229455 };
230456
231457 pantheon = {
@@ -233,7 +459,21 @@ with lib.maintainers; {
233459 davidak
234460 bobby285271
235461 ];
462+ githubTeams = [
463+ "pantheon"
464+ ];
236465 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;
237477 };
238478
239479 php = {
@@ -245,7 +485,12 @@ with lib.maintainers; {
245485 ma27
246486 talyz
247487 ];
488+ githubTeams = [
489+ "php"
490+ ];
248491 scope = "Maintain PHP related packages and extensions.";
492+ shortName = "PHP";
493+ enableFeatureFreezePing = true;
249494 };
250495
251496 podman = {
@@ -255,7 +500,54 @@ with lib.maintainers; {
255500 vdemeester
256501 zowoq
257502 ];
503+ githubTeams = [
504+ "podman"
505+ ];
258506 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;
259551 };
260552
261553 redcodelabs = {
@@ -265,6 +557,38 @@ with lib.maintainers; {
265557 wintrmvte
266558 ];
267559 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;
268592 };
269593
270594 sage = {
@@ -275,6 +599,7 @@ with lib.maintainers; {
275599 collares
276600 ];
277601 scope = "Maintain SageMath and the dependencies that are likely to break it.";
602+ shortName = "SageMath";
278603 };
279604
280605 sphinx = {
@@ -282,6 +607,7 @@ with lib.maintainers; {
282607 SuperSandro2000
283608 ];
284609 scope = "Maintain Sphinx related packages.";
610+ shortName = "Sphinx";
285611 };
286612
287613 serokell = {
@@ -291,6 +617,26 @@ with lib.maintainers; {
291617 mkaito
292618 ];
293619 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;
294640 };
295641
296642 tts = {
@@ -299,6 +645,18 @@ with lib.maintainers; {
299645 mic92
300646 ];
301647 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;
302660 };
303661
304662 xfce = {
@@ -306,5 +664,6 @@ with lib.maintainers; {
306664 romildo
307665 ];
308666 scope = "Maintain Xfce desktop environment and related packages.";
667+ shortName = "Xfce";
309668 };
310669}
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/option-declarations.section.md+19−18
@@ -27,9 +27,10 @@ The function `mkOption` accepts the following arguments.
2727
2828`type`
2929
30−: The type of the option (see [](#sec-option-types)). It may be
31− omitted, but that's not advisable since it may lead to errors that
32− are hard to diagnose.
30+: The type of the option (see [](#sec-option-types)). This
31+ argument is mandatory for nixpkgs modules. Setting this is highly
32+ recommended for the sake of documentation and type checking. In case it is
33+ not set, a fallback type with unspecified behavior is used.
3334
3435`default`
3536
@@ -119,14 +120,14 @@ lib.mkOption {
119120```nix
120121lib.mkPackageOption pkgs "GHC" {
121122 default = [ "ghc" ];
122− example = "pkgs.haskell.package.ghc921.ghc.withPackages (hkgs: [ hkgs.primes ])";
123+ example = "pkgs.haskell.package.ghc922.ghc.withPackages (hkgs: [ hkgs.primes ])";
123124}
124125# is like
125126lib.mkOption {
126127 type = lib.types.package;
127128 default = pkgs.ghc;
128129 defaultText = lib.literalExpression "pkgs.ghc";
129− example = lib.literalExpression "pkgs.haskell.package.ghc921.ghc.withPackages (hkgs: [ hkgs.primes ])";
130+ example = lib.literalExpression "pkgs.haskell.package.ghc922.ghc.withPackages (hkgs: [ hkgs.primes ])";
130131 description = "The GHC package to use.";
131132}
132133```
@@ -145,26 +146,26 @@ As an example, we will take the case of display managers. There is a
145146central display manager module for generic display manager options and a
146147module file per display manager backend (sddm, gdm \...).
147148
148−There are two approach to this module structure:
149+There are two approaches we could take with this module structure:
149150
150−- Managing the display managers independently by adding an enable
151+- Configuring the display managers independently by adding an enable
151152 option to every display manager module backend. (NixOS)
152153
153−- Managing the display managers in the central module by adding an
154− option to select which display manager backend to use.
154+- Configuring the display managers in the central module by adding
155+ an option to select which display manager backend to use.
155156
156157Both approaches have problems.
157158
158159Making backends independent can quickly become hard to manage. For
159−display managers, there can be only one enabled at a time, but the type
160−system can not enforce this restriction as there is no relation between
161−each backend `enable` option. As a result, this restriction has to be
162−done explicitely by adding assertions in each display manager backend
163−module.
160+display managers, there can only be one enabled at a time, but the
161+type system cannot enforce this restriction as there is no relation
162+between each backend's `enable` option. As a result, this restriction
163+has to be done explicitly by adding assertions in each display manager
164+backend module.
164165
165−On the other hand, managing the display managers backends in the central
166−module will require to change the central module option every time a new
167−backend is added or removed.
166+On the other hand, managing the display manager backends in the
167+central module will require changing the central module option every
168+time a new backend is added or removed.
168169
169170By using extensible option types, it is possible to create a placeholder
170171option in the central module
@@ -175,7 +176,7 @@ and to extend it in each backend module
175176
176177As a result, `displayManager.enable` option values can be added without
177178changing the main service module file and the type system automatically
178−enforce that there can only be a single display manager enabled.
179+enforces that there can only be a single display manager enabled.
179180
180181::: {#ex-option-declaration-eot-service .example}
181182::: {.title}
nixos/doc/manual/development/option-types.section.md+23−4
@@ -16,13 +16,14 @@ merging is handled.
1616
1717`types.path`
1818
19−: A filesystem path, defined as anything that when coerced to a string
20− starts with a slash. Even if derivations can be considered as path,
21− the more specific `types.package` should be preferred.
19+: A filesystem path is anything that starts with a slash when
20+ coerced to a string. Even if derivations can be considered as
21+ paths, the more specific `types.package` should be preferred.
2222
2323`types.package`
2424
25−: A derivation or a store path.
25+: A top-level store path. This can be an attribute set pointing
26+ to a store path, like a derivation or a flake input.
2627
2728`types.anything`
2829
@@ -63,6 +64,24 @@ merging is handled.
6364 ```
6465 :::
6566
67+`types.raw`
68+
69+: A type which doesn't do any checking, merging or nested evaluation. It
70+ accepts a single arbitrary value that is not recursed into, making it
71+ useful for values coming from outside the module system, such as package
72+ sets or arbitrary data. Options of this type are still evaluated according
73+ to priorities and conditionals, so `mkForce`, `mkIf` and co. still work on
74+ the option value itself, but not for any value nested within it. This type
75+ should only be used when checking, merging and nested evaluation are not
76+ desirable.
77+
78+`types.optionType`
79+
80+: The type of an option's type. Its merging operation ensures that nested
81+ options have the correct file location annotated, and that if possible,
82+ multiple option definitions are correctly merged together. The main use
83+ case is as the type of the `_module.freeformType` option.
84+
6685`types.attrs`
6786
6887: A free-form attribute set.
nixos/doc/manual/development/settings-options.section.md+59
@@ -32,6 +32,20 @@ type of this option should represent the format. The most common formats
3232have a predefined type and string generator already declared under
3333`pkgs.formats`:
3434
35+`pkgs.formats.javaProperties` { *`comment`* ? `"Generated with Nix"` }
36+
37+: A function taking an attribute set with values
38+
39+ `comment`
40+
41+ : A string to put at the start of the
42+ file in a comment. It can have multiple
43+ lines.
44+
45+ It returns the `type`: `attrsOf str` and a function
46+ `generate` to build a Java `.properties` file, taking
47+ care of the correct escaping, etc.
48+
3549`pkgs.formats.json` { }
3650
3751: A function taking an empty attribute set (for future extensibility)
@@ -66,6 +80,45 @@ have a predefined type and string generator already declared under
6680 and returning a set with TOML-specific attributes `type` and
6781 `generate` as specified [below](#pkgs-formats-result).
6882
83+`pkgs.formats.elixirConf { elixir ? pkgs.elixir }`
84+
85+: A function taking an attribute set with values
86+
87+ `elixir`
88+
89+ : The Elixir package which will be used to format the generated output
90+
91+ It returns a set with Elixir-Config-specific attributes `type`, `lib`, and
92+ `generate` as specified [below](#pkgs-formats-result).
93+
94+ The `lib` attribute contains functions to be used in settings, for
95+ generating special Elixir values:
96+
97+ `mkRaw elixirCode`
98+
99+ : Outputs the given string as raw Elixir code
100+
101+ `mkGetEnv { envVariable, fallback ? null }`
102+
103+ : Makes the configuration fetch an environment variable at runtime
104+
105+ `mkAtom atom`
106+
107+ : Outputs the given string as an Elixir atom, instead of the default
108+ Elixir binary string. Note: lowercase atoms still needs to be prefixed
109+ with `:`
110+
111+ `mkTuple array`
112+
113+ : Outputs the given array as an Elixir tuple, instead of the default
114+ Elixir list
115+
116+ `mkMap attrset`
117+
118+ : Outputs the given attribute set as an Elixir map, instead of the
119+ default Elixir keyword list
120+
121+
69122::: {#pkgs-formats-result}
70123These functions all return an attribute set with these values:
71124:::
@@ -74,6 +127,12 @@ These functions all return an attribute set with these values:
74127
75128: A module system type representing a value of the format
76129
130+`lib`
131+
132+: Utility functions for convenience, or special interactions with the format.
133+ This attribute is optional. It may contain inside a `types` attribute
134+ containing types specific to this format.
135+
77136`generate` *`filename jsonValue`*
78137
79138: A function that can render a value of the format to a file. Returns
nixos/doc/manual/development/unit-handling.section.md+13−8
@@ -17,7 +17,8 @@ checks:
1717 them and comparing their contents. If they are different but only
1818 `X-Reload-Triggers` in the `[Unit]` section is changed, **reload** the unit.
1919 The NixOS module system allows setting these triggers with the option
20− [systemd.services.\<name\>.reloadTriggers](#opt-systemd.services). If the
20+ [systemd.services.\<name\>.reloadTriggers](#opt-systemd.services). There are
21+ some additional keys in the `[Unit]` section that are ignored as well. If the
2122 unit files differ in any way, the following actions are performed:
2223
2324 - `.path` and `.slice` units are ignored. There is no need to restart them
@@ -33,6 +34,9 @@ checks:
3334 - The rest of the units (mostly `.service` units) are then **reload**ed if
3435 `X-ReloadIfChanged` in the `[Service]` section is set to `true` (exposed
3536 via [systemd.services.\<name\>.reloadIfChanged](#opt-systemd.services)).
37+ A little exception is done for units that were deactivated in the meantime,
38+ for example because they require a unit that got stopped before. These
39+ are **start**ed instead of reloaded.
3640
3741 - If the reload flag is not set, some more flags decide if the unit is
3842 skipped. These flags are `X-RestartIfChanged` in the `[Service]` section
@@ -41,17 +45,18 @@ checks:
4145 `RefuseManualStop` in the `[Unit]` section, and `X-OnlyManualStart` in the
4246 `[Unit]` section.
4347
44− - The rest of the behavior is decided whether the unit has `X-StopIfChanged`
45− in the `[Service]` section set (exposed via
48+ - Further behavior depends on the unit having `X-StopIfChanged` in the
49+ `[Service]` section set to `true` (exposed via
4650 [systemd.services.\<name\>.stopIfChanged](#opt-systemd.services)). This is
4751 set to `true` by default and must be explicitly turned off if not wanted.
4852 If the flag is enabled, the unit is **stop**ped and then **start**ed. If
4953 not, the unit is **restart**ed. The goal of the flag is to make sure that
5054 the new unit never runs in the old environment which is still in place
51− before the activation script is run.
55+ before the activation script is run. This behavior is different when the
56+ service is socket-activated, as outlined in the following steps.
5257
5358 - The last thing that is taken into account is whether the unit is a service
54− and socket-activated. Due to a bug, this is currently only done when
55− `X-StopIfChanged` is set. If the unit is socket-activated, the socket is
56− stopped and started, and the service is stopped and to be started by socket
57− activation.
59+ and socket-activated. If `X-StopIfChanged` is **not** set, the service
60+ is **restart**ed with the others. If it is set, both the service and the
61+ socket are **stop**ped and the socket is **start**ed, leaving socket
62+ activation to start the service when it's needed.
nixos/doc/manual/development/writing-modules.chapter.md+42
@@ -90,6 +90,17 @@ modules: `systemd.services` (the set of all systemd services) and
9090`systemd.timers` (the list of commands to be executed periodically by
9191`systemd`).
9292
93+Care must be taken when writing systemd services using `Exec*` directives. By
94+default systemd performs substitution on `%<char>` specifiers in these
95+directives, expands environment variables from `$FOO` and `${FOO}`, splits
96+arguments on whitespace, and splits commands on `;`. All of these must be escaped
97+to avoid unexpected substitution or splitting when interpolating into an `Exec*`
98+directive, e.g. when using an `extraArgs` option to pass additional arguments to
99+the service. The functions `utils.escapeSystemdExecArg` and
100+`utils.escapeSystemdExecArgs` are provided for this, see [Example: Escaping in
101+Exec directives](#exec-escaping-example) for an example. When using these
102+functions system environment substitution should *not* be disabled explicitly.
103+
93104::: {#locate-example .example}
94105::: {.title}
95106**Example: NixOS Module for the "locate" Service**
@@ -153,6 +164,37 @@ in {
153164```
154165:::
155166
167+::: {#exec-escaping-example .example}
168+::: {.title}
169+**Example: Escaping in Exec directives**
170+:::
171+```nix
172+{ config, lib, pkgs, utils, ... }:
173+
174+with lib;
175+
176+let
177+ cfg = config.services.echo;
178+ echoAll = pkgs.writeScript "echo-all" ''
179+ #! ${pkgs.runtimeShell}
180+ for s in "$@"; do
181+ printf '%s\n' "$s"
182+ done
183+ '';
184+ args = [ "a%Nything" "lang=\${LANG}" ";" "/bin/sh -c date" ];
185+in {
186+ systemd.services.echo =
187+ { description = "Echo to the journal";
188+ wantedBy = [ "multi-user.target" ];
189+ serviceConfig.Type = "oneshot";
190+ serviceConfig.ExecStart = ''
191+ ${echoAll} ${utils.escapeSystemdExecArgs args}
192+ '';
193+ };
194+}
195+```
196+:::
197+
156198```{=docbook}
157199<xi:include href="option-declarations.section.xml" />
158200<xi:include href="option-types.section.xml" />
nixos/doc/manual/development/writing-nixos-tests.section.md+52−36
@@ -5,15 +5,9 @@ A NixOS test is a Nix expression that has the following structure:
55```nix
66import ./make-test-python.nix {
77
8− # Either the configuration of a single machine:
9− machine =
10− { config, pkgs, ... }:
11− { configuration…
12− };
13−
14− # Or a set of machines:
8+ # One or more machines:
159 nodes =
16− { machine1 =
10+ { machine =
1711 { config, pkgs, ... }: { … };
1812 machine2 =
1913 { config, pkgs, ... }: { … };
@@ -29,17 +23,16 @@ import ./make-test-python.nix {
2923
3024The attribute `testScript` is a bit of Python code that executes the
3125test (described below). During the test, it will start one or more
32−virtual machines, the configuration of which is described by the
33−attribute `machine` (if you need only one machine in your test) or by
34−the attribute `nodes` (if you need multiple machines). For instance,
35−[`login.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix)
36−only needs a single machine to test whether users can log in
26+virtual machines, the configuration of which is described by
27+the attribute `nodes`.
28+
29+An example of a single-node test is
30+[`login.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix).
31+It only needs a single machine to test whether users can log in
3732on the virtual console, whether device ownership is correctly maintained
38−when switching between consoles, and so on. On the other hand,
39−[`nfs/simple.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/nfs/simple.nix),
40−which tests NFS client and server functionality in the
41−Linux kernel (including whether locks are maintained across server
42−crashes), requires three machines: a server and two clients.
33+when switching between consoles, and so on. An interesting multi-node test is
34+[`nfs/simple.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/nfs/simple.nix).
35+It uses two client nodes to test correct locking across server crashes.
4336
4437There are a few special NixOS configuration options for test VMs:
4538
@@ -67,8 +60,7 @@ The test script is a sequence of Python statements that perform various
6760actions, such as starting VMs, executing commands in the VMs, and so on.
6861Each virtual machine is represented as an object stored in the variable
6962`name` if this is also the identifier of the machine in the declarative
70−config. If you didn\'t specify multiple machines using the `nodes`
71−attribute, it is just `machine`. The following example starts the
63+config. If you specified a node `nodes.machine`, the following example starts the
7264machine, waits until it has finished booting, then executes a command
7365and checks that the output is more-or-less correct:
7466
@@ -79,7 +71,7 @@ if not "Linux" in machine.succeed("uname"):
7971 raise Exception("Wrong OS")
8072```
8173
82−The first line is actually unnecessary; machines are implicitly started
74+The first line is technically unnecessary; machines are implicitly started
8375when you first execute an action on them (such as `wait_for_unit` or
8476`succeed`). If you have multiple machines, you can speed up the test by
8577starting them in parallel:
@@ -158,37 +150,51 @@ The following methods are available on machine objects:
158150 e.g., `send_chars("foobar\n")` will type the string `foobar`
159151 followed by the Enter key.
160152
153+`send_console`
154+
155+: Send keys to the kernel console. This allows interaction with the systemd
156+ emergency mode, for example. Takes a string that is sent, e.g.,
157+ `send_console("\n\nsystemctl default\n")`.
158+
161159`execute`
162160
163161: 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+
164175 If the command detaches, it must close stdout, as `execute` will wait
165176 for this to consume all output reliably. This can be achieved by
166177 redirecting stdout to stderr `>&2`, to `/dev/console`, `/dev/null` or
167178 a file. Examples of detaching commands are `sleep 365d &`, where the
168179 shell forks a new process that can write to stdout and `xclip -i`, where
169180 the `xclip` command itself forks without closing stdout.
181+
170182 Takes an optional parameter `check_return` that defaults to `True`.
171183 Setting this parameter to `False` will not check for the return code
172184 and return -1 instead. This can be used for commands that shut down
173185 the VM and would therefore break the pipe that would be used for
174186 retrieving the return code.
175187
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+
176192`succeed`
177193
178194: Execute a shell command, raising an exception if the exit status is
179− not zero, otherwise returning the standard output. Commands are run
180− with `set -euo pipefail` set:
181−
182− - If several commands are separated by `;` and one fails, the
183− command as a whole will fail.
184−
185− - For pipelines, the last non-zero exit status will be returned
186− (if there is one, zero will be returned otherwise).
187−
188− - Dereferencing unset variables fail the command.
189−
190− - It will wait for stdout to be closed. See `execute` for the
191− 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.
192198
193199`fail`
194200
@@ -198,10 +204,13 @@ The following methods are available on machine objects:
198204`wait_until_succeeds`
199205
200206: 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.
201210
202211`wait_until_fails`
203212
204−: Repeat a shell command with 1-second intervals until it fails.
213+: Like `wait_until_succeeds`, but repeating the command until it fails.
205214
206215`wait_for_unit`
207216
@@ -272,6 +281,13 @@ The following methods are available on machine objects:
272281 Killing the interactive session with `Ctrl-d` or `Ctrl-c` also ends
273282 the guest session.
274283
284+`console_interact`
285+
286+: Allows you to directly interact with QEMU's stdin. This should
287+ only be used during test development, not in production tests.
288+ Output from QEMU is only read line-wise. `Ctrl-c` kills QEMU and
289+ `Ctrl-d` closes console and returns to the test runner.
290+
275291To test user units declared by `systemd.user.services` the optional
276292`user` argument can be used:
277293
@@ -290,7 +306,7 @@ For faster dev cycles it\'s also possible to disable the code-linters
290306```nix
291307import ./make-test-python.nix {
292308 skipLint = true;
293− machine =
309+ nodes.machine =
294310 { config, pkgs, ... }:
295311 { configuration…
296312 };
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/option-declarations.section.xml+22−19
@@ -38,9 +38,11 @@ options = {
3838 <listitem>
3939 <para>
4040 The type of the option (see
41− <xref linkend="sec-option-types" />). It may be omitted, but
42− that’s not advisable since it may lead to errors that are hard
43− to diagnose.
41+ <xref linkend="sec-option-types" />). This argument is
42+ mandatory for nixpkgs modules. Setting this is highly
43+ recommended for the sake of documentation and type checking.
44+ In case it is not set, a fallback type with unspecified
45+ behavior is used.
4446 </para>
4547 </listitem>
4648 </varlistentry>
@@ -181,14 +183,14 @@ lib.mkOption {
181183 <programlisting language="bash">
182184lib.mkPackageOption pkgs &quot;GHC&quot; {
183185 default = [ &quot;ghc&quot; ];
184− example = &quot;pkgs.haskell.package.ghc921.ghc.withPackages (hkgs: [ hkgs.primes ])&quot;;
186+ example = &quot;pkgs.haskell.package.ghc922.ghc.withPackages (hkgs: [ hkgs.primes ])&quot;;
185187}
186188# is like
187189lib.mkOption {
188190 type = lib.types.package;
189191 default = pkgs.ghc;
190192 defaultText = lib.literalExpression &quot;pkgs.ghc&quot;;
191− example = lib.literalExpression &quot;pkgs.haskell.package.ghc921.ghc.withPackages (hkgs: [ hkgs.primes ])&quot;;
193+ example = lib.literalExpression &quot;pkgs.haskell.package.ghc922.ghc.withPackages (hkgs: [ hkgs.primes ])&quot;;
192194 description = &quot;The GHC package to use.&quot;;
193195}
194196</programlisting>
@@ -215,21 +217,22 @@ lib.mkOption {
215217 manager backend (sddm, gdm ...).
216218 </para>
217219 <para>
218− There are two approach to this module structure:
220+ There are two approaches we could take with this module
221+ structure:
219222 </para>
220223 <itemizedlist>
221224 <listitem>
222225 <para>
223− Managing the display managers independently by adding an
224− enable option to every display manager module backend.
225− (NixOS)
226+ Configuring the display managers independently by adding
227+ an enable option to every display manager module
228+ backend. (NixOS)
226229 </para>
227230 </listitem>
228231 <listitem>
229232 <para>
230− Managing the display managers in the central module by
231− adding an option to select which display manager backend
232− to use.
233+ Configuring the display managers in the central module
234+ by adding an option to select which display manager
235+ backend to use.
233236 </para>
234237 </listitem>
235238 </itemizedlist>
@@ -238,16 +241,16 @@ lib.mkOption {
238241 </para>
239242 <para>
240243 Making backends independent can quickly become hard to
241− manage. For display managers, there can be only one enabled
242− at a time, but the type system can not enforce this
243− restriction as there is no relation between each backend
244+ manage. For display managers, there can only be one enabled
245+ at a time, but the type system cannot enforce this
246+ restriction as there is no relation between each backend’s
244247 <literal>enable</literal> option. As a result, this
245− restriction has to be done explicitely by adding assertions
248+ restriction has to be done explicitly by adding assertions
246249 in each display manager backend module.
247250 </para>
248251 <para>
249− On the other hand, managing the display managers backends in
250− the central module will require to change the central module
252+ On the other hand, managing the display manager backends in
253+ the central module will require changing the central module
251254 option every time a new backend is added or removed.
252255 </para>
253256 <para>
@@ -268,7 +271,7 @@ lib.mkOption {
268271 <para>
269272 As a result, <literal>displayManager.enable</literal> option
270273 values can be added without changing the main service module
271− file and the type system automatically enforce that there
274+ file and the type system automatically enforces that there
272275 can only be a single display manager enabled.
273276 </para>
274277 <anchor xml:id="ex-option-declaration-eot-service" />
nixos/doc/manual/from_md/development/option-types.section.xml+40−5
@@ -30,10 +30,10 @@
3030 </term>
3131 <listitem>
3232 <para>
33− A filesystem path, defined as anything that when coerced to
34− a string starts with a slash. Even if derivations can be
35− considered as path, the more specific
36− <literal>types.package</literal> should be preferred.
33+ A filesystem path is anything that starts with a slash when
34+ coerced to a string. Even if derivations can be considered
35+ as paths, the more specific <literal>types.package</literal>
36+ should be preferred.
3737 </para>
3838 </listitem>
3939 </varlistentry>
@@ -43,7 +43,9 @@
4343 </term>
4444 <listitem>
4545 <para>
46− A derivation or a store path.
46+ A top-level store path. This can be an attribute set
47+ pointing to a store path, like a derivation or a flake
48+ input.
4749 </para>
4850 </listitem>
4951 </varlistentry>
@@ -92,6 +94,39 @@
9294</programlisting>
9395 </listitem>
9496 </varlistentry>
97+ <varlistentry>
98+ <term>
99+ <literal>types.raw</literal>
100+ </term>
101+ <listitem>
102+ <para>
103+ A type which doesn’t do any checking, merging or nested
104+ evaluation. It accepts a single arbitrary value that is not
105+ recursed into, making it useful for values coming from
106+ outside the module system, such as package sets or arbitrary
107+ data. Options of this type are still evaluated according to
108+ priorities and conditionals, so <literal>mkForce</literal>,
109+ <literal>mkIf</literal> and co. still work on the option
110+ value itself, but not for any value nested within it. This
111+ type should only be used when checking, merging and nested
112+ evaluation are not desirable.
113+ </para>
114+ </listitem>
115+ </varlistentry>
116+ <varlistentry>
117+ <term>
118+ <literal>types.optionType</literal>
119+ </term>
120+ <listitem>
121+ <para>
122+ The type of an option’s type. Its merging operation ensures
123+ that nested options have the correct file location
124+ annotated, and that if possible, multiple option definitions
125+ are correctly merged together. The main use case is as the
126+ type of the <literal>_module.freeformType</literal> option.
127+ </para>
128+ </listitem>
129+ </varlistentry>
95130 <varlistentry>
96131 <term>
97132 <literal>types.attrs</literal>
nixos/doc/manual/from_md/development/settings-options.section.xml+136
@@ -53,6 +53,38 @@
5353 <literal>pkgs.formats</literal>:
5454 </para>
5555 <variablelist>
56+ <varlistentry>
57+ <term>
58+ <literal>pkgs.formats.javaProperties</literal> {
59+ <emphasis><literal>comment</literal></emphasis> ?
60+ <literal>&quot;Generated with Nix&quot;</literal> }
61+ </term>
62+ <listitem>
63+ <para>
64+ A function taking an attribute set with values
65+ </para>
66+ <variablelist>
67+ <varlistentry>
68+ <term>
69+ <literal>comment</literal>
70+ </term>
71+ <listitem>
72+ <para>
73+ A string to put at the start of the file in a comment.
74+ It can have multiple lines.
75+ </para>
76+ </listitem>
77+ </varlistentry>
78+ </variablelist>
79+ <para>
80+ It returns the <literal>type</literal>:
81+ <literal>attrsOf str</literal> and a function
82+ <literal>generate</literal> to build a Java
83+ <literal>.properties</literal> file, taking care of the
84+ correct escaping, etc.
85+ </para>
86+ </listitem>
87+ </varlistentry>
5688 <varlistentry>
5789 <term>
5890 <literal>pkgs.formats.json</literal> { }
@@ -137,6 +169,97 @@
137169 </para>
138170 </listitem>
139171 </varlistentry>
172+ <varlistentry>
173+ <term>
174+ <literal>pkgs.formats.elixirConf { elixir ? pkgs.elixir }</literal>
175+ </term>
176+ <listitem>
177+ <para>
178+ A function taking an attribute set with values
179+ </para>
180+ <variablelist>
181+ <varlistentry>
182+ <term>
183+ <literal>elixir</literal>
184+ </term>
185+ <listitem>
186+ <para>
187+ The Elixir package which will be used to format the
188+ generated output
189+ </para>
190+ </listitem>
191+ </varlistentry>
192+ </variablelist>
193+ <para>
194+ It returns a set with Elixir-Config-specific attributes
195+ <literal>type</literal>, <literal>lib</literal>, and
196+ <literal>generate</literal> as specified
197+ <link linkend="pkgs-formats-result">below</link>.
198+ </para>
199+ <para>
200+ The <literal>lib</literal> attribute contains functions to
201+ be used in settings, for generating special Elixir values:
202+ </para>
203+ <variablelist>
204+ <varlistentry>
205+ <term>
206+ <literal>mkRaw elixirCode</literal>
207+ </term>
208+ <listitem>
209+ <para>
210+ Outputs the given string as raw Elixir code
211+ </para>
212+ </listitem>
213+ </varlistentry>
214+ <varlistentry>
215+ <term>
216+ <literal>mkGetEnv { envVariable, fallback ? null }</literal>
217+ </term>
218+ <listitem>
219+ <para>
220+ Makes the configuration fetch an environment variable
221+ at runtime
222+ </para>
223+ </listitem>
224+ </varlistentry>
225+ <varlistentry>
226+ <term>
227+ <literal>mkAtom atom</literal>
228+ </term>
229+ <listitem>
230+ <para>
231+ Outputs the given string as an Elixir atom, instead of
232+ the default Elixir binary string. Note: lowercase
233+ atoms still needs to be prefixed with
234+ <literal>:</literal>
235+ </para>
236+ </listitem>
237+ </varlistentry>
238+ <varlistentry>
239+ <term>
240+ <literal>mkTuple array</literal>
241+ </term>
242+ <listitem>
243+ <para>
244+ Outputs the given array as an Elixir tuple, instead of
245+ the default Elixir list
246+ </para>
247+ </listitem>
248+ </varlistentry>
249+ <varlistentry>
250+ <term>
251+ <literal>mkMap attrset</literal>
252+ </term>
253+ <listitem>
254+ <para>
255+ Outputs the given attribute set as an Elixir map,
256+ instead of the default Elixir keyword list
257+ </para>
258+ </listitem>
259+ </varlistentry>
260+ </variablelist>
261+ </listitem>
262+ </varlistentry>
140263 </variablelist>
141264 <para xml:id="pkgs-formats-result">
142265 These functions all return an attribute set with these values:
@@ -152,6 +275,19 @@
152275 </para>
153276 </listitem>
154277 </varlistentry>
278+ <varlistentry>
279+ <term>
280+ <literal>lib</literal>
281+ </term>
282+ <listitem>
283+ <para>
284+ Utility functions for convenience, or special interactions
285+ with the format. This attribute is optional. It may contain
286+ inside a <literal>types</literal> attribute containing types
287+ specific to this format.
288+ </para>
289+ </listitem>
290+ </varlistentry>
155291 <varlistentry>
156292 <term>
157293 <literal>generate</literal>
nixos/doc/manual/from_md/development/unit-handling.section.xml+22−10
@@ -38,8 +38,9 @@
3838 <emphasis role="strong">reload</emphasis> the unit. The NixOS
3939 module system allows setting these triggers with the option
4040 <link linkend="opt-systemd.services">systemd.services.&lt;name&gt;.reloadTriggers</link>.
41− If the unit files differ in any way, the following actions are
42− performed:
41+ There are some additional keys in the <literal>[Unit]</literal>
42+ section that are ignored as well. If the unit files differ in
43+ any way, the following actions are performed:
4344 </para>
4445 <itemizedlist>
4546 <listitem>
@@ -71,6 +72,11 @@
7172 <literal>[Service]</literal> section is set to
7273 <literal>true</literal> (exposed via
7374 <link linkend="opt-systemd.services">systemd.services.&lt;name&gt;.reloadIfChanged</link>).
75+ A little exception is done for units that were deactivated
76+ in the meantime, for example because they require a unit
77+ that got stopped before. These are
78+ <emphasis role="strong">start</emphasis>ed instead of
79+ reloaded.
7480 </para>
7581 </listitem>
7682 <listitem>
@@ -88,9 +94,10 @@
8894 </listitem>
8995 <listitem>
9096 <para>
91− The rest of the behavior is decided whether the unit has
97+ Further behavior depends on the unit having
9298 <literal>X-StopIfChanged</literal> in the
93− <literal>[Service]</literal> section set (exposed via
99+ <literal>[Service]</literal> section set to
100+ <literal>true</literal> (exposed via
94101 <link linkend="opt-systemd.services">systemd.services.&lt;name&gt;.stopIfChanged</link>).
95102 This is set to <literal>true</literal> by default and must
96103 be explicitly turned off if not wanted. If the flag is
@@ -100,17 +107,22 @@
100107 is <emphasis role="strong">restart</emphasis>ed. The goal of
101108 the flag is to make sure that the new unit never runs in the
102109 old environment which is still in place before the
103− activation script is run.
110+ activation script is run. This behavior is different when
111+ the service is socket-activated, as outlined in the
112+ following steps.
104113 </para>
105114 </listitem>
106115 <listitem>
107116 <para>
108117 The last thing that is taken into account is whether the
109− unit is a service and socket-activated. Due to a bug, this
110− is currently only done when
111− <literal>X-StopIfChanged</literal> is set. If the unit is
112− socket-activated, the socket is stopped and started, and the
113− service is stopped and to be started by socket activation.
118+ unit is a service and socket-activated. If
119+ <literal>X-StopIfChanged</literal> is
120+ <emphasis role="strong">not</emphasis> set, the service is
121+ <emphasis role="strong">restart</emphasis>ed with the
122+ others. If it is set, both the service and the socket are
123+ <emphasis role="strong">stop</emphasis>ped and the socket is
124+ <emphasis role="strong">start</emphasis>ed, leaving socket
125+ activation to start the service when it’s needed.
114126 </para>
115127 </listitem>
116128 </itemizedlist>
nixos/doc/manual/from_md/development/writing-modules.chapter.xml+49
@@ -122,6 +122,25 @@
122122 services) and <literal>systemd.timers</literal> (the list of
123123 commands to be executed periodically by <literal>systemd</literal>).
124124 </para>
125+ <para>
126+ Care must be taken when writing systemd services using
127+ <literal>Exec*</literal> directives. By default systemd performs
128+ substitution on <literal>%&lt;char&gt;</literal> specifiers in these
129+ directives, expands environment variables from
130+ <literal>$FOO</literal> and <literal>${FOO}</literal>, splits
131+ arguments on whitespace, and splits commands on
132+ <literal>;</literal>. All of these must be escaped to avoid
133+ unexpected substitution or splitting when interpolating into an
134+ <literal>Exec*</literal> directive, e.g. when using an
135+ <literal>extraArgs</literal> option to pass additional arguments to
136+ the service. The functions
137+ <literal>utils.escapeSystemdExecArg</literal> and
138+ <literal>utils.escapeSystemdExecArgs</literal> are provided for
139+ this, see <link linkend="exec-escaping-example">Example: Escaping in
140+ Exec directives</link> for an example. When using these functions
141+ system environment substitution should <emphasis>not</emphasis> be
142+ disabled explicitly.
143+ </para>
125144 <anchor xml:id="locate-example" />
126145 <para>
127146 <emphasis role="strong">Example: NixOS Module for the
@@ -183,6 +202,36 @@ in {
183202 };
184203 };
185204}
205+</programlisting>
206+ <anchor xml:id="exec-escaping-example" />
207+ <para>
208+ <emphasis role="strong">Example: Escaping in Exec
209+ directives</emphasis>
210+ </para>
211+ <programlisting language="bash">
212+{ config, lib, pkgs, utils, ... }:
213+
214+with lib;
215+
216+let
217+ cfg = config.services.echo;
218+ echoAll = pkgs.writeScript &quot;echo-all&quot; ''
219+ #! ${pkgs.runtimeShell}
220+ for s in &quot;$@&quot;; do
221+ printf '%s\n' &quot;$s&quot;
222+ done
223+ '';
224+ args = [ &quot;a%Nything&quot; &quot;lang=\${LANG}&quot; &quot;;&quot; &quot;/bin/sh -c date&quot; ];
225+in {
226+ systemd.services.echo =
227+ { description = &quot;Echo to the journal&quot;;
228+ wantedBy = [ &quot;multi-user.target&quot; ];
229+ serviceConfig.Type = &quot;oneshot&quot;;
230+ serviceConfig.ExecStart = ''
231+ ${echoAll} ${utils.escapeSystemdExecArgs args}
232+ '';
233+ };
234+}
186235</programlisting>
187236 <xi:include href="option-declarations.section.xml" />
188237 <xi:include href="option-types.section.xml" />
nixos/doc/manual/from_md/development/writing-nixos-tests.section.xml+95−56
@@ -6,15 +6,9 @@
66 <programlisting language="bash">
77import ./make-test-python.nix {
88
9− # Either the configuration of a single machine:
10− machine =
11− { config, pkgs, ... }:
12− { configuration…
13− };
14−
15− # Or a set of machines:
9+ # One or more machines:
1610 nodes =
17− { machine1 =
11+ { machine =
1812 { config, pkgs, ... }: { … };
1913 machine2 =
2014 { config, pkgs, ... }: { … };
@@ -31,18 +25,18 @@ import ./make-test-python.nix {
3125 The attribute <literal>testScript</literal> is a bit of Python code
3226 that executes the test (described below). During the test, it will
3327 start one or more virtual machines, the configuration of which is
34− described by the attribute <literal>machine</literal> (if you need
35− only one machine in your test) or by the attribute
36− <literal>nodes</literal> (if you need multiple machines). For
37− instance,
38− <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix"><literal>login.nix</literal></link>
39− only needs a single machine to test whether users can log in on the
40− virtual console, whether device ownership is correctly maintained
41− when switching between consoles, and so on. On the other hand,
42− <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/nfs/simple.nix"><literal>nfs/simple.nix</literal></link>,
43− which tests NFS client and server functionality in the Linux kernel
44− (including whether locks are maintained across server crashes),
45− requires three machines: a server and two clients.
28+ described by the attribute <literal>nodes</literal>.
29+ </para>
30+ <para>
31+ An example of a single-node test is
32+ <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix"><literal>login.nix</literal></link>.
33+ It only needs a single machine to test whether users can log in on
34+ the virtual console, whether device ownership is correctly
35+ maintained when switching between consoles, and so on. An
36+ interesting multi-node test is
37+ <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/nfs/simple.nix"><literal>nfs/simple.nix</literal></link>.
38+ It uses two client nodes to test correct locking across server
39+ crashes.
4640 </para>
4741 <para>
4842 There are a few special NixOS configuration options for test VMs:
@@ -94,9 +88,8 @@ import ./make-test-python.nix {
9488 various actions, such as starting VMs, executing commands in the
9589 VMs, and so on. Each virtual machine is represented as an object
9690 stored in the variable <literal>name</literal> if this is also the
97− identifier of the machine in the declarative config. If you didn't
98− specify multiple machines using the <literal>nodes</literal>
99− attribute, it is just <literal>machine</literal>. The following
91+ identifier of the machine in the declarative config. If you
92+ specified a node <literal>nodes.machine</literal>, the following
10093 example starts the machine, waits until it has finished booting,
10194 then executes a command and checks that the output is more-or-less
10295 correct:
@@ -108,7 +101,7 @@ if not &quot;Linux&quot; in machine.succeed(&quot;uname&quot;):
108101 raise Exception(&quot;Wrong OS&quot;)
109102</programlisting>
110103 <para>
111− The first line is actually unnecessary; machines are implicitly
104+ The first line is technically unnecessary; machines are implicitly
112105 started when you first execute an action on them (such as
113106 <literal>wait_for_unit</literal> or <literal>succeed</literal>). If
114107 you have multiple machines, you can speed up the test by starting
@@ -263,40 +256,27 @@ start_all()
263256 </varlistentry>
264257 <varlistentry>
265258 <term>
266− <literal>execute</literal>
259+ <literal>send_console</literal>
267260 </term>
268261 <listitem>
269262 <para>
270− Execute a shell command, returning a list
271− <literal>(status, stdout)</literal>. If the command
272− detaches, it must close stdout, as
273− <literal>execute</literal> will wait for this to consume all
274− output reliably. This can be achieved by redirecting stdout
275− to stderr <literal>&gt;&amp;2</literal>, to
276− <literal>/dev/console</literal>,
277− <literal>/dev/null</literal> or a file. Examples of
278− detaching commands are <literal>sleep 365d &amp;</literal>,
279− where the shell forks a new process that can write to stdout
280− and <literal>xclip -i</literal>, where the
281− <literal>xclip</literal> command itself forks without
282− closing stdout. Takes an optional parameter
283− <literal>check_return</literal> that defaults to
284− <literal>True</literal>. Setting this parameter to
285− <literal>False</literal> will not check for the return code
286− and return -1 instead. This can be used for commands that
287− shut down the VM and would therefore break the pipe that
288− would be used for retrieving the return code.
263+ Send keys to the kernel console. This allows interaction
264+ with the systemd emergency mode, for example. Takes a string
265+ that is sent, e.g.,
266+ <literal>send_console(&quot;\n\nsystemctl default\n&quot;)</literal>.
289267 </para>
290268 </listitem>
291269 </varlistentry>
292270 <varlistentry>
293271 <term>
294− <literal>succeed</literal>
272+ <literal>execute</literal>
295273 </term>
296274 <listitem>
297275 <para>
298− Execute a shell command, raising an exception if the exit
299− status is not zero, otherwise returning the standard output.
276+ Execute a shell command, returning a list
277+ <literal>(status, stdout)</literal>.
278+ </para>
279+ <para>
300280 Commands are run with <literal>set -euo pipefail</literal>
301281 set:
302282 </para>
@@ -311,22 +291,63 @@ start_all()
311291 <listitem>
312292 <para>
313293 For pipelines, the last non-zero exit status will be
314− returned (if there is one, zero will be returned
315− otherwise).
294+ returned (if there is one; otherwise zero will be
295+ returned).
316296 </para>
317297 </listitem>
318298 <listitem>
319299 <para>
320− Dereferencing unset variables fail the command.
300+ Dereferencing unset variables fails the command.
321301 </para>
322302 </listitem>
323303 <listitem>
324304 <para>
325− It will wait for stdout to be closed. See
326− <literal>execute</literal> for the implications.
305+ It will wait for stdout to be closed.
327306 </para>
328307 </listitem>
329308 </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>
330351 </listitem>
331352 </varlistentry>
332353 <varlistentry>
@@ -347,7 +368,10 @@ start_all()
347368 <listitem>
348369 <para>
349370 Repeat a shell command with 1-second intervals until it
350− 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.
351375 </para>
352376 </listitem>
353377 </varlistentry>
@@ -357,8 +381,8 @@ start_all()
357381 </term>
358382 <listitem>
359383 <para>
360− Repeat a shell command with 1-second intervals until it
361− fails.
384+ Like <literal>wait_until_succeeds</literal>, but repeating
385+ the command until it fails.
362386 </para>
363387 </listitem>
364388 </varlistentry>
@@ -502,6 +526,21 @@ machine.systemctl(&quot;list-jobs --no-pager&quot;, &quot;any-user&quot;) # spaw
502526 </para>
503527 </listitem>
504528 </varlistentry>
529+ <varlistentry>
530+ <term>
531+ <literal>console_interact</literal>
532+ </term>
533+ <listitem>
534+ <para>
535+ Allows you to directly interact with QEMU’s stdin. This
536+ should only be used during test development, not in
537+ production tests. Output from QEMU is only read line-wise.
538+ <literal>Ctrl-c</literal> kills QEMU and
539+ <literal>Ctrl-d</literal> closes console and returns to the
540+ test runner.
541+ </para>
542+ </listitem>
543+ </varlistentry>
505544 </variablelist>
506545 <para>
507546 To test user units declared by
@@ -526,7 +565,7 @@ machine.wait_for_unit(&quot;xautolock.service&quot;, &quot;x-session-user&quot;)
526565 <programlisting language="bash">
527566import ./make-test-python.nix {
528567 skipLint = true;
529− machine =
568+ nodes.machine =
530569 { config, pkgs, ... }:
531570 { configuration…
532571 };
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-2111.section.xml+41−2
@@ -26,8 +26,36 @@
2626 </listitem>
2727 <listitem>
2828 <para>
29− <literal>iptables</literal> now uses
30− <literal>nf_tables</literal> backend.
29+ <literal>iptables</literal> is now using
30+ <literal>nf_tables</literal> under the hood, by using
31+ <literal>iptables-nft</literal>, similar to
32+ <link xlink:href="https://wiki.debian.org/nftables#Current_status">Debian</link>
33+ and
34+ <link xlink:href="https://fedoraproject.org/wiki/Changes/iptables-nft-default">Fedora</link>.
35+ This means, <literal>ip[6]tables</literal>,
36+ <literal>arptables</literal> and <literal>ebtables</literal>
37+ commands will actually show rules from some specific tables in
38+ the <literal>nf_tables</literal> kernel subsystem. In case
39+ you’re migrating from an older release without rebooting,
40+ there might be cases where you end up with iptable rules
41+ configured both in the legacy <literal>iptables</literal>
42+ kernel backend, as well as in the <literal>nf_tables</literal>
43+ backend. This can lead to confusing firewall behaviour. An
44+ <literal>iptables-save</literal> after switching will complain
45+ about <quote>iptables-legacy tables present</quote>. It’s
46+ probably best to reboot after the upgrade, or manually
47+ removing all legacy iptables rules (via the
48+ <literal>iptables-legacy</literal> package).
49+ </para>
50+ </listitem>
51+ <listitem>
52+ <para>
53+ systemd got an <literal>nftables</literal> backend, and
54+ configures (networkd) rules in their own
55+ <literal>io.systemd.*</literal> tables. Check
56+ <literal>nft list ruleset</literal> to see these rules, not
57+ <literal>iptables-save</literal> (which only shows
58+ <literal>iptables</literal>-created rules.
3159 </para>
3260 </listitem>
3361 <listitem>
@@ -1429,6 +1457,17 @@ Superuser created successfully.
14291457 knob.
14301458 </para>
14311459 </listitem>
1460+ <listitem>
1461+ <para>
1462+ <literal>/usr</literal> will always be included in the initial
1463+ ramdisk. See the
1464+ <literal>fileSystems.&lt;name&gt;.neededForBoot</literal>
1465+ option. If any files exist under <literal>/usr</literal>
1466+ (which is not typical for NixOS), they will be included in the
1467+ initial ramdisk, increasing its size to a possibly problematic
1468+ extent.
1469+ </para>
1470+ </listitem>
14321471 </itemizedlist>
14331472 </section>
14341473 <section xml:id="sec-release-21.11-notable-changes">
nixos/doc/manual/from_md/release-notes/rl-2205.section.xml+1476−21
@@ -15,6 +15,14 @@
1515 <section xml:id="sec-release-22.05-highlights">
1616 <title>Highlights</title>
1717 <itemizedlist>
18+ <listitem>
19+ <para>
20+ The <literal>firefox</literal> browser on
21+ <literal>x86_64-linux</literal> is now making use of
22+ profile-guided optimization resulting in a much more
23+ responsive browsing experience.
24+ </para>
25+ </listitem>
1826 <listitem>
1927 <para>
2028 <literal>security.acme.defaults</literal> has been added to
@@ -25,6 +33,43 @@
2533 <literal>services.nginx.virtualHosts.*.enableACME</literal>).
2634 </para>
2735 </listitem>
36+ <listitem>
37+ <para>
38+ GNOME has been upgraded to 42. Please take a look at their
39+ <link xlink:href="https://release.gnome.org/42/">Release
40+ Notes</link> for details. Notably, it replaces gedit with
41+ GNOME Text Editor, GNOME Terminal with GNOME Console (formerly
42+ King’s Cross), and GNOME Screenshot with a tool built into the
43+ Shell.
44+ </para>
45+ </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>
2873 <listitem>
2974 <para>
3075 PHP 8.1 is now available
@@ -50,6 +95,70 @@
5095 granular distinction between reloads and restarts.
5196 </para>
5297 </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>
126+ <listitem>
127+ <para>
128+ <link xlink:href="https://kops.sigs.k8s.io"><literal>kops</literal></link>
129+ defaults to 1.22.4, which will enable
130+ <link xlink:href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html">Instance
131+ Metadata Service Version 2</link> and require tokens on new
132+ clusters with Kubernetes 1.22. This will increase security by
133+ default, but may break some types of workloads. See the
134+ <link xlink:href="https://kops.sigs.k8s.io/releases/1.22-notes/">release
135+ notes</link> for details.
136+ </para>
137+ </listitem>
138+ <listitem>
139+ <para>
140+ Module authors can use
141+ <literal>mkRenamedOptionModuleWith</literal> to automate the
142+ deprecation cycle without annoying out-of-tree module authors
143+ and their users.
144+ </para>
145+ </listitem>
146+ <listitem>
147+ <para>
148+ The default GHC version has been updated from 8.10.7 to 9.0.2.
149+ <literal>pkgs.haskellPackages</literal> and
150+ <literal>pkgs.ghc</literal> will now use this version by
151+ default.
152+ </para>
153+ </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>
53162 </itemizedlist>
54163 </section>
55164 <section xml:id="sec-release-22.05-new-services">
@@ -79,6 +188,13 @@
79188 <link xlink:href="option.html#opt-services.matrix-conduit.enable">services.matrix-conduit</link>.
80189 </para>
81190 </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>
82198 <listitem>
83199 <para>
84200 <link xlink:href="https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html">filebeat</link>,
@@ -97,8 +213,8 @@
97213 <para>
98214 <link xlink:href="https://frrouting.org/">FRRouting</link>, a
99215 popular suite of Internet routing protocol daemons (BGP, BFD,
100− OSPF, IS-IS, VVRP and others). Available as
101− <link linkend="opt-services.ffr.babel.enable">services.frr</link>
216+ OSPF, IS-IS, VRRP and others). Available as
217+ <link linkend="opt-services.frr.babel.enable">services.frr</link>
102218 </para>
103219 </listitem>
104220 <listitem>
@@ -108,6 +224,13 @@
108224 <link xlink:href="options.html#opt-services.heisenbridge.enable">services.heisenbridge</link>.
109225 </para>
110226 </listitem>
227+ <listitem>
228+ <para>
229+ <link xlink:href="https://snowflake.torproject.org/">snowflake-proxy</link>,
230+ a system to defeat internet censorship. Available as
231+ <link xlink:href="options.html#opt-services.snowflake-proxy.enable">services.snowflake-proxy</link>.
232+ </para>
233+ </listitem>
111234 <listitem>
112235 <para>
113236 <link xlink:href="https://ergo.chat">ergochat</link>, a modern
@@ -122,6 +245,13 @@
122245 <link xlink:href="options.html#opt-services.powerdns-admin.enable">services.powerdns-admin</link>.
123246 </para>
124247 </listitem>
248+ <listitem>
249+ <para>
250+ <link xlink:href="https://github.com/postgres/pgadmin4">pgadmin4</link>,
251+ an admin interface for the PostgreSQL database. Available at
252+ <link xlink:href="options.html#opt-services.pgadmin.enable">services.pgadmin</link>.
253+ </para>
254+ </listitem>
125255 <listitem>
126256 <para>
127257 <link xlink:href="https://github.com/sezanzeb/input-remapper">input-remapper</link>,
@@ -145,6 +275,24 @@
145275 <link xlink:href="options.html#opt-services.maddy.enable">services.maddy</link>.
146276 </para>
147277 </listitem>
278+ <listitem>
279+ <para>
280+ <link xlink:href="https://www.scorchworks.com/K40whisperer/k40whisperer.html">K40-Whisperer</link>,
281+ a program to control cheap Chinese laser cutters. Available as
282+ <link xlink:href="options.html#opt-programs.k4-whisperer.enable">programs.k40-whisperer.enable</link>.
283+ Users must add themselves to the <literal>k40</literal> group
284+ to be able to access the device.
285+ </para>
286+ </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>
148296 <listitem>
149297 <para>
150298 <link xlink:href="https://github.com/mgumz/mtr-exporter">mtr-exporter</link>,
@@ -152,6 +300,21 @@
152300 <link xlink:href="options.html#opt-services.mtr-exporter.enable">services.mtr-exporter</link>.
153301 </para>
154302 </listitem>
303+ <listitem>
304+ <para>
305+ <link xlink:href="https://github.com/prometheus-pve/prometheus-pve-exporter">prometheus-pve-exporter</link>,
306+ a tool that exposes information from the Proxmox VE API for
307+ use by Prometheus. Available as
308+ <link xlink:href="options.html#opt-services.prometheus.exporters.pve">services.prometheus.exporters.pve</link>.
309+ </para>
310+ </listitem>
311+ <listitem>
312+ <para>
313+ <link xlink:href="https://github.com/netbox-community/netbox">netbox</link>,
314+ infrastructure resource modeling (IRM) tool. Available as
315+ <link xlink:href="options.html#opt-services.netbox.enable">services.netbox</link>.
316+ </para>
317+ </listitem>
155318 <listitem>
156319 <para>
157320 <link xlink:href="https://tetrd.app">tetrd</link>, share your
@@ -196,7 +359,7 @@
196359 <para>
197360 <link xlink:href="https://moosefs.com">moosefs</link>, fault
198361 tolerant petabyte distributed file system. Available as
199− <link linkend="opt-services.moosefs">moosefs</link>.
362+ <link linkend="opt-services.moosefs.client.enable">moosefs</link>.
200363 </para>
201364 </listitem>
202365 <listitem>
@@ -206,6 +369,17 @@
206369 <link linkend="opt-services.prosody-filer.enable">services.prosody-filer</link>.
207370 </para>
208371 </listitem>
372+ <listitem>
373+ <para>
374+ <link xlink:href="https://github.com/rfjakob/systembus-notify">systembus-notify</link>,
375+ allow system level notifications to reach the users. Available
376+ as
377+ <link xlink:href="opt-services.systembus-notify.enable">services.systembus-notify</link>.
378+ Please keep in mind that this service should only be enabled
379+ on machines with fully trusted users, as any local user is
380+ able to DoS user sessions by spamming notifications.
381+ </para>
382+ </listitem>
209383 <listitem>
210384 <para>
211385 <link xlink:href="https://github.com/audreyt/ethercalc">ethercalc</link>,
@@ -213,6 +387,20 @@
213387 <link xlink:href="options.html#opt-services.ethercalc.enable">services.ethercalc</link>.
214388 </para>
215389 </listitem>
390+ <listitem>
391+ <para>
392+ <link xlink:href="https://nbd.sourceforge.io/">nbd</link>, a
393+ Network Block Device server. Available as
394+ <link xlink:href="options.html#opt-services.nbd.server.enable">services.nbd</link>.
395+ </para>
396+ </listitem>
397+ <listitem>
398+ <para>
399+ <link xlink:href="https://github.com/Mic92/nix-ld">nix-ld</link>,
400+ Run unpatched dynamic binaries on NixOS. Available as
401+ <link xlink:href="options.html#opt-programs.nix-ld.enable">programs.nix-ld</link>.
402+ </para>
403+ </listitem>
216404 <listitem>
217405 <para>
218406 <link xlink:href="https://timetagger.app">timetagger</link>,
@@ -238,6 +426,14 @@
238426 <link xlink:href="options.html#opt-services.headscale.enable">services.headscale</link>
239427 </para>
240428 </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>
241437 <listitem>
242438 <para>
243439 <link xlink:href="https://0xerr0r.github.io/blocky/">blocky</link>,
@@ -245,6 +441,20 @@
245441 with many features.
246442 </para>
247443 </listitem>
444+ <listitem>
445+ <para>
446+ <link xlink:href="https://clusterlabs.org/pacemaker/">pacemaker</link>
447+ cluster resource manager
448+ </para>
449+ </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>
248458 </itemizedlist>
249459 </section>
250460 <section xml:id="sec-release-22.05-incompatibilities">
@@ -312,6 +522,85 @@
312522 new versions will release.
313523 </para>
314524 </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>
315604 <listitem>
316605 <para>
317606 <literal>services.kubernetes.addons.dashboard</literal> was
@@ -329,6 +618,92 @@
329618 relying on the insecure behaviour before upgrading.
330619 </para>
331620 </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>
668+ <listitem>
669+ <para>
670+ <literal>services.k3s.enable</literal> no longer implies
671+ <literal>systemd.enableUnifiedCgroupHierarchy = false</literal>,
672+ and will default to the <quote>systemd</quote> cgroup driver
673+ when using <literal>services.k3s.docker = true</literal>. This
674+ change may require a reboot to take effect, and k3s may not be
675+ able to run if the boot cgroup hierarchy does not match its
676+ configuration. The previous behavior may be retained by
677+ explicitly setting
678+ <literal>systemd.enableUnifiedCgroupHierarchy = false</literal>
679+ in your configuration.
680+ </para>
681+ </listitem>
682+ <listitem>
683+ <para>
684+ <literal>fonts.fonts</literal> no longer includes ancient
685+ bitmap fonts when both
686+ <literal>config.services.xserver.enable</literal> and
687+ <literal>config.nixpkgs.config.allowUnfree</literal> are
688+ enabled. If you still want these fonts, use:
689+ </para>
690+ <programlisting language="bash">
691+{
692+ fonts.fonts = [
693+ pkgs.xorg.fontbhlucidatypewriter100dpi
694+ pkgs.xorg.fontbhlucidatypewriter75dpi
695+ pkgs.xorg.fontbh100dpi
696+ ];
697+}
698+</programlisting>
699+ </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>
332707 <listitem>
333708 <para>
334709 The DHCP server (<literal>services.dhcpd4</literal>,
@@ -353,6 +728,286 @@
353728 its reliance on python2.
354729 </para>
355730 </listitem>
731+ <listitem>
732+ <para>
733+ <literal>services.ipfs.extraFlags</literal> is now escaped
734+ with <literal>utils.escapeSystemdExecArgs</literal>. If you
735+ rely on systemd interpolating <literal>extraFlags</literal> in
736+ the service <literal>ExecStart</literal>, this will no longer
737+ work.
738+ </para>
739+ </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>
758+ <listitem>
759+ <para>
760+ The <literal>matrix-synapse</literal> service
761+ (<literal>services.matrix-synapse</literal>) has been
762+ converted to use the <literal>settings</literal> option
763+ defined in RFC42. This means that options that are part of
764+ your <literal>homeserver.yaml</literal> configuration, and
765+ that were specified at the top-level of the module
766+ (<literal>services.matrix-synapse</literal>) now need to be
767+ moved into
768+ <literal>services.matrix-synapse.settings</literal>. And while
769+ not all options you may use are defined in there, they are
770+ still supported, because you can set arbitrary values in this
771+ freeform type.
772+ </para>
773+ <para>
774+ The <literal>listeners.*.bind_address</literal> option was
775+ renamed to <literal>bind_addresses</literal> in order to match
776+ the upstream <literal>homeserver.yaml</literal> option name.
777+ It is now also a list of strings instead of a string.
778+ </para>
779+ <para>
780+ An example to make the required migration clearer:
781+ </para>
782+ <para>
783+ Before:
784+ </para>
785+ <programlisting language="bash">
786+{
787+ services.matrix-synapse = {
788+ enable = true;
789+
790+ server_name = &quot;example.com&quot;;
791+ public_baseurl = &quot;https://example.com:8448&quot;;
792+
793+ enable_registration = false;
794+ registration_shared_secret = &quot;xohshaeyui8jic7uutuDogahkee3aehuaf6ei3Xouz4iicie5thie6nohNahceut&quot;;
795+ macaroon_secret_key = &quot;xoo8eder9seivukaiPh1cheikohquuw8Yooreid0The4aifahth3Ou0aiShaiz4l&quot;;
796+
797+ tls_certificate_path = &quot;/var/lib/acme/example.com/fullchain.pem&quot;;
798+ tls_certificate_path = &quot;/var/lib/acme/example.com/fullchain.pem&quot;;
799+
800+ listeners = [ {
801+ port = 8448;
802+ bind_address = &quot;&quot;;
803+ type = &quot;http&quot;;
804+ tls = true;
805+ resources = [ {
806+ names = [ &quot;client&quot; ];
807+ compress = true;
808+ } {
809+ names = [ &quot;federation&quot; ];
810+ compress = false;
811+ } ];
812+ } ];
813+
814+ };
815+}
816+</programlisting>
817+ <para>
818+ After:
819+ </para>
820+ <programlisting language="bash">
821+{
822+ services.matrix-synapse = {
823+ enable = true;
824+
825+ # this attribute set holds all values that go into your homeserver.yaml configuration
826+ # See https://github.com/matrix-org/synapse/blob/develop/docs/sample_config.yaml for
827+ # possible values.
828+ settings = {
829+ server_name = &quot;example.com&quot;;
830+ public_baseurl = &quot;https://example.com:8448&quot;;
831+
832+ enable_registration = false;
833+ # pass `registration_shared_secret` and `macaroon_secret_key` via `extraConfigFiles` instead
834+
835+ tls_certificate_path = &quot;/var/lib/acme/example.com/fullchain.pem&quot;;
836+ tls_certificate_path = &quot;/var/lib/acme/example.com/fullchain.pem&quot;;
837+
838+ listeners = [ {
839+ port = 8448;
840+ bind_addresses = [
841+ &quot;::&quot;
842+ &quot;0.0.0.0&quot;
843+ ];
844+ type = &quot;http&quot;;
845+ tls = true;
846+ resources = [ {
847+ names = [ &quot;client&quot; ];
848+ compress = true;
849+ } {
850+ names = [ &quot;federation&quot; ];
851+ compress = false;
852+ } ];
853+ } ];
854+ };
855+
856+ extraConfigFiles = [
857+ /run/keys/matrix-synapse/secrets.yaml
858+ ];
859+ };
860+}
861+</programlisting>
862+ <para>
863+ The secrets in your original config should be migrated into a
864+ YAML file that is included via
865+ <literal>extraConfigFiles</literal>.
866+ </para>
867+ <para>
868+ Additionally a few option defaults have been synced up with
869+ upstream default values, for example the
870+ <literal>max_upload_size</literal> grew from
871+ <literal>10M</literal> to <literal>50M</literal>. For the same
872+ reason, the default <literal>media_store_path</literal> was
873+ changed from <literal>${dataDir}/media</literal> to
874+ <literal>${dataDir}/media_store</literal> if
875+ <literal>system.stateVersion</literal> is at least
876+ <literal>22.05</literal>. Files will need to be manually moved
877+ to the new location if the <literal>stateVersion</literal> is
878+ updated.
879+ </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>
1010+ </listitem>
3561011 <listitem>
3571012 <para>
3581013 The MoinMoin wiki engine
@@ -360,6 +1015,25 @@
3601015 because Python 2 is being retired from nixpkgs.
3611016 </para>
3621017 </listitem>
1018+ <listitem>
1019+ <para>
1020+ Services in the <literal>hadoop</literal> module previously
1021+ set <literal>openFirewall</literal> to true by default. This
1022+ has now been changed to false. Node definitions for multi-node
1023+ clusters would need <literal>openFirewall = true;</literal> to
1024+ be added to to hadoop services when upgrading from NixOS
1025+ 21.11.
1026+ </para>
1027+ </listitem>
1028+ <listitem>
1029+ <para>
1030+ <literal>services.hadoop.yarn.nodemanager</literal> now uses
1031+ cgroup-based CPU limit enforcement by default. Additionally,
1032+ the option <literal>useCGroups</literal> was added to
1033+ nodemanagers as an easy way to switch back to the old
1034+ behavior.
1035+ </para>
1036+ </listitem>
3631037 <listitem>
3641038 <para>
3651039 The <literal>wafHook</literal> hook now honors
@@ -405,6 +1079,23 @@
4051079 6.x</link> and renamed to <literal>gnome-secrets</literal>.
4061080 </para>
4071081 </listitem>
1082+ <listitem>
1083+ <para>
1084+ <literal>services.gnome.experimental-features.realtime-scheduling</literal>
1085+ option has been removed, as GNOME Shell now
1086+ <link xlink:href="https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2060">uses
1087+ rtkit</link>. Use
1088+ <literal>security.rtkit.enable = true;</literal> instead. As
1089+ before, you will need to have it enabled using GSettings.
1090+ </para>
1091+ </listitem>
1092+ <listitem>
1093+ <para>
1094+ <literal>services.telepathy</literal> will no longer be
1095+ enabled by default for GNOME desktops, one should enable it in
1096+ their configs if using Empathy or Polari.
1097+ </para>
1098+ </listitem>
4081099 <listitem>
4091100 <para>
4101101 If you previously used
@@ -444,6 +1135,21 @@
4441135 support due to python2 deprecation in nixpkgs
4451136 </para>
4461137 </listitem>
1138+ <listitem>
1139+ <para>
1140+ <literal>services.miniflux.adminCredentialFiles</literal> is
1141+ now required, instead of defaulting to
1142+ <literal>admin</literal> and <literal>password</literal>.
1143+ </para>
1144+ </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>
4471153 <listitem>
4481154 <para>
4491155 The <literal>autorestic</literal> package has been upgraded
@@ -527,19 +1233,98 @@
5271233 </listitem>
5281234 <listitem>
5291235 <para>
530− <literal>tilp2</literal> was removed together with its module
1236+ <literal>pkgs._7zz</literal> is now correctly licensed as
1237+ LGPL3+ and BSD3 with optional unfree unRAR licensed code
5311238 </para>
5321239 </listitem>
5331240 <listitem>
5341241 <para>
535− The options
536− <literal>networking.interfaces.&lt;name&gt;.ipv4.routes</literal>
537− and
538− <literal>networking.interfaces.&lt;name&gt;.ipv6.routes</literal>
539− are no longer ignored when using networkd instead of the
540− default scripted network backend by setting
541− <literal>networking.useNetworkd</literal> to
542− <literal>true</literal>.
1242+ The <literal>vim.customize</literal> function produced by
1243+ <literal>vimUtils.makeCustomizable</literal> now has a
1244+ slightly different interface:
1245+ </para>
1246+ <itemizedlist spacing="compact">
1247+ <listitem>
1248+ <para>
1249+ The wrapper now includes everything in the given Vim
1250+ derivation if <literal>name</literal> is
1251+ <literal>&quot;vim&quot;</literal> (the default). This
1252+ makes the <literal>wrapManual</literal> argument obsolete,
1253+ but this behavior can be overriden by setting the
1254+ <literal>standalone</literal> argument.
1255+ </para>
1256+ </listitem>
1257+ <listitem>
1258+ <para>
1259+ All the executables present in the given derivation (or,
1260+ in <literal>standalone</literal> mode, only the
1261+ <literal>*vim</literal> ones) are wrapped. This makes the
1262+ <literal>wrapGui</literal> argument obsolete.
1263+ </para>
1264+ </listitem>
1265+ <listitem>
1266+ <para>
1267+ The <literal>vimExecutableName</literal> and
1268+ <literal>gvimExecutableName</literal> arguments were
1269+ replaced by a single <literal>executableName</literal>
1270+ argument in which the shell variable
1271+ <literal>$exe</literal> can be used to refer to the
1272+ wrapped executable’s name.
1273+ </para>
1274+ </listitem>
1275+ </itemizedlist>
1276+ <para>
1277+ See the comments in
1278+ <literal>pkgs/applications/editors/vim/plugins/vim-utils.nix</literal>
1279+ for more details.
1280+ </para>
1281+ <para>
1282+ <literal>vimUtils.vimWithRC</literal> was removed. You should
1283+ instead use <literal>customize</literal> on a Vim derivation,
1284+ which now accepts <literal>vimrcFile</literal> and
1285+ <literal>gvimrcFile</literal> arguments.
1286+ </para>
1287+ </listitem>
1288+ <listitem>
1289+ <para>
1290+ <literal>tilp2</literal> was removed together with its module
1291+ </para>
1292+ </listitem>
1293+ <listitem>
1294+ <para>
1295+ The F-PROT antivirus (<literal>fprot</literal> package) and
1296+ its service module were removed because it reached
1297+ <link xlink:href="https://kb.cyren.com/av-support/index.php?/Knowledgebase/Article/View/434/0/end-of-sale--end-of-life-for-f-prot-and-csam">end-of-life</link>.
1298+ </para>
1299+ </listitem>
1300+ <listitem>
1301+ <para>
1302+ <literal>bird1</literal> and its modules
1303+ <literal>services.bird</literal> as well as
1304+ <literal>services.bird6</literal> have been removed. Upgrade
1305+ to <literal>services.bird2</literal>.
1306+ </para>
1307+ </listitem>
1308+ <listitem>
1309+ <para>
1310+ The options
1311+ <literal>networking.interfaces.&lt;name&gt;.ipv4.routes</literal>
1312+ and
1313+ <literal>networking.interfaces.&lt;name&gt;.ipv6.routes</literal>
1314+ are no longer ignored when using networkd instead of the
1315+ default scripted network backend by setting
1316+ <literal>networking.useNetworkd</literal> to
1317+ <literal>true</literal>.
1318+ </para>
1319+ </listitem>
1320+ <listitem>
1321+ <para>
1322+ The <literal>miller</literal> package has been upgraded from
1323+ 5.10.3 to
1324+ <link xlink:href="https://github.com/johnkerl/miller/releases/tag/v6.2.0">6.2.0</link>.
1325+ See
1326+ <link xlink:href="https://miller.readthedocs.io/en/latest/new-in-miller-6">What’s
1327+ new in Miller 6</link>.
5431328 </para>
5441329 </listitem>
5451330 <listitem>
@@ -558,6 +1343,42 @@
5581343 <literal>~/.local/share/polymc/polymc.cfg</literal>.
5591344 </para>
5601345 </listitem>
1346+ <listitem>
1347+ <para>
1348+ <literal>systemd-nspawn@.service</literal> settings have been
1349+ reverted to the default systemd behaviour. User namespaces are
1350+ now activated by default. If you want to keep running nspawn
1351+ containers without user namespaces you need to set
1352+ <literal>systemd.nspawn.&lt;name&gt;.execConfig.PrivateUsers = false</literal>
1353+ </para>
1354+ </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>
1363+ <listitem>
1364+ <para>
1365+ The Tor SOCKS proxy is now actually disabled if
1366+ <literal>services.tor.client.enable</literal> is set to
1367+ <literal>false</literal> (the default). If you are using this
1368+ functionality but didn’t change the setting or set it to
1369+ <literal>false</literal>, you now need to set it to
1370+ <literal>true</literal>.
1371+ </para>
1372+ </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>
5611382 <listitem>
5621383 <para>
5631384 The terraform 0.12 compatibility has been removed and the
@@ -576,6 +1397,18 @@
5761397 directly.
5771398 </para>
5781399 </listitem>
1400+ <listitem>
1401+ <para>
1402+ The <literal>dendrite</literal> package has been upgraded from
1403+ 0.5.1 to
1404+ <link xlink:href="https://github.com/matrix-org/dendrite/releases/tag/v0.6.5">0.6.5</link>.
1405+ Instances configured with split sqlite databases, which has
1406+ been the default in NixOS, require merging of the federation
1407+ sender and signing key databases. See upstream
1408+ <link xlink:href="https://github.com/matrix-org/dendrite/releases/tag/v0.6.0">release
1409+ notes</link> on version 0.6.0 for details on database changes.
1410+ </para>
1411+ </listitem>
5791412 <listitem>
5801413 <para>
5811414 The existing <literal>pkgs.opentelemetry-collector</literal>
@@ -590,6 +1423,23 @@
5901423 <literal>otelcorecol</literal> and enjoy a 7x smaller binary.
5911424 </para>
5921425 </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>
1436+ <listitem>
1437+ <para>
1438+ <literal>pkgs.pgadmin</literal> now refers to
1439+ <literal>pkgs.pgadmin4</literal>. <literal>pgadmin3</literal>
1440+ has been removed.
1441+ </para>
1442+ </listitem>
5931443 <listitem>
5941444 <para>
5951445 <literal>pkgs.noto-fonts-cjk</literal> is now deprecated in
@@ -602,6 +1452,58 @@
6021452 include serif fonts.
6031453 </para>
6041454 </listitem>
1455+ <listitem>
1456+ <para>
1457+ <literal>pkgs.epgstation</literal> has been upgraded from v1
1458+ to v2, resulting in incompatible changes in the database
1459+ scheme and configuration format.
1460+ </para>
1461+ </listitem>
1462+ <listitem>
1463+ <para>
1464+ Some top-level settings under
1465+ <link linkend="opt-services.epgstation.enable">services.epgstation</link>
1466+ is now deprecated because it was redudant due to the same
1467+ options being present in
1468+ <link linkend="opt-services.epgstation.settings">services.epgstation.settings</link>.
1469+ </para>
1470+ </listitem>
1471+ <listitem>
1472+ <para>
1473+ The option <literal>services.epgstation.basicAuth</literal>
1474+ was removed because basic authentication support was dropped
1475+ by upstream.
1476+ </para>
1477+ </listitem>
1478+ <listitem>
1479+ <para>
1480+ The option
1481+ <link linkend="opt-services.epgstation.database.passwordFile">services.epgstation.database.passwordFile</link>
1482+ no longer has a default value. Make sure to set this option
1483+ explicitly before upgrading. Change the database password if
1484+ necessary.
1485+ </para>
1486+ </listitem>
1487+ <listitem>
1488+ <para>
1489+ The
1490+ <link linkend="opt-services.epgstation.settings">services.epgstation.settings</link>
1491+ option now expects options for <literal>config.yml</literal>
1492+ in EPGStation v2.
1493+ </para>
1494+ </listitem>
1495+ <listitem>
1496+ <para>
1497+ Existing data for the
1498+ <link linkend="opt-services.epgstation.enable">services.epgstation</link>
1499+ module would have to be backed up prior to the upgrade. To
1500+ back up exising data to
1501+ <literal>/tmp/epgstation.bak</literal>, run
1502+ <literal>sudo -u epgstation epgstation run backup /tmp/epgstation.bak</literal>.
1503+ To import that data after to the upgrade, run
1504+ <literal>sudo -u epgstation epgstation run v1migrate /tmp/epgstation.bak</literal>
1505+ </para>
1506+ </listitem>
6051507 <listitem>
6061508 <para>
6071509 <literal>switch-to-configuration</literal> (the script that is
@@ -700,6 +1602,128 @@
7001602 <link xlink:href="https://github.com/olimorris/onedarkpro.nvim">olimorris/onedarkpro.nvim</link>).
7011603 </para>
7021604 </listitem>
1605+ <listitem>
1606+ <para>
1607+ <literal>services.pipewire.enable</literal> will default to
1608+ enabling the WirePlumber session manager instead of
1609+ pipewire-media-session. pipewire-media-session is deprecated
1610+ by upstream and not recommended, but can still be manually
1611+ enabled by setting
1612+ <literal>services.pipewire.media-session.enable</literal> to
1613+ <literal>true</literal> and
1614+ <literal>services.pipewire.wireplumber.enable</literal> to
1615+ <literal>false</literal>.
1616+ </para>
1617+ </listitem>
1618+ <listitem>
1619+ <para>
1620+ <literal>pkgs.makeDesktopItem</literal> has been refactored to
1621+ provide a more idiomatic API. Specifically:
1622+ </para>
1623+ <itemizedlist spacing="compact">
1624+ <listitem>
1625+ <para>
1626+ All valid options as of FDO Desktop Entry specification
1627+ version 1.4 can now be passed in as explicit arguments
1628+ </para>
1629+ </listitem>
1630+ <listitem>
1631+ <para>
1632+ <literal>exec</literal> can now be null, for entries that
1633+ are not of type Application
1634+ </para>
1635+ </listitem>
1636+ <listitem>
1637+ <para>
1638+ <literal>mimeType</literal> argument is renamed to
1639+ <literal>mimeTypes</literal> for consistency
1640+ </para>
1641+ </listitem>
1642+ <listitem>
1643+ <para>
1644+ <literal>mimeTypes</literal>,
1645+ <literal>categories</literal>,
1646+ <literal>implements</literal>,
1647+ <literal>keywords</literal>, <literal>onlyShowIn</literal>
1648+ and <literal>notShowIn</literal> take lists of strings
1649+ instead of one string with semicolon separators
1650+ </para>
1651+ </listitem>
1652+ <listitem>
1653+ <para>
1654+ <literal>extraDesktopEntries</literal> renamed to
1655+ <literal>extraConfig</literal> for consistency
1656+ </para>
1657+ </listitem>
1658+ <listitem>
1659+ <para>
1660+ Actions should now be provided as an attrset
1661+ <literal>actions</literal>, the <literal>Actions</literal>
1662+ line will be autogenerated.
1663+ </para>
1664+ </listitem>
1665+ <listitem>
1666+ <para>
1667+ <literal>extraEntries</literal> is removed.
1668+ </para>
1669+ </listitem>
1670+ <listitem>
1671+ <para>
1672+ Additional validation is added both at eval time and at
1673+ build time.
1674+ </para>
1675+ </listitem>
1676+ </itemizedlist>
1677+ <para>
1678+ See the <literal>vscode</literal> package for a more detailed
1679+ example.
1680+ </para>
1681+ </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>
1709+ <listitem>
1710+ <para>
1711+ <literal>pkgs.cosmopolitan</literal> no longer provides the
1712+ <literal>cosmoc</literal> command. It has been moved to
1713+ <literal>pkgs.cosmoc</literal>.
1714+ </para>
1715+ </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>
7031727 </itemizedlist>
7041728 </section>
7051729 <section xml:id="sec-release-22.05-notable-changes">
@@ -764,7 +1788,8 @@
7641788 Legacy options have been mapped to the corresponding
7651789 options under under
7661790 <link xlink:href="options.html#opt-nix.settings">nix.settings</link>
767− but may be deprecated in the future.
1791+ and will be deprecated when NixOS 21.11 reaches end of
1792+ life.
7681793 </para>
7691794 </listitem>
7701795 <listitem>
@@ -785,6 +1810,41 @@
7851810 using the PyPy interpreter were added.
7861811 </para>
7871812 </listitem>
1813+ <listitem>
1814+ <para>
1815+ Some improvements have been made to the
1816+ <literal>hadoop</literal> module:
1817+ </para>
1818+ <itemizedlist spacing="compact">
1819+ <listitem>
1820+ <para>
1821+ A <literal>gatewayRole</literal> option has been added,
1822+ for deploying hadoop cluster configuration files to a node
1823+ that does not have any active services
1824+ </para>
1825+ </listitem>
1826+ <listitem>
1827+ <para>
1828+ Support for older versions of hadoop have been added to
1829+ the module
1830+ </para>
1831+ </listitem>
1832+ <listitem>
1833+ <para>
1834+ Overriding and extending site XML files has been made
1835+ easier
1836+ </para>
1837+ </listitem>
1838+ </itemizedlist>
1839+ </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>
7881848 <listitem>
7891849 <para>
7901850 If you are using Wayland you can choose to use the Ozone
@@ -798,6 +1858,35 @@
7981858 versions.
7991859 </para>
8001860 </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>
8011890 <listitem>
8021891 <para>
8031892 The <literal>influxdb2</literal> package was split into
@@ -808,6 +1897,29 @@
8081897 compatibilty, but will be removed at a later date.
8091898 </para>
8101899 </listitem>
1900+ <listitem>
1901+ <para>
1902+ The <literal>unifi</literal> package was switched from
1903+ <literal>unifi6</literal> to <literal>unifi7</literal>. Direct
1904+ downgrades from Unifi 7 to Unifi 6 are not possible and
1905+ require restoring from a backup made by Unifi 6.
1906+ </para>
1907+ </listitem>
1908+ <listitem>
1909+ <para>
1910+ <literal>programs.zsh.autosuggestions.strategy</literal> now
1911+ takes a list of strings instead of a string.
1912+ </para>
1913+ </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>
8111923 <listitem>
8121924 <para>
8131925 The <literal>services.unifi.openPorts</literal> option default
@@ -816,6 +1928,15 @@
8161928 using this default will print a warning when rebuilt.
8171929 </para>
8181930 </listitem>
1931+ <listitem>
1932+ <para>
1933+ The <literal>services.unifi-video.openPorts</literal> option
1934+ default value of <literal>true</literal> is now deprecated and
1935+ will be changed to <literal>false</literal> in 22.11.
1936+ Configurations using this default will print a warning when
1937+ rebuilt.
1938+ </para>
1939+ </listitem>
8191940 <listitem>
8201941 <para>
8211942 <literal>security.acme</literal> certificates will now
@@ -857,9 +1978,11 @@
8571978 <para>
8581979 <link linkend="opt-programs.ssh.knownHosts">programs.ssh.knownHosts</link>
8591980 has gained an <literal>extraHostNames</literal> option to
860− replace <literal>hostNames</literal>.
861− <literal>hostNames</literal> is deprecated, but still
862− 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.
8631986 </para>
8641987 </listitem>
8651988 <listitem>
@@ -870,6 +1993,36 @@
8701993 configuration.
8711994 </para>
8721995 </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>
8732026 <listitem>
8742027 <para>
8752028 The option <literal>services.duplicati.dataDir</literal> has
@@ -879,10 +2032,10 @@
8792032 </listitem>
8802033 <listitem>
8812034 <para>
882− A new option
883− <literal>boot.initrd.extraModprobeConfig</literal> has been
884− added which can be used to configure kernel modules that are
885− loaded in the initrd.
2035+ The options <literal>boot.extraModprobeConfig</literal> and
2036+ <literal>boot.blacklistedKernelModules</literal> now also take
2037+ effect in the initrd by copying the file
2038+ <literal>/etc/modprobe.d/nixos.conf</literal> into the initrd.
8862039 </para>
8872040 </listitem>
8882041 <listitem>
@@ -892,6 +2045,105 @@
8922045 instead of <literal>configuration.nix</literal>.
8932046 </para>
8942047 </listitem>
2048+ <listitem>
2049+ <para>
2050+ ORY Kratos was updated to version 0.9.0-alpha.3, which
2051+ introduces some breaking changes:
2052+ </para>
2053+ <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>
2095+ <listitem>
2096+ <para>
2097+ If you are relying on the SQLite images, update your
2098+ Docker Pull commands as follows:
2099+ </para>
2100+ <itemizedlist spacing="compact">
2101+ <listitem>
2102+ <para>
2103+ <literal>docker pull oryd/kratos:{version}</literal>
2104+ </para>
2105+ </listitem>
2106+ </itemizedlist>
2107+ </listitem>
2108+ <listitem>
2109+ <para>
2110+ Additionally, all passwords now have to be at least 8
2111+ characters long.
2112+ </para>
2113+ </listitem>
2114+ <listitem>
2115+ <para>
2116+ For more details, see:
2117+ </para>
2118+ <itemizedlist spacing="compact">
2119+ <listitem>
2120+ <para>
2121+ <link xlink:href="https://github.com/ory/kratos/releases/tag/v0.8.1-alpha.1">Release
2122+ Notes for v0.8.1-alpha-1</link>
2123+ </para>
2124+ </listitem>
2125+ <listitem>
2126+ <para>
2127+ <link xlink:href="https://github.com/ory/kratos/releases/tag/v0.8.2-alpha.1">Release
2128+ Notes for v0.8.2-alpha-1</link>
2129+ </para>
2130+ </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>
2143+ </itemizedlist>
2144+ </listitem>
2145+ </itemizedlist>
2146+ </listitem>
8952147 <listitem>
8962148 <para>
8972149 <literal>fetchFromSourcehut</literal> now allows fetching
@@ -901,6 +2153,23 @@
9012153 <literal>true</literal>.
9022154 </para>
9032155 </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>
2163+ <listitem>
2164+ <para>
2165+ The <literal>element-desktop</literal> package now has an
2166+ <literal>useKeytar</literal> option (defaults to
2167+ <literal>true</literal>), which allows disabling
2168+ <literal>keytar</literal> and in turn
2169+ <literal>libsecret</literal> usage (which binds to native
2170+ credential managers / keychain libraries).
2171+ </para>
2172+ </listitem>
9042173 <listitem>
9052174 <para>
9062175 The option <literal>services.thelounge.plugins</literal> has
@@ -910,12 +2179,29 @@
9102179 <literal>pkgs.theLoungePlugins.themes</literal>.
9112180 </para>
9122181 </listitem>
2182+ <listitem>
2183+ <para>
2184+ The option
2185+ <literal>services.xserver.videoDriver = [ &quot;nvidia&quot; ];</literal>
2186+ will now also install
2187+ <link xlink:href="https://github.com/elFarto/nvidia-vaapi-driver">nvidia
2188+ VA-API drivers</link> by default.
2189+ </para>
2190+ </listitem>
9132191 <listitem>
9142192 <para>
9152193 The <literal>firmwareLinuxNonfree</literal> package has been
9162194 renamed to <literal>linux-firmware</literal>.
9172195 </para>
9182196 </listitem>
2197+ <listitem>
2198+ <para>
2199+ It is now possible to specify wordlists to include as handy to
2200+ access environment variables using the
2201+ <literal>config.environment.wordlist</literal> configuration
2202+ options.
2203+ </para>
2204+ </listitem>
9192205 <listitem>
9202206 <para>
9212207 The <literal>services.mbpfan</literal> module was converted to
@@ -954,6 +2240,39 @@
9542240 Plugins are automatically repackaged using autoPatchelf.
9552241 </para>
9562242 </listitem>
2243+ <listitem>
2244+ <para>
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.
2274+ </para>
2275+ </listitem>
9572276 <listitem>
9582277 <para>
9592278 The <literal>zrepl</literal> package has been updated from
@@ -979,6 +2298,24 @@
9792298 </listitem>
9802299 </itemizedlist>
9812300 </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>
9822319 <listitem>
9832320 <para>
9842321 Renamed option
@@ -990,10 +2327,26 @@
9902327 warning.
9912328 </para>
9922329 </listitem>
2330+ <listitem>
2331+ <para>
2332+ <literal>services.autorandr</literal> now allows for adding
2333+ hooks and profiles declaratively.
2334+ </para>
2335+ </listitem>
2336+ <listitem>
2337+ <para>
2338+ The <literal>pomerium-cli</literal> command has been moved out
2339+ of the <literal>pomerium</literal> package into the
2340+ <literal>pomerium-cli</literal> package, following upstream’s
2341+ repository split. If you are using the
2342+ <literal>pomerium-cli</literal> command, you should now
2343+ install the <literal>pomerium-cli</literal> package.
2344+ </para>
2345+ </listitem>
9932346 <listitem>
9942347 <para>
9952348 The option
996− <link linkend="opt-services.networking.networkmanager.enableFccUnlock">services.networking.networkmanager.enableFccUnlock</link>
2349+ <link linkend="opt-networking.networkmanager.enableFccUnlock">services.networking.networkmanager.enableFccUnlock</link>
9972350 was added to support FCC unlock procedures. Since release
9982351 1.18.4, the ModemManager daemon no longer automatically
9992352 performs the FCC unlock procedure by default. See
@@ -1010,6 +2363,108 @@
10102363 <literal>tmux</literal>.
10112364 </para>
10122365 </listitem>
2366+ <listitem>
2367+ <para>
2368+ The polkit service, available at
2369+ <literal>security.polkit.enable</literal>, is now disabled by
2370+ default. It will automatically be enabled through services and
2371+ desktop environments as needed.
2372+ </para>
2373+ </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>
2395+ <listitem>
2396+ <para>
2397+ The <literal>hadoop</literal> package has added support for
2398+ <literal>aarch64-linux</literal> and
2399+ <literal>aarch64-darwin</literal> as of 3.3.1
2400+ (<link xlink:href="https://github.com/NixOS/nixpkgs/pull/158613">#158613</link>).
2401+ </para>
2402+ </listitem>
2403+ <listitem>
2404+ <para>
2405+ The <literal>R</literal> package now builds again on
2406+ <literal>aarch64-darwin</literal>
2407+ (<link xlink:href="https://github.com/NixOS/nixpkgs/pull/158992">#158992</link>).
2408+ </para>
2409+ </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>
2428+ <listitem>
2429+ <para>
2430+ The <literal>spark3</literal> package has been updated from
2431+ 3.1.2 to 3.2.1
2432+ (<link xlink:href="https://github.com/NixOS/nixpkgs/pull/160075">#160075</link>):
2433+ </para>
2434+ <itemizedlist spacing="compact">
2435+ <listitem>
2436+ <para>
2437+ Testing has been enabled for
2438+ <literal>aarch64-linux</literal> in addition to
2439+ <literal>x86_64-linux</literal>.
2440+ </para>
2441+ </listitem>
2442+ <listitem>
2443+ <para>
2444+ The <literal>spark3</literal> package is now usable on
2445+ <literal>aarch64-darwin</literal> as a result of
2446+ <link xlink:href="https://github.com/NixOS/nixpkgs/pull/158613">#158613</link>
2447+ and
2448+ <link xlink:href="https://github.com/NixOS/nixpkgs/pull/158992">#158992</link>.
2449+ </para>
2450+ </listitem>
2451+ </itemizedlist>
2452+ </listitem>
2453+ <listitem>
2454+ <para>
2455+ The <literal>programs.nncp</literal> options were added for
2456+ generating host-global NNCP configuration.
2457+ </para>
2458+ </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>
10132468 </itemizedlist>
10142469 </section>
10152470</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+26
@@ -91,6 +91,10 @@
9191 <option>--flake</option> <replaceable>flake-uri</replaceable>
9292 </arg>
9393
94+ <arg>
95+ <option>--no-flake</option>
96+ </arg>
97+
9498 <arg>
9599 <option>--override-input</option> <replaceable>input-name</replaceable> <replaceable>flake-uri</replaceable>
96100 </arg>
@@ -544,6 +548,14 @@
544548 (<replaceable>user@host</replaceable>). You can also set ssh options by
545549 defining the <envar>NIX_SSHOPTS</envar> environment variable.
546550 </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>
547559 </listitem>
548560 </varlistentry>
549561
@@ -594,6 +606,20 @@
594606 </listitem>
595607 </varlistentry>
596608
609+ <varlistentry>
610+ <term>
611+ <option>--no-flake</option>
612+ </term>
613+ <listitem>
614+ <para>
615+ Do not imply <option>--flake</option> if
616+ <filename>/etc/nixos/flake.nix</filename> exists. With this
617+ option, it is possible to build non-flake NixOS configurations
618+ even if the current NixOS systems uses flakes.
619+ </para>
620+ </listitem>
621+ </varlistentry>
622+
597623 </variablelist>
598624
599625 <para>
nixos/doc/manual/man-pages.xml+7−2
@@ -3,10 +3,15 @@
33 xmlns:xi="http://www.w3.org/2001/XInclude">
44 <title>NixOS Reference Pages</title>
55 <info>
6− <author><personname><firstname>Eelco</firstname><surname>Dolstra</surname></personname>
6+ <author>
7+ <personname><firstname>Eelco</firstname><surname>Dolstra</surname></personname>
78 <contrib>Author</contrib>
89 </author>
9− <copyright><year>2007-2020</year><holder>Eelco Dolstra</holder>
10+ <author>
11+ <personname><othername>The Nixpkgs/NixOS contributors</othername></personname>
12+ <contrib>Author</contrib>
13+ </author>
14+ <copyright><year>2007-2022</year><holder>Eelco Dolstra and the Nixpkgs/NixOS contributors</holder>
1015 </copyright>
1116 </info>
1217 <xi:include href="man-configuration.xml" />
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/release-notes.xml+1
@@ -8,6 +8,7 @@
88 This section lists the release notes for each stable version of NixOS and
99 current unstable revision.
1010 </para>
11+ <xi:include href="../from_md/release-notes/rl-2205.section.xml" />
1112 <xi:include href="../from_md/release-notes/rl-2111.section.xml" />
1213 <xi:include href="../from_md/release-notes/rl-2105.section.xml" />
1314 <xi:include href="../from_md/release-notes/rl-2009.section.xml" />
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-2111.section.md+19−1
@@ -8,7 +8,22 @@ In addition to numerous new and upgraded packages, this release has the followin
88
99- Nix has been updated to version 2.4, reference its [release notes](https://discourse.nixos.org/t/nix-2-4-released/15822) for more information on what has changed. The previous version of Nix, 2.3.16, remains available for the time being in the `nix_2_3` package.
1010
11−- `iptables` now uses `nf_tables` backend.
11+- `iptables` is now using `nf_tables` under the hood, by using `iptables-nft`,
12+ similar to [Debian](https://wiki.debian.org/nftables#Current_status) and
13+ [Fedora](https://fedoraproject.org/wiki/Changes/iptables-nft-default).
14+ This means, `ip[6]tables`, `arptables` and `ebtables` commands will actually
15+ show rules from some specific tables in the `nf_tables` kernel subsystem.
16+ In case you're migrating from an older release without rebooting, there might
17+ be cases where you end up with iptable rules configured both in the legacy
18+ `iptables` kernel backend, as well as in the `nf_tables` backend.
19+ This can lead to confusing firewall behaviour. An `iptables-save` after
20+ switching will complain about "iptables-legacy tables present".
21+ It's probably best to reboot after the upgrade, or manually removing all
22+ legacy iptables rules (via the `iptables-legacy` package).
23+
24+- systemd got an `nftables` backend, and configures (networkd) rules in their
25+ own `io.systemd.*` tables. Check `nft list ruleset` to see these rules, not
26+ `iptables-save` (which only shows `iptables`-created rules.
1227
1328- PHP now defaults to PHP 8.0, updated from 7.4.
1429
@@ -419,6 +434,9 @@ In addition to numerous new and upgraded packages, this release has the followin
419434
420435- The Linux kernel for security reasons now restricts access to BPF syscalls via `BPF_UNPRIV_DEFAULT_OFF=y`. Unprivileged access can be reenabled via the `kernel.unprivileged_bpf_disabled` sysctl knob.
421436
437+- `/usr` will always be included in the initial ramdisk. See the `fileSystems.<name>.neededForBoot` option.
438+ If any files exist under `/usr` (which is not typical for NixOS), they will be included in the initial ramdisk, increasing its size to a possibly problematic extent.
439+
422440## Other Notable Changes {#sec-release-21.11-notable-changes}
423441
424442
nixos/doc/manual/release-notes/rl-2205.section.md+544−6
@@ -6,11 +6,32 @@ In addition to numerous new and upgraded packages, this release has the followin
66
77## Highlights {#sec-release-22.05-highlights}
88
9+- The `firefox` browser on `x86_64-linux` is now making use of
10+ profile-guided optimization resulting in a much more responsive
11+ browsing experience.
12+
913- `security.acme.defaults` has been added to simplify configuring
1014 settings for many certificates at once. This also opens up the
1115 the option to use DNS-01 validation when using `enableACME` on
1216 web server virtual hosts (e.g. `services.nginx.virtualHosts.*.enableACME`).
1317
18+- GNOME has been upgraded to 42. Please take a look at their [Release Notes](https://release.gnome.org/42/) for details. Notably, it replaces gedit with GNOME Text Editor, GNOME Terminal with GNOME Console (formerly King’s Cross), and GNOME Screenshot with a tool built into the Shell.
19+
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+
1435- PHP 8.1 is now available
1536
1637- 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).
@@ -19,6 +40,21 @@ In addition to numerous new and upgraded packages, this release has the followin
1940
2041- systemd services can now set [systemd.services.\<name\>.reloadTriggers](#opt-systemd.services) instead of `reloadIfChanged` for a more granular distinction between reloads and restarts.
2142
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+
50+- [`kops`](https://kops.sigs.k8s.io) defaults to 1.22.4, which will enable [Instance Metadata Service Version 2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) and require tokens on new clusters with Kubernetes 1.22. This will increase security by default, but may break some types of workloads. See the [release notes](https://kops.sigs.k8s.io/releases/1.22-notes/) for details.
51+
52+- Module authors can use `mkRenamedOptionModuleWith` to automate the deprecation cycle without annoying out-of-tree module authors and their users.
53+
54+- The default GHC version has been updated from 8.10.7 to 9.0.2. `pkgs.haskellPackages` and `pkgs.ghc` will now use this version by default.
55+
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+
2258## New Services {#sec-release-22.05-new-services}
2359
2460- [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).
@@ -27,26 +63,40 @@ In addition to numerous new and upgraded packages, this release has the followin
2763
2864- [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).
2965
66+- [nethoscope](https://github.com/vvilhonen/nethoscope), listen to your network traffic. Available as [programs.nethoscope](#opt-programs.nethoscope.enable).
67+
3068- [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).
3169
3270- [apfs](https://github.com/linux-apfs/linux-apfs-rw), a kernel module for mounting the Apple File System (APFS).
3371
34−- [FRRouting](https://frrouting.org/), a popular suite of Internet routing protocol daemons (BGP, BFD, OSPF, IS-IS, VVRP and others). Available as [services.frr](#opt-services.ffr.babel.enable)
72+- [FRRouting](https://frrouting.org/), a popular suite of Internet routing protocol daemons (BGP, BFD, OSPF, IS-IS, VRRP and others). Available as [services.frr](#opt-services.frr.babel.enable)
3573
3674- [heisenbridge](https://github.com/hifi/heisenbridge), a bouncer-style Matrix IRC bridge. Available as [services.heisenbridge](options.html#opt-services.heisenbridge.enable).
3775
76+- [snowflake-proxy](https://snowflake.torproject.org/), a system to defeat internet censorship. Available as [services.snowflake-proxy](options.html#opt-services.snowflake-proxy.enable).
77+
3878- [ergochat](https://ergo.chat), a modern IRC with IRCv3 features. Available as [services.ergochat](options.html#opt-services.ergochat.enable).
3979
4080- [PowerDNS-Admin](https://github.com/ngoduykhanh/PowerDNS-Admin), a web interface for the PowerDNS server. Available at [services.powerdns-admin](options.html#opt-services.powerdns-admin.enable).
4181
82+- [pgadmin4](https://github.com/postgres/pgadmin4), an admin interface for the PostgreSQL database. Available at [services.pgadmin](options.html#opt-services.pgadmin.enable).
83+
4284- [input-remapper](https://github.com/sezanzeb/input-remapper), an easy to use tool to change the mapping of your input device buttons. Available at [services.input-remapper](options.html#opt-services.input-remapper.enable).
4385
4486- [InvoicePlane](https://invoiceplane.com), web application for managing and creating invoices. Available at [services.invoiceplane](options.html#opt-services.invoiceplane.enable).
4587
4688- [maddy](https://maddy.email), a composable all-in-one mail server. Available as [services.maddy](options.html#opt-services.maddy.enable).
4789
90+- [K40-Whisperer](https://www.scorchworks.com/K40whisperer/k40whisperer.html), a program to control cheap Chinese laser cutters. Available as [programs.k40-whisperer.enable](options.html#opt-programs.k4-whisperer.enable). Users must add themselves to the `k40` group to be able to access the device.
91+
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+
4894- [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).
4995
96+- [prometheus-pve-exporter](https://github.com/prometheus-pve/prometheus-pve-exporter), a tool that exposes information from the Proxmox VE API for use by Prometheus. Available as [services.prometheus.exporters.pve](options.html#opt-services.prometheus.exporters.pve).
97+
98+- [netbox](https://github.com/netbox-community/netbox), infrastructure resource modeling (IRM) tool. Available as [services.netbox](options.html#opt-services.netbox.enable).
99+
50100- [tetrd](https://tetrd.app), share your internet connection from your device to your PC and vice versa through a USB cable. Available at [services.tetrd](#opt-services.tetrd.enable).
51101
52102- [agate](https://github.com/mbrubeck/agate), a very simple server for the Gemini hypertext protocol. Available as [services.agate](options.html#opt-services.agate.enable).
@@ -58,21 +108,33 @@ In addition to numerous new and upgraded packages, this release has the followin
58108- [BaGet](https://loic-sharma.github.io/BaGet/), a lightweight NuGet and symbol server. Available at [services.baget](#opt-services.baget.enable).
59109
60110- [moosefs](https://moosefs.com), fault tolerant petabyte distributed file system.
61− Available as [moosefs](#opt-services.moosefs).
111+ Available as [moosefs](#opt-services.moosefs.client.enable).
62112
63113- [prosody-filer](https://github.com/ThomasLeister/prosody-filer), a server for handling XMPP HTTP Upload requests. Available at [services.prosody-filer](#opt-services.prosody-filer.enable).
64114
115+- [systembus-notify](https://github.com/rfjakob/systembus-notify), allow system level notifications to reach the users. Available as [services.systembus-notify](opt-services.systembus-notify.enable). Please keep in mind that this service should only be enabled on machines with fully trusted users, as any local user is able to DoS user sessions by spamming notifications.
116+
65117- [ethercalc](https://github.com/audreyt/ethercalc), an online collaborative
66118 spreadsheet. Available as [services.ethercalc](options.html#opt-services.ethercalc.enable).
67119
120+- [nbd](https://nbd.sourceforge.io/), a Network Block Device server. Available as [services.nbd](options.html#opt-services.nbd.server.enable).
121+
122+- [nix-ld](https://github.com/Mic92/nix-ld), Run unpatched dynamic binaries on NixOS. Available as [programs.nix-ld](options.html#opt-programs.nix-ld.enable).
123+
68124- [timetagger](https://timetagger.app), an open source time-tracker with an intuitive user experience and powerful reporting. [services.timetagger](options.html#opt-services.timetagger.enable).
69125
70126- [rstudio-server](https://www.rstudio.com/products/rstudio/#rstudio-server), a browser-based version of the RStudio IDE for the R programming language. Available as [services.rstudio-server](options.html#opt-services.rstudio-server.enable).
71127
72128- [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)
73129
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+
74132- [blocky](https://0xerr0r.github.io/blocky/), fast and lightweight DNS proxy as ad-blocker for local network with many features.
75133
134+- [pacemaker](https://clusterlabs.org/pacemaker/) cluster resource manager
135+
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+
76138<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
77139
78140## Backward Incompatibilities {#sec-release-22.05-incompatibilities}
@@ -109,10 +171,90 @@ In addition to numerous new and upgraded packages, this release has the followin
109171 org-contrib, refer to the ones in `pkgs.emacsPackages.elpaPackages` and
110172 `pkgs.emacsPackages.nongnuPackages` where the new versions will release.
111173
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+
112223- `services.kubernetes.addons.dashboard` was removed due to it being an outdated version.
113224
114225- `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.
115226
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+
239+- `services.k3s.enable` no longer implies `systemd.enableUnifiedCgroupHierarchy = false`, and will default to the 'systemd' cgroup driver when using `services.k3s.docker = true`.
240+ This change may require a reboot to take effect, and k3s may not be able to run if the boot cgroup hierarchy does not match its configuration.
241+ The previous behavior may be retained by explicitly setting `systemd.enableUnifiedCgroupHierarchy = false` in your configuration.
242+
243+- `fonts.fonts` no longer includes ancient bitmap fonts when both `config.services.xserver.enable` and `config.nixpkgs.config.allowUnfree` are enabled.
244+ If you still want these fonts, use:
245+
246+ ```nix
247+ {
248+ fonts.fonts = [
249+ pkgs.xorg.fontbhlucidatypewriter100dpi
250+ pkgs.xorg.fontbhlucidatypewriter75dpi
251+ pkgs.xorg.fontbh100dpi
252+ ];
253+ }
254+ ```
255+
256+- `services.prometheus.alertManagerTimeout` has been removed as it has been deprecated upstream and has no effect.
257+
116258- The DHCP server (`services.dhcpd4`, `services.dhcpd6`) has been hardened.
117259 The service is now using the systemd's `DynamicUser` mechanism to run as an unprivileged dynamically-allocated user with limited capabilities.
118260 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.
@@ -120,8 +262,193 @@ In addition to numerous new and upgraded packages, this release has the followin
120262
121263- The `mailpile` email webclient (`services.mailpile`) has been removed due to its reliance on python2.
122264
265+- `services.ipfs.extraFlags` is now escaped with `utils.escapeSystemdExecArgs`. If you rely on systemd interpolating `extraFlags` in the service `ExecStart`, this will no longer work.
266+
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+
271+- The `matrix-synapse` service (`services.matrix-synapse`) has been converted to use the `settings` option defined in RFC42.
272+ This means that options that are part of your `homeserver.yaml` configuration, and that were specified at the top-level of the
273+ module (`services.matrix-synapse`) now need to be moved into `services.matrix-synapse.settings`. And while not all options you
274+ may use are defined in there, they are still supported, because you can set arbitrary values in this freeform type.
275+
276+ The `listeners.*.bind_address` option was renamed to `bind_addresses` in order to match the upstream `homeserver.yaml` option
277+ name. It is now also a list of strings instead of a string.
278+
279+ An example to make the required migration clearer:
280+
281+ Before:
282+ ```nix
283+ {
284+ services.matrix-synapse = {
285+ enable = true;
286+
287+ server_name = "example.com";
288+ public_baseurl = "https://example.com:8448";
289+
290+ enable_registration = false;
291+ registration_shared_secret = "xohshaeyui8jic7uutuDogahkee3aehuaf6ei3Xouz4iicie5thie6nohNahceut";
292+ macaroon_secret_key = "xoo8eder9seivukaiPh1cheikohquuw8Yooreid0The4aifahth3Ou0aiShaiz4l";
293+
294+ tls_certificate_path = "/var/lib/acme/example.com/fullchain.pem";
295+ tls_certificate_path = "/var/lib/acme/example.com/fullchain.pem";
296+
297+ listeners = [ {
298+ port = 8448;
299+ bind_address = "";
300+ type = "http";
301+ tls = true;
302+ resources = [ {
303+ names = [ "client" ];
304+ compress = true;
305+ } {
306+ names = [ "federation" ];
307+ compress = false;
308+ } ];
309+ } ];
310+
311+ };
312+ }
313+ ```
314+
315+ After:
316+ ```nix
317+ {
318+ services.matrix-synapse = {
319+ enable = true;
320+
321+ # this attribute set holds all values that go into your homeserver.yaml configuration
322+ # See https://github.com/matrix-org/synapse/blob/develop/docs/sample_config.yaml for
323+ # possible values.
324+ settings = {
325+ server_name = "example.com";
326+ public_baseurl = "https://example.com:8448";
327+
328+ enable_registration = false;
329+ # pass `registration_shared_secret` and `macaroon_secret_key` via `extraConfigFiles` instead
330+
331+ tls_certificate_path = "/var/lib/acme/example.com/fullchain.pem";
332+ tls_certificate_path = "/var/lib/acme/example.com/fullchain.pem";
333+
334+ listeners = [ {
335+ port = 8448;
336+ bind_addresses = [
337+ "::"
338+ "0.0.0.0"
339+ ];
340+ type = "http";
341+ tls = true;
342+ resources = [ {
343+ names = [ "client" ];
344+ compress = true;
345+ } {
346+ names = [ "federation" ];
347+ compress = false;
348+ } ];
349+ } ];
350+ };
351+
352+ extraConfigFiles = [
353+ /run/keys/matrix-synapse/secrets.yaml
354+ ];
355+ };
356+ }
357+ ```
358+
359+ The secrets in your original config should be migrated into a YAML file that is included via `extraConfigFiles`.
360+
361+ Additionally a few option defaults have been synced up with upstream default values, for example the `max_upload_size` grew from `10M` to `50M`. For the same reason, the default
362+ `media_store_path` was changed from `${dataDir}/media` to `${dataDir}/media_store` if `system.stateVersion` is at least `22.05`. Files will need to be manually moved to the new
363+ location if the `stateVersion` is updated.
364+
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+
123442- The MoinMoin wiki engine (`services.moinmoin`) has been removed, because Python 2 is being retired from nixpkgs.
124443
444+- Services in the `hadoop` module previously set `openFirewall` to true by default.
445+ This has now been changed to false. Node definitions for multi-node clusters would need
446+ `openFirewall = true;` to be added to to hadoop services when upgrading from NixOS 21.11.
447+
448+- `services.hadoop.yarn.nodemanager` now uses cgroup-based CPU limit enforcement by default.
449+ Additionally, the option `useCGroups` was added to nodemanagers as an easy way to switch
450+ back to the old behavior.
451+
125452- The `wafHook` hook now honors `NIX_BUILD_CORES` when `enableParallelBuilding` is not set explicitly. Packages can restore the old behaviour by setting `enableParallelBuilding=false`.
126453
127454- `pkgs.claws-mail-gtk2`, representing Claws Mail's older release version three, was removed in order to get rid of Python 2.
@@ -134,6 +461,10 @@ In addition to numerous new and upgraded packages, this release has the followin
134461
135462- The `gnome-passwordsafe` package updated to [version 6.x](https://gitlab.gnome.org/World/secrets/-/tags/6.0) and renamed to `gnome-secrets`.
136463
464+- `services.gnome.experimental-features.realtime-scheduling` option has been removed, as GNOME Shell now [uses rtkit](https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2060). Use `security.rtkit.enable = true;` instead. As before, you will need to have it enabled using GSettings.
465+
466+- `services.telepathy` will no longer be enabled by default for GNOME desktops, one should enable it in their configs if using Empathy or Polari.
467+
137468- If you previously used `/etc/docker/daemon.json`, you need to incorporate the changes into the new option `virtualisation.docker.daemon.settings`.
138469
139470- Ntopng (`services.ntopng`) is updated to 5.2.1 and uses a separate Redis instance if `system.stateVersion` is at least `22.05`. Existing setups shouldn't be affected.
@@ -147,6 +478,12 @@ In addition to numerous new and upgraded packages, this release has the followin
147478
148479- opensmtpd-extras is no longer build with python2 scripting support due to python2 deprecation in nixpkgs
149480
481+- `services.miniflux.adminCredentialFiles` is now required, instead of defaulting to `admin` and `password`.
482+
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+
150487- 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.
151488
152489- For `pkgs.python3.pkgs.ipython`, its direct dependency `pkgs.python3.pkgs.matplotlib-inline`
@@ -172,18 +509,53 @@ In addition to numerous new and upgraded packages, this release has the followin
172509
173510- `pkgs.docbookrx` was removed since it's unmaintained
174511
512+- `pkgs._7zz` is now correctly licensed as LGPL3+ and BSD3 with optional unfree unRAR licensed code
513+
514+- The `vim.customize` function produced by `vimUtils.makeCustomizable` now has a slightly different interface:
515+ * The wrapper now includes everything in the given Vim derivation if `name` is `"vim"` (the default). This makes the `wrapManual` argument obsolete, but this behavior can be overriden by setting the `standalone` argument.
516+ * All the executables present in the given derivation (or, in `standalone` mode, only the `*vim` ones) are wrapped. This makes the `wrapGui` argument obsolete.
517+ * The `vimExecutableName` and `gvimExecutableName` arguments were replaced by a single `executableName` argument in which the shell variable `$exe` can be used to refer to the wrapped executable's name.
518+
519+ See the comments in `pkgs/applications/editors/vim/plugins/vim-utils.nix` for more details.
520+
521+ `vimUtils.vimWithRC` was removed. You should instead use `customize` on a Vim derivation, which now accepts `vimrcFile` and `gvimrcFile` arguments.
522+
175523- `tilp2` was removed together with its module
176524
525+- The F-PROT antivirus (`fprot` package) and its service module were removed because it
526+ reached [end-of-life](https://kb.cyren.com/av-support/index.php?/Knowledgebase/Article/View/434/0/end-of-sale--end-of-life-for-f-prot-and-csam).
527+
528+- `bird1` and its modules `services.bird` as well as `services.bird6` have been removed. Upgrade to `services.bird2`.
529+
177530- The options `networking.interfaces.<name>.ipv4.routes` and `networking.interfaces.<name>.ipv6.routes` are no longer ignored when using networkd instead of the default scripted network backend by setting `networking.useNetworkd` to `true`.
178531
532+- The `miller` package has been upgraded from 5.10.3 to [6.2.0](https://github.com/johnkerl/miller/releases/tag/v6.2.0). See [What's new in Miller 6](https://miller.readthedocs.io/en/latest/new-in-miller-6).
533+
179534- MultiMC has been replaced with the fork PolyMC due to upstream developers being hostile to 3rd party package maintainers. PolyMC removes all MultiMC branding and is aimed at providing proper 3rd party packages like the one contained in Nixpkgs. This change affects the data folder where game instances and other save and configuration files are stored. Users with existing installations should rename `~/.local/share/multimc` to `~/.local/share/polymc`. The main config file's path has also moved from `~/.local/share/multimc/multimc.cfg` to `~/.local/share/polymc/polymc.cfg`.
180535
536+- `systemd-nspawn@.service` settings have been reverted to the default systemd behaviour. User namespaces are now activated by default. If you want to keep running nspawn containers without user namespaces you need to set `systemd.nspawn.<name>.execConfig.PrivateUsers = false`
537+
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+
540+- The Tor SOCKS proxy is now actually disabled if `services.tor.client.enable` is set to `false` (the default). If you are using this functionality but didn't change the setting or set it to `false`, you now need to set it to `true`.
541+
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.
181545
182546- 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
183547`$out/libexec/terraform-providers/<registry>/<owner>/<name>/<version>/<os>_<arch>/terraform-provider-<name>_v<version>` (which mkProvider does).
184548
185549 This breaks back-compat so it's not possible to mix-and-match with previous versions of nixpkgs. In exchange, it now becomes possible to use the providers from [nixpkgs-terraform-providers-bin](https://github.com/numtide/nixpkgs-terraform-providers-bin) directly.
186550
551+- The `dendrite` package has been upgraded from 0.5.1 to
552+ [0.6.5](https://github.com/matrix-org/dendrite/releases/tag/v0.6.5). Instances
553+ configured with split sqlite databases, which has been the default
554+ in NixOS, require merging of the federation sender and signing key
555+ databases. See upstream [release
556+ notes](https://github.com/matrix-org/dendrite/releases/tag/v0.6.0)
557+ on version 0.6.0 for details on database changes.
558+
187559- The existing `pkgs.opentelemetry-collector` has been moved to
188560 `pkgs.opentelemetry-collector-contrib` to match the actual source being the
189561 "contrib" edition. `pkgs.opentelemetry-collector` is now the actual core
@@ -191,6 +563,11 @@ In addition to numerous new and upgraded packages, this release has the followin
191563 you should change the package you refer to. If you don't need them update your
192564 commands from `otelcontribcol` to `otelcorecol` and enjoy a 7x smaller binary.
193565
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+
570+- `pkgs.pgadmin` now refers to `pkgs.pgadmin4`. `pgadmin3` has been removed.
194571
195572- `pkgs.noto-fonts-cjk` is now deprecated in favor of `pkgs.noto-fonts-cjk-sans`
196573 and `pkgs.noto-fonts-cjk-serif` because they each have different release
@@ -198,6 +575,30 @@ In addition to numerous new and upgraded packages, this release has the followin
198575 `pkgs.noto-fonts-cjk` is currently an alias of `pkgs.noto-fonts-cjk-sans` and
199576 doesn't include serif fonts.
200577
578+- `pkgs.epgstation` has been upgraded from v1 to v2, resulting in incompatible
579+ changes in the database scheme and configuration format.
580+
581+- Some top-level settings under [services.epgstation](#opt-services.epgstation.enable)
582+ is now deprecated because it was redudant due to the same options being
583+ present in [services.epgstation.settings](#opt-services.epgstation.settings).
584+
585+- The option `services.epgstation.basicAuth` was removed because basic
586+ authentication support was dropped by upstream.
587+
588+- The option [services.epgstation.database.passwordFile](#opt-services.epgstation.database.passwordFile)
589+ no longer has a default value. Make sure to set this option explicitly before
590+ upgrading. Change the database password if necessary.
591+
592+- The [services.epgstation.settings](#opt-services.epgstation.settings)
593+ option now expects options for `config.yml` in EPGStation v2.
594+
595+- Existing data for the [services.epgstation](#opt-services.epgstation.enable)
596+ module would have to be backed up prior to the upgrade. To back up exising
597+ data to `/tmp/epgstation.bak`, run
598+ `sudo -u epgstation epgstation run backup /tmp/epgstation.bak`.
599+ To import that data after to the upgrade, run
600+ `sudo -u epgstation epgstation run v1migrate /tmp/epgstation.bak`
601+
201602- `switch-to-configuration` (the script that is run when running `nixos-rebuild switch` for example) has been reworked
202603 * The interface that allows activation scripts to restart units has been streamlined. Restarting and reloading is now done by a single file `/run/nixos/activation-restart-list` that honors `restartIfChanged` and `reloadIfChanged` of the units.
203604 * Preferring to reload instead of restarting can still be achieved using `/run/nixos/activation-reload-list`.
@@ -220,6 +621,31 @@ In addition to numerous new and upgraded packages, this release has the followin
220621- `pkgs.vimPlugins.onedark-nvim` now refers to [navarasu/onedark.nvim](https://github.com/navarasu/onedark.nvim)
221622 (formerly refers to [olimorris/onedarkpro.nvim](https://github.com/olimorris/onedarkpro.nvim)).
222623
624+- `services.pipewire.enable` will default to enabling the WirePlumber session manager instead of pipewire-media-session.
625+ pipewire-media-session is deprecated by upstream and not recommended, but can still be manually enabled by setting
626+ `services.pipewire.media-session.enable` to `true` and `services.pipewire.wireplumber.enable` to `false`.
627+
628+- `pkgs.makeDesktopItem` has been refactored to provide a more idiomatic API. Specifically:
629+ - All valid options as of FDO Desktop Entry specification version 1.4 can now be passed in as explicit arguments
630+ - `exec` can now be null, for entries that are not of type Application
631+ - `mimeType` argument is renamed to `mimeTypes` for consistency
632+ - `mimeTypes`, `categories`, `implements`, `keywords`, `onlyShowIn` and `notShowIn` take lists of strings instead of one string with semicolon separators
633+ - `extraDesktopEntries` renamed to `extraConfig` for consistency
634+ - Actions should now be provided as an attrset `actions`, the `Actions` line will be autogenerated.
635+ - `extraEntries` is removed.
636+ - Additional validation is added both at eval time and at build time.
637+
638+ See the `vscode` package for a more detailed example.
639+
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+
645+- `pkgs.cosmopolitan` no longer provides the `cosmoc` command. It has been moved to `pkgs.cosmoc`.
646+
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+
223649<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
224650
225651## Other Notable Changes {#sec-release-22.05-notable-changes}
@@ -251,11 +677,20 @@ In addition to numerous new and upgraded packages, this release has the followin
251677 Similarly [virtualisation.vmVariantWithBootloader](#opt-virtualisation.vmVariantWithBootLoader) was added.
252678
253679- The configuration portion of the `nix-daemon` module has been reworked and exposed as [nix.settings](options.html#opt-nix-settings):
254− * Legacy options have been mapped to the corresponding options under under [nix.settings](options.html#opt-nix.settings) but may be deprecated in the future.
680+ * Legacy options have been mapped to the corresponding options under under [nix.settings](options.html#opt-nix.settings) and will be deprecated when NixOS 21.11 reaches end of life.
255681 * [nix.buildMachines.publicHostKey](options.html#opt-nix.buildMachines.publicHostKey) has been added.
256682
257683- The `writers.writePyPy2`/`writers.writePyPy3` and corresponding `writers.writePyPy2Bin`/`writers.writePyPy3Bin` convenience functions to create executable Python 2/3 scripts using the PyPy interpreter were added.
258684
685+- Some improvements have been made to the `hadoop` module:
686+ - A `gatewayRole` option has been added, for deploying hadoop cluster configuration files to a node that does not have any active services
687+ - Support for older versions of hadoop have been added to the module
688+ - Overriding and extending site XML files has been made easier
689+
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+
259694- If you are using Wayland you can choose to use the Ozone Wayland support
260695 in Chrome and several Electron apps by setting the environment variable
261696 `NIXOS_OZONE_WL=1` (for example via
@@ -264,14 +699,29 @@ In addition to numerous new and upgraded packages, this release has the followin
264699 still under heavy development and behavior is not always flawless.
265700 Furthermore, not all Electron apps use the latest Electron versions.
266701
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+
267707- The `influxdb2` package was split into `influxdb2-server` and
268708 `influxdb2-cli`, matching the split that took place upstream. A
269709 combined `influxdb2` package is still provided in this release for
270710 backwards compatibilty, but will be removed at a later date.
271711
712+- The `unifi` package was switched from `unifi6` to `unifi7`.
713+ Direct downgrades from Unifi 7 to Unifi 6 are not possible and require restoring from a backup made by Unifi 6.
714+
715+- `programs.zsh.autosuggestions.strategy` now takes a list of strings instead of a string.
716+
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+
272719- The `services.unifi.openPorts` option default value of `true` is now deprecated and will be changed to `false` in 22.11.
273720 Configurations using this default will print a warning when rebuilt.
274721
722+- The `services.unifi-video.openPorts` option default value of `true` is now deprecated and will be changed to `false` in 22.11.
723+ Configurations using this default will print a warning when rebuilt.
724+
275725- `security.acme` certificates will now correctly check for CA
276726 revokation before reaching their minimum age.
277727
@@ -290,24 +740,65 @@ In addition to numerous new and upgraded packages, this release has the followin
290740 e.g. Wayland.
291741
292742- [programs.ssh.knownHosts](#opt-programs.ssh.knownHosts) has gained an `extraHostNames`
293− 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.
294746
295747- The `services.stubby` module was converted to a [settings-style](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md) configuration.
296748
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+
297762- The option `services.duplicati.dataDir` has been added to allow changing the location of duplicati's files.
298763
299−- A new option `boot.initrd.extraModprobeConfig` has been added which can be used to configure kernel modules that are loaded in the initrd.
764+- The options `boot.extraModprobeConfig` and `boot.blacklistedKernelModules` now also take effect in the initrd by copying the file `/etc/modprobe.d/nixos.conf` into the initrd.
300765
301766- `nixos-generate-config` now puts the dhcp configuration in `hardware-configuration.nix` instead of `configuration.nix`.
302767
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.
774+ - If you are relying on the SQLite images, update your Docker Pull commands as follows:
775+ - `docker pull oryd/kratos:{version}`
776+ - Additionally, all passwords now have to be at least 8 characters long.
777+ - For more details, see:
778+ - [Release Notes for v0.8.1-alpha-1](https://github.com/ory/kratos/releases/tag/v0.8.1-alpha.1)
779+ - [Release Notes for v0.8.2-alpha-1](https://github.com/ory/kratos/releases/tag/v0.8.2-alpha.1)
780+ - [Release Notes for v0.9.0-alpha-1](https://github.com/ory/kratos/releases/tag/v0.9.0-alpha.1)
781+ - [Release Notes for v0.9.0-alpha-3](https://github.com/ory/kratos/releases/tag/v0.9.0-alpha.3)
782+
783+
303784- `fetchFromSourcehut` now allows fetching repositories recursively
304785 using `fetchgit` or `fetchhg` if the argument `fetchSubmodules`
305786 is set to `true`.
306787
788+- A module for declarative configuration of openconnect VPN profiles was added under `networking.openconnect`.
789+
790+- The `element-desktop` package now has an `useKeytar` option (defaults to `true`),
791+ which allows disabling `keytar` and in turn `libsecret` usage
792+ (which binds to native credential managers / keychain libraries).
793+
307794- The option `services.thelounge.plugins` has been added to allow installing plugins for The Lounge. Plugins can be found in `pkgs.theLoungePlugins.plugins` and `pkgs.theLoungePlugins.themes`.
308795
796+- The option `services.xserver.videoDriver = [ "nvidia" ];` will now also install [nvidia VA-API drivers](https://github.com/elFarto/nvidia-vaapi-driver) by default.
797+
309798- The `firmwareLinuxNonfree` package has been renamed to `linux-firmware`.
310799
800+- It is now possible to specify wordlists to include as handy to access environment variables using the `config.environment.wordlist` configuration options.
801+
311802- The `services.mbpfan` module was converted to a [RFC 0042](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md) configuration.
312803
313804- The default value for `programs.spacefm.settings.graphical_su` got unset. It previously pointed to `gksu` which has been removed.
@@ -320,21 +811,68 @@ In addition to numerous new and upgraded packages, this release has the followin
320811- `services.mattermost.plugins` has been added to allow the declarative installation of Mattermost plugins.
321812 Plugins are automatically repackaged using autoPatchelf.
322813
814+- [services.logrotate.enable](#opt-services.logrotate.enable) now defaults to true if any rotate path has
815+ 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.
823+
323824- The `zrepl` package has been updated from 0.4.0 to 0.5:
324825
325826 - The RPC protocol version was bumped; all zrepl daemons in a setup must be updated and restarted before replication can resume.
326827 - 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.
327828
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+
328832- Renamed option `services.openssh.challengeResponseAuthentication` to `services.openssh.kbdInteractiveAuthentication`.
329833 Reason is that the old name has been deprecated upstream.
330834 Using the old option name will still work, but produce a warning.
331835
836+- `services.autorandr` now allows for adding hooks and profiles declaratively.
837+
838+- The `pomerium-cli` command has been moved out of the `pomerium` package into
839+ the `pomerium-cli` package, following upstream's repository split. If you are
840+ using the `pomerium-cli` command, you should now install the `pomerium-cli`
841+ package.
842+
332843- The option
333− [services.networking.networkmanager.enableFccUnlock](#opt-services.networking.networkmanager.enableFccUnlock)
844+ [services.networking.networkmanager.enableFccUnlock](#opt-networking.networkmanager.enableFccUnlock)
334845 was added to support FCC unlock procedures. Since release 1.18.4, the ModemManager
335846 daemon no longer automatically performs the FCC unlock procedure by default. See
336847 [the docs](https://modemmanager.org/docs/modemmanager/fcc-unlock/) for more details.
337848
338849- `programs.tmux` has a new option `plugins` that accepts a list of packages from the `tmuxPlugins` group. The specified packages are added to the system and loaded by `tmux`.
339850
851+- The polkit service, available at `security.polkit.enable`, is now disabled by default. It will automatically be enabled through services and desktop environments as needed.
852+
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+
858+- The `hadoop` package has added support for `aarch64-linux` and `aarch64-darwin` as of 3.3.1 ([#158613](https://github.com/NixOS/nixpkgs/pull/158613)).
859+
860+- The `R` package now builds again on `aarch64-darwin` ([#158992](https://github.com/NixOS/nixpkgs/pull/158992)).
861+
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+
867+- The `spark3` package has been updated from 3.1.2 to 3.2.1 ([#160075](https://github.com/NixOS/nixpkgs/pull/160075)):
868+
869+ - Testing has been enabled for `aarch64-linux` in addition to `x86_64-linux`.
870+ - The `spark3` package is now usable on `aarch64-darwin` as a result of [#158613](https://github.com/NixOS/nixpkgs/pull/158613) and [#158992](https://github.com/NixOS/nixpkgs/pull/158992).
871+
872+- The `programs.nncp` options were added for generating host-global NNCP configuration.
873+
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+
340878<!-- 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+11−2
@@ -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():
@@ -66,14 +68,21 @@ for (k, v) in overrides.items():
6668 elif ov is not None or cur.get(ok, None) is None:
6769 cur[ok] = ov
6870
71+severity = "error" if warningsAreErrors else "warning"
72+
6973# check that every option has a description
7074hasWarnings = False
7175for (k, v) in options.items():
7276 if v.value.get('description', None) is None:
73− severity = "error" if warningsAreErrors else "warning"
7477 hasWarnings = True
7578 print(f"\x1b[1;31m{severity}: option {v.name} has no description\x1b[0m", file=sys.stderr)
7679 v.value['description'] = "This option has no description."
80+ if v.value.get('type', "unspecified") == "unspecified":
81+ hasWarnings = True
82+ print(
83+ f"\x1b[1;31m{severity}: option {v.name} has no type. Please specify a valid type, see " +
84+ "https://nixos.org/manual/nixos/stable/index.html#sec-option-types\x1b[0m", file=sys.stderr)
85+
7786if hasWarnings and warningsAreErrors:
7887 print(
7988 "\x1b[1;31m" +
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+200−12
@@ -5,6 +5,7 @@ with lib;
55let
66 cfg = config.systemd;
77 lndir = "${pkgs.buildPackages.xorg.lndir}/bin/lndir";
8+ systemd = cfg.package;
89in rec {
910
1011 shellEscape = s: (replaceChars [ "\\" ] [ "\\\\" ] s);
@@ -22,8 +23,9 @@ in rec {
2223 inherit (unit) text;
2324 }
2425 ''
25− mkdir -p $out
26− echo -n "$text" > $out/${shellEscape name}
26+ name=${shellEscape name}
27+ mkdir -p "$out/$(dirname "$name")"
28+ echo -n "$text" > "$out/$name"
2729 ''
2830 else
2931 pkgs.runCommand "unit-${mkPathSafeName name}-disabled"
@@ -31,8 +33,9 @@ in rec {
3133 allowSubstitutes = false;
3234 }
3335 ''
34− mkdir -p $out
35− ln -s /dev/null $out/${shellEscape name}
36+ name=${shellEscape name}
37+ mkdir -p "$out/$(dirname "$name")"
38+ ln -s /dev/null "$out/$name"
3639 '';
3740
3841 boolValues = [true false "yes" "no"];
@@ -119,10 +122,15 @@ in rec {
119122 (if isList value then value else [value]))
120123 as));
121124
122− generateUnits = generateUnits' true;
123−
124− generateUnits' = allowCollisions: type: units: upstreamUnits: upstreamWants:
125− 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"
126134 { preferLocalBuild = true;
127135 allowSubstitutes = false;
128136 } ''
@@ -130,7 +138,7 @@ in rec {
130138
131139 # Copy the upstream systemd units we're interested in.
132140 for i in ${toString upstreamUnits}; do
133− fn=${cfg.package}/example/systemd/${type}/$i
141+ fn=${package}/example/systemd/${typeDir}/$i
134142 if ! [ -e $fn ]; then echo "missing $fn"; false; fi
135143 if [ -L $fn ]; then
136144 target="$(readlink "$fn")"
@@ -147,7 +155,7 @@ in rec {
147155 # Copy .wants links, but only those that point to units that
148156 # we're interested in.
149157 for i in ${toString upstreamWants}; do
150− fn=${cfg.package}/example/systemd/${type}/$i
158+ fn=${package}/example/systemd/${typeDir}/$i
151159 if ! [ -e $fn ]; then echo "missing $fn"; false; fi
152160 x=$out/$(basename $fn)
153161 mkdir $x
@@ -159,14 +167,14 @@ in rec {
159167 done
160168
161169 # Symlink all units provided listed in systemd.packages.
162− packages="${toString cfg.packages}"
170+ packages="${toString packages}"
163171
164172 # Filter duplicate directories
165173 declare -A unique_packages
166174 for k in $packages ; do unique_packages[$k]=1 ; done
167175
168176 for i in ''${!unique_packages[@]}; do
169− 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
170178 if ! [[ "$fn" =~ .wants$ ]]; then
171179 if [[ -d "$fn" ]]; then
172180 targetDir="$out/$(basename "$fn")"
@@ -235,4 +243,184 @@ in rec {
235243 ''}
236244 ''; # */
237245
246+ makeJobScript = name: text:
247+ let
248+ scriptName = replaceChars [ "\\" "@" ] [ "-" "_" ] (shellEscape name);
249+ out = (pkgs.writeShellScriptBin scriptName ''
250+ set -e
251+ ${text}
252+ '').overrideAttrs (_: {
253+ # The derivation name is different from the script file name
254+ # to keep the script file name short to avoid cluttering logs.
255+ name = "unit-script-${scriptName}";
256+ });
257+ in "${out}/bin/${scriptName}";
258+
259+ unitConfig = { config, options, ... }: {
260+ config = {
261+ unitConfig =
262+ optionalAttrs (config.requires != [])
263+ { Requires = toString config.requires; }
264+ // optionalAttrs (config.wants != [])
265+ { Wants = toString config.wants; }
266+ // optionalAttrs (config.after != [])
267+ { After = toString config.after; }
268+ // optionalAttrs (config.before != [])
269+ { Before = toString config.before; }
270+ // optionalAttrs (config.bindsTo != [])
271+ { BindsTo = toString config.bindsTo; }
272+ // optionalAttrs (config.partOf != [])
273+ { PartOf = toString config.partOf; }
274+ // optionalAttrs (config.conflicts != [])
275+ { Conflicts = toString config.conflicts; }
276+ // optionalAttrs (config.requisite != [])
277+ { Requisite = toString config.requisite; }
278+ // optionalAttrs (config ? restartTriggers && config.restartTriggers != [])
279+ { X-Restart-Triggers = toString config.restartTriggers; }
280+ // optionalAttrs (config ? reloadTriggers && config.reloadTriggers != [])
281+ { X-Reload-Triggers = toString config.reloadTriggers; }
282+ // optionalAttrs (config.description != "") {
283+ Description = config.description; }
284+ // optionalAttrs (config.documentation != []) {
285+ Documentation = toString config.documentation; }
286+ // optionalAttrs (config.onFailure != []) {
287+ OnFailure = toString config.onFailure; }
288+ // optionalAttrs (options.startLimitIntervalSec.isDefined) {
289+ StartLimitIntervalSec = toString config.startLimitIntervalSec;
290+ } // optionalAttrs (options.startLimitBurst.isDefined) {
291+ StartLimitBurst = toString config.startLimitBurst;
292+ };
293+ };
294+ };
295+
296+ serviceConfig = { config, ... }: {
297+ config.environment.PATH = mkIf (config.path != []) "${makeBinPath config.path}:${makeSearchPathOutput "bin" "sbin" config.path}";
298+ };
299+
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+
314+ mountConfig = { config, ... }: {
315+ config = {
316+ mountConfig =
317+ { What = config.what;
318+ Where = config.where;
319+ } // optionalAttrs (config.type != "") {
320+ Type = config.type;
321+ } // optionalAttrs (config.options != "") {
322+ Options = config.options;
323+ };
324+ };
325+ };
326+
327+ automountConfig = { config, ... }: {
328+ config = {
329+ automountConfig =
330+ { Where = config.where;
331+ };
332+ };
333+ };
334+
335+ commonUnitText = def: ''
336+ [Unit]
337+ ${attrsToSection def.unitConfig}
338+ '';
339+
340+ targetToUnit = name: def:
341+ { inherit (def) aliases wantedBy requiredBy enable;
342+ text =
343+ ''
344+ [Unit]
345+ ${attrsToSection def.unitConfig}
346+ '';
347+ };
348+
349+ serviceToUnit = name: def:
350+ { inherit (def) aliases wantedBy requiredBy enable;
351+ text = commonUnitText def +
352+ ''
353+ [Service]
354+ ${let env = cfg.globalEnvironment // def.environment;
355+ in concatMapStrings (n:
356+ let s = optionalString (env.${n} != null)
357+ "Environment=${builtins.toJSON "${n}=${env.${n}}"}\n";
358+ # systemd max line length is now 1MiB
359+ # https://github.com/systemd/systemd/commit/e6dde451a51dc5aaa7f4d98d39b8fe735f73d2af
360+ in if stringLength s >= 1048576 then throw "The value of the environment variable ‘${n}’ in systemd service ‘${name}.service’ is too long." else s) (attrNames env)}
361+ ${if def ? reloadIfChanged && def.reloadIfChanged then ''
362+ X-ReloadIfChanged=true
363+ '' else if (def ? restartIfChanged && !def.restartIfChanged) then ''
364+ X-RestartIfChanged=false
365+ '' else ""}
366+ ${optionalString (def ? stopIfChanged && !def.stopIfChanged) "X-StopIfChanged=false"}
367+ ${attrsToSection def.serviceConfig}
368+ '';
369+ };
370+
371+ socketToUnit = name: def:
372+ { inherit (def) aliases wantedBy requiredBy enable;
373+ text = commonUnitText def +
374+ ''
375+ [Socket]
376+ ${attrsToSection def.socketConfig}
377+ ${concatStringsSep "\n" (map (s: "ListenStream=${s}") def.listenStreams)}
378+ ${concatStringsSep "\n" (map (s: "ListenDatagram=${s}") def.listenDatagrams)}
379+ '';
380+ };
381+
382+ timerToUnit = name: def:
383+ { inherit (def) aliases wantedBy requiredBy enable;
384+ text = commonUnitText def +
385+ ''
386+ [Timer]
387+ ${attrsToSection def.timerConfig}
388+ '';
389+ };
390+
391+ pathToUnit = name: def:
392+ { inherit (def) aliases wantedBy requiredBy enable;
393+ text = commonUnitText def +
394+ ''
395+ [Path]
396+ ${attrsToSection def.pathConfig}
397+ '';
398+ };
399+
400+ mountToUnit = name: def:
401+ { inherit (def) aliases wantedBy requiredBy enable;
402+ text = commonUnitText def +
403+ ''
404+ [Mount]
405+ ${attrsToSection def.mountConfig}
406+ '';
407+ };
408+
409+ automountToUnit = name: def:
410+ { inherit (def) aliases wantedBy requiredBy enable;
411+ text = commonUnitText def +
412+ ''
413+ [Automount]
414+ ${attrsToSection def.automountConfig}
415+ '';
416+ };
417+
418+ sliceToUnit = name: def:
419+ { inherit (def) aliases wantedBy requiredBy enable;
420+ text = commonUnitText def +
421+ ''
422+ [Slice]
423+ ${attrsToSection def.sliceConfig}
424+ '';
425+ };
238426}
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+2−1
@@ -55,6 +55,7 @@ class Driver:
5555 tmp_dir = get_tmp_dir()
5656
5757 with rootlog.nested("start all VLans"):
58+ vlans = list(set(vlans))
5859 self.vlans = [VLan(nr, tmp_dir) for nr in vlans]
5960
6061 def cmd(scripts: List[str]) -> Iterator[NixStartScript]:
@@ -85,7 +86,7 @@ class Driver:
8586
8687 def subtest(self, name: str) -> Iterator[None]:
8788 """Group logs under a given test name"""
88− with rootlog.nested(name):
89+ with rootlog.nested("subtest: " + name):
8990 try:
9091 yield
9192 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+38−3
@@ -198,7 +198,7 @@ class StartCommand:
198198 ) -> subprocess.Popen:
199199 return subprocess.Popen(
200200 self.cmd(monitor_socket_path, shell_socket_path),
201− stdin=subprocess.DEVNULL,
201+ stdin=subprocess.PIPE,
202202 stdout=subprocess.PIPE,
203203 stderr=subprocess.STDOUT,
204204 shell=True,
@@ -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
@@ -558,6 +565,28 @@ class Machine:
558565 pass_fds=[self.shell.fileno()],
559566 )
560567
568+ def console_interact(self) -> None:
569+ """Allows you to interact with QEMU's stdin
570+
571+ The shell can be exited with Ctrl+D. Note that Ctrl+C is not allowed to be used.
572+ QEMU's stdout is read line-wise.
573+
574+ Should only be used during test development, not in the production test."""
575+ self.log("Terminal is ready (there is no prompt):")
576+
577+ assert self.process
578+ assert self.process.stdin
579+
580+ while True:
581+ try:
582+ char = sys.stdin.buffer.read(1)
583+ except KeyboardInterrupt:
584+ break
585+ if char == b"": # ctrl+d
586+ self.log("Closing connection to the console")
587+ break
588+ self.send_console(char.decode())
589+
561590 def succeed(self, *commands: str, timeout: Optional[int] = None) -> str:
562591 """Execute each command and check that it succeeds."""
563592 output = ""
@@ -834,6 +863,12 @@ class Machine:
834863 self.send_monitor_command("sendkey {}".format(key))
835864 time.sleep(0.01)
836865
866+ def send_console(self, chars: str) -> None:
867+ assert self.process
868+ assert self.process.stdin
869+ self.process.stdin.write(chars.encode())
870+ self.process.stdin.flush()
871+
837872 def start(self) -> None:
838873 if self.booted:
839874 return
nixos/lib/testing-python.nix+15−16
@@ -146,26 +146,28 @@ rec {
146146
147147 # Make a full-blown test
148148 makeTest =
149− { testScript
149+ { machine ? null
150+ , nodes ? {}
151+ , testScript
150152 , enableOCR ? false
151153 , name ? "unnamed"
152154 # Skip linting (mainly intended for faster dev cycles)
153155 , skipLint ? false
154156 , passthru ? {}
157+ , meta ? {}
155158 , # For meta.position
156159 pos ? # position used in error messages and for meta.position
157− (if t.meta.description or null != null
158− then builtins.unsafeGetAttrPos "description" t.meta
160+ (if meta.description or null != null
161+ then builtins.unsafeGetAttrPos "description" meta
159162 else builtins.unsafeGetAttrPos "testScript" t)
160− , ...
161163 } @ t:
162164 let
163− nodes = qemu_pkg:
165+ mkNodes = qemu_pkg:
164166 let
165167 testScript' =
166168 # Call the test script with the computed nodes.
167169 if lib.isFunction testScript
168− then testScript { nodes = nodes qemu_pkg; }
170+ then testScript { nodes = mkNodes qemu_pkg; }
169171 else testScript;
170172
171173 build-vms = import ./build-vms.nix {
@@ -204,34 +206,31 @@ rec {
204206 )];
205207 };
206208 in
209+ lib.warnIf (t?machine) "In test `${name}': The `machine' attribute in NixOS tests (pkgs.nixosTest / make-test-pyton.nix / testing-python.nix / makeTest) is deprecated. Please use the equivalent `nodes.machine'."
207210 build-vms.buildVirtualNetwork (
208− t.nodes or (if t ? machine then { machine = t.machine; } else { })
211+ nodes // lib.optionalAttrs (machine != null) { inherit machine; }
209212 );
210213
211214 driver = setupDriverForTest {
212215 inherit testScript enableOCR skipLint passthru;
213216 testName = name;
214217 qemu_pkg = pkgs.qemu_test;
215− nodes = nodes pkgs.qemu_test;
218+ nodes = mkNodes pkgs.qemu_test;
216219 };
217220 driverInteractive = setupDriverForTest {
218221 inherit testScript enableOCR skipLint passthru;
219222 testName = name;
220223 qemu_pkg = pkgs.qemu;
221− nodes = nodes pkgs.qemu;
224+ nodes = mkNodes pkgs.qemu;
222225 interactive = true;
223226 };
224227
225− test =
226− let
227− passMeta = drv: drv // lib.optionalAttrs (t ? meta) {
228− meta = (drv.meta or { }) // t.meta;
229− };
230− in passMeta (runTests { inherit driver pos driverInteractive; });
228+ test = lib.addMetaAttrs meta (runTests { inherit driver pos driverInteractive; });
231229
232230 in
233231 test // {
234− inherit test driver driverInteractive nodes;
232+ inherit test driver driverInteractive;
233+ inherit (driver) nodes;
235234 };
236235
237236 abortForFunction = functionName: abort ''The ${functionName} function was
nixos/lib/utils.nix+40−2
@@ -45,6 +45,26 @@ rec {
4545 replaceChars ["/" "-" " "] ["-" "\\x2d" "\\x20"]
4646 (removePrefix "/" s);
4747
48+ # Quotes an argument for use in Exec* service lines.
49+ # systemd accepts "-quoted strings with escape sequences, toJSON produces
50+ # a subset of these.
51+ # Additionally we escape % to disallow expansion of % specifiers. Any lone ;
52+ # in the input will be turned it ";" and thus lose its special meaning.
53+ # Every $ is escaped to $$, this makes it unnecessary to disable environment
54+ # substitution for the directive.
55+ escapeSystemdExecArg = arg:
56+ let
57+ s = if builtins.isPath arg then "${arg}"
58+ else if builtins.isString arg then arg
59+ else if builtins.isInt arg || builtins.isFloat arg then toString arg
60+ else throw "escapeSystemdExecArg only allows strings, paths and numbers";
61+ in
62+ replaceChars [ "%" "$" ] [ "%%" "$$" ] (builtins.toJSON s);
63+
64+ # Quotes a list of arguments into a single string for use in a Exec*
65+ # line.
66+ escapeSystemdExecArgs = concatMapStringsSep " " escapeSystemdExecArg;
67+
4868 # Returns a system path for a given shell package
4969 toShellPath = shell:
5070 if types.shellPackage.check shell then
@@ -150,7 +170,8 @@ rec {
150170 rm '${output}'
151171 fi
152172
153− inherit_errexit_restore=$(shopt -p inherit_errexit)
173+ inherit_errexit_enabled=0
174+ shopt -pq inherit_errexit && inherit_errexit_enabled=1
154175 shopt -s inherit_errexit
155176 ''
156177 + concatStringsSep
@@ -170,11 +191,28 @@ rec {
170191 ' <<'EOF'
171192 ${builtins.toJSON set}
172193 EOF
173− $inherit_errexit_restore
194+ (( ! $inherit_errexit_enabled )) && shopt -u inherit_errexit
174195 '';
175196
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+
176213 systemdUtils = {
177214 lib = import ./systemd-lib.nix { inherit lib config pkgs; };
178215 unitOptions = import ./systemd-unit-options.nix { inherit lib systemdUtils; };
216+ types = import ./systemd-types.nix { inherit lib systemdUtils pkgs; };
179217 };
180218}
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/fonts/fonts.nix−5
@@ -39,11 +39,6 @@ let
3939 defaultXFonts =
4040 [ (if hasHidpi then fontcursormisc_hidpi else pkgs.xorg.fontcursormisc)
4141 pkgs.xorg.fontmiscmisc
42− ] ++ optionals (config.nixpkgs.config.allowUnfree or false)
43− [ # these are unfree, and will make usage with xserver fail
44− pkgs.xorg.fontbhlucidatypewriter100dpi
45− pkgs.xorg.fontbhlucidatypewriter75dpi
46− pkgs.xorg.fontbh100dpi
4742 ];
4843
4944in
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/resolvconf.nix+2−4
@@ -47,8 +47,8 @@ in
4747
4848 enable = mkOption {
4949 type = types.bool;
50− default = false;
51− internal = true;
50+ default = !(config.environment.etc ? "resolv.conf");
51+ defaultText = literalExpression ''!(config.environment.etc ? "resolv.conf")'';
5252 description = ''
5353 DNS configuration is managed by resolvconf.
5454 '';
@@ -110,8 +110,6 @@ in
110110
111111 config = mkMerge [
112112 {
113− networking.resolvconf.enable = !(config.environment.etc ? "resolv.conf");
114−
115113 environment.etc."resolvconf.conf".text =
116114 if !cfg.enable then
117115 # Force-stop any attempts to use resolvconf
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+8−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.
@@ -83,7 +84,11 @@ in {
8384 b43Firmware_5_1_138
8485 b43Firmware_6_30_163_46
8586 b43FirmwareCutter
86− ] ++ optional pkgs.stdenv.hostPlatform.isx86 facetimehd-firmware;
87+ xow_dongle-firmware
88+ ] ++ optionals pkgs.stdenv.hostPlatform.isx86 [
89+ facetimehd-calibration
90+ facetimehd-firmware
91+ ];
8792 })
8893 (mkIf cfg.wirelessRegulatoryDatabase {
8994 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+26−14
@@ -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 = ''
@@ -244,7 +245,7 @@ in
244245 modules = optional (igpuDriver == "amdgpu") [ pkgs.xorg.xf86videoamdgpu ];
245246 deviceSection = ''
246247 BusID "${igpuBusId}"
247− ${optionalString syncCfg.enable ''Option "AccelMethod" "none"''}
248+ ${optionalString (syncCfg.enable && igpuDriver != "amdgpu") ''Option "AccelMethod" "none"''}
248249 '';
249250 } ++ singleton {
250251 name = "nvidia";
@@ -269,9 +270,15 @@ in
269270 Option "AllowNVIDIAGPUScreens"
270271 '';
271272
272− services.xserver.displayManager.setupCommands = optionalString syncCfg.enable ''
273+ services.xserver.displayManager.setupCommands = let
274+ sinkGpuProviderName = if igpuDriver == "amdgpu" then
275+ # find the name of the provider if amdgpu
276+ "`${pkgs.xorg.xrandr}/bin/xrandr --listproviders | ${pkgs.gnugrep}/bin/grep -i AMD | ${pkgs.gnused}/bin/sed -n 's/^.*name://p'`"
277+ else
278+ igpuDriver;
279+ in optionalString syncCfg.enable ''
273280 # Added by nvidia configuration module for Optimus/PRIME.
274− ${pkgs.xorg.xrandr}/bin/xrandr --setprovideroutputsource ${igpuDriver} NVIDIA-0
281+ ${pkgs.xorg.xrandr}/bin/xrandr --setprovideroutputsource "${sinkGpuProviderName}" NVIDIA-0
275282 ${pkgs.xorg.xrandr}/bin/xrandr --auto
276283 '';
277284
@@ -283,10 +290,14 @@ in
283290 environment.etc."egl/egl_external_platform.d".source =
284291 "/run/opengl-driver/share/egl/egl_external_platform.d/";
285292
286− hardware.opengl.package = mkIf (!offloadCfg.enable) nvidia_x11.out;
287− hardware.opengl.package32 = mkIf (!offloadCfg.enable) nvidia_x11.lib32;
288− hardware.opengl.extraPackages = optional offloadCfg.enable nvidia_x11.out;
289− hardware.opengl.extraPackages32 = optional offloadCfg.enable nvidia_x11.lib32;
293+ hardware.opengl.extraPackages = [
294+ nvidia_x11.out
295+ pkgs.nvidia-vaapi-driver
296+ ];
297+ hardware.opengl.extraPackages32 = [
298+ nvidia_x11.lib32
299+ pkgs.pkgsi686Linux.nvidia-vaapi-driver
300+ ];
290301
291302 environment.systemPackages = [ nvidia_x11.bin ]
292303 ++ optionals cfg.nvidiaSettings [ nvidia_x11.settings ]
@@ -350,11 +361,12 @@ in
350361 services.udev.extraRules =
351362 ''
352363 # Create /dev/nvidia-uvm when the nvidia-uvm module is loaded.
353− KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidiactl c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) 255'"
354− KERNEL=="nvidia_modeset", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-modeset c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) 254'"
355− 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}"
356368 KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'"
357− 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'"
358370 '' + optionalString cfg.powerManagement.finegrained ''
359371 # Remove NVIDIA USB xHCI Host Controller devices, if present
360372 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/hardware/xone.nixnew file+23
@@ -0,0 +1,23 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+let
5+ cfg = config.hardware.xone;
6+in
7+{
8+ options.hardware.xone = {
9+ enable = mkEnableOption "the xone driver for Xbox One and Xbobx Series X|S accessories";
10+ };
11+
12+ config = mkIf cfg.enable {
13+ boot = {
14+ blacklistedKernelModules = [ "xpad" "mt76x2u" ];
15+ extraModulePackages = with config.boot.kernelPackages; [ xone ];
16+ };
17+ hardware.firmware = [ pkgs.xow_dongle-firmware ];
18+ };
19+
20+ meta = {
21+ maintainers = with maintainers; [ rhysmdnz ];
22+ };
23+}
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/iso-image.nix+33−22
@@ -91,29 +91,9 @@ let
9191 SERIAL 0 115200
9292 TIMEOUT ${builtins.toString syslinuxTimeout}
9393 UI vesamenu.c32
94− MENU TITLE NixOS
9594 MENU BACKGROUND /isolinux/background.png
96− MENU RESOLUTION 800 600
97− MENU CLEAR
98− MENU ROWS 6
99− MENU CMDLINEROW -4
100− MENU TIMEOUTROW -3
101− MENU TABMSGROW -2
102− MENU HELPMSGROW -1
103− MENU HELPMSGENDROW -1
104− MENU MARGIN 0
105−
106− # FG:AARRGGBB BG:AARRGGBB shadow
107− MENU COLOR BORDER 30;44 #00000000 #00000000 none
108− MENU COLOR SCREEN 37;40 #FF000000 #00E2E8FF none
109− MENU COLOR TABMSG 31;40 #80000000 #00000000 none
110− MENU COLOR TIMEOUT 1;37;40 #FF000000 #00000000 none
111− MENU COLOR TIMEOUT_MSG 37;40 #FF000000 #00000000 none
112− MENU COLOR CMDMARK 1;36;40 #FF000000 #00000000 none
113− MENU COLOR CMDLINE 37;40 #FF000000 #00000000 none
114− MENU COLOR TITLE 1;36;44 #00000000 #00000000 none
115− MENU COLOR UNSEL 37;44 #FF000000 #00000000 none
116− MENU COLOR SEL 7;37;40 #FFFFFFFF #FF5277C3 std
95+
96+ ${config.isoImage.syslinuxTheme}
11797
11898 DEFAULT boot
11999
@@ -601,6 +581,37 @@ in
601581 '';
602582 };
603583
584+ isoImage.syslinuxTheme = mkOption {
585+ default = ''
586+ MENU TITLE NixOS
587+ MENU RESOLUTION 800 600
588+ MENU CLEAR
589+ MENU ROWS 6
590+ MENU CMDLINEROW -4
591+ MENU TIMEOUTROW -3
592+ MENU TABMSGROW -2
593+ MENU HELPMSGROW -1
594+ MENU HELPMSGENDROW -1
595+ MENU MARGIN 0
596+
597+ # FG:AARRGGBB BG:AARRGGBB shadow
598+ MENU COLOR BORDER 30;44 #00000000 #00000000 none
599+ MENU COLOR SCREEN 37;40 #FF000000 #00E2E8FF none
600+ MENU COLOR TABMSG 31;40 #80000000 #00000000 none
601+ MENU COLOR TIMEOUT 1;37;40 #FF000000 #00000000 none
602+ MENU COLOR TIMEOUT_MSG 37;40 #FF000000 #00000000 none
603+ MENU COLOR CMDMARK 1;36;40 #FF000000 #00000000 none
604+ MENU COLOR CMDLINE 37;40 #FF000000 #00000000 none
605+ MENU COLOR TITLE 1;36;44 #00000000 #00000000 none
606+ MENU COLOR UNSEL 37;44 #FF000000 #00000000 none
607+ MENU COLOR SEL 7;37;40 #FFFFFFFF #FF5277C3 std
608+ '';
609+ type = types.str;
610+ description = ''
611+ The syslinux theme used for BIOS boot.
612+ '';
613+ };
614+
604615 isoImage.appendToMenuLabel = mkOption {
605616 default = " Installer";
606617 example = " Live System";
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+15
@@ -24,6 +24,9 @@
2424 [pi3]
2525 kernel=u-boot-rpi3.bin
2626
27+ [pi02]
28+ kernel=u-boot-rpi3.bin
29+
2730 [pi4]
2831 kernel=u-boot-rpi4.bin
2932 enable_gic=1
@@ -33,6 +36,15 @@
3336 # what the pi3 firmware does by default.
3437 disable_overscan=1
3538
39+ # Supported in newer board revisions
40+ arm_boost=1
41+
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+
3648 [all]
3749 # Boot in 64-bit mode.
3850 arm_64bit=1
@@ -59,6 +71,9 @@
5971 cp ${pkgs.ubootRaspberryPi4_64bit}/u-boot.bin firmware/u-boot-rpi4.bin
6072 cp ${pkgs.raspberrypi-armstubs}/armstub8-gic.bin firmware/armstub8-gic.bin
6173 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/
6277 '';
6378 populateRootCommands = ''
6479 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/67amfijcvhqfgz4bwf2izsvbnklwjbvk-nix-2.6.0";
3− i686-linux = "/nix/store/kinl99f619b2xsma4qnzhidbp65axyzm-nix-2.6.0";
4− aarch64-linux = "/nix/store/8zpm63nn7k4n1alp9a0fcilpgc8j014z-nix-2.6.0";
5− x86_64-darwin = "/nix/store/hw5v03wnc0k1pwgiyhblwlxb1fx5zyx8-nix-2.6.0";
6− aarch64-darwin = "/nix/store/669p1vjnzi56fib98qczwlaglcwcnip4-nix-2.6.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/nixos-enter.sh+11−11
@@ -63,32 +63,32 @@ mount --rbind /sys "$mountPoint/sys"
6363
6464# modified from https://github.com/archlinux/arch-install-scripts/blob/bb04ab435a5a89cd5e5ee821783477bc80db797f/arch-chroot.in#L26-L52
6565chroot_add_resolv_conf() {
66− local chrootdir=$1 resolv_conf=$1/etc/resolv.conf
66+ local chrootDir="$1" resolvConf="$1/etc/resolv.conf"
6767
6868 [[ -e /etc/resolv.conf ]] || return 0
6969
7070 # Handle resolv.conf as a symlink to somewhere else.
71− if [[ -L $chrootdir/etc/resolv.conf ]]; then
71+ if [[ -L "$resolvConf" ]]; then
7272 # readlink(1) should always give us *something* since we know at this point
7373 # it's a symlink. For simplicity, ignore the case of nested symlinks.
74− # We also ignore the possibility if `../`s escaping the root.
75− resolv_conf=$(readlink "$chrootdir/etc/resolv.conf")
76− if [[ $resolv_conf = /* ]]; then
77− resolv_conf=$chrootdir$resolv_conf
74+ # We also ignore the possibility of `../`s escaping the root.
75+ resolvConf="$(readlink "$resolvConf")"
76+ if [[ "$resolvConf" = /* ]]; then
77+ resolvConf="$chrootDir$resolvConf"
7878 else
79− resolv_conf=$chrootdir/etc/$resolv_conf
79+ resolvConf="$chrootDir/etc/$resolvConf"
8080 fi
8181 fi
8282
8383 # ensure file exists to bind mount over
84− if [[ ! -f $resolv_conf ]]; then
85− install -Dm644 /dev/null "$resolv_conf" || return 1
84+ if [[ ! -f "$resolvConf" ]]; then
85+ install -Dm644 /dev/null "$resolvConf" || return 1
8686 fi
8787
88− mount --bind /etc/resolv.conf "$resolv_conf"
88+ mount --bind /etc/resolv.conf "$resolvConf"
8989}
9090
91−chroot_add_resolv_conf "$mountPoint" || print "ERROR: failed to set up resolv.conf"
91+chroot_add_resolv_conf "$mountPoint" || echo "$0: failed to set up resolv.conf" >&2
9292
9393(
9494 # If silent, write both stdout and stderr of activation script to /dev/null
nixos/modules/installer/tools/nixos-generate-config.pl+8−1
@@ -51,7 +51,9 @@ for (my $n = 0; $n < scalar @ARGV; $n++) {
5151 $n++;
5252 $rootDir = $ARGV[$n];
5353 die "$0: ‘--root’ requires an argument\n" unless defined $rootDir;
54+ die "$0: no need to specify `/` with `--root`, it is the default\n" if $rootDir eq "/";
5455 $rootDir =~ s/\/*$//; # remove trailing slashes
56+ $rootDir = File::Spec->rel2abs($rootDir); # resolve absolute path
5557 }
5658 elsif ($arg eq "--force") {
5759 $force = 1;
@@ -616,7 +618,12 @@ EOF
616618if ($showHardwareConfig) {
617619 print STDOUT $hwConfig;
618620} else {
619− $outDir = "$rootDir$outDir";
621+ if ($outDir eq "/etc/nixos") {
622+ $outDir = "$rootDir$outDir";
623+ } else {
624+ $outDir = File::Spec->rel2abs($outDir);
625+ $outDir =~ s/\/*$//; # remove trailing slashes
626+ }
620627
621628 my $fn = "$outDir/hardware-configuration.nix";
622629 print STDERR "writing $fn...\n";
nixos/modules/installer/tools/tools.nix+6−1
@@ -117,7 +117,7 @@ in
117117 '';
118118 };
119119
120− config = lib.mkIf (!config.system.disableInstallerTools) {
120+ config = lib.mkIf (config.nix.enable && !config.system.disableInstallerTools) {
121121
122122 system.nixos-generate-config.configuration = mkDefault ''
123123 # Edit this configuration file to define what should be installed on
@@ -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+3−2
@@ -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
@@ -129,7 +130,7 @@ let
129130 genericName = "View NixOS documentation in a web browser";
130131 icon = "nix-snowflake";
131132 exec = "nixos-help";
132− categories = "System";
133+ categories = ["System"];
133134 };
134135
135136 in pkgs.symlinkJoin {
nixos/modules/misc/ids.nix+3−3
@@ -82,14 +82,14 @@ in
8282 git = 41;
8383 #fourstore = 42; # dropped in 20.03
8484 #fourstorehttp = 43; # dropped in 20.03
85− virtuoso = 44;
85+ #virtuoso = 44; dropped module
8686 #rtkit = 45; # dynamically allocated 2021-09-03
8787 dovecot2 = 46;
8888 dovenull2 = 47;
8989 prayer = 49;
9090 mpd = 50;
9191 clamav = 51;
92− fprot = 52;
92+ #fprot = 52; # unused
9393 # bind = 53; #dynamically allocated as of 2021-09-03
9494 wwwrun = 54;
9595 #adm = 55; # unused
@@ -412,7 +412,7 @@ in
412412 prayer = 49;
413413 mpd = 50;
414414 clamav = 51;
415− fprot = 52;
415+ #fprot = 52; # unused
416416 #bind = 53; # unused
417417 wwwrun = 54;
418418 adm = 55;
nixos/modules/misc/locate.nix+6−2
@@ -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 = ''
@@ -183,7 +183,11 @@ in
183183
184184 pruneNames = mkOption {
185185 type = listOf str;
186− default = [ ".bzr" ".cache" ".git" ".hg" ".svn" ];
186+ default = lib.optionals (!isFindutils) [ ".bzr" ".cache" ".git" ".hg" ".svn" ];
187+ defaultText = literalDocBook ''
188+ <literal>[ ".bzr" ".cache" ".git" ".hg" ".svn" ]</literal>, if
189+ supported by the locate implementation (i.e. mlocate or plocate).
190+ '';
187191 description = ''
188192 Directory components which should exclude paths containing them from indexing
189193 '';
nixos/modules/misc/version.nix+47−18
@@ -1,12 +1,41 @@
11{ config, lib, options, pkgs, ... }:
22
3−with lib;
4−
53let
64 cfg = config.system.nixos;
75 opt = options.system.nixos;
8−in
96
7+ inherit (lib)
8+ concatStringsSep mapAttrsToList toLower
9+ literalExpression mkRenamedOptionModule mkDefault mkOption trivial types;
10+
11+ needsEscaping = s: null != builtins.match "[a-zA-Z0-9]+" s;
12+ escapeIfNeccessary = s: if needsEscaping s then s else ''"${lib.escape [ "\$" "\"" "\\" "\`" ] s}"'';
13+ attrsToText = attrs:
14+ concatStringsSep "\n" (
15+ mapAttrsToList (n: v: ''${n}=${escapeIfNeccessary (toString v)}'') attrs
16+ );
17+
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+
38+in
1039{
1140 imports = [
1241 (mkRenamedOptionModule [ "system" "nixosVersion" ] [ "system" "nixos" "version" ])
@@ -101,22 +130,22 @@ in
101130 # Generate /etc/os-release. See
102131 # https://www.freedesktop.org/software/systemd/man/os-release.html for the
103132 # format.
104− environment.etc.os-release.text =
105− ''
106− NAME=NixOS
107− ID=nixos
108− VERSION="${cfg.release} (${cfg.codeName})"
109− VERSION_CODENAME=${toLower cfg.codeName}
110− VERSION_ID="${cfg.release}"
111− BUILD_ID="${cfg.version}"
112− PRETTY_NAME="NixOS ${cfg.release} (${cfg.codeName})"
113− LOGO="nix-snowflake"
114− HOME_URL="https://nixos.org/"
115− DOCUMENTATION_URL="https://nixos.org/learn.html"
116− SUPPORT_URL="https://nixos.org/community.html"
117− BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues"
118− '';
133+ environment.etc = {
134+ "lsb-release".text = attrsToText {
135+ LSB_VERSION = "${cfg.release} (${cfg.codeName})";
136+ DISTRIB_ID = "nixos";
137+ DISTRIB_RELEASE = cfg.release;
138+ DISTRIB_CODENAME = toLower cfg.codeName;
139+ DISTRIB_DESCRIPTION = "NixOS ${cfg.release} (${cfg.codeName})";
140+ };
141+
142+ "os-release".text = attrsToText osReleaseContents;
143+ };
119144
145+ boot.initrd.systemd.contents = {
146+ "/etc/os-release".source = initrdRelease;
147+ "/etc/initrd-release".source = initrdRelease;
148+ };
120149 };
121150
122151 # uses version info nixpkgs, which requires a full nixpkgs path
nixos/modules/misc/wordlist.nixnew file+59
@@ -0,0 +1,59 @@
1+{ config, lib, pkgs, ... }:
2+with lib;
3+let
4+ concatAndSort = name: files: pkgs.runCommand name {} ''
5+ awk 1 ${lib.escapeShellArgs files} | sed '{ /^\s*$/d; s/^\s\+//; s/\s\+$// }' | sort | uniq > $out
6+ '';
7+in
8+{
9+ options = {
10+ environment.wordlist = {
11+ enable = mkEnableOption "environment variables for lists of words";
12+
13+ lists = mkOption {
14+ type = types.attrsOf (types.nonEmptyListOf types.path);
15+
16+ default = {
17+ WORDLIST = [ "${pkgs.scowl}/share/dict/words.txt" ];
18+ };
19+
20+ defaultText = literalExpression ''
21+ {
22+ WORDLIST = [ "''${pkgs.scowl}/share/dict/words.txt" ];
23+ }
24+ '';
25+
26+ description = ''
27+ A set with the key names being the environment variable you'd like to
28+ set and the values being a list of paths to text documents containing
29+ lists of words. The various files will be merged, sorted, duplicates
30+ removed, and extraneous spacing removed.
31+
32+ If you have a handful of words that you want to add to an already
33+ existing wordlist, you may find `builtins.toFile` useful for this
34+ task.
35+ '';
36+
37+ example = literalExpression ''
38+ {
39+ WORDLIST = [ "''${pkgs.scowl}/share/dict/words.txt" ];
40+ AUGMENTED_WORDLIST = [
41+ "''${pkgs.scowl}/share/dict/words.txt"
42+ "''${pkgs.scowl}/share/dict/words.variants.txt"
43+ (builtins.toFile "extra-words" '''
44+ desynchonization
45+ oobleck''')
46+ ];
47+ }
48+ '';
49+ };
50+ };
51+ };
52+
53+ config = mkIf config.environment.wordlist.enable {
54+ environment.variables =
55+ lib.mapAttrs
56+ (name: value: "${concatAndSort "wordlist-${name}" value}")
57+ config.environment.wordlist.lists;
58+ };
59+}
nixos/modules/module-list.nix+45−8
@@ -91,6 +91,7 @@
9191 ./hardware/video/switcheroo-control.nix
9292 ./hardware/video/uvcvideo/default.nix
9393 ./hardware/video/webcam/facetimehd.nix
94+ ./hardware/xone.nix
9495 ./hardware/xpadneo.nix
9596 ./i18n/input-method/default.nix
9697 ./i18n/input-method/fcitx.nix
@@ -115,7 +116,10 @@
115116 ./misc/nixpkgs.nix
116117 ./misc/passthru.nix
117118 ./misc/version.nix
119+ ./misc/wordlist.nix
118120 ./misc/nixops-autoluks.nix
121+ ./programs/_1password.nix
122+ ./programs/_1password-gui.nix
119123 ./programs/adb.nix
120124 ./programs/appgate-sdp.nix
121125 ./programs/atop.nix
@@ -166,6 +170,9 @@
166170 ./programs/iftop.nix
167171 ./programs/iotop.nix
168172 ./programs/java.nix
173+ ./programs/k40-whisperer.nix
174+ ./programs/kclock.nix
175+ ./programs/k3b.nix
169176 ./programs/kdeconnect.nix
170177 ./programs/kbdlight.nix
171178 ./programs/less.nix
@@ -176,8 +183,12 @@
176183 ./programs/msmtp.nix
177184 ./programs/mtr.nix
178185 ./programs/nano.nix
186+ ./programs/nbd.nix
187+ ./programs/nix-ld.nix
179188 ./programs/neovim.nix
189+ ./programs/nethoscope.nix
180190 ./programs/nm-applet.nix
191+ ./programs/nncp.nix
181192 ./programs/npm.nix
182193 ./programs/noisetorch.nix
183194 ./programs/oblogout.nix
@@ -195,7 +206,6 @@
195206 ./programs/spacefm.nix
196207 ./programs/singularity.nix
197208 ./programs/ssh.nix
198− ./programs/ssmtp.nix
199209 ./programs/sysdig.nix
200210 ./programs/systemtap.nix
201211 ./programs/starship.nix
@@ -252,6 +262,7 @@
252262 ./security/tpm2.nix
253263 ./services/admin/meshcentral.nix
254264 ./services/admin/oxidized.nix
265+ ./services/admin/pgadmin.nix
255266 ./services/admin/salt/master.nix
256267 ./services/admin/salt/minion.nix
257268 ./services/amqp/activemq/default.nix
@@ -296,6 +307,7 @@
296307 ./services/backup/znapzend.nix
297308 ./services/blockchain/ethereum/geth.nix
298309 ./services/backup/zrepl.nix
310+ ./services/cluster/corosync/default.nix
299311 ./services/cluster/hadoop/default.nix
300312 ./services/cluster/k3s/default.nix
301313 ./services/cluster/kubernetes/addons/dns.nix
@@ -308,6 +320,7 @@
308320 ./services/cluster/kubernetes/pki.nix
309321 ./services/cluster/kubernetes/proxy.nix
310322 ./services/cluster/kubernetes/scheduler.nix
323+ ./services/cluster/pacemaker/default.nix
311324 ./services/cluster/spark/default.nix
312325 ./services/computing/boinc/client.nix
313326 ./services/computing/foldingathome/client.nix
@@ -349,7 +362,6 @@
349362 ./services/databases/redis.nix
350363 ./services/databases/riak.nix
351364 ./services/databases/victoriametrics.nix
352− ./services/databases/virtuoso.nix
353365 ./services/desktops/accountsservice.nix
354366 ./services/desktops/bamf.nix
355367 ./services/desktops/blueman.nix
@@ -394,9 +406,11 @@
394406 ./services/development/jupyterhub/default.nix
395407 ./services/development/rstudio-server/default.nix
396408 ./services/development/lorri.nix
409+ ./services/development/zammad.nix
397410 ./services/display-managers/greetd.nix
398411 ./services/editors/emacs.nix
399412 ./services/editors/infinoted.nix
413+ ./services/editors/haste.nix
400414 ./services/finance/odoo.nix
401415 ./services/games/asf.nix
402416 ./services/games/crossfire-server.nix
@@ -446,11 +460,13 @@
446460 ./services/hardware/udisks2.nix
447461 ./services/hardware/upower.nix
448462 ./services/hardware/usbmuxd.nix
463+ ./services/hardware/usbrelayd.nix
449464 ./services/hardware/thermald.nix
450465 ./services/hardware/undervolt.nix
451466 ./services/hardware/vdr.nix
452467 ./services/hardware/xow.nix
453468 ./services/home-automation/home-assistant.nix
469+ ./services/home-automation/zigbee2mqtt.nix
454470 ./services/logging/SystemdJournal2Gelf.nix
455471 ./services/logging/awstats.nix
456472 ./services/logging/filebeat.nix
@@ -495,6 +511,7 @@
495511 ./services/mail/roundcube.nix
496512 ./services/mail/sympa.nix
497513 ./services/mail/nullmailer.nix
514+ ./services/matrix/matrix-synapse.nix
498515 ./services/matrix/mjolnir.nix
499516 ./services/matrix/pantalaimon.nix
500517 ./services/misc/ananicy.nix
@@ -561,7 +578,6 @@
561578 ./services/misc/matrix-appservice-discord.nix
562579 ./services/misc/matrix-appservice-irc.nix
563580 ./services/misc/matrix-conduit.nix
564− ./services/misc/matrix-synapse.nix
565581 ./services/misc/mautrix-facebook.nix
566582 ./services/misc/mautrix-telegram.nix
567583 ./services/misc/mbpfan.nix
@@ -583,7 +599,7 @@
583599 ./services/misc/osrm.nix
584600 ./services/misc/owncast.nix
585601 ./services/misc/packagekit.nix
586− ./services/misc/paperless-ng.nix
602+ ./services/misc/paperless.nix
587603 ./services/misc/parsoid.nix
588604 ./services/misc/plex.nix
589605 ./services/misc/plikd.nix
@@ -622,7 +638,6 @@
622638 ./services/misc/weechat.nix
623639 ./services/misc/xmr-stak.nix
624640 ./services/misc/xmrig.nix
625− ./services/misc/zigbee2mqtt.nix
626641 ./services/misc/zoneminder.nix
627642 ./services/misc/zookeeper.nix
628643 ./services/monitoring/alerta.nix
@@ -648,6 +663,7 @@
648663 ./services/monitoring/longview.nix
649664 ./services/monitoring/mackerel-agent.nix
650665 ./services/monitoring/metricbeat.nix
666+ ./services/monitoring/mimir.nix
651667 ./services/monitoring/monit.nix
652668 ./services/monitoring/munin.nix
653669 ./services/monitoring/nagios.nix
@@ -721,12 +737,14 @@
721737 ./services/networking/blocky.nix
722738 ./services/networking/charybdis.nix
723739 ./services/networking/cjdns.nix
740+ ./services/networking/cloudflare-dyndns.nix
724741 ./services/networking/cntlm.nix
725742 ./services/networking/connman.nix
726743 ./services/networking/consul.nix
727744 ./services/networking/coredns.nix
728745 ./services/networking/corerad.nix
729746 ./services/networking/coturn.nix
747+ ./services/networking/create_ap.nix
730748 ./services/networking/croc.nix
731749 ./services/networking/dante.nix
732750 ./services/networking/ddclient.nix
@@ -741,6 +759,7 @@
741759 ./services/networking/ncdns.nix
742760 ./services/networking/nomad.nix
743761 ./services/networking/ejabberd.nix
762+ ./services/networking/envoy.nix
744763 ./services/networking/epmd.nix
745764 ./services/networking/ergo.nix
746765 ./services/networking/ergochat.nix
@@ -768,6 +787,7 @@
768787 ./services/networking/headscale.nix
769788 ./services/networking/hostapd.nix
770789 ./services/networking/htpdate.nix
790+ ./services/networking/https-dns-proxy.nix
771791 ./services/networking/hylafax/default.nix
772792 ./services/networking/i2pd.nix
773793 ./services/networking/i2p.nix
@@ -802,6 +822,7 @@
802822 ./services/networking/mosquitto.nix
803823 ./services/networking/monero.nix
804824 ./services/networking/morty.nix
825+ ./services/networking/mozillavpn.nix
805826 ./services/networking/miredo.nix
806827 ./services/networking/mstpd.nix
807828 ./services/networking/mtprotoproxy.nix
@@ -814,6 +835,7 @@
814835 ./services/networking/nar-serve.nix
815836 ./services/networking/nat.nix
816837 ./services/networking/nats.nix
838+ ./services/networking/nbd.nix
817839 ./services/networking/ndppd.nix
818840 ./services/networking/nebula.nix
819841 ./services/networking/networkmanager.nix
@@ -836,7 +858,7 @@
836858 ./services/networking/ofono.nix
837859 ./services/networking/oidentd.nix
838860 ./services/networking/onedrive.nix
839− ./services/networking/openfire.nix
861+ ./services/networking/openconnect.nix
840862 ./services/networking/openvpn.nix
841863 ./services/networking/ostinato.nix
842864 ./services/networking/owamp.nix
@@ -873,6 +895,7 @@
873895 ./services/networking/shorewall6.nix
874896 ./services/networking/shout.nix
875897 ./services/networking/sniproxy.nix
898+ ./services/networking/snowflake-proxy.nix
876899 ./services/networking/smartdns.nix
877900 ./services/networking/smokeping.nix
878901 ./services/networking/softether.nix
@@ -897,6 +920,7 @@
897920 ./services/networking/tcpcrypt.nix
898921 ./services/networking/teamspeak3.nix
899922 ./services/networking/tedicross.nix
923+ ./services/networking/tetrd.nix
900924 ./services/networking/teleport.nix
901925 ./services/networking/thelounge.nix
902926 ./services/networking/tinc.nix
@@ -946,7 +970,6 @@
946970 ./services/security/clamav.nix
947971 ./services/security/fail2ban.nix
948972 ./services/security/fprintd.nix
949− ./services/security/fprot.nix
950973 ./services/security/haka.nix
951974 ./services/security/haveged.nix
952975 ./services/security/hockeypuck.nix
@@ -962,6 +985,7 @@
962985 ./services/security/shibboleth-sp.nix
963986 ./services/security/sks.nix
964987 ./services/security/sshguard.nix
988+ ./services/security/sslmate-agent.nix
965989 ./services/security/step-ca.nix
966990 ./services/security/tor.nix
967991 ./services/security/torify.nix
@@ -979,6 +1003,7 @@
9791003 ./services/system/nscd.nix
9801004 ./services/system/saslauthd.nix
9811005 ./services/system/self-deploy.nix
1006+ ./services/system/systembus-notify.nix
9821007 ./services/system/uptimed.nix
9831008 ./services/torrent/deluge.nix
9841009 ./services/torrent/flexget.nix
@@ -1032,8 +1057,10 @@
10321057 ./services/web-apps/mediawiki.nix
10331058 ./services/web-apps/miniflux.nix
10341059 ./services/web-apps/moodle.nix
1060+ ./services/web-apps/netbox.nix
10351061 ./services/web-apps/nextcloud.nix
10361062 ./services/web-apps/nexus.nix
1063+ ./services/web-apps/nifi.nix
10371064 ./services/web-apps/node-red.nix
10381065 ./services/web-apps/pict-rs.nix
10391066 ./services/web-apps/peertube.nix
@@ -1157,7 +1184,15 @@
11571184 ./system/boot/stage-1.nix
11581185 ./system/boot/stage-2.nix
11591186 ./system/boot/systemd.nix
1160− ./system/boot/systemd-nspawn.nix
1187+ ./system/boot/systemd/coredump.nix
1188+ ./system/boot/systemd/initrd-secrets.nix
1189+ ./system/boot/systemd/initrd.nix
1190+ ./system/boot/systemd/journald.nix
1191+ ./system/boot/systemd/logind.nix
1192+ ./system/boot/systemd/nspawn.nix
1193+ ./system/boot/systemd/shutdown.nix
1194+ ./system/boot/systemd/tmpfiles.nix
1195+ ./system/boot/systemd/user.nix
11611196 ./system/boot/timesyncd.nix
11621197 ./system/boot/tmp.nix
11631198 ./system/etc/etc-activation.nix
@@ -1211,6 +1246,7 @@
12111246 ./virtualisation/amazon-options.nix
12121247 ./virtualisation/hyperv-guest.nix
12131248 ./virtualisation/kvmgt.nix
1249+ ./virtualisation/openstack-options.nix
12141250 ./virtualisation/openvswitch.nix
12151251 ./virtualisation/parallels-guest.nix
12161252 ./virtualisation/podman/default.nix
@@ -1220,6 +1256,7 @@
12201256 ./virtualisation/virtualbox-guest.nix
12211257 ./virtualisation/virtualbox-host.nix
12221258 ./virtualisation/vmware-guest.nix
1259+ ./virtualisation/vmware-host.nix
12231260 ./virtualisation/waydroid.nix
12241261 ./virtualisation/xen-dom0.nix
12251262 ./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/_1password-gui.nixnew file+68
@@ -0,0 +1,68 @@
1+{ config, pkgs, lib, ... }:
2+
3+with lib;
4+
5+let
6+
7+ cfg = config.programs._1password-gui;
8+
9+in
10+{
11+ options = {
12+ programs._1password-gui = {
13+ enable = mkEnableOption "the 1Password GUI application";
14+
15+ gid = mkOption {
16+ type = types.addCheck types.int (x: x >= 1000);
17+ example = literalExpression "5000";
18+ description = ''
19+ The gid to assign to the onepassword group, which is needed for browser integration.
20+ It must be 1000 or greater.
21+ '';
22+ };
23+
24+ polkitPolicyOwners = mkOption {
25+ type = types.listOf types.str;
26+ default = [ ];
27+ example = literalExpression ''["user1" "user2" "user3"]'';
28+ description = ''
29+ A list of users who should be able to integrate 1Password with polkit-based authentication mechanisms.
30+ '';
31+ };
32+
33+ package = mkPackageOption pkgs "1Password GUI" {
34+ default = [ "_1password-gui" ];
35+ };
36+ };
37+ };
38+
39+ config =
40+ let
41+ package = cfg.package.override {
42+ polkitPolicyOwners = cfg.polkitPolicyOwners;
43+ };
44+ in
45+ mkIf cfg.enable {
46+ environment.systemPackages = [ package ];
47+ users.groups.onepassword.gid = cfg.gid;
48+
49+ security.wrappers = {
50+ "1Password-BrowserSupport" = {
51+ source = "${package}/share/1password/1Password-BrowserSupport";
52+ owner = "root";
53+ group = "onepassword";
54+ setuid = false;
55+ setgid = true;
56+ };
57+
58+ "1Password-KeyringHelper" = {
59+ source = "${package}/share/1password/1Password-KeyringHelper";
60+ owner = "root";
61+ group = "onepassword";
62+ setuid = true;
63+ setgid = true;
64+ };
65+ };
66+
67+ };
68+}
nixos/modules/programs/_1password.nixnew file+44
@@ -0,0 +1,44 @@
1+{ config, pkgs, lib, ... }:
2+
3+with lib;
4+
5+let
6+
7+ cfg = config.programs._1password;
8+
9+in
10+{
11+ options = {
12+ programs._1password = {
13+ enable = mkEnableOption "the 1Password CLI tool";
14+
15+ gid = mkOption {
16+ type = types.addCheck types.int (x: x >= 1000);
17+ example = literalExpression "5001";
18+ description = ''
19+ The gid to assign to the onepassword-cli group, which is needed for integration with the 1Password GUI.
20+ It must be 1000 or greater.
21+ '';
22+ };
23+
24+ package = mkPackageOption pkgs "1Password CLI" {
25+ default = [ "_1password" ];
26+ };
27+ };
28+ };
29+
30+ config = mkIf cfg.enable {
31+ environment.systemPackages = [ cfg.package ];
32+ users.groups.onepassword-cli.gid = cfg.gid;
33+
34+ security.wrappers = {
35+ "op" = {
36+ source = "${cfg.package}/bin/op";
37+ owner = "root";
38+ group = "onepassword-cli";
39+ setuid = false;
40+ setgid = true;
41+ };
42+ };
43+ };
44+}
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/captive-browser.nix+19−1
@@ -1,8 +1,12 @@
11{ config, lib, pkgs, ... }:
22
3−with lib;
43let
54 cfg = config.programs.captive-browser;
5+
6+ inherit (lib)
7+ concatStringsSep escapeShellArgs optionalString
8+ literalExpression mkEnableOption mkIf mkOption mkOptionDefault types;
9+
610 browserDefault = chromium: concatStringsSep " " [
711 ''env XDG_CONFIG_HOME="$PREV_CONFIG_HOME"''
812 ''${chromium}/bin/chromium''
@@ -15,6 +19,15 @@ let
1519 ''-no-default-browser-check''
1620 ''http://cache.nixos.org/''
1721 ];
22+
23+ desktopItem = pkgs.makeDesktopItem {
24+ name = "captive-browser";
25+ desktopName = "Captive Portal Browser";
26+ exec = "/run/wrappers/bin/captive-browser";
27+ icon = "nix-snowflake";
28+ categories = [ "Network" ];
29+ };
30+
1831in
1932{
2033 ###### interface
@@ -84,6 +97,11 @@ in
8497 ###### implementation
8598
8699 config = mkIf cfg.enable {
100+ environment.systemPackages = [
101+ (pkgs.runCommandNoCC "captive-browser-desktop-item" { } ''
102+ install -Dm444 -t $out/share/applications ${desktopItem}/share/applications/*.desktop
103+ '')
104+ ];
87105
88106 programs.captive-browser.dhcp-dns =
89107 let
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/environment.nix+3−1
@@ -40,13 +40,15 @@ in
4040 KDEDIRS = [ "" ];
4141 QT_PLUGIN_PATH = [ "/lib/qt4/plugins" "/lib/kde4/plugins" ];
4242 QTWEBKIT_PLUGIN_PATH = [ "/lib/mozilla/plugins/" ];
43− GTK_PATH = [ "/lib/gtk-2.0" "/lib/gtk-3.0" ];
43+ GTK_PATH = [ "/lib/gtk-2.0" "/lib/gtk-3.0" "/lib/gtk-4.0" ];
4444 XDG_CONFIG_DIRS = [ "/etc/xdg" ];
4545 XDG_DATA_DIRS = [ "/share" ];
4646 MOZ_PLUGIN_PATH = [ "/lib/mozilla/plugins" ];
4747 LIBEXEC_PATH = [ "/lib/libexec" ];
4848 };
4949
50+ environment.pathsToLink = [ "/lib/gtk-2.0" "/lib/gtk-3.0" "/lib/gtk-4.0" ];
51+
5052 environment.extraInit =
5153 ''
5254 unset ASPELL_CONF
nixos/modules/programs/firejail.nix+2−2
@@ -17,8 +17,8 @@ let
1717 then value
1818 else { executable = value; profile = null; extraArgs = []; };
1919 args = lib.escapeShellArgs (
20− (optional (opts.profile != null) "--profile=${toString opts.profile}")
21− ++ opts.extraArgs
20+ opts.extraArgs
21+ ++ (optional (opts.profile != null) "--profile=${toString opts.profile}")
2222 );
2323 in
2424 ''
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/k40-whisperer.nixnew file+40
@@ -0,0 +1,40 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+
5+let
6+ cfg = config.programs.k40-whisperer;
7+ pkg = cfg.package.override {
8+ udevGroup = cfg.group;
9+ };
10+in
11+{
12+ options.programs.k40-whisperer = {
13+ enable = mkEnableOption "K40-Whisperer";
14+
15+ group = mkOption {
16+ type = types.str;
17+ description = ''
18+ Group assigned to the device when connected.
19+ '';
20+ default = "k40";
21+ };
22+
23+ package = mkOption {
24+ type = types.package;
25+ default = pkgs.k40-whisperer;
26+ defaultText = literalExpression "pkgs.k40-whisperer";
27+ example = literalExpression "pkgs.k40-whisperer";
28+ description = ''
29+ K40 Whisperer package to use.
30+ '';
31+ };
32+ };
33+
34+ config = mkIf cfg.enable {
35+ users.groups.${cfg.group} = {};
36+
37+ environment.systemPackages = [ pkg ];
38+ services.udev.packages = [ pkg ];
39+ };
40+}
nixos/modules/programs/kclock.nixnew file+13
@@ -0,0 +1,13 @@
1+{ lib, pkgs, config, ... }:
2+with lib;
3+let
4+ cfg = config.programs.kclock;
5+ kclockPkg = pkgs.libsForQt5.kclock;
6+in {
7+ options.programs.kclock = { enable = mkEnableOption "Enable KClock"; };
8+
9+ config = mkIf cfg.enable {
10+ services.dbus.packages = [ kclockPkg ];
11+ environment.systemPackages = [ kclockPkg ];
12+ };
13+}
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/nbd.nixnew file+19
@@ -0,0 +1,19 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+
5+let
6+ cfg = config.programs.nbd;
7+in
8+{
9+ options = {
10+ programs.nbd = {
11+ enable = mkEnableOption "Network Block Device (nbd) support";
12+ };
13+ };
14+
15+ config = mkIf cfg.enable {
16+ environment.systemPackages = with pkgs; [ nbd ];
17+ boot.kernelModules = [ "nbd" ];
18+ };
19+}
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/nix-ld.nixnew file+12
@@ -0,0 +1,12 @@
1+{ pkgs, lib, config, ... }:
2+{
3+ meta.maintainers = [ lib.maintainers.mic92 ];
4+ options = {
5+ programs.nix-ld.enable = lib.mkEnableOption ''nix-ld, Documentation: <link xlink:href="https://github.com/Mic92/nix-ld"/>'';
6+ };
7+ config = lib.mkIf config.programs.nix-ld.enable {
8+ systemd.tmpfiles.rules = [
9+ "L+ ${pkgs.nix-ld.ldPath} - - - - ${pkgs.nix-ld}/libexec/nix-ld"
10+ ];
11+ };
12+}
nixos/modules/programs/nncp.nixnew file+101
@@ -0,0 +1,101 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+let
5+ nncpCfgFile = "/run/nncp.hjson";
6+ programCfg = config.programs.nncp;
7+ settingsFormat = pkgs.formats.json { };
8+ jsonCfgFile = settingsFormat.generate "nncp.json" programCfg.settings;
9+ pkg = programCfg.package;
10+in {
11+ options.programs.nncp = {
12+
13+ enable =
14+ mkEnableOption "NNCP (Node to Node copy) utilities and configuration";
15+
16+ group = mkOption {
17+ type = types.str;
18+ default = "uucp";
19+ description = ''
20+ The group under which NNCP files shall be owned.
21+ Any member of this group may access the secret keys
22+ of this NNCP node.
23+ '';
24+ };
25+
26+ package = mkOption {
27+ type = types.package;
28+ default = pkgs.nncp;
29+ defaultText = literalExpression "pkgs.nncp";
30+ description = "The NNCP package to use system-wide.";
31+ };
32+
33+ secrets = mkOption {
34+ type = with types; listOf str;
35+ example = [ "/run/keys/nncp.hjson" ];
36+ description = ''
37+ A list of paths to NNCP configuration files that should not be
38+ in the Nix store. These files are layered on top of the values at
39+ <xref linkend="opt-programs.nncp.settings"/>.
40+ '';
41+ };
42+
43+ settings = mkOption {
44+ type = settingsFormat.type;
45+ description = ''
46+ NNCP configuration, see
47+ <link xlink:href="http://www.nncpgo.org/Configuration.html"/>.
48+ At runtime these settings will be overlayed by the contents of
49+ <xref linkend="opt-programs.nncp.secrets"/> into the file
50+ <literal>${nncpCfgFile}</literal>. Node keypairs go in
51+ <literal>secrets</literal>, do not specify them in
52+ <literal>settings</literal> as they will be leaked into
53+ <literal>/nix/store</literal>!
54+ '';
55+ default = { };
56+ };
57+
58+ };
59+
60+ config = mkIf programCfg.enable {
61+
62+ environment = {
63+ systemPackages = [ pkg ];
64+ etc."nncp.hjson".source = nncpCfgFile;
65+ };
66+
67+ programs.nncp.settings = {
68+ spool = mkDefault "/var/spool/nncp";
69+ log = mkDefault "/var/spool/nncp/log";
70+ };
71+
72+ systemd.tmpfiles.rules = [
73+ "d ${programCfg.settings.spool} 0770 root ${programCfg.group}"
74+ "f ${programCfg.settings.log} 0770 root ${programCfg.group}"
75+ ];
76+
77+ systemd.services.nncp-config = {
78+ path = [ pkg ];
79+ description = "Generate NNCP configuration";
80+ wantedBy = [ "basic.target" ];
81+ serviceConfig.Type = "oneshot";
82+ script = ''
83+ umask u=rw
84+ nncpCfgDir=$(mktemp --directory nncp.XXX)
85+ for f in ${jsonCfgFile} ${toString config.programs.nncp.secrets}; do
86+ tmpdir=$(mktemp --directory nncp.XXX)
87+ nncp-cfgdir -cfg $f -dump $tmpdir
88+ find $tmpdir -size 1c -delete
89+ cp -a $tmpdir/* $nncpCfgDir/
90+ rm -rf $tmpdir
91+ done
92+ nncp-cfgdir -load $nncpCfgDir > ${nncpCfgFile}
93+ rm -rf $nncpCfgDir
94+ chgrp ${programCfg.group} ${nncpCfgFile}
95+ chmod g+r ${nncpCfgFile}
96+ '';
97+ };
98+ };
99+
100+ meta.maintainers = with lib.maintainers; [ ehmry ];
101+}
nixos/modules/programs/phosh.nix+9−10
@@ -8,18 +8,17 @@ let
88 # Based on https://source.puri.sm/Librem5/librem5-base/-/blob/4596c1056dd75ac7f043aede07887990fd46f572/default/sm.puri.OSK0.desktop
99 oskItem = pkgs.makeDesktopItem {
1010 name = "sm.puri.OSK0";
11− type = "Application";
1211 desktopName = "On-screen keyboard";
1312 exec = "${pkgs.squeekboard}/bin/squeekboard";
14− categories = "GNOME;Core;";
15− extraEntries = ''
16− OnlyShowIn=GNOME;
17− NoDisplay=true
18− X-GNOME-Autostart-Phase=Panel
19− X-GNOME-Provides=inputmethod
20− X-GNOME-Autostart-Notify=true
21− X-GNOME-AutoRestart=true
22− '';
13+ categories = [ "GNOME" "Core" ];
14+ onlyShowIn = [ "GNOME" ];
15+ noDisplay = true;
16+ extraConfig = {
17+ X-GNOME-Autostart-Phase = "Panel";
18+ X-GNOME-Provides = "inputmethod";
19+ X-GNOME-Autostart-Notify = "true";
20+ X-GNOME-AutoRestart = "true";
21+ };
2322 };
2423
2524 phocConfigType = types.submodule {
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/sway.nix+1
@@ -134,6 +134,7 @@ in {
134134 '';
135135 };
136136 };
137+ security.polkit.enable = true;
137138 security.pam.services.swaylock = {};
138139 hardware.opengl.enable = mkDefault true;
139140 fonts.enableDefaultFonts = mkDefault true;
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/programs/zsh/zsh-autosuggestions.nix+11−10
@@ -22,17 +22,18 @@ in
2222 };
2323
2424 strategy = mkOption {
25− type = types.enum [ "history" "match_prev_cmd" ];
26− default = "history";
25+ type = types.listOf (types.enum [ "history" "completion" "match_prev_cmd" ]);
26+ default = [ "history" ];
2727 description = ''
28− Set ZSH_AUTOSUGGEST_STRATEGY to choose the strategy for generating suggestions.
29− There are currently two to choose from:
28+ `ZSH_AUTOSUGGEST_STRATEGY` is an array that specifies how suggestions should be generated.
29+ The strategies in the array are tried successively until a suggestion is found.
30+ There are currently three built-in strategies to choose from:
3031
31− * history: Chooses the most recent match.
32− * match_prev_cmd: Chooses the most recent match whose preceding history item matches
33− the most recently executed command (more info). Note that this strategy won't work as
34− expected with ZSH options that don't preserve the history order such as
35− HIST_IGNORE_ALL_DUPS or HIST_EXPIRE_DUPS_FIRST.
32+ - `history`: Chooses the most recent match from history.
33+ - `completion`: Chooses a suggestion based on what tab-completion would suggest. (requires `zpty` module)
34+ - `match_prev_cmd`: Like `history`, but chooses the most recent match whose preceding history item matches
35+ the most recently executed command. Note that this strategy won't work as expected with ZSH options that
36+ don't preserve the history order such as `HIST_IGNORE_ALL_DUPS` or `HIST_EXPIRE_DUPS_FIRST`.
3637 '';
3738 };
3839
@@ -62,7 +63,7 @@ in
6263 source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh
6364
6465 export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="${cfg.highlightStyle}"
65− export ZSH_AUTOSUGGEST_STRATEGY=("${cfg.strategy}")
66+ export ZSH_AUTOSUGGEST_STRATEGY=(${concatStringsSep " " cfg.strategy})
6667 ${optionalString (!cfg.async) "unset ZSH_AUTOSUGGEST_USE_ASYNC"}
6768
6869 ${concatStringsSep "\n" (mapAttrsToList (key: value: ''export ${key}="${value}"'') cfg.extraConfig)}
nixos/modules/rename.nix+8−2
@@ -50,6 +50,7 @@ with lib;
5050 (mkRemovedOptionModule [ "services" "flashpolicyd" ] "The flashpolicyd module has been removed. Adobe Flash Player is deprecated.")
5151 (mkRemovedOptionModule [ "services" "fourStore" ] "The fourStore module has been removed")
5252 (mkRemovedOptionModule [ "services" "fourStoreEndpoint" ] "The fourStoreEndpoint module has been removed")
53+ (mkRemovedOptionModule [ "services" "fprot" ] "The corresponding package was removed from nixpkgs.")
5354 (mkRemovedOptionModule [ "services" "frab" ] "The frab module has been removed")
5455 (mkRemovedOptionModule [ "services" "kippo" ] "The corresponding package was removed from nixpkgs.")
5556 (mkRemovedOptionModule [ "services" "mailpile" ] "The corresponding package was removed from nixpkgs.")
@@ -68,6 +69,11 @@ with lib;
6869 '')
6970 (mkRemovedOptionModule [ "services" "quagga" ] "the corresponding package has been removed from nixpkgs")
7071 (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+ '')
7177 (mkRemovedOptionModule [ "services" "venus" ] "The corresponding package was removed from nixpkgs.")
7278 (mkRemovedOptionModule [ "services" "wakeonlan"] "This module was removed in favor of enabling it with networking.interfaces.<name>.wakeOnLan")
7379 (mkRemovedOptionModule [ "services" "winstone" ] "The corresponding package was removed from nixpkgs.")
@@ -87,10 +93,10 @@ with lib;
8793 (mkRemovedOptionModule [ "services" "racoon" ] ''
8894 The racoon module has been removed, because the software project was abandoned upstream.
8995 '')
90−
9196 (mkRemovedOptionModule [ "services" "shellinabox" ] "The corresponding package was removed from nixpkgs.")
92−
9397 (mkRemovedOptionModule [ "services" "gogoclient" ] "The corresponding package was removed from nixpkgs.")
98+ (mkRemovedOptionModule [ "services" "virtuoso" ] "The corresponding package was removed from nixpkgs.")
99+ (mkRemovedOptionModule [ "services" "openfire" ] "The corresponding package was removed from nixpkgs.")
94100
95101 # Do NOT add any option renames here, see top of the file
96102 ];
nixos/modules/security/pam.nix+114−4
@@ -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"}
@@ -518,7 +534,7 @@ let
518534 auth optional ${pkgs.pam_gnupg}/lib/security/pam_gnupg.so ${optionalString cfg.gnupg.storeOnly " store-only"}
519535 '' +
520536 optionalString cfg.googleAuthenticator.enable ''
521− auth required ${pkgs.googleAuthenticator}/lib/security/pam_google_authenticator.so no_increment_hotp
537+ auth required ${pkgs.google-authenticator}/lib/security/pam_google_authenticator.so no_increment_hotp
522538 '' +
523539 optionalString cfg.duoSecurity.enable ''
524540 auth required ${pkgs.duo-unix}/lib/security/pam_duo.so
@@ -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/polkit.nix+1−5
@@ -12,11 +12,7 @@ in
1212
1313 options = {
1414
15− security.polkit.enable = mkOption {
16− type = types.bool;
17− default = true;
18− description = "Whether to enable PolKit.";
19− };
15+ security.polkit.enable = mkEnableOption "polkit";
2016
2117 security.polkit.extraConfig = mkOption {
2218 type = types.lines;
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/security/systemd-confinement.nix+2−2
@@ -175,8 +175,8 @@ in {
175175 serviceName = "${name}.service";
176176 excludedPath = rootPaths;
177177 } ''
178− mkdir -p "$out/lib/systemd/system"
179− serviceFile="$out/lib/systemd/system/$serviceName"
178+ mkdir -p "$out/lib/systemd/system/$serviceName.d"
179+ serviceFile="$out/lib/systemd/system/$serviceName.d/confinement.conf"
180180
181181 echo '[Service]' > "$serviceFile"
182182
nixos/modules/services/admin/pgadmin.nixnew file+127
@@ -0,0 +1,127 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+
5+let
6+ pkg = pkgs.pgadmin4;
7+ cfg = config.services.pgadmin;
8+
9+ _base = with types; [ int bool str ];
10+ base = with types; oneOf ([ (listOf (oneOf _base)) (attrsOf (oneOf _base)) ] ++ _base);
11+
12+ formatAttrset = attr:
13+ "{${concatStringsSep "\n" (mapAttrsToList (key: value: "${builtins.toJSON key}: ${formatPyValue value},") attr)}}";
14+
15+ formatPyValue = value:
16+ if builtins.isString value then builtins.toJSON value
17+ else if value ? _expr then value._expr
18+ else if builtins.isInt value then toString value
19+ else if builtins.isBool value then (if value then "True" else "False")
20+ else if builtins.isAttrs value then (formatAttrset value)
21+ else if builtins.isList value then "[${concatStringsSep "\n" (map (v: "${formatPyValue v},") value)}]"
22+ else throw "Unrecognized type";
23+
24+ formatPy = attrs:
25+ concatStringsSep "\n" (mapAttrsToList (key: value: "${key} = ${formatPyValue value}") attrs);
26+
27+ pyType = with types; attrsOf (oneOf [ (attrsOf base) (listOf base) base ]);
28+in
29+{
30+ options.services.pgadmin = {
31+ enable = mkEnableOption "PostgreSQL Admin 4";
32+
33+ port = mkOption {
34+ description = "Port for pgadmin4 to run on";
35+ type = types.port;
36+ default = 5050;
37+ };
38+
39+ initialEmail = mkOption {
40+ description = "Initial email for the pgAdmin account.";
41+ type = types.str;
42+ };
43+
44+ initialPasswordFile = mkOption {
45+ description = ''
46+ Initial password file for the pgAdmin account.
47+ NOTE: Should be string not a store path, to prevent the password from being world readable.
48+ '';
49+ type = types.path;
50+ };
51+
52+ openFirewall = mkEnableOption "firewall passthrough for pgadmin4";
53+
54+ settings = mkOption {
55+ description = ''
56+ Settings for pgadmin4.
57+ <link xlink:href="https://www.pgadmin.org/docs/pgadmin4/development/config_py.html">Documentation</link>.
58+ '';
59+ type = pyType;
60+ default= {};
61+ };
62+ };
63+
64+ config = mkIf (cfg.enable) {
65+ networking.firewall.allowedTCPPorts = mkIf (cfg.openFirewall) [ cfg.port ];
66+
67+ services.pgadmin.settings = {
68+ DEFAULT_SERVER_PORT = cfg.port;
69+ SERVER_MODE = true;
70+ } // (optionalAttrs cfg.openFirewall {
71+ DEFAULT_SERVER = mkDefault "::";
72+ });
73+
74+ systemd.services.pgadmin = {
75+ wantedBy = [ "multi-user.target" ];
76+ after = [ "network.target" ];
77+ requires = [ "network.target" ];
78+ # we're adding this optionally so just in case there's any race it'll be caught
79+ # in case postgres doesn't start, pgadmin will just start normally
80+ wants = [ "postgresql.service" ];
81+
82+ path = [ config.services.postgresql.package pkgs.coreutils pkgs.bash ];
83+
84+ preStart = ''
85+ # NOTE: this is idempotent (aka running it twice has no effect)
86+ (
87+ # Email address:
88+ echo ${escapeShellArg cfg.initialEmail}
89+
90+ # file might not contain newline. echo hack fixes that.
91+ PW=$(cat ${escapeShellArg cfg.initialPasswordFile})
92+
93+ # Password:
94+ echo "$PW"
95+ # Retype password:
96+ echo "$PW"
97+ ) | ${pkg}/bin/pgadmin4-setup
98+ '';
99+
100+ restartTriggers = [
101+ "/etc/pgadmin/config_system.py"
102+ ];
103+
104+ serviceConfig = {
105+ User = "pgadmin";
106+ DynamicUser = true;
107+ LogsDirectory = "pgadmin";
108+ StateDirectory = "pgadmin";
109+ ExecStart = "${pkg}/bin/pgadmin4";
110+ };
111+ };
112+
113+ users.users.pgadmin = {
114+ isSystemUser = true;
115+ group = "pgadmin";
116+ };
117+
118+ users.groups.pgadmin = {};
119+
120+ environment.etc."pgadmin/config_system.py" = {
121+ text = formatPy cfg.settings;
122+ mode = "0600";
123+ user = "pgadmin";
124+ group = "pgadmin";
125+ };
126+ };
127+}
nixos/modules/services/audio/snapserver.nix+28−20
@@ -1,4 +1,4 @@
1−{ config, lib, pkgs, ... }:
1+{ config, options, lib, pkgs, ... }:
22
33with lib;
44
@@ -44,24 +44,24 @@ let
4444
4545 optionString = concatStringsSep " " (mapAttrsToList streamToOption cfg.streams
4646 # global options
47− ++ [ "--stream.bind_to_address ${cfg.listenAddress}" ]
48− ++ [ "--stream.port ${toString cfg.port}" ]
49− ++ optionalNull cfg.sampleFormat "--stream.sampleformat ${cfg.sampleFormat}"
50− ++ optionalNull cfg.codec "--stream.codec ${cfg.codec}"
51− ++ optionalNull cfg.streamBuffer "--stream.stream_buffer ${toString cfg.streamBuffer}"
52− ++ optionalNull cfg.buffer "--stream.buffer ${toString cfg.buffer}"
47+ ++ [ "--stream.bind_to_address=${cfg.listenAddress}" ]
48+ ++ [ "--stream.port=${toString cfg.port}" ]
49+ ++ optionalNull cfg.sampleFormat "--stream.sampleformat=${cfg.sampleFormat}"
50+ ++ optionalNull cfg.codec "--stream.codec=${cfg.codec}"
51+ ++ optionalNull cfg.streamBuffer "--stream.stream_buffer=${toString cfg.streamBuffer}"
52+ ++ optionalNull cfg.buffer "--stream.buffer=${toString cfg.buffer}"
5353 ++ optional cfg.sendToMuted "--stream.send_to_muted"
5454 # tcp json rpc
55− ++ [ "--tcp.enabled ${toString cfg.tcp.enable}" ]
55+ ++ [ "--tcp.enabled=${toString cfg.tcp.enable}" ]
5656 ++ optionals cfg.tcp.enable [
57− "--tcp.bind_to_address ${cfg.tcp.listenAddress}"
58− "--tcp.port ${toString cfg.tcp.port}" ]
57+ "--tcp.bind_to_address=${cfg.tcp.listenAddress}"
58+ "--tcp.port=${toString cfg.tcp.port}" ]
5959 # http json rpc
60− ++ [ "--http.enabled ${toString cfg.http.enable}" ]
60+ ++ [ "--http.enabled=${toString cfg.http.enable}" ]
6161 ++ optionals cfg.http.enable [
62− "--http.bind_to_address ${cfg.http.listenAddress}"
63− "--http.port ${toString cfg.http.port}"
64− ] ++ optional (cfg.http.docRoot != null) "--http.doc_root \"${toString cfg.http.docRoot}\"");
62+ "--http.bind_to_address=${cfg.http.listenAddress}"
63+ "--http.port=${toString cfg.http.port}"
64+ ] ++ optional (cfg.http.docRoot != null) "--http.doc_root=\"${toString cfg.http.docRoot}\"");
6565
6666in {
6767 imports = [
@@ -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/audio/squeezelite.nix+17−21
@@ -1,50 +1,46 @@
11{ config, lib, pkgs, ... }:
22
3−with lib;
4−
53let
4+ inherit (lib) mkEnableOption mkIf mkOption optionalString types;
5+
66 dataDir = "/var/lib/squeezelite";
77 cfg = config.services.squeezelite;
8+ pkg = if cfg.pulseAudio then pkgs.squeezelite-pulse else pkgs.squeezelite;
9+ bin = "${pkg}/bin/${pkg.pname}";
810
9−in {
11+in
12+{
1013
1114 ###### interface
1215
13− options = {
14−
15− services.squeezelite= {
16+ options.services.squeezelite = {
17+ enable = mkEnableOption "Squeezelite, a software Squeezebox emulator";
1618
17− enable = mkEnableOption "Squeezelite, a software Squeezebox emulator";
18−
19− extraArguments = mkOption {
20− default = "";
21− type = types.str;
22− description = ''
23− Additional command line arguments to pass to Squeezelite.
24− '';
25− };
19+ pulseAudio = mkEnableOption "pulseaudio support";
2620
21+ extraArguments = mkOption {
22+ default = "";
23+ type = types.str;
24+ description = ''
25+ Additional command line arguments to pass to Squeezelite.
26+ '';
2727 };
28−
2928 };
3029
3130
3231 ###### implementation
3332
3433 config = mkIf cfg.enable {
35−
36− systemd.services.squeezelite= {
34+ systemd.services.squeezelite = {
3735 wantedBy = [ "multi-user.target" ];
3836 after = [ "network.target" "sound.target" ];
3937 description = "Software Squeezebox emulator";
4038 serviceConfig = {
4139 DynamicUser = true;
42− ExecStart = "${pkgs.squeezelite}/bin/squeezelite -N ${dataDir}/player-name ${cfg.extraArguments}";
40+ ExecStart = "${bin} -N ${dataDir}/player-name ${cfg.extraArguments}";
4341 StateDirectory = builtins.baseNameOf dataDir;
4442 SupplementaryGroups = "audio";
4543 };
4644 };
47−
4845 };
49−
5046}
nixos/modules/services/backup/zrepl.nix+3
@@ -38,6 +38,9 @@ in
3838 environment.etc."zrepl/zrepl.yml".source = configFile;
3939
4040 systemd.packages = [ pkgs.zrepl ];
41+
42+ # Note that pkgs.zrepl copies and adapts the upstream systemd unit, and
43+ # the fields defined here only override certain fields from that unit.
4144 systemd.services.zrepl = {
4245 requires = [ "local-fs.target" ];
4346 wantedBy = [ "zfs.target" ];
nixos/modules/services/cluster/corosync/default.nixnew file+112
@@ -0,0 +1,112 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+let
5+ cfg = config.services.corosync;
6+in
7+{
8+ # interface
9+ options.services.corosync = {
10+ enable = mkEnableOption "corosync";
11+
12+ package = mkOption {
13+ type = types.package;
14+ default = pkgs.corosync;
15+ defaultText = literalExpression "pkgs.corosync";
16+ description = "Package that should be used for corosync.";
17+ };
18+
19+ clusterName = mkOption {
20+ type = types.str;
21+ default = "nixcluster";
22+ description = "Name of the corosync cluster.";
23+ };
24+
25+ extraOptions = mkOption {
26+ type = with types; listOf str;
27+ default = [];
28+ description = "Additional options with which to start corosync.";
29+ };
30+
31+ nodelist = mkOption {
32+ description = "Corosync nodelist: all cluster members.";
33+ default = [];
34+ type = with types; listOf (submodule {
35+ options = {
36+ nodeid = mkOption {
37+ type = int;
38+ description = "Node ID number";
39+ };
40+ name = mkOption {
41+ type = str;
42+ description = "Node name";
43+ };
44+ ring_addrs = mkOption {
45+ type = listOf str;
46+ description = "List of addresses, one for each ring.";
47+ };
48+ };
49+ });
50+ };
51+ };
52+
53+ # implementation
54+ config = mkIf cfg.enable {
55+ environment.systemPackages = [ cfg.package ];
56+
57+ environment.etc."corosync/corosync.conf".text = ''
58+ totem {
59+ version: 2
60+ secauth: on
61+ cluster_name: ${cfg.clusterName}
62+ transport: knet
63+ }
64+
65+ nodelist {
66+ ${concatMapStrings ({ nodeid, name, ring_addrs }: ''
67+ node {
68+ nodeid: ${toString nodeid}
69+ name: ${name}
70+ ${concatStrings (imap0 (i: addr: ''
71+ ring${toString i}_addr: ${addr}
72+ '') ring_addrs)}
73+ }
74+ '') cfg.nodelist}
75+ }
76+
77+ quorum {
78+ # only corosync_votequorum is supported
79+ provider: corosync_votequorum
80+ wait_for_all: 0
81+ ${optionalString (builtins.length cfg.nodelist < 3) ''
82+ two_node: 1
83+ ''}
84+ }
85+
86+ logging {
87+ to_syslog: yes
88+ }
89+ '';
90+
91+ environment.etc."corosync/uidgid.d/root".text = ''
92+ # allow pacemaker connection by root
93+ uidgid {
94+ uid: 0
95+ gid: 0
96+ }
97+ '';
98+
99+ systemd.packages = [ cfg.package ];
100+ systemd.services.corosync = {
101+ wantedBy = [ "multi-user.target" ];
102+ serviceConfig = {
103+ StateDirectory = "corosync";
104+ StateDirectoryMode = "0700";
105+ };
106+ };
107+
108+ environment.etc."sysconfig/corosync".text = lib.optionalString (cfg.extraOptions != []) ''
109+ COROSYNC_OPTIONS="${lib.escapeShellArgs cfg.extraOptions}"
110+ '';
111+ };
112+}
nixos/modules/services/cluster/hadoop/conf.nix+11−11
@@ -1,6 +1,6 @@
11{ cfg, pkgs, lib }:
22let
3− propertyXml = name: value: ''
3+ propertyXml = name: value: lib.optionalString (value != null) ''
44 <property>
55 <name>${name}</name>
66 <value>${builtins.toString value}</value>
@@ -29,16 +29,16 @@ let
2929 export HADOOP_LOG_DIR=/tmp/hadoop/$USER
3030 '';
3131in
32−pkgs.runCommand "hadoop-conf" {} ''
32+pkgs.runCommand "hadoop-conf" {} (with cfg; ''
3333 mkdir -p $out/
34− cp ${siteXml "core-site.xml" cfg.coreSite}/* $out/
35− cp ${siteXml "hdfs-site.xml" cfg.hdfsSite}/* $out/
36− cp ${siteXml "mapred-site.xml" cfg.mapredSite}/* $out/
37− cp ${siteXml "yarn-site.xml" cfg.yarnSite}/* $out/
38− cp ${siteXml "httpfs-site.xml" cfg.httpfsSite}/* $out/
39− cp ${cfgFile "container-executor.cfg" cfg.containerExecutorCfg}/* $out/
34+ cp ${siteXml "core-site.xml" (coreSite // coreSiteInternal)}/* $out/
35+ cp ${siteXml "hdfs-site.xml" (hdfsSiteDefault // hdfsSite // hdfsSiteInternal)}/* $out/
36+ cp ${siteXml "mapred-site.xml" (mapredSiteDefault // mapredSite)}/* $out/
37+ cp ${siteXml "yarn-site.xml" (yarnSiteDefault // yarnSite // yarnSiteInternal)}/* $out/
38+ cp ${siteXml "httpfs-site.xml" httpfsSite}/* $out/
39+ cp ${cfgFile "container-executor.cfg" containerExecutorCfg}/* $out/
4040 cp ${pkgs.writeTextDir "hadoop-user-functions.sh" userFunctions}/* $out/
4141 cp ${pkgs.writeTextDir "hadoop-env.sh" hadoopEnv}/* $out/
42− cp ${cfg.log4jProperties} $out/log4j.properties
43− ${lib.concatMapStringsSep "\n" (dir: "cp -r ${dir}/* $out/") cfg.extraConfDirs}
44−''
42+ cp ${log4jProperties} $out/log4j.properties
43+ ${lib.concatMapStringsSep "\n" (dir: "cp -r ${dir}/* $out/") extraConfDirs}
44+'')
nixos/modules/services/cluster/hadoop/default.nix+72−25
@@ -21,24 +21,50 @@ with lib;
2121 <link xlink:href="https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/core-default.xml"/>
2222 '';
2323 };
24+ coreSiteInternal = mkOption {
25+ default = {};
26+ type = types.attrsOf types.anything;
27+ internal = true;
28+ description = ''
29+ Internal option to add configs to core-site.xml based on module options
30+ '';
31+ };
2432
25− hdfsSite = mkOption {
33+ hdfsSiteDefault = mkOption {
2634 default = {
2735 "dfs.namenode.rpc-bind-host" = "0.0.0.0";
36+ "dfs.namenode.http-address" = "0.0.0.0:9870";
37+ "dfs.namenode.servicerpc-bind-host" = "0.0.0.0";
38+ "dfs.namenode.http-bind-host" = "0.0.0.0";
2839 };
2940 type = types.attrsOf types.anything;
41+ description = ''
42+ Default options for hdfs-site.xml
43+ '';
44+ };
45+ hdfsSite = mkOption {
46+ default = {};
47+ type = types.attrsOf types.anything;
3048 example = literalExpression ''
3149 {
3250 "dfs.nameservices" = "namenode1";
3351 }
3452 '';
3553 description = ''
36− Hadoop hdfs-site.xml definition
54+ Additional options and overrides for hdfs-site.xml
3755 <link xlink:href="https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml"/>
3856 '';
3957 };
58+ hdfsSiteInternal = mkOption {
59+ default = {};
60+ type = types.attrsOf types.anything;
61+ internal = true;
62+ description = ''
63+ Internal option to add configs to hdfs-site.xml based on module options
64+ '';
65+ };
4066
41− mapredSite = mkOption {
67+ mapredSiteDefault = mkOption {
4268 default = {
4369 "mapreduce.framework.name" = "yarn";
4470 "yarn.app.mapreduce.am.env" = "HADOOP_MAPRED_HOME=${cfg.package}/lib/${cfg.package.untarDir}";
@@ -54,18 +80,25 @@ with lib;
5480 }
5581 '';
5682 type = types.attrsOf types.anything;
83+ description = ''
84+ Default options for mapred-site.xml
85+ '';
86+ };
87+ mapredSite = mkOption {
88+ default = {};
89+ type = types.attrsOf types.anything;
5790 example = literalExpression ''
58− options.services.hadoop.mapredSite.default // {
91+ {
5992 "mapreduce.map.java.opts" = "-Xmx900m -XX:+UseParallelGC";
6093 }
6194 '';
6295 description = ''
63− Hadoop mapred-site.xml definition
96+ Additional options and overrides for mapred-site.xml
6497 <link xlink:href="https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml"/>
6598 '';
6699 };
67100
68− yarnSite = mkOption {
101+ yarnSiteDefault = mkOption {
69102 default = {
70103 "yarn.nodemanager.admin-env" = "PATH=$PATH";
71104 "yarn.nodemanager.aux-services" = "mapreduce_shuffle";
@@ -77,19 +110,34 @@ with lib;
77110 "yarn.nodemanager.linux-container-executor.path" = "/run/wrappers/yarn-nodemanager/bin/container-executor";
78111 "yarn.nodemanager.log-dirs" = "/var/log/hadoop/yarn/nodemanager";
79112 "yarn.resourcemanager.bind-host" = "0.0.0.0";
80− "yarn.resourcemanager.scheduler.class" = "org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler";
113+ "yarn.resourcemanager.scheduler.class" = "org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler";
81114 };
82115 type = types.attrsOf types.anything;
116+ description = ''
117+ Default options for yarn-site.xml
118+ '';
119+ };
120+ yarnSite = mkOption {
121+ default = {};
122+ type = types.attrsOf types.anything;
83123 example = literalExpression ''
84− options.services.hadoop.yarnSite.default // {
124+ {
85125 "yarn.resourcemanager.hostname" = "''${config.networking.hostName}";
86126 }
87127 '';
88128 description = ''
89− Hadoop yarn-site.xml definition
129+ Additional options and overrides for yarn-site.xml
90130 <link xlink:href="https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml"/>
91131 '';
92132 };
133+ yarnSiteInternal = mkOption {
134+ default = {};
135+ type = types.attrsOf types.anything;
136+ internal = true;
137+ description = ''
138+ Internal option to add configs to yarn-site.xml based on module options
139+ '';
140+ };
93141
94142 httpfsSite = mkOption {
95143 default = { };
@@ -123,6 +171,7 @@ with lib;
123171 "yarn.nodemanager.linux-container-executor.group"="hadoop";
124172 "min.user.id"=1000;
125173 "feature.terminal.enabled"=1;
174+ "feature.mount-cgroup.enabled" = 1;
126175 };
127176 type = types.attrsOf types.anything;
128177 example = literalExpression ''
@@ -148,6 +197,8 @@ with lib;
148197 description = "Directories containing additional config files to be added to HADOOP_CONF_DIR";
149198 };
150199
200+ gatewayRole.enable = mkEnableOption "gateway role for deploying hadoop configs";
201+
151202 package = mkOption {
152203 type = types.package;
153204 default = pkgs.hadoop;
@@ -157,20 +208,16 @@ with lib;
157208 };
158209
159210
160− config = mkMerge [
161− (mkIf (builtins.hasAttr "yarn" config.users.users ||
162− builtins.hasAttr "hdfs" config.users.users ||
163− builtins.hasAttr "httpfs" config.users.users) {
164− users.groups.hadoop = {
165− gid = config.ids.gids.hadoop;
166− };
167− environment = {
168− systemPackages = [ cfg.package ];
169− etc."hadoop-conf".source = let
170− hadoopConf = "${import ./conf.nix { inherit cfg pkgs lib; }}/";
171− in "${hadoopConf}";
172− };
173− })
174−
175− ];
211+ config = mkIf cfg.gatewayRole.enable {
212+ users.groups.hadoop = {
213+ gid = config.ids.gids.hadoop;
214+ };
215+ environment = {
216+ systemPackages = [ cfg.package ];
217+ etc."hadoop-conf".source = let
218+ hadoopConf = "${import ./conf.nix { inherit cfg pkgs lib; }}/";
219+ in "${hadoopConf}";
220+ variables.HADOOP_CONF_DIR = "/etc/hadoop-conf/";
221+ };
222+ };
176223}
nixos/modules/services/cluster/hadoop/hdfs.nix+148−147
@@ -1,191 +1,191 @@
1−{ config, lib, pkgs, ...}:
1+{ config, lib, pkgs, ... }:
22with lib;
33let
44 cfg = config.services.hadoop;
5+
6+ # Config files for hadoop services
57 hadoopConf = "${import ./conf.nix { inherit cfg pkgs lib; }}/";
6− restartIfChanged = mkOption {
7− type = types.bool;
8− description = ''
9− Automatically restart the service on config change.
10− This can be set to false to defer restarts on clusters running critical applications.
11− Please consider the security implications of inadvertently running an older version,
12− and the possibility of unexpected behavior caused by inconsistent versions across a cluster when disabling this option.
13− '';
14− default = false;
15− };
8+
9+ # Generator for HDFS service options
10+ hadoopServiceOption = { serviceName, firewallOption ? true, extraOpts ? null }: {
11+ enable = mkEnableOption serviceName;
12+ restartIfChanged = mkOption {
13+ type = types.bool;
14+ description = ''
15+ Automatically restart the service on config change.
16+ This can be set to false to defer restarts on clusters running critical applications.
17+ Please consider the security implications of inadvertently running an older version,
18+ and the possibility of unexpected behavior caused by inconsistent versions across a cluster when disabling this option.
19+ '';
20+ default = false;
21+ };
22+ extraFlags = mkOption{
23+ type = with types; listOf str;
24+ default = [];
25+ description = "Extra command line flags to pass to ${serviceName}";
26+ example = [
27+ "-Dcom.sun.management.jmxremote"
28+ "-Dcom.sun.management.jmxremote.port=8010"
29+ ];
30+ };
31+ extraEnv = mkOption{
32+ type = with types; attrsOf str;
33+ default = {};
34+ description = "Extra environment variables for ${serviceName}";
35+ };
36+ } // (optionalAttrs firewallOption {
37+ openFirewall = mkOption {
38+ type = types.bool;
39+ default = false;
40+ description = "Open firewall ports for ${serviceName}.";
41+ };
42+ }) // (optionalAttrs (extraOpts != null) extraOpts);
43+
44+ # Generator for HDFS service configs
45+ hadoopServiceConfig =
46+ { name
47+ , serviceOptions ? cfg.hdfs."${toLower name}"
48+ , description ? "Hadoop HDFS ${name}"
49+ , User ? "hdfs"
50+ , allowedTCPPorts ? [ ]
51+ , preStart ? ""
52+ , environment ? { }
53+ , extraConfig ? { }
54+ }: (
55+
56+ mkIf serviceOptions.enable ( mkMerge [{
57+ systemd.services."hdfs-${toLower name}" = {
58+ inherit description preStart;
59+ environment = environment // serviceOptions.extraEnv;
60+ wantedBy = [ "multi-user.target" ];
61+ inherit (serviceOptions) restartIfChanged;
62+ serviceConfig = {
63+ inherit User;
64+ SyslogIdentifier = "hdfs-${toLower name}";
65+ ExecStart = "${cfg.package}/bin/hdfs --config ${hadoopConf} ${toLower name} ${escapeShellArgs serviceOptions.extraFlags}";
66+ Restart = "always";
67+ };
68+ };
69+
70+ services.hadoop.gatewayRole.enable = true;
71+
72+ networking.firewall.allowedTCPPorts = mkIf
73+ ((builtins.hasAttr "openFirewall" serviceOptions) && serviceOptions.openFirewall)
74+ allowedTCPPorts;
75+ } extraConfig])
76+ );
77+
1678in
1779{
1880 options.services.hadoop.hdfs = {
19− namenode = {
20− enable = mkEnableOption "Whether to run the HDFS NameNode";
81+
82+ namenode = hadoopServiceOption { serviceName = "HDFS NameNode"; } // {
2183 formatOnInit = mkOption {
2284 type = types.bool;
2385 default = false;
2486 description = ''
25− Format HDFS namenode on first start. This is useful for quickly spinning up ephemeral HDFS clusters with a single namenode.
26− For HA clusters, initialization involves multiple steps across multiple nodes. Follow [this guide](https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html)
27− to initialize an HA cluster manually.
28− '';
29− };
30− inherit restartIfChanged;
31− openFirewall = mkOption {
32− type = types.bool;
33− default = true;
34− description = ''
35− Open firewall ports for namenode
36− '';
37− };
38− };
39− datanode = {
40− enable = mkEnableOption "Whether to run the HDFS DataNode";
41− inherit restartIfChanged;
42− openFirewall = mkOption {
43− type = types.bool;
44− default = true;
45− description = ''
46− Open firewall ports for datanode
87+ Format HDFS namenode on first start. This is useful for quickly spinning up
88+ ephemeral HDFS clusters with a single namenode.
89+ For HA clusters, initialization involves multiple steps across multiple nodes.
90+ Follow this guide to initialize an HA cluster manually:
91+ <link xlink:href="https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html"/>
4792 '';
4893 };
4994 };
50− journalnode = {
51− enable = mkEnableOption "Whether to run the HDFS JournalNode";
52− inherit restartIfChanged;
53− openFirewall = mkOption {
54− type = types.bool;
55− default = true;
56− description = ''
57− Open firewall ports for journalnode
58− '';
95+
96+ datanode = hadoopServiceOption { serviceName = "HDFS DataNode"; } // {
97+ dataDirs = mkOption {
98+ default = null;
99+ description = "Tier and path definitions for datanode storage.";
100+ type = with types; nullOr (listOf (submodule {
101+ options = {
102+ type = mkOption {
103+ type = enum [ "SSD" "DISK" "ARCHIVE" "RAM_DISK" ];
104+ description = ''
105+ Storage types ([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]) for HDFS storage policies.
106+ '';
107+ };
108+ path = mkOption {
109+ type = path;
110+ example = [ "/var/lib/hadoop/hdfs/dn" ];
111+ description = "Determines where on the local filesystem a data node should store its blocks.";
112+ };
113+ };
114+ }));
59115 };
60116 };
61− zkfc = {
62− enable = mkEnableOption "Whether to run the HDFS ZooKeeper failover controller";
63− inherit restartIfChanged;
117+
118+ journalnode = hadoopServiceOption { serviceName = "HDFS JournalNode"; };
119+
120+ zkfc = hadoopServiceOption {
121+ serviceName = "HDFS ZooKeeper failover controller";
122+ firewallOption = false;
64123 };
65− httpfs = {
66− enable = mkEnableOption "Whether to run the HDFS HTTPfs server";
124+
125+ httpfs = hadoopServiceOption { serviceName = "HDFS JournalNode"; } // {
67126 tempPath = mkOption {
68127 type = types.path;
69128 default = "/tmp/hadoop/httpfs";
70− description = ''
71− HTTPFS_TEMP path used by HTTPFS
72− '';
73− };
74− inherit restartIfChanged;
75− openFirewall = mkOption {
76− type = types.bool;
77− default = true;
78− description = ''
79− Open firewall ports for HTTPFS
80− '';
129+ description = "HTTPFS_TEMP path used by HTTPFS";
81130 };
82131 };
132+
83133 };
84134
85135 config = mkMerge [
86− (mkIf cfg.hdfs.namenode.enable {
87− systemd.services.hdfs-namenode = {
88− description = "Hadoop HDFS NameNode";
89− wantedBy = [ "multi-user.target" ];
90− inherit (cfg.hdfs.namenode) restartIfChanged;
91−
92− preStart = (mkIf cfg.hdfs.namenode.formatOnInit ''
93− ${cfg.package}/bin/hdfs --config ${hadoopConf} namenode -format -nonInteractive || true
94− '');
95−
96− serviceConfig = {
97− User = "hdfs";
98− SyslogIdentifier = "hdfs-namenode";
99− ExecStart = "${cfg.package}/bin/hdfs --config ${hadoopConf} namenode";
100− Restart = "always";
101− };
102− };
103−
104− networking.firewall.allowedTCPPorts = (mkIf cfg.hdfs.namenode.openFirewall [
136+ (hadoopServiceConfig {
137+ name = "NameNode";
138+ allowedTCPPorts = [
105139 9870 # namenode.http-address
106140 8020 # namenode.rpc-address
107− 8022 # namenode. servicerpc-address
108− ]);
141+ 8022 # namenode.servicerpc-address
142+ 8019 # dfs.ha.zkfc.port
143+ ];
144+ preStart = (mkIf cfg.hdfs.namenode.formatOnInit
145+ "${cfg.package}/bin/hdfs --config ${hadoopConf} namenode -format -nonInteractive || true"
146+ );
109147 })
110− (mkIf cfg.hdfs.datanode.enable {
111− systemd.services.hdfs-datanode = {
112− description = "Hadoop HDFS DataNode";
113− wantedBy = [ "multi-user.target" ];
114− inherit (cfg.hdfs.datanode) restartIfChanged;
115−
116− serviceConfig = {
117− User = "hdfs";
118− SyslogIdentifier = "hdfs-datanode";
119− ExecStart = "${cfg.package}/bin/hdfs --config ${hadoopConf} datanode";
120− Restart = "always";
121− };
122− };
123148
124− networking.firewall.allowedTCPPorts = (mkIf cfg.hdfs.datanode.openFirewall [
149+ (hadoopServiceConfig {
150+ name = "DataNode";
151+ # port numbers for datanode changed between hadoop 2 and 3
152+ allowedTCPPorts = if versionAtLeast cfg.package.version "3" then [
125153 9864 # datanode.http.address
126154 9866 # datanode.address
127155 9867 # datanode.ipc.address
128− ]);
156+ ] else [
157+ 50075 # datanode.http.address
158+ 50010 # datanode.address
159+ 50020 # datanode.ipc.address
160+ ];
161+ extraConfig.services.hadoop.hdfsSiteInternal."dfs.datanode.data.dir" = let d = cfg.hdfs.datanode.dataDirs; in
162+ if (d!= null) then (concatMapStringsSep "," (x: "["+x.type+"]file://"+x.path) cfg.hdfs.datanode.dataDirs) else d;
129163 })
130− (mkIf cfg.hdfs.journalnode.enable {
131− systemd.services.hdfs-journalnode = {
132− description = "Hadoop HDFS JournalNode";
133− wantedBy = [ "multi-user.target" ];
134− inherit (cfg.hdfs.journalnode) restartIfChanged;
135−
136− serviceConfig = {
137− User = "hdfs";
138− SyslogIdentifier = "hdfs-journalnode";
139− ExecStart = "${cfg.package}/bin/hdfs --config ${hadoopConf} journalnode";
140− Restart = "always";
141− };
142− };
143164
144− networking.firewall.allowedTCPPorts = (mkIf cfg.hdfs.journalnode.openFirewall [
165+ (hadoopServiceConfig {
166+ name = "JournalNode";
167+ allowedTCPPorts = [
145168 8480 # dfs.journalnode.http-address
146169 8485 # dfs.journalnode.rpc-address
147− ]);
170+ ];
148171 })
149− (mkIf cfg.hdfs.zkfc.enable {
150− systemd.services.hdfs-zkfc = {
151− description = "Hadoop HDFS ZooKeeper failover controller";
152− wantedBy = [ "multi-user.target" ];
153− inherit (cfg.hdfs.zkfc) restartIfChanged;
154−
155− serviceConfig = {
156− User = "hdfs";
157− SyslogIdentifier = "hdfs-zkfc";
158− ExecStart = "${cfg.package}/bin/hdfs --config ${hadoopConf} zkfc";
159− Restart = "always";
160− };
161− };
162− })
163− (mkIf cfg.hdfs.httpfs.enable {
164− systemd.services.hdfs-httpfs = {
165− description = "Hadoop httpfs";
166− wantedBy = [ "multi-user.target" ];
167− inherit (cfg.hdfs.httpfs) restartIfChanged;
168−
169− environment.HTTPFS_TEMP = cfg.hdfs.httpfs.tempPath;
170172
171− preStart = ''
172− mkdir -p $HTTPFS_TEMP
173− '';
173+ (hadoopServiceConfig {
174+ name = "zkfc";
175+ description = "Hadoop HDFS ZooKeeper failover controller";
176+ })
174177
175− serviceConfig = {
176− User = "httpfs";
177− SyslogIdentifier = "hdfs-httpfs";
178− ExecStart = "${cfg.package}/bin/hdfs --config ${hadoopConf} httpfs";
179− Restart = "always";
180− };
181− };
182− networking.firewall.allowedTCPPorts = (mkIf cfg.hdfs.httpfs.openFirewall [
178+ (hadoopServiceConfig {
179+ name = "HTTPFS";
180+ environment.HTTPFS_TEMP = cfg.hdfs.httpfs.tempPath;
181+ preStart = "mkdir -p $HTTPFS_TEMP";
182+ User = "httpfs";
183+ allowedTCPPorts = [
183184 14000 # httpfs.http.port
184− ]);
185+ ];
185186 })
186− (mkIf (
187− cfg.hdfs.namenode.enable || cfg.hdfs.datanode.enable || cfg.hdfs.journalnode.enable || cfg.hdfs.zkfc.enable
188− ) {
187+
188+ (mkIf cfg.gatewayRole.enable {
189189 users.users.hdfs = {
190190 description = "Hadoop HDFS user";
191191 group = "hadoop";
@@ -199,5 +199,6 @@ in
199199 isSystemUser = true;
200200 };
201201 })
202+
202203 ];
203204}
nixos/modules/services/cluster/hadoop/yarn.nix+85−13
@@ -13,23 +13,77 @@ let
1313 '';
1414 default = false;
1515 };
16+ extraFlags = mkOption{
17+ type = with types; listOf str;
18+ default = [];
19+ description = "Extra command line flags to pass to the service";
20+ example = [
21+ "-Dcom.sun.management.jmxremote"
22+ "-Dcom.sun.management.jmxremote.port=8010"
23+ ];
24+ };
25+ extraEnv = mkOption{
26+ type = with types; attrsOf str;
27+ default = {};
28+ description = "Extra environment variables";
29+ };
1630in
1731{
1832 options.services.hadoop.yarn = {
1933 resourcemanager = {
20− enable = mkEnableOption "Whether to run the Hadoop YARN ResourceManager";
21− inherit restartIfChanged;
34+ enable = mkEnableOption "Hadoop YARN ResourceManager";
35+ inherit restartIfChanged extraFlags extraEnv;
36+
2237 openFirewall = mkOption {
2338 type = types.bool;
24− default = true;
39+ default = false;
2540 description = ''
2641 Open firewall ports for resourcemanager
2742 '';
2843 };
2944 };
3045 nodemanager = {
31− enable = mkEnableOption "Whether to run the Hadoop YARN NodeManager";
32− inherit restartIfChanged;
46+ enable = mkEnableOption "Hadoop YARN NodeManager";
47+ inherit restartIfChanged extraFlags extraEnv;
48+
49+ resource = {
50+ cpuVCores = mkOption {
51+ description = "Number of vcores that can be allocated for containers.";
52+ type = with types; nullOr ints.positive;
53+ default = null;
54+ };
55+ maximumAllocationVCores = mkOption {
56+ description = "The maximum virtual CPU cores any container can be allocated.";
57+ type = with types; nullOr ints.positive;
58+ default = null;
59+ };
60+ memoryMB = mkOption {
61+ description = "Amount of physical memory, in MB, that can be allocated for containers.";
62+ type = with types; nullOr ints.positive;
63+ default = null;
64+ };
65+ maximumAllocationMB = mkOption {
66+ description = "The maximum physical memory any container can be allocated.";
67+ type = with types; nullOr ints.positive;
68+ default = null;
69+ };
70+ };
71+
72+ useCGroups = mkOption {
73+ type = types.bool;
74+ default = true;
75+ description = ''
76+ Use cgroups to enforce resource limits on containers
77+ '';
78+ };
79+
80+ localDir = mkOption {
81+ description = "List of directories to store localized files in.";
82+ type = with types; nullOr (listOf path);
83+ example = [ "/var/lib/hadoop/yarn/nm" ];
84+ default = null;
85+ };
86+
3387 addBinBash = mkOption {
3488 type = types.bool;
3589 default = true;
@@ -39,7 +93,7 @@ in
3993 };
4094 openFirewall = mkOption {
4195 type = types.bool;
42− default = true;
96+ default = false;
4397 description = ''
4498 Open firewall ports for nodemanager.
4599 Because containers can listen on any ephemeral port, TCP ports 1024–65535 will be opened.
@@ -49,10 +103,7 @@ in
49103 };
50104
51105 config = mkMerge [
52− (mkIf (
53− cfg.yarn.resourcemanager.enable || cfg.yarn.nodemanager.enable
54− ) {
55−
106+ (mkIf cfg.gatewayRole.enable {
56107 users.users.yarn = {
57108 description = "Hadoop YARN user";
58109 group = "hadoop";
@@ -65,15 +116,19 @@ in
65116 description = "Hadoop YARN ResourceManager";
66117 wantedBy = [ "multi-user.target" ];
67118 inherit (cfg.yarn.resourcemanager) restartIfChanged;
119+ environment = cfg.yarn.resourcemanager.extraEnv;
68120
69121 serviceConfig = {
70122 User = "yarn";
71123 SyslogIdentifier = "yarn-resourcemanager";
72124 ExecStart = "${cfg.package}/bin/yarn --config ${hadoopConf} " +
73− " resourcemanager";
125+ " resourcemanager ${escapeShellArgs cfg.yarn.resourcemanager.extraFlags}";
74126 Restart = "always";
75127 };
76128 };
129+
130+ services.hadoop.gatewayRole.enable = true;
131+
77132 networking.firewall.allowedTCPPorts = (mkIf cfg.yarn.resourcemanager.openFirewall [
78133 8088 # resourcemanager.webapp.address
79134 8030 # resourcemanager.scheduler.address
@@ -94,6 +149,7 @@ in
94149 description = "Hadoop YARN NodeManager";
95150 wantedBy = [ "multi-user.target" ];
96151 inherit (cfg.yarn.nodemanager) restartIfChanged;
152+ environment = cfg.yarn.nodemanager.extraEnv;
97153
98154 preStart = ''
99155 # create log dir
@@ -101,8 +157,9 @@ in
101157 chown yarn:hadoop /var/log/hadoop/yarn/nodemanager
102158
103159 # set up setuid container executor binary
160+ umount /run/wrappers/yarn-nodemanager/cgroup/cpu || true
104161 rm -rf /run/wrappers/yarn-nodemanager/ || true
105− mkdir -p /run/wrappers/yarn-nodemanager/{bin,etc/hadoop}
162+ mkdir -p /run/wrappers/yarn-nodemanager/{bin,etc/hadoop,cgroup/cpu}
106163 cp ${cfg.package}/lib/${cfg.package.untarDir}/bin/container-executor /run/wrappers/yarn-nodemanager/bin/
107164 chgrp hadoop /run/wrappers/yarn-nodemanager/bin/container-executor
108165 chmod 6050 /run/wrappers/yarn-nodemanager/bin/container-executor
@@ -114,11 +171,26 @@ in
114171 SyslogIdentifier = "yarn-nodemanager";
115172 PermissionsStartOnly = true;
116173 ExecStart = "${cfg.package}/bin/yarn --config ${hadoopConf} " +
117− " nodemanager";
174+ " nodemanager ${escapeShellArgs cfg.yarn.nodemanager.extraFlags}";
118175 Restart = "always";
119176 };
120177 };
121178
179+ services.hadoop.gatewayRole.enable = true;
180+
181+ services.hadoop.yarnSiteInternal = with cfg.yarn.nodemanager; {
182+ "yarn.nodemanager.local-dirs" = localDir;
183+ "yarn.scheduler.maximum-allocation-vcores" = resource.maximumAllocationVCores;
184+ "yarn.scheduler.maximum-allocation-mb" = resource.maximumAllocationMB;
185+ "yarn.nodemanager.resource.cpu-vcores" = resource.cpuVCores;
186+ "yarn.nodemanager.resource.memory-mb" = resource.memoryMB;
187+ } // mkIf useCGroups {
188+ "yarn.nodemanager.linux-container-executor.cgroups.hierarchy" = "/hadoop-yarn";
189+ "yarn.nodemanager.linux-container-executor.resources-handler.class" = "org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler";
190+ "yarn.nodemanager.linux-container-executor.cgroups.mount" = "true";
191+ "yarn.nodemanager.linux-container-executor.cgroups.mount-path" = "/run/wrappers/yarn-nodemanager/cgroup";
192+ };
193+
122194 networking.firewall.allowedTCPPortRanges = [
123195 (mkIf (cfg.yarn.nodemanager.openFirewall) {from = 1024; to = 65535;})
124196 ];
nixos/modules/services/cluster/k3s/default.nix+1−5
@@ -91,11 +91,6 @@ in
9191 virtualisation.docker = mkIf cfg.docker {
9292 enable = mkDefault true;
9393 };
94−
95− # TODO: disable this once k3s supports cgroupsv2, either by docker
96− # supporting it, or their bundled containerd
97− systemd.enableUnifiedCgroupHierarchy = false;
98−
9994 environment.systemPackages = [ config.services.k3s.package ];
10095
10196 systemd.services.k3s = {
@@ -119,6 +114,7 @@ in
119114 [
120115 "${cfg.package}/bin/k3s ${cfg.role}"
121116 ] ++ (optional cfg.docker "--docker")
117+ ++ (optional (cfg.docker && config.systemd.enableUnifiedCgroupHierarchy) "--kubelet-arg=cgroup-driver=systemd")
122118 ++ (optional cfg.disableAgent "--disable-agent")
123119 ++ (optional (cfg.serverAddr != "") "--server ${cfg.serverAddr}")
124120 ++ (optional (cfg.token != "") "--token ${cfg.token}")
nixos/modules/services/cluster/kubernetes/pki.nix+1−1
@@ -266,7 +266,7 @@ in
266266 in
267267 ''
268268 export KUBECONFIG=${clusterAdminKubeconfig}
269− ${kubectl}/bin/kubectl apply -f ${concatStringsSep " \\\n -f " files}
269+ ${kubernetes}/bin/kubectl apply -f ${concatStringsSep " \\\n -f " files}
270270 '';
271271 })]);
272272
nixos/modules/services/cluster/pacemaker/default.nixnew file+52
@@ -0,0 +1,52 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+let
5+ cfg = config.services.pacemaker;
6+in
7+{
8+ # interface
9+ options.services.pacemaker = {
10+ enable = mkEnableOption "pacemaker";
11+
12+ package = mkOption {
13+ type = types.package;
14+ default = pkgs.pacemaker;
15+ defaultText = literalExpression "pkgs.pacemaker";
16+ description = "Package that should be used for pacemaker.";
17+ };
18+ };
19+
20+ # implementation
21+ config = mkIf cfg.enable {
22+ assertions = [ {
23+ assertion = config.services.corosync.enable;
24+ message = ''
25+ Enabling services.pacemaker requires a services.corosync configuration.
26+ '';
27+ } ];
28+
29+ environment.systemPackages = [ cfg.package ];
30+
31+ # required by pacemaker
32+ users.users.hacluster = {
33+ isSystemUser = true;
34+ group = "pacemaker";
35+ home = "/var/lib/pacemaker";
36+ };
37+ users.groups.pacemaker = {};
38+
39+ systemd.tmpfiles.rules = [
40+ "d /var/log/pacemaker 0700 hacluster pacemaker -"
41+ ];
42+
43+ systemd.packages = [ cfg.package ];
44+ systemd.services.pacemaker = {
45+ wantedBy = [ "multi-user.target" ];
46+ serviceConfig = {
47+ StateDirectory = "pacemaker";
48+ StateDirectoryMode = "0700";
49+ };
50+ };
51+ };
52+}
nixos/modules/services/continuous-integration/buildbot/master.nix+2−2
@@ -64,7 +64,7 @@ in {
6464 description = "Factory Steps";
6565 default = [];
6666 example = [
67− "steps.Git(repourl='git://github.com/buildbot/pyflakes.git', mode='incremental')"
67+ "steps.Git(repourl='https://github.com/buildbot/pyflakes.git', mode='incremental')"
6868 "steps.ShellCommand(command=['trial', 'pyflakes'])"
6969 ];
7070 };
@@ -74,7 +74,7 @@ in {
7474 description = "List of Change Sources.";
7575 default = [];
7676 example = [
77− "changes.GitPoller('git://github.com/buildbot/pyflakes.git', workdir='gitpoller-workdir', branch='master', pollinterval=300)"
77+ "changes.GitPoller('https://github.com/buildbot/pyflakes.git', workdir='gitpoller-workdir', branch='master', pollinterval=300)"
7878 ];
7979 };
8080
nixos/modules/services/continuous-integration/github-runner.nix+18
@@ -34,6 +34,14 @@ in
3434 Repository to add the runner to.
3535
3636 Changing this option triggers a new runner registration.
37+
38+ IMPORTANT: If your token is org-wide (not per repository), you need to
39+ provide a github org link, not a single repository, so do it like this
40+ <literal>https://github.com/nixos</literal>, not like this
41+ <literal>https://github.com/nixos/nixpkgs</literal>.
42+ Otherwise, you are going to get a <literal>404 NotFound</literal>
43+ from <literal>POST https://api.github.com/actions/runner-registration</literal>
44+ in the configure script.
3745 '';
3846 example = "https://github.com/nixos/nixpkgs";
3947 };
@@ -291,6 +299,16 @@ in
291299 RestrictRealtime = true;
292300 RestrictSUIDSGID = true;
293301 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" ];
294312
295313 # Needs network access
296314 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/databases/redis.nix+8−5
@@ -81,7 +81,9 @@ in {
8181 user = mkOption {
8282 type = types.str;
8383 default = redisName name;
84− defaultText = "\"redis\" or \"redis-\${name}\" if name != \"\"";
84+ defaultText = literalExpression ''
85+ if name == "" then "redis" else "redis-''${name}"
86+ '';
8587 description = "The username and groupname for redis-server.";
8688 };
8789
@@ -105,8 +107,7 @@ in {
105107
106108 bind = mkOption {
107109 type = with types; nullOr str;
108− default = if name == "" then "127.0.0.1" else null;
109− defaultText = literalExpression ''if name == "" then "127.0.0.1" else null'';
110+ default = "127.0.0.1";
110111 description = ''
111112 The IP interface to bind to.
112113 <literal>null</literal> means "all interfaces".
@@ -117,7 +118,9 @@ in {
117118 unixSocket = mkOption {
118119 type = with types; nullOr path;
119120 default = "/run/${redisName name}/redis.sock";
120− defaultText = "\"/run/redis/redis.sock\" or \"/run/redis-\${name}/redis.sock\" if name != \"\"";
121+ defaultText = literalExpression ''
122+ if name == "" then "/run/redis/redis.sock" else "/run/redis-''${name}/redis.sock"
123+ '';
121124 description = "The path to the socket to bind to.";
122125 };
123126
@@ -370,7 +373,7 @@ in {
370373 ProtectKernelTunables = true;
371374 ProtectControlGroups = true;
372375 RestrictAddressFamilies =
373− optionals (conf.bind != null) ["AF_INET" "AF_INET6"] ++
376+ optionals (conf.port != 0) ["AF_INET" "AF_INET6"] ++
374377 optional (conf.unixSocket != null) "AF_UNIX";
375378 RestrictNamespaces = true;
376379 LockPersonality = true;
nixos/modules/services/databases/virtuoso.nixdeleted−99
@@ -1,99 +0,0 @@
1−{ config, lib, pkgs, ... }:
2−let
3− cfg = config.services.virtuoso;
4− virtuosoUser = "virtuoso";
5− stateDir = "/var/lib/virtuoso";
6−in
7−with lib;
8−{
9−
10− ###### interface
11−
12− options = {
13−
14− services.virtuoso = {
15−
16− enable = mkEnableOption "Virtuoso Opensource database server";
17−
18− config = mkOption {
19− type = types.lines;
20− default = "";
21− description = "Extra options to put into Virtuoso configuration file.";
22− };
23−
24− parameters = mkOption {
25− type = types.lines;
26− default = "";
27− description = "Extra options to put into [Parameters] section of Virtuoso configuration file.";
28− };
29−
30− listenAddress = mkOption {
31− type = types.str;
32− default = "1111";
33− example = "myserver:1323";
34− description = "ip:port or port to listen on.";
35− };
36−
37− httpListenAddress = mkOption {
38− type = types.nullOr types.str;
39− default = null;
40− example = "myserver:8080";
41− description = "ip:port or port for Virtuoso HTTP server to listen on.";
42− };
43−
44− dirsAllowed = mkOption {
45− type = types.nullOr types.str; # XXX Maybe use a list in the future?
46− default = null;
47− example = "/www, /home/";
48− description = "A list of directories Virtuoso is allowed to access";
49− };
50− };
51−
52− };
53−
54−
55− ###### implementation
56−
57− config = mkIf cfg.enable {
58−
59− users.users.${virtuosoUser} =
60− { uid = config.ids.uids.virtuoso;
61− description = "virtuoso user";
62− home = stateDir;
63− };
64−
65− systemd.services.virtuoso = {
66− after = [ "network.target" ];
67− wantedBy = [ "multi-user.target" ];
68−
69− preStart = ''
70− mkdir -p ${stateDir}
71− chown ${virtuosoUser} ${stateDir}
72− '';
73−
74− script = ''
75− cd ${stateDir}
76− ${pkgs.virtuoso}/bin/virtuoso-t +foreground +configfile ${pkgs.writeText "virtuoso.ini" cfg.config}
77− '';
78− };
79−
80− services.virtuoso.config = ''
81− [Database]
82− DatabaseFile=${stateDir}/x-virtuoso.db
83− TransactionFile=${stateDir}/x-virtuoso.trx
84− ErrorLogFile=${stateDir}/x-virtuoso.log
85− xa_persistent_file=${stateDir}/x-virtuoso.pxa
86−
87− [Parameters]
88− ServerPort=${cfg.listenAddress}
89− RunAs=${virtuosoUser}
90− ${optionalString (cfg.dirsAllowed != null) "DirsAllowed=${cfg.dirsAllowed}"}
91− ${cfg.parameters}
92−
93− [HTTPServer]
94− ${optionalString (cfg.httpListenAddress != null) "ServerPort=${cfg.httpListenAddress}"}
95− '';
96−
97− };
98−
99−}
nixos/modules/services/desktops/flatpak.nix+2
@@ -30,6 +30,8 @@ in {
3030
3131 environment.systemPackages = [ pkgs.flatpak ];
3232
33+ security.polkit.enable = true;
34+
3335 services.dbus.packages = [ pkgs.flatpak ];
3436
3537 systemd.packages = [ pkgs.flatpak ];
nixos/modules/services/desktops/pipewire/daemon/client-rt.conf.json+1−1
@@ -8,7 +8,7 @@
88 },
99 "context.modules": [
1010 {
11− "name": "libpipewire-module-rtkit",
11+ "name": "libpipewire-module-rt",
1212 "args": {},
1313 "flags": [
1414 "ifexists",
nixos/modules/services/desktops/pipewire/daemon/minimal.conf.jsonnew file+118
@@ -0,0 +1,118 @@
1+{
2+ "context.properties": {
3+ "link.max-buffers": 16,
4+ "core.daemon": true,
5+ "core.name": "pipewire-0",
6+ "settings.check-quantum": true,
7+ "settings.check-rate": true,
8+ "vm.overrides": {
9+ "default.clock.min-quantum": 1024
10+ }
11+ },
12+ "context.spa-libs": {
13+ "audio.convert.*": "audioconvert/libspa-audioconvert",
14+ "api.alsa.*": "alsa/libspa-alsa",
15+ "support.*": "support/libspa-support"
16+ },
17+ "context.modules": [
18+ {
19+ "name": "libpipewire-module-rt",
20+ "args": {
21+ "nice.level": -11
22+ },
23+ "flags": [
24+ "ifexists",
25+ "nofail"
26+ ]
27+ },
28+ {
29+ "name": "libpipewire-module-protocol-native"
30+ },
31+ {
32+ "name": "libpipewire-module-profiler"
33+ },
34+ {
35+ "name": "libpipewire-module-metadata"
36+ },
37+ {
38+ "name": "libpipewire-module-spa-node-factory"
39+ },
40+ {
41+ "name": "libpipewire-module-client-node"
42+ },
43+ {
44+ "name": "libpipewire-module-access",
45+ "args": {}
46+ },
47+ {
48+ "name": "libpipewire-module-adapter"
49+ },
50+ {
51+ "name": "libpipewire-module-link-factory"
52+ }
53+ ],
54+ "context.objects": [
55+ {
56+ "factory": "metadata",
57+ "args": {
58+ "metadata.name": "default"
59+ }
60+ },
61+ {
62+ "factory": "spa-node-factory",
63+ "args": {
64+ "factory.name": "support.node.driver",
65+ "node.name": "Dummy-Driver",
66+ "node.group": "pipewire.dummy",
67+ "priority.driver": 20000
68+ }
69+ },
70+ {
71+ "factory": "spa-node-factory",
72+ "args": {
73+ "factory.name": "support.node.driver",
74+ "node.name": "Freewheel-Driver",
75+ "priority.driver": 19000,
76+ "node.group": "pipewire.freewheel",
77+ "node.freewheel": true
78+ }
79+ },
80+ {
81+ "factory": "adapter",
82+ "args": {
83+ "factory.name": "api.alsa.pcm.source",
84+ "node.name": "system",
85+ "node.description": "system",
86+ "media.class": "Audio/Source",
87+ "api.alsa.path": "hw:0",
88+ "node.suspend-on-idle": true,
89+ "resample.disable": true,
90+ "channelmix.disable": true,
91+ "adapter.auto-port-config": {
92+ "mode": "dsp",
93+ "monitor": false,
94+ "position": "unknown"
95+ }
96+ }
97+ },
98+ {
99+ "factory": "adapter",
100+ "args": {
101+ "factory.name": "api.alsa.pcm.sink",
102+ "node.name": "system",
103+ "node.description": "system",
104+ "media.class": "Audio/Sink",
105+ "api.alsa.path": "hw:0",
106+ "node.suspend-on-idle": true,
107+ "resample.disable": true,
108+ "channelmix.disable": true,
109+ "adapter.auto-port-config": {
110+ "mode": "dsp",
111+ "monitor": false,
112+ "position": "unknown"
113+ }
114+ }
115+ }
116+ ],
117+ "context.exec": []
118+}
nixos/modules/services/desktops/pipewire/daemon/pipewire-pulse.conf.json+68−10
@@ -6,8 +6,10 @@
66 },
77 "context.modules": [
88 {
9− "name": "libpipewire-module-rtkit",
10− "args": {},
9+ "name": "libpipewire-module-rt",
10+ "args": {
11+ "nice.level": -11
12+ },
1113 "flags": [
1214 "ifexists",
1315 "nofail"
@@ -27,16 +29,72 @@
2729 },
2830 {
2931 "name": "libpipewire-module-protocol-pulse",
30− "args": {
31− "server.address": [
32− "unix:native"
33− ],
34− "vm.overrides": {
32+ "args": {}
33+ }
34+ ],
35+ "context.exec": [
36+ {
37+ "path": "pactl",
38+ "args": "load-module module-always-sink"
39+ }
40+ ],
41+ "stream.properties": {},
42+ "pulse.properties": {
43+ "server.address": [
44+ "unix:native"
45+ ],
46+ "vm.overrides": {
47+ "pulse.min.quantum": "1024/48000"
48+ }
49+ },
50+ "pulse.rules": [
51+ {
52+ "matches": [
53+ {}
54+ ],
55+ "actions": {
56+ "update-props": {}
57+ }
58+ },
59+ {
60+ "matches": [
61+ {
62+ "application.process.binary": "teams"
63+ },
64+ {
65+ "application.process.binary": "skypeforlinux"
66+ }
67+ ],
68+ "actions": {
69+ "quirks": [
70+ "force-s16-info"
71+ ]
72+ }
73+ },
74+ {
75+ "matches": [
76+ {
77+ "application.process.binary": "firefox"
78+ }
79+ ],
80+ "actions": {
81+ "quirks": [
82+ "remove-capture-dont-move"
83+ ]
84+ }
85+ },
86+ {
87+ "matches": [
88+ {
89+ "application.name": "~speech-dispatcher*"
90+ }
91+ ],
92+ "actions": {
93+ "update-props": {
94+ "pulse.min.req": "1024/48000",
3595 "pulse.min.quantum": "1024/48000"
3696 }
3797 }
3898 }
39− ],
40− "context.exec": [],
41− "stream.properties": {}
99+ ]
42100}
nixos/modules/services/desktops/pipewire/daemon/pipewire.conf.json+5−2
@@ -3,6 +3,7 @@
33 "link.max-buffers": 16,
44 "core.daemon": true,
55 "core.name": "pipewire-0",
6+ "default.clock.min-quantum": 16,
67 "vm.overrides": {
78 "default.clock.min-quantum": 1024
89 }
@@ -19,8 +20,10 @@
1920 },
2021 "context.modules": [
2122 {
22− "name": "libpipewire-module-rtkit",
23− "args": {},
23+ "name": "libpipewire-module-rt",
24+ "args": {
25+ "nice.level": -11
26+ },
2427 "flags": [
2528 "ifexists",
2629 "nofail"
nixos/modules/services/desktops/pipewire/pipewire-media-session.nix+11−7
@@ -38,9 +38,8 @@ in {
3838 services.pipewire.media-session = {
3939 enable = mkOption {
4040 type = types.bool;
41− default = config.services.pipewire.enable;
42− defaultText = literalExpression "config.services.pipewire.enable";
43− description = "Example pipewire session manager";
41+ default = false;
42+ description = "Whether to enable the deprecated example Pipewire session manager";
4443 };
4544
4645 package = mkOption {
@@ -59,7 +58,7 @@ in {
5958 Configuration for the media session core. For details see
6059 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/media-session.conf
6160 '';
62− default = {};
61+ default = defaults.media-session;
6362 };
6463
6564 alsa-monitor = mkOption {
@@ -68,7 +67,7 @@ in {
6867 Configuration for the alsa monitor. For details see
6968 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/alsa-monitor.conf
7069 '';
71− default = {};
70+ default = defaults.alsa-monitor;
7271 };
7372
7473 bluez-monitor = mkOption {
@@ -77,7 +76,7 @@ in {
7776 Configuration for the bluez5 monitor. For details see
7877 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/bluez-monitor.conf
7978 '';
80− default = {};
79+ default = defaults.bluez-monitor;
8180 };
8281
8382 v4l2-monitor = mkOption {
@@ -86,7 +85,7 @@ in {
8685 Configuration for the V4L2 monitor. For details see
8786 https://gitlab.freedesktop.org/pipewire/media-session/-/blob/${cfg.package.version}/src/daemon/media-session.d/v4l2-monitor.conf
8887 '';
89− default = {};
88+ default = defaults.v4l2-monitor;
9089 };
9190 };
9291 };
@@ -111,6 +110,11 @@ in {
111110 source = json.generate "v4l2-monitor.conf" configs.v4l2-monitor;
112111 };
113112
113+ environment.etc."pipewire/media-session.d/with-audio" =
114+ mkIf config.services.pipewire.audio.enable {
115+ text = "";
116+ };
117+
114118 environment.etc."pipewire/media-session.d/with-alsa" =
115119 mkIf config.services.pipewire.alsa.enable {
116120 text = "";
nixos/modules/services/desktops/pipewire/pipewire.nix+21−3
@@ -25,15 +25,18 @@ let
2525 client = lib.importJSON ./daemon/client.conf.json;
2626 client-rt = lib.importJSON ./daemon/client-rt.conf.json;
2727 jack = lib.importJSON ./daemon/jack.conf.json;
28+ minimal = lib.importJSON ./daemon/minimal.conf.json;
2829 pipewire = lib.importJSON ./daemon/pipewire.conf.json;
2930 pipewire-pulse = lib.importJSON ./daemon/pipewire-pulse.conf.json;
3031 };
3132
33+ useSessionManager = cfg.wireplumber.enable || cfg.media-session.enable;
34+
3235 configs = {
3336 client = recursiveUpdate defaults.client cfg.config.client;
3437 client-rt = recursiveUpdate defaults.client-rt cfg.config.client-rt;
3538 jack = recursiveUpdate defaults.jack cfg.config.jack;
36− pipewire = recursiveUpdate defaults.pipewire cfg.config.pipewire;
39+ pipewire = recursiveUpdate (if useSessionManager then defaults.pipewire else defaults.minimal) cfg.config.pipewire;
3740 pipewire-pulse = recursiveUpdate defaults.pipewire-pulse cfg.config.pipewire-pulse;
3841 };
3942in {
@@ -113,6 +116,16 @@ in {
113116 };
114117 };
115118
119+ audio = {
120+ enable = lib.mkOption {
121+ type = lib.types.bool;
122+ # this is for backwards compatibility
123+ default = cfg.alsa.enable || cfg.jack.enable || cfg.pulse.enable;
124+ defaultText = lib.literalExpression "config.services.pipewire.alsa.enable || config.services.pipewire.jack.enable || config.services.pipewire.pulse.enable";
125+ description = "Whether to use PipeWire as the primary sound server";
126+ };
127+ };
128+
116129 alsa = {
117130 enable = mkEnableOption "ALSA support";
118131 support32Bit = mkEnableOption "32-bit ALSA support on 64-bit systems";
@@ -149,13 +162,18 @@ in {
149162 config = mkIf cfg.enable {
150163 assertions = [
151164 {
152− assertion = cfg.pulse.enable -> !config.hardware.pulseaudio.enable;
153− message = "PipeWire based PulseAudio server emulation replaces PulseAudio. This option requires `hardware.pulseaudio.enable` to be set to false";
165+ assertion = cfg.audio.enable -> !config.hardware.pulseaudio.enable;
166+ message = "Using PipeWire as the sound server conflicts with PulseAudio. This option requires `hardware.pulseaudio.enable` to be set to false";
154167 }
155168 {
156169 assertion = cfg.jack.enable -> !config.services.jack.jackd.enable;
157170 message = "PipeWire based JACK emulation doesn't use the JACK service. This option requires `services.jack.jackd.enable` to be set to false";
158171 }
172+ {
173+ # JACK intentionally not checked, as PW-on-JACK setups are a thing that some people may want
174+ assertion = (cfg.alsa.enable || cfg.pulse.enable) -> cfg.audio.enable;
175+ message = "Using PipeWire's ALSA/PulseAudio compatibility layers requires running PipeWire as the sound server. Set `services.pipewire.audio.enable` to true.";
176+ }
159177 ];
160178
161179 environment.systemPackages = [ cfg.package ]
nixos/modules/services/desktops/pipewire/wireplumber.nix+18−5
@@ -1,22 +1,27 @@
11{ config, lib, pkgs, ... }:
22
33let
4− cfg = config.services.pipewire.wireplumber;
4+ pwCfg = config.services.pipewire;
5+ cfg = pwCfg.wireplumber;
6+ pwUsedForAudio = pwCfg.audio.enable;
57in
68{
79 meta.maintainers = [ lib.maintainers.k900 ];
810
911 options = {
1012 services.pipewire.wireplumber = {
11− enable = lib.mkEnableOption "A modular session / policy manager for PipeWire";
13+ enable = lib.mkOption {
14+ type = lib.types.bool;
15+ default = config.services.pipewire.enable;
16+ defaultText = lib.literalExpression "config.services.pipewire.enable";
17+ description = "Whether to enable Wireplumber, a modular session / policy manager for PipeWire";
18+ };
1219
1320 package = lib.mkOption {
1421 type = lib.types.package;
1522 default = pkgs.wireplumber;
1623 defaultText = lib.literalExpression "pkgs.wireplumber";
17− description = ''
18− The wireplumber derivation to use.
19− '';
24+ description = "The wireplumber derivation to use.";
2025 };
2126 };
2227 };
@@ -30,6 +35,14 @@ in
3035 ];
3136
3237 environment.systemPackages = [ cfg.package ];
38+
39+ environment.etc."wireplumber/main.lua.d/80-nixos.lua" = lib.mkIf (!pwUsedForAudio) {
40+ text = ''
41+ -- Pipewire is not used for audio, so prevent it from grabbing audio devices
42+ alsa_monitor.enable = function() end
43+ '';
44+ };
45+
3346 systemd.packages = [ cfg.package ];
3447
3548 systemd.services.wireplumber.enable = config.services.pipewire.systemWide;
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/development/zammad.nixnew file+323
@@ -0,0 +1,323 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+
5+let
6+ cfg = config.services.zammad;
7+ settingsFormat = pkgs.formats.yaml { };
8+ filterNull = filterAttrs (_: v: v != null);
9+ serviceConfig = {
10+ Type = "simple";
11+ Restart = "always";
12+
13+ User = "zammad";
14+ Group = "zammad";
15+ PrivateTmp = true;
16+ StateDirectory = "zammad";
17+ WorkingDirectory = cfg.dataDir;
18+ };
19+ environment = {
20+ RAILS_ENV = "production";
21+ NODE_ENV = "production";
22+ RAILS_SERVE_STATIC_FILES = "true";
23+ RAILS_LOG_TO_STDOUT = "true";
24+ };
25+ databaseConfig = settingsFormat.generate "database.yml" cfg.database.settings;
26+in
27+{
28+
29+ options = {
30+ services.zammad = {
31+ enable = mkEnableOption "Zammad, a web-based, open source user support/ticketing solution.";
32+
33+ package = mkOption {
34+ type = types.package;
35+ default = pkgs.zammad;
36+ defaultText = literalExpression "pkgs.zammad";
37+ description = "Zammad package to use.";
38+ };
39+
40+ dataDir = mkOption {
41+ type = types.path;
42+ default = "/var/lib/zammad";
43+ description = ''
44+ Path to a folder that will contain Zammad working directory.
45+ '';
46+ };
47+
48+ host = mkOption {
49+ type = types.str;
50+ default = "127.0.0.1";
51+ example = "192.168.23.42";
52+ description = "Host address.";
53+ };
54+
55+ openPorts = mkOption {
56+ type = types.bool;
57+ default = false;
58+ description = "Whether to open firewall ports for Zammad";
59+ };
60+
61+ port = mkOption {
62+ type = types.port;
63+ default = 3000;
64+ description = "Web service port.";
65+ };
66+
67+ websocketPort = mkOption {
68+ type = types.port;
69+ default = 6042;
70+ description = "Websocket service port.";
71+ };
72+
73+ database = {
74+ type = mkOption {
75+ type = types.enum [ "PostgreSQL" "MySQL" ];
76+ default = "PostgreSQL";
77+ example = "MySQL";
78+ description = "Database engine to use.";
79+ };
80+
81+ host = mkOption {
82+ type = types.nullOr types.str;
83+ default = {
84+ PostgreSQL = "/run/postgresql";
85+ MySQL = "localhost";
86+ }.${cfg.database.type};
87+ defaultText = literalExpression ''
88+ {
89+ PostgreSQL = "/run/postgresql";
90+ MySQL = "localhost";
91+ }.''${config.services.zammad.database.type};
92+ '';
93+ description = ''
94+ Database host address.
95+ '';
96+ };
97+
98+ port = mkOption {
99+ type = types.nullOr types.port;
100+ default = null;
101+ description = "Database port. Use <literal>null</literal> for default port.";
102+ };
103+
104+ name = mkOption {
105+ type = types.str;
106+ default = "zammad";
107+ description = ''
108+ Database name.
109+ '';
110+ };
111+
112+ user = mkOption {
113+ type = types.nullOr types.str;
114+ default = "zammad";
115+ description = "Database user.";
116+ };
117+
118+ passwordFile = mkOption {
119+ type = types.nullOr types.path;
120+ default = null;
121+ example = "/run/keys/zammad-dbpassword";
122+ description = ''
123+ A file containing the password for <option>services.zammad.database.user</option>.
124+ '';
125+ };
126+
127+ createLocally = mkOption {
128+ type = types.bool;
129+ default = true;
130+ description = "Whether to create a local database automatically.";
131+ };
132+
133+ settings = mkOption {
134+ type = settingsFormat.type;
135+ default = { };
136+ example = literalExpression ''
137+ {
138+ }
139+ '';
140+ description = ''
141+ The <filename>database.yml</filename> configuration file as key value set.
142+ See <link xlink:href='TODO' />
143+ for list of configuration parameters.
144+ '';
145+ };
146+ };
147+
148+ secretKeyBaseFile = mkOption {
149+ type = types.nullOr types.path;
150+ default = null;
151+ example = "/run/keys/secret_key_base";
152+ description = ''
153+ The path to a file containing the
154+ <literal>secret_key_base</literal> secret.
155+
156+ Zammad uses <literal>secret_key_base</literal> to encrypt
157+ the cookie store, which contains session data, and to digest
158+ user auth tokens.
159+
160+ Needs to be a 64 byte long string of hexadecimal
161+ characters. You can generate one by running
162+
163+ <screen>
164+ <prompt>$ </prompt>openssl rand -hex 64 >/path/to/secret_key_base_file
165+ </screen>
166+
167+ This should be a string, not a nix path, since nix paths are
168+ copied into the world-readable nix store.
169+ '';
170+ };
171+ };
172+ };
173+
174+ config = mkIf cfg.enable {
175+
176+ services.zammad.database.settings = {
177+ production = mapAttrs (_: v: mkDefault v) (filterNull {
178+ adapter = {
179+ PostgreSQL = "postgresql";
180+ MySQL = "mysql2";
181+ }.${cfg.database.type};
182+ database = cfg.database.name;
183+ pool = 50;
184+ timeout = 5000;
185+ encoding = "utf8";
186+ username = cfg.database.user;
187+ host = cfg.database.host;
188+ port = cfg.database.port;
189+ });
190+ };
191+
192+ networking.firewall.allowedTCPPorts = mkIf cfg.openPorts [
193+ config.services.zammad.port
194+ config.services.zammad.websocketPort
195+ ];
196+
197+ users.users.zammad = {
198+ isSystemUser = true;
199+ home = cfg.dataDir;
200+ group = "zammad";
201+ };
202+
203+ users.groups.zammad = { };
204+
205+ assertions = [
206+ {
207+ assertion = cfg.database.createLocally -> cfg.database.user == "zammad";
208+ message = "services.zammad.database.user must be set to \"zammad\" if services.zammad.database.createLocally is set to true";
209+ }
210+ {
211+ assertion = cfg.database.createLocally -> cfg.database.passwordFile == null;
212+ message = "a password cannot be specified if services.zammad.database.createLocally is set to true";
213+ }
214+ ];
215+
216+ services.mysql = optionalAttrs (cfg.database.createLocally && cfg.database.type == "MySQL") {
217+ enable = true;
218+ package = mkDefault pkgs.mariadb;
219+ ensureDatabases = [ cfg.database.name ];
220+ ensureUsers = [
221+ {
222+ name = cfg.database.user;
223+ ensurePermissions = { "${cfg.database.name}.*" = "ALL PRIVILEGES"; };
224+ }
225+ ];
226+ };
227+
228+ services.postgresql = optionalAttrs (cfg.database.createLocally && cfg.database.type == "PostgreSQL") {
229+ enable = true;
230+ ensureDatabases = [ cfg.database.name ];
231+ ensureUsers = [
232+ {
233+ name = cfg.database.user;
234+ ensurePermissions = { "DATABASE ${cfg.database.name}" = "ALL PRIVILEGES"; };
235+ }
236+ ];
237+ };
238+
239+ systemd.services.zammad-web = {
240+ inherit environment;
241+ serviceConfig = serviceConfig // {
242+ # loading all the gems takes time
243+ TimeoutStartSec = 1200;
244+ };
245+ after = [
246+ "network.target"
247+ "postgresql.service"
248+ ];
249+ requires = [
250+ "postgresql.service"
251+ ];
252+ description = "Zammad web";
253+ wantedBy = [ "multi-user.target" ];
254+ preStart = ''
255+ # Blindly copy the whole project here.
256+ chmod -R +w .
257+ rm -rf ./public/assets/*
258+ rm -rf ./tmp/*
259+ rm -rf ./log/*
260+ cp -r --no-preserve=owner ${cfg.package}/* .
261+ chmod -R +w .
262+ # config file
263+ cp ${databaseConfig} ./config/database.yml
264+ chmod -R +w .
265+ ${optionalString (cfg.database.passwordFile != null) ''
266+ {
267+ echo -n " password: "
268+ cat ${cfg.database.passwordFile}
269+ } >> ./config/database.yml
270+ ''}
271+ ${optionalString (cfg.secretKeyBaseFile != null) ''
272+ {
273+ echo "production: "
274+ echo -n " secret_key_base: "
275+ cat ${cfg.secretKeyBaseFile}
276+ } > ./config/secrets.yml
277+ ''}
278+
279+ if [ `${config.services.postgresql.package}/bin/psql \
280+ --host ${cfg.database.host} \
281+ ${optionalString
282+ (cfg.database.port != null)
283+ "--port ${toString cfg.database.port}"} \
284+ --username ${cfg.database.user} \
285+ --dbname ${cfg.database.name} \
286+ --command "SELECT COUNT(*) FROM pg_class c \
287+ JOIN pg_namespace s ON s.oid = c.relnamespace \
288+ WHERE s.nspname NOT IN ('pg_catalog', 'pg_toast', 'information_schema') \
289+ AND s.nspname NOT LIKE 'pg_temp%';" | sed -n 3p` -eq 0 ]; then
290+ echo "Initialize database"
291+ ./bin/rake --no-system db:migrate
292+ ./bin/rake --no-system db:seed
293+ else
294+ echo "Migrate database"
295+ ./bin/rake --no-system db:migrate
296+ fi
297+ echo "Done"
298+ '';
299+ script = "./script/rails server -b ${cfg.host} -p ${toString cfg.port}";
300+ };
301+
302+ systemd.services.zammad-websocket = {
303+ inherit serviceConfig environment;
304+ after = [ "zammad-web.service" ];
305+ requires = [ "zammad-web.service" ];
306+ description = "Zammad websocket";
307+ wantedBy = [ "multi-user.target" ];
308+ script = "./script/websocket-server.rb -b ${cfg.host} -p ${toString cfg.websocketPort} start";
309+ };
310+
311+ systemd.services.zammad-scheduler = {
312+ inherit environment;
313+ serviceConfig = serviceConfig // { Type = "forking"; };
314+ after = [ "zammad-web.service" ];
315+ requires = [ "zammad-web.service" ];
316+ description = "Zammad scheduler";
317+ wantedBy = [ "multi-user.target" ];
318+ script = "./script/scheduler.rb start";
319+ };
320+ };
321+
322+ meta.maintainers = with lib.maintainers; [ garbas taeer ];
323+}
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/games/factorio.nix+9
@@ -53,6 +53,14 @@ in
5353 '';
5454 };
5555
56+ bind = mkOption {
57+ type = types.str;
58+ default = "0.0.0.0";
59+ description = ''
60+ The address to which the service should bind.
61+ '';
62+ };
63+
5664 admins = mkOption {
5765 type = types.listOf types.str;
5866 default = [];
@@ -241,6 +249,7 @@ in
241249 "${cfg.package}/bin/factorio"
242250 "--config=${cfg.configFile}"
243251 "--port=${toString cfg.port}"
252+ "--bind=${cfg.bind}"
244253 "--start-server=${mkSavePath cfg.saveName}"
245254 "--server-settings=${serverSettingsFile}"
246255 (optionalString (cfg.mods != []) "--mod-directory=${modDir}")
nixos/modules/services/games/minecraft-server.nix+1−1
@@ -153,7 +153,7 @@ in {
153153 type = types.separatedString " ";
154154 default = "-Xmx2048M -Xms2048M";
155155 # Example options from https://minecraft.gamepedia.com/Tutorials/Server_startup_script
156− example = "-Xmx2048M -Xms4092M -XX:+UseG1GC -XX:+CMSIncrementalPacing "
156+ example = "-Xms4092M -Xmx4092M -XX:+UseG1GC -XX:+CMSIncrementalPacing "
157157 + "-XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 "
158158 + "-XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10";
159159 description = "JVM options for the Minecraft server.";
nixos/modules/services/hardware/joycond.nix+2−6
@@ -22,13 +22,9 @@ with lib;
2222 };
2323
2424 config = mkIf cfg.enable {
25− environment.systemPackages = [
26− kernelPackages.hid-nintendo
27− cfg.package
28− ];
25+ environment.systemPackages = [ cfg.package ];
2926
30− boot.extraModulePackages = [ kernelPackages.hid-nintendo ];
31− boot.kernelModules = [ "hid_nintendo" ];
27+ boot.extraModulePackages = optional (versionOlder kernelPackages.kernel.version "5.16") kernelPackages.hid-nintendo;
3228
3329 services.udev.packages = [ cfg.package ];
3430
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+41
@@ -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,10 @@ with lib;
3269
3370 environment.systemPackages = [ pkgs.udisks2 ];
3471
72+ environment.etc = mapAttrs' (name: value: nameValuePair "udisks2/${name}" { source = value; } ) configFiles;
73+
74+ security.polkit.enable = true;
75+
3576 services.dbus.packages = [ pkgs.udisks2 ];
3677
3778 systemd.tmpfiles.rules = [ "d /var/lib/udisks2 0755 root root -" ];
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/home-automation/home-assistant.nix+2−6
@@ -135,7 +135,7 @@ in {
135135 };
136136
137137 config = mkOption {
138− type = types.submodule {
138+ type = types.nullOr (types.submodule {
139139 freeformType = format.type;
140140 options = {
141141 # This is a partial selection of the most common options, so new users can quickly
@@ -244,7 +244,7 @@ in {
244244 };
245245 };
246246 };
247− };
247+ });
248248 example = literalExpression ''
249249 {
250250 homeassistant = {
@@ -349,10 +349,6 @@ in {
349349 '';
350350 description = ''
351351 The Home Assistant package to use.
352− Override <literal>extraPackages</literal> or <literal>extraComponents</literal> in order to add additional dependencies.
353− If you specify <option>config</option> and do not set <option>autoExtraComponents</option>
354− to <literal>false</literal>, overriding <literal>extraComponents</literal> will have no effect.
355− Avoid <literal>home-assistant.overridePythonAttrs</literal> if you use <literal>autoExtraComponents</literal>.
356352 '';
357353 };
358354
nixos/modules/services/misc/zigbee2mqtt.nix → nixos/modules/services/home-automation/zigbee2mqtt.nixrenamed

The content is the same.

nixos/modules/services/logging/graylog.nix+1−1
@@ -132,7 +132,7 @@ in
132132 description = "Graylog server daemon user";
133133 };
134134 };
135− users.groups = mkIf (cfg.user == "graylog") {};
135+ users.groups = mkIf (cfg.user == "graylog") { graylog = {}; };
136136
137137 systemd.tmpfiles.rules = [
138138 "d '${cfg.messageJournalDir}' - ${cfg.user} - - -"
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+252−46
@@ -4,9 +4,11 @@ with lib;
44
55let
66 cfg = config.services.logrotate;
7− inherit (config.users) groups;
87
9− 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, ... }: {
1012 options = {
1113 enable = mkOption {
1214 type = types.bool;
@@ -85,25 +87,115 @@ let
8587 };
8688
8789 config.name = name;
88− config.extraConfig = ''
89− missingok
90− notifempty
91− '';
9290 };
9391
94− mkConf = pathOpts: ''
95− # generated by NixOS using the `services.logrotate.paths.${pathOpts.name}` attribute set
96− ${concatMapStringsSep " " (path: ''"${path}"'') (toList pathOpts.path)} {
97− ${optionalString (pathOpts.user != null || pathOpts.group != null) "su ${pathOpts.user} ${pathOpts.group}"}
98− ${pathOpts.frequency}
99− rotate ${toString pathOpts.keep}
100− ${pathOpts.extraConfig}
101− }
102− '';
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)
103+ );
104+
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;
103118
104− paths = sortProperties (attrValues (filterAttrs (_: pathOpts: pathOpts.enable) cfg.paths));
105− configFile = pkgs.writeText "logrotate.conf" (concatStringsSep "\n" ((map mkConf paths) ++ [ cfg.extraConfig ]));
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+ };
106194
195+ mailOption =
196+ if foldr (n: a: a || n ? mail) false (attrValues cfg.settings)
197+ then "--mail=${pkgs.mailutils}/bin/mail"
198+ else "";
107199in
108200{
109201 imports = [
@@ -112,15 +204,122 @@ in
112204
113205 options = {
114206 services.logrotate = {
115− enable = mkEnableOption "the logrotate systemd service";
207+ enable = mkEnableOption "the logrotate systemd service" // {
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 ]));
116222
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+ '';
291+ };
292+
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
117315 paths = mkOption {
118316 type = with types; attrsOf (submodule pathOpts);
119− default = {};
317+ default = { };
120318 description = ''
121319 Attribute set of paths to rotate. The order each block appears in the generated configuration file
122320 can be controlled by the <link linkend="opt-services.logrotate.paths._name_.priority">priority</link> option
123321 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>.
124323 '';
125324 example = literalExpression ''
126325 {
@@ -149,48 +348,55 @@ in
149348 description = ''
150349 Extra contents to append to the logrotate configuration file. Refer to
151350 <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>.
152353 '';
153354 };
154355 };
155356 };
156357
157358 config = mkIf cfg.enable {
158− assertions = mapAttrsToList (name: pathOpts:
159− { assertion = (pathOpts.user != null) == (pathOpts.group != null);
160− message = ''
161− If either of `services.logrotate.paths.${name}.user` or `services.logrotate.paths.${name}.group` are specified then *both* must be specified.
162− '';
163− }
164− ) 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;
165369
166− services.logrotate = {
167− paths = {
168− "/var/log/btmp" = {
169− frequency = mkDefault "monthly";
170− keep = mkDefault 1;
171− extraConfig = ''
172− create 0660 root ${groups.utmp.name}
173− '';
174− };
175− "/var/log/wtmp" = {
176− frequency = mkDefault "monthly";
177− keep = mkDefault 1;
178− extraConfig = ''
179− create 0664 root ${groups.utmp.name}
180− '';
181− };
182− };
183− };
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+ '');
184382
185383 systemd.services.logrotate = {
186384 description = "Logrotate Service";
187− wantedBy = [ "multi-user.target" ];
188385 startAt = "hourly";
189386
190387 serviceConfig = {
191388 Restart = "no";
192389 User = "root";
193− 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}";
194400 };
195401 };
196402 };
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/misc/matrix-synapse-log_config.yaml → nixos/modules/services/matrix/matrix-synapse-log_config.yamlrenamed

The content is the same.

nixos/modules/services/matrix/matrix-synapse.nixnew file+773
@@ -0,0 +1,773 @@
1+{ config, lib, options, pkgs, ... }:
2+
3+with lib;
4+
5+let
6+ cfg = config.services.matrix-synapse;
7+ format = pkgs.formats.yaml {};
8+
9+ # remove null values from the final configuration
10+ finalSettings = lib.filterAttrsRecursive (_: v: v != null) cfg.settings;
11+ configFile = format.generate "homeserver.yaml" finalSettings;
12+ logConfigFile = format.generate "log_config.yaml" cfg.logConfig;
13+
14+ pluginsEnv = cfg.package.python.buildEnv.override {
15+ extraLibs = cfg.plugins;
16+ };
17+
18+ usePostgresql = cfg.settings.database.name == "psycopg2";
19+ hasLocalPostgresDB = let args = cfg.settings.database.args; in
20+ usePostgresql && (!(args ? host) || (elem args.host [ "localhost" "127.0.0.1" "::1" ]));
21+
22+ registerNewMatrixUser =
23+ let
24+ isIpv6 = x: lib.length (lib.splitString ":" x) > 1;
25+ listener =
26+ lib.findFirst (
27+ listener: lib.any (
28+ resource: lib.any (
29+ name: name == "client"
30+ ) resource.names
31+ ) listener.resources
32+ ) (lib.last cfg.settings.listeners) cfg.settings.listeners;
33+ # FIXME: Handle cases with missing client listener properly,
34+ # don't rely on lib.last, this will not work.
35+
36+ # add a tail, so that without any bind_addresses we still have a useable address
37+ bindAddress = head (listener.bind_addresses ++ [ "127.0.0.1" ]);
38+ listenerProtocol = if listener.tls
39+ then "https"
40+ else "http";
41+ in
42+ pkgs.writeShellScriptBin "matrix-synapse-register_new_matrix_user" ''
43+ exec ${cfg.package}/bin/register_new_matrix_user \
44+ $@ \
45+ ${lib.concatMapStringsSep " " (x: "-c ${x}") ([ configFile ] ++ cfg.extraConfigFiles)} \
46+ "${listenerProtocol}://${
47+ if (isIpv6 bindAddress) then
48+ "[${bindAddress}]"
49+ else
50+ "${bindAddress}"
51+ }:${builtins.toString listener.port}/"
52+ '';
53+in {
54+
55+ imports = [
56+
57+ (mkRemovedOptionModule [ "services" "matrix-synapse" "trusted_third_party_id_servers" ] ''
58+ The `trusted_third_party_id_servers` option as been removed in `matrix-synapse` v1.4.0
59+ as the behavior is now obsolete.
60+ '')
61+ (mkRemovedOptionModule [ "services" "matrix-synapse" "create_local_database" ] ''
62+ Database configuration must be done manually. An exemplary setup is demonstrated in
63+ <nixpkgs/nixos/tests/matrix-synapse.nix>
64+ '')
65+ (mkRemovedOptionModule [ "services" "matrix-synapse" "web_client" ] "")
66+ (mkRemovedOptionModule [ "services" "matrix-synapse" "room_invite_state_types" ] ''
67+ You may add additional event types via
68+ `services.matrix-synapse.room_prejoin_state.additional_event_types` and
69+ disable the default events via
70+ `services.matrix-synapse.room_prejoin_state.disable_default_event_types`.
71+ '')
72+
73+ # options that don't exist in synapse anymore
74+ (mkRemovedOptionModule [ "services" "matrix-synapse" "bind_host" ] "Use listener settings instead." )
75+ (mkRemovedOptionModule [ "services" "matrix-synapse" "bind_port" ] "Use listener settings instead." )
76+ (mkRemovedOptionModule [ "services" "matrix-synapse" "expire_access_tokens" ] "" )
77+ (mkRemovedOptionModule [ "services" "matrix-synapse" "no_tls" ] "It is no longer supported by synapse." )
78+ (mkRemovedOptionModule [ "services" "matrix-synapse" "tls_dh_param_path" ] "It was removed from synapse." )
79+ (mkRemovedOptionModule [ "services" "matrix-synapse" "unsecure_port" ] "Use settings.listeners instead." )
80+ (mkRemovedOptionModule [ "services" "matrix-synapse" "user_creation_max_duration" ] "It is no longer supported by synapse." )
81+ (mkRemovedOptionModule [ "services" "matrix-synapse" "verbose" ] "Use a log config instead." )
82+
83+ # options that were moved into rfc42 style settigns
84+ (mkRemovedOptionModule [ "services" "matrix-synapse" "app_service_config_files" ] "Use settings.app_service_config_files instead" )
85+ (mkRemovedOptionModule [ "services" "matrix-synapse" "database_args" ] "Use settings.database.args instead" )
86+ (mkRemovedOptionModule [ "services" "matrix-synapse" "database_name" ] "Use settings.database.args.database instead" )
87+ (mkRemovedOptionModule [ "services" "matrix-synapse" "database_type" ] "Use settings.database.name instead" )
88+ (mkRemovedOptionModule [ "services" "matrix-synapse" "database_user" ] "Use settings.database.args.user instead" )
89+ (mkRemovedOptionModule [ "services" "matrix-synapse" "dynamic_thumbnails" ] "Use settings.dynamic_thumbnails instead" )
90+ (mkRemovedOptionModule [ "services" "matrix-synapse" "enable_metrics" ] "Use settings.enable_metrics instead" )
91+ (mkRemovedOptionModule [ "services" "matrix-synapse" "enable_registration" ] "Use settings.enable_registration instead" )
92+ (mkRemovedOptionModule [ "services" "matrix-synapse" "extraConfig" ] "Use settings instead." )
93+ (mkRemovedOptionModule [ "services" "matrix-synapse" "listeners" ] "Use settings.listeners instead" )
94+ (mkRemovedOptionModule [ "services" "matrix-synapse" "logConfig" ] "Use settings.log_config instead" )
95+ (mkRemovedOptionModule [ "services" "matrix-synapse" "max_image_pixels" ] "Use settings.max_image_pixels instead" )
96+ (mkRemovedOptionModule [ "services" "matrix-synapse" "max_upload_size" ] "Use settings.max_upload_size instead" )
97+ (mkRemovedOptionModule [ "services" "matrix-synapse" "presence" "enabled" ] "Use settings.presence.enabled instead" )
98+ (mkRemovedOptionModule [ "services" "matrix-synapse" "public_baseurl" ] "Use settings.public_baseurl instead" )
99+ (mkRemovedOptionModule [ "services" "matrix-synapse" "report_stats" ] "Use settings.report_stats instead" )
100+ (mkRemovedOptionModule [ "services" "matrix-synapse" "server_name" ] "Use settings.server_name instead" )
101+ (mkRemovedOptionModule [ "services" "matrix-synapse" "servers" ] "Use settings.trusted_key_servers instead." )
102+ (mkRemovedOptionModule [ "services" "matrix-synapse" "tls_certificate_path" ] "Use settings.tls_certificate_path instead" )
103+ (mkRemovedOptionModule [ "services" "matrix-synapse" "tls_private_key_path" ] "Use settings.tls_private_key_path instead" )
104+ (mkRemovedOptionModule [ "services" "matrix-synapse" "turn_shared_secret" ] "Use settings.turn_shared_secret instead" )
105+ (mkRemovedOptionModule [ "services" "matrix-synapse" "turn_uris" ] "Use settings.turn_uris instead" )
106+ (mkRemovedOptionModule [ "services" "matrix-synapse" "turn_user_lifetime" ] "Use settings.turn_user_lifetime instead" )
107+ (mkRemovedOptionModule [ "services" "matrix-synapse" "url_preview_enabled" ] "Use settings.url_preview_enabled instead" )
108+ (mkRemovedOptionModule [ "services" "matrix-synapse" "url_preview_ip_range_blacklist" ] "Use settings.url_preview_ip_range_blacklist instead" )
109+ (mkRemovedOptionModule [ "services" "matrix-synapse" "url_preview_ip_range_whitelist" ] "Use settings.url_preview_ip_range_whitelist instead" )
110+ (mkRemovedOptionModule [ "services" "matrix-synapse" "url_preview_url_blacklist" ] "Use settings.url_preview_url_blacklist instead" )
111+
112+ # options that are too specific to mention them explicitly in settings
113+ (mkRemovedOptionModule [ "services" "matrix-synapse" "account_threepid_delegates" "email" ] "Use settings.account_threepid_delegates.email instead" )
114+ (mkRemovedOptionModule [ "services" "matrix-synapse" "account_threepid_delegates" "msisdn" ] "Use settings.account_threepid_delegates.msisdn instead" )
115+ (mkRemovedOptionModule [ "services" "matrix-synapse" "allow_guest_access" ] "Use settings.allow_guest_access instead" )
116+ (mkRemovedOptionModule [ "services" "matrix-synapse" "bcrypt_rounds" ] "Use settings.bcrypt_rounds instead" )
117+ (mkRemovedOptionModule [ "services" "matrix-synapse" "enable_registration_captcha" ] "Use settings.enable_registration_captcha instead" )
118+ (mkRemovedOptionModule [ "services" "matrix-synapse" "event_cache_size" ] "Use settings.event_cache_size instead" )
119+ (mkRemovedOptionModule [ "services" "matrix-synapse" "federation_rc_concurrent" ] "Use settings.rc_federation.concurrent instead" )
120+ (mkRemovedOptionModule [ "services" "matrix-synapse" "federation_rc_reject_limit" ] "Use settings.rc_federation.reject_limit instead" )
121+ (mkRemovedOptionModule [ "services" "matrix-synapse" "federation_rc_sleep_delay" ] "Use settings.rc_federation.sleep_delay instead" )
122+ (mkRemovedOptionModule [ "services" "matrix-synapse" "federation_rc_sleep_limit" ] "Use settings.rc_federation.sleep_limit instead" )
123+ (mkRemovedOptionModule [ "services" "matrix-synapse" "federation_rc_window_size" ] "Use settings.rc_federation.window_size instead" )
124+ (mkRemovedOptionModule [ "services" "matrix-synapse" "key_refresh_interval" ] "Use settings.key_refresh_interval instead" )
125+ (mkRemovedOptionModule [ "services" "matrix-synapse" "rc_messages_burst_count" ] "Use settings.rc_messages.burst_count instead" )
126+ (mkRemovedOptionModule [ "services" "matrix-synapse" "rc_messages_per_second" ] "Use settings.rc_messages.per_second instead" )
127+ (mkRemovedOptionModule [ "services" "matrix-synapse" "recaptcha_private_key" ] "Use settings.recaptcha_private_key instead" )
128+ (mkRemovedOptionModule [ "services" "matrix-synapse" "recaptcha_public_key" ] "Use settings.recaptcha_public_key instead" )
129+ (mkRemovedOptionModule [ "services" "matrix-synapse" "redaction_retention_period" ] "Use settings.redaction_retention_period instead" )
130+ (mkRemovedOptionModule [ "services" "matrix-synapse" "room_prejoin_state" "additional_event_types" ] "Use settings.room_prejoin_state.additional_event_types instead" )
131+ (mkRemovedOptionModule [ "services" "matrix-synapse" "room_prejoin_state" "disable_default_event_types" ] "Use settings.room_prejoin-state.disable_default_event_types instead" )
132+
133+ # Options that should be passed via extraConfigFiles, so they are not persisted into the nix store
134+ (mkRemovedOptionModule [ "services" "matrix-synapse" "macaroon_secret_key" ] "Pass this value via extraConfigFiles instead" )
135+ (mkRemovedOptionModule [ "services" "matrix-synapse" "registration_shared_secret" ] "Pass this value via extraConfigFiles instead" )
136+
137+ ];
138+
139+ options = {
140+ services.matrix-synapse = {
141+ enable = mkEnableOption "matrix.org synapse";
142+
143+ configFile = mkOption {
144+ type = types.path;
145+ readOnly = true;
146+ description = ''
147+ Path to the configuration file on the target system. Useful to configure e.g. workers
148+ that also need this.
149+ '';
150+ };
151+
152+ package = mkOption {
153+ type = types.package;
154+ default = pkgs.matrix-synapse;
155+ defaultText = literalExpression "pkgs.matrix-synapse";
156+ description = ''
157+ Overridable attribute of the matrix synapse server package to use.
158+ '';
159+ };
160+
161+ plugins = mkOption {
162+ type = types.listOf types.package;
163+ default = [ ];
164+ example = literalExpression ''
165+ with config.services.matrix-synapse.package.plugins; [
166+ matrix-synapse-ldap3
167+ matrix-synapse-pam
168+ ];
169+ '';
170+ description = ''
171+ List of additional Matrix plugins to make available.
172+ '';
173+ };
174+
175+ withJemalloc = mkOption {
176+ type = types.bool;
177+ default = false;
178+ description = ''
179+ Whether to preload jemalloc to reduce memory fragmentation and overall usage.
180+ '';
181+ };
182+
183+ dataDir = mkOption {
184+ type = types.str;
185+ default = "/var/lib/matrix-synapse";
186+ description = ''
187+ The directory where matrix-synapse stores its stateful data such as
188+ certificates, media and uploads.
189+ '';
190+ };
191+
192+ settings = mkOption {
193+ default = {};
194+ description = ''
195+ The primary synapse configuration. See the
196+ <link xlink:href="https://github.com/matrix-org/synapse/blob/v${cfg.package.version}/docs/sample_config.yaml">sample configuration</link>
197+ for possible values.
198+
199+ Secrets should be passed in by using the <literal>extraConfigFiles</literal> option.
200+ '';
201+ type = with types; submodule {
202+ freeformType = format.type;
203+ options = {
204+ # This is a reduced set of popular options and defaults
205+ # Do not add every available option here, they can be specified
206+ # by the user at their own discretion. This is a freeform type!
207+
208+ server_name = mkOption {
209+ type = types.str;
210+ example = "example.com";
211+ default = config.networking.hostName;
212+ defaultText = literalExpression "config.networking.hostName";
213+ description = ''
214+ The domain name of the server, with optional explicit port.
215+ This is used by remote servers to look up the server address.
216+ This is also the last part of your UserID.
217+
218+ The server_name cannot be changed later so it is important to configure this correctly before you start Synapse.
219+ '';
220+ };
221+
222+ enable_registration = mkOption {
223+ type = types.bool;
224+ default = false;
225+ description = ''
226+ Enable registration for new users.
227+ '';
228+ };
229+
230+ registration_shared_secret = mkOption {
231+ type = types.nullOr types.str;
232+ default = null;
233+ description = ''
234+ If set, allows registration by anyone who also has the shared
235+ secret, even if registration is otherwise disabled.
236+
237+ Secrets should be passed in via <literal>extraConfigFiles</literal>!
238+ '';
239+ };
240+
241+ macaroon_secret_key = mkOption {
242+ type = types.nullOr types.str;
243+ default = null;
244+ description = ''
245+ Secret key for authentication tokens. If none is specified,
246+ the registration_shared_secret is used, if one is given; otherwise,
247+ a secret key is derived from the signing key.
248+
249+ Secrets should be passed in via <literal>extraConfigFiles</literal>!
250+ '';
251+ };
252+
253+ enable_metrics = mkOption {
254+ type = types.bool;
255+ default = false;
256+ description = ''
257+ Enable collection and rendering of performance metrics
258+ '';
259+ };
260+
261+ report_stats = mkOption {
262+ type = types.bool;
263+ default = false;
264+ description = ''
265+ Whether or not to report anonymized homeserver usage statistics.
266+ '';
267+ };
268+
269+ signing_key_path = mkOption {
270+ type = types.path;
271+ default = "${cfg.dataDir}/homeserver.signing.key";
272+ description = ''
273+ Path to the signing key to sign messages with.
274+ '';
275+ };
276+
277+ pid_file = mkOption {
278+ type = types.path;
279+ default = "/run/matrix-synapse.pid";
280+ readOnly = true;
281+ description = ''
282+ The file to store the PID in.
283+ '';
284+ };
285+
286+ log_config = mkOption {
287+ type = types.path;
288+ default = ./matrix-synapse-log_config.yaml;
289+ description = ''
290+ The file that holds the logging configuration.
291+ '';
292+ };
293+
294+ media_store_path = mkOption {
295+ type = types.path;
296+ default = if lib.versionAtLeast config.system.stateVersion "22.05"
297+ then "${cfg.dataDir}/media_store"
298+ else "${cfg.dataDir}/media";
299+ description = ''
300+ Directory where uploaded images and attachments are stored.
301+ '';
302+ };
303+
304+ public_baseurl = mkOption {
305+ type = types.nullOr types.str;
306+ default = null;
307+ example = "https://example.com:8448/";
308+ description = ''
309+ The public-facing base URL for the client API (not including _matrix/...)
310+ '';
311+ };
312+
313+ tls_certificate_path = mkOption {
314+ type = types.nullOr types.str;
315+ default = null;
316+ example = "/var/lib/acme/example.com/fullchain.pem";
317+ description = ''
318+ PEM encoded X509 certificate for TLS.
319+ You can replace the self-signed certificate that synapse
320+ autogenerates on launch with your own SSL certificate + key pair
321+ if you like. Any required intermediary certificates can be
322+ appended after the primary certificate in hierarchical order.
323+ '';
324+ };
325+
326+ tls_private_key_path = mkOption {
327+ type = types.nullOr types.str;
328+ default = null;
329+ example = "/var/lib/acme/example.com/key.pem";
330+ description = ''
331+ PEM encoded private key for TLS. Specify null if synapse is not
332+ speaking TLS directly.
333+ '';
334+ };
335+
336+ presence.enabled = mkOption {
337+ type = types.bool;
338+ default = true;
339+ example = false;
340+ description = ''
341+ Whether to enable presence tracking.
342+
343+ Presence tracking allows users to see the state (e.g online/offline)
344+ of other local and remote users.
345+ '';
346+ };
347+
348+ listeners = mkOption {
349+ type = types.listOf (types.submodule {
350+ options = {
351+ port = mkOption {
352+ type = types.port;
353+ example = 8448;
354+ description = ''
355+ The port to listen for HTTP(S) requests on.
356+ '';
357+ };
358+
359+ bind_addresses = mkOption {
360+ type = types.listOf types.str;
361+ default = [
362+ "::1"
363+ "127.0.0.1"
364+ ];
365+ example = literalExpression ''
366+ [
367+ "::"
368+ "0.0.0.0"
369+ ]
370+ '';
371+ description = ''
372+ IP addresses to bind the listener to.
373+ '';
374+ };
375+
376+ type = mkOption {
377+ type = types.enum [
378+ "http"
379+ "manhole"
380+ "metrics"
381+ "replication"
382+ ];
383+ default = "http";
384+ example = "metrics";
385+ description = ''
386+ The type of the listener, usually http.
387+ '';
388+ };
389+
390+ tls = mkOption {
391+ type = types.bool;
392+ default = true;
393+ example = false;
394+ description = ''
395+ Whether to enable TLS on the listener socket.
396+ '';
397+ };
398+
399+ x_forwarded = mkOption {
400+ type = types.bool;
401+ default = false;
402+ example = true;
403+ description = ''
404+ Use the X-Forwarded-For (XFF) header as the client IP and not the
405+ actual client IP.
406+ '';
407+ };
408+
409+ resources = mkOption {
410+ type = types.listOf (types.submodule {
411+ options = {
412+ names = mkOption {
413+ type = types.listOf (types.enum [
414+ "client"
415+ "consent"
416+ "federation"
417+ "keys"
418+ "media"
419+ "metrics"
420+ "openid"
421+ "replication"
422+ "static"
423+ ]);
424+ description = ''
425+ List of resources to host on this listener.
426+ '';
427+ example = [
428+ "client"
429+ ];
430+ };
431+ compress = mkOption {
432+ type = types.bool;
433+ description = ''
434+ Should synapse compress HTTP responses to clients that support it?
435+ This should be disabled if running synapse behind a load balancer
436+ that can do automatic compression.
437+ '';
438+ };
439+ };
440+ });
441+ description = ''
442+ List of HTTP resources to serve on this listener.
443+ '';
444+ };
445+ };
446+ });
447+ default = [ {
448+ port = 8008;
449+ bind_addresses = [ "127.0.0.1" ];
450+ type = "http";
451+ tls = false;
452+ x_forwarded = true;
453+ resources = [ {
454+ names = [ "client" ];
455+ compress = true;
456+ } {
457+ names = [ "federation" ];
458+ compress = false;
459+ } ];
460+ } ];
461+ description = ''
462+ List of ports that Synapse should listen on, their purpose and their configuration.
463+ '';
464+ };
465+
466+ database.name = mkOption {
467+ type = types.enum [
468+ "sqlite3"
469+ "psycopg2"
470+ ];
471+ default = if versionAtLeast config.system.stateVersion "18.03"
472+ then "psycopg2"
473+ else "sqlite3";
474+ defaultText = literalExpression ''
475+ if versionAtLeast config.system.stateVersion "18.03"
476+ then "psycopg2"
477+ else "sqlite3"
478+ '';
479+ description = ''
480+ The database engine name. Can be sqlite3 or psycopg2.
481+ '';
482+ };
483+
484+ database.args.database = mkOption {
485+ type = types.str;
486+ default = {
487+ sqlite3 = "${cfg.dataDir}/homeserver.db";
488+ psycopg2 = "matrix-synapse";
489+ }.${cfg.settings.database.name};
490+ defaultText = literalExpression ''
491+ {
492+ sqlite3 = "''${${options.services.matrix-synapse.dataDir}}/homeserver.db";
493+ psycopg2 = "matrix-synapse";
494+ }.''${${options.services.matrix-synapse.settings}.database.name};
495+ '';
496+ description = ''
497+ Name of the database when using the psycopg2 backend,
498+ path to the database location when using sqlite3.
499+ '';
500+ };
501+
502+ database.args.user = mkOption {
503+ type = types.nullOr types.str;
504+ default = {
505+ sqlite3 = null;
506+ psycopg2 = "matrix-synapse";
507+ }.${cfg.settings.database.name};
508+ description = ''
509+ Username to connect with psycopg2, set to null
510+ when using sqlite3.
511+ '';
512+ };
513+
514+ url_preview_enabled = mkOption {
515+ type = types.bool;
516+ default = true;
517+ example = false;
518+ description = ''
519+ Is the preview URL API enabled? If enabled, you *must* specify an
520+ explicit url_preview_ip_range_blacklist of IPs that the spider is
521+ denied from accessing.
522+ '';
523+ };
524+
525+ url_preview_ip_range_blacklist = mkOption {
526+ type = types.listOf types.str;
527+ default = [
528+ "10.0.0.0/8"
529+ "100.64.0.0/10"
530+ "127.0.0.0/8"
531+ "169.254.0.0/16"
532+ "172.16.0.0/12"
533+ "192.0.0.0/24"
534+ "192.0.2.0/24"
535+ "192.168.0.0/16"
536+ "192.88.99.0/24"
537+ "198.18.0.0/15"
538+ "198.51.100.0/24"
539+ "2001:db8::/32"
540+ "203.0.113.0/24"
541+ "224.0.0.0/4"
542+ "::1/128"
543+ "fc00::/7"
544+ "fe80::/10"
545+ "fec0::/10"
546+ "ff00::/8"
547+ ];
548+ description = ''
549+ List of IP address CIDR ranges that the URL preview spider is denied
550+ from accessing.
551+ '';
552+ };
553+
554+ url_preview_ip_range_whitelist = mkOption {
555+ type = types.listOf types.str;
556+ default = [];
557+ description = ''
558+ List of IP address CIDR ranges that the URL preview spider is allowed
559+ to access even if they are specified in url_preview_ip_range_blacklist.
560+ '';
561+ };
562+
563+ url_preview_url_blacklist = mkOption {
564+ type = types.listOf types.str;
565+ default = [];
566+ description = ''
567+ Optional list of URL matches that the URL preview spider is
568+ denied from accessing.
569+ '';
570+ };
571+
572+ max_upload_size = mkOption {
573+ type = types.str;
574+ default = "50M";
575+ example = "100M";
576+ description = ''
577+ The largest allowed upload size in bytes
578+ '';
579+ };
580+
581+ max_image_pixels = mkOption {
582+ type = types.str;
583+ default = "32M";
584+ example = "64M";
585+ description = ''
586+ Maximum number of pixels that will be thumbnailed
587+ '';
588+ };
589+
590+ dynamic_thumbnails = mkOption {
591+ type = types.bool;
592+ default = false;
593+ example = true;
594+ description = ''
595+ Whether to generate new thumbnails on the fly to precisely match
596+ the resolution requested by the client. If true then whenever
597+ a new resolution is requested by the client the server will
598+ generate a new thumbnail. If false the server will pick a thumbnail
599+ from a precalculated list.
600+ '';
601+ };
602+
603+ turn_uris = mkOption {
604+ type = types.listOf types.str;
605+ default = [];
606+ example = [
607+ "turn:turn.example.com:3487?transport=udp"
608+ "turn:turn.example.com:3487?transport=tcp"
609+ "turns:turn.example.com:5349?transport=udp"
610+ "turns:turn.example.com:5349?transport=tcp"
611+ ];
612+ description = ''
613+ The public URIs of the TURN server to give to clients
614+ '';
615+ };
616+ turn_shared_secret = mkOption {
617+ type = types.str;
618+ default = "";
619+ example = literalExpression ''
620+ config.services.coturn.static-auth-secret
621+ '';
622+ description = ''
623+ The shared secret used to compute passwords for the TURN server.
624+
625+ Secrets should be passed in via <literal>extraConfigFiles</literal>!
626+ '';
627+ };
628+
629+ trusted_key_servers = mkOption {
630+ type = types.listOf (types.submodule {
631+ options = {
632+ server_name = mkOption {
633+ type = types.str;
634+ example = "matrix.org";
635+ description = ''
636+ Hostname of the trusted server.
637+ '';
638+ };
639+
640+ verify_keys = mkOption {
641+ type = types.nullOr (types.attrsOf types.str);
642+ default = null;
643+ example = literalExpression ''
644+ {
645+ "ed25519:auto" = "Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw";
646+ }
647+ '';
648+ description = ''
649+ Attribute set from key id to base64 encoded public key.
650+
651+ If specified synapse will check that the response is signed
652+ by at least one of the given keys.
653+ '';
654+ };
655+ };
656+ });
657+ default = [ {
658+ server_name = "matrix.org";
659+ verify_keys = {
660+ "ed25519:auto" = "Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw";
661+ };
662+ } ];
663+ description = ''
664+ The trusted servers to download signing keys from.
665+ '';
666+ };
667+
668+ app_service_config_files = mkOption {
669+ type = types.listOf types.path;
670+ default = [ ];
671+ description = ''
672+ A list of application service config file to use
673+ '';
674+ };
675+
676+ };
677+ };
678+ };
679+
680+ extraConfigFiles = mkOption {
681+ type = types.listOf types.path;
682+ default = [];
683+ description = ''
684+ Extra config files to include.
685+
686+ The configuration files will be included based on the command line
687+ argument --config-path. This allows to configure secrets without
688+ having to go through the Nix store, e.g. based on deployment keys if
689+ NixOps is in use.
690+ '';
691+ };
692+ };
693+ };
694+
695+ config = mkIf cfg.enable {
696+ assertions = [
697+ { assertion = hasLocalPostgresDB -> config.services.postgresql.enable;
698+ message = ''
699+ Cannot deploy matrix-synapse with a configuration for a local postgresql database
700+ and a missing postgresql service. Since 20.03 it's mandatory to manually configure the
701+ database (please read the thread in https://github.com/NixOS/nixpkgs/pull/80447 for
702+ further reference).
703+
704+ If you
705+ - try to deploy a fresh synapse, you need to configure the database yourself. An example
706+ for this can be found in <nixpkgs/nixos/tests/matrix-synapse.nix>
707+ - update your existing matrix-synapse instance, you simply need to add `services.postgresql.enable = true`
708+ to your configuration.
709+
710+ For further information about this update, please read the release-notes of 20.03 carefully.
711+ '';
712+ }
713+ ];
714+
715+ services.matrix-synapse.configFile = configFile;
716+
717+ users.users.matrix-synapse = {
718+ group = "matrix-synapse";
719+ home = cfg.dataDir;
720+ createHome = true;
721+ shell = "${pkgs.bash}/bin/bash";
722+ uid = config.ids.uids.matrix-synapse;
723+ };
724+
725+ users.groups.matrix-synapse = {
726+ gid = config.ids.gids.matrix-synapse;
727+ };
728+
729+ systemd.services.matrix-synapse = {
730+ description = "Synapse Matrix homeserver";
731+ after = [ "network.target" ] ++ optional hasLocalPostgresDB "postgresql.service";
732+ wantedBy = [ "multi-user.target" ];
733+ preStart = ''
734+ ${cfg.package}/bin/synapse_homeserver \
735+ --config-path ${configFile} \
736+ --keys-directory ${cfg.dataDir} \
737+ --generate-keys
738+ '';
739+ environment = {
740+ PYTHONPATH = makeSearchPathOutput "lib" cfg.package.python.sitePackages [ pluginsEnv ];
741+ } // optionalAttrs (cfg.withJemalloc) {
742+ LD_PRELOAD = "${pkgs.jemalloc}/lib/libjemalloc.so";
743+ };
744+ serviceConfig = {
745+ Type = "notify";
746+ User = "matrix-synapse";
747+ Group = "matrix-synapse";
748+ WorkingDirectory = cfg.dataDir;
749+ ExecStartPre = [ ("+" + (pkgs.writeShellScript "matrix-synapse-fix-permissions" ''
750+ chown matrix-synapse:matrix-synapse ${cfg.dataDir}/homeserver.signing.key
751+ chmod 0600 ${cfg.dataDir}/homeserver.signing.key
752+ '')) ];
753+ ExecStart = ''
754+ ${cfg.package}/bin/synapse_homeserver \
755+ ${ concatMapStringsSep "\n " (x: "--config-path ${x} \\") ([ configFile ] ++ cfg.extraConfigFiles) }
756+ --keys-directory ${cfg.dataDir}
757+ '';
758+ ExecReload = "${pkgs.util-linux}/bin/kill -HUP $MAINPID";
759+ Restart = "on-failure";
760+ UMask = "0077";
761+ };
762+ };
763+
764+ environment.systemPackages = [ registerNewMatrixUser ];
765+ };
766+
767+ meta = {
768+ buildDocsInSandbox = false;
769+ doc = ./matrix-synapse.xml;
770+ maintainers = teams.matrix.members;
771+ };
772+
773+}
nixos/modules/services/misc/matrix-synapse.xml → nixos/modules/services/matrix/matrix-synapse.xmlrenamed+18−17
@@ -115,20 +115,21 @@ in {
115115 };
116116 services.matrix-synapse = {
117117 <link linkend="opt-services.matrix-synapse.enable">enable</link> = true;
118− <link linkend="opt-services.matrix-synapse.server_name">server_name</link> = config.networking.domain;
119− <link linkend="opt-services.matrix-synapse.listeners">listeners</link> = [
118+ <link linkend="opt-services.matrix-synapse.settings.server_name">server_name</link> = config.networking.domain;
119+ <link linkend="opt-services.matrix-synapse.settings.listeners">listeners</link> = [
120120 {
121− <link linkend="opt-services.matrix-synapse.listeners._.port">port</link> = 8008;
122− <link linkend="opt-services.matrix-synapse.listeners._.bind_address">bind_address</link> = "::1";
123− <link linkend="opt-services.matrix-synapse.listeners._.type">type</link> = "http";
124− <link linkend="opt-services.matrix-synapse.listeners._.tls">tls</link> = false;
125− <link linkend="opt-services.matrix-synapse.listeners._.x_forwarded">x_forwarded</link> = true;
126− <link linkend="opt-services.matrix-synapse.listeners._.resources">resources</link> = [
127− {
128− <link linkend="opt-services.matrix-synapse.listeners._.resources._.names">names</link> = [ "client" "federation" ];
129− <link linkend="opt-services.matrix-synapse.listeners._.resources._.compress">compress</link> = false;
130− }
131− ];
121+ <link linkend="opt-services.matrix-synapse.settings.listeners._.port">port</link> = 8008;
122+ <link linkend="opt-services.matrix-synapse.settings.listeners._.bind_addresses">bind_addresses</link> = [ "::1" ];
123+ <link linkend="opt-services.matrix-synapse.settings.listeners._.type">type</link> = "http";
124+ <link linkend="opt-services.matrix-synapse.settings.listeners._.tls">tls</link> = false;
125+ <link linkend="opt-services.matrix-synapse.settings.listeners._.x_forwarded">x_forwarded</link> = true;
126+ <link linkend="opt-services.matrix-synapse.settings.listeners._.resources">resources</link> = [ {
127+ <link linkend="opt-services.matrix-synapse.settings.listeners._.resources._.names">names</link> = [ "client" ];
128+ <link linkend="opt-services.matrix-synapse.settings.listeners._.resources._.compress">compress</link> = true;
129+ } {
130+ <link linkend="opt-services.matrix-synapse.settings.listeners._.resources._.names">names</link> = [ "federation" ];
131+ <link linkend="opt-services.matrix-synapse.settings.listeners._.resources._.compress">compress</link> = false;
132+ } ];
132133 }
133134 ];
134135 };
@@ -151,11 +152,11 @@ in {
151152
152153 <para>
153154 If you want to run a server with public registration by anybody, you can
154− then enable <literal><link linkend="opt-services.matrix-synapse.enable_registration">services.matrix-synapse.enable_registration</link> =
155+ then enable <literal><link linkend="opt-services.matrix-synapse.settings.enable_registration">services.matrix-synapse.settings.enable_registration</link> =
155156 true;</literal>. Otherwise, or you can generate a registration secret with
156157 <command>pwgen -s 64 1</command> and set it with
157− <option><link linkend="opt-services.matrix-synapse.registration_shared_secret">services.matrix-synapse.registration_shared_secret</link></option>. To
158− create a new user or admin, run the following after you have set the secret
158+ <option><link linkend="opt-services.matrix-synapse.settings.registration_shared_secret">services.matrix-synapse.settings.registration_shared_secret</link></option>.
159+ To create a new user or admin, run the following after you have set the secret
159160 and have rebuilt NixOS:
160161<screen>
161162<prompt>$ </prompt>nix run nixpkgs.matrix-synapse
@@ -170,7 +171,7 @@ Success!
170171 <literal>@your-username:example.org</literal>. Note that the registration
171172 secret ends up in the nix store and therefore is world-readable by any user
172173 on your machine, so it makes sense to only temporarily activate the
173− <link linkend="opt-services.matrix-synapse.registration_shared_secret">registration_shared_secret</link>
174+ <link linkend="opt-services.matrix-synapse.settings.registration_shared_secret">registration_shared_secret</link>
174175 option until a better solution for NixOS is in place.
175176 </para>
176177 </section>
nixos/modules/services/misc/autorandr.nix+308−2
@@ -5,6 +5,243 @@ with lib;
55let
66
77 cfg = config.services.autorandr;
8+ hookType = types.lines;
9+
10+ matrixOf = n: m: elemType:
11+ mkOptionType rec {
12+ name = "matrixOf";
13+ description =
14+ "${toString n}×${toString m} matrix of ${elemType.description}s";
15+ check = xss:
16+ let listOfSize = l: xs: isList xs && length xs == l;
17+ in listOfSize n xss
18+ && all (xs: listOfSize m xs && all elemType.check xs) xss;
19+ merge = mergeOneOption;
20+ getSubOptions = prefix: elemType.getSubOptions (prefix ++ [ "*" "*" ]);
21+ getSubModules = elemType.getSubModules;
22+ substSubModules = mod: matrixOf n m (elemType.substSubModules mod);
23+ functor = (defaultFunctor name) // { wrapped = elemType; };
24+ };
25+
26+ profileModule = types.submodule {
27+ options = {
28+ fingerprint = mkOption {
29+ type = types.attrsOf types.str;
30+ description = ''
31+ Output name to EDID mapping.
32+ Use <code>autorandr --fingerprint</code> to get current setup values.
33+ '';
34+ default = { };
35+ };
36+
37+ config = mkOption {
38+ type = types.attrsOf configModule;
39+ description = "Per output profile configuration.";
40+ default = { };
41+ };
42+
43+ hooks = mkOption {
44+ type = hooksModule;
45+ description = "Profile hook scripts.";
46+ default = { };
47+ };
48+ };
49+ };
50+
51+ configModule = types.submodule {
52+ options = {
53+ enable = mkOption {
54+ type = types.bool;
55+ description = "Whether to enable the output.";
56+ default = true;
57+ };
58+
59+ crtc = mkOption {
60+ type = types.nullOr types.ints.unsigned;
61+ description = "Output video display controller.";
62+ default = null;
63+ example = 0;
64+ };
65+
66+ primary = mkOption {
67+ type = types.bool;
68+ description = "Whether output should be marked as primary";
69+ default = false;
70+ };
71+
72+ position = mkOption {
73+ type = types.str;
74+ description = "Output position";
75+ default = "";
76+ example = "5760x0";
77+ };
78+
79+ mode = mkOption {
80+ type = types.str;
81+ description = "Output resolution.";
82+ default = "";
83+ example = "3840x2160";
84+ };
85+
86+ rate = mkOption {
87+ type = types.str;
88+ description = "Output framerate.";
89+ default = "";
90+ example = "60.00";
91+ };
92+
93+ gamma = mkOption {
94+ type = types.str;
95+ description = "Output gamma configuration.";
96+ default = "";
97+ example = "1.0:0.909:0.833";
98+ };
99+
100+ rotate = mkOption {
101+ type = types.nullOr (types.enum [ "normal" "left" "right" "inverted" ]);
102+ description = "Output rotate configuration.";
103+ default = null;
104+ example = "left";
105+ };
106+
107+ transform = mkOption {
108+ type = types.nullOr (matrixOf 3 3 types.float);
109+ default = null;
110+ example = literalExpression ''
111+ [
112+ [ 0.6 0.0 0.0 ]
113+ [ 0.0 0.6 0.0 ]
114+ [ 0.0 0.0 1.0 ]
115+ ]
116+ '';
117+ description = ''
118+ Refer to
119+ <citerefentry>
120+ <refentrytitle>xrandr</refentrytitle>
121+ <manvolnum>1</manvolnum>
122+ </citerefentry>
123+ for the documentation of the transform matrix.
124+ '';
125+ };
126+
127+ dpi = mkOption {
128+ type = types.nullOr types.ints.positive;
129+ description = "Output DPI configuration.";
130+ default = null;
131+ example = 96;
132+ };
133+
134+ scale = mkOption {
135+ type = types.nullOr (types.submodule {
136+ options = {
137+ method = mkOption {
138+ type = types.enum [ "factor" "pixel" ];
139+ description = "Output scaling method.";
140+ default = "factor";
141+ example = "pixel";
142+ };
143+
144+ x = mkOption {
145+ type = types.either types.float types.ints.positive;
146+ description = "Horizontal scaling factor/pixels.";
147+ };
148+
149+ y = mkOption {
150+ type = types.either types.float types.ints.positive;
151+ description = "Vertical scaling factor/pixels.";
152+ };
153+ };
154+ });
155+ description = ''
156+ Output scale configuration.
157+ </para><para>
158+ Either configure by pixels or a scaling factor. When using pixel method the
159+ <citerefentry>
160+ <refentrytitle>xrandr</refentrytitle>
161+ <manvolnum>1</manvolnum>
162+ </citerefentry>
163+ option
164+ <parameter class="command">--scale-from</parameter>
165+ will be used; when using factor method the option
166+ <parameter class="command">--scale</parameter>
167+ will be used.
168+ </para><para>
169+ This option is a shortcut version of the transform option and they are mutually
170+ exclusive.
171+ '';
172+ default = null;
173+ example = literalExpression ''
174+ {
175+ x = 1.25;
176+ y = 1.25;
177+ }
178+ '';
179+ };
180+ };
181+ };
182+
183+ hooksModule = types.submodule {
184+ options = {
185+ postswitch = mkOption {
186+ type = types.attrsOf hookType;
187+ description = "Postswitch hook executed after mode switch.";
188+ default = { };
189+ };
190+
191+ preswitch = mkOption {
192+ type = types.attrsOf hookType;
193+ description = "Preswitch hook executed before mode switch.";
194+ default = { };
195+ };
196+
197+ predetect = mkOption {
198+ type = types.attrsOf hookType;
199+ description = ''
200+ Predetect hook executed before autorandr attempts to run xrandr.
201+ '';
202+ default = { };
203+ };
204+ };
205+ };
206+
207+ hookToFile = folder: name: hook:
208+ nameValuePair "xdg/autorandr/${folder}/${name}" {
209+ source = "${pkgs.writeShellScriptBin "hook" hook}/bin/hook";
210+ };
211+ profileToFiles = name: profile:
212+ with profile;
213+ mkMerge ([
214+ {
215+ "xdg/autorandr/${name}/setup".text = concatStringsSep "\n"
216+ (mapAttrsToList fingerprintToString fingerprint);
217+ "xdg/autorandr/${name}/config".text =
218+ concatStringsSep "\n" (mapAttrsToList configToString profile.config);
219+ }
220+ (mapAttrs' (hookToFile "${name}/postswitch.d") hooks.postswitch)
221+ (mapAttrs' (hookToFile "${name}/preswitch.d") hooks.preswitch)
222+ (mapAttrs' (hookToFile "${name}/predetect.d") hooks.predetect)
223+ ]);
224+ fingerprintToString = name: edid: "${name} ${edid}";
225+ configToString = name: config:
226+ if config.enable then
227+ concatStringsSep "\n" ([ "output ${name}" ]
228+ ++ optional (config.position != "") "pos ${config.position}"
229+ ++ optional (config.crtc != null) "crtc ${toString config.crtc}"
230+ ++ optional config.primary "primary"
231+ ++ optional (config.dpi != null) "dpi ${toString config.dpi}"
232+ ++ optional (config.gamma != "") "gamma ${config.gamma}"
233+ ++ optional (config.mode != "") "mode ${config.mode}"
234+ ++ optional (config.rate != "") "rate ${config.rate}"
235+ ++ optional (config.rotate != null) "rotate ${config.rotate}"
236+ ++ optional (config.transform != null) ("transform "
237+ + concatMapStringsSep "," toString (flatten config.transform))
238+ ++ optional (config.scale != null)
239+ ((if config.scale.method == "factor" then "scale" else "scale-from")
240+ + " ${toString config.scale.x}x${toString config.scale.y}"))
241+ else ''
242+ output ${name}
243+ off
244+ '';
8245
9246in {
10247
@@ -22,6 +259,67 @@ in {
22259 for further reference.
23260 '';
24261 };
262+
263+ hooks = mkOption {
264+ type = hooksModule;
265+ description = "Global hook scripts";
266+ default = { };
267+ example = ''
268+ {
269+ postswitch = {
270+ "notify-i3" = "''${pkgs.i3}/bin/i3-msg restart";
271+ "change-background" = readFile ./change-background.sh;
272+ "change-dpi" = '''
273+ case "$AUTORANDR_CURRENT_PROFILE" in
274+ default)
275+ DPI=120
276+ ;;
277+ home)
278+ DPI=192
279+ ;;
280+ work)
281+ DPI=144
282+ ;;
283+ *)
284+ echo "Unknown profle: $AUTORANDR_CURRENT_PROFILE"
285+ exit 1
286+ esac
287+ echo "Xft.dpi: $DPI" | ''${pkgs.xorg.xrdb}/bin/xrdb -merge
288+ '''
289+ };
290+ }
291+ '';
292+ };
293+ profiles = mkOption {
294+ type = types.attrsOf profileModule;
295+ description = "Autorandr profiles specification.";
296+ default = { };
297+ example = literalExpression ''
298+ {
299+ "work" = {
300+ fingerprint = {
301+ eDP1 = "<EDID>";
302+ DP1 = "<EDID>";
303+ };
304+ config = {
305+ eDP1.enable = false;
306+ DP1 = {
307+ enable = true;
308+ crtc = 0;
309+ primary = true;
310+ position = "0x0";
311+ mode = "3840x2160";
312+ gamma = "1.0:0.909:0.833";
313+ rate = "60.00";
314+ rotate = "left";
315+ };
316+ };
317+ hooks.postswitch = readFile ./work-postswitch.sh;
318+ };
319+ }
320+ '';
321+ };
322+
25323 };
26324
27325 };
@@ -30,7 +328,15 @@ in {
30328
31329 services.udev.packages = [ pkgs.autorandr ];
32330
33− environment.systemPackages = [ pkgs.autorandr ];
331+ environment = {
332+ systemPackages = [ pkgs.autorandr ];
333+ etc = mkMerge ([
334+ (mapAttrs' (hookToFile "postswitch.d") cfg.hooks.postswitch)
335+ (mapAttrs' (hookToFile "preswitch.d") cfg.hooks.preswitch)
336+ (mapAttrs' (hookToFile "predetect.d") cfg.hooks.predetect)
337+ (mkMerge (mapAttrsToList profileToFiles cfg.profiles))
338+ ]);
339+ };
34340
35341 systemd.services.autorandr = {
36342 wantedBy = [ "sleep.target" ];
@@ -49,5 +355,5 @@ in {
49355
50356 };
51357
52− meta.maintainers = with maintainers; [ ];
358+ meta.maintainers = with maintainers; [ alexnortung ];
53359}
nixos/modules/services/misc/dendrite.nix+100−8

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/misc/gitea.nix+11−16

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/misc/gitlab.nix+9−11

This diff is too big to show here.

nixos/modules/services/misc/input-remapper.nix+14−13

This diff is too big to show here.

nixos/modules/services/misc/jellyfin.nix+5−3

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/misc/moonraker.nix+40

This diff is too big to show here.

nixos/modules/services/misc/nitter.nix+11−4

This diff is too big to show here.

nixos/modules/services/misc/nix-daemon.nix+48−6

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/misc/paperless-ng.nix → nixos/modules/services/misc/paperless.nixrenamed+53−53

This diff is too big to show here.

nixos/modules/services/misc/plex.nix+13

This diff is too big to show here.

nixos/modules/services/misc/sourcehut/default.nix+1−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/misc/zookeeper.nix+8−1

This diff is too big to show here.

nixos/modules/services/monitoring/collectd.nix+30−26

This diff is too big to show here.

nixos/modules/services/monitoring/grafana.nix+5

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/monitoring/prometheus/default.nix+2−9

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/network-filesystems/ipfs.nix+30−18

This diff is too big to show here.

nixos/modules/services/network-filesystems/samba.nix+1

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/networking/asterisk.nix+11−43

This diff is too big to show here.

nixos/modules/services/networking/bird.nix+89−92

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/networking/consul.nix+32−6

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/networking/kea.nix+74−8

This diff is too big to show here.

nixos/modules/services/networking/lxd-image-server.nix+7−11

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/networking/networkmanager.nix+57−53

This diff is too big to show here.

nixos/modules/services/networking/nsd.nix+8−12

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/networking/pdns-recursor.nix+12−7

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/networking/squid.nix+14−3

This diff is too big to show here.

nixos/modules/services/networking/ssh/sshd.nix+1

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/networking/syncplay.nix+17−1

This diff is too big to show here.

nixos/modules/services/networking/tailscale.nix+9−1

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/networking/tox-node.nix+1−6

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/networking/wg-quick.nix+8−1

This diff is too big to show here.

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

This diff is too big to show here.

nixos/modules/services/security/clamav.nix+4−5

This diff is too big to show here.

nixos/modules/services/security/fprot.nixdeleted−82

This diff is too big to show here.

nixos/modules/services/security/oauth2_proxy.nix+9−4

This diff is too big to show here.

nixos/modules/services/security/opensnitch.nix+102−1

This diff is too big to show here.

nixos/modules/services/security/sslmate-agent.nixnew file+32

This diff is too big to show here.

nixos/modules/services/security/step-ca.nix+11

This diff is too big to show here.

nixos/modules/services/security/tor.nix+11−2

This diff is too big to show here.

nixos/modules/services/security/vaultwarden/default.nix+2−2

This diff is too big to show here.

nixos/modules/services/system/earlyoom.nix+133−97

This diff is too big to show here.

nixos/modules/services/system/nscd.nix+17−8

This diff is too big to show here.

nixos/modules/services/system/systembus-notify.nixnew file+27

This diff is too big to show here.

nixos/modules/services/ttys/kmscon.nix+24−5

This diff is too big to show here.

nixos/modules/services/video/epgstation/default.nix+180−168

This diff is too big to show here.

nixos/modules/services/video/epgstation/streaming.json+129−108

This diff is too big to show here.

nixos/modules/services/video/unifi-video.nix+86−82

This diff is too big to show here.

nixos/modules/services/wayland/cage.nix+2

This diff is too big to show here.

nixos/modules/services/web-apps/atlassian/jira.nix+1

This diff is too big to show here.

nixos/modules/services/web-apps/discourse.nix+9−3

This diff is too big to show here.

nixos/modules/services/web-apps/galene.nix+29

This diff is too big to show here.

nixos/modules/services/web-apps/jitsi-meet.nix+1−1

This diff is too big to show here.

nixos/modules/services/web-apps/keycloak.nix+368−502

This diff is too big to show here.

nixos/modules/services/web-apps/keycloak.xml+61−81

This diff is too big to show here.

nixos/modules/services/web-apps/mastodon.nix+3−1

This diff is too big to show here.

nixos/modules/services/web-apps/miniflux.nix+19−27

This diff is too big to show here.

nixos/modules/services/web-apps/netbox.nixnew file+265

This diff is too big to show here.

nixos/modules/services/web-apps/nextcloud.nix+76−10

This diff is too big to show here.

nixos/modules/services/web-apps/nifi.nixnew file+318

This diff is too big to show here.

nixos/modules/services/web-apps/peertube.nix+11−1

This diff is too big to show here.

nixos/modules/services/web-apps/plantuml-server.nix+18−3

This diff is too big to show here.

nixos/modules/services/web-servers/apache-httpd/default.nix+8−13

This diff is too big to show here.

nixos/modules/services/web-servers/hydron.nix+1−1

This diff is too big to show here.

nixos/modules/services/web-servers/nginx/default.nix+29−12

This diff is too big to show here.

nixos/modules/services/web-servers/nginx/vhost-options.nix+12−3

This diff is too big to show here.

nixos/modules/services/web-servers/pomerium.nix+7−3

This diff is too big to show here.

nixos/modules/services/web-servers/tomcat.nix+4−3

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/cinnamon.nix+3−3

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/enlightenment.nix+5

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/gnome.nix+43−69

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/lumina.nix+4

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/lxqt.nix+11−2

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/mate.nix+9−37

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/none.nix+44−5

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/pantheon.nix+4−5

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/pantheon.xml+3−3

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/plasma5.nix+2−2

This diff is too big to show here.

nixos/modules/services/x11/desktop-managers/xfce.nix+8−1

This diff is too big to show here.

nixos/modules/services/x11/display-managers/default.nix+1

This diff is too big to show here.

nixos/modules/services/x11/display-managers/gdm.nix+1−1

This diff is too big to show here.

nixos/modules/services/x11/display-managers/lightdm.nix+2

This diff is too big to show here.

nixos/modules/services/x11/window-managers/qtile.nix+11−4

This diff is too big to show here.

nixos/modules/services/x11/xserver.nix+10−6

This diff is too big to show here.

nixos/modules/system/activation/switch-to-configuration.plmode 100644 → 100755+460−301

This diff is too big to show here.

nixos/modules/system/activation/top-level.nix+12−5

This diff is too big to show here.

nixos/modules/system/boot/kernel.nix+2−2

This diff is too big to show here.

nixos/modules/system/boot/loader/grub/grub.nix+26

This diff is too big to show here.

nixos/modules/system/boot/loader/grub/install-grub.pl+5−3

This diff is too big to show here.

nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py+16−5

This diff is too big to show here.

nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix+1−1

This diff is too big to show here.

nixos/modules/system/boot/luksroot.nix+74−7

This diff is too big to show here.

nixos/modules/system/boot/modprobe.nix+2−20

This diff is too big to show here.

nixos/modules/system/boot/networkd.nix+191−2

This diff is too big to show here.

nixos/modules/system/boot/stage-1-init.sh+3−6

This diff is too big to show here.

nixos/modules/system/boot/stage-1.nix+34−18

This diff is too big to show here.

nixos/modules/system/boot/stage-2-init.sh+66−98

This diff is too big to show here.

nixos/modules/system/boot/stage-2.nix+2−39

This diff is too big to show here.

nixos/modules/system/boot/systemd.nix+66−672

This diff is too big to show here.

nixos/modules/system/boot/systemd/coredump.nixnew file+57

This diff is too big to show here.

nixos/modules/system/boot/systemd/initrd-secrets.nixnew file+36

This diff is too big to show here.

nixos/modules/system/boot/systemd/initrd.nixnew file+502

This diff is too big to show here.

nixos/modules/system/boot/systemd/journald.nixnew file+131

This diff is too big to show here.

nixos/modules/system/boot/systemd/logind.nixnew file+114

This diff is too big to show here.

nixos/modules/system/boot/systemd-nspawn.nix → nixos/modules/system/boot/systemd/nspawn.nixrenamed+7−9

This diff is too big to show here.

nixos/modules/system/boot/systemd/shutdown.nixnew file+58

This diff is too big to show here.

nixos/modules/system/boot/systemd/tmpfiles.nixnew file+120

This diff is too big to show here.

nixos/modules/system/boot/systemd/user.nixnew file+153

This diff is too big to show here.

nixos/modules/system/boot/timesyncd.nix+17−5

This diff is too big to show here.

nixos/modules/tasks/auto-upgrade.nix+104−20

This diff is too big to show here.

nixos/modules/tasks/bcache.nix+16−6

This diff is too big to show here.

nixos/modules/tasks/filesystems.nix+30−1

This diff is too big to show here.

nixos/modules/tasks/filesystems/btrfs.nix+3−3

This diff is too big to show here.

nixos/modules/tasks/filesystems/cifs.nix+1−1

This diff is too big to show here.

nixos/modules/tasks/filesystems/ext.nix+10−4

This diff is too big to show here.

nixos/modules/tasks/filesystems/f2fs.nix+1−1

This diff is too big to show here.

nixos/modules/tasks/filesystems/jfs.nix+1−1

This diff is too big to show here.

nixos/modules/tasks/filesystems/reiserfs.nix+1−1

This diff is too big to show here.

nixos/modules/tasks/filesystems/unionfs-fuse.nix+13−2

This diff is too big to show here.

nixos/modules/tasks/filesystems/vfat.nix+1−1

This diff is too big to show here.

nixos/modules/tasks/filesystems/xfs.nix+2−2

This diff is too big to show here.

nixos/modules/tasks/filesystems/zfs.nix+9−33

This diff is too big to show here.

nixos/modules/tasks/lvm.nix+55−6

This diff is too big to show here.

nixos/modules/tasks/network-interfaces-scripted.nix+2

This diff is too big to show here.

nixos/modules/tasks/network-interfaces-systemd.nix+2

This diff is too big to show here.

nixos/modules/tasks/network-interfaces.nix+36−13

This diff is too big to show here.

nixos/modules/tasks/swraid.nix+35−9

This diff is too big to show here.

nixos/modules/testing/test-instrumentation.nix+19−26

This diff is too big to show here.

nixos/modules/virtualisation/amazon-image.nix+5

This diff is too big to show here.

nixos/modules/virtualisation/azure-agent.nix+5−9

This diff is too big to show here.

nixos/modules/virtualisation/azure-common.nix+5−1

This diff is too big to show here.

nixos/modules/virtualisation/libvirtd.nix+4

This diff is too big to show here.

nixos/modules/virtualisation/nixos-containers.nix+26−11

This diff is too big to show here.

nixos/modules/virtualisation/oci-containers.nix+7−9

This diff is too big to show here.

nixos/modules/virtualisation/openstack-config.nix+39−7

This diff is too big to show here.

nixos/modules/virtualisation/openstack-metadata-fetcher.nix+5−4

This diff is too big to show here.

nixos/modules/virtualisation/openstack-options.nixnew file+71

This diff is too big to show here.

nixos/modules/virtualisation/podman/default.nix+4−1

This diff is too big to show here.

nixos/modules/virtualisation/proxmox-lxc.nixnew file+64

This diff is too big to show here.

nixos/modules/virtualisation/qemu-vm.nix+43−7

This diff is too big to show here.

nixos/modules/virtualisation/vmware-host.nixnew file+166

This diff is too big to show here.

nixos/modules/virtualisation/waydroid.nix+4−2

This diff is too big to show here.

nixos/release-combined.nix+4−2

This diff is too big to show here.

nixos/release-small.nix+4−2

This diff is too big to show here.

nixos/release.nix+2−2

This diff is too big to show here.

nixos/tests/aesmd.nix+1−1

This diff is too big to show here.

nixos/tests/agda.nix+1−1

This diff is too big to show here.

nixos/tests/airsonic.nix+1−1

This diff is too big to show here.

nixos/tests/all-terminfo.nixnew file+31

This diff is too big to show here.

nixos/tests/all-tests.nix+48−8

This diff is too big to show here.

nixos/tests/amazon-init-shell.nix+1−1

This diff is too big to show here.

nixos/tests/apfs.nix+1−1

This diff is too big to show here.

nixos/tests/apparmor.nix+1−1

This diff is too big to show here.

nixos/tests/atd.nix+1−1

This diff is too big to show here.

nixos/tests/atop.nix+6−14

This diff is too big to show here.

nixos/tests/avahi.nix+1−1

This diff is too big to show here.

nixos/tests/bcachefs.nix+6−7

This diff is too big to show here.

nixos/tests/beanstalkd.nix+1−1

This diff is too big to show here.

nixos/tests/bees.nix+1−1

This diff is too big to show here.

nixos/tests/bind.nix+1−1

This diff is too big to show here.

nixos/tests/bird.nix+28−104

This diff is too big to show here.

nixos/tests/bitcoind.nix+1−1

This diff is too big to show here.

nixos/tests/blockbook-frontend.nix+1−1

This diff is too big to show here.

nixos/tests/boot-stage1.nix+1−1

This diff is too big to show here.

nixos/tests/boot.nix−1

This diff is too big to show here.

nixos/tests/botamusique.nix+4

This diff is too big to show here.

nixos/tests/bpf.nix+1−1

This diff is too big to show here.

nixos/tests/breitbandmessung.nix+1−1

This diff is too big to show here.

nixos/tests/brscan5.nix+1−1

This diff is too big to show here.

nixos/tests/buildkite-agents.nix+1−1

This diff is too big to show here.

nixos/tests/caddy.nix+3−3

This diff is too big to show here.

nixos/tests/cage.nix+1−1

This diff is too big to show here.

nixos/tests/cagebreak.nix+1−1

This diff is too big to show here.

nixos/tests/ceph-multi-node.nix+1−1

This diff is too big to show here.

nixos/tests/cfssl.nix+1−1

This diff is too big to show here.

nixos/tests/chromium.nix+20−18

This diff is too big to show here.

nixos/tests/clickhouse.nix+1−1

This diff is too big to show here.

nixos/tests/cloud-init.nix+1−1

This diff is too big to show here.

nixos/tests/cntr.nix+17−5

This diff is too big to show here.

nixos/tests/collectd.nix+7−2

This diff is too big to show here.

nixos/tests/common/lxd/config.yamlnew file+24

This diff is too big to show here.

nixos/tests/containers-bridge.nix+1−1

This diff is too big to show here.

nixos/tests/containers-custom-pkgs.nix+1−1

This diff is too big to show here.

nixos/tests/containers-ephemeral.nix+4−4

This diff is too big to show here.

nixos/tests/containers-extra_veth.nix+1−1

This diff is too big to show here.

nixos/tests/containers-hosts.nix+1−1

This diff is too big to show here.

nixos/tests/containers-imperative.nix+7−7

This diff is too big to show here.

nixos/tests/containers-ip.nix+1−1

This diff is too big to show here.

nixos/tests/containers-names.nix+1−1

This diff is too big to show here.

nixos/tests/containers-nested.nix+1−1

This diff is too big to show here.

nixos/tests/containers-portforward.nix+1−1

This diff is too big to show here.

nixos/tests/containers-tmpfs.nix+6−6

This diff is too big to show here.

nixos/tests/cri-o.nix+1−1

This diff is too big to show here.

nixos/tests/custom-ca.nix+104−90

This diff is too big to show here.

nixos/tests/disable-installer-tools.nix+1−1

This diff is too big to show here.

nixos/tests/dnsdist.nix+1−1

This diff is too big to show here.

nixos/tests/doas.nix+1−1

This diff is too big to show here.

nixos/tests/docker-tools-cross.nix+2−2

This diff is too big to show here.

nixos/tests/docker-tools.nix+1−1

This diff is too big to show here.

nixos/tests/documize.nix+1−1

This diff is too big to show here.

nixos/tests/domination.nix+1−1

This diff is too big to show here.

nixos/tests/dovecot.nix+1−1

This diff is too big to show here.

nixos/tests/earlyoom.nixnew file+16

This diff is too big to show here.

nixos/tests/ecryptfs.nix+1−1

This diff is too big to show here.

nixos/tests/emacs-daemon.nix+2−2

This diff is too big to show here.

nixos/tests/empty-filenew file

No changes to the content.

nixos/tests/enlightenment.nix+1−1

This diff is too big to show here.

nixos/tests/env.nix+1−1

This diff is too big to show here.

nixos/tests/envoy.nixnew file+33

This diff is too big to show here.

nixos/tests/etebase-server.nix+1−1

This diff is too big to show here.

nixos/tests/etesync-dav.nix+1−1

This diff is too big to show here.

nixos/tests/fancontrol.nix+1−1

This diff is too big to show here.

nixos/tests/fcitx/default.nix+1−1

This diff is too big to show here.

nixos/tests/fenics.nix+1−1

This diff is too big to show here.

nixos/tests/firefox.nix+1−1

This diff is too big to show here.

nixos/tests/fish.nix+1−1

This diff is too big to show here.

nixos/tests/fluentd.nix+1−1

This diff is too big to show here.

nixos/tests/fontconfig-default-fonts.nix+1−1

This diff is too big to show here.

nixos/tests/fsck.nix+1−1

This diff is too big to show here.

nixos/tests/ft2-clone.nix+1−1

This diff is too big to show here.

nixos/tests/geth.nix+1−1

This diff is too big to show here.

nixos/tests/gitlab.nix+300−21

This diff is too big to show here.

nixos/tests/gitolite-fcgiwrap.nix+1−1

This diff is too big to show here.

nixos/tests/gnome-xorg.nix+2−1

This diff is too big to show here.

nixos/tests/gnome.nix+2−1

This diff is too big to show here.

nixos/tests/gotify-server.nix+1−1

This diff is too big to show here.

nixos/tests/graylog.nix+1−1

This diff is too big to show here.

nixos/tests/grocy.nix+1−1

This diff is too big to show here.

nixos/tests/grub.nix+1−1

This diff is too big to show here.

nixos/tests/hadoop/default.nixnew file+7

This diff is too big to show here.

nixos/tests/hadoop/hadoop.nix+150−123

This diff is too big to show here.

nixos/tests/hadoop/hdfs.nix+43−18

This diff is too big to show here.

nixos/tests/hadoop/yarn.nix+21−13

This diff is too big to show here.

nixos/tests/hardened.nix+1−1

This diff is too big to show here.

nixos/tests/haste-server.nixnew file+23

This diff is too big to show here.

nixos/tests/hbase.nixnew file+30

This diff is too big to show here.

nixos/tests/herbstluftwm.nix+1−1

This diff is too big to show here.

nixos/tests/hibernate.nix+11

This diff is too big to show here.

nixos/tests/hitch/default.nix+1−1

This diff is too big to show here.

nixos/tests/hocker-fetchdocker/default.nix+1−1

This diff is too big to show here.

nixos/tests/hockeypuck.nix+1−1

This diff is too big to show here.

nixos/tests/home-assistant.nix−43

This diff is too big to show here.

nixos/tests/hostname.nix+1−1

This diff is too big to show here.

nixos/tests/hound.nix+1−1

This diff is too big to show here.

nixos/tests/hydra/default.nix+1−1

This diff is too big to show here.

nixos/tests/i3wm.nix+1−1

This diff is too big to show here.

nixos/tests/ihatemoney/default.nix+1−1

This diff is too big to show here.

nixos/tests/incron.nix+1−1

This diff is too big to show here.

nixos/tests/initrd-network.nix+1−1

This diff is too big to show here.

nixos/tests/initrd-secrets.nix+1−1

This diff is too big to show here.

nixos/tests/input-remapper.nixnew file+52

This diff is too big to show here.

nixos/tests/installed-tests/appstream-qt.nixnew file+9

This diff is too big to show here.

nixos/tests/installed-tests/appstream.nixnew file+9

This diff is too big to show here.

nixos/tests/installed-tests/default.nix+3−1

This diff is too big to show here.

nixos/tests/installed-tests/gjs.nix+6

This diff is too big to show here.

nixos/tests/installer-systemd-stage-1.nixnew file+33

This diff is too big to show here.

nixos/tests/installer.nix+16−2

This diff is too big to show here.

nixos/tests/invidious.nix+1−1

This diff is too big to show here.

nixos/tests/ipfs.nix+5

This diff is too big to show here.

nixos/tests/isso.nix+1−1

This diff is too big to show here.

nixos/tests/jellyfin.nix+1−1

This diff is too big to show here.

nixos/tests/jenkins.nix+2

This diff is too big to show here.

nixos/tests/jibri.nix+1−1

This diff is too big to show here.

nixos/tests/jitsi-meet.nix+2−2

This diff is too big to show here.

nixos/tests/k3s-single-node-docker.nix+1−1

This diff is too big to show here.

nixos/tests/k3s-single-node.nix+1−1

This diff is too big to show here.

nixos/tests/kbd-setfont-decompress.nix+1−1

This diff is too big to show here.

nixos/tests/kbd-update-search-paths-patch.nix+1−1

This diff is too big to show here.

nixos/tests/keepassxc.nix+43−9

This diff is too big to show here.

nixos/tests/kerberos/heimdal.nix+1−1

This diff is too big to show here.

nixos/tests/kerberos/mit.nix+1−1

This diff is too big to show here.

nixos/tests/kernel-generic.nix+1−1

This diff is too big to show here.

nixos/tests/kernel-latest-ath-user-regd.nix+1−1

This diff is too big to show here.

nixos/tests/kexec.nix+44−16

This diff is too big to show here.

nixos/tests/keycloak.nix+33−13

This diff is too big to show here.

nixos/tests/krb5/deprecated-config.nix+1−1

This diff is too big to show here.

nixos/tests/krb5/example-config.nix+1−1

This diff is too big to show here.

nixos/tests/ksm.nix+1−1

This diff is too big to show here.

nixos/tests/kubernetes/base.nix+2−2

This diff is too big to show here.

nixos/tests/kubernetes/rbac.nix+2−2

This diff is too big to show here.

nixos/tests/libinput.nix+1−1

This diff is too big to show here.

nixos/tests/libresprite.nix+1−1

This diff is too big to show here.

nixos/tests/lightdm.nix+1−1

This diff is too big to show here.

nixos/tests/limesurvey.nix+1−1

This diff is too big to show here.

nixos/tests/litestream.nix+1−1

This diff is too big to show here.

nixos/tests/login.nix+1−1

This diff is too big to show here.

nixos/tests/logrotate.nixnew file+152

This diff is too big to show here.

nixos/tests/loki.nix+1−1

This diff is too big to show here.

nixos/tests/lorri/default.nix+1−1

This diff is too big to show here.

nixos/tests/lvm2/default.nixnew file+45

This diff is too big to show here.

nixos/tests/lvm2/systemd-stage-1.nixnew file+104

This diff is too big to show here.

nixos/tests/lvm2/thinpool.nixnew file+32

This diff is too big to show here.

nixos/tests/lvm2/vdo.nixnew file+27

This diff is too big to show here.

nixos/tests/lxd-image-server.nix+16−49

This diff is too big to show here.

nixos/tests/lxd-image.nixdeleted−89

This diff is too big to show here.

nixos/tests/lxd-nftables.nix+1−1

This diff is too big to show here.

nixos/tests/lxd.nix+41−64

This diff is too big to show here.

nixos/tests/maestral.nixnew file+72

This diff is too big to show here.

nixos/tests/magnetico.nix+1−1

This diff is too big to show here.

nixos/tests/mailcatcher.nix+8−3

This diff is too big to show here.

nixos/tests/mailhog.nix+1−1

This diff is too big to show here.

nixos/tests/matomo.nix+1−1

This diff is too big to show here.

nixos/tests/matrix-appservice-irc.nix+28−21

This diff is too big to show here.

nixos/tests/matrix-synapse.nix+46−18

This diff is too big to show here.

nixos/tests/matrix/mjolnir.nix+24−19

This diff is too big to show here.

nixos/tests/matrix/pantalaimon.nix+27−4

This diff is too big to show here.

nixos/tests/mediawiki.nix+1−1

This diff is too big to show here.

nixos/tests/meilisearch.nix+1−1

This diff is too big to show here.

nixos/tests/memcached.nix+1−1

This diff is too big to show here.

nixos/tests/minidlna.nix+4−2

This diff is too big to show here.

nixos/tests/miniflux.nix+18−6

This diff is too big to show here.

nixos/tests/misc.nix+4−4

This diff is too big to show here.

nixos/tests/mod_perl.nix+1−1

This diff is too big to show here.

nixos/tests/mongodb.nix+4

This diff is too big to show here.

nixos/tests/moodle.nix+1−1

This diff is too big to show here.

nixos/tests/moonraker.nixnew file+45

This diff is too big to show here.

nixos/tests/mtp.nixnew file+109

This diff is too big to show here.

nixos/tests/musescore.nix+1−1

This diff is too big to show here.

nixos/tests/mysql/mysql-autobackup.nix+1−1

This diff is too big to show here.

nixos/tests/nagios.nix+1−1

This diff is too big to show here.

nixos/tests/nano.nixdeleted−44

This diff is too big to show here.

nixos/tests/nar-serve.nix+1−1

This diff is too big to show here.

nixos/tests/nats.nix+11−13

This diff is too big to show here.

nixos/tests/navidrome.nix+1−1

This diff is too big to show here.

nixos/tests/nbd.nixnew file+103

This diff is too big to show here.

nixos/tests/ncdns.nix+6−9

This diff is too big to show here.

nixos/tests/networking.nix+56−11

This diff is too big to show here.

nixos/tests/nextcloud/default.nix+1−1

This diff is too big to show here.

nixos/tests/nextcloud/with-mysql-and-memcached.nix+1−22

This diff is too big to show here.

nixos/tests/nginx-modsecurity.nixnew file+39

This diff is too big to show here.

nixos/tests/nginx-pubhtml.nix+1−1

This diff is too big to show here.

nixos/tests/nginx-sandbox.nix+1−1

This diff is too big to show here.

nixos/tests/nginx-sso.nix+1−1

This diff is too big to show here.

nixos/tests/nginx-variants.nix+1−1

This diff is too big to show here.

nixos/tests/nix-ld.nixnew file+20

This diff is too big to show here.

nixos/tests/nix-serve.nix+1−1

This diff is too big to show here.

nixos/tests/nixops/default.nix+2−2

This diff is too big to show here.

nixos/tests/nixos-generate-config.nix+1−1

This diff is too big to show here.

nixos/tests/noto-fonts.nix+1−1

This diff is too big to show here.

nixos/tests/novacomd.nix+1−1

This diff is too big to show here.

nixos/tests/oh-my-zsh.nix+1−1

This diff is too big to show here.

nixos/tests/openldap.nix+3−3

This diff is too big to show here.

nixos/tests/openssh.nix+12−6

This diff is too big to show here.

nixos/tests/opentabletdriver.nix+1−1

This diff is too big to show here.

nixos/tests/os-prober.nix+1−1

This diff is too big to show here.

nixos/tests/osrm-backend.nix+1−1

This diff is too big to show here.

nixos/tests/overlayfs.nix+1−1

This diff is too big to show here.

nixos/tests/pacemaker.nixnew file+110

This diff is too big to show here.

nixos/tests/packagekit.nix+1−1

This diff is too big to show here.

nixos/tests/pam/pam-oath-login.nix+2−2

This diff is too big to show here.

nixos/tests/pam/pam-u2f.nix+1−1

This diff is too big to show here.

nixos/tests/pam/pam-ussh.nixnew file+70

This diff is too big to show here.

nixos/tests/pantheon.nix+1−1

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-standalone.nixnew file+43

This diff is too big to show here.

nixos/tests/pgadmin4.nixnew file+132

This diff is too big to show here.

nixos/tests/php/fpm.nix+1−1

This diff is too big to show here.

nixos/tests/php/httpd.nix+1−1

This diff is too big to show here.

nixos/tests/php/pcre.nix+1−1

This diff is too big to show here.

nixos/tests/pict-rs.nix+1−1

This diff is too big to show here.

nixos/tests/plasma5-systemd-start.nix+1−1

This diff is too big to show here.

nixos/tests/plasma5.nix+1−1

This diff is too big to show here.

nixos/tests/plausible.nix+1−1

This diff is too big to show here.

nixos/tests/pleroma.nix+2−18

This diff is too big to show here.

nixos/tests/plikd.nix+1−1

This diff is too big to show here.

nixos/tests/plotinus.nix+1−1

This diff is too big to show here.

nixos/tests/podman/default.nix+1−1

This diff is too big to show here.

nixos/tests/podman/tls-ghostunnel.nix+1−1

This diff is too big to show here.

nixos/tests/postfix-raise-smtpd-tls-security-level.nix+1−1

This diff is too big to show here.

nixos/tests/postfix.nix+1−1

This diff is too big to show here.

nixos/tests/postgresql-wal-receiver.nix+1−1

This diff is too big to show here.

nixos/tests/postgresql.nix+1−1

This diff is too big to show here.

nixos/tests/power-profiles-daemon.nix+1−1

This diff is too big to show here.

nixos/tests/powerdns.nix+1

This diff is too big to show here.

nixos/tests/predictable-interface-names.nix+1−1

This diff is too big to show here.

nixos/tests/privacyidea.nix+1−1

This diff is too big to show here.

nixos/tests/privoxy.nix+1−1

This diff is too big to show here.

nixos/tests/prometheus-exporters.nix+30

This diff is too big to show here.

nixos/tests/pt2-clone.nix+1−1

This diff is too big to show here.

nixos/tests/pulseaudio.nix+1−1

This diff is too big to show here.

nixos/tests/qboot.nix+1−1

This diff is too big to show here.

nixos/tests/rabbitmq.nix+1−1

This diff is too big to show here.

nixos/tests/radicale.nix+1−1

This diff is too big to show here.

nixos/tests/rasdaemon.nix+1−1

This diff is too big to show here.

nixos/tests/redmine.nix+1−1

This diff is too big to show here.

nixos/tests/restart-by-activation-script.nix+1−1

This diff is too big to show here.

nixos/tests/retroarch.nix+1−1

This diff is too big to show here.

nixos/tests/riak.nix+1−1

This diff is too big to show here.

nixos/tests/rspamd.nix+5−5

This diff is too big to show here.

nixos/tests/rstudio-server.nix−6

This diff is too big to show here.

nixos/tests/rsyslogd.nix+2−2

This diff is too big to show here.

nixos/tests/sabnzbd.nix+1−1

This diff is too big to show here.

nixos/tests/sddm.nix+2−2

This diff is too big to show here.

nixos/tests/sfxr-qt.nixnew file+32

This diff is too big to show here.

nixos/tests/shattered-pixel-dungeon.nix+1−1

This diff is too big to show here.

nixos/tests/shiori.nix+1−2

This diff is too big to show here.

nixos/tests/signal-desktop.nix+1−1

This diff is too big to show here.

nixos/tests/simple.nix+1−1

This diff is too big to show here.

nixos/tests/snapcast.nix+1

This diff is too big to show here.

nixos/tests/snapper.nix+1−1

This diff is too big to show here.

nixos/tests/soapui.nix+1−1

This diff is too big to show here.

nixos/tests/solr.nix+1−1

This diff is too big to show here.

nixos/tests/sourcehut.nix+1−1

This diff is too big to show here.

nixos/tests/sssd-ldap.nix+1−1

This diff is too big to show here.

nixos/tests/sssd.nix+1−1

This diff is too big to show here.

nixos/tests/starship.nix+1−1

This diff is too big to show here.

nixos/tests/step-ca.nix+3−2

This diff is too big to show here.

nixos/tests/sway.nix+1−1

This diff is too big to show here.

nixos/tests/switch-test.nix+339−36

This diff is too big to show here.

nixos/tests/sympa.nix+1−1

This diff is too big to show here.

nixos/tests/syncthing-init.nix+1−1

This diff is too big to show here.

nixos/tests/syncthing-relay.nix+1−1

This diff is too big to show here.

nixos/tests/systemd-analyze.nix+1−1

This diff is too big to show here.

nixos/tests/systemd-binfmt.nix+3−3

This diff is too big to show here.

nixos/tests/systemd-boot.nix+9−9

This diff is too big to show here.

nixos/tests/systemd-confinement.nix+27−4

This diff is too big to show here.

nixos/tests/systemd-cryptenroll.nix+1−1

This diff is too big to show here.

nixos/tests/systemd-escaping.nixnew file+45

This diff is too big to show here.

nixos/tests/systemd-initrd-btrfs-raid.nixnew file+45

This diff is too big to show here.

nixos/tests/systemd-initrd-luks-keyfile.nixnew file+53

This diff is too big to show here.

nixos/tests/systemd-initrd-luks-password.nixnew file+48

This diff is too big to show here.

nixos/tests/systemd-initrd-simple.nixnew file+44

This diff is too big to show here.

nixos/tests/systemd-initrd-swraid.nixnew file+50

This diff is too big to show here.

nixos/tests/systemd-journal.nix+1−1

This diff is too big to show here.

nixos/tests/systemd-machinectl.nixnew file+85

This diff is too big to show here.

nixos/tests/systemd-unit-path.nix → nixos/tests/systemd-misc.nixrenamed+17−2

This diff is too big to show here.

nixos/tests/systemd-networkd.nix+10

This diff is too big to show here.

nixos/tests/systemd-shutdown.nixnew file+26

This diff is too big to show here.

nixos/tests/systemd.nix+5−1

This diff is too big to show here.

nixos/tests/taskserver.nix+1

This diff is too big to show here.

nixos/tests/telegraf.nix+1−1

This diff is too big to show here.

nixos/tests/terminal-emulators.nixnew file+207

This diff is too big to show here.

nixos/tests/tinywl.nix+2−1

This diff is too big to show here.

nixos/tests/tomcat.nixnew file+21

This diff is too big to show here.

nixos/tests/tor.nix+10−15

This diff is too big to show here.

nixos/tests/transmission.nix+1−1

This diff is too big to show here.

nixos/tests/tsm-client-gui.nix+1−1

This diff is too big to show here.

nixos/tests/tuptime.nix+1−1

This diff is too big to show here.

nixos/tests/turbovnc-headless-server.nix+1−1

This diff is too big to show here.

nixos/tests/tuxguitar.nix+1−1

This diff is too big to show here.

nixos/tests/udisks2.nix+1−1

This diff is too big to show here.

nixos/tests/usbguard.nix+1−1

This diff is too big to show here.

nixos/tests/user-activation-scripts.nix+1−1

This diff is too big to show here.

nixos/tests/uwsgi.nix+1−1

This diff is too big to show here.

nixos/tests/v2ray.nix+1−1

This diff is too big to show here.

nixos/tests/vault-postgresql.nix+1−1

This diff is too big to show here.

nixos/tests/vault.nix+1−1

This diff is too big to show here.

nixos/tests/vaultwarden.nix−1

This diff is too big to show here.

nixos/tests/vector.nix+1−1

This diff is too big to show here.

nixos/tests/vengi-tools.nix+1−1

This diff is too big to show here.

nixos/tests/virtualbox.nix+1−1

This diff is too big to show here.

nixos/tests/vsftpd.nixnew file+42

This diff is too big to show here.

nixos/tests/web-apps/mastodon.nixnew file+170

This diff is too big to show here.

nixos/tests/web-apps/netbox.nixnew file+30

This diff is too big to show here.

nixos/tests/web-apps/nifi.nixnew file+30

This diff is too big to show here.

nixos/tests/web-apps/peertube.nix+6−2

This diff is too big to show here.

nixos/tests/web-servers/unit-php.nix+1−1

This diff is too big to show here.

nixos/tests/wiki-js.nix+1−1

This diff is too big to show here.

nixos/tests/wine.nix+11−4

This diff is too big to show here.

nixos/tests/without-nix.nix+15−6

This diff is too big to show here.

nixos/tests/wmderland.nix+1−1

This diff is too big to show here.

nixos/tests/wpa_supplicant.nix+1−1

This diff is too big to show here.

nixos/tests/xfce.nix+1−1

This diff is too big to show here.

nixos/tests/xmonad-xdg-autostart.nixnew file+35

This diff is too big to show here.

nixos/tests/xmonad.nix+1−1

This diff is too big to show here.

nixos/tests/xmpp/prosody-mysql.nixnew file+124

This diff is too big to show here.

nixos/tests/xmpp/prosody.nix+1

This diff is too big to show here.

nixos/tests/xmpp/xmpp-sendmessage.nix+1−4

This diff is too big to show here.

nixos/tests/xterm.nix+1−1

This diff is too big to show here.

nixos/tests/yabar.nix+1−1

This diff is too big to show here.

nixos/tests/zammad.nixnew file+60

This diff is too big to show here.

nixos/tests/zfs.nix+51−1

This diff is too big to show here.

nixos/tests/zigbee2mqtt.nix+1−1

This diff is too big to show here.

nixos/tests/zoneminder.nix+1−1

This diff is too big to show here.

nixos/tests/zrepl.nixnew file+66

This diff is too big to show here.

pkgs/applications/accessibility/espeakup/default.nixnew file+46

This diff is too big to show here.

pkgs/applications/accessibility/squeekboard/default.nix+2−1

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

This diff is too big to show here.

pkgs/applications/audio/aj-snapshot/default.nix+2−3

This diff is too big to show here.

pkgs/applications/audio/amberol/default.nixnew file+75

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/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-studio2.nix+1−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/cantata/default.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/cardinal/default.nixnew file+67

This diff is too big to show here.

pkgs/applications/audio/carla/default.nix+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.nixnew file+30

This diff is too big to show here.

pkgs/applications/audio/clementine/default.nix+3−10

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/cmusfm/default.nix+16−10

This diff is too big to show here.

pkgs/applications/audio/csound/default.nix+4−4

This diff is too big to show here.

pkgs/applications/audio/deadbeef/default.nix−1

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/dragonfly-reverb/default.nix+2−2

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/eteroj.lv2/default.nixdeleted−23

This diff is too big to show here.

pkgs/applications/audio/faust/faust2.nix+2−2

This diff is too big to show here.

pkgs/applications/audio/faust/faustlive.nix+9−12

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/flac/default.nix+2−10

This diff is too big to show here.

pkgs/applications/audio/fluidsynth/default.nix+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/friture/default.nix+3−12

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/furnace/default.nixnew file+100

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/gnome-podcasts/default.nix+11

This diff is too big to show here.

pkgs/applications/audio/goattracker/default.nix+2−3

This diff is too big to show here.

pkgs/applications/audio/gpodder/default.nix+9−4

This diff is too big to show here.

pkgs/applications/audio/gpodder/disable-autoupdate.patch+8−29

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/gtkpod/default.nix+5−4

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/helvum/default.nix+1−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/industrializer/default.nix+1−3

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/jamesdsp/default.nix+43−12

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/jellycli/default.nixnew file+33

This diff is too big to show here.

pkgs/applications/audio/jellycli/fix-test-dir.patchnew file+13

This diff is too big to show here.

pkgs/applications/audio/jmusicbot/default.nix+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/lv2lint/default.nixnew file+22

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/magnetophonDSP/faustCompressors/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/mid2key/default.nix+7−4

This diff is too big to show here.

pkgs/applications/audio/midas/generic.nix+4−5

This diff is too big to show here.

pkgs/applications/audio/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/mopidy/youtube.nix+6−5

This diff is too big to show here.

pkgs/applications/audio/mopidy/ytmusic.nix+11−2

This diff is too big to show here.

pkgs/applications/audio/musescore/darwin.nix−1

This diff is too big to show here.

pkgs/applications/audio/musescore/default.nix−1

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/netease-cloud-music-gtk/default.nix−1

This diff is too big to show here.

pkgs/applications/audio/new-session-manager/default.nix+3−3

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/eteroj.nixnew file+10

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/generic.nixnew file+37

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/jit.nixnew file+12

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/mephisto.nixnew file+17

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/midi_matrix.nixnew file+10

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/moony.nixnew file+13

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/orbit.nixnew file+12

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/patchmatrix.nixnew file+13

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/router.nixnew file+11

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/sherlock.nixnew file+12

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/synthpod.nixnew file+13

This diff is too big to show here.

pkgs/applications/audio/open-music-kontrollers/vm.nixnew file+10

This diff is too big to show here.

pkgs/applications/audio/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/patchage/default.nix+33−11

This diff is too big to show here.

pkgs/applications/audio/patchmatrix/default.nixdeleted−45

This diff is too big to show here.

pkgs/applications/audio/pd-plugins/zexy/default.nix+2−1

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/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/plujain-ramp/default.nix+1−1

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/psst/default.nixnew file+39

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/puddletag/default.nix+46−9

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

This diff is too big to show here.

pkgs/applications/audio/qmmp/default.nix−1

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/r128gain/default.nix+2−8

This diff is too big to show here.

pkgs/applications/audio/rhythmbox/default.nix+10

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/rubyripper/default.nix+23−11

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/sfxr-qt/default.nix+24−2

This diff is too big to show here.

pkgs/applications/audio/sfxr-qt/test-export-square-wave/default.nixnew file+6

This diff is too big to show here.

pkgs/applications/audio/sfxr-qt/test-export-square-wave/input.sfxjnew file+29

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/sisco.lv2/default.nix+2−2

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/sony-headphones-client/default.nix+1−1

This diff is too big to show here.

pkgs/applications/audio/sound-juicer/default.nix+10

This diff is too big to show here.

pkgs/applications/audio/soundconverter/default.nixnew file+85

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/soundscape-renderer/default.nix+13−11

This diff is too big to show here.

pkgs/applications/audio/soundwireserver/default.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/sptlrx/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/squeezelite/default.nix+48−30

This diff is too big to show here.

pkgs/applications/audio/strawberry/default.nix+5−2

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/synaesthesia/default.nixnew file+33

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/termusic/default.nixnew file+28

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/tonelib-gfx/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/tonelib-jam/default.nix+3−3

This diff is too big to show here.

pkgs/applications/audio/tonelib-metal/default.nixnew file+60

This diff is too big to show here.

pkgs/applications/audio/vgmstream/default.nix+21−12

This diff is too big to show here.

pkgs/applications/audio/vgmstream/update.shnew file+77

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/audio/vocal/default.nix+7−1

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/audio/xsynth-dssi/default.nix+2−1

This diff is too big to show here.

pkgs/applications/audio/yoshimi/default.nix+49−18

This diff is too big to show here.

pkgs/applications/audio/zrythm/default.nix+11−7

This diff is too big to show here.

pkgs/applications/backup/pika-backup/default.nix+9

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+4−5

This diff is too big to show here.

pkgs/applications/blockchains/bitcoin-unlimited/default.nix+1−1

This diff is too big to show here.

pkgs/applications/blockchains/bitcoin/default.nix+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+34−39

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/blockchains/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/chia/default.nix+6−2

This diff is too big to show here.

pkgs/applications/blockchains/clightning/default.nix+15−5

This diff is too big to show here.

pkgs/applications/blockchains/crypto-org-wallet/default.nix+1−1

This diff is too big to show here.

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

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

This diff is too big to show here.

pkgs/applications/blockchains/erigon.nix+3−3

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/blockchains/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/lightwalletd/default.nix+2−2

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/blockchains/lnd/default.nix+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+3−3

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/blockchains/nbxplorer/default.nix+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/nbxplorer/util/update-common.sh+1−1

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/oxen/default.nix+4−3

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/blockchains/polkadot/default.nix+21−25

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/trezor-suite/default.nix+3−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/wasabiwallet/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/display-managers/lightdm-enso-os-greeter/default.nix+6−5

This diff is too big to show here.

pkgs/applications/editors/android-studio/common.nix+11−9

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/editors/bless/default.nix+12−6

This diff is too big to show here.

pkgs/applications/editors/bluej/default.nix+37−10

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

This diff is too big to show here.

pkgs/applications/editors/cudatext/update.sh+1−1

This diff is too big to show here.

pkgs/applications/editors/eclipse/build-eclipse.nix+3−2

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/ed/default.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/ebuild-mode/default.nix+2−2

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix+308−109

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/elpa-packages.nix+2−1

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/emacs2nix.nix+4−3

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/emacspeak/default.nix+2−1

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+8

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/nongnu-generated.nix+72−58

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/nongnu-packages.nix+2−1

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/plz/default.nix+12−4

This diff is too big to show here.

pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json+4430−3091

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+15−6

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/editors/gnome-builder/default.nix+8−18

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/hexdino/default.nix+6−6

This diff is too big to show here.

pkgs/applications/editors/jetbrains/darwin.nixnew file+36

This diff is too big to show here.

pkgs/applications/editors/jetbrains/default.nix+121−113

This diff is too big to show here.

pkgs/applications/editors/jetbrains/common.nix → pkgs/applications/editors/jetbrains/linux.nixrenamed+18−23

This diff is too big to show here.

pkgs/applications/editors/jetbrains/update.pldeleted−101

This diff is too big to show here.

pkgs/applications/editors/jetbrains/update.pynew file+100

This diff is too big to show here.

pkgs/applications/editors/jetbrains/versions.jsonnew file+296

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/editors/jupyter-kernels/octave/default.nix+2−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/editors/kakoune/plugins/update.py+2−2

This diff is too big to show here.

pkgs/applications/editors/kdevelop5/kdev-php.nix+4−6

This diff is too big to show here.

pkgs/applications/editors/kdevelop5/kdev-python.nix+4−6

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/editors/lapce/default.nixnew file+99

This diff is too big to show here.

pkgs/applications/editors/leo-editor/default.nix+5−7

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/micro/default.nix+3−1

This diff is too big to show here.

pkgs/applications/editors/micro/test-with-expect.nixnew file+30

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/editors/music/tuxguitar/default.nix+3−3

This diff is too big to show here.

pkgs/applications/editors/nano/default.nix+6−4

This diff is too big to show here.

pkgs/applications/editors/nano/test-with-expect.nixnew file+35

This diff is too big to show here.

pkgs/applications/editors/neovim/default.nix+13−22

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/editors/netbeans/default.nix+3−3

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/editors/pinegrow/default.nixnew file+80

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/editors/quartus-prime/default.nix+1−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/editors/rstudio/default.nix+8−3

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

This diff is too big to show here.

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

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

This diff is too big to show here.

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

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/configurable.nix+7−34

This diff is too big to show here.

pkgs/applications/editors/vim/macvim.nix+3−3

This diff is too big to show here.

pkgs/applications/editors/vim/macvim.patch+32−34

This diff is too big to show here.

pkgs/misc/vim-plugins/aliases.nix → pkgs/applications/editors/vim/plugins/aliases.nixrenamed

The content is the same.

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

This diff is too big to show here.

pkgs/misc/vim-plugins/default.nix → pkgs/applications/editors/vim/plugins/default.nixrenamed+8−3

This diff is too big to show here.

pkgs/misc/vim-plugins/deprecated.json → pkgs/applications/editors/vim/plugins/deprecated.jsonrenamed

The content is the same.

pkgs/misc/vim-plugins/generated.nix → pkgs/applications/editors/vim/plugins/generated.nixrenamed+1777−1548

This diff is too big to show here.

pkgs/misc/vim-plugins/markdown-preview-nvim/fix-node-paths.patch → pkgs/applications/editors/vim/plugins/markdown-preview-nvim/fix-node-paths.patchrenamed

The content is the same.

pkgs/misc/vim-plugins/markdown-preview-nvim/package.json → pkgs/applications/editors/vim/plugins/markdown-preview-nvim/package.jsonrenamed

The content is the same.

pkgs/misc/vim-plugins/overrides.nix → pkgs/applications/editors/vim/plugins/overrides.nixrenamed+38−9

This diff is too big to show here.

pkgs/misc/vim-plugins/patches/fruzzy/get_version.patch → pkgs/applications/editors/vim/plugins/patches/fruzzy/get_version.patchrenamed

The content is the same.

pkgs/misc/vim-plugins/patches/lens-vim/remove_duplicate_g_lens_animate.patch → pkgs/applications/editors/vim/plugins/patches/lens-vim/remove_duplicate_g_lens_animate.patchrenamed

The content is the same.

pkgs/misc/vim-plugins/patches/sniprun/fix-paths.patch → pkgs/applications/editors/vim/plugins/patches/sniprun/fix-paths.patchrenamed

The content is the same.

pkgs/misc/vim-plugins/patches/vim-grammarous/set_default_languagetool.patch → pkgs/applications/editors/vim/plugins/patches/vim-grammarous/set_default_languagetool.patchrenamed

The content is the same.

pkgs/misc/vim-plugins/readme.md → pkgs/applications/editors/vim/plugins/readme.mdrenamed

The content is the same.

pkgs/misc/vim-plugins/update-shell.nix → pkgs/applications/editors/vim/plugins/update-shell.nixrenamed+2−1

This diff is too big to show here.

pkgs/misc/vim-plugins/update.py → pkgs/applications/editors/vim/plugins/update.pyrenamed+53−18

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/misc/vim-plugins/vim-gen-doc-hook.sh → pkgs/applications/editors/vim/plugins/vim-gen-doc-hook.shrenamed

The content is the same.

pkgs/applications/editors/vim/plugins/vim-plugin-namesnew file+1014

This diff is too big to show here.

pkgs/misc/vim-plugins/vim-utils.nix → pkgs/applications/editors/vim/plugins/vim-utils.nixrenamed+93−58

This diff is too big to show here.

pkgs/misc/vim-plugins/vim2nix/README.txt → pkgs/applications/editors/vim/plugins/vim2nix/README.txtrenamed

The content is the same.

pkgs/misc/vim-plugins/vim2nix/addon-info.json → pkgs/applications/editors/vim/plugins/vim2nix/addon-info.jsonrenamed

The content is the same.

pkgs/misc/vim-plugins/vim2nix/autoload/nix.vim → pkgs/applications/editors/vim/plugins/vim2nix/autoload/nix.vimrenamed

The content is the same.

pkgs/applications/editors/vis/default.nix+4−8

This diff is too big to show here.

pkgs/misc/vscode-extensions/_maintainers/update-bin-srcs-lib.sh → pkgs/applications/editors/vscode/extensions/_maintainers/update-bin-srcs-lib.shrenamed

The content is the same.

pkgs/misc/vscode-extensions/cpptools/default.nix → pkgs/applications/editors/vscode/extensions/cpptools/default.nixrenamed+16−4

This diff is too big to show here.

pkgs/misc/vscode-extensions/cpptools/missing_elf_deps.sh → pkgs/applications/editors/vscode/extensions/cpptools/missing_elf_deps.shrenamed

The content is the same.

pkgs/misc/vscode-extensions/cpptools/package-activation-events.json → pkgs/applications/editors/vscode/extensions/cpptools/package-activation-events.jsonrenamed

The content is the same.

pkgs/misc/vscode-extensions/cpptools/update_helper.sh → pkgs/applications/editors/vscode/extensions/cpptools/update_helper.shrenamed

The content is the same.

pkgs/misc/vscode-extensions/default.nix → pkgs/applications/editors/vscode/extensions/default.nixrenamed+174−39

This diff is too big to show here.

pkgs/misc/vscode-extensions/language-packs.nix → pkgs/applications/editors/vscode/extensions/language-packs.nixrenamed

The content is the same.

pkgs/misc/vscode-extensions/mktplcExtRefToFetchArgs.nix → pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nixrenamed

The content is the same.

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

This diff is too big to show here.

pkgs/misc/vscode-extensions/ms-dotnettools-csharp/rt-deps-bin-srcs.json → pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/rt-deps-bin-srcs.jsonrenamed

The content is the same.

pkgs/misc/vscode-extensions/ms-dotnettools-csharp/update-bin-srcs → pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/update-bin-srcsrenamed

The content is the same.

pkgs/misc/vscode-extensions/ms-toolsai-jupyter/default.nix → pkgs/applications/editors/vscode/extensions/ms-toolsai-jupyter/default.nixrenamed

The content is the same.

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

This diff is too big to show here.

pkgs/misc/vscode-extensions/ms-vsliveshare-vsliveshare/noop-syslog.c → pkgs/applications/editors/vscode/extensions/ms-vsliveshare-vsliveshare/noop-syslog.crenamed

The content is the same.

pkgs/misc/vscode-extensions/python/default.nix → pkgs/applications/editors/vscode/extensions/python/default.nixrenamed+2−2

This diff is too big to show here.

pkgs/misc/vscode-extensions/python/extract-nuget.nix → pkgs/applications/editors/vscode/extensions/python/extract-nuget.nixrenamed

The content is the same.

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

This diff is too big to show here.

pkgs/misc/vscode-extensions/rescript/default.nix → pkgs/applications/editors/vscode/extensions/rescript/default.nixrenamed

The content is the same.

pkgs/misc/vscode-extensions/rescript/rescript-editor-analysis.nix → pkgs/applications/editors/vscode/extensions/rescript/rescript-editor-analysis.nixrenamed

The content is the same.

pkgs/applications/editors/vscode/extensions/rust-analyzer/build-deps/package.jsonnew file+19

This diff is too big to show here.

pkgs/misc/vscode-extensions/rust-analyzer/default.nix → pkgs/applications/editors/vscode/extensions/rust-analyzer/default.nixrenamed+3−3

This diff is too big to show here.

pkgs/applications/editors/vscode/extensions/rust-analyzer/update.shnew file+49

This diff is too big to show here.

pkgs/misc/vscode-extensions/terraform/default.nix → pkgs/applications/editors/vscode/extensions/terraform/default.nixrenamed

The content is the same.

pkgs/misc/vscode-extensions/terraform/fix-terraform-ls.patch → pkgs/applications/editors/vscode/extensions/terraform/fix-terraform-ls.patchrenamed

The content is the same.

pkgs/misc/vscode-extensions/updateSettings.nix → pkgs/applications/editors/vscode/extensions/updateSettings.nixrenamed

The content is the same.

pkgs/misc/vscode-extensions/updateSettingsTest.nix → pkgs/applications/editors/vscode/extensions/updateSettingsTest.nixrenamed

The content is the same.

pkgs/misc/vscode-extensions/update_installed_exts.sh → pkgs/applications/editors/vscode/extensions/update_installed_exts.shrenamed+1−1

This diff is too big to show here.

pkgs/misc/vscode-extensions/vscode-lldb/build-deps/package.json → pkgs/applications/editors/vscode/extensions/vscode-lldb/build-deps/package.jsonrenamed

The content is the same.

pkgs/misc/vscode-extensions/vscode-lldb/cmake-build-extension-only.patch → pkgs/applications/editors/vscode/extensions/vscode-lldb/cmake-build-extension-only.patchrenamed

The content is the same.

pkgs/misc/vscode-extensions/vscode-lldb/default.nix → pkgs/applications/editors/vscode/extensions/vscode-lldb/default.nixrenamed+1−1

This diff is too big to show here.

pkgs/misc/vscode-extensions/vscode-lldb/lldb.nix → pkgs/applications/editors/vscode/extensions/vscode-lldb/lldb.nixrenamed

The content is the same.

pkgs/misc/vscode-extensions/vscode-lldb/reset-cargo-config.patch → pkgs/applications/editors/vscode/extensions/vscode-lldb/reset-cargo-config.patchrenamed

The content is the same.

pkgs/misc/vscode-extensions/vscode-lldb/update.sh → pkgs/applications/editors/vscode/extensions/vscode-lldb/update.shrenamed+5−3

This diff is too big to show here.

pkgs/misc/vscode-extensions/vscode-utils.nix → pkgs/applications/editors/vscode/extensions/vscode-utils.nixrenamed

The content is the same.

pkgs/misc/vscode-extensions/vscodeEnv.nix → pkgs/applications/editors/vscode/extensions/vscodeEnv.nixrenamed

The content is the same.

pkgs/misc/vscode-extensions/vscodeEnvTest.nix → pkgs/applications/editors/vscode/extensions/vscodeEnvTest.nixrenamed

The content is the same.

pkgs/misc/vscode-extensions/vscodeExts2nix.nix → pkgs/applications/editors/vscode/extensions/vscodeExts2nix.nixrenamed

The content is the same.

pkgs/misc/vscode-extensions/vscodeWithConfiguration.nix → pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nixrenamed

The content is the same.

pkgs/misc/vscode-extensions/wakatime/default.nix → pkgs/applications/editors/vscode/extensions/wakatime/default.nixrenamed+2−2

This diff is too big to show here.

pkgs/applications/editors/vscode/generic.nix+27−25

This diff is too big to show here.

pkgs/applications/editors/vscode/update-shell.nixnew file+18

This diff is too big to show here.

pkgs/applications/editors/vscode/update-vscode.sh+2−2

This diff is too big to show here.

pkgs/applications/editors/vscode/update-vscodium.sh+18−14

This diff is too big to show here.

pkgs/applications/editors/vscode/vscode.nix+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/wxhexeditor/default.nix+2−1

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/editors/xxe-pe/default.nix+1−1

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

This diff is too big to show here.

pkgs/applications/emulators/cdemu/vhba.nix+1−1

This diff is too big to show here.

pkgs/applications/emulators/collapseos-cvm/default.nixnew file+30

This diff is too big to show here.

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

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/dosbox-staging/default.nix+1−1

This diff is too big to show here.

pkgs/applications/emulators/dosbox/default.nix+1−1

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

This diff is too big to show here.

pkgs/applications/emulators/flycast/default.nixnew file+52

This diff is too big to show here.

pkgs/applications/emulators/goldberg-emu/default.nixnew file+52

This diff is too big to show here.

pkgs/applications/emulators/goldberg-emu/dont-install-unsupported.patchnew file+34

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+65−15

This diff is too big to show here.

pkgs/applications/emulators/mednafen/default.nix+12−6

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

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

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/reicast/default.nixdeleted−52

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/rpcs3/default.nix+4−4

This diff is too big to show here.

pkgs/applications/emulators/ryujinx/appdir.patchnew file+23

This diff is too big to show here.

pkgs/applications/emulators/ryujinx/default.nix+46−28

This diff is too big to show here.

pkgs/applications/emulators/ryujinx/deps.nix+11−11

This diff is too big to show here.

pkgs/applications/emulators/ryujinx/log.patchdeleted−21

This diff is too big to show here.

pkgs/applications/emulators/ryujinx/updater.sh+71−25

This diff is too big to show here.

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

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/vice/default.nix+108−12

This diff is too big to show here.

pkgs/applications/emulators/wine/base.nix+4−4

This diff is too big to show here.

pkgs/applications/emulators/wine/packages.nix+3−3

This diff is too big to show here.

pkgs/applications/emulators/wine/sources.nix+3−3

This diff is too big to show here.

pkgs/applications/emulators/wine/vkd3d.nix+5−3

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/emulators/zsnes/default.nix+1−1

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.nixnew file+73

This diff is too big to show here.

pkgs/applications/gis/grass/default.nix+11−37

This diff is too big to show here.

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

This diff is too big to show here.

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

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+56−22

This diff is too big to show here.

pkgs/applications/graphics/antimony/default.nix+3−7

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/graphics/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+15−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/evilpixie/default.nix+2−2

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/graphics/fiji/default.nix+4−9

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

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/gimp/wrapper.nix+2

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/graphics/glimpse/wrapper.nix+2

This diff is too big to show here.

pkgs/applications/graphics/gnome-obfuscate/default.nixnew file+70

This diff is too big to show here.

pkgs/applications/graphics/gnome-photos/default.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/gpicview/default.nix−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/hdrmerge/default.nixnew file+76

This diff is too big to show here.

pkgs/applications/graphics/hugin/default.nix+2−11

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/graphics/icon-library/default.nix+18−12

This diff is too big to show here.

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

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+9

This diff is too big to show here.

pkgs/applications/graphics/inkscape/extensions.nix+2−2

This diff is too big to show here.

pkgs/applications/graphics/ipe/default.nix+4−6

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/graphics/nomacs/default.nix−1

This diff is too big to show here.

pkgs/applications/graphics/nsxiv/default.nixnew file+61

This diff is too big to show here.

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

This diff is too big to show here.

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

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/paraview/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/pinta/default.nix+4

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/pixinsight/default.nix+3−3

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+29−21

This diff is too big to show here.

pkgs/applications/graphics/sane/config.nix+1−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/graphics/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-heaven/default.nixnew file+107

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-superposition/default.nixnew file+146

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/weylus/default.nix+53−38

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/graphics/xournal/default.nix+5−5

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/kde/kaddressbook.nix+4

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/kde/kalarmcal.nixdeleted−19

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/kde/konsole.nix+3−1

This diff is too big to show here.

pkgs/applications/kde/ktorrent.nixnew file+22

This diff is too big to show here.

pkgs/applications/kde/libktorrent.nixnew file+22

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/kde/skanlite.nixnew file+18

This diff is too big to show here.

pkgs/applications/kde/skanpage.nixnew file+32

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/kde/zanshin.nixnew file+18

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+18−5

This diff is too big to show here.

pkgs/applications/misc/1password/default.nix+46−29

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

This diff is too big to show here.

pkgs/applications/misc/ArchiSteamFarm/deps-x86_64-linux.nix+18−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/OSCAR/default.nix+6−4

This diff is too big to show here.

pkgs/applications/misc/ablog/default.nixnew file+36

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/almanah/default.nix+13−1

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/appeditor/default.nix+5

This diff is too big to show here.

pkgs/applications/misc/archivy/default.nix+16−26

This diff is too big to show here.

pkgs/applications/misc/audio/sox/default.nix+14−7

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

This diff is too big to show here.

pkgs/applications/misc/avizo/use-sysconfdir-instead-of-etc.patchdeleted−15

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/azuredatastudio/default.nix+19−23

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

This diff is too big to show here.

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

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+16−15

This diff is too big to show here.

pkgs/applications/misc/bottles/default.nix+11−11

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

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

This diff is too big to show here.

pkgs/applications/misc/cobang/0001-Poetry-core-and-pillow-9.patchnew file+31

This diff is too big to show here.

pkgs/applications/misc/cobang/default.nixnew file+102

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

This diff is too big to show here.

pkgs/applications/misc/crow-translate/default.nix+4−4

This diff is too big to show here.

pkgs/applications/misc/crow-translate/dont-fetch-external-libs.patch+1−1

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/cura/stable.nix+1−1

This diff is too big to show here.

pkgs/applications/misc/curaengine/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+9−37

This diff is too big to show here.

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

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

This diff is too big to show here.

pkgs/applications/misc/electron-cash/default.nix+3−2

This diff is too big to show here.

pkgs/applications/misc/electrum-grs/default.nix+4−22

This diff is too big to show here.

pkgs/applications/misc/electrum/default.nix+4−35

This diff is too big to show here.

pkgs/applications/misc/emojipick/default.nixnew file+71

This diff is too big to show here.

pkgs/applications/misc/eos-installer/default.nixnew file+48

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.nixnew file+56

This diff is too big to show here.

pkgs/applications/misc/faircamp/test-wav.nixnew file+14

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

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

This diff is too big to show here.

pkgs/applications/misc/font-manager/default.nix+2−12

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

This diff is too big to show here.

pkgs/applications/misc/freeplane/default.nix+20−15

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

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/ganttproject-bin/default.nix+1−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/globe-cli/default.nixnew file+21

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.nixnew file+80

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/golden-cheetah/default.nix+1−1

This diff is too big to show here.

pkgs/applications/misc/gometer/default.nixnew file+47

This diff is too big to show here.

pkgs/applications/misc/gosmore/default.nix+2−4

This diff is too big to show here.

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

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/gramps/default.nix+4

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/hcl2json/default.nixnew file+27

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

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

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

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/joshuto/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/jotta-cli/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/k40-whisperer/default.nixnew file+74

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/kchmviewer/default.nixnew file+48

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/keepassx/community.nix+2−1

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/klayout/default.nix+8−6

This diff is too big to show here.

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

This diff is too big to show here.

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

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/limesctl/default.nix+3−3

This diff is too big to show here.

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

This diff is too big to show here.

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

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

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

This diff is too big to show here.

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

This diff is too big to show here.

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

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/mdzk/default.nix+3−3

This diff is too big to show here.

pkgs/applications/misc/mediaelch/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/michabo/default.nix−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/mkgmap/splitter/default.nix+2−2

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/mobilecoin-wallet/default.nix+2−2

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/mop/default.nix+12−13

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/mucommander/default.nix+4−4

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/mupdf/0001-Use-command-v-in-favor-of-which.patchnew file+25

This diff is too big to show here.

pkgs/applications/misc/mupdf/0002-Add-Darwin-deps.patchnew file+57

This diff is too big to show here.

pkgs/applications/misc/mupdf/1.17.nix−1

This diff is too big to show here.

pkgs/applications/misc/mupdf/default.nix+45−16

This diff is too big to show here.

pkgs/applications/misc/natural-docs/default.nix+2−2

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/nerd-font-patcher/default.nix+9−8

This diff is too big to show here.

pkgs/applications/misc/nix-tour/default.nix+35−19

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−1

This diff is too big to show here.

pkgs/applications/misc/nwg-drawer/default.nix+21−7

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/obsidian/default.nix+74−60

This diff is too big to show here.

pkgs/applications/misc/octoprint/default.nix+8−205

This diff is too big to show here.

pkgs/applications/misc/oil-buku/default.nixnew file+44

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/organicmaps/default.nixnew file+86

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/pdfsam-basic/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/common.nix+2−4

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/pgadmin/default.nixdeleted−64

This diff is too big to show here.

pkgs/applications/misc/phoc/default.nix+10−3

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

This diff is too big to show here.

pkgs/applications/misc/playonlinux/default.nix+18−3

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

This diff is too big to show here.

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

This diff is too big to show here.

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

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/qMasterPassword/default.nix+5−5

This diff is too big to show here.

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

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/regextester/default.nix−1

This diff is too big to show here.

pkgs/applications/misc/remarkable/remarkable-mouse/default.nix+2−2

This diff is too big to show here.

pkgs/applications/misc/remarkable/rmview/default.nix+2−6

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

This diff is too big to show here.

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

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+9−5

This diff is too big to show here.

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

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

This diff is too big to show here.

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

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

This diff is too big to show here.

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

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/slmenu/default.nix+10−21

This diff is too big to show here.

pkgs/applications/misc/snapmaker-luban/default.nix+1−1

This diff is too big to show here.

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

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/spicetify-cli/default.nix+3−3

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

This diff is too big to show here.

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

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

This diff is too big to show here.

pkgs/applications/misc/survex/default.nix+36−43

This diff is too big to show here.

pkgs/applications/misc/sway-launcher-desktop/default.nixnew file+42

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/sweethome3d/editors.nix+1−1

This diff is too big to show here.

pkgs/applications/misc/systembus-notify/default.nix+39−5

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/teleprompter/default.nix−1

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/ticker/default.nix+3−3

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/toggldesktop/default.nix+1−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/tootle/default.nix+5

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/misc/trenchbroom/default.nix+14−1

This diff is too big to show here.

pkgs/applications/misc/tty-share/default.nix+6−4

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/tuhi/default.nix+3−3

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+4−6

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/urlview/default.nix+5−5

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

This diff is too big to show here.

pkgs/applications/misc/wego/default.nix+11−13

This diff is too big to show here.

pkgs/applications/misc/wego/deps.nixdeleted−48

This diff is too big to show here.

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

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

This diff is too big to show here.

pkgs/applications/misc/xmr-stak/default.nix+1−1

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+3−4

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/yubioath-desktop/default.nix+1−1

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/misc/zscroll/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/aether/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/apache-directory-studio/default.nix+1−1

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/blocky/default.nix+3−3

This diff is too big to show here.

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

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+29−34

This diff is too big to show here.

pkgs/applications/networking/browsers/chromium/default.nix+7−9

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/ungoogled-flags.tomlnew file+23

This diff is too big to show here.

pkgs/applications/networking/browsers/chromium/update.py+11

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/beta_sources.nix+393−393

This diff is too big to show here.

pkgs/applications/networking/browsers/firefox-bin/default.nix+1−3

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+286−190

This diff is too big to show here.

pkgs/applications/networking/browsers/firefox/librewolf/default.nix+2−2

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+6−5

This diff is too big to show here.

pkgs/applications/networking/browsers/firefox/wrapper.nix+19−21

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/browser.nixnew file+191

This diff is too big to show here.

pkgs/applications/networking/browsers/microsoft-edge/default.nixnew file+20

This diff is too big to show here.

pkgs/applications/networking/browsers/microsoft-edge/update.shnew file+50

This diff is too big to show here.

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

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

This diff is too big to show here.

pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix+14−5

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/browsers/vieb/package.json+12−17

This diff is too big to show here.

pkgs/applications/networking/browsers/vieb/yarn.lock+1276−1481

This diff is too big to show here.

pkgs/applications/networking/browsers/vieb/yarn.nix+1330−1546

This diff is too big to show here.

pkgs/applications/networking/browsers/vivaldi/default.nix+5−3

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/update.sh+5−1

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/browsers/webbrowser/default.nixdeleted−109

This diff is too big to show here.

pkgs/applications/networking/browsers/yandex-browser/default.nix+18−11

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

This diff is too big to show here.

pkgs/applications/networking/charles/default.nix+10−3

This diff is too big to show here.

pkgs/applications/networking/cisco-packet-tracer/7.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/cisco-packet-tracer/8.nix+4−3

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-rollouts/default.nixnew file+27

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/cluster/argocd-autopilot/default.nixnew file+54

This diff is too big to show here.

pkgs/applications/networking/cluster/argocd/default.nix+16−32

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

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+4−3

This diff is too big to show here.

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

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/cni/plugins.nix+2−2

This diff is too big to show here.

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

This diff is too big to show here.

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

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/cluster/hadoop/default.nix+52−16

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/chart-testing/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+39−22

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/k3s/update.sh+49−7

This diff is too big to show here.

pkgs/applications/networking/cluster/k9s/default.nix+3−2

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/kontemplate/default.nix−1

This diff is too big to show here.

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

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/krelay/default.nixnew file+31

This diff is too big to show here.

pkgs/applications/networking/cluster/kube-capacity/default.nix+3−3

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/kubecolor/default.nix+3−1

This diff is too big to show here.

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

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/kubemqctl/default.nixnew file+25

This diff is too big to show here.

pkgs/applications/networking/cluster/kubent/default.nixnew file+29

This diff is too big to show here.

pkgs/applications/networking/cluster/kubernetes/default.nix+17−16

This diff is too big to show here.

pkgs/applications/networking/cluster/kubernetes/kubectl.nix+19−10

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/linkerd/edge.nix+3−3

This diff is too big to show here.

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

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

This diff is too big to show here.

pkgs/applications/networking/cluster/nixops/poetry-git-overlay.nix+7−7

This diff is too big to show here.

pkgs/applications/networking/cluster/nixops/poetry.lock+88−117

This diff is too big to show here.

pkgs/applications/networking/cluster/nixops/pyproject.toml+4−1

This diff is too big to show here.

pkgs/applications/networking/cluster/nomad-autoscaler/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.nixnew file+32

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/cluster/odo/default.nixnew file+38

This diff is too big to show here.

pkgs/applications/networking/cluster/openshift/default.nix+36−45

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/pluto/default.nixnew file+27

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/cluster/rancher/default.nix+3−5

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+42−27

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+13−11

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+9−6

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+389−337

This diff is too big to show here.

pkgs/applications/networking/cluster/terraform-providers/update-all-providers+8−5

This diff is too big to show here.

pkgs/applications/networking/cluster/terraform-providers/update-provider+34−36

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

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/velero/default.nix+4−4

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/cozy-drive/default.nix+2−2

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/feedreaders/gnome-feeds/default.nix+2

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+10−4

This diff is too big to show here.

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

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix+30−28

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+12−9

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/deltachat-desktop/update.sh+1−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/element/element-desktop-package.json+4−3

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/element/element-desktop.nix+26−9

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/element/keytar/default.nix+8−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/element/seshat/default.nix+9−3

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/fluffychat/default.nix+51−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/gotktrix/default.nixnew file+42

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

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/matrixcli/default.nix+5−5

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-mra/default.nix+8−10

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/pidgin-plugins/telegram-purple/default.nix+6−8

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/profanity/default.nix+4−22

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

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/rambox/rambox.nix+1−2

This diff is too big to show here.

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

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/schildichat/pin.json+7−4

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/schildichat/schildichat-desktop.nix+9−10

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/schildichat/schildichat-web.nix+35−10

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/schildichat/update.sh+16−8

This diff is too big to show here.

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

This diff is too big to show here.

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

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/signald/0001-Fetch-buildconfig-during-gradle-build-inside-Nix-FOD.patchnew file+35

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/signald/0002-buildconfig-local-deps-fixes.patchnew file+60

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/signald/default.nix+12−27

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/signald/gradle-plugin.patchdeleted−19

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/sky/default.nixnew file+66

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/teamspeak/client.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix+191−33

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.patchnew file+424

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/shortcuts-binary-path.patchnew file+38

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt-10.12-sdk.patchnew file+68

This diff is too big to show here.

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

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

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/telegram/tdesktop/tg_owt.nix+5−3

This diff is too big to show here.

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

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/vk-messenger/default.nix+5−5

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/wire-desktop/default.nix+8−9

This diff is too big to show here.

pkgs/applications/networking/instant-messengers/zoom-us/default.nix+48−9

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

This diff is too big to show here.

pkgs/applications/networking/ipfs-migrator/all-migrations.nixnew file+63

This diff is too big to show here.

pkgs/applications/networking/ipfs-migrator/default.nix+16−20

This diff is too big to show here.

pkgs/applications/networking/ipfs-migrator/unwrapped.nixnew file+35

This diff is too big to show here.

pkgs/applications/networking/ipfs/default.nix+20−10

This diff is too big to show here.

pkgs/applications/networking/irc/bip/default.nix+2−1

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/irc/communi/default.nix+5−4

This diff is too big to show here.

pkgs/applications/networking/irc/ircdog/default.nix+5−4

This diff is too big to show here.

pkgs/applications/networking/irc/irssi/fish/default.nix+2−2

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/irc/quassel/default.nix−1

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/tiny/default.nix+8−4

This diff is too big to show here.

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

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/juju/default.nix+3−3

This diff is too big to show here.

pkgs/applications/networking/lieer/default.nix−1

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/maestral-qt/default.nix+7−2

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/mailreaders/alot/default.nix+1−7

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

This diff is too big to show here.

pkgs/applications/networking/mailreaders/evolution/evolution/default.nix+11−4

This diff is too big to show here.

pkgs/applications/networking/mailreaders/himalaya/default.nix+10−6

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+8−3

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+6−4

This diff is too big to show here.

pkgs/applications/networking/misc/zammad/0001-nulldb.patchnew file+15

This diff is too big to show here.

pkgs/applications/networking/misc/zammad/default.nixnew file+141

This diff is too big to show here.

pkgs/applications/networking/misc/zammad/gemset.nixnew file+2608

This diff is too big to show here.

pkgs/applications/networking/misc/zammad/package.jsonnew file+18

This diff is too big to show here.

pkgs/applications/networking/misc/zammad/source.jsonnew file+7

This diff is too big to show here.

pkgs/applications/networking/misc/zammad/update.nixnew file+37

This diff is too big to show here.

pkgs/applications/networking/misc/zammad/update.shnew file+68

This diff is too big to show here.

pkgs/applications/networking/misc/zammad/yarn.locknew file+1275

This diff is too big to show here.

pkgs/applications/networking/misc/zammad/yarn.nixnew file+1549

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

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/mumble/default.nix+47−73

This diff is too big to show here.

pkgs/applications/networking/mumble/fix-rnnoise-argument.patchdeleted−16

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/n8n/node-packages.nix+995−929

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

This diff is too big to show here.

pkgs/applications/networking/ostinato/default.nix+6−9

This diff is too big to show here.

pkgs/applications/networking/owamp/default.nix+2−1

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/fragments/default.nix+54−41

This diff is too big to show here.

pkgs/applications/networking/p2p/fragments/dependency-resolution.patchdeleted−25

This diff is too big to show here.

pkgs/applications/networking/p2p/frostwire/default.nix+7−7

This diff is too big to show here.

pkgs/applications/networking/p2p/frostwire/frostwire-bin.nix+17−4

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/ktorrent/default.nixdeleted−32

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/transgui/default.nix+3−7

This diff is too big to show here.

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+9−3

This diff is too big to show here.

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

This diff is too big to show here.

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

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/remmina/default.nix+10−6

This diff is too big to show here.

pkgs/applications/networking/remote/rustdesk/cargo.patchnew file+50

This diff is too big to show here.

pkgs/applications/networking/remote/rustdesk/default.nixnew file+104

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/networking/remote/x2goclient/default.nix+36−6

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

This diff is too big to show here.

pkgs/applications/networking/sniffers/sngrep/default.nix+2−13

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/ssb-patchwork/default.nix+1−1

This diff is too big to show here.

pkgs/applications/networking/sync/desync/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+10−5

This diff is too big to show here.

pkgs/applications/networking/sync/unison/default.nix+5−8

This diff is too big to show here.

pkgs/applications/networking/sync/wdt/default.nixnew file+34

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+9−14

This diff is too big to show here.

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

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/appflowy/default.nix+6−5

This diff is too big to show here.

pkgs/applications/office/autokey/remove-requires-dbus-python.patchdeleted−11

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+48−26

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/elementary-planner/default.nix+14−1

This diff is too big to show here.

pkgs/applications/office/espanso/default.nix+1

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/hledger-check-fancyassertions/default.nix+4−9

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/office/jameica/default.nix+9−8

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/default.nix+11−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/micropad/default.nixnew file+101

This diff is too big to show here.

pkgs/applications/office/micropad/package.jsonnew file+87

This diff is too big to show here.

pkgs/applications/office/micropad/yarn.locknew file+2006

This diff is too big to show here.

pkgs/applications/office/micropad/yarn.nixnew file+2341

This diff is too big to show here.

pkgs/applications/office/mmex/default.nix+26−29

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+33−41

This diff is too big to show here.

pkgs/applications/office/paperwork/openpaperwork-core.nix+1

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/office/paperwork/paperwork-gtk.nix+19−3

This diff is too big to show here.

pkgs/applications/office/paperwork/src.nix+2−2

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

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/scribus/unstable.nix+30

This diff is too big to show here.

pkgs/applications/office/skanlite/default.nixdeleted−30

This diff is too big to show here.

pkgs/applications/office/softmaker/desktop_items.nix+72−18

This diff is too big to show here.

pkgs/applications/office/spice-up/default.nix−1

This diff is too big to show here.

pkgs/applications/office/timeline/default.nix+4−7

This diff is too big to show here.

pkgs/applications/office/treesheets/default.nix+29−31

This diff is too big to show here.

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

This diff is too big to show here.

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

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/wpsoffice/default.nix−1

This diff is too big to show here.

pkgs/applications/office/zanshin/default.nixdeleted−38

This diff is too big to show here.

pkgs/applications/office/zotero/default.nix+49−44

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/freedv/default.nix+8−4

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+5−4

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

This diff is too big to show here.

pkgs/applications/radio/rtl-ais/default.nix+2−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/sdrplay/default.nix+1−1

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/radio/soundmodem/default.nix+3−3

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/srsran/default.nixnew file+49

This diff is too big to show here.

pkgs/applications/radio/svxlink/default.nix+1−1

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/radio/urh/default.nix+2−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/gnuastro/default.nixnew file+36

This diff is too big to show here.

pkgs/applications/science/astronomy/gprojector/default.nix+4−4

This diff is too big to show here.

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

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/science/biology/angsd/default.nixnew file+25

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

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

This diff is too big to show here.

pkgs/applications/science/biology/febio-studio/febio-studio-cmake.patchnew file+38

This diff is too big to show here.

pkgs/applications/science/biology/flywheel-cli/default.nixnew file+49

This diff is too big to show here.

pkgs/applications/science/biology/kssd/default.nix+2−1

This diff is too big to show here.

pkgs/applications/science/biology/last/default.nix+4−4

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

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

This diff is too big to show here.

pkgs/applications/science/biology/picard-tools/default.nix+3−2

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

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

This diff is too big to show here.

pkgs/applications/science/chemistry/jmol/default.nix+12−4

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/science/chemistry/pymol/default.nix+10−2

This diff is too big to show here.

pkgs/applications/science/computer-architecture/qtrvsim/default.nixnew file+30

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/science/electronics/diylc/default.nix+1−1

This diff is too big to show here.

pkgs/applications/science/electronics/eagle/eagle.nix+1−1

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/gaw/default.nixnew file+34

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/science/electronics/kicad/versions.nix+21−21

This diff is too big to show here.

pkgs/applications/science/electronics/magic-vlsi/0002-fix-format-security.patchdeleted−19

This diff is too big to show here.

pkgs/applications/science/electronics/magic-vlsi/default.nix+2−3

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/science/electronics/xcircuit/default.nix+4−8

This diff is too big to show here.

pkgs/applications/science/electronics/xschem/default.nixnew file+46

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/alt-ergo/default.nix+7−10

This diff is too big to show here.

pkgs/applications/science/logic/anders/default.nix+4−1

This diff is too big to show here.

pkgs/applications/science/logic/coq/default.nix+20−17

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/components/default.nixnew file+5

This diff is too big to show here.

pkgs/applications/science/logic/isabelle/components/isabelle-linter.nixnew file+22

This diff is too big to show here.

pkgs/applications/science/logic/isabelle/components/mkBuild.nixnew file+36

This diff is too big to show here.

pkgs/applications/science/logic/isabelle/default.nix+81−4

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+3−4

This diff is too big to show here.

pkgs/applications/science/logic/klee/default.nix+64−17

This diff is too big to show here.

pkgs/applications/science/logic/klee/klee-uclibc.nixnew file+98

This diff is too big to show here.

pkgs/applications/science/logic/lean/default.nix+3−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/logisim-evolution/default.nix+1−1

This diff is too big to show here.

pkgs/applications/science/logic/logisim/default.nix+1−1

This diff is too big to show here.

pkgs/applications/science/logic/naproche/default.nixnew file+38

This diff is too big to show here.

pkgs/applications/science/logic/nuXmv/default.nixnew file+33

This diff is too big to show here.

pkgs/applications/science/logic/opensmt/default.nix+2−2

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/tlaps.nix+4−4

This diff is too big to show here.

pkgs/applications/science/logic/tlaplus/toolbox.nix+3−5

This diff is too big to show here.

pkgs/applications/science/logic/why3/default.nix+5−5

This diff is too big to show here.

pkgs/applications/science/logic/why3/with-provers.nix+1−1

This diff is too big to show here.

pkgs/applications/science/logic/workcraft/default.nix+2−2

This diff is too big to show here.

pkgs/applications/science/logic/z3/4.4.0.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/R/default.nix+2−2

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

This diff is too big to show here.

pkgs/applications/science/math/cntk/default.nix+12−7

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/science/math/getdp/default.nix+1−1

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

This diff is too big to show here.

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

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/nasc/default.nix−1

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/README.md+2−2

This diff is too big to show here.

pkgs/applications/science/math/sage/default.nix+4−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/patches/no-cython-sources-in-tracebacks-on-ipython8.patchdeleted−52

This diff is too big to show here.

pkgs/applications/science/math/sage/patches/tachyon-renamed-focallength.patchnew file+81

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+57−16

This diff is too big to show here.

pkgs/applications/science/math/sage/sage.nix+2−1

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/scilab-bin/default.nix+17−20

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

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+6−5

This diff is too big to show here.

pkgs/applications/science/misc/golly/beta.nixdeleted−50

This diff is too big to show here.

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

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/rink/default.nix+3−3

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

This diff is too big to show here.

pkgs/applications/science/misc/simgrid/default.nix+4−2

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

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

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/mission-planner/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/system/monitor/default.nix+3−3

This diff is too big to show here.

pkgs/applications/terminal-emulators/alacritty/default.nix+7−6

This diff is too big to show here.

pkgs/applications/terminal-emulators/contour/default.nix+3−1

This diff is too big to show here.

pkgs/applications/terminal-emulators/cool-retro-term/default.nix+3−1

This diff is too big to show here.

pkgs/applications/terminal-emulators/ctx/default.nix+3

This diff is too big to show here.

pkgs/applications/terminal-emulators/darktile/default.nix+3

This diff is too big to show here.

pkgs/applications/terminal-emulators/eterm/default.nix+3

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/germinal/default.nix+3

This diff is too big to show here.

pkgs/applications/terminal-emulators/gnome-console/default.nixnew file+69

This diff is too big to show here.

pkgs/applications/terminal-emulators/guake/default.nix+3

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/terminal-emulators/iterm2/default.nix+24−30

This diff is too big to show here.

pkgs/applications/terminal-emulators/kermit-terminal/default.nix+3

This diff is too big to show here.

pkgs/applications/terminal-emulators/kgx/default.nixdeleted−76

This diff is too big to show here.

pkgs/applications/terminal-emulators/kitty/default.nix+58−26

This diff is too big to show here.

pkgs/applications/terminal-emulators/lxterminal/default.nix+3−1

This diff is too big to show here.

pkgs/applications/terminal-emulators/mlterm/default.nix+5−5

This diff is too big to show here.

pkgs/applications/terminal-emulators/mrxvt/default.nix+3

This diff is too big to show here.

pkgs/applications/terminal-emulators/roxterm/default.nix+5−3

This diff is too big to show here.

pkgs/applications/terminal-emulators/rxvt-unicode-plugins/urxvt-font-size/default.nix+1−1

This diff is too big to show here.

pkgs/applications/terminal-emulators/rxvt-unicode/default.nix+4−1

This diff is too big to show here.

pkgs/applications/terminal-emulators/rxvt-unicode/wrapper.nix+5−1

This diff is too big to show here.

pkgs/applications/terminal-emulators/sakura/default.nix+3

This diff is too big to show here.

pkgs/applications/terminal-emulators/st/default.nix+3

This diff is too big to show here.

pkgs/applications/terminal-emulators/stupidterm/default.nix+3−1

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/terminator/default.nix+3

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/terminal-emulators/tilda/default.nix+3

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/terminal-emulators/wayst/default.nix+6−6

This diff is too big to show here.

pkgs/applications/terminal-emulators/wezterm/default.nix+23−9

This diff is too big to show here.

pkgs/applications/terminal-emulators/xterm/default.nix+6−3

This diff is too big to show here.

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

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/commitizen/default.nix+28−15

This diff is too big to show here.

pkgs/applications/version-management/dvc/default.nix+25−11

This diff is too big to show here.

pkgs/applications/version-management/dvc/dvc-daemon.patch+1−1

This diff is too big to show here.

pkgs/applications/version-management/fnc/default.nixnew file+40

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

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/cgit/common.nixnew file+77

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/cgit/default.nix+7−69

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/cgit/pink.nixnew file+23

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/darcs-to-git/default.nix+5−4

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/gg/default.nix+17−8

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/gg/skip-broken-revert-tests.patchdeleted−12

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/git-annex-remote-b2/default.nix+7−7

This diff is too big to show here.

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

This diff is too big to show here.

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

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-gone/default.nix+19−16

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+5−10

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/git-team/default.nixnew file+31

This diff is too big to show here.

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

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/glitter/default.nix+3−3

This diff is too big to show here.

pkgs/applications/version-management/git-and-tools/hut/default.nixnew file+40

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

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-and-tools/subgit/default.nix+2−2

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+4−8

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+11−6

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

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/version-management/gitlab/remove-hardcoded-locations.patch+10

This diff is too big to show here.

pkgs/applications/version-management/gitlab/rubyEnv/Gemfile+30−28

This diff is too big to show here.

pkgs/applications/version-management/gitlab/rubyEnv/Gemfile.lock+168−138

This diff is too big to show here.

pkgs/applications/version-management/gitlab/rubyEnv/gemset.nix+265−158

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/gitqlient/default.nixnew file+41

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/got/default.nix+3−4

This diff is too big to show here.

pkgs/applications/version-management/jujutsu/default.nixnew file+61

This diff is too big to show here.

pkgs/applications/version-management/meld/default.nix+11

This diff is too big to show here.

pkgs/applications/version-management/mercurial/default.nix+11−7

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+70−69

This diff is too big to show here.

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

This diff is too big to show here.

pkgs/applications/version-management/redmine/gemset.nix+79−78

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/smartgithg/default.nix+7−11

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/tkcvs/default.nix → pkgs/applications/version-management/tkrev/default.nixrenamed+8−5

This diff is too big to show here.

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

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.nixnew file+44

This diff is too big to show here.

pkgs/applications/video/byzanz/default.nix+1−1

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

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

This diff is too big to show here.

pkgs/applications/video/corrscope/default.nix+4−12

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/entangle/default.nix+14−6

This diff is too big to show here.

pkgs/applications/video/epgstation/client/package.jsonnew file+57

This diff is too big to show here.

pkgs/applications/video/epgstation/default.nix+58−23

This diff is too big to show here.

pkgs/applications/video/epgstation/epgstation.1+5−1

This diff is too big to show here.

pkgs/applications/video/epgstation/package.json+50−63

This diff is too big to show here.

pkgs/applications/video/epgstation/update.nix+13−16

This diff is too big to show here.

pkgs/applications/video/epgstation/use-mysql-over-domain-socket.patch+42−13

This diff is too big to show here.

pkgs/applications/video/f1viewer/default.nix+3−3

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/filebot/default.nix+5−5

This diff is too big to show here.

pkgs/applications/video/freetube/default.nix+2−2

This diff is too big to show here.

pkgs/applications/video/go-chromecast/default.nix+3−3

This diff is too big to show here.

pkgs/applications/video/gpac/default.nix+2−2

This diff is too big to show here.

pkgs/applications/video/gpu-screen-recorder/default.nixnew file+50

This diff is too big to show here.

pkgs/applications/video/gpu-screen-recorder/fix-nvfbc-check.patchnew file+38

This diff is too big to show here.

pkgs/applications/video/gpu-screen-recorder/gpu-screen-recorder-gtk.nixnew file+46

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/addons/pvr-hdhomerun/default.nix+2−2

This diff is too big to show here.

pkgs/applications/video/kodi/unwrapped.nix+22−7

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

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/losslesscut-bin/appimage.nix+2−2

This diff is too big to show here.

pkgs/applications/video/losslesscut-bin/default.nix+5−5

This diff is too big to show here.

pkgs/applications/video/losslesscut-bin/dmg.nix+2−2

This diff is too big to show here.

pkgs/applications/video/losslesscut-bin/windows.nix+3−2

This diff is too big to show here.

pkgs/applications/video/makemkv/default.nix+12−12

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/default.nix+3−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/mpv/scripts/vr-reversal.nixnew file+35

This diff is too big to show here.

pkgs/applications/video/natron/default.nix+3−2

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

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+10−1

This diff is too big to show here.

pkgs/applications/video/qmplay2/default.nix+2−2

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/rtabmap/0001-remove-printer-support.patchnew file+139

This diff is too big to show here.

pkgs/applications/video/rtabmap/default.nixnew file+59

This diff is too big to show here.

pkgs/applications/video/shotcut/default.nix+2−4

This diff is too big to show here.

pkgs/applications/video/smplayer/default.nix+5−3

This diff is too big to show here.

pkgs/applications/video/streamlink-twitch-gui/bin.nix+6−6

This diff is too big to show here.

pkgs/applications/video/streamlink/default.nix+2−3

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

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/video/yuview/default.nixnew file+45

This diff is too big to show here.

pkgs/applications/video/yuview/disable_version_check.patchnew file+15

This diff is too big to show here.

pkgs/applications/virtualization/OVMF/default.nix+2−1

This diff is too big to show here.

pkgs/applications/virtualization/arion/default.nix+7−5

This diff is too big to show here.

pkgs/applications/virtualization/cloud-hypervisor/default.nix+5−3

This diff is too big to show here.

pkgs/applications/virtualization/colima/default.nix+2−2

This diff is too big to show here.

pkgs/applications/virtualization/containerd/1.4.nixdeleted−51

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

This diff is too big to show here.

pkgs/applications/virtualization/crosvm/Cargo.locknew file+1500

This diff is too big to show here.

pkgs/applications/virtualization/crosvm/default.nix+9−41

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+23−22

This diff is too big to show here.

pkgs/applications/virtualization/crosvm/upstream-info.json+11−20

This diff is too big to show here.

pkgs/applications/virtualization/crun/default.nix+3−2

This diff is too big to show here.

pkgs/applications/virtualization/distrobox/default.nixnew file+38

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/docker/default.nix+22−12

This diff is too big to show here.

pkgs/applications/virtualization/docker/gc.nix+3−3

This diff is too big to show here.

pkgs/applications/virtualization/docker/proxy.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/firecracker/default.nix+3−3

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/flintlock/default.nixnew file+49

This diff is too big to show here.

pkgs/applications/virtualization/gvisor/containerd-shim.nix+2−2

This diff is too big to show here.

pkgs/applications/virtualization/gvisor/default.nix+1−1

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/libgovirt/default.nix+23−9

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/looking-glass-client/default.nix+1−1

This diff is too big to show here.

pkgs/applications/virtualization/open-vm-tools/default.nix+20−5

This diff is too big to show here.

pkgs/applications/virtualization/podman-tui/default.nix+11−3

This diff is too big to show here.

pkgs/applications/virtualization/podman/default.nix+25−19

This diff is too big to show here.

pkgs/applications/virtualization/podman/wrapper.nix+22

This diff is too big to show here.

pkgs/applications/virtualization/qemu/9p-ignore-noatime.patchdeleted−44

This diff is too big to show here.

pkgs/applications/virtualization/qemu/default.nix+26−13

This diff is too big to show here.

pkgs/applications/virtualization/qemu/provide-fallback-for-utimensat.patchnew file+190

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/qemu/utils.nix+2−2

This diff is too big to show here.

pkgs/applications/virtualization/runc/default.nix+2−2

This diff is too big to show here.

pkgs/applications/virtualization/seabios/default.nix+7−6

This diff is too big to show here.

pkgs/applications/virtualization/singularity/default.nix+2−2

This diff is too big to show here.

pkgs/applications/virtualization/spike/default.nix+9−14

This diff is too big to show here.

pkgs/applications/virtualization/virt-manager/default.nix+37−23

This diff is too big to show here.

pkgs/applications/virtualization/virt-viewer/default.nix+12−3

This diff is too big to show here.

pkgs/applications/virtualization/virtualbox/guest-additions/default.nix+4−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+4−6

This diff is too big to show here.

pkgs/applications/window-managers/btops/default.nix+5−5

This diff is too big to show here.

pkgs/applications/window-managers/clfswm/default.nixdeleted−50

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/balance-workspace.nix+2−2

This diff is too big to show here.

pkgs/applications/window-managers/i3/status-rust.nix+4−4

This diff is too big to show here.

pkgs/applications/window-managers/i3/swallow.nixnew file+44

This diff is too big to show here.

pkgs/applications/window-managers/i3/wsr.nix+3−3

This diff is too big to show here.

pkgs/applications/window-managers/icewm/default.nix+9−8

This diff is too big to show here.

pkgs/applications/window-managers/jwm/default.nix+2−2

This diff is too big to show here.

pkgs/applications/window-managers/labwc/default.nix+3−8

This diff is too big to show here.

pkgs/applications/window-managers/labwc/relax-the-version-constraint-for-wlroots.patchdeleted−29

This diff is too big to show here.

pkgs/applications/window-managers/phosh/default.nix+4−5

This diff is too big to show here.

pkgs/applications/window-managers/qtile/default.nix+26−3

This diff is too big to show here.

pkgs/applications/window-managers/sway/bg.nix+2−2

This diff is too big to show here.

pkgs/applications/window-managers/sway/default.nix+18−5

This diff is too big to show here.

pkgs/applications/window-managers/sway/idle.nix+7−3

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/sway/lock.nix+2−7

This diff is too big to show here.

pkgs/applications/window-managers/sway/wrapper.nix+2−1

This diff is too big to show here.

pkgs/applications/window-managers/taffybar/default.nix+2−1

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/applications/window-managers/xmonad/wrapper.nix+2−1

This diff is too big to show here.

pkgs/build-support/alternatives/blas/default.nix+17−14

This diff is too big to show here.

pkgs/build-support/alternatives/lapack/default.nix+16−13

This diff is too big to show here.

pkgs/build-support/appimage/default.nix+4−1

This diff is too big to show here.

pkgs/build-support/build-fhs-userenv-bubblewrap/env.nix+34−2

This diff is too big to show here.

pkgs/build-support/build-fhs-userenv/env.nix+33−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/cc-wrapper/add-flags.sh+14−4

This diff is too big to show here.

pkgs/build-support/coq/default.nix+6−3

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+56−180

This diff is too big to show here.

pkgs/build-support/dotnet/build-dotnet-module/hooks/default.nixnew file+62

This diff is too big to show here.

pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-build-hook.shnew file+42

This diff is too big to show here.

pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-check-hook.shnew file+34

This diff is too big to show here.

pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.shnew file+34

This diff is too big to show here.

pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-fixup-hook.shnew file+43

This diff is too big to show here.

pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-install-hook.shnew file+43

This diff is too big to show here.

pkgs/build-support/dotnet/make-nuget-deps/default.nixnew file+9

This diff is too big to show here.

pkgs/build-support/dotnet/make-nuget-source/default.nixnew file+38

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+9−3

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

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/fetchpatch/default.nix+32−17

This diff is too big to show here.

pkgs/build-support/fetchpatch/tests.nix+16

This diff is too big to show here.

pkgs/build-support/fetchurl/default.nix+5−4

This diff is too big to show here.

pkgs/build-support/fetchurl/mirrors.nix+265−233

This diff is too big to show here.

pkgs/build-support/fetchzip/default.nix+4−4

This diff is too big to show here.

pkgs/build-support/flutter/default.nix+8−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-darwin-bundle/write-darwin-bundle.nix+13−14

This diff is too big to show here.

pkgs/build-support/make-desktopitem/default.nix+101−50

This diff is too big to show here.

pkgs/build-support/nix-gitignore/default.nix−6

This diff is too big to show here.

pkgs/build-support/ocaml/default.nix+2

This diff is too big to show here.

pkgs/build-support/ocaml/dune.nix+8−5

This diff is too big to show here.

pkgs/build-support/ocaml/oasis.nix+5−3

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/rust/hooks/default.nix+10

This diff is too big to show here.

pkgs/build-support/rust/hooks/rust-bindgen-hook.shnew file+13

This diff is too big to show here.

pkgs/build-support/rust/import-cargo-lock.nix+6−1

This diff is too big to show here.

pkgs/build-support/setup-hooks/auto-patchelf.pynew file+335

This diff is too big to show here.

pkgs/build-support/setup-hooks/auto-patchelf.sh+23−312

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+193−22

This diff is too big to show here.

pkgs/build-support/setup-hooks/make-wrapper.sh+22−1

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/singularity-tools/default.nix+3−1

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+39−3

This diff is too big to show here.

pkgs/build-support/writers/test.nix+27

This diff is too big to show here.

pkgs/common-updater/generic-updater.nix+1−1

This diff is too big to show here.

pkgs/common-updater/git-updater.nixnew file+21

This diff is too big to show here.

pkgs/common-updater/http-two-levels-updater.nixnew file+19

This diff is too big to show here.

pkgs/common-updater/scripts/list-archive-two-level-versionsdeleted−35

This diff is too big to show here.

pkgs/common-updater/scripts/list-archive-two-levels-versionsnew file+54

This diff is too big to show here.

pkgs/common-updater/scripts/list-git-tags+37−16

This diff is too big to show here.

pkgs/data/documentation/execline-man-pages/default.nix+2−2

This diff is too big to show here.

pkgs/data/documentation/gnome-user-docs/default.nix+2−2

This diff is too big to show here.

pkgs/data/documentation/man-pages/default.nix−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/s6-man-pages/default.nix+1−1

This diff is too big to show here.

pkgs/data/documentation/s6-networking-man-pages/default.nix+2−2

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/documentation/std-man-pages/default.nix+4−3

This diff is too big to show here.

pkgs/data/documentation/zeal/default.nix+2−2

This diff is too big to show here.

pkgs/data/fonts/agave/default.nix+22−11

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/andika/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/borg-sans-mono/default.nixnew file+26

This diff is too big to show here.

pkgs/data/fonts/ccsymbols/default.nixnew file+32

This diff is too big to show here.

pkgs/data/fonts/charis-sil/default.nix+2−2

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/dancing-script/default.nixnew file+27

This diff is too big to show here.

pkgs/data/fonts/doulos-sil/default.nix+2−2

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

This diff is too big to show here.

pkgs/data/fonts/google-fonts/default.nix+3−3

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/update-default.sh+1−1

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/lmodern/default.nix+5−5

This diff is too big to show here.

pkgs/data/fonts/lxgw-wenkai/default.nixnew file+23

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/mplus-outline-fonts/default.nix+39−19

This diff is too big to show here.

pkgs/data/fonts/noto-fonts/default.nix+13−17

This diff is too big to show here.

pkgs/data/fonts/parastoo-fonts/default.nix+2−2

This diff is too big to show here.

pkgs/data/fonts/redhat-official/default.nix+6−4

This diff is too big to show here.

pkgs/data/fonts/rictydiminished-with-firacode/default.nix+5−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/source-sans-pro/default.nixnew file+30

This diff is too big to show here.

pkgs/data/fonts/source-serif-pro/default.nixnew file+30

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/twitter-color-emoji/default.nix+2−2

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

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/fonts/vazir-fonts/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/faba-icon-theme/default.nix+2−3

This diff is too big to show here.

pkgs/data/icons/flat-remix-icon-theme/default.nix+6−5

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/humanity-icon-theme/default.nix+4−4

This diff is too big to show here.

pkgs/data/icons/kora-icon-theme/default.nix+2−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/icons/numix-icon-theme-circle/default.nix+2−2

This diff is too big to show here.

pkgs/data/icons/numix-icon-theme-square/default.nix+2−2

This diff is too big to show here.

pkgs/data/icons/papirus-icon-theme/default.nix+2−2

This diff is too big to show here.

pkgs/data/icons/tango-icon-theme/default.nix+3−2

This diff is too big to show here.

pkgs/data/icons/tela-circle-icon-theme/default.nix+7−4

This diff is too big to show here.

pkgs/data/icons/tela-icon-theme/default.nix+2−2

This diff is too big to show here.

pkgs/data/icons/whitesur-icon-theme/default.nix+2−2

This diff is too big to show here.

pkgs/data/misc/brise/default.nix+2−1

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/ddccontrol-db/default.nix+1−2

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

This diff is too big to show here.

pkgs/data/misc/mobile-broadband-provider-info/default.nix+2−2

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/osinfo-db/default.nix+15−4

This diff is too big to show here.

pkgs/data/misc/shared-desktop-ontologies/default.nix+3−2

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/spdx-license-list-data/default.nix+21−4

This diff is too big to show here.

pkgs/data/misc/tzdata/default.nix+5−4

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/v2ray-domain-list-community/default.nix+2−2

This diff is too big to show here.

pkgs/data/misc/v2ray-geoip/default.nix+3−3

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/soundfonts/fluid/default.nix+2−1

This diff is too big to show here.

pkgs/data/soundfonts/generaluser/default.nixnew file+25

This diff is too big to show here.

pkgs/data/soundfonts/ydp-grand/default.nixnew file+23

This diff is too big to show here.

pkgs/data/themes/arc/default.nix+15−12

This diff is too big to show here.

pkgs/data/themes/dracula-theme/default.nix+1−1

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−25

This diff is too big to show here.

pkgs/data/themes/graphite-gtk-theme/default.nix+7−4

This diff is too big to show here.

pkgs/data/themes/greybird/default.nix+16−3

This diff is too big to show here.

pkgs/data/themes/kwin-decorations/kde-rounded-corners/default.nix+3−3

This diff is too big to show here.

pkgs/data/themes/layan-kde/default.nixnew file+46

This diff is too big to show here.

pkgs/data/themes/marwaita/default.nix+5−2

This diff is too big to show here.

pkgs/data/themes/nordic/default.nix+17−17

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/whitesur/default.nix+38−3

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/arcan/arcan/clone-sources.nix+1−1

This diff is too big to show here.

pkgs/desktops/arcan/durden/default.nix+7−3

This diff is too big to show here.

pkgs/desktops/arcan/pipeworld/default.nix+7−3

This diff is too big to show here.

pkgs/desktops/arcan/prio/default.nix+5−1

This diff is too big to show here.

pkgs/desktops/arcan/xarcan/default.nix+4−12

This diff is too big to show here.

pkgs/desktops/cdesktopenv/default.nix+17−4

This diff is too big to show here.

pkgs/desktops/cinnamon/xreader/default.nix+2−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+4−2

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/file-roller/default.nix+4−16

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+22−13

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-books/default.nix+12−1

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-boxes/default.nix+9−2

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+20−36

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-calendar/gtk_image_reset_crash.patchdeleted−17

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-characters/default.nix+19−19

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-clocks/default.nix+11−12

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-connections/default.nix+6−4

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-logs/default.nix+8−15

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-maps/default.nix+5−5

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-music/default.nix+8−18

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-notes/default.nix+12−1

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-sound-recorder/default.nix+8−7

This diff is too big to show here.

pkgs/desktops/gnome/apps/gnome-text-editor/default.nix+2−10

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/apps/gnome-weather/default.nix+7−9

This diff is too big to show here.

pkgs/desktops/gnome/apps/polari/default.nix+59−12

This diff is too big to show here.

pkgs/desktops/gnome/core/adwaita-icon-theme/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/baobab/default.nix+16−10

This diff is too big to show here.

pkgs/desktops/gnome/core/dconf-editor/default.nix+13

This diff is too big to show here.

pkgs/desktops/gnome/core/dconf-editor/schema-override-variable.patch+14

This diff is too big to show here.

pkgs/desktops/gnome/core/eog/default.nix+23−19

This diff is too big to show here.

pkgs/desktops/gnome/core/eog/fix-gir-lib-path.patch+13

This diff is too big to show here.

pkgs/desktops/gnome/core/epiphany/default.nix+2−20

This diff is too big to show here.

pkgs/desktops/gnome/core/evince/default.nix+17−27

This diff is too big to show here.

pkgs/desktops/gnome/core/evolution-data-server/default.nix+82−14

This diff is too big to show here.

pkgs/desktops/gnome/core/gdm/default.nix+4−2

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-backgrounds/default.nix+23−8

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-bluetooth/1.0/default.nix+97

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-bluetooth/default.nix+12−15

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-calculator/default.nix+8−16

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-contacts/default.nix+14−25

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-control-center/default.nix+31−23

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-dictionary/default.nix+56−7

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-disk-utility/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-font-viewer/default.nix+36−8

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-initial-setup/default.nix+4−2

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-keyring/default.nix+2−3

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-remote-desktop/default.nix+33−7

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-screenshot/default.nix+54−15

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-session/ctl.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-session/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-settings-daemon/3.38/default.nix+20−1

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-settings-daemon/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-shell-extensions/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-shell/default.nix+7−8

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-shell/wrap-services.patch+5−5

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-software/default.nix+8−6

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-system-monitor/default.nix+2−10

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-terminal/default.nix+5−2

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-tour/default.nix+6−11

This diff is too big to show here.

pkgs/desktops/gnome/core/gnome-user-share/default.nix+5

This diff is too big to show here.

pkgs/desktops/gnome/core/gucharmap/default.nix+4−4

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+6−4

This diff is too big to show here.

pkgs/desktops/gnome/core/nautilus/default.nix+4−17

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/totem/default.nix+6−8

This diff is too big to show here.

pkgs/desktops/gnome/core/yelp-xsl/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/core/yelp/default.nix+4−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+8−22

This diff is too big to show here.

pkgs/desktops/gnome/devtools/devhelp/default.nix+12−1

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+50

This diff is too big to show here.

pkgs/desktops/gnome/extensions/dash-to-dock/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/gnome/extensions/default.nix+3−2

This diff is too big to show here.

pkgs/desktops/gnome/extensions/extensionOverrides.nix+28

This diff is too big to show here.

pkgs/desktops/gnome/extensions/extensionOverridesPatches/freon_at_UshakovVasilii_Github.yahoo.com.patch+15−15

This diff is too big to show here.

pkgs/desktops/gnome/extensions/extensionRenames.nix+17−9

This diff is too big to show here.

pkgs/desktops/gnome/extensions/extensions.json+413−346

This diff is too big to show here.

pkgs/desktops/gnome/extensions/freon/default.nix−61

This diff is too big to show here.

pkgs/desktops/gnome/extensions/gsconnect/default.nix+4−4

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

This diff is too big to show here.

pkgs/desktops/gnome/extensions/night-theme-switcher/default.nix−35

This diff is too big to show here.

pkgs/desktops/gnome/extensions/pop-shell/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/gnome/extensions/sound-output-device-chooser/default.nix+5−3

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+67−47

This diff is too big to show here.

pkgs/desktops/gnome/games/aisleriot/default.nix+4−5

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/gnome-2048/default.nix+12−1

This diff is too big to show here.

pkgs/desktops/gnome/games/gnome-chess/default.nix+4−3

This diff is too big to show here.

pkgs/desktops/gnome/games/gnome-mahjongg/default.nix+38−6

This diff is too big to show here.

pkgs/desktops/gnome/games/gnome-mines/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/games/gnome-sudoku/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/games/gnome-tetravex/default.nix+45−8

This diff is too big to show here.

pkgs/desktops/gnome/games/hitori/default.nix+4−5

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/gitg/default.nix+10

This diff is too big to show here.

pkgs/desktops/gnome/misc/gnome-applets/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/misc/gnome-flashback/default.nix+6−5

This diff is too big to show here.

pkgs/desktops/gnome/misc/gnome-panel/default.nix+14−3

This diff is too big to show here.

pkgs/desktops/gnome/misc/gnome-tweaks/default.nix+4−3

This diff is too big to show here.

pkgs/desktops/gnome/misc/gpaste/default.nix+9−4

This diff is too big to show here.

pkgs/desktops/gnome/misc/gpaste/fix-paths.patch+13−7

This diff is too big to show here.

pkgs/desktops/gnome/misc/metacity/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/gnome/update.nix+27−11

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

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+10−5

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

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+6−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.nix+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.patch+169

This diff is too big to show here.

pkgs/desktops/mate/default.nix+4−3

This diff is too big to show here.

pkgs/desktops/mate/mate-backgrounds/default.nix+10−1

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.nix+22

This diff is too big to show here.

pkgs/desktops/mate/mate-terminal/default.nix+3−1

This diff is too big to show here.

pkgs/desktops/mate/mate-tweak/default.nix+4−6

This diff is too big to show here.

pkgs/desktops/pantheon/apps/appcenter/default.nix+12−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-calculator/default.nix−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-calendar/default.nix−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-camera/default.nix−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-code/default.nix+2−14

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/elementary-feedback/default.nix−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-files/default.nix−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-mail/default.nix+10−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-music/default.nix−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-photos/default.nix+10−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-screenshot/default.nix−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-tasks/default.nix−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-terminal/default.nix−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/elementary-videos/default.nix−2

This diff is too big to show here.

pkgs/desktops/pantheon/apps/sideload/default.nix−2

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−17

This diff is too big to show here.

pkgs/desktops/pantheon/apps/switchboard/wrapper.nix+2−1

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+10−12

This diff is too big to show here.

pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix+6−15

This diff is too big to show here.

pkgs/desktops/pantheon/desktop/elementary-greeter/fix-crash.patch−21

This diff is too big to show here.

pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix−2

This diff is too big to show here.

pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix−2

This diff is too big to show here.

pkgs/desktops/pantheon/desktop/gala/default.nix+4−17

This diff is too big to show here.

pkgs/desktops/pantheon/desktop/gnome-bluetooth-contract/default.nix+4−2

This diff is too big to show here.

pkgs/desktops/pantheon/desktop/wingpanel/default.nix+4−2

This diff is too big to show here.

pkgs/desktops/pantheon/desktop/wingpanel/wrapper.nix+2−1

This diff is too big to show here.

pkgs/desktops/pantheon/granite/7/default.nix+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/addons/krunner-ssh.nix+43

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/3rdparty/kwin/scripts/krohnkite.nix+2−2

This diff is too big to show here.

pkgs/desktops/plasma-5/bluedevil.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/breeze-grub.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/breeze-gtk.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/breeze-plymouth/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/breeze-qt5.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/default.nix+7−6

This diff is too big to show here.

pkgs/desktops/plasma-5/discover.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/kactivitymanagerd.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kde-cli-tools.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kde-gtk-config/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kdecoration.nix+3−3

This diff is too big to show here.

pkgs/desktops/plasma-5/kdeplasma-addons.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kgamma5.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/khotkeys.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kinfocenter.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kmenuedit.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kscreen.nix+3−3

This diff is too big to show here.

pkgs/desktops/plasma-5/kscreenlocker.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/ksshaskpass.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/ksystemstats.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kwallet-pam.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kwayland-integration.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kwayland-server/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kwin/0001-NixOS-Unwrap-executable-name-for-.desktop-search.patch+4−4

This diff is too big to show here.

pkgs/desktops/plasma-5/kwin/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/kwrited.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/layer-shell-qt.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/libkscreen/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/libksysguard/0001-qdiriterator-follow-symlinks.patch+2−3

This diff is too big to show here.

pkgs/desktops/plasma-5/libksysguard/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/milou.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/oxygen.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-browser-integration.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-desktop/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-disks.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-integration/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-mobile/default.nix+3−3

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-nano/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-nm/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-pa.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-sdk.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-systemmonitor.nix+7−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-thunderbolt.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-vault/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-workspace-wallpapers.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-workspace/0001-startkde.patch+17−26

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-workspace/0002-absolute-wallpaper-install-dir.patch+2−2

This diff is too big to show here.

pkgs/desktops/plasma-5/plasma-workspace/default.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/polkit-kde-agent.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/powerdevil.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/qqc2-breeze-style.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/sddm-kcm.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/srcs.nix+216−216

This diff is too big to show here.

pkgs/desktops/plasma-5/systemsettings.nix+1−1

This diff is too big to show here.

pkgs/desktops/plasma-5/xdg-desktop-portal-kde.nix+1−1

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/orage/default.nix+35−41

This diff is too big to show here.

pkgs/desktops/xfce/applications/xfce4-screensaver/default.nix+49

This diff is too big to show here.

pkgs/desktops/xfce/applications/xfce4-screenshooter/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/xfce/applications/xfce4-terminal/default.nix+5−3

This diff is too big to show here.

pkgs/desktops/xfce/art/xfce4-icon-theme/default.nix+1−5

This diff is too big to show here.

pkgs/desktops/xfce/art/xfwm4-themes/default.nix+1−5

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+10−12

This diff is too big to show here.

pkgs/desktops/xfce/mkXfceDerivation.nix+2−3

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-cpufreq-plugin/default.nix+2−2

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-cpugraph-plugin/default.nix+1−5

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-embed-plugin/default.nix+1−5

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-eyes-plugin/default.nix+3−7

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-fsguard-plugin/default.nix+1−5

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-genmon-plugin/default.nix+1−5

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-mailwatch-plugin/default.nix+1−5

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-mpc-plugin/default.nix+1−5

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-namebar-plugin/default.nix+4−3

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-notes-plugin/default.nix+1−5

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-sensors-plugin/default.nix+1−5

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-systemload-plugin/default.nix+1−5

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-timer-plugin/default.nix+1−5

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-weather-plugin/default.nix+1−5

This diff is too big to show here.

pkgs/desktops/xfce/panel-plugins/xfce4-windowck-plugin/default.nix+2−3

This diff is too big to show here.

pkgs/desktops/xfce/thunar-plugins/dropbox/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/chez-modules/chez-mit/default.nix+8−7

This diff is too big to show here.

pkgs/development/chez-modules/chez-scmutils/default.nix+8−7

This diff is too big to show here.

pkgs/development/chez-modules/chez-srfi/default.nix+5−4

This diff is too big to show here.

pkgs/development/compilers/4th/001-install-manual-fixup.diff+12

This diff is too big to show here.

pkgs/development/compilers/4th/default.nix+12−5

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.nix+31

This diff is too big to show here.

pkgs/development/compilers/alan/default.nix+48

This diff is too big to show here.

pkgs/development/compilers/aldor/default.nix−53

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.nix−58

This diff is too big to show here.

pkgs/development/compilers/aliceml/make.patch−20

This diff is too big to show here.

pkgs/development/compilers/aliceml/seam.patch−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/bs-platform/ocaml.nix+1−1

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/carp/default.nix+6

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

This diff is too big to show here.

pkgs/development/compilers/coreclr/default.nix−100

This diff is too big to show here.

pkgs/development/compilers/crystal/build-package.nix+26−4

This diff is too big to show here.

pkgs/development/compilers/crystal/default.nix+10−2

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh+14

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/common.nix+40−18

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/default.nix−83

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/extension.nix+15

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/redist/build-cuda-redist-package.nix+51

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/redist/extension.nix+32

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/redist/manifests/redistrib_11.4.4.json+862

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/redist/manifests/redistrib_11.5.2.json+873

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/redist/manifests/redistrib_11.6.2.json+873

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/redist/overrides.nix+72

This diff is too big to show here.

pkgs/development/compilers/cudatoolkit/versions.toml+61

This diff is too big to show here.

pkgs/development/compilers/dictu/default.nix+2−2

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/build-dotnet.nix+17−18

This diff is too big to show here.

pkgs/development/compilers/dotnet/default.nix+136−50

This diff is too big to show here.