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

with lib;

let
  modifier = "Mod4";
in
{
  options.features.desktop.i3.enable = mkEnableOption "Enable i3";

  config = mkIf config.features.desktop.i3.enable {
    services = {
      displayManager.ly.enable = true;

      xserver.windowManager.i3 = {
        enable = true;

        extraPackages = with pkgs; [
          i3status
          i3lock
          i3blocks
        ];
      };
    };

    home-manager.users.${username} = {
      xsession.windowManager.i3 = {
        enable = true;

        config = {
          assigns = {
            "7" = [ { class = "vlc"; } ];
            "8" = [ { class = "0ad"; } ];
            "9" = [
              { class = "Slack"; }
              { class = "discord"; }
            ];
          };

          defaultWorkspace = "workspace number 1";

          modifier = modifier;

          keybindings = inputs.nixpkgs.lib.mkOptionDefault {
            "${modifier}+d" = "exec rofi -show drun";

            "${modifier}+Shift+b" = "exec ${pkgs.brave}/bin/brave";
            "${modifier}+Shift+f" = "exec ${pkgs.xfce.thunar}/bin/thunar";

            # Change focus.
            "${modifier}+h" = "focus left";
            "${modifier}+j" = "focus down";
            "${modifier}+k" = "focus up";
            "${modifier}+l" = "focus right";

            # Move focused window.
            "${modifier}+Shift+h" = "move left";
            "${modifier}+Shift+j" = "move down";
            "${modifier}+Shift+k" = "move up";
            "${modifier}+Shift+l" = "move right";

            "${modifier}+Shift+s" = "exec ${pkgs.flameshot}/bin/flameshot gui";
            "${modifier}+Shift+p" = "exec ${pkgs.autorandr}/bin/autorandr --change";
            "${modifier}+Shift+y" = "exec ${pkgs.copyq}/bin/copyq toggle";

            "XF86AudioRaiseVolume" = "exec pamixer -ui 2 && pamixer --get-volume";
            "XF86AudioLowerVolume" = "exec pamixer -ud 2 && pamixer --get-volume";
            "XF86AudioMute" =
              ''exec pamixer --toggle-mute && ( [ "$(pamixer --get-mute)" = "true" ] && echo 0'';

            "XF86MonBrightnessDown" = "exec brightnessctl set 5%- | sed -En 's/.*(([0-9]+)%).*/1/p'";
            "XF86MonBrightnessUp" = "exec brightnessctl set +5% | sed -En 's/.*(([0-9]+)%).*/1/p'";
          };

          terminal = "alacritty";
        };

        extraConfig = ''
          set $laptop eDP-1
          bindswitch --reload --locked lid:on output $laptop disable
          bindswitch --reload --locked lid:off output $laptop enable

          exec_always --no-startup-id caffeine
          exec_always --no-startup-id ${pkgs.autorandr}/bin/autorandr --change
          exec_always --no-startup-id ${pkgs.i3-battery-popup}/bin/i3-battery-popup -n

          smart_borders on
          smart_gaps on

          for_window [class="copyq"] floating enable
          for_window [class="zoom"] floating enable
          # xprop | grep -i class
        '';

        config = {
          bars = [
            {
              position = "bottom";
              statusCommand = "${pkgs.i3status}/bin/i3status";
              trayOutput = "none";
            }
          ];

          gaps = {
            smartBorders = "on";
            smartGaps = true;
          };
        };
      };

      programs.i3status = {
        enable = true;

        general.colors = false;

        modules = {
          "battery all".settings.last_full_capacity = true;

          "tztime local".settings.format = "%d-%m-%Y %H:%M:%S";
          cpu_temperature.enable = false;
          ipv6.enable = false;
          load.enable = false;
        };
      };

      services.dunst = {
        enable = true;

        settings.global.follow = "keyboard";
      };
    };
  };
}