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