{ pkgs, lib, config, ... }@inputs:
let
  rofi = pkgs.rofi.override { plugins = [ pkgs.rofi-emoji ]; };
  scripts = ((import ./scripts.nix) inputs);
in
{
  imports = [ ./swayidle.nix ];
  wayland.windowManager.sway = rec {
    enable = true;
    config = {
      terminal = "alacritty";
      menu = "${rofi}/bin/rofi -show combi";
      modifier = "Mod4";
      output = {
        "*" = {
          bg = "${./wallpaper.png} fill";
        };
      };
      input = {
        "*" = {
          xkb_layout = "pl";
          accel_profile = "flat";
          dwt = "disabled";
          pointer_accel = "0.0";
        };
      };
      bars = [{
        position = "top";
        command = "${pkgs.waybar}/bin/waybar";
      }];
      floating.criteria = [{ title = "Steam - Update News"; }];
      startup = [
        # Copied from https://git.sr.ht/~sumner/home-manager-config/tree/master/item/modules/window-manager/wayland.nix#L64
        # See https://github.com/nix-community/home-manager/issues/2028
        # Make all the pinentry stuff work
        # See: https://github.com/NixOS/nixpkgs/issues/119445#issuecomment-820507505
        # and: https://github.com/NixOS/nixpkgs/issues/57602#issuecomment-820512097
        { command = "dbus-update-activation-environment WAYLAND_DISPLAY"; }
      ];
      keybindings = lib.mkOptionDefault {
        "XF86PowerOff" = "exec systemctl suspend";
      };
    };
    wrapperFeatures.gtk = true;
    systemdIntegration = true;
    extraSessionCommands = ''
      #export SDL_VIDEODRIVER=wayland
      # needs qt5.qtwayland in systemPackages
      export QT_QPA_PLATFORM=wayland
      export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
      # Fix for some Java AWT applications (e.g. Android Studio),
      # use this if they aren't displayed properly:
      export _JAVA_AWT_WM_NONREPARENTING=1
    '';
  };
  programs.waybar = {
    enable = true;
    settings = {
      mainBar = {
        layer = "top";
        position = "top";
        modules-left = [ "sway/workspaces" "sway/mode" ];
        modules-center = [ ];
        modules-right = [ "custom/riley-gender" "disk" "battery" "backlight" "pulseaudio" "clock" "tray" ];
        "custom/riley-gender" = {
          interval = "360";
          exec = pkgs.writeShellScript "riley-gender" ''
            set -euo pipefail
            until ping -c1 google.com >/dev/null 2>&1; do :; done
            gender="$(${pkgs.curl}/bin/curl 'https://rly.cx/api/gender')"
            pronouns="$(${pkgs.curl}/bin/curl 'https://rly.cx/api/pronouns')"
            echo -n "Riley: $gender ($pronouns)"
          '';
        };
        backlight = {
          on-scroll-up = "${pkgs.brightnessctl}/bin/brightnessctl s +1%";
          on-scroll-down = "${pkgs.brightnessctl}/bin/brightnessctl s 1%- -n 1";
        };
        clock = {
          format = "{:%a %d %b %H:%M}";
        };
        disk = {
          format = "{percentage_free}%({free})";
        };
        pulseaudio = {
          on-click-right = "${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle";
        };
      };
    };
    style = ./waybar.css;
  };

  programs.rofi = {
    enable = true;
    package = rofi;
    theme = "purple";
    extraConfig = {
      modi = "combi";
      combi-modi = "drun,emoji";
    };
  };

  programs.mako = {
    enable = true;
    defaultTimeout = 2000;
  };

  home.packages = [ scripts.lockscreen ];
}