#
#  Hyprland NixOS & Home manager configuration
#
#  flake.nix
#   ├─ ./hosts
#   │   └─ ./laptop
#   │       └─ home.nix
#   └─ ./modules
#       └─ ./desktop
#           └─ ./hyprland
#               └─ home.nix *
#

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

{
  home.file = {
    ".config/hypr/hyprland.conf".text = ''
      monitor=eDP-1,1920x1080@60,0x0,1
#      monitor=HDMI-A-2,1920x1080@60,1920x0,1
#      monitor=HDMI-A-1,1280x1028@60,3840x0,1
      workspace=eDP-1,1
#      workspace=HDMI-A-2,2
#      workspace=HDMI-A-1,3
      general {
        main_mod=SUPER
        border_size=4
        gaps_in=5
        gaps_out=7
        col.active_border=0x80ffffff
        col.inactive_border=0x66333333
        damage_tracking=full # leave it on full unless you hate your GPU and want to make it suffer
        layout=dwindle
      }
      
      decoration {
        rounding=5
        multisample_edges=true
        active_opacity=1
        inactive_opacity=1
        fullscreen_opacity=1
        blur=false
        drop_shadow=false
        blur_new_optimizations=true
      }
      animations {
        enabled=true
      }
      misc {
        no_vfr=false
      }
      input {
        kb_layout=us
        follow_mouse=1
        repeat_delay=250
        numlock_by_default=0
        force_no_accel=1
        sensitivity=0
        touchpad {
          disable_while_typing=1
          natural_scroll=0
        }
      }
      dwindle {
        pseudotile=0
      }
      bind=SUPER,Return,exec,${pkgs.alacritty}/bin/alacritty
      bind=SUPER,Q,killactive,
      bind=SUPER,Escape,exit,
      bind=SUPER,E,exec,${pkgs.pcmanfm}/bin/pcmanfm
      bind=SUPER,H,togglefloating,
      bind=SUPER,Space,exec,${pkgs.rofi}/bin/rofi -show drun
      bind=SUPER,P,pseudo,
      bind=SUPER,F,fullscreen,
      bind=SUPER,left,movefocus,l
      bind=SUPER,right,movefocus,r
      bind=SUPER,up,movefocus,u
      bind=SUPER,down,movefocus,d
      bind=ALT,1,workspace,1
      bind=ALT,2,workspace,2
      bind=ALT,3,workspace,3
      bind=ALT,4,workspace,4
      bind=ALT,5,workspace,5
      bind=ALT,6,workspace,6
      bind=ALT,7,workspace,7
      bind=ALT,8,workspace,8
      bind=ALT,9,workspace,9
      bind=ALT,0,workspace,10
      bind=ALT,right,workspace,+1
      bind=ALT,left,workspace,-1
      bind=ALTSHIFT,1,movetoworkspace,1
      bind=ALTSHIFT,2,movetoworkspace,2
      bind=ALTSHIFT,3,movetoworkspace,3
      bind=ALTSHIFT,4,movetoworkspace,4
      bind=ALTSHIFT,5,movetoworkspace,5
      bind=ALTSHIFT,6,movetoworkspace,6
      bind=ALTSHIFT,7,movetoworkspace,7
      bind=ALTSHIFT,8,movetoworkspace,8
      bind=ALTSHIFT,9,movetoworkspace,9
      bind=ALTSHIFT,0,movetoworkspace,10
      bind=ALTSHIFT,right,movetoworkspace,+1
      bind=ALTSHIFT,left,movetoworkspace,-1
      bind=CTRL,right,resizeactive,20 0
      bind=CTRL,left,resizeactive,-20 0
      bind=CTRL,up,resizeactive,0 -20
      bind=CTRL,down,resizeactive,0 20
      bind=,print,exec,${pkgs.flameshot}/bin/flameshot gui
      bind=,XF86AudioLowerVolume,exec,${pkgs.pamixer}/bin/pamixer -d 10
      bind=,XF86AudioRaiseVolume,exec,${pkgs.pamixer}/bin/pamixer -i 10
      bind=,XF86AudioMute,exec,${pkgs.pamixer}/bin/pamixer -t
      bind=,XF86AudioMicMute,exec,${pkgs.pamixer}/bin/pamixer --default-source -t
      bind=,XF86MonBrightnessDown,exec,${pkgs.light}/bin/light -U 5
      bind=,XF86MonBrightnessUP,exec,${pkgs.light}/bin/light -A 5
      windowrule=float,^(Rofi)$
      windowrule=float,title:^(Picture-in-Picture)$
      windowrule=float,title:^(Volume Control)$
      exec-once=${pkgs.swaybg}/bin/swaybg -m center -i $HOME/.config/wall
      exec-once=${pkgs.waybar}/bin/waybar
      exec-once=${pkgs.blueman}/bin/blueman-applet
      exec-once=${pkgs.swayidle}/bin/swayidle -w timeout 600 "${pkgs.swaylock}/bin/swaylock -f" timeout 300 "${pkgs.hyprland}/bin/hyprctl dispatch dpms off" resume "${pkgs.hyprland}/bin/hyprctl dispatch dpms on" before-sleep "${pkgs.swaylock}/bin/swaylock -f"
      exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
      exec-once=systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
    '';
  };
  programs.swaylock.settings = {
    color = "000000";
    image = "$HOME/.config/lockwall"; 
    indicator-caps-lock = true;
    show-keyboard-layout = true;
  };

  services.swayidle = {
    enable = false;
    events = [
      { event = "before-sleep"; command = "${pkgs.swaylock}/bin/swaylock"; }
      { event = "lock"; command = "${pkgs.swaylock}/bin/swaylock -fF"; }
      { event = "after-resume"; command = "${pkgs.hyprland}/bin/hyprctl dispatch dpms on"; }
    ];
    timeouts = [
      { timeout = 300; command = "${pkgs.swaylock}/bin/swaylock -fF"; }
      { timeout = 600; command = "${pkgs.hyprland}/bin/hyprctl dispatch dpms off"; }
    ];
  };
}