Emacs Appearance¶
Fonts¶
I quite like the Ubuntu family of fonts, but use the “Nerd Font” version to get some extra icons
emacs/init.el
(set-face-attribute 'default nil :family "UbuntuMonoNerdFont" :height 120)
(set-face-attribute 'fixed-pitch nil :family "UbuntuMonoNerdFont" :height 120)
(set-face-attribute 'variable-pitch nil :family "UbuntuSansNerdFont" :weight 'light :height 120)
Make it easy to get relevant nerd icons
emacs/init.el
(use-package nerd-icons
:ensure t)
Theme¶
Load my theme related customisations
emacs/init.el
(use-package alc-theme
:load-path "lisp"
:config
(add-to-list 'after-make-frame-functions 'alc-theme-sync-to-system-theme))
Line Numbers¶
Enable line numbers for programming modes
emacs/init.el
(add-hook 'prog-mode-hook (lambda () (display-line-numbers-mode t)))
Reserve enough space to display a line number that is 4 digits long and when a buffer is narrowed, always display the actual line number.
emacs/init.el
(setq-default display-line-numbers-widen t
display-line-numbers-width 4)
Scrolling¶
With Emacs 29 came pixel-scroll-precision-mode
which makes the scrolling with a touchpad experience much nicer overall.
emacs/init.el
(setq pixel-scroll-precision-use-momentum nil
pixel-scroll-precision-interpolate-page t
pixel-scroll-precision-momentum-seconds 0.5)
(pixel-scroll-precision-mode t)
Tab Bar¶
Not to be confused with the tabs you see in editors like VSCode, tabs allow for easy switching between different collections of windows - like workspaces.
As well as using the tab bar to show… well tabs, I also make use of the tab-bar-format-global
variable to show global status information like battery levels.
emacs/init.el
(setq tab-bar-close-button-show nil)
(setq tab-bar-tab-hints t)
(setq tab-bar-auto-width nil)
(setq tab-bar-format '(tab-bar-format-tabs-groups
tab-bar-separator
tab-bar-format-align-right
tab-bar-format-global
tab-bar-format-menu-bar))
(defun alc-tab-bar-tab-name-format-hints (name _tab i)
(if tab-bar-tab-hints (concat (format "-%d-" i) "") name))
(defun alc-tab-bar-tab-group-format-function (tab i &optional current-p)
(propertize
(concat (funcall tab-bar-tab-group-function tab))
'face (if current-p 'tab-bar-tab-group-current 'tab-bar-tab-group-inactive)))
(setq tab-bar-tab-group-format-function 'alc-tab-bar-tab-group-format-function)
(setq tab-bar-tab-name-format-functions '(alc-tab-bar-tab-name-format-hints
tab-bar-tab-name-format-close-button
tab-bar-tab-name-format-face))
;; Disable the menu-bar, since it's accessible via the tab bar.
(menu-bar-mode -1)
(add-hook 'after-init-hook #'tab-bar-mode)
Battery Info
emacs/init.el
(display-battery-mode)
Time
emacs/init.el
(setq display-time-format "%H:%M %d/%m/%y"
display-time-default-load-average nil)
(display-time-mode)
Modeline¶
For reference, here are the components that were in the default modeline
mode-line-mule-info
mode-line-client
mode-line-frame-identification
mode-line-position
mode-line-misc-info
mode-line-end-spaces
emacs/init.el
(use-package alc-modeline
:after alc-theme
:load-path "lisp"
:config
(setq-default mode-line-format
'("%e"
mode-line-front-space
alc-modeline-window-dedicated
alc-modeline-project-identification
" "
alc-modeline-remote-indication
alc-modeline-buffer-identification
" "
alc-modeline-buffer-position
" "
mode-line-modes
)))
See for more details
Miscellaneous¶
Disable some GUI elements
emacs/early-init.el
(blink-cursor-mode -1)
(tool-bar-mode -1)
(setq inhibit-x-resources t
inhibit-startup-message t)
And enable others
emacs/early-init.el
(context-menu-mode t)