145 lines
4.1 KiB
Nix
145 lines
4.1 KiB
Nix
{
|
|
description = "CraftAttack website development environment";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
|
|
flake-parts.url = "github:hercules-ci/flake-parts";
|
|
|
|
process-compose-flake.url = "github:Platonic-Systems/process-compose-flake";
|
|
|
|
services-flake.url = "github:juspay/services-flake";
|
|
};
|
|
|
|
outputs =
|
|
inputs:
|
|
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
|
|
systems = [ "x86_64-linux" ];
|
|
|
|
imports = [ inputs.process-compose-flake.flakeModule ];
|
|
|
|
perSystem =
|
|
{
|
|
self',
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}:
|
|
let
|
|
dbPort = 3306;
|
|
webPort = 4321;
|
|
webBasePath = "/craftattack";
|
|
dbName = "website";
|
|
dbUser = "website";
|
|
dbPassword = "website";
|
|
|
|
devEnv = {
|
|
START_DATE = "2026-12-27T14:00:00";
|
|
|
|
DATABASE_URI = "mysql://${dbUser}:${dbPassword}@localhost:${toString dbPort}/${dbName}";
|
|
|
|
ADMIN_USER = "admin";
|
|
ADMIN_PASSWORD = "admin";
|
|
ADMIN_COOKIE = "muelleel";
|
|
|
|
UPLOAD_PATH = "./.data/uploads";
|
|
VIDEO_PATH = "./.data/videos";
|
|
|
|
TEAMSPEAK_LINK = "http://example.com";
|
|
DISCORD_LINK = "http://example.com";
|
|
PAYPAL_LINK = "http://example.com";
|
|
SERVER_IP = "example.com";
|
|
|
|
ROOT_URL = "http://localhost:${toString webPort}${webBasePath}";
|
|
};
|
|
|
|
webRun = pkgs.writeShellApplication {
|
|
name = "web-run";
|
|
runtimeInputs = [
|
|
pkgs.nodejs_26
|
|
pkgs.curl
|
|
];
|
|
text = ''
|
|
if [ ! -d node_modules ] || [ package-lock.json -nt node_modules/.package-lock.json ]; then
|
|
npm ci
|
|
fi
|
|
|
|
exec npm run dev
|
|
'';
|
|
};
|
|
in
|
|
{
|
|
process-compose.dev = {
|
|
imports = [ inputs.services-flake.processComposeModules.default ];
|
|
|
|
cli.preHook = "mkdir -p .data/uploads .data/videos .data/logs";
|
|
|
|
defaults.processSettings = { name, ... }: {
|
|
availability.restart = lib.mkDefault "on_failure";
|
|
availability.max_restarts = lib.mkDefault 5;
|
|
log_location = lib.mkDefault ".data/logs/${name}.log";
|
|
};
|
|
|
|
settings.environment = devEnv;
|
|
|
|
services.mysql.db = {
|
|
enable = true;
|
|
package = pkgs.mariadb;
|
|
dataDir = "./.data/mariadb";
|
|
settings.mysqld = {
|
|
port = dbPort;
|
|
"bind-address" = "127.0.0.1";
|
|
};
|
|
initialDatabases = [
|
|
{
|
|
name = dbName;
|
|
schema = ./src/db/database.sql;
|
|
}
|
|
];
|
|
ensureUsers = [
|
|
{
|
|
name = dbUser;
|
|
password = dbPassword;
|
|
ensurePermissions = {
|
|
"${dbName}.*" = "ALL PRIVILEGES";
|
|
};
|
|
}
|
|
];
|
|
};
|
|
|
|
settings.processes.web = {
|
|
description = "CraftAttack website (Astro dev server)";
|
|
command = webRun;
|
|
depends_on."db-configure".condition = "process_completed_successfully";
|
|
readiness_probe.http_get = {
|
|
host = "127.0.0.1";
|
|
port = webPort;
|
|
path = webBasePath;
|
|
};
|
|
};
|
|
};
|
|
|
|
devShells.default = pkgs.mkShell {
|
|
packages = [
|
|
pkgs.nodejs_26
|
|
pkgs.mariadb
|
|
pkgs.curl
|
|
self'.packages.dev
|
|
pkgs.nixfmt
|
|
];
|
|
|
|
env = devEnv;
|
|
|
|
shellHook = ''
|
|
mkdir -p .data/uploads
|
|
echo "CraftAttack dev shell: run \`dev\` (or \`nix run .#dev\`) to start MariaDB + Astro." >&2
|
|
echo "MariaDB: mysql://${dbUser}:${dbPassword}@localhost:${toString dbPort}/${dbName}" >&2
|
|
echo "Reset database: rm -rf .data" >&2
|
|
'';
|
|
};
|
|
|
|
formatter = pkgs.nixfmt;
|
|
};
|
|
};
|
|
}
|