;;;;;; -*- mode: lisp -*- (in-package :stumpwm) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Variables ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar *my-program-bindings* (let ((m (stumpwm:make-sparse-keymap))) (stumpwm:define-key m (stumpwm:kbd "M") "check-mail") ;; NOTE: this is important m)) (defvar *my-mpc-bindings* (let ((m (make-sparse-keymap))) (define-key m (kbd "s") "mpc-playing") (define-key m (kbd "S") "mpc-stop") (define-key m (kbd "P") "mpc-toggle") (define-key m (kbd "n") "mpc-next") (define-key m (kbd "p") "mpc-previous") (define-key m (kbd "v") "mpc-volume") m)) (defvar *browser* (getenv "BROWSER")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Functions ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun get-mail-count (mailbox) "Check how many new messages there are for mailbox." (length (directory (format nil "/home/slash/documents/mail/~A/INBOX/new/*.*" mailbox)))) (defun echo-urgent-window (target) (message-no-timeout "~a has a message for you." (window-title target))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Commands ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defcommand urxvt () () "run urxvt" (run-shell-command "urxvt")) (defcommand browser () () "open browser" (run-shell-command *browser*)) (defcommand conkeror () () "run or raise conkeror" (run-or-raise "conkeror" '(:class "Conkeror"))) (defcommand evolus-pencil () () "run evolus-pencil" (run-shell-command "/usr/lib/evolus-pencil-svn/evolus-pencil.sh")) (defcommand luakit () () "run luakit" (run-shell-command "luakit")) (defcommand check-mail () () "check new messages" (run-shell-command "~/bin/mailrun.sh")) (defcommand i3lock () () "run i3lock" (run-shell-command "i3lock -c 000000")) (defcommand mpc-playing () () "Show which song mpc is currently playing" (message (run-shell-command "mpc | head -n1" t))) (defcommand mpc-stop () () "Stop mpc from playing" (run-shell-command "mpc stop")) (defcommand mpc-toggle () () "Toggle mpc between playing and pauzed" (run-shell-command "mpc toggle")) (defcommand mpc-next () () "Tell mpc to go to the next song" (message (run-shell-command "mpc next | head -n1" t))) (defcommand mpc-previous () () "Tell mpc to go to the previous song" (message (run-shell-command "mpc prev | head -n1" t))) (defcommand mpc-volume (level) ((:string "Volume: ")) "Tell mpc to change the volume" (run-shell-command (format nil "mpc volume ~a" level))) (defcommand screenshot () () "Take a screenshot" (run-shell-command "scrot")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; General Settings ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (set-prefix-key (kbd "s-w")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Mode-line ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (set-font "-*-dejavu sans-bold-r-*-*-13-*-*-*-*-*-iso8859-1") (setf *mode-line-background-color* "Black") (setf *mode-line-foreground-color* "White") (setf *mode-line-timeout* 60) ;(setf *window-format* "%20t") (setf *group-format* "[%n]") (if (not (head-mode-line (current-head))) (toggle-mode-line (current-screen) (current-head))) (setf stumpwm:*screen-mode-line-format* (list "%g | " '(:eval (format nil "arch: ~D | gmail: ~D | aethon: ~D | updates: ~A | cower: ~A " (get-mail-count "arch") (get-mail-count "gmail") (get-mail-count "aethon") (run-shell-command "echo -n `pacman -Qu | wc -l`" t) (run-shell-command "echo -n `cat ~/.cowercount`" t))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Keybindings ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-key *root-map* (kbd "c") "urxvt") (define-key *root-map* (kbd "s-l") "i3lock") (define-key *root-map* (kbd "s-p") '*my-program-bindings*) (define-key *root-map* (kbd "m") '*my-mpc-bindings*) (define-key *root-map* (kbd "w") "browser") (define-key *root-map* (kbd "SunPrint_Screen") "screenshot") (define-key *top-map* (kbd "M-TAB") "next") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Hooks ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-hook *urgent-window-hook* 'echo-urgent-window)