* [bug#42820] [PATCH] doc: cookbook: Add chapter about Guix environment.
@ 2020-08-12 6:06 Oleg Pykhalov
2020-08-22 18:51 ` Leo Famulari
0 siblings, 1 reply; 3+ messages in thread
From: Oleg Pykhalov @ 2020-08-12 6:06 UTC (permalink / raw)
To: 42820; +Cc: Oleg Pykhalov
* doc/guix-cookbook.texi (Environment management): New chapter.
---
doc/guix-cookbook.texi | 125 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 125 insertions(+)
diff --git a/doc/guix-cookbook.texi b/doc/guix-cookbook.texi
index f541592d13..326675c48b 100644
--- a/doc/guix-cookbook.texi
+++ b/doc/guix-cookbook.texi
@@ -64,6 +64,7 @@ Translation Project}.
* Packaging:: Packaging tutorials
* System Configuration:: Customizing the GNU System
* Advanced package management:: Power to the users!
+* Environment management:: Control environment
* Acknowledgments:: Thanks!
* GNU Free Documentation License:: The license of this document.
@@ -2268,6 +2269,130 @@ mkdir -p "$GUIX_EXTRA_PROFILES/my-project"
It's safe to delete the Guix channel profile you've just installed with the
channel specification, the project profile does not depend on it.
+@c *********************************************************************
+@node Environment management
+@chapter Environment management
+
+Guix provides multiple tools to manage environment. This chapter
+demonstrate such utilities.
+
+@menu
+* Guix environment via direnv:: Setup Guix environment with direnv
+@end menu
+
+@node Guix environment via direnv
+@section Guix environment via direnv
+
+Guix provides a @samp{direnv} package, which could extend shell after
+directory change. This tool could be used to prepare a pure Guix
+environment.
+
+The following example provides a shell function for @file{~/.direnvrc}
+file, which could be used from Guix Git repository in
+@file{~/src/guix/.envrc} file to setup a build environment similar to
+described in @pxref{Building from Git,,, guix, GNU Guix Reference
+Manual}.
+
+Create a @file{~/.direnvrc} with a Bash code:
+
+@example
+# Thanks <https://github.com/direnv/direnv/issues/73#issuecomment-152284914>
+export_function()
+@{
+ local name=$1
+ local alias_dir=$PWD/.direnv/aliases
+ mkdir -p "$alias_dir"
+ PATH_add "$alias_dir"
+ local target="$alias_dir/$name"
+ if declare -f "$name" >/dev/null; then
+ echo "#!$SHELL" > "$target"
+ declare -f "$name" >> "$target" 2>/dev/null
+ # Notice that we add shell variables to the function trigger.
+ echo "$name \$*" >> "$target"
+ chmod +x "$target"
+ fi
+@}
+
+use_guix()
+@{
+ # Set GitHub token.
+ export GUIX_GITHUB_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+
+ # Unset 'GUIX_PACKAGE_PATH'.
+ export GUIX_PACKAGE_PATH=""
+
+ # Recreate a garbage collector root.
+ gcroots="$HOME/.config/guix/gcroots"
+ mkdir -p "$gcroots"
+ gcroot="$gcroots/guix"
+ if [ -L "$gcroot" ]
+ then
+ rm -v "$gcroot"
+ fi
+
+ # Miscellaneous packages.
+ PACKAGES_MAINTENANCE=(
+ direnv
+ git
+ git:send-email
+ git-cal
+ gnupg
+ guile-colorized
+ guile-readline
+ less
+ ncurses
+ openssh
+ xdot
+ )
+
+ # Environment packages.
+ PACKAGES=(help2man guile-sqlite3 guile-gcrypt)
+
+ # Thanks <https://lists.gnu.org/archive/html/guix-devel/2016-09/msg00859.html>
+ eval "$(guix environment --search-paths --root="$gcroot" --pure guix --ad-hoc $@{PACKAGES[@@]@} $@{PACKAGES_MAINTENANCE[@@]@} "$@@")"
+
+ # Predefine configure flags.
+ configure()
+ @{
+ ./configure --localstatedir=/var --prefix=
+ @}
+ export_function configure
+
+ # Run make and optionally build something.
+ build()
+ @{
+ make -j 2
+ if [ $# -gt 0 ]
+ then
+ ./pre-inst-env guix build "$@@"
+ fi
+ @}
+ export_function build
+
+ # Predefine push Git command.
+ push()
+ @{
+ git push --set-upstream origin
+ @}
+ export_function push
+
+ clear # Clean up the screen.
+ git-cal # Show contributions calendar.
+
+ # Show commands help.
+ echo "
+build build a package or just a project if no argument provided
+configure run ./configure with predefined parameters
+push push to upstream Git repository
+"
+@}
+@end example
+
+Every project containing @file{.envrc} with a string @code{use guix}
+will have predefined environment variables and procedures.
+
+Run @command{direnv allow} to setup the environment for the first time.
+
@c *********************************************************************
@node Acknowledgments
@chapter Acknowledgments
--
2.28.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [bug#42820] [PATCH] doc: cookbook: Add chapter about Guix environment.
2020-08-12 6:06 [bug#42820] [PATCH] doc: cookbook: Add chapter about Guix environment Oleg Pykhalov
@ 2020-08-22 18:51 ` Leo Famulari
2020-08-23 7:52 ` bug#42820: " Oleg Pykhalov
0 siblings, 1 reply; 3+ messages in thread
From: Leo Famulari @ 2020-08-22 18:51 UTC (permalink / raw)
To: Oleg Pykhalov; +Cc: 42820
On Wed, Aug 12, 2020 at 09:06:13AM +0300, Oleg Pykhalov wrote:
> * doc/guix-cookbook.texi (Environment management): New chapter.
If it's useful for you, please go ahead and push!
^ permalink raw reply [flat|nested] 3+ messages in thread
* bug#42820: [PATCH] doc: cookbook: Add chapter about Guix environment.
2020-08-22 18:51 ` Leo Famulari
@ 2020-08-23 7:52 ` Oleg Pykhalov
0 siblings, 0 replies; 3+ messages in thread
From: Oleg Pykhalov @ 2020-08-23 7:52 UTC (permalink / raw)
To: Leo Famulari; +Cc: 42820-done
[-- Attachment #1: Type: text/plain, Size: 225 bytes --]
Hi,
Leo Famulari <leo@famulari.name> writes:
>> * doc/guix-cookbook.texi (Environment management): New chapter.
>
> If it's useful for you, please go ahead and push!
Thanks for bumping the thread, pushed to master.
Oleg.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-08-23 7:53 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-12 6:06 [bug#42820] [PATCH] doc: cookbook: Add chapter about Guix environment Oleg Pykhalov
2020-08-22 18:51 ` Leo Famulari
2020-08-23 7:52 ` bug#42820: " Oleg Pykhalov
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).