 So, a week ago, I started a trial of using Qtile as my daily driver window manager. And I've had a pretty good time now. For those of you who don't know, I3 has been my daily driver for approximately two years. And I would say that I'm an I3 fanboy. I like I3 the most out of all the window managers that I've tried. And I still think I3 is my favorite, but after spending a week in Qtile, I have some thoughts. My original plan for this was to spend only a week in Qtile. And I didn't think that using Qtile for a week would actually sway me and get me to use Qtile for longer than a week, but I was surprised. So there are some things that I truly adore about Qtile. They're absolutely amazing features. And I want to talk about some of those tonight, but I also want to talk about some of the things that I don't like so much. So here are 10 things that I've learned about Qtile in the last week. Let's go ahead and jump in. So the first one is that Qtile is written in Python. Now obviously I already knew this. I had used Python before, though I never actually had lived in it for any significant amount of time. This time, what is different is that I was actually more open to learning some Python. And probably if I were to give advice to anyone who's thinking about using Qtile is that you should know a little bit of Python. But if you don't, don't be scared about it because Python isn't a hard language to learn at least learn enough where you can configure Qtile, I should at least say if all you ever want to do with Python is configure Qtile, it's really not that hard. I'm sure that there's a lot more to Python than what you'd see in the configuration file for Qtile. But if that's the entire exposure you have to Python, you're not going to have very many problems at all. You'll just have to kind of get into the flow of how Python works inside of that configuration file. So if you're thinking about using Qtile, don't be scared off by the fact that it uses Python. So that kind of leads into the second one that I want to talk about in that it uses Python, a lot of people think that because it uses Python, it's obviously going to be very slow. Now there is this mythos around Python that every application that uses it is automatically slow, there is the stereotype of Python about that. And I'm not a developer, so I can't really tell you whether or not Python in general compiles slow or whatever or why that stereotype exists. What I can tell you is that Qtile itself is not slow. It is is just as fast as I three was. I haven't noticed it taking any more or less resources. So I don't know why a lot of people think that Qtile is slow, but I have not experienced that at all. It runs perfectly fine. The third thing that I've learned and that I've been discovering over this last week is that the bar is awesome. So if we take a look at my bar right now, this is what my bar looks like now. If you watched my video before, when I was talking about this initial review, I did admit that this bar came from someone else. I stole someone else's configuration file. And that's how I've been learning. I've been kind of going through that configuration file and tweaking it. And I've continued to do that. I like this particular bar layout quite a lot, but I've done quite a bit to kind of tweak it to be my own. So I've added some widgets. I've moved some icons around. And obviously I've tweaked the colors. So now I'm using an everforce theme. I'll talk about my theme and stuff in another video, but the bar itself has a ton of options. So if I show you my configuration file and I show you where the bar is defined all the way down here, basically how it's done is that the entire bar exists. And it is something that is hard coded into Qtile. It can be disabled, but by default it comes with a bar. But there's nothing on the bar by default. If you don't define anything, it'll just be an empty bar. And I'm not even actually sure if it'll show up. I'm not even sure about that. But the default bar, if it has nothing in it, would display nothing. The widgets is what you use to put stuff in it. So each of these things here that you see in the bar is a widget. And it's just defined left to right. So this part here is called the group box. This part here is the task list. And then I have the NPD widget, the open weather widget, the update checker widget, CPU, memory, the clock, the system tray, and then the layout icon widget. Those are the widgets that I have. And the thing about widgets is that they're fairly easy. So each one of these inside of this, what I believe is a function, not a developer. So I don't know if that's actually what it's called. But basically what these widgets are is just a list of traits. So things like font size, margin and stuff like that. And each widget has its own options that you can set. So for example, if you're using the NPD module, you can set how the format is so you can choose if you want to display the title of the song, the artist of the song, the status of NPD at the current time, whether it's player pause, things like that. And you can also actually set the foreground and background color, the padding, all this stuff. There's a ton of different options for each widget. And that's kind of just scratching the surface of what the bar can do. You can also set it so it's a vertical bar. So if you wanted to have a vertical bar, you could do that. If you wanted to have it so that all of the widgets had click events, you could do that very easily. So there is a ton of stuff that you can do with this bar. Is it as customizable as Polybar? Yes, I think it is, but it's more complicated than Polybar in terms of configuration. So things like adding your own custom script while can be done, as shown by Jake at Linux, which I'll link to that video in the video description. You can do that kind of stuff, but it's not as easy as Polybar to do the custom scripts and custom widgets and stuff like that. If you want to create your own widget, you have to know quite a bit of Python, or at least how to search for the documentation that leads to that stuff. I'll talk about the documentation here in a few minutes. So the fourth thing was actually all the widgets that I was talking about, because the one thing that you'll need to know if you want to mess around with that bar is how do I put stuff in it? So in the Qtile documentation, you'll find this page here, which I'll again link in the video description below. This has a link of all the widgets that you can use. So there are approximately, I actually don't even know. I'm not going to go through and count these obviously, but there are, as you can see, probably three dozen or so widgets that you can use. And they're all doing several different things. So like you can choose the current layout, the current screen to display all those things, you can display a countdown. You can there's a CMOS widget, a clock widget, clipboard, cord, things like a hard drive graph, things like an image, even if you wanted to the keyboard layout. You know, it just goes on and on and on. There's a ton of different widgets. And pretty much there's a widget here for basically anything you could think of wanting to do with the bar outside of, of course, running your own bash script. There's no widget here for running a script of any kind. You have to do it in a certain way using the Genpol text widget like this. And like I said, Jake at Linux did a fantastic video on how to use that widget to actually display a custom script. It is a little complicated. Maybe it's meant for that, but it's definitely not as easy as something like Polybar displaying your own scripts. And that's probably the biggest downside I've had with the Qtile bar is that displaying your own scripts is complicated. And I have several that I'd want to use, but I don't simply because it does take quite a bit of effort and I'm not there yet. You know what I mean? So if you are going to use Qtile, you're probably going to be perfectly happy with the amount of widgets that they do offer. Because for the most part, they cover mostly everything that you'd want here in terms of content for your bar. So the next one on the list is that scratch pads and Qtile are absolutely freaking amazing. I think that Qtile does scratch pads just as well as any other window manager that I've ever seen or used. And it definitely does scratch pads better than I3 does them. Now, that's not really disparaging I3. I3 does a pretty good job of scratch pads if you set it up properly. But it has some peculiarities, right? So if you kill a scratch pad in I3, it's dead, right? You have to actually respawn I3 in order to get your scratch pad back. That's kind of annoying. Now, there are workarounds for that. You can make certain things unkillable if you want to. It's not a great thing to do. But you can do that if you need to. But for the most part, if you kill a scratch pad in I3, it's just gone with Qtile. That's not the case. So let's just say I'm here with a few windows open. So I'm doing some stuff, but I really need another terminal. I could obviously open up another terminal, but I'm running out of space here. So I could just open up a scratch pad. So in this case, I have a scratch pad. It pops up on top of everything else in a floating window. And this is this is my terminal scratch pad, so I could do whatever I need to do here and then send it back to the invisible workspace. If I need to go back and reference the thing again, I can open it right back up and it goes away. That's scratch pad. But let's just say so this is my terminal scratch pad. I can kill it. So super Q it's gone. If I open it back up while the content is gone, the scratch pad still remains. It will come back. And that's highly different than with I3. I love the fact that it will go back. Another example of a scratch pad that I use all the time is Rangers. So I could kill that super Q and it goes away. I open it up again. It's here again. And that's really nice. I like the way that Qtile does scratch pads. If we take a look at the configuration for scratch pads, it's really not that hard to do or to use. And that's where it has a leg up on something. Let's say like X mode X mode does really good scratch pads as well. But they're not really all that easy to use, at least if you don't know a ton of Haskell, so which obviously I don't for Qtile, while yes, you do technically have to know a little bit of Python. This is not hard at all. So at the top of the configuration follow, you would import scratch pads. So up here, you'd have from lib Qtile.config, you import scratch pads so that you can use it. So you have that there at the top. And then you have two sections that you need to put in. So you'd have this groups append scratch pad part here. And this is where you're defining all the scratch pads. So I have one that is just a terminal. I have Ranger, I have Pagu control. I have my NCMP CPP thing that is my music player. And then I have NewsBoat all attached to scratch pads. This is where you define those. This is where you can set the width, height and stuff like that, where it appears on the screen, all that stuff. And then you have the key bindings. So you have the key binding set up like this. So I have mod N for the terminal, mod C for the Ranger, mod V for volume, mod M for music and mod V for news. I don't know why I have N and B kind of switch around. It doesn't really matter at the end of the day. It's just what I'm used to. But anyways, that's all you have to do in order to get scratch pads to work. It works really, really nice. So scratch pads on Qtile are fantastic. One of the things I talked about in that original Qtile video where I announced I was going to use it for a week is the workflow that Qtile gives you. And it is much different than I3. So in I3, I'm used to having all workspaces where I assign them. So for example, I have workspaces one through nine on monitor one, which sits right in front of me. I have the other 10 workspaces on monitor two, which sits over here, right? Where the camera is. And those workspaces never move around. I have key bindings for each and every one of them. So if I hit control like seven, I would go to workspace 17, which is over here. If I hit mod seven, I know that workspace seven is always going to be here. That's the way my workflow and I3 worked for two years. And I love that workflow. It's really good with Qtile. It's a little bit different. So with Qtile, you can have as many workspaces as you want, as long as you give them appropriate names to your keys. So for example, if you wanted to have a workspace that was navigated to by mod F, you would have to name that workspace F, at least in the way that I've done it. So you can have as many workspaces as you want, which is good. I have right now, I think I have 12. And with those 12 workspaces, I navigate through to them through one through zero and then the minus and plus keys. So those are the 12 keys that I need. If I wanted to have another couple of workspaces, I could find another couple of keys on the keyboard, name the workspaces for those keys, and then I'd have workspaces for them. So that's a good thing that you can have as many workspaces as you want. But the way that they're kind of arranged is a little bit weird. Now, you can, if you want to, assign workspaces to specific monitors. That is completely possible within Qtile's configuration file. But that seems to kind of be against the grain when it comes to how Qtile is actually supposed to work. So if I show you this right now, I'm on workspace seven, which is the workspace that I normally use for GIMP. Not that big of a deal. I just happened to have been using Icon at this time instead of workspace numbers. But the point is, is that I'm on workspace seven and it's sitting on my main monitor, the big monitor that I have on my desk. If I were to press workspace six, which is right now focused on my second monitor, that's where OBS and Audacity is. So if I hit workspace six, it's actually going to switch monitors. So workspace six is now in the main monitor. Workspace seven moved over to the other monitor. And basically the way this workflow works, or the way that I've started using it, is basically my focus for the entire day now is on the main monitor. I never use the second monitor to do anything other than to store inactive windows, basically. So I never go over there to do basically any work. Every once in a while, I will. But for the most part, I never do that. All of my work now is on the big monitor that's in front of me, monitor one. So let's just say I wanted to go to discord. I could go to to workspace nine, which is where discord always lives. And usually in my I3 configuration, well, this would always be on workspace 19 on the second monitor, because I never really need this front and center in front of me. But now that this is the way that I work in Qtile, whenever I need to bring a window into focus, it's always going to pretty much appear on this main monitor, no matter where the workspace originally was. It's a very weird workflow. I will say that I it took me quite a while to get used to. And it makes my second monitor feel superfluous. Like it feels like I don't even need it anymore. And I don't know if I really like that feeling. So the thing about having multiple monitors is that it gives you a lot of space, right? And while I technically do still have stuff over here, obviously, like right now I'm looking at OBS and audacity. And it helps me, you know, look at the camera. Outside of that, I hardly ever look at this monitor at all. And like I said, it makes my second monitor feels like I don't need it anymore. Now, some people would say, you know, that's a good thing, right? You know, you know, you're not moving your head back and forth and straining your neck. But I'm so used to having, you know, multiple things up at once that I can actually see, you know, it just feels a little weird. Now, I've gotten used to it, obviously, and I can see the benefits of it, you know, just always having your attention forward just on your work, you know, you never having to look over here and do typing while you're you're typing over here. You know, it works fine and I'm used to it. I'm just I'm not sure I really care for it. It's going to be one of those things where I kind of have to think about it for a little while longer. I'm definitely going to experiment more a little bit with how this works. Because like I said, it's just it's different than the way I normally do a workflow, whether it's not it's better or not. And I still quite haven't figured out because, like I said, it makes my monitor feel my second monitor feel like it shouldn't even be there, which, again, could be good or bad. So the next thing that I've learned, at least about myself when it comes to the usage of Qtile is that the layouts aren't important. So the one thing about I3 is that it doesn't really have layouts. It's a manual Tyler. You choose where the next window is spawned. Now, I use an auto tiling script. So it does like the Fibonacci type layout automatically. It's don't only layout that I really ever use. Technically, I suppose it also has floating and tabbed mode because those are technically layouts as well. But I never use them even though tabs are really cool in I3 and I should use them more. I hardly ever do. I think that using a different window manager has kind of alerted me to the fact that I never use layouts. I stick in the master stack layout that is Qtile's default. I never go to any other ones. So for me, personally, the layouts just aren't important. So maybe that's the way it is for you. Maybe it's not. Another thing that I've learned is that the key bindings in Qtile are really easy to set up and use. Qtile also has key cord support. So if you want to add key cords inside the configuration file, you can personally, I still use SXHKD for all of my application launching and stuff like that. SXHKD is just better. And that's just kind of the way it is across the board. I've never found another window manager out there that doesn't already use SXHKD that does key bindings in such a fantastic way. So I personally still think that SXHKD is the best way to do key bindings. But the key bindings inside of the Qtile config aren't bad. They're easy to use and you can do pretty much anything you want with them, including key cords. The second to last one on the list is that the Qtile documentation is kind of meh. Now, the prevailing opinion on the Qtile documentation is that it's superb. And before I used Qtile for this last week, I would have said the exact same thing because if you go to the Qtile configuration file, which I'll show you here right here. I mean, we've already seen it once in this video. There is a ton of stuff here. You can get to all of the source code if you want to get to the source code of any of the widgets or any of the things that Qtile can do. You can see all of the options for all of the things. If you want to do any pretty much anything in Qtile, it tells you exactly how to do it. However, if you don't know Python or any Python at all, specifically, the documentation is going to be really kind of useless for you for the most part, because the way you search through stuff is you search through stuff using the search bar up here. But if you search for things in layman's terms, well, you may get lucky and find something. So just, for example, search for rules, like so, you're going to not find anything that really says rules. Now, the thing that you actually want to find, I believe is going to be in groups. So if you search for groups, that's where you're going to find the rules. But like I said, that's not necessarily the most intuitive thing, because like I said, I search for rules and groups then even really come up. So all the rules that you need to know are pretty much here, right? But they're under groups, not under rules. But that, and that's just one example of the problem that I'm talking about. For just to kind of go off on this a little bit. If you watch Jake Atlantic's video, which again, I'll link in the video description below, where he's talking about how to use a custom script in the bar. The only reason he knew how to do that was because he knew specifically what to search for in terms of the actual Python code that he would need to use in order to do the thing that he did. And if you don't know that specific Python thing to search for, so for example, let's just say you wanted to search for this libqtile.config.match, without knowing to search for that, whatever that is, right? It's basically telling you how to match a client to certain parameters like the title in a class and stuff like that. If you didn't know that's what that was called, it'd be hard to find it, right? Because that's how you would search for it. If you didn't search for match, if you searched for class or something that you'd get a whole bunch of other stuff instead of just this, I mean, maybe you'd also find this, you'd get lucky. But without knowing the technical terms for each of the things that you probably need to know, the qtile documentation is kind of a mess. It's very, very technical. It doesn't mean that it's unusable. It just is very technical. So I have gotten used to it somewhat in the last week. I would say specifically surrounding areas such as the bar, I've gotten really good at kind of parsing what it means and how to set things up. Outside of that, however, I'm still at a loss at how to search for things that I don't know exist, you know? So that one example I had where I searched for rules, because I was looking for rules, window manager rules, if you search for that stuff, you know, you don't really find anything. You see the word rules used several times, but it doesn't actually take you to the place where it tells you how to actually use the window rules, it doesn't even show groups here at all. It has the source code for the groups, but if you don't want to actually look through the source code, you're kind of out of luck. I mean, so the documentation leaves a bit to be desired in my opinion. It's not bad. I've definitely seen way worse, but it's definitely too technical for any new user in my opinion. So that's number nine on the list. And the last one is actually kind of tangential to that discussion I just had in that the window rules in Qtile are confusing. So if you want to make something float, that's pretty easy. If there's a section at the bottom of the configuration file, I believe it's in the default config. I'm not actually sure, but I think it is. There's, and if you search for floating rules in the documentation, you'll find it fairly easy. So there is, you know, there's a section you can define how a client should show up. And if you wanted to be floating, you can do so. It's when you get past that one particular rule that things get a little bit more hazy. And this is where I'm still really confused. So for example, let's just say I wanted to set it up so that audacity and OBS always appeared on workspace six. That's where I always have them no matter what window manager I'm using. I always want them on workspace six. If I'm on I3 where I have basically two workspace sixes, I can have OBS on one audacity on the other. And that's usually the way I have it. With something like DWM, there's a way to set it up so that those clients are always on that workspace. With I3, similar thing, you can set it up fairly easily. With Qtile, it's not easy as far as I can tell. I've done some Googling and I'm not done yet, but as far as I'm aware, the way you do it is through a Python function. And it is not exactly clear if that's the proper way of doing it. That's just something that I found on Reddit. But finding that in the documentation has proven impossible for me so far. I've not found a way to do that. And that is a weird omission, but also it's just kind of weird that rules don't seem to be a first class citizen when it comes to Qtile at all. So there's the floating rules and then anything outside of that it feels kind of like you have to do it yourself. So you have to write your own function or something like that in order to get things to work the way you want it to work. And that's not user friendly at all, especially for something that is important as window manager rules, because rules are one of the things that I use a ton of in a lot of window managers. So whether it's telling a window manager what client to put on work space or what things are supposed to be floating, what things are supposed to be in certain layout modes or whatever, you know, you can do all that stuff with Qtile. It just, there's not one cohesive syntax for that. It's kind of all over the place. So those are the 10 things that I've learned or at least figured out or experienced while I've been using Qtile for the last week. So the bottom line has to be, will I continue to use Qtile? And the answer to that question is yes. I actually really like it. I've had a lot of fun messing around with the configuration file over the last week, ricing it obviously multiple different times. I've done that. So check that right off the list and I'll continue to do that probably. But I've also had fun adding widgets to the bar. I've had fun discovering new things that I can do inside of the configuration file to do certain key bindings or scratch pads and things like that. It's been very entertaining going through the different sections of the configuration file and learning it bit by bit. Even though a lot of that stuff was already done for me, I've tried to make sure that I've gone through each line of the configuration file and understood exactly what it's done. So I've had a good time doing that and I'm going to continue having a good time doing it because I'm gonna continue using Qtile probably for another week, maybe even a little bit longer, we'll see how it goes. I'm going to do a couple more videos on it as well. I wanna do one on ricing it and how to do that. And I wanna do one on comparing it to I3. I wanna do a versus video on it. So if you are interested in that, also sorry about the dog, make sure you hit subscribe. I promise the dog doesn't normally do that, at least while I'm on the video. But anyways, hit that subscribe button. If you have comments on the Qtile, you can leave those in the comment section below. You can follow me on Twitter at the Linuxcast. You can follow me on Mass Center Odyssey. Those links will be in the video description. You can support me on Patreon at patreon.com slash linuxcast, just like all of these fine people. Thanks to everybody who does support me on Patreon and YouTube. You guys are absolutely amazing people. Without you, the channel just would not be anywhere near where it is today. Thanks so very much for your support. Thanks to everybody for watching. I'll see you next time.