How to change your splash screen

Doom’s splash screen is the first thing you see. Do you want to change the banner? Add to the menu? Perhaps make your own radical customizations?

Add/remove sections of the dashboard

The +doom-dashboard-functions variable contains a list of functions to be executed in sequence when populating the dashboard buffer. It can be manipulated to add or remove sections of the dashboard. For example, to remove the menu:

(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-shortmenu)

Or to add your own custom footer:

(add-hook! '+doom-dashboard-functions :append
  (insert "\n" (+doom-dashboard--center +doom-dashboard--width "Powered by Emacs!")))

Customize the ASCII banner

To replace the ASCII banner with an image, see “Use an image banner” below.

To replace it with your own ASCII art, set +doom-dashboard-ascii-banner-fn to a function that inserts your new art line-by-line into the buffer. For example:

(defun my-weebery-is-always-greater ()
  (let* ((banner '("⢸⣿⣿⣿⣿⠃⠄⢀⣴⡾⠃⠄⠄⠄⠄⠄⠈⠺⠟⠛⠛⠛⠛⠻⢿⣿⣿⣿⣿⣶⣤⡀⠄"
                   "⢸⣿⣿⣿⡟⢀⣴⣿⡿⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⣸⣿⣿⣿⣿⣿⣿⣿⣷"
                   "⢸⣿⣿⠟⣴⣿⡿⡟⡼⢹⣷⢲⡶⣖⣾⣶⢄⠄⠄⠄⠄⠄⢀⣼⣿⢿⣿⣿⣿⣿⣿⣿⣿"
                   "⢸⣿⢫⣾⣿⡟⣾⡸⢠⡿⢳⡿⠍⣼⣿⢏⣿⣷⢄⡀⠄⢠⣾⢻⣿⣸⣿⣿⣿⣿⣿⣿⣿"
                   "⡿⣡⣿⣿⡟⡼⡁⠁⣰⠂⡾⠉⢨⣿⠃⣿⡿⠍⣾⣟⢤⣿⢇⣿⢇⣿⣿⢿⣿⣿⣿⣿⣿"
                   "⣱⣿⣿⡟⡐⣰⣧⡷⣿⣴⣧⣤⣼⣯⢸⡿⠁⣰⠟⢀⣼⠏⣲⠏⢸⣿⡟⣿⣿⣿⣿⣿⣿"
                   "⣿⣿⡟⠁⠄⠟⣁⠄⢡⣿⣿⣿⣿⣿⣿⣦⣼⢟⢀⡼⠃⡹⠃⡀⢸⡿⢸⣿⣿⣿⣿⣿⡟"
                   "⣿⣿⠃⠄⢀⣾⠋⠓⢰⣿⣿⣿⣿⣿⣿⠿⣿⣿⣾⣅⢔⣕⡇⡇⡼⢁⣿⣿⣿⣿⣿⣿⢣"
                   "⣿⡟⠄⠄⣾⣇⠷⣢⣿⣿⣿⣿⣿⣿⣿⣭⣀⡈⠙⢿⣿⣿⡇⡧⢁⣾⣿⣿⣿⣿⣿⢏⣾"
                   "⣿⡇⠄⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⢻⠇⠄⠄⢿⣿⡇⢡⣾⣿⣿⣿⣿⣿⣏⣼⣿"
                   "⣿⣷⢰⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⢰⣧⣀⡄⢀⠘⡿⣰⣿⣿⣿⣿⣿⣿⠟⣼⣿⣿"
                   "⢹⣿⢸⣿⣿⠟⠻⢿⣿⣿⣿⣿⣿⣿⣿⣶⣭⣉⣤⣿⢈⣼⣿⣿⣿⣿⣿⣿⠏⣾⣹⣿⣿"
                   "⢸⠇⡜⣿⡟⠄⠄⠄⠈⠙⣿⣿⣿⣿⣿⣿⣿⣿⠟⣱⣻⣿⣿⣿⣿⣿⠟⠁⢳⠃⣿⣿⣿"
                   "⠄⣰⡗⠹⣿⣄⠄⠄⠄⢀⣿⣿⣿⣿⣿⣿⠟⣅⣥⣿⣿⣿⣿⠿⠋⠄⠄⣾⡌⢠⣿⡿⠃"
                   "⠜⠋⢠⣷⢻⣿⣿⣶⣾⣿⣿⣿⣿⠿⣛⣥⣾⣿⠿⠟⠛⠉⠄⠄          "))
         (longest-line (apply #'max (mapcar #'length banner))))
    (put-text-property
     (point)
     (dolist (line banner (point))
       (insert (+doom-dashboard--center
                +doom-dashboard--width
                (concat line (make-string (max 0 (- longest-line (length line))) 32)))
               "\n"))
     'face 'doom-dashboard-banner)))

(setq +doom-dashboard-ascii-banner-fn #'my-weebery-is-always-greater)

Use an image banner

Change fancy-splash-image to the path of the image:

(setq fancy-splash-image (concat doom-private-dir "splash.png"))

:warning: Doom doesn’t preform any image resizing. They must be resized in an image editor outside of Emacs.

Change menu items

The dashboard’s menu is generated from the entries in +doom-dashboard-menu-sections. To quote its documentation:

An alist of menu buttons used by `doom-dashboard-widget-shortmenu’. Each element is a cons cell (LABEL . PLIST). LABEL is a string to display after the icon and before the key string.

PLIST can have the following properties:

 :icon FORM
   Uses the return value of FORM as an icon (can be literal string).
 :key STRING
   The keybind displayed next to the button.
 :when FORM
   If FORM returns nil, don't display this button.
 :face FACE
   Displays the icon and text with FACE (a face symbol).
 :action FORM
   Run FORM when the button is pushed.

For example:

  • To add a button to the top of the menu:

    (add-to-list '+doom-dashboard-menu-sections
                 '("Add journal entry"
                   :icon (all-the-icons-octicon "calendar" :face 'doom-dashboard-menu-title)
                   :when (featurep! :lang org +journal)
                   :face (:inherit (doom-dashboard-menu-title bold))
                   :action org-journal-new-entry))
    
  • To remove a button:

    (assoc-delete-all "Open project" +doom-dashboard-menu-sections)
    
  • To change a button’s icon:

    (plist-put (alist-get "Open private configuration" +doom-dashboard-menu-sections nil nil 'equal)
               :icon (all-the-icons-octicon "book" :face 'doom-dashboard-menu-title))
    

Common issues

  • Careful that you don’t eagerly load org, as this will add seconds to your startup time.
  • The ASCII banner is always displayed in terminal Emacs, where images aren’t supported. You’ll need to replace doom-dashboard-widget-banner in +doom-dashboard-functions to change this behavior, or the ASCII banner.
11 Likes

If you want something like this:

______ _____ ____ ___ ___
`  _  V  _  V  _ \|  V  ´
| | | | | | | | | |     |
| | | | | | | | | | . . |
| |/ / \ \| | |/ /\ |V| |
|   /   \__/ \__/  \| | |
|  /                ' | |
| /     E M A C S     \ |
´´                     ``

Use this symbol (double closing parentheses for convenience):

'("______ _____ ____ ___ ___"
  "`  _  V  _  V  _ \\|  V  ´"
  "| | | | | | | | | |     |"
  "| | | | | | | | | | . . |"
  "| |/ / \\ \\| | |/ /\\ |V| |"
  "|   /   \\__/ \\__/  \\| | |"
  "|  /                ' | |"
  "| /     E M A C S     \\ |"
  "´´                     ``"))

The above ASCII art was adapted slightly from the logos found here

How it looks with emacs in GUI mode (fullscreen 1366x768):

6 Likes

I’ve made a simple SVG DOOM-like splash

Screenshot_20220908_134557

There is a dark, gray and white versions in my dotfiles repo for anyone interested

3 Likes