···267267268268- `bind.cacheNetworks` now only controls access for recursive queries, where it previously controlled access for all queries.
269269270270+- Caddy can now be built with plugins by using `caddy.withPlugins`, a `passthru` function that accepts an attribute set as a parameter. The `plugins` argument represents a list of Caddy plugins, with each Caddy plugin being a versioned module. The `hash` argument represents the `vendorHash` of the resulting Caddy source code with the plugins added.
271271+272272+ Example:
273273+ ```nix
274274+ services.caddy = {
275275+ enable = true;
276276+ package = pkgs.caddy.withPlugins {
277277+ plugins = [ "github.com/caddy-dns/powerdns@v1.0.1" ];
278278+ hash = "sha256-F/jqR4iEsklJFycTjSaW8B/V3iTGqqGOzwYBUXxRKrc=";
279279+ };
280280+ };
281281+ ```
282282+283283+ To get the necessary hash of the vendored dependencies, omit `hash`. The build will fail and tell you the correct value.
284284+270285- `programs.fzf.keybindings` now supports the fish shell.
271286272287<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
+1-2
nixos/modules/hardware/wooting.nix
···11{ config, lib, pkgs, ... }:
22{
33- options.hardware.wooting.enable = lib.mkEnableOption ''support for Wooting keyboards.
44- Note that users must be in the "input" group for udev rules to apply'';
33+ options.hardware.wooting.enable = lib.mkEnableOption "support for Wooting keyboards";
5465 config = lib.mkIf config.hardware.wooting.enable {
76 environment.systemPackages = [ pkgs.wootility ];
···2929 "${pkgs.dovecot}/libexec/dovecot/deliver -d %{user.username}"
3030 match from any for local action dovecot_deliver
31313232- action do_relay relay
3333- # DO NOT DO THIS IN PRODUCTION!
3434- # Setting up authentication requires a certificate which is painful in
3535- # a test environment, but THIS WOULD BE DANGEROUS OUTSIDE OF A
3636- # WELL-CONTROLLED ENVIRONMENT!
3737- match from any for any action do_relay
3232+ action relay_smtp2 relay host "smtp://192.168.1.2"
3333+ match from any for any action relay_smtp2
3834 '';
3935 };
4036 services.dovecot2 = {
···107103 import smtplib, sys
108104109105 with smtplib.SMTP('192.168.1.1') as smtp:
110110- smtp.sendmail('alice@[192.168.1.1]', 'bob@[192.168.1.2]', """
106106+ smtp.sendmail('alice@smtp1', 'bob@smtp2', """
111107 From: alice@smtp1
112108 To: bob@smtp2
113109 Subject: Test
+34-11
nixos/tests/opensmtpd.nix
···1616 }
1717 ];
1818 };
1919- environment.systemPackages = [ pkgs.opensmtpd ];
1919+ environment.systemPackages =
2020+ let
2121+ testSendmail = pkgs.writeScriptBin "test-sendmail" ''
2222+ #!/bin/sh
2323+ set -euxo pipefail
2424+ echo "========= SENDING" >&2
2525+ ${pkgs.system-sendmail}/bin/sendmail -v -f alice@smtp1 bob@smtp2 >&2 <<EOF
2626+ From: alice@smtp1
2727+ To: bob@smtp2
2828+ Subject: Sendmail Test
2929+3030+ Hello World
3131+ EOF
3232+ echo "=========== FINISHED SENDING" >&2
3333+ '';
3434+ in
3535+ [
3636+ pkgs.opensmtpd
3737+ testSendmail
3838+ ];
2039 services.opensmtpd = {
2140 enable = true;
2241 extraServerArgs = [ "-v" ];
2342 serverConfiguration = ''
2443 listen on 0.0.0.0
2525- action do_relay relay
2626- # DO NOT DO THIS IN PRODUCTION!
2727- # Setting up authentication requires a certificate which is painful in
2828- # a test environment, but THIS WOULD BE DANGEROUS OUTSIDE OF A
2929- # WELL-CONTROLLED ENVIRONMENT!
3030- match from any for any action do_relay
4444+ action relay_smtp2 relay host "smtp://192.168.1.2"
4545+ match from any for any action relay_smtp2
3146 '';
3247 };
3348 };
···87102 import smtplib, sys
8810389104 with smtplib.SMTP('192.168.1.1') as smtp:
9090- smtp.sendmail('alice@[192.168.1.1]', 'bob@[192.168.1.2]', """
105105+ smtp.sendmail('alice@smtp1', 'bob@smtp2', """
91106 From: alice@smtp1
92107 To: bob@smtp2
93108 Subject: Test
···105120 imap.select()
106121 status, refs = imap.search(None, 'ALL')
107122 assert status == 'OK'
108108- assert len(refs) == 1
109109- status, msg = imap.fetch(refs[0], 'BODY[TEXT]')
123123+ assert len(refs) == 1 and refs[0] != ""
124124+ status, msg = imap.fetch(refs[0], '(BODY[TEXT])')
110125 assert status == 'OK'
111126 content = msg[0][1]
112127 print("===> content:", content)
113128 split = content.split(b'\r\n')
114129 print("===> split:", split)
115115- lastline = split[-3]
130130+ split.reverse()
131131+ lastline = next(filter(lambda x: x != b"", map(bytes.strip, split)))
116132 print("===> lastline:", lastline)
117133 assert lastline.strip() == b'Hello World'
134134+ imap.store(refs[0], '+FLAGS', '\\Deleted')
135135+ imap.expunge()
118136 '';
119137 in
120138 [
···140158 smtp2.wait_for_open_port(143)
141159142160 client.succeed("send-a-test-mail")
161161+ smtp1.wait_until_fails("smtpctl show queue | egrep .")
162162+ smtp2.wait_until_fails("smtpctl show queue | egrep .")
163163+ client.succeed("check-mail-landed >&2")
164164+165165+ smtp1.succeed("test-sendmail")
143166 smtp1.wait_until_fails("smtpctl show queue | egrep .")
144167 smtp2.wait_until_fails("smtpctl show queue | egrep .")
145168 client.succeed("check-mail-landed >&2")
+3-3
pkgs/applications/audio/plexamp/default.nix
···7788let
99 pname = "plexamp";
1010- version = "4.11.2";
1010+ version = "4.11.5";
11111212 src = fetchurl {
1313 url = "https://plexamp.plex.tv/plexamp.plex.tv/desktop/Plexamp-${version}.AppImage";
1414 name = "${pname}-${version}.AppImage";
1515- hash = "sha512-cNBupLFHhq7GDoj/QYGsS0UShTKmDpf/JxBZS92VwTCuuBjScTMGF0cETGEYYnvxqv4vf9MSKNY0/HW9CuguaA==";
1515+ hash = "sha512-j8fPp6JcTB/PwsGgvEGqETZ83mGee1MwR4T9eFcNuoLRtlnudM7c3WDgxhpUdv5Nx3XkcMVnW1fntZYN2sIfzA==";
1616 };
17171818 appimageContents = appimageTools.extractType2 {
···3838 meta = with lib; {
3939 description = "Beautiful Plex music player for audiophiles, curators, and hipsters";
4040 homepage = "https://plexamp.com/";
4141- changelog = "https://forums.plex.tv/t/plexamp-release-notes/221280/76";
4141+ changelog = "https://forums.plex.tv/t/plexamp-release-notes/221280/77";
4242 license = licenses.unfree;
4343 maintainers = with maintainers; [
4444 killercup
···361361 fi
362362 done
363363364364+ # update symlinks pointing to libgallium in $out
365365+ for link in $drivers/lib/dri/*_drv_video.so $drivers/lib/vdpau/*.so.1.0.0; do
366366+ ln -sf $drivers/lib/libgallium*.so $link
367367+ done
368368+364369 # Don't depend on build python
365370 patchShebangs --host --update $out/bin/*
366371
+2-2
pkgs/development/python-modules/ansible/core.nix
···31313232buildPythonPackage rec {
3333 pname = "ansible-core";
3434- version = "2.17.6";
3434+ version = "2.18.1";
3535 pyproject = true;
36363737 src = fetchPypi {
3838 pname = "ansible_core";
3939 inherit version;
4040- hash = "sha256-PlOXC3zr/irbObcRweL4u/y+2sgo2lHcA1ehkHBjjpU=";
4040+ hash = "sha256-FMrB+Su9rogcsGFu3esXkl6MtQfkhgh5deckUz2d508=";
4141 };
42424343 # ansible_connection is already wrapped, so don't pass it through
···503503 gnuradio3_9 = throw "gnuradio3_9 has been removed because it is not compatible with the latest volk and it had no dependent packages which justified it's distribution"; # Added 2024-07-28
504504 gnuradio3_9Minimal = throw "gnuradio3_9Minimal has been removed because it is not compatible with the latest volk and it had no dependent packages which justified it's distribution"; # Added 2024-07-28
505505 gnuradio3_9Packages = throw "gnuradio3_9Minimal has been removed because it is not compatible with the latest volk and it had no dependent packages which justified it's distribution"; # Added 2024-07-28
506506+ gnuradio3_8 = throw "gnuradio3_8 has been removed because it was too old and incompatible with a not EOL swig"; # Added 2024-11-18
507507+ gnuradio3_8Minimal = throw "gnuradio3_8Minimal has been removed because it was too old and incompatible with a not EOL swig"; # Added 2024-11-18
508508+ gnuradio3_8Packages = throw "gnuradio3_8Minimal has been removed because it was too old and incompatible with a not EOL swig"; # Added 2024-11-18
506509 gn1924 = throw "gn1924 has been removed because it was broken and no longer used by envoy."; # Added 2024-11-03
507510 gobby5 = throw "'gobby5' has been renamed to/replaced by 'gobby'"; # Converted to throw 2024-10-17
508511 gradle_6 = throw "Gradle 6 has been removed, as it is end-of-life (https://endoflife.date/gradle) and has many vulnerabilities that are not resolved until Gradle 7."; # Added 2024-10-30
···633636 LASzip2 = laszip_2; # Added 2024-06-12
634637 latencytop = throw "'latencytop' has been removed due to lack of maintenance upstream."; # Added 2024-12-04
635638 latinmodern-math = lmmath;
639639+ lazarus-qt = lazarus-qt5; # Added 2024-12-25
636640 leafpad = throw "'leafpad' has been removed due to lack of maintenance upstream. Consider using 'xfce.mousepad' instead"; # Added 2024-10-19
637641 ledger_agent = ledger-agent; # Added 2024-01-07
638642 lfs = dysk; # Added 2023-07-03
···662666 liblastfm = throw "'liblastfm' has been renamed to/replaced by 'libsForQt5.liblastfm'"; # Converted to throw 2024-10-17
663667 libmx = throw "'libmx' has been removed due to lack of maintenance upstream."; # Added 2024-12-04
664668 liboop = throw "liboop has been removed as it is unmaintained upstream."; # Added 2024-08-14
669669+ libosmo-sccp = libosmo-sigtran; # Added 2024-12-20
665670 libpqxx_6 = throw "libpqxx_6 has been removed, please use libpqxx"; # Added 2024-10-02
666671 libpulseaudio-vanilla = libpulseaudio; # Added 2022-04-20
672672+ libqt5pas = libsForQt5.libqtpas; # Added 2024-12-25
667673 libquotient = libsForQt5.libquotient; # Added 2023-11-11
668674 librarian-puppet-go = throw "'librarian-puppet-go' has been removed, as it's upstream is unmaintained"; # Added 2024-06-10
669675 librdf = throw "'librdf' has been renamed to/replaced by 'lrdf'"; # Converted to throw 2024-10-17
···12521258 swiPrologWithGui = lib.warnOnInstantiate "swiPrologWithGui has been renamed to swi-prolog-gui" swi-prolog-gui; # Added 2024-09-07
12531259 swig1 = throw "swig1 has been removed as it is obsolete"; # Added 2024-08-23
12541260 swig2 = throw "swig2 has been removed as it is obsolete"; # Added 2024-08-23
12611261+ swig3 = throw "swig3 has been removed as it is obsolete"; # Added 2024-11-18
12551262 swig4 = swig; # Added 2024-09-12
12561263 swigWithJava = throw "swigWithJava has been removed as the main swig package has supported Java since 2009"; # Added 2024-09-12
12571264 swtpm-tpm2 = throw "'swtpm-tpm2' has been renamed to/replaced by 'swtpm'"; # Converted to throw 2024-10-17