Compare commits

...

15 Commits

Author SHA1 Message Date
tsrk.
256669d1ee thunderbird: fix aliases SMTP configuration not being listed as usable
Signed-off-by: tsrk. <tsrk@tsrk.me>
(cherry picked from commit d441981b20)
2025-12-04 09:16:42 +00:00
Andrew Jeffery
e1680d594a 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 43173abcb4)
2025-12-03 16:49:19 +01:00
home-manager-ci[bot]
3366918730 flake.lock: Update
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)
2025-12-02 22:41:12 -06:00
Anton Mosich
7385f250cc 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 c3d1e5c65a)
2025-12-02 21:33:04 -06:00
Anton Mosich
9ea0c94e00 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.<name>.local`, since it
would default to `null`. The same problem was encountered in the
`accounts.calendar` module, and fixed in
2c157e22dc which has the same solution.

Closes #8258

Reported-by: redbeardymcgee
(cherry picked from commit bf003999ed)
2025-12-02 21:33:04 -06:00
dependabot[bot]
f3902b5d87 ci: bump DeterminateSystems/update-flake-lock from 27 to 28
Bumps [DeterminateSystems/update-flake-lock](https://github.com/determinatesystems/update-flake-lock) from 27 to 28.
- [Release notes](https://github.com/determinatesystems/update-flake-lock/releases)
- [Commits](https://github.com/determinatesystems/update-flake-lock/compare/v27...v28)

---
updated-dependencies:
- dependency-name: DeterminateSystems/update-flake-lock
  dependency-version: '28'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-01 12:22:16 -06:00
novenary
44a3b79aad fish: ensure generated completions considered last
home-manager's generated completions shadow built-in completion scripts.
fish actually has logic to deal with this when the path ends with
/generated_completions, so let's take advantage of it.

Link: 47c773300a/src/autoload.rs (L421-L424)
(cherry picked from commit e4e25a8c31)
2025-12-01 12:21:54 -06:00
novenary
ffae9e1bca Revert "fish: avoid shadowing builtin completions"
This reverts commit 23f2ba7ae0.

(cherry picked from commit 13b089b586)
2025-12-01 12:21:54 -06:00
Jo²
acd2931703 xsession: only require xdg autostart target if explicitely enabled (#8237)
This is a fix for PR #7108 that forcibly enables xdg-desktop-autostart
units, whether or not `config.xdg.autostart` is enabled.
Partially fixes #7708, there is still a risk for conflict if
`xdg.autostart` and `services.picom` are enabled.

(cherry picked from commit b1bb534c17)
2025-12-01 12:21:32 -06:00
Matt Sturgeon
3fdd076e08 fish: avoid shadowing builtin completions
The fish shell comes with builtin completions. For example, git
completion supports context-aware completion of things like commit
hashes, branch names, sub-commands, etc.

Until fish 4.2, builtin completions were explicitly loaded from
`share/fish/completions`, however that is now deprecated and disabled.
In effect, this means generating manpage-based completion will shadow
and disable builtin completion.

Avoid that, by only generating completion when fish does not have
builtin support for the command.

(cherry picked from commit 23f2ba7ae0)
2025-11-30 15:00:51 -06:00
home-manager-ci[bot]
ba2259d7d5 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/2fecba9952096ba043c16b9ef40b92851ff3e5d9?narHash=sha256-JaNFPy3nywPNxSDpEgFFqvngQww5Igb6twG4NhMo8oc%3D' (2025-11-26)
  → 'github:NixOS/nixpkgs/9561691c9f450fad7c3526916e1c4f44be0d1192?narHash=sha256-CYbMp8hwuOf4umokSNp%2Bt1s4Hjd4vxXq4S5CD%2BxvgNs%3D' (2025-11-29)
2025-11-30 14:18:28 -06:00
Austin Horstman
d0c5fdc48d tests/flake: lock to stable
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-11-29 00:48:34 -06:00
home-manager-ci[bot]
7f7e33a679 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/a320ce8e6e2cc6b4397eef214d202a50a4583829?narHash=sha256-6zddwDs2n%2Bn01l%2B1TG6PlyokDdXzu/oBmEejcH5L5%2BA%3D' (2025-11-24)
  → 'github:NixOS/nixpkgs/2fecba9952096ba043c16b9ef40b92851ff3e5d9?narHash=sha256-JaNFPy3nywPNxSDpEgFFqvngQww5Igb6twG4NhMo8oc%3D' (2025-11-26)
2025-11-29 00:48:34 -06:00
Austin Horstman
2217780c39 flake.nix: lock to stable branch
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-11-26 11:18:11 -06:00
Austin Horstman
cbe30a7689 release: mark as release branch
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-11-26 10:44:25 -06:00
32 changed files with 103 additions and 59 deletions

View File

@@ -41,7 +41,7 @@ jobs:
- name: Install Nix
uses: cachix/install-nix-action@v31
- name: Update flake.lock
uses: DeterminateSystems/update-flake-lock@v27
uses: DeterminateSystems/update-flake-lock@v28
with:
token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
git-committer-name: ${{ steps.user-info.outputs.name || 'github-actions[bot]' }}

8
flake.lock generated
View File

@@ -2,16 +2,16 @@
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1763678758,
"narHash": "sha256-+hBiJ+kG5IoffUOdlANKFflTT5nO3FrrR2CA3178Y5s=",
"lastModified": 1764522689,
"narHash": "sha256-SqUuBFjhl/kpDiVaKLQBoD8TLD+/cTUzzgVFoaHrkqY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "117cc7f94e8072499b0a7aa4c52084fa4e11cc9b",
"rev": "8bb5646e0bed5dbd3ab08c7a7cc15b75ab4e1d0f",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}

View File

@@ -1,7 +1,7 @@
{
description = "Home Manager for Nix";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
outputs =
{

View File

@@ -102,8 +102,8 @@ let
};
local = mkOption {
type = types.nullOr (localModule name);
default = null;
type = localModule name;
default = { };
description = ''
Local configuration for the contacts.
'';

View File

@@ -645,7 +645,7 @@ in
# Support completion for `man` by building a cache for `apropos`.
programs.man.generateCaches = lib.mkDefault true;
xdg.dataFile."fish/home-manager_generated_completions".source =
xdg.dataFile."fish/home-manager/generated_completions".source =
let
# Paths later in the list will overwrite those already linked
destructiveSymlinkJoin =
@@ -696,7 +696,7 @@ in
set -l post_joined (string replace $prev_joined "" $joined)
set -l prev (string split " " (string trim $prev_joined))
set -l post (string split " " (string trim $post_joined))
set fish_complete_path $prev "${config.xdg.dataHome}/fish/home-manager_generated_completions" $post
set fish_complete_path $prev "${config.xdg.dataHome}/fish/home-manager/generated_completions" $post
end
'';
}

View File

@@ -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;
};

View File

@@ -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);

View File

@@ -188,10 +188,13 @@ in
hm-graphical-session = {
Unit = {
Description = "Home Manager X session";
Requires = [
"graphical-session-pre.target"
"xdg-desktop-autostart.target"
];
Requires =
let
requires = lib.optional (config.xdg.autostart.enable) "xdg-desktop-autostart.target" ++ [
"graphical-session-pre.target"
];
in
requires;
BindsTo = [
"graphical-session.target"
"tray.target"

View File

@@ -1,4 +1,4 @@
{
"release": "25.11",
"isReleaseBranch": false
"isReleaseBranch": true
}

View File

@@ -15,7 +15,7 @@
{
description = "Tests of Home Manager for Nix";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
outputs =
{ nixpkgs, ... }:

View File

@@ -7,7 +7,7 @@
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -14,7 +14,7 @@
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -15,7 +15,7 @@
_module.args.pkgs = lib.mkForce realPkgs;
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -16,7 +16,7 @@
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -29,7 +29,7 @@
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -25,7 +25,7 @@ in
};
};
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -29,7 +29,7 @@ in
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -8,7 +8,7 @@
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -47,7 +47,7 @@ in
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -8,7 +8,7 @@
programs.command-not-found.enable = true;
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -14,7 +14,7 @@ in
programs.nushell.enable = true;
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -11,7 +11,7 @@
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -1,6 +1,6 @@
{
accounts.calendar = {
accounts.caldav = {
accounts.mine = {
pimsync.enable = true;
remote = {
passwordCommand = [
@@ -22,6 +22,22 @@
basePath = ".local/state/calendar";
};
accounts.contact = {
accounts.mine = {
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 = [

View File

@@ -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,16 +20,29 @@ 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
}
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/mine
type vdir/vcard
}
storage contacts-mine-remote {
type carddav
url https://carddav.example.com
username bob
password {
cmd pass carddav
}
}
pair contacts-mine {
storage_a contacts-mine-local
storage_b contacts-mine-remote
}
status_path /test/dir

View File

@@ -12,7 +12,7 @@
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -21,7 +21,7 @@
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -7,7 +7,7 @@
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -10,7 +10,7 @@
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -10,7 +10,7 @@
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);

View File

@@ -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);

View File

@@ -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);

View File

@@ -18,7 +18,7 @@
};
# Needed to avoid error with dummy fish package.
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
xdg.dataFile."fish/home-manager/generated_completions".source = lib.mkForce (
builtins.toFile "empty" ""
);