diff options
| author | tslil clingman <> | 2019-09-11 19:18:14 -0400 |
|---|---|---|
| committer | tslil clingman <> | 2019-09-11 19:18:14 -0400 |
| commit | ac1a4884d03fc0495c773500d8a13f84b695fa43 (patch) | |
| tree | 29e5ec49e0ce957d80d8f11a155b47840c74f488 /stumpwm/init.lisp | |
Init
Diffstat (limited to 'stumpwm/init.lisp')
| -rw-r--r-- | stumpwm/init.lisp | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/stumpwm/init.lisp b/stumpwm/init.lisp new file mode 100644 index 0000000..3436f06 --- /dev/null +++ b/stumpwm/init.lisp @@ -0,0 +1,236 @@ +;; Time-stamp: <2018-06-24 23:12:19 (tslil)> +(IN-PACKAGE STUMPWM) + +;; Startup stuff +(SETF *STARTUP-MESSAGE* NIL) +(RUN-COMMANDS "exec $TERMINAL -e $HOME/bin/tma") +(SET-PREFIX-KEY (KBD "XF86Launch9")) + +;; Window decorations +(SETF *MESSAGE-WINDOW-GRAVITY* :CENTER + *INPUT-WINDOW-GRAVITY* :CENTER) +(SETF *TIMEOUT-WAIT* 5) +(SETF *MAXSIZE-BORDER-WIDTH* 1) +(SETF *NORMAL-BORDER-WIDTH* 1) +(SETF *TRANSIENT-BORDER-WIDTH* 1) +(SETF *WINDOW-BORDER-STYLE* :THIN) +(SET-FRAME-OUTLINE-WIDTH 1) +(SET-MSG-BORDER-WIDTH 3) + +;; Groups +(GRENAME "def") +(GNEWBG "one") +(GNEWBG "two") + +(SETF *FRAME-NUMBER-MAP* "neioarst123456789" + *FRAME-INDICATOR-TEXT* " This frame has focus. ") + +;; ============================================================================= +;; Functions +;; Dropwhile +(DEFUN DROPWHILE (PREDICATE LIST) + (LOOP :WHILE (FUNCALL PREDICATE (CAR LIST)) + :DO (POP LIST)) + LIST) + +;; Notifications +(DEFUN MY-MESSAGE (LOCATION STRING) + (LET ((OLD-LOCATION *message-window-gravity*)) + (SETF *message-window-gravity* LOCATION) + (ECHO STRING) + (SETF *message-window-gravity* OLD-LOCATION))) + +;; Volume +(DEFUN VOLUME-MODIFY (MIXER ACTION) + (LET* ((OUTPUT (RUN-PROG-COLLECT-OUTPUT "/usr/bin/amixer" "set" + MIXER + (CASE ACTION + (:INC "2%+") + (:DEC "2%-") + (:MUT "toggle")))) + (PARSED (DROPWHILE #'(LAMBDA (F) + (NOT (EQ #\: (CHAR F (1- (LENGTH F)))))) + (SPLIT-STRING (CAR (LAST (SPLIT-STRING + OUTPUT))) "[ \[]+")))) + (MY-MESSAGE :TOP-RIGHT + (FORMAT NIL "~A: ~A [~A]" + MIXER (NTH 3 PARSED) (NTH 5 PARSED))))) + +(DEFUN MAIL-INFO () + (LET ((NUM (PARSE-INTEGER + (RUN-PROG-COLLECT-OUTPUT "/usr/bin/notmuch" "count" "tag:unread")))) + (IF (>= 0 NUM) "^7no unread emails^n" + (FORMAT NIL "~r^7 unread ~[email~:;emails~]^n" NUM (1- NUM))))) + +(DEFUN BATTERY-INFO () + (LET* ((RAW (RUN-PROG-COLLECT-OUTPUT "/usr/bin/acpi")) + (BAT0 (FIRST (SPLIT-STRING RAW))) + (PARSED (CDR (DROPWHILE #'(LAMBDA (F) (NOT (EQ #\: (CHAR F (1- (LENGTH F)))))) + (SPLIT-STRING BAT0 "[ ,]+")))) + (STAT (NTH 0 PARSED)) + (PERC (NTH 1 PARSED)) + (PNUM (PARSE-INTEGER (SUBSEQ PERC 0 (1- (LENGTH PERC))))) + (TIME (NTH 2 PARSED))) + (FORMAT NIL "~[^1~;^3~:;^2~]~c ~d%, ~a" + (FLOOR (* 4 (/ PNUM 100))) + (CHAR STAT 0) + PNUM + (OR TIME "not charging")))) + + +;; ============================================================================= +;; Commands + +;; Volume +(DEFCOMMAND VOLUME-INC (MIXER) (:REST) (volume-modify MIXER :INC)) +(DEFCOMMAND VOLUME-DEC (MIXER) (:REST) (volume-modify MIXER :DEC)) +(DEFCOMMAND VOLUME-MUT (MIXER) (:REST) (volume-modify MIXER :MUT)) + +;; Switch to stuff +(DEFCOMMAND SELECT-GROUP-FROM-LIST () (:REST) + ;; lifted from group.lisp source because there weren't any nice + ;; wrappers like in the case of windows (below) + (LET* ((GROUPS (SORT-GROUPS (CURRENT-SCREEN))) + (NAMES (MAPCAR (LAMBDA (G) + `(,(FORMAT-EXPAND *GROUP-FORMATTERS* "%t" G) + . ,G)) + (IF *LIST-HIDDEN-GROUPS* + GROUPS (NON-HIDDEN-GROUPS GROUPS)))) + (CHOICE (CDR (SELECT-FROM-MENU (CURRENT-SCREEN) NAMES + "Switch to which group?")))) + (WHEN CHOICE (SWITCH-TO-GROUP CHOICE)))) + +(DEFCOMMAND MY-PULL-FROM-WINDOWLIST () (:REST) ; I wanted a prompt... + (LET ((CHOICE (SELECT-WINDOW-FROM-MENU (ALL-WINDOWS) "%n %t" + "Pull which window to this frame?"))) + (WHEN CHOICE (PULL-WINDOW CHOICE)))) + +;; Email +(DEFCOMMAND CHECK-NEW-MAIL () (:REST) + (MY-MESSAGE :CENTER (MAIL-INFO))) +;; Battery +(DEFCOMMAND BATTERY-STATS () (:REST) + (MY-MESSAGE :CENTER (BATTERY-INFO))) + +;; ============================================================================= +;; Bindings + +;; Free stuff -- where are all these other keys being bound? +(setf *root-map* (make-sparse-keymap)) + +;; Volume +(DEFINE-KEY *TOP-MAP* (KBD "XF86AudioRaiseVolume") "volume-inc Master") +(DEFINE-KEY *TOP-MAP* (KBD "XF86AudioLowerVolume") "volume-dec Master") +(DEFINE-KEY *TOP-MAP* (KBD "XF86Launch1") "volume-mut Master") +(DEFINE-KEY *TOP-MAP* (KBD "S-XF86AudioRaiseVolume") "volume-inc Headphone") +(DEFINE-KEY *TOP-MAP* (KBD "S-XF86AudioLowerVolume") "volume-dec Headphone") +(DEFINE-KEY *TOP-MAP* (KBD "S-XF86Launch1") "volume-mut Headphone") + +;; Misc +(DEFINE-KEY *TOP-MAP* (KBD "XF86ScreenSaver") "exec lock") +(DEFINE-KEY *TOP-MAP* (KBD "XF86Battery") "battery-stats") +(DEFINE-KEY *TOP-MAP* (KBD "XF86WebCam") "check-new-mail") +(DEFINE-KEY *TOP-MAP* (KBD "XF86MonBrightnessUp") "exec xbacklight -inc 10") +(DEFINE-KEY *TOP-MAP* (KBD "XF86MonBrightnessDown") "exec xbacklight -dec 10") + +;; ============================================================================= +;; Root bindings +(DEFINE-KEY *ROOT-MAP* (KBD "C-Q") "quit") +(DEFINE-KEY *ROOT-MAP* (KBD "C-g") "abort") + +(DEFINE-KEY *ROOT-MAP* (KBD "g") "gmove") +(DEFINE-KEY *ROOT-MAP* (KBD "G") "gmerge") +(DEFINE-KEY *ROOT-MAP* (KBD "TAB") "select-group-from-list") +(DEFINE-KEY *ROOT-MAP* (KBD "l") "gselect def") +(DEFINE-KEY *ROOT-MAP* (KBD "u") "gselect one") +(DEFINE-KEY *ROOT-MAP* (KBD "y") "gselect two") +(DEFINE-KEY *ROOT-MAP* (KBD "M-l") "gmove def") +(DEFINE-KEY *ROOT-MAP* (KBD "M-u") "gmove one") +(DEFINE-KEY *ROOT-MAP* (KBD "M-y") "gmove two") + +(DEFINE-KEY *ROOT-MAP* (KBD "s") "exec") +(DEFINE-KEY *ROOT-MAP* (KBD "S") "swank-toggle") +(DEFINE-KEY *ROOT-MAP* (KBD "'") "time") +(DEFINE-KEY *ROOT-MAP* (KBD ";") "eval") +(DEFINE-KEY *ROOT-MAP* (KBD ":") "colon") +(DEFINE-KEY *ROOT-MAP* (KBD "K") "delete") +(DEFINE-KEY *ROOT-MAP* (KBD "C-K") "kill") +(DEFINE-KEY *ROOT-MAP* (KBD "q") "exec $BROWSER") +(DEFINE-KEY *ROOT-MAP* (KBD "E") "emacs") +(DEFINE-KEY *ROOT-MAP* (KBD "c") "exec $TERMINAL -e tmux") +(DEFINE-KEY *ROOT-MAP* (KBD "C") "exec $TERMINAL") + +(DEFINE-KEY *ROOT-MAP* (KBD "h") "hsplit") +(DEFINE-KEY *ROOT-MAP* (KBD "v") "vsplit") +(DEFINE-KEY *ROOT-MAP* (KBD "r") "remove") +(DEFINE-KEY *ROOT-MAP* (KBD "a") "iresize") +(DEFINE-KEY *ROOT-MAP* (KBD "x") "exchange-direction") +(DEFINE-KEY *ROOT-MAP* (KBD "b") "banish") + +(DEFINE-KEY *ROOT-MAP* (KBD "space") "my-pull-from-windowlist") +(DEFINE-KEY *ROOT-MAP* (KBD "C-w") "select-window") +(DEFINE-KEY *ROOT-MAP* (KBD "W") "pull-window-by-number") + +(DEFINE-KEY *ROOT-MAP* (KBD "P") "prev-in-frame") +(DEFINE-KEY *ROOT-MAP* (KBD "N") "next-in-frame") +(DEFINE-KEY *ROOT-MAP* (KBD "p") "pull-hidden-previous") +(DEFINE-KEY *ROOT-MAP* (KBD "n") "pull-hidden-next") + +(DEFINE-KEY *ROOT-MAP* (KBD "O") "only") + +(DEFINE-KEY *ROOT-MAP* (KBD ",") "move-focus left") +(DEFINE-KEY *ROOT-MAP* (KBD ".") "move-focus right") +(DEFINE-KEY *ROOT-MAP* (KBD "i") "move-focus up") +(DEFINE-KEY *ROOT-MAP* (KBD "o") "move-focus down") +(DEFINE-KEY *ROOT-MAP* (KBD "M-.") "move-window right") +(DEFINE-KEY *ROOT-MAP* (KBD "M-,") "move-window left") +(DEFINE-KEY *ROOT-MAP* (KBD "M-i") "move-window up") +(DEFINE-KEY *ROOT-MAP* (KBD "M-o") "move-window down") + +;; ============================================================================= +;; Visual + +;; Set the font +(REQUIRE 'CLX-TRUETYPE) +(LOAD-MODULE "ttf-fonts") +(XFT:CACHE-FONTS) +(SET-FONT (MAKE-INSTANCE 'XFT:FONT :FAMILY "DejaVu Sans Mono" :SUBFAMILY "Book" :SIZE 12)) + +;; Modeline +(LOAD-MODULE "fuzzytime") +(SETF *MODE-LINE-TIMEOUT* 60 + *SCREEN-MODE-LINE-FORMAT* '("%F ^>" (:EVAL (MAIL-INFO)) " " (:EVAL (BATTERY-INFO))) + *MODE-LINE-FOREGROUND-COLOR* "black" + *MODE-LINE-BACKGROUND-COLOR* "#EAFFFF" + FUZZYTIME:*MINUTE-GRANULARITY* 5 + FUZZYTIME:*FUZZYTIME-FORMAT* '(:MINUTES :HOURS "^7 in the ^n" :PERIOD "^7 on ^n" :DOW "^7 the ^n" :DAY)) +(TOGGLE-MODE-LINE (CURRENT-SCREEN) (CURRENT-HEAD)) + +;; Colours +;; TODO: Fix colours +(SET-FOCUS-COLOR "darkred") +(SET-UNFOCUS-COLOR "#32302f") +(SET-WIN-BG-COLOR "black") +(SET-BORDER-COLOR "grey30") +(SET-FG-COLOR "black") +(SET-BG-COLOR "#FFFFEA") + +;; ============================================================================= +;; Swank + +(QL:QUICKLOAD :SWANK) +(REQUIRE 'SWANK) + +(DEFVAR *SWANK-SERVER-RUNNING* NIL) + +(DEFCOMMAND SWANK-TOGGLE () () + (IF *SWANK-SERVER-RUNNING* + (PROGN + (SWANK:STOP-SERVER 4005) + (MY-MESSAGE :CENTER "Stopping swank.") + (SETF *SWANK-SERVER-RUNNING* NIL)) + (PROGN + (SWANK:CREATE-SERVER :DONT-CLOSE T + :PORT 4005) + (MY-MESSAGE :CENTER "Starting swank.") + (SETF *SWANK-SERVER-RUNNING* T)))) |
