Extract control-plane protocol

This commit is contained in:
Timothy J. Aveni
2026-06-18 07:12:54 -07:00
parent 9bcf65d9b1
commit 764e090c4b
32 changed files with 260 additions and 2058 deletions
+3
View File
@@ -4,3 +4,6 @@
[submodule "quixos-nix-helpers"]
path = quixos-nix-helpers
url = https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-nix-helpers.git
[submodule "quixos-control-plane-protocol"]
path = quixos-control-plane-protocol
url = https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git
Binary file not shown.
File diff suppressed because one or more lines are too long
+15
View File
@@ -0,0 +1,15 @@
approvedGitRepositories:
- https://gitea-external.egads.tutti.syntaxblitz.net/quixos/*
enableScripts: true
generateDefaultNix: false
individualNixPackaging: true
nodeLinker: node-modules
plugins:
- checksum: e183406dae0b56ce2dcf0880f6b4f8dd4bd1a50ebc8e06f37f05c375dae351476019a3c324443c1b9fa5ed0b3ad2053fae39810d66c16d84c4fc0365f531e650
path: .yarn/plugins/yarn-plugin-nixify.cjs
spec: "https://raw.githubusercontent.com/stephank/yarn-plugin-nixify/main/dist/yarn-plugin-nixify.js"
+9 -3
View File
@@ -10,12 +10,17 @@
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
repoRoot = ../.;
controlCliProject = (pkgs.callPackage ./yarn-project.nix { }) {
src = ./.;
};
launcher = pkgs.writeShellApplication {
name = "qx-control";
runtimeInputs = [ pkgs.nodejs_24 ];
runtimeInputs = [
pkgs.nodejs_24
controlCliProject.passthru.yarn
];
text = ''
exec node --enable-source-maps ${repoRoot}/control-cli/src/cli.ts "$@"
exec ${controlCliProject.passthru.yarn}/bin/yarn start -- "$@"
'';
};
in {
@@ -27,6 +32,7 @@
devShells.default = pkgs.mkShell {
packages = [
pkgs.nodejs_24
pkgs.yarn-berry_4
launcher
];
shellHook = ''
+3
View File
@@ -8,5 +8,8 @@
},
"scripts": {
"start": "node --enable-source-maps src/cli.ts"
},
"dependencies": {
"@quixos/control-plane-protocol": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa"
}
}
Regular → Executable
+1 -1
View File
@@ -48,7 +48,7 @@ import {
type ControlPlaneRunningPackage,
type ControlPlaneSchemaDescriptionResult,
type ControlPlaneStatusResponse,
} from "../../quixos-control-plane-protocol/src/index.ts";
} from "@quixos/control-plane-protocol";
type StageResult = {
name: string;
+1 -1
View File
@@ -27,7 +27,7 @@ import {
type ControlPlaneRunResponse,
type ControlPlaneSchemaDescriptionResult,
type ControlPlaneStatusResponse,
} from "../../quixos-control-plane-protocol/src/index.ts";
} from "@quixos/control-plane-protocol";
const controlPlaneUrl =
process.env.QUIXOS_CONTROL_URL ?? CONTROL_PLANE_DEFAULT_URL;
+1 -1
View File
@@ -17,7 +17,7 @@ import {
type ControlPlaneReplLogEntry,
type ControlPlaneSchemaDescriptionResult,
type ControlPlaneStatusResponse,
} from "../../quixos-control-plane-protocol/src/index.ts";
} from "@quixos/control-plane-protocol";
type JsonSchema = Record<string, unknown>;
+1 -1
View File
@@ -6,7 +6,7 @@ import type {
ControlPlaneCheckResult,
ControlPlaneDependencyNode,
ControlPlaneStatusResponse,
} from "../../quixos-control-plane-protocol/src/index.ts";
} from "@quixos/control-plane-protocol";
export type WorkspaceDependencyRef = {
packageName: string;
+1 -1
View File
@@ -14,6 +14,6 @@
"verbatimModuleSyntax": true,
"types": ["node"]
},
"include": ["src/**/*.ts", "../quixos-control-plane-protocol/src/**/*.ts"],
"include": ["src/**/*.ts"],
"exclude": ["node_modules", ".yarn", "dist"]
}
+164
View File
@@ -0,0 +1,164 @@
# This file is generated by running "yarn install" inside your project.
# Manual changes might be lost - proceed with caution!
{ lib, stdenv, nodejs, git, cacert, fetchurl, writeShellScript, writeShellScriptBin }:
{ src, overrideAttrs ? null, ... } @ args:
let
yarnBin = fetchurl {
url = "https://repo.yarnpkg.com/4.14.1/packages/yarnpkg-cli/bin/yarn.js";
hash = "sha512-ZN9EgFWy03uiadfbU1pGm42pP47xFAwl/XqDwAqPuqyyFMoOAlU7kqLFTO94u2fQtIF/qwIAHfDiT6wPrMw7Qg==";
};
cacheFolder = ".yarn/cache";
lockfile = ./yarn.lock;
# Call overrideAttrs on a derivation if a function is provided.
optionalOverride = fn: drv:
if fn == null then drv else drv.overrideAttrs fn;
# Simple stub that provides the global yarn command.
yarn = writeShellScriptBin "yarn" ''
exec '${nodejs}/bin/node' '${yarnBin}' "$@"
'';
# Common attributes between Yarn derivations.
drvCommon = {
# Make sure the build uses the right Node.js version everywhere.
buildInputs = [ nodejs yarn ];
# All dependencies should already be cached.
yarn_enable_network = "0";
# Tell node-gyp to use the provided Node.js headers for native code builds.
npm_config_nodedir = nodejs;
};
# Comman variables that we set in a Nix build, but not in a Nix shell.
buildVars = ''
# Make Yarn produce friendlier logging for automated builds.
export CI=1
# Tell node-pre-gyp to never fetch binaries / always build from source.
export npm_config_build_from_source=true
# Disable Nixify plugin to save on some unnecessary processing.
export yarn_enable_nixify=false
'';
# Create derivations for fetching dependencies.
cacheDrvs = let
in lib.mapAttrs (locator: { filename, hash }: stdenv.mkDerivation {
name = lib.strings.sanitizeDerivationName locator;
buildInputs = [ yarn git cacert ];
buildCommand = ''
cd '${src}'
${buildVars}
HOME="$TMP" yarn_enable_global_cache=false yarn_cache_folder="$TMP" \
yarn nixify fetch ${locator}
# Because we change the cache dir, Yarn may generate a different name.
mv "$TMP/$(sed 's/-[^-]*\.[^-]*$//' <<< "$outputFilename")"-* $out
'';
outputFilename = filename;
outputHash = hash;
}) cacheEntries;
# Create a shell snippet to copy dependencies from a list of derivations.
mkCacheBuilderForDrvs = drvs:
writeShellScript "collect-yarn-cache" (lib.concatMapStrings (drv: ''
cp --reflink=auto ${drv} '${drv.outputFilename}'
'') drvs);
# Main project derivation.
project = stdenv.mkDerivation (drvCommon // {
inherit src;
name = "qx-control-cli";
configurePhase = ''
${buildVars}
# Copy over the Yarn cache.
rm -fr '${cacheFolder}'
mkdir -p '${cacheFolder}'
pushd '${cacheFolder}' > /dev/null
source ${mkCacheBuilderForDrvs (lib.attrValues cacheDrvs)}
popd > /dev/null
# Yarn may need a writable home directory.
export yarn_global_folder="$TMP"
# Ensure global cache is disabled. Cache must be part of our output.
touch .yarnrc.yml
sed -i -e '/^enableGlobalCache/d' .yarnrc.yml
echo 'enableGlobalCache: false' >> .yarnrc.yml
# Some node-gyp calls may call out to npm, which could fail due to an
# read-only home dir.
export HOME="$TMP"
# running preConfigure after the cache is populated allows for
# preConfigure to contain substituteInPlace for dependencies as well as the
# main project. This is necessary for native bindings that maybe have
# hardcoded values.
runHook preConfigure
# Run normal Yarn install to complete dependency installation.
yarn install --immutable --immutable-cache
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
runHook postBuild
'';
installPhase = ''
runHook preInstall
# Move the package contents to the output directory.
if grep -q '"workspaces"' package.json; then
# We can't use `yarn pack` in a workspace setup, because it only
# packages the outer workspace.
mkdir -p "$out/libexec"
mv $PWD "$out/libexec/$name"
else
# - If the package.json has a `files` field, only files matching those patterns are copied
# - Otherwise all files are copied.
yarn pack --out package.tgz
mkdir -p "$out/libexec/$name"
tar xzf package.tgz --directory "$out/libexec/$name" --strip-components=1
cp --reflink=auto .yarnrc* "$out/libexec/$name"
cp --reflink=auto ${lockfile} "$out/libexec/$name/yarn.lock"
cp --reflink=auto --recursive .yarn "$out/libexec/$name"
# Copy the Yarn linker output into the package.
cp --reflink=auto --recursive node_modules "$out/libexec/$name"
fi
cd "$out/libexec/$name"
# Invoke a plugin internal command to setup binaries.
mkdir -p "$out/bin"
yarn nixify install-bin $out/bin
# A package with node_modules doesn't need the cache
yarn cache clean
runHook postInstall
'';
passthru = {
inherit nodejs;
yarn-freestanding = yarn;
yarn = writeShellScriptBin "yarn" ''
exec '${yarn}/bin/yarn' --cwd '${overriddenProject}/libexec/${overriddenProject.name}' "$@"
'';
};
});
overriddenProject = optionalOverride overrideAttrs project;
cacheEntries = {
"@quixos/control-plane-protocol@https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa" = { filename = "@quixos-control-plane-protocol-https-95332b7071-01924da2f9.zip"; hash = "sha512-AZJNovn3D8sOjDWY5ib1W7JTdziURDAU6CHiDHNlzhyHJL3NFQh7Ni4JophRKI1Ql7EHLOuSKla5TkMRcl/zjQ=="; };
};
in overriddenProject
+23
View File
@@ -0,0 +1,23 @@
# This file is generated by running "yarn install" inside your project.
# Manual changes might be lost - proceed with caution!
__metadata:
version: 9
cacheKey: 10c0
"@quixos/control-plane-protocol@https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa":
version: 1.0.0
resolution: "@quixos/control-plane-protocol@https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa"
checksum: 10c0/01924da2f9f70fcb0e8c3598e626f55bb253773894443014e821e20c7365ce1c8724bdcd15087b362e09a29851288d5097b1072ceb922a56b94e4311725ff38d
languageName: node
linkType: hard
"qx-control-cli@workspace:.":
version: 0.0.0-use.local
resolution: "qx-control-cli@workspace:."
dependencies:
"@quixos/control-plane-protocol": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa"
bin:
qx-control: ./src/cli.ts
languageName: unknown
linkType: soft
+1 -12
View File
@@ -18,12 +18,6 @@
qx-control = control-cli.packages.${system}.default;
orchestratorProject = (pkgs.callPackage ./orchestrator/yarn-project.nix { }) {
src = ./orchestrator;
overrideAttrs = old: {
postInstall = (old.postInstall or "") + ''
cp --reflink=auto --recursive ${./quixos-control-plane-protocol} \
"$out/libexec/quixos-control-plane-protocol"
'';
};
};
quixos-orchestrator = pkgs.writeShellApplication {
name = "quixos-orchestrator";
@@ -37,13 +31,8 @@
exec ${orchestratorProject.passthru.yarn}/bin/yarn start -- "$@"
'';
};
projectVisualizerWorkspaceSrc = pkgs.runCommand "quixos-project-visualizer-workspace-src" { } ''
mkdir -p "$out"
cp --reflink=auto --recursive ${./project-visualizer} "$out/project-visualizer"
cp --reflink=auto --recursive ${./quixos-control-plane-protocol} "$out/quixos-control-plane-protocol"
'';
projectVisualizerProject = (pkgs.callPackage ./project-visualizer/yarn-project.nix { }) {
src = "${projectVisualizerWorkspaceSrc}/project-visualizer";
src = ./project-visualizer;
overrideAttrs = old: {
buildPhase = ''
runHook preBuild
+3 -2
View File
@@ -3,7 +3,7 @@
let
cfg = config.services.quixosHost;
quixosPackages = self.packages.${pkgs.system};
quixosPackages = self.packages.${pkgs.stdenv.hostPlatform.system};
in
{
options.services.quixosHost = {
@@ -80,6 +80,7 @@ in
networking.hostId = cfg.hostId;
boot.supportedFilesystems = [ "zfs" ];
boot.zfs.extraPools = [ cfg.zfsPool ];
boot.zfs.forceImportRoot = false;
services.zfs.autoScrub = {
enable = true;
pools = [ cfg.zfsPool ];
@@ -116,7 +117,7 @@ in
services.amazon-ssm-agent.enable = true;
services.openssh = {
enable = cfg.enableSsh;
enable = lib.mkForce cfg.enableSsh;
hostKeys = [
{
path = "/persist/etc/ssh/ssh_host_ed25519_key";
+11
View File
@@ -28,6 +28,7 @@ const RAW_RUNTIME_STATE =
[null, {\
"packageLocation": "./",\
"packageDependencies": [\
["@quixos/control-plane-protocol", "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa"],\
["@quixos/package-runtime", "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-ts-package-runtime.git#commit=2cdd578848e9c6021689b9687355af9e0f6c8d69"],\
["dotenv", "npm:17.4.2"],\
["quixos-orchestrator", "workspace:."],\
@@ -36,6 +37,15 @@ const RAW_RUNTIME_STATE =
"linkType": "SOFT"\
}]\
]],\
["@quixos/control-plane-protocol", [\
["https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa", {\
"packageLocation": "../../.yarn/berry/cache/@quixos-control-plane-protocol-https-95332b7071-10c0.zip/node_modules/@quixos/control-plane-protocol/",\
"packageDependencies": [\
["@quixos/control-plane-protocol", "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa"]\
],\
"linkType": "HARD"\
}]\
]],\
["@quixos/package-runtime", [\
["https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-ts-package-runtime.git#commit=2cdd578848e9c6021689b9687355af9e0f6c8d69", {\
"packageLocation": "../../.yarn/berry/cache/@quixos-package-runtime-https-cb295881cd-10c0.zip/node_modules/@quixos/package-runtime/",\
@@ -163,6 +173,7 @@ const RAW_RUNTIME_STATE =
["workspace:.", {\
"packageLocation": "./",\
"packageDependencies": [\
["@quixos/control-plane-protocol", "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa"],\
["@quixos/package-runtime", "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-ts-package-runtime.git#commit=2cdd578848e9c6021689b9687355af9e0f6c8d69"],\
["dotenv", "npm:17.4.2"],\
["quixos-orchestrator", "workspace:."],\
Binary file not shown.
+1
View File
@@ -7,6 +7,7 @@
"start": "node --enable-source-maps server.ts"
},
"dependencies": {
"@quixos/control-plane-protocol": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa",
"@quixos/package-runtime": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-ts-package-runtime.git#commit=2cdd578848e9c6021689b9687355af9e0f6c8d69",
"dotenv": "^17.4.2",
"ws": "^8.18.3"
+1 -1
View File
@@ -72,7 +72,7 @@ import {
type ControlPlaneStatusResponse,
type ControlPlaneWorkspacePackage,
type ControlPlaneRuntimeErrorPhase,
} from "../quixos-control-plane-protocol/src/index.ts";
} from "@quixos/control-plane-protocol";
const ORCHESTRATOR_DIR = path.dirname(fileURLToPath(import.meta.url));
const ROOT_ENV_PATH = path.join(ORCHESTRATOR_DIR, "..", ".quixos-control.env");
+1 -1
View File
@@ -14,6 +14,6 @@
"verbatimModuleSyntax": true,
"types": ["node"]
},
"include": ["server.ts", "../quixos-control-plane-protocol/src/**/*.ts"],
"include": ["server.ts"],
"exclude": ["node_modules", ".yarn", "dist"]
}
+1 -1
View File
@@ -55,7 +55,7 @@ let
rm $out/.gitignore
'';
outputHashMode = "recursive";
outputHash = "sha512-35MN9GZJgYlrFE3zVMQuf5rG/ktQ/u+HmTk9lHhdg7UZyFrjfJWzHOJre9yEnSkwYwUYX/+HeWwLsWYaWCwR6A==";
outputHash = "sha512-BXkss4G9kUMhvV404CtBGUgnDzAdISNPsE7FtF0v1bFZfLjWkxkCsoOAvh6pbr8QmXBIwlFebd6eGPAUTM6Ylg==";
};
# Main project derivation.
+8
View File
@@ -5,6 +5,13 @@ __metadata:
version: 9
cacheKey: 10c0
"@quixos/control-plane-protocol@https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa":
version: 1.0.0
resolution: "@quixos/control-plane-protocol@https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa"
checksum: 10c0/01924da2f9f70fcb0e8c3598e626f55bb253773894443014e821e20c7365ce1c8724bdcd15087b362e09a29851288d5097b1072ceb922a56b94e4311725ff38d
languageName: node
linkType: hard
"@quixos/package-runtime@https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-ts-package-runtime.git#commit=2cdd578848e9c6021689b9687355af9e0f6c8d69":
version: 1.0.0
resolution: "@quixos/package-runtime@https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-ts-package-runtime.git#commit=2cdd578848e9c6021689b9687355af9e0f6c8d69"
@@ -111,6 +118,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "quixos-orchestrator@workspace:."
dependencies:
"@quixos/control-plane-protocol": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa"
"@quixos/package-runtime": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-ts-package-runtime.git#commit=2cdd578848e9c6021689b9687355af9e0f6c8d69"
dotenv: "npm:^17.4.2"
ws: "npm:^8.18.3"
+1 -1
View File
@@ -10,7 +10,7 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@quixos/control-plane-protocol": "file:../quixos-control-plane-protocol",
"@quixos/control-plane-protocol": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa",
"@remote-dom/core": "^1.10.1",
"qrcode": "^1.5.4",
"react": "^18.3.1",
+1 -1
View File
@@ -184,7 +184,7 @@ cacheEntries = {
"@jridgewell/resolve-uri@npm:3.1.2" = { filename = "@jridgewell-resolve-uri-npm-3.1.2-5bc4245992-d502e6fb51.zip"; hash = "sha512-1QLm+1FrNQMjMUBtTpYsIf53zfHL20nGFCvL2eMFBwlLGJcneKbifLrXViCc/jSxoncp5voIouuSszlD9oDPHg=="; };
"@jridgewell/sourcemap-codec@npm:1.5.5" = { filename = "@jridgewell-sourcemap-codec-npm-1.5.5-5189d9fc79-f9e538f302.zip"; hash = "sha512-+eU48wK2PA68Bu7LHdmRjdQontNhR6DdzjXW6k1+u9okPNp7IhO2peHYCHopjVz2MPsr05Mpzey4IBcCP2CBoA=="; };
"@jridgewell/trace-mapping@npm:0.3.31" = { filename = "@jridgewell-trace-mapping-npm-0.3.31-1ae81d75ac-4b30ec8cd5.zip"; hash = "sha512-SzDsjNVsX9mmYfCIIwrwHgwaOIjRH/trR2OXAPcSJb4h0ffhaASNbU+USSB7l4ojXAfI8VwHcFaF0W3AYoDp2Q=="; };
"@quixos/control-plane-protocol@file:../quixos-control-plane-protocol#../quixos-control-plane-protocol::hash=f0f687&locator=quixos-project-visualizer%40workspace%3A." = { filename = "@quixos-control-plane-protocol-file-f50f93332c-88fc86dd74.zip"; hash = "sha512-iPyG3XTXwkQlS+4WI9dhZ1VOhA5gtJfCDuOaj/yiyP2cSxr/4acbqNPG+CBlbyEUeyci8ALUtbAlN4ocNIkQ6w=="; };
"@quixos/control-plane-protocol@https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa" = { filename = "@quixos-control-plane-protocol-https-95332b7071-01924da2f9.zip"; hash = "sha512-AZJNovn3D8sOjDWY5ib1W7JTdziURDAU6CHiDHNlzhyHJL3NFQh7Ni4JophRKI1Ql7EHLOuSKla5TkMRcl/zjQ=="; };
"@remote-dom/core@npm:1.11.1" = { filename = "@remote-dom-core-npm-1.11.1-8bd9a831b0-c6432934e8.zip"; hash = "sha512-xkMpNOgxLTICQyn+LGB1s6ERd8mVCfw3yVTyjK9T4NkCTMFS+42401+NiiRmCDe5VMdMlQuEGJ5wR/Q3pWz9Jw=="; };
"@remote-dom/polyfill@npm:1.5.1" = { filename = "@remote-dom-polyfill-npm-1.5.1-02b868404f-753836a286.zip"; hash = "sha512-dTg2ooYhTprI1iRlAdTXgk/mAK5LScP+asVGeTS1oVrrD4Dnc/fHIZ+CmsV1i+B3Ro7ebaml3hQmDzYn/81uHw=="; };
"@rolldown/pluginutils@npm:1.0.0-beta.27" = { filename = "@rolldown-pluginutils-npm-1.0.0-beta.27-108701b3b0-9658f235b3.zip"; hash = "sha512-lljyNbNFIB1Pa/sfMtqXVMoWT4ktHLaBVP5fU8HfQr1nXs1AmDbf9GiEp4R9bAC9w4r4cPfIHgW7pcJkXrSrnA=="; };
+4 -4
View File
@@ -423,10 +423,10 @@ __metadata:
languageName: node
linkType: hard
"@quixos/control-plane-protocol@file:../quixos-control-plane-protocol::locator=quixos-project-visualizer%40workspace%3A.":
"@quixos/control-plane-protocol@https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa":
version: 1.0.0
resolution: "@quixos/control-plane-protocol@file:../quixos-control-plane-protocol#../quixos-control-plane-protocol::hash=f0f687&locator=quixos-project-visualizer%40workspace%3A."
checksum: 10c0/88fc86dd74d7c244254bee1623d76167554e840e60b497c20ee39a8ffca2c8fd9c4b1affe1a71ba8d3c6f820656f21147b2722f002d4b5b025378a1c348910eb
resolution: "@quixos/control-plane-protocol@https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa"
checksum: 10c0/01924da2f9f70fcb0e8c3598e626f55bb253773894443014e821e20c7365ce1c8724bdcd15087b362e09a29851288d5097b1072ceb922a56b94e4311725ff38d
languageName: node
linkType: hard
@@ -1289,7 +1289,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "quixos-project-visualizer@workspace:."
dependencies:
"@quixos/control-plane-protocol": "file:../quixos-control-plane-protocol"
"@quixos/control-plane-protocol": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/control-plane-protocol.git#commit=d8f0421d230e35b605260d310dfd8eb22f9252fa"
"@remote-dom/core": "npm:^1.10.1"
"@types/qrcode": "npm:^1"
"@types/react": "npm:^18.3.12"
-20
View File
@@ -1,20 +0,0 @@
{
description = "Shared Quixos control-plane protocol types";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { nixpkgs, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
in {
devShells.default = pkgs.mkShell {
packages = [
pkgs.nodejs_24
];
};
});
}
@@ -1,13 +0,0 @@
{
"name": "@quixos/control-plane-protocol",
"version": "1.0.0",
"private": true,
"type": "module",
"main": "./src/index.ts",
"exports": {
".": "./src/index.ts"
},
"scripts": {
"typecheck": "node --check src/index.ts"
}
}
File diff suppressed because it is too large Load Diff
@@ -1,19 +0,0 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"lib": ["ES2022"],
"strict": true,
"noEmit": true,
"allowImportingTsExtensions": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"skipLibCheck": true,
"resolveJsonModule": true,
"verbatimModuleSyntax": true,
"types": ["node"]
},
"include": ["src/**/*.ts"],
"exclude": ["node_modules", ".yarn", "dist"]
}
+3 -1
View File
@@ -128,7 +128,9 @@ cat > /etc/nixos/flake.nix <<'EOF'
system = "aarch64-linux";
modules = [
quixos.nixosModules.quixosHost
({ ... }: {
({ modulesPath, ... }: {
imports = [ "$${modulesPath}/virtualisation/amazon-image.nix" ];
networking.hostName = "quixos";
users.users."${admin_user}" = {