~ctb/kiss_packages

9bab89f6a4340394260f14873974bf3b623d7bf7 — Christopher Thomas Bohn 3 years ago
Initialize repository
A  => dmenu/build +8 -0
@@ 1,8 @@
#!/bin/sh -e

for patch in *.patch; do
        patch -p1 < $patch
done

make
make DESTDIR="$1" PREFIX=/usr install

A  => dmenu/checksums +2 -0
@@ 1,2 @@
b3971f4f354476a37b2afb498693649009b201550b0c7c88e866af8132b64945  dmenu-4.9.tar.gz
8ef14557b7f138060ee431fcf78cb4175843bcbf61dd4cae170361c2b2161a3e  00-config.patch

A  => dmenu/depends +3 -0
@@ 1,3 @@
libXft
libXinerama
xorg-server

A  => dmenu/patches/00-config.patch +21 -0
@@ 1,21 @@
--- dmenu-4.9/config.def.h
+++ dmenu-4.9-config/config.def.h
@@ -4,14 +4,14 @@
 static int topbar = 1;                      /* -b  option; if 0, dmenu appears at bottom     */
 /* -fn option overrides fonts[0]; default X11 font or font set */
 static const char *fonts[] = {
-	"monospace:size=10"
+	"Fira Code:size=14"
 };
 static const char *prompt      = NULL;      /* -p  option; prompt to the left of input field */
 static const char *colors[SchemeLast][2] = {
 	/*     fg         bg       */
-	[SchemeNorm] = { "#bbbbbb", "#222222" },
-	[SchemeSel] = { "#eeeeee", "#005577" },
-	[SchemeOut] = { "#000000", "#00ffff" },
+	[SchemeNorm] = { "#d0d0d0", "#3a3a3a" },
+	[SchemeSel] = { "#e4e4e4", "#85add4" },
+	[SchemeOut] = { "#3a3a3a", "#d0d0d0" },
 };
 /* -l option; if nonzero, dmenu uses vertical list with given number of lines */
 static unsigned int lines      = 0;

A  => dmenu/sources +2 -0
@@ 1,2 @@
https://dl.suckless.org/tools/dmenu-4.9.tar.gz
patches/00-config.patch

A  => dmenu/version +1 -0
@@ 1,1 @@
4.9 2 

A  => dwm/build +11 -0
@@ 1,11 @@
#!/bin/sh -e

# Amend install path to '/usr'.
sed -i'' "s#/usr/local#/usr#" config.mk

for patch in *.patch; do
        patch -p1 < $patch
done

make
make DESTDIR="$1" install

A  => dwm/checksums +5 -0
@@ 1,5 @@
97902e2e007aaeaa3c6e3bed1f81785b817b7413947f1db1d3b62b8da4cd110e  dwm-6.2.tar.gz
96d35796993e2da1a6ed6073df2e9f0a8f48043b66988ef5ca5d754223480a41  00-config.patch
35672d0838e48cdb1fec4bb16f37dd5ce6bf678b77b914c1dd33ce023abe1e23  01-uselessgaps.patch
770b11aa24aa0b28d576f727c810958125c9000b95eb94091769e70b5c5b8444  02-notitle.patch
757749dbde5b63116bacb2117093b72f50f411f09aafd2137bf6a511bf228273  03-scratchpad.patch

A  => dwm/depends +2 -0
@@ 1,2 @@
libXft
libXinerama

A  => dwm/patches/00-config.patch +88 -0
@@ 1,88 @@
Common subdirectories: dwm/.git and dwm-tmp/.git
--- dwm/config.def.h
+++ dwm-tmp/config.def.h
@@ -1,21 +1,20 @@
 /* See LICENSE file for copyright and license details. */
 
 /* appearance */
-static const unsigned int borderpx  = 1;        /* border pixel of windows */
+static const unsigned int borderpx  = 3;        /* border pixel of windows */
 static const unsigned int snap      = 32;       /* snap pixel */
 static const int showbar            = 1;        /* 0 means no bar */
 static const int topbar             = 1;        /* 0 means bottom bar */
