| 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/) | |