;; Time-stamp: <2019-09-11 14:35:00 (tslil@basingstoke)> (defun adjust-volume (mixer adjust) (let ((tail " | tail -n 1") (sed (concat " | sed 's/.*\\[\\([0-9]*.\\)\\] " "\\[.*dB\\] \\[\\(.*\\)\\]$/" mixer " \\1 \\2/'"))) (shell-command (concat (cond ((string-equal "+" adjust) (concat "amixer set " mixer " 2%+")) ((string-equal "-" adjust) (concat "amixer set " mixer " 2%-")) (t (concat "amixer set " mixer " toggle"))) tail sed)))) (defun banish-rat () (interactive) (shell-command "xdotool mousemove 1366 768") (message "Rat banished.")) (use-package exwm :if (window-system) :ensure t :demand :config (setq exwm-workspace-number 1 exwm-workspace-switch-create-limit 5 exwm-workspace-show-all-buffers nil) (add-hook 'exwm-update-class-hook (lambda () (exwm-workspace-rename-buffer exwm-class-name))) ;; ------------------------------------------------------------------- ;; Global key binds (setq exwm-input-simulation-keys '(([?\C-b] . [left]) ([?\C-f] . [right]) ([?\C-p] . [up]) ([?\C-n] . [down]) ([?\C-a] . [home]) ([?\C-e] . [end]) ([?\M-v] . [prior]) ([?\C-v] . [next]) ([?\C-s] . [C-f]) ;;([?\C-d] . [delete]) ;;([?\C-k] . [S-end delete]) )) ;; reset (exwm-input-set-key (kbd "s-r") 'exwm-reset) ;; workspaces (exwm-input-set-key (kbd "s-e") 'exwm-workspace-switch) (dotimes (i 10) (exwm-input-set-key (kbd (format "s-%d" i)) `(lambda () (interactive) (exwm-workspace-switch-create ,i)))) ;; buffer and window management (exwm-input-set-key (kbd "s-") 'next-buffer) (defvar exwm-last-workspace-index 0) (defun exwm-last-workspace () (interactive) (let ((temp exwm-workspace-current-index)) (exwm-workspace-switch exwm-last-workspace-index) (setq exwm-last-workspace-index temp))) (exwm-input-set-key (kbd "s-n") 'ivy-switch-buffer) (exwm-input-set-key (kbd "s-o") 'switch-window) (exwm-input-set-key (kbd "s-\\") 'exwm-last-workspace) (exwm-input-set-key (kbd "s-b") 'banish-rat) ;; run command (exwm-input-set-key (kbd "s-c") (lambda () (interactive) (start-process "" nil "st"))) (exwm-input-set-key (kbd "s-q") (lambda () (interactive) (start-process "" nil "firefox-esr"))) (exwm-input-set-key (kbd "s-") (lambda () (interactive) (start-process "" nil "lock"))) (exwm-input-set-key (kbd "s-p") (lambda (command) (interactive (list (read-shell-command "$ "))) (start-process-shell-command command nil command))) ;; Volume (exwm-input-set-key (kbd "s-") (lambda () (interactive) (adjust-volume "Speaker" "+"))) (exwm-input-set-key (kbd "s-") (lambda () (interactive) (adjust-volume "Speaker" "-"))) (exwm-input-set-key (kbd "s-") (lambda () (interactive) (adjust-volume "Speaker" "toggle"))) (exwm-input-set-key (kbd "C-s-") (lambda () (interactive) (adjust-volume "Headphone" "+"))) (exwm-input-set-key (kbd "C-s-") (lambda () (interactive) (adjust-volume "Headphone" "-"))) (exwm-input-set-key (kbd "C-s-") (lambda () (interactive) (adjust-volume "Headphone" "toggle"))) (exwm-input-set-key (kbd "s-") (lambda () (interactive) (shell-command "$HOME/bin/backlight_up.sh") (message "Backlight up."))) (exwm-input-set-key (kbd "s-") (lambda () (interactive) (shell-command "$HOME/bin/backlight_down.sh") (message "Backlight down."))) ;; ------------------------------------------------------------------- ;; RandR (require 'exwm-randr) (exwm-randr-enable) (setq exwm-randr-workspace-monitor-plist '(1 "HDMI-1" 0 "eDP-1")) (exwm-enable)) ;; ----------------------------------------------------------------------------- ;; EXWM-edit (use-package exwm-edit :ensure t :config (add-hook 'exwm-edit-compose-hook (lambda () (text-mode))))