-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 *fonts[]          = { "Fira Code:size=14" };
+static const char dmenufont[]       = "Fira Code:size=14";
+static const char col_gray1[]       = "#3a3a3a";
+static const char col_gray2[]       = "#d0d0d0";
+static const char col_gray3[]       = "#e4e4e4";
+static const char col_blue[]        = "#85add4";
 static const char *colors[][3]      = {
 	/*               fg         bg         border   */
-	[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
-	[SchemeSel]  = { col_gray4, col_cyan,  col_cyan  },
+	[SchemeNorm] = { col_gray2, col_gray1, col_gray1 },
+	[SchemeSel]  = { col_gray3, col_blue,  col_blue  },
 };
 
 /* tagging */
@@ -28,13 +27,12 @@
 	 */
 	/* class      instance    title       tags mask     isfloating   monitor */
 	{ "Gimp",     NULL,       NULL,       0,            1,           -1 },
-	{ "Firefox",  NULL,       NULL,       1 << 8,       0,           -1 },
 };
 
 /* layout(s) */
 static const float mfact     = 0.55; /* factor of master area size [0.05..0.95] */
 static const int nmaster     = 1;    /* number of clients in master area */
-static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */
+static const int resizehints = 0;    /* 1 means respect size hints in tiled resizals */
 
 static const Layout layouts[] = {
 	/* symbol     arrange function */
@@ -44,7 +42,7 @@
 };
 
 /* key definitions */
