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

{
  imports = [
#    ./hyprpaper.nix
    ./waybar.nix
    ./fixes.nix
    ./dunst.nix
    ./rofi.nix
  ];

  home.packages = with pkgs; [
    alacritty
    wev
    brightnessctl
    playerctl
    wl-clipboard
    grimblast
    nwg-bar
    powertop
    lxqt.lxqt-policykit
  ];

  wayland.windowManager.hyprland = {
    enable = true;
    settings = {
      monitor = if hostName == "xv-laptop" then ",preferred,auto,1.4" else ",preferred,auto,auto";

      exec-once = [
        "waybar"
        "lxqt-policykit-agent"
      ];

      "$mod" = "SUPER";

      input = {
        follow_mouse = 2;
        touchpad = {
          natural_scroll = true;
          clickfinger_behavior = true;
        };
      };

      general = {
        gaps_in = "5";
        gaps_out = "10";
        border_size = "2";

        "col.active_border" = "rgba(00bfffee) rgba(36b7e2ee) 45deg";
        "col.inactive_border" = "rgba(0a3543aa)";

        layout = "dwindle";
      };

      decoration = {
        rounding = "5";
        drop_shadow = "false";
        blur.enabled = "false";
        shadow_render_power = "3";
        "col.shadow" = "rgba(1a1a1aee)";
      };

      gestures = {
        workspace_swipe = "on";
        workspace_swipe_distance = "200";
      };

      misc = {
        vfr = "true";
        force_default_wallpaper = "0";
      };

      xwayland = {
        force_zero_scaling = true;
      };

      workspace = if hostName == "xv-desktop" then [
        "1, monitor:DP-2"
        "2, monitor:DP-2"
        "3, monitor:DP-2"
        "4, monitor:DP-2"
        "5, monitor:DP-2"
        "6, monitor:HDMI-A-1"
        "7, monitor:HDMI-A-1"
        "8, monitor:HDMI-A-1"
        "9, monitor:HDMI-A-1"
        "10, monitor:HDMI-A-1"
      ] else [ ];

      bind = [
        "$mod, Q, exec, alacritty"
        "$mod, SPACE, exec, rofi -show drun"
        ",Print, exec, grimblast copy area"
        "$mod,ESCAPE, exec, nwg-bar"
        "$mod, P, exit"

        "$mod, C, killactive"
        "$mod SHIFT, C, exec, hyprctl kill"
        "$mod, V, togglefloating"
        "$mod, F, fullscreen, 0"
        "$mod, M, fullscreen, 1"
        "$mod SHIFT, L, exec, hyprlock" 
        "$mod, S, exec, systemctl suspend" 

        "$mod, h, movefocus, l"
        "$mod, l, movefocus, r"
        "$mod, k, movefocus, u"
        "$mod, j, movefocus, d"

        "$mod SHIFT, h, movewindow, l"
        "$mod SHIFT, l, movewindow, r"
        "$mod SHIFT, k, movewindow, u"
        "$mod SHIFT, j, movewindow, d"

        "$mod ALT, h, resizeactive, -20 0"
        "$mod ALT, l, resizeactive, 20 0"
        "$mod ALT, k, resizeactive, 0 -20"
        "$mod ALT, j, resizeactive, 0 20"

        "$mod, 1, workspace, 1"
        "$mod, 2, workspace, 2"
        "$mod, 3, workspace, 3"
        "$mod, 4, workspace, 4"
        "$mod, 5, workspace, 5"
        "$mod, 6, workspace, 6"
        "$mod, 7, workspace, 7"
        "$mod, 8, workspace, 8"
        "$mod, 9, workspace, 9"
        "$mod, 0, workspace, 10"

        "$mod SHIFT, 1, movetoworkspace, 1"
        "$mod SHIFT, 2, movetoworkspace, 2"
        "$mod SHIFT, 3, movetoworkspace, 3"
        "$mod SHIFT, 4, movetoworkspace, 4"
        "$mod SHIFT, 5, movetoworkspace, 5"
        "$mod SHIFT, 6, movetoworkspace, 6"
        "$mod SHIFT, 7, movetoworkspace, 7"
        "$mod SHIFT, 8, movetoworkspace, 8"
        "$mod SHIFT, 9, movetoworkspace, 9"
        "$mod SHIFT, 0, movetoworkspace, 10"
      ] ++ (if hostName == "xv-desktop" then [
        ",code:194,workspace, 6"
        ",code:195,workspace, 7"
        ",code:196,workspace, 8"
        ",code:197,workspace, 9"
        ",code:198,workspace, 10"

        "SHIFT, code:194, movetoworkspace, 6"
        "SHIFT, code:195, movetoworkspace, 7"
        "SHIFT, code:196, movetoworkspace, 8"
        "SHIFT, code:197, movetoworkspace, 9"
        "SHIFT, code:198, movetoworkspace, 10"
      ] else [ ]);

      bindle = [
        # Volume control
        ",XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
        ",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"

        # Brightness control
        ",XF86MonBrightnessUp, exec, brightnessctl set 5%+"
        ",XF86MonBrightnessDown, exec, brightnessctl set 5%-"
      ];

      bindl= [
        # Toggle audio mute
        ",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"

        # Media control
        ",XF86AudioPlay, exec, playerctl play-pause"
        ",XF86AudioNext, exec, playerctl next"
        ",XF86AudioPrev, exec, playerctl previous"
      ];

      bindm = [
        "$mod, mouse:272, movewindow"
        "$mod, mouse:273, resizewindow"
      ];
    };
  };
}