icons.rs 60 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117
  1. // SPDX-FileCopyrightText: 2024 Christina Sørensen
  2. // SPDX-License-Identifier: EUPL-1.2
  3. //
  4. // SPDX-FileCopyrightText: 2023-2024 Christina Sørensen, eza contributors
  5. // SPDX-FileCopyrightText: 2014 Benjamin Sago
  6. // SPDX-License-Identifier: MIT
  7. use nu_ansi_term::Style;
  8. use phf::{phf_map, Map};
  9. use crate::fs::File;
  10. #[non_exhaustive]
  11. struct Icons;
  12. #[rustfmt::skip]
  13. impl Icons {
  14. const AUDIO: char = '\u{f001}'; // 
  15. const BINARY: char = '\u{eae8}'; // 
  16. const BOOK: char = '\u{e28b}'; // 
  17. const CALENDAR: char = '\u{eab0}'; // 
  18. const CACHE: char = '\u{f49b}'; // 
  19. const CAD: char = '\u{f0eeb}'; // 󰻫
  20. const CLOCK: char = '\u{f43a}'; // 
  21. const COMPRESSED: char = '\u{f410}'; // 
  22. const CONFIG: char = '\u{e615}'; // 
  23. const CSS3: char = '\u{e749}'; // 
  24. const DATABASE: char = '\u{f1c0}'; // 
  25. const DIFF: char = '\u{f440}'; // 
  26. const DISK_IMAGE: char = '\u{e271}'; // 
  27. const DOCKER: char = '\u{e650}'; // 
  28. const DOCUMENT: char = '\u{f1c2}'; // 
  29. const DOWNLOAD: char = '\u{f01da}'; // 󰇚
  30. const EDA_SCH: char = '\u{f0b45}'; // 󰭅
  31. const EDA_PCB: char = '\u{eabe}'; // 
  32. const EMACS: char = '\u{e632}'; // 
  33. const ESLINT: char = '\u{e655}'; // 
  34. const FILE: char = '\u{f15b}'; // 
  35. const FILE_3D: char = '\u{f01a7}'; // 󰆧
  36. const FILE_OUTLINE: char = '\u{f016}'; // 
  37. const FOLDER: char = '\u{e5ff}'; // 
  38. const FOLDER_CONFIG: char = '\u{e5fc}'; // 
  39. const FOLDER_EXERCISM: char = '\u{ebe5}'; // 
  40. const FOLDER_GIT: char = '\u{e5fb}'; // 
  41. const FOLDER_GITHUB: char = '\u{e5fd}'; // 
  42. const FOLDER_HIDDEN: char = '\u{f179e}'; // 󱞞
  43. const FOLDER_KEY: char = '\u{f08ac}'; // 󰢬
  44. const FOLDER_NPM: char = '\u{e5fa}'; // 
  45. const FOLDER_OCAML: char = '\u{e67a}'; // 
  46. const FOLDER_OPEN: char = '\u{f115}'; // 
  47. const FONT: char = '\u{f031}'; // 
  48. const FREECAD: char = '\u{f336}'; // 
  49. const GIMP: char = '\u{f338}'; // 
  50. const GIST_SECRET: char = '\u{eafa}'; // 
  51. const GIT: char = '\u{f1d3}'; // 
  52. const GODOT: char = '\u{e65f}'; // 
  53. const GRADLE: char = '\u{e660}'; // 
  54. const GRAPH: char = '\u{f1049}'; // 󱁉
  55. const GRAPHQL: char = '\u{e662}'; // 
  56. const GRUNT: char = '\u{e611}'; // 
  57. const GTK: char = '\u{f362}'; // 
  58. const GULP: char = '\u{e610}'; // 
  59. const HTML5: char = '\u{f13b}'; // 
  60. const IMAGE: char = '\u{f1c5}'; // 
  61. const INFO: char = '\u{f129}'; // 
  62. const INTELLIJ: char = '\u{e7b5}'; // 
  63. const JSON: char = '\u{e60b}'; // 
  64. const KEY: char = '\u{eb11}'; // 
  65. const KDENLIVE: char = '\u{f33c}'; // 
  66. const KEYPASS: char = '\u{f23e}'; // 
  67. const KICAD: char = '\u{f34c}'; // 
  68. const KRITA: char = '\u{f33d}'; // 
  69. const LANG_ARDUINO: char = '\u{f34b}'; // 
  70. const LANG_ASSEMBLY: char = '\u{e637}'; // 
  71. const LANG_C: char = '\u{e61e}'; // 
  72. const LANG_CPP: char = '\u{e61d}'; // 
  73. const LANG_CSHARP: char = '\u{f031b}'; // 󰌛
  74. const LANG_D: char = '\u{e7af}'; // 
  75. const LANG_ELIXIR: char = '\u{e62d}'; // 
  76. const LANG_FENNEL: char = '\u{e6af}'; // 
  77. const LANG_FORTRAN: char = '\u{f121a}'; // 󱈚
  78. const LANG_FSHARP: char = '\u{e7a7}'; // 
  79. const LANG_GLEAM: char = '\u{f09a5}'; // 󰦥
  80. const LANG_GO: char = '\u{e65e}'; // 
  81. const LANG_GROOVY: char = '\u{e775}'; // 
  82. const LANG_HASKELL: char = '\u{e777}'; // 
  83. const LANG_HDL: char = '\u{f035b}'; // 󰍛
  84. const LANG_HOLYC: char = '\u{f00a2}'; // 󰂢
  85. const LANG_JAVA: char = '\u{e256}'; // 
  86. const LANG_JAVASCRIPT: char = '\u{e74e}'; // 
  87. const LANG_KOTLIN: char = '\u{e634}'; // 
  88. const LANG_LUA: char = '\u{e620}'; // 
  89. const LANG_NIM: char = '\u{e677}'; // 
  90. const LANG_OCAML: char = '\u{e67a}'; // 
  91. const LANG_PERL: char = '\u{e67e}'; // 
  92. const LANG_PHP: char = '\u{e73d}'; // 
  93. const LANG_PYTHON: char = '\u{e606}'; // 
  94. const LANG_R: char = '\u{e68a}'; // 
  95. const LANG_RUBY: char = '\u{e739}'; // 
  96. const LANG_RUBYRAILS: char = '\u{e73b}'; // 
  97. const LANG_RUST: char = '\u{e68b}'; // 
  98. const LANG_SASS: char = '\u{e603}'; // 
  99. const LANG_SCHEME: char = '\u{e6b1}'; // 
  100. const LANG_STYLUS: char = '\u{e600}'; // 
  101. const LANG_TEX: char = '\u{e69b}'; // 
  102. const LANG_TYPESCRIPT: char = '\u{e628}'; // 
  103. const LANG_V: char = '\u{e6ac}'; // 
  104. const LIBRARY: char = '\u{eb9c}'; // 
  105. const LICENSE: char = '\u{f02d}'; // 
  106. const LOCK: char = '\u{f023}'; // 
  107. const LOG: char = '\u{f18d}'; // 
  108. const MAKE: char = '\u{e673}'; // 
  109. const MARKDOWN: char = '\u{f48a}'; // 
  110. const MUSTACHE: char = '\u{e60f}'; // 
  111. const NODEJS: char = '\u{e718}'; // 
  112. const NOTEBOOK: char = '\u{e678}'; // 
  113. const NPM: char = '\u{e71e}'; // 
  114. const OS_ANDROID: char = '\u{e70e}'; // 
  115. const OS_APPLE: char = '\u{f179}'; // 
  116. const OS_LINUX: char = '\u{f17c}'; // 
  117. const OS_WINDOWS: char = '\u{f17a}'; // 
  118. const OS_WINDOWS_CMD: char = '\u{ebc4}'; // 
  119. const PLAYLIST: char = '\u{f0cb9}'; // 󰲹
  120. const POWERSHELL: char = '\u{ebc7}'; // 
  121. const PRIVATE_KEY: char = '\u{f0306}'; // 󰌆
  122. const PUBLIC_KEY: char = '\u{f0dd6}'; // 󰷖
  123. const QT: char = '\u{f375}'; // 
  124. const RAZOR: char = '\u{f1fa}'; // 
  125. const REACT: char = '\u{e7ba}'; // 
  126. const README: char = '\u{f00ba}'; // 󰂺
  127. const SHEET: char = '\u{f1c3}'; // 
  128. const SHELL: char = '\u{f1183}'; // 󱆃
  129. const SHELL_CMD: char = '\u{f489}'; // 
  130. const SHIELD_CHECK: char = '\u{f0565}'; // 󰕥
  131. const SHIELD_KEY: char = '\u{f0bc4}'; // 󰯄
  132. const SHIELD_LOCK: char = '\u{f099d}'; // 󰦝
  133. const SIGNED_FILE: char = '\u{f19c3}'; // 󱧃
  134. const SLIDE: char = '\u{f1c4}'; // 
  135. const SQLITE: char = '\u{e7c4}'; // 
  136. const SUBLIME: char = '\u{e7aa}'; // 
  137. const SUBTITLE: char = '\u{f0a16}'; // 󰨖
  138. const TERRAFORM: char = '\u{f1062}'; // 󱁢
  139. const TEXT: char = '\u{f15c}'; // 
  140. const TYPST: char = '\u{f37f}'; // 
  141. const TMUX: char = '\u{ebc8}'; // 
  142. const TOML: char = '\u{e6b2}'; // 
  143. const TRANSLATION: char = '\u{f05ca}'; // 󰗊
  144. const UNITY: char = '\u{e721}'; // 
  145. const VECTOR: char = '\u{f0559}'; // 󰕙
  146. const VIDEO: char = '\u{f03d}'; // 
  147. const VIM: char = '\u{e7c5}'; // 
  148. const WRENCH: char = '\u{f0ad}'; // 
  149. const XML: char = '\u{f05c0}'; // 󰗀
  150. const YAML: char = '\u{e6a8}'; // 
  151. const YARN: char = '\u{e6a7}'; // 
  152. }
  153. /// Mapping from full filenames to directory icon. This mapping should contain
  154. /// all the directories that have a custom icon.
  155. const DIRECTORY_ICONS: Map<&'static str, char> = phf_map! {
  156. ".config" => Icons::FOLDER_CONFIG, // 
  157. ".exercism" => Icons::FOLDER_EXERCISM,// 
  158. ".git" => Icons::FOLDER_GIT, // 
  159. ".github" => Icons::FOLDER_GITHUB, // 
  160. ".npm" => Icons::FOLDER_NPM, // 
  161. ".opam" => Icons::FOLDER_OCAML, // 
  162. ".ssh" => Icons::FOLDER_KEY, // 󰢬
  163. ".Trash" => '\u{f1f8}', // 
  164. "config" => Icons::FOLDER_CONFIG, // 
  165. "Contacts" => '\u{f024c}', // 󰉌
  166. "cron.d" => Icons::FOLDER_CONFIG, // 
  167. "cron.daily" => Icons::FOLDER_CONFIG, // 
  168. "cron.hourly" => Icons::FOLDER_CONFIG, // 
  169. "cron.minutely" => Icons::FOLDER_CONFIG, // 
  170. "cron.monthly" => Icons::FOLDER_CONFIG, // 
  171. "cron.weekly" => Icons::FOLDER_CONFIG, // 
  172. "Desktop" => '\u{f108}', // 
  173. "Downloads" => '\u{f024d}', // 󰉍
  174. "etc" => Icons::FOLDER_CONFIG, // 
  175. "Favorites" => '\u{f069d}', // 󰚝
  176. "hidden" => Icons::FOLDER_HIDDEN, // 󱞞
  177. "home" => '\u{f10b5}', // 󱂵
  178. "include" => Icons::FOLDER_CONFIG, // 
  179. "Mail" => '\u{f01f0}', // 󰇰
  180. "Movies" => '\u{f0fce}', // 󰿎
  181. "Music" => '\u{f1359}', // 󱍙
  182. "node_modules" => Icons::FOLDER_NPM, // 
  183. "npm_cache" => Icons::FOLDER_NPM, // 
  184. "pam.d" => Icons::FOLDER_KEY, // 󰢬
  185. "Pictures" => '\u{f024f}', // 󰉏
  186. "ssh" => Icons::FOLDER_KEY, // 󰢬
  187. "sudoers.d" => Icons::FOLDER_KEY, // 󰢬
  188. "Videos" => '\u{f03d}', // 
  189. "xbps.d" => Icons::FOLDER_CONFIG, // 
  190. "xorg.conf.d" => Icons::FOLDER_CONFIG, // 
  191. "cabal" => Icons::LANG_HASKELL, // 
  192. };
  193. /// Mapping from full filenames to file icon. This mapping should also contain
  194. /// all the "dot" files that have a custom icon.
  195. const FILENAME_ICONS: Map<&'static str, char> = phf_map! {
  196. ".aliases" => Icons::SHELL, // 󱆃
  197. ".atom" => '\u{e764}', // 
  198. ".bashrc" => Icons::SHELL, // 󱆃
  199. ".bash_aliases" => Icons::SHELL, // 󱆃
  200. ".bash_history" => Icons::SHELL, // 󱆃
  201. ".bash_logout" => Icons::SHELL, // 󱆃
  202. ".bash_profile" => Icons::SHELL, // 󱆃
  203. ".CFUserTextEncoding" => Icons::OS_APPLE, // 
  204. ".clang-format" => Icons::CONFIG, // 
  205. ".clang-tidy" => Icons::CONFIG, // 
  206. ".codespellrc" => '\u{f04c6}', // 󰓆
  207. ".condarc" => '\u{e715}', // 
  208. ".cshrc" => Icons::SHELL, // 󱆃
  209. ".DS_Store" => Icons::OS_APPLE, // 
  210. ".editorconfig" => '\u{e652}', // 
  211. ".emacs" => Icons::EMACS, // 
  212. ".envrc" => '\u{f462}', // 
  213. ".eslintignore" => Icons::ESLINT, // 
  214. ".eslintrc.cjs" => Icons::ESLINT, // 
  215. ".eslintrc.js" => Icons::ESLINT, // 
  216. ".eslintrc.json" => Icons::ESLINT, // 
  217. ".eslintrc.yaml" => Icons::ESLINT, // 
  218. ".eslintrc.yml" => Icons::ESLINT, // 
  219. ".gcloudignore" => '\u{f11f6}', // 󱇶
  220. ".fennelrc" => Icons::LANG_FENNEL, // 
  221. ".gitattributes" => Icons::GIT, // 
  222. ".git-blame-ignore-revs" => Icons::GIT, // 
  223. ".gitconfig" => Icons::GIT, // 
  224. ".gitignore" => Icons::GIT, // 
  225. ".gitignore_global" => Icons::GIT, // 
  226. ".gitlab-ci.yml" => '\u{f296}', // 
  227. ".gitmodules" => Icons::GIT, // 
  228. ".gtkrc-2.0" => Icons::GTK, // 
  229. ".gvimrc" => Icons::VIM, // 
  230. ".htaccess" => Icons::CONFIG, // 
  231. ".htpasswd" => Icons::CONFIG, // 
  232. ".idea" => Icons::INTELLIJ, // 
  233. ".ideavimrc" => Icons::VIM, // 
  234. ".inputrc" => Icons::CONFIG, // 
  235. ".kshrc" => Icons::SHELL, // 󱆃
  236. ".login" => Icons::SHELL, // 󱆃
  237. ".logout" => Icons::SHELL, // 󱆃
  238. ".luacheckrc" => Icons::CONFIG, // 
  239. ".luaurc" => Icons::CONFIG, // 
  240. ".nanorc" => '\u{e838}', // 
  241. ".nuxtrc" => '\u{f1106}', // 󱄆
  242. ".ocamlinit" => Icons::LANG_OCAML, // 
  243. ".mailmap" => Icons::GIT, // 
  244. ".node_repl_history" => Icons::NODEJS, // 
  245. ".npmignore" => Icons::NPM, // 
  246. ".npmrc" => Icons::NPM, // 
  247. ".pre-commit-config.yaml" => '\u{f06e2}', // 󰛢
  248. ".prettierignore" => '\u{e6b4}', // 
  249. ".prettierrc" => '\u{e6b4}', // 
  250. ".parentlock" => Icons::LOCK, // 
  251. ".profile" => Icons::SHELL, // 󱆃
  252. ".pylintrc" => Icons::CONFIG, // 
  253. ".python_history" => Icons::LANG_PYTHON, // 
  254. ".rustfmt.toml" => Icons::LANG_RUST, // 
  255. ".rvm" => Icons::LANG_RUBY, // 
  256. ".rvmrc" => Icons::LANG_RUBY, // 
  257. ".SRCINFO" => '\u{f303}', // 
  258. ".stowrc" => '\u{eef1}', // 
  259. ".tcshrc" => Icons::SHELL, // 󱆃
  260. ".viminfo" => Icons::VIM, // 
  261. ".vimrc" => Icons::VIM, // 
  262. ".Xauthority" => Icons::CONFIG, // 
  263. ".xinitrc" => Icons::CONFIG, // 
  264. ".Xresources" => Icons::CONFIG, // 
  265. ".yarnrc" => Icons::YARN, // 
  266. ".zlogin" => Icons::SHELL, // 󱆃
  267. ".zlogout" => Icons::SHELL, // 󱆃
  268. ".zprofile" => Icons::SHELL, // 󱆃
  269. ".zshenv" => Icons::SHELL, // 󱆃
  270. ".zshrc" => Icons::SHELL, // 󱆃
  271. ".zsh_history" => Icons::SHELL, // 󱆃
  272. ".zsh_sessions" => Icons::SHELL, // 󱆃
  273. "._DS_Store" => Icons::OS_APPLE, // 
  274. "_gvimrc" => Icons::VIM, // 
  275. "_vimrc" => Icons::VIM, // 
  276. "a.out" => Icons::SHELL_CMD, // 
  277. "authorized_keys" => '\u{f08c0}', // 󰣀
  278. "AUTHORS" => '\u{edca}', // 
  279. "AUTHORS.txt" => '\u{edca}', // 
  280. "bashrc" => Icons::SHELL, // 󱆃
  281. "Brewfile" => '\u{f1116}', // 󱄖
  282. "Brewfile.lock.json" => '\u{f1116}', // 󱄖
  283. "bspwmrc" => '\u{f355}', // 
  284. "build.gradle.kts" => Icons::GRADLE, // 
  285. "build.zig.zon" => '\u{e6a9}', // 
  286. "bun.lockb" => '\u{e76f}', // 
  287. "cantorrc" => '\u{f373}', // 
  288. "Cargo.lock" => Icons::LANG_RUST, // 
  289. "Cargo.toml" => Icons::LANG_RUST, // 
  290. "CMakeLists.txt" => '\u{e794}', // 
  291. "CODE_OF_CONDUCT" => '\u{f4ae}', // 
  292. "CODE_OF_CONDUCT.md" => '\u{f4ae}', // 
  293. "composer.json" => Icons::LANG_PHP, // 
  294. "composer.lock" => Icons::LANG_PHP, // 
  295. "config" => Icons::CONFIG, // 
  296. "config.ru" => Icons::LANG_RUBY, // 
  297. "config.status" => Icons::CONFIG, // 
  298. "configure" => Icons::WRENCH, // 
  299. "configure.ac" => Icons::CONFIG, // 
  300. "configure.in" => Icons::CONFIG, // 
  301. "constraints.txt" => Icons::LANG_PYTHON, // 
  302. "COPYING" => Icons::LICENSE, // 
  303. "COPYRIGHT" => Icons::LICENSE, // 
  304. "crontab" => Icons::CONFIG, // 
  305. "crypttab" => Icons::CONFIG, // 
  306. "csh.cshrc" => Icons::SHELL, // 󱆃
  307. "csh.login" => Icons::SHELL, // 󱆃
  308. "csh.logout" => Icons::SHELL, // 󱆃
  309. "docker-compose.yml" => Icons::DOCKER, // 
  310. "Dockerfile" => Icons::DOCKER, // 
  311. "compose.yaml" => Icons::DOCKER, // 
  312. "compose.yml" => Icons::DOCKER, // 
  313. "docker-compose.yaml" => Icons::DOCKER, // 
  314. "dune" => Icons::LANG_OCAML, // 
  315. "dune-project" => Icons::WRENCH, // 
  316. "Earthfile" => '\u{f0ac}', // 
  317. "COMMIT_EDITMSG" => Icons::GIT, // 
  318. "environment" => Icons::CONFIG, // 
  319. "favicon.ico" => '\u{e623}', // 
  320. "flake.lock" => '\u{f313}', // 
  321. "fennelrc" => Icons::LANG_FENNEL, // 
  322. "fonts.conf" => Icons::FONT, // 
  323. "fp-info-cache" => Icons::KICAD, // 
  324. "fp-lib-table" => Icons::KICAD, // 
  325. "FreeCAD.conf" => Icons::FREECAD, // 
  326. "Gemfile" => Icons::LANG_RUBY, // 
  327. "Gemfile.lock" => Icons::LANG_RUBY, // 
  328. "GNUmakefile" => Icons::MAKE, // 
  329. "go.mod" => Icons::LANG_GO, // 
  330. "go.sum" => Icons::LANG_GO, // 
  331. "go.work" => Icons::LANG_GO, // 
  332. "gradle" => Icons::GRADLE, // 
  333. "gradle.properties" => Icons::GRADLE, // 
  334. "gradlew" => Icons::GRADLE, // 
  335. "gradlew.bat" => Icons::GRADLE, // 
  336. "group" => Icons::LOCK, // 
  337. "gruntfile.coffee" => Icons::GRUNT, // 
  338. "gruntfile.js" => Icons::GRUNT, // 
  339. "gruntfile.ls" => Icons::GRUNT, // 
  340. "gshadow" => Icons::LOCK, // 
  341. "gtkrc" => Icons::GTK, // 
  342. "gulpfile.coffee" => Icons::GULP, // 
  343. "gulpfile.js" => Icons::GULP, // 
  344. "gulpfile.ls" => Icons::GULP, // 
  345. "heroku.yml" => '\u{e77b}', // 
  346. "hostname" => Icons::CONFIG, // 
  347. "hypridle.conf" => '\u{f359}', // 
  348. "hyprland.conf" => '\u{f359}', // 
  349. "hyprlock.conf" => '\u{f359}', // 
  350. "hyprpaper.conf" => '\u{f359}', // 
  351. "i3blocks.conf" => '\u{f35a}', // 
  352. "i3status.conf" => '\u{f35a}', // 
  353. "id_dsa" => Icons::PRIVATE_KEY, // 󰌆
  354. "id_ecdsa" => Icons::PRIVATE_KEY, // 󰌆
  355. "id_ecdsa_sk" => Icons::PRIVATE_KEY, // 󰌆
  356. "id_ed25519" => Icons::PRIVATE_KEY, // 󰌆
  357. "id_ed25519_sk" => Icons::PRIVATE_KEY, // 󰌆
  358. "id_rsa" => Icons::PRIVATE_KEY, // 󰌆
  359. "index.theme" => '\u{ee72}', // 
  360. "inputrc" => Icons::CONFIG, // 
  361. "Jenkinsfile" => '\u{e66e}', // 
  362. "jsconfig.json" => Icons::LANG_JAVASCRIPT,// 
  363. "Justfile" => Icons::WRENCH, // 
  364. "justfile" => Icons::WRENCH, // 
  365. "kalgebrarc" => '\u{f373}', // 
  366. "kdeglobals" => '\u{f373}', // 
  367. "kdenlive-layoutsrc" => Icons::KDENLIVE, // 
  368. "kdenliverc" => Icons::KDENLIVE, // 
  369. "known_hosts" => '\u{f08c0}', // 󰣀
  370. "kritadisplayrc" => Icons::KRITA, // 
  371. "kritarc" => Icons::KRITA, // 
  372. "LICENCE" => Icons::LICENSE, // 
  373. "LICENCE.md" => Icons::LICENSE, // 
  374. "LICENCE.txt" => Icons::LICENSE, // 
  375. "LICENSE" => Icons::LICENSE, // 
  376. "LICENSE-APACHE" => Icons::LICENSE, // 
  377. "LICENSE-MIT" => Icons::LICENSE, // 
  378. "LICENSE.md" => Icons::LICENSE, // 
  379. "LICENSE.txt" => Icons::LICENSE, // 
  380. "localized" => Icons::OS_APPLE, // 
  381. "localtime" => Icons::CLOCK, // 
  382. "lock" => Icons::LOCK, // 
  383. "LOCK" => Icons::LOCK, // 
  384. "log" => Icons::LOG, // 
  385. "LOG" => Icons::LOG, // 
  386. "lxde-rc.xml" => '\u{f363}', // 
  387. "lxqt.conf" => '\u{f364}', // 
  388. "Makefile" => Icons::MAKE, // 
  389. "makefile" => Icons::MAKE, // 
  390. "Makefile.ac" => Icons::MAKE, // 
  391. "Makefile.am" => Icons::MAKE, // 
  392. "Makefile.in" => Icons::MAKE, // 
  393. "MANIFEST" => Icons::LANG_PYTHON, // 
  394. "MANIFEST.in" => Icons::LANG_PYTHON, // 
  395. "mix.lock" => Icons::LANG_ELIXIR, // 
  396. "mpv.conf" => '\u{f36e}', // 
  397. "npm-shrinkwrap.json" => Icons::NPM, // 
  398. "npmrc" => Icons::NPM, // 
  399. "package-lock.json" => Icons::NPM, // 
  400. "package.json" => Icons::NPM, // 
  401. "passwd" => Icons::LOCK, // 
  402. "php.ini" => Icons::LANG_PHP, // 
  403. "PKGBUILD" => '\u{f303}', // 
  404. "platformio.ini" => '\u{e682}', // 
  405. "pom.xml" => '\u{e674}', // 
  406. "Procfile" => '\u{e77b}', // 
  407. "profile" => Icons::SHELL, // 󱆃
  408. "PrusaSlicer.ini" => '\u{f351}', // 
  409. "PrusaSlicerGcodeViewer.ini" => '\u{f351}', // 
  410. "pyvenv.cfg" => Icons::LANG_PYTHON, // 
  411. "pyproject.toml" => Icons::LANG_PYTHON, // 
  412. "qt5ct.conf" => Icons::QT, // 
  413. "qt6ct.conf" => Icons::QT, // 
  414. "QtProject.conf" => Icons::QT, // 
  415. "Rakefile" => Icons::LANG_RUBY, // 
  416. "README" => Icons::README, // 󰂺
  417. "README.md" => Icons::README, // 󰂺
  418. "release.toml" => Icons::LANG_RUST, // 
  419. "renovate.json" => '\u{f027c}', // 󰉼
  420. "requirements.txt" => Icons::LANG_PYTHON, // 
  421. "robots.txt" => '\u{f06a9}', // 󰚩
  422. "rubydoc" => Icons::LANG_RUBYRAILS, // 
  423. "rvmrc" => Icons::LANG_RUBY, // 
  424. "SECURITY" => '\u{f0483}', // 󰒃
  425. "SECURITY.md" => '\u{f0483}', // 󰒃
  426. "settings.gradle.kts" => Icons::GRADLE, // 
  427. "shadow" => Icons::LOCK, // 
  428. "shells" => Icons::CONFIG, // 
  429. "sudoers" => Icons::LOCK, // 
  430. "sxhkdrc" => Icons::CONFIG, // 
  431. "sym-lib-table" => Icons::KICAD, // 
  432. "timezone" => Icons::CLOCK, // 
  433. "tmux.conf" => Icons::TMUX, // 
  434. "tmux.conf.local" => Icons::TMUX, // 
  435. "tsconfig.json" => Icons::LANG_TYPESCRIPT,// 
  436. "Vagrantfile" => '\u{2371}', // ⍱
  437. "vlcrc" => '\u{f057c}', // 󰕼
  438. "webpack.config.js" => '\u{f072b}', // 󰜫
  439. "weston.ini" => '\u{f367}', // 
  440. "xmobarrc" => '\u{f35e}', // 
  441. "xmobarrc.hs" => '\u{f35e}', // 
  442. "xmonad.hs" => '\u{f35e}', // 
  443. "yarn.lock" => Icons::YARN, // 
  444. "zlogin" => Icons::SHELL, // 󱆃
  445. "zlogout" => Icons::SHELL, // 󱆃
  446. "zprofile" => Icons::SHELL, // 󱆃
  447. "zshenv" => Icons::SHELL, // 󱆃
  448. "zshrc" => Icons::SHELL, // 󱆃
  449. };
  450. /// Mapping from lowercase file extension to icons. If an image, video, or audio extension is add
  451. /// also update the extension filetype map.
  452. const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
  453. "123dx" => Icons::CAD, // 󰻫
  454. "3dm" => Icons::CAD, // 󰻫
  455. "3g2" => Icons::VIDEO, // 
  456. "3gp" => Icons::VIDEO, // 
  457. "3gp2" => Icons::VIDEO, // 
  458. "3gpp" => Icons::VIDEO, // 
  459. "3gpp2" => Icons::VIDEO, // 
  460. "3mf" => Icons::FILE_3D, // 󰆧
  461. "7z" => Icons::COMPRESSED, // 
  462. "a" => Icons::OS_LINUX, // 
  463. "aac" => Icons::AUDIO, // 
  464. "acf" => '\u{f1b6}', // 
  465. "age" => Icons::SHIELD_LOCK, // 󰦝
  466. "ai" => '\u{e7b4}', // 
  467. "aif" => Icons::AUDIO, // 
  468. "aifc" => Icons::AUDIO, // 
  469. "aiff" => Icons::AUDIO, // 
  470. "alac" => Icons::AUDIO, // 
  471. "android" => Icons::OS_ANDROID, // 
  472. "ape" => Icons::AUDIO, // 
  473. "apk" => Icons::OS_ANDROID, // 
  474. "app" => Icons::BINARY, // 
  475. "applescript" => Icons::OS_APPLE, // 
  476. "apple" => Icons::OS_APPLE, // 
  477. "ar" => Icons::COMPRESSED, // 
  478. "arj" => Icons::COMPRESSED, // 
  479. "arw" => Icons::IMAGE, // 
  480. "asc" => Icons::SHIELD_LOCK, // 󰦝
  481. "asm" => Icons::LANG_ASSEMBLY, // 
  482. "asp" => '\u{f121}', // 
  483. "ass" => Icons::SUBTITLE, // 󰨖
  484. "avi" => Icons::VIDEO, // 
  485. "avif" => Icons::IMAGE, // 
  486. "avro" => Icons::JSON, // 
  487. "awk" => Icons::SHELL_CMD, // 
  488. "bash" => Icons::SHELL_CMD, // 
  489. "bat" => Icons::OS_WINDOWS_CMD, // 
  490. "bats" => Icons::SHELL_CMD, // 
  491. "bdf" => Icons::FONT, // 
  492. "bib" => Icons::LANG_TEX, // 
  493. "bin" => Icons::BINARY, // 
  494. "blend" => '\u{f00ab}', // 󰂫
  495. "bmp" => Icons::IMAGE, // 
  496. "br" => Icons::COMPRESSED, // 
  497. "brd" => Icons::EDA_PCB, // 
  498. "brep" => Icons::CAD, // 󰻫
  499. "bst" => Icons::LANG_TEX, // 
  500. "bundle" => Icons::OS_APPLE, // 
  501. "bz" => Icons::COMPRESSED, // 
  502. "bz2" => Icons::COMPRESSED, // 
  503. "bz3" => Icons::COMPRESSED, // 
  504. "c" => Icons::LANG_C, // 
  505. "c++" => Icons::LANG_CPP, // 
  506. "cab" => Icons::OS_WINDOWS, // 
  507. "cache" => Icons::CACHE, // 
  508. "cast" => Icons::VIDEO, // 
  509. "catpart" => Icons::CAD, // 󰻫
  510. "catproduct" => Icons::CAD, // 󰻫
  511. "cbr" => Icons::IMAGE, // 
  512. "cbz" => Icons::IMAGE, // 
  513. "cc" => Icons::LANG_CPP, // 
  514. "cert" => Icons::GIST_SECRET, // 
  515. "cfg" => Icons::CONFIG, // 
  516. "cjs" => Icons::LANG_JAVASCRIPT, // 
  517. "class" => Icons::LANG_JAVA, // 
  518. "clj" => '\u{e768}', // 
  519. "cljc" => '\u{e768}', // 
  520. "cljs" => '\u{e76a}', // 
  521. "cls" => Icons::LANG_TEX, // 
  522. "cmake" => '\u{e794}', // 
  523. "cmd" => Icons::OS_WINDOWS, // 
  524. "coffee" => '\u{f0f4}', // 
  525. "com" => '\u{e629}', // 
  526. "conda" => '\u{e715}', // 
  527. "conf" => Icons::CONFIG, // 
  528. "config" => Icons::CONFIG, // 
  529. "cow" => '\u{f019a}', // 󰆚
  530. "cp" => Icons::LANG_CPP, // 
  531. "cpio" => Icons::COMPRESSED, // 
  532. "cpp" => Icons::LANG_CPP, // 
  533. "cr" => '\u{e62f}', // 
  534. "cr2" => Icons::IMAGE, // 
  535. "crdownload" => Icons::DOWNLOAD, // 󰇚
  536. "crt" => Icons::GIST_SECRET, // 
  537. "cs" => Icons::LANG_CSHARP, // 󰌛
  538. "csh" => Icons::SHELL_CMD, // 
  539. "cshtml" => Icons::RAZOR, // 
  540. "csproj" => Icons::LANG_CSHARP, // 󰌛
  541. "css" => Icons::CSS3, // 
  542. "csv" => Icons::SHEET, // 
  543. "csx" => Icons::LANG_CSHARP, // 󰌛
  544. "cts" => Icons::LANG_TYPESCRIPT, // 
  545. "cu" => '\u{e64b}', // 
  546. "cue" => Icons::PLAYLIST, // 󰲹
  547. "cxx" => Icons::LANG_CPP, // 
  548. "d" => Icons::LANG_D, // 
  549. "dart" => '\u{e798}', // 
  550. "db" => Icons::DATABASE, // 
  551. "db3" => Icons::SQLITE, // 
  552. "dconf" => Icons::DATABASE, // 
  553. "deb" => '\u{e77d}', // 
  554. "desktop" => '\u{ebd1}', // 
  555. "di" => Icons::LANG_D, // 
  556. "diff" => Icons::DIFF, // 
  557. "djv" => Icons::DOCUMENT, // 
  558. "djvu" => Icons::DOCUMENT, // 
  559. "dll" => Icons::LIBRARY, // 
  560. "dmg" => Icons::DISK_IMAGE, // 
  561. "doc" => Icons::DOCUMENT, // 
  562. "docm" => Icons::DOCUMENT, // 
  563. "docx" => Icons::DOCUMENT, // 
  564. "dot" => Icons::GRAPH, // 󱁉
  565. "download" => Icons::DOWNLOAD, // 󰇚
  566. "dockerfile" => Icons::DOCKER, // 
  567. "dockerignore" => Icons::DOCKER, // 
  568. "drawio" => '\u{ebba}', // 
  569. "dump" => Icons::DATABASE, // 
  570. "dvi" => Icons::IMAGE, // 
  571. "dwg" => Icons::CAD, // 󰻫
  572. "dxf" => Icons::CAD, // 󰻫
  573. "dylib" => Icons::OS_APPLE, // 
  574. "ebook" => Icons::BOOK, // 
  575. "ebuild" => '\u{f30d}', // 
  576. "edn" => '\u{e76a}', // 
  577. "editorconfig" => '\u{e652}', // 
  578. "eex" => Icons::LANG_ELIXIR, // 
  579. "ejs" => '\u{e618}', // 
  580. "el" => Icons::EMACS, // 
  581. "elc" => Icons::EMACS, // 
  582. "elf" => Icons::BINARY, // 
  583. "elm" => '\u{e62c}', // 
  584. "eml" => '\u{f003}', // 
  585. "env" => '\u{f462}', // 
  586. "eot" => Icons::FONT, // 
  587. "eps" => Icons::VECTOR, // 󰕙
  588. "epub" => Icons::BOOK, // 
  589. "erb" => Icons::LANG_RUBYRAILS, // 
  590. "erl" => '\u{e7b1}', // 
  591. "ex" => Icons::LANG_ELIXIR, // 
  592. "exe" => Icons::OS_WINDOWS_CMD, // 
  593. "exs" => Icons::LANG_ELIXIR, // 
  594. "f" => Icons::LANG_FORTRAN, // 󱈚
  595. "f#" => Icons::LANG_FSHARP, // 
  596. "f3d" => Icons::CAD, // 󰻫
  597. "f3z" => Icons::CAD, // 󰻫
  598. "f90" => Icons::LANG_FORTRAN, // 󱈚
  599. "fbx" => Icons::FILE_3D, // 󰆧
  600. "fdmdownload" => Icons::DOWNLOAD, // 󰇚
  601. "fcbak" => Icons::FREECAD, // 
  602. "fcmacro" => Icons::FREECAD, // 
  603. "fcmat" => Icons::FREECAD, // 
  604. "fcparam" => Icons::FREECAD, // 
  605. "fcscript" => Icons::FREECAD, // 
  606. "fcstd" => Icons::FREECAD, // 
  607. "fcstd1" => Icons::FREECAD, // 
  608. "fctb" => Icons::FREECAD, // 
  609. "fctl" => Icons::FREECAD, // 
  610. "fish" => Icons::SHELL_CMD, // 
  611. "flac" => Icons::AUDIO, // 
  612. "flc" => Icons::FONT, // 
  613. "flf" => Icons::FONT, // 
  614. "flv" => Icons::VIDEO, // 
  615. "fnl" => Icons::LANG_FENNEL, // 
  616. "fnt" => Icons::FONT, // 
  617. "fodg" => '\u{f379}', // 
  618. "fodp" => '\u{f37a}', // 
  619. "fods" => '\u{f378}', // 
  620. "fodt" => '\u{f37c}', // 
  621. "fon" => Icons::FONT, // 
  622. "font" => Icons::FONT, // 
  623. "for" => Icons::LANG_FORTRAN, // 󱈚
  624. "fs" => Icons::LANG_FSHARP, // 
  625. "fsi" => Icons::LANG_FSHARP, // 
  626. "fsproj" => Icons::LANG_FSHARP, // 
  627. "fsscript" => Icons::LANG_FSHARP, // 
  628. "fsx" => Icons::LANG_FSHARP, // 
  629. "gba" => '\u{f1393}', // 󱎓
  630. "gbl" => Icons::EDA_PCB, // 
  631. "gbo" => Icons::EDA_PCB, // 
  632. "gbp" => Icons::EDA_PCB, // 
  633. "gbr" => Icons::EDA_PCB, // 
  634. "gbs" => Icons::EDA_PCB, // 
  635. "gcode" => '\u{f0af4}', // 󰫴
  636. "gd" => Icons::GODOT, // 
  637. "gdoc" => Icons::DOCUMENT, // 
  638. "gem" => Icons::LANG_RUBY, // 
  639. "gemfile" => Icons::LANG_RUBY, // 
  640. "gemspec" => Icons::LANG_RUBY, // 
  641. "gform" => '\u{f298}', // 
  642. "gif" => Icons::IMAGE, // 
  643. "git" => Icons::GIT, // 
  644. "gleam" => Icons::LANG_GLEAM, // 󰦥
  645. "gm1" => Icons::EDA_PCB, // 
  646. "gml" => Icons::EDA_PCB, // 
  647. "go" => Icons::LANG_GO, // 
  648. "godot" => Icons::GODOT, // 
  649. "gpg" => Icons::SHIELD_LOCK, // 󰦝
  650. "gql" => Icons::GRAPHQL, // 
  651. "gradle" => Icons::GRADLE, // 
  652. "graphql" => Icons::GRAPHQL, // 
  653. "gresource" => Icons::GTK, // 
  654. "groovy" => Icons::LANG_GROOVY, // 
  655. "gsheet" => Icons::SHEET, // 
  656. "gslides" => Icons::SLIDE, // 
  657. "gtl" => Icons::EDA_PCB, // 
  658. "gto" => Icons::EDA_PCB, // 
  659. "gtp" => Icons::EDA_PCB, // 
  660. "gts" => Icons::EDA_PCB, // 
  661. "guardfile" => Icons::LANG_RUBY, // 
  662. "gv" => Icons::GRAPH, // 󱁉
  663. "gvy" => Icons::LANG_GROOVY, // 
  664. "gz" => Icons::COMPRESSED, // 
  665. "h" => Icons::LANG_C, // 
  666. "h++" => Icons::LANG_CPP, // 
  667. "h264" => Icons::VIDEO, // 
  668. "haml" => '\u{e664}', // 
  669. "hbs" => Icons::MUSTACHE, // 
  670. "hc" => Icons::LANG_HOLYC, // 󰂢
  671. "heic" => Icons::IMAGE, // 
  672. "heics" => Icons::VIDEO, // 
  673. "heif" => Icons::IMAGE, // 
  674. "hex" => '\u{f12a7}', // 󱊧
  675. "hh" => Icons::LANG_CPP, // 
  676. "hi" => Icons::BINARY, // 
  677. "hpp" => Icons::LANG_CPP, // 
  678. "hrl" => '\u{e7b1}', // 
  679. "hs" => Icons::LANG_HASKELL, // 
  680. "htm" => Icons::HTML5, // 
  681. "html" => Icons::HTML5, // 
  682. "hxx" => Icons::LANG_CPP, // 
  683. "iam" => Icons::CAD, // 󰻫
  684. "ical" => Icons::CALENDAR, // 
  685. "icalendar" => Icons::CALENDAR, // 
  686. "ico" => Icons::IMAGE, // 
  687. "ics" => Icons::CALENDAR, // 
  688. "ifb" => Icons::CALENDAR, // 
  689. "ifc" => Icons::CAD, // 󰻫
  690. "ige" => Icons::CAD, // 󰻫
  691. "iges" => Icons::CAD, // 󰻫
  692. "igs" => Icons::CAD, // 󰻫
  693. "image" => Icons::DISK_IMAGE, // 
  694. "img" => Icons::DISK_IMAGE, // 
  695. "iml" => Icons::INTELLIJ, // 
  696. "info" => Icons::INFO, // 
  697. "ini" => Icons::CONFIG, // 
  698. "inl" => Icons::LANG_C, // 
  699. "ipynb" => Icons::NOTEBOOK, // 
  700. "ino" => Icons::LANG_ARDUINO, // 
  701. "ipt" => Icons::CAD, // 󰻫
  702. "iso" => Icons::DISK_IMAGE, // 
  703. "j2c" => Icons::IMAGE, // 
  704. "j2k" => Icons::IMAGE, // 
  705. "jad" => Icons::LANG_JAVA, // 
  706. "jar" => Icons::LANG_JAVA, // 
  707. "java" => Icons::LANG_JAVA, // 
  708. "jwmrc" => '\u{f35b}', // 
  709. "jfi" => Icons::IMAGE, // 
  710. "jfif" => Icons::IMAGE, // 
  711. "jif" => Icons::IMAGE, // 
  712. "jl" => '\u{e624}', // 
  713. "jmd" => Icons::MARKDOWN, // 
  714. "jp2" => Icons::IMAGE, // 
  715. "jpe" => Icons::IMAGE, // 
  716. "jpeg" => Icons::IMAGE, // 
  717. "jpf" => Icons::IMAGE, // 
  718. "jpg" => Icons::IMAGE, // 
  719. "jpx" => Icons::IMAGE, // 
  720. "js" => Icons::LANG_JAVASCRIPT, // 
  721. "json" => Icons::JSON, // 
  722. "json5" => Icons::JSON, // 
  723. "jsonc" => Icons::JSON, // 
  724. "jsx" => Icons::REACT, // 
  725. "jxl" => Icons::IMAGE, // 
  726. "kbx" => Icons::SHIELD_KEY, // 󰯄
  727. "kdb" => Icons::KEYPASS, // 
  728. "kdbx" => Icons::KEYPASS, // 
  729. "kdenlive" => Icons::KDENLIVE, // 
  730. "kdenlivetitle" => Icons::KDENLIVE, // 
  731. "key" => Icons::KEY, // 
  732. "kicad_dru" => Icons::KICAD, // 
  733. "kicad_mod" => Icons::KICAD, // 
  734. "kicad_pcb" => Icons::KICAD, // 
  735. "kicad_prl" => Icons::KICAD, // 
  736. "kicad_pro" => Icons::KICAD, // 
  737. "kicad_sch" => Icons::KICAD, // 
  738. "kicad_sym" => Icons::KICAD, // 
  739. "kicad_wks" => Icons::KICAD, // 
  740. "ko" => Icons::OS_LINUX, // 
  741. "kpp" => Icons::KRITA, // 
  742. "kra" => Icons::KRITA, // 
  743. "krz" => Icons::KRITA, // 
  744. "ksh" => Icons::SHELL_CMD, // 
  745. "kt" => Icons::LANG_KOTLIN, // 
  746. "kts" => Icons::LANG_KOTLIN, // 
  747. "latex" => Icons::LANG_TEX, // 
  748. "lbr" => Icons::LIBRARY, // 
  749. "lck" => Icons::LOCK, // 
  750. "ldb" => Icons::DATABASE, // 
  751. "leex" => Icons::LANG_ELIXIR, // 
  752. "less" => '\u{e758}', // 
  753. "lff" => Icons::FONT, // 
  754. "lhs" => Icons::LANG_HASKELL, // 
  755. "lib" => Icons::LIBRARY, // 
  756. "license" => Icons::LICENSE, // 
  757. "lisp" => '\u{f0172}', // 󰅲
  758. "localized" => Icons::OS_APPLE, // 
  759. "lock" => Icons::LOCK, // 
  760. "log" => Icons::LOG, // 
  761. "lpp" => Icons::EDA_PCB, // 
  762. "lrc" => Icons::SUBTITLE, // 󰨖
  763. "ltx" => Icons::LANG_TEX, // 
  764. "lua" => Icons::LANG_LUA, // 
  765. "luac" => Icons::LANG_LUA, // 
  766. "luau" => Icons::LANG_LUA, // 
  767. "lz" => Icons::COMPRESSED, // 
  768. "lz4" => Icons::COMPRESSED, // 
  769. "lzh" => Icons::COMPRESSED, // 
  770. "lzma" => Icons::COMPRESSED, // 
  771. "lzo" => Icons::COMPRESSED, // 
  772. "m" => Icons::LANG_C, // 
  773. "m2ts" => Icons::VIDEO, // 
  774. "m2v" => Icons::VIDEO, // 
  775. "m3u" => Icons::PLAYLIST, // 󰲹
  776. "m3u8" => Icons::PLAYLIST, // 󰲹
  777. "m4a" => Icons::AUDIO, // 
  778. "m4v" => Icons::VIDEO, // 
  779. "magnet" => '\u{f076}', // 
  780. "markdown" => Icons::MARKDOWN, // 
  781. "md" => Icons::MARKDOWN, // 
  782. "md5" => Icons::SHIELD_CHECK, // 󰕥
  783. "mdb" => Icons::DATABASE, // 
  784. "mdx" => Icons::MARKDOWN, // 
  785. "mid" => '\u{f08f2}', // 󰣲
  786. "mjs" => Icons::LANG_JAVASCRIPT, // 
  787. "mk" => Icons::MAKE, // 
  788. "mka" => Icons::AUDIO, // 
  789. "mkd" => Icons::MARKDOWN, // 
  790. "mkv" => Icons::VIDEO, // 
  791. "ml" => Icons::LANG_OCAML, // 
  792. "mli" => Icons::LANG_OCAML, // 
  793. "mll" => Icons::LANG_OCAML, // 
  794. "mly" => Icons::LANG_OCAML, // 
  795. "mm" => Icons::LANG_CPP, // 
  796. "mo" => Icons::TRANSLATION, // 󰗊
  797. "mobi" => Icons::BOOK, // 
  798. "mov" => Icons::VIDEO, // 
  799. "mp2" => Icons::AUDIO, // 
  800. "mp3" => Icons::AUDIO, // 
  801. "mp4" => Icons::VIDEO, // 
  802. "mpeg" => Icons::VIDEO, // 
  803. "mpg" => Icons::VIDEO, // 
  804. "msf" => '\u{f370}', // 
  805. "msi" => Icons::OS_WINDOWS, // 
  806. "mts" => Icons::LANG_TYPESCRIPT, // 
  807. "mustache" => Icons::MUSTACHE, // 
  808. "nef" => Icons::IMAGE, // 
  809. "nfo" => Icons::INFO, // 
  810. "nim" => Icons::LANG_NIM, // 
  811. "nimble" => Icons::LANG_NIM, // 
  812. "nims" => Icons::LANG_NIM, // 
  813. "ninja" => '\u{f0774}', // 󰝴
  814. "nix" => '\u{f313}', // 
  815. "node" => Icons::NODEJS, // 
  816. "norg" => '\u{e847}', // 
  817. "nsp" => '\u{F07E1}', // 󰟡
  818. "nu" => Icons::SHELL_CMD, // 
  819. "o" => Icons::BINARY, // 
  820. "obj" => Icons::FILE_3D, // 󰆧
  821. "odb" => Icons::DATABASE, // 
  822. "odf" => '\u{f37b}', // 
  823. "odg" => '\u{f379}', // 
  824. "odp" => '\u{f37a}', // 
  825. "ods" => '\u{f378}', // 
  826. "odt" => '\u{f37c}', // 
  827. "ogg" => Icons::AUDIO, // 
  828. "ogm" => Icons::VIDEO, // 
  829. "ogv" => Icons::VIDEO, // 
  830. "opml" => Icons::XML, // 󰗀
  831. "opus" => Icons::AUDIO, // 
  832. "orf" => Icons::IMAGE, // 
  833. "org" => '\u{e633}', // 
  834. "otf" => Icons::FONT, // 
  835. "out" => '\u{eb2c}', // 
  836. "p12" => Icons::KEY, // 
  837. "par" => Icons::COMPRESSED, // 
  838. "part" => Icons::DOWNLOAD, // 󰇚
  839. "patch" => Icons::DIFF, // 
  840. "pbm" => Icons::IMAGE, // 
  841. "pcbdoc" => Icons::EDA_PCB, // 
  842. "pcm" => Icons::AUDIO, // 
  843. "pdf" => '\u{f1c1}', // 
  844. "pem" => Icons::KEY, // 
  845. "pfx" => Icons::KEY, // 
  846. "pgm" => Icons::IMAGE, // 
  847. "phar" => Icons::LANG_PHP, // 
  848. "php" => Icons::LANG_PHP, // 
  849. "pkg" => '\u{eb29}', // 
  850. "pl" => Icons::LANG_PERL, // 
  851. "plist" => Icons::OS_APPLE, // 
  852. "pls" => Icons::PLAYLIST, // 󰲹
  853. "plx" => Icons::LANG_PERL, // 
  854. "ply" => Icons::FILE_3D, // 󰆧
  855. "pm" => Icons::LANG_PERL, // 
  856. "png" => Icons::IMAGE, // 
  857. "pnm" => Icons::IMAGE, // 
  858. "po" => Icons::TRANSLATION, // 󰗊
  859. "pod" => Icons::LANG_PERL, // 
  860. "pot" => Icons::TRANSLATION, // 󰗊
  861. "pp" => '\u{e631}', // 
  862. "ppm" => Icons::IMAGE, // 
  863. "pps" => Icons::SLIDE, // 
  864. "ppsx" => Icons::SLIDE, // 
  865. "ppt" => Icons::SLIDE, // 
  866. "pptx" => Icons::SLIDE, // 
  867. "prjpcb" => Icons::EDA_PCB, // 
  868. "procfile" => Icons::LANG_RUBY, // 
  869. "properties" => Icons::JSON, // 
  870. "prql" => Icons::DATABASE, // 
  871. "ps" => Icons::VECTOR, // 󰕙
  872. "ps1" => Icons::POWERSHELL, // 
  873. "psb" => '\u{e7b8}', // 
  874. "psd" => '\u{e7b8}', // 
  875. "psd1" => Icons::POWERSHELL, // 
  876. "psf" => Icons::FONT, // 
  877. "psm" => Icons::CAD, // 󰻫
  878. "psm1" => Icons::POWERSHELL, // 
  879. "pub" => Icons::PUBLIC_KEY, // 󰷖
  880. "purs" => '\u{e630}', // 
  881. "pxd" => Icons::LANG_PYTHON, // 
  882. "pxm" => Icons::IMAGE, // 
  883. "py" => Icons::LANG_PYTHON, // 
  884. "pyc" => Icons::LANG_PYTHON, // 
  885. "pyd" => Icons::LANG_PYTHON, // 
  886. "pyi" => Icons::LANG_PYTHON, // 
  887. "pyo" => Icons::LANG_PYTHON, // 
  888. "pyw" => Icons::LANG_PYTHON, // 
  889. "pyx" => Icons::LANG_PYTHON, // 
  890. "qcow" => Icons::DISK_IMAGE, // 
  891. "qcow2" => Icons::DISK_IMAGE, // 
  892. "qm" => Icons::TRANSLATION, // 󰗊
  893. "qml" => Icons::QT, // 
  894. "qrc" => Icons::QT, // 
  895. "qss" => Icons::QT, // 
  896. "r" => Icons::LANG_R, // 
  897. "rake" => Icons::LANG_RUBY, // 
  898. "rakefile" => Icons::LANG_RUBY, // 
  899. "rar" => Icons::COMPRESSED, // 
  900. "raw" => Icons::IMAGE, // 
  901. "razor" => Icons::RAZOR, // 
  902. "rb" => Icons::LANG_RUBY, // 
  903. "rdata" => Icons::LANG_R, // 
  904. "rdb" => '\u{e76d}', // 
  905. "rdoc" => Icons::MARKDOWN, // 
  906. "rds" => Icons::LANG_R, // 
  907. "readme" => Icons::README, // 󰂺
  908. "rkt" => Icons::LANG_SCHEME, // 
  909. "rlib" => Icons::LANG_RUST, // 
  910. "rmd" => Icons::MARKDOWN, // 
  911. "rmeta" => Icons::LANG_RUST, // 
  912. "rpm" => '\u{e7bb}', // 
  913. "rs" => Icons::LANG_RUST, // 
  914. "rspec" => Icons::LANG_RUBY, // 
  915. "rspec_parallel" => Icons::LANG_RUBY, // 
  916. "rspec_status" => Icons::LANG_RUBY, // 
  917. "rss" => '\u{f09e}', // 
  918. "rst" => Icons::TEXT, // 
  919. "rtf" => Icons::TEXT, // 
  920. "ru" => Icons::LANG_RUBY, // 
  921. "rubydoc" => Icons::LANG_RUBYRAILS, // 
  922. "s" => Icons::LANG_ASSEMBLY, // 
  923. "s3db" => Icons::SQLITE, // 
  924. "sal" => '\u{f147b}', // 󱑻
  925. "sass" => Icons::LANG_SASS, // 
  926. "sbt" => Icons::SUBTITLE, // 󰨖
  927. "scad" => '\u{f34e}', // 
  928. "scala" => '\u{e737}', // 
  929. "scm" => Icons::LANG_SCHEME, // 
  930. "sch" => Icons::EDA_SCH, // 󰭅
  931. "schdoc" => Icons::EDA_SCH, // 󰭅
  932. "scss" => Icons::LANG_SASS, // 
  933. "service" => '\u{eba2}', // 
  934. "sf2" => '\u{f0f70}', // 󰽰
  935. "sfz" => '\u{f0f70}', // 󰽰
  936. "sh" => Icons::SHELL_CMD, // 
  937. "sha1" => Icons::SHIELD_CHECK, // 󰕥
  938. "sha224" => Icons::SHIELD_CHECK, // 󰕥
  939. "sha256" => Icons::SHIELD_CHECK, // 󰕥
  940. "sha384" => Icons::SHIELD_CHECK, // 󰕥
  941. "sha512" => Icons::SHIELD_CHECK, // 󰕥
  942. "shell" => Icons::SHELL_CMD, // 
  943. "shtml" => Icons::HTML5, // 
  944. "sig" => Icons::SIGNED_FILE, // 󱧃
  945. "signature" => Icons::SIGNED_FILE, // 󱧃
  946. "sld" => Icons::LANG_SCHEME, // 
  947. "skp" => Icons::CAD, // 󰻫
  948. "sl3" => Icons::SQLITE, // 
  949. "sldasm" => Icons::CAD, // 󰻫
  950. "sldprt" => Icons::CAD, // 󰻫
  951. "slim" => Icons::LANG_RUBYRAILS, // 
  952. "sln" => '\u{e70c}', // 
  953. "slvs" => Icons::CAD, // 󰻫
  954. "so" => Icons::OS_LINUX, // 
  955. "sql" => Icons::DATABASE, // 
  956. "sqlite" => Icons::SQLITE, // 
  957. "sqlite3" => Icons::SQLITE, // 
  958. "sr" => '\u{f147b}', // 󱑻
  959. "srt" => Icons::SUBTITLE, // 󰨖
  960. "ss" => Icons::LANG_SCHEME, // 
  961. "ssa" => Icons::SUBTITLE, // 󰨖
  962. "stl" => Icons::FILE_3D, // 󰆧
  963. "ste" => Icons::CAD, // 󰻫
  964. "step" => Icons::CAD, // 󰻫
  965. "stp" => Icons::CAD, // 󰻫
  966. "sty" => Icons::LANG_TEX, // 
  967. "styl" => Icons::LANG_STYLUS, // 
  968. "stylus" => Icons::LANG_STYLUS, // 
  969. "sub" => Icons::SUBTITLE, // 󰨖
  970. "sublime-build" => Icons::SUBLIME, // 
  971. "sublime-keymap" => Icons::SUBLIME, // 
  972. "sublime-menu" => Icons::SUBLIME, // 
  973. "sublime-options"=> Icons::SUBLIME, // 
  974. "sublime-package"=> Icons::SUBLIME, // 
  975. "sublime-project"=> Icons::SUBLIME, // 
  976. "sublime-session"=> Icons::SUBLIME, // 
  977. "sublime-settings"=>Icons::SUBLIME, // 
  978. "sublime-snippet"=> Icons::SUBLIME, // 
  979. "sublime-theme" => Icons::SUBLIME, // 
  980. "suo" => '\u{e70c}', // 
  981. "svelte" => '\u{e697}', // 
  982. "sv" => Icons::LANG_HDL, // 󰍛
  983. "svg" => Icons::VECTOR, // 󰕙
  984. "svh" => Icons::LANG_HDL, // 󰍛
  985. "swf" => Icons::AUDIO, // 
  986. "swift" => '\u{e755}', // 
  987. "t" => Icons::LANG_PERL, // 
  988. "tape" => '\u{F0A1B}', // 󰨛
  989. "tar" => Icons::COMPRESSED, // 
  990. "taz" => Icons::COMPRESSED, // 
  991. "tbc" => '\u{f06d3}', // 󰛓
  992. "tbz" => Icons::COMPRESSED, // 
  993. "tbz2" => Icons::COMPRESSED, // 
  994. "tc" => Icons::DISK_IMAGE, // 
  995. "tcl" => '\u{f06d3}', // 󰛓
  996. "tex" => Icons::LANG_TEX, // 
  997. "tf" => Icons::TERRAFORM, // 󱁢
  998. "tfstate" => Icons::TERRAFORM, // 󱁢
  999. "tfvars" => Icons::TERRAFORM, // 󱁢
  1000. "tgz" => Icons::COMPRESSED, // 
  1001. "tif" => Icons::IMAGE, // 
  1002. "tiff" => Icons::IMAGE, // 
  1003. "tlz" => Icons::COMPRESSED, // 
  1004. "tml" => Icons::CONFIG, // 
  1005. "tmux" => Icons::TMUX, // 
  1006. "toml" => Icons::TOML, // 
  1007. "torrent" => '\u{e275}', // 
  1008. "tres" => Icons::GODOT, // 
  1009. "ts" => Icons::LANG_TYPESCRIPT, // 
  1010. "tscn" => Icons::GODOT, // 
  1011. "tsv" => Icons::SHEET, // 
  1012. "tsx" => Icons::REACT, // 
  1013. "ttc" => Icons::FONT, // 
  1014. "ttf" => Icons::FONT, // 
  1015. "twig" => '\u{e61c}', // 
  1016. "txt" => Icons::TEXT, // 
  1017. "typ" => Icons::TYPST, // 
  1018. "txz" => Icons::COMPRESSED, // 
  1019. "tz" => Icons::COMPRESSED, // 
  1020. "tzo" => Icons::COMPRESSED, // 
  1021. "ui" => '\u{f2d0}', // 
  1022. "unity" => Icons::UNITY, // 
  1023. "unity3d" => Icons::UNITY, // 
  1024. "v" => Icons::LANG_V, // 
  1025. "vala" => '\u{e8d1}', // 
  1026. "vdi" => Icons::DISK_IMAGE, // 
  1027. "vhd" => Icons::DISK_IMAGE, // 
  1028. "vhs" => '\u{F0A1B}', // 󰨛
  1029. "vi" => '\u{e81e}', // 
  1030. "vhdl" => Icons::LANG_HDL, // 󰍛
  1031. "video" => Icons::VIDEO, // 
  1032. "vim" => Icons::VIM, // 
  1033. "vmdk" => Icons::DISK_IMAGE, // 
  1034. "vob" => Icons::VIDEO, // 
  1035. "vsix" => '\u{f0a1e}', // 󰨞
  1036. "vue" => '\u{f0844}', // 󰡄
  1037. "war" => Icons::LANG_JAVA, // 
  1038. "wav" => Icons::AUDIO, // 
  1039. "webm" => Icons::VIDEO, // 
  1040. "webmanifest" => Icons::JSON, // 
  1041. "webp" => Icons::IMAGE, // 
  1042. "whl" => Icons::LANG_PYTHON, // 
  1043. "windows" => Icons::OS_WINDOWS, // 
  1044. "wma" => Icons::AUDIO, // 
  1045. "wmv" => Icons::VIDEO, // 
  1046. "woff" => Icons::FONT, // 
  1047. "woff2" => Icons::FONT, // 
  1048. "wrl" => Icons::FILE_3D, // 󰆧
  1049. "wrz" => Icons::FILE_3D, // 󰆧
  1050. "wv" => Icons::AUDIO, // 
  1051. "xaml" => '\u{f0673}', // 󰙳
  1052. "xcf" => Icons::GIMP, // 
  1053. "xci" => '\u{F07E1}', // 󰟡
  1054. "xhtml" => Icons::HTML5, // 
  1055. "xlr" => Icons::SHEET, // 
  1056. "xls" => Icons::SHEET, // 
  1057. "xlsm" => Icons::SHEET, // 
  1058. "xlsx" => Icons::SHEET, // 
  1059. "xml" => Icons::XML, // 󰗀
  1060. "xpi" => '\u{eae6}', // 
  1061. "xpm" => Icons::IMAGE, // 
  1062. "xul" => Icons::XML, // 󰗀
  1063. "xz" => Icons::COMPRESSED, // 
  1064. "x_b" => Icons::CAD, // 󰻫
  1065. "x_t" => Icons::CAD, // 󰻫
  1066. "yaml" => Icons::YAML, // 
  1067. "yml" => Icons::YAML, // 
  1068. "z" => Icons::COMPRESSED, // 
  1069. "zig" => '\u{e6a9}', // 
  1070. "zip" => Icons::COMPRESSED, // 
  1071. "zsh" => Icons::SHELL_CMD, // 
  1072. "zsh-theme" => Icons::SHELL, // 󱆃
  1073. "zst" => Icons::COMPRESSED, // 
  1074. "z64" => '\u{f1393}', // 󱎓
  1075. };
  1076. /// Converts the style used to paint a file name into the style that should be
  1077. /// used to paint an icon.
  1078. ///
  1079. /// - The background colour should be preferred to the foreground colour, as
  1080. /// if one is set, it’s the more “obvious” colour choice.
  1081. /// - If neither is set, just use the default style.
  1082. /// - Attributes such as bold or underline should not be used to paint the
  1083. /// icon, as they can make it look weird.
  1084. pub fn iconify_style(style: Style) -> Style {
  1085. style
  1086. .background
  1087. .or(style.foreground)
  1088. .map(Style::from)
  1089. .unwrap_or_default()
  1090. }
  1091. /// Lookup the icon for a file based on the file's name, if the entry is a
  1092. /// directory, or by the lowercase file extension.
  1093. pub fn icon_for_file(file: &File<'_>) -> char {
  1094. if file.points_to_directory() {
  1095. *DIRECTORY_ICONS.get(file.name.as_str()).unwrap_or_else(|| {
  1096. if file.is_empty_dir() {
  1097. &Icons::FOLDER_OPEN // 
  1098. } else {
  1099. &Icons::FOLDER // 
  1100. }
  1101. })
  1102. } else if let Some(icon) = FILENAME_ICONS.get(file.name.as_str()) {
  1103. *icon
  1104. } else if let Some(ext) = file.ext.as_ref() {
  1105. *EXTENSION_ICONS.get(ext.as_str()).unwrap_or(&Icons::FILE) // 
  1106. } else {
  1107. Icons::FILE_OUTLINE // 
  1108. }
  1109. }