diff options
| -rw-r--r-- | README.md | 232 |
1 files changed, 176 insertions, 56 deletions
@@ -1,85 +1,53 @@ # Rahm's Rice'd Desktop Environment -This is Rahm's desktop environment. Namely it's an amalgamation of scripts, -executables, scum, villany, and configuration all duct-taped together to create -a marginally functional desktop environment of dubious stability, but it seems -to be pretty good. +This is Rahm's Desktop Environment. It is a *very* configured XMonad/XMobar +based desktop environment. [](https://git.josher.dev/cgit/rde.git/) -(BTW, I'm not actually in Dallas, I'm in the same place as Mr. Money Moustache, -and yes, I use Arch btw) - # Requirements -* Definitely need GHC. If you use Hugs, you deserve the pain. -* X11, duh! -* Xinerama is helpful +* GHC +* X11 +* Xinerama * Monofur NERD Font. Should be included with the NERD fonts package. -* GCC, because when I take off my Functional Programmer hat, I put on my - systems-dev glasses. -* Perl, because when I take off my systems-dev glasses, I put on my UNIX beard. -* Not Python, because when I take off the UNIX beard I skip the Soy latte and go - back to the FP hat. -* Knowledge of Linux/Unix or an intense desire for masochism (which, as - long as it's consensual, I'm totally fine with.) -* Linux. BSD support is coming, be patient!! - * Not Winblows -- Get out of here - * Not MacOS -- I don't have a clever pejorative. - +* GCC +* Perl +* Knowledge of Linux/Unix +* Linux, maybe Mac # Configuration ## Window Manager -The window manager is XMonad, obviously, but _heavily_ configured. - -The way I configured XMonad is to be similar to Vim in that some keys are -actually modal. I.e. require another key-press to effectuate the system - -Probably the biggest difference between this configuration and standard -configurations is that there are _many_ workspaces. Actually, there are 36 -workspaces, one for each letter and digit (in the English alphabet). +The Window Manager is a *heavily* configured XMonad. Many of the keys are +designed to be reminiscent of Vim. -Navigating between all these workspaces is easy, though, just type Mod+g -followed by the workspace you're trying to go to! (G stands for 'go' btw). +Similar to Vim, Rde contains within it, its own kind of "language" called WML +(Window management language) to describe workspaces and windows to make very +powerful key bindngs. See the section about Window Management Language. ### Some things to note -I type in Programmer Dvorak (because of course I do) so many of the key bindings -make little to no sense on QWERTY layout and should probably be changed by the -user. It's in my TODO list to make a QWERTY variant, but I haven't gotten to it. - -_Also_ my ModKey is the Hyper key (because of course it is!), which the astute -among you might notice does not actually exist on the keyboard. Aha! [Rahm's XKb -Layout](https://git.josher.dev/cgit/rkb.git) strikes again! I have remapped -pretty much all my modifier keys and reanimated the long-dead Hyper key! "But, -Rahm, you handsome, yet dark and mysterious \*nix landchad, why would you use -such a key no one uses?", I hear you ask. Well, my delightful, yet young -compatriot, it is precisely because no one uses it that I use it. See, it is a -decent way of preventing conflicting bindings in other applications! Plus it -opens the door for using the Super key is [Rahm's patched -Alacritty](https://git.josher.dev/cgit/r-alacritty.git) and thus use it in -[Rahm's patched Neovim](https://git.josher.dev/cgit/rneovim.git) to potentially -program some of [Rahm's STM32 Christmas -Lights](https://git.josher.dev/cgit/stm34l4.git). **Anyway**, the salient point -is that I recommend you learn Programmer Dvorak and switch your keyboard layout -to [Rahm's XKb Layout](https://git.josher.dev/cgit/rkb.git), but in the off -chance you decide against that, you can change the mod key to Super in -`Main.hs`. +I type in Programmer Dvorak, which means some of the key bindings make more +sense on the Dvorak layout vs QWERTY layout, but many of the keybindings should +work well in both. + +The mod key is by default set to the Hyper Key. One would probably want to +change this in `Main.hs` before using this. Chose the hyper key to avoid conflicts +with other applications. ## Bar -The Bar Is XMobar, of course, but again, heavily modified. +The Bar is XMobar, pretty heavily configured and leverages the number of scripts +that ship with Rde. ### Features * OS Logo * For Debian, Arch, Ubuntu and BSD * Kernel version - * Date - * Shows workspace layout as icon (I'm quite proud of this! It took forever to - get working!) + * Shows workspace layout as icon * Workspaces * Red is current * Blue is not current, but visible @@ -91,6 +59,7 @@ The Bar Is XMobar, of course, but again, heavily modified. * Spotify Info * Bluetooth Info * Battery Info + * Date ## Battery @@ -124,3 +93,154 @@ If you haven't paired your bluetooth device yet, maybe you should use ## Compositor Picom/Compton is my compositor, and it mostly works, but sometimes doesn't. + +## Window Management Language (WML) + +There are some commands that operate on "Window Management Objects," (WMO) there +are two types of WMOs, Workspaces and Windows. + +WML consists of a verb, and objects to operate on. For example: typing `<M-g>a` +will "goto" the workspace 'a'. Typing '<M-w>s' will go to the window tagged with +'s'. Thats pretty simple> However things get more complex. For example: + + * `<M-s>\%@.,,^` Shift all windows not on the current workspace to the + workspace on the third monitor from the left. + + * `<M-s>\%*_` Kill all the Windows not currently visible + + * `<M-g>,.` Switch to the workspace to the right of the current workspace + + * `<M-s>,,~@.,.` Move all but the last two windows on the current workspace to + the next monitor + + * `<M-s>|@a@b.` Move all the windows on workspaces 'a' and 'b' to the current + workspace. + + * `<M-s>--` Undo the last shift. + +It looks complicated, but it's actually quite simple. All WML "sentances" start +with a "verb", which is usually triggered with a mod key. What comes next +depends to the verb. + +### Verbs + + * `<M-g>[Workspace]` *goto*, jumps to a workspace + * `<M-s>[WindowSet][Workspace]` *shift*, shifts windows to a workspace. + * `<M-m>[WindowSet][:alpha:]` *mark*, marks a window with the given alpha + character. + * `<M-w>[WindowSet]` *navigate*, Navigates to the first window in the + referenced windowset. + +#### Workspace Object + +Workspace object describe a place where windows can go. In XMonad workspaces can +either be hidden or visible. On a multi monitor setup multiple workspaces may be +visible at a single time. + +The base of the Workspace object is the workspace tag. These are any alpha +numeric characters and are referenced by their tag. Thus the keystroke 'a' +references the 'a' workspace, 'b' references the 'b' workspace, 'π' references +thes 'π' workspace (yes, any alphanumeric character work). + +So `<M-g>a` will simply go to the 'a' workspace. + +That's pretty simple, but things get more interesting when using special +workspaces. + + * *x* | *x* is alphanumeric: the workspace with that tag + * `.`: The current workspace + * `[`: The next non-visible workspace to the right of this one. + * `]`: The next non-visible workspace to the left of this one. + * `{`: The workspace on the screen to the left of the current workspace + (equivalent to `;.`) + * `}`: The workspace on the screen to the right of the current workspace. + (equivalent to `,.`) + * `(`: The next workspace to the right + * `)`: The next workspace to the left + * `^`: The workspace on the rightmost screen. + * `$`: The workspace on the leftmost screen. + * `,`: The workspace on the monitor to the right of the next typed workspace + (i.e. `,a` is the workspace to the right of workspace a. ' + * `;`: Like `,`, but to the left. + * `/`: Search for a window and reference the workspace on that window. + * `@`: The workspace associated with the following window set object. (i.e. + `@a` references the workspace the window marked a is on) + * ` ` (space): The current workspace's associated workspace. The associated + workspace is the workspace with the tag of the toggled case (i.e. + Associated workspace for 'a' is 'A' and vice versa). Note that workspaces + with number tags do not have associated workspaces. + * `_`: The black hole "workspace." Cannot be travelled to, but sending a + window to it will kill it. + * `-`: The alternate workspace. Each window has an alternate workspace, which + is generally the last workspace that contained that window. Sending a + window to the alternate workspace will send it to the last workspace it was + a part of. + * `*`: The hidden workspace. Acts just like other base workspaces except that + it does not show up in the workspace list in XMobar and cannot be navigated + to using `[` or `]` . + +#### WindowSet Objects + +Window set object reference sets of windows. Operations that only require one +Window will use the first element in the windowset referenced. + +Windows can be marked using the `M-m` verb. + +Like workspaces, the base are alpha (non-numeric), and these referenced marked +windows, but there are also special marks and operators to better describe +exactly what one is wanting to do. + + + * *x* | x is alpha: The windows marked with *x* + * `.`: The current window. + * `^`: The window on the far left (across all screens) + * `$`: The window on the far right (across all screens) + * `'`: The last window + * `*`: All currently visible windows + * `-`: The windows used in the last command. (NOTE: <M-s>-- will send last + referenced windows to where they came from -- basically undo) + * `/`: Search for a window and select all the ones with that title + * `%`: All windows + * `_`: No windows + * `@`: All the windows on the next entered workspace. (i.e. @,. references + all windows on the creen to the right of the current workspace). + * `!`: The first window in the following windowset (i.e. !@. + references the master window on the current workspace). + * `,`: The following window set, but without the first element. + * `~`: The following window set, but reversed (i.e. `!~@.` references the + last window on the current workspace` + * `?`: takes two window sets, if the first one is empty, then return the + second one, otherwise return the first. + * `|`: The union of the next two window sets (i.e. `|@.a` is the union of + the windows on the current workspace and the windows marked with 'a'. + * `&`: The intersection between the next two window sets. + * `\\`: The difference between two window sets. (i.e. `\%a` references all + windows except those marked with 'a') + +#### Revisiting Examples + + * `<M-s>\%@.,,^` *Shift all windows not on the current workspace to the + workspace on the third monitor from the left.* + + * `<M-s>`: we're shifting windows to a workspace. + * `\%@.`: All windows not on the current workspace (`\\` is the set + difference operator, `%` is all windows, `@.` is all windows on the + current workspace) + * `,,^`: Third screen from the left. `^` references the far left screen, + the `,` (applied twice) shifts that to the right once. + + * `<M-s>\%*_` *Kill all the Windows not currently visible* + + * `<M-s>` we're shifting windows. + * `\%*` All windows except those visible. + * `_` The black hole workspace. Kills windows sent to it. + + * `<M-s>,,~@.,.` Move all but the last two windows on the current workspace to + the next monitor + + * `<M-s>`: We're shifting windows to a workspace + * `,,~@.`: `@.` references the windows on the current workspace, `~` + reverses that list, and `,` (applied twice) takes the first element off + the list. So it's all windows on the current workspace, except the last + two. + * `,.`: The workspace on the screen to the right. |