aboutsummaryrefslogtreecommitdiffstats
path: root/flake.nix
blob: 14cc8de2d5082a1fffb0dd43b16227936b271593 (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
{
  description = "Sakura's flakes";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";

    flake-parts = {
      url = "github:hercules-ci/flake-parts";
    };

    treefmt-nix.url = "github:numtide/treefmt-nix";
  };

  outputs = { self, nixpkgs, flake-parts, treefmt-nix, ... }@inputs:
    flake-parts.lib.mkFlake { inherit inputs; } {
      systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];

      perSystem = { pkgs, system, ... }: 
        let
          erlangLatest = pkgs.erlang_28; 
          
          rebar_config = builtins.readFile ./rebar.config;
          match = builtins.match ".*release,.+sakura, \"([0-9.]+)\".*" rebar_config;
          pversion = builtins.head match;
        in {
          # This sets `pkgs` to a nixpkgs with allowUnfree option set.
          _module.args.pkgs = import nixpkgs {
            inherit system;
            config.allowUnfree = true;
          };

          # nix build
          packages = {
            default =
              let
                deps = import ./rebar-deps.nix {
                  inherit (pkgs) fetchHex fetchFromGitHub fetchgit;
                  builder = pkgs.beamPackages.buildRebar3;
                };
              in
              pkgs.beamPackages.rebar3Relx {
                pname = "sakura";
                version = pversion;
                src = pkgs.lib.cleanSource ./.;
                releaseType = "release";
                profile = "prod";
                buildInputs = (
                  with pkgs;
                  [
                    coreutils
                    gawk
                    gnugrep
                    openssl
                  ]
                  ++ lib.optional stdenv.isLinux [
                    liburing
                  ]
                );
                beamDeps = builtins.attrValues deps;
              };
          };

          # Define devShell for Erlang + Rebar3
          devShells = {
            default = pkgs.mkShell {
              packages = with pkgs; [
                erlang-language-platform
                rebar3
              ] ++ [erlangLatest];
            };
          };

          # Formatter setup for Nix files
          formatter = treefmt-nix.lib.evalModule pkgs ./treefmt.nix;

          # nix flake check --all-systems
          checks = {
            formatting = treefmt-nix.lib.evalModule pkgs ./treefmt.nix;
          };
        };
    };
}