-#define MODKEY Mod1Mask
+#define MODKEY Mod4Mask
 #define TAGKEYS(KEY,TAG) \
 	{ MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
 	{ MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
@@ -56,23 +54,23 @@
 
 /* commands */
 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 *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray2, "-sb", col_blue, "-sf", col_gray3, NULL };
 static const char *termcmd[]  = { "st", NULL };
 
 static Key keys[] = {
 	/* modifier                     key        function        argument */
-	{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
-	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
+	{ MODKEY,                       XK_d,      spawn,          {.v = dmenucmd } },
+	{ MODKEY,	                XK_Return, spawn,          {.v = termcmd } },
 	{ MODKEY,                       XK_b,      togglebar,      {0} },
 	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
 	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
+	{ MODKEY,                       XK_o,      incnmaster,     {.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|ShiftMask,             XK_Return, zoom,           {0} },
 	{ MODKEY,                       XK_Tab,    view,           {0} },
-	{ MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
+	{ MODKEY,                       XK_q,      killclient,     {0} },
 	{ MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
 	{ MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
 	{ MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },

A  => dwm/patches/01-uselessgaps.patch +64 -0
@@ 1,64 @@
--- dwm-tmp/config.def.h
+++ dwm-tmp.bak/config.def.h
@@ -2,6 +2,7 @@
 
 /* appearance */
 static const unsigned int borderpx  = 3;        /* border pixel of windows */
+static const unsigned int gappx     = 6;        /* gaps between windows */
 static const unsigned int snap      = 32;       /* snap pixel */
 static const int showbar            = 1;        /* 0 means no bar */
 static const int topbar             = 1;        /* 0 means bottom bar */
--- dwm-tmp/dwm.c
+++ dwm-tmp.bak/dwm.c
@@ -52,8 +52,8 @@
 #define ISVISIBLE(C)            ((C->tags & C->mon->tagset[C->mon->seltags]))
 #define LENGTH(X)               (sizeof X / sizeof X[0])
 #define MOUSEMASK               (BUTTONMASK|PointerMotionMask)
-#define WIDTH(X)                ((X)->w + 2 * (X)->bw)
-#define HEIGHT(X)               ((X)->h + 2 * (X)->bw)
+#define WIDTH(X)                ((X)->w + 2 * (X)->bw + gappx)
+#define HEIGHT(X)               ((X)->h + 2 * (X)->bw + gappx)
 #define TAGMASK                 ((1 << LENGTH(tags)) - 1)
 #define TEXTW(X)                (drw_fontset_getwidth(drw, (X)) + lrpad)
 
@@ -1276,12 +1276,36 @@
 resizeclient(Client *c, int x, int y, int w, int h)
 {
 	XWindowChanges wc;
+	unsigned int n;
+	unsigned int gapoffset;
+	unsigned int gapincr;
+	Client *nbc;
 
-	c->oldx = c->x; c->x = wc.x = x;
-	c->oldy = c->y; c->y = wc.y = y;
-	c->oldw = c->w; c->w = wc.width = w;
-	c->oldh = c->h; c->h = wc.height = h;
 	wc.border_width = c->bw;
+
+	/* Get number of clients for the selected monitor */
+	for (n = 0, nbc = nexttiled(selmon->clients); nbc; nbc = nexttiled(nbc->next), n++);
+
+	/* Do nothing if layout is floating */
+	if (c->isfloating || selmon->lt[selmon->sellt]->arrange == NULL) {
+		gapincr = gapoffset = 0;
+	} else {
+		/* Remove border and gap if layout is monocle or only one client */
+		if (selmon->lt[selmon->sellt]->arrange == monocle || n == 1) {
+			gapoffset = 0;
+			gapincr = -2 * borderpx;
+			wc.border_width = 0;
+		} else {
+			gapoffset = gappx;
+			gapincr = 2 * gappx;
+		}
+	}
+
+	c->oldx = c->x; c->x = wc.x = x + gapoffset;
+	c->oldy = c->y; c->y = wc.y = y + gapoffset;
+	c->oldw = c->w; c->w = wc.width = w - gapincr;
+	c->oldh = c->h; c->h = wc.height = h - gapincr;
+
 	XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
 	configure(c);
 	XSync(dpy, False);

A  => dwm/patches/02-notitle.patch +64 -0
@@ 1,64 @@
--- dwm-uselessgaps/config.def.h
+++ dwm-notitle/config.def.h
@@ -102,7 +102,6 @@
 	/* click                event mask      button          function        argument */
 	{ 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} },
--- dwm-uselessgaps/dwm.c
+++ dwm-notitle/dwm.c
@@ -64,8 +64,8 @@
        NetWMFullscreen, NetActiveWindow, NetWMWindowType,
        NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
 enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
-enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
-       ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
+enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkClientWin,
+       ClkRootWin, ClkLast }; /* clicks */
 
 typedef union {
 	int i;
@@ -439,10 +439,8 @@
 			arg.ui = 1 << i;
 		} else if (ev->x < x + blw)
 			click = ClkLtSymbol;
-		else if (ev->x > selmon->ww - TEXTW(stext))
-			click = ClkStatusText;
 		else
-			click = ClkWinTitle;
+			click = ClkStatusText;
 	} else if ((c = wintoclient(ev->window))) {
 		focus(c);
 		restack(selmon);
@@ -729,15 +727,8 @@
 	x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
 
 	if ((w = m->ww - sw - x) > bh) {
-		if (m->sel) {
-			drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
-			drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
-			if (m->sel->isfloating)
-				drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0);
-		} else {
 			drw_setscheme(drw, scheme[SchemeNorm]);
 			drw_rect(drw, x, 0, w, bh, 1, 1);
-		}
 	}
 	drw_map(drw, m->barwin, 0, 0, m->ww, bh);
 }
@@ -1235,11 +1226,8 @@
 			drawbars();
 			break;
 		}
-		if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
+		if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName])
 			updatetitle(c);
-			if (c == c->mon->sel)
-				drawbar(c->mon);
-		}
 		if (ev->atom == netatom[NetWMWindowType])
 			updatewindowtype(c);
 	}

A  => dwm/patches/03-scratchpad.patch +89 -0
@@ 1,89 @@
Common subdirectories: dwm/.git and dwm-tmp/.git
--- dwm/config.def.h
+++ dwm-tmp/config.def.h
@@ -56,11 +56,14 @@
 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_gray2, "-sb", col_blue, "-sf", col_gray3, NULL };
 static const char *termcmd[]  = { "st", NULL };
