{...}: { flake.homeModules.home-manager-protonvpn = { lib, pkgs, config, ... }: let cfg = config.programs.protonvpn-gui; package = if builtins.compareVersions pkgs.protonvpn-gui.version cfg.minVersion < 0 then pkgs.protonvpn-gui.overrideAttrs (old: { version = cfg.minVersion; src = pkgs.fetchFromGitHub { owner = "ProtonVPN"; repo = "proton-vpn-gtk-app"; tag = "v${cfg.minVersion}"; hash = cfg.minVersionHash; }; }) else pkgs.protonvpn-gui; in { options.programs.protonvpn-gui = { enable = lib.mkEnableOption "enable protonvpn"; minVersion = lib.mkOption { type = lib.types.str; default = "4.15.1"; description = "Minimum version of protonvpn-gui to use. If nixpkgs has a lower version, it will be overridden."; }; minVersionHash = lib.mkOption { type = lib.types.str; default = "sha256-mWQW/KR2zQxSMkcu5k79H3TNATmFB6J2vgFhgXNpM2s="; description = "Source hash for the minimum version override."; }; }; config = lib.mkIf cfg.enable (lib.mkMerge [ { home.packages = [ package ]; } ( lib.mkIf config.impermanence.enable { home.persistence."${config.impermanence.persistencePath}" = { directories = [ "${config.xdg.configHome}/protonvpn" "${config.xdg.configHome}/Proton" ]; }; } ) ]); }; }