nix-community / bundix

Generates a Nix expression for your Bundler-managed application. [maintainer=@manveru]
160 stars 54 forks source link

set GEM_HOME to allow repo as flake input #100

Open cscorley opened 1 year ago

cscorley commented 1 year ago

Sets GEM_HOME, which allows this repository's default.nix to be used as a flake input with Ruby 3.x:

Setting GEM_HOME is also performed in the nixpkgs build

Example use within a flake using this PR, using the nixpkgs-ruby to override:

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.11";
    nixpkgs-ruby.url = "github:bobvanderlinden/nixpkgs-ruby";
    nixpkgs-ruby.inputs.nixpkgs.follows = "nixpkgs";
    flake-utils.url = "github:numtide/flake-utils";
    bundix-src = {
      url = "github:cscorley/bundix/add-gem-home";
      flake = false;
    };
  };

  outputs = { self, nixpkgs, nixpkgs-ruby, flake-utils, bundix-src }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = nixpkgs.legacyPackages.${system};
        rubyVersion = nixpkgs.lib.strings.removePrefix "ruby-"
          (nixpkgs.lib.fileContents ./.ruby-version);
        ruby = nixpkgs-ruby.packages.${system}."ruby-${rubyVersion}";

        gems = pkgs.bundlerEnv {
          name = "gemset";
          inherit ruby;
          gemfile = ./Gemfile;
          lockfile = ./Gemfile.lock;
          gemset = ./gemset.nix;
          groups = [ "default" "production" "development" "test" ];
        };

        # Override bundix to use the later ruby
        bundler = pkgs.bundler.override { inherit ruby; };
        bundix = pkgs.callPackage bundix-src { inherit pkgs ruby bundler; };
      in {
        devShells.default =
          pkgs.mkShell { buildInputs = [ gems ruby bundix ]; };
      });
}