flake-update-diff/flake.nix

167 lines
4.8 KiB
Nix
Raw Normal View History

{
description = "Application packaged using poetry2nix";
2024-07-28 15:30:18 -04:00
nixConfig = {
substituters = [
"https://cache.nixos.org/?priority=1&want-mass-query=true"
2025-04-06 22:55:35 -04:00
#"https://attic.nayeonie.com/nix-cache"
2024-07-28 15:30:18 -04:00
"https://nix-community.cachix.org/?priority=10&want-mass-query=true"
];
trusted-substituters = [
"https://cache.nixos.org"
"https://attic.nayeonie.com/nix-cache"
2024-07-28 15:30:18 -04:00
"https://nix-community.cachix.org"
];
trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"nix-cache:trR+y5nwpQHR4hystoogubFmp97cewkjWeqqbygRQRs="
2024-07-28 15:30:18 -04:00
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
2025-04-03 08:20:20 -04:00
fallback = true;
2024-07-28 15:30:18 -04:00
};
inputs = {
flake-utils.url = "github:numtide/flake-utils";
2025-03-18 15:31:05 -04:00
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable-small";
pre-commit-hooks = {
url = "github:cachix/pre-commit-hooks.nix";
inputs = {
nixpkgs.follows = "nixpkgs";
# nixpkgs-stable.follows = "nixpkgs-stable";
# flake-compat.follows = "flake-compat";
};
};
pyproject-nix = {
url = "github:pyproject-nix/pyproject.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
uv2nix = {
url = "github:pyproject-nix/uv2nix";
inputs = {
nixpkgs.follows = "nixpkgs";
pyproject-nix.follows = "pyproject-nix";
};
};
pyproject-build-systems = {
url = "github:pyproject-nix/build-system-pkgs";
inputs = {
nixpkgs.follows = "nixpkgs";
pyproject-nix.follows = "pyproject-nix";
uv2nix.follows = "uv2nix";
};
};
};
outputs =
{
self,
nixpkgs,
flake-utils,
uv2nix,
pyproject-nix,
pyproject-build-systems,
...
}@inputs:
flake-utils.lib.eachDefaultSystem (
system:
let
inherit (nixpkgs) lib;
# Load a uv workspace from a workspace root.
# Uv2nix treats all uv projects as workspace projects.
workspace = uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./.; };
# Create package overlay from workspace.
overlay = workspace.mkPyprojectOverlay {
# Prefer prebuilt binary wheels as a package source.
# Sdists are less likely to "just work" because of the metadata missing from uv.lock.
# Binary wheels are more likely to, but may still require overrides for library dependencies.
sourcePreference = "wheel";
#sourcePreference = "sdist";
# Optionally customise PEP 508 environment
# environ = {
# platform_release = "5.10.65";
# };
};
# Extend generated overlay with build fixups
#
# Uv2nix can only work with what it has, and uv.lock is missing essential metadata to perform some builds.
# This is an additional overlay implementing build fixups.
# See:
# - https://pyproject-nix.github.io/uv2nix/FAQ.html
pyprojectOverrides = _final: _prev: {
# Implement build fixups here.
# Note that uv2nix is _not_ using Nixpkgs buildPythonPackage.
# It's using https://pyproject-nix.github.io/pyproject.nix/build.html
};
# This example is only using x86_64-linux
pkgs = nixpkgs.legacyPackages.${system};
# Use Python 3.12 from nixpkgs
python = pkgs.python312;
# Construct package set
pythonSet =
# Use base package set from pyproject.nix builders
(pkgs.callPackage pyproject-nix.build.packages {
inherit python;
}).overrideScope
(
lib.composeManyExtensions [
pyproject-build-systems.overlays.default
overlay
pyprojectOverrides
]
);
uv-shell = import ./uv-shell.nix {
inherit
lib
pkgs
python
workspace
pythonSet
;
};
in
rec {
# Package a virtual environment as our main application.
#
# Enable no optional dependencies for production build.
packages = rec {
flupdt = pythonSet.mkVirtualEnv "flupdt-env" workspace.deps.default;
default = flupdt;
};
# Make hello runnable with `nix run`
apps = {
default = {
type = "app";
program = "${packages.default}/bin/flupdt";
};
};
formatter = pkgs.nixfmt-rfc-style;
devShells = import ./shell.nix {
inherit
self
pkgs
inputs
system
checks
uv-shell
;
};
checks = import ./checks.nix { inherit inputs system formatter; };
}
)
// {
hydraJobs = import ./hydra/jobs.nix { inherit (self) inputs outputs; };
};
}