Git Product home page Git Product logo

nur's Introduction

NUR

The Nix User Repository (NUR) is a community-driven meta repository for Nix packages. It provides access to user repositories that contain package descriptions (Nix expressions) and allows you to install packages by referencing them via attributes. In contrast to Nixpkgs, packages are built from source and are not reviewed by any Nixpkgs member.

The NUR was created to share new packages from the community in a faster and more decentralized way.

NUR automatically checks its list of repositories and performs evaluation checks before it propagates the updates.

Installation

First include NUR in your packageOverrides:

To make NUR accessible for your login user, add the following to ~/.config/nixpkgs/config.nix:

{
  packageOverrides = pkgs: {
    nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") {
      inherit pkgs;
    };
  };
}

For NixOS add the following to your /etc/nixos/configuration.nix Notice: If you want to use NUR in nix-env, home-manager or in nix-shell you also need NUR in ~/.config/nixpkgs/config.nix as shown above!

{
  nixpkgs.config.packageOverrides = pkgs: {
    nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") {
      inherit pkgs;
    };
  };
}

Pinning

Using builtins.fetchTarball without a sha256 will only cache the download for 1 hour by default, so you need internet access almost every time you build something. You can pin the version if you don't want that:

builtins.fetchTarball {
  # Get the revision by choosing a version from https://github.com/nix-community/NUR/commits/master
  url = "https://github.com/nix-community/NUR/archive/3a6a6f4da737da41e27922ce2cfacf68a109ebce.tar.gz";
  # Get the hash by running `nix-prefetch-url --unpack <url>` on the above url
  sha256 = "04387gzgl8y555b3lkz9aiw9xsldfg4zmzp930m62qw8zbrvrshd";
}

How to use

Then packages can be used or installed from the NUR namespace.

$ nix-shell -p nur.repos.mic92.hello-nur
nix-shell> hello
Hello, NUR!

or

$ nix-env -f '<nixpkgs>' -iA nur.repos.mic92.hello-nur

or

# configuration.nix
environment.systemPackages = with pkgs; [
  nur.repos.mic92.hello-nur
];

Each contributor can register their repository under a name and is responsible for its content.

NUR does not check the repository for malicious content on a regular basis and it is recommended to check the expressions before installing them.

Using the flake in NixOS

Using overlays and modules from NUR in your configuration is fairly straight forward.

In your flake.nix add nur.nixosModules.nur to your module list:

{
  inputs.nur.url = github:nix-community/NUR;

  outputs = { self, nixpkgs, nur }: {
    nixosConfigurations.myConfig = nixpkgs.lib.nixosSystem {
      # ...
      modules = [
        nur.nixosModules.nur
        # This adds a nur configuration option.
        # Use `config.nur` for packages like this:
        # ({ config, ... }: {
        #   environment.systemPackages = [ config.nur.repos.mic92.hello-nur ];
        # })
      ];
    };
  };
}

You cannot use config.nur for importing NixOS modules from NUR as this will lead to infinite recursion errors.

Instead use:

{
  inputs.nur.url = "github:nix-community/NUR";
  outputs = { self, nixpkgs, nur }: rec {
    nixosConfigurations.laptop = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        { nixpkgs.overlays = [ nur.overlay ]; }
        ({ pkgs, ... }:
          let
            nur-no-pkgs = import nur {
              nurpkgs = import nixpkgs { system = "x86_64-linux"; };
            };
          in {
            imports = [ nur-no-pkgs.repos.iopq.modules.xraya  ];
            services.xraya.enable = true;
          })
        #./configuration.nix or other imports here
      ];
    };
  };
}

Using modules overlays or library functions in NixOS

If you intend to use modules, overlays or library functions in your NixOS configuration.nix, you need to take care not to introduce infinite recursion. Specifically, you need to import NUR like this in the modules:

{ pkgs, config, lib, ... }:
let
  nur-no-pkgs = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") {};
in {

  imports = [
    nur-no-pkgs.repos.paul.modules.foo
  ];

  nixpkgs.overlays = [
    nur-no-pkgs.repos.ben.overlays.bar
  ];

}

Integrating with Home Manager

Integrating with Home Manager can be done by adding your modules to the imports attribute. You can then configure your services like usual.

let
  nur-no-pkgs = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") {};
in
{
  imports = lib.attrValues nur-no-pkgs.repos.moredhel.hmModules.rawModules;

  services.unison = {
    enable = true;
    profiles = {
      org = {
        src = "/home/moredhel/org";
        dest = "/home/moredhel/org.backup";
        extraArgs = "-batch -watch -ui text -repeat 60 -fat";
      };
    };
  };
}

Finding packages

You can find all packages using Packages search for NUR or search our nur-combined repository, which contains all nix expressions from all users, via github.

How to add your own repository.

First, create a repository that contains a default.nix in its top-level directory. We also provide a repository template that contains a prepared directory structure.

DO NOT import packages for example with import <nixpkgs> {};. Instead take all dependency you want to import from Nixpkgs from the given pkgs argument. Each repository should return a set of Nix derivations:

{ pkgs }:
{
  hello-nur = pkgs.callPackage ./hello-nur {};
}

In this example hello-nur would be a directory containing a default.nix:

{ stdenv, fetchurl, lib }:

stdenv.mkDerivation rec {
  pname = "hello";
  version = "2.10";

  src = fetchurl {
    url = "mirror://gnu/hello/${pname}-${version}.tar.gz";
    sha256 = "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i";
  };

  postPatch = ''
    sed -i -e 's/Hello, world!/Hello, NUR!/' src/hello.c
  '';

  # fails due to patch
  doCheck = false;

  meta = with lib; {
    description = "A program that produces a familiar, friendly greeting";
    longDescription = ''
      GNU Hello is a program that prints "Hello, world!" when you run it.
      It is fully customizable.
    '';
    homepage = https://www.gnu.org/software/hello/manual/;
    changelog = "https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v${version}";
    license = licenses.gpl3Plus;
    maintainers = [ maintainers.eelco ];
    platforms = platforms.all;
  };
}

You can use nix-shell or nix-build to build your packages:

