{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, ...}: { options = { name = lib.mkOption { type = lib.types.str; default = name; }; model = lib.mkOption { type = lib.types.str; }; provider = lib.mkOption { type = lib.types.str; default = "ollama"; }; apiBase = lib.mkOption { type = lib.types.str; default = "http://localhost:11434"; }; roles = lib.mkOption { type = lib.types.listOf (lib.types.enum [ "chat" "autocomplete" "embed" "rerank" "edit" "apply" "summarize" ]); default = []; }; }; })); }; default = {}; }; }; config = { # TODO: configure ollama to download any modules listed in options.host.ai.models.{name}.model if options.host.ai.models.{name}.apiBase is localhost # TODO: if we have any models that have a non localhost options.host.ai.models.{name}.apiBase then set services.ollama.enable to a lib.mkAfter true }; }