init-ui.el (5818B)
1 ;;; init-ui.el --- ui and other style customization config -*- lexical-binding: t -*- 2 3 ;;; Commentary: 4 5 ;;; Code: 6 7 ;; custom-theme-load-path 8 (add-to-list 'custom-theme-load-path (concat user-emacs-directory "lisp/")) 9 10 ;; trust all themes 11 (setq custom-safe-themes t) 12 13 ;; solarized 14 (my-use-package solarized-theme 15 :straight 16 (solarized-emacs :fork (:type git :host nil :repo "https://git.trogloxene.org/solarized-emacs.git")) 17 :init 18 (setq solarized-palette-darker-accent-alpha 0.7 19 solarized-palette-lighter-accent-alpha 0.4) 20 (if (and (daemonp) (not *is-android*)) 21 (add-hook 'after-make-frame-functions 22 (lambda (frame) 23 (with-selected-frame frame 24 (load-theme 'my-dark t)))) 25 (load-theme (if my-dark-or-light 'my-light 'my-dark) t))) 26 27 ;; color picker 28 ;; from zHaOdANiuu's ElegantEmacs 29 (my-use-package color-picker my-enable-unessentials 30 :straight 31 (color-picker :type git :host github :repo "zHaOdANiuu/color-picker.el") 32 :config 33 (setq color-picker-scale 2.0) 34 :init 35 (defun my-pick-color (arg) 36 "Pick and insert color." 37 (interactive "P") 38 (let ((target (current-buffer))) 39 (color-picker 40 :style (unless arg 'simple) 41 :ok (lambda (color) 42 (with-current-buffer target 43 (when (use-region-p) 44 (delete-region (region-beginning) (region-end))) 45 (insert color))))))) 46 47 (my-use-package colorful-mode my-enable-unessentials 48 :hook (prog-mode . colorful-mode) 49 :config 50 (setq colorful-use-prefix t 51 colorful-only-strings 'only-prog) 52 (add-to-list 'global-colorful-modes 'helpful-mode) 53 54 (require 'svg) 55 (defvar color-picker-initial-color) 56 57 (defun my-colorful--svg-img (color) 58 (let* ((sz (frame-char-width)) 59 (svg (svg-create sz sz))) 60 (svg-node svg 'rect 61 :x 1 :y 1 :width (- sz 2) :height (- sz 2) 62 :fill color :stroke "#ffffff" :stroke-width "0.5") 63 (svg-image svg :ascent 'center))) 64 65 (defun my-colorful--ov-hex (ov) 66 "Return normalized hex color string of colorful overlay OV." 67 (when-let* ((c (overlay-get ov 'colorful--color))) 68 (pcase-let ((`(,r ,g ,b) (color-name-to-rgb c))) 69 (color-rgb-to-hex r g b 2)))) 70 71 (defun my-colorful-color-picker (event) 72 "Pick color use color-picker." 73 (interactive "e") 74 (let* ((pos (event-start event)) 75 (xy (posn-x-y pos)) 76 (ov (colorful--find-overlay (posn-point pos)))) 77 (when ov 78 (let ((color-picker-initial-color 79 (or (my-colorful--ov-hex ov) color-picker-initial-color))) 80 (color-picker 81 :style 'simple :display 'frame 82 :x (car xy) :y (cdr xy) 83 :ok (lambda (picked) 84 (with-current-buffer (overlay-buffer ov) 85 (delete-region (overlay-start ov) (overlay-end ov)) 86 (insert picked)))))))) 87 88 (defvar-keymap my-colorful--color-picker-map 89 "<mouse-1>" 90 #'my-colorful-color-picker) 91 92 (defun colorful--colorize-match (color beg end kind face map) 93 "Overlay match with a face from BEG to END. 94 The background uses COLOR color value. The foreground is obtained 95 from `readable-foreground-color'." 96 (let ((ov (make-overlay beg end))) 97 (overlay-put ov 'colorful--overlay t) 98 (overlay-put ov 'colorful--color-kind kind) 99 (overlay-put ov 'colorful--color color) 100 (overlay-put ov 'evaporate t) 101 (overlay-put ov 102 'before-string 103 (propertize 104 " " 105 'display (my-colorful--svg-img color) 106 'keymap my-colorful--color-picker-map 107 'pointer 'hand)) 108 (overlay-put ov 'face nil)))) 109 110 ;; line numbers 111 (my-use-package display-line-numbers 112 :straight nil 113 :hook 114 ((prog-mode 115 conf-mode toml-ts-mode 116 yaml-mode yaml-ts-mode) 117 . display-line-numbers-mode) 118 :init 119 (setq display-line-numbers-type t 120 display-line-numbers-grow-only t 121 display-line-numbers-width-start 4)) 122 123 ;; whitespace 124 (my-use-package whitespace 125 :straight nil 126 :hook 127 ((prog-mode text-mode conf-mode) . my-show-trailing-whitespace) 128 :config 129 (defun my-show-trailing-whitespace () 130 "Enable display of trailing whitespace in this buffer." 131 (setq-local show-trailing-whitespace t))) 132 133 ;; resize margins 134 (my-use-package olivetti 135 :delight 136 :hook 137 ((org-mode markdown-mode md-ts-mode outline-mode kotl-mode rst-mode) 138 . olivetti-mode) 139 (olivetti-mode . (lambda () (display-line-numbers-mode -1))) 140 :init 141 (setq olivetti-body-width 85)) 142 143 ;; a simple mode-line for mobile device 144 (my-use-package simple-modeline *is-android* 145 :hook 146 (after-init . simple-modeline-mode)) 147 148 ;; highlight current line 149 (my-use-package hl-line 150 :straight nil 151 :hook 152 (after-init . global-hl-line-mode)) 153 154 ;; display time in mode line 155 (my-use-package time (not *is-android*) 156 :straight nil 157 :hook 158 (persp-mode . display-time-mode) 159 :config 160 (setq display-time-default-load-average nil 161 display-time-string-forms 162 '((propertize 163 (concat 164 (propertize (format-time-string " %I:%M") 'face 'display-time-date-and-time) 165 (propertize (format-time-string "-%p") 'face 'font-lock-comment-face)) 166 'help-echo (format-time-string "%A, %B %d, %Y"))))) 167 168 ;; easier to setup fonts 169 (my-use-package cnfonts 170 :hook 171 (after-init . cnfonts-mode) 172 :init 173 (setq cnfonts-personal-fontnames 174 '(("Sarasa Fixed TC") ;English 175 ("Sarasa Fixed TC") ;Chinese 176 nil ;ext-B 177 nil ;symbol 178 nil)) ;what's this? 179 :config 180 (cnfonts--select-profile "profile1")) 181 182 (provide 'init-ui) 183 ;;; init-ui.el ends here