diff options
author | Óscar Nájera <hi@oscarnajera.com> | 2022-05-05 14:42:32 +0200 |
---|---|---|
committer | Óscar Nájera <hi@oscarnajera.com> | 2022-05-05 14:45:34 +0200 |
commit | 2cb5bf997bfa81df0290e0496a15f1f39a569e78 (patch) | |
tree | e5d0241bc7b06717319fc30fc1b9e158b160f567 /lib/guile/utils.scm | |
parent | 0abc6abea330c4279232037252c9010d96648d79 (diff) | |
download | dotfiles-2cb5bf997bfa81df0290e0496a15f1f39a569e78.tar.gz dotfiles-2cb5bf997bfa81df0290e0496a15f1f39a569e78.tar.bz2 dotfiles-2cb5bf997bfa81df0290e0496a15f1f39a569e78.zip |
Import my guile libraries
Diffstat (limited to 'lib/guile/utils.scm')
-rwxr-xr-x | lib/guile/utils.scm | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/guile/utils.scm b/lib/guile/utils.scm new file mode 100755 index 0000000..ad1b1ed --- /dev/null +++ b/lib/guile/utils.scm @@ -0,0 +1,27 @@ +(define-module (utils) + #:export (-> ->> expand-file)) + +(define-syntax -> + (syntax-rules () + ((_ value) value) + ((_ value (f1 . body) next ...) (-> (f1 value . body) next ...)) + ((_ value fun next ...) (-> (fun value) next ...)))) + +(define-syntax ->> + (syntax-rules () + ((_ value) value) + ((_ value (f ...) rest ...) (->> (f ... value) rest ...)) + ((_ value f rest ...) (->> (f value) rest ...)))) + +(define (expand-file f) + ;; https://irreal.org/blog/?p=83 + (cond ((char=? (string-ref f 0) #\/) f) + ((string=? (substring f 0 2) "~/") + (let ((prefix (passwd:dir (getpwuid (geteuid))))) + (string-append prefix (substring f 1 (string-length f))))) + ((char=? (string-ref f 0) #\~) + (let* ((user-end (string-index f #\/)) + (user (substring f 1 user-end)) + (prefix (passwd:dir (getpwnam user)))) + (string-append prefix (substring f user-end (string-length f))))) + (else (string-append (getcwd) "/" f)))) |