esup-child-profile-require-level 0)
;; set them back to their defaults once we're done initializing
-(add-hook
- 'after-init-hook
- (lambda ()
- (setq gc-cons-threshold a/gc-cons-threshold
- gc-cons-percentage a/gc-cons-percentage
- file-name-handler-alist a/file-name-handler-alist)))
+(defun a/post-init ()
+ (setq gc-cons-threshold a/gc-cons-threshold
+ gc-cons-percentage a/gc-cons-percentage
+ file-name-handler-alist a/file-name-handler-alist))
+(add-hook 'after-init-hook #'a/post-init)
;; increase number of lines kept in *Messages* log
(setq message-log-max 20000)
;; Not necessary when using straight.el
;; (C-h v straight-package-neutering-mode RET)
-(comment
+(when (and
+ (not (featurep 'straight))
+ (version< emacs-version "27"))
(setq package-enable-at-startup nil)
;; (package-initialize)
)
(interactive)
(straight-transaction
(straight-mark-transaction-as-init)
- (load user-init-file)))
+ (setq a/file-name-handler-alist file-name-handler-alist)
+ (load user-init-file)
+ (a/post-init)))
;; use-package
(straight-use-package 'use-package)
;; allow scrolling in Isearch
(setq isearch-allow-scroll t)
+(use-feature vc
+ :bind ("C-x v C-=" . vc-ediff))
+
+(use-feature ediff
+ :config (add-hook 'ediff-after-quit-hook-internal 'winner-undo)
+ :custom ((ediff-window-setup-function 'ediff-setup-windows-plain)
+ (ediff-split-window-function 'split-window-horizontally)))
+
\f
;;; General bindings
("C-c F m" . make-frame-command)
("C-c F d" . delete-frame)
- ("C-c F D" . delete-other-frames)
+ ("C-c F D" . server-edit)
("C-c o" . other-window)
(("C-c a o a" . org-agenda)
:map org-mode-map
("M-L" . org-insert-last-stored-link)
+ ("M-O" . org-toggle-link-display)
("s-T" . org-todo))
:hook ((org-mode . org-indent-mode)
(org-mode . auto-fill-mode)
(nconc magit-section-initial-visibility-alist
'(([unpulled status] . show)
([unpushed status] . show)))
+ :custom (magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1)
:custom-face (magit-diff-file-heading ((t (:weight normal)))))
;; recently opened files
(mode . scheme-mode)
(mode . haskell-mode)
(mode . lean-mode)
+ (mode . go-mode)
(mode . alloy-mode)))
("tex"
(or
(setq ediff-after-quit-hook-internal nil)
(set-window-configuration wnd))))
(error "no more than 2 files should be marked"))))
+
+ (require 'dired-x)
+ (setq dired-guess-shell-alist-user
+ '(("\\.pdf\\'" "evince" "zathura" "okular")
+ ("\\.doc\\'" "libreoffice")
+ ("\\.docx\\'" "libreoffice")
+ ("\\.ppt\\'" "libreoffice")
+ ("\\.pptx\\'" "libreoffice")
+ ("\\.xls\\'" "libreoffice")
+ ("\\.xlsx\\'" "libreoffice")
+ ("\\.flac\\'" "mpv")))
:bind (:map dired-mode-map
("b" . dired-up-directory)
("e" . dired-ediff-files)
;; highlight uncommitted changes in the left fringe
(use-package diff-hl
+ :defer 0.6
:config
(setq diff-hl-draw-borders nil)
(global-diff-hl-mode)
:hook ((text-mode . indicate-buffer-boundaries-left)
(text-mode . abbrev-mode)))
+(use-feature conf-mode
+ :mode "\\.*rc$")
+
+(use-feature sh-mode
+ :mode "\\.bashrc$")
+
(use-package company
:defer 0.6
:bind
:custom
(font-latex-fontify-sectioning 'color)))
+(use-package go-mode)
+
\f
;;; Theme
("C-c a s m p" . multi-term-prev)
("C-c a s m n" . multi-term-next)
:map term-mode-map
- ("C-c C-j" . term-char-mode)
- :map term-raw-map
- ("C-c C-j" . term-line-mode))
+ ("C-c C-j" . term-char-mode))
:config
(setq multi-term-program "screen"
multi-term-program-switches (concat "-c"
term-bind-key-alist
'(("C-c C-c" . term-interrupt-subjob)
("C-c C-e" . term-send-esc)
+ ("C-c C-j" . term-line-mode)
("C-k" . kill-line)
;; ("C-y" . term-paste)
("C-y" . term-send-raw)
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)
- (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 alert-default-style 'notifier))
+ (setq xref-show-xrefs-function #'ivy-xref-show-xrefs))
\f
;;; Email (with Gnus)
(nnimap-server-port 143)
(nnimap-authenticator plain)
(nnimap-user "amin@bndl.local"))
+ (nnimap "gnu"
+ (nnimap-stream plain)
+ (nnimap-address "127.0.0.1")
+ (nnimap-server-port 143)
+ (nnimap-authenticator plain)
+ (nnimap-user "bandali@gnu.local")
+ (nnimap-inbox "INBOX")
+ (nnimap-split-methods 'nnimap-split-fancy)
+ (nnimap-split-fancy (|
+ (: gnus-registry-split-fancy-with-parent)
+ ;; (: gnus-group-split-fancy "INBOX" t "INBOX")
+ ;; gnu
+ (list ".*emacs-devel.gnu.org" "l.gnu.emacs.devel")
+ (list ".*help-gnu-emacs.gnu.org" "l.gnu.emacs.help")
+ (list ".*info-gnu-emacs.gnu.org" "l.gnu.emacs.info")
+ (list ".*emacs-orgmode.gnu.org" "l.gnu.emacs.orgmode")
+ (list ".*emacsconf-discuss.gnu.org" "l.gnu.emacsconf.discuss")
+ (list ".*fencepost-users.gnu.org" "l.gnu.fencepost.users")
+ (list ".*gnunet-developers.gnu.org" "l.gnu.gnunet.developers")
+ (list ".*help-gnunet.gnu.org" "l.gnu.gnunet.help")
+ (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 ".*guix-devel.gnu.org" "l.gnu.guix.devel")
+ (list ".*info-guix.gnu.org" "l.gnu.guix.info")
+ (list ".*www-commits.gnu.org" "l.gnu.www.commits")
+ (list ".*www-discuss.gnu.org" "l.gnu.www.discuss")
+ ;; webmasters
+ (from "webmasters\\(-comment\\)?@gnu\\.org" "webmasters")
+ ;; haskell
+ (list ".*haskell-art.we.lurk.org" "l.haskell.art")
+ (list ".*haskell-cafe.haskell.org" "l.haskell.cafe")
+ ;; other
+ (list ".*deepspec.lists.cs.princeton.edu" "l.deepspec")
+ (list ".*notmuch.notmuchmail.org" "l.notmuch")
+ (list ".*dev.lists.parabola.nu" "l.parabola.dev")
+ ;; *@lists.sr.ht
+ (list ".*~bandali/public-inbox@lists.sr.ht" "l.~bandali.public-inbox")
+ (list ".*~sircmpwn/sr.ht-admins@lists.sr.ht" "l.~sircmpwn.srht.admins")
+ (list ".*~sircmpwn/sr.ht-announce@lists.sr.ht" "l.~sircmpwn.srht.announce")
+ (list ".*~sircmpwn/sr.ht-dev@lists.sr.ht" "l.~sircmpwn.srht.dev")
+ (list ".*~sircmpwn/sr.ht-discuss@lists.sr.ht" "l.~sircmpwn.srht.discuss")
+ "INBOX")))
(nnimap "uw"
(nnimap-stream plain)
(nnimap-address "127.0.0.1")
(nnimap-user "abandali@csc.uw.local")))
gnus-message-archive-group "nnimap+amin:Sent"
gnus-parameters
- '(("gnu\\.deepspec"
+ '(("l\\.deepspec"
(to-address . "deepspec@lists.cs.princeton.edu")
- (to-list . "deepspec@lists.cs.princeton.edu"))
- ("gnu\\.emacs-devel"
+ (to-list . "deepspec@lists.cs.princeton.edu")
+ (list-identifier . "\\[deepspec\\]"))
+ ("l\\.gnu\\.emacs\\.devel"
(to-address . "emacs-devel@gnu.org")
(to-list . "emacs-devel@gnu.org"))
- ("gnu\\.emacs-orgmode"
+ ("l\\.gnu\\.emacs\\.help"
+ (to-address . "help-gnu-emacs@gnu.org")
+ (to-list . "help-gnu-emacs@gnu.org"))
+ ("l\\.gnu\\.emacs\\.info"
+ (to-address . "info-gnu-emacs@gnu.org")
+ (to-list . "info-gnu-emacs@gnu.org"))
+ ("l\\.gnu\\.emacs\\.orgmode"
(to-address . "emacs-orgmode@gnu.org")
- (to-list . "emacs-orgmode@gnu.org"))
- ("gnu\\.emacsconf-discuss"
+ (to-list . "emacs-orgmode@gnu.org")
+ (list-identifier . "\\[O\\]"))
+ ("l\\.gnu\\.emacsconf\\.discuss"
(to-address . "emacsconf-discuss@gnu.org")
(to-list . "emacsconf-discuss@gnu.org"))
- ("gnu\\.fencepost-users"
+ ("l\\.gnu\\.fencepost\\.users"
(to-address . "fencepost-users@gnu.org")
- (to-list . "fencepost-users@gnu.org"))
- ("gnu\\.gnunet-developers"
+ (to-list . "fencepost-users@gnu.org")
+ (list-identifier . "\\[Fencepost-users\\]"))
+ ("l\\.gnu\\.gnunet\\.developers"
(to-address . "gnunet-developers@gnu.org")
- (to-list . "gnunet-developers@gnu.org"))
- ("gnu\\.guile-devel"
+ (to-list . "gnunet-developers@gnu.org")
+ (list-identifier . "\\[GNUnet-developers\\]"))
+ ("l\\.gnu\\.gnunet\\.help"
+ (to-address . "help-gnunet@gnu.org")
+ (to-list . "help-gnunet@gnu.org")
+ (list-identifier . "\\[Help-gnunet\\]"))
+ ("l\\.gnu\\.gnuzilla\\.bug"
+ (to-address . "bug-gnuzilla@gnu.org")
+ (to-list . "bug-gnuzilla@gnu.org")
+ (list-identifier . "\\[Bug-gnuzilla\\]"))
+ ("l\\.gnu\\.gnuzilla\\.dev"
+ (to-address . "gnuzilla-dev@gnu.org")
+ (to-list . "gnuzilla-dev@gnu.org")
+ (list-identifier . "\\[Gnuzilla-dev\\]"))
+ ("l\\.gnu\\.guile\\.devel"
(to-address . "guile-devel@gnu.org")
(to-list . "guile-devel@gnu.org"))
- ("gnu\\.guix-devel"
+ ("l\\.gnu\\.guix\\.devel"
(to-address . "guix-devel@gnu.org")
(to-list . "guix-devel@gnu.org"))
- ("gnu\\.haskell-art"
- (to-address . "haskell-art@we.lurk.org")
- (to-list . "haskell-art@we.lurk.org"))
- ("gnu\\.haskell-cafe"
- (to-address . "haskell-cafe@haskell.org")
- (to-list . "haskell-cafe@haskell.org"))
- ("gnu\\.help-gnu-emacs"
- (to-address . "help-gnu-emacs@gnu.org")
- (to-list . "help-gnu-emacs@gnu.org"))
- ("gnu\\.info-gnu-emacs"
- (to-address . "info-gnu-emacs@gnu.org")
- (to-list . "info-gnu-emacs@gnu.org"))
- ("gnu\\.info-guix"
+ ("l\\.gnu\\.guix\\.info"
(to-address . "info-guix@gnu.org")
(to-list . "info-guix@gnu.org"))
- ("gnu\\.notmuch"
- (to-address . "notmuch@notmuchmail.org")
- (to-list . "notmuch@notmuchmail.org"))
- ("gnu\\.parabola-dev"
- (to-address . "dev@lists.parabola.nu")
- (to-list . "dev@lists.parabola.nu"))
- ("gnu\\.webmasters"
- (to-address . "webmasters@gnu.org")
- (to-list . "webmasters@gnu.org"))
- ("gnu\\.www-commits"
+ ("l\\.gnu\\.www\\.commits"
(to-address . "www-commits@gnu.org")
(to-list . "www-commits@gnu.org"))
- ("gnu\\.www-discuss"
+ ("l\\.gnu\\.www\\.discuss"
(to-address . "www-discuss@gnu.org")
(to-list . "www-discuss@gnu.org"))
- ("gnu\\.~bandali\\.public-inbox"
+ ("l\\.haskell\\.art"
+ (to-address . "haskell-art@we.lurk.org")
+ (to-list . "haskell-art@we.lurk.org")
+ (list-identifier . "\\[haskell-art\\]"))
+ ("l\\.haskell\\.cafe"
+ (to-address . "haskell-cafe@haskell.org")
+ (to-list . "haskell-cafe@haskell.org")
+ (list-identifier . "\\[Haskell-cafe\\]"))
+ ("l\\.notmuch"
+ (to-address . "notmuch@notmuchmail.org")
+ (to-list . "notmuch@notmuchmail.org"))
+ ("l\\.parabola\\.dev"
+ (to-address . "dev@lists.parabola.nu")
+ (to-list . "dev@lists.parabola.nu")
+ (list-identifier . "\\[Dev\\]"))
+ ("l\\.~bandali\\.public-inbox"
(to-address . "~bandali/public-inbox@lists.sr.ht")
(to-list . "~bandali/public-inbox@lists.sr.ht"))
- ("gnu\\.~sircmpwn\\.srht-admins"
+ ("l\\.~sircmpwn\\.srht\\.admins"
(to-address . "~sircmpwn/sr.ht-admins@lists.sr.ht")
(to-list . "~sircmpwn/sr.ht-admins@lists.sr.ht"))
- ("gnu\\.~sircmpwn\\.srht-announce"
+ ("l\\.~sircmpwn\\.srht\\.announce"
(to-address . "~sircmpwn/sr.ht-announce@lists.sr.ht")
(to-list . "~sircmpwn/sr.ht-announce@lists.sr.ht"))
- ("gnu\\.~sircmpwn\\.srht-dev"
+ ("l\\.~sircmpwn\\.srht\\.dev"
(to-address . "~sircmpwn/sr.ht-dev@lists.sr.ht")
(to-list . "~sircmpwn/sr.ht-dev@lists.sr.ht"))
- ("gnu\\.~sircmpwn\\.srht-discuss"
+ ("l\\.~sircmpwn\\.srht\\.discuss"
(to-address . "~sircmpwn/sr.ht-discuss@lists.sr.ht")
(to-list . "~sircmpwn/sr.ht-discuss@lists.sr.ht"))
+ ("webmasters"
+ (to-address . "webmasters@gnu.org")
+ (to-list . "webmasters@gnu.org"))
("gnu.*"
(gcc-self . t))
("gnu\\."
- (subscribed . t)))
+ (subscribed . t))
+ ("nnimap\\+uw:.*"
+ (gcc-self . t)))
gnus-large-newsgroup 50
gnus-home-directory (no-littering-expand-var-file-name "gnus/")
gnus-directory (concat gnus-home-directory "news/")
(require 'ebdb-mua)
(require 'ebdb-gnus)
+ (gnus-registry-initialize)
+
(with-eval-after-load 'recentf
(add-to-list 'recentf-exclude gnus-home-directory)))
(use-feature gnus-msg
:config
+ (defvar a/gnu-signature "Amin Bandali | GNU Webmaster
+https://bandali.eu.org | https://gnu.org
+GPG Key: BE62 7373 8E61 6D6D 1B3A 08E8 A21A 0202 4881 6103")
+ (defvar a/uw-signature "Amin Bandali, MMath Student
+Cheriton School of Computer Science
+University of Waterloo
+https://bandali.eu.org")
+ (defvar a/csc-signature "Amin Bandali | Termcom, CSC
+https://csclub.uwaterloo.ca/~abandali/")
(setq gnus-posting-styles
'((".*"
(address "amin@bndl.org")
(body "\nBest,\n")
(eval (setq a/message-cite-say-hi t)))
- ("gnu.*"
+ ("nnimap\\+gnu:.*"
(address "bandali@gnu.org")
+ (signature a/gnu-signature)
(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\n-amin\n")
+ (body "Added to 2019supporters.html.\n\nMoving to campaigns.\n")
(eval (setq a/message-cite-say-hi nil)))
("nnimap\\+uw:.*"
(address "abandali@uwaterloo.ca")
+ (signature a/uw-signature))
+ ("nnimap\\+uw:INBOX"
(gcc "\"nnimap+uw:Sent Items\""))
("nnimap\\+csc:.*"
(address "abandali@csclub.uwaterloo.ca")
+ (signature a/csc-signature)
(gcc "nnimap+csc:Sent")))))
(use-feature gnus-topic
:config
(setq gnus-permanently-visible-groups "\\(:INBOX$\\|:gnu$\\)"))
-(use-feature gnus-win
- :config
- (setq gnus-use-full-window nil))
+(comment
+ ;; problematic with ebdb's popup, *EBDB-Gnus*
+ (use-feature gnus-win
+ :config
+ (setq gnus-use-full-window nil)))
(use-feature gnus-dired
:commands gnus-dired-mode