         pos-tip-background-color "#ffffff"))
 
 ;; Completions (core framework)
-(use-package selectrum
+(use-package vertico
+  :straight (vertico
+             :host github :repo "minad/vertico"
+             :files (:defaults "extensions/*.el"))
+  :config
+  (setq vertico-count 10)
+  (define-key vertico-map (kbd "M-q") 'vertico-multiform-vertical)
+  (define-key vertico-map (kbd "M-g") 'vertico-multiform-grid)
+  (define-key vertico-map (kbd "<S-backspace>") 'vertico-directory-up)
+
+  (defun crm-indicator (args)
+    (cons (format "[CRM%s] %s"
+                  (replace-regexp-in-string
+                   "\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" ""
+                   crm-separator)
+                  (car args))
+          (cdr args)))
+  (advice-add #'completing-read-multiple :filter-args #'crm-indicator)
+
+  ;; Do not allow the cursor in the minibuffer prompt
+  (setq minibuffer-prompt-properties
+        '(read-only t cursor-intangible t face minibuffer-prompt))
+  (add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)
+
+  (setq enable-recursive-minibuffers t)
+
+  (vertico-multiform-mode)
+  (setq vertico-multiform-commands
+        '((consult-ripgrep buffer indexed)
+          (consult-xref buffer indexed)
+          (meain/pick-emoji reverse)
+          (t flat)))
+  (setq vertico-multiform-categories
+        '((file grid)
+          (consult-grep buffer)))
+  (vertico-mode))
+(use-package savehist
+  :init
+  (savehist-mode))
+(use-package orderless
+  :straight t
+  :custom
+  (completion-styles '(orderless basic))
+  (completion-category-overrides '((file (styles basic partial-completion)))))
+(use-package marginalia
   :straight t
   :defer 1
-  :bind
-  (:map selectrum-minibuffer-map ("<S-backspace>" . selectrum-backward-kill-sexp))
-  :config
-  (setq selectrum-should-sort t)
-  (setq read-file-name-completion-ignore-case t)
-  (setq read-buffer-completion-ignore-case t)
-  (setq completion-ignore-case t)
-  (setq selectrum-display-style '(horizontal))
-  (selectrum-mode +1))
-;; Better sorting of completion candidates
-(use-package selectrum-prescient
-  :straight t
-  :after selectrum
-  :defer 1
-  :config
-  (setq prescient-filter-method '(literal prefix regexp))
-  (setq prescient-sort-full-matches-first t)
-  (selectrum-prescient-mode +1)
-  (prescient-persist-mode +1))
-;; Extra info for completion candidates
-(use-package marginalia
-  :straight t
-  :defer 1
-  :after selectrum
   :bind (:map minibuffer-local-map ("C-b" . marginalia-cycle))
   :config (marginalia-mode))
 
 ;; Consult without consultation fees
 (use-package consult
   :straight t
-  :after (selectrum xref)
+  :after (xref)
   :defer 1
   :config
-  (setq xref-show-xrefs-function (lambda (&rest args)
-                                   (let ((selectrum-display-style '(vertical)))
-                                     (apply #'consult-xref args))))
-  (setq xref-show-definitions-function (lambda (&rest args)
-                                         (let ((selectrum-display-style '(vertical)))
-                                           (apply #'consult-xref args))))
+  (setq xref-show-xrefs-function #'consult-xref args)
+  (setq xref-show-definitions-function #'consult-xref args)
   (evil-set-command-property 'consult-imenu :jump t))
 
 ;; Embark stuff

Pass in `LISTITEMS to decide if you wanna create a new item or search for existing items."
    (interactive "P")
    (if (not createnew)
        (let ((selectrum-should-sort nil))
          (find-file
           (concat
            directory "/"

(defun meain/pick-emoji ()
  "Pick emoji using completions."
  (interactive)
  (let* ((filename (concat (getenv "HOME") "/.config/datafiles/emojis.txt"))
         (emojis (with-temp-buffer (insert-file-contents filename) (buffer-string))))
    (meain/copy-to-clipboard (car
                              (split-string
