diff --git a/packages/main/src/plugin/directories-legacy.spec.ts b/packages/main/src/plugin/directories-legacy.spec.ts index 6699725a363..6ec006d8183 100644 --- a/packages/main/src/plugin/directories-legacy.spec.ts +++ b/packages/main/src/plugin/directories-legacy.spec.ts @@ -177,6 +177,18 @@ describe('LegacyDirectories', () => { expect(provider.getManagedDefaultsDirectory()).toBe(product.paths.managed.linux); }); + test('should return flatpak managed folder path when running on Linux in Flatpak', () => { + vi.mocked(isMac).mockReturnValue(false); + vi.mocked(isWindows).mockReturnValue(false); + vi.mocked(isLinux).mockReturnValue(true); + // biome-ignore lint/complexity/useLiteralKeys: FLATPAK_ID comes from an index signature + process.env['FLATPAK_ID'] = 'io.podman_desktop.PodmanDesktop'; + + provider = new LegacyDirectories(); + + expect(provider.getManagedDefaultsDirectory()).toBe(product.paths.managed.flatpak); + }); + test('should fallback to linux managed folder path when platform is unknown', () => { vi.mocked(isMac).mockReturnValue(false); vi.mocked(isWindows).mockReturnValue(false); diff --git a/packages/main/src/plugin/directories-legacy.ts b/packages/main/src/plugin/directories-legacy.ts index 51c27eebd88..5d7d1f8c4bd 100644 --- a/packages/main/src/plugin/directories-legacy.ts +++ b/packages/main/src/plugin/directories-legacy.ts @@ -103,6 +103,10 @@ export class LegacyDirectories implements Directories { // replace %PROGRAMDATA% in the path return product.paths.managed.windows.replace('%PROGRAMDATA%', programData); } else if (isLinux()) { + // biome-ignore lint/complexity/useLiteralKeys: FLATPAK_ID comes from an index signature + if (process.env['FLATPAK_ID']) { + return product.paths.managed.flatpak; + } return product.paths.managed.linux; } // Fallback to Linux-style path diff --git a/packages/main/src/plugin/directories-linux-xdg.spec.ts b/packages/main/src/plugin/directories-linux-xdg.spec.ts index af98e298c91..25510a3e622 100644 --- a/packages/main/src/plugin/directories-linux-xdg.spec.ts +++ b/packages/main/src/plugin/directories-linux-xdg.spec.ts @@ -21,6 +21,8 @@ import * as path from 'node:path'; import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'; +import product from '/@product.json' with { type: 'json' }; + import type { Directories } from './directories.js'; import { LinuxXDGDirectories } from './directories-linux-xdg.js'; @@ -35,6 +37,8 @@ beforeEach(() => { delete process.env['XDG_CONFIG_HOME']; // biome-ignore lint/complexity/useLiteralKeys: XDG_DATA_HOME comes from an index signature delete process.env['XDG_DATA_HOME']; + // biome-ignore lint/complexity/useLiteralKeys: FLATPAK_ID comes from an index signature + delete process.env['FLATPAK_ID']; }); afterEach(() => { @@ -115,4 +119,21 @@ describe('LinuxXDGDirectories', () => { expect(provider.getExtensionsStorageDirectory()).toBe(path.resolve(expectedDataDir, 'extensions-storage')); }); }); + + describe('getManagedDefaultsDirectory', () => { + test('should return linux managed folder path when not running in Flatpak', () => { + provider = new LinuxXDGDirectories(); + + expect(provider.getManagedDefaultsDirectory()).toBe(product.paths.managed.linux); + }); + + test('should return flatpak managed folder path when running in Flatpak', () => { + // biome-ignore lint/complexity/useLiteralKeys: FLATPAK_ID comes from an index signature + process.env['FLATPAK_ID'] = 'io.podman_desktop.PodmanDesktop'; + + provider = new LinuxXDGDirectories(); + + expect(provider.getManagedDefaultsDirectory()).toBe(product.paths.managed.flatpak); + }); + }); }); diff --git a/packages/main/src/plugin/directories-linux-xdg.ts b/packages/main/src/plugin/directories-linux-xdg.ts index 40b049b77ff..ed16715a00d 100644 --- a/packages/main/src/plugin/directories-linux-xdg.ts +++ b/packages/main/src/plugin/directories-linux-xdg.ts @@ -87,6 +87,10 @@ export class LinuxXDGDirectories implements Directories { } getManagedDefaultsDirectory(): string { + // biome-ignore lint/complexity/useLiteralKeys: FLATPAK_ID comes from an index signature + if (process.env['FLATPAK_ID']) { + return product.paths.managed.flatpak; + } return product.paths.managed.linux; } } diff --git a/product.json b/product.json index 62c62936c47..4a050f05220 100644 --- a/product.json +++ b/product.json @@ -9,7 +9,8 @@ "managed": { "macOS": "/Library/Application Support/io.podman_desktop.PodmanDesktop", "windows": "%PROGRAMDATA%\\Podman Desktop", - "linux": "/usr/share/podman-desktop" + "linux": "/usr/share/podman-desktop", + "flatpak": "/run/host/usr/share/podman-desktop" } }, "telemetry": {