{
"id": "net.anisota.settings",
"defs": {
"main": {
"key": "literal:settings",
"type": "record",
"record": {
"type": "object",
"required": [
"version",
"createdAt",
"updatedAt"
],
"properties": {
"theme": {
"enum": [
"night",
"day"
],
"type": "string",
"description": "Selected color theme"
},
"version": {
"type": "integer",
"minimum": 1,
"description": "Settings schema version for backward compatibility"
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When the settings record was first created"
},
"updatedAt": {
"type": "string",
"format": "datetime",
"description": "When the settings were last updated"
},
"uiSettings": {
"ref": "#uiSettings",
"type": "ref"
},
"controlOrder": {
"type": "array",
"items": {
"enum": [
"back",
"shuffle",
"flip",
"like",
"repost",
"reply",
"quote",
"list",
"postList",
"accountList",
"commentButton",
"multiEngageButton",
"multiRepostButton",
"engageButton",
"copyButton",
"copyPostText",
"copyAuthorDID",
"copyPostLink",
"relationshipButton",
"fetch",
"feedSwitcher",
"positionButton",
"forward",
"fullscreen",
"delete",
"quickAccess",
"leafletPublications",
"textOnlyMode"
],
"type": "string"
},
"description": "Order of control buttons"
},
"controlSettings": {
"ref": "#controlSettings",
"type": "ref"
},
"behaviorSettings": {
"ref": "#behaviorSettings",
"type": "ref"
}
}
},
"description": "User settings for the Anisota app, synchronized across devices via ATProto"
},
"uiSettings": {
"type": "object",
"properties": {
"fontSize": {
"type": "string",
"maxLength": 10,
"description": "Font size scale (0.8 = 80%, 1.0 = 100% default, 1.2 = 120%)"
},
"showUsername": {
"type": "boolean",
"description": "Show author username on posts"
},
"showPostCount": {
"type": "boolean",
"description": "Show post number indicator"
},
"showTimestamp": {
"type": "boolean",
"description": "Show when the post was created"
},
"cornerElements": {
"ref": "#cornerElements",
"type": "ref"
},
"showProfileLists": {
"type": "boolean",
"description": "Show lists count on profiles"
},
"showProfilePosts": {
"type": "boolean",
"description": "Show post count on profiles"
},
"showProfileHandle": {
"type": "boolean",
"description": "Show handle/username on profile cards"
},
"showProfileListed": {
"type": "boolean",
"description": "Show listed count on profiles"
},
"showPostCardAvatar": {
"type": "boolean",
"description": "Show avatar image in post card footer"
},
"showPostCardFooter": {
"type": "boolean",
"description": "Show the entire post card footer section"
},
"showPostCardHandle": {
"type": "boolean",
"description": "Show handle/username on post cards"
},
"showPostCardHeader": {
"type": "boolean",
"description": "Show the entire post card header section"
},
"showProfileBlocked": {
"type": "boolean",
"description": "Show blocked count on profiles"
},
"showProfileListing": {
"type": "boolean",
"description": "Show listing count on profiles"
},
"showProfileWebsite": {
"type": "boolean",
"description": "Show website link on profile cards"
},
"postCardPrimarySlot": {
"enum": [
"displayName",
"username",
"did"
],
"type": "string",
"description": "Primary name slot for post cards"
},
"showProfileAtSymbol": {
"type": "boolean",
"description": "Show Bluesky icon on profile cards"
},
"showProfileBlocking": {
"type": "boolean",
"description": "Show blocking count on profiles"
},
"showProfileLexicons": {
"type": "boolean",
"description": "Show lexicon count on profiles"
},
"showProfilePronouns": {
"type": "boolean",
"description": "Show pronouns on profile cards"
},
"showProfileVerified": {
"type": "boolean",
"description": "Show verified count on profiles"
},
"showRarityIndicator": {
"type": "boolean",
"description": "Show rarity indicator based on post engagement"
},
"showPostCardAtSymbol": {
"type": "boolean",
"description": "Show Bluesky icon in post card headers"
},
"showProfileCancelled": {
"type": "boolean",
"description": "Show cancelled count on profiles"
},
"showProfileFollowers": {
"type": "boolean",
"description": "Show follower count on profiles"
},
"showProfileFollowing": {
"type": "boolean",
"description": "Show following count on profiles"
},
"showProfileVerifying": {
"type": "boolean",
"description": "Show verifying count on profiles"
},
"postCardSecondarySlot": {
"enum": [
"displayName",
"username",
"did",
"none"
],
"type": "string",
"description": "Secondary name slot for post cards"
},
"showPostReadIndicator": {
"type": "boolean",
"description": "Show indicator for posts that have been read"
},
"showProfileCancelling": {
"type": "boolean",
"description": "Show cancelling count on profiles"
},
"showProfileCardAvatar": {
"type": "boolean",
"description": "Show avatar image in profile card footer"
},
"showProfileCardFooter": {
"type": "boolean",
"description": "Show the entire profile card footer section"
},
"showProfileCardHeader": {
"type": "boolean",
"description": "Show the entire profile card header section"
},
"profileCardPrimarySlot": {
"enum": [
"displayName",
"username",
"did"
],
"type": "string",
"description": "Primary name slot for profile cards"
},
"showProfileCollections": {
"type": "boolean",
"description": "Show collection count on profiles"
},
"showProfileDisplayName": {
"type": "boolean",
"description": "Show display name on profile cards"
},
"showPostCardDisplayName": {
"type": "boolean",
"description": "Show display name on post cards"
},
"profileCardSecondarySlot": {
"enum": [
"displayName",
"username",
"did",
"none"
],
"type": "string",
"description": "Secondary name slot for profile cards"
}
},
"description": "UI visibility and behavior settings"
},
"hideReposts": {
"type": "object",
"properties": {
"feed": {
"type": "boolean",
"description": "Hide reposts in feed"
},
"profile": {
"type": "boolean",
"description": "Hide reposts in profile"
}
}
},
"cornerElements": {
"type": "object",
"properties": {
"topLeft": {
"enum": [
"stamina",
"notifications",
"brand",
"menu",
"none"
],
"type": "string",
"description": "Element to show in top left corner"
},
"topRight": {
"enum": [
"stamina",
"notifications",
"brand",
"menu",
"none"
],
"type": "string",
"description": "Element to show in top right corner"
},
"bottomLeft": {
"enum": [
"stamina",
"notifications",
"brand",
"menu",
"none"
],
"type": "string",
"description": "Element to show in bottom left corner"
},
"bottomRight": {
"enum": [
"stamina",
"notifications",
"brand",
"menu",
"none"
],
"type": "string",
"description": "Element to show in bottom right corner"
}
},
"description": "Corner element positioning settings"
},
"animationTiming": {
"type": "object",
"properties": {
"modals": {
"type": "string",
"maxLength": 10,
"description": "Modal entrance and exit animations (stored as string)"
},
"overall": {
"type": "string",
"maxLength": 10,
"description": "Master speed multiplier that affects all animations (stored as string, e.g. '1.0' = normal speed)"
},
"cardFlip": {
"type": "string",
"maxLength": 10,
"description": "Card flip animation between front and back (stored as string)"
},
"cardAdvance": {
"type": "string",
"maxLength": 10,
"description": "Card advance exit to right and entrance back in from right (stored as string)"
},
"uiTransitions": {
"type": "string",
"maxLength": 10,
"description": "Control row and feed subtitle fade in/out animations (stored as string)"
},
"cornerElements": {
"type": "string",
"maxLength": 10,
"description": "Staggered interactive corner element entrance animation (stored as string)"
},
"pageTransitions": {
"type": "string",
"maxLength": 10,
"description": "Page transitions and navigation animations (stored as string)"
},
"cardStackEntrance": {
"type": "string",
"maxLength": 10,
"description": "Card stack animate in entrance from the top of screen (stored as string)"
},
"threadTransitions": {
"type": "string",
"maxLength": 10,
"description": "Thread train sliding, entering, and exiting animations (stored as string)"
},
"fullscreenTransitions": {
"type": "string",
"maxLength": 10,
"description": "Card stack height expansion and shrinking when entering/exiting fullscreen (stored as string)"
}
},
"description": "Animation timing and speed settings for various UI animations"
},
"controlSettings": {
"type": "object",
"properties": {
"back": {
"type": "boolean",
"description": "Show back button"
},
"flip": {
"type": "boolean",
"description": "Show flip button"
},
"like": {
"type": "boolean",
"description": "Show like button"
},
"list": {
"type": "boolean",
"description": "Show list button"
},
"fetch": {
"type": "boolean",
"description": "Show fetch button"
},
"quote": {
"type": "boolean",
"description": "Show quote button"
},
"reply": {
"type": "boolean",
"description": "Show reply button"
},
"delete": {
"type": "boolean",
"description": "Show delete button"
},
"repost": {
"type": "boolean",
"description": "Show repost button"
},
"forward": {
"type": "boolean",
"description": "Show forward button"
},
"shuffle": {
"type": "boolean",
"description": "Show shuffle button"
},
"postList": {
"type": "boolean",
"description": "Show post list button"
},
"copyButton": {
"type": "boolean",
"description": "Show expandable copy button"
},
"fullscreen": {
"type": "boolean",
"description": "Show fullscreen button"
},
"accountList": {
"type": "boolean",
"description": "Show account list button"
},
"quickAccess": {
"type": "boolean",
"description": "Show quick access button"
},
"copyPostLink": {
"type": "boolean",
"description": "Show copy post link button"
},
"copyPostText": {
"type": "boolean",
"description": "Show copy post text button"
},
"engageButton": {
"type": "boolean",
"description": "Show expandable engage button"
},
"feedSwitcher": {
"type": "boolean",
"description": "Show feed switcher button"
},
"textOnlyMode": {
"type": "boolean",
"description": "Show text only mode button"
},
"commentButton": {
"type": "boolean",
"description": "Show expandable comment button"
},
"copyAuthorDID": {
"type": "boolean",
"description": "Show copy author DID button"
},
"positionButton": {
"type": "boolean",
"description": "Show position button"
},
"multiEngageButton": {
"type": "boolean",
"description": "Show expandable multi-engage button"
},
"multiRepostButton": {
"type": "boolean",
"description": "Show expandable multi-repost button"
},
"relationshipButton": {
"type": "boolean",
"description": "Show relationship button"
},
"leafletPublications": {
"type": "boolean",
"description": "Show leaflet publications button"
}
},
"description": "Control button visibility settings"
},
"behaviorSettings": {
"type": "object",
"properties": {
"postDrafts": {
"type": "boolean",
"description": "Enable post drafts feature"
},
"soundscape": {
"enum": [
"birds",
"brook",
"creek",
"dawn",
"field",
"fire",
"lake",
"mountain",
"night",
"rain",
"stream",
"woodstove",
"zephyr"
],
"type": "string",
"description": "Selected background audio soundscape"
},
"hideReposts": {
"ref": "#hideReposts",
"type": "ref"
},
"audioEnabled": {
"type": "boolean",
"description": "Whether background audio/soundscapes are enabled by default"
},
"textOnlyMode": {
"type": "boolean",
"description": "Filter out posts with images and videos for distraction-free reading"
},
"hideReadPosts": {
"type": "boolean",
"description": "Hide posts that have been read"
},
"confirmDeletes": {
"type": "boolean",
"description": "Show confirmation before deleting"
},
"trackReadPosts": {
"type": "boolean",
"description": "Track which posts have been read"
},
"animationTiming": {
"ref": "#animationTiming",
"type": "ref"
},
"anisotaOnlyMode": {
"type": "boolean",
"description": "Show only Anisota posts in profiles instead of regular Bluesky posts"
},
"defaultHomePage": {
"enum": [
"feed",
"post",
"post-lists",
"profile"
],
"type": "string",
"description": "Default page to show on app load"
},
"feedCacheLength": {
"type": "integer",
"minimum": 1,
"description": "How long to cache feed position in minutes (30, 60, 360, 720, 1440, 10080)"
},
"maxFollowerCount": {
"type": "integer",
"description": "Maximum follower count for notification filtering"
},
"minFollowerCount": {
"type": "string",
"maxLength": 20,
"description": "Minimum follower count for notification filtering (stored as string)"
},
"minFollowerRatio": {
"type": "string",
"maxLength": 20,
"description": "Minimum follower ratio for filtering (stored as string)"
},
"reverseFeedOrder": {
"type": "boolean",
"description": "Show newest posts first"
},
"showBlockedPosts": {
"type": "boolean",
"description": "Show content from users you have blocked"
},
"showOlderSection": {
"type": "boolean",
"description": "Show Older section in notifications"
},
"confirmDraftSaves": {
"type": "boolean",
"description": "Show warning before saving drafts"
},
"defaultPostTarget": {
"enum": [
"bluesky",
"anisota",
"both"
],
"type": "string",
"description": "Default publishing target for new posts"
},
"keyboardShortcuts": {
"ref": "#keyboardShortcuts",
"type": "ref"
},
"showUnreadSection": {
"type": "boolean",
"description": "Show Unread section in notifications"
},
"batchNotifications": {
"type": "boolean",
"description": "Group similar notifications together"
},
"fullscreenBehavior": {
"enum": [
"fullscreen",
"immersive",
"cycle"
],
"type": "string",
"description": "Fullscreen behavior mode: fullscreen (show control row), immersive (hide all UI), or cycle (cycle through states)"
},
"moderationSettings": {
"ref": "#moderationSettings",
"type": "ref"
},
"showRarityInHeader": {
"type": "boolean",
"description": "Display rarity indicator and rate in the stats modal header"
},
"hideInteractedPosts": {
"type": "boolean",
"description": "Hide posts that have been liked or reposted to focus on new content"
},
"bypassDetachedQuotes": {
"type": "boolean",
"description": "Bypass detached quotes to see the full content that was removed by the author"
},
"showThreadSuggestion": {
"type": "boolean",
"description": "Show thread suggestion when typing beyond character limit in post composer"
},
"statsVisibleSections": {
"ref": "#statsVisibleSections",
"type": "ref"
},
"filterByFollowerRatio": {
"type": "boolean",
"description": "Filter by follower to following ratio"
},
"hideNotificationCount": {
"type": "boolean",
"description": "Hide the exact notification count in the corner element, always showing 'notifications' instead"
},
"batchNotificationTypes": {
"ref": "#batchNotificationTypes",
"type": "ref"
},
"forceChronologicalSort": {
"type": "boolean",
"description": "Force chronological sorting of posts"
},
"highlightNotifications": {
"type": "boolean",
"description": "Enable notification highlighting to surface important notifications from notable accounts"
},
"includeReplyEngagement": {
"type": "boolean",
"description": "Include engagement metrics from reply posts in stats calculations"
},
"filterNotificationTypes": {
"ref": "#filterNotificationTypes",
"type": "ref"
},
"filterRelationshipTypes": {
"ref": "#filterRelationshipTypes",
"type": "ref"
},
"showRecentlyReadSection": {
"type": "boolean",
"description": "Show Recently Read section in notifications"
},
"highlightByFollowerRatio": {
"type": "boolean",
"description": "Also require a minimum follower-to-following ratio for highlighting"
},
"showNewHighlightsSection": {
"type": "boolean",
"description": "Show New Highlights section in notifications"
},
"showNotificationSections": {
"type": "boolean",
"description": "Enable notification sections (New Highlights, Unread, Recently Read, Older)"
},
"highlightMaxFollowerCount": {
"type": "integer",
"description": "Maximum follower count for notification highlighting"
},
"highlightMinFollowerCount": {
"type": "string",
"maxLength": 20,
"description": "Minimum follower count for notification highlighting (stored as string or integer)"
},
"highlightMinFollowerRatio": {
"type": "string",
"maxLength": 20,
"description": "Minimum follower-to-following ratio for highlighting (stored as string)"
},
"highlightNotificationTypes": {
"ref": "#highlightNotificationTypes",
"type": "ref"
},
"filterNotificationsByFollowers": {
"type": "boolean",
"description": "Filter notifications by follower count"
},
"filterNotificationsByRelationship": {
"type": "boolean",
"description": "Filter notifications based on relationship with the author"
},
"combineRelationshipAndFollowerFilters": {
"type": "boolean",
"description": "When enabled, show notifications that match either relationship OR follower count filters"
}
},
"description": "App behavior and functionality settings"
},
"keyboardShortcuts": {
"type": "object",
"properties": {
"global": {
"ref": "#keyboardShortcutsGlobal",
"type": "ref"
},
"modals": {
"ref": "#keyboardShortcutsModals",
"type": "ref"
},
"composer": {
"ref": "#keyboardShortcutsComposer",
"type": "ref"
},
"navigation": {
"ref": "#keyboardShortcutsNavigation",
"type": "ref"
},
"postInteractions": {
"ref": "#keyboardShortcutsPostInteractions",
"type": "ref"
}
},
"description": "Keyboard shortcut configuration"
},
"moderationSettings": {
"type": "object",
"properties": {
"mutedContentHandling": {
"enum": [
"show",
"warn",
"hide"
],
"type": "string",
"description": "How to handle posts containing muted words or phrases"
},
"mutedAccountsHandling": {
"enum": [
"show",
"warn",
"hide"
],
"type": "string",
"description": "How to handle posts from muted accounts"
}
},
"description": "Content moderation and filtering settings"
},
"statsVisibleSections": {
"type": "object",
"properties": {
"activity": {
"type": "boolean",
"description": "Show activity section in stats overview"
},
"progress": {
"type": "boolean",
"description": "Show progress section in stats overview"
},
"engagement": {
"type": "boolean",
"description": "Show engagement section in stats overview"
}
}
},
"batchNotificationTypes": {
"type": "object",
"properties": {
"likes": {
"type": "boolean",
"description": "Batch like notifications"
},
"quotes": {
"type": "boolean",
"description": "Batch quote notifications"
},
"follows": {
"type": "boolean",
"description": "Batch follow notifications"
},
"replies": {
"type": "boolean",
"description": "Batch reply notifications"
},
"reposts": {
"type": "boolean",
"description": "Batch repost notifications"
},
"mentions": {
"type": "boolean",
"description": "Batch mention notifications"
}
}
},
"filterNotificationTypes": {
"type": "object",
"properties": {
"likes": {
"type": "boolean",
"description": "Show like notifications"
},
"quotes": {
"type": "boolean",
"description": "Show quote notifications"
},
"follows": {
"type": "boolean",
"description": "Show follow notifications"
},
"replies": {
"type": "boolean",
"description": "Show reply notifications"
},
"reposts": {
"type": "boolean",
"description": "Show repost notifications"
},
"mentions": {
"type": "boolean",
"description": "Show mention notifications"
}
}
},
"filterRelationshipTypes": {
"type": "object",
"properties": {
"mutuals": {
"type": "boolean",
"description": "Show notifications from mutual connections"
},
"followers": {
"type": "boolean",
"description": "Show notifications from followers"
},
"following": {
"type": "boolean",
"description": "Show notifications from accounts you follow"
},
"nonMutuals": {
"type": "boolean",
"description": "Show notifications from followers you don't follow back"
}
}
},
"keyboardShortcutsGlobal": {
"type": "object",
"properties": {
"feed": {
"type": "string",
"maxLength": 50,
"description": "Navigate to feed"
},
"profile": {
"type": "string",
"maxLength": 50,
"description": "Navigate to profile"
},
"inventory": {
"type": "string",
"maxLength": 50,
"description": "Navigate to inventory"
},
"collection": {
"type": "string",
"maxLength": 50,
"description": "Navigate to collection"
}
},
"description": "Global navigation keyboard shortcuts"
},
"keyboardShortcutsModals": {
"type": "object",
"properties": {
"stats": {
"type": "string",
"maxLength": 50,
"description": "Open stats modal"
},
"touchMenu": {
"type": "string",
"maxLength": 50,
"description": "Open touch menu"
},
"keyboardHelp": {
"type": "string",
"maxLength": 50,
"description": "Show keyboard shortcuts help"
},
"postComposer": {
"type": "string",
"maxLength": 50,
"description": "Open post composer"
},
"notifications": {
"type": "string",
"maxLength": 50,
"description": "Open notifications"
}
},
"description": "Modal keyboard shortcuts"
},
"keyboardShortcutsComposer": {
"type": "object",
"properties": {
"publish": {
"type": "string",
"maxLength": 50,
"description": "Publish post (e.g., ctrl+enter)"
}
},
"description": "Post composer keyboard shortcuts"
},
"highlightNotificationTypes": {
"type": "object",
"properties": {
"likes": {
"type": "boolean",
"description": "Highlight like notifications"
},
"quotes": {
"type": "boolean",
"description": "Highlight quote notifications"
},
"follows": {
"type": "boolean",
"description": "Highlight follow notifications"
},
"replies": {
"type": "boolean",
"description": "Highlight reply notifications"
},
"reposts": {
"type": "boolean",
"description": "Highlight repost notifications"
},
"mentions": {
"type": "boolean",
"description": "Highlight mention notifications"
}
}
},
"keyboardShortcutsNavigation": {
"type": "object",
"properties": {
"escape": {
"type": "string",
"maxLength": 50,
"description": "Exit fullscreen or close modals"
},
"arrowUp": {
"type": "string",
"maxLength": 50,
"description": "Scroll up or previous item"
},
"arrowDown": {
"type": "string",
"maxLength": 50,
"description": "Scroll down or next item"
},
"arrowLeft": {
"type": "string",
"maxLength": 50,
"description": "Go back to previous card"
},
"arrowRight": {
"type": "string",
"maxLength": 50,
"description": "Advance to next card"
}
},
"description": "Navigation keyboard shortcuts"
},
"keyboardShortcutsPostInteractions": {
"type": "object",
"properties": {
"like": {
"type": "string",
"maxLength": 50,
"description": "Like current post"
},
"quote": {
"type": "string",
"maxLength": 50,
"description": "Quote current post"
},
"reply": {
"type": "string",
"maxLength": 50,
"description": "Reply to current post"
},
"repost": {
"type": "string",
"maxLength": 50,
"description": "Repost current post"
}
},
"description": "Post interaction keyboard shortcuts"
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}