2022-09-25 22:15:27 +02:00
|
|
|
{
|
2022-11-14 00:39:41 +01:00
|
|
|
description = "A NixOS flake providing a Pi-hole container & NixOS module for running it in a (rootless) podman container.";
|
2022-09-25 22:15:27 +02:00
|
|
|
|
|
|
|
|
inputs = {
|
|
|
|
|
nixpkgs.url = "nixpkgs/nixpkgs-unstable";
|
|
|
|
|
|
|
|
|
|
flake-utils.url = "github:numtide/flake-utils";
|
2022-10-28 18:51:18 +02:00
|
|
|
|
2022-10-29 14:09:43 +02:00
|
|
|
linger = {
|
|
|
|
|
url = "github:mindsbackyard/linger-flake";
|
|
|
|
|
inputs.flake-utils.follows = "flake-utils";
|
|
|
|
|
};
|
2022-09-25 22:15:27 +02:00
|
|
|
};
|
|
|
|
|
|
2022-10-28 18:51:18 +02:00
|
|
|
outputs = { self, nixpkgs, flake-utils, linger }: with flake-utils.lib; eachSystem (with system; [ x86_64-linux aarch64-linux ]) (curSystem:
|
2022-09-25 22:15:27 +02:00
|
|
|
let
|
|
|
|
|
pkgs = nixpkgs.legacyPackages.${curSystem};
|
|
|
|
|
|
|
|
|
|
imageInfo = {
|
2022-12-04 21:49:03 +01:00
|
|
|
${system.x86_64-linux}.pihole = import ./pihole-image-info.amd64.nix;
|
|
|
|
|
${system.aarch64-linux}.pihole = import ./pihole-image-info.arm64.nix;
|
2022-09-25 22:15:27 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
piholeImage = pkgs.dockerTools.pullImage imageInfo.${curSystem}.pihole;
|
|
|
|
|
|
|
|
|
|
in {
|
|
|
|
|
packages = {
|
|
|
|
|
inherit piholeImage;
|
|
|
|
|
default = piholeImage;
|
|
|
|
|
};
|
|
|
|
|
|
2022-10-28 18:51:18 +02:00
|
|
|
nixosModules.default = (import ./modules/pihole-container.factory.nix) {
|
|
|
|
|
piholeFlake = self;
|
|
|
|
|
lingerFlake = linger;
|
|
|
|
|
};
|
2022-10-04 00:19:12 +02:00
|
|
|
|
2022-09-25 22:15:27 +02:00
|
|
|
devShells.default = let
|
2022-11-14 00:39:41 +01:00
|
|
|
imageName = "pihole/pihole";
|
2022-09-25 22:15:27 +02:00
|
|
|
updatePiholeImageInfoScript = pkgs.writeShellScriptBin "update-pihole-image-info" ''
|
2022-12-04 21:49:03 +01:00
|
|
|
while [[ $# -gt 0 ]]; do
|
|
|
|
|
case $1 in
|
|
|
|
|
--arch)
|
|
|
|
|
ARCH="$2"
|
|
|
|
|
if [[ ($ARCH != 'amd64') && ($ARCH != 'arm64') ]]; then
|
|
|
|
|
echo '--arch must be either "amd64" or "arm64"'
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
shift # past argument
|
|
|
|
|
shift # past value
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
echo "Unknown option $1"
|
|
|
|
|
exit 1
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
if [[ -z "$ARCH" ]]; then
|
|
|
|
|
echo 'You must provide the "--arch [amd64|arm64]" option to specify which Pi-hole image should be updated.'
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
2022-09-25 22:15:27 +02:00
|
|
|
INSPECT_RESULT=`skopeo inspect "docker://${imageName}:latest"`
|
|
|
|
|
IMAGE_DIGEST=`echo $INSPECT_RESULT | jq '.Digest'`
|
|
|
|
|
LATEST_LABEL=`echo $INSPECT_RESULT | jq '.Labels."org.opencontainers.image.version"'`
|
|
|
|
|
|
2022-12-04 21:49:03 +01:00
|
|
|
IMAGE_INFO=`nix-prefetch-docker --os linux --arch "$ARCH" --image-name '${imageName}' --image-digest "$IMAGE_DIGEST" --final-image-tag "$LATEST_LABEL"`
|
|
|
|
|
echo "$IMAGE_INFO" >"pihole-image-info.$ARCH.nix"
|
2022-09-25 22:15:27 +02:00
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
in pkgs.mkShell {
|
|
|
|
|
packages = with pkgs; [
|
2022-10-16 18:21:35 +02:00
|
|
|
dig
|
2022-09-25 22:15:27 +02:00
|
|
|
skopeo
|
|
|
|
|
jq
|
2022-12-04 21:49:03 +01:00
|
|
|
nix-prefetch-docker
|
2022-09-25 22:15:27 +02:00
|
|
|
updatePiholeImageInfoScript
|
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|