feat: hyprpaper separate config with auto wallpaper
This commit is contained in:
		
							parent
							
								
									1d5f428cb1
								
							
						
					
					
						commit
						7b929c0b02
					
				@ -12,6 +12,7 @@ in {
 | 
			
		||||
    ./swaync.nix
 | 
			
		||||
    ./waybar.nix
 | 
			
		||||
    ./wlsunset.nix
 | 
			
		||||
    ./hyprpaper.nix
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  options.home.desktop.hyprland = {
 | 
			
		||||
@ -33,6 +34,7 @@ in {
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    home.desktop = {
 | 
			
		||||
      hyprpaper.enable = true;
 | 
			
		||||
      rofi.enable = mkDefault true;
 | 
			
		||||
      swaync.enable = mkDefault true;
 | 
			
		||||
      waybar = {
 | 
			
		||||
@ -41,6 +43,7 @@ in {
 | 
			
		||||
      };
 | 
			
		||||
      wlsunset.enable = mkDefault true;
 | 
			
		||||
    };
 | 
			
		||||
    services.blueman-applet.enable = true;
 | 
			
		||||
    wayland.windowManager.hyprland = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      xwayland.enable = true;
 | 
			
		||||
@ -274,19 +277,5 @@ in {
 | 
			
		||||
        bind = SUPER_SHIFT, asterisk, movetoworkspace, 10
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
    services = {
 | 
			
		||||
      blueman-applet.enable = true;
 | 
			
		||||
      hyprpaper = let
 | 
			
		||||
        img = "/home/phundrak/Pictures/Wallpapers/nord/Nordic6.jpg";
 | 
			
		||||
      in {
 | 
			
		||||
        enable = true;
 | 
			
		||||
        settings = {
 | 
			
		||||
          ipc = "on";
 | 
			
		||||
          splash = false;
 | 
			
		||||
          preload = img;
 | 
			
		||||
          wallpaper = ", ${img}";
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										87
									
								
								users/modules/desktop/hyprpaper.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								users/modules/desktop/hyprpaper.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,87 @@
 | 
			
		||||
{
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
with lib; let
 | 
			
		||||
  cfg = config.home.desktop.hyprpaper;
 | 
			
		||||
in {
 | 
			
		||||
  options.home.desktop.hyprpaper = {
 | 
			
		||||
    enable = mkEnableOption "Enables Hyprpaper";
 | 
			
		||||
    default = mkOption {
 | 
			
		||||
      type = types.str;
 | 
			
		||||
      default = "/home/phundrak/Pictures/Wallpapers/nord/Nordic6.jpg";
 | 
			
		||||
      example = "/home/user/image.jpg";
 | 
			
		||||
    };
 | 
			
		||||
    wallpapers-dir = mkOption {
 | 
			
		||||
      type = types.str;
 | 
			
		||||
      default = "/home/phundrak/Pictures/Wallpapers/nord/";
 | 
			
		||||
      example = "/home/user/Pictures/";
 | 
			
		||||
    };
 | 
			
		||||
    rotation-interval = mkOption {
 | 
			
		||||
      type = types.str;
 | 
			
		||||
      default = "5m";
 | 
			
		||||
      example = "10m";
 | 
			
		||||
      description = "Interval between wallpaper rotations";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    services.hyprpaper = {
 | 
			
		||||
      inherit (cfg) enable;
 | 
			
		||||
      settings = {
 | 
			
		||||
        ipc = "on";
 | 
			
		||||
        splash = false;
 | 
			
		||||
        preload = cfg.default;
 | 
			
		||||
        wallpaper = ", ${cfg.default}";
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
    systemd.user = {
 | 
			
		||||
      services.hyprpaper-rotation = {
 | 
			
		||||
        Unit = {
 | 
			
		||||
          Description = "Rotate Hyprpaper wallpaper";
 | 
			
		||||
          After = "graphical-session.target";
 | 
			
		||||
        };
 | 
			
		||||
        Service = {
 | 
			
		||||
          Type = "oneshot";
 | 
			
		||||
          ExecCondition = "pidof Hyprland";
 | 
			
		||||
          ExecStart = "${config.home.homeDirectory}/.config/hypr/hyprpaper-rotate.sh";
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      timers.hyprpaper-rotation = {
 | 
			
		||||
        Unit = {
 | 
			
		||||
          Description = "Timer for rotating Hyprpaper wallpaper";
 | 
			
		||||
        };
 | 
			
		||||
        Timer = {
 | 
			
		||||
          OnBootSec = cfg.rotation-interval;
 | 
			
		||||
          OnUnitActiveSec = cfg.rotation-interval;
 | 
			
		||||
        };
 | 
			
		||||
        Install = {
 | 
			
		||||
          WantedBy = ["timers.target"];
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
    home.file.".config/hypr/hyprpaper-rotate.sh" = {
 | 
			
		||||
      text = ''
 | 
			
		||||
        #!/usr/bin/env bash
 | 
			
		||||
        set -euo pipefail
 | 
			
		||||
 | 
			
		||||
        WALLPAPER_DIR="${cfg.wallpapers-dir}"
 | 
			
		||||
 | 
			
		||||
        # Find a random wallpaper
 | 
			
		||||
        WP=$(find "$WALLPAPER_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | shuf -n 1)
 | 
			
		||||
 | 
			
		||||
        if [ -z "$WP" ]; then
 | 
			
		||||
          echo "No wallpapers found in $WALLPAPER_DIR"
 | 
			
		||||
          exit 1
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        echo "Setting wallpaper to: $WP"
 | 
			
		||||
 | 
			
		||||
        # Load and set the wallpaper
 | 
			
		||||
        hyprctl hyprpaper preload "$WP" && hyprctl hyprpaper wallpaper ",$WP"
 | 
			
		||||
      '';
 | 
			
		||||
      executable = true;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user