summaryrefslogtreecommitdiff
path: root/.emacs.d/modules/thanos-eshell.el
diff options
context:
space:
mode:
authorThanos Apollo <[email protected]>2023-09-03 17:05:49 +0300
committerThanos Apollo <[email protected]>2023-09-03 17:06:54 +0300
commit8efa6f3f1db166d30a4eb38780f6c47855c51439 (patch)
tree873e0c0aeb443c10153a44e14a3d89c938e68e4d /.emacs.d/modules/thanos-eshell.el
parentf7c3db0c688b9b98762464cc9e4cc7c87a9dbe96 (diff)
emacs: Modularize
Diffstat (limited to '.emacs.d/modules/thanos-eshell.el')
-rw-r--r--.emacs.d/modules/thanos-eshell.el158
1 files changed, 158 insertions, 0 deletions
diff --git a/.emacs.d/modules/thanos-eshell.el b/.emacs.d/modules/thanos-eshell.el
new file mode 100644
index 0000000..484bad8
--- /dev/null
+++ b/.emacs.d/modules/thanos-eshell.el
@@ -0,0 +1,158 @@
+;;; thanos-eshell.el --- eshell configuration -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2023 Thanos Apollo
+
+;; Author: Thanos Apollo <[email protected]>
+;; 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 <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(setenv "EDITOR" "emacsclient -n")
+(setenv "DEBEMAIL" "[email protected]")
+(setenv "DEBNAME" "Thanos Apollo")
+
+;;;; sudo completion
+(defun pcomplete/sudo ()
+ "Completion rules for the `sudo' command."
+ (let ((pcomplete-ignore-case t))
+ (pcomplete-here (funcall pcomplete-command-completion-function))
+ (while (pcomplete-here (pcomplete-entries)))))
+
+;;;; systemctl completion
+(defcustom pcomplete-systemctl-commands
+ '("disable" "enable" "status" "start" "restart" "stop" "reenable"
+ "list-units" "list-unit-files")
+ "p-completion candidates for `systemctl' main commands"
+ :type '(repeat (string :tag "systemctl command"))
+ :group 'pcomplete)
+
+(defvar pcomplete-systemd-units
+ (split-string
+ (shell-command-to-string
+ "(systemctl list-units --all --full --no-legend;systemctl list-unit-files --full --no-legend)|while read -r a b; do echo \" $a\";done;"))
+ "p-completion candidates for all `systemd' units")
+
+(defvar pcomplete-systemd-user-units
+ (split-string
+ (shell-command-to-string
+ "(systemctl list-units --user --all --full --no-legend;systemctl list-unit-files --user --full --no-legend)|while read -r a b;do echo \" $a\";done;"))
+ "p-completion candidates for all `systemd' user units")
+
+(defun pcomplete/systemctl ()
+ "Completion rules for the `systemctl' command."
+ (pcomplete-here (append pcomplete-systemctl-commands '("--user")))
+ (cond ((pcomplete-test "--user")
+ (pcomplete-here pcomplete-systemctl-commands)
+ (pcomplete-here pcomplete-systemd-user-units))
+ (t (pcomplete-here pcomplete-systemd-units))))
+
+;;;; man completion
+(defvar pcomplete-man-user-commands
+ (split-string
+ (shell-command-to-string
+ "apropos -s 1 .|while read -r a b; do echo \" $a\";done;"))
+ "p-completion candidates for `man' command")
+
+(defun pcomplete/man ()
+ "Completion rules for the `man' command."
+ (pcomplete-here pcomplete-man-user-commands))
+
+;; hut completion
+(defcustom pcomplete-hut-commands
+ '("builds" "export" "git" "graphql" "lists" "help" "hg"
+ "init" "meta" "pages" "paste" "todo")
+ "p-completion candidates for `hut' main commands"
+ :type '(repeat (string :tag "hut command"))
+ :group 'pcomplete)
+
+(defun pcomplete/hut ()
+ "Completion rules for `hut' command"
+ (pcomplete-here (append pcomplete-hut-commands)))
+
+(setq thanos/eshell-aliases
+ '((g . magit)
+ (gl . magit-log)
+ (d . dired)
+ (o . find-file)
+ (oo . find-file-other-window)
+ (ll . (lambda () (eshell/ls '-la)))
+ (eshell/clear . eshell/clear-scrollback)))
+
+;; Define aliases using `mapc`
+(mapc (lambda (alias)
+ (defalias (car alias) (cdr alias)))
+ thanos/eshell-aliases)
+
+;; PATH
+(defvar eshell-path-env (getenv "~/.local/bin"))
+
+(require 'eshell-git-prompt)
+;; customize multiline theme
+(defun eshell-git-prompt-multiline ()
+ "Eshell Git prompt inspired by spaceship-prompt."
+ (let (separator hr dir git git-dirty time sign command)
+ (setq separator (with-face " | " 'eshell-git-prompt-multiline-secondary-face))
+ (setq hr (with-face (concat "\n" (make-string (/ (window-total-width) 2) ?─) "\n") 'eshell-git-prompt-multiline-secondary-face))
+ (setq dir
+ (concat
+ (concat (abbreviate-file-name (eshell/pwd)))))
+ (setq git
+ (concat (with-face "⎇" 'eshell-git-prompt-exit-success-face)
+ (concat (eshell-git-prompt--branch-name))))
+ (setq git-dirty
+ (when (eshell-git-prompt--branch-name)
+ (if (eshell-git-prompt--collect-status)
+ (with-face " ✎" 'eshell-git-prompt-modified-face)
+ (with-face " ✔" 'eshell-git-prompt-exit-success-face))))
+ (setq time (with-face (format-time-string "%I:%M:%S %p") 'eshell-git-prompt-multiline-secondary-face))
+ (setq sign
+ (if (= (user-uid) 0)
+ (with-face "\n#" 'eshell-git-prompt-multiline-sign-face)
+ (with-face "\nλ" 'eshell-git-prompt-multiline-sign-face)))
+ (setq command (with-face " " 'eshell-git-prompt-multiline-command-face))
+
+
+ (eshell-git-prompt---str-read-only
+ (concat hr dir separator git git-dirty separator time sign command))))
+
+(eshell-git-prompt-use-theme 'multiline)
+
+(eshell-syntax-highlighting-global-mode 1)
+
+(setq eshell-highlight-prompt t)
+
+
+(define-prefix-command 'thanos/eshell-map)
+(global-set-key (kbd "C-c e") 'thanos/eshell-map)
+
+(define-key thanos/eshell-map (kbd "o") 'multi-eshell)
+(define-key thanos/eshell-map (kbd "n") 'multi-eshell-switch)
+
+(defvar thanos/vterm-map (make-sparse-keymap))
+(define-prefix-command 'thanos/vterm-map)
+(define-key global-map (kbd "C-c v") 'thanos/vterm-map)
+(define-key thanos/vterm-map (kbd "n") 'multi-vterm-next)
+(define-key thanos/vterm-map (kbd "p") 'multi-vterm-prev)
+(define-key thanos/vterm-map (kbd "d") 'multi-vterm-dedicated-open)
+(define-key thanos/vterm-map (kbd "o") 'multi-vterm)
+
+
+(provide 'thanos-eshell)
+;;; thanos-eshell.el ends here