--- /dev/null
+; Copyright 2023 Amélia COUTARD.
+;
+; This file from the guix channel amy is free software: you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the Free Software Foundation,
+; either version 3 of the License, or (at your option) any later version.
+;
+; This channel is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+; PURPOSE. See the GNU General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License along with this channel. If
+; not, see <https://www.gnu.org/licenses/>.
+
+(define-module (amyx home)
+ #:use-module (ice-9 exceptions)
+ #:use-module (ice-9 regex)
+ #:use-module (ice-9 textual-ports)
+ #:use-module (srfi srfi-1)
+ #:export (replace-store-files))
+
+(define (find-file-in-packages f packages)
+ (let ((l (filter-map (lambda (p)
+ (and (stat (string-append p "/" f) #f)
+ (string-append p "/" f))) packages)))
+ (cond
+ ((= (length l) 0)
+ (raise-exception (make-exception (make-error)
+ (make-exception-with-message (string-append
+ "File found in no packages: "
+ f)))))
+ ((= (length l) 1)
+ (car l))
+ (else (raise-exception (make-exception (make-error)
+ (make-exception-with-message (string-append
+ "File found in multiple packages: "
+ f))))))))
+
+(define (replace-store-files file packages)
+ (regexp-substitute/global #f
+ "#\\$([^ \n\t]*)"
+ (call-with-input-file file
+ get-string-all)
+ 'pre
+ (lambda (m)
+ (find-file-in-packages (match:substring m 1)
+ packages))
+ 'post))
+