refactor(flake-parts): initial flake-parts configuration
This commit is contained in:
		
							parent
							
								
									8f67be9e68
								
							
						
					
					
						commit
						5603001d65
					
				
					 230 changed files with 380 additions and 717 deletions
				
			
		
							
								
								
									
										111
									
								
								inputs/system/modules/base/audio/pipewire/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								inputs/system/modules/base/audio/pipewire/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,111 @@ | |||
| { config, lib, pkgs, ... }: | ||||
| 
 | ||||
| let | ||||
|   inherit (lib) mkIf; | ||||
|   inherit (lib.generators) toLua; | ||||
|   inherit (lib.lists) any elem optionals; | ||||
|   # inherit (builtins) elem; | ||||
|   hasBT = (elem "bluetooth" config.systemModules.host.hardware.features); | ||||
|   hasFunction = f: elem f config.systemModules.host.function; | ||||
| in | ||||
| 
 | ||||
| { | ||||
|   config = mkIf (any hasFunction ["workstation" "gaming" "media-server"]) { | ||||
|     hardware.pulseaudio.enable = !config.services.pipewire.enable; | ||||
|     security.rtkit.enable = config.services.pipewire.enable; | ||||
|     services.pipewire =  | ||||
|     let | ||||
|       quantum = 64; | ||||
|       rate = 48000; | ||||
|       qr = "${toString quantum}/${toString rate}"; | ||||
|     in | ||||
|     { | ||||
|       enable = true; | ||||
| 
 | ||||
|       alsa.enable = true; | ||||
|       alsa.support32Bit = true; | ||||
|       pulse.enable = true; | ||||
|       jack.enable = true; | ||||
| 
 | ||||
|       # Low latency module provided by notashelf/nyx | ||||
|       extraConfig.pipewire."99-lowlatency" = { | ||||
|         context = { | ||||
|           properties.default.clock.min-quantum = quantum; | ||||
|           modules = [ | ||||
|             { | ||||
|               name = "libpipewire-module-rtkit"; | ||||
|               flags = ["ifexists" "nofail"]; | ||||
|               args = { | ||||
|                 nice.level = -15; | ||||
|                 rt = { | ||||
|                   prio = 88; | ||||
|                   time.soft = 200000; | ||||
|                   time.hard = 200000; | ||||
|                 }; | ||||
|               }; | ||||
|             } | ||||
|             { | ||||
|               name = "libpipewire-module-protocol-pulse"; | ||||
|               args = { | ||||
|                 server.address = ["unix:native"]; | ||||
|                 pulse.min = { | ||||
|                   req = qr; | ||||
|                   quantum = qr; | ||||
|                   frag = qr; | ||||
|                 }; | ||||
|               }; | ||||
|             } | ||||
|           ]; | ||||
| 
 | ||||
|           stream.properties = { | ||||
|             node.latency = qr; | ||||
|             resample.quality = 1; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
| 
 | ||||
|       wireplumber = { | ||||
|         enable = true; | ||||
|         configPackages = let | ||||
|           matches = toLua { | ||||
|             multiline = false; | ||||
|             indent = false; | ||||
|           } [[["node.name" "matches" "alsa_output.*"]]]; | ||||
| 
 | ||||
|           apply_properties = toLua {} { | ||||
|             "audio.format" = "S32LE"; | ||||
|             "audio.rate" = rate * 2; | ||||
|             "api.alsa.period-size" = 2; | ||||
|           }; | ||||
|         in | ||||
|           [ | ||||
|             (pkgs.writeTextDir "share/lowlatency.lua.d/99-alsa-lowlatency.lua" '' | ||||
|               alsa_monitor.rules = { | ||||
|                 { | ||||
|                   matches = ${matches}; | ||||
|                   apply_properties = ${apply_properties}; | ||||
|                 } | ||||
|               } | ||||
|             '') | ||||
|           ] | ||||
|           ++ optionals hasBT [ | ||||
|             (pkgs.writeTextDir "share/bluetooth.lua.d/51-bluez-config.lua" '' | ||||
|               bluez_monitor.properties = { | ||||
|                 ["bluez5.enable-sbc-xq"] = true, | ||||
|                 ["bluez5.enable-msbc"] = true, | ||||
|                 ["bluez5.enable-hw-volume"] = true, | ||||
|                 ["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]" | ||||
|               } | ||||
|             '') | ||||
|           ]; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     systemd.user.services = { | ||||
|       pipewire.wantedBy = ["default.target"]; | ||||
|       pipewire-pulse.wantedBy = ["default.target"]; | ||||
|     }; | ||||
|   }; | ||||
| }  | ||||
| 
 | ||||
| 
 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue