 One thing that we don't have a shortage of is menu applications. Think about it, we have hundreds of menu applications available to us in Linux. But the problem with most of these menu applications is they're designed to work with one desktop environment or window manager. That's, they're specific to one particular desktop environment or window manager. They're typically built in to the panel that's built in to that desktop environment or window manager. Think about it. Think about the menu system in the GNOME desktop environment. Completely different than the menu system that's built in to KDE Plasma, which is completely different than the menu system built in to XFCE and Cinnamon and LXQ, et cetera, et cetera. Wouldn't it be great if you had some third-party menu application that you could customize and configure to your liking and use it with any desktop environment or window manager? It doesn't matter. You could log in to different desktop environments or window managers all the time and you would still have that particular menu application to work with. It's the same one. You don't have to worry about changing your workflow depending on what desktop environment you happen to be in that day. So I came across this application called XMenu. And XMenu, it's very similar to OpenBox's right-click menu. It's very similar to that, meaning you just create this little configuration file that tells you exactly what's gonna be output in that menu system. You could even script some dynamically generated stuff to output in that menu system if that's what you wanna do. And it's pretty easy to configure this thing. It's a very simple program. It's written in C and the config file is a shell script. At least the default configuration file that they ship with here is a shell script. You could probably rewrite that in anything you wanted to. All you need to do is get clone the XMenu repository here from GitHub and then run a very simple pseudo make install. And it should be installed on your system. You could also, if you wanted to, play around with the config.mk file here if you wanted to change some customization options before you run the pseudo make install. Let me go ahead and grab this. I'm gonna go ahead and get the GitHub URL for XMenu. And I'm gonna go ahead and clone this. So let me pull up a terminal here. I'm gonna run a get clone and then the URL for that repository. And now that we have cloned XMenu, what we need to do is CD into this new XMenu directory that has been created here. And the first thing I wanna do is I think I wanna go ahead and check out that config.mk. So I'm gonna open this in Vim. And this is just some of the make stuff. Actually, that's not what I wanna check out. What I wanna check out is config.h. And this has some color options. And what I would wanna do is I want to change the colors because by default it looks like the menu system is gonna be black text on a white background. I prefer a dark background with light text. So I am going to change some of the values here. So I've changed my background to this dark background. That's the same color as my terminal background and the bar. Also changed the foreground to a very light gray, almost white. So more appropriate colors for what I'm doing here. I'm gonna go ahead and write and quit. And now that I've changed that in the config.h, I'm gonna do a pseudo make install. Let's go ahead and actually install XMenu. Now once you have XMenu installed, the only thing you need to do from here on out is edit this file right here, the XMenu.sh. This is actually how you edit. And here is a sample menu. Now one thing to note with XMenu and this sample configuration file is there are no spaces in this configuration file. These are tabs. So that's very important. If you edit this in Vim, make sure you do not have expand tab set. Make sure you turn that off because expand tab of course is going to change all your tabs to spaces. And if you have spaces in this file, it will not work. They have to be actual tabs. So you have applications. So this is a category in the menu. And then you have a tab over and then image is the location of a ping on your system for a icon. So that's the location to an icon. And then after that, there is a tab. It looks like a single space. That's actually a tab. And after that, you have the name that's gonna appear in the menu system, web browser. That's gonna be the text after the icon. It's gonna say web browser. And then another tab. And then the command that when you click on that, it should run, which is Firefox. I hope that makes sense. So image, location of image, tab, and then the name that's gonna appear in the menu tab, and then the command that that should run. That is the format of that. And remember, they have to be tabs. And if I showed you this in action, let me quit out of Vim and I'm gonna run a dot slash and xmenu.sh. And here is the default. Well, it's not exactly the default because I changed the colors. By default, it should have been a dark text on a white background, but I kind of reversed it a little bit because I prefer a dark menu. But applications, you see, there's the location of that ping image. So that's the icon. Web browser is the text. And then if I click on web browser, it's gonna run the command Firefox. Image editor, of course, is gonna run GIMP. We have three different examples of terminals, Xterm, URXBT, and ST. And these were all hard-coded in the sample config. Oddly enough, I have all three terminals installed on my system. So if I clicked on Xterm, it would actually launch Xterm. So let me rerun Xmenu here. We also have shutdown and reboot in the sample config. Now, what I would do is I would spend a couple of hours. Seriously, you would probably have to spend two or three hours customizing that menu system to your liking because if you're like me or most people on Linux probably have, you know, 100 or more programs that they've installed that they purposely installed on their system and you're gonna want all of that in your menu system, right? So you're gonna have to go through and really spend some time adding some lines to that Xmenu shell script. But it's a one-time thing. Once you have it configured, you really shouldn't be spending much time configuring it after that very first time because after that, it's really minor changes. Maybe every now and then you'll install or remove a piece of software and need to go make a single line edit. But really most of the configuration that you're gonna do is all upfront. Earlier today, I played around with Xmenu a little bit and I created another kind of example config where I wanna demonstrate to you guys some of what is possible with Xmenu. So let me get back into the terminal and I'm gonna show you guys my kind of example of some of what you can do with Xmenu. So I created subcategories. The same kind of subcategories you would typically find in Linux menu systems. And so all I did was I basically copied the same thing over and over again. So I didn't take the time of going through and adding hundreds of different applications that I've got installed on the system. Basically the same three or four applications over and over again in this menu system. But you see, I created categories, accessories, games, graphics, internet, multimedia, office, programming system, the same kind of application categories you find typically in most Linux menu systems. And then after the applications category, I have a space. Now if you include a space in your config, Xmenu adds a horizontal rule, which is really neat and visually, it's a nice little break. And then I created a category of a potential category edit configs where I maybe could list config files that I edit all the time. I haven't actually done this though. Again, these are just example programs still here. I also created an example category here, take screenshots where if I wanted to, I could have different scrot commands. Like take a screenshot immediately, take a screenshot five seconds from now, take a screenshot of this particular section of my screen or take a screenshot of the entire screen. So you could really get creative. But really I wanted to show you guys how you could dynamically create some content. So this category is music player. And you will see instead of having a name, I have this variable now playing. Now the text for now playing, what is that? Well, that will be up here. You say I created this variable here, now playing equals this dead beef command. It's basically is taking what is playing currently in my dead beef music player. I'm piping it through SID. And it's gonna return the title of the track playing is what that's going to do. And track time is the duration of the track that is playing and playlist number is the number within the playlist. Again, I just kind of threw this menu here together. Again, it's not complete because the commands behind now playing is file roller, which is my archive manager. That's probably not what I want there. I want some kind of dead beef command, but I haven't bothered that. I also showed that if you wanted to, you could dynamically generate content by adding like my kernel here. You say I have dollar symbol my kernel. And all that's doing is taking a uname dash R and whatever my current kernel version is, it's going to output that into the X menu. So if I write and quit and let me run X menu again. So you will see now my X menu is down here and you see the kernel version is 5.4.53. That's the LTS kernel and my music player. You see the last thing I was playing in dead beef was King Diamond, his conspiracy album from 1989. I was listening to track two, sleepless nights. That particular track is five minutes and six seconds long and it's number one in the playlist. Now, if I change to a different track, let me launch dead beef. If I wanted to change to track three, I can't really play track three because I might get demonetized because I don't own the rights of course to King Diamond's music. And then I run X menu again. Now when I go to music player, you see track three lies and it's four minutes and 23 seconds long. So really the sky's the limit in what you can add to your X menu system. You can script this thing to output anything you want. A system monitoring information, if that's what you want to do, you could have it list virtual machines that you have installed on your system or all your current Steam games, your Steam library and whatever you can do with some simple shell scripting, you can have it output in that menu. Now, one of the things you're gonna wanna do with X menu is you want the ability to click on the desktop and bring up that menu. Kinda like with open box or flux box. You want the ability to either right click or left click on the desktop and bring up that menu. And the guy that created this program, X menu, he created a second program called X click route. But the problem with X click route is I couldn't get it to work. I tried. X click route has a package in the arch AUR. I installed it. I couldn't get it to work. And then I decided, well, maybe the AUR package is broken. So I just did a get clone and I built it from source. I still couldn't get it to work. The way X click route is supposed to work is it sets the ability for when you click on the root window, which is your monitor, the empty desktop, when you click on it, it should run some command. An example is this here, X click route dash L for left click should run X term and then and behind it to make it a background process. You should add that to either your X init RC or your X session file depending on how you start X. If you do a start X, you should put it in your X init. If you do a login manager like I do, you should put it in X session. I tried it in both. I tried it in dot profile. I never could get X click route to actually do anything. So I never could get it to launch a single program. I tried a multitude of different things with it. But honestly, for me, I'm not sure I would. I don't think I need the ability to click on the desktop to launch X menu because for me, most of the time when I launch a program, for example, if I'm in a tiling window manager, if I have a single program open, I don't have a desktop to click on anyway, right? So it doesn't make sense for that to be the only way to launch X menu, clicking on the desktop. That's not gonna work for most window manager, especially tiling window managers because you don't have any desktop to click on anyway. What I would do is I would add a key binding. So let me launch Emacs. And if I launch my herbs looked config and zoom in here. So you guys can see, but it doesn't matter what window manager you do this in, open up your window managers config file and add a key binding and have it run the path to that X menu.sh. Here in herbs lift, I key bind did control alt return to run X menu.sh. So let me do a control alt return. And you see the X menu appears where my cursor was. If my cursor was over here somewhere and I did control alt return, that's where the X menu would appear. So that's what I would do. I would set it to a key binding. If you really wanted something to click, it doesn't make sense to click the desktop. If you have a panel and you want something to click to bring up a menu, I would add an icon to your panel. And that's what I did here in Polybar, but you could do this in pretty much every panel is most of them have the ability for you to create some kind of custom quick launcher, whatever it is they call it. So I can just click the Polybar here in the icon in my Polybar or if I'm already on the keyboard a simple control alt return will bring up my X menu. That is a really neat menu application. Again, because it's window manager, agnostic, I could use that thing anywhere. I could use it in herbs lift, which I'm already using. I could put some kind of quick launcher in my XMO bar and XMO Ned to launch X menu. I could use it in Qtile. I could use it in DWM. I could use it in awesome. Although awesome already has a right click menu system similar to X menu, you wouldn't need to use it in awesome. But there's a lot of window managers, especially really minimal window managers that don't have any kind of built-in menu system. And X menu I think would be perfect for all of those. Now, before I go, I need to thank a few people. I need to thank Michael, Gabe, Heplo, Nate, Corbinian, Mitchell, Entry, UK, John, Arch 59, 30, Chris, Chuck, DJ, Donnie, Dylan, George, Lewis, I'm Repaul, Robert, Sean, Tobias, and Willie. They are my highest tiered patrons over on Patreon. They are also the producers of this episode. I also need to thank each and every one of these ladies and gentlemen. These are all my supporters over on Patreon because this channel is supported by you guys, the community. If you'd like to support my work, you'll find DT over on Patreon. All right guys, peace.