Files
fin-tracker/flake.nix
T
Dmitry ffc5ed959a feat(app): offline-кэш GET-запросов на дашборде — фаза 5
CacheInterceptor кэширует каждый успешный GET по путь+параметры в drift
(sqlite нативно, wasm+OPFS в браузере) и подменяет им сетевую ошибку;
провайдер отдаёт Cached<T>, экран показывает баннер «данные на …».
Контракт для остальных экранов — docs/ai/offline-cache.md.

flake.nix: libsecret/pkg-config для линуксовой сборки, jq/curl для
just app-web-assets (сборка sqlite3.wasm + drift_worker.js).
2026-09-19 12:40:08 +03:00

65 lines
2.3 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`
pkgs.jq # `just app-web-assets` reads package_config.json / pub deps
pkgs.curl # `just app-web-assets` fetches sqlite3.wasm from GitHub releases
];
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
# Linux desktop build: flutter_secure_storage_linux links libsecret via pkg-config
pkgs.pkg-config
pkgs.libsecret
];
shellHook = commonHook;
};
};
};
}