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

let
	mod = "Mod4";
in {
	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 {
					"${mod}+q" = "kill";
					"${mod}+d" = "exec rofi -show drun";

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

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

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

					"${mod}+b" = "split h";
					"${mod}+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+h" = "exec --no-startup-id i3utils workspace new -b";

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

					"${mod}+p" = "scratchpad show";
					"${mod}+Escape" = "exec i3lock -i /home/daniel/wallpapers/lock.png";
					"${mod}+Shift+Escape" = "exec i3lock -i /home/daniel/wallpapers/lock.png && systemctl suspend";
				};

				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"; }; }
					];
				};

			};
		};
	};
}
