64 lines
1.9 KiB
Nix
64 lines
1.9 KiB
Nix
{ lib, config, inputs, system, pkgs, ... }:
|
|
|
|
with lib;
|
|
let
|
|
cfg = config.modules.desktop.swww;
|
|
|
|
wallpapersFolder = "${pkgs.my.wallpapers}/share/backgrounds";
|
|
lastWallpaper = "$XDG_DATA_HOME/swww-last-wallpaper";
|
|
in {
|
|
options.modules.desktop.swww = {
|
|
enable = mkEnableOption "Enable swww, a Solution to your Wayland Wallpaper Woes";
|
|
package = mkOption {
|
|
type = types.package;
|
|
default = pkgs.swww;
|
|
example = "pkgs.swww";
|
|
};
|
|
setScript = mkOption {
|
|
type = types.package;
|
|
default = pkgs.writeShellScript "swww-set" ''
|
|
if [ ! -f "${lastWallpaper}" ]; then
|
|
echo "$(ls ${wallpapersFolder} | shuf -n 1)" > "${lastWallpaper}"
|
|
fi
|
|
|
|
${lib.getExe cfg.package} img "${wallpapersFolder}/$(cat ${lastWallpaper})" --transition-type none
|
|
'';
|
|
};
|
|
swapScript = mkOption {
|
|
type = types.package;
|
|
default = pkgs.writeShellScript "swww-swap" ''
|
|
file=$(ls ${wallpapersFolder} | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -sep '\n' -i -p "select a wallpaper")
|
|
wallpaper="${wallpapersFolder}/$file"
|
|
|
|
[ ! -f "$wallpaper" ] && exit 1
|
|
|
|
${lib.getExe cfg.package} img "$wallpaper" --transition-type grow --transition-fps 60 --transition-pos 0.915,0.977 --transition-duration 1.5
|
|
|
|
echo "$file" > "${lastWallpaper}"
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
hm.home.packages = [ cfg.package ];
|
|
hm.systemd.user.services.swww = {
|
|
Unit = {
|
|
Description = "swww, a Solution to your Wayland Wallpaper Woes";
|
|
After = [ "graphical-session-pre.target" ];
|
|
PartOf = [ "graphical-session.target" ];
|
|
};
|
|
|
|
Install = {
|
|
WantedBy = [ "graphical-session.target" ];
|
|
};
|
|
|
|
Service = {
|
|
Type = "simple";
|
|
ExecStart = "${cfg.package}/bin/swww-daemon";
|
|
ExecStartPost = "${cfg.setScript}";
|
|
Restart = "on-failure";
|
|
RestartSec = 5;
|
|
};
|
|
};
|
|
};
|
|
}
|