Thank you Thomas and Felix for your patience!

@Thomas, this was the solution!
Works like a charm now :)

On 24 May 2024 12:19:39 CEST, Tomas Volf <~@wolfsden.cz> wrote:
>On 2024-05-23 21:25:08 +0200, Tristan Kohl via wrote:
>> Well look at me. So focused in my old ways on constructing a shell script 
>> that I did not even think about using Guile as the executable :D
>>
>> Thank you Thomas an Felix for your pointers!
>>
>> I read up about G-Expressions and got it almost working. But I must miss 
>> something because when executing the build result it makes the request 
>> successfully (checked return of http-get with pk and logs on the server) but 
>> still fails with this error:
>>
>> Backtrace:
>>                 0 (primitive-load "/gnu/store/9gjnc0p...")
>>
>> ERROR: In procedure primitive-load:
>> Wrong type to apply: #<unspecified>
>>
>>
>> (use-module (gnu) (guix modules))
>> (use-package-modules tls)
>>
>> (define smartd-send-ntfy
>>   (program-file "smartd-send-ntfy"
>>     (with-extensions (list gnutls)
>>       (with-imported-modules
>>         (source-module-closure '((web client)))
>>         #~((use-modules (web client))
>>            (http-get "https://example.com";))))))
>
>I think g-exp needs to be a single expression.  In other words, add `begin' in
>there.  In your code you are basically trying to apply result of `(use-modules
>...)' to result of `(http-get ...)'.  Since use-modules do not return anything,
>you get the error above.  You can test it using just plain guile and you will
>get the same error:
>
>    guile -c '((use-modules (web client)) (http-get "https://example.org";))'
>
>I think this should work:
>
>      (define smartd-send-ntfy
>        (program-file "smartd-send-ntfy"
>          (with-extensions (list gnutls)
>            (with-imported-modules
>              (source-module-closure '((web client)))
>              #~(begin (use-modules (web client))
>                       (http-get "https://example.com";))))))
>
>Your original code:
>
>      $ guix repl
>      Loading Guix REPL meta-commands...
>      Increasing build verbosity...
>      Disabling grafting...
>      GNU Guile 3.0.9
>      Copyright (C) 1995-2023 Free Software Foundation, Inc.
>
>      Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
>      This program is free software, and you are welcome to redistribute it
>      under certain conditions; type `,show c' for details.
>
>      Enter `,help' for help.
>      scheme@(guix-user)> ,use (guix)
>      scheme@(guix-user)> #~((use-modules (web client)) (http-get 
> "https://example.com";))
>      $1 = #<gexp ((use-modules (web client)) (http-get 
> "https://example.com";)) 7f6c48696720>
>      scheme@(guix-user)> (program-file "test" $1)
>      $2 = #<<program-file> name: "test" gexp: #<gexp ((use-modules (web 
> client)) (http-get "https://example.com";)) 7f6c48696720> guile: #f path: 
> ("/gnu/store/ff1cyww9qlra4849q6k0n30w7q67ziim-guix-module-union/share/guile/site/3.0"
>  "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/3.0" 
> "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/3.0" 
> "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/site/3.0"
>  "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/site" 
> "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile" 
> "/home/wolf/.guix-home/profile/share/guile/site/3.0" 
> "/run/current-system/profile/share/guile/site/3.0")>
>      scheme@(guix-user)> ,lower $2
>      $3 = #<derivation /gnu/store/x3rkbl47j83d5ps8r8a915blks6hfbin-test.drv 
> => /gnu/store/50m45lc93x7fayaq3y7kzi2zhjz7qwdz-test 7f6c35dd5d70>
>      scheme@(guix-user)> ,build $3
>      building /gnu/store/x3rkbl47j83d5ps8r8a915blks6hfbin-test.drv...
>      successfully built /gnu/store/x3rkbl47j83d5ps8r8a915blks6hfbin-test.drv
>      $4 = "/gnu/store/50m45lc93x7fayaq3y7kzi2zhjz7qwdz-test"
>      scheme@(guix-user)> (system $4)
>      Backtrace:
>                 0 (primitive-load 
> "/gnu/store/50m45lc93x7fayaq3y7kzi2zhjz7qwdz-test")
>
>      ERROR: In procedure primitive-load:
>      Wrong type to apply: #<unspecified>
>      $5 = 256
>
>Now with the `begin':
>
>      scheme@(guix-user)> #~(begin (use-modules (web client)) (http-get 
> "https://example.com";))
>      $6 = #<gexp (begin (use-modules (web client)) (http-get 
> "https://example.com";)) 7f6c35e61a20>
>      scheme@(guix-user)> (program-file "test" $6)
>      $7 = #<<program-file> name: "test" gexp: #<gexp (begin (use-modules (web 
> client)) (http-get "https://example.com";)) 7f6c35e61a20> guile: #f path: 
> ("/gnu/store/ff1cyww9qlra4849q6k0n30w7q67ziim-guix-module-union/share/guile/site/3.0"
>  "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/3.0" 
> "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/3.0" 
> "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/site/3.0"
>  "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/site" 
> "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile" 
> "/home/wolf/.guix-home/profile/share/guile/site/3.0" 
> "/run/current-system/profile/share/guile/site/3.0" 
> "/gnu/store/s2cf4ibjw0g6npx0ia54x5xg6hzangn7-wolfsden/share/guile/site/3.0" 
> "/gnu/store/czkzwa77lr39ayj016vhqrbhf2da2isr-nonguix/share/guile/site/3.0")>
>      scheme@(guix-user)> ,lower $7
>      $8 = #<derivation /gnu/store/7xcnijz3cf4231sdg0df5hig259k38nf-test.drv 
> => /gnu/store/7ylpw11r0sbdc2z02sir5gcr552dqks6-test 7f6c3606cb40>
>      scheme@(guix-user)> ,build $8
>      building /gnu/store/7xcnijz3cf4231sdg0df5hig259k38nf-test.drv...
>      successfully built /gnu/store/7xcnijz3cf4231sdg0df5hig259k38nf-test.drv
>      $9 = "/gnu/store/7ylpw11r0sbdc2z02sir5gcr552dqks6-test"
>      scheme@(guix-user)> (system $9)
>      $10 = 0
>
>>
>>
>> On 21 May 2024 17:50:27 CEST, Tomas Volf <~@wolfsden.cz> wrote:
>> >On 2024-05-21 17:33:24 +0200, Tristan Kohl via wrote:
>> >> Hello Felix,
>> >>
>> >> my last message was not to critizise your help but rather my frustration 
>> >> with my own limited progress. I really appreciate the help!
>> >>
>> >> program-file at least results in a usable thing however since the script 
>> >> gets executed by smard I get the "command not found" in my logs. It seems 
>> >> like curl is not in PATH for smartd. Do I need to import something into 
>> >> the gexp?
>> >>
>> >> Also those env variables are defined by smartd during runtime depending 
>> >> on which drive produced the error. Therefore I need shell expansion/env 
>> >> variables and have to use system (without *) imho.
>> >>
>> >> This is the current state:
>> >>
>> >> (define-smartd-send-ntfy
>> >>   (program-file "send-ntfy"
>> >>     #~(system
>> >>       (string-append "curl " "-H \"Title: $SMARTD_SUBJECT\" " ...))))
>> >
>> >Ignoring the obvious quoting issues here (what Felix does with `getenv' 
>> >seems
>> >much safer, and should produce the same result?),
>> >
>> >>
>> >> Note: when using system* the error is:
>> >> In execvp of curl: No such file or directory
>> >
>> >This should be solvable by using `file-append', so, basing on the system*
>> >variant, something like:
>> >
>> >    #~(system* #$(file-append curl "/bin/curl") <other-arguments-here>)
>> >
>> >Should invoke curl by absolute path.  (You need import (gnu packages curl) 
>> >of
>> >course.)
>> >
>> >Hope this helps,
>> >Tomas
>> >
>> >--
>> >There are only two hard things in Computer Science:
>> >cache invalidation, naming things and off-by-one errors.
>
>Have a nice day,
>Tomas
>
>--
>There are only two hard things in Computer Science:
>cache invalidation, naming things and off-by-one errors.

Reply via email to