.emacs.d

the most bloated Emacs config on this planet
git clone https://git.trogloxene.org/.emacs.d.git
Log | Files | Refs

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