(dotfiles
(list "emacs/.config/emacs/conf/conf-language.el")))))
+(define emacs-minibuffer-service
+ (service home-program-service-type
+ (home-program-configuration
+ (packages
+ (list emacs-orderless
+ emacs-vertico))
+ (dotfiles
+ (list "emacs/.config/emacs/conf/conf-minibuffer.el")))))
+
(define emacs-package-service
(service home-program-service-type
(home-program-configuration
emacs-email-service
emacs-keys-service
emacs-language-service
+ emacs-minibuffer-service
emacs-package-service
emacs-pass-service
emacs-service))
--- /dev/null
+;; Copyright (c) 2022 Jakub Czajka <jakub@ekhem.eu.org>
+;; License: GPL-3.0 or later.
+;;
+;; conf-minibuffer.el - configuration for the minibuffer.
+
+(require 'conf-package)
+
+;; Use y-or-n instead of yes-or-no.
+(fset 'yes-or-no-p 'y-or-n-p)
+
+(use-package minibuffer
+ ;; Allow to enter a minibuffer while in a minibuffer.
+ :custom
+ (enable-recursive-minibuffers t)
+ :custom-face
+ (minibuffer-prompt ((t :foreground "#fed065"))))
+
+(use-package orderless
+ :ensure t
+ :custom
+ ;; Interpret all input patterns as regular expressions by default.
+ (orderless-matching-styles '(orderless-regexp))
+ ;; Dispatchers for literal and without-literal matching styles.
+ (orderless-style-dispatchers '(with-literal-string without-literal-string))
+ ;; `basic' completion style as fallback.
+ (completion-styles '(orderless basic))
+ (completion-category-defaults nil)
+ ;; `partial-completion' completion style for file name completion.
+ (completion-category-overrides '((file (styles partial-completion))))
+ :config
+ (defun with-literal-string (pattern _index _total)
+ "Orderless dispatcher for literal matching style."
+ (when (string-suffix-p "=" pattern)
+ `(orderless-literal . ,(substring pattern 0 -1))))
+
+ (defun without-literal-string (pattern _index _total)
+ "Orderless dispatcher for without-literal matching style."
+ (when (string-suffix-p "!" pattern)
+ `(orderless-without-literal . ,(substring pattern 0 -1)))))
+
+(use-package vertico
+ :ensure t
+ :init
+ ;; Enable on startup.
+ ;; `vertico-mode' is an autoload.
+ (vertico-mode)
+ :custom
+ ;; Grow or shrink the minibuffer when possible.
+ (vertico-resize t)
+ ;; Hide the count of completion candidates
+ (vertico-count-format '())
+ ;; Make the completion list cyclical.
+ (vertico-cycle t))
+
+(use-package vertico-reverse
+ :init
+ ;; Enable on startup.
+ ;; `vertico-reverse-mode' is an autoload.
+ (vertico-reverse-mode))
+
+(provide 'conf-minibuffer)