From c8ba987151e70c01f4821b7a79da5f0bd1c88c35 Mon Sep 17 00:00:00 2001 From: Zofia Date: Tue, 24 Jan 2023 08:13:45 +0000 Subject: [PATCH 1/6] invidious url change invidio.xamh.de => watch.thekitty.zone --- Emacs.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Emacs.org b/Emacs.org index 537b915..037a0f1 100644 --- a/Emacs.org +++ b/Emacs.org @@ -7373,7 +7373,7 @@ The package doesn't provide evil bindings, so I define my own. :straight t :commands (ytel) :config - (setq ytel-invidious-api-url "https://invidio.xamh.de/") + (setq ytel-invidious-api-url "https://watch.thekitty.zone/") (general-define-key :states '(normal) :keymaps 'ytel-mode-map From c1532698cdb86c982a17e50b784af20b3205fbe9 Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Tue, 24 Jan 2023 23:33:42 +0300 Subject: [PATCH 2/6] feat(emacs): ytel fixes, disabled wallabag --- .emacs.d/init.el | 84 ++++++++++++++++++++++++++++++++--- Emacs.org | 113 ++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 184 insertions(+), 13 deletions(-) diff --git a/.emacs.d/init.el b/.emacs.d/init.el index 727dae1..a0abb52 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -1575,8 +1575,8 @@ Returns ( . ) or nil." (defun my/copilot-tab () (interactive) - (or (copilot-accept-completion) - (when (my/should-run-emmet-p) (my/emmet-or-tab)) + (or (when (my/should-run-emmet-p) (my/emmet-or-tab)) + (copilot-accept-completion) (when (and (eq evil-state 'normal) (or hs-minor-mode outline-minor-mode)) (evil-toggle-fold) @@ -1735,7 +1735,8 @@ Returns ( . ) or nil." (when (string-match-p (rx ".vue" eos) (buffer-name)) (setq-local web-mode-script-padding 0) (setq-local web-mode-style-padding 0) - (setq-local create-lockfiles nil))) + (setq-local create-lockfiles nil) + (setq-local web-mode-enable-auto-pairing nil))) (add-hook 'web-mode-hook 'my/web-mode-vue-setup) (add-hook 'editorconfig-after-apply-functions 'my/web-mode-vue-setup) @@ -2320,9 +2321,10 @@ Returns ( . ) or nil." :keymaps 'python-mode-map "rr" (lambda () (interactive) - (unless (and (fboundp #'org-src-edit-buffer-p) (org-src-edit-buffer-p)) - (py-isort-buffer)) - (python-black-buffer))) + (save-excursion + (unless (and (fboundp #'org-src-edit-buffer-p) (org-src-edit-buffer-p)) + (py-isort-buffer)) + (python-black-buffer)))) (use-package sphinx-doc :straight t @@ -5226,6 +5228,75 @@ ENTRY is an instance of `elfeed-entry'." (interactive) (emms-add-ytel (ytel-get-current-video))) +(setq my/invidious-instances-url + "https://api.invidious.io/instances.json?pretty=1&sort_by=health") + +(defun my/ytel-instances-fetch-json () + "Fetch list of invidious instances as json, sorted by health." + (let + ((url-request-method "GET") + (url-request-extra-headers + '(("Accept" . "application/json")))) + (with-current-buffer + (url-retrieve-synchronously invidious-instances-url) + (goto-char (point-min)) + (re-search-forward "^$") + (let* ((json-object-type 'alist) + (json-array-type 'list) + (json-key-type 'string)) + (json-read))))) + +(defun my/ytel-instances-alist-from-json () + "Make the json of invidious instances into an alist." + (let ((jsonlist (my/ytel-instances-fetch-json)) + (inst ())) + (while jsonlist + (push (concat "https://" (caar jsonlist)) inst) + (setq jsonlist (cdr jsonlist))) + (nreverse inst))) + +(defun my/ytel-choose-instance () + "Prompt user to choose an invidious instance to use." + (interactive) + (setq ytel-invidious-api-url + (or (condition-case nil + (completing-read "Using instance: " + (cl-subseq (my/ytel-instances-alist-from-json) 0 11) nil "confirm" "https://") + (error nil)) + "https://invidious.synopyta.org"))) + +(defun my/ytel-draw--buffer-nil-videos-fix () + (let ((inhibit-read-only t) + (current-line (line-number-at-pos))) + (erase-buffer) + (setf header-line-format + (concat "Search results for " + (propertize ytel-search-term 'face 'ytel-video-published-face) + ", page " + (number-to-string ytel-current-page))) + (seq-do + (lambda (v) + (ytel--insert-video v) + (insert "\n")) + (seq-filter + (lambda (v) + (ytel-video-title v)) + ytel-videos)) + (goto-char (point-min)))) + +(with-eval-after-load 'ytel + (advice-add #'ytel--draw-buffer :override #'my/ytel-draw--buffer-nil-videos-fix)) + +(defun my/ytel--format-unknown-fix (fun &rest args) + (if (car args) + (apply fun args) + "unknown ")) + +(with-eval-after-load 'ytel + (advice-add #'ytel--format-video-length :around #'my/ytel--format-unknown-fix) + (advice-add #'ytel--format-video-published :around #'my/ytel--format-unknown-fix) + (advice-add #'ytel--format-video-views :around #'my/ytel--format-unknown-fix)) + (defun my/ytel-kill-url () (interactive) (kill-new @@ -5235,6 +5306,7 @@ ENTRY is an instance of `elfeed-entry'." (use-package wallabag :straight (:host github :repo "chenyanming/wallabag.el" :files (:defaults "default.css" "emojis.alist")) + :disabled :commands (wallabag wallabag-add-entry) :config (setq wallabag-host "https://wallabag.sqrtminusone.xyz") diff --git a/Emacs.org b/Emacs.org index 037a0f1..ac2b0a3 100644 --- a/Emacs.org +++ b/Emacs.org @@ -5591,7 +5591,9 @@ emacs -Q --batch -l run-tangle.el I have added this line to yadm's =post_alt= hook, so tangle is run after =yadm alt= * Applications ** Dired -Dired is a built-in file manager. I currently use it as my primary file manager. +Dired is a built-in file manager. It's so good that it's strange that, to my knowledge, no one tried to replicate it outside of Emacs. + +I currently use it as my primary file manager. *** Basic config & keybindings My config mostly follows ranger's and vifm's keybindings which I'm used to. @@ -5889,6 +5891,7 @@ My terminal emulator of choice. References: - [[https://github.com/akermu/emacs-libvterm][emacs-libvterm repo]] + **** Configuration I use the package from the Guix repository to avoid building libvterm. @@ -5949,6 +5952,8 @@ I use the package from the Guix repository to avoid building libvterm. **** Subterminal Open a terminal in the lower third of the frame with the =`= key. +I guess that's the first Emacs function I wrote! + #+begin_src emacs-lisp (add-to-list 'display-buffer-alist `(,"vterm-subterminal.*" @@ -5980,7 +5985,7 @@ Open a terminal in the lower third of the frame with the =`= key. (general-nmap "~" 'vterm)) #+end_src **** Dired integration -A function to get pwd for vterm. Couldn't find a built-in function for some reason, but this seems to be working fine: +A function to get pwd for vterm. Couldn't find a built-in function for some reason, but this seems work fine: #+begin_src emacs-lisp (defun my/vterm-get-pwd () @@ -6027,7 +6032,7 @@ That is, with the help of [[file:Console.org::Functions][this function]], I can :config (add-hook 'vterm-mode-hook 'with-editor-export-editor)) #+end_src -*** Eshell +*** eshell A shell written in Emacs lisp. I don't use it as of now, but keep the config just in case. #+begin_src emacs-lisp @@ -6093,7 +6098,7 @@ A shell written in Emacs lisp. I don't use it as of now, but keep the config jus (general-nmap "`" 'aweshell-dedicated-toggle) (general-nmap "~" 'eshell)) #+end_src -*** Shell +*** shell Interactive subshell (=M-x shell=) is a way to run commands with input and output through an Emacs buffer. #+begin_src emacs-lisp @@ -6382,7 +6387,7 @@ Now, a function to add a YouTube link with metadata from elfeed to EMMS. |-----------------| | rdrview | -It seems like the tool [[https://repology.org/project/rdrview/versions][isn't available]] in a whole lot of package repositories, but it's pretty easy to compile. I've put together a [[https://github.com/SqrtMinusOne/channel-q/blob/master/rdrview.scm][Guix definition]], which /one day/ I'll submit to upstream. +It seems like the tool [[https://repology.org/project/rdrview/versions][isn't available]] in a whole lot of package repositories, but it's pretty easy to compile. I've put together a [[https://github.com/SqrtMinusOne/channel-q/blob/master/rdrview.scm][Guix definition]], which /one day/ I'll submit to the upstream. **** Integrating rdrview with Emacs Let's start by integrating =rdrview= with Emacs. In the general case, we want to fetch both metadata and the actual content from the page. @@ -7367,13 +7372,14 @@ The list will be in reverse order." *** ytel [[https://github.com/gRastello/ytel][ytel]] is a YouTube (actually Invidious) frontend, which lets one search YouTube (whereas the setup with elfeed just lets one view the pre-defined subscriptions). +**** Package config The package doesn't provide evil bindings, so I define my own. #+begin_src emacs-lisp (use-package ytel :straight t :commands (ytel) :config - (setq ytel-invidious-api-url "https://watch.thekitty.zone/") + (setq ytel-invidious-api-url "https://invidio.xamh.de/") (general-define-key :states '(normal) :keymaps 'ytel-mode-map @@ -7384,6 +7390,7 @@ The package doesn't provide evil bindings, so I define my own. "RET" #'my/ytel-add-emms)) #+end_src +**** EMMS integration And here is the same kind of integration with EMMS as in the elfeed setup: #+begin_src emacs-lisp (with-eval-after-load 'emms @@ -7400,6 +7407,94 @@ And here is the same kind of integration with EMMS as in the elfeed setup: (emms-add-ytel (ytel-get-current-video))) #+end_src +**** Choosing instances +Invidious instances aren't particularly reliable, but there plenty of them, and there's an API at =invidious.io= that returns the available instances and their health, so we can use that. + +Inspired by [[https://github.com/grastello/ytel/issues/17#issuecomment-801745429][this comment]]. +#+begin_src emacs-lisp +(setq my/invidious-instances-url + "https://api.invidious.io/instances.json?pretty=1&sort_by=health") +#+end_src + +#+begin_src emacs-lisp +(defun my/ytel-instances-fetch-json () + "Fetch list of invidious instances as json, sorted by health." + (let + ((url-request-method "GET") + (url-request-extra-headers + '(("Accept" . "application/json")))) + (with-current-buffer + (url-retrieve-synchronously invidious-instances-url) + (goto-char (point-min)) + (re-search-forward "^$") + (let* ((json-object-type 'alist) + (json-array-type 'list) + (json-key-type 'string)) + (json-read))))) + +(defun my/ytel-instances-alist-from-json () + "Make the json of invidious instances into an alist." + (let ((jsonlist (my/ytel-instances-fetch-json)) + (inst ())) + (while jsonlist + (push (concat "https://" (caar jsonlist)) inst) + (setq jsonlist (cdr jsonlist))) + (nreverse inst))) + +(defun my/ytel-choose-instance () + "Prompt user to choose an invidious instance to use." + (interactive) + (setq ytel-invidious-api-url + (or (condition-case nil + (completing-read "Using instance: " + (cl-subseq (my/ytel-instances-alist-from-json) 0 11) nil "confirm" "https://") + (error nil)) + "https://invidious.synopyta.org"))) +#+end_src + +**** Some fixes +At some point in the last 2 years, Invidious started to return videos with =null= fields. I have no idea what causes that, but I suspect it's related to YouTube Music. + +=ytel= hasn't been updated in these two years, so it doesn't account for that change. + +So, let's skip videos with null titles. +#+begin_src emacs-lisp +(defun my/ytel-draw--buffer-nil-videos-fix () + (let ((inhibit-read-only t) + (current-line (line-number-at-pos))) + (erase-buffer) + (setf header-line-format + (concat "Search results for " + (propertize ytel-search-term 'face 'ytel-video-published-face) + ", page " + (number-to-string ytel-current-page))) + (seq-do + (lambda (v) + (ytel--insert-video v) + (insert "\n")) + (seq-filter + (lambda (v) + (ytel-video-title v)) + ytel-videos)) + (goto-char (point-min)))) + +(with-eval-after-load 'ytel + (advice-add #'ytel--draw-buffer :override #'my/ytel-draw--buffer-nil-videos-fix)) +#+end_src + +And render other potentially =null= fields as "unknown". +#+begin_src emacs-lisp +(defun my/ytel--format-unknown-fix (fun &rest args) + (if (car args) + (apply fun args) + "unknown ")) + +(with-eval-after-load 'ytel + (advice-add #'ytel--format-video-length :around #'my/ytel--format-unknown-fix) + (advice-add #'ytel--format-video-published :around #'my/ytel--format-unknown-fix) + (advice-add #'ytel--format-video-views :around #'my/ytel--format-unknown-fix)) +#+end_src +**** Some functions Also, a function to copy a URL to the video under cursor. #+begin_src emacs-lisp (defun my/ytel-kill-url () @@ -7409,12 +7504,16 @@ Also, a function to copy a URL to the video under cursor. "https://www.youtube.com/watch?v=" (ytel-video-id (ytel-get-current-video))))) #+end_src -*** wallabag + +*** OFF wallabag [[https://github.com/wallabag/wallabag][Wallabag]] is a self-hosted read-it-later project. I'm not yet sold on integrating it in my workflow, but let's keep it here for now. +Edit <2023-01-24 Tue>: well, that didn't work out. Running Tiny Tiny RSS & syncing it with elfeed seems to cover most of my read-it-later use cases. + #+begin_src emacs-lisp (use-package wallabag :straight (:host github :repo "chenyanming/wallabag.el" :files (:defaults "default.css" "emojis.alist")) + :disabled :commands (wallabag wallabag-add-entry) :config (setq wallabag-host "https://wallabag.sqrtminusone.xyz") From 2136be197ff9a9235cca896d8aa13423dd75b049 Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Wed, 25 Jan 2023 17:30:47 +0300 Subject: [PATCH 3/6] feat(console): add jless --- .config/guix/manifests/console.scm | 1 + Console.org | 1 + 2 files changed, 2 insertions(+) diff --git a/.config/guix/manifests/console.scm b/.config/guix/manifests/console.scm index 537f8f8..92a994d 100644 --- a/.config/guix/manifests/console.scm +++ b/.config/guix/manifests/console.scm @@ -1,5 +1,6 @@ (specifications->manifest '( + "jless" "direnv" "glibc-locales" "git-lfs" diff --git a/Console.org b/Console.org index ee57228..78f524f 100644 --- a/Console.org +++ b/Console.org @@ -823,6 +823,7 @@ key_bindings: | git-lfs | | | glibc-locales | | | direnv | | +| jless | JSON viewer | ** ripgrep config Occasionally I can't exclude certain files from ripgrep via the VCS settings, so here is a simple config to ignore certain files globally. From 1b6951cf398a9ac04f5a8839d5a9fb2d7ad5d8d1 Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Fri, 27 Jan 2023 13:48:45 +0300 Subject: [PATCH 4/6] fix(emacs): clone org entries with shift-n >= 1 --- .emacs.d/init.el | 6 +++--- Emacs.org | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.emacs.d/init.el b/.emacs.d/init.el index a0abb52..b8da6ad 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -1575,8 +1575,8 @@ Returns ( . ) or nil." (defun my/copilot-tab () (interactive) - (or (when (my/should-run-emmet-p) (my/emmet-or-tab)) - (copilot-accept-completion) + (or (copilot-accept-completion) + (when (my/should-run-emmet-p) (my/emmet-or-tab)) (when (and (eq evil-state 'normal) (or hs-minor-mode outline-minor-mode)) (evil-toggle-fold) @@ -3173,7 +3173,7 @@ skip exactly those headlines that do not match." (org-timestamp-change (* n shift-n) shift-what)) (save-excursion (goto-char (point-min)) - (evil-numbers/inc-at-pt (* n shift-n) (point-min))) + (evil-numbers/inc-at-pt n (point-min))) (unless (= n n-no-remove) (goto-char (point-min)) (while (re-search-forward org-ts-regexp nil t) diff --git a/Emacs.org b/Emacs.org index ac2b0a3..b252ec5 100644 --- a/Emacs.org +++ b/Emacs.org @@ -2381,8 +2381,8 @@ A general-purpose package to run formatters on files. While the most popular for #+begin_src emacs-lisp (defun my/copilot-tab () (interactive) - (or (when (my/should-run-emmet-p) (my/emmet-or-tab)) - (copilot-accept-completion) + (or (copilot-accept-completion) + (when (my/should-run-emmet-p) (my/emmet-or-tab)) (when (and (eq evil-state 'normal) (or hs-minor-mode outline-minor-mode)) (evil-toggle-fold) @@ -4433,7 +4433,7 @@ Unfortunately, I see no way to advise the original function, so here's my versio (org-timestamp-change (* n shift-n) shift-what)) (save-excursion (goto-char (point-min)) - (evil-numbers/inc-at-pt (* n shift-n) (point-min))) + (evil-numbers/inc-at-pt n (point-min))) (unless (= n n-no-remove) (goto-char (point-min)) (while (re-search-forward org-ts-regexp nil t) From be08c8b2b6f5dd021567d65a390746d6abbe5b33 Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Fri, 27 Jan 2023 13:49:28 +0300 Subject: [PATCH 5/6] chore: archive --- .local/share/yadm/archive | Bin 17007 -> 17056 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.local/share/yadm/archive b/.local/share/yadm/archive index 029ffd2d9c900ac5f1c2636287e967c87b1ed301..36f849e08a16f5c6fb66bd2339f7fb5665d9090c 100644 GIT binary patch literal 17056 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 Sly6LY6x@NRfIfmqCZXF@^5Lie From 8516c33edccf7e60942344459f5842d9a6885b10 Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Fri, 27 Jan 2023 13:52:21 +0300 Subject: [PATCH 6/6] feat: add contacts.org to agenda --- .emacs.d/init.el | 1 + Emacs.org | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.emacs.d/init.el b/.emacs.d/init.el index b8da6ad..e3235f4 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -2973,6 +2973,7 @@ Returns ( . ) or nil." (setq org-agenda-files `("inbox.org" "misc/habit.org" + "contacts.org" ,@project-files)) (setq org-refile-targets `(,@(mapcar diff --git a/Emacs.org b/Emacs.org index b252ec5..23ba897 100644 --- a/Emacs.org +++ b/Emacs.org @@ -4173,6 +4173,7 @@ Also, my project structure is somewhat chaotic, so I have an =.el= file in the o (setq org-agenda-files `("inbox.org" "misc/habit.org" + "contacts.org" ,@project-files)) (setq org-refile-targets `(,@(mapcar @@ -5066,7 +5067,7 @@ A template looks like this: (org-roam-capture- :node (org-roam-node-create) :templates `(,my/org-review-capture-template))) #+end_src -*** org-contacts +*** Contacts =org-contacts= is a package to store contacts in an org file. It seems the package has been somewhat revived in the recent months. It used things like =lexical-let= when I first found it.