diff --git a/nix/home/opdavies/hosts/nixedo.nix b/nix/home/opdavies/hosts/nixedo.nix
index 2eaac9f3..d4175c9e 100644
--- a/nix/home/opdavies/hosts/nixedo.nix
+++ b/nix/home/opdavies/hosts/nixedo.nix
@@ -8,7 +8,8 @@
     };
 
     desktop = {
-      gtk.enable = true;
+      dwm.enable = true;
+      # gtk.enable = true;
     };
   };
 }
diff --git a/nix/hosts/nixedo/configuration.nix b/nix/hosts/nixedo/configuration.nix
index ea38bb7e..2554134f 100644
--- a/nix/hosts/nixedo/configuration.nix
+++ b/nix/hosts/nixedo/configuration.nix
@@ -20,6 +20,8 @@
       docker.enable = true;
     };
 
+    desktop.dwm.enable = true;
+
     homelab = {
       audiobookshelf.enable = true;
       beaverhabits.enable = true;
diff --git a/nix/hosts/t490/services/default.nix b/nix/hosts/t490/services/default.nix
index 541e60a7..ce7ea823 100644
--- a/nix/hosts/t490/services/default.nix
+++ b/nix/hosts/t490/services/default.nix
@@ -1,7 +1,6 @@
 {
   imports = [
     ./cron.nix
-    ./dwm.nix
     ./interception-tools.nix
     ./sound.nix
     ./udev.nix
diff --git a/nix/hosts/t490/services/dwm.nix b/nix/hosts/t490/services/dwm.nix
deleted file mode 100644
index fdaf6ec1..00000000
--- a/nix/hosts/t490/services/dwm.nix
+++ /dev/null
@@ -1,511 +0,0 @@
-{
-  config,
-  lib,
-  pkgs,
-  self,
-  ...
-}:
-
-with lib;
-
-{
-  options.features.desktop.dwm.enable = mkEnableOption "Enable dwm";
-
-  config = mkIf config.features.desktop.dwm.enable {
-    services = {
-      dwm-status = {
-        enable = true;
-
-        order = [
-          "audio"
-          "backlight"
-          "battery"
-          "cpu_load"
-          "network"
-          "time"
-        ];
-      };
-
-      xserver = {
-        displayManager.startx.enable = true;
-
-        windowManager.dwm = {
-          enable = true;
-
-          package = pkgs.dwm.override {
-            conf = ''
-              static const unsigned int borderpx  = 1;
-              static const unsigned int snap = 32;
-              static const int showbar = 1;
-              static const int topbar = 1;
-              static const char *fonts[] = { "monospace:size=10" };
-              static const char dmenufont[] = "monospace:size=10";
-              static const char col_gray1[] = "#222222";
-              static const char col_gray2[] = "#444444";
-              static const char col_gray3[] = "#bbbbbb";
-              static const char col_gray4[] = "#eeeeee";
-              static const char col_cyan[]  = "#005577";
-              static const char *colors[][3] = {
-                [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
-                [SchemeSel]  = { col_gray4, col_cyan,  col_cyan  },
-              };
-
-              static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
-
-              static const Rule rules[] = {
-                { "Gimp",     NULL,       NULL,       0,            1,           -1 },
-                { "Firefox",  NULL,       NULL,       1 << 8,       0,           -1 },
-              };
-
-              static const float mfact     = 0.55;
-              static const int nmaster     = 1;
-              static const int resizehints = 1;
-              static const int lockfullscreen = 1;
-
-              static const Layout layouts[] = {
-                { "[]=", tile },
-                { "><>", NULL },
-                { "[M]", monocle },
-              };
-
-              #define MODKEY Mod4Mask
-
-              #define TAGKEYS(KEY,TAG) \
-                { MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
-                { MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
-                { MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << TAG} }, \
-                { MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << TAG} },
-
-              #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
-
-              static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
-              static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
-              static const char *termcmd[]  = { "st", NULL };
-
-              static const Key keys[] = {
-                { MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
-                { MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
-                { MODKEY,                       XK_b,      togglebar,      {0} },
-                { MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
-                { MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
-                { MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
-                { MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
-                { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
-                { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
-                { MODKEY,                       XK_Return, zoom,           {0} },
-                { MODKEY,                       XK_Tab,    view,           {0} },
-                { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
-                { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
-                { MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
-                { MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
-                { MODKEY,                       XK_space,  setlayout,      {0} },
-                { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
-                { MODKEY,                       XK_0,      view,           {.ui = ~0 } },
-                { MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
-                { MODKEY,                       XK_comma,  focusmon,       {.i = -1 } },
-                { MODKEY,                       XK_period, focusmon,       {.i = +1 } },
-                { MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
-                { MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
-                TAGKEYS(                        XK_1,                      0)
-                TAGKEYS(                        XK_2,                      1)
-                TAGKEYS(                        XK_3,                      2)
-                TAGKEYS(                        XK_4,                      3)
-                TAGKEYS(                        XK_5,                      4)
-                TAGKEYS(                        XK_6,                      5)
-                TAGKEYS(                        XK_7,                      6)
-                TAGKEYS(                        XK_8,                      7)
-                TAGKEYS(                        XK_9,                      8)
-                { MODKEY|ShiftMask,             XK_q,      quit,           {0} },
-                { MODKEY|ShiftMask,             XK_b,      spawn,          SHCMD("${pkgs.firefox}/bin/firefox") },
-                { MODKEY|ShiftMask,             XK_f,      spawn,          SHCMD("${pkgs.xfce.thunar}/bin/thunar") },
-                { MODKEY|ShiftMask,             XK_i,      spawn,          SHCMD("${pkgs.xdotool}/bin/xdotool type $(grep -v '^#' ~/snippets.txt | sort | dmenu -i -l 50 | cut -d' ' -f1)") },
-                { MODKEY|ShiftMask,             XK_s,      spawn,          SHCMD("${pkgs.flameshot}/bin/flameshot gui") },
-                { MODKEY|ShiftMask,             XK_y,      spawn,          SHCMD("${pkgs.copyq}/bin/copyq toggle") },
-              };
-
-              static const Button buttons[] = {
-                { ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
-                { ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
-                { ClkWinTitle,          0,              Button2,        zoom,           {0} },
-                { ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
-                { ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
-                { ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
-                { ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
-                { ClkTagBar,            0,              Button1,        view,           {0} },
-                { ClkTagBar,            0,              Button3,        toggleview,     {0} },
-                { ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
-                { ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
-              };
-            '';
-
-            patches = with pkgs; [
-              (fetchpatch {
-                url = "https://dwm.suckless.org/patches/hide_vacant_tags/dwm-hide_vacant_tags-6.4.diff";
-                sha256 = "GIbRW0Inwbp99rsKLfIDGvPwZ3pqihROMBp5vFlHx5Q=";
-              })
-
-              (fetchpatch {
-                url = "https://dwm.suckless.org/patches/pertag/dwm-pertag-20200914-61bb8b2.diff";
-                sha256 = "wRZP/27V7xYOBnFAGxqeJFXdoDk4K1EQMA3bEoAXr/0=";
-              })
-            ];
-          };
-        };
-      };
-    };
-
-    systemd.user.services.dwm-status.serviceConfig.Restart = "on-failure";
-
-    environment.systemPackages = with pkgs; [
-      dmenu
-      dmenu-bluetooth
-      networkmanager_dmenu
-
-      (st.override {
-        config = ''
-
-          static char *font = "MesloLGSNerdFontMono:pixelsize=15:antialias=true:autohint=true";
-          static int borderpx = 2;
-
-          static char *shell = "/bin/sh";
-          char *utmp = NULL;
-          char *scroll = NULL;
-          char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400";
-
-          char *vtiden = "\033[?6c";
-
-          static float cwscale = 1.0;
-          static float chscale = 1.0;
-
-          wchar_t *worddelimiters = L" ";
-
-          static unsigned int doubleclicktimeout = 300;
-          static unsigned int tripleclicktimeout = 600;
-
-          int allowaltscreen = 1;
-
-          int allowwindowops = 0;
-
-          static double minlatency = 2;
-          static double maxlatency = 33;
-
-          static unsigned int blinktimeout = 800;
-
-          static unsigned int cursorthickness = 2;
-
-          static int bellvolume = 0;
-
-          char *termname = "st-256color";
-
-          unsigned int tabspaces = 8;
-
-          static const char *colorname[] = {
-            "black",
-            "red3",
-            "green3",
-            "yellow3",
-            "blue2",
-            "magenta3",
-            "cyan3",
-            "gray90",
-
-            "gray50",
-            "red",
-            "green",
-            "yellow",
-            "#5c5cff",
-            "magenta",
-            "cyan",
-            "white",
-
-            [255] = 0,
-
-            "#cccccc",
-            "#555555",
-            "gray90",
-            "black",
-          };
-
-          unsigned int defaultfg = 258;
-          unsigned int defaultbg = 259;
-          unsigned int defaultcs = 256;
-          static unsigned int defaultrcs = 257;
-
-          static unsigned int cursorshape = 2;
-
-          static unsigned int cols = 80;
-          static unsigned int rows = 24;
-
-          static unsigned int mouseshape = XC_xterm;
-          static unsigned int mousefg = 7;
-          static unsigned int mousebg = 0;
-
-          static unsigned int defaultattr = 11;
-
-          static uint forcemousemod = ShiftMask;
-
-          static MouseShortcut mshortcuts[] = {
-            { XK_ANY_MOD,           Button2, selpaste,       {.i = 0},      1 },
-            { ShiftMask,            Button4, ttysend,        {.s = "\033[5;2~"} },
-            { XK_ANY_MOD,           Button4, ttysend,        {.s = "\031"} },
-            { ShiftMask,            Button5, ttysend,        {.s = "\033[6;2~"} },
-            { XK_ANY_MOD,           Button5, ttysend,        {.s = "\005"} },
-          };
-
-          #define MODKEY Mod1Mask
-          #define TERMMOD (ControlMask|ShiftMask)
-
-          static Shortcut shortcuts[] = {
-            { XK_ANY_MOD,           XK_Break,       sendbreak,      {.i =  0} },
-            { ControlMask,          XK_Print,       toggleprinter,  {.i =  0} },
-            { ShiftMask,            XK_Print,       printscreen,    {.i =  0} },
-            { XK_ANY_MOD,           XK_Print,       printsel,       {.i =  0} },
-            { TERMMOD,              XK_Prior,       zoom,           {.f = +1} },
-            { TERMMOD,              XK_Next,        zoom,           {.f = -1} },
-            { TERMMOD,              XK_Home,        zoomreset,      {.f =  0} },
-            { TERMMOD,              XK_C,           clipcopy,       {.i =  0} },
-            { TERMMOD,              XK_V,           clippaste,      {.i =  0} },
-            { TERMMOD,              XK_Y,           selpaste,       {.i =  0} },
-            { ShiftMask,            XK_Insert,      selpaste,       {.i =  0} },
-            { TERMMOD,              XK_Num_Lock,    numlock,        {.i =  0} },
-          };
-
-          static KeySym mappedkeys[] = { -1 };
-
-          static uint ignoremod = Mod2Mask|XK_SWITCH_MOD;
-
-          static Key key[] = {
-            /* keysym           mask            string      appkey appcursor */
-            { XK_KP_Home,       ShiftMask,      "\033[2J",       0,   -1},
-            { XK_KP_Home,       ShiftMask,      "\033[1;2H",     0,   +1},
-            { XK_KP_Home,       XK_ANY_MOD,     "\033[H",        0,   -1},
-            { XK_KP_Home,       XK_ANY_MOD,     "\033[1~",       0,   +1},
-            { XK_KP_Up,         XK_ANY_MOD,     "\033Ox",       +1,    0},
-            { XK_KP_Up,         XK_ANY_MOD,     "\033[A",        0,   -1},
-            { XK_KP_Up,         XK_ANY_MOD,     "\033OA",        0,   +1},
-            { XK_KP_Down,       XK_ANY_MOD,     "\033Or",       +1,    0},
-            { XK_KP_Down,       XK_ANY_MOD,     "\033[B",        0,   -1},
-            { XK_KP_Down,       XK_ANY_MOD,     "\033OB",        0,   +1},
-            { XK_KP_Left,       XK_ANY_MOD,     "\033Ot",       +1,    0},
-            { XK_KP_Left,       XK_ANY_MOD,     "\033[D",        0,   -1},
-            { XK_KP_Left,       XK_ANY_MOD,     "\033OD",        0,   +1},
-            { XK_KP_Right,      XK_ANY_MOD,     "\033Ov",       +1,    0},
-            { XK_KP_Right,      XK_ANY_MOD,     "\033[C",        0,   -1},
-            { XK_KP_Right,      XK_ANY_MOD,     "\033OC",        0,   +1},
-            { XK_KP_Prior,      ShiftMask,      "\033[5;2~",     0,    0},
-            { XK_KP_Prior,      XK_ANY_MOD,     "\033[5~",       0,    0},
-            { XK_KP_Begin,      XK_ANY_MOD,     "\033[E",        0,    0},
-            { XK_KP_End,        ControlMask,    "\033[J",       -1,    0},
-            { XK_KP_End,        ControlMask,    "\033[1;5F",    +1,    0},
-            { XK_KP_End,        ShiftMask,      "\033[K",       -1,    0},
-            { XK_KP_End,        ShiftMask,      "\033[1;2F",    +1,    0},
-            { XK_KP_End,        XK_ANY_MOD,     "\033[4~",       0,    0},
-            { XK_KP_Next,       ShiftMask,      "\033[6;2~",     0,    0},
-            { XK_KP_Next,       XK_ANY_MOD,     "\033[6~",       0,    0},
-            { XK_KP_Insert,     ShiftMask,      "\033[2;2~",    +1,    0},
-            { XK_KP_Insert,     ShiftMask,      "\033[4l",      -1,    0},
-            { XK_KP_Insert,     ControlMask,    "\033[L",       -1,    0},
-            { XK_KP_Insert,     ControlMask,    "\033[2;5~",    +1,    0},
-            { XK_KP_Insert,     XK_ANY_MOD,     "\033[4h",      -1,    0},
-            { XK_KP_Insert,     XK_ANY_MOD,     "\033[2~",      +1,    0},
-            { XK_KP_Delete,     ControlMask,    "\033[M",       -1,    0},
-            { XK_KP_Delete,     ControlMask,    "\033[3;5~",    +1,    0},
-            { XK_KP_Delete,     ShiftMask,      "\033[2K",      -1,    0},
-            { XK_KP_Delete,     ShiftMask,      "\033[3;2~",    +1,    0},
-            { XK_KP_Delete,     XK_ANY_MOD,     "\033[P",       -1,    0},
-            { XK_KP_Delete,     XK_ANY_MOD,     "\033[3~",      +1,    0},
-            { XK_KP_Multiply,   XK_ANY_MOD,     "\033Oj",       +2,    0},
-            { XK_KP_Add,        XK_ANY_MOD,     "\033Ok",       +2,    0},
-            { XK_KP_Enter,      XK_ANY_MOD,     "\033OM",       +2,    0},
-            { XK_KP_Enter,      XK_ANY_MOD,     "\r",           -1,    0},
-            { XK_KP_Subtract,   XK_ANY_MOD,     "\033Om",       +2,    0},
-            { XK_KP_Decimal,    XK_ANY_MOD,     "\033On",       +2,    0},
-            { XK_KP_Divide,     XK_ANY_MOD,     "\033Oo",       +2,    0},
-            { XK_KP_0,          XK_ANY_MOD,     "\033Op",       +2,    0},
-            { XK_KP_1,          XK_ANY_MOD,     "\033Oq",       +2,    0},
-            { XK_KP_2,          XK_ANY_MOD,     "\033Or",       +2,    0},
-            { XK_KP_3,          XK_ANY_MOD,     "\033Os",       +2,    0},
-            { XK_KP_4,          XK_ANY_MOD,     "\033Ot",       +2,    0},
-            { XK_KP_5,          XK_ANY_MOD,     "\033Ou",       +2,    0},
-            { XK_KP_6,          XK_ANY_MOD,     "\033Ov",       +2,    0},
-            { XK_KP_7,          XK_ANY_MOD,     "\033Ow",       +2,    0},
-            { XK_KP_8,          XK_ANY_MOD,     "\033Ox",       +2,    0},
-            { XK_KP_9,          XK_ANY_MOD,     "\033Oy",       +2,    0},
-            { XK_Up,            ShiftMask,      "\033[1;2A",     0,    0},
-            { XK_Up,            Mod1Mask,       "\033[1;3A",     0,    0},
-            { XK_Up,         ShiftMask|Mod1Mask,"\033[1;4A",     0,    0},
-            { XK_Up,            ControlMask,    "\033[1;5A",     0,    0},
-            { XK_Up,      ShiftMask|ControlMask,"\033[1;6A",     0,    0},
-            { XK_Up,       ControlMask|Mod1Mask,"\033[1;7A",     0,    0},
-            { XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A",  0,    0},
-            { XK_Up,            XK_ANY_MOD,     "\033[A",        0,   -1},
-            { XK_Up,            XK_ANY_MOD,     "\033OA",        0,   +1},
-            { XK_Down,          ShiftMask,      "\033[1;2B",     0,    0},
-            { XK_Down,          Mod1Mask,       "\033[1;3B",     0,    0},
-            { XK_Down,       ShiftMask|Mod1Mask,"\033[1;4B",     0,    0},
-            { XK_Down,          ControlMask,    "\033[1;5B",     0,    0},
-            { XK_Down,    ShiftMask|ControlMask,"\033[1;6B",     0,    0},
-            { XK_Down,     ControlMask|Mod1Mask,"\033[1;7B",     0,    0},
-            { XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0,    0},
-            { XK_Down,          XK_ANY_MOD,     "\033[B",        0,   -1},
-            { XK_Down,          XK_ANY_MOD,     "\033OB",        0,   +1},
-            { XK_Left,          ShiftMask,      "\033[1;2D",     0,    0},
-            { XK_Left,          Mod1Mask,       "\033[1;3D",     0,    0},
-            { XK_Left,       ShiftMask|Mod1Mask,"\033[1;4D",     0,    0},
-            { XK_Left,          ControlMask,    "\033[1;5D",     0,    0},
-            { XK_Left,    ShiftMask|ControlMask,"\033[1;6D",     0,    0},
-            { XK_Left,     ControlMask|Mod1Mask,"\033[1;7D",     0,    0},
-            { XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0,    0},
-            { XK_Left,          XK_ANY_MOD,     "\033[D",        0,   -1},
-            { XK_Left,          XK_ANY_MOD,     "\033OD",        0,   +1},
-            { XK_Right,         ShiftMask,      "\033[1;2C",     0,    0},
-            { XK_Right,         Mod1Mask,       "\033[1;3C",     0,    0},
-            { XK_Right,      ShiftMask|Mod1Mask,"\033[1;4C",     0,    0},
-            { XK_Right,         ControlMask,    "\033[1;5C",     0,    0},
-            { XK_Right,   ShiftMask|ControlMask,"\033[1;6C",     0,    0},
-            { XK_Right,    ControlMask|Mod1Mask,"\033[1;7C",     0,    0},
-            { XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0,   0},
-            { XK_Right,         XK_ANY_MOD,     "\033[C",        0,   -1},
-            { XK_Right,         XK_ANY_MOD,     "\033OC",        0,   +1},
-            { XK_ISO_Left_Tab,  ShiftMask,      "\033[Z",        0,    0},
-            { XK_Return,        Mod1Mask,       "\033\r",        0,    0},
-            { XK_Return,        XK_ANY_MOD,     "\r",            0,    0},
-            { XK_Insert,        ShiftMask,      "\033[4l",      -1,    0},
-            { XK_Insert,        ShiftMask,      "\033[2;2~",    +1,    0},
-            { XK_Insert,        ControlMask,    "\033[L",       -1,    0},
-            { XK_Insert,        ControlMask,    "\033[2;5~",    +1,    0},
-            { XK_Insert,        XK_ANY_MOD,     "\033[4h",      -1,    0},
-            { XK_Insert,        XK_ANY_MOD,     "\033[2~",      +1,    0},
-            { XK_Delete,        ControlMask,    "\033[M",       -1,    0},
-            { XK_Delete,        ControlMask,    "\033[3;5~",    +1,    0},
-            { XK_Delete,        ShiftMask,      "\033[2K",      -1,    0},
-            { XK_Delete,        ShiftMask,      "\033[3;2~",    +1,    0},
-            { XK_Delete,        XK_ANY_MOD,     "\033[P",       -1,    0},
-            { XK_Delete,        XK_ANY_MOD,     "\033[3~",      +1,    0},
-            { XK_BackSpace,     XK_NO_MOD,      "\177",          0,    0},
-            { XK_BackSpace,     Mod1Mask,       "\033\177",      0,    0},
-            { XK_Home,          ShiftMask,      "\033[2J",       0,   -1},
-            { XK_Home,          ShiftMask,      "\033[1;2H",     0,   +1},
-            { XK_Home,          XK_ANY_MOD,     "\033[H",        0,   -1},
-            { XK_Home,          XK_ANY_MOD,     "\033[1~",       0,   +1},
-            { XK_End,           ControlMask,    "\033[J",       -1,    0},
-            { XK_End,           ControlMask,    "\033[1;5F",    +1,    0},
-            { XK_End,           ShiftMask,      "\033[K",       -1,    0},
-            { XK_End,           ShiftMask,      "\033[1;2F",    +1,    0},
-            { XK_End,           XK_ANY_MOD,     "\033[4~",       0,    0},
-            { XK_Prior,         ControlMask,    "\033[5;5~",     0,    0},
-            { XK_Prior,         ShiftMask,      "\033[5;2~",     0,    0},
-            { XK_Prior,         XK_ANY_MOD,     "\033[5~",       0,    0},
-            { XK_Next,          ControlMask,    "\033[6;5~",     0,    0},
-            { XK_Next,          ShiftMask,      "\033[6;2~",     0,    0},
-            { XK_Next,          XK_ANY_MOD,     "\033[6~",       0,    0},
-            { XK_F1,            XK_NO_MOD,      "\033OP" ,       0,    0},
-            { XK_F1, /* F13 */  ShiftMask,      "\033[1;2P",     0,    0},
-            { XK_F1, /* F25 */  ControlMask,    "\033[1;5P",     0,    0},
-            { XK_F1, /* F37 */  Mod4Mask,       "\033[1;6P",     0,    0},
-            { XK_F1, /* F49 */  Mod1Mask,       "\033[1;3P",     0,    0},
-            { XK_F1, /* F61 */  Mod3Mask,       "\033[1;4P",     0,    0},
-            { XK_F2,            XK_NO_MOD,      "\033OQ" ,       0,    0},
-            { XK_F2, /* F14 */  ShiftMask,      "\033[1;2Q",     0,    0},
-            { XK_F2, /* F26 */  ControlMask,    "\033[1;5Q",     0,    0},
-            { XK_F2, /* F38 */  Mod4Mask,       "\033[1;6Q",     0,    0},
-            { XK_F2, /* F50 */  Mod1Mask,       "\033[1;3Q",     0,    0},
-            { XK_F2, /* F62 */  Mod3Mask,       "\033[1;4Q",     0,    0},
-            { XK_F3,            XK_NO_MOD,      "\033OR" ,       0,    0},
-            { XK_F3, /* F15 */  ShiftMask,      "\033[1;2R",     0,    0},
-            { XK_F3, /* F27 */  ControlMask,    "\033[1;5R",     0,    0},
-            { XK_F3, /* F39 */  Mod4Mask,       "\033[1;6R",     0,    0},
-            { XK_F3, /* F51 */  Mod1Mask,       "\033[1;3R",     0,    0},
-            { XK_F3, /* F63 */  Mod3Mask,       "\033[1;4R",     0,    0},
-            { XK_F4,            XK_NO_MOD,      "\033OS" ,       0,    0},
-            { XK_F4, /* F16 */  ShiftMask,      "\033[1;2S",     0,    0},
-            { XK_F4, /* F28 */  ControlMask,    "\033[1;5S",     0,    0},
-            { XK_F4, /* F40 */  Mod4Mask,       "\033[1;6S",     0,    0},
-            { XK_F4, /* F52 */  Mod1Mask,       "\033[1;3S",     0,    0},
-            { XK_F5,            XK_NO_MOD,      "\033[15~",      0,    0},
-            { XK_F5, /* F17 */  ShiftMask,      "\033[15;2~",    0,    0},
-            { XK_F5, /* F29 */  ControlMask,    "\033[15;5~",    0,    0},
-            { XK_F5, /* F41 */  Mod4Mask,       "\033[15;6~",    0,    0},
-            { XK_F5, /* F53 */  Mod1Mask,       "\033[15;3~",    0,    0},
-            { XK_F6,            XK_NO_MOD,      "\033[17~",      0,    0},
-            { XK_F6, /* F18 */  ShiftMask,      "\033[17;2~",    0,    0},
-            { XK_F6, /* F30 */  ControlMask,    "\033[17;5~",    0,    0},
-            { XK_F6, /* F42 */  Mod4Mask,       "\033[17;6~",    0,    0},
-            { XK_F6, /* F54 */  Mod1Mask,       "\033[17;3~",    0,    0},
-            { XK_F7,            XK_NO_MOD,      "\033[18~",      0,    0},
-            { XK_F7, /* F19 */  ShiftMask,      "\033[18;2~",    0,    0},
-            { XK_F7, /* F31 */  ControlMask,    "\033[18;5~",    0,    0},
-            { XK_F7, /* F43 */  Mod4Mask,       "\033[18;6~",    0,    0},
-            { XK_F7, /* F55 */  Mod1Mask,       "\033[18;3~",    0,    0},
-            { XK_F8,            XK_NO_MOD,      "\033[19~",      0,    0},
-            { XK_F8, /* F20 */  ShiftMask,      "\033[19;2~",    0,    0},
-            { XK_F8, /* F32 */  ControlMask,    "\033[19;5~",    0,    0},
-            { XK_F8, /* F44 */  Mod4Mask,       "\033[19;6~",    0,    0},
-            { XK_F8, /* F56 */  Mod1Mask,       "\033[19;3~",    0,    0},
-            { XK_F9,            XK_NO_MOD,      "\033[20~",      0,    0},
-            { XK_F9, /* F21 */  ShiftMask,      "\033[20;2~",    0,    0},
-            { XK_F9, /* F33 */  ControlMask,    "\033[20;5~",    0,    0},
-            { XK_F9, /* F45 */  Mod4Mask,       "\033[20;6~",    0,    0},
-            { XK_F9, /* F57 */  Mod1Mask,       "\033[20;3~",    0,    0},
-            { XK_F10,           XK_NO_MOD,      "\033[21~",      0,    0},
-            { XK_F10, /* F22 */ ShiftMask,      "\033[21;2~",    0,    0},
-            { XK_F10, /* F34 */ ControlMask,    "\033[21;5~",    0,    0},
-            { XK_F10, /* F46 */ Mod4Mask,       "\033[21;6~",    0,    0},
-            { XK_F10, /* F58 */ Mod1Mask,       "\033[21;3~",    0,    0},
-            { XK_F11,           XK_NO_MOD,      "\033[23~",      0,    0},
-            { XK_F11, /* F23 */ ShiftMask,      "\033[23;2~",    0,    0},
-            { XK_F11, /* F35 */ ControlMask,    "\033[23;5~",    0,    0},
-            { XK_F11, /* F47 */ Mod4Mask,       "\033[23;6~",    0,    0},
-            { XK_F11, /* F59 */ Mod1Mask,       "\033[23;3~",    0,    0},
-            { XK_F12,           XK_NO_MOD,      "\033[24~",      0,    0},
-            { XK_F12, /* F24 */ ShiftMask,      "\033[24;2~",    0,    0},
-            { XK_F12, /* F36 */ ControlMask,    "\033[24;5~",    0,    0},
-            { XK_F12, /* F48 */ Mod4Mask,       "\033[24;6~",    0,    0},
-            { XK_F12, /* F60 */ Mod1Mask,       "\033[24;3~",    0,    0},
-            { XK_F13,           XK_NO_MOD,      "\033[1;2P",     0,    0},
-            { XK_F14,           XK_NO_MOD,      "\033[1;2Q",     0,    0},
-            { XK_F15,           XK_NO_MOD,      "\033[1;2R",     0,    0},
-            { XK_F16,           XK_NO_MOD,      "\033[1;2S",     0,    0},
-            { XK_F17,           XK_NO_MOD,      "\033[15;2~",    0,    0},
-            { XK_F18,           XK_NO_MOD,      "\033[17;2~",    0,    0},
-            { XK_F19,           XK_NO_MOD,      "\033[18;2~",    0,    0},
-            { XK_F20,           XK_NO_MOD,      "\033[19;2~",    0,    0},
-            { XK_F21,           XK_NO_MOD,      "\033[20;2~",    0,    0},
-            { XK_F22,           XK_NO_MOD,      "\033[21;2~",    0,    0},
-            { XK_F23,           XK_NO_MOD,      "\033[23;2~",    0,    0},
-            { XK_F24,           XK_NO_MOD,      "\033[24;2~",    0,    0},
-            { XK_F25,           XK_NO_MOD,      "\033[1;5P",     0,    0},
-            { XK_F26,           XK_NO_MOD,      "\033[1;5Q",     0,    0},
-            { XK_F27,           XK_NO_MOD,      "\033[1;5R",     0,    0},
-            { XK_F28,           XK_NO_MOD,      "\033[1;5S",     0,    0},
-            { XK_F29,           XK_NO_MOD,      "\033[15;5~",    0,    0},
-            { XK_F30,           XK_NO_MOD,      "\033[17;5~",    0,    0},
-            { XK_F31,           XK_NO_MOD,      "\033[18;5~",    0,    0},
-            { XK_F32,           XK_NO_MOD,      "\033[19;5~",    0,    0},
-            { XK_F33,           XK_NO_MOD,      "\033[20;5~",    0,    0},
-            { XK_F34,           XK_NO_MOD,      "\033[21;5~",    0,    0},
-            { XK_F35,           XK_NO_MOD,      "\033[23;5~",    0,    0},
-          };
-
-          static uint selmasks[] = {
-            [SEL_RECTANGULAR] = Mod1Mask,
-          };
-
-          static char ascii_printable[] =
-            " !\"#$%&'()*+,-./0123456789:;<=>?"
-            "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
-            "`abcdefghijklmnopqrstuvwxyz{|}~";
-        '';
-
-        patches = with pkgs; [
-          (fetchpatch {
-            url = "https://st.suckless.org/patches/anysize/st-anysize-20220718-baa9357.diff";
-            sha256 = "yx9VSwmPACx3EN3CAdQkxeoJKJxQ6ziC9tpBcoWuWHc=";
-          })
-        ];
-      })
-
-      xdotool
-    ];
-  };
-}
diff --git a/nix/modules/nixos/features/desktop/default.nix b/nix/modules/nixos/features/desktop/default.nix
index d0851c6b..6b79d689 100644
--- a/nix/modules/nixos/features/desktop/default.nix
+++ b/nix/modules/nixos/features/desktop/default.nix
@@ -1,6 +1,7 @@
 {
   imports = [
     ./autorandr.nix
+    ./dwm.nix
     ./peek.nix
     ./screenkey.nix
     ./thunar.nix
diff --git a/nix/modules/nixos/features/desktop/dwm.nix b/nix/modules/nixos/features/desktop/dwm.nix
new file mode 100644
index 00000000..9815c81c
--- /dev/null
+++ b/nix/modules/nixos/features/desktop/dwm.nix
@@ -0,0 +1,509 @@
+{
+  config,
+  lib,
+  pkgs,
+  self,
+  ...
+}:
+
+with lib;
+
+{
+  options.features.desktop.dwm.enable = mkEnableOption "Enable dwm";
+
+  config = mkIf config.features.desktop.dwm.enable {
+    services = {
+      dwm-status = {
+        enable = true;
+
+        order = [
+          "audio"
+          "backlight"
+          "battery"
+          "cpu_load"
+          "network"
+          "time"
+        ];
+      };
+
+      xserver = {
+        displayManager.startx.enable = true;
+
+        windowManager.dwm = {
+          enable = true;
+
+          package = pkgs.dwm.override {
+            conf = ''
+              static const unsigned int borderpx  = 1;
+              static const unsigned int snap = 32;
+              static const int showbar = 1;
+              static const int topbar = 1;
+              static const char *fonts[] = { "monospace:size=10" };
+              static const char dmenufont[] = "monospace:size=10";
+              static const char col_gray1[] = "#222222";
+              static const char col_gray2[] = "#444444";
+              static const char col_gray3[] = "#bbbbbb";
+              static const char col_gray4[] = "#eeeeee";
+              static const char col_cyan[]  = "#005577";
+              static const char *colors[][3] = {
+                [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
+                [SchemeSel]  = { col_gray4, col_cyan,  col_cyan  },
+              };
+
+              static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
+
+              static const Rule rules[] = {
+                { "Gimp", NULL, NULL, 0, 1, -1 }, 
+                { "Firefox", NULL, NULL, 1 << 8, 0, -1 }, 
+              };
+
+              static const float mfact = 0.55;
+              static const int nmaster = 1;
+              static const int resizehints = 1;
+              static const int lockfullscreen = 1;
+
+              static const Layout layouts[] = {
+                { "[]=", tile },
+                { "><>", NULL },
+                { "[M]", monocle },
+              };
+
+              #define MODKEY Mod4Mask
+
+              #define TAGKEYS(KEY,TAG) \
+                { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
+                { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
+                { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
+                { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, 
+
+              #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
+
+              static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
+              static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
+              static const char *termcmd[] = { "st", NULL };
+
+              static const Key keys[] = {
+                { MODKEY, XK_p, spawn, {.v = dmenucmd } },
+                { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
+                { MODKEY, XK_b, togglebar, {0} },
+                { MODKEY, XK_j, focusstack, {.i = +1 } },
+                { MODKEY, XK_k, focusstack, {.i = -1 } },
+                { MODKEY, XK_i, incnmaster, {.i = +1 } },
+                { MODKEY, XK_d, incnmaster, {.i = -1 } },
+                { MODKEY, XK_h, setmfact, {.f = -0.05} },
+                { MODKEY, XK_l, setmfact, {.f = +0.05} },
+                { MODKEY, XK_Return, zoom, {0} },
+                { MODKEY, XK_Tab, view, {0} },
+                { MODKEY|ShiftMask, XK_c, killclient, {0} },
+                { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
+                { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
+                { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
+                { MODKEY, XK_space, setlayout, {0} },
+                { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
+                { MODKEY, XK_0, view, {.ui = ~0 } },
+                { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
+                { MODKEY, XK_comma, focusmon, {.i = -1 } },
+                { MODKEY, XK_period, focusmon, {.i = +1 } },
+                { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
+                { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
+                TAGKEYS(XK_1, 0)
+                TAGKEYS(XK_2, 1)
+                TAGKEYS(XK_3, 2)
+                TAGKEYS(XK_4, 3)
+                TAGKEYS(XK_5, 4)
+                TAGKEYS(XK_6, 5)
+                TAGKEYS(XK_7, 6)
+                TAGKEYS(XK_8, 7)
+                TAGKEYS(XK_9, 8)
+                { MODKEY|ShiftMask, XK_q, quit, {0} },
+                { MODKEY|ShiftMask, XK_b, spawn, SHCMD("${pkgs.firefox}/bin/firefox") },
+                { MODKEY|ShiftMask, XK_f, spawn, SHCMD("${pkgs.xfce.thunar}/bin/thunar") },
+                { MODKEY|ShiftMask, XK_i, spawn, SHCMD("${pkgs.xdotool}/bin/xdotool type $(grep -v '^#' ~/snippets.txt | grep "\S" | sort | dmenu -i -l 50 | cut -d' ' -f1)") },
+                { MODKEY|ShiftMask, XK_s, spawn, SHCMD("${pkgs.flameshot}/bin/flameshot gui") },
+                { MODKEY|ShiftMask, XK_y, spawn, SHCMD("${pkgs.copyq}/bin/copyq toggle") },
+              };
+
+              static const Button buttons[] = {
+                { ClkLtSymbol, 0, Button1, setlayout, {0} },
+                { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
+                { ClkWinTitle, 0, Button2, zoom, {0} },
+                { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
+                { ClkClientWin, MODKEY, Button1, movemouse, {0} },
+                { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
+                { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
+                { ClkTagBar, 0, Button1, view, {0} },
+                { ClkTagBar, 0, Button3, toggleview, {0} },
+                { ClkTagBar, MODKEY, Button1, tag, {0} },
+                { ClkTagBar, MODKEY, Button3, toggletag, {0} },
+              };
+            '';
+
+            patches = with pkgs; [
+              (fetchpatch {
+                url = "https://dwm.suckless.org/patches/hide_vacant_tags/dwm-hide_vacant_tags-6.4.diff";
+                sha256 = "GIbRW0Inwbp99rsKLfIDGvPwZ3pqihROMBp5vFlHx5Q=";
+              })
+
+              (fetchpatch {
+                url = "https://dwm.suckless.org/patches/pertag/dwm-pertag-20200914-61bb8b2.diff";
+                sha256 = "wRZP/27V7xYOBnFAGxqeJFXdoDk4K1EQMA3bEoAXr/0=";
+              })
+            ];
+          };
+        };
+      };
+    };
+
+    systemd.user.services.dwm-status.serviceConfig.Restart = "on-failure";
+
+    environment.systemPackages = with pkgs; [
+      dmenu
+      dmenu-bluetooth
+      networkmanager_dmenu
+
+      (st.override {
+        conf = ''
+          static char *font = "MesloLGSNerdFontMono:pixelsize=16:antialias=true:autohint=true";
+          static int borderpx = 2;
+
+          static char *shell = "/bin/sh";
+          char *utmp = NULL;
+          char *scroll = NULL;
+          char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400";
+
+          char *vtiden = "\033[?6c";
+
+          static float cwscale = 1.0;
+          static float chscale = 1.0;
+
+          wchar_t *worddelimiters = L" ";
+
+          static unsigned int doubleclicktimeout = 300;
+          static unsigned int tripleclicktimeout = 600;
+
+          int allowaltscreen = 1;
+
+          int allowwindowops = 0;
+
+          static double minlatency = 2;
+          static double maxlatency = 33;
+
+          static unsigned int blinktimeout = 800;
+
+          static unsigned int cursorthickness = 2;
+
+          static int bellvolume = 0;
+
+          char *termname = "st-256color";
+
+          unsigned int tabspaces = 8;
+
+          static const char *colorname[] = {
+            "black",
+            "red3",
+            "green3",
+            "yellow3",
+            "blue2",
+            "magenta3",
+            "cyan3",
+            "gray90",
+
+            "gray50",
+            "red",
+            "green",
+            "yellow",
+            "#5c5cff",
+            "magenta",
+            "cyan",
+            "white",
+
+            [255] = 0,
+
+            "#cccccc",
+            "#555555",
+            "gray90",
+            "black",
+          };
+
+          unsigned int defaultfg = 258;
+          unsigned int defaultbg = 259;
+          unsigned int defaultcs = 256;
+          static unsigned int defaultrcs = 257;
+
+          static unsigned int cursorshape = 2;
+
+          static unsigned int cols = 80;
+          static unsigned int rows = 24;
+
+          static unsigned int mouseshape = XC_xterm;
+          static unsigned int mousefg = 7;
+          static unsigned int mousebg = 0;
+
+          static unsigned int defaultattr = 11;
+
+          static uint forcemousemod = ShiftMask;
+
+          static MouseShortcut mshortcuts[] = {
+            { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 },
+            { ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} },
+            { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} },
+            { ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} },
+            { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} },
+          };
+
+          #define MODKEY Mod1Mask
+          #define TERMMOD (ControlMask|ShiftMask)
+
+          static Shortcut shortcuts[] = {
+            { XK_ANY_MOD, XK_Break, sendbreak, {.i =  0} },
+            { ControlMask, XK_Print, toggleprinter, {.i =  0} },
+            { ShiftMask, XK_Print, printscreen, {.i =  0} },
+            { XK_ANY_MOD, XK_Print, printsel, {.i =  0} },
+            { TERMMOD, XK_Prior, zoom, {.f = +1} },
+            { TERMMOD, XK_Next, zoom, {.f = -1} },
+            { TERMMOD, XK_Home, zoomreset, {.f =  0} },
+            { TERMMOD, XK_C, clipcopy, {.i =  0} },
+            { TERMMOD, XK_V, clippaste, {.i =  0} },
+            { TERMMOD, XK_Y, selpaste, {.i =  0} },
+            { ShiftMask, XK_Insert, selpaste, {.i =  0} },
+            { TERMMOD, XK_Num_Lock, numlock, {.i =  0} },
+          };
+
+          static KeySym mappedkeys[] = { -1 };
+
+          static uint ignoremod = Mod2Mask|XK_SWITCH_MOD;
+
+          static Key key[] = {
+            { XK_KP_Home, ShiftMask, "\033[2J", 0, -1},
+            { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1},
+            { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1},
+            { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1},
+            { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0},
+            { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1},
+            { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1},
+            { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0},
+            { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1},
+            { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1},
+            { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0},
+            { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1},
+            { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1},
+            { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0},
+            { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1},
+            { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1},
+            { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0},
+            { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
+            { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0},
+            { XK_KP_End, ControlMask, "\033[J", -1, 0},
+            { XK_KP_End, ControlMask, "\033[1;5F", +1, 0},
+            { XK_KP_End, ShiftMask, "\033[K", -1, 0},
+            { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0},
+            { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0},
+            { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0},
+            { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0},
+            { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0},
+            { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0},
+            { XK_KP_Insert, ControlMask, "\033[L", -1, 0},
+            { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0},
+            { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
+            { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
+            { XK_KP_Delete, ControlMask, "\033[M", -1, 0},
+            { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0},
+            { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0},
+            { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0},
+            { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0},
+            { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
+            { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0},
+            { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0},
+            { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0},
+            { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0},
+            { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0},
+            { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0},
+            { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0},
+            { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0},
+            { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0},
+            { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0},
+            { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0},
+            { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0},
+            { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0},
+            { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0},
+            { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0},
+            { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0},
+            { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0},
+            { XK_Up, ShiftMask, "\033[1;2A", 0, 0},
+            { XK_Up, Mod1Mask, "\033[1;3A", 0, 0},
+            { XK_Up, ShiftMask|Mod1Mask, "\033[1;4A", 0, 0},
+            { XK_Up, ControlMask, "\033[1;5A", 0, 0},
+            { XK_Up, ShiftMask|ControlMask, "\033[1;6A", 0, 0},
+            { XK_Up, ControlMask|Mod1Mask, "\033[1;7A", 0, 0},
+            { XK_Up, ShiftMask|ControlMask|Mod1Mask, "\033[1;8A", 0, 0},
+            { XK_Up, XK_ANY_MOD, "\033[A", 0, -1},
+            { XK_Up, XK_ANY_MOD, "\033OA", 0, +1},
+            { XK_Down, ShiftMask, "\033[1;2B", 0, 0},
+            { XK_Down, Mod1Mask, "\033[1;3B", 0, 0},
+            { XK_Down, ShiftMask|Mod1Mask, "\033[1;4B", 0, 0},
+            { XK_Down, ControlMask, "\033[1;5B", 0, 0},
+            { XK_Down, ShiftMask|ControlMask, "\033[1;6B", 0, 0},
+            { XK_Down, ControlMask|Mod1Mask, "\033[1;7B", 0, 0},
+            { XK_Down, ShiftMask|ControlMask|Mod1Mask, "\033[1;8B", 0, 0},
+            { XK_Down, XK_ANY_MOD, "\033[B", 0, -1},
+            { XK_Down, XK_ANY_MOD, "\033OB", 0, +1},
+            { XK_Left, ShiftMask, "\033[1;2D", 0, 0},
+            { XK_Left, Mod1Mask, "\033[1;3D", 0, 0},
+            { XK_Left, ShiftMask|Mod1Mask, "\033[1;4D", 0, 0},
+            { XK_Left, ControlMask, "\033[1;5D", 0, 0},
+            { XK_Left, ShiftMask|ControlMask, "\033[1;6D", 0, 0},
+            { XK_Left, ControlMask|Mod1Mask, "\033[1;7D", 0, 0},
+            { XK_Left, ShiftMask|ControlMask|Mod1Mask, "\033[1;8D", 0, 0},
+            { XK_Left, XK_ANY_MOD, "\033[D", 0, -1},
+            { XK_Left, XK_ANY_MOD, "\033OD", 0, +1},
+            { XK_Right, ShiftMask, "\033[1;2C", 0, 0},
+            { XK_Right, Mod1Mask, "\033[1;3C", 0, 0},
+            { XK_Right, ShiftMask|Mod1Mask, "\033[1;4C", 0, 0},
+            { XK_Right, ControlMask, "\033[1;5C", 0, 0},
+            { XK_Right, ShiftMask|ControlMask, "\033[1;6C", 0, 0},
+            { XK_Right, ControlMask|Mod1Mask, "\033[1;7C", 0, 0},
+            { XK_Right, ShiftMask|ControlMask|Mod1Mask, "\033[1;8C", 0, 0},
+            { XK_Right, XK_ANY_MOD, "\033[C", 0, -1},
+            { XK_Right, XK_ANY_MOD, "\033OC", 0, +1},
+            { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0},
+            { XK_Return, Mod1Mask, "\033\r", 0, 0},
+            { XK_Return, XK_ANY_MOD, "\r", 0, 0},
+            { XK_Insert, ShiftMask, "\033[4l", -1, 0},
+            { XK_Insert, ShiftMask, "\033[2;2~", +1, 0},
+            { XK_Insert, ControlMask, "\033[L", -1, 0},
+            { XK_Insert, ControlMask, "\033[2;5~", +1, 0},
+            { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
+            { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
+            { XK_Delete, ControlMask, "\033[M", -1, 0},
+            { XK_Delete, ControlMask, "\033[3;5~", +1, 0},
+            { XK_Delete, ShiftMask, "\033[2K", -1, 0},
+            { XK_Delete, ShiftMask, "\033[3;2~", +1, 0},
+            { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0},
+            { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
+            { XK_BackSpace, XK_NO_MOD, "\177", 0, 0},
+            { XK_BackSpace, Mod1Mask, "\033\177", 0, 0},
+            { XK_Home, ShiftMask, "\033[2J", 0, -1},
+            { XK_Home, ShiftMask, "\033[1;2H", 0, +1},
+            { XK_Home, XK_ANY_MOD, "\033[H", 0, -1},
+            { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1},
+            { XK_End, ControlMask, "\033[J", -1, 0},
+            { XK_End, ControlMask, "\033[1;5F", +1, 0},
+            { XK_End, ShiftMask, "\033[K", -1, 0},
+            { XK_End, ShiftMask, "\033[1;2F", +1, 0},
+            { XK_End, XK_ANY_MOD, "\033[4~", 0, 0},
+            { XK_Prior, ControlMask, "\033[5;5~", 0, 0},
+            { XK_Prior, ShiftMask, "\033[5;2~", 0, 0},
+            { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
+            { XK_Next, ControlMask, "\033[6;5~", 0, 0},
+            { XK_Next, ShiftMask, "\033[6;2~", 0, 0},
+            { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0},
+            { XK_F1, XK_NO_MOD, "\033OP" , 0, 0},
+            { XK_F1, /* F13 */  ShiftMask, "\033[1;2P", 0, 0},
+            { XK_F1, /* F25 */  ControlMask, "\033[1;5P", 0, 0},
+            { XK_F1, /* F37 */  Mod4Mask, "\033[1;6P", 0, 0},
+            { XK_F1, /* F49 */  Mod1Mask, "\033[1;3P", 0, 0},
+            { XK_F1, /* F61 */  Mod3Mask, "\033[1;4P", 0, 0},
+            { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0},
+            { XK_F2, /* F14 */  ShiftMask, "\033[1;2Q", 0, 0},
+            { XK_F2, /* F26 */  ControlMask, "\033[1;5Q", 0, 0},
+            { XK_F2, /* F38 */  Mod4Mask, "\033[1;6Q", 0, 0},
+            { XK_F2, /* F50 */  Mod1Mask, "\033[1;3Q", 0, 0},
+            { XK_F2, /* F62 */  Mod3Mask, "\033[1;4Q", 0, 0},
+            { XK_F3, XK_NO_MOD, "\033OR" , 0, 0},
+            { XK_F3, /* F15 */  ShiftMask, "\033[1;2R", 0, 0},
+            { XK_F3, /* F27 */  ControlMask, "\033[1;5R", 0, 0},
+            { XK_F3, /* F39 */  Mod4Mask, "\033[1;6R", 0, 0},
+            { XK_F3, /* F51 */  Mod1Mask, "\033[1;3R", 0, 0},
+            { XK_F3, /* F63 */  Mod3Mask, "\033[1;4R", 0, 0},
+            { XK_F4, XK_NO_MOD, "\033OS" , 0, 0},
+            { XK_F4, /* F16 */  ShiftMask, "\033[1;2S", 0, 0},
+            { XK_F4, /* F28 */  ControlMask, "\033[1;5S", 0, 0},
+            { XK_F4, /* F40 */  Mod4Mask, "\033[1;6S", 0, 0},
+            { XK_F4, /* F52 */  Mod1Mask, "\033[1;3S", 0, 0},
+            { XK_F5, XK_NO_MOD, "\033[15~", 0, 0},
+            { XK_F5, /* F17 */  ShiftMask, "\033[15;2~", 0, 0},
+            { XK_F5, /* F29 */  ControlMask, "\033[15;5~", 0, 0},
+            { XK_F5, /* F41 */  Mod4Mask, "\033[15;6~", 0, 0},
+            { XK_F5, /* F53 */  Mod1Mask, "\033[15;3~", 0, 0},
+            { XK_F6, XK_NO_MOD, "\033[17~", 0, 0},
+            { XK_F6, /* F18 */  ShiftMask, "\033[17;2~", 0, 0},
+            { XK_F6, /* F30 */  ControlMask, "\033[17;5~", 0, 0},
+            { XK_F6, /* F42 */  Mod4Mask, "\033[17;6~", 0, 0},
+            { XK_F6, /* F54 */  Mod1Mask, "\033[17;3~", 0, 0},
+            { XK_F7, XK_NO_MOD, "\033[18~", 0, 0},
+            { XK_F7, /* F19 */  ShiftMask, "\033[18;2~", 0, 0},
+            { XK_F7, /* F31 */  ControlMask, "\033[18;5~", 0, 0},
+            { XK_F7, /* F43 */  Mod4Mask, "\033[18;6~", 0, 0},
+            { XK_F7, /* F55 */  Mod1Mask, "\033[18;3~", 0, 0},
+            { XK_F8, XK_NO_MOD, "\033[19~", 0, 0},
+            { XK_F8, /* F20 */  ShiftMask, "\033[19;2~", 0, 0},
+            { XK_F8, /* F32 */  ControlMask, "\033[19;5~", 0, 0},
+            { XK_F8, /* F44 */  Mod4Mask, "\033[19;6~", 0, 0},
+            { XK_F8, /* F56 */  Mod1Mask, "\033[19;3~", 0, 0},
+            { XK_F9, XK_NO_MOD, "\033[20~", 0, 0},
+            { XK_F9, /* F21 */  ShiftMask, "\033[20;2~", 0, 0},
+            { XK_F9, /* F33 */  ControlMask, "\033[20;5~", 0, 0},
+            { XK_F9, /* F45 */  Mod4Mask, "\033[20;6~", 0, 0},
+            { XK_F9, /* F57 */  Mod1Mask, "\033[20;3~", 0, 0},
+            { XK_F10, XK_NO_MOD, "\033[21~", 0, 0},
+            { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0},
+            { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0},
+            { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0},
+            { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0},
+            { XK_F11, XK_NO_MOD, "\033[23~", 0, 0},
+            { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0},
+            { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0},
+            { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0},
+            { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0},
+            { XK_F12, XK_NO_MOD, "\033[24~", 0, 0},
+            { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0},
+            { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0},
+            { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0},
+            { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0},
+            { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0},
+            { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0},
+            { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0},
+            { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0},
+            { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0},
+            { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0},
+            { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0},
+            { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0},
+            { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0},
+            { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0},
+            { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0},
+            { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0},
+            { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0},
+            { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0},
+            { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0},
+            { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0},
+            { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0},
+            { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0},
+            { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0},
+            { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0},
+            { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0},
+            { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0},
+            { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0},
+          };
+
+          static uint selmasks[] = {
+            [SEL_RECTANGULAR] = Mod1Mask,
+          };
+
+          static char ascii_printable[] =
+            " !\"#$%&'()*+,-./0123456789:;<=>?"
+            "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
+            "`abcdefghijklmnopqrstuvwxyz{|}~";
+        '';
+
+        patches = with pkgs; [
+          (fetchpatch {
+            url = "https://st.suckless.org/patches/anysize/st-anysize-20220718-baa9357.diff";
+            sha256 = "yx9VSwmPACx3EN3CAdQkxeoJKJxQ6ziC9tpBcoWuWHc=";
+          })
+        ];
+      })
+
+      xdotool
+    ];
+  };
+}