X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/3ea5e792dcaadc84a2b932f7c04d4de264a30553..373851f8fdfb24770f903d2226d7469171b62d1c:/init.org diff --git a/init.org b/init.org index 04719f0..8a21f1a 100644 --- a/init.org +++ b/init.org @@ -188,6 +188,13 @@ but for now I've decided to keep them enabled. See documentation for ;; '(not free-vars unresolved noruntime lexical make-local)) #+end_src +** whoami + +#+begin_src emacs-lisp +(setq user-full-name "Amin Bandali" + user-mail-address "amin@aminb.org") +#+end_src + ** Package management *** No =package.el= @@ -637,232 +644,6 @@ Roll your own modal mode (push #'minibufferp evil-escape-inhibit-functions)) #+end_src -*** [[https://github.com/ch11ng/exwm][EXWM]] (window manager) - -#+begin_src emacs-lisp :tangle no -(use-package exwm - :demand t - :config - (require 'exwm-config) - - ;; Set the initial workspace number. - (setq exwm-workspace-number 4) - - ;; Make class name the buffer name, truncating beyond 50 characters - (defun exwm-rename-buffer () - (interactive) - (exwm-workspace-rename-buffer - (concat exwm-class-name ":" - (if (<= (length exwm-title) 50) exwm-title - (concat (substring exwm-title 0 49) "..."))))) - (add-hook 'exwm-update-class-hook 'exwm-rename-buffer) - (add-hook 'exwm-update-title-hook 'exwm-rename-buffer) - - ;; 's-R': Reset - (exwm-input-set-key (kbd "s-R") #'exwm-reset) - ;; 's-\': Switch workspace - (exwm-input-set-key (kbd "s-\\") #'exwm-workspace-switch) - ;; 's-N': Switch to certain workspace - (dotimes (i 10) - (exwm-input-set-key (kbd (format "s-%d" i)) - (lambda () - (interactive) - (exwm-workspace-switch-create i)))) - ;; 's-SPC': Launch application - ;; (exwm-input-set-key - ;; (kbd "s-SPC") - ;; (lambda (command) - ;; (interactive (list (read-shell-command "➜ "))) - ;; (start-process-shell-command command nil command))) - - (exwm-input-set-key (kbd "M-s-SPC") #'counsel-linux-app) - - ;; Shorten 'C-c C-q' to 'C-q' - (define-key exwm-mode-map [?\C-q] #'exwm-input-send-next-key) - - ;; 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]))) - - ;; Enable EXWM - (exwm-enable) - - (add-hook 'exwm-init-hook #'exwm-config--fix/ido-buffer-window-other-frame) - - (require 'exwm-systemtray) - (exwm-systemtray-enable) - - (require 'exwm-randr) - (exwm-randr-enable) - - ;; (exwm-input-set-key - ;; (kbd "s-") - ;; (lambda () - ;; (interactive) - ;; (start-process "urxvt" nil "urxvt"))) - - ;; (exwm-input-set-key - ;; (kbd "s-SPC") ;; rofi doesn't properly launch programs when started from emacs - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "rofi-run" nil "rofi -show run -display-run '> ' -display-window ' 🗔 '"))) - - ;; (exwm-input-set-key - ;; (kbd "s-/") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "rofi-win" nil "rofi -show window -display-run '> ' -display-window ' 🗔 '"))) - - ;; (exwm-input-set-key - ;; (kbd "M-SPC") - ;; (lambda () - ;; (interactive) - ;; (start-process "rofi-pass" nil "rofi-pass"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "pamixer" nil "pamixer --toggle-mute"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "pamixer" nil "pamixer --allow-boost --decrease 5"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "pamixer" nil "pamixer --allow-boost --increase 5"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "mpc" nil "mpc toggle"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "mpc" nil "mpc prev"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "mpc" nil "mpv next"))) - - (defun ab--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 #'ab--exwm-pasystray) - - (exwm-input-set-key - (kbd "s-t") - (lambda () - (interactive) - (exwm-floating-toggle-floating))) - - (exwm-input-set-key - (kbd "s-f") - (lambda () - (interactive) - (exwm-layout-toggle-fullscreen))) - - (exwm-input-set-key - (kbd "s-w") - (lambda () - (interactive) - (kill-buffer (current-buffer)))) - - (exwm-input-set-key - (kbd "s-q") - (lambda () - (interactive) - (exwm-manage--kill-client)))) -#+end_src - -**** sxhkdrc -:PROPERTIES: -:header-args+: :tangle ~/.config/sxhkd/sxhkdrc :mkdirp yes -:END: - -#+begin_src conf :tangle no -# terminal emulator -super + Return - urxvt - -# program launcher -super + space - rofi -show run -display-run '> ' -display-window ' 🗔 ' - -# window finder -super + slash - rofi -show window -display-run '> ' -display-window ' 🗔 ' - -# password manager -alt + space - rofi-pass - -# make sxhkd reload its configuration files: -super + Escape - pkill -USR1 -x sxhkd - -# volume {up,down} -XF86Audio{Raise,Lower}Volume - pamixer --allow-boost --{in,de}crease 5 - -# mute -XF86AudioMute - pamixer --toggle-mute - -# playback control -XF86Audio{Play,Prev,Next} - mpc {toggle,prev,next} - -# Toggle keyboard layout -# super + F7 -# toggle-layout - -# Toggle Xfce presentation mode -# XF86LaunchB -# toggle-presentation-mode - -# monitor brightness -XF86MonBrightness{Up,Down} - light -{A,U} 5 - -super + apostrophe - rofi-light -#+end_src - *** [[https://orgmode.org/][Org mode]] #+begin_quote @@ -876,8 +657,17 @@ In short, my favourite way of life. #+begin_src emacs-lisp (setq org-src-tab-acts-natively t org-src-preserve-indentation nil - org-edit-src-content-indentation 0) + org-edit-src-content-indentation 0 + org-html-divs '((preamble "header" "preamble") + (content "main" "content") + (postamble "footer" "postamble")) + org-html-doctype "html5" + org-html-html5-fancy t + org-html-postamble nil) (add-hook 'org-mode-hook 'org-indent-mode) +(use-package htmlize) +(use-package org-notmuch + :after (:any org notmuch)) #+end_src *** [[https://magit.vc/][Magit]] @@ -1063,7 +853,8 @@ TODO: break this giant source block down into individual org sections. (ab--leader-keys "b s" 'save-buffer "b b" 'ivy-switch-buffer - "b k" 'kill-buffer + "," 'ivy-switch-buffer + "b k" 'kill-this-buffer "q q" 'evil-save-and-quit) #+end_src @@ -1080,7 +871,21 @@ TODO: break this giant source block down into individual org sections. #+end_src * Programming modes -** [[https://github.com/leanprover/lean-mode][Lean]] +** [[http://alloytools.org][Alloy]] (with [[https://github.com/dwwmmn/alloy-mode][alloy-mode]]) + +#+begin_src emacs-lisp +(use-package alloy-mode + :config (setq alloy-basic-offset 2)) +#+end_src + +** [[https://coq.inria.fr][Coq]] (with [[https://github.com/ProofGeneral/PG][Proof General]]) + +#+begin_src emacs-lisp +(use-package proof-site ; Proof General + :load-path "lib/proof-site/generic/") +#+end_src + +** [[https://leanprover.github.io][Lean]] (with [[https://github.com/leanprover/lean-mode][lean-mode]]) #+begin_src emacs-lisp (use-package lean-mode @@ -1286,8 +1091,34 @@ Emacs package that displays available keybindings in popup :defer 1 :config (which-key-mode)) #+end_src + +** [[https://github.com/seagle0128/doom-modeline][doom-modeline]] + +#+begin_src emacs-lisp +(use-package doom-modeline + :demand t + :config (setq doom-modeline-height 32) + :hook (after-init . doom-modeline-init)) +#+end_src + +** [[https://github.com/11111000000/tao-theme-emacs][tao-theme]] + +#+begin_src emacs-lisp :tangle no +(use-package tao-theme + :demand t + :config (load-theme 'tao-yang t)) +#+end_src + +** [[https://github.com/maio/eink-emacs][eink-theme]] + +#+begin_src emacs-lisp +(load-theme 'eink t) +#+end_src + * Email -** notmuch +** [[https://notmuchmail.org][notmuch]] + +See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. #+begin_src emacs-lisp (defun ab/notmuch () @@ -1326,7 +1157,7 @@ Emacs package that displays available keybindings in popup message-send-mail-function 'message-send-mail-with-sendmail message-sendmail-envelope-from 'header message-directory "drafts" - message-user-fqdn "fencepost.gnu.org") + message-user-fqdn "aminb.org") (add-hook 'message-mode-hook (lambda () (setq fill-column 65 message-fill-column 65))) @@ -1334,12 +1165,12 @@ Emacs package that displays available keybindings in popup #'flyspell-mode) ;; (add-hook 'notmuch-message-mode-hook #'+doom-modeline|set-special-modeline) ;; TODO: is there a way to only run this when replying and not composing? - (add-hook 'notmuch-message-mode-hook - (lambda () (progn - (newline) - (newline) - (forward-line -1) - (forward-line -1)))) + ;; (add-hook 'notmuch-message-mode-hook + ;; (lambda () (progn + ;; (newline) + ;; (newline) + ;; (forward-line -1) + ;; (forward-line -1)))) ;; (add-hook 'message-setup-hook ;; #'mml-secure-message-sign-pgpmime) ) @@ -1358,13 +1189,21 @@ Emacs package that displays available keybindings in popup notmuch-hello-insert-alltags) notmuch-search-oldest-first nil notmuch-show-all-tags-list t + notmuch-message-headers ; see bug follow-up above + '("Subject" "To" "Cc" "Date" "List-Id" "X-RT-Originator") notmuch-hello-thousands-separator "," notmuch-fcc-dirs '(("amin@aminb.org" . "amin/Sent") ("abandali@uwaterloo.ca" . "\"uwaterloo/Sent Items\"") ("amin.bandali@uwaterloo.ca" . "\"uwaterloo/Sent Items\"") ("aminb@gnu.org" . "gnu/Sent") - (".*" . "sent"))) + (".*" . "sent")) + notmuch-search-result-format + '(("date" . "%12s ") + ("count" . "%-7s ") + ("authors" . "%-40s ") + ("subject" . "%s ") + ("tags" . "(%s)"))) ;; (add-hook 'visual-fill-column-mode-hook ;; (lambda () ;; (when (string= major-mode 'notmuch-message-mode) @@ -1383,6 +1222,10 @@ Emacs package that displays available keybindings in popup "Search for `unread' tagged messages" (interactive) (notmuch-hello-search "tag:unread"))) + ("l" . (lambda () + "Search for `latest tagged messages" + (interactive) + (notmuch-hello-search "tag:latest"))) ("M" . (lambda () "Compose new mail and prompt for sender" (interactive) @@ -1435,6 +1278,65 @@ Emacs package that displays available keybindings in popup (add-to-list 'recentf-exclude (expand-file-name ab-maildir))) #+end_src +** supercite + +#+begin_src emacs-lisp :tangle no +(use-package supercite + :commands sc-cite-original + :init + (add-hook 'mail-citation-hook 'sc-cite-original) + + (defun sc-remove-existing-signature () + (save-excursion + (goto-char (region-beginning)) + (when (re-search-forward message-signature-separator (region-end) t) + (delete-region (match-beginning 0) (region-end))))) + + (add-hook 'mail-citation-hook 'sc-remove-existing-signature) + + (defun sc-remove-if-not-mailing-list () + (unless (assoc "list-id" sc-mail-info) + (setq attribution sc-default-attribution + citation (concat sc-citation-delimiter + sc-citation-separator)))) + + (add-hook 'sc-attribs-postselect-hook 'sc-remove-if-not-mailing-list) + + :config + (defun sc-fill-if-different (&optional prefix) + "Fill the region bounded by `sc-fill-begin' and point. +Only fill if optional PREFIX is different than +`sc-fill-line-prefix'. If `sc-auto-fill-region-p' is nil, do not +fill region. If PREFIX is not supplied, initialize fill +variables. This is useful for a regi `begin' frame-entry." + (if (not prefix) + (setq sc-fill-line-prefix "" + sc-fill-begin (line-beginning-position)) + (if (and sc-auto-fill-region-p + (not (string= prefix sc-fill-line-prefix))) + (let ((fill-prefix sc-fill-line-prefix)) + (unless (or (string= fill-prefix "") + (save-excursion + (goto-char sc-fill-begin) + (or (looking-at ">+ +") + (< (length + (buffer-substring (point) + (line-end-position))) + 65)))) + (fill-region sc-fill-begin (line-beginning-position))) + (setq sc-fill-line-prefix prefix + sc-fill-begin (line-beginning-position))))) +nil)) +#+end_src + +* Blogging +** [[https://ox-hugo.scripter.co][ox-hugo]] + +#+begin_src emacs-lisp +(use-package ox-hugo + :after ox) +#+end_src + * Post initialization :PROPERTIES: :CUSTOM_ID: post-initialization