{ description = "boddle, in Anlehnung an bottle"; outputs = { self, nixpkgs }: let module = { pkgs, lib, config, ... }: { options.services.boddle = { enable = lib.mkEnableOption "enable"; # TODO: configurability }; config.nixpkgs.overlays = [ self.overlay ]; config.systemd.services.boddle = lib.mkIf config.services.boddle.enable { script = lib.getExe pkgs.boddle; }; }; per-system = fn: builtins.mapAttrs (_: fn) nixpkgs.legacyPackages; package = pkgs: pkgs.buildGoModule { meta = { description = "boddle, in Anlehnung an bottle"; homepage = "https://git.fbs42.ddnss.de/forgejo/fbs42/boddle"; name = "boddle"; }; pname = "boddle"; version = "v0.0.1"; vendorHash = "sha256-dlQ1+skfEiPVm+IWxfwPsW8jkifo4ufZlfESbf36fFY="; src = pkgs.fetchgit { url = "https://git.fbs42.ddnss.de/forgejo/fbs42/boddle"; hash = "sha256-Dopo8qV+icaEof3699/Qfz4iuZMqgRodKKWDaH1d9R4="; }; }; devshell = pkgs: pkgs.mkShell { nativeBuildInputs = with pkgs.buildPackages; [ go ]; }; app = pkgs: { type = "app"; program = nixpkgs.lib.getExe (package pkgs); }; in { nixosModules = { default = self.nixosModules.boddle; boddle = module; }; overlay = final: prev: { boddle = package final; }; packages = per-system (pkgs: { default = package pkgs; boddle = package pkgs; }); apps = per-system (pkgs: { default = app pkgs; boddle = app pkgs; }); devShells = per-system (pkgs: { default = devshell pkgs; }); }; }