.emacs.d/init.d/basics/appearance.el

149 lines
6.3 KiB
EmacsLisp
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; appearance.el --- Configure appearance. -*- lexical-binding: t; -*-
;;; Commentary:
;; * Helpful visualizations.
;; * Colors and theme.
;; * Icon font.
;; * Modeline stuff.
;;; Code:
(require 'basics/package-management)
(require 'basics/global-variables)
(use-package emacs
:straight (:type built-in)
:demand t
;; If 2 files have the same name, append directory name after the filename.
:custom ((uniquify-after-kill-buffer-p t)
(uniquify-buffer-name-style 'post-forward)
(uniquify-strip-common-suffix t))
:config (progn
(defun my/set-default-fonts ()
"Set the default font and the emoji font."
(when (member "Source Code Pro" (font-family-list)) ; Default.
(set-frame-font "Source Code Pro-10" t t))
(when (member "Noto Color Emoji" (font-family-list)) ; Emojis.
(set-fontset-font t 'unicode "Noto Color Emoji" nil 'prepend)))
(tool-bar-mode -1) ; Hide toolbar.
(menu-bar-mode -1) ; Hide menu bar.
(when (fboundp #'set-scroll-bar-mode)
(set-scroll-bar-mode 'right))
(add-to-list 'default-frame-alist '(scroll-bar-width . 8))
(my/set-default-fonts)
;; (show-paren-mode t) ; Visualize matching parens.
(setq frame-title-format ; Show filename in frame title.
'(multiple-frames
"%b" ("" invocation-name "@" system-name
" " buffer-file-truename)))))
;; Highlight current line.
(use-package hl-line
:straight (:type built-in)
:demand t
:config (global-hl-line-mode t))
;; Icon font (required by doom and others).
(use-package all-the-icons
:demand t
:init (defun my/font-installed-p (font-name)
"Check if font with FONT-NAME is available."
(if (find-font (font-spec :name font-name))
t
nil))
;; Install fonts if we have a GUI and the font is not already installed.
;; See <https://github.com/domtronn/all-the-icons.el/issues/58>.
:config (when (and (display-graphic-p)
(not (my/font-installed-p "all-the-icons")))
(all-the-icons-install-fonts t)))
(use-package doom-themes
:demand t
:after (all-the-icons)
:custom ((doom-themes-treemacs-theme "doom-colors")
(doom-themes-treemacs-enable-variable-pitch nil))
:config (progn
(defvar my/run-fix-theme t)
(defun my/fix-theme ()
"Fix some colors, needed the for the first frame after server start."
(when my/run-fix-theme
(set-face-background 'hl-line "#140f50")
(set-face-background 'region "#340f50")
(when (display-graphic-p)
(set-face-background 'scroll-bar (face-background 'default))
(set-face-foreground 'scroll-bar (face-foreground 'shadow)))
(when (fboundp #'my/ruler-set-colors)
(my/ruler-set-colors))
(when (fboundp #'my/volatile-highlights-reset-color)
(my/volatile-highlights-reset-color))
(my/set-default-fonts)
(when (display-graphic-p)
(setq my/run-fix-theme nil))))
(load-theme 'doom-outrun-electric t)
(my/fix-theme)
(doom-themes-visual-bell-config) ; Flash modeline on error.
;; No icons in TUI, see
;; <https://github.com/hlissner/emacs-doom-themes/issues/489>
(doom-themes-treemacs-config)
;; Write a minimal theme to file, to load it in early-init.el.
(unless (string= (face-background 'default) "unspecified-bg")
(let ((minimal-theme))
(setq minimal-theme (concat "(set-face-background 'default \""
(face-background 'default) "\")\n"
"(set-face-foreground 'default \""
(face-foreground 'default) "\")\n"
"(menu-bar-mode -1)\n"
"(when (display-graphic-p)\n"
" (tool-bar-mode -1))\n"))
(with-temp-file (expand-file-name "early-theme.el"
user-emacs-directory)
(insert minimal-theme))))
(defun my/treemacs-reset-fringe ()
"Make fringe in treemacs visible again."
(set-window-fringes (selected-window) 8))
(advice-add #'doom-themes-hide-fringes-maybe
:after #'my/treemacs-reset-fringe))
:hook (server-after-make-frame . my/fix-theme))
;; Neat modeline.
(use-package doom-modeline
:after (all-the-icons hl-line)
:init (column-number-mode t) ; Show column number.
:custom ((doom-modeline-minor-modes t) ; Show minor modes.
(doom-modeline-buffer-file-name-style 'truncate-all)
(mode-line-percent-position nil) ; Don't display percentage.
(doom-modeline-buffer-state-icon nil)) ; Don't display save icon.
:hook ((after-init . doom-modeline-mode)
;; <https://github.com/seagle0128/doom-modeline/issues/375>
(server-after-make-frame . (lambda ()
(customize-set-variable
'doom-modeline-icon
(display-graphic-p))))))
;; Show line numbers on the left side of the buffer.
(use-package display-line-numbers
:straight (:type built-in)
:demand t
:if (>= emacs-major-version 26)
:config (progn (defun my/disable-line-numbers ()
(display-line-numbers-mode -1))
(global-display-line-numbers-mode)))
(use-package highlight-parentheses
:diminish (highlight-parentheses-mode)
:demand t
:custom ((highlight-parentheses-colors nil)
(highlight-parentheses-background-colors nil)
(highlight-parentheses-attributes
`((:weight bold :background ,(face-foreground 'whitespace-space))
(:weight ultrabold))))
:config (global-highlight-parentheses-mode))
(provide 'basics/appearance)
;;; appearance.el ends here