{ pkgs, config, lib, __findFile, ... }@args: with lib; let cfg = config.module.package; package = import args; in { options = { module.package = { common.enable = mkEnableOption "Common Apps."; core.enable = mkEnableOption "Core apps."; creative.enable = mkEnableOption "Creative Apps."; desktop.enable = mkEnableOption "Desktop Apps."; dev.enable = mkEnableOption "Dev Apps."; extra.enable = mkEnableOption "Extra Apps."; gaming.enable = mkEnableOption "Gaming Apps."; }; }; config = mkMerge [ # Core apps. (mkIf cfg.core.enable { environment.systemPackages = package.core; programs = { adb.enable = true; git.enable = true; java = { enable = true; package = pkgs.corretto21; }; }; services = { udisks2.enable = true; }; }) # Common apps. (mkIf cfg.common.enable { environment.systemPackages = package.common; 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"; }; services.gvfs.enable = true; # Chromium config. environment.etc = let chromium = import args; in { "chromium/initial_preferences".source = lib.mkForce chromium.preferences; "chromium/policies/managed/extra.json".source = lib.mkForce chromium.policy; }; }) # Desktop apps. (mkIf cfg.desktop.enable { environment.systemPackages = package.desktop; }) # Gaming. (mkIf cfg.gaming.enable { hardware.graphics = let packages = with pkgs; [ dxvk gamescope pkgs.mangohud vkd3d ]; in { extraPackages = packages; extraPackages32 = packages; }; programs.steam.enable = true; environment.systemPackages = package.gaming; }) # Creative. (mkIf cfg.creative.enable { environment.systemPackages = package.creative; }) # Development. (mkIf cfg.dev.enable { environment.systemPackages = package.dev; }) # Extras. (mkIf cfg.extra.enable { environment.systemPackages = package.extra; }) ]; }