Discussion:
Packaging LyX
Add Reply
Gammel Holte
2017-12-22 15:44:47 UTC
Reply
Permalink
Raw Message
Hi all,

I'm planning to switch a dozen or so machines to GuixSD.

The only major package my users are missing is LyX (a LaTeX editor, see
https://www.lyx.org/) so I packaged it, and it works fine. See code below.

I would appreciate some help wrapping python. I'm familiar how to do this
in Nix, but not in Guix. Despite requiring a python interpreter for during
build, LyX dynamically looks for a python interpreter at runtime.
Obviously, it'd be desirable to link LyX to the python instance used as
input. For the record this is the LyX package in Nixpkgs:

https://github.com/NixOS/nixpkgs/blob/86da6d441f7a248b02d545ac1b2c90ef27f42d0b/pkgs/applications/misc/lyx/default.nix

I also had some doubts when packaging:

- Is a xz source preferred to a gz one?
- Nix uses qtcore and qtsvg as inputs, but if I use these in Guix (in place
of the whole qt) then LyX can't render its icons (svgz)

There are another minor TODOs:

- Transition to proper package and define-public syntax, as I was
installing with guix package -f
- Decide whether the package should live in tex.scm or elsewhere

Once this is done, I'm happy to submit a proper patch.

Thanks.

(use-modules
(guix packages)
(guix download)
(guix build-system gnu)
(guix licenses)
(gnu packages algebra)
(gnu packages compression)
(gnu packages pkg-config)
(gnu packages python)
(gnu packages qt))

(package
(name "lyx")
(version "2.2.3")
(source (origin
(method url-fetch)
(uri (string-append "ftp://ftp.lyx.org/pub/lyx/stable/2.2.x/lyx-"
version ".tar.gz"))
(sha256
(base32 "0xvaz0i371nn2ndinc0d3ywj76ivb62649a4sdgwbivisiahd2fj"))))
(build-system gnu-build-system)
(inputs `(("pkg-config" ,pkg-config)
("python" ,python-2)
("qt" ,qt)
("bc" ,bc)
("zlib" ,zlib)))
(arguments `(#:configure-flags (list "--enable-qt5")))
(home-page "http://www.lyx.org")
(synopsis "An advanced WYSIWYM document processor and LaTeX front-end")
(description "LyX is a document processor that encourages an approach
to writing based on the structure of your documents (WYSIWYM) and not
simply their appearance (WYSIWYG). LyX combines the power and
flexibility of TeX/LaTeX with the ease of use of a graphical
interface.")
(license gpl2+))
ng0
2017-12-22 18:42:31 UTC
Reply
Permalink
Raw Message
Hi,
Post by Gammel Holte
Hi all,
I'm planning to switch a dozen or so machines to GuixSD.
The only major package my users are missing is LyX (a LaTeX editor, see
https://www.lyx.org/) so I packaged it, and it works fine. See code below.
I would appreciate some help wrapping python. I'm familiar how to do this
in Nix, but not in Guix. Despite requiring a python interpreter for during
build, LyX dynamically looks for a python interpreter at runtime.
Obviously, it'd be desirable to link LyX to the python instance used as
https://github.com/NixOS/nixpkgs/blob/86da6d441f7a248b02d545ac1b2c90ef27f42d0b/pkgs/applications/misc/lyx/default.nix
- Is a xz source preferred to a gz one?
I would say it doesn't matter. For the files produced,
xz is smaller in most cases. Pick what you see fit.
Post by Gammel Holte
- Nix uses qtcore and qtsvg as inputs, but if I use these in Guix (in place
of the whole qt) then LyX can't render its icons (svgz)
This shouldn't be a blocker. If it works with qt, that's okay. We
can strip it down to individual Qt modules later on.
Nix can be used as an inspiration but they do some things differently.
Post by Gammel Holte
- Transition to proper package and define-public syntax, as I was
installing with guix package -f
- Decide whether the package should live in tex.scm or elsewhere
I think (gnu packages editors) or what the editor module is called again
would be better.
Post by Gammel Holte
Once this is done, I'm happy to submit a proper patch.
Thanks.
(use-modules
(guix packages)
(guix download)
(guix build-system gnu)
(guix licenses)
(gnu packages algebra)
(gnu packages compression)
(gnu packages pkg-config)
(gnu packages python)
(gnu packages qt))
(package
(name "lyx")
(version "2.2.3")
(source (origin
(method url-fetch)
(uri (string-append "ftp://ftp.lyx.org/pub/lyx/stable/2.2.x/lyx-"
version ".tar.gz"))
(sha256
(base32 "0xvaz0i371nn2ndinc0d3ywj76ivb62649a4sdgwbivisiahd2fj"))))
(build-system gnu-build-system)
(inputs `(("pkg-config" ,pkg-config)
("python" ,python-2)
Is this python-2 only? If not, could you explain why you picked 2 and not 3
(2 is on its way out in 20 months).
Post by Gammel Holte
("qt" ,qt)
("bc" ,bc)
("zlib" ,zlib)))
(arguments `(#:configure-flags (list "--enable-qt5")))
(home-page "http://www.lyx.org")
(synopsis "An advanced WYSIWYM document processor and LaTeX front-end")
I'd drop the "An" and simply write

(synopsis "Advanced WYSIWYM document processor and LaTeX front-end")
Post by Gammel Holte
(description "LyX is a document processor that encourages an approach
to writing based on the structure of your documents (WYSIWYM) and not
simply their appearance (WYSIWYG). LyX combines the power and
flexibility of TeX/LaTeX with the ease of use of a graphical
interface.")
You need to use two spaces between sentences here.
Post by Gammel Holte
(license gpl2+))
Otherwise looks good to me with some indendation adjustments.
If you send a patch for master to a new bug ticket I can test it
and give additional feedback.

Thanks
--
GnuPG: A88C8ADD129828D7EAC02E52E22F9BBFEE348588
GnuPG: https://c.n0.is/ng0_pubkeys/tree/keys
WWW: https://n0.is
Gammel Holte
2017-12-22 22:49:08 UTC
Reply
Permalink
Raw Message
On Fri, Dec 22, 2017 at 7:42 PM, ng0 <***@n0.is> wrote:

Thanks for your comments. I will address those before I circulate a patch.
Post by ng0
Is this python-2 only? If not, could you explain why you picked 2 and not 3
(2 is on its way out in 20 months).
LyX is sadly not ready for Python 3 yet. It will be soon, but there are
still
tickets open to support it: https://www.lyx.org/trac/ticket/9006

Furthermore, I've tested LyX with Python 3 and it breaks.

Any hints on how to wrap the LyX package output so that it binds to the
Python input, instead of looking for it at runtime, like the Nix package
does?

https://github.com/NixOS/nixpkgs/blob/86da6d441f7a248b02d545ac1b2c90ef27f42d0b/pkgs/applications/misc/lyx/default.nix
ng0
2017-12-25 13:41:37 UTC
Reply
Permalink
Raw Message
Post by Gammel Holte
Thanks for your comments. I will address those before I circulate a patch.
Post by ng0
Is this python-2 only? If not, could you explain why you picked 2 and not
3
Post by ng0
(2 is on its way out in 20 months).
LyX is sadly not ready for Python 3 yet. It will be soon, but there are
still
tickets open to support it: https://www.lyx.org/trac/ticket/9006
Furthermore, I've tested LyX with Python 3 and it breaks.
Okay, no problem.
Post by Gammel Holte
Any hints on how to wrap the LyX package output so that it binds to the
Python input, instead of looking for it at runtime, like the Nix package
does?
https://github.com/NixOS/nixpkgs/blob/86da6d441f7a248b02d545ac1b2c90ef27f42d0b/pkgs/applications/misc/lyx/default.nix
It depends. I have no time to look at the code (to see where python
is required, how much of it (modules etc)), but we have multiple
options, including:

1. Wrap the program. One of many examples:
https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/gnuzilla.scm#n759
2. patch calls of 'python' to the gnu-store python executable. I can see this
failing if python modules are required to be present and not just python.
3. Search for 'wrap' in the source checkout of Guix. You will find commits like
0498d24866c4955faee95a4fc19ff6817e5483d2
(https://git.savannah.gnu.org/cgit/guix.git/commit/gnu/packages?id=0498d24866c4955faee95a4fc19ff6817e5483d2)
--
GnuPG: A88C8ADD129828D7EAC02E52E22F9BBFEE348588
GnuPG: https://c.n0.is/ng0_pubkeys/tree/keys
WWW: https://n0.is
Danny Milosavljevic
2017-12-22 19:48:42 UTC
Reply
Permalink
Raw Message
Hmm, do the tests work for you? Back when I tried this was the blocker for me...
Gammel Holte
2017-12-22 22:20:14 UTC
Reply
Permalink
Raw Message
Post by Danny Milosavljevic
Hmm, do the tests work for you? Back when I tried this was the blocker for me...
Yes, they work fine. Aside, I've tested LyX for a few days and everything
has worked as expected so far.

After looking into all documentation, packages from other distros, and
testing different things I'm pretty sure the minimal set of dependencies is
what I listed in my previous email.

Give the script attached a try if you want (still not a proper package, so
you need to do guix package -f lyx.scm). It also needs ***@2.7 in the
environment as LyX doesn't bind to python properly, but rather tries to
find it dynamically during runtime. I need to fix that.
Loading...