diff --git a/.eslintrc.js b/.eslintrc.js
index 66e75d4855..ac50d978f3 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -42,9 +42,9 @@ module.exports = {
],
'bsky-internal/use-exact-imports': 'error',
'bsky-internal/use-typed-gates': 'error',
- 'bsky-internal/use-prefixed-imports': 'warn',
+ 'bsky-internal/use-prefixed-imports': 'error',
'simple-import-sort/imports': [
- 'warn',
+ 'error',
{
groups: [
// Side effect imports.
@@ -78,7 +78,7 @@ module.exports = {
],
},
],
- 'simple-import-sort/exports': 'warn',
+ 'simple-import-sort/exports': 'error',
// TODO: Reenable when we figure out why it gets stuck on CI.
// 'react-compiler/react-compiler': 'error',
'no-restricted-imports': [
diff --git a/src/components/Divider.tsx b/src/components/Divider.tsx
index 24e2789e50..ff0bbb0451 100644
--- a/src/components/Divider.tsx
+++ b/src/components/Divider.tsx
@@ -1,6 +1,7 @@
import React from 'react'
import {View} from 'react-native'
-import {atoms as a, useTheme, ViewStyleProp, flatten} from '#/alf'
+
+import {atoms as a, flatten, useTheme, ViewStyleProp} from '#/alf'
export function Divider({style}: ViewStyleProp) {
const t = useTheme()
diff --git a/src/components/Error.tsx b/src/components/Error.tsx
index 59d219831c..a27ccb88c6 100644
--- a/src/components/Error.tsx
+++ b/src/components/Error.tsx
@@ -3,8 +3,8 @@ import {View} from 'react-native'
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {useGoBack} from 'lib/hooks/useGoBack'
-import {CenteredView} from 'view/com/util/Views'
+import {useGoBack} from '#/lib/hooks/useGoBack'
+import {CenteredView} from '#/view/com/util/Views'
import {atoms as a, useBreakpoints, useTheme} from '#/alf'
import {Button, ButtonText} from '#/components/Button'
import {Text} from '#/components/Typography'
diff --git a/src/components/LikedByList.tsx b/src/components/LikedByList.tsx
index 0106a56181..a83f982589 100644
--- a/src/components/LikedByList.tsx
+++ b/src/components/LikedByList.tsx
@@ -3,11 +3,11 @@ import {AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
+import {cleanError} from '#/lib/strings/errors'
import {logger} from '#/logger'
import {useLikedByQuery} from '#/state/queries/post-liked-by'
import {useResolveUriQuery} from '#/state/queries/resolve-uri'
-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
-import {cleanError} from 'lib/strings/errors'
import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard'
import {List} from '#/view/com/util/List'
import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
diff --git a/src/components/Lists.tsx b/src/components/Lists.tsx
index 2d9e61a969..16bd6a9eab 100644
--- a/src/components/Lists.tsx
+++ b/src/components/Lists.tsx
@@ -3,8 +3,8 @@ import {StyleProp, View, ViewStyle} from 'react-native'
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {cleanError} from 'lib/strings/errors'
-import {CenteredView} from 'view/com/util/Views'
+import {cleanError} from '#/lib/strings/errors'
+import {CenteredView} from '#/view/com/util/Views'
import {atoms as a, flatten, useBreakpoints, useTheme} from '#/alf'
import {Button, ButtonText} from '#/components/Button'
import {Error} from '#/components/Error'
diff --git a/src/components/ProfileHoverCard/index.web.tsx b/src/components/ProfileHoverCard/index.web.tsx
index 3854ee014c..4cda42fdbe 100644
--- a/src/components/ProfileHoverCard/index.web.tsx
+++ b/src/components/ProfileHoverCard/index.web.tsx
@@ -5,15 +5,15 @@ import {flip, offset, shift, size, useFloating} from '@floating-ui/react-dom'
import {msg, plural} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {isTouchDevice} from '#/lib/browser'
import {getModerationCauseKey} from '#/lib/moderation'
import {makeProfileLink} from '#/lib/routes/links'
import {sanitizeDisplayName} from '#/lib/strings/display-names'
import {sanitizeHandle} from '#/lib/strings/handles'
+import {useProfileShadow} from '#/state/cache/profile-shadow'
import {useModerationOpts} from '#/state/preferences/moderation-opts'
import {usePrefetchProfileQuery, useProfileQuery} from '#/state/queries/profile'
import {useSession} from '#/state/session'
-import {isTouchDevice} from 'lib/browser'
-import {useProfileShadow} from 'state/cache/profile-shadow'
import {formatCount} from '#/view/com/util/numeric/format'
import {UserAvatar} from '#/view/com/util/UserAvatar'
import {ProfileHeaderHandle} from '#/screens/Profile/Header/Handle'
diff --git a/src/components/StarterPack/Main/FeedsList.tsx b/src/components/StarterPack/Main/FeedsList.tsx
index 7d7cd2047c..31d85ab42c 100644
--- a/src/components/StarterPack/Main/FeedsList.tsx
+++ b/src/components/StarterPack/Main/FeedsList.tsx
@@ -3,9 +3,9 @@ import {ListRenderItemInfo, View} from 'react-native'
import {AppBskyFeedDefs} from '@atproto/api'
import {GeneratorView} from '@atproto/api/dist/client/types/app/bsky/feed/defs'
-import {useBottomBarOffset} from 'lib/hooks/useBottomBarOffset'
-import {isNative, isWeb} from 'platform/detection'
-import {List, ListRef} from 'view/com/util/List'
+import {useBottomBarOffset} from '#/lib/hooks/useBottomBarOffset'
+import {isNative, isWeb} from '#/platform/detection'
+import {List, ListRef} from '#/view/com/util/List'
import {SectionRef} from '#/screens/Profile/Sections/types'
import {atoms as a, useTheme} from '#/alf'
import * as FeedCard from '#/components/FeedCard'
diff --git a/src/components/StarterPack/Main/PostsList.tsx b/src/components/StarterPack/Main/PostsList.tsx
index 0ff84ff459..a5275ae875 100644
--- a/src/components/StarterPack/Main/PostsList.tsx
+++ b/src/components/StarterPack/Main/PostsList.tsx
@@ -3,11 +3,11 @@ import {View} from 'react-native'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {isNative} from '#/platform/detection'
import {FeedDescriptor} from '#/state/queries/post-feed'
-import {isNative} from 'platform/detection'
-import {Feed} from 'view/com/posts/Feed'
-import {EmptyState} from 'view/com/util/EmptyState'
-import {ListRef} from 'view/com/util/List'
+import {Feed} from '#/view/com/posts/Feed'
+import {EmptyState} from '#/view/com/util/EmptyState'
+import {ListRef} from '#/view/com/util/List'
import {SectionRef} from '#/screens/Profile/Sections/types'
interface ProfilesListProps {
diff --git a/src/components/StarterPack/Main/ProfilesList.tsx b/src/components/StarterPack/Main/ProfilesList.tsx
index a5c7cd1b73..ecd6225bb0 100644
--- a/src/components/StarterPack/Main/ProfilesList.tsx
+++ b/src/components/StarterPack/Main/ProfilesList.tsx
@@ -8,13 +8,13 @@ import {
} from '@atproto/api'
import {InfiniteData, UseInfiniteQueryResult} from '@tanstack/react-query'
-import {useBottomBarOffset} from 'lib/hooks/useBottomBarOffset'
-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
-import {isBlockedOrBlocking} from 'lib/moderation/blocked-and-muted'
-import {isNative, isWeb} from 'platform/detection'
-import {useAllListMembersQuery} from 'state/queries/list-members'
-import {useSession} from 'state/session'
-import {List, ListRef} from 'view/com/util/List'
+import {useBottomBarOffset} from '#/lib/hooks/useBottomBarOffset'
+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
+import {isBlockedOrBlocking} from '#/lib/moderation/blocked-and-muted'
+import {isNative, isWeb} from '#/platform/detection'
+import {useAllListMembersQuery} from '#/state/queries/list-members'
+import {useSession} from '#/state/session'
+import {List, ListRef} from '#/view/com/util/List'
import {SectionRef} from '#/screens/Profile/Sections/types'
import {atoms as a, useTheme} from '#/alf'
import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
diff --git a/src/components/StarterPack/Wizard/ScreenTransition.tsx b/src/components/StarterPack/Wizard/ScreenTransition.tsx
index b7cd4e4c1f..9b76d4c607 100644
--- a/src/components/StarterPack/Wizard/ScreenTransition.tsx
+++ b/src/components/StarterPack/Wizard/ScreenTransition.tsx
@@ -7,7 +7,7 @@ import Animated, {
SlideInRight,
} from 'react-native-reanimated'
-import {isWeb} from 'platform/detection'
+import {isWeb} from '#/platform/detection'
export function ScreenTransition({
direction,
diff --git a/src/components/dms/ActionsWrapper.tsx b/src/components/dms/ActionsWrapper.tsx
index 1bb57ff90b..9b06bd0b20 100644
--- a/src/components/dms/ActionsWrapper.tsx
+++ b/src/components/dms/ActionsWrapper.tsx
@@ -12,8 +12,8 @@ import {ChatBskyConvoDefs} from '@atproto/api'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {HITSLOP_10} from 'lib/constants'
-import {useHaptics} from 'lib/haptics'
+import {HITSLOP_10} from '#/lib/constants'
+import {useHaptics} from '#/lib/haptics'
import {atoms as a} from '#/alf'
import {MessageMenu} from '#/components/dms/MessageMenu'
import {useMenuControl} from '#/components/Menu'
diff --git a/src/components/dms/BlockedByListDialog.tsx b/src/components/dms/BlockedByListDialog.tsx
index b786e36815..2a83ea8c0e 100644
--- a/src/components/dms/BlockedByListDialog.tsx
+++ b/src/components/dms/BlockedByListDialog.tsx
@@ -4,7 +4,7 @@ import {ModerationCause} from '@atproto/api'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {listUriToHref} from 'lib/strings/url-helpers'
+import {listUriToHref} from '#/lib/strings/url-helpers'
import {atoms as a, useTheme} from '#/alf'
import * as Dialog from '#/components/Dialog'
import {DialogControlProps} from '#/components/Dialog'
diff --git a/src/components/dms/ChatEmptyPill.tsx b/src/components/dms/ChatEmptyPill.tsx
index 4633832fc3..ffd022f560 100644
--- a/src/components/dms/ChatEmptyPill.tsx
+++ b/src/components/dms/ChatEmptyPill.tsx
@@ -9,10 +9,10 @@ import Animated, {
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {ScaleAndFadeIn} from 'lib/custom-animations/ScaleAndFade'
-import {ShrinkAndPop} from 'lib/custom-animations/ShrinkAndPop'
-import {useHaptics} from 'lib/haptics'
-import {isWeb} from 'platform/detection'
+import {ScaleAndFadeIn} from '#/lib/custom-animations/ScaleAndFade'
+import {ShrinkAndPop} from '#/lib/custom-animations/ShrinkAndPop'
+import {useHaptics} from '#/lib/haptics'
+import {isWeb} from '#/platform/detection'
import {atoms as a, useTheme} from '#/alf'
import {Text} from '#/components/Typography'
diff --git a/src/components/dms/LeaveConvoPrompt.tsx b/src/components/dms/LeaveConvoPrompt.tsx
index b0dd83b294..2baa07b468 100644
--- a/src/components/dms/LeaveConvoPrompt.tsx
+++ b/src/components/dms/LeaveConvoPrompt.tsx
@@ -3,10 +3,10 @@ import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {useNavigation} from '@react-navigation/native'
-import {NavigationProp} from 'lib/routes/types'
-import {isNative} from 'platform/detection'
-import {useLeaveConvo} from 'state/queries/messages/leave-conversation'
-import * as Toast from 'view/com/util/Toast'
+import {NavigationProp} from '#/lib/routes/types'
+import {isNative} from '#/platform/detection'
+import {useLeaveConvo} from '#/state/queries/messages/leave-conversation'
+import * as Toast from '#/view/com/util/Toast'
import {DialogOuterProps} from '#/components/Dialog'
import * as Prompt from '#/components/Prompt'
diff --git a/src/components/dms/MessagesListBlockedFooter.tsx b/src/components/dms/MessagesListBlockedFooter.tsx
index a018b8623a..ec7ba28558 100644
--- a/src/components/dms/MessagesListBlockedFooter.tsx
+++ b/src/components/dms/MessagesListBlockedFooter.tsx
@@ -4,8 +4,8 @@ import {AppBskyActorDefs, ModerationCause} from '@atproto/api'
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {useProfileShadow} from 'state/cache/profile-shadow'
-import {useProfileBlockMutationQueue} from 'state/queries/profile'
+import {useProfileShadow} from '#/state/cache/profile-shadow'
+import {useProfileBlockMutationQueue} from '#/state/queries/profile'
import {atoms as a, useBreakpoints, useTheme} from '#/alf'
import {Button, ButtonText} from '#/components/Button'
import {useDialogControl} from '#/components/Dialog'
diff --git a/src/components/dms/NewMessagesPill.tsx b/src/components/dms/NewMessagesPill.tsx
index 924f7c4558..2f7ff8f4b0 100644
--- a/src/components/dms/NewMessagesPill.tsx
+++ b/src/components/dms/NewMessagesPill.tsx
@@ -12,9 +12,9 @@ import {Trans} from '@lingui/macro'
import {
ScaleAndFadeIn,
ScaleAndFadeOut,
-} from 'lib/custom-animations/ScaleAndFade'
-import {useHaptics} from 'lib/haptics'
-import {isAndroid, isIOS, isWeb} from 'platform/detection'
+} from '#/lib/custom-animations/ScaleAndFade'
+import {useHaptics} from '#/lib/haptics'
+import {isAndroid, isIOS, isWeb} from '#/platform/detection'
import {atoms as a, useTheme} from '#/alf'
import {Text} from '#/components/Typography'
diff --git a/src/components/hooks/useStarterPackEntry.native.ts b/src/components/hooks/useStarterPackEntry.native.ts
index 212ecae71d..4104ac074f 100644
--- a/src/components/hooks/useStarterPackEntry.native.ts
+++ b/src/components/hooks/useStarterPackEntry.native.ts
@@ -3,10 +3,10 @@ import React from 'react'
import {
createStarterPackLinkFromAndroidReferrer,
httpStarterPackUriToAtUri,
-} from 'lib/strings/starter-pack'
-import {isAndroid} from 'platform/detection'
-import {useHasCheckedForStarterPack} from 'state/preferences/used-starter-packs'
-import {useSetActiveStarterPack} from 'state/shell/starter-pack'
+} from '#/lib/strings/starter-pack'
+import {isAndroid} from '#/platform/detection'
+import {useHasCheckedForStarterPack} from '#/state/preferences/used-starter-packs'
+import {useSetActiveStarterPack} from '#/state/shell/starter-pack'
import {Referrer, SharedPrefs} from '../../../modules/expo-bluesky-swiss-army'
export function useStarterPackEntry() {
diff --git a/src/components/hooks/useStarterPackEntry.ts b/src/components/hooks/useStarterPackEntry.ts
index dba801e093..2c2e8c6386 100644
--- a/src/components/hooks/useStarterPackEntry.ts
+++ b/src/components/hooks/useStarterPackEntry.ts
@@ -1,7 +1,7 @@
import React from 'react'
-import {httpStarterPackUriToAtUri} from 'lib/strings/starter-pack'
-import {useSetActiveStarterPack} from 'state/shell/starter-pack'
+import {httpStarterPackUriToAtUri} from '#/lib/strings/starter-pack'
+import {useSetActiveStarterPack} from '#/state/shell/starter-pack'
export function useStarterPackEntry() {
const [ready, setReady] = React.useState(false)
diff --git a/src/components/moderation/PostHider.tsx b/src/components/moderation/PostHider.tsx
index b6fb174528..16d9127ffb 100644
--- a/src/components/moderation/PostHider.tsx
+++ b/src/components/moderation/PostHider.tsx
@@ -6,8 +6,8 @@ import {useLingui} from '@lingui/react'
import {useQueryClient} from '@tanstack/react-query'
import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
-import {addStyle} from 'lib/styles'
-import {precacheProfile} from 'state/queries/profile'
+import {addStyle} from '#/lib/styles'
+import {precacheProfile} from '#/state/queries/profile'
// import {Link} from '#/components/Link' TODO this imposes some styles that screw things up
import {Link} from '#/view/com/util/Link'
import {atoms as a, useTheme} from '#/alf'
diff --git a/src/components/moderation/ProfileHeaderAlerts.tsx b/src/components/moderation/ProfileHeaderAlerts.tsx
index 94779697fb..891caec18e 100644
--- a/src/components/moderation/ProfileHeaderAlerts.tsx
+++ b/src/components/moderation/ProfileHeaderAlerts.tsx
@@ -2,7 +2,7 @@ import React from 'react'
import {StyleProp, ViewStyle} from 'react-native'
import {ModerationDecision} from '@atproto/api'
-import {getModerationCauseKey} from 'lib/moderation'
+import {getModerationCauseKey} from '#/lib/moderation'
import * as Pills from '#/components/Pills'
export function ProfileHeaderAlerts({
diff --git a/src/lib/api/feed/merge.ts b/src/lib/api/feed/merge.ts
index b41e82fb06..35c3440553 100644
--- a/src/lib/api/feed/merge.ts
+++ b/src/lib/api/feed/merge.ts
@@ -1,11 +1,11 @@
import {AppBskyFeedDefs, AppBskyFeedGetTimeline, BskyAgent} from '@atproto/api'
import shuffle from 'lodash.shuffle'
+import {bundleAsync} from '#/lib/async/bundle'
+import {timeout} from '#/lib/async/timeout'
+import {feedUriToHref} from '#/lib/strings/url-helpers'
import {getContentLanguages} from '#/state/preferences/languages'
import {FeedParams} from '#/state/queries/post-feed'
-import {bundleAsync} from 'lib/async/bundle'
-import {timeout} from 'lib/async/timeout'
-import {feedUriToHref} from 'lib/strings/url-helpers'
import {FeedTuner} from '../feed-manip'
import {FeedTunerFn} from '../feed-manip'
import {FeedAPI, FeedAPIResponse, ReasonFeedSource} from './types'
diff --git a/src/lib/async/retry.ts b/src/lib/async/retry.ts
index f14ae6cf66..abf78de55f 100644
--- a/src/lib/async/retry.ts
+++ b/src/lib/async/retry.ts
@@ -1,4 +1,4 @@
-import {isNetworkError} from 'lib/strings/errors'
+import {isNetworkError} from '#/lib/strings/errors'
export async function retry
(
retries: number,
diff --git a/src/lib/custom-animations/CountWheel.tsx b/src/lib/custom-animations/CountWheel.tsx
index 2e435f7d38..b4ca62c6e2 100644
--- a/src/lib/custom-animations/CountWheel.tsx
+++ b/src/lib/custom-animations/CountWheel.tsx
@@ -8,10 +8,10 @@ import Animated, {
} from 'react-native-reanimated'
import {i18n} from '@lingui/core'
-import {decideShouldRoll} from 'lib/custom-animations/util'
-import {s} from 'lib/styles'
-import {formatCount} from 'view/com/util/numeric/format'
-import {Text} from 'view/com/util/text/Text'
+import {decideShouldRoll} from '#/lib/custom-animations/util'
+import {s} from '#/lib/styles'
+import {formatCount} from '#/view/com/util/numeric/format'
+import {Text} from '#/view/com/util/text/Text'
import {atoms as a, useTheme} from '#/alf'
const animationConfig = {
diff --git a/src/lib/custom-animations/CountWheel.web.tsx b/src/lib/custom-animations/CountWheel.web.tsx
index 78120b7078..980ed06e6c 100644
--- a/src/lib/custom-animations/CountWheel.web.tsx
+++ b/src/lib/custom-animations/CountWheel.web.tsx
@@ -3,10 +3,10 @@ import {View} from 'react-native'
import {useReducedMotion} from 'react-native-reanimated'
import {i18n} from '@lingui/core'
-import {decideShouldRoll} from 'lib/custom-animations/util'
-import {s} from 'lib/styles'
-import {formatCount} from 'view/com/util/numeric/format'
-import {Text} from 'view/com/util/text/Text'
+import {decideShouldRoll} from '#/lib/custom-animations/util'
+import {s} from '#/lib/styles'
+import {formatCount} from '#/view/com/util/numeric/format'
+import {Text} from '#/view/com/util/text/Text'
import {atoms as a, useTheme} from '#/alf'
const animationConfig = {
diff --git a/src/lib/custom-animations/LikeIcon.tsx b/src/lib/custom-animations/LikeIcon.tsx
index ee3d413e5f..5c736e88d4 100644
--- a/src/lib/custom-animations/LikeIcon.tsx
+++ b/src/lib/custom-animations/LikeIcon.tsx
@@ -6,7 +6,7 @@ import Animated, {
useReducedMotion,
} from 'react-native-reanimated'
-import {s} from 'lib/styles'
+import {s} from '#/lib/styles'
import {useTheme} from '#/alf'
import {
Heart2_Filled_Stroke2_Corner0_Rounded as HeartIconFilled,
diff --git a/src/lib/custom-animations/LikeIcon.web.tsx b/src/lib/custom-animations/LikeIcon.web.tsx
index 9a70212fe4..79a646e6d8 100644
--- a/src/lib/custom-animations/LikeIcon.web.tsx
+++ b/src/lib/custom-animations/LikeIcon.web.tsx
@@ -2,7 +2,7 @@ import React from 'react'
import {View} from 'react-native'
import {useReducedMotion} from 'react-native-reanimated'
-import {s} from 'lib/styles'
+import {s} from '#/lib/styles'
import {useTheme} from '#/alf'
import {
Heart2_Filled_Stroke2_Corner0_Rounded as HeartIconFilled,
diff --git a/src/lib/generate-starterpack.ts b/src/lib/generate-starterpack.ts
index dba98b942a..3be338ac8a 100644
--- a/src/lib/generate-starterpack.ts
+++ b/src/lib/generate-starterpack.ts
@@ -8,11 +8,11 @@ import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {useMutation} from '@tanstack/react-query'
-import {until} from 'lib/async/until'
-import {sanitizeDisplayName} from 'lib/strings/display-names'
-import {sanitizeHandle} from 'lib/strings/handles'
-import {enforceLen} from 'lib/strings/helpers'
-import {useAgent} from 'state/session'
+import {until} from '#/lib/async/until'
+import {sanitizeDisplayName} from '#/lib/strings/display-names'
+import {sanitizeHandle} from '#/lib/strings/handles'
+import {enforceLen} from '#/lib/strings/helpers'
+import {useAgent} from '#/state/session'
export const createStarterPackList = async ({
name,
diff --git a/src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts b/src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts
index 98e05a8ce6..7f8a99506a 100644
--- a/src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts
+++ b/src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts
@@ -1,4 +1,4 @@
-import {useRef, useEffect} from 'react'
+import {useEffect, useRef} from 'react'
import {useAnimatedScrollHandler as useAnimatedScrollHandler_BUGGY} from 'react-native-reanimated'
export const useAnimatedScrollHandler: typeof useAnimatedScrollHandler_BUGGY = (
diff --git a/src/lib/hooks/useBottomBarOffset.ts b/src/lib/hooks/useBottomBarOffset.ts
index 945c980620..abe18c81b7 100644
--- a/src/lib/hooks/useBottomBarOffset.ts
+++ b/src/lib/hooks/useBottomBarOffset.ts
@@ -1,8 +1,8 @@
import {useSafeAreaInsets} from 'react-native-safe-area-context'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {clamp} from 'lib/numbers'
-import {isWeb} from 'platform/detection'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {clamp} from '#/lib/numbers'
+import {isWeb} from '#/platform/detection'
export function useBottomBarOffset(modifier: number = 0) {
const {isTabletOrDesktop} = useWebMediaQueries()
diff --git a/src/lib/hooks/useColorSchemeStyle.ts b/src/lib/hooks/useColorSchemeStyle.ts
index 100dc44e41..8b79e9e429 100644
--- a/src/lib/hooks/useColorSchemeStyle.ts
+++ b/src/lib/hooks/useColorSchemeStyle.ts
@@ -1,4 +1,4 @@
-import {useTheme} from 'lib/ThemeContext'
+import {useTheme} from '#/lib/ThemeContext'
export function useColorSchemeStyle(lightStyle: T, darkStyle: T) {
const colorScheme = useTheme().colorScheme
diff --git a/src/lib/hooks/useCustomPalette.ts b/src/lib/hooks/useCustomPalette.ts
index 4f8f5c8368..5691ea79b5 100644
--- a/src/lib/hooks/useCustomPalette.ts
+++ b/src/lib/hooks/useCustomPalette.ts
@@ -1,6 +1,7 @@
import React from 'react'
-import {useTheme} from 'lib/ThemeContext'
-import {choose} from 'lib/functions'
+
+import {choose} from '#/lib/functions'
+import {useTheme} from '#/lib/ThemeContext'
export function useCustomPalette({light, dark}: {light: T; dark: T}) {
const theme = useTheme()
diff --git a/src/lib/hooks/useDraggableScrollView.ts b/src/lib/hooks/useDraggableScrollView.ts
index b0f7465d79..3471d0d06c 100644
--- a/src/lib/hooks/useDraggableScrollView.ts
+++ b/src/lib/hooks/useDraggableScrollView.ts
@@ -1,7 +1,8 @@
-import {useEffect, useRef, useMemo, ForwardedRef} from 'react'
-import {Platform, findNodeHandle} from 'react-native'
+import {ForwardedRef, useEffect, useMemo, useRef} from 'react'
import type {ScrollView} from 'react-native'
-import {mergeRefs} from 'lib/merge-refs'
+import {findNodeHandle, Platform} from 'react-native'
+
+import {mergeRefs} from '#/lib/merge-refs'
type Props = {
cursor?: string
diff --git a/src/lib/hooks/useGoBack.ts b/src/lib/hooks/useGoBack.ts
index 59555bdac1..e5a39f745c 100644
--- a/src/lib/hooks/useGoBack.ts
+++ b/src/lib/hooks/useGoBack.ts
@@ -1,6 +1,6 @@
import {StackActions, useNavigation} from '@react-navigation/native'
-import {NavigationProp} from 'lib/routes/types'
+import {NavigationProp} from '#/lib/routes/types'
import {router} from '#/routes'
export function useGoBack(onGoBack?: () => unknown) {
diff --git a/src/lib/hooks/useInitialNumToRender.ts b/src/lib/hooks/useInitialNumToRender.ts
index f729cbffa6..fd80d5d770 100644
--- a/src/lib/hooks/useInitialNumToRender.ts
+++ b/src/lib/hooks/useInitialNumToRender.ts
@@ -1,7 +1,7 @@
import {useWindowDimensions} from 'react-native'
import {useSafeAreaInsets} from 'react-native-safe-area-context'
-import {useBottomBarOffset} from 'lib/hooks/useBottomBarOffset'
+import {useBottomBarOffset} from '#/lib/hooks/useBottomBarOffset'
const MIN_POST_HEIGHT = 100
diff --git a/src/lib/hooks/useIsKeyboardVisible.ts b/src/lib/hooks/useIsKeyboardVisible.ts
index 38fc80bde1..5a9bbd5742 100644
--- a/src/lib/hooks/useIsKeyboardVisible.ts
+++ b/src/lib/hooks/useIsKeyboardVisible.ts
@@ -1,6 +1,7 @@
-import {useState, useEffect} from 'react'
+import {useEffect, useState} from 'react'
import {Keyboard} from 'react-native'
-import {isIOS} from 'platform/detection'
+
+import {isIOS} from '#/platform/detection'
export function useIsKeyboardVisible({
iosUseWillEvents,
diff --git a/src/lib/hooks/useNavigationDeduped.ts b/src/lib/hooks/useNavigationDeduped.ts
index d913f7f3d0..56ae5e8a29 100644
--- a/src/lib/hooks/useNavigationDeduped.ts
+++ b/src/lib/hooks/useNavigationDeduped.ts
@@ -1,9 +1,10 @@
import React from 'react'
import {useNavigation} from '@react-navigation/core'
-import {AllNavigatorParams, NavigationProp} from 'lib/routes/types'
-import type {NavigationAction} from '@react-navigation/routers'
import {NavigationState} from '@react-navigation/native'
-import {useDedupe} from 'lib/hooks/useDedupe'
+import type {NavigationAction} from '@react-navigation/routers'
+
+import {useDedupe} from '#/lib/hooks/useDedupe'
+import {AllNavigatorParams, NavigationProp} from '#/lib/routes/types'
export type DebouncedNavigationProp = Pick<
NavigationProp,
diff --git a/src/lib/hooks/useNavigationTabState.ts b/src/lib/hooks/useNavigationTabState.ts
index e1fa950089..2d15bce562 100644
--- a/src/lib/hooks/useNavigationTabState.ts
+++ b/src/lib/hooks/useNavigationTabState.ts
@@ -1,6 +1,6 @@
import {useNavigationState} from '@react-navigation/native'
-import {getTabState, TabState} from 'lib/routes/helpers'
+import {getTabState, TabState} from '#/lib/routes/helpers'
export function useNavigationTabState() {
return useNavigationState(state => {
diff --git a/src/lib/hooks/useNavigationTabState.web.ts b/src/lib/hooks/useNavigationTabState.web.ts
index e86d6c6c37..03dcbbb038 100644
--- a/src/lib/hooks/useNavigationTabState.web.ts
+++ b/src/lib/hooks/useNavigationTabState.web.ts
@@ -1,6 +1,6 @@
import {useNavigationState} from '@react-navigation/native'
-import {getCurrentRoute} from 'lib/routes/helpers'
+import {getCurrentRoute} from '#/lib/routes/helpers'
export function useNavigationTabState() {
return useNavigationState(state => {
diff --git a/src/lib/hooks/useOTAUpdates.ts b/src/lib/hooks/useOTAUpdates.ts
index a1692e62cc..731406dcec 100644
--- a/src/lib/hooks/useOTAUpdates.ts
+++ b/src/lib/hooks/useOTAUpdates.ts
@@ -10,9 +10,9 @@ import {
useUpdates,
} from 'expo-updates'
+import {IS_TESTFLIGHT} from '#/lib/app-info'
import {logger} from '#/logger'
-import {IS_TESTFLIGHT} from 'lib/app-info'
-import {isIOS} from 'platform/detection'
+import {isIOS} from '#/platform/detection'
const MINIMUM_MINIMIZE_TIME = 15 * 60e3
diff --git a/src/lib/hooks/usePalette.ts b/src/lib/hooks/usePalette.ts
index eeb43d0b1f..2530642f60 100644
--- a/src/lib/hooks/usePalette.ts
+++ b/src/lib/hooks/usePalette.ts
@@ -1,6 +1,7 @@
import {useMemo} from 'react'
import {TextStyle, ViewStyle} from 'react-native'
-import {useTheme, PaletteColorName, PaletteColor} from '../ThemeContext'
+
+import {PaletteColor, PaletteColorName, useTheme} from '../ThemeContext'
export interface UsePaletteValue {
colors: PaletteColor
diff --git a/src/lib/hooks/usePermissions.ts b/src/lib/hooks/usePermissions.ts
index d248e19759..6da14232f5 100644
--- a/src/lib/hooks/usePermissions.ts
+++ b/src/lib/hooks/usePermissions.ts
@@ -2,8 +2,8 @@ import {Linking} from 'react-native'
import {Camera} from 'expo-camera/legacy' // TODO: Migrate to the new one.
import * as MediaLibrary from 'expo-media-library'
-import {isWeb} from 'platform/detection'
-import {Alert} from 'view/com/util/Alert'
+import {isWeb} from '#/platform/detection'
+import {Alert} from '#/view/com/util/Alert'
const openPermissionAlert = (perm: string) => {
Alert.alert(
diff --git a/src/lib/hooks/useSetTitle.ts b/src/lib/hooks/useSetTitle.ts
index 129023f717..fa1e2a5b11 100644
--- a/src/lib/hooks/useSetTitle.ts
+++ b/src/lib/hooks/useSetTitle.ts
@@ -1,8 +1,8 @@
import {useEffect} from 'react'
import {useNavigation} from '@react-navigation/native'
-import {NavigationProp} from 'lib/routes/types'
-import {bskyTitle} from 'lib/strings/headings'
+import {NavigationProp} from '#/lib/routes/types'
+import {bskyTitle} from '#/lib/strings/headings'
import {useUnreadNotifications} from '#/state/queries/notifications/unread'
export function useSetTitle(title?: string) {
diff --git a/src/lib/hooks/useTabFocusEffect.ts b/src/lib/hooks/useTabFocusEffect.ts
index e446084c5a..a54a3af73f 100644
--- a/src/lib/hooks/useTabFocusEffect.ts
+++ b/src/lib/hooks/useTabFocusEffect.ts
@@ -1,6 +1,7 @@
import {useEffect, useState} from 'react'
import {useNavigation} from '@react-navigation/native'
-import {getTabState, TabState} from 'lib/routes/helpers'
+
+import {getTabState, TabState} from '#/lib/routes/helpers'
export function useTabFocusEffect(
tabName: string,
diff --git a/src/lib/hooks/useToggleMutationQueue.ts b/src/lib/hooks/useToggleMutationQueue.ts
index 28ae861424..c4b86d3253 100644
--- a/src/lib/hooks/useToggleMutationQueue.ts
+++ b/src/lib/hooks/useToggleMutationQueue.ts
@@ -1,4 +1,4 @@
-import {useState, useRef, useEffect, useCallback} from 'react'
+import {useCallback, useEffect, useRef, useState} from 'react'
type Task = {
isOn: boolean
diff --git a/src/lib/hooks/useWebMediaQueries.tsx b/src/lib/hooks/useWebMediaQueries.tsx
index 71a96a89b1..fa9d6ffa64 100644
--- a/src/lib/hooks/useWebMediaQueries.tsx
+++ b/src/lib/hooks/useWebMediaQueries.tsx
@@ -1,5 +1,6 @@
import {useMediaQuery} from 'react-responsive'
-import {isNative} from 'platform/detection'
+
+import {isNative} from '#/platform/detection'
export function useWebMediaQueries() {
const isDesktop = useMediaQuery({minWidth: 1300})
diff --git a/src/lib/hooks/useWebScrollRestoration.ts b/src/lib/hooks/useWebScrollRestoration.ts
index f68fbf0f2f..36484ba0f1 100644
--- a/src/lib/hooks/useWebScrollRestoration.ts
+++ b/src/lib/hooks/useWebScrollRestoration.ts
@@ -1,4 +1,4 @@
-import {useMemo, useState, useEffect} from 'react'
+import {useEffect, useMemo, useState} from 'react'
import {EventArg, useNavigation} from '@react-navigation/core'
if ('scrollRestoration' in history) {
diff --git a/src/lib/media/image-sizes.ts b/src/lib/media/image-sizes.ts
index 4ea95ea237..7a15556882 100644
--- a/src/lib/media/image-sizes.ts
+++ b/src/lib/media/image-sizes.ts
@@ -1,5 +1,6 @@
import {Image} from 'react-native'
-import type {Dimensions} from 'lib/media/types'
+
+import type {Dimensions} from '#/lib/media/types'
const sizes: Map = new Map()
const activeRequests: Map> = new Map()
diff --git a/src/lib/media/video/compress.web.ts b/src/lib/media/video/compress.web.ts
index 7f057d2ea5..ef868792aa 100644
--- a/src/lib/media/video/compress.web.ts
+++ b/src/lib/media/video/compress.web.ts
@@ -1,6 +1,6 @@
import {ImagePickerAsset} from 'expo-image-picker'
-import {VideoTooLargeError} from 'lib/media/video/errors'
+import {VideoTooLargeError} from '#/lib/media/video/errors'
import {CompressedVideo} from './types'
const MAX_VIDEO_SIZE = 1024 * 1024 * 50 // 50mb
diff --git a/src/lib/moderation/create-sanitized-display-name.ts b/src/lib/moderation/create-sanitized-display-name.ts
index 5863503f5b..4f9584f918 100644
--- a/src/lib/moderation/create-sanitized-display-name.ts
+++ b/src/lib/moderation/create-sanitized-display-name.ts
@@ -1,7 +1,7 @@
import {AppBskyActorDefs} from '@atproto/api'
-import {sanitizeDisplayName} from 'lib/strings/display-names'
-import {sanitizeHandle} from 'lib/strings/handles'
+import {sanitizeDisplayName} from '#/lib/strings/display-names'
+import {sanitizeHandle} from '#/lib/strings/handles'
export function createSanitizedDisplayName(
profile:
diff --git a/src/lib/moderation/useLabelBehaviorDescription.ts b/src/lib/moderation/useLabelBehaviorDescription.ts
index 0250c1bc89..4e773e0f0f 100644
--- a/src/lib/moderation/useLabelBehaviorDescription.ts
+++ b/src/lib/moderation/useLabelBehaviorDescription.ts
@@ -1,6 +1,6 @@
import {InterpretedLabelValueDefinition, LabelPreference} from '@atproto/api'
-import {useLingui} from '@lingui/react'
import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
export function useLabelBehaviorDescription(
labelValueDef: InterpretedLabelValueDefinition,
diff --git a/src/lib/notifications/notifications.ts b/src/lib/notifications/notifications.ts
index 88b9eee3a5..dfdc3b49c4 100644
--- a/src/lib/notifications/notifications.ts
+++ b/src/lib/notifications/notifications.ts
@@ -3,10 +3,10 @@ import * as Notifications from 'expo-notifications'
import {getBadgeCountAsync, setBadgeCountAsync} from 'expo-notifications'
import {BskyAgent} from '@atproto/api'
+import {logEvent} from '#/lib/statsig/statsig'
import {logger} from '#/logger'
+import {devicePlatform, isAndroid, isNative} from '#/platform/detection'
import {SessionAccount, useAgent, useSession} from '#/state/session'
-import {logEvent} from 'lib/statsig/statsig'
-import {devicePlatform, isAndroid, isNative} from 'platform/detection'
import BackgroundNotificationHandler from '../../../modules/expo-background-notification-handler'
const SERVICE_DID = (serviceUrl?: string) =>
diff --git a/src/lib/routes/links.ts b/src/lib/routes/links.ts
index 56b716677b..8a99502620 100644
--- a/src/lib/routes/links.ts
+++ b/src/lib/routes/links.ts
@@ -1,6 +1,6 @@
import {AppBskyGraphDefs, AtUri} from '@atproto/api'
-import {isInvalidHandle} from 'lib/strings/handles'
+import {isInvalidHandle} from '#/lib/strings/handles'
export function makeProfileLink(
info: {
diff --git a/src/lib/sentry.ts b/src/lib/sentry.ts
index 37d41e3a2d..2c390d7de9 100644
--- a/src/lib/sentry.ts
+++ b/src/lib/sentry.ts
@@ -7,7 +7,7 @@ import {Platform} from 'react-native'
import {nativeApplicationVersion, nativeBuildVersion} from 'expo-application'
import {init} from '@sentry/react-native'
-import {BUILD_ENV, IS_DEV, IS_TESTFLIGHT} from 'lib/app-info'
+import {BUILD_ENV, IS_DEV, IS_TESTFLIGHT} from '#/lib/app-info'
/**
* Examples:
diff --git a/src/lib/strings/handles.ts b/src/lib/strings/handles.ts
index 7955e1b2e4..90786ac3f6 100644
--- a/src/lib/strings/handles.ts
+++ b/src/lib/strings/handles.ts
@@ -1,6 +1,6 @@
// Regex from the go implementation
// https://github.com/bluesky-social/indigo/blob/main/atproto/syntax/handle.go#L10
-import {forceLTR} from 'lib/strings/bidi'
+import {forceLTR} from '#/lib/strings/bidi'
const VALIDATE_REGEX =
/^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/
diff --git a/src/lib/strings/rich-text-helpers.ts b/src/lib/strings/rich-text-helpers.ts
index 662004599b..54f0733d0c 100644
--- a/src/lib/strings/rich-text-helpers.ts
+++ b/src/lib/strings/rich-text-helpers.ts
@@ -1,4 +1,5 @@
import {AppBskyRichtextFacet, RichText} from '@atproto/api'
+
import {linkRequiresWarning} from './url-helpers'
export function richTextToString(rt: RichText, loose: boolean): string {
diff --git a/src/lib/strings/url-helpers.ts b/src/lib/strings/url-helpers.ts
index 4c8db83999..c44fdf7c2e 100644
--- a/src/lib/strings/url-helpers.ts
+++ b/src/lib/strings/url-helpers.ts
@@ -2,10 +2,10 @@ import {AtUri} from '@atproto/api'
import psl from 'psl'
import TLDs from 'tlds'
+import {BSKY_SERVICE} from '#/lib/constants'
+import {isInvalidHandle} from '#/lib/strings/handles'
+import {startUriToStarterPackUri} from '#/lib/strings/starter-pack'
import {logger} from '#/logger'
-import {BSKY_SERVICE} from 'lib/constants'
-import {isInvalidHandle} from 'lib/strings/handles'
-import {startUriToStarterPackUri} from 'lib/strings/starter-pack'
export const BSKY_APP_HOST = 'https://bsky.app'
const BSKY_TRUSTED_HOSTS = [
diff --git a/src/locale/__tests__/helpers.test.ts b/src/locale/__tests__/helpers.test.ts
index 5e924c9fe8..0cc0b7816e 100644
--- a/src/locale/__tests__/helpers.test.ts
+++ b/src/locale/__tests__/helpers.test.ts
@@ -1,4 +1,4 @@
-import {test, expect} from '@jest/globals'
+import {expect, test} from '@jest/globals'
import {sanitizeAppLanguageSetting} from '#/locale/helpers'
import {AppLanguage} from '#/locale/languages'
diff --git a/src/locale/helpers.ts b/src/locale/helpers.ts
index f4d6eea53f..0d215a9d77 100644
--- a/src/locale/helpers.ts
+++ b/src/locale/helpers.ts
@@ -2,7 +2,7 @@ import {AppBskyFeedDefs, AppBskyFeedPost} from '@atproto/api'
import * as bcp47Match from 'bcp-47-match'
import lande from 'lande'
-import {hasProp} from 'lib/type-guards'
+import {hasProp} from '#/lib/type-guards'
import {
AppLanguage,
LANGUAGES_MAP_CODE2,
diff --git a/src/locale/i18nProvider.tsx b/src/locale/i18nProvider.tsx
index 3766f5b716..f7f0679731 100644
--- a/src/locale/i18nProvider.tsx
+++ b/src/locale/i18nProvider.tsx
@@ -1,6 +1,7 @@
import React from 'react'
-import {I18nProvider as DefaultI18nProvider} from '@lingui/react'
import {i18n} from '@lingui/core'
+import {I18nProvider as DefaultI18nProvider} from '@lingui/react'
+
import {useLocaleLanguage} from './i18n'
export default function I18nProvider({children}: {children: React.ReactNode}) {
diff --git a/src/screens/List/ListHiddenScreen.tsx b/src/screens/List/ListHiddenScreen.tsx
index e4354337a8..a694cbb837 100644
--- a/src/screens/List/ListHiddenScreen.tsx
+++ b/src/screens/List/ListHiddenScreen.tsx
@@ -5,18 +5,18 @@ import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {useQueryClient} from '@tanstack/react-query'
+import {useGoBack} from '#/lib/hooks/useGoBack'
+import {sanitizeHandle} from '#/lib/strings/handles'
import {logger} from '#/logger'
import {RQKEY_ROOT as listQueryRoot} from '#/state/queries/list'
-import {useGoBack} from 'lib/hooks/useGoBack'
-import {sanitizeHandle} from 'lib/strings/handles'
-import {useListBlockMutation, useListMuteMutation} from 'state/queries/list'
+import {useListBlockMutation, useListMuteMutation} from '#/state/queries/list'
import {
UsePreferencesQueryResponse,
useRemoveFeedMutation,
-} from 'state/queries/preferences'
-import {useSession} from 'state/session'
-import * as Toast from 'view/com/util/Toast'
-import {CenteredView} from 'view/com/util/Views'
+} from '#/state/queries/preferences'
+import {useSession} from '#/state/session'
+import * as Toast from '#/view/com/util/Toast'
+import {CenteredView} from '#/view/com/util/Views'
import {atoms as a, useBreakpoints, useTheme} from '#/alf'
import {Button, ButtonIcon, ButtonText} from '#/components/Button'
import {EyeSlash_Stroke2_Corner0_Rounded as EyeSlash} from '#/components/icons/EyeSlash'
diff --git a/src/screens/Profile/ErrorState.tsx b/src/screens/Profile/ErrorState.tsx
index 2ec2cf592e..97ce35bb28 100644
--- a/src/screens/Profile/ErrorState.tsx
+++ b/src/screens/Profile/ErrorState.tsx
@@ -1,14 +1,14 @@
import React from 'react'
import {View} from 'react-native'
-import {Trans, msg} from '@lingui/macro'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {useNavigation} from '@react-navigation/native'
-import {useTheme, atoms as a} from '#/alf'
-import {Text} from '#/components/Typography'
+import {NavigationProp} from '#/lib/routes/types'
+import {atoms as a, useTheme} from '#/alf'
import {Button, ButtonText} from '#/components/Button'
import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
-import {NavigationProp} from '#/lib/routes/types'
+import {Text} from '#/components/Typography'
export function ErrorState({error}: {error: string}) {
const t = useTheme()
diff --git a/src/screens/Profile/Header/Metrics.tsx b/src/screens/Profile/Header/Metrics.tsx
index 756eb1f89e..30686ef99c 100644
--- a/src/screens/Profile/Header/Metrics.tsx
+++ b/src/screens/Profile/Header/Metrics.tsx
@@ -4,9 +4,9 @@ import {AppBskyActorDefs} from '@atproto/api'
import {msg, plural} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {makeProfileLink} from '#/lib/routes/links'
import {Shadow} from '#/state/cache/types'
-import {makeProfileLink} from 'lib/routes/links'
-import {formatCount} from 'view/com/util/numeric/format'
+import {formatCount} from '#/view/com/util/numeric/format'
import {atoms as a, useTheme} from '#/alf'
import {InlineLinkText} from '#/components/Link'
import {Text} from '#/components/Typography'
diff --git a/src/screens/Signup/StepCaptcha/index.tsx b/src/screens/Signup/StepCaptcha/index.tsx
index 9050ca0610..f757155102 100644
--- a/src/screens/Signup/StepCaptcha/index.tsx
+++ b/src/screens/Signup/StepCaptcha/index.tsx
@@ -4,9 +4,9 @@ import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {nanoid} from 'nanoid/non-secure'
+import {logEvent} from '#/lib/statsig/statsig'
import {createFullHandle} from '#/lib/strings/handles'
import {logger} from '#/logger'
-import {logEvent} from 'lib/statsig/statsig'
import {ScreenTransition} from '#/screens/Login/ScreenTransition'
import {useSignupContext} from '#/screens/Signup/state'
import {CaptchaWebView} from '#/screens/Signup/StepCaptcha/CaptchaWebView'
diff --git a/src/screens/StarterPack/Wizard/State.tsx b/src/screens/StarterPack/Wizard/State.tsx
index debb7e23cc..f65933fbb0 100644
--- a/src/screens/StarterPack/Wizard/State.tsx
+++ b/src/screens/StarterPack/Wizard/State.tsx
@@ -7,8 +7,8 @@ import {
import {GeneratorView} from '@atproto/api/dist/client/types/app/bsky/feed/defs'
import {msg} from '@lingui/macro'
-import {STARTER_PACK_MAX_SIZE} from 'lib/constants'
-import {useSession} from 'state/session'
+import {STARTER_PACK_MAX_SIZE} from '#/lib/constants'
+import {useSession} from '#/state/session'
import * as Toast from '#/view/com/util/Toast'
const steps = ['Details', 'Profiles', 'Feeds'] as const
diff --git a/src/screens/StarterPack/Wizard/StepDetails.tsx b/src/screens/StarterPack/Wizard/StepDetails.tsx
index 24c992c60b..4ee2cada97 100644
--- a/src/screens/StarterPack/Wizard/StepDetails.tsx
+++ b/src/screens/StarterPack/Wizard/StepDetails.tsx
@@ -3,8 +3,8 @@ import {View} from 'react-native'
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {useProfileQuery} from 'state/queries/profile'
-import {useSession} from 'state/session'
+import {useProfileQuery} from '#/state/queries/profile'
+import {useSession} from '#/state/session'
import {useWizardState} from '#/screens/StarterPack/Wizard/State'
import {atoms as a, useTheme} from '#/alf'
import * as TextField from '#/components/forms/TextField'
diff --git a/src/state/preferences/external-embeds-prefs.tsx b/src/state/preferences/external-embeds-prefs.tsx
index 04afb89dd7..9104bc71fd 100644
--- a/src/state/preferences/external-embeds-prefs.tsx
+++ b/src/state/preferences/external-embeds-prefs.tsx
@@ -1,7 +1,7 @@
import React from 'react'
+import {EmbedPlayerSource} from '#/lib/strings/embed-player'
import * as persisted from '#/state/persisted'
-import {EmbedPlayerSource} from 'lib/strings/embed-player'
type StateContext = persisted.Schema['externalEmbeds']
type SetContext = (
diff --git a/src/state/queries/messages/conversation.ts b/src/state/queries/messages/conversation.ts
index 16ace3c5a8..fa8a883d05 100644
--- a/src/state/queries/messages/conversation.ts
+++ b/src/state/queries/messages/conversation.ts
@@ -1,10 +1,10 @@
import {ChatBskyConvoDefs} from '@atproto/api'
import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
+import {STALE} from '#/state/queries'
import {DM_SERVICE_HEADERS} from '#/state/queries/messages/const'
import {useOnMarkAsRead} from '#/state/queries/messages/list-converations'
import {useAgent} from '#/state/session'
-import {STALE} from 'state/queries'
import {RQKEY as LIST_CONVOS_KEY} from './list-converations'
const RQKEY_ROOT = 'convo'
diff --git a/src/state/queries/notifications/unread.tsx b/src/state/queries/notifications/unread.tsx
index 7bb325ea98..2ade04246f 100644
--- a/src/state/queries/notifications/unread.tsx
+++ b/src/state/queries/notifications/unread.tsx
@@ -8,9 +8,9 @@ import {useQueryClient} from '@tanstack/react-query'
import EventEmitter from 'eventemitter3'
import BroadcastChannel from '#/lib/broadcast'
+import {resetBadgeCount} from '#/lib/notifications/notifications'
import {logger} from '#/logger'
import {useAgent, useSession} from '#/state/session'
-import {resetBadgeCount} from 'lib/notifications/notifications'
import {useModerationOpts} from '../../preferences/moderation-opts'
import {truncateAndInvalidate} from '../util'
import {RQKEY as RQKEY_NOTIFS} from './feed'
diff --git a/src/state/queries/post-thread.ts b/src/state/queries/post-thread.ts
index a569cb1605..103a1d03b5 100644
--- a/src/state/queries/post-thread.ts
+++ b/src/state/queries/post-thread.ts
@@ -11,13 +11,13 @@ import {
import {QueryClient, useQuery, useQueryClient} from '@tanstack/react-query'
import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
+import {findAllPostsInQueryData as findAllPostsInQuoteQueryData} from '#/state/queries/post-quotes'
import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types'
-import {useAgent} from '#/state/session'
-import {findAllPostsInQueryData as findAllPostsInQuoteQueryData} from 'state/queries/post-quotes'
import {
findAllPostsInQueryData as findAllPostsInSearchQueryData,
findAllProfilesInQueryData as findAllProfilesInSearchQueryData,
-} from 'state/queries/search-posts'
+} from '#/state/queries/search-posts'
+import {useAgent} from '#/state/session'
import {
findAllPostsInQueryData as findAllPostsInNotifsQueryData,
findAllProfilesInQueryData as findAllProfilesInNotifsQueryData,
diff --git a/src/state/queries/resolve-short-link.ts b/src/state/queries/resolve-short-link.ts
index a10bc12c17..649d2db749 100644
--- a/src/state/queries/resolve-short-link.ts
+++ b/src/state/queries/resolve-short-link.ts
@@ -1,8 +1,8 @@
import {useQuery} from '@tanstack/react-query'
-import {resolveShortLink} from 'lib/link-meta/resolve-short-link'
-import {parseStarterPackUri} from 'lib/strings/starter-pack'
-import {STALE} from 'state/queries/index'
+import {resolveShortLink} from '#/lib/link-meta/resolve-short-link'
+import {parseStarterPackUri} from '#/lib/strings/starter-pack'
+import {STALE} from '#/state/queries/index'
const ROOT_URI = 'https://go.bsky.app/'
diff --git a/src/state/queries/starter-packs.ts b/src/state/queries/starter-packs.ts
index a3795d7927..4066f8f192 100644
--- a/src/state/queries/starter-packs.ts
+++ b/src/state/queries/starter-packs.ts
@@ -18,17 +18,17 @@ import {
} from '@tanstack/react-query'
import chunk from 'lodash.chunk'
-import {until} from 'lib/async/until'
-import {createStarterPackList} from 'lib/generate-starterpack'
+import {until} from '#/lib/async/until'
+import {createStarterPackList} from '#/lib/generate-starterpack'
import {
createStarterPackUri,
httpStarterPackUriToAtUri,
parseStarterPackUri,
-} from 'lib/strings/starter-pack'
-import {invalidateActorStarterPacksQuery} from 'state/queries/actor-starter-packs'
-import {STALE} from 'state/queries/index'
-import {invalidateListMembersQuery} from 'state/queries/list-members'
-import {useAgent} from 'state/session'
+} from '#/lib/strings/starter-pack'
+import {invalidateActorStarterPacksQuery} from '#/state/queries/actor-starter-packs'
+import {STALE} from '#/state/queries/index'
+import {invalidateListMembersQuery} from '#/state/queries/list-members'
+import {useAgent} from '#/state/session'
const RQKEY_ROOT = 'starter-pack'
const RQKEY = ({
diff --git a/src/view/com/auth/util/HelpTip.tsx b/src/view/com/auth/util/HelpTip.tsx
index 65f7278d6b..0fac86becf 100644
--- a/src/view/com/auth/util/HelpTip.tsx
+++ b/src/view/com/auth/util/HelpTip.tsx
@@ -1,9 +1,10 @@
import React from 'react'
import {StyleSheet, View} from 'react-native'
-import {Text} from 'view/com/util/text/Text'
-import {InfoCircleIcon} from 'lib/icons'
-import {s, colors} from 'lib/styles'
-import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
+
+import {useColorSchemeStyle} from '#/lib/hooks/useColorSchemeStyle'
+import {InfoCircleIcon} from '#/lib/icons'
+import {colors, s} from '#/lib/styles'
+import {Text} from '#/view/com/util/text/Text'
export function HelpTip({text}: {text: string}) {
const bg = useColorSchemeStyle(
diff --git a/src/view/com/auth/util/TextInput.tsx b/src/view/com/auth/util/TextInput.tsx
index 38aff03849..0ccbe6ac4a 100644
--- a/src/view/com/auth/util/TextInput.tsx
+++ b/src/view/com/auth/util/TextInput.tsx
@@ -1,9 +1,10 @@
import React, {ComponentProps} from 'react'
import {StyleSheet, TextInput as RNTextInput, View} from 'react-native'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
import {IconProp} from '@fortawesome/fontawesome-svg-core'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useTheme} from 'lib/ThemeContext'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useTheme} from '#/lib/ThemeContext'
interface Props extends Omit, 'onChange'> {
testID?: string
diff --git a/src/view/com/composer/select-language/SelectLangBtn.tsx b/src/view/com/composer/select-language/SelectLangBtn.tsx
index 7a086789ac..695c849509 100644
--- a/src/view/com/composer/select-language/SelectLangBtn.tsx
+++ b/src/view/com/composer/select-language/SelectLangBtn.tsx
@@ -7,6 +7,8 @@ import {
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {isNative} from '#/platform/detection'
import {useModalControls} from '#/state/modals'
import {
hasPostLanguage,
@@ -14,14 +16,12 @@ import {
useLanguagePrefs,
useLanguagePrefsApi,
} from '#/state/preferences/languages'
-import {usePalette} from 'lib/hooks/usePalette'
-import {isNative} from 'platform/detection'
import {
DropdownButton,
DropdownItem,
DropdownItemButton,
-} from 'view/com/util/forms/DropdownButton'
-import {Text} from 'view/com/util/text/Text'
+} from '#/view/com/util/forms/DropdownButton'
+import {Text} from '#/view/com/util/text/Text'
import {codeToLanguageName} from '../../../../locale/helpers'
export function SelectLangBtn() {
diff --git a/src/view/com/composer/select-language/SuggestedLanguage.tsx b/src/view/com/composer/select-language/SuggestedLanguage.tsx
index 0bf62ae0d8..e915f4c665 100644
--- a/src/view/com/composer/select-language/SuggestedLanguage.tsx
+++ b/src/view/com/composer/select-language/SuggestedLanguage.tsx
@@ -1,22 +1,23 @@
import React, {useEffect, useState} from 'react'
import {StyleSheet, View} from 'react-native'
-import lande from 'lande'
-import {Trans, msg} from '@lingui/macro'
+import {
+ FontAwesomeIcon,
+ FontAwesomeIconStyle,
+} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {Text} from '../../util/text/Text'
-import {Button} from '../../util/forms/Button'
+import lande from 'lande'
+
+import {usePalette} from '#/lib/hooks/usePalette'
+import {s} from '#/lib/styles'
import {code3ToCode2Strict, codeToLanguageName} from '#/locale/helpers'
import {
toPostLanguages,
useLanguagePrefs,
useLanguagePrefsApi,
} from '#/state/preferences/languages'
-import {usePalette} from '#/lib/hooks/usePalette'
-import {s} from '#/lib/styles'
-import {
- FontAwesomeIcon,
- FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
+import {Button} from '../../util/forms/Button'
+import {Text} from '../../util/text/Text'
// fallbacks for safari
const onIdle = globalThis.requestIdleCallback || (cb => setTimeout(cb, 1))
diff --git a/src/view/com/composer/text-input/hooks/useGrapheme.tsx b/src/view/com/composer/text-input/hooks/useGrapheme.tsx
index 25947c3ec7..01b5b96989 100644
--- a/src/view/com/composer/text-input/hooks/useGrapheme.tsx
+++ b/src/view/com/composer/text-input/hooks/useGrapheme.tsx
@@ -1,5 +1,5 @@
-import Graphemer from 'graphemer'
import {useCallback, useMemo} from 'react'
+import Graphemer from 'graphemer'
export const useGrapheme = () => {
const splitter = useMemo(() => new Graphemer(), [])
diff --git a/src/view/com/composer/text-input/web/LinkDecorator.ts b/src/view/com/composer/text-input/web/LinkDecorator.ts
index 60f2d40855..af38d6b05a 100644
--- a/src/view/com/composer/text-input/web/LinkDecorator.ts
+++ b/src/view/com/composer/text-input/web/LinkDecorator.ts
@@ -20,7 +20,7 @@ import {Node as ProsemirrorNode} from '@tiptap/pm/model'
import {Plugin, PluginKey} from '@tiptap/pm/state'
import {Decoration, DecorationSet} from '@tiptap/pm/view'
-import {isValidDomain} from 'lib/strings/url-helpers'
+import {isValidDomain} from '#/lib/strings/url-helpers'
export const LinkDecorator = Mark.create({
name: 'link-decorator',
diff --git a/src/view/com/composer/text-input/web/TagDecorator.ts b/src/view/com/composer/text-input/web/TagDecorator.ts
index 2bf3184a8c..9225fd6bf9 100644
--- a/src/view/com/composer/text-input/web/TagDecorator.ts
+++ b/src/view/com/composer/text-input/web/TagDecorator.ts
@@ -14,11 +14,11 @@
* the facet-set.
*/
-import {Mark} from '@tiptap/core'
-import {Plugin, PluginKey} from '@tiptap/pm/state'
-import {Node as ProsemirrorNode} from '@tiptap/pm/model'
-import {Decoration, DecorationSet} from '@tiptap/pm/view'
import {TAG_REGEX, TRAILING_PUNCTUATION_REGEX} from '@atproto/api'
+import {Mark} from '@tiptap/core'
+import {Node as ProsemirrorNode} from '@tiptap/pm/model'
+import {Plugin, PluginKey} from '@tiptap/pm/state'
+import {Decoration, DecorationSet} from '@tiptap/pm/view'
function getDecorations(doc: ProsemirrorNode) {
const decorations: Decoration[] = []
diff --git a/src/view/com/composer/videos/VideoPreview.tsx b/src/view/com/composer/videos/VideoPreview.tsx
index 000d22f378..50a38f9769 100644
--- a/src/view/com/composer/videos/VideoPreview.tsx
+++ b/src/view/com/composer/videos/VideoPreview.tsx
@@ -6,7 +6,7 @@ import {BlueskyVideoView} from '@haileyok/bluesky-video'
import {CompressedVideo} from '#/lib/media/video/types'
import {clamp} from '#/lib/numbers'
import {useAutoplayDisabled} from '#/state/preferences'
-import {ExternalEmbedRemoveBtn} from 'view/com/composer/ExternalEmbedRemoveBtn'
+import {ExternalEmbedRemoveBtn} from '#/view/com/composer/ExternalEmbedRemoveBtn'
import {atoms as a, useTheme} from '#/alf'
import {PlayButtonIcon} from '#/components/video/PlayButtonIcon'
diff --git a/src/view/com/composer/videos/VideoPreview.web.tsx b/src/view/com/composer/videos/VideoPreview.web.tsx
index f64de29e7c..ccb3391c2a 100644
--- a/src/view/com/composer/videos/VideoPreview.web.tsx
+++ b/src/view/com/composer/videos/VideoPreview.web.tsx
@@ -7,8 +7,8 @@ import {useLingui} from '@lingui/react'
import {CompressedVideo} from '#/lib/media/video/types'
import {clamp} from '#/lib/numbers'
import {useAutoplayDisabled} from '#/state/preferences'
+import {ExternalEmbedRemoveBtn} from '#/view/com/composer/ExternalEmbedRemoveBtn'
import * as Toast from '#/view/com/util/Toast'
-import {ExternalEmbedRemoveBtn} from 'view/com/composer/ExternalEmbedRemoveBtn'
import {atoms as a} from '#/alf'
import {PlayButtonIcon} from '#/components/video/PlayButtonIcon'
diff --git a/src/view/com/home/HomeHeader.tsx b/src/view/com/home/HomeHeader.tsx
index b225efaa3c..31c7135634 100644
--- a/src/view/com/home/HomeHeader.tsx
+++ b/src/view/com/home/HomeHeader.tsx
@@ -2,10 +2,10 @@ import React from 'react'
import {useNavigation} from '@react-navigation/native'
import {usePalette} from '#/lib/hooks/usePalette'
+import {NavigationProp} from '#/lib/routes/types'
import {FeedSourceInfo} from '#/state/queries/feed'
import {useSession} from '#/state/session'
-import {NavigationProp} from 'lib/routes/types'
-import {RenderTabBarFnProps} from 'view/com/pager/Pager'
+import {RenderTabBarFnProps} from '#/view/com/pager/Pager'
import {TabBar} from '../pager/TabBar'
import {HomeHeaderLayout} from './HomeHeaderLayout'
diff --git a/src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx b/src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx
index 88476c8e1f..e7caa58a8e 100644
--- a/src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx
+++ b/src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx
@@ -8,8 +8,8 @@
import React from 'react'
import {
SafeAreaView,
- TouchableOpacity,
StyleSheet,
+ TouchableOpacity,
ViewStyle,
} from 'react-native'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx
index 08b99bf9ee..4cb7903efa 100644
--- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx
+++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx
@@ -2,6 +2,7 @@
import React from 'react'
import {View} from 'react-native'
+
import {ImageSource} from '../../@types'
type Props = {
diff --git a/src/view/com/lightbox/ImageViewing/index.tsx b/src/view/com/lightbox/ImageViewing/index.tsx
index ff8fdb86d3..1432b34ff8 100644
--- a/src/view/com/lightbox/ImageViewing/index.tsx
+++ b/src/view/com/lightbox/ImageViewing/index.tsx
@@ -9,15 +9,14 @@
// https://github.com/jobtoday/react-native-image-viewing
import React, {ComponentType, useCallback, useMemo, useState} from 'react'
-import {StyleSheet, View, Platform} from 'react-native'
-
-import ImageItem from './components/ImageItem/ImageItem'
-import ImageDefaultHeader from './components/ImageDefaultHeader'
-
-import {ImageSource} from './@types'
+import {Platform, StyleSheet, View} from 'react-native'
+import PagerView from 'react-native-pager-view'
import Animated, {useAnimatedStyle, withSpring} from 'react-native-reanimated'
import {Edge, SafeAreaView} from 'react-native-safe-area-context'
-import PagerView from 'react-native-pager-view'
+
+import {ImageSource} from './@types'
+import ImageDefaultHeader from './components/ImageDefaultHeader'
+import ImageItem from './components/ImageItem/ImageItem'
type Props = {
images: ImageSource[]
diff --git a/src/view/com/modals/ChangeEmail.tsx b/src/view/com/modals/ChangeEmail.tsx
index a214627e2d..dc450705e0 100644
--- a/src/view/com/modals/ChangeEmail.tsx
+++ b/src/view/com/modals/ChangeEmail.tsx
@@ -3,13 +3,13 @@ import {ActivityIndicator, SafeAreaView, StyleSheet, View} from 'react-native'
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {cleanError} from '#/lib/strings/errors'
+import {colors, s} from '#/lib/styles'
+import {isWeb} from '#/platform/detection'
import {useModalControls} from '#/state/modals'
import {useAgent, useSession} from '#/state/session'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {cleanError} from 'lib/strings/errors'
-import {colors, s} from 'lib/styles'
-import {isWeb} from 'platform/detection'
import {ErrorMessage} from '../util/error/ErrorMessage'
import {Button} from '../util/forms/Button'
import {Text} from '../util/text/Text'
diff --git a/src/view/com/modals/ChangePassword.tsx b/src/view/com/modals/ChangePassword.tsx
index 196715b49f..c40fcb5e39 100644
--- a/src/view/com/modals/ChangePassword.tsx
+++ b/src/view/com/modals/ChangePassword.tsx
@@ -11,15 +11,15 @@ import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import * as EmailValidator from 'email-validator'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {cleanError, isNetworkError} from '#/lib/strings/errors'
+import {checkAndFormatResetCode} from '#/lib/strings/password'
+import {colors, s} from '#/lib/styles'
import {logger} from '#/logger'
+import {isAndroid, isWeb} from '#/platform/detection'
import {useModalControls} from '#/state/modals'
import {useAgent, useSession} from '#/state/session'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {cleanError, isNetworkError} from 'lib/strings/errors'
-import {checkAndFormatResetCode} from 'lib/strings/password'
-import {colors, s} from 'lib/styles'
-import {isAndroid, isWeb} from 'platform/detection'
import {ErrorMessage} from '../util/error/ErrorMessage'
import {Button} from '../util/forms/Button'
import {Text} from '../util/text/Text'
diff --git a/src/view/com/modals/InviteCodes.tsx b/src/view/com/modals/InviteCodes.tsx
index 44a6cc9ea4..60020f996f 100644
--- a/src/view/com/modals/InviteCodes.tsx
+++ b/src/view/com/modals/InviteCodes.tsx
@@ -14,17 +14,17 @@ import {
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
import {makeProfileLink} from '#/lib/routes/links'
+import {cleanError} from '#/lib/strings/errors'
+import {isWeb} from '#/platform/detection'
import {useInvitesAPI, useInvitesState} from '#/state/invites'
import {useModalControls} from '#/state/modals'
import {
InviteCodesQueryResponse,
useInviteCodesQuery,
} from '#/state/queries/invites'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {cleanError} from 'lib/strings/errors'
-import {isWeb} from 'platform/detection'
import {ErrorMessage} from '../util/error/ErrorMessage'
import {Button} from '../util/forms/Button'
import {Link} from '../util/Link'
diff --git a/src/view/com/modals/ListAddRemoveUsers.tsx b/src/view/com/modals/ListAddRemoveUsers.tsx
index e968252d29..5285d4a157 100644
--- a/src/view/com/modals/ListAddRemoveUsers.tsx
+++ b/src/view/com/modals/ListAddRemoveUsers.tsx
@@ -12,6 +12,14 @@ import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {HITSLOP_20} from '#/lib/constants'
+import {useIsKeyboardVisible} from '#/lib/hooks/useIsKeyboardVisible'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {sanitizeDisplayName} from '#/lib/strings/display-names'
+import {cleanError} from '#/lib/strings/errors'
+import {sanitizeHandle} from '#/lib/strings/handles'
+import {colors, s} from '#/lib/styles'
+import {isWeb} from '#/platform/detection'
import {useModalControls} from '#/state/modals'
import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete'
import {
@@ -21,14 +29,6 @@ import {
useListMembershipAddMutation,
useListMembershipRemoveMutation,
} from '#/state/queries/list-memberships'
-import {useIsKeyboardVisible} from 'lib/hooks/useIsKeyboardVisible'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {sanitizeDisplayName} from 'lib/strings/display-names'
-import {cleanError} from 'lib/strings/errors'
-import {sanitizeHandle} from 'lib/strings/handles'
-import {colors, s} from 'lib/styles'
-import {isWeb} from 'platform/detection'
import {Button} from '../util/forms/Button'
import {Text} from '../util/text/Text'
import * as Toast from '../util/Toast'
diff --git a/src/view/com/modals/VerifyEmail.tsx b/src/view/com/modals/VerifyEmail.tsx
index 8fdec7d5df..fce1275fe7 100644
--- a/src/view/com/modals/VerifyEmail.tsx
+++ b/src/view/com/modals/VerifyEmail.tsx
@@ -11,14 +11,14 @@ import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {cleanError} from '#/lib/strings/errors'
+import {colors, s} from '#/lib/styles'
import {logger} from '#/logger'
+import {isWeb} from '#/platform/detection'
import {useModalControls} from '#/state/modals'
import {useAgent, useSession} from '#/state/session'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {cleanError} from 'lib/strings/errors'
-import {colors, s} from 'lib/styles'
-import {isWeb} from 'platform/detection'
import {ErrorMessage} from '../util/error/ErrorMessage'
import {Button} from '../util/forms/Button'
import {Text} from '../util/text/Text'
diff --git a/src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx b/src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx
index ab21ba65af..8755a2fbb6 100644
--- a/src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx
+++ b/src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx
@@ -4,9 +4,9 @@ import {LinearGradient} from 'expo-linear-gradient'
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {colors, gradients, s} from 'lib/styles'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {colors, gradients, s} from '#/lib/styles'
export const ConfirmLanguagesButton = ({
onPress,
diff --git a/src/view/com/modals/lang-settings/LanguageToggle.tsx b/src/view/com/modals/lang-settings/LanguageToggle.tsx
index 45b100f201..b8c0121e67 100644
--- a/src/view/com/modals/lang-settings/LanguageToggle.tsx
+++ b/src/view/com/modals/lang-settings/LanguageToggle.tsx
@@ -1,8 +1,9 @@
import React from 'react'
import {StyleSheet} from 'react-native'
-import {usePalette} from 'lib/hooks/usePalette'
-import {ToggleButton} from 'view/com/util/forms/ToggleButton'
-import {useLanguagePrefs, toPostLanguages} from '#/state/preferences/languages'
+
+import {usePalette} from '#/lib/hooks/usePalette'
+import {toPostLanguages, useLanguagePrefs} from '#/state/preferences/languages'
+import {ToggleButton} from '#/view/com/util/forms/ToggleButton'
export function LanguageToggle({
code2,
diff --git a/src/view/com/pager/DraggableScrollView.tsx b/src/view/com/pager/DraggableScrollView.tsx
index 4b7396eaa9..fc06b72e82 100644
--- a/src/view/com/pager/DraggableScrollView.tsx
+++ b/src/view/com/pager/DraggableScrollView.tsx
@@ -1,7 +1,8 @@
-import {useDraggableScroll} from 'lib/hooks/useDraggableScrollView'
import React, {ComponentProps} from 'react'
import {ScrollView} from 'react-native'
+import {useDraggableScroll} from '#/lib/hooks/useDraggableScrollView'
+
export const DraggableScrollView = React.forwardRef<
ScrollView,
ComponentProps
diff --git a/src/view/com/pager/Pager.web.tsx b/src/view/com/pager/Pager.web.tsx
index 1266a16202..2cce727c02 100644
--- a/src/view/com/pager/Pager.web.tsx
+++ b/src/view/com/pager/Pager.web.tsx
@@ -3,7 +3,7 @@ import {View} from 'react-native'
import {flushSync} from 'react-dom'
import {LogEvents} from '#/lib/statsig/events'
-import {s} from 'lib/styles'
+import {s} from '#/lib/styles'
export interface RenderTabBarFnProps {
selectedPage: number
diff --git a/src/view/com/post-thread/PostLikedBy.tsx b/src/view/com/post-thread/PostLikedBy.tsx
index bea105744e..69e04e0460 100644
--- a/src/view/com/post-thread/PostLikedBy.tsx
+++ b/src/view/com/post-thread/PostLikedBy.tsx
@@ -3,12 +3,12 @@ import {AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
import {cleanError} from '#/lib/strings/errors'
import {logger} from '#/logger'
+import {isWeb} from '#/platform/detection'
import {useLikedByQuery} from '#/state/queries/post-liked-by'
import {useResolveUriQuery} from '#/state/queries/resolve-uri'
-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
-import {isWeb} from 'platform/detection'
import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard'
import {List} from '#/view/com/util/List'
import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
diff --git a/src/view/com/post-thread/PostQuotes.tsx b/src/view/com/post-thread/PostQuotes.tsx
index 6115ae584f..56cf81a3e6 100644
--- a/src/view/com/post-thread/PostQuotes.tsx
+++ b/src/view/com/post-thread/PostQuotes.tsx
@@ -7,15 +7,15 @@ import {
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
import {cleanError} from '#/lib/strings/errors'
import {logger} from '#/logger'
+import {isWeb} from '#/platform/detection'
import {useModerationOpts} from '#/state/preferences/moderation-opts'
import {usePostQuotesQuery} from '#/state/queries/post-quotes'
import {useResolveUriQuery} from '#/state/queries/resolve-uri'
-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
-import {isWeb} from 'platform/detection'
-import {Post} from 'view/com/post/Post'
+import {Post} from '#/view/com/post/Post'
import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
import {List} from '../util/List'
diff --git a/src/view/com/post-thread/PostRepostedBy.tsx b/src/view/com/post-thread/PostRepostedBy.tsx
index 68606b1a5c..67a89e435d 100644
--- a/src/view/com/post-thread/PostRepostedBy.tsx
+++ b/src/view/com/post-thread/PostRepostedBy.tsx
@@ -3,11 +3,11 @@ import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
import {cleanError} from '#/lib/strings/errors'
import {logger} from '#/logger'
import {usePostRepostedByQuery} from '#/state/queries/post-reposted-by'
import {useResolveUriQuery} from '#/state/queries/resolve-uri'
-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard'
import {List} from '#/view/com/util/List'
import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
diff --git a/src/view/com/post-thread/PostThread.tsx b/src/view/com/post-thread/PostThread.tsx
index 4c4b008097..7ce6deaa15 100644
--- a/src/view/com/post-thread/PostThread.tsx
+++ b/src/view/com/post-thread/PostThread.tsx
@@ -7,9 +7,15 @@ import {AppBskyFeedDefs, AppBskyFeedThreadgate} from '@atproto/api'
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
+import {useMinimalShellFabTransform} from '#/lib/hooks/useMinimalShellTransform'
+import {useSetTitle} from '#/lib/hooks/useSetTitle'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
import {clamp} from '#/lib/numbers'
import {ScrollProvider} from '#/lib/ScrollContext'
+import {sanitizeDisplayName} from '#/lib/strings/display-names'
+import {cleanError} from '#/lib/strings/errors'
import {isAndroid, isNative, isWeb} from '#/platform/detection'
import {useModerationOpts} from '#/state/preferences/moderation-opts'
import {
@@ -26,13 +32,7 @@ import {usePreferencesQuery} from '#/state/queries/preferences'
import {useSession} from '#/state/session'
import {useComposerControls} from '#/state/shell'
import {useMergedThreadgateHiddenReplies} from '#/state/threadgate-hidden-replies'
-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
-import {useMinimalShellFabTransform} from 'lib/hooks/useMinimalShellTransform'
-import {useSetTitle} from 'lib/hooks/useSetTitle'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {sanitizeDisplayName} from 'lib/strings/display-names'
-import {cleanError} from 'lib/strings/errors'
-import {CenteredView} from 'view/com/util/Views'
+import {CenteredView} from '#/view/com/util/Views'
import {atoms as a, useTheme} from '#/alf'
import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
import {Text} from '#/components/Typography'
diff --git a/src/view/com/posts/CustomFeedEmptyState.tsx b/src/view/com/posts/CustomFeedEmptyState.tsx
index 62a10fd197..1d216dd29e 100644
--- a/src/view/com/posts/CustomFeedEmptyState.tsx
+++ b/src/view/com/posts/CustomFeedEmptyState.tsx
@@ -1,18 +1,19 @@
import React from 'react'
import {StyleSheet, View} from 'react-native'
-import {useNavigation} from '@react-navigation/native'
import {
FontAwesomeIcon,
FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
-import {Text} from '../util/text/Text'
-import {Button} from '../util/forms/Button'
-import {MagnifyingGlassIcon} from 'lib/icons'
-import {NavigationProp} from 'lib/routes/types'
-import {usePalette} from 'lib/hooks/usePalette'
-import {s} from 'lib/styles'
-import {isWeb} from 'platform/detection'
import {Trans} from '@lingui/macro'
+import {useNavigation} from '@react-navigation/native'
+
+import {usePalette} from '#/lib/hooks/usePalette'
+import {MagnifyingGlassIcon} from '#/lib/icons'
+import {NavigationProp} from '#/lib/routes/types'
+import {s} from '#/lib/styles'
+import {isWeb} from '#/platform/detection'
+import {Button} from '../util/forms/Button'
+import {Text} from '../util/text/Text'
export function CustomFeedEmptyState() {
const pal = usePalette('default')
diff --git a/src/view/com/posts/DiscoverFallbackHeader.tsx b/src/view/com/posts/DiscoverFallbackHeader.tsx
index ffde899979..0153cf5f43 100644
--- a/src/view/com/posts/DiscoverFallbackHeader.tsx
+++ b/src/view/com/posts/DiscoverFallbackHeader.tsx
@@ -1,10 +1,11 @@
import React from 'react'
import {View} from 'react-native'
import {Trans} from '@lingui/macro'
-import {Text} from '../util/text/Text'
+
import {usePalette} from '#/lib/hooks/usePalette'
-import {TextLink} from '../util/Link'
import {InfoCircleIcon} from '#/lib/icons'
+import {TextLink} from '../util/Link'
+import {Text} from '../util/text/Text'
export function DiscoverFallbackHeader() {
const pal = usePalette('default')
diff --git a/src/view/com/posts/FeedErrorMessage.tsx b/src/view/com/posts/FeedErrorMessage.tsx
index 437d7788a8..cc7b34750a 100644
--- a/src/view/com/posts/FeedErrorMessage.tsx
+++ b/src/view/com/posts/FeedErrorMessage.tsx
@@ -5,12 +5,12 @@ import {msg as msgLingui, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {useNavigation} from '@react-navigation/native'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {NavigationProp} from '#/lib/routes/types'
import {cleanError} from '#/lib/strings/errors'
import {logger} from '#/logger'
import {FeedDescriptor} from '#/state/queries/post-feed'
import {useRemoveFeedMutation} from '#/state/queries/preferences'
-import {usePalette} from 'lib/hooks/usePalette'
-import {NavigationProp} from 'lib/routes/types'
import * as Prompt from '#/components/Prompt'
import {EmptyState} from '../util/EmptyState'
import {ErrorMessage} from '../util/error/ErrorMessage'
diff --git a/src/view/com/posts/FollowingEmptyState.tsx b/src/view/com/posts/FollowingEmptyState.tsx
index dd4915e181..3f330b327e 100644
--- a/src/view/com/posts/FollowingEmptyState.tsx
+++ b/src/view/com/posts/FollowingEmptyState.tsx
@@ -7,11 +7,11 @@ import {
import {Trans} from '@lingui/macro'
import {useNavigation} from '@react-navigation/native'
-import {usePalette} from 'lib/hooks/usePalette'
-import {MagnifyingGlassIcon} from 'lib/icons'
-import {NavigationProp} from 'lib/routes/types'
-import {s} from 'lib/styles'
-import {isWeb} from 'platform/detection'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {MagnifyingGlassIcon} from '#/lib/icons'
+import {NavigationProp} from '#/lib/routes/types'
+import {s} from '#/lib/styles'
+import {isWeb} from '#/platform/detection'
import {Button} from '../util/forms/Button'
import {Text} from '../util/text/Text'
diff --git a/src/view/com/posts/FollowingEndOfFeed.tsx b/src/view/com/posts/FollowingEndOfFeed.tsx
index d3c616a20b..4abb3c1f51 100644
--- a/src/view/com/posts/FollowingEndOfFeed.tsx
+++ b/src/view/com/posts/FollowingEndOfFeed.tsx
@@ -7,10 +7,10 @@ import {
import {Trans} from '@lingui/macro'
import {useNavigation} from '@react-navigation/native'
-import {usePalette} from 'lib/hooks/usePalette'
-import {NavigationProp} from 'lib/routes/types'
-import {s} from 'lib/styles'
-import {isWeb} from 'platform/detection'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {NavigationProp} from '#/lib/routes/types'
+import {s} from '#/lib/styles'
+import {isWeb} from '#/platform/detection'
import {Button} from '../util/forms/Button'
import {Text} from '../util/text/Text'
diff --git a/src/view/com/profile/ProfileFollowers.tsx b/src/view/com/profile/ProfileFollowers.tsx
index 8318f13de8..60a7a5e316 100644
--- a/src/view/com/profile/ProfileFollowers.tsx
+++ b/src/view/com/profile/ProfileFollowers.tsx
@@ -3,13 +3,13 @@ import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
import {cleanError} from '#/lib/strings/errors'
import {logger} from '#/logger'
+import {isWeb} from '#/platform/detection'
import {useProfileFollowersQuery} from '#/state/queries/profile-followers'
import {useResolveDidQuery} from '#/state/queries/resolve-uri'
-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
-import {isWeb} from 'platform/detection'
-import {useSession} from 'state/session'
+import {useSession} from '#/state/session'
import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
import {List} from '../util/List'
import {ProfileCardWithFollowBtn} from './ProfileCard'
diff --git a/src/view/com/profile/ProfileFollows.tsx b/src/view/com/profile/ProfileFollows.tsx
index de4346afbc..572b0b9f41 100644
--- a/src/view/com/profile/ProfileFollows.tsx
+++ b/src/view/com/profile/ProfileFollows.tsx
@@ -3,13 +3,13 @@ import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
import {cleanError} from '#/lib/strings/errors'
import {logger} from '#/logger'
+import {isWeb} from '#/platform/detection'
import {useProfileFollowsQuery} from '#/state/queries/profile-follows'
import {useResolveDidQuery} from '#/state/queries/resolve-uri'
-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
-import {isWeb} from 'platform/detection'
-import {useSession} from 'state/session'
+import {useSession} from '#/state/session'
import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
import {List} from '../util/List'
import {ProfileCardWithFollowBtn} from './ProfileCard'
diff --git a/src/view/com/util/AccountDropdownBtn.tsx b/src/view/com/util/AccountDropdownBtn.tsx
index fa2553d384..e7985bccfb 100644
--- a/src/view/com/util/AccountDropdownBtn.tsx
+++ b/src/view/com/util/AccountDropdownBtn.tsx
@@ -7,9 +7,9 @@ import {
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {s} from '#/lib/styles'
import {SessionAccount, useSessionApi} from '#/state/session'
-import {usePalette} from 'lib/hooks/usePalette'
-import {s} from 'lib/styles'
import {useDialogControl} from '#/components/Dialog'
import * as Prompt from '#/components/Prompt'
import * as Toast from '../../com/util/Toast'
diff --git a/src/view/com/util/EmptyState.tsx b/src/view/com/util/EmptyState.tsx
index 42f0ab6d0a..587d844629 100644
--- a/src/view/com/util/EmptyState.tsx
+++ b/src/view/com/util/EmptyState.tsx
@@ -6,10 +6,10 @@ import {
FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
+import {usePalette} from '#/lib/hooks/usePalette'
import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
-import {usePalette} from 'lib/hooks/usePalette'
-import {UserGroupIcon} from 'lib/icons'
-import {isWeb} from 'platform/detection'
+import {UserGroupIcon} from '#/lib/icons'
+import {isWeb} from '#/platform/detection'
import {Growth_Stroke2_Corner0_Rounded as Growth} from '#/components/icons/Growth'
import {Text} from './text/Text'
diff --git a/src/view/com/util/EmptyStateWithButton.tsx b/src/view/com/util/EmptyStateWithButton.tsx
index 008ca2bdb6..7b7aa129ed 100644
--- a/src/view/com/util/EmptyStateWithButton.tsx
+++ b/src/view/com/util/EmptyStateWithButton.tsx
@@ -1,14 +1,15 @@
import React from 'react'
import {StyleSheet, View} from 'react-native'
+import {IconProp} from '@fortawesome/fontawesome-svg-core'
import {
FontAwesomeIcon,
FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
-import {IconProp} from '@fortawesome/fontawesome-svg-core'
-import {Text} from './text/Text'
+
+import {usePalette} from '#/lib/hooks/usePalette'
+import {s} from '#/lib/styles'
import {Button} from './forms/Button'
-import {usePalette} from 'lib/hooks/usePalette'
-import {s} from 'lib/styles'
+import {Text} from './text/Text'
interface Props {
testID?: string
diff --git a/src/view/com/util/FeedInfoText.tsx b/src/view/com/util/FeedInfoText.tsx
index 54124c739a..da5c48af7b 100644
--- a/src/view/com/util/FeedInfoText.tsx
+++ b/src/view/com/util/FeedInfoText.tsx
@@ -1,10 +1,11 @@
import React from 'react'
import {StyleProp, StyleSheet, TextStyle} from 'react-native'
+
+import {sanitizeDisplayName} from '#/lib/strings/display-names'
+import {TypographyVariant} from '#/lib/ThemeContext'
+import {useFeedSourceInfoQuery} from '#/state/queries/feed'
import {TextLinkOnWebOnly} from './Link'
import {LoadingPlaceholder} from './LoadingPlaceholder'
-import {TypographyVariant} from 'lib/ThemeContext'
-import {sanitizeDisplayName} from 'lib/strings/display-names'
-import {useFeedSourceInfoQuery} from '#/state/queries/feed'
export function FeedNameText({
type = 'md',
diff --git a/src/view/com/util/LoadMoreRetryBtn.tsx b/src/view/com/util/LoadMoreRetryBtn.tsx
index a2e9838b36..863e8e2f53 100644
--- a/src/view/com/util/LoadMoreRetryBtn.tsx
+++ b/src/view/com/util/LoadMoreRetryBtn.tsx
@@ -4,9 +4,10 @@ import {
FontAwesomeIcon,
FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
+
+import {usePalette} from '#/lib/hooks/usePalette'
import {Button} from './forms/Button'
import {Text} from './text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
export function LoadMoreRetryBtn({
label,
diff --git a/src/view/com/util/LoadingScreen.tsx b/src/view/com/util/LoadingScreen.tsx
index 93c3bee42a..15066d625e 100644
--- a/src/view/com/util/LoadingScreen.tsx
+++ b/src/view/com/util/LoadingScreen.tsx
@@ -1,6 +1,7 @@
import React from 'react'
import {ActivityIndicator, View} from 'react-native'
-import {s} from 'lib/styles'
+
+import {s} from '#/lib/styles'
import {CenteredView} from './Views'
export function LoadingScreen() {
diff --git a/src/view/com/util/MainScrollProvider.tsx b/src/view/com/util/MainScrollProvider.tsx
index c87ee209ec..23dffc561d 100644
--- a/src/view/com/util/MainScrollProvider.tsx
+++ b/src/view/com/util/MainScrollProvider.tsx
@@ -9,9 +9,9 @@ import {
import EventEmitter from 'eventemitter3'
import {ScrollProvider} from '#/lib/ScrollContext'
+import {isNative, isWeb} from '#/platform/detection'
import {useMinimalShellMode} from '#/state/shell'
import {useShellLayout} from '#/state/shell/shell-layout'
-import {isNative, isWeb} from 'platform/detection'
const WEB_HIDE_SHELL_THRESHOLD = 200
diff --git a/src/view/com/util/Selector.tsx b/src/view/com/util/Selector.tsx
index 66e363cd41..cf9d347af7 100644
--- a/src/view/com/util/Selector.tsx
+++ b/src/view/com/util/Selector.tsx
@@ -1,9 +1,10 @@
-import React, {createRef, useState, useMemo, useRef} from 'react'
+import React, {createRef, useMemo, useRef, useState} from 'react'
import {Animated, Pressable, StyleSheet, View} from 'react-native'
-import {Text} from './text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useLingui} from '@lingui/react'
import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {usePalette} from '#/lib/hooks/usePalette'
+import {Text} from './text/Text'
interface Layout {
x: number
diff --git a/src/view/com/util/ViewSelector.tsx b/src/view/com/util/ViewSelector.tsx
index ee993c564d..f8ba8f5619 100644
--- a/src/view/com/util/ViewSelector.tsx
+++ b/src/view/com/util/ViewSelector.tsx
@@ -1,20 +1,21 @@
import React, {useEffect, useState} from 'react'
import {
- NativeSyntheticEvent,
NativeScrollEvent,
+ NativeSyntheticEvent,
Pressable,
RefreshControl,
+ ScrollView,
StyleSheet,
View,
- ScrollView,
} from 'react-native'
-import {FlatList_INTERNAL} from './Views'
-import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
+
+import {useColorSchemeStyle} from '#/lib/hooks/useColorSchemeStyle'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {clamp} from '#/lib/numbers'
+import {colors, s} from '#/lib/styles'
+import {isAndroid} from '#/platform/detection'
import {Text} from './text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
-import {clamp} from 'lib/numbers'
-import {s, colors} from 'lib/styles'
-import {isAndroid} from 'platform/detection'
+import {FlatList_INTERNAL} from './Views'
const HEADER_ITEM = {_reactKey: '__header__'}
const SELECTOR_ITEM = {_reactKey: '__selector__'}
diff --git a/src/view/com/util/Views.web.tsx b/src/view/com/util/Views.web.tsx
index c4549dbc7f..272cc9dd5b 100644
--- a/src/view/com/util/Views.web.tsx
+++ b/src/view/com/util/Views.web.tsx
@@ -23,9 +23,9 @@ import {
} from 'react-native'
import Animated from 'react-native-reanimated'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {addStyle} from 'lib/styles'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {addStyle} from '#/lib/styles'
interface AddedProps {
desktopFixedHeight?: boolean | number
diff --git a/src/view/com/util/anim/TriggerableAnimated.tsx b/src/view/com/util/anim/TriggerableAnimated.tsx
index eedeeda037..97605fb46c 100644
--- a/src/view/com/util/anim/TriggerableAnimated.tsx
+++ b/src/view/com/util/anim/TriggerableAnimated.tsx
@@ -1,6 +1,7 @@
import React from 'react'
import {Animated, StyleProp, View, ViewStyle} from 'react-native'
-import {useAnimatedValue} from 'lib/hooks/useAnimatedValue'
+
+import {useAnimatedValue} from '#/lib/hooks/useAnimatedValue'
type CreateAnimFn = (interp: Animated.Value) => Animated.CompositeAnimation
type FinishCb = () => void
diff --git a/src/view/com/util/error/ErrorMessage.tsx b/src/view/com/util/error/ErrorMessage.tsx
index a4238b8a46..f0ef3a40f1 100644
--- a/src/view/com/util/error/ErrorMessage.tsx
+++ b/src/view/com/util/error/ErrorMessage.tsx
@@ -1,8 +1,8 @@
import React from 'react'
import {
+ StyleProp,
StyleSheet,
TouchableOpacity,
- StyleProp,
View,
ViewStyle,
} from 'react-native'
@@ -10,11 +10,12 @@ import {
FontAwesomeIcon,
FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
-import {Text} from '../text/Text'
-import {useTheme} from 'lib/ThemeContext'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useLingui} from '@lingui/react'
import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useTheme} from '#/lib/ThemeContext'
+import {Text} from '../text/Text'
export function ErrorMessage({
message,
diff --git a/src/view/com/util/error/ErrorScreen.tsx b/src/view/com/util/error/ErrorScreen.tsx
index 98fe6437b6..1b23141f33 100644
--- a/src/view/com/util/error/ErrorScreen.tsx
+++ b/src/view/com/util/error/ErrorScreen.tsx
@@ -4,15 +4,16 @@ import {
FontAwesomeIcon,
FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
-import {Text} from '../text/Text'
-import {useTheme} from 'lib/ThemeContext'
-import {usePalette} from 'lib/hooks/usePalette'
-import {Button} from '../forms/Button'
-import {CenteredView} from '../Views'
-import {Trans, msg} from '@lingui/macro'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {ViewHeader} from 'view/com/util/ViewHeader'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {useTheme} from '#/lib/ThemeContext'
+import {ViewHeader} from '#/view/com/util/ViewHeader'
+import {Button} from '../forms/Button'
+import {Text} from '../text/Text'
+import {CenteredView} from '../Views'
export function ErrorScreen({
title,
diff --git a/src/view/com/util/forms/DateInput.tsx b/src/view/com/util/forms/DateInput.tsx
index bfbb2ff55e..9df53f116b 100644
--- a/src/view/com/util/forms/DateInput.tsx
+++ b/src/view/com/util/forms/DateInput.tsx
@@ -7,10 +7,10 @@ import {
} from '@fortawesome/react-native-fontawesome'
import {useLingui} from '@lingui/react'
-import {usePalette} from 'lib/hooks/usePalette'
-import {TypographyVariant} from 'lib/ThemeContext'
-import {useTheme} from 'lib/ThemeContext'
-import {isAndroid, isIOS} from 'platform/detection'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {TypographyVariant} from '#/lib/ThemeContext'
+import {useTheme} from '#/lib/ThemeContext'
+import {isAndroid, isIOS} from '#/platform/detection'
import {Text} from '../text/Text'
import {Button, ButtonType} from './Button'
diff --git a/src/view/com/util/forms/DateInput.web.tsx b/src/view/com/util/forms/DateInput.web.tsx
index 8d74f6dae2..ea61023569 100644
--- a/src/view/com/util/forms/DateInput.web.tsx
+++ b/src/view/com/util/forms/DateInput.web.tsx
@@ -1,8 +1,9 @@
-import React, {useState, useCallback} from 'react'
+import React, {useCallback, useState} from 'react'
import {StyleProp, StyleSheet, TextStyle, View, ViewStyle} from 'react-native'
// @ts-ignore types not available -prf
import {unstable_createElement} from 'react-native-web'
-import {usePalette} from 'lib/hooks/usePalette'
+
+import {usePalette} from '#/lib/hooks/usePalette'
interface Props {
testID?: string
diff --git a/src/view/com/util/forms/RadioGroup.tsx b/src/view/com/util/forms/RadioGroup.tsx
index 493c36a9d8..c6cf63930d 100644
--- a/src/view/com/util/forms/RadioGroup.tsx
+++ b/src/view/com/util/forms/RadioGroup.tsx
@@ -1,7 +1,7 @@
import React, {useState} from 'react'
import {View} from 'react-native'
-import {s} from 'lib/styles'
+import {s} from '#/lib/styles'
import {ButtonType} from './Button'
import {RadioButton} from './RadioButton'
diff --git a/src/view/com/util/forms/SelectableBtn.tsx b/src/view/com/util/forms/SelectableBtn.tsx
index e577e155de..1d74b935af 100644
--- a/src/view/com/util/forms/SelectableBtn.tsx
+++ b/src/view/com/util/forms/SelectableBtn.tsx
@@ -1,8 +1,9 @@
import React from 'react'
-import {Pressable, ViewStyle, StyleProp, StyleSheet} from 'react-native'
+import {Pressable, StyleProp, StyleSheet, ViewStyle} from 'react-native'
+
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
import {Text} from '../text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
interface SelectableBtnProps {
testID?: string
diff --git a/src/view/com/util/layouts/withBreakpoints.tsx b/src/view/com/util/layouts/withBreakpoints.tsx
index 5746aa660d..71971c604b 100644
--- a/src/view/com/util/layouts/withBreakpoints.tsx
+++ b/src/view/com/util/layouts/withBreakpoints.tsx
@@ -1,6 +1,7 @@
import React from 'react'
-import {isNative} from 'platform/detection'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {isNative} from '#/platform/detection'
export const withBreakpoints = (
Mobile: React.ComponentType
,
diff --git a/src/view/com/util/text/RichText.tsx b/src/view/com/util/text/RichText.tsx
index f4ade30e55..a4cf517a41 100644
--- a/src/view/com/util/text/RichText.tsx
+++ b/src/view/com/util/text/RichText.tsx
@@ -1,15 +1,16 @@
import React from 'react'
-import {TextStyle, StyleProp} from 'react-native'
-import {RichText as RichTextObj, AppBskyRichtextFacet} from '@atproto/api'
+import {StyleProp, TextStyle} from 'react-native'
+import {AppBskyRichtextFacet, RichText as RichTextObj} from '@atproto/api'
+
+import {usePalette} from '#/lib/hooks/usePalette'
+import {makeTagLink} from '#/lib/routes/links'
+import {toShortUrl} from '#/lib/strings/url-helpers'
+import {lh} from '#/lib/styles'
+import {TypographyVariant, useTheme} from '#/lib/ThemeContext'
+import {isNative} from '#/platform/detection'
+import {TagMenu, useTagMenuControl} from '#/components/TagMenu'
import {TextLink} from '../Link'
import {Text} from './Text'
-import {lh} from 'lib/styles'
-import {toShortUrl} from 'lib/strings/url-helpers'
-import {useTheme, TypographyVariant} from 'lib/ThemeContext'
-import {usePalette} from 'lib/hooks/usePalette'
-import {makeTagLink} from 'lib/routes/links'
-import {TagMenu, useTagMenuControl} from '#/components/TagMenu'
-import {isNative} from '#/platform/detection'
const WORD_WRAP = {wordWrap: 1}
diff --git a/src/view/icons/Logotype.tsx b/src/view/icons/Logotype.tsx
index 080c402fb3..d6c35f6d9e 100644
--- a/src/view/icons/Logotype.tsx
+++ b/src/view/icons/Logotype.tsx
@@ -1,5 +1,5 @@
import React from 'react'
-import Svg, {Path, SvgProps, PathProps} from 'react-native-svg'
+import Svg, {Path, PathProps, SvgProps} from 'react-native-svg'
import {usePalette} from '#/lib/hooks/usePalette'
diff --git a/src/view/screens/Settings/Email2FAToggle.tsx b/src/view/screens/Settings/Email2FAToggle.tsx
index b5e7adddb2..f6ed19a212 100644
--- a/src/view/screens/Settings/Email2FAToggle.tsx
+++ b/src/view/screens/Settings/Email2FAToggle.tsx
@@ -4,7 +4,7 @@ import {useLingui} from '@lingui/react'
import {useModalControls} from '#/state/modals'
import {useAgent, useSession} from '#/state/session'
-import {ToggleButton} from 'view/com/util/forms/ToggleButton'
+import {ToggleButton} from '#/view/com/util/forms/ToggleButton'
import {useDialogControl} from '#/components/Dialog'
import {DisableEmail2FADialog} from './DisableEmail2FADialog'
diff --git a/src/view/screens/Storybook/Breakpoints.tsx b/src/view/screens/Storybook/Breakpoints.tsx
index 1b846d517c..5dd8a89fc0 100644
--- a/src/view/screens/Storybook/Breakpoints.tsx
+++ b/src/view/screens/Storybook/Breakpoints.tsx
@@ -1,8 +1,8 @@
import React from 'react'
import {View} from 'react-native'
-import {atoms as a, useTheme, useBreakpoints} from '#/alf'
-import {Text, H3} from '#/components/Typography'
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import {H3, Text} from '#/components/Typography'
export function Breakpoints() {
const t = useTheme()
diff --git a/src/view/screens/Storybook/ListContained.tsx b/src/view/screens/Storybook/ListContained.tsx
index 20ec686570..8333201482 100644
--- a/src/view/screens/Storybook/ListContained.tsx
+++ b/src/view/screens/Storybook/ListContained.tsx
@@ -1,8 +1,8 @@
import React from 'react'
import {FlatList, View} from 'react-native'
-import {ScrollProvider} from 'lib/ScrollContext'
-import {List} from 'view/com/util/List'
+import {ScrollProvider} from '#/lib/ScrollContext'
+import {List} from '#/view/com/util/List'
import {Button, ButtonText} from '#/components/Button'
import * as Toggle from '#/components/forms/Toggle'
import {Text} from '#/components/Typography'
diff --git a/src/view/screens/Storybook/Spacing.tsx b/src/view/screens/Storybook/Spacing.tsx
index d7faf93a80..9b97e92adc 100644
--- a/src/view/screens/Storybook/Spacing.tsx
+++ b/src/view/screens/Storybook/Spacing.tsx
@@ -2,7 +2,7 @@ import React from 'react'
import {View} from 'react-native'
import {atoms as a, useTheme} from '#/alf'
-import {Text, H1} from '#/components/Typography'
+import {H1, Text} from '#/components/Typography'
export function Spacing() {
const t = useTheme()
diff --git a/src/view/screens/Storybook/Typography.tsx b/src/view/screens/Storybook/Typography.tsx
index f0d67c5281..03f86fd467 100644
--- a/src/view/screens/Storybook/Typography.tsx
+++ b/src/view/screens/Storybook/Typography.tsx
@@ -2,8 +2,8 @@ import React from 'react'
import {View} from 'react-native'
import {atoms as a} from '#/alf'
-import {Text} from '#/components/Typography'
import {RichText} from '#/components/RichText'
+import {Text} from '#/components/Typography'
export function Typography() {
return (
diff --git a/src/view/shell/bottom-bar/BottomBarWeb.tsx b/src/view/shell/bottom-bar/BottomBarWeb.tsx
index 21c253ee00..35d3855933 100644
--- a/src/view/shell/bottom-bar/BottomBarWeb.tsx
+++ b/src/view/shell/bottom-bar/BottomBarWeb.tsx
@@ -13,16 +13,16 @@ import {getCurrentRoute, isTab} from '#/lib/routes/helpers'
import {makeProfileLink} from '#/lib/routes/links'
import {CommonNavigatorParams} from '#/lib/routes/types'
import {s} from '#/lib/styles'
+import {useUnreadMessageCount} from '#/state/queries/messages/list-converations'
+import {useUnreadNotifications} from '#/state/queries/notifications/unread'
import {useSession} from '#/state/session'
import {useLoggedOutViewControls} from '#/state/shell/logged-out'
import {useCloseAllActiveElements} from '#/state/util'
-import {useUnreadMessageCount} from 'state/queries/messages/list-converations'
-import {useUnreadNotifications} from 'state/queries/notifications/unread'
import {Button} from '#/view/com/util/forms/Button'
+import {Link} from '#/view/com/util/Link'
import {Text} from '#/view/com/util/text/Text'
import {Logo} from '#/view/icons/Logo'
import {Logotype} from '#/view/icons/Logotype'
-import {Link} from 'view/com/util/Link'
import {
Bell_Filled_Corner0_Rounded as BellFilled,
Bell_Stroke2_Corner0_Rounded as Bell,