anchor.diff:          '';
         };
   
  +      plugin = mkOption {
  +        type = types.nullOr types.str;
  +        default = null;
  +        example = "\${pkgs.shadowsocks-v2ray-plugin}/bin/v2ray-plugin";
  +        description = ''
  +          SIP003 plugin for shadowsocks
  +        '';
  +      };
  +
  +      pluginOpts = mkOption {
  +        type = types.str;
  +        default = "";
  +        example = "server;host=example.com";
  +        description = ''
  +          Options to pass to the plugin if one was specified
  +        '';
  +      };
       };
   
     };
  
positive.code:         '';
        };
  
        encryptionMethod = mkOption {
          type = types.str;
          default = "chacha20-ietf-poly1305";
  
negative.code:     method = cfg.encryptionMethod;
      mode = cfg.mode;
      user = "nobody";
      fast_open = cfg.fastOpen;
    } // optionalAttrs (cfg.plugin != null) {
      plugin = cfg.plugin;
      plugin_opts = cfg.pluginOpts;
    } // optionalAttrs (cfg.password != null) {
      password = cfg.password;
    };
  
    configFile = pkgs.writeText "shadowsocks.json" (builtins.toJSON opts);
  
  