1use std::ops::Deref;
2
3use lazy_regex::regex;
4use once_cell::sync::Lazy;
5use regex::Regex;
6
7use crate::{detect, FileType, FileTypeResolver};
8
9pub(crate) struct Pattern {
10 pub(crate) resolver: FileTypeResolver,
11 pub(crate) priority: Option<isize>,
12}
13
14impl Pattern {
15 fn new(resolver: FileTypeResolver, priority: Option<isize>) -> Self {
16 Self { resolver, priority }
17 }
18
19 fn starsetf(resolver: FileTypeResolver, priority: Option<isize>) -> Self {
20 Self {
21 resolver,
22 priority: priority.or(Some(isize::MIN)),
23 }
24 }
25}
26
27#[rustfmt::skip]
28pub(crate) static PATTERN: Lazy<Vec<(bool, &'static Regex, Pattern)>> = Lazy::new(|| {
29 let mut vec = vec![
30 (true, regex!(r"^.*etc/a2ps(/.*)?\.cfg$").deref(), Pattern::new(FileTypeResolver::Static(FileType::A2ps), None)),
31 (true, regex!(r"^.*usr/share/alsa/alsa\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::AlsaConf), None)),
32 (true, regex!(r"^.*etc/asound\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::AlsaConf), None)),
33 (true, regex!(r"^.*etc/apache2/sites-.*/.*\.com$"), Pattern::new(FileTypeResolver::Static(FileType::Apache), None)),
34 (true, regex!(r"^.*etc/httpd/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Apache), None)),
35 (true, regex!(r"^.*etc/apache2/.*\.conf.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Apache), None)),
36 (true, regex!(r"^.*etc/apache2/(conf\.|mods-|sites-).*/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Apache), None)),
37 (false, regex!(r"^(access|apache2?|httpd|srm)\.conf.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Apache), None)),
38 (true, regex!(r"^.*etc/httpd/conf\..*/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Apache), None)),
39 (true, regex!(r"^.*etc/httpd/conf\.d/.*\.conf.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Apache), None)),
40 (true, regex!(r"^.*etc/httpd/(mods-|sites-).*/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Apache), None)),
41 (true, regex!(r"^.*etc/proftpd/.*\.conf.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::ApacheStyle), None)),
42 (true, regex!(r"^.*etc/proftpd/conf\..*/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::ApacheStyle), None)),
43 (false, regex!(r"^proftpd\.conf.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::ApacheStyle), None)),
44 (true, regex!(r"^.*asterisk/.*\.conf.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Asterisk), None)),
45 (true, regex!(r"^.*asterisk.*/.*voicemail\.conf.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::AsteriskVoiceMail), None)),
46 (true, regex!(r"^.*\.aptitude/config$"), Pattern::new(FileTypeResolver::Static(FileType::AptConf), None)),
47 (false, regex!(r"^.*\.[aAsS]$"), Pattern::new(FileTypeResolver::Dynamic(detect::asm), None)),
48 (false, regex!(r"^[mM]akefile\.am$"), Pattern::new(FileTypeResolver::Static(FileType::Automake), None)),
49 (true, regex!(r"^.*bind/db\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Bindzone), None)),
50 (true, regex!(r"^.*named/db\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Bindzone), None)),
51 (true, regex!(r"^.*build/conf/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Bitbake), None)),
52 (true, regex!(r"^.*meta/conf/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Bitbake), None)),
53 (true, regex!(r"^.*meta-.*/conf/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Bitbake), None)),
54 (false, regex!(r"^bzr_log\..*$"), Pattern::new(FileTypeResolver::Static(FileType::Bzr), None)),
55 (true, regex!(r"^.*enlightenment/.*\.cfg$"), Pattern::new(FileTypeResolver::Static(FileType::C), None)),
56 (true, regex!(r"^.*cabal\.config$"), Pattern::new(FileTypeResolver::Static(FileType::CabalConfig), None)),
57 (true, regex!(r"^.*\.config/cabal/config$"), Pattern::new(FileTypeResolver::Static(FileType::CabalConfig), None)),
58 (false, regex!(r"^cabal\.project\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::CabalProject), None)),
59 (true, regex!(r"^.*\.calendar/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Calendar), None)),
60 (true, regex!(r"^.*share/calendar/(.*/)?calendar\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Calendar), None)),
61 (false, regex!(r"^sgml\.catalog.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Catalog), None)),
62 (true, regex!(r"^.*etc/defaults?/cdrdao$"), Pattern::new(FileTypeResolver::Static(FileType::CdrdaoConf), None)),
63 (true, regex!(r"^.*etc/cdrdao\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::CdrdaoConf), None)),
64 (false, regex!(r"^.*hgrc$"), Pattern::new(FileTypeResolver::Static(FileType::Cfg), None)),
65 (false, regex!(r"^.*\.[Cc][Ff][Gg]$"), Pattern::new(FileTypeResolver::Dynamic(detect::cfg), Some(-1))),
68 (false, regex!(r"^[cC]hange[lL]og.*$"), Pattern::starsetf(FileTypeResolver::Dynamic(detect::changelog), None)),
69 (false, regex!(r"^.*\.\.ch$"), Pattern::new(FileTypeResolver::Static(FileType::Chill), None)),
70 (false, regex!(r"^.*\.cmake\.in$"), Pattern::new(FileTypeResolver::Static(FileType::CMake), None)),
71 (true, regex!(r"^.*\.?cmus/rc$"), Pattern::new(FileTypeResolver::Static(FileType::Cmusrc), None)),
73 (true, regex!(r"^.*\.?cmus/.*\.theme$"), Pattern::new(FileTypeResolver::Static(FileType::Cmusrc), None)),
75 (true, regex!(r"^.*\.cmus/autosave$"), Pattern::new(FileTypeResolver::Static(FileType::Cmusrc), None)),
76 (true, regex!(r"^.*\.cmus/command-history$"), Pattern::new(FileTypeResolver::Static(FileType::Cmusrc), None)),
77 (true, regex!(r"^.*etc/hostname\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Config), None)),
78 (false, regex!(r"^crontab\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Crontab), None)),
79 (true, regex!(r"^.*etc/cron\.d/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Crontab), None)),
80 (false, regex!(r"^\.cshrc.*$"), Pattern::new(FileTypeResolver::Dynamic(detect::csh), None)),
81 (false, regex!(r"^\.login.*$"), Pattern::new(FileTypeResolver::Dynamic(detect::csh), None)),
82 (false, regex!(r"^cvs\d+$"), Pattern::new(FileTypeResolver::Static(FileType::Cvs), None)),
83 (false, regex!(r"^.*\.[Dd][Aa][Tt]$"), Pattern::new(FileTypeResolver::Dynamic(detect::dat), None)),
84 (true, regex!(r"^.*debian/patches/.*$"), Pattern::new(FileTypeResolver::Dynamic(detect::dep3patch), None)),
85 (true, regex!(r"^.*etc/dnsmasq\.d/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::DnsMasq), None)),
86 (false, regex!(r"^Containerfile\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Dockerfile), None)),
87 (false, regex!(r"^Dockerfile\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Dockerfile), None)),
88 (true, regex!(r"^.*etc/yum\.repos\.d/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::DosIni), None)),
89 (false, regex!(r"^drac\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Dracula), None)),
90 (true, regex!(r"^.*debian/changelog$"), Pattern::new(FileTypeResolver::Static(FileType::DebChangelog), None)),
91 (true, regex!(r"^.*debian/control$"), Pattern::new(FileTypeResolver::Static(FileType::DebControl), None)),
92 (true, regex!(r"^.*debian/copyright$"), Pattern::new(FileTypeResolver::Static(FileType::DebCopyright), None)),
93 (true, regex!(r"^.*etc/apt/sources\.list\.d/.*\.list$"), Pattern::new(FileTypeResolver::Static(FileType::DebSources), None)),
94 (true, regex!(r"^.*etc/apt/sources\.list$"), Pattern::new(FileTypeResolver::Static(FileType::DebSources), None)),
95 (false, regex!(r"^.*\.directory$"), Pattern::new(FileTypeResolver::Static(FileType::Desktop), None)),
96 (false, regex!(r"^.*\.desktop$"), Pattern::new(FileTypeResolver::Static(FileType::Desktop), None)),
97 (false, regex!(r"^dictd.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::DictdConf), None)),
98 (true, regex!(r"^.*etc/DIR_COLORS$"), Pattern::new(FileTypeResolver::Static(FileType::DirColors), None)),
99 (true, regex!(r"^.*etc/dnsmasq\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::DnsMasq), None)),
100 (false, regex!(r"^php\.ini-.*$"), Pattern::new(FileTypeResolver::Static(FileType::DosIni), None)),
101 (true, regex!(r"^.*\.aws/config$"), Pattern::new(FileTypeResolver::Static(FileType::ConfIni), None)),
102 (true, regex!(r"^.*\.aws/credentials$"), Pattern::new(FileTypeResolver::Static(FileType::ConfIni), None)),
103 (true, regex!(r"^.*etc/pacman\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::ConfIni), None)),
104 (true, regex!(r"^.*etc/yum\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::DosIni), None)),
105 (false, regex!(r"^.*lvs$"), Pattern::new(FileTypeResolver::Static(FileType::Dracula), None)),
106 (false, regex!(r"^.*lpe$"), Pattern::new(FileTypeResolver::Static(FileType::Dracula), None)),
107 (true, regex!(r"^.*dtrace/.*\.d$"), Pattern::new(FileTypeResolver::Static(FileType::DTrace), None)),
108 (false, regex!(r"^.*esmtprc$"), Pattern::new(FileTypeResolver::Static(FileType::Esmtprc), None)),
109 (true, regex!(r"^.*Eterm/.*\.cfg$"), Pattern::new(FileTypeResolver::Static(FileType::Eterm), None)),
110 (false, regex!(r"^[a-zA-Z0-9].*Dict$"), Pattern::new(FileTypeResolver::Dynamic(detect::foam), None)),
111 (false, regex!(r"^[a-zA-Z0-9].*Dict\..*$"), Pattern::new(FileTypeResolver::Dynamic(detect::foam), None)),
112 (false, regex!(r"^[a-zA-Z].*Properties$"), Pattern::new(FileTypeResolver::Dynamic(detect::foam), None)),
113 (false, regex!(r"^[a-zA-Z].*Properties\..*$"), Pattern::new(FileTypeResolver::Dynamic(detect::foam), None)),
114 (false, regex!(r"^.*Transport\..*$"), Pattern::new(FileTypeResolver::Dynamic(detect::foam), None)),
115 (true, regex!(r"^.*constant/g$"), Pattern::new(FileTypeResolver::Dynamic(detect::foam), None)),
116 (true, regex!(r"^.*0(\.orig)?/.*$"), Pattern::new(FileTypeResolver::Dynamic(detect::foam), None)),
117 (true, regex!(r"^.*\.fvwm/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Fvwm), None)),
118 (false, regex!(r"^.*fvwmrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Fvwm1), None)),
119 (false, regex!(r"^.*fvwm95.*\.hook$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Fvwm1), None)),
120 (false, regex!(r"^.*fvwm2rc.*$"), Pattern::starsetf(FileTypeResolver::Dynamic(detect::fvwm), None)),
121 (true, regex!(r"^.*tmp/lltmp.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Gedcom), None)),
122 (true, regex!(r"^.*etc/gitconfig\.d/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::GitConfig), None)),
123 (true, regex!(r"^.*gitolite-admin/conf/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::GitOlite), None)),
124 (false, regex!(r"^tmac\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Nroff), None)),
125 (true, regex!(r"^.*\.gitconfig\.d/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::GitConfig), None)),
126 (true, regex!(r"^.*\.git/.*$"), Pattern::new(FileTypeResolver::Dynamic(detect::git), Some(-1))),
128 (true, regex!(r"^.*\.git/modules/.*/config$"), Pattern::new(FileTypeResolver::Static(FileType::GitConfig), None)),
129 (true, regex!(r"^.*\.git/modules/config$"), Pattern::new(FileTypeResolver::Static(FileType::GitConfig), None)),
130 (true, regex!(r"^.*\.git/config$"), Pattern::new(FileTypeResolver::Static(FileType::GitConfig), None)),
131 (true, regex!(r"^.*etc/gitconfig$"), Pattern::new(FileTypeResolver::Static(FileType::GitConfig), None)),
132 (true, regex!(r"^.*\.config/git/config$"), Pattern::new(FileTypeResolver::Static(FileType::GitConfig), None)),
133 (true, regex!(r"^.*\.git/config\.worktree$"), Pattern::new(FileTypeResolver::Static(FileType::GitConfig), None)),
134 (true, regex!(r"^.*\.git/worktrees/.*/config\.worktree$"), Pattern::new(FileTypeResolver::Static(FileType::GitConfig), None)),
135 (true, regex!(r"^.*\.config/git/config$"), Pattern::new(FileTypeResolver::Static(FileType::GitConfig), None)),
136 (true, regex!(r"^.*\.git/info/attributes$"), Pattern::new(FileTypeResolver::Static(FileType::GitAttributes), None)),
137 (true, regex!(r"^.*etc/gitattributes$"), Pattern::new(FileTypeResolver::Static(FileType::GitAttributes), None)),
138 (true, regex!(r"^.*\.config/git/attributes$"), Pattern::new(FileTypeResolver::Static(FileType::GitAttributes), None)),
139 (true, regex!(r"^.*\.config/git/attributes$"), Pattern::new(FileTypeResolver::Static(FileType::GitAttributes), None)),
140 (true, regex!(r"^.*\.git/info/exclude$"), Pattern::new(FileTypeResolver::Static(FileType::GitIgnore), None)),
141 (true, regex!(r"^.*\.config/git/ignore$"), Pattern::new(FileTypeResolver::Static(FileType::GitIgnore), None)),
142 (true, regex!(r"^.*\.config/git/ignore$"), Pattern::new(FileTypeResolver::Static(FileType::GitIgnore), None)),
143 (false, regex!(r"^\.gitsendemail\.msg\..{6}$"), Pattern::new(FileTypeResolver::Static(FileType::GitSendEmail), None)),
144 (false, regex!(r"^gkrellmrc_.$"), Pattern::new(FileTypeResolver::Static(FileType::Gkrellmrc), None)),
145 (true, regex!(r"^.*usr/.*/gnupg/options\.skel$"), Pattern::new(FileTypeResolver::Static(FileType::Gpg), None)),
146 (true, regex!(r"^.*\.gnupg/options$"), Pattern::new(FileTypeResolver::Static(FileType::Gpg), None)),
147 (true, regex!(r"^.*\.gnupg/gpg\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Gpg), None)),
148 (true, regex!(r"^.*\.local/share/gnupg/options$"), Pattern::new(FileTypeResolver::Static(FileType::Gpg), None)),
149 (true, regex!(r"^.*\.local/share/gnupg/gpg\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Gpg), None)),
150 (true, regex!(r"^.*etc/(group|gshadow)(\.edit|-)?$"), Pattern::new(FileTypeResolver::Static(FileType::Group), None)),
151 (true, regex!(r"^.*var/backups/(group|gshadow)\.bak$"), Pattern::new(FileTypeResolver::Static(FileType::Group), None)),
152 (true, regex!(r"^.*boot/grub/(grub\.conf|menu\.lst)$"), Pattern::new(FileTypeResolver::Static(FileType::Grub), None)),
153 (true, regex!(r"^.*etc/grub\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Grub), None)),
154 (false, regex!(r"^\.?gtkrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Gtkrc), None)),
156 (true, regex!(r"^.*share/n?vim/doc/.*\.txt$"), Pattern::new(FileTypeResolver::Static(FileType::VimHelp), None)),
157 (false, regex!(r"^hg-editor-.*\.txt$"), Pattern::new(FileTypeResolver::Static(FileType::Hgcommit), None)),
158 (true, regex!(r"^.*etc/host\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::HostConf), None)),
159 (true, regex!(r"^.*etc/hosts\.deny$"), Pattern::new(FileTypeResolver::Static(FileType::HostsAccess), None)),
160 (true, regex!(r"^.*etc/hosts\.allow$"), Pattern::new(FileTypeResolver::Static(FileType::HostsAccess), None)),
161 (false, regex!(r"^.*\.html\.m4$"), Pattern::new(FileTypeResolver::Static(FileType::HtmlM4), None)),
162 (true, regex!(r"^.*\.i3/config$"), Pattern::new(FileTypeResolver::Static(FileType::I3Config), None)),
163 (true, regex!(r"^.*i3/config$"), Pattern::new(FileTypeResolver::Static(FileType::I3Config), None)),
164 (true, regex!(r"^.*\.icewm/menu$"), Pattern::new(FileTypeResolver::Static(FileType::IceMenu), None)),
165 (true, regex!(r"^.*etc/initng/.*/.*\.i$"), Pattern::new(FileTypeResolver::Static(FileType::Initng), None)),
166 (false, regex!(r"^JAM.*\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Jam), None)),
167 (false, regex!(r"^Prl.*\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Jam), None)),
168 (false, regex!(r"^.*\.properties_..$"), Pattern::new(FileTypeResolver::Static(FileType::JProperties), None)),
169 (false, regex!(r"^.*\.properties_.._..$"), Pattern::new(FileTypeResolver::Static(FileType::JProperties), None)),
170 (false, regex!(r"^org\.eclipse\..*\.prefs$"), Pattern::new(FileTypeResolver::Static(FileType::JProperties), None)),
171 (false, regex!(r"^.*\.properties_.._.._.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::JProperties), None)),
172 (false, regex!(r"^[jt]sconfig.*\.json$"), Pattern::new(FileTypeResolver::Static(FileType::JsonC), None)),
173 (false, regex!(r"^Kconfig\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::KConfig), None)),
174 (false, regex!(r"^.*\.[Ss][Uu][Bb]$"), Pattern::new(FileTypeResolver::Static(FileType::Krl), None)),
175 (false, regex!(r"^lilo\.conf.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Lilo), None)),
176 (true, regex!(r"^.*etc/logcheck/.*\.d.*/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::LogCheck), None)),
177 (true, regex!(r"^.*lftp/rc$"), Pattern::new(FileTypeResolver::Static(FileType::Lftp), None)),
178 (false, regex!(r"^.*\.libao$"), Pattern::new(FileTypeResolver::Static(FileType::Libao), None)),
179 (true, regex!(r"^.*etc/libao\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Libao), None)),
180 (true, regex!(r"^.*etc/.*limits\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Limits), None)),
181 (true, regex!(r"^.*etc/limits$"), Pattern::new(FileTypeResolver::Static(FileType::Limits), None)),
182 (true, regex!(r"^.*etc/.*limits\.d/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Limits), None)),
183 (true, regex!(r"^.*LiteStep/.*/.*\.rc$"), Pattern::new(FileTypeResolver::Static(FileType::LiteStep), None)),
184 (true, regex!(r"^.*etc/login\.access$"), Pattern::new(FileTypeResolver::Static(FileType::LoginAccess), None)),
185 (true, regex!(r"^.*etc/login\.defs$"), Pattern::new(FileTypeResolver::Static(FileType::LoginDefs), None)),
186 (false, regex!(r"^\.letter\.\d+$"), Pattern::new(FileTypeResolver::Static(FileType::Mail), None)),
187 (false, regex!(r"^\.article\.\d+$"), Pattern::new(FileTypeResolver::Static(FileType::Mail), None)),
188 (true, regex!(r"^/tmp/SLRN[0-9A-Z.]+$"), Pattern::new(FileTypeResolver::Static(FileType::Mail), None)),
189 (false, regex!(r"^ae\d+\.txt$"), Pattern::new(FileTypeResolver::Static(FileType::Mail), None)),
190 (false, regex!(r"^pico\.\d+$"), Pattern::new(FileTypeResolver::Static(FileType::Mail), None)),
191 (false, regex!(r"^mutt-.*-[a-zA-Z0-9]+$"), Pattern::new(FileTypeResolver::Static(FileType::Mail), None)),
192 (false, regex!(r"^muttng-.*-[a-zA-Z0-9]+$"), Pattern::new(FileTypeResolver::Static(FileType::Mail), None)),
193 (false, regex!(r"^neomutt-.*-[a-zA-Z0-9]+$"), Pattern::new(FileTypeResolver::Static(FileType::Mail), None)),
194 (false, regex!(r"^mutt[\w_-]{6}$"), Pattern::new(FileTypeResolver::Static(FileType::Mail), None)),
195 (false, regex!(r"^neomutt[\w_-]{6}$"), Pattern::new(FileTypeResolver::Static(FileType::Mail), None)),
196 (false, regex!(r"^snd\.\d+$"), Pattern::new(FileTypeResolver::Static(FileType::Mail), None)),
197 (false, regex!(r"^reportbug-.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Mail), None)),
198 (true, regex!(r"^.*etc/mail/aliases$"), Pattern::new(FileTypeResolver::Static(FileType::MailAliases), None)),
199 (true, regex!(r"^.*etc/aliases$"), Pattern::new(FileTypeResolver::Static(FileType::MailAliases), None)),
200 (false, regex!(r"^.*[mM]akefile$"), Pattern::new(FileTypeResolver::Static(FileType::Make), None)),
201 (false, regex!(r"^[mM]akefile.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Make), None)),
202 (true, regex!(r"^.*etc/man\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::ManConf), None)),
203 (true, regex!(r"^.*log/auth$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
204 (true, regex!(r"^.*log/cron$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
205 (true, regex!(r"^.*log/daemon$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
206 (true, regex!(r"^.*log/debug$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
207 (true, regex!(r"^.*log/kern$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
208 (true, regex!(r"^.*log/lpr$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
209 (true, regex!(r"^.*log/mail$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
210 (true, regex!(r"^.*log/messages$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
211 (true, regex!(r"^.*log/news/news$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
212 (true, regex!(r"^.*log/syslog$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
213 (true, regex!(r"^.*log/user$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
214 (true, regex!(r"^.*log/auth\.log$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
215 (true, regex!(r"^.*log/cron\.log$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
216 (true, regex!(r"^.*log/daemon\.log$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
217 (true, regex!(r"^.*log/debug\.log$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
218 (true, regex!(r"^.*log/kern\.log$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
219 (true, regex!(r"^.*log/lpr\.log$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
220 (true, regex!(r"^.*log/mail\.log$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
221 (true, regex!(r"^.*log/messages\.log$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
222 (true, regex!(r"^.*log/news/news\.log$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
223 (true, regex!(r"^.*log/syslog\.log$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
224 (true, regex!(r"^.*log/user\.log$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
225 (true, regex!(r"^.*log/auth\.err$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
226 (true, regex!(r"^.*log/cron\.err$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
227 (true, regex!(r"^.*log/daemon\.err$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
228 (true, regex!(r"^.*log/debug\.err$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
229 (true, regex!(r"^.*log/kern\.err$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
230 (true, regex!(r"^.*log/lpr\.err$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
231 (true, regex!(r"^.*log/mail\.err$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
232 (true, regex!(r"^.*log/messages\.err$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
233 (true, regex!(r"^.*log/news/news\.err$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
234 (true, regex!(r"^.*log/syslog\.err$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
235 (true, regex!(r"^.*log/user\.err$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
236 (true, regex!(r"^.*log/auth\.info$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
237 (true, regex!(r"^.*log/cron\.info$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
238 (true, regex!(r"^.*log/daemon\.info$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
239 (true, regex!(r"^.*log/debug\.info$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
240 (true, regex!(r"^.*log/kern\.info$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
241 (true, regex!(r"^.*log/lpr\.info$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
242 (true, regex!(r"^.*log/mail\.info$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
243 (true, regex!(r"^.*log/messages\.info$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
244 (true, regex!(r"^.*log/news/news\.info$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
245 (true, regex!(r"^.*log/syslog\.info$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
246 (true, regex!(r"^.*log/user\.info$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
247 (true, regex!(r"^.*log/auth\.warn$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
248 (true, regex!(r"^.*log/cron\.warn$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
249 (true, regex!(r"^.*log/daemon\.warn$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
250 (true, regex!(r"^.*log/debug\.warn$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
251 (true, regex!(r"^.*log/kern\.warn$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
252 (true, regex!(r"^.*log/lpr\.warn$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
253 (true, regex!(r"^.*log/mail\.warn$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
254 (true, regex!(r"^.*log/messages\.warn$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
255 (true, regex!(r"^.*log/news/news\.warn$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
256 (true, regex!(r"^.*log/syslog\.warn$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
257 (true, regex!(r"^.*log/user\.warn$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
258 (true, regex!(r"^.*log/auth\.crit$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
259 (true, regex!(r"^.*log/cron\.crit$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
260 (true, regex!(r"^.*log/daemon\.crit$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
261 (true, regex!(r"^.*log/debug\.crit$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
262 (true, regex!(r"^.*log/kern\.crit$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
263 (true, regex!(r"^.*log/lpr\.crit$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
264 (true, regex!(r"^.*log/mail\.crit$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
265 (true, regex!(r"^.*log/messages\.crit$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
266 (true, regex!(r"^.*log/news/news\.crit$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
267 (true, regex!(r"^.*log/syslog\.crit$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
268 (true, regex!(r"^.*log/user\.crit$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
269 (true, regex!(r"^.*log/auth\.notice$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
270 (true, regex!(r"^.*log/cron\.notice$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
271 (true, regex!(r"^.*log/daemon\.notice$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
272 (true, regex!(r"^.*log/debug\.notice$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
273 (true, regex!(r"^.*log/kern\.notice$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
274 (true, regex!(r"^.*log/lpr\.notice$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
275 (true, regex!(r"^.*log/mail\.notice$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
276 (true, regex!(r"^.*log/messages\.notice$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
277 (true, regex!(r"^.*log/news/news\.notice$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
278 (true, regex!(r"^.*log/syslog\.notice$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
279 (true, regex!(r"^.*log/user\.notice$"), Pattern::new(FileTypeResolver::Static(FileType::Messages), None)),
280 (false, regex!(r"^.*\.[Mm][Oo][Dd]$"), Pattern::new(FileTypeResolver::Dynamic(detect::mod_), None)),
281 (true, regex!(r"^.*etc/modules\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::ModConf), None)),
282 (true, regex!(r"^.*etc/conf\.modules$"), Pattern::new(FileTypeResolver::Static(FileType::ModConf), None)),
283 (true, regex!(r"^.*etc/modules$"), Pattern::new(FileTypeResolver::Static(FileType::ModConf), None)),
284 (true, regex!(r"^.*etc/modprobe\..*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::ModConf), None)),
285 (true, regex!(r"^.*etc/modutils/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::ModConf), None)),
287 (false, regex!(r"^.*\.[mi][3g]$"), Pattern::new(FileTypeResolver::Static(FileType::Modula3), None)),
288 (false, regex!(r"^Muttrc$"), Pattern::new(FileTypeResolver::Static(FileType::Muttrc), None)),
289 (false, regex!(r"^Muttngrc$"), Pattern::new(FileTypeResolver::Static(FileType::Muttrc), None)),
290 (true, regex!(r"^.*etc/Muttrc\.d/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Muttrc), None)),
291 (true, regex!(r"^.*\.mplayer/config$"), Pattern::new(FileTypeResolver::Static(FileType::MPlayerConf), None)),
292 (false, regex!(r"^Muttrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Muttrc), None)),
293 (false, regex!(r"^Muttngrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Muttrc), None)),
294 (false, regex!(r"^\.?muttrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Muttrc), None)),
296 (false, regex!(r"^\.?muttngrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Muttrc), None)),
298 (true, regex!(r"^.*\.mutt/muttrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Muttrc), None)),
299 (true, regex!(r"^.*\.muttng/muttrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Muttrc), None)),
300 (true, regex!(r"^.*\.muttng/muttngrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Muttrc), None)),
301 (false, regex!(r"^rndc.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Named), None)),
302 (false, regex!(r"^rndc.*\.key$"), Pattern::new(FileTypeResolver::Static(FileType::Named), None)),
303 (false, regex!(r"^named.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Named), None)),
304 (true, regex!(r"^.*etc/nanorc$"), Pattern::new(FileTypeResolver::Static(FileType::Nanorc), None)),
305 (false, regex!(r"^.*\.NS[ACGLMNPS]$"), Pattern::new(FileTypeResolver::Static(FileType::Natural), None)),
306 (false, regex!(r"^Neomuttrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Neomuttrc), None)),
307 (false, regex!(r"^\.?neomuttrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Neomuttrc), None)),
309 (true, regex!(r"^.*\.neomutt/neomuttrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Neomuttrc), None)),
310 (false, regex!(r"^nginx.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Nginx), None)),
311 (true, regex!(r"^.*etc/nginx/.*$"), Pattern::new(FileTypeResolver::Static(FileType::Nginx), None)),
312 (false, regex!(r"^.*nginx\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Nginx), None)),
313 (true, regex!(r"^.*nginx/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Nginx), None)),
314 (true, regex!(r"^.*usr/local/nginx/conf/.*$"), Pattern::new(FileTypeResolver::Static(FileType::Nginx), None)),
315 (false, regex!(r"^.*\.[1-9]$"), Pattern::new(FileTypeResolver::Dynamic(detect::nroff), None)),
316 (false, regex!(r"^.*\.ml\.cppo$"), Pattern::new(FileTypeResolver::Static(FileType::OCaml), None)),
317 (false, regex!(r"^.*\.mli\.cppo$"), Pattern::new(FileTypeResolver::Static(FileType::OCaml), None)),
318 (false, regex!(r"^.*\.opam\.template$"), Pattern::new(FileTypeResolver::Static(FileType::Opam), None)),
319 (true, regex!(r"^.*openvpn/.*/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::OpenVpn), None)),
320 (false, regex!(r"^.*\.[Oo][Pp][Ll]$"), Pattern::new(FileTypeResolver::Static(FileType::Opl), None)),
321 (true, regex!(r"^.*etc/pam\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::PamConf), None)),
322 (true, regex!(r"^.*etc/pam\.d/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::PamConf), None)),
323 (true, regex!(r"^.*etc/passwd-$"), Pattern::new(FileTypeResolver::Static(FileType::Passwd), None)),
324 (true, regex!(r"^.*etc/shadow$"), Pattern::new(FileTypeResolver::Static(FileType::Passwd), None)),
325 (true, regex!(r"^.*etc/shadow\.edit$"), Pattern::new(FileTypeResolver::Static(FileType::Passwd), None)),
326 (true, regex!(r"^.*var/backups/shadow\.bak$"), Pattern::new(FileTypeResolver::Static(FileType::Passwd), None)),
327 (true, regex!(r"^.*var/backups/passwd\.bak$"), Pattern::new(FileTypeResolver::Static(FileType::Passwd), None)),
328 (true, regex!(r"^.*etc/passwd$"), Pattern::new(FileTypeResolver::Static(FileType::Passwd), None)),
329 (true, regex!(r"^.*etc/passwd\.edit$"), Pattern::new(FileTypeResolver::Static(FileType::Passwd), None)),
330 (true, regex!(r"^.*etc/shadow-$"), Pattern::new(FileTypeResolver::Static(FileType::Passwd), None)),
331 (false, regex!(r"^\.?gitolite\.rc$"), Pattern::new(FileTypeResolver::Static(FileType::Perl), None)),
332 (false, regex!(r"^example\.gitolite\.rc$"), Pattern::new(FileTypeResolver::Static(FileType::Perl), None)),
333 (false, regex!(r"^.*\.php\d$"), Pattern::new(FileTypeResolver::Static(FileType::Php), None)),
334 (false, regex!(r"^.*\.pinforc$"), Pattern::new(FileTypeResolver::Static(FileType::PInfo), None)),
335 (true, regex!(r"^.*etc/pinforc$"), Pattern::new(FileTypeResolver::Static(FileType::PInfo), None)),
336 (false, regex!(r"^.*\.[Pp][Rr][Gg]$"), Pattern::new(FileTypeResolver::Dynamic(detect::prg), None)),
337 (true, regex!(r"^.*etc/protocols$"), Pattern::new(FileTypeResolver::Static(FileType::Protocols), None)),
338 (false, regex!(r"^.*printcap.*$"), Pattern::new(FileTypeResolver::Static(FileType::PtcapPrint), None)),
339 (true, regex!(r"^.*baseq[2-3]/.*\.cfg$"), Pattern::new(FileTypeResolver::Static(FileType::Quake), None)),
340 (true, regex!(r"^.*quake[1-3]/.*\.cfg$"), Pattern::new(FileTypeResolver::Static(FileType::Quake), None)),
341 (true, regex!(r"^.*id1/.*\.cfg$"), Pattern::new(FileTypeResolver::Static(FileType::Quake), None)),
342 (true, regex!(r"^.*queries/.*\.scm$"), Pattern::new(FileTypeResolver::Static(FileType::TreeSitterQuery), None)),
343 (false, regex!(r"^.*,v$"), Pattern::new(FileTypeResolver::Static(FileType::Rcs), None)),
344 (false, regex!(r"^\.reminders.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Remind), None)),
345 (false, regex!(r"^[rR]akefile.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Ruby), None)),
346 (false, regex!(r"^[rR]antfile$"), Pattern::new(FileTypeResolver::Static(FileType::Ruby), None)),
347 (false, regex!(r"^[rR]akefile$"), Pattern::new(FileTypeResolver::Static(FileType::Ruby), None)),
348 (true, regex!(r"^.*etc/sensors\.d/[^.].*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Sensors), None)),
349 (true, regex!(r"^.*etc/sensors\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Sensors), None)),
350 (true, regex!(r"^.*etc/sensors3\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Sensors), None)),
351 (true, regex!(r"^.*etc/services$"), Pattern::new(FileTypeResolver::Static(FileType::Services), None)),
352 (true, regex!(r"^.*etc/serial\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::SetSerial), None)),
353 (true, regex!(r"^.*etc/udev/cdsymlinks\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Sh), None)),
354 (false, regex!(r"^\.bash[_-]aliases$"), Pattern::new(FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Bash))), None)),
355 (false, regex!(r"^\.bash[_-]logout$"), Pattern::new(FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Bash))), None)),
356 (false, regex!(r"^\.bash[_-]profile$"), Pattern::new(FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Bash))), None)),
357 (false, regex!(r"^\.kshrc.*$"), Pattern::new(FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Ksh))), None)),
358 (false, regex!(r"^\.profile.*$"), Pattern::new(FileTypeResolver::Dynamic(|_, content| detect::sh(content, None)), None)),
359 (true, regex!(r"^.*etc/profile$"), Pattern::new(FileTypeResolver::Dynamic(|_, content| detect::sh(content, None)), None)),
360 (false, regex!(r"^bash-fc[-\.].*$"), Pattern::new(FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Bash))), None)),
361 (false, regex!(r"^\.tcshrc.*$"), Pattern::new(FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Tcsh))), None)),
362 (true, regex!(r"^.*etc/sudoers\.d/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Sudoers), None)),
363 (false, regex!(r"^.*\._sst\.meta$"), Pattern::new(FileTypeResolver::Static(FileType::Sisu), None)),
364 (false, regex!(r"^.*\.-sst\.meta$"), Pattern::new(FileTypeResolver::Static(FileType::Sisu), None)),
365 (false, regex!(r"^.*\.sst\.meta$"), Pattern::new(FileTypeResolver::Static(FileType::Sisu), None)),
366 (true, regex!(r"^.*etc/slp\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::SlpConf), None)),
367 (true, regex!(r"^.*etc/slp\.reg$"), Pattern::new(FileTypeResolver::Static(FileType::SlpReg), None)),
368 (true, regex!(r"^.*etc/slp\.spi$"), Pattern::new(FileTypeResolver::Static(FileType::SlpSpi), None)),
369 (true, regex!(r"^.*etc/ssh/ssh_config\.d/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::SshConfig), None)),
370 (true, regex!(r"^.*\.ssh/config$"), Pattern::new(FileTypeResolver::Static(FileType::SshConfig), None)),
371 (true, regex!(r"^.*\.ssh/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::SshConfig), None)),
372 (true, regex!(r"^.*etc/ssh/sshd_config\.d/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::SshdConfig), None)),
373 (false, regex!(r"^.*\.[Ss][Rr][Cc]$"), Pattern::new(FileTypeResolver::Dynamic(detect::src), None)),
374 (true, regex!(r"^.*etc/sudoers$"), Pattern::new(FileTypeResolver::Static(FileType::Sudoers), None)),
375 (false, regex!(r"^svn-commit.*\.tmp$"), Pattern::new(FileTypeResolver::Static(FileType::Svn), None)),
376 (true, regex!(r"^.*sway/config$"), Pattern::new(FileTypeResolver::Static(FileType::SwayConfig), None)),
377 (true, regex!(r"^.*\.sway/config$"), Pattern::new(FileTypeResolver::Static(FileType::SwayConfig), None)),
378 (false, regex!(r"^.*\.swift\.gyb$"), Pattern::new(FileTypeResolver::Static(FileType::SwiftGyb), None)),
379 (false, regex!(r"^.*\.[Ss][Yy][Ss]$"), Pattern::new(FileTypeResolver::Dynamic(detect::sys), None)),
380 (true, regex!(r"^.*etc/sysctl\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Sysctl), None)),
381 (true, regex!(r"^.*etc/sysctl\.d/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Sysctl), None)),
382 (true, regex!(r"^.*systemd/.*\.automount$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
383 (true, regex!(r"^.*systemd/.*\.dnssd$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
384 (true, regex!(r"^.*systemd/.*\.link$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
385 (true, regex!(r"^.*systemd/.*\.mount$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
386 (true, regex!(r"^.*systemd/.*\.netdev$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
387 (true, regex!(r"^.*systemd/.*\.network$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
388 (true, regex!(r"^.*systemd/.*\.nspawn$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
389 (true, regex!(r"^.*systemd/.*\.path$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
390 (true, regex!(r"^.*systemd/.*\.service$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
391 (true, regex!(r"^.*systemd/.*\.slice$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
392 (true, regex!(r"^.*systemd/.*\.socket$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
393 (true, regex!(r"^.*systemd/.*\.swap$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
394 (true, regex!(r"^.*systemd/.*\.target$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
395 (true, regex!(r"^.*systemd/.*\.timer$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
396 (true, regex!(r"^.*etc/systemd/.*\.conf\.d/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
397 (true, regex!(r"^.*\.config/systemd/user/.*\.d/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
398 (true, regex!(r"^.*etc/systemd/system/.*\.d/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
399 (true, regex!(r"^.*etc/systemd/system/.*\.d/\.#.*$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
400 (true, regex!(r"^.*etc/systemd/system/\.#.*$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
401 (true, regex!(r"^.*\.config/systemd/user/.*\.d/\.#.*$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
402 (true, regex!(r"^.*\.config/systemd/user/\.#.*$"), Pattern::new(FileTypeResolver::Static(FileType::Systemd), None)),
403 (false, regex!(r"^.*termcap.*$"), Pattern::new(FileTypeResolver::Static(FileType::PtcapTerm), None)),
404 (false, regex!(r"^.*\.t\.html$"), Pattern::new(FileTypeResolver::Static(FileType::Tilde), None)),
405 (false, regex!(r"^\.?tmux.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Tmux), None)),
406 (false, regex!(r"^\.?tmux.*\.conf.*$"), Pattern::new(FileTypeResolver::Static(FileType::Tmux), Some(-1))),
407 (true, regex!(r"^.*\.cargo/config$"), Pattern::new(FileTypeResolver::Static(FileType::Toml), None)),
408 (true, regex!(r"^.*\.cargo/credentials$"), Pattern::new(FileTypeResolver::Static(FileType::Toml), None)),
409 (true, regex!(r"^.*etc/udev/udev\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::UdevConf), None)),
410 (true, regex!(r"^.*etc/udev/permissions\.d/.*\.permissions$"), Pattern::new(FileTypeResolver::Static(FileType::UdevPerm), None)),
411 (true, regex!(r"^.*etc/updatedb\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::UpdateDb), None)),
412 (true, regex!(r"^.*\.init/.*\.override$"), Pattern::new(FileTypeResolver::Static(FileType::Upstart), None)),
413 (true, regex!(r"^.*usr/share/upstart/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Upstart), None)),
414 (true, regex!(r"^.*\.config/upstart/.*\.override$"), Pattern::new(FileTypeResolver::Static(FileType::Upstart), None)),
415 (true, regex!(r"^.*etc/init/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Upstart), None)),
416 (true, regex!(r"^.*etc/init/.*\.override$"), Pattern::new(FileTypeResolver::Static(FileType::Upstart), None)),
417 (true, regex!(r"^.*\.config/upstart/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Upstart), None)),
418 (true, regex!(r"^.*\.init/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Upstart), None)),
419 (true, regex!(r"^.*usr/share/upstart/.*\.override$"), Pattern::new(FileTypeResolver::Static(FileType::Upstart), None)),
420 (false, regex!(r"^.*\.[Ll][Oo][Gg]$"), Pattern::new(FileTypeResolver::Dynamic(detect::log), None)),
421 (false, regex!(r"^.*\.vhdl_[0-9].*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Vhdl), None)),
422 (false, regex!(r"^.*\.ws[fc]$"), Pattern::new(FileTypeResolver::Static(FileType::Wsh), None)),
423 (true, regex!(r"^.*Xresources/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::XDefaults), None)),
424 (true, regex!(r"^.*app-defaults/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::XDefaults), None)),
425 (true, regex!(r"^.*etc/xinetd\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::Xinetd), None)),
426 (true, regex!(r"^.*etc/blkid\.tab$"), Pattern::new(FileTypeResolver::Static(FileType::Xml), None)),
427 (true, regex!(r"^.*etc/blkid\.tab\.old$"), Pattern::new(FileTypeResolver::Static(FileType::Xml), None)),
428 (false, regex!(r"^.*\.vbproj\.user$"), Pattern::new(FileTypeResolver::Static(FileType::Xml), None)),
429 (false, regex!(r"^.*\.fsproj\.user$"), Pattern::new(FileTypeResolver::Static(FileType::Xml), None)),
430 (false, regex!(r"^.*\.csproj\.user$"), Pattern::new(FileTypeResolver::Static(FileType::Xml), None)),
431 (true, regex!(r"^.*etc/xdg/menus/.*\.menu$"), Pattern::new(FileTypeResolver::Static(FileType::Xml), None)),
432 (false, regex!(r"^.*Xmodmap$"), Pattern::new(FileTypeResolver::Static(FileType::XModMap), None)),
433 (true, regex!(r"^.*etc/zprofile$"), Pattern::new(FileTypeResolver::Static(FileType::Zsh), None)),
434 (false, regex!(r"^.*vimrc.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Vim), None)),
435 (false, regex!(r"^Xresources.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::XDefaults), None)),
436 (true, regex!(r"^.*etc/xinetd\.d/.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Xinetd), None)),
437 (false, regex!(r"^.*xmodmap.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::XModMap), None)),
438 (true, regex!(r"^.*xorg\.conf\.d/.*\.conf$"), Pattern::new(FileTypeResolver::Static(FileType::XF86Conf4), None)),
439 (false, regex!(r"^XF86Config-4.*$"), Pattern::new(FileTypeResolver::Static(FileType::XF86Conf4), Some(isize::MIN + 1))),
441 (false, regex!(r"^XF86Config.*$"), Pattern::starsetf(FileTypeResolver::Dynamic(detect::xfree86), None)),
442 (false, regex!(r"^\.zcompdump.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Zsh), None)),
443 (false, regex!(r"^\.?zlog.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Zsh), None)),
445 (false, regex!(r"^\.?zsh.*$"), Pattern::starsetf(FileTypeResolver::Static(FileType::Zsh), None)),
447 (false, regex!(r"^.+~$"), Pattern::new(FileTypeResolver::Dynamic(detect::tmp), None)),
449 ];
450 vec.sort_unstable_by(|(_, _, pat1), (_, _, pat2)| pat2.priority.unwrap_or(0).cmp(&pat1.priority.unwrap_or(0)));
451 vec
452});