~ruther/guix-config

d4969685ddf92a9f5d90b947e1b493080c4d3a21 — Rutherther 7 months ago 4f6d588
feat: add dwl
2 files changed, 304 insertions(+), 0 deletions(-)

A home/dwl/config.h
A home/dwl/wm.scm
A home/dwl/config.h => home/dwl/config.h +278 -0
@@ 0,0 1,278 @@
/* Taken from https://github.com/djpohly/dwl/issues/466 */
#define COLOR(hex)    { ((hex >> 24) & 0xFF) / 255.0f, \
                        ((hex >> 16) & 0xFF) / 255.0f, \
                        ((hex >> 8) & 0xFF) / 255.0f, \
                        (hex & 0xFF) / 255.0f }
/* appearance */
static const int sloppyfocus               = 0;  /* 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);
/* 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 */

enum {
	PROGRAM_LAUNCHER,
	SCRATCHPADS,
	PASSTHROUGH,
};
const char *modes_labels[] = {
	"launcher",
	"scratchpads"
};

/* tagging - TAGCOUNT must be no greater than 31 */
#define TAGCOUNT (9)

/* logging */
static int log_level = WLR_ERROR;

static const Rule rules[] = {
	/* app_id     title       tags mask     isfloating   isterm noswallow monitor scratchkey */
	{ "alacritty-run", NULL,      0,            0,          1,      1,         -1,     0 },
	{ "kitty-run",     NULL,      0,            0,          1,      1,         -1,     0 },
	{ "foot-run",      NULL,      0,            0,          1,      1,         -1,     0 },
	{ NULL,     "Spotify Premium",0,            1,          0,      0,         -1,    's' },
	{ "MATLAB",        "Figure",  1 << 4,       0,          0,      0,         -1,     0 },
};

/* layout(s) */
static const Layout layouts[] = {
	/* symbol     arrange function */
	{ "[]=",      tile },
	{ "><>",      NULL },    /* no layout function means floating behavior */
	{ "[M]",      monocle },
	{ "TTT",      bstack },
	/* { "|M|",      centeredmaster } */
};

/* monitors */
/* NOTE: ALWAYS add a fallback rule, even if you are completely sure it won't be used */
static const MonitorRule monrules[] = {
	/* name       scale  rotate/reflect                x    y */
	/* defaults */
	{ NULL,       1,     WL_OUTPUT_TRANSFORM_NORMAL,   -1,  -1 },
};

static const TagRule tagrules[] = {
    /* tag     mfact      nmaster   layout */
    { 9,       0.55,      1,        &layouts[2] },
	/* defaults */
    { 0,       0.55,      1,        &layouts[0] }
};

/* keyboard */
/* static const struct xkb_rule_names xkb_rules = { */
/* 	/\* can specify fields: rules, model, layout, variant, options *\/ */
/* 	/\* example: */
/* 	.options = "ctrl:nocaps", */
/* 	*\/ */

/* 	{ */
/* 	    .layout = "us", */
/* 		.options = "compose:ralt ctrl:nocaps grp:alt_shift_toggle" */
/* 	}, */
/* 	{ */
/* 	    .layout = "cz", */
/* 		.variant = "qwerty", */
/* 		.options = "compose:ralt ctrl:nocaps grp:alt_shift_toggle" */
/* 	}, */
/* }; */

static const struct xkb_rule_names xkb_rules = {
  .layout = "cz",
  .variant = "coder",
  .options = "ctrl:nocaps",
};

static const int repeat_rate = 25;
static const int repeat_delay = 600;

/* Trackpad */
static const int tap_to_click = 1;
static const int tap_and_drag = 1;
static const int drag_lock = 1;
static const int natural_scrolling = 1;
static const int disable_while_typing = 1;
static const int left_handed = 0;
static const int middle_button_emulation = 0;
/* You can choose between:
LIBINPUT_CONFIG_SCROLL_NO_SCROLL
LIBINPUT_CONFIG_SCROLL_2FG
LIBINPUT_CONFIG_SCROLL_EDGE
LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN
*/
static const enum libinput_config_scroll_method scroll_method = LIBINPUT_CONFIG_SCROLL_2FG;

