{ description = "the meat (package) manager"; inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; nh.url = "github:viperML/nh"; lix = { url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"; flake = false; }; lix-module = { url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz"; inputs.nixpkgs.follows = "nixpkgs"; inputs.lix.follows = "lix"; }; src = { url = "path:src"; flake = false; }; }; outputs = { self, nixpkgs, lix-module, nh, src, ... }: let supportedSystems = ["x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; overlays = [ lix-module.overlays.default nh.overlays.default ]; }); in { packages = forAllSystems (system: let pkgs = nixpkgsFor.${system}; in { meat = pkgs.callPackage ./meat.nix { inherit src; }; }); defaultPackage = forAllSystems (system: self.packages.${system}.meat); nixosModules.meat = { pkgs, config, ... }: { options.programs.meat = with pkgs.lib; { flake = mkOption { type = with types; nullOr (either path str); default = null; description = "path to your system flake"; }; }; config = { environment.systemPackages = [self.defaultPackage.${pkgs.system}]; environment.sessionVariables = let cfg = config.programs.meat; in { FLAKE = if (cfg.flake == null) then throw "Please set the programs.meat.flake option to your system flake." else config.programs.meat.flake; }; }; }; }; }