Kaynağa Gözat

refactor: Add constants for most of the commonly used icons

Robert Minsk 2 yıl önce
ebeveyn
işleme
6abd706f4d
1 değiştirilmiş dosya ile 459 ekleme ve 395 silme
  1. 459 395
      src/output/icons.rs

+ 459 - 395
src/output/icons.rs

@@ -3,409 +3,473 @@ use phf::{phf_map, Map};
 
 use crate::fs::File;
 
+#[non_exhaustive]
+struct Icons;
+
+impl Icons {
+    const AUDIO: char           = '\u{f001}';  // 
+    const CALENDAR: char        = '\u{eab0}';  // 
+    const COMPRESSED: char      = '\u{f410}';  // 
+    const CONFIG: char          = '\u{e615}';  // 
+    const CONFIG_FOLDER: char   = '\u{e5fc}';  // 
+    const DATABASE: char        = '\u{f1c0}';  // 
+    const DISK_IMAGE: char      = '\u{e271}';  // 
+    const DOCKER: char          = '\u{f308}';  // 
+    const DOCUMENT: char        = '\u{f1c2}';  // 
+    const EMACS: char           = '\u{e632}';  // 
+    const FONT: char            = '\u{f031}';  // 
+    const GIT: char             = '\u{f1d3}';  // 
+    const GRADLE: char          = '\u{e660}';  // 
+    const GRUNT: char           = '\u{e611}';  // 
+    const GULP: char            = '\u{e610}';  // 
+    const HTML5: char           = '\u{f13b}';  // 
+    const IMAGE: char           = '\u{f1c5}';  // 
+    const JSON: char            = '\u{e60b}';  // 
+    const LANG_C: char          = '\u{e61e}';  // 
+    const LANG_CPP: char        = '\u{e61d}';  // 
+    const LANG_CSHARP: char     = '\u{f031b}'; // 󰌛
+    const LANG_ELIXIR: char     = '\u{e62d}';  // 
+    const LANG_FSHARP: char     = '\u{e7a7}';  // 
+    const LANG_GO: char         = '\u{e724}';  // 
+    const LANG_JAVA: char       = '\u{e256}';  // 
+    const LANG_JAVASCRIPT: char = '\u{e74e}';  // 
+    const LANG_OCAML: char      = '\u{e67a}';  // 
+    const LANG_PERL: char       = '\u{e769}';  // 
+    const LANG_PHP: char        = '\u{e73d}';  // 
+    const LANG_PYTHON: char     = '\u{e606}';  // 
+    const LANG_R: char          = '\u{f25d}';  // 
+    const LANG_RUBY: char       = '\u{e21e}';  // 
+    const LANG_RUBYRAILS: char  = '\u{e73b}';  // 
+    const LANG_RUST: char       = '\u{e7a8}';  // 
+    const LANG_TEX: char        = '\u{e69b}';  // 
+    const LANG_TYPESCRIPT: char = '\u{e628}';  // 
+    const LOCK: char            = '\u{f023}';  // 
+    const LICENSE: char         = '\u{f02d}';  // 
+    const MAKE: char            = '\u{e673}';  // 
+    const MARKDOWN: char        = '\u{f48a}';  // 
+    const NPM: char             = '\u{e71e}';  // 
+    const NPM_FOLDER: char      = '\u{e5fa}';  // 
+    const OS_APPLE: char        = '\u{f179}';  // 
+    const OS_ANDROID: char      = '\u{e70e}';  // 
+    const OS_LINUX: char        = '\u{f17c}';  // 
+    const OS_WINDOWS: char      = '\u{f17a}';  // 
+    const OS_WINDOWS_CMD: char  = '\u{ebc4}';  // 
+    const PLAYLIST: char        = '\u{f0cb9}'; // 󰲹
+    const POWERSHELL: char      = '\u{ebc7}';  // 
+    const PRIVATE_KEY: char     = '\u{f0306}'; // 󰌆
+    const PUBLIC_KEY: char      = '\u{f0dd6}'; // 󰷖
+    const SHEET: char           = '\u{f1c3}';  // 
+    const SHELL: char           = '\u{f489}';  // 
+    const SLIDE: char           = '\u{f1c4}';  // 
+    const TERRAFORM: char       = '\u{f1062}'; // 󱁢
+    const VIDEO: char           = '\u{f03d}';  // 
+    const VIM: char             = '\u{e7c5}';  // 
+}
+
 /// Mapping from full filenames to file type. This mapping should also contain all the "dot"
 /// files/directories that have a custom icon.
 const FILENAME_ICONS: Map<&'static str, char> = phf_map! {
