NerdFonts.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790
  1. // This code is adapted from https://github.com/devblackops/Terminal-Icons (which also uses the MIT license).
  2. // Nerd fonts can be installed by following the instructions on the Nerd Fonts repository: https://github.com/ryanoasis/nerd-fonts
  3. using System.Collections.Generic;
  4. using System.IO.Abstractions;
  5. using static Terminal.Gui.ConfigurationManager;
  6. namespace Terminal.Gui {
  7. internal class NerdFonts {
  8. /// <summary>
  9. /// If <see langword="true"/>, enables the use of Nerd unicode symbols.
  10. /// This requires specific font(s) to be installed on the users machine
  11. /// to work correctly. Defaults to <see langword="false"/>.
  12. /// </summary>
  13. [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
  14. public static bool Enable { get; set; } = false;
  15. public string GetNerdIcon(FileDialogIconGetterArgs args)
  16. {
  17. return GetNerdIconChar(args) + " ";
  18. }
  19. private char GetNerdIconChar(FileDialogIconGetterArgs args)
  20. {
  21. var file = args.File;
  22. var path = args.FileDialog.Path;
  23. if(FilenameToIcon.ContainsKey(file.Name))
  24. {
  25. return Glyphs[FilenameToIcon[file.Name]];
  26. }
  27. if(ExtensionToIcon.ContainsKey(file.Extension))
  28. {
  29. return Glyphs[ExtensionToIcon[file.Extension]];
  30. }
  31. if(file is IDirectoryInfo d)
  32. {
  33. if(!string.IsNullOrWhiteSpace(path) &&
  34. path.Contains(d.FullName) &&
  35. args.Context == FileDialogIconGetterContext.Tree)
  36. {
  37. return _nf_cod_folder_opened;
  38. }
  39. return _nf_cod_folder;
  40. }
  41. return _nf_cod_file;
  42. }
  43. char _nf_cod_folder = '';
  44. char _nf_cod_folder_opened = '';
  45. char _nf_cod_file = '';
  46. /// <summary>
  47. /// All nerd glyphs used by Terminal.Gui by name.
  48. /// </summary>
  49. public Dictionary<string,char> Glyphs {get;set;} = new Dictionary<string, char>{
  50. {"nf-cod-package", ''},
  51. {"nf-cod-preview", ''},
  52. {"nf-custom-folder_config", ''},
  53. {"nf-custom-folder_git", ''},
  54. {"nf-custom-folder_git_branch", ''},
  55. {"nf-custom-folder_github", ''},
  56. {"nf-custom-folder_npm", ''},
  57. {"nf-dev-aws", ''},
  58. {"nf-dev-docker", ''},
  59. {"nf-dev-html5_multimedia", ''},
  60. {"nf-fa-font", ''},
  61. {"nf-fa-font_awesome", ''},
  62. {"nf-fa-fonticons", ''},
  63. {"nf-fa-github_alt", ''},
  64. {"nf-fa-users", ''},
  65. {"nf-fa-windows", ''},
  66. {"nf-mdi-apps", ''},
  67. {"nf-mdi-azure", 'ﴃ'},
  68. {"nf-mdi-cached", ''},
  69. {"nf-mdi-contacts", '﯉'},
  70. {"nf-mdi-desktop_classic", 'ﲾ'},
  71. {"nf-mdi-folder_download", ''},
  72. {"nf-mdi-folder_image", ''},
  73. {"nf-mdi-folder_star", 'ﮛ'},
  74. {"nf-mdi-library_music", ''},
  75. {"nf-mdi-movie", ''},
  76. {"nf-mdi-movie_roll", 'ﳜ'},
  77. {"nf-mdi-onedrive", ''},
  78. {"nf-mdi-ship_wheel", 'ﴱ'},
  79. {"nf-mdi-test_tube", 'ﭧ'},
  80. {"nf-mdi-timer", '祥'},
  81. {"nf-mdi-timer_10", '福'},
  82. {"nf-mdi-timer_3", '靖'},
  83. {"nf-mdi-timer_off", '精'},
  84. {"nf-mdi-timer_sand", '羽'},
  85. {"nf-mdi-timer_sand_empty", 'ﮫ'},
  86. {"nf-mdi-timer_sand_full", 'ﲊ'},
  87. {"nf-mdi-umbraco", '煮'},
  88. {"nf-oct-file_binary", ''},
  89. {"nf-oct-file_symlink_directory", ''},
  90. {"nf-oct-repo", ''},
  91. {"nf-oct-repo_clone", ''},
  92. {"nf-oct-repo_force_push", ''},
  93. {"nf-oct-repo_forked", ''},
  94. {"nf-oct-repo_pull", ''},
  95. {"nf-oct-repo_push", ''},
  96. {"nf-oct-terminal", ''},
  97. {"nf-seti-config", ''},
  98. {"nf-seti-project", ''},
  99. {"nf-custom-elixir", ''},
  100. {"nf-custom-elm", ''},
  101. {"nf-custom-msdos", ''},
  102. {"nf-custom-puppet", ''},
  103. {"nf-custom-vim", ''},
  104. {"nf-dev-apple", ''},
  105. {"nf-dev-bitbucket", ''},
  106. {"nf-dev-bower", ''},
  107. {"nf-dev-clojure", ''},
  108. {"nf-dev-clojure_alt", ''},
  109. {"nf-dev-code_badge", ''},
  110. {"nf-dev-css3", ''},
  111. {"nf-dev-css3_full", ''},
  112. {"nf-dev-dart", ''},
  113. {"nf-dev-database", ''},
  114. {"nf-dev-erlang", ''},
  115. {"nf-dev-firebase", ''},
  116. {"nf-dev-fsharp", ''},
  117. {"nf-dev-git", ''},
  118. {"nf-dev-git_branch", ''},
  119. {"nf-dev-git_commit", ''},
  120. {"nf-dev-git_compare", ''},
  121. {"nf-dev-git_merge", ''},
  122. {"nf-dev-git_pull_request", ''},
  123. {"nf-dev-github", ''},
  124. {"nf-dev-github_alt", ''},
  125. {"nf-dev-github_badge", ''},
  126. {"nf-dev-github_full", ''},
  127. {"nf-dev-go", ''},
  128. {"nf-dev-google_cloud_platform", ''},
  129. {"nf-dev-google_drive", ''},
  130. {"nf-dev-groovy", ''},
  131. {"nf-dev-gulp", ''},
  132. {"nf-dev-haskell", ''},
  133. {"nf-dev-javascript", ''},
  134. {"nf-dev-javascript_badge", ''},
  135. {"nf-dev-javascript_shield", ''},
  136. {"nf-dev-jenkins", ''},
  137. {"nf-dev-less", ''},
  138. {"nf-dev-markdown", ''},
  139. {"nf-dev-nodejs_small", ''},
  140. {"nf-dev-npm", ''},
  141. {"nf-dev-perl", ''},
  142. {"nf-dev-php", ''},
  143. {"nf-dev-python", ''},
  144. {"nf-dev-react", ''},
  145. {"nf-dev-rust", ''},
  146. {"nf-dev-sass", ''},
  147. {"nf-dev-sublime", ''},
  148. {"nf-dev-travis", ''},
  149. {"nf-dev-visualstudio", ''},
  150. {"nf-fa-archive", ''},
  151. {"nf-fa-calendar", ''},
  152. {"nf-fa-calendar_check_o", ''},
  153. {"nf-fa-calendar_minus_o", ''},
  154. {"nf-fa-calendar_o", ''},
  155. {"nf-fa-calendar_plus_o", ''},
  156. {"nf-fa-calendar_times_o", ''},
  157. {"nf-fa-certificate", ''},
  158. {"nf-fa-eye", ''},
  159. {"nf-fa-eye_slash", ''},
  160. {"nf-fa-eyedropper", ''},
  161. {"nf-fa-file_audio_o", ''},
  162. {"nf-fa-file_image_o", ''},
  163. {"nf-fa-file_o", ''},
  164. {"nf-fa-file_video_o", ''},
  165. {"nf-fa-gear", ''},
  166. {"nf-fa-gears", ''},
  167. {"nf-fa-gitlab", ''},
  168. {"nf-fa-handshake_o", ''},
  169. {"nf-fa-key", ''},
  170. {"nf-fa-keyboard_o", ''},
  171. {"nf-fa-list", ''},
  172. {"nf-fa-list_alt", ''},
  173. {"nf-fa-list_ol", ''},
  174. {"nf-fa-list_ul", ''},
  175. {"nf-fa-lock", ''},
  176. {"nf-fae-checklist_o", ''},
  177. {"nf-fae-disco", ''},
  178. {"nf-fae-java", ''},
  179. {"nf-mdi-application", 'ﬓ'},
  180. {"nf-mdi-certificate", ''},
  181. {"nf-mdi-console_line", 'ﲵ'},
  182. {"nf-mdi-elephant", 'ﳄ'},
  183. {"nf-mdi-file_document", ''},
  184. {"nf-mdi-file_document_box", ''},
  185. {"nf-mdi-file_excel", ''},
  186. {"nf-mdi-file_excel_box", ''},
  187. {"nf-mdi-file_pdf", ''},
  188. {"nf-mdi-file_pdf_box", ''},
  189. {"nf-mdi-file_powerpoint", ''},
  190. {"nf-mdi-file_powerpoint_box", ''},
  191. {"nf-mdi-file_word", ''},
  192. {"nf-mdi-file_word_box", ''},
  193. {"nf-mdi-file_xml", ''},
  194. {"nf-mdi-format_align_left", ''},
  195. {"nf-mdi-harddisk", ''},
  196. {"nf-mdi-help_box", 'ﲉ'},
  197. {"nf-mdi-language_c", 'ﭰ'},
  198. {"nf-mdi-language_cpp", 'ﭱ'},
  199. {"nf-mdi-language_csharp", ''},
  200. {"nf-mdi-language_css3", ''},
  201. {"nf-mdi-language_r", 'ﳒ'},
  202. {"nf-mdi-library_books", ''},
  203. {"nf-mdi-notebook", 'ﴬ'},
  204. {"nf-mdi-package_variant", ''},
  205. {"nf-mdi-package_variant_closed", ''},
  206. {"nf-mdi-svg", 'ﰟ'},
  207. {"nf-mdi-visualstudio", '﬏'},
  208. {"nf-mdi-vuejs", '﵂'},
  209. {"nf-mdi-xaml", 'ﭲ'},
  210. {"nf-oct-file_zip", ''},
  211. {"nf-oct-person", ''},
  212. {"nf-oct-ruby", ''},
  213. {"nf-seti-favicon", ''},
  214. {"nf-seti-grunt", ''},
  215. {"nf-seti-html", ''},
  216. {"nf-seti-json", ''},
  217. {"nf-seti-julia", ''},
  218. {"nf-seti-lua", ''},
  219. {"nf-seti-mustache", ''},
  220. {"nf-seti-typescript", ''},
  221. };
  222. /// <summary>
  223. /// Mapping of file name to <see cref="Glyphs"/> name.
  224. /// </summary>
  225. public Dictionary<string, string> FilenameToIcon {get;set;} = new Dictionary<string, string> ()
  226. {
  227. {"docs","nf-oct-repo"},
  228. {"documents","nf-oct-repo"},
  229. {"desktop","nf-mdi-desktop_classic"},
  230. {"benchmark","nf-mdi-timer"},
  231. {"demo","nf-cod-preview"},
  232. {"samples","nf-cod-preview"},
  233. {"contacts","nf-mdi-contacts"},
  234. {"apps","nf-mdi-apps"},
  235. {"applications","nf-mdi-apps"},
  236. {"artifacts","nf-cod-package"},
  237. {"shortcuts","nf-oct-file_symlink_directory"},
  238. {"links","nf-oct-file_symlink_directory"},
  239. {"fonts","nf-fa-font"},
  240. {"images","nf-mdi-folder_image"},
  241. {"photos","nf-mdi-folder_image"},
  242. {"pictures","nf-mdi-folder_image"},
  243. {"videos","nf-mdi-movie"},
  244. {"movies","nf-mdi-movie"},
  245. {"media","nf-dev-html5_multimedia"},
  246. {"music","nf-mdi-library_music"},
  247. {"songs","nf-mdi-library_music"},
  248. {"onedrive","nf-mdi-onedrive"},
  249. {"downloads","nf-mdi-folder_download"},
  250. {"src","nf-oct-terminal"},
  251. {"development","nf-oct-terminal"},
  252. {"projects","nf-seti-project"},
  253. {"bin","nf-oct-file_binary"},
  254. {"tests","nf-mdi-test_tube"},
  255. {"windows","nf-fa-windows"},
  256. {"users","nf-fa-users"},
  257. {"favorites","nf-mdi-folder_star"},
  258. {".config","nf-seti-config"},
  259. {".cache","nf-mdi-cached"},
  260. {".vscode","nf-custom-folder_config"},
  261. {".vscode-insiders","nf-custom-folder_config"},
  262. {".git","nf-custom-folder_git"},
  263. {".github","nf-custom-folder_github"},
  264. {"github","nf-fa-github_alt"},
  265. {"node_modules","nf-custom-folder_npm"},
  266. {".azure","nf-mdi-azure"},
  267. {".aws","nf-dev-aws"},
  268. {".kube","nf-mdi-ship_wheel"},
  269. {".docker","nf-dev-docker"},
  270. {"umbraco","nf-mdi-umbraco"},
  271. {".gitattributes", "nf-dev-git"},
  272. {".gitconfig", "nf-dev-git"},
  273. {".gitignore", "nf-dev-git"},
  274. {".gitmodules", "nf-dev-git"},
  275. {".gitkeep", "nf-dev-git"},
  276. {"git-history", "nf-dev-git"},
  277. {"LICENSE", "nf-mdi-certificate"},
  278. {"CHANGELOG.md", "nf-fae-checklist_o"},
  279. {"CHANGELOG.txt", "nf-fae-checklist_o"},
  280. {"CHANGELOG", "nf-fae-checklist_o"},
  281. {"README.md", "nf-mdi-library_books"},
  282. {"README.txt", "nf-mdi-library_books"},
  283. {"README", "nf-mdi-library_books"},
  284. {".DS_Store", "nf-fa-file_o"},
  285. {".tsbuildinfo", "nf-seti-json"},
  286. {".jscsrc", "nf-seti-json"},
  287. {".jshintrc", "nf-seti-json"},
  288. {"tsconfig.json", "nf-seti-json"},
  289. {"tslint.json", "nf-seti-json"},
  290. {"composer.lock", "nf-seti-json"},
  291. {".jsbeautifyrc", "nf-seti-json"},
  292. {".esformatter", "nf-seti-json"},
  293. {"cdp.pid", "nf-seti-json"},
  294. {".htaccess", "nf-mdi-file_xml"},
  295. {".jshintignore", "nf-fa-gear"},
  296. {".buildignore", "nf-fa-gear"},
  297. {".mrconfig", "nf-fa-gear"},
  298. {".yardopts", "nf-fa-gear"},
  299. {"manifest.mf", "nf-fa-gear"},
  300. {".clang-format", "nf-fa-gear"},
  301. {".clang-tidy", "nf-fa-gear"},
  302. {"favicon.ico", "nf-seti-favicon"},
  303. {".travis.yml", "nf-dev-travis"},
  304. {".gitlab-ci.yml", "nf-fa-gitlab"},
  305. {".jenkinsfile", "nf-dev-jenkins"},
  306. {"bitbucket-pipelines.yml", "nf-dev-bitbucket"},
  307. {"bitbucket-pipelines.yaml", "nf-dev-bitbucket"},
  308. {".azure-pipelines.yml", "nf-mdi-azure"},
  309. // Firebase
  310. {"firebase.json", "nf-dev-firebase"},
  311. {".firebaserc", "nf-dev-firebase"},
  312. // Bower
  313. {".bowerrc", "nf-dev-bower"},
  314. {"bower.json", "nf-dev-bower"},
  315. // Conduct
  316. {"code_of_conduct.md", "nf-fa-handshake_o"},
  317. {"code_of_conduct.txt", "nf-fa-handshake_o"},
  318. // Docker
  319. {"Dockerfile", "nf-dev-docker"},
  320. {"docker-compose.yml", "nf-dev-docker"},
  321. {"docker-compose.yaml", "nf-dev-docker"},
  322. {"docker-compose.dev.yml", "nf-dev-docker"},
  323. {"docker-compose.local.yml", "nf-dev-docker"},
  324. {"docker-compose.ci.yml", "nf-dev-docker"},
  325. {"docker-compose.override.yml", "nf-dev-docker"},
  326. {"docker-compose.staging.yml", "nf-dev-docker"},
  327. {"docker-compose.prod.yml", "nf-dev-docker"},
  328. {"docker-compose.production.yml", "nf-dev-docker"},
  329. {"docker-compose.test.yml", "nf-dev-docker"},
  330. // Vue
  331. {"vue.config.js", "nf-mdi-vuejs"},
  332. {"vue.config.ts", "nf-mdi-vuejs"},
  333. // Gulp
  334. {"gulpfile.js", "nf-dev-gulp"},
  335. {"gulpfile.ts", "nf-dev-gulp"},
  336. {"gulpfile.babel.js", "nf-dev-gulp"},
  337. // Javascript
  338. {"gruntfile.js", "nf-seti-grunt"},
  339. // NodeJS
  340. {"package.json", "nf-dev-nodejs_small"},
  341. {"package-lock.json", "nf-dev-nodejs_small"},
  342. {".nvmrc", "nf-dev-nodejs_small"},
  343. {".esmrc", "nf-dev-nodejs_small"},
  344. // NPM
  345. {".nmpignore", "nf-dev-npm"},
  346. {".npmrc", "nf-dev-npm"},
  347. // Authors
  348. {"authors", "nf-oct-person"},
  349. {"authors.md", "nf-oct-person"},
  350. {"authors.txt", "nf-oct-person"},
  351. // Terraform
  352. {".terraform.lock.hcl", "nf-fa-lock"},
  353. // Gradle
  354. {"gradlew", "nf-mdi-elephant"},
  355. };
  356. /// <summary>
  357. /// Mapping of file extension to <see cref="Glyphs"/> name.
  358. /// </summary>
  359. public Dictionary<string, string> ExtensionToIcon {get;set;} = new Dictionary<string, string> ()
  360. {
  361. // Archive files
  362. {".7z" , "nf-oct-file_zip"},
  363. {".bz" , "nf-oct-file_zip"},
  364. {".tar" , "nf-oct-file_zip"},
  365. {".zip" , "nf-oct-file_zip"},
  366. {".gz" , "nf-oct-file_zip"},
  367. {".xz" , "nf-oct-file_zip"},
  368. {".br" , "nf-oct-file_zip"},
  369. {".bzip2" , "nf-oct-file_zip"},
  370. {".gzip" , "nf-oct-file_zip"},
  371. {".brotli" , "nf-oct-file_zip"},
  372. {".rar" , "nf-oct-file_zip"},
  373. {".tgz" , "nf-oct-file_zip"},
  374. // Executable things
  375. {".bat" , "nf-custom-msdos"},
  376. {".cmd" , "nf-custom-msdos"},
  377. {".exe" , "nf-mdi-application"},
  378. {".pl" , "nf-dev-perl"},
  379. {".sh" , "nf-oct-terminal"},
  380. // App Packages
  381. {".msi" , "nf-mdi-package_variant"},
  382. {".msix" , "nf-mdi-package_variant"},
  383. {".msixbundle" , "nf-mdi-package_variant"},
  384. {".appx" , "nf-mdi-package_variant"},
  385. {".AppxBundle" , "nf-mdi-package_variant"},
  386. {".deb" , "nf-mdi-package_variant"},
  387. {".rpm" , "nf-mdi-package_variant"},
  388. // PowerShell
  389. {".ps1" , "nf-mdi-console_line"},
  390. {".psm1" , "nf-mdi-console_line"},
  391. {".psd1" , "nf-mdi-console_line"},
  392. {".ps1xml" , "nf-mdi-console_line"},
  393. {".psc1" , "nf-mdi-console_line"},
  394. {".pssc" , "nf-mdi-console_line"},
  395. // Javascript
  396. {".js" , "nf-dev-javascript"},
  397. {".esx" , "nf-dev-javascript"},
  398. {".mjs" , "nf-dev-javascript"},
  399. // Java
  400. {".java" , "nf-fae-java"},
  401. {".jar" , "nf-fae-java"},
  402. {".gradle" , "nf-mdi-elephant"},
  403. // Python
  404. {".py" , "nf-dev-python"},
  405. {".ipynb" , "nf-mdi-notebook"},
  406. // React
  407. {".jsx" , "nf-dev-react"},
  408. {".tsx" , "nf-dev-react"},
  409. // Typescript
  410. {".ts" , "nf-seti-typescript"},
  411. // Not-executable code files
  412. {".dll" , "nf-fa-archive"},
  413. // Importable Data files
  414. {".clixml" , "nf-dev-code_badge"},
  415. {".csv" , "nf-mdi-file_excel"},
  416. {".tsv" , "nf-mdi-file_excel"},
  417. // Settings
  418. {".ini" , "nf-fa-gear"},
  419. {".dlc" , "nf-fa-gear"},
  420. {".config" , "nf-fa-gear"},
  421. {".conf" , "nf-fa-gear"},
  422. {".properties" , "nf-fa-gear"},
  423. {".prop" , "nf-fa-gear"},
  424. {".settings" , "nf-fa-gear"},
  425. {".option" , "nf-fa-gear"},
  426. {".reg" , "nf-fa-gear"},
  427. {".props" , "nf-fa-gear"},
  428. {".toml" , "nf-fa-gear"},
  429. {".prefs" , "nf-fa-gear"},
  430. {".sln.dotsettings" , "nf-fa-gear"},
  431. {".sln.dotsettings.user" , "nf-fa-gear"},
  432. {".cfg" , "nf-fa-gear"},
  433. // Source Files
  434. {".c" , "nf-mdi-language_c"},
  435. {".cpp" , "nf-mdi-language_cpp"},
  436. {".go" , "nf-dev-go"},
  437. {".php" , "nf-dev-php"},
  438. // Visual Studio
  439. {".csproj" , "nf-dev-visualstudio"},
  440. {".ruleset" , "nf-dev-visualstudio"},
  441. {".sln" , "nf-dev-visualstudio"},
  442. {".slnf" , "nf-dev-visualstudio"},
  443. {".suo" , "nf-dev-visualstudio"},
  444. {".vb" , "nf-dev-visualstudio"},
  445. {".vbs" , "nf-dev-visualstudio"},
  446. {".vcxitems" , "nf-dev-visualstudio"},
  447. {".vcxitems.filters" , "nf-dev-visualstudio"},
  448. {".vcxproj" , "nf-dev-visualstudio"},
  449. {".vsxproj.filters" , "nf-dev-visualstudio"},
  450. // CSharp
  451. {".cs" , "nf-mdi-language_csharp"},
  452. {".csx" , "nf-mdi-language_csharp"},
  453. // Haskell
  454. {".hs" , "nf-dev-haskell"},
  455. // XAML
  456. {".xaml" , "nf-mdi-xaml"},
  457. // Rust
  458. {".rs" , "nf-dev-rust"},
  459. // Database
  460. {".pdb" , "nf-dev-database"},
  461. {".sql" , "nf-dev-database"},
  462. {".pks" , "nf-dev-database"},
  463. {".pkb" , "nf-dev-database"},
  464. {".accdb" , "nf-dev-database"},
  465. {".mdb" , "nf-dev-database"},
  466. {".sqlite" , "nf-dev-database"},
  467. {".pgsql" , "nf-dev-database"},
  468. {".postgres" , "nf-dev-database"},
  469. {".psql" , "nf-dev-database"},
  470. // Source Control
  471. {".patch" , "nf-dev-git"},
  472. // Project files
  473. {".user" , "nf-mdi-visualstudio"},
  474. {".code-workspace" , "nf-mdi-visualstudio"},
  475. // Text data files
  476. {".log" , "nf-fa-list"},
  477. {".txt" , "nf-mdi-file_document"},
  478. // Subtitle files
  479. {".srt" , "nf-mdi-file_document"},
  480. {".lrc" , "nf-mdi-file_document"},
  481. {".ass" , "nf-fa-eye"},
  482. // HTML/css
  483. {".html" , "nf-seti-html"},
  484. {".htm" , "nf-seti-html"},
  485. {".xhtml" , "nf-seti-html"},
  486. {".html_vm" , "nf-seti-html"},
  487. {".asp" , "nf-seti-html"},
  488. {".css" , "nf-dev-css3"},
  489. {".sass" , "nf-dev-sass"},
  490. {".scss" , "nf-dev-sass"},
  491. {".less" , "nf-dev-less"},
  492. // Markdown
  493. {".md" , "nf-dev-markdown"},
  494. {".markdown" , "nf-dev-markdown"},
  495. {".rst" , "nf-dev-markdown"},
  496. // Handlebars
  497. {".hbs" , "nf-seti-mustache"},
  498. // JSON
  499. {".json" , "nf-seti-json"},
  500. {".tsbuildinfo" , "nf-seti-json"},
  501. // YAML
  502. {".yml" , "nf-mdi-format_align_left"},
  503. {".yaml" , "nf-mdi-format_align_left"},
  504. // LUA
  505. {".lua" , "nf-seti-lua"},
  506. // Clojure
  507. {".clj" , "nf-dev-clojure"},
  508. {".cljs" , "nf-dev-clojure"},
  509. {".cljc" , "nf-dev-clojure"},
  510. // Groovy
  511. {".groovy" , "nf-dev-groovy"},
  512. // Vue
  513. {".vue" , "nf-mdi-vuejs"},
  514. // Dart
  515. {".dart" , "nf-dev-dart"},
  516. // Elixir
  517. {".ex" , "nf-custom-elixir"},
  518. {".exs" , "nf-custom-elixir"},
  519. {".eex" , "nf-custom-elixir"},
  520. {".leex" , "nf-custom-elixir"},
  521. // Erlang
  522. {".erl" , "nf-dev-erlang"},
  523. // Elm
  524. {".elm" , "nf-custom-elm"},
  525. // Applescript
  526. {".applescript" , "nf-dev-apple"},
  527. // XML
  528. {".xml" , "nf-mdi-file_xml"},
  529. {".plist" , "nf-mdi-file_xml"},
  530. {".xsd" , "nf-mdi-file_xml"},
  531. {".dtd" , "nf-mdi-file_xml"},
  532. {".xsl" , "nf-mdi-file_xml"},
  533. {".xslt" , "nf-mdi-file_xml"},
  534. {".resx" , "nf-mdi-file_xml"},
  535. {".iml" , "nf-mdi-file_xml"},
  536. {".xquery" , "nf-mdi-file_xml"},
  537. {".tmLanguage" , "nf-mdi-file_xml"},
  538. {".manifest" , "nf-mdi-file_xml"},
  539. {".project" , "nf-mdi-file_xml"},
  540. // Documents
  541. {".chm" , "nf-mdi-help_box"},
  542. {".pdf" , "nf-mdi-file_pdf"},
  543. // Excel
  544. {".xls" , "nf-mdi-file_excel"},
  545. {".xlsx" , "nf-mdi-file_excel"},
  546. // PowerPoint
  547. {".pptx" , "nf-mdi-file_powerpoint"},
  548. {".ppt" , "nf-mdi-file_powerpoint"},
  549. {".pptm" , "nf-mdi-file_powerpoint"},
  550. {".potx" , "nf-mdi-file_powerpoint"},
  551. {".potm" , "nf-mdi-file_powerpoint"},
  552. {".ppsx" , "nf-mdi-file_powerpoint"},
  553. {".ppsm" , "nf-mdi-file_powerpoint"},
  554. {".pps" , "nf-mdi-file_powerpoint"},
  555. {".ppam" , "nf-mdi-file_powerpoint"},
  556. {".ppa" , "nf-mdi-file_powerpoint"},
  557. // Word
  558. {".doc" , "nf-mdi-file_word"},
  559. {".docx" , "nf-mdi-file_word"},
  560. {".rtf" , "nf-mdi-file_word"},
  561. // Audio
  562. {".mp3" , "nf-fa-file_audio_o"},
  563. {".flac" , "nf-fa-file_audio_o"},
  564. {".m4a" , "nf-fa-file_audio_o"},
  565. {".wma" , "nf-fa-file_audio_o"},
  566. {".aiff" , "nf-fa-file_audio_o"},
  567. {".wav" , "nf-fa-file_audio_o"},
  568. {".aac" , "nf-fa-file_audio_o"},
  569. {".opus" , "nf-fa-file_audio_o"},
  570. // Images
  571. {".png" , "nf-fa-file_image_o"},
  572. {".jpeg" , "nf-fa-file_image_o"},
  573. {".jpg" , "nf-fa-file_image_o"},
  574. {".gif" , "nf-fa-file_image_o"},
  575. {".ico" , "nf-fa-file_image_o"},
  576. {".tif" , "nf-fa-file_image_o"},
  577. {".tiff" , "nf-fa-file_image_o"},
  578. {".psd" , "nf-fa-file_image_o"},
  579. {".psb" , "nf-fa-file_image_o"},
  580. {".ami" , "nf-fa-file_image_o"},
  581. {".apx" , "nf-fa-file_image_o"},
  582. {".bmp" , "nf-fa-file_image_o"},
  583. {".bpg" , "nf-fa-file_image_o"},
  584. {".brk" , "nf-fa-file_image_o"},
  585. {".cur" , "nf-fa-file_image_o"},
  586. {".dds" , "nf-fa-file_image_o"},
  587. {".dng" , "nf-fa-file_image_o"},
  588. {".eps" , "nf-fa-file_image_o"},
  589. {".exr" , "nf-fa-file_image_o"},
  590. {".fpx" , "nf-fa-file_image_o"},
  591. {".gbr" , "nf-fa-file_image_o"},
  592. {".jbig2" , "nf-fa-file_image_o"},
  593. {".jb2" , "nf-fa-file_image_o"},
  594. {".jng" , "nf-fa-file_image_o"},
  595. {".jxr" , "nf-fa-file_image_o"},
  596. {".pbm" , "nf-fa-file_image_o"},
  597. {".pgf" , "nf-fa-file_image_o"},
  598. {".pic" , "nf-fa-file_image_o"},
  599. {".raw" , "nf-fa-file_image_o"},
  600. {".webp" , "nf-fa-file_image_o"},
  601. {".svg" , "nf-mdi-svg"},
  602. // Video
  603. {".webm" , "nf-fa-file_video_o"},
  604. {".mkv" , "nf-fa-file_video_o"},
  605. {".flv" , "nf-fa-file_video_o"},
  606. {".vob" , "nf-fa-file_video_o"},
  607. {".ogv" , "nf-fa-file_video_o"},
  608. {".ogg" , "nf-fa-file_video_o"},
  609. {".gifv" , "nf-fa-file_video_o"},
  610. {".avi" , "nf-fa-file_video_o"},
  611. {".mov" , "nf-fa-file_video_o"},
  612. {".qt" , "nf-fa-file_video_o"},
  613. {".wmv" , "nf-fa-file_video_o"},
  614. {".yuv" , "nf-fa-file_video_o"},
  615. {".rm" , "nf-fa-file_video_o"},
  616. {".rmvb" , "nf-fa-file_video_o"},
  617. {".mp4" , "nf-fa-file_video_o"},
  618. {".mpg" , "nf-fa-file_video_o"},
  619. {".mp2" , "nf-fa-file_video_o"},
  620. {".mpeg" , "nf-fa-file_video_o"},
  621. {".mpe" , "nf-fa-file_video_o"},
  622. {".mpv" , "nf-fa-file_video_o"},
  623. {".m2v" , "nf-fa-file_video_o"},
  624. // Email
  625. {".ics" , "nf-fa-calendar"},
  626. // Certificates
  627. {".cer" , "nf-fa-certificate"},
  628. {".cert" , "nf-fa-certificate"},
  629. {".crt" , "nf-fa-certificate"},
  630. {".pfx" , "nf-fa-certificate"},
  631. // Keys
  632. {".pem" , "nf-fa-key"},
  633. {".pub" , "nf-fa-key"},
  634. {".key" , "nf-fa-key"},
  635. {".asc" , "nf-fa-key"},
  636. {".gpg" , "nf-fa-key"},
  637. // Fonts
  638. {".woff" , "nf-fa-font"},
  639. {".woff2" , "nf-fa-font"},
  640. {".ttf" , "nf-fa-font"},
  641. {".eot" , "nf-fa-font"},
  642. {".suit" , "nf-fa-font"},
  643. {".otf" , "nf-fa-font"},
  644. {".bmap" , "nf-fa-font"},
  645. {".fnt" , "nf-fa-font"},
  646. {".odttf" , "nf-fa-font"},
  647. {".ttc" , "nf-fa-font"},
  648. {".font" , "nf-fa-font"},
  649. {".fonts" , "nf-fa-font"},
  650. {".sui" , "nf-fa-font"},
  651. {".ntf" , "nf-fa-font"},
  652. {".mrg" , "nf-fa-font"},
  653. // Ruby
  654. {".rb" , "nf-oct-ruby"},
  655. {".erb" , "nf-oct-ruby"},
  656. {".gemfile" , "nf-oct-ruby"},
  657. {"rakefile" , "nf-oct-ruby"},
  658. // FSharp
  659. {".fs" , "nf-dev-fsharp"},
  660. {".fsx" , "nf-dev-fsharp"},
  661. {".fsi" , "nf-dev-fsharp"},
  662. {".fsproj" , "nf-dev-fsharp"},
  663. // Docker
  664. {".dockerignore" , "nf-dev-docker"},
  665. {".dockerfile" , "nf-dev-docker"},
  666. // VSCode
  667. {".vscodeignore" , "nf-fa-gear"},
  668. {".vsixmanifest" , "nf-fa-gear"},
  669. {".vsix" , "nf-fa-gear"},
  670. {".code-workplace" , "nf-fa-gear"},
  671. // Sublime
  672. {".sublime-project" , "nf-dev-sublime"},
  673. {".sublime-workspace" , "nf-dev-sublime"},
  674. {".lock" , "nf-fa-lock"},
  675. // Terraform
  676. {".tf" , "nf-dev-code_badge"},
  677. {".tfvars" , "nf-dev-code_badge"},
  678. {".tf.json" , "nf-dev-code_badge"},
  679. {".tfvars.json" , "nf-dev-code_badge"},
  680. {".auto.tfvars" , "nf-dev-code_badge"},
  681. {".auto.tfvars.json" , "nf-dev-code_badge"},
  682. // Disk Image
  683. {".vmdk" , "nf-mdi-harddisk"},
  684. {".vhd" , "nf-mdi-harddisk"},
  685. {".vhdx" , "nf-mdi-harddisk"},
  686. {".img" , "nf-fae-disco"},
  687. {".iso" , "nf-fae-disco"},
  688. // R language
  689. {".R" , "nf-mdi-language_r"},
  690. {".Rmd" , "nf-mdi-language_r"},
  691. {".Rproj" , "nf-mdi-language_r"},
  692. // Julia language
  693. {".jl" , "nf-seti-julia"},
  694. // Vim
  695. {".vim" , "nf-custom-vim"},
  696. // Puppet
  697. {".pp" , "nf-custom-puppet"},
  698. {".epp" , "nf-custom-puppet"},
  699. };
  700. }
  701. }