Upload files to "configs/dusk"

This commit is contained in:
2025-12-25 12:11:12 +00:00
parent f18d7842ac
commit 9b3dd7ac82
2 changed files with 733 additions and 0 deletions

700
configs/dusk/config.h Normal file
View File

@@ -0,0 +1,700 @@
/* See LICENSE file for copyright and license details. */
#include <X11/XF86keysym.h>
/* appearance */
static const unsigned int borderpx = 2; /* border pixel of windows */
static const unsigned int snap = 32; /* snap pixel */
static const unsigned int gappih = 5; /* horiz inner gap between windows */
static const unsigned int gappiv = 5; /* vert inner gap between windows */
static const unsigned int gappoh = 5; /* horiz outer gap between windows and screen edge */
static const unsigned int gappov = 5; /* vert outer gap between windows and screen edge */
static const unsigned int gappfl = 5; /* gap between floating windows (when relevant) */
static const unsigned int smartgaps_fact = 0; /* smartgaps factor when there is only one client; 0 = no gaps, 3 = 3x outer gaps */
static unsigned int attachdefault = AttachAside; // AttachMaster, AttachAbove, AttachAside, AttachBelow, AttachBottom
static const int initshowbar = 1; /* 0 means no bar */
static const int bar_height = 0; /* 0 means derive from font, >= 1 explicit height */
static const int vertpad = 5; /* vertical (outer) padding of bar */
static const int sidepad = 5; /* horizontal (outer) padding of bar */
static const int iconsize = 16; /* icon size */
static const int iconspacing = 5; /* space between icon and title */
static const float pfact = 0.25; /* size of workspace previews relative to monitor size */
static int floatposgrid_x = 5; /* float grid columns */
static int floatposgrid_y = 5; /* float grid rows */
static const int horizpadbar = 6; /* horizontal (inner) padding for statusbar (increases lrpad) */
static const int vertpadbar = 6; /* vertical (inner) padding for statusbar (increases bh, overridden by bar_height) */
static const char slopspawnstyle[] = "-t 0 -c 0.92,0.85,0.69,0.3 -o"; /* do NOT define -f (format) here */
static const char slopresizestyle[] = "-t 0 -c 0.92,0.85,0.69,0.3"; /* do NOT define -f (format) here */
static const unsigned int systrayspacing = 0; /* systray spacing */
static const char *toggle_float_pos = "50% 50% 80% 80%"; // default floating position when triggering togglefloating
static const double defaultopacity = 0.9; /* client default opacity, e.g. 0.75. 0 means don't apply opacity */
static const double moveopacity = 0.6; /* client opacity when being moved, 0 means don't apply opacity */
static const double resizeopacity = 0.6; /* client opacity when being resized, 0 means don't apply opacity */
static const double placeopacity = 0.6; /* client opacity when being placed, 0 means don't apply opacity */
/* Indicators: see lib/bar_indicators.h for options */
static int indicators[IndicatorLast] = {
[IndicatorWs] = INDICATOR_NONE,
[IndicatorPinnedWs] = INDICATOR_NONE,
[IndicatorFakeFullScreen] = INDICATOR_PLUS,
[IndicatorFakeFullScreenActive] = INDICATOR_PLUS_AND_LARGER_SQUARE,
[IndicatorFloatFakeFullScreen] = INDICATOR_PLUS,
[IndicatorFloatFakeFullScreenActive] = INDICATOR_PLUS_AND_LARGER_SQUARE,
[IndicatorTiled] = INDICATOR_NONE,
[IndicatorFloating] = INDICATOR_TOP_LEFT_LARGER_SQUARE,
};
/* Custom indicators using status2d markup, e.g. enabled via INDICATOR_CUSTOM_3 */
static char *custom_2d_indicator_1 = "^c#00A523^^r0,h,w,2^"; // green underline
static char *custom_2d_indicator_2 = "^c#55cdfc^^r3,3,4,4^^c#E72608^^r4,4,2,2^"; // blue rectangle
static char *custom_2d_indicator_3 = "^f-10^^c#E72608^𐄛"; // example using a character as an indicator
static char *custom_2d_indicator_4 = "^c#E26F0B^^r0,h,w,1^^r0,0,1,h^^r0,0,w,1^^rw,0,1,h^"; // orange box
static char *custom_2d_indicator_5 = "^c#CB9700^^r0,h,w,1^^r0,0,w,1^"; // top and bottom lines
static char *custom_2d_indicator_6 = "^c#F0A523^^r6,2,1,-4^^r-6,2,1,-4^"; // orange vertical bars
/* The below are only used if the WorkspaceLabels functionality is enabled */
static char *occupied_workspace_label_format = "%s: %s"; /* format of a workspace label */
static char *vacant_workspace_label_format = "%s"; /* format of an empty / vacant workspace */
static int lowercase_workspace_labels = 1; /* whether to change workspace labels to lower case */
static int prefer_window_icons_over_workspace_labels = 1; /* whether to use window icons instead of labels if present */
static int swap_occupied_workspace_label_format_strings = 0; /* 0 gives "icon: label", 1 gives "label: icon" */
/* This determines what happens with pinned workspaces on a monitor when that monitor is removed.
* 0 - the workspaces becomes unpinned and is moved to another monitor or
* 1 - the workspace clients are moved to the selected workspace on the first monitor, but
* the workspace itself is hidden
*
* Non-pinned workspaces are always redistributed among the remaining monitors.
*/
static const int workspaces_per_mon = 0;
/* See util.h for options */
static uint64_t functionality = 0
// |AutoReduceNmaster // automatically reduce the number of master clients if one is closed
|BanishMouseCursor // like xbanish, hides mouse cursor when using the keyboard
// |BanishMouseCursorToCorner // makes BanishMouseCursor move the cursor to one of the corners of the focused window
// |SmartGaps // enables no or increased gaps if there is only one visible window
// |SmartGapsMonocle // enforces no gaps in monocle layout
|Systray // enables a systray in the bar
|SystrayNoAlpha // disables the use of transparency for the systray, enable if you do not use a compositor
|Swallow // allows X applications started from the command line to swallow the terminal
|SwallowFloating // allow floating windows to swallow the terminal by default
// |CenteredWindowName // center the window titles on the bar
// |BarActiveGroupBorderColor // use border color of active group for the bar, otherwise normal scheme is used
// |BarMasterGroupBorderColor // use border color of master group for the bar, otherwise normal scheme is used
// |FlexWinBorders // use the SchemeFlex* color schemes, falls back to SchemeTitle* if disabled
|SpawnCwd // spawn applications in the currently selected client's working directory
|ColorEmoji // enables color emoji support (removes Xft workaround)
// |Status2DNoAlpha // option to not use alpha when drawing status2d status
// |BarBorder // draw a border around the bar
|BarBorderColBg // optionally use the bar background colour for the bar border (rather than border colour)
|BarPadding // add vertical and side padding as per vertpad and sidepad variables above
// |NoBorders // as per the noborder patch, show no border when only one client in tiled mode
|Warp // warp cursor to currently focused window
// |DecorationHints // omit drawing the window border if the applications asks not to
// |FocusedOnTop // allows focused window to stay on top of other windows
// |FocusedOnTopTiled // additional toggle to allow focused tiled clients to show on top of floating windows
|FocusFollowMouse // allow window under the mouse cursor to get focus when changing views or killing clients
// |FocusOnClick // only allow focus change when the user clicks on windows (disables sloppy focus)
|FocusOnNetActive // allow windows demanding attention to receive focus automatically
|AllowNoModifierButtons // allow some window operations, like move and resize, to work without having to hold down a modifier key
|CenterSizeHintsClients // center tiled clients subject to size hints within their tiled area
// |ResizeHints // respect size hints also when windows are tiled
|SnapToWindows // snap to windows when moving floating clients
|SnapToGaps // snap to outer gaps when moving floating clients
// |SortScreens // monitors are numbered from left to right
// |ViewOnWs // follow a window to the workspace it is being moved to
|Xresources // add support for changing colours via Xresources
// |Debug // enables additional debug output
|AltWindowTitles // show alternate window titles, if present
// |AltWorkspaceIcons // show the workspace name instead of the icons
// |GreedyMonitor // disables swap of workspaces between monitors
|SmartLayoutConversion // automatically adjust layout based on monitor orientation when moving a workspace from one monitor to another
// |AutoHideScratchpads // automatically hide open scratchpads when moving to another workspace
// |RioDrawIncludeBorders // indicates whether the area drawn using slop includes the window borders
// |RioDrawSpawnAsync // spawn the application alongside rather than after drawing area using slop
// |RestrictFocusstackToMonitor // restrict focusstack to only operate within the monitor, otherwise focus can drift between monitors
|WinTitleIcons // adds application icons to window titles in the bar
// |StackerIcons // adds a stacker icon hints in window titles
// |WorkspaceLabels // adds the class of the master client next to the workspace icon
// |WorkspacePreview // adds preview images when hovering workspace icons in the bar
;
static int flexwintitle_masterweight = 15; // master weight compared to hidden and floating window titles
static int flexwintitle_stackweight = 4; // stack weight compared to hidden and floating window titles
static int flexwintitle_hiddenweight = 0; // hidden window title weight
static int flexwintitle_floatweight = 0; // floating window title weight, set to 0 to not show floating windows
static int flexwintitle_separator = 0; // width of client separator
static const char *fonts[] = { "Hack Nerd Font:size=12:antialias=true:autohint=true" };
static char dmenufont[60] = "Hack Nerd Font:size=12:antialias=true:autohint=true";
static char dmenunormfgcolor[] = "#D9CFC5";
static char dmenunormbgcolor[] = "#492B2D";
static char dmenuselfgcolor[] = "#D9CFC5";
static char dmenuselbgcolor[] = "#82363A";
static char dmenubordercolor[] = "#492B2D";
/* Xresources preferences to load at startup. */
static const ResourcePref resources[] = {
{ "dmenu.norm.fg.color", STRING, &dmenunormfgcolor },
{ "dmenu.norm.bg.color", STRING, &dmenunormbgcolor },
{ "dmenu.sel.fg.color", STRING, &dmenuselfgcolor },
{ "dmenu.sel.bg.color", STRING, &dmenuselbgcolor },
{ "dmenu.border.bg.color", STRING, &dmenubordercolor },
{ "dmenu.font", STRING, &dmenufont },
};
/* Default opacity levels fg bg border */
unsigned int default_alphas[] = { OPAQUE, 0xd0U, OPAQUE };
static char *colors[SchemeLast][4] = {
/* fg bg border */
[SchemeNorm] = { "#D9CFC5", "#492B2D", "#492B2D" },
[SchemeTitleNorm] = { "#D9CFC5", "#492B2D", "#643B3E" },
[SchemeTitleSel] = { "#D9CFC5", "#82363A", "#82363A" },
[SchemeFlexInaFloat] = { "#D9CFC5", "#492B2D", "#643B3E" },
[SchemeFlexSelFloat] = { "#D9CFC5", "#82363A", "#82363A" },
[SchemeScratchNorm] = { "#D9CFC5", "#492B2D", "#CAD3F5" },
[SchemeScratchSel] = { "#D9CFC5", "#82363A", "#CAD3F5" },
[SchemeHidNorm] = { "#D9CFC5", "#492B2D", "#000000" },
[SchemeHidSel] = { "#D9CFC5", "#82363A", "#000000" },
[SchemeUrg] = { "#E0E0E0", "#A23419", "#A23419" },
[SchemeMarked] = { "#DDC470", "#724559", "#724559" },
[SchemeWsNorm] = { "#D9CFC5", "#492B2D", "#000000" },
[SchemeWsVisible] = { "#D9CFC5", "#82363A", "#000000" },
[SchemeWsSel] = { "#D9CFC5", "#82363A", "#000000" },
[SchemeWsOcc] = { "#D9CFC5", "#492B2D", "#000000" },
};
/* List of programs to start automatically during startup only. Note that these will not be
* executed again when doing a restart. */
static const char *const autostart[] = {
// "st", NULL,
NULL /* terminate */
};
/* List of programs to start automatically during a restart only. These should usually be short
* scripts that perform specific operations, e.g. changing a wallpaper. */
static const char *const autorestart[] = {
NULL /* terminate */
};
/* There are two options when it comes to per-client rules:
* - a traditional struct table or
* - specifying the fields used
*
* A traditional struct table looks like this:
* // class role instance title wintype opacity flags floatpos scratchkey workspace
* { "Gimp", NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, "4" },
* { "Firefox", NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, "9" },
*
* Alternatively you can specify the fields that are relevant to your rule, e.g.
*
* { .class = "Gimp", .workspace = "5" },
* { .class = "Firefox", .workspace = "9" },
*
* Any fields that you do not specify will default to 0 or NULL.
*
* Refer to the Rule struct definition for the list of available fields.
*/
static const Rule clientrules[] = {
/* xprop(1):
* WM_CLASS(STRING) = instance, class
* WM_NAME(STRING) = title
* WM_WINDOW_ROLE(STRING) = role
* _NET_WM_WINDOW_TYPE(ATOM) = wintype
*/
{ .wintype = "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", .flags = Unmanaged },
{ .wintype = WTYPE "DESKTOP", .flags = Unmanaged|Lower },
{ .wintype = WTYPE "DOCK", .flags = Unmanaged|Raise },
{ .wintype = WTYPE "DIALOG", .flags = AlwaysOnTop|Centered|Floating },
{ .wintype = WTYPE "UTILITY", .flags = AlwaysOnTop|Centered|Floating },
{ .wintype = WTYPE "TOOLBAR", .flags = AlwaysOnTop|Centered|Floating },
{ .wintype = WTYPE "SPLASH", .flags = AlwaysOnTop|Centered|Floating },
{ .instance = "spterm (w)", .scratchkey = 'w', .flags = Floating },
{ .instance = "spterm (e)", .scratchkey = 'e', .flags = Floating },
{ .instance = "spfm (r)", .scratchkey = 'r', .flags = Floating },
{ .instance = "spyt (y)", .scratchkey = 'y', .flags = Floating },
{ .class = "Gimp", .workspace = "5", .opacity = 0, .flags = Floating|SwitchWorkspace },
{ .class = "firefox", .workspace = "4", .opacity = 1, .flags = AttachMaster|SwitchWorkspace },
{ .class = "Mullvad Browser", .workspace = "4", .opacity = 1, .flags = AttachMaster|SwitchWorkspace },
{ .class = "REAPER", .workspace = "3", .opacity = 1, .flags = AttachMaster|SwitchWorkspace },
{ .class = "Steam", .flags = Floating|Centered },
{ .class = "steam_app_", .flags = SteamGame|Floating|Centered },
{ .class = "Google-chrome", .role = "GtkFileChooserDialog", .floatpos = "50% 50%", .flags = AlwaysOnTop|Floating },
{ .role = "pop-up", .flags = AlwaysOnTop|Floating|Centered },
{ .role = "browser", .workspace = "4", .opacity = 1, .flags = AttachBelow|OnlyModButtons|SwitchWorkspace },
{ .class = "Gnome-terminal", .role = "gnome-terminal-preferences", .flags = Centered },
// { .class = "Diffuse", .workspace = "4", .flags = NoSwallow|SwitchWorkspace|RevertWorkspace },
{ .class = "File-roller", .workspace = "9", .flags = Centered|Floating|SwitchWorkspace|RevertWorkspace },
{ .class = "Alacritty", .flags = Terminal },
{ .class = "st-256color", .flags = Terminal|AttachBottom },
{ .class = "XTerm", .flags = Terminal },
{ .class = "Xephyr", .flags = NoSwallow|Floating|Centered },
{ .class = "feh", .opacity = 1 },
{ .class = "mpv", .opacity = 1 },
{ .title = "Event Tester", .flags = NoSwallow },
};
/* Bar settings, this defines what bars exists, their position, and what attributes they have.
*
* monitor - the exact monitor number the bar should be created on
* (0 - primary, 1 - secondary, 2 - tertiary)
* idx - the bar index, used in relation to bar rules below
* (bar indexes can be reused across monitors)
* vert - whether the bar is horizontal (0) or vertical (1), not
* all bar modules will have support for being displayed
* in a vertical bar
* name - this is just a reference that can be used for logging
* purposes
* ext class - WM class to match on for external bars
* ext inst - WM instance to match on for external bars
* ext name - WM name to match on for external bars
*
* Bar positioning consists of four values, x, y, w and h which,
* similarly to floatpos, can have different meaning depending on
* the characters used. Absolute positioning (as in cross-monitor)
* is not supported, but exact positions relative to the monitor
* can be used. Percentage values are recommended for portability.
*
* All values can be a percentage relative to the space available
* on the monitor or they can be exact values, here are some example
* values:
* x
* 0% - left aligned (default)
* 100% - right aligned
* 50% - bar is centered on the screen
* 0x - exact position relative to the monitor
* -1x - value < 0 means use default
* y
* 0% - top bar (default)
* 100% - bottom bar
* 0y - exact position relative to the monitor
* -1y - value < 0 means use default
* w
* 100% - bar takes up the full width of the screen (default)
* 20% - small bar taking a fifth of the width of the screen
* 500w - the bar is 500 pixels wide (including border)
* -1w - value <= 0 means use default
* h
* 100% - bar takes up the full height of the screen
* 20% - small bar taking a fifth of the height of screen
* 30h - the bar is 30 pixels high (including border)
* -1h - value <= 0 means use the default (deduced by font size)
*
* Note that vertical and horizontal side padding are controlled by the
* vertpad and sidepad variables towards the top of this configuration file.
*/
static const BarDef bars[] = {
/* monitor idx vert x y w h name ext class ext inst ext name */
{ 0, 0, 0, "0% 0% 100% -1h ", "Primary top" },
// { 0, 1, 0, "0% 100% 100% -1h ", "Primary bottom" },
{ 1, 0, 0, "0% 0% 100% -1h ", "Secondary top" },
// { 1, 1, 0, "0% 100% 100% -1h ", "Secondary bottom" },
{ 2, 0, 0, "0% 0% 100% -1h ", "Tertiary top" },
// { 2, 1, 0, "0% 100% 100% -1h ", "Tertiary bottom" },
};
/* Bar rules allow you to configure what is shown where on the bar, as well as
* introducing your own bar modules.
*
* monitor:
* -1 show on all monitors
* 0 show on monitor 0
* 'A' show on active monitor (i.e. focused / selected) (or just -1 for active?)
* bar - bar index, 0 is default, 1 is extrabar
* scheme - defines the default scheme for the bar module
* lpad - adds artificial spacing on the left hand side of the module
* rpad - adds artificial spacing on the right hand side of the module
* value - arbitrary value where the interpretation is module specific
* alignment - how the module is aligned compared to other modules
* sizefunc, drawfunc, clickfunc - providing bar module width, draw and click functions
* name - does nothing, intended for visual clue and for logging / debugging
*/
#define PWRL PwrlForwardSlash
static const BarRule barrules[] = {
/* monitor bar scheme lpad rpad value alignment sizefunc drawfunc clickfunc hoverfunc name */
{ -1, 0, 0, 0, 0, PWRL, BAR_ALIGN_LEFT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ -1, 0, 0, 0, 0, PWRL, BAR_ALIGN_LEFT, size_workspaces, draw_workspaces, click_workspaces, hover_workspaces, "workspaces" },
{ -1, 0, 0, 0, 0, PWRL, BAR_ALIGN_LEFT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ -1, 0, 5, 0, 0, 0, BAR_ALIGN_LEFT, size_ltsymbol, draw_ltsymbol, click_ltsymbol, NULL, "layout" },
{ -1, 0, 0, 0, 0, PWRL, BAR_ALIGN_LEFT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ 0, 0, 6, 5, 5, 0, BAR_ALIGN_RIGHT, size_systray, draw_systray, click_systray, NULL, "systray" },
{ 0, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ 0, 0, 0, 0, 0, 0, BAR_ALIGN_RIGHT, size_status, draw_status, click_status, NULL, "status0" },
// { 0, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ 0, 0, 0, 0, 0, 1, BAR_ALIGN_RIGHT, size_status, draw_status, click_status, NULL, "status1" },
// { 0, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ 0, 0, 0, 0, 0, 2, BAR_ALIGN_RIGHT, size_status, draw_status, click_status, NULL, "status2" },
// { 0, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ 0, 0, 0, 0, 0, 3, BAR_ALIGN_RIGHT, size_status, draw_status, click_status, NULL, "status3" },
// { 0, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ 0, 0, 0, 0, 0, 4, BAR_ALIGN_RIGHT, size_status, draw_status, click_status, NULL, "status4" },
// { 0, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ 0, 0, 0, 0, 0, 5, BAR_ALIGN_RIGHT, size_status, draw_status, click_status, NULL, "status5" },
// { 0, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ 0, 0, 0, 0, 0, 6, BAR_ALIGN_RIGHT, size_status, draw_status, click_status, NULL, "status6" },
// { 0, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ 0, 0, 0, 0, 0, 7, BAR_ALIGN_RIGHT, size_status, draw_status, click_status, NULL, "status7" },
// { 0, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ 0, 0, 0, 0, 0, 8, BAR_ALIGN_RIGHT, size_status, draw_status, click_status, NULL, "status8" },
// { 0, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ 0, 0, 0, 0, 5, 9, BAR_ALIGN_RIGHT, size_status, draw_status, click_status, NULL, "status9" },
{ -1, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT, size_powerline, draw_powerline, NULL, NULL, "powerline join" },
{ -1, 0, 0, 0, 0, PWRL, BAR_ALIGN_NONE, size_wintitle_sticky, draw_wintitle_sticky, click_wintitle_sticky, NULL, "wintitle_sticky" },
{ -1, 0, 0, 0, 0, PWRL, BAR_ALIGN_CENTER, size_pwrl_ifhidfloat, draw_powerline, NULL, NULL, "powerline join" },
{ -1, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT_RIGHT, size_wintitle_hidden, draw_wintitle_hidden, click_wintitle_hidden, NULL, "wintitle_hidden" },
{ -1, 0, 0, 0, 0, PWRL, BAR_ALIGN_RIGHT_RIGHT, size_wintitle_floating, draw_wintitle_floating, click_wintitle_floating, NULL, "wintitle_floating" },
{ -1, 0, 0, 0, 0, PWRL, BAR_ALIGN_NONE, size_flexwintitle, draw_flexwintitle, click_flexwintitle, NULL, "flexwintitle" },
};
/* Workspace rules define what workspaces are available and their properties.
*
* name - the name of the workspace, this is a reference used for keybindings - see WSKEYS
* monitor - the monitor number the workspace starts on by default, -1 means assign freely
* pinned - whether the workspace is pinned on the assigned monitor
* layout - the layout index the workspace should start with, refer to the layouts array
* mfact - factor of master area size, -1 means use global config
* nmaster - number of clients in master area, -1 means use global config
* nstack - number of clients in primary stack area, -1 means use global config
* gaps - whether gaps are enabled for the workspace, -1 means use global config
*
* icons:
* def - the default icon shown for the workspace, if empty string then the workspace is
* hidden by default, if NULL then the workspace name is used for the icon
* vac - the vacant icon shows if the workspace is selected, the default icon is an empty
* string (hidden by default) and the workspace has no clients
* occ - the occupied icon shows if the workspace has clients
*
*/
static const WorkspaceRule wsrules[] = {
/* ------------------------------- schemes ------------------------------- ------ icons ------
name, monitor, pinned, layout, mfact, nmaster, nstack, gaps, default, visible, selected, occupied, def, vac, occ, */
{ "1", -1, 0, 0, -1, -1, -1, -1, SchemeWsNorm, SchemeWsVisible, SchemeWsSel, SchemeWsOcc, "1", "", "[1]", },
{ "2", -1, 0, 0, -1, -1, -1, -1, SchemeWsNorm, SchemeWsVisible, SchemeWsSel, SchemeWsOcc, "2", "", "[2]", },
{ "3", -1, 0, 0, -1, -1, -1, -1, SchemeWsNorm, SchemeWsVisible, SchemeWsSel, SchemeWsOcc, "3", "", "[3]", },
{ "4", -1, 0, 0, -1, -1, -1, -1, SchemeWsNorm, SchemeWsVisible, SchemeWsSel, SchemeWsOcc, "4", "", "[4]", },
{ "5", -1, 0, 0, -1, -1, -1, -1, SchemeWsNorm, SchemeWsVisible, SchemeWsSel, SchemeWsOcc, "5", "", "[5]", },
{ "6", -1, 0, 0, -1, -1, -1, -1, SchemeWsNorm, SchemeWsVisible, SchemeWsSel, SchemeWsOcc, "6", "", "[6]", },
{ "7", -1, 0, 0, -1, -1, -1, -1, SchemeWsNorm, SchemeWsVisible, SchemeWsSel, SchemeWsOcc, "7", "", "[7]", },
{ "8", -1, 0, 0, -1, -1, -1, -1, SchemeWsNorm, SchemeWsVisible, SchemeWsSel, SchemeWsOcc, "8", "", "[8]", },
{ "9", -1, 0, 0, -1, -1, -1, -1, SchemeWsNorm, SchemeWsVisible, SchemeWsSel, SchemeWsOcc, "9", "", "[9]", },
};
static const float mfact = 0.50; /* factor of master area size [0.05..0.95] */
static const int nmaster = 1; /* number of clients in master area */
static const int nstack = 0; /* number of clients in primary stack area */
static const int enablegaps = 1; /* whether gaps are enabled by default or not */
/* layout(s) */
static const Layout layouts[] = {
/* symbol arrange function, { nmaster, nstack, layout, master axis, stack axis, secondary stack axis, symbol func }, name */
{ "[]=", flextile, { -1, -1, SPLIT_VERTICAL, TOP_TO_BOTTOM, TOP_TO_BOTTOM, 0, NULL }, "tile" },
{ "|||", flextile, { -1, -1, NO_SPLIT, LEFT_TO_RIGHT, LEFT_TO_RIGHT, 0, NULL }, "columns" },
{ "===", flextile, { -1, -1, NO_SPLIT, TOP_TO_BOTTOM, TOP_TO_BOTTOM, 0, NULL }, "rows" },
{ "[M]", flextile, { -1, -1, NO_SPLIT, MONOCLE, MONOCLE, 0, NULL }, "monocle" },
{ "||=", flextile, { -1, -1, SPLIT_VERTICAL, LEFT_TO_RIGHT, TOP_TO_BOTTOM, 0, NULL }, "col" },
{ ">M>", flextile, { -1, -1, FLOATING_MASTER, LEFT_TO_RIGHT, LEFT_TO_RIGHT, 0, NULL }, "floating master" },
{ "[D]", flextile, { -1, -1, SPLIT_VERTICAL, TOP_TO_BOTTOM, MONOCLE, 0, NULL }, "deck" },
{ "TTT", flextile, { -1, -1, SPLIT_HORIZONTAL, LEFT_TO_RIGHT, LEFT_TO_RIGHT, 0, NULL }, "bstack" },
{ "===", flextile, { -1, -1, SPLIT_HORIZONTAL, LEFT_TO_RIGHT, TOP_TO_BOTTOM, 0, NULL }, "bstackhoriz" },
{ "==#", flextile, { -1, -1, SPLIT_HORIZONTAL, TOP_TO_BOTTOM, GAPLESSGRID_CFACTS, 0, NULL }, "bstackgrid" },
{ "|M|", flextile, { -1, -1, SPLIT_CENTERED_VERTICAL, LEFT_TO_RIGHT, TOP_TO_BOTTOM, TOP_TO_BOTTOM, NULL }, "centeredmaster" },
{ "-M-", flextile, { -1, -1, SPLIT_CENTERED_HORIZONTAL, TOP_TO_BOTTOM, LEFT_TO_RIGHT, LEFT_TO_RIGHT, NULL }, "centeredmaster horiz" },
{ ":::", flextile, { -1, -1, NO_SPLIT, GAPLESSGRID_CFACTS, GAPLESSGRID_CFACTS, 0, NULL }, "gapless grid" },
{ "[\\]", flextile, { -1, -1, NO_SPLIT, DWINDLE_CFACTS, DWINDLE_CFACTS, 0, NULL }, "fibonacci dwindle" },
{ "(@)", flextile, { -1, -1, NO_SPLIT, SPIRAL_CFACTS, SPIRAL_CFACTS, 0, NULL }, "fibonacci spiral" },
{ "[T]", flextile, { -1, -1, SPLIT_VERTICAL, LEFT_TO_RIGHT, TATAMI_CFACTS, 0, NULL }, "tatami mats" },
{ "><>", NULL, { -1, -1 }, "floating" }, /* no layout function means floating behavior */
};
#define Shift ShiftMask
#define Ctrl ControlMask
#define Alt Mod1Mask
#define AltGr Mod3Mask
#define Super Mod4Mask
#define ShiftGr Mod5Mask
/* key definitions */
#define MODKEY Super
#define SCRATCHKEYS(MOD,KEY,CMD) \
{ KeyPress, MOD, KEY, togglescratch, {.v = CMD } }, \
{ KeyPress, MOD|Ctrl, KEY, setscratch, {.v = CMD } }, \
{ KeyPress, MOD|Ctrl|Shift, KEY, removescratch, {.v = CMD } }, \
#define WSKEYS(MOD,KEY,NAME) \
{ KeyPress, MOD, KEY, comboviewwsbyname, {.v = NAME} }, \
{ KeyPress, MOD|Alt, KEY, enablewsbyname, {.v = NAME} }, \
{ KeyPress, MOD|Shift, KEY, movetowsbyname, {.v = NAME} }, \
{ KeyPress, MOD|Ctrl, KEY, sendtowsbyname, {.v = NAME} }, \
{ KeyPress, MOD|Ctrl|Shift, KEY, movealltowsbyname, {.v = NAME} }, \
{ KeyPress, MOD|Ctrl|Alt, KEY, moveallfromwsbyname, {.v = NAME} }, \
{ KeyPress, MOD|Ctrl|Alt|Shift, KEY, swapwsbyname, {.v = NAME} }, \
#define STACKKEYS(MOD,ACTION) \
{ KeyPress, MOD, XK_j, ACTION, {.i = INC(+1) } }, \
{ KeyPress, MOD, XK_k, ACTION, {.i = INC(-1) } }, \
{ KeyPress, MOD, XK_s, ACTION, {.i = PREVSEL } }, \
{ KeyPress, MOD, XK_w, ACTION, {.i = 1 } }, \
{ KeyPress, MOD, XK_e, ACTION, {.i = 2 } }, \
{ KeyPress, MOD, XK_a, ACTION, {.i = 3 } }, \
{ KeyPress, MOD, XK_z, ACTION, {.i = LASTTILED } },
/* This relates to the StackerIcons functionality and should mirror the STACKKEYS list above. */
static const StackerIcon stackericons[] = {
{ "[j]", {.i = INC(+1) } },
{ "[k]", {.i = INC(-1) } },
{ "[s]", {.i = PREVSEL } },
{ "[w]", {.i = 1 } },
{ "[e]", {.i = 2 } },
{ "[a]", {.i = 3 } },
{ "[z]", {.i = LASTTILED } },
};
/* Helper macros for spawning commands */
#define SHCMD(cmd) { .v = (const char*[]){ NULL, "/bin/sh", "-c", cmd, NULL } }
#define CMD(...) { .v = (const char*[]){ NULL, __VA_ARGS__, NULL } }
/* Scratch/Spawn commands: NULL (scratchkey), command, argument, argument, ..., NULL */
static const char *termcmd[] = { "st", NULL };
static const char *dmenucmd[] = {
"dmenu_run",
"-fn", dmenufont,
"-nb", dmenunormbgcolor,
"-nf", dmenunormfgcolor,
"-sb", dmenuselbgcolor,
"-sf", dmenuselfgcolor,
// "-bb", dmenubordercolor,
NULL
};
static const char *spcmd_w[] = {"w", "st", "-n", "spterm (w)", "-g", "120x34", NULL };
static const char *spcmd_e[] = {"e", "st", "-n", "spterm (e)", "-g", "120x34", NULL };
static const char *spcmd_r[] = {"r", "st", "-n", "spfm (r)", "-g", "144x41", "-e", "ranger", NULL };
static const char *spcmd_y[] = {"y", "st", "-n", "spyt (y)", "-g", "144x41", "-e", "yt-x", NULL };
static const char *statusclickcmd[] = { "~/bin/statusbar/statusclick.sh", NULL };
static Key keys[] = {
/* type modifier key function argument */
{ KeyPress, 0, XF86XK_MonBrightnessUp, spawn, SHCMD("brightnessctl set +5%") },
{ KeyPress, 0, XF86XK_MonBrightnessDown,spawn, SHCMD("brightnessctl set 5%-") },
{ KeyPress, 0, XF86XK_KbdBrightnessUp, spawn, SHCMD("brightnessctl -d smc::kbd_backlight set +10%") },
{ KeyPress, 0, XF86XK_KbdBrightnessDown,spawn, SHCMD("brightnessctl -d smc::kbd_backlight set 10%-") },
{ KeyPress, 0, XF86XK_AudioPrev, spawn, SHCMD("mpc prev") },
{ KeyPress, 0, XF86XK_AudioPlay, spawn, SHCMD("mpc toggle") },
{ KeyPress, 0, XF86XK_AudioNext, spawn, SHCMD("mpc next") },
{ KeyPress, Shift, XF86XK_AudioRaiseVolume, spawn, SHCMD("mpc volume +5") },
{ KeyPress, Shift, XF86XK_AudioLowerVolume, spawn, SHCMD("mpc volume -5") },
{ KeyPress, 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("amixer set Master 5%+") },
{ KeyPress, 0, XF86XK_AudioLowerVolume, spawn, SHCMD("amixer set Master 5%-") },
{ KeyPress, 0, XF86XK_AudioMute, spawn, SHCMD("amixer set Master toggle") },
// { KeyPress, MODKEY, XK_c, clipcopy, {0}},
// { KeyPress, MODKEY, XK_v, clippaste, {0}},
// { KeyPress, MODKEY, XK_x, clipcut, {0}},
{ KeyPress, MODKEY, XK_d, spawn, {.v = dmenucmd } }, // spawn dmenu for launching other programs
{ KeyPress, MODKEY, XK_Return, spawn, {.v = termcmd } }, // spawn a terminal
{ KeyPress, MODKEY|Shift, XK_Return, riospawn, {.v = termcmd } }, // draw/spawn a terminal
{ KeyPress, MODKEY, XK_b, togglebar, {0} }, // toggles the display of the bar(s) on the current monitor
{ KeyPress, MODKEY, XK_j, focusstack, {.i = +1 } }, // focus on the next client in the stack
{ KeyPress, MODKEY, XK_k, focusstack, {.i = -1 } }, // focus on the previous client in the stack
{ KeyPress, MODKEY|Alt|Shift, XK_j, focusstack, {.i = +2 } }, // allows focusing on hidden clients
{ KeyPress, MODKEY|Alt|Shift, XK_k, focusstack, {.i = -2 } }, // allows focusing on hidden clients
{ KeyPress, MODKEY, XK_Left, focusdir, {.i = LEFT } }, // focus on the client left of the currently focused client
{ KeyPress, MODKEY, XK_Right, focusdir, {.i = RIGHT } }, // focus on the client right of the currently focused client
{ KeyPress, MODKEY, XK_Up, focusdir, {.i = UP } }, // focus on the client above the currently focused client
{ KeyPress, MODKEY, XK_Down, focusdir, {.i = DOWN } }, // focus on the client below the currently focused client
{ KeyPress, MODKEY|Ctrl, XK_Left, placedir, {.i = LEFT } }, // swap places with the client window on the immediate left of the current client
{ KeyPress, MODKEY|Ctrl, XK_Right, placedir, {.i = RIGHT } }, // swap places with the client window on the immediate right of the current client
{ KeyPress, MODKEY|Ctrl, XK_Up, placedir, {.i = UP } }, // swap places with the client window above the current client
{ KeyPress, MODKEY|Ctrl, XK_Down, placedir, {.i = DOWN } }, // swap places with the client window below the current client
{ KeyPress, MODKEY|Ctrl, XK_j, pushdown, {0} }, // move the selected client down the stack
{ KeyPress, MODKEY|Ctrl, XK_k, pushup, {0} }, // move the selected client up the stack
{ KeyPress, MODKEY, XK_i, incnmaster, {.i = +1 } }, // increase the number of clients in the master area
{ KeyPress, MODKEY, XK_u, incnmaster, {.i = -1 } }, // decrease the number of clients in the master area
{ KeyPress, MODKEY|Ctrl, XK_i, incnstack, {.i = +1 } }, // increase the number of clients in the primary (first) stack area
{ KeyPress, MODKEY|Ctrl, XK_u, incnstack, {.i = -1 } }, // increase the number of clients in the primary (first) stack area
{ KeyPress, MODKEY, XK_h, setmfact, {.f = -0.05} }, // decrease the size of the master area compared to the stack area(s)
{ KeyPress, MODKEY, XK_l, setmfact, {.f = +0.05} }, // increase the size of the master area compared to the stack area(s)
{ KeyPress, MODKEY|Shift, XK_h, setcfact, {.f = +0.25} }, // increase size respective to other windows within the same area
{ KeyPress, MODKEY|Shift, XK_l, setcfact, {.f = -0.25} }, // decrease client size respective to other windows within the same area
{ KeyPress, MODKEY|Shift, XK_o, setcfact, {0} },
{ KeyPress, MODKEY, XK_backslash, togglepinnedws, {0} }, // toggle pinning of currently selected workspace on the current monitor
{ KeyPress, MODKEY, XK_z, showhideclient, {0} }, // hide the currently selected client (or show if hidden)
{ KeyPress, MODKEY, XK_q, killclient, {0} }, // close the currently focused window
{ KeyPress, MODKEY|Shift, XK_q, restart, {0} }, // restart dusk
{ KeyPress, MODKEY|Ctrl|Alt, XK_q, quit, {0} }, // exit dusk
// { KeyPress, MODKEY, XK_v, group, {0} }, // groups floating clients together
// { KeyPress, MODKEY|Shift, XK_v, ungroup, {0} }, // ungroups floating clients
{ KeyPress, MODKEY, XK_a, markall, {MARKALL_ALL} }, // marks all clients on the selected workspace
{ KeyPress, MODKEY|Ctrl, XK_a, markall, {MARKALL_FLOATING} }, // marks all floating clients on the selected workspace
{ KeyPress, MODKEY|Alt, XK_a, markall, {MARKALL_HIDDEN} }, // marks all hidden clients on the selected workspace
{ KeyPress, MODKEY|Shift, XK_a, unmarkall, {0} }, // unmarks all clients
{ KeyPress, MODKEY, XK_m, togglemark, {0} }, // marks or unmarks the selected client for group action
{ KeyPress, MODKEY, XK_n, zoom, {0} }, // moves the currently focused window to/from the master area (for tiled layouts)
{ KeyPress, MODKEY, XK_bracketleft, rotatelayoutaxis, {.i = -1 } }, // cycle through the available layout splits (horizontal, vertical, centered, no split, etc.)
{ KeyPress, MODKEY, XK_bracketright, rotatelayoutaxis, {.i = +1 } }, // cycle through the available layout splits (horizontal, vertical, centered, no split, etc.)
{ KeyPress, MODKEY|Alt, XK_bracketleft, rotatelayoutaxis, {.i = -2 } }, // cycle through the available tiling arrangements for the master area
{ KeyPress, MODKEY|Alt, XK_bracketright, rotatelayoutaxis, {.i = +2 } }, // cycle through the available tiling arrangements for the master area
{ KeyPress, MODKEY|Shift, XK_bracketleft, rotatelayoutaxis, {.i = -3 } }, // cycle through the available tiling arrangements for the primary (first) stack area
{ KeyPress, MODKEY|Shift, XK_bracketright, rotatelayoutaxis, {.i = +3 } }, // cycle through the available tiling arrangements for the primary (first) stack area
{ KeyPress, MODKEY|Ctrl, XK_bracketleft, rotatelayoutaxis, {.i = -4 } }, // cycle through the available tiling arrangements for the secondary stack area
{ KeyPress, MODKEY|Ctrl, XK_bracketright, rotatelayoutaxis, {.i = +4 } }, // cycle through the available tiling arrangements for the secondary stack area
{ KeyPress, MODKEY|Ctrl, XK_m, mirrorlayout, {0} }, // flip the master and stack areas
{ KeyPress, MODKEY|Ctrl|Shift, XK_m, layoutconvert, {0} }, // flip between horizontal and vertical layout
{ KeyPress, MODKEY, XK_space, setlayout, {-1} }, // toggles between current and previous layout
{ KeyPress, MODKEY|Ctrl, XK_g, floatpos, {.v = "50% 50% 80% 80%" } }, // center client and take up 80% of the screen
{ KeyPress, MODKEY, XK_g, togglefloating, {0} }, // toggles between tiled and floating arrangement for the currently focused client
{ KeyPress, MODKEY, XK_f, togglefullscreen, {0} }, // toggles fullscreen for the currently selected client
{ KeyPress, MODKEY|Shift, XK_f, togglefakefullscreen, {0} }, // toggles "fake" fullscreen for the selected window
{ KeyPress, Ctrl|Alt, XK_Tab, togglenomodbuttons, {0} }, // disables / enables keybindings that are not accompanied by any modifier buttons for a client
{ KeyPress, MODKEY|Shift, XK_equal, changeopacity, {.f = +0.05 } }, // increase the client opacity (for compositors that support _NET_WM_OPACITY)
{ KeyPress, MODKEY|Shift, XK_minus, changeopacity, {.f = -0.05 } }, // decrease the client opacity (for compositors that support _NET_WM_OPACITY)
{ KeyPress, MODKEY|Shift, XK_comma, focusmon, {.i = -1 } }, // focus on the previous monitor, if any
{ KeyPress, MODKEY|Shift, XK_period, focusmon, {.i = +1 } }, // focus on the next monitor, if any
{ KeyPress, MODKEY|Alt, XK_comma, clienttomon, {.i = -1 } }, // sends the current client to an adjacent monitor
{ KeyPress, MODKEY|Alt, XK_period, clienttomon, {.i = +1 } }, // sends the current client to an adjacent monitor
{ KeyPress, MODKEY|Alt|Shift, XK_comma, clientstomon, {.i = +1 } }, // sends all clients to an adjacent monitor
{ KeyPress, MODKEY|Alt|Shift, XK_period, clientstomon, {.i = -1 } }, // sends all clients to an adjacent monitor
{ KeyPress, MODKEY|Ctrl, XK_0, viewallwsonmon, {0} }, // view all workspaces on the current monitor
{ KeyPress, MODKEY, XK_0, viewalloccwsonmon, {0} }, // view all workspaces on the current monitor that has clients
{ KeyPress, MODKEY, XK_o, viewselws, {0} }, // view the selected workspace (only relevant when viewing multiple workspaces)
{ KeyPress, MODKEY|Ctrl, XK_comma, viewwsdir, {.i = -1 } }, // view the workspace on the immediate left of current workspace (on the current monitor)
{ KeyPress, MODKEY|Ctrl, XK_period, viewwsdir, {.i = +1 } }, // view the workspace on the immediate right of current workspace (on the current monitor)
{ KeyPress, MODKEY, XK_comma, viewwsdir, {.i = -2 } }, // view the next workspace left of current workspace that has clients (on the current monitor)
{ KeyPress, MODKEY, XK_period, viewwsdir, {.i = +2 } }, // view the next workspace right of current workspace that has clients (on the current monitor)
{ KeyPress, MODKEY|Shift, XK_Tab, viewwsdir, {.i = -2 } }, // view the next workspace left of current workspace that has clients (on the current monitor)
{ KeyPress, MODKEY, XK_Tab, viewwsdir, {.i = +2 } }, // view the next workspace right of current workspace that has clients (on the current monitor)
{ KeyPress, MODKEY|Ctrl|Alt, XK_comma, movewsdir, {.i = -1 } }, // move client to workspace on the immediate left of current workspace (on the current monitor)
{ KeyPress, MODKEY|Ctrl|Alt, XK_period, movewsdir, {.i = +1 } }, // move client to workspace on the immediate right of current workspace (on the current monitor)
// STACKKEYS(AltGr|Ctrl, stackfocus) // focus on the nth client in the stack, see the STACKKEYS macro for keybindings
// STACKKEYS(AltGr|Ctrl|Shift, stackpush) // move the currently focused client to the nth place in the stack
// STACKKEYS(AltGr|Shift, stackswap) // swap the currently focused client with the nth client in the stack
SCRATCHKEYS(MODKEY, XK_w, spcmd_w)
SCRATCHKEYS(MODKEY, XK_e, spcmd_e)
SCRATCHKEYS(MODKEY, XK_r, spcmd_r)
SCRATCHKEYS(MODKEY, XK_y, spcmd_y)
WSKEYS(MODKEY, XK_1, "1")
WSKEYS(MODKEY, XK_2, "2")
WSKEYS(MODKEY, XK_3, "3")
WSKEYS(MODKEY, XK_4, "4")
WSKEYS(MODKEY, XK_5, "5")
WSKEYS(MODKEY, XK_6, "6")
WSKEYS(MODKEY, XK_7, "7")
WSKEYS(MODKEY, XK_8, "8")
WSKEYS(MODKEY, XK_9, "9")
/* Unassigned key bindings (available externally via the duskc command) */
// { KeyPress, MODKEY, XK_Control_R, showbar, {0} },
// { KeyRelease, MODKEY|AltGr, XK_Control_R, hidebar, {0} },
// { KeyPress, MODKEY, XK_, incrgaps, {.i = +1 } }, // increase all gaps (outer, inner, horizontal and vertical)
// { KeyPress, MODKEY, XK_, incrgaps, {.i = -1 } }, // decrease all gaps (outer, inner, horizontal and vertical)
// { KeyPress, MODKEY, XK_, incrigaps, {.i = +1 } }, // increase inner gaps (horizontal and vertical)
// { KeyPress, MODKEY, XK_, incrigaps, {.i = -1 } }, // decrease inner gaps (horizontal and vertical)
// { KeyPress, MODKEY, XK_, incrogaps, {.i = +1 } }, // increase outer gaps (horizontal and vertical)
// { KeyPress, MODKEY, XK_, incrogaps, {.i = -1 } }, // decrease outer gaps (horizontal and vertical)
// { KeyPress, MODKEY, XK_, incrihgaps, {.i = +1 } }, // increase inner horizontal gaps
// { KeyPress, MODKEY, XK_, incrihgaps, {.i = -1 } }, // decrease inner horizontal gaps
// { KeyPress, MODKEY, XK_, incrivgaps, {.i = +1 } }, // increase inner vertical gaps
// { KeyPress, MODKEY, XK_, incrivgaps, {.i = -1 } }, // decrease inner vertical gaps
// { KeyPress, MODKEY, XK_, incrohgaps, {.i = +1 } }, // increase outer horizontal gaps
// { KeyPress, MODKEY, XK_, incrohgaps, {.i = -1 } }, // decrease outer horizontal gaps
// { KeyPress, MODKEY, XK_, incrovgaps, {.i = +1 } }, // increase outer vertical gaps
// { KeyPress, MODKEY, XK_, incrovgaps, {.i = -1 } }, // decrease outer vertical gaps
// { KeyPress, MODKEY, XK_, mark, {0} }, // marks the currently selected client
// { KeyPress, MODKEY, XK_, unmark, {0} }, // unmarks the currently selected client
// { KeyPress, MODKEY, XK_, togglegaps, {0} }, // enables and disables the rendering of gaps in tiled layouts
// { KeyPress, MODKEY, XK_, defaultgaps, {0} }, // revert gaps to the default settings
// { KeyPress, MODKEY, XK_, cyclelayout, {.i = -1 } }, // cycle through the available layouts
// { KeyPress, MODKEY, XK_, cyclelayout, {.i = +1 } }, // cycle through the available layouts (in reverse)
// { KeyPress, MODKEY, XK_, viewwsdir, {.i = -1 } }, // move to the workspace on the immediate left of the current workspace on the current monitor (wraps around)
// { KeyPress, MODKEY, XK_, viewwsdir, {.i = +1 } }, // move to the workspace on the immediate right of the current workspace on the current monitor (wraps around)
// { KeyPress, MODKEY, XK_, focusmaster, {0} }, // change focus to the first client in the stack (master)
// { KeyPress, MODKEY, XK_, transfer, {0} }, // move a client between the master and stack area automatically adjusting nmaster
// { KeyPress, MODKEY, XK_, transferall, {0} }, // swaps all clients in the stack area with all clients in the master area
// { KeyPress, MODKEY, XK_, togglesticky, {0} }, // makes a client show on all workspaces)
// { KeyPress, MODKEY, XK_, focusurgent, {0} }, // focus on the client marked as urgent
// { KeyPress, MODKEY, XK_, inplacerotate, {.i = +1} }, // rotate clients within the respective area (master, primary stack, secondary stack) clockwise
// { KeyPress, MODKEY, XK_, inplacerotate, {.i = -1} }, // rotate clients within the respective area (master, primary stack, secondary stack) counter-clockwise
// { KeyPress, MODKEY, XK_, rotatestack, {.i = +1 } }, // rotate all clients (clockwise)
// { KeyPress, MODKEY, XK_, rotatestack, {.i = -1 } }, // rotate all clients (counter-clockwise)
// { KeyPress, MODKEY, XK_, riodraw, {0} }, // use slop to resize the currently selected client
// { KeyPress, MODKEY, XK_, unfloatvisible, {0} }, // makes all floating clients on the currently selected workspace tiled
// { KeyPress, MODKEY, XK_, switchcol, {0} }, // changes focus between the master and the primary stack area
// { KeyPress, MODKEY, XK_, setlayout, {0} }, // sets a specific layout, see the layouts array for indices
// { KeyPress, MODKEY, XK_, xrdb, {0 } }, // reloads colors from XResources
// { KeyPress, MODKEY, XK_, swallow, {0} }, // makes the focused client swallow marked clients
// { KeyPress, MODKEY, XK_, unswallow, {0} }, // makes the focused client unswallow the most recently swallowed client
};
/* button definitions */
/* click can be ClkWorkspaceBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
static Button buttons[] = {
/* click event mask button function argument */
{ ClkLtSymbol, 0, Button1, setlayout, {-1} }, // toggles between current and previous layout
{ ClkLtSymbol, 0, Button4, cyclelayout, {.i = +1 } }, // cycle through the available layouts
{ ClkLtSymbol, 0, Button5, cyclelayout, {.i = -1 } }, // cycle through the available layouts (in reverse)
{ ClkWinTitle, 0, Button1, focuswin, {0} }, // focus on the given client
{ ClkWinTitle, 0, Button3, showhideclient, {0} }, // hide the currently selected client (or show if hidden)
{ ClkWinTitle, 0, Button2, zoom, {0} }, // moves the currently focused window to/from the master area (for tiled layouts)
{ ClkStatusText, 0, Button1, statusclick, {.i = 1 } }, // sends mouse button presses to statusclick script when clicking on status modules
{ ClkStatusText, 0, Button2, statusclick, {.i = 2 } },
{ ClkStatusText, 0, Button3, statusclick, {.i = 3 } },
{ ClkStatusText, 0, Button4, statusclick, {.i = 4 } },
{ ClkStatusText, 0, Button5, statusclick, {.i = 5 } },
{ ClkStatusText, 0, Button6, statusclick, {.i = 6 } },
{ ClkStatusText, 0, Button7, statusclick, {.i = 7 } },
{ ClkStatusText, 0, Button8, statusclick, {.i = 8 } },
{ ClkStatusText, 0, Button9, statusclick, {.i = 9 } },
{ ClkStatusText, Shift, Button1, statusclick, {.i = 10 } },
{ ClkStatusText, Shift, Button2, statusclick, {.i = 11 } },
{ ClkStatusText, Shift, Button3, statusclick, {.i = 12 } },
{ ClkClientWin, MODKEY, Button8, markmouse, {1} }, // toggles marking of clients under the mouse cursor for group action
{ ClkClientWin, MODKEY, Button9, markmouse, {0} }, // unmarks clients under the mouse cursor
{ ClkClientWin, MODKEY, Button1, moveorplace, {1} }, // moves a client window into a floating or tiled position depending on floating state
{ ClkClientWin, MODKEY|Shift, Button1, togglemoveorplace,{0} }, // as above, but forces a tiled client to become floating and vice versa
{ ClkClientWin, MODKEY|Alt, Button2, togglefloating, {0} }, // toggles between tiled and floating arrangement for given client
{ ClkClientWin, MODKEY, Button3, resizeorfacts, {0} }, // change the size of a floating client window or adjust cfacts and mfacts when tiled
{ ClkClientWin, MODKEY|Shift, Button3, resizemouse, {0} }, // change the size of a floating client window
{ ClkClientWin, 0, Button8, movemouse, {0} }, // move a client window using extra mouse buttons (previous)
{ ClkClientWin, 0, Button9, resizemouse, {0} }, // resize a client window using extra mouse buttons (next)
{ ClkClientWin, MODKEY, Button2, zoom, {0} }, // moves the currently focused window to/from the master area (for tiled layouts)
{ ClkClientWin, MODKEY|Ctrl, Button1, dragmfact, {0} }, // dynamically change the size of the master area compared to the stack area(s)
{ ClkRootWin, MODKEY|Ctrl, Button1, dragmfact, {0} }, // dynamically change the size of the master area compared to the stack area(s)
{ ClkClientWin, MODKEY|Ctrl, Button3, dragwfact, {0} }, // dynamically change the size of a workspace relative to other workspaces
{ ClkRootWin, MODKEY|Ctrl, Button3, dragwfact, {0} }, // dynamically change the size of a workspace relative to other workspaces
{ ClkClientWin, MODKEY, Button4, inplacerotate, {.i = +1 } }, // rotate clients within the respective area (master, primary stack, secondary stack) clockwise
{ ClkClientWin, MODKEY, Button5, inplacerotate, {.i = -1 } }, // rotate clients within the respective area (master, primary stack, secondary stack) counter-clockwise
{ ClkClientWin, MODKEY|Shift, Button4, rotatestack, {.i = +1 } }, // rotate all clients (clockwise)
{ ClkClientWin, MODKEY|Shift, Button5, rotatestack, {.i = -1 } }, // rotate all clients (counter-clockwise)
{ ClkWorkspaceBar, 0, Button1, viewws, {0} }, // view the workspace by clicking on workspace icon
{ ClkWorkspaceBar, MODKEY, Button1, movews, {0} }, // sends (moves) the currently focused client to given workspace
{ ClkWorkspaceBar, MODKEY|Shift|Ctrl, Button1, swapws, {0} }, // swaps all clients on current workspace with that of the given workspace
{ ClkWorkspaceBar, 0, Button3, enablews, {0} }, // enables the workspace in addition to other workspaces
{ ClkWorkspaceBar, 0, Button4, viewwsdir, {.i = +2 } }, // view the next workspace right of current workspace that has clients (on the current monitor)
{ ClkWorkspaceBar, 0, Button5, viewwsdir, {.i = -2 } }, // view the next workspace left of current workspace that has clients (on the current monitor)
{ ClkWorkspaceBar, MODKEY, Button2, togglepinnedws, {0} }, // toggles the pinning of a workspace to the current monitor
};