diff --git a/user/app/emacs/default.nix b/user/app/emacs/default.nix index 440f4e3d..f02563b5 100644 --- a/user/app/emacs/default.nix +++ b/user/app/emacs/default.nix @@ -9,7 +9,7 @@ command-log-mode vertico corfu hotfuzz orderless evil evil-collection evil-snipe evil-owl evil-vimish-fold - dashboard doom-modeline + dashboard doom-themes doom-modeline nerd-icons nerd-icons-dired nerd-icons-corfu nerd-icons-ibuffer nerd-icons-completion yasnippet @@ -23,4 +23,8 @@ }) ]; home.file.".config/emacs/init.el".source = ./init.el; + home.file.".config/emacs/themes/doom-stylix-theme.el".source = config.lib.stylix.colors { + template = builtins.readFile ./doom-stylix-theme.el.mustache; + extension = ".el"; + }; } diff --git a/user/app/emacs/doom-stylix-theme.el.mustache b/user/app/emacs/doom-stylix-theme.el.mustache new file mode 100644 index 00000000..4ab05ca3 --- /dev/null +++ b/user/app/emacs/doom-stylix-theme.el.mustache @@ -0,0 +1,177 @@ +;;; doom-stylix-theme.el --- stylix template created from doom-one -*- lexical-binding: t; no-byte-compile: t; -*- +;; +;; Author: Emmet K +;; Maintainer: Emmet K +;; Source: https://github.com/doomemacs/themes +;; +;;; Commentary: +;; +;; Stylix template for Doom Emacs. +;; +;;; Code: + +(require 'doom-themes) + +;; +;;; Variables + +(defgroup doom-stylix-theme nil + "Options for the `doom-one' theme." + :group 'doom-themes) + +(defcustom doom-stylix-brighter-modeline nil + "If non-nil, more vivid colors will be used to style the mode-line." + :group 'doom-stylix-theme + :type 'boolean) + +(defcustom doom-stylix-brighter-comments nil + "If non-nil, comments will be highlighted in more vivid colors." + :group 'doom-stylix-theme + :type 'boolean) + +(defcustom doom-stylix-padded-modeline doom-themes-padded-modeline + "If non-nil, adds a 4px padding to the mode-line. +Can be an integer to determine the exact padding." + :group 'doom-stylix-theme + :type '(choice integer boolean)) + + +;; +;;; Theme definition + +(def-doom-theme doom-stylix + "A theme generated from current stylix theme." + + ;; name default 256 16 + ((bg '("#{{base00-hex}}" "black" "black" )) + (fg '("#{{base05-hex}}" "#bfbfbf" "brightwhite" )) + + ;; These are off-color variants of bg/fg, used primarily for `solaire-mode', + ;; but can also be useful as a basis for subtle highlights (e.g. for hl-line + ;; or region), especially when paired with the `doom-darken', `doom-lighten', + ;; and `doom-blend' helper functions. + (bg-alt '("#{{base01-hex}}" "black" "black" )) + (fg-alt '("#{{base07-hex}}" "#2d2d2d" "white" )) + + ;; These should represent a spectrum from bg to fg, where base0 is a starker + ;; bg and base8 is a starker fg. For example, if bg is light grey and fg is + ;; dark grey, base0 should be white and base8 should be black. + (base0 '("#{{base00-hex}}" "black" "black" )) + (base1 '("#{{base01-hex}}" "#1e1e1e" "brightblack" )) + (base2 '("#{{base01-hex}}" "#2e2e2e" "brightblack" )) + (base3 '("#{{base02-hex}}" "#262626" "brightblack" )) + (base4 '("#{{base03-hex}}" "#3f3f3f" "brightblack" )) + (base5 '("#{{base04-hex}}" "#525252" "brightblack" )) + (base6 '("#{{base05-hex}}" "#6b6b6b" "brightblack" )) + (base7 '("#{{base06-hex}}" "#979797" "brightblack" )) + (base8 '("#{{base07-hex}}" "#dfdfdf" "white" )) + + (grey base4) + (red '("#{{base08-hex}}" "#ff6655" "red" )) + (orange '("#{{base09-hex}}" "#dd8844" "brightred" )) + (green '("#{{base0B-hex}}" "#99bb66" "green" )) + (teal '("#{{base0C-hex}}" "#44b9b1" "brightgreen" )) + (yellow '("#{{base0A-hex}}" "#ECBE7B" "yellow" )) + (blue '("#{{base0E-hex}}" "#51afef" "brightblue" )) + (dark-blue '("#{{base0E-hex}}" "#2257A0" "blue" )) + (magenta '("#{{base0F-hex}}" "#c678dd" "brightmagenta")) + (violet '("#{{base0F-hex}}" "#a9a1e1" "magenta" )) + (cyan '("#{{base0D-hex}}" "#46D9FF" "brightcyan" )) + (dark-cyan '("#{{base0C-hex}}" "#5699AF" "cyan" )) + + ;; These are the "universal syntax classes" that doom-themes establishes. + ;; These *must* be included in every doom themes, or your theme will throw an + ;; error, as they are used in the base theme defined in doom-themes-base. + (highlight blue) + (vertical-bar (doom-darken base1 0.1)) + (selection dark-blue) + (builtin magenta) + (comments (if doom-stylix-brighter-comments dark-cyan base5)) + (doc-comments (doom-lighten (if doom-stylix-brighter-comments dark-cyan base5) 0.25)) + (constants violet) + (functions magenta) + (keywords blue) + (methods cyan) + (operators blue) + (type yellow) + (strings green) + (variables (doom-lighten magenta 0.4)) + (numbers orange) + (region `(,(doom-lighten (car bg-alt) 0.15) ,@(doom-lighten (cdr base1) 0.35))) + (error red) + (warning yellow) + (success green) + (vc-modified orange) + (vc-added green) + (vc-deleted red) + + ;; These are extra color variables used only in this theme; i.e. they aren't + ;; mandatory for derived themes. + (modeline-fg fg) + (modeline-fg-alt base5) + (modeline-bg (if doom-stylix-brighter-modeline + (doom-darken blue 0.45) + (doom-darken bg-alt 0.1))) + (modeline-bg-alt (if doom-stylix-brighter-modeline + (doom-darken blue 0.475) + `(,(doom-darken (car bg-alt) 0.15) ,@(cdr bg)))) + (modeline-bg-inactive `(,(car bg-alt) ,@(cdr base1))) + (modeline-bg-inactive-alt `(,(doom-darken (car bg-alt) 0.1) ,@(cdr bg))) + + (-modeline-pad + (when doom-stylix-padded-modeline + (if (integerp doom-stylix-padded-modeline) doom-stylix-padded-modeline 4)))) + + + ;;;; Base theme face overrides + (((line-number &override) :foreground base4) + ((line-number-current-line &override) :foreground fg) + ((font-lock-comment-face &override) + :background (if doom-stylix-brighter-comments (doom-lighten bg 0.05))) + (mode-line + :background modeline-bg :foreground modeline-fg + :box (if -modeline-pad `(:line-width ,-modeline-pad :color ,modeline-bg))) + (mode-line-inactive + :background modeline-bg-inactive :foreground modeline-fg-alt + :box (if -modeline-pad `(:line-width ,-modeline-pad :color ,modeline-bg-inactive))) + (mode-line-emphasis :foreground (if doom-stylix-brighter-modeline base8 highlight)) + + ;;;; css-mode / scss-mode + (css-proprietary-property :foreground orange) + (css-property :foreground green) + (css-selector :foreground blue) + ;;;; doom-modeline + (doom-modeline-bar :background (if doom-stylix-brighter-modeline modeline-bg highlight)) + (doom-modeline-buffer-file :inherit 'mode-line-buffer-id :weight 'bold) + (doom-modeline-buffer-path :inherit 'mode-line-emphasis :weight 'bold) + (doom-modeline-buffer-project-root :foreground green :weight 'bold) + ;;;; elscreen + (elscreen-tab-other-screen-face :background "#{{base01-hex}}" :foreground "#{{base06-hex}}") + ;;;; ivy + (ivy-current-match :background dark-blue :distant-foreground base0 :weight 'normal) + ;;;; LaTeX-mode + (font-latex-math-face :foreground green) + ;;;; markdown-mode + (markdown-markup-face :foreground base5) + (markdown-header-face :inherit 'bold :foreground red) + ((markdown-code-face &override) :background (doom-lighten base3 0.05)) + ;;;; org-mode + (org-block :background (doom-darken bg 0.05 ) :extend t) + (org-code :background (doom-darken bg 0.05 ) :extend t) + ;;;; rjsx-mode + (rjsx-tag :foreground red) + (rjsx-attr :foreground orange) + ;;;; solaire-mode + (solaire-mode-line-face + :inherit 'mode-line + :background modeline-bg-alt + :box (if -modeline-pad `(:line-width ,-modeline-pad :color ,modeline-bg-alt))) + (solaire-mode-line-inactive-face + :inherit 'mode-line-inactive + :background modeline-bg-inactive-alt + :box (if -modeline-pad `(:line-width ,-modeline-pad :color ,modeline-bg-inactive-alt)))) + + ;;;; Base theme variable overrides- + ()) + +;;; doom-stylix-theme.el ends here \ No newline at end of file diff --git a/user/app/emacs/init.el b/user/app/emacs/init.el index 71e4eefc..5e285553 100644 --- a/user/app/emacs/init.el +++ b/user/app/emacs/init.el @@ -1,4 +1,16 @@ -; I want declarative config +;;; init.el --- librephoenix's emacs config -*- lexical-binding: t; no-byte-compile: t; -*- +;; +;; Author: Emmet K +;; Maintainer: Emmet K +;; Source: https://github.com/doomemacs/themes +;; +;;; Commentary: +;; +;; LibrePhoenix's Emacs config. +;; +;;; Code: + +;I want declarative config (setq custom-file "/dev/null") ; Text @@ -12,11 +24,15 @@ (set-fringe-mode 10) ; Give some breathing room (blink-cursor-mode 0) ; No blinking (global-hl-line-mode) ; Where am I? +(pixel-scroll-precision-mode 1) ; This is kinda epic + +;; I prefer visual lines +(setq display-line-numbers-type 'visual + line-move-visual t) +(add-hook 'prog-mode-hook 'display-line-numbers-mode) (menu-bar-mode -1) ; Disable the menu bar -(load-theme 'wombat) - (set-frame-parameter nil 'alpha-background 85) (add-to-list 'default-frame-alist '(alpha-background . 85)) @@ -64,6 +80,7 @@ (evil-set-leader nil (kbd "C-SPC")) (evil-set-leader 'normal (kbd "SPC")) (evil-set-leader 'motion (kbd "SPC")) + (setq evil-respect-visual-line-mode t) (evil-mode 1)) (use-package evil-collection @@ -103,12 +120,41 @@ (add-hook 'git-commit-mode-hook 'evil-insert-state) (use-package nerd-icons - :ensure t) - -(use-package doom-modeline :ensure t - :init (doom-modeline-mode 1) - :custom ((doom-modeline-height 15))) + :config + (setq doom-themes-enable-bold t + doom-themes-enable-italic t) + (setq custom-theme-directory "~/.config/emacs/themes") + (load-theme 'doom-stylix t) + ) + +(use-package dashboard + :ensure t + :config + (setq dashboard-banner-logo-title "Welcome to Nix Emacs") + (setq dashboard-startup-banner 2) + (setq dashboard-set-heading-icons t) + (setq dashboard-set-file-icons t) + (setq dashboard-set-navigator t) + (setq dashboard-items '()) + (setq dashboard-center-content t) + (setq dashboard-icon-type 'nerd-icons) ;; use `nerd-icons' package + (setq dashboard-footer-messages '("Here to do customizing, or actual work?" + "M-x insert-inspiring-message" + "My software never has bugs. It just develops random features." + "Dad, what are clouds made of? Linux servers, mostly." + "There is no place like ~" + "~ sweet ~" + "sudo chown -R us ./allyourbase" + "I’ll tell you a DNS joke but it could take 24 hours for everyone to get it." + "I'd tell you a UDP joke, but you might not get it." + "I'll tell you a TCP joke. Do you want to hear it?")) + (setq dashboard-footer-icon + (nerd-icons-codicon "nf-cod-vm" + :height 1.0 + :v-adjust 0 + :face 'font-lock-keyword-face)) + (dashboard-setup-startup-hook)) ; Fix stupid backup confirmations (setq backup-directory-alist '("." "~/.emacs.d/cache/backups")) @@ -120,3 +166,12 @@ (evil-define-key 'normal 'global (kbd "fU") 'sudo-edit) (evil-define-key 'normal 'global (kbd "fu") 'sudo-edit-find-file) + +(use-package doom-themes + :ensure t + :init ) + +(use-package doom-modeline + :ensure t + :init (doom-modeline-mode 1) + :custom ((doom-modeline-height 15)))