Merge pull request #274192 from foo-dogsquared/nixos-guix-add-guix-home-support
nixos/guix: add Guix home support
This commit is contained in:
commit
3526f2ffec
1 changed files with 27 additions and 8 deletions
|
@ -22,11 +22,19 @@ let
|
|||
})
|
||||
(builtins.genList guixBuildUser numberOfUsers));
|
||||
|
||||
# A set of Guix user profiles to be linked at activation.
|
||||
# A set of Guix user profiles to be linked at activation. All of these should
|
||||
# be default profiles managed by Guix CLI and the profiles are located in
|
||||
# `${cfg.stateDir}/profiles/per-user/$USER/$PROFILE`.
|
||||
guixUserProfiles = {
|
||||
# The current Guix profile that is created through `guix pull`.
|
||||
# The default Guix profile managed by `guix pull`. Take note this should be
|
||||
# the profile with the most precedence in `PATH` env to let users use their
|
||||
# updated versions of `guix` CLI.
|
||||
"current-guix" = "\${XDG_CONFIG_HOME}/guix/current";
|
||||
|
||||
# The default Guix home profile. This profile contains more than exports
|
||||
# such as an activation script at `$GUIX_HOME_PROFILE/activate`.
|
||||
"guix-home" = "$HOME/.guix-home/profile";
|
||||
|
||||
# The default Guix profile similar to $HOME/.nix-profile from Nix.
|
||||
"guix-profile" = "$HOME/.guix-profile";
|
||||
};
|
||||
|
@ -256,20 +264,31 @@ in
|
|||
# ephemeral setups where only certain part of the filesystem is
|
||||
# persistent (e.g., "Erase my darlings"-type of setup).
|
||||
system.userActivationScripts.guix-activate-user-profiles.text = let
|
||||
guixProfile = profile: "${cfg.stateDir}/guix/profiles/per-user/\${USER}/${profile}";
|
||||
linkProfile = profile: location: let
|
||||
userProfile = guixProfile profile;
|
||||
in ''
|
||||
[ -d "${userProfile}" ] && ln -sfn "${userProfile}" "${location}"
|
||||
'';
|
||||
linkProfileToPath = acc: profile: location: let
|
||||
guixProfile = "${cfg.stateDir}/guix/profiles/per-user/\${USER}/${profile}";
|
||||
in acc + ''
|
||||
[ -d "${guixProfile}" ] && [ -L "${location}" ] || ln -sf "${guixProfile}" "${location}"
|
||||
'';
|
||||
in acc + (linkProfile profile location);
|
||||
|
||||
activationScript = lib.foldlAttrs linkProfileToPath "" guixUserProfiles;
|
||||
# This should contain export-only Guix user profiles. The rest of it is
|
||||
# handled manually in the activation script.
|
||||
guixUserProfiles' = lib.attrsets.removeAttrs guixUserProfiles [ "guix-home" ];
|
||||
|
||||
linkExportsScript = lib.foldlAttrs linkProfileToPath "" guixUserProfiles';
|
||||
in ''
|
||||
# Don't export this please! It is only expected to be used for this
|
||||
# activation script and nothing else.
|
||||
XDG_CONFIG_HOME=''${XDG_CONFIG_HOME:-$HOME/.config}
|
||||
|
||||
# Linking the usual Guix profiles into the home directory.
|
||||
${activationScript}
|
||||
${linkExportsScript}
|
||||
|
||||
# Activate all of the default Guix non-exports profiles manually.
|
||||
${linkProfile "guix-home" "$HOME/.guix-home"}
|
||||
[ -L "$HOME/.guix-home" ] && "$HOME/.guix-home/activate"
|
||||
'';
|
||||
|
||||
# GUIX_LOCPATH is basically LOCPATH but for Guix libc which in turn used by
|
||||
|
|
Loading…
Reference in a new issue