~ruther/guix-local

f5fc395ab4cc79d52a4e316b907e780a5a7adb30 — Xinglu Chen 4 years ago 609066e
scripts: home: Make ‘guix home import’ write home-configuration.scm.

* guix/scripts/home.scm (process-command): Populate ‘home-configuration.scm’
  in the destination directory instead of printing to stdout.
* doc/guix.texi (Declaring the Home Environment): Adjust accordingly.
(Invoking guix home): Likewise.

Suggested-by: Ludovic Courtès <ludo@gnu.org>
Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2 files changed, 16 insertions(+), 28 deletions(-)

M doc/guix.texi
M guix/scripts/home.scm
M doc/guix.texi => doc/guix.texi +7 -27
@@ 35933,9 35933,8 @@ The @command{guix home import} command reads some of the ``dot files''
such as @file{~/.bashrc} found in your home directory and copies them to
the given directory, @file{~/src/guix-config} in this case; it also
reads the contents of your profile, @file{~/.guix-profile}, and, based
on that, it outputs a Home configuration that resembles your current
configuration.  You can dump that configuration to a file and you're
ready to go!
on that, it populates @file{~/src/guix-config/home-configuration.scm}
with a Home configuration that resembles your current configuration.

A simple setup can include Bash and a custom text configuration, like in
the example below.  Don't be afraid to declare home environment parts,


@@ 36667,33 36666,14 @@ $ guix home list-generations 10d
@item import
Generate a @dfn{home environment} from the packages in the default
profile and configuration files found in the user's home directory.  The
configuration files will be copied to the specified directory.  Note
that not every home service that exists is supported (@pxref{Home
Services}).
configuration files will be copied to the specified directory, and a
@file{home-configuration.scm} will be populated with the home
environment.  Note that not every home service that exists is supported
(@pxref{Home Services}).

@example
$ guix home import ~/guix-config
;; This "home-environment" file can be passed to 'guix home reconfigure'
;; to reproduce the content of your profile.  This is "symbolic": it only
;; specifies package names.  To reproduce the exact same profile, you also
;; need to capture the channels being used, as returned by "guix describe".
;; See the "Replicating Guix" section in the manual.

(use-modules
  (gnu home)
  (gnu packages)
  (gnu home services shells))

(home-environment
  (packages
    (map specification->package
         (list "glibc-locales" "nss-certs" "nss")))
  (services
    (list (service
            home-bash-service-type
            (home-bash-configuration
              (bashrc
                (list (local-file "/home/charlie/guix-config/.bashrc"))))))))
guix home: '/home/alice/guix-config' populated with all the Home configuration files
@end example

@end table

M guix/scripts/home.scm => guix/scripts/home.scm +9 -1
@@ 274,7 274,15 @@ argument list and OPTS is the option alist."
                           (_ (leave (G_ "wrong number of arguments~%"))))))
       (unless (file-exists? destination)
         (mkdir-p destination))
       (import-manifest manifest destination (current-output-port))))
       (call-with-output-file
           (string-append destination "/home-configuration.scm")
         (cut import-manifest manifest destination <>))
       (info (G_ "'~a' populated with all the Home configuration files~%")
             destination)
       (display-hint (format #f (G_ "\
Run @command{guix home reconfigure ~a/home-configuration.scm} to effectively
deploy the home environment described by these files.\n")
                             destination))))
    ((describe)
     (match (generation-number %guix-home)
       (0