Skip to content

herbertjones/my-stumpwm-config

Repository files navigation

My StumpWM Config

Summary

This is my StumpWM personal config. Do what you want with it. Summary of its contents follows.

Files

preload/local

after-load-conf

This allows me to write system specific hooks to customize StumpWM inside of local.lisp.

(in-package :hfj)

(after-load-conf ("clean.lisp")
  (message "clean.lisp has been processed!"))

clean

Removes the various hooks I use so I don’t have left-over hooks that are called after I’ve done a “loadrc”.

defaults

Add an after-load-conf hook to override these.

group-names

List of group names to be created.

frame-preferences

List of preferences to pass to define-frame-preference.

debug

my-debug

Simple logging to a specific file.

(my-debug "Window:" window "Frame:" frame)

menu

Menu on super-o. Has wrappers for defcommand to add commands to the menu when they are defined.

For example, I can add a “Browser” under “Apps” in the default menu.

(defapp run-firefox () () ("Browser")
  "Run Firefox"
  (run-or-raise "firefox-bin" '(:class "Firefox")))

I can add a program that disables the touchpad under “Utility” in the default menu.

(defutil toggle-touchpad () () ("Toggle touchpad")
  "Enable/Disable touchpad"
  (run-shell-command "toggle-touchpad"))

Or to any menu I’ve defined with any level of sub-menus.

(def-menu-command pick-me-command () () (*default-menu* "Top" "Middle" "Pick Me!")
  "Example!"
  (message "Picked!"))

Even comes with a StumpWM menu for reloading, restarting, and starting/stopping swank.

emacs

Commands to start and stop swank.

window

with-new-window

Macro to start a process and capture its window and modify it.

Sample from scratchpad.lisp:

(hfj:with-new-window (window cmd)
             :new
             (push (cons name window) *scratch-floats*)
             :focus
             (stumpwm::float-window window (current-group))
             (cond (initial-gravity
                    (resize-by-gravity window initial-gravity ratio))))

Example to float an xterm:

(with-new-window (window "xterm")
  (stumpwm::float-window window (current-group))
  (stumpwm::float-window-move-resize window
                                     :x 50 :y 70
                                     :width 540 :height 400))

scratchpad

Create a “scratchpad” that can be toggled with a single keypress. Two variants exist, to present the window tiled or floating. I haven’t finished tweaking these yet, so don’t expect them to work perfectly yet.

toggle-split-scratchpad

Show a window in a frame above, below, left or right of the current frame. Splits with *default-split-ratio* by default. Uses gravity to determine the split. Corner gravity will pick the shorter of the two sides to place the split.

Example:

(defcommand scratchpad-test () ()
  (scratchpad::toggle-split-scratchpad "my-xterm" "xterm"
                                       :gravity :top-right
                                       :ratio 1/3))

toggle-floating-scratchpad

Floats a window on the current screen based on gravity. Splits with *default-float-ratio* by default. Also has a command scratchpad-float.

Examples:

(defcommand scratchpad-test () ()
  (scratchpad::toggle-split-scratchpad "my-xterm" "xterm"
                                       :gravity :center
                                       :ratio 1/3))
(define-key *top-map* (kbd "s-TAB") "scratchpad-float yakyak-scratch yakyak left")

applications

Various applications. Uses defapp and defutil to place commands directly into the menu.

Also has functions to start named instances of tmux and emacs. This way I can type s-a e e and get an instance of emacs named “e” and I can raise it quickly with the same keypresses. Or s-a e r for one named “r”. Makes it easy to switch back to or between instances of emacs.

groups

Set up groups and preferences defined in defaults.lisp.

session

A menu on s-q for logging out and shutting down. I should probably move this over to the main menu.

binds

Bindings. Uses some convenience functions to simplify maintenance.

(alist-define-keys *top-map*
                   '(("s-h" . "move-focus left")
                     ("s-j" . "move-focus down")
                     ("s-k" . "move-focus up")
                     ("s-l" . "move-focus right")))

;; Create and initialize a set of bindings off "s-f".
(alist-define-keys (create-map *frame-map* "s-f")
                   '(("f" . "frame-windowlist")
                     ("s-f" . "fother")
                     ("n" . "next-in-frame")
                     ("p" . "prev-in-frame")
                     ("e" . "fclear")
                     ("m" . "only")
                     ("=" . "balance-frames")))

;; Or one off "s-w m"
(alist-define-keys (create-map *window-move-map* "m" :on *window-map*)
                   '(("h" . "move-window left")  ;; That is, "s-w m h"
                     ("j" . "move-window down")
                     ("k" . "move-window up")
                     ("l" . "move-window right")))

mouse

Set focus to follow the mouse, and the mouse to follow focus.

border

For styles which I haven’t really gotten around to messing with yet.

mode-line

Basic mode line config.

About

My personal StumpWM config

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published