1{
2 pkgs,
3 config,
4 lib,
5 ...
6}: {
7 imports = [./gnome];
8
9 options.myNixOS.desktop.enable = lib.mkOption {
10 default =
11 config.myNixOS.desktop.gnome.enable or config.myNixOS.desktop.hyprland.enable
12 or config.myNixOS.desktop.kde.enable;
13 description = "Desktop environment configuration.";
14 type = lib.types.bool;
15 };
16
17 config = lib.mkIf config.myNixOS.desktop.enable {
18 boot = {
19 consoleLogLevel = 0;
20 initrd.verbose = false;
21 plymouth.enable = true;
22 };
23
24 environment = {
25 sessionVariables.NIXOS_OZONE_WL = "1";
26
27 # stem darkening for prettier fonts
28 variables = {
29 FREETYPE_PROPERTIES = "autofitter:no-stem-darkening=0 autofitter:darkening-parameters=500,0,1000,500,2500,500,4000,0 cff:no-stem-darkening=0 type1:no-stem-darkening=0 t1cid:no-stem-darkening=0";
30 QT_NO_SYNTHESIZED_BOLD = 1;
31 };
32 };
33
34 # other font settings
35 fonts = {
36 fontconfig = {
37 enable = true;
38 includeUserConf = true;
39 subpixel = {
40 lcdfilter = "none";
41 rgba = "none";
42 };
43 antialias = true;
44 hinting = {
45 enable = true;
46 style = "slight";
47 autohint = false;
48 };
49
50 # have i told you how much i despise fontconfig. literally zero reason to pick bitmap fonts over noto fonts but it always does.
51 localConf = ''
52 <?xml version="1.0"?>
53 <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
54 <fontconfig>
55 <description>Reject bitmap fonts except bitmap emoji fonts</description>
56 <!-- Reject bitmap fonts -->
57 <selectfont>
58 <rejectfont>
59 <pattern>
60 <patelt name="outline"><bool>false</bool></patelt>
61 <patelt name="scalable"><bool>false</bool></patelt>
62 </pattern>
63 </rejectfont>
64 </selectfont>
65 </fontconfig>
66 '';
67 };
68
69 packages = with pkgs; [
70 noto-fonts
71 noto-fonts-cjk-sans
72 noto-fonts-emoji
73 noto-fonts-color-emoji
74 nerd-fonts.jetbrains-mono
75 ];
76 };
77
78 home-manager.sharedModules = [
79 {
80 config.myHome.desktop.enable = true;
81 }
82 ];
83
84 programs.system-config-printer.enable = true;
85
86 services = {
87 avahi = {
88 enable = true;
89 nssmdns4 = true;
90 openFirewall = true;
91
92 publish = {
93 enable = true;
94 addresses = true;
95 userServices = true;
96 workstation = true;
97 };
98 };
99
100 gnome.gnome-keyring.enable = true;
101 gvfs.enable = true; # Mount, trash, etc.
102 libinput.enable = true;
103
104 pipewire = {
105 enable = true;
106
107 alsa = {
108 enable = true;
109 support32Bit = true;
110 };
111
112 pulse.enable = true;
113 };
114
115 printing.enable = false;
116
117 pulseaudio = {
118 support32Bit = true;
119 };
120
121 system-config-printer.enable = true;
122
123 xserver = {
124 enable = true;
125 excludePackages = with pkgs; [xterm];
126 };
127 };
128
129 system.nixos.tags = ["desktop"];
130 };
131}