Install dependencies by grabbing them from the system monad
This commit is contained in:
parent
bbebc214ae
commit
e59ba046b5
|
@ -35,7 +35,8 @@
|
|||
system
|
||||
'(:name "elisp"
|
||||
:keys nil
|
||||
:dependencies ((paredit-mode . :latest))))))
|
||||
:dependencies ((:name rainbow-delimiters
|
||||
:version :latest))))))
|
||||
|
||||
|
||||
(provide 'cubes/elisp)
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
system
|
||||
'(:name "org"
|
||||
:keys nil
|
||||
:dependencies ((org-mode . :latest))))))
|
||||
:dependencies ((:name org :version :latest))))))
|
||||
|
||||
|
||||
(provide 'cubes/org)
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
;; Each system has to have a `start' function to start the setup process.
|
||||
;;
|
||||
;;; Code:
|
||||
(require 'fg42/state)
|
||||
(require 'fg42/system/dependencies)
|
||||
|
||||
|
||||
;;;###autoload
|
||||
|
@ -33,15 +33,10 @@
|
|||
(require 'fg42/utils)
|
||||
(require 'fg42/system/core)
|
||||
(require 'fg42/system/dependencies)
|
||||
(require 'fg42/system/utils)
|
||||
|
||||
(debug-message "Starting the default system.")
|
||||
(let ((system-map (funcall system '())))
|
||||
(fg42/system-install-dependencies system-map)))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
(provide 'fg42/system)
|
||||
;;; system.el ends here
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
(require 'cl-lib)
|
||||
(require 'fg42/utils)
|
||||
(require 'fg42/state)
|
||||
|
||||
|
||||
(defun fg42/system-cons (system k v)
|
||||
"Set the given key K to the given value V in the SYSTEM."
|
||||
|
@ -59,7 +59,7 @@
|
|||
|
||||
|
||||
(defmacro defsystem (name props &rest body)
|
||||
"Define a system with the given NAME, DOCSTRING and BODY."
|
||||
"Define a system with the given NAME, PROPS and BODY."
|
||||
(declare (indent 1))
|
||||
`(defun ,name ()
|
||||
(fg42/cube-compose ,@body)))
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
;; Each system has to have a `start' function to start the setup process.
|
||||
;;
|
||||
;;; Code:
|
||||
(require 'fpkg)
|
||||
(require 'fg42/system/core)
|
||||
|
||||
|
||||
|
@ -35,18 +36,52 @@
|
|||
system))
|
||||
|
||||
|
||||
(defun fg42/system-dependencies (system)
|
||||
"Return a flat list of dependencies of the SYSTEM."
|
||||
(seq-reduce
|
||||
(lambda (lst pair)
|
||||
(append lst (cdr pair)))
|
||||
(fg42/system-get system :dependencies)
|
||||
'()))
|
||||
|
||||
(defun fg42/system-install-dependency (dep)
|
||||
"Install the given dependency DEP."
|
||||
(message ">>>> %s" dep))
|
||||
"Install the given dependency list DEP.
|
||||
dep is in (cube-name (...dependencies...)) format."
|
||||
(message "Installing dependencies of '%s' cube..." (car dep))
|
||||
(mapcar #'fpkg/install-package (cdr dep)))
|
||||
|
||||
|
||||
(defun fg42/system-install-dependencies (system)
|
||||
"Install the dependencies in the SYSTEM."
|
||||
(mapcar #'fg42/system-install-dependency
|
||||
(fg42/system-get system :dependencies))
|
||||
(when (not (fg42/system-dependencies-installed? system))
|
||||
(fg42/system-refresh-package-index system)
|
||||
(mapc #'fg42/system-install-dependency
|
||||
(fg42/system-get system :dependencies)))
|
||||
system)
|
||||
|
||||
|
||||
(defun fg42/system-refresh-package-index (system)
|
||||
"Refresh the package index of the SYSTEM is dependencies were missing."
|
||||
(unless (fg42/system-dependencies-installed? system)
|
||||
;; check for new packages (package versions)
|
||||
(message "Refreshing package database...")
|
||||
;; TODO: call different function to update every source
|
||||
;; in the system. Something similar to what we do
|
||||
;; with package-install on FPKG
|
||||
(fpkg/initialize system)
|
||||
(package-refresh-contents)))
|
||||
|
||||
|
||||
(defun fg42/system-dependencies-installed? (system)
|
||||
"Return t if all the dependencies of the given SYSTEM are installed."
|
||||
(let ((pkgs (fg42/system-dependencies system)))
|
||||
(seq-reduce
|
||||
(lambda (all-installed? pkg)
|
||||
(and all-installed?
|
||||
(fpkg/package-installed? pkg)))
|
||||
pkgs
|
||||
t)))
|
||||
|
||||
|
||||
(provide 'fg42/system/dependencies)
|
||||
;;; dependencies.el ends here
|
||||
|
|
Loading…
Reference in New Issue