From 99505117b4568d8c57a2b9fdd3c6c627c9e2b041 Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Sat, 17 Jul 2021 10:50:50 +0300 Subject: [PATCH] feat(emacs): progidy, org-journal, org-roam & stuff --- .config/guix/manifests/emacs.scm | 4 +- .config/yadm/encrypt | 2 + .emacs.d/custom.el | 4 +- .emacs.d/init.el | 133 +++++++++++++--- .local/share/yadm/archive | Bin 7250 -> 7609 bytes Emacs.org | 257 ++++++++++++++++++++++++++----- 6 files changed, 334 insertions(+), 66 deletions(-) diff --git a/.config/guix/manifests/emacs.scm b/.config/guix/manifests/emacs.scm index 275b83e..7a031d8 100644 --- a/.config/guix/manifests/emacs.scm +++ b/.config/guix/manifests/emacs.scm @@ -4,4 +4,6 @@ "ripgrep" "emacs-vterm" "python-isort" - "python-yapf")) + "python-yapf" + "graphviz" + "emacs-emacsql-sqlite3")) diff --git a/.config/yadm/encrypt b/.config/yadm/encrypt index b74546c..b180d67 100644 --- a/.config/yadm/encrypt +++ b/.config/yadm/encrypt @@ -8,3 +8,5 @@ Mail/progin6304/.credentials.gmailieer.json secrets/* .emacs.d/dired-bookmarks.el .emacs.d/elfeed.org +.emacs.d/prodigy.org +.emacs.d/prodigy-config.el diff --git a/.emacs.d/custom.el b/.emacs.d/custom.el index ca5c5bf..44701fc 100644 --- a/.emacs.d/custom.el +++ b/.emacs.d/custom.el @@ -9,7 +9,7 @@ '(aweshell-valid-command-color "#c3e88d") '(css-indent-offset 2) '(custom-safe-themes - '("fce3524887a0994f8b9b047aef9cc4cc017c5a93a5fb1f84d300391fba313743" "5034d4b3ebd327bbdc1bbf925b6bf7e4dfbe4f3f84ee4d21e154143f128c6e04" "aaa4c36ce00e572784d424554dcc9641c82d1155370770e231e10c649b59a074" "c83c095dd01cde64b631fb0fe5980587deec3834dc55144a6e78ff91ebc80b19" "bf387180109d222aee6bb089db48ed38403a1e330c9ec69fe1f52460a8936b66" "e074be1c799b509f52870ee596a5977b519f6d269455b84ed998666cf6fc802a" default)) + '("47db50ff66e35d3a440485357fb6acb767c100e135ccdf459060407f8baea7b2" "246a9596178bb806c5f41e5b571546bb6e0f4bd41a9da0df5dfbca7ec6e2250c" "fce3524887a0994f8b9b047aef9cc4cc017c5a93a5fb1f84d300391fba313743" "5034d4b3ebd327bbdc1bbf925b6bf7e4dfbe4f3f84ee4d21e154143f128c6e04" "aaa4c36ce00e572784d424554dcc9641c82d1155370770e231e10c649b59a074" "c83c095dd01cde64b631fb0fe5980587deec3834dc55144a6e78ff91ebc80b19" "bf387180109d222aee6bb089db48ed38403a1e330c9ec69fe1f52460a8936b66" "e074be1c799b509f52870ee596a5977b519f6d269455b84ed998666cf6fc802a" default)) '(dired-recursive-copies 'always) '(doom-modeline-env-enable-python nil) '(jest-test-options '("--color" "--runInBand" "--forceExit")) @@ -34,7 +34,7 @@ '(sp-highlight-pair-overlay nil) '(wakatime-cli-path "/usr/bin/wakatime") '(wakatime-python-bin nil) - '(warning-suppress-types '((lsp-mode) (comp)))) + '(warning-suppress-types '((comp) (:warning) (lsp-mode) (comp)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. diff --git a/.emacs.d/init.el b/.emacs.d/init.el index c0a7f64..6be97c8 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -159,7 +159,8 @@ helpful compile comint - magit))) + magit + prodigy))) (defun minibuffer-keyboard-quit () "Abort recursive edit. @@ -1309,18 +1310,77 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer." (use-package org-journal :straight t + :after org :config - (setq org-journal-dir "~/Documents/org-mode/journal/") + (setq org-journal-dir (concat org-directory "/journal")) (setq org-journal-file-type 'weekly) (setq org-journal-file-format "%Y-%m-%d.org") + (setq org-journal-date-format "%A, %Y-%m-%d") (setq org-journal-enable-encryption t)) (my-leader-def - :infix "aj" + :infix "oj" "j" 'org-journal-new-entry "o" 'org-journal-open-current-journal-file "s" 'org-journal-search) +(use-package emacsql-sqlite + :defer t + :straight (:type built-in)) + +(use-package org-roam + :straight (:host github :repo "org-roam/org-roam" :branch "v2") + :after org + :init + (setq org-roam-directory (concat org-directory "/roam")) + (setq org-roam-file-extensions '("org")) + (setq org-roam-v2-ack t) + (setq orb-insert-interface 'ivy-bibtex) + :config + (org-roam-setup) + (setq org-roam-capture-templates + '("d" "default" plain (function org-roam--capture-get-point) + "%?" + :file-name "%<%Y%m%d%H%M%S>-${slug}" + :head "#+title: ${title}\n" + :unnarrowed t))) + +(my-leader-def + :infix "or" + "r" 'org-roam-node-insert + "s" 'org-roam-node-find + "g" 'org-roam-graph + "c" 'org-roam-capture + "b" 'org-roam-buffer-toggle) + +(use-package org-ref + :straight (:files (:defaults (:exclude "*helm*"))) + :init + (setq org-ref-completion-library 'org-ref-ivy-cite) + (setq bibtex-dialect 'biblatex) + (setq org-ref-default-bibliography '("~/Documents/org-mode/bibliography.bib")) + (setq reftex-default-bibliography org-ref-default-bibliography) + (setq bibtex-completion-bibliography org-ref-default-bibliography) + :after (org) + :config + (general-define-key + :keymaps 'org-mode-map + "C-c l l" 'org-ref-ivy-insert-cite-link + "C-c l r" 'org-ref-ivy-insert-ref-link + "C-c l h" 'org-ref-cite-hydra/body) + (general-define-key + :keymaps 'bibtex-mode-map + "M-RET" 'org-ref-bibtex-hydra/body) + (add-to-list 'orhc-candidate-formats + '("online" . " |${=key=}| ${title} ${url}"))) + +(use-package org-roam-bibtex + :straight (:host github :repo "org-roam/org-roam-bibtex" :branch "org-roam-v2") + :after (org-roam org-ref) + :disabled + :config + (org-roam-bibtex-mode)) + (use-package org-latex-impatient :straight (:repo "yangsheng6810/org-latex-impatient" :branch "master" @@ -1470,20 +1530,6 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer." org-make-toc-at-point) :straight t) -(use-package org-ref - :straight (:files (:defaults (:exclude "*helm*"))) - :init - (setq org-ref-completion-library 'org-ref-ivy-cite) - (setq bibtex-dialect 'biblatex) - :after (org) - :config - (general-define-key - :keymaps 'org-mode-map - "C-c l l" 'org-ref-ivy-insert-cite-link - "C-c l r" 'org-ref-ivy-insert-ref-link) - (add-to-list 'orhc-candidate-formats - '("online" . " |${=key=}| ${title} ${url}"))) - (defun my/extract-guix-dependencies (&optional category) (let ((dependencies '())) (org-table-map-tables @@ -1801,8 +1847,9 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer." ;; Scale preview for my DPI (setq-default preview-scale-function 1.4) - (assoc-delete-all "--" tex--prettify-symbols-alist) - (assoc-delete-all "---" tex--prettify-symbols-alist) + (when (boundp 'tex--prettify-symbols-alist) + (assoc-delete-all "--" tex--prettify-symbols-alist) + (assoc-delete-all "---" tex--prettify-symbols-alist)) (add-hook 'LaTeX-mode-hook (lambda () @@ -1815,10 +1862,10 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer." ;; Do not run lsp within templated TeX files (add-hook 'LaTeX-mode-hook (lambda () - (unless (string-match "\.hogan\.tex$" (buffer-name)) - (lsp)) - (setq-local lsp-diagnostic-package :none) - (setq-local flycheck-checker 'tex-chktex))) + (unless (string-match "\.hogan\.tex$" (buffer-name)) + (lsp)) + (setq-local lsp-diagnostic-package :none) + (setq-local flycheck-checker 'tex-chktex))) (add-hook 'LaTeX-mode-hook #'rainbow-delimiters-mode) (add-hook 'LaTeX-mode-hook #'smartparens-mode) @@ -2607,6 +2654,44 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer." :init (my-leader-def "ao" 'docker)) +(setq my/selected-docker-directory nil) + +(defun my/docker-override-dir (fun &rest args) + (let ((default-directory (or my/selected-docker-directory default-directory))) + (setq my/selected-docker-directory nil) + (apply fun args))) + +(with-eval-after-load 'docker + (advice-add #'docker-compose-run-docker-compose-async :around #'my/docker-override-dir) + (advice-add #'docker-compose-run-docker-compose :around #'my/docker-override-dir) + (advice-add #'docker-run-docker-async :around #'my/docker-override-dir) + (advice-add #'docker-run-docker :around #'my/docker-override-dir)) + +(defun my/docker-from-dir () + (interactive) + (when (not (boundp 'my/docker-directories)) + (load (concat user-emacs-directory "prodigy-config"))) + (let* ((directories + (mapcar + (lambda (el) (cons (format "%-30s %s" (car el) (cdr el)) (cdr el))) + my/docker-directories)) + (selected-directory + (cdr (assoc (completing-read "Docker: " directories nil nil "^") + directories)))) + (setq my/selected-docker-directory selected-directory) + (docker))) + +(my-leader-def "aO" 'my/docker-from-dir) + +(use-package prodigy + :straight t + :commands (prodigy) + :init + (my-leader-def "ap" 'prodigy) + :config + (when (not (boundp 'my/docker-directories)) + (load (concat user-emacs-directory "prodigy-config")))) + (use-package google-translate :straight t :functions (my-google-translate-at-point google-translate--search-tkk) @@ -2638,7 +2723,7 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer." :straight t :commands (pomidor) :init - (my-leader-def "ap" #'pomidor) + (my-leader-def "aP" #'pomidor) :config (setq pomidor-sound-tick nil) (setq pomidor-sound-tack nil) diff --git a/.local/share/yadm/archive b/.local/share/yadm/archive index 0e6a9f37dd7dfaf11097df108d2764c138af9623..73ee6c5d32e68734579232e49d7909b6f1bc7e61 100644 GIT binary patch literal 7609 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 gfR8!1mEE@J-${slug}" + :head "#+title: ${title}\n" + :unnarrowed t))) + +(my-leader-def + :infix "or" + "r" 'org-roam-node-insert + "s" 'org-roam-node-find + "g" 'org-roam-graph + "c" 'org-roam-capture + "b" 'org-roam-buffer-toggle) +#+end_src +*** org-ref +| Type | Description | +|------+---------------------------------| +| TODO | Figure out how not to load Helm | + +[[https://github.com/jkitchin/org-ref][org-ref]] is a package which provides support for various citations & reference in Org mode. + +Useful to use BibTeX citations in LaTeX export. + +As of now, this package loads Helm on start. To avoid this, I have to exclude Helm from the =Package-requires= in the [[file:.emacs.d/straight/repos/org-ref/org-ref.el][org-ref.el]] file. I haven't found a way to do this without modifying the package source yet. +#+begin_src emacs-lisp +(use-package org-ref + :straight (:files (:defaults (:exclude "*helm*"))) + :init + (setq org-ref-completion-library 'org-ref-ivy-cite) + (setq bibtex-dialect 'biblatex) + (setq org-ref-default-bibliography '("~/Documents/org-mode/bibliography.bib")) + (setq reftex-default-bibliography org-ref-default-bibliography) + (setq bibtex-completion-bibliography org-ref-default-bibliography) + :after (org) + :config + (general-define-key + :keymaps 'org-mode-map + "C-c l l" 'org-ref-ivy-insert-cite-link + "C-c l r" 'org-ref-ivy-insert-ref-link + "C-c l h" 'org-ref-cite-hydra/body) + (general-define-key + :keymaps 'bibtex-mode-map + "M-RET" 'org-ref-bibtex-hydra/body) + (add-to-list 'orhc-candidate-formats + '("online" . " |${=key=}| ${title} ${url}"))) +#+end_src + +*** org-roam-bibtex +Integration with bibtex and org-ref. + +There are some problems with org roam v2, so I disabled it as of now. I will probably use another way of managing bibliography notes anyway. + +#+begin_src emacs-lisp +(use-package org-roam-bibtex + :straight (:host github :repo "org-roam/org-roam-bibtex" :branch "org-roam-v2") + :after (org-roam org-ref) + :disabled + :config + (org-roam-bibtex-mode)) +#+end_src +*** autocommit +A script to autocommit files in my org directory. + +- If there are changed files and no files were changed over the last 60 minutes, commit. +- If there is an unpushed commit, push +- If either of these happened, make a notification + +#+begin_src bash :tangle ~/Documents/org-mode/commit.sh +TIMEOUT_MIN=60 + +export DISPLAY=:0 +cd $HOME/Documents/org-mode + +TIMESTAMP=$(date +%s) +LAST_COMMIT_TIMESTAMP=$(git log -1 --format="%at" | xargs -I{} date -d @{} +%s) +RECENTLY_CHANGED_NUM=$(find . -not -path '*/\.*' -mmin -$TIMEOUT_MIN | wc -l) +CHANGED_NUM=$(git diff-index --name-only HEAD -- | wc -l) +COMMITED="No" +PUSHED="No" + +if [[ ($RECENTLY_CHANGED_NUM -eq 0 || $1 = "-F") && $CHANGED_NUM -gt 0 ]]; then + read -r -d '' MESSAGE << EOM +Autocommit $(date -Iminutes) + +Hostname: $(hostname) +EOM + git add * + git commit -m "$MESSAGE" + COMMITED="Yes" +fi + +if [ $(git log origin/master..HEAD | wc -l) -gt 0 ]; then + git push && PUSHED="Yes" || PUSHED="No" +fi + +if [[ $PUSHED = "Yes" || $COMMITED = "Yes" ]]; then + read -r -d '' NOTIFICATION << EOM +Commited: $COMMITED +Pushed: $PUSHED +EOM + notify-send "Org mode sync" "$NOTIFICATION" +fi +#+end_src + +Cron job: +#+begin_src scheme :tangle ~/.config/cron/org-mode.guile +(job "0 * * * *" "~/Documents/org-mode/commit.sh") +#+end_src ** UI *** OFF (OFF) Instant equations preview Instant math previews for org mode. @@ -2413,31 +2559,6 @@ References: org-make-toc-at-point) :straight t) #+end_src -** org-ref -| Type | Description | -|------+---------------------------------| -| TODO | Figure out how not to load Helm | - -[[https://github.com/jkitchin/org-ref][org-ref]] is a package which provides support for various citations & reference in Org mode. - -Useful to use BibTeX citations in LaTeX export. - -As of now, this package loads Helm on start. To avoid this, I have to exclude Helm from the =Package-requires= in the [[file:.emacs.d/straight/repos/org-ref/org-ref.el][org-ref.el]] file. I haven't found a way to do this without modifying the package source yet. -#+begin_src emacs-lisp -(use-package org-ref - :straight (:files (:defaults (:exclude "*helm*"))) - :init - (setq org-ref-completion-library 'org-ref-ivy-cite) - (setq bibtex-dialect 'biblatex) - :after (org) - :config - (general-define-key - :keymaps 'org-mode-map - "C-c l l" 'org-ref-ivy-insert-cite-link - "C-c l r" 'org-ref-ivy-insert-ref-link) - (add-to-list 'orhc-candidate-formats - '("online" . " |${=key=}| ${title} ${url}"))) -#+end_src ** System configuration Functions used across my literate config files. @@ -3019,8 +3140,9 @@ References: ;; Scale preview for my DPI (setq-default preview-scale-function 1.4) - (assoc-delete-all "--" tex--prettify-symbols-alist) - (assoc-delete-all "---" tex--prettify-symbols-alist) + (when (boundp 'tex--prettify-symbols-alist) + (assoc-delete-all "--" tex--prettify-symbols-alist) + (assoc-delete-all "---" tex--prettify-symbols-alist)) (add-hook 'LaTeX-mode-hook (lambda () @@ -3033,10 +3155,10 @@ References: ;; Do not run lsp within templated TeX files (add-hook 'LaTeX-mode-hook (lambda () - (unless (string-match "\.hogan\.tex$" (buffer-name)) - (lsp)) - (setq-local lsp-diagnostic-package :none) - (setq-local flycheck-checker 'tex-chktex))) + (unless (string-match "\.hogan\.tex$" (buffer-name)) + (lsp)) + (setq-local lsp-diagnostic-package :none) + (setq-local flycheck-checker 'tex-chktex))) (add-hook 'LaTeX-mode-hook #'rainbow-delimiters-mode) (add-hook 'LaTeX-mode-hook #'smartparens-mode) @@ -3930,6 +4052,8 @@ ZNC support. Seems to provide a few nice features for ZNC. ** Docker A package to manage docker containers from Emacs. +The file =progidy-config.el= sets variable =my/docker-directories=, which allows to + #+begin_src emacs-lisp (use-package docker :straight t @@ -3937,6 +4061,61 @@ A package to manage docker containers from Emacs. :init (my-leader-def "ao" 'docker)) #+end_src + +By default, docker commands are ran in =default-directory=. Even worse, transient doesn't allow to set =default-directory= temporarily, via =let=. But often I don't want to change =default-directory= of a buffer (e.g. via Dired) to run a command from there. + +So I decided to implement a following advice: +#+begin_src emacs-lisp +(setq my/selected-docker-directory nil) + +(defun my/docker-override-dir (fun &rest args) + (let ((default-directory (or my/selected-docker-directory default-directory))) + (setq my/selected-docker-directory nil) + (apply fun args))) +#+end_src + +It overrides =default-directory= for the first launch of a function. Now, add the advice to the required functions from =docker.el=: +#+begin_src emacs-lisp +(with-eval-after-load 'docker + (advice-add #'docker-compose-run-docker-compose-async :around #'my/docker-override-dir) + (advice-add #'docker-compose-run-docker-compose :around #'my/docker-override-dir) + (advice-add #'docker-run-docker-async :around #'my/docker-override-dir) + (advice-add #'docker-run-docker :around #'my/docker-override-dir)) +#+end_src + +And here is a function which prompts user for the directory. File =progidy-config.el= sets an alist of possible directories, look the section about [[*Progidy][progidy]]. +#+begin_src emacs-lisp +(defun my/docker-from-dir () + (interactive) + (when (not (boundp 'my/docker-directories)) + (load (concat user-emacs-directory "prodigy-config"))) + (let* ((directories + (mapcar + (lambda (el) (cons (format "%-30s %s" (car el) (cdr el)) (cdr el))) + my/docker-directories)) + (selected-directory + (cdr (assoc (completing-read "Docker: " directories nil nil "^") + directories)))) + (setq my/selected-docker-directory selected-directory) + (docker))) + +(my-leader-def "aO" 'my/docker-from-dir) +#+end_src +** Progidy +[[https://github.com/rejeep/prodigy.el][prodigy.el]] is a package to run various services. I've previously used tmuxp + tmux, but want to try this as well. + +The actual service definitions are in the =~/.emacs.d/prodigy.org=, which tangles to =prodigy-config.el=. Both files are encrypted in yadm, as they contain personal data. + +#+begin_src emacs-lisp +(use-package prodigy + :straight t + :commands (prodigy) + :init + (my-leader-def "ap" 'prodigy) + :config + (when (not (boundp 'my/docker-directories)) + (load (concat user-emacs-directory "prodigy-config")))) +#+end_src ** Google Translate Emacs interface to Google Translate. @@ -3982,7 +4161,7 @@ A simple pomodoro technique timer. :straight t :commands (pomidor) :init - (my-leader-def "ap" #'pomidor) + (my-leader-def "aP" #'pomidor) :config (setq pomidor-sound-tick nil) (setq pomidor-sound-tack nil)