{ description = "Hyprland Live Wallpaper"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils, }: flake-utils.lib.eachDefaultSystem ( system: let pkgs = nixpkgs.legacyPackages.${system}; libPath = pkgs.lib.makeLibraryPath ( with pkgs; [ wayland libxkbcommon vulkan-loader libGL ] ); in { packages.default = pkgs.rustPlatform.buildRustPackage { pname = "hyprland-live-wallpaper"; version = "0.1.0"; src = ./.; cargoLock.lockFile = ./Cargo.lock; nativeBuildInputs = with pkgs; [ pkg-config makeWrapper ]; buildInputs = with pkgs; [ wayland libxkbcommon vulkan-loader wayland-protocols libGL ]; postInstall = '' wrapProgram $out/bin/hyprland-live-wallpaper --prefix LD_LIBRARY_PATH : "${libPath}" ''; }; devShells.default = pkgs.mkShell { buildInputs = with pkgs; [ rustc clippy rustfmt cargo pkg-config wayland libxkbcommon vulkan-loader wayland-protocols libGL ]; LD_LIBRARY_PATH = libPath; }; } ) // { nixosModules.default = { config, lib, pkgs, ... }: with lib; let cfg = config.services.hyprland-live-wallpaper; in { options.services.hyprland-live-wallpaper = { enable = mkEnableOption "Hyprland Live Wallpaper service"; shader = mkOption { type = types.str; default = "default.wgsl"; description = "Shader file to use"; }; }; config = mkIf cfg.enable { systemd.user.services.hyprland-live-wallpaper = { description = "Hyprland Live Wallpaper"; wantedBy = [ "graphical-session.target" ]; after = [ "graphical-session.target" ]; serviceConfig = { Type = "simple"; ExecStart = "${ self.packages.${pkgs.system}.default }/bin/hyprland-live-wallpaper --shader ${cfg.shader}"; Restart = "on-failure"; Environment = [ "RUST_LOG=wgpu=info" ]; }; }; }; }; }; }