-    ".atom"               => '\u{e764}', // 
-    ".bashprofile"        => '\u{e615}', // 
-    ".bashrc"             => '\u{f489}', // 
-    ".emacs"              => '\u{e632}', // 
-    ".git"                => '\u{f1d3}', // 
-    ".gitattributes"      => '\u{f1d3}', // 
-    ".gitconfig"          => '\u{f1d3}', // 
-    ".github"             => '\u{f408}', // 
-    ".gitignore"          => '\u{f1d3}', // 
-    ".gitignore_global"   => '\u{f1d3}', // 
-    ".gitmodules"         => '\u{f1d3}', // 
-    ".idea"               => '\u{e7b5}', // 
-    ".rvm"                => '\u{e21e}', // 
-    ".Trash"              => '\u{f1f8}', // 
-    ".vimrc"              => '\u{e7c5}', // 
-    ".vscode"             => '\u{e70c}', // 
-    ".zshrc"              => '\u{f489}', // 
-    "bin"                 => '\u{e5fc}', // 
-    "Cargo.lock"          => '\u{e7a8}', // 
-    "config"              => '\u{e5fc}', // 
-    "docker-compose.yml"  => '\u{f308}', // 
-    "Dockerfile"          => '\u{f308}', // 
-    "ds_store"            => '\u{f179}', // 
-    "Earthfile"           => '\u{f0ac}', // 
-    "gitignore_global"    => '\u{f1d3}', // 
-    "gitlab-ci.yml"       => '\u{f296}', // 
-    "go.mod"              => '\u{e626}', // 
-    "go.sum"              => '\u{e626}', // 
-    "gradle"              => '\u{e256}', // 
-    "gruntfile.coffee"    => '\u{e611}', // 
-    "gruntfile.js"        => '\u{e611}', // 
-    "gruntfile.ls"        => '\u{e611}', // 
-    "gulpfile.coffee"     => '\u{e610}', // 
-    "gulpfile.js"         => '\u{e610}', // 
-    "gulpfile.ls"         => '\u{e610}', // 
-    "hidden"              => '\u{f023}', // 
-    "include"             => '\u{e5fc}', // 
-    "lib"                 => '\u{f121}', // 
-    "LICENSE"             => '\u{f02d}', // 
-    "localized"           => '\u{f179}', // 
-    "Makefile"            => '\u{f489}', // 
-    "node_modules"        => '\u{e718}', // 
-    "npmignore"           => '\u{e71e}', // 
-    "PKGBUILD"            => '\u{f303}', // 
-    "rubydoc"             => '\u{e73b}', // 
-    "Vagrantfile"         => '\u{2371}', // ⍱
-    "yarn.lock"           => '\u{e718}', // 
+    ".atom"               => '\u{e764}',            // 
+    ".bashprofile"        => Icons::CONFIG,         // 
+    ".bashrc"             => Icons::SHELL,          // 
+    ".emacs"              => Icons::EMACS,          // 
+    ".git"                => Icons::GIT,            // 
+    ".gitattributes"      => Icons::GIT,            // 
+    ".gitconfig"          => Icons::GIT,            // 
+    ".github"             => '\u{f408}',            // 
+    ".gitignore"          => Icons::GIT,            // 
+    ".gitignore_global"   => Icons::GIT,            // 
+    ".gitmodules"         => Icons::GIT,            // 
+    ".idea"               => '\u{e7b5}',            // 
+    ".rvm"                => Icons::LANG_RUBY,      // 
+    ".Trash"              => '\u{f1f8}',            // 
+    ".vimrc"              => Icons::VIM,            // 
+    ".vscode"             => '\u{e70c}',            // 
+    ".zshrc"              => Icons::SHELL,          // 
+    "bin"                 => Icons::CONFIG_FOLDER,  // 
+    "Cargo.lock"          => Icons::LANG_RUST,      // 
+    "config"              => Icons::CONFIG_FOLDER,  // 
+    "docker-compose.yml"  => Icons::DOCKER,         // 
+    "Dockerfile"          => Icons::DOCKER,         // 
+    "ds_store"            => Icons::OS_APPLE,       // 
+    "Earthfile"           => '\u{f0ac}',            // 
+    "gitignore_global"    => Icons::GIT,            // 
+    "gitlab-ci.yml"       => '\u{f296}',            // 
+    "go.mod"              => Icons::LANG_GO,        // 
+    "go.sum"              => Icons::LANG_GO,        // 
+    "gradle"              => Icons::GRADLE,         // 
+    "gruntfile.coffee"    => Icons::GRUNT,          // 
+    "gruntfile.js"        => Icons::GRUNT,          // 
+    "gruntfile.ls"        => Icons::GRUNT,          // 
+    "gulpfile.coffee"     => Icons::GULP,           // 
+    "gulpfile.js"         => Icons::GULP,           // 
+    "gulpfile.ls"         => Icons::GULP,           // 
+    "hidden"              => Icons::LOCK,           // 
+    "include"             => Icons::CONFIG_FOLDER,  // 
+    "lib"                 => '\u{f121}',            // 
+    "LICENSE"             => Icons::LICENSE,        // 
+    "localized"           => Icons::OS_APPLE,       // 
+    "Makefile"            => Icons::SHELL,          // 
+    "node_modules"        => '\u{e718}',            // 
+    "npmignore"           => Icons::NPM,            // 
+    "PKGBUILD"            => '\u{f303}',            // 
+    "rubydoc"             => Icons::LANG_RUBYRAILS, // 
+    "Vagrantfile"         => '\u{2371}',            // ⍱
+    "yarn.lock"           => '\u{e718}',            // 
 };
 
 /// Mapping from lowercase file extension to icons.  If an image, video, or audio extension is add
 /// also update the extension filetype map.
 const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
