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}