             (lambda ()
               (when (and (eq major-mode mode)
                          (memq major-mode +pretty-code-enabled-modes))
-                (let (results)
-                  (while plist
-                    (let ((prop (pop plist))
-                          (sym  (pop plist)))
-                      (when-let* ((icon (plist-get +pretty-code-symbols prop)))
-                        (push (cons sym (prettify-utils-string icon))
-                              results))))
-                  (setq prettify-symbols-alist results))
-                (prettify-symbols-mode -1)
+                (unless (cadr (plist-member plist :merge))
+                  (setq prettify-symbols-alist nil))
+                (if-let ((alist (plist-get plist :alist)))
+                    (setq prettify-symbols-alist (append alist prettify-symbols-alist))
+                  (let ((plist plist)
+                        results)
+                    (while plist
+                      (let ((prop (car plist))
+                            (sym (cadr plist)))
+                        (when-let* ((icon (plist-get +pretty-code-symbols prop)))
+                          (push (cons sym (prettify-utils-string icon))
+                                results))
+                        (setq plist (cddr plist))))
+                    (setq prettify-symbols-alist (append results prettify-symbols-alist))))
+                (when (or (cadr (plist-member plist :iosevka))
+                          +pretty-code-iosevka-ligatures-enabled-by-default)
+                  (+pretty-code-setup-iosevka-ligatures))
+                (when prettify-symbols-mode
+                  (prettify-symbols-mode -1))
                 (prettify-symbols-mode +1))))
       (add-hook (intern (format "%s-hook" mode)) fn))))

    :pipe          "")
  "Options plist for `pretty-code-get-pairs'.")

;; When you get to the right edge, it goes back to how it normally prints
;;;###autoload
(defvar prettify-symbols-unprettify-at-point 'right-edge)

;;;###autodef
(defun set-pretty-symbols! (modes &rest plist)
  "Associates string patterns with icons in certain major-modes.

  MODES is a major mode symbol or a list of them.
  PLIST is a property list whose keys must match keys in `+pretty-code-symbols',
and whose values are strings representing the text to be replaced with that
symbol.

For example, the rule for emacs-lisp-mode is very simple:


;;; ui/pretty-code/autoload.el -*- lexical-binding: t; -*-

;; When you get to the right edge, it goes back to how it normally prints
(defvar prettify-symbols-unprettify-at-point 'right-edge)

;;;###autoload
(defvar +pretty-code-iosevka-ligatures-enabled-by-default nil
  "If non-nil, iosevka ligeratures are enabled by default in modes
`set-pretty-symbols!' has been used on.

This requires the iosevka font!

Use the :iosevka property to enable (or disable) it regardless.")

;;;###autoload
(defvar +pretty-code-enabled-modes
