{
  description = "OpenVPN with tunnelblick patches applied.";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";

    flake-utils.url = "github:numtide/flake-utils";

    tunnelblick = {
      url = "github:/Tunnelblick/Tunnelblick?ref=v4.0.1";
      flake = false;
    };
  };

  outputs = { self, nixpkgs, flake-utils, tunnelblick }: flake-utils.lib.eachDefaultSystem (system:
    let
      pkgs = import nixpkgs {
        inherit system;
        overlays = [ self.overlays.${system}.default ];
      };
    in
    {
      packages.default = self.packages.${system}.openvpn-tunnelblick;

      packages.openvpn-tunnelblick = pkgs.openvpn-tunnelblick;

      overlays.default = self.overlays.${system}.openvpn-tunnelblick;

      overlays.openvpn-tunnelblick =
        (self: super: {
          openvpn-tunnelblick = super.openvpn.overrideAttrs (old: {
            patches = (old.patches or [ ]) ++ [
              "${tunnelblick}/third_party/sources/openvpn/openvpn-2.6.9/patches/02-tunnelblick-openvpn_xorpatch-a.diff"
              "${tunnelblick}/third_party/sources/openvpn/openvpn-2.6.9/patches/03-tunnelblick-openvpn_xorpatch-b.diff"
              "${tunnelblick}/third_party/sources/openvpn/openvpn-2.6.9/patches/04-tunnelblick-openvpn_xorpatch-c.diff"
              "${tunnelblick}/third_party/sources/openvpn/openvpn-2.6.9/patches/05-tunnelblick-openvpn_xorpatch-d.diff"
              "${tunnelblick}/third_party/sources/openvpn/openvpn-2.6.9/patches/06-tunnelblick-openvpn_xorpatch-e.diff"
            ];
          });
        });
    });
}