emacs/config/ui.org
Evie Litherland-Smith 5fc9903bac Enable electric-pair-mode for better paren support
Move whitespace config from defaults.org to ui.org, configure based on
what was in the crafted config
2024-02-15 13:52:07 +00:00

6 KiB

UI Config

  (setq use-dialog-box 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)))

  (with-eval-after-load 'diminish
    (diminish 'visual-line-mode))
  (global-visual-line-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))

  ;; Theme
  (use-package modus-themes
    :ensure 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 modes
  (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)

Zone

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

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))