|
21 | 21 | };
|
22 | 22 | };
|
23 | 23 |
|
24 |
| - outputs = { |
25 |
| - self, |
26 |
| - nixpkgs, |
27 |
| - flake-utils, |
28 |
| - uv2nix, |
29 |
| - pyproject-nix, |
30 |
| - pyproject-build-systems, |
31 |
| - ... |
32 |
| - }: |
| 24 | + outputs = |
| 25 | + { |
| 26 | + self, |
| 27 | + nixpkgs, |
| 28 | + flake-utils, |
| 29 | + uv2nix, |
| 30 | + pyproject-nix, |
| 31 | + pyproject-build-systems, |
| 32 | + ... |
| 33 | + }: |
33 | 34 | flake-utils.lib.eachDefaultSystem (
|
34 |
| - system: let |
35 |
| - pkgs = import nixpkgs {inherit system;}; |
36 |
| - nixTools = with pkgs; [alejandra deadnix statix]; |
37 |
| - pyTools = with pkgs; [black ruff uv]; |
| 35 | + system: |
| 36 | + let |
| 37 | + pkgs = import nixpkgs { inherit system; }; |
| 38 | + nixTools = with pkgs; [ |
| 39 | + deadnix |
| 40 | + nixfmt-rfc-style |
| 41 | + statix |
| 42 | + ]; |
| 43 | + pyTools = with pkgs; [ |
| 44 | + black |
| 45 | + ruff |
| 46 | + uv |
| 47 | + ]; |
38 | 48 | python = pkgs.python313; # NOTE: Keep in-sync with pyproject.toml.
|
39 |
| - devPkgs = [python] ++ pyTools ++ nixTools ++ (with pkgs; [just pre-commit]); |
40 |
| - ciPkgs = [python] ++ pyTools ++ nixTools ++ (with pkgs; [just skopeo]); |
| 49 | + devPkgs = [ |
| 50 | + python |
| 51 | + ] |
| 52 | + ++ pyTools |
| 53 | + ++ nixTools |
| 54 | + ++ (with pkgs; [ |
| 55 | + just |
| 56 | + pre-commit |
| 57 | + ]); |
| 58 | + ciPkgs = [ |
| 59 | + python |
| 60 | + ] |
| 61 | + ++ pyTools |
| 62 | + ++ nixTools |
| 63 | + ++ (with pkgs; [ |
| 64 | + just |
| 65 | + skopeo |
| 66 | + ]); |
41 | 67 |
|
42 |
| - |
43 |
| - workspace = uv2nix.lib.workspace.loadWorkspace {workspaceRoot = ./.;}; |
44 |
| - overlay = workspace.mkPyprojectOverlay {sourcePreference = "wheel";}; |
45 |
| - pythonSet = (pkgs.callPackage pyproject-nix.build.packages {inherit python;}).overrideScope ( |
46 |
| - nixpkgs.lib.composeManyExtensions [pyproject-build-systems.overlays.default overlay] |
| 68 | + workspace = uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./.; }; |
| 69 | + overlay = workspace.mkPyprojectOverlay { sourcePreference = "wheel"; }; |
| 70 | + pythonSet = (pkgs.callPackage pyproject-nix.build.packages { inherit python; }).overrideScope ( |
| 71 | + nixpkgs.lib.composeManyExtensions [ |
| 72 | + pyproject-build-systems.overlays.default |
| 73 | + overlay |
| 74 | + ] |
47 | 75 | );
|
48 | 76 | venvCI = pythonSet.mkVirtualEnv "volt-env-ci" workspace.deps.all;
|
49 | 77 | venvRelease = pythonSet.mkVirtualEnv "volt-env-release" workspace.deps.optionals;
|
50 |
| - app = (pkgs.callPackages pyproject-nix.build.util {}).mkApplication { |
| 78 | + app = (pkgs.callPackages pyproject-nix.build.util { }).mkApplication { |
51 | 79 | venv = venvRelease;
|
52 | 80 | package = pythonSet.volt;
|
53 | 81 | };
|
54 |
| - in { |
| 82 | + in |
| 83 | + { |
55 | 84 | apps = {
|
56 | 85 | default = {
|
57 | 86 | type = "app";
|
58 | 87 | program = "${venvRelease}/bin/${app.pname}";
|
59 | 88 | };
|
60 | 89 | };
|
61 | 90 | devShells = {
|
62 |
| - ci = pkgs.mkShellNoCC {packages = ciPkgs ++ [venvCI];}; |
| 91 | + ci = pkgs.mkShellNoCC { packages = ciPkgs ++ [ venvCI ]; }; |
63 | 92 | default = pkgs.mkShell rec {
|
64 |
| - nativeBuildInputs = [python.pkgs.venvShellHook]; |
| 93 | + nativeBuildInputs = [ python.pkgs.venvShellHook ]; |
65 | 94 | packages = devPkgs;
|
66 | 95 | env = {
|
67 | 96 | UV_PYTHON_DOWNLOADS = "never";
|
|
79 | 108 | '';
|
80 | 109 | };
|
81 | 110 | };
|
82 |
| - formatter = pkgs.alejandra; |
83 |
| - packages = let |
84 |
| - readFileOr = path: default: |
85 |
| - with builtins; |
86 |
| - if pathExists path |
87 |
| - then (readFile path) |
88 |
| - else default; |
89 |
| - imgTag = |
90 |
| - if app.version != "0.0.dev0" |
91 |
| - then app.version |
92 |
| - else "latest"; |
93 |
| - imgAttrs = rec { |
94 |
| - name = "ghcr.io/bow/${app.pname}"; |
95 |
| - tag = imgTag; |
96 |
| - contents = [app]; |
97 |
| - config = { |
98 |
| - Entrypoint = ["/bin/${app.pname}"]; |
99 |
| - Labels = { |
100 |
| - "org.opencontainers.image.revision" = readFileOr "${self}/.rev" ""; |
101 |
| - "org.opencontainers.image.source" = "https://github.com/bow/${app.pname}"; |
102 |
| - "org.opencontainers.image.title" = "${app.pname}"; |
103 |
| - "org.opencontainers.image.url" = "https://${name}"; |
| 111 | + formatter = pkgs.nixfmt-rfc-style; |
| 112 | + packages = |
| 113 | + let |
| 114 | + readFileOr = path: default: with builtins; if pathExists path then (readFile path) else default; |
| 115 | + imgTag = if app.version != "0.0.dev0" then app.version else "latest"; |
| 116 | + imgAttrs = rec { |
| 117 | + name = "ghcr.io/bow/${app.pname}"; |
| 118 | + tag = imgTag; |
| 119 | + contents = [ app ]; |
| 120 | + config = { |
| 121 | + Entrypoint = [ "/bin/${app.pname}" ]; |
| 122 | + Labels = { |
| 123 | + "org.opencontainers.image.revision" = readFileOr "${self}/.rev" ""; |
| 124 | + "org.opencontainers.image.source" = "https://github.com/bow/${app.pname}"; |
| 125 | + "org.opencontainers.image.title" = "${app.pname}"; |
| 126 | + "org.opencontainers.image.url" = "https://${name}"; |
| 127 | + }; |
104 | 128 | };
|
105 | 129 | };
|
| 130 | + in |
| 131 | + { |
| 132 | + default = venvRelease; |
| 133 | + dockerArchive = pkgs.dockerTools.buildLayeredImage imgAttrs; |
| 134 | + dockerArchiveStreamer = pkgs.dockerTools.streamLayeredImage imgAttrs; |
106 | 135 | };
|
107 |
| - in { |
108 |
| - default = venvRelease; |
109 |
| - dockerArchive = pkgs.dockerTools.buildLayeredImage imgAttrs; |
110 |
| - dockerArchiveStreamer = pkgs.dockerTools.streamLayeredImage imgAttrs; |
111 |
| - }; |
112 | 136 | }
|
113 | 137 | );
|
114 | 138 | }
|
0 commit comments