dotfiles/oni/home/services/stumpwm/config
Tom Willemse 72bb9d7b9c Set wallpaper when stumpwm starts
This depends on ‘feh’ being installed and the wallpaper existing. I'll want to
update it to actually depend on the ‘feh’ package and to download the wallpaper
package from somewhere else.
2024-07-01 14:20:25 -07:00

159 lines
5 KiB
Common Lisp

;; -*- mode: lisp; -*-
(in-package :stumpwm-user)
(require 'swank)
(set-prefix-key (kbd "s-x"))
(defvar *screen-locking-hook* nil
"Hook that gets called right before the screen gets locked.")
(defvar *screen-unlocked-hook* nil
"Hook that gets called right after the screen is unlocked.")
(defun run-screen-unlocked-hook (process)
"Run `*screen-unlocked-hook* if PROCESS' status is `:exited'."
(when (eq (sb-ext:process-status process) :exited)
(run-hook *screen-unlocked-hook*)))
(defun vpn-connected-p ()
(probe-file "/sys/class/net/vpn"))
(defcommand lock-screen () ()
"Lock the screen using i3lock.
Run `*screen-locking-hook*' before locking it and run `*screen-unlocked-hook*'
after it has been unlocked."
(run-hook *screen-locking-hook*)
(sb-ext:run-program
*shell-program* '("-c" "i3lock --nofork --color=000000")
:wait nil
:status-hook #'run-screen-unlocked-hook))
(defcommand raise-browser () ()
"Open or show my browser"
(run-or-raise "firefox" '(:class "firefox")))
(defcommand raise-emacs () ()
"Open or show Emacs"
(run-or-raise "emacsclient -c" '(:class "Emacs")))
(defcommand raise-terminal () ()
"Open or show my terminal"
(run-or-raise "kitty" '(:class "kitty")))
(define-key *top-map* (kbd "C-M-l") "lock-screen")
(define-key *top-map* (kbd "s-b") "raise-browser")
(define-key *top-map* (kbd "s-e") "raise-emacs")
(define-key *top-map* (kbd "s-t") "raise-terminal")
(define-key *top-map* (kbd "s-!") "exec rofi -show drun")
(define-key *top-map* (kbd "s-w") "exec rofi -show window")
(define-remapped-keys
`(("teams-for-linux"
;; Mute microphone in meetings.
("XF86Launch6" . "C-S-m"))
("[Ff]irefox"
;; Generally cancel action.
("XF86Launch6" . "ESC"))
("[Ee]macs"
;; Save document.
("XF86Launch5" . ("C-x" "C-s"))
;; Save some documents.
("S-XF86Launch5" . ("C-x" "s"))
;; Quit command.
("XF86Launch6" . "C-g")
;; Revert (reload) file.
("XF86Launch7" . ("C-x" "x" "g")))
;; Portal: Revolution
("revolution"
;; Quick Save
("XF86Launch5" . "F6")
;; Quick Load
("XF86Launch7" . "F7"))))
(set-bg-color "#222424")
(set-border-color "#3f4242")
(set-fg-color "#bfbfbf")
(set-float-focus-color "#5b6161")
(set-float-unfocus-color "#3f4242")
(set-focus-color "#ff9800")
(set-unfocus-color "#3f4242")
(setf *mode-line-background-color* "#5b6161"
*mode-line-foreground-color* "#bfbfbf")
(setf *screen-mode-line-format*
(list " [^B%n^b] "
"^[^(:bg \"#f17272\")^(:fg \"#222424\") "
'(:eval
(or (ignore-errors (window-title (current-window)))
"Unknown"))
" ^]^>"
'(:eval
(if (vpn-connected-p)
"^*5^B[VPN]^b^n "
""))
"%d "))
;;; Redefinition of the make mode-line window to add the Dock window type.
(defun stumpwm::make-mode-line-window (screen)
"Create a window suitable for a modeline."
(let ((window (xlib:create-window
:parent (screen-root screen)
:x 0 :y 0 :width 1 :height 1
:background (stumpwm::alloc-color screen *mode-line-background-color*)
:border (stumpwm::alloc-color screen *mode-line-border-color*)
:border-width *mode-line-border-width*
;; You can click the modeline
:event-mask (xlib:make-event-mask :button-press :exposure)
;; these windows are not controlled by the window manager
:override-redirect :on)))
(xlib:change-property
window :_NET_WM_WINDOW_TYPE
(list (xlib:find-atom *display* :_NET_WM_WINDOW_TYPE_DOCK))
:atom 32)
window))
(mode-line)
;;; Screenshots
(defvar *screenshot-bindings*
(let ((m (make-sparse-keymap)))
(define-key m (kbd "s") "exec flameshot gui")
(define-key m (kbd "c") "exec flameshot screen")
(define-key m (kbd "f") "exec flameshot full")
m))
(defvar *notification-bindings*
(let ((m (make-sparse-keymap)))
(define-key m (kbd "RET") "exec dunstctl action")
(define-key m (kbd "c") "exec dunstctl close")
(define-key m (kbd "S-c") "exec dunstctl close-all")
(define-key m (kbd "SPC") "exec dunstctl context")
(define-key m (kbd ",") "exec dunstctl history-pop")
(define-key m (kbd "p") "exec dunstctl set-paused toggle")
m))
(defvar *user-bindings*
(let ((m (make-sparse-keymap)))
(define-key m (kbd "s") '*screenshot-bindings*)
(define-key m (kbd "n") '*notification-bindings*)
m))
(define-key *top-map* (kbd "s-c") '*user-bindings*)
(restore-from-file "default")
(define-frame-preference "Default"
(0 t nil :class "kitty")
(1 t nil :class "Emacs")
(3 t nil :class "firefox"))
(define-frame-preference "teams"
(0 t t :class "teams-for-linux" :create t))
(sb-ext:run-program *shell-program* '("-c" "feh --bg-center ~/pictures/wallpaper/5120x1440/wallhaven-v9ydgl.jpg"))
(swank:create-server :dont-close t)
(which-key-mode)