SUCKLESS UPGRADE WORKFLOW
30 NOVEMBER 2025
Workflow for managing suckless patches across upgrades:
Initial setup:
- Clone from suckless
- Reset to stable tag
- Set push URL to my repo (git.asciimx.com)
- Pull from upstream, push to mine
Config changes only:
- Edit config.h (or let make generate it)
- make clean install
- Commit, push
dwm/slstatus installs:
- Can’t replace running binaries
- Kill dwm (Mod+Shift+q)
- Switch to tty (Ctrl+Alt+F1 on OpenBSD)
- make install
- Back to X (Ctrl+Alt+F5)
Upgrades:
- git pull –rebase
- git rebase -i to drop commits between my patch and new stable
- Keep only: my patches + new stable tag + old history
- Install, commit, push
Example:
Before: [my patch] -> [6.5]
After pull: [my patch] -> [random commits] -> [6.6] -> [old stuff] -> [6.5]
After rebase: [my patch] -> [6.6] -> [old stuff] -> [6.5]
Note: This keeps patch history clean while staying current.
Workflow for managing suckless patches across upgrades:
Initial setup:
- Clone from suckless
- Reset to stable tag
- Set push URL to my repo (git.asciimx.com)
- Pull from upstream, push to mine
Config changes only:
- Edit config.h (or let make generate it)
- make clean install
- Commit, push
dwm/slstatus installs:
- Can’t replace running binaries
- Kill dwm (Mod+Shift+q)
- Switch to tty (Ctrl+Alt+F1 on OpenBSD)
- make install
- Back to X (Ctrl+Alt+F5)
Upgrades:
- git pull –rebase
- git rebase -i to drop commits between my patch and new stable
- Keep only: my patches + new stable tag + old history
- Install, commit, push
Example:
Before: [my patch] -> [6.5]
After pull: [my patch] -> [random commits] -> [6.6] -> [old stuff] -> [6.5]
After rebase: [my patch] -> [6.6] -> [old stuff] -> [6.5]
Note: This keeps patch history clean while staying current.