diff --git a/extra_platforms/__init__.py b/extra_platforms/__init__.py
index 7679544d..7b4ac7f1 100644
--- a/extra_platforms/__init__.py
+++ b/extra_platforms/__init__.py
@@ -61,6 +61,7 @@
is_sles,
is_solaris,
is_sunos,
+ is_tuxedo,
is_ubuntu,
is_unknown_linux,
is_windows,
@@ -125,6 +126,7 @@
SLES,
SOLARIS,
SUNOS,
+ TUXEDO,
UBUNTU,
UNKNOWN_LINUX,
WINDOWS,
@@ -273,6 +275,7 @@ def current_os() -> Platform:
"is_solaris", # noqa: F405
"is_sunos", # noqa: F405
"is_system_v", # noqa: F405, F822
+ "is_tuxedo", # noqa: F405, F822
"is_ubuntu", # noqa: F405
"is_unix", # noqa: F405, F822
"is_unix_layers", # noqa: F405, F822
@@ -310,6 +313,7 @@ def current_os() -> Platform:
"SOLARIS", # noqa: F405
"SUNOS", # noqa: F405
"SYSTEM_V", # noqa: F405
+ "TUXEDO", # noqa: F405
"UBUNTU", # noqa: F405
"UNIX", # noqa: F405
"UNIX_LAYERS", # noqa: F405
diff --git a/extra_platforms/detection.py b/extra_platforms/detection.py
index ad838c50..ab5361f1 100644
--- a/extra_platforms/detection.py
+++ b/extra_platforms/detection.py
@@ -272,6 +272,12 @@ def is_sunos() -> bool:
return platform.platform(aliased=True, terse=True).startswith("SunOS")
+@cache
+def is_tuxedo() -> bool:
+ """Return `True` only if current platform is Tuxedo OS."""
+ return distro.id() == "tuxedo"
+
+
@cache
def is_ubuntu() -> bool:
"""Return `True` only if current platform is Ubuntu."""
@@ -313,6 +319,7 @@ def is_unknown_linux() -> bool:
or is_scientific()
or is_slackware()
or is_sles()
+ or is_tuxedo()
or is_ubuntu()
or is_xenserver()
or is_wsl1()
diff --git a/extra_platforms/groups.py b/extra_platforms/groups.py
index 544c0348..528508e0 100644
--- a/extra_platforms/groups.py
+++ b/extra_platforms/groups.py
@@ -59,6 +59,7 @@
SLES,
SOLARIS,
SUNOS,
+ TUXEDO,
UBUNTU,
UNKNOWN_LINUX,
WINDOWS,
@@ -189,6 +190,7 @@ def issuperset(self, other: Group | Iterable[Platform] | Platform) -> bool:
SLES,
SOLARIS,
SUNOS,
+ TUXEDO,
UBUNTU,
UNKNOWN_LINUX,
WINDOWS,
@@ -286,6 +288,7 @@ def issuperset(self, other: Group | Iterable[Platform] | Platform) -> bool:
SCIENTIFIC,
SLACKWARE,
SLES,
+ TUXEDO,
UBUNTU,
UNKNOWN_LINUX,
XENSERVER,
diff --git a/extra_platforms/platforms.py b/extra_platforms/platforms.py
index 2f8c03ed..2065c0d7 100644
--- a/extra_platforms/platforms.py
+++ b/extra_platforms/platforms.py
@@ -277,6 +277,7 @@ def _windows_infos() -> dict[str, Any]:
SLES = Platform("sles", "SUSE Linux Enterprise Server", "🦎")
SOLARIS = Platform("solaris", "Solaris", "🌞")
SUNOS = Platform("sunos", "SunOS", "☀️")
+TUXEDO = Platform("tuxedo", "Tuxedo OS")
UBUNTU = Platform("ubuntu", "Ubuntu", "🎯")
UNKNOWN_LINUX = Platform("unknown_linux", "Unknown Linux", "🐧")
WINDOWS = Platform("windows", "Windows", "🪟")
diff --git a/readme.md b/readme.md
index adcf2ed1..2a005586 100644
--- a/readme.md
+++ b/readme.md
@@ -98,7 +98,7 @@ List all platforms of a family:
>>> from extra_platforms import LINUX
>>> LINUX
-Group(id='linux', name='Any Linux', platform_ids=frozenset({'ibm_powerkvm', 'rocky', 'debian', 'ubuntu', 'mageia', 'xenserver', 'opensuse', 'buildroot', 'rhel', 'parallels', 'pidora', 'sles', 'amzn', 'scientific', 'linuxmint', 'centos', 'android', 'gentoo', 'raspbian', 'unknown_linux', 'mandriva', 'exherbo', 'cloudlinux', 'fedora', 'guix', 'arch', 'altlinux', 'slackware', 'oracle', 'kvmibm'}))
+Group(id='linux', name='Any Linux', platform_ids=frozenset({'ibm_powerkvm', 'rocky', 'debian', 'tuxedo', 'ubuntu', 'mageia', 'xenserver', 'opensuse', 'buildroot', 'rhel', 'parallels', 'pidora', 'sles', 'amzn', 'scientific', 'linuxmint', 'centos', 'android', 'gentoo', 'raspbian', 'unknown_linux', 'mandriva', 'exherbo', 'cloudlinux', 'fedora', 'guix', 'arch', 'altlinux', 'slackware', 'oracle', 'kvmibm'}))
>>> print("\n".join([p.name for p in LINUX]))
ALT Linux
@@ -128,6 +128,7 @@ Rocky Linux
Scientific Linux
Slackware
SUSE Linux Enterprise Server
+Tuxedo OS
Ubuntu
Unknown Linux
XenServer
@@ -202,6 +203,7 @@ all_platforms,slackware,1
all_platforms,sles,1
all_platforms,solaris,1
all_platforms,sunos,1
+all_platforms,tuxedo,1
all_platforms,ubuntu,1
all_platforms,unknown_linux,1
all_platforms,windows,1
@@ -245,6 +247,7 @@ unix,slackware,1
unix,sles,1
unix,solaris,1
unix,sunos,1
+unix,tuxedo,1
unix,ubuntu,1
unix,unknown_linux,1
unix,wsl1,1
@@ -318,6 +321,7 @@ linux_like,rocky,1
linux_like,scientific,1
linux_like,slackware,1
linux_like,sles,1
+linux_like,tuxedo,1
linux_like,ubuntu,1
linux_like,unknown_linux,1
linux_like,wsl1,1
@@ -350,6 +354,7 @@ linux,rocky,1
linux,scientific,1
linux,slackware,1
linux,sles,1
+linux,tuxedo,1
linux,ubuntu,1
linux,unknown_linux,1
linux,xenserver,1
@@ -424,6 +429,7 @@ flowchart
linux_scientific(scientific
❓ Scientific Linux)
linux_slackware(slackware
❓ Slackware)
linux_sles(sles
🦎 SUSE Linux Enterprise Server)
+ linux_tuxedo(tuxedo
❓ Tuxedo OS)
linux_ubuntu(ubuntu
🎯 Ubuntu)
linux_unknown_linux(unknown_linux
🐧 Unknown Linux)
linux_xenserver(xenserver
❓ XenServer)
@@ -494,6 +500,7 @@ flowchart
all_platforms_sles(sles
🦎 SUSE Linux Enterprise Server)
all_platforms_solaris(solaris
🌞 Solaris)
all_platforms_sunos(sunos
☀️ SunOS)
+ all_platforms_tuxedo(tuxedo
❓ Tuxedo OS)
all_platforms_ubuntu(ubuntu
🎯 Ubuntu)
all_platforms_unknown_linux(unknown_linux
🐧 Unknown Linux)
all_platforms_windows(windows
🪟 Windows)
@@ -536,6 +543,7 @@ flowchart
linux_like_scientific(scientific
❓ Scientific Linux)
linux_like_slackware(slackware
❓ Slackware)
linux_like_sles(sles
🦎 SUSE Linux Enterprise Server)
+ linux_like_tuxedo(tuxedo
❓ Tuxedo OS)
linux_like_ubuntu(ubuntu
🎯 Ubuntu)
linux_like_unknown_linux(unknown_linux
🐧 Unknown Linux)
linux_like_wsl1(wsl1
⊞ Windows Subsystem for Linux v1)
@@ -580,6 +588,7 @@ flowchart
unix_sles(sles
🦎 SUSE Linux Enterprise Server)
unix_solaris(solaris
🌞 Solaris)
unix_sunos(sunos
☀️ SunOS)
+ unix_tuxedo(tuxedo
❓ Tuxedo OS)
unix_ubuntu(ubuntu
🎯 Ubuntu)
unix_unknown_linux(unknown_linux
🐧 Unknown Linux)
unix_wsl1(wsl1
⊞ Windows Subsystem for Linux v1)
@@ -623,6 +632,7 @@ flowchart
unix_without_macos_sles(sles
🦎 SUSE Linux Enterprise Server)
unix_without_macos_solaris(solaris
🌞 Solaris)
unix_without_macos_sunos(sunos
☀️ SunOS)
+ unix_without_macos_tuxedo(tuxedo
❓ Tuxedo OS)
unix_without_macos_ubuntu(ubuntu
🎯 Ubuntu)
unix_without_macos_unknown_linux(unknown_linux
🐧 Unknown Linux)
unix_without_macos_wsl1(wsl1
⊞ Windows Subsystem for Linux v1)
diff --git a/tests/test_platforms.py b/tests/test_platforms.py
index 9ef804e5..08623676 100644
--- a/tests/test_platforms.py
+++ b/tests/test_platforms.py
@@ -78,6 +78,7 @@
SOLARIS,
SUNOS,
SYSTEM_V,
+ TUXEDO,
UBUNTU,
UNIX,
UNIX_LAYERS,
@@ -126,6 +127,7 @@
is_sles,
is_solaris,
is_sunos,
+ is_tuxedo,
is_ubuntu,
is_unknown_linux,
is_windows,
@@ -229,6 +231,7 @@ def test_mutual_exclusion():
assert not is_sles()
assert not is_solaris()
assert not is_sunos()
+ assert not is_tuxedo()
# assert not is_ubuntu()
assert not is_unknown_linux()
assert not is_windows()
@@ -276,6 +279,7 @@ def test_mutual_exclusion():
assert not is_sles()
assert not is_solaris()
assert not is_sunos()
+ assert not is_tuxedo()
assert not is_ubuntu()
assert not is_unknown_linux()
assert not is_windows()
@@ -323,6 +327,7 @@ def test_mutual_exclusion():
assert not is_sles()
assert not is_solaris()
assert not is_sunos()
+ assert not is_tuxedo()
assert not is_ubuntu()
assert not is_unknown_linux()
# assert not is_windows()
@@ -634,6 +639,7 @@ def test_overlapping_groups():
SLES,
SOLARIS,
SUNOS,
+ TUXEDO,
UBUNTU,
UNKNOWN_LINUX,
WINDOWS,