;;; thanos-aesthetics.el --- -*- lexical-binding: t; -*- ;; Copyright (C) 2023 Thanos Apollo ;; Author: Thanos Apollo ;; Keywords: ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; ╭━━━━┳╮╱╱╱╱╱╱╱╱╱╱╱╱╱╱╭━━━╮╱╱╱╱╱╭╮╭╮╱╱╱╱╱╱╱╱╭━━━╮ ;; ┃╭╮╭╮┃┃╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃╭━╮┃╱╱╱╱╱┃┃┃┃╱╱╱╱╱╱╱╱┃╭━━╯ ;; ╰╯┃┃╰┫╰━┳━━┳━╮╭━━┳━━╮┃┃╱┃┣━━┳━━┫┃┃┃╭━━╮╱╱╱╱┃╰━━┳╮╭┳━━┳━━┳━━╮ ;; ╱╱┃┃╱┃╭╮┃╭╮┃╭╮┫╭╮┃━━┫┃╰━╯┃╭╮┃╭╮┃┃┃┃┃╭╮┃╭━━╮┃╭━━┫╰╯┃╭╮┃╭━┫━━┫ ;; ╱╱┃┃╱┃┃┃┃╭╮┃┃┃┃╰╯┣━━┃┃╭━╮┃╰╯┃╰╯┃╰┫╰┫╰╯┃╰━━╯┃╰━━┫┃┃┃╭╮┃╰━╋━━┃ ;; ╱╱╰╯╱╰╯╰┻╯╰┻╯╰┻━━┻━━╯╰╯╱╰┫╭━┻━━┻━┻━┻━━╯╱╱╱╱╰━━━┻┻┻┻╯╰┻━━┻━━╯ ;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃┃ ;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰╯ ;;; Code: (setf inhibit-startup-message t) (setf initial-scratch-message nil) ;; Transparency (add-to-list 'default-frame-alist '(alpha-background . 90)) (add-to-list 'default-frame-alist '(alpha 90 90)) (when (equal is-phone nil) (scroll-bar-mode -1) (set-fringe-mode 10)) (tool-bar-mode -1) (tooltip-mode -1) (menu-bar-mode -1) (which-key-mode 1) (blink-cursor-mode -1) (menu-bar--visual-line-mode-enable) (global-visual-line-mode 1) ;; Set emojis for emacs 29 (require 'emojify) (setf global-emojify-mode 1) (setf visible-bell t) (column-number-mode) (global-display-line-numbers-mode 1) (menu-bar--display-line-numbers-mode-relative) ;;Disable line numbers for some modes (defvar thanos/no-line-number-modes '(pdf-view-mode-hook org-mode-hook term-mode-hook shell-mode-hook eshell-mode-hook vterm-mode-hook elfeed vterm-mode telega-chat-mode-hook telega-root-mode-hook nov-mode-hook transmission-mode-hook)) (cl-loop for mode in thanos/no-line-number-modes do (add-hook mode (lambda () (display-line-numbers-mode 0)))) ;; Set font-size for each device (custom-set-faces (if is-hermes '(default ((t (:inherit nil :height 120 :family "Jetbrains Mono")))) '(default ((t (:inherit nil :height 130 :family "Jetbrains Mono")))))) ;; Modus-themes configuration (setf modus-themes-italic-constructs t modus-themes-bold-constructs nil modus-themes-mixed-fonts nil modus-themes-subtle-line-numbers t modus-themes-intense-mouseovers nil modus-themes-deuteranopia t modus-themes-tabs-accented t modus-themes-variable-pitch-ui nil modus-themes-inhibit-reload t ; only applies to `customize-set-variable' and related modus-themes-fringes nil ; {nil,'subtle,'intense} ;; Options for `modus-themes-lang-checkers' are either nil (the ;; default), or a list of properties that may include any of those ;; symbols: `straight-underline', `text-also', `background', ;; `intense' OR `faint'. modus-themes-lang-checkers nil ;; Options for `modus-themes-mode-line' are either nil, or a list ;; that can combine any of `3d' OR `moody', `borderless', ;; `accented', a natural number for extra padding (or a cons cell ;; of padding and NATNUM), and a floating point for the height of ;; the text relative to the base font size (or a cons cell of ;; height and FLOAT) modus-themes-mode-line '(accented borderless (padding . 2) (height . 1.0)) ;; Same as above: ;; modus-themes-mode-line '(accented borderless 4 0.9) ;; Options for `modus-themes-markup' are either nil, or a list ;; that can combine any of `bold', `italic', `background', ;; `intense'. modus-themes-markup '(background bold italic) ;; Options for `modus-themes-syntax' are either nil (the default), ;; or a list of properties that may include any of those symbols: ;; `faint', `yellow-comments', `green-strings', `alt-syntax' modus-themes-syntax '(green-strings) ;; Options for `modus-themes-hl-line' are either nil (the default), ;; or a list of properties that may include any of those symbols: ;; `accented', `underline', `intense' modus-themes-hl-line '(underline accented) ;; Options for `modus-themes-paren-match' are either nil (the ;; default), or a list of properties that may include any of those ;; symbols: `bold', `intense', `underline' modus-themes-paren-match '(bold intense) ;; Options for `modus-themes-links' are either nil (the default), ;; or a list of properties that may include any of those symbols: ;; `neutral-underline' OR `no-underline', `faint' OR `no-color', ;; `bold', `italic', `background' modus-themes-links '(neutral-underline italic) ;; Options for `modus-themes-box-buttons' are either nil (the ;; default), or a list that can combine any of `flat', `accented', ;; `faint', `variable-pitch', `underline', `all-buttons', the ;; symbol of any font weight as listed in `modus-themes-weights', ;; and a floating point number (e.g. 0.9) for the height of the ;; button's text. modus-themes-box-buttons '(variable-pitch flat faint 0.9) ;; Options for `modus-themes-prompts' are either nil (the ;; default), or a list of properties that may include any of those ;; symbols: `background', `bold', `gray', `intense', `italic' modus-themes-prompts '(intense) ;; The `modus-themes-completions' is an alist that reads three ;; keys: `matches', `selection', `popup'. Each accepts a nil ;; value (or empty list) or a list of properties that can include ;; any of the following (for WEIGHT read further below): ;; ;; `matches' - `background', `intense', `underline', `italic', WEIGHT ;; `selection' - `accented', `intense', `underline', `italic', `text-also' WEIGHT ;; `popup' - same as `selected' ;; `t' - applies to any key not explicitly referenced (check docs) ;; ;; WEIGHT is a symbol such as `semibold', `light', or anything ;; covered in `modus-themes-weights'. Bold is used in the absence ;; of an explicit WEIGHT. modus-themes-completions '((matches . (bold underline)) (selection . (semibold accented)) (popup . (accented intense))) modus-themes-mail-citations nil ; {nil,'intense,'faint,'monochrome} ;; Options for `modus-themes-region' are either nil (the default), ;; or a list of properties that may include any of those symbols: ;; `no-extend', `bg-only', `accented' modus-themes-region '(bg-only no-extend) ;; Options for `modus-themes-diffs': nil, 'desaturated, 'bg-only modus-themes-diffs 'desaturated modus-themes-org-blocks 'gray-background ; {nil,'gray-background,'tinted-background} modus-themes-org-agenda ; this is an alist: read the manual or its doc string '((header-block . (variable-pitch 1.3)) (header-date . (grayscale workaholic bold-today 1.1)) (event . (accented varied)) (scheduled . uniform) (habit . traffic-light)) modus-themes-headings ; this is an alist: read the manual or its doc string '((1 . (overline background variable-pitch 1.3)) (2 . (rainbow overline 1.1)) (t . (semibold)))) (load-theme 'modus-vivendi) (define-key thanos/applications-map (kbd ".") 'modus-themes-toggle) ;; Custom function to load theme (defun thanos/load-theme () "Disable current theme and load a new one." (interactive) (let ((theme (intern (completing-read "Theme: " (custom-available-themes))))) (disable-theme (car custom-enabled-themes)) (load-theme theme t))) (define-key thanos/applications-map (kbd "t") 'thanos/load-theme) ;; Don't display battery-mode on desktop (if is-zeus (display-battery-mode 0) (display-battery-mode 1)) ;; UI -- Vertico, consult, marginalia (vertico-mode) (savehist-mode) (define-key global-map (kbd "C-x b") 'consult-buffer) (define-key global-map (kbd "C-c m") 'consult-imenu) (add-hook 'marginalia-mode-hook #'nerd-icons-completion-marginalia-setup) (marginalia-mode) ;; Helpful (define-key global-map (kbd "C-h f") #'helpful-callable) (define-key global-map (kbd "C-h v") #'helpful-variable) (define-key global-map (kbd "C-h k") #'helpful-key) (define-key global-map (kbd "C-h x") #'helpful-command) (define-key global-map (kbd "C-c C-d") #'helpful-at-point) (define-key global-map (kbd "C-h F") #'helpful-function) ;; ibuffer (global-set-key (kbd "C-x C-b") 'ibuffer) (add-hook 'ibuffer-mode-hook 'nerd-icons-ibuffer-mode) ;; (defun thanos/markdown-theme () ;; "Adjust height for markdown" ;; (interactive) ;; (dolist ;; (face ;; '(markdown-header-face-1 :height 2.0)))) (require 'markdown-mode) (setq markdown-header-scaling t) (add-to-list 'auto-mode-alist '("\\.md\\'" . gfm-mode)) (setq markdown-command "multimarkdown") (electric-pair-mode 1) (auto-insert-mode 1) (global-flycheck-mode) (global-set-key (kbd "M-.") 'xref-find-definitions) (global-set-key (kbd "C-c L") 'display-line-numbers-mode) ;; wallpapers (defvar wallpapers-dir "~/wallpapers/") (defun thanos/wallpaper-set (image) "Set IMAGE as wallpaper, using feh." (call-process-shell-command (concat "xwallpaper --focus " wallpapers-dir image) nil 0)) (defun thanos/wallpaper-random () "Set random wallpaper." (interactive) (let ((wallpapers (directory-files "~/wallpapers" nil "^[^.].*"))) (thanos/wallpaper-set (nth (random (length wallpapers)) wallpapers)))) (defun thanos/wallpaper-select () "Set wallpaper." (interactive) (let ((wallpaper (completing-read "Choose wallpaper: " (directory-files wallpapers-dir nil "^[^.].*")))) (thanos/wallpaper-set wallpaper))) (define-key thanos/applications-map (kbd "w") 'thanos/wallpaper-select) ;; Symbols (add-hook 'emacs-lisp-mode-hook 'prettify-symbols-mode) (provide 'thanos-aesthetics) ;;; thanos-aesthetics.el ends here