Axolotl desktop CI / guardrails (push) Has been cancelled
Axolotl desktop CI / desktop (macos-latest) (push) Has been cancelled
Axolotl desktop CI / desktop (ubuntu-latest) (push) Has been cancelled
Axolotl desktop CI / desktop (windows-latest) (push) Has been cancelled
Axolotl desktop CI / website (push) Has been cancelled
Repository checks / typos (push) Has been cancelled
Repository checks / tombi (push) Has been cancelled
Rust checks / shear (push) Has been cancelled
Sync source to CNB / Sync Git ref (push) Has been cancelled
421 lines
14 KiB
TypeScript
421 lines
14 KiB
TypeScript
import type { MessageDescriptor } from '@modrinth/ui'
|
|
|
|
import {
|
|
settingsCategoryDefinitions,
|
|
type SettingsCategoryId,
|
|
} from './settings-category-definitions.ts'
|
|
|
|
export interface SettingsSearchEntry {
|
|
id: string
|
|
categoryId: SettingsCategoryId
|
|
targetId?: string
|
|
label: MessageDescriptor
|
|
description?: MessageDescriptor
|
|
keywords?: MessageDescriptor[]
|
|
}
|
|
|
|
const message = (id: string, defaultMessage: string): MessageDescriptor => ({ id, defaultMessage })
|
|
|
|
export const settingsSearchEntries: SettingsSearchEntry[] = [
|
|
{
|
|
id: 'appearance-color-theme',
|
|
categoryId: 'interface',
|
|
targetId: 'settings-target-appearance-color-theme',
|
|
label: message('app.appearance-settings.color-theme.title', 'Color theme'),
|
|
description: message(
|
|
'app.appearance-settings.color-theme.description',
|
|
'Select your preferred color theme for Starlight Launcher.',
|
|
),
|
|
},
|
|
{
|
|
id: 'appearance-accent-color',
|
|
categoryId: 'interface',
|
|
targetId: 'settings-target-appearance-accent-color',
|
|
label: message('app.appearance-settings.accent-color.title', 'Accent color'),
|
|
description: message(
|
|
'app.appearance-settings.accent-color.description',
|
|
'Choose the color used for buttons, selections, and highlights.',
|
|
),
|
|
},
|
|
{
|
|
id: 'appearance-launcher-background',
|
|
categoryId: 'interface',
|
|
targetId: 'settings-target-appearance-launcher-background',
|
|
label: message('app.appearance-settings.custom-background.title', 'Launcher background'),
|
|
description: message(
|
|
'app.appearance-settings.custom-background.description',
|
|
'Choose a custom image and fine-tune how it blends with the launcher interface.',
|
|
),
|
|
},
|
|
{
|
|
id: 'appearance-transparent-background',
|
|
categoryId: 'interface',
|
|
targetId: 'settings-target-appearance-transparent-background',
|
|
label: message(
|
|
'app.appearance-settings.transparent-background.title',
|
|
'Transparent background',
|
|
),
|
|
description: message(
|
|
'app.appearance-settings.transparent-background.description',
|
|
'Let your desktop show through the launcher window.',
|
|
),
|
|
},
|
|
{
|
|
id: 'appearance-advanced-rendering',
|
|
categoryId: 'interface',
|
|
targetId: 'settings-target-appearance-advanced-rendering',
|
|
label: message('app.appearance-settings.advanced-rendering.title', 'Advanced rendering'),
|
|
description: message(
|
|
'app.appearance-settings.advanced-rendering.description',
|
|
'Enable advanced visual effects that may affect performance.',
|
|
),
|
|
},
|
|
{
|
|
id: 'appearance-page-transitions',
|
|
categoryId: 'interface',
|
|
targetId: 'settings-target-appearance-page-transitions',
|
|
label: message('app.appearance-settings.page-transitions.title', 'Page transition animations'),
|
|
},
|
|
{
|
|
id: 'appearance-home-layout',
|
|
categoryId: 'home-navigation',
|
|
targetId: 'settings-target-appearance-home-layout',
|
|
label: message('app.appearance-settings.home-layout.title', 'Home layout'),
|
|
},
|
|
{
|
|
id: 'appearance-default-landing-page',
|
|
categoryId: 'home-navigation',
|
|
targetId: 'settings-target-appearance-default-landing-page',
|
|
label: message('app.appearance-settings.default-landing-page.title', 'Default landing page'),
|
|
},
|
|
{
|
|
id: 'appearance-sidebar-instance-limit',
|
|
categoryId: 'home-navigation',
|
|
targetId: 'settings-target-appearance-sidebar-instance-limit',
|
|
label: message(
|
|
'app.appearance-settings.sidebar-instance-count.title',
|
|
'Sidebar instance limit',
|
|
),
|
|
},
|
|
{
|
|
id: 'appearance-auto-hide-downloads',
|
|
categoryId: 'home-navigation',
|
|
targetId: 'settings-target-appearance-auto-hide-downloads',
|
|
label: message(
|
|
'app.appearance-settings.auto-hide-downloads-button.title',
|
|
'Auto-hide downloads button',
|
|
),
|
|
},
|
|
{
|
|
id: 'appearance-native-decorations',
|
|
categoryId: 'interface',
|
|
targetId: 'settings-target-appearance-native-decorations',
|
|
label: message('app.appearance-settings.native-decorations.title', 'Native decorations'),
|
|
},
|
|
{
|
|
id: 'appearance-close-behavior',
|
|
categoryId: 'interface',
|
|
targetId: 'settings-target-appearance-close-behavior',
|
|
label: message(
|
|
'app.appearance-settings.close-behavior.title',
|
|
'Choose how to close Starlight Launcher',
|
|
),
|
|
keywords: [
|
|
message('app.appearance-settings.close-behavior.close', 'Close directly'),
|
|
message('app.appearance-settings.close-behavior.lightweight', 'Hide to tray'),
|
|
message('app.appearance-settings.lightweight-mode.title', 'Lightweight mode'),
|
|
],
|
|
},
|
|
{
|
|
id: 'launch-minimize-launcher',
|
|
categoryId: 'launch-defaults',
|
|
targetId: 'settings-target-launch-minimize',
|
|
label: message('app.appearance-settings.minimize-launcher.title', 'Minimize launcher'),
|
|
},
|
|
{
|
|
id: 'launch-lightweight-mode',
|
|
categoryId: 'launch-defaults',
|
|
targetId: 'settings-target-launch-lightweight-mode',
|
|
label: message(
|
|
'app.appearance-settings.lightweight-mode.title',
|
|
'Enter lightweight mode after launching a game',
|
|
),
|
|
},
|
|
{
|
|
id: 'appearance-show-play-time',
|
|
categoryId: 'home-navigation',
|
|
targetId: 'settings-target-appearance-show-play-time',
|
|
label: message('app.appearance-settings.show-play-time.title', 'Show play time'),
|
|
},
|
|
{
|
|
id: 'appearance-hide-nametag',
|
|
categoryId: 'interface',
|
|
targetId: 'settings-target-appearance-hide-nametag',
|
|
label: message('app.appearance-settings.hide-nametag.title', 'Hide nametag'),
|
|
},
|
|
{
|
|
id: 'appearance-unknown-pack-warning',
|
|
categoryId: 'content-downloads',
|
|
targetId: 'settings-target-appearance-unknown-pack-warning',
|
|
label: message(
|
|
'app.appearance-settings.unknown-pack-warning.title',
|
|
'Warn me before installing unknown modpacks',
|
|
),
|
|
},
|
|
{
|
|
id: 'content-auto-install-dependencies',
|
|
categoryId: 'content-downloads',
|
|
targetId: 'settings-target-content-auto-install-dependencies',
|
|
label: message(
|
|
'app.appearance-settings.auto-install-dependencies.title',
|
|
'Automatically install dependencies',
|
|
),
|
|
},
|
|
{
|
|
id: 'content-skip-nonessential-warnings',
|
|
categoryId: 'content-downloads',
|
|
targetId: 'settings-target-content-skip-nonessential-warnings',
|
|
label: message(
|
|
'app.appearance-settings.skip-non-essential-warnings.title',
|
|
'Skip non-essential warnings',
|
|
),
|
|
},
|
|
{
|
|
id: 'language-launcher-language',
|
|
categoryId: 'language-translation',
|
|
targetId: 'settings-target-language',
|
|
label: message('app.settings.tabs.language', 'Language'),
|
|
},
|
|
{
|
|
id: 'translation-service',
|
|
categoryId: 'language-translation',
|
|
targetId: 'settings-target-translation-service',
|
|
label: message('app.translation-settings.provider', 'Translation service'),
|
|
},
|
|
{
|
|
id: 'translation-auto-translate',
|
|
categoryId: 'language-translation',
|
|
targetId: 'settings-target-translation-auto-translate',
|
|
label: message(
|
|
'app.translation-settings.auto-translate',
|
|
'Translate project pages automatically',
|
|
),
|
|
},
|
|
{
|
|
id: 'translation-cache',
|
|
categoryId: 'language-translation',
|
|
targetId: 'settings-target-translation-cache',
|
|
label: message('app.translation-settings.cache', 'Translation cache'),
|
|
},
|
|
{
|
|
id: 'ai-providers',
|
|
categoryId: 'ai',
|
|
targetId: 'settings-target-ai-providers',
|
|
label: message('app.ai-settings.title', 'AI providers'),
|
|
keywords: [message('app.settings.tabs.ai', 'AI')],
|
|
},
|
|
{
|
|
id: 'crash-analysis-ai',
|
|
categoryId: 'launch-defaults',
|
|
targetId: 'settings-target-crash-analysis-ai',
|
|
label: message('app.crash-analysis.ai.settings.title', 'Crash AI explanation'),
|
|
keywords: [message('app.settings.tabs.launch-defaults', 'Launch & instance defaults')],
|
|
},
|
|
{
|
|
id: 'java-installations',
|
|
categoryId: 'java-performance',
|
|
label: message('app.settings.tabs.java-installations', 'Java installations'),
|
|
},
|
|
{
|
|
id: 'java-memory',
|
|
categoryId: 'java-performance',
|
|
targetId: 'settings-target-java-memory',
|
|
label: message('app.settings.defaults.memory', 'Memory allocated'),
|
|
},
|
|
{
|
|
id: 'java-arguments',
|
|
categoryId: 'java-performance',
|
|
targetId: 'settings-target-java-arguments',
|
|
label: message('app.settings.defaults.java-arguments', 'Java arguments'),
|
|
},
|
|
{
|
|
id: 'defaults-window',
|
|
categoryId: 'launch-defaults',
|
|
targetId: 'settings-target-defaults-window',
|
|
label: message('app.settings.defaults.fullscreen', 'Fullscreen'),
|
|
keywords: [
|
|
message('app.settings.defaults.width', 'Window width'),
|
|
message('app.settings.tabs.default-instance-options', 'Default instance options'),
|
|
],
|
|
},
|
|
{
|
|
id: 'defaults-environment',
|
|
categoryId: 'launch-defaults',
|
|
targetId: 'settings-target-defaults-environment',
|
|
label: message('app.settings.defaults.environment-variables', 'Environment variables'),
|
|
},
|
|
{
|
|
id: 'defaults-unicode-font',
|
|
categoryId: 'launch-defaults',
|
|
targetId: 'settings-target-defaults-unicode-font',
|
|
label: message('app.settings.defaults.force-unicode-font', 'Force Unicode font'),
|
|
description: message(
|
|
'app.settings.defaults.force-unicode-font-description',
|
|
'Use the Unicode font when initializing a new instance. Off by default; existing font settings are preserved.',
|
|
),
|
|
},
|
|
{
|
|
id: 'defaults-launch-hooks',
|
|
categoryId: 'launch-defaults',
|
|
targetId: 'settings-target-defaults-launch-hooks',
|
|
label: message('app.settings.defaults.pre-launch-hook', 'Pre-launch hook'),
|
|
keywords: [
|
|
message('app.settings.defaults.wrapper-hook', 'Wrapper hook'),
|
|
message('app.settings.defaults.post-exit-hook', 'Post-exit hook'),
|
|
],
|
|
},
|
|
{
|
|
id: 'resources-download-mirrors',
|
|
categoryId: 'content-downloads',
|
|
targetId: 'settings-target-resources-download-mirrors',
|
|
label: message('app.settings.resources.download-mirrors', 'Download mirrors'),
|
|
keywords: [message('app.settings.tabs.resource-management', 'Resource management')],
|
|
},
|
|
{
|
|
id: 'resources-download-engine',
|
|
categoryId: 'content-downloads',
|
|
targetId: 'settings-target-resources-download-engine',
|
|
label: message('app.settings.resources.download-engine', 'Download engine'),
|
|
},
|
|
{
|
|
id: 'resources-download-concurrency',
|
|
categoryId: 'content-downloads',
|
|
targetId: 'settings-target-resources-maximum-downloads',
|
|
label: message('app.settings.resources.maximum-downloads', 'Maximum concurrent downloads'),
|
|
keywords: [message('app.settings.resources.maximum-writes', 'Maximum concurrent writes')],
|
|
},
|
|
{
|
|
id: 'resources-proxy',
|
|
categoryId: 'network-multiplayer',
|
|
targetId: 'settings-target-resources-proxy',
|
|
label: message('app.settings.resources.proxy-settings', 'Proxy settings'),
|
|
keywords: [
|
|
message('app.settings.resources.proxy-mode', 'Proxy mode'),
|
|
message('app.settings.tabs.resource-management', 'Resource management'),
|
|
],
|
|
},
|
|
{
|
|
id: 'network-mojang-auth-source',
|
|
categoryId: 'network-multiplayer',
|
|
targetId: 'settings-target-network-mojang-auth-source',
|
|
label: message('app.settings.resources.mojang-auth-service', 'Mojang authentication service'),
|
|
},
|
|
{
|
|
id: 'resources-missing-content-import',
|
|
categoryId: 'content-downloads',
|
|
targetId: 'settings-target-resources-missing-content-import',
|
|
label: message(
|
|
'app.settings.resources.missing-content-auto-import',
|
|
'Automatically import missing modpack files',
|
|
),
|
|
},
|
|
{
|
|
id: 'resources-database-backups',
|
|
categoryId: 'storage-backups',
|
|
targetId: 'settings-target-resources-database-backups',
|
|
label: message('app.settings.resources.database-backups', 'App database backups'),
|
|
keywords: [message('app.settings.tabs.resource-management', 'Resource management')],
|
|
},
|
|
{
|
|
id: 'storage-app-directory',
|
|
categoryId: 'storage-backups',
|
|
targetId: 'settings-target-storage-app-directory',
|
|
label: message('app.settings.resources.axolotl-data-directory', 'Axolotl data directory'),
|
|
},
|
|
{
|
|
id: 'storage-minecraft-directories',
|
|
categoryId: 'storage-backups',
|
|
targetId: 'settings-target-storage-minecraft-directories',
|
|
label: message('app.settings.resources.minecraft-directories', 'Minecraft directories'),
|
|
},
|
|
{
|
|
id: 'storage-cache',
|
|
categoryId: 'storage-backups',
|
|
targetId: 'settings-target-storage-cache',
|
|
label: message('app.settings.resources.app-cache', 'App cache'),
|
|
},
|
|
{
|
|
id: 'multiplayer-public-nodes',
|
|
categoryId: 'network-multiplayer',
|
|
targetId: 'terracotta-public-nodes-title',
|
|
label: message('app.multiplayer.terracotta.public-nodes', 'Terracotta public nodes'),
|
|
},
|
|
{
|
|
id: 'storage-overview',
|
|
categoryId: 'storage-backups',
|
|
targetId: 'settings-target-storage-overview',
|
|
label: message('app.settings.storage.total', 'Storage usage'),
|
|
},
|
|
{
|
|
id: 'updates-source',
|
|
categoryId: 'updates',
|
|
targetId: 'settings-target-updates-source',
|
|
label: message('app.settings.updates.title', 'Update source'),
|
|
},
|
|
{
|
|
id: 'updates-history',
|
|
categoryId: 'updates',
|
|
label: message('app.settings.updates.announcements.history', 'Release history'),
|
|
},
|
|
{
|
|
id: 'about-product',
|
|
categoryId: 'about',
|
|
targetId: 'settings-target-about-product',
|
|
label: message('app.settings.tabs.about', 'About'),
|
|
},
|
|
{
|
|
id: 'about-replay-tour',
|
|
categoryId: 'about',
|
|
targetId: 'settings-target-about-replay-tour',
|
|
label: message('app.settings.about.replay-onboarding', 'Replay tour'),
|
|
},
|
|
{
|
|
id: 'feature-flags',
|
|
categoryId: 'feature-flags',
|
|
label: message('settings.feature-flags.title', 'Feature flags'),
|
|
},
|
|
]
|
|
|
|
export function validateSettingsSearchEntries(entries = settingsSearchEntries): string[] {
|
|
const seenIds = new Set<string>()
|
|
const errors: string[] = []
|
|
|
|
for (const entry of entries) {
|
|
if (seenIds.has(entry.id)) errors.push(`Duplicate settings search entry: ${entry.id}`)
|
|
seenIds.add(entry.id)
|
|
if (!entry.categoryId) errors.push(`Missing category for settings search entry: ${entry.id}`)
|
|
}
|
|
|
|
return errors
|
|
}
|
|
|
|
export function getSettingsSearchTargetId(entry: SettingsSearchEntry): string {
|
|
return entry.targetId ?? `settings-category-${entry.categoryId}`
|
|
}
|
|
|
|
export function validateSettingsSearchMappings(entries = settingsSearchEntries): string[] {
|
|
const categoryIds = new Set(settingsCategoryDefinitions.map((category) => category.id))
|
|
const errors: string[] = []
|
|
|
|
for (const entry of entries) {
|
|
if (!categoryIds.has(entry.categoryId)) {
|
|
errors.push(`Missing settings category for search entry: ${entry.id}`)
|
|
}
|
|
if (!getSettingsSearchTargetId(entry)) {
|
|
errors.push(`Missing settings search target for entry: ${entry.id}`)
|
|
}
|
|
}
|
|
|
|
return errors
|
|
}
|