unofficial mirror of help-guix@gnu.org 
 help / color / mirror / Atom feed
* Creating local variation of match-theme
@ 2019-12-08 16:53 Jack Hill
  2019-12-18 22:01 ` Jack Hill
  0 siblings, 1 reply; 5+ messages in thread
From: Jack Hill @ 2019-12-08 16:53 UTC (permalink / raw)
  To: help-guix

Hi Guix,

I'd like to create a local variation of the matcha-theme package with one 
of the colors changed to suit my taste. Rather than make the change in my 
clone of the git repository, which could then become outdated, I thought I 
would try to make the change programatically as part of the package 
definition. I decided to make my change in a snippet as part of the origin 
specification because that seemed to logically fit with what I was trying 
to do (build a package with modified source) and because matcha-theme uses 
the trivial build system, which I don't believe has the concept of phases, 
so it wasn't clear how I would add a phase to make my change during the 
build. I came up with the following package definition:

```
(package
   (inherit matcha-theme)
   (source (origin
             (inherit (package-source matcha-theme))
             (modules '((guix build utils)))
             (snippet
               '(begin
                  (substitute* (find-files "." "\\.css$")
                    (("abb9b6") "859900"))))))
   (synopsis "jackhill's version of the matcha-theme"))
```

Unfortunately, after building my modified source tarball correctly, the 
package build fails. I believe this is because matcha-theme's 
trivial-build-system recipe expects a source checkout and not a tarball, 
and doesn't have the logic to expand the tarball that, e.g., the 
gnu-build-system provides.

The build log contains the following:

```
@ build-started /gnu/store/rqx5yqh4ncj02rxzfwvp9jcqv9dk8l1g-matcha-theme-2019-11-02.drv - x86_64-linux /var/log/guix/drvs/rq//x5yqh4ncj02rxzfwvp9jcqv9dk8l1g-matcha-theme-2019-11-02.drv.bz2 28285
Backtrace:
            4 (primitive-load "/gnu/store/j01a49zzlrn7fyr2x7ibxyqsph5?")
