Skip to content

DWMยค

Patchesยค

These are my current patches:

$ tree ~/.config/dwm/patches
/home/gk/.config/dwm/patches
โ”œโ”€โ”€ 0001-dwm-cyclelayouts-20180524-6.2.diff
โ”œโ”€โ”€ 01_dwm-alwayscenter-20200625-f04cac6.diff
โ”œโ”€โ”€ 02_dwm-columns-6.0.diff
โ”œโ”€โ”€ 03-dwm-ewmhtags-20180101-db22360.diff
โ”œโ”€โ”€ 04-dwm-gridmode-20170909-ceac8c9.diff
โ”œโ”€โ”€ 05-dwm-focusonnetactive-6.2.diff
โ”œโ”€โ”€ 06-dwm-autostart-20210120-cb3f58a.diff
โ”œโ”€โ”€ 07-dwm-xfce4-panel-20210606-67d76bd.diff
โ”œโ”€โ”€ 08-dwm-pertag-20200914-61bb8b2.diff
โ”œโ”€โ”€ 09-dwm-setborderpx-6.2.diff
โ”œโ”€โ”€ 09-dwm-vanitygaps-20190508-6.2.diff
โ”œโ”€โ”€ 10-dwm-noborderfloatingfix-6.2.diff
โ””โ”€โ”€ dwm-xfce4-panel-20210701-67d76bd.diff

0 directories, 13 files

xfce4-panelยค

The statusbar is from myself, got accepted by the suckless guys as official patch (hooray).

I made it because

  • I wanted a systray but the official systray patch is massive and collided with other patches, e.g. statuscolors if I remember correctly
  • Also statuscolors made dwm eat CPU, strangely, became often visible in htop - which is not suckless.

Designยค

It works by simple starting the panel as a normal window - but detecting it by window class name and moving it to the top right position, plus preventing it showing up in the tag indicators and at cyclewindow actions. See the diff here.

Here is a description of the ride towards it...

Hacking DWM: Xephyrยค

xnest/Xephyr is totally amazing and one of the many reasons I prefer X11.

Important

Using Xephyr you can test all dwm patches w/o having to restart the actual one. This is far more convenient than switching back and forth between different Xsessions.

This

$ cat /home/gk/bin/xnest
#!/usr/bin/env bash
Xephyr -br -ac -noreset -screen 1800x1000 :1 &
sleep 1
DISPLAY=:1 "${1:-dwm}"

allows to start the full Xserver with window manager in a window - and with ctrl-shift it gets ALL keyboard events, incl. shortcuts of the outer DWM.

Only things not working

  • picom - but this you can test anyway nicely outside, did not dig into getting it up
  • xfce4-panel - unless I kill it outside before starting xnest:

Drag and Dropยค

Not using a Desktop Environment but Window Manager only requires some integration for drag and drop, which you need all the time in the age of web based services.

dragon is the solution, together with a little xdotool/scrot hack of mine:

Here the script:

$ bat -f /home/gk/bin/drag_into

$ bat -f /home/gk/bin/drag_into
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
       โ”‚ File: /home/gk/bin/drag_into
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
   1   โ”‚ #!/usr/bin/env bash
   2   โ”‚ set -x
   3   โ”‚ doc="$0 <filename|'shot'>
   4   โ”‚ 
   5   โ”‚ Drags a given file to where the mouse is using dragon. Click to drop it (anywere).
   6   โ”‚ If filename is 'shot' then the file will be a shot of a an area to be selected.
   7   โ”‚ "
   8   โ”‚ 
   9   โ”‚ cmd_shot="shot"
  10   โ”‚ file=
  11   โ”‚ 
  12   โ”‚ exit_help () { echo -e "$doc"; exit 1; }
  13   โ”‚ 
  14   โ”‚ select_shot_area () {
  15   โ”‚     # create screen shot    
  16   โ”‚     notify-send "Select area - we'll shoot it and drag to where the mouse is."
  17   โ”‚     cd "$HOME/Pictures/shots/" || exit 1
  18   โ”‚     rm -f "latest.png"
  19   โ”‚     # the cp we do to have convenient cp of always same files into images dirs:
  20   โ”‚     scrot -s '%Y-%m-%d_$wx$h_scrot.png' -e 'ln -s $f latest.png; cp $f last.png'
  21   โ”‚     file="`readlink latest.png`"
  22   โ”‚ }
  23   โ”‚ 
  24   โ”‚ main () {
  25   โ”‚     test "$1" == '-t' && {
  26   โ”‚         notify-send "Sleeping $2 seconds before shot..."
  27   โ”‚         sleep $2
  28   โ”‚         shift 2
  29   โ”‚     }
  30   โ”‚     file="$1"
  31   โ”‚     test -z "$file" -o "$file" == "-h" && exit_help
  32   โ”‚     eval "$(xdotool getmouselocation --shell)" # into $X and $Y
  33   โ”‚     test "$file" == "$cmd_shot" && { select_shot_area || return 1; }
  34   โ”‚     set -x
  35   โ”‚     killall dragon 2>/dev/null # No accidential drops of wrong items ...
  36   โ”‚     #dragon --and-exit "$file" &
  37   โ”‚     dragon  "$file" & # when the target is not visible we have a hard time
  38   โ”‚     # wait for dragon window to show up:
  39   โ”‚     while true; do
  40   โ”‚         xid="$(xdotool search --onlyvisible --class  dragon | head -n 2)"
  41   โ”‚         test -z "$xid" || break
  42   โ”‚         sleep 0.05
  43   โ”‚     done
  44   โ”‚     # now click the dragon window and stay on the button:
  45   โ”‚     xdotool mousemove --sync -w "$xid" 1 1 mousedown 1 mousemove $X $Y 
  46   โ”‚     notify-send "Click to drop $file or hit escape. We will kill the dragon window in a minute... "
  47   โ”‚     ( sleep 60; xkill -id "$xid" ) &
  48   โ”‚ }
  49   โ”‚ 
  50   โ”‚ main "$@"
  51   โ”‚ 
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

