From 4b3b3da066cdc74a384c8b34a9eb10cbffdc44b8 Mon Sep 17 00:00:00 2001
From: A Farzat <a@farzat.xyz>
Date: Tue, 22 Oct 2024 14:25:32 +0900
Subject: Add slock patches and config.h to paru

---
 .config/paru/pkg_config/slock/config.h             |  42 +++
 ...y-foreground-and-background-patch-modified.diff | 338 +++++++++++++++++++++
 .../0002-Apply-capscolor-patch-modified.diff       |  88 ++++++
 .../slock/patches/0003-Apply-mediakeys-patch.diff  |  47 +++
 ...ake-sure-the-keyboard-layout-is-US-english.diff |  26 ++
 ...0005-Apply-alternate-colors-patch-modified.diff |  48 +++
 6 files changed, 589 insertions(+)
 create mode 100644 .config/paru/pkg_config/slock/config.h
 create mode 100644 .config/paru/pkg_config/slock/patches/0001-Apply-foreground-and-background-patch-modified.diff
 create mode 100644 .config/paru/pkg_config/slock/patches/0002-Apply-capscolor-patch-modified.diff
 create mode 100644 .config/paru/pkg_config/slock/patches/0003-Apply-mediakeys-patch.diff
 create mode 100644 .config/paru/pkg_config/slock/patches/0004-Make-sure-the-keyboard-layout-is-US-english.diff
 create mode 100644 .config/paru/pkg_config/slock/patches/0005-Apply-alternate-colors-patch-modified.diff

(limited to '.config/paru/pkg_config/slock')

