GithubHelp home page GithubHelp logo

caguiclajmg / dream2nix Goto Github PK

View Code? Open in Web Editor NEW

This project forked from nix-community/dream2nix

0.0 2.0 0.0 2.85 MB

Nixify software with less effort [maintainer=@DavHau]

Home Page: https://nix-community.github.io/dream2nix

License: MIT License

Shell 0.27% JavaScript 0.11% Python 8.80% Rust 2.46% Nix 88.36%

dream2nix's Introduction

dream2nix - A framework for automated nix packaging

!!! Warning: dream2nix is unstable software. While simple UX is one of our main focus points, the APIs are still under development. Do expect changes that will break your setup.

dream2nix is a framework for automatically converting packages from other build systems to nix.

It focuses on the following aspects:

  • Modularity
  • Customizability
  • Maintainability
  • Nixpkgs Compatibility, by not enforcing IFD (import from derivation)
  • Code de-duplication across 2nix converters
  • Code de-duplication in nixpkgs
  • Risk-free opt-in aggregated fetching (larger FODs, less checksums)
  • Common UI across 2nix converters
  • Reduce effort to develop new 2nix solutions
  • Exploration and adoption of new nix features
  • Simplified updating of packages

The goal of this project is to create a standardized, generic, modular framework for automated packaging solutions, aiming for better flexibility, maintainability and usability.

The intention is to integrate many existing 2nix converters into this framework, thereby improving many of the previously named aspects and providing a unified UX for all 2nix solutions.

Test the experimental version of dream2nix

(Currently only nodejs and rust packaging is supported)

  1. Make sure you use a nix version >= 2.4 and have experimental-features = "nix-command flakes" set.
  2. Navigate to to the project intended to be packaged and initialize a dream2nix flake:
      cd ./my-project
      nix flake init -t github:nix-community/dream2nix#simple
  3. List the packages that can be built
      nix flake show

Minimal Example flake.nix:

{
  inputs.dream2nix.url = "github:nix-community/dream2nix";
  outputs = { self, dream2nix }:
    dream2nix.lib.makeFlakeOutputs {
      systems = ["x86_64-linux"];
      config.projectRoot = ./.;
      source = ./.;
    };
}

Extensive Example flake.nix:

{
  inputs.dream2nix.url = "github:nix-community/dream2nix";
  outputs = { self, dream2nix }:
    dream2nix.lib.makeFlakeOutputs {
      systems = ["x86_64-linux"];
      config.projectRoot = ./.;

      source = ./.;

      # Configure the behavior of dream2nix when translating projects.
      # A setting applies to all discovered projects if `filter` is unset,
      # or just to a subset or projects if `filter` is used.
      settings = [
        # prefer aggregated source fetching (large FODs)
        {
          aggregate = true;
        }
        # for all impure nodejs projects with just a `package.json`,
        # add arguments for the `package-json` translator
        {
          filter = project: project.translator == "package-json";
          subsystemInfo.npmArgs = "--legacy-peer-deps";
          subsystemInfo.nodejs = 18;
        }
      ];

      # configure package builds via overrides
      # (see docs for override system below)
      packageOverrides = {
        # name of the package
        package-name = {
          # name the override
          add-pre-build-steps = {
            # override attributes
            preBuild = "...";
            # update attributes
            buildInputs = old: old ++ [pkgs.hello];
          };
        };
      };

      # Inject missing dependencies
      inject = {
        # Make foo depend on bar and baz
        # from
        foo."6.4.1" = [
          # to
          ["bar" "13.2.0"]
          ["baz" "1.0.0"]
        ];
        # dependencies with @ and slash require quoting
        # the format is the one that is in the lockfile
        "@tiptap/extension-code"."2.0.0-beta.26" = [
           ["@tiptap/core" "2.0.0-beta.174"]
         ];
      };

      # add sources for `bar` and `baz`
      sourceOverrides = oldSources: {
        bar."13.2.0" = builtins.fetchTarball {url = ""; sha256 = "";};
        baz."1.0.0" = builtins.fetchTarball {url = ""; sha256 = "";};
      };
    };
}

An example for instancing dream2nix per pkgs and using it to create outputs can be found at examples_d2n-init-pkgs.

Documentation

Documentation for main branch is deployed to https://nix-community.github.io/dream2nix.

A CLI app is available if you want to read documentation in your terminal. The app is available as d2n-docs if you enter the development shell, otherwise you can access it with nix run .#docs. d2n-docs can be used to access all available documentation. To access a specific document you can use d2n-docs doc-name where doc-name is the name of the document. For example, to access Rust subsystem documentation, you can use d2n-docs rust.

You can also build documentation by running nix build .#docs. Or by entering the development shell (nix develop) and running mdbook build docs.

Watch the presentation

(The code examples of the presentation are outdated) dream2nix - A generic framework for 2nix tools

Funding

This project receives financial support by NLNet as part of the NGI Assure Programme funded by the European Commission; as well as private funding and support from Platonic.Systems.

If your organization wants to support the project with extra funding in order to add support for more languages or new features, please contact one of the maintainers.

Community

matrix: https://matrix.to/#/#dream2nix:nixos.org

dream2nix's People

Contributors

aciceri avatar blaggacao avatar danth avatar davhau avatar dieracdelta avatar fresheyeball avatar happysalada avatar humancalico avatar jaen avatar lassulus avatar lelit avatar lelongg avatar leungbk avatar max-privatevoid avatar mic92 avatar ners avatar nrdxp avatar olafklingt avatar raboof avatar raghuramlavan avatar tgunnoe avatar tinybeachthor avatar tomberek avatar wmertens avatar yusdacra avatar zimbatm avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.