{ pkgs, config, ... }: {

  # User packages
  users.users.agatha.packages = with pkgs; [ grim rofi-wayland waybar ydotool ];

  home-manager.users.agatha = {
    wayland.windowManager.sway = let
      cfg = config.home-manager.users.agatha.wayland.windowManager.sway.config;
    in {
      enable = true;
      config = {
        up = "i";
        left = "j";
        down = "k";
        right = "l";

        modifier = "Mod4";
        terminal = "kitty";

        fonts = {
          names = [ "Font Awesome 5 Free" "Iosevka Gothic" ];
          size = 11.0;
        };

        workspaceAutoBackAndForth = true;
        window = {
          titlebar = true;
          hideEdgeBorders = "both";
          border = 0;
        };

        gaps.inner = 15;

        output."*" = { bg = "/home/agatha/Pictures/wallpaper.png fill"; };

        input."type:keyboard" = {
          xkb_layout = config.services.xserver.layout;
          xkb_options = config.services.xserver.xkbOptions;
        };

        input."type:touchpad" = { tap = "enabled"; };

        keybindings = let mod = cfg.modifier;
        in {
          "${mod}+Return" = "exec ${cfg.terminal}";
          "Caps_Lock" = "exec ${cfg.terminal}";
          "${mod}+e" = "exec nautilus";
          "${mod}+space" = "exec rofi -show drun";
          "${mod}+shift+e" = "exec rofimoji --action clipboard";
          "${mod}+c" = ''
            exec rofi -show calc -modi calc -calc-command 'xdotool type --clearmodifiers "\{result\}"'
          '';
          XF86AudioRaiseVolume = "exec pamixer -i 5";
          XF86AudioLowerVolume = "exec pamixer -d 5";
          XF86AudioMute = "exec pamixer -t";
          XF86AudioPrev = "exec playerctl previous";
          XF86AudioNext = "exec playerctl next";
          XF86AudioPlay = "exec playerctl play-pause";
          Print = "exec flameshot gui";
          "shift+Print" = "exec flameshot gui -d 3000";
          "${mod}+n" = "exec dunstctl set-paused toggle";
          # "${mod}+o" = "TODO: port audio switcher";
          "${mod}+shift+r" =
            "reload; exec 'for p in waybar dunst; do; killall $p; done'";
          "${mod}+w" = "kill";
          "${mod}+m" = "layout tabbed";
          "${mod}+t" = "layout toggle split";
          "${mod}+s" = "floating toggle";
          "${mod}+f" = "fullscreen toggle";

          "alt+Tab" = "exec rofi -show window";

          # "${mod}+x" = "TODO: lockscreen";

          "${mod}+Shift+${cfg.left}" = "move left";
          "${mod}+Shift+${cfg.down}" = "move down";
          "${mod}+Shift+${cfg.up}" = "move up";
          "${mod}+Shift+${cfg.right}" = "move right";

          "${mod}+1" = "workspace number 1";
          "${mod}+2" = "workspace number 2";
          "${mod}+3" = "workspace number 3";
          "${mod}+4" = "workspace number 4";
          "${mod}+5" = "workspace number 5";
          "${mod}+6" = "workspace number 6";
          "${mod}+7" = "workspace number 7";
          "${mod}+8" = "workspace number 8";
          "${mod}+9" = "workspace number 9";

          "${mod}+Shift+1" = "move container to workspace number 1";
          "${mod}+Shift+2" = "move container to workspace number 2";
          "${mod}+Shift+3" = "move container to workspace number 3";
          "${mod}+Shift+4" = "move container to workspace number 4";
          "${mod}+Shift+5" = "move container to workspace number 5";
          "${mod}+Shift+6" = "move container to workspace number 6";
          "${mod}+Shift+7" = "move container to workspace number 7";
          "${mod}+Shift+8" = "move container to workspace number 8";
          "${mod}+Shift+9" = "move container to workspace number 9";
        };
      };
    };
  };
}
