2
0

NerdFonts.cs 26 KB

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