nosignal-shell/utils/icons.ts
2 * r + 2 * t 9a22de4954 notifpopups: fix app icon
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
2025-01-13 14:04:19 +11:00

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";
};