207 lines
5.1 KiB
Go
207 lines
5.1 KiB
Go
package profile
|
||
|
||
import "fmt"
|
||
|
||
// TemplateName 模板类型
|
||
type TemplateName string
|
||
|
||
const (
|
||
TemplateMinimal TemplateName = "minimal" // 最小环境:仅运行时 + 包管理器
|
||
TemplateStandard TemplateName = "standard" // 标准环境:常用开发工具
|
||
TemplateFull TemplateName = "full" // 完整环境:含敏感数据和字体
|
||
)
|
||
|
||
// ValidTemplateNames 返回所有合法的模板名称
|
||
func ValidTemplateNames() []TemplateName {
|
||
return []TemplateName{TemplateMinimal, TemplateStandard, TemplateFull}
|
||
}
|
||
|
||
// IsValidTemplateName 检查模板名是否合法
|
||
func IsValidTemplateName(name string) bool {
|
||
switch TemplateName(name) {
|
||
case TemplateMinimal, TemplateStandard, TemplateFull:
|
||
return true
|
||
}
|
||
return false
|
||
}
|
||
|
||
// NewFromTemplate 根据模板类型创建 Profile
|
||
// name 为 Profile 名称,tmpl 为模板类型
|
||
func NewFromTemplate(name string, tmpl TemplateName) (*Profile, error) {
|
||
switch tmpl {
|
||
case TemplateMinimal:
|
||
return newMinimal(name), nil
|
||
case TemplateStandard:
|
||
return newStandard(name), nil
|
||
case TemplateFull:
|
||
return newFull(name), nil
|
||
default:
|
||
return nil, fmt.Errorf("未知模板类型: %q,可选值: minimal, standard, full", tmpl)
|
||
}
|
||
}
|
||
|
||
// ----------------------------------------------------------------
|
||
// minimal 模板 — 仅运行时 + 包管理器
|
||
// ----------------------------------------------------------------
|
||
|
||
func newMinimal(name string) *Profile {
|
||
return &Profile{
|
||
Name: name,
|
||
Description: "最小环境配置 — 仅包含编程语言运行时和包管理器",
|
||
Version: CurrentVersion,
|
||
Collectors: CollectorConfig{
|
||
Enabled: []string{
|
||
"go",
|
||
"node",
|
||
"python",
|
||
"scoop",
|
||
},
|
||
Disabled: []string{
|
||
"ssh",
|
||
"font",
|
||
},
|
||
},
|
||
Settings: map[string]SettingMap{
|
||
"go": {
|
||
"include_tools": true,
|
||
},
|
||
"node": {
|
||
"include_global_packages": true,
|
||
"exclude_packages": []string{"npm"},
|
||
},
|
||
"scoop": {
|
||
"include_buckets": true,
|
||
},
|
||
},
|
||
}
|
||
}
|
||
|
||
// ----------------------------------------------------------------
|
||
// standard 模板 — 常用开发工具
|
||
// ----------------------------------------------------------------
|
||
|
||
func newStandard(name string) *Profile {
|
||
return &Profile{
|
||
Name: name,
|
||
Description: "标准开发环境配置 — 包含常用运行时、编辑器、Shell 和 Git",
|
||
Version: CurrentVersion,
|
||
Collectors: CollectorConfig{
|
||
Enabled: []string{
|
||
"go",
|
||
"node",
|
||
"python",
|
||
"vscode",
|
||
"powershell",
|
||
"scoop",
|
||
"git",
|
||
},
|
||
Disabled: []string{
|
||
"ssh",
|
||
"font",
|
||
"env",
|
||
},
|
||
},
|
||
Settings: map[string]SettingMap{
|
||
"go": {
|
||
"include_tools": true,
|
||
"tools_filter": []string{"gopls", "dlv", "staticcheck", "goimports"},
|
||
},
|
||
"node": {
|
||
"include_global_packages": true,
|
||
"exclude_packages": []string{"npm"},
|
||
},
|
||
"vscode": {
|
||
"include_settings": true,
|
||
"include_keybindings": true,
|
||
"include_snippets": true,
|
||
"exclude_extensions": []string{"ms-vscode.remote-*"},
|
||
},
|
||
"powershell": {
|
||
"include_profile": true,
|
||
"include_modules": true,
|
||
},
|
||
"scoop": {
|
||
"include_buckets": true,
|
||
},
|
||
"git": {
|
||
"include_aliases": true,
|
||
"skip_credentials": true,
|
||
},
|
||
},
|
||
}
|
||
}
|
||
|
||
// ----------------------------------------------------------------
|
||
// full 模板 — 完整环境(含敏感数据和字体)
|
||
// ----------------------------------------------------------------
|
||
|
||
func newFull(name string) *Profile {
|
||
return &Profile{
|
||
Name: name,
|
||
Description: "完整环境配置 — 包含所有采集器,含环境变量、加密密钥和字体",
|
||
Version: CurrentVersion,
|
||
Collectors: CollectorConfig{
|
||
Enabled: []string{}, // 空列表 = 启用全部
|
||
Disabled: []string{}, // 无禁用
|
||
},
|
||
Settings: map[string]SettingMap{
|
||
"go": {
|
||
"include_tools": true,
|
||
},
|
||
"node": {
|
||
"include_global_packages": true,
|
||
"exclude_packages": []string{"npm"},
|
||
},
|
||
"vscode": {
|
||
"include_settings": true,
|
||
"include_keybindings": true,
|
||
"include_snippets": true,
|
||
},
|
||
"powershell": {
|
||
"include_profile": true,
|
||
"include_modules": true,
|
||
},
|
||
"scoop": {
|
||
"include_buckets": true,
|
||
"exclude_packages": []string{},
|
||
},
|
||
"git": {
|
||
"include_aliases": true,
|
||
"skip_credentials": true,
|
||
},
|
||
"env": {
|
||
"include_patterns": []string{
|
||
"GOPATH", "GOROOT", "GOPROXY",
|
||
"JAVA_HOME",
|
||
"NODE_*",
|
||
"PYTHON*",
|
||
"CARGO_HOME", "RUSTUP_HOME",
|
||
},
|
||
"exclude_patterns": []string{
|
||
"*SECRET*", "*TOKEN*", "*PASSWORD*", "*KEY*", "*CREDENTIAL*",
|
||
},
|
||
},
|
||
"ssh": {
|
||
"encrypt": true,
|
||
},
|
||
"font": {
|
||
"formats": []string{".ttf", ".otf"},
|
||
},
|
||
},
|
||
}
|
||
}
|
||
|
||
// TemplateDescription 返回模板的简短描述
|
||
func TemplateDescription(tmpl TemplateName) string {
|
||
switch tmpl {
|
||
case TemplateMinimal:
|
||
return "最小环境 — 仅运行时和包管理器 (go, node, python, scoop)"
|
||
case TemplateStandard:
|
||
return "标准环境 — 常用开发工具 (+ vscode, powershell, git)"
|
||
case TemplateFull:
|
||
return "完整环境 — 所有采集器 (+ env, ssh, font)"
|
||
default:
|
||
return "未知模板"
|
||
}
|
||
}
|