aboutsummaryrefslogblamecommitdiffstats
path: root/flake.nix
blob: 14cc8de2d5082a1fffb0dd43b16227936b271593 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
 
                                  
 
            
                                                            
 




                                                   
    
 
                                                                    


                                                                                    

                                         


                                                          
                                                                                    
                                         





                                                                      
 

                      







                                                                   
                                 

















                                                    





                                               

                                        
                                  

              








                                                                       
      
 
{
  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;
          };
        };
    };
}