diff options
| author | cashmere <cashmere@autistici.org> | 2026-09-15 21:40:36 +0200 |
|---|---|---|
| committer | cashmere <cashmere@autistici.org> | 2026-09-15 21:40:36 +0200 |
| commit | eb2731470034174bb6873e371d2503d576e83382 (patch) | |
| tree | 9e0be282982bda35f863acf68b5fc24e00f71852 | |
| parent | bde882d991355d1d8f8a70cb6f85534546059280 (diff) | |
| download | emacs-eb2731470034174bb6873e371d2503d576e83382.tar.gz | |
relic: 2026-09-15T21:40:36+02:00
| -rw-r--r-- | config.el | 45 | ||||
| -rw-r--r-- | config.org | 45 | ||||
| -rw-r--r-- | themes/tinty-theme.el | 142 |
3 files changed, 155 insertions, 77 deletions
@@ -2778,6 +2778,39 @@ BODY is the xonsh script. PARAMS may include :dir and :cmdline." :after evil :config (global-evil-mc-mode 1) + + (defvar my/evil-mc-visual-map nil) + (setq my/evil-mc-visual-map (make-sparse-keymap)) + (keymap-set my/evil-mc-visual-map "a" #'evil-mc-make-all-cursors) + (keymap-set my/evil-mc-visual-map "q" #'my/evil-mc-quit) + (keymap-set my/evil-mc-visual-map "n" #'evil-mc-make-and-goto-next-match) + (keymap-set my/evil-mc-visual-map "p" #'evil-mc-make-and-goto-prev-match) + (keymap-set my/evil-mc-visual-map "C-n" #'my/evil-mc-skip-next-match) + (keymap-set my/evil-mc-visual-map "C-p" #'my/evil-mc-skip-prev-match) + + (evil-define-command my/evil-mc-visual-block () + :keep-visual t + (interactive) + (call-interactively #'evil-visual-block) + (when (evil-visual-state-p) + (set-transient-map my/evil-mc-visual-map #'evil-visual-state-p))) + + (defun my/evil-mc-quit () + (interactive) + (evil-mc-undo-all-cursors) + (evil-exit-visual-state)) + + (evil-define-command my/evil-mc-skip-next-match () + :repeat ignore + :evil-mc t + (evil-mc-make-and-goto-next-match) + (evil-mc-skip-and-goto-next-match)) + + (evil-define-command my/evil-mc-skip-prev-match () + :repeat ignore + :evil-mc t + (evil-mc-make-and-goto-prev-match) + (evil-mc-skip-and-goto-prev-match)) (defun my/evil-visual-block-p () (and (bound-and-true-p evil-visual-selection) @@ -2801,7 +2834,7 @@ BODY is the xonsh script. PARAMS may include :dir and :cmdline." (with-eval-after-load 'evil-mc (defun my/evil-mc-keep-visual-selection (original &rest args) - (if (and (evil-visual-state-p) (eq evil-visual-selection 'char)) + (if (evil-visual-state-p) (let* ((range (evil-visual-range)) (length (if (evil-mc-has-pattern-p) (evil-mc-get-pattern-length) (- (cadr range) (car range))))) (prog1 (apply original args) @@ -2815,7 +2848,8 @@ BODY is the xonsh script. PARAMS may include :dir and :cmdline." (evil-visual-char (- (1+ (point)) length) (point)))) (apply original args))) - (advice-add 'evil-mc-find-and-goto-match :around #'my/evil-mc-keep-visual-selection)) + (advice-add 'evil-mc-find-and-goto-match :around #'my/evil-mc-keep-visual-selection) + (advice-add 'evil-mc-make-all-cursors :around #'my/evil-mc-keep-visual-selection)) (use-package flash :ensure (:host github :repo "Prgebish/flash") @@ -3893,6 +3927,7 @@ place. `C-c C-c' commits, `C-c C-k' aborts." (kbd "g S") #'evil-Surround-edit)) (evil-define-key 'insert 'global (kbd "C-w") evil-window-map) +(evil-define-key 'motion 'global (kbd "C-v") #'my/evil-mc-visual-block) (keymap-global-set "M-b" #'my/quick-access) (evil-define-key '(normal visual motion insert emacs) 'global @@ -5059,8 +5094,12 @@ opening another file in same project does not re-notify." (use-package justl :ensure t :commands (justl justl-exec-recipe-in-dir justl-exec-default-recipe) + :hook ((justl-mode . my/envrc-project-buffer) + (justl-module-mode . my/envrc-project-buffer)) :custom (justl-recipe-width 20) - (justl-per-recipe-buffer nil)) + (justl-per-recipe-buffer nil) + :config + (inheritenv-add-advice 'justl--make-process)) (provide 'init) @@ -3342,6 +3342,39 @@ BODY is the xonsh script. PARAMS may include :dir and :cmdline." :after evil :config (global-evil-mc-mode 1) + + (defvar my/evil-mc-visual-map nil) + (setq my/evil-mc-visual-map (make-sparse-keymap)) + (keymap-set my/evil-mc-visual-map "a" #'evil-mc-make-all-cursors) + (keymap-set my/evil-mc-visual-map "q" #'my/evil-mc-quit) + (keymap-set my/evil-mc-visual-map "n" #'evil-mc-make-and-goto-next-match) + (keymap-set my/evil-mc-visual-map "p" #'evil-mc-make-and-goto-prev-match) + (keymap-set my/evil-mc-visual-map "C-n" #'my/evil-mc-skip-next-match) + (keymap-set my/evil-mc-visual-map "C-p" #'my/evil-mc-skip-prev-match) + + (evil-define-command my/evil-mc-visual-block () + :keep-visual t + (interactive) + (call-interactively #'evil-visual-block) + (when (evil-visual-state-p) + (set-transient-map my/evil-mc-visual-map #'evil-visual-state-p))) + + (defun my/evil-mc-quit () + (interactive) + (evil-mc-undo-all-cursors) + (evil-exit-visual-state)) + + (evil-define-command my/evil-mc-skip-next-match () + :repeat ignore + :evil-mc t + (evil-mc-make-and-goto-next-match) + (evil-mc-skip-and-goto-next-match)) + + (evil-define-command my/evil-mc-skip-prev-match () + :repeat ignore + :evil-mc t + (evil-mc-make-and-goto-prev-match) + (evil-mc-skip-and-goto-prev-match)) (defun my/evil-visual-block-p () (and (bound-and-true-p evil-visual-selection) @@ -3369,7 +3402,7 @@ BODY is the xonsh script. PARAMS may include :dir and :cmdline." #+begin_src emacs-lisp (with-eval-after-load 'evil-mc (defun my/evil-mc-keep-visual-selection (original &rest args) - (if (and (evil-visual-state-p) (eq evil-visual-selection 'char)) + (if (evil-visual-state-p) (let* ((range (evil-visual-range)) (length (if (evil-mc-has-pattern-p) (evil-mc-get-pattern-length) (- (cadr range) (car range))))) (prog1 (apply original args) @@ -3383,7 +3416,8 @@ BODY is the xonsh script. PARAMS may include :dir and :cmdline." (evil-visual-char (- (1+ (point)) length) (point)))) (apply original args))) - (advice-add 'evil-mc-find-and-goto-match :around #'my/evil-mc-keep-visual-selection)) + (advice-add 'evil-mc-find-and-goto-match :around #'my/evil-mc-keep-visual-selection) + (advice-add 'evil-mc-make-all-cursors :around #'my/evil-mc-keep-visual-selection)) #+end_src * flash @@ -4657,6 +4691,7 @@ place. `C-c C-c' commits, `C-c C-k' aborts." (kbd "g S") #'evil-Surround-edit)) (evil-define-key 'insert 'global (kbd "C-w") evil-window-map) +(evil-define-key 'motion 'global (kbd "C-v") #'my/evil-mc-visual-block) (keymap-global-set "M-b" #'my/quick-access) (evil-define-key '(normal visual motion insert emacs) 'global @@ -6056,9 +6091,13 @@ Privileged ZFS operations stay non-interactive by default. Unlocking runs authen (use-package justl :ensure t :commands (justl justl-exec-recipe-in-dir justl-exec-default-recipe) + :hook ((justl-mode . my/envrc-project-buffer) + (justl-module-mode . my/envrc-project-buffer)) :custom (justl-recipe-width 20) - (justl-per-recipe-buffer nil)) + (justl-per-recipe-buffer nil) + :config + (inheritenv-add-advice 'justl--make-process)) #+end_src * provide init diff --git a/themes/tinty-theme.el b/themes/tinty-theme.el index 78929ca..1586d15 100644 --- a/themes/tinty-theme.el +++ b/themes/tinty-theme.el @@ -64,71 +64,71 @@ (deftheme tinty "tinty theme with proper color contrast." - :background-mode 'light + :background-mode 'dark :kind 'color-scheme) (let* (;; Tinted8 UI surface colors - (ui-bg "#f5f5f5") - (ui-fg "#1f1f1f") - (ui-fg-dim "#4f4f4f") + (ui-bg "#22212c") + (ui-fg "#f8f8f2") + (ui-fg-dim "#babaab") ;; Use dim foreground for borders/muted chrome so they stay visible in ;; light variants (the raw border color is nearly white on latte). - (ui-border "#4f4f4f") - (ui-line-highlight "#cfcfde") - (ui-bg-dark "#e5e5e5") - (ui-bg-light "#c5c5c5") + (ui-border "#babaab") + (ui-line-highlight "#454158") + (ui-bg-dark "#201f2e") + (ui-bg-light "#36334c") ;; Tinted8 UI accent/status colors - (ui-accent "#686e93") - (ui-link "#036a96") - (ui-info "#336699") - (ui-error "#cb3a2a") - (ui-success "#14710a") - (ui-warning "#a34d14") + (ui-accent "#b4befe") + (ui-link "#80ffea") + (ui-info "#8c78f0") + (ui-error "#ff9580") + (ui-success "#8aff80") + (ui-warning "#ffca80") ;; Tinted8 UI container colors (for BACKGROUNDS only) - (ui-selection-bg "#cfcfde") - (ui-selection-fg "#1f1f1f") - (ui-button-bg "#d5d5d5") - (ui-button-fg "#1f1f1f") - (ui-tooltip-bg "#e5e5e5") - (ui-tooltip-fg "#1f1f1f") - (ui-active-text-bg "#cfcfde") - (ui-active-text-fg "#2f2f2f") - (ui-search-bg "#e5e5e5") - (ui-search-fg "#2f2f2f") + (ui-selection-bg "#454158") + (ui-selection-fg "#f8f8f2") + (ui-button-bg "#2b293d") + (ui-button-fg "#f8f8f2") + (ui-tooltip-bg "#201f2e") + (ui-tooltip-fg "#f8f8f2") + (ui-active-text-bg "#454158") + (ui-active-text-fg "#ededde") + (ui-search-bg "#201f2e") + (ui-search-fg "#ededde") ;; Tinted8 syntax colors ;; The builder already corrects syntax colors for text contrast, including light variants. - (syntax-comment "#635d97") - (syntax-documentation "#635d97") - (syntax-constant "#a34d14") - (syntax-function "#14710a") - (syntax-keyword "#a3144d") - (syntax-string "#846e15") - (syntax-type "#036a96") + (syntax-comment "#8a83b4") + (syntax-documentation "#8a83b4") + (syntax-constant "#ffca80") + (syntax-function "#8aff80") + (syntax-keyword "#ff80bf") + (syntax-string "#ffff80") + (syntax-type "#80ffea") ;; Give variables/imported names a distinct hue instead of blending into ;; the default foreground. - (syntax-variable "#1f1f1f") - (syntax-warning "#cb3a2a") - (syntax-preprocessor "#336699") - (syntax-annotation "#846e15") - (syntax-attribute "#036a96") - (syntax-number "#a34d14") - (syntax-operator "#036a96") + (syntax-variable "#f8f8f2") + (syntax-warning "#ff9580") + (syntax-preprocessor "#8c78f0") + (syntax-annotation "#ffff80") + (syntax-attribute "#80ffea") + (syntax-number "#ffca80") + (syntax-operator "#80ffea") ;; Raw palette colors for rainbow headings, delimiters, terminal faces, ;; and anywhere else we need a predictable hue cycle. - (pal-red "#cb3a2a") - (pal-orange "#a34d14") - (pal-yellow "#846e15") - (pal-green "#14710a") - (pal-cyan "#036a96") - (pal-blue "#644ac9") - (pal-magenta "#a3144d") - (pal-gray "#635d97") - (pal-white "#6e6e6e") - (pal-black "#1f1f1f") + (pal-red "#ff9580") + (pal-orange "#ffca80") + (pal-yellow "#ffff80") + (pal-green "#8aff80") + (pal-cyan "#80ffea") + (pal-blue "#9580ff") + (pal-magenta "#ff80bf") + (pal-gray "#8a83b4") + (pal-white "#f8f8f2") + (pal-black "#8a898f") (h1 (if tinty-scale-headings tinty-height-1 1.0)) (h2 (if tinty-scale-headings tinty-height-2 1.0)) (h3 (if tinty-scale-headings tinty-height-3 1.0)) @@ -347,13 +347,13 @@ ;; === Terminal colors - mapped to the palette so they stay correct in both variants === `(term-color-black ((t (:foreground ,ui-bg-dark :background ,ui-bg-dark)))) - `(term-color-red ((t (:foreground "#cb3a2a" :background "#cb3a2a")))) - `(term-color-green ((t (:foreground "#14710a" :background "#14710a")))) - `(term-color-yellow ((t (:foreground "#846e15" :background "#846e15")))) - `(term-color-blue ((t (:foreground "#644ac9" :background "#644ac9")))) - `(term-color-magenta ((t (:foreground "#a3144d" :background "#a3144d")))) - `(term-color-cyan ((t (:foreground "#036a96" :background "#036a96")))) - `(term-color-white ((t (:foreground "#6e6e6e" :background "#6e6e6e")))) + `(term-color-red ((t (:foreground "#ff9580" :background "#ff9580")))) + `(term-color-green ((t (:foreground "#8aff80" :background "#8aff80")))) + `(term-color-yellow ((t (:foreground "#ffff80" :background "#ffff80")))) + `(term-color-blue ((t (:foreground "#9580ff" :background "#9580ff")))) + `(term-color-magenta ((t (:foreground "#ff80bf" :background "#ff80bf")))) + `(term-color-cyan ((t (:foreground "#80ffea" :background "#80ffea")))) + `(term-color-white ((t (:foreground "#f8f8f2" :background "#f8f8f2")))) ;; === EShell === `(eshell-prompt ((t (:foreground ,ui-accent :weight bold)))) @@ -559,14 +559,14 @@ `(ansi-color-magenta ((t (:foreground ,pal-magenta :background ,pal-magenta)))) `(ansi-color-cyan ((t (:foreground ,pal-cyan :background ,pal-cyan)))) `(ansi-color-white ((t (:foreground ,pal-white :background ,pal-white)))) - `(ansi-color-bright-black ((t (:foreground "#4f4f4f" :background "#4f4f4f")))) - `(ansi-color-bright-red ((t (:foreground "#cb3a2a" :background "#cb3a2a")))) - `(ansi-color-bright-green ((t (:foreground "#14710a" :background "#14710a")))) - `(ansi-color-bright-yellow ((t (:foreground "#846e15" :background "#846e15")))) - `(ansi-color-bright-blue ((t (:foreground "#644ac9" :background "#644ac9")))) - `(ansi-color-bright-magenta ((t (:foreground "#a3144d" :background "#a3144d")))) - `(ansi-color-bright-cyan ((t (:foreground "#036a96" :background "#036a96")))) - `(ansi-color-bright-white ((t (:foreground "#707070" :background "#707070")))) + `(ansi-color-bright-black ((t (:foreground "#8a8997" :background "#8a8997")))) + `(ansi-color-bright-red ((t (:foreground "#ff9580" :background "#ff9580")))) + `(ansi-color-bright-green ((t (:foreground "#8aff80" :background "#8aff80")))) + `(ansi-color-bright-yellow ((t (:foreground "#ffff80" :background "#ffff80")))) + `(ansi-color-bright-blue ((t (:foreground "#9580ff" :background "#9580ff")))) + `(ansi-color-bright-magenta ((t (:foreground "#ff80bf" :background "#ff80bf")))) + `(ansi-color-bright-cyan ((t (:foreground "#80ffea" :background "#80ffea")))) + `(ansi-color-bright-white ((t (:foreground "#ededde" :background "#ededde")))) ;; === Anzu === `(anzu-replace-highlight ((t (:background ,ui-line-highlight :foreground ,ui-error :weight bold :strike-through t)))) @@ -1368,14 +1368,14 @@ ;; === Term (extended) === `(term ((t (:foreground ,ui-fg :background ,ui-bg)))) `(term-bold ((t (:weight bold)))) - `(term-color-bright-black ((t (:foreground "#4f4f4f" :background "#4f4f4f")))) - `(term-color-bright-red ((t (:foreground "#cb3a2a" :background "#cb3a2a")))) - `(term-color-bright-green ((t (:foreground "#14710a" :background "#14710a")))) - `(term-color-bright-yellow ((t (:foreground "#846e15" :background "#846e15")))) - `(term-color-bright-blue ((t (:foreground "#644ac9" :background "#644ac9")))) - `(term-color-bright-magenta ((t (:foreground "#a3144d" :background "#a3144d")))) - `(term-color-bright-cyan ((t (:foreground "#036a96" :background "#036a96")))) - `(term-color-bright-white ((t (:foreground "#707070" :background "#707070")))) + `(term-color-bright-black ((t (:foreground "#8a8997" :background "#8a8997")))) + `(term-color-bright-red ((t (:foreground "#ff9580" :background "#ff9580")))) + `(term-color-bright-green ((t (:foreground "#8aff80" :background "#8aff80")))) + `(term-color-bright-yellow ((t (:foreground "#ffff80" :background "#ffff80")))) + `(term-color-bright-blue ((t (:foreground "#9580ff" :background "#9580ff")))) + `(term-color-bright-magenta ((t (:foreground "#ff80bf" :background "#ff80bf")))) + `(term-color-bright-cyan ((t (:foreground "#80ffea" :background "#80ffea")))) + `(term-color-bright-white ((t (:foreground "#ededde" :background "#ededde")))) ;; === Transient === `(transient-heading ((t (:foreground ,ui-accent :weight bold)))) |
