Archive for the ‘ratpoison’ Category

coming attraction: jwmrc for crunchbang

July 11, 2009

Had a little time and converted the default #! openbox menu into something to suit jwm’s XML conventions (really fast in emacs; don’t try this in gedit, boys and girls). I’ll post the full jwmrc tomorrow when I put it all together with the other things #! handles separately, maybe with a similar color scheme (screenshot shows a work-in-progress). I’d post what I have now but I still need to edit the jwm keybindings to match the ones #! uses in openbox.


Beyond that, I didn’t do much else except fill in my own menu a bit (which is why I even bothered converting the openbox menu) and setting up a few things the way I want them. My own menu is nothing like the openbox one. Since I still get a lot of hits for ratpoison, ratmen(u), jwmrc, and jwm themes, maybe I’ll also post mine tomorrow.

Update 20090709 pm – installed crunchbang

July 9, 2009

I did some backups this afternoon and installed crunchbang. I made a few partition changes. One thing I almost regretted off the bat was only setting aside only 5GB for / and now it’s about half full. I have separate partitions for /home and /boot as well; this time I decided to go ahead and set up a really large FAT partition (mount point /windows in Linux, D: in Windows) to share data between operating systems. I transferred my music collection and some documents to the FAT partition and set up links (shortcuts) in Windows so everything is basically just as it was before.


I know, I know. That’s a little harder than Vivaldi and Schubert.

I have a few nits to pick. I love the fact #! has some of my favorite apps. I went to use naim and it’s configured to open in GNU screen. Fine, I can live with that. But after it showed that it was starting in screen, I did C-a c to open a new terminal instance within screen. Nothing happened. So I tried again. Then I opened another terminal to check. Sure as shit, screen was running but naim was running separate. WTF?! So I shut down naim, attached to the screen session, and tried to start naim again. It detached screen and started running on its own. I quit naim again and tried starting within screen again using the –no-screen flag, got some error messages, and then naim finally started within the screen session rather than outside it. I’ve used naim and screen so much that I know this shouldn’t be happening. I didn’t spend any time beyond that to see what was happening, but I have the most recent sources and I’ll probably go ahead and recompile it myself so that it functions the way I want it to.

Another thing, #! has a few remaining clues that it once offered xfce. I don’t know if some of those things are there as dependencies of something else. I saw libthunar-vfs* and xfburn (brasero is in the base as well) along with a couple libxfce* things. Could be in use, but I’m going to see what happens when I start de-bloating (heh) it this weekend.

Speaking of which, I went quickly through the list to find things to get rid of after installing emacs22-nox. Here’s the starting point. Maybe will fit when I’m done. 


 That’s subject to change — I don’t know what some of these (agave?) are and there may have been something else I overlooked as I quickly edited the list. I’ll leave any of those lynch-pin packages that look like they’ll remove half the system with them. I know I don’t need kernel headers. I love vim and mutt but I’d rather leverage emacs for all I can. I also like dwm but I doubt I’ll use it on my AA1, even though I’ll probably install ratpoison sooner than later.

My impressions over all are really positive. Surprisingly positive. I didn’t have a bunch of stupid icons to delete from either the desktop or the menu. I didn’t have to go find dubious codecs or closed source stuff (Skype, Flash) I want. I had a few services to shut off by default but that’s going to happen with just about any distro anymore.

That’s it for today. It’s bedtime.

Update 20090705 – services trimming, fluxbox tweaking, added xsel, dircolors, etc

July 5, 2009

I was going to install some ratpoison-friendly tools late (for me) last night but, as usual, they come with so much overhead that I decided against installing. These are things that work well regardless of window manager. I’d run into similar bloat issues back when I was using Debian on my old laptop — try to install something light and it comes with MBs of dependencies that aren’t needed unless you compile with every option. This is one of my biggest gripes against binary-based distros. For the convenience of not having to compile anything, you’re hostage to how others compile them for you.

This time the apps I wanted to add were xsel and xbindkeys; the dependencies in Fedora are guile and tcl/tk.


Had to say no. I think I can add xsel without guile or tcl/tk — I’ll check and see in a bit. (Edit…) Okay, I’ve installed xsel because it has no dependencies I didn’t already have installed. I could live with guile but I’m not going to install even more languages like tcl just to use one small app. Fedora comes with enough as it is. Why not streamline everything and use perl, python, or lua only? I think I installed ruby when I installed mew. I wish everything in open source was more standardized and more attention was paid to reducing dependencies so you don’t have disparate libs for disparate apps like this.

