# -*- geiser-scheme-implementation: guile -*- #+TITLE: Babel Library This library contains code blocks to be used by other files in this repository. * Converting Lists Converting org lists into guix ~use-~ calls. #+NAME: list-to-use #+begin_src scheme :var use-call="use-modules" :var entries='() :var all-parens=0 :results code pp `(,(string->symbol use-call) ,@(map (lambda (x) (let ((splits (string-split x #\ ))) (if (and (= (length splits) 1) (= 0 all-parens)) (string->symbol (car splits)) (map (lambda (y) (string->symbol y)) splits)))) entries)) #+end_src Converting Org lists into Scheme symbol lists. #+NAME: org-to-scheme-sym-list #+begin_src scheme :var input='() :results code pp `(list ,@(map (lambda (x) (string->symbol x)) input)) #+end_src * Converting Tables #+NAME: service-converter #+begin_src scheme :var input='() :colnames yes :results code pp `(list ,@(map (lambda (row) (let ((service-name (car row)) (configuration (cadr row))) `(service ,(string->symbol (string-append service-name "-service-type")) (,(string->symbol (string-append service-name "-configuration")) ,@(call-with-input-string configuration read))))) input)) #+end_src