summary refs log tree commit diff
path: root/flake.nix
blob: 8df10392392355b6ce1df83c5b97965807e00b0f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
{
  description = ''
    A tool to manage credentials and other secrets as mutable state within a NixOS environment,
    consisting of a Rust executable, NixOS configuration, and associated documentation.
    Published as part of the Small Tech Kit, ISL's public resource for small organizations
    that want to host their own infrastructure, but usable independently.
  '';

  inputs = {
    nixpkgs = {
      type = "github";
      owner = "NixOS";
      repo = "nixpkgs";
      ref = "nixos-25.05";
    };

    crane = {
      type = "github";
      owner = "ipetkov";
      repo = "crane";
    };
  };

  outputs = { self, nixpkgs, crane }:
  let supportedSystems = [ "aarch64-linux" "x86_64-linux" ];
      forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
      nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; });
  in {
    nixosModules.default = { ... }: {
      imports = [
        ./options.nix
      ];
    };

    packages = forAllSystems (system: let pkgs = nixpkgsFor.${system}; in {
      default = (crane.mkLib pkgs).buildPackage {
        src = ./.;
      };
    });

    devShells = forAllSystems (system: let pkgs = nixpkgsFor.${system}; in {
      default = pkgs.mkShell {
        nativeBuildInputs = with pkgs; [
          cargo
          rustc
        ];
      };
    });

    checks = forAllSystems (system:
        let pkgs = nixpkgsFor.${system};
            mkNixEvalCheck = name: input: expected: pkgs.stdenv.mkDerivation {
              name = "smalltech-nix-test-${name}";

              src = pkgs.symlinkJoin {
                name = "smalltech-nix-test-${name}-src";
                paths = [
                  (pkgs.writeTextDir "input" input)
                  (pkgs.writeTextDir "expected" "${expected}\n")
                ];
              };

              dontUnpack = true;

              nativeBuildInputs = with pkgs; [ diffutils nix ];

              buildPhase = ''
                mkdir nix-store
                ${pkgs.nix}/bin/nix \
                    --extra-experimental-features nix-command \
                    --store dummy:// \
                    eval --json --file $src/input > $out

                if ! ${pkgs.diffutils}/bin/diff $src/expected $out; then
                  echo
                  echo "This is a nix evaluation test case. The expected eval"
                  echo "output differed from the actual output. In an ideal"
                  echo "world, the above diff would help you understand why."
                  echo
                  false
                fi
              '';
            };
        in {
          nix-trivial = mkNixEvalCheck "trivial" "1 + 2" "3";

          rust = self.packages.${system}.default;
        });
  };
}