/* You can choose between:
LIBINPUT_CONFIG_CLICK_METHOD_NONE
LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS
LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER
*/
static const enum libinput_config_click_method click_method = LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS;

/* You can choose between:
LIBINPUT_CONFIG_SEND_EVENTS_ENABLED
LIBINPUT_CONFIG_SEND_EVENTS_DISABLED
LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE
*/
static const uint32_t send_events_mode = LIBINPUT_CONFIG_SEND_EVENTS_ENABLED;

/* You can choose between:
LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT
LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE
*/
static const enum libinput_config_accel_profile accel_profile = LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE;
static const double accel_speed = 0.0;

/* You can choose between:
LIBINPUT_CONFIG_TAP_MAP_LRM -- 1/2/3 finger tap maps to left/right/middle
LIBINPUT_CONFIG_TAP_MAP_LMR -- 1/2/3 finger tap maps to left/middle/right
*/
static const enum libinput_config_tap_button_map button_map = LIBINPUT_CONFIG_TAP_MAP_LRM;

/* If you want to use the windows key for MODKEY, use WLR_MODIFIER_LOGO */
#define MODKEY WLR_MODIFIER_LOGO

#define TAGKEYS(KEY,TAG) \
	{ MODKEY,                    KEY,            view,            {.ui = 1 << TAG} }, \
	{ MODKEY|WLR_MODIFIER_CTRL,  KEY,            toggleview,      {.ui = 1 << TAG} }, \
	{ MODKEY|WLR_MODIFIER_SHIFT, KEY,           tag,             {.ui = 1 << TAG} }, \
	{ MODKEY|WLR_MODIFIER_CTRL|WLR_MODIFIER_SHIFT,KEY,toggletag, {.ui = 1 << TAG} }

/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }

/* commands */
static const char *termcmd[] = { "foot", NULL };
static const char *runcmd[] = { "foot", "--app-id", "foot-run", NULL };
static const char *menucmd[] = { "rofi", "-show", "drun", NULL };

/* named scratchpads - First arg only serves to match against key in rules*/
static const char *scratchpadcmd_spotify[] = {
	"s", "spotify", NULL,
};

static const char *scratchpadcmd_foot[] = {
	"a", "foot", "--app-id", "foot-scratchpad", NULL,
};

/* static const char *scratchpadcmd_notes[] = { */
/* 	"a", "alacritty", "-t", "scratchpad", NULL, */
/* }; */

// BEWARE! Change the hardcoded nix store path!
#define SEQUENCE_DETECTOR "sequence_detector -c $HOME/.config/dwl/sequence-detector.config.json "

