{ description = "Nix flake for the activity logging script"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05"; # sudoku-solver.url = "path:./src/sudoku-hs"; }; outputs = { nixpkgs, ... }@inputs: 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 { overlays.default = final: prev: { scrapy = prev.scrapy.overrideAttrs (old: rec { version = "2.11.2"; src = prev.fetchFromGitHub { owner = "scrapy"; repo = "scrapy"; tag = version; hash = "sha256-EaO1kQ3VSTwEW+r0kSKycOxHNTPwwCVjch1ZBrTU0qQ="; }; }); }; packages.x86_64-linux = let scriptBin = path: name: pkgs.writeScriptBin name (builtins.readFile path); pkgsBin = path: name: pkgs.callPackage path { }; in { citra = pkgs.callPackage ./pkgs/citra/default.nix { branch = "nightly"; }; torzu = pkgs.callPackage ./pkgs/torzu/package.nix { }; pano = pkgs.callPackage ./pkgs/pano/default.nix { }; mealie = pkgs.callPackage ./pkgs/mealie/package.nix { }; vdhcoapp = pkgs.callPackage ./pkgs/vdhcoapp/default.nix { }; resilio = pkgs.callPackage ./pkgs/resilio/package.nix { }; # sudoku-solver = inputs.sudoku-solver.packages.${system}.default; } // generatePackages { dir = "pkgs"; ext = "nix"; handler = pkgsBin; } // generatePackages { dir = "pkgs_pr"; ext = "nix"; handler = pkgsBin; } // generatePackages { dir = "pkgs_wip"; ext = "nix"; handler = pkgsBin; } // generatePackages { dir = "src/scripts"; ext = "sh"; handler = scriptBin; } // generatePackages { dir = "src/scripts"; ext = "py"; handler = scriptBin; }; }; }