For Thinkpad X220 I've tried to keep dwm as minimal as I can to use screen real estate and keyboard actions.
- dwm-alpha
- dwm-fibonacci
- dwm-fullgaps
- dwm-statuscolors
- XF86Keys
#include <X11/XF86keysym.h>
static const char *fonts[] = {
"Inter:size=12",
"JetBrains Mono:size=12"
};
static const char dmenufont[] = "Inter:size=12";
MODKEY = Super
| Keybinding | Action |
|---|---|
| MODKEY + RETURN | opens terminal (st) |
| MODKEY + d | opens dmenu |
| MODKEY + SHIFT + d | opens passmenu |
| MODKEY + SHIFT + RETURN | cycle master/stack |
| MODKEY + q | quits window/program |
| MODKEY + BACKSPACE | powermenu (opens sysact locak, logout, restart dwm) |
| MODKEY + SHIFT + q | quits dwm |
| MODKEY + b | hides the bar |
| MODKEY + 1-9 | switch focus to workspace (1-9) |
| MODKEY + SHIFT + 1-9 | send focused window to workspace (1-9) |
| MODKEY + j | focus stack +1 (switches focus between windows in the stack) |
| MODKEY + k | focus stack -1 (switches focus between windows in the stack) |
| MODKEY + h | expands size of window |
| MODKEY + l | shrinks size of window |
| MODKEY + z | gapps -1 decrease the gap size |
| MODKEY + x | gapps +1 increase the gap size |
| Keybinding | Action |
|---|---|
| MODKEY + SHIFT + i | row layout |
| MODKEY + i | column layout |
| MODKEY + TAB | cycle layout (-1) |
| MODKEY + SHIFT + TAB | cycle layout (+1) |
| MODKEY + SPACE | change layout |
| MODKEY + SHIFT + SPACE | toggle floating windows |
| MODKEY + t | layout 1 |
| MODKEY + f | layout 2 |
| MODKEY + m | layout 3 |
| MODKEY + a | layout 4 |
| Keybinding | Action |
|---|---|
| MODKEY + w | open brave browser |
| MODKEY + SHIFT + w | open nmtui as root |
| MODKEY + r | open ranger file manager |
| MODKEY + SHIFT + r | open htop system monitor |
| MODKEY + e | open neomutt mail client |
| MODKEY + SHIFT + e | open abook addressbook |
| MODKEY + n | open newsboat rss reader |
| MODKEY + v | open vimwiki personal note taking wiki |
| MODKEY + SHIFT + m | open ncmpcpp music player |
| MODKEY + c | open calcurse personal calendar, organizer |
| MODKEY + SHIFT + c | volume mute to default sink |
| MODKEY + p | mpc toggle (mute for mpd) |
Simple dwm statusbar shows brightness, volume, battery, date and time. Save it in an executable and start before exec dwm in xinitrc.
#!/bin/sh
# dwm statusbar
#!/usr/bin/env bash
# Ultra-lightweight DWM statusbar for X220 (Nerd Font version)
while true; do
# --- TIME ---
TIME=" $(date '+%H:%M %d-%b')" # Clock
# --- BATTERY ---
if [ -f /sys/class/power_supply/BAT0/capacity ]; then
BAT_CAP=$(cat /sys/class/power_supply/BAT0/capacity)
BAT_STAT=$(cat /sys/class/power_supply/BAT0/status)
BAT_TEXT=" $BAT_CAP% $BAT_STAT" # Battery
else
BAT_TEXT="No BAT"
fi
# --- CPU LOAD ---
CPU_LOAD=$(awk '{print $1}' /proc/loadavg)
CPU_TEXT=" $CPU_LOAD" # CPU icon
# --- VOLUME ---
VOL_RAW=$(amixer get Master | awk -F'[][]' 'END{ print $2 " " $4 }')
VOL_PERCENT=$(echo $VOL_RAW | awk '{print $1}' | tr -d '%')
VOL_MUTE=$(echo $VOL_RAW | awk '{print $2}')
if [ "$VOL_MUTE" = "off" ] || [ "$VOL_PERCENT" = "0" ]; then
VOL_TEXT=" Mute" # Muted speaker
else
VOL_TEXT=" $VOL_RAW" # Speaker on
fi
# --- Wi-Fi / IP ---
NET_TEXT=""
for iface in /sys/class/net/*; do
iface_name=$(basename "$iface")
state=$(cat "$iface/operstate")
if [[ "$iface_name" == w* && "$state" == "up" ]]; then
IP=$(ip -4 addr show "$iface_name" | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
NET_TEXT=" $IP" # Wi-Fi icon
break
fi
done
# --- Root disk usage ---
DISK=$(df -h --output=pcent /home | tail -1)
DISK_TEXT=" $DISK" # Hard drive icon
# --- CPU temperature ---
if [ -f /sys/class/thermal/thermal_zone0/temp ]; then
TEMP=$(awk '{printf "%.1f", $1/1000}' /sys/class/thermal/thermal_zone0/temp)
TEMP_TEXT=" $TEMP°C" # Thermometer
else
TEMP_TEXT=""
fi
# --- Combine and set status ---
STATUS="$BAT_TEXT | $CPU_TEXT | $VOL_TEXT | $DISK_TEXT | $TEMP_TEXT | $TIME"
# DWM bar update
xsetroot -name "$STATUS"
# BSPWM Polybar update
echo "$STATUS" > /tmp/dwm_status.txt
sleep 5
done
more will be added...