whoami/desktop_env.rs
1use std::fmt::{self, Display, Formatter};
2
3// FIXME: V2: Move `Unknown` variants to the top of the enum.
4
5/// The desktop environment of a system
6#[derive(Debug, PartialEq, Eq, Clone)]
7#[non_exhaustive]
8pub enum DesktopEnv {
9 /// Popular GTK-based desktop environment on Linux
10 Gnome,
11 /// One of the desktop environments for a specific version of Windows
12 Windows,
13 /// Linux desktop environment optimized for low resource requirements
14 Lxde,
15 /// Stacking window manager for X Windows on Linux
16 Openbox,
17 /// Desktop environment for Linux, BSD and illumos
18 Mate,
19 /// Lightweight desktop enivornment for unix-like operating systems
20 Xfce,
21 /// KDE Plasma desktop enviroment
22 // FIXME: Rename to 'Plasma' in whoami 2.0.0
23 Kde,
24 /// Default desktop environment on Linux Mint
25 Cinnamon,
26 /// Tiling window manager for Linux
27 I3,
28 /// Desktop environment for MacOS
29 Aqua,
30 /// Desktop environment for iOS
31 Ios,
32 /// Desktop environment for Android
33 Android,
34 /// Running as Web Assembly on a web page
35 WebBrowser,
36 /// A desktop environment for a video game console
37 Console,
38 /// Ubuntu-branded GNOME
39 Ubuntu,
40 /// Default shell for Fuchsia
41 Ermine,
42 /// Default desktop environment for Redox
43 Orbital,
44 /// Unknown desktop environment
45 Unknown(String),
46}
47
48impl Display for DesktopEnv {
49 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
50 if let Self::Unknown(_) = self {
51 f.write_str("Unknown: ")?;
52 }
53
54 f.write_str(match self {
55 Self::Gnome => "Gnome",
56 Self::Windows => "Windows",
57 Self::Lxde => "LXDE",
58 Self::Openbox => "Openbox",
59 Self::Mate => "Mate",
60 Self::Xfce => "XFCE",
61 Self::Kde => "KDE",
62 Self::Cinnamon => "Cinnamon",
63 Self::I3 => "I3",
64 Self::Aqua => "Aqua",
65 Self::Ios => "IOS",
66 Self::Android => "Android",
67 Self::WebBrowser => "Web Browser",
68 Self::Console => "Console",
69 Self::Ubuntu => "Ubuntu",
70 Self::Ermine => "Ermine",
71 Self::Orbital => "Orbital",
72 Self::Unknown(a) => a,
73 })
74 }
75}
76
77impl DesktopEnv {
78 /// Returns true if the desktop environment is based on GTK.
79 pub fn is_gtk(&self) -> bool {
80 *self == Self::Gnome
81 || *self == Self::Ubuntu
82 || *self == Self::Cinnamon
83 || *self == Self::Lxde
84 || *self == Self::Mate
85 || *self == Self::Xfce
86 }
87
88 /// Returns true if the desktop environment is based on KDE.
89 pub fn is_kde(&self) -> bool {
90 *self == Self::Kde
91 }
92}