Nix flake на два шелла (backend и + Flutter), justfile как единая точка входа, локальный Postgres в ./.pgdata на порту 54329, docker-compose из пяти сервисов (db, api, worker, caddy, pg-backup) и CI на ruff/pyright/pytest + дрейф OpenAPI. Российские корневые сертификаты лежат в репозитории: они публичные, но нужны и Caddy, и gRPC-каналу T-Invest, а глобальный gitignore отбрасывает *.pem.
58 lines
2.0 KiB
Nix
58 lines
2.0 KiB
Nix
{
|
|
description = "fin-tracker — personal finance + investment analytics";
|
|
|
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
|
|
outputs = { self, nixpkgs }:
|
|
let
|
|
system = "x86_64-linux";
|
|
pkgs = import nixpkgs { inherit system; };
|
|
python = pkgs.python312;
|
|
|
|
# manylinux wheels pulled by uv (grpcio for T-Invest, asyncpg, polars, …)
|
|
# dlopen these at runtime. nix-ld is enabled system-wide; we only extend
|
|
# its search path (never overwrite — keeps direnv diffs sane).
|
|
runtimeLibs = pkgs.lib.makeLibraryPath [
|
|
pkgs.stdenv.cc.cc.lib # libstdc++.so.6
|
|
pkgs.zlib
|
|
pkgs.openssl
|
|
];
|
|
|
|
backendTools = [
|
|
python
|
|
pkgs.uv
|
|
pkgs.just
|
|
pkgs.postgresql_17 # local dev cluster (`just db-start`) and psql
|
|
pkgs.openapi-generator-cli # `just gen-client`
|
|
];
|
|
|
|
commonHook = ''
|
|
export UV_PYTHON="${python}/bin/python3"
|
|
export UV_PYTHON_DOWNLOADS=never
|
|
export NIX_LD_LIBRARY_PATH="${runtimeLibs}''${NIX_LD_LIBRARY_PATH:+:$NIX_LD_LIBRARY_PATH}"
|
|
export LD_LIBRARY_PATH="${runtimeLibs}''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
|
# T-Invest gRPC must not go through a local SOCKS/HTTP proxy
|
|
export no_proxy="invest-public-api.tbank.ru,.tbank.ru,invest-public-api.tinkoff.ru,.tinkoff.ru,localhost,127.0.0.1''${no_proxy:+,$no_proxy}"
|
|
export NO_PROXY="$no_proxy"
|
|
export PGDATA="$PWD/.pgdata"
|
|
export PGHOST="$PWD/.pgdata"
|
|
export PGPORT=54329
|
|
'';
|
|
in {
|
|
devShells.${system} = {
|
|
# backend only — fast to enter
|
|
default = pkgs.mkShell {
|
|
packages = backendTools;
|
|
shellHook = commonHook + ''
|
|
echo "fin-tracker: 'just --list' for recipes; 'nix develop .#app' adds Flutter"
|
|
'';
|
|
};
|
|
# backend + Flutter toolchain (large download on first use)
|
|
app = pkgs.mkShell {
|
|
packages = backendTools ++ [ pkgs.flutter ];
|
|
shellHook = commonHook;
|
|
};
|
|
};
|
|
};
|
|
}
|