use std::path::Path;
pub fn detect(path: &Path) -> Option<(&'static str, (u8, u8, u8))> {
if let Some(ext) = path.extension().and_then(std::ffi::OsStr::to_str) {
match ext {
"rs" | "rs.in" => Some(("Rust", (222, 165, 132))),
"cgi" | "fcgi" | "gyp" | "gypi" | "lmi" | "py" | "py3" | "pyde" | "pyi" | "pyp" | "pyt" | "pyw" | "rpy" | "spec" | "tac" | "wsgi" | "xpy" => Some(("Python", (53, 114, 165))),
"_js" | "bones" | "cjs" | "es" | "es6" | "frag" | "gs" | "jake" | "javascript" | "js" | "jsb" | "jscad" | "jsfl" | "jslib" | "jsm" | "jspre" | "jss" | "jsx" | "mjs" | "njs" | "pac" | "sjs" | "ssjs" | "xsjs" | "xsjslib" => Some(("JavaScript", (241, 224, 90))),
"cts" | "mts" | "ts" => Some(("TypeScript", (49, 120, 198))),
"go" => Some(("Go", (0, 173, 216))),
"builder" | "eye" | "gemspec" | "god" | "jbuilder" | "mspec" | "pluginspec" | "podspec" | "prawn" | "rabl" | "rake" | "rb" | "rbi" | "rbuild" | "rbw" | "rbx" | "ru" | "ruby" | "thor" | "watchr" => Some(("Ruby", (112, 21, 22))),
"c" | "cats" | "h" | "h.in" | "idc" => Some(("C", (85, 85, 85))),
"c++" | "cc" | "cp" | "cpp" | "cppm" | "cxx" | "h++" | "hh" | "hpp" | "hxx" | "inc" | "inl" | "ino" | "ipp" | "ixx" | "re" | "tcc" | "tpp" | "txx" => Some(("C++", (243, 75, 125))),
"cake" | "cs" | "cs.pp" | "csx" | "linq" => Some(("C#", (115, 85, 221))),
"jav" | "java" | "jsh" => Some(("Java", (176, 114, 25))),
"kt" | "ktm" | "kts" => Some(("Kotlin", (169, 123, 255))),
"swift" => Some(("Swift", (240, 81, 56))),
"aw" | "ctp" | "php" | "php3" | "php4" | "php5" | "phps" | "phpt" => Some(("PHP", (79, 93, 149))),
"bash" | "bats" | "command" | "ksh" | "sbatch" | "sh" | "sh.in" | "slurm" | "tmux" | "tool" | "trigger" | "zsh" | "zsh-theme" => Some(("Shell", (137, 224, 81))),
"kojo" | "sbt" | "sc" | "scala" => Some(("Scala", (194, 45, 64))),
"dart" => Some(("Dart", (0, 180, 171))),
"lua" | "nse" | "p8" | "pd_lua" | "rbxs" | "rockspec" | "wlua" => Some(("Lua", (0, 0, 128))),
"hs" | "hs-boot" | "hsc" => Some(("Haskell", (94, 80, 134))),
"ex" | "exs" => Some(("Elixir", (110, 74, 126))),
"bb" | "boot" | "cl2" | "clj" | "cljc" | "cljs" | "cljs.hl" | "cljscm" | "cljx" | "hic" => Some(("Clojure", (219, 88, 85))),
"al" | "perl" | "ph" | "pl" | "plx" | "pm" | "psgi" | "t" => Some(("Perl", (2, 152, 195))),
"r" | "rd" | "rsx" => Some(("R", (25, 140, 231))),
"m" => Some(("Objective-C", (67, 142, 255))),
"a51" | "asm" | "i" | "nas" | "nasm" | "s" => Some(("Assembly", (110, 76, 19))),
"zig" | "zig.zon" => Some(("Zig", (236, 145, 92))),
"eliom" | "eliomi" | "ml" | "ml4" | "mli" | "mll" | "mly" => Some(("OCaml", (239, 122, 8))),
"fs" | "fsi" | "fsx" => Some(("F#", (184, 69, 252))),
"app" | "app.src" | "erl" | "escript" | "hrl" | "xrl" | "yrl" => Some(("Erlang", (184, 57, 152))),
"cr" => Some(("Crystal", (0, 1, 0))),
"nim" | "nim.cfg" | "nimble" | "nimrod" | "nims" => Some(("Nim", (255, 194, 0))),
"f" | "f77" | "for" | "fpp" => Some(("Fortran", (77, 65, 177))),
"ada" | "adb" | "ads" => Some(("Ada", (2, 248, 140))),
"dfm" | "dpr" | "lpr" | "pas" | "pascal" | "pp" => Some(("Pascal", (227, 241, 113))),
"ps1" | "psd1" | "psm1" => Some(("PowerShell", (1, 36, 86))),
"containerfile" | "dockerfile" => Some(("Dockerfile", (56, 77, 84))),
"d" | "mak" | "make" | "makefile" | "mk" | "mkfile" => Some(("Makefile", (66, 120, 25))),
"cmake" | "cmake.in" => Some(("CMake", (218, 52, 52))),
"nix" => Some(("Nix", (126, 126, 255))),
"gleam" => Some(("Gleam", (255, 175, 243))),
"cbl" | "ccp" | "cob" | "cobol" | "cpy" => Some(("COBOL", (136, 136, 136))),
"hc" => Some(("HolyC", (255, 239, 175))),
"bsl" | "os" => Some(("1C Enterprise", (129, 76, 204))),
"4dm" => Some(("4D", (0, 66, 137))),
"abap" => Some(("ABAP", (232, 39, 75))),
"asddls" => Some(("ABAP CDS", (85, 94, 37))),
"as" => Some(("ActionScript", (136, 43, 15))),
"agda" => Some(("Agda", (49, 86, 101))),
"asc" | "ash" => Some(("AGS Script", (185, 217, 255))),
"aidl" => Some(("AIDL", (52, 235, 107))),
"ak" => Some(("Aiken", (100, 15, 248))),
"alg" => Some(("ALGOL", (209, 224, 219))),
"als" => Some(("Alloy", (100, 200, 0))),
"ampl" | "mod" => Some(("AMPL", (230, 239, 187))),
"angelscript" => Some(("AngelScript", (199, 215, 220))),
"lp" => Some(("Answer Set Programming", (169, 204, 41))),
"g4" => Some(("ANTLR", (157, 195, 255))),
"apex" | "cls" => Some(("Apex", (23, 151, 192))),
"apl" | "dyalog" => Some(("APL", (90, 129, 100))),
"agc" => Some(("Apollo Guidance Computer", (11, 61, 145))),
"applescript" | "scpt" => Some(("AppleScript", (16, 31, 31))),
"arc" => Some(("Arc", (170, 42, 254))),
"asl" | "dsl" => Some(("ASL", (136, 136, 136))),
"asax" | "ascx" | "ashx" | "asmx" | "aspx" | "axd" => Some(("ASP.NET", (148, 0, 255))),
"aj" => Some(("AspectJ", (169, 87, 176))),
"asy" => Some(("Asymptote", (255, 0, 0))),
"dats" | "hats" | "sats" => Some(("ATS", (26, 198, 32))),
"aug" => Some(("Augeas", (156, 193, 52))),
"ahk" | "ahkl" => Some(("AutoHotkey", (101, 148, 185))),
"au3" => Some(("AutoIt", (28, 53, 82))),
"auk" | "awk" | "gawk" | "mawk" | "nawk" => Some(("Awk", (195, 14, 155))),
"mch" => Some(("B (Formal Method)", (138, 168, 197))),
"bas" => Some(("B4X", (0, 228, 255))),
"bal" => Some(("Ballerina", (255, 80, 0))),
"baml" => Some(("BAML", (168, 85, 247))),
"bat" | "cmd" => Some(("Batchfile", (193, 241, 46))),
"bf" => Some(("Beef", (165, 47, 78))),
"befunge" => Some(("Befunge", (136, 136, 136))),
"be" => Some(("Berry", (21, 161, 60))),
"bst" => Some(("BibTeX Style", (136, 136, 136))),
"bicep" | "bicepparam" => Some(("Bicep", (81, 154, 186))),
"bison" => Some(("Bison", (106, 70, 63))),
"bbappend" | "bbclass" => Some(("BitBake", (0, 188, 228))),
"decls" => Some(("BlitzBasic", (0, 255, 174))),
"bmx" => Some(("BlitzMax", (205, 100, 0))),
"bsv" => Some(("Bluespec", (18, 34, 60))),
"bs" => Some(("Bluespec BH", (18, 34, 60))),
"boo" => Some(("Boo", (212, 190, 193))),
"bpl" => Some(("Boogie", (200, 15, 160))),
"bqn" => Some(("BQN", (43, 112, 103))),
"b" => Some(("Brainfuck", (47, 37, 48))),
"brs" => Some(("Brightscript", (102, 45, 145))),
"chs" => Some(("C2hs Haskell", (136, 136, 136))),
"c3" => Some(("C3", (37, 99, 235))),
"cdc" => Some(("Cadence", (0, 239, 139))),
"cairo" => Some(("Cairo", (255, 74, 72))),
"mligo" => Some(("CameLIGO", (59, 225, 51))),
"cj" => Some(("Cangjie", (0, 134, 139))),
"cds" => Some(("CAP CDS", (0, 146, 209))),
"capnp" => Some(("Cap'n Proto", (196, 39, 39))),
"carbon" => Some(("Carbon", (34, 34, 34))),
"mss" => Some(("CartoCSS", (136, 136, 136))),
"ceylon" => Some(("Ceylon", (223, 165, 53))),
"chpl" => Some(("Chapel", (141, 198, 63))),
"ch" => Some(("Charity", (136, 136, 136))),
"ck" => Some(("ChucK", (63, 128, 0))),
"circom" => Some(("Circom", (112, 117, 117))),
"cirru" => Some(("Cirru", (204, 204, 255))),
"clw" => Some(("Clarion", (219, 144, 30))),
"clar" => Some(("Clarity", (85, 70, 255))),
"asp" => Some(("Classic ASP", (106, 64, 253))),
"dcl" | "icl" => Some(("Clean", (63, 133, 175))),
"click" => Some(("Click", (228, 230, 243))),
"clp" => Some(("CLIPS", (0, 163, 0))),
"clue" => Some(("Clue", (0, 9, 181))),
"ql" | "qll" => Some(("CodeQL", (20, 15, 70))),
"_coffee" | "cjsx" | "coffee" | "iced" => Some(("CoffeeScript", (36, 71, 118))),
"cfm" | "cfml" => Some(("ColdFusion", (237, 44, 214))),
"cfc" => Some(("ColdFusion CFC", (237, 44, 214))),
"asd" | "cl" | "l" | "lisp" | "lsp" | "ny" | "podsl" | "sexp" => Some(("Common Lisp", (63, 182, 139))),
"cwl" => Some(("Common Workflow Language", (181, 49, 76))),
"cps" => Some(("Component Pascal", (176, 206, 78))),
"cql" => Some(("CQL", (0, 96, 145))),
"orc" | "udo" => Some(("Csound", (26, 26, 26))),
"csd" => Some(("Csound Document", (26, 26, 26))),
"sco" => Some(("Csound Score", (26, 26, 26))),
"cu" | "cuh" => Some(("Cuda", (58, 78, 58))),
"cue" => Some(("CUE", (88, 134, 225))),
"curry" => Some(("Curry", (83, 18, 66))),
"w" => Some(("CWeb", (0, 0, 122))),
"cy" => Some(("Cycript", (136, 136, 136))),
"cyp" | "cypher" => Some(("Cypher", (52, 192, 235))),
"pxd" | "pxi" | "pyx" => Some(("Cython", (254, 223, 91))),
"di" => Some(("D", (186, 89, 94))),
"dfy" => Some(("Dafny", (255, 236, 37))),
"das" => Some(("Daslang", (211, 211, 211))),
"dwl" => Some(("DataWeave", (0, 58, 82))),
"dsc" => Some(("DenizenScript", (251, 238, 150))),
"dhall" => Some(("Dhall", (223, 175, 255))),
"com" => Some(("DIGITAL Command Language", (136, 136, 136))),
"dm" => Some(("DM", (68, 114, 101))),
"djs" => Some(("Dogescript", (204, 167, 96))),
"dyl" | "dylan" | "intr" | "lid" => Some(("Dylan", (108, 97, 110))),
"e" => Some(("E", (204, 206, 53))),
"ec" | "eh" => Some(("eC", (145, 57, 96))),
"ecl" | "eclxml" => Some(("ECL", (138, 18, 103))),
"edgeql" | "esdl" => Some(("EdgeQL", (49, 167, 255))),
"elm" => Some(("Elm", (96, 181, 204))),
"elv" => Some(("Elvish", (85, 187, 85))),
"el" | "emacs" | "emacs.desktop" => Some(("Emacs Lisp", (192, 101, 219))),
"em" | "emberscript" => Some(("EmberScript", (255, 244, 243))),
"eq" => Some(("EQ", (167, 134, 73))),
"fst" | "fsti" => Some(("F*", (87, 46, 48))),
"factor" => Some(("Factor", (99, 103, 70))),
"fancypack" | "fy" => Some(("Fancy", (123, 157, 180))),
"fan" => Some(("Fantom", (20, 37, 60))),
"dsp" => Some(("Faust", (195, 114, 64))),
"fnl" => Some(("Fennel", (255, 243, 215))),
"fir" => Some(("FIRRTL", (47, 99, 47))),
"fish" => Some(("fish", (74, 174, 71))),
"flix" => Some(("Flix", (212, 74, 69))),
"ftl" => Some(("Fluent", (255, 204, 51))),
"flux" | "fx" => Some(("FLUX", (136, 204, 255))),
"4th" | "forth" | "fr" | "frt" | "fth" => Some(("Forth", (52, 23, 8))),
"f03" | "f08" | "f90" | "f95" => Some(("Fortran Free Form", (77, 65, 177))),
"bi" => Some(("FreeBASIC", (20, 26, 201))),
"ftlh" => Some(("FreeMarker", (0, 80, 178))),
"fut" => Some(("Futhark", (95, 2, 31))),
"cnc" | "g" | "gco" | "gcode" => Some(("G-code", (208, 140, 242))),
"gml" => Some(("Game Maker Language", (113, 180, 23))),
"gaml" => Some(("GAML", (255, 199, 102))),
"gms" => Some(("GAMS", (244, 154, 34))),
"gap" | "gd" | "gi" | "tst" => Some(("GAP", (0, 0, 204))),
"md" => Some(("GCC Machine Description", (255, 207, 171))),
"gdb" | "gdbinit" => Some(("GDB", (136, 136, 136))),
"gdshader" | "gdshaderinc" => Some(("GDShader", (71, 140, 191))),
"4gl" => Some(("Genero 4gl", (99, 64, 142))),
"kid" => Some(("Genshi", (149, 21, 49))),
"ebuild" => Some(("Gentoo Ebuild", (148, 0, 255))),
"eclass" => Some(("Gentoo Eclass", (148, 0, 255))),
"feature" | "story" => Some(("Gherkin", (91, 32, 99))),
"gjs" => Some(("Glimmer JS", (245, 131, 95))),
"gts" => Some(("Glimmer TS", (49, 120, 198))),
"fp" | "frg" | "fsh" | "fshader" | "geo" | "geom" | "glsl" | "glslf" | "glslv" | "gshader" | "rchit" | "rmiss" | "shader" | "tesc" | "tese" | "vert" | "vrx" | "vs" | "vsh" | "vshader" => Some(("GLSL", (86, 134, 165))),
"glf" => Some(("Glyph", (193, 172, 127))),
"gno" => Some(("Gno", (83, 12, 4))),
"gnu" | "gnuplot" | "gp" | "p" | "plot" | "plt" => Some(("Gnuplot", (240, 169, 240))),
"golo" => Some(("Golo", (136, 86, 42))),
"gst" | "gsx" | "vark" => Some(("Gosu", (130, 147, 127))),
"grace" => Some(("Grace", (97, 95, 139))),
"gf" => Some(("Grammatical Framework", (255, 0, 0))),
"groovy" | "grt" | "gtpl" | "gvy" => Some(("Groovy", (66, 152, 184))),
"gsp" => Some(("Groovy Server Pages", (66, 152, 184))),
"csc" | "gsc" | "gsh" => Some(("GSC", (255, 104, 0))),
"hack" | "hhi" => Some(("Hack", (135, 135, 135))),
"hb" => Some(("Harbour", (14, 96, 227))),
"ha" => Some(("Hare", (157, 116, 36))),
"hx" | "hxsl" => Some(("Haxe", (223, 121, 0))),
"hcl" | "nomad" | "tf" | "tfvars" | "tofu" | "workflow" => Some(("HCL", (132, 79, 186))),
"hip" => Some(("HIP", (79, 58, 79))),
"hql" | "q" => Some(("HiveQL", (220, 226, 0))),
"cginc" | "fxh" | "hlsl" | "hlsli" => Some(("HLSL", (170, 206, 96))),
"hoon" => Some(("hoon", (0, 177, 113))),
"hurl" => Some(("Hurl", (255, 2, 136))),
"hy" => Some(("Hy", (119, 144, 178))),
"dlm" | "pro" => Some(("IDL", (163, 82, 47))),
"idr" | "lidr" => Some(("Idris", (179, 0, 0))),
"ipf" => Some(("IGOR Pro", (0, 0, 204))),
"il" => Some(("IL Assembly", (81, 43, 212))),
"ijm" => Some(("ImageJ Macro", (153, 170, 255))),
"imba" => Some(("Imba", (22, 206, 198))),
"i7x" | "ni" => Some(("Inform 7", (136, 136, 136))),
"ink" => Some(("Ink", (136, 136, 136))),
"isl" | "iss" => Some(("Inno Setup", (38, 75, 153))),
"io" => Some(("Io", (169, 24, 141))),
"ik" => Some(("Ioke", (7, 129, 147))),
"thy" => Some(("Isabelle", (254, 254, 0))),
"ispc" => Some(("ISPC", (45, 104, 177))),
"ijs" => Some(("J", (158, 237, 255))),
"jac" => Some(("Jac", (252, 121, 45))),
"jai" => Some(("Jai", (171, 139, 75))),
"janet" => Some(("Janet", (8, 134, 165))),
"j" => Some(("Jasmin", (208, 54, 0))),
"jsp" | "tag" => Some(("Java Server Pages", (42, 98, 119))),
"jte" => Some(("Java Template Engine", (42, 98, 119))),
"js.erb" => Some(("JavaScript+ERB", (241, 224, 90))),
"jcl" => Some(("JCL", (217, 14, 9))),
"mpl" | "mps" | "msd" => Some(("JetBrains MPS", (33, 215, 137))),
"flex" | "jflex" => Some(("JFlex", (219, 202, 0))),
"jison" => Some(("Jison", (86, 179, 203))),
"jisonlex" => Some(("Jison Lex", (86, 179, 203))),
"iol" | "ol" => Some(("Jolie", (132, 49, 121))),
"jq" => Some(("jq", (199, 37, 78))),
"jsonnet" | "libsonnet" => Some(("Jsonnet", (0, 100, 189))),
"jl" => Some(("Julia", (162, 112, 186))),
"just" => Some(("Just", (56, 77, 84))),
"ksy" => Some(("Kaitai Struct", (119, 59, 55))),
"kak" => Some(("KakouneScript", (111, 128, 66))),
"k" => Some(("KCL", (122, 186, 191))),
"ks" => Some(("KerboScript", (65, 173, 240))),
"kk" => Some(("Koka", (33, 81, 102))),
"krl" => Some(("KRL", (40, 67, 10))),
"lvclass" | "lvlib" | "lvproj" => Some(("LabVIEW", (254, 222, 6))),
"langium" => Some(("Langium", (44, 140, 135))),
"las" | "lasso" | "lasso8" | "lasso9" => Some(("Lasso", (153, 153, 153))),
"hlean" | "lean" => Some(("Lean", (136, 136, 136))),
"leo" => Some(("Leo", (196, 255, 194))),
"lex" => Some(("Lex", (219, 202, 0))),
"lfe" => Some(("LFE", (76, 48, 35))),
"ligo" => Some(("LigoLANG", (14, 116, 255))),
"ily" | "ly" => Some(("LilyPond", (156, 204, 124))),
"ld" | "lds" | "x" => Some(("Linker Script", (136, 136, 136))),
"liq" => Some(("Liquidsoap", (153, 0, 102))),
"lagda" => Some(("Literate Agda", (49, 86, 101))),
"coffee.md" | "litcoffee" => Some(("Literate CoffeeScript", (36, 71, 118))),
"lhs" => Some(("Literate Haskell", (94, 80, 134))),
"livecodescript" => Some(("LiveCode Script", (12, 91, 165))),
"_ls" | "ls" => Some(("LiveScript", (73, 152, 134))),
"ll" => Some(("LLVM", (24, 86, 25))),
"xi" | "xm" => Some(("Logos", (136, 136, 136))),
"lgt" | "logtalk" => Some(("Logtalk", (41, 91, 154))),
"lol" => Some(("LOLCODE", (204, 153, 0))),
"lkml" | "lookml" => Some(("LookML", (101, 43, 129))),
"lsl" | "lslp" => Some(("LSL", (61, 153, 112))),
"luau" => Some(("Luau", (0, 162, 255))),
"mumps" => Some(("M", (136, 136, 136))),
"m4" | "mc" => Some(("M4", (136, 136, 136))),
"m2" => Some(("Macaulay2", (216, 255, 255))),
"mako" | "mao" => Some(("Mako", (126, 133, 141))),
"matlab" => Some(("MATLAB", (225, 103, 55))),
"maxhelp" | "maxpat" | "maxproj" | "mxt" | "pat" => Some(("Max", (196, 167, 156))),
"mcr" | "ms" => Some(("MAXScript", (0, 166, 166))),
"mcfunction" => Some(("mcfunction", (226, 40, 55))),
"moo" => Some(("Mercury", (255, 43, 43))),
"metal" => Some(("Metal", (143, 20, 233))),
"metta" => Some(("MeTTa", (106, 90, 205))),
"minid" => Some(("MiniD", (136, 136, 136))),
"mzn" => Some(("MiniZinc", (6, 169, 230))),
"mint" => Some(("Mint", (2, 176, 70))),
"druby" | "duby" | "mirah" => Some(("Mirah", (199, 169, 56))),
"mrc" => Some(("mIRC Script", (61, 87, 195))),
"mlir" => Some(("MLIR", (94, 200, 219))),
"mo" => Some(("Modelica", (222, 29, 49))),
"i3" | "ig" | "m3" | "mg" => Some(("Modula-3", (34, 51, 136))),
"mmk" | "mms" => Some(("Module Management System", (136, 136, 136))),
"mojo" => Some(("Mojo", (255, 76, 31))),
"monkey" | "monkey2" => Some(("Monkey", (136, 136, 136))),
"mbt" => Some(("MoonBit", (185, 35, 129))),
"moon" => Some(("MoonScript", (255, 69, 133))),
"x68" => Some(("Motorola 68K Assembly", (0, 93, 170))),
"move" => Some(("Move", (74, 19, 122))),
"mq4" | "mqh" => Some(("MQL4", (98, 168, 214))),
"mq5" => Some(("MQL5", (74, 118, 184))),
"muf" => Some(("MUF", (136, 136, 136))),
"mu" => Some(("mupad", (36, 73, 99))),
"myt" => Some(("Myghty", (136, 136, 136))),
"nasl" => Some(("NASL", (136, 136, 136))),
"ncl" => Some(("NCL", (40, 67, 31))),
"ne" | "nearley" => Some(("Nearley", (153, 0, 0))),
"n" => Some(("Nemerle", (61, 60, 110))),
"nc" => Some(("nesC", (148, 176, 199))),
"axi" | "axs" => Some(("NetLinx", (10, 160, 255))),
"axi.erb" | "axs.erb" => Some(("NetLinx+ERB", (116, 127, 170))),
"nlogo" => Some(("NetLogo", (255, 99, 117))),
"nl" => Some(("NewLisp", (135, 174, 215))),
"nf" => Some(("Nextflow", (58, 196, 134))),
"nit" => Some(("Nit", (0, 153, 23))),
"nr" => Some(("Noir", (47, 31, 73))),
"nsh" | "nsi" => Some(("NSIS", (136, 136, 136))),
"nu" => Some(("Nu", (201, 223, 64))),
"numpy" | "numpyw" | "numsc" => Some(("NumPy", (156, 138, 249))),
"nss" => Some(("NWScript", (17, 21, 34))),
"ob2" => Some(("Oberon", (136, 136, 136))),
"mm" => Some(("Objective-C++", (104, 102, 251))),
"sj" => Some(("Objective-J", (255, 12, 90))),
"odin" => Some(("Odin", (96, 175, 254))),
"omgrofl" => Some(("Omgrofl", (202, 187, 255))),
"msg" => Some(("OMNeT++ MSG", (160, 224, 160))),
"ned" => Some(("OMNeT++ NED", (8, 96, 124))),
"ooc" => Some(("ooc", (176, 183, 126))),
"opa" => Some(("Opa", (136, 136, 136))),
"opal" => Some(("Opal", (247, 237, 224))),
"rego" => Some(("Open Policy Agent", (125, 145, 153))),
"opencl" => Some(("OpenCL", (237, 46, 45))),
"qasm" => Some(("OpenQASM", (170, 112, 255))),
"scad" => Some(("OpenSCAD", (229, 205, 69))),
"overpassql" => Some(("OverpassQL", (204, 226, 170))),
"opy" => Some(("OverPy", (120, 179, 85))),
"ox" | "oxh" | "oxo" => Some(("Ox", (136, 136, 136))),
"oxygene" => Some(("Oxygene", (205, 208, 227))),
"oz" => Some(("Oz", (250, 183, 56))),
"p4" => Some(("P4", (112, 85, 181))),
"pact" => Some(("Pact", (247, 168, 184))),
"pan" => Some(("Pan", (204, 0, 0))),
"psc" => Some(("Papyrus", (102, 0, 204))),
"parrot" => Some(("Parrot", (243, 202, 10))),
"pasm" => Some(("Parrot Assembly", (136, 136, 136))),
"pir" => Some(("Parrot Internal Representation", (136, 136, 136))),
"pwn" | "sma" => Some(("Pawn", (219, 178, 132))),
"pddl" => Some(("PDDL", (13, 0, 255))),
"peggy" | "pegjs" => Some(("PEG.js", (35, 77, 107))),
"pep" => Some(("Pep8", (199, 111, 91))),
"pig" => Some(("PigLatin", (252, 215, 222))),
"pike" | "pmod" => Some(("Pike", (0, 83, 144))),
"pkl" => Some(("Pkl", (107, 149, 67))),
"pgsql" | "sql" => Some(("PLpgSQL", (51, 103, 144))),
"bdy" | "ddl" | "fnc" | "pck" | "pkb" | "pks" | "plb" | "pls" | "plsql" | "prc" | "spc" | "tpb" | "tps" | "trg" | "vw" => Some(("PLSQL", (218, 216, 216))),
"pogo" => Some(("PogoScript", (216, 0, 116))),
"polar" => Some(("Polar", (174, 129, 255))),
"pony" => Some(("Pony", (136, 136, 136))),
"por" => Some(("Portugol", (248, 189, 0))),
"pov" => Some(("POV-Ray SDL", (107, 172, 101))),
"pq" => Some(("Power Query", (211, 142, 13))),
"pbt" | "sra" | "sru" | "srw" => Some(("PowerBuilder", (143, 15, 141))),
"praat" => Some(("Praat", (200, 80, 109))),
"pc" => Some(("Pro*C", (187, 131, 104))),
"pde" => Some(("Processing", (0, 150, 216))),
"prolog" | "yap" => Some(("Prolog", (116, 40, 60))),
"pml" => Some(("Promela", (222, 0, 0))),
"spin" => Some(("Propeller Spin", (127, 162, 167))),
"pb" | "pbi" => Some(("PureBasic", (90, 105, 134))),
"purs" => Some(("PureScript", (29, 34, 45))),
"arr" => Some(("Pyret", (238, 30, 16))),
"qs" => Some(("Q#", (254, 214, 89))),
"pri" => Some(("QMake", (136, 136, 136))),
"qbs" | "qml" => Some(("QML", (68, 165, 28))),
"qc" => Some(("QuakeC", (151, 87, 119))),
"qnt" => Some(("Quint", (157, 108, 229))),
"rkt" | "rktd" | "rktl" | "scrbl" => Some(("Racket", (60, 92, 170))),
"rl" => Some(("Ragel", (157, 82, 0))),
"6pl" | "6pm" | "nqp" | "p6" | "p6l" | "p6m" | "pl6" | "pm6" | "raku" | "rakumod" => Some(("Raku", (0, 0, 251))),
"rsc" => Some(("Rascal", (255, 250, 160))),
"rascript" => Some(("RAScript", (44, 151, 250))),
"rbbas" | "rbfrm" | "rbmnu" | "rbres" | "rbtbar" | "rbuistate" => Some(("REALbasic", (136, 136, 136))),
"rei" => Some(("Reason", (255, 88, 71))),
"religo" => Some(("ReasonLIGO", (255, 88, 71))),
"r2" | "r3" | "reb" | "rebol" => Some(("Rebol", (53, 138, 91))),
"red" | "reds" => Some(("Red", (245, 0, 0))),
"cw" => Some(("Redcode", (136, 136, 136))),
"rsh" => Some(("RenderScript", (136, 136, 136))),
"res" | "resi" => Some(("ReScript", (237, 80, 81))),
"pprx" | "rex" | "rexx" => Some(("REXX", (217, 14, 9))),
"ring" => Some(("Ring", (45, 84, 203))),
"resource" | "robot" => Some(("RobotFramework", (0, 192, 181))),
"roc" => Some(("Roc", (124, 56, 245))),
"coq" | "v" => Some(("Rocq Prover", (208, 182, 140))),
"rg" => Some(("Rouge", (204, 0, 136))),
"rpgle" | "sqlrpgle" => Some(("RPGLE", (43, 222, 33))),
"sage" | "sagews" => Some(("Sage", (136, 136, 136))),
"sail" => Some(("Sail", (37, 157, 213))),
"sls" => Some(("SaltStack", (100, 100, 100))),
"sas" => Some(("SAS", (179, 73, 54))),
"scenic" => Some(("Scenic", (253, 199, 0))),
"sch" | "scm" | "sld" | "sps" | "ss" => Some(("Scheme", (30, 74, 236))),
"sce" | "sci" => Some(("Scilab", (202, 15, 33))),
"sed" => Some(("sed", (100, 185, 112))),
"self" => Some(("Self", (5, 121, 170))),
"sh-session" => Some(("ShellSession", (136, 136, 136))),
"shen" => Some(("Shen", (18, 15, 20))),
"sieve" => Some(("Sieve", (136, 136, 136))),
"slang" => Some(("Slang", (31, 190, 201))),
"sl" => Some(("Slash", (0, 126, 255))),
"ice" => Some(("Slice", (0, 63, 162))),
"smali" => Some(("Smali", (136, 136, 136))),
"st" => Some(("Smalltalk", (89, 103, 6))),
"tpl" => Some(("Smarty", (240, 192, 64))),
"smithy" => Some(("Smithy", (196, 69, 54))),
"cocci" => Some(("SmPL", (201, 73, 73))),
"smt" | "smt2" | "z3" => Some(("SMT", (136, 136, 136))),
"smk" | "snakefile" => Some(("Snakemake", (65, 145, 121))),
"sol" => Some(("Solidity", (170, 103, 70))),
"sp" => Some(("SourcePawn", (246, 158, 29))),
"hqf" | "sqf" => Some(("SQF", (63, 63, 63))),
"db2" => Some(("SQLPL", (227, 140, 0))),
"nut" => Some(("Squirrel", (128, 0, 0))),
"stan" => Some(("Stan", (178, 1, 29))),
"fun" | "sig" | "sml" => Some(("Standard ML", (220, 86, 109))),
"bzl" | "star" => Some(("Starlark", (118, 210, 117))),
"ado" | "do" | "doh" | "ihlp" | "mata" | "matah" | "sthlp" => Some(("Stata", (26, 95, 145))),
"scd" => Some(("SuperCollider", (70, 57, 11))),
"surql" => Some(("SurrealQL", (255, 0, 160))),
"sw" => Some(("Sway", (0, 245, 140))),
"swg" | "swig" => Some(("SWIG", (136, 136, 136))),
"sv" | "svh" | "vh" => Some(("SystemVerilog", (218, 225, 194))),
"tact" => Some(("Tact", (72, 181, 255))),
"talon" => Some(("Talon", (51, 51, 51))),
"adp" | "sdc" | "tcl" | "tcl.in" | "tm" | "xdc" => Some(("Tcl", (228, 204, 152))),
"csh" | "tcsh" => Some(("Tcsh", (136, 136, 136))),
"tl" => Some(("Teal", (0, 177, 188))),
"thrift" => Some(("Thrift", (209, 33, 39))),
"8xp" | "8xp.txt" => Some(("TI Program", (160, 170, 135))),
"tlv" => Some(("TL-Verilog", (196, 0, 35))),
"tla" => Some(("TLA", (75, 0, 121))),
"toit" => Some(("Toit", (194, 201, 251))),
"tsx" => Some(("TSX", (49, 120, 198))),
"tu" => Some(("Turing", (207, 20, 43))),
"txl" => Some(("TXL", (1, 120, 184))),
"tsp" => Some(("TypeSpec", (74, 54, 101))),
"typ" => Some(("Typst", (35, 157, 173))),
"upc" => Some(("Unified Parallel C", (78, 54, 23))),
"uno" => Some(("Uno", (153, 51, 204))),
"uc" => Some(("UnrealScript", (165, 76, 77))),
"uplc" => Some(("Untyped Plutus Core", (54, 173, 189))),
"ur" | "urs" => Some(("UrWeb", (204, 204, 238))),
"vala" | "vapi" => Some(("Vala", (165, 109, 226))),
"frm" | "vba" => Some(("VBA", (134, 125, 177))),
"vbs" => Some(("VBScript", (21, 220, 220))),
"vcl" => Some(("VCL", (20, 138, 168))),
"veo" => Some(("Verilog", (178, 183, 248))),
"vhd" | "vhdl" | "vhf" | "vhi" | "vho" | "vhs" | "vht" | "vhw" => Some(("VHDL", (173, 178, 203))),
"vim" | "vimrc" | "vmb" => Some(("Vim Script", (25, 159, 75))),
"vb" | "vbhtml" => Some(("Visual Basic .NET", (148, 93, 183))),
"Dsr" | "ctl" => Some(("Visual Basic 6.0", (44, 99, 83))),
"volt" => Some(("Volt", (31, 31, 31))),
"vy" => Some(("Vyper", (159, 76, 242))),
"wdl" => Some(("WDL", (66, 241, 244))),
"wast" | "wat" => Some(("WebAssembly", (4, 19, 59))),
"webidl" => Some(("WebIDL", (136, 136, 136))),
"wgsl" => Some(("WGSL", (26, 94, 154))),
"whiley" => Some(("Whiley", (213, 195, 151))),
"wisp" => Some(("wisp", (117, 130, 209))),
"ws" => Some(("Witcher Script", (255, 0, 0))),
"cdf" | "ma" | "mathematica" | "mt" | "nb" | "nbp" | "wl" | "wls" | "wlt" => Some(("Wolfram Language", (221, 17, 0))),
"wlk" => Some(("Wollok", (162, 55, 56))),
"wren" => Some(("Wren", (56, 56, 56))),
"x10" => Some(("X10", (75, 107, 239))),
"prg" | "prw" => Some(("xBase", (64, 58, 64))),
"xc" => Some(("XC", (153, 218, 7))),
"xojo_code" | "xojo_menu" | "xojo_report" | "xojo_script" | "xojo_toolbar" | "xojo_window" => Some(("Xojo", (129, 189, 65))),
"xsh" => Some(("Xonsh", (40, 94, 239))),
"xpl" | "xproc" => Some(("XProc", (136, 136, 136))),
"xq" | "xql" | "xqm" | "xquery" | "xqy" => Some(("XQuery", (82, 50, 231))),
"xs" => Some(("XS", (136, 136, 136))),
"xsl" | "xslt" => Some(("XSLT", (235, 140, 235))),
"xtend" => Some(("Xtend", (36, 37, 93))),
"y" | "yacc" | "yy" => Some(("Yacc", (75, 108, 75))),
"yar" | "yara" => Some(("YARA", (34, 0, 0))),
"yul" => Some(("Yul", (121, 73, 50))),
"xzap" | "zap" => Some(("ZAP", (13, 102, 94))),
"bro" | "zeek" => Some(("Zeek", (136, 136, 136))),
"zs" => Some(("ZenScript", (0, 188, 209))),
"zep" => Some(("Zephir", (17, 143, 158))),
"mud" | "zil" => Some(("ZIL", (220, 117, 229))),
"zimpl" | "zmpl" | "zpl" => Some(("Zimpl", (214, 119, 17))),
_ => None,
}
} else {
match path.file_name().and_then(|n| n.to_str()) {
Some("Makefile" | "makefile" | "GNUmakefile") => Some(("Makefile", (66, 120, 25))),
Some("Dockerfile" | "dockerfile" | "Containerfile") => Some(("Dockerfile", (56, 77, 84))),
Some("CMakeLists.txt") => Some(("CMake", (218, 52, 52))),
_ => None,
}
}
}