{ description = "Nix flake for the activity logging script"; outputs = { nixpkgs, ... }: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; config.allowUnfree = true; }; generatePackages = args: let inherit (args) dir ext handler; in ./${dir} |> builtins.readDir |> builtins.attrNames |> builtins.filter (file: builtins.match ".*\\.${ext}$" file != null) |> builtins.map (file: rec { name = builtins.replaceStrings [ ".${ext}" ] [ "" ] file; value = handler ./${dir}/${file} name; }) |> builtins.listToAttrs; in { packages.x86_64-linux = let scriptBin = path: name: pkgs.writeScriptBin name (builtins.readFile path); in { citra = pkgs.callPackage ./pkgs/citra/default.nix { branch = "nightly"; }; pano = pkgs.callPackage ./pkgs/pano/default.nix { }; vdhcoapp = pkgs.callPackage ./pkgs/vdhcoapp/default.nix { }; } // generatePackages { dir = "pkgs"; ext = "nix"; handler = (path: name: pkgs.callPackage path { }); } // generatePackages { dir = "src/scripts"; ext = "sh"; handler = scriptBin; } // generatePackages { dir = "src/scripts"; ext = "py"; handler = scriptBin; }; }; }