Skip to content
Snippets Groups Projects
default.nix 3.33 KiB
Newer Older
  • Learn to ignore specific revisions
  • Tom Prince's avatar
    Tom Prince committed
    let
      sources = import nix/sources.nix;
    in
    { pkgs ? import sources.release2015 {}
    , pypiData ? sources.pypi-deps-db
    
    , mach-nix ? import sources.mach-nix { inherit pkgs pypiData; }
    
    Tom Prince's avatar
    Tom Prince committed
    , tahoe-lafs-source ? "tahoe-lafs"
    , tahoe-lafs-repo ? sources.${tahoe-lafs-source}
    
    Tom Prince's avatar
    Tom Prince committed
    }:
    
    Tom Prince's avatar
    Tom Prince committed
      let
    
    Tom Prince's avatar
    Tom Prince committed
        lib = pkgs.lib;
    
    Tom Prince's avatar
    Tom Prince committed
        python = "python27";
    
    Tom Prince's avatar
    Tom Prince committed
        providers = {
          _default = "sdist,nixpkgs,wheel";
    
    Tom Prince's avatar
    Tom Prince committed
          # mach-nix doesn't provide a good way to depend on mach-nix packages,
          # so we get it as a nixpkgs dependency from an overlay. See below for
          # details.
    
    Tom Prince's avatar
    Tom Prince committed
          tahoe-lafs = "nixpkgs";
    
    Tom Prince's avatar
    Tom Prince committed
          # not packaged in nixpkgs at all, we can use the binary wheel from
          # pypi though.
          python-challenge-bypass-ristretto = "wheel";
          # Pure python packages that don't build correctly from sdists
          # - patches in nixpkgs that don't apply
          boltons = "wheel";
          chardet = "wheel";
          urllib3 = "wheel";
    
    Tom Prince's avatar
    Tom Prince committed
          # - incorrectly detected dependencies due to pbr
          fixtures = "wheel";
          testtools = "wheel";
          traceback2 = "wheel";
    
    Tom Prince's avatar
    Tom Prince committed
          # - Incorrectly merged extras - https://github.com/DavHau/mach-nix/pull/334
          tqdm = "wheel";
    
    Tom Prince's avatar
    Tom Prince committed
        };
    
    Tom Prince's avatar
    Tom Prince committed
      in
        rec {
          tahoe-lafs = mach-nix.buildPythonPackage rec {
            inherit python providers;
            name = "tahoe-lafs";
            version = "1.16.post999";
            # See https://github.com/DavHau/mach-nix/issues/190
            requirementsExtra = ''
              pyrsistent < 0.17
              foolscap == 0.13.1
              configparser
              eliot
    
    Tom Prince's avatar
    Tom Prince committed
            '';
    
    Tom Prince's avatar
    Tom Prince committed
            postPatch = ''
              cat > src/allmydata/_version.py <<EOF
              # This _version.py is generated by nix.
    
    Tom Prince's avatar
    Tom Prince committed
    
    
    Tom Prince's avatar
    Tom Prince committed
              verstr = "${version}+git-${tahoe-lafs-repo.rev}"
              __version__ = verstr
              EOF
            '';
            src = tahoe-lafs-repo;
          };
          zkapauthorizer = mach-nix.buildPythonApplication rec {
            inherit python providers;
    
    Tom Prince's avatar
    Tom Prince committed
            src = lib.cleanSource ./.;
    
    Tom Prince's avatar
    Tom Prince committed
            # mach-nix does not provide a way to specify dependencies on other
            # mach-nix packages, that incorporates the requirements and overlays
            # of that package.
            # See https://github.com/DavHau/mach-nix/issues/123
            # In particular, we explicitly include the requirements of tahoe-lafs
            # here, and include it in a python package overlay.
            requirementsExtra = tahoe-lafs.requirements;
            overridesPre = [
              (
                self: super: {
                  inherit tahoe-lafs;
                }
              )
            ];
            # Record some settings here, so downstream nix files can consume them.
            meta.mach-nix = { inherit python providers; };
          };
    
          privatestorage = let
            python-env = mach-nix.mkPython {
              inherit python providers;
              packagesExtra = [ zkapauthorizer tahoe-lafs ];
            };
          in
    
    Tom Prince's avatar
    Tom Prince committed
            # Since we use this derivation in `environment.systemPackages`,
            # we create a derivation that has just the executables we use,
            # to avoid polluting the system PATH with all the executables
            # from our dependencies.
    
    Tom Prince's avatar
    Tom Prince committed
            pkgs.runCommandNoCC "privatestorage" {}
              ''
                mkdir -p $out/bin
                ln -s ${python-env}/bin/tahoe $out/bin
    
    Tom Prince's avatar
    Tom Prince committed
                # Include some tools that are useful for debugging.
                ln -s ${python-env}/bin/flogtool $out/bin
                ln -s ${python-env}/bin/eliot-prettyprint $out/bin
    
    Tom Prince's avatar
    Tom Prince committed
              '';
    
    Tom Prince's avatar
    Tom Prince committed
        }