{
  config,
  lib,
  pkgs,
  ...
}: let
  mod = "Mod4";
  hyper = "Control+Shift+Mod1";
in {
  home.file = {
    "bin/scripts/goup" = {
      source = ./goup;
      executable = true;
    };
    "bin/scripts/godown" = {
      source = ./godown;
      executable = true;
    };
    "bin/scripts/flower" = {
      source = ./flower;
      executable = true;
    };
  };
  xsession = {
    enable = true;

    windowManager.i3 = {
      enable = true;
      package = pkgs.i3-gaps;
      config = {
        bars = [
          {
            colors = {
              background = "#282A36";
              statusline = "#F8F8F2";
              separator = "#44475A";

              activeWorkspace = {
                border = "#282A36";
                background = "#44475A";
                text = "#F8F8F2";
              };
              focusedWorkspace = {
                border = "#44475A";
                background = "#44475A";
                text = "#F8F8F2";
              };
              inactiveWorkspace = {
                border = "#282A36";
                background = "#282A36";
                text = "#BFBFBF";
              };
              urgentWorkspace = {
                border = "#FF5555";
                background = "#FF5555";
                text = "#F8F8F2";
              };
              bindingMode = {
                border = "#FF5555";
                background = "#FF5555";
                text = "#F8F8F2";
              };
            };
            fonts = {
              size = 11.0;
            };
            statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs /home/daniel/.config/i3status-rust/config-main.toml";
            position = "top";
          }
        ];
        colors = {
          focused = {
            border = "#6272A4";
            background = "#6272A4";
            text = "#F8F8F2";
            indicator = "#6272A4";
            childBorder = "#6272A4";
          };
          focusedInactive = {
            border = "#44475A";
            background = "#44475A";
            text = "#F8F8F2";
            indicator = "#44475A";
            childBorder = "#44475A";
          };
          unfocused = {
            border = "#282A36";
            background = "#282A36";
            text = "#BFBFBF";
            indicator = "#282A36";
            childBorder = "#282A36";
          };
          urgent = {
            border = "#44475A";
            background = "#FF5555";
            text = "#F8F8F2";
            indicator = "#FF5555";
            childBorder = "#FF5555";
          };
          placeholder = {
            border = "#282A36";
            background = "#282A36";
            text = "#F8F8F2";
            indicator = "#282A36";
            childBorder = "#282A36";
          };
          background = "#F8F8F2";
        };

        defaultWorkspace = "workspace number 1";

        floating = {
          modifier = mod;
          criteria = [
            {instance = "pavucontrol";}
          ];
        };

        focus = {
          followMouse = false;
        };

        fonts = {
          names = ["pango:monospace 8"];
          style = "monospace";
          size = 8.0;
        };

        gaps = {
          outer = lib.mkDefault 10;
          inner = lib.mkDefault 5;
          smartBorders = "on";
        };

        keybindings = lib.mkOptionDefault {
          "${hyper}+Return" = "exec kitty";
          "${mod}+q" = "kill";
          "${mod}+d" = "exec rofi -show drun";
          "${hyper}+q" = "kill";
          "${hyper}+d" = "exec rofi -show drun";

          "${mod}+h" = "focus left";
          "${mod}+j" = "focus down";
          "${mod}+k" = "focus up";
          "${mod}+l" = "focus right";
          "${hyper}+h" = "focus left";
          "${hyper}+j" = "focus down";
          "${hyper}+k" = "focus up";
          "${hyper}+l" = "focus right";

          "${mod}+Shift+h" = "move left";
          "${mod}+Shift+l" = "move right";

          "${hyper}+y" = "move left";
          "${hyper}+o" = "move right";

          "${mod}+Tab" = "workspace back_and_forth";
          "${hyper}+Tab" = "workspace back_and_forth";

          "${mod}+b" = "split h";
          "${mod}+v" = "split v";

          "${hyper}+b" = "split h";
          "${hyper}+v" = "split v";

          "${mod}+Control+Return" = "exec --no-startup-id i3utils workspace new";
          "${mod}+Control+Shift+Return" = "exec --no-startup-id i3utils workspace new -b";
          "${mod}+Shift+Return" = "exec --no-startup-id i3utils workspace new -n, move next";

          "${mod}+Control+j" = "exec --no-startup-id $HOME/bin/scripts/godown";
          "${mod}+Control+k" = "exec --no-startup-id $HOME/bin/scripts/goup";
          "${mod}+Control+u" = "exec --no-startup-id $HOME/bin/scripts/godown";
          "${mod}+Control+i" = "exec --no-startup-id $HOME/bin/scripts/goup";
          "${mod}+Control+h" = "exec --no-startup-id i3utils workspace new -b";

          "${hyper}+m" = "exec --no-startup-id $HOME/bin/scripts/godown";
          "${hyper}+comma" = "exec --no-startup-id $HOME/bin/scripts/goup";

          "${mod}+Shift+k" = "exec --no-startup-id i3utils window move prev";
          "${mod}+Shift+j" = "exec --no-startup-id i3utils window move next";

          "${hyper}+i" = "exec --no-startup-id i3utils window move prev";
          "${hyper}+u" = "exec --no-startup-id i3utils window move next";

          "${mod}+p" = "scratchpad show, resize set 80 ppt 80ppt, move position center";
          "${hyper}+p" = "scratchpad show, resize set 80 ppt 80ppt, move position center";

          "${mod}+Escape" = "exec loginctl lock-session";
          "${hyper}+Escape" = "exec loginctl lock-session";

          "${hyper}+f" = "fullscreen toggle";

          "XF86MonBrightnessUp" = "exec xbacklight -inc 10";
          "XF86MonBrightnessDown" = "exec xbacklight -dec 10";
          "XF86AudioMute" = "exec pamixer -t";
          "XF86AudioLowerVolume" = "exec pamixer -d 5";
          "XF86AudioRaiseVolume" = "exec pamixer -i 5";
          "XF86AudioPrev" = "exec playerctl previous";
          "XF86AudioPlay" = "exec playerctl play-pause";
          "XF86AudioNext" = "exec playerctl next";

          "Mod1+Shift+4" = "exec flameshot gui -s -p ~/Pictures/screenshots";
        };

        modifier = mod;

        startup = [
          {
            command = "$HOME/bin/scripts/flower";
            always = true;
          }
          {
            command = "feh --bg-fill $HOME/wallpapers/wallpaper.jpg";
            always = false;
          }
        ];

        terminal = "kitty";

        window = {
          border = lib.mkDefault 2;
          titlebar = false;
          commands = [
            {
              command = "move position center #2116 46";
              criteria = {class = "jetbrains-toolbox";};
            }
            {
              command = "move scratchpad";
              criteria = {
                instance = "spotify";
                window_type = "normal";
              };
            }
          ];
        };
      };
    };
  };
}
