159 lines
5 KiB
Common Lisp
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|zen-beta")))
|
|
|
|
(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|org\.wezfurlong\.wezterm")))
|
|
|
|
(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)
|