Make repository importable as NUR (including an overlay)

https://github.com/nix-community/NUR is a Nix community project that
aims to make out of tree derivations more easily discoverable and
accessible to Nix users. Converting the nix-bitcoin repo to conform to
that style is a minor change and enhances reusability of its
components. For instance, I could slap on the clightning module more
easily onto my existing bitcoin node without having to redeploy the
whole as nixops driven installation. Having the repo in NUR style
would make that easier.
This commit is contained in:
Clemens Fruhwirth 2019-03-28 09:13:04 +01:00
parent 95b42b62a8
commit 687bf8017d
5 changed files with 80 additions and 21 deletions

14
default.nix Normal file
View File

@ -0,0 +1,14 @@
{ pkgs ? import <nixpkgs> {} }:
{
# 'lib', 'modules' and 'overlays' are special, see
# https://github.com/nix-community/NUR for more.
modules = import ./modules; # NixOS modules
nodeinfo = pkgs.callPackage ./pkgs/nodeinfo { };
banlist = pkgs.callPackage ./pkgs/banlist { };
lightning-charge = pkgs.callPackage ./pkgs/lightning-charge { };
nanopos = pkgs.callPackage ./pkgs/nanopos { };
spark-wallet = pkgs.callPackage ./pkgs/spark-wallet { };
electrs = pkgs.callPackage ./pkgs/electrs { };
liquidd = pkgs.callPackage ./pkgs/liquidd { };
}

13
modules/default.nix Normal file
View File

@ -0,0 +1,13 @@
{
bitcoind = ./bitcoind.nix;
clightning = ./clightning.nix;
default = ./default.nix;
electrs = ./electrs.nix;
lightning-charge = ./lightning-charge.nix;
liquid = ./liquid.nix;
nanopos = ./nanopos.nix;
nix-bitcoin = ./nix-bitcoin.nix;
nix-bitcoin-pkgs = ./nix-bitcoin-pkgs.nix;
nix-bitcoin-webindex = ./nix-bitcoin-webindex.nix;
spark-wallet = ./spark-wallet.nix;
}

View File

@ -1,35 +1,19 @@
{ config, pkgs, ... }:
let
nixpkgs-pinned = import ../pkgs/nixpkgs-pinned.nix;
nixpkgs-unstable = import nixpkgs-pinned.nixpkgs-unstable { };
# Custom packages
nodeinfo = pkgs.callPackage ../pkgs/nodeinfo { };
banlist = pkgs.callPackage ../pkgs/banlist { };
lightning-charge = pkgs.callPackage ../pkgs/lightning-charge { };
nanopos = pkgs.callPackage ../pkgs/nanopos { };
spark-wallet = pkgs.callPackage ../pkgs/spark-wallet { };
electrs = pkgs.callPackage ../pkgs/electrs { };
liquidd = pkgs.callPackage ../pkgs/liquidd { };
let
nixpkgs-pinned = import ../pkgs/nixpkgs-pinned.nix;
nixpkgs-unstable = import nixpkgs-pinned.nixpkgs-unstable { };
in {
disabledModules = [ "services/security/tor.nix" ];
imports = [
(nixpkgs-pinned.nixpkgs-unstable + "/nixos/modules/services/security/tor.nix")
];
nixpkgs.overlays = [ (import ../overlay.nix) ];
nixpkgs.config.packageOverrides = pkgs: {
# Use bitcoin and clightning from unstable
bitcoin = nixpkgs-unstable.bitcoin.override { };
altcoins.bitcoind = nixpkgs-unstable.altcoins.bitcoind.override { };
clightning = nixpkgs-unstable.clightning.override { };
# Add custom packages
inherit nodeinfo;
inherit banlist;
inherit lightning-charge;
inherit nanopos;
inherit spark-wallet;
inherit electrs;
inherit liquidd;
};
}

27
non-broken.nix Normal file
View File

@ -0,0 +1,27 @@
# This file filters out all the broken packages from your package set.
# It's what gets built by CI, so if you correctly mark broken packages as
# broken your CI will not try to build them and the non-broken packages will
# be added to the cache.
{ pkgs ? import <nixpkgs> {} }:
let filterSet =
(f: g: s: builtins.listToAttrs
(map
(n: { name = n; value = builtins.getAttr n s; })
(builtins.filter
(n: f n && g (builtins.getAttr n s))
(builtins.attrNames s)
)
)
);
in filterSet
(n: !(n=="lib"||n=="overlays"||n=="modules")) # filter out non-packages
(p: (builtins.isAttrs p)
&& !(
(builtins.hasAttr "meta" p)
&& (builtins.hasAttr "broken" p.meta)
&& (p.meta.broken)
)
)
(import ./default.nix { inherit pkgs; })

21
overlay.nix Normal file
View File

@ -0,0 +1,21 @@
# You can use this file as a nixpkgs overlay.
# It's useful in the case where you don't want to add the whole NUR namespace
# to your configuration.
self: super:
let filterSet =
(f: g: s: builtins.listToAttrs
(map
(n: { name = n; value = builtins.getAttr n s; })
(builtins.filter
(n: f n && g (builtins.getAttr n s))
(builtins.attrNames s)
)
)
);
in filterSet
(n: !(n=="lib"||n=="overlays"||n=="modules")) # filter out non-packages
(p: true) # all packages are ok
(import ./default.nix { pkgs = super; })