+static const char scratchpadname[] = "scratchpad";
+static const char *scratchpadcmd[] = { "st", "-t", scratchpadname, "-g", "120x34", NULL };
 
 static Key keys[] = {
 	/* modifier                     key        function        argument */
 	{ MODKEY,                       XK_d,      spawn,          {.v = dmenucmd } },
 	{ MODKEY,	                XK_Return, spawn,          {.v = termcmd } },
+	{ MODKEY,                       XK_u,      togglescratch,  {.v = scratchpadcmd } },
 	{ MODKEY,                       XK_b,      togglebar,      {0} },
 	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
 	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
--- dwm/dwm.c
+++ dwm-tmp/dwm.c
@@ -212,6 +212,7 @@
 static void tile(Monitor *);
 static void togglebar(const Arg *arg);
 static void togglefloating(const Arg *arg);
+static void togglescratch(const Arg *arg);
 static void toggletag(const Arg *arg);
 static void toggleview(const Arg *arg);
 static void unfocus(Client *c, int setfocus);
@@ -272,6 +273,8 @@
 /* configuration, allows nested code to access above variables */
 #include "config.h"
 
+static unsigned int scratchtag = 1 << LENGTH(tags);
+
 /* compile-time check if all tags fit into an unsigned int bit array. */
 struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
 
@@ -1050,6 +1053,14 @@
 		&& (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my);
 	c->bw = borderpx;
 
+	selmon->tagset[selmon->seltags] &= ~scratchtag;
+	if (!strcmp(c->name, scratchpadname)) {
+		c->mon->tagset[c->mon->seltags] |= c->tags = scratchtag;
+		c->isfloating = True;
+		c->x = c->mon->wx + (c->mon->ww / 2 - WIDTH(c) / 2);
+		c->y = c->mon->wy + (c->mon->wh / 2 - HEIGHT(c) / 2);
+	}
+
 	wc.border_width = c->bw;
 	XConfigureWindow(dpy, w, CWBorderWidth, &wc);
 	XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel);
