From e28d1fa14f65669bee75d0076d6a6b96fffc5daf Mon Sep 17 00:00:00 2001 From: Joshua Bell Date: Mon, 26 Jan 2026 10:16:33 -0600 Subject: [PATCH] add nixos module --- flake.nix | 89 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 34 deletions(-) diff --git a/flake.nix b/flake.nix index a5f146d..9f7cecb 100644 --- a/flake.nix +++ b/flake.nix @@ -6,87 +6,108 @@ flake-utils.url = "github:numtide/flake-utils"; }; - outputs = { self, nixpkgs, flake-utils }: - flake-utils.lib.eachDefaultSystem (system: + outputs = + { + self, + nixpkgs, + flake-utils, + }: + { + nixosModules.default = + { + pkgs, + ... + }: + { + config = { + environment.systemPackages = [ self.packages.${pkgs.system}.qvm ]; + }; + }; + } + // flake-utils.lib.eachDefaultSystem ( + system: let pkgs = import nixpkgs { inherit system; }; - + qvm = pkgs.stdenv.mkDerivation { pname = "qvm"; version = "0.1.0"; - + src = ./.; - + nativeBuildInputs = with pkgs; [ makeWrapper installShellFiles ]; - + buildInputs = with pkgs; [ bash ]; - + installPhase = '' runHook preInstall - + # Create output directories mkdir -p $out/bin mkdir -p $out/lib/qvm mkdir -p $out/share/qvm - + # Install library files install -Dm755 lib/common.sh $out/lib/qvm/common.sh - + # Install default VM flake template if [ -d "flake/default-vm" ]; then cp -r flake/default-vm $out/share/qvm/default-vm fi - + # Install all scripts from bin/ for script in bin/*; do if [ -f "$script" ]; then install -Dm755 "$script" "$out/bin/$(basename "$script")" fi done - + # Wrap all scripts with PATH containing required dependencies for script in $out/bin/*; do wrapProgram "$script" \ - --prefix PATH : ${pkgs.lib.makeBinPath [ - pkgs.qemu - pkgs.openssh - pkgs.jq - pkgs.coreutils - pkgs.gnused - pkgs.gnugrep - pkgs.nix - pkgs.netcat-gnu - pkgs.bc - pkgs.procps - pkgs.sshpass - ]} \ + --prefix PATH : ${ + pkgs.lib.makeBinPath [ + pkgs.qemu + pkgs.openssh + pkgs.jq + pkgs.coreutils + pkgs.gnused + pkgs.gnugrep + pkgs.nix + pkgs.netcat-gnu + pkgs.bc + pkgs.procps + pkgs.sshpass + ] + } \ --set QVM_LIB_DIR "$out/lib/qvm" done - + runHook postInstall ''; - + meta = with pkgs.lib; { description = "Quick development VMs for AI-assisted workflows"; homepage = "https://github.com/josh/qvm"; license = licenses.mit; - maintainers = []; + maintainers = [ ]; platforms = platforms.linux; mainProgram = "qvm"; }; }; - - in { + + in + { packages = { inherit qvm; default = qvm; }; - + apps = { qvm = { type = "app"; @@ -97,7 +118,7 @@ program = "${qvm}/bin/qvm"; }; }; - + devShells.default = pkgs.mkShell { buildInputs = with pkgs; [ # Runtime dependencies for development @@ -112,12 +133,12 @@ bc procps sshpass - + # Development tools shellcheck shfmt ]; - + shellHook = '' export QVM_LIB_DIR="$(pwd)/lib" echo "QVM development environment"