eza/output/
icons.rs

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