nixos/corteza: init
This commit is contained in:
		
							parent
							
								
									5de2d661db
								
							
						
					
					
						commit
						c721b7dfe9
					
				| @ -579,6 +579,7 @@ | ||||
|   ./services/development/athens.nix | ||||
|   ./services/development/blackfire.nix | ||||
|   ./services/development/bloop.nix | ||||
|   ./services/development/corteza.nix | ||||
|   ./services/development/distccd.nix | ||||
|   ./services/development/gemstash.nix | ||||
|   ./services/development/hoogle.nix | ||||
|  | ||||
							
								
								
									
										113
									
								
								nixos/modules/services/development/corteza.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								nixos/modules/services/development/corteza.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,113 @@ | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| let | ||||
|   cfg = config.services.corteza; | ||||
| in | ||||
| { | ||||
|   options.services.corteza = { | ||||
|     enable = lib.mkEnableOption "Corteza, a low-code platform"; | ||||
|     package = lib.mkPackageOption pkgs "corteza" { }; | ||||
| 
 | ||||
|     address = lib.mkOption { | ||||
|       type = lib.types.str; | ||||
|       default = "0.0.0.0"; | ||||
|       description = '' | ||||
|         IP for the HTTP server. | ||||
|       ''; | ||||
|     }; | ||||
|     port = lib.mkOption { | ||||
|       type = lib.types.port; | ||||
|       default = 80; | ||||
|       description = '' | ||||
|         Port for the HTTP server. | ||||
|       ''; | ||||
|     }; | ||||
|     openFirewall = lib.mkOption { | ||||
|       type = lib.types.bool; | ||||
|       default = false; | ||||
|       example = true; | ||||
|       description = "Whether to open ports in the firewall."; | ||||
|     }; | ||||
| 
 | ||||
|     user = lib.mkOption { | ||||
|       type = lib.types.str; | ||||
|       default = "corteza"; | ||||
|       description = "The user to run Corteza under."; | ||||
|     }; | ||||
| 
 | ||||
|     group = lib.mkOption { | ||||
|       type = lib.types.str; | ||||
|       default = "corteza"; | ||||
|       description = "The group to run Corteza under."; | ||||
|     }; | ||||
| 
 | ||||
|     settings = lib.mkOption { | ||||
|       type = lib.types.submodule { | ||||
|         freeformType = lib.types.attrsOf lib.types.str; | ||||
|         options = { | ||||
|           HTTP_WEBAPP_ENABLED = lib.mkEnableOption "webapps" // { | ||||
|             default = true; | ||||
|             apply = toString; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
|       default = { }; | ||||
|       description = '' | ||||
|         Configuration for Corteza, will be passed as environment variables. | ||||
|         See <https://docs.cortezaproject.org/corteza-docs/2024.9/devops-guide/references/configuration/server.html>. | ||||
|       ''; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf cfg.enable { | ||||
|     assertions = [ | ||||
|       { | ||||
|         assertion = !cfg.settings ? HTTP_ADDR; | ||||
|         message = "Use `services.corteza.address` and `services.corteza.port` instead."; | ||||
|       } | ||||
|     ]; | ||||
| 
 | ||||
|     warnings = lib.optional (!cfg.settings ? DB_DSN) '' | ||||
|       A database connection string is not set. | ||||
|       Corteza will create a temporary SQLite database in memory, but it will not persist data. | ||||
|       For production use, set `services.corteza.settings.DB_DSN`. | ||||
|     ''; | ||||
| 
 | ||||
|     networking.firewall.allowedTCPPorts = lib.mkIf cfg.openFirewall [ cfg.port ]; | ||||
| 
 | ||||
|     systemd.services.corteza = { | ||||
|       description = "Corteza"; | ||||
|       documentation = [ "https://docs.cortezaproject.org/" ]; | ||||
|       after = [ "network-online.target" ]; | ||||
|       wants = [ "network-online.target" ]; | ||||
|       wantedBy = [ "multi-user.target" ]; | ||||
|       environment = { | ||||
|         HTTP_WEBAPP_BASE_DIR = "./webapp"; | ||||
|         HTTP_ADDR = "${cfg.address}:${toString cfg.port}"; | ||||
|       } // cfg.settings; | ||||
|       path = [ pkgs.dart-sass ]; | ||||
|       serviceConfig = { | ||||
|         WorkingDirectory = cfg.package; | ||||
|         User = cfg.user; | ||||
|         Group = cfg.group; | ||||
|         ExecStart = "${lib.getExe cfg.package} serve-api"; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     users = { | ||||
|       groups.${cfg.group} = { }; | ||||
|       users.${cfg.user} = { | ||||
|         inherit (cfg) group; | ||||
|         isSystemUser = true; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   meta.maintainers = with lib.maintainers; [ | ||||
|     prince213 | ||||
|   ]; | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Sizhe Zhao
						Sizhe Zhao