/ system / nixos / desktop.nix
desktop.nix
  1  {
  2    config,
  3    lib,
  4    pkgs,
  5    ...
  6  }:
  7  with pkgs;
  8  let
  9    cfg = config.dusk.system.nixos.desktop;
 10  
 11    inherit (config.dusk) username;
 12    inherit (config.dusk.folders) home;
 13    inherit (lib) mkForce mkIf;
 14  
 15    terminal = config.dusk.terminal.default;
 16  in
 17  {
 18    imports = [
 19      ./gaming
 20      ./gnome
 21      ./hyprland
 22    ];
 23  
 24    config = mkIf cfg.enable {
 25      environment = {
 26        sessionVariables = {
 27          # Enable Wayland support on most Electron applications
 28          NIXOS_OZONE_WL = "1";
 29  
 30          # Enable newer freetype features
 31          FREETYPE_PROPERTIES = "truetype:interpreter-version=40";
 32  
 33          BROWSER = config.dusk.defaults.browser;
 34          TERMINAL = terminal;
 35  
 36          QT_QPA_PLATFORM = "wayland";
 37          SDL_VIDEODRIVER = "wayland";
 38          CLUTTER_BACKEND = "wayland";
 39          XDG_SESSION_TYPE = "wayland";
 40        };
 41  
 42        systemPackages = with pkgs; [
 43          brave
 44          discord
 45          easyeffects
 46          element-desktop
 47          firefox
 48          fractal
 49          helvum
 50          inkscape
 51          obs-studio
 52          obsidian
 53          qpwgraph
 54          telegram-desktop
 55          todoist-electron
 56          vlc
 57          wl-clipboard-rs
 58          zed-editor
 59  
 60          # Fonts
 61          cantarell-fonts
 62          dejavu_fonts
 63          noto-fonts
 64          source-code-pro
 65          source-sans
 66        ];
 67      };
 68  
 69      fonts.fontconfig = {
 70        enable = true;
 71  
 72        antialias = true;
 73  
 74        hinting = {
 75          enable = true;
 76          autohint = false;
 77          style = "slight";
 78        };
 79  
 80        subpixel = {
 81          lcdfilter = "default";
 82          rgba = "rgb";
 83        };
 84      };
 85  
 86      hardware.graphics.enable = true;
 87  
 88      home-manager.users.${config.dusk.username} = {
 89        programs.brave = {
 90          enable = true;
 91          commandLineArgs = [
 92            "--enable-features=VaapiVideoDecodeLinuxGL"
 93            "--use-gl=angle"
 94            "--use-angle=gl"
 95            "--ozone-platform=wayland"
 96          ];
 97        };
 98      };
 99  
100      programs.gnupg.agent.pinentryPackage = pkgs.pinentry-all;
101  
102      security.rtkit.enable = true;
103  
104      services = {
105        pulseaudio.enable = mkForce false;
106  
107        pipewire = {
108          enable = true;
109          socketActivation = true;
110  
111          alsa = {
112            enable = true;
113            support32Bit = true;
114          };
115  
116          jack.enable = true;
117          pulse.enable = true;
118        };
119  
120        syncthing = {
121          enable = true;
122  
123          user = username;
124          dataDir = "${home}/Sync";
125        };
126      };
127    };
128  }