changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/bin/homer.lisp

changeset 698: 96958d3eb5b0
parent: 2e7d93b892a5
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
1
 ;;; homer.lisp --- homectl utility
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
2
 
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
3
 ;;; Code:
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
4
 (defpackage :bin/homer
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
5
   (:nicknames :homer)
342
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
6
   (:use :cl :std :log :sxp :rdb :skel :packy :cli :obj/id :krypt :vc)
651
af486e0a40c9 multi-binaries, working on removing x.lisp
Richard Westhaver <ellis@rwest.io>
parents: 650
diff changeset
7
   (:export :*home-config*))
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
8
 
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
9
 (in-package :bin/homer)
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
10
 (defvar *user* (sb-posix:getenv "USER"))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
11
 (defvar *user-homedir* (user-homedir-pathname))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
12
 (defvar *default-user-homerc* (merge-pathnames ".homerc" *user-homedir*))
342
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
13
 (declaim (type home-config *home-config*))
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
14
 (defvar *home-config*)
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
15
 (defvar *home-hidden-paths* (nconc *hidden-paths* (list "stash" "store" "readme.org" ".hgignore")))
355
09f056e9a789 bugfixes, x test
Richard Westhaver <ellis@rwest.io>
parents: 354
diff changeset
16
 (defvar *homer-force* nil)
556
Richard Westhaver <ellis@rwest.io>
parents: 510
diff changeset
17
 
Richard Westhaver <ellis@rwest.io>
parents: 510
diff changeset
18
 (defun init-homer-vars ()
Richard Westhaver <ellis@rwest.io>
parents: 510
diff changeset
19
   (setq *user* (sb-posix:getenv "USER")
Richard Westhaver <ellis@rwest.io>
parents: 510
diff changeset
20
         *user-homedir* (user-homedir-pathname)
Richard Westhaver <ellis@rwest.io>
parents: 510
diff changeset
21
         *default-user-homerc* (merge-pathnames ".homerc" *user-homedir*)))
Richard Westhaver <ellis@rwest.io>
parents: 510
diff changeset
22
   
206
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
23
 (defclass home-config (sxp id)
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
24
   ((user :initform *user* :initarg :user :type string)
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
25
    (path :initform nil :initarg :path :type (or pathname null))
569
Richard Westhaver <ellis@rwest.io>
parents: 567
diff changeset
26
    (src :initform nil :initarg :src :type (or null pathname vc-repo))
347
724218ecea4b nullables
Richard Westhaver <ellis@rwest.io>
parents: 345
diff changeset
27
    (skel :initform (load-user-skelrc) :initarg :skel :type (or null pathname sk-user-config))
724218ecea4b nullables
Richard Westhaver <ellis@rwest.io>
parents: 345
diff changeset
28
    (krypt :initform (load-kryptrc) :initarg :krypt :type (or null pathname krypt-config))
724218ecea4b nullables
Richard Westhaver <ellis@rwest.io>
parents: 345
diff changeset
29
    (packy :initform nil :initarg :packy :type (or null pathname pk-user-config))
342
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
30
    (mail :initarg :mail :type pathname)
510
607f80be99ca add term to homer config cuz why not
Richard Westhaver <ellis@rwest.io>
parents: 355
diff changeset
31
    (term :initform nil :type (or pathname null term-user-config))
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
32
    (shell :initarg :shell :type (or pathname shell-user-config))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
33
    (editor :initarg :editor :type (or pathname editor-user-config))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
34
    (wm :initarg :wm :type (or pathname wm-user-config))
342
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
35
    (browser :initarg :browser :type (or pathname browser-user-config))))
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
36
 
289
c4682fedd73d added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents: 206
diff changeset
37
 (defmethod print-object ((self home-config) stream)
c4682fedd73d added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents: 206
diff changeset
38
   (print-unreadable-object (self stream :type t)
c4682fedd73d added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents: 206
diff changeset
39
     (format stream "~S ~A" :id (format-sxhash (id self)))))
c4682fedd73d added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents: 206
diff changeset
40
 
