/ flake.nix
flake.nix
 1  {
 2    inputs = {
 3      nixpkgs.url = "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz";
 4  
 5      treefmt-nix.url = "github:numtide/treefmt-nix";
 6      treefmt-nix.inputs.nixpkgs.follows = "nixpkgs";
 7    };
 8  
 9    outputs = {
10      self,
11      nixpkgs,
12      treefmt-nix,
13      ...
14    }: let
15      inherit (nixpkgs) lib;
16      inherit (lib.attrsets) genAttrs mapAttrs' nameValuePair;
17  
18      systems = ["x86_64-linux" "aarch64-linux"];
19      forAllSystems = genAttrs systems;
20      nixpkgsFor = forAllSystems (system: nixpkgs.legacyPackages.${system});
21      treefmtFor = forAllSystems (system: treefmt-nix.lib.evalModule nixpkgsFor.${system} ./treefmt.nix);
22  
23      package = import ./nix/package.nix;
24    in {
25      packages = forAllSystems (system: let
26        pkgs = nixpkgsFor.${system};
27        avahi-subdomains = pkgs.callPackage package {};
28      in {
29        default = avahi-subdomains;
30        inherit avahi-subdomains;
31      });
32  
33      overlays.default = _: prev: {avahi-subdomains = prev.callPackage package {};};
34  
35      nixosModules.default = import ./nix/module.nix;
36  
37      devShells = forAllSystems (system: let
38        pkgs = nixpkgsFor.${system};
39      in {
40        default = pkgs.mkShellNoCC {
41          inputsFrom = [self.packages.${system}.avahi-subdomains];
42        };
43      });
44  
45      formatter = forAllSystems (system: treefmtFor.${system}.config.build.wrapper);
46  
47      checks = forAllSystems (system: let
48        packages = mapAttrs' (n: nameValuePair "package-${n}") self.packages.${system};
49        devShells = mapAttrs' (n: nameValuePair "devShell-${n}") self.devShells.${system};
50        formatting = {formatting = treefmtFor.${system}.config.build.check self;};
51      in
52        packages // devShells // formatting);
53    };
54  }