176 lines
6.8 KiB
Go
176 lines
6.8 KiB
Go
package bootstrap
|
|
|
|
type Classification string
|
|
|
|
const (
|
|
ClassHeadless Classification = "headless"
|
|
ClassGUI Classification = "gui"
|
|
)
|
|
|
|
type RebootBehavior string
|
|
|
|
const (
|
|
RebootNone RebootBehavior = "none"
|
|
RebootPossible RebootBehavior = "possible"
|
|
)
|
|
|
|
type Package struct {
|
|
Name string
|
|
Phase Phase
|
|
ChocoID string
|
|
ChocoParams string
|
|
InstallerArgs string
|
|
ChocoConfigAsset string
|
|
Class Classification
|
|
RequiresElevation bool
|
|
Reboot RebootBehavior
|
|
PostInstall string
|
|
AI bool
|
|
}
|
|
|
|
func chocoPackage(name, id string, phase Phase, class Classification) Package {
|
|
return Package{
|
|
Name: name,
|
|
Phase: phase,
|
|
ChocoID: id,
|
|
Class: class,
|
|
Reboot: RebootNone,
|
|
}
|
|
}
|
|
|
|
// Catalog is deliberately explicit: unlisted software is not installed by a fallback provider.
|
|
func Catalog() []Package {
|
|
packages := []Package{
|
|
chocoPackage("WezTerm", "wezterm", PhaseHost, ClassGUI),
|
|
chocoPackage("PowerShell 7", "powershell-core", PhaseHost, ClassHeadless),
|
|
chocoPackage("PowerToys", "powertoys", PhaseHost, ClassGUI),
|
|
chocoPackage("JetBrainsMono Nerd Font", "nerd-fonts-jetbrainsmono", PhaseHost, ClassHeadless),
|
|
chocoPackage("Android Studio", "androidstudio", PhaseHost, ClassGUI),
|
|
// FilePilot has no official Chocolatey package, but it's listed here.
|
|
// We use empty ChocoID so our custom installer downloads and installs it directly.
|
|
chocoPackage("FilePilot", "", PhaseHost, ClassGUI),
|
|
chocoPackage("Vivaldi", "vivaldi", PhaseHost, ClassGUI),
|
|
chocoPackage("OBS Studio", "obs-studio", PhaseHost, ClassGUI),
|
|
chocoPackage("Obsidian", "obsidian", PhaseHost, ClassGUI),
|
|
chocoPackage("Libre Hardware Monitor", "librehardwaremonitor", PhaseHost, ClassGUI),
|
|
chocoPackage("WireGuard", "wireguard", PhaseHost, ClassGUI),
|
|
chocoPackage("Steam", "steam", PhaseHost, ClassGUI),
|
|
chocoPackage("Bruno", "bruno", PhaseHost, ClassGUI),
|
|
chocoPackage("VLC", "vlc", PhaseHost, ClassGUI),
|
|
chocoPackage("Wireshark", "wireshark", PhaseHost, ClassGUI),
|
|
chocoPackage("HandBrake", "handbrake", PhaseHost, ClassGUI),
|
|
chocoPackage("Gpg4win (includes gpgOL)", "gpg4win", PhaseHost, ClassGUI),
|
|
chocoPackage("Tor Browser", "tor-browser", PhaseHost, ClassGUI),
|
|
chocoPackage("LibreWolf", "librewolf", PhaseHost, ClassGUI),
|
|
chocoPackage("Rufus", "rufus", PhaseHost, ClassGUI),
|
|
chocoPackage("Slack", "slack", PhaseHost, ClassGUI),
|
|
chocoPackage("Discord", "discord", PhaseHost, ClassGUI),
|
|
chocoPackage("Revo Uninstaller", "revo-uninstaller", PhaseHost, ClassGUI),
|
|
chocoPackage("darktable", "darktable", PhaseHost, ClassGUI),
|
|
chocoPackage("Floorp", "floorp", PhaseHost, ClassGUI),
|
|
chocoPackage("Krita", "krita", PhaseHost, ClassGUI),
|
|
chocoPackage("Godot C++", "godot", PhaseHost, ClassGUI),
|
|
chocoPackage("Blender", "blender", PhaseHost, ClassGUI),
|
|
chocoPackage("Git", "git", PhaseHost, ClassHeadless),
|
|
chocoPackage("GitHub CLI", "gh", PhaseHost, ClassHeadless),
|
|
chocoPackage("Neovim", "neovim", PhaseHost, ClassHeadless),
|
|
chocoPackage("trivy", "trivy", PhaseHost, ClassHeadless),
|
|
chocoPackage("cosign", "cosign", PhaseHost, ClassHeadless),
|
|
chocoPackage("gitleaks", "gitleaks", PhaseHost, ClassHeadless),
|
|
chocoPackage("jq", "jq", PhaseHost, ClassHeadless),
|
|
chocoPackage("yq", "yq", PhaseHost, ClassHeadless),
|
|
chocoPackage("fzf", "fzf", PhaseHost, ClassHeadless),
|
|
chocoPackage("fd", "fd", PhaseHost, ClassHeadless),
|
|
chocoPackage("bottom", "bottom", PhaseHost, ClassHeadless),
|
|
chocoPackage("ripgrep", "ripgrep", PhaseHost, ClassHeadless),
|
|
chocoPackage("FFmpeg", "ffmpeg", PhaseHost, ClassHeadless),
|
|
chocoPackage("lazygit", "lazygit", PhaseHost, ClassHeadless),
|
|
chocoPackage("Lua", "lua", PhaseHost, ClassHeadless),
|
|
chocoPackage("minisign", "minisign", PhaseHost, ClassHeadless),
|
|
chocoPackage("Google Cloud CLI", "gcloudsdk", PhaseHost, ClassHeadless),
|
|
chocoPackage("Rustup", "rustup.install", PhaseHost, ClassHeadless),
|
|
chocoPackage("AWS CLI", "awscli", PhaseHost, ClassHeadless),
|
|
chocoPackage("Azure CLI", "azure-cli", PhaseHost, ClassHeadless),
|
|
chocoPackage("Pulumi", "pulumi", PhaseHost, ClassHeadless),
|
|
chocoPackage("restic", "restic", PhaseHost, ClassHeadless),
|
|
chocoPackage("yt-dlp", "yt-dlp", PhaseHost, ClassHeadless),
|
|
chocoPackage("Vagrant", "vagrant", PhaseHost, ClassHeadless),
|
|
chocoPackage("Go", "golang", PhaseHost, ClassHeadless),
|
|
chocoPackage(".NET SDK", "dotnet-sdk", PhaseHost, ClassHeadless),
|
|
chocoPackage("Temurin JDK", "temurin", PhaseHost, ClassHeadless),
|
|
chocoPackage("Zig", "zig", PhaseHost, ClassHeadless),
|
|
chocoPackage("CMake", "cmake", PhaseHost, ClassHeadless),
|
|
chocoPackage("oh-my-posh", "oh-my-posh", PhaseCustom, ClassHeadless),
|
|
chocoPackage("Google Chrome", "googlechrome", PhaseCustom, ClassGUI),
|
|
chocoPackage("Mullvad VPN", "mullvad-app", PhaseCustom, ClassGUI),
|
|
chocoPackage("Figma", "figma", PhaseCustom, ClassGUI),
|
|
chocoPackage("Zoom", "zoom", PhaseCustom, ClassGUI),
|
|
chocoPackage("Adobe Acrobat Reader", "adobereader", PhaseCustom, ClassGUI),
|
|
chocoPackage("WhatsApp", "", PhaseCustom, ClassGUI),
|
|
chocoPackage("Affinity", "", PhaseCustom, ClassGUI),
|
|
chocoPackage("Tidal", "", PhaseCustom, ClassGUI),
|
|
chocoPackage("DaVinci Resolve", "", PhaseCustom, ClassGUI),
|
|
chocoPackage("Ardour", "", PhaseCustom, ClassGUI),
|
|
chocoPackage("Nvidia Driver", "", PhaseHost, ClassGUI),
|
|
chocoPackage("Nvidia Broadcast", "", PhaseHost, ClassGUI),
|
|
chocoPackage("AMD Auto-Detect", "", PhaseHost, ClassGUI),
|
|
chocoPackage("Intel DSA", "", PhaseHost, ClassGUI),
|
|
Package{
|
|
Name: "Nmap",
|
|
Phase: PhaseCustom,
|
|
ChocoID: "nmap",
|
|
InstallerArgs: `"/S /NPCAP=NO"`,
|
|
Class: ClassHeadless,
|
|
Reboot: RebootNone,
|
|
},
|
|
}
|
|
for i := range packages {
|
|
if packages[i].Name == "Vagrant" {
|
|
packages[i].RequiresElevation = true
|
|
packages[i].Reboot = RebootPossible
|
|
packages[i].PostInstall = "configure Hyper-V provider prerequisites"
|
|
}
|
|
}
|
|
return packages
|
|
}
|
|
|
|
func PackagesForPhase(opts Options, phase Phase) []Package {
|
|
var selected []Package
|
|
for _, pkg := range Catalog() {
|
|
if pkg.Phase != phase || (opts.NoAI && pkg.AI) {
|
|
continue
|
|
}
|
|
if pkg.Name == "Nvidia Driver" {
|
|
if !opts.Nvidia {
|
|
continue
|
|
}
|
|
pkg.ChocoParams = opts.NvidiaModel
|
|
pkg.InstallerArgs = opts.NvidiaType
|
|
}
|
|
if pkg.Name == "Nvidia Broadcast" {
|
|
if !opts.Nvidia || !isRTX2050OrNewer(opts.NvidiaModel) {
|
|
continue
|
|
}
|
|
}
|
|
if pkg.Name == "AMD Auto-Detect" {
|
|
if !opts.Amd {
|
|
continue
|
|
}
|
|
}
|
|
if pkg.Name == "Intel DSA" {
|
|
if !opts.Intel {
|
|
continue
|
|
}
|
|
}
|
|
selected = append(selected, pkg)
|
|
}
|
|
return selected
|
|
}
|
|
|
|
// DeferredWindowsTools records intentionally unsupported native workloads in v1.
|
|
var DeferredWindowsTools = []string{
|
|
"Webcamoid (no current exact winget manifest)",
|
|
"Docker Desktop", "Podman Desktop", "Buildah", "Minikube", "Firecracker",
|
|
"QEMU", "virt-manager", "Windows Terminal", "Visual Studio Code",
|
|
}
|