diff --git a/modules/programs/pimsync/default.nix b/modules/programs/pimsync/default.nix index bf772c8f..c9a016e6 100644 --- a/modules/programs/pimsync/default.nix +++ b/modules/programs/pimsync/default.nix @@ -112,6 +112,15 @@ ]; accountSettings = calendarConfig ++ contactConfig; + + localStorageDir = name: acc: lib.attrsets.getAttrFromPath [ "local" "path" ] acc; + + calendarLocalStorageDirs = lib.mapAttrsToList localStorageDir calendarAccounts; + contactLocalStorageDirs = lib.mapAttrsToList localStorageDir contactAccounts; + localStorageDirs = calendarLocalStorageDirs ++ contactLocalStorageDirs; + + mkTmpFileRule = (dir: ''d ${dir} 0755 ${config.home.username} ${config.home.username} - -''); + tmpFileRules = map mkTmpFileRule localStorageDirs; in lib.mkIf cfg.enable { meta.maintainers = [ lib.maintainers.antonmosich ]; @@ -144,6 +153,18 @@ home.packages = [ cfg.package ]; + systemd.user.tmpfiles.rules = lib.optionals pkgs.stdenv.hostPlatform.isLinux tmpFileRules; + + home.activation.createDavDirectories = lib.mkIf (!pkgs.stdenv.hostPlatform.isLinux) ( + let + directoriesList = localStorageDirs; + mkdir = (dir: ''[[ -L "${dir}" ]] || run mkdir -p $VERBOSE_ARG "${dir}"''); + in + lib.hm.dag.entryAfter [ "linkGeneration" ] ( + lib.strings.concatMapStringsSep "\n" mkdir directoriesList + ) + ); + xdg.configFile."pimsync/pimsync.conf".text = lib.hm.generators.toSCFG { } ( accountSettings ++ cfg.settings ); diff --git a/tests/modules/programs/pimsync/basic.nix b/tests/modules/programs/pimsync/basic.nix index f029ea1f..63edcd7e 100644 --- a/tests/modules/programs/pimsync/basic.nix +++ b/tests/modules/programs/pimsync/basic.nix @@ -48,6 +48,8 @@ ]; }; + test.stubs.systemd.outPath = null; + nmt.script = '' assertFileExists home-files/.config/pimsync/pimsync.conf assertFileContent home-files/.config/pimsync/pimsync.conf ${./basic.scfg}