jellyfin/flake.nix
2025-11-29 18:58:56 +01:00

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);
};
}