X-Git-Url: https://git.shemshak.org/~bandali/configs/blobdiff_plain/6f25cef135f3847c317292f6e0bab1a48b2ff3d2..715730f0ec34cbfb4f6864bedfb3a3cddc52454f:/.emacs.d/init.el diff --git a/.emacs.d/init.el b/.emacs.d/init.el index c5a5bdf..e854395 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -74,7 +74,7 @@ ;;; whoami (setq user-full-name "Amin Bandali" - user-mail-address "amin@bndl.org") + user-mail-address "amin@shemshak.org") ;;; comment macro @@ -445,6 +445,10 @@ For disabling the behaviour for certain buffers and/or modes." ;; allow scrolling in Isearch (setq isearch-allow-scroll t) +;; open read-only file buffers in view-mode +;; (enables niceties like `q' for quit) +(setq view-read-only t) + (use-feature vc :bind ("C-x v C-=" . vc-ediff)) @@ -469,8 +473,6 @@ For disabling the behaviour for certain buffers and/or modes." ("C-c F d" . delete-frame) ("C-c F D" . server-edit) - ("C-c o" . other-window) - ("C-S-h C" . describe-char) ("C-S-h F" . describe-face) @@ -480,12 +482,24 @@ For disabling the behaviour for certain buffers and/or modes." ("s-p" . beginning-of-buffer) ("s-n" . end-of-buffer) + ("M-o" . other-window) + ("M-O" . facemenu-keymap) + :map emacs-lisp-mode-map ("" . a/add-elisp-section)) (when (display-graphic-p) (unbind-key "C-z" global-map)) +(bind-keys + ;; for back and forward mouse keys + ("" . previous-buffer) + ("" . previous-buffer) + ("" . next-buffer) + ("" . next-buffer) + ("" . kill-this-buffer) + ("" . ivy-switch-buffer)) + (bind-keys :prefix-map a/straight-prefix-map :prefix "C-c p s" @@ -644,8 +658,8 @@ For disabling the behaviour for certain buffers and/or modes." (use-feature recentf :defer 0.2 :config - (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:") - (setq recentf-max-saved-items 40)) + ;; (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:") + (setq recentf-max-saved-items 2000)) ;; smart M-x enhancement (needed by counsel for history) (use-package smex) @@ -964,7 +978,7 @@ For disabling the behaviour for certain buffers and/or modes." (use-package company :defer 0.6 - :delight " company" + :delight " comp" :bind (:map company-active-map ([tab] . company-complete-common-or-cycle) @@ -1003,7 +1017,8 @@ For disabling the behaviour for certain buffers and/or modes." ;; ’ can be part of a word (setq ispell-local-dictionary-alist `((nil "[[:alpha:]]" "[^[:alpha:]]" - "['\x2019]" nil ("-B") nil utf-8))) + "['\x2019]" nil ("-B") nil utf-8)) + ispell-program-name (executable-find "hunspell")) ;; don't send ’ to the subprocess (defun endless/replace-apostrophe (args) (cons (replace-regexp-in-string @@ -1209,7 +1224,8 @@ For disabling the behaviour for certain buffers and/or modes." :commands (sml/apply-theme) :demand :config - (sml/setup)) + (sml/setup) + (smart-mode-line-enable)) (use-package doom-themes) @@ -1323,10 +1339,22 @@ For disabling the behaviour for certain buffers and/or modes." ("" . mwim-end-of-line-or-code))) (use-package projectile + :defer 0.5 :bind-keymap ("C-c P" . projectile-command-map) :config (projectile-mode) + (defun a/projectile-mode-line-fun () + "Report project name and type in the modeline." + (let ((project-name (projectile-project-name)) + (project-type (projectile-project-type))) + (format "%s%s" + projectile-mode-line-prefix + (if project-type + (format ":%s" project-type) + "")))) + (setq projectile-mode-line-function 'a/projectile-mode-line-fun) + (defun my-projectile-invalidate-cache (&rest _args) ;; ignore the args to `magit-checkout' (projectile-invalidate-cache nil)) @@ -1528,16 +1556,61 @@ For disabling the behaviour for certain buffers and/or modes." org-ref-bibliography-notes "~/usr/org/notes.org" org-ref-pdf-directory "~/usr/org/bibtex-pdfs/")) +;; ugh, temporary (still better than using the proprietary web app) +(use-package slack + :commands (slack-start) + :init + (eval-when-compile ; silence the byte-compiler + (defvar url-http-data nil) + (defvar url-http-extra-headers nil) + (defvar url-http-method nil) + (defvar url-callback-function nil) + (defvar url-callback-arguments nil) + (defvar oauth--token-data nil)) + (setq slack-buffer-emojify t + slack-prefer-current-team t) + :config + (slack-register-team + :name "nday-students" + :default t + :token nday-students-token + :subscribed-channels '(general) + :full-and-display-names t) + (with-eval-after-load 'swiper + (add-to-list 'swiper-font-lock-exclude 'slack-message-buffer-mode t)) + (setq lui-time-stamp-format "[%Y-%m-%d %H:%M:%S]" + lui-time-stamp-only-when-changed-p t + lui-time-stamp-position 'right) + :bind + (("C-c s s" . slack-start) + ("C-c s u" . slack-select-unread-rooms) + ("C-c s b" . slack-select-rooms) + ("C-c s t" . slack-change-current-team) + ("C-c s c" . slack-ws-close) + :map slack-mode-map + ("M-p" . slack-buffer-goto-prev-message) + ("M-n" . slack-buffer-goto-next-message) + ("C-c e" . slack-message-edit) + ("C-c k" . slack-message-delete) + ("C-c C-k" . slack-channel-leave) + ("C-c r a" . slack-message-add-reaction) + ("C-c r r" . slack-message-remove-reaction) + ("C-c r s" . slack-message-show-reaction-users) + ("C-c p l" . slack-room-pins-list) + ("C-c p a" . slack-message-pins-add) + ("C-c p r" . slack-message-pins-remove) + ("@" . slack-message-embed-mention) + ("#" . slack-message-embed-channel))) + (use-package alert :commands (alert) :init (setq alert-default-style 'notifications)) -(use-package ivy-xref - :init - (setq xref-show-xrefs-function #'ivy-xref-show-xrefs)) - ;; (use-package fill-column-indicator) +(use-package emojify + :hook (erc-mode . emojify-mode)) + ;;; Email (with Gnus) @@ -1562,7 +1635,7 @@ For disabling the behaviour for certain buffers and/or modes." (nnimap-address "127.0.0.1") (nnimap-server-port 143) (nnimap-authenticator plain) - (nnimap-user "amin@bndl.local")) + (nnimap-user "amin@shemshak.local")) (nnimap "gnu" (nnimap-stream plain) (nnimap-address "127.0.0.1") @@ -1572,7 +1645,7 @@ For disabling the behaviour for certain buffers and/or modes." (nnimap-inbox "INBOX") (nnimap-split-methods 'nnimap-split-fancy) (nnimap-split-fancy (| - (: gnus-registry-split-fancy-with-parent) + ;; (: gnus-registry-split-fancy-with-parent) ;; (: gnus-group-split-fancy "INBOX" t "INBOX") ;; gnu (list ".*emacs-devel.gnu.org" "l.gnu.emacs.devel") @@ -1587,7 +1660,9 @@ For disabling the behaviour for certain buffers and/or modes." (list ".*bug-gnuzilla.gnu.org" "l.gnu.gnuzilla.bug") (list ".*gnuzilla-dev.gnu.org" "l.gnu.gnuzilla.dev") (list ".*guile-devel.gnu.org" "l.gnu.guile.devel") + (list ".*guile-user.gnu.org" "l.gnu.guile.user") (list ".*guix-devel.gnu.org" "l.gnu.guix.devel") + (list ".*help-guix.gnu.org" "l.gnu.guix.help") (list ".*info-guix.gnu.org" "l.gnu.guix.info") (list ".*savannah-hackers-public.gnu.org" "l.gnu.savannah.hackers.public") (list ".*savannah-users.gnu.org" "l.gnu.savannah.users") @@ -1618,10 +1693,10 @@ For disabling the behaviour for certain buffers and/or modes." (nnimap-inbox "INBOX") (nnimap-split-methods 'nnimap-split-fancy) (nnimap-split-fancy (| - (: gnus-registry-split-fancy-with-parent) + ;; (: gnus-registry-split-fancy-with-parent) ;; se463-s19 - ("subject" "SE\\s-?463" "course.se463-s19") - (from "\\(SE\\s-?463\\|Gema\\)" "course.se463-s19") + ("subject" "\\(SE\\s-?463\\|Deliverable\\)" "course.se463-s19") + (from "\\(SE\\s-?463\\|Gema\\|Hemant\\|Davood\\|Camilo\\|Reza\\|Michael\\|Sandy\\)" "course.se463-s19") ;; catch-all "INBOX"))) (nnimap "csc" @@ -1678,9 +1753,15 @@ For disabling the behaviour for certain buffers and/or modes." ("l\\.gnu\\.guile\\.devel" (to-address . "guile-devel@gnu.org") (to-list . "guile-devel@gnu.org")) + ("l\\.gnu\\.guile\\.user" + (to-address . "guile-user@gnu.org") + (to-list . "guile-user@gnu.org")) ("l\\.gnu\\.guix\\.devel" (to-address . "guix-devel@gnu.org") (to-list . "guix-devel@gnu.org")) + ("l\\.gnu\\.guix\\.help" + (to-address . "help-guix@gnu.org") + (to-list . "help-guix@gnu.org")) ("l\\.gnu\\.guix\\.info" (to-address . "info-guix@gnu.org") (to-list . "info-guix@gnu.org")) @@ -1749,7 +1830,7 @@ For disabling the behaviour for certain buffers and/or modes." (require 'ebdb-mua) (require 'ebdb-gnus) - (gnus-registry-initialize) + ;; (gnus-registry-initialize) (with-eval-after-load 'recentf (add-to-list 'recentf-exclude gnus-home-directory))) @@ -1807,7 +1888,7 @@ https://bandali.eu.org") https://csclub.uwaterloo.ca/~abandali/") (setq gnus-posting-styles '((".*" - (address "amin@bndl.org") + (address "amin@shemshak.org") (body "\nBest,\n") (eval (setq a/message-cite-say-hi t))) ("nnimap\\+gnu:.*" @@ -1816,7 +1897,7 @@ https://csclub.uwaterloo.ca/~abandali/") (eval (set (make-local-variable 'message-user-fqdn) "fencepost.gnu.org"))) ((header "subject" "ThankCRM") (to "webmasters-comment@gnu.org") - (body "Added to 2019supporters.html.\n\nMoving to campaigns.\n") + (body "") (eval (setq a/message-cite-say-hi nil))) ("nnimap\\+uw:.*" (address "abandali@uwaterloo.ca") @@ -1895,7 +1976,7 @@ https://csclub.uwaterloo.ca/~abandali/") message-subscribed-address-functions '(gnus-find-subscribed-addresses) message-dont-reply-to-names - "\\(\\(amin@bndl\\.org\\)\\|\\(.*@\\(aminb\\|amin\\.bndl\\)\\.org\\)\\|\\(\\(bandali\\|aminb?\\|mab\\)@gnu\\.org\\)\\|\\(a\\(min\\.\\)?bandali@uwaterloo\\.ca\\)\\|\\(abandali@csclub\\.uwaterloo\\.ca\\)\\)") + "\\(\\(amin@\\(shemshak\\|bndl\\)\\.org\\)\\|\\(.*@aminb\\.org\\)\\|\\(\\(bandali\\|aminb?\\|mab\\)@gnu\\.org\\)\\|\\(a\\(min\\.\\)?bandali@uwaterloo\\.ca\\)\\|\\(abandali@csclub\\.uwaterloo\\.ca\\)\\)") (require 'company-ebdb) :hook (;; (message-setup . mml-secure-message-sign-pgpmime) (message-mode . flyspell-mode) @@ -2004,25 +2085,19 @@ https://csclub.uwaterloo.ca/~abandali/") (gnus-harvest-install)))) -;;; IRC +;;; IRC (with ERC and ZNC) (use-feature erc :bind (("C-c a e b" . erc-switch-to-buffer) :map erc-mode-map ("M-a" . erc-track-switch-buffer)) :custom - (erc-fill-function 'erc-fill-static) - (erc-fill-static-center 18) (erc-join-buffer 'bury) (erc-lurker-hide-list '("JOIN" "PART" "QUIT")) (erc-nick "bandali") - (erc-pcomplete-nick-postfix ",") (erc-rename-buffers t) (erc-server-reconnect-attempts 5) (erc-server-reconnect-timeout 3) - (erc-track-exclude-types '("JOIN" "MODE" "NICK" "PART" "QUIT" - "324" "329" "332" "333" "353" "477")) - (erc-track-priority-faces-only 'all) :config (with-eval-after-load 'ivy ;; ignore channel buffer names @@ -2042,6 +2117,26 @@ https://csclub.uwaterloo.ca/~abandali/") (add-to-list 'erc-modules 'scrolltoplace) (erc-update-modules)) +(use-feature erc-fill + :after erc + :custom + (erc-fill-function 'erc-fill-static) + (erc-fill-static-center 18)) + +(use-feature erc-pcomplete + :after erc + :custom + (erc-pcomplete-nick-postfix ",")) + +(use-feature erc-track + :after erc + :custom + (erc-track-enable-keybindings nil) + (erc-track-exclude-types '("JOIN" "MODE" "NICK" "PART" "QUIT" + "324" "329" "332" "333" "353" "477")) + (erc-track-priority-faces-only 'all) + (erc-track-shorten-function nil)) + (use-package erc-hl-nicks :after erc) @@ -2049,7 +2144,7 @@ https://csclub.uwaterloo.ca/~abandali/") :after erc) (use-package znc - :straight (:host nil :repo "https://git.bndl.org/amin/znc.el") + :straight (:host nil :repo "https://git.shemshak.org/amin/znc.el") :bind (("C-c a e e" . znc-erc) ("C-c a e a" . znc-all)) :config @@ -2058,11 +2153,11 @@ https://csclub.uwaterloo.ca/~abandali/") ((null auth) (error "Couldn't find znca's authinfo")) (t (funcall (plist-get (car auth) :secret))))))) (setq znc-servers - `(("znc.bndl.org" 1337 t + `(("znc.shemshak.org" 1337 t ((freenode "amin/freenode" ,pwd))) - ("znc.bndl.org" 1337 t + ("znc.shemshak.org" 1337 t ((moznet "amin/moznet" ,pwd))) - ("znc.bndl.org" 1337 t + ("znc.shemshak.org" 1337 t ((oftc "amin/oftc" ,pwd)))))))