53 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, pkgs, ... }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let
 | |
|   cfg = config.services.fireqos;
 | |
|   fireqosConfig = pkgs.writeText "fireqos.conf" "${cfg.config}";
 | |
| in {
 | |
|   options.services.fireqos = {
 | |
|     enable = mkOption {
 | |
|       type = types.bool;
 | |
|       default = false;
 | |
|       description = ''
 | |
|         If enabled, FireQOS will be launched with the specified
 | |
|         configuration given in `config`.
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|     config = mkOption {
 | |
|       type = types.str;
 | |
|       default = "";
 | |
|       example = ''
 | |
|         interface wlp3s0 world-in input rate 10mbit ethernet
 | |
|           class web commit 50kbit
 | |
|             match tcp ports 80,443
 | |
| 
 | |
|         interface wlp3s0 world-out input rate 10mbit ethernet
 | |
|           class web commit 50kbit
 | |
|             match tcp ports 80,443
 | |
|       '';
 | |
|       description = ''
 | |
|         The FireQOS configuration goes here.
 | |
|       '';
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   config = mkIf cfg.enable {
 | |
|     systemd.services.fireqos = {
 | |
|       description = "FireQOS";
 | |
|       after = [ "network.target" ];
 | |
|       serviceConfig = {
 | |
|         Type = "oneshot";
 | |
|         RemainAfterExit = true;
 | |
|         ExecStart = "${pkgs.firehol}/bin/fireqos start ${fireqosConfig}";
 | |
|         ExecStop = [
 | |
|           "${pkgs.firehol}/bin/fireqos stop"
 | |
|           "${pkgs.firehol}/bin/fireqos clear_all_qos"
 | |
|         ];
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 | 