In ice-9/eval.scm:
    191:35  3 (_ #f)
     619:8  2 (_ #(#(#(#(#(#<directory (guile-user) 7f?> ?) ?) ?) ?) ?))
In /gnu/store/ygivy1fvr7gbyva4z22b7vzzps1krbq5-module-import/guix/build/utils.scm:
    343:27  1 (_ "/gnu/store/ajbvkiw30mmfhj8mpjfyvnxpjl0ycj07-matcha?" ?)
In unknown file:
            0 (copy-file "/gnu/store/ajbvkiw30mmfhj8mpjfyvnxpjl0ycj0?" ?)

ERROR: In procedure copy-file:
In procedure copy-file: Is a directory
`/gnu/store/ajbvkiw30mmfhj8mpjfyvnxpjl0ycj07-matcha-theme-2019-11-02.tar.xz' -> `/tmp/guix-build-matcha-theme-2019-11-02.drv-0'
builder for `/gnu/store/rqx5yqh4ncj02rxzfwvp9jcqv9dk8l1g-matcha-theme-2019-11-02.drv' failed with exit code 1
@ build-failed /gnu/store/rqx5yqh4ncj02rxzfwvp9jcqv9dk8l1g-matcha-theme-2019-11-02.drv - 1 builder for `/gnu/store/rqx5yqh4ncj02rxzfwvp9jcqv9dk8l1g-matcha-theme-2019-11-02.drv' failed with exit code 1
```

For reference, matcha-theme's builder is:

```
(arguments
      '(#:modules ((guix build utils))
        #:builder
        (begin
          (use-modules (guix build utils))
          (let* ((out (assoc-ref %outputs "out"))
                 (source (assoc-ref %build-inputs "source"))
                 (bash (assoc-ref %build-inputs "bash"))
                 (coreutils (assoc-ref %build-inputs  "coreutils"))
                 (themesdir (string-append out "/share/themes")))
            (setenv "PATH"
                    (string-append coreutils "/bin:"
                                   (string-append bash "/bin:")))
            (copy-recursively source (getcwd))
            (patch-shebang "Install")
            (mkdir-p themesdir)
            (invoke "./Install" "-d" themesdir)
            #t))))
```

This leaves me with two questions:

How should I accomplish what I want to do (change one of the colors in 
matcha-theme for local use)?

If I am right about trivial-build-system (that it makes it more difficult 
to create modified packages compared to other build systems), should we 
try to avoid using it in gnu/packages to ensure people have the easiest 
time exercising their software freedom?

Best,
Jack

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Creating local variation of match-theme
  2019-12-08 16:53 Creating local variation of match-theme Jack Hill
@ 2019-12-18 22:01 ` Jack Hill
  2019-12-18 22:20   ` Marius Bakke
  0 siblings, 1 reply; 5+ messages in thread
From: Jack Hill @ 2019-12-18 22:01 UTC (permalink / raw)
  To: help-guix

Hi,

It's been a few days, so I was wondering if anyone had thoughts on the 
following:

Best,
Jack

On Sun, 8 Dec 2019, Jack Hill wrote:

> Hi Guix,
>
> I'd like to create a local variation of the matcha-theme package with one of 
> the colors changed to suit my taste. Rather than make the change in my clone 
> of the git repository, which could then become outdated, I thought I would 
> try to make the change programatically as part of the package definition. I 
> decided to make my change in a snippet as part of the origin specification 
> because that seemed to logically fit with what I was trying to do (build a 
> package with modified source) and because matcha-theme uses the trivial build 
> system, which I don't believe has the concept of phases, so it wasn't clear 
> how I would add a phase to make my change during the build. I came up with 
> the following package definition:
>
> ```
> (package
>  (inherit matcha-theme)
>  (source (origin
>            (inherit (package-source matcha-theme))
>            (modules '((guix build utils)))
>            (snippet
>              '(begin
>                 (substitute* (find-files "." "\\.css$")
>                   (("abb9b6") "859900"))))))
>  (synopsis "jackhill's version of the matcha-theme"))
> ```
>
> Unfortunately, after building my modified source tarball correctly, the 
> package build fails. I believe this is because matcha-theme's 
> trivial-build-system recipe expects a source checkout and not a tarball, and 
> doesn't have the logic to expand the tarball that, e.g., the gnu-build-system 
> provides.
>
> The build log contains the following:
>
> ```
> @ build-started 
> /gnu/store/rqx5yqh4ncj02rxzfwvp9jcqv9dk8l1g-matcha-theme-2019-11-02.drv - 
> x86_64-linux 
> /var/log/guix/drvs/rq//x5yqh4ncj02rxzfwvp9jcqv9dk8l1g-matcha-theme-2019-11-02.drv.bz2 
> 28285
> Backtrace:
>           4 (primitive-load "/gnu/store/j01a49zzlrn7fyr2x7ibxyqsph5?")
> In ice-9/eval.scm:
>   191:35  3 (_ #f)
>    619:8  2 (_ #(#(#(#(#(#<directory (guile-user) 7f?> ?) ?) ?) ?) ?))
> In 
> /gnu/store/ygivy1fvr7gbyva4z22b7vzzps1krbq5-module-import/guix/build/utils.scm:
>   343:27  1 (_ "/gnu/store/ajbvkiw30mmfhj8mpjfyvnxpjl0ycj07-matcha?" ?)
> In unknown file:
>           0 (copy-file "/gnu/store/ajbvkiw30mmfhj8mpjfyvnxpjl0ycj0?" ?)
>
> ERROR: In procedure copy-file:
> In procedure copy-file: Is a directory
> `/gnu/store/ajbvkiw30mmfhj8mpjfyvnxpjl0ycj07-matcha-theme-2019-11-02.tar.xz' 
> -> `/tmp/guix-build-matcha-theme-2019-11-02.drv-0'
> builder for 
> `/gnu/store/rqx5yqh4ncj02rxzfwvp9jcqv9dk8l1g-matcha-theme-2019-11-02.drv' 
> failed with exit code 1
> @ build-failed 
> /gnu/store/rqx5yqh4ncj02rxzfwvp9jcqv9dk8l1g-matcha-theme-2019-11-02.drv - 1 
> builder for 
> `/gnu/store/rqx5yqh4ncj02rxzfwvp9jcqv9dk8l1g-matcha-theme-2019-11-02.drv' 
> failed with exit code 1
> ```
>
> For reference, matcha-theme's builder is:
>
> ```
> (arguments
>     '(#:modules ((guix build utils))
>       #:builder
>       (begin
>         (use-modules (guix build utils))
>         (let* ((out (assoc-ref %outputs "out"))
>                (source (assoc-ref %build-inputs "source"))
>                (bash (assoc-ref %build-inputs "bash"))
>                (coreutils (assoc-ref %build-inputs  "coreutils"))
>                (themesdir (string-append out "/share/themes")))
>           (setenv "PATH"
>                   (string-append coreutils "/bin:"
>                                  (string-append bash "/bin:")))
>           (copy-recursively source (getcwd))
>           (patch-shebang "Install")
>           (mkdir-p themesdir)
>           (invoke "./Install" "-d" themesdir)
>           #t))))
> ```
>
> This leaves me with two questions:
>
> How should I accomplish what I want to do (change one of the colors in 
> matcha-theme for local use)?
>
> If I am right about trivial-build-system (that it makes it more difficult to 
> create modified packages compared to other build systems), should we try to 
> avoid using it in gnu/packages to ensure people have the easiest time 
> exercising their software freedom?
>
> Best,
> Jack
>
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Creating local variation of match-theme
  2019-12-18 22:01 ` Jack Hill
@ 2019-12-18 22:20   ` Marius Bakke
  2019-12-19  2:17     ` Jack Hill
  0 siblings, 1 reply; 5+ messages in thread
From: Marius Bakke @ 2019-12-18 22:20 UTC (permalink / raw)
  To: Jack Hill, help-guix

[-- Attachment #1: Type: text/plain, Size: 543 bytes --]

Jack Hill <jackhill@jackhill.us> writes:

> Hi,
>
> It's been a few days, so I was wondering if anyone had thoughts on the 
> following:

It's not pretty, but you could create a package that takes "match-theme"
as an input and makes the necessary adjustments.

See the 'mariadb/fixed-install-db' variant added in
9077cf68ec57c0303ef7746e203c3fe5ed041add for an example.

Another "cleaner" approach could be to use 'computed-file' to create a
patched source tarball, and pass that as the source in your local
variant.

Marius

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Creating local variation of match-theme
  2019-12-18 22:20   ` Marius Bakke
@ 2019-12-19  2:17     ` Jack Hill
  2019-12-26 17:11       ` Marius Bakke
  0 siblings, 1 reply; 5+ messages in thread
From: Jack Hill @ 2019-12-19  2:17 UTC (permalink / raw)
  To: Marius Bakke; +Cc: help-guix

Thanks Marius!

On Wed, 18 Dec 2019, Marius Bakke wrote:

> It's not pretty, but you could create a package that takes "match-theme"
> as an input and makes the necessary adjustments.
>
> See the 'mariadb/fixed-install-db' variant added in
> 9077cf68ec57c0303ef7746e203c3fe5ed041add for an example.

I tried this approach first, and find the results acceptable for this 
purpose. This technique seems most applicable when what needs to modified 
is a text file. I ended up with this package definition:

```
(package
      (inherit matcha-theme)
      (native-inputs '())
      (inputs `(("matcha-theme" ,matcha-theme)))
      (outputs '("out"))
      (build-system trivial-build-system)
      (arguments
       `(#:modules ((guix build utils))
 	#:builder
 	(begin
 	  (use-modules ((guix build utils)))
 	  (let ((upstream-theme (assoc-ref %build-inputs "matcha-theme"))
 		(out (assoc-ref %outputs "out")))
 	    (copy-recursively upstream-theme out)
 	    (substitute* (find-files out "\\.css$")
 	      (("abb9b6") "859900"))))))
      (synopsis "jackhill's version of the matcha-theme"))
```
> Another "cleaner" approach could be to use 'computed-file' to create a
> patched source tarball, and pass that as the source in your local
> variant.

I have not yet tried this. I should because, as you point out, this is 
"cleaner", and would work in situations where what needs to be modified in 
compiled into an opaque object in the output.

However, without trying this, I don't see how it would work better than 
using a snippet in the origin definition. Or perhaps you meant to created 
the patched source tarball from the output of the upstream matcha-theme 
package?

Either way, I think I'm still left with the question of how can we make 
modifying packages easier without the need to resort to kludges.

Best,
Jack

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Creating local variation of match-theme
  2019-12-19  2:17     ` Jack Hill
@ 2019-12-26 17:11       ` Marius Bakke
  0 siblings, 0 replies; 5+ messages in thread
From: Marius Bakke @ 2019-12-26 17:11 UTC (permalink / raw)
  To: Jack Hill; +Cc: help-guix

[-- Attachment #1: Type: text/plain, Size: 2365 bytes --]

Jack Hill <jackhill@jackhill.us> writes:

> Thanks Marius!
>
> On Wed, 18 Dec 2019, Marius Bakke wrote:
>
>> It's not pretty, but you could create a package that takes "match-theme"
>> as an input and makes the necessary adjustments.
>>
>> See the 'mariadb/fixed-install-db' variant added in
>> 9077cf68ec57c0303ef7746e203c3fe5ed041add for an example.
>
> I tried this approach first, and find the results acceptable for this 
> purpose. This technique seems most applicable when what needs to modified 
> is a text file. I ended up with this package definition:
>
> ```
> (package
>       (inherit matcha-theme)
>       (native-inputs '())
>       (inputs `(("matcha-theme" ,matcha-theme)))
>       (outputs '("out"))
>       (build-system trivial-build-system)
>       (arguments
>        `(#:modules ((guix build utils))
>  	#:builder
>  	(begin
>  	  (use-modules ((guix build utils)))
>  	  (let ((upstream-theme (assoc-ref %build-inputs "matcha-theme"))
>  		(out (assoc-ref %outputs "out")))
>  	    (copy-recursively upstream-theme out)
>  	    (substitute* (find-files out "\\.css$")
>  	      (("abb9b6") "859900"))))))
>       (synopsis "jackhill's version of the matcha-theme"))
> ```
>> Another "cleaner" approach could be to use 'computed-file' to create a
>> patched source tarball, and pass that as the source in your local
>> variant.
>
> I have not yet tried this. I should because, as you point out, this is 
> "cleaner", and would work in situations where what needs to be modified in 
> compiled into an opaque object in the output.
>
> However, without trying this, I don't see how it would work better than 
> using a snippet in the origin definition. Or perhaps you meant to created 
> the patched source tarball from the output of the upstream matcha-theme 
> package?
>
> Either way, I think I'm still left with the question of how can we make 
> modifying packages easier without the need to resort to kludges.

'substitute-keyword-arguments' and 'snippets' do make it pretty easy,
but as you found it does not work with 'trivial-build-system'.

Perhaps we should just discourage the latter entirely: "matcha-theme"
can easily be rewritten to use 'gnu-build-system' instead by deleting or
overriding the unnecessary phases.

Feel free to submit a patch that does just that!  :-)

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-12-26 17:11 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-08 16:53 Creating local variation of match-theme Jack Hill
2019-12-18 22:01 ` Jack Hill
2019-12-18 22:20   ` Marius Bakke
2019-12-19  2:17     ` Jack Hill
2019-12-26 17:11       ` Marius Bakke

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).