summaryrefslogtreecommitdiffstats
path: root/guix/jd/utils.scm
blob: 72be6fc8b091adeef0c81a3912d5915a93267b82 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
(define-module (jd utils)
  #:use-module (gnu system)
  #:use-module (ice-9 match)
  #:export (jd-search-patches
	    current-operating-system
	    current-home))

(define primitive-host-operating-system
  "/etc/config.scm")

(define-macro (define-combine-operating-systems name fields)
  `(define (,name os-to-inherit-from os)
     (operating-system
      (inherit os-to-inherit-from)
      ,@(map (lambda (field)
	       `(,field
		 (,(string->symbol
		    (string-append
		     "operating-system-"
		     (symbol->string field)))
		  os)))
	     fields))))

(define-combine-operating-systems combine-install-dest-informations
  (bootloader mapped-devices file-systems))

(define (make-reconfigureable-os os)
  (combine-install-dest-informations
   os
   (load primitive-host-operating-system)))

(define (current-operating-system)
  (make-reconfigureable-os
   (module-ref
    (resolve-module
     `(jd desktops ,(string->symbol (gethostname))))
    'system)))

(define (current-home)
  (module-ref
   (resolve-module
    `(jd desktops ,(string->symbol (gethostname))))
   'home))

;; This code is copied and modified from (gnu packages) module. 

(define (make-custom-load-path dir-path)
  (make-parameter
   (map (lambda (directory)
	  (let ((custom-dir (string-append directory dir-path)))
            (if (and (file-exists? custom-dir)
		     (file-is-directory? custom-dir))
		custom-dir
		directory)))
        %load-path)))

(define (make-custom-searcher load-path)
  (lambda (file-name)
    (or (search-path (load-path) file-name)
	(raise (string-append file-name
			      ": not found")))))

(define %jd-patch-path (make-custom-load-path "/jd/packages/patches"))
(define %jd-dot-files-path (make-custom-load-path "/jd/home/services/dotfiles"))

(define (jd-search-patch file-name)
  "Search the patch FILE-NAME.  Raise an error if not found."
  (or (search-path (%jd-patch-path) file-name)
      (raise (string-append file-name
			    ": patch not found"))))

(define-syntax-rule (jd-search-patches file-name ...)
  "Return the list of absolute file names corresponding to each
FILE-NAME found in %JD-PATCH-PATH."
  (list (jd-search-patch file-name) ...))