{ config, lib, pkgs, ... }: with lib; let cfg = config.services.podman; in { options.services.podman = { autoUpdate = { enable = mkOption { type = types.bool; default = false; description = "Automatically update the podman images."; }; onCalendar = mkOption { type = types.str; default = "Sun *-*-* 00:00"; description = '' The systemd `OnCalendar` expression for the update. See {manpage}`systemd.time(7)` for a description of the format. ''; }; }; }; config = mkIf cfg.enable (mkMerge [ (mkIf cfg.autoUpdate.enable { systemd.user.services."podman-auto-update" = { Unit = { Description = "Podman auto-update service"; Documentation = "man:podman-auto-update(1)"; Wants = [ "network-online.target" ]; After = [ "network-online.target" ]; }; Service = { Type = "oneshot"; Environment = "PATH=${ builtins.concatStringsSep ":" [ "/run/wrappers/bin" "/run/current-system/sw/bin" "${config.home.homeDirectory}/.nix-profile/bin" ] }"; ExecStart = "${pkgs.podman}/bin/podman auto-update"; ExecStartPost = "${pkgs.podman}/bin/podman image prune -f"; TimeoutStartSec = "300s"; TimeoutStopSec = "10s"; }; }; systemd.user.timers."podman-auto-update" = { Unit = { Description = "Podman auto-update timer"; }; Timer = { OnCalendar = cfg.autoUpdate.onCalendar; RandomizedDelaySec = 300; Persistent = true; }; Install = { WantedBy = [ "timers.target" ]; }; }; }) ({ xdg.configFile."systemd/user/podman-user-wait-network-online.service.d/50-exec-search-path.conf".text = '' [Service] ExecSearchPath=${pkgs.bashInteractive}/bin:${pkgs.systemd}/bin:/bin ''; }) ]); }