sort-of-pastebin/flake.nix

123 lines
3.7 KiB
Nix

{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
devenv.url = "github:cachix/devenv";
poetry2nix = {
url = "github:nix-community/poetry2nix";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-utils.url = "github:numtide/flake-utils";
};
outputs =
{
self,
nixpkgs,
devenv,
flake-utils,
poetry2nix,
}@inputs:
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
poetry2nix = inputs.poetry2nix.lib.mkPoetry2Nix { inherit pkgs; };
python = pkgs.python312;
overrides = poetry2nix.defaultPoetryOverrides.extend (
self: super: {
cryptography = super.cryptography.overridePythonAttrs (old: rec {
cargoDeps = pkgs.rustPlatform.fetchCargoTarball {
inherit (old) src;
name = "${old.pname}-${old.version}";
sourceRoot = "${old.pname}-${old.version}/${cargoRoot}";
sha256 = "sha256-qaXQiF1xZvv4sNIiR2cb5TfD7oNiYdvUwcm37nh2P2M=";
};
cargoRoot = "src/rust";
});
}
);
application = poetry2nix.mkPoetryApplication {
projectDir = ./.;
inherit overrides;
inherit python;
};
env = poetry2nix.mkPoetryEnv {
projectDir = ./.;
groups = [ "dev" ];
editablePackageSources = {
snapbin = ./snapbin;
};
inherit overrides;
inherit python;
};
tests = pkgs.writeShellScriptBin "python-test" ''
trap "process-compose down &> /dev/null" EXIT
process-compose up --tui=false &
pytest --cov=snapbin tests.py
'';
in
{
packages = {
snapbin-image = pkgs.dockerTools.buildImage {
name = "snapbin";
tag = "latest";
copyToRoot = pkgs.buildEnv {
name = "image-root";
paths = [ application.dependencyEnv ];
};
config = {
Cmd = [
"${application.dependencyEnv}/bin/gunicorn"
"--bind=0.0.0.0"
"snapbin.main:app"
];
};
};
redis-image = pkgs.dockerTools.buildImage {
name = "redis";
tag = "latest";
copyToRoot = pkgs.buildEnv {
name = "image-root";
paths = [ pkgs.redis ];
};
config = {
Cmd = [ "${pkgs.redis}/bin/redis-server" ];
};
};
};
devShells =
let
config = self.devShells.${system}.default.config;
in
{
default = devenv.lib.mkShell {
inherit inputs pkgs;
modules = [
{
env = {
NO_SSL = "True";
PC_PORT_NUM = "9999";
};
enterShell = ''
ln -sf ${config.process-managers.process-compose.configFile} ${config.env.DEVENV_ROOT}/process-compose.yml
'';
packages = [
env
tests
];
process-managers.process-compose.enable = true;
processes = {
webserver = {
process-compose.depends_on.redis.condition = "process_started";
exec = "gunicorn snapbin.main:app";
};
};
services.redis.enable = true;
}
];
};
};
}
);
}