{ lib, pkgs, ... }:
with lib;
{
  options.mjallen.desktop.hyprland = {
    enable = mkEnableOption "enable hyprland desktop";

    primaryDisplay = mkOption {
      type = types.str;
      default = "DP-1";
    };

    display1 = {
      input = mkOption {
        type = types.str;
        default = "DP-1";
      };

      resolution = mkOption {
        type = types.str;
        default = "3840x2160";
      };

      refreshRate = mkOption {
        type = types.str;
        default = "240.00000";
      };
    };

    display2 = {
      input = mkOption {
        type = types.str;
        default = "DP-1";
      };

      resolution = mkOption {
        type = types.str;
        default = "3840x2160";
      };

      refreshRate = mkOption {
        type = types.str;
        default = "240.00000";
      };
    };

    wallpaper = mkOption {
      type = with types; listOf str;
      default = [ ];
      description = "list of hyprland wallpaper configs";
    };

    monitor = mkOption {
      type = with types; listOf str;
      default = [ ];
      description = "list of hyprland monitor configs";
    };

    monitorv2 = mkOption {
      type = with types; listOf str;
      default = [ ];
      description = "list of hyprland monitorv2 configs";
    };

    workspace = mkOption {
      type = with types; listOf str;
      default = [ ];
      description = "list of hyprland workspace definitions";
    };

    windowRule = mkOption {
      type = with types; listOf str;
      default = [ ];
      description = "list of hyprland window rules";
    };

    extraConfig = mkOption {
      type = with types; str;
      default = '''';
      description = "any extra options";
    };

    iconThemeName = mkOption {
      type = types.str;
      default = "Colloid-Dark";
    };

    gtkThemeName = mkOption {
      type = types.str;
      default = "Colloid-Dark";
    };

    defaultApps = mkOption {
      type = types.submodule {
        options = {
          browser = mkOption {
            type = types.package;
            default = pkgs.firefox;
          };
          editor = mkOption {
            type = types.package;
            default = pkgs.micro;
          };
          fileExplorer = mkOption {
            type = types.package;
            default = pkgs.nemo;
          };
          visual = mkOption {
            type = types.package;
            default = pkgs.vscodium;
          };
          terminal = mkOption {
            type = types.package;
            default = pkgs.kitty;
          };
          office = mkOption {
            type = types.package;
            default = pkgs.onlyoffice-bin_latest;
          };
          video = mkOption {
            type = types.package;
            default = pkgs.vlc;
          };
          imageViewer = mkOption {
            type = types.package;
            default = pkgs.nomacs;
          };
        };
      };
      description = "Default applications used across the system.";
    };

    hyprIdle = {
      lockScreenTimer = mkOption {
        type = with types; int;
        default = 300;
      };
      screenOffTimer = mkOption {
        type = with types; int;
        default = 900;
      };
      suspendTimer = mkOption {
        type = with types; int;
        default = 1800;
      };
    };
  };
}
