{ pkgs, ... }@all: with all;
let
  animation-speed = "5";
  transparency = builtins.toString rice.transparency;
  terminal = "ghostty";
  terminal-exec = "ghostty --command=";
  monitors = {
    xps = {
      main   = { name = "eDP-1"; resolution = "1920x1200"; position = "1920x1080"; scale = "1.0"; };
      second = { name = "desc:Sony SONY TV 0x01010101";  resolution = "1920x1080"; position = "1920x0";    scale = "1.0"; };
      third = { name = "DP-6";   resolution = "1920x1080"; position = "0x0";    scale = "1.0"; };
    };
    north = {
      main = { name = "desc:Iiyama North America PL3270Q na";                            resolution = "2560x1440"; position = "1920x0"; scale = "1.0"; };
      left = { name = "desc:Philips Consumer Electronics Company 273PLPH AU11423002132"; resolution = "1920x1080"; position = "0x0";      scale = "1.0"; };
      # right = { name = "HDMI-A-2"; resolution = "1920x1080"; position = "4480x360"; scale = "1.0"; };
    };
    ace = {
      main = { name = "HDMI-A-1"; resolution = "3840x2160"; position = "0x0"; scale = "2.0"; };
    };
  };
in {
  home.packages = with pkgs; [
    hyprland-protocols
    hyprlock
    hypridle
    hyprshot
    hyprpicker
    hyprcursor
    grim
    slurp
  ];
  

  wayland.windowManager.hyprland = {
    enable = true;
    # package = pkgs-unstable.hyprland;
    package = pkgs.hyprland;
    # package = inputs.hyprland.packages.${pkgs.system}.hyprland;
    xwayland.enable = true;
    systemd.enable = true;
    plugins = [
      # inputs.hyprland-plugins.packages.${pkgs.system}.hyprexpo
      # inputs.hyprfocus.packages.${pkgs.system}.hyprfocus
      # inputs.hycov.packages.${pkgs.system}.hycov
      pkgs.hyprlandPlugins.hyprspace
      # inputs.hyprspace.packages.${pkgs.system}.Hyprspace
    ];

    settings = {
      monitor =
        if hyper.host == "NxXPS" then (with monitors.xps; [
          "${main.name}, ${main.resolution}, ${main.position}, ${main.scale}"
          "${second.name}, ${second.resolution}, ${second.position}, ${second.scale}"
          "${third.name}, ${third.resolution}, ${third.position}, ${third.scale}"
        ]) else (if hyper.host == "NxNORTH" then (with monitors.north; [
          "${main.name}, ${main.resolution}, ${main.position}, ${main.scale}"
          "${left.name}, ${left.resolution}, ${left.position}, ${left.scale}"
          # "${right.name}, ${right.resolution}, ${right.position}, ${right.scale}"
        ]) else ( with monitors.ace; [
          "${main.name}, ${main.resolution}, ${main.position}, ${main.scale}"
        ]));

      workspace = let
        d1 = if hyper.host == "NxXPS" then monitors.xps.main.name else (if hyper.host == "NxNORTH" then monitors.north.main.name else monitors.ace.main.name);
        d2 = if hyper.host == "NxXPS" then monitors.xps.second.name else (if hyper.host == "NxNORTH" then monitors.north.left.name else monitors.ace.main.name);
        d3 = if hyper.host == "NxXPS" then monitors.xps.third.name else (if hyper.host == "NxNORTH" then monitors.north.main.name else monitors.ace.main.name);
        # d3 = if hyper.host == "NxXPS" then monitors.xps.main.name else (if hyper.hyper.host == "NxNORTH" then monitors.north.right.name else monitors.ace.main.name);
       compact = "gapsin:0, gapsout:0, bordersize:1, rounding:false";
      in [
        "11, monitor:${d1}, default:true"
        "12, monitor:${d1}"
        "13, monitor:${d1}"
        "14, monitor:${d1}"
        "15, monitor:${d1}"
        "16, monitor:${d1}"
        "17, monitor:${d1}"
        "18, monitor:${d1}"
        "19, monitor:${d1}"
        "10, monitor:${d1}, ${compact}"
        "100, monitor:${d1}, ${compact}"
        "21, monitor:${d2}, default:true, ${compact}"
        "22, monitor:${d2}"
        "23, monitor:${d2}"
        "24, monitor:${d2}"
        "25, monitor:${d2}"
        "26, monitor:${d2}"
        "27, monitor:${d2}"
        "28, monitor:${d2}"
        "29, monitor:${d2}"
        "20, monitor:${d2}, ${compact}"
        "31, monitor:${d3}, default:${let x = if hyper.host == "NxNORTH" then "true" else "false"; in x}, ${compact}"
        "32, monitor:${d3}"
        "33, monitor:${d3}"
        "34, monitor:${d3}"
        "35, monitor:${d3}"
        "36, monitor:${d3}"
        "37, monitor:${d3}"
        "38, monitor:${d3}"
        "39, monitor:${d3}"
        "30, monitor:${d3}, ${compact}"
      ] ++ [
        # no gaps when only
        "w[tv1], gapsout:0, gapsin:0"
        "f[1], gapsout:0, gapsin:0"
      ];

      # "device:logitech-wireless-mouse-mx-master-1" = {
      #   sensitivity = -0.2;
      # };


      env = if hyper.nvidia.enable == true then [
        "LIBVA_DRIVER_NAME,nvidia"
        "XDG_SESSION_TYPE,wayland"
        "GBM_BACKEND,nvidia-drm"
        "__GLX_VENDOR_LIBRARY_NAME,nvidia"
        "WLR_NO_HARDWARE_CURSORS,1"
        "HYPRCURSOR_THEME,${config.gtk.cursorTheme.name}"
        "HYPRCURSOR_SIZE,${toString config.gtk.cursorTheme.size}"
      ] else [];

      input = {
        sensitivity = 0.1;
        kb_layout = "de";
        follow_mouse = "1";
        touchpad = {
          natural_scroll = true;
          scroll_factor = "0.9";
        };
      };

      general = {
        gaps_in = builtins.div rice.gap-size 2;
        gaps_out = rice.gap-size;
        border_size = rice.border-width;
        "col.active_border" = "rgba(${rice.lib.nohash rice.color.border2}ff) rgba(${rice.lib.nohash rice.color.border}ff) 90deg";
        "col.inactive_border" = "rgba(${rice.lib.nohash rice.color.background}ff) rgba(${rice.lib.nohash rice.color.border}ff) 90deg";

        # cursor_inactive_timeout = 10;

        layout = "dwindle";
        # layout = "master";
        resize_on_border = false;
      };

      decoration = {
        rounding = rice.rounding;
        # drop_shadow = false;
        # shadow_range = "20";
        # shadow_offset = "0 0";
        # shadow_render_power = "4";
        # "col.shadow" = "rgba(${rice.lib.nohash rice.color.red.base}ff)";
        # "col.shadow_inactive" = "rgba(${rice.lib.nohash rice.color.black.base}ff)";

        active_opacity = "1.0";
        inactive_opacity = "1.0";
        fullscreen_opacity = "1.0";

        dim_inactive = false;
        dim_strength = "0.2";
        dim_around = "0.8";

        blur = {
          enabled = true;
          size = "10";
          passes = "2";
          xray = false;
          vibrancy = 0.5;
          ignore_opacity = true;
        };
      };

      animations = {
        enabled = true;
        bezier = "myBezier, 0.01, 0.9, 0.1, 1.0"; #o
        # bezier = "myBezier, 0.83, 0, 0.17, 1"; # io
        # bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
        # bezier = "myBezier, 0.33, 1, 0.68, 1";
        animation = let direction = if hyper.host == "NxXPS" then "slide" else "slidevert"; in [
          "windows, 1, ${animation-speed}, myBezier, slide"
          "border, 1, ${animation-speed}, myBezier"
          "fade, 1, ${animation-speed}, myBezier"
          "workspaces, 1, ${animation-speed}, myBezier, ${direction}"
        ];
      };

      gestures = {
        workspace_swipe = true;
        workspace_swipe_fingers = "4";
        workspace_swipe_distance = "300";
        workspace_swipe_invert = true;
        workspace_swipe_min_speed_to_force = "30";
        workspace_swipe_cancel_ratio = "0.5";
        workspace_swipe_create_new = false;
        workspace_swipe_direction_lock = false;
        workspace_swipe_direction_lock_threshold = "10";
        workspace_swipe_forever = true;
        workspace_swipe_use_r = false;
      };

      dwindle = {
        preserve_split = true; # you probably want this
      };

      # master = {
      # };

      misc = {
        disable_hyprland_logo = true;
        animate_mouse_windowdragging = false;
        enable_swallow = true;
      };

      exec-once = [
        "waybar"
        "swww-daemon"
        "hyprland-autoname-workspaces"
        "/usr/lib/polkit-kde-authentication-agent-1 "
        "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
        "syncthing -no-browser"
        "fcitx5"
        # "ibus engine xkb:de::deu"
        "libinput-gestures"
        # "hyprswitch --daemon"
      ];

      windowrulev2 = [
        "bordercolor rgba(${rice.lib.nohash rice.color.magenta.bright}ff), pinned:1"

        "bordersize 0, floating:0, onworkspace:w[tv1]"
        "rounding 0, floating:0, onworkspace:w[tv1]"
        "bordersize 0, floating:0, onworkspace:f[1]"
        "rounding 0, floating:0, onworkspace:f[1]"
      ] ++ [
        "center 1,class:^(gimp)$"

        "float, class:^(ibus-ui.*)$"
        "float, class:^(ibus-ui-gtk3)$"
        "float, class:^(imv)$"
        "float, class:^(org.kde.polkit-kde-authentication-agent-1)$"
        "float, class:^(presenter)$" # sent
        "float, class:^(thunderbird)$"
        "float, title:^(Compact folders)$"
        "float, title:^(Ibus-ui.*)$"
        "float, title:^(Ibus-ui-gtk3)$"
        "float, title:^(Page Info — .*)$"
        "float, title:^(Picture-in-Picture)$"
        "float, title:^(wlogout)$"

        "fullscreen, class:^(imv)$" 
        "fullscreen, class:^(sent)$"
        "fullscreen, class:^(wlogout)$"

        "noanim, class:^(imv)$"
        "noanim, class:^(presenter)$" # sent

        "opacity ${transparency}, class:^(Code)$"
        "opacity ${transparency}, class:^(code-oss)$"
        "opacity ${transparency}, class:^(discord)$"
        # "opacity ${transparency}, class:^(vesktop)$"
        # "opacity ${transparency}, class:^(Element)$"
        "opacity ${transparency}, class:^(lutris)$"
        "opacity ${transparency}, class:^(neovide)$"
        # "opacity ${transparency}, class:^(obsidian)$"
        "opacity ${transparency}, class:^(VSCodium)$"
        "opacity ${transparency}, title:^(wlogout)$"

        "opaque, title:^(GNU Image Manipulation Program)$"
        
        "pin, title:^(Picture-in-Picture)$"

        "tile, class:^(sent)$"

        "workspace 100, class:^(gamescope)$"

        "float, title:^(terminal-file-picker)$"
        "dimaround, title:^(terminal-file-picker)$"
        "center, title:^(terminal-file-picker)$"
        "size 80% 80%, title:^(terminal-file-picker)$"
      ];


      layerrule = [
        "blur,waybar"
        "blur,bar-0" # hyprpanel
        "blur,bar-1"
        "blur,bar-2"
        "blur,bar-3"
        "blur,bar-4"
        "dimaround,rofi"
        "blur,rofi"
        "xray,rofi"
      ];


      # d8888b. d888888b d8b   db d8888b. .d8888.
      # 88  '8D   '88'   888o  88 88  '8D 88'  YP
      # 88oooY'    88    88V8o 88 88   88 '8bo.
      # 88''Yb.    88    88 V8o88 88   88   'Y8b.
      # 88   8D   .88.   88  V888 88  .8D db   8D
      # Y8888P' Y888888P VP   V8P Y8888D' '8888Y'

      ###########################################################################
      ## ROW 0:
      bind = [
        "SUPER,       F1, workspace,       100"
        "SUPER SHIFT, F1, movetoworkspace, 100"
        # "SUPER,       F2,"
        # "SUPER,       F3, toggleopaque"
        "SUPER,       F4, exec, rm /tmp/caldav_event_cache.json && notify-send 'NxCaldavEvent' 'Cleared saved event cache!' ''"
        # "SUPER,       F5, exec, nx_gcal_event force-lookup"
        # "SUPER SHIFT, F5, exec, nx_gcal_event reauthenticate"
        "SUPER,       F6, exec, ${terminal-exec}'htop'"
        "SUPER,       F7, exec, ${terminal-exec}'nmtui'"
        ''SUPER,       F8, exec, find ~/Pictures/wallpapers/* -type f -not -path "~/Pictures/wallpapers/.git/*" | sort -R | head -n 1 | xargs -d '\n' swww img --transition-type wipe --transition-angle 60 --transition-step 120 --transition-fps 120 --transition-duration 2''
        "SUPER,       F9, execr, submap_indicator set '󰸉 '"
        "SUPER,       F9, submap, color"
        # "SUPER,       F10, hyprload,update"
        "SUPER,       F11, exec, waybar"
        "SUPER SHIFT, F11, exec, pkill waybar "
        "SUPER,       F12, exec, hyprland-autoname-workspaces"
        "SUPER SHIFT, F12, exec, pkill -9 hyprland-aut"

        ###########################################################################
        ## ROW 1:

        # "SUPER,       ^, "
        "SUPER,       1, workspace,       11"
        "SUPER SHIFT, 1, movetoworkspace, 11"
        "SUPER,       2, workspace,       12"
        "SUPER SHIFT, 2, movetoworkspace, 12"
        "SUPER,       3, workspace,       13"
        "SUPER SHIFT, 3, movetoworkspace, 13"
        "SUPER,       4, workspace,       14"
        "SUPER SHIFT, 4, movetoworkspace, 14"
        "SUPER,       5, workspace,       15"
        "SUPER SHIFT, 5, movetoworkspace, 15"
        "SUPER,       6, workspace,       16"
        "SUPER SHIFT, 6, movetoworkspace, 16"
        "SUPER,       7, workspace,       17"
        "SUPER SHIFT, 7, movetoworkspace, 17"
        "SUPER,       8, workspace,       18"
        "SUPER SHIFT, 8, movetoworkspace, 18"
        "SUPER,       9, workspace,       19"
        "SUPER SHIFT, 9, movetoworkspace, 19"
        "SUPER,       0, workspace,       10"
        "SUPER SHIFT, 0, movetoworkspace, 10"

        # "SUPER,       ß,"
        # "SUPER,       ´,"
        # "SUPER,       Backspace,"

        ###########################################################################
        ## ROW 2:

        # "SUPER,       TAB, hycov:toggleoverview"
        "SUPER,       TAB, overview:toggle"
        # "SUPER,       TAB, hyprexpo:expo, toggle"
        "ALT,         TAB, focuscurrentorlast"
        # "SUPER,       TAB, exec, hyprswitch --daemon"
        "SUPER,       Q, killactive"
        "SUPER,       W, exec, submap_indicator set '󰈹 '"
        "SUPER,       W, submap, browserSM "
        # "SUPER,       E, exec, element-desktop"
        "SUPER,       R, exec, rofi -show drun"
        # "SUPER,       T, exec, alacritty"
        # "SUPER SHIFT, T, exec, alacritty -e sh -c "ssh nxace""
        "SUPER,       T, exec, SESSION_FROM_DE=TRUE ${terminal}"
        "SUPER SHIFT, T, exec, ${terminal-exec}'ssh nxace'"
        "SUPER,       Z, exec, zathura"
        "SUPER,       U, exec, [tile] thunderbird "
        "SUPER,       I, exec, ${terminal-exec}'hx ~/nix-dots/ && fish'"
        "SUPER SHIFT, I, exec, ${terminal-exec}'nh home switch || read'"
        "SUPER CTRL,  I, exec, ${terminal-exec}'nh os switch || read'"
        "SUPER,       O, exec, obsidian "
        "SUPER,       P, pin "
        # "SUPER,       Ü,"
        # "SUPER,       +,"
        "SUPER,       Enter, exec, SESSION_FROM_DE=TRUE ${terminal}"


        ###########################################################################
        ## ROW 3:

        "SUPER,       A, execr, submap_indicator set ' 󰹑 '"
        "SUPER,       A, submap, scrL"
        "SUPER,       S, exec, spotify"
        "SUPER,       D, exec, vesktop"
        # "SUPER,       D, exec, discord"
        "SUPER,       F, fullscreen"
        # "SUPER,       G,"
        "SUPER,       H, movefocus, l"
        "SUPER,       J, movefocus, d"
        "SUPER,       K, movefocus, u"
        "SUPER,       L, movefocus, r"
        # "SUPER,       Ö,"
        # "SUPER,       Ä,"
        # "SUPER,       #,"

        ###########################################################################
        ## ROW 4:

        # "SUPER,       <, overview:toggle"
        "SUPER,       Y, execr, submap_indicator set '󰹑 '"
        "SUPER,       Y, submap, scrR"
        "SUPER,       X, exec, pkill wlogout || wlogout --protocol layer-shell -b 3"
        # "SUPER,       C, exec, /home/nx2/scripts/quickconfig/quickconfig.sh "
        "SUPER,       C, exec, chatterino"
        "SUPER SHIFT, C, exec, hyprpicker -n -a"
        "SUPER,       V, togglefloating, "
        "SUPER,       B, exec, bitwarden"
        "SUPER,       N, togglesplit"
        # "SUPER,       M, exec, /home/nx2/scripts/meme-full-screen/meme-full-screen.sh "
        # "SUPER,       comma, exec, /home/nx2/scripts/change-language.sh"
        "SUPER,       ., exec, echo key x:Prior | dotool"
        "SUPER,       -, exec, echo key x:Next | dotool"

        ###########################################################################
        ## ROW 5:

        # bindr = SUPER, Ctrl, exec, # ??
        # bindr = SUPERALT, Alt_L, exec, 
        # "SUPER,            Space, cyclenext"
        "SUPER SHIFT,      Space, swapnext"
        # "SUPER,      , "
        # "SUPER,      , "
        # "SUPER,      AppsKey, # ? "
        #

        ###########################################################################
        ## ARROW KEYS:

        "SUPER, left, movefocus, l"
        # "SUPER SHIFT, left, split-changemonitor, prev"
        "SUPER, right, movefocus, r"
        "SUPER, up, movefocus, u"
        # "SUPER SHIFT, right, split-changemonitor, next"
        "SUPER, down, movefocus, d"

        ###########################################################################
        ## MEGA KEYS:

        ", Print, execr, submap_indicator set '󰄀 '"
        ", Print, submap, screenshot"

        # "SUPER, Next, resizeactive, 5% 5%" # binde
        # "SUPER, Prior, resizeactive, -5% -5%" # binde

        ###########################################################################
        ## FN KEYS:

        ",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"
        ",XF86AudioLowerVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-"
        ",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
        ",XF86AudioPlay, exec, playerctl play-pause"
        ",XF86AudioPrev, exec, playerctl previous"
        ",XF86AudioNext, exec, playerctl next"
        ",XF86MonBrightnessUp, exec, brightnessctl s '5%+'"
        ",XF86MonBrightnessDown, exec, brightnessctl s '5%-'"

        ###########################################################################
        ## MOUSE:

        "SUPER, mouse_down, workspace, e+1"
        "SUPER, mouse_up, workspace, e-1"
      ];


      bindm = [
        "SUPER, mouse:272, movewindow"
        "SUPER, mouse:273, resizewindow"
      ];

      bindl = [
        # ",switch:on:Lid Switch, exec, hyprlock &"
      ];
      binde = [
        # "SUPER, TAB, exec, hyprswitch --daemon --do-initial-execute"
        "SUPER, Next, resizeactive, 10% 10%" 
        "SUPER, Prior, resizeactive, -10% -10%" 
      ];
      plugin = {
        overview = {
          # panelHeight = 
          # panelBorderWidth = 
          onBottom = false; # whether if panel should be on bottom instead of top
          # workspaceMargin = # spacing of workspaces with eachother and the edge of the panel
          # reservedArea = # padding on top of the panel, for Macbook camera notch
          workspaceBorderSize = rice.border-width; #
          centerAligned = true; # whether if workspaces should be aligned at the center (KDE / macOS style) or at the left (Windows style)
          hideBackgroundLayers = true; # do not draw background and bottom layers in overview
          hideTopLayers = false; # do not draw top layers in overview
          hideOverlayLayers = false; # do not draw overlay layers in overview
          hideRealLayers = false; # whether to hide layers in actual workspace
          drawActiveWorkspace = true; # draw the active workspace in overview as-is
          overrideGaps = false; # whether if overview should override the layout gaps in the current workspace using the following values
          # gapsIn = #
          # gapsOut = #
          affectStrut = false; # whether the panel should push window aside, disabling this option also 

          dots_center = true;
          autoDrag = true;  # mouse click always drags window when overview is open
          autoScroll = true;  # mouse scroll on active workspace area always switch workspace
          exitOnClick = true;  # mouse click without dragging exits overview
          switchOnDrop = true;  # switch to the workspace when a window is droppped into it
          exitOnSwitch = true;  # overview exits when overview is switched by clicking on workspace view or by switchOnDrop
          showNewWorkspace = false;  # add a new empty workspace at the end of workspaces view
          showEmptyWorkspace = false;  # show empty workspaces that are inbetween non-empty workspaces
          showSpecialWorkspace = false;  # defaults to false
          disableGestures = true;
          reverseSwipe = true;  # reverses the direction of swipe gesture, for macOS peeps?
          exitKey = true;
        };
      };
    };



    # .d8888. db    db d8888b. 88b  d88   d8b   d88888b. .d8888.
    # 88'  YP 88    88 88  '8D 88YbdP88  dP'Yb  88'  '8b 88'  YP
    # '8bo.   88    88 88oooY' 88 YP 88 d8. .8b 88.  .8P '8bo.
    #   'Y8b. 88    88 88''Yb. 88    88 8888888 888888P'   'Y8b.
    # db   8D 88.  .88 88   8D 88    88 88' '88 88       db   8D
    # '8888Y' 'Y8888P' Y8888P' YP    YP 88   YP YP       '8888Y'
    extraConfig = let
      action_simple = { mods ? "", key, cmd }: ''
        bind=${mods},${key},execr,submap_indicator unset
        bind=${mods},${key},${cmd}
        bind=${mods},${key},submap,reset
      '';
      extra_workspace = { key, wsnumber }: ''
        bind=,${key},execr,submap_indicator unset
        bind=,${key},workspace,${wsnumber}
        bind=,${key},submap,reset
        bind=SUPER,${key},execr,submap_indicator unset
        bind=SUPER,${key},workspace,${wsnumber}
        bind=SUPER,${key},submap,reset
        bind=SUPER SHIFT,${key},execr, submap_indicator unset
        bind=SUPER SHIFT,${key},movetoworkspace,${wsnumber}
        bind=SUPER SHIFT,${key},submap,reset
      '';
    in ''    
      submap = browserSM
      ${action_simple { key = "A"; cmd = "exec,firefox https://www.amazon.de/b?node=3010075031&ref_=nav_ya_signin";}}
      ${action_simple { key = "C"; cmd = "exec,firefox https://calendar.google.com";}}
      ${action_simple { key = "D"; cmd = "exec,firefox https://www.disneyplus.com/home";}}
      ${action_simple { key = "H"; cmd = "exec,firefox https://www.hs-mittweida.de";}}
      ${action_simple { key = "I"; cmd = "exec,firefox https://www.imdb.com";}}
      ${action_simple { key = "L"; cmd = "exec,firefox https://feddit.de";}}
      ${action_simple { key = "M"; cmd = "exec,firefox https://ieji.de/home";}}
      ${action_simple { key = "N"; cmd = "exec,firefox https://Netflix.com";}}
      ${action_simple { key = "R"; cmd = "exec,firefox https://reddit.com";}}
      ${action_simple { key = "S"; cmd = "exec,firefox 127.0.0.1:8384/";}}
      ${action_simple { key = "T"; cmd = "exec,hyprctl dispatch exec firefox https://twitch.tv";}}
      ${action_simple { key = "udiaeresis"; cmd = "exec,firefox https://translate.google.com";}}
      ${action_simple { key = "W"; cmd = "exec,hyprctl dispatch exec firefox";}}
      ${action_simple { key = "X"; cmd = "exec,firefox https://nx2.site";}}
      ${action_simple { key = "Y"; cmd = "exec,firefox https://youtube.com";}}
      ${action_simple { key = "P"; cmd = "exec,firefox https://pw.nx2.site";}}
      ${action_simple { key = "P"; cmd = "exec,firefox https://pw.nx2.site";}}
      bind=,Z,exec,submap_indicator set ' '
      bind=,Z,submap,tuda
      bind=,Z,submap,reset
      bind=,Escape,exec,submap_indicator unset
      bind=,Escape,submap,reset
      submap = reset


      submap = scrL
      ${builtins.concatStringsSep "\n" (builtins.map (num: extra_workspace { key = builtins.toString num; wsnumber = "2" + builtins.toString num;}) [1 2 3 4 5 6 7 8 9 0])}
      bind = , A, execr, submap_indicator unset
      bind = , A, submap, reset
      bind = , Escape, execr, submap_indicator unset
      bind = , Escape, submap, reset
      submap = reset

      submap = scrR
      ${builtins.concatStringsSep "\n" (builtins.map (num: extra_workspace { key = builtins.toString num; wsnumber = "3" + builtins.toString num;}) [1 2 3 4 5 6 7 8 9 0])}
      bind = , Y, execr, submap_indicator unset
      bind = , Y, submap, reset
      bind = , Escape, execr, submap_indicator unset
      bind = , Escape, submap, reset
      submap = reset

      submap = color
      ${action_simple { key = "W"; cmd = ''exec,swww query | sed -n 1p | sed -E 's-.*image: (.*)-"\1"-g' | xargs change_colors_json img && notify-send 'NxTheme' 'change_colors_json img successfull' ''; }} 
      ${action_simple { key = "M"; cmd = ''exec,change_colors_json manual && notify-send 'NxTheme' 'change_colors_json manual successfull'  ''; }} 
      ${action_simple { key = "D"; cmd = ''exec,firefox ${hyper.home}/.config/color-pallete.html''; }} 
      bind = , Escape, execr, submap_indicator unset
      bind = , Escape, submap, reset
      submap = reset

      submap = tuda
      ${action_simple { key = "T"; cmd = ''exec,firefox https://www.tucan.tu-darmstadt.de/''; }} 
      ${action_simple { key = "M"; cmd = ''exec,firefox https://moodle.tu-darmstadt.de/''; }} 
      ${action_simple { key = "I"; cmd = ''exec,firefox https://moodle.informatik.tu-darmstadt.de/''; }} 
      bind = , Escape, execr, submap_indicator unset
      bind = , Escape, submap, reset
      submap = reset

      submap = screenshot
      ${action_simple { key = "W"; cmd = ''exec,hyprshot -m window''; }}
      ${action_simple { key = "M"; cmd = ''exec,hyprshot -m output''; }}
      ${action_simple { key = "R"; cmd = ''exec,hyprshot -m region''; }}
      bind = , Escape, execr, submap_indicator unset
      bind = , Escape, submap, reset
      submap = reset
      
    '';
  };

  home.file = let
    m = if hyper.host == "NxXPS" then monitors.xps.main.name else monitors.north.main.name;
  in {
    ".config/hypr/hyprlock.conf".text = ''
      background {
          monitor = ${m}

          # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
          path = /home/nx2/Pictures/wallpapers/nix-wall.png
          blur_size = 4
          blur_passes = 3 # 0 disables blurring
          noise = 0.0117
          contrast = 1.3000 # Vibrant!!!
          brightness = 0.8000
          vibrancy = 0.2100
          vibrancy_darkness = 0.0
      }

      input-field {
          monitor =
          size = 250, 50
          outline_thickness = 1
          dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
          dots_spacing = 0.64 # Scale of dots' absolute size, 0.0 - 1.0
          dots_center = true
          outer_color = rgba(aaaaaaff)
          inner_color = rgba(000000ff)
          font_color = rgba(ffffffff)
          fade_on_empty = true
          placeholder_text = <i>Password...</i> # Text rendered in the input box when it's empty.
          hide_input = false
          position = 0, 50
          halign = center
          valign = bottom
      }

      # Current time
      label {
          monitor =
          text = cmd[update:1000] echo "<b><big> $(date +"%H:%M:%S") </big></b>"
          color = $color0
          font_size = 64
          font_family = ${rice.font.code.name} 10
          position = 0, 16
          halign = center
          valign = center
      }

      # User label
      label {
          monitor =
          text = Hey <span text_transform="capitalize" size="larger">$USER</span>
          color = $color0
          font_size = 20
          font_family = ${rice.font.code.name} 10
          position = 0, 0
          halign = center
          valign = center
      }


      # Type to unlock
      label {
          monitor =
          text = Type to unlock!
          color = $color0
          font_size = 16
          font_family = ${rice.font.code.name} 10
          position = 0, 30
          halign = center
          valign = bottom
      }
    '';
  };
}


# plugin {
#     hycov {
#         overview_gappo = 60             # gaps width from screen edge
#         overview_gappi = 24             # gaps width from clients
#         enable_hotarea = 0              # enable mouse cursor hotarea     
#         # hotarea_monitor = all           # monitor name which hotarea is in, default is all
#         # hotarea_pos = 1                 # position of hotarea (1: bottom left, 2: bottom right, 3: top left, 4: top right)
#         # hotarea_size = 10               # hotarea size, 10x10
#         # swipe_fingers = 4               # finger number of gesture,move any directory
#         move_focus_distance = 100       # distance for movefocus,only can use 3 finger to move 
#         enable_gesture = 0              # enable gesture
#         disable_workspace_change = 0    # disable workspace change when in overview mode
#         disable_spawn = 0               # disable bind exec when in overview mode
#         auto_exit = 1                   # enable auto exit when no client in overview
#         auto_fullscreen = 0             # auto make active window maximize after exit overview
#         only_active_workspace = 0       # only overview the active workspace
#         only_active_monitor = 1         # only overview the active monitor
#         enable_alt_release_exit = 0     # alt swith mode arg,see readme for detail
#         alt_replace_key = Alt_L         # alt swith mode arg,see readme for detail
#         alt_toggle_auto_next = 0        # auto focus next window when toggle overview in alt swith mode
#         click_in_cursor = 0             # when click to jump,the target windwo is find by cursor, not the current foucus window.
#         hight_of_titlebar = 0           # height deviation of title bar hight
#     }
# }
