at master 1.8 kB view raw
1{ 2 config, 3 lib, 4 pkgs, 5 ... 6}: 7let 8 cfg = config.services.graphical-desktop; 9 xcfg = config.services.xserver; 10 dmcfg = config.services.displayManager; 11in 12{ 13 options = { 14 services.graphical-desktop.enable = 15 lib.mkEnableOption "bits and pieces required for a graphical desktop session" 16 // { 17 default = xcfg.enable || dmcfg.enable; 18 defaultText = lib.literalExpression "(config.services.xserver.enable || config.services.displayManager.enable)"; 19 internal = true; 20 }; 21 }; 22 23 config = lib.mkIf cfg.enable { 24 environment = { 25 # localectl looks into 00-keyboard.conf 26 etc."X11/xorg.conf.d/00-keyboard.conf".text = '' 27 Section "InputClass" 28 Identifier "Keyboard catchall" 29 MatchIsKeyboard "on" 30 Option "XkbModel" "${xcfg.xkb.model}" 31 Option "XkbLayout" "${xcfg.xkb.layout}" 32 Option "XkbOptions" "${xcfg.xkb.options}" 33 Option "XkbVariant" "${xcfg.xkb.variant}" 34 EndSection 35 ''; 36 systemPackages = with pkgs; [ 37 nixos-icons # needed for gnome and pantheon about dialog, nixos-manual and maybe more 38 xdg-utils 39 ]; 40 }; 41 42 fonts.enableDefaultPackages = lib.mkDefault true; 43 44 hardware.graphics.enable = lib.mkDefault true; 45 46 programs.gnupg.agent.pinentryPackage = lib.mkOverride 1100 pkgs.pinentry-gnome3; 47 48 services.speechd.enable = lib.mkDefault true; 49 50 services.pipewire = { 51 enable = lib.mkDefault true; 52 pulse.enable = lib.mkDefault true; 53 alsa.enable = lib.mkDefault true; 54 }; 55 56 systemd.defaultUnit = lib.mkIf (xcfg.autorun || dmcfg.enable) "graphical.target"; 57 58 xdg = { 59 autostart.enable = true; 60 menus.enable = true; 61 mime.enable = true; 62 icons.enable = true; 63 }; 64 }; 65}