 I'm always on the lookout for new window managers to take a look at and today I'm going to be taking a look at one called worm. Now I've been seeing worm on Unix porn for a little while now and it always looks pretty interesting. So I thought I'd give it a try. There are a few things before we jump in that you should know about worm. First, it's written in a language called NIM. And if you've never heard of NIM before, don't be sad because neither have I. I have no clue what this programming language is or how to use it or what it's good for or why you would use it. No clue. I've not even done any research into it. So if you're worried that you wouldn't be able to use worm without knowing NIM, don't worry about that because I don't know NIM and it's perfectly easy to configure because it's configured similar to BSPWM. You create a shell script, it uses the worm C command to do all the interaction for the window manager itself, moving windows around, moving things between tags, different layouts, things like that. And like I said, that's similar to what you'd see with BSPWM that has BSPC that does basically the same thing. Now the one thing I will say about worm is that it's very, very minimal. So if you are looking for something that is full of features, worm probably isn't going to be for you. But if you're looking for a very minimal tiling window manager, worm is one that you might want to give a try. So what we're going to do today is install this thing, I'll show you how to configure it and we'll take a look at how it would be customized. So let's go ahead and jump in. So when you first log into worm itself after you've installed it, this is what you're going to get, a very large black screen. So what you'll want to do if you haven't installed it yet is use an AUR helper to install it. So I highly recommend taking a look at this on an arch based distro just because it is in the AUR. You can build this from source if you don't use arch, but it's just easier if you use arch. And I'm only going to show you how to install it on arch. If you are interested in installing this other places, the GitHub page will be linked in the video description below and they have a single line command that you can use to install this. It will require you to install them itself by hand. So you'll want to install them first and then use the NEM command to install this after cloning the repository, I'm sure, but if you are on arch, it's really easy to install. So you just use an AUR helper and search for worm. If you can spell dash get and you'll see that it's just one of two selections. You hit one here. You'd say yes, you'd enter your password and then it would finish installing. So once you have installed, the first thing you'll want to do is copy over an example version of their configuration file. And you need to do that by creating a directory mkdir in .config worm, like so. And then I've already done that, so I don't need to do that again. But once you've done that, you can copy the default configuration file, which is located here slash user share doc worm examples RC. And then you want to put that into the directory that you just created. You'll want to do that before you actually boot into worm for the first time. There's a couple of the things that you'll want to do as well. You'll need to install, like so, sxhkd and dmenu. You can also compile dmenu from source if you'd rather do it that way. It doesn't really matter in this case. But either way, you'll need those two things, otherwise you won't be able to manage any key bindings. In fact, you won't be able to open up anything without sxhkd running. And you will need dmenu in order to open up applications, things like Firefox, whatever. So you'll want to make sure you have both of those things. Once you've done that and installed both of those things, which I've already done, you'll want to head over to their GitHub page and find the example sxhkdrc file that they link to on their front page. So it's, if I go back here, you'll see this linked right here. Click on that, copy this. And then you'll want to CD into your .config worm folder and create an sxhkdrc file. Do that and then copy what you just pasted into that file so that you can use sxhkd out of the box. The rc file that you copied with this command here has sxhkd executed every time worm starts. So you don't have to worry about that. But it does put the sxhkdrc file in the worm directory. So just know that out of the box. Once you've done that, you'll want to edit that sxhkdrc file. So once you're into that file, you'll want to add a line that looks like this. Because by default in that sxhkdrc file that we copied, there is no way to open up a terminal. There's no terminal defined. So you'll want to make sure you put something like this. It doesn't have to be a lacquerty. It can be kitty console, go home terminal, whatever it is. You'll just want to make sure that there's a key binding in here to start a terminal. After that, I know it sounds like a lot, but once you're done there, you can log out of whatever you're in and back into worm by changing your session or changing your xndrc file however you want to do it. You'd get into worm and you'd see something like this. Like I said, blank screen, doesn't come with a bar, doesn't tell you what workspace you're on, nothing like that. The idea behind this is that you'll build up your configuration and your rice by yourself. Everything is up to you. So let's go ahead and check out the configuration file. So if we CD up a level here and CD into worm, and then we them into RC, which is the name of the configuration file, we'll go up here to the top. And what you'll see, mine is a little bit different. So I have commented out two lines here. These by default are uncommented. I don't have poly bar or anything like that installed or nitrogen is also I commented those out. If you have poly bar already installed, you'd actually get no poly bar at all because by default this file here does not exist. So you have to create that if that's something that you want. Other than that, the configuration file is fairly straightforward. So at the top, it just executes a program. So if you want to execute a program, you do exec, then it has a section here for pie wall that's all commented out automatically. And then down here you'll see, if I can move my face, you can see how it uses worm C to configure the layout of the window manager itself. So here's where things get a little bit tricky because by default there is no man for worm C. There's no worm C help. There's no worm C dash H, nothing like that. So if you want documentation for this, you have to go to the website. So if you go back to their did get help page, this is where you'll find the documentation. And the documentation is linked to right here. And this is the only place where you'll find the documentation is in this one sentence. It's not linked to in the wiki. For some reason, like if you click on wiki, you'd expect the documentation to be here. It's not there. Instead, it's just this one link right here. And that's where all of the documentation lies. There's not a lot here. There is a brief explanation of every command that worm RC can run. So these are the things that worm are that worm C can do. I think it said worm RC, but worm C can do. So things like it can change the border active pixel units. So the width of the border, same thing for the inactive for the border width for the frame active, so on and so forth. And like I said before, there's not a lot here. So you can control the things like gaps. You can create a title bar if you wanted to put in a font. You can dictate what key binding kills clients kills the window manager, things like that. There are two different layouts. So there's floating and tiling by default, floating is enabled. And that is going to be the master stack layout. Now one thing you'll notice here is that as you hover over these windows or these clients with your mouse, focus doesn't change. So the only way to get focused to another window is to click on it. So by default, actually, there is no key binding in the SXHK DRC file to actually move clients from one place to another. That'd be something that you'd have to create. So if we go back here and close some of these things, so by default, the only way to do this right out of the box is to click on them and then hit super queue. If you want to move them around, the way you would do that would be to use as far as I can tell the master window ID and master active. So the thing is out of the box, there doesn't appear to be a way to move between these things. So like I said, the way to focus them is to click on them. But moving between them with like the Vim keys doesn't exist. So in your SXHKD file that we just copied, there's no command there to move things around with like the Vim files like you or the Vim keys like you would with any other window manager. And I've been looking at the documentation here, let's close these by clicking on them. I don't see a way to move them. Now it's possible that I'm actually missing this. So there's ways to maximize and minimize. But as far as I can tell actually moving the client, which I believe they're calling frames here, it doesn't seem to be possible. But again, I'm assuming that I'm actually missing something. But I'm not sure about that. See that's the thing about this is that there's not a lot of documentation here. And what's here is not actually very well explained. So for example, like this one down here, it says frame, where was frame left string describes the window of the frame for the left side. I'm assuming this is for like the title bar, right? But it's weird that they have this and not something to move things around. And again, it's possible that I'm missing it because I haven't I've barely read through all of these. And it might be that they're calling moving around something different. Like maybe they don't call it move, but they have the ability to move things to different tags. So the move tag argument here moves things to different tags. That's the way that would work. And it makes a lot of sense, right? Move tag but uses focused windows. So this here is what you would see if we go back here, move tag or move active dash tag is this line here. And that just moves the window to a different tag or workspace in this case is basically the same thing. So super F is to maximize super H minimizes super F. I have no clue how now to get that back because it's not active anymore. So yeah, apparently that's just gone. I'm sure I'm sure there was a key button there, but it's now disappeared forever and ever. Oddly, if you open up another window, it leaves that frame, you know, there. So super F would make this full size. I don't know. That is a little weird, right? So that's the kind of my experience with this so far is that this is a very weird window manager. It's very, very, very, very minimal. It's definitely not a window manager that you would use and expect to be 100% feature fall. Like even DWM out of the box has the capability to move between clients using the Fem keys, right? This doesn't have that. And it doesn't have an alternative to it as far as I can see, right? So you can make a window float. So like this, but it doesn't actually, so super shift space would float it. But moving it around, I was done with the alt key. Okay. So the alt key is what moves that around. So that's something that I've discovered, not the super key, but the alt key. Now the window that we minimized earlier, I wonder if super H will bring it back. No, I just mixed that go away. Okay. Now I have two windows that are minimized. And I have no critical back. Okay. So I'm assuming that if we went back here down here, there was the sets the path for the appropriate button to active. These again, appear to be for like the title bar, maybe I'm not actually again, not sure because it doesn't come with a title bar out of the box. So that's something you'd have to create. And again, I'm only really assuming that it's for a title bar. So set the font for the text and client title bars, which it is for the title bars. And like enough, like half of the stuff that worm C does is for the title bar. You know, so like I said, this is a very weird window manager. And I think the thing that I would prevent me from using it completely, like the deal breaker right from the beginning is that I almost always, and this is a stupid habit that I have is that I need that focus follows mouse things. So when I hover over something, I want that window to become focused. I don't want to have to click on it first. That reminds me too much of a floating window manager or a desktop environment. You know, I don't want to have to do that. And maybe there's a way to not have that be the case, but it's definitely the case out of the box. Now, the one thing else we didn't talk about too much while those came back, all I had to do is change to the workspace again. So if I went away, they're back again. Okay. It doesn't matter. Back into the configuration file. We can close this one here. The way you configure the rest of the window manager and how you would customize it, you can do that through WormC again. So WormC layout changes to between floating and tiling. So in this case, tiling is default. The struts are basically the outer gaps. So if you want to change the outer gaps, these are the values that you change. So these are each pixel values. So by default, it's like 75, 20, 20 or 20 or something like that. I changed it to 555. By default, I think that the reason why the first one is 75, which is going to be the top is because it's expecting you to have a bar up there. So you'll want to make sure you set this low enough so it doesn't overlap your bar. The gaps are the gaps in between the windows. So you do that with WormC gap. And then I closed that. The other one was for border height and width. So those functionalities are there if you want to customize it. Other than that, it's just a matter of creating a polybar configuration file, getting your polybar up and running, and then customizing your polybar because really the only other configuration you have for Worm itself is the border color. It's a weird window manager. Let's just put it that way. So that is Worm, a very, very brief look at it. I'm sure someone who uses Worm a lot more than I ever have, and that would not take much because I've only looked at it for a little while today, is probably out there saying, this guy's an idiot. He doesn't know what he's talking about. How can he not read everything he wants is right there. That's 100% possible, but from my brief overview of the very little documentation that it has, there are definitely things here that are missing. And for me, that'd make it almost unusable even beyond the whole focus follows mouse thing. So if you have comments about Worm as a window manager, you can leave those in the comment section below. I will probably play around with this for a little while longer, and if I discover something that I missed, I'll leave that in the comment section below in a pinned comment because it's possible that I just messed something up, which is possible, likely even. But anyways, comments in the comment section below. You can follow me on Twitter at Linuxcast. If you want to follow me on Mastodon, you can find that link in the video description. You can support me on Patreon at patreon.com slash the Linuxcast. I'd like to thank my current patrons, Robert Sid, Devon, Patrick, Fred, Kramer, Cry Devil, Antoine, Uncle Bonad, KB, Drift Slounge, Maglin, Jax, Nighting Tool, Steve Bates, Epic Onyx, Garrett, Campbell, TB, TGB, Keith, Andy, Gary, Ross, Mitchell, Gada, Carbon Data, Jeremy, Shawn, Odemarny, Niaz, Bargo, Erickson, Elias, Mizlal, Merrick, and Declare, Peter at Groups with Dark Witness, Kramer, and our Lock 1 billo. Thanks everybody for watching, see you next time.