diff options
Diffstat (limited to 'utils/Icons.qml')
| -rw-r--r-- | utils/Icons.qml | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/utils/Icons.qml b/utils/Icons.qml new file mode 100644 index 0000000..1f0a947 --- /dev/null +++ b/utils/Icons.qml @@ -0,0 +1,181 @@ +pragma Singleton + +import Quickshell +import Quickshell.Io + +Singleton { + id: root + + readonly property var osIcons: ({ + almalinux: "", + alpine: "", + arch: "", + archcraft: "", + arcolinux: "", + artix: "", + centos: "", + debian: "", + devuan: "", + elementary: "", + endeavouros: "", + fedora: "", + freebsd: "", + garuda: "", + gentoo: "", + hyperbola: "", + kali: "", + linuxmint: "", + mageia: "", + openmandriva: "", + manjaro: "", + neon: "", + nixos: "", + opensuse: "", + suse: "", + sles: "", + sles_sap: "", + "opensuse-tumbleweed": "", + parrot: "", + pop: "", + raspbian: "", + rhel: "", + rocky: "", + slackware: "", + solus: "", + steamos: "", + tails: "", + trisquel: "", + ubuntu: "", + vanilla: "", + void: "", + zorin: "" + }) + + readonly property var weatherIcons: ({ + warning: "", + sunny: "", + clear: "", + partly_cloudy: "", + partly_cloudy_night: "", + cloudy: "", + overcast: "", + mist: "", + patchy_rain_nearby: "", + patchy_rain_possible: "", + patchy_snow_possible: "", + patchy_sleet_possible: "", + patchy_freezing_drizzle_possible: "", + thundery_outbreaks_possible: "", + blowing_snow: "", + blizzard: "", + fog: "", + freezing_fog: "", + patchy_light_drizzle: "", + light_drizzle: "", + freezing_drizzle: "", + heavy_freezing_drizzle: "", + patchy_light_rain: "", + light_rain: "", + moderate_rain_at_times: "", + moderate_rain: "", + heavy_rain_at_times: "", + heavy_rain: "", + light_freezing_rain: "", + moderate_or_heavy_freezing_rain: "", + light_sleet: "", + moderate_or_heavy_sleet: "", + patchy_light_snow: "", + light_snow: "", + patchy_moderate_snow: "", + moderate_snow: "", + patchy_heavy_snow: "", + heavy_snow: "", + ice_pellets: "", + light_rain_shower: "", + moderate_or_heavy_rain_shower: "", + torrential_rain_shower: "", + light_sleet_showers: "", + moderate_or_heavy_sleet_showers: "", + light_snow_showers: "", + moderate_or_heavy_snow_showers: "", + light_showers_of_ice_pellets: "", + moderate_or_heavy_showers_of_ice_pellets: "", + patchy_light_rain_with_thunder: "", + moderate_or_heavy_rain_with_thunder: "", + moderate_or_heavy_rain_in_area_with_thunder: "", + patchy_light_snow_with_thunder: "", + moderate_or_heavy_snow_with_thunder: "" + }) + + readonly property var desktopEntrySubs: ({ + Firefox: "firefox" + }) + + readonly property var categoryIcons: ({ + 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" + }) + + property string osIcon: "" + + function getAppCategoryIcon(name) { + if (!name) + return null; + + const categories = DesktopEntries.applications.values.find(app => app.id === name)?.categories; + + if (categories) + for (const [key, value] of Object.entries(this.categoryIcons)) + if (categories.includes(key)) + return value; + return "terminal"; + } + + FileView { + path: "/etc/os-release" + onLoaded: { + const osId = this.text().split("\n").find(l => l.startsWith("ID="))?.split("=")[1]; + if (root.osIcons.hasOwnProperty(osId)) + return root.osIcon = root.osIcons[osId]; + const osIdLike = this.text().split("\n").find(l => l.startsWith("ID_LIKE="))?.split("=")[1]; + if (osIdLike) + for (const id of osIdLike.split(" ")) + if (root.osIcons.hasOwnProperty(id)) + return root.osIcon = root.osIcons[id]; + } + } +} |