# main algorithm configuration
main:
    # monitor interface to use
    iface: wlx00c0ca916886
    # command to run to bring the mon interface up in case it's not up already
    mon_start_cmd: null
    mon_stop_cmd: null
    mon_max_blind_epochs: 1000
    # log file
    log: /var/log/pwnagotchi.log
    # if true, will not restart the wifi module
    no_restart: false
    # access points to ignore
    whitelist:
        - Casa-2.4
        - LOTS_OF_MALWARE
    # if not null, filter access points by this regular expression
    filter: null
    # cryptographic key for identity
    pubkey: /etc/ssh/ssh_host_rsa_key.pub  

ai:
    enabled: true
    path: /root/pwnagotchi.nn
    # 1.0 - laziness = probability of start training
    laziness: 0.1
    # how many epochs to train on
    epochs_per_episode: 50
    # NN hyper-parameters
    params:
        # discount factor
        gamma: 0.99
        # the number of steps to run for each environment per update
        n_steps: 1
        # value function coefficient for the loss calculation
        vf_coef: 0.25
        # entropy coefficient for the loss calculation
        ent_coef: 0.01
        # maximum value for the gradient clipping 
        max_grad_norm: 0.5
        # the learning rate
        learning_rate: 0.0010
        # rmsprop decay parameter
        alpha: 0.99
        # rmsprop epsilon
        epsilon: 0.00001
        # the verbosity level: 0 none, 1 training information, 2 tensorflow debug
        verbose: 1
        # type of scheduler for the learning rate update ('linear', 'constant', 'double_linear_con', 'middle_drop' or 'double_middle_drop')
        lr_schedule: 'constant'
        # the log location for tensorboard (if None, no logging)
        tensorboard_log: null

personality:
    # advertise our presence
    advertise: true
    # perform a deauthentication attack to client stations in order to get full or half handshakes
    deauth: true
    # send association frames to APs in order to get the PMKID
    associate: true
    # list of channels to recon on, or empty for all channels
    channels: []
    # minimum WiFi signal strength in dBm
    min_rssi: -200
    # number of seconds for wifi.ap.ttl
    ap_ttl: 120
    # number of seconds for wifi.sta.ttl
    sta_ttl: 300
    # time in seconds to wait during channel recon
    recon_time: 30
    # number of inactive epochs after which recon_time gets multiplied by recon_inactive_multiplier
    max_inactive_scale: 2
    # if more than max_inactive_scale epochs are inactive, recon_time *= recon_inactive_multiplier
    recon_inactive_multiplier: 2
    # time in seconds to wait during channel hopping if activity has been performed
    hop_recon_time: 10
    # time in seconds to wait during channel hopping if no activity has been performed
    min_recon_time: 5
    # maximum amount of deauths/associations per BSSID per session
    max_interactions: 3
    # maximum amount of misses before considering the data stale and triggering a new recon
    max_misses_for_recon: 5
    # number of active epochs that triggers the excited state
    excited_num_epochs: 10
    # number of inactive epochs that triggers the bored state
    bored_num_epochs: 15 
    # number of inactive epochs that triggers the sad state
    sad_num_epochs: 25

# ui configuration
ui:
    # ePaper display can update every 3 secs anyway
    fps: 0.3
    display:
        enabled: false
        rotation: 180
        video:
            address: '0.0.0.0'
            enabled: true
            port: 8080

# twitter bot data
twitter:
    enabled: false
    consumer_key: aaa
    consumer_secret: aaa
    access_token_key: aaa
    access_token_secret: aaa

# bettercap rest api configuration
bettercap:
    # api scheme://hostname:port username and password
    scheme: http
    hostname: localhost
    port: 8081
    username: user
    password: pass
    # folder where bettercap stores the WPA handshakes, given that 
    # wifi.handshakes.aggregate will be set to false and individual
    # pcap files will be created in order to minimize the chances
    # of a single pcap file to get corrupted
    handshakes: /root/handshakes
    # events to mute in bettercap's events stream
    silence:
        - ble.device.new
        - ble.device.lost
        - ble.device.disconnected
        - ble.device.connected
        - ble.device.service.discovered
        - ble.device.characteristic.discovered
        - wifi.client.new
        - wifi.client.lost
        - wifi.client.probe
        - wifi.ap.new
        - wifi.ap.lost
        - mod.started