206
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
41
 (defun find-homer-symbol (s)
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
42
   (find-symbol* (symbol-name s) :homer nil))
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
43
 
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
44
 (defmethod load-ast ((self home-config))
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
45
   (with-slots (ast) self
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
46
     (if (formp ast)
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
47
         ;; ast is valid, modify object, set ast nil
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
48
         (progn
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
49
           (sb-int:doplist (k v) ast
342
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
50
             (when-let ((s (find-homer-symbol k))) ;; needs to be correct package
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
51
               (setf (slot-value self s) v)))
206
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
52
           (setf (ast self) nil)
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
53
           self)
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
54
         ;; invalid ast, signal error
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
55
         (error 'sxp-syntax-error))))
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
56
 
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
57
 ;; obj -> ast
289
c4682fedd73d added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents: 206
diff changeset
58
 (defmethod build-ast ((self home-config) &key (nullp nil) (exclude '(ast id)))
206
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
59
   (setf (ast self)
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
60
         (unwrap-object self
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
61
                        :slots t
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
62
                        :methods nil
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
63
                        :nullp nullp
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
64
                        :exclude exclude)))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
65
 
206
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
66
 (defun load-homerc (&optional (file *default-user-homerc*))
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
67
   "Load a homerc configuration from FILE. Defaults to ~/.homerc."
344
Richard Westhaver <ellis@rwest.io>
parents: 342
diff changeset
68
   (unless (null (probe-file file))
Richard Westhaver <ellis@rwest.io>
parents: 342
diff changeset
69
     (let ((form (file-read-forms file)))
Richard Westhaver <ellis@rwest.io>
parents: 342
diff changeset
70
       (setq *home-config* (load-ast (make-instance 'home-config :ast form :path file :id (sxhash form))))
Richard Westhaver <ellis@rwest.io>
parents: 342
diff changeset
71
       (with-slots (src) *home-config*
349
1b3761849c98 homer tweaks
Richard Westhaver <ellis@rwest.io>
parents: 348
diff changeset
72
         (if src
344
Richard Westhaver <ellis@rwest.io>
parents: 342
diff changeset
73
             (setf src (pathname src))
349
1b3761849c98 homer tweaks
Richard Westhaver <ellis@rwest.io>
parents: 348
diff changeset
74
             (if-let ((homer (sb-posix:getenv "HOMER")))
1b3761849c98 homer tweaks
Richard Westhaver <ellis@rwest.io>
parents: 348
diff changeset
75
               (setf src (pathname homer))
1b3761849c98 homer tweaks
Richard Westhaver <ellis@rwest.io>
parents: 348
diff changeset
76
               (error "missing HOMER directory")))))))
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
77
 
342
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
78
 ;;; CLI
561
42bc1432f217 bin updates
Richard Westhaver <ellis@rwest.io>
parents: 556
diff changeset
79
 (defopt homer-help (print-help *cli*))
42bc1432f217 bin updates
Richard Westhaver <ellis@rwest.io>
parents: 556
diff changeset
80
 (defopt homer-version (print-version *cli*))
42bc1432f217 bin updates
Richard Westhaver <ellis@rwest.io>
parents: 556
diff changeset
81
 (defopt homer-log-level (when *arg* (setq *log-level* :debug)))
42bc1432f217 bin updates
Richard Westhaver <ellis@rwest.io>
parents: 556
diff changeset
82
 (defopt homer-force (when *arg* (setq *homer-force* t)))
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
83
 
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
84
 (defcmd homer-show
342
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
85
   (describe *home-config*))
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
86
 
345
feab62701ad1 work on homer check
Richard Westhaver <ellis@rwest.io>
parents: 344
diff changeset
87
 (defun mtime (path) (sb-posix:stat-mtime (sb-posix:stat path)))
355
09f056e9a789 bugfixes, x test
Richard Westhaver <ellis@rwest.io>
parents: 354
diff changeset
88
 (defun ctime (path) (sb-posix:stat-ctime (sb-posix:stat path)))
345
feab62701ad1 work on homer check
Richard Westhaver <ellis@rwest.io>
parents: 344
diff changeset
89
 
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
90
 (defun compare-home-file (src)
342
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
91
   "Compare a SRC path to what is stored in the user's home. Return a cons with
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
92
 the last modified timestamp of each file (SRC . HOME) or NIL."
345
feab62701ad1 work on homer check
Richard Westhaver <ellis@rwest.io>
parents: 344
diff changeset
93
   (let* ((name (enough-namestring src))
feab62701ad1 work on homer check
Richard Westhaver <ellis@rwest.io>
parents: 344
diff changeset
94
          (home (merge-pathnames name (user-homedir-pathname)))
feab62701ad1 work on homer check
Richard Westhaver <ellis@rwest.io>
parents: 344
diff changeset
95
          (m1 (mtime src))
feab62701ad1 work on homer check
Richard Westhaver <ellis@rwest.io>
parents: 344
diff changeset
96
          (m2 (when (probe-file home) (mtime home)))
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
97
          (status (cond
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
98
                    ((null m2) :new)
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
99
                    ((> m1 m2) :pull)
355
09f056e9a789 bugfixes, x test
Richard Westhaver <ellis@rwest.io>
parents: 354
diff changeset
100
                    ((< m1 m2) (unless (= (ctime home) m2)
09f056e9a789 bugfixes, x test
Richard Westhaver <ellis@rwest.io>
parents: 354
diff changeset
101
                                 :push))
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
102
                    (t))))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
103
     (cons status (cons src home))))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
104
 
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
105
 (defun homer-status (file)
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
106
   (let ((form (compare-home-file file)))
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
107
     (case (car form)
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
108
       ;; confirm with user
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
109
       (:new (println (format nil ":NEW ~A" (cdr form))))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
110
       (:pull (println (format nil ":PULL ~A" (cadr form))))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
111
       (:push (println (format nil ":PUSH ~A" (cddr form))))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
112
       (t nil))))
342
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
113
 
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
114
 (defcmd homer-check
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
115
   (with-slots (src) *home-config*
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
116
     (if-let ((src (probe-file src)))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
117
       (let ((*default-pathname-defaults* src))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
118
         (mapcar #'homer-status
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
119
                 (find-files
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
120
                  *default-pathname-defaults*
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
121
                  *home-hidden-paths*)))
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
122
       (error 'file-error :pathname src))))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
123
 
353
dde3618a2fcb ensure directories
Richard Westhaver <ellis@rwest.io>
parents: 352
diff changeset
124
 (defun homer-copy (input output)
dde3618a2fcb ensure directories
Richard Westhaver <ellis@rwest.io>
parents: 352
diff changeset
125
   (ensure-directories-exist output :verbose t)
dde3618a2fcb ensure directories
Richard Westhaver <ellis@rwest.io>
parents: 352
diff changeset
126
   (uiop:copy-file input output))
dde3618a2fcb ensure directories
Richard Westhaver <ellis@rwest.io>
parents: 352
diff changeset
127
 
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
128
 (defun homer-maybe-push (file)
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
129
   (let ((form (compare-home-file file)))
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
130
     (case (car form)
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
131
       (:push (progn
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
132
                (println (format nil ":PUSH ~A" (cddr form)))
353
dde3618a2fcb ensure directories
Richard Westhaver <ellis@rwest.io>
parents: 352
diff changeset
133
                (homer-copy (cddr form) (cadr form))))
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
134
       (t nil))))
342
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
135
 
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
136
 (defun homer-maybe-pull (file)
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
137
   (let ((form (compare-home-file file)))
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
138
     (case (car form)
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
139
       (:pull (progn
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
140
                (println (format nil ":PULL ~A" (cddr form)))
353
dde3618a2fcb ensure directories
Richard Westhaver <ellis@rwest.io>
parents: 352
diff changeset
141
                (homer-copy (cadr form) (cddr form))))
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
142
       (t nil))))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
143
 
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
144
 (defun homer-maybe-install (file)
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
145
   (let ((form (compare-home-file file)))
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
146
     (case (car form)
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
147
       (:pull (progn
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
148
                (println (format nil ":PULL ~A" (cddr form)))
353
dde3618a2fcb ensure directories
Richard Westhaver <ellis@rwest.io>
parents: 352
diff changeset
149
                (homer-copy (cadr form) (cddr form))))
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
150
       (:new (progn
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
151
               (println (format nil ":NEW ~A" (cddr form)))
353
dde3618a2fcb ensure directories
Richard Westhaver <ellis@rwest.io>
parents: 352
diff changeset
152
               (homer-copy (cadr form) (cddr form))))
355
09f056e9a789 bugfixes, x test
Richard Westhaver <ellis@rwest.io>
parents: 354
diff changeset
153
       (:push (if *homer-force*
09f056e9a789 bugfixes, x test
Richard Westhaver <ellis@rwest.io>
parents: 354
diff changeset
154
                  (progn
09f056e9a789 bugfixes, x test
Richard Westhaver <ellis@rwest.io>
parents: 354
diff changeset
155
                    (println (format nil ":OVERWRITE ~A" (cddr form)))
09f056e9a789 bugfixes, x test
Richard Westhaver <ellis@rwest.io>
parents: 354
diff changeset
156
                    (homer-copy (cadr form) (cddr form)))
09f056e9a789 bugfixes, x test
Richard Westhaver <ellis@rwest.io>
parents: 354
diff changeset
157
                  (trace! "skipping file:" (cddr form))))
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
158
       (t nil))))
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
159
 
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
160
 (defcmd homer-push
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
161
   (with-slots (src) *home-config*
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
162
     (if-let ((src (probe-file src)))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
163
       (let ((*default-pathname-defaults* src))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
164
         (mapc #'homer-maybe-push
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
165
               (find-files src *home-hidden-paths*)))
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
166
       (error 'file-error :pathname src))))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
167
 
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
168
 (defcmd homer-pull
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
169
   (with-slots (src) *home-config*
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
170
     (if-let ((src (probe-file src)))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
171
       (let ((*default-pathname-defaults* src))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
172
         (mapc #'homer-maybe-pull
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
173
               (find-files src *home-hidden-paths*)))
351
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
174
       (error 'file-error :pathname src))))
770f2d03efd8 homer push/pull
Richard Westhaver <ellis@rwest.io>
parents: 350
diff changeset
175
 
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
176
 (defcmd homer-install
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
177
   (with-slots (src) *home-config*
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
178
     (if-let ((src (probe-file src)))
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
179
       (let ((*default-pathname-defaults* src))
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
180
         (mapc #'homer-maybe-install
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
181
               (find-files src *home-hidden-paths*)))
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
182
       (error 'file-error :pathname src))))
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
183
 
651
af486e0a40c9 multi-binaries, working on removing x.lisp
Richard Westhaver <ellis@rwest.io>
parents: 650
diff changeset
184
 (define-cli *homer-cli*
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
185
   :name "homer"
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
186
   :version "0.1.0"
289
c4682fedd73d added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents: 206
diff changeset
187
   :description "user home manager"
584
35bb0d5ec95e bug fixes, added freedesktop.org.xml rule. more work on prolog/dql - considering lib/lang+forrth..
Richard Westhaver <ellis@rwest.io>
parents: 569
diff changeset
188
   :thunk 'homer-check
689
2e7d93b892a5 cli shell tests init
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
189
   :opts ((:name "level" :description "set the log level" :thunk homer-log-level)
2e7d93b892a5 cli shell tests init
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
190
          (:name "help" :description "print help" :thunk homer-help)
2e7d93b892a5 cli shell tests init
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
191
          (:name "version" :description "print version" :thunk homer-version)
2e7d93b892a5 cli shell tests init
Richard Westhaver <ellis@rwest.io>
parents: 651
diff changeset
192
          (:name "force" :description "use force" :thunk homer-force))
567
32995daa9a07 skel and cli updates
Richard Westhaver <ellis@rwest.io>
parents: 561
diff changeset
193
   :cmds ((:name show :thunk homer-show)
352
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
194
          (:name check :thunk homer-check)
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
195
          (:name push :thunk homer-push)
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
196
          (:name pull :thunk homer-pull)
840cce757946 homer install
Richard Westhaver <ellis@rwest.io>
parents: 351
diff changeset
197
          (:name install :thunk homer-install)))
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
198
 
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
199
 (defun run ()
289
c4682fedd73d added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents: 206
diff changeset
200
   (let ((*log-level* :info))
651
af486e0a40c9 multi-binaries, working on removing x.lisp
Richard Westhaver <ellis@rwest.io>
parents: 650
diff changeset
201
     (with-cli (*homer-cli* opts cmds args) (cli:args)
556
Richard Westhaver <ellis@rwest.io>
parents: 510
diff changeset
202
       (init-homer-vars)
342
254cca648492 homer fixups
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
203
       (load-homerc)
561
42bc1432f217 bin updates
Richard Westhaver <ellis@rwest.io>
parents: 556
diff changeset
204
       (do-cmd *cli*)
42bc1432f217 bin updates
Richard Westhaver <ellis@rwest.io>
parents: 556
diff changeset
205
       (debug-opts *cli*))))
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents:
diff changeset
206
 
651
af486e0a40c9 multi-binaries, working on removing x.lisp
Richard Westhaver <ellis@rwest.io>
parents: 650
diff changeset
207
 (defmain start-homer ()
206
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
208
   (let ((*print-readably* t))
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
209
     (run)
a0f64fed8f2a refactor nu ci, skel and homer updates
Richard Westhaver <ellis@rwest.io>
parents: 96
diff changeset
210
     (sb-ext:exit :code 0)))