I.e.: Hotkey to start script -> select area -> click into drop area. Done.

It uses scrot to make a screenshot of a selected area, then dragon to create a drag window top left, then xdotool to click and drag that to the point where you click.

Servicesยค

Via the autostart patch I start these:

$ bat -f /home/gk/.config/dwm/autostart.sh

$ bat -f /home/gk/.config/dwm/autostart.sh
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
       โ”‚ File: /home/gk/.config/dwm/autostart.sh
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
   1   โ”‚ #!/bin/bash
   2   โ”‚ here="$(builtin cd "$(dirname ${BASH_SOURCE[0]})"; pwd)"
   3   โ”‚ 
   4   โ”‚ function run {
   5   โ”‚   if ! pgrep "$(basename "$1")" ;
   6   โ”‚   then
   7   โ”‚     $@&
   8   โ”‚   fi
   9   โ”‚ }
  10   โ”‚ 
  11   โ”‚ $HOME/bin/X11_setup.sh
  12   โ”‚ 
  13   โ”‚ #run "dex $HOME/.config/autostart/arcolinux-welcome-app.desktop"
  14   โ”‚ #run "xrandr --output VGA-1 --primary --mode 1360x768 --pos 0x0 --rotate normal"
  15   โ”‚ #run "xrandr --output HDMI2 --mode 1920x1080 --pos 1920x0 --rotate normal --output HDMI1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output VIRTUAL1 --off"
  16   โ”‚ #run xrandr --output eDP-1 --primary --mode 1368x768 --pos 0x0 --rotate normal --output DP-1 --off --output HDMI-1 --off --output DP-2 --off --output HDMI-2 --off
  17   โ”‚ #run xrandr --output LVDS1 --mode 1366x768 --output DP3 --mode 1920x1080 --right-of LVDS1
  18   โ”‚ #run xrandr --output DVI-I-0 --right-of HDMI-0 --auto
  19   โ”‚ #run xrandr --output DVI-1 --right-of DVI-0 --auto
  20   โ”‚ #run xrandr --output DVI-D-1 --right-of DVI-I-1 --auto
  21   โ”‚ #run xrandr --output HDMI2 --right-of HDMI1 --auto
  22   โ”‚ 
  23   โ”‚ #run "pasystray"
  24   โ”‚ run "nm-applet"
  25   โ”‚ run "pamac-tray"
  26   โ”‚ run "variety"
  27   โ”‚ run "xfce4-power-manager"
  28   โ”‚ #run "blueberry-tray"
  29   โ”‚ run "/usr/lib/xfce4/notifyd/xfce4-notifyd"
  30   โ”‚ run "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
  31   โ”‚ run "numlockx on"
  32   โ”‚ run "$here/cpu_mon.py"
  33   โ”‚ #run "volumeicon"
  34   โ”‚ #run "$HOME/.config/dwm/status.py" # restarting:
  35   โ”‚ run sxhkd
  36   โ”‚ #run st
  37   โ”‚ run $here/panel.sh
  38   โ”‚ run picom
  39   โ”‚ run /usr/lib64/xfce4/notifyd/xfce4-notifyd
  40   โ”‚ # collides with panel setup when overlapping in time:
  41   โ”‚ ( sleep 4; xrdb -load .config/st_theme/Xresources; )
  42   โ”‚ #picom -b  --config ~/.config/arco-dwm/picom.conf &
  43   โ”‚ #run "nitrogen --restore"
  44   โ”‚ 
  45   โ”‚ # this is run every second!
  46   โ”‚ #( while true; do sleep 4; copyq; done ) & # our clip board science
  47   โ”‚ # run "copyq" # autostarts 
  48   โ”‚ #run "conky -c $HOME/.config/dwm/system-overview-conky"
  49   โ”‚ #you can set wallpapers in themes as well
  50   โ”‚ #feh --bg-fill /usr/share/backgrounds/arcolinux/arco-wallpaper.jpg &
  51   โ”‚ 
  52   โ”‚ #run applications from startup
  53   โ”‚ 
  54   โ”‚ #run "insync start"
  55   โ”‚ #run "spotify"
  56   โ”‚ #run "ckb-next -b"
  57   โ”‚ #run "discord"
  58   โ”‚ #run "telegram-desktop"
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

No Gaps - but Gapsยค

Vanitygaps is bloated plus I wanted a prominent active window indicator.

Solution: I simply use thick borders and have them black for the non active window and white for the active one via dwm, then set them to 0.7 transparent via picom:

# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
# frame-opacity = 1.0
frame-opacity = 0.7;

=> That effects black far more than white.

I.e. there are actually no gaps - but the illusion is given.

Misc Tipsยค

  • On a fresh xfce spin fedora use lxappearance for gtk theming.
  • Mouse cursor size: .Xresources -> Xcursor.size 40

