77 lines
2.1 KiB
Nix
77 lines
2.1 KiB
Nix
{
|
|
description = "A very basic flake";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
};
|
|
|
|
outputs =
|
|
{ self, nixpkgs }:
|
|
let
|
|
inherit (nixpkgs) lib;
|
|
|
|
scan'directory = scan (name: type: if type == "directory" then name else null);
|
|
scan'regular = scan (name: type: if type == "regular" then name else null);
|
|
scan'nix =
|
|
let
|
|
stem = lib.strings.removeSuffix ".nix";
|
|
in
|
|
scan (name: type: if type == "regular" && name == "${stem name}.nix" then stem name else null);
|
|
|
|
per-pkgs = fn: builtins.mapAttrs (_: fn) nixpkgs.legacyPackages;
|
|
scan =
|
|
filter: fn: base:
|
|
let
|
|
empty = { };
|
|
create =
|
|
name: entry:
|
|
lib.optionalAttrs (name != null) {
|
|
${name} = fn name (base + "/${entry}");
|
|
};
|
|
fold =
|
|
acc: name: kind:
|
|
acc // create (filter name kind) name;
|
|
files = lib.optionalAttrs (builtins.pathExists base) (builtins.readDir base);
|
|
in
|
|
lib.attrsets.foldlAttrs fold empty files;
|
|
|
|
scope = pkgs: lib.makeScope pkgs.newScope (
|
|
self:
|
|
lib.packagesFromDirectoryRecursive {
|
|
callPackage = self.callPackage;
|
|
directory = ./package;
|
|
}
|
|
// {
|
|
jellyfin = (
|
|
self.callPackage ./package/jellyfin/package.nix {
|
|
jellyfin = pkgs.jellyfin;
|
|
}
|
|
);
|
|
}
|
|
//
|
|
lib.attrsets.mapAttrs'
|
|
(name: value: {
|
|
name = "jellyfin-plugin-${name}";
|
|
value = value;
|
|
})
|
|
(
|
|
lib.packagesFromDirectoryRecursive {
|
|
callPackage = self.callPackage;
|
|
directory = ./plugin;
|
|
}
|
|
)
|
|
);
|
|
|
|
in
|
|
{
|
|
overlay = final: scope;
|
|
|
|
legacyPackages = per-pkgs scope;
|
|
|
|
packages = per-pkgs (pkgs: lib.filterAttrs (_: lib.isDerivation) (scope pkgs));
|
|
|
|
nixosModules.default = import ./module/default.nix scope;
|
|
|
|
formatter = per-pkgs ({ nixfmt-tree, ... }: nixfmt-tree);
|
|
};
|
|
}
|