-    "7z"             => '\u{f410}',  // 
-    "a"              => '\u{f17c}',  // 
-    "acc"            => '\u{f001}',  // 
-    "acf"            => '\u{f1b6}',  // 
-    "ai"             => '\u{e7b4}',  // 
-    "alac"           => '\u{f001}',  // 
-    "android"        => '\u{e70e}',  // 
-    "ape"            => '\u{f001}',  // 
-    "apk"            => '\u{e70e}',  // 
-    "apple"          => '\u{f179}',  // 
-    "ar"             => '\u{f410}',  // 
-    "arw"            => '\u{f1c5}',  // 
-    "asm"            => '\u{e637}',  // 
-    "avi"            => '\u{f03d}',  // 
-    "avif"           => '\u{f1c5}',  // 
-    "avro"           => '\u{e60b}',  // 
-    "awk"            => '\u{f489}',  // 
-    "bash"           => '\u{f489}',  // 
-    "bashrc"         => '\u{f489}',  // 
-    "bash_history"   => '\u{f489}',  // 
-    "bash_profile"   => '\u{f489}',  // 
-    "bat"            => '\u{ebc4}',  // 
-    "bats"           => '\u{f489}',  // 
-    "bib"            => '\u{e69b}',  // 
-    "bin"            => '\u{eae8}',  // 
-    "bmp"            => '\u{f1c5}',  // 
-    "bst"            => '\u{e69b}',  // 
-    "bz"             => '\u{f410}',  // 
-    "bz2"            => '\u{f410}',  // 
-    "c"              => '\u{e61e}',  // 
-    "c++"            => '\u{e61d}',  // 
-    "cab"            => '\u{e70f}',  // 
-    "cbr"            => '\u{f1c5}',  // 
-    "cbz"            => '\u{f1c5}',  // 
-    "cc"             => '\u{e61d}',  // 
-    "cert"           => '\u{eafa}',  // 
-    "cfg"            => '\u{e615}',  // 
-    "cjs"            => '\u{e74e}',  // 
-    "class"          => '\u{e256}',  // 
-    "clj"            => '\u{e768}',  // 
-    "cljs"           => '\u{e76a}',  // 
-    "cls"            => '\u{e69b}',  // 
-    "cmd"            => '\u{e70f}',  // 
-    "coffee"         => '\u{f0f4}',  // 
-    "conf"           => '\u{e615}',  // 
-    "config"         => '\u{e615}',  // 
-    "cp"             => '\u{e61d}',  // 
-    "cpio"           => '\u{f410}',  // 
-    "cpp"            => '\u{e61d}',  // 
-    "cr2"            => '\u{f1c5}',  // 
-    "crt"            => '\u{eafa}',  // 
-    "cs"             => '\u{f031b}', // 󰌛
-    "csh"            => '\u{f489}',  // 
-    "cshtml"         => '\u{f1fa}',  // 
-    "csproj"         => '\u{f031b}', // 󰌛
-    "css"            => '\u{e749}',  // 
-    "csv"            => '\u{f1c3}',  // 
-    "csx"            => '\u{f031b}', // 󰌛
-    "cts"            => '\u{e628}',  // 
-    "cu"             => '\u{e64b}',  // 
-    "cxx"            => '\u{e61d}',  // 
-    "d"              => '\u{e7af}',  // 
-    "dart"           => '\u{e798}',  // 
-    "db"             => '\u{f1c0}',  // 
-    "deb"            => '\u{e77d}',  // 
-    "desktop"        => '\u{ebd1}',  // 
-    "diff"           => '\u{f440}',  // 
-    "djvu"           => '\u{f02d}',  // 
-    "dll"            => '\u{e70f}',  // 
-    "dmg"            => '\u{e271}',  // 
-    "doc"            => '\u{f1c2}',  // 
-    "docx"           => '\u{f1c2}',  // 
-    "drawio"         => '\u{ebba}',  // 
-    "ds_store"       => '\u{f179}',  // 
-    "dump"           => '\u{f1c0}',  // 
-    "dvi"            => '\u{f1c5}',  // 
-    "ebook"          => '\u{e28b}',  // 
-    "ebuild"         => '\u{f30d}',  // 
-    "editorconfig"   => '\u{e615}',  // 
-    "ejs"            => '\u{e618}',  // 
-    "el"             => '\u{e632}',  // 
-    "elm"            => '\u{e62c}',  // 
-    "eml"            => '\u{f003}',  // 
-    "env"            => '\u{f462}',  // 
-    "eot"            => '\u{f031}',  // 
-    "eps"            => '\u{f1c5}',  // 
-    "epub"           => '\u{e28a}',  // 
-    "erb"            => '\u{e73b}',  // 
-    "erl"            => '\u{e7b1}',  // 
-    "ex"             => '\u{e62d}',  // 
-    "exe"            => '\u{f17a}',  // 
-    "exs"            => '\u{e62d}',  // 
-    "fish"           => '\u{f489}',  // 
-    "flac"           => '\u{f001}',  // 
-    "flv"            => '\u{f03d}',  // 
-    "font"           => '\u{f031}',  // 
-    "fs"             => '\u{e7a7}',  // 
-    "fsi"            => '\u{e7a7}',  // 
-    "fsx"            => '\u{e7a7}',  // 
-    "gdoc"           => '\u{f1c2}',  // 
-    "gem"            => '\u{e21e}',  // 
-    "gemfile"        => '\u{e21e}',  // 
-    "gemspec"        => '\u{e21e}',  // 
-    "gform"          => '\u{f298}',  // 
-    "gif"            => '\u{f1c5}',  // 
-    "git"            => '\u{f1d3}',  // 
-    "gitattributes"  => '\u{f1d3}',  // 
-    "gitignore"      => '\u{f1d3}',  // 
-    "gitmodules"     => '\u{f1d3}',  // 
-    "go"             => '\u{e626}',  // 
-    "gpg"            => '\u{e60a}',  // 
-    "gradle"         => '\u{e256}',  // 
-    "groovy"         => '\u{e775}',  // 
-    "gsheet"         => '\u{f1c3}',  // 
-    "gslides"        => '\u{f1c4}',  // 
-    "guardfile"      => '\u{e21e}',  // 
-    "gz"             => '\u{f410}',  // 
-    "h"              => '\u{f0fd}',  // 
-    "hbs"            => '\u{e60f}',  // 
-    "heic"           => '\u{f03d}',  // 
-    "heif"           => '\u{f1c5}',  // 
-    "hpp"            => '\u{f0fd}',  // 
-    "hs"             => '\u{e777}',  // 
-    "htm"            => '\u{f13b}',  // 
-    "html"           => '\u{f13b}',  // 
-    "hxx"            => '\u{f0fd}',  // 
-    "ical"           => '\u{eab0}',  // 
-    "icalendar"      => '\u{eab0}',  // 
-    "ico"            => '\u{f1c5}',  // 
-    "ics"            => '\u{eab0}',  // 
-    "ifb"            => '\u{eab0}',  // 
-    "image"          => '\u{f1c5}',  // 
-    "img"            => '\u{e271}',  // 
-    "iml"            => '\u{e7b5}',  // 
-    "ini"            => '\u{f17a}',  // 
-    "ipynb"          => '\u{e678}',  // 
-    "iso"            => '\u{e271}',  // 
-    "j2c"            => '\u{f1c5}',  // 
-    "j2k"            => '\u{f1c5}',  // 
-    "jad"            => '\u{e256}',  // 
-    "jar"            => '\u{e256}',  // 
-    "java"           => '\u{e256}',  // 
-    "jfi"            => '\u{f1c5}',  // 
-    "jfif"           => '\u{f1c5}',  // 
-    "jif"            => '\u{f1c5}',  // 
-    "jl"             => '\u{e624}',  // 
-    "jmd"            => '\u{f48a}',  // 
-    "jp2"            => '\u{f1c5}',  // 
-    "jpe"            => '\u{f1c5}',  // 
-    "jpeg"           => '\u{f1c5}',  // 
-    "jpf"            => '\u{f1c5}',  // 
-    "jpg"            => '\u{f1c5}',  // 
-    "jpx"            => '\u{f1c5}',  // 
-    "js"             => '\u{e74e}',  // 
-    "json"           => '\u{e60b}',  // 
-    "jsx"            => '\u{e7ba}',  // 
-    "jxl"            => '\u{f1c5}',  // 
-    "kdb"            => '\u{f23e}',  // 
-    "kdbx"           => '\u{f23e}',  // 
-    "key"            => '\u{eb11}',  // 
-    "ko"             => '\u{f17c}',  // 
-    "ksh"            => '\u{f489}',  // 
-    "latex"          => '\u{e69b}',  // 
-    "less"           => '\u{e758}',  // 
-    "lhs"            => '\u{e777}',  // 
-    "license"        => '\u{f02d}',  // 
-    "localized"      => '\u{f179}',  // 
-    "lock"           => '\u{f023}',  // 
-    "log"            => '\u{f18d}',  // 
-    "lua"            => '\u{e620}',  // 
-    "lz"             => '\u{f410}',  // 
-    "lz4"            => '\u{f410}',  // 
-    "lzh"            => '\u{f410}',  // 
-    "lzma"           => '\u{f410}',  // 
-    "lzo"            => '\u{f410}',  // 
-    "m"              => '\u{e61e}',  // 
-    "m2ts"           => '\u{f03d}',  // 
-    "m2v"            => '\u{f03d}',  // 
-    "m4a"            => '\u{f001}',  // 
-    "m4v"            => '\u{f03d}',  // 
-    "magnet"         => '\u{f076}',  // 
-    "markdown"       => '\u{f48a}',  // 
-    "md"             => '\u{f48a}',  // 
-    "mjs"            => '\u{e74e}',  // 
-    "mk"             => '\u{f489}',  // 
-    "mka"            => '\u{f001}',  // 
-    "mkd"            => '\u{f48a}',  // 
-    "mkv"            => '\u{f03d}',  // 
-    "ml"             => '\u{e67a}',  // 
-    "mli"            => '\u{e67a}',  // 
-    "mll"            => '\u{e67a}',  // 
-    "mly"            => '\u{e67a}',  // 
-    "mm"             => '\u{e61d}',  // 
-    "mobi"           => '\u{e28b}',  // 
-    "mov"            => '\u{f03d}',  // 
-    "mp2"            => '\u{f001}',  // 
-    "mp3"            => '\u{f001}',  // 
-    "mp4"            => '\u{f03d}',  // 
-    "mpeg"           => '\u{f03d}',  // 
-    "mpg"            => '\u{f03d}',  // 
-    "msi"            => '\u{e70f}',  // 
-    "mts"            => '\u{e628}',  // 
-    "mustache"       => '\u{e60f}',  // 
-    "nef"            => '\u{f1c5}',  // 
-    "ninja"          => '\u{f0774}', // 󰝴
-    "nix"            => '\u{f313}',  // 
-    "node"           => '\u{f0399}', // 󰎙
-    "npmignore"      => '\u{e71e}',  // 
-    "o"              => '\u{eae8}',  // 
-    "odp"            => '\u{f1c4}',  // 
-    "ods"            => '\u{f1c3}',  // 
-    "odt"            => '\u{f1c2}',  // 
-    "ogg"            => '\u{f001}',  // 
-    "ogm"            => '\u{f03d}',  // 
-    "ogv"            => '\u{f03d}',  // 
-    "opus"           => '\u{f001}',  // 
-    "orf"            => '\u{f1c5}',  // 
-    "org"            => '\u{e633}',  // 
-    "otf"            => '\u{f031}',  // 
-    "out"            => '\u{eb2c}',  // 
-    "par"            => '\u{f410}',  // 
-    "part"           => '\u{f43a}',  // 
-    "patch"          => '\u{f440}',  // 
-    "pbm"            => '\u{f1c5}',  // 
-    "pdf"            => '\u{f1c1}',  // 
-    "pem"            => '\u{eb11}',  // 
-    "pgm"            => '\u{f1c5}',  // 
-    "php"            => '\u{e73d}',  // 
-    "pl"             => '\u{e769}',  // 
-    "plx"            => '\u{e769}',  // 
-    "pm"             => '\u{e769}',  // 
-    "png"            => '\u{f1c5}',  // 
-    "pnm"            => '\u{f1c5}',  // 
-    "pod"            => '\u{e769}',  // 
-    "ppm"            => '\u{f1c5}',  // 
-    "ppt"            => '\u{f1c4}',  // 
-    "pptx"           => '\u{f1c4}',  // 
-    "procfile"       => '\u{e21e}',  // 
-    "properties"     => '\u{e60b}',  // 
-    "ps"             => '\u{f1c5}',  // 
-    "ps1"            => '\u{ebc7}',  // 
-    "psd"            => '\u{e7b8}',  // 
-    "psd1"           => '\u{ebc7}',  // 
-    "psm1"           => '\u{ebc7}',  // 
-    "pxm"            => '\u{f1c5}',  // 
-    "py"             => '\u{e606}',  // 
-    "pyc"            => '\u{e606}',  // 
-    "qcow2"          => '\u{e271}',  // 
-    "r"              => '\u{f25d}',  // 
-    "rakefile"       => '\u{e21e}',  // 
-    "rar"            => '\u{f410}',  // 
-    "raw"            => '\u{f1c5}',  // 
-    "razor"          => '\u{f1fa}',  // 
-    "rb"             => '\u{e21e}',  // 
-    "rdata"          => '\u{f25d}',  // 
-    "rdb"            => '\u{e76d}',  // 
-    "rdoc"           => '\u{f48a}',  // 
-    "rds"            => '\u{f25d}',  // 
-    "readme"         => '\u{f48a}',  // 
-    "rlib"           => '\u{e7a8}',  // 
-    "rmd"            => '\u{f48a}',  // 
-    "rmeta"          => '\u{e7a8}',  // 
-    "rpm"            => '\u{e7bb}',  // 
-    "rs"             => '\u{e7a8}',  // 
-    "rspec"          => '\u{e21e}',  // 
-    "rspec_parallel" => '\u{e21e}',  // 
-    "rspec_status"   => '\u{e21e}',  // 
-    "rss"            => '\u{f09e}',  // 
-    "rst"            => '\u{f15c}',  // 
-    "rtf"            => '\u{f0219}', // 󰈙
-    "ru"             => '\u{e21e}',  // 
-    "rubydoc"        => '\u{e73b}',  // 
-    "s"              => '\u{e637}',  // 
-    "sass"           => '\u{e603}',  // 
-    "scala"          => '\u{e737}',  // 
-    "scss"           => '\u{e749}',  // 
-    "service"        => '\u{eba2}',  // 
-    "sh"             => '\u{f489}',  // 
-    "shell"          => '\u{f489}',  // 
-    "slim"           => '\u{e73b}',  // 
-    "sln"            => '\u{e70c}',  // 
-    "so"             => '\u{f17c}',  // 
-    "sql"            => '\u{f1c0}',  // 
-    "sqlite3"        => '\u{e7c4}',  // 
-    "stl"            => '\u{f1c5}',  // 
-    "sty"            => '\u{e69b}',  // 
-    "styl"           => '\u{e600}',  // 
-    "stylus"         => '\u{e600}',  // 
-    "svelte"         => '\u{e697}',  // 
-    "svg"            => '\u{f1c5}',  // 
-    "swift"          => '\u{e755}',  // 
-    "t"              => '\u{e769}',  // 
-    "tar"            => '\u{f410}',  // 
-    "taz"            => '\u{f410}',  // 
-    "tbz"            => '\u{f410}',  // 
-    "tbz2"           => '\u{f410}',  // 
-    "tc"             => '\u{f410}',  // 
-    "tex"            => '\u{e69b}',  // 
-    "tgz"            => '\u{f410}',  // 
-    "tif"            => '\u{f1c5}',  // 
-    "tiff"           => '\u{f1c5}',  // 
-    "tlz"            => '\u{f410}',  // 
-    "toml"           => '\u{e615}',  // 
-    "torrent"        => '\u{e275}',  // 
-    "ts"             => '\u{e628}',  // 
-    "tsv"            => '\u{f1c3}',  // 
-    "tsx"            => '\u{e7ba}',  // 
-    "ttf"            => '\u{f031}',  // 
-    "twig"           => '\u{e61c}',  // 
-    "txt"            => '\u{f15c}',  // 
-    "txz"            => '\u{f410}',  // 
-    "tz"             => '\u{f410}',  // 
-    "tzo"            => '\u{f410}',  // 
-    "unity"          => '\u{e721}',  // 
-    "unity3d"        => '\u{e721}',  // 
-    "vdi"            => '\u{e271}',  // 
-    "vhd"            => '\u{e271}',  // 
-    "video"          => '\u{f03d}',  // 
-    "vim"            => '\u{e7c5}',  // 
-    "vmdk"           => '\u{e271}',  // 
-    "vob"            => '\u{f03d}',  // 
-    "vue"            => '\u{f0844}', // 󰡄
-    "war"            => '\u{e256}',  // 
-    "wav"            => '\u{f001}',  // 
-    "webm"           => '\u{f03d}',  // 
-    "webp"           => '\u{f1c5}',  // 
-    "windows"        => '\u{f17a}',  // 
-    "wma"            => '\u{f001}',  // 
-    "wmv"            => '\u{f03d}',  // 
-    "woff"           => '\u{f031}',  // 
-    "woff2"          => '\u{f031}',  // 
-    "xhtml"          => '\u{f13b}',  // 
-    "xls"            => '\u{f1c3}',  // 
-    "xlsm"           => '\u{f1c3}',  // 
-    "xlsx"           => '\u{f1c3}',  // 
-    "xml"            => '\u{f05c0}', // 󰗀
-    "xpm"            => '\u{f1c5}',  // 
-    "xul"            => '\u{f05c0}', // 󰗀
-    "xz"             => '\u{f410}',  // 
-    "yaml"           => '\u{f481}',  // 
-    "yml"            => '\u{f481}',  // 
-    "z"              => '\u{f410}',  // 
-    "zig"            => '\u{21af}',  // ↯
-    "zip"            => '\u{f410}',  // 
-    "zsh"            => '\u{f489}',  // 
-    "zsh-theme"      => '\u{f489}',  // 
-    "zshrc"          => '\u{f489}',  // 
-    "zst"            => '\u{f410}',  // 
+    "7z"             => Icons::COMPRESSED,       // 
+    "a"              => Icons::OS_LINUX,         // 
+    "acc"            => Icons::AUDIO,            // 
+    "acf"            => '\u{f1b6}',              // 
+    "ai"             => '\u{e7b4}',              // 
+    "alac"           => Icons::AUDIO,            // 
+    "android"        => Icons::OS_ANDROID,       // 
+    "ape"            => Icons::AUDIO,            // 
+    "apk"            => Icons::OS_ANDROID,       // 
+    "apple"          => Icons::OS_APPLE,         // 
+    "ar"             => Icons::COMPRESSED,       // 
+    "arw"            => Icons::IMAGE,            // 
+    "asm"            => '\u{e637}',              // 
+    "avi"            => Icons::VIDEO,            // 
+    "avif"           => Icons::IMAGE,            // 
+    "avro"           => Icons::JSON,             // 
+    "awk"            => Icons::SHELL,            // 
+    "bash"           => Icons::SHELL,            // 
+    "bashrc"         => Icons::SHELL,            // 
+    "bash_history"   => Icons::SHELL,            // 
+    "bash_profile"   => Icons::SHELL,            // 
+    "bat"            => Icons::OS_WINDOWS_CMD,   // 
+    "bats"           => Icons::SHELL,            // 
+    "bib"            => Icons::LANG_TEX,         // 
+    "bin"            => '\u{eae8}',              // 
+    "bmp"            => Icons::IMAGE,            // 
+    "bst"            => Icons::LANG_TEX,         // 
+    "bz"             => Icons::COMPRESSED,       // 
+    "bz2"            => Icons::COMPRESSED,       // 
+    "c"              => Icons::LANG_C,           // 
+    "c++"            => Icons::LANG_CPP,         // 
+    "cab"            => Icons::OS_WINDOWS,       // 
+    "cbr"            => Icons::IMAGE,            // 
+    "cbz"            => Icons::IMAGE,            // 
+    "cc"             => Icons::LANG_CPP,         // 
+    "cert"           => '\u{eafa}',              // 
+    "cfg"            => Icons::CONFIG,           // 
+    "cjs"            => Icons::LANG_JAVASCRIPT,  // 
+    "class"          => Icons::LANG_JAVA,        // 
+    "clj"            => '\u{e768}',              // 
+    "cljs"           => '\u{e76a}',              // 
+    "cls"            => Icons::LANG_TEX,         // 
+    "cmd"            => Icons::OS_WINDOWS,       // 
+    "coffee"         => '\u{f0f4}',              // 
+    "conf"           => Icons::CONFIG,           // 
+    "config"         => Icons::CONFIG,           // 
+    "cp"             => Icons::LANG_CPP,         // 
+    "cpio"           => Icons::COMPRESSED,       // 
+    "cpp"            => Icons::LANG_CPP,         // 
+    "cr2"            => Icons::IMAGE,            // 
+    "crt"            => '\u{eafa}',              // 
+    "cs"             => Icons::LANG_CSHARP,      // 󰌛
+    "csh"            => Icons::SHELL,            // 
+    "cshtml"         => '\u{f1fa}',              // 
+    "csproj"         => Icons::LANG_CSHARP,      // 󰌛
+    "css"            => '\u{e749}',              // 
+    "csv"            => Icons::SHEET,            // 
+    "csx"            => Icons::LANG_CSHARP,      // 󰌛
+    "cts"            => Icons::LANG_TYPESCRIPT,  // 
+    "cu"             => '\u{e64b}',              // 
+    "cxx"            => Icons::LANG_CPP,         // 
+    "d"              => '\u{e7af}',              // 
+    "dart"           => '\u{e798}',              // 
+    "db"             => Icons::DATABASE,         // 
+    "deb"            => '\u{e77d}',              // 
+    "desktop"        => '\u{ebd1}',              // 
+    "diff"           => '\u{f440}',              // 
+    "djv"            => Icons::DOCUMENT,         // 
+    "djvu"           => Icons::DOCUMENT,         // 
+    "dll"            => Icons::OS_WINDOWS,       // 
+    "dmg"            => Icons::DISK_IMAGE,       // 
+    "doc"            => Icons::DOCUMENT,         // 
+    "docx"           => Icons::DOCUMENT,         // 
+    "drawio"         => '\u{ebba}',              // 
+    "ds_store"       => Icons::OS_APPLE,         // 
+    "dump"           => Icons::DATABASE,         // 
+    "dvi"            => Icons::IMAGE,            // 
+    "ebook"          => '\u{e28b}',              // 
+    "ebuild"         => '\u{f30d}',              // 
+    "editorconfig"   => Icons::CONFIG,           // 
+    "ejs"            => '\u{e618}',              // 
+    "el"             => Icons::EMACS,            // 
+    "elm"            => '\u{e62c}',              // 
+    "eml"            => '\u{f003}',              // 
+    "env"            => '\u{f462}',              // 
+    "eot"            => Icons::FONT,             // 
+    "eps"            => Icons::IMAGE,            // 
+    "epub"           => '\u{e28a}',              // 
+    "erb"            => Icons::LANG_RUBYRAILS,   // 
+    "erl"            => '\u{e7b1}',              // 
+    "ex"             => Icons::LANG_ELIXIR,      // 
+    "exe"            => Icons::OS_WINDOWS,       // 
+    "exs"            => Icons::LANG_ELIXIR,      // 
+    "fish"           => Icons::SHELL,            // 
+    "flac"           => Icons::AUDIO,            // 
+    "flv"            => Icons::VIDEO,            // 
+    "font"           => Icons::FONT,             // 
+    "fs"             => Icons::LANG_FSHARP,      // 
+    "fsi"            => Icons::LANG_FSHARP,      // 
+    "fsx"            => Icons::LANG_FSHARP,      // 
+    "gdoc"           => Icons::DOCUMENT,         // 
+    "gem"            => Icons::LANG_RUBY,        // 
+    "gemfile"        => Icons::LANG_RUBY,        // 
+    "gemspec"        => Icons::LANG_RUBY,        // 
+    "gform"          => '\u{f298}',              // 
+    "gif"            => Icons::IMAGE,            // 
+    "git"            => Icons::GIT,              // 
+    "gitattributes"  => Icons::GIT,              // 
+    "gitignore"      => Icons::GIT,              // 
+    "gitmodules"     => Icons::GIT,              // 
+    "go"             => Icons::LANG_GO,          // 
+    "gpg"            => '\u{e60a}',              // 
+    "gradle"         => Icons::GRADLE,           // 
+    "groovy"         => '\u{e775}',              // 
+    "gsheet"         => Icons::SHEET,            // 
+    "gslides"        => Icons::SLIDE,            // 
+    "guardfile"      => Icons::LANG_RUBY,        // 
+    "gz"             => Icons::COMPRESSED,       // 
+    "h"              => '\u{f0fd}',              // 
+    "hbs"            => '\u{e60f}',              // 
+    "heic"           => Icons::VIDEO,            // 
+    "heif"           => Icons::IMAGE,            // 
+    "hpp"            => '\u{f0fd}',              // 
+    "hs"             => '\u{e777}',              // 
+    "htm"            => Icons::HTML5,            // 
+    "html"           => Icons::HTML5,            // 
+    "hxx"            => '\u{f0fd}',              // 
+    "ical"           => Icons::CALENDAR,         // 
+    "icalendar"      => Icons::CALENDAR,         // 
+    "ico"            => Icons::IMAGE,            // 
+    "ics"            => Icons::CALENDAR,         // 
+    "ifb"            => Icons::CALENDAR,         // 
+    "image"          => Icons::IMAGE,            // 
+    "img"            => Icons::DISK_IMAGE,       // 
+    "iml"            => '\u{e7b5}',              // 
+    "ini"            => Icons::OS_WINDOWS,       // 
+    "ipynb"          => '\u{e678}',              // 
+    "iso"            => Icons::DISK_IMAGE,       // 
+    "j2c"            => Icons::IMAGE,            // 
+    "j2k"            => Icons::IMAGE,            // 
+    "jad"            => Icons::LANG_JAVA,        // 
+    "jar"            => Icons::LANG_JAVA,        // 
+    "java"           => Icons::LANG_JAVA,        // 
+    "jfi"            => Icons::IMAGE,            // 
+    "jfif"           => Icons::IMAGE,            // 
+    "jif"            => Icons::IMAGE,            // 
+    "jl"             => '\u{e624}',              // 
+    "jmd"            => Icons::MARKDOWN,         // 
+    "jp2"            => Icons::IMAGE,            // 
+    "jpe"            => Icons::IMAGE,            // 
+    "jpeg"           => Icons::IMAGE,            // 
+    "jpf"            => Icons::IMAGE,            // 
+    "jpg"            => Icons::IMAGE,            // 
+    "jpx"            => Icons::IMAGE,            // 
+    "js"             => Icons::LANG_JAVASCRIPT,  // 
+    "json"           => Icons::JSON,             // 
+    "jsx"            => '\u{e7ba}',              // 
+    "jxl"            => Icons::IMAGE,            // 
+    "kdb"            => '\u{f23e}',              // 
+    "kdbx"           => '\u{f23e}',              // 
+    "key"            => '\u{eb11}',              // 
+    "ko"             => Icons::OS_LINUX,         // 
+    "ksh"            => Icons::SHELL,            // 
+    "latex"          => Icons::LANG_TEX,         // 
+    "less"           => '\u{e758}',              // 
+    "lhs"            => '\u{e777}',              // 
+    "license"        => Icons::LICENSE,          // 
+    "localized"      => Icons::OS_APPLE,         // 
+    "lock"           => Icons::LOCK,             // 
+    "log"            => '\u{f18d}',              // 
+    "lua"            => '\u{e620}',              // 
+    "lz"             => Icons::COMPRESSED,       // 
+    "lz4"            => Icons::COMPRESSED,       // 
+    "lzh"            => Icons::COMPRESSED,       // 
+    "lzma"           => Icons::COMPRESSED,       // 
+    "lzo"            => Icons::COMPRESSED,       // 
+    "m"              => Icons::LANG_C,           // 
+    "m2ts"           => Icons::VIDEO,            // 
+    "m2v"            => Icons::VIDEO,            // 
+    "m4a"            => Icons::AUDIO,            // 
+    "m4v"            => Icons::VIDEO,            // 
+    "magnet"         => '\u{f076}',              // 
+    "markdown"       => Icons::MARKDOWN,         // 
+    "md"             => Icons::MARKDOWN,         // 
+    "mjs"            => Icons::LANG_JAVASCRIPT,  // 
+    "mk"             => Icons::SHELL,            // 
+    "mka"            => Icons::AUDIO,            // 
+    "mkd"            => Icons::MARKDOWN,         // 
+    "mkv"            => Icons::VIDEO,            // 
+    "ml"             => Icons::LANG_OCAML,       // 
+    "mli"            => Icons::LANG_OCAML,       // 
+    "mll"            => Icons::LANG_OCAML,       // 
+    "mly"            => Icons::LANG_OCAML,       // 
+    "mm"             => Icons::LANG_CPP,         // 
+    "mobi"           => '\u{e28b}',              // 
+    "mov"            => Icons::VIDEO,            // 
+    "mp2"            => Icons::AUDIO,            // 
+    "mp3"            => Icons::AUDIO,            // 
+    "mp4"            => Icons::VIDEO,            // 
+    "mpeg"           => Icons::VIDEO,            // 
+    "mpg"            => Icons::VIDEO,            // 
+    "msi"            => Icons::OS_WINDOWS,              // 
+    "mts"            => Icons::LANG_TYPESCRIPT,  // 
+    "mustache"       => '\u{e60f}',              // 
+    "nef"            => Icons::IMAGE,            // 
+    "ninja"          => '\u{f0774}',             // 󰝴
+    "nix"            => '\u{f313}',              // 
+    "node"           => '\u{f0399}',             // 󰎙
+    "npmignore"      => Icons::NPM,              // 
+    "o"              => '\u{eae8}',              // 
+    "odp"            => Icons::SLIDE,            // 
+    "ods"            => Icons::SHEET,            // 
+    "odt"            => Icons::DOCUMENT,         // 
+    "ogg"            => Icons::AUDIO,            // 
+    "ogm"            => Icons::VIDEO,            // 
+    "ogv"            => Icons::VIDEO,            // 
+    "opus"           => Icons::AUDIO,            // 
+    "orf"            => Icons::IMAGE,            // 
+    "org"            => '\u{e633}',              // 
+    "otf"            => Icons::FONT,             // 
+    "out"            => '\u{eb2c}',              // 
+    "par"            => Icons::COMPRESSED,       // 
+    "part"           => '\u{f43a}',              // 
+    "patch"          => '\u{f440}',              // 
+    "pbm"            => Icons::IMAGE,            // 
+    "pdf"            => '\u{f1c1}',              // 
+    "pem"            => '\u{eb11}',              // 
+    "pgm"            => Icons::IMAGE,            // 
+    "php"            => Icons::LANG_PHP,         // 
+    "pl"             => Icons::LANG_PERL,        // 
+    "plx"            => Icons::LANG_PERL,        // 
+    "pm"             => Icons::LANG_PERL,        // 
+    "png"            => Icons::IMAGE,            // 
+    "pnm"            => Icons::IMAGE,            // 
+    "pod"            => Icons::LANG_PERL,        // 
+    "ppm"            => Icons::IMAGE,            // 
+    "ppt"            => Icons::SLIDE,            // 
+    "pptx"           => Icons::SLIDE,            // 
+    "procfile"       => Icons::LANG_RUBY,        //   - Can not find a reference to procfile being Ruby
+    "properties"     => Icons::JSON,             // 
+    "ps"             => Icons::IMAGE,            // 
+    "ps1"            => Icons::POWERSHELL,       // 
+    "psd"            => '\u{e7b8}',              // 
+    "psd1"           => Icons::POWERSHELL,       // 
+    "psm1"           => Icons::POWERSHELL,       // 
+    "pxm"            => Icons::IMAGE,            // 
+    "py"             => Icons::LANG_PYTHON,      // 
+    "pyc"            => Icons::LANG_PYTHON,      // 
+    "qcow2"          => Icons::DISK_IMAGE,       // 
+    "r"              => Icons::LANG_R,           // 
+    "rakefile"       => Icons::LANG_RUBY,        // 
+    "rar"            => Icons::COMPRESSED,       // 
+    "raw"            => Icons::IMAGE,            // 
+    "razor"          => '\u{f1fa}',              // 
+    "rb"             => Icons::LANG_RUBY,        // 
+    "rdata"          => Icons::LANG_R,           // 
+    "rdb"            => '\u{e76d}',              // 
+    "rdoc"           => Icons::MARKDOWN,         // 
+    "rds"            => Icons::LANG_R,           // 
+    "readme"         => Icons::MARKDOWN,         // 
+    "rlib"           => Icons::LANG_RUST,        // 
+    "rmd"            => Icons::MARKDOWN,         // 
+    "rmeta"          => Icons::LANG_RUST,        // 
+    "rpm"            => '\u{e7bb}',              // 
+    "rs"             => Icons::LANG_RUST,        // 
+    "rspec"          => Icons::LANG_RUBY,        // 
+    "rspec_parallel" => Icons::LANG_RUBY,        // 
+    "rspec_status"   => Icons::LANG_RUBY,        // 
+    "rss"            => '\u{f09e}',              // 
+    "rst"            => '\u{f15c}',              // 
+    "rtf"            => '\u{f0219}',             // 󰈙
+    "ru"             => Icons::LANG_RUBY,        // 
+    "rubydoc"        => Icons::LANG_RUBYRAILS,   // 
+    "s"              => '\u{e637}',              // 
+    "sass"           => '\u{e603}',              // 
+    "scala"          => '\u{e737}',              // 
+    "scss"           => '\u{e749}',              // 
+    "service"        => '\u{eba2}',              // 
+    "sh"             => Icons::SHELL,            // 
+    "shell"          => Icons::SHELL,            // 
+    "slim"           => Icons::LANG_RUBYRAILS,   // 
+    "sln"            => '\u{e70c}',              // 
+    "so"             => Icons::OS_LINUX,         // 
+    "sql"            => Icons::DATABASE,         // 
+    "sqlite3"        => '\u{e7c4}',              // 
+    "stl"            => Icons::IMAGE,            // 
+    "sty"            => Icons::LANG_TEX,         // 
+    "styl"           => '\u{e600}',              // 
+    "stylus"         => '\u{e600}',              // 
+    "svelte"         => '\u{e697}',              // 
+    "svg"            => Icons::IMAGE,            // 
+    "swift"          => '\u{e755}',              // 
+    "t"              => Icons::LANG_PERL,        // 
+    "tar"            => Icons::COMPRESSED,       // 
+    "taz"            => Icons::COMPRESSED,       // 
+    "tbz"            => Icons::COMPRESSED,       // 
+    "tbz2"           => Icons::COMPRESSED,       // 
+    "tc"             => Icons::COMPRESSED,       // 
+    "tex"            => Icons::LANG_TEX,         // 
+    "tgz"            => Icons::COMPRESSED,       // 
+    "tif"            => Icons::IMAGE,            // 
+    "tiff"           => Icons::IMAGE,            // 
+    "tlz"            => Icons::COMPRESSED,       // 
+    "toml"           => Icons::CONFIG,           // 
+    "torrent"        => '\u{e275}',              // 
+    "ts"             => Icons::LANG_TYPESCRIPT,  // 
+    "tsv"            => Icons::SHEET,            // 
+    "tsx"            => '\u{e7ba}',              // 
+    "ttf"            => Icons::FONT,             // 
+    "twig"           => '\u{e61c}',              // 
+    "txt"            => '\u{f15c}',              // 
+    "txz"            => Icons::COMPRESSED,       // 
+    "tz"             => Icons::COMPRESSED,       // 
+    "tzo"            => Icons::COMPRESSED,       // 
+    "unity"          => '\u{e721}',              // 
+    "unity3d"        => '\u{e721}',              // 
+    "vdi"            => Icons::DISK_IMAGE,       // 
+    "vhd"            => Icons::DISK_IMAGE,       // 
+    "video"          => Icons::VIDEO,            // 
+    "vim"            => Icons::VIM,              // 
+    "vmdk"           => Icons::DISK_IMAGE,       // 
+    "vob"            => Icons::VIDEO,            // 
+    "vue"            => '\u{f0844}',             // 󰡄
+    "war"            => Icons::LANG_JAVA,        // 
+    "wav"            => Icons::AUDIO,            // 
+    "webm"           => Icons::VIDEO,            // 
+    "webp"           => Icons::IMAGE,            // 
+    "windows"        => Icons::OS_WINDOWS,       // 
+    "wma"            => Icons::AUDIO,            // 
+    "wmv"            => Icons::VIDEO,            // 
+    "woff"           => Icons::FONT,             // 
+    "woff2"          => Icons::FONT,             // 
+    "xhtml"          => Icons::HTML5,            // 
+    "xls"            => Icons::SHEET,            // 
+    "xlsm"           => Icons::SHEET,            // 
+    "xlsx"           => Icons::SHEET,            // 
+    "xml"            => '\u{f05c0}',             // 󰗀
+    "xpm"            => Icons::IMAGE,            // 
+    "xul"            => '\u{f05c0}',             // 󰗀
+    "xz"             => Icons::COMPRESSED,       // 
+    "yaml"           => '\u{f481}',              // 
+    "yml"            => '\u{f481}',              // 
+    "z"              => Icons::COMPRESSED,       // 
+    "zig"            => '\u{21af}',              // ↯
+    "zip"            => Icons::COMPRESSED,       // 
+    "zsh"            => Icons::SHELL,            // 
+    "zsh-theme"      => Icons::SHELL,            // 
+    "zshrc"          => Icons::SHELL,            // 
+    "zst"            => Icons::COMPRESSED,       // 
 };
 
 /// Converts the style used to paint a file name into the style that should be