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

with lib;
let
  cfg = config.my.programs.sway;
in
{
  options.my.programs.sway.enable = mkEnableOption "sway";

  config = lib.mkIf cfg.enable {
    hardware.opengl = {
      enable = true;
      driSupport = true;
    };
    environment.loginShellInit = ''
      if [ -z $DISPLAY ] && [ "$(tty)" = "/dev/tty1" ]; then
        exec sway
      fi
    '';
    home-manager.users.moritz = {
      home.packages = with pkgs; [ wl-clipboard wofi waybar feh ];
      programs.waybar = {
        enable = true;
        systemd.enable = true;
        settings = {
          mainBar = {
            layer = "top";
            position = "top";
            height = 30;
            output = [ "eDP-1" "HDMI-A-1" ];
            modules-left = [ "sway/workspaces" "sway/mode" "wlr/taskbar" ];
            modules-center = [ "sway/window" "custom/hello-from-waybar" ];
            modules-right = [ "mpd" "custom/mymodule#with-css-id" "temperature" ];
            "sway/workspaces" = { all-outputs = true; };
          };
        };
      };
      wayland.windowManager.sway = {
        enable = true;
        config = {
          input = {
            "*" = { xkb_layout = "de"; };
            "type:touchpad" = {
              natural_scroll = "enabled";
              middle_emulation = "enabled";
            };
          };
          terminal = "kitty";
          menu = "wofi --show drun";
          modifier = "Mod4";
          gaps = {
            inner = 5;
            outer = 3;
            smartBorders = "on";
          };
          bars = [ ];
          keybindings = lib.mkOptionDefault {
            inherit
              (config.home-manager.users.moritz.wayland.windowManager.sway.config)
              modifier
              ;
            "${modifier}+f" = "firefox";
            "${modifier}+e" = "emacsclient -c -a emacs";
          };
          startup = [
            {
              command = "systemctl --user restart waybar";
              always = true;
            }
            { command = "wallpaper -r"; }
          ];
        };
      };
    };
  };
}
