vmsilo/modules/package.nix
2026-03-18 16:51:11 +00:00

62 lines
1.6 KiB
Nix

# Package assembly for vmsilo NixOS module
# Bundles all scripts and configures environment
{
config,
pkgs,
lib,
...
}:
let
cfg = config.programs.vmsilo;
# Generate the package with all scripts
vmPackage = pkgs.runCommand "vmsilo-scripts" { } ''
mkdir -p $out/bin
mkdir -p $out/share/bash-completion/completions
# VM launcher scripts
${lib.concatMapStringsSep "\n" (vm: ''
ln -s ${cfg._internal.vmScripts.${vm.name}} $out/bin/vmsilo-start-${vm.name}
'') (lib.attrValues cfg.nixosVms)}
# User-facing scripts
${lib.concatMapStringsSep "\n" (name: ''
ln -s ${cfg._internal.userScripts.${name}} $out/bin/${name}
'') (lib.attrNames cfg._internal.userScripts)}
# Link crosvm for convenience
ln -s ${cfg._internal.crosvm}/bin/crosvm $out/bin/crosvm
# Bash completions
${lib.optionalString cfg.enableBashIntegration ''
for cmd in vm-run vm-start vm-stop vm-shell vmsilo-usb; do
ln -s ${cfg._internal.bashCompletionScript} $out/share/bash-completion/completions/$cmd
done
''}
'';
in
{
config = lib.mkIf cfg.enable {
# Set the package output
programs.vmsilo.package = vmPackage;
# Add scripts and desktop files to system PATH
environment.systemPackages = [
vmPackage
cfg._internal.desktopFilesPackage
];
# Ensure required paths are linked
environment.pathsToLink = [
"/share/applications"
"/share/desktop-directories"
"/share/icons"
"/share/pixmaps"
"/etc/xdg/menus"
]
++ lib.optionals cfg.enableBashIntegration [
"/share/bash-completion"
];
};
}