{ pkgs, ... } @args: let
	mangohud = import ./mangohud args;
in {
	imports = [
		./firefox
	];

	xdg.mime.defaultApplications = {
		# Use `file -i file.txt` to find file mime type.
		# Use `xdg-mime query default "text/plain"` to find default app.
		"application/pdf" = "org.gnome.Evince.desktop";
		"application/vnd.openxmlformats-officedocument.*" = "onlyoffice-desktopeditors.desktop";
		"audio/*" = "mpv.desktop";
		"image/*" = "org.gnome.Loupe.desktop";
		"text/*"  = "nvim.desktop";
		"video/*" = "mpv.desktop";
	};

	hardware.opengl = let
		packages = with pkgs; [
			dxvk
			gamescope
			pkgs.mangohud
			vkd3d
		];
	in {
		extraPackages   = packages;
		extraPackages32 = packages;
	};

	environment = {
		systemPackages = with pkgs; [
			adwsteamgtk              # Steam GTK theme. Need to run the app to apply.
			appimage-run             # Tool to run .AppImage files in NixOS.
			aseprite                 # Pixel Art draw app. WARNING: Always builds from source.
			blanket                  # Sounds generator.
			blender-hip              # Blender with HiP support.
			calibre                  # Book library manager.
			evince                   # Document viewer.
			gimp                     # Image manipulation program.
			gnome.adwaita-icon-theme # GTK icons.
			gnome.gnome-calculator   # Calculator.
			gnome.gnome-font-viewer  # Font viewer.
			gnome.nautilus           # File manager.
			godot_4                  # Game development engine.
			jellyfin-media-player    # Jellyfin client (self-hosted Netflix).
			loupe                    # Image viewer.
			obs-studio               # Streaming/recording app.
			onlyoffice-bin           # Office documents app suite.
			steam-run                # Run native apps in Steam environment, like Minecraft. For Windows games use Bottles.
			tor-browser              # Privacy browser.

			android-studio jetbrains.idea-community           # JetBrans IDEs.
			bottles dxvk gamescope pkgs.mangohud vkd3d wine64 # Gaming!
			(mpv.override {scripts = [mpvScripts.mpris];})    # Media player.
		];

		variables = {
			# MangoHud.
			MANGOHUD = "1";
			MANGOHUD_CONFIGFILE  = pkgs.writeText "mangoConfig" mangohud.config;
			MANGOHUD_PRESETSFILE = pkgs.writeText "mangoPreset" mangohud.presets;

			# Proton.
			WINEFSYNC = "1";

			# GTK apps compat.
			GTK_CSD = 0;
		};
	};

	# File manager file previews.
	services.gnome.sushi.enable = true;

	# File manager network features.
	services.gvfs.enable = true;

	# Special packages.
	programs.steam.enable = true;
}