diff --git a/.config/paru/pkg_config/slock/config.h b/.config/paru/pkg_config/slock/config.h
new file mode 100644
index 0000000..9924375
--- /dev/null
+++ b/.config/paru/pkg_config/slock/config.h
@@ -0,0 +1,42 @@
+/* user and group to drop privileges to */
+static const char *user  = "nobody";
+static const char *group = "nobody";
+
+static const char *colorname[NUMCOLS] = {
+	[INIT] =   "black",     /* after initialization */
+	[INPUT] =  "#005577",   /* during input */
+	[INPUT_ALT] = "#227799", /* during input, second color */
+	[FAILED] = "#CC3333",   /* wrong password */
+	[CAPS] =   "#33CCCC",   /* CapsLock on */
+};
+
+/* treat a cleared input like a wrong password (color) */
+static const int failonclear = 0;
+
+/* insert grid pattern with scale 1:1, the size can be changed with logosize */
+static const int logosize = 75;
+/* grid width and height for right center alignment */
+static const int logow = 12;
+static const int logoh = 6;
+
+static XRectangle rectangles[9] = {
+	/* x    y       w       h */
+	{ 0,    3,      1,      3 },
+	{ 1,    3,      2,      1 },
+	{ 0,    5,      8,      1 },
+	{ 3,    0,      1,      5 },
+	{ 5,    3,      1,      2 },
+	{ 7,    3,      1,      2 },
+	{ 8,    3,      4,      1 },
+	{ 9,    4,      1,      2 },
+	{ 11,   4,      1,      2 },
+};
+
+/*Enable blur*/
+#define BLUR
+/*Set blur radius*/
+static const int blurRadius=5;
+/*Enable Pixelation*/
+//#define PIXELATION
+/*Set pixelation radius*/
+static const int pixelSize=0;
diff --git a/.config/paru/pkg_config/slock/patches/0001-Apply-foreground-and-background-patch-modified.diff b/.config/paru/pkg_config/slock/patches/0001-Apply-foreground-and-background-patch-modified.diff
new file mode 100644
index 0000000..baaaac4
--- /dev/null
+++ b/.config/paru/pkg_config/slock/patches/0001-Apply-foreground-and-background-patch-modified.diff
@@ -0,0 +1,338 @@
+From db3a9869109f6b666c367d3b84daa8fdc31bee83 Mon Sep 17 00:00:00 2001
+From: A Farzat <a@farzat.xyz>
+Date: Tue, 9 Jan 2024 17:45:57 +0900
+Subject: [PATCH 1/5] Apply foreground and background patch modified
+
+From slock-foreground-and-background-20210611-35633d4
+---
+ config.def.h |  28 ++++++++++
+ config.mk    |  16 ++++--
+ slock.c      | 152 ++++++++++++++++++++++++++++++++++++++++++++++++---
+ 3 files changed, 184 insertions(+), 12 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 9855e21..ceceeb0 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -10,3 +10,31 @@ static const char *colorname[NUMCOLS] = {
+ 
+ /* treat a cleared input like a wrong password (color) */
+ static const int failonclear = 1;
++
++/* insert grid pattern with scale 1:1, the size can be changed with logosize */
++static const int logosize = 75;
++/* grid width and height for right center alignment */
++static const int logow = 12;
++static const int logoh = 6;
++
++static XRectangle rectangles[9] = {
++	/* x    y       w       h */
++	{ 0,    3,      1,      3 },
++	{ 1,    3,      2,      1 },
++	{ 0,    5,      8,      1 },
++	{ 3,    0,      1,      5 },
++	{ 5,    3,      1,      2 },
++	{ 7,    3,      1,      2 },
++	{ 8,    3,      4,      1 },
++	{ 9,    4,      1,      2 },
++	{ 11,   4,      1,      2 },
++};
++
++/*Enable blur*/
++#define BLUR
++/*Set blur radius*/
++static const int blurRadius=5;
++/*Enable Pixelation*/
++//#define PIXELATION
++/*Set pixelation radius*/
++static const int pixelSize=0;
+diff --git a/config.mk b/config.mk
+index 514c236..587adb4 100644
+--- a/config.mk
++++ b/config.mk
+@@ -10,13 +10,21 @@ MANPREFIX = ${PREFIX}/share/man
+ X11INC = /usr/X11R6/include
+ X11LIB = /usr/X11R6/lib
+ 
++# Xinerama
++XINERAMALIBS  = -lXinerama
++XINERAMAFLAGS = -DXINERAMA
++
++# freetype
++FREETYPELIBS = -lXft
++FREETYPEINC = /usr/include/freetype2
++
+ # includes and libs
+-INCS = -I. -I/usr/include -I${X11INC}
+-LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr
++INCS = -I. -I/usr/include -I${X11INC} -I${FREETYPEINC}
++LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -lXext -lXrandr -lImlib2
+ 
+ # flags
+-CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H
+-CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
++CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H ${XINERAMAFLAGS}
++CFLAGS = -std=c99 -pedantic -Wall -Ofast ${INCS} ${CPPFLAGS}
+ LDFLAGS = -s ${LIBS}
+ COMPATSRC = explicit_bzero.c
+ 
+diff --git a/slock.c b/slock.c
+index b2f14e3..dd59880 100644
+--- a/slock.c
++++ b/slock.c
+@@ -1,5 +1,6 @@
+ /* See LICENSE file for license details. */
+ #define _XOPEN_SOURCE 500
++#define LENGTH(X)       (sizeof X / sizeof X[0])
+ #if HAVE_SHADOW_H
+ #include <shadow.h>
+ #endif
+@@ -15,9 +16,14 @@
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <X11/extensions/Xrandr.h>
++#ifdef XINERAMA
++#include <X11/extensions/Xinerama.h>
++#endif
+ #include <X11/keysym.h>
+ #include <X11/Xlib.h>
+ #include <X11/Xutil.h>
++#include <X11/Xft/Xft.h>
++#include <Imlib2.h>
+ 
+ #include "arg.h"
+ #include "util.h"
+@@ -31,11 +37,19 @@ enum {
+ 	NUMCOLS
+ };
+ 
++#include "config.h"
++
+ struct lock {
+ 	int screen;
+ 	Window root, win;
+ 	Pixmap pmap;
++	Pixmap bgmap;
+ 	unsigned long colors[NUMCOLS];
++	unsigned int x, y;
++	unsigned int xoff, yoff, mw, mh;
++	Drawable drawable;
++	GC gc;
++	XRectangle rectangles[LENGTH(rectangles)];
+ };
+ 
+ struct xrandr {
+@@ -44,7 +58,7 @@ struct xrandr {
+ 	int errbase;
+ };
+ 
+-#include "config.h"
++Imlib_Image image;
+ 
+ static void
+ die(const char *errstr, ...)
+@@ -124,6 +138,32 @@ gethash(void)
+ 	return hash;
+ }
+ 
++static void
++resizerectangles(struct lock *lock)
++{
++	int i;
++
++	for (i = 0; i < LENGTH(rectangles); i++){
++		lock->rectangles[i].x = (rectangles[i].x * logosize) + lock->xoff + ((lock->mw) / 2) - (logow / 2 * logosize);
++		lock->rectangles[i].y = (rectangles[i].y * logosize) + lock->yoff + ((lock->mh) / 2) - (logoh / 2 * logosize);
++		lock->rectangles[i].width = rectangles[i].width * logosize;
++		lock->rectangles[i].height = rectangles[i].height * logosize;
++	}
++}
++
++static void
++drawlogo(Display *dpy, struct lock *lock, int color)
++{
++	/*
++	XSetForeground(dpy, lock->gc, lock->colors[BACKGROUND]);
++	XFillRectangle(dpy, lock->drawable, lock->gc, 0, 0, lock->x, lock->y); */
++	lock->drawable = lock->bgmap;
++	XSetForeground(dpy, lock->gc, lock->colors[color]);
++	XFillRectangles(dpy, lock->drawable, lock->gc, lock->rectangles, LENGTH(rectangles));
++	XCopyArea(dpy, lock->drawable, lock->win, lock->gc, 0, 0, lock->x, lock->y, 0, 0);
++	XSync(dpy, False);
++}
++
+ static void
+ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
+        const char *hash)
+@@ -190,10 +230,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
+ 			color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT);
+ 			if (running && oldc != color) {
+ 				for (screen = 0; screen < nscreens; screen++) {
+-					XSetWindowBackground(dpy,
+-					                     locks[screen]->win,
+-					                     locks[screen]->colors[color]);
+-					XClearWindow(dpy, locks[screen]->win);
++					drawlogo(dpy, locks[screen], color);
+ 				}
+ 				oldc = color;
+ 			}
+@@ -228,6 +265,10 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen)
+ 	XColor color, dummy;
+ 	XSetWindowAttributes wa;
+ 	Cursor invisible;
++#ifdef XINERAMA
++	XineramaScreenInfo *info;
++	int n;
++#endif
+ 
+ 	if (dpy == NULL || screen < 0 || !(lock = malloc(sizeof(struct lock))))
+ 		return NULL;
+@@ -235,27 +276,60 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen)
+ 	lock->screen = screen;
+ 	lock->root = RootWindow(dpy, lock->screen);
+ 
++	if(image)
++	{
++		lock->bgmap = XCreatePixmap(dpy, lock->root, DisplayWidth(dpy, lock->screen),
++		                            DisplayHeight(dpy, lock->screen), DefaultDepth(dpy, lock->screen));
++		imlib_context_set_image(image);
++		imlib_context_set_display(dpy);
++		imlib_context_set_visual(DefaultVisual(dpy, lock->screen));
++		imlib_context_set_colormap(DefaultColormap(dpy, lock->screen));
++		imlib_context_set_drawable(lock->bgmap);
++		imlib_render_image_on_drawable(0, 0);
++		imlib_free_image();
++	}
+ 	for (i = 0; i < NUMCOLS; i++) {
+ 		XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen),
+ 		                 colorname[i], &color, &dummy);
+ 		lock->colors[i] = color.pixel;
+ 	}
+ 
++	lock->x = DisplayWidth(dpy, lock->screen);
++	lock->y = DisplayHeight(dpy, lock->screen);
++#ifdef XINERAMA
++	if ((info = XineramaQueryScreens(dpy, &n))) {
++		lock->xoff = info[0].x_org;
++		lock->yoff = info[0].y_org;
++		lock->mw = info[0].width;
++		lock->mh = info[0].height;
++	} else
++#endif
++	{
++		lock->xoff = lock->yoff = 0;
++		lock->mw = lock->x;
++		lock->mh = lock->y;
++	}
++	lock->drawable = XCreatePixmap(dpy, lock->root, lock->x, lock->y, DefaultDepth(dpy, screen));
++	lock->gc = XCreateGC(dpy, lock->root, 0, NULL);
++	XSetLineAttributes(dpy, lock->gc, 1, LineSolid, CapButt, JoinMiter);
++
+ 	/* init */
+ 	wa.override_redirect = 1;
+-	wa.background_pixel = lock->colors[INIT];
+ 	lock->win = XCreateWindow(dpy, lock->root, 0, 0,
+-	                          DisplayWidth(dpy, lock->screen),
+-	                          DisplayHeight(dpy, lock->screen),
++	                          lock->x, lock->y,
+ 	                          0, DefaultDepth(dpy, lock->screen),
+ 	                          CopyFromParent,
+ 	                          DefaultVisual(dpy, lock->screen),
+ 	                          CWOverrideRedirect | CWBackPixel, &wa);
++	if(lock->bgmap)
++		XSetWindowBackgroundPixmap(dpy, lock->win, lock->bgmap);
+ 	lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8);
+ 	invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap,
+ 	                                &color, &color, 0, 0);
+ 	XDefineCursor(dpy, lock->win, invisible);
+ 
++	resizerectangles(lock);
++
+ 	/* Try to grab mouse pointer *and* keyboard for 600ms, else fail the lock */
+ 	for (i = 0, ptgrab = kbgrab = -1; i < 6; i++) {
+ 		if (ptgrab != GrabSuccess) {
+@@ -276,6 +350,7 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen)
+ 				XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask);
+ 
+ 			XSelectInput(dpy, lock->root, SubstructureNotifyMask);
++			drawlogo(dpy, lock, INIT);
+ 			return lock;
+ 		}
+ 
+@@ -355,6 +430,60 @@ main(int argc, char **argv) {
+ 	if (setuid(duid) < 0)
+ 		die("slock: setuid: %s\n", strerror(errno));
+ 
++	/*Create screenshot Image*/
++	Screen *scr = ScreenOfDisplay(dpy, DefaultScreen(dpy));
++	image = imlib_create_image(scr->width,scr->height);
++	imlib_context_set_image(image);
++	imlib_context_set_display(dpy);
++	imlib_context_set_visual(DefaultVisual(dpy,0));
++	imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr)));	
++	imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1);
++
++#ifdef BLUR
++
++	/*Blur function*/
++	imlib_image_blur(blurRadius);
++#endif // BLUR
++
++#ifdef PIXELATION
++	/*Pixelation*/
++	int width = scr->width;
++	int height = scr->height;
++
++	for(int y = 0; y < height; y += pixelSize)
++	{
++		for(int x = 0; x < width; x += pixelSize)
++		{
++			int red = 0;
++			int green = 0;
++			int blue = 0;
++
++			Imlib_Color pixel;
++			Imlib_Color* pp;
++			pp = &pixel;
++			for(int j = 0; j < pixelSize && j < height; j++)
++			{
++				for(int i = 0; i < pixelSize && i < width; i++)
++				{
++					imlib_image_query_pixel(x+i,y+j,pp);
++					red += pixel.red;
++					green += pixel.green;
++					blue += pixel.blue;
++				}
++			}
++			red /= (pixelSize*pixelSize);
++			green /= (pixelSize*pixelSize);
++			blue /= (pixelSize*pixelSize);
++			imlib_context_set_color(red,green,blue,pixel.alpha);
++			imlib_image_fill_rectangle(x,y,pixelSize,pixelSize);
++			red = 0;
++			green = 0;
++			blue = 0;
++		}
++	}
++
++
++#endif
+ 	/* check for Xrandr support */
+ 	rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase);
+ 
+@@ -391,5 +520,12 @@ main(int argc, char **argv) {
+ 	/* everything is now blank. Wait for the correct password */
+ 	readpw(dpy, &rr, locks, nscreens, hash);
+ 
++	for (nlocks = 0, s = 0; s < nscreens; s++) {
++		XFreePixmap(dpy, locks[s]->drawable);
++		XFreeGC(dpy, locks[s]->gc);
++	}
++
++	XSync(dpy, 0);
++	XCloseDisplay(dpy);
+ 	return 0;
+ }
+-- 
+2.43.0
+
diff --git a/.config/paru/pkg_config/slock/patches/0002-Apply-capscolor-patch-modified.diff b/.config/paru/pkg_config/slock/patches/0002-Apply-capscolor-patch-modified.diff
new file mode 100644
index 0000000..934ef98
--- /dev/null
+++ b/.config/paru/pkg_config/slock/patches/0002-Apply-capscolor-patch-modified.diff
@@ -0,0 +1,88 @@
+From 3d99cfacafa64ca0ad47115db04a1e54a1be6232 Mon Sep 17 00:00:00 2001
+From: A Farzat <a@farzat.xyz>
+Date: Sun, 24 Apr 2022 12:26:36 +0900
+Subject: [PATCH 2/5] Apply capscolor patch modified
+
+From slock-capscolor-20220921-35633d4
+---
+ config.def.h |  1 +
+ slock.c      | 15 ++++++++++++---
+ 2 files changed, 13 insertions(+), 3 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index ceceeb0..98668ac 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -6,6 +6,7 @@ static const char *colorname[NUMCOLS] = {
+ 	[INIT] =   "black",     /* after initialization */
+ 	[INPUT] =  "#005577",   /* during input */
+ 	[FAILED] = "#CC3333",   /* wrong password */
++	[CAPS] =   "#33CCCC",   /* CapsLock on */
+ };
+ 
+ /* treat a cleared input like a wrong password (color) */
+diff --git a/slock.c b/slock.c
+index dd59880..a385a82 100644
+--- a/slock.c
++++ b/slock.c
+@@ -22,6 +22,7 @@
+ #include <X11/keysym.h>
+ #include <X11/Xlib.h>
+ #include <X11/Xutil.h>
++#include <X11/XKBlib.h>
+ #include <X11/Xft/Xft.h>
+ #include <Imlib2.h>
+ 
+@@ -34,6 +35,7 @@ enum {
+ 	INIT,
+ 	INPUT,
+ 	FAILED,
++	CAPS,
+ 	NUMCOLS
+ };
+ 
+@@ -170,16 +172,20 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
+ {
+ 	XRRScreenChangeNotifyEvent *rre;
+ 	char buf[32], passwd[256], *inputhash;
+-	int num, screen, running, failure, oldc;
+-	unsigned int len, color;
++	int num, screen, running, failure, oldc, caps;
++	unsigned int len, color, indicators;
+ 	KeySym ksym;
+ 	XEvent ev;
+ 
+ 	len = 0;
+ 	running = 1;
++	caps = 0;
+ 	failure = 0;
+ 	oldc = INIT;
+ 
++	if(!XkbGetIndicatorState(dpy, XkbUseCoreKbd, &indicators))
++		caps = indicators & 1;
++
+ 	while (running && !XNextEvent(dpy, &ev)) {
+ 		if (ev.type == KeyPress) {
+ 			explicit_bzero(&buf, sizeof(buf));
+@@ -219,6 +225,9 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
+ 				if (len)
+ 					passwd[--len] = '\0';
+ 				break;
++			case XK_Caps_Lock:
++				caps = !caps;
++				break;
+ 			default:
+ 				if (num && !iscntrl((int)buf[0]) &&
+ 				    (len + num < sizeof(passwd))) {
+@@ -227,7 +236,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
+ 				}
+ 				break;
+ 			}
+-			color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT);
++			color = len ? (caps ? CAPS : INPUT) : ((failure || failonclear) ? FAILED : INIT);
+ 			if (running && oldc != color) {
+ 				for (screen = 0; screen < nscreens; screen++) {
+ 					drawlogo(dpy, locks[screen], color);
+-- 
+2.43.0
+
diff --git a/.config/paru/pkg_config/slock/patches/0003-Apply-mediakeys-patch.diff b/.config/paru/pkg_config/slock/patches/0003-Apply-mediakeys-patch.diff
new file mode 100644
index 0000000..53c4459
--- /dev/null
+++ b/.config/paru/pkg_config/slock/patches/0003-Apply-mediakeys-patch.diff
@@ -0,0 +1,47 @@
+From 5ab647163705bb947a895fed5ae2a2658b18a180 Mon Sep 17 00:00:00 2001
+From: A Farzat <a@farzat.xyz>
+Date: Sun, 24 Apr 2022 13:21:23 +0900
+Subject: [PATCH 3/5] Apply mediakeys patch
+
+A combination of two diff files:
+https://patch-diff.githubusercontent.com/raw/phenax/bslock/pull/1.diff
+slock-mediakeys-20170111-2d2a21a.diff
+---
+ slock.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/slock.c b/slock.c
+index a385a82..cbbbd29 100644
+--- a/slock.c
++++ b/slock.c
+@@ -22,6 +22,7 @@
+ #include <X11/keysym.h>
+ #include <X11/Xlib.h>
+ #include <X11/Xutil.h>
++#include <X11/XF86keysym.h>
+ #include <X11/XKBlib.h>
+ #include <X11/Xft/Xft.h>
+ #include <Imlib2.h>
+@@ -203,6 +204,19 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
+ 			    IsPrivateKeypadKey(ksym))
+ 				continue;
+ 			switch (ksym) {
++			case XF86XK_AudioPlay:
++			case XF86XK_AudioPause:
++			case XF86XK_AudioStop:
++			case XF86XK_AudioPrev:
++			case XF86XK_AudioNext:
++			case XF86XK_AudioRaiseVolume:
++			case XF86XK_AudioLowerVolume:
++			case XF86XK_AudioMute:
++			case XF86XK_AudioMicMute:
++			case XF86XK_MonBrightnessDown:
++			case XF86XK_MonBrightnessUp:
++				XSendEvent(dpy, DefaultRootWindow(dpy), True, KeyPressMask, &ev);
++				break;
+ 			case XK_Return:
+ 				passwd[len] = '\0';
+ 				errno = 0;
+-- 
+2.43.0
+
diff --git a/.config/paru/pkg_config/slock/patches/0004-Make-sure-the-keyboard-layout-is-US-english.diff b/.config/paru/pkg_config/slock/patches/0004-Make-sure-the-keyboard-layout-is-US-english.diff
new file mode 100644
index 0000000..79aa853
--- /dev/null
+++ b/.config/paru/pkg_config/slock/patches/0004-Make-sure-the-keyboard-layout-is-US-english.diff
@@ -0,0 +1,26 @@
+From 1137ec75223d7456a31b101a911b7f6eddb8e083 Mon Sep 17 00:00:00 2001
+From: A Farzat <a@farzat.xyz>
+Date: Fri, 6 Jan 2023 08:37:13 +0900
+Subject: [PATCH 4/5] Make sure the keyboard layout is US english
+
+---
+ slock.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/slock.c b/slock.c
+index cbbbd29..63c946c 100644
+--- a/slock.c
++++ b/slock.c
+@@ -445,6 +445,9 @@ main(int argc, char **argv) {
+ 	if (!(dpy = XOpenDisplay(NULL)))
+ 		die("slock: cannot open display\n");
+ 
++	/* switch the keyboard layout to US */
++	system("xkb-switch -s us");
++
+ 	/* drop privileges */
+ 	if (setgroups(0, NULL) < 0)
+ 		die("slock: setgroups: %s\n", strerror(errno));
+-- 
+2.43.0
+
diff --git a/.config/paru/pkg_config/slock/patches/0005-Apply-alternate-colors-patch-modified.diff b/.config/paru/pkg_config/slock/patches/0005-Apply-alternate-colors-patch-modified.diff
new file mode 100644
index 0000000..3b98758
--- /dev/null
+++ b/.config/paru/pkg_config/slock/patches/0005-Apply-alternate-colors-patch-modified.diff
@@ -0,0 +1,48 @@
+From 0d60f58ae941c8627ee612e8ac5bbfe2e8adda74 Mon Sep 17 00:00:00 2001
+From: A Farzat <a@farzat.xyz>
+Date: Wed, 10 Jan 2024 12:41:27 +0900
+Subject: [PATCH 5/5] Apply alternate-colors patch modified
+
+From slock-alternate-colors-20220921-35633d4
+---
+ config.def.h | 1 +
+ slock.c      | 4 +++-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/config.def.h b/config.def.h
+index 98668ac..797fd6b 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -5,6 +5,7 @@ static const char *group = "nogroup";
+ static const char *colorname[NUMCOLS] = {
+ 	[INIT] =   "black",     /* after initialization */
+ 	[INPUT] =  "#005577",   /* during input */
++	[INPUT_ALT] = "#227799", /* during input, second color */
+ 	[FAILED] = "#CC3333",   /* wrong password */
+ 	[CAPS] =   "#33CCCC",   /* CapsLock on */
+ };
+diff --git a/slock.c b/slock.c
+index 63c946c..944ee55 100644
+--- a/slock.c
++++ b/slock.c
+@@ -35,6 +35,7 @@ char *argv0;
+ enum {
+ 	INIT,
+ 	INPUT,
++	INPUT_ALT,
+ 	FAILED,
+ 	CAPS,
+ 	NUMCOLS
+@@ -250,7 +251,8 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
+ 				}
+ 				break;
+ 			}
+-			color = len ? (caps ? CAPS : INPUT) : ((failure || failonclear) ? FAILED : INIT);
++			color = len ? (caps ? CAPS : (len%2 ? INPUT : INPUT_ALT))
++			            : ((failure || failonclear) ? FAILED : INIT);
+ 			if (running && oldc != color) {
+ 				for (screen = 0; screen < nscreens; screen++) {
+ 					drawlogo(dpy, locks[screen], color);
+-- 
+2.43.0
+
-- 
cgit v1.2.3-70-g09d2