FVWM: Daily Driver Config
Or: Keyboard Focused Classical Window Management
- The Dotfiles
- Daily Driver
- Keeping track of things
- Mouse behavior
- Keyboard behavior
- Other programs
I suppose it's what you came for, so here they are!
» fvwm config file
with plenty of comments
» Mini-icon used in the icon manager
» .Xdefaults for xterm colors.
» .xprofile for setting background, xclock etc.
» fonts.conf to disable font smoothing in FreeType.
» xvol, used for the keybindings to adjust audio volume.
What's the geekiest thing you could possibly write about? I'm not sure, but lengthy posts about your desktop and shell configuration is probably in the top ten. So let's do that!
I'm an incorrigible tinkerer and I've spent more of my life than I care to think of just tuning the look of my GUI environment. Much to my own surprise, I've now been running the same look - basically the FVWM2 defaults - for well over a year. My tweaking has instead been focused on doing more window management with the keyboard rather than the mouse, in part due to some problems with lateral epicondylitis ("tennis elbow" sounds so pedestrian).
This config is truly my daily driver. I use it on my main laptop, my ten year old travel laptop and, since I switched to running Linux at work a while ago, on my work laptop. I haven't used my Raspberry Pi in some time, but if I did, this config would be running on it. It's basically what I use all day, every day, unless I'm using my Amiga.
Without further ado, I now present this excellent FVWM config for the world to see. Hooray!
The window decoration style and coloring are basically the FVWM defaults. Active windows are light gray with black titles. Inactive windows are dark gray with bright gray titles. The background color is #607080, a slightly darker version of SlateGray. The font used throughout is the bitmap version of Helvetica from the classic xfonts collection. I've styled the FVWM menus to look somewhat similar to Raleigh, my GTK theme of choice.
I find that these rather unintrusive colors (one might even call them bland) blends well with most GUI toolkits and applications. This makes me less prone to start fidgeting with color schemes and window decorations. They do what they're supposed to (which is differentiate between active and inactive windows) without getting in the way.
As for my terminal (which is xterm), I've long since settled on a pastel-ish color scheme on a dark blue background. I use bitmap fonts in the terminal as well, primarily the default "fixed" font. The large serif font is also "fixed", but from the Sony foundry. I'm very fond of it - so much so that I use it despite it lacking Unicode support. My prompt is a very simple one - it just shows the current working directory. The right angle quote (») prompt is one I also use in the shell on my Amiga.
Keeping track of things
My setup has no means of dealing with notifications. This is a feature, not a bug. I also don't have lots of system information visible, because I find it distracting rather than helpful. When I need it, I can get it through the terminal. After having toyed around with things like xload and gkrellm, I've settled on a clock (xclock), FvwmPager and a window list in the form of FvwmIconMan.
Focus follows mouse. This is a feature I love and I've been using it since I first came across Linux and FVWM in 1995. I've even tried using it on Windows and AmigaOS, but I find they're poorly suited for this behavior. On *nix, it "just works", because it's so ingrained in the popular workflow that even Gnome supports it.
Menus are opened from the root window, using left click (applications menu), middle click (window list) and right click ("system" menu, E.G. restart FVWM, quit X, enter sleep mode, etc.)
Using the window buttons, windows can be closed, iconified and maximized vertically. Double-clicking in the title bar will maximize a window both vertically and horizontally.
The left mouse button drags windows using the title bar and resizes them using the borders. Middle clicking anywhere in the decoration iconifies the window. Right clicking anywhere in the decoration shuffles the window to the top or bottom of the window stack, depending on its current stack level.
Left-clicking a page in the pager will jump to it. Windows can be dragged across pages after lingering for a while with the pointer at the appropriate screen edge. Windows can also be dragged between pages in the pager, using the middle mouse button. The paging can be panned arbitrarily by dragging with the right mouse button in the pager.
Super + Arrows: Moves to adjacent desktop ("workspace") in the desired direction.
Alt + Tab: Switches between windows using the window list. Works as close to the MS Windows behavior as I've managed to get it.
Super + W: Show the window list, which can be navigated using arrow keys or by simply pressing the appropriate number to activate the corresponding window.
Super + Return: Open xterm.
Super + Shift + Return: Open xterm with tmux.
Super + E: Open GUI file manager.
Super + Esc: Open application launcher menu.
Super + Shift + Esc: Open system management menu.
Super + M: Activate move window mode.
Super + R: Activate resize window mode.
Super + F1: Maximize window horizontally and vertically.
Super + F2: Maximize window vertically.
Super + Page Up: Raise the volume, using xvol.
Super + Page Down: Lower the volume.
Super + Ctrl + Arrows: Move focus to the closest adjacent window in the given direction. Sort of like in a tiling WM.
Super + Alt + Arrows: Move window in desired direction.
Super + Alt + Shift + Arrows: Move window in desired direction by a larger distance.
Super + Shift + Arrows: Shrink or expand window size in desired direction, E.G. down = enlarge vertically, up = shrink vertically.
This little program hides the mouse pointer when you type. Excellent stuff.
I basically run the default tmux config, but I've bound new keys for creating and switching between windows, since that's pretty much all I use it for. I find it grating to release the Ctrl key between the qualifier and the command stroke, so I've added Ctrl to the actual commands as well:
bind C-c new-window bind C-n next-window bind C-m previous-window
Thus, I can press "Ctrl + B + C" instead of "Ctrl + B" and then "C" to create a new window.
Some of my niftier (IMHO) contraptions for bash can be found here.
Well, that's it
Hopefully this is useful to someone, somewhere. Thanks for reading and happy hacking!