Files
Oxicloud/devenv.nix
T

63 lines
2.0 KiB
Nix
Raw Normal View History

2026-06-16 13:51:51 -06:00
{ pkgs, lib, config, ... }:
{
languages.rust = {
enable = true;
channel = "stable"; # edition 2024 needs a recent stable (CLAUDE.md: Rust 1.93+)
components = [ "rustc" "cargo" "clippy" "rustfmt" "rust-analyzer" "rust-src" ];
2026-06-16 17:57:57 -06:00
# wasm32 std for building the WASM plugin fixtures and the vendored BLAKE3
# module (scripts/build-plugin-hello.sh, scripts/build-wasm.sh). Only needed
# to *rebuild* those committed artifacts, not for normal server builds/tests.
targets = [ "wasm32-unknown-unknown" ];
2026-06-16 13:51:51 -06:00
};
# Native build deps + the full justfile toolchain.
packages = with pkgs; [
pkg-config
openssl
git
# task runner + Rust extras
just
cargo-audit
# frontend tooling (no root package.json — these are expected as global bins)
nodejs_22
biome
typescript # provides `tsc`
stylelint
# helper scripts (tools/check-icons.py, tools/check-missing-translations.py)
python3
# API/WebDAV functional tests + the DB-readiness probe in tests/common/spawn-db.sh
hurl
netcat-gnu # provides `nc`
];
# Dev Postgres on :5432, matching DATABASE_URL in example.env
# (postgres://postgres:postgres@localhost:5432/oxicloud).
services.postgres = {
enable = true;
listen_addresses = "127.0.0.1";
port = 5432;
initialDatabases = [ { name = "oxicloud"; } ];
# devenv's bootstrap superuser is the OS user with trust auth, so the
# password is not actually checked — but the `postgres` role must exist
# for the DATABASE_URL above to connect. Extensions per CLAUDE.md.
initialScript = ''
CREATE ROLE postgres SUPERUSER LOGIN PASSWORD 'postgres';
\connect oxicloud
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE EXTENSION IF NOT EXISTS ltree;
'';
};
# Load .env (justfile uses `set dotenv-load`); contributor should `cp example.env .env`.
dotenv.enable = true;
enterShell = ''
echo "OxiCloud dev env — Rust $(rustc --version | cut -d' ' -f2), Node $(node --version), Postgres on :5432"
'';
}