(in-package :stumpwm) ;; Start up a swank server for happy SLIME hacking (require :swank) (swank-loader:init) (swank:create-server :port 4004 :style swank:*communication-style* :dont-close t) (defun get-color (name) (let ((colors '(("base03" . "#002b36") ("base02" . "#073642") ("base01" . "#586e75") ("base00" . "#657b83") ("base0" . "#839496") ("base1" . "#93a1a1") ("base2" . "#eee8d5") ("base3" . "#fdf6e3") ("yellow" . "#b58900") ("orange" . "#cb4b16") ("red" . "#dc322f") ("magenta" . "#d33682") ("violet" . "#6c71c4") ("blue" . "#268bd2") ("cyan" . "#2aa198") ("green" . "#859900")))) (cdr (assoc name colors :test 'equal)))) ;; StumpWM configs (setq *message-window-gravity* :center *input-window-gravity* :center *window-border-style* :thin *message-window-padding* 10 *message-window-y-padding* 5 *maxsize-border-width* 2 *normal-border-width* 2 *transient-border-width* 2 stumpwm::*float-window-border* 2 stumpwm::*float-window-title-height* 2 *mouse-focus-policy* :click *colors* (list (get-color "base02") (get-color "red") (get-color "green") (get-color "yellow") (get-color "blue") (get-color "magenta") (get-color "cyan") (get-color "base2"))) ;; Input/message bar (set-fg-color (get-color "base00")) (set-bg-color (get-color "base3")) (set-border-color (get-color "base2")) (set-msg-border-width 2) ;; Windows (set-focus-color (get-color "base2")) (set-unfocus-color (get-color "base2")) (set-float-focus-color (get-color "base2")) (set-float-unfocus-color (get-color "base2")) ;; Sudo (defcommand stumpwm-password (prompt) ((:string "prompt: ")) "Prompts the user for a password" (read-one-line (current-screen) prompt :password t)) (defmacro run-sudo-command (cmd &optional collect-output-p) `(run-shell-command (format nil "SUDO_ASKPASS=~~/bin/stumpwm-sudo.sh sudo -A ~S" ,cmd) ,collect-output-p)) ;; Commands (defcommand shutdown () () (when (y-or-n-p (format nil "~@{~a~^~%~}" "You are about to shut down the computer." "Really ^1^Bshutdown^b^n?" "^B^6Confirm?^n ")) (run-shell-command "shutdown now"))) (defcommand firefox () () (run-or-raise "firefox" '(:class "firefox"))) (defcommand lock () () (run-shell-command (concatenate 'string "i3lockmore " "--image-fill ~/Pictures/space-background.png " "-n " "--lock-icon ~/Pictures/lock.png"))) (defcommand battery () () (let ((capacity (string-trim '(#\newline) (run-shell-command "cat /sys/class/power_supply/BAT0/capacity" t)))) (echo-string (current-screen) (format nil "Battery: ~A%" capacity)))) (defcommand caps->escape () () (run-shell-command "setxkbmap -option caps:escape")) (defcommand org-capture () () (run-shell-command "emacsclient -a '' -e '(make-orgcapture-frame)'")) (defcommand background-random () () (run-shell-command (concatenate 'string "feh --bg-scale " "\"/home/jdormit/Dropbox/pictures/desktop/" "$(ls /home/jdormit/Dropbox/pictures/desktop | shuf -n 1)\""))) ;; Keybindings (define-key stumpwm:*root-map* (kbd "C-f") "firefox") (define-key stumpwm:*root-map* (kbd "d") "exec rofi -show drun") (define-key stumpwm:*root-map* (kbd "w") "exec rofi -show window") (define-key stumpwm:*root-map* (kbd "P") "exec passmenu") (define-key stumpwm:*root-map* (kbd "N") "exec networkmanager_dmenu") (define-key stumpwm:*root-map* (kbd "M") "exec ~/bin/monitor_layout.sh") (define-key stumpwm:*root-map* (kbd "L") "lock") (define-key stumpwm:*root-map* (kbd "b") "battery") (define-key stumpwm:*root-map* (kbd "C-o") "org-capture") (define-key stumpwm:*root-map* (kbd "C-q") "quit-confirm") (define-key *top-map* (kbd "M-TAB") "pull-hidden-next") (define-key *top-map* (kbd "XF86MonBrightnessDown") "exec light -U 5") (define-key *top-map* (kbd "XF86MonBrightnessUp") "exec light -A 5") (define-key *top-map* (kbd "XF86AudioRaiseVolume") "exec pavolume volup") (define-key *top-map* (kbd "XF86AudioLowerVolume") "exec pavolume voldown") (define-key *top-map* (kbd "XF86AudioMute") "exec pavolume mutetoggle") ;; X Windows config (run-shell-command "xsetroot -cursor_name left_ptr") (run-shell-command "setxkbmap -option caps:escape") ;; UI (ql:quickload "clx-truetype") (load-module "ttf-fonts") (xft:cache-fonts) (set-font (make-instance 'xft:font :family "IBM Plex Mono" :subfamily "Regular" :size 12)) (set '*message-window-padding* 4) ;; Desktop background (run-shell-command "feh --bg-scale ~/Dropbox/pictures/solarized-light-blank.png") ;; Notifications via Dunst (run-shell-command "/usr/bin/dunst") ;; Picom compositor (run-shell-command "picom -b") ;; Polybar (run-shell-command "polybar top --reload >> /tmp/polybar.top.log 2>&1")