Functions/GenXdev.FileSystem/FileExtensionGroups.cs

namespace GenXdev.FileSystem
{
    public static class FileGroups
    {
        public static readonly Dictionary<string, HashSet<string>> Groups =
            new Dictionary<string, HashSet<string>>(StringComparer.OrdinalIgnoreCase)
            {
                // Everyday categories
                ["Pictures"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".tif", ".heic", ".webp", ".raw", ".cr2", ".nef", ".orf", ".arw" },
 
                ["Videos"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".mp4", ".mkv", ".avi", ".mov", ".wmv", ".flv", ".mpeg", ".mpg", ".m4v", ".3gp", ".webm" },
 
                ["Music"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".mp3", ".wav", ".flac", ".aac", ".ogg", ".wma", ".m4a", ".alac", ".aiff", ".mid", ".midi" },
 
                ["Documents"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".doc", ".docx", ".odt", ".rtf", ".pdf", ".tex", ".wpd" },
 
                ["Spreadsheets"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".xls", ".xlsx", ".ods", ".csv", ".tsv" },
 
                ["Presentations"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".ppt", ".pptx", ".odp", ".key" },
 
                ["Archives"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            {
            ".7z", ".7z.001",
            ".xz", ".bzip2", ".gzip", ".tar", ".zip", ".zip.001",
            ".wim", ".ar", ".arj", ".cab", ".chm", ".cpio", ".cramfs",
            ".dmg", ".ext", ".fat", ".gpt", ".hfs", ".ihex", ".iso",
            ".lzh", ".lzma", ".mbr", ".msi", ".nsis", ".ntfs", ".qcow2",
            ".rar", ".rpm", ".squashfs", ".udf", ".uefi", ".vdi", ".vhd",
            ".vmdk", ".xar", ".z"
            },
 
                ["Installers"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".msi", ".exe", ".apk", ".dmg", ".pkg", ".deb", ".rpm" },
 
                ["Executables"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".exe", ".com", ".bin", ".app", ".out", ".elf", ".scr" },
 
                ["Databases"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".db", ".sqlite", ".accdb", ".mdb", ".sql", ".dbf", ".ndf", ".ldf" },
 
                ["DesignFiles"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".psd", ".ai", ".indd", ".xd", ".fig", ".sketch", ".cdr", ".dwg", ".dxf" },
 
                ["Ebooks"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".epub", ".mobi", ".azw3", ".fb2", ".pdf" },
 
                ["Subtitles"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".srt", ".vtt", ".sub", ".ssa", ".ass" },
 
                ["Fonts"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".ttf", ".otf", ".woff", ".woff2", ".eot" },
 
                ["EmailFiles"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".eml", ".msg", ".pst", ".ost", ".mbox" },
 
                ["3DModels"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".obj", ".stl", ".fbx", ".blend", ".3ds", ".dae", ".ply" },
 
                ["GameAssets"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".pak", ".wad", ".sav", ".dat", ".uasset", ".utx", ".bsp" },
 
                ["MedicalFiles"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".dcm", ".dicom", ".nii", ".hdr", ".img" },
 
                ["FinancialFiles"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".qbw", ".qbb", ".qfx", ".ofx", ".gnucash", ".xls", ".xlsx", ".csv" },
 
                ["LegalFiles"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".docx", ".pdf", ".rtf", ".odt" },
 
                // Developer / power user categories
                ["SourceCode"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".cs", ".java", ".py", ".cpp", ".c", ".h", ".hpp", ".js", ".ts", ".go", ".rb", ".php", ".swift", ".rs", ".kt", ".m", ".scala" },
 
                ["Scripts"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".ps1", ".bat", ".cmd", ".sh", ".bash", ".zsh", ".fish", ".pl", ".awk", ".tcl" },
 
                ["MarkupAndData"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".xml", ".json", ".yaml", ".yml", ".toml", ".ini", ".cfg", ".conf", ".csv", ".tsv" },
 
                ["Configuration"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".ini", ".cfg", ".conf", ".properties", ".env" },
 
                ["Logs"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".log", ".out", ".err", ".trace" },
 
                ["TextFiles"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".txt", ".md", ".rst", ".nfo", ".asc" },
 
                ["WebFiles"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".html", ".htm", ".xhtml", ".css", ".scss", ".less", ".js" },
 
                ["MusicLyricsAndChords"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".chordpro", ".cho", ".crd", ".ly", ".abc" },
 
                ["CreativeWriting"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".story", ".novel", ".poem", ".lyrics", ".txt", ".md" },
 
                ["Recipes"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".recipe", ".cook", ".txt", ".md" },
 
                ["ResearchFiles"] = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            { ".bib", ".ris", ".enl", ".nbib", ".tex", ".pdf", ".csv" }
            };
    }
}