{ scripts, extra, config, lib, pkgs, terminal, ... }@inputs:

let
  dynscreenshot = pkgs.writeShellScript "dynscreenshot"
    (builtins.readFile "${scripts}/dynscreenshot.sh");
  changebrightness = pkgs.writeShellScript "changebrightness"
    (builtins.readFile "${scripts}/changebrightness.sh");
  mod = config.wayland.windowManager.sway.config.modifier;
  dmenuCommand = builtins.readFile "${scripts}/dmenu.sh";
  shutdownMenu = pkgs.writeShellScript "shutdownmenu"
    (builtins.readFile "${scripts}/shutdownmenu.sh");
  backgroundImage = "${extra}/kuwaitboat.jpg";
in {
  enable = true;
  config = rec {
    terminal = "${pkgs.lib.getExe inputs.terminal}";
    modifier = "Mod4";
    fonts = {
      names = [ "Red Hat Display" ];
      style = "Regular";
      size = 12.0;
    };
    input = {
      "type:touchpad" = {
        natural_scroll = "disabled";
        dwt = "disabled";
        click_method = "clickfinger";
        scroll_factor = "0.5";
      };
      "type:keyboard" = {
        xkb_layout = "ca,ca";
        xkb_variant = ",eng";
      };
    };
    bars = let config = config;
    in [{
      command = "${pkgs.lib.getExe pkgs.waybar}";
      position = "top";
      inherit fonts;
    }];
    window = {
      border = 2;
      titlebar = true;
    };
    keybindings = let
      screenshotPath =
        "Pictures/Screenshots/screenshot`date +%Y%m%d%H%M%S`.png";
    in lib.mkOptionDefault ({ # Screenshot keybinds
      "Print" =
        "exec grim - | wl-copy && wl-paste > ${screenshotPath}"; # Take screenshot of whole screen, save it, and copy it to clipboard
      "Shift+Print" = ''
        exec swaymsg -t get_tree | jq -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | grim -g - | wl-copy && wl-paste > ${screenshotPath}''; # Take screenshot of current window, save it, and copy it to clipboard
      "Ctrl+Print" =
        "exec bash ${dynscreenshot} ${screenshotPath}"; # Take screenshot of selection, save it, and copy it to clipboard
    } // rec { # Function Media Keys
      XF86MonBrightnessUp = "exec bash ${changebrightness} 1";
      XF86MonBrightnessDown = "exec bash ${changebrightness} -1";
      XF86AudioMute = "exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
      "${mod}+XF86AudioMute" =
        "exec wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
      XF86AudioRaiseVolume = "exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+";
      XF86AudioLowerVolume = "exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-";
      "${mod}+XF86AudioRaiseVolume" =
        "exec wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 0.05+";
      "${mod}+XF86AudioLowerVolume" =
        "exec wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 0.05-";
      "${mod}+Shift+e" = null;
      XF86AudioMedia =
        "dunstctl set-paused toggle; dunstify -a 'dunst_mute_key' -u low -h string:x-dunst-stack-tag:dunst_mute_key  'Notifications mute toggled'";
      XF86PowerOff =
        "exec DMENU_COMMAND='${dmenuCommand}' bash ${shutdownMenu}";
      "${mod}+Pause" = XF86PowerOff;
    } // {
      "${mod}+space" = ''input "*" xkb_switch_layout next'';
    } // { });
    menu = "j4-dmenu-desktop --no-generic --term=${
        pkgs.lib.getExe inputs.terminal
      } --dmenu='${dmenuCommand}'";
    focus.followMouse = false;
  };
  extraConfig = ''
    output 'eDP-1' scale 1.50
  '' + # Fractional scaling to 1.50
    ''
      exec gammastep-indicator
    '' + # gammastep-indicator enables red shift
    ''
      exec dunst
    '' + # Enable notifications
    ''
      bindgesture swipe:4:up focus parent
      bindgesture swipe:4:left workspace prev
      bindgesture swipe:4:right workspace next
      bindgesture swipe:3:up focus up
      bindgesture swipe:3:down focus down
      bindgesture swipe:3:left focus left
      bindgesture swipe:3:right focus right
    '' + # Multi-touch touchpad gestures
    ''
      exec swaybg -i ${backgroundImage}
    '' + # Background image
    ''
      focus_on_window_activation focus
    '' + # Focus on window activation lol
    ''
      set $laptop eDP-1
      bindswitch --reload --locked lid:on output $laptop disable
      bindswitch --reload --locked lid:off output $laptop enable
    '' + # Clamshell mode
    "";
}
