···203203 description = ''
204204 This option effectively allows adding setuid/setgid bits, capabilities,
205205 changing file ownership and permissions of a program without directly
206206- modifying it. This works by creating a wrapper program under the
207207- {option}`security.wrapperDir` directory, which is then added to
208208- the shell `PATH`.
206206+ modifying it. This works by creating a wrapper program in a directory
207207+ (not configurable), which is then added to the shell `PATH`.
209208 '';
210209 };
211210
+32-3
nixos/modules/services/backup/mysql-backup.nix
···88 cfg = config.services.mysqlBackup;
99 defaultUser = "mysqlbackup";
10101111+ # Newer mariadb versions warn of the usage of 'mysqldump' and recommend 'mariadb-dump' (https://mariadb.com/kb/en/mysqldump/)
1212+ dumpBinary =
1313+ if
1414+ (
1515+ lib.getName config.services.mysql.package == lib.getName pkgs.mariadb
1616+ && lib.versionAtLeast config.services.mysql.package.version "11.0.0"
1717+ )
1818+ then
1919+ "${config.services.mysql.package}/bin/mariadb-dump"
2020+ else
2121+ "${config.services.mysql.package}/bin/mysqldump";
2222+1123 compressionAlgs = {
1224 gzip = rec {
1325 pkg = pkgs.gzip;
···3951 selectedAlg = compressionAlgs.${cfg.compressionAlg};
4052 compressionCmd = selectedAlg.cmd compressionLevelFlag;
41535454+ shouldUseSingleTransaction =
5555+ db:
5656+ if lib.isBool cfg.singleTransaction then
5757+ cfg.singleTransaction
5858+ else
5959+ lib.elem db cfg.singleTransaction;
6060+4261 backupScript = ''
4362 set -o pipefail
4463 failed=""
···51705271 backupDatabaseScript = db: ''
5372 dest="${cfg.location}/${db}${selectedAlg.ext}"
5454- if ${pkgs.mariadb}/bin/mysqldump ${lib.optionalString cfg.singleTransaction "--single-transaction"} ${db} | ${compressionCmd} > $dest.tmp; then
7373+ if ${dumpBinary} ${lib.optionalString (shouldUseSingleTransaction db) "--single-transaction"} ${db} | ${compressionCmd} > $dest.tmp; then
5574 mv $dest.tmp $dest
5675 echo "Backed up to $dest"
5776 else
···126145127146 singleTransaction = lib.mkOption {
128147 default = false;
129129- type = lib.types.bool;
148148+ type = lib.types.oneOf [
149149+ lib.types.bool
150150+ (lib.types.listOf lib.types.str)
151151+ ];
130152 description = ''
131131- Whether to create database dump in a single transaction
153153+ Whether to create database dump in a single transaction.
154154+ Can be either a boolean for all databases or a list of database names.
132155 '';
133156 };
134157···152175 cfg.compressionLevel == null
153176 || selectedAlg.minLevel <= cfg.compressionLevel && cfg.compressionLevel <= selectedAlg.maxLevel;
154177 message = "${cfg.compressionAlg} compression level must be between ${toString selectedAlg.minLevel} and ${toString selectedAlg.maxLevel}";
178178+ }
179179+ {
180180+ assertion =
181181+ !(lib.isList cfg.singleTransaction)
182182+ || lib.all (db: lib.elem db cfg.databases) cfg.singleTransaction;
183183+ message = "All databases in singleTransaction must be included in the databases option";
155184 }
156185 ];
157186
···2525 nativeBuildInputs = [
2626 which
2727 ];
2828+ nativeCheckInputs = [
2929+ openssl
3030+ ];
28312932 doCheck = true;
3333+ strictDeps = true;
30343135 meta = {
3236 description = "Tool for buffering data streams with a large set of unique features";
···15591559 xplayer = throw "xplayer has been removed as the upstream project was archived"; # Added 2024-12-27
15601560 xprite-editor = throw "'xprite-editor' has been removed due to lack of maintenance upstream. Consider using 'pablodraw' or 'aseprite' instead"; # Added 2024-09-14
15611561 xsv = throw "'xsv' has been removed due to lack of upstream maintenance. Please see 'xan' for a maintained alternative";
15621562+ xtrlock-pam = throw "xtrlock-pam has been removed because it is unmaintained for 10 years and doesn't support Python 3.10 or newer"; # Added 2025-01-25
15621563 xulrunner = firefox-unwrapped; # Added 2023-11-03
15631564 xvfb_run = throw "'xvfb_run' has been renamed to/replaced by 'xvfb-run'"; # Converted to throw 2024-10-17
15641565 xwaylandvideobridge = libsForQt5.xwaylandvideobridge; # Added 2024-09-27
···508508 pynose = throw "pynose was removed, because it violates the license of nose, by redistributing modified LGPL code under MIT.";
509509 python-ethtool = ethtool; # added 2024-07-23
510510 python-myq = throw "python-myq has been removed, as the service provider has decided to block its API requests"; # added 2023-12-07
511511+ pytrends = throw "pytrends has been removed, as it no longer works and is abandoned upstream"; # added 2025-02-02
511512 pyqt4 = throw "pyqt4 has been removed, because it depended on the long EOL qt4"; # added 2022-06-09
512513 pyqt5_sip = pyqt5-sip; # added 2024-01-07
513514 pyqt5_with_qtmultimedia = pyqt5-multimedia; # added 2024-01-07