summaryrefslogtreecommitdiff
path: root/emacs/inits/00-exwm.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs/inits/00-exwm.el')
-rw-r--r--emacs/inits/00-exwm.el153
1 files changed, 153 insertions, 0 deletions
diff --git a/emacs/inits/00-exwm.el b/emacs/inits/00-exwm.el
new file mode 100644
index 0000000..381f54e
--- /dev/null
+++ b/emacs/inits/00-exwm.el
@@ -0,0 +1,153 @@
+;; 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-<tab>") '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-<f2>") (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-<f10>")
+ (lambda ()
+ (interactive)
+ (adjust-volume "Speaker" "+")))
+
+ (exwm-input-set-key (kbd "s-<f9>")
+ (lambda ()
+ (interactive)
+ (adjust-volume "Speaker" "-")))
+
+ (exwm-input-set-key (kbd "s-<f8>")
+ (lambda ()
+ (interactive)
+ (adjust-volume "Speaker" "toggle")))
+
+ (exwm-input-set-key (kbd "C-s-<f10>")
+ (lambda ()
+ (interactive)
+ (adjust-volume "Headphone" "+")))
+
+ (exwm-input-set-key (kbd "C-s-<f9>")
+ (lambda ()
+ (interactive)
+ (adjust-volume "Headphone" "-")))
+
+ (exwm-input-set-key (kbd "C-s-<f8>")
+ (lambda ()
+ (interactive)
+ (adjust-volume "Headphone" "toggle")))
+
+ (exwm-input-set-key (kbd "s-<f7>") (lambda ()
+ (interactive)
+ (shell-command "$HOME/bin/backlight_up.sh")
+ (message "Backlight up.")))
+
+ (exwm-input-set-key (kbd "s-<f6>") (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))))