summaryrefslogtreecommitdiff
path: root/README.rst
blob: d5d69151e29579fd5b03a990481c91d00210143f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
Guix science packages
=====================

.. image:: https://guix.bordeaux.inria.fr/jobset/guix-science/badge.svg?type=0
   :target: https://guix.bordeaux.inria.fr/jobset/guix-science

This GNU Guix_ channel provides recent versions of scientific software, which
cannot be included upstream.

See `Specifying Additional Channels`_ in the Guix manual for instructions how
to add it to your installation or simply add the following snippet to your
``channels.scm``:

.. code:: scheme

	(channel
	  (name 'guix-science)
	  (url "https://codeberg.org/guix-science/guix-science.git")
	  (introduction
	   (make-channel-introduction
		"b1fe5aaff3ab48e798a4cce02f0212bc91f423dc"
		(openpgp-fingerprint
		 "CA4F 8CF4 37D7 478F DA05  5FD4 4213 7701 1A37 8446"))))

.. _Guix: https://guix.gnu.org/
.. _Specifying Additional Channels: https://guix.gnu.org/manual/en/guix.html#Specifying-Additional-Channels

Binary substitutes for ``x86_64-linux`` are available from
https://guix.bordeaux.inria.fr, see `Getting Substitutes from Other
Servers`_ in the official manual. The signing key can be imported
using:

.. code:: console

	$ guix archive --authorize <<EOF
    (public-key
     (ecc
      (curve Ed25519)
      (q #89FBA276A976A8DE2A69774771A92C8C879E0F24614AAAAE23119608707B3F06#)))
	EOF

.. _Getting Substitutes from Other Servers: https://guix.gnu.org/manual/en/guix.html#Getting-Substitutes-from-Other-Servers

Contributing
------------

We accept software fulfilling the following criteria:

- `Free and open source`_. Use guix-science-nonfree_ otherwise.
- Related to scientific research or teaching.
- Not upstreamable to Guix proper per their rules—e.g., due to excessive
  vendoring.
- Built entirely from source, with the following exceptions:
   1. JavaScript code is allowed to be taken as-is, including
      pre-built/minified JavaScript, as a pragmatic way out of the
      `JavaScript dystopia`;
   2. Packages such as build systems and compilers that have no known
      `bootstrap path` may be built starting from a *binary seed* (a
      pre-built binary of said compiler or build system).

.. _Free and open source: https://opensource.org/osd
.. _guix-science-nonfree: https://codeberg.org/guix-science/guix-science-nonfree
.. _JavaScript dystopia: https://dustycloud.org/blog/javascript-packaging-dystopia/
.. _bootstrap path: https://bootstrappable.org

Submissions of unfinished packaging attempts are welcome as well, as there is
a good chance that others can help finish the work. Please prefix pull requests
for unfinished contributions with WIP.

When submitting a new package or a modification to a package, make sure to run:

.. code:: console

          guix lint -L /path/to/your/guix/science/checkout <package-name>

This repository follows Guix's `Packaging Guidelines`_, refer to them
when contributing.

.. _Packaging Guidelines:
https://guix.gnu.org/manual/devel/en/html_node/Packaging-Guidelines.html

When obtaining a fresh checkout of this repository, run the following
command:

.. code:: console

          guix git authenticate b1fe5aaff3ab48e798a4cce02f0212bc91f423dc "CA4F 8CF4 37D7 478F DA05  5FD4 4213 7701 1A37 8446"

The command authenticates your checkout and installs Git hooks such that
``git pull`` and ``git push`` automatically authenticate it from there
on.

Hacking this repository
---------------------------------------

Package definitions are stored in ``guix-science/packages/*.scm``,
each ``.scm`` file being a `Guile module`_ containing several package
definitions.

.. _Guile module: https://guix.gnu.org/manual/devel/en/html_node/Package-Modules.html

A new package definition can be added in the relevant module.

For example, after adding a package definition such as:

.. code:: scheme

          (define-public my-package-variable
            (package
              (name "my-package-name")
              ... ))

can be built using the following command:

.. code:: console

          guix build -L /path/to/guix/science/checkout my-package-name

Note that generally the same string is used for the package name and
the Guile variable that points to the package object.

You can learn more about working with a channel in the `Guix manual`_.

.. _Guix manual: https://guix.gnu.org/manual/devel/en/html_node/Creating-a-Channel.html