summaryrefslogtreecommitdiff
path: root/src/utils/icons.ts
blob: f12aee0c46d8f99abd14476e2769720788e06607 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import { Gio } from "astal";
import type AstalApps from "gi://AstalApps";
import { Apps } from "../services/apps";

// Code points from https://www.github.com/lukas-w/font-logos
export const osIcons: Record<string, number> = {
    almalinux: 0xf31d,
    alpine: 0xf300,
    arch: 0xf303,
    arcolinux: 0xf346,
    centos: 0x304,
    debian: 0xf306,
    elementary: 0xf309,
    endeavouros: 0xf322,
    fedora: 0xf30a,
    gentoo: 0xf30d,
    kali: 0xf327,
    linuxmint: 0xf30e,
    mageia: 0xf310,
    manjaro: 0xf312,
    nixos: 0xf313,
    opensuse: 0xf314,
    suse: 0xf314,
    sles: 0xf314,
    sles_sap: 0xf314,
    pop: 0xf32a,
    raspbian: 0xf315,
    rhel: 0xf316,
    rocky: 0xf32b,
    slackware: 0xf318,
    ubuntu: 0xf31b,
};

export const desktopEntrySubs: Record<string, string> = {
    Firefox: "firefox",
};

const categoryIcons: Record<string, string> = {
    WebBrowser: "web",
    Printing: "print",
    Security: "security",
    Network: "chat",
    Archiving: "archive",
    Compression: "archive",
    Development: "code",
    IDE: "code",
    TextEditor: "edit_note",
    Audio: "music_note",
    Music: "music_note",
    Player: "music_note",
    Recorder: "mic",
    Game: "sports_esports",
    FileTools: "files",
    FileManager: "files",
    Filesystem: "files",
    FileTransfer: "files",
    Settings: "settings",
    DesktopSettings: "settings",
    HardwareSettings: "settings",
    TerminalEmulator: "terminal",
    ConsoleOnly: "terminal",
    Utility: "build",
    Monitor: "monitor_heart",
    Midi: "graphic_eq",
    Mixer: "graphic_eq",
    AudioVideoEditing: "video_settings",
    AudioVideo: "music_video",
    Video: "videocam",
    Building: "construction",
    Graphics: "photo_library",
    "2DGraphics": "photo_library",
    RasterGraphics: "photo_library",
    TV: "tv",
    System: "host",
};

export const getAppCategoryIcon = (nameOrApp: string | AstalApps.Application) => {
    const categories =
        typeof nameOrApp === "string"
            ? Gio.DesktopAppInfo.new(`${nameOrApp}.desktop`)?.get_categories()?.split(";") ??
              Apps.fuzzy_query(nameOrApp)[0]?.categories
            : nameOrApp.categories;
    if (categories)
        for (const [key, value] of Object.entries(categoryIcons)) if (categories.includes(key)) return value;
    return "terminal";
};