modules/betanin: init
This commit is contained in:
		| @@ -2,6 +2,7 @@ | ||||
|   amdgpu-common = ./services/hardware/amdgpu-common.nix; | ||||
|   amdgpu-fan = ./services/hardware/amdgpu-fan.nix; | ||||
|   amdgpu-pwm = ./services/hardware/amdgpu-pwm.nix; | ||||
|   betanin = ./services/web-apps/betanin.nix; | ||||
|   dunst = ./services/x11/dunst.nix; | ||||
|   radeon-profile-daemon = ./services/hardware/radeon-profile-daemon.nix; | ||||
| } | ||||
|   | ||||
							
								
								
									
										114
									
								
								modules/services/web-apps/betanin.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								modules/services/web-apps/betanin.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,114 @@ | ||||
| { config, lib, pkgs, ... }: | ||||
|  | ||||
| let | ||||
|   inherit (lib) mkIf mkOption optionalAttrs types; | ||||
|   cfg = config.services.betanin; | ||||
|  | ||||
|   yaml = pkgs.formats.yaml { }; | ||||
|   configFile = | ||||
|     if (cfg.beetsConfigFile != null) | ||||
|     then cfg.beetsConfigFile | ||||
|     else yaml.generate "beets-config.yaml" cfg.beetsConfig; | ||||
|  | ||||
|   defaultUser = "betanin"; | ||||
|   defaultGroup = "betanin"; | ||||
| in | ||||
| { | ||||
|   options = { | ||||
|     services.betanin = { | ||||
|       enable = lib.mkEnableOption "betanin"; | ||||
|  | ||||
|       package = mkOption { | ||||
|         description = "Package containing betanin program."; | ||||
|         type = types.package; | ||||
|         default = pkgs.betanin or (import ../../.. { inherit pkgs; }).betanin; | ||||
|       }; | ||||
|  | ||||
|       openFirewall = mkOption { | ||||
|         description = "Open ports in the firewall for the server."; | ||||
|         type = types.bool; | ||||
|         default = false; | ||||
|       }; | ||||
|  | ||||
|       port = mkOption { | ||||
|         description = "Port to access betanin on."; | ||||
|         type = types.port; | ||||
|         default = 9393; | ||||
|       }; | ||||
|  | ||||
|       user = mkOption { | ||||
|         description = "User that the betanin program should run under."; | ||||
|         type = types.str; | ||||
|         default = defaultUser; | ||||
|       }; | ||||
|  | ||||
|       group = mkOption { | ||||
|         description = "Group that the betanin program should run under."; | ||||
|         type = types.str; | ||||
|         default = defaultGroup; | ||||
|       }; | ||||
|  | ||||
|       dataDir = mkOption { | ||||
|         description = "Directory to store application data."; | ||||
|         type = types.str; | ||||
|         default = "/var/lib/betanin"; | ||||
|       }; | ||||
|  | ||||
|       beetsConfig = mkOption { | ||||
|         description = "beets configuration."; | ||||
|         type = yaml.type; | ||||
|         default = { }; | ||||
|       }; | ||||
|  | ||||
|       beetsConfigFile = mkOption { | ||||
|         description = "beets configuration file."; | ||||
|         type = nullOr (either str path); | ||||
|         default = null; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
|  | ||||
|   config = mkIf cfg.enable { | ||||
|     assertions = [{ | ||||
|       assertion = (cfg.beetsConfig == { }) != (cfg.beetsConfigFile == null); | ||||
|       message = "either services.betanin.beetsConfig or services.betanin.beetsConfigFile is required"; | ||||
|     }]; | ||||
|  | ||||
|     networking.firwall = mkIf cfg.openFirewall { | ||||
|       allowedTCPPorts = [ cfg.port ]; | ||||
|     }; | ||||
|  | ||||
|     systemd.services.betanin = { | ||||
|       description = "Betanin service"; | ||||
|       wantedBy = [ "multi-user.target" ]; | ||||
|       after = [ "networking.target" ]; | ||||
|       environment = { | ||||
|         HOME = cfg.dataDir; | ||||
|       }; | ||||
|       serviceConfig = lib.mkMerge [ | ||||
|         { | ||||
|           User = cfg.user; | ||||
|           Group = cfg.group; | ||||
|           ExecStart = "${cfg.package}/bin/betanin --port ${cfg.port}"; | ||||
|           PrivateTmp = true; | ||||
|           Restart = "always"; | ||||
|           WorkingDirectory = cfg.dataDir; | ||||
|         } | ||||
|         (mkIf (cfg.dataDir == "/var/lib/betanin") { | ||||
|           StateDirectory = "betanin"; | ||||
|         }) | ||||
|       ]; | ||||
|     }; | ||||
|  | ||||
|     users.users = optionalAttrs (cfg.user == defaultUser) { | ||||
|       ${cfg.user} = { | ||||
|         isSystemUser = true; | ||||
|         group = cfg.group; | ||||
|       }; | ||||
|     }; | ||||
|  | ||||
|     users.groups = optionalAttrs (cfg.group == defaultGroup) { | ||||
|       ${cfg.group} = { }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user