static const int monitor_order[] = { 3, 2, 1, 0 };
#include "keys.h"
static const Key keys[] = {
	/* modifier                  key                 function        argument */
	{ MODKEY,                    Key_semicolon,  spawn,          {.v = menucmd} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_semicolon,  spawn,          {.v = runcmd} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_Return,     spawn,          {.v = termcmd} },

	{ MODKEY,                    Key_j,          focusstack,     {.i = +1} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_j,          movestack,      {.i = +1} },
	{ MODKEY,                    Key_k,          focusstack,     {.i = -1} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_k,          movestack,      {.i = -1} },
	{ MODKEY,                    Key_comma,      focusnthclient, {0} },
	{ MODKEY,                    Key_h,          setmfact,       {.f = -0.05f} },
	{ MODKEY,                    Key_l,          setmfact,       {.f = +0.05f} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_comma,      incnmaster,     {.i = +1} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_period,     incnmaster,     {.i = -1} },

	{ MODKEY,                    Key_Return,     zoom,           {0} },
	{ MODKEY,                    Key_Tab,        view,           {0} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_c,          killclient,     {0} },

	{ MODKEY,                    Key_t,          setlayout,      {.v = &layouts[0]} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_t,          setlayout,      {.v = &layouts[3]} },
	{ MODKEY,                    Key_f,          setlayout,      {.v = &layouts[1]} },
	{ MODKEY,                    Key_m,          setlayout,      {.v = &layouts[2]} },
	/* { MODKEY,                    Key_i,          setlayout,      {.v = &layouts[4]} }, */
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_m,      togglefullscreen, {0} },

	{ MODKEY,                    Key_space,      setlayout,      {0} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_space,      togglefloating, {0} },

	{ MODKEY,                    Key_0,          view,           {.ui = ~0} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_0,          tag,            {.ui = ~0} },

	{ MODKEY,                    Key_q,          focusnthmon,    {.i = monitor_order[0]} },
	{ MODKEY,                    Key_w,          focusnthmon,    {.i = monitor_order[1]} },
	{ MODKEY,                    Key_e,          focusnthmon,    {.i = monitor_order[2]} },
	{ MODKEY,                    Key_r,          focusnthmon,    {.i = monitor_order[3]} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_q,          tagnthmon,      {.i = monitor_order[0]} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_w,          tagnthmon,      {.i = monitor_order[1]} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_e,          tagnthmon,      {.i = monitor_order[2]} },
	{ MODKEY|WLR_MODIFIER_SHIFT, Key_r,          tagnthmon,      {.i = monitor_order[3]} },

	TAGKEYS(                     Key_1,                          0),
	TAGKEYS(                     Key_2,                          1),
	TAGKEYS(                     Key_3,                          2),
	TAGKEYS(                     Key_4,                          3),
	TAGKEYS(                     Key_5,                          4),
	TAGKEYS(                     Key_6,                          5),
	TAGKEYS(                     Key_7,                          6),
	TAGKEYS(                     Key_8,                          7),
	TAGKEYS(                     Key_9,                          8),

	{ 0,                         Key_XF86AudioStop,         spawn, SHCMD(SEQUENCE_DETECTOR "-g mpris stop") },
	{ 0,                         Key_XF86AudioPause,        spawn, SHCMD(SEQUENCE_DETECTOR "-g mpris pause") },
	{ 0,                         Key_XF86AudioPlay,         spawn, SHCMD(SEQUENCE_DETECTOR "-g mpris play") },
	{ 0,                         Key_XF86AudioPlay2,         spawn, SHCMD(SEQUENCE_DETECTOR "-g mpris play") },
	{ 0,                         Key_XF86AudioNext,         spawn, SHCMD(SEQUENCE_DETECTOR "-g mpris next") },
	{ 0,                         Key_XF86AudioPrev,         spawn, SHCMD(SEQUENCE_DETECTOR "-g mpris prev") },
	{ 0,                         Key_XF86MonBrightnessUp,   spawn, SHCMD("$HOME/.config/dwl/scripts/brightness.sh up") },
	{ 0,                         Key_XF86MonBrightnessDown, spawn, SHCMD("$HOME/.config/dwl/scripts/brightness.sh down") },
	{ 0,                         Key_Print,                 spawn, SHCMD("$HOME/.config/dwl/scripts/print.sh -s") },

	{ MODKEY,                    Key_y,          spawn,      SHCMD("emacs-anywhere") },
	{ MODKEY,                    Key_p,          spawn,      SHCMD("passmenu") },

	{ MODKEY,                    Key_c,          togglesticky,   {0} },
	{ MODKEY,                    Key_s,          entermode,      {.i = SCRATCHPADS} },
	{ MODKEY,                    Key_a,          entermode,      {.i = PROGRAM_LAUNCHER} },

	/* Ctrl-Alt-Backspace and Ctrl-Alt-Fx used to be handled by X server */
	{ MODKEY|WLR_MODIFIER_ALT,   Key_q,          quit,           {0} },
	/* Ctrl-Alt-Fx is used to switch to another VT, if you don't know what a VT is
	 * do not remove them.
	 */
