(options: GenerateOptions)
| 23 | } |
| 24 | |
| 25 | export function generateInstallScript(options: GenerateOptions): string { |
| 26 | const { distroId, selectedAppIds, helper = 'yay' } = options; |
| 27 | const distro = distros.find(d => d.id === distroId); |
| 28 | |
| 29 | if (!distro) return '#!/bin/bash\\necho "Error: Unknown distribution"\\nexit 1'; |
| 30 | |
| 31 | const uScript = generateUniversalScript(selectedAppIds, distroId); |
| 32 | const packages = getSelectedPackages(selectedAppIds, distroId); |
| 33 | |
| 34 | if (packages.length === 0 && !uScript) return '#!/bin/bash\\necho "No packages selected"\\nexit 0'; |
| 35 | |
| 36 | const injectUniversal = (script: string) => script.replace('\\nprint_summary', '\\n' + uScript + '\\nprint_summary'); |
| 37 | |
| 38 | let scriptContent = ''; |
| 39 | |
| 40 | switch (distroId) { |
| 41 | case 'ubuntu': scriptContent = injectUniversal(generateUbuntuScript(packages)); break; |
| 42 | case 'debian': scriptContent = injectUniversal(generateDebianScript(packages)); break; |
| 43 | case 'arch': scriptContent = injectUniversal(generateArchScript(packages, helper)); break; |
| 44 | case 'fedora': scriptContent = injectUniversal(generateFedoraScript(packages)); break; |
| 45 | case 'opensuse': scriptContent = injectUniversal(generateOpenSUSEScript(packages)); break; |
| 46 | case 'flatpak': scriptContent = injectUniversal(generateFlatpakScript(packages)); break; |
| 47 | case 'snap': scriptContent = injectUniversal(generateSnapScript(packages)); break; |
| 48 | case 'homebrew': scriptContent = injectUniversal(generateHomebrewScript(packages)); break; |
| 49 | case 'nix': |
| 50 | if (packages.length === 0) return '# Nix\\n\\n# Generic Installers (Please run separately outside NixOS configuration):\\n' + uScript; |
| 51 | return generateNixConfig(packages) + '\\n\\n# ----------------------------------------\\n# NOTE: Universal packages (npm) cannot be strictly placed in environment.systemPackages.\\n# You may need to run these commands in a standard terminal:\\n# \\n/* \\n' + uScript + '\\n*/\\n'; |
| 52 | default: return '#!/bin/bash\\necho "Unsupported distribution"\\nexit 1'; |
| 53 | } |
| 54 | |
| 55 | if (packages.length === 0) { |
| 56 | const universalCount = getUniversalPackages(selectedAppIds, 'npm', distroId).length |
| 57 | + getUniversalPackages(selectedAppIds, 'script', distroId).length; |
| 58 | return generateAsciiHeader(distro.name, universalCount) |
| 59 | + generateSharedUtils(distro.name.toLowerCase(), universalCount) |
| 60 | + uScript |
| 61 | + '\nprint_summary\n'; |
| 62 | } |
| 63 | |
| 64 | return scriptContent; |
| 65 | } |
| 66 | |
| 67 | export function generateCommandline(options: GenerateOptions): string { |
| 68 | const { selectedAppIds, distroId } = options; |
no test coverage detected