Install dependencies by grabbing them from the system monad
This commit is contained in:
parent
bbebc214ae
commit
e59ba046b5
|
@ -35,7 +35,8 @@
|
||||||
system
|
system
|
||||||
'(:name "elisp"
|
'(:name "elisp"
|
||||||
:keys nil
|
:keys nil
|
||||||
:dependencies ((paredit-mode . :latest))))))
|
:dependencies ((:name rainbow-delimiters
|
||||||
|
:version :latest))))))
|
||||||
|
|
||||||
|
|
||||||
(provide 'cubes/elisp)
|
(provide 'cubes/elisp)
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
system
|
system
|
||||||
'(:name "org"
|
'(:name "org"
|
||||||
:keys nil
|
:keys nil
|
||||||
:dependencies ((org-mode . :latest))))))
|
:dependencies ((:name org :version :latest))))))
|
||||||
|
|
||||||
|
|
||||||
(provide 'cubes/org)
|
(provide 'cubes/org)
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
;; Each system has to have a `start' function to start the setup process.
|
;; Each system has to have a `start' function to start the setup process.
|
||||||
;;
|
;;
|
||||||
;;; Code:
|
;;; Code:
|
||||||
(require 'fg42/state)
|
(require 'fg42/system/dependencies)
|
||||||
|
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
|
@ -33,15 +33,10 @@
|
||||||
(require 'fg42/utils)
|
(require 'fg42/utils)
|
||||||
(require 'fg42/system/core)
|
(require 'fg42/system/core)
|
||||||
(require 'fg42/system/dependencies)
|
(require 'fg42/system/dependencies)
|
||||||
(require 'fg42/system/utils)
|
|
||||||
|
|
||||||
(debug-message "Starting the default system.")
|
|
||||||
(let ((system-map (funcall system '())))
|
(let ((system-map (funcall system '())))
|
||||||
(fg42/system-install-dependencies system-map)))
|
(fg42/system-install-dependencies system-map)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(provide 'fg42/system)
|
(provide 'fg42/system)
|
||||||
;;; system.el ends here
|
;;; system.el ends here
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
(require 'cl-lib)
|
(require 'cl-lib)
|
||||||
(require 'fg42/utils)
|
(require 'fg42/utils)
|
||||||
(require 'fg42/state)
|
|
||||||
|
|
||||||
(defun fg42/system-cons (system k v)
|
(defun fg42/system-cons (system k v)
|
||||||
"Set the given key K to the given value V in the SYSTEM."
|
"Set the given key K to the given value V in the SYSTEM."
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
|
|
||||||
|
|
||||||
(defmacro defsystem (name props &rest body)
|
(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))
|
(declare (indent 1))
|
||||||
`(defun ,name ()
|
`(defun ,name ()
|
||||||
(fg42/cube-compose ,@body)))
|
(fg42/cube-compose ,@body)))
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
;; Each system has to have a `start' function to start the setup process.
|
;; Each system has to have a `start' function to start the setup process.
|
||||||
;;
|
;;
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
(require 'fpkg)
|
||||||
(require 'fg42/system/core)
|
(require 'fg42/system/core)
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,18 +36,52 @@
|
||||||
system))
|
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)
|
(defun fg42/system-install-dependency (dep)
|
||||||
"Install the given dependency DEP."
|
"Install the given dependency list DEP.
|
||||||
(message ">>>> %s" 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)
|
(defun fg42/system-install-dependencies (system)
|
||||||
"Install the dependencies in the SYSTEM."
|
"Install the dependencies in the SYSTEM."
|
||||||
(mapcar #'fg42/system-install-dependency
|
(when (not (fg42/system-dependencies-installed? system))
|
||||||
(fg42/system-get system :dependencies))
|
(fg42/system-refresh-package-index system)
|
||||||
|
(mapc #'fg42/system-install-dependency
|
||||||
|
(fg42/system-get system :dependencies)))
|
||||||
system)
|
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)
|
(provide 'fg42/system/dependencies)
|
||||||
;;; dependencies.el ends here
|
;;; dependencies.el ends here
|
||||||
|
|
Loading…
Reference in New Issue