#define CHVT(KEY,n) { WLR_MODIFIER_CTRL|WLR_MODIFIER_ALT, KEY, chvt, {.ui = (n)} }
	CHVT(Key_F1, 1), CHVT(Key_F2,  2),  CHVT(Key_F3,  3),  CHVT(Key_F4,  4),
	CHVT(Key_F5, 5), CHVT(Key_F6,  6),  CHVT(Key_F7,  7),  CHVT(Key_F8,  8),
	CHVT(Key_F9, 9), CHVT(Key_F10, 10), CHVT(Key_F11, 11), CHVT(Key_F12, 12),
};

#define EMACS(cmd) SHCMD("emacsclient -nc " cmd)
static const Modekey modekeys[] = {
	/* mode      modifier                  key                 function        argument */
	{ SCRATCHPADS, { 0, Key_s, focusortogglematchingscratch, {.v = scratchpadcmd_spotify} } },
	{ SCRATCHPADS, { 0, Key_s, entermode, {.i = NORMAL} } },
	{ SCRATCHPADS, { 0, Key_t, focusortogglematchingscratch, {.v = scratchpadcmd_foot} } },
	{ SCRATCHPADS, { 0, Key_t, entermode, {.i = NORMAL} } },
	{ SCRATCHPADS, { 0, Key_p, entermode, {.i = PASSTHROUGH} } },
	{ SCRATCHPADS, { 0, Key_Escape, entermode, {.i = NORMAL} } },

	{ PROGRAM_LAUNCHER, { 0, Key_e, spawn, EMACS("")} },
	{ PROGRAM_LAUNCHER, { 0, Key_e, entermode, {.i = NORMAL} } },
	{ PROGRAM_LAUNCHER, { 0, Key_d, spawn, EMACS("--eval \"'(dired nil)\"")} },
	{ PROGRAM_LAUNCHER, { 0, Key_d, entermode, {.i = NORMAL} } },
	{ PROGRAM_LAUNCHER, { 0, Key_t, spawn, EMACS("--eval \"'(vterm)\"")} },
	{ PROGRAM_LAUNCHER, { 0, Key_t, entermode, {.i = NORMAL} } },

	{ PROGRAM_LAUNCHER, { 0, Key_Escape, entermode, {.i = NORMAL} } },

	{ PASSTHROUGH,      { MODKEY|WLR_MODIFIER_ALT, Key_Escape, entermode, {.i = NORMAL} } },
};

static const Button buttons[] = {
	{ MODKEY, BTN_LEFT,   moveresize,     {.ui = CurMove} },
	{ MODKEY, BTN_MIDDLE, togglefloating, {0} },
	{ MODKEY, BTN_RIGHT,  moveresize,     {.ui = CurResize} },
};

A home/dwl/wm.scm => home/dwl/wm.scm +26 -0
@@ 0,0 1,26 @@
(define-module (home dwl wm)
  #:use-module (guix packages)
  #:use-module (guix gexp)
  #:use-module (guix utils)
  #:use-module (ruther packages wayland)
  #:use-module (guix download)
  #:use-module (guix git-download))

(define-public dwl-mine
  (package
    (inherit dwl-0.7)
    (name "dwl-mine")
    (source
     (origin
       (method git-fetch)
       (uri (git-reference
        (url "https://github.com/Rutherther/dwl")
        (commit "a8e46f319f574876ce697a7097eb47a2080b1a87")))
       (sha256
        (base32 "1jkyqwnc6x48bcjcyn1ha69vwql18ib1w47jx6bxz7wg7bvidm01"))))
    (arguments (substitute-keyword-arguments (package-arguments dwl-0.7)
                 ((#:phases original-phases)
                  #~(modify-phases #$original-phases
                      (add-after 'unpack 'add-config
                        (lambda _
                          (copy-file #$(local-file "config.h") "config.h")))))))))

Do not follow this link