{ pkgs, ... }:
let
modifier = "Mod4";
terminal = "alacritty";
in {
  
  home.sessionVariables = {
    MOZ_ENABLE_WAYLAND = "1";
    MOZ_USE_XINPUT2 = "1";
  };

  home.packages = with pkgs; [ swayidle wl-clipboard wlroots ];

  wayland.windowManager.sway = {
    enable = true;
    wrapperFeatures.gtk = true;
    config = {
      inherit modifier terminal;
      menu = "wofi --show drun";

      fonts = {
        names = [ "UbuntuMono" ];
        style = "Medium";
        size = 11.0;
      };

      bars = [{ command = "waybar"; }];

      window.border = 1;
      gaps = {
        inner = 10;
        outer = 5;
      };
      colors = {
        unfocused.border      = "#333333";
        unfocused.background  = "#000000a0";
        unfocused.text        = "#a0a0a0";
        unfocused.indicator   = "#2d292e";
        unfocused.childBorder = "#333333";
        
        focused.border      = "#808080";
        focused.background  = "#000000";
        focused.text        = "#ffffff";
        focused.indicator   = "#2d292e";
        focused.childBorder = "#ffffff";
        
        focusedInactive.border      = "#333333";
        focusedInactive.background  = "#000000";
        focusedInactive.text        = "#ffffff";
        focusedInactive.indicator   = "#4e4850";
        focusedInactive.childBorder = "#333333";
        
        urgent.border      = "#000000";
        urgent.background  = "#900000";
        urgent.text        = "#ffffff";
        urgent.indicator   = "#900000";
        urgent.childBorder = "#000000";
      };
      
      startup = map (x: { command = x; }) [
        ''~/.azotebg''
        # Make wob channels
        ''mkfifo $SWAYSOCK.volume.wob && tail -f $SWAYSOCK.volume.wob | wob''
        ''mkfifo $SWAYSOCK.brightness.wob && tail -f $SWAYSOCK.brightness.wob | wob \
                   --border-color "#FFFF00FF" --bar-color "#FFFF00FF"''
        ''swayidle timeout 120 'swaylock -f --grace=180' \
                   timeout 600 'systemctl suspend' \
                   before-sleep 'swaylock -f' ''
        ''export XDG_SESSION_TYPE=wayland''
        ''export XDG_CURRENT_DESKTOP=sway''
      ];

      keybindings = let
        # Volume using pamixer and wob
        audio-disp = ''pamixer --get-volume > $SWAYSOCK.volume.wob'';
        audio      = cmd: "exec pamixer ${cmd} && ${audio-disp}";
        # Brightness using brightnessctl and wob
        brightness-disp = ''brightnessctl -m | cut -d "," -f4 | tr -d "%" > $SWAYSOCK.brightness.wob'';
        brightness      = x: "exec brightnessctl set ${x} && ${brightness-disp}";
        # Play controls using playerctl
        playerctl = cmd: "exec playerctl ${cmd}";
        # Grim screenshot file name
        filename = ''~/Pictures/$(date +%Y-%m-%d_%H-%m-%s).png'';
        in pkgs.lib.mkOptionDefault {
          "${modifier}+Shift+d" = ''exec wofi --show run'';
          "${modifier}+Shift+l" = ''exec swaylock --grace=30'';

          # Screenshot
          "Print"             = ''exec grim ${filename}'';
          "Shift+Print"       = ''exec grim -g "$(slurp)" ${filename}'';
          "${modifier}+Print" = ''exec grim -g "$(swaymsg -t get_tree | jq -j '.. | select(.type?) | select(.focused).rect | "\(.x),\(.y) \(.width)x\(.height)"')" ${filename}'';

          # Special XF86 key bindings
          "XF86AudioRaiseVolume"       = audio "-ui 2";
          "XF86AudioLowerVolume"       = audio "-ud 2";
          "Shift+XF86AudioRaiseVolume" = audio "-ui 2 --allow-boost";
          "Shift+XF86AudioLowerVolume" = audio "-ud 2 --allow-boost";
          "XF86AudioMute"              = ''exec pamixer --toggle-mute'';
          "XF86AudioMicMute"           = ''exec pactl set-source-mute @DEFAULT_SOURCE@ toggle'';
          "XF86MonBrightnessDown"      = brightness "4%-";
          "XF86MonBrightnessUp"        = brightness "+4%";
          "XF86AudioPlay"              = playerctl "play-pause";
          "XF86AudioNext"              = playerctl "next";
          "XF86AudioPrev"              = playerctl "previous";

          # Exit
          "${modifier}+Shift+e" = ''exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit' '';
      };

       output."*" = {
         bg = "${../../../assets/background.png} fill";
       };
    };
  };
}
