*.* This is expected. When you ran the "guix package -L ~/dotfiles/ -m ~/dotfiles/guix/packages/manifest.scm" command above, that not only built the manifest but also used the manifest to create a new generation of /home/twashing/.guix-profile. Ah I see. *.* If you run "guix package --list-generations" you should see a list of all of the existing (numbered) generations with the currently active generation marked (it's typically the last / latest generation, and should be in this case). . Running "guix package -I" will list the packages in the current generation of your default guix profile, which should contain the packages in your manifest. *.* To go into more details about how profiles work: unless you specify the "-p" argument to "guix package", it will operate on your default profile when installing or removing packages (including through using manifests with "-m"), and create a new generation when the set of installed packages changes. *.* /home/twashing/.guix-profile is a symlink to /var/guix/profiles/per-user/twashing/guix-profile, which in turn is a symlink to one of the numbered symlinks in that same /var/guix directory (i.e. if your current generation number is 14, then /var/guix/profiles/per-user/twashing/guix-profile will point to /var/guix/profiles/per-user/twashing/guix-profile-14-link). *.* Each of those numbered symlinks points to the actual profile in /gnu/store, so using that hypothetical generation 14 as the one created by your "guix package -m" command above, /var/guix/profiles/per-user/twashing/guix-profile-14-link would be a symlink to /gnu/store/sqaz4ff2nshfizfh8ymbzllia6lsgnfv-profile. This is really useful for my understanding. Thank-you! But when I restart my machine, the currently installed tools (from "guix package -i foo") are not available on login. For example, I manually ran "guix package -i tree git". And after restarting my machine, those were no longer available, even though presumably they should have been part of my latest generation. I do remember trying to load the tools like below. But git and tree were still not available. ". /home/twashing/.guix-profile/etc/profile" Are tools in generations cumulative? And how can I load the cumulative sum of all my generations, and any custom profiles I create? Thanks again Tim On Tue, 23 May 2023 at 12:39, Kaelyn wrote: > Hi Tim, > > ------- Original Message ------- > On Monday, May 22nd, 2023 at 8:20 PM, Timothy Washington < > twashing@gmail.com> wrote: > > > > Yes that was it! I added "(native-inputs (list perl python))" to my > package definition. > > $ guix build -L ~/dotfiles/ rust-rustscan # A. Now builds again! > > /gnu/store/4bldy27x1f2mzjqg5jd176nrawl98y1y-rust-rustscan-2.1.1 > > > > $ guix package -L ~/dotfiles/ -m ~/dotfiles/guix/packages/manifest.scm # > B. Now also builds! > > ... > > The following derivation will be built: > > /gnu/store/xll763hpl7mvdkxd3kf8f98pygarzh41-profile.drv > > > > ... > > > > guix package --list-profiles # C. does NOT show the custom profile just > built > > /home/twashing/.config/guix/current > > /home/twashing/.guix-profile > > This is expected. When you ran the "guix package -L ~/dotfiles/ -m > ~/dotfiles/guix/packages/manifest.scm" command above, that not only built > the manifest but also used the manifest to create a new generation of > /home/twashing/.guix-profile. If you run "guix package --list-generations" > you should see a list of all of the existing (numbered) generations with > the currently active generation marked (it's typically the last / latest > generation, and should be in this case). Running "guix package -I" will > list the packages in the current generation of your default guix profile, > which should contain the packages in your manifest. > > To go into more details about how profiles work: unless you specify the > "-p" argument to "guix package", it will operate on your default profile > when installing or removing packages (including through using manifests > with "-m"), and create a new generation when the set of installed packages > changes. /home/twashing/.guix-profile is a symlink to > /var/guix/profiles/per-user/twashing/guix-profile, which in turn is a > symlink to one of the numbered symlinks in that same /var/guix directory > (i.e. if your current generation number is 14, then > /var/guix/profiles/per-user/twashing/guix-profile will point to > /var/guix/profiles/per-user/twashing/guix-profile-14-link). Each of those > numbered symlinks points to the actual profile in /gnu/store, so using that > hypothetical generation 14 as the one created by your "guix package -m" > command above, /var/guix/profiles/per-user/twashing/guix-profile-14-link > would be a symlink to /gnu/store/sqaz4ff2nshfizfh8ymbzllia6lsgnfv-profile. > > > > > > > cat /gnu/store/xll763hpl7mvdkxd3kf8f98pygarzh41-profile.drv # D. DOES > show the new profile in /gnu/store > > > Derive([("out","/gnu/store/sqaz4ff2nshfizfh8ymbzllia6lsgnfv-profile","","")], > ... > ("out","/gnu/store/sqaz4ff2nshfizfh8ymbzllia6lsgnfv-profile"),("preferLocalBuild","1")]) > > > > > > i. Using a direct "guix build" gives you a directory in "/gnu/store". > And you can add that bin to your PATH. > > This is fragile and will work only as long as the package exists under > /gnu/store. Which is to say, this method will break as soon as "guix gc" is > run unless the package happens to be "live" as a member or dependency of > any existing generation of the system profile or other profiles (the > profile generation symlinks like the guix-profile-14-link mentioned above > are the garbage collector roots for guix, as can be seen with "guix gc > --list-roots"). > > > ii. But for "/gnu/store/*-profile/", would you just loop over those > profile directories, and run each "/gnu/store/*-profile/etc/profile"? > > This is a very bad idea, as many or most of those "/gnu/store/*-profile" > directories are different generations of the same profile, and sourcing > them all would result in many conflicts and other troubles, including > having unpredictable and likely outdated versions of commands being picked > up before newer counterparts. > > Cheers, > Kaelyn >