These are the starting point of Emacs config. They control the starting up of Emacs and the look of Emacs (overall). Let's see if this works properly.
257 lines
8.4 KiB
EmacsLisp
257 lines
8.4 KiB
EmacsLisp
;;; Everything related to the look of Emacs
|
|
|
|
;;; The Ef (εὖ) themes
|
|
|
|
;; The themes are customisable. Read the manual:
|
|
;; <https://protesilaos.com/emacs/ef-themes>.
|
|
(use-package ef-themes
|
|
:ensure t
|
|
:demand t
|
|
:bind
|
|
(("<f5>" . ef-themes-rotate)
|
|
("C-<f5>" . ef-themes-select))
|
|
:config
|
|
(setq ef-themes-to-toggle '(ef-elea-light ef-elea-dark)
|
|
ef-themes-variable-pitch-ui t
|
|
ef-themes-mixed-fonts t
|
|
ef-themes-headings ; read the manual's entry of the doc string
|
|
'((0 . (variable-pitch light 1.9))
|
|
(1 . (variable-pitch light 1.8))
|
|
(2 . (variable-pitch regular 1.7))
|
|
(3 . (variable-pitch regular 1.6))
|
|
(4 . (variable-pitch regular 1.5))
|
|
(5 . (variable-pitch 1.4)) ; absence of weight means `bold'
|
|
(6 . (variable-pitch 1.3))
|
|
(7 . (variable-pitch 1.2))
|
|
(agenda-date . (semilight 1.5))
|
|
(agenda-structure . (variable-pitch light 1.9))
|
|
(t . (variable-pitch 1.1))))
|
|
|
|
(ef-themes-select 'ef-elea-light))
|
|
|
|
;;;; Lin
|
|
;; Read the lin manual: <https://protesilaos.com/emacs/lin>.
|
|
(use-package lin
|
|
:ensure t
|
|
:hook (after-init . lin-global-mode) ; applies to all `lin-mode-hooks'
|
|
:config
|
|
(setopt lin-face 'lin-cyan))
|
|
|
|
;;;; Increase padding of windows/frames
|
|
;; <https://protesilaos.com/codelog/2023-06-03-emacs-spacious-padding/>.
|
|
(use-package spacious-padding
|
|
:ensure t
|
|
:if (display-graphic-p)
|
|
:hook (after-init . spacious-padding-mode)
|
|
:init
|
|
;; These are the defaults, but I keep it here for visiibility.
|
|
(setq spacious-padding-widths
|
|
'(:internal-border-width 30
|
|
:header-line-width 4
|
|
:mode-line-width 6
|
|
:tab-width 4
|
|
:right-divider-width 30
|
|
:scroll-bar-width 8
|
|
:left-fringe-width 20
|
|
:right-fringe-width 20))
|
|
|
|
;; Read the doc string of `spacious-padding-subtle-mode-line' as
|
|
;; it is very flexible.
|
|
(setq spacious-padding-subtle-mode-line t))
|
|
|
|
;;; Cursor appearance (cursory)
|
|
;; Read the manual: <https://protesilaos.com/emacs/cursory>.
|
|
(use-package cursory
|
|
:ensure t
|
|
:demand t
|
|
:if (display-graphic-p)
|
|
:config
|
|
(setq cursory-presets
|
|
'((box
|
|
:blink-cursor-interval 1.2)
|
|
(box-no-blink
|
|
:blink-cursor-mode -1)
|
|
(bar
|
|
:cursor-type (bar . 2)
|
|
:blink-cursor-interval 0.8)
|
|
(bar-no-other-window
|
|
:inherit bar
|
|
:cursor-in-non-selected-windows nil)
|
|
(bar-no-blink
|
|
:cursor-type (bar . 2)
|
|
:blink-cursor-mode -1)
|
|
(underscore
|
|
:cursor-type (hbar . 3)
|
|
:blink-cursor-interval 0.3
|
|
:blink-cursor-blinks 50)
|
|
(underscore-no-other-window
|
|
:inherit underscore
|
|
:cursor-in-non-selected-windows nil)
|
|
(underscore-thick
|
|
:cursor-type (hbar . 8)
|
|
:blink-cursor-interval 0.3
|
|
:blink-cursor-blinks 50
|
|
:cursor-in-non-selected-windows (hbar . 3))
|
|
(underscore-thick-no-blink
|
|
:blink-cursor-mode -1
|
|
:cursor-type (hbar . 8)
|
|
:cursor-in-non-selected-windows (hbar . 3))
|
|
(t ; the default values
|
|
:cursor-type box
|
|
:cursor-in-non-selected-windows hollow
|
|
:blink-cursor-mode 1
|
|
:blink-cursor-blinks 10
|
|
:blink-cursor-interval 0.2
|
|
:blink-cursor-delay 0.2)))
|
|
|
|
;; I am using the default values of `cursory-latest-state-file'.
|
|
|
|
;; Set last preset or fall back to desired style from `cursory-presets'.
|
|
(cursory-set-preset (or (cursory-restore-latest-preset) 'box))
|
|
|
|
(cursory-mode 1))
|
|
|
|
;;;; Theme buffet
|
|
;; <https://git.sr.ht/~bboal/theme-buffet>
|
|
(use-package theme-buffet
|
|
:ensure t
|
|
:after (:any modus-themes ef-themes)
|
|
:defer 1
|
|
:config
|
|
(let ((modus-themes-p (featurep 'modus-themes))
|
|
(ef-themes-p (featurep 'ef-themes)))
|
|
(setq theme-buffet-menu 'end-user)
|
|
(setq theme-buffet-time-offset 5)
|
|
(setq theme-buffet-end-user
|
|
'(:night (ef-dark ef-winter ef-autumn ef-night ef-duo-dark ef-symbiosis ef-owl)
|
|
:morning (ef-light ef-cyprus ef-spring ef-frost ef-duo-light ef-eagle)
|
|
:afternoon (ef-arbutus ef-day ef-kassio ef-summer ef-elea-light ef-maris-light ef-melissa-light ef-trio-light ef-reverie)
|
|
:evening (ef-rosa ef-elea-dark ef-maris-dark ef-melissa-dark ef-trio-dark ef-dream)))
|
|
|
|
(when (or modus-themes-p ef-themes-p)
|
|
(theme-buffet-timer-hours 2))))
|
|
|
|
;;;; Fontaine (font configurations)
|
|
;; Read the manual: <https://protesilaos.com/emacs/fontaine>
|
|
(use-package fontaine
|
|
:ensure t
|
|
:if (display-graphic-p)
|
|
:hook
|
|
;; Persist the latest font preset when closing/starting Emacs and
|
|
;; while switching between themes.
|
|
((after-init . fontaine-mode)
|
|
(after-init . (lambda ()
|
|
;; Set last preset or fall back to desired style from `fontaine-presets'.
|
|
(fontaine-set-preset (or (fontaine-restore-latest-preset) 'regular)))))
|
|
:config
|
|
;; This is defined in Emacs C code: it belongs to font settings.
|
|
(setq x-underline-at-descent-line nil)
|
|
|
|
;; And this is for Emacs28.
|
|
(setq-default text-scale-remap-header-line t)
|
|
|
|
;; This is the default value. Just including it here for
|
|
;; completeness.
|
|
(setq fontaine-latest-state-file (locate-user-emacs-file "fontaine-latest-state.eld"))
|
|
|
|
(setq fontaine-presets
|
|
'((small
|
|
:default-height 80)
|
|
(regular) ; like this it uses all the fallback values and is named `regular'
|
|
(medium
|
|
:default-weight semilight
|
|
:default-height 115
|
|
:bold-weight extrabold)
|
|
(large
|
|
:inherit medium
|
|
:default-height 150)
|
|
(live-stream
|
|
:default-family "Iosevka Comfy Wide Motion"
|
|
:default-height 150
|
|
:default-weight medium
|
|
:fixed-pitch-family "Iosevka Comfy Wide Motion"
|
|
:variable-pitch-family "Iosevka Comfy Wide Duo"
|
|
:bold-weight extrabold)
|
|
(presentation
|
|
:default-height 180)
|
|
(jumbo
|
|
:default-height 260)
|
|
(t
|
|
;; I keep all properties for didactic purposes, but most can be
|
|
;; omitted. See the fontaine manual for the technicalities:
|
|
;; <https://protesilaos.com/emacs/fontaine>.
|
|
:default-family "Iosevka Comfy"
|
|
:default-weight regular
|
|
:default-slant normal
|
|
:default-width normal
|
|
:default-height 100
|
|
|
|
:fixed-pitch-family "Iosevka Comfy"
|
|
:fixed-pitch-weight nil
|
|
:fixed-pitch-slant nil
|
|
:fixed-pitch-width nil
|
|
:fixed-pitch-height 1.0
|
|
|
|
:fixed-pitch-serif-family nil
|
|
:fixed-pitch-serif-weight nil
|
|
:fixed-pitch-serif-slant nil
|
|
:fixed-pitch-serif-width nil
|
|
:fixed-pitch-serif-height 1.0
|
|
|
|
:variable-pitch-family "Iosevka Comfy Motion Duo"
|
|
:variable-pitch-weight nil
|
|
:variable-pitch-slant nil
|
|
:variable-pitch-width nil
|
|
:variable-pitch-height 1.0
|
|
|
|
:mode-line-active-family nil
|
|
:mode-line-active-weight nil
|
|
:mode-line-active-slant nil
|
|
:mode-line-active-width nil
|
|
:mode-line-active-height 1.0
|
|
|
|
:mode-line-inactive-family nil
|
|
:mode-line-inactive-weight nil
|
|
:mode-line-inactive-slant nil
|
|
:mode-line-inactive-width nil
|
|
:mode-line-inactive-height 1.0
|
|
|
|
:header-line-family nil
|
|
:header-line-weight nil
|
|
:header-line-slant nil
|
|
:header-line-width nil
|
|
:header-line-height 1.0
|
|
|
|
:line-number-family nil
|
|
:line-number-weight nil
|
|
:line-number-slant nil
|
|
:line-number-width nil
|
|
:line-number-height 1.0
|
|
|
|
:tab-bar-family nil
|
|
:tab-bar-weight nil
|
|
:tab-bar-slant nil
|
|
:tab-bar-width nil
|
|
:tab-bar-height 1.0
|
|
|
|
:tab-line-family nil
|
|
:tab-line-weight nil
|
|
:tab-line-slant nil
|
|
:tab-line-width nil
|
|
:tab-line-height 1.0
|
|
|
|
:bold-family nil
|
|
:bold-slant nil
|
|
:bold-weight bold
|
|
:bold-width nil
|
|
:bold-height 1.0
|
|
|
|
:italic-family nil
|
|
:italic-weight nil
|
|
:italic-slant italic
|
|
:italic-width nil
|
|
:italic-height 1.0
|
|
|
|
:line-spacing nil))))
|
|
|
|
(provide 'unravel-theme)
|