Skip to content

Commit

Permalink
sys-apps/guix: new package, the GNU Purely Functional Package Manager
Browse files Browse the repository at this point in the history
Internal data model and command UI is a lot like
one of sys-apps/nix.

Package description mechanism is a bit different
in both surface syntax (guile vs nix expression language)
and evaluation method (compiled versus lazy loaded configs)

guix (as well as nix) is a source-based package manager with
strong support for binary packages. It uses multiple tricks
to make package source dependencies robust:

- guix installs every package into it's own --prefix=.
  Example: /gnu/store/6np03bm99hg7gprcwmzpbpaj00cka8p8-icecat-45.5.1-gnu1
- guix builds packages with PATH (and similar) only including explicitly
  listed depends. This eliminates automagic dependency.
- guix tracks full environment where package was built.
  Once environment changes new package needs to be built.

That's how you install firef^Wicecat just for your current user:

    $ guix package --install icecat

Package-Manager: Portage-2.3.3, Repoman-2.3.1
  • Loading branch information
Sergei Trofimovich committed Feb 1, 2017
1 parent 5050deb commit f7663b9
Show file tree
Hide file tree
Showing 6 changed files with 163 additions and 0 deletions.
1 change: 1 addition & 0 deletions sys-apps/guix/Manifest
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DIST guix-0.12.0.tar.gz 15823786 SHA256 6201e21186a7098af256d97562662d95353b1047799b9b216e1dd6e7692dfec9 SHA512 d61cb289d3773977400fa3c49869f30a3feb5e0364368017b9b8eaadee814c5c31897be398d6ff142349337334eb51cb6d0354bee27c0365de69ce1a09e858d3 WHIRLPOOL 9515967a05a449f24da49e95340a60fb91cc471fcc532ce6cfaaea82c9161e3a65a1adc4d95e9997f019565243ca385845edc484981adfc5956112092687a0ec
8 changes: 8 additions & 0 deletions sys-apps/guix/files/guix-0.12.0-AR.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
diff --git a/config-daemon.ac b/config-daemon.ac
index 056c939..b04deed 100644
--- a/config-daemon.ac
+++ b/config-daemon.ac
@@ -7,2 +7,3 @@ dnl C++ environment. This macro must be used unconditionnaly.
AC_PROG_CXX
+AM_PROG_AR
AC_LANG([C++])
38 changes: 38 additions & 0 deletions sys-apps/guix/files/guix-0.12.0-no-json-crate.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
commit 6023041346c79f7ac4105bba2552a82019fae840
Author: David Thompson <[email protected]>
Date: Fri Dec 30 14:15:35 2016 -0500

import: crate: Do not build when guile-json is not available.

* Makefile.am (MODULES): Add 'guix/import/crate.scm' and
'guix/scripts/import/crate.scm' only when HAVE_GUILE_JSON.

diff --git a/Makefile.am b/Makefile.am
index 15939af12..97629f26e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -122,7 +122,6 @@ MODULES = \
guix/import/snix.scm \
guix/import/cabal.scm \
guix/import/cran.scm \
- guix/import/crate.scm \
guix/import/hackage.scm \
guix/import/elpa.scm \
guix/scripts.scm \
@@ -142,7 +141,6 @@ MODULES = \
guix/scripts/lint.scm \
guix/scripts/challenge.scm \
guix/scripts/import/cran.scm \
- guix/scripts/import/crate.scm \
guix/scripts/import/gnu.scm \
guix/scripts/import/nix.scm \
guix/scripts/import/hackage.scm \
@@ -162,6 +160,8 @@ if HAVE_GUILE_JSON
MODULES += \
guix/import/github.scm \
guix/import/json.scm \
+ guix/import/crate.scm \
+ guix/scripts/import/crate.scm \
guix/import/pypi.scm \
guix/scripts/import/pypi.scm \
guix/import/cpan.scm \
16 changes: 16 additions & 0 deletions sys-apps/guix/files/guix-daemon.initd
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/sbin/openrc-run
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

start() {
ebegin "Starting ${SVCNAME}"
start-stop-daemon --start --quiet --background --exec /usr/bin/guix-daemon -- --build-users-group=guixbuild
eend ${?}
}

stop() {
ebegin "Stopping ${SVCNAME}"
start-stop-daemon --stop --quiet --exec /usr/bin/guix-daemon
eend ${?}
}
92 changes: 92 additions & 0 deletions sys-apps/guix/guix-0.12.0-r1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=6

inherit autotools readme.gentoo-r1 user

DESCRIPTION="GNU package manager (nix sibling)"
HOMEPAGE="https://www.gnu.org/software/guix/"

SRC_URI="mirror://gnu-alpha/${PN}/${P}.tar.gz"
LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE=""

RESTRICT=test # complains about size of config.log and refuses to start tests

RDEPEND="
dev-libs/libgcrypt:0=
>=dev-scheme/guile-2
sys-libs/zlib
app-arch/bzip2
dev-db/sqlite
"

DEPEND="${RDEPEND}
"

QA_PREBUILT="usr/share/guile/site/2.0/gnu/packages/bootstrap/*"

PATCHES=(
"${FILESDIR}"/${P}-no-json-crate.patch
"${FILESDIR}"/${P}-AR.patch
)

DISABLE_AUTOFORMATTING=yes
DOC_CONTENTS="Quick start user guide on Gentoo:
[as root] allow binary substitution to be downloaded (optional)
# guix archive --authorize < /usr/share/guix/hydra.gnu.org.pub
[as root] enable guix-daemon service:
[systemd] # systemctl enable guix-daemon
[openrc] # rc-update add guix-daemon
[as an user] ln -sf /var/guix/profiles/per-user/\$USER/guix-profile \$HOME/.guix-profile
[as an user] install guix packages:
\$ guix package -i hello
[as an user] configure environment:
Somewhere in .bash_profile you might want to set
export GUIX_LOCPATH=\$HOME/.guix-profile/lib/locale
Next steps:
guix package manager user manual: https://www.gnu.org/software/guix/manual/guix.html
"

pkg_setup() {
enewgroup guixbuild
for i in {1..10}; do
# we list 'guixbuild' twice to
# both assign a primary group for user
# and add an user to /etc/group
enewuser guixbuilder${i} -1 -1 /var/empty guixbuild,guixbuild
done
}

src_prepare() {
default

eautoreconf
}

src_install() {
# TODO: emacs highlighter
default

readme.gentoo_create_doc

# TODO: will need a tweak for prefix
keepdir /gnu/store
fowners root:guixbuild /gnu/store
fperms 1775 /gnu/store

keepdir /var/guix/profiles/per-user
fperms 1777 /var/guix/profiles/per-user

newinitd "${FILESDIR}"/guix-daemon.initd guix-daemon
}

pkg_postinst() {
readme.gentoo_print_elog
}
8 changes: 8 additions & 0 deletions sys-apps/guix/metadata.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="project">
<email>[email protected]</email>
<name>Gentoo Haskell</name>
</maintainer>
</pkgmetadata>

0 comments on commit f7663b9

Please sign in to comment.