|
@@ -1,11 +1,38 @@
|
|
|
|
|
|
;; PROMPT_COMMAND='export PS1="$(pest)"'
|
|
;; PROMPT_COMMAND='export PS1="$(pest)"'
|
|
|
|
|
|
|
|
+(defun config-parse (&optional path)
|
|
|
|
+ (let ((config-path (if path path (concatenate 'string (uiop:getenv "HOME") "/.config/pest/config.toml"))))
|
|
|
|
+ (if (probe-file config-path)
|
|
|
|
+ (with-open-file (fh config-path :direction :input)
|
|
|
|
+ (let ((file-content (with-output-to-string (out)
|
|
|
|
+ (loop for line = (read-line fh nil)
|
|
|
|
+ while line
|
|
|
|
+ do (format out "~a~%" line)))))
|
|
|
|
+ (clop:parse file-content)))
|
|
|
|
+ (format T "~A: File not found" config-path))))
|
|
|
|
+
|
|
|
|
+(defvar *config* (config-parse "/home/swatson/Repos/cl-pest/config.toml"))
|
|
|
|
+
|
|
|
|
+;; Colors
|
|
|
|
+(defvar *fg* (progn
|
|
|
|
+ (if *config*
|
|
|
|
+ (destructuring-bind (r g b) (subseq (assoc "fg" (cdr (assoc "colors" *config* :test #'equal)) :test #'equal) (- 4 3))
|
|
|
|
+ (chlorophyll:create-rgb-color r g b))
|
|
|
|
+ (chlorophyll:create-rgb-color 255 255 255))))
|
|
|
|
+(defvar *bg* (chlorophyll:create-rgb-color 0 0 0))
|
|
|
|
+(defvar *style* (chlorophyll:new-style
|
|
|
|
+ :bold NIL
|
|
|
|
+ :foreground *fg*
|
|
|
|
+ :background *bg*))
|
|
|
|
+
|
|
;; Regex Scanners
|
|
;; Regex Scanners
|
|
|
|
+;; TODO $HOME rendered as /home/user as opposed to ~
|
|
(defvar *home-scan* (ppcre:create-scanner (concatenate 'string "^" (format NIL "~a" (user-homedir-pathname)))))
|
|
(defvar *home-scan* (ppcre:create-scanner (concatenate 'string "^" (format NIL "~a" (user-homedir-pathname)))))
|
|
|
|
|
|
(defun pwd ()
|
|
(defun pwd ()
|
|
(ppcre:regex-replace *home-scan* (uiop:getenv "PWD") "~/"))
|
|
(ppcre:regex-replace *home-scan* (uiop:getenv "PWD") "~/"))
|
|
|
|
|
|
(defun main ()
|
|
(defun main ()
|
|
- (format T "~a ~%λ " (pwd)))
|
|
|
|
|
|
+ (setf *config* (config-parse "/home/swatson/Repos/cl-pest/config.toml"))
|
|
|
|
+ (format T "~a λ " (chlorophyll:stylize *style* (pwd))))
|