mirror of
https://github.com/nix-community/home-manager
synced 2024-12-25 03:09:47 +01:00
bf3a8c6383
Before this path would point to the modules path. Using the project root instead makes it possible to set `<home-manager>` to point to a downloadable archive of Home Manager. This should make it significantly easier to install and keep Home Manager up to date. To match this change we also deprecate the Home Manager option programs.home-manager.modulesPath and instead ask users to use programs.home-manager.path
78 lines
2.2 KiB
Nix
78 lines
2.2 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
with import ../lib/dag.nix { inherit lib; };
|
|
|
|
let
|
|
|
|
cfg = config.programs.home-manager;
|
|
|
|
in
|
|
|
|
{
|
|
meta.maintainers = [ maintainers.rycee ];
|
|
|
|
options = {
|
|
programs.home-manager = {
|
|
enable = mkEnableOption "Home Manager";
|
|
|
|
path = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
example = "$HOME/devel/home-manager";
|
|
description = ''
|
|
The default path to use for Home Manager. If this path does
|
|
not exist then
|
|
<filename>$HOME/.config/nixpkgs/home-manager</filename> and
|
|
<filename>$HOME/.nixpkgs/home-manager</filename> will be
|
|
attempted.
|
|
'';
|
|
};
|
|
|
|
modulesPath = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
example = "$HOME/devel/home-manager/modules";
|
|
description = ''
|
|
The default path to use for Home Manager modules. If this
|
|
path does not exist then
|
|
<filename>$HOME/.config/nixpkgs/home-manager/modules</filename>
|
|
and <filename>$HOME/.nixpkgs/home-manager/modules</filename>
|
|
will be attempted. DEPRECATED: Use
|
|
<varname>programs.home-manager.path</varname> instead.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
assertions = [{
|
|
assertion = cfg.path == null || cfg.modulesPath == null;
|
|
message = "Cannot simultaneously use "
|
|
+ "'programs.home-manager.path' and "
|
|
+ "'programs.home-manager.modulesPath'.";
|
|
}];
|
|
|
|
home.packages = [
|
|
(import ../../home-manager {
|
|
inherit pkgs;
|
|
path =
|
|
if cfg.modulesPath != null
|
|
then "$(dirname ${cfg.modulesPath})"
|
|
else cfg.path;
|
|
})
|
|
];
|
|
|
|
# Uninstall manually installed home-manager, if such exists.
|
|
# Without this a file collision error will be printed.
|
|
home.activation.uninstallHomeManager =
|
|
dagEntryBetween [ "installPackages" ] [ "writeBoundary" ] ''
|
|
if nix-env -q | grep -q '^home-manager$' ; then
|
|
$DRY_RUN_CMD nix-env -e home-manager
|
|
|
|
echo "You can now remove the 'home-manager' packageOverride"
|
|
echo "or overlay in '~/.config/nixpkgs/', if you want."
|
|
fi
|
|
'';
|
|
};
|
|
}
|