X-Git-Url: https://git.shemshak.org/~bandali/configs/blobdiff_plain/d141ce1178b5a4728e31ca382e4323552d650df7..cf88804f394b5489ff6e743a2d7eb7ffd5647f01:/.emacs.d/init.el?ds=inline diff --git a/.emacs.d/init.el b/.emacs.d/init.el index e499e4b..eb0606a 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -563,22 +563,27 @@ For disabling the behaviour for certain buffers and/or modes." (use-package exwm :demand :config - (require 'exwm-config) - - (setq - exwm-workspace-number 4 - exwm-workspace-index-map (lambda (i) (number-to-string (1+ i)))) - - ;; Make class name the buffer name, truncating beyond 60 characters - (defun exwm-rename-buffer () + ;; make class name the buffer name, truncating beyond 60 characters + (defun b/exwm-rename-buffer () (interactive) (exwm-workspace-rename-buffer (concat exwm-class-name ":" (if (<= (length exwm-title) 60) exwm-title (concat (substring exwm-title 0 59) "..."))))) - (add-hook 'exwm-update-class-hook 'exwm-rename-buffer) - (add-hook 'exwm-update-title-hook 'exwm-rename-buffer) + ;; Enable EXWM + (exwm-enable) + :hook ((exwm-update-class . b/exwm-rename-buffer) + (exwm-update-title . b/exwm-rename-buffer))) +(use-feature exwm-config + :demand + :after exwm + :hook (exwm-init . exwm-config--fix/ido-buffer-window-other-frame)) + +(use-feature exwm-input + :demand + :after exwm-workspace + :config (defun b/exwm-ws-prev-index () "Return the index for the previous EXWM workspace, wrapping around if needed." @@ -594,138 +599,90 @@ around if needed." 0 (1+ exwm-workspace-current-index))) - ;; 's-R': Reset - (exwm-input-set-key (kbd "s-R") #'exwm-reset) - ;; 's-\': Switch workspace - (exwm-input-set-key (kbd "s-\\") #'exwm-workspace-switch) - ;; 's-N': Switch to certain workspace - (dotimes (i exwm-workspace-number) - (exwm-input-set-key - (kbd (format "s-%d" i)) - (lambda () - (interactive) - (exwm-workspace-switch-create (1- i))))) - ;; 's-[': Switch to previous workspace - (defun b/exwm-ws-prev () - "Switch to previous EXWM workspace, wrapping around if needed." - (interactive) - (exwm-workspace-switch-create (b/exwm-ws-prev-index))) - (exwm-input-set-key (kbd "s-[") #'b/exwm-ws-prev) - ;; 's-]': Switch to next workspace - (defun b/exwm-ws-next () - "Switch to next EXWM workspace, wrapping around if needed." - (interactive) - (exwm-workspace-switch-create (b/exwm-ws-next-index))) - (exwm-input-set-key (kbd "s-]") #'b/exwm-ws-next) - ;; 's-{': Move window to previous workspace - (defun b/exwm-move-window-to-prev-ws () - "Move window to previous EXWM workspace, wrapping around if -needed." - (interactive) - (exwm-workspace-move-window (b/exwm-ws-prev-index))) - (exwm-input-set-key (kbd "s-{") #'b/exwm-move-window-to-prev-ws) - ;; 's-}': Move window to next workspace - (defun b/exwm-move-window-to-next-ws () - "Move window to next EXWM workspace, wrapping around if -needed." - (interactive) - (exwm-workspace-move-window (b/exwm-ws-next-index))) - (exwm-input-set-key (kbd "s-}") #'b/exwm-move-window-to-next-ws) - ;; 's-SPC': Launch application - ;; (exwm-input-set-key - ;; (kbd "s-SPC") - ;; (lambda (command) - ;; (interactive (list (read-shell-command "➜ "))) - ;; (start-process-shell-command command nil command))) - - (exwm-input-set-key (kbd "M-s-SPC") #'counsel-linux-app) - - (exwm-input-set-key - (kbd "s-") (lambda () - (interactive) - (b/start-process "urxvt"))) - - (exwm-input-set-key - (kbd "s-t") - (lambda () - (interactive) - (exwm-floating-toggle-floating))) - - (exwm-input-set-key - (kbd "s-f") - (lambda () - (interactive) - (exwm-layout-toggle-fullscreen))) - - (exwm-input-set-key - (kbd "s-w") - (lambda () - (interactive) - (kill-buffer (current-buffer)))) - - (exwm-input-set-key - (kbd "s-q") - (lambda () - (interactive) - (exwm-manage--kill-client))) - - ;; (exwm-input-set-key - ;; (kbd "s-SPC") ;; rofi doesn't properly launch programs when started from emacs - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "rofi-run" nil "rofi -show run -display-run '> ' -display-window ' 🗔 '"))) - - ;; (exwm-input-set-key - ;; (kbd "s-/") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "rofi-win" nil "rofi -show window -display-run '> ' -display-window ' 🗔 '"))) - - ;; (exwm-input-set-key - ;; (kbd "M-SPC") - ;; (lambda () - ;; (interactive) - ;; (start-process "rofi-pass" nil "rofi-pass"))) - - (exwm-input-set-key - (kbd "") - (lambda () - (interactive) - (start-process-shell-command "pamixer" nil "pamixer --toggle-mute"))) - - (exwm-input-set-key - (kbd "") - (lambda () - (interactive) - (start-process-shell-command "pamixer" nil "pamixer --allow-boost --decrease 5"))) - - (exwm-input-set-key - (kbd "") - (lambda () - (interactive) - (start-process-shell-command "pamixer" nil "pamixer --allow-boost --increase 5"))) - - (exwm-input-set-key - (kbd "") - (lambda () - (interactive) - (start-process-shell-command "mpc" nil "mpc toggle"))) - - (exwm-input-set-key - (kbd "") - (lambda () - (interactive) - (start-process-shell-command "mpc" nil "mpc prev"))) - - (exwm-input-set-key - (kbd "") - (lambda () - (interactive) - (start-process-shell-command "mpc" nil "mpc next"))) - - ;; Shorten 'C-c C-q' to 'C-q' + ;; shorten 'C-c C-q' to 'C-q' (define-key exwm-mode-map [?\C-q] #'exwm-input-send-next-key) + (setq exwm-input-global-keys + `(([?\s-R] . exwm-reset) + ([?\s-\\] . exwm-workspace-switch) + ([?\s-\s] . (lambda (command) + (interactive + (list (read-shell-command "➜ "))) + (start-process-shell-command + command nil command))) + ([s-return] . (lambda () + (interactive) + (start-process "" nil "urxvt"))) + ([?\C-\s-\s] . counsel-linux-app) + ([?\M-\s-\s] . (lambda () + (interactive) + (start-process-shell-command + "rofi-pass" nil "rofi-pass"))) + ([?\s-\[] . (lambda () + (interactive) + (exwm-workspace-switch-create + (b/exwm-ws-prev-index)))) + ([?\s-\]] . (lambda () + (interactive) + (exwm-workspace-switch-create + (b/exwm-ws-next-index)))) + ([?\s-{] . (lambda () + (interactive) + (exwm-workspace-move-window + (b/exwm-ws-prev-index)))) + ([?\s-}] . (lambda () + (interactive) + (exwm-workspace-move-window + (b/exwm-ws-next-index)))) + ,@(mapcar (lambda (i) + `(,(kbd (format "s-%d" i)) . + (lambda () + (interactive) + (exwm-workspace-switch-create ,i)))) + (number-sequence 0 (1- exwm-workspace-number))) + ([?\s-t] . exwm-floating-toggle-floating) + ([?\s-f] . exwm-layout-toggle-fullscreen) + ([?\s-w] . (lambda () + (interactive) + (kill-buffer (current-buffer)))) + ([?\s-q] . (lambda () + (interactive) + (exwm-manage--kill-client))) + ([?\s-\'] . (lambda () + (interactive) + (start-process-shell-command + "rofi-light" nil "rofi-light"))) + ([XF86AudioMute] . + (lambda () + (interactive) + (start-process "" nil "pamixer" "--toggle-mute"))) + ([XF86AudioLowerVolume] . + (lambda () + (interactive) + (start-process + "" nil "pamixer" "--allow-boost" "--decrease" "5"))) + ([XF86AudioRaiseVolume] . + (lambda () + (interactive) + (start-process + "" nil "pamixer" "--allow-boost" "--increase" "5"))) + ([XF86AudioPlay] . + (lambda () + (interactive) + (start-process "" nil "mpc" "toggle"))) + ([XF86AudioPrev] . + (lambda () + (interactive) + (start-process "" nil "mpc" "prev"))) + ([XF86AudioNext] . + (lambda () + (interactive) + (start-process "" nil "mpc" "next"))) + ([XF86ScreenSaver] . + (lambda () + (interactive) + (start-process "" nil "dm-tool" "lock"))))) + ;; Line-editing shortcuts (setq exwm-input-simulation-keys '(;; movement @@ -741,6 +698,8 @@ needed." ([?\C-v] . [next]) ([?\C-d] . [delete]) ([?\C-k] . [S-end ?\C-x]) + ([?\M-<] . C-home) + ([?\M->] . C-end) ;; cut/copy/paste ([?\C-w] . [?\C-x]) ([?\M-w] . [?\C-c]) @@ -750,18 +709,42 @@ needed." ;; search ([?\C-s] . [?\C-f]) ;; escape - ([?\C-g] . [escape]))) - - ;; Enable EXWM - (exwm-enable) + ([?\C-g] . [escape])))) - (add-hook 'exwm-init-hook #'exwm-config--fix/ido-buffer-window-other-frame) +(use-feature exwm-manage + :demand + :after exwm + :hook + (exwm-manage-finish . (lambda () + (when exwm-class-name + (cond + ((string= exwm-class-name "URxvt") + (exwm-input-set-local-simulation-keys + nil)) + ((string= exwm-class-name "Abrowser") + (exwm-input-set-local-simulation-keys + `(,@exwm-input-simulation-keys + ([?\C-\S-d] . [?\C-d]) + ([?\C-q] . [?\C-w]) + ([?\s-q] . [?\C-q]))))))))) + +(use-feature exwm-randr + :demand + :after exwm + :config + (exwm-randr-enable)) - (require 'exwm-systemtray) - (exwm-systemtray-enable) +(use-feature exwm-systemtray + :demand + :after exwm + :config + (exwm-systemtray-enable)) - (require 'exwm-randr) - (exwm-randr-enable)) +(use-feature exwm-workspace + :demand + :after exwm + :custom + (exwm-workspace-number 4)) ;; use the org-plus-contrib package to get the whole deal (use-package org-plus-contrib) @@ -1515,7 +1498,8 @@ This function is intended for use with `ivy-ignore-buffers'." (load-theme 'tangomod t) (sml/apply-theme 'automatic) (font-lock-remove-keywords - 'org-mode b/org-mode-font-lock-keywords)) + 'org-mode b/org-mode-font-lock-keywords) + (exwm-systemtray--refresh)) (defun b/lights-off () "Go dark." @@ -1524,7 +1508,8 @@ This function is intended for use with `ivy-ignore-buffers'." (load-theme 'doom-tomorrow-night t) (sml/apply-theme 'automatic) (font-lock-add-keywords - 'org-mode b/org-mode-font-lock-keywords t)) + 'org-mode b/org-mode-font-lock-keywords t) + (exwm-systemtray--refresh)) (bind-keys ("C-c t d" . b/lights-off) @@ -1795,11 +1780,9 @@ This function is intended for use with `ivy-ignore-buffers'." ("p" . mc/mark-previous-like-this) ("a" . mc/mark-all-like-this)))) -(comment - ;; TODO - (use-package forge - :after magit - :demand)) +(use-package forge + :demand + :after magit) (use-package yasnippet :defer 0.6 @@ -1908,6 +1891,13 @@ This function is intended for use with `ivy-ignore-buffers'." :demand :config (minions-mode)) +(use-package dmenu + :disabled + :custom + (dmenu-history-size 0) + (dmenu-prompt-string "run: ") + (dmenu-save-file (b/var "dmenu-items"))) + ;;; Email (with Gnus) @@ -2131,10 +2121,6 @@ This function is intended for use with `ivy-ignore-buffers'." gnus-interactive-exit nil gnus-gcc-mark-as-read t) :config - (require 'ebdb) - (require 'ebdb-mua) - (require 'ebdb-gnus) - (when (version< emacs-version "27") (add-to-list 'nnmail-split-abbrev-alist @@ -2349,6 +2335,7 @@ https://csclub.uwaterloo.ca/~abandali") ("s" . footnote-set-style))) (use-package ebdb + :demand :after gnus :bind (:map gnus-group-mode-map ("e" . ebdb)) :config @@ -2369,14 +2356,15 @@ https://csclub.uwaterloo.ca/~abandali") (defun company-ebdb--post-complete (_) nil)) (use-feature ebdb-gnus + :demand :after ebdb :custom (ebdb-gnus-window-size 0.3)) (use-feature ebdb-mua + :demand :after ebdb - ;; :custom (ebdb-mua-pop-up nil) - ) + :custom (ebdb-mua-pop-up nil)) ;; (use-package ebdb-message ;; :after ebdb)