;;; oni-dashboard.el --- Customization for the dashboard module -*- lexical-binding: t; -*- ;; Copyright (C) 2023 Tom Willemse ;; Author: Tom Willemse ;; Keywords: local ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; ;;; Code: (defun oni-dashboard-insert-random-note (_) "Insert a link to a random note from my Roam database." (dashboard-insert-heading "Today's Note:" "n") (insert "\n ") (dashboard-insert-shortcut 'random-note "n" "Today's Note:") (let ((element (seq-random-elt (org-roam-node-read--completions)))) (widget-create 'link :notify (lambda (&rest _) (find-file (org-roam-node-file (cdr element))) (goto-char (org-roam-node-point (cdr element)))) :button-prefix "" :button-suffix "" (string-trim-right (car element))))) (defun oni-dashboard-insert-random-wiki-page (_) "Insert a link to a random Emacs Wiki page." (dashboard-insert-heading "Today's Wiki page:" "w") (insert "\n ") (dashboard-insert-shortcut 'random-wiki-page "w" "Today's Wiki page:") (let ((text-beginning-marker (point-marker))) (insert "Loading...") (url-retrieve "https://www.emacswiki.org/emacs?action=random" (lambda (&rest _args) (let ((info (prog1 (cons (url-recreate-url url-current-object) (progn (search-forward "") (let ((beginning (point))) (search-forward "") (forward-char -8) (buffer-substring-no-properties beginning (point))))) (kill-buffer)))) (with-current-buffer (marker-buffer text-beginning-marker) (let ((inhibit-read-only t)) (save-excursion (goto-char (marker-position text-beginning-marker)) (delete-char 10) (widget-create 'url-link :format (format "%%[%s%%]" (cdr info)) :button-suffix "" :button-prefix "" (car info))))))) nil t))) (add-to-list 'dashboard-item-generators '(random-wiki-page . oni-dashboard-insert-random-wiki-page)) (add-to-list 'dashboard-items '(random-wiki-page)) (require 'org-roam) (add-to-list 'dashboard-item-generators '(random-note . oni-dashboard-insert-random-note)) (add-to-list 'dashboard-items '(random-note)) (provide 'oni-dashboard) ;;; oni-dashboard.el ends here