| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784 |
- /// The version string isnโt the simplest: we want to show the version,
- /// current Git hash, and compilation date when building *debug* versions, but
- /// just the version for *release* versions so the builds are reproducible.
- ///
- /// This script generates the string from the environment variables that Cargo
- /// adds (http://doc.crates.io/environment-variables.html) and runs `git` to
- /// get the SHA1 hash. It then writes the string into a file, which exa then
- /// includes at build-time.
- ///
- /// - https://stackoverflow.com/q/43753491/3484614
- /// - https://crates.io/crates/vergen
- use std::env;
- use std::fs::File;
- use std::io::{self, Write};
- use std::path::PathBuf;
- use datetime::{LocalDateTime, ISO};
- /// The build script entry point.
- fn main() -> io::Result<()> {
- create_version_string_file()?;
- create_file_typing_hash_file()?;
- create_file_icon_hash_file()
- }
- /// Create the version_string.txt file
- fn create_version_string_file() -> io::Result<()> {
- #![allow(clippy::write_with_newline)]
- let tagline = "eza - A modern, maintained replacement for ls";
- let url = "https://github.com/eza-community/eza";
- let ver =
- if is_debug_build() {
- format!("{}\nv{} \\1;31m(pre-release debug build!)\\0m\n\\1;4;34m{}\\0m", tagline, version_string(), url)
- }
- else if is_development_version() {
- format!("{}\nv{} [{}] built on {} \\1;31m(pre-release!)\\0m\n\\1;4;34m{}\\0m", tagline, version_string(), git_hash(), build_date(), url)
- }
- else {
- format!("{}\nv{}\n\\1;4;34m{}\\0m", tagline, version_string(), url)
- };
- // We need to create these files in the Cargo output directory.
- let out = PathBuf::from(env::var("OUT_DIR").unwrap());
- let path = &out.join("version_string.txt");
- // Bland version text
- let mut f = File::create(path).unwrap_or_else(|_| { panic!("{}", path.to_string_lossy().to_string()) });
- writeln!(f, "{}", strip_codes(&ver))
- }
- /// Removes escape codes from a string.
- fn strip_codes(input: &str) -> String {
- input.replace("\\0m", "")
- .replace("\\1;31m", "")
- .replace("\\1;4;34m", "")
- }
- /// Retrieve the projectโs current Git hash, as a string.
- fn git_hash() -> String {
- use std::process::Command;
- String::from_utf8_lossy(
- &Command::new("git")
- .args(["rev-parse", "--short", "HEAD"])
- .output().unwrap()
- .stdout).trim().to_string()
- }
- /// Whether we should show pre-release info in the version string.
- ///
- /// Both weekly releases and actual releases are --release releases,
- /// but actual releases will have a proper version number.
- fn is_development_version() -> bool {
- cargo_version().ends_with("-pre") || env::var("PROFILE").unwrap() == "debug"
- }
- /// Whether we are building in debug mode.
- fn is_debug_build() -> bool {
- env::var("PROFILE").unwrap() == "debug"
- }
- /// Retrieves the [package] version in Cargo.toml as a string.
- fn cargo_version() -> String {
- env::var("CARGO_PKG_VERSION").unwrap()
- }
- /// Returns the version and build parameters string.
- fn version_string() -> String {
- let mut ver = cargo_version();
- let feats = nonstandard_features_string();
- if ! feats.is_empty() {
- ver.push_str(&format!(" [{}]", &feats));
- }
- ver
- }
- /// Finds whether a feature is enabled by examining the Cargo variable.
- fn feature_enabled(name: &str) -> bool {
- env::var(format!("CARGO_FEATURE_{}", name))
- .map(|e| ! e.is_empty())
- .unwrap_or(false)
- }
- /// A comma-separated list of non-standard feature choices.
- fn nonstandard_features_string() -> String {
- let mut s = Vec::new();
- if feature_enabled("GIT") {
- s.push("+git");
- }
- else {
- s.push("-git");
- }
- s.join(", ")
- }
- /// Formats the current date as an ISO 8601 string.
- fn build_date() -> String {
- let now = LocalDateTime::now();
- format!("{}", now.date().iso())
- }
- /// Create the perfect hashing for file typing
- fn create_file_typing_hash_file() -> io::Result<()> {
- let path = &PathBuf::from(env::var("OUT_DIR").unwrap()).join("filetype_maps.rs");
- let mut file = io::BufWriter::new(File::create(path).unwrap_or_else(|_| {
- panic!("{}", path.to_string_lossy().to_string())
- }));
- generate_filename_type_map(file.get_mut())?;
- generate_extension_type_map(file.get_mut())?;
- file.flush()
- }
- /// Create the perfect hashing for file icons
- fn create_file_icon_hash_file() -> io::Result<()> {
- let path = &PathBuf::from(env::var("OUT_DIR").unwrap()).join("icon_maps.rs");
- let mut file = io::BufWriter::new(File::create(path).unwrap_or_else(|_| {
- panic!("{}", path.to_string_lossy().to_string());
- }));
- generate_filename_icon_map(file.get_mut())?;
- generate_extension_icon_map(file.get_mut())?;
- file.flush()
- }
- /// Generate mapping from full filenames to file type. For file types see info/filetype.rs
- fn generate_filename_type_map(file: &mut File) -> io::Result<()> {
- writeln!(file, "#[allow(clippy::unreadable_literal)]")?;
- writeln!(file, "static FILENAME_TYPES: phf::Map<&'static str, FileType> = {};\n",
- phf_codegen::Map::new()
- /* Immediate file - kick off the build of a project */
- .entry("Brewfile", "FileType::Immediate")
- .entry("bsconfig.json", "FileType::Immediate")
- .entry("BUILD", "FileType::Immediate")
- .entry("BUILD.bazel", "FileType::Immediate")
- .entry("build.gradle", "FileType::Immediate")
- .entry("build.sbt", "FileType::Immediate")
- .entry("build.xml", "FileType::Immediate")
- .entry("Cargo.lock", "FileType::Immediate")
- .entry("Cargo.toml", "FileType::Immediate")
- .entry("CMakeLists.txt", "FileType::Immediate")
- .entry("composer.json", "FileType::Immediate")
- .entry("configure.ac", "FileType::Immediate")
- .entry("Configure.ac", "FileType::Immediate")
- .entry("Containerfile", "FileType::Immediate")
- .entry("Dockerfile", "FileType::Immediate")
- .entry("Earthfile", "FileType::Immediate")
- .entry("flake.lock", "FileType::Immediate")
- .entry("flake.nix", "FileType::Immediate")
- .entry("Gemfile", "FileType::Immediate")
- .entry("GNUmakefile", "FileType::Immediate")
- .entry("Gruntfile.coffee", "FileType::Immediate")
- .entry("Gruntfile.js", "FileType::Immediate")
- .entry("Justfile", "FileType::Immediate")
- .entry("justfile", "FileType::Immediate")
- .entry("Makefile", "FileType::Immediate")
- .entry("makefile", "FileType::Immediate")
- .entry("Makefile.in", "FileType::Immediate")
- .entry("makefile.in", "FileType::Immediate")
- .entry("meson.build", "FileType::Immediate")
- .entry("mix.exs", "FileType::Immediate")
- .entry("package.json", "FileType::Immediate")
- .entry("Pipfile", "FileType::Immediate")
- .entry("PKGBUILD", "FileType::Immediate")
- .entry("Podfile", "FileType::Immediate")
- .entry("pom.xml", "FileType::Immediate")
- .entry("Procfile", "FileType::Immediate")
- .entry("Rakefile", "FileType::Immediate")
- .entry("RoboFile.php", "FileType::Immediate")
- .entry("SConstruct", "FileType::Immediate")
- .entry("tsconfig.json", "FileType::Immediate")
- .entry("Vagrantfile", "FileType::Immediate")
- .entry("webpack.config.cjs","FileType::Immediate")
- .entry("webpack.config.js", "FileType::Immediate")
- .entry("WORKSPACE", "FileType::Immediate")
- .build()
- )
- }
- /// Generate mapping from lowercase file extension to file type. If an image, video, music, or
- /// lossless extension is added also update the extension icon map. For file types see
- /// info/filetype.rs
- fn generate_extension_type_map(file: &mut File) -> io::Result<()> {
- // Extension are converted to lower case for comparison
- writeln!(file, "#[allow(clippy::unreadable_literal)]")?;
- writeln!(file, "static EXTENSION_TYPES: phf::Map<&'static str, FileType> = {};\n",
- phf_codegen::Map::new()
- /* Immediate file - kick off the build of a project */
- .entry("ninja", "FileType::Immediate")
- /* Image files */
- .entry("arw", "FileType::Image")
- .entry("avif", "FileType::Image")
- .entry("bmp", "FileType::Image")
- .entry("cbr", "FileType::Image")
- .entry("cbz", "FileType::Image")
- .entry("cr2", "FileType::Image")
- .entry("dvi", "FileType::Image")
- .entry("eps", "FileType::Image")
- .entry("gif", "FileType::Image")
- .entry("heif", "FileType::Image")
- .entry("ico", "FileType::Image")
- .entry("j2c", "FileType::Image")
- .entry("j2k", "FileType::Image")
- .entry("jfi", "FileType::Image")
- .entry("jfif", "FileType::Image")
- .entry("jif", "FileType::Image")
- .entry("jp2", "FileType::Image")
- .entry("jpe", "FileType::Image")
- .entry("jpeg", "FileType::Image")
- .entry("jpf", "FileType::Image")
- .entry("jpg", "FileType::Image")
- .entry("jpx", "FileType::Image")
- .entry("jxl", "FileType::Image")
- .entry("nef", "FileType::Image")
- .entry("orf", "FileType::Image")
- .entry("pbm", "FileType::Image")
- .entry("pgm", "FileType::Image")
- .entry("png", "FileType::Image")
- .entry("pnm", "FileType::Image")
- .entry("ppm", "FileType::Image")
- .entry("ps", "FileType::Image")
- .entry("pxm", "FileType::Image")
- .entry("raw", "FileType::Image")
- .entry("stl", "FileType::Image")
- .entry("svg", "FileType::Image")
- .entry("tif", "FileType::Image")
- .entry("tiff", "FileType::Image")
- .entry("webp", "FileType::Image")
- .entry("xpm", "FileType::Image")
- /* Video files */
- .entry("avi", "FileType::Video")
- .entry("flv", "FileType::Video")
- .entry("heic", "FileType::Video")
- .entry("m2ts", "FileType::Video")
- .entry("m2v", "FileType::Video")
- .entry("m4v", "FileType::Video")
- .entry("mkv", "FileType::Video")
- .entry("mov", "FileType::Video")
- .entry("mp4", "FileType::Video")
- .entry("mpeg", "FileType::Video")
- .entry("mpg", "FileType::Video")
- .entry("ogm", "FileType::Video")
- .entry("ogv", "FileType::Video")
- .entry("vob", "FileType::Video")
- .entry("webm", "FileType::Video")
- .entry("wmv", "FileType::Video")
- /* Music files */
- .entry("aac", "FileType::Music")
- .entry("m4a", "FileType::Music")
- .entry("mka", "FileType::Music")
- .entry("mp2", "FileType::Music")
- .entry("mp3", "FileType::Music")
- .entry("ogg", "FileType::Music")
- .entry("opus", "FileType::Music")
- .entry("wma", "FileType::Music")
- /* Lossless music, rather than any other kind of data... */
- .entry("alac", "FileType::Lossless")
- .entry("ape", "FileType::Lossless")
- .entry("flac", "FileType::Lossless")
- .entry("wav", "FileType::Lossless")
- /* Cryptology files */
- .entry("asc", "FileType::Crypto")
- .entry("enc", "FileType::Crypto")
- .entry("gpg", "FileType::Crypto")
- .entry("p12", "FileType::Crypto")
- .entry("pfx", "FileType::Crypto")
- .entry("pgp", "FileType::Crypto")
- .entry("sig", "FileType::Crypto")
- .entry("signature", "FileType::Crypto")
- /* Document files */
- .entry("djvu", "FileType::Document")
- .entry("doc", "FileType::Document")
- .entry("docx", "FileType::Document")
- // .entry("dvi", "FileType::Document") // already an image format
- .entry("eml", "FileType::Document")
- // .entry("eps", "FileType::Document") // already an image format
- .entry("fotd", "FileType::Document")
- .entry("key", "FileType::Document")
- .entry("keynote", "FileType::Document")
- .entry("numbers", "FileType::Document")
- .entry("odp", "FileType::Document")
- .entry("odt", "FileType::Document")
- .entry("pages", "FileType::Document")
- .entry("pdf", "FileType::Document")
- .entry("ppt", "FileType::Document")
- .entry("pptx", "FileType::Document")
- .entry("rtf", "FileType::Document")
- .entry("xls", "FileType::Document")
- .entry("xlsx", "FileType::Document")
- /* Compressed/archive files */
- .entry("7z", "FileType::Compressed")
- .entry("a", "FileType::Compressed")
- .entry("ar", "FileType::Compressed")
- .entry("bz", "FileType::Compressed")
- .entry("bz2", "FileType::Compressed")
- .entry("cpio", "FileType::Compressed")
- .entry("deb", "FileType::Compressed")
- .entry("dmg", "FileType::Compressed")
- .entry("gz", "FileType::Compressed")
- .entry("iso", "FileType::Compressed")
- .entry("lz", "FileType::Compressed")
- .entry("lz4", "FileType::Compressed")
- .entry("lzh", "FileType::Compressed")
- .entry("lzma", "FileType::Compressed")
- .entry("lzo", "FileType::Compressed")
- .entry("par", "FileType::Compressed")
- .entry("rar", "FileType::Compressed")
- .entry("rpm", "FileType::Compressed")
- .entry("tar", "FileType::Compressed")
- .entry("taz", "FileType::Compressed")
- .entry("tbz", "FileType::Compressed")
- .entry("tbz2", "FileType::Compressed")
- .entry("tc", "FileType::Compressed")
- .entry("tgz", "FileType::Compressed")
- .entry("tlz", "FileType::Compressed")
- .entry("txz", "FileType::Compressed")
- .entry("tz", "FileType::Compressed")
- .entry("tzo", "FileType::Compressed")
- .entry("xz", "FileType::Compressed")
- .entry("z", "FileType::Compressed")
- .entry("zip", "FileType::Compressed")
- .entry("zst", "FileType::Compressed")
- /* Temporary files */
- .entry("bak", "FileType::Temp")
- .entry("bk", "FileType::Temp")
- .entry("bkp", "FileType::Temp")
- .entry("swn", "FileType::Temp")
- .entry("swo", "FileType::Temp")
- .entry("swp", "FileType::Temp")
- .entry("tmp", "FileType::Temp")
- /* Compiler output files */
- .entry("class", "FileType::Compiled")
- .entry("elc", "FileType::Compiled")
- .entry("hi", "FileType::Compiled")
- .entry("ko", "FileType::Compiled")
- .entry("o", "FileType::Compiled")
- .entry("pyc", "FileType::Compiled")
- .entry("zwc", "FileType::Compiled")
- .build()
- )
- }
- /// Generate mapping from full filenames to file type. This mapping should also contain all the
- /// "dot" directories that have a custom icon. See output/render/icons.rs for a partial list of
- /// icon constants.
- fn generate_filename_icon_map(file: &mut File) -> io::Result<()> {
- writeln!(file, "#[allow(clippy::unreadable_literal)]")?;
- writeln!(file, "static FILENAME_ICONS: phf::Map<&'static str, char> = {};\n",
- phf_codegen::Map::new()
- .entry(".atom", "'\u{e764}'") // ๎ค
- .entry(".bashprofile", "'\u{e615}'") // ๎
- .entry(".bashrc", "'\u{f489}'") // ๏
- .entry(".emacs", "'\u{e632}'") // ๎ฒ
- .entry(".git", "'\u{f1d3}'") // ๏
- .entry(".gitattributes", "'\u{f1d3}'") // ๏
- .entry(".gitconfig", "'\u{f1d3}'") // ๏
- .entry(".github", "'\u{f408}'") // ๏
- .entry(".gitignore", "'\u{f1d3}'") // ๏
- .entry(".gitignore_global", "'\u{f1d3}'") // ๏
- .entry(".gitmodules", "'\u{f1d3}'") // ๏
- .entry(".idea", "'\u{e7b5}'") // ๎ต
- .entry(".rvm", "'\u{e21e}'") // ๎
- .entry(".Trash", "'\u{f1f8}'") // ๏ธ
- .entry(".vimrc", "'\u{e7c5}'") // ๎
- .entry(".vscode", "'\u{e70c}'") // ๎
- .entry(".zshrc", "'\u{f489}'") // ๏
- .entry("bin", "'\u{e5fc}'") // ๎ผ
- .entry("Cargo.lock", "'\u{e7a8}'") // ๎จ
- .entry("config", "'\u{e5fc}'") // ๎ผ
- .entry("docker-compose.yml", "'\u{f308}'") // ๏
- .entry("Dockerfile", "'\u{f308}'") // ๏
- .entry("ds_store", "'\u{f179}'") // ๏
น
- .entry("Earthfile", "'\u{f0ac}'") // ๏ฌ
- .entry("gitignore_global", "'\u{f1d3}'") // ๏
- .entry("gitlab-ci.yml", "'\u{f296}'") // ๏
- .entry("go.mod", "'\u{e626}'") // ๎ฆ
- .entry("go.sum", "'\u{e626}'") // ๎ฆ
- .entry("gradle", "'\u{e256}'") // ๎
- .entry("gruntfile.coffee", "'\u{e611}'") // ๎
- .entry("gruntfile.js", "'\u{e611}'") // ๎
- .entry("gruntfile.ls", "'\u{e611}'") // ๎
- .entry("gulpfile.coffee", "'\u{e610}'") // ๎
- .entry("gulpfile.js", "'\u{e610}'") // ๎
- .entry("gulpfile.ls", "'\u{e610}'") // ๎
- .entry("hidden", "'\u{f023}'") // ๏ฃ
- .entry("include", "'\u{e5fc}'") // ๎ผ
- .entry("lib", "'\u{f121}'") // ๏ก
- .entry("LICENSE", "'\u{f02d}'") // ๏ญ
- .entry("localized", "'\u{f179}'") // ๏
น
- .entry("Makefile", "'\u{f489}'") // ๏
- .entry("node_modules", "'\u{e718}'") // ๎
- .entry("npmignore", "'\u{e71e}'") // ๎
- .entry("PKGBUILD", "'\u{f303}'") // ๏
- .entry("rubydoc", "'\u{e73b}'") // ๎ป
- .entry("Vagrantfile", "'\u{2371}'") // โฑ
- .entry("yarn.lock", "'\u{e718}'") // ๎
- .build()
- )
- }
- /// Generate mapping from lowercase file extension to icons. If an image, video, or audio
- /// extension is add also update the extension filetype map. See output/render/icons.rs for
- /// a partial list of icon constants.
- fn generate_extension_icon_map(file: &mut File) -> io::Result<()> {
- writeln!(file, "#[allow(clippy::unreadable_literal)]")?;
- writeln!(file, "static EXTENSION_ICONS: phf::Map<&'static str, char> = {};\n",
- phf_codegen::Map::new()
- .entry("7z", "'\u{f410}'") // ๏
- .entry("a", "'\u{f17c}'") // ๏
ผ
- .entry("acc", "'\u{f001}'") // ๏
- .entry("acf", "'\u{f1b6}'") // ๏ถ
- .entry("ai", "'\u{e7b4}'") // ๎ด
- .entry("alac", "'\u{f001}'") // ๏
- .entry("android", "'\u{e70e}'") // ๎
- .entry("ape", "'\u{f001}'") // ๏
- .entry("apk", "'\u{e70e}'") // ๎
- .entry("apple", "'\u{f179}'") // ๏
น
- .entry("ar", "'\u{f410}'") // ๏
- .entry("arw", "'\u{f1c5}'") // ๏
- .entry("asm", "'\u{e637}'") // ๎ท
- .entry("avi", "'\u{f03d}'") // ๏ฝ
- .entry("avif", "'\u{f1c5}'") // ๏
- .entry("avro", "'\u{e60b}'") // ๎
- .entry("awk", "'\u{f489}'") // ๏
- .entry("bash", "'\u{f489}'") // ๏
- .entry("bashrc", "'\u{f489}'") // ๏
- .entry("bash_history", "'\u{f489}'") // ๏
- .entry("bash_profile", "'\u{f489}'") // ๏
- .entry("bat", "'\u{ebc4}'") // ๎ฏ
- .entry("bats", "'\u{f489}'") // ๏
- .entry("bib", "'\u{e69b}'") // ๎
- .entry("bin", "'\u{eae8}'") // ๎ซจ
- .entry("bmp", "'\u{f1c5}'") // ๏
- .entry("bst", "'\u{e69b}'") // ๎
- .entry("bz", "'\u{f410}'") // ๏
- .entry("bz2", "'\u{f410}'") // ๏
- .entry("c", "'\u{e61e}'") // ๎
- .entry("c++", "'\u{e61d}'") // ๎
- .entry("cab", "'\u{e70f}'") // ๎
- .entry("cbr", "'\u{f1c5}'") // ๏
- .entry("cbz", "'\u{f1c5}'") // ๏
- .entry("cc", "'\u{e61d}'") // ๎
- .entry("cert", "'\u{eafa}'") // ๎ซบ
- .entry("cfg", "'\u{e615}'") // ๎
- .entry("cjs", "'\u{e74e}'") // ๎
- .entry("class", "'\u{e256}'") // ๎
- .entry("clj", "'\u{e768}'") // ๎จ
- .entry("cljs", "'\u{e76a}'") // ๎ช
- .entry("cls", "'\u{e69b}'") // ๎
- .entry("cmd", "'\u{e70f}'") // ๎
- .entry("coffee", "'\u{f0f4}'") // ๏ด
- .entry("conf", "'\u{e615}'") // ๎
- .entry("config", "'\u{e615}'") // ๎
- .entry("cp", "'\u{e61d}'") // ๎
- .entry("cpio", "'\u{f410}'") // ๏
- .entry("cpp", "'\u{e61d}'") // ๎
- .entry("cr2", "'\u{f1c5}'") // ๏
- .entry("crt", "'\u{eafa}'") // ๎ซบ
- .entry("cs", "'\u{f031b}'") // ๓ฐ
- .entry("csh", "'\u{f489}'") // ๏
- .entry("cshtml", "'\u{f1fa}'") // ๏บ
- .entry("csproj", "'\u{f031b}'") // ๓ฐ
- .entry("css", "'\u{e749}'") // ๎
- .entry("csv", "'\u{f1c3}'") // ๏
- .entry("csx", "'\u{f031b}'") // ๓ฐ
- .entry("cts", "'\u{e628}'") // ๎จ
- .entry("cu", "'\u{e64b}'") // ๎
- .entry("cxx", "'\u{e61d}'") // ๎
- .entry("d", "'\u{e7af}'") // ๎ฏ
- .entry("dart", "'\u{e798}'") // ๎
- .entry("db", "'\u{f1c0}'") // ๏
- .entry("deb", "'\u{e77d}'") // ๎ฝ
- .entry("desktop", "'\u{ebd1}'") // ๎ฏ
- .entry("diff", "'\u{f440}'") // ๏
- .entry("djvu", "'\u{f02d}'") // ๏ญ
- .entry("dll", "'\u{e70f}'") // ๎
- .entry("dmg", "'\u{e271}'") // ๎ฑ
- .entry("doc", "'\u{f1c2}'") // ๏
- .entry("docx", "'\u{f1c2}'") // ๏
- .entry("drawio", "'\u{ebba}'") // ๎ฎบ
- .entry("ds_store", "'\u{f179}'") // ๏
น
- .entry("dump", "'\u{f1c0}'") // ๎
- .entry("dvi", "'\u{f1c5}'") // ๏
- .entry("ebook", "'\u{e28b}'") // ๎
- .entry("ebuild", "'\u{f30d}'") // ๏
- .entry("editorconfig", "'\u{e615}'") // ๎
- .entry("ejs", "'\u{e618}'") // ๎
- .entry("el", "'\u{e632}'") // ๎ฒ
- .entry("elm", "'\u{e62c}'") // ๎ฌ
- .entry("eml", "'\u{f003}'") // ๏
- .entry("env", "'\u{f462}'") // ๏ข
- .entry("eot", "'\u{f031}'") // ๏ฑ
- .entry("eps", "'\u{f1c5}'") // ๏
- .entry("epub", "'\u{e28a}'") // ๎
- .entry("erb", "'\u{e73b}'") // ๎ป
- .entry("erl", "'\u{e7b1}'") // ๎ฑ
- .entry("ex", "'\u{e62d}'") // ๎ญ
- .entry("exe", "'\u{f17a}'") // ๏
บ
- .entry("exs", "'\u{e62d}'") // ๎ญ
- .entry("fish", "'\u{f489}'") // ๏
- .entry("flac", "'\u{f001}'") // ๏
- .entry("flv", "'\u{f03d}'") // ๏ฝ
- .entry("font", "'\u{f031}'") // ๏ฑ
- .entry("fs", "'\u{e7a7}'") // ๎ง
- .entry("fsi", "'\u{e7a7}'") // ๎ง
- .entry("fsx", "'\u{e7a7}'") // ๎ง
- .entry("gdoc", "'\u{f1c2}'") // ๏
- .entry("gem", "'\u{e21e}'") // ๎
- .entry("gemfile", "'\u{e21e}'") // ๎
- .entry("gemspec", "'\u{e21e}'") // ๎
- .entry("gform", "'\u{f298}'") // ๏
- .entry("gif", "'\u{f1c5}'") // ๏
- .entry("git", "'\u{f1d3}'") // ๏
- .entry("gitattributes", "'\u{f1d3}'") // ๏
- .entry("gitignore", "'\u{f1d3}'") // ๏
- .entry("gitmodules", "'\u{f1d3}'") // ๏
- .entry("go", "'\u{e626}'") // ๎ฆ
- .entry("gpg", "'\u{e60a}'") // ๎
- .entry("gradle", "'\u{e256}'") // ๎
- .entry("groovy", "'\u{e775}'") // ๎ต
- .entry("gsheet", "'\u{f1c3}'") // ๏
- .entry("gslides", "'\u{f1c4}'") // ๏
- .entry("guardfile", "'\u{e21e}'") // ๎
- .entry("gz", "'\u{f410}'") // ๏
- .entry("h", "'\u{f0fd}'") // ๏ฝ
- .entry("hbs", "'\u{e60f}'") // ๎
- .entry("heic", "'\u{f03d}'") // ๏ฝ
- .entry("heif", "'\u{f1c5}'") // ๏
- .entry("hpp", "'\u{f0fd}'") // ๏ฝ
- .entry("hs", "'\u{e777}'") // ๎ท
- .entry("htm", "'\u{f13b}'") // ๏ป
- .entry("html", "'\u{f13b}'") // ๏ป
- .entry("hxx", "'\u{f0fd}'") // ๏ฝ
- .entry("ical", "'\u{eab0}'") // ๏ณ
- .entry("icalendar", "'\u{eab0}'") // ๏ณ
- .entry("ico", "'\u{f1c5}'") // ๏
- .entry("ics", "'\u{eab0}'") // ๏ณ
- .entry("ifb", "'\u{eab0}'") // ๏ณ
- .entry("image", "'\u{f1c5}'") // ๏
- .entry("img", "'\u{e271}'") // ๎ฑ
- .entry("iml", "'\u{e7b5}'") // ๎ต
- .entry("ini", "'\u{f17a}'") // ๏
บ
- .entry("ipynb", "'\u{e678}'") // ๎ธ
- .entry("iso", "'\u{e271}'") // ๎ฑ
- .entry("j2c", "'\u{f1c5}'") // ๏
- .entry("j2k", "'\u{f1c5}'") // ๏
- .entry("jad", "'\u{e256}'") // ๎
- .entry("jar", "'\u{e256}'") // ๎
- .entry("java", "'\u{e256}'") // ๎
- .entry("jfi", "'\u{f1c5}'") // ๏
- .entry("jfif", "'\u{f1c5}'") // ๏
- .entry("jif", "'\u{f1c5}'") // ๏
- .entry("jl", "'\u{e624}'") // ๎ค
- .entry("jmd", "'\u{f48a}'") // ๏
- .entry("jp2", "'\u{f1c5}'") // ๏
- .entry("jpe", "'\u{f1c5}'") // ๏
- .entry("jpeg", "'\u{f1c5}'") // ๏
- .entry("jpf", "'\u{f1c5}'") // ๏
- .entry("jpg", "'\u{f1c5}'") // ๏
- .entry("jpx", "'\u{f1c5}'") // ๏
- .entry("js", "'\u{e74e}'") // ๎
- .entry("json", "'\u{e60b}'") // ๎
- .entry("jsx", "'\u{e7ba}'") // ๎บ
- .entry("jxl", "'\u{f1c5}'") // ๏
- .entry("kdb", "'\u{f23e}'") // ๏พ
- .entry("kdbx", "'\u{f23e}'") // ๏พ
- .entry("key", "'\u{eb11}'") // ๎ฌ
- .entry("ko", "'\u{f17c}'") // ๏
ผ
- .entry("ksh", "'\u{f489}'") // ๏
- .entry("latex", "'\u{e69b}'") // ๎
- .entry("less", "'\u{e758}'") // ๎
- .entry("lhs", "'\u{e777}'") // ๎ท
- .entry("license", "'\u{f02d}'") // ๏ญ
- .entry("localized", "'\u{f179}'") // ๏
น
- .entry("lock", "'\u{f023}'") // ๏ฃ
- .entry("log", "'\u{f18d}'") // ๏
- .entry("lua", "'\u{e620}'") // ๎
- .entry("lz", "'\u{f410}'") // ๏
- .entry("lz4", "'\u{f410}'") // ๏
- .entry("lzh", "'\u{f410}'") // ๏
- .entry("lzma", "'\u{f410}'") // ๏
- .entry("lzo", "'\u{f410}'") // ๏
- .entry("m", "'\u{e61e}'") // ๎
- .entry("m2ts", "'\u{f03d}'") // ๏ฝ
- .entry("m2v", "'\u{f03d}'") // ๏ฝ
- .entry("m4a", "'\u{f001}'") // ๏
- .entry("m4v", "'\u{f03d}'") // ๏ฝ
- .entry("magnet", "'\u{f076}'") // ๏ถ
- .entry("markdown", "'\u{f48a}'") // ๏
- .entry("md", "'\u{f48a}'") // ๏
- .entry("mjs", "'\u{e74e}'") // ๎
- .entry("mk", "'\u{f489}'") // ๏
- .entry("mka", "'\u{f001}'") // ๏
- .entry("mkd", "'\u{f48a}'") // ๏
- .entry("mkv", "'\u{f03d}'") // ๏ฝ
- .entry("ml", "'\u{e67a}'") // ๎บ
- .entry("mli", "'\u{e67a}'") // ๎บ
- .entry("mll", "'\u{e67a}'") // ๎บ
- .entry("mly", "'\u{e67a}'") // ๎บ
- .entry("mm", "'\u{e61d}'") // ๎
- .entry("mobi", "'\u{e28b}'") // ๎
- .entry("mov", "'\u{f03d}'") // ๏ฝ
- .entry("mp2", "'\u{f001}'") // ๏
- .entry("mp3", "'\u{f001}'") // ๏
- .entry("mp4", "'\u{f03d}'") // ๏ฝ
- .entry("mpeg", "'\u{f03d}'") // ๏ฝ
- .entry("mpg", "'\u{f03d}'") // ๏ฝ
- .entry("msi", "'\u{e70f}'") // ๎
- .entry("mts", "'\u{e628}'") // ๎จ
- .entry("mustache", "'\u{e60f}'") // ๎
- .entry("nef", "'\u{f1c5}'") // ๏
- .entry("ninja", "'\u{f0774}'") // ๓ฐด
- .entry("nix", "'\u{f313}'") // ๏
- .entry("node", "'\u{f0399}'") // ๓ฐ
- .entry("npmignore", "'\u{e71e}'") // ๎
- .entry("o", "'\u{eae8}'") // ๎ซจ
- .entry("odp", "'\u{f1c4}'") // ๏
- .entry("ods", "'\u{f1c3}'") // ๏
- .entry("odt", "'\u{f1c2}'") // ๏
- .entry("ogg", "'\u{f001}'") // ๏
- .entry("ogm", "'\u{f03d}'") // ๏ฝ
- .entry("ogv", "'\u{f03d}'") // ๏ฝ
- .entry("opus", "'\u{f001}'") // ๏
- .entry("orf", "'\u{f1c5}'") // ๏
- .entry("org", "'\u{e633}'") // ๎ณ
- .entry("otf", "'\u{f031}'") // ๏ฑ
- .entry("out", "'\u{eb2c}'") // ๎ฌฌ
- .entry("par", "'\u{f410}'") // ๏
- .entry("part", "'\u{f43a}'") // ๏บ
- .entry("patch", "'\u{f440}'") // ๏
- .entry("pbm", "'\u{f1c5}'") // ๏
- .entry("pdf", "'\u{f1c1}'") // ๏
- .entry("pem", "'\u{eb11}'") // ๎ฌ
- .entry("pgm", "'\u{f1c5}'") // ๏
- .entry("php", "'\u{e73d}'") // ๎ฝ
- .entry("pl", "'\u{e769}'") // ๎ฉ
- .entry("plx", "'\u{e769}'") // ๎ฉ
- .entry("pm", "'\u{e769}'") // ๎ฉ
- .entry("png", "'\u{f1c5}'") // ๏
- .entry("pnm", "'\u{f1c5}'") // ๏
- .entry("pod", "'\u{e769}'") // ๎ฉ
- .entry("ppm", "'\u{f1c5}'") // ๏
- .entry("ppt", "'\u{f1c4}'") // ๏
- .entry("pptx", "'\u{f1c4}'") // ๏
- .entry("procfile", "'\u{e21e}'") // ๎
- .entry("properties", "'\u{e60b}'") // ๎
- .entry("ps", "'\u{f1c5}'") // ๏
- .entry("ps1", "'\u{ebc7}'") // ๎ฏ
- .entry("psd", "'\u{e7b8}'") // ๎ธ
- .entry("psd1", "'\u{ebc7}'") // ๎ฏ
- .entry("psm1", "'\u{ebc7}'") // ๎ฏ
- .entry("pxm", "'\u{f1c5}'") // ๏
- .entry("py", "'\u{e606}'") // ๎
- .entry("pyc", "'\u{e606}'") // ๎
- .entry("qcow2", "'\u{e271}'") // ๎ฑ
- .entry("r", "'\u{f25d}'") // ๏
- .entry("rakefile", "'\u{e21e}'") // ๎
- .entry("rar", "'\u{f410}'") // ๏
- .entry("raw", "'\u{f1c5}'") // ๏
- .entry("razor", "'\u{f1fa}'") // ๏บ
- .entry("rb", "'\u{e21e}'") // ๎
- .entry("rdata", "'\u{f25d}'") // ๏
- .entry("rdb", "'\u{e76d}'") // ๎ญ
- .entry("rdoc", "'\u{f48a}'") // ๏
- .entry("rds", "'\u{f25d}'") // ๏
- .entry("readme", "'\u{f48a}'") // ๏
- .entry("rlib", "'\u{e7a8}'") // ๎จ
- .entry("rmd", "'\u{f48a}'") // ๏
- .entry("rmeta", "'\u{e7a8}'") // ๎จ
- .entry("rpm", "'\u{e7bb}'") // ๎ป
- .entry("rs", "'\u{e7a8}'") // ๎จ
- .entry("rspec", "'\u{e21e}'") // ๎
- .entry("rspec_parallel","'\u{e21e}'") // ๎
- .entry("rspec_status", "'\u{e21e}'") // ๎
- .entry("rss", "'\u{f09e}'") // ๏
- .entry("rst", "'\u{f15c}'") // ๏
- .entry("rtf", "'\u{f0219}'") // ๓ฐ
- .entry("ru", "'\u{e21e}'") // ๎
- .entry("rubydoc", "'\u{e73b}'") // ๎ป
- .entry("s", "'\u{e637}'") // ๎ท
- .entry("sass", "'\u{e603}'") // ๎
- .entry("scala", "'\u{e737}'") // ๎ท
- .entry("scss", "'\u{e749}'") // ๎
- .entry("service", "'\u{eba2}'") // ๎ฎข
- .entry("sh", "'\u{f489}'") // ๏
- .entry("shell", "'\u{f489}'") // ๏
- .entry("slim", "'\u{e73b}'") // ๎ป
- .entry("sln", "'\u{e70c}'") // ๎
- .entry("so", "'\u{f17c}'") // ๏
ผ
- .entry("sql", "'\u{f1c0}'") // ๎
- .entry("sqlite3", "'\u{e7c4}'") // ๎
- .entry("stl", "'\u{f1c5}'") // ๏
- .entry("sty", "'\u{e69b}'") // ๎
- .entry("styl", "'\u{e600}'") // ๎
- .entry("stylus", "'\u{e600}'") // ๎
- .entry("svelte", "'\u{e697}'") // ๎
- .entry("svg", "'\u{f1c5}'") // ๏
- .entry("swift", "'\u{e755}'") // ๎
- .entry("t", "'\u{e769}'") // ๎ฉ
- .entry("tar", "'\u{f410}'") // ๏
- .entry("taz", "'\u{f410}'") // ๏
- .entry("tbz", "'\u{f410}'") // ๏
- .entry("tbz2", "'\u{f410}'") // ๏
- .entry("tc", "'\u{f410}'") // ๏
- .entry("tex", "'\u{e69b}'") // ๎
- .entry("tgz", "'\u{f410}'") // ๏
- .entry("tif", "'\u{f1c5}'") // ๏
- .entry("tiff", "'\u{f1c5}'") // ๏
- .entry("tlz", "'\u{f410}'") // ๏
- .entry("toml", "'\u{e615}'") // ๎
- .entry("torrent", "'\u{e275}'") // ๎ต
- .entry("ts", "'\u{e628}'") // ๎จ
- .entry("tsv", "'\u{f1c3}'") // ๏
- .entry("tsx", "'\u{e7ba}'") // ๎บ
- .entry("ttf", "'\u{f031}'") // ๏ฑ
- .entry("twig", "'\u{e61c}'") // ๎
- .entry("txt", "'\u{f15c}'") // ๏
- .entry("txz", "'\u{f410}'") // ๏
- .entry("tz", "'\u{f410}'") // ๏
- .entry("tzo", "'\u{f410}'") // ๏
- .entry("unity", "'\u{e721}'") // ๎ก
- .entry("unity3d", "'\u{e721}'") // ๎ก
- .entry("vdi", "'\u{e271}'") // ๎ฑ
- .entry("vhd", "'\u{e271}'") // ๎ฑ
- .entry("video", "'\u{f03d}'") // ๏ฝ
- .entry("vim", "'\u{e7c5}'") // ๎
- .entry("vmdk", "'\u{e271}'") // ๎ฑ
- .entry("vob", "'\u{f03d}'") // ๏ฝ
- .entry("vue", "'\u{f0844}'") // ๓ฐก
- .entry("war", "'\u{e256}'") // ๎
- .entry("wav", "'\u{f001}'") // ๏
- .entry("webm", "'\u{f03d}'") // ๏ฝ
- .entry("webp", "'\u{f1c5}'") // ๏
- .entry("windows", "'\u{f17a}'") // ๏
บ
- .entry("wma", "'\u{f001}'") // ๏
- .entry("wmv", "'\u{f03d}'") // ๏ฝ
- .entry("woff", "'\u{f031}'") // ๏ฑ
- .entry("woff2", "'\u{f031}'") // ๏ฑ
- .entry("xhtml", "'\u{f13b}'") // ๏ป
- .entry("xls", "'\u{f1c3}'") // ๏
- .entry("xlsm", "'\u{f1c3}'") // ๏
- .entry("xlsx", "'\u{f1c3}'") // ๏
- .entry("xml", "'\u{f05c0}'") // ๓ฐ
- .entry("xpm", "'\u{f1c5}'") // ๏
- .entry("xul", "'\u{f05c0}'") // ๓ฐ
- .entry("xz", "'\u{f410}'") // ๏
- .entry("yaml", "'\u{f481}'") // ๏
- .entry("yml", "'\u{f481}'") // ๏
- .entry("z", "'\u{f410}'") // ๏
- .entry("zig", "'\u{21af}'") // โฏ
- .entry("zip", "'\u{f410}'") // ๏
- .entry("zsh", "'\u{f489}'") // ๏
- .entry("zsh-theme", "'\u{f489}'") // ๏
- .entry("zshrc", "'\u{f489}'") // ๏
- .entry("zst", "'\u{f410}'") // ๏
- .build()
- )
- }
|