{lib, ...}: { options.host = { ai = { enable = lib.mkEnableOption "should we use AI on this machine"; models = lib.mkOption { type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { option = { name = lib.mkOption { type = lib.types.str; default = name; }; model = { type = lib.types.str; }; provider = { type = lib.types.str; default = "ollama"; }; apiBase = { type = lib.types.str; default = null; }; roles = { type = lib.types.listOf lib.types.enumOf [ "chat" "autocomplete" "embed" "rerank" "edit" "apply" "summarize" ]; }; }; })); }; }; }; config = { # TODO: configure ollama to download any modules listed in options.host.ai.models.{name}.model if options.host.ai.models.{name}.apiBase is null # TODO: if we have any models that have a non null options.host.ai.models.{name}.apiBase then set services.ollama.enable to a lib.mkAfter true }; }