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

let
  nomarchyLib = import ../../../lib { inherit lib; };
  assetsPath = ../../../themes/palettes;

  # Use shared wallpaper resolver
  activeWallpaper = nomarchyLib.resolveWallpaper {
    wallpaperPath = config.nomarchy.wallpaper;
    themeName = config.nomarchy.theme;
    inherit assetsPath;
  };

  hyprlandState = config.nomarchy.hyprland;
in
{
  home.sessionVariables = lib.mkDefault {
    WLR_NO_HARDWARE_CURSORS = "1";
    HYPRLAND_LOG_WLR = "1";
  };

  wayland.windowManager.hyprland = {
    enable = lib.mkDefault true;
    systemd.enable = lib.mkDefault false;
    settings = lib.mkDefault {
      "debug" = {
        "disable_logs" = false;
        "enable_stdout_logs" = true;
      };
      "cursor" = {
        "no_hardware_cursors" = true;
      };
      "general" = {
        "gaps_in" = hyprlandState.gaps_in;
        "gaps_out" = hyprlandState.gaps_out;
        "border_size" = hyprlandState.border_size;
        "col.active_border" = "rgb(${config.colorScheme.palette.base0E})";
        "col.inactive_border" = "rgb(${config.colorScheme.palette.base03})";
      };
    };
    extraConfig = lib.mkDefault ''
      source = ~/.config/hypr/nomarchy.conf
    '';
  };

  # Deploy Hyprland configuration files
  xdg.configFile."hypr/nomarchy.conf".source = ./config/nomarchy.conf;
  xdg.configFile."hypr/monitors.conf".source = lib.mkDefault ./config/monitors.conf;
  xdg.configFile."hypr/input.conf".source = lib.mkDefault ./config/input.conf;
  xdg.configFile."hypr/bindings.conf".source = lib.mkDefault ./config/bindings.conf;
  xdg.configFile."hypr/looknfeel.conf".source = lib.mkDefault ./config/looknfeel.conf;
  xdg.configFile."hypr/autostart.conf".source = lib.mkDefault ./config/autostart.conf;

  # Run swaybg as a proper systemd user service rather than a Hyprland exec-once.
  # exec-once fails silently (black screen with no visible error) when timing
  # against uwsm's graphical-session target is off; a service surfaces failures
  # via `systemctl --user status nomarchy-wallpaper` and auto-restarts.
  systemd.user.services.nomarchy-wallpaper = {
    Unit = {
      Description = "Nomarchy desktop wallpaper (swaybg)";
      PartOf = [ "graphical-session.target" ];
      After = [ "graphical-session.target" ];
    };
    Service = {
      ExecStart = "${pkgs.swaybg}/bin/swaybg -i %h/.config/nomarchy/current/background -m fill";
      Restart = "on-failure";
      RestartSec = "2";
    };
    Install = {
      WantedBy = [ "graphical-session.target" ];
    };
  };
}
