My attempt to optimize my emacs load time <1 second
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

138 lines
5.0 KiB

;;; 06-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 '06-custom-exwm)
;;; 06-custom-exwm.el ends here