{ pkgs, lib, config, inputs, ... }:

let
  enabledMonitors = lib.filter (m: m.enabled) config.monitors;
  hyprland-monitors = lib.concatStringsSep "\n" (lib.forEach enabledMonitors (m: ''
    monitor=${m.name},${toString m.width}x${toString m.height}@${toString m.refreshRate},${toString m.x}x${toString m.y},1
    ${lib.optionalString (m.workspace != null) "workspace=${m.name},${m.workspace}"}
  ''));
in
{
  imports = [ ../default.nix ../../desktop ];

  home.packages = [ inputs.hyprland-contrib.packages.${pkgs.system}.grimblast pkgs.hyprpaper ];

  wayland.windowManager.hyprland = {
    enable = true;
    recommendedEnvironment = true;
    extraConfig = ''
      ${builtins.readFile ./hyprland.conf}
      ${hyprland-monitors}
    '';
  };

  services.hyprpaper = {
    enable = true;
    systemdTarget = "hyprland-session.target";

    preload = [ config.stylix.image ];
    wallpapers = [{ inherit (config.stylix) image; }] ++
      lib.forEach enabledMonitors ({ name, ... }: {
        monitor = name;
        image = config.stylix.image;
      });
  };
}