Configยค

For varying shortcuts I don't recompile dwm but use sxhkdrc:

$ bat -f /home/gk/.config/sxhkd/sxhkdrc

$ bat -f /home/gk/.config/sxhkd/sxhkdrc
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
       โ”‚ File: /home/gk/.config/sxhkd/sxhkdrc
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
   1   โ”‚ #################################################################
   2   โ”‚ # KEYBOARD BINDINGS FOR ANY TWM
   3   โ”‚ #################################################################
   4   โ”‚ 
   5   โ”‚ #################################################################
   6   โ”‚ # SUPER + FUNCTION KEYS
   7   โ”‚ #################################################################
   8   โ”‚ # Vivaldi
   9   โ”‚ super + F1
  10   โ”‚     vivaldi-stable
  11   โ”‚ 
  12   โ”‚ # Atom
  13   โ”‚ super + F2
  14   โ”‚     atom
  15   โ”‚ 
  16   โ”‚ #Inkscape
  17   โ”‚ super + F3
  18   โ”‚     inkscape
  19   โ”‚ 
  20   โ”‚ #Gimp
  21   โ”‚ super + F4
  22   โ”‚     gimp
  23   โ”‚ 
  24   โ”‚ #Meld
  25   โ”‚ super + F5
  26   โ”‚     meld
  27   โ”‚ 
  28   โ”‚ #Vlc
  29   โ”‚ super + F6
  30   โ”‚     vlc --video-on-top
  31   โ”‚ 
  32   โ”‚ #Virtualbox
  33   โ”‚ super + F7
  34   โ”‚     virtualbox
  35   โ”‚ 
  36   โ”‚ #Thunar
  37   โ”‚ super + F8
  38   โ”‚     thunar
  39   โ”‚ 
  40   โ”‚ #Evolution
  41   โ”‚ super + F9
  42   โ”‚     evolution
  43   โ”‚ 
  44   โ”‚ #Spotify
  45   โ”‚ super + F10
  46   โ”‚     spotify
  47   โ”‚ 
  48   โ”‚ #Rofi Fullscreen
  49   โ”‚ super + F11
  50   โ”‚     rofi -show run -fullscreen
  51   โ”‚ 
  52   โ”‚ #Rofi
  53   โ”‚ super + F12
  54   โ”‚     rofi -show run
  55   โ”‚ 
  56   โ”‚ #################################################################
  57   โ”‚ # SUPER + ... KEYS
  58   โ”‚ #################################################################
  59   โ”‚ 
  60   โ”‚ #Atom
  61   โ”‚ super + e
  62   โ”‚     atom
  63   โ”‚ 
  64   โ”‚ #Browser
  65   โ”‚ super + w
  66   โ”‚     vivaldi-stable
  67   โ”‚ 
  68   โ”‚ #Conky-toggle
  69   โ”‚ super + c
  70   โ”‚     conky-toggle
  71   โ”‚ 
  72   โ”‚ #Htop
  73   โ”‚ #super + h
  74   โ”‚ #    urxvt 'htop task manager' -e htop
  75   โ”‚ 
  76   โ”‚ #arcolinux-logout
  77   โ”‚ super + x
  78   โ”‚     arcolinux-logout
  79   โ”‚ 
  80   โ”‚ #Rofi theme selector
  81   โ”‚ super + r
  82   โ”‚     rofi-theme-selector
  83   โ”‚ 
  84   โ”‚ #Urxvt
  85   โ”‚ #super + t
  86   โ”‚ #    urxvt
  87   โ”‚ 
  88   โ”‚ #Pavucontrol
  89   โ”‚ super + v
  90   โ”‚     pavucontrol
  91   โ”‚ 
  92   โ”‚ #Pragha
  93   โ”‚ #super + m
  94   โ”‚ #    pragha
  95   โ”‚ 
  96   โ”‚ #Termite
  97   โ”‚ super + Return
  98   โ”‚     termite
  99   โ”‚ 
 100   โ”‚ #Xkill
 101   โ”‚ super + Escape
 102   โ”‚     xkill
 103   โ”‚ 
 104   โ”‚ #Keyboard dependent
 105   โ”‚ #termite
 106   โ”‚ super + KP_Enter
 107   โ”‚     termite
 108   โ”‚ 
 109   โ”‚ #################################################################
 110   โ”‚ # SUPER + SHIFT KEYS
 111   โ”‚ #################################################################
 112   โ”‚ 
 113   โ”‚ #File-Manager
 114   โ”‚ super + shift + Return
 115   โ”‚     thunar
 116   โ”‚ 
 117   โ”‚ #Keyboard dependent
 118   โ”‚ #File-Manager
 119   โ”‚ super + shift + KP_Enter
 120   โ”‚     thunar
 121   โ”‚ 
 122   โ”‚ #dmenu
 123   โ”‚ super + shift + d
 124   โ”‚     dmenu_run -i -nb '#191919' -nf '#fea63c' -sb '#fea63c' -sf '#191919' -fn 'NotoMonoRegular:bold:pixelsize=14'
 125   โ”‚ 
 126   โ”‚ #reload sxhkd:
 127   โ”‚ super + shift + s
 128   โ”‚     pkill -USR1 -x sxhkd; notify-send -u critical "sxhkd config reloaded"
 129   โ”‚ 
 130   โ”‚ 
 131   โ”‚ #################################################################
 132   โ”‚ # CONTROL + ALT KEYS
 133   โ”‚ #################################################################
 134   โ”‚ 
 135   โ”‚ #arcolinux-welcome-app
 136   โ”‚ ctrl + alt + w
 137   โ”‚      arcolinux-welcome-app
 138   โ”‚ 
 139   โ”‚ #arcolinux-tweak-tool
 140   โ”‚ ctrl + alt + e
 141   โ”‚     arcolinux-tweak-tool
 142   โ”‚ 
 143   โ”‚ #conky-rotate
 144   โ”‚ ctrl + alt + Next
 145   โ”‚      conky-rotate -n
 146   โ”‚ 
 147   โ”‚ #conky-rotate
 148   โ”‚ ctrl + alt + Prior
 149   โ”‚     conky-rotate -p
 150   โ”‚ 
 151   โ”‚ #File-Manager
 152   โ”‚ ctrl + alt + b
 153   โ”‚      thunar
 154   โ”‚ 
 155   โ”‚ #Catfish
 156   โ”‚ ctrl + alt + c
 157   โ”‚      catfish
 158   โ”‚ 
 159   โ”‚ #Chromium
 160   โ”‚ ctrl + alt + g
 161   โ”‚     chromium -no-default-browser-check
 162   โ”‚ 
 163   โ”‚ #Firefox
 164   โ”‚ ctrl + alt + f
 165   โ”‚      firefox
 166   โ”‚ 
 167   โ”‚ #Nitrogen
 168   โ”‚ ctrl + alt + i
 169   โ”‚      nitrogen
 170   โ”‚ 
 171   โ”‚ #arcolinux-logout
 172   โ”‚ ctrl + alt + k
 173   โ”‚      arcolinux-logout
 174   โ”‚ 
 175   โ”‚ #arcolinux-logout
 176   โ”‚ ctrl + alt + l
 177   โ”‚     arcolinux-logout
 178   โ”‚ 
 179   โ”‚ 
 180   โ”‚ #Xfce4-settings-manager
 181   โ”‚ ctrl + alt + m
 182   โ”‚      xfce4-settings-manager
 183   โ”‚ 
 184   โ”‚ #Pulse Audio Control
 185   โ”‚ ctrl + alt + u
 186   โ”‚      pavucontrol
 187   โ”‚ 
 188   โ”‚ #Rofi theme selector
 189   โ”‚ ctrl + alt + r
 190   โ”‚   rofi-theme-selector
 191   โ”‚ 
 192   โ”‚ #Spotify
 193   โ”‚ ctrl + alt + s
 194   โ”‚    spotify
 195   โ”‚ 
 196   โ”‚ #Termite
 197   โ”‚ ctrl + alt + Return
 198   โ”‚     st
 199   โ”‚ 
 200   โ”‚ #termite
 201   โ”‚ ctrl + alt + t
 202   โ”‚     termite
 203   โ”‚ 
 204   โ”‚ #Vivaldi
 205   โ”‚ ctrl + alt + v
 206   โ”‚     vivaldi-stable
 207   โ”‚ 
 208   โ”‚ #Xfce4-appfinder
 209   โ”‚ ctrl + alt + a
 210   โ”‚     xfce4-appfinder
 211   โ”‚ 
 212   โ”‚ #Keyboard dependent
 213   โ”‚ #termite
 214   โ”‚ #ctrl + alt + KP_Enter
 215   โ”‚ #     termite
 216   โ”‚ 
 217   โ”‚ 
 218   โ”‚ #################################################################
 219   โ”‚ # ALT + ... KEYS
 220   โ”‚ #################################################################
 221   โ”‚ 
 222   โ”‚ ##Wallpaper trash
 223   โ”‚ #alt + t
 224   โ”‚ #    variety -t
 225   โ”‚ 
 226   โ”‚ ##Wallpaper next
 227   โ”‚ #alt + n
 228   โ”‚ #    variety -n
 229   โ”‚ 
 230   โ”‚ ##Wallpaper previous
 231   โ”‚ #alt + p
 232   โ”‚ #    variety -p
 233   โ”‚ 
 234   โ”‚ ##Wallpaper favorite
 235   โ”‚ #alt + f
 236   โ”‚ #    variety -f
 237   โ”‚ 
 238   โ”‚ ##Wallpaper previous
 239   โ”‚ #alt + Left
 240   โ”‚ #    variety -p
 241   โ”‚ 
 242   โ”‚ ##Wallpaper next
 243   โ”‚ #alt + Right
 244   โ”‚ #    variety -n
 245   โ”‚ 
 246   โ”‚ ##Wallpaper toggle-pause
 247   โ”‚ #alt + Up
 248   โ”‚ #    variety --toggle-pause
 249   โ”‚ 
 250   โ”‚ ##Wallpaper resume
 251   โ”‚ #alt + Down
 252   โ”‚ #    variety --resume
 253   โ”‚ 
 254   โ”‚ ##Gmrun
 255   โ”‚ #alt + F2
 256   โ”‚ #    gmrun
 257   โ”‚ 
 258   โ”‚ ##Xfce4-appfinder
 259   โ”‚ #alt + F3
 260   โ”‚ #    xfce4-appfinder
 261   โ”‚ 
 262   โ”‚ 
 263   โ”‚ #################################################################
 264   โ”‚ #VARIETY KEYS WITH PYWAL
 265   โ”‚ #################################################################
 266   โ”‚ 
 267   โ”‚ #Wallpaper trash
 268   โ”‚ alt + shift + w
 269   โ”‚     variety --selector 
 270   โ”‚ 
 271   โ”‚ #Wallpaper next
 272   โ”‚ alt + shift + n
 273   โ”‚     variety -n && wal -i $(cat $HOME/.config/variety/wallpaper/wallpaper.jpg.txt)&
 274   โ”‚ 
 275   โ”‚ #Wallpaper previous
 276   โ”‚ alt + shift + p
 277   โ”‚     variety -p && wal -i $(cat $HOME/.config/variety/wallpaper/wallpaper.jpg.txt)&
 278   โ”‚ 
 279   โ”‚ #Wallpaper favorite
 280   โ”‚ alt + shift + f
 281   โ”‚     variety -f && wal -i $(cat $HOME/.config/variety/wallpaper/wallpaper.jpg.txt)&
 282   โ”‚ 
 283   โ”‚ #Wallpaper update
 284   โ”‚ alt + shift + u
 285   โ”‚     wal -i $(cat $HOME/.config/variety/wallpaper/wallpaper.jpg.txt)&
 286   โ”‚ 
 287   โ”‚ #################################################################
 288   โ”‚ # CONTROL + SHIFT KEYS
 289   โ”‚ #################################################################
 290   โ”‚ 
 291   โ”‚ #Xcfe4-TaskManager
 292   โ”‚ ctrl + shift + Escape
 293   โ”‚     xfce4-taskmanager
 294   โ”‚ 
 295   โ”‚ 
 296   โ”‚ #################################################################
 297   โ”‚ #     SCREENSHOTS
 298   โ”‚ #################################################################
 299   โ”‚ 
 300   โ”‚ #Scrot
 301   โ”‚ Print
 302   โ”‚     scrot 'ArcoLinux-%Y-%m-%d-%s_screenshot_$wx$h.jpg' -e 'mv $f $$(xdg-user-dir PICTURES)'
 303   โ”‚ 
 304   โ”‚ #screeenshooter
 305   โ”‚ ctrl + Print
 306   โ”‚      xfce4-screenshooter
 307   โ”‚ 
 308   โ”‚ #Gnome-Screenshot
 309   โ”‚ ctrl + shift + Print
 310   โ”‚      gnome-screenshot -i
 311   โ”‚ 
 312   โ”‚ 
 313   โ”‚ #################################################################
 314   โ”‚ #     FUNCTION KEYS
 315   โ”‚ #################################################################
 316   โ”‚ 
 317   โ”‚ #xfce4-terminal dropdown
 318   โ”‚ F12
 319   โ”‚     xfce4-terminal --drop-down
 320   โ”‚ 
 321   โ”‚ #Delete
 322   โ”‚ ctrl + Delete
 323   โ”‚     /usr/bin/python /usr/lib/arcologout/arcologout.py
 324   โ”‚ 
 325   โ”‚ 
 326   โ”‚ #################################################################
 327   โ”‚ #     MULTIMEDIA KEYS
 328   โ”‚ #################################################################
 329   โ”‚ 
 330   โ”‚ #Raises volume
 331   โ”‚ XF86AudioRaiseVolume
 332   โ”‚     /home/gk/bin/hw audioraise
 333   โ”‚     #amixer set Master 10%+
 334   โ”‚ 
 335   โ”‚ #Lowers volume
 336   โ”‚ XF86AudioLowerVolume
 337   โ”‚     /home/gk/bin/hw audiolower
 338   โ”‚     #amixer set Master 10%-
 339   โ”‚ 
 340   โ”‚ #Mute
 341   โ”‚ XF86AudioMute
 342   โ”‚     /home/gk/bin/hw audiomute
 343   โ”‚     #amixer -D pulse set Master 1+ toggle
 344   โ”‚ 
 345   โ”‚ XF86Display
 346   โ”‚     /home/gk/bin/hw display
 347   โ”‚ #Playerctl works for Pragha, Spotify and others
 348   โ”‚ #Delete the line for playerctl if you want to use mpc
 349   โ”‚ #and replace it with the corresponding code
 350   โ”‚ #mpc works for e.g.ncmpcpp
 351   โ”‚ #mpc toggle
 352   โ”‚ #mpc next
 353   โ”‚ #mpc prev
 354   โ”‚ #mpc stop
 355   โ”‚ 
 356   โ”‚ #PLAY
 357   โ”‚ XF86AudioPlay
 358   โ”‚     playerctl play-pause
 359   โ”‚ 
 360   โ”‚ #Next
 361   โ”‚ XF86AudioNext
 362   โ”‚     playerctl next
 363   โ”‚ 
 364   โ”‚ #previous
 365   โ”‚ XF86AudioPrev
 366   โ”‚     playerctl previous
 367   โ”‚ 
 368   โ”‚ #Stop
 369   โ”‚ XF86AudioStop
 370   โ”‚     playerctl stop
 371   โ”‚ 
 372   โ”‚ #Brightness up
 373   โ”‚ #XF86MonBrightnessUp
 374   โ”‚ #    xbacklight -inc 10
 375   โ”‚ 
 376   โ”‚ ##Brightness down
 377   โ”‚ #XF86MonBrightnessDown
 378   โ”‚ #    xbacklight -dec 10
 379   โ”‚ 
 380   โ”‚ 
 381   โ”‚ #################################################################
 382   โ”‚ #################################################################
 383   โ”‚ ##################   DESKTOP SPECIFIC    ########################
 384   โ”‚ #################################################################
 385   โ”‚ #################################################################
 386   โ”‚ 
 387   โ”‚ #################################################################
 388   โ”‚ # CTRL + ALT KEYS
 389   โ”‚ #################################################################
 390   โ”‚ 
 391   โ”‚ ctrl + alt + super + f
 392   โ”‚         /home/gk/bin/find_and_type_file
 393   โ”‚ #Picom Toggle
 394   โ”‚ ctrl + alt + p
 395   โ”‚     ~/bin/picom-toggle.sh
 396   โ”‚ 
 397   โ”‚ alt + d
 398   โ”‚     ~/bin/type_date_into_window
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

