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

let
  laptop = builtins.readFile "/etc/hostname" == "syl\n";
in
{
  home.file.".config/hypr/hyprpaper.conf" = {
    source = if laptop then /home/chris/.dotfiles/.config/hypr/hyprpaper.conf else /home/chris/.dotfiles/.config/hypr/hyprpaper.conf;
  };
  home.file.".config/hypr/hyprsome" = {
    source = if laptop then /home/chris/.dotfiles/.config/hypr/hyprsome else /home/chris/.dotfiles/.config/hypr/hyprsome;
  };

  home.file.".config/hypr/hyprland.conf" = {
    text = ''
    monitor=eDP-1,2256x1504@60,0x0,1.5
    workspace=eDP-1,1
    monitor=HDMI-A-1,preferred,0x0,1
    monitor=DP-1,preferred,2680x0,1.5
    monitor=DP-2,preferred,1600x0,1
    workspace=DP-2,2
    workspace=DP-1,1
    workspace=HDMI-A-1,3
    monitor=DP-2,transform,1

    input {
        # kb_layout=
        # kb_variant=
        # kb_model=
        # kb_options=
        # kb_rules=
        repeat_rate=140
        repeat_delay=180
        natural_scroll=0
        sensitivity=0.75
        accel_profile=adaptive

        follow_mouse=2

        touchpad {
                 natural_scroll=1
                 clickfinger_behavior=1
        }
    }

    general {
        max_fps=60 # deprecated, unused
        # main_mod=SUPER

        gaps_in=15
        gaps_out=20
        border_size=0
        col.active_border=0x66ee1111
        col.inactive_border=0x66333333

        #damage_tracking=full # leave it on full unless you hate your GPU and want to make it suffer
        layout=master
    }

    gestures {
        workspace_swipe=true
        workspace_swipe_fingers=3
    }

    decoration {
        rounding=18
        multisample_edges=true
        active_opacity=0.97
        inactive_opacity=0.75
        fullscreen_opacity=1.0
        blur=true
        blur_new_optimizations=true
        blur_size=10 # minimum 1
        blur_passes=3 # minimum 1, more passes = more resource intensive.
        blur_ignore_opacity=false
        # Your blur "amount" is blur_size * blur_passes, but high blur_size (over around 5-ish) will produce artifacts.
        # if you want heavy blur, you need to up the blur_passes.
        # the more passes, the more you can up the blur_size without noticing artifacts.

        drop_shadow=true
        shadow_range=15
        shadow_offset=5 5
        shadow_scale=0.99
        shadow_render_power=1
        col.shadow = rgba(000000cc)
        dim_inactive=true
        dim_strength=0.2
    }

    bezier=snapslide,0.07,0.66,0.04,1.02

    animations {
        enabled=1
        animation=windows,1,2,snapslide
        # animation=borders,1,10,default
        animation=fadeIn,1,2,snapslide
        animation=workspaces,1,2,snapslide
        animation=specialWorkspace,1,2,snapslide,slidevert
    }

    dwindle {
        pseudotile=0 # enable pseudotiling on dwindle
    }

    master {
        special_scale_factor=0.8
        mfact=0.65
        new_is_master=false
        new_on_top=false
    }

    # misc:disable_autoreload = true
    misc {
        focus_on_activate = true
    }

    # example window rules
    # for windows named/classed as abc and xyz
    windowrule=opaque,firefox
    windowrule=float,dolphin
    windowrule=size 60% 60%,dolphin
    ${if laptop then "# this is a kaladin space" else "windowrule=workspace 1,mpv"}
    windowrule=float,mpv
    windowrule=size ${if laptop then "90% 76%" else "85% 85%"},mpv
    windowrule=center,mpv
    windowrule=opaque,mpv
    # windowrule=pin,mpv
    windowrule=float,pulsemixer
    windowrule=workspace ${if laptop then "2" else "1"},firefox
    windowrule=workspace ${if laptop then "1" else "2"},emacs
    windowrule=float,btop
    windowrule=size 70% 70%,btop
    windowrule=center,btop
    windowrule=float,presenter
    windowrule=size 80% 80%,presenter
    windowrule=center,presenter
    windowrule=workspace ${if laptop then "1" else "3"},title:presentation-window

    # example binds
    bind = SUPER,RETURN,exec,alacritty
    bind = SUPER,C,killactive,
    bind = SUPERSHIFT,Q,exit,
    bind = SUPERSHIFT,D,exec,dolphin
    bind = SUPERSHIFT,F,togglefloating,
    bindr = SUPER,Super_L,exec,/home/chris/bin/launcher.sh
    bindr = ALT,Alt_R,exec,/home/chris/bin/window.sh
    bind = SUPER,w,exec,/home/chris/bin/window.sh
    bind = SUPER,E,exec,/home/chris/bin/emacslof
    bind = SUPER,d,exec,emacsclient -c -e '(dired-jump)'
    bind = SUPER,v,exec,emacsclient -e '(chris/dired-open-videos)'
    bind = SUPER,B,exec,/home/chris/bin/fflof
    bind = SUPER,A,exec,alacritty --class pulsemixer -e pulsemixer
    bind = SUPERCTRL,i,exec,alacritty --class btop -e btm
    bind = ,Print,exec,screenshot

    bind = SUPER,P,exec,/home/chris/bin/rbw.sh
    bind = SUPER,M,fullscreen,1
    bind = SUPER,F,fullscreen,0

    bind = SUPER,h,movefocus,l
    bind = SUPER,l,movefocus,r
    bind = SUPER,k,layoutmsg,cycleprev
    bind = SUPER,j,layoutmsg,cyclenext
    bind = SUPERSHIFT,h,movewindow,l
    bind = SUPERSHIFT,l,movewindow,r
    bind = SUPERSHIFT,k,layoutmsg,swapprev
    bind = SUPERSHIFT,j,layoutmsg,swapnext
    bind = SUPERCTRL,l,splitratio,+0.05
    bind = SUPERCTRL,h,splitratio,-0.05
    bind = SUPERCTRL,c,centerwindow

    bind = SUPER,1,workspace,1
    bind = SUPER,2,workspace,2
    bind = SUPER,3,workspace,3
    bind = SUPER,4,workspace,4
    bind = SUPER,5,workspace,5
    bind = SUPER,6,workspace,6
    bind = SUPER,7,workspace,7
    bind = SUPER,8,workspace,8
    bind = SUPER,9,workspace,9
    bind = SUPER,0,workspace,10

    bind = SUPERALT,l,workspace,m+1
    bind = SUPERALT,h,workspace,m-1

    bind = SUPERSHIFT,1,movetoworkspace,1
    bind = SUPERSHIFT,2,movetoworkspace,2
    bind = SUPERSHIFT,3,movetoworkspace,3
    bind = SUPERSHIFT,4,movetoworkspace,4
    bind = SUPERSHIFT,5,movetoworkspace,5
    bind = SUPERSHIFT,6,movetoworkspace,6
    bind = SUPERSHIFT,7,movetoworkspace,7
    bind = SUPERSHIFT,8,movetoworkspace,8
    bind = SUPERSHIFT,9,movetoworkspace,9
    bind = SUPERSHIFT,0,movetoworkspace,10

    bind = SUPER,o,movewindow,mon:l
    bind = SUPER,y,togglespecialworkspace
    bind = SUPER,i,movewindow,left
    bind = SUPERSHIFT,p,pin
    bind = SUPER,n,movetoworkspace,special

    binde = , XF86AudioMute, exec, pamixer -t
    binde = , XF86AudioRaiseVolume, exec, /home/chris/bin/volup
    binde = , XF86AudioLowerVolume, exec, /home/chris/bin/voldown
    binde = ,F1, exec, pamixer -t
    binde = ,F3, exec, /home/chris/bin/volup
    binde = ,F2, exec, /home/chris/bin/voldown
    binde = , XF86MonBrightnessUp, exec, brightnessctl s +10%
    binde = , XF86MonBrightnessDown, exec, brightnessctl s 10%-

    bind=SUPERCTRL,b,exec,eww.sh
    bind=SUPERALT,n,exec,eww update rightside=true

    bindm=SUPER,mouse:272,movewindow
    bindm=SUPER,mouse:273,resizewindow

    # Blur waybar
    # blurls=gtk-layer-shell
    # blurls=notifications

    exec-once = /home/chris/bin/startup.sh
    exec-once = swww init
    exec-once = swww img /home/chris/Pictures/wallpapers/nixorange.webp -t grow --transition-bezier .14,0,.14,.99
    exec-once = dunst
    exec-once = hyprctl dispatch --batch "splitratio 1; splitration -0.35"
    exec-once = dbus-update-activation-environment --systemd --all
    exec-once = jellyfin-mpv-shim
    exec-once = hyprctl setcursor phinger-cursors-light 24
    exec-once = swayidle -w timeout 300 'swaylock -S --effect-blur 20x3 --fade-in 1 --effect-vignette 0.5:1 --grace 60' timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' before-sleep 'swaylock -S --effect-blur 20x3 --effect-vignette 0.5:1' 
  '';
  };
}