 Over the last few weeks, I've taken a look at quite a few very rare or fairly new tiling window managers and I figure I should try to keep that streak going. So today we're going to be taking a look at a tiling window manager called DK. Now DK is a fascinating window manager. It is a dynamic tiling window manager just to begin with. And it is similar to BSPWM and HerpzloffWM in that it is configured with a shell script. So you can kind of get an idea of what this is going to be like before you even see it. Unlike something like DWM, however, it doesn't come with a bar or anything like that. So it's kind of like Xmonad or BSPWM in that regard as well. So once you start this thing up, you're just going to get a black screen and it's kind of up to you to configure it the way you want. Similar to how BSPWM and HerpzloffWM and several other window managers are developed, you get a program that allows you to manipulate the window managers. So with BSPWM, you get BSPC. With Herpzloff, you have an option with something like I3 even you have something like I3 message. With DK, you have something called DK command. And one of the greatest things that I've discovered about this with my brief time using it is that it's a little bit more complex that DK command is a little bit more capable, I should say, than a lot of the other programs like this. It allows you to do quite a bit more with its setup. But also it allows you to do things in a little bit different way. So let me go ahead and show you how to install DK. And then we'll run through some of the configuration stuff. So let's go ahead and jump into a virtual machine here. So this is the DK source code. It's hosted on Bitbucket. I will leave a link to it in the video description because it's actually kind of hard to find because when you search Google for DK, you get a whole bunch of other stuff. Unless you specifically search for DK Windo Manager on Bitbucket, it's a little confusing. But like I said, I'll leave the link in the video description. Now when you want to install this, there are a couple of ways you can do so. You can make it yourself, which is the way I'm going to do. Or if you're running Arch, you can install it via the AUR. Now it does require several dependencies and they list those dependencies here. First of them I found were already installed on my system, but I ran the install command. Anyway, it also requires a hotkey demon of sometimes. So if you are going to have any key bindings whatsoever, you're going to need SXHKD or something similar. So let's go ahead and install this thing. So the first thing we're going to want to do is clone the repo. So you'll need Git in order to do this. We'll copy this URL here and then go ahead and just paste it. It already has to get cloned there. It'll clone it into a directory and we'll CD into DK. And then before we make and make install, we're going to install these dependencies. Like I said, I'm pretty sure most of them were already installed on my system, but it's not going to hurt anything to install them again. Just like so. And then enter your password and hit yes. See, most of those were already installed. It looked like all of them actually, but still not going to hurt to reinstall them. If you're on Ubuntu, it gives you all of the things that you'll need to install to do this as well, which is nice. A lot of the window managers just kind of don't give you that information, especially the ones that are considering themselves more suckless. I'm looking at UDWM, just going to put that out there. All right, anyway, so once you're there and we're in the directory for DK, I'm going to do a make. It's going to do its thing and then I'm going to do sudo make install. Now one of the cool things about this is that a lot of times when you build a window manager for yourself, it requires you to do pretty much everything for yourself. So it means creating an accession file and all that stuff. This does that completely for you. So we're actually ready to log out of awesome window manager here and log in to DK, but there's actually a couple of things we need to do first. And that is we need to copy the configuration file to the appropriate place. And I want to make sure that I have the terminal set so that I can actually launch a terminal because it uses st by default. So if you don't have st installed, it won't let you want your terminal when you boot into it. So let's go ahead and show you where you can find the default configuration files. So what we need to do is copy this line here and we'll see your CD up to this. And then we're going to go ahead and copy this line here. And this is going to copy the configuration file to that folder we just created. And really, I don't have to copy this if I could type it myself, but it's just easier to copy and paste because lazy man here. And then that's all it's doing. So that second one was for the SXHKD RC file, which is the file that has all of your key bindings in it, right? So now I'm going to go into .config, DK, and we can actually close this now. And if I do an LS here, we'll see those two files that we just created. Now you'll notice how one of them is colored. Then that's because this is a shelf script. So you'll need to make sure that it is executable. So if it's not highlighted in some way, it probably isn't. So just do chmod plus x and then the file name. It should be executable right off the bat, though. But if you end up having some problems, that might be one of the issues. So let's go ahead and go into the SXHKD RC file and change the terminal to Alacrity because that's one that I have installed. And one thing you'll notice here is that they use the Alt key for the super key. So I don't really care for that all that much. I always use the super key. So what I'm going to actually do is change all those, all the Alts to super. So I'm going to do colon percent S slash Alt slash super slash G. And that changes everything that you said Alt to super real quick, real easy. I love them. It's amazing. So we're right in quick out of that. And then I believe we're ready to go ahead and see what DK looks like for the first time. So I'm going to quit out of awesome here, which I believe is super shift Q. Yeah, okay. Now I'm going to change the session to DK and enter password. And this is what you get when you open up DK for the first time. And if we hit super shift enter here, in order to get to it. If you didn't make that change from Alt, yours would be Alt shift enter. So just know that when I say super firm, if you've left it as the default, you're going to have to use Alt instead of super. So I'm just doing that because it's less confusing for me, but probably more confusing for you now that I think about it. It doesn't matter. Anyway, so this is, as we can see, if we open up Neofetch here, it says, this is the DK window manager. So out of the box, this is the layout that you're going to get. Now, one of the things you'll notice is that this is not a master stack layout. And it's actually a really weird layout because most tiling window managers vary between just a couple of different tiling layouts. So you have the master stack layout where the master's on this side and then you have your clients just kind of piling up along the side on the right hand side or something like BSPWM where you have the Fibonacci layout or whatever it is, reverse Fibonacci, whatever they call it. Those are usually the two layouts that they kind of rely on. This one here, a little weird. It has the grid along the side and it'll just keep going like so. And it allows you to have more windows on the or more clients on the screen, which is cool. I don't know why you'd need this many windows, but let's just say you do. It does allow you to do that. So let's see. By default, I believe SupershiftQ closes DK, it quits DK. Let's go ahead and open up a terminal here. Go into cd.config, DK, vim into the SXHKDRC file, SXHKDRC file, and then we can see what the appropriate key bindings are. So SupershiftR reloads DK, SuperQ quits a file. So that's actually what I would have it do anyways. So one of the nice things about this is they've done a really good job of commenting everything. So we'll look at the configuration file here in just a second, but these are the standard key bindings and they've done a good job of telling you what each key binding does. It just doesn't put the key binding in and just assume that you know what it is. And that's really nice. You know, it's not something that you should take a grip for granted because some tiling window managers that aren't so well-developed don't do a good job of doing this commenting stuff. And this idea goes through the entire window manager. You have these comments through pretty much the entire thing, including the configuration file, which we'll take a look at right now. Let's go ahead and take a look at that now. So we'll vim into the DKRC file, and this is what the DKRC file looks like. This is where you do all of your configuration for the window manager. And it also is where you would want to add your AutoStart stuff. So if you wanted to use Polybar or something like that, which I've actually done in another VM, and I'll show you that here in a minute, you can launch all that stuff right from here because it's just a shell script. So one of the things I did find is if you want to do any of your AutoStart stuff, you want to do it after SXHKD. I don't know why, but I've tried to do some AutoStart stuff before that and it just, you know, it didn't load the configuration file for some reason. Anyways, moving on into the configuration file. So one of the cool things about this is that you can have as many workspaces as you want. Now, if you've watched the channel for any amount of time, you'll know that I love workspaces. And the fact that this allows you to have as many workspaces as you want, that's amazing. It's so good. If you change that number to 20, 30, whatever, I don't know if there's actually an upper limit. I think I only went to 20 and it worked fine. You would have to come up with a key binding to change to all those workspaces. So that is something that you would have to do on your own in the SXHKD file. So just know that going in. But that it allows you to have as many workspaces as you want. It's amazing. So good. Anyways, this line right here that I'm on is important because what this line here does is it allows you to have control over how your window manager looks. So it tells you what layout you're going to be on. And I'll show you some of the layouts here in a minute. It allows you to tell how many masters it has, how many stacks it's going to have before it transitions. So we are at three in the stack. Once we press the button one more time, we'll see it goes over to another stack. So this part right here is how you change that. This allows you to change the gap. So if we change this to 20, okay, SuperShift R is the key binding to restarting. So I changed that to 20, now we have gaps. So that is cool, right? The M split and S split are numbers that tell you how the windows split when you open up new clients. So right now they're set to 50-50. If you change those to different percentages, then your master's split will be different when you spawn a new window. So another thing that's really cool about this is that you can set different layouts per different workspaces. So this one right here is for all workspaces that don't have a dedicated rule. This one right here is for workspace 10 specifically. Workspace 10, if we switch to workspace 10, we can see that this actually has a different layout. And that's the grid layout. Now if we switch back to one here, one of the things about it is that it will actually allow you to change the padding for your entire workspace or for the entire window manager if you want. So you can change it so it looks something crazy like that if you wanted to. I don't know, it's like having kind of gigantic gaps along the outside, but you could do that. Padding in a window manager is not something that is very common. So that's really kind of cool. The example there that they've used that shows you that you can do those things, you can also set workspace names here and you can do that for every workspace that you create. And you can assign where each workspace resides. So if you have multiple monitors, you can have that set so that workspace one through five appears on monitor one, workspace six through 10 or whatever appears on monitor two. Again, not something you should take for granted because that's not something you can do in every single window manager, at least not easily, right? A lot of them have ways of doing it, but they're kind of finicky. Now the more user-friendly ones have ways of doing it that are easy just kind of like this one is. You set the monitor names, you tell them where do you want the workspaces to be which is cool. Now as you can see, each of these entries here are well commented, which is like I said, that's something that is very important and it tells you exactly what that line does. Now the thing is is that everything here uses the DKCMD command. So if we go to another workspace here, open up a terminal and do man DKCMD, like so, you have a very well documented program here that will tell you basically everything you can do and how to do it with this command. So it shows you how to create rules. It shows you how to modify those rules for sizes of the windows, positions of the windows, things like that. It shows you explanations of what the different layouts are. So if you wanna know what the layouts are without changing them first, you can do that because you're gonna need to know what the names of the layouts are in order to change them in the configuration file. So editors know here without the video because well, it's easier just to do it this way. One of the things that I don't talk about in the video that I really should have was the power of the DKCMD command. I kind of allude to it there in the beginning and throughout the rest of the video but I wanted to take a moment just to talk about how DKCMD actually differs from some of the other similar programs you would get with BSPWM and Herp's Love WM and so on. One of the things you'll probably notice as I scroll through the DKRC file is that the DKCMD command allows you to put multiple arguments after it. So with the command that I'm talking about with the layouts and such, you can define the layout, you can define whether or not it has gaps, what those gaps are, whether or not it has padding, all that stuff in one single line if you want to without having to call DKCMD again. Now, I'm not sure if this is possible with the other programs that are similar to this but I know for BSPWM, BSPC just takes one command at a time. Now, I'm not sure if in the command line usage of BSPC you can give it multiple arguments or not. I'm assuming you probably can but it's not usually how it's done inside of the command line or inside of the configuration file. Usually it's just one line at a time, BSPC rule this or whatever and then you move on to the next one, BSPC rule, whatever with DKCMD, it allows you to put all those things on one line if you want to. Now, I know I3 allows you to combine things into one line with REGX and stuff like that. So if you wanna combine things like rules into one line, you can. I'm assuming that there are other examples of other window managers doing it like this. So it's probably not as unique as I expected to be but it's something that I wanted to point out that I didn't point out when I first recorded the video. So now moving back into the video with actual video. So if we actually search for layouts here, we'll see, I believe it's here. Yeah, these are the layouts that are available. So tile, R tile, mono, grid, spiral, dwindles, T stack and none. Those are the options you have for layouts. Now, one of the ones that you'll notice is Mish thing is master stack and they call this tile, which is the default one master stack. They call this master stack. That is not master stack because master stack doesn't have that extra stack along the side. It just has one master, one stack along the side. Why they call that master stack? I don't know. Maybe they're trying something new. I don't mind this. I think it's cool, but that's not what most people are going to expect when they see master stack listed as an option. So that's just something to keep in mind. If you're attached to the master stack layout, this does not actually have the traditional one. It does have other layouts. So I'll actually show you here now. Let's go ahead and go back up here and change tile to our tile. And I'll save this super shift R to restart and our tile looks like this. So the master is now on the right and the stack is on the left. That is our tile. So the next one is mono. So this one is probably something that you can probably guess what this looks like. So if we change this to mono, super shift R, now if we open up terminals, they're all what are on top of each other. So this is similar to monocle mode in Xmonad DWM. Pretty much every window manager has a monocle mode of some kind. This is what that looks like here on DK. So if we close these, I don't want to go too fast because I want to close the configuration file. So the next one is grid, which we've already seen, which looks like this. And the next one is spiral, which looks like this. So that's the Fibonacci one that you'd probably be experiencing on BSPWM. So we'll close those. And I believe dwindle is just going to be the opposite. So dwindle, like so, yeah, that's just the opposite. Interestingly, after that position, it comes up with a floating one, which is weird. Never seen that before. Usually they just keep going and going and going like the energized bunny. But that is the dwindle one. What's the other ones? T-stack. So T-stack is a vertical master stack, I believe. So if we change this to T-stack, like so, and then super shift R to restart and then open up, yeah, this is the vertical master stack layout. So it looks like this. If you're more used to using your windows like that, that's the layout you'd probably use. So those are the layouts. Now in terms of customization, there's not a lot here. It's similar to what you'd expect in terms of customization for like I3. Now, instead of having like title bars and stuff like that, which it doesn't have, you can change it so that the windows have borders. It has smart borders so that it'll only show the borders when you have more than two windows open. So if we open up another window here, you can see the, they now have borders. If I close the window, no borders. You can turn that off as well. You can have it so that the borders have different, so the windows on the outside have different borders, or you can change it so that all the borders are the same. That's pretty much all you get in terms of customization. The rest of the customization would come when you put in a bar of some kind, which I can actually show you what a bar would look like in DK right now. If I just switch into the other VM here, this is what Polybar looks like in DK. Now, it has smart gaps as well, so that if you want to have it so that gaps don't apply on work spaces where there's only one client, you can turn those on. And one of the things you'll notice here as we go through is that this is very full featured. Like this is a fairly new window manager as far as I'm aware. Like I'd never heard of it before a couple months ago. And the features that you'd expect of a full blown, well-developed window manager are all here. One of the things that's not here, at least as far as I can tell, is scratch pads. I can have not found, oh, you wanna know what? Who the hell knew I didn't know how to read? Scratch pads are in fact here, so that blew me away a little bit. I'm not sure how they work, but oh, they just used the rule. You just create a rule and then, okay, and give it a class of scratch pad. That'd be easy enough. Okay, so it does have scratch pads. So it has scratch pads, it has the ability to set as many work spaces as you want. This window manager continues to surprise me with how full featured it actually is, which is really cool. And one of the things about it is that the man pages are just filled with information. So a lot of window managers that do come full featured oftentimes don't have the greatest documentation. So like BSPWM has all the features you ever want, but the documentation leaves something to be desired. And the only real documentation it does have is the man page. And that's kind of the same here, like all the documentation this has is just the man page, but the man pages are really well-developed and really well-worded. I haven't noticed a lot of technical speak, so it would be okay for pretty much anybody, which is good. It means that pretty much anybody can use this. Now, I will say that the documentation is bifurcated and that it has two different man pages. So if you want to know all the stuff about DK, you would look for the man DK thing or the man DK man page. And if you want the man page for DK CMD, that's a separate man page. BSPWM does the exact same thing. It has a man for BSPWM, it has a man for BSPC. Now, one cool thing that it does have built in is a log file. So if you make a mistake in the configuration file, it will save that error, whatever output DK gives in terms of an error into a log file, and then it will send that last line to a notification. So that means that if you've made a mistake, it'll pop up and say, hey, you made a mistake, it'll probably give you the line as well. So I never actually tried to make an error here, but it does have that ability in, which is cool because some of the more minimal window managers don't have that option. They just expect you to find out through the output of whatever terminal you're in, probably in search through the code or whatever. I know that's the way DWM does it. So in terms of functionality, this is by far one of the greatest window managers that I've tried that is fairly new. Now, in terms of comparing it to other window managers, I think it's really good. It's right up there in terms of features and functionality as any other fully featured tiling window manager, things like BSPWM, Herp Sloth, Awesome, all these window managers, this DK is right up there with them. And the question then becomes, how does it stand apart? And the answer to that is that it does a few things a little bit differently. It has a few different layouts than what you would normally see. It has some of the more common ones as well. It also differentiates itself in that it's very well documented. And I'm not just talking about the man pages, but every single line in the configuration file is well commented. So it tells you exactly what that line does. And then you can kind of see how you would go about configuring this on your own without having to worry about always going to the man page because not a lot of people like searching through man pages unless you're like really attached to man pages. So it's kind of cool that you can get right into the configuration file, know what every single line does. And because the configuration file is a shell script, I don't know why that was so hard to say, it means that you can do pretty much anything you want in this shell script inside the configuration file. So if you wanna use some if statements, if you wanted to put in all your auto start file stuff in there, you can do that. And while that's not necessarily unique to DK, it's a step up in terms of configuring the window manager compared to some other window managers that you have to either actually edit the source code or is written in some kind of very unique user friendly language like I3, you know? So there's nothing here you have to learn as long as you can figure out what the DK CMD options are, you can do whatever you pretty much want to in the configuration file. So that is DK a very, very quick look at it. I think that I'm going to install this on hardware and use it for a little while because I'm really quite impressed with how good it is because it just seems to be very full featured and it's not something that I really expected out of it because like I said, it doesn't seem to have been around for all that long. And usually when that's the case, there are features missing or they're kind of half baked. So I wanna give this a little bit more of a try on hardware and see what I can make of it. So maybe I will make another video of DK in the future. If that's something that you wanna see, make sure you hit the subscribe button and leave a comment in the comment section below. You can follow me on Twitter at Linuxcast. You can follow me on Mastedon and all my other social media networks. You can find those links in the video description. You can support me on Patreon at patreon.com slash Linuxcast, just like all these fine people. I really truly do appreciate everybody who supports me on Patreon, YouTube. I can't really find all the words that I'd like to say about how much I do truly do appreciate everybody who supports me there. It's one of those things that just kind of blows my mind that people still wanna support me, whether it's through money or just even subscribing to the channel. So thanks everybody for supporting me. Thank you for watching. I'll see you next time.