aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2022-04-19 01:30:50 -0600
committerJosh Rahm <joshuarahm@gmail.com>2022-10-09 12:19:46 -0600
commitda3e8dd9d938e210c5cf8986cfb59e3ff0a17bb5 (patch)
tree2b76098a4cd4e576951cd335b602a79105d0c379
parentd7d5ae85a70a26e73520449ecb5ea01b198e5131 (diff)
downloadrde-da3e8dd9d938e210c5cf8986cfb59e3ff0a17bb5.tar.gz
rde-da3e8dd9d938e210c5cf8986cfb59e3ff0a17bb5.tar.bz2
rde-da3e8dd9d938e210c5cf8986cfb59e3ff0a17bb5.zip
Update readme
-rw-r--r--README.md232
1 files changed, 176 insertions, 56 deletions
diff --git a/README.md b/README.md
index a3783d6..d65c147 100644
--- a/README.md
+++ b/README.md
@@ -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.
[![Screenshot](screenshot.jpg)](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.