diff --git a/flake.lock b/flake.lock index 1153f74..7567fb2 100644 --- a/flake.lock +++ b/flake.lock @@ -428,6 +428,31 @@ "type": "github" } }, + "python-flexseal": { + "inputs": { + "flake-utils": [ + "stable-diffusion-webui-nix", + "flake-utils" + ], + "nixpkgs": [ + "stable-diffusion-webui-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1751898758, + "narHash": "sha256-8EmTPdfOymvvHhmHYWiyO3cwZ4gtLo5uBFm3CU5vySo=", + "owner": "Janrupf", + "repo": "python-flexseal", + "rev": "af318e1fd047abbefcc68d0292a4d902179c95fe", + "type": "github" + }, + "original": { + "owner": "Janrupf", + "repo": "python-flexseal", + "type": "github" + } + }, "root": { "inputs": { "dedupe_flake-compat": "dedupe_flake-compat", @@ -447,6 +472,7 @@ "nur": "nur", "nvf": "nvf", "sops-nix": "sops-nix", + "stable-diffusion-webui-nix": "stable-diffusion-webui-nix", "stylix": "stylix", "systems": "systems", "text": "text" @@ -472,6 +498,30 @@ "type": "github" } }, + "stable-diffusion-webui-nix": { + "inputs": { + "flake-utils": [ + "dedupe_flake-utils" + ], + "nixpkgs": [ + "nixpkgs" + ], + "python-flexseal": "python-flexseal" + }, + "locked": { + "lastModified": 1751899247, + "narHash": "sha256-bh6xwc24Rv0YE4grKXvj+kmXmydns+OrlWn4WLnJSY4=", + "owner": "janrupf", + "repo": "stable-diffusion-webui-nix", + "rev": "d5ba5dccd190b0ded17f9c4a23dc7665c6dc2eae", + "type": "github" + }, + "original": { + "owner": "janrupf", + "repo": "stable-diffusion-webui-nix", + "type": "github" + } + }, "stylix": { "inputs": { "base16": "base16", diff --git a/flake.nix b/flake.nix index 5462c59..7736b6b 100644 --- a/flake.nix +++ b/flake.nix @@ -15,6 +15,17 @@ systems.url = "github:nix-systems/default"; # nixos-unstable provides a binary cache for all packages. nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + # home-manager manages our user packages and dotfiles + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + # the nix user repository for mainly firefox extensions + nur = { + url = "github:nix-community/NUR"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-parts.follows = "flake-parts"; + }; # impermanence provides a nice abstraction over linking files from /persist impermanence.url = "github:nix-community/impermanence"; # flake-parts lets us define flake modules. @@ -65,24 +76,13 @@ }; }; - ### HOME-MANAGER ### + ### FLAKES ### - # home-manager manages our user packages and dotfiles - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; # nix-index-database indexes the nixpkgs binaries for use with comma nix-index-database = { url = "github:nix-community/nix-index-database"; inputs.nixpkgs.follows = "nixpkgs"; }; - # the nix user repository for mainly firefox extensions - nur = { - url = "github:nix-community/NUR"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.flake-parts.follows = "flake-parts"; - }; # nvf provides modules to wrap neovim nvf = { url = "github:notashelf/nvf"; @@ -94,6 +94,12 @@ mnw.follows = "dedupe_mnw"; }; }; + # provides comfy ui and sdwebui services + stable-diffusion-webui-nix = { + url = "github:janrupf/stable-diffusion-webui-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-utils.follows = "dedupe_flake-utils"; + }; ### DEDUPE ### diff --git a/nix/lib/services.nix b/nix/lib/services.nix index 879551d..a836682 100644 --- a/nix/lib/services.nix +++ b/nix/lib/services.nix @@ -18,14 +18,33 @@ in mkHost = domain: if isRootDomain domain then domain else mkWildcardDomain (mkRootDomain domain); mkWebApp = { + config, name, defaultPort, persistDirs ? [ ], - serviceConfig ? { }, extraOptions ? { }, + extraConfig ? { }, }: let cfg = config.server.web-apps.${name}; + networkingConfig = + { + config, + cfg, + name, + }: + mkIf (cfg.domain != "") { + assertions = singleton { + assertion = config.server.web-servers.nginx.enable; + message = "You must enable a web server if you want to set server.web-apps.${name}.domain."; + }; + server.ddns.domains = singleton (mkRootDomain cfg.domain); + server.web-servers.nginx.proxies = singleton { + source = cfg.domain; + target = "http://${config.hostname}:${toString cfg.port}"; + }; + }; + in { options.server.web-apps.${name} = { @@ -41,20 +60,10 @@ in inherit persistDirs; networking.firewall = mkIf cfg.openFirewall { allowedTCPPorts = singleton cfg.port; }; } - (mkIf (cfg.domain != "") { - assertions = singleton { - assertion = config.server.web-servers.nginx.enable; - message = "You must enable a web server if you want to set server.web-apps.${name}.domain."; - }; - server.networking.ddns.domains = singleton (mkRootDomain cfg.domain); - server.web-servers.nginx.proxies = singleton { - source = cfg.domain; - target = "http://${config.hostname}:${toString cfg.port}"; - }; - }) - serviceConfig - cfg.extraCfg + (networkingConfig { inherit config cfg name; }) + extraConfig ]); }; + }; } diff --git a/nix/manifest.nix b/nix/manifest.nix index ef39862..069377e 100644 --- a/nix/manifest.nix +++ b/nix/manifest.nix @@ -23,6 +23,7 @@ } ]; }; + extraCfg.server.web-apps.comfy-ui.enable = true; }; apollo = { graphical = false; diff --git a/nix/modules/server/web-apps/comfy-ui.nix b/nix/modules/server/web-apps/comfy-ui.nix new file mode 100644 index 0000000..738e2e5 --- /dev/null +++ b/nix/modules/server/web-apps/comfy-ui.nix @@ -0,0 +1,34 @@ +{ + lib, + config, + inputs, + ... +}: +let + inherit (lib.lists) singleton; + inherit (config.flake.lib.services) mkWebApp; +in +{ + flake.modules.nixos.default = + { config, ... }: + let + upstreamCfg = config.services.comfyUi; + in + mkWebApp { + inherit config; + name = "comfy-ui"; + defaultPort = 8188; + persistDirs = singleton { + directory = upstreamCfg.dataDir; + inherit (upstreamCfg) user group; + mode = "777"; + }; + extraConfig.services.comfyUi = { + enable = true; + listenHost = "0.0.0.0"; + }; + } + // { + imports = [ inputs.stable-diffusion-webui-nix.nixosModules.default ]; + }; +}