This is my full config

$ cat /home/gk/.config/dwm/config.h
/* See LICENSE file for copyright and license details. */

// clang-format off

#include <X11/XF86keysym.h>
/* appearance */

static const unsigned int borderpx       = 12  ; /* border pixel of windows */
static const unsigned int snap           = 32  ; /* snap pixel */


/*static const int bar_right_offset      = 180 ; offset from the right -depends on color tags used in dwmbar. increase if you use more of them, 0 would be correct w/o any color tag */
static const int bar_right_offset        = 0   ; /* offset from the right -depends on color tags used in dwmbar. increase if you use more of them, 0 would be correct w/o any color tag */
static const int showbar                 = 1   ; /* 0 means no bar */
static const int topbar                  = 1   ; /* 0 means bottom bar */

/* We get those all from .Xresources, dynmaically:
static const char *fonts[]          = { "monospace:size=10" };
static const char dmenufont[]       = "monospace:size=10";
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]      = {
    [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
    [SchemeSel]  = { col_gray4, col_cyan,  col_cyan  },
};

static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
static const char *fonts[]            = { "unifont:size = 13" };
*/
static const char *fonts[] = { "Hack:size=13" };

static const char panel[][20] = { "xfce4-panel", "Xfce4-panel" };

static const unsigned int baralpha    = 0x10;
static const unsigned int borderalpha = 0x10;
/*
 * See https://github.com/jgrar/dwm-patches/tree/master/statuscolors, regarding how to close gaps in progrss meters
 * and this regarind how to really make it fancy:
  https://www.reddit.com/r/unixporn/comments/8hrkt3/dwm_powerline_themed_status_bar
    [SchemeSel]    = { "#999999", "#111111", "#88b7c1" },
 * */