I also spent a little time last night trimming down services that start up in my favored run level. I decided to start CUPS manually since a lot of the time I’m not connected to my main printer or near enough one of the available network printers to get my stuff. I also shut off the NFS-related (rpc) services, IPV6, and a few others.

This morning I started on something totally unimportant except to Linux “reviewers” (especially the ones at distrowatch), aesthetics. I wanted something a little less dark. This is it for now. Whatthefuckever.


Of course, my terminal is still black and about 75% of what I do is in that (screen) so it doesn’t make much difference. I decided to alias ls to include dircolors in my mksh profile so I have a little more color there now. Not a big deal either way. Same information as before.

Since I added more stuff in my .xinitrc, it’s apples to oranges comparing initial RAM hits. At login, though, I’ve lost about 10 more MB. I know there are people who consider unused RAM a waste of resources, but I find it more wasteful to clog up RAM with things that won’t be used or which serve dubious purposes lacking any utilitarian value (including wobbling windows).

I still have more things to do with fluxbox configuration, especially adding more keybindings. It’s kind of awkward the way it’s set up now with some of the defaults. I also want to add more things to the menu to automate tasks.

That’ll all have to wait. I hadn’t planned on doing any of this last night or this morning. More during the week when (if) I find time.

Update 20090701

July 1, 2009

