package main import ( "os" "path/filepath" "strings" "github.com/fatih/color" ) // Dateityp → Farbe, nach den file_type-Rollen des eza-Themes // (~/src/mwxcol/themes/eza/theme.yml), damit dieselbe Datei in eza und dx // dieselbe Farbe hat. var byExt = map[string]*color.Color{} func register(c *color.Color, exts ...string) { for _, e := range exts { byExt[e] = c } } func init() { // source — blau register(cBlue, "go", "c", "h", "cc", "cpp", "cxx", "hpp", "rs", "py", "pl", "pm", "t", "sh", "bash", "zsh", "fish", "js", "mjs", "cjs", "ts", "jsx", "tsx", "rb", "java", "kt", "swift", "m", "mm", "php", "lua", "sql", "r", "jl", "hs", "el", "vim", "scala", "cs", "dart", "zig", "asm", "s", "f90", "html", "htm", "css", "scss", "sass", "less", "vue", "svelte", "json", "yml", "yaml", "toml", "ini", "conf", "cfg", "xml", "plist", "md", "markdown", "tex", "awk", "sed") // compressed — orange register(cOrange, "zip", "tar", "gz", "tgz", "bz2", "tbz", "xz", "txz", "zst", "7z", "rar", "lz", "lzma", "z", "jar", "war", "dmg", "iso", "pkg", "deb", "rpm") // image — violett register(cViolet, "jpg", "jpeg", "png", "gif", "bmp", "tif", "tiff", "svg", "webp", "heic", "heif", "ico", "psd", "ai", "eps", "raw", "cr2", "nef", "dng", "stl", "obj3d") // video — pink register(cPink, "mp4", "mov", "avi", "mkv", "webm", "m4v", "mpg", "mpeg", "wmv", "flv", "m2ts") // music / lossless — grün register(cGreen, "mp3", "aac", "m4a", "ogg", "opus", "wma", "flac", "wav", "aiff", "aif", "alac") // crypto — rot register(cRed, "asc", "gpg", "pgp", "sig", "key", "pem", "crt", "cer", "p12", "kdbx") // document — weiß register(cWhite, "pdf", "doc", "docx", "odt", "xls", "xlsx", "ods", "ppt", "pptx", "odp", "epub", "rtf", "txt", "csv", "pages", "numbers") // compiled — grau register(cGrey, "o", "a", "so", "dylib", "obj", "lib", "class", "pyc", "pyo", "wasm", "d") // temp — dunkel register(cDarker, "tmp", "temp", "swp", "swo", "bak", "old", "orig", "rej", "lock", "part", "crdownload", "log") } // build — gelb (README, Makefile, …) var byName = map[string]*color.Color{ "makefile": cYellow, "gnumakefile": cYellow, "cmakelists.txt": cYellow, "dockerfile": cYellow, "justfile": cYellow, "rakefile": cYellow, "go.mod": cYellow, "go.sum": cYellow, "package.json": cYellow, "package-lock.json": cYellow, "cargo.toml": cYellow, "cargo.lock": cYellow, "license": cYellow, "copying": cYellow, ".ds_store": cDarker, ".gitignore": cDark, ".gitattributes": cDark, } func fileColor(name string, mode os.FileMode) *color.Color { if mode&0o111 != 0 { // ausführbar schlägt alles andere, wie in eza return cExecB } low := strings.ToLower(name) if c, ok := byName[low]; ok { return c } if strings.HasPrefix(low, "readme") || strings.HasPrefix(low, "makefile") { return cYellow } if strings.HasSuffix(name, "~") { return cDarker } if ext := strings.TrimPrefix(filepath.Ext(low), "."); ext != "" { if c, ok := byExt[ext]; ok { return c } } return cWhite }