{
  pkgs,
  lib,
  config,
  ...
}: {
  programs.wofi.enable = true;
  programs.swaylock.enable = true;

  wayland.windowManager.sway = {
    enable = true;
    systemd = {
      enable = true;
    };
    wrapperFeatures = {
      base = true;
      gtk = true;
    };
    config = {
      modes = {
        resize = {
          Down = "resize grow height 10 px";
          Escape = "mode default";
          Left = "resize shrink width 10 px";
          Return = "mode default";
          Right = "resize grow width 10 px";
          Up = "resize shrink height 10 px";
          h = "resize shrink width 10 px";
          j = "resize grow height 10 px";
          k = "resize shrink height 10 px";
          l = "resize grow width 10 px";
        };
      };
      terminal = "kitty";
      output = {
        "*" = {
          bg = "${../xmonad/wallpaper/wallpaper.jpg} fill";
        };
      };
      input = {
        "*" = {
          xkb_layout = "us";
          xkb_variant = "altgr-intl";
        };
      };
      menu = "wofi -d";
      modifier = "Mod4";
      keybindings = with {
        #mod = config.xsession.windowManager.i3.config.modifier;
        # mod = "Mod1";
        mod = config.wayland.windowManager.sway.config.modifier;
      };
        lib.mkOptionDefault {
          # switch window focus
          "${mod}+h" = "focus left";
          "${mod}+j" = "focus down";
          "${mod}+k" = "focus up";
          "${mod}+l" = "focus right";
          # move windows
          "${mod}+Shift+h" = "move left";
          "${mod}+Shift+j" = "move down";
          "${mod}+Shift+k" = "move up";
          "${mod}+Shift+l" = "move right";
          # layout shit
          "${mod}+shift+semicolon" = "split h";
          "${mod}+semicolon" = "split v";
          "${mod}+f" = "fullscreen toggle";
          "${mod}+Shift+w" = "layout tabbed";
          "${mod}+e" = "layout toggle split";
          "${mod}+Shift+space" = "floating toggle";
          # focus parents/children
          # "${mod}+Shift+a" = "focus parent";
          # "${mod}+Shift+c" = "focus child";
          # screenshot
          # "${mod}+w" = "exec window-screenshot.sh";
          # "${mod}+s" = "exec flameshot gui -c -p $HOME/Pictures/screenshots";
          # "${mod}+a" = "exec flameshot screen -c -p $HOME/Pictures/screenshots";
          # "${mod}+t" = "exec ocr-screenshot.sh";

          # rofi fuckery
          "${mod}+d" = "exec wofi -S drun --allow-images";
          "${mod}+i" = "exec rofimoji --selector wofi -f alchemical_symbols anatolian_hieroglyphs emojis braille_patterns box_drawing chess_symbols emoticons geometric_shapes gothic greek_extended math mathematical_alphanumeric_symbols mathematical_operators miscellaneous_symbols miscellaneous_mathematical_symbols-a miscellaneous_mathematical_symbols-b miscellaneous_symbols_and_arrows miscellaneous_symbols_and_pictographs miscellaneous_technical modi modifier_tone_letters musical_symbols nerd_font number_forms shorthand_format_controls specials variation_selectors vertical_forms -a copy";
          # TODO: wayland
          # "${mod}+d" = "exec --no-startup-id rofi -show drun -theme ${../../other/rofi-themes/applauncher.rasi}";
          # "${mod}+space" = "exec --no-startup-id rofi -show combi -combi-show window#run -modes combi -theme ${../../other/rofi-themes/applauncher.rasi}";
          # "${mod}+i" = "exec --no-startup-id rofimoji -f alchemical_symbols anatolian_hieroglyphs emojis braille_patterns box_drawing chess_symbols emoticons geometric_shapes gothic greek_extended math mathematical_alphanumeric_symbols mathematical_operators miscellaneous_symbols miscellaneous_mathematical_symbols-a miscellaneous_mathematical_symbols-b miscellaneous_symbols_and_arrows miscellaneous_symbols_and_pictographs miscellaneous_technical modi modifier_tone_letters musical_symbols nerd_font number_forms shorthand_format_controls specials variation_selectors vertical_forms -a copy";
          # "${mod}+Shift+e" = "exec --no-startup-id rofi -show \"desktopctl\" -modes \"desktopctl:${desktop-ctl.outPath}/bin/desktopctl\" -theme ${../../other/rofi-themes/applauncher.rasi}";
          # "${mod}+m" = "exec --no-startup-id menu-qalc";

          # "${mod}+o" = "exec --no-startup-id rofi -show searchwolf -modes \"searchwolf:${searchwolf.outPath}/bin/searchwolf\"";

          # audio
          "XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status";
          "XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status";
          "XF86AudioMute" = "exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status";
          "XF86AudioMicMute" = "exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status";

          "XF86AudioNext" = "exec playerctl next";
          "XF86AudioPrev" = "exec playerctl previous";
          "XF86AudioPause" = "exec playerctl pause";
          "XF86AudioPlay" = "exec playerctl play";
          "XF86AudioStop" = "exec playerctl stop";

          "XF86MonBrightnessUp" = "exec brightnessctl set 5%+";
          "XF86MonBrightnessDown" = "exec brightnessctl set 5%-";

          "XF86KbdBrightnessUp" = "exec brillo -kA 10.0";
          "XF86KbdBrightnessDown" = "exec brillo -kU 10.0";

          # macros
          # "${mod}+q" = "exec em-record.sh";
          # "${mod}+p" = "exec em-play.sh";
          # "${mod}+Shift+p" = "exec em-play-loop.sh";

          # permaclip
          # "${mod}+c" = "exec rofi -show register -modes \"register:${pc-set.outPath}/bin/pc-set.sh\" -theme gruvbox-dark";
          # "${mod}+v" = "exec rofi -show register -modes \"register:${pc-get.outPath}/bin/pc-get.sh\" -theme gruvbox-dark";
        };
      fonts = {
        names = ["Atkinson Hyperlegible"];
        style = "Regular";
        size = 9.0;
      };
      gaps = {
        #top = 24;
        inner = 15;
        outer = 0;
        smartGaps = true;
        smartBorders = "on";
      };
      colors = {
        background = "#1d2021";
        focused = {
          background = "#282828";
          border = "#504945";
          childBorder = "#7c6f64";
          indicator = "#504945";
          text = "#ebdbb2";
        };
        focusedInactive = {
          background = "#1d2021";
          border = "#504945";
          childBorder = "#665c54";
          indicator = "#664c54";
          text = "#d5c4a1";
        };
        placeholder = {
          background = "#1d2021";
          border = "#00ff00";
          childBorder = "#504945";
          indicator = "#504945";
          text = "#928374";
        };
        unfocused = {
          background = "#1d2021";
          border = "#3c3836";
          childBorder = "#504945";
          indicator = "#504945";
          text = "#bdae93";
        };
        urgent = {
          background = "#9d0006";
          border = "#cc241d";
          childBorder = "#3c3836";
          indicator = "#fb4943";
          text = "#ebdbb2";
        };
      };

      window = {
        border = 2;
        titlebar = true;
      };
    };
  };
}
