evolive/default.nix
raito 9c6d4e5f04 feat: init project
Signed-off-by: Raito Bezarius <masterancpp@gmail.com>
2024-09-03 14:47:36 +02:00

116 lines
3.1 KiB
Nix

{
sources ? import ./npins,
overlay ? import ./nix/overlay.nix,
pkgs ? import sources.nixpkgs { overlays = [ overlay ]; },
}:
let
self = rec {
inherit (pkgs) python3;
package = pkgs.evolive;
pre-commit-check = pkgs.pre-commit-hooks {
src = ./.;
hooks =
let
pythonExcludes = [
"/migrations/" # auto-generated code
];
in
{
# Nix setup
nixfmt = {
enable = true;
entry = pkgs.lib.mkForce "${pkgs.lib.getExe pkgs.nixfmt-rfc-style}";
};
statix = {
enable = true;
settings.ignore = [ "npins" ];
};
# Python setup
ruff = {
enable = true;
excludes = pythonExcludes;
};
ruff-format = {
enable = true;
name = "Format python code with ruff";
types = [
"text"
"python"
];
entry = "${pkgs.lib.getExe pkgs.ruff} format";
excludes = pythonExcludes;
};
pyright =
let
pyEnv = pkgs.python3.buildEnv.override {
extraLibs = pkgs.evolive.propagatedBuildInputs;
# Necessary for FastAPI CLI.
ignoreCollisions = true;
};
wrappedPyright = pkgs.runCommand "pyright" { nativeBuildInputs = [ pkgs.makeWrapper ]; } ''
makeWrapper ${pkgs.pyright}/bin/pyright $out \
--set PYTHONPATH ${pyEnv}/${pyEnv.sitePackages} \
--prefix PATH : ${pyEnv}/bin \
--set PYTHONHOME ${pyEnv}
'';
in
{
enable = true;
entry = pkgs.lib.mkForce (builtins.toString wrappedPyright);
excludes = pythonExcludes;
};
# Global setup
prettier = {
enable = true;
excludes = [
"\\.min.css$"
"\\.html$"
];
};
commitizen.enable = true;
};
};
shell = pkgs.mkShell {
DATA_CACHE_DIRECTORY = toString ./. + "/.data_cache";
REDIS_SOCKET_URL = "unix:///run/redis/redis.sock";
# `./src/website/tracker/settings.py` by default looks for LOCAL_NIXPKGS_CHECKOUT
# in the root of the repo. Make it the default here for local development.
LOCAL_NIXPKGS_CHECKOUT = toString ./. + "/nixpkgs";
packages = [
package
# (pkgs.python3.buildEnv.override {
# extraLibs = with pkgs.python3.pkgs; [ fastapi uvicorn ];
# ignoreCollisions = true;
# })
pkgs.nix-eval-jobs
pkgs.commitizen
pkgs.npins
pkgs.nixfmt-rfc-style
pkgs.hivemind
];
shellHook = ''
${pre-commit-check.shellHook}
mkdir -p .credentials
export DATABASE_URL=postgres:///evolive
export CREDENTIALS_DIRECTORY=${builtins.toString ./.credentials}
'';
};
# tests = import ./nix/tests/vm-basic.nix {
# inherit pkgs;
# wstModule = module;
# };
};
in
self # // self.tests