For some reason firefox gives its desktop entry with as Firefox while the icon is lowercase, so use subs Also use icon lookups to check so no broken icons
83 lines
2.1 KiB
TypeScript
83 lines
2.1 KiB
TypeScript
import { Gio } from "astal";
|
|
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 = (name: string) => {
|
|
const categories =
|
|
Gio.DesktopAppInfo.new(`${name}.desktop`)?.get_categories()?.split(";") ??
|
|
Apps.fuzzy_query(name)[0]?.categories;
|
|
if (categories)
|
|
for (const [key, value] of Object.entries(categoryIcons)) if (categories.includes(key)) return value;
|
|
return "terminal";
|
|
};
|