emacs/config/ui.org

8.8 KiB

UI Config

  (setq use-dialog-box nil
        minibuffer-follows-selected-frame nil
        truncate-lines nil
        truncate-partial-width-windows nil)

  (menu-bar-mode +1)
  (global-prettify-symbols-mode +1)
  (global-display-line-numbers-mode -1)
  (tool-bar-mode -1)

  (add-hook 'prog-mode-hook #'(lambda () (display-line-numbers-mode +1)))

  (use-package which-key
    :ensure t
    :diminish
    :config (which-key-mode +1))

  (use-package page-break-lines
    :ensure t
    :diminish
    :config (global-page-break-lines-mode +1))

  (electric-pair-mode +1)
  (show-paren-mode +1)

  ;; add visual pulse when changing focus, like beacon but built-in
  ;; from from https://karthinks.com/software/batteries-included-with-emacs/
  (defun pulse-line (&rest _)
    "Pulse the current line."
    (pulse-momentary-highlight-one-line (point)))

  (dolist (command '(scroll-up-command
                     scroll-down-command
                     recenter-top-bottom
                     other-window))
    (advice-add command :after #'pulse-line))

Theme, font and nerd-icons

  (add-to-list 'initial-frame-alist '(width  . 120))
  (add-to-list 'initial-frame-alist '(height . 80))

catppuccin-theme

  (use-package catppuccin-theme
    :ensure t
    :demand
    :custom
    (catppuccin-flavour 'mocha)
    (catppuccin-italic-blockquotes t)
    (catppuccin-italic-comments t)
    (catppuccin-italic-variables nil)
    :config
    (load-theme 'catppuccin t))

modus-vivendi-tinted

Removed in favour of Catppuccin (emacs) theme, keeping here for the config options though in case I want to use it again for anything.

  ;; Theme
  (use-package modus-themes
    :disabled t
    :custom
    (modus-themes-disable-other-themes t)
    (modus-themes-to-toggle '(modus-operandi-tinted modus-vivendi-tinted))
    (modus-themes-bold-constructs t)
    (modus-themes-italic-constructs t)
    (modus-themes-org-blocks nil)
    (modus-themes-completions '((matches . (extrabold underline))
                                (selection . (semibold italic))))
    (modus-themes-headings '((1 . (1.4))
                             (2 . (1.3))
                             (3 . (1.2))
                             (agenda-date . (1.3))
                             (agenda-structure . (light 1.8))
                             (t . (1.1))))
    :config
    (modus-themes-load-theme 'modus-vivendi-tinted))

nerd-icons

  (use-package nerd-icons
    :ensure t
    :diminish
    :config (nerd-icons-set-font "Symbols Nerd Font Mono-12"))

  (use-package nerd-icons-dired
    :ensure t
    :after nerd-icons
    :diminish
    :hook (dired-mode))

  (use-package nerd-icons-ibuffer
    :ensure t
    :after nerd-icons
    :diminish
    :hook (ibuffer-mode))

  (use-package nerd-icons-completion
    :ensure t
    :after nerd-icons
    :diminish
    :config (nerd-icons-completion-mode +1))

  (use-package nerd-icons-corfu
    :ensure t
    :after (corfu nerd-icons)
    :diminish
    :config (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))

  (keymap-global-set "C-c i n" #'nerd-icons-insert)

Font ligatures

  (use-package ligature
    :ensure t
    :diminish
    :config
    (ligature-set-ligatures
     '(text-mode prog-mode org-mode)
     '("-<<" "-<" "-<-" "<--" "<---" "<<-" "<-" "->" "->>" "-->" "--->" "->-" ">-" ">>-"
       "=<<" "=<" "=<=" "<==" "<===" "<<=" "<=" "=>" "=>>" "==>" "===>" "=>=" ">=" ">>="
       "<->" "<-->" "<--->" "<---->" "<=>" "<==>" "<===>" "<====>" "::" ":::" "__"
       "<~~" "</" "</>" "/>" "~~>" "==" "!=" "/=" "~=" "<>" "===" "!==" "!===" "=/=" "=!="
       "<:" ":=" "*=" "*+" "<*" "<*>" "*>" "<|" "<|>" "|>" "<." "<.>" ".>" "+*" "=*" "=:" ":>"
       "(*" "*)" "/*" "*/" "[|" "|]" "{|" "|}" "++" "+++" "\\/" "/\\" "|-" "-|" "<!--" "<!---"))
    (global-ligature-mode +1))

Whitespace mode

  (use-package whitespace
    :init
    (global-whitespace-mode +1)
    :custom
    (whitespace-style '(face
                        empty
                        trailing
                        tab-mark
                        indentation::space))
    (whitespace-action '(report-on-bogus
                         cleanup
                         auto-cleanup)))

Window management

windmove

  (use-package windmove
    :ensure t
    :demand
    :diminish
    :config (windmove-mode +1)
    :bind (("C-c w k" . windmove-up)
           ("C-c w C-k" . windmove-display-up)
           ("C-c w K" . windmove-swap-states-up)
           ("C-c w j" . windmove-down)
           ("C-c w C-j" . windmove-display-down)
           ("C-c w J" . windmove-swap-states-down)
           ("C-c w h" . windmove-left)
           ("C-c w C-h" . windmove-display-left)
           ("C-c w H" . windmove-swap-states-left)
           ("C-c w l" . windmove-right)
           ("C-c w C-l" . windmove-display-right)
           ("C-c w L" . windmove-swap-states-right)))

winner

  (use-package winner
    :ensure t
    :demand
    :diminish
    :bind (("C-c w u" . winner-undo)
           ("C-c w r" . winner-redo))
    :config
    (winner-mode))

ediff

  (use-package ediff
    :ensure t
    :diminish
    :bind (("C-c d f" . ediff-files)
           ("C-c d b" . ediff-buffers)
           ("C-c d 3 f" . ediff-files3)
           ("C-c d 3 b" . ediff-buffers3))
    :custom
    (ediff-window-setup-function #'ediff-setup-windows-plain))

Notifications

  (use-package alert
    :ensure t
    :diminish
    :custom
    (alert-default-style 'libnotify))

Modeline

  (line-number-mode -1)
  (column-number-mode -1)
  (size-indication-mode -1)
  (display-battery-mode -1)
  (display-time-mode -1)

  (setq mode-line-compact 'long)

doom-modeline

  (use-package doom-modeline
    :ensure t
    :demand
    :custom
    (doom-modeline-checker-simple-format nil)
    (doom-modeline-enable-word-count t)
    (doom-modeline-env-version nil)
    (doom-modeline-github nil)
    (doom-modeline-gnus t)
    (doom-modeline-mu4e nil)		; Built-in implementation looks nicer
    (doom-modeline-icon t)
    (doom-modeline-irc t)
    (doom-modeline-lsp t)
    (doom-modeline-project-detection 'project)
    (doom-modeline-continuous-word-count-modes '(org-mode
                                                 markdown-mode
                                                 gfm-mode))
    :config
    (doom-modeline-mode +1))

Battery state for laptops

  (require 'battery)
  (when (and battery-status-function
             (not ( string-match-p "unknown"
                    ( battery-format "%B"
                      (funcall battery-status-function)))))
    (display-battery-mode +1))

Dashboard

  (use-package dashboard
    :ensure t
    :custom
    (dashboard-banner-logo-title nil)
    (dashboard-banner-ascii "EMACS")
    (dashboard-startup-banner (locate-user-emacs-file "banners/ansi_shadow.txt"))
    (dashboard-center-content t)
    (dashboard-vertical-center-content t)
    (dashboard-show-shortcuts t)
    (dashboard-set-init-info t)
    (dashboard-icon-type 'nerd-icons)
    (dashboard-set-file-icons t)
    (dashboard-set-heading-icons t)
    (dashboard-projects-backend 'project-el)
    (dashboard-week-agenda t)
    (dashboard-agenda-sort-strategy '(todo-state-up time-up))
    (dashboard-items '((agenda . 5)
                       (recents . 5)
                       (bookmarks . 5)))
    (dashboard-heading-icons '((recents . "nf-oct-history")
                               (bookmarks . "nf-oct-bookmark")
                               (agenda . "nf-oct-calendar")
                               (projects . "nf-oct-rocket")
                               (registers . "nf-oct-database")))
    :init
    (setq initial-buffer-choice #'(lambda ()
                                    (get-buffer-create "*dashboard*")))
    :config
    (dashboard-setup-startup-hook))

Zone

  (use-package zone
    :ensure t
    :diminish
    :config (zone-when-idle (* 60 60))) ; 1 hour

Git status in fringe

  (use-package diff-hl
    :ensure t
    :diminish
    :init
    (add-hook 'magit-pre-refresh-hook #'diff-hl-magit-pre-refresh)
    (add-hook 'magit-post-refresh-hook #'diff-hl-magit-post-refresh)
    :config
    (global-diff-hl-mode)
    :custom
    (diff-hl-disable-on-remote t)
    (diff-hl-draw-borders nil))