nixos-config/modules/nixos/_private/suites/desktop.nix
Gabriel Arazas 3cafa9f613
nixos/suites/desktop: modularize submodules into dedicated profiles
It's practically enabled every time so why not set them as profiles instead.
The structure should be enough for some control over what is enabled.
2024-01-25 18:52:07 +08:00

146 lines
4.1 KiB
Nix

# This is where extra desktop goodies can be found.
# As a note, this is not where you set the aesthetics of your graphical sessions.
# That can be found in the `themes` module.
{ config, lib, pkgs, options, ... }:
let cfg = config.suites.desktop;
in {
options.suites.desktop = {
enable =
lib.mkEnableOption "basic desktop-related services and default programs";
cleanup.enable = lib.mkEnableOption "activation of various cleanup services";
autoUpgrade.enable = lib.mkEnableOption "auto-upgrade service with this system";
};
config = lib.mkIf cfg.enable (lib.mkMerge [
({
# Enable Flatpak for additional options for installing desktop applications.
services.flatpak.enable = true;
xdg.portal.enable = true;
environment.etc =
let
urls = {
"flathub" = {
url = "https://flathub.org/repo/flathub.flatpakrepo";
hash = "sha256-M3HdJQ5h2eFjNjAHP+/aFTzUQm9y9K+gwzc64uj+oDo=";
};
"flathub-beta" = {
url = "https://flathub.org/beta-repo/flathub-beta.flatpakrepo";
hash = "sha256-WCyuPJ+dRjnwJ976/m+jO9oKOk1EEpDZJq2For4PcgY=";
};
"gnome-nightly" = {
url = "https://nightly.gnome.org/gnome-nightly.flatpakrepo";
hash = "sha256-rFluVpCvgs1iy7YKVnkPh3p6YuF4orbVuOhLUUFRyYM=";
};
"kdeapps" = {
url = "https://distribute.kde.org/kdeapps.flatpakrepo";
hash = "sha256-dCF9QQYMmqMuzwAS+HYoPAAtwfzO7aVCl8s4RwhneqI=";
};
};
in
lib.mapAttrs'
(name: remote:
lib.nameValuePair
"flatpak/remotes.d/${name}.flatpakrepo"
{ source = pkgs.fetchurl remote; })
urls;
programs.extra-container.enable = true;
# Enable font-related options for more smoother and consistent experience.
fonts.fontconfig.enable = true;
# Run unpatched binaries with these!
programs.nix-ld = {
enable = true;
libraries =
let
xorgLibs = with pkgs.xorg; [
libX11
libXScrnSaver
libXcomposite
libXcursor
libXdamage
libXext
libXfixes
libXi
libXrandr
libXrender
libXtst
libxcb
libxkbfile
libxshmfence
];
commonLibs = with pkgs; [
alsa-lib
cairo
freetype
dbus
icu
libGL
libnotify
mesa
nss
pango
pipewire
];
in
commonLibs ++ xorgLibs ++ options.programs.nix-ld.libraries.default;
};
environment.systemPackages = with pkgs; [
steam-run # For the heathens that still uses FHS.
];
# Enable running GNOME apps outside GNOME.
programs.dconf.enable = true;
# Enable virtual camera.
boot.kernelModules = [ "v4l2loopback" ];
})
(lib.mkIf cfg.cleanup.enable {
# Weekly garbage collection of Nix store.
nix.gc = {
automatic = true;
persistent = true;
dates = "weekly";
options = "--delete-older-than 7d";
};
# Run the optimizer.
nix.optimise = {
automatic = true;
dates = [ "weekly" ];
};
# Journal settings for retention.
services.journald.extraConfig = ''
MaxRetentionSec="3 month"
'';
})
(lib.mkIf cfg.autoUpgrade.enable {
system.autoUpgrade = {
enable = true;
flake = "github:foo-dogsquared/nixos-config";
allowReboot = true;
persistent = true;
rebootWindow = {
lower = "22:00";
upper = "00:00";
};
dates = "weekly";
flags = [
"--update-input"
"nixpkgs"
"--commit-lock-file"
"--no-write-lock-file"
];
randomizedDelaySec = "1min";
};
})
]);
}