X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/2087ae39f646980175a44183370a72e036edbbc0..e3e01ce1a879abc16bd93db65210716ed908672a:/init.el?ds=inline diff --git a/init.el b/init.el index 56e2e48..ed50494 100644 --- a/init.el +++ b/init.el @@ -1,6 +1,6 @@ ;;; init.el --- bandali's emacs configuration -*- lexical-binding: t -*- -;; Copyright (C) 2018-2019 Amin Bandali +;; Copyright (C) 2018-2020 Amin Bandali ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -95,15 +95,6 @@ user-mail-address "bandali@gnu.org") -;;; comment macro - -;; useful for commenting out multiple sexps at a time -(defmacro comment (&rest _) - "Comment out one or more s-expressions." - (declare (indent defun)) - nil) - - ;;; Package management (progn ; `borg' @@ -181,65 +172,6 @@ (or (server-running-p) (server-mode))) -;;; Useful utilities - -(defmacro b/setq-every (value &rest vars) - "Set all the variables from VARS to value VALUE." - (declare (indent defun) (debug t)) - `(progn ,@(mapcar (lambda (x) (list 'setq x value)) vars))) - -(defun b/start-process (program &rest args) - "Same as `start-process', but doesn't bother about name and buffer." - (let ((process-name (concat program "_process")) - (buffer-name (generate-new-buffer-name - (concat program "_output")))) - (apply #'start-process - process-name buffer-name program args))) - -(defun b/dired-start-process (program &optional args) - "Open current file with a PROGRAM." - ;; Shell command looks like this: "program [ARGS]... FILE" (ARGS can - ;; be nil, so remove it). - (declare-function dired-get-file-for-visit "dired") - (apply #'b/start-process - program - (remove nil (list args (dired-get-file-for-visit))))) - -(defun b/add-elisp-section () - (interactive) - (insert "\n") - (forward-line -1) - (insert "\n \n;;; ")) - -;; (defvar b/fill-column 47 -;; "My custom `fill-column'.") - -(defconst b/asterism "* * *") - -(defun b/insert-asterism () - "Insert a centred asterism." - (interactive) - (insert - (concat - "\n\n" - (make-string (floor (/ (- fill-column (length b/asterism)) 2)) - ?\s) - b/asterism - "\n\n"))) - -(defun b/no-mouse-autoselect-window () - "Conveniently disable `focus-follows-mouse'. -For disabling the behaviour for certain buffers and/or modes." - (make-local-variable 'mouse-autoselect-window) - (setq mouse-autoselect-window nil)) - -(defun b/kill-current-buffer () - "Kill the current buffer." - ;; also see https://redd.it/64xb3q - (interactive) - (kill-buffer (current-buffer))) - - ;;; Defaults ;;;; C-level customizations @@ -261,7 +193,7 @@ For disabling the behaviour for certain buffers and/or modes." ;; scroll-margin 1 ;; scroll-conservatively 10000 scroll-step 1 - scroll-conservatively 10 + scroll-conservatively 101 scroll-preserve-screen-position 1 ;; focus follows mouse mouse-autoselect-window t) @@ -270,6 +202,8 @@ For disabling the behaviour for certain buffers and/or modes." ;; always use space for indentation indent-tabs-mode nil tab-width 4 + ;; case-sensitive search (and `dabbrev-expand') + ;; case-fold-search nil ;; cursor shape cursor-type t) @@ -490,7 +424,9 @@ For disabling the behaviour for certain buffers and/or modes." ;;; General bindings (bind-keys + ("C-a" . b/move-indentation-or-beginning-of-line) ("C-c a i" . ielm) + ("C-c d" . b/duplicate-line-or-region) ("C-c e b" . eval-buffer) ("C-c e e" . eval-last-sexp) @@ -511,6 +447,8 @@ For disabling the behaviour for certain buffers and/or modes." ("C-S-h C" . describe-char) ("C-S-h F" . describe-face) + ("C-S-j" . b/join-line-top) + ("C-c x" . execute-extended-command) ("C-x k" . b/kill-current-buffer) @@ -539,16 +477,13 @@ For disabling the behaviour for certain buffers and/or modes." ;;; Essential packages -(add-to-list - 'load-path - (expand-file-name - (convert-standard-filename "lisp") user-emacs-directory)) - (when b/exwm-p (require 'bandali-exwm)) (require 'bandali-org) +(require 'bandali-theme) + ;; *the* right way to do git (use-package magit :bind (("C-x g" . magit-status) @@ -581,8 +516,8 @@ For disabling the behaviour for certain buffers and/or modes." ;; recently opened files (use-package recentf :defer 0.2 - ;; :config - ;; (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:") + :config + (add-to-list 'recentf-keep 'file-remote-p) :config (recentf-mode) :custom @@ -598,6 +533,7 @@ For disabling the behaviour for certain buffers and/or modes." (require 'bandali-ivy) (require 'bandali-eshell) +;; (require 'bandali-multi-term) (require 'bandali-ibuffer) @@ -617,14 +553,20 @@ For disabling the behaviour for certain buffers and/or modes." ("H" . outline-hide-body) ("S" . outline-show-all) ("h" . outline-hide-subtree) - ("s" . outline-show-subtree))) - -(use-package ls-lisp - :custom (ls-lisp-dirs-first t)) + ("s" . outline-show-subtree)) + :config + (when (featurep 'which-key) + (which-key-add-key-based-replacements + "C-c @" "outline" + "s-O" "outline"))) (require 'bandali-dired) (use-package help + :bind + (:map help-mode-map + ("p" . backward-button) + ("n" . forward-button)) :config (temp-buffer-resize-mode) (setq help-window-select t)) @@ -640,27 +582,38 @@ For disabling the behaviour for certain buffers and/or modes." :bind (:map doc-view-mode-map ("M-RET" . image-previous-line))) +;; Email (with Gnus, message, and EBDB) (require 'bandali-gnus) - (use-package sendmail :config (setq sendmail-program (executable-find "msmtp") ;; message-sendmail-extra-arguments '("-v" "-d") mail-specify-envelope-from t mail-envelope-from 'header)) - (require 'bandali-message) +(require 'bandali-ebdb) + +;; IRC (with ERC and ZNC) +(require 'bandali-erc) + +(use-package scpaste + :config + (setq scpaste-http-destination "https://p.bndl.org" + scpaste-scp-destination "p:~")) ;;; Editing -(comment + ;; highlight uncommitted changes in the left fringe (use-package diff-hl + :disabled :defer 0.6 :config (setq diff-hl-draw-borders nil) (global-diff-hl-mode) - :hook (magit-post-refresh . diff-hl-magit-post-refresh)) + :hook + ((magit-pre-refresh . diff-hl-magit-pre-refresh) + (magit-post-refresh . diff-hl-magit-post-refresh))) ;; display Lisp objects at point in the echo area (use-package eldoc @@ -711,8 +664,8 @@ For disabling the behaviour for certain buffers and/or modes." (use-package conf-mode :mode "\\.*rc$") -(use-package sh-mode - :mode "\\.bashrc$") +(use-package sh-script + :mode ("\\.bashrc$" . sh-mode)) (use-package company :disabled @@ -733,6 +686,7 @@ For disabling the behaviour for certain buffers and/or modes." ) (use-package flycheck + :disabled :defer 0.6 :hook (prog-mode . flycheck-mode) :bind @@ -747,10 +701,11 @@ For disabling the behaviour for certain buffers and/or modes." (setq flycheck-check-syntax-automatically '(mode-enabled save)) :custom (flycheck-mode-line-prefix "flyc")) -(use-package flyspell) +;; (use-package flyspell) ;; http://endlessparentheses.com/ispell-and-apostrophes.html (use-package ispell + :disabled :defer 0.6 :config ;; ’ can be part of a word @@ -788,34 +743,29 @@ For disabling the behaviour for certain buffers and/or modes." (setq indent-tabs-mode nil)) (add-hook 'lisp-interaction-mode-hook #'indent-spaces-mode)) -(use-package reveal - :hook (emacs-lisp-mode . reveal-mode)) - -(use-package elisp-mode) - -;; (use-package alloy-mode -;; :straight (:host github :repo "dwwmmn/alloy-mode") -;; :mode "\\.\\(als\\|dsh\\)\\'" -;; :config -;; (setq alloy-basic-offset 2) -;; ;; (defun b/alloy-simple-indent (start end) -;; ;; (interactive "r") -;; ;; ;; (if (region-active-p) -;; ;; ;; (indent-rigidly start end alloy-basic-offset) -;; ;; ;; (if (bolp) -;; ;; ;; (indent-rigidly (line-beginning-position) -;; ;; ;; (line-end-position) -;; ;; ;; alloy-basic-offset))) -;; ;; (indent-to (+ (current-column) alloy-basic-offset))) -;; :bind (:map alloy-mode-map -;; ("RET" . electric-newline-and-maybe-indent) -;; ;; ("TAB" . b/alloy-simple-indent) -;; ("TAB" . indent-for-tab-command)) -;; :hook (alloy-mode . (lambda () (setq-local indent-tabs-mode nil)))) - -(eval-when-compile (defvar lean-mode-map)) +(use-package alloy-mode + :mode "\\.\\(als\\|dsh\\)\\'" + :config + (setq alloy-basic-offset 2) + ;; (defun b/alloy-simple-indent (start end) + ;; (interactive "r") + ;; ;; (if (region-active-p) + ;; ;; (indent-rigidly start end alloy-basic-offset) + ;; ;; (if (bolp) + ;; ;; (indent-rigidly (line-beginning-position) + ;; ;; (line-end-position) + ;; ;; alloy-basic-offset))) + ;; (indent-to (+ (current-column) alloy-basic-offset))) + :bind (:map alloy-mode-map + ("RET" . electric-newline-and-maybe-indent) + ;; ("TAB" . b/alloy-simple-indent) + ("TAB" . indent-for-tab-command)) + :hook (alloy-mode . (lambda () (setq-local indent-tabs-mode nil)))) + (use-package lean-mode + :disabled :defer 0.4 + :init (eval-when-compile (defvar lean-mode-map)) :bind (:map lean-mode-map ("S-SPC" . company-complete)) :config @@ -827,8 +777,6 @@ For disabling the behaviour for certain buffers and/or modes." lean-input-user-translations '(("/" "/"))) (lean-input-setup)) -(use-package mhtml-mode) - (use-package sgml-mode :config (setq sgml-basic-offset 0)) @@ -837,35 +785,30 @@ For disabling the behaviour for certain buffers and/or modes." :config (setq css-indent-offset 2)) -(use-package emmet-mode - :after (:any mhtml-mode css-mode sgml-mode) - :bind* (("C-)" . emmet-next-edit-point) - ("C-(" . emmet-prev-edit-point)) - :config - (unbind-key "C-j" emmet-mode-keymap) - (setq emmet-move-cursor-between-quotes t) - :hook (css-mode html-mode sgml-mode)) - -(use-package geiser) +(use-package geiser + :disabled) (use-package geiser-guile + :disabled :config (setq geiser-guile-load-path "~/src/git/guix")) -(use-package guix) - -(comment - (use-package auctex - :custom - (font-latex-fontify-sectioning 'color))) +(use-package guix + :disabled) (use-package go-mode :disabled) (use-package po-mode + :disabled :hook (po-mode . (lambda () (run-with-timer 0.1 nil 'View-exit)))) +(use-package auctex + :disabled + :custom + (font-latex-fontify-sectioning 'color)) + (use-package tex-mode :config (cl-delete-if @@ -879,92 +822,6 @@ For disabling the behaviour for certain buffers and/or modes." ;; :mode "\\.grg\\'") -;;; Theme - -(add-to-list 'custom-theme-load-path - (expand-file-name - (convert-standard-filename "lisp") user-emacs-directory)) -(load-theme 'tangomod t) - -(use-package smart-mode-line - :commands (sml/apply-theme) - :demand - :config - ;; thanks, but no thnaks; don't make fixed-width fills. - (defun sml/fill-for-buffer-identification () "") - (setq sml/theme 'tangomod) - (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) - -(use-package moody - :disabled - :demand - :config - (setq x-underline-at-descent-line t) - (let ((line (face-attribute 'mode-line :underline))) - (set-face-attribute 'mode-line nil :overline line) - (set-face-attribute 'mode-line-inactive nil :overline line) - (set-face-attribute 'mode-line-inactive nil :underline line) - (set-face-attribute 'mode-line nil :box nil) - (set-face-attribute 'mode-line-inactive nil :box nil) - (set-face-attribute 'mode-line-inactive nil :background "#e1e1e1")) ; d3d7cf - (moody-replace-mode-line-buffer-identification) - (moody-replace-vc-mode)) - -(use-package mini-modeline - :disabled - :demand - :config (mini-modeline-mode)) - -(defvar b/org-mode-font-lock-keywords - '(("[ \t]*\\(#\\+\\(BEGIN\\|END\\|begin\\|end\\)_\\(\\S-+\\)\\)[ \t]*\\([^\n:]*\\)" - (1 '(:foreground "#5a5b5a" :background "#292b2b") t) ; directive - (3 '(:foreground "#81a2be" :background "#292b2b") t) ; kind - (4 '(:foreground "#c5c8c6") t))) ; title - "For use with the `doom-tomorrow-night' theme.") - -(defun b/lights-on () - "Enable my favourite light theme." - (interactive) - (mapc #'disable-theme custom-enabled-themes) - (load-theme 'tangomod t) - (when (featurep 'smart-mode-line) - (sml/apply-theme 'tangomod)) - (font-lock-remove-keywords - 'org-mode b/org-mode-font-lock-keywords) - (when (featurep 'erc-hl-nicks) - (erc-hl-nicks-reset-face-table)) - (when (featurep 'exwm-systemtray) - (exwm-systemtray--refresh))) - -(defun b/lights-off () - "Go dark." - (interactive) - (mapc #'disable-theme custom-enabled-themes) - (load-theme 'doom-one t) - (when (featurep 'smart-mode-line) - (sml/apply-theme 'automatic)) - (font-lock-add-keywords - 'org-mode b/org-mode-font-lock-keywords t) - (when (featurep 'erc-hl-nicks) - (erc-hl-nicks-reset-face-table)) - (when (featurep 'exwm-systemtray) - (exwm-systemtray--refresh))) - -(bind-keys - ("C-c t d" . b/lights-off) - ("C-c t l" . b/lights-on)) - - ;;; Emacs enhancements & auxiliary packages (use-package man @@ -975,7 +832,6 @@ For disabling the behaviour for certain buffers and/or modes." :config (which-key-add-key-based-replacements ;; prefixes for global prefixes and minor modes - "C-c @" "outline" "C-c !" "flycheck" "C-x RET" "coding system" "C-x 8" "unicode" @@ -1000,76 +856,25 @@ For disabling the behaviour for certain buffers and/or modes." "C-c F" "frames" "C-c g" "magit" "C-S-h" "help(ful)" - "C-c m" "multiple-cursors" - "C-c p" "projectile" - "C-c p s" "projectile/search" - "C-c p x" "projectile/execute" - "C-c p 4" "projectile/other-window" "C-c q" "boxquote" - "C-c t" "themes" - ;; "s-O" "outline" - ) + "C-c t" "themes") ;; prefixes for major modes - (which-key-add-major-mode-key-based-replacements 'message-mode - "C-c f n" "footnote") (which-key-add-major-mode-key-based-replacements 'org-mode "C-c C-v" "org-babel") (which-key-mode) :custom (which-key-add-column-padding 5) - (which-key-max-description-length 32)) + (which-key-idle-delay 10000) + (which-key-idle-secondary-delay 0.05) + (which-key-max-description-length 32) + (which-key-show-early-on-C-h t)) -(use-package crux ; results in Waiting for git... [2 times] - :defer 0.4 - :bind (("C-c d" . crux-duplicate-current-line-or-region) - ("C-c M-d" . crux-duplicate-and-comment-current-line-or-region) - ("C-c f C" . crux-copy-file-preserve-attributes) - ("C-c f D" . crux-delete-file-and-buffer) - ("C-c f R" . crux-rename-file-and-buffer) - ("C-c j" . crux-top-join-line) - ("C-S-j" . crux-top-join-line))) - -(use-package mwim - :bind (("C-a" . mwim-beginning-of-code-or-line) - ("C-e" . mwim-end-of-code-or-line) - ("" . mwim-beginning-of-line-or-code) - ("" . mwim-end-of-line-or-code))) - -(use-package projectile - :disabled - :defer 0.5 - :bind-keymap ("C-c p" . projectile-command-map) - :config - (projectile-mode) - - (defun b/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 'b/projectile-mode-line-fun) - - (defun my-projectile-invalidate-cache (&rest _args) - ;; ignore the args to `magit-checkout' - (projectile-invalidate-cache nil)) - - (eval-after-load 'magit-branch - '(progn - (advice-add 'magit-checkout - :after #'my-projectile-invalidate-cache) - (advice-add 'magit-branch-and-checkout - :after #'my-projectile-invalidate-cache))) - :custom - (projectile-completion-system 'ivy) - (projectile-mode-line-prefix " proj")) +;; (require 'bandali-projectile) (use-package helpful + :disabled :defer 0.6 :bind (("C-S-h c" . helpful-command) @@ -1091,95 +896,36 @@ For disabling the behaviour for certain buffers and/or modes." (use-package boxquote :defer 0.6 :bind - (:prefix-map b/boxquote-prefix-map - :prefix "C-c q" - ("b" . boxquote-buffer) - ("B" . boxquote-insert-buffer) - ("d" . boxquote-defun) - ("F" . boxquote-insert-file) - ("hf" . boxquote-describe-function) - ("hk" . boxquote-describe-key) - ("hv" . boxquote-describe-variable) - ("hw" . boxquote-where-is) - ("k" . boxquote-kill) - ("p" . boxquote-paragraph) - ("q" . boxquote-boxquote) - ("r" . boxquote-region) - ("s" . boxquote-shell-command) - ("t" . boxquote-text) - ("T" . boxquote-title) - ("u" . boxquote-unbox) - ("U" . boxquote-unbox-region) - ("y" . boxquote-yank) - ("M-q" . boxquote-fill-paragraph) - ("M-w" . boxquote-kill-ring-save))) - -(use-package orgalist - ;; breaks auto-fill-mode, showing this error: - ;; orgalist--boundaries: Lisp nesting exceeds ‘max-lisp-eval-depth’ - :disabled - :after message - :hook (message-mode . orgalist-mode)) + (:prefix-map + b/boxquote-prefix-map + :prefix "C-c q" + ("b" . boxquote-buffer) + ("B" . boxquote-insert-buffer) + ("d" . boxquote-defun) + ("F" . boxquote-insert-file) + ("hf" . boxquote-describe-function) + ("hk" . boxquote-describe-key) + ("hv" . boxquote-describe-variable) + ("hw" . boxquote-where-is) + ("k" . boxquote-kill) + ("p" . boxquote-paragraph) + ("q" . boxquote-boxquote) + ("r" . boxquote-region) + ("s" . boxquote-shell-command) + ("t" . boxquote-text) + ("T" . boxquote-title) + ("u" . boxquote-unbox) + ("U" . boxquote-unbox-region) + ("y" . boxquote-yank) + ("M-q" . boxquote-fill-paragraph) + ("M-w" . boxquote-kill-ring-save))) -;; highlight TODOs in buffers (use-package hl-todo + ;; highlight TODOs in buffers :defer 0.5 :config (global-hl-todo-mode)) -(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) - ("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)) - :config - (setq multi-term-program "screen" - multi-term-program-switches (concat "-c" - (getenv "XDG_CONFIG_HOME") - "/screen/screenrc") - ;; TODO: add separate bindings for connecting to existing - ;; session vs. always creating a new one - multi-term-dedicated-select-after-open-p t - multi-term-dedicated-window-height 20 - multi-term-dedicated-max-window-height 30 - 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) - ("M-f" . term-send-forward-word) - ("M-b" . term-send-backward-word) - ("M-p" . term-send-up) - ("M-n" . term-send-down) - ("M-j" . term-send-raw-meta) - ("M-y" . term-send-raw-meta) - ("M-/" . term-send-raw-meta) - ("M-0" . term-send-raw-meta) - ("M-1" . term-send-raw-meta) - ("M-2" . term-send-raw-meta) - ("M-3" . term-send-raw-meta) - ("M-4" . term-send-raw-meta) - ("M-5" . term-send-raw-meta) - ("M-6" . term-send-raw-meta) - ("M-7" . term-send-raw-meta) - ("M-8" . term-send-raw-meta) - ("M-9" . term-send-raw-meta) - ("" . term-send-backward-kill-word) - ("" . term-send-backward-kill-word) - ("M-d" . term-send-delete-word) - ("M-," . term-send-raw) - ("M-." . comint-dynamic-complete)) - term-unbind-key-alist - '("C-z" "C-x" "C-c" "C-h" - ;; "C-y" - ""))) - (use-package page-break-lines :defer 0.5 :custom @@ -1190,35 +936,7 @@ For disabling the behaviour for certain buffers and/or modes." (use-package expand-region :bind ("C-=" . er/expand-region)) -(use-package multiple-cursors - :bind - (("C-S-" . mc/add-cursor-on-click) - (:prefix-map b/mc-prefix-map - :prefix "C-c m" - ("c" . mc/edit-lines) - ("n" . mc/mark-next-like-this) - ("p" . mc/mark-previous-like-this) - ("a" . mc/mark-all-like-this)))) - -(use-package yasnippet - :defer 0.6 - :config - (defconst yas-verbosity-cur yas-verbosity) - (setq yas-verbosity 2) - (add-to-list 'yas-snippet-dirs "~/src/git/guix/etc/snippets" t) - (yas-reload-all) - (setq yas-verbosity yas-verbosity-cur) - - (defun b/yas--maybe-expand-key-filter (cmd) - (when (and (yas--maybe-expand-key-filter cmd) - (not (bound-and-true-p git-commit-mode))) - cmd)) - (defconst b/yas-maybe-expand - '(menu-item "" yas-expand :filter b/yas--maybe-expand-key-filter)) - (define-key yas-minor-mode-map - (kbd "SPC") b/yas-maybe-expand) - - (yas-global-mode)) +(require 'bandali-yasnippet) (use-package debbugs :bind @@ -1245,6 +963,8 @@ For disabling the behaviour for certain buffers and/or modes." (setq debbugs-gnu-current-suppress t) (debbugs-gnu debbugs-gnu-default-severities '("guix-patches")))))) +(comment + (use-package org-ref :init (b/setq-every '("~/usr/org/references.bib") @@ -1258,12 +978,7 @@ For disabling the behaviour for certain buffers and/or modes." (use-package window :bind - (("C-c w e" . (lambda () - (interactive) - (split-window-right) - (other-window 1) - (erc-switch-to-buffer))) - ("C-c w s l" . (lambda () + (("C-c w s l" . (lambda () (interactive) (split-window-right) (other-window 1))) @@ -1335,10 +1050,6 @@ For disabling the behaviour for certain buffers and/or modes." (goto-char (cdr macro))) (reftex-this-word))))) -(use-package minions - :demand - :config (minions-mode)) - (use-package dmenu :custom (dmenu-prompt-string "run: ") @@ -1354,12 +1065,6 @@ For disabling the behaviour for certain buffers and/or modes." :config (eosd-start)) -(use-package scpaste - :disabled - :config - (setq scpaste-http-destination "https://p.bndl.org" - scpaste-scp-destination "nix:/var/www/p.bndl.org")) - (use-package eww :bind ("C-c a e w" . eww) :custom @@ -1367,160 +1072,6 @@ For disabling the behaviour for certain buffers and/or modes." (getenv "XDG_DOWNLOAD_DIR")))) -;;; Email - -(use-package ebdb - :demand - :after gnus - :bind (:map gnus-group-mode-map ("e" . ebdb)) - :config - (setq ebdb-sources (b/var "ebdb")) - (with-eval-after-load 'swiper - (add-to-list 'swiper-font-lock-exclude 'ebdb-mode t))) - -(use-package ebdb-com - :after ebdb) - -(use-package ebdb-complete - :after ebdb - :config - ;; (setq ebdb-complete-mail 'capf) - (ebdb-complete-enable)) - -(use-package ebdb-message - :demand - :after ebdb) - -;; (use-package company-ebdb -;; :config -;; (defun company-ebdb--post-complete (_) nil)) - -(use-package ebdb-gnus - :after ebdb - :custom - (ebdb-gnus-window-size 0.3)) - -(use-package ebdb-mua - :demand - :after ebdb - :custom (ebdb-mua-pop-up t)) - -;; (use-package ebdb-message -;; :after ebdb) - -;; (use-package ebdb-vcard -;; :after ebdb) - -(use-package message-x) - -(comment - (use-package message-x - :custom - (message-x-completion-alist - (quote - (("\\([rR]esent-\\|[rR]eply-\\)?[tT]o:\\|[bB]?[cC][cC]:" . gnus-harvest-find-address) - ((if - (boundp - (quote message-newgroups-header-regexp)) - message-newgroups-header-regexp message-newsgroups-header-regexp) - . message-expand-group)))))) - -(comment - (use-package gnus-harvest - :commands gnus-harvest-install - :demand t - :config - (if (featurep 'message-x) - (gnus-harvest-install 'message-x) - (gnus-harvest-install)))) - -(use-package gnus-article-treat-patch - :disabled - :demand - :load-path "lisp/" - :config - ;; note: be sure to customize faces with `:foreground "white"' when - ;; using a theme with a white/light background :) - (setq ft/gnus-article-patch-conditions - '("^@@ -[0-9]+,[0-9]+ \\+[0-9]+,[0-9]+ @@"))) - - -;;; IRC (with ERC and ZNC) - -(use-package erc - :bind (("C-c b b" . erc-switch-to-buffer) - :map erc-mode-map - ("M-a" . erc-track-switch-buffer)) - :custom - (erc-join-buffer 'bury) - (erc-lurker-hide-list '("JOIN" "PART" "QUIT")) - (erc-nick "bandali") - (erc-prompt "erc>") - (erc-rename-buffers t) - (erc-server-reconnect-attempts 5) - (erc-server-reconnect-timeout 3) - :config - (defun erc-cmd-OPME () - "Request chanserv to op me." - (erc-message "PRIVMSG" - (format "chanserv op %s %s" - (erc-default-target) - (erc-current-nick)) nil)) - (defun erc-cmd-DEOPME () - "Deop myself from current channel." - (erc-cmd-DEOP (format "%s" (erc-current-nick)))) - (add-to-list 'erc-modules 'keep-place) - (add-to-list 'erc-modules 'notifications) - (add-to-list 'erc-modules 'smiley) - (add-to-list 'erc-modules 'spelling) - (add-to-list 'erc-modules 'scrolltoplace) - (erc-update-modules)) - -(use-package erc-fill - :after erc - :custom - (erc-fill-column 77) - (erc-fill-function 'erc-fill-static) - (erc-fill-static-center 18)) - -(use-package erc-pcomplete - :after erc - :custom - (erc-pcomplete-nick-postfix ", ")) - -(use-package erc-track - :after erc - :bind (("C-c a e t d" . erc-track-disable) - ("C-c a e t e" . erc-track-enable)) - :custom - (erc-track-enable-keybindings nil) - (erc-track-exclude-types '("JOIN" "MODE" "NICK" "PART" "QUIT" - "324" "329" "332" "333" "353" "477")) - (erc-track-position-in-mode-line t) - (erc-track-priority-faces-only 'all) - (erc-track-shorten-function nil)) - -(use-package erc-hl-nicks - :after erc) - -(use-package erc-scrolltoplace - :after erc) - -(use-package znc - :bind (("C-c a e e" . znc-erc) - ("C-c a e a" . znc-all)) - :config - (let ((pwd (let ((auth (auth-source-search :host "znca"))) - (cond - ((null auth) (error "Couldn't find znca's authinfo")) - (t (funcall (plist-get (car auth) :secret))))))) - (setq znc-servers - `(("znc.shemshak.org" 1337 t - ((freenode "amin/freenode" ,pwd))) - ("znc.shemshak.org" 1337 t - ((oftc "amin/oftc" ,pwd))))))) - - ;;; Post initialization )