 Tiling Window Managers are one of my favorite things. I've been using Tiling Window Managers now full-time, probably since 2019-ish. Probably maybe a year or so on there. Before that, I was a big KDE fan, but since I switched to i3 back then in 2019, I really haven't looked back. There's just something about the way Tiling Window Managers help you with your workflow that really appeals to me, and I think that's the same for a lot of people. Being able to just know where your windows are all the time in a certain format just really works well for me. I switch Window Managers all the time. I mean, like, all the time. I hop Window Managers much more than I hop distros, really, and over the last two years I've pretty much tried them all. One of my favorite Window Managers is DWM, which comes from the Seclus people, and it is really great. It's probably my favorite. It's the one that I've stuck on the longest, at least recently. Prior to that, it was probably i3 that I'd been on the longest, but DWM has been my daily driver now for a long time. But just because I've kind of found a favorite doesn't mean I'm not still hopping between different Window Managers and trying out new things. One of the other Window Managers that I've tried several times now is Xmonet. If you follow the channel for any amount of time, you'll know that my experience with Xmonet has not been a good one. The first experience I had was a complete utter failure. It was not a good experience. I made videos. If you like watching me fail, you should definitely go check those out. I'll link them in the video description. The second time around I was with Xmonet for about a week. I had basically the same problems as the first time, even if I was more experienced with Window Managers at that point, but it was still mostly a failure. I gave up after six or seven days, but I'm very stubborn. I don't like giving up. I don't feel proud of myself when I give up on something, because despite maybe not being the most intelligent person in the world, I feel like if I put enough effort into something I can actually understand it usually. Some things are just beyond me, but at least when it comes to Linux, a lot of times, if I work hard enough on it, I can actually understand it. I didn't feel good giving up on Xmonet. I came back to Xmonet recently, and I've been using Xmonet now for about a month, three weeks a month. I've been using it almost full-time. What I thought I would do today is I would go through and compare DWM and Xmonet. I know that this has been a very long introduction for one of my videos, but I just whatever. I'm going to compare DWM and Xmonet. If you're trying to choose between these two window managers, you'll have a better chance of understanding the differences between them, and then you also have an idea of what I think of them. In the first part of this video, I'm going to be talking about just the technical details and differences and similarities and stuff. That'll be a fairly short part of the video. In the second half, I will talk more about my personal thoughts on DWM and Xmonet and also give my final thoughts on my time with Xmonet. Let's go ahead and jump into the first part of the video. Let's go ahead and start with DWM. DWM is a dynamic tiling window manager. Basically what that means is that when your windows spawn, they always spawn on a certain layout. In DWM's case, it's always going to be the master stack layout by default. You can install all the layouts. It comes with a couple others that are out of the box. Let me show you what the master stack looks like, actually. So I'm on a tag here in DWM, and I have a terminal open. If I were to spawn another one, it would spawn here, and then the next one would spawn here, and then here, and here, and here, and that is the master stack layout. Now, like I said, there are other layouts included with DWM out of the box, so we could look at the monocle layout, which basically all the windows would be stacked on top of each other. Right now, all those windows that I had are all on top of each other, and I can move between them using a keybinding, H and or J and K in this case. You can't tell the difference because they're all exactly the same, but that's one of the layouts that comes with DWM. There are also other layouts that you can go through and install the patches, which we'll talk about patches here in a minute. For example, this is the Fibonacci layout. This one here is kind of like a reverse Fibonacci layout, I think. This one here is kind of like a master monocle layout. So you always have one single master over here, and then these, all the rest of the windows are stacked on top of each other over here. And then this one here is another one like this, and this, and this, and this, and this, and so on and so forth. There are a ton of them, and I have all of them installed. I hardly ever use anything other than the master stack, but whatever. So that is what a dynamic tiling window manager looks like in this case, DWM. If you compared that to a manual tiling window manager, basically what a manual tiler does, it allows you to put the windows wherever you want as you spawn them via key commands. So that's the difference. Now, DWM is written in the C language. And basically what that means is that if you know a little bit of C, you'll have a lot better time actually configuring DWM. DWM is also configured in the same language that it's written in. So it's written in C, it's also configured in C. So it's not like I3 or something like that, where you have your configuration file, which is written in a user friendly syntax and your code for I3, which would be written in something else. DWM is written and configured in C. It is extensible through the use of patches. So basically, because this is a suckless utility, they want to have as few lines of code as possible. And in order to get a lot of functionality, you have to actually patch that stuff in. Now, I'm not going to show you how to do patches here. There are a ton of YouTube videos out there on how to do DWM patches. But basically what patches allow you to do is change the way DWM functions. So for example, by default, when you spawn a new window, the new window will appear in the master spawn area over here. I've patched it so that the new window always appears at the bottom of the stack. In this case, this is considered the bottom. That way, the one that I'm working on always stays in the first position. And that's just one example of patches. Another one would be the thing that allows me to do color in the bar. That's a patch that is applied to DWM. The widgets themselves appear, the modules are, it's also done through a suckless utility called SL status that's not actually part of DWM. It's a separate DW or a suckless utility. And then the thing that allows me to have just the workspaces or tags in this case show up here that actually have windows on them instead of all nine workspaces or tags. That is also a patch. So there are tons and tons of different patches out there. Chances are if there's a functionality you want to build into DWM, there is probably a patch for that. The downside there is that once you get past five or six patches, maybe seven patches, it gets harder and harder to get the patches to actually work. Now there is a forked DWM called, I think it's called Fuxy Patch. I think people have more luck patching more into that than they do on vanilla DWM, but I'm not sure I've never actually tried it. So the last thing I want to talk about is just real quick, DWM comes with a bar. So you don't actually have to install another bar like Polybar or Xmo bar or whatever it comes with the bar. It allows you to edit it without plugins or anything like that, without patches, if you wanted to. You could create all the stuff that I did up here. Without SL status, if you wanted to, SL status just makes it easier. So those are the technical details of DWM. I could probably talk for another 30 or 40 minutes about the little things at DWM, but those are just the kind of high level aspects of DWM. So let's go ahead and move to Xmonad. Now that I've logged out and logged back into Xmonad, let's talk about Xmonad for just a bit. Xmonad is also a dynamic tiling window management. What that means is that when you go through and spawn new windows, it's always going to be following a specific layout. The default layout is master stack, just like in DWM. It's a little bit different because at least my setup is a little bit different because the way it spawns new windows, it pushes the oldest window down instead of always keeping the oldest window on top. So let me show you exactly what I mean there. So if I go through and spawn new terminals here, and we actually open up, let's say, beat the pie top here, if I can actually spell, and then I open up a new window, that would actually go through and push the pie top lower down in the stack. Whereas in DWM, I had it set up so that the oldest window always stayed in the master position. I believe that is something you can change in Xmonad, but I haven't actually done that. This default function now, they kind of drives me nuts because it's just not the way I'd necessarily want it. But again, that's the way it is by default. Now, there are other layouts that you can do just like in DWM. There's floating, there's tiling. You can go through and add several other layouts that you want through the use of Haskell libraries, which I'll talk about here in a minute. Unlike DWM, which comes with nine workspaces per monitor, Xmonad has nine workspaces total. I do believe you can add a tenth one and map it to the zero key, but I have not done that. I know the Oracle Linux install has a tenth workspace, but this one only has nine. Outside of tags or workspaces, if you're looking to configure Xmonad, Xmonad is written and configured in Haskell. So if you don't know any Haskell, get ready to learn because you're going to need to know it, at least some of it. I'll talk more about my experiences with Haskell in the second part of the Xmonad thing later on in the video, but just know that it is written in Haskell. It may not be a language that you've ever even heard of before. It's not as popular as something like Python or C or Rosteven, but it's Haskell. It has its pros and cons, I guess is what you'd say, but it's definitely something you'll have to keep in mind. Now, this is the Xmonad configuration file, and what you'll notice at the beginning of this is that it has a ton of library systems. So you go through and import a ton of Haskell libraries, and that's how you extend functionality in Xmonad. So whereas in DWM, you add a functionality through the patching system, in Xmonad, you add it through libraries, and these are all downloaded when you go through and install Xmonad and the Xmonad contrib file, or a package when you install Xmonad. For example, let's just go through, and I'll show you one of these libraries and what it does. So for example, these ones here, these all add layouts to Xmonad that don't come with it out of the box, the tab layout, three column layout, and so on and so forth. This one here was especially important to me, the named scratchpad. Basically, that allows you to use a scratchpad. So in this case, so something like this would allow me to open up my mail client, and that's awesome. That's a scratchpad. And that's something that I didn't really show you in DWM, but DWM also has scratchpad functionality. It's just not built in. It's something that you have to patch in. Similarly, Xmonad does not come with scratchpatches enabled by default. You have to go through and enable them through the use of a library. Finally, in this section here, Xmonad does not come with a bar. So if you, when you first log in, you'll actually just get a blank screen, nothing else. In DWM, which I didn't actually talk about, DWM does come with a bar, and you'll see that right out of the box. It's also a blank black screen. You don't have a wallpaper or anything, but you do get a bar. Whereas in Xmonad, it's just a blank black screen. Xmonad will allow you to use pretty much any bar you want to use. This here is XMO bar. It's the one that's kind of built to go with Xmonad, why it's not included out of the box. I don't know. Personally, I think it should be. I found the documentation to be kind of disjointed because it's not with the Xmonad stuff. It's actually its own stuff. It was really weird, but that's just my opinion, and I'll save that for later, I guess. But like I said, it does not come with a bar, so you'll have to add a bar. I've also used Polybar with Xmonad for a little while. It works well enough. Some of the workspace stuff kind of can get a little bit wonky. So just keep that in mind. Hi there, Matt from the future. I did not in this video talk at all about documentation, and I think that is a mistake on my part. I should talk a little bit about documentation. If you were to compare DWM and Xmonad in terms of documentation, Xmonad would win hands down. The documentation for DWM is present. It gets a certificate of participation, but beyond that, it's not great. And it's very, very technical. Now that's not to say that Xmonad documentation is not technical or even easily accessible. I found it kind of hard to follow, but in terms of breadth, the Xmonad in Haskell documentation is by far and away much better. Also on the DWM side, you'll notice that the documentation is very anti-new user. Whereas the Xmonad stuff at least seems to try to explain some things. It doesn't do it well often, but at least tries. The DWM stuff assumes that you know what you're doing, and if you don't know what you're doing, you're kind of shit out of luck. I learned most of my stuff in terms of learning DWM from other tutorials, not the actual DWM documentation. Now also, I didn't mention support. DWM is like the arch Linux of support. If you try to get help from people who work in the Sucless organization, or from even the Sucless community, it's very much read the laughing manual. And seeing as how the manual kind of sucks, the support is very much lacking. Now that doesn't mean that you can't actually get help, but you'll notice that they're very snarky about it. So if you ask a noob question, you're going to get treated like a noob. And sometimes you might not even get an answer because they really do not want new users to use DWM. They assume that you at least know of some functionality of C in DWM itself in order to actually get started. On the X-MOMO website, in terms of support, it was fantastic. I've had a couple of the developers actually get in contact, meaning when I was really having problems offered to help me in their IRC. I didn't actually have to end up going to do that, but the fact that their developers are active enough to kind of search out people who are having problems is just amazing. I also found that the people who use X-MOMO are much more willing to help than the DWM guys. So if you need support, at least in this aspect, X-MOMO is definitely better. So let's go ahead and go back to past Matt and continue on with the video. Okay. And now I'm going to go ahead and switch back over to DWM and I might get my opinions on DWM. So let me log out and log back in again. Okay. So in this part of the video, I'm going to be talking about my opinions of these two window managers. And we're going to start with DWM. So let's go ahead and look at my DWM screen here so that I could kind of explore while I'm talking. When I first decided to switch to DWM, I was very intimidated. I had never built anything from source successfully at that point. I was very, I mean, I wasn't really new to Linux, but I just used Linux superficially. You know, I mean, I used LibreOffice, I used Firefox, whatever. I was still reveling in the fact that I just used Linux. You know, I didn't delve deep into basically anything. And I really had no clue about how to even go through and add a window manager to like a display manager. I didn't know how to do any of the stuff that really DWM requires you to do. I'd used i3 for a little while, but i3 is, it's a very beginner's friendly window manager. You install it from a repository, you know, you can go through and use Polybar or whatever, if you want to, or you can just use the bar that's included. There's, I mean, you can do a whole bunch of rising stuff and don't get me wrong, i3 is very powerful, but it's also very easy to just leave alone. I was trying to find a more complex word way to describe it, but it's very easy to set it and forget it in i3. There's not a lot of customization you can do outside of key behindings in like the bar or whatever. It just feels like once you've set up i3, there's no more you can do with it. It's not really as limiting as I'm making it seem, but you know whatever. With DWM, there's a lot you can do with it. There's all these patches and stuff like that, and it can be very intimidating because from somebody who's just using i3, there's so much more it feels like you can do. Once I got past the whole building from source and adding it to a display manager and all this stuff, I seem to have fallen in love with DWM. It's simple, easy to configure and very lightweight. More than that, it's predictable in its use. So I'm going to be talking about this quite a bit when I talk about Xmonad, but when I spawn a window in DWM, I know where it's going to be. I know where it's going to come up. I know usually what size it's going to be. I love the fact that when, like if I were to close these two windows, navigate away from this tag. So let me actually do this. I can close these two windows, go to a different window or different tag, and then go back to that tag and open up two new windows, and it maintains the size of the windows that they were previously. That's really cool. That was one of the features that I just fell in love with when I first started using DWM because it's not a feature that was on i3 or BSPWM, even though I know you can build that kind of functionality into it. I know that now. I didn't know that then. One of the other window managers that I've used is Qtile. And one of the things that drive me bonkers about it is that the team behind it updates it so often that things break. The one thing I like about DWM is that, yeah, it gets updates, but I've never had a problem or an update where things just completely break. And honestly, it gets updated so infrequently that you just don't have to worry about that kind of stuff. Now, I'm assuming that as the tags kind of get updated a little bit more, I may discover some things that break, but I haven't had any experience with it in almost a year of using DWM. Anyone who has been following the channel for any monotime knows that I'm a big fan of multiple workspaces. And one of the greatest things about DWM is that every monitor you have has nine workspaces. No matter how many monitors you have, it's fantastic for someone who just wants to have a ton of workspaces. In this case, tags. I understand that there's a difference. I get nine on the first monitor. I get nine on the second monitor. It's great. It's one of the biggest problems I had with Qtile is that Qtile only has nine. Now, I understand that you can add more workspaces to Qtile, but that's, again, work that I didn't really want to have to do. And the fact that DWM actually has nine workspaces per monitor is great. Now, as you saw in Xmonad, Xmonad only has nine workspaces total. You can add a 10th one. I know that for a fact. I just haven't done it. But beyond that, I don't know if you can actually add any more. So the fact that I have nine workspaces per monitor is just ideal for me. The biggest thing that I've ever had a problem with DWM is the patching. So if I had, if somebody asked me what the biggest downside of DWM is, it's definitely the patching system because getting five or six patches working usually is not a problem. As long as the patches that you're installing have no conflicts with each other, chances are you can get five or six working. You'll probably discover that some of them fail, but it's easy enough to go through and manually patch in something that fails. It's just adding a couple lines into the DWM.c file or deleting them a couple, maybe whatever. Usually it's very easy, but once you get past five or six, even manually patching things often doesn't work. Once you get past five or six, you'll find that more patches fail, but you'll also find that you'll have more and more conflicting things that just won't work at all. For example, if you install something like DWM blocks and you try to add color onto it later on, a lot of the times you're going to find things that just conflict. It's going to be very difficult because the patch that you're installing is going to be expecting your DWM to be basically vanilla. So it's going to be looking for lines in your code that look like a vanilla install, but you've already made changes with patches before, so things get very, very complicated, the more patches you add. Right now, I think I have probably five or six patches. I think that's where I'm pretty much comfortable with. There's a couple more that I really want to add, but I haven't been able to actually get them to work. So my overall thoughts on DWM is that I love it. It's my favorite window manager. I like the fact that it has so many workspaces or tags in this case. I like my setup as I have it now. I like my rice, and it's really been hard for me to kind of leave it behind because it's kind of like the perfect, you know, it's my perfect set. It has some key bindings here that are in the configuration file, but I also use SXHKD in conjunction with the configuration file, and I love that kind of combination because it's so much easier to go through and change key bindings in SXHKD, and that's not really something that I've been able to really do in Xmonad because there are many more window manager specific key bindings that have to go in the configuration file. I just kind of, this setup is just for me, right? I like this a lot. And I think one of the reasons why is that I've built this from the ground up and I really, truly understand it. You know what I mean? I, if something goes wrong in DWM, I have the confidence in myself that I could fix it. That's not something that I have in Xmonad, and I talked about that, and I'll talk about that in the Xmonad part of this, but if something goes wrong with DWM, I can feel like I can fix it. And if there's something that I want to add to DWM, I at least know that I can try to add it. And if it fails, I can at least understand why it failed. The reason why I like DWM so much is just because I understand it more, at least when I'm comparing my interest in window manager between this and Xmonad, I understand DWM way more, and that allows me to have a level of comfort with DWM that I just don't have with Xmonad. So let me go ahead now and switch over to my Xmonad system, and I'll talk about my experiences a little bit more with my experience with Xmonad and what I think about it. Okay, so now I'm going to talk about Xmonad and my experiences with Xmonad, and whereas I truly love and use DWM a lot and see myself sticking with it for a long time, my opinions on Xmonad are very much not as positive. They're more positive now than they were the last time I tried Xmonad, but if you had to ask me which one I would recommend between these two, I'd definitely say DWM. And the main reason why is Haskell. Now, C is not the easiest programming language to learn. It takes some effort, but when you compare that to Haskell, Haskell is way worse, at least in my opinion. There's just so many things in Haskell that I just don't get. For example, they try to get rid of parentheses and doing in a certain way. They try to get rid of braces in a certain way. They try to add things together and combine different strings and stuff like that in a certain way. And if you can't get your head around that, you're going to have a hard time adding things to Xmonad. So my biggest problem with Xmonad has been Haskell. And while I've done a lot better job this time than I did in my previous two experiences, there are still many things in Haskell that I just don't understand. And that really becomes the crux of it. Like I talked about in my DWM part where I was giving my opinions, I don't feel comfortable with Xmonad if something goes wrong. If something breaks in Xmonad, I have no clue if I would be able to fix it. I may be able to fix it. I might get lucky it, but my level of comfort with Xmonad is way less than it is with C. And some of that is just time spent doing stuff with it. I've spent way more time with DWM and the same language, so I understand it more. I think if I went through and spent a lot of time like a year like I did with DWM with Xmonad and Haskell, I'd probably have that same level of comfort, but I haven't yet. And I'm still feeling that level of discomfort every time something goes a little wrong because I don't know how to fix the stuff. And like I said, maybe I will over time overcome that. We'll see. But there are also a couple things about Xmonad outside of Haskell that really just drive me crazy. So for example, and I don't know if I'm actually going to get this to be something that I can reproduce. When I go through and I have a whole bunch of windows open, if I have like this one here focused and then I spawn a new window, you notice where it spawned the new window is spawned above the focused window, not in the master position, not at the end of the stack, above the focus window. So if I've had this one here at the bottom focus, which you can tell by the red border and I spawn another window, is the new window is spawned just above that one. That is the weirdest thing I've ever seen and it has driven me bad for the last three weeks. It took me for ages to realize that this is where it's going to spawn. I just thought it was doing it randomly, but it's not. Whatever window you have focused, it's always going to go through and spawn it above that window in the stack. That's not the way master stack is supposed to work. Okay, so that's just not the way it's supposed to work. It's really weird and the fact that it works like that is going to drive people crazy. It drove me crazy and when you're using a dynamic Tyler, one of the things that you know for sure is that you're always going to know where the window is going to be spawned based on the layout you're using. And with Xmonad that's not always the case because things spawn in really weird ways. I don't know what's that window doing there. I don't know why it spawned there. That doesn't make sense to me. Okay, and I actually surprised that I got that to explain that because it took me a long time to figure out because I had windows. I can never have that many windows open, but usually I'm here and every once in a while I have to open up a fourth terminal. Just every once in a while. And you know I'd expect the window to in Xmonad. I'd expect it to spawn here and this one here. That's where I would expect it to spawn. I would not expect it to spawn here. And it would drive me nuts, right? So that's one problem. Another problem is that I use scratch pads a lot. Like many, many times an hour a lot because I have my mail in it. I have Pulse Mixer in it. I have my NCMPCPP or whatever the hell it's called in it. I have just all of this stuff in scratch pads and I use them all the time. And here's another thing. I don't know if I'm going to be able to get it to do it or not. But sometimes, so I have a scratch pad up on the screen right now. What I'm supposed to be able to do is hit the key binding and that's supposed to go away. In this case it did. And that's great. You know, that's the way it's supposed to work. But sometimes when I have a scratch pad open and I go through and close it like there it did, it opens up another instance of the scratch pad. So right now I have two instances of NCMPCPP or whatever the hell it's called open at the same time. Instead of closing it like it should, it leaves it open. And I don't understand why. I don't know why. It drives me absolutely bonkers because that's not how it's supposed to work. And that's the thing I'm talking about. If this was DWM, I could go in and probably figure out what's going on and maybe fix it because I know a little bit of C. I'm not a C programmer, but I know a little bit of C. I understand how DWM works, the order of the code in the, you know, the files and whatever. I understand where everything is. You know, I can go through and make some changes or whatever and I can troubleshoot things. In Haskell or an X-Monad using Haskell, I don't have that comfort. So I have no clue how to fix this and I don't understand why it's doing this. That's my problem with X-Monad. These little gripey things that I don't understand. Maybe this is the way it's supposed to work. Maybe there's something about this music player in a scratch pad that just doesn't jive with the way X-Monad does scratch pads. That's 100% possible. But again, I wouldn't understand why it would be the case because then it's just a terminal with a programmer in it. Same thing if I do, like if I open up a scratch pad here, trying to remember my key bindings. Like this is just a terminal. If I open up B-PyTOP again here and then I close the terminal, oops, it actually didn't do it. It did the exact same thing. It just opened up another terminal. It should have closed that and let it run in the background. That's the way scratch pads are supposed to work. It's really weird. Maybe it has something to do with the fact that this is a running program and it thinks you want it to stay open all the time. I don't know. It's really weird. This has been my experience with X-Monad. There's, this time, before the other two times, I just couldn't get to work, right? There was system level breakages that were my fault. That I couldn't get to my head around in order to actually use X-Monad functionally. I've been using this now for three weeks and it's functional. But there's now these just little pain points that have kept me from enjoying the experience. Another one is that for whatever reason, when Tyler and I do the podcast and I have at OBS grabbing the window from Discord, it won't grab it. And I don't know why. And this is an X-Monad problem for sure because only we're just doing this in X-Monad. Works in awesome. It works in DWM. It works in i3. It works in Q-Tile. It worked in Herbstluff. It does not work in X-Monad. And I don't know why. That's the theme of my X-Monad review is that I don't know why things happen and I can't fix them. I got really passionate about it because the thing is, I want to like X-Monad. The KeyCord functionality, and when I'm talking about KeyCords, let me show you this. The KeyCord functionality basically allows, if you've used Emacs or whatever, you'll know what I'm talking about KeyCords. But you press one key combination. So in this case, Ctrl-M. And then I do another one and it brings up my mail scratch pad. And that ability to go through and create a whole bunch of extra key bindings with KeyCords is awesome. Q-Tile also has this now. And I love it. It's not something that you can easily do in DWM. You have to use something like SXHKD in order to do it. And I love that functionality. I also have come to enjoy kind of the challenge of learning Haskell and learning about X-Monad. So that is something that I really have enjoyed in my time with X-Monad. It's just after like three or four weeks of using DWM, I started to feel more and more comfortable with it. It felt after three or four weeks that I was finally learning my way. I've been using X-Monad now for three or four weeks. And I don't feel that yet. I said earlier that it's possible that if I use X-Monad and Haskell for a year or whatever, I may feel that discomfort go away. But it doesn't feel like that. I don't feel like I've made the same level of progress with X-Monad and Haskell that I did in the same amount of time with DWM. And that's a little worrying because, you know, I want to feel at least a little bit of progress. I don't want to constantly feel that if something breaks or something's doing something weird, that I can at least explain it, you know, and that's where I am right now with X-Monad. So I said at the beginning of the video that I was going to give my recommendations. If you want a system that just works, use DWM for sure. Chances are you'll have a better time figuring out DWM than you'll ever have with X-Monad. If you want a challenge, try X-Monad because X-Monad is harder than DWM is by far. I don't think it's even arguable. And that's for multiple reasons. It's the way it's set up. It's the Haskell language. It's the fact that you have to set up your own bar and all that stuff. I mean, it's just it's definitely more difficult. Now, is it impossible to learn? No. Despite the fact that I still don't know how I'm doing, I feel a little bit more like I know some Haskell. I could go through and add some features or whatever if I wanted to. So I have that level of knowledge. And if I can do that, pretty much anybody can do it. So I would say if I had to give a recommendation, DWM is my favorite. And I've kind of talked about the reasons why. Between the two, even taking out the fact that DWM was my favorite to begin with, I still like DWM better because of my level of comfort. And I think my recommendation would be DWM2 for other people as well because it just feels like it's easier to get your head around. It also doesn't do weird shit. You know what I mean? Like, spawn windows wherever the hell it decides it wants to spawn them. So this video was really long. I'm not sure how long it'll be after I'm done editing it. Hopefully long a lot shorter than what it took to record it. I just had my COVID shot. So that's why I'm all flush in the face. It's not been a good couple of days. But anyways, thank you for watching. If you made it through the entire video, you're a champion. Make sure you hit the like button. If you haven't subscribed to the channel, make sure you subscribe. We just passed 3,000 subscribers. Thanks everybody for subscribing. I love every one of you. Just thank you so much. You can follow me on Twitter at TheLinuxCast. You can support me on Patreon at patreon.com slash linuxcast. Before I go, I'd like to take a moment to thank our current patrons, Devon, Marcus, Megalyn, Donnie, Sven, East Coast Web, Merrick, Camp and Mitchell. Thanks everybody for watching. I'll see you next time.