From 9ea0c94e00e9dccb3143bc607a446d424a4b7775 Mon Sep 17 00:00:00 2001 From: Anton Mosich Date: Tue, 2 Dec 2025 20:27:33 +0100 Subject: [PATCH 01/17] accounts.contacts: fix eval error You would encounter an eval error when a module (such as pimsync) would try to access an attribute of `accounts.contacts..local`, since it would default to `null`. The same problem was encountered in the `accounts.calendar` module, and fixed in 2c157e22dcf2c08e38a95b557ba6785e882b8bc0 which has the same solution. Closes #8258 Reported-by: redbeardymcgee (cherry picked from commit bf003999ed42d7168c9f3ffd3534fa1b51df4faf) --- modules/accounts/contacts.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/accounts/contacts.nix b/modules/accounts/contacts.nix index 780f6bb5..506b66a1 100644 --- a/modules/accounts/contacts.nix +++ b/modules/accounts/contacts.nix @@ -102,8 +102,8 @@ let }; local = mkOption { - type = types.nullOr (localModule name); - default = null; + type = localModule name; + default = { }; description = '' Local configuration for the contacts. ''; From 7385f250cc70bcd9e131b314e81e7e8ba805293a Mon Sep 17 00:00:00 2001 From: Anton Mosich Date: Tue, 2 Dec 2025 20:47:02 +0100 Subject: [PATCH 02/17] pimsync: extend test to contacts If I had added such a test right away, I would have encountered #8258 myself. I mistakenly believed the contact and calendar modules to be the same. (cherry picked from commit c3d1e5c65ae564450bed700d546b88414ec32e43) --- tests/modules/programs/pimsync/basic.nix | 16 ++++++++++++++++ tests/modules/programs/pimsync/basic.scfg | 17 +++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/tests/modules/programs/pimsync/basic.nix b/tests/modules/programs/pimsync/basic.nix index 2b9b7434..2f9ae61e 100644 --- a/tests/modules/programs/pimsync/basic.nix +++ b/tests/modules/programs/pimsync/basic.nix @@ -22,6 +22,22 @@ basePath = ".local/state/calendar"; }; + accounts.contact = { + accounts.carddav = { + pimsync.enable = true; + remote = { + passwordCommand = [ + "pass" + "carddav" + ]; + type = "carddav"; + url = "https://carddav.example.com"; + userName = "bob"; + }; + }; + basePath = ".local/state/contact"; + }; + programs.pimsync = { enable = true; settings = [ diff --git a/tests/modules/programs/pimsync/basic.scfg b/tests/modules/programs/pimsync/basic.scfg index e0f6bb22..a035e788 100644 --- a/tests/modules/programs/pimsync/basic.scfg +++ b/tests/modules/programs/pimsync/basic.scfg @@ -28,4 +28,21 @@ pair calendar-http { storage_a http-local storage_b http-remote } +storage carddav-local { + fileext .vcf + path /home/hm-user/.local/state/contact/carddav + type vdir/vcard +} +storage carddav-remote { + type carddav + url https://carddav.example.com + username bob + password { + cmd pass carddav + } +} +pair contacts-carddav { + storage_a carddav-local + storage_b carddav-remote +} status_path /test/dir From 3366918730bb6b699395a9d237397f1d710a94b3 Mon Sep 17 00:00:00 2001 From: "home-manager-ci[bot]" <214323736+home-manager-ci[bot]@users.noreply.github.com> Date: Wed, 3 Dec 2025 04:17:22 +0000 Subject: [PATCH 03/17] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/9561691c9f450fad7c3526916e1c4f44be0d1192?narHash=sha256-CYbMp8hwuOf4umokSNp%2Bt1s4Hjd4vxXq4S5CD%2BxvgNs%3D' (2025-11-29) → 'github:NixOS/nixpkgs/8bb5646e0bed5dbd3ab08c7a7cc15b75ab4e1d0f?narHash=sha256-SqUuBFjhl/kpDiVaKLQBoD8TLD%2B/cTUzzgVFoaHrkqY%3D' (2025-11-30) --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index c2ef7652..921a94e1 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1764406085, - "narHash": "sha256-CYbMp8hwuOf4umokSNp+t1s4Hjd4vxXq4S5CD+xvgNs=", + "lastModified": 1764522689, + "narHash": "sha256-SqUuBFjhl/kpDiVaKLQBoD8TLD+/cTUzzgVFoaHrkqY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9561691c9f450fad7c3526916e1c4f44be0d1192", + "rev": "8bb5646e0bed5dbd3ab08c7a7cc15b75ab4e1d0f", "type": "github" }, "original": { From e1680d594a9281651cbf7d126941a8c8e2396183 Mon Sep 17 00:00:00 2001 From: Andrew Jeffery Date: Wed, 3 Dec 2025 04:02:13 +0000 Subject: [PATCH 04/17] pimsync: Make storage names unique This includes the calendar/contacts prefix in the storage name as well as the pair name to ensure that if the same name is used for contacts and calendar then it is correctly referenced. (cherry picked from commit 43173abcb4a48adb1d56be30ed17d9afaf4310ae) --- modules/programs/pimsync/default.nix | 8 ++-- tests/modules/programs/pimsync/basic.nix | 4 +- tests/modules/programs/pimsync/basic.scfg | 46 +++++++++++------------ 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/modules/programs/pimsync/default.nix b/modules/programs/pimsync/default.nix index b8edb7df..bf772c8f 100644 --- a/modules/programs/pimsync/default.nix +++ b/modules/programs/pimsync/default.nix @@ -51,7 +51,7 @@ localStorage = calendar: name: acc: { name = "storage"; - params = [ "${name}-local" ]; + params = [ "${if calendar then "calendar" else "contacts"}-${name}-local" ]; children = (attrsToDirectives { inherit (acc.local) path; @@ -63,7 +63,7 @@ remoteStorage = calendar: name: acc: { name = "storage"; - params = [ "${name}-remote" ]; + params = [ "${if calendar then "calendar" else "contacts"}-${name}-remote" ]; children = (attrsToDirectives { inherit (acc.remote) url; @@ -91,8 +91,8 @@ params = lib.singleton "${if calendar then "calendar" else "contacts"}-${name}"; children = (attrsToDirectives { - storage_a = "${name}-local"; - storage_b = "${name}-remote"; + storage_a = "${if calendar then "calendar" else "contacts"}-${name}-local"; + storage_b = "${if calendar then "calendar" else "contacts"}-${name}-remote"; }) ++ acc.pimsync.extraPairDirectives; }; diff --git a/tests/modules/programs/pimsync/basic.nix b/tests/modules/programs/pimsync/basic.nix index 2f9ae61e..f029ea1f 100644 --- a/tests/modules/programs/pimsync/basic.nix +++ b/tests/modules/programs/pimsync/basic.nix @@ -1,6 +1,6 @@ { accounts.calendar = { - accounts.caldav = { + accounts.mine = { pimsync.enable = true; remote = { passwordCommand = [ @@ -23,7 +23,7 @@ }; accounts.contact = { - accounts.carddav = { + accounts.mine = { pimsync.enable = true; remote = { passwordCommand = [ diff --git a/tests/modules/programs/pimsync/basic.scfg b/tests/modules/programs/pimsync/basic.scfg index a035e788..6d09cbb3 100644 --- a/tests/modules/programs/pimsync/basic.scfg +++ b/tests/modules/programs/pimsync/basic.scfg @@ -1,14 +1,18 @@ -storage caldav-local { - fileext .ics - path /home/hm-user/.local/state/calendar/caldav - type vdir/icalendar -} -storage http-local { +storage calendar-http-local { fileext .ics path /home/hm-user/.local/state/calendar/http type vdir/icalendar } -storage caldav-remote { +storage calendar-mine-local { + fileext .ics + path /home/hm-user/.local/state/calendar/mine + type vdir/icalendar +} +storage calendar-http-remote { + type webcal + url https://example.com/calendar +} +storage calendar-mine-remote { type caldav url https://caldav.example.com username alice @@ -16,24 +20,20 @@ storage caldav-remote { cmd pass caldav } } -storage http-remote { - type webcal - url https://example.com/calendar -} -pair calendar-caldav { - storage_a caldav-local - storage_b caldav-remote -} pair calendar-http { - storage_a http-local - storage_b http-remote + storage_a calendar-http-local + storage_b calendar-http-remote } -storage carddav-local { +pair calendar-mine { + storage_a calendar-mine-local + storage_b calendar-mine-remote +} +storage contacts-mine-local { fileext .vcf - path /home/hm-user/.local/state/contact/carddav + path /home/hm-user/.local/state/contact/mine type vdir/vcard } -storage carddav-remote { +storage contacts-mine-remote { type carddav url https://carddav.example.com username bob @@ -41,8 +41,8 @@ storage carddav-remote { cmd pass carddav } } -pair contacts-carddav { - storage_a carddav-local - storage_b carddav-remote +pair contacts-mine { + storage_a contacts-mine-local + storage_b contacts-mine-remote } status_path /test/dir From f63d0fe9d81d36e5fc95497217a72e02b8b7bcab Mon Sep 17 00:00:00 2001 From: "tsrk." Date: Wed, 3 Dec 2025 16:28:02 +0100 Subject: [PATCH 05/17] thunderbird: fix aliases SMTP configuration not being listed as usable Signed-off-by: tsrk. (cherry picked from commit d441981b200305ebb8e2e2921395f51d207fded6) --- modules/programs/thunderbird.nix | 10 +++++++++- .../thunderbird/thunderbird-expected-first-darwin.js | 2 +- .../thunderbird/thunderbird-expected-first-linux.js | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/modules/programs/thunderbird.nix b/modules/programs/thunderbird.nix index 1fa1e8dc..83b0b2eb 100644 --- a/modules/programs/thunderbird.nix +++ b/modules/programs/thunderbird.nix @@ -9,6 +9,7 @@ let attrValues concatStringsSep filter + flatten length literalExpression mapAttrsToList @@ -918,7 +919,14 @@ in calendarAccounts = getAccountsForProfile name enabledCalendarAccountsWithId; contactAccounts = getAccountsForProfile name enabledContactAccountsWithId; - smtp = filter (a: a.smtp != null) emailAccounts; + accountsSmtp = filter (a: a.smtp != null) emailAccounts; + aliasesSmtp = + let + getAliasesWithSmtp = a: filter (al: builtins.isAttrs al && al.smtp != null) a.aliases; + getAliasesWithId = a: map (al: al // { id = getId a al; }) (getAliasesWithSmtp a); + in + flatten (map getAliasesWithId emailAccounts); + smtp = accountsSmtp ++ aliasesSmtp; feedAccounts = addId (attrValues profile.feedAccounts); diff --git a/tests/modules/programs/thunderbird/thunderbird-expected-first-darwin.js b/tests/modules/programs/thunderbird/thunderbird-expected-first-darwin.js index 852a91b2..bd016760 100644 --- a/tests/modules/programs/thunderbird/thunderbird-expected-first-darwin.js +++ b/tests/modules/programs/thunderbird/thunderbird-expected-first-darwin.js @@ -120,7 +120,7 @@ user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfa user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.port", 456); user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.try_ssl", 3); user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.username", "home.manager"); -user_pref("mail.smtpservers", "smtp_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc,smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f"); +user_pref("mail.smtpservers", "smtp_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc,smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f,smtp_b24ca86ede61ed219e6c87cfec261aae2c72785f812489ea943d114d1f39f55b"); user_pref("privacy.donottrackheader.enabled", true); user_pref("mail.html_compose", false); diff --git a/tests/modules/programs/thunderbird/thunderbird-expected-first-linux.js b/tests/modules/programs/thunderbird/thunderbird-expected-first-linux.js index 8cbf7be3..bf32de26 100644 --- a/tests/modules/programs/thunderbird/thunderbird-expected-first-linux.js +++ b/tests/modules/programs/thunderbird/thunderbird-expected-first-linux.js @@ -120,7 +120,7 @@ user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfa user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.port", 456); user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.try_ssl", 3); user_pref("mail.smtpserver.smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.username", "home.manager"); -user_pref("mail.smtpservers", "smtp_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc,smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f"); +user_pref("mail.smtpservers", "smtp_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc,smtp_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f,smtp_b24ca86ede61ed219e6c87cfec261aae2c72785f812489ea943d114d1f39f55b"); user_pref("privacy.donottrackheader.enabled", true); user_pref("mail.html_compose", false); From 20561be440a11ec57a89715480717baf19fe6343 Mon Sep 17 00:00:00 2001 From: "home-manager-ci[bot]" <214323736+home-manager-ci[bot]@users.noreply.github.com> Date: Sun, 7 Dec 2025 04:22:40 +0000 Subject: [PATCH 06/17] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/8bb5646e0bed5dbd3ab08c7a7cc15b75ab4e1d0f?narHash=sha256-SqUuBFjhl/kpDiVaKLQBoD8TLD%2B/cTUzzgVFoaHrkqY%3D' (2025-11-30) → 'github:NixOS/nixpkgs/c97c47f2bac4fa59e2cbdeba289686ae615f8ed4?narHash=sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA%3D' (2025-12-04) --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 921a94e1..fbaa17e1 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1764522689, - "narHash": "sha256-SqUuBFjhl/kpDiVaKLQBoD8TLD+/cTUzzgVFoaHrkqY=", + "lastModified": 1764831616, + "narHash": "sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8bb5646e0bed5dbd3ab08c7a7cc15b75ab4e1d0f", + "rev": "c97c47f2bac4fa59e2cbdeba289686ae615f8ed4", "type": "github" }, "original": { From 44777152652bc9eacf8876976fa72cc77ca8b9d8 Mon Sep 17 00:00:00 2001 From: "home-manager-ci[bot]" <214323736+home-manager-ci[bot]@users.noreply.github.com> Date: Wed, 10 Dec 2025 04:21:56 +0000 Subject: [PATCH 07/17] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/c97c47f2bac4fa59e2cbdeba289686ae615f8ed4?narHash=sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA%3D' (2025-12-04) → 'github:NixOS/nixpkgs/d9bc5c7dceb30d8d6fafa10aeb6aa8a48c218454?narHash=sha256-y7RPKl/jJ/KAP/VKLMghMgXTlvNIJMHKskl8/Uuar7o%3D' (2025-12-06) --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index fbaa17e1..fc1308c5 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1764831616, - "narHash": "sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA=", + "lastModified": 1764983851, + "narHash": "sha256-y7RPKl/jJ/KAP/VKLMghMgXTlvNIJMHKskl8/Uuar7o=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c97c47f2bac4fa59e2cbdeba289686ae615f8ed4", + "rev": "d9bc5c7dceb30d8d6fafa10aeb6aa8a48c218454", "type": "github" }, "original": { From 90b62096f099b73043a747348c11dbfcfbdea949 Mon Sep 17 00:00:00 2001 From: Victor Engmark Date: Sun, 30 Nov 2025 11:38:22 +0100 Subject: [PATCH 08/17] nixos: Don't "[a]ttempt to evaluate package pkgs.trash-cli" Closes #8161. (cherry picked from commit 784a83782ce00985bee65c588d4c315ec0b5a172) --- nixos/common.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/common.nix b/nixos/common.nix index 5468df94..b5bcfa57 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -85,7 +85,7 @@ in backupCommand = mkOption { type = types.nullOr (types.either types.str types.path); default = null; - example = lib.literalExpression "''${pkgs.trash-cli}/bin/trash"; + example = lib.literalExpression "\${pkgs.trash-cli}/bin/trash"; description = '' On activation run this command on each existing file rather than exiting with an error. From 59605580675b596cbd7f3c0d0b9e38f0e11618ee Mon Sep 17 00:00:00 2001 From: "home-manager-ci[bot]" <214323736+home-manager-ci[bot]@users.noreply.github.com> Date: Sun, 14 Dec 2025 04:25:20 +0000 Subject: [PATCH 09/17] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/d9bc5c7dceb30d8d6fafa10aeb6aa8a48c218454?narHash=sha256-y7RPKl/jJ/KAP/VKLMghMgXTlvNIJMHKskl8/Uuar7o%3D' (2025-12-06) → 'github:NixOS/nixpkgs/09eb77e94fa25202af8f3e81ddc7353d9970ac1b?narHash=sha256-mSD5Ob7a%2BT2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo%3D' (2025-12-09) --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index fc1308c5..462bbd26 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1764983851, - "narHash": "sha256-y7RPKl/jJ/KAP/VKLMghMgXTlvNIJMHKskl8/Uuar7o=", + "lastModified": 1765311797, + "narHash": "sha256-mSD5Ob7a+T2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d9bc5c7dceb30d8d6fafa10aeb6aa8a48c218454", + "rev": "09eb77e94fa25202af8f3e81ddc7353d9970ac1b", "type": "github" }, "original": { From af317966214648d0361f228d1c489dc5a003b808 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 01:31:35 +0000 Subject: [PATCH 10/17] ci: bump korthout/backport-action from 3 to 4 Bumps [korthout/backport-action](https://github.com/korthout/backport-action) from 3 to 4. - [Release notes](https://github.com/korthout/backport-action/releases) - [Commits](https://github.com/korthout/backport-action/compare/v3...v4) --- updated-dependencies: - dependency-name: korthout/backport-action dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/backport.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index f6287a69..514ba1f3 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -37,7 +37,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Create backport PRs id: backport - uses: korthout/backport-action@v3 + uses: korthout/backport-action@v4 with: # See https://github.com/korthout/backport-action#inputs github_token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }} From 7df150f0d3857cf68dae443813b27acfb201b2d8 Mon Sep 17 00:00:00 2001 From: Viktor Titov Date: Mon, 8 Dec 2025 10:17:30 +0500 Subject: [PATCH 11/17] qt: added qt{5,6}ctSettings options (#8271) Added qtctSettings option to qt module to make it possible to configure qt(5/6)ct declaratively. --- modules/misc/qt.nix | 46 ++++++++++++++++++++- tests/modules/misc/qt/default.nix | 3 ++ tests/modules/misc/qt/qt-qt5ct-settings.nix | 13 ++++++ tests/modules/misc/qt/qt-qt6ct-settings.nix | 13 ++++++ tests/modules/misc/qt/qt-qtct-settings.nix | 16 +++++++ 5 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 tests/modules/misc/qt/qt-qt5ct-settings.nix create mode 100644 tests/modules/misc/qt/qt-qt6ct-settings.nix create mode 100644 tests/modules/misc/qt/qt-qtct-settings.nix diff --git a/modules/misc/qt.nix b/modules/misc/qt.nix index 0fe00d77..6bee4217 100644 --- a/modules/misc/qt.nix +++ b/modules/misc/qt.nix @@ -8,6 +8,10 @@ let cfg = config.qt; + qtctFormat = pkgs.formats.ini { + listToValue = values: lib.concatStringsSep ", " values; + }; + # Map platform names to their packages. platformPackages = with pkgs; { gnome = [ @@ -286,7 +290,34 @@ in ''; }; }; - }; + } + // (lib.genAttrs' [ "qt5ct" "qt6ct" ] ( + name: + lib.nameValuePair "${name}Settings" ( + lib.mkOption { + type = lib.types.nullOr qtctFormat.type; + default = null; + example = lib.literalExpression '' + { + Appearance = { + style = "kvantum"; + icon_theme = "Papirus-Dark"; + standar_dialogs = "xdgdesktopportal"; + }; + Fonts = { + fixed = "\"DejaVuSansM Nerd Font Mono,12\""; + general = "\"DejaVu Sans,12\""; + }; + } + ''; + description = '' + Qtct configuration. Writes settings to `${name}/${name}.conf` + file. Lists will be translated to comma-separated strings. + Fonts must be quoted (see example). + ''; + } + ) + )); }; config = @@ -397,5 +428,18 @@ in ] ++ lib.optionals (platformTheme.name != null) [ "QT_QPA_PLATFORMTHEME" ] ++ lib.optionals (cfg.style.name != null) [ "QT_STYLE_OVERRIDE" ]; + + xdg.configFile = + lib.pipe + [ "qt5ct" "qt6ct" ] + [ + (lib.filter (qtct: cfg."${qtct}Settings" != null)) + (lib.flip lib.genAttrs' ( + qtct: + lib.nameValuePair "${qtct}/${qtct}.conf" { + source = qtctFormat.generate "${qtct}-config" cfg."${qtct}Settings"; + } + )) + ]; }; } diff --git a/tests/modules/misc/qt/default.nix b/tests/modules/misc/qt/default.nix index 88ba03f4..bfdfea91 100644 --- a/tests/modules/misc/qt/default.nix +++ b/tests/modules/misc/qt/default.nix @@ -4,4 +4,7 @@ qt-platform-theme-gtk3 = ./qt-platform-theme-gtk3.nix; qt-platform-theme-gnome = ./qt-platform-theme-gnome.nix; qt-platform-theme-kde6-migration = ./qt-platform-theme-kde6-migration.nix; + qt-qt5ct-settings = ./qt-qt5ct-settings.nix; + qt-qt6ct-settings = ./qt-qt6ct-settings.nix; + qt-qtct-settings = ./qt-qtct-settings.nix; } diff --git a/tests/modules/misc/qt/qt-qt5ct-settings.nix b/tests/modules/misc/qt/qt-qt5ct-settings.nix new file mode 100644 index 00000000..152cdbf6 --- /dev/null +++ b/tests/modules/misc/qt/qt-qt5ct-settings.nix @@ -0,0 +1,13 @@ +{ + qt = { + enable = true; + qt5ctSettings = { + test_section.test_option = "test"; + }; + }; + + nmt.script = '' + assertFileExists "home-files/.config/qt5ct/qt5ct.conf" + assertPathNotExists "home-files/.config/qt6ct/qt6ct.conf" + ''; +} diff --git a/tests/modules/misc/qt/qt-qt6ct-settings.nix b/tests/modules/misc/qt/qt-qt6ct-settings.nix new file mode 100644 index 00000000..d363d881 --- /dev/null +++ b/tests/modules/misc/qt/qt-qt6ct-settings.nix @@ -0,0 +1,13 @@ +{ + qt = { + enable = true; + qt6ctSettings = { + test_section.test_option = "test"; + }; + }; + + nmt.script = '' + assertFileExists "home-files/.config/qt6ct/qt6ct.conf" + assertPathNotExists "home-files/.config/qt5ct/qt5ct.conf" + ''; +} diff --git a/tests/modules/misc/qt/qt-qtct-settings.nix b/tests/modules/misc/qt/qt-qtct-settings.nix new file mode 100644 index 00000000..e5805009 --- /dev/null +++ b/tests/modules/misc/qt/qt-qtct-settings.nix @@ -0,0 +1,16 @@ +{ + qt = { + enable = true; + qt5ctSettings = { + test_section.test_option = "test"; + }; + qt6ctSettings = { + test_section.test_option = "test"; + }; + }; + + nmt.script = '' + assertFileExists "home-files/.config/qt5ct/qt5ct.conf" + assertFileExists "home-files/.config/qt6ct/qt6ct.conf" + ''; +} From d3135ab747fd9dac250ffb90b4a7e80634eacbe9 Mon Sep 17 00:00:00 2001 From: "home-manager-ci[bot]" <214323736+home-manager-ci[bot]@users.noreply.github.com> Date: Wed, 17 Dec 2025 04:21:44 +0000 Subject: [PATCH 12/17] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/09eb77e94fa25202af8f3e81ddc7353d9970ac1b?narHash=sha256-mSD5Ob7a%2BT2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo%3D' (2025-12-09) → 'github:NixOS/nixpkgs/c8cfcd6ccd422e41cc631a0b73ed4d5a925c393d?narHash=sha256-3iXM/zTqEskWtmZs3gqNiVtRTsEjYAedIaLL0mSBsrk%3D' (2025-12-15) --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 462bbd26..f9a4f503 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1765311797, - "narHash": "sha256-mSD5Ob7a+T2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo=", + "lastModified": 1765762245, + "narHash": "sha256-3iXM/zTqEskWtmZs3gqNiVtRTsEjYAedIaLL0mSBsrk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "09eb77e94fa25202af8f3e81ddc7353d9970ac1b", + "rev": "c8cfcd6ccd422e41cc631a0b73ed4d5a925c393d", "type": "github" }, "original": { From fdec8815a86db36f42fc9c8cb2931cd8485f5aed Mon Sep 17 00:00:00 2001 From: "home-manager-ci[bot]" <214323736+home-manager-ci[bot]@users.noreply.github.com> Date: Sun, 21 Dec 2025 04:26:20 +0000 Subject: [PATCH 13/17] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/c8cfcd6ccd422e41cc631a0b73ed4d5a925c393d?narHash=sha256-3iXM/zTqEskWtmZs3gqNiVtRTsEjYAedIaLL0mSBsrk%3D' (2025-12-15) → 'github:NixOS/nixpkgs/b3aad468604d3e488d627c0b43984eb60e75e782?narHash=sha256-eplAP%2BrorKKd0gNjV3rA6%2B0WMzb1X1i16F5m5pASnjA%3D' (2025-12-20) --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index f9a4f503..8e486ee8 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1765762245, - "narHash": "sha256-3iXM/zTqEskWtmZs3gqNiVtRTsEjYAedIaLL0mSBsrk=", + "lastModified": 1766201043, + "narHash": "sha256-eplAP+rorKKd0gNjV3rA6+0WMzb1X1i16F5m5pASnjA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c8cfcd6ccd422e41cc631a0b73ed4d5a925c393d", + "rev": "b3aad468604d3e488d627c0b43984eb60e75e782", "type": "github" }, "original": { From 71c2a550e6004cddc3bfca0dd08e5d508559b34b Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Tue, 23 Dec 2025 16:25:41 -0600 Subject: [PATCH 14/17] release/23.05: add swaylock stateVersion change Signed-off-by: Austin Horstman (cherry picked from commit 624c7e80fbf9149e740386dde89010308fbea339) --- docs/release-notes/rl-2305.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/release-notes/rl-2305.md b/docs/release-notes/rl-2305.md index 1358cf71..bdd99100 100644 --- a/docs/release-notes/rl-2305.md +++ b/docs/release-notes/rl-2305.md @@ -57,3 +57,9 @@ changes are only active if the `home.stateVersion` option is set to now default to `true` which is consistent with the default values for those options used by `i3` and `sway`. + +- The [](#opt-programs.swaylock.enable) option now defaults to `false` + and must be explicitly enabled. Previously, it would be implicitly + enabled when `programs.swaylock.settings` was non-empty. Users with + `home.stateVersion` set to earlier versions will continue to get the + old implicit behavior. From 6ef8697671876e397879ab39d251b0535a5a6ac8 Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Tue, 23 Dec 2025 16:25:56 -0600 Subject: [PATCH 15/17] release/25.05: add git signing format change Signed-off-by: Austin Horstman (cherry picked from commit af3c24de76297856acc6839e1580e227f1717bf9) --- docs/release-notes/rl-2505.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/rl-2505.md b/docs/release-notes/rl-2505.md index 977e853c..2ec0f1ad 100644 --- a/docs/release-notes/rl-2505.md +++ b/docs/release-notes/rl-2505.md @@ -27,4 +27,8 @@ The state version in this release includes the changes below. These changes are only active if the `home.stateVersion` option is set to \"25.05\" or later. -- No changes. +- The [](#opt-programs.git.signing.format) option no longer defaults to + `"openpgp"`. Users who use Git signing with GPG should explicitly set + this option to `"openpgp"` to maintain the previous behavior. Users + with `home.stateVersion` set to earlier versions will continue to get + the `"openpgp"` default for backwards compatibility. From aaf46506426cc8c53719dd20de660fc856a5561e Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Tue, 23 Dec 2025 16:26:14 -0600 Subject: [PATCH 16/17] release/25.11: add darwin copy apps change Signed-off-by: Austin Horstman (cherry picked from commit 20728df08f6ecf69a99ee6f031c235bf393ea585) --- docs/release-notes/rl-2511.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/release-notes/rl-2511.md b/docs/release-notes/rl-2511.md index 8f0c666f..83f4b396 100644 --- a/docs/release-notes/rl-2511.md +++ b/docs/release-notes/rl-2511.md @@ -80,3 +80,10 @@ changes are only active if the `home.stateVersion` option is set to `{ PASSWORD_STORE_DIR = $XDG_DATA_HOME/password-store; }` anymore by its default value. This will revert to the default behaviour of the program, namely `$HOME/.password-store` to be used as the store path. + +- On macOS, [](#opt-targets.darwin.copyApps.enable) is now enabled by + default instead of [](#opt-targets.darwin.linkApps.enable). This means + applications from `home.packages` will be copied to + `~/Applications/Home Manager Apps` rather than symlinked, making them + work properly with Spotlight. Users with `home.stateVersion` set to + earlier versions will continue to use `linkApps` by default. From 0999ed8f965bbbd991437ad9c5ed3434cecbc30e Mon Sep 17 00:00:00 2001 From: "home-manager-ci[bot]" <214323736+home-manager-ci[bot]@users.noreply.github.com> Date: Wed, 24 Dec 2025 04:24:24 +0000 Subject: [PATCH 17/17] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/b3aad468604d3e488d627c0b43984eb60e75e782?narHash=sha256-eplAP%2BrorKKd0gNjV3rA6%2B0WMzb1X1i16F5m5pASnjA%3D' (2025-12-20) → 'github:NixOS/nixpkgs/76701a179d3a98b07653e2b0409847499b2a07d3?narHash=sha256-5G1NDO2PulBx1RoaA6U1YoUDX0qZslpPxv%2Bn5GX6Qto%3D' (2025-12-23) --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 8e486ee8..ba194e12 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1766201043, - "narHash": "sha256-eplAP+rorKKd0gNjV3rA6+0WMzb1X1i16F5m5pASnjA=", + "lastModified": 1766473571, + "narHash": "sha256-5G1NDO2PulBx1RoaA6U1YoUDX0qZslpPxv+n5GX6Qto=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b3aad468604d3e488d627c0b43984eb60e75e782", + "rev": "76701a179d3a98b07653e2b0409847499b2a07d3", "type": "github" }, "original": {