No big news Linux-wise on my AA1. I’ve removed a few more things after tossing a lot of Gnome-related stuff last weekend. I didn’t measure how much space I recovered from the bloatware but I started keeping track of what I deleted after that. Here’s a summary (asterisk denotes things I added and removed):

 kernel (         50 M     original kernel, now on third update
 pidgin                       2.4 M     default
 libpurple                     22 M     holy fuck, 22MB?? is that needed for finch?!
 compiz                       974 k     compiss? wtf?
 compiz-fusion                5.0 M     compiss? wtf?
 compiz-fusion-gnome          1.7 M     compiss? wtf?
*emelfm2                      1.7 M     preferred to nautilus (now using dired and shell)
*lxpanel                      595 k     dumb idea, now considering using dzen
 evolution                     38 M     holy shit, over 50MB for email??
 evolution-data-server         11 M
 evolution-perl               7.6 k
 evolution-webcal             338 k
 bug-buddy                    2.3 M     why does this need evolution?
 nautilus-sendto              413 k
 totem-pl-parser              962 k     another MB saved
*pekwm                        817 k     fluxbox is better
 goffice04                    3.5 M     had already removed abiword
 libabiword                    22 M     abiword is not small
 httpd                        2.7 M     no need for apache, nginx for testing http
 httpd-tools                  129 k
 gnome-user-share             256 k     gnome-no-user-here
 nano                         1.4 M     waste of space - {vi,emacs} rules!
*zile                         217 k     broken commands?
 gok                          9.3 M     no-gnome-no-voice
 b43-fwcutter                  19 k     misc firmware i don't need
 bcm43xx-fwcutter              62 k
 ipw2100-firmware             604 k
 ipw2200-firmware             563 k
 iwl3945-firmware             446 k
 iwl4965-firmware             373 k
 iwl5000-firmware             344 k
 japanese-bitmap-fonts         26 M     greek to me

Note I’ve removed four things I installed. I didn’t like having to set up nautilus to work the way I wanted it to so I installed emelfm2; I prefer two-pane managers like that, mc, vifm, etc. I decided I didn’t need emelfm2 anymore (or zile) when I decided to install emacs (which has its own file manager, a mode called dired). I didn’t know if lxpanel would work well with ratpoison or not. I didn’t like it. From my remark next to pekwm, you can see that I wasn’t blown away.

I’m using emacs for as much as I possibly can and trying to get even more out of it. That includes everything from file management (as noted above) to e-mail (mew) to IRC (erc) to editing. I still prefer vim; viper mode is okay but I’m mostly using the convoluted emacs strokes. BTW, my ratpoison escape sequence is C-space which conflicts with emacs’ set mark; C-@ does the same thing. I may rebind to something else in ratpoison.


Things that have surprised me include the size of all the stuff related to evolution, pidgin, etc. I didn’t notice gok until I played around with festival, which appears to be broken (but text2wave works so I’m keeping it a while) — not sure if it’s broken from having removed pulseaudio or more permission-related problems or what.

I’m on my third updated kernel now. I only removed the original, still have the previous update installed. (I’m running my updates manually. I may set that up in at since I’m using Linux only sporadically right now.)


I haven’t diligently gone through my installed-list to see what else I can remove so there’s probably more stuff that can go.

I’m considering adding X headers so I can compile dmenu, jwm, and/or dzen. No hurries because the rest of my week is going to be hectic before the holiday. I probably won’t bother because I have all I want/need for now.

I also see that PCLOS 2009.2 is out and the roadmap for 2009.3, particularly updating the kernel and GCC, interest me. So, too, does the fact the distro is centralizing the releases of KDE, Gnome, Xfce versions. Also in the works are LXDE and e17 versions. Why not a ratpoison version, you haters?

Adios Gnome

June 27, 2009

I went ahead and committed to some changes on my Fedora 10 installation on my AA1 this evening. Gone are a lot of Gnome things — thirty-three packages so far including metacity, cheese (POS), istanbul (I’ll figure out something else, maybe), and a whole lot of stuff that I can live without. That includes rhythmbox. I can live with the mtp-tools since either way I have much less control over the device’s (Samsung S3) directory hierarchy than in Windows.

Since gdm was among the cruft deleted, I now boot into runlevel 3; I’m still at about 100 MB of RAM at boot but I think I can get that down a bit more. As I suspected, booting into gdm really slows things down. I’m not running any legit benchmarks but the time to a login prompt is faster.

I also edited my networking to start at boot rather than in X so now I won’t lose a connection just because I’m not running X or switching window managers. That annoyed the hell out of me — start something like music streams or downloads in screen, detach to switch window managers, lose wifi, lose everything related to networking. Not that wifi has exactly proven stable under Fedora.

Speaking of window managers, ratpoison is my new default window manager. Surprised? I also added terminus fonts and other cool stuff.

I also know I have more crap to get rid of because I wasn’t too aggressive; I see a lot that can go now that I’m looking at my installed list. I really don’t think I’ll need compiz for ratpoison. I also still have lxpanel installed even though I’m very sure I’ll never set it up with ratpoison again. I also saw apps like evolution and pidgin I’m unlikely to ever use  on this.

More tomorrow if I get time.

Update 20090627

June 27, 2009

I’m still unable to run yet (lingering fatigue from the flu combined with a heat wave) so my early morning hours are filled with catching up with work. Screwing around with Fedora has been an anti-priorirty until this morning (at 4:30 no less).

I think I booted into Linux three times all week (checked last: four times – twice on Monday, once Tuesday, once this morning). Spent most of the week working within Windows playing catch-up. I never installed Firefox under XP on my AA1; I’ve been using IE8 and Opera instead. I finally installed xulrunner and conkeror, though, yesterday. May install conkeror under Fedora, too.

Here’s GNU screen running mplayer (streaming, emacs opened with probably two dozen more buffers than I’m using or paying attention to (mostly dired — need to see if I can reuse  the same buffer), w3m opened to my blog, and some chatting. This is all within ratpoison, of course. I got rid of that lxpanel thing.


I installed GraphicsMagick instead of imagemagick so my file names are automatically set and everything’s handled with simple keystrokes. I saw that GraphicsMagick did the same things as imagemagick only faster and better with fewer libraries. Not sure how true the claims are but I decided it was worth a try. Only difference I had to adjust to was invoking “gm” before imagemagick command names in my scripts and configuration files (e. g., the aliases and commands I have set up in .ratpoisonrc).

Likely to remove some Gnome bloat sooner than later, but still have some apprehension. I wanted to see where pekwm would fit in comparison to ratpoison and fluxbox. It was much closer to fluxbox so I’ll remove it.

window manager resource use
doesn't include additional/related processes
taken at fresh start
ps aux | grep [window manager name]

lucky13      0.1  0.4  10264  4172 ?        S    04:43   0:00 pekwm
lucky13      1.6  0.4  10808  5068 ?        S    04:46   0:00 fluxbox
lucky13      0.2  0.1   5476  1556 ?        S    04:47   0:00 ratpoison

pekwm with default theme
fluxbox theme "green tea" and very small menu
ratpoison with custom .ratpoisonrc

Not doing anything drastic today beyond tweaking .emacs and moving old scripts to the AA1. I’ve considered upgrading the AA1 to Windows 7 when it’s released (October 22). I’d like to see that everything’s working better under Linux than it has thus far, which is why I still have XP installed and why I’m still leaning towards Windows 7. Right now there are too many things keeping me from considering running Linux-only on this: having to boot with an SD card inserted to use the reader, crazy wireless shit that’s happened on multiple occasions now (changing SSIDs and even disabling the wireless card), etc.

One final note about the DSL hard drive PDF I’ve not been able to finish yet. I don’t know if or when I’ll get around to it between catching up from being sick to vacation to the simple fact that DSL is dead and I think there are too many better options for those who want a traditional hard drive install. I thought interest would wane since DSL’s development has come to a screeching halt (last time I checked, John Andrews had posted no updates, roadmaps, polls for what direction users wanted DSL to go, etc.), but every day I’m getting hits from DSL forum links and from Google searches related to DSL hard drive installs. So maybe I’ll finish it anyway. Even though it’s about half finished (I want to add new screenshots and other images to make it as easy as possible) I’d rather spend that time writing a guide for something under active development. Maybe I’ll post my own poll about all that and see if there’s any interest either way.

Dumb Idea: ratpoison with lxpanel

June 23, 2009

Dumb idea of the day: I set up lxpanel in ratpoison. What an eyesore.


The panel itself doesn’t use up much resources, but those silly little applets do. First to go after these screenshots was the CPU monitor one.


I’m giving up 1024×24 pixels. Guess the coolest thing is the menu works. The rest of it is kind of stupid, IMO. I just removed useless crap like the showdesktop button, task tray, etc., and it looks even more retarded since everything had to slide all the way to the left. I’ll fix that and see what I can do to make it behave better and actually serve a more useful purpose than adding a Web-2.0 shiny bar across my screen with a menu button and application icons and applets that suck up CPU cycles and clog RAM. Can this panel operate with keystrokes to get to the menu — under ratpoison? Bet not.

Anyway, I changed my .ratpoisonrc to pad the top 24 pixels for the panel (the default for the panel was 26 pixels but I reduced that by 2; I set the panel on top rather than bottom) and added an unmanage line (lxpanel’s window name is “panel”):

unmanage panel
set border 0
set padding 0 24 0 0

Then restart ratpoison (ctrl-<escape sequence>: restart) and voila, I’ve lost a few pixels for a shiny freaking panel on a cool window manager that doesn’t really need (or want) one.

UPDATED 11:34 US/Central – After removing some stuff and realizing the alpha/opacity settings in the configuration dialog for lxpanel weren’t working right, I threw caution to the wind and ignored the advice of the developers to not manually edit it. Now have a panel I might be able to live with if I really wanted one. Solid color, clock moved over (thanks to a 887 pixel <space> setting!).


I still think it’s a waste because it requires use of a mouse to do anything. Maybe I can bind its menu to something so I don’t have to use a mouse to get to it. Don’t know. Don’t care. I think something like Ion3 or dwm which have a place for collecting/tabbing window title bars makes more sense than using a panel like this in ratpoison. But if I ever use oroborus again, I’ll keep this thing in mind — probably a better (low-resource) combination than using it with OpenBox.

Fedora 10 on AA1 Update: ratpoison and screen

June 22, 2009

Been setting up ratpoison and screen in Fedora 10 this morning since I can’t run yet. Now all my apps will open full screen when I open them in other window managers. Cool!

Here are some screenshots. First up, I ran into a bit of an issue using aterm for the first time ever. Maybe need to recompile? (UPDATE: Doh! No, it’s all good. I just checked my .Xresources and commented out the geometry line. Works now.)


Another app I’ve found to be messed up is zile. I installed it yesterday and the replace-string mode isn’t there (neither are others like list-commands); M-x re[tab to complete] resulted in only one (recenter) match. No problem, I’m probably installing emacs (no X) anyway.

The terminal in these shots is xterm. The blue shit on the bottom of these shots is from the gdm theme. Yet another reason to skip that and use a proper console login.

Here’s a shot of “free -mt” (aliased) at fresh boot.  I don’t have resources trimmed yet nearly as much as I want. I can only imagine how bloated that default gdm theme is. One thing I keep noticing about default backgrounds and themes is that they’re not designed for the lowest common denominator — which really is a disservice to users of older, slower, less-able hardware whom Linux advocates have always targeted.


Hard to believe I had Gnome trimmed down to a similar level. Need to start with fewer services running! Also need to quit using Gnome apps to do little things like an Ubuntu user would; I love that message, though. Haven’t installed imagemagick yet.

Finally, here’s GNU screen in xterm in ratpoison after starting and running a bunch of other stuff.


As you can see, I’m using mksh as my shell. I was going to install pdksh again but I saw the size of the binaries. Less bloated and more functional than bash either way. Guess I’m also kind of biased because of the BSD thing. Maybe I’ll try MirOS one of these days; not sure it would run on an AA1 (MirOS uses a no SMP kernel, Atom is multi-thread) or how much hardware support it would lack (does it have ath yet?).

Have a bit of mucking around with my wrapper and other scripts since aterm’s not working in ratpoison — using mplayer in terminal to playback audio and video since that’s a bit easier on the system than totem and everything else dressed up in GTK+. Not going to start compiling stuff yet even though I want either ratmen or dmenu; I haven’t even looked to see how headers are packaged in Fedora. I’ll probably set up a text-based menu (see Oct ’08 post “More GNU screen Tweaks”) instead before I do anything else.

UPDATE 06:16 US/Central – Installed emacs (nox) and removed zile. Already changed my scripts to use xterm so I’m probably removing aterm and libafterstep and whatever else was installed with it.


Had to manually link emacs-22.3-nox to emacs. My mplayer wrapper also now opens PLS streams in screen.

Added Smaller Window Managers on Aspire One

March 21, 2009

Continuing to configure PCLOS on my AA1, still some hardware issues to iron out. Still trying to reduce system overhead. Had one total lock up earlier when trying to get the card readers to work; also failed to successfully recover from suspending last night. Way to go, Team Linux. Wankers.

Oh yeah, I also found a newer toy of mine that will not work under Linux. I’ll have a separate post about that tomorrow or Monday. It’s a Windows world, baby. Get over it.

Tired of hardware issues — thankfully, XP works fine — so I’m moving on  to less serious things. I really like KDE but I think it’s a bit much. PCLOS doesn’t have much besides KDE, Gnome, Xfce, fluxbox, windowmaker, and OpenBox in their repositories. Gotta take matters in my own hands. I installed X lib headers. Compiled jwm, dwm, ratpoison. Added kdm desktop session files for each. Need to make jwm menu and add some of my old tweaks. Running ratpoison now. Freaking COOL — ratpoison on an Aspire One with its puny keyboard:


Also compiled emacs, naim, and tmux (BSD-licensed alternative for GNU screen) from source. I have to say tmux is more than a BSD-licensed alternative to screen — it seems to better execute the whole multiplexing concept and it’s a lot smaller.

I’m using pdksh from the repositories (because I saw it listed). Default terminal in ratpoison is Eterm (also from repositories). What else? Dillo from the repositories is going to be replaced by dillo from source and patch for tabs.

I mentioned my aggravation at the way this was configured via the automatic set up and that I could end up doing something drastic. I’m not going to add much more since I have the things I want and need (, mplayer for multimedia, browsers, etc.), and I’m probably going to start removing a bunch of stuff in the interim. Longer term, I’m leaning towards a much leaner install of Slackware or NetBSD. That will have to wait at least another week. Just not enough time to deal with it now.

Edit20090322: Just have a minute to update this. I ditched Eterm for aterm, recompiled ratpoison accordingly (it allows compile-time setting of default X terminal). Here’s a shot of a tmux session and a ratpoison window listing.


One of the cool things about tmux is that it automatically updates its bottom title bar with the current process’ names. So I could stop top in the fourth (3) instance and its title would change back to ksh.

I compiled elinks unstable branch yesterday. I’ll probably revert to stable sometime this coming week.

BTW, I really hate the wallpaper (five minutes wasted in GIMP) and that font sucks. I’ll install terminus when I get a chance. No time now.

A Quick Ratmen Tutorial

August 24, 2008

EDIT (2010-02-06): Ratmen and ratmenu syntax is identical so this applies to both programs. Feel free to comment if you have any questions. I received an IM asking for a screencast of ratmen(u) in action. As it turns out, I’ve again been running ratpoison most of the time the past few weeks so I’ll try to get one posted at my youtube account (and embedded in a separate post on this blog) in the coming days or weeks.

This is in response to linuxam’s question about ratmen, which I also use in other window managers.

First, you have to keep in mind that ratmen isn’t a menu program in the normal sense of the word. It’s basically a command line invocation, which is why users get the general command syntax when typing ratmen. This lends itself very well to scripting (wink). It also means it can be dynamic — since it’s invoked independently of everything else, it doesn’t require restarting.

Second, you’re not tied to one menu since it can be scripted. You’re limited to the number of free bindings available in ratpoison (or any other window manager) or the number of files your system can hold since you can presumably nest multiple ratmens within other ratmens (which may have some purpose if you have enough stuff to stick in menus but I only run a few). It’s entirely customizable which is why I prefer using it in other window managers.

Keep in mind the basic syntax in the –help/error message: you need to write a very simple shell script to serve as your menu. I’m attaching a screenshot from my laptop. I set up rox filer earlier this afternoon and am using oroborus (like ratpoison, oroborus has no menus or panels or stuff but it plays better with rox).

As you can see, I have three icons on top next to the Home folder that I dragged onto the desktop from my ~/bin directory. One is my main menu (displayed in the left box) and the other two are for remote access to other machines and a menu for system commands (umounting various devices, managing services, reboot, shutdown, etc.). This is the text for the main menu.

# my ratmen

ratmen  \
"opera" opera \
"gvim" gvim \
"aterm" aterm \
"eterm" "Eterm -F -xos4-terminus-medium-r-normal-*-*-140-*-*-c-*-iso8859-1" \
"gimp" gimp \
"mc" "aterm -T mc -e mc" \
"snownews" "aterm -T snownews -e snownews -u" \
"dillo" dillo \
"calcurse" "aterm -T calcurse -e calcurse" \
"mc podcasts" "aterm -T mc -e mc ~/podcasts/ /mnt/vl-hot/sda/vol1/audios/music/ " \
"mc astro" "aterm -T mc -e mc ~/ ~/astro/ " \
"sylpheed" sylpheed \
"elinks" "aterm -T elinks -e elinks" \
"firefox" /opt/firefox/firefox \
"gftp" gftp \
"xzgv" xzgv \
"transmission" transmission \
"screenshot" "sleep 4; import -window root screenshot-$(date +%Y%m%d%H%M%S).png"

Add paths if necessary (the PATH comment isn’t necessary). This is then made executable. Then add it to your .ratpoisonrc either via binding or definekey. My menus are all via definekey command, which I remember as P for programs, R for remote, S for system, W for open windows, etc. The basic syntax for that is:

definekey top M-P exec ~/bin/mymenu.main

(I use alt-capital letters so as to not conflict with other keybindings. Use what you like. You can just as easily use bind if you prefer ctrl-t or whatever escape key plus whichever bind key.)

From the ratpoison wiki I got this for getting a ratmen of open windows from which to scroll:

definekey top M-W exec ratpoison -c "windows '%t|=#~ratpoison -c \"select %n\"'"|xargs ratmen --background grey22 --foreground yellow -d'|=#~'

Finally, you can set up ratmen variables in your .Xdefaults file. It’s hard to give it any aesthetic appeal unless you have some cool font you like. I stick with colors that contrast a little and then set up special color settings to override the defaults, such as the yellow and dark grey above or the red and black in my system menu. Here’s the ratmen settings from my .Xdefaults:            snazzy
ratmen.align:             left
ratmen.background:         grey22
ratmen.foreground:         darkorange
ratmen.font:            -xos4-terminus-medium-r-normal-*-*-200-*-*-c-*-iso8859-1
ratmen.mouse:             false
ratmen.scrollOffset:         5
ratmen.unfocusExit:         true

You can set ratmen.mouse to true if you want to be able to point and click on it (which I may do while I use it in oroborus). The choices between dreary and snazzy only have to do with how it scrolls. Dreary is the standard scrolling style where the highlighted part goes up and down while snazzy has a fixed (at top) position for highlight while the menu items scroll up and down.

It’s really very easy to get it set up once you have the basic idea down that it’s not a standard menu but rather a shell script. From there, it’s just a matter of doing things your own way and “dressing it up” to suit your own tastes including nesting ratmens.

Hope this helps.