@@ -1642,6 +1653,7 @@
 {
 	if (arg->v == dmenucmd)
 		dmenumon[0] = '0' + selmon->num;
+	selmon->tagset[selmon->seltags] &= ~scratchtag;
 	if (fork() == 0) {
 		if (dpy)
 			close(ConnectionNumber(dpy));
@@ -1720,6 +1732,28 @@
 		resize(selmon->sel, selmon->sel->x, selmon->sel->y,
 			selmon->sel->w, selmon->sel->h, 0);
 	arrange(selmon);
+}
+
+void
+togglescratch(const Arg *arg)
+{
+	Client *c;
+	unsigned int found = 0;
+
+	for (c = selmon->clients; c && !(found = c->tags & scratchtag); c = c->next);
+	if (found) {
+		unsigned int newtagset = selmon->tagset[selmon->seltags] ^ scratchtag;
+		if (newtagset) {
+			selmon->tagset[selmon->seltags] = newtagset;
+			focus(NULL);
+			arrange(selmon);
+		}
+		if (ISVISIBLE(c)) {
+			focus(c);
+			restack(selmon);
+		}
+	} else
+		spawn(arg);
 }
 
 void

A  => dwm/sources +5 -0
@@ 1,5 @@
https://dl.suckless.org/dwm/dwm-6.2.tar.gz
patches/00-config.patch
patches/01-uselessgaps.patch
patches/02-notitle.patch
patches/03-scratchpad.patch

A  => dwm/version +1 -0
@@ 1,1 @@
6.2 1

A  => fira-code/build +6 -0
@@ 1,6 @@
#!/bin/sh -e

find ./ -name '*Windows*' -exec rm -rf {} +

install -dm755          "$1/usr/share/fonts/TTF"
install -Dm644 -- *.ttf "$1/usr/share/fonts/TTF"

A  => fira-code/checksums +1 -0
@@ 1,1 @@
21de9aa0edaa3fd2dc1d87fb9ecec0b67c9b3b18bd1998a19904158067fea7e7  FiraCode.zip

A  => fira-code/sources +1 -0
@@ 1,1 @@
https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/FiraCode.zip

A  => fira-code/version +1 -0
@@ 1,1 @@
2.1.0 1

A  => libgen-cli/build +3 -0
@@ 1,3 @@
#!/bin/sh -e

go build -o "$1/usr/bin/libgen-cli"

A  => libgen-cli/build.bak +4 -0
@@ 1,4 @@
#!/bin/sh -e

go build -o "$1/usr/bin/fzf"
install -Dm644 man/man1/fzf.1 "$1/usr/share/man/man1/fzf.1"

A  => libgen-cli/checksums +1 -0
@@ 1,1 @@
1dba6d8268ad8156492a1e57c2c8c7ee393154870c78cec3b9d5dc8cf72d7857  v1.0.5.tar.gz

A  => libgen-cli/depends +1 -0
@@ 1,1 @@
go

A  => libgen-cli/sources +1 -0
@@ 1,1 @@
https://github.com/ciehanski/libgen-cli/archive/v1.0.5.tar.gz

A  => libgen-cli/version +1 -0
@@ 1,1 @@
1.0.5 1

A  => openmoji/build +4 -0
@@ 1,4 @@
#!/bin/sh -e

install -dm755		"$1/usr/share/fonts/TTF"
install -Dm644 -- *.ttf "$1/usr/share/fonts/TTF"

A  => openmoji/checksums +1 -0
@@ 1,1 @@
f068ad956b636e5234d606968564ee93e3360499fa4ce38cfea0ed12629dee07  openmoji-font.zip

A  => openmoji/sources +1 -0
@@ 1,1 @@
https://github.com/hfg-gmuend/openmoji/releases/download/12.2.0/openmoji-font.zip

A  => openmoji/version +1 -0
@@ 1,1 @@
12.2.0 1

A  => sowm/build +8 -0
@@ 1,8 @@
#!/bin/sh -e

for patch in *.patch; do
	patch -p1 < $patch
done

make
make DESTDIR="$1" install

A  => sowm/checksums +2 -0
@@ 1,2 @@
7e1d1391f8cf8d1b04458d0b4bb3b61684b535dddcc1dd7d37266e81efd57e02  1.6.tar.gz
9c2850ae43f71e67f1034a6940d7d8cf895cdb3782aa2c2896293c3b7906fca5  58.patch

A  => sowm/depends +1 -0
@@ 1,1 @@
libX11

A  => sowm/patches/58.patch +130 -0
@@ 1,130 @@
From 7215a4915d5291e1d19837fca61077e9566b2216 Mon Sep 17 00:00:00 2001
From: Dylan Araps <dylan.araps@gmail.com>
Date: Fri, 21 Feb 2020 18:12:32 +0200
Subject: [PATCH] sowm: Rounded corners

---
 Makefile     |  2 +-
 config.def.h |  1 +
 sowm.c       | 42 ++++++++++++++++++++++++++++++++++++++++++
 sowm.h       |  1 +
 4 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 3450a85..ed361f9 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@ config.h:
 	cp config.def.h config.h
 
 sowm:
-	$(CC) -O3 $(CFLAGS) -o sowm sowm.c -lX11 $(LDFLAGS)
+	$(CC) -O3 $(CFLAGS) -o sowm sowm.c -lX11 -lXext $(LDFLAGS) 
 
 install: all
 	install -Dm755 sowm $(DESTDIR)$(BINDIR)/sowm
diff --git a/config.def.h b/config.def.h
index cae2009..32cf193 100644
--- a/config.def.h
+++ b/config.def.h
@@ -2,6 +2,7 @@
 #define CONFIG_H
 
 #define MOD Mod4Mask
+#define ROUND_CORNERS 20
 
 const char* menu[]    = {"dmenu_run",      0};
 const char* term[]    = {"st",             0};
diff --git a/sowm.c b/sowm.c
index 509e28f..16d7424 100644
--- a/sowm.c
+++ b/sowm.c
@@ -4,6 +4,7 @@
 #include <X11/XF86keysym.h>
 #include <X11/keysym.h>
 #include <X11/XKBlib.h>
+#include <X11/extensions/shape.h>
 #include <stdlib.h>
 #include <signal.h>
 #include <unistd.h>
@@ -61,6 +62,9 @@ void notify_motion(XEvent *e) {
         wy + (mouse.button == 1 ? yd : 0),
         MAX(1, ww + (mouse.button == 3 ? xd : 0)),
         MAX(1, wh + (mouse.button == 3 ? yd : 0)));
+  
+    if (mouse.button == 3)
+        win_round_corners(mouse.subwindow, ROUND_CORNERS);
 }
 
 void key_press(XEvent *e) {
@@ -142,6 +146,41 @@ void win_fs(const Arg arg) {
     } else {
         XMoveResizeWindow(d, cur->w, cur->wx, cur->wy, cur->ww, cur->wh);
     }
+  
+    win_round_corners(cur->w, cur->f ? 0 : ROUND_CORNERS);
+}
+
+void win_round_corners(Window w, int rad) {
+    unsigned int ww, wh, dia = 2 * rad;
+
+    win_size(w, &(int){1}, &(int){1}, &ww, &wh);
+
+    if (ww < dia || wh < dia) return;
+
+    Pixmap mask = XCreatePixmap(d, w, ww, wh, 1);
+
+    if (!mask) return;
+
+    XGCValues xgcv;
+    GC shape_gc = XCreateGC(d, mask, 0, &xgcv);
+
+    if (!shape_gc) {
+        XFreePixmap(d, mask);
+        return;
+    }
+
+    XSetForeground(d, shape_gc, 0);
+    XFillRectangle(d, mask, shape_gc, 0, 0, ww, wh);
+    XSetForeground(d, shape_gc, 1);
+    XFillArc(d, mask, shape_gc, 0, 0, dia, dia, 0, 23040);
+    XFillArc(d, mask, shape_gc, ww-dia-1, 0, dia, dia, 0, 23040);
+    XFillArc(d, mask, shape_gc, 0, wh-dia-1, dia, dia, 0, 23040);
+    XFillArc(d, mask, shape_gc, ww-dia-1, wh-dia-1, dia, dia, 0, 23040);
+    XFillRectangle(d, mask, shape_gc, rad, 0, ww-dia, wh);
+    XFillRectangle(d, mask, shape_gc, 0, rad, ww, wh-dia);
+    XShapeCombineMask(d, w, ShapeBounding, 0, 0, mask, ShapeSet);
+    XFreePixmap(d, mask);
+    XFreeGC(d, shape_gc);
 }
 
 void win_to_ws(const Arg arg) {
@@ -205,6 +244,8 @@ void configure_request(XEvent *e) {
         .sibling    = ev->above,
         .stack_mode = ev->detail
     });
