bakkeby / dwm-flexipatch

A dwm build with preprocessor directives to decide which patches to include during build time
MIT License
1.13k stars 222 forks source link
dwm flexipatch suckless

This dwm 6.5 (5687f46, 2024-06-08) side project has a different take on dwm patching. It uses preprocessor directives to decide whether or not to include a patch during build time. Essentially this means that this build, for better or worse, contains both the patched and the original code. The aim being that you can select which patches to include and the build will contain that code and nothing more. Due to the complexity of some of the patches dwm-flexipatch has diverged from mainstream dwm by making some core patches non-optional for maintenance reasons. For the classic dwm-flexipatch build refer to branch dwm-flexipatch-1.0.

For example to include the alpha patch then you would only need to flip this setting from 0 to 1 in patches.h:

#define BAR_ALPHA_PATCH 1

So if you have ever been curious about trying out dwm, but have been discouraged by manual patching, then this may be a good starting point to see what a "fully fledged" dwm can look like. Want to try out the pertag patch? Just flip a config and recompile. Once you have found out what works for you and what doesn't then you should be in a better position to choose patches should you want to start patching from scratch.

Alternatively if you have found the patches you want, but don't want the rest of the flexipatch entanglement on your plate then you may want to have a look at flexipatch-finalizer; a custom pre-processor tool that removes all the unused flexipatch code leaving you with a build that contains the patches you selected.

Refer to https://dwm.suckless.org/ for details on the dwm window manager, how to install it and how it works.

If you are experiencing issues then you may want to check out the Known Issues discussion category.

Browsing patches? There is a map of patches diagram which tries to organise patches into categories.


Changelog:

2024-07-11 - Added variant of the launcher patch

2024-01-31 - Added the placedir patch

2023-12-22 - Added the do-not-die-on-color-allocation-failure patch

2023-12-01 - Added the sendmoncenter patch

2023-11-12 - Added the focusmaster-return patch variant

2023-06-27 - Added the focusfollowmouse and unmanaged patches

2023-06-25 - Added the toggletopbar patch

2023-01-18 - Added the view history patch

2022-10-08 - Added the alt-tab patch

2022-08-12 - Added the nametag patch

2022-08-02 - Added the bidi patch

2022-07-05 - Added the tagpreview patch

2022-07-04 - Added the shift-tools patch(es) with individual toggles

2022-06-20 - Added the renamed scratchpads patch

2022-06-17 - Ported the seamless restart feature from dusk into dwm-flexipatch

2022-02-11 - Added the isfreesize version of the sizehints patch and the tagsync patch (contributed by Bagelli)

2021-11-23 - Added the taglabels and underlinetags patches

2021-09-08 - Added the alwayscenter patch

2021-07-27 - Added the winicon patch

2021-05-30 - Added togglelayout and toggletag patches

2021-04-16 - Vanitygaps: replaced smartgaps with smartgaps_fact, allowing gaps to be disabled or increased when there is only one client.

2021-04-14 - Upgraded the dwmblocks patch for statuscmd which changes the signalling mechanism from SIGUSR1 to SIGRTMIN which is likely to cause issues for those that already have a working setup. A compatibility option has been added which changes this back to SIGUSR1. Note that configuration was also changed.

2021-04-07 - Added xkb patch

2021-04-06 - Added the distributetags patch

2021-04-04 - Added option for having different gaps on a per tag basis

2021-03-31 - Added tapresize patch (contributed by verschmelzen)

2021-03-29 - Removed alwaysfullscreen patch (merged into dwm 6.2)

2021-03-09 - Added the tab patch and the LG3D patch

2021-02-11 - Added the riodraw and focusdir patches

2021-01-22 - Added the placemouse patch

2021-01-02 - Added the Layoutmenu patch

2020-10-26 - Added the _NET_CLIENT_LIST_STACKING patch

2020-09-29 - Added the on_empty_keys patch (ported from InstantOS)

2020-09-28 - Added the _IS_FLOATING patch (embedded in the EWMHTAGS patch)

2020-09-18 - Added the nomodbuttons patch allowing for toggleable mouse button bindings that have no modifiers

2020-09-10 - Added the anybar patch (with experimental support for dwm bar(s) + anybar)

2020-09-09 - Added the bar border patch

2020-09-08 - Added ipc v1.5.5 patch

2020-09-07 - Scratchpads improvement (multi-monitor support)

2020-09-05 - Assortment of fullscreen improvements

2020-08-27 - Added aspectresize patch

2020-08-25 - Unified tag icon handling while adding support for different icons per monitor. Added alttagsdecoration patch.

2020-08-22 - Added logic to auto-hide bars if nothing is drawn on them (e.g. for standalone bars that only show certain clients). Added clientindicators patch and unified indicator code. Simplified Pango integration by settling on common function signatures.

2020-08-21 - Simplification of color configuration; settling on a set of color schemes that is shared between multiple patches (urgentborder, floatborder and titlecolor patches made non-optional)

2020-08-20 - Added experimental flexwintitle patch based on bartabgroups

2020-08-13 - Added bartabgroups patch

2020-08-11 - Added decoration hints and focusmaster patches

2020-08-10 - Added cool autostart, insets and steam patches

2020-08-02 - Added reorganizetags patch

2020-07-19 - Added barmodules patch - making extrabar, leftlayout, staticstatus and statusallmons patches redundant, added powerline patch

2020-07-18 - Note: Up until now building dwm-flexipath without any patches selected would have given you something more or less identical with mainstream dwm. In order to reduce complexity when it comes to maintainance future versions of dwm-flexipatch may diverge from this by making some patches non-optional. For the classic dwm-flexipatch and its many patch integration hints refer to branch dwm-flexipatch-1.0 which will be subject to bug fixes and mainstream dwm updates as far as feasible.

