#+begin_src nix :tangle home/desktop/wallpaper.nix :noweb tangle :mkdirp yes { config, pkgs, lib, flakeRoot, ... }: let repoWallpaperDir = flakeRoot + "/assets/conf/desktop/wallpaper"; repoWallpaperConf = flakeRoot + "/assets/conf/desktop/wallpaper/wallpaper.conf"; userRelRoot = "nixos_conf/wallpaperstuff"; userAbsRoot = "${config.home.homeDirectory}/${userRelRoot}"; userConfPath = "${userAbsRoot}/wallpaper.conf"; # Exclude wallpaper.conf so HM does NOT manage it (avoids backup collisions) repoWallpapersOnly = lib.cleanSourceWith { src = repoWallpaperDir; filter = path: type: (builtins.baseNameOf path) != "wallpaper.conf"; }; in { home.packages = [ pkgs.wpaperd ]; # Sync everything *except* wallpaper.conf into ~/nixos_conf/wallpaperstuff home.file."${userRelRoot}" = { source = repoWallpapersOnly; recursive = true; }; # Now safely overwrite the config every activation (no HM collision) home.activation.wallpaperConfForce = lib.hm.dag.entryAfter [ "writeBoundary" ] '' set -euo pipefail mkdir -p "${userAbsRoot}" install -m 0644 "${repoWallpaperConf}" "${userConfPath}" ''; systemd.user.services.wpaperd = { Unit = { Description = "wpaperd wallpaper daemon"; After = [ "default.target" ]; }; Service = { Type = "simple"; ExecStart = "${pkgs.wpaperd}/bin/wpaperd --config ${userConfPath}"; Restart = "on-failure"; RestartSec = 1; }; Install.WantedBy = [ "default.target" ]; ;