From 8d68e1daf9a406b6bdc9fe4578d7fd8306d39f16 Mon Sep 17 00:00:00 2001 From: Joshua Bell Date: Mon, 26 Jan 2026 10:21:23 -0600 Subject: [PATCH] Source system and user qvm.conf; add memory/cpus options; fix flake path --- bin/qvm-rebuild | 6 +++--- bin/qvm-start | 9 +++++++++ flake.nix | 24 ++++++++++++++++++++++++ lib/common.sh | 1 + 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/bin/qvm-rebuild b/bin/qvm-rebuild index 9c67366..edea1f0 100755 --- a/bin/qvm-rebuild +++ b/bin/qvm-rebuild @@ -32,9 +32,9 @@ ensure_user_flake() { # In development: $(dirname "$0")/../flake/default-vm/ local default_flake_dir - # Try installed location first - if [[ -d "$QVM_LIB_DIR/../share/qvm/default-vm" ]]; then - default_flake_dir="$QVM_LIB_DIR/../share/qvm/default-vm" + # Try installed location first ($QVM_LIB_DIR is $out/lib/qvm) + if [[ -d "$QVM_LIB_DIR/../../share/qvm/default-vm" ]]; then + default_flake_dir="$QVM_LIB_DIR/../../share/qvm/default-vm" else # Fall back to development location default_flake_dir="$(dirname "$(readlink -f "$0")")/../flake/default-vm" diff --git a/bin/qvm-start b/bin/qvm-start index 0f0b702..0a5b712 100755 --- a/bin/qvm-start +++ b/bin/qvm-start @@ -116,6 +116,15 @@ main() { # First-run initialization ensure_dirs + # Source config file if it exists (sets QVM_MEMORY, QVM_CPUS, etc.) + # Check system-wide config first, then user config (user overrides system) + if [[ -f "/etc/xdg/qvm/qvm.conf" ]]; then + source "/etc/xdg/qvm/qvm.conf" + fi + if [[ -f "$QVM_CONFIG_FILE" ]]; then + source "$QVM_CONFIG_FILE" + fi + # Check if VM runner exists, build if not if [[ ! -L "$QVM_VM_RUNNER" || ! -f "$(readlink -f "$QVM_VM_RUNNER" 2>/dev/null || echo "")" ]]; then log_info "First run detected - building VM..." diff --git a/flake.nix b/flake.nix index 9f7cecb..880e023 100644 --- a/flake.nix +++ b/flake.nix @@ -15,12 +15,36 @@ { nixosModules.default = { + config, + lib, pkgs, ... }: + let + cfg = config.programs.qvm; + in { + options.programs.qvm = { + memory = lib.mkOption { + type = lib.types.str; + default = "8G"; + description = "Amount of memory to allocate to the VM (e.g., '8G', '16G')"; + }; + + cpus = lib.mkOption { + type = lib.types.int; + default = 4; + description = "Number of CPU cores to allocate to the VM"; + }; + }; + config = { environment.systemPackages = [ self.packages.${pkgs.system}.qvm ]; + + environment.etc."xdg/qvm/qvm.conf".text = '' + QVM_MEMORY="${cfg.memory}" + QVM_CPUS="${toString cfg.cpus}" + ''; }; }; } diff --git a/lib/common.sh b/lib/common.sh index eb62440..61b5525 100644 --- a/lib/common.sh +++ b/lib/common.sh @@ -24,6 +24,7 @@ readonly QVM_SERIAL_LOG="$QVM_STATE_DIR/serial.log" readonly QVM_WORKSPACES_FILE="$QVM_STATE_DIR/workspaces.json" readonly QVM_USER_FLAKE="$QVM_CONFIG_DIR/flake" readonly QVM_VM_RUNNER="$QVM_DATA_DIR/run-vm" +readonly QVM_CONFIG_FILE="$QVM_CONFIG_DIR/qvm.conf" # Cache directories for 9p mounts (shared between host and VM) readonly QVM_CARGO_HOME="$QVM_CACHE_DIR/cargo-home"