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}