{
  config,
  lib,
  pkgs,
  ...
}: let
  cfg = config.ar.home;
in {
  config = lib.mkIf cfg.desktop.hyprland.enable {
    services.hyprpaper =
      lib.mkIf
      (config.stylix.enable && !cfg.services.randomWallpaper.enable)
      {
        enable = true;

        settings = {
          preload = ["${config.stylix.image}"];
          wallpaper = [",${config.stylix.image}"];
        };
      };

    wayland.windowManager.hyprland = {
      enable = true;
      settings = import ./settings.nix {inherit config lib pkgs;};

      systemd = {
        enable = true;
        variables = ["--all"];
      };

      extraConfig = let
        moveMonitorBinds =
          lib.attrsets.mapAttrsToList (
            key: direction: "bind=CONTROL,${key},movecurrentworkspacetomonitor,${builtins.substring 0 1 direction}"
          )
          cfg.desktop.windowManagerBinds;

        moveWindowBinds =
          lib.attrsets.mapAttrsToList (
            key: direction: "bind=,${key},movewindow,${builtins.substring 0 1 direction}"
          )
          cfg.desktop.windowManagerBinds;

        moveWorkspaceBinds = builtins.map (x: "bind=,${toString x},workspace,${toString x}") [1 2 3 4 5 6 7 8 9];
      in ''
        submap=resize
        binde=,down,resizeactive,0 10
        binde=,left,resizeactive,-10 0
        binde=,right,resizeactive,10 0
        binde=,up,resizeactive,0 -10
        binde=,j,resizeactive,0 10
        binde=,h,resizeactive,-10 0
        binde=,l,resizeactive,10 0
        binde=,k,resizeactive,0 -10
        bind=,escape,submap,reset
        submap=reset

        submap=move
        ${lib.strings.concatLines moveMonitorBinds}
        ${lib.strings.concatLines moveWindowBinds}
        ${lib.strings.concatLines moveWorkspaceBinds}
        bind=,comma,exec,${lib.getExe pkgs.hyprnome} --previous --move
        bind=,period,exec,${lib.getExe pkgs.hyprnome} --move
        bind=,escape,submap,reset
        submap=reset
      '';
    };
  };
}
