{ 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 { confinement.enable = true; unitConfig.ConditionPathExists = [ "%S/boddle/boddle.toml" "%S/boddle/boddle.db" ]; serviceConfig.ExecStart = lib.getExe pkgs.boddle; serviceConfig.WorkingDirectory = "%S/boddle"; serviceConfig.StateDirectory = "boddle"; serviceConfig.DynamicUser = true; serviceConfig.BindPaths = [ "%S/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"; mainProgram = "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-s++UG+w+0JMZ9CL5fkICi2fUQIGug6NmObVzr/LIifg="; }; }; 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; }); }; }