+
+    win_round_corners(ev->window, ROUND_CORNERS);
 }
 
 void map_request(XEvent *e) {
@@ -217,6 +258,7 @@ void map_request(XEvent *e) {
 
     if (wx + wy == 0) win_center((Arg){0});
 
+    win_round_corners(w, ROUND_CORNERS);
     XMapWindow(d, w);
     win_focus(list->prev);
 }
diff --git a/sowm.h b/sowm.h
index 455ed93..d35c2f4 100644
--- a/sowm.h
+++ b/sowm.h
@@ -51,6 +51,7 @@ void win_focus(client *c);
 void win_kill(const Arg arg);
 void win_prev(const Arg arg);
 void win_next(const Arg arg);
+void win_round_corners(Window w, int rad);
 void win_to_ws(const Arg arg);
 void ws_go(const Arg arg);
 

A  => sowm/patches/76.patch +81 -0
@@ 1,81 @@
From a0abfa50545a44a9a83896d28999e27f669cfe04 Mon Sep 17 00:00:00 2001
From: Unixsys <64293761+Unixsys@users.noreply.github.com>
Date: Fri, 24 Apr 2020 21:13:18 -0500
Subject: [PATCH 1/3] Add window splitting functionality in sowm.c

---
 sowm.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/sowm.c b/sowm.c
index 9e2c58d..6ea6642 100644
--- a/sowm.c
+++ b/sowm.c
@@ -31,6 +31,18 @@ static void (*events[LASTEvent])(XEvent *e) = {
 
 #include "config.h"
 
+void win_half(const Arg arg) {
+     char m = arg.com[0][0];
+
+     win_size(cur->w, &wx, &wy, &ww, &wh);
+
+     XMoveResizeWindow(d, cur->w, \
+        (m == 'w' ? wx : m == 'e' ? (wx + ww / 2) : wx),
+        (m == 'n' ? wy : m == 's' ? (wy + wh / 2) : wy),
+        (m == 'w' ? (ww / 2) : m == 'e' ? (ww / 2) : ww),
+        (m == 'n' ? (wh / 2) : m == 's' ? (wh / 2) : wh));
+}
+
 void win_focus(client *c) {
     cur = c;
     XSetInputFocus(d, cur->w, RevertToParent, CurrentTime);

From 5ee73f8db7e2d7a65c30caa0c63efaabc711b7f8 Mon Sep 17 00:00:00 2001
From: Unixsys <64293761+Unixsys@users.noreply.github.com>
Date: Fri, 24 Apr 2020 21:16:03 -0500
Subject: [PATCH 2/3] Add keybinds for window splitting

---
 config.def.h | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/config.def.h b/config.def.h
index cae2009..86f0248 100644
--- a/config.def.h
+++ b/config.def.h
@@ -17,6 +17,12 @@ static struct key keys[] = {
     {MOD,      XK_q,   win_kill,   {0}},
     {MOD,      XK_c,   win_center, {0}},
     {MOD,      XK_f,   win_fs,     {0}},
+    
+    {MOD|Mod1Mask,  XK_k,  win_half,  {.com = (const char*[]){"n"}}},
+    {MOD|Mod1Mask,  XK_j,  win_half,  {.com = (const char*[]){"s"}}},
+    {MOD|Mod1Mask,  XK_l,  win_half,  {.com = (const char*[]){"e"}}},
+    {MOD|Mod1Mask,  XK_h,  win_half,  {.com = (const char*[]){"w"}}},
+
 
     {Mod1Mask,           XK_Tab, win_next,   {0}},
     {Mod1Mask|ShiftMask, XK_Tab, win_prev,   {0}},

From a65e215e833d16ee98a063cfd3bf7505c47ce883 Mon Sep 17 00:00:00 2001
From: Unixsys <64293761+Unixsys@users.noreply.github.com>
Date: Fri, 24 Apr 2020 21:16:52 -0500
Subject: [PATCH 3/3] add function declaration

---
 sowm.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sowm.h b/sowm.h
index 455ed93..0d49e36 100644
--- a/sowm.h
+++ b/sowm.h
@@ -51,6 +51,7 @@ void win_focus(client *c);
 void win_kill(const Arg arg);
 void win_prev(const Arg arg);
 void win_next(const Arg arg);
+void win_half(const Arg arg);
 void win_to_ws(const Arg arg);
 void ws_go(const Arg arg);
 

A  => sowm/sources +2 -0
@@ 1,2 @@
https://github.com/dylanaraps/sowm/archive/1.6.tar.gz
patches/58.patch

A  => sowm/version +1 -0
@@ 1,1 @@
1.6 1

A  => st/build +8 -0
@@ 1,8 @@
#!/bin/sh -e

for patch in *.patch; do
        patch -p1 < $patch
done

make
make PREFIX=/usr DESTDIR="$1" install

A  => st/checksums +2 -0
@@ 1,2 @@
939ae3da237e7c9489694853c205c7cbd5f2a2f0c17fe41a07477f1df8e28552  st-0.8.3.tar.gz
28359d872e7c32efdc128848da4653f082144aadb429973513c6b08b5974bc35  00-config.patch

A  => st/depends +4 -0
@@ 1,4 @@
fontconfig
libX11
libXft
ncurses    make

A  => st/patches/00-config.patch +78 -0
@@ 1,78 @@
--- ../st-0.8.3/config.def.h
+++ config.def.h
@@ -5,8 +5,8 @@
  *
  * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
  */
-static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
-static int borderpx = 2;
+static char *font = "Fira Code:pixelsize=18:antialias=true:autohint=true";
+static int borderpx = 8;
 
 /*
  * What program is execed by st depends of these precedence rules:
@@ -87,30 +87,28 @@
 /* Terminal colors (16 first used in escape sequence) */
 static const char *colorname[] = {
 	/* 8 normal colors */
-	"black",
-	"red3",
-	"green3",
-	"yellow3",
-	"blue2",
-	"magenta3",
-	"cyan3",
-	"gray90",
+	[0] = "#4e4e4e", /* black   */
+	[1] = "#d68787", /* red     */
+	[2] = "#5f885f", /* green   */
+	[3] = "#d8af5f", /* yellow  */
+	[4] = "#85add4", /* blue    */
+	[5] = "#d7afaf", /* magenta */
+	[6] = "#87afaf", /* cyan    */
+	[7] = "#d0d0d0", /* white   */
 
 	/* 8 bright colors */
-	"gray50",
-	"red",
-	"green",
-	"yellow",
-	"#5c5cff",
-	"magenta",
-	"cyan",
-	"white",
+	[8]  = "#626262", /* black   */
+	[9]  = "#d75f87", /* red     */
+	[10] = "#87af87", /* green   */
+	[11] = "#ffd787", /* yellow  */
+	[12] = "#add4fb", /* blue    */
+	[13] = "#ffafaf", /* magenta */
+	[14] = "#87d7d7", /* cyan    */
+	[15] = "#e4e4e4", /* white   */
 
-	[255] = 0,
-
-	/* more colors can be added after 255 to use with DefaultXX */
-	"#cccccc",
-	"#555555",
+	/* special colors */
+	[256] = "#3a3a3a", /* background */
+	[257] = "#d0d0d0", /* foreground */
 };
 
 
@@ -118,10 +116,10 @@
  * Default colors (colorname index)
  * foreground, background, cursor, reverse cursor
  */
-unsigned int defaultfg = 7;
-unsigned int defaultbg = 0;
-static unsigned int defaultcs = 256;
-static unsigned int defaultrcs = 257;
+unsigned int defaultfg = 257;
+unsigned int defaultbg = 256;
+static unsigned int defaultcs = 257;
+static unsigned int defaultrcs = 256;
 
 /*
  * Default shape of cursor

A  => st/sources +2 -0
@@ 1,2 @@
https://dl.suckless.org/st/st-0.8.3.tar.gz
patches/00-config.patch

A  => st/version +1 -0
@@ 1,1 @@
0.8.3 1

A  => xcape/build +5 -0
@@ 1,5 @@
#!/bin/sh -e

make
make DESTDIR="$1" install


A  => xcape/checksums +1 -0
@@ 1,1 @@
a27ed884fd94f03058af65a39edfe3af3f2f8fbb76ba9920002a76be07fb2821  v1.2.tar.gz

A  => xcape/depends +7 -0
@@ 1,7 @@
git
gcc
make
pkgconf
libX11
libXtst
libXi

A  => xcape/sources +1 -0
@@ 1,1 @@
https://github.com/alols/xcape/archive/v1.2.tar.gz

A  => xcape/version +1 -0
@@ 1,1 @@
1.2 1

A  => zsh-autosuggestions/build +17 -0
@@ 1,17 @@
#!/bin/sh -e


SRC_DIR    := ./src

SRC_FILES := \
	$(SRC_DIR)/config.zsh \
	$(SRC_DIR)/util.zsh \
	$(SRC_DIR)/bind.zsh \
	$(SRC_DIR)/highlight.zsh \
	$(SRC_DIR)/widgets.zsh \
	$(SRC_DIR)/strategies/*.zsh \
	$(SRC_DIR)/fetch.zsh \
	$(SRC_DIR)/async.zsh \
	$(SRC_DIR)/start.zsh

install -Dm644 "$1/usr/share/zsh/plugins/zsh-autosuggestions/zshautosuggestions.zsh"

A  => zsh-autosuggestions/checksums +1 -0
@@ 1,1 @@
0b6e251ced5fd7b5b78ea01f798ecc1b46169743a717567f0ec0a21198a372e8  v0.6.4.tar.gz

A  => zsh-autosuggestions/sources +1 -0
@@ 1,1 @@
https://github.com/zsh-users/zsh-autosuggestions/archive/v0.6.4.tar.gz

A  => zsh-autosuggestions/version +1 -0
@@ 1,1 @@
0.6.4 1

A  => zsh-syntax-highlighting/build +7 -0
@@ 1,7 @@
#!/bin/sh -e

install -Dm644 zsh-syntax-highlighting.zsh "$1/usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
install -Dm644 .version "$1/usr/share/zsh/plugins/zsh-syntax-highlighting/.version"
install -Dm644 .revision-hash "$1/usr/share/zsh/plugins/zsh-syntax-highlighting/.revision-hash"

cp -r highlighters "$1/usr/share/zsh/plugins/zsh-syntax-highlighting/"

A  => zsh-syntax-highlighting/checksums +1 -0
@@ 1,1 @@
f5044266ee198468b1bcec881a56e6399e209657d6ed9fa6d21175bc76afdefa  0.7.1.tar.gz

A  => zsh-syntax-highlighting/sources +1 -0
@@ 1,1 @@
https://github.com/zsh-users/zsh-syntax-highlighting/archive/0.7.1.tar.gz

A  => zsh-syntax-highlighting/version +1 -0
@@ 1,1 @@
0.7.1 1