aboutsummaryrefslogtreecommitdiff
path: root/stumpwm/.stumpwm.d
diff options
context:
space:
mode:
Diffstat (limited to 'stumpwm/.stumpwm.d')
-rw-r--r--stumpwm/.stumpwm.d/init.lisp22
-rw-r--r--stumpwm/.stumpwm.d/keybinds.lisp88
-rw-r--r--stumpwm/.stumpwm.d/modeline.lisp5
-rw-r--r--stumpwm/.stumpwm.d/style.lisp93
-rw-r--r--stumpwm/.stumpwm.d/window.lisp38
5 files changed, 246 insertions, 0 deletions
diff --git a/stumpwm/.stumpwm.d/init.lisp b/stumpwm/.stumpwm.d/init.lisp
new file mode 100644
index 0000000..2be7d39
--- /dev/null
+++ b/stumpwm/.stumpwm.d/init.lisp
@@ -0,0 +1,22 @@
+(in-package :stumpwm)
+
+;;;; Modules
+
+;;;; REPL
+(ql:quickload :slynk)
+
+;; do prefix ; (keybind), type slynk, enter port num, sly-connect with
+;; correct port num
+(defcommand slynk (port) ((:string "Port number: "))
+ (sb-thread:make-thread
+ (lambda ()
+ (slynk:create-server :port (parse-integer port) :dont-close t))
+ :name "slynk-manual"))
+
+(setq *mouse-focus-policy* :sloppy
+ *float-window-modifier* :super)
+
+(load "~/.stumpwm.d/keybinds.lisp")
+(load "~/.stumpwm.d/window.lisp")
+(load "~/.stumpwm.d/style.lisp")
+(load "~/.stumpwm.d/modeline.lisp")
diff --git a/stumpwm/.stumpwm.d/keybinds.lisp b/stumpwm/.stumpwm.d/keybinds.lisp
new file mode 100644
index 0000000..6a9e2d7
--- /dev/null
+++ b/stumpwm/.stumpwm.d/keybinds.lisp
@@ -0,0 +1,88 @@
+(in-package :stumpwm)
+
+;; Remove default binds
+(defvar *gross-default-binds*
+ (list "c" "C-c" "e" "C-e" "d" "C-d" "SPC"
+ "i" "f" "C-k" "w" "C-w" "a" "C-a"
+ "C-t" "o" "TAB" "F" "C-h" "v"
+ "#" "m" "C-m" "l" "C-l" "G" "C-N"
+ "A" "X" "C-SPC" "I" "r" "W" "+"
+ "RET" "C-RET" "C-0" "C-1" "C-2"
+ "C-3" "C-4" "C-5" "C-6" "C-7" "\""
+ "C-8" "C-9" "0" "1" "2" "3" "4"
+ "5" "6" "7" "8" "9"))
+
+;; yuck!
+(dolist (bind *gross-default-binds*)
+ (undefine-key *root-map* (kbd bind)))
+
+(set-prefix-key (kbd "s-z"))
+(define-key *top-map* (kbd "s-q") "delete")
+
+;; programs
+(define-key *top-map* (kbd "s-d") "exec dmenu_run")
+(define-key *top-map* (kbd "s-RET") "exec st")
+(define-key *top-map* (kbd "s-e") "emacs")
+(define-key *top-map* (kbd "s-n") "exec emacsclient -c")
+(define-key *top-map* (kbd "s-N") "exec emacs-launcher")
+(define-key *top-map* (kbd "Print") "exec maimpick")
+(define-key *top-map* (kbd "s-X") "exec sysact")
+(define-key *top-map* (kbd "s-p") "exec st -e alsamixer")
+(define-key *top-map* (kbd "s-w") "exec librewolf-bin")
+
+;; media
+(define-key *top-map* (kbd "XF86AudioPlay") "exec playerctl play")
+(define-key *top-map* (kbd "s-P") "exec playerctl pause")
+(define-key *top-map* (kbd "XF86AudioPause") "exec playerctl pause")
+(define-key *top-map* (kbd "XF86AudioNext") "exec playerctl next")
+(define-key *top-map* (kbd "XF86AudioPrev") "exec playerctl previous")
+(define-key *top-map* (kbd "XF86AudioRaiseVolume") "exec pactl set-sink-volume @DEFAULT_SINK@ +5%")
+(define-key *top-map* (kbd "XF86AudioLowerVolume") "exec pactl set-sink-volume @DEFAULT_SINK@ -5%")
+(define-key *top-map* (kbd "XF86AudioMute") "exec pactl set-sink-mute @DEFAULT_SINK@ toggle")
+
+
+;; moving around
+(define-key *top-map* (kbd "s-h") "move-focus left")
+(define-key *top-map* (kbd "s-j") "move-focus down")
+(define-key *top-map* (kbd "s-k") "move-focus up")
+(define-key *top-map* (kbd "s-l") "move-focus right")
+(define-key *top-map* (kbd "s-H") "move-window left")
+(define-key *top-map* (kbd "s-J") "move-window down")
+(define-key *top-map* (kbd "s-K") "move-window up")
+(define-key *top-map* (kbd "s-L") "move-window right")
+
+;; frame movement
+(define-key *root-map* (kbd "v") "hsplit")
+(define-key *root-map* (kbd "s") "vsplit")
+(define-key *root-map* (kbd "d") "remove-split")
+(define-key *root-map* (kbd "V") "hsplit-and-focus")
+(define-key *root-map* (kbd "S") "vsplit-and-focus")
+(define-key *top-map* (kbd "s-Tab") "next-in-frame")
+(define-key *top-map* (kbd "s-ISO_Left_Tab") "prev-in-frame")
+(define-key *top-map* (kbd "s-o") "other-in-frame")
+(define-key *top-map* (kbd "s-O") "other")
+(define-key *top-map* (kbd "s-W") "frame-windowlist")
+
+;; group movement keybinds
+(define-key *top-map* (kbd "s-1") "gselect 1")
+(define-key *top-map* (kbd "s-2") "gselect 2")
+(define-key *top-map* (kbd "s-3") "gselect 3")
+(define-key *top-map* (kbd "s-4") "gselect 4")
+(define-key *top-map* (kbd "s-5") "gselect 5")
+(define-key *top-map* (kbd "s-6") "gselect 6")
+(define-key *top-map* (kbd "s-7") "gselect 7")
+(define-key *top-map* (kbd "s-8") "gselect 8")
+(define-key *top-map* (kbd "s-9") "gselect 9")
+(define-key *top-map* (kbd "s-0") "gselect 10")
+
+;; group shifting
+(define-key *top-map* (kbd "s-S-1") "gmove 1")
+(define-key *top-map* (kbd "s-S-2") "gmove 2")
+(define-key *top-map* (kbd "s-S-3") "gmove 3")
+(define-key *top-map* (kbd "s-S-4") "gmove 4")
+(define-key *top-map* (kbd "s-S-5") "gmove 5")
+(define-key *top-map* (kbd "s-S-6") "gmove 6")
+(define-key *top-map* (kbd "s-S-7") "gmove 7")
+(define-key *top-map* (kbd "s-S-8") "gmove 8")
+(define-key *top-map* (kbd "s-S-9") "gmove 9")
+(define-key *top-map* (kbd "s-S-0") "gmove 10")
diff --git a/stumpwm/.stumpwm.d/modeline.lisp b/stumpwm/.stumpwm.d/modeline.lisp
new file mode 100644
index 0000000..3f05948
--- /dev/null
+++ b/stumpwm/.stumpwm.d/modeline.lisp
@@ -0,0 +1,5 @@
+(in-package :stumpwm)
+
+;; mode line on all heads
+(dolist (h (screen-heads (current-screen)))
+ (enable-mode-line (current-screen) h t))
diff --git a/stumpwm/.stumpwm.d/style.lisp b/stumpwm/.stumpwm.d/style.lisp
new file mode 100644
index 0000000..a8154d9
--- /dev/null
+++ b/stumpwm/.stumpwm.d/style.lisp
@@ -0,0 +1,93 @@
+(in-package :stumpwm)
+
+(defparameter *reload-mode-line-p* nil)
+
+(defparameter *menu-prompt* "Select theme:")
+
+(defvar *themes* (make-hash-table :test 'equal))
+
+(defmacro define-theme (name &body body)
+ `(setf (gethash ,name *themes*) #'(lambda () ,@body)))
+
+(defun select-from-themes-menu ()
+ (when-let* ((items (hash-table-keys *themes*))
+ (item (select-from-menu (current-screen) items *menu-prompt*)))
+ (gethash (car item) *themes*)))
+
+(defun reloads ()
+ (update-color-map (current-screen))
+ (when *reload-mode-line-p*
+ (mode-line)
+ (mode-line)))
+
+(defun themes-menu ()
+ (when-let (theme (select-from-themes-menu))
+ (funcall theme)
+ (reloads)))
+
+(define-theme "Ef Autumn"
+ (set-fg-color "#cfbcba")
+ (set-bg-color "#0f0e06")
+ (set-focus-color "#692a12")
+ (set-unfocus-color "#36322f")
+ (setf *mode-line-background-color* "#0f0e06"
+ *mode-line-foreground-color* "#cfbcba")
+ )
+
+(define-theme "Ef Bio"
+
+ (set-fg-color "#cfdfd5")
+ (set-bg-color "#111111")
+ (set-focus-color "#00552f")
+ (set-unfocus-color "#2a3644")
+ (setf *mode-line-background-color* "#111111"
+ *mode-line-foreground-color* "#cfdfd5")
+ )
+
+(define-theme "Gruber Darker"
+
+ (set-fg-color "#e4e4e4")
+ (set-bg-color "#181818")
+ (set-focus-color "#cc8c3c")
+ (set-unfocus-color "#282828")
+ (setf *mode-line-background-color* "#181818"
+ *mode-line-foreground-color* "#e4e4e4")
+ )
+
+(define-theme "Gruvbox"
+
+ (set-fg-color "#ebdbb2")
+ (set-bg-color "#1d2021")
+ (set-focus-color "#b8bb26")
+ (set-unfocus-color "#83a598")
+ (setf *mode-line-background-color* "#1d2021"
+ *mode-line-foreground-color* "#ebdbb2")
+ )
+
+(defcommand theme () () (themes-menu))
+
+(setq *startup-message* (format nil "^bWelcome Home!!!"))
+
+(setf *message-window-padding* 4
+ *message-window-y-padding* 4
+ *message-window-gravity* :center)
+
+(setf *input-window-gravity* :center)
+
+;;;; Fonts
+(ql:quickload "clx-truetype")
+(pushnew (concat (getenv "HOME")
+ "/.local/share/fonts/")
+ xft:*font-dirs* :test #'string=)
+(xft:cache-fonts)
+
+(let ((parent-font "Iosevka Comfy"))
+ (when (find parent-font (the list (clx-truetype:get-font-families))
+ :test #'string=)
+ (load-module "ttf-fonts")
+ (set-font `(,(make-instance 'xft:font
+ :family "Iosevka Comfy"
+ :subfamily "Regular"
+ :size 12
+ :antialias t)))
+ (mode-line)))
diff --git a/stumpwm/.stumpwm.d/window.lisp b/stumpwm/.stumpwm.d/window.lisp
new file mode 100644
index 0000000..daa3ffc
--- /dev/null
+++ b/stumpwm/.stumpwm.d/window.lisp
@@ -0,0 +1,38 @@
+(in-package :stumpwm)
+
+;;;; Groups
+(grename "home")
+(gnew "alt")
+
+;;;; Window Format
+(setf *window-format* "%s%n%30t"
+ *window-border-style* :tight
+ *normal-border-width* 5
+ *maxsize-border-width* 5
+ )
+
+;;;; Gaps
+(load-module "swm-gaps")
+(setq swm-gaps:*gaps-on* t)
+
+;;; Focus
+(load-module "beckon")
+(defmacro with-focus-lost (&body body)
+ "Make sure WIN is on the top level while the body is running and
+restore it's always-on-top state afterwords"
+ `(progn (banish)
+ ,@body
+ (when (current-window)
+ (beckon:beckon))))
+;;; Splits
+(defcommand hsplit-and-focus () ()
+ "create a new frame on the right and focus it."
+ (with-focus-lost
+ (hsplit)
+ (move-focus :right)))
+
+(defcommand vsplit-and-focus () ()
+ "create a new frame below and focus it."
+ (with-focus-lost
+ (vsplit)
+ (move-focus :down)))