| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- export type WallpaperType = 'scene' | 'video' | 'web' | 'application'
- /** Matches linux-wallpaperengine's --scaling choices */
- export type ScalingMode = 'default' | 'stretch' | 'fit' | 'fill' | 'center'
- export type WallpaperBackend =
- | 'swww'
- | 'swaybg'
- | 'feh'
- | 'xwallpaper'
- | 'gsettings'
- | 'qdbus'
- | 'windows'
- | 'macos'
- | 'auto'
- export type WorkshopQueryType =
- | 'RankedByVote'
- | 'RankedByPublicationDate'
- | 'RankedByTrend'
- | 'RankedByTotalUniqueSubscriptions'
- | 'RankedByTextSearch'
- | 'RankedByLastUpdatedDate'
- export type ContentRating = 'everyone' | 'questionable' | 'mature' | 'uncategorized'
- export interface WallpaperMeta {
- id: string
- title: string
- description?: string
- type: WallpaperType
- contentRating?: ContentRating
- previewUrl?: string
- previewLocal?: string
- localPath?: string
- file?: string
- fileSize?: number
- createdAt: number
- updatedAt: number
- subscribed: boolean
- appliedCount: number
- lastAppliedAt?: number
- authorSteamId?: string
- authorName?: string
- source: 'workshop' | 'local' | 'backup'
- tags: string[]
- categories: string[]
- downloading?: boolean
- downloadFailed?: boolean
- fpsOverride?: number
- volumeOverride?: number
- /** Forces the "xray" scene effect's reveal spot to cover the whole masked area instead of following the mouse */
- xrayFullReveal?: boolean
- /** How the wallpaper is scaled to fit the screen, applied via linux-wallpaperengine --scaling */
- scalingMode?: ScalingMode
- /** Manual zoom layered on top of scalingMode via linux-wallpaperengine --zoom (1 = no extra zoom) */
- zoom?: number
- /** Force-disables the scene's mouse parallax effect via linux-wallpaperengine --disable-parallax */
- disableParallax?: boolean
- /**
- * Color shown outside the wallpaper's bounds (Center/Fit letterboxing, zoomed-out scaling) as a
- * "RRGGBB"/"RRGGBBAA" hex string, applied via linux-wallpaperengine --corner-color. Default: black.
- */
- cornerColor?: string
- /**
- * Global playback speed multiplier for animations/particles/effects, applied via
- * linux-wallpaperengine --speed (1 = normal speed, less than 1 = slower)
- */
- playbackSpeed?: number
- backedUp?: boolean
- /** Set by a "check unavailable" scan: true if the item has been removed from the Steam Workshop */
- unavailable?: boolean
- /** Object/layer ids or names to force-hide via linux-wallpaperengine --disable-object */
- disabledObjects?: string[]
- /** Object/layer ids or names to force-show via linux-wallpaperengine --enable-object */
- enabledObjects?: string[]
- /** Property name -> override value, applied via linux-wallpaperengine --set-property name=value */
- propertyOverrides?: Record<string, string>
- }
- export interface LweSceneObject {
- id: string
- name: string
- type: 'image' | 'particle' | 'text' | 'sound' | 'unknown'
- }
- export interface LweProperty {
- name: string
- type: 'slider' | 'boolean' | 'color' | 'combo' | 'text' | 'scene-texture' | 'file' | 'textinput' | 'unknown'
- text?: string
- value: string
- min?: number
- max?: number
- step?: number
- options?: { value: string; label: string }[]
- }
- export interface WorkshopAuthorInfo {
- steamId: string
- name: string
- avatarUrl: string
- }
- export interface WorkshopItem {
- publishedFileId: string
- title: string
- description: string
- previewUrl: string
- creatorSteamId: string
- tags: string[]
- timeCreated: number
- timeUpdated: number
- subscriptions: number
- upvotes: number
- downvotes: number
- isSubscribed: boolean
- }
- export interface WorkshopQueryParams {
- appId?: number
- searchText?: string
- tags?: string[]
- excludedTags?: string[]
- queryType?: WorkshopQueryType
- page?: number
- }
- export interface WorkshopQueryResult {
- items: WorkshopItem[]
- page: number
- totalResults: number
- }
- export interface CreatorWorkshopQueryParams {
- searchText?: string
- tags?: string[]
- excludedTags?: string[]
- queryType?: WorkshopQueryType
- page?: number
- }
- export interface ApplyWallpaperOptions {
- wallpaperId: string
- displayIndex?: number
- backend?: WallpaperBackend
- }
- export interface DownloadProgressEvent {
- itemId: string
- bytesDownloaded: number
- bytesTotal: number
- percentage: number
- status: 'downloading' | 'completed' | 'error'
- }
- export interface LibraryFilters {
- tags?: string[]
- categories?: string[]
- type?: WallpaperType
- contentRating?: ContentRating
- searchText?: string
- sortBy?: 'title' | 'createdAt' | 'updatedAt' | 'lastApplied' | 'appliedCount' | 'fileSize'
- sortDir?: 'asc' | 'desc'
- }
- export interface WallpaperFolder {
- id: string
- title: string
- items: string[] // workshop IDs
- }
- export interface WallpaperEnvironment {
- displayServer: 'wayland' | 'x11' | 'unknown'
- desktopEnv: 'gnome' | 'kde' | 'hyprland' | 'sway' | 'other'
- availableBackends: WallpaperBackend[]
- recommendedBackend: WallpaperBackend
- linuxWallpaperEngine: LweStatus
- }
- export interface LweStatus {
- installed: boolean
- path?: string
- version?: string
- }
- export type LinuxDistro = 'fedora' | 'arch' | 'debian' | 'unknown'
- export interface LweInstallProgress {
- stage: 'installing-deps' | 'cloning' | 'building' | 'installing' | 'done' | 'error'
- message: string
- percentage: number
- }
- export interface BackupProgressEvent {
- itemId: string
- bytesCopied: number
- bytesTotal: number
- percentage: number
- status: 'copying' | 'completed' | 'error'
- message?: string
- }
- export interface PlaylistItem {
- wallpaperId: string
- /** 0-100, overrides the playlist's defaultVolume when set */
- volume?: number
- /** Overrides the playlist's defaultDurationSec when set */
- durationSec?: number
- }
- export interface PlaylistSettings {
- /** Shuffle playback order; reshuffled every time the playlist loops back to the start */
- randomize: boolean
- /** Base ordering when randomize is off; 'manual' respects PlaylistItem[] order */
- sortBy: 'manual' | 'title' | 'createdAt'
- /** How long each wallpaper plays before advancing, in seconds */
- defaultDurationSec: number
- /** 0-100, used for items without a per-item volume override */
- defaultVolume: number
- }
- export interface Playlist {
- id: string
- title: string
- items: PlaylistItem[]
- settings: PlaylistSettings
- createdAt: number
- updatedAt: number
- }
- export interface PlaylistPlaybackState {
- playlistId: string | null
- currentItemId: string | null
- currentIndex: number
- isPlaying: boolean
- order: string[]
- }
|