2020-07-05 - Extrabar compatibility improvements (staticstatus, status2d, dwmblocks) and fix for systray randomly causing dwm to crash when first systray application starts

2020-06-24 - Added resizepoint, statusbutton and sendmon_keepfocus patches

2020-06-21 - Added floatpos and bar_height patches

2020-06-19 - Added tagothermonitor patch

2020-06-15 - Added sizehints patch

2020-06-14 - Added RULE macro to replace rules setup making the default config less of an abomination and making it simpler to include new rules based patches

2020-06-11 - Added the pango patch

2020-06-10 - Added the staticstatus patch

2020-05-31 - Added the keymodes patch

2020-05-29 - Added the color emoji patch

2020-05-26 - Added the status2d patch (with alpha, systray, statuspadding and dwmblocks compatibility, no statuscolors or extrabar compatibility)

2020-05-21 - Added the moveplace and moveresize patches

2020-05-03 - Added the shiftviewclients patch and the no transparent borders patch which removes opacity from window borders when the alpha patch is not used

2020-05-02 - Added dwmblocks patch

2020-04-27 - Upgraded the tagmonfixfs patch to better support moving fullscreen windows to adjacent monitors

2020-04-26 - Expanded monitor rules patch to include nmaster, showbar and topbar options

2020-04-23 - Improved swallow and switchtag compatibility

2020-04-16 - Upgraded the scratchpad patch to the multiple scratchpads patch [ref]. Updated the statuscolors patch with the width computation fix [ref].

2020-04-13 - Added statuscmd patch

2020-03-31 - Added the rounded corners patch

2020-03-27 - Revamped the dragmfact patch to support both horizontal and vertical layout splits as well as centered master variants

2020-03-25 - Added dragcfact patch

2020-03-23 - Added stacker patch

2020-03-21 - Reworked a series of layouts to re-allocate remaining pixels following an even (or cfacts) split with the aim of presenting a pixel perfect layout. This affects the following layouts: tile, bstack, bstackhoriz, centered master, centered floating master, columns, deck, and corresponding flextile-deluxe layouts

2020-02-11 - Added swaptags and vtcolor patches

2020-02-09 - Added alternative scratchpad patch

2020-02-02 - Added fsignal and transferall patches

2020-01-29 - Added swapfocus and shiftview patches

2020-01-26 - Added transfer patch

2020-01-24 - Added barpadding patch (incl. statusallmons, statuspadding, statuscolors, systray, alpha, holdbar and extrabar patch compatibility). Moved patches.h to patches.def.h to mimic the config pattern of having default and personal settings.

2020-01-17 - Added inplacerotate patch

2019-12-15 - Updated dragmfact patch to include fix patch to make it work with multiple monitors

2019-11-26 - Added dmenumatchtop patch, added improvements to the switchtag patch based on ideas from the switchtotag patch

2019-11-21 - Added fakefullscreenclient patch

2019-10-24 - Added dragmfact, extrabar, exresize and nodmenu patches

2019-10-22 - Added ispermanent and swallow patches

2019-10-16 - Introduced flexipatch-finalizer

2019-10-11 - Added the patch to ignore Xft errors when drawing text in the status bar

2019-10-10 - Added mpdcontrol, scratchpad and spawn_cwd cpatches

2019-10-08 - Added columns layout and fakefullscreen patch

2019-10-07 - Added sortscreens and dwmc patches, fixed minor cross-compatibility issues for combo, holdbar, leftlayout, hidevacanttags, taggrid and activetagindicatorbar

2019-10-06 - Added statuscolors and statusallmons patches, fixed minor cross-compatibility issues for killunsel, fullscreen, noborder, tagintostack patches

2019-10-05 - Added killunsel, taggrid, hidevacanttags and cmdcustomize patches

2019-10-04 - Added maximize, movestack, monoclesymbol, noborder, tagall and tagintostack patches

2019-10-03 - Added onlyquitonempty and switchcol patches

2019-10-02 - Added restartsig, emptyview, focusurgent and focusadjacenttag patches

2019-10-01 - Added leftlayout, fullscreen, holdbar and unfloatvisible patches

2019-09-30 - Replaced flextile with flextile-deluxe, refactored monitor rules to support predetermined layouts per tag

2019-09-15 - Added focusonclick, xrdb, viewontag, urgentborder and winview patches

2019-09-14 - Added setborderpx, selfrestart and push (no master variant), sticky and warp patches

2019-09-13 - Added titlecolor and push patches

2019-09-12 - Added activetagindicatorbar, alwaysfullscreen and autoresize patches

2019-09-11 - Added monitor rules, combo and ewmhtags patches

2019-09-10 - Minor tweaks to awesomebar patch (incl. alpha and systray compatibility). Added floatbordercolor patch.

2019-09-09 - Added deck, fibonacci (dwindle and spiral), gridmode, gapplessgrid, horizgrid, nrowgrid, centeredmaster and flextile layouts. Added alternativetags and awesomebar patches.

2019-09-08 - Added cfacts and vanitygaps patches, added bstack and bstackhoriz layouts

2019-09-07 - Added cyclelayouts, resizecorners, rotatestack, savefloats, statuspadding, switchtag, center and windowrolerule patches

2019-09-06 - Added attachabove, attachaside, attachbelow, attachbottom, autostart, fancybar, focusonnetactive and losefullscreen patches

2019-09-05 - Alpha, systray, togglefullscreen, tagallmon, tagmonfixfs, tagswapmon, pertag and zoomswap patches added

Patches included:

Layouts included: