diff --git a/fava.nix b/fava.nix index d2efee7..4abc344 100644 --- a/fava.nix +++ b/fava.nix @@ -5,10 +5,30 @@ with lib; let cfg = config.services.fava; + # Build fava with extensions included in its Python environment + favaWithExtensions = if cfg.extensions == [] then cfg.package else + cfg.package.overridePythonAttrs (old: { + propagatedBuildInputs = (old.propagatedBuildInputs or []) ++ cfg.extensions; + }); + in { options.services.fava = { enable = mkEnableOption "Fava web interface for Beancount"; + package = mkOption { + type = types.package; + default = pkgs.fava; + defaultText = literalExpression "pkgs.fava"; + description = "The fava package to use"; + }; + + extensions = mkOption { + type = types.listOf types.package; + default = []; + description = "Python packages to include as fava extensions"; + example = literalExpression "[ pkgs.python3Packages.fava-dashboards ]"; + }; + ledgerFile = mkOption { type = types.path; default = "/var/lib/fava/ledger.beancount"; @@ -103,7 +123,7 @@ in { Group = cfg.group; WorkingDirectory = cfg.dataDir; - ExecStart = "${pkgs.fava}/bin/fava ${cfg.ledgerFile} --host ${cfg.host} --port ${toString cfg.port} ${concatStringsSep " " cfg.extraOptions}"; + ExecStart = "${favaWithExtensions}/bin/fava ${cfg.ledgerFile} --host ${cfg.host} --port ${toString cfg.port} ${concatStringsSep " " cfg.extraOptions}"; Restart = "on-failure"; RestartSec = "5s";