diff options
Diffstat (limited to 'Emacs/.config/emacs/elisp')
-rw-r--r-- | Emacs/.config/emacs/elisp/elfeed-org.el | 20 | ||||
-rw-r--r-- | Emacs/.config/emacs/elisp/eshell-additions.el | 15 | ||||
-rw-r--r-- | Emacs/.config/emacs/elisp/eshell-prompt.el | 103 | ||||
-rw-r--r-- | Emacs/.config/emacs/elisp/personal-light-theme.el | 13 | ||||
-rw-r--r-- | Emacs/.config/emacs/elisp/personal-solarized-theme.el | 104 |
5 files changed, 145 insertions, 110 deletions
diff --git a/Emacs/.config/emacs/elisp/elfeed-org.el b/Emacs/.config/emacs/elisp/elfeed-org.el index 2b68acc..4416926 100644 --- a/Emacs/.config/emacs/elisp/elfeed-org.el +++ b/Emacs/.config/emacs/elisp/elfeed-org.el @@ -29,11 +29,12 @@ (defun elfeed-org/--parse-link (context) (thread-last (org-element-property :title context) search-forward) - (let ((title-context (org-element-context))) - (org-element-property :raw-link title-context))) + (org-element-property :raw-link (org-element-context))) (defun elfeed-org/--parse-tags () - (mapcar #'intern (org-get-tags))) + (thread-last + (org-get-tags) + (mapcar #'intern))) (defun elfeed-org/--parse-headline () (if-let* ((ctx (org-element-context)) @@ -43,14 +44,15 @@ nil)) (defun elfeed-org/--parse-headlines () - (cl-remove-if - #'null - (org-map-entries #'elfeed-org/--parse-headline t))) + (thread-last + (org-map-entries #'elfeed-org/--parse-headline t) + (cl-remove-if #'null))) (defun elfeed-org () - (setq elfeed-feeds - (with-current-buffer (find-file-noselect elfeed-org/file) - (elfeed-org/--parse-headlines)))) + (thread-last + (elfeed-org/--parse-headlines) + (with-current-buffer (find-file-noselect elfeed-org/file)) + (setq elfeed-feeds))) (provide 'elfeed-org) ;;; elfeed-org.el ends here diff --git a/Emacs/.config/emacs/elisp/eshell-additions.el b/Emacs/.config/emacs/elisp/eshell-additions.el index a9362db..2d53610 100644 --- a/Emacs/.config/emacs/elisp/eshell-additions.el +++ b/Emacs/.config/emacs/elisp/eshell-additions.el @@ -41,14 +41,23 @@ "Change to directory `project-root'" (if (project-current) (eshell/cd (list (project-root (project-current)))) + (setq eshell-last-command-status 1) (eshell/echo (format "[%s]: No project in current directory" (propertize "Error" 'font-lock-face '(:foreground "red")))))) (defun eshell/sudo-switch (&rest args) - "Switch to a tramp connection sudo in the current directory" - (let ((wrapped-dir (concat "/sudo::" default-directory))) - (eshell/cd wrapped-dir))) + "Switch to and from administrative (sudo) mode in Eshell. +Uses tramp to figure out if we're in sudo mode or not. " + (let ((user (file-remote-p default-directory 'user))) + (cond + ((null user) + (let ((wrapped-dir (concat "/sudo::" default-directory))) + (eshell/cd wrapped-dir))) + ((string= user "root") + (thread-last 'localname + (file-remote-p default-directory) + eshell/cd))))) ;; Additional functions (defun +eshell/at-cwd (&optional arg) diff --git a/Emacs/.config/emacs/elisp/eshell-prompt.el b/Emacs/.config/emacs/elisp/eshell-prompt.el index d0a4e91..af5c55f 100644 --- a/Emacs/.config/emacs/elisp/eshell-prompt.el +++ b/Emacs/.config/emacs/elisp/eshell-prompt.el @@ -19,25 +19,29 @@ ;;; Commentary: -;; We provide a function +eshell-prompt which generates a prompt on +;; We provide a function ep which generates a prompt on ;; demand. ;;; Code: -(defvar +eshell-prompt/user-prompt "𝜆> " +(defvar ep/user-prompt " λ " "Prompt for user to input.") -(defvar +eshell-prompt/dir-colour "deepskyblue") -(defvar +eshell-prompt/success-colour "forestgreen") -(defvar +eshell-prompt/failure-colour "red") +(defvar ep/dir-colour "deepskyblue") +(defvar ep/success-colour "forestgreen") +(defvar ep/failure-colour "red") +(defvar ep/branch-name-colour "LightSalmon") +(defvar ep/pipe-colour "green2") +(defvar ep/ahead-colour "dodger blue") +(defvar ep/remote-colour "DarkGoldenrod") -(defun +eshell-prompt/--colour-on-last-command () +(defun ep/--colour-on-last-command () "Returns an Emacs colour based on ESHELL-LAST-COMMAND-STATUS." (if (zerop eshell-last-command-status) - +eshell-prompt/success-colour - +eshell-prompt/failure-colour)) + ep/success-colour + ep/failure-colour)) -(defun +eshell-prompt/--git-remote-status () +(defun ep/--git-remote-status () "Returns a propertized string for the status of a repository in comparison to its remote. 3 differing strings are returned dependent on: @@ -53,17 +57,17 @@ behind or ahead the local repository is." (status (nth 3 branch-status)) (diff (cl-position "by" branch-status :test #'string=))) (if (null diff) - (propertize "=" 'font-lock-face `(:foreground ,+eshell-prompt/success-colour)) + (propertize "=" 'font-lock-face `(:foreground ,ep/success-colour)) (let ((n (nth (+ 1 diff) branch-status))) (concat (cond ((string= status "ahead") - (propertize "→" 'font-lock-face '(:foreground "dodger blue"))) + (propertize "→" 'font-lock-face `(:foreground ,ep/ahead-colour))) ((string= status "behind") - (propertize "←" 'font-lock-face '(:foreground "red")))) + (propertize "←" 'font-lock-face `(:foreground ,ep/failure-colour)))) n))))) -(defun +eshell-prompt/--git-change-status () +(defun ep/--git-change-status () "Returns a propertized string for the condition of the worktree in a repository. If there are no changes i.e. the worktree is clean then a green tick is returned, but if there are changes then the @@ -74,28 +78,50 @@ number of files affected are returned in red." (if (= changed-files 0) (propertize "✓" 'font-lock-face - `(:foreground ,+eshell-prompt/success-colour)) + `(:foreground ,ep/success-colour)) (propertize (number-to-string changed-files) 'font-lock-face - `(:foreground ,+eshell-prompt/failure-colour))))) - -(defun +eshell-prompt/--git-status () + `(:foreground ,ep/failure-colour))))) + +(defun ep/--git-branch-name () + "Get the branch name of the current working directory. W" + (let* ((branch-name (thread-last + (split-string (shell-command-to-string "git branch") "\n") + (cl-remove-if (lambda (s) (= (length s) 0))) + (cl-find-if (lambda (s) (string= "*" (substring s 0 1)))))) + (branch-name (if (null branch-name) nil + (substring branch-name 2)))) + (cond + ((null branch-name) nil) + ((string= "(" (substring branch-name 0 1)) + (replace-regexp-in-string + "\n$" "" + (shell-command-to-string "git rev-parse --short HEAD"))) + (t branch-name)))) + +(defun ep/--git-status () "Returns a completely formatted string of -form (BRANCH-NAME<CHANGES>[REMOTE-STATUS])." - (let ((git-branch (thread-last - (split-string (shell-command-to-string "git branch") "\n") - (cl-remove-if (lambda (s) (= (length s) 0))) - (cl-find-if (lambda (s) (string= "*" (substring s 0 1))))))) + form (BRANCH-NAME<CHANGES>[REMOTE-STATUS])." + (let ((git-branch (ep/--git-branch-name))) (if (null git-branch) "" (format - "(%s<%s>[%s])" - (nth 2 (split-string git-branch "\n\\|\\*\\| ")) - (+eshell-prompt/--git-change-status) - (+eshell-prompt/--git-remote-status))))) - -(defun +eshell-prompt/make-prompt () - (let ((git (+eshell-prompt/--git-status))) + "%s(%s)(%s)" + (propertize git-branch 'font-lock-face `(:foreground ,ep/branch-name-colour)) + (ep/--git-remote-status) + (ep/--git-change-status))))) + +(defun ep/--user-and-remote () + (if (file-remote-p default-directory) + (let ((user (file-remote-p default-directory 'user)) + (host (file-remote-p default-directory 'host))) + (if user + (format "%s@%s " user host) + (concat host " "))) + "")) + +(defun ep/make-prompt () + (let ((git (ep/--git-status))) (mapconcat (lambda (item) (if (listp item) @@ -105,15 +131,26 @@ form (BRANCH-NAME<CHANGES>[REMOTE-STATUS])." 'rear-nonsticky '(font-lock-face read-only)) item)) (list + `("┌──" + :foreground ,ep/pipe-colour) "[" - `(,(abbreviate-file-name (eshell/pwd)) :foreground ,+eshell-prompt/dir-colour) - "]" + `(,(ep/--user-and-remote) + :foreground ,ep/remote-colour) + `(,(abbreviate-file-name (tramp-file-local-name (eshell/pwd))) + :foreground ,ep/dir-colour) (if (string= git "") "" - (concat " " git)) + (concat "]─[" git)) + "]" "\n" - (list "𝜆> " ':foreground (+eshell-prompt/--colour-on-last-command)))))) + `("└─>" + :foreground ,ep/pipe-colour) + (list ep/user-prompt ':foreground (ep/--colour-on-last-command)))))) (provide 'eshell-prompt) ;;; eshell-prompt.el ends here + +;; Local Variables: +;; read-symbol-shorthands: (("ep" . "+eshell-prompt")) +;; End: diff --git a/Emacs/.config/emacs/elisp/personal-light-theme.el b/Emacs/.config/emacs/elisp/personal-light-theme.el index c8e4f3e..d05f880 100644 --- a/Emacs/.config/emacs/elisp/personal-light-theme.el +++ b/Emacs/.config/emacs/elisp/personal-light-theme.el @@ -81,6 +81,19 @@ '(org-quote ((t (:slant italic)))) '(org-verbatim ((t (:foreground "red3")))) '(query-replace ((t (:inherit (isearch))))) + '(rainbow-delimiters-base-error-face ((t (:extend t :foreground "white" + :background "red1")))) + '(rainbow-delimiters-depth-1-face ((t (:extend t :foreground "red")))) + '(rainbow-delimiters-depth-2-face ((t (:extend t :foreground "darkorange")))) + '(rainbow-delimiters-depth-3-face ((t (:extend t :foreground "yellow")))) + '(rainbow-delimiters-depth-4-face ((t (:extend t :foreground "green")))) + '(rainbow-delimiters-depth-5-face ((t (:extend t :foreground "DeepSkyBlue")))) + '(rainbow-delimiters-depth-6-face ((t (:extend t :foreground "purple")))) + '(rainbow-delimiters-depth-7-face ((t (:extend t :foreground "violet")))) + '(rainbow-delimiters-mismatched-face ((t (:extend t :foreground "white" + :background "red4")))) + '(rainbow-delimiters-unmatched-face ((t (:extend t :foreground "white" + :background "red3")))) '(region ((t (:extend t :background "#C2D5E9")))) '(secondary-selection ((((class color) (min-colors 88) (background light)) (:extend t :background "yellow1")) (((class color) (min-colors 88) (background dark)) (:extend t :background "SkyBlue4")) (((class color) (min-colors 16) (background light)) (:extend t :background "yellow")) (((class color) (min-colors 16) (background dark)) (:extend t :background "SkyBlue4")) (((class color) (min-colors 8)) (:extend t :foreground "black" :background "cyan")) (t (:inverse-video t)))) '(shadow ((((class color grayscale) (min-colors 88) (background light)) diff --git a/Emacs/.config/emacs/elisp/personal-solarized-theme.el b/Emacs/.config/emacs/elisp/personal-solarized-theme.el index d0b4cd9..50dba60 100644 --- a/Emacs/.config/emacs/elisp/personal-solarized-theme.el +++ b/Emacs/.config/emacs/elisp/personal-solarized-theme.el @@ -1,11 +1,13 @@ (deftheme personal-solarized - "Created 2024-07-02.") + "Created 2024-07-02." + :background-mode 'dark) (defvar personal-solarized-name-colour "#3c98e0" "Colour of names in this theme.") (custom-theme-set-faces 'personal-solarized + '(Info-quoted ((t (:inherit fixed-pitch-serif :underline t)))) '(button ((t (:inherit (link))))) '(child-frame-border ((t (:background "white")))) '(company-preview ((t (:foreground "wheat" :background "blue4")))) @@ -21,35 +23,25 @@ '(evil-goggles-default-face ((t (:background "#004065")))) '(evil-mc-cursor-default-face ((t (:foreground "black" :background "white")))) '(evil-mc-region-face ((t (:extend t :background "grey50")))) - '(fill-column-indicator ((t (:inherit shadow :foreground "gray23" - :background "gray23" :weight thin)))) + '(fill-column-indicator ((t (:inherit shadow :foreground "gray23" :weight thin)))) '(fixed-pitch-serif ((t (:family "Noto Serif" :height 0.95)))) '(font-latex-bold-face ((t (:weight bold :foreground "#9eacac")))) '(font-latex-doctex-documentation-face ((t (:background unspecified)))) - '(font-latex-doctex-preprocessor-face ((t (:inherit (font-latex-doctex-documentation-face - font-lock-builtin-face - font-lock-preprocessor-face))))) + '(font-latex-doctex-preprocessor-face ((t (:inherit (font-latex-doctex-documentation-face font-lock-builtin-face font-lock-preprocessor-face))))) '(font-latex-italic-face ((t (:style italic :foreground "#9eacac")))) '(font-latex-math-face ((t (:foreground "#7a7ed2")))) - '(font-latex-sectioning-0-face ((t (:inherit font-latex-sectioning-5-face - :height 1.1)))) - '(font-latex-sectioning-1-face ((t (:inherit font-latex-sectioning-5-face - :height 1.1)))) - '(font-latex-sectioning-2-face ((t (:inherit font-latex-sectioning-5-face - :height 1.1)))) - '(font-latex-sectioning-3-face ((t (:inherit font-latex-sectioning-5-face - :height 1.1)))) - '(font-latex-sectioning-4-face ((t (:inherit font-latex-sectioning-5-face - :height 1.1)))) + '(font-latex-sectioning-0-face ((t (:inherit font-latex-sectioning-5-face :height 1.1)))) + '(font-latex-sectioning-1-face ((t (:inherit font-latex-sectioning-5-face :height 1.1)))) + '(font-latex-sectioning-2-face ((t (:inherit font-latex-sectioning-5-face :height 1.1)))) + '(font-latex-sectioning-3-face ((t (:inherit font-latex-sectioning-5-face :height 1.1)))) + '(font-latex-sectioning-4-face ((t (:inherit font-latex-sectioning-5-face :height 1.1)))) '(font-latex-sectioning-5-face ((t (:foreground "#c49619" :weight bold)))) '(font-latex-sedate-face ((t (:foreground "#9eacac")))) - '(font-latex-slide-title-face ((t (:inherit (default font-lock-type-face) - :weight bold :height 1.2)))) + '(font-latex-slide-title-face ((t (:inherit (default font-lock-type-face) :weight bold :height 1.2)))) '(font-latex-string-face ((t (:foreground "#3cafa5")))) '(font-latex-subscript-face ((t (:height 0.8)))) '(font-latex-superscript-face ((t (:height 0.8)))) - '(font-latex-verbatim-face ((t (:inherit fixed-pitch-serif :foreground "#8d9fa1" - :slant italic)))) + '(font-latex-verbatim-face ((t (:inherit fixed-pitch-serif :foreground "#8d9fa1" :slant italic)))) '(font-latex-warning-face ((t (:inherit bold :foreground "#db5823")))) '(font-lock-builtin-face ((t (:foreground "#8d9fa1" :weight bold :slant normal)))) '(font-lock-comment-delimiter-face ((t (:foreground "#62787f" :slant normal)))) @@ -64,29 +56,21 @@ '(font-lock-warning-face ((t (:inherit error :weight bold)))) '(fringe ((t (:inherit (default))))) '(haskell-interactive-face-prompt ((t (:foreground "green")))) - '(header-line ((t (:box nil :foreground "grey90" :background "grey20" - :inherit (mode-line))))) + '(header-line ((t (:box nil :foreground "grey90" :background "grey20" :inherit (mode-line))))) '(highlight ((t (:extend t :background "#222233")))) '(homoglyph ((t (:foreground "cyan")))) - '(Info-quoted ((t (:inherit fixed-pitch-serif :underline t)))) '(isearch ((t (:foreground "brown4" :background "white")))) '(isearch-fail ((t (:background "red4")))) '(lazy-highlight ((t (:background "paleturquoise4")))) '(line-number ((t (:foreground "grey45" :background "grey1" :inherit (default))))) - '(line-number-current-line ((t (:foreground "white" :background "grey1" - :inherit (default))))) - '(link ((t (:underline (:color foreground-color :style line) - :foreground "cyan1")))) + '(line-number-current-line ((t (:foreground "white" :background "grey1" :inherit (default))))) + '(link ((t (:underline (:color foreground-color :style line) :foreground "cyan1")))) '(link-visited ((t (:foreground "violet" :inherit (link))))) '(match ((t (:background "RoyalBlue3")))) - '(minibuffer-prompt ((t (:foreground "cyan")))) - `(mode-line ((t (:box (:line-width 1 :color "white") :foreground "LightSkyBlue" - :background "black" :inherit (default))))) + '(minibuffer-prompt ((t (:background "darkblue" :foreground "cyan")))) '(mode-line-buffer-id ((t (:weight bold)))) '(mode-line-emphasis ((t (:weight bold)))) - '(mode-line-inactive ((t (:box (:line-width 1 :color "grey10") :weight light - :foreground "CadetBlue" :background "grey7" - :inherit (mode-line))))) + '(mode-line-inactive ((t (:box (:line-width 1 :color "grey10") :weight light :foreground "CadetBlue" :background "grey7" :inherit (mode-line))))) '(next-error ((t (:inherit (region))))) '(orderless-match-face-0 ((t (:weight bold :foreground "lime green")))) '(orderless-match-face-1 ((t (:weight bold :foreground "light green")))) @@ -94,25 +78,25 @@ '(orderless-match-face-3 ((t (:weight bold :foreground "dark green")))) '(org-block ((t (:inherit default)))) '(org-code ((t (:foreground "green3")))) + '(org-document-info ((t (:height 1.2 :inherit default)))) + '(org-document-title ((t (:height 1.2 :inherit default)))) '(org-hide ((t (:foreground "black")))) '(org-quote ((t (:slant italic)))) '(org-verbatim ((t (:foreground "red3")))) - '(outline-1 ((t (:inherit default :foreground "#db5823")))) - '(outline-2 ((t (:inherit default :foreground "#93a61a")))) - '(outline-3 ((t (:inherit default :foreground "#3c98e0")))) - '(outline-4 ((t (:inherit default :foreground "#c49619")))) - '(outline-5 ((t (:inherit default :foreground "#3cafa5")))) - '(outline-6 ((t (:inherit default :foreground "#93a61a")))) + '(outline-1 ((t (:inherit default :underline "#444444" :height 1.12 :foreground "#db5823")))) + '(outline-2 ((t (:inherit default :height 1.10 :foreground "#93a61a")))) + '(outline-3 ((t (:inherit default :height 1.08 :foreground "#3c98e0")))) + '(outline-4 ((t (:inherit default :height 1.06 :foreground "#c49619")))) + '(outline-5 ((t (:inherit default :height 1.04 :foreground "#3cafa5")))) + '(outline-6 ((t (:inherit default :height 1.02 :foreground "#93a61a")))) '(outline-7 ((t (:inherit default :foreground "#ec423a")))) '(outline-8 ((t (:inherit default :foreground "#3c98e0")))) '(outline-minor-0 ((t (:extend t :weight bold :background "#01323d")))) - '(outline-minor-1 ((t (:extend t :inherit (outline-minor-0 outline-1) - :background "#1e9d310d32a3")))) + '(outline-minor-1 ((t (:extend t :inherit (outline-minor-0 outline-1) :background "#1e9d310d32a3")))) '(pdf-isearch-batch ((t (:foreground "black" :background "white")))) '(pretty-mode-symbol-face ((t (:foreground "#c49619" :weight normal)))) '(query-replace ((t (:inherit (isearch))))) - '(rainbow-delimiters-base-error-face ((t (:extend t :foreground "white" - :background "red1")))) + '(rainbow-delimiters-base-error-face ((t (:extend t :foreground "white" :background "red1")))) '(rainbow-delimiters-depth-1-face ((t (:extend t :foreground "red")))) '(rainbow-delimiters-depth-2-face ((t (:extend t :foreground "darkorange")))) '(rainbow-delimiters-depth-3-face ((t (:extend t :foreground "yellow")))) @@ -120,38 +104,28 @@ '(rainbow-delimiters-depth-5-face ((t (:extend t :foreground "DeepSkyBlue")))) '(rainbow-delimiters-depth-6-face ((t (:extend t :foreground "purple")))) '(rainbow-delimiters-depth-7-face ((t (:extend t :foreground "violet")))) - '(rainbow-delimiters-mismatched-face ((t (:extend t :foreground "white" - :background "red4")))) - '(rainbow-delimiters-unmatched-face ((t (:extend t :foreground "white" - :background "red3")))) + '(rainbow-delimiters-mismatched-face ((t (:extend t :foreground "white" :background "red4")))) + '(rainbow-delimiters-unmatched-face ((t (:extend t :foreground "white" :background "red3")))) '(region ((t (:extend t :background "grey25")))) '(secondary-selection ((t (:extend t :background "SkyBlue4")))) '(shadow ((t (:foreground "grey70")))) - '(show-paren-match ((t (:foreground unspecified :background "green4" - :weight bold)))) - '(show-paren-mismatch ((t (:foreground "#01323d" :background "#ec1111" - :weight bold)))) + '(show-paren-match ((t (:foreground unspecified :background "green4" :weight bold)))) + '(show-paren-mismatch ((t (:foreground "#01323d" :background "#ec1111" :weight bold)))) '(tab-bar ((t (:background "black")))) - '(tab-bar-tab ((t (:background "grey5" :foreground "white" - :box (:line-width 2 :color "grey19"))))) + '(tab-bar-tab ((t (:background "grey5" :foreground "white" :box (:line-width 2 :color "grey19"))))) '(tab-bar-tab-inactive ((t (:background "black" :foreground "DimGrey")))) - '(tooltip ((t (:foreground "black" :background "lightyellow" - :inherit (variable-pitch))))) + '(tooltip ((t (:foreground "black" :background "lightyellow" :inherit (variable-pitch))))) '(trailing-whitespace ((t (:background "red1")))) '(whitespace-line ((t (:background "black" :foreground "violet")))) '(whitespace-space ((t (:background "#171717" :foreground "black")))) '(whitespace-tab ((t (:background "#171717" :foreground "grey40")))) - `(font-lock-constant-face ((t (:foreground ,personal-solarized-name-colour - :weight bold)))) - `(font-lock-function-name-face ((t (:box nil - :foreground ,personal-solarized-name-colour)))) + `(font-lock-constant-face ((t (:foreground ,personal-solarized-name-colour :weight bold)))) + `(font-lock-function-name-face ((t (:box nil :foreground ,personal-solarized-name-colour)))) `(font-lock-preprocessor-face ((t (:foreground ,personal-solarized-name-colour)))) `(font-lock-variable-name-face ((t (:foreground ,personal-solarized-name-colour)))) - '(default ((t (:family "Jetbrains Mono" :foundry "ADBO" :width normal - :weight normal :slant normal :underline nil - :overline nil :extend nil :strike-through nil - :box nil :inverse-video nil - :foreground "#b6b6b6" :background "#0a0a0a" - :stipple nil :inherit nil))))) + `(mode-line ((t (:box (:line-width 1 :color "white") :foreground "LightSkyBlue" :background "black" :inherit (default))))) + `(org-block-begin-line ((t (:underline t :background "#1a1a1a")))) + `(org-block-end-line ((t (:overline t :background "#1a1a1a")))) + '(default ((t (:family "Jetbrains Mono" :foundry "ADBO" :width normal :weight normal :slant normal :underline nil :overline nil :extend nil :strike-through nil :box nil :inverse-video nil :foreground "#b6b6b6" :background "#0a0a0a" :stipple nil :inherit nil))))) (provide-theme 'personal-solarized) |