main
  1{
  2  desktop,
  3  config,
  4  pkgs,
  5  lib,
  6  ...
  7}:
  8{
  9  imports = [
 10    (./. + "/${desktop}.nix")
 11
 12    ../programs/nix-ld.nix
 13    ../services/pipewire.nix
 14    ../hardware/yubikey.nix
 15  ];
 16  # Enable Plymouth and surpress some logs by default.
 17  boot = {
 18    initrd.systemd.enable = true;
 19    plymouth.enable = true;
 20    kernelParams = [
 21      # The 'splash' arg is included by the plymouth option
 22      "quiet"
 23      "loglevel=3"
 24      "rd.udev.log_priority=3"
 25      "vt.global_cursor_default=0"
 26    ];
 27  };
 28
 29  hardware.graphics.enable = true;
 30
 31  # Enable location services
 32  location.provider = "geoclue2";
 33
 34  environment.systemPackages = with pkgs; [
 35    bat # cat
 36    cyme # lsusb
 37    dig
 38    eza # ls
 39    fd # find
 40    duf # df
 41    ripgrep
 42    desktop-file-utils
 43  ];
 44
 45  fonts = {
 46    fontDir.enable = true;
 47    enableGhostscriptFonts = true;
 48    packages = with pkgs; [
 49      # cascadia-code
 50      corefonts
 51      dejavu_fonts
 52      # emojione
 53      feh
 54      # fira
 55      # fira-code
 56      # fira-code-symbols
 57      # fira-mono
 58      font-awesome
 59      go-font
 60      hack-font
 61      # inconsolata
 62      jetbrains-mono
 63      liberation_ttf
 64      monaspace
 65      nerd-fonts.jetbrains-mono
 66      nerd-fonts.monaspace
 67      # nerd-fonts.inconsolata
 68      # nerd-fonts.fira-code
 69      # nerd-fonts.fira-mono
 70      # nerd-fonts.caskaydia-cove
 71      # nerd-fonts.caskaydia-mono
 72      nerd-fonts.overpass
 73      nerd-fonts.ubuntu
 74      nerd-fonts.ubuntu-mono
 75      nerd-fonts.ubuntu-sans
 76      noto-fonts
 77      noto-fonts-cjk-sans
 78      noto-fonts-color-emoji
 79      overpass
 80      symbola
 81      twemoji-color-font
 82      ubuntu-classic
 83      unifont
 84      recursive
 85      # Maple Mono (Ligature TTF unhinted)
 86      maple-mono.truetype
 87      # Maple Mono NF (Ligature unhinted)
 88      maple-mono.NF-unhinted
 89      # Maple Mono NF CN (Ligature unhinted)
 90      maple-mono.NF-CN-unhinted
 91    ];
 92
 93    # Use fonts specified by user rather than default ones
 94    enableDefaultPackages = false;
 95
 96    # TODO configure thoses
 97    # fontconfig = {
 98    #   enable = true;
 99    #   defaultFonts = {
100    #     serif = [
101    #       "${theme.fonts.default.name}"
102    #       "${theme.fonts.emoji.name}"
103    #     ];
104    #     sansSerif = [
105    #       "${theme.fonts.default.name}"
106    #       "${theme.fonts.emoji.name}"
107    #     ];
108    #     monospace = [ "${theme.fonts.monospace.name}" ];
109    #     emoji = [ "${theme.fonts.emoji.name}" ];
110    #   };
111    # };
112  };
113
114  services = {
115    envfs.enable = true;
116    power-profiles-daemon.enable = true;
117    upower.enable = true;
118    udisks2.enable = true;
119
120    # Make `/run/user/X` larger0
121    logind.settings.Login = {
122      RuntimeDirectorySize = "20%";
123    };
124  };
125
126  # Clear out user's download weekly
127  systemd.tmpfiles.rules =
128    let
129      mkTmpDirs = n: u: [
130        "d ${u.home}/desktop 0755 ${n} ${u.group} -"
131        "d ${u.home}/desktop/downloads 0700 ${n} ${u.group} 7d"
132      ];
133    in
134    lib.concatLists (
135      lib.mapAttrsToList mkTmpDirs (lib.filterAttrs (_: u: u.isNormalUser) config.users.extraUsers)
136    );
137}