static const char *colors[][4]        = {
    /*               fg         bg         border   */
    [SchemeNorm]   = { "#555555", "#111111", "#000" },
    [SchemeSel]    = { "#999999", "#111111", "#999" },
    [SchemeAX]     = { "#bbb"   , "#8bd124", "#666" },
};
/* statuscolors not required anymore, we have xfce4-panel
    [SchemeWarn]   = { "#eeee00", "#111111", "#666" },
    [SchemeUrgent] = { "#ee0000", "#111111", "#666" },
    [SchemeGood]   = { "#8bd124", "#111111", "#666" },
    [SchemeGray]   = { "#999"   , "#111111", "#666" },
};
*/
/*
static const unsigned int alphas[][3]      = {
    *               fg      bg        border     *
    [SchemeNorm] = { OPAQUE, baralpha, borderalpha },
    [SchemeSel]  = { OPAQUE, baralpha, borderalpha },
};
*/

/* tagging
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
*/
static char *tags[] = { "ไธ€", "ไบŒ", "ไธ‰", "ๅ››", "ไบ”", "ๅ…ญ", "ไธƒ", "ๅ…ซ", "ไน" };

static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
static const char *dmenucmd[] = { "bin/rofi_utils_select", "startup", NULL };

static const Rule rules[] = {
    /* xprop(1):
     *    WM_CLASS(STRING) = instance, class
     *    WM_NAME(STRING) = title
     */
    /* class                  instance    title       tags mask ,    isfloating   monitor */
    { "Arcologout.py",        NULL,       NULL,       0,                1,           -1 },
    { "SimpleScreenRecorder", NULL,       NULL,       0,                1,           -1 },
    { panel[1],               NULL,       NULL, (1 << 9) - 1,           0,           -1 },
    { "Xfce4-appfinder",      NULL,       NULL, (1 << 9) - 1,           1,           -1 },
    { "Xfrun4",               NULL,       NULL, (1 << 9) - 1,           1,           -1 },
    { "Peek",                 NULL,       NULL,       0,                1,           -1 },
    { "Dragon",               NULL,       NULL, (1 << 9) - 1,           1,           -1 },
    { "flameshot",            NULL,       NULL, (1 << 9) - 1,           1,           -1 },
    { "Variety",              NULL,       NULL,       0,                1,           -1 },
    { NULL,                   "HUD",      NULL,       0,                1,           -1 },
    { "HUD",                  NULL,       NULL,       0,                1,           -1 },
    { "HUDALL",               NULL,       NULL,  (1 << 9) - 1,          1,           -1 },
    { "Firefox",              NULL,       NULL,       0,                0,           -1 },
    { NULL,                   NULL,       "Skype",    0,                1,           -1 },
};

