refactor: No flakes for us
This commit is contained in:
+110
@@ -0,0 +1,110 @@
|
||||
let
|
||||
sources = import ./npins;
|
||||
system = builtins.currentSystem;
|
||||
pkgs = import sources.nixpkgs {
|
||||
inherit system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
|
||||
claudeCode = pkgs.callPackage "${sources.claude-code-nix}/package.nix" { };
|
||||
|
||||
nixosCfg = import "${sources.nixpkgs}/nixos/lib/eval-config.nix" {
|
||||
inherit system;
|
||||
|
||||
# specialArgs = {
|
||||
# inherit sources;
|
||||
# };
|
||||
|
||||
modules = [
|
||||
{ nixpkgs.pkgs = pkgs; }
|
||||
|
||||
(
|
||||
{ modulesPath, ... }:
|
||||
{
|
||||
imports = [ "${modulesPath}/virtualisation/qemu-vm.nix" ];
|
||||
|
||||
# virtualisation
|
||||
virtualisation.graphics = false;
|
||||
virtualisation.memorySize = 4096;
|
||||
virtualisation.cores = 4;
|
||||
|
||||
virtualisation.sharedDirectories = {
|
||||
workspace = {
|
||||
source = ''"$WORKSPACE_DIR"'';
|
||||
target = "/workspace";
|
||||
securityModel = "none";
|
||||
};
|
||||
config = {
|
||||
source = ''"$CLAUDE_VM_CONFIG_DIR"'';
|
||||
target = "/mtn/claude-vm-config";
|
||||
securityModel = "none";
|
||||
};
|
||||
};
|
||||
|
||||
# boot / console
|
||||
boot.kernelParams = [ "console=ttyS0" ];
|
||||
boot.loader.grub.enable = false;
|
||||
boot.initrd.kernelModules = [
|
||||
"9p"
|
||||
"9pnet_virtio"
|
||||
];
|
||||
|
||||
# user
|
||||
users.users.claude = {
|
||||
isNormalUser = true;
|
||||
home = "/home/claude";
|
||||
extraGroups = [ "wheel" ];
|
||||
};
|
||||
|
||||
services.getty.autologinUser = "claude";
|
||||
|
||||
# packages
|
||||
environment.systemPackages = [
|
||||
claudeCode
|
||||
pkgs.git
|
||||
pkgs.curl
|
||||
pkgs.vim
|
||||
];
|
||||
|
||||
# login shell launches claude
|
||||
programs.bash.interactiveShellInit = ''
|
||||
# Only run for the auto-login claude user
|
||||
[ "$(whoami)" = "claude" ] || return
|
||||
|
||||
args=()
|
||||
if [ -f /mnt/claude-vm-config/claude-args ]; then
|
||||
while IFS= read -r line; do
|
||||
[ -n "$line" ] && args+=("$line")
|
||||
done < /mnt/claude-vm-config/claude-args
|
||||
fi
|
||||
|
||||
cd /workspace 2>/dev/null || true
|
||||
exec claude "''${args[@]}"
|
||||
'';
|
||||
|
||||
# misc
|
||||
networking.hostName = "claude-vm";
|
||||
system.stateVersion = "25.05";
|
||||
}
|
||||
)
|
||||
];
|
||||
};
|
||||
vmBuild = nixosCfg.config.system.build.vm;
|
||||
in
|
||||
{
|
||||
claude-vm = pkgs.writeShellScriptBin "claude-vm" ''
|
||||
CONFIG_DIR=$(mktemp -d)
|
||||
trap "rm -rf '$CONFIG_DIR'" EXIT
|
||||
|
||||
# Write all CLI args to a file, one per line
|
||||
if [ $# -gt 0 ]; then
|
||||
printf '%s\n' "$@" > "$CONFIG_DIR/claude-args"
|
||||
else
|
||||
touch "$CONFIG_DIR/claude-args"
|
||||
fi
|
||||
|
||||
export CLAUDE_VM_CONFIG_DIR="$CONFIG_DIR"
|
||||
export WORKSPACE_DIR="$(pwd)"
|
||||
${vmBuild}/bin/run-claude-vm-vm
|
||||
'';
|
||||
}
|
||||
Reference in New Issue
Block a user