[submodule "borg"]
path = lib/borg
url = https://github.com/emacscollective/borg.git
+[submodule "boxquote"]
+ path = lib/boxquote
+ url = https://github.com/davep/boxquote.el.git
[submodule "dash"]
path = lib/dash
url = https://github.com/magnars/dash.el.git
[submodule "erc-scrolltoplace"]
path = lib/erc-scrolltoplace
url = https://gitlab.com/jgkamat/erc-scrolltoplace.git
+[submodule "expand-region"]
+ path = lib/expand-region
+ url = https://github.com/magnars/expand-region.el.git
+[submodule "hl-todo"]
+ path = lib/hl-todo
+ url = https://github.com/tarsius/hl-todo.git
[submodule "ivy"]
path = lib/ivy
url = https://github.com/abo-abo/swiper.git
[submodule "org-tanglesync"]
path = lib/org-tanglesync
url = https://github.com/mtekman/org-tanglesync.el.git
+[submodule "orgalist"]
+ path = lib/orgalist
+ url = https://github.com/emacsmirror/orgalist.git
[submodule "packed"]
path = lib/packed
url = https://github.com/emacscollective/packed.git
+[submodule "page-break-lines"]
+ path = lib/page-break-lines
+ url = https://github.com/purcell/page-break-lines.git
[submodule "refinery-theme"]
path = lib/refinery-theme
url = https://git.bndl.org/refinery-theme
[submodule "transient"]
path = lib/transient
url = https://github.com/magit/transient.git
+[submodule "unkillable-scratch"]
+ path = lib/unkillable-scratch
+ url = https://github.com/EricCrosson/unkillable-scratch.git
[submodule "use-package"]
path = lib/use-package
url = https://github.com/jwiegley/use-package.git
+[submodule "which-key"]
+ path = lib/which-key
+ url = https://github.com/justbur/emacs-which-key.git
[submodule "with-editor"]
path = lib/with-editor
url = https://github.com/magit/with-editor.git
+[submodule "yasnippet"]
+ path = lib/yasnippet
+ url = https://github.com/joaotavora/yasnippet.git
[submodule "znc"]
path = lib/znc
url = https://git.bandali.eu.org/znc.el.git
(require 'bandali-ivy)
(require 'bandali-eshell)
+;; (require 'bandali-multi-term)
(require 'bandali-ibuffer)
("H" . outline-hide-body)
("S" . outline-show-all)
("h" . outline-hide-subtree)
- ("s" . outline-show-subtree)))
+ ("s" . outline-show-subtree))
+ :config
+ (when (featurep 'which-key)
+ (which-key-add-key-based-replacements
+ "C-c @" "outline"
+ "s-O" "outline")))
(use-package ls-lisp
:custom (ls-lisp-dirs-first t))
\f
;;; Emacs enhancements & auxiliary packages
-(comment
+
(use-package man
:config (setq Man-width 80))
: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"
"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
(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 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)
(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)
- ("<C-backspace>" . term-send-backward-kill-word)
- ("<M-DEL>" . 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"
- "<ESC>")))
-
(use-package page-break-lines
:defer 0.5
:custom
(use-package expand-region
:bind ("C-=" . er/expand-region))
-(use-package multiple-cursors
- :bind
- (("C-S-<mouse-1>" . 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)
+
+(comment
(use-package debbugs
:bind
--- /dev/null
+Subproject commit 7e47e0e2853bc1215739b2e28f260e9eed93b2c5
--- /dev/null
+Subproject commit ea6b4cbb9985ddae532bd2faf9bb00570c9f2781
--- /dev/null
+Subproject commit 3bba4591c54951d2abab113ec5e58a6319808ca9
--- /dev/null
+Subproject commit b436971c7d35af5ab48d91248dc3028fb733cab6
--- /dev/null
+Subproject commit 314b397910b3d16bb7cbcc25098696348e678080
--- /dev/null
+Subproject commit b24c2a760529833f230c14cb02ff6e7ec92288ab
--- /dev/null
+Subproject commit 8b49ae978cceca65967f3544c236f32964ddbed0
--- /dev/null
+Subproject commit 5b1217ab085fab4abeb1118dccb260691b446703
(gnus-harvest-install 'message-x)
(gnus-harvest-install))))
+(use-package orgalist
+ :after message
+ :hook (message-mode . orgalist-mode))
+
(provide 'bandali-message)
;;; bandali-message.el ends here
--- /dev/null
+;;; bandali-multi-term.el --- bandali's multi-term setup -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2020 Amin Bandali
+
+;; Author: Amin Bandali <bandali@gnu.org>
+;; Keywords: terminals
+
+;; 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
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; My multi-term configuration.
+
+;;; Code:
+
+(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)
+ ("<C-backspace>" . term-send-backward-kill-word)
+ ("<M-DEL>" . 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"
+ "<ESC>")))
+
+(provide 'bandali-multi-term)
+;;; bandali-multi-term.el ends here
--- /dev/null
+;;; bandali-projectile.el --- bandali's Projectile setup -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2020 Amin Bandali
+
+;; Author: Amin Bandali <bandali@gnu.org>
+;; Keywords: convenience
+
+;; 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
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; My Projectile setup.
+
+;;; 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)))
+
+ (when (featurep 'which-key)
+ (which-key-add-key-based-replacements
+ "C-c p" "projectile"
+ "C-c p s" "projectile/search"
+ "C-c p x" "projectile/execute"
+ "C-c p 4" "projectile/other-window"))
+ :custom
+ (projectile-completion-system 'ivy)
+ (projectile-mode-line-prefix " proj"))
+
+(provide 'bandali-projectile)
+;;; bandali-projectile.el ends here
"For use with the `doom-tomorrow-night' theme.")
(eval-when-compile
- (declare-function exwm-systemtray--refresh "exwm-systemtray"))
+ (declare-function exwm-systemtray--refresh "exwm-systemtray")
+ (declare-function erc-hl-nicks-reset-face-table "erc-hl-nicks"))
(defun b/lights-on ()
"Enable my favourite light theme."
--- /dev/null
+(use-package yasnippet
+ :defer 0.6
+ :config
+ (declare-function yas-reload-all
+ "yasnippet" (&optional no-jit interactive))
+ (declare-function yas-maybe-expand-abbrev-key-filter
+ "yasnippet" (cmd))
+
+ (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-abbrev-key-filter (cmd)
+ (when (and (yas-maybe-expand-abbrev-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-abbrev-key-filter))
+ (define-key yas-minor-mode-map
+ (kbd "SPC") b/yas-maybe-expand)
+
+ (yas-global-mode))
+
+(provide 'bandali-yasnippet)