{ lib, pkgs, config, osConfig, ... }: let ai-tooling-enabled = config.user.continue.enable && osConfig.host.ai.enable; in { options = { user.continue = { enable = lib.mkEnableOption "should continue be enabled on this machine"; docs = lib.mkOption { type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { options = { name = lib.mkOption { type = lib.types.str; default = name; }; startUrl = lib.mkOption { type = lib.types.str; }; }; })); }; context = lib.mkOption { type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { options = { provider = lib.mkOption { type = lib.types.str; default = name; }; }; })); default = { "code" = {}; "docs" = {}; "diff" = {}; "terminal" = {}; "problems" = {}; "folder" = {}; "codebase" = {}; }; }; }; }; config = lib.mkIf ai-tooling-enabled (lib.mkMerge [ { home = { file = { ".continue/config.yaml".source = (pkgs.formats.yaml {}).generate "continue-config" { name = "Assistant"; version = "1.0.0"; schema = "v1"; models = lib.attrsets.attrValues osConfig.host.ai.models; context = lib.attrsets.attrValues config.user.continue.context; docs = lib.attrsets.attrValues config.user.continue.docs; }; }; }; } (lib.mkIf osConfig.host.impermanence.enable { home.persistence."/persist${config.home.homeDirectory}" = { directories = [ ".continue/index" ".continue/sessions" ]; allowOther = true; }; }) ]); }