/* layout(s) */
static const float mfact     = 0.55; /* factor of master area size [0.05..0.95] */
static const int nmaster     = 1;    /* number of clients in master area */
static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */


#include "layouts.c"
static const Layout layouts[] = {
    /* symbol     arrange function */
    { "T",      tile },    /* first entry is default */
    { "F",      NULL },    /* no layout function means floating behavior */
    { "M",      monocle },
    { "G",      grid },
    { "V",      col },
};

/* key definitions */
#define MODKEY Mod4Mask
/*
#define TAGKEYS(KEY,TAG) \
    { MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
    { MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
    { MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << TAG} }, \
    { MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << TAG} },
*/
#define TAGKEYS(KEY,TAG) \
    { ControlMask                  , KEY , view       , {.ui = 1 << TAG} } , \
    { MODKEY|ControlMask           , KEY , toggleview , {.ui = 1 << TAG} } , \
    { ControlMask|ShiftMask        , KEY , tag        , {.ui = 1 << TAG} } , \
    { MODKEY|ControlMask|ShiftMask , 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 *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
static const char *copyq_menucmd[] = { "copyq", "menu", NULL };
static const char *insert_date  [] = { "/home/gk/bin/type_date_into_window", NULL };
static const char *volumemute[]    = { "amixer", "set", "Master", "toggle"         , ";", "/home/gk/bin/refbar", NULL };

    { ControlMask                       , XK_c                     , spawn          , {.v = signtcmd                               }   } ,  this is control key on my keyboard (swapped)
    { ControlMask                       , XK_d                     , spawn          , {.v = sigdtcmd                               }   } ,  this is control key on my keyboard (swapped)
*/

static Key keys[] = {
    
    /* modifier                     key        function        argument */

    /* { ControlMask                    , XK_space  , spawn   , SHCMD("/home/gk/bin/st_hud" ) }                    , */
    /* { ControlMask|ShiftMask|Mod4Mask , XK_3      , spawn   , SHCMD("sleep 1s;/home/gk/bin/shot_selected") }     , */
    /* { ControlMask|ShiftMask          , XK_b      , spawn   , SHCMD("/home/gk/bin/clipctrl previous_item") }     , */
    /* { MODKEY|ControlMask             , XK_d      , spawn   , SHCMD("/home/gk/bin/type_date_into_window"     ) } , */
    /* { Mod4Mask                       , XK_Return , zoom    , { 0                  }}                            , * swap focus when gtk keys swapped*/
    /*{ ControlMask                     , XK_Left   , lasttag , {.i =  1} }                                        , */
    
       { MODKEY|ShiftMask , XK_1           , togglebar    , { .i = 1 } }                       ,
       { MODKEY|ShiftMask , XK_minus       , setborderpx    , { .i = -1 } }                       ,
       { MODKEY|ShiftMask , XK_equal       , setborderpx    , { .i = +1 } }                       ,
       { ControlMask      , XK_BackSpace   , killclient     , { 0                  }}             ,
       { ControlMask      , XK_q           , killclient     , { 0                  }}             ,
       { ControlMask      , XK_Return      , zoom           , { 0                  }}             , /* swap focus*/
       { ControlMask      , XK_space       , spawn          , SHCMD("/usr/bin/ulauncher" ) }      , /* faster than sxk */
       { ControlMask      , XK_Tab         , spawn          , SHCMD("/usr/bin/skippy-xd") }       ,
       { ControlMask      , XK_n           , spawn          , SHCMD("st") }                       ,
       { MODKEY|ShiftMask , XK_b           , togglebar      , { 0                  }}             ,
       { ControlMask      , XK_j           , focusstack     , { .i = -1            }}             ,
       { ControlMask      , XK_k           , focusstack     , { .i = +1            }}             ,
       { ControlMask      , XK_m           , focusmon       , { .i = -1            }}             ,
    /* { ControlMask      , XK_l           , focusmon       , { .i = +1            }}             , h is enough we have just 2 or 3 mons. l is for browser location*/
       { MODKEY|ShiftMask , XK_h           , spawn          , SHCMD("/home/gk/bin/tagmon -1" ) }  ,
       { MODKEY|ShiftMask , XK_l           , spawn          , SHCMD("/home/gk/bin/tagmon  1" ) }  ,
       { MODKEY|ShiftMask , XK_comma       , tagmon         , { .i = -1            }}             ,
       { MODKEY|ShiftMask , XK_period      , tagmon         , { .i = +1            }}             ,
       { MODKEY           , XK_i           , incnmaster     , { .i = +1            }}             ,
       { MODKEY           , XK_d           , incnmaster     , { .i = -1            }}             ,
       { Mod1Mask         , XK_h           , setmfact       , { .f = -0.05         }}             ,
       { Mod1Mask         , XK_l           , setmfact       , { .f = +0.05         }}             ,
    /* { MODKEY           , XK_Tab         , view           , { 0                  }}             , */
       { MODKEY           , XK_t           , setlayout      , { .v = &layouts[0]   }}             ,
       { MODKEY           , XK_f           , setlayout      , { .v = &layouts[1]   }}             ,
       { MODKEY           , XK_m           , setlayout      , { .v = &layouts[2]   }}             ,
       { MODKEY           , XK_g           , setlayout      , { .v = &layouts[3]   }}             ,
       { MODKEY           , XK_v           , setlayout      , { .v = &layouts[4]   }}             ,
       { MODKEY|ShiftMask , XK_period      , cyclelayout    , { .i = +1 } }                       ,
    /* { MODKEY|ShiftMask , XK_space       , setlayout      , { 0                  }}             , */
       { MODKEY|ShiftMask , XK_space       , togglefloating , { 0                  }}             ,
       { MODKEY           , XK_0           , view           , { .ui = ~0           }}             ,
       { MODKEY|ShiftMask , XK_0           , tag            , { .ui = ~0           }}             ,
       { MODKEY|ShiftMask , XK_q           , quit           , { 0                  }}             ,
       { 0                , XF86XK_Display , spawn          , SHCMD("/home/gk/bin/hw display" ) } ,

    /* xev is your friend to find those */
    /* { 0,                     XF86XK_LaunchA           , spawn,           SHCMD("/home/gk/bin/hw launcha" ) }, */
    /* { 0,                     XF86XK_MonBrightnessDown , spawn,           SHCMD("/home/gk/bin/hw monbrightdown" ) }, */
    /* { 0,                     XF86XK_MonBrightnessUp   , spawn,           SHCMD("/home/gk/bin/hw monbrightup" ) }, */
    /* { 0,                     XF86XK_AudioMute         , spawn,           SHCMD("/home/gk/bin/hw audiomute" ) }, */
    /* { 0,                     XF86XK_AudioLowerVolume  , spawn,           SHCMD("/home/gk/bin/hw audiolower" ) }, */
    /* { 0,                     XF86XK_AudioRaiseVolume  , spawn,           SHCMD("/home/gk/bin/hw audioraise" ) }, */
    /* { 0,                     XF86XK_RFKill            , spawn,           SHCMD("/home/gk/bin/hw rfkill" ) }, */
    /* { ControlMask,           XF86XK_Eject             , killclient     , {0                  }} , */
    /* { 0                  , XF86XK_Eject             , spawn,           SHCMD("/home/gk/bin/hw eject" ) }, */
    /* { 0                     , XK_F1           , spawn,           SHCMD("/home/gk/bin/hw F1" ) }, */
    /* { 0                     , XK_F2           , spawn,           SHCMD("/home/gk/bin/hw F2" ) }, */
    /* { 0                     , XK_F3           , spawn,           SHCMD("/home/gk/bin/hw F3" ) }, */
    /* { 0                     , XK_F4           , spawn,           SHCMD("/home/gk/bin/hw F4" ) }, */
    /* { 0                     , XK_F5           , spawn,           SHCMD("/home/gk/bin/hw F5" ) }, */
    /* { 0                     , XK_F6           , spawn,           SHCMD("/home/gk/bin/hw F6" ) }, */
    /* { 0                     , XK_F7           , spawn,           SHCMD("/home/gk/bin/hw F7" ) }, */
    /* { 0                     , XK_F8           , spawn,           SHCMD("/home/gk/bin/hw F8" ) }, */
    /* { 0                     , XK_F9           , spawn,           SHCMD("/home/gk/bin/hw F9" ) }, */
    /* { 0                     , XK_F10          , spawn,           SHCMD("/home/gk/bin/hw F10" ) }, */
    /* { 0                     , XK_F11          , spawn,           SHCMD("/home/gk/bin/hw F11" ) }, */
    /* { 0                     , XK_F12          , spawn,           SHCMD("/home/gk/bin/hw F12" ) }, */

    /* { ControlMask,           XK_Delete       , spawn,           SHCMD("/home/gk/bin/hw ctrl_del" ) }, */

    /* /1* Keyboard Backlight *1/ */
    /* { ControlMask        , XF86XK_MonBrightnessDown , spawn          , {.v = F13           }} , */
    /* { ControlMask        , XF86XK_MonBrightnessUp   , spawn          , {.v = F14           }} , */
    /* { 0                  , XF86XK_LaunchA           , spawn          , {.v = F03           }} , */
    /* { 0                  , XF86XK_LaunchB           , spawn          , {.v = F04           }} , */
    /* { 0                  , XF86XK_AudioPrev         , spawn          , {.v = F07           }} , */
    /* { 0                  , XF86XK_AudioPlay         , spawn          , {.v = F08           }} , */
    /* { 0                  , XF86XK_AudioNext         , spawn          , {.v = F09           }} , */
    /* { ControlMask        , XF86XK_Eject             , spawn          , {.v = pow           }} , */
    /* { ControlMask        , XF86XK_PowerOff          , spawn          , {.v = pow           }} , */
    /* { ControlMask        , XF86XK_Suspend           , spawn          , {.v = pow           }} , */

    /* {MODKEY|ControlMask|ShiftMask , XK_l            , spawn ,           SHCMD("/home/gk/bin/hw lock" ) }, */

    TAGKEYS ( XK_1 , 0)
    TAGKEYS ( XK_2 , 1)
    TAGKEYS ( XK_3 , 2)
    TAGKEYS ( XK_4 , 3)
    TAGKEYS ( XK_5 , 4)
    TAGKEYS ( XK_6 , 5)
    TAGKEYS ( XK_7 , 6)
    TAGKEYS ( XK_8 , 7)
    TAGKEYS ( XK_9 , 8)

};

/* button definitions */
/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
static Button buttons[] = {
    /* click                event mask      button          function        argument */
    { ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
    { ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
    { ClkWinTitle,          0,              Button2,        zoom,           {0} },
    { ClkStatusText,        0,              Button2,        spawn,          SHCMD("st") },
    { ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
    { ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
    { ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
    { ClkTagBar,            0,              Button1,        view,           {0} },
    { ClkTagBar,            0,              Button3,        toggleview,     {0} },
    { ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
    { ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
};
Back to top