Title: My Stumpwm config on OpenBSD | |
Author: Solène | |
Date: 06 June 2016 | |
Tags: window-manager lisp | |
Description: | |
I want to talk about _stumpwm_, a window manager written in Common | |
LISP. I think one must at least like emacs to like stumpwm. Stumpwm is | |
a tiling window manager one which you create "panes" on the screen | |
like windows on Emacs. A single pane takes 100% of the screen, then | |
you can split it into 2 panes vertically or horizontally and resize | |
it, and you can split again and again. **There is no "automatic" | |
tiling**. By default, if you have ONE pane, you will only have ONE | |
window displayed, this is a bit different that others tiling wm I had | |
tried. Also, virtual desktops are named groups, nothing special here, | |
you can create/delete groups and rename it. Finally, stumpwm **is not | |
minimalistic**. | |
To install it, you need to get the sources of stumpwm, install a | |
common lisp interpreter (sbcl, clisp, ecl etc...), install quicklisp | |
(which is not in packages), install the quicklisp packages cl-ppcre | |
and clx and then you can compile stumpwm, that will produce a huge | |
binary which embedded a common lisp interpreter (that's a way to share | |
common lisp executables, the interpreter can create an executable from | |
itself and include the files you want to execute). I would like to | |
make a package for OpenBSD but packaging quicklisp and its packages | |
seems too difficult for me at the moment. | |
Here is my config file in ~/.stumpwmrc. | |
**Updated: 23th january 2018** | |
(defun chomp(text) (subseq text 0 (- (length text) 1))) | |
(defmacro cmd(command) `(progn `(:eval (chomp | |
(stumpwm:run-shell-command ,,command t))))) | |
(let ((now (get-universal-time))) | |
(when (> (- now *latence-last-update* ) 30) | |
(setf *latence-last-update* now) | |
(when (probe-file "/tmp/latenceresult") | |
(with-open-file (x "/tmp/latenceresult" | |
:direction :input) | |
(setf *latence* (read-line x)))))) | |
*latence*) | |
(defvar *latence* "nil") | |
(stumpwm:run-shell-command "setxkbmap fr") | |
(stumpwm:run-shell-command "feh --bg-fill | |
red_damask-wallpaper-1920x1080.jpg") | |
(defvar color2 "#222222") | |
stumpwm:*mode-line-background-color* color2 | |
stumpwm:*mode-line-foreground-color* color1 | |
stumpwm:*mode-line-border-color* "#555555" | |
stumpwm:*screen-mode-line-format* (list "%g | %v ^>^7 %B | " | |
'(:eval (get-latence)) "ms %d ") | |
stumpwm:*mode-line-border-width* 1 | |
stumpwm:*mode-line-pad-x* 6 | |
stumpwm:*mode-line-pad-y* 1 | |
stumpwm:*mode-line-timeout* 5 | |
stumpwm:*mouse-focus-policy* :click | |
;;stumpwm:*group-format* "%n·%t | |
stumpwm:*group-format* "%n" | |
stumpwm:*time-modeline-string* "%H:%M" | |
stumpwm:*window-format* "^b^(:fg \"#7799AA\")<%25t>" | |
stumpwm:*window-border-style* :tight | |
stumpwm:*normal-border-width* 1 | |
) | |
(stumpwm:grename "Alpha") | |
(stumpwm:gnewbg "Beta") | |
(stumpwm:gnewbg "Tau") | |
(stumpwm:gnewbg "Pi") | |
(stumpwm:gnewbg "Zeta") | |
(stumpwm:gnewbg "Teta") | |
(stumpwm:gnewbg "Phi") | |
(stumpwm:gnewbg "Rho") | |
(stumpwm:current-head)) | |
(define-key *root-map* (kbd "RET") "move-window down") | |
(define-key *root-map* (kbd "z") "fullscreen") | |
(define-key *top-map* (kbd "M-eacute") "gselect 2") | |
(define-key *top-map* (kbd "M-\"") "gselect 3") | |
(define-key *top-map* (kbd "M-quoteright") "gselect 4") | |
(define-key *top-map* (kbd "M-(") "gselect 5") | |
(define-key *top-map* (kbd "M--") "gselect 6") | |
(define-key *top-map* (kbd "M-egrave") "gselect 7") | |
(define-key *top-map* (kbd "M-underscore") "gselect 8") | |
(define-key *top-map* (kbd "s-t") "exec urxvtc") | |
(define-key *top-map* (kbd "M-S-RET") "exec urxvtc") | |
(define-key *top-map* (kbd "M-C") "exec urxvtc") | |
/home/solene/dev/screen_up.sh") | |
(define-key *top-map* (kbd "s-Right") "gnext") | |
(define-key *top-map* (kbd "M-TAB") "fnext") | |
(define-key *top-map* (kbd "M-twosuperior") "next-in-frame") | |
(load-module "stumptray") | |
I use a function to get latency from a script that is started every 20 | |
seconds to display the network latency or nil if I don't have internet | |
access. | |
I use rxvt-unicode daemon (urxvtd) as a terminal emulator, so the | |
terminal command is urxvtc (for client), it's lighter and faster to | |
load. | |
I also use a weird "alt+tab" combination: | |
- Alt+tab switch between panes | |
- Alt+² (the key above tab) circles windows in the current pane | |
- Alt+Shift+Tab switch to the previous windows selected | |
[StumpWM website](https://stumpwm.github.io/) | |