Packages for a useful DE

Hi guys,

I am trying NixOS and I tried to find a list somewhere for the packages I need to declare (or options I need to enable) for a “standard/useful/normal user” desktop.

By standard, I mean: Full GUI, sound, networking, printing, scanning, media playback, …

Lets just say I want parity with a Windows install.

There are some bits in the generated nix config and the manual but not everything, and it is difficult to know what you are missing.

If you have a link to such package/option list, please share.

Thank you

There’s no way for us to know exactly what you need, but:

Then find any corresponding options in NixOS and enable/configure them.
In the case of programs that don’t need any system-level config and don’t have an existing .enable option, you can add them to environment.systemPackages or such.

1 Like

Thanks for replying and the info.

That (checking NixOS wikis, checking Arch wiki, seeing dotfiles on gh, and watching yt) is what I have been doing, but it is difficult to know what you actually need/want.

Is libSomething for their tiling wm or is it actually important for everyone? Gotta read the wiki for every pkg (if present). You can’t tell without having a deep understanding of the OS and I am just trying to get an OS working in the first place!

People who have waded the sea before you have a lot of knowledge and I want their recommendations so that I don’t drown!

And you don’t have to know exactly what I need. You can be like:

  • This package is for sound./You don’t need a package for sound as it is covered by the X option in NixOS. That other package is for mouse cursor to work.

I will try on my own when I am trying to do something specific or esoteric (or gonna ask for specific advice), but a simple list that covers the basics to get you going is like good book recommendations. Everyone has their opinion but with a few upvoted lists you can get a good idea of what you want to read next!

The configuration.nix comments actually do this, but only as examples.

NixOS as a desktop - NixOS Wiki might be helpful to you

1 Like

Thanks for the link.

What I got from here is that I shouldn’t need to declare any packages to get a functioning (although basic) DE. Right?

Contrary to most other Linux distributions, it is trivial to install and change desktop environments in NixOS. For example, the use of a fully functional GNOME desktop environment only requires the following lines in your configuration.

In theory, yes that’s all you need to do.

Different NixOS modules (things that you set .enable = true, instead of just chucking into systemPackages) vary in how comprehensively they set something up.

If you really want to know what an option does, one general option is to go to https://search.nixos.org/options, click on the options search (instead of package search) and click on where something is declared:

Doing this allows you to see things like:

services.system-config-printer.enable = (lib.mkIf config.services.printing.enable (mkDefault true));

which tells you that just enabling gnome will not enable printing. Instead, if you enable both gnome and printing, then the gnome system configuration for the printer will be enabled.

In practice, people will probably figure out that their printer isn’t working, go to the wiki page for printing, set the appropriate services.printing.enable = true; and move on with their lives, completely unaware that the gnome module was doing this magic in the background.

1 Like

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.

2 Likes

Very informative and helpful. Thanks guys.

The basics for someone expecting a windows equivalent are indeed largely covered by getting GNOME set up, that’s kind of the point of GNOME.

If you realize something is missing afterwards, yep, feel free to ask here (or look through the arch wiki for whatever it is you’re missing).

That’s fair.

In my defense, however, the first thing I was greeted with after the install was an absent cursor. So I assumed all these people on YouTube declaring system packages must know something I don’t! :sweat_smile:

That’s most likely a bug :smiley: In fairness, if you’re looking for a completely seamless OOTB experience, NixOS isn’t where you want to start.

Linux Mint, Fedora and Debian are the distros that have active new user experience teams that focus entirely on making sure someone coming from Windows can just put a USB stick in their machine, click install, and have a fully-featured desktop 30 minutes later.

There are some other, more niche distros with a similar focus. I find Bazzite particularly interesting because most people I know considering a switch would probably mostly use their computers for games. But generally I’d recommend sticking to the older ones because larger communities and history mean more easy-to-come-by help for newbies when troubleshooting.

NixOS in either case most certainly is not the distro to pick if you want to have a complete zero-effort configuration from day one. We don’t have teams that focus on this workflow. There are pretty reasonable tests to assert it mostly works, but there’s not much effort put into making sure the workflow is actually suitable for someone who doesn’t already know how to do everything. The installation guide isn’t regularly rewritten, either, and AFAIK the release flow doesn’t include anything about making sure the newcomer experience is good.

NixOS is amazing if you want to have a high initial effort, next-to-zero future effort system that you can tweak to your exact desires - Gentoo and Arch don’t even come close. But that inherently requires actually knowing what you want.

My point is; don’t expect it to be perfect without some effort.

Could be. I think you, as a hypothetical distro maintainer, could cover 80% of use cases with 10% effort. The remaining 20% might not be worth it. I agree with you there. That is what the GUI installer tries to do.

I didn’t start with NixOS but I am sold on the idea of declarative system management, at least for the major/stable options. One of the problems of the previous distros (Mint and Manjaro) and Windows with me was that, after a few months, the system is a mess, since I try a lot of software. I try to mitigate that by using sandboxing/VMs but it doesn’t always work and it is disjointed from your workflow.

I like that you can keep you system neat and lean with NixOS, and I wish there was something for config files thrown around the home dir. I like Android in that regard.

The second thing is the extensive package repo. My experience with the next best thing (AUR) was not ideal.

Even better! That’s what I like. But I don’t want to micromanage everything. Just the stuff I care about. :slight_smile:

You might like hjem - it’s like home-manager, but you’re intended to set up configuration management by hand. Wrapping applications to point them at their config in the nix store rather than dumping stuff in $HOME is indeed a cool concept, eventually I’ll switch to it :slight_smile:

That, and preservation to make sure applications only store what you actually want to be stored.

1 Like