$ nix-shell --arg pkgs 'import <nixpkgs> {}' -A hello-nur
nix-shell> hello
nix-shell> find $buildInputs
$ nix-build --arg pkgs 'import <nixpkgs> {}' -A hello-nur

For development convenience, you can also set a default value for the pkgs argument:

{ pkgs ? import <nixpkgs> {} }:
{
  hello-nur = pkgs.callPackage ./hello-nur {};
}
$ nix-build -A hello-nur

Add your own repository to the repos.json of NUR:

$ git clone --depth 1 https://github.com/nix-community/NUR
$ cd NUR

edit the file repos.json:

{
    "repos": {
        "mic92": {
            "url": "https://github.com/Mic92/nur-packages"
        },
        "<fill-your-repo-name>": {
            "url": "https://github.com/<your-user>/<your-repo>"
        }
    }
}

At the moment, each URL must point to a git repository. By running bin/nur update the corresponding repos.json.lock is updated and the repository is tested. This will also perform an evaluation check, which must be passed for your repository. Commit the changed repos.json but NOT repos.json.lock

$ ./bin/nur format-manifest # ensure repos.json is sorted alphabetically
$ git add repos.json
$ git commit -m "add <your-repo-name> repository"
$ git push

and open a pull request towards https://github.com/nix-community/NUR.

At the moment repositories should be buildable on Nixpkgs unstable. Later we will add options to also provide branches for other Nixpkgs channels.

Use a different nix file as root expression

To use a different file instead of default.nix to load packages from, set the file option to a path relative to the repository root:

{
    "repos": {
        "mic92": {
            "url": "https://github.com/Mic92/nur-packages",
            "file": "subdirectory/default.nix"
        }
    }
}

Update NUR's lock file after updating your repository

By default, we only check for repository updates once a day with an automatic github action to update our lock file repos.json.lock. To update NUR faster, you can use our service at https://nur-update.nix-community.org/ after you have pushed an update to your repository, e.g.:

curl -XPOST https://nur-update.nix-community.org/update?repo=mic92

Check out the github page for further details

HELP! Why are my NUR packages not updating?

With every build triggered via the URL hook, all repositories will be evaluated.Only if the evaluation does not contain errors the repository revision for the user is updated. Typical evaluation errors are:

  • Using a wrong license attribute in the metadata.
  • Using a builtin fetcher because it will cause access to external URLs during evaluation. Use pkgs.fetch* instead (i.e. instead of builtins.fetchGit use pkgs.fetchgit)

You can find out if your evaluation succeeded by checking the latest build job.

Local evaluation check

In your nur-packages/ folder, run the check evaluation task

nix-env -f . -qa \* --meta \
  --allowed-uris https://static.rust-lang.org \
  --option restrict-eval true \
  --option allow-import-from-derivation true \
  --drv-path --show-trace \
  -I nixpkgs=$(nix-instantiate --find-file nixpkgs) \
  -I ./ \
  --json | jq -r 'values | .[].name'

On success, this shows a list of your packages

Git submodules

To fetch git submodules in repositories set submodules:

{
    "repos": {
        "mic92": {
            "url": "https://github.com/Mic92/nur-packages",
            "submodules": true
        }
    }
}

NixOS modules, overlays and library function support

It is also possible to define more than just packages. In fact any Nix expression can be used.

To make NixOS modules, overlays and library functions more discoverable, we propose to put them in their own namespace within the repository. This allows us to make them later searchable, when the indexer is ready.

Providing NixOS modules

NixOS modules should be placed in the modules attribute:

{ pkgs }: {
  modules = import ./modules;
}
# modules/default.nix
{
  example-module = ./example-module.nix;
}

An example can be found here. Modules should be defined as paths, not functions, to avoid conflicts if imported from multiple locations.

Providing Overlays

For overlays use the overlays attribute:

# default.nix
{
  overlays = {
    hello-overlay = import ./hello-overlay;
  };
}
# hello-overlay/default.nix
self: super: {
  hello = super.hello.overrideAttrs (old: {
    separateDebugInfo = true;
  });
}

Providing library functions

Put reusable nix functions that are intend for public use in the lib attribute:

{ pkgs }:
with pkgs.lib;
{
  lib = {
    hexint = x: hexvals.${toLower x};

    hexvals = listToAttrs (imap (i: c: { name = c; value = i - 1; })
      (stringToCharacters "0123456789abcdef"));
  };
}

Overriding repositories

You can override repositories using repoOverrides argument. This allows to test changes before publishing.

{
  packageOverrides = pkgs: {
    nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") {
      inherit pkgs;
      repoOverrides = {
        mic92 = import ../nur-packages { inherit pkgs; };
        ## remote locations are also possible:
        # mic92 = import (builtins.fetchTarball "https://github.com/your-user/nur-packages/archive/master.tar.gz") { inherit pkgs; };
      };
    };
  };
}

The repo must be a valid package repo, i.e. its root contains a default.nix file.

Overriding repositories with Flake

Experimental Note that flake support is still experimental and might change in future in a backwards incompatible way.

