refresh: Gracefully handle failure to download a tarball.
[jackhill/guix/guix.git] / TODO
CommitLineData
6b8875c8
LC
1-*- mode: org; coding: utf-8; -*-
2
c0b3c89f 3Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
6b8875c8
LC
4
5 Copying and distribution of this file, with or without modification,
6 are permitted in any medium without royalty provided the copyright
7 notice and this notice are preserved.
8
9* integrate needed Nix code
10
a9128eac
LC
11** Remove dependency on OpenSSL
12
13The ‘openssl’ command-line tool is used in libstore to sign store paths
14to be exported, and to check such signatures. The signing keys are
15usually in /etc/nix/signing-key.{pub,sec}. They are a PKCS#8-encoded
16X.509 SubjectPublicKeyInfo. These can be decoded with the [[http://lists.gnu.org/archive/html/help-gnutls/2012-12/msg00012.html][C API of
17GnuTLS]], but not yet with its Guile bindings. There’s also
18‘gnutls_privkey_sign_data’ to sign, and related functions.
19
c0b3c89f 20
9297c90b
LC
21** Add `guix publish' to publish the store using Guile's web server
22
23Generate narinfos and nars on the fly, upon HTTP GET requests.
24Ideally, extend .nix-cache-info to include the server's public key, and also
25reply to requests for .narinfo.sig.
26Optionally, use Guile-Avahi to publish the service.
c0b3c89f 27
c7e4a72a
LC
28** MAYBE Add a substituter that uses the GNUnet DHT
29
30Would be neat if binaries could be pushed to and pulled from the GNUnet
31DHT. Guix users would sign their binaries, and define which binaries
32they trust.
33
c0b3c89f
LC
34** Add a remote build hook
35
36Like scripts/build-remote.pl in Nix.
37
6b8875c8
LC
38* infrastructure
39
40** have a Hydra instance build Guix packages
41
42[[http://nixos.org/hydra/][Hydra]] is a continuous integration tool based on Nix. It now has
43[[https://github.com/NixOS/hydra/commit/f27ae1d5663680400cb99cfb898970f34d8d21be][Guile/Guix support]], which allows “build recipes” written in Guile using
44Guix to be used directly on Hydra.
45
46For a start, we may use the instance at hydra.nixos.org, generously
47provided by TU Delft. However, in the future, we may want to setup our
48own instance at gnu.org.
49
c7e4a72a
LC
50* user interface
51** Add a package.el (Emacs) back-end
52
53Unfortunately package.el is monolithic, so most likely we’d have to
54write a new one based on it, as opposed to actually using it.
55
6b8875c8
LC
56* extend <origin>
57** add OpenPGP signatures:
58
59 (origin
60 (method http-fetch)
61 (uri "http://.../foo.tgz")
62 (signature-uri (string-append uri ".sig"))
63 (signer-openpgp-fingerprint "..."))
64
65** allow <origin> to be a derivation/package or a file
66
67* extend <package>
68
69** add support for ‘search-paths’
70
71This should be passed to the build system, to extend package-specific
72search path environment variables–like ‘GUILE_LOAD_PATH’, ‘PERL5LIB’,
73etc.
74
75** add a ‘user-environment-hook’
76
77This should specify builder code to be run when building a user
78environment with ‘guix-package’. For instance, Texinfo’s hook would
79create a new ‘dir’.
80
3036a01f
LC
81** add ‘patches’ there
82
83** extend ‘propagated-build-inputs’ with support for multiple outputs
84
85#+BEGIN_SRC scheme
86 (outputs '("out" "include"))
87 (propagated-build-inputs
88 `(((("i1" ,p1 "o1")
89 ("i2" ,p2))
90 => "include")
91 ("i3" ,p3)))
92#+END_SRC
93
29767aae
LC
94* synchronize package descriptions with the [[http://directory.fsf.org][FSD]] and/or the Womb
95
96Meta-data for GNU packages, including descriptions and synopses, can be
97dumped from the FSD:
98http://directory.fsf.org/wiki?title=GNU/Export&action=purge .
99We could periodically synchronize with that.
100
101The [[./guix/gnu-maintenance.scm][Womb]] also contains synopses for all the GNU packages.
102
6b8875c8
LC
103* support cross-compilation
104
105Implement ‘package-cross-derivation’, and add the corresponding code in
106‘gnu-build-system’. Then, actually bootstrap a cross-compilation
107environment–e.g., a cross-GNU environment.
108
c7e4a72a
LC
109* add a guildhall build system
110
111The Guildhall is Guile’s packaging system. It should be easy to add a
112‘guildhall-build-system’ that does the right thing based on guildhall
113recipes.
114
6b8875c8
LC
115* gnu-build-system: produce a ‘debug’ derivation
116
117Set a .gnu_debuglink in the main derivations to point to the sibling
118file name (only the basename, to not retain a dependency on the ‘debug’
119derivation.)
120
121For /nix/store/xyz-foobar/bin/foo, we should have
122/nix/store/abc-foobar-debug/lib/nix/store/xyz-foobar/bin/foo.debug (info
123"(gdb) Separate Debug Files").
124
125Users should have a default GDB setting with ~/.guix-profile/lib/debug
126as their ‘debug-file-directory’.
127
128* build-expression->derivation: define `%system' in the builder
129
130Would allow build expressions to have system-dependent code, like
131`glibc-dynamic-linker'.
132
133* add ‘allowed-references’ in <package>
134
135[[file:~/src/nix/src/libstore/build.cc::if%20(drv.env.find("allowedReferences")%20!%3D%20drv.env.end())%20{][See how Nix implements that internally]].
136
6b8875c8
LC
137* union
138
139Support sophisticated collision handling when building a union: check
140whether the colliding files are identical, honor per-package priorities,
141etc.
142
d8f257f9 143* guix package
6b8875c8 144
6b8875c8 145** add ‘--list-generations’, and ‘--delete-generations’
6b8875c8
LC
146
147* guix build utils
6b8875c8 148** Add equivalent to Nixpkgs's ‘wrapProgram’
29767aae
LC
149** MAYBE Change ‘ld-wrapper’ to add RPATH for libs passed by file name
150
151** MAYBE Add equivalent to chrpath, possibly using [[https://gitorious.org/guile-dlhacks/guile-dlhacks/][guile-dlhacks]]
6b8875c8 152
29767aae 153** MAYBE Add a hash-rewriting thing for deep dependency replacement without rebuild
c7e4a72a
LC
154
155See [[https://github.com/NixOS/nixpkgs/commit/d1662d715514e6ef9d3dc29f132f1b3d8e608a18][Shea Levy's `replace-dependency' in Nixpkgs]].
156
6b8875c8 157* distro
6b8875c8
LC
158** port to new GNU/Linux platforms, notably ‘mipsel64-linux’
159** port to GNU/Hurd, aka. ‘i686-gnu’
160
161Problems include that current glibc releases do not build on GNU/Hurd.
162In addition, there haven’t been stable releases of GNU Mach, MiG, and
163Hurd, which would be a pre-condition.
164
165** make a bootable GNU/Linux-Libre distro, with OS configuration EDSL
166
167Similar in spirit to /etc/nixos/configuration.nix.