;;; custom-exwm --- Provide EXWM specific config
|
|
|
|
;;; Commentary:
|
|
|
|
;;; Code:
|
|
|
|
(defun leo/which-session ()
|
|
"Return the current Xsession name. i.e. i3, exwm, etc..."
|
|
(shell-command-to-string "cat ~/.dmrc | tail -n1 | awk -F'=' '{print $2}' | tr -d \"\n\""))
|
|
|
|
(when (string-equal "exwm" (eval (leo/which-session)))
|
|
;; https://github.com/ch11ng/exwm
|
|
(use-package exwm
|
|
:ensure t
|
|
:demand t
|
|
:bind
|
|
("<XF86AudioLowerVolume>" . (lambda() (interactive) (shell-command-to-string "amixer sset Master 2%-")))
|
|
("<XF86AudioRaiseVolume>" . (lambda() (interactive) (shell-command-to-string "amixer sset Master 2%+")))
|
|
("<XF86AudioMute>" . (lambda() (interactive) (shell-command-to-string "amixer sset Master 0")))
|
|
("<pause>" . (lambda() (interactive) (shell-command-to-string "playerctl play-pause")))
|
|
("<XF86AudioPrev>" . (lambda() (interactive) (shell-command-to-string "playerctl next")))
|
|
("<XF86AudioNext>" . (lambda() (interactive) (shell-command-to-string "playerctl prev")))
|
|
:custom
|
|
(exwm-workspace-show-all-buffers t "Show all buffers regardless of current workspace.")
|
|
(exwm-workspace-warp-cursor t "Move cursor when window focus changes.")
|
|
:config
|
|
(require 'exwm-config)
|
|
(exwm-config-default)
|
|
|
|
(display-time-mode 1)
|
|
(display-battery-mode 1)
|
|
|
|
(require 'exwm-systemtray)
|
|
(exwm-systemtray-enable)
|
|
|
|
(require 'exwm-randr)
|
|
(defun leo/exwm-change-screen-hook ()
|
|
(let ((xrandr-output-regexp "\n\\([^ ]+\\) connected ")
|
|
default-output)
|
|
(with-temp-buffer
|
|
(call-process "xrandr" nil t nil)
|
|
(goto-char (point-min))
|
|
(re-search-forward xrandr-output-regexp nil 'noerror)
|
|
(setq default-output (match-string 1))
|
|
(forward-line)
|
|
(if (not (re-search-forward xrandr-output-regexp nil 'noerror))
|
|
(call-process "xrandr" nil nil nil "--output" default-output "--auto")
|
|
(call-process
|
|
"xrandr" nil nil nil
|
|
"--output" default-output "--primary" "--auto"
|
|
"--output" (match-string 1) "--off")
|
|
(setq exwm-randr-workspace-output-plist (list 0 default-output))))))
|
|
(add-hook 'exwm-randr-screen-change-hook 'leo/exwm-change-screen-hook)
|
|
(exwm-randr-enable)
|
|
|
|
;; (start-process "polybar" "*polybar*" "~/scripts/polybar/polybar_launch")
|
|
|
|
(setq exwm-workspace-index-map (lambda (i) (number-to-string (1+ i))))
|
|
|
|
(dolist (k '(XF86AudioLowerVolume
|
|
XF86AudioRaiseVolume
|
|
XF86AudioMude
|
|
pause
|
|
XF86AudioPrev
|
|
XF86AudioNext))
|
|
(push k exwm-input-prefix-keys))
|
|
|
|
(setq exwm-input-simulation-keys
|
|
'(
|
|
;; movement
|
|
([?\C-b] . [left])
|
|
([?\M-b] . [C-left])
|
|
([?\C-f] . [right])
|
|
([?\M-f] . [C-right])
|
|
([?\C-p] . [up])
|
|
([?\C-n] . [down])
|
|
([?\C-a] . [home])
|
|
([?\C-e] . [end])
|
|
([?\M-v] . [prior])
|
|
([?\C-v] . [next])
|
|
([?\C-d] . [delete])
|
|
([?\C-k] . [S-end delete])
|
|
;; cut/paste.
|
|
([?\C-w] . [?\C-x])
|
|
([?\M-w] . [?\C-c])
|
|
([?\C-y] . [?\C-v])
|
|
;; search
|
|
([?\C-s] . [?\C-f])))
|
|
|
|
(setq exwm-input-global-keys
|
|
`(
|
|
;; Bind "s-r" to exit char-mode and fullscreen mode.
|
|
([?\s-r] . exwm-reset)
|
|
;; Super + R to restart exwm
|
|
([8388690] . exwm-restart)
|
|
|
|
;; Bind "s-w" to switch workspace interactively.
|
|
([?\s-w] . exwm-workspace-switch)
|
|
|
|
;; Bind "s-!" to "s-^" to switch to a workspace by its index.
|
|
([8388641] . (lambda ()(interactive) (exwm-workspace-switch-create 1)))
|
|
([8388672] . (lambda ()(interactive) (exwm-workspace-switch-create 2)))
|
|
([8388643] . (lambda ()(interactive) (exwm-workspace-switch-create 3)))
|
|
([8388644] . (lambda ()(interactive) (exwm-workspace-switch-create 4)))
|
|
([8388645] . (lambda ()(interactive) (exwm-workspace-switch-create 5)))
|
|
([8388702] . (lambda ()(interactive) (exwm-workspace-switch-create 6)))
|
|
([8388649] . (lambda ()(interactive) (exwm-workspace-switch-create 0)))
|
|
|
|
;; Open ST in other window
|
|
([s-return] . (lambda ()(interactive) (split-window-right) (other-window) (start-process "" nil "st")))
|
|
|
|
;; Bind "s-<f2>" to "slock", a simple X display locker.
|
|
;; ([s-f2] . (lambda ()
|
|
;; (interactive)
|
|
;; (start-process "" nil "/usr/bin/slock")))))
|
|
)
|
|
)
|
|
)
|
|
|
|
(use-package exwm-edit
|
|
:ensure t
|
|
:config
|
|
(defun ag-exwm/on-exwm-edit-compose ()
|
|
(spacemacs/toggle-visual-line-navigation-on)
|
|
(funcall 'markdown-mode))
|
|
|
|
;; (add-hook 'exwm-edit-compose-hook 'ag-exwm/on-exwm-edit-compose))
|
|
)
|
|
|
|
;; https://github.com/emacsmirror/dmenu
|
|
(use-package dmenu
|
|
:ensure t
|
|
:bind ("s-SPC" . dmenu)
|
|
)
|
|
)
|
|
|
|
(provide 'custom-exwm)
|
|
;;; custom-exwm.el ends here
|