Compare commits
No commits in common. "c1db214e70e871a1dcb01ef2b62b879640bd03a3" and "62b12ac877aa305bf1c692f924a8daf0a98d9a96" have entirely different histories.
c1db214e70
...
62b12ac877
|
@ -4,7 +4,6 @@
|
||||||
!init.el
|
!init.el
|
||||||
!straight-boot.el
|
!straight-boot.el
|
||||||
!runtime_pkgs
|
!runtime_pkgs
|
||||||
!bin
|
|
||||||
|
|
||||||
# track versions of installed packages
|
# track versions of installed packages
|
||||||
!straight
|
!straight
|
||||||
|
|
21
bin/autogit
21
bin/autogit
|
@ -1,21 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
### Add org file changes to git repo
|
|
||||||
|
|
||||||
for REPO in $1
|
|
||||||
do
|
|
||||||
echo "repository: $REPO"
|
|
||||||
eval "cd $REPO"
|
|
||||||
# check for errors
|
|
||||||
if ! git fsck --strict > /dev/null 2>&1; then
|
|
||||||
notify-send "Org git commit failed."
|
|
||||||
fi
|
|
||||||
# remove deleted files
|
|
||||||
git ls-files --deleted -z | xargs -0 git rm >/dev/null 2>&1
|
|
||||||
# add new files
|
|
||||||
git add . >/dev/null 2>&1
|
|
||||||
git commit -m "$(date)"
|
|
||||||
# push
|
|
||||||
git push origin master
|
|
||||||
done
|
|
||||||
echo Done
|
|
|
@ -1,5 +0,0 @@
|
||||||
#! /bin/bash
|
|
||||||
|
|
||||||
# start the emacs daemon
|
|
||||||
|
|
||||||
emacs --fg-daemon > /dev/null 2>&1
|
|
|
@ -1,5 +0,0 @@
|
||||||
#! /bin/bash
|
|
||||||
|
|
||||||
# stop the emacs daemon
|
|
||||||
|
|
||||||
emacsclient --eval "(kill-emacs)"
|
|
|
@ -1,76 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
state=/tmp/emacs-use-dark-mode
|
|
||||||
|
|
||||||
start_daemon () {
|
|
||||||
emacs --fg-daemon > /dev/null 2>&1
|
|
||||||
}
|
|
||||||
|
|
||||||
stop_daemon () {
|
|
||||||
emacsclient --eval "(kill-emacs)" 2> /dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
kill_daemon () {
|
|
||||||
killall emacsclient 2> /dev/null
|
|
||||||
killall emacs 2> /dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
restart_daemon () {
|
|
||||||
stop_daemon
|
|
||||||
start_daemon
|
|
||||||
}
|
|
||||||
|
|
||||||
hard_restart_daemon () {
|
|
||||||
kill_daemon
|
|
||||||
start_daemon
|
|
||||||
}
|
|
||||||
|
|
||||||
set_light () {
|
|
||||||
echo 0 > "$state"
|
|
||||||
}
|
|
||||||
|
|
||||||
set_dark () {
|
|
||||||
echo 1 > "$state"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ -z "$1" ]]; then
|
|
||||||
echo "Need a command to perform"
|
|
||||||
exit 1
|
|
||||||
elif [[ "$1" == "start" ]]; then
|
|
||||||
start_daemon &
|
|
||||||
elif [[ "$1" == "stop" ]]; then
|
|
||||||
stop_daemon
|
|
||||||
elif [[ "$1" == "kill" ]]; then
|
|
||||||
kill_daemon
|
|
||||||
elif [[ "$1" == "restart" ]]; then
|
|
||||||
restart_daemon &
|
|
||||||
elif [[ "$1" == "hard_restart" ]]; then
|
|
||||||
hard_restart_daemon &
|
|
||||||
elif [[ "$1" == "theme" ]]; then
|
|
||||||
if [[ "$2" == "toggle" ]]; then
|
|
||||||
# if no state file assume light theme
|
|
||||||
if [[ ! -f "$state" ]]; then
|
|
||||||
set_light
|
|
||||||
elif [[ "$(cat $state)" == 0 ]]; then
|
|
||||||
set_dark
|
|
||||||
else
|
|
||||||
set_light
|
|
||||||
fi
|
|
||||||
elif [[ "$2" == "light" ]]; then
|
|
||||||
set_light
|
|
||||||
elif [[ "$2" == "dark" ]]; then
|
|
||||||
set_dark
|
|
||||||
else
|
|
||||||
echo 'Invlalid theme command'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ "$3" == "restart" ]; then
|
|
||||||
restart_daemon &
|
|
||||||
elif [ "$3" == "hard_restart" ]; then
|
|
||||||
hard_restart_daemon &
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo 'Invalid command'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
10
bin/mbsync
10
bin/mbsync
|
@ -1,10 +0,0 @@
|
||||||
#! /bin/sh
|
|
||||||
|
|
||||||
rcpath=$XDG_CONFIG_HOME/emacs/local/lib/mu4e/mbsyncrc
|
|
||||||
|
|
||||||
if [ ! -f $rcpath ]; then
|
|
||||||
echo "mbsyncrc does not exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
/usr/bin/mbsync -c "$rcpath" "$@"
|
|
|
@ -1,12 +0,0 @@
|
||||||
#! /bin/sh
|
|
||||||
|
|
||||||
## indexes mu depending on whether emacs mu4e is running
|
|
||||||
|
|
||||||
## assume the mu server is only started by mu4e
|
|
||||||
if pgrep -fx '/usr/bin/mu server' > /dev/null; then
|
|
||||||
echo indexing mu through emacs
|
|
||||||
emacsclient -e '(mu4e-update-index)' > /dev/null
|
|
||||||
else
|
|
||||||
echo indexing mu natively
|
|
||||||
mu index
|
|
||||||
fi
|
|
582
etc/conf.org
582
etc/conf.org
|
@ -272,8 +272,7 @@ OS is one of those in `system-type'."
|
||||||
"Return all applications that can open a given MIMETYPE.
|
"Return all applications that can open a given MIMETYPE.
|
||||||
The list is comprised of alists where pairs are of the form (name . command)."
|
The list is comprised of alists where pairs are of the form (name . command)."
|
||||||
(let ((case-fold-search nil)
|
(let ((case-fold-search nil)
|
||||||
(mime-regex (->> (regexp-quote mimetype)
|
(mime-regex (format "^MimeType=.*%s;?.*$" mimetype)))
|
||||||
(format "^MimeType=.*%s;?.*$"))))
|
|
||||||
(->> (list "/usr/share/applications"
|
(->> (list "/usr/share/applications"
|
||||||
"/usr/local/share/applications"
|
"/usr/local/share/applications"
|
||||||
"~/.local/share/applications")
|
"~/.local/share/applications")
|
||||||
|
@ -295,17 +294,16 @@ multiple files at once for given MIMETYPE."
|
||||||
(defun nd/execute-desktop-command (cmd file)
|
(defun nd/execute-desktop-command (cmd file)
|
||||||
"Opens FILE using CMD in separate process where CMD is from a
|
"Opens FILE using CMD in separate process where CMD is from a
|
||||||
desktop file exec directive."
|
desktop file exec directive."
|
||||||
(--> (shell-quote-argument file)
|
(--> (format "'%s'" file)
|
||||||
(replace-regexp-in-string "%[fuFU]" it cmd t t)
|
(replace-regexp-in-string "%[fuFU]" it cmd t t)
|
||||||
(format "%s &" it)
|
(format "%s &" it)
|
||||||
(call-process-shell-command it)))
|
(call-process-shell-command it)))
|
||||||
|
|
||||||
(defun nd/get-mime-type (file)
|
(defun nd/get-mime-type (file)
|
||||||
"Get the mime type of FILE."
|
"Get the mime type of FILE."
|
||||||
(->> (shell-quote-argument file)
|
(let* ((cmd (format "file --mime-type -b '%s'" file))
|
||||||
(format "file --mime-type -b %s")
|
(mt (shell-command-to-string cmd)))
|
||||||
(shell-command-to-string)
|
(replace-regexp-in-string "\n\\'" "" mt)))
|
||||||
(s-trim)))
|
|
||||||
|
|
||||||
(defconst nd/device-mount-dirs
|
(defconst nd/device-mount-dirs
|
||||||
(list
|
(list
|
||||||
|
@ -343,17 +341,6 @@ If FRONT is t, do to the front of current values instead of the back."
|
||||||
(--each
|
(--each
|
||||||
(where-is-internal f keymap nil nil)
|
(where-is-internal f keymap nil nil)
|
||||||
(define-key keymap it nil)))
|
(define-key keymap it nil)))
|
||||||
|
|
||||||
|
|
||||||
(defun nd/run-at-hour-minute (hh mm rep cmd &rest args)
|
|
||||||
"Run CMD starting at next integral HH and MM repeating every REP seconds.
|
|
||||||
|
|
||||||
For example, to run every hour at 45 minutes HH would be 1 and MM would be 45."
|
|
||||||
(let* ((m (* mm 60))
|
|
||||||
(h (* hh 3600))
|
|
||||||
(now (float-time))
|
|
||||||
(next (- (+ m (* h (ceiling (/ (- now m) h)))) now)))
|
|
||||||
(apply #'run-at-time next rep cmd args)))
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** interactive
|
** interactive
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
@ -457,25 +444,10 @@ This theme has good functionality for many different modes without being over-th
|
||||||
|
|
||||||
Since I run emacs in [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html][client/server]] mode, the loaded theme can change depending on if the client is a terminal or server (terminals have far fewer colors). This makes the theme reset when terminal is loaded before gui or vice versa.
|
Since I run emacs in [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html][client/server]] mode, the loaded theme can change depending on if the client is a terminal or server (terminals have far fewer colors). This makes the theme reset when terminal is loaded before gui or vice versa.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defvar nd/theme nil)
|
(defvar nd/theme 'spacemacs-dark)
|
||||||
(defvar nd/theme-dark nil)
|
|
||||||
(defvar nd/theme-window-loaded nil)
|
(defvar nd/theme-window-loaded nil)
|
||||||
(defvar nd/theme-terminal-loaded nil)
|
(defvar nd/theme-terminal-loaded nil)
|
||||||
|
|
||||||
(defun nd/read-use-dark-mode-p ()
|
|
||||||
"Return t if flag file permits us to use dark mode."
|
|
||||||
(let ((path "/tmp/emacs-use-dark-mode"))
|
|
||||||
(when (f-exists-p path)
|
|
||||||
(equal (s-trim (f-read-text path)) "1"))))
|
|
||||||
|
|
||||||
(setq nd/theme-dark (nd/read-use-dark-mode-p))
|
|
||||||
|
|
||||||
(defmacro nd/choose-theme (light-stuff dark-stuff)
|
|
||||||
"Do LIGHT-STUFF or DARK-STUFF depending on the selected theme."
|
|
||||||
`(if nd/theme-dark ,dark-stuff ,light-stuff))
|
|
||||||
|
|
||||||
(setq nd/theme (nd/choose-theme 'spacemacs-light 'spacemacs-dark))
|
|
||||||
|
|
||||||
(setq default-frame-alist '((font . "Dejavu Sans Mono-11")))
|
(setq default-frame-alist '((font . "Dejavu Sans Mono-11")))
|
||||||
|
|
||||||
;; required for emacsclient/daemon setup
|
;; required for emacsclient/daemon setup
|
||||||
|
@ -582,19 +554,13 @@ Some modes like to make popup windows (eg ediff). This prevents that.
|
||||||
*** ace-window
|
*** ace-window
|
||||||
This is an elegant window selector. It displays a number in the corner when activated, and windows may be chosen by pressing the corresponding number. Note that spacemacs fails to make the numbers look nice so the theme code is a workaround to make them smaller and prettier.
|
This is an elegant window selector. It displays a number in the corner when activated, and windows may be chosen by pressing the corresponding number. Note that spacemacs fails to make the numbers look nice so the theme code is a workaround to make them smaller and prettier.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defvar nd/ace-window-fg nil)
|
|
||||||
(defvar nd/ace-window-bg nil)
|
|
||||||
|
|
||||||
(setq nd/ace-window-fg (nd/choose-theme "#F6E0F9" "#292b2e"))
|
|
||||||
(setq nd/ace-window-bg (nd/choose-theme "#7A1686" "#292b2e"))
|
|
||||||
|
|
||||||
(use-package ace-window
|
(use-package ace-window
|
||||||
:straight t
|
:straight t
|
||||||
:config
|
:config
|
||||||
(setq aw-background t)
|
(setq aw-background t)
|
||||||
(custom-set-faces `(aw-leading-char-face
|
(custom-set-faces '(aw-leading-char-face
|
||||||
((t (:foreground ,nd/ace-window-fg
|
((t (:foreground "#292b2e"
|
||||||
:background ,nd/ace-window-bg
|
:background "#bc6ec5"
|
||||||
:height 1.0
|
:height 1.0
|
||||||
:box nil))))))
|
:box nil))))))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
@ -607,13 +573,10 @@ This is an elegant window selector. It displays a number in the corner when acti
|
||||||
(format "%-50s %s" b f)
|
(format "%-50s %s" b f)
|
||||||
b)))
|
b)))
|
||||||
|
|
||||||
(defvar nd/ivy-match-bg nil)
|
|
||||||
|
|
||||||
(setq nd/ivy-match-bg (nd/choose-theme "#D4C7F3" "#534573"))
|
|
||||||
|
|
||||||
(use-package ivy
|
(use-package ivy
|
||||||
:straight t
|
:straight t
|
||||||
:delight
|
:delight
|
||||||
|
:custom-face (ivy-current-match ((t (:inherit bold :extend t :background "#534573"))))
|
||||||
:config
|
:config
|
||||||
(setq ivy-use-virtual-buffers nil
|
(setq ivy-use-virtual-buffers nil
|
||||||
ivy-sort-max-size 30000
|
ivy-sort-max-size 30000
|
||||||
|
@ -635,10 +598,7 @@ This is an elegant window selector. It displays a number in the corner when acti
|
||||||
(ivy--alist-set 'ivy-format-functions-alist t #'ivy-format-function-line)
|
(ivy--alist-set 'ivy-format-functions-alist t #'ivy-format-function-line)
|
||||||
(ivy-configure 'ivy-switch-buffer
|
(ivy-configure 'ivy-switch-buffer
|
||||||
:display-transformer-fn #'nd/ivy-swith-buffer-transformer-fn)
|
:display-transformer-fn #'nd/ivy-swith-buffer-transformer-fn)
|
||||||
(ivy-mode)
|
(ivy-mode))
|
||||||
(set-face-attribute 'ivy-current-match nil :inherit 'bold :extend t :background nd/ivy-match-bg)
|
|
||||||
;;(ivy-current-match ((t (:inherit bold :extend t :background 'nd/ivy-match-bg))))
|
|
||||||
)
|
|
||||||
|
|
||||||
;; ensure counsel and swiper are loaded
|
;; ensure counsel and swiper are loaded
|
||||||
(use-package counsel
|
(use-package counsel
|
||||||
|
@ -702,14 +662,6 @@ Some prompts require literal "yes" or "no" to decide action. Life is short and I
|
||||||
minor-mode-alist)))
|
minor-mode-alist)))
|
||||||
(delight 'origami-mode "Ω" "origami"))
|
(delight 'origami-mode "Ω" "origami"))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** dired
|
|
||||||
:PROPERTIES:
|
|
||||||
:ID: bf9f4e06-7440-40bd-8c58-5bdf1ce8d920
|
|
||||||
:CREATED: [2023-08-01 Tue 00:01]
|
|
||||||
:END:
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(setq dired-free-space nil)
|
|
||||||
#+end_src
|
|
||||||
* low-level config
|
* low-level config
|
||||||
General configuation for behind-the-scenes behavior
|
General configuation for behind-the-scenes behavior
|
||||||
** user information
|
** user information
|
||||||
|
@ -939,14 +891,10 @@ End rant.
|
||||||
Oh yes, and to get linting to work, also install r-lintr and r-styler in the conda environment. In general it seems better and less risky to install things from =conda= rather than from within an R session.
|
Oh yes, and to get linting to work, also install r-lintr and r-styler in the conda environment. In general it seems better and less risky to install things from =conda= rather than from within an R session.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(nd/when-bin "conda"
|
(nd/when-bin "conda"
|
||||||
(use-package xterm-color
|
|
||||||
:straight t)
|
|
||||||
|
|
||||||
(use-package ess
|
(use-package ess
|
||||||
:straight t
|
:straight t
|
||||||
:init
|
:init
|
||||||
(require 'ess-r-mode)
|
(require 'ess-r-mode)
|
||||||
:after xterm-color
|
|
||||||
:hook
|
:hook
|
||||||
((ess-mode . flycheck-mode)
|
((ess-mode . flycheck-mode)
|
||||||
(ess-mode . company-mode)
|
(ess-mode . company-mode)
|
||||||
|
@ -965,14 +913,7 @@ Oh yes, and to get linting to work, also install r-lintr and r-styler in the con
|
||||||
;; for RStudio by the people who maintain RStudio
|
;; for RStudio by the people who maintain RStudio
|
||||||
ess-style 'RStudio
|
ess-style 'RStudio
|
||||||
;; always start from the current file
|
;; always start from the current file
|
||||||
ess-startup-directory 'default-directory))
|
ess-startup-directory 'default-directory)))
|
||||||
|
|
||||||
;; Workaround for https://github.com/emacs-ess/ESS/issues/1193
|
|
||||||
(defun my-inferior-ess-init ()
|
|
||||||
(add-hook 'comint-preoutput-filter-functions #'xterm-color-filter -90 t)
|
|
||||||
(setq-local ansi-color-for-comint-mode nil))
|
|
||||||
|
|
||||||
(add-hook 'inferior-ess-mode-hook #'my-inferior-ess-init))
|
|
||||||
|
|
||||||
;; ;; fast compile
|
;; ;; fast compile
|
||||||
;; (defun nd/ess-r-add-env (orig-fun inf-buf proc-name start-args)
|
;; (defun nd/ess-r-add-env (orig-fun inf-buf proc-name start-args)
|
||||||
|
@ -1051,6 +992,7 @@ Note that all my checkers/formatters/interactive shells are managed through =con
|
||||||
(python-mode . company-mode)
|
(python-mode . company-mode)
|
||||||
(python-mode . nd/init-anaconda-company)
|
(python-mode . nd/init-anaconda-company)
|
||||||
(python-mode . blacken-mode)
|
(python-mode . blacken-mode)
|
||||||
|
(python-mode . pyenv-mode)
|
||||||
(inferior-python-mode . company-mode)
|
(inferior-python-mode . company-mode)
|
||||||
(inferior-python-mode . nd/init-anaconda-company))
|
(inferior-python-mode . nd/init-anaconda-company))
|
||||||
:config
|
:config
|
||||||
|
@ -1082,20 +1024,19 @@ For isolation I use [[https://github.com/pyenv/pyenv][pyenv]] and [[https://gith
|
||||||
|
|
||||||
Note this also requires all external packages to be installed in each environement (eg ipython, black, flake8, and pylint).
|
Note this also requires all external packages to be installed in each environement (eg ipython, black, flake8, and pylint).
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
;;(nd/require-bin "pyenv")
|
(nd/require-bin "pyenv")
|
||||||
;;
|
|
||||||
;;(nd/when-bin "pyenv"
|
(nd/when-bin "pyenv"
|
||||||
;; (use-package pyenv-mode
|
(use-package pyenv-mode
|
||||||
;; :straight t
|
:straight t
|
||||||
;; :after python
|
:after python
|
||||||
;; :hook ((python-mode . pyenv-mode))
|
:init (-some--> (getenv "PYENV_ROOT")
|
||||||
;; :init (-some--> (getenv "PYENV_ROOT")
|
(f-join it "versions")
|
||||||
;; (f-join it "versions")
|
(add-to-list 'exec-path it)))
|
||||||
;; (add-to-list 'exec-path it)))
|
|
||||||
;;
|
;; resolve symlinks when setting the pyenv, otherwise we get some
|
||||||
;; ;; resolve symlinks when setting the pyenv, otherwise we get some
|
;; strange errors when activating a symlinked env
|
||||||
;; ;; strange errors when activating a symlinked env
|
(advice-add #'pyenv-mode-full-path :filter-return #'file-truename))
|
||||||
;; (advice-add #'pyenv-mode-full-path :filter-return #'file-truename))
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** Snakemake
|
*** Snakemake
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
|
@ -1156,20 +1097,7 @@ I have also found this to be much simpler and conflicting with other packages su
|
||||||
;; flycheck setup (needed to get flycheck to pay attention to flags/extensions
|
;; flycheck setup (needed to get flycheck to pay attention to flags/extensions
|
||||||
;; in cabal files)
|
;; in cabal files)
|
||||||
(use-package flycheck-haskell
|
(use-package flycheck-haskell
|
||||||
:straight t
|
:straight t)
|
||||||
:after flycheck
|
|
||||||
:config
|
|
||||||
;; fix whatever they did here: https://github.com/flycheck/flycheck-haskell/pull/118
|
|
||||||
(setq flycheck-haskell-runghc-command
|
|
||||||
(let ((stack-exe (funcall flycheck-executable-find "stack")))
|
|
||||||
`(,stack-exe "--verbosity" "silent" "runghc" "--no-ghc-package-path" "--" "-i"
|
|
||||||
"-packageCabal"
|
|
||||||
"-packagebase"
|
|
||||||
"-packagebytestring"
|
|
||||||
"-packagecontainers"
|
|
||||||
"-packageprocess"
|
|
||||||
"-packagedirectory"
|
|
||||||
"-packagefilepath"))))
|
|
||||||
|
|
||||||
(use-package haskell-mode
|
(use-package haskell-mode
|
||||||
:straight t
|
:straight t
|
||||||
|
@ -1482,8 +1410,8 @@ This adds support for csv files. Almost makes them editable like a spreadsheet.
|
||||||
(use-package pkgbuild-mode
|
(use-package pkgbuild-mode
|
||||||
:straight t)
|
:straight t)
|
||||||
|
|
||||||
;; (use-package systemd
|
(use-package systemd
|
||||||
;; :straight systemd)
|
:straight systemd)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** Unix Shell
|
*** Unix Shell
|
||||||
No custom code here, but flycheck needs =shellcheck= (a Haskell program).
|
No custom code here, but flycheck needs =shellcheck= (a Haskell program).
|
||||||
|
@ -1492,10 +1420,6 @@ No custom code here, but flycheck needs =shellcheck= (a Haskell program).
|
||||||
|
|
||||||
;;(add-to-list 'load-path (nd/expand-local-pkg-directory "essh"))
|
;;(add-to-list 'load-path (nd/expand-local-pkg-directory "essh"))
|
||||||
;;(require 'essh)
|
;;(require 'essh)
|
||||||
|
|
||||||
(use-package bats-mode
|
|
||||||
:straight t)
|
|
||||||
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** SQL
|
*** SQL
|
||||||
No custom code here, but flycheck needs =sqlint= (a ruby gem).
|
No custom code here, but flycheck needs =sqlint= (a ruby gem).
|
||||||
|
@ -1744,10 +1668,7 @@ Additionally, using specialized file variables makes it much easier and faster t
|
||||||
org-x-action-files (list "general.org" "projects/*.org")
|
org-x-action-files (list "general.org" "projects/*.org")
|
||||||
org-x-incubator-files (list "incubator.org")
|
org-x-incubator-files (list "incubator.org")
|
||||||
org-x-capture-file "capture.org"
|
org-x-capture-file "capture.org"
|
||||||
org-x-reference-files (list "reference/idea.org"
|
org-x-reference-files (list "reference/idea.org" "reference/questions.org")
|
||||||
"reference/questions.org"
|
|
||||||
"reference/record.org"
|
|
||||||
"reference/resources.org")
|
|
||||||
org-x-endpoint-goal-file "reference/goals/endpoint.org"
|
org-x-endpoint-goal-file "reference/goals/endpoint.org"
|
||||||
org-x-lifetime-goal-file "reference/goals/lifetime.org"
|
org-x-lifetime-goal-file "reference/goals/lifetime.org"
|
||||||
org-x-survival-goal-file "reference/goals/survival.org"
|
org-x-survival-goal-file "reference/goals/survival.org"
|
||||||
|
@ -1762,24 +1683,14 @@ Additionally, using specialized file variables makes it much easier and faster t
|
||||||
(org-x-get-reference-files :maxlevel . 9)))
|
(org-x-get-reference-files :maxlevel . 9)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** autosave
|
*** autosave
|
||||||
Save all org buffers 1 minute before the hour, then commit whatever I saved.
|
Save all org buffers 1 minute before the hour.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun nd/org-save-all-org-buffers ()
|
(defun nd/org-save-all-org-buffers ()
|
||||||
"Save org buffers without confirmation or message (unlike default)."
|
"Save org buffers without confirmation or message (unlike default)."
|
||||||
(save-some-buffers t (lambda () (derived-mode-p 'org-mode)))
|
(save-some-buffers t (lambda () (derived-mode-p 'org-mode)))
|
||||||
(when (featurep 'org-id) (org-id-locations-save)))
|
(when (featurep 'org-id) (org-id-locations-save)))
|
||||||
|
|
||||||
(defun nd/org-commit-repos ()
|
(run-at-time "00:59" 3600 #'nd/org-save-all-org-buffers)
|
||||||
"Commit org git repos automatically"
|
|
||||||
(let* ((cmd (format "autogit \"%s\"" org-directory)))
|
|
||||||
(async-shell-command cmd)))
|
|
||||||
|
|
||||||
;; TODO don't hardcode this name
|
|
||||||
(add-to-list 'display-buffer-alist
|
|
||||||
'("\\*Async Shell Command\\*" display-buffer-no-window))
|
|
||||||
|
|
||||||
(nd/run-at-hour-minute 1 59 3600 #'nd/org-save-all-org-buffers)
|
|
||||||
(nd/run-at-hour-minute 1 0 3600 #'nd/org-commit-repos)
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** stateless configuration
|
*** stateless configuration
|
||||||
=org-ml= provides stateless functions for operating on org buffers.
|
=org-ml= provides stateless functions for operating on org buffers.
|
||||||
|
@ -1809,16 +1720,11 @@ The advantage of doing it this way is that I can byte-compile and test independe
|
||||||
(require 'org-x)
|
(require 'org-x)
|
||||||
#+end_src
|
#+end_src
|
||||||
** buffer interface
|
** buffer interface
|
||||||
*** folding
|
*** startup folding
|
||||||
Org 9.4 by default makes files open with the outline totally unfolded. I don't like this; it makes it seem like my laptop is screaming at me whenever I view an org file.
|
Org 9.4 by default makes files open with the outline totally unfolded. I don't like this; it makes it seem like my laptop is screaming at me whenever I view an org file.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(setq org-startup-folded t)
|
(setq org-startup-folded t)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Org 9.6 seemed to switch the default folding style which breaks search/replace. Change it back like so.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(setq org-fold-core-style 'overlays)
|
|
||||||
#+end_src
|
|
||||||
*** line wrap
|
*** line wrap
|
||||||
I often write long, lengthy prose in org buffers, so use =visual-line-mode= to make lines wrap in automatic and sane manner.
|
I often write long, lengthy prose in org buffers, so use =visual-line-mode= to make lines wrap in automatic and sane manner.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
@ -2216,18 +2122,13 @@ In terms of logging, I like to record the time of each change upon leaving any s
|
||||||
**** colors
|
**** colors
|
||||||
Aesthetically, I like all my keywords to have bold colors.
|
Aesthetically, I like all my keywords to have bold colors.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(setq
|
(setq org-todo-keyword-faces
|
||||||
org-todo-keyword-faces
|
`((,org-x-kw-todo :foreground "light coral" :weight bold)
|
||||||
(-let (((todo next done wait hold canc)
|
(,org-x-kw-next :foreground "khaki" :weight bold)
|
||||||
(nd/choose-theme
|
(,org-x-kw-done :foreground "light green" :weight bold)
|
||||||
'("indian red" "dark goldenrod" "forest green" "dark orange" "dark violet" "DodgerBlue1")
|
(,org-x-kw-wait :foreground "orange" :weight bold)
|
||||||
'("light coral" "khaki" "light green" "orange" "violet" "deep sky blue"))))
|
(,org-x-kw-hold :foreground "violet" :weight bold)
|
||||||
`((,org-x-kw-todo :foreground ,todo :weight bold)
|
(,org-x-kw-canc :foreground "deep sky blue" :weight bold)))
|
||||||
(,org-x-kw-next :foreground ,next :weight bold)
|
|
||||||
(,org-x-kw-done :foreground ,done :weight bold)
|
|
||||||
(,org-x-kw-wait :foreground ,wait :weight bold)
|
|
||||||
(,org-x-kw-hold :foreground ,hold :weight bold)
|
|
||||||
(,org-x-kw-canc :foreground ,canc :weight bold))))
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** links and IDs
|
*** links and IDs
|
||||||
IDs and links are useful for meetings where I either reference tasks to discuss or reference action items to do in the future.
|
IDs and links are useful for meetings where I either reference tasks to discuss or reference action items to do in the future.
|
||||||
|
@ -2298,15 +2199,11 @@ Each group also has its own color, defined by its prefix symbol.
|
||||||
(->> (alist-get prefix grouped-tags)
|
(->> (alist-get prefix grouped-tags)
|
||||||
(--map (list it :foreground color)))))
|
(--map (list it :foreground color)))))
|
||||||
(setq org-tag-faces
|
(setq org-tag-faces
|
||||||
(-let (((loc res misc cat)
|
(append
|
||||||
(nd/choose-theme
|
(add-foreground org-x-tag-location-prefix "PaleGreen")
|
||||||
'("medium sea green" "steel blue" "dark goldenrod" "dark violet")
|
(add-foreground org-x-tag-resource-prefix "SkyBlue")
|
||||||
'("PaleGreen" "SkyBlue" "PaleGoldenrod" "violet"))))
|
(add-foreground org-x-tag-misc-prefix "PaleGoldenrod")
|
||||||
(append
|
(add-foreground org-x-tag-category-prefix "violet")))))
|
||||||
(add-foreground org-x-tag-location-prefix loc)
|
|
||||||
(add-foreground org-x-tag-resource-prefix res)
|
|
||||||
(add-foreground org-x-tag-misc-prefix misc)
|
|
||||||
(add-foreground org-x-tag-category-prefix cat))))))
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** properties
|
*** properties
|
||||||
The built-in =effort= is used as the fourth and final homonymous GTD context (the other three being covered above using tags). It is further restricted with =Effort_All= to allow easier filtering in the agenda.
|
The built-in =effort= is used as the fourth and final homonymous GTD context (the other three being covered above using tags). It is further restricted with =Effort_All= to allow easier filtering in the agenda.
|
||||||
|
@ -2456,11 +2353,11 @@ Prevent accidental refiling under tasks with done keywords
|
||||||
|
|
||||||
;; TODO this no work, although does work if var is global
|
;; TODO this no work, although does work if var is global
|
||||||
;; redfining the targets works for now
|
;; redfining the targets works for now
|
||||||
;; (add-hook 'org-agenda-mode-hook
|
(add-hook 'org-agenda-mode-hook
|
||||||
;; (lambda ()
|
(lambda ()
|
||||||
;; (when (equal (buffer-name) "*Org Agenda(A)*")
|
(when (equal (buffer-name) "*Org Agenda(A)*")
|
||||||
;; (setq-local org-refile-targets
|
(setq-local org-refile-targets
|
||||||
;; '(("~/Org/journal/goals.org" :maxlevel . 9))))))
|
'(("~/Org/journal/goals.org" :maxlevel . 9))))))
|
||||||
;; (lambda () (when (org-entry-get nil "GOAL") t))))))
|
;; (lambda () (when (org-entry-get nil "GOAL") t))))))
|
||||||
;; (setq org-refile-targets '((nil :maxlevel . 9)
|
;; (setq org-refile-targets '((nil :maxlevel . 9)
|
||||||
;; ("~/Org/reference/idea.org" :maxlevel . 9)
|
;; ("~/Org/reference/idea.org" :maxlevel . 9)
|
||||||
|
@ -2481,15 +2378,9 @@ The modeline is a nice place to indicate if something is clocked in or out. Unfo
|
||||||
|
|
||||||
Solution: flashy colors.
|
Solution: flashy colors.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defvar nd/spaceline-clock-fg nil)
|
|
||||||
(defvar nd/spaceline-clock-bg nil)
|
|
||||||
|
|
||||||
(setq nd/spaceline-clock-fg (nd/choose-theme "#3E3D31" "#3E3D31"))
|
|
||||||
(setq nd/spaceline-clock-bg (nd/choose-theme "#88F918" "#66cd00"))
|
|
||||||
|
|
||||||
(defface nd/spaceline-highlight-clocked-face
|
(defface nd/spaceline-highlight-clocked-face
|
||||||
`((t (:background ,nd/spaceline-clock-bg
|
`((t (:background "chartreuse3"
|
||||||
:foreground ,nd/spaceline-clock-fg
|
:foreground "#3E3D31"
|
||||||
:inherit 'mode-line)))
|
:inherit 'mode-line)))
|
||||||
"Default highlight face for spaceline.")
|
"Default highlight face for spaceline.")
|
||||||
|
|
||||||
|
@ -3403,207 +3294,197 @@ Initialize by running =nd/mu-init=.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(nd/require-bin "pandoc" :aur "pandoc-bin")
|
(nd/require-bin "pandoc" :aur "pandoc-bin")
|
||||||
|
|
||||||
|
(nd/when-bin "mu"
|
||||||
|
(require 'mu4e)
|
||||||
|
|
||||||
(let ((acnts-path (f-join (nd/expand-lib-directory "mu4e") "accounts.el")))
|
(use-package password-store
|
||||||
(when (f-exists-p acnts-path)
|
:straight t)
|
||||||
(nd/when-bin "mu"
|
|
||||||
;; load mu itself
|
|
||||||
(require 'mu4e)
|
|
||||||
(require 'smtpmail)
|
|
||||||
;; (require 'smtpmail-async)
|
|
||||||
|
|
||||||
;;
|
(defun nd/make-mu4e-context (name dir addr smtp-srv sent-behavior)
|
||||||
;; apply common config shared b/t all accounts I use
|
(let* ((trash (format "/%s/trash" dir))
|
||||||
;;
|
(drafts (format "/%s/drafts" dir))
|
||||||
|
(sent (format "/%s/sent" dir))
|
||||||
|
(archive (format "/%s/archive" dir))
|
||||||
|
(inbox (format "/%s/inbox" dir))
|
||||||
|
(shortcuts (--map (list :maildir (car it) :key (cdr it))
|
||||||
|
`((,trash . ?t)
|
||||||
|
(,drafts . ?d)
|
||||||
|
(,sent . ?s)
|
||||||
|
(,archive . ?a)
|
||||||
|
(,inbox . ?i))))
|
||||||
|
|
||||||
(defun nd/mu-init (maildir)
|
(mf (lambda (d msg)
|
||||||
"Initialize the mu database using available contexts."
|
(-some--> msg
|
||||||
(->> mu4e-contexts
|
(mu4e-message-field it :maildir)
|
||||||
(--map (->> (mu4e-context-vars it)
|
(string-prefix-p (concat "/" d) it)))))
|
||||||
(alist-get 'user-mail-address)
|
(make-mu4e-context
|
||||||
(format "--my-address=%s")))
|
:name name
|
||||||
(s-join " ")
|
:match-func (-partial mf dir) ; use lexical scope here
|
||||||
(format "mu init --maildir %s %s" maildir)
|
:vars `((mu4e-trash-folder . ,trash)
|
||||||
(shell-command-to-string)))
|
(mu4e-drafts-folder . ,drafts)
|
||||||
|
(mu4e-sent-folder . ,sent)
|
||||||
|
(mu4e-refile-folder . ,archive)
|
||||||
|
(mu4e-sent-messages-behavior . ,sent-behavior)
|
||||||
|
(smtpmail-stream-type . starttls)
|
||||||
|
(smtpmail-smtp-server . ,smtp-srv)
|
||||||
|
(smtpmail-smtp-service . 587)
|
||||||
|
(smtpmail-smtp-user . ,addr)
|
||||||
|
(user-mail-address . ,addr)
|
||||||
|
(mu4e-maildir-shortcuts . ,shortcuts)))))
|
||||||
|
|
||||||
(defun nd/mu4e-junk-folder (msg)
|
;; display mu4e in same window
|
||||||
"Hacky function to return junk folder from context.
|
(add-to-list 'display-buffer-alist
|
||||||
|
`(,(regexp-quote mu4e-main-buffer-name)
|
||||||
|
display-buffer-same-window))
|
||||||
|
|
||||||
Must be bound to symbol `nd/mu4e-junk-folder`."
|
(setq mail-user-agent 'mu4e-user-agent
|
||||||
(->> (mu4e-context-determine msg nil)
|
message-kill-buffer-on-exit t
|
||||||
(mu4e-context-vars)
|
|
||||||
(alist-get 'nd/mu4e-junk-folder)))
|
|
||||||
|
|
||||||
(defun nd/mu4e-headers-mark-for-junk ()
|
;; misc
|
||||||
"Function to mark messages as junk."
|
mu4e-change-filenames-when-moving t
|
||||||
(interactive)
|
mu4e-confirm-quit nil
|
||||||
(mu4e-headers-mark-and-next 'junk))
|
mu4e-compose-dont-reply-to-self t
|
||||||
|
mu4e-get-mail-command "mbsync -a && mu-index-emacs-maybe"
|
||||||
|
mu4e-use-fancy-chars t
|
||||||
|
|
||||||
(defun nd/make-mu4e-context (name dir addr smtp-srv smtp-tls sent-behavior)
|
;; sub some fancy chars that don't have valid codes
|
||||||
(-let* ((trash (format "/%s/trash" dir))
|
mu4e-headers-trashed-mark '("T" . "Ω")
|
||||||
(drafts (format "/%s/drafts" dir))
|
mu4e-headers-unread-mark '("U" . "✉")
|
||||||
(sent (format "/%s/sent" dir))
|
mu4e-headers-personal-mark '("P" . "Ρ")
|
||||||
(archive (format "/%s/archive" dir))
|
mu4e-headers-list-mark '("L" . "Λ")
|
||||||
(inbox (format "/%s/inbox" dir))
|
mu4e-headers-attach-mark '("a" . "ɑ")
|
||||||
(junk (format "/%s/junk" dir))
|
mu4e-headers-thread-root-prefix '("* " . "● ")
|
||||||
(shortcuts (--map (list :maildir (car it) :key (cdr it))
|
mu4e-headers-threaded-label '("T" . "Ψ")
|
||||||
`((,trash . ?t)
|
mu4e-headers-related-label '("R" . "↔")
|
||||||
(,drafts . ?d)
|
|
||||||
(,sent . ?s)
|
|
||||||
(,archive . ?a)
|
|
||||||
(,inbox . ?i)
|
|
||||||
(,junk . ?j))))
|
|
||||||
;; either use TLS or no authentication for outgoing
|
|
||||||
((smtp-proto smtp-port) (if smtp-tls
|
|
||||||
'(starttls 587)
|
|
||||||
'(nil 25)))
|
|
||||||
(mf (lambda (d msg)
|
|
||||||
(-some--> msg
|
|
||||||
(mu4e-message-field it :maildir)
|
|
||||||
(string-prefix-p (concat "/" d) it)))))
|
|
||||||
(make-mu4e-context
|
|
||||||
:name name
|
|
||||||
:match-func (-partial mf dir) ; use lexical scope here
|
|
||||||
:vars `((mu4e-trash-folder . ,trash)
|
|
||||||
(mu4e-drafts-folder . ,drafts)
|
|
||||||
(mu4e-sent-folder . ,sent)
|
|
||||||
(mu4e-refile-folder . ,archive)
|
|
||||||
(nd/mu4e-junk-folder . ,junk)
|
|
||||||
(mu4e-sent-messages-behavior . ,sent-behavior)
|
|
||||||
(smtpmail-stream-type . ,smtp-proto)
|
|
||||||
(smtpmail-smtp-server . ,smtp-srv)
|
|
||||||
(smtpmail-smtp-service . ,smtp-port)
|
|
||||||
(smtpmail-smtp-user . ,addr)
|
|
||||||
(user-mail-address . ,addr)
|
|
||||||
(mu4e-maildir-shortcuts . ,shortcuts)))))
|
|
||||||
|
|
||||||
;; display mu4e in same window
|
;; directories
|
||||||
(add-to-list 'display-buffer-alist
|
mu4e-attachment-dir "~/Downloads"
|
||||||
`(,(regexp-quote mu4e-main-buffer-name)
|
|
||||||
display-buffer-same-window))
|
;; headers
|
||||||
|
mu4e-headers-show-target nil
|
||||||
|
mu4e-headers-fields '((:human-date . 11)
|
||||||
|
(:flags . 5)
|
||||||
|
(:from . 22)
|
||||||
|
(:thread-subject))
|
||||||
|
mu4e-headers-date-format "%F"
|
||||||
|
mu4e-headers-time-format "%R"
|
||||||
|
|
||||||
;; special mark for junk (which is different from trash)
|
;; view
|
||||||
;; trash = delete later
|
mu4e-view-show-images t
|
||||||
;; junk = spam, which I don't want to delete so I can train spam filters
|
mu4e-view-show-addresses t
|
||||||
;;
|
mu4e-view-prefer-html t
|
||||||
;; NOTE weird cross symbol picked because it looks like a certain digit
|
|
||||||
(add-to-list
|
|
||||||
'mu4e-marks
|
|
||||||
'(junk :char ("j" . "┻")
|
|
||||||
:prompt "junk"
|
|
||||||
:dyn-target
|
|
||||||
(lambda (target msg) (nd/mu4e-junk-folder msg))
|
|
||||||
:action
|
|
||||||
(lambda
|
|
||||||
(docid msg target)
|
|
||||||
(mu4e--server-move docid
|
|
||||||
(mu4e--mark-check-target target)
|
|
||||||
"-N"))))
|
|
||||||
|
|
||||||
;; buttload of common settings I like
|
;; compose
|
||||||
(setq mail-user-agent 'mu4e-user-agent
|
mu4e-compose-signature-auto-include nil ;; sigs are annoying by default
|
||||||
message-kill-buffer-on-exit t
|
mu4e-compose-signature "Thank you,\nNathan Dwarshuis"
|
||||||
|
|
||||||
;; misc
|
;; aliases
|
||||||
mu4e-change-filenames-when-moving t
|
mail-personal-alias-file (no-littering-expand-etc-file-name
|
||||||
mu4e-confirm-quit nil
|
"mailrc")
|
||||||
mu4e-compose-dont-reply-to-self t
|
|
||||||
mu4e-get-mail-command "mbsync -a && mu-index-emacs-maybe"
|
|
||||||
mu4e-use-fancy-chars t
|
|
||||||
|
|
||||||
;; sub some fancy chars that don't have valid codes
|
;; yanking (aka citing)
|
||||||
mu4e-headers-trashed-mark '("T" . "Ω")
|
message-yank-prefix "" ;; the ">" characters are annoying
|
||||||
mu4e-headers-unread-mark '("U" . "✉")
|
message-yank-cited-prefix ""
|
||||||
mu4e-headers-personal-mark '("P" . "Ρ")
|
message-yank-empty-prefix ""
|
||||||
mu4e-headers-list-mark '("L" . "Λ")
|
|
||||||
mu4e-headers-attach-mark '("a" . "ɑ")
|
|
||||||
mu4e-headers-thread-root-prefix '("* " . "● ")
|
|
||||||
mu4e-headers-threaded-label '("T" . "Ψ")
|
|
||||||
mu4e-headers-related-label '("R" . "↔")
|
|
||||||
|
|
||||||
;; directories
|
;; contexts (multiple inboxes)
|
||||||
mu4e-attachment-dir "~/Downloads"
|
mu4e-context-policy 'pick-first
|
||||||
|
mu4e-compose-context-policy 'ask-if-none
|
||||||
;; headers
|
mu4e-contexts
|
||||||
mu4e-headers-show-target nil
|
(list
|
||||||
mu4e-headers-fields '((:human-date . 11)
|
(nd/make-mu4e-context "personal"
|
||||||
(:flags . 5)
|
"yavin4"
|
||||||
(:from . 22)
|
"ndwar@yavin4.ch"
|
||||||
(:thread-subject))
|
"peart4prez.yavin4.ch"
|
||||||
mu4e-headers-date-format "%F"
|
'sent)
|
||||||
mu4e-headers-time-format "%R"
|
(nd/make-mu4e-context "alpha"
|
||||||
|
"gmail"
|
||||||
|
"natedwarshuis@gmail.com"
|
||||||
|
"smtp.gmail.com"
|
||||||
|
'delete)))
|
||||||
|
|
||||||
|
;; enable visual line mode and spell checking
|
||||||
|
(add-hook 'mu4e-compose-mode-hook 'turn-off-auto-fill)
|
||||||
|
(add-hook 'mu4e-compose-mode-hook 'visual-line-mode)
|
||||||
|
(add-hook 'mu4e-view-mode-hook 'turn-off-auto-fill)
|
||||||
|
(add-hook 'mu4e-view-mode-hook 'visual-line-mode)
|
||||||
|
(add-hook 'mu4e-compose-mode-hook (lambda () (flyspell-mode 1)))
|
||||||
|
|
||||||
|
;; Outlook doesn't know how to fold mu4e messages by default
|
||||||
|
;; This is enabled by using 32 underscores followed by the addressing
|
||||||
|
;; info of the previou message(s).
|
||||||
|
(require 'nnheader) ; necessary for the header macros below
|
||||||
|
|
||||||
;; view
|
(defun nd/message-insert-citation-header ()
|
||||||
mu4e-view-show-images t
|
"Insert the header of the reply message."
|
||||||
mu4e-view-show-addresses t
|
(let* ((h message-reply-headers)
|
||||||
mu4e-view-prefer-html t
|
(sep "________________________________")
|
||||||
|
(from (concat "From: " (mail-header-from h)))
|
||||||
|
(date (concat "Sent: " (mail-header-date h)))
|
||||||
|
(to (concat "To: " user-full-name))
|
||||||
|
(subj (concat "Subject: " (message-strip-subject-re (mail-header-subject h)))))
|
||||||
|
(insert (string-join `("" ,sep ,from ,date ,to ,subj "") "\n"))))
|
||||||
|
|
||||||
|
(setq message-citation-line-function 'nd/message-insert-citation-header)
|
||||||
|
|
||||||
;; compose
|
;; prevent html to text conversion from destroying links
|
||||||
message-signature nil
|
(setq
|
||||||
|
mu4e-compose-pre-hook
|
||||||
|
(lambda ()
|
||||||
|
(let* ((msg mu4e-compose-parent-message)
|
||||||
|
(html (and msg (plist-get msg :body-html)))
|
||||||
|
;; oops, mu4e screwed up
|
||||||
|
(mu4e-html2text-command
|
||||||
|
(nd/if-bin "pandoc"
|
||||||
|
"pandoc -f html -t plain --reference-links"
|
||||||
|
'mu4e-shr2text)))
|
||||||
|
(when (and html mu4e-view-prefer-html (member mu4e-compose-type '(reply forward)))
|
||||||
|
;; hackity hack, since the normal mu4e-message-body-text function
|
||||||
|
;; does not render the desired html, do it here and force the
|
||||||
|
;; aforementioned function to only look at text by removing
|
||||||
|
;; the html
|
||||||
|
(plist-put msg :body-txt (mu4e~html2text-shell msg mu4e-html2text-command))
|
||||||
|
(plist-put msg :body-html nil)))))
|
||||||
|
|
||||||
;; aliases
|
(require 'smtpmail)
|
||||||
mail-personal-alias-file (no-littering-expand-etc-file-name
|
;; (require 'smtpmail-async)
|
||||||
"mailrc")
|
(setq send-mail-function 'smtpmail-send-it
|
||||||
|
smtpmail-debug-info nil
|
||||||
|
auth-source-debug nil
|
||||||
|
message-send-mail-function 'smtpmail-send-it)
|
||||||
|
(setq auth-sources '(password-store))
|
||||||
|
|
||||||
;; yanking (aka citing)
|
(defun nd/mu-init ()
|
||||||
message-yank-prefix "" ;; the ">" characters are annoying
|
"Initialize the mu database"
|
||||||
message-yank-cited-prefix ""
|
(->> mu4e-contexts
|
||||||
message-yank-empty-prefix ""
|
(--map (->> (mu4e-context-vars it)
|
||||||
|
(alist-get 'user-mail-address)
|
||||||
|
(format "--my-address=%s")))
|
||||||
|
(s-join " ")
|
||||||
|
(format "mu init --maildir /mnt/data/Mail %s")
|
||||||
|
(shell-command-to-string)))
|
||||||
|
|
||||||
;; contexts (multiple inboxes)
|
(defun nd/lookup-oauth-secret (type user)
|
||||||
mu4e-context-policy 'pick-first
|
(->> (format "pass email/%s/%s" user type)
|
||||||
mu4e-compose-context-policy 'ask-if-none)
|
(shell-command-to-string)
|
||||||
|
(s-trim)))
|
||||||
|
|
||||||
;; enable visual line mode and spell checking
|
(defun nd/xoauth2-get-secrets (host user port)
|
||||||
(add-hook 'mu4e-compose-mode-hook 'turn-off-auto-fill)
|
(when (and (string= host "smtp.gmail.com")
|
||||||
(add-hook 'mu4e-compose-mode-hook 'visual-line-mode)
|
(string= user "natedwarshuis@gmail.com")
|
||||||
(add-hook 'mu4e-view-mode-hook 'turn-off-auto-fill)
|
(string= port "587"))
|
||||||
(add-hook 'mu4e-view-mode-hook 'visual-line-mode)
|
(list :token-url (nd/lookup-oauth-secret "token_url" user)
|
||||||
(add-hook 'mu4e-compose-mode-hook (lambda () (flyspell-mode 1)))
|
:client-id (nd/lookup-oauth-secret "client_id" user)
|
||||||
|
:client-secret (nd/lookup-oauth-secret "client_secret" user)
|
||||||
|
:refresh-token (nd/lookup-oauth-secret "refresh_token" user))))
|
||||||
|
|
||||||
;; Outlook doesn't know how to fold mu4e messages by default
|
(use-package auth-source-xoauth2
|
||||||
;; This is enabled by using 32 underscores followed by the addressing
|
:straight t
|
||||||
;; info of the previou message(s).
|
:after smtpmail
|
||||||
(require 'nnheader) ; necessary for the header macros below
|
:config
|
||||||
|
(setq auth-source-xoauth2-creds #'nd/xoauth2-get-secrets)
|
||||||
(defun nd/message-insert-citation-header ()
|
(add-to-list 'smtpmail-auth-supported 'xoauth2)
|
||||||
"Insert the header of the reply message."
|
(auth-source-xoauth2-enable)))
|
||||||
(let* ((h message-reply-headers)
|
|
||||||
(sep "________________________________")
|
|
||||||
(from (concat "From: " (mail-header-from h)))
|
|
||||||
(date (concat "Sent: " (mail-header-date h)))
|
|
||||||
(to (concat "To: " user-full-name))
|
|
||||||
(subj (concat "Subject: " (message-strip-subject-re (mail-header-subject h)))))
|
|
||||||
(insert (string-join `("" ,sep ,from ,date ,to ,subj "") "\n"))))
|
|
||||||
|
|
||||||
(setq message-citation-line-function 'nd/message-insert-citation-header)
|
|
||||||
|
|
||||||
;; prevent html to text conversion from destroying links
|
|
||||||
(setq
|
|
||||||
mu4e-compose-pre-hook
|
|
||||||
(lambda ()
|
|
||||||
(let* ((msg mu4e-compose-parent-message)
|
|
||||||
(html (and msg (plist-get msg :body-html)))
|
|
||||||
;; oops, mu4e screwed up
|
|
||||||
(mu4e-html2text-command
|
|
||||||
(nd/if-bin "pandoc"
|
|
||||||
"pandoc -f html -t plain --reference-links"
|
|
||||||
'mu4e-shr2text)))
|
|
||||||
(when (and html mu4e-view-prefer-html (member mu4e-compose-type '(reply forward)))
|
|
||||||
;; hackity hack, since the normal mu4e-message-body-text function
|
|
||||||
;; does not render the desired html, do it here and force the
|
|
||||||
;; aforementioned function to only look at text by removing
|
|
||||||
;; the html
|
|
||||||
(plist-put msg :body-txt (mu4e~html2text-shell msg mu4e-html2text-command))
|
|
||||||
(plist-put msg :body-html nil)))))
|
|
||||||
|
|
||||||
(setq send-mail-function 'smtpmail-send-it
|
|
||||||
smtpmail-debug-info nil
|
|
||||||
auth-source-debug nil
|
|
||||||
message-send-mail-function 'smtpmail-send-it)
|
|
||||||
|
|
||||||
;; load instance-specific accounts
|
|
||||||
(load-file acnts-path))))
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** shell
|
** shell
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
|
@ -4129,10 +4010,7 @@ Since I use vi mode in my terminal emulator, need to preserve the escape key's r
|
||||||
;; the old open attachment function broke in mu 1.6, fix it here
|
;; the old open attachment function broke in mu 1.6, fix it here
|
||||||
(nd/when-bin "mu"
|
(nd/when-bin "mu"
|
||||||
(evil-define-key '(normal) mu4e-view-mode-map
|
(evil-define-key '(normal) mu4e-view-mode-map
|
||||||
"p" #'mu4e-view-mime-part-action)
|
"p" 'mu4e-view-mime-part-action))
|
||||||
|
|
||||||
(evil-define-key '(normal) mu4e-headers-mode-map
|
|
||||||
"." #'nd/mu4e-headers-mark-for-junk))
|
|
||||||
#+end_src
|
#+end_src
|
||||||
** local
|
** local
|
||||||
These are for mode-specific bindings that can/should be outside of the evil maps above (there are not many, and these may be merged with their evil bretheren in the future).
|
These are for mode-specific bindings that can/should be outside of the evil maps above (there are not many, and these may be merged with their evil bretheren in the future).
|
||||||
|
@ -4142,10 +4020,10 @@ These are for mode-specific bindings that can/should be outside of the evil maps
|
||||||
(add-hook 'org-mode-hook
|
(add-hook 'org-mode-hook
|
||||||
(lambda ()
|
(lambda ()
|
||||||
;; use the hyper keys/vim arrows with the shifters instead of shift/arrows
|
;; use the hyper keys/vim arrows with the shifters instead of shift/arrows
|
||||||
(local-set-key (kbd "H-<up>") 'org-shiftup)
|
(local-set-key (kbd "H-k") 'org-shiftup)
|
||||||
(local-set-key (kbd "H-<right>") 'org-shiftright)
|
(local-set-key (kbd "H-l") 'org-shiftright)
|
||||||
(local-set-key (kbd "H-<down>") 'org-shiftdown)
|
(local-set-key (kbd "H-j") 'org-shiftdown)
|
||||||
(local-set-key (kbd "H-<left>") 'org-shiftleft)
|
(local-set-key (kbd "H-h") 'org-shiftleft)
|
||||||
|
|
||||||
;; storing links is important, make a shortcut
|
;; storing links is important, make a shortcut
|
||||||
(local-set-key (kbd "C-c l") 'org-store-link)
|
(local-set-key (kbd "C-c l") 'org-store-link)
|
||||||
|
@ -4349,8 +4227,8 @@ The only thing I like about elpy is the interactive shell
|
||||||
*** pyenv
|
*** pyenv
|
||||||
This key collides with plenty of other stuff, notably scheduling in org mode
|
This key collides with plenty of other stuff, notably scheduling in org mode
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
;;(nd/when-bin "pyenv"
|
(nd/when-bin "pyenv"
|
||||||
;; (define-key pyenv-mode-map (kbd "C-c C-s") nil))
|
(define-key pyenv-mode-map (kbd "C-c C-s") nil))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** counsel
|
*** counsel
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
|
|
BIN
etc/dashlogo.png
BIN
etc/dashlogo.png
Binary file not shown.
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 31 KiB |
|
@ -1 +0,0 @@
|
||||||
mu4e
|
|
|
@ -4399,30 +4399,23 @@ FUTURE-LIMIT in a list."
|
||||||
(either :right it)))))
|
(either :right it)))))
|
||||||
|
|
||||||
;; child id functions
|
;; child id functions
|
||||||
(remove-done
|
|
||||||
(ids)
|
|
||||||
(--remove (member (org-x-dag-id->todo it) org-done-keywords) ids))
|
|
||||||
|
|
||||||
(action-qtp-getter
|
(action-qtp-getter
|
||||||
()
|
()
|
||||||
(->> (org-x-dag->action-ids)
|
(->> (org-x-dag->action-ids)
|
||||||
;; TODO could also remove DONE/CANC and things
|
;; TODO could also remove DONE/CANC and things
|
||||||
;; underneath these
|
;; underneath these
|
||||||
(--remove (org-x-dag-id->ns-key :survivalp it))
|
(--remove (org-x-dag-id->ns-key :survivalp it))
|
||||||
(remove-done)
|
|
||||||
(append (org-x-dag->current-qtp-ids))))
|
(append (org-x-dag->current-qtp-ids))))
|
||||||
(svg-action-getter
|
(svg-action-getter
|
||||||
()
|
()
|
||||||
(->> (org-x-dag->action-ids)
|
(->> (org-x-dag->action-ids)
|
||||||
;; TODO could also remove DONE/CANC and things
|
;; TODO could also remove DONE/CANC and things
|
||||||
;; underneath these
|
;; underneath these
|
||||||
(remove-done)
|
|
||||||
(--remove (and (org-x-dag-id->ns-key :committed it)
|
(--remove (and (org-x-dag-id->ns-key :committed it)
|
||||||
(not (org-x-dag-id->ns-key :survivalp it))))))
|
(not (org-x-dag-id->ns-key :survivalp it))))))
|
||||||
(epg-action-qtp-getter
|
(epg-action-qtp-getter
|
||||||
()
|
()
|
||||||
(->> `(,@(org-x-dag->epg-ids) ,@(action-qtp-getter))
|
`(,@(org-x-dag->epg-ids) ,@(action-qtp-getter)))
|
||||||
(remove-done)))
|
|
||||||
|
|
||||||
;; format functions
|
;; format functions
|
||||||
(dlp-formatter
|
(dlp-formatter
|
||||||
|
@ -4560,27 +4553,16 @@ FUTURE-LIMIT in a list."
|
||||||
(either :right))
|
(either :right))
|
||||||
(parse-hl)))
|
(parse-hl)))
|
||||||
|
|
||||||
(remove-done
|
|
||||||
(ids)
|
|
||||||
(--remove (member (org-x-dag-id->todo it) org-done-keywords) ids))
|
|
||||||
|
|
||||||
;; parent id getters
|
;; parent id getters
|
||||||
(tlg-getter
|
(tlg-getter
|
||||||
()
|
()
|
||||||
(->> (append (org-x-dag->epg-ids) (org-x-dag->ltg-ids))
|
(append (org-x-dag->epg-ids) (org-x-dag->ltg-ids)))
|
||||||
(remove-done)))
|
|
||||||
(goal-getter
|
(goal-getter
|
||||||
()
|
()
|
||||||
(->> (append (org-x-dag->svg-ids) (tlg-getter))
|
(append (org-x-dag->svg-ids) (tlg-getter)))
|
||||||
(remove-done)))
|
|
||||||
(dlp-getter
|
(dlp-getter
|
||||||
()
|
()
|
||||||
(->> (append (org-x-dag->current-wkp-ids) (org-x-dag->action-ids))
|
(append (org-x-dag->current-wkp-ids) (org-x-dag->action-ids)))
|
||||||
(remove-done)))
|
|
||||||
(weekly-getter
|
|
||||||
()
|
|
||||||
(->> (org-x-dag->current-qtp-ids)
|
|
||||||
(remove-done)))
|
|
||||||
|
|
||||||
;; formatters
|
;; formatters
|
||||||
(goal-formatter
|
(goal-formatter
|
||||||
|
@ -4590,7 +4572,7 @@ FUTURE-LIMIT in a list."
|
||||||
(org-x-dag-id->path nil id)))))
|
(org-x-dag-id->path nil id)))))
|
||||||
|
|
||||||
(org-x-dag-sync)
|
(org-x-dag-sync)
|
||||||
(let ((f (f-canonical (buffer-file-name))))
|
(let ((f (buffer-file-name)))
|
||||||
(cond
|
(cond
|
||||||
((equal f (org-x-dag->goal-file :endpoint))
|
((equal f (org-x-dag->goal-file :endpoint))
|
||||||
(org-x-dag--link-child-to-parent
|
(org-x-dag--link-child-to-parent
|
||||||
|
@ -4610,7 +4592,7 @@ FUTURE-LIMIT in a list."
|
||||||
((equal f (org-x-dag->planning-file :weekly))
|
((equal f (org-x-dag->planning-file :weekly))
|
||||||
(org-x-dag--link-child-to-parent
|
(org-x-dag--link-child-to-parent
|
||||||
#'parse-hl
|
#'parse-hl
|
||||||
#'weekly-getter
|
#'org-x-dag->current-qtp-ids
|
||||||
#'org-x-dag-id->title))
|
#'org-x-dag-id->title))
|
||||||
((equal f (org-x-dag->planning-file :daily))
|
((equal f (org-x-dag->planning-file :daily))
|
||||||
(org-x-dag--link-child-to-parent
|
(org-x-dag--link-child-to-parent
|
||||||
|
|
|
@ -1,138 +1,145 @@
|
||||||
(("ESS" . "e4f2afb90d11613c4c2a28720dcda226699b4dfb")
|
(("ESS" . "5c4ae91cefa5c56fd13b204a9a996825af836a67")
|
||||||
("Highlight-Indentation-for-Emacs" . "d88db4248882da2d4316e76ed673b4ac1fa99ce3")
|
("Highlight-Indentation-for-Emacs" . "d88db4248882da2d4316e76ed673b4ac1fa99ce3")
|
||||||
("ace-window" . "77115afc1b0b9f633084cf7479c767988106c196")
|
("ace-window" . "77115afc1b0b9f633084cf7479c767988106c196")
|
||||||
("anaconda-mode" . "79fa9b4d2bda9f69857aeffb30c75276848a2810")
|
("anaconda-mode" . "1fd13a0f20fcc9e841e2d5c9af73c0b23f09cf39")
|
||||||
("annalist.el" . "e1ef5dad75fa502d761f70d9ddf1aeb1c423f41d")
|
("annalist.el" . "134fa3f0fb91a636a1c005c483516d4b64905a6d")
|
||||||
("auctex" . "5b1229745b4d862e07e28fc597d92457688926f2")
|
("auctex" . "f60d3b907618c2cbb527e59e29821465d6750993")
|
||||||
("auth-source-xoauth2" . "5d1adfa649bb5a9df20a2fa89f235a55a64b52e4")
|
("auth-source-xoauth2" . "5d1adfa649bb5a9df20a2fa89f235a55a64b52e4")
|
||||||
("avy" . "be612110cb116a38b8603df367942e2bb3d9bdbe")
|
("avy" . "be612110cb116a38b8603df367942e2bb3d9bdbe")
|
||||||
("bats-mode" . "fa88930b1baba101ae6474f289a239a236a7d19f")
|
|
||||||
("beacon" . "85261a928ae0ec3b41e639f05291ffd6bf7c231c")
|
("beacon" . "85261a928ae0ec3b41e639f05291ffd6bf7c231c")
|
||||||
("biblio.el" . "ee52f6cda82ea6fbc3b400e7b12132595cc0374c")
|
("biblio.el" . "ee52f6cda82ea6fbc3b400e7b12132595cc0374c")
|
||||||
("blacken" . "0719cd6b301806c64ec79be9eebe954941e65277")
|
("blacken" . "1e80b970b130d5c33031f2539c89eb2f13da2572")
|
||||||
("c-eldoc" . "f4ede1f37f6de583376669735326367d84a0a917")
|
("c-eldoc" . "f4ede1f37f6de583376669735326367d84a0a917")
|
||||||
("citeproc-el" . "fed285385c1a8c0248890cd591f64a0e2598334d")
|
("cider" . "5d91ffcc75069efe9c513af285627a4e38685bb1")
|
||||||
("clang-format" . "9f4358fcc8b04018cc1ed46fcc96fc7bfa361a47")
|
("citeproc-el" . "290320fc579f886255f00d7268600df7fa5cc7e8")
|
||||||
("company-anaconda" . "1fe526163c265891cc20d971dc58b661ad8bcf23")
|
("clang-format" . "e48ff8ae18dc7ab6118c1f6752deb48cb1fc83ac")
|
||||||
|
("clojure-mode" . "906d6a47a646d1191eaead6f8e1ae0810aa9b626")
|
||||||
|
("company-anaconda" . "da1566db41a68809ef7f91ebf2de28118067c89b")
|
||||||
("company-auctex" . "9400a2ec7459dde8cbf1a5d50dfee4e300ed7e18")
|
("company-auctex" . "9400a2ec7459dde8cbf1a5d50dfee4e300ed7e18")
|
||||||
("company-c-headers" . "9d384571b1190e99d0a789e5296176d69a3d0771")
|
("company-c-headers" . "9d384571b1190e99d0a789e5296176d69a3d0771")
|
||||||
("company-irony" . "b44711dfce445610c1ffaec4951c6ff3882b216a")
|
("company-irony" . "b44711dfce445610c1ffaec4951c6ff3882b216a")
|
||||||
("company-math" . "3eb006874e309ff4076d947fcbd61bb6806aa508")
|
("company-math" . "3eb006874e309ff4076d947fcbd61bb6806aa508")
|
||||||
("company-mode" . "6c7731d4ec1e43199ea328e1691999b4fe8967a8")
|
("company-mode" . "8a78f320019574bc35b5727f95b052b27918da20")
|
||||||
("compat" . "25da9d232399203a38722aa6638b7fe8ecab3f60")
|
("compat" . "e07c0f29d45a73cc0bdf9423780979978c1d9d22")
|
||||||
("conda.el" . "60e14d1e9793431b91913a5688e278bd91d56224")
|
("conda.el" . "f3ea3876eecd00a1fca16fd7fd68e56e3beac87c")
|
||||||
("csv-mode" . "cdb73a771b0b9fa3cbae66dde5b934be6550a8b1")
|
("csv-mode" . "d190a479b4f36806b604da527e5d5a50909d3ceb")
|
||||||
("dash.el" . "1de9dcb83eacfb162b6d9a118a4770b1281bcd84")
|
("dash.el" . "d5182da04ca54c026ea0bf381f2c1642a30e2686")
|
||||||
("delight" . "b59977bb957a5a79eb8aa0028d8e6e8ed6a7a6e1")
|
("delight" . "70cb8cec9e5eb2c24364e065d85c2ea8f14a587c")
|
||||||
("dhall-mode" . "87ab69fe765d87b3bb1604a306a8c44d6887681d")
|
("dhall-mode" . "87ab69fe765d87b3bb1604a306a8c44d6887681d")
|
||||||
("dired-du" . "0fc6119ddd3144453158ac107a8b107d82652c36")
|
("dired-du" . "e5a2aa64849aae14fd6d1973919ec7e13ed76dd0")
|
||||||
("dired-hacks" . "a01c126c3b1068655509487c76971895f5459d09")
|
("dired-hacks" . "523f51b4152a3bf4e60fe57f512732c698b5c96f")
|
||||||
("dockerfile-mode" . "39a012a27fcf6fb629c447d13b6974baf906714c")
|
("dockerfile-mode" . "52c6c00da1d31c0b6c29c74335b3af63ed6bf06c")
|
||||||
("ebib" . "2f2d39d1953fa10d7c3dad6a4611d8ec0d489aba")
|
("ebib" . "5a03e4662dccbffe63605bb8e88bfb691ebe0afa")
|
||||||
("el-get" . "f220df34333fdb363b84b28f4ed4a5575341bf45")
|
("el-get" . "cd998078949db70b736c0c3ac77ec23d97686f9a")
|
||||||
("elpy" . "777e9909c8f1c11f1cfb8dbf5fe4a66d2ab95e1e")
|
("elpy" . "840713f23af99b83d04034c3703f7e73c3baa7dc")
|
||||||
("emacs-async" . "72b70b004505db2f06318fefd6b358704b9167d7")
|
("emacs-async" . "3ae74c0a4ba223ba373e0cb636c385e08d8838be")
|
||||||
("emacs-buttercup" . "a1a86b027ffe030e1c78a9f43c50cd20a6fed19a")
|
("emacs-buttercup" . "30c703d215b075aaede936a2c424f65b5f7b6391")
|
||||||
("emacs-calfw" . "03abce97620a4a7f7ec5f911e669da9031ab9088")
|
("emacs-calfw" . "03abce97620a4a7f7ec5f911e669da9031ab9088")
|
||||||
("emacs-dashboard" . "3852301f9c6f3104d9cc98389612b5ef3452a7de")
|
("emacs-dashboard" . "34a0076f01a729b4aae16947fa0d0e130cafedfd")
|
||||||
("emacs-format-all-the-code" . "f8feea08fef7ed542b8e676e90445d57ebd2c458")
|
("emacs-format-all-the-code" . "2e02fc6d487c9e7eb482f09b5b2bfbd0f9f11d24")
|
||||||
("emacs-htmlize" . "ed5e5b05fd260e8f161a488d56f10e7f6e01fb75")
|
("emacs-htmlize" . "dd27bc3f26efd728f2b1f01f9e4ac4f61f2ffbf9")
|
||||||
("emacs-language-id" . "435114f208b97e97aa1576ef1966a33d90cad01b")
|
("emacs-language-id" . "06f960f733e5958c4fe0e52db666ce6f6710f508")
|
||||||
("emacs-refactor" . "cac1b52932926f56d7f6d2923732d20bbd20670d")
|
("emacs-refactor" . "cac1b52932926f56d7f6d2923732d20bbd20670d")
|
||||||
("emacs-reformatter" . "0d29a04d69d47599e2cb7f1a8f8e897a2b592921")
|
("emacs-reformatter" . "1cbf7225b0f934a32bec98ca1f78e8dee77aef94")
|
||||||
("emacs-request" . "01e338c335c07e4407239619e57361944a82cb8a")
|
("emacs-web-server" . "22ce66ea43e0eadb9ec1d691a35d9695fc29cee6")
|
||||||
("emacs-web-server" . "3982c55e9061475038a3ccd61aecb2de3d407cec")
|
("emacs-which-key" . "ee6f0637f75ded903653b7a300a8588e3a8427f7")
|
||||||
("emacs-which-key" . "1e89fa000e9ba9549f15ef57abccd118d5f2fe1a")
|
("emacsmirror-mirror" . "3f68f75157c5d2d5eb1843b287ee82f14ef07642")
|
||||||
("emacsmirror-mirror" . "55c75c9ec26d9167a7815f20056f6ce0170f88cf")
|
("epl" . "78ab7a85c08222cd15582a298a364774e3282ce6")
|
||||||
("evil" . "3ba76c1c1f6e8f0389d7bebbd220eefaca796da4")
|
("evil" . "1d37abaa9e9da89c6e9461804595e338b5ef3585")
|
||||||
("evil-ReplaceWithRegister" . "91cc7bf21a94703c441cc9212214075b226b7f67")
|
("evil-ReplaceWithRegister" . "91cc7bf21a94703c441cc9212214075b226b7f67")
|
||||||
("evil-collection" . "acb056b1d0d3aad2f32b1ca9c019a9a2e976f03e")
|
("evil-collection" . "4a7d924dbd851ef1b2ccb85778be6e7a6a81ebd4")
|
||||||
("evil-commentary" . "c5945f28ce47644c828aac1f5f6ec335478d17fb")
|
("evil-commentary" . "c5945f28ce47644c828aac1f5f6ec335478d17fb")
|
||||||
("evil-org-mode" . "b1f309726b1326e1a103742524ec331789f2bf94")
|
("evil-org-mode" . "b1f309726b1326e1a103742524ec331789f2bf94")
|
||||||
("evil-surround" . "da05c60b0621cf33161bb4335153f75ff5c29d91")
|
("evil-surround" . "f273821f575ace519066fb106ee45a5b8577475f")
|
||||||
("f.el" . "1e7020dc0d4c52d3da9bd610d431cab13aa02d8c")
|
("f.el" . "af7d37c619010b576fd22b50c62c71ff33093f3c")
|
||||||
("fill-column-indicator" . "c35f9de072c241699b57bcb46da84bed5af29cfe")
|
("fill-column-indicator" . "c35f9de072c241699b57bcb46da84bed5af29cfe")
|
||||||
("flycheck" . "10430dee428f7bab176743097d996182fac29daa")
|
("flycheck" . "5f2ef177cb21ae8b73714575802beef04abd0f5e")
|
||||||
("flycheck-clang-analyzer" . "646d9f3a80046ab231a07526778695d5decad92d")
|
("flycheck-clang-analyzer" . "646d9f3a80046ab231a07526778695d5decad92d")
|
||||||
("flycheck-haskell" . "b7c4861aa754220b7d0cfc05aa0895bb35665683")
|
("flycheck-haskell" . "50425a8b96fea84ea15940a4a07b184e43bb8e7a")
|
||||||
("flycheck-package" . "75efa098cf17dc14c363e2ca9b68afdac7766b5b")
|
("flycheck-package" . "3a6aaed29ff61418c48c0251e1432c30748ae739")
|
||||||
("flyspell-correct" . "1e7a5a56362dd875dddf848b9a9e25d1395b9d37")
|
("flyspell-correct" . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e")
|
||||||
("gnu-elpa-mirror" . "5338f22d8cee40109a2616007b40b558e53eb0ae")
|
("gnu-elpa-mirror" . "52eecca7b2812cb652d29952f594b450f81988cb")
|
||||||
("goto-chg" . "72f556524b88e9d30dc7fc5b0dc32078c166fda7")
|
("goto-chg" . "278cd3e6d5107693aa2bb33189ca503f22f227d0")
|
||||||
("graphviz-dot-mode" . "8ff793b13707cb511875f56e167ff7f980a31136")
|
("graphviz-dot-mode" . "8ff793b13707cb511875f56e167ff7f980a31136")
|
||||||
("haskell-mode" . "727f72a2a4b8e4fd0a7b62129668baea55a2c3e0")
|
("haskell-mode" . "41c0cf61591279a22ac511f925c041c40969bdb8")
|
||||||
("helm-bibtex" . "8b71b4f5ce62eeaf18067f57faaddc06449fbe1c")
|
("helm-bibtex" . "a7aeb940bd5d3510a7046ee9f2922f5a19bd3b44")
|
||||||
("ht.el" . "1c49aad1c820c86f7ee35bf9fff8429502f60fef")
|
("ht.el" . "3c1677f1bf2ded2ab07edffb7d17def5d2b5b6f6")
|
||||||
("hydra" . "317e1de33086637579a7aeb60f77ed0405bf359b")
|
("hydra" . "317e1de33086637579a7aeb60f77ed0405bf359b")
|
||||||
("iedit" . "27c61866b1b9b8d77629ac702e5f48e67dfe0d3b")
|
("iedit" . "27c61866b1b9b8d77629ac702e5f48e67dfe0d3b")
|
||||||
("impatient-mode" . "a4e4e12852840996b027cb8e9fb2b809c37a0ee3")
|
("impatient-mode" . "a4e4e12852840996b027cb8e9fb2b809c37a0ee3")
|
||||||
("inf-ruby" . "0cfe8b2fb1ab222ed423a8e6f339d398fa32966f")
|
("inf-ruby" . "5a8b87fe6873bc684552cd993e375c382d729753")
|
||||||
("inheritenv" . "bac62ca6324828623cf8ce5a3d6aee0fcb65d620")
|
("inheritenv" . "2102ed2d105a5c9f366cb6503d04794600985598")
|
||||||
("irony-mode" . "40e0ce19eb850bdf1f77225f11713cc816250d95")
|
("irony-mode" . "870d1576fb279bb93f776a71e65f45283c423a9e")
|
||||||
("jinja2-mode" . "03e5430a7efe1d163a16beaf3c82c5fd2c2caee1")
|
("jinja2-mode" . "03e5430a7efe1d163a16beaf3c82c5fd2c2caee1")
|
||||||
("js-comint" . "ef2ccccad5740f3d8b5295f52a35df4f62471480")
|
("js-comint" . "b788bf5d57ad6b902c4096b666c6d78ceff7c116")
|
||||||
("json-mode" . "77125b01c0ddce537085201098bea9b4b8ba6be3")
|
("json-mode" . "eedb4560034f795a7950fa07016bd4347c368873")
|
||||||
("json-snatcher" . "b28d1c0670636da6db508d03872d96ffddbc10f2")
|
("json-snatcher" . "b28d1c0670636da6db508d03872d96ffddbc10f2")
|
||||||
("let-alist" . "6e9f470e78cf50afa0e53a61da191d68d87a0104")
|
("let-alist" . "021fc10df2e44faba4728d849ee767cf890aa51a")
|
||||||
("lispy" . "fe44efd21573868638ca86fc8313241148fabbe3")
|
("lispy" . "fe44efd21573868638ca86fc8313241148fabbe3")
|
||||||
("list-utils" . "f02dcef36330871855346f9eab97eef58d323d9a")
|
("list-utils" . "f02dcef36330871855346f9eab97eef58d323d9a")
|
||||||
("lua-mode" . "d074e4134b1beae9ed4c9b512af741ca0d852ba3")
|
("lua-mode" . "ad639c62e38a110d8d822c4f914af3e20b40ccc4")
|
||||||
("magit" . "b908c79b44f5c282eec44f19fc1d9967f041dd5c")
|
("magit" . "b908c79b44f5c282eec44f19fc1d9967f041dd5c")
|
||||||
("markdown-mode" . "0cdebc833ed9b98baf9f260ed12b1e36b0ca0e89")
|
("map" . "a0e501aede34f183a8baa5d3d41610a3ffa1728e")
|
||||||
|
("markdown-mode" . "f3ee31ffc28b3d8e86da2208c87eac75fd6e6eae")
|
||||||
("math-symbol-lists" . "ac3eb053d3b576fcdd192b0ac6ad5090ea3a7079")
|
("math-symbol-lists" . "ac3eb053d3b576fcdd192b0ac6ad5090ea3a7079")
|
||||||
("melpa" . "1b06cc08de41e82f3f148aa9e35663e2e06427ae")
|
("melpa" . "07aee214c4db85ca2b0ad8b8c55cf99345b84a7a")
|
||||||
("nix-mode" . "719feb7868fb567ecfe5578f6119892c771ac5e5")
|
("nix-mode" . "719feb7868fb567ecfe5578f6119892c771ac5e5")
|
||||||
("no-littering" . "8b07314d2f0594ff22bf798d9a5f5bf44b4dd4cd")
|
("no-littering" . "8b07314d2f0594ff22bf798d9a5f5bf44b4dd4cd")
|
||||||
("nongnu-elpa" . "4456edc151f4147d763d0067a8da5922e6f60d25")
|
("nongnu-elpa" . "4456edc151f4147d763d0067a8da5922e6f60d25")
|
||||||
("org" . "943197829b5610e84c99de69c86c73ab9b760913")
|
("org" . "943197829b5610e84c99de69c86c73ab9b760913")
|
||||||
("org-bullets" . "767f55feb58b840a5a04eabfc3fbbf0d257c4792")
|
("org-bullets" . "767f55feb58b840a5a04eabfc3fbbf0d257c4792")
|
||||||
("org-ml" . "f57336a9126a168ad32ccce017c072474555395a")
|
("org-ml" . "f57336a9126a168ad32ccce017c072474555395a")
|
||||||
("org-ref" . "4029a37e3ba36fb812cdf228e4b21db06ade2b6d")
|
("org-ref" . "26c06912c7833104c7b4c7b96b8f200e98067a68")
|
||||||
("org-sql" . "43376abf46b897a9a862cfcc1c087f4b8688634c")
|
("org-sql" . "43376abf46b897a9a862cfcc1c087f4b8688634c")
|
||||||
("org-super-agenda" . "51c9da5ce7b791150758984bab469d2222516844")
|
("org-super-agenda" . "f4f528985397c833c870967884b013cf91a1da4a")
|
||||||
("origami.el" . "e558710a975e8511b9386edc81cd6bdd0a5bda74")
|
("origami.el" . "e558710a975e8511b9386edc81cd6bdd0a5bda74")
|
||||||
("outline-magic" . "2a5f07417b696cf7541d435c43bafcc64817636b")
|
("outline-magic" . "2a5f07417b696cf7541d435c43bafcc64817636b")
|
||||||
("ox-pandoc" . "399d787b6e2124bd782615338b845c3724a47718")
|
("ox-pandoc" . "66c32cca4f6047dd7e0f77f10bd565a2d83d4729")
|
||||||
("package-lint" . "972dd8403ac8d2d43f298ef89a6b118e49c7355f")
|
("package-lint" . "933cb1ef5938c5f99f8d388027bc0e8518fdada9")
|
||||||
("paredit" . "9a2c4b37fc8c1c7bdbb1f86fdec874c0d0652e64")
|
("paredit" . "9a2c4b37fc8c1c7bdbb1f86fdec874c0d0652e64")
|
||||||
("parsebib" . "ace9df707108b17759c004c7387655277122d4c1")
|
("parsebib" . "ace9df707108b17759c004c7387655277122d4c1")
|
||||||
("password-store" . "b5e965a838bb68c1227caa2cdd874ba496f10149")
|
("parseclj" . "1ce54fa2eb7a5d99d34c07d271e18eaabd0489da")
|
||||||
("pcre2el" . "380723b2701cceb75c266440fb8db918f3340d50")
|
("parseedn" . "a67204eeaa32ca8f11f6aeecc2a88349f196add6")
|
||||||
("pdf-tools" . "30b50544e55b8dbf683c2d932d5c33ac73323a16")
|
("password-store" . "28cec11f1dbe6c4273d30370af45b69c9f408386")
|
||||||
("php-mode" . "c8e4c16ca0d234f4a659713a94467f0c32ef4bc8")
|
("pcre2el" . "b941ed8a96299868171fac625ecffec77de3e986")
|
||||||
("pkgbuild-mode" . "8ef396d8fa9187b65c065a6bc2ca15dfaf3255df")
|
("pdf-tools" . "c69e7656a4678fe25afbd29f3503dd19ee7f9896")
|
||||||
|
("php-mode" . "73d2dedb81cb210d8ba79d60af7918d52cc37bf7")
|
||||||
|
("pkg-info" . "76ba7415480687d05a4353b27fea2ae02b8d9d61")
|
||||||
|
("pkgbuild-mode" . "9525be8ecbd3a0d0bc7cc27e6d0f403e111aa067")
|
||||||
("poly-R" . "8024e852cfca642dea2045a41b2033baa2f1f9a5")
|
("poly-R" . "8024e852cfca642dea2045a41b2033baa2f1f9a5")
|
||||||
("poly-markdown" . "98695eb7ca4ca11dcec71a1cab64903bbf79b4d3")
|
("poly-markdown" . "98695eb7ca4ca11dcec71a1cab64903bbf79b4d3")
|
||||||
("poly-noweb" . "3b0cd36ca9a707e8a09337a3468fa85d81fc461c")
|
("poly-noweb" . "3b0cd36ca9a707e8a09337a3468fa85d81fc461c")
|
||||||
("polymode" . "ca060e081a1f849a880732670dc15370ac987b89")
|
("polymode" . "ca060e081a1f849a880732670dc15370ac987b89")
|
||||||
("popup-el" . "545e258024f6e4a8b2a066a5442d9e0147a7ee03")
|
("popup-el" . "69efb517f3b8ba8ed82dfb4e39b74b325bc98a59")
|
||||||
("powerline" . "c35c35bdf5ce2d992882c1f06f0f078058870d4a")
|
("powerline" . "c35c35bdf5ce2d992882c1f06f0f078058870d4a")
|
||||||
("projectile" . "0163b335a18af0f077a474d4dc6b36e22b5e3274")
|
("projectile" . "31b87151b1fe43221736ded957a1123a54e32531")
|
||||||
("pythonic" . "00f8cafe02bdac0f3e562ffe6881ce654c8eb588")
|
("pyenv-mode" . "b818901b8eac0e260ced66a6a5acabdbf6f5ba99")
|
||||||
|
("pythonic" . "c18a5bd8cb2ba59014b6b29b5bf1903bd2476a07")
|
||||||
("pyvenv" . "31ea715f2164dd611e7fc77b26390ef3ca93509b")
|
("pyvenv" . "31ea715f2164dd611e7fc77b26390ef3ca93509b")
|
||||||
("queue" . "df8a1a2ad77d57c25e7005f0add275c13f9db20f")
|
("queue" . "130c2d656cd5d7376552272fab9e50a7c37d0c4a")
|
||||||
("rainbow-delimiters" . "f40ece58df8b2f0fb6c8576b527755a552a5e763")
|
("rainbow-delimiters" . "a32b39bdfe6c61c322c37226d66e1b6d4f107ed0")
|
||||||
("rainbow-mode" . "0740f31f300982534183a2f60b1918de418a6f2c")
|
("rainbow-mode" . "8e96388fb4d616a9dde23e712bad0d9cd048fbf0")
|
||||||
("robe" . "6bc8a07fc483407971de0966d367a11006b3ab80")
|
("robe" . "912ae2ba1f467bd55b2da64bfec9db3f8a723916")
|
||||||
("ruby-test-mode" . "d66db4aca6e6a246f65f7195ecfbc7581d35fb7a")
|
("ruby-test-mode" . "d66db4aca6e6a246f65f7195ecfbc7581d35fb7a")
|
||||||
("rvm.el" . "e1e83b5466c132c066142ac63729ba833c530c83")
|
("rvm.el" . "e1e83b5466c132c066142ac63729ba833c530c83")
|
||||||
("s.el" . "dda84d38fffdaf0c9b12837b504b402af910d01d")
|
("s.el" . "dda84d38fffdaf0c9b12837b504b402af910d01d")
|
||||||
("seq" . "d6b97ea450817ecef174d9c65d59b69bc5721a35")
|
("sesman" . "e0f555f963c9f02f8e4a50e06fc353eb4c15ee77")
|
||||||
("snakemake-mode" . "4ad41da69e4b95b38a3d3273874c44caab20cc56")
|
("snakemake-mode" . "0c4c5b6a25735ac025ce124ace9f0259eb5198e9")
|
||||||
("spaceline" . "086420d16e526c79b67fc1edec4c2ae1e699f372")
|
("spaceline" . "e0f848cc116d9046a04a09f5728fabf892863b7e")
|
||||||
("spacemacs-theme" . "319ad1cd6aa05dcb43e4edca50eca339892e0865")
|
("spacemacs-theme" . "319ad1cd6aa05dcb43e4edca50eca339892e0865")
|
||||||
("straight.el" . "b3760f5829dba37e855add7323304561eb57a3d4")
|
("spinner" . "634529bb3173e09b37499f636de70abf29d9fa8a")
|
||||||
|
("straight.el" . "039e5c9a9b5c00749602afb41341e9e77ba09429")
|
||||||
("string-inflection" . "50ad54970b3cc79b6b83979bde9889ad9a9e1a9c")
|
("string-inflection" . "50ad54970b3cc79b6b83979bde9889ad9a9e1a9c")
|
||||||
("sudo-edit" . "74eb1e6986461baed9a9269566ff838530b4379b")
|
("sudo-edit" . "74eb1e6986461baed9a9269566ff838530b4379b")
|
||||||
("swiper" . "2a25a6fb5b081cb141c5eccac8ee58ab1feeb747")
|
("swiper" . "d28225e86f8dfb3825809ad287f759f95ee9e479")
|
||||||
("tablist" . "fcd37147121fabdf003a70279cf86fbe08cfac6f")
|
("systemd-mode" . "8742607120fbc440821acbc351fda1e8e68a8806")
|
||||||
("toc-org" . "6d3ae0fc47ce79b1ea06cabe21a3c596395409cd")
|
("tablist" . "5f7b71a92bfb25418d7da86ad9c45f14b149496f")
|
||||||
|
("toc-org" . "bf2e4b358efbd860ecafe6e74776de0885d9d100")
|
||||||
("transient" . "239be53b01e003c5206087d850d9672a42dc4b32")
|
("transient" . "239be53b01e003c5206087d850d9672a42dc4b32")
|
||||||
("ts.el" . "552936017cfdec89f7fc20c254ae6b37c3f22c5b")
|
("ts.el" . "552936017cfdec89f7fc20c254ae6b37c3f22c5b")
|
||||||
("use-package" . "a6e856418d2ebd053b34e0ab2fda328abeba731c")
|
("use-package" . "a6e856418d2ebd053b34e0ab2fda328abeba731c")
|
||||||
("with-editor" . "84ba06ed513e97223630905f4788370e18116f40")
|
("with-editor" . "84ba06ed513e97223630905f4788370e18116f40")
|
||||||
("xterm-color" . "2ad407c651e90fff2ea85d17bf074cee2c022912")
|
("yaml-mode" . "b153150e0e77b4ec462d741cdb16956c6ae270d6")
|
||||||
("yaml-mode" . "7b5ce294fb15c2c8926fa476d7218aa415550a2a")
|
("yasnippet" . "5cbdbf0d2015540c59ed8ee0fcf4788effdf75b6")
|
||||||
("yasnippet" . "eb5ba2664c3a68ae4a53bb38b85418dd131b208f")
|
|
||||||
("zoutline" . "32857c6c4b9b0bcbed14d825a10b91a98d5fed0a"))
|
("zoutline" . "32857c6c4b9b0bcbed14d825a10b91a98d5fed0a"))
|
||||||
:gamma
|
:gamma
|
||||||
|
|
Loading…
Reference in New Issue