commit 51232ef5fe9103a737ffc8cae0c85d9da6bdb1d9
parent d8e791a9b072262b2f4622dc1c68b3fbe181de11
Author: cowmonk <rekketstone@duck.com>
Date: Tue, 6 May 2025 19:40:45 -0700
DWM - LESS IS MORE!
Diffstat:
| M | atom.xml | | | 168 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- |
| M | blog1.html | | | 4 | ++-- |
| M | blog3.html | | | 8 | ++++---- |
| A | blog4.html | | | 210 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| M | index.html | | | 13 | +++++++++++++ |
5 files changed, 396 insertions(+), 7 deletions(-)
diff --git a/atom.xml b/atom.xml
@@ -4,8 +4,174 @@
<link href="https://cowmonk.github.io" />
<link href="https://cowmonk.github.io/atom.xml" rel="self" />
<id>https://cowmonk.github.io/</id>
- <updated>2025-04-01T00:00:00Z</updated>
+ <updated>2025-04-29T00:00:00Z</updated>
<entry>
+ <id>https://cowmonk.github.io/blog4.xml#2025-04-29T00:00:00Z</id>
+ <updated>2025-04-29T00:00:00Z</updated>
+ <title>DWM - Less is More!</title>
+ <author><name>cowmonk</name></author>
+ <link rel="alternate" type="text/html" href="https://cowmonk.github.io/blog4.html" />
+ <content type="xhtml">
+ <div xmlns="http://www.w3.org/1999/xhtml">
+<article>
+ <header>
+ <h2>DWM - Less is More!</h2>
+ <aside>A quick guide into THE suckless tiling window manager! Including patching!</aside>
+ <address>cowmonk</address>
+ <time datetime="2025-04-29">2025-04-29</time>
+ </header>
+<p>A lot of people when they move into linux will learn of the magic of tiling window managers. </p>
+<p>Generally,
+they are curious, and some find it as a waste of time, others die by it.
+And people will even wonder why in the hell someone would take the time to configure one of these things.</p>
+<p>However, I’m not here to debate whether or not it’s a waste of time, or if it’s worth it. I’m here to help out people who have heard of <a href="https://dwm.suckless.org/">dwm</a> and want to try it out.
+Whether you’ve heard it from a friend, a youtuber, a random, or whomever, people at first find dwm as a scary thing that’s <strong>IMPOSSIBLE</strong> to configure.</p>
+<p>But fret not! For your neighborhood suckless shill is here to help!</p>
+<h2 id="prerequisites">Prerequisites</h2>
+<p>Before you start going ham on the configuring/ricing, this isn’t your average joe i3, Hyprland, or whatever.
+You’ve probably heard that dwm is a “compile from source” configuration, and this just means that
+every change you’re going to make has to be compiled all over again.</p>
+<p>“Woah, woah, woah!” you might be saying. “Compile? Like C code? H4x0r like stuff?”</p>
+<p>Yep, that’s the ticket! But don’t let it scare you off. It’s simpler than it sounds. Think of it like baking a cake.
+You have a recipe (<strong>config.h</strong>), you mix your ingredients (the source code and your changes), and then you bake it (<strong>make</strong>).
+Each time you want a different flavor (a new feature or keybinding), you tweak the recipe and bake it again.
+You will need to kill dwm and re-run it again since the binary that runs is loaded in memory, it doesn’t change in real time.</p>
+<p>A common misconception is an over exaggeration on how tedious the reconfiguration is. Whilst it can be a bit annoying,
+especially in the beginning when you are getting it tailored towards your preferences, it’s definitely overblown.
+See, once you have a working system, there isn’t a need to keep on configuring onwards, a necessary process I would say.</p>
+<p>So, what do you actually <em>need</em>?</p>
+<h1 id="a-c-compiler"><strong>A C Compiler:</strong></h1>
+<p>Most likely, you’ll want <code>gcc</code>. It’s the most common C compiler everyone gets.</p>
+<p>If you’re on a Debian-based system (like Mint), you can usually get this and other essential tools by installing <code>build-essential</code>.</p>
+<pre><code class="language-bash"> $ sudo apt install build-essential
+</code></pre>
+<p>For Arch users (for the “I use Arch btw” furries):</p>
+<pre><code class="language-bash"> $ sudo pacman -S base-devel
+</code></pre>
+<p>And for Fedora folks:</p>
+<pre><code class="language-bash"> $ sudo dnf groupinstall "Development Tools" "Development Libraries"
+</code></pre>
+<h1 id="make"><strong>Make:</strong></h1>
+<p>This is a build automation tool that will, well, “<em>make</em>” dwm for you. It usually comes with the <code>build-essential</code> or <code>base-devel</code> packages.</p>
+<h1 id="libx11-development-files"><strong>LibX11 development files:</strong></h1>
+<p>DWM interacts with the X Window System, so you’ll need the development headers for it. Often called something like <code>libx11-dev</code> or <code>libX11-devel</code>.</p>
+<p>Debian:</p>
+<pre><code class="language-bash"> $ sudo apt install libx11-dev libxft-dev libxinerama-dev
+</code></pre>
+<p>Arch:</p>
+<pre><code class="language-bash"> $ sudo pacman -S libx11 libxft libxinerama
+</code></pre>
+<p>Fedora:</p>
+<pre><code class="language-bash"> $ sudo dnf install libX11-devel libXft-devel libXinerama-devel
+</code></pre>
+<p><em>(Note: <code>libxft-dev</code> is for font rendering and <code>libxinerama-dev</code> is handy for multi-monitor setups, which you’ll probably want later on!)</em></p>
+<p>Got all that? Sweet!</p>
+<h2 id="getting-the-goods-the-source-code">Getting the Goods (The Source Code!)</h2>
+<p>Alright, let’s grab the dwm source code. The suckless crew hosts their code on their own git server.
+However I recommend personally to get their official <a href="https://dl.suckless.org/dwm/dwm-6.5.tar.gz">tarball releases</a> (this links to the latest of the time of writing this: 6.5) their <a href="https://dwm.suckless.org/">page</a>.</p>
+<pre><code>1. Save the source code to where you want to keep it. A common spot is something like
+ ~/.config/ or ~/.local/suckless/, just anywhere to hide it out of sight.
+
+2. Unextract it
+
+3. Open your terminal & navigate to that directory (using cd and stuff)
+</code></pre>
+<p>Take a peek. You’ll see a bunch of <code>.c</code> files, a <code>Makefile</code>, and the golden goose: <strong>config.def.h</strong>.</p>
+<h2 id="the-infamous-">The Infamous <code>config.h</code></h2>
+<p>This is where the magic happens, folks. <code>config.def.h</code> is the <em>default</em> configuration. You’re not supposed to edit this directly. Instead, you copy it to <code>config.h</code>:
+<code>bash
+ $ cp config.def.h config.h
+</code>
+Now, config.h is <strong>your</strong> personal configuration file. Open it up with your favorite text editor. You’ll see C arrays defining your keys, your tags, your fonts, your colors.
+It might look a bit intimidating at first, but it’s surprisingly straightforward.</p>
+<p>For now, don’t change anything. Let’s just get it built!</p>
+<h2 id="the-first-bake-compiling-dwm">The First Bake: Compiling DWM</h2>
+<p>Still in your dwm directory? Good. Time to compile!
+This is the part that sounds scary but is usually super simple thanks to the Makefile.</p>
+<p>To compile and install it system-wide:</p>
+<pre><code class="language-bash"> $ sudo make clean install
+</code></pre>
+<p>Or, if you prefer not to install it system-wide immediately yet (which is a good idea for testing):</p>
+<pre><code class="language-bash"> $ make
+</code></pre>
+<p>If all your prerequisites were met, this should complete without errors. You’ll now have a dwm executable file in the directory (and runnable in your terminal if
+you ran the system wide installation)!</p>
+<p>To run dwm, you’ll typically need to configure your .xinitrc file to launch it.
+For example, you could add this line to your ~/.xinitrc:</p>
+<pre><code class="language-bash"> exec dwm
+</code></pre>
+<p>For the people who run a Display Manager which is more likely (i.e gdm, sddm, lightdm, etc.). You’ll need to create a .desktop file.
+This file basically has the information and stuff for the thing to see and run it. You’ll need to create one in the /usr/share/xsessions/.
+And here’s an example <strong>dwm.desktop</strong> for reference:</p>
+<p>/usr/share/xsessions/dwm.desktop:</p>
+<pre><code>[Desktop Entry]
+Encoding=UTF-8
+Name=dwm
+Comment=Dynamic window manager
+Exec=dwm
+Icon=dwm
+Type=XSession
+</code></pre>
+<p>The default keybinding for the Terminal is <em>Alt+Shift+Return</em>. Any other keybindings can be found in config.h, it shouldn’t be hard to
+understand the giant struct declaration. Comments left by the suckless team are your friends! Read them!</p>
+<h2 id="uh-oh-its-plain-time-for-patches">Uh Oh, It’s Plain! Time for Patches!</h2>
+<p>“Okay,” you say, “this is cool and all, but it’s a bit… barebones. My buddy’s dwm has gaps, a cool status bar, and fancy tag names!”</p>
+<p>Aha! You’ve stumbled upon the next layer of the suckless philosophy: patching.</p>
+<p>Instead of bloating the core dwm code with every feature under the sun, the suckless community maintains a collection of <a href="https://dwm.suckless.org/patches/">patches</a>.
+These are .diff files that you apply to your source code to add specific functionalities.</p>
+<pre><code class="language-bash"> Want gaps between windows? There's a patch for that.
+ Want clickable status bar elements? Patch!
+ Want windows to swallow terminals? Patch!
+ Want your bar at the bottom? You guessed it, patch!
+</code></pre>
+<p>This is where the “do it yourself” ethos really shines. You pick and choose exactly what you want. However it might be daunting for some people.
+And unfortunately, many patches don’t really like to work together. If you want a nice dwm patching experience, I would use <a href="https://github.com/bakkeby/dwm-flexipatch">this one</a>,
+he’s the same creator as <a href="https://github.com/bakkeby/st-flexipatch">st-flexipatch</a> and other “flexipatch” series. Basically, all you do is edit the <strong>patches.h</strong> file
+and you can basically get all the patches you want without too much hassle.</p>
+<p>For those who are the tinkers, continue on…</p>
+<h2 id="how-to-patch-the-basics">How to Patch (The Basics)</h2>
+<p>First of all, you’ll need to download the patch utility if you don’t have it. You can probably guess what it’ll be called when you install it using a
+package manager. Once you’ve done that here are the general steps:</p>
+<ol>
+<li><p>Find a Patch: Head over to the dwm patches page. Find a patch you like. Let’s say you want the autostart patch,
+which allows you to run commands automatically when dwm starts (I highly reccomend this especially if you’re running from a display manager!).</p></li>
+<li><p>Download the Patch: Download the .diff file for the patch. Save it somewhere, perhaps in a patches subdirectory within your dwm source folder.</p></li>
+<li><p>Apply the Patch: In your dwm source directory, use the patch command:
+<code>bash
+ patch -Np1 -i patchfile.diff
+</code></p></li>
+<li><p>Resolve Conflicts (If Any): Sometimes, patches might conflict, especially if they modify the same lines of code or if you’re applying a patch meant
+for an older version of dwm. This will result in .rej (rejected) files. You’ll need to manually edit the source files to resolve these conflicts, looking
+at the .rej files to see what couldn’t be applied. This is the trickiest part, but it gets easier with practice. Start with simple, popular patches.</p></li>
+<li><p>Recompile: After applying a patch (and resolving any conflicts), you need to recompile!
+<code>bash
+ $ sudo make clean install
+</code></p></li>
+</ol>
+<p>And that’s the patching dance! It can be a bit fiddly, especially when patches conflict, but it gives you incredible control over your window manager.
+Also, a quick note! Some patches might change the config.def.h, add these new changes to your config.h since they are default configs for the new patches.</p>
+<h2 id="next-steps-the-suckless-mentality">Next Steps & The Suckless Mentality</h2>
+<p>From here, the world is your oyster:</p>
+<ul>
+<li><strong>Explore config.h:</strong> Seriously, dive in. Change your mod key (Alt is default, many prefer the Super/Windows key, just change the MODKEY definition from Mod1Mask to Mod4Mask).
+Change your fonts, colors, and tag names. Recompile after every change.</li>
+<li><strong>Browse More Patches:</strong> Get those gaps (vanitygaps), add a systray, try different layouts (fibonacci, centeredmaster).</li>
+<li><strong>Status Bar:</strong> Dwm’s status bar is typically populated by setting the root window’s name. You’ll often use a separate shell script or program (like slstatus or a custom script)
+that periodically updates this. The autostart patch is great for launching such scripts. You can also decide to change out the bar to something like <a href="https://polybar.github.io/">polybar</a> or something.</li>
+<li><strong>Embrace Simplicity:</strong> The core idea of suckless is to keep things simple and understandable. If a patch seems overly complex or breaks things too often, maybe it’s not for you.
+The beauty is in building your ideal, minimal environment.</li>
+</ul>
+<p>Don’t be afraid to break things! If you mess up your config.h or a patch goes horribly wrong, you can always run a <em>patch -R -i file.patch</em>. And for the config.h, the config.def.h
+will always be there as the default to save you.</p>
+<p>It’s a journey, not a race. You’ll learn a bit about C, a bit about how window managers work, and a lot about what you really want from your desktop.</p>
+<p>So go forth, compile, patch, and make dwm your own! It’s less about having a flashy setup (though you can certainly make it look nice) and more about having a tool that’s perfectly
+tailored to you. Less is indeed more, especially when you’re the one deciding what that “less” consists of.</p>
+<p>Happy Hacking!</p>
+<p>– cowmonk</p>
+</article></div>
+ </content>
+ </entry>
+ <entry>
<id>https://cowmonk.github.io/blog3.xml#2025-04-01T00:00:00Z</id>
<updated>2025-04-01T00:00:00Z</updated>
<title>The Ultimate Abstraction: Trading ./configure for Click-to-Install</title>
diff --git a/blog1.html b/blog1.html
@@ -19,7 +19,7 @@
<a href="blog2.html"><-newer</a>
</span>
<span class="prevnext ">
- <a href="blog3.html">older-></a>
+ <a href="blog4.html">older-></a>
</span>
</nav>
</header>
@@ -66,7 +66,7 @@ These plans aren’t fully set in stone and it would be interesting to dive
<a href="blog2.html"><-newer</a>
</span>
<span class="prevnext ">
- <a href="blog3.html">older-></a>
+ <a href="blog4.html">older-></a>
</span>
</nav>
<footer>
diff --git a/blog3.html b/blog3.html
@@ -16,8 +16,8 @@
<header>
<h1><a href="index.html">cowmonk's random blogs</a></h1>
<nav class="sblg-nav">
- <span class="prevnext ">
- <a href="blog1.html"><-newer</a>
+ <span class="prevnext sblg-prev-has">
+ <a href="blog4.html"><-newer</a>
</span>
<span class="prevnext sblg-next-has">
<a href="blog2.html">older-></a>
@@ -72,8 +72,8 @@ but at least for me: the lack of challenge is always worth it. It makes using my
</p>
</section>
<nav>
- <span class="prevnext ">
- <a href="blog1.html"><-newer</a>
+ <span class="prevnext sblg-prev-has">
+ <a href="blog4.html"><-newer</a>
</span>
<span class="prevnext sblg-next-has">
<a href="blog2.html">older-></a>
diff --git a/blog4.html b/blog4.html
@@ -0,0 +1,210 @@
+
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <meta charset="utf-8" />
+ <title>DWM - Less is More!</title>
+ <link rel="stylesheet" href="template.css" />
+ <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Atom Feed" />
+ <link rel="apple-touch-icon" sizes="180x180" href="assets/images/apple-touch-icon.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="assets/images/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="assets/images/favicon-16x16.png" />
+ <link rel="manifest" href="assets/images/site.webmanifest" />
+ </head>
+ <body>
+ <header>
+ <h1><a href="index.html">cowmonk's random blogs</a></h1>
+ <nav class="sblg-nav">
+ <span class="prevnext ">
+ <a href="blog1.html"><-newer</a>
+ </span>
+ <span class="prevnext sblg-next-has">
+ <a href="blog3.html">older-></a>
+ </span>
+ </nav>
+ </header>
+ <section>
+ <h3 style="color:yellow;">DWM - Less is More!</h3>
+ <p>
+ <q>A quick guide into THE suckless tiling window manager! Including patching!</q>
+ </p>
+ <p>
+ Published by
+ <span class="name">cowmonk</span>
+ on
+ <time datetime="2025-04-29">2025-04-29</time>
+ </p>
+ <article data-sblg-article="1" data-sblg-tags="guide suckless tutorial">
+ <header>
+ <h2>DWM - Less is More!</h2>
+ <aside>A quick guide into THE suckless tiling window manager! Including patching!</aside>
+ <address>cowmonk</address>
+ <time datetime="2025-04-29">2025-04-29</time>
+ </header>
+<p>A lot of people when they move into linux will learn of the magic of tiling window managers. </p>
+<p>Generally,
+they are curious, and some find it as a waste of time, others die by it.
+And people will even wonder why in the hell someone would take the time to configure one of these things.</p>
+<p>However, I’m not here to debate whether or not it’s a waste of time, or if it’s worth it. I’m here to help out people who have heard of <a href="https://dwm.suckless.org/">dwm</a> and want to try it out.
+Whether you’ve heard it from a friend, a youtuber, a random, or whomever, people at first find dwm as a scary thing that’s <strong>IMPOSSIBLE</strong> to configure.</p>
+<p>But fret not! For your neighborhood suckless shill is here to help!</p>
+<h2 id="prerequisites">Prerequisites</h2>
+<p>Before you start going ham on the configuring/ricing, this isn’t your average joe i3, Hyprland, or whatever.
+You’ve probably heard that dwm is a “compile from source” configuration, and this just means that
+every change you’re going to make has to be compiled all over again.</p>
+<p>“Woah, woah, woah!” you might be saying. “Compile? Like C code? H4x0r like stuff?”</p>
+<p>Yep, that’s the ticket! But don’t let it scare you off. It’s simpler than it sounds. Think of it like baking a cake.
+You have a recipe (<strong>config.h</strong>), you mix your ingredients (the source code and your changes), and then you bake it (<strong>make</strong>).
+Each time you want a different flavor (a new feature or keybinding), you tweak the recipe and bake it again.
+You will need to kill dwm and re-run it again since the binary that runs is loaded in memory, it doesn’t change in real time.</p>
+<p>A common misconception is an over exaggeration on how tedious the reconfiguration is. Whilst it can be a bit annoying,
+especially in the beginning when you are getting it tailored towards your preferences, it’s definitely overblown.
+See, once you have a working system, there isn’t a need to keep on configuring onwards, a necessary process I would say.</p>
+<p>So, what do you actually <em>need</em>?</p>
+<h1 id="a-c-compiler"><strong>A C Compiler:</strong></h1>
+<p>Most likely, you’ll want <code>gcc</code>. It’s the most common C compiler everyone gets.</p>
+<p>If you’re on a Debian-based system (like Mint), you can usually get this and other essential tools by installing <code>build-essential</code>.</p>
+<pre><code class="language-bash"> $ sudo apt install build-essential
+</code></pre>
+<p>For Arch users (for the “I use Arch btw” furries):</p>
+<pre><code class="language-bash"> $ sudo pacman -S base-devel
+</code></pre>
+<p>And for Fedora folks:</p>
+<pre><code class="language-bash"> $ sudo dnf groupinstall "Development Tools" "Development Libraries"
+</code></pre>
+<h1 id="make"><strong>Make:</strong></h1>
+<p>This is a build automation tool that will, well, “<em>make</em>” dwm for you. It usually comes with the <code>build-essential</code> or <code>base-devel</code> packages.</p>
+<h1 id="libx11-development-files"><strong>LibX11 development files:</strong></h1>
+<p>DWM interacts with the X Window System, so you’ll need the development headers for it. Often called something like <code>libx11-dev</code> or <code>libX11-devel</code>.</p>
+<p>Debian:</p>
+<pre><code class="language-bash"> $ sudo apt install libx11-dev libxft-dev libxinerama-dev
+</code></pre>
+<p>Arch:</p>
+<pre><code class="language-bash"> $ sudo pacman -S libx11 libxft libxinerama
+</code></pre>
+<p>Fedora:</p>
+<pre><code class="language-bash"> $ sudo dnf install libX11-devel libXft-devel libXinerama-devel
+</code></pre>
+<p><em>(Note: <code>libxft-dev</code> is for font rendering and <code>libxinerama-dev</code> is handy for multi-monitor setups, which you’ll probably want later on!)</em></p>
+<p>Got all that? Sweet!</p>
+<h2 id="getting-the-goods-the-source-code">Getting the Goods (The Source Code!)</h2>
+<p>Alright, let’s grab the dwm source code. The suckless crew hosts their code on their own git server.
+However I recommend personally to get their official <a href="https://dl.suckless.org/dwm/dwm-6.5.tar.gz">tarball releases</a> (this links to the latest of the time of writing this: 6.5) their <a href="https://dwm.suckless.org/">page</a>.</p>
+<pre><code>1. Save the source code to where you want to keep it. A common spot is something like
+ ~/.config/ or ~/.local/suckless/, just anywhere to hide it out of sight.
+
+2. Unextract it
+
+3. Open your terminal & navigate to that directory (using cd and stuff)
+</code></pre>
+<p>Take a peek. You’ll see a bunch of <code>.c</code> files, a <code>Makefile</code>, and the golden goose: <strong>config.def.h</strong>.</p>
+<h2 id="the-infamous-">The Infamous <code>config.h</code></h2>
+<p>This is where the magic happens, folks. <code>config.def.h</code> is the <em>default</em> configuration. You’re not supposed to edit this directly. Instead, you copy it to <code>config.h</code>:
+<code>bash
+ $ cp config.def.h config.h
+</code>
+Now, config.h is <strong>your</strong> personal configuration file. Open it up with your favorite text editor. You’ll see C arrays defining your keys, your tags, your fonts, your colors.
+It might look a bit intimidating at first, but it’s surprisingly straightforward.</p>
+<p>For now, don’t change anything. Let’s just get it built!</p>
+<h2 id="the-first-bake-compiling-dwm">The First Bake: Compiling DWM</h2>
+<p>Still in your dwm directory? Good. Time to compile!
+This is the part that sounds scary but is usually super simple thanks to the Makefile.</p>
+<p>To compile and install it system-wide:</p>
+<pre><code class="language-bash"> $ sudo make clean install
+</code></pre>
+<p>Or, if you prefer not to install it system-wide immediately yet (which is a good idea for testing):</p>
+<pre><code class="language-bash"> $ make
+</code></pre>
+<p>If all your prerequisites were met, this should complete without errors. You’ll now have a dwm executable file in the directory (and runnable in your terminal if
+you ran the system wide installation)!</p>
+<p>To run dwm, you’ll typically need to configure your .xinitrc file to launch it.
+For example, you could add this line to your ~/.xinitrc:</p>
+<pre><code class="language-bash"> exec dwm
+</code></pre>
+<p>For the people who run a Display Manager which is more likely (i.e gdm, sddm, lightdm, etc.). You’ll need to create a .desktop file.
+This file basically has the information and stuff for the thing to see and run it. You’ll need to create one in the /usr/share/xsessions/.
+And here’s an example <strong>dwm.desktop</strong> for reference:</p>
+<p>/usr/share/xsessions/dwm.desktop:</p>
+<pre><code>[Desktop Entry]
+Encoding=UTF-8
+Name=dwm
+Comment=Dynamic window manager
+Exec=dwm
+Icon=dwm
+Type=XSession
+</code></pre>
+<p>The default keybinding for the Terminal is <em>Alt+Shift+Return</em>. Any other keybindings can be found in config.h, it shouldn’t be hard to
+understand the giant struct declaration. Comments left by the suckless team are your friends! Read them!</p>
+<h2 id="uh-oh-its-plain-time-for-patches">Uh Oh, It’s Plain! Time for Patches!</h2>
+<p>“Okay,” you say, “this is cool and all, but it’s a bit… barebones. My buddy’s dwm has gaps, a cool status bar, and fancy tag names!”</p>
+<p>Aha! You’ve stumbled upon the next layer of the suckless philosophy: patching.</p>
+<p>Instead of bloating the core dwm code with every feature under the sun, the suckless community maintains a collection of <a href="https://dwm.suckless.org/patches/">patches</a>.
+These are .diff files that you apply to your source code to add specific functionalities.</p>
+<pre><code class="language-bash"> Want gaps between windows? There's a patch for that.
+ Want clickable status bar elements? Patch!
+ Want windows to swallow terminals? Patch!
+ Want your bar at the bottom? You guessed it, patch!
+</code></pre>
+<p>This is where the “do it yourself” ethos really shines. You pick and choose exactly what you want. However it might be daunting for some people.
+And unfortunately, many patches don’t really like to work together. If you want a nice dwm patching experience, I would use <a href="https://github.com/bakkeby/dwm-flexipatch">this one</a>,
+he’s the same creator as <a href="https://github.com/bakkeby/st-flexipatch">st-flexipatch</a> and other “flexipatch” series. Basically, all you do is edit the <strong>patches.h</strong> file
+and you can basically get all the patches you want without too much hassle.</p>
+<p>For those who are the tinkers, continue on…</p>
+<h2 id="how-to-patch-the-basics">How to Patch (The Basics)</h2>
+<p>First of all, you’ll need to download the patch utility if you don’t have it. You can probably guess what it’ll be called when you install it using a
+package manager. Once you’ve done that here are the general steps:</p>
+<ol>
+<li><p>Find a Patch: Head over to the dwm patches page. Find a patch you like. Let’s say you want the autostart patch,
+which allows you to run commands automatically when dwm starts (I highly reccomend this especially if you’re running from a display manager!).</p></li>
+<li><p>Download the Patch: Download the .diff file for the patch. Save it somewhere, perhaps in a patches subdirectory within your dwm source folder.</p></li>
+<li><p>Apply the Patch: In your dwm source directory, use the patch command:
+<code>bash
+ patch -Np1 -i patchfile.diff
+</code></p></li>
+<li><p>Resolve Conflicts (If Any): Sometimes, patches might conflict, especially if they modify the same lines of code or if you’re applying a patch meant
+for an older version of dwm. This will result in .rej (rejected) files. You’ll need to manually edit the source files to resolve these conflicts, looking
+at the .rej files to see what couldn’t be applied. This is the trickiest part, but it gets easier with practice. Start with simple, popular patches.</p></li>
+<li><p>Recompile: After applying a patch (and resolving any conflicts), you need to recompile!
+<code>bash
+ $ sudo make clean install
+</code></p></li>
+</ol>
+<p>And that’s the patching dance! It can be a bit fiddly, especially when patches conflict, but it gives you incredible control over your window manager.
+Also, a quick note! Some patches might change the config.def.h, add these new changes to your config.h since they are default configs for the new patches.</p>
+<h2 id="next-steps-the-suckless-mentality">Next Steps & The Suckless Mentality</h2>
+<p>From here, the world is your oyster:</p>
+<ul>
+<li><strong>Explore config.h:</strong> Seriously, dive in. Change your mod key (Alt is default, many prefer the Super/Windows key, just change the MODKEY definition from Mod1Mask to Mod4Mask).
+Change your fonts, colors, and tag names. Recompile after every change.</li>
+<li><strong>Browse More Patches:</strong> Get those gaps (vanitygaps), add a systray, try different layouts (fibonacci, centeredmaster).</li>
+<li><strong>Status Bar:</strong> Dwm’s status bar is typically populated by setting the root window’s name. You’ll often use a separate shell script or program (like slstatus or a custom script)
+that periodically updates this. The autostart patch is great for launching such scripts. You can also decide to change out the bar to something like <a href="https://polybar.github.io/">polybar</a> or something.</li>
+<li><strong>Embrace Simplicity:</strong> The core idea of suckless is to keep things simple and understandable. If a patch seems overly complex or breaks things too often, maybe it’s not for you.
+The beauty is in building your ideal, minimal environment.</li>
+</ul>
+<p>Don’t be afraid to break things! If you mess up your config.h or a patch goes horribly wrong, you can always run a <em>patch -R -i file.patch</em>. And for the config.h, the config.def.h
+will always be there as the default to save you.</p>
+<p>It’s a journey, not a race. You’ll learn a bit about C, a bit about how window managers work, and a lot about what you really want from your desktop.</p>
+<p>So go forth, compile, patch, and make dwm your own! It’s less about having a flashy setup (though you can certainly make it look nice) and more about having a tool that’s perfectly
+tailored to you. Less is indeed more, especially when you’re the one deciding what that “less” consists of.</p>
+<p>Happy Hacking!</p>
+<p>– cowmonk</p>
+</article>
+ <p class="tags">
+ Tags: <span class="sblg-tag">guide</span><span class="sblg-tag">suckless</span><span class="sblg-tag">tutorial</span>.
+ </p>
+ </section>
+ <nav>
+ <span class="prevnext ">
+ <a href="blog1.html"><-newer</a>
+ </span>
+ <span class="prevnext sblg-next-has">
+ <a href="blog3.html">older-></a>
+ </span>
+ </nav>
+ <footer>
+ <a href="https://www.vim.org/"><img src="https://cyber.dabamos.de/88x31/vim.vialle.love.anim.gif" alt="description" height="31" /></a> <img src="https://88x31.kate.pet/madeon_linux.gif" height="31" /> <img src="https://cyber.dabamos.de/88x31/javascript-zero.gif" height="31" />
+ </footer>
+ </body>
+</html>
diff --git a/index.html b/index.html
@@ -19,6 +19,19 @@
</p>
</header>
<nav data-sblg-nav="1" data-sblg-navcontent="1"><ul><li>
+ <h2><a href="blog4.html">DWM - Less is More!</a></h2>
+ <div>
+ <address>cowmonk</address>,
+ <time datetime="2025-04-29">2025-04-29</time>
+ </div>
+ <p>A quick guide into THE suckless tiling window manager! Including patching!</p>
+ <p class="tags">
+ Tags: <span class="sblg-tag">guide</span><span class="sblg-tag">suckless</span><span class="sblg-tag">tutorial</span>.
+ </p>
+ <nav>
+ <a href="blog4.html">Read more-></a>
+ </nav>
+ </li><li>
<h2><a href="blog3.html">The Ultimate Abstraction: Trading ./configure for Click-to-Install</a></h2>
<div>
<address>cowmonk</address>,