From 6339a9ef319a6501bae547a33bf96c416cb8447e Mon Sep 17 00:00:00 2001 From: Ian Keane Date: Fri, 7 Aug 2026 00:59:48 -0400 Subject: [PATCH] Stumpwm configs --- config/stumpwm/config.lisp | 89 ++++++++++++++++++++++++++++++++++++-- emacs-config.org | 2 +- link.sh | 11 ++++- scripts/mpv-pick.sh | 8 ++++ 4 files changed, 105 insertions(+), 5 deletions(-) create mode 100755 scripts/mpv-pick.sh diff --git a/config/stumpwm/config.lisp b/config/stumpwm/config.lisp index 4fbe1bc..141a130 100644 --- a/config/stumpwm/config.lisp +++ b/config/stumpwm/config.lisp @@ -1,7 +1,7 @@ (in-package :stumpwm) ;; change the prefix key to something else -(set-prefix-key (kbd "C-z")) +(set-prefix-key (kbd "C-t")) ;; prompt the user for an interactive command. The first arg is an ;; optional initial contents. @@ -10,6 +10,7 @@ (when cmd (eval-command cmd t)))) + ;; Read some doc (define-key *root-map* (kbd "d") "exec gv") ;; Browse somewhere @@ -32,8 +33,47 @@ (define-key *root-map* (kbd "M-s") "duckduckgo") (define-key *root-map* (kbd "i") "imdb") -;; Message window font -(set-font "-xos4-terminus-medium-r-normal--14-140-72-72-c-80-iso8859-15") +;; Message/help window styling +(set-fg-color "#d8dee9") +(set-bg-color "#1b2b34") +(set-border-color "#6699cc") +(setf *normal-border-width* 2) +(setf *window-border-style* :thin) +(setf *ignore-wm-inc-hints* t) +(set-module-dir "~/.stumpwm.d/modules/util") +(load-module "swm-gaps") +(setf swm-gaps:*inner-gaps-size* 8) +(setf swm-gaps:*outer-gaps-size* 16) + +(defcommand gaps-off () () + (swm-gaps:toggle-gaps-off)) + +(defcommand gaps-small () () + (setf swm-gaps:*inner-gaps-size* 8 + swm-gaps:*outer-gaps-size* 8) + (swm-gaps:toggle-gaps-on)) + +(defcommand gaps-medium () () + (setf swm-gaps:*inner-gaps-size* 16 + swm-gaps:*outer-gaps-size* 16) + (swm-gaps:toggle-gaps-on)) + +(defcommand gaps-large () () + (setf swm-gaps:*inner-gaps-size* 32 + swm-gaps:*outer-gaps-size* 32) + (swm-gaps:toggle-gaps-on)) + +(defvar *gaps-map* (make-sparse-keymap)) +(define-key *gaps-map* (kbd "0") "gaps-off") +(define-key *gaps-map* (kbd "1") "gaps-small") +(define-key *gaps-map* (kbd "2") "gaps-medium") +(define-key *gaps-map* (kbd "3") "gaps-large") +(set-font "-b&h-luxi mono-medium-r-normal--20-*-*-*-m-0-iso10646-1") +(setf *message-window-padding* 16) +(setf *message-window-gravity* :center) +(setf *input-window-gravity* :center) + + ;;; Define window placement policy... @@ -69,3 +109,46 @@ (define-frame-preference "Emacs" (1 t t :restore "emacs-editing-dump" :title "...xdvi") (0 t t :create "emacs-dump" :class "Emacs")) + +(defcommand kill-window-or-frame () () + (if (current-window) + (delete-window) + (remove-split))) + +;; Don't send a random window to a new split +(setf *new-frame-action* :empty) +(setf *suppress-frame-indicator* t) + +(defcommand rofi-pull-window () () + (let* ((windows (remove (current-window) (group-windows (current-group)))) + (names (format nil "~{~a~%~}" (mapcar #'window-name windows))) + (selection (run-prog-collect-output + "/bin/sh" "-c" + (format nil "echo '~a' | rofi -dmenu -p 'window'" names)))) + (when (and selection (not (string= selection ""))) + (let ((win (find (string-trim '(#\Newline) selection) + windows :key #'window-name :test #'string=))) + (when win (pull-window win)))))) + +(defvar *window-map* (make-sparse-keymap)) +(define-key *top-map* (kbd "s-W") *window-map*) +(define-key *window-map* (kbd "r") "iresize") +(define-key *window-map* (kbd "g") *gaps-map*) + +(defvar *media-map* (make-sparse-keymap)) +(define-key *top-map* (kbd "s-m") *media-map*) +(define-key *media-map* (kbd "v") + "exec mpv-pick.sh") + +(define-key *top-map* (kbd "s-d") "exec rofi -show run") +(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-w") "rofi-pull-window") +(define-key *top-map* (kbd "s-p") "next-in-frame") +(define-key *top-map* (kbd "s-n") "prev-in-frame") +(define-key *top-map* (kbd "s-q") "kill-window-or-frame") +(define-key *top-map* (kbd "s--") "vsplit") +(define-key *top-map* (kbd "s-\|") "hsplit") + diff --git a/emacs-config.org b/emacs-config.org index b799b41..46fbba6 100644 --- a/emacs-config.org +++ b/emacs-config.org @@ -186,7 +186,7 @@ Setting this in the :init of evil doesn't work for some reason. It has to be ear ;; '(font . "Fira Code Mono 16")) (set-face-attribute 'default nil - :family "Fira Code" + :family "FiraCode Nerd Font Mono" :height 160) ;; (load-theme 'doom-oceanic-next t) diff --git a/link.sh b/link.sh index 54c6bd1..c05dec2 100755 --- a/link.sh +++ b/link.sh @@ -37,6 +37,15 @@ backup_and_link "$DOTFILES/config/yazi" "$HOME/.config/yazi" backup_and_link "$DOTFILES/config/rofi" "$HOME/.config/rofi" backup_and_link "$DOTFILES/config/zathura" "$HOME/.config/zathura" +# StumpWM contrib modules (not stored in dotfiles, cloned on demand) +STUMPWM_MODULES="$HOME/.stumpwm.d/modules" +if [ ! -d "$STUMPWM_MODULES" ]; then + echo "cloning stumpwm-contrib modules..." + git clone https://github.com/stumpwm/stumpwm-contrib "$STUMPWM_MODULES" +else + echo "stumpwm-contrib already present, skipping" +fi + # StumpWM: link individual file (preserve ~/.config/stumpwm for live data like groups, etc.) mkdir -p "$HOME/.config/stumpwm" backup_and_link "$DOTFILES/config/stumpwm/config.lisp" "$HOME/.config/stumpwm/config" @@ -48,7 +57,7 @@ backup_and_link "$DOTFILES/config/gnupg/gpg-agent.conf" "$HOME/.gnupg/gpg-agent. # pinentry-smart: TUI-aware wrapper (curses normally, tty inside senpai/mutt/etc.) mkdir -p "$HOME/.local/bin" -backup_and_link "$DOTFILES/scripts/pinentry-smart" "$HOME/.local/bin/pinentry-smart" +backup_and_link "$DOTFILES/scripts/mpv-pick.sh" "$HOME/.local/bin/mpv-pick.sh" chmod +x "$DOTFILES/scripts/pinentry-smart" # GTK themes diff --git a/scripts/mpv-pick.sh b/scripts/mpv-pick.sh new file mode 100755 index 0000000..87904c7 --- /dev/null +++ b/scripts/mpv-pick.sh @@ -0,0 +1,8 @@ +#!/bin/bash +# Build a list of full paths, display just filenames in rofi +files=$(cd $HOME/Videos && fd -t f) +selection=$(echo "$files" | awk -F'/' '{print $NF}' | rofi -i -dmenu -p mpv) +if [ -n "$selection" ]; then + fullpath=$(echo "$files" | grep -F "$selection" | head -1) + mpv --save-position-on-quit "$HOME/Videos/$fullpath" +fi