mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-09 12:05:50 +03:00
nixos/home-assistant: add customComponents support
Allows passing custom component packages, that get installed into home-assistant's state directory. Python depedencies, that are propagated from the custom component get passed into `extraPackages`, so they are available to home-assistant at runtime. This is implemented in a way, that allows coexistence with custom components not managed through the NixOS module.
This commit is contained in:
parent
047b9665f2
commit
f30192ae6f
2 changed files with 95 additions and 2 deletions
|
@ -63,7 +63,9 @@ let
|
|||
# Respect overrides that already exist in the passed package and
|
||||
# concat it with values passed via the module.
|
||||
extraComponents = oldArgs.extraComponents or [] ++ extraComponents;
|
||||
extraPackages = ps: (oldArgs.extraPackages or (_: []) ps) ++ (cfg.extraPackages ps);
|
||||
extraPackages = ps: (oldArgs.extraPackages or (_: []) ps)
|
||||
++ (cfg.extraPackages ps)
|
||||
++ (lib.concatMap (component: component.propagatedBuildInputs or []) cfg.customComponents);
|
||||
}));
|
||||
|
||||
# Create a directory that holds all lovelace modules
|
||||
|
@ -152,6 +154,21 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
customComponents = mkOption {
|
||||
type = types.listOf types.package;
|
||||
default = [];
|
||||
example = literalExpression ''
|
||||
with pkgs.home-assistant-custom-components; [
|
||||
prometheus-sensor
|
||||
];
|
||||
'';
|
||||
description = lib.mdDoc ''
|
||||
List of custom component packages to install.
|
||||
|
||||
Available components can be found below `pkgs.home-assistant-custom-components`.
|
||||
'';
|
||||
};
|
||||
|
||||
customLovelaceModules = mkOption {
|
||||
type = types.listOf types.package;
|
||||
default = [];
|
||||
|
@ -449,10 +466,29 @@ in {
|
|||
'' else ''
|
||||
rm -f "${cfg.configDir}/www/nixos-lovelace-modules"
|
||||
'';
|
||||
copyCustomComponents = ''
|
||||
mkdir -p "${cfg.configDir}/custom_components"
|
||||
|
||||
# remove components symlinked in from below the /nix/store
|
||||
components="$(find "${cfg.configDir}/custom_components" -maxdepth 1 -type l)"
|
||||
for component in "$components"; do
|
||||
if [[ "$(readlink "$component")" =~ ^${escapeShellArg builtins.storeDir} ]]; then
|
||||
rm "$component"
|
||||
fi
|
||||
done
|
||||
|
||||
# recreate symlinks for desired components
|
||||
declare -a components=(${escapeShellArgs cfg.customComponents})
|
||||
for component in "''${components[@]}"; do
|
||||
path="$(dirname $(find "$component" -name "manifest.json"))"
|
||||
ln -fns "$path" "${cfg.configDir}/custom_components/"
|
||||
done
|
||||
'';
|
||||
in
|
||||
(optionalString (cfg.config != null) copyConfig) +
|
||||
(optionalString (cfg.lovelaceConfig != null) copyLovelaceConfig) +
|
||||
copyCustomLovelaceModules
|
||||
copyCustomLovelaceModules +
|
||||
copyCustomComponents
|
||||
;
|
||||
environment.PYTHONPATH = package.pythonPath;
|
||||
serviceConfig = let
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue