If the response variable is binary (0/1, presence/absence) there's really not much you can do other than some form of logistic regression (in R,
glm(..., family="binomial"); a negative binomial model, although it sounds like it should be good for binomial data as well, is for count data (0, 1, 2 ...), not for binary data (0/1).
Binary data can be overdispersed, but it's easier to detect if the data can be grouped in some way (e.g., all of your predictors are categorical); it looks like your predictors are continuous, which means it will be harder to investigate (and you can probably get away with not checking :-) ). If you're worried about it you could use a quasibinomial model (
family = "quasibinomial" in R)
Similarly, it doesn't make sense to worry about zero-inflation for binary data: technically speaking, zero-inflation is unidentifiable (i.e., there is no way to tell the difference between structural zeros, nest boxes that would never have birds in them, and sampling zeros, nest boxes that happen not to have birds in them because they have a low probability of occupancy).
A GAM is a generalized additive model, which can account for nonlinear patterns in continuous variables. You can fit these easily with
mgcv::gam(). It might be worth considering this option.
Checking the adequacy of a model for binary data is relatively hard; one way to check the adequacy of your model would be with the DHARMa package.