(in-package :stumpwm) ;; debian=sbcl ;; Load up swank for communication with the running image. ;(clc:clc-require :swank) ;(swank:create-server :port 4013 :dont-close t) (load-module "notifications") (load-module "cpu") (load-module "disk") (load-module "mem") (load-module "net") (when (string= "arwen" (short-site-name)) (load-module "battery") ;(setf *battery-name* "BAT1") (load-module "wifi")) (when (string= "ori" (short-site-name)) (restore-from-file (format nil ".stumpwm-desktop-~A" (short-site-name)))) (when (string= "mithrandir" (short-site-name)) (load-module "mpd") (setf *disk-usage-paths* '("/" "/home" "/media/external")) (restore-from-file (format nil ".stumpwm-desktop-~A" (short-site-name)))) (set-prefix-key (kbd "M-z")) ;; I find 'C-t s h' and 'C-t s v' more mnemonic than 'C-t s' and 'C-t S'. ;; OTOH, stumpwm's 'vsplit' works like I think 'hsplit' should, and vice versa. (defvar *split-map* (make-sparse-keymap)) (define-key *split-map* (kbd "h") "vsplit") (define-key *split-map* (kbd "v") "hsplit") (define-key *root-map* (kbd "s") '*split-map*) (undefine-key *root-map* (kbd "S")) ;; Since I move between windows a lot, I want those bindings at the top level. (define-key *top-map* (kbd "M-Right") "move-focus right") (define-key *top-map* (kbd "M-Left") "move-focus left") (define-key *top-map* (kbd "M-Up") "move-focus up") (define-key *top-map* (kbd "M-Down") "move-focus down") (define-key *top-map* (kbd "S-M-Right") "next-in-frame") (define-key *top-map* (kbd "S-M-Left") "prev-in-frame") ;; ...which leaves the nested ones available for changing screens. (define-key *root-map* (kbd "Right") "snext") (define-key *root-map* (kbd "M-Right") "gnext") (define-key *root-map* (kbd "Left") "sprev") (define-key *root-map* (kbd "M-Left") "gprev") (undefine-key *root-map* (kbd "Up")) (undefine-key *root-map* (kbd "Down")) (define-key *root-map* (kbd "N") '*notifications-map*) ;; Quickly toggle between groups. (define-key *root-map* (kbd "quoteleft") "gselect 1") (set-font "-*-terminus-medium-r-normal-*-12-*-*-*-*-*-iso10646-1") (setf *window-info-format* "%wx%h %n <%c> [%i] {%r} (%t)") (setf *new-frame-action* :last-window) (set-focus-color "darkslategray") (set-win-bg-color "black") (setf *mouse-focus-policy* :sloppy) (setf *mode-line-position* :bottom) (setf *mode-line-background-color* "black") (setf *mode-line-foreground-color* "white") (setf *mode-line-timeout* 10) #| (clc:clc-require :local-time) (clc:clc-require :cl-ppcre) (defun local-time-str () (local-time:with-decoded-timestamp (:minute m :hour h :day d :month mn :day-of-week dow) (local-time:now) (format nil "~A:~2,'0D ~[Sun~;Mon~;Tue~;Wed~;Thu~;Fri~;Sat~], ~[~;Jan~;Feb~;Mar~;Apr~;May~;Jun~;Jul~;Aug~;Sep~;Oct~;Nov~;Dec~] ~A" (mod h 12) m dow mn d))) (defun load-str () (with-open-file (loadavg "/proc/loadavg") (cl-ppcre:scan-to-strings "^\\d+\\.\\d+ \\d+\\.\\d+ \\d+\\.\\d+" (read-line loadavg)))) |# (setf *screen-mode-line-format* (list "%h: " ;'(:eval (local-time-str)) " | %g | " (cond ((string= "arwen" (short-site-name)) " | %b | %I")) ;'(:eval (load-str)) " | %N | %c %t | %D | %l")) (mapc (lambda (s) (mapc (lambda (h) (enable-mode-line s h t)) (screen-heads s))) *screen-list*)