diff --git a/hm-modules/wallpapers.nix b/hm-modules/wallpapers.nix index f5a57c7..bec505d 100644 --- a/hm-modules/wallpapers.nix +++ b/hm-modules/wallpapers.nix @@ -3,9 +3,24 @@ config, pkgs, ... -}: { +}: let + cfg = config.xsession.wallpapers; +in { options.xsession.wallpapers = { enable = lib.mkEnableOption "automatically refreshing randomly selected wallpapers"; + script = let + exe = + pkgs.writeShellScript "set-wallpaper" + '' + ${pkgs.feh}/bin/feh --no-fehbg --bg-fill --randomize \ + $( ${pkgs.findutils}/bin/find ${config.home.homeDirectory}/${cfg.folder} \( -iname "*.png" -or -iname "*.jpg" \) ) + ''; + in + lib.mkOption { + description = "The script which will be called to set new wallpapers"; + default = exe; + type = lib.types.package; + }; folder = lib.mkOption { description = "The folder from which the wallpapers are selected. Relative to home directory"; type = lib.types.str; @@ -17,44 +32,35 @@ default = "3 min"; }; }; - config = let - cfg = config.xsession.wallpapers; - exe = - pkgs.writeShellScript "set-wallpaper" - '' - ${pkgs.feh}/bin/feh --no-fehbg --bg-fill --randomize \ - $( ${pkgs.findutils}/bin/find ${config.home.homeDirectory}/${cfg.folder} \( -iname "*.png" -or -iname "*.jpg" \) ) - ''; - in - lib.mkIf cfg.enable { - systemd.user = { - timers = { - set-wallpaper = { - Unit = { - Description = "Set a random wallpaper every 3 minutes"; - }; - Timer = { - OnUnitActiveSec = cfg.refreshInterval; - }; - Install.WantedBy = [ - "timers.target" - ]; + config = lib.mkIf cfg.enable { + systemd.user = { + timers = { + set-wallpaper = { + Unit = { + Description = "Set a random wallpaper every 3 minutes"; }; - }; - services = { - set-wallpaper = { - Unit = { - Description = "Set a random wallpaper on all X displays"; - }; - Service = { - Type = "oneshot"; - ExecStart = - exe; - }; - Install.WantedBy = ["graphical-session.target"]; + Timer = { + OnUnitActiveSec = cfg.refreshInterval; }; + Install.WantedBy = [ + "timers.target" + ]; + }; + }; + services = { + set-wallpaper = { + Unit = { + Description = "Set a random wallpaper on all X displays"; + }; + Service = { + Type = "oneshot"; + ExecStart = + cfg.script; + }; + Install.WantedBy = ["graphical-session.target"]; }; }; - home.persistence."/state".directories = [cfg.folder]; }; + home.persistence."/state".directories = [cfg.folder]; + }; }