diff --git a/flake.nix b/flake.nix index cb693914..fa055848 100644 --- a/flake.nix +++ b/flake.nix @@ -158,7 +158,18 @@ fira-mono fira-code fira-code-symbols - (nerdfonts.override { fonts = [ "FiraCode" ]; }) + (nerdfonts.override { + fonts = [ + "FiraCode" + "FiraMono" + "DejaVuSansMono" + "Noto" + "ComicShannsMono" + "NerdFontsSymbolsOnly" + ]; + }) + emacs-all-the-icons-fonts + weather-icons noto-fonts noto-fonts-cjk noto-fonts-emoji diff --git a/home/emacs/init.el b/home/emacs/init.el index 68b9d35d..739d393f 100644 --- a/home/emacs/init.el +++ b/home/emacs/init.el @@ -32,7 +32,14 @@ (setq user-full-name "Evie Litherland-Smith" user-mail-address "evie@xenia.me.uk") +;; Set default coding system (especially for Windows) +(set-default-coding-systems 'utf-8) +(set-terminal-coding-system 'utf-8) +(set-keyboard-coding-system 'utf-8) + +(require 'custom-ui-config) (require 'custom-defaults-config) + (require 'custom-email-config) (require 'custom-feed-config) (require 'custom-ide-config) @@ -41,15 +48,9 @@ (require 'custom-org-config) (require 'custom-project-config) (require 'custom-social-config) -(require 'custom-ui-config) (require 'crafted-completion-config) (require 'crafted-ide-config) (require 'crafted-org-config) (require 'crafted-workspaces-config) (require 'crafted-writing-config) - -;; Set default coding system (especially for Windows) -(set-default-coding-systems 'utf-8) -(set-terminal-coding-system 'utf-8) -(set-keyboard-coding-system 'utf-8) diff --git a/home/emacs/modules/custom-email-config.el b/home/emacs/modules/custom-email-config.el index 2790e0a0..13dfe76e 100644 --- a/home/emacs/modules/custom-email-config.el +++ b/home/emacs/modules/custom-email-config.el @@ -3,7 +3,39 @@ message-sendmail-f-is-evil t message-sendmail-extra-arguments '("--read-envelope-from") message-send-mail-function #'message-send-mail-with-sendmail - message-kill-buffer-on-exit t) + message-kill-buffer-on-exit t + mail-user-agent 'mu4e-user-agent + read-mail-command 'mu4e + mu4e-maildir "~/Mail" + mu4e-attachment-dir "~/Downloads" + mu4e-get-mail-command "mbsync -a" + mu4e-update-interval (* 5 60) ; Every 5 minutes + mu4e-sent-messages-behavior 'sent + mu4e-change-filenames-when-moving t + mu4e-context-policy 'pick-first + mu4e-headers-thread-single-orphan-prefix '("─>" . "─▶") + mu4e-headers-thread-orphan-prefix '("┬>" . "┬▶ ") + mu4e-headers-thread-connection-prefix '("│ " . "│ ") + mu4e-headers-thread-first-child-prefix '("├>" . "├▶") + mu4e-headers-thread-child-prefix '("├>" . "├▶") + mu4e-headers-thread-last-child-prefix '("└>" . "╰▶") + mu4e-modeline-all-read '("R:" . "󰑇 ") + mu4e-modeline-all-clear '("C:" . "󰚭 ") + mu4e-modeline-new-items '("N:" . "󰎔 ") + mu4e-modeline-unread-items '("U:" . "󰮒 ") + mu4e-search-full-label '("F" . "󱊖 ") + mu4e-search-hide-label '("H" . "󰘓 ") + mu4e-search-related-label '("R" . "󰌹 ") + mu4e-search-skip-duplicates-label '("D" . "󰆑 ") + mu4e-search-threaded-label'("T" . "󱇫 ") + mu4e-alert-modeline-formatter 'mu4e-alert-default-mode-line-formatter + mu4e-headers-fields '((:human-date . 12) + (:flags . 6) + (:from-or-to . 25) + (:subject)) + mu4e-maildir-shortcuts '((:maildir "/Proton/Inbox/" :key ?p) + (:maildir "/iCloud/Inbox/" :key ?i) + (:maildir "/Outlook/Inbox/" :key ?o))) (when (require 'mu4e nil :noerror) (keymap-set global-map "C-c m m" #'mu4e) @@ -11,46 +43,11 @@ (keymap-set global-map "C-c m c" #'mu4e-compose-new) (when (require 'mu4e-alert nil :noerror) - (setq mu4e-alert-modeline-formatter 'mu4e-alert-default-mode-line-formatter) (mu4e-alert-set-default-style 'libnotify) (mu4e-alert-enable-notifications) (mu4e-alert-enable-mode-line-display)) - - (setq mu4e-maildir "~/Mail" - mu4e-attachment-dir "~/Downloads" - mu4e-get-mail-command "mbsync -a" - mu4e-update-interval (* 5 60) ; Every 5 minutes - mu4e-sent-messages-behavior 'sent - mu4e-change-filenames-when-moving t - mu4e-context-policy 'pick-first - sendmail-program (executable-find "msmtp") - send-mail-function #'smtpmail-send-it - message-sendmail-f-is-evil t - message-sendmail-extra-arguments '("--read-envelope-from") - message-send-mail-function #'message-send-mail-with-sendmail - mu4e-headers-thread-single-orphan-prefix '("─>" . "─▶") - mu4e-headers-thread-orphan-prefix '("┬>" . "┬▶ ") - mu4e-headers-thread-connection-prefix '("│ " . "│ ") - mu4e-headers-thread-first-child-prefix '("├>" . "├▶") - mu4e-headers-thread-child-prefix '("├>" . "├▶") - mu4e-headers-thread-last-child-prefix '("└>" . "╰▶") - mu4e-modeline-all-read '("R:" . "󰑇 ") - mu4e-modeline-all-clear '("C:" . "󰚭 ") - mu4e-modeline-new-items '("N:" . "󰎔 ") - mu4e-modeline-unread-items '("U:" . "󰮒 ") - mu4e-search-full-label '("F" . "󱊖 ") - mu4e-search-hide-label '("H" . "󰘓 ") - mu4e-search-related-label '("R" . "󰌹 ") - mu4e-search-skip-duplicates-label '("D" . "󰆑 ") - mu4e-search-threaded-label'("T" . "󱇫 ") - mu4e-headers-fields '((:human-date . 12) - (:flags . 6) - (:from-or-to . 25) - (:subject)) - mu4e-maildir-shortcuts '((:maildir "/Proton/Inbox/" :key ?p) - (:maildir "/iCloud/Inbox/" :key ?i) - (:maildir "/Outlook/Inbox/" :key ?o)) - mu4e-contexts (list + + (setq mu4e-contexts (list (make-mu4e-context :name "Proton" :match-func (lambda (msg) (when msg (string-prefix-p "/Proton" (mu4e-message-field msg :maildir)))) diff --git a/home/emacs/modules/custom-feed-config.el b/home/emacs/modules/custom-feed-config.el index 6fa4c348..8ae7df6d 100644 --- a/home/emacs/modules/custom-feed-config.el +++ b/home/emacs/modules/custom-feed-config.el @@ -1,10 +1,13 @@ +(let ((elfeed-base-directory "~/.elfeed")) + (setq elfeed-db-directory (expand-file-name "db" elfeed-base-directory) + elfeed-enclosure-default-dir (expand-file-name "enclosures" elfeed-base-directory) + rmh-elfeed-org-files (list (expand-file-name "feeds.org" elfeed-base-directory)))) + (when (require 'elfeed nil :noerror) - (let ((elfeed-base-directory "~/.elfeed")) - (setq elfeed-db-directory (expand-file-name "db" elfeed-base-directory) - elfeed-enclosure-default-dir (expand-file-name "enclosures" elfeed-base-directory) - rmh-elfeed-org-files (list (expand-file-name "feeds.org" elfeed-base-directory)))) (add-hook 'elfeed-search-mode-hook #'elfeed-update) - (when (require 'elfeed-org nil :noerror) (elfeed-org)) - (when (require 'elfeed-tube nil :noerror) (elfeed-tube-setup))) + (when (require 'elfeed-org nil :noerror) + (elfeed-org)) + (when (require 'elfeed-tube nil :noerror) + (elfeed-tube-setup))) (provide 'custom-feed-config) diff --git a/home/emacs/modules/custom-ide-config.el b/home/emacs/modules/custom-ide-config.el index 7be989d7..66eafb61 100644 --- a/home/emacs/modules/custom-ide-config.el +++ b/home/emacs/modules/custom-ide-config.el @@ -4,16 +4,16 @@ (when (require 'treesit-aut nil :noerror) (global-treesit-auto-mode +1)) +(setq apheleia-remote-algorithm 'local) (when (require 'apheleia nil :noerror) - (setq apheleia-remote-algorithm 'local) (keymap-set global-map "C-c c f" #'apheleia-format-buffer) (apheleia-global-mode +1)) (when (require 'eglot nil :noerror) (eglot-ensure)) +(setq direnv-always-show-summary nil) (when (require 'direnv nil :noerror) - (setq direnv-always-show-summary nil) (direnv-mode +1)) (when (require 'yasnippet nil :noerror) diff --git a/home/emacs/modules/custom-org-config.el b/home/emacs/modules/custom-org-config.el index fdc39e37..7d682217 100644 --- a/home/emacs/modules/custom-org-config.el +++ b/home/emacs/modules/custom-org-config.el @@ -50,12 +50,12 @@ :emptry-lines 1) )) +(setq khalel-import-org-file (expand-file-name "calendar.org" org-directory) + khalel-import-org-file-read-only nil + khalel-import-org-file-confirm-overwrite nil + khalel-import-start-date "-30d" + khalel-import-end-date "+30d") (when (require 'khalel nil :noerror) - (setq khalel-import-org-file (expand-file-name "calendar.org" org-directory) - khalel-import-org-file-read-only nil - khalel-import-org-file-confirm-overwrite nil - khalel-import-start-date "-30d" - khalel-import-end-date "+30d") (add-hook 'org-agenda-mode-hook #'khalel-import-events) (khalel-add-capture-template "e")) diff --git a/home/emacs/modules/custom-project-config.el b/home/emacs/modules/custom-project-config.el index f6bb0c51..9b782558 100644 --- a/home/emacs/modules/custom-project-config.el +++ b/home/emacs/modules/custom-project-config.el @@ -6,7 +6,7 @@ (project-find-dir "Find directory") (project-eshell "Eshell"))) -(when (require 'magit nil :noerror) - (setq magit-clone-default-directory "~/Projects/")) +(setq magit-clone-default-directory "~/Projects/") +(require 'magit nil :noerror) (provide 'custom-project-config) diff --git a/home/emacs/modules/custom-social-config.el b/home/emacs/modules/custom-social-config.el index c331b8ed..64482c5a 100644 --- a/home/emacs/modules/custom-social-config.el +++ b/home/emacs/modules/custom-social-config.el @@ -1,5 +1,5 @@ -(when (require 'mastodon nil :noerror) - (setq mastodon-instance-url "https://tech.lgbt" - mastodon-active-user "Tux922")) +(setq mastodon-instance-url "https://tech.lgbt" + mastodon-active-user "Tux922") +(require 'mastodon nil :noerror) (provide 'custom-social-config) diff --git a/home/emacs/modules/custom-ui-config.el b/home/emacs/modules/custom-ui-config.el index f81a7c04..27da0cdb 100644 --- a/home/emacs/modules/custom-ui-config.el +++ b/home/emacs/modules/custom-ui-config.el @@ -25,63 +25,74 @@ (load-theme 'doom-tokyo-night t)) ;; Nerd-Icons modes -(when (require 'nerd-icons-dired nil :noerror) - (add-hook 'dired-mode-hook #'nerd-icons-dired-mode)) +(when (require 'nerd-icons) + (when (require 'nerd-icons-dired nil :noerror) + (add-hook 'dired-mode-hook #'nerd-icons-dired-mode)) -(when (require 'nerd-icons-ibuffer nil :noerror) - (add-hook 'ibuffer-mode-hook #'nerd-icons-ibuffer-mode)) + (when (require 'nerd-icons-ibuffer nil :noerror) + (add-hook 'ibuffer-mode-hook #'nerd-icons-ibuffer-mode)) -(when (require 'nerd-icons-completion nil :noerror) - (nerd-icons-completion-mode) - (when (require 'marginalia nil :noerror) - (add-hook 'marginalia-mode-hook #'nerd-icons-completion-marginalia-setup))) + (when (require 'nerd-icons-completion nil :noerror) + (nerd-icons-completion-mode) + (when (require 'marginalia nil :noerror) + (add-hook 'marginalia-mode-hook #'nerd-icons-completion-marginalia-setup)))) ;; Doom-Modeline +(setq doom-modeline-icon t + doom-modeline-mu4e t + doom-modeline-modal nil + doom-modeline-modal-icon nil + doom-modeline-persp-name nil + doom-modeline-persp-icon nil) (when (require 'doom-modeline nil :noerror) - (setq doom-modeline-icon t - doom-modeline-mu4e t) (display-battery-mode) (doom-modeline-mode +1)) ;; Dashboard -(when (require 'dashboard nil :noerror) - (setq initial-buffer-choice 'dashboard-open - dashboard-icon-type 'nerd-icons - dashboard-set-heading-icons t - dashboard-set-file-icons t - dashboard-set-navigator t - dashboard-set-init-info t - dashboard-startup-banner 'ascii - dashboard-projects-backend 'project-el - dashboard-projects-switch-function 'project-switch-project - dashboard-projects-show-base t - dashboard-recentf-show-base 'align - dashboard-items '((projects . 5) (agenda . 5) (recents . 5)) - dashboard-banner-ascii (concat " .000000. \n" - " .0. .0. \n" - " .00. .00. \n" - " .000cl. .lc000. \n" - ".0 0.\n" - "0. .o0000o. .0\n" - " 00 .0' '0. 00 \n" - " 00 .0 0. 00 \n" - " HHHHH HHHHHHHHHHHH HHHHH \n" - "HHHH HHH HHHHHHHHHHHHHH HHHH\n" - " HHHHHH HHHHHHHHH HHHHHHHH \n" - " HHH HHHH HHHHHHHHH HHHH \n" - " HHH HHHHHH \n" - " HHHHH HH \n"))) +(setq initial-buffer-choice 'dashboard-open + dashboard-icon-type 'nerd-icons + dashboard-set-heading-icons t + dashboard-set-file-icons t + dashboard-set-navigator t + dashboard-set-init-info t + dashboard-startup-banner 'ascii + dashboard-projects-backend 'project-el + dashboard-projects-switch-function 'project-switch-project + dashboard-projects-show-base t + dashboard-recentf-show-base 'align + dashboard-items '((projects . 5) + (agenda . 5) + (recents . 5)) + dashboard-heading-icons '((projects . "nf-oct-rocket") + (agenda . "nf-oct-calendar") + (recents . "nf-oct-history")) + dashboard-banner-ascii (concat " .000000. \n" + " .0. .0. \n" + " .00. .00. \n" + " .000cl. .lc000. \n" + ".0 0.\n" + "0. .o0000o. .0\n" + " 00 .0' '0. 00 \n" + " 00 .0 0. 00 \n" + " HHHHH HHHHHHHHHHHH HHHHH \n" + "HHHH HHH HHHHHHHHHHHHHH HHHH\n" + " HHHHHH HHHHHHHHH HHHHHHHH \n" + " HHH HHHH HHHHHHHHH HHHH \n" + " HHH HHHHHH \n" + " HHHHH HH \n")) +(require 'dashboard nil :noerror) ;; Extra minor-modes (when (require 'which-key nil :noerror) (which-key-mode +1)) -(when (require 'page-break nil :noerror) +(when (require 'page-break-lines nil :noerror) (global-page-break-lines-mode +1)) ;; Weather in modeline (setq display-wttr-format 1) -(when (require 'display-wttr nil :noerror) (display-wttr-mode +1)) +(when (require 'display-wttr nil :noerror) + (display-wttr-mode +1)) ;;;; Help Buffers diff --git a/system/emacs.nix b/system/emacs.nix index a230c6ea..5ceda273 100644 --- a/system/emacs.nix +++ b/system/emacs.nix @@ -64,12 +64,13 @@ mastodon # ui-packages + all-the-icons nerd-icons nerd-icons-completion nerd-icons-dired nerd-icons-ibuffer page-break-lines - # dashboard + dashboard doom-modeline helpful which-key