 I spent the last couple of days really working my DWM config DWM is sucklaces dynamic window manager and I love DWM it's it's got some quirks to it because you have to put in a lot of work to make it kind of usable because you have to patch the system to add what I consider basic functionality to DWM because there's some things missing that I really think should just be there by default in every window manager. One of the things that bothers me with DWM out of the box is the fact that it doesn't use key cords so key cords are the ability to do two or more different key combinations to to launch something. So instead of a traditional key binding where you do something like super shift enter all at the same time to do an action a key cord is something like what emacs does where you do control C and then you release that and do control X for example to close emacs or control C and then release it and then control S to save you know things like that. That's a key cord and the reason key cords are interesting is because then you really have unlimited possibilities for your key bindings because you'll never run out you can always invent a key cord where if you're using traditional key bindings that especially have to use a mod key which is usually either super or alt you're going to run out of possible key bindings there's only so many keys on the keyboard right. So in the last week I've really spent a lot of time redoing all of my tiling window manager configs for Xmonad Qtile the awesome window manager in the last couple of days I've spent all of my time really on DWM here let me show you my DWM config so this of course is emacs and this is dear Ed the file manager here inside emacs and this is the source code for what will eventually be DTOS-DWM that package is already packaged up it's in the DTOS core repo so you could actually install the package DTOS-DWM right now now this still is a very much a work in progress or still functionality I want to add to this thing I mainly already added the package to the repo just to have the package build done but I know the window manager itself still it's got some quirks to it you can see I've patched it quite a bit I've added these patches here so I've added the alpha patch for transparency attached bottom auto start auto start allows you to put an auto start shell file in your home directory in a hidden folder you need to create dot DWM a hidden folder in your home directory put a auto start file in that auto start dot SH and then you can get programs that auto start when you log into DWM for example you want your session manager and you know your network manager applets and things like you know whatever it happens to be that you want to launch on auto start get the cycles layouts patch that just allows me to cycle through the various layouts that I've added and one of the extra layouts I added was grid mode and that's the key cord patch there that's very important I'm going to talk about in just a second restarts that allows me to have a key binding that restarts DWM because by default DWM doesn't actually allow you to restart it like do a hot restart like you edit the config and recompile what you would have to do without a patch like this is you would actually have to kill DWM and then log back into it and then that makes no sense right that's just really basic functionality you expect to have in a window manager so I definitely needed that patch the rotate stack patch is one that I have to have I don't understand why this isn't part of mainline DWM rotate stack means now that I've got some windows open with a super shift J or super shift K is what I've minded these two I can actually rotate the window that has focused through the stack super shift J goes one direction super shift K will go the opposite direction and to me that just makes a lot of sense I don't know what that that's functionality that literally is in every tiling window manager that I know of out of the box except DWM and then status padding this allows me to have some padding in the panel and the status bar here because without that the height of the panel and everything is just determined by the size of the font but you know I want some extra padding because without that extra padding this bar here is really tiny and kind of scrunched up together and then of course I added useless gaps which allows us to have gaps between our windows which I know is important for a lot of people for aesthetics you know it looks nice now functionality wise does it really serve a purpose probably not I think gaps probably are just wasted space but for some people I don't know I guess it can make the windows the fact that they're separated a little bit making them stand apart a little bit but to be honest for me personally gaps I could take them or leave them so let's get into the actual config file which of course is the config.def.h so let me open this and let's zoom in a bit and the first thing I notice again this is very much a work in progress just looking at this this URL is no longer correct because now instead of dwt1 dwm-distro tube this is going to be in a new repository of mine at getlab.com slash dtos and the source code is going to be in slash etsy and then dtos-dwm for those of you familiar with dwm there's nothing too crazy about most of the settings at the top this is just standard stuff where we set the border pixel width that's the border of your windows so this red border for around the window that has focus is two pixels wide you could make that bigger or smaller whatever you feel like and of course the gaps were six pixels so pretty small gaps I might actually increase that a little bit I know people really like their gaps and by default I kind of kept the gaps kind of small and some other settings here a show bar obviously means do you want a panel or not if you set that to zero the bar will not show but you can always toggle the bar to show and hide here in dwm I think the default key binding is super b which I use super b to launch the browser in all of my window managers so I wanted for consistency to keep super b to actually launch cute browser which is the default browser in dtos so I changed super b to toggle the bar to super shift b now toggles the bar show hide super shift b super shift b and then where do you want the bar most people using tiling window managers have the bar at this top so it's one for top zero if you want the bar at the bottom then we have horizontal pad bar vert pad bar so this is the padding in the bar so horizontal padding obviously the amount of space between the items in the panel vert padding means the amount of padding above and below the items which is important if I move to a different workspace you can see you got eight pixels of vert padding so really makes the bar a little taller to where it's a little easier for me anyway to read some of this stuff because without the padding patch the status padding patch this bar again is really tiny as far as the height because it doesn't add any padding at all to the fonts and everything just kind of looks bunched up together so I'm glad I added that patch some of the other stuff here of course I've got the fonts I included three fonts by default it's going to look for the Ubuntu font all these fonts by the way are installed out of the box anyway with dtos when you run through the installation it installs ubuntu hack and joy pixels so at first it's going to look for the ubuntu font for some reason the ubuntu font can't render or it's not on your system it'll look for the hack font and then if that's not there it'll look for joy pixels now joy pixels is important because it actually gives me these emojis here in the dwm blocks status over here so the way this works is ubuntu and hack can't handle some of these fonts and if it can't handle that you know it'll go to joy pixels which pretty much can handle a lot of those weird glyphs and I set some values for these colors to be used later of course these colors are the background and the foreground color as well as this highlight color here in the status bar so essentially we're setting some variables to be used right here you know we're using a lot of those colors down here again for the bar and then of course we set up our workspaces or they're called tags here in dwm they're also called tags an awesome window manager because awesome is a fork of dwm and I use the same nine workspaces or nine tags and all of the window managers I name them all the same again for consistency that way when you log in the xmonad and dtos or dwm and dtos or qtile whatever it happens to be you get the same workspaces with the same locations so dev is always super one you know www is always super two and super three would be sis yada yada yada then we get some window rules I haven't played with this at all this is just part of the default source code for dwm but it just gives you some examples of some window rules you can set I may play with that at a later date but right now what I was really focusing on was getting dwm patched and then getting the key binding straight and when I get down to the key bindings you're going to notice my key bindings look a lot different than what most people's dwm key bindings look like and that is because I patched it for that keychord patch so you'll notice I've got an extra set of braces in my key bindings as well as a numeral at the very beginning before actually doing the key binding and then the command it runs so the way this works is if you have one this is not a keychord this is just a standard key binding so for standard key bindings you have to have one comma and then your standard key binding wrapped in two pairs of braces and then after that the command it runs in this case spawn and then the command for dwm which is a variable d menu cmd which I have defined up here now the way the keychords work is instead of a one you add two and then you have two pairs of key bindings essentially wrapped again in double pairs of braces so my dm scripts I kept all of these bindings the same way that they're in xmonad and then also the same way I have them in qtel they all start with super p which is usually the default key binding in both dwm and xmonad for a prompt your d menu prompt well I do my dm scripts super p and then another key so the way these keychords work is this first pair is the first chord and then the second pair is the next chord and you see I have a zero because by default it expects some kind of mod key so you know mod key piece and then you release and then maybe mod key e well I didn't want to have to do a mod key the second time I just wanted a single character so I just added zero there for no key so if I do this command super p e this is my d menu comp edit script which is a config file editing script where I can search through various important config files on the system and they'll launch here inside emax if I selected one and then of course you can see super p i is the screenshot utility i for image super p k to kill a process show some running processes and I could pick one to kill super p l it's the logout screen I also I believe have that binded to super shift q I scrolled down the key bindings that I actually rebind that I know it's a default now I didn't so super shift q is quitting dwm but I that just quits out without any kind of prompt and just for safety reasons I think I'm going to redo all of the quit commands for my window managers to actually be this d menu logout screen so you actually have to do logout and then it still asks you yes or no and you have to scroll down to yes that way you don't accidentally hit a key binding and quit out of your window manager which could cause you to lose work I've got the dm scripts key cords and then of course I've got all the key cords for doom emacs these are the standard key cords I was already using in both x monad and futile so these are super e followed by a key so super e for emacs so super e and then d for dear ed the file manager opens dear ed in a new window or or super e b for buffer is the i buffers display your listing of all the buffers that are currently open in emacs so I was really happy to get this key core thing working because this kind of is a deal breaker for a lot of what I do with dtos because these window managers x monad and qtel have key cords out of the box you don't have to do anything they just work that's really nice dwm I had to patch it but the patch wasn't that hard and some of the window managers I'm looking at in the future many of them don't have key cords and I don't know how I'm going to get along with it and the reason this is important one of the most important features for window managers again is it just allows you to use so many more key bindings that if you were bounded to using modkey the super key plus some other combination of keys you're going to run out of key bindings very quickly especially if you have as many key bindings as me the other thing is you know I really want to use super for every key binding in my tiling window managers I want to do super and then something else and key cords allow me to do combinations with these super keys right and the reason it's important for me is I can't really use a lot of control key bindings or alt key bindings because control key bindings and alt key bindings conflict with your existing programs many of your existing programs already have built-in key bindings especially that involve the alt key think about your web browser open up firefox or chrome there's a lot of stuff that if you get alt and some key it'll actually do something in your web browser obviously I can't then rebind that to do something in my window manager because again you're going to mess up some of the key bindings in your programs control I can't use control at all for key bindings because control is really kind of the mod key for emacs so many bindings and emacs involve the control key so I'm not going to bind anything to control it just doesn't make sense it just would cause me so many problems that's why this keychord patch was such a big deal I'm so glad I found this for dwm scrolling down some of the other stuff I have of course super b again launches cute browser I had super alt s runs the surf command in a tabbed layout let me see if this actually works I don't know I haven't launched surf in a while so there is surf and it's actually let me get that out of the tolling layout make that floating this is surf and again I launched it inside tabbed tabbed is another suckless program I believe I believe if I do alt control at the same time it'll show me the tabs something there's only one tab if I release it you know the tabs go away I kind of patched tab actually do that for me so that is a really neat I was kind of designing this I wanted this to be a little different than DTOS Xmonet and DTOS Qtile because I know a lot of people that want to experiment with dwm they want to go full suckless so even though alacrity is the default terminal and all the other window managers I'm going to package up I'm going to have a build of st just for this same thing d menu you're probably going to want to use d menu not rophy right you want all the suckless tools I want to make sure that you can use the surf browser if you want to and that you can use tabbed and that tabbed is already kind of built-in to surf so you can have tabs in your browser kind of important and tabs in st because st doesn't support tabs but you can run st inside of tabs so I really am kind of thinking of really making this a full suckless experience if you want it of course many people are not going to want it you know in my personal machines I'm probably going to swap out st for alacrity because I prefer that obviously surf the surf browser has problems right I'm not the surf browser is not a great experience I'd probably swap out that for something better that's why I have the cute browser binding here as well also no because I just packaged this up for dtos I have not packaged up tabbed or surf or any of this stuff for dtos so do know if you go and grab this config right now many of these bindings are not going to work because these programs are not going to be installed out of the box now one thing I was experimenting with was a system tray there are sys tray patches for dwm they're all buggy as hell the one that everybody uses is a massive diff meaning there's a ton of code source code that it has to go change and because I've already patched dwm heavily that sys tray patch I can't get it to work it doesn't matter the order I patch things in I can go in and manually read the code and find the lines but when I change everything and it even compiles correctly dwm just doesn't work it doesn't function no key bindings work it's like it's frozen and I've done it twice now in different orders of the patching so I can't get the sys tray patch to really work for me but I was wondering do I really need a sys tray especially for suckless people do suckless people actually use a sys tray so what I was thinking is I could I already use Trayer with XmoteNet so it's already on dtos could I have a keybinding that just shows Trayer on the screen and that's kind of what I was thinking I bounded this to super semi colon just because it was a keybinding I wasn't using so if I do super semi colon you will see Trayer appears here in the top center of the screen so it's covering the bar here but it shows the current items in my sys tray so that that's what I'm gonna do and I bounded to super shift semi colon killing Trayer you can see the command shell command kill all Trayer so super semi colon gets me my sys tray when I need it and super shift semi colon allows me to make it go away because you don't want it sitting there because it's just a little floating window it's it's not actually part of the bar so it could get in the way of your tiling so it's just one of those things bring it up when you need it most people rarely ever even need to go into a system tray that's why I really didn't think the sys tray patch was important enough for me to sit there and fight with it and there's some other stuff here increase the number of masters in the master stack decrease the number of masters so let me open up some windows obviously the master section should only have one window but if I do super i I increase the number super i again now there's three in the master or if I do super d we go back to just two in the master and super d one more time now the master is just one window which is really what it should be and I used a super comma and super period to switch focus between monitors for us multi monitor users these are the exact same key bindings i'm using an x-monad and in q-tile so if I go to this screen here this triple monitor view here inside obs i'm going to move the cursor over here to monitor to the center monitor where I've got emacs you see my cursor going crazy i'm moving it around on purpose so you can see that watch what happens when I do super comma you guys probably noticed and I'm now on monitor one you saw the top bar of monitor one change because it has focus now if I actually had a window open you'd actually see the red is the focus window well if I do super period I'm no longer focused on monitor one I'm back on monitor two you see the top bar turned red and in and if I do super period again I'm over here on my third monitor where I have obs opens super comma moves back to the second monitor yada yada yada so that's again really important functionality especially for us multi monitor users that way we can move between all of our monitors without actually having to grab a mouse so that's a little bit of what I've been doing here inside dwm here in the last couple of days and I still got a lot of work the only reason I really shared this video is because I've spent so much time really making these packages and playing with these configs you guys wouldn't get much content if I actually didn't make some of these videos as I'm going through this process of redoing everything otherwise I probably wouldn't have made a video in the last week week and a half and I know some of you guys are probably gonna wonder where I disappeared to if I go more than two three days without making a video you guys sometimes get worried for those of you that are actually using the DTOS core repository you can now install DTOS-Xmonad to get my Xmonad config that's always been there now you can also install DTOS-DWM DTOS-QTAL and DTOS-AwesomeWindowManager I still have work to do on those AwesomeWindowManager has actually given me some issues with the whole keychord thing because out of the box for whatever reason Awesome doesn't support keychords which is kind of strange because Awesome is so awesome I mean other than that one thing I can't find an easy way to add keychords to this thing and I really need that so some of you LuaBros those of you that are experts either with Awesome or experts with Lua maybe you guys can let me know how I can get keychords inside the AwesomeWindowManager now before I go I need to think of a few special people I need to thank the producers of this episode Dustin Gabe James Matt Maxim Michael Mitchell Paul West Why ya ball told me Alan Harmer Dragon Chuck Commander Ingrid Ayoka Dylan Marsh from Erion Alexander Peace Arch and Fedora Polytech Realiteats for Les Red Prophet Stephen Tools Devler and Willie these guys they're my highest tiered patrons over on Patreon without these guys this quick look at my build of DWM would not have been possible the show is also brought to you by each and every one of these ladies and gentlemen as well all these names you're seeing on the screen right now these are all my supporters over on Patreon because I don't have any corporate sponsors it's just me and you guys the community if you like my work want more videos on Linux free and open source software tiling window managers subscribe to distro tube over on Patreon all right guys peace this thing is supposed to be suck less that's a misnomer if I ever heard one