;;; dashboard-config.el --- Dashboard Configuration -*- lexical-binding: t; coding: utf-8; -*- ;; author Craig Jennings ;;; Commentary: ;; Note: ;; Nerd-Icons Cheat Sheet: https://www.nerdfonts.com/cheat-sheet ;;; Code: (eval-when-compile (require 'undead-buffers)) (declare-function cj/make-buffer-undead "undead-buffers" (string)) (autoload 'cj/make-buffer-undead "undead-buffers" nil t) ;; ------------------------ Dashboard Bookmarks Override ----------------------- ;; overrides the bookmark insertion from the dashboard package to provide an ;; option that only shows the bookmark name, avoiding the path. Paths are often ;; too long and the truncation options aren't aesthetically pleasing. Should be ;; accompanied by the setting (setq dashboard-bookmarks-show-path nil) in ;; config. (defvar dashboard-bookmarks-item-format "%s" "Format to use when showing the base of the file name.") (defun dashboard-insert-bookmarks (list-size) "Add the list of LIST-SIZE items of bookmarks." (require 'bookmark) (dashboard-insert-section "Bookmarks:" (dashboard-subseq (bookmark-all-names) list-size) list-size 'bookmarks (dashboard-get-shortcut 'bookmarks) `(lambda (&rest _) (bookmark-jump ,el)) (if-let* ((filename el) (path (bookmark-get-filename el)) (path-shorten (dashboard-shorten-path path 'bookmarks))) (cl-case dashboard-bookmarks-show-path (`align (unless dashboard--bookmarks-cache-item-format (let* ((len-align (dashboard--align-length-by-type 'bookmarks)) (new-fmt (dashboard--generate-align-format dashboard-bookmarks-item-format len-align))) (setq dashboard--bookmarks-cache-item-format new-fmt))) (format dashboard--bookmarks-cache-item-format filename path-shorten)) (`nil filename) (t (format dashboard-bookmarks-item-format filename path-shorten))) el))) ;; ----------------------------- Display Dashboard ----------------------------- ;; convenience function to redisplay dashboard and kill all other windows (defun cj/dashboard-only () "Switch to *dashboard* buffer and kill all other buffers and windows." (interactive) (when (fboundp 'dired-sidebar-hide-sidebar) (dired-sidebar-hide-sidebar)) (if (get-buffer "*dashboard*") (progn (switch-to-buffer "*dashboard*") (cj/kill-all-other-buffers-and-windows)) (when (fboundp 'dashboard-open) (dashboard-open)))) ;; --------------------------------- Dashboard --------------------------------- ;; a useful startup screen for Emacs (use-package dashboard :defer t :hook (emacs-startup . cj/dashboard-only) :bind ("" . cj/dashboard-only) :custom (dashboard-projects-backend 'projectile) (dashboard-item-generators '((projects . dashboard-insert-projects) (bookmarks . dashboard-insert-bookmarks))) (dashboard-items '((projects . 5) (bookmarks . 15))) (dashboard-startupify-list '(dashboard-insert-banner dashboard-insert-banner-title dashboard-insert-newline dashboard-insert-newline dashboard-insert-navigator dashboard-insert-init-info dashboard-insert-newline dashboard-insert-newline dashboard-insert-items dashboard-insert-newline)) :config ;; == general (dashboard-setup-startup-hook) ;; run dashboard post emacs init (cj/make-buffer-undead "*dashboard*") ;; make this buffer unkillable (if (< (length command-line-args) 2) (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*")))) ;; don't display dashboard if opening a file (setq dashboard-display-icons-p t) ;; display icons on both GUI and terminal (setq dashboard-icon-type 'nerd-icons) ;; use `nerd-icons' package (setq dashboard-center-content t) ;; horizontally center dashboard content (setq dashboard-bookmarks-show-path nil) ;; don't show paths in bookmarks (setq dashboard-set-footer nil) ;; don't show footer and quotes ;; == banner (setq dashboard-startup-banner (concat user-emacs-directory "assets/M-x_butterfly.png")) (setq dashboard-banner-logo-title "Emacs: The Editor That Saves Your Soul") ;; == navigation (setq dashboard-set-navigator t) (setq dashboard-navigator-buttons `(((,(nerd-icons-faicon "nf-fa-envelope") "Email" "Mu4e Email Client" (lambda (&rest _) (mu4e))) (,(nerd-icons-faicon "nf-fae-book_open_o") "Ebooks" "Calibre Ebook Reader" (lambda (&rest _) (calibredb))) (,(nerd-icons-mdicon "nf-md-school") "Flashcards" "Org-Drill" (lambda (&rest _) (cj/drill-start))) (,(nerd-icons-faicon "nf-fa-rss_square") "Feeds" "Elfeed Feed Reader" (lambda (&rest _) (cj/elfeed-open))) (,(nerd-icons-faicon "nf-fa-comments") "IRC" "Emacs Relay Chat" (lambda (&rest _) (cj/erc-switch-to-buffer-with-completion))) ;; (,(nerd-icons-faicon "nf-fae-telegram") ;; "Telegram" "Telega Chat Client" ;; (lambda (&rest _) (telega))) (,(nerd-icons-faicon "nf-fa-folder_o") "Files" "Dirvish File Manager" (lambda (&rest _) (dirvish user-home-dir)))))) ;; == content (setq dashboard-show-shortcuts nil) ;; don't show dashboard item abbreviations ) ;; end use-package dashboard (provide 'dashboard-config) ;;; dashboard-config.el ends here.