mirror of
https://github.com/SqrtMinusOne/dotfiles.git
synced 2025-12-10 19:23:03 +03:00
418 lines
14 KiB
EmacsLisp
418 lines
14 KiB
EmacsLisp
;;; -*- lexical-binding: t -*-
|
|
(unless my/is-termux
|
|
(tool-bar-mode -1)
|
|
(menu-bar-mode -1)
|
|
(scroll-bar-mode -1))
|
|
|
|
(when my/is-termux
|
|
(menu-bar-mode -1))
|
|
|
|
;; (set-frame-parameter (selected-frame) 'alpha '(90 . 90))
|
|
;; (add-to-list 'default-frame-alist '(alpha . (90 . 90)))
|
|
|
|
(setq confirm-kill-emacs 'y-or-n-p)
|
|
|
|
;; (global-prettify-symbols-mode)
|
|
|
|
(setq use-dialog-box nil)
|
|
|
|
(setq inhibit-startup-screen t)
|
|
|
|
(setq visible-bell 0)
|
|
|
|
(defalias 'yes-or-no-p 'y-or-n-p)
|
|
|
|
(setq make-pointer-invisible t)
|
|
|
|
(show-paren-mode 1)
|
|
|
|
(global-hl-line-mode 1)
|
|
|
|
(global-display-line-numbers-mode 1)
|
|
(line-number-mode nil)
|
|
(setq display-line-numbers-type 'visual)
|
|
(column-number-mode)
|
|
|
|
(setq word-wrap 1)
|
|
(global-visual-line-mode 1)
|
|
|
|
(setq-default frame-title-format
|
|
'(""
|
|
"emacs"
|
|
;; (:eval
|
|
;; (let ((project-name (projectile-project-name)))
|
|
;; (if (not (string= "-" project-name))
|
|
;; (format ":%s@%s" project-name (system-name))
|
|
;; (format "@%s" (system-name)))))
|
|
))
|
|
|
|
(use-package olivetti
|
|
:straight t
|
|
:if (display-graphic-p)
|
|
:commands (olivetti-mode)
|
|
:config
|
|
(setq-default olivetti-body-width 86))
|
|
|
|
(use-package keycast
|
|
:straight t
|
|
:init
|
|
(define-minor-mode keycast-mode
|
|
"Keycast mode"
|
|
:global t
|
|
(if keycast-mode
|
|
(progn
|
|
(add-to-list 'global-mode-string '("" keycast-mode-line " "))
|
|
(add-hook 'pre-command-hook 'keycast--update t) )
|
|
(remove-hook 'pre-command-hook 'keycast--update)
|
|
(setq global-mode-string (delete '("" keycast-mode-line " ") global-mode-string))))
|
|
:commands (keycast--update))
|
|
|
|
(use-package doom-themes
|
|
:straight t
|
|
;; Not deferring becuase I want `doom-themes-visual-bell-config'
|
|
:config
|
|
(setq doom-themes-enable-bold t
|
|
doom-themes-enable-italic t)
|
|
(doom-themes-visual-bell-config)
|
|
(setq doom-themes-treemacs-theme "doom-colors")
|
|
(doom-themes-treemacs-config))
|
|
|
|
;; (use-package modus-themes
|
|
;; :straight (:build (:not native-compile)))
|
|
|
|
(use-package ef-themes
|
|
:straight t
|
|
:config
|
|
(setq ef-duo-light-palette-overrides
|
|
'((constant green))))
|
|
|
|
(use-package ct
|
|
:straight t)
|
|
|
|
(defun my/doom-p ()
|
|
(seq-find (lambda (x) (string-match-p (rx bos "doom") (symbol-name x)))
|
|
custom-enabled-themes))
|
|
|
|
(defun my/modus-p ()
|
|
(seq-find (lambda (x) (string-match-p (rx bos "modus") (symbol-name x)))
|
|
custom-enabled-themes))
|
|
|
|
(defun my/ef-p ()
|
|
(seq-find (lambda (x) (string-match-p (rx bos "ef") (symbol-name x)))
|
|
custom-enabled-themes))
|
|
|
|
(defun my/light-p ()
|
|
(ct-light-p (my/color-value 'bg)))
|
|
|
|
(defun my/dark-p ()
|
|
(not (my/light-p)))
|
|
|
|
(defconst my/theme-override
|
|
'((doom-palenight
|
|
(red . "#f07178"))))
|
|
|
|
(defvar my/alpha-for-light 7)
|
|
|
|
(defun my/doom-color (color)
|
|
(when (doom-color 'bg)
|
|
(let ((override (alist-get (my/doom-p) my/theme-override))
|
|
(color-name (symbol-name color))
|
|
(is-light (ct-light-p (doom-color 'bg))))
|
|
(or
|
|
(alist-get color override)
|
|
(cond
|
|
((eq 'black color)
|
|
(if is-light (doom-color 'fg) (doom-color 'bg)))
|
|
((eq 'white color)
|
|
(if is-light (doom-color 'bg) (doom-color 'fg)))
|
|
((eq 'border color)
|
|
(if is-light (doom-color 'base0) (doom-color 'base8)))
|
|
((string-match-p (rx bos "light-") color-name)
|
|
(ct-edit-hsl-l-inc (my/doom-color (intern (substring color-name 6)))
|
|
my/alpha-for-light))
|
|
((string-match-p (rx bos "dark-") color-name)
|
|
(or (doom-color color)
|
|
(ct-edit-hsl-l-dec (my/doom-color (intern (substring color-name 5)))
|
|
my/alpha-for-light)))
|
|
(t (doom-color color)))))))
|
|
|
|
(defun my/modus-get-base (color)
|
|
(let ((base-value (string-to-number (substring (symbol-name color) 4 5)))
|
|
(base-start (cadr (assoc 'bg-main (modus-themes-get-theme-palette))))
|
|
(base-end (cadr (assoc 'fg-dim (modus-themes-get-theme-palette)))))
|
|
(nth base-value (ct-gradient 9 base-start base-end t))))
|
|
|
|
(defun my/prot-color (color palette)
|
|
(let ((is-light (ct-light-p (cadr (assoc 'bg-main palette)))))
|
|
(cond
|
|
((member color '(black white light-black light-white))
|
|
(let ((bg-main (cadr (assoc 'bg-main palette)))
|
|
(fg-main (cadr (assoc 'fg-main palette))))
|
|
(pcase color
|
|
('black (if is-light fg-main bg-main))
|
|
('white (if is-light bg-main fg-main))
|
|
('light-black (ct-edit-hsl-l-inc
|
|
(if is-light fg-main bg-main)
|
|
15))
|
|
('light-white (ct-edit-hsl-l-inc
|
|
(if is-light bg-main fg-main)
|
|
15)))))
|
|
((or (eq color 'bg))
|
|
(cadr (assoc 'bg-main palette)))
|
|
((or (eq color 'fg))
|
|
(cadr (assoc 'fg-main palette)))
|
|
((eq color 'bg-alt)
|
|
(cadr (assoc 'bg-dim palette)))
|
|
((eq color 'violet)
|
|
(cadr (assoc 'magenta-cooler palette)))
|
|
((string-match-p (rx bos "base" digit) (symbol-name color))
|
|
(my/modus-get-base color))
|
|
((string-match-p (rx bos "dark-") (symbol-name color))
|
|
(cadr (assoc (intern (format "%s-cooler" (substring (symbol-name color) 5)))
|
|
palette)))
|
|
((eq color 'grey)
|
|
(my/modus-get-base 'base5))
|
|
((string-match-p (rx bos "light-") (symbol-name color))
|
|
(or
|
|
(cadr (assoc (intern (format "%s-intense" (substring (symbol-name color) 6))) palette))
|
|
(cadr (assoc (intern (format "bg-%s-intense" (substring (symbol-name color) 6))) palette))))
|
|
(t (cadr (assoc color palette))))))
|
|
|
|
(defun my/modus-color (color)
|
|
(my/prot-color color (modus-themes-get-theme-palette)))
|
|
|
|
(defun my/ef-color (color)
|
|
(my/prot-color color (modus-themes-get-theme-palette)))
|
|
|
|
(defconst my/test-colors-list
|
|
'(black red green yellow blue magenta cyan white light-black
|
|
dark-red dark-green dark-yellow dark-blue dark-magenta dark-cyan
|
|
light-red light-green light-yellow light-blue light-magenta
|
|
light-cyan light-white bg bg-alt fg fg-alt violet grey base0 base1
|
|
base2 base3 base4 base5 base6 base7 base8 border))
|
|
|
|
(defun my/test-colors ()
|
|
(interactive)
|
|
(let ((buf (generate-new-buffer "*colors-test*")))
|
|
(with-current-buffer buf
|
|
(insert (format "%-20s %-10s %-10s %-10s" "Color" "Doom" "Modus" "Ef") "\n")
|
|
(cl-loop for color in my/test-colors-list
|
|
do (insert
|
|
(format "%-20s %-10s %-10s %-10s\n"
|
|
(prin1-to-string color)
|
|
(my/doom-color color)
|
|
(my/modus-color color)
|
|
(my/ef-color color))))
|
|
(special-mode)
|
|
(rainbow-mode))
|
|
(switch-to-buffer buf)))
|
|
|
|
(defun my/color-value (color)
|
|
(cond
|
|
((stringp color) (my/color-value (intern color)))
|
|
((eq color 'bg-other)
|
|
(or (my/color-value 'bg-dim)
|
|
(let ((color (my/color-value 'bg)))
|
|
(if (ct-light-p color)
|
|
(ct-edit-hsl-l-dec color 2)
|
|
(ct-edit-hsl-l-dec color 3)))))
|
|
((eq color 'modeline)
|
|
(or
|
|
(my/color-value 'bg-mode-line-active)
|
|
(my/color-value 'bg-mode-line)
|
|
(if (my/light-p)
|
|
(ct-edit-hsl-l-dec (my/color-value 'bg-alt) 10)
|
|
(ct-edit-hsl-l-inc (my/color-value 'bg-alt) 15))))
|
|
((my/doom-p) (my/doom-color color))
|
|
((my/modus-p) (my/modus-color color))
|
|
((my/ef-p) (my/ef-color color))))
|
|
|
|
(deftheme my-theme-1)
|
|
|
|
(defvar my/my-theme-update-color-params nil)
|
|
|
|
(defmacro my/use-colors (&rest data)
|
|
`(progn
|
|
,@(cl-loop for i in data collect
|
|
`(setf (alist-get ',(car i) my/my-theme-update-color-params)
|
|
(list ,@(cl-loop for (key value) on (cdr i) by #'cddr
|
|
append `(,key ',value)))))
|
|
(when (and (or (my/doom-p) (my/modus-p)) my/emacs-started)
|
|
(my/update-my-theme))))
|
|
|
|
(defun my/update-my-theme (&rest _)
|
|
(interactive)
|
|
(cl-loop for (face . values) in my/my-theme-update-color-params
|
|
do (custom-theme-set-faces
|
|
'my-theme-1
|
|
`(,face ((t ,@(cl-loop for (key value) on values by #'cddr
|
|
collect key
|
|
collect (eval value)))))))
|
|
(enable-theme 'my-theme-1))
|
|
|
|
(defun my/advice-my-theme ()
|
|
(advice-add 'load-theme :after #'my/update-my-theme))
|
|
|
|
(unless my/is-termux
|
|
(add-hook 'emacs-startup-hook #'my/update-my-theme)
|
|
;; (add-hook 'emacs-startup-hook #'my/advice-my-theme)
|
|
)
|
|
|
|
(my/use-colors
|
|
(tab-bar-tab :background (my/color-value 'bg)
|
|
:foreground (my/color-value 'yellow)
|
|
:underline (my/color-value 'yellow))
|
|
(tab-bar :background 'unspecified :foreground 'unspecified)
|
|
(magit-section-secondary-heading :foreground (my/color-value 'blue)
|
|
:weight 'bold))
|
|
|
|
(defun my/switch-theme (theme)
|
|
(interactive
|
|
(list (intern (completing-read "Load custom theme: "
|
|
(mapcar #'symbol-name
|
|
(custom-available-themes))))))
|
|
(cl-loop for enabled-theme in custom-enabled-themes
|
|
if (not (or (eq enabled-theme 'my-theme-1)
|
|
(eq enabled-theme theme)))
|
|
do (disable-theme enabled-theme))
|
|
(load-theme theme t)
|
|
(when current-prefix-arg
|
|
(my/regenerate-desktop)))
|
|
|
|
(if my/is-termux
|
|
(progn
|
|
(my/switch-theme 'modus-operandi-tinted))
|
|
(my/switch-theme 'ef-duo-light))
|
|
|
|
(with-eval-after-load 'transient
|
|
(my/use-colors
|
|
(transient-key-exit :foreground (my/color-value 'dark-red))
|
|
(transient-key-noop :foreground (my/color-value 'grey))
|
|
(transient-key-return :foreground (my/color-value 'yellow))
|
|
(transient-key-stay :foreground (my/color-value 'green))))
|
|
|
|
(use-package auto-dim-other-buffers
|
|
:straight t
|
|
:if (display-graphic-p)
|
|
:config
|
|
(auto-dim-other-buffers-mode t)
|
|
(my/use-colors
|
|
(auto-dim-other-buffers-face
|
|
:background (my/color-value 'bg-other))))
|
|
|
|
(with-eval-after-load 'ansi-color
|
|
(my/use-colors
|
|
(ansi-color-black
|
|
:foreground (my/color-value 'base2) :background (my/color-value 'base0))
|
|
(ansi-color-red
|
|
:foreground (my/color-value 'red) :background (my/color-value 'red))
|
|
(ansi-color-green
|
|
:foreground (my/color-value 'green) :background (my/color-value 'green))
|
|
(ansi-color-yellow
|
|
:foreground (my/color-value 'yellow) :background (my/color-value 'yellow))
|
|
(ansi-color-blue
|
|
:foreground (my/color-value 'dark-blue) :background (my/color-value 'dark-blue))
|
|
(ansi-color-magenta
|
|
:foreground (my/color-value 'violet) :background (my/color-value 'violet))
|
|
(ansi-color-cyan
|
|
:foreground (my/color-value 'dark-cyan) :background (my/color-value 'dark-cyan))
|
|
(ansi-color-white
|
|
:foreground (my/color-value 'base8) :background (my/color-value 'base8))
|
|
(ansi-color-bright-black
|
|
:foreground (my/color-value 'base5) :background (my/color-value 'base5))
|
|
(ansi-color-bright-red
|
|
:foreground (my/color-value 'orange) :background (my/color-value 'orange))
|
|
(ansi-color-bright-green
|
|
:foreground (my/color-value 'teal) :background (my/color-value 'teal))
|
|
(ansi-color-bright-yellow
|
|
:foreground (my/color-value 'yellow) :background (my/color-value 'yellow))
|
|
(ansi-color-bright-blue
|
|
:foreground (my/color-value 'blue) :background (my/color-value 'blue))
|
|
(ansi-color-bright-magenta
|
|
:foreground (my/color-value 'magenta) :background (my/color-value 'magenta))
|
|
(ansi-color-bright-cyan
|
|
:foreground (my/color-value 'cyan) :background (my/color-value 'cyan))
|
|
(ansi-color-bright-white
|
|
:foreground (my/color-value 'fg) :background (my/color-value 'fg))))
|
|
|
|
(when (display-graphic-p)
|
|
(if (x-list-fonts "JetBrainsMono Nerd Font")
|
|
(let ((font "-JB -JetBrainsMono Nerd Font-medium-normal-normal-*-17-*-*-*-m-0-iso10646-1"))
|
|
(set-frame-font font nil t)
|
|
(add-to-list 'default-frame-alist `(font . ,font)))
|
|
(message "Install JetBrainsMono Nerd Font!")))
|
|
|
|
(when (display-graphic-p)
|
|
(set-face-attribute 'variable-pitch nil :family "Cantarell" :height 1.0)
|
|
(set-face-attribute
|
|
'italic nil
|
|
:family "JetBrainsMono Nerd Font"
|
|
:weight 'regular
|
|
:slant 'italic))
|
|
|
|
(use-package ligature
|
|
:straight (:host github :repo "mickeynp/ligature.el")
|
|
:if (display-graphic-p)
|
|
:config
|
|
(ligature-set-ligatures
|
|
'(
|
|
typescript-mode
|
|
typescript-ts-mode
|
|
js2-mode
|
|
javascript-ts-mode
|
|
vue-mode
|
|
svelte-mode
|
|
scss-mode
|
|
php-mode
|
|
python-mode
|
|
python-ts-mode
|
|
js-mode
|
|
markdown-mode
|
|
clojure-mode
|
|
go-mode
|
|
sh-mode
|
|
haskell-mode
|
|
web-mode)
|
|
'("--" "---" "==" "===" "!=" "!==" "=!=" "=:=" "=/=" "<="
|
|
">=" "&&" "&&&" "&=" "++" "+++" "***" ";;" "!!" "??"
|
|
"?:" "?." "?=" "<:" ":<" ":>" ">:" "<>" "<<<" ">>>"
|
|
"<<" ">>" "||" "-|" "_|_" "|-" "||-" "|=" "||=" "##"
|
|
"###" "####" "#{" "#[" "]#" "#(" "#?" "#_" "#_(" "#:"
|
|
"#!" "#=" "^=" "<$>" "<$" "$>" "<+>" "<+" "+>" "<*>"
|
|
"<*" "*>" "</" "</>" "/>" "<!--" "<#--" "-->" "->" "->>"
|
|
"<<-" "<-" "<=<" "=<<" "<<=" "<==" "<=>" "<==>" "==>" "=>"
|
|
"=>>" ">=>" ">>=" ">>-" ">-" ">--" "-<" "-<<" ">->" "<-<"
|
|
"<-|" "<=|" "|=>" "|->" "<->" "<~~" "<~" "<~>" "~~" "~~>"
|
|
"~>" "~-" "-~" "~@" "[||]" "|]" "[|" "|}" "{|" "[<"
|
|
">]" "|>" "<|" "||>" "<||" "|||>" "<|||" "<|>" "..." ".."
|
|
".=" ".-" "..<" ".?" "::" ":::" ":=" "::=" ":?" ":?>"
|
|
"//" "///" "/*" "*/" "/=" "//=" "/==" "@_" "__"))
|
|
(global-ligature-mode t))
|
|
|
|
(use-package nerd-icons
|
|
:straight t)
|
|
|
|
(use-package indent-bars
|
|
:straight (:host github :repo "jdtsmith/indent-bars")
|
|
:if (display-graphic-p)
|
|
:hook ((prog-mode . indent-bars-mode)
|
|
(LaTeX-mode . indent-bars-mode))
|
|
:config
|
|
(require 'indent-bars-ts)
|
|
(setopt indent-bars-no-descend-lists t
|
|
indent-bars-treesit-support t
|
|
indent-bars-width-frac 0.3))
|
|
|
|
(use-package rainbow-delimiters
|
|
:straight t
|
|
:hook ((prog-mode . rainbow-delimiters-mode)))
|
|
|
|
(use-package rainbow-mode
|
|
:commands (rainbow-mode)
|
|
:straight t)
|
|
|
|
(use-package hl-todo
|
|
:hook (prog-mode . hl-todo-mode)
|
|
:straight t)
|
|
|
|
(provide 'sqrt-general-ui)
|