RATPOISON(1)
okay so bestie, you just opened ratpoison(1) from the General Commands Manual and I'm literally so hyped to walk you through it. it's giving "window manager that doesn't need a mouse", and honestly? iconic. no cap. ๐ญ๐
โจ NAME โจ
ratpoison โ window manager without mouse dependency
๐ธ SYNOPSIS ๐ธ
ratpoison [-hv]
ratpoison [-d dpy] [-s num] [-f file]
ratpoison [-d dpy] [-s num] [-i] -c command [-c command ...]
๐ DESCRIPTION ๐
okay so ratpoison is a Window Manager without fat library dependencies, fancy graphics or rat dependence. yes, literally. it's not like other WMs. ๐ซถ
the screen can be split into non-overlapping frames. all windows are kept maximized inside their frames. periodt. ๐
all interaction with the window manager is done through keystrokes. ratpoison has a prefix map to minimize key clobbering. so your keys stay yours, bestie. โจ
the options are as follows:
-c,--commandโ Sendratpoisona command. there must be aratpoisoninstance running as window manager for the given display/screen for this to work. do not forget to quote the command if it contains spaces. for example:
ratpoison -c "echo hello world"
-d,--displaydisplay โ Set the X display to use or send commands to.-f,--filefilename โ Specify an alternate configuration file. If this is not given,ratpoisonwill try$HOME/.ratpoisonrcand if that does not exist/etc/ratpoisonrcand execute each command when starting up.-h,--helpโ Show summary of options.-i,--interactiveโ Execute commands given with-cor--commandin interactive mode. That means it will behave exactly as if called withC-t :like prompting for missing arguments and things like that.-s,--screennumber โ Only use the specified screen.-v,--versionโ Show version of program.
๐ KEY BINDINGS ๐
To avoid conflicts with other programs, all default ratpoison key bindings start with an escape key, per default C-t (read Control-t). Some important default key bindings:
C-t ?โ Show key bindingsC-t cโ Start an X terminalC-t nโ Switch to next windowC-t pโ Switch to previous windowC-t 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9โ Switch to window number 1 | 2 | ...C-t kโ Close the current windowC-t Kโ XKill the current applicationC-t s | Sโ Split the current frame into two vertical | horizontal onesC-t Tab | Left | Up | Right | Downโ Switch to the next | left | top | right | bottom frame.C-t Qโ Make the current frame the only oneC-t :โ Execute aratpoisoncommand
Further default key bindings can be found in parentheses after the commands in the next section.
๐ COMMANDS AND DEFAULT ALIASES ๐
abort(C-t C-g) โ Do nothing and that successfully. (Useful if you pressedC-tin error).addhookevent command โ Add a hook: run command whenever event is called. Possible events are:deletewindowโ Run after a window is withdrawn.newwindowโ Run after a new window is mapped.keyโ Run whenever a top level key is pressed (by defaultC-t).quitโ Run before exitingratpoison.restartโ Run before restartingratpoison.switchframeโ Run after a frame actually switched, but before the window in it is focused.switchgroupโ Run after selecting a new group.switchscreenโ Run when the user switches to a different screen.switchwinโ Run after a new window is selected. (With dedication, it may already be inactive again, if it was put into another frame)
aliasalias command โ Add alias as new way to call command.bindkey command โ alias fordefinekey root key commandbanish(C-t b) โ Banish the rat cursor to the lower right corner of the screen.banishrelโ Banish the rat cursor to the lower right corner of the current window. If there isn't a window in the current frame, it banishes the rat cursor to the lower right corner of the frame.chdir[directory] โ If the optional argument is given, change the current directory ofratpoisonto directory. If nothing is given, change it to the value of the environment variable"HOME".clrunmanagedโ Clears the unmanaged window list.cnextโ Likenextbut switch to the next window with another resource class than the current one. (That means the next window belonging to another type of application than the current one.)cprevโ Likeprevbut switch to the previous window with another resource class than the current one. (That means the previous window belonging to another type of application than the current one.)colonratpoison-command (C-t :) โ Execute ratpoison-command interactively. (i.e. ask for possible missing arguments.)cotherโ Likeotherbut switch to the window of the current group that was last accessed and has another resource class but is not currently visible.curframe(C-t F) โ Show a bar marking the current frame.definekeykeymap key command โ Add a new key binding in keymap for key to execute command. Default keymaps aretopnormally only containingC-t, which reads a key fromroot, containing all the normal commands.
Note that you have to describe ":" by "colon", "!" by "exclam" and so on. If you cannot guess a name of a key, try either C-t key and look at the error message, or try :describekey root and pressing the key.
dedicate[0 | 1] โ Consider the current frame dedicated/chaste (1) or promiscuous (0).
A dedicated frame will not accept new windows. When new windows are to be focused, they will be opened in a non-dedicated frame instead.
If no argument is given, toggle the current dedicateness. By default no windows are dedicated.
delete(C-t k) โ Close the current window.delkmapkeymap โ Deletes the keymap named keymap, that was generated withnewkmap. The keymapstop(or whatever was specified byset topkmap) androotcannot be deleted.describekeykeymap โ Grab the next key. Similar toreadkey,describekeyshows only the command in keymap, that would be executed byreadkey.echotext โ Show text asratpoisonmessage.escapekey โ Update the default escape key to key.
Strictly speaking it updates the readkey root command in the keymap top to key, the other binding in root to key, and meta binding in root to key without modifiers or C-key if key has no modifiers. (If set topkmap was called with an argument other than top that will be used instead of top.)
exchangedown(C-t C-Down) โ Exchange the window in the current frame with the window in the frame below the current frame.exchangeleft(C-t C-Left) โ Exchange the window in the current frame with the window in the frame left of the current frame.exchangeright(C-t C-Right) โ Exchange the window in the current frame with the window in the frame right of the current frame.exchangeup(C-t C-Up) โ Exchange the window in the current frame with the window in the frame above the current frame.execshell-command (C-t !) โ Spawn a shell executing shell-command.execashell-command โ Spawn a shell executing shell-command, without remembering the current frame, so that_NET_WM_PIDdeclaring programs will be placed into the frame active when they open a window instead of the frame active whenratpoisongets this command.execfframe shell-command โ Spawn a shell executing shell-command, showing_NET_WM_PIDsupporting programs in the given frame instead of the frame selected when this program is run.fdump[screenno] โ Output the defining data for all frames of the current screen, or for screen number screenno if this is specified.focus(C-t Tab) โ Focus the next frame.focuslastโ Switch to the last selected focus.focusleft(C-t Left) โ Switch to the frame to the left of the current one.focusdown(C-t Down) โ Switch to the frame beneath the current one.focusright(C-t Right) โ Switch to the frame to the right of the current one.focusprevโ Focus the previous frame.focusup(C-t Up) โ Switch to the frame above the current one.frestoreframes โ Replace the current frames with the ones specified in frames in the format as generated byfdump.fselect[frameno] (C-t f) โ If an argument is supplied, switch to a frame given by number frameno.
If no argument is given, show a frame selector in each frame and wait for a key to be pressed. If the key matches an existing frame selector, this frame gets focused.
Frame selectors are by default the numbers starting with zero, but they can be changed by setting framesels.
gdelete[group] โ If the optional argument group is supplied, delete group. Otherwise delete the current group. If the last group is deleted, a new group with namedefaultis created. The group has to be empty, otherwise it cannot be deleted.getenvvariable โ Output the value of the environment variable variable.getselโ Paste the current X Selection into the current window.gmergegroup โ Move all windows from group group into the current group.gmovegroup โ Move the current window into group group.gnewgroup โ Create a new group with name group and select it. Most window commands only see (and thus select, consider next, previous or last) windows within the group active when they are issued.gnewbggroup โ Create a new group named group, but do not select it.gnextโ Select the next group. Most window commands only see windows in the effective group.gnumber[old new] โ Give the number new to the group with the number old or the current group.gotherโ Select the last accessed group. Most window commands only see windows in the effective group.gprevโ Select the prior group. Most window commands only see windows in the effective group.gravity[nw | w | sw | n | c | s | ne | e | se] โ Change how in its frame the current window is aligned.grenameโ Rename current group.groupsโ okay so this one spits out every group and its number. like a roster but for your window groups ๐gselectgroup โ picks the group named group. boom, you're there โจhelp[keymap] โ if you pass the optional keymap, it lists every keybinding in that keymap. no keymap? then it lists all keybindings in keymaproot. iykyk ๐hsplit [l/p | [-]pixels]โ split current frame into a left frame and a right frame. no parameter? split in halves. if two numbers separated by a slash (/) are given, the left one is l times the pth part and the right one is (p - l) times the pth part of prior width. otherwise the right half is pixels wide, or the left one is pixels wide, depending on whether there's a-in front of the number or not. bound toC-t S. frame math, but make it fashion ๐inextโ likenext, but switch to the next window with the same resource class as the current one. aka next window from the same app ๐ฆinfoโ output the current width, height, window number and window name of the current window. (what "name" means is chosen byset winname.) bound toC-t i. receipts for your window ๐iprevโ likeprev, but switch to the previous window with the same resource class as the current one. same app, other direction ๐iotherโ likeother, but switch to the window of the current group that was last accessed and has the same resource class but is not currently visible. the hidden sibling window ๐killโ close the X-connection of the X-client responsible for the current window. bound toC-t K. yes it's giving murder, but for X clients ๐lastmsgโ reshow the last message. bound toC-t m. the group chat scrollback but for ratpoison ๐licenseโ show ratpoison's license. bound toC-t V. legal queen behavior ๐linkkey [keymap] โ do what key is bound to in the keymap keymap if supplied. otherwise what key is bound to in keymaproot. shortcut to a shortcut ๐listhookevent โ list all commands specified withaddhookto be executed when even event occurs. hook receipts ๐ชmeta[key] โ send the escape key (that which normally isC-t) to the current window. if key is specified, this is sent instead. note: some applications by default ignore the synthetic key that is sent using this command as it is considered a security hole.xtermis one such application. bound toC-t t. security warning bestie โ ๏ธmsgwait[seconds] โ set the duration the message window is shown. if seconds is zero, wait infinitely. deprecated, please set themsgwaitvariable instead. old way, do the variable instead ๐ซถnewkmapkeymap โ generate a new keymap named keymap. this keymap can be used to add new key-command mappings to it withdefinekeyand can be called withreadkey. fresh keymap just dropped โจnewwmnew-window-manager โ quit ratpoison and execute new-window-manager instead. passing the aux ๐งnextโ switch to the next window in the current group. bound toC-t Return,C-t n, andC-t space. next next next โก๏ธnextscreenโ switch to the next screen. (if you have multiple physical ones.) bound toC-t N. multi-monitor girlies rise ๐ฅ๏ธnumbernew [old] โ give the number new to the window with the number old, or to the current window. renumbering era ๐ขonlyโ remove all frames on the current screen except the current frame and maximize this one to the size of the whole screen. bound toC-t Q. main character frame energy ๐otherโ switch to the window of the current group that was last accessed but is not currently visible. bound toC-t C-t. the one you forgot was open ๐ซฃprevโ switch to the previous window in the current group. bound toC-t p. back it up โฌ ๏ธprevscreenโ switch to the previous screen. (if you have multiple physical ones.) bound toC-t P. other monitor said hi ๐ฅ๏ธprompt[prompt] โ ratpoison will ask the user for input, showing prompt (or a single colon, if no argument is given) and output the input the user has made. note: this command probably does not make much sense in interactive mode. asking for input, but make it awkward ๐ญputselx-selection โ replace the X selection with the text x-selection. it can be inserted into the current window withgetsel. clipboard but make it ratpoison ๐quitโ quit ratpoison. bye bestie ๐ratinfoโ display the x y coordinates of the rat cursor relative to the screen. where's the mouse? screen edition ๐ratrelinfoโ display the x y coordinates of the rat cursor relative to the current window or current frame if no window is focused. where's the mouse? window/frame edition ๐ratwarpx y โ move the rat cursor to the position (x, y). teleport the mouse โจratrelwarpdeltax deltay โ move the rat cursor to (deltax, deltay), relative to the current position. mouse movement, but relative ๐ratclick[button] โ simulate a rat click with button (button 1=left button if none given). click click ๐ฑ๏ธrathold{up | down}[button] โ simulate pressing|releasing rat button button (1=left button if none given). hold or release, your call ๐ฑ๏ธreadkeykeymap โ grab the next key pressed, and execute the command associated to this key in keymap. to show it is waiting for a key, ratpoison will change the rat cursor to a square ifwaitcursoris set. this command is perhaps best described with its usage in the default configuration: by pressingC-t, which is the only key in the keymaptop, the command"readkey root"is executed. the next key then executes the command in keymaprootbelonging to this command. keyboard inception โจ๏ธredisplayโ extend the current window to the whole size of its current frame and redisplay it. (useful to redisplay normal windows or bring transient windows to the full size of the frame as only normal windows are maximized by ratpoison.) bound toC-t l. refresh her ๐ซredoโ revert the last undo of frame changes. bound toC-t U. undo the undo ๐remhookevent command โ remove command from the list of commands to be called when event event is hit. (the command has to be specified, as an event can have multiple commands attached to it.) use"listhook hook"to get a list of all attached commands. hook removal service ๐ชremoveโ remove the current frame and extend some frames around to fill the remaining gap. bound toC-t R. delete frame, patch the hole ๐ณ๏ธremovedownโ kill frames directly below the current frame, extending the current frame as much as possible. bound toC-t M-Down. downward frame destruction โฌ๏ธremoveleftโ kill frames directly left of the current frame, extending the current frame as much as possible. bound toC-t M-Left. leftward frame destruction โฌ ๏ธremoveupโ kill frames directly above the current frame, extending the current frame as much as possible. bound toC-t M-Up. upward frame destruction โฌ๏ธremoverightโ kill frames directly right of the current frame, extending the current frame as much as possible. bound toC-t M-Right. rightward frame destruction โก๏ธresize[deltaxdeltay] โ if deltax and deltay are supplied, resize the current frame by that (i.e. move the bottom right corner by the given offsets and then move this frame and resize adjacent frames to make the frames fill the whole screen again). if in interactive mode no arguments are supplied, resize the current frame interactively: bound toC-t r.Returnโ finish resizingC-g,Escapeโ abort resizingC-n,Down,jโ grow verticallyC-p,Up,kโ shrink verticallyC-f,Right,lโ grow horizontallyC-b,Up,hโ shrink horizontallysโ shrink to size of current window
while resizing interactively, changes are in multiples of the amount of pixels given by set resizeunit (by default 10). pixel-by-pixel glow up ๐
restartโ restart ratpoison. reboot her ๐rudeness[rudeness] โ deprecated, please use therudenessvariable instead. old command, new variable ๐ซถsdumpโ output the list of all screens. the screens are separated by commas. each screen is shown as 6 values: its number, its x-coordinate, its y-coordinate, its width, its height and if it is currently selected (1=true,0=false). screen inventory, comma-separated ๐ฅ๏ธselect{- | name | number}โ if a number is given, switch to the window with number number. if a name is given, switch to the window in the current group with name name. blank the current frame if-is given. bound toC-t '. jump to window by number, name, or blank ๐ฏset[variable[value]] โ if no argument is given, output all ratpoison variables and their values. if one argument is given, output the value of ratpoison variable variable. otherwise set variable to value. what values are valid depends on the variable. see the section โVARIABLESโ later in this document for details. the settings menu but text โ๏ธsetenvvariable value โ set the environment variable variable to value. (environment variables will be passed to all programs started from ratpoison.) env vars for your ratpoison children ๐ฑsfdumpโ output all frames similar tofdump, but not limited to one screen, but all screens at once and with the screen number after each frame. frame dump, all screens ๐๏ธsfrestoreframes โ replace the current frames with the ones specified in frames in the format as generated bysfdump. restore that frame layout โป๏ธshrinkโ shrink the current frame to the size of the current window with in. smaller frame, same window energy ๐คsplit[split] โ alias forvsplit. bound toC-t s. split but vertical, basically โ๏ธsourcefile โ read file and execute each line as ratpoison command. run the whole file, line by line ๐sselectscreennumber โ switch to the screen screennumber. (if you have multiple physical ones.) pick a screen, any screen ๐ฅ๏ธstartup_message{on | off}โ select whether ratpoison will show a startup message or not. deprecated, please use thestartupmessagevariable instead. old toggle, use variable ๐ซถswapdest-frame [src-frame] โ exchange the window in src-frame (or the current frame if there is no second argument) with the window dest-frame (or ask interactively which frame to swap with if there is no argument). bound toC-t x. frame swap, no takebacks ๐timeโ output current data and time. bound toC-t a. clock check โฐtitlenewname โ overwrite the title of the current window with newname. all following ratpoison commands will only know the window under the new name. bound toC-t A. rename that window ๐ท๏ธtmpwmtmpwm โ temporarily give control over to the other window manager tmpwm, reclaiming control when that WM terminates. borrow another WM, then take it back ๐ญunaliasalias โ remove the alias alias. alias deletion ๐๏ธunbindkey โ alias forundefinekey root key. unbind but through root ๐undefinekeykeymap key โ remove the binding for key from keymap. key binding, deleted โจ๏ธundoโ un-do the last change to the frameset. (like splitting, resizing, deleting, ...) the amount of steps that can be undone is specified by the variablemaxundos. bound toC-t _,C-t u. undo era โฉ๏ธunmanage[name] โ adds name to the list of unmanaged windows ๐ซถ so like, windows with this name get to pick their own position instead of being managed. Free spirits only.
In non-interactive mode, calling it with no arguments prints the list.
Wanna wipe the list clean again? Call clrunmanaged. โจ
unsetenvvariable โ yeets variable out of the list of environment variables ๐ฎverbexeccmdline โ spawns a shell running cmdline, but like... after showing a message with the command first. So you know what you did. ๐version(C-t v) โ outputs version and compile time info ๐vsplit[l/p | pixels-from-top | -pixels-from-bottom] (C-t s) โ splits the current frame into an upper frame and a lower frame ๐ช๐ช If you give no parameter, it splits in halves. If you give two numbers separated by a slash (/), the upper one is l times the pth part and the lower one is (p - l) times the pth part of the prior height. Otherwise, the lower one is pixels from bottom wide or the upper one is pixels from top high โ depends on whether there's a-in front of the number or not. Sneaky little minus sign, iykyk.warp{on|off} โ picks whether focusing a window moves the rat cursor to wherever it was last time this window was focused, or not ๐
This command is deprecated, bestie ๐ญ please set the warp variable instead.
windows[format] (C-t w) โ in interactive mode, shows the list of all windows in the current group for the duration set by the variablemsgwait. Ifmsgwaitwas zero, it toggles between showing indefinitely and not showing. ๐
The messages get shown in columns or rows depending on the value of winliststyle in the format set by set winfmt. The following substitutions happen in format:
%aโ application name (resource name)%cโ resource class%fโ frame number%gโ gravity of the window%hโ height of the window%Hโ unit to resize the window vertically (height_inc)%iโ X Window ID%pโ process ID%lโ last access number%Mโ stringMaxsize, if it specifies a maximum size%nโ window number%sโ window status (*is active window,+would be chosen by other,-otherwise)%Sโ screen number%tโ window name (seeset winname),%Tโ the stringTransient, if it is a transient window%wโ width of the window%Wโ unit to resize the window horizontally (width_inc)%xโ xine screen number%%โ litteral%
Also, there can be a positive decimal integer number between the percent sign and the format string to specify the length this value should be truncated to if it's longer. (Example: %20t) ๐ฅ
In non-interactive mode, it outputs the list of windows in the current group line by line. The format string can be overwritten by the optional parameter format.
โจ VARIABLES โจ
ratpoison variables can be shown and set with set ๐ The following variables are supported:
resizeunitpixels โ sets the amount of pixels interactive resize adds/subtracts in each step.
Default is 5.
maxundosnumber โ the maximal amount of steps ratpoison can undo with theundocommand.
Default is 20.
wingravity{nw|w|sw|n|c|s|ne|e|se} โ sets the default gravity new normal windows get. Possible values are the same as in thegravitycommand, which changes the gravity of an existing window: cardinal points or numbers1to9.
Default is nw.
maxsizegravity{nw|w|sw|n|c|s|ne|e|se} โ sets the default gravity new self-maximized windows get. Possible values are the same as in thegravitycommand, which changes the gravity of an existing window: cardinal points or numbers1to9.
Default is c.
transgravity{nw|w|sw|n|c|s|ne|e|se} โ sets the default gravity new transient windows get. Possible values are the same as in thegravitycommand, which changes the gravity of an existing window: cardinal points or numbers1to9.
Default is c.
bargravity{nw|w|sw|n|c|s|ne|e|se} โ selects the location where message and prompt bars appear.
Default is ne.
fontfont โ makes ratpoison use font.paddingleft top right bottom โ sets how much space at the borders of the screen will not be used.
Default is 0 0 0 0.
borderpixels โ selects how thick the frame around windows is.
Default is 1.
barborderpixels โ selects how thick the frame around ratpoison's prompt or message windows is.
Default is 1.
inputwidthpixels โ determines the width of the input window.
Default is 200.
barinpadding{0|1} โ if there's padding, determines whether the bar appears at the edge of the screen (1) or at the edge of the window area (0).
Default is 0.
topkmapkmap โ makes kmap the top keymap ratpoison grabs directly.
The default value is top.
waitcursor{0|1} โ determines whether to change the rat cursor when waiting for a key (1) or not (0). Seereadkeyanddescribekey.
Default is 1.
winfmtformat โ chooses the default format for thewindowscommand.
Default is %n%s%t.
winname{title|name|class} โ chooses what's considered the "name" of the window by ratpoison:titleโ the title of the window.nameโ the resource name of the window.classโ the resource class i.e. the name of the application.
Default is title.
fgcolorcolor โ the foreground color of the windows ratpoison creates.
Default is black.
bgcolorcolor โ the background color of the windows ratpoison creates.
Default is white.
fwcolorcolor โ the border color of the focused window.
Default is black.
bwcolorcolor โ the border color of unfocused windows.
Default is black.
barpaddingx y โ sets horizontal padding of ratpoison windows to x and vertical padding to y.
Default is 4 0.
winliststyle{row|column} โ determines whether windows are shown in rows or in columns.
Default is column.
frameselsselectors โ overrides the frame selectorsfselectuses. The first character is the selector for the first frame, the second character is the selector for the second frame and so on.
Using this variable, one can directly access more than 10 frames. ๐คฏ
Default is an empty string, which is equivalent to "0123456789".
historysizenumber โ specifies the maximum number of values kept in input history.
Default is 20.
historycompaction{0|1} โ decides if new input lines added to history delete older equal lines from history.
Default is 1 (on).
historyexpansion{0|1} โ decides if history expansion using!is available. (Can only be activated when compiled with readline's libhistory.)msgwaitseconds โ the duration the message window is shown. If seconds is zero, wait infinitely. โณframemsgwaitseconds โ the duration theCurrent frameindicator is shown. If seconds is zero, wait until the next interactive command. If seconds is-1, don't show any message.startupmessage0|1โ decides whether to show a greeting message at startup. ๐warp0|1โ decides if focusing a window moves the rat cursor to the place it had been last time this window was focused, or not.
Default is 0 (off).
rudenessnumber โ shows or sets what kind of windows are allowed to jostle into the foreground. ๐ค
number is a bitwise OR of the following values:
1โ Transient windows may raise.2โ Normal windows may raise.4โ New transient windows end up in the foreground.8โ New normal windows end up in the foreground.
Default is all allowed i.e. 15.
๐ FILES ๐
~/.ratpoisonrcโ Configuration file read at startup time, if present./etc/ratpoisonrcโ Fallback configuration file, if~/.ratpoisonrcis not found.
๐ช EXIT STATUS ๐ช
The ratpoison utility exits 0 on success, and >0 if an error occurs. Simple as that bestie ๐
๐ AUTHORS ๐
Upstream author is Shawn Betts <sabetts@gmail.com>. ๐ซถ
See the /usr/share/doc/ratpoison/AUTHORS file for other contributors.
This manual page was written by Bernhard R. Link <brlink@debian.org>. The conversion to the mdoc(7) language (http://mdocml.bsd.lv) was done by Jeremie Courreges-Anglas <jca@wxcvbn.org>.
๐ BUGS ๐
Please report any bug you find to the ratpoison mailing-list, โจratpoison-devel@nongnu.orgโฉ. Not me, not your group chat โ the mailing list. Fr fr. ๐
and that's the whole page, bestie ๐โจ this one's the Debian build, dated 2017-03-09, living its best life as RATPOISON(1) ๐ go forth and tile your windows, you absolute icon ๐
๐ฆ where this page comes from
- debian bookworm: ratpoison 1.4.9-1+b1
- debian trixie: ratpoison 1.4.9-1+b1
- ubuntu jammy: ratpoison 1.4.9-1
- ubuntu noble: ratpoison 1.4.9-1
- ubuntu resolute: ratpoison 1.4.9-1.1 ยท GPL-2.0-or-later
- ubuntu stonking: ratpoison 1.4.9-1.1 ยท GPL-2.0-or-later
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms