Explorar o código

Merge pull request #540 from cfxegbert/cfxegbert-more-icons

Add new filetype for source code files and icons
Christina Sørensen %!s(int64=2) %!d(string=hai) anos
pai
achega
32567d0c46

+ 2 - 1
man/eza_colors-explanation.5.md

@@ -40,8 +40,9 @@ files; setting `EZA_COLORS="reset"` will highlight nothing.
 - Documents (pdf, doc, dvi) are a less faint blue.
 - Compressed files (zip, tgz, Z) are red.
 - Temporary files (tmp, swp, ~) are grey.
-- Compiled files (class, o, pyc) are faint orange. A file is also counted as compiled if it uses a common extension and is
+- Compiled files (class, o, pyc) are yellow. A file is also counted as compiled if it uses a common extension and is
 in the same directory as one of its source files: styles.css will count as compiled when next to styles.less or styles.sass, and scripts.js when next to scripts.ts or scripts.coffee.
+- Source files (cpp, js, java) are bright yellow.
 
 
 ## See also

+ 3 - 0
man/eza_colors.5.md

@@ -282,6 +282,9 @@ LIST OF CODES
 `bu`
 : a regular file that is used to build a project (ex: Makefile)
 
+`sc`
+: a regular file that is source code
+
 `Sn`
 : No security context on a file
 

+ 103 - 2
src/info/filetype.rs

@@ -23,8 +23,9 @@ pub enum FileType {
     Temp,
     Compiled,
     Build, // A “build file is something that can be run or activated somehow in order to
-           // kick off the build of a project. It’s usually only present in directories full of
-           // source code.
+    // kick off the build of a project. It’s usually only present in directories full of
+    // source code.
+    Source,
 }
 
 /// Mapping from full filenames to file type.
@@ -131,6 +132,7 @@ const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
     /* Video files */
     "avi"        => FileType::Video,
     "flv"        => FileType::Video,
+    "h264"       => FileType::Video,
     "heics"      => FileType::Video,
     "m2ts"       => FileType::Video,
     "m2v"        => FileType::Video,
@@ -156,10 +158,15 @@ const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
     "opus"       => FileType::Music,
     "wma"        => FileType::Music,
     /* Lossless music, rather than any other kind of data... */
+    "aif"        => FileType::Lossless,
+    "aifc"       => FileType::Lossless,
+    "aiff"       => FileType::Lossless,
     "alac"       => FileType::Lossless,
     "ape"        => FileType::Lossless,
     "flac"       => FileType::Lossless,
+    "pcm"        => FileType::Lossless,
     "wav"        => FileType::Lossless,
+    "wv"         => FileType::Lossless,
     /* Cryptology files */
     "asc"        => FileType::Crypto, // GnuPG ASCII armored file
     "gpg"        => FileType::Crypto, // GnuPG encrypted file
@@ -201,6 +208,7 @@ const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
     /* Compressed/archive files */
     "7z"         => FileType::Compressed,
     "ar"         => FileType::Compressed,
+    "arj"        => FileType::Compressed,
     "br"         => FileType::Compressed,
     "bz"         => FileType::Compressed,
     "bz2"        => FileType::Compressed,
@@ -240,8 +248,10 @@ const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
     "bak"        => FileType::Temp,
     "bk"         => FileType::Temp,
     "bkp"        => FileType::Temp,
+    "crdownload" => FileType::Temp,
     "download"   => FileType::Temp,
     "fdmdownload"=> FileType::Temp,
+    "part"       => FileType::Temp,
     "swn"        => FileType::Temp,
     "swo"        => FileType::Temp,
     "swp"        => FileType::Temp,
@@ -250,6 +260,10 @@ const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
     "a"          => FileType::Compiled, // Unix static library
     "bundle"     => FileType::Compiled, // Mac OS X application bundle
     "class"      => FileType::Compiled, // Java class file
+    "cma"        => FileType::Compiled, // OCaml bytecode library
+    "cmi"        => FileType::Compiled, // OCaml interface
+    "cmo"        => FileType::Compiled, // OCaml bytecode object
+    "cmx"        => FileType::Compiled, // OCaml bytecode object for inlining
     "dll"        => FileType::Compiled, // Windows dynamic link library
     "dylib"      => FileType::Compiled, // Mach-O dynamic library
     "elc"        => FileType::Compiled, // Emacs compiled lisp
@@ -262,6 +276,93 @@ const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
     "pyo"        => FileType::Compiled, // Python optimized code
     "so"         => FileType::Compiled, // Unix shared library
     "zwc"        => FileType::Compiled, // zsh compiled file
+    /* Source code */
+    "applescript"=> FileType::Source, // Apple script
+    "as"         => FileType::Source, // Action script
+    "asa"        => FileType::Source, // asp
+    "awk"        => FileType::Source, // awk
+    "c"          => FileType::Source, // C/C++
+    "c++"        => FileType::Source, // C/C++
+    "cabal"      => FileType::Source, // Cabal
+    "cc"         => FileType::Source, // C/C++
+    "clj"        => FileType::Source, // Clojure
+    "cp"         => FileType::Source, // C/C++ Xcode
+    "cpp"        => FileType::Source, // C/C++
+    "cr"         => FileType::Source, // Crystal
+    "cs"         => FileType::Source, // C#
+    "css"        => FileType::Source, // css
+    "csx"        => FileType::Source, // C#
+    "cu"         => FileType::Source, // CUDA
+    "cxx"        => FileType::Source, // C/C++
+    "d"          => FileType::Source, // D
+    "dart"       => FileType::Source, // Dart
+    "di"         => FileType::Source, // D
+    "dpr"        => FileType::Source, // Delphi Pascal
+    "el"         => FileType::Source, // Lisp
+    "elm"        => FileType::Source, // Elm
+    "erl"        => FileType::Source, // Erlang
+    "ex"         => FileType::Source, // Elixir
+    "exs"        => FileType::Source, // Elixir
+    "fs"         => FileType::Source, // F#
+    "fsh"        => FileType::Source, // Fragment shader
+    "fsi"        => FileType::Source, // F#
+    "fsx"        => FileType::Source, // F#
+    "go"         => FileType::Source, // Go
+    "gradle"     => FileType::Source, // Gradle
+    "groovy"     => FileType::Source, // Groovy
+    "gvy"        => FileType::Source, // Groovy
+    "h"          => FileType::Source, // C/C++
+    "h++"        => FileType::Source, // C/C++
+    "hpp"        => FileType::Source, // C/C++
+    "hs"         => FileType::Source, // Haskell
+    "htc"        => FileType::Source, // Javascript
+    "hxx"        => FileType::Source, // C/C++
+    "inc"        => FileType::Source,
+    "inl"        => FileType::Source, // C/C++ Microsoft
+    "ipynb"      => FileType::Source, // Jupyter Notebook
+    "java"       => FileType::Source, // Java
+    "jl"         => FileType::Source, // Julia
+    "js"         => FileType::Source, // Javascript
+    "jsx"        => FileType::Source, // React
+    "kt"         => FileType::Source, // Kotlin
+    "kts"        => FileType::Source, // Kotlin
+    "less"       => FileType::Source, // less
+    "lhs"        => FileType::Source, // Haskell
+    "lisp"       => FileType::Source, // Lisp
+    "ltx"        => FileType::Source, // LaTeX
+    "lua"        => FileType::Source, // Lua
+    "m"          => FileType::Source, // Matlab
+    "matlab"     => FileType::Source, // Matlab
+    "ml"         => FileType::Source, // OCaml
+    "mli"        => FileType::Source, // OCaml
+    "mn"         => FileType::Source, // Matlab
+    "nb"         => FileType::Source, // Mathematica
+    "p"          => FileType::Source, // Pascal
+    "pas"        => FileType::Source, // Pascal
+    "php"        => FileType::Source, // PHP
+    "pl"         => FileType::Source, // Perl
+    "pm"         => FileType::Source, // Perl
+    "pod"        => FileType::Source, // Perl
+    "pp"         => FileType::Source, // Puppet
+    "ps1"        => FileType::Source, // PowerShell
+    "psd1"       => FileType::Source, // PowerShell
+    "psm1"       => FileType::Source, // PowerShell
+    "purs"       => FileType::Source, // PureScript
+    "py"         => FileType::Source, // Python
+    "r"          => FileType::Source, // R
+    "rb"         => FileType::Source, // Ruby
+    "rs"         => FileType::Source, // Rust
+    "sass"       => FileType::Source, // Sass
+    "scala"      => FileType::Source, // Scala
+    "scss"       => FileType::Source, // Sass
+    "sql"        => FileType::Source, // SQL
+    "swift"      => FileType::Source, // Swift
+    "tcl"        => FileType::Source, // TCL
+    "tex"        => FileType::Source, // LaTeX
+    "ts"         => FileType::Source, // TypeScript
+    "v"          => FileType::Source, // V
+    "vb"         => FileType::Source, // Visual Basic
+    "vsh"        => FileType::Source, // Vertex shader
 };
 
 impl FileType {

+ 50 - 9
src/output/icons.rs

@@ -23,6 +23,7 @@ impl Icons {
     const DOCUMENT: char        = '\u{f1c2}';  // 
     const DOWNLOAD: char        = '\u{f01da}'; // 󰇚
     const EMACS: char           = '\u{e632}';  // 
+    const ESLINT: char          = '\u{e655}';  // 
     const FILE: char            = '\u{f15b}';  // 
     const FILE_OUTLINE: char    = '\u{f016}';  // 
     const FOLDER: char          = '\u{e5ff}';  // 
@@ -49,9 +50,11 @@ impl Icons {
     const LANG_C: char          = '\u{e61e}';  // 
     const LANG_CPP: char        = '\u{e61d}';  // 
     const LANG_CSHARP: char     = '\u{f031b}'; // 󰌛
+    const LANG_D: char          = '\u{e7af}';  // 
     const LANG_ELIXIR: char     = '\u{e62d}';  // 
     const LANG_FSHARP: char     = '\u{e7a7}';  // 
     const LANG_GO: char         = '\u{e65e}';  // 
+    const LANG_GROOVY: char     = '\u{e775}';  // 
     const LANG_HASKELL: char    = '\u{e777}';  // 
     const LANG_JAVA: char       = '\u{e256}';  // 
     const LANG_JAVASCRIPT: char = '\u{e74e}';  // 
@@ -89,8 +92,8 @@ impl Icons {
     const REACT: char           = '\u{e7ba}';  // 
     const README: char          = '\u{f00ba}'; // 󰂺
     const SHEET: char           = '\u{f1c3}';  // 
-    const SHELL_CMD: char       = '\u{f489}';  // 
     const SHELL: char           = '\u{f1183}'; // 󱆃
+    const SHELL_CMD: char       = '\u{f489}';  // 
     const SHIELD_CHECK: char    = '\u{f0565}'; // 󰕥
     const SHIELD_KEY: char      = '\u{f0bc4}'; // 󰯄
     const SHIELD_LOCK: char     = '\u{f099d}'; // 󰦝
@@ -119,6 +122,7 @@ const DIRECTORY_ICONS: Map<&'static str, char> = phf_map! {
     ".npm"                => Icons::FOLDER_NPM,     // 
     ".ssh"                => Icons::FOLDER_KEY,     // 󰢬
     ".Trash"              => '\u{f1f8}',            // 
+    "config"              => Icons::FOLDER_CONFIG,  // 
     "Contacts"            => '\u{f024c}',           // 󰉌
     "cron.d"              => Icons::FOLDER_CONFIG,  // 
     "cron.daily"          => Icons::FOLDER_CONFIG,  // 
@@ -127,7 +131,6 @@ const DIRECTORY_ICONS: Map<&'static str, char> = phf_map! {
     "cron.weekly"         => Icons::FOLDER_CONFIG,  // 
     "Desktop"             => '\u{f108}',            // 
     "Downloads"           => '\u{f024d}',           // 󰉍
-    "config"              => Icons::FOLDER_CONFIG,  // 
     "etc"                 => Icons::FOLDER_CONFIG,  // 
     "Favorites"           => '\u{f069d}',           // 󰚝
     "hidden"              => Icons::FOLDER_HIDDEN,  // 󱞞
@@ -160,6 +163,11 @@ const FILENAME_ICONS: Map<&'static str, char> = phf_map! {
     ".cshrc"              => Icons::SHELL,          // 󱆃
     ".DS_Store"           => Icons::OS_APPLE,       // 
     ".emacs"              => Icons::EMACS,          // 
+    ".eslintrc.cjs"       => Icons::ESLINT,         // 
+    ".eslintrc.js"        => Icons::ESLINT,         // 
+    ".eslintrc.json"      => Icons::ESLINT,         // 
+    ".eslintrc.yaml"      => Icons::ESLINT,         // 
+    ".eslintrc.yml"       => Icons::ESLINT,         // 
     ".gitattributes"      => Icons::GIT,            // 
     ".gitconfig"          => Icons::GIT,            // 
     ".gitignore"          => Icons::GIT,            // 
@@ -174,6 +182,7 @@ const FILENAME_ICONS: Map<&'static str, char> = phf_map! {
     ".kshrc"              => Icons::SHELL,          // 󱆃
     ".login"              => Icons::SHELL,          // 󱆃
     ".logout"             => Icons::SHELL,          // 󱆃
+    ".mailmap"            => Icons::GIT,            // 
     ".node_repl_history"  => Icons::NODEJS,         // 
     ".npmignore"          => Icons::NPM,            // 
     ".npmrc"              => Icons::NPM,            // 
@@ -213,6 +222,8 @@ const FILENAME_ICONS: Map<&'static str, char> = phf_map! {
     "configure.ac"        => Icons::CONFIG,         // 
     "configure.in"        => Icons::CONFIG,         // 
     "constraints.txt"     => Icons::LANG_PYTHON,    // 
+    "COPYING"             => Icons::LICENSE,        // 
+    "COPYRIGHT"           => Icons::LICENSE,        // 
     "crontab"             => Icons::CONFIG,         // 
     "crypttab"            => Icons::CONFIG,         // 
     "csh.cshrc"           => Icons::SHELL,          // 󱆃
@@ -255,6 +266,8 @@ const FILENAME_ICONS: Map<&'static str, char> = phf_map! {
     "LICENCE.md"          => Icons::LICENSE,        // 
     "LICENCE.txt"         => Icons::LICENSE,        // 
     "LICENSE"             => Icons::LICENSE,        // 
+    "LICENSE-APACHE"      => Icons::LICENSE,        // 
+    "LICENSE-MIT"         => Icons::LICENSE,        // 
     "LICENSE.md"          => Icons::LICENSE,        // 
     "LICENSE.txt"         => Icons::LICENSE,        // 
     "localized"           => Icons::OS_APPLE,       // 
@@ -271,8 +284,8 @@ const FILENAME_ICONS: Map<&'static str, char> = phf_map! {
     "package-lock.json"   => Icons::NPM,            // 
     "package.json"        => Icons::NPM,            // 
     "passwd"              => Icons::LOCK,           // 
-    "PKGBUILD"            => '\u{f303}',            // 
     "php.ini"             => Icons::LANG_PHP,       // 
+    "PKGBUILD"            => '\u{f303}',            // 
     "pom.xml"             => '\u{e674}',            // 
     "Procfile"            => '\u{e77b}',            // 
     "profile"             => Icons::SHELL,          // 󱆃
@@ -308,12 +321,16 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "acc"            => Icons::AUDIO,            // 
     "acf"            => '\u{f1b6}',              // 
     "ai"             => '\u{e7b4}',              // 
+    "aif"            => Icons::AUDIO,            // 
+    "aifc"           => Icons::AUDIO,            // 
+    "aiff"           => Icons::AUDIO,            // 
     "alac"           => Icons::AUDIO,            // 
     "android"        => Icons::OS_ANDROID,       // 
     "ape"            => Icons::AUDIO,            // 
     "apk"            => Icons::OS_ANDROID,       // 
     "apple"          => Icons::OS_APPLE,         // 
     "ar"             => Icons::COMPRESSED,       // 
+    "arj"            => Icons::COMPRESSED,       // 
     "arw"            => Icons::IMAGE,            // 
     "asc"            => Icons::SHIELD_LOCK,      // 󰦝
     "asm"            => Icons::LANG_ASSEMBLY,    // 
@@ -357,7 +374,9 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "cp"             => Icons::LANG_CPP,         // 
     "cpio"           => Icons::COMPRESSED,       // 
     "cpp"            => Icons::LANG_CPP,         // 
+    "cr"             => '\u{e62f}',              // 
     "cr2"            => Icons::IMAGE,            // 
+    "crdownload"     => Icons::DOWNLOAD,         // 󰇚
     "crt"            => Icons::GIST_SECRET,      // 
     "cs"             => Icons::LANG_CSHARP,      // 󰌛
     "csh"            => Icons::SHELL_CMD,        // 
@@ -370,11 +389,12 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "cu"             => '\u{e64b}',              // 
     "cue"            => Icons::PLAYLIST,         // 󰲹
     "cxx"            => Icons::LANG_CPP,         // 
-    "d"              => '\u{e7af}',              // 
+    "d"              => Icons::LANG_D,           // 
     "dart"           => '\u{e798}',              // 
     "db"             => Icons::DATABASE,         // 
     "deb"            => '\u{e77d}',              // 
     "desktop"        => '\u{ebd1}',              // 
+    "di"             => Icons::LANG_D,           // 
     "diff"           => Icons::DIFF,             // 
     "djv"            => Icons::DOCUMENT,         // 
     "djvu"           => Icons::DOCUMENT,         // 
@@ -409,6 +429,8 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "fish"           => Icons::SHELL_CMD,        // 
     "flac"           => Icons::AUDIO,            // 
     "flv"            => Icons::VIDEO,            // 
+    "fnt"            => Icons::FONT,             // 
+    "fon"            => Icons::FONT,             // 
     "font"           => Icons::FONT,             // 
     "fs"             => Icons::LANG_FSHARP,      // 
     "fsi"            => Icons::LANG_FSHARP,      // 
@@ -423,13 +445,17 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "go"             => Icons::LANG_GO,          // 
     "gpg"            => Icons::SHIELD_LOCK,      // 󰦝
     "gradle"         => Icons::GRADLE,           // 
-    "groovy"         => '\u{e775}',              // 
+    "groovy"         => Icons::LANG_GROOVY,      // 
     "gsheet"         => Icons::SHEET,            // 
     "gslides"        => Icons::SLIDE,            // 
     "guardfile"      => Icons::LANG_RUBY,        // 
     "gv"             => '\u{f1049}',             // 󱁉
+    "gvy"            => Icons::LANG_GROOVY,      // 
     "gz"             => Icons::COMPRESSED,       // 
     "h"              => Icons::LANG_C,           // 
+    "h++"            => Icons::LANG_CPP,         // 
+    "h264"           => Icons::VIDEO,            // 
+    "haml"           => '\u{e664}',              // 
     "hbs"            => Icons::MUSTACHE,         // 
     "heic"           => Icons::IMAGE,            // 
     "heics"          => Icons::VIDEO,            // 
@@ -447,6 +473,7 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "image"          => Icons::DISK_IMAGE,       // 
     "img"            => Icons::DISK_IMAGE,       // 
     "iml"            => Icons::INTELLIJ,         // 
+    "inl"            => Icons::LANG_C,           // 
     "ini"            => Icons::CONFIG,           // 
     "ipynb"          => '\u{e678}',              // 
     "iso"            => Icons::DISK_IMAGE,       // 
@@ -482,12 +509,13 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "ldb"            => Icons::DATABASE,         // 
     "less"           => '\u{e758}',              // 
     "lhs"            => Icons::LANG_HASKELL,     // 
+    "lib"            => Icons::LIBRARY,          // 
     "license"        => Icons::LICENSE,          // 
     "lisp"           => '\u{f0172}',             // 󰅲
-    "lib"            => Icons::LIBRARY,          // 
     "localized"      => Icons::OS_APPLE,         // 
     "lock"           => Icons::LOCK,             // 
     "log"            => '\u{f18d}',              // 
+    "ltx"            => Icons::LANG_TEX,         // 
     "lua"            => '\u{e620}',              // 
     "lz"             => Icons::COMPRESSED,       // 
     "lz4"            => Icons::COMPRESSED,       // 
@@ -506,6 +534,7 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "md"             => Icons::MARKDOWN,         // 
     "md5"            => Icons::SHIELD_CHECK,     // 󰕥
     "mdb"            => Icons::DATABASE,         // 
+    "mid"            => '\u{f08f2}',             // 󰣲
     "mjs"            => Icons::LANG_JAVASCRIPT,  // 
     "mk"             => Icons::MAKE,             // 
     "mka"            => Icons::AUDIO,            // 
@@ -544,9 +573,10 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "out"            => '\u{eb2c}',              // 
     "p12"            => Icons::KEY,              // 
     "par"            => Icons::COMPRESSED,       // 
-    "part"           => '\u{f43a}',              // 
+    "part"           => Icons::DOWNLOAD,         // 󰇚
     "patch"          => Icons::DIFF,             // 
     "pbm"            => Icons::IMAGE,            // 
+    "pcm"            => Icons::AUDIO,            // 
     "pdf"            => '\u{f1c1}',              // 
     "pem"            => Icons::KEY,              // 
     "pfx"            => Icons::KEY,              // 
@@ -563,6 +593,8 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "pod"            => Icons::LANG_PERL,        // 
     "pp"             => '\u{e631}',              // 
     "ppm"            => Icons::IMAGE,            // 
+    "pps"            => Icons::SLIDE,            // 
+    "ppsx"           => Icons::SLIDE,            // 
     "ppt"            => Icons::SLIDE,            // 
     "pptx"           => Icons::SLIDE,            // 
     "properties"     => Icons::JSON,             // 
@@ -570,9 +602,10 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "ps1"            => Icons::POWERSHELL,       // 
     "psd"            => '\u{e7b8}',              // 
     "psd1"           => Icons::POWERSHELL,       // 
-    "psm1"           => Icons::POWERSHELL,       // 
     "psf"            => Icons::FONT,             // 
+    "psm1"           => Icons::POWERSHELL,       // 
     "pub"            => Icons::PUBLIC_KEY,       // 󰷖
+    "purs"           => '\u{e630}',              // 
     "pxm"            => Icons::IMAGE,            // 
     "py"             => Icons::LANG_PYTHON,      // 
     "pyc"            => Icons::LANG_PYTHON,      // 
@@ -606,6 +639,7 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "rubydoc"        => Icons::LANG_RUBYRAILS,   // 
     "s"              => Icons::LANG_ASSEMBLY,    // 
     "sass"           => Icons::LANG_SASS,        // 
+    "sbt"            => Icons::SUBTITLE,         // 󰨖
     "scala"          => '\u{e737}',              // 
     "scss"           => Icons::LANG_SASS,        // 
     "service"        => '\u{eba2}',              // 
@@ -616,6 +650,7 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "sha384"         => Icons::SHIELD_CHECK,     // 󰕥
     "sha512"         => Icons::SHIELD_CHECK,     // 󰕥
     "shell"          => Icons::SHELL_CMD,        // 
+    "shtml"          => Icons::HTML5,            // 
     "sig"            => Icons::SIGNED_FILE,      // 󱧃
     "signature"      => Icons::SIGNED_FILE,      // 󱧃
     "slim"           => Icons::LANG_RUBYRAILS,   // 
@@ -624,6 +659,7 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "sql"            => Icons::DATABASE,         // 
     "sqlite3"        => '\u{e7c4}',              // 
     "srt"            => Icons::SUBTITLE,         // 󰨖
+    "ssa"            => Icons::SUBTITLE,         // 󰨖
     "stl"            => Icons::IMAGE,            // 
     "sty"            => Icons::LANG_TEX,         // 
     "styl"           => Icons::LANG_STYLUS,      // 
@@ -656,6 +692,7 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "tif"            => Icons::IMAGE,            // 
     "tiff"           => Icons::IMAGE,            // 
     "tlz"            => Icons::COMPRESSED,       // 
+    "tml"            => Icons::CONFIG,           // 
     "toml"           => Icons::CONFIG,           // 
     "torrent"        => '\u{e275}',              // 
     "ts"             => Icons::LANG_TYPESCRIPT,  // 
@@ -670,6 +707,7 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "tzo"            => Icons::COMPRESSED,       // 
     "unity"          => Icons::UNITY,            // 
     "unity3d"        => Icons::UNITY,            // 
+    "v"              => '\u{e6ac}',              // 
     "vdi"            => Icons::DISK_IMAGE,       // 
     "vhd"            => Icons::DISK_IMAGE,       // 
     "video"          => Icons::VIDEO,            // 
@@ -680,6 +718,7 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "war"            => Icons::LANG_JAVA,        // 
     "wav"            => Icons::AUDIO,            // 
     "webm"           => Icons::VIDEO,            // 
+    "webmanifest"    => Icons::JSON,             // 
     "webp"           => Icons::IMAGE,            // 
     "whl"            => Icons::LANG_PYTHON,      // 
     "windows"        => Icons::OS_WINDOWS,       // 
@@ -687,8 +726,10 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "wmv"            => Icons::VIDEO,            // 
     "woff"           => Icons::FONT,             // 
     "woff2"          => Icons::FONT,             // 
+    "wv"             => Icons::AUDIO,            // 
     "xcf"            => Icons::IMAGE,            // 
     "xhtml"          => Icons::HTML5,            // 
+    "xlr"            => Icons::SHEET,            // 
     "xls"            => Icons::SHEET,            // 
     "xlsm"           => Icons::SHEET,            // 
     "xlsx"           => Icons::SHEET,            // 
@@ -699,7 +740,7 @@ const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
     "yaml"           => Icons::YAML,             // 
     "yml"            => Icons::YAML,             // 
     "z"              => Icons::COMPRESSED,       // 
-    "zig"            => '\u{21af}',              // ↯
+    "zig"            => '\u{e6a9}',              // 
     "zip"            => Icons::COMPRESSED,       // 
     "zsh"            => Icons::SHELL_CMD,        // 
     "zsh-theme"      => Icons::SHELL,            // 󱆃

+ 1 - 0
src/theme/default_theme.rs

@@ -104,6 +104,7 @@ impl UiStyles {
                 temp:       White.normal(),
                 compiled:   Yellow.normal(),
                 build:      Yellow.bold().underline(),
+                source:     Yellow.bold(), // Need to discuss color
             },
 
             punctuation: DarkGray.bold(),

+ 3 - 0
src/theme/mod.rs

@@ -216,6 +216,7 @@ impl FileStyle for FileTypes {
             Some(FileType::Temp)       => Some(theme.ui.file_type.temp),
             Some(FileType::Compiled)   => Some(theme.ui.file_type.compiled),
             Some(FileType::Build)      => Some(theme.ui.file_type.build),
+            Some(FileType::Source)     => Some(theme.ui.file_type.source),
             None                       => None
         };
     }
@@ -602,6 +603,8 @@ mod customs_test {
     test!(exa_tm:  ls "", exa "tm=38;5;135"  =>  colours c -> { c.file_type.temp                        = Fixed(135).normal(); });
     test!(exa_cm:  ls "", exa "cm=38;5;136"  =>  colours c -> { c.file_type.compiled                    = Fixed(136).normal(); });
     test!(exa_ie:  ls "", exa "bu=38;5;137"  =>  colours c -> { c.file_type.build                       = Fixed(137).normal(); });
+    test!(exa_bu:  ls "", exa "bu=38;5;137"  =>  colours c -> { c.file_type.build                       = Fixed(137).normal(); });
+    test!(exa_sc:  ls "", exa "sc=38;5;138"  =>  colours c -> { c.file_type.source                      = Fixed(138).normal(); });
 
     test!(exa_Sn:  ls "", exa "Sn=38;5;128"  =>  colours c -> { c.security_context.none                 = Fixed(128).normal(); });
     test!(exa_Su:  ls "", exa "Su=38;5;129"  =>  colours c -> { c.security_context.selinux.user         = Fixed(129).normal(); });

+ 2 - 0
src/theme/ui_styles.rs

@@ -155,6 +155,7 @@ pub struct FileType {
     pub temp: Style,        // tm - temporary file
     pub compiled: Style,    // cm - compilation artifact
     pub build: Style,       // bu - file that is used to build a project
+    pub source: Style,      // sc - source code
 }
 
 impl UiStyles {
@@ -269,6 +270,7 @@ impl UiStyles {
             "tm" => self.file_type.temp                 = pair.to_style(),
             "cm" => self.file_type.compiled             = pair.to_style(),
             "bu" => self.file_type.build                = pair.to_style(),
+            "sc" => self.file_type.source               = pair.to_style(),
 
             "Sn" => self.security_context.none          = pair.to_style(),
             "Su" => self.security_context.selinux.user  = pair.to_style(),