summaryrefslogtreecommitdiff
path: root/qubes-dwm-6.2/dwm-qubes.diff
diff options
context:
space:
mode:
Diffstat (limited to 'qubes-dwm-6.2/dwm-qubes.diff')
-rw-r--r--qubes-dwm-6.2/dwm-qubes.diff245
1 files changed, 245 insertions, 0 deletions
diff --git a/qubes-dwm-6.2/dwm-qubes.diff b/qubes-dwm-6.2/dwm-qubes.diff
new file mode 100644
index 0000000..3939a5e
--- /dev/null
+++ b/qubes-dwm-6.2/dwm-qubes.diff
@@ -0,0 +1,245 @@
+diff --git a/config.def.h b/config.def.h
+index 2d824d1..947facb 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -1,38 +1,40 @@
+ /* See LICENSE file for copyright and license details. */
+
+ /* appearance */
+-static const unsigned int borderpx = 1; /* border pixel of windows */
++static const unsigned int borderpx = 2; /* border pixel of windows */
+ static const unsigned int snap = 32; /* snap pixel */
+ static const unsigned int systraypinning = 0; /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */
+ static const unsigned int systrayspacing = 2; /* systray spacing */
+ static const int systraypinningfailfirst = 1; /* 1: if pinning fails, display systray on the first monitor, False: display systray on the last monitor*/
+-static const int showsystray = 1; /* 0 means no systray */
++static const int showsystray = 1; /* 0 means no systray */
+ 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_dom0[] = "#3874D8";
++static const char col_white[] = "#FFFFFF";
+ 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] = {
+- /* fg bg border */
+- [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
+- [SchemeSel] = { col_gray4, col_cyan, col_cyan },
++/* Dom0 Colors, tagbar and status bar */
++static const char *colors[][2] = {
++ /* fg bg */
++ [SchemeNorm] = { col_gray3, col_gray1 },
++ [SchemeSel] = { col_white, col_dom0 },
+ };
+
+ /* tagging */
+-static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
++static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "Q" };
+
+ static const Rule rules[] = {
+ /* xprop(1):
+ * WM_CLASS(STRING) = instance, class
+ * WM_NAME(STRING) = title
+ */
+- /* class instance title tags mask isfloating monitor */
+- { "Gimp", NULL, NULL, 0, 1, -1 },
+- { "Firefox", NULL, NULL, 1 << 8, 0, -1 },
++ /* class instance title tags mask isfloating monitor */
++ { NULL, NULL, "Qubes VM Manager" , 1 << 8, 1, -1}
+ };
+
+ /* layout(s) */
+@@ -48,7 +50,7 @@ static const Layout layouts[] = {
+ };
+
+ /* 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} }, \
+@@ -59,13 +61,15 @@ static const Layout layouts[] = {
+ #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
+
+ /* 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 *termcmd[] = { "st", NULL };
++static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
++static const char *dmenu_dom0[] = { "dmenu_run", "dom0", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_dom0, "-sf", col_white, NULL };
++static const char *dmenu_vms[] = { "dmenu_run", "vms", "-a", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_dom0, "-sf", col_white, NULL };
++static const char *termcmd[] = { "urxvt", NULL };
+
+ static Key keys[] = {
+ /* modifier key function argument */
+- { MODKEY, XK_p, spawn, {.v = dmenucmd } },
++ { MODKEY, XK_p, spawn, {.v = dmenu_dom0 } },
++ { MODKEY|ShiftMask, XK_p, spawn, {.v = dmenu_vms} },
+ { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
+ { MODKEY, XK_b, togglebar, {0} },
+ { MODKEY, XK_j, focusstack, {.i = +1 } },
+diff --git a/dwm.c b/dwm.c
+index bb5929b..1943256 100644
+--- a/dwm.c
++++ b/dwm.c
+@@ -104,6 +104,8 @@ typedef struct Monitor Monitor;
+ typedef struct Client Client;
+ struct Client {
+ char name[256];
++ unsigned long vmcolor;
++ char *vmname;
+ float mina, maxa;
+ int x, y, w, h;
+ int oldx, oldy, oldw, oldh;
+@@ -232,6 +234,8 @@ static void setlayout(const Arg *arg);
+ static void setmfact(const Arg *arg);
+ static void setup(void);
+ static void seturgent(Client *c, int urg);
++static void setvmcolor(Client *c);
++static void setvmname(Client *c);
+ static void showhide(Client *c);
+ static void sigchld(int unused);
+ static void spawn(const Arg *arg);
+@@ -824,8 +828,15 @@ drawbar(Monitor *m)
+
+ if ((w = m->ww - sw - stw - x) > bh) {
+ if (m->sel) {
++ unsigned long backPixel = scheme[SchemeSel][ColBg].pixel;
++ scheme[SchemeSel][ColBg].pixel = m->sel->vmcolor;
+ drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
+- drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
++ int size = strlen(m->sel->vmname) + strlen(m->sel->name) + 4;
++ char *content = ecalloc(size, 1);
++ snprintf(content, size, "[%s] %s", m->sel->vmname, m->sel->name);
++ drw_text(drw, x, 0, w, bh, lrpad / 2, content, 0);
++ scheme[SchemeSel][ColBg].pixel = backPixel;
++ free(content);
+ if (m->sel->isfloating)
+ drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0);
+ } else {
+@@ -892,7 +903,7 @@ focus(Client *c)
+ detachstack(c);
+ attachstack(c);
+ grabbuttons(c, 1);
+- XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel);
++ XSetWindowBorder(dpy, c->win, c->vmcolor);
+ setfocus(c);
+ } else {
+ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+@@ -1145,6 +1156,8 @@ manage(Window w, XWindowAttributes *wa)
+ c->h = c->oldh = wa->height;
+ c->oldbw = wa->border_width;
+
++ setvmname(c);
++ setvmcolor(c);
+ updatetitle(c);
+ if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) {
+ c->mon = t->mon;
+@@ -1166,7 +1179,7 @@ manage(Window w, XWindowAttributes *wa)
+
+ wc.border_width = c->bw;
+ XConfigureWindow(dpy, w, CWBorderWidth, &wc);
+- XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel);
++ XSetWindowBorder(dpy, w, c->vmcolor);
+ configure(c); /* propagates border_width, if size doesn't change */
+ updatewindowtype(c);
+ updatesizehints(c);
+@@ -1754,7 +1767,7 @@ setup(void)
+ /* init appearance */
+ scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
+ for (i = 0; i < LENGTH(colors); i++)
+- scheme[i] = drw_scm_create(drw, colors[i], 3);
++ scheme[i] = drw_scm_create(drw, colors[i], 2);
+ /* init system tray */
+ updatesystray();
+ /* init bars */
+@@ -1797,6 +1810,67 @@ seturgent(Client *c, int urg)
+ XFree(wmh);
+ }
+
++void
++setvmcolor(Client *c)
++{
++ Atom id = XInternAtom(dpy, "_QUBES_LABEL_COLOR", True);
++
++ if (id == None) {
++ XftColor xft;
++ drw_clr_create(drw, &xft, col_dom0);
++ c->vmcolor = xft.pixel;
++ } else {
++ Atom actual_type;
++ int actual_format;
++ unsigned long nitems;
++ unsigned long nbytes;
++ unsigned long *value = NULL;
++
++ XGetWindowProperty(dpy, c->win, id, 0, 1, False, XA_CARDINAL,
++ &actual_type, &actual_format, &nitems, &nbytes, (unsigned char **) &value);
++
++ if (nitems) {
++ c->vmcolor = value[0];
++ } else {
++ XftColor xft;
++ drw_clr_create(drw, &xft, col_dom0);
++ c->vmcolor = xft.pixel;
++ }
++ XFree(value);
++ }
++}
++
++void
++setvmname(Client *c)
++{
++ Atom id = XInternAtom(dpy, "_QUBES_VMNAME", True);
++
++ if (id == None) {
++ c->vmname = ecalloc(5, 1);
++ strcpy(c->vmname, "Dom0");
++ } else {
++ Atom actual_type;
++ int actual_format;
++ unsigned long nitems;
++ unsigned long nbytes;
++ char *value = NULL;
++
++ XGetWindowProperty(dpy, c->win, id, 0, ~(0L), False, XA_STRING,
++ &actual_type, &actual_format, &nitems, &nbytes, (unsigned char **) &value);
++
++ if (nitems) {
++ c->vmname = ecalloc(nitems + 1, 1);
++ strncpy(c->vmname, value, nitems);
++ c->vmname[nitems] = '\0';
++ } else {
++ c->vmname = ecalloc(5, 1);
++ strcpy(c->vmname, "Dom0");
++ }
++
++ XFree(value);
++ }
++}
++
+ void
+ showhide(Client *c)
+ {
+@@ -1826,7 +1900,7 @@ sigchld(int unused)
+ void
+ spawn(const Arg *arg)
+ {
+- if (arg->v == dmenucmd)
++ if (arg->v == dmenu_dom0 || arg->v == dmenu_vms)
+ dmenumon[0] = '0' + selmon->num;
+ if (fork() == 0) {
+ if (dpy)
+@@ -1950,7 +2024,7 @@ unfocus(Client *c, int setfocus)
+ if (!c)
+ return;
+ grabbuttons(c, 0);
+- XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel);
++ XSetWindowBorder(dpy, c->win, c->vmcolor);
+ if (setfocus) {
+ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+ XDeleteProperty(dpy, root, netatom[NetActiveWindow]);