home: Add package profile home type. * home/profile.scm: New file. * doc/profile.md: New file. * doc/README.md: Add it. Signed-off-by: Julien Lepiller <julien@lepiller.eu>
doc/README.md
71 | 71 | ||
72 | 72 | * [Provenance](doc/provenance.md) | |
73 | 73 | ||
74 | + | ### Package management | |
75 | + | ||
76 | + | * [Guix profiles](doc/profile.md) | |
77 | + | ||
74 | 78 | ### Common Issues | |
75 | 79 | ||
76 | 80 | #### No Sound on the System |
doc/profile.md unknown status 1
1 | + | Profile | |
2 | + | ====== | |
3 | + | ||
4 | + | This allows users and home-types to install guix packages into guix | |
5 | + | package profiles in your immutable home directory. | |
6 | + | ||
7 | + | Main Configuration | |
8 | + | ------------------ | |
9 | + | ||
10 | + | Profile are configured by using the `package-profile-home-type` service type. | |
11 | + | ||
12 | + | **Scheme Variable**: package-profile-home-type | |
13 | + | ||
14 | + | The type of service that generates a guix package profile. Its value | |
15 | + | is a list of guix packages. | |
16 | + | ||
17 | + | **Scheme Procedure**: (source-profile [profile-path]) | |
18 | + | ||
19 | + | Returns a string that can be added to either `.bash_profile` or | |
20 | + | `.zprofile` that sources guix profile _profile-path_, making the | |
21 | + | contained packages available to the shell. Defaults to sourcing the | |
22 | + | guix profile in `$HOME/.home-profile`. | |
23 | + | ||
24 | + | ||
25 | + | Example Configuration | |
26 | + | --------------------- | |
27 | + | ||
28 | + | ```scheme | |
29 | + | (use-modules (gnu packages emacs)) | |
30 | + | ||
31 | + | (user-home | |
32 | + | package-profile-home-type | |
33 | + | (list emacs)) | |
34 | + | ``` |
home/profile.scm unknown status 1
1 | + | ;;; Guix Home Manager. | |
2 | + | ;;; | |
3 | + | ;;; Copyright ?? 2020 Jelle Licht <jlicht@fsfe.org> | |
4 | + | ;;; | |
5 | + | ;;; This program is free software: you can redistribute it and/or modify | |
6 | + | ;;; it under the terms of the GNU General Public License as published by | |
7 | + | ;;; the Free Software Foundation, either version 3 of the License, or | |
8 | + | ;;; (at your option) any later version. | |
9 | + | ;;; | |
10 | + | ;;; This program is distributed in the hope that it will be useful, | |
11 | + | ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | + | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | + | ;;; GNU General Public License for more details. | |
14 | + | ;;; | |
15 | + | ;;; You should have received a copy of the GNU General Public License | |
16 | + | ;;; along with this program. If not, see <http://www.gnu.org/licenses/>. | |
17 | + | ||
18 | + | (define-module (home profile) | |
19 | + | #:use-module (guix profiles) | |
20 | + | #:use-module (guix gexp) | |
21 | + | #:use-module (srfi srfi-1) | |
22 | + | #:use-module (ice-9 match) | |
23 | + | #:use-module (home) | |
24 | + | #:export (package-profile-home-type | |
25 | + | source-profile)) | |
26 | + | ||
27 | + | (define (packages->profile-entry packages) | |
28 | + | "Return an entry for the profile containing PACKAGES." | |
29 | + | `((".home-profile" ,(profile | |
30 | + | (content (packages->manifest | |
31 | + | (delete-duplicates packages eq?))))))) | |
32 | + | ||
33 | + | (define* (source-profile #:optional (profile-path ".home-profile")) | |
34 | + | "Returns a string that can be added to either `.bash_profile` or | |
35 | + | `.zprofile` that sources guix profile PROFILE-PATH, making the | |
36 | + | contained packages available to the shell. Defaults to sourcing the | |
37 | + | guix profile in \"$HOME/.home-profile\"." | |
38 | + | (apply format #f "if [ -f ~s/etc/profile ]; then | |
39 | + | GUIX_PROFILE=~s ; . ~s/etc/profile | |
40 | + | export MANPATH=~s/share/man:$MANPATH | |
41 | + | export INFOPATH=~s/share/info:$INFOPATH | |
42 | + | export XDG_DATA_DIRS=~s/share:$XDG_DATA_DIRS | |
43 | + | export XDG_CONFIG_DIRS=~s/etc/xdg:$XDG_CONFIG_DIRS | |
44 | + | fi\n" | |
45 | + | (make-list 7 profile-path))) | |
46 | + | ||
47 | + | (define package-profile-home-type | |
48 | + | (home-type | |
49 | + | (name 'profile) | |
50 | + | (extension-points | |
51 | + | (list (home-extension-point | |
52 | + | (compose concatenate) | |
53 | + | (extend (lambda (v l) | |
54 | + | (apply append v l)))))) | |
55 | + | (extensions | |
56 | + | (list | |
57 | + | (home-extension | |
58 | + | (target root-home-type) | |
59 | + | (compute packages->profile-entry)))) | |
60 | + | (default-value '()) | |
61 | + | (description "The package-profile home type"))) |