summaryrefslogtreecommitdiffstats
path: root/dwl-patches/patches/envcfg/envcfg.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dwl-patches/patches/envcfg/envcfg.patch')
-rw-r--r--dwl-patches/patches/envcfg/envcfg.patch302
1 files changed, 302 insertions, 0 deletions
diff --git a/dwl-patches/patches/envcfg/envcfg.patch b/dwl-patches/patches/envcfg/envcfg.patch
new file mode 100644
index 0000000..ca9328d
--- /dev/null
+++ b/dwl-patches/patches/envcfg/envcfg.patch
@@ -0,0 +1,302 @@
+From 3c3ea42cd50bfa5111be69b3c1f71afa0443bb53 Mon Sep 17 00:00:00 2001
+From: Dima Krasner <dima@dimakrasner.com>
+Date: Sat, 30 Dec 2023 10:49:48 +0200
+Subject: [PATCH] allow environment variables to override config.h
+
+---
+ Makefile | 1 +
+ config.def.h | 10 +--
+ dwl.c | 5 ++
+ env.c | 217 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 228 insertions(+), 5 deletions(-)
+ create mode 100644 env.c
+
+diff --git a/Makefile b/Makefile
+index 9308656..c66d376 100644
+--- a/Makefile
++++ b/Makefile
+@@ -22,6 +22,7 @@ dwl: dwl.o util.o
+ dwl.o: dwl.c client.h config.h config.mk cursor-shape-v1-protocol.h \
+ pointer-constraints-unstable-v1-protocol.h wlr-layer-shell-unstable-v1-protocol.h \
+ wlr-output-power-management-unstable-v1-protocol.h xdg-shell-protocol.h
++dwl.o: env.c
+ util.o: util.c util.h
+
+ # wayland-scanner is a tool which generates C headers and rigging for Wayland
+diff --git a/config.def.h b/config.def.h
+index a784eb4..e0f10de 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -6,11 +6,11 @@
+ /* appearance */
+ static const int sloppyfocus = 1; /* focus follows mouse */
+ static const int bypass_surface_visibility = 0; /* 1 means idle inhibitors will disable idle tracking even if it's surface isn't visible */
+-static const unsigned int borderpx = 1; /* border pixel of windows */
+-static const float rootcolor[] = COLOR(0x222222ff);
+-static const float bordercolor[] = COLOR(0x444444ff);
+-static const float focuscolor[] = COLOR(0x005577ff);
+-static const float urgentcolor[] = COLOR(0xff0000ff);
++static unsigned int borderpx = 1; /* border pixel of windows */
++static float rootcolor[] = COLOR(0x222222ff);
++static float bordercolor[] = COLOR(0x444444ff);
++static float focuscolor[] = COLOR(0x005577ff);
++static float urgentcolor[] = COLOR(0xff0000ff);
+ /* This conforms to the xdg-protocol. Set the alpha to zero to restore the old behavior */
+ static const float fullscreen_bg[] = {0.1f, 0.1f, 0.1f, 1.0f}; /* You can also use glsl colors */
+
+diff --git a/dwl.c b/dwl.c
+index d48bf40..de33dfe 100644
+--- a/dwl.c
++++ b/dwl.c
+@@ -429,6 +429,8 @@ static xcb_atom_t netatom[NetLast];
+ /* attempt to encapsulate suck into one file */
+ #include "client.h"
+
++#include "env.c"
++
+ /* function implementations */
+ void
+ applybounds(Client *c, struct wlr_box *bbox)
+@@ -1082,6 +1084,8 @@ createpointer(struct wlr_pointer *pointer)
+ libinput_device_config_accel_set_profile(device, accel_profile);
+ libinput_device_config_accel_set_speed(device, accel_speed);
+ }
++
++ inputconfig(device);
+ }
+
+ wlr_cursor_attach_input_device(cursor, &pointer->base);
+@@ -3141,6 +3145,7 @@ main(int argc, char *argv[])
+ /* Wayland requires XDG_RUNTIME_DIR for creating its communications socket */
+ if (!getenv("XDG_RUNTIME_DIR"))
+ die("XDG_RUNTIME_DIR must be set");
++ loadtheme();
+ setup();
+ run(startup_cmd);
+ cleanup();
+diff --git a/env.c b/env.c
+new file mode 100644
+index 0000000..618f81e
+--- /dev/null
++++ b/env.c
+@@ -0,0 +1,217 @@
++static int
++isenabled(const char *val, int def)
++{
++ return ((def && (!val || !val[0] || (val[0] != '0'))) || (!def && (val && val[0] && (val[0] != '0'))));
++}
++
++static void
++setclickmethod(struct libinput_device *libinput_device)
++{
++ const char *val;
++ long l;
++ char *end = NULL;
++
++ val = getenv("LIBINPUT_DEFAULT_CLICK_METHOD");
++ if (!val || !val[0])
++ return;
++
++ errno = 0;
++ l = strtol(val, &end, 10);
++ if (errno || (end && *end))
++ return;
++
++ libinput_device_config_click_set_method(libinput_device,
++ (enum libinput_config_click_method)l);
++}
++
++static void
++settap(struct libinput_device *libinput_device)
++{
++ const char *val;
++
++ val = getenv("LIBINPUT_DEFAULT_TAP");
++ if (val) {
++ if (!val[0])
++ return;
++
++ libinput_device_config_tap_set_enabled(libinput_device,
++ isenabled(val, 1) ? LIBINPUT_CONFIG_TAP_ENABLED :
++ LIBINPUT_CONFIG_TAP_DISABLED);
++ } else if (tap_to_click && libinput_device_config_tap_get_finger_count(libinput_device))
++ libinput_device_config_tap_set_enabled(libinput_device,
++ LIBINPUT_CONFIG_TAP_ENABLED);
++}
++
++static void
++settapanddrag(struct libinput_device *libinput_device)
++{
++ const char *val;
++
++ val = getenv("LIBINPUT_DEFAULT_DRAG");
++ if (val && val[0])
++ libinput_device_config_tap_set_drag_enabled(libinput_device,
++ isenabled(val, 1) ? LIBINPUT_CONFIG_DRAG_ENABLED :
++ LIBINPUT_CONFIG_DRAG_DISABLED);
++}
++
++static void
++setnaturalscroll(struct libinput_device *libinput_device)
++{
++ const char *val;
++
++ val = getenv("LIBINPUT_DEFAULT_NATURAL_SCROLL");
++ if (val && val[0])
++ libinput_device_config_scroll_set_natural_scroll_enabled(
++ libinput_device, isenabled(val, 0));
++ else if (!val && libinput_device_config_scroll_has_natural_scroll(libinput_device))
++ libinput_device_config_scroll_set_natural_scroll_enabled(
++ libinput_device, natural_scrolling);
++}
++
++static void
++setaccelprofile(struct libinput_device *libinput_device)
++{
++ const char *val;
++ double profile;
++ char *end = NULL;
++
++ val = getenv("LIBINPUT_DEFAULT_ACCELERATION_PROFILE");
++ if (!val || !val[0])
++ return;
++
++ errno = 0;
++ profile = strtod(val, &end);
++ if (errno || (end && *end))
++ return;
++
++ libinput_device_config_accel_set_profile(libinput_device,
++ (enum libinput_config_accel_profile)profile);
++}
++
++static void
++setaccelspeed(struct libinput_device *libinput_device)
++{
++ const char *val;
++ double accel = 0;
++ char *end = NULL;
++
++ val = getenv("LIBINPUT_DEFAULT_ACCELERATION");
++ if (!val || !val[0])
++ return;
++
++ errno = 0;
++ accel = strtod(val, &end);
++ if (errno || (end && *end) || (accel < -1) || (accel > 1))
++ return;
++
++ libinput_device_config_accel_set_speed(libinput_device, accel);
++}
++
++static void
++setscrollmethod(struct libinput_device *libinput_device)
++{
++ const char *val;
++ long l;
++ char *end = NULL;
++
++ val = getenv("LIBINPUT_DEFAULT_SCROLL_METHOD");
++ if (!val || !val[0])
++ return;
++
++ errno = 0;
++ l = strtol(val, &end, 10);
++ if (errno || (end && *end))
++ return;
++
++ libinput_device_config_scroll_set_method(libinput_device,
++ (enum libinput_config_scroll_method)l);
++}
++
++static void
++setdwt(struct libinput_device *libinput_device)
++{
++ const char *val;
++
++ val = getenv("LIBINPUT_DEFAULT_DISABLE_WHILE_TYPING");
++ if (val && val[0])
++ libinput_device_config_dwt_set_enabled(libinput_device,
++ isenabled(val, false) ? LIBINPUT_CONFIG_DWT_ENABLED :
++ LIBINPUT_CONFIG_DWT_DISABLED);
++}
++
++static void
++setmiddleemul(struct libinput_device *libinput_device)
++{
++ const char *val;
++
++ val = getenv("LIBINPUT_DEFAULT_MIDDLE_EMULATION");
++ if (val && val[0])
++ libinput_device_config_middle_emulation_set_enabled(libinput_device,
++ isenabled(val, false) ? LIBINPUT_CONFIG_MIDDLE_EMULATION_ENABLED :
++ LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED);
++}
++
++static void
++setlefthanded(struct libinput_device *libinput_device)
++{
++ const char *val;
++
++ val = getenv("LIBINPUT_DEFAULT_LEFT_HANDED");
++ if (val && val[0])
++ libinput_device_config_left_handed_set(libinput_device,
++ isenabled(val, 0));
++}
++
++static void
++inputconfig(struct libinput_device *libinput_device)
++{
++ setclickmethod(libinput_device);
++ settap(libinput_device);
++ settapanddrag(libinput_device);
++ setnaturalscroll(libinput_device);
++ setaccelprofile(libinput_device);
++ setaccelspeed(libinput_device);
++ setscrollmethod(libinput_device);
++ setdwt(libinput_device);
++ setmiddleemul(libinput_device);
++ setlefthanded(libinput_device);
++}
++
++static void
++parsecolor(const char *val, float color[4])
++{
++ uint8_t r, g, b;
++ if (sscanf(val, "#%02hhx%02hhx%02hhx", &r, &g, &b) == 3) {
++ color[0] = (float)r / 0xFF;
++ color[1] = (float)g / 0xFF;
++ color[2] = (float)b / 0xFF;
++ color[3] = 1.0;
++ }
++}
++
++static void
++loadtheme(void)
++{
++ const char *val;
++ unsigned int tmp;
++
++ val = getenv("DWL_ROOT_COLOR");
++ if (val)
++ parsecolor(val, rootcolor);
++
++ val = getenv("DWL_BORDER_COLOR");
++ if (val)
++ parsecolor(val, bordercolor);
++
++ val = getenv("DWL_FOCUS_COLOR");
++ if (val)
++ parsecolor(val, focuscolor);
++
++ val = getenv("DWL_URGENT_COLOR");
++ if (val)
++ parsecolor(val, urgentcolor);
++
++ val = getenv("DWL_BORDER");
++ if (val && sscanf(val, "%u", &tmp) == 1)
++ borderpx = tmp;
++}
+--
+2.43.0
+