diff --git a/README.md b/README.md
index bd1de89..55b123f 100644
--- a/README.md
+++ b/README.md
@@ -211,9 +211,15 @@ The ebuilds are liensed under the GPLv2-only license due to Gentoo's licensing.
* [speedwm-1.9.ebuild](./x11-wm/speedwm/speedwm-1.9.ebuild)
* [speedwm-9999.ebuild](./x11-wm/speedwm/speedwm-9999.ebuild)
* [speedwm-extras](./x11-wm/speedwm-extras)
- * [speedwm-extras-1.2.ebuild](./x11-wm/speedwm-extras/speedwm-extras-1.2.ebuild)
- * [speedwm-extras-1.3.ebuild](./x11-wm/speedwm-extras/speedwm-extras-1.3.ebuild)
- * [speedwm-extras-1.4.ebuild](./x11-wm/speedwm-extras/speedwm-extras-1.4.ebuild)
- * [speedwm-extras-1.5.ebuild](./x11-wm/speedwm-extras/speedwm-extras-1.5.ebuild)
- * [speedwm-extras-1.8.ebuild](./x11-wm/speedwm-extras/speedwm-extras-1.8.ebuild)
- * [speedwm-extras-9999.ebuild](./x11-wm/speedwm-extras/speedwm-extras-9999.ebuild)
+ * [speedwm-extras-1.2.ebuild](./x11-wm/speedwm-extras/speedwm-extras-1.2.ebuild)
+ * [speedwm-extras-1.3.ebuild](./x11-wm/speedwm-extras/speedwm-extras-1.3.ebuild)
+ * [speedwm-extras-1.4.ebuild](./x11-wm/speedwm-extras/speedwm-extras-1.4.ebuild)
+ * [speedwm-extras-1.5.ebuild](./x11-wm/speedwm-extras/speedwm-extras-1.5.ebuild)
+ * [speedwm-extras-1.8.ebuild](./x11-wm/speedwm-extras/speedwm-extras-1.8.ebuild)
+ * [speedwm-extras-9999.ebuild](./x11-wm/speedwm-extras/speedwm-extras-9999.ebuild)
+ * [speedwm-spde](./x11-wm/speedwm-spde)
+ * [files](./x11-wm/speedwm-spde/files)
+ * [keybinds.rl.h](./x11-wm/speedwm-spde/files/keybinds.rl.h)
+ * [mouse.rl.h](./x11-wm/speedwm-spde/files/mouse.rl.h)
+ * [speedwm-1.9-norl.patch](./x11-wm/speedwm-spde/files/speedwm-1.9-norl.patch)
+ * [speedwm-spde-9999.ebuild](./x11-wm/speedwm-spde/speedwm-spde-9999.ebuild)
diff --git a/README.md.html b/README.md.html
index bec3dc4..a3723ea 100644
--- a/README.md.html
+++ b/README.md.html
@@ -419,5 +419,18 @@ href="./x11-wm/speedwm-extras/speedwm-extras-1.8.ebuild">speedwm-extras-1.8.ebui
speedwm-extras-9999.ebuild
+speedwm-spde
+
diff --git a/metadata/md5-cache/x11-wm/speedwm-spde-1.9 b/metadata/md5-cache/x11-wm/speedwm-spde-1.9
new file mode 100644
index 0000000..3be5788
--- /dev/null
+++ b/metadata/md5-cache/x11-wm/speedwm-spde-1.9
@@ -0,0 +1,14 @@
+DEFINED_PHASES=compile install prepare
+DEPEND=media-libs/fontconfig x11-libs/libxcb x11-misc/xcb imlib2? ( media-libs/imlib2 ) x11-libs/libX11 x11-libs/libXft tcc? ( dev-lang/tcc ) x11-libs/pango xresources? ( x11-apps/xrdb ) ipc? ( dev-libs/yajl ) xinerama? ( x11-libs/libXinerama ) spmenu? ( x11-misc/spmenu )
+DESCRIPTION=speedwm: A simple fork of dwm, a window manager for X.
+EAPI=8
+HOMEPAGE=https://speedie.gq/speedwm
+INHERIT=toolchain-funcs
+IUSE=+xinerama +ipc +xresources +switcher +spmenu +systray +mouse +imlib2 +tcc
+KEYWORDS=~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86
+LICENSE=MIT
+RDEPEND=media-libs/fontconfig x11-libs/libxcb x11-misc/xcb imlib2? ( media-libs/imlib2 ) x11-libs/libX11 x11-libs/libXft tcc? ( dev-lang/tcc ) x11-libs/pango xresources? ( x11-apps/xrdb ) ipc? ( dev-libs/yajl ) xinerama? ( x11-libs/libXinerama ) spmenu? ( x11-misc/spmenu )
+SLOT=0
+SRC_URI=https://codeberg.org/speedie/speedwm/releases/download/1.9/speedwm-1.9.tar.gz
+_eclasses_=toolchain-funcs 6001248ef162a5fa2a21ce132a212f6b multilib 5ca4e49abed8e3a2f7b56920eadee157
+_md5_=0426865b80b28837f1e1ea00fa685bc5
diff --git a/metadata/md5-cache/x11-wm/speedwm-spde-9999 b/metadata/md5-cache/x11-wm/speedwm-spde-9999
new file mode 100644
index 0000000..8b637b1
--- /dev/null
+++ b/metadata/md5-cache/x11-wm/speedwm-spde-9999
@@ -0,0 +1,14 @@
+BDEPEND=>=dev-vcs/git-1.8.2.1[curl]
+DEFINED_PHASES=compile install prepare unpack
+DEPEND=media-libs/fontconfig x11-libs/libxcb x11-misc/xcb imlib2? ( media-libs/imlib2 ) x11-libs/libX11 x11-libs/libXft tcc? ( dev-lang/tcc ) x11-libs/pango xresources? ( x11-apps/xrdb ) ipc? ( dev-libs/yajl ) xinerama? ( x11-libs/libXinerama ) spmenu? ( x11-misc/spmenu )
+DESCRIPTION=speedwm: A simple fork of dwm, a window manager for X.
+EAPI=8
+HOMEPAGE=https://speedie.gq/speedwm
+INHERIT=toolchain-funcs git-r3
+IUSE=+xinerama +ipc +xresources +switcher +spmenu +systray +mouse +imlib2 +tcc
+LICENSE=MIT
+PROPERTIES=live
+RDEPEND=media-libs/fontconfig x11-libs/libxcb x11-misc/xcb imlib2? ( media-libs/imlib2 ) x11-libs/libX11 x11-libs/libXft tcc? ( dev-lang/tcc ) x11-libs/pango xresources? ( x11-apps/xrdb ) ipc? ( dev-libs/yajl ) xinerama? ( x11-libs/libXinerama ) spmenu? ( x11-misc/spmenu )
+SLOT=0
+_eclasses_=toolchain-funcs 6001248ef162a5fa2a21ce132a212f6b multilib 5ca4e49abed8e3a2f7b56920eadee157 git-r3 2347f8fe2d392b2a091191f94be37e6f
+_md5_=0426865b80b28837f1e1ea00fa685bc5
diff --git a/x11-misc/spde/spde-9999.ebuild b/x11-misc/spde/spde-9999.ebuild
index 94ba5a3..b2fa7e9 100644
--- a/x11-misc/spde/spde-9999.ebuild
+++ b/x11-misc/spde/spde-9999.ebuild
@@ -17,10 +17,11 @@ else
SRC_URI="https://codeberg.org/speedie/${PN}/releases/download/${PV}/${P}.tar.gz"
fi
-USE="+xinit sx +server +pywal +shells +fonts +editor +wm +terminal +runlauncher +locker +filemanager +email +temp +visualizer +pdf +music +video +flac +mixer +volumeicon +network +wifi +bluetooth +pipewire pulseaudio +compositor +image +irc +rss +torrent +browser +notification +xdg +locker +clipboard +screenshot +dev +wallpaper +git +pass +otp +htop btop +exa +conky +redshift +display +xrdb +remap"
+USE="+xinit sx +server +pywal +shells +fonts +editor +wm +extras +terminal +runlauncher +locker +filemanager +email +temp +visualizer +pdf +music +video +flac +mixer +volumeicon +network +wifi +bluetooth +pipewire pulseaudio +compositor +image +irc +rss +torrent +browser +notification +xdg +locker +clipboard +screenshot +dev +wallpaper +git +pass +otp +htop btop +exa +conky +redshift +display +xrdb +remap"
IUSE="${USE}"
-DEPEND="wm? ( x11-wm/speedwm x11-wm/libspeedwm x11-wm/speedwm-extras )
+DEPEND="wm? ( x11-wm/speedwm-spde )
+ extras? ( x11-wm/libspeedwm x11-wm/speedwm-extras )
terminal? ( x11-terms/st-spde )
runlauncher? ( x11-misc/spmenu )
locker? ( x11-misc/slock-spde )
diff --git a/x11-wm/speedwm-spde/files/keybinds.rl.h b/x11-wm/speedwm-spde/files/keybinds.rl.h
new file mode 100644
index 0000000..e82c1bc
--- /dev/null
+++ b/x11-wm/speedwm-spde/files/keybinds.rl.h
@@ -0,0 +1,256 @@
+/* These are all your keybinds.
+ *
+ * Event
+ *
+ * KeyPress - Activate when a key is pressed.
+ * KeyRelease - Activate when a key is released.
+ *
+ * Modifiers
+ *
+ * MODIFIER1 is what you defined below, default is Super)
+ * MODIFIER2 is what you defined below, default is Alt)
+ * SHIFT is unless changed going to be your Shift key.
+ * CONTROL is unless changed going to be your Control key.
+ * ALT unless changed is going to be your left Alt key.
+ * ALTR unless changed is going to be your right Alt key.
+ * SUPER unless changed is going to be your left Super (Windows/macOS Command) key.
+ * SUPERR unless changed is going to be your right Super (Windows/macOS Command) key.
+ *
+ * Example keybind:
+ *
+ * { KeyPress, MODIFIER1, -1, XK_1, spawn, cmd( TERMINAL "echo 'Hello world!' ) },
+ * { KeyRelease, MODIFIER1, XK_F1, XK_1, spawn, cmd( TERMINAL "echo 'Hello world! Pressing two keys in a row is based!' ) },
+ *
+ * It is recommended that you avoid using 'MODIFIER2' (Mod1Mask) by itself because it can break software defined shortcuts.
+ *
+ * If you need help, see the man page for speedwm.
+ * Once you're done with your edits, run 'make clean install'.
+ */
+
+/* For terminal keybinds */
+#define TERMINAL "st -e "
+
+
+/* Modifier keys
+ * Mod4Mask | Super (Windows/command) key
+ * Mod1Mask | Alt key
+ */
+#define MODIFIER1 Mod4Mask
+#define MODIFIER2 Mod1Mask
+
+/* Tag related keybinds */
+#define TAGKEYS(CHAIN,KEY,TAG) { KeyPress, MODIFIER1, CHAIN, KEY, view, {.ui = 1 << TAG } }, \
+ { KeyPress, MODIFIER1|SHIFT, CHAIN, KEY, previewtag, {.ui = TAG } }, \
+ { KeyPress, MODIFIER1|CONTROL, CHAIN, KEY, toggleview, {.ui = 1 << TAG } }, \
+ { KeyPress, MODIFIER1|SHIFT|CONTROL, CHAIN, KEY, tag, {.ui = 1 << TAG } },
+
+/* Keybinds */
+static Key keys[] = {
+ /* type modifier chain key key function argument */
+
+ /* Run keybinds */
+ { KeyPress, MODIFIER1, -1, XK_semicolon, spawn, cmd( "j4-dmenu-desktop --term=st --dmenu='spmenu -l 20 -p Open:'" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_semicolon, spawn, cmd( "spmenu_run -l 0 -p 'Run:' -na" ) },
+
+ /* Application keybinds */
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_Return, spawn, cmd( TERMINAL ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_s, spawn, cmd( "speedwm-screenshotutil -s" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_f, spawn, cmd( TERMINAL "lfrun || lf" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_w, spawn, cmd( "chromium || chromium-bin" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_o, spawn, cmd( "speedwm-dfmpeg" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_t, spawn, cmd( TERMINAL "nvim" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_a, spawn, cmd( TERMINAL "speedwm-audioctrl -runmixer" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_m, spawn, cmd( TERMINAL "tmux new-session -A -D -s cmus $(which --skip-alias cmus)" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_Tab, spawn, cmd( "speedwm-winnav" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_x, spawn, cmd( TERMINAL "htop" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_c, spawn, cmd( TERMINAL "tmux new-session -A -D -s weechat $(which --skip-alias weechat)" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_Escape, spawn, cmd( "speedwm-shutdown" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_u, spawn, cmd( TERMINAL "newsboat" ) },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_r, spawn, cmd( TERMINAL "neomutt" ) },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_Tab, spawn, cmd( "speedwm-utils layout" ) },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_s, spawn, cmd( "speedwm-screenshotutil -f" ) },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_m, spawn, cmd( "pkill cmus" ) },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_q, spawn, cmd( "speedwm-audioctrl -mute" ) },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_w, spawn, cmd( "speedwm-audioctrl -lower" ) },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_e, spawn, cmd( "speedwm-audioctrl -raise" ) },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_q, spawn, cmd( "cmus-remote --pause" ) },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_w, spawn, cmd( "cmus-remote --volume -3000" ) },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_e, spawn, cmd( "cmus-remote --volume +3000" ) },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_Escape, spawn, cmd( "speedwm-utils" ) },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_s, spawn, cmd( "speedwm-swal" ) },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_n, spawn, cmd( "speedwm-netctrl" ) },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_b, spawn, cmd( "speedwm-btctrl" ) },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_r, spawn, cmd( "libspeedwm --perform core_wm_restart" ) },
+
+ /* Switcher */
+ { KeyPress, MODIFIER1, -1, XK_Tab, switcherstart, {0} },
+
+ /* Systray */
+ { KeyPress, MODIFIER1, -1, XK_s, togglesystray, {0} },
+
+ /* Layout keybinds */
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_a, cyclelayout, {.i = -1 } },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_d, cyclelayout, {.i = +1 } },
+
+ /* Scratchpad keybinds */
+ { KeyPress, MODIFIER1, -1, XK_minus, scratchpad_show, {0} },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_minus, scratchpad_hide, {0} },
+ { KeyPress, MODIFIER1, -1, XK_equal, scratchpad_remove, {0} },
+
+ /* speedwm general binds */
+ { KeyPress, MODIFIER1, -1, XK_f, togglefullscr, {0} },
+ { KeyPress, MODIFIER1, -1, XK_b, togglebar, {0} },
+ { KeyPress, MODIFIER1, -1, XK_r, resetmastercount, {0} },
+ { KeyPress, MODIFIER1, -1, XK_m, focusmaster, {0} },
+ { KeyPress, MODIFIER1, -1, XK_j, focusstackvis, {.i = +1 } },
+ { KeyPress, MODIFIER1, -1, XK_k, focusstackvis, {.i = -1 } },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_j, focusstackhid, {.i = +1 } },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_k, focusstackhid, {.i = -1 } },
+ { KeyPress, MODIFIER1, -1, XK_a, setmfact, {.f = -0.05} },
+ { KeyPress, MODIFIER1, -1, XK_d, setmfact, {.f = +0.05} },
+ { KeyPress, MODIFIER1, -1, XK_0, reset_mfact, {0} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_k, setcfact, {.f = +0.25} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_j, setcfact, {.f = -0.25} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_0, setcfact, {.f = 0.00} },
+ { KeyPress, MODIFIER1, -1, XK_Return, zoom, {0} },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_Return, mirrorlayout, {0} },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_q, killclient, {0} },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_space, togglefloating, {0} },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_0, view, {.ui = ~0 } },
+ { KeyPress, MODIFIER1, -1, XK_d, focusmon, {.i = -1 } },
+ { KeyPress, MODIFIER1, -1, XK_slash, focusmon, {.i = +1 } },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_d, tagmon, {.i = -1 } },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_slash, tagmon, {.i = +1 } },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_j, inplacerotate, {.i = +1} },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_k, inplacerotate, {.i = -1} },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_h, inplacerotate, {.i = +2} },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_l, inplacerotate, {.i = -2} },
+ { KeyPress, MODIFIER1, -1, XK_n, incmastercount, {.i = -1 } },
+ { KeyPress, MODIFIER1, -1, XK_i, incmastercount, {.i = +1 } },
+ { KeyPress, MODIFIER1, -1, XK_y, togglesticky, {0} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_0, resetbarheight, {0} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_equal, setbarheight, {.i = +1} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_minus, setbarheight, {.i = -1} },
+ { KeyPress, MODIFIER1, -1, XK_period, setbarpadding, {.i = +1 } },
+ { KeyPress, MODIFIER1, -1, XK_comma, setbarpadding, {.i = -1 } },
+ { KeyPress, MODIFIER1, -1, XK_v, centerwindow, {0} },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_period, setbpgaps, {.i = +1 } },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_comma, setbpgaps, {.i = -1 } },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_slash, resetbpgaps, {0} },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_i, incstackcount, {.i = +1 } },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_u, incstackcount, {.i = -1 } },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_period, setbpgaps, {.i = +5 } },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_comma, setbpgaps, {.i = -5 } },
+
+ /* Floating mode keybinds */
+ { KeyPress, MODIFIER1, -1, XK_w, moveresizeaspect, {.i = +24} },
+ { KeyPress, MODIFIER1, -1, XK_e, moveresizeaspect, {.i = -24} },
+ { KeyPress, MODIFIER1, -1, XK_Down, moveresize, {.v = "0x 25y 0w 0h" } },
+ { KeyPress, MODIFIER1, -1, XK_Up, moveresize, {.v = "0x -25y 0w 0h" } },
+ { KeyPress, MODIFIER1, -1, XK_Right, moveresize, {.v = "25x 0y 0w 0h" } },
+ { KeyPress, MODIFIER1, -1, XK_Left, moveresize, {.v = "-25x 0y 0w 0h" } },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_Down, moveresize, {.v = "0x 0y 0w 25h" } },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_Up, moveresize, {.v = "0x 0y 0w -25h" } },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_Right, moveresize, {.v = "0x 0y 25w 0h" } },
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_Left, moveresize, {.v = "0x 0y -25w 0h" } },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_Up, moveresizeedge, {.v = "t"} },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_Down, moveresizeedge, {.v = "b"} },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_Left, moveresizeedge, {.v = "l"} },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_Right, moveresizeedge, {.v = "r"} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_Up, moveresizeedge, {.v = "T"} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_Down, moveresizeedge, {.v = "B"} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_Left, moveresizeedge, {.v = "L"} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_Right, moveresizeedge, {.v = "R"} },
+
+ /* Tag keybinds */
+ TAGKEYS( -1, XK_1, 0)
+ TAGKEYS( -1, XK_2, 1)
+ TAGKEYS( -1, XK_3, 2)
+ TAGKEYS( -1, XK_4, 3)
+ TAGKEYS( -1, XK_5, 4)
+ TAGKEYS( -1, XK_6, 5)
+ TAGKEYS( -1, XK_7, 6)
+ TAGKEYS( -1, XK_8, 7)
+ TAGKEYS( -1, XK_9, 8)
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_a, viewtoleft, {0} },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_d, viewtoright, {0} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_z, viewtoleft_vacant, {0} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_c, viewtoright_vacant, {0} },
+
+ /* Marking */
+ { KeyPress, MODIFIER1, -1, XK_bracketleft, swapfocus, {0} },
+ { KeyPress, MODIFIER1, -1, XK_bracketright, swapclient, {0} },
+ { KeyPress, MODIFIER1, -1, XK_backslash, togglemark, {0} },
+
+ /* Hide/Show keybinds */
+ { KeyPress, MODIFIER1, -1, XK_o, hide, {0} },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_o, show, {0} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_o, showall, {0} },
+ { KeyPress, MODIFIER1|CONTROL|SHIFT, -1, XK_p, hideall, {0} },
+
+ /* Chained keybinds */
+ { KeyPress, MODIFIER1, XK_r, XK_s, spawn, cmd( "pgrep -x screenkey && pkill screenkey || screenkey" ) },
+ { KeyPress, MODIFIER1, XK_t, XK_r, reorganizetags, {0} },
+ { KeyPress, MODIFIER1, XK_p, XK_t, togglebarpadding, {0} },
+ { KeyPress, MODIFIER1, XK_p, XK_u, setbarpadding, {.i = +5 } },
+ { KeyPress, MODIFIER1, XK_p, XK_d, setbarpadding, {.i = -5 } },
+ { KeyPress, MODIFIER1, XK_p, XK_r, resetbarpadding, {0} },
+
+ /* Chained layout keybinds */
+ { KeyPress, MODIFIER1, XK_l, XK_q, rotatelayoutaxis, {.i = +1 } }, /* layout axis */
+ { KeyPress, MODIFIER1, XK_l, XK_w, rotatelayoutaxis, {.i = +2 } }, /* master axis */
+ { KeyPress, MODIFIER1, XK_l, XK_e, rotatelayoutaxis, {.i = +3 } }, /* stack axis */
+ { KeyPress, MODIFIER1, XK_l, XK_r, rotatelayoutaxis, {.i = +4 } }, /* secondary stack axis */
+ { KeyPress, MODIFIER1, XK_l, XK_a, rotatelayoutaxis, {.i = -1 } }, /* layout axis */
+ { KeyPress, MODIFIER1, XK_l, XK_s, rotatelayoutaxis, {.i = -2 } }, /* master axis */
+ { KeyPress, MODIFIER1, XK_l, XK_d, rotatelayoutaxis, {.i = -3 } }, /* stack axis */
+ { KeyPress, MODIFIER1, XK_l, XK_f, rotatelayoutaxis, {.i = -4 } }, /* secondary stack axis */
+ { KeyPress, MODIFIER1, XK_l, XK_1, setlayout, {.v = &layouts[0]} },
+ { KeyPress, MODIFIER1, XK_l, XK_2, setlayout, {.v = &layouts[1]} },
+ { KeyPress, MODIFIER1, XK_l, XK_3, setlayout, {.v = &layouts[2]} },
+ { KeyPress, MODIFIER1, XK_l, XK_4, setlayout, {.v = &layouts[3]} },
+ { KeyPress, MODIFIER1, XK_l, XK_5, setlayout, {.v = &layouts[4]} },
+ { KeyPress, MODIFIER1, XK_l, XK_6, setlayout, {.v = &layouts[5]} },
+ { KeyPress, MODIFIER1, XK_l, XK_7, setlayout, {.v = &layouts[6]} },
+ { KeyPress, MODIFIER1, XK_l, XK_8, setlayout, {.v = &layouts[7]} },
+ { KeyPress, MODIFIER1, XK_l, XK_9, setlayout, {.v = &layouts[8]} },
+ { KeyPress, MODIFIER1, XK_l, XK_0, setlayout, {.v = &layouts[9]} },
+
+ /* Chained toggle keybinds */
+ { KeyPress, MODIFIER1, XK_t, XK_t, togglebartags, {0} },
+ { KeyPress, MODIFIER1, XK_t, XK_y, togglebaremptytags, {0} },
+ { KeyPress, MODIFIER1, XK_t, XK_w, togglebartitle, {0} },
+ { KeyPress, MODIFIER1, XK_t, XK_u, togglebarunseltitle, {0} },
+ { KeyPress, MODIFIER1, XK_t, XK_s, togglebarstatus, {0} },
+ { KeyPress, MODIFIER1, XK_t, XK_l, togglebarlt, {0} },
+ { KeyPress, MODIFIER1, XK_t, XK_i, togglebaricon, {0} },
+ { KeyPress, MODIFIER1, XK_t, XK_o, toggleopacity, {0} },
+
+ /* Misc */
+ { KeyPress, MODIFIER1|SHIFT, -1, XK_backslash, killunsel, {0} },
+
+ { KeyPress, MODIFIER1|SHIFT, XK_e, XK_p, spawn, cmd( "speedwm-swal --previous" ) },
+ { KeyPress, MODIFIER1|SHIFT, XK_e, XK_r, spawn, cmd( "speedwm-swal --randomize" ) },
+ { KeyPress, MODIFIER1|SHIFT, XK_e, XK_a, spawn, cmd( "speedwm-virtualkeyboard" ) },
+ { KeyPress, MODIFIER1|SHIFT, XK_e, XK_e, spawn, cmd( "speedwm-virtualkeyboard -e" ) },
+
+ /* Gap keybinds */
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_z, incrgaps, {.i = +5 } },
+ { KeyPress, MODIFIER1|CONTROL, -1, XK_x, incrgaps, {.i = -5 } },
+
+ /* Media buttons */
+ { KeyPress, 0, -1, XF86XK_AudioMute, spawn, cmd( "speedwm-audioctrl -mute" ) },
+ { KeyPress, 0, -1, XF86XK_AudioRaiseVolume, spawn, cmd( "speedwm-audioctrl -raise" ) },
+ { KeyPress, 0, -1, XF86XK_AudioLowerVolume, spawn, cmd( "speedwm-audioctrl -lower" ) },
+ { KeyPress, 0, -1, XF86XK_AudioPrev, spawn, cmd( "cmus-remote --prev" ) },
+ { KeyPress, 0, -1, XF86XK_AudioNext, spawn, cmd( "cmus-remote --next" ) },
+ { KeyPress, 0, -1, XF86XK_AudioStop, spawn, cmd( "pkill cmus" ) },
+ { KeyPress, 0, -1, XF86XK_AudioPause, spawn, cmd( "cmus-remote --pause" ) },
+ { KeyPress, 0, -1, XF86XK_WWW, spawn, cmd( "qutebrowser" ) },
+ { KeyPress, 0, -1, XF86XK_PowerOff, spawn, cmd( "speedwm-shutdown" ) },
+ { KeyPress, 0, -1, XF86XK_Sleep, spawn, cmd( "slock" ) },
+ { KeyPress, 0, -1, XF86XK_Mail, spawn, cmd( TERMINAL "neomutt" ) },
+ { KeyPress, 0, -1, XF86XK_TaskPane, spawn, cmd( TERMINAL "htop" ) },
+ { KeyPress, 0, -1, XF86XK_WLAN, spawn, cmd( "speedwm-netctrl disconnect" ) },
+ { KeyPress, 0, -1, XF86XK_Music, spawn, cmd( TERMINAL "tmux new-session -A -D -s cmus $(which --skip-alias cmus)" ) },
+};
diff --git a/x11-wm/speedwm-spde/files/mouse.rl.h b/x11-wm/speedwm-spde/files/mouse.rl.h
new file mode 100644
index 0000000..c651e32
--- /dev/null
+++ b/x11-wm/speedwm-spde/files/mouse.rl.h
@@ -0,0 +1,49 @@
+/* Mouse bindings
+ *
+ * This header contains mouse binds.
+ * Change them, or remove them if you prefer. You can also add more if you want.
+ * Once you're done with your edits, run 'make clean install'.
+ *
+ * To disable all mouse binds, edit toggle.h.
+ *
+ * clicklayout - Layout icon
+ * clicktitle - Window title
+ * clickstatusbar - Status text
+ * clickroot - Root window (background)
+ * clicktags - Tags
+ * clickclient - Window
+ *
+ * Button1 - Left click
+ * Button2 - Middle click
+ * Button3 - Right click
+ * Button4 - Scroll up
+ * Button5 - Scroll down
+ */
+
+/* Actions when the mouse clicks a part of the screen */
+static const Button buttons[] = {
+ /* click event mask button function argument */
+ { clicklayout, 0, Button2, spawn, cmd( "speedwm-utils layout" ) },
+ { clicklayout, 0, Button1, cyclelayout, {.i = +1 } },
+ { clicklayout, 0, Button3, cyclelayout, {.i = -1 } },
+ { clicklayout, 0, Button4, cyclelayout, {.i = +1 } },
+ { clicklayout, 0, Button5, cyclelayout, {.i = -1 } },
+ { clicktitle, 0, Button2, zoom, {0} },
+ { clickclient, MODIFIER1, Button1, moveorplace, {.i = 1} },
+ { clickclient, MODIFIER1, Button2, togglefloating, {0} },
+ { clickclient, MODIFIER1|ControlMask, Button3, dragcfact, {0} },
+ { clickclient, MODIFIER1, Button3, dragmfact, {0} },
+ { clickstatusbar, 0, Button1, spawn, {.v = clickstatus } },
+ { clickstatusbar, 0, Button2, spawn, {.v = clickstatus } },
+ { clickstatusbar, 0, Button3, spawn, {.v = clickstatus } },
+ { clicktitle, 0, Button3, spawn, cmd( "speedwm-utils" ) },
+ { clicktitle, 0, Button1, togglewin, {0} },
+ { clicktitle, 0, Button4, inplacerotate, {.i = +2} },
+ { clicktitle, 0, Button5, inplacerotate, {.i = -2} },
+ { clickroot, 0, Button3, spawn, cmd( "j4-dmenu-desktop --term=st --dmenu='spmenu -l 20 -p Open:'" ) },
+ { clicktags, 0, Button1, view, {0} },
+ { clicktags, 0, Button4, viewtoleft, {0} },
+ { clicktags, 0, Button5, viewtoright, {0} },
+ { clicktags, MODIFIER1, Button4, viewtoleft_vacant, {0} },
+ { clicktags, MODIFIER1, Button5, viewtoright_vacant, {0} },
+};
diff --git a/x11-wm/speedwm-spde/files/speedwm-1.9-norl.patch b/x11-wm/speedwm-spde/files/speedwm-1.9-norl.patch
new file mode 100644
index 0000000..72469f4
--- /dev/null
+++ b/x11-wm/speedwm-spde/files/speedwm-1.9-norl.patch
@@ -0,0 +1,39 @@
+diff -up a/Makefile b/Makefile
+--- a/Makefile 2023-02-04 13:03:26.340081699 +0100
++++ b/Makefile 2023-02-04 13:04:07.621905463 +0100
+@@ -29,23 +29,7 @@ options:
+ @echo
+
+ .c.o:
+- cp bar.h bar.def.h
+- cp options.h options.def.h
+- cp keybinds.h keybinds.def.h
+- cp mouse.h mouse.def.h
+- [ -f "bar.rl.h" ] && cp bar.rl.h bar.h || :
+- [ -f "options.rl.h" ] && cp options.rl.h options.h || :
+- [ -f "keybinds.rl.h" ] && cp keybinds.rl.h keybinds.h || :
+- [ -f "mouse.rl.h" ] && cp mouse.rl.h mouse.h || :
+ ${CC} -c ${CFLAGS} -g $<
+- mv bar.def.h bar.h
+- mv options.def.h options.h
+- mv keybinds.def.h keybinds.h
+- mv mouse.def.h mouse.h
+- chmod 0777 bar.h
+- chmod 0777 options.h
+- chmod 0777 keybinds.h
+- chmod 0777 mouse.h
+
+ ${OBJ}: options.mk
+
+@@ -54,11 +38,7 @@ speedwm: ${OBJ}
+
+ ifdef USESTATUS
+ status: status.o
+- cp status.h status.def.h
+- [ -f "status.rl.h" ] && cp status.rl.h status.h || :
+ $(CC) status.o $(CFLAGS) $(LDFLAGS) -o speedwm_status
+- mv status.def.h status.h
+- chmod 0777 status.h
+ status.o: status.c status.h
+ $(CC) -c status.c
+ endif
diff --git a/x11-wm/speedwm-spde/speedwm-spde-9999.ebuild b/x11-wm/speedwm-spde/speedwm-spde-9999.ebuild
new file mode 100644
index 0000000..3934644
--- /dev/null
+++ b/x11-wm/speedwm-spde/speedwm-spde-9999.ebuild
@@ -0,0 +1,108 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="speedwm: A simple fork of dwm, a window manager for X."
+HOMEPAGE="https://speedie.gq/speedwm"
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://codeberg.org/speedie/speedwm.git"
+else
+ SRC_URI="https://codeberg.org/speedie/speedwm/releases/download/${PV}/speedwm-${PV}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+IUSE="+xinerama +ipc +xresources +switcher +spmenu +systray +mouse +imlib2 +tcc"
+
+PATCHES+=( "${FILESDIR}"/speedwm-1.9-norl.patch )
+
+RDEPEND="
+ media-libs/fontconfig
+ x11-libs/libxcb
+ x11-misc/xcb
+ imlib2? ( media-libs/imlib2 )
+ x11-libs/libX11
+ x11-libs/libXft
+ tcc? ( dev-lang/tcc )
+ x11-libs/pango
+ xresources? ( x11-apps/xrdb )
+ ipc? ( dev-libs/yajl )
+ xinerama? ( x11-libs/libXinerama )
+ spmenu? ( x11-misc/spmenu )
+"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ default
+
+ # disable features
+ # xresources
+ if ! use xresources; then
+ sed -i "s/#define USEXRESOURCES 1/#define USEXRESOURCES 0/g" toggle.h
+ echo "" > xresources.h
+ fi
+
+ # systray
+ if ! use systray; then
+ sed -i "s/#define USESYSTRAY 1/#define USESYSTRAY 0/g" toggle.h
+ fi
+
+ # mouse
+ if ! use mouse; then
+ sed -i "s/#define USEMOUSE 1/#define USEMOUSE 0/g" toggle.h
+ echo "" > mouse.h
+ echo "" > statusbar.h
+ fi
+
+ # alt tab
+ if ! use switcher; then
+ sed -i "s/#define USESWITCHER 1/#define USESWITCHER 0/g" toggle.h
+ fi
+
+ # imlib
+ if ! use imlib2; then
+ sed -i "s/#define USEIMLIB2 1/#define USEIMLIB2 0/g" toggle.h
+ sed -i "s/#define USEWINICON 1/#define USEWINICON 0/g" toggle.h
+ sed -i "s/#define USETAGPREVIEW 1/#define USETAGPREVIEW 0/g" toggle.h
+ sed -i "s/IMLIB2LIBS = -lImlib2//g" toggle.mk
+ fi
+
+ # ipc
+ if ! use ipc; then
+ sed -i "s/#define USEIPC 1/#define USEIPC 0/g" toggle.h
+ sed -i "s/YAJLLIBS = -lyajl//g" toggle.mk
+ sed -i "s|YAJLINC = /usr/include/yajl||g" toggle.mk
+ echo "" > ipc.h
+ fi
+
+ cp "${FILESDIR}/keybinds.rl.h" "keybinds.h"
+ cp "${FILESDIR}/mouse.rl.h" "mouse.h"
+}
+
+src_compile() {
+ :
+}
+
+src_install() {
+ mkdir -p "${D}${EPREFIX}/usr/share/fonts"
+
+ if use tcc; then
+ if use xinerama; then
+ emake DESTDIR="${D}" CC="tcc" PREFIX="${EPREFIX}/usr" install
+ else
+ emake DESTDIR="${D}" CC="tcc" PREFIX="${EPREFIX}/usr" XINERAMAFLAGS="" XINERAMALIBS="" install
+ fi
+ else
+ if use xinerama; then
+ emake DESTDIR="${D}" CC="cc" PREFIX="${EPREFIX}/usr" install
+ else
+ emake DESTDIR="${D}" CC="cc" PREFIX="${EPREFIX}/usr" XINERAMAFLAGS="" XINERAMALIBS="" install
+ fi
+ fi
+}