(use-package ef-themes)
;; Sets up solar for use with circadian
(use-package solar
:ensurenil; built-in package:config
(setq calendar-latitude 38.7; Lisbon, Portugal coordinates
calendar-longitude -9.14))
;; Sets a light theme during the day and a dark theme during the night
(use-package circadian
:after solar
:config
(setq circadian-themes '((:sunrise. ef-day)
(:sunset. ef-night)))
(circadian-setup))
Completion
(use-package vertico
:custom
(vertico-cycle t) ;; Wrap around after reaching the last completion candidate:init
(vertico-mode))
(use-package savehist
:ensurenil;; Built-in package:init
(savehist-mode))
(use-package orderless
:custom
(completion-styles '(orderless basic))
(completion-category-defaults nil)
(completion-category-overrides '((file (styles partial-completion)))))
(use-package marginalia
:after vertico
:init
(marginalia-mode))
(use-package embark
:bind
(("C-.". embark-act) ;; pick some comfortable binding
("C-;". embark-dwim) ;; good alternative: M-.
("C-h B". embark-bindings)) ;; alternative for `describe-bindings':init;; Optionally replace the key help with a completing-read interface
(setq prefix-help-command #'embark-prefix-help-command)
;; Show the Embark target at point via Eldoc. You may adjust the Eldoc;; strategy, if you want to see the documentation from multiple providers.
(add-hook'eldoc-documentation-functions#'embark-eldoc-first-target)
;; (setq eldoc-documentation-strategy #'eldoc-documentation-compose-eagerly):config;; Hide the mode line of the Embark live/completions buffers
(add-to-list'display-buffer-alist
'("\\`\\*Embark Collect \\(Live\\|Completions\\)\\*"nil
(window-parameters (mode-line-format. none)))))
;; Consult users will also want the embark-consult package.
(use-package embark-consult
:hook
(embark-collect-mode . consult-preview-at-point-mode))
;; Example configuration for Consult
(use-package consult
;; Replace bindings. Lazily loaded due by `use-package'.:bind (;; C-c bindings (mode-specific-map)
("C-c M-x". consult-mode-command)
("C-c h". consult-history)
("C-c k". consult-kmacro)
("C-c m". consult-man)
("C-c i". consult-info)
([remap Info-search] . consult-info)
;; C-x bindings (ctl-x-map)
("C-x M-:". consult-complex-command) ;; orig. repeat-complex-command
("C-x b". consult-buffer) ;; orig. switch-to-buffer
("C-x 4 b". consult-buffer-other-window) ;; orig. switch-to-buffer-other-window
("C-x 5 b". consult-buffer-other-frame) ;; orig. switch-to-buffer-other-frame
("C-x r b". consult-bookmark) ;; orig. bookmark-jump
("C-x p b". consult-project-buffer) ;; orig. project-switch-to-buffer;; Custom M-# bindings for fast register access
("M-#". consult-register-load)
("M-'". consult-register-store) ;; orig. abbrev-prefix-mark (unrelated)
("C-M-#". consult-register)
;; Other custom bindings
("M-y". consult-yank-pop) ;; orig. yank-pop;; M-g bindings (goto-map)
("M-g e". consult-compile-error)
("M-g f". consult-flymake) ;; Alternative: consult-flycheck
("M-g g". consult-goto-line) ;; orig. goto-line
("M-g M-g". consult-goto-line) ;; orig. goto-line
("M-g o". consult-outline) ;; Alternative: consult-org-heading
("M-g m". consult-mark)
("M-g k". consult-global-mark)
("M-g i". consult-imenu)
("M-g I". consult-imenu-multi)
;; M-s bindings (search-map)
("M-s d". consult-find)
("M-s D". consult-locate)
("M-s g". consult-grep)
("M-s G". consult-git-grep)
("M-s r". consult-ripgrep)
("M-s l". consult-line)
("M-s L". consult-line-multi)
("M-s k". consult-keep-lines)
("M-s u". consult-focus-lines)
;; Isearch integration
("M-s e". consult-isearch-history)
:map isearch-mode-map
("M-e". consult-isearch-history) ;; orig. isearch-edit-string
("M-s e". consult-isearch-history) ;; orig. isearch-edit-string
("M-s l". consult-line) ;; needed by consult-line to detect isearch
("M-s L". consult-line-multi) ;; needed by consult-line to detect isearch;; Minibuffer history:map minibuffer-local-map
("M-s". consult-history) ;; orig. next-matching-history-element
("M-r". consult-history)) ;; orig. previous-matching-history-element;; Enable automatic preview at point in the *Completions* buffer. This is;; relevant when you use the default completion UI.:hook (completion-list-mode. consult-preview-at-point-mode)
;; The :init configuration is always executed (Not lazy):init;; Optionally configure the register formatting. This improves the register;; preview for `consult-register', `consult-register-load',;; `consult-register-store' and the Emacs built-ins.
(setq register-preview-delay 0.5
register-preview-function #'consult-register-format)
;; Optionally tweak the register preview window.;; This adds thin lines, sorting and hides the mode line of the window.
(advice-add#'register-preview:override#'consult-register-window)
;; Use Consult to select xref locations with preview
(setq xref-show-xrefs-function #'consult-xref
xref-show-definitions-function #'consult-xref)
;; Configure other variables and modes in the :config section,;; after lazily loading the package.:config;; Optionally configure preview. The default value;; is 'any, such that any key triggers the preview.;; (setq consult-preview-key 'any);; (setq consult-preview-key "M-.");; (setq consult-preview-key '("S-<down>" "S-<up>"));; For some commands and buffer sources it is useful to configure the;; :preview-key on a per-command basis using the `consult-customize' macro.
(consult-customize
consult-theme :preview-key '(:debounce0.2 any)
consult-ripgrep consult-git-grep consult-grep
consult-bookmark consult-recent-file consult-xref
consult--source-bookmark consult--source-file-register
consult--source-recent-file consult--source-project-recent-file
;; :preview-key "M-.":preview-key '(:debounce0.4 any))
;; Optionally configure the narrowing key.;; Both < and C-+ work reasonably well.
(setq consult-narrow-key "<") ;; "C-+";; Optionally make narrowing help available in the minibuffer.;; You may want to use `embark-prefix-help-command' or which-key instead.;; (define-key consult-narrow-map (vconcat consult-narrow-key "?") #'consult-narrow-help);; By default `consult-project-function' uses `project-root' from project.el.;; Optionally configure a different project root function.;;;; 1. project.el (the default);; (setq consult-project-function #'consult--default-project--function);;;; 2. vc.el (vc-root-dir);; (setq consult-project-function (lambda (_) (vc-root-dir)));;;; 3. locate-dominating-file;; (setq consult-project-function (lambda (_) (locate-dominating-file "." ".git")));;;; 4. projectile.el (projectile-project-root)
(autoload'projectile-project-root"projectile")
(setq consult-project-function (lambda (_) (projectile-project-root)))
;;;; 5. No project support;; (setq consult-project-function nil)
)
(use-package emacs
:init;; Add prompt indicator to `completing-read-multiple'.;; Alternatively try `consult-completing-read-multiple'.
(defuncrm-indicator (args)
(cons (concat"[CRM] " (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)
;; Enable recursive minibuffers
(setq enable-recursive-minibuffers t))
;; Enable org-babel for the following languages
(org-babel-do-load-languages'org-babel-load-languages
'((emacs-lisp .t)
(python .t)))
;; Enable support for typical unix config files in code blocks
(push '("conf-unix". conf-unix) org-src-lang-modes)
;; Disable asking for confirmation when evaluating code blocks
(setq org-confirm-babel-evaluate nil)
Auto-tangle Emacs configuration file
;; Automatically tangle Emacs.org when saved
(defuncjv/org-babel-tangle-config ()
(when (or (string-equal (buffer-file-name)
(expand-file-name"~/.emacs.d/Emacs.org"))
(string-equal (buffer-file-name)
(expand-file-name"~/.config/emacs/Emacs.org")))
;; Dynamic scoping to the rescue
(let ((org-confirm-babel-evaluate-nil))
(org-babel-tangle))))
(add-hook'org-mode-hook (lambda () (add-hook'after-save-hook#'cjv/org-babel-tangle-config)))
org-roam
(use-package org-roam
:custom
(org-roam-directory (file-truename"~/org/roam"))
:bind (("C-c n l". org-roam-buffer-toggle)
("C-c n f". org-roam-node-find)
("C-c n g". org-roam-graph)
("C-c n i". org-roam-node-insert)
("C-c n c". org-roam-capture)
;; Dailies
("C-c n t". org-roam-dailies-goto-today))
:config;; If you're using a vertical completion framework, you might want a more informative completion interface
(setq org-roam-node-display-template (concat"${title:*} " (propertize"${tags:10}"'face'org-tag)))
(org-roam-db-autosync-mode)
;; If using org-roam-protocol
(require'org-roam-protocol)) ;; TODO investigate further