Files
policy-ui/flake.nix
2026-04-15 12:35:50 -05:00

98 lines
2.1 KiB
Nix

{
description = "policy-ui - Policy management dashboard";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
lib = pkgs.lib;
pname = "policy-ui";
version = "1.0.0";
pnpmDeps = pkgs.fetchPnpmDeps {
inherit pname version;
src = lib.cleanSource ./.;
pnpm = pkgs.pnpm;
fetcherVersion = 3;
hash = "sha256-v1vdqb3ruLB9vvPzxjT+11W4jG/MvoCPVXZPHHE9eGs=";
};
policy-ui = pkgs.stdenv.mkDerivation {
inherit pname version;
src = lib.cleanSource ./.;
nativeBuildInputs = [
pkgs.pnpmConfigHook
pkgs.pnpm
pkgs.nodejs
];
inherit pnpmDeps;
buildPhase = ''
runHook preBuild
export NUXT_TELEMETRY_DISABLED=1
pnpm build
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r ./.output $out/
runHook postInstall
'';
};
dockerImage = pkgs.dockerTools.buildLayeredImage {
name = "policy-ui";
contents = [
policy-ui
pkgs.busybox
pkgs.shadow
];
config = {
Cmd = [
"${pkgs.nodejs}/bin/node"
"${policy-ui}/.output/server/index.mjs"
];
Env = [
"HOST=0.0.0.0"
"PORT=3000"
"NODE_ENV=production"
];
};
};
in
{
packages = {
default = policy-ui;
inherit policy-ui;
dockerImage = dockerImage;
};
devShell =
pkgs.mkShell {
buildInputs = with pkgs; [
nodejs
vue-language-server
pnpm
];
};
}
);
}