Compare commits

...

3 commits

5 changed files with 126 additions and 26 deletions

50
flake.lock generated
View file

@ -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",

View file

@ -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 ###

View file

@ -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
]);
};
};
}

View file

@ -23,6 +23,7 @@
}
];
};
extraCfg.server.web-apps.comfy-ui.enable = true;
};
apollo = {
graphical = false;

View file

@ -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 ];
};
}