@@ -38,6 +38,7 @@ (define-module (guix scripts home)
#:autoload (guix scripts pull) (channel-commit-hyperlink)
#:use-module (guix scripts home import)
#:use-module ((guix status) #:select (with-status-verbosity))
+ #:use-module ((guix build utils) #:select (mkdir-p))
#:use-module (guix gexp)
#:use-module (guix monads)
#:use-module (srfi srfi-1)
@@ -248,15 +249,21 @@ (define-syntax-rule (with-store* store exp ...)
(apply search args))
((import)
(let* ((profiles (delete-duplicates
- (match (filter-map (match-lambda
- (('profile . p) p)
- (_ #f))
- opts)
- (() (list %current-profile))
- (lst (reverse lst)))))
- (manifest (concatenate-manifests
- (map profile-manifest profiles))))
- (import-manifest manifest (current-output-port))))
+ (match (filter-map (match-lambda
+ (('profile . p) p)
+ (_ #f))
+ opts)
+ (() (list %current-profile))
+ (lst (reverse lst)))))
+ (manifest (concatenate-manifests
+ (map profile-manifest profiles)))
+ (destination (match args
+ ((destination) destination)
+ (_ (leave (G_ "wrong number of arguments~%"))))))
+ (unless (file-exists? destination)
+ (mkdir-p destination))
+ (parameterize ((%destination-directory destination))
+ (import-manifest manifest (current-output-port)))))
((describe)
(match (generation-number %guix-home)
(0
@@ -27,7 +27,8 @@ (define-module (guix scripts home import)
#:use-module (ice-9 pretty-print)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
- #:export (import-manifest))
+ #:export (import-manifest
+ %destination-directory))
;;; Commentary:
;;;
@@ -36,29 +37,34 @@ (define-module (guix scripts home import)
;;;
;;; Code:
+(define %destination-directory
+ (make-parameter (string-append (getenv "HOME") "/src/guix-config")))
(define (generate-bash-module+configuration)
- (let ((rc (string-append (getenv "HOME") "/.bashrc"))
- (profile (string-append (getenv "HOME") "/.bash_profile"))
- (logout (string-append (getenv "HOME") "/.bash_logout")))
+ (define (destination-append path)
+ (string-append (%destination-directory) "/" path))
+
+ (let ((rc (destination-append ".bashrc"))
+ (profile (destination-append ".bash_profile"))
+ (logout (destination-append ".bash_logout")))
`((gnu home-services bash)
(service home-bash-service-type
- (home-bash-configuration
- ,@(if (file-exists? rc)
- `((bashrc
- (list (slurp-file-gexp (local-file ,rc)))))
- '())
- ,@(if (file-exists? profile)
- `((bash-profile
- (list (slurp-file-gexp
- (local-file ,profile)))))
- '())
- ,@(if (file-exists? logout)
- `((bash-logout
- (list (slurp-file-gexp
- (local-file ,logout)))))
- '()))))))
-
+ (home-bash-configuration
+ ,@(if (file-exists? rc)
+ `((bashrc
+ (list (slurp-file-gexp
+ (local-file ,rc)))))
+ '())
+ ,@(if (file-exists? profile)
+ `((bash-profile
+ (list (slurp-file-gexp
+ (local-file ,profile)))))
+ '())
+ ,@(if (file-exists? logout)
+ `((bash-logout
+ (list (slurp-file-gexp
+ (local-file ,logout)))))
+ '()))))))
(define %files-configurations-alist
`((".bashrc" . ,generate-bash-module+configuration)
@@ -66,17 +72,24 @@ (define %files-configurations-alist
(".bash_logout" . ,generate-bash-module+configuration)))
(define (modules+configurations)
- (let ((configurations (delete-duplicates
- (filter-map (match-lambda
- ((file . proc)
- (if (file-exists?
- (string-append (getenv "HOME") "/" file))
- proc
- #f)))
- %files-configurations-alist)
- (lambda (x y)
- (equal? (procedure-name x) (procedure-name y))))))
- (map (lambda (proc) (proc)) configurations)))
+ (define configurations
+ (delete-duplicates
+ (filter-map (match-lambda
+ ((file . proc)
+ (let ((absolute-path (string-append (getenv "HOME")
+ "/" file)))
+ (if (file-exists? absolute-path)
+ (begin
+ (copy-file absolute-path
+ (string-append
+ (%destination-directory) "/" file))
+ proc)
+ #f))))
+ %files-configurations-alist)
+ (lambda (x y)
+ (equal? (procedure-name x) (procedure-name y)))))
+
+ (map (lambda (proc) (proc)) configurations))
;; Based on `manifest->code' from (guix profiles)
;; MAYBE: Upstream it?