You can override repositories in two ways:

  • With packageOverrides
{
  inputs.nur.url = "github:nix-community/NUR";
  inputs.paul.url = "path:/some_path/nur-paul"; # example: a local nur.repos.paul for development 

  outputs = {self, nixpkgs, nur, paul }: {
 
  system = "x86_64-linux";
 
  nurpkgs = import nixpkgs { inherit system; };

  ...
  modules = [
       {
         nixpkgs.config.packageOverrides = pkgs: {
            nur = import nur {
              inherit pkgs nurpkgs;
              repoOverrides = { paul = import paul { inherit pkgs; }; };
            };
          };
        }
  ];
  ...
}
  • With overlay
{
  modules = [
    {
      nixpkgs.overlays = [
        (final: prev: {
          nur = import nur {
            nurpkgs = prev;
            pkgs = prev;
            repoOverrides = { paul = import paul { pkgs = prev; }; };
          };
        })
      ];
    } 
    ...
  ];
}

The repo must contains a flake.nix file to addition of default.nix: flake.nix example

  • If you need to use NUR defined modules and to avoid infinite recursion complete nur-no-pkgs (from previous Flake Support section) as:
{
  nur-no-pkgs = import nur {
    nurpkgs = import nixpkgs { system = "x86_64-linux"; };
    repoOverrides = { paul = import paul { }; };
  };
}

Contribution guideline

  • When adding packages to your repository make sure they build and set meta.broken attribute to true otherwise.
  • Supply meta attributes as described in the Nixpkgs manual, so packages can be found by users.
  • Keep your repositories slim - they are downloaded by users and our evaluator and needs to be hashed.
  • Reuse packages from Nixpkgs when applicable, so the binary cache can be leveraged

Examples for packages that could be in NUR:

  • Packages that are only interesting for a small audience
  • Pre-releases
  • Old versions of packages that are no longer in Nixpkgs, but needed for legacy reason (i.e. old versions of GCC/LLVM)
  • Automatic generated package sets (i.e. generate packages sets from PyPi or CPAN)
  • Software with opinionated patches
  • Experiments

Why package sets instead of overlays?

To make it easier to review nix expression NUR makes it obvious where the package is coming from. If NUR would be an overlay malicious repositories could override existing packages. Also without coordination multiple overlays could easily introduce dependency cycles.

Contact

We have a matrix channel on #nur:nixos.org. Apart from that we also read posts on https://discourse.nixos.org.

(๐Ÿ”ผ Back to top)

nur's People

Contributors

0x4a6f avatar ambroisie avatar bb010g avatar bors[bot] avatar cosciad avatar crazazy avatar dan4ik605743 avatar dependabot[bot] avatar federicoschonborn avatar ifd3f avatar infinisil avatar iopq avatar jayrovacsek avatar jd91mzm2 avatar kira-bruneau avatar kolloch avatar makefu avatar mergify[bot] avatar mic92 avatar milahu avatar misterio77 avatar mrvandalo avatar nur-bot avatar rycee avatar setser avatar thaumy avatar tilpner avatar tokudan avatar vdemeester avatar zimbatm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nur's Issues

Binary cache is not used on nixos-rebuild

Hi!
Please help.

I have

On GitHub

  1. https://github.com/gnidorah/nur-packages as fork of https://github.com/nix-community/nur-packages-template
  2. CACHIX_CACHE set to gnidorah in .travis.yml
  3. CACHIX_SIGNING_KEY and cron job set on travis-ci.com in repo settings
  4. Triggered build and checked that everything uploaded to gnidorah.cachix.org

On local machine

  1. Configuration files generated with cachix use
  2. Latest nixos-unstable channel is used
  3. configuration.nix
nur-src = builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz";
nur-no-pkgs = import nur-src {};
in {
  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
      nur-no-pkgs.repos.gnidorah.modules.logitech-k380
      ./cachix.nix
    ];

  nixpkgs.config.packageOverrides = pkgs: {
    nur = import nur-src {
      inherit pkgs;
    };
  };

  environment.systemPackages = with pkgs; [
    nur.repos.gnidorah.knobkraft-orm
  ];
``

knobkraft-orm for some reason starts to build from sources on `nixos-rebuild switch` O_O

Distributing an overlay with nur

I have recently released a project I would like to distribute in a NUR like manner.

https://github.com/mpickering/haskell-nix-plugin

It is currently packaged as an overlay. The intended usage is something like..

let
  plugin-overlay-git = builtins.fetchGit
   { url = https://github.com/mpickering/haskell-nix-plugin.git;}  ;
  plugin-overlay = import "${plugin-overlay-git}/overlay.nix";
  nixpkgs = import <nixpkgs> { overlays = [plugin-overlay]; };

  hl = nixpkgs.haskell.lib;
  hp = nixpkgs.haskellPackages;
in
  (hp.withPlugin(plugs: ps: hl.addPlugin plugs.dump-core ps.either)).DumpCore

Could I instead add the "overlay" to NUR and a user would instead write,

let
  plugin-overlay = import nixpkgs.nur.repos.mpickering.haskell-plugins.overlay;
  nixpkgs = import <nixpkgs> { overlays = [plugin-overlay]; };

Can you think of a nicer overall packaging strategy for this project?

Size limits on repos?

I was wondering why nur-combined was so big, turns out there's a 30+ gif in someone's repo! ๐Ÿ˜†

Well, that'd do it. But perhaps the update checker should consider such binary assets similar to a failing evaluation? Problem is deciding how big is too big...

And sorry to name names but the repo is @Ma27's-- @Ma27 is there a good alternative approach/location for storing the demo.gif that doesn't bundle it with your expressions?

I don't think it's catastrophically bad, and mostly impacts anyone curious about that repo or using nur-combined. Questions above are more about ensuring there's not some multi-gigabyte beast in the future.

NUR cli idea

It would be cool to provide a CLI that helps tending NUR and it's children. Something that would take the roles of guix import and nix-prefetch-url + updating

Namespacing of NixOs Modules following the addition of other OS's

PR #98 describes how to write and import your own home-module modules & configuration.
This started a discussion on what the best-practices for doing so is, and what to do as more systems (crostini, macbook, init.d?, windows?) are added in the future.

With this in mind, I have pulled out the discussion into a separate Issue.

Please refer to the following thread for context: #98 (comment)

Currently the following are being discussed:

  • Home-Manager: hmModules
  • Darwin: ndModules
  • Crostini: crosModules

Possible actionables:

  • extend the template default.nix to include these namespaces
  • add documentation about the expected locations of these namespaces
  • all the above

CC @rycee @Mic92

Install as overlay?

For me it works like this.

self: super:
let nur = import /home/danbst/dev/NUR { nurpkgs = self; pkgs = self; };
in {
    nur = nur;
}

I guess remark in the end describes why nix-community/NUR isn't composed as list of overlays, but for a newcomer (like me) it reads as "don't use NUR in overlay".

Also, publishing NUR as an overlay poses no security problems:

let
  danbst_overlay = self: super: {
    repos.danbst.mypkg = self.writeText "hello.txt" "hello world";
  };
  hacker_overlay = self: super: {
    repos.danbst.mypkg = self.writeText "hello.txt" "pwned";
  };
in self: super: {
  # this must be autogenerated
  repos.danbst = with danbst_overlay self super; repos.danbst or {};
  repos.hacker = with hacker_overlay self super; repos.hacker or {};  
}

$ cat $(nix-build '<nixpkgs>' -A repos.danbst.mypkg)
hello world

Failed to add repository, how to debug ?

I try to add nur-kapack repository to nur. The repo is based on nur-template and travis build is succesfull (travis build). The CI on NUR failed (pull request #165) with the following error. I don't know how to address this issue. Is it a simple one ?

[0.0 MiB DL]
INFO:nur.update:Evaluate repository kapack
error: while evaluating anonymous function at /nix/store/qvzj27il1373gki369jm3zg2vzr9xg69-nixpkgs-20.03pre204216.cc6cf0a96a6/nixpkgs/pkgs/build-support/replace-dependency.nix:20:1, called from /nix/store/2x2q6y0rps9sml7ff0z3g80k2za55f6h-source/default.nix:65:14:
cannot import '/nix/store/rp3n56hnxp85widn75hlj08f9gbk4yp2-references.nix', since path '/nix/store/6nkfqg35rr5if36lm9lzz8bdvb9fsc98-references.nix.drv' is not valid, at /nix/store/qvzj27il1373gki369jm3zg2vzr9xg69-nixpkgs-20.03pre204216.cc6cf0a96a6/nixpkgs/pkgs/build-support/replace-dependency.nix:26:16
Traceback (most recent call last):
  File "/nix/store/kcr2j1z281i3mdg5wczp4w6w8dh3g17x-nur/bin/.nur-wrapped", line 9, in <module>
    sys.exit(main())
  File "/nix/store/kcr2j1z281i3mdg5wczp4w6w8dh3g17x-nur/lib/python3.7/site-packages/nur/__init__.py", line 58, in main
    args.func(args)
  File "/nix/store/kcr2j1z281i3mdg5wczp4w6w8dh3g17x-nur/lib/python3.7/site-packages/nur/update.py", line 80, in update_command
    update(repo)
  File "/nix/store/kcr2j1z281i3mdg5wczp4w6w8dh3g17x-nur/lib/python3.7/site-packages/nur/update.py", line 67, in update
    eval_repo(repo, repo_path)
  File "/nix/store/kcr2j1z281i3mdg5wczp4w6w8dh3g17x-nur/lib/python3.7/site-packages/nur/update.py", line 60, in eval_repo
    raise EvalError(f"{repo.name} does not evaluate:\n$ {' '.join(cmd)}")
nur.error.EvalError: kapack does not evaluate:
$ nix-env -f /tmp/tmpmjho3l12/default.nix -qa * --meta --xml --allowed-uris https://static.rust-lang.org --option restrict-eval true --option allow-import-from-derivation true --drv-path --show-trace -I nixpkgs=/nix/store/qvzj27il1373gki369jm3zg2vzr9xg69-nixpkgs-20.03pre204216.cc6cf0a96a6/nixpkgs -I /nix/store/2x2q6y0rps9sml7ff0z3g80k2za55f6h-source -I /tmp/tmpmjho3l12/default.nix -I /home/travis/build/nix-community/NUR/lib/evalRepo.nix
The command "bash ci/deploy.sh" exited with 1.

How to use the toPythonModule function with NUR?

I've posted this question on discourse originally, but it did not receive much attention.

I would like to package an application (astrochem) that has Python bindings in NUR. In the nixpkgs tree, I would add the following line to python-packages.nix:

astrochem = toPythonModule (pkgs.astrochem.override { pythonPackages = self; });

I've tried something similar in in the default.nix of a nur-packages-templates fork:

astrochem = pkgs.pythonPackages.toPythonModule ((pkgs.callPackage ./pkgs/astrochem {pythonPackages = self; }).override { }); 

but then I get the following error:

nix-build -I . -A python27Packages.astrochem
error: undefined variable 'self' at /Users/smaret/Documents/Software/nur-packages/default.nix:18:103

How can I use the toPythonModule function in NUR?

Frequent "429 TOO MANY REQUESTS" errors from nur-update

My GitLab CI job frequently fails due to

curl -sfSL -XPOST https://nur-update.herokuapp.com/update?repo=rycee

erroring out with the message

curl: (22) The requested URL returned error: 429 TOO MANY REQUESTS

See https://gitlab.com/rycee/nur-expressions/pipelines for the historic runs (the jobs with two stages are the ones pinging nur-update).

Even though the nur-update service gives the 429 error, the update still seems to happen in the NUR repo. For example 8044a5a corresponds to the failing job https://gitlab.com/rycee/nur-expressions/-/jobs/438621162.

I think my repo does hit nur-update more frequently than most NURs, though. Should I try fixing my CI job to avoid curling more than once a day or so?

Add more maintainer for this repo

Most pull requests to this repository will be trivial changes to repos.json.
Until we have figured out how to merge those automatically, it would be cool
to have more maintainers beside me that could merge those pull requests.

Scope?

It is not entirely clear what this repository is for.

I would like to use my local overlay files and push them to this repository. For example, I would create ./pkgs/applications/network/mailreaders/lumail/lumail-master.nix for an overlay which is for building the "lumail" mail reader from the master branch of the project.

But because of the word "index" in the README, I'm not sure whether this repository should be a "collection of links to overlay repositories" or a collection of overlays.

Update NUR more often

At the moment we update the repos.json.lock file using a travis cronjob. This limits us to daily update.
A short term solution is to trigger's travis API externally.
A long term solution is to implement push mechanisms such as the Github Pubsub API to react on updates as they happen.

Document how to test/use own repository

It should be straight forward to test expressions before pushing new content to a repository.
Therefore we should provide snippets on how load packages/modules/library/overlays functions from a local checkout into NixOS/Nix. If necessary helpers can be added to NUR that simplify the workflow.

Module conflict

What if I want a modified module derivation of a module that already exists in nixpkgs
How to do this?
For e.g. If I currently import tox from nur

  imports =
    [
      nur-no-pkgs.repos.tox.modules.tox-node
    ];

I will get an error

error: The option `services.tox-node.enable' in `/home/gnidorah/tmp/nixpkgs/nixos/modules/services/networking/tox-node.nix' is already declared in `/nix/store/3vcj51zf0d613q5axpvbpy27vpmfvgkm-source/modules/services/tox-node.nix'.
(use '--show-trace' to show detailed location information)

Impure attribute fails due to restricted-eval mode

Related to #92.

I wanted to distribute an impure attribute which would drop users into a shell environment with the latest
ghcHEAD release. The way this is achieved is by using builtins.fetchurl pointed at a URL which redirects to the lastest artifact.

However trying to add this to NUR fails as NUR seems to want to evaluate the expression before adding it
to the repo so the call to fetchurl fails.

https://travis-ci.com/nix-community/NUR/jobs/170816780#L618

It seems that this kind of derivation is impossible to distribute with NUR currently.

CI build failed

NUR build on Travis failed for 3 days with:

builder for '/nix/store/f91wcah2vr4niwcybddbrwb20i3cfx9v-python3.8-jaraco.itertools-5.0.0.drv' failed with exit code 1; last 10 log lines:
  source root is jaraco.itertools-5.0.0
  setting SOURCE_DATE_EPOCH to timestamp 1576816590 of file jaraco.itertools-5.0.0/setup.cfg
  patching sources
  applying patch /nix/store/2gi523zp9gqsh7445xszbkxaw4zij8mk-0001-Don-t-run-flake8-checks-during-the-build.patch
  patching file pytest.ini
  Hunk #1 FAILED at 1.
  1 out of 1 hunk FAILED -- saving rejects to file pytest.ini.rej
  patching file setup.cfg
  Hunk #1 FAILED at 30.
  1 out of 1 hunk FAILED -- saving rejects to file setup.cfg.rej

Update PR template

Template has an item:
" I ran nur/format-manifest.py after updating repos.json (We will use the same script in travis ci to make sure we keep the format consistent) "

It took me a bit to understand that I needed to run ./bin/nur format-manifest since 475851a .

Can't use a NUR package from nix-env

$ nix-env -iA nur.repos.xe.ii
error: NUR import call didn't receive a pkgs argument, but the evaluation of NUR's xe repository requires it.

This is either because
  - You're trying to use a package from that repository, but didn't pass a `pkgs` argument to the NUR import.
    In that case, refer to the installation instructions at https://github.com/nix-community/nur#installation on how to properly import NUR

  - You're trying to use a module/overlay from that repository, but it didn't properly declare their module.
    In that case, inform the maintainer of the repository: https://github.com/Xe/xepkgs
$ sudo nix-channel --list
dhall https://hydra.dhall-lang.org/jobset/dhall-haskell/master/channel/latest
home-manager https://github.com/rycee/home-manager/archive/master.tar.gz
nixos https://nixos.org/channels/nixos-20.03
nur https://github.com/nix-community/NUR/archive/master.tar.gz
$ cat ~/.config/nixpkgs/config.nix
{
  packageOverrides = pkgs: {
    nur = import <nur> {
      inherit pkgs;
    };
  };
}

What am I doing wrong? I get this error with nearly every nur repo too.

Move top-level packages to a `pkgs` attribute

Followup from #27 (comment)

I propose to move all the packages from the top-level to a pkgs attribute, so that default.nix only contains pkgs, lib, modules, and overlays.

Pros:

  • more extensible and maintainable
  • avoids workarounds like this or this

Cons:

  • slightly more complicated basic structure
  • five more characters for the user to type
    • can be avoided by making the packages available at the top-level but using this repo's code, not individually on each nur-packages

Webinterface to add new repositories

We run a strict formatter as part of our CI which lead to test failures if keys order/indentation is not as expected.
We should also clarify the Readme more.

split up ci/deploy.sh in dedicated jobs

it seems that ci/deploy.sh is doing multiple things.

  • check for indention/linting and updates the master branch
  • update nix-combined
  • maybe more

it would be best to split this script up in multiple dedicated jobs.

.lock and author udpates

It is expected to have many authors that aren't able to merge and or push to this repository, but wanting to update their packages.

The way the AUR works, nothing stops the authors from updating when they want, and everything is updated.

AFAIUI, the current implementation would need a merge to update the lockfile for the specific revision given to get updates from the author.

Would it be advisable to keep the lockfiles for evaluation and search, maybe even as the default installation method, but allow a NUR-tracked overlay to fetch the tip of a branch?

I don't know if there are issues in allowing a NUR-tracked overlay to follow the tip of a branch; as long as they aren't merged with the root it shouldn't matter if $malicious.bash is added, it wouldn't replace any other bash except into its own overlay, right?

No repos.json.lock updates

I've just noticed that last 5 requests from my nur-packages repo CI did not lead to automatic update of repos.json.lock:

$ if [ "false" = "${TRAVIS_PULL_REQUEST}" -a "master" = "${TRAVIS_BRANCH}" ]; then curl -XPOST "https://nur-update.herokuapp.com/update?repo=${NUR_REPO}"; fi
{
  "@type": "pending",
  "remaining_requests": 50,
  "repository": {
    "@type": "repository",
    "@href": "/repo/5040084",
    "@representation": "minimal",
    "id": 5040084,
    "name": "NUR",
    "slug": "nix-community/NUR"
  },
  "request": {
    "repository": {
      "id": 123327588,
      "vcs_type": "GithubRepository",
      "owner_name": "nix-community",
      "name": "NUR"
    },
    "user": {
      "id": 42068
    },
    "id": 300997099,
    "message": "requested rebuild",
    "branch": "master",
    "config": {
    }
  },
  "resource_type": "request"
}
Done. Your build exited with 0.

What's going on?

Importing modules (as per the README) does not work for all repos

As the title says... illustration:

[kreisys@ip-192-168-0-167:~]$ git clone https://github.com/nix-community/NUR
Cloning into 'NUR'...
remote: Enumerating objects: 27, done.
remote: Counting objects: 100% (27/27), done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 1702 (delta 16), reused 21 (delta 10), pack-reused 1675
Receiving objects: 100% (1702/1702), 480.56 KiB | 18.48 MiB/s, done.
Resolving deltas: 100% (1011/1011), done.

[kreisys@ip-192-168-0-167:~]$ cd NUR/

[kreisys@ip-192-168-0-167:~/NUR]$ nix-instantiate --expr '(import ./. {}).repos.ma27.modules.hydra' --eval
error: cannot import '/nix/store/1bv6v2hlpk2kzqyl2p0n1gz1swx0q1kc-source/', since path '/nix/store/7nfr8gi4zj90vngygw7qniapqpz2c7q9-source.drv' is not valid, at /home/kreisys/NUR/lib/evalRepo.nix:25:10
(use '--show-trace' to show detailed location information)

[kreisys@ip-192-168-0-167:~/NUR]$ # we have to run without --eval first to get the path in the store... not sure if that's expected?
[kreisys@ip-192-168-0-167:~/NUR]$ nix-instantiate --expr '(import ./. {}).repos.ma27.modules.hydra'
building '/nix/store/7nfr8gi4zj90vngygw7qniapqpz2c7q9-source.drv'...

trying https://gitlab.com/api/v4/projects/Ma27%2Fnixexprs/repository/archive.tar.gz?sha=e1163d570e46f2e9673e4b74f9315037477418a1
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 15377  100 15377    0     0   102k      0 --:--:-- --:--:-- --:--:--  102k
unpacking source archive /tmp/nix-build-source.drv-0/archive.tar.gz?sha=e1163d570e46f2e9673e4b74f9315037477418a1
error: NUR import call didn't receive a pkgs argument, but the evaluation of NUR's ma27 repository requires it.

This is either because
  - You're trying to use a package from that repository, but didn't pass a `pkgs` argument to the NUR import.
    In that case, refer to the installation instructions at https://github.com/nix-community/nur#installation on how to properly import NUR

  - You're trying to use a module/overlay from that repository, but it didn't properly declare their module.
    In that case, inform the maintainer of the repository: https://gitlab.com/Ma27/nixexprs

(use '--show-trace' to show detailed location information)

[kreisys@ip-192-168-0-167:~/NUR]$ nix-instantiate --expr '(import ./. {}).repos.ma27.modules.hydra' --eval
error: NUR import call didn't receive a pkgs argument, but the evaluation of NUR's ma27 repository requires it.

This is either because
  - You're trying to use a package from that repository, but didn't pass a `pkgs` argument to the NUR import.
    In that case, refer to the installation instructions at https://github.com/nix-community/nur#installation on how to properly import NUR

  - You're trying to use a module/overlay from that repository, but it didn't properly declare their module.
    In that case, inform the maintainer of the repository: https://gitlab.com/Ma27/nixexprs

(use '--show-trace' to show detailed location information)

[kreisys@ip-192-168-0-167:~/NUR]$ nix-instantiate --expr '(import ./. {}).repos.peel.modules.weechat' --eval
error: cannot import '/nix/store/hnrkyhywzn09k9r5982drpsx0g6fz2x2-source/', since path '/nix/store/bqc9k647vw3x3f5qkkdq423y9n22bybh-source.drv' is not valid, at /home/kreisys/NUR/lib/evalRepo.nix:25:10
(use '--show-trace' to show detailed location information)

[kreisys@ip-192-168-0-167:~/NUR]$ nix-instantiate --expr '(import ./. {}).repos.peel.modules.weechat'
building '/nix/store/bqc9k647vw3x3f5qkkdq423y9n22bybh-source.drv'...

trying https://github.com/peel/nur-packages/archive/d5ba2b2c23e942238da0fe80595bc385902f86e3.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   156    0   156    0     0   2785      0 --:--:-- --:--:-- --:--:--  2736
100 67893    0 67893    0     0   526k      0 --:--:-- --:--:-- --:--:--  526k
unpacking source archive /tmp/nix-build-source.drv-0/d5ba2b2c23e942238da0fe80595bc385902f86e3.zip
lchmod (file attributes) error: Function not implemented
error: NUR import call didn't receive a pkgs argument, but the evaluation of NUR's peel repository requires it.

This is either because
  - You're trying to use a package from that repository, but didn't pass a `pkgs` argument to the NUR import.
    In that case, refer to the installation instructions at https://github.com/nix-community/nur#installation on how to properly import NUR

  - You're trying to use a module/overlay from that repository, but it didn't properly declare their module.
    In that case, inform the maintainer of the repository: https://github.com/peel/nur-packages

(use '--show-trace' to show detailed location information)

[kreisys@ip-192-168-0-167:~/NUR]$ nix-instantiate --expr '(import ./. {}).repos.peel.modules.weechat' --eval
error: NUR import call didn't receive a pkgs argument, but the evaluation of NUR's peel repository requires it.

This is either because
  - You're trying to use a package from that repository, but didn't pass a `pkgs` argument to the NUR import.
    In that case, refer to the installation instructions at https://github.com/nix-community/nur#installation on how to properly import NUR

  - You're trying to use a module/overlay from that repository, but it didn't properly declare their module.
    In that case, inform the maintainer of the repository: https://github.com/peel/nur-packages

(use '--show-trace' to show detailed location information)

[kreisys@ip-192-168-0-167:~/NUR]$ nix-instantiate --expr '(import ./. {}).repos.tilpner.modules.duplicity' --eval
error: cannot import '/nix/store/wndw07qhpj8wn2zrasxf5mlvsbbdsnav-source/', since path '/nix/store/p53v6wjfn2rrzmnpkrry77j1skg8l4q5-source.drv' is not valid, at /home/kreisys/NUR/lib/evalRepo.nix:25:10
(use '--show-trace' to show detailed location information)

[kreisys@ip-192-168-0-167:~/NUR]$ nix-instantiate --expr '(import ./. {}).repos.tilpner.modules.duplicity'
building '/nix/store/p53v6wjfn2rrzmnpkrry77j1skg8l4q5-source.drv'...

trying https://github.com/tilpner/nur-packages/archive/ca3d5ae8b3f0894d8bee0783e4d8a9af6859942f.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   159    0   159    0     0   2789      0 --:--:-- --:--:-- --:--:--  2789
100 31732    0 31732    0     0   203k      0 --:--:-- --:--:-- --:--:--  203k
unpacking source archive /tmp/nix-build-source.drv-0/ca3d5ae8b3f0894d8bee0783e4d8a9af6859942f.zip
error: expression does not evaluate to a derivation (or a set or list of those)

[kreisys@ip-192-168-0-167:~/NUR]$ # this one works as expected and returns a path
[kreisys@ip-192-168-0-167:~/NUR]$ nix-instantiate --expr '(import ./. {}).repos.tilpner.modules.duplicity' --eval
/nix/store/wndw07qhpj8wn2zrasxf5mlvsbbdsnav-source/modules/duplicity.nix

access to github URI is forbidden in restricted mode

Hi, I am having a hard time getting https://github.com/kolloch/nur-packages updated into NUR because of forbidden URIs.

Probably, I have a major misunderstanding. I can't find information where the restrictions are coming from and what I have to do to resolve them. Thanks for any help!

I am packaging packes with sources from github and static.crates.io, e.g.

builtins.fetchGit {
        name = "crate2nix-source";
        url = "https://github.com/kolloch/crate2nix.git";
        inherit (sources.crate2nix) rev;
      };

First, I used niv sources wich used fetch_tarball underneath.

In the Travis CI Build, I am seeing errors like these:

$ nix-env -f /tmp/tmpw5mnfdp8/default.nix -qa * --meta --xml --allowed-uris https://static.rust-lang.org --option restrict-eval true --option allow-import-from-derivation true --drv-path --show-trace -I nixpkgs=/nix/store/0xhcrmgm5akgc835zmswn2xpii1y73w6-nixpkgs-20.09pre224406.5f14d99efed/nixpkgs -I /nix/store/8lpb0hds6na3m3my9xqvib5radbz08jz-source -I /tmp/tmpw5mnfdp8/default.nix -I /home/travis/build/nix-community/NUR/lib/evalRepo.nix

unpacking...

INFO:nur.update:Evaluate repository kolloch

error: while querying the derivation named 'rust_crate2nix-0.9.0-alpha.1':

while evaluating the attribute 'src' of the derivation 'rust_crate2nix-0.9.0-alpha.1' at /nix/store/0xhcrmgm5akgc835zmswn2xpii1y73w6-nixpkgs-20.09pre224406.5f14d99efed/nixpkgs/pkgs/build-support/rust/build-rust-crate/default.nix:223:5:

while evaluating the attribute 'src' at /nix/store/ym3msp3kqzjgv7nicd8zb7pfpqy4d86n-source/pkgs/rust/generated/Cargo.nix:3256:17:

while evaluating the attribute 'src' at /nix/store/ym3msp3kqzjgv7nicd8zb7pfpqy4d86n-source/pkgs/rust/generated/Cargo.nix:581:9:

while evaluating the attribute 'source' at /nix/store/ym3msp3kqzjgv7nicd8zb7pfpqy4d86n-source/pkgs/rust/crate2nix.nix:6:3:

access to URI 'https://github.com/kolloch/crate2nix.git' is forbidden in restricted mode

ERROR:nur.update:repository kolloch failed to evaluate: kolloch does not evaluate:

Allow specifying branch in repos.json

Currently nur is hardcoded, as far as I can tell, to use the master branch of whatever repo is being pointed to. It would be nice to allow choosing another branch.

Pinning nixpkgs

Before submitting my repository to the NUR, I had a question with regards to pinning. My repository's default.nix takes pkgs as an argument, as usual. However, one derivation packages a Python module written in Rust (using pyo3 and pyo3-pack). In this case I need to:

  • Pin nixpkgs to a recent unstable. All the other derivations for Rust software in my repository uses carnix. However, here I need buildRustPackage since it works in combination with pyo3-pack. However, due to NixOS/nixpkgs#60668 , I need to pin buildRustPackage to get the same cargoSha256 hashes on NixOS 19.03 and unstable.
  • Currently pyo3 uses features that are only available in nightly Rust versions. So, I need to use the package set from the Mozilla overlay to get a specific Rust nightly.

Is such selective pinning within specific derivations acceptable?

Any plans for flakes?

I know flakes haven't stablized or been merged yet, but I'm wondering if there is any idea or plan to implement NUR as a flake now or in the future?

Perhaps we could use this issue to track need changes to do so.

[nur-search] repo does evaluate when generating nur-combined but does not evaluate on nur-search update

It seems that nur-combined and the nur-search update uses different evaluation techniques or inputs as it happened to be that my repo was evaluating correctly and therefore being copied into nur-combined but the nur-search updater was unable to evaluate the packages.

The issue was that one of my nur packages was using go_1_12 which was not available in the nur-search updater.
changing my package definition from using go_1_12 to go_1_14 resulted in a successful evaluation and an update of the nur-search.

The failed nur-search evaluation: https://travis-ci.com/github/nix-community/NUR/jobs/349152716

What is the reference Nixpkgs?

Users can include their repo's with expressions. User A might build and test against 18.03, whereas user B tests against master, and user C something else. So, what should be the reference Nixpkgs? Or should there not be any?

NUR is nixpkgs-extras

Imagine if we could strip nixpkgs to the bare minimum. Any package that is a leaf dependency could be moved to NUR. Some times a whole package set like Gnome3 or KDE5 could also be moved here.

Repository syntax change

With the merging of #27, a new syntax for repositories is desired. While the old syntax will still work just fine as of now, it has problems with NixOS modules, so it would be good to get away from it. Users will get a warning about that when they use repos with the old syntax:

    NUR repository ${prettyName} is using the deprecated callPackage syntax which
    might result in infinite recursion when used with NixOS modules.

Note that the installation instructions changed as well. The old way works just fine if you don't intend to use it on NixOS, but for the future the new way should be preferred.

The following repositories should be updated:

Migration and new features

Now your main default.nix file should only take one argument, namely pkgs. So if you had something like this before:

{ callPackage, stdenv }: {
  foo = callPackage ./foo;
  bar = stdenv.mkDerivation { /* ... */ };
}

The new syntax looks like this:

{ pkgs }: {
  foo = pkgs.callPackage ./foo;
  bar = pkgs.stdenv.mkDerivation { /* ... */ };
}

This now allows you to provide usable NixOS modules and overlays (by convention in the modules/overlays attributes):

{ pkgs }: {
  foo = pkgs.callPackage ./foo;
  modules.xserver = { pkgs, config, lib, ... }: {
    services.xserver.enable = true;
  };
  overlays.hello = self: super: {
    hello = super.hello.override { ... };
  };
}

You need to make sure to not evaluate the pkgs argument for modules. This will give an error when somebody tries to use the module from NUR:

{ pkgs }: with pkgs; {
  foo = callPackages ./foo;
  modules.bar = { ... };
}

Why isn't NUR managed as a channel?

I'm a new Nix user and I came across NUR while trying to set up nixify.

My main question is, why isn't NUR structured as a Nix channel? That is, why do we need to set it up using all this (seemingly non-standard) import stuff? Seems to me (as a new user) like that's what the nix-channel tool was made for. Or more broadly, what's the rationale for NUR's distribution mechanism?

Thanks for all your work!

if NUR has lock file, maybe combined repository should be provided/generated?

Basically once a particular NUR revision is fetched, exploring each of the contained repositories requires an additional fetch-- which is another delay and unless pre-fetched breaks the use of nix search/nix-env -qa and prevents tab-completion in a shell ).

Not a huge problem maybe but after running into this a few times I can't help but feel that pointing my config at a combination of evertyone's repository (esp if done by a travis job such that XZ can be used instead of gzip...) would provide a much better experience and generally still be small enough to be very fast.

To mitigate this issue I've also added my own repo directly in my config (no eval checks but hopefully I will be forgiving of myself if I break things :P).

Maybe this is not a direction NUR wants to pursue, but maybe it is! Let's discuss and sort out what sounds good to everyone.

Thanks!

Reviewed channel/revision

Since we have now IRC notification we could add a bot to mark revisions as reviewed.
This would result in advancing a reviewed channel.
During the review we would verify there was no obvious malicious code added to NUR.
With the current update frequency/amount this should be feasible and we should be able to review
changes multiple times a day.

[nur-ci] raises error in prescence of pkgs.replaceDependency

Packages based on pkgs.replaceDependency in a nur-repo/default.nix raise a NUR-CI error but work locally when incriminated nur-repo is use thanks overriding with repoOverrides .

The following in nur-repo/default.nix

bs-slurm = pkgs.replaceDependency {
     drv = slurm-multiple-slurmd;
     oldDependency = pkgs.glibc;
     newDependency = glibc-batsky;
   };

Gives the NUR-CI error:

INFO:nur.update:Evaluate repository kapack
error: while evaluating anonymous function at /nix/store/qvzj27il1373gki369jm3zg2vzr9xg69-nixpkgs-20.03pre204216.cc6cf0a96a6/nixpkgs/pkgs/build-support/replace-dependency.nix:20:1, called from /nix/store/2x2q6y0rps9sml7ff0z3g80k2za55f6h-source/default.nix:65:14:
cannot import '/nix/store/rp3n56hnxp85widn75hlj08f9gbk4yp2-references.nix', since path '/nix/store/6nkfqg35rr5if36lm9lzz8bdvb9fsc98-references.nix.drv' is not valid, at /nix/store/qvzj27il1373gki369jm3zg2v

Nur doesn't work with git-annex(ed) repository

I just realized my nur repository wasn't there anymore. It turns out it fails during the CI with the following.

trying https://gitlab.com/api/v4/projects/vdemeester%2Fhome/repository/archive.tar.gz?sha=ffd5ed1d584e8102c8a692e0069f1a6b63e890b7
unpacking source archive /build/archive.tar.gz?sha=ffd5ed1d584e8102c8a692e0069f1a6b63e890b7
ERROR:nur.combine:Failed to updated repository vdemeester
Traceback (most recent call last):
  File "/nix/store/72fbwiqf7hxqqm501nv9w0jxf3bncyhm-nur/lib/python3.7/site-packages/nur/combine.py", line 137, in update_combined
    combined_repo, repo, repos_path
  File "/nix/store/72fbwiqf7hxqqm501nv9w0jxf3bncyhm-nur/lib/python3.7/site-packages/nur/combine.py", line 83, in update_combined_repo
    repo = commit_repo(repo, message, path)
  File "/nix/store/72fbwiqf7hxqqm501nv9w0jxf3bncyhm-nur/lib/python3.7/site-packages/nur/combine.py", line 54, in commit_repo
    copy_tree(repo_source(repo.name), tmp.name)
  File "/nix/store/2dcsn57cgaxs92ha5swihrab0g3l2h6g-python3-3.7.7/lib/python3.7/distutils/dir_util.py", line 159, in copy_tree
    verbose=verbose, dry_run=dry_run))
  File "/nix/store/2dcsn57cgaxs92ha5swihrab0g3l2h6g-python3-3.7.7/lib/python3.7/distutils/dir_util.py", line 159, in copy_tree
    verbose=verbose, dry_run=dry_run))
  File "/nix/store/2dcsn57cgaxs92ha5swihrab0g3l2h6g-python3-3.7.7/lib/python3.7/distutils/dir_util.py", line 163, in copy_tree
    dry_run=dry_run)
  File "/nix/store/2dcsn57cgaxs92ha5swihrab0g3l2h6g-python3-3.7.7/lib/python3.7/distutils/file_util.py", line 105, in copy_file
    "can't copy '%s': doesn't exist or not a regular file" % src)
distutils.errors.DistutilsFileError: can't copy '/nix/store/sx9q3vg2vpccj4bfqgygbbkc7ck8rm07-source/docs/images/2020-02-29-14-41-59.png': doesn't exist or not a regular file

This file (docs/images/2020-02-29-14-41-59.png) is a link to .git/annex/โ€ฆ which is indeed a dead link on the CI. My configuration specifies a file (in pkgs) and this docs folder is never used during building the packages.

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.