[emacs] customize the eshell prompt
[~bandali/configs] / init.org
index 4e45c0d..127926d 100644 (file)
--- a/init.org
+++ b/init.org
@@ -355,7 +355,7 @@ in my shell.
   (mapc #'disable-theme custom-enabled-themes))
 #+end_src
 
   (mapc #'disable-theme custom-enabled-themes))
 #+end_src
 
-** Server
+** COMMENT Server
 
 Start server if not already running. Alternatively, can be done by
 issuing =emacs --daemon= in the terminal, which can be automated with
 
 Start server if not already running. Alternatively, can be done by
 issuing =emacs --daemon= in the terminal, which can be automated with
@@ -367,10 +367,11 @@ See [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.htm
 
 #+begin_src emacs-lisp
 (use-package server
 
 #+begin_src emacs-lisp
 (use-package server
+  :defer 1
   :config (or (server-running-p) (server-mode)))
 #+end_src
 
   :config (or (server-running-p) (server-mode)))
 #+end_src
 
-** Unicode support
+** COMMENT Unicode support
 
 Font stack with better unicode support, around =Ubuntu Mono= and
 =Hack=.
 
 Font stack with better unicode support, around =Ubuntu Mono= and
 =Hack=.
@@ -700,6 +701,7 @@ In short, my favourite way of life.
 
 #+begin_src emacs-lisp
 (use-package org
 
 #+begin_src emacs-lisp
 (use-package org
+  :defer 3
   :config
   (setq org-src-tab-acts-natively t
         org-src-preserve-indentation nil
   :config
   (setq org-src-tab-acts-natively t
         org-src-preserve-indentation nil
@@ -714,6 +716,7 @@ In short, my favourite way of life.
   (org-latex-packages-alist '(("" "listings") ("" "color"))))
 
 (use-package ox-latex
   (org-latex-packages-alist '(("" "listings") ("" "color"))))
 
 (use-package ox-latex
+  :after ox
   :config
   (setq org-latex-listings 'listings
         ;; org-latex-prefer-user-labels t
   :config
   (setq org-latex-listings 'listings
         ;; org-latex-prefer-user-labels t
@@ -729,9 +732,11 @@ In short, my favourite way of life.
                  ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
                t))
 
                  ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
                t))
 
-(use-package ox-beamer)
+(use-package ox-beamer
+  :after ox)
 
 (use-package orgalist
 
 (use-package orgalist
+  :after message
   :hook (message-mode . orgalist-mode))
 #+end_src
 
   :hook (message-mode . orgalist-mode))
 #+end_src
 
@@ -793,7 +798,7 @@ Not just how I do git, but /the/ way to do git.
 
 #+begin_src emacs-lisp
 (use-package magit
 
 #+begin_src emacs-lisp
 (use-package magit
-  :defer t
+  :defer 2
   :bind
   (("s-g" . magit-status)
    :prefix-map amin--magit-prefix-map
   :bind
   (("s-g" . magit-status)
    :prefix-map amin--magit-prefix-map
@@ -867,7 +872,6 @@ There's no way I could top that, so I won't attempt to.
          ("s-r"                            . counsel-recentf)
          ("C-c x"                          . counsel-M-x)
          ("C-c f ."                        . counsel-find-file)
          ("s-r"                            . counsel-recentf)
          ("C-c x"                          . counsel-M-x)
          ("C-c f ."                        . counsel-find-file)
-         ("C-c f r"                        . counsel-recentf)
          :map minibuffer-local-map
          ("C-r" . counsel-minibuffer-history))
   :config
          :map minibuffer-local-map
          ("C-r" . counsel-minibuffer-history))
   :config
@@ -879,6 +883,7 @@ There's no way I could top that, so I won't attempt to.
 
 #+begin_src emacs-lisp
 (use-package eshell
 
 #+begin_src emacs-lisp
 (use-package eshell
+  :defer t
   :commands eshell
   :config
   (eval-when-compile (defvar eshell-prompt-regexp))
   :commands eshell
   :config
   (eval-when-compile (defvar eshell-prompt-regexp))
@@ -906,6 +911,7 @@ There's no way I could top that, so I won't attempt to.
 
 #+begin_src emacs-lisp
 (use-package ibuffer
 
 #+begin_src emacs-lisp
 (use-package ibuffer
+  :defer t
   :bind
   (("C-x C-b" . ibuffer-other-window)
    ("C-c b B" . ibuffer-other-window)
   :bind
   (("C-x C-b" . ibuffer-other-window)
    ("C-c b B" . ibuffer-other-window)
@@ -969,6 +975,7 @@ There's no way I could top that, so I won't attempt to.
 
 #+begin_src emacs-lisp
 (use-package outline
 
 #+begin_src emacs-lisp
 (use-package outline
+  :defer t
   :hook (prog-mode . outline-minor-mode)
   :bind
   (:map
   :hook (prog-mode . outline-minor-mode)
   :bind
   (:map
@@ -1037,7 +1044,7 @@ TODO: break this giant source block down into individual org sections.
   (add-hook 'prog-mode-hook #'indicate-buffer-boundaries-left))
 
 (use-package recentf
   (add-hook 'prog-mode-hook #'indicate-buffer-boundaries-left))
 
 (use-package recentf
-  :demand t
+  :defer 0.5
   :config
   (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:")
   (setq recentf-max-saved-items 40))
   :config
   (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:")
   (setq recentf-max-saved-items 40))
@@ -1078,7 +1085,7 @@ TODO: break this giant source block down into individual org sections.
 
 #+begin_src emacs-lisp
 (use-package company
 
 #+begin_src emacs-lisp
 (use-package company
-  :defer 5
+  :defer 2
   :bind
   (:map company-active-map
         ([tab]    . company-complete-common-or-cycle)
   :bind
   (:map company-active-map
         ([tab]    . company-complete-common-or-cycle)
@@ -1097,6 +1104,7 @@ TODO: break this giant source block down into individual org sections.
 * Syntax and spell checking
 #+begin_src emacs-lisp
 (use-package flycheck
 * Syntax and spell checking
 #+begin_src emacs-lisp
 (use-package flycheck
+  :defer 3
   :hook (prog-mode . flycheck-mode)
   :bind
   (:map flycheck-mode-map
   :hook (prog-mode . flycheck-mode)
   :bind
   (:map flycheck-mode-map
@@ -1111,6 +1119,7 @@ TODO: break this giant source block down into individual org sections.
 
 ;; http://endlessparentheses.com/ispell-and-apostrophes.html
 (use-package ispell
 
 ;; http://endlessparentheses.com/ispell-and-apostrophes.html
 (use-package ispell
+  :defer 3
   :config
   ;; ’ can be part of a word
   (setq ispell-local-dictionary-alist
   :config
   ;; ’ can be part of a word
   (setq ispell-local-dictionary-alist
@@ -1140,6 +1149,7 @@ TODO: break this giant source block down into individual org sections.
 
 #+begin_src emacs-lisp
 (use-package alloy-mode
 
 #+begin_src emacs-lisp
 (use-package alloy-mode
+  :defer t
   :config (setq alloy-basic-offset 2))
 #+end_src
 
   :config (setq alloy-basic-offset 2))
 #+end_src
 
@@ -1147,6 +1157,7 @@ TODO: break this giant source block down into individual org sections.
 
 #+begin_src emacs-lisp
 (use-package proof-site  ; Proof General
 
 #+begin_src emacs-lisp
 (use-package proof-site  ; Proof General
+  :defer t
   :load-path "lib/proof-site/generic/")
 #+end_src
 
   :load-path "lib/proof-site/generic/")
 #+end_src
 
@@ -1155,12 +1166,17 @@ TODO: break this giant source block down into individual org sections.
 #+begin_src emacs-lisp
 (eval-when-compile (defvar lean-mode-map))
 (use-package lean-mode
 #+begin_src emacs-lisp
 (eval-when-compile (defvar lean-mode-map))
 (use-package lean-mode
-  :defer 2
+  :defer 1
   :bind (:map lean-mode-map
               ("S-SPC" . company-complete))
   :config
   (require 'lean-input)
   :bind (:map lean-mode-map
               ("S-SPC" . company-complete))
   :config
   (require 'lean-input)
-  (setq default-input-method "Lean"))
+  (setq default-input-method "Lean"
+        lean-input-tweak-all '(lean-input-compose
+                               (lean-input-prepend "/")
+                               (lean-input-nonempty))
+        lean-input-user-translations '(("/" "/")))
+  (lean-input-setup))
   #+end_src
 
 ** Haskell
   #+end_src
 
 ** Haskell
@@ -1169,6 +1185,7 @@ TODO: break this giant source block down into individual org sections.
 
 #+begin_src emacs-lisp
 (use-package haskell-mode
 
 #+begin_src emacs-lisp
 (use-package haskell-mode
+  :defer t
   :config
   (setq haskell-indentation-layout-offset 4
         haskell-indentation-left-offset 4
   :config
   (setq haskell-indentation-layout-offset 4
         haskell-indentation-left-offset 4
@@ -1192,6 +1209,7 @@ executable from [[https://github.com/mpickering/apply-refact][apply-refact]].
 
 #+begin_src emacs-lisp
 (use-package hlint-refactor
 
 #+begin_src emacs-lisp
 (use-package hlint-refactor
+  :after haskell-mode
   :bind (:map hlint-refactor-mode-map
               ("C-c l b" . hlint-refactor-refactor-buffer)
               ("C-c l r" . hlint-refactor-refactor-at-point))
   :bind (:map hlint-refactor-mode-map
               ("C-c l b" . hlint-refactor-refactor-buffer)
               ("C-c l r" . hlint-refactor-refactor-at-point))
@@ -1201,7 +1219,8 @@ executable from [[https://github.com/mpickering/apply-refact][apply-refact]].
 *** [[https://github.com/flycheck/flycheck-haskell][flycheck-haskell]]
 
 #+begin_src emacs-lisp
 *** [[https://github.com/flycheck/flycheck-haskell][flycheck-haskell]]
 
 #+begin_src emacs-lisp
-(use-package flycheck-haskell)
+(use-package flycheck-haskell
+  :after haskell-mode)
 #+end_src
 
 *** [[https://github.com/ndmitchell/hlint/blob/20e116a043f2073c57b17b24ae6364b5e433ba7e/data/hs-lint.el][hs-lint.el]]
 #+end_src
 
 *** [[https://github.com/ndmitchell/hlint/blob/20e116a043f2073c57b17b24ae6364b5e433ba7e/data/hs-lint.el][hs-lint.el]]
@@ -1355,6 +1374,7 @@ instead.
 
 #+begin_src emacs-lisp
 (use-package sgml-mode
 
 #+begin_src emacs-lisp
 (use-package sgml-mode
+  :defer t
   :config
   (setq sgml-basic-offset 2))
 #+end_src
   :config
   (setq sgml-basic-offset 2))
 #+end_src
@@ -1363,6 +1383,7 @@ instead.
 
 #+begin_src emacs-lisp
 (use-package css-mode
 
 #+begin_src emacs-lisp
 (use-package css-mode
+  :defer t
   :config
   (setq css-indent-offset 2))
 #+end_src
   :config
   (setq css-indent-offset 2))
 #+end_src
@@ -1371,6 +1392,7 @@ instead.
 
 #+begin_src emacs-lisp
 (use-package web-mode
 
 #+begin_src emacs-lisp
 (use-package web-mode
+  :defer t
   :mode "\\.html\\'"
   :config
   (setq-every! 2
   :mode "\\.html\\'"
   :config
   (setq-every! 2
@@ -1383,6 +1405,7 @@ instead.
 
 #+begin_src emacs-lisp
 (use-package emmet-mode
 
 #+begin_src emacs-lisp
 (use-package emmet-mode
+  :after (:any web-mode css-mode sgml-mode)
   :bind* (("C-)" . emmet-next-edit-point)
           ("C-(" . emmet-prev-edit-point))
   :config
   :bind* (("C-)" . emmet-next-edit-point)
           ("C-(" . emmet-prev-edit-point))
   :config
@@ -1395,6 +1418,7 @@ instead.
 
 #+begin_src emacs-lisp
 (use-package nix-mode
 
 #+begin_src emacs-lisp
 (use-package nix-mode
+  :defer t
   :mode "\\.nix\\'")
 #+end_src
 
   :mode "\\.nix\\'")
 #+end_src
 
@@ -1493,30 +1517,25 @@ Emacs package that displays available keybindings in popup
   :config (which-key-mode))
 #+end_src
 
   :config (which-key-mode))
 #+end_src
 
-** [[https://github.com/seagle0128/doom-modeline][doom-modeline]]
+** [[https://github.com/Malabarba/smart-mode-line][smart-mode-line]]
 
 #+begin_src emacs-lisp
 
 #+begin_src emacs-lisp
-(use-package doom-modeline
-  :demand t
-  :config (setq doom-modeline-height 32)
-  :hook (after-init . doom-modeline-init))
-#+end_src
-
-** [[https://github.com/maio/eink-emacs][eink-theme]]
-
-#+begin_src emacs-lisp
-(setq doom-modeline-bar-width 5)
-(load-theme 'eink t)
+(use-package smart-mode-line
+  :config
+  (sml/setup)
+  ;; (sml/apply-theme 'light)
+  (remove-hook 'display-time-hook 'sml/propertize-time-string))
 #+end_src
 
 ** [[https://github.com/bbatsov/crux][crux]]
 
 #+begin_src emacs-lisp
 (use-package crux
 #+end_src
 
 ** [[https://github.com/bbatsov/crux][crux]]
 
 #+begin_src emacs-lisp
 (use-package crux
+  :defer 1
   :bind (("C-c d"   . crux-duplicate-current-line-or-region)
          ("C-c M-d" . crux-duplicate-and-comment-current-line-or-region)
          ("C-c b K" . crux-kill-other-buffers)
   :bind (("C-c d"   . crux-duplicate-current-line-or-region)
          ("C-c M-d" . crux-duplicate-and-comment-current-line-or-region)
          ("C-c b K" . crux-kill-other-buffers)
-         ("C-c f c" . crux-copy-file-preserve-attributes)
+         ("C-c f C" . crux-copy-file-preserve-attributes)
          ("C-c f D" . crux-delete-file-and-buffer)
          ("C-c f R" . crux-rename-file-and-buffer)
          ("C-S-j"   . crux-top-join-line)
          ("C-c f D" . crux-delete-file-and-buffer)
          ("C-c f R" . crux-rename-file-and-buffer)
          ("C-S-j"   . crux-top-join-line)
@@ -1537,7 +1556,7 @@ Emacs package that displays available keybindings in popup
 
 #+begin_src emacs-lisp
 (use-package projectile
 
 #+begin_src emacs-lisp
 (use-package projectile
-  :defer 5
+  :defer 2
   :bind-keymap ("C-c p" . projectile-command-map)
   :config
   (projectile-mode)
   :bind-keymap ("C-c p" . projectile-command-map)
   :config
   (projectile-mode)
@@ -1558,6 +1577,7 @@ Emacs package that displays available keybindings in popup
 
 #+begin_src emacs-lisp
 (use-package helpful
 
 #+begin_src emacs-lisp
 (use-package helpful
+  :defer 1
   :bind
   (;; ("C-h F"   . helpful-function)
    ("C-h f"   . helpful-callable)
   :bind
   (;; ("C-h F"   . helpful-function)
    ("C-h f"   . helpful-callable)
@@ -1582,9 +1602,10 @@ Emacs package that displays available keybindings in popup
 
 #+begin_src emacs-lisp
 (use-package shell-pop
 
 #+begin_src emacs-lisp
 (use-package shell-pop
-  :custom
-  (shell-pop-universal-key "C-c e")
-  (shell-pop-shell-type '("eshell" "*eshell*" (lambda nil (eshell)))))
+  :defer 1
+  :init
+  (setq shell-pop-universal-key "C-c e"
+        shell-pop-shell-type '("eshell" "*eshell*" (lambda nil (eshell)))))
 #+end_src
 
 ** [[https://github.com/EricCrosson/unkillable-scratch][unkillable-scratch]]
 #+end_src
 
 ** [[https://github.com/EricCrosson/unkillable-scratch][unkillable-scratch]]
@@ -1593,6 +1614,7 @@ Make =*scratch*= and =*Messages*= unkillable.
 
 #+begin_src emacs-lisp
 (use-package unkillable-scratch
 
 #+begin_src emacs-lisp
 (use-package unkillable-scratch
+  :defer 3
   :config
   (unkillable-scratch 1)
   :custom
   :config
   (unkillable-scratch 1)
   :custom
@@ -1609,6 +1631,7 @@ Make =*scratch*= and =*Messages*= unkillable.
 
 #+begin_src emacs-lisp
 (use-package boxquote
 
 #+begin_src emacs-lisp
 (use-package boxquote
+  :defer 3
   :bind
   (:prefix-map amin--boxquote-prefix-map
    :prefix "C-c q"
   :bind
   (:prefix-map amin--boxquote-prefix-map
    :prefix "C-c q"
@@ -1640,7 +1663,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
 
 #+begin_src emacs-lisp
 (use-package highlight-indent-guides
 
 #+begin_src emacs-lisp
 (use-package highlight-indent-guides
-  :demand t
+  :defer 3
   :hook ((prog-mode . highlight-indent-guides-mode)
          ;; (org-mode  . highlight-indent-guides-mode)
          )
   :hook ((prog-mode . highlight-indent-guides-mode)
          ;; (org-mode  . highlight-indent-guides-mode)
          )
@@ -1657,6 +1680,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
 
 #+begin_src emacs-lisp
 (use-package pdf-tools
 
 #+begin_src emacs-lisp
 (use-package pdf-tools
+  :defer t
   :magic ("%PDF" . pdf-view-mode)
   :config
   (setq pdf-view-resize-factor 1.05)
   :magic ("%PDF" . pdf-view-mode)
   :config
   (setq pdf-view-resize-factor 1.05)
@@ -1681,6 +1705,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
 
 #+begin_src emacs-lisp
 (use-package typo
 
 #+begin_src emacs-lisp
 (use-package typo
+  :defer 2
   :config
   (typo-global-mode 1)
   :hook (text-mode . typo-mode))
   :config
   (typo-global-mode 1)
   :hook (text-mode . typo-mode))
@@ -1748,6 +1773,46 @@ Hopefully temporary.
   (setq alert-default-style 'notifier))
 #+end_src
 
   (setq alert-default-style 'notifier))
 #+end_src
 
+** hl-todo
+
+#+begin_src emacs-lisp
+(use-package hl-todo
+  :defer 4
+  :config
+  (global-hl-todo-mode))
+#+end_src
+
+** shrink-path
+
+#+begin_src emacs-lisp
+(use-package shrink-path
+  :after eshell
+  :config
+  (setq eshell-prompt-regexp "\\(.*\n\\)*λ "
+        eshell-prompt-function #'+eshell/prompt)
+
+  (defun +eshell/prompt ()
+    (let ((base/dir (shrink-path-prompt default-directory)))
+      (concat (propertize (car base/dir)
+                          'face 'font-lock-comment-face)
+              (propertize (cdr base/dir)
+                          'face 'font-lock-constant-face)
+              (propertize (+eshell--current-git-branch)
+                          'face 'font-lock-function-name-face)
+              "\n"
+              (propertize "λ" 'face 'eshell-prompt-face)
+              ;; needed for the input text to not have prompt face
+              (propertize " " 'face 'default))))
+
+  (defun +eshell--current-git-branch ()
+    (let ((branch (car (loop for match in (split-string (shell-command-to-string "git branch") "\n")
+                             when (string-match "^\*" match)
+                             collect match))))
+      (if (not (eq branch nil))
+          (concat " " (substring branch 2))
+        ""))))
+#+end_src
+
 * Email
 
 #+begin_src emacs-lisp
 * Email
 
 #+begin_src emacs-lisp
@@ -1785,14 +1850,9 @@ Hopefully temporary.
              (nnimap-user "abandali@uwaterloo.ca")))
    gnus-message-archive-group "nnimap:Sent"
    gnus-parameters
              (nnimap-user "abandali@uwaterloo.ca")))
    gnus-message-archive-group "nnimap:Sent"
    gnus-parameters
-   '(;; ("amin"
-     ;;  (display . 20))
-     ("gnu.*"
-      ;; (display . 50)
-      (gcc-self . t))
-     ;; ("uwaterloo"
-     ;;  (display . [unread]))
-     )
+   '(("gnu.*"
+      (gcc-self . t)))
+   gnus-large-newsgroup  50
    gnus-home-directory   (no-littering-expand-var-file-name "gnus/")
    gnus-directory        (concat gnus-home-directory "news/")
    message-directory     (concat gnus-home-directory "mail/")
    gnus-home-directory   (no-littering-expand-var-file-name "gnus/")
    gnus-directory        (concat gnus-home-directory "news/")
    message-directory     (concat gnus-home-directory "mail/")
@@ -1909,6 +1969,30 @@ Hopefully temporary.
         mml-secure-openpgp-sign-with-sender t))
 #+end_src
 
         mml-secure-openpgp-sign-with-sender t))
 #+end_src
 
+** footnote
+
+Convenient footnotes in =message-mode=.
+
+#+begin_src emacs-lisp
+(use-package footnote
+  :after message
+  :bind
+  (:map message-mode-map
+        :prefix-map amin--footnote-prefix-map
+        :prefix "C-c f"
+        ("a" . footnote-add-footnote)
+        ("b" . footnote-back-to-message)
+        ("c" . footnote-cycle-style)
+        ("d" . footnote-delete-footnote)
+        ("g" . footnote-goto-footnote)
+        ("r" . footnote-renumber-footnotes)
+        ("s" . footnote-set-style))
+  :config
+  (setq footnote-start-tag ""
+        footnote-end-tag   ""
+        footnote-style     'unicode))
+#+end_src
+
 ** supercite
 
 #+begin_src emacs-lisp :tangle no
 ** supercite
 
 #+begin_src emacs-lisp :tangle no