PipeWire - NixOS Wiki covers the basic config for sound.
But the reason this gets impossible for us to anticipate is because if you start to have more advanced needs - maybe you have some bluetooth headset that needs a specific pipewire/wireplumber config, maybe you need a specific driver for a printer that doesn’t support IPP Everywhere, maybe you want to play some specific game from 2003, etc.
For me all I really needed was a basic sway config, neovim, and a web browser to get started (I’d already used these on my prior Linux box).
So that’s basically what I did (I’m omitting the bootloader stuff and automatically-generated hardware config, etc.):
{pkgs, ...}:
{
programs.sway.enable = true;
environment.systemPackages = [
pkgs.chromium
pkgs.neovim
];
}
Then as my needs became more expansive (for example, I wanted to set up streaming with OBS), I needed to add more configuration:
{
config,
pkgs,
...
}:
{
boot.extraModulePackages = [ config.boot.kernelPackages.v4l2loopback ];
environment.systemPackages = [ pkgs.obs-studio ];
security.rtkit.enable = true;
hjem.users.USER.xdg.config.files."pipewire/pipewire.conf.d/10-combine-bt-and-virtual-sink.conf".text = ''
context.modules = [
{
name = libpipewire-module-loopback
args = {
audio.position = [ FL FR ]
capture.props = {
node.name = "vsink1"
media.class = "Audio/Sink"
}
}
}
]
'';
}
(this uses my own project, hjem, for user-specific configuration.)
etc etc. It’s a process of trial-and-error.
But my mentality was to build up from a minimal base and only add things I needed.
To avoid getting overwhelmed, I suggest starting with what you absolutely 100% need on a day-to-day basis and then slowly add in the nice-to-haves. And you can ask here about specific questions, because we don’t know your day-to-day. (Well since you mentioned media playback, I personally use mpv, but I don’t know what else you need.)
Let us know what else you’re looking for and I can at least share what I use.