modules/betanin: init
This commit is contained in:
		| @@ -2,6 +2,7 @@ | |||||||
|   amdgpu-common = ./services/hardware/amdgpu-common.nix; |   amdgpu-common = ./services/hardware/amdgpu-common.nix; | ||||||
|   amdgpu-fan = ./services/hardware/amdgpu-fan.nix; |   amdgpu-fan = ./services/hardware/amdgpu-fan.nix; | ||||||
|   amdgpu-pwm = ./services/hardware/amdgpu-pwm.nix; |   amdgpu-pwm = ./services/hardware/amdgpu-pwm.nix; | ||||||
|  |   betanin = ./services/web-apps/betanin.nix; | ||||||
|   dunst = ./services/x11/dunst.nix; |   dunst = ./services/x11/dunst.nix; | ||||||
|   radeon-profile-daemon = ./services/hardware/radeon-profile-daemon.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