diff options
Diffstat (limited to '.emacs.d/modules/thanos-eshell.el')
-rw-r--r-- | .emacs.d/modules/thanos-eshell.el | 158 |
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 |