From 0a3127d4254bb2ac9a1316cdbafa3981dfb3417a Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Sun, 8 Aug 2021 21:01:40 +0300 Subject: [PATCH] feat(emacs): some restructuring, devdocs, journal header --- .emacs.d/custom.el | 12 ----- .emacs.d/init.el | 41 ++++++++++++++- Emacs.org | 124 ++++++++++++++++++++++++++++++++------------- README.org | 3 +- 4 files changed, 131 insertions(+), 49 deletions(-) diff --git a/.emacs.d/custom.el b/.emacs.d/custom.el index cd74659..f068dc9 100644 --- a/.emacs.d/custom.el +++ b/.emacs.d/custom.el @@ -11,17 +11,6 @@ '(dired-recursive-copies 'always) '(doom-modeline-env-enable-python nil) '(jest-test-options '("--color" "--runInBand" "--forceExit")) - '(js-indent-level 2) - '(notmuch-saved-searches - '((:name "inbox (main)" :query "tag:inbox AND tag:main") - (:name "unread (main)" :query "tag:unread AND tag:main") - (:name "sent (main)" :query "tag:sent AND tag:main") - (:name "all mail (main)" :query "tag:main") - (:name "inbox (progin)" :query "tag:inbox AND tag:progin") - (:name "unread (progin)" :query "tag:unread AND tag:progin") - (:name "sent (progin)" :query "tag:sent AND tag:progin") - (:name "all main (progin)" :query "tag:progin") - (:name "drafts" :query "tag:draft"))) '(notmuch-search-oldest-first nil) '(org-edit-src-content-indentation 0) '(send-mail-function 'smtpmail-send-it) @@ -30,7 +19,6 @@ '(smtpmail-smtp-service 25) '(sp-autoskip-opening-pair t) '(sp-highlight-pair-overlay nil) - '(wakatime-cli-path "/usr/bin/wakatime") '(wakatime-python-bin nil) '(warning-suppress-types '((comp) (:warning) (lsp-mode) (comp)))) (custom-set-faces diff --git a/.emacs.d/init.el b/.emacs.d/init.el index af11148..4a408d4 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -64,6 +64,10 @@ (setq custom-file (concat user-emacs-directory "custom.el")) (load custom-file 'noerror) +(let ((private-file (expand-file-name "private.el" user-emacs-directory))) + (when (file-exists-p private-file) + (load-file private-file))) + (use-package no-littering :straight t) @@ -139,6 +143,7 @@ :config (evil-collection-init '(eww + devdocs proced emms pass @@ -1552,12 +1557,38 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer." "o" 'org-journal-open-current-journal-file "s" 'org-journal-search) +(defun my/set-journal-header () + (org-set-property "Emacs" emacs-version) + (org-set-property "Hostname" system-name) + (when (boundp 'my/location) + (org-set-property "Location" my/location)) + (when (fboundp 'emms-playlist-current-selected-track) + (let ((track (emms-playlist-current-selected-track))) + (when track + (let ((album (cdr (assoc 'info-album track))) + (artist (or (cdr (assoc 'info-albumartist track)) + (cdr (assoc 'info-album track)))) + (title (cdr (assoc 'info-title track))) + (string "")) + (when artist + (setq string (concat string "[" artist "] "))) + (when album + (setq string (concat string album " - "))) + (when title + (setq string (concat string title))) + (when (> (length string) 0) + (org-set-property "EMMS_Track" string))))))) + +(add-hook 'org-journal-after-entry-create-hook + #'my/set-journal-header) + (use-package emacsql-sqlite :defer t :straight (:type built-in)) (use-package org-roam - :straight t + :straight (:host github :repo "org-roam/org-roam" + :files (:defaults "extensions/*.el")) :after org :init (setq org-roam-directory (concat org-directory "/roam")) @@ -3161,6 +3192,14 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer." (advice-add #'Man-update-manpage :before #'my/man-fix-width) +(use-package devdocs + :straight t + :commands (devdocs-install devdocs-lookup) + :init + (my-leader-def + "he" #'devdocs-lookup + "hE" #'devdocs-install)) + (use-package pass :straight t :commands (pass) diff --git a/Emacs.org b/Emacs.org index 68625cf..ecd0c79 100644 --- a/Emacs.org +++ b/Emacs.org @@ -384,6 +384,13 @@ By default, custom writes stuff to =init.el=, which is somewhat annoying. The fo (setq custom-file (concat user-emacs-directory "custom.el")) (load custom-file 'noerror) #+end_src +** Private config +I have some variables which I don't commit to the repo, e.g. my current location. They are stored in =private.el= +#+begin_src emacs-lisp +(let ((private-file (expand-file-name "private.el" user-emacs-directory))) + (when (file-exists-p private-file) + (load-file private-file))) +#+end_src ** No littering By default emacs and its packages create a lot files in =.emacs.d= and in other places. [[https://github.com/emacscollective/no-littering][no-littering]] is a collective effort to redirect all of this to two folders in =user-emacs-directory=. @@ -517,6 +524,7 @@ I don't enable the entire package, just the modes I need. :config (evil-collection-init '(eww + devdocs proced emms pass @@ -2470,7 +2478,7 @@ Log DONE time ((org-agenda-prefix-format " %i %-12:c [%e] "))))))) #+end_src *** Org Journal -[[https://github.com/bastibe/org-journal][org-journal]] is a plugin for maintaining a journal in org mode. I want to have its entries separate from my potential base. +[[https://github.com/bastibe/org-journal][org-journal]] is a plugin for maintaining a journal in org mode. I want to have its entries separate from my knowledge base. #+begin_src emacs-lisp (use-package org-journal @@ -2490,6 +2498,36 @@ Log DONE time "o" 'org-journal-open-current-journal-file "s" 'org-journal-search) #+end_src + +Also, I want to store some information in the journal as properties of the record. So below is a function which does just that. + +As of now, it stores Emacs version, hostname, location and current EMMS track if there is one. +#+begin_src emacs-lisp +(defun my/set-journal-header () + (org-set-property "Emacs" emacs-version) + (org-set-property "Hostname" system-name) + (when (boundp 'my/location) + (org-set-property "Location" my/location)) + (when (fboundp 'emms-playlist-current-selected-track) + (let ((track (emms-playlist-current-selected-track))) + (when track + (let ((album (cdr (assoc 'info-album track))) + (artist (or (cdr (assoc 'info-albumartist track)) + (cdr (assoc 'info-album track)))) + (title (cdr (assoc 'info-title track))) + (string "")) + (when artist + (setq string (concat string "[" artist "] "))) + (when album + (setq string (concat string album " - "))) + (when title + (setq string (concat string title))) + (when (> (length string) 0) + (org-set-property "EMMS_Track" string))))))) + +(add-hook 'org-journal-after-entry-create-hook + #'my/set-journal-header) +#+end_src *** Org Roam [[https://github.com/org-roam/org-roam][org-roam]] is a plain-text knowledge database. @@ -2507,7 +2545,8 @@ References: :straight (:type built-in)) (use-package org-roam - :straight t + :straight (:host github :repo "org-roam/org-roam" + :files (:defaults "extensions/*.el")) :after org :init (setq org-roam-directory (concat org-directory "/roam")) @@ -4719,27 +4758,9 @@ References: "Q" 'google-translate-query-translate-reverse "t" 'google-translate-smooth-translate) #+end_src -*** Discord integration -Integration with Discord. Shows which file is being edited in Emacs. - -In order for this to work in Guix, a service is necessary - [[file:Desktop.org::*Discord rich presence][Discord rich presence]]. -#+begin_src emacs-lisp -(use-package elcord - :straight t - :if (and (or - (string= (system-name) "indigo") - (string= (system-name) "eminence")) - (not my/slow-ssh)) - :config - (elcord-mode) - (add-to-list 'elcord-boring-buffers-regexp-list - (rx bos (+ num) "-" (+ num) "-" (+ num) ".org" eos)) - (add-to-list 'elcord-boring-buffers-regexp-list - (rx bos (= 14 num) "-" (* not-newline) ".org" eos))) -#+end_src -** Utilities -*** tldr, man, info -[[https://tldr.sh/][tldr]] is a collaborative project providing cheatsheets for various console commands. For some reason, the built-in download is broken, so I use my own function. +** Reading documentation +*** tldr +[[https://tldr.sh/][tldr]] is a collaborative project providing cheatsheets for various console commands. For some reason, the built-in in the Emacs package download is broken, so I use my own function. #+begin_src emacs-lisp (use-package tldr @@ -4760,8 +4781,9 @@ In order for this to work in Guix, a service is necessary - [[file:Desktop.org:: (my-leader-def "hT" 'tldr) #+end_src - +*** man & info Of course, Emacs can also display man and info pages. + #+begin_src emacs-lisp (setq Man-width-max 180) (my-leader-def "hM" 'man) @@ -4776,6 +4798,19 @@ Of course, Emacs can also display man and info pages. (advice-add #'Man-update-manpage :before #'my/man-fix-width) #+end_src +*** devdocs.io +Finally, there is also an Emacs plugin for [[https://devdocs.io][devdocs.io]]. + +#+begin_src emacs-lisp +(use-package devdocs + :straight t + :commands (devdocs-install devdocs-lookup) + :init + (my-leader-def + "he" #'devdocs-lookup + "hE" #'devdocs-install)) +#+end_src +** Utilities *** pass I use [[https://www.passwordstore.org/][pass]] as my password manager. Expectedly, there is Emacs frontend for it. @@ -4862,6 +4897,20 @@ The actual service definitions are in the =~/.emacs.d/prodigy.org=, which tangle (kbd "C-k") 'evil-window-up (kbd "C-j") 'evil-window-down)) #+end_src +*** screenshot.el +Tecosaur's plugin to make beautiful code screenshots. + +| Guix dependency | +|-----------------| +| imagemagick | + +#+begin_src emacs-lisp +(use-package screenshot + :straight (:repo "tecosaur/screenshot" :host github :files ("screenshot.el")) + :commands (screenshot) + :init + (my-leader-def "S" 'screenshot)) +#+end_src *** proced proced is an Emacs built-it process viewer, like top. @@ -4917,19 +4966,24 @@ Emacs' built-in calendar. Can even calculate sunrise and sunset times. (setq calendar-longitude 30.308611) #+end_src ** Fun -*** screenshot.el -Tecosaur's plugin to make beautiful code screenshots. - -| Guix dependency | -|-----------------| -| imagemagick | +*** Discord integration +Integration with Discord. Shows which file is being edited in Emacs. +In order for this to work in Guix, a service is necessary - [[file:Desktop.org::*Discord rich presence][Discord rich presence]]. #+begin_src emacs-lisp -(use-package screenshot - :straight (:repo "tecosaur/screenshot" :host github :files ("screenshot.el")) - :commands (screenshot) - :init - (my-leader-def "S" 'screenshot)) +(use-package elcord + :straight t + :if (and (or + (string= (system-name) "indigo") + (string= (system-name) "eminence")) + (not my/slow-ssh)) + :config + (elcord-mode) + (add-to-list 'elcord-boring-buffers-regexp-list + (rx bos (+ num) "-" (+ num) "-" (+ num) ".org" eos)) + (add-to-list 'elcord-boring-buffers-regexp-list + (rx bos (= 14 num) "-" (* not-newline) ".org" eos)) + ) #+end_src *** Snow #+begin_src emacs-lisp diff --git a/README.org b/README.org index 703251f..42c2b03 100644 --- a/README.org +++ b/README.org @@ -86,6 +86,7 @@ Mail/thexcloud/.credentials.gmailieer.json Mail/progin6304/.credentials.gmailieer.json .emacs.d/dired-bookmarks.el .emacs.d/elfeed.org -.emacs.d/prodigy.org +.emacs.d/private.org .emacs.d/prodigy-config.el +.emacs.d/private.el #+end_src