Faits : A. Par contrat de bail à loyer prenant effet le 1 er août 2006, A._ (ci-après: le bailleur) a cédé à B._ (ci-après: la locataire) l'usage de deux appartements de deux pièces aux premier et deuxième étages d'un immeuble situé à Aigle (VD). Le loyer mensuel net était de 1'140 fr., auquel s'ajoutaient 160 fr. d'acompte pour les frais de chauffage et d'eau chaude. La locataire s'est engagée à "garanti[r] l'accès à l'appartement du 2 ème étage pour des travaux de création de deux chambres sous le toit (combles) ". Le 6 juillet 2011, la locataire s'est plainte au bailleur de ce que le mur du salon était gorgé d'eau et s'effritait en raison d'une probable infiltration d'eau depuis la toiture. Elle a demandé une remise en état. Par transaction du 6 mars 2012 passée devant l'autorité de conciliation, les parties ont convenu de fixer le loyer mensuel net à 1'120 fr. dès le 1 er août 2012; le bailleur s'est par ailleurs engagé à supprimer les infiltrations d'eau et à assainir les murs dégradés par ces infiltrations sur les deux étages, dans un délai de trois mois. En janvier 2013, deux architectes mandatés par la locataire ont constaté la présence de nombreuses zones humides sur les murs et les planchers des locaux, voire de la pourriture (champignons) et le décollement des enduits de fond. Ils ont imputé ces problèmes à l'état des ferblanteries et de la couverture de la toiture. Le 19 novembre 2013, la locataire a mis le bailleur en demeure de remédier aux problèmes d'humidité dans un délai de trente jours, faute de quoi elle consignerait le loyer. Le 30 décembre 2013, elle a effectivement consigné le loyer brut afférent au mois de janvier 2014. B. B.a. La locataire a cité le bailleur en conciliation par requête du 6 janvier 2014. La commission de salubrité de la commune d'Aigle a visité les locaux et le galetas de l'immeuble le 28 février 2014. Dans son rapport du 14 mars 2014, elle a confirmé l'existence des dégâts d'eau invoqués par la locataire, qu'elle a attribués au mauvais état de la ferblanterie et aux nombreux jours constatés entre les tuiles. La locataire a déposé une demande le 27 mars 2014 devant le Tribunal des baux du canton de Vaud. Dans ses dernières conclusions, elle a exigé que cette autorité ordonne au bailleur de faire effectuer sans délai les travaux nécessaires pour mettre fin aux infiltrations d'eau puis de remettre en état les murs endommagés, respectivement que l'autorité saisie réduise le loyer mensuel net de 40% dès le début du contrat (1 er août 2006) et condamne le bailleur à restituer les loyers versés en trop, les montants dus étant "déconsignés" en faveur de la locataire. Le bailleur a conclu au rejet de l'action. Il a opposé en compensation une créance de 30'860 fr. correspondant au manque à gagner prétendument subi pour avoir été empêché de créer deux chambres dans les combles. B.b. Le contrat de bail a pris fin le 31 juillet 2014, après que le bailleur eut résilié celui-ci et que l'autorité de conciliation eut émis le 16 mai 2012 une proposition de jugement qui est entrée en force. Les appartements ont été restitués le 25 juillet 2014. B.c. Statuant par jugement du 5 septembre 2014, la Présidente du Tribunal des baux a constaté que la conclusion I tendant à l'élimination des défauts était privée d'objet. Elle a réduit le loyer mensuel net de 30% pour la période du 6 juillet 2011 au 31 juillet 2014. En conséquence, elle a condamné le bailleur à payer 12'454 fr. 85 à la locataire à titre de loyers versés en trop compte tenu de la réduction accordée. Enfin, elle a ordonné que les loyers consignés soient entièrement libérés en faveur de la locataire, en paiement partiel du montant dû. La Présidente a constaté en fait que deux des quatre pièces et une des deux cuisines étaient touchées par des infiltrations d'eau. Elle a notamment relevé que dans le salon de l'appartement au premier étage, un des angles était fortement atteint; le plâtre s'était effrité et était tombé par plaques sur quasiment toute la hauteur du mur. Des taches de moisissure oranges étaient apparues. En outre, certaines planches du plafond s'étaient affaissées au centre du salon, de sorte que des fuites d'eau survenaient en cas d'intempéries. Dans l'appartement du deuxième étage, des cloques et traces de moisissure oranges entachaient toute la hauteur d'un des murs du salon. Des traces de coulure d'eau brunâtres s'étendaient sur toute la hauteur d'un autre mur de cette pièce, sur une largeur de plus d'un mètre. Par ailleurs, au plafond de la cuisine se trouvait un tuyau d'évacuation d'une ancienne cheminée par lequel s'écoulait de l'eau en cas d'averse. Une odeur d'humidité était perceptible dans ces pièces. La locataire devait constamment prendre des dispositions en plaçant des récipients aux deux endroits où s'écoulaient des fuites d'eau en cas de pluie ou fonte de neige. L'intensité des nuisances variait en fonction des conditions climatiques. B.d. Le bailleur a déféré cette décision à la Cour d'appel civile du Tribunal cantonal vaudois, qui l'a confirmée par arrêt du 4 juin 2015. C. Le 20 août 2015, le bailleur, agissant par son avocat, a saisi le Tribunal fédéral d'un recours constitutionnel subsidiaire, dans lequel il requiert à titre principal que le loyer des deux appartements ne soit pas réduit et que les loyers consignés soient entièrement libérés en sa faveur, toute autre conclusion de la locataire étant rejetée. Subsidiairement, il conclut à ce que le loyer soit réduit de 10% au maximum et à ce que sa dette soit compensée avec la créance qu'il détient contre la locataire, les loyers consignés étant libérés en sa faveur. Le recourant a par ailleurs demandé l'effet suspensif. La locataire intimée a déposé une réponse concluant au rejet du recours. L'autorité précédente s'est référée à son arrêt. Par courrier du 14 septembre 2015, le conseil du bailleur a fait savoir qu'il avait résilié son mandat. La présidente de la cour de céans a informé les parties par lettre du 22 septembre 2015 qu'elle n'ordonnait pas d'échange d'écritures supplémentaire; les éventuelles observations devaient être déposées jusqu'au 7 octobre 2015. A cette date, le bailleur a déposé diverses pièces, une "liste d'explications" signée en son nom propre et une copie de son mémoire du 20 août 2015 annotée de sa main, modifiant notamment les conclusions. Il requiert désormais qu'aucune réduction de loyer ne soit accordée, que les loyers consignés soient libérés en sa faveur (référence étant faite à une poursuite du 9 septembre 2015) et que la locataire soit condamnée à payer 2'608 fr. pour les charges et l'électricité. A titre subsidiaire, il conclut à ce que la dette de 34'080 fr. dont la locataire lui est redevable "reste ouverte" et à ce que le solde des loyers consignés soit entièrement libéré en sa faveur (référence étant faite à une poursuite du 9 septembre 2015). La locataire s'est déterminée. L'effet suspensif a été accordé par ordonnance présidentielle du 27 octobre 2015.