 Obviously, I love tiling window managers. I talk about them all the time, and the reason I love tiling window managers so much is because of their extensibility, their customization options, and one of the reasons that they're so extensible is because of so many people that contribute their own third-party libraries to many of these tiling window manager projects. Typically you'll install a tiling window manager, and typically you'll also install alongside it a package that is a contrib package, or sometimes it's an extras package. And what this is, again, it's a collection of third-party libraries that people like you and me write for that particular tiling window manager. Today what I want to share with you is the Qtile Extras package, and Qtile Extras is a package of extra libraries that help extend Qtile, especially the Qtile panel, the bar at the top, and the widgets that go in the bar. You get some more decorations and theming options, and you can really make the bar fancier and really stand out. So let me switch over to my desktop. Of course, this is the Qtile window manager that we're looking at. That's the Qtile panel, the bar at the top with some widgets. Let me switch to this workspace where I have a browser open, and this is the Qtile Extras documentation. And to install it, you need to install a package called Qtile-extras, now being a Python package. You could install it with pip, Qtile-extras was in the AUR, the arch user repository, because I was able to install it using a paru, or you could use yay if you use the yay AUR helper. Let me zoom in my browser here a little bit so you guys can see some of the text. So what do you get with the Qtile Extras package? Well, probably the most important thing most people are going to want is the decorations. So I'm going to go to reference here, and you see under reference we have widgets, which we'll talk about in a minute, and decorations. Click on decorations, because decorations gives you widget decorations inside the bar. Because by default, for example, you can't draw borders like underline and overline kind of decorations to the widgets in the bar. Typically, you guys have seen my Xmone ad, Xmobar setup where I have the widgets in my Xmobar panel that are underline, you know, with specific colors, and I'd like to do that with my Qtile bar. But I can't without this Qtile Extras package. So really, I'm installing it mainly for this, the border decorations, right? And that's what I'm going to be showing you today. There also is a power line decoration to give you a power line effect in your bar. I actually do not need the Qtile Extras package to make the power line, because I'm just doing it with standard Unicode glyphs and, you know, just spacing it out correctly and making the fonts the correct size to where I can kind of achieve a power line effect without doing this. But it's nice that they have this in the Qtile Extras package for those that don't want to fight, you know, configuring a power line the way I did, because it did take me some trial and error to make my power line. And if I scroll down, you can see there's some customization options you can do with the power line effect here, such as making the power line instead of having the arrow. You could do kind of the slashes here, or you could do the rounded corners with the power line as well. And then you have wrecked decorations. So this is obviously a rectangle, right? So this is, you have a rectangle background behind the widget. And you can't do this again in the normal Qtile package. You can actually set a background for the widget, but it's a solid color background with no border. And it's just a big block, right? You can't have padding behind it like you see here, and you can't have rounded corners either. So that's nice that they kind of tweak that a little bit. But the one I'm really interested in, of course, is the border decoration. Now there are some widgets as well, some extra widgets with the Qtile extras package. The standard Qtile package has like 50, 60 widgets. It has more widgets than you'll ever want to add to the bar. But they went ahead and created some others. And some of these I will say I tried, I don't know, half a dozen of these. And I want to say like four of them, I could not get to work. They were really buggy, really flaky. And I will say most of these widgets, when you actually read the description of them, a lot of them will tell you they're experimental. They may or may not work. Many of them I will go ahead and tell you are designed for the X display server. So if you're running Qtile Wayland, don't be surprised if some of these extra widgets don't work in Wayland. But let me go ahead and open my Qtile config and let's play around a little bit. So let me go ahead and see if I can fire up Doom Emacs here. And I'm going to quickly search for my Qtile config, which I have it as an org document. So this is readme.org is what you'll find on my Git lab. But that's just a readme page. It's a literate config. Everything gets outputted to config.py, though, when I save this document. It's just convenient. That way, you know, I don't have to maintain a separate document for a readme and a separate document for the actual config.py. Right. That's really nice. I love literate programming inside Emacs. That's one of the reasons why I use Emacs. So at the top of my Qtile config, you can see I have the import section. Right. So we're importing all of the libraries that I'm going to need to call upon later within my config. And this section here is all my key bindings. If I keep scrolling down, I have this hitting here, widgets. And this, of course, is the bar with all of the widgets that are in the bar. So widget.zip, that's a separator because I have a little separator, a little spacing in front of that image. And you can see widget.image is the Python logo. That is the image, then widget.separator because I have another separator behind the image, widget.groupbox is all the groups. That's the workspace names. Right. Yada, yada, yada. So pretty easy to understand how you set up the widgets here. Again, everything's in Python here. Qtile is written entirely in Python and you can figure it using Python. So I want to go ahead and add border decorations to my panel here. So what I'm going to do is I'm going to gg to get back to the top of this document here and scroll down to the imports because I'm going to add some extra imports. So let me go ahead and make some space here. What I'm going to do is I'm going to do from Qtile underscore extras. I'm going to import widget because we're going to install and play around with some of the Qtile extra widgets as well. But really what I need right now is Qtile underscore extras.widget.decorations. And then I'm going to import border decoration. And now that I've imported that library, I can start using the border decorations within my widget. So I'm going to scroll back down to the widget section. And let me just pick a widget to try this out on. Just to see if it works. So the first one I'm going to do is widget.next, which is the red box here. But it's actually not showing me my network. It should be showing me my up and down speeds. But the interface is wrong. It's looking for EMP5SO. But right now my interface is actually EMP6SO. And then what I'm going to do is I'm going to go down here to this last section of the widget.net. And I'm going to add a comma behind this last line. Normally, it doesn't need a comma, but I'm going to have to add one because I'm going to add this new section here. And it's going to be called decoration. We're going to do decoration equals. And then we need to do brackets, not braces. And I'm going to do border decoration. Remember, we imported border decoration, right? Then we need to do a opening and closing parentheses. And you can go look at the documentation for the parameters that you can pass with border decoration. But one of them is color. And this is color, not the American English spelling, right? European spelling, C-O-L-O-U-R color equals. And in my case, I'm going to set that to colors six because in my config, if I scroll back up, I actually define some colors. I have this colors array here. And color number six is actually going to be the seventh one down in the list because it is when you deal with programming languages, they always start counting at zero. So this is color zero. This is color one. This is color two, three, four, five, six, seven. Seven is the purple color. So let me scroll back down to where I was adding that. Now I'm going to add a comma because we're going to add some more parameters here other than color. We're going to add border underscore width and I'm going to set that to equal. And we're going to do a opening and closing brackets here because I'm going to pass several values here because I'm going to do four different values for left, right, up, down. I'm going to do zero, comma, zero, comma. And then I'm going to do four, comma, zero. The third column there is the down. So what that's going to do is it's going to create a border decoration that is essentially an underline and I wanted it, of course, four pixels in size. And then we need a comma because I'm going to add another line. I'm going to do padding underscore X. So the X padding, I'm going to have it set to five. So that's, you know, your side to side padding. And then I'm going to do padding underscore Y. The default value for it, according to the documentation back on the website is none. I'm just going to leave it as none. But I'm going to go ahead and add it here just for reference. And then we have the closing parentheses, which is fine. The only other thing, I know I'm going to get an error if I don't add a comma to the bracket there. So that was the closing bracket for the whole decoration equals, right? Make sure you add a comma. For those of you that are new to Python, Python is really picky with punctuation. So if you miss a comma somewhere, it is going to throw a fit. So now I'm going to write that and it's going to tangle that this code section and write me a config.py right from my readme.org here. And now I should be able to restart QTAL. And if everything worked correctly, now the net is working as far as the interface that we changed. Now I have net up and down, but I don't see an underline. So it doesn't look like adding the decoration and all worked here. So did I make a mistake here? It is possible that the color is the same. So I was using color six. No, the background color is three in this case. Let me set that to zero, set that to one. So zero is the dark, almost black color for the background of the widget. I'm going to set the foreground to two, which is a really light, almost white color. And let me write that and restart one more time. Yeah, everything changed. But again, I don't get the border. And the reason I'm not getting the border, I'm going back to the QTAL Extras documentation. Decoration should be decorations with an S. So decorations with an S, but border decoration is singular, no S on that. So now I bet when I write and then restart QTAL, yeah, now I have the blue border up under the net speed. So I don't like it being four pixels wide though. Let's see, let's only make that two pixels wide, restart. Let's see if we like that a little better. Yeah, I like that a lot better. And now that I'm not going to use the power line effect, I'm just going to have these basically separated being underlined. I really don't need these text box. So the widget dot text box and you see text equals, this is a special glyph for the arrow symbol, right? Looks kind of funny here in Emacs, but that's what that is. But if I get rid of this unneeded widget before and after, what I'm probably going to have to do is add some separators because these widgets now are gonna be right upon each other if I remove the arrows. The other thing I wanna do is I wanna make the actual text of the widget the same color as the underline. So I was gonna use the blue color, colors six here for me, so the foreground color should also be color six. Let's restart one more time. Yeah, I like that. And I'm just gonna do the same, the temp. I'm gonna make the temperature basically a black background right with green text and a green underline. And then I'm just gonna keep going. I'll keep basically the same colors. And then I'm gonna create a separator. So what I could do, let me scroll back up to where I have these separators here. I'm just gonna copy that block and I'm gonna add a separator before and after the net widget. So we'll just add that before it and then we'll add that after it as well just to give it some spacing, restart here. Yeah, and you see how I have a little padding on each side of each widget. So I'm gonna spend a few minutes here and I'm gonna do exactly what I just did to the net widget with each widget here. I'm gonna remove the power line glyphs and create separators on either side. Now I'm gonna underline each widget. I'll be back in just a couple of minutes. It'll just take me a few minutes really, mainly just copying and pasting here. Yeah, so editing this was really quick. Once I did the first widget, it was mainly just some quick copying and pasting and then plugging in the right colors that I had already defined in my config anyway. So now you can see I've got about seven widgets here, six widgets, they're all a different color. They're all separated by some separators so they get spacing on each side and they're all underlined using the border decoration from the Qtile Extra Package and I like to look at that. That's rather clean. Now one thing I was gonna show you some of the widgets. I said I couldn't get most of the widgets from the Qtile Extras Package to work. So really I just installed the package for the decorating of my already existing widgets but I did find one widget that did work correctly. So you see this here, widget, analog clock. Let me uncomment that and right. And let me restart and what this is is a little analog clock where you sit like the hands as far as the color of the clock hands and the background and whether you want the clock to be a circle or a square, you can see face shape. I used the square symbol. I put the little analog clock right in front of the time and date widget that I was, the standard clock widget from the standard Qtile libraries. Now that analog clock is kind of hard to read. You'd never be able to tell time with it. Me personally, I'm just gonna delete it but again, I just wanted to add that to the configure. I'm gonna actually just comment that back out because what I'm gonna do is I'm gonna push this config as it currently sits. I'm gonna push this to my GitLab. So those of you that wanna see how I added the border decorations or how I added the analog clock can just take a look at my config and maybe draw some inspiration from my config. So that is just a little bit of what you can do with the Qtile extras package. I'm really, I'm really glad I checked out Qtile again because I've kind of missed this window manager. The few hours I spent in it here in the last day or two have been refreshing because it has a special place in my heart, the Qtile window manager because I've actually been a long time user of Qtile. I first started using Qtile probably like seven, eight years ago, way before anybody even knew what it was and really nobody had ever even heard of Qtile mainly until I started doing my videos about it which were about five years ago and that really drew a lot of attention to Qtile because many people had, they've heard of things like Awesome and Xmonad and DWM but Qtile is almost as old as some of those window managers but for whatever reason, it just never caught on and I never could understand why because I really think it is one of the best window managers as far as functionality. I also wanna say it's one of the best window managers as far as their documentation on their website, fantastic documentation. Everything about configuring it, how I got through the config, adding all the widgets and border decorations and everything is just all laid out in the documentation. Now before I go, I need to thank a few special people. I need to thank the producers of this episode and of course I'm talking about Gabe Jamesman, Max Amendment, Mitchell Paul Westman, you bald homie, Alex Armoredragon, Chuck Commander, Ingrid, I.O.K. George, Lee Marsstrom, Nate Arion, Alexander, Paul, Peace, Archon, Fedor, Polytech, Realities for Los Red Profit, Roland, Steven, Tools, Devler, and Willie, these guys, they're my house, tiered patrons, over on Patreon without these guys. This episode you just watched would not have been possible. The show's also brought to you by each and every one of these fine ladies and gentlemen. All these names you're seeing on the screen, these are all my supporters over on Patreon because I don't have any corporate sponsors. I'm sponsored by you guys, the community. If you like my work and wanna see more videos about Linux and free and open source software, subscribe to DistroTube over on Patreon. Peace. That's rice, baby. Da-da-da-da-da-da-da-da.