Setup some basic WM stuff

- Standard image background
- Polybar
- A standard XMonad config
- Picom
diff --git a/patches/picom-next/max_fade.patch b/patches/picom-next/max_fade.patch
new file mode 100644
index 0000000..0745dd0
--- /dev/null
+++ b/patches/picom-next/max_fade.patch
@@ -0,0 +1,105 @@
+diff --git a/src/config.c b/src/config.c
+index d9b2dd9..0eb49de 100644
+--- a/src/config.c
++++ b/src/config.c
+@@ -755,6 +755,7 @@ char *parse_config(options_t *opt, const char *config_file, bool *shadow_enable,
+ 	    .fade_in_step = 0.028,
+ 	    .fade_out_step = 0.03,
+ 	    .fade_delta = 10,
++	    .no_fading_larger_than = 0,
+ 	    .no_fading_openclose = false,
+ 	    .no_fading_destroyed_argb = false,
+ 	    .fade_blacklist = NULL,
+diff --git a/src/config.h b/src/config.h
+index 7259dc1..a555be7 100644
+--- a/src/config.h
++++ b/src/config.h
+@@ -165,6 +165,8 @@ typedef struct options {
+ 	double fade_out_step;
+ 	/// Fading time delta. In milliseconds.
+ 	int fade_delta;
++	/// The maximum opacity change to fade on.
++	double no_fading_larger_than;
+ 	/// Whether to disable fading on window open/close.
+ 	bool no_fading_openclose;
+ 	/// Whether to disable fading on ARGB managed destroyed windows.
+diff --git a/src/config_libconfig.c b/src/config_libconfig.c
+index 461fff3..1e008c2 100644
+--- a/src/config_libconfig.c
++++ b/src/config_libconfig.c
+@@ -351,6 +351,8 @@ char *parse_config_libconfig(options_t *opt, const char *config_file, bool *shad
+ 	// -f (fading_enable)
+ 	if (config_lookup_bool(&cfg, "fading", &ival))
+ 		*fading_enable = ival;
++	// --no-fading-larger-than
++	config_lookup_float(&cfg, "no-fading-larger-than", &opt->no_fading_larger_than);
+ 	// --no-fading-open-close
+ 	lcfg_lookup_bool(&cfg, "no-fading-openclose", &opt->no_fading_openclose);
+ 	// --no-fading-destroyed-argb
+diff --git a/src/dbus.c b/src/dbus.c
+index 8b17b30..59d527e 100644
+--- a/src/dbus.c
++++ b/src/dbus.c
+@@ -1289,6 +1289,15 @@ static bool cdbus_process_opts_set(session_t *ps, DBusMessage *msg) {
+ 		goto cdbus_process_opts_set_success;
+ 	}
+ 
++	// no_fading_larger_than
++	if (!strcmp("no_fading_larger_than", target)) {
++		double val = 0.0;
++		if (!cdbus_msg_get_arg(msg, 1, DBUS_TYPE_DOUBLE, &val))
++			return false;
++		ps->o.no_fading_larger_than = normalize_d(val);
++		goto cdbus_process_opts_set_success;
++	}
++
+ 	// no_fading_openclose
+ 	if (!strcmp("no_fading_openclose", target)) {
+ 		dbus_bool_t val = FALSE;
+diff --git a/src/options.c b/src/options.c
+index ba7485d..69e1a40 100644
+--- a/src/options.c
++++ b/src/options.c
+@@ -175,6 +175,7 @@ static const struct picom_option picom_options[] = {
+                                                                              "you want to attach a debugger to picom"},
+     {"no-ewmh-fullscreen"          , no_argument      , 803, NULL          , "Do not use EWMH to detect fullscreen windows. Reverts to checking if a "
+                                                                              "window is fullscreen based only on its size and coordinates."},
++    {"no-fading-larger-than"       , required_argument, 804, NULL          , "do not fade when the opacity difference would be larger than this value"},
+ };
+ // clang-format on
+ 
+@@ -402,6 +403,7 @@ bool get_cfg(options_t *opt, int argc, char *const *argv, bool shadow_enable,
+ 			// These options are handled by get_early_config()
+ 			break;
+ 		P_CASEINT('D', fade_delta);
++		case 804: opt->no_fading_larger_than = normalize_d(atof(optarg)); break;
+ 		case 'I': opt->fade_in_step = normalize_d(atof(optarg)); break;
+ 		case 'O': opt->fade_out_step = normalize_d(atof(optarg)); break;
+ 		case 'c': shadow_enable = true; break;
+diff --git a/src/picom.c b/src/picom.c
+index fd693fc..1a475c5 100644
+--- a/src/picom.c
++++ b/src/picom.c
+@@ -992,7 +992,6 @@ void force_repaint(session_t *ps) {
+ /** @name DBus hooks
+  */
+ ///@{
+-
+ /**
+  * Set no_fading_openclose option.
+  *
+diff --git a/src/win.c b/src/win.c
+index 370fbfd..baea80b 100644
+--- a/src/win.c
++++ b/src/win.c
+@@ -864,6 +864,10 @@ bool win_should_fade(session_t *ps, const struct managed_win *w) {
+ 	if (w->fade_force != UNSET) {
+ 		return w->fade_force;
+ 	}
++	if (ps->o.no_fading_larger_than &&
++	    ps->o.no_fading_larger_than < fabs(w->opacity - w->opacity_target)) {
++		return false;
++	}
+ 	if (ps->o.no_fading_openclose && w->in_openclose) {
+ 		return false;
+ 	}