Ctrl K
ComunidadGuías…

flake.nix

Rama dev · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
{
  description = "Bifrost's Nix Flake";

  # Flake inputs
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/staging-next";
  };

  # Flake outputs
  outputs = {self, ...} @ inputs: let
    # The systems supported for this flake's outputs
    supportedSystems = [
      "x86_64-linux" # 64-bit Intel/AMD Linux
      "aarch64-linux" # 64-bit ARM Linux
      "aarch64-darwin" # 64-bit ARM macOS
    ];

    # Temporary workaround until nixpkgs includes Go 1.27.3 (pinned rev has 1.27rc2).
    go_1_27_3_overlay = final: prev: {
      go_1_27 = prev.go_1_27.overrideAttrs (oldAttrs: rec {
        version = "1.27.3";
        src = final.fetchurl {
          url = "https://go.dev/dl/go${version}.src.tar.gz";
          sha256 = "6e7749035cf360f06b2575d162ea79df9fda8ef671889e5c375f8e50777f26bb";
        };
      });
      go = final.go_1_27;
    };

    # Helper for providing system-specific attributes
    forEachSupportedSystem = f:
      inputs.nixpkgs.lib.genAttrs supportedSystems (
        system:
          f {
            inherit system;
            # Provides a system-specific, configured Nixpkgs
            pkgs = import inputs.nixpkgs {
              inherit system;
              overlays = [go_1_27_3_overlay];
              # Enable using unfree packages
              config.allowUnfree = true;
            };
          }
      );
  in {
    nixosModules = {
      bifrost = {
        pkgs,
        lib,
        ...
      }: {
        imports = [./nix/modules/bifrost.nix];
        services.bifrost.package = lib.mkDefault self.packages.${pkgs.system}.bifrost-http;
      };
    };

    packages = forEachSupportedSystem (
      {
        pkgs,
        system,
      }: let
        version = "1.4.9";

        bifrost-ui = pkgs.callPackage ./nix/packages/bifrost-ui.nix {
          src = self;
          inherit version;
        };
      in {
        bifrost-ui = bifrost-ui;

        bifrost-http = pkgs.callPackage ./nix/packages/bifrost-http.nix {
          inherit inputs;
          src = self;
          inherit version;
          inherit bifrost-ui;
        };

        default = self.packages.${system}.bifrost-http;
      }
    );

    apps = forEachSupportedSystem (
      {system, ...}: {
        bifrost-http = {
          type = "app";
          program = "${self.packages.${system}.bifrost-http}/bin/bifrost-http";
        };

        default = self.apps.${system}.bifrost-http;
      }
    );

    # To activate the default environment:
    # nix develop
    # Or if you use direnv:
    # direnv allow
    devShells = forEachSupportedSystem (
      {pkgs, ...}: {
        # Run `nix develop` to activate this environment or `direnv allow` if you have direnv installed
        default = import ./nix/devshells/default.nix {inherit pkgs;};
      }
    );
  };
}