]> git.ameliathe1st.gay Git - canal-guix.git/commitdiff
Utilitaire pour lire un fichier et remplacer des noms de fichiers par les localisatio...
authorAmélia P. H. Coutard <amy@ameliathe1st.gay>
Sat, 6 Apr 2024 15:56:44 +0000 (17:56 +0200)
committerAmélia P. H. Coutard <amy@ameliathe1st.gay>
Sat, 6 Apr 2024 15:56:44 +0000 (17:56 +0200)
amyx/home.scm [new file with mode: 0644]

diff --git a/amyx/home.scm b/amyx/home.scm
new file mode 100644 (file)
index 0000000..f4eec34
--- /dev/null
@@ -0,0 +1,48 @@
+; 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))
+