Files
Signal-Desktop/ts/util/os/osMain.node.ts
2025-11-19 12:00:37 -08:00

65 lines
1.3 KiB
TypeScript

// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import os from 'node:os';
import fsExtra from 'fs-extra';
import { getOSFunctions } from './shared.std.js';
const { readFileSync } = fsExtra;
function getLinuxName(): string | undefined {
if (os.platform() !== 'linux') {
return undefined;
}
const etcOsRelease = readFileSync('/etc/os-release', 'utf-8');
const match = etcOsRelease.match(/^PRETTY_NAME=(.+?)$/m);
if (!match) {
return undefined;
}
const name = match[1];
if (isAppImage()) {
return `${name} (AppImage)`;
}
// Flatpak is noted already in /etc/os-release
return name;
}
function isAppImage(): boolean {
return process.platform === 'linux' && process.env.APPIMAGE != null;
}
function isFlatpak(): boolean {
if (process.env.container === 'flatpak') {
return true;
}
const linuxName = getLinuxName();
if (linuxName && linuxName.toLowerCase().includes('flatpak')) {
return true;
}
return false;
}
function isWaylandEnabled(): boolean {
return Boolean(process.env.WAYLAND_DISPLAY);
}
function isLinuxUsingKDE(): boolean {
return os.platform() === 'linux' && process.env.XDG_CURRENT_DESKTOP === 'KDE';
}
const OS = {
...getOSFunctions(os.release()),
getLinuxName,
isAppImage,
isFlatpak,
isLinuxUsingKDE,
isWaylandEnabled,
};
export default OS;