X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/205870c761859bd71af5cc46fc55f5c3407b57d6..6493829267a8bad985faaa661770a1d324dfabb5:/.emacs.d/init.el?ds=sidebyside diff --git a/.emacs.d/init.el b/.emacs.d/init.el index bfc9d28..8802071 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -39,9 +39,13 @@ (defvar b/before-user-init-time (current-time) "Value of `current-time' when Emacs begins loading `user-init-file'.") -(message "Loading Emacs...done (%.3fs)" - (float-time (time-subtract b/before-user-init-time - before-init-time))) +(defvar b/emacs-initialized nil + "Whether Emacs has been initialized.") + +(when (not (bound-and-true-p b/emacs-initialized)) + (message "Loading Emacs...done (%.3fs)" + (float-time (time-subtract b/before-user-init-time + before-init-time)))) ;; temporarily increase `gc-cons-threshhold' and `gc-cons-percentage' ;; during startup to reduce garbage collection frequency. clearing @@ -57,8 +61,10 @@ ;; set them back to their defaults once we're done initializing (defun b/post-init () - (setq gc-cons-threshold b/gc-cons-threshold - gc-cons-percentage b/gc-cons-percentage + "My post-initialize function, run after loading `user-init-file'." + (setq b/emacs-initialized t + gc-cons-threshold b/gc-cons-threshold + gc-cons-percentage b/gc-cons-percentage file-name-handler-alist b/file-name-handler-alist)) (add-hook 'after-init-hook #'b/post-init) @@ -152,9 +158,10 @@ (expand-file-name "~/.emacs.d/straight/build/"))) (defun b/reload-init () - "Reload init.el." + "Reload `user-init-file'." (interactive) - (setq b/file-name-handler-alist file-name-handler-alist) + (setq b/before-user-init-time (current-time) + b/file-name-handler-alist file-name-handler-alist) (load user-init-file nil 'nomessage) (b/post-init)) @@ -388,16 +395,18 @@ For disabling the behaviour for certain buffers and/or modes." (global-auto-revert-non-file-buffers nil)) ;; time and battery in mode-line -(comment - (use-feature time - :init - (setq display-time-default-load-average nil) - :config - (display-time-mode)) +(use-feature time + :config + (display-time-mode) + :custom + (display-time-default-load-average nil) + (display-time-format "%a %b %-e, %-l:%M%P")) - (use-feature battery - :config - (display-battery-mode))) +(use-feature battery + :config + (display-battery-mode) + :custom + (battery-mode-line-format " %b%p%% %t")) (use-feature fringe :demand @@ -552,13 +561,13 @@ For disabling the behaviour for certain buffers and/or modes." ;;; Essential packages (use-package exwm - :disabled :demand :config (require 'exwm-config) - ;; Set the initial workspace number. - (setq exwm-workspace-number 4) + (setq + exwm-workspace-number 4 + exwm-workspace-index-map (lambda (i) (number-to-string (1+ i)))) ;; Make class name the buffer name, truncating beyond 50 characters (defun exwm-rename-buffer () @@ -570,6 +579,21 @@ For disabling the behaviour for certain buffers and/or modes." (add-hook 'exwm-update-class-hook 'exwm-rename-buffer) (add-hook 'exwm-update-title-hook 'exwm-rename-buffer) + (defun b/exwm-ws-prev-index () + "Return the index for the previous EXWM workspace, wrapping +around if needed." + (if (= exwm-workspace-current-index 0) + (1- exwm-workspace-number) + (1- exwm-workspace-current-index))) + + (defun b/exwm-ws-next-index () + "Return the index for the next EXWM workspace, wrapping +around if needed." + (if (= exwm-workspace-current-index + (1- exwm-workspace-number)) + 0 + (1+ exwm-workspace-current-index))) + ;; 's-R': Reset (exwm-input-set-key (kbd "s-R") #'exwm-reset) ;; 's-\': Switch workspace @@ -580,7 +604,33 @@ For disabling the behaviour for certain buffers and/or modes." (kbd (format "s-%d" i)) (lambda () (interactive) - (exwm-workspace-switch-create i)))) + (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") @@ -595,25 +645,25 @@ For disabling the behaviour for certain buffers and/or modes." ;; Line-editing shortcuts (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/copy/paste - ;; ([?\C-w] . [?\C-x]) - ([?\M-w] . [?\C-c]) - ([?\C-y] . [?\C-v]) - ;; search - ([?\C-s] . [?\C-f]))) + '(;; 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/copy/paste + ;; ([?\C-w] . [?\C-x]) + ([?\M-w] . [?\C-c]) + ([?\C-y] . [?\C-v]) + ;; search + ([?\C-s] . [?\C-f]))) ;; Enable EXWM (exwm-enable) @@ -686,16 +736,26 @@ For disabling the behaviour for certain buffers and/or modes." ;; (interactive) ;; (start-process-shell-command "mpc" nil "mpv next"))) - (defun b/exwm-pasystray () - "A command used to start pasystray." + (comment + (defun b/exwm-pasystray () + "A command used to start pasystray." + (interactive) + (if (executable-find "pasystray") + (progn + (message "EXWM: starting pasystray ...") + (start-process-shell-command "pasystray" nil "pasystray --notify=all")) + (message "EXWM: pasystray is not installed, abort!"))) + (add-hook 'exwm-init-hook #'b/exwm-pasystray)) + + (defun b/exwm-nm-applet () + "A command used to start nm-applet." (interactive) - (if (executable-find "pasystray") - (progn - (message "EXWM: starting pasystray ...") - (start-process-shell-command "pasystray" nil "pasystray --notify=all")) - (message "EXWM: pasystray is not installed, abort!"))) - - (add-hook 'exwm-init-hook #'b/exwm-pasystray) + (if (executable-find "nm-applet") + (progn + (message "EXWM: starting nm-applet ...") + (start-process-shell-command "nm-applet" nil "nm-applet")) + (message "EXWM: nm-applet is not installed, abort!"))) + (add-hook 'exwm-init-hook #'b/exwm-nm-applet) (exwm-input-set-key (kbd "s-t") @@ -842,7 +902,9 @@ For disabling the behaviour for certain buffers and/or modes." (nconc magit-section-initial-visibility-alist '(([unpulled status] . show) ([unpushed status] . show))) - :custom (magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1) + :custom + (magit-diff-refine-hunk t) + (magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1) :custom-face (magit-diff-file-heading ((t (:weight normal))))) ;; recently opened files @@ -1382,8 +1444,8 @@ This function is intended for use with `ivy-ignore-buffers'." (use-package lsp-java :config (add-hook 'java-mode-hook - (lambda () - (setq-local company-backends (list 'company-lsp)))) + (lambda () + (setq-local company-backends (list 'company-lsp)))) (add-hook 'java-mode-hook 'lsp-java-enable) (add-hook 'java-mode-hook 'flycheck-mode) @@ -1459,6 +1521,13 @@ This function is intended for use with `ivy-ignore-buffers'." (sml/setup) (smart-mode-line-enable)) +(use-package doom-modeline + :disabled + :demand + :hook (after-init . doom-modeline-init) + :custom + (doom-modeline-buffer-file-name-style 'relative-to-project)) + (use-package doom-themes) (defvar b/org-mode-font-lock-keywords @@ -1684,6 +1753,7 @@ This function is intended for use with `ivy-ignore-buffers'." :commands eshell-up) (use-package multi-term + :disabled :defer 0.6 :bind (("C-c a s m m" . multi-term) ("C-c a s m d" . multi-term-dedicated-toggle) @@ -2240,7 +2310,7 @@ https://csclub.uwaterloo.ca/~abandali") "Return the In-Reply-To header for this message." (when message-reply-headers (let ((from (mail-header-from message-reply-headers)) - (msg-id (mail-header-id message-reply-headers))) + (msg-id (mail-header-id message-reply-headers))) (when from msg-id))))