sLib: fork: { config, lib, pkgs, ... }: let info = { "firefox" = { name = "firefox"; base = pkgs.firefox-unwrapped; binName = "firefox"; configPath = ".mozilla/firefox"; }; "librewolf" = { name = "librewolf"; base = pkgs.librewolf-unwrapped; binName = "librewolf"; configPath = ".librewolf"; }; "floorp" = { name = "floorp"; base = pkgs.floorp-bin-unwrapped; binName = "floorp"; # TODO: test configPath = ".floorp"; # TODO: test }; } .${fork}; cfg = config.hylonix.${info.name}; geckoLib = import ./gecko-lib { inherit geckoLib info lib pkgs sLib ; }; finalConfig = geckoLib.profiles.evaluateAllProfiles cfg.profiles; buildFinal = profile: settings: let pkg = ( pkgs.wrapFirefox info.base { extraPolicies = settings.policies; extraPrefs = settings.prefs; } ); in { package = pkg; command = "${pkg}/bin/${info.binName} -P ${profile}"; }; in { options.hylonix.${info.name} = { enable = lib.mkEnableOption fork; final = lib.mkOption { type = lib.types.attrsOf ( lib.types.submodule { options = { package = lib.mkOption { type = lib.types.package; }; command = lib.mkOption { type = lib.types.str; }; }; } ); visible = false; readOnly = true; description = "Resulting browser information for this profile."; }; profiles = geckoLib.profiles.options; }; # end options config = lib.mkIf cfg.enable { inherit (finalConfig) assertions warnings; hylonix.${info.name}.final = lib.mapAttrs buildFinal finalConfig.profiles; home.file = builtins.listToAttrs finalConfig.files; home.packages = [ cfg.final.${geckoLib.profiles.getDefaultProfileName cfg.profiles}.package ]; }; # end config }