mirror of
https://iceshrimp.dev/limepotato/jormungandr-bite.git
synced 2024-11-23 10:27:28 -07:00
Compare commits
40 commits
f70f61523d
...
cc098b1af8
Author | SHA1 | Date | |
---|---|---|---|
|
cc098b1af8 | ||
|
01f66a4039 | ||
|
55bb476ada | ||
|
9ba71c86dc | ||
41337a0f1b | |||
|
e8a21fd579 | ||
aed654b219 | |||
13b6dc5e2d | |||
ff1eea6c3b | |||
86633506f7 | |||
ed290d74d7 | |||
023b5897d4 | |||
02daa6b02a | |||
733fd1892a | |||
93a9a10c8a | |||
|
f82c3fa928 | ||
ec098c059f | |||
be2ea8af29 | |||
6b6be527d4 | |||
3ad4cbb5b5 | |||
1e9a7096e1 | |||
35d88fa3af | |||
989e30c6d9 | |||
1d0ff68688 | |||
e93373d72c | |||
bebe68dab1 | |||
98f3f55371 | |||
50eb66e375 | |||
866a598aad | |||
941fc66512 | |||
a358ef5dc0 | |||
17532215ed | |||
97c57405eb | |||
ecae6145a2 | |||
ff4b51cd37 | |||
a44a89276d | |||
6c2131fdcc | |||
|
4410989fa2 | ||
ba0e5eec93 | |||
|
cc4a0d3e58 |
126 changed files with 1187 additions and 503 deletions
|
@ -163,10 +163,14 @@ reservedUsernames: [
|
|||
# cleanHeaders: false
|
||||
|
||||
# Status code images
|
||||
#images:
|
||||
# info: '/twemoji/1f440.svg'
|
||||
# notFound: '/twemoji/2049.svg'
|
||||
# error: '/twemoji/1f480.svg'
|
||||
images:
|
||||
info: '/static-assets/badges/info.png'
|
||||
notFound: '/static-assets/badges/not-found.png'
|
||||
error: '/static-assets/badges/error.png'
|
||||
|
||||
# Pinned Post Limit
|
||||
pinLimit: 5
|
||||
|
||||
|
||||
# Search engine (MFM)
|
||||
#searchEngine: 'https://duckduckgo.com/?q='
|
||||
|
|
|
@ -175,10 +175,13 @@ reservedUsernames: [
|
|||
# cleanHeaders: false
|
||||
|
||||
# Status code images
|
||||
#images:
|
||||
# info: '/twemoji/1f440.svg'
|
||||
# notFound: '/twemoji/2049.svg'
|
||||
# error: '/twemoji/1f480.svg'
|
||||
images:
|
||||
info: '/static-assets/badges/info.png'
|
||||
notFound: '/static-assets/badges/not-found.png'
|
||||
error: '/static-assets/badges/error.png'
|
||||
|
||||
# Pinned Post Limit
|
||||
pinLimit: 5
|
||||
|
||||
# Search engine (MFM)
|
||||
#searchEngine: 'https://duckduckgo.com/?q='
|
||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,3 +1,6 @@
|
|||
# LimePot
|
||||
run.sh
|
||||
|
||||
# Visual Studio Code
|
||||
/.vscode
|
||||
!/.vscode/extensions.json
|
||||
|
|
BIN
.yarn/corepack.tgz
(Stored with Git LFS)
BIN
.yarn/corepack.tgz
(Stored with Git LFS)
Binary file not shown.
|
@ -2,6 +2,8 @@ compressionLevel: mixed
|
|||
|
||||
enableGlobalCache: false
|
||||
|
||||
enableTelemetry: false
|
||||
|
||||
nodeLinker: pnp
|
||||
|
||||
npmScopes:
|
||||
|
|
40
README.md
40
README.md
|
@ -1,20 +1,29 @@
|
|||
<p><img src="assets/logo.png" alt="Iceshrimp" width="400px"></p>
|
||||
<p><strong>Iceshrimp</strong> is a decentralized and federated social networking service, implementing the <strong>ActivityPub</strong> standard.<br>
|
||||
It was forked from <del>Calckey</del> Firefish (itself a fork of Misskey) in mid-2023, to focus on stability, performance and usability instead of new features.</p>
|
||||
# Jörmungandr
|
||||
|
||||
---
|
||||
|
||||
> **Note**
|
||||
> This project is **not** inactive.
|
||||
>
|
||||
> Most of our current development resources are going into the [rewrite](/iceshrimp/Iceshrimp.NET), to further our goal of increasing stability and performance.
|
||||
>
|
||||
> This means that major changes to the JS codebase (this project), and especially to the database schema, are on hold for the time being. Bugs will of course still be fixed, and support is still available on the usual channels.
|
||||
>
|
||||
> Once the rewrite is finished, there will be an easy upgrade path for existing Iceshrimp instances.
|
||||
> DO NOT USE THIS FORK, as I am dumbb and just a lil guy.
|
||||
>
|
||||
> This is a softer fork of [Iceshrimp Bite](https://iceshrimp.dev/mia/iceshrimp-bite) which is a fork of [Iceshrimp](https://iceshrimp.dev/iceshrimp/iceshrimp) which is a fork of [Firefish](https://firefish.dev/firefish/firefish) which is a rebranding of Calckey, which is a fork of [Misskey](https://github.com/misskey-dev/misskey), Confused? I hope so.
|
||||
|
||||
---
|
||||
- Highlighted changes:
|
||||
- Jormungandr changes:
|
||||
- Full Catppuccin theme support
|
||||
- Configuarble pinned post limit
|
||||
- Menhera error images
|
||||
- Post button now says "Beep" instead of "Post"
|
||||
- Fix "Find Another Server" link
|
||||
- For more see [Jormungandr Changelog](./limepot-CHANGELOG.md)
|
||||
- IceShrimp Bite!
|
||||
- Withdrawal Patches
|
||||
- silence-email
|
||||
- replacements
|
||||
- robots
|
||||
- hide-federation
|
||||
- yarn telemetry
|
||||
- traumatize
|
||||
- Highlighted Iceshrimp changes:
|
||||
- First-class Mastodon client API support
|
||||
- Significantly improved database performance
|
||||
- Options to prune cached remote media automatically
|
||||
|
@ -24,15 +33,6 @@ It was forked from <del>Calckey</del> Firefish (itself a fork of Misskey) in mid
|
|||
- [Elk](https://elk.zone), [Phanpy](https://phanpy.social/), [Enafore](https://enafore.social/), [Masto-FE-standalone](https://iceshrimp.dev/iceshrimp/masto-fe-standalone) (Web)
|
||||
- [Mona](https://apps.apple.com/us/app/mona-for-mastodon/id1659154653), [Toot!](https://apps.apple.com/us/app/toot-for-mastodon/id1229021451), [Ice Cubes](https://apps.apple.com/us/app/ice-cubes-for-mastodon/id6444915884), [Tusker](https://apps.apple.com/us/app/tusker/id1498334597), [Feditext](https://github.com/feditext/feditext), [Mastodon](https://apps.apple.com/us/app/mastodon-for-iphone-and-ipad/id1571998974) (iOS)
|
||||
- [Tusky](https://tusky.app/), [Moshidon](https://lucasggamerm.github.io/moshidon/), [Megalodon](https://sk22.github.io/megalodon/), [Mastodon](https://play.google.com/store/apps/details?id=org.joinmastodon.android) (Android)
|
||||
- Project goals:
|
||||
- No-nonsense bug fixes
|
||||
- QoL improvements
|
||||
- Better performance
|
||||
- Change of focus to actual community needs
|
||||
- Prioritization of user choice and configurability
|
||||
- Project anti-goals:
|
||||
- Flashy marketing
|
||||
- Commercialization of any kind
|
||||
- Documentation on installing (and updating) Iceshrimp using:
|
||||
- [Binary packages](https://iceshrimp.dev/iceshrimp/packaging)
|
||||
- [Docker Compose](docs/docker-compose-install.md)
|
||||
|
|
22
TODO.md
Normal file
22
TODO.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
# TODO
|
||||
## Things I want to change or add
|
||||
- [ ] Achievements
|
||||
- [ ] Allow admins to install optional themes instance-wide
|
||||
- [ ] Misskey v14-like roles
|
||||
- [ ] Implement any new MFM that has been added since the fork.
|
||||
- [ ] UI elements can be round (as in Misskey) or square-ish
|
||||
- [ ] federated listenbrainz
|
||||
- [ ] admin moderation notes (on user profiles)
|
||||
- [ ] user memos (on user profiles)
|
||||
- [ ] Make error message images configurable in Control Panel
|
||||
- [ ] Approval based signups
|
||||
- [ ] Control Panel based reserved username list
|
||||
- [ ] FediBlock reasons
|
||||
- [ ] Allow admins to set instance-wide default sounds
|
||||
- [ ] settings/privacy "Add 're:' at the beginning of comment in reply to a post with a CW" from FireFish
|
||||
- [ ] settings/general "Update timelines automatically" from FireFish
|
||||
- [ ] settings/general "Show server information by clicking the server ticker on a post" from FireFish
|
||||
- [ ] settings/general "Show a warning if you attempt to post files without a description" from FireFish
|
||||
- [ ] settings/general "Get assets from CDN" from FireFish
|
||||
- [ ] Robot-Mode, much like cat-mode but, Robot antenna, and beeps and boops
|
||||
- [X] When not signed-in, approvals off, try to signup, "Find another server" leads to dead link
|
22
limepot-CHANGELOG.md
Normal file
22
limepot-CHANGELOG.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Jormungandr Changelog
|
||||
|
||||
## [Iceshrimp Changelog](./CHANGELOG.md)
|
||||
|
||||
## 2023.12.7-jormungandr-bite.0.5.2
|
||||
- I forgot to do a changelog so heres everything up until now:
|
||||
- Jormungandr changes:
|
||||
- Full Catppuccin theme support
|
||||
- Configuarble pinned post limit
|
||||
- Menhera error images
|
||||
- Post button now says "Beep" instead of "Post"
|
||||
- Fix "Find Another Server" link
|
||||
- IceShrimp Bite!
|
||||
- Withdrawal Patches
|
||||
- silence-email
|
||||
- replacements
|
||||
- robots
|
||||
- hide-federation
|
||||
- yarn telemetry
|
||||
- traumatize
|
||||
- Also changed the about iceshrimp page to direct to this source-code and mention jormungandr
|
||||
- changed versioning scheme for jormungandr at least, to be SemVer
|
|
@ -88,8 +88,8 @@ lists: "Lists"
|
|||
listsDesc: "Lists let you create timelines with specified users. They can be accessed
|
||||
from the timelines page."
|
||||
noLists: "You don't have any lists"
|
||||
note: "Post"
|
||||
notes: "Posts"
|
||||
note: "Beep"
|
||||
notes: "Beeps"
|
||||
following: "Following"
|
||||
followers: "Followers"
|
||||
followsYou: "Follows you"
|
||||
|
@ -116,10 +116,10 @@ enterEmoji: "Enter an emoji"
|
|||
renote: "Boost"
|
||||
unrenote: "Take back boost"
|
||||
renoted: "Boosted."
|
||||
cantRenote: "This post can't be boosted."
|
||||
cantRenote: "This beep can't be boosted."
|
||||
cantReRenote: "A boost can't be boosted."
|
||||
quote: "Quote"
|
||||
pinnedNote: "Pinned post"
|
||||
pinnedNote: "Pinned beep"
|
||||
pinned: "Pin to profile"
|
||||
you: "You"
|
||||
clickToShow: "Click to show"
|
||||
|
@ -131,7 +131,7 @@ enableEmojiReactions: "Enable emoji reactions"
|
|||
showEmojisInReactionNotifications: "Show emojis in reaction notifications"
|
||||
reactionSetting: "Reactions to show in the reaction picker"
|
||||
reactionSettingDescription2: "Drag to reorder, click to delete, press \"+\" to add."
|
||||
rememberNoteVisibility: "Remember post visibility settings"
|
||||
rememberNoteVisibility: "Remember beep visibility settings"
|
||||
attachCancel: "Remove attachment"
|
||||
markAsSensitive: "Mark as sensitive"
|
||||
unmarkAsSensitive: "Unmark as sensitive"
|
||||
|
@ -173,9 +173,9 @@ flagAsBotDescription: "Enable this option if this account is controlled by a pro
|
|||
flagAsCat: "Are you a cat? 😺"
|
||||
flagAsCatDescription: "You'll get cat ears and speak like a cat!"
|
||||
flagSpeakAsCat: "Speak as a cat"
|
||||
flagSpeakAsCatDescription: "Your posts will get nyanified when in cat mode"
|
||||
flagSpeakAsCatDescription: "Your beeps will get nyanified when in cat mode"
|
||||
flagShowTimelineReplies: "Show replies in timeline"
|
||||
flagShowTimelineRepliesDescription: "Shows replies of users to posts of other users
|
||||
flagShowTimelineRepliesDescription: "Shows replies of users to beeps of other users
|
||||
in the timeline if turned on."
|
||||
autoAcceptFollowed: "Automatically approve follow requests from users you're following"
|
||||
addAccount: "Add account"
|
||||
|
@ -225,7 +225,7 @@ instanceInfo: "Server Information"
|
|||
statistics: "Statistics"
|
||||
clearQueue: "Clear queue"
|
||||
clearQueueConfirmTitle: "Are you sure that you want to clear the queue?"
|
||||
clearQueueConfirmText: "Any undelivered posts remaining in the queue will not be federated.
|
||||
clearQueueConfirmText: "Any undelivered beeps remaining in the queue will not be federated.
|
||||
Usually this operation is not needed."
|
||||
clearCachedFiles: "Clear cache"
|
||||
clearCachedFilesConfirm: "Are you sure that you want to delete all cached remote files?"
|
||||
|
@ -247,8 +247,8 @@ blockedUsers: "Blocked users"
|
|||
noUsers: "There are no users"
|
||||
noInstances: "There are no servers"
|
||||
editProfile: "Edit profile"
|
||||
noteDeleteConfirm: "Are you sure you want to delete this post?"
|
||||
pinLimitExceeded: "You cannot pin any more posts"
|
||||
noteDeleteConfirm: "Are you sure you want to delete this beep?"
|
||||
pinLimitExceeded: "You cannot pin any more beeps"
|
||||
intro: "Installation of Iceshrimp has been finished! Please create an admin user."
|
||||
done: "Done"
|
||||
processing: "Processing…"
|
||||
|
@ -397,7 +397,7 @@ pinnedPages: "Pinned Pages"
|
|||
pinnedPagesDescription: "Enter the paths of the Pages you want to pin to the top page
|
||||
of this server, separated by line breaks."
|
||||
pinnedClipId: "ID of the clip to pin"
|
||||
pinnedNotes: "Pinned posts"
|
||||
pinnedNotes: "Pinned beeps"
|
||||
hcaptcha: "hCaptcha"
|
||||
enableHcaptcha: "Enable hCaptcha"
|
||||
hcaptchaSiteKey: "Site key"
|
||||
|
@ -410,7 +410,7 @@ avoidMultiCaptchaConfirm: "Using multiple Captcha systems may cause interference
|
|||
them. Would you like to disable the other Captcha systems currently active? If you
|
||||
would like them to stay enabled, press cancel."
|
||||
antennas: "Antennas"
|
||||
antennasDesc: "Antennas display new posts matching the criteria you set!\n They can
|
||||
antennasDesc: "Antennas display new beeps matching the criteria you set!\n They can
|
||||
be accessed from the timelines page."
|
||||
manageAntennas: "Manage Antennas"
|
||||
name: "Name"
|
||||
|
@ -419,17 +419,17 @@ antennaKeywords: "Keywords to listen to"
|
|||
antennaExcludeKeywords: "Keywords to exclude"
|
||||
antennaKeywordsDescription: "Separate with spaces for an AND condition or with line
|
||||
breaks for an OR condition."
|
||||
notifyAntenna: "Notify about new posts"
|
||||
withFileAntenna: "Only posts with files"
|
||||
notifyAntenna: "Notify about new beeps"
|
||||
withFileAntenna: "Only beeps with files"
|
||||
enableServiceworker: "Enable Push-Notifications for your Browser"
|
||||
antennaUsersDescription: "List one username per line"
|
||||
antennaInstancesDescription: "List one server host per line"
|
||||
antennaTimelineHint: "Antennas display matching posts in order they have been received
|
||||
antennaTimelineHint: "Antennas display matching beeps in order they have been received
|
||||
in, which is not necessarily chronological."
|
||||
caseSensitive: "Case sensitive"
|
||||
withReplies: "Include replies"
|
||||
connectedTo: "Following account(s) are connected"
|
||||
notesAndReplies: "Posts and replies"
|
||||
notesAndReplies: "Beeps and replies"
|
||||
withFiles: "With attachments"
|
||||
silence: "Silence"
|
||||
silenceConfirm: "Are you sure that you want to silence this user?"
|
||||
|
@ -444,7 +444,7 @@ exploreFediverse: "Explore the Fediverse"
|
|||
popularTags: "Popular tags"
|
||||
userList: "Lists"
|
||||
about: "About"
|
||||
aboutIceshrimp: "About Iceshrimp"
|
||||
aboutIceshrimp: "About Jörmungandr"
|
||||
administrator: "Administrator"
|
||||
token: "Token"
|
||||
twoStepAuthentication: "Two-factor authentication"
|
||||
|
@ -466,7 +466,7 @@ notFoundDescription: "No page corresponding to this URL could be found."
|
|||
uploadFolder: "Default folder for uploads"
|
||||
cacheClear: "Clear cache"
|
||||
markAsReadAllNotifications: "Mark all notifications as read"
|
||||
markAsReadAllUnreadNotes: "Mark all posts as read"
|
||||
markAsReadAllUnreadNotes: "Mark all beeps as read"
|
||||
markAsReadAllTalkMessages: "Mark all messages as read"
|
||||
help: "Help"
|
||||
inputMessageHere: "Enter message here"
|
||||
|
@ -487,7 +487,7 @@ text: "Text"
|
|||
enable: "Enable"
|
||||
next: "Next"
|
||||
retype: "Enter again"
|
||||
noteOf: "Post by {user}"
|
||||
noteOf: "Beep by {user}"
|
||||
inviteToGroup: "Invite to group"
|
||||
quoteAttached: "Quote"
|
||||
quoteQuestion: "Append as quote?"
|
||||
|
@ -546,8 +546,8 @@ accountSettings: "Account Settings"
|
|||
promotion: "Promoted"
|
||||
promote: "Promote"
|
||||
numberOfDays: "Number of days"
|
||||
hideThisNote: "Hide this post"
|
||||
showFeaturedNotesInTimeline: "Show featured posts in timelines"
|
||||
hideThisNote: "Hide this beep"
|
||||
showFeaturedNotesInTimeline: "Show featured beeps in timelines"
|
||||
objectStorage: "Object Storage"
|
||||
useObjectStorage: "Use object storage"
|
||||
objectStorageBaseUrl: "Base URL"
|
||||
|
@ -574,8 +574,8 @@ objectStorageUseProxyDesc: "Turn this off if you are not going to use a Proxy fo
|
|||
objectStorageSetPublicRead: "Set \"public-read\" on upload"
|
||||
serverLogs: "Server logs"
|
||||
deleteAll: "Delete all"
|
||||
showFixedPostForm: "Display the posting form at the top of the timeline"
|
||||
newNoteRecived: "There are new posts"
|
||||
showFixedPostForm: "Display the beeping form at the top of the timeline"
|
||||
newNoteRecived: "There are new beeps"
|
||||
sounds: "Sounds"
|
||||
listen: "Listen"
|
||||
none: "None"
|
||||
|
@ -604,8 +604,8 @@ scratchpadDescription: "The scratchpad provides an environment for AiScript expe
|
|||
output: "Output"
|
||||
script: "Script"
|
||||
disablePagesScript: "Disable AiScript on Pages"
|
||||
expandOnNoteClick: "Open post on click"
|
||||
expandOnNoteClickDesc: "If disabled, you can still open posts in the right-click menu
|
||||
expandOnNoteClick: "Open beep on click"
|
||||
expandOnNoteClickDesc: "If disabled, you can still open beeps in the right-click menu
|
||||
or by clicking the timestamp."
|
||||
updateRemoteUser: "Update remote user information"
|
||||
deleteAllFiles: "Delete all files"
|
||||
|
@ -627,11 +627,11 @@ addRelay: "Add Relay"
|
|||
inboxUrl: "Inbox URL"
|
||||
addedRelays: "Added Relays"
|
||||
serviceworkerInfo: "Must be enabled for push notifications."
|
||||
deletedNote: "Deleted post"
|
||||
invisibleNote: "Invisible post"
|
||||
deletedNote: "Deleted beep"
|
||||
invisibleNote: "Invisible beep"
|
||||
enableInfiniteScroll: "Automatically load more"
|
||||
visibility: "Visiblility"
|
||||
cannotChangeScopeWhenEditing: "You can't change visibility of this post while editing"
|
||||
cannotChangeScopeWhenEditing: "You can't change visibility of this beep while editing"
|
||||
poll: "Poll"
|
||||
useCw: "Hide content"
|
||||
enablePlayer: "Open video player"
|
||||
|
@ -687,9 +687,9 @@ regexpErrorDescription: "An error occurred in the regular expression on line {li
|
|||
instanceMute: "Server Mutes"
|
||||
userSaysSomething: "{name} said something"
|
||||
userSaysSomethingReason: "{name} said {reason}"
|
||||
userSaysSomethingReasonReply: "{name} replied to a post containing {reason}"
|
||||
userSaysSomethingReasonRenote: "{name} boosted a post containing {reason}"
|
||||
userSaysSomethingReasonQuote: "{name} quoted a post containing {reason}"
|
||||
userSaysSomethingReasonReply: "{name} replied to a beep containing {reason}"
|
||||
userSaysSomethingReasonRenote: "{name} boosted a beep containing {reason}"
|
||||
userSaysSomethingReasonQuote: "{name} quoted a beep containing {reason}"
|
||||
makeActive: "Activate"
|
||||
display: "Display"
|
||||
copy: "Copy"
|
||||
|
@ -719,7 +719,7 @@ abuseReports: "Reports"
|
|||
reportAbuse: "Report"
|
||||
reportAbuseOf: "Report {name}"
|
||||
fillAbuseReportDescription: "Please fill in details regarding this report. If it is
|
||||
about a specific post, please include its URL."
|
||||
about a specific beep, please include its URL."
|
||||
abuseReported: "Your report has been sent. Thank you very much."
|
||||
reporter: "Reporter"
|
||||
reporteeOrigin: "Reportee Origin"
|
||||
|
@ -733,7 +733,7 @@ openInNewTab: "Open in new tab"
|
|||
openInSideView: "Open in side view"
|
||||
defaultNavigationBehaviour: "Default navigation behavior"
|
||||
editTheseSettingsMayBreakAccount: "Editing these settings may damage your account."
|
||||
instanceTicker: "Server information of posts"
|
||||
instanceTicker: "Server information of beeps"
|
||||
waitingFor: "Waiting for {x}"
|
||||
random: "Random"
|
||||
system: "System"
|
||||
|
@ -744,14 +744,14 @@ createNew: "Create new"
|
|||
optional: "Optional"
|
||||
createNewClip: "Create new clip"
|
||||
unclip: "Unclip"
|
||||
confirmToUnclipAlreadyClippedNote: "This post is already part of the \"{name}\" clip.
|
||||
confirmToUnclipAlreadyClippedNote: "This beep is already part of the \"{name}\" clip.
|
||||
Do you want to remove it from this clip instead?"
|
||||
public: "Public"
|
||||
i18nInfo: "Iceshrimp is being translated into various languages by volunteers. You
|
||||
can help at {link}."
|
||||
manageAccessTokens: "Manage access tokens"
|
||||
accountInfo: "Account Info"
|
||||
notesCount: "Number of posts"
|
||||
notesCount: "Number of beeps"
|
||||
repliesCount: "Number of replies sent"
|
||||
renotesCount: "Number of boosts sent"
|
||||
repliedCount: "Number of replies received"
|
||||
|
@ -767,10 +767,10 @@ no: "No"
|
|||
driveFilesCount: "Number of Drive files"
|
||||
driveUsage: "Drive space usage"
|
||||
noCrawle: "Reject crawler indexing"
|
||||
noCrawleDescription: "Ask search engines to not index your profile page, posts, Pages,
|
||||
noCrawleDescription: "Ask search engines to not index your profile page, beeps, Pages,
|
||||
etc."
|
||||
lockedAccountInfo: "Unless you set your post visiblity to \"Followers only\", your
|
||||
posts will be visible to anyone, even if you require followers to be manually approved."
|
||||
lockedAccountInfo: "Unless you set your beep visiblity to \"Followers only\", your
|
||||
beeps will be visible to anyone, even if you require followers to be manually approved."
|
||||
alwaysMarkSensitive: "Mark as sensitive by default"
|
||||
loadRawImages: "Load original images instead of showing thumbnails"
|
||||
disableShowingAnimatedImages: "Don't play animated images"
|
||||
|
@ -778,20 +778,20 @@ verificationEmailSent: "A verification email has been sent. Please follow the in
|
|||
link to complete verification."
|
||||
notSet: "Not set"
|
||||
emailVerified: "Email has been verified"
|
||||
noteFavoritesCount: "Number of bookmarked posts"
|
||||
noteFavoritesCount: "Number of bookmarked beeps"
|
||||
pageLikesCount: "Number of liked Pages"
|
||||
pageLikedCount: "Number of received Page likes"
|
||||
contact: "Contact"
|
||||
useSystemFont: "Use the system's default font"
|
||||
clips: "Clips"
|
||||
clipsDesc: "Clips are like share-able categorized bookmarks. You can create clips
|
||||
from the menu of individual posts."
|
||||
from the menu of individual beeps."
|
||||
experimentalFeatures: "Experimental features"
|
||||
developer: "Developer"
|
||||
makeExplorable: "Make account visible in \"Explore\""
|
||||
makeExplorableDescription: "If you turn this off, your account will not show up in
|
||||
the \"Explore\" section."
|
||||
showGapBetweenNotesInTimeline: "Show a gap between posts on the timeline"
|
||||
showGapBetweenNotesInTimeline: "Show a gap between beeps on the timeline"
|
||||
duplicate: "Duplicate"
|
||||
left: "Left"
|
||||
center: "Center"
|
||||
|
@ -803,7 +803,7 @@ showTitlebar: "Show title bar"
|
|||
clearCache: "Clear cache"
|
||||
onlineUsersCount: "{n} users are online"
|
||||
nUsers: "{n} Users"
|
||||
nNotes: "{n} Posts"
|
||||
nNotes: "{n} Beeps"
|
||||
sendErrorReports: "Send error reports"
|
||||
sendErrorReportsDescription: "When turned on, detailed error information will be shared
|
||||
with Iceshrimp when a problem occurs, helping to improve the quality of Iceshrimp.\n
|
||||
|
@ -847,9 +847,9 @@ unlikeConfirm: "Really remove your like?"
|
|||
fullView: "Full view"
|
||||
quitFullView: "Exit full view"
|
||||
addDescription: "Add description"
|
||||
userPagePinTip: "You can display posts here by selecting \"Pin to profile\" from the
|
||||
menu of individual posts."
|
||||
notSpecifiedMentionWarning: "This post contains mentions of users not included as
|
||||
userPagePinTip: "You can display beeps here by selecting \"Pin to profile\" from the
|
||||
menu of individual beeps."
|
||||
notSpecifiedMentionWarning: "This beep contains mentions of users not included as
|
||||
recipients"
|
||||
info: "About"
|
||||
userInfo: "User information"
|
||||
|
@ -876,11 +876,11 @@ switch: "Switch"
|
|||
noMaintainerInformationWarning: "Maintainer information is not configured."
|
||||
noBotProtectionWarning: "Bot protection is not configured."
|
||||
configure: "Configure"
|
||||
postToGallery: "Create new gallery post"
|
||||
postToGallery: "Create new gallery beep"
|
||||
gallery: "Gallery"
|
||||
recentPosts: "Recent pages"
|
||||
popularPosts: "Popular pages"
|
||||
shareWithNote: "Share with post"
|
||||
shareWithNote: "Share with beep"
|
||||
ads: "Advertisements"
|
||||
expiration: "Deadline"
|
||||
memo: "Memo"
|
||||
|
@ -895,7 +895,7 @@ instanceSecurity: "Server Security"
|
|||
secureModeInfo: "When requesting from other servers, do not send back without proof."
|
||||
privateMode: "Private Mode"
|
||||
privateModeInfo: "When enabled, only the listed servers can federate with your server.
|
||||
All posts will be hidden from the public."
|
||||
All beeps will be hidden from the public."
|
||||
allowedInstances: "Allowlisted Servers"
|
||||
allowedInstancesDescription: "Hosts of servers to be allowed to federate with, each
|
||||
separated by a new line (only applies in private mode)."
|
||||
|
@ -1083,7 +1083,7 @@ migrationConfirm: "Are you absolutely sure you want to migrate your account to {
|
|||
Once you do this, you won't be able to reverse it, and you won't be able to use
|
||||
your account normally again.\nAlso, please ensure that you've set this current account
|
||||
as the account you're moving from."
|
||||
defaultReaction: "Default emoji reaction for outgoing and incoming posts"
|
||||
defaultReaction: "Default emoji reaction for outgoing and incoming beeps"
|
||||
license: "License"
|
||||
customKaTeXMacro: "Custom KaTeX macros"
|
||||
customKaTeXMacroDescription: "Set up macros to write mathematical expressions easily!
|
||||
|
@ -1096,7 +1096,7 @@ customKaTeXMacroDescription: "Set up macros to write mathematical expressions ea
|
|||
lines are simply ignored. Only simple string substitution functions are supported;
|
||||
advanced syntax, such as conditional branching, cannot be used here."
|
||||
enableCustomKaTeXMacro: "Enable custom KaTeX macros"
|
||||
noteId: "Post ID"
|
||||
noteId: "Beep ID"
|
||||
signupsDisabled: "Signups on this server are currently disabled, but you can always
|
||||
sign up at another server! If you have an invitation code for this server, please
|
||||
enter it below."
|
||||
|
@ -1105,7 +1105,7 @@ apps: "Apps"
|
|||
sendModMail: "Send Moderation Notice"
|
||||
preventAiLearning: "Prevent AI bot scraping"
|
||||
preventAiLearningDescription: "Request third-party AI language models not to study
|
||||
content you upload, such as posts and images."
|
||||
content you upload, such as beeps and images."
|
||||
noGraze: "Please disable the \"Graze for Mastodon\" browser extension, as it interferes
|
||||
with Iceshrimp."
|
||||
silencedWarning: "This page is showing because these users are from servers your admin
|
||||
|
@ -1132,6 +1132,11 @@ openInMainColumn: "Open in main column"
|
|||
searchNotLoggedIn_1: "You have to be authenticated in order to use full text search."
|
||||
searchNotLoggedIn_2: "However, you can search using hashtags, and search users."
|
||||
searchEmptyQuery: "Please enter a search term."
|
||||
bite: "Bite"
|
||||
biteBack: "Bite back"
|
||||
bittenBack: "Bitten back"
|
||||
bitYou: "bit you"
|
||||
bitYouBack: "bit you back"
|
||||
|
||||
_sensitiveMediaDetection:
|
||||
description: "Reduces the effort of server moderation through automatically recognizing
|
||||
|
@ -1184,7 +1189,7 @@ _forgotPassword:
|
|||
the server administrator to reset your password instead."
|
||||
_gallery:
|
||||
my: "My Gallery"
|
||||
liked: "Liked Posts"
|
||||
liked: "Liked beeps"
|
||||
like: "Like"
|
||||
unlike: "Remove like"
|
||||
_email:
|
||||
|
@ -1225,11 +1230,10 @@ _registry:
|
|||
domain: "Domain"
|
||||
createKey: "Create key"
|
||||
_aboutIceshrimp:
|
||||
about: "Iceshrimp is yet another fork of Misskey, bringing you no-nonsense fixes,
|
||||
features & improvements you actually want since 2023."
|
||||
about: "Jörmungandr-bite is a fork of Iceshrimp Bite which is a fork of Iceshrimp which is a fork of Firefish which is a rebranding of Calckey, which is a fork of Misskey, Confused? I hope so."
|
||||
contributors: "Main contributors"
|
||||
allContributors: "All contributors"
|
||||
source: "Iceshrimp development"
|
||||
source: "Jörmungandr-bite development"
|
||||
translation: "Translations"
|
||||
chatroom: "Chat room"
|
||||
documentation: "Documentation"
|
||||
|
@ -1258,7 +1262,7 @@ _mfm:
|
|||
alwaysPlay: "Always autoplay all animated MFM"
|
||||
cheatSheet: "MFM Cheatsheet"
|
||||
intro: "MFM is a markup language used on Iceshrimp, Misskey, Akkoma, and more that
|
||||
can be used in posts and chats. Here you can view a list of all available MFM
|
||||
can be used in beeps and chats. Here you can view a list of all available MFM
|
||||
syntax."
|
||||
dummy: "Iceshrimp expands the world of the Fediverse"
|
||||
advanced: "Advanced MFM"
|
||||
|
@ -1359,7 +1363,7 @@ _channel:
|
|||
owned: "Owned"
|
||||
following: "Followed"
|
||||
usersCount: "{n} Participants"
|
||||
notesCount: "{n} Posts"
|
||||
notesCount: "{n} Beeps"
|
||||
nameAndDescription: "Name and description"
|
||||
nameOnly: "Name only"
|
||||
_messaging:
|
||||
|
@ -1375,18 +1379,18 @@ _wordMute:
|
|||
muteWordsDescription: "Separate with spaces for an AND condition or with line breaks
|
||||
for an OR condition."
|
||||
muteWordsDescription2: "Surround keywords with slashes to use regular expressions."
|
||||
softDescription: "Hide posts that fulfil the set conditions from the timeline."
|
||||
hardDescription: "Prevents posts fulfilling the set conditions from being added
|
||||
to the timeline. In addition, these posts will not be added to the timeline even
|
||||
softDescription: "Hide beeps that fulfil the set conditions from the timeline."
|
||||
hardDescription: "Prevents beeps fulfilling the set conditions from being added
|
||||
to the timeline. In addition, these beeps will not be added to the timeline even
|
||||
if the conditions are changed."
|
||||
soft: "Soft"
|
||||
hard: "Hard"
|
||||
mutedNotes: "Muted posts"
|
||||
mutedNotes: "Muted beeps"
|
||||
_instanceMute:
|
||||
instanceMuteDescription: "This will mute any posts/boosts from the listed servers,
|
||||
instanceMuteDescription: "This will mute any beeps/boosts from the listed servers,
|
||||
including those of users replying to a user from a muted server."
|
||||
instanceMuteDescription2: "Separate with newlines"
|
||||
title: "Hides posts from listed servers."
|
||||
title: "Hides beeps from listed servers."
|
||||
heading: "List of servers to be muted"
|
||||
_theme:
|
||||
explore: "Explore Themes"
|
||||
|
@ -1463,8 +1467,8 @@ _theme:
|
|||
accentLighten: "Accent (Lightened)"
|
||||
fgHighlighted: "Highlighted Text"
|
||||
_sfx:
|
||||
note: "New post"
|
||||
noteMy: "Own post"
|
||||
note: "New beep"
|
||||
noteMy: "Own beep"
|
||||
notification: "Notifications"
|
||||
chat: "Chat"
|
||||
chatBg: "Chat (Background)"
|
||||
|
@ -1489,11 +1493,11 @@ _filters:
|
|||
_dialog:
|
||||
title: "Search filter syntax"
|
||||
learnMore: "View filter syntax"
|
||||
wordFilters: "Filter by post text"
|
||||
wordFilters: "Filter by beep text"
|
||||
inFilters: "Filter by bookmark and/or favorite status"
|
||||
miscFilters: "Filter by following relationship and/or note type"
|
||||
userDomain: "Filter by author, mentioned users, reply user or instance domain"
|
||||
postDate: "Filter by post date"
|
||||
postDate: "Filter by beep date"
|
||||
exclusivity: "Note that the before: filter is exclusive, while the after: filter
|
||||
is inclusive."
|
||||
word: "word"
|
||||
|
@ -1515,8 +1519,8 @@ _filters:
|
|||
inBookmarks: "Bookmarked"
|
||||
withFile: "Has attachment"
|
||||
fromDomain: "Specific instance only"
|
||||
notesBefore: "Posts before"
|
||||
notesAfter: "Posts after"
|
||||
notesBefore: "Beeps before"
|
||||
notesAfter: "Beeps after"
|
||||
followingOnly: "Following only"
|
||||
followersOnly: "Followers only"
|
||||
repliesOnly: "Replies only"
|
||||
|
@ -1530,24 +1534,24 @@ _tutorial:
|
|||
step1_2: "Let's get you set up. You'll be up and running in no time!"
|
||||
step2_1: "First, please fill out your profile."
|
||||
step2_2: "Providing some information about who you are will make it easier for others
|
||||
to tell if they want to see your posts or follow you."
|
||||
to tell if they want to see your beeps or follow you."
|
||||
step3_1: "Now it's time to follow some people!"
|
||||
step3_2: "Your home and social timelines are based off of who you follow, so try
|
||||
following a couple accounts to get started.\nClick the plus circle on the top
|
||||
right of a profile to follow them."
|
||||
step4_1: "Let's get you out there."
|
||||
step4_2: "For your first post, some people like to make an {introduction} post or
|
||||
step4_2: "For your first beep, some people like to make an {introduction} beep or
|
||||
a simple \"Hello world!\""
|
||||
step5_1: "Timelines, timelines everywhere!"
|
||||
step5_2: "Your server has {timelines} different timelines enabled."
|
||||
step5_3: "The Home {icon} timeline is where you can see posts from the accounts
|
||||
step5_3: "The Home {icon} timeline is where you can see beeps from the accounts
|
||||
you follow."
|
||||
step5_4: "The Local {icon} timeline is where you can see posts from everyone else
|
||||
step5_4: "The Local {icon} timeline is where you can see beeps from everyone else
|
||||
on this server."
|
||||
step5_5: "The Social {icon} timeline is a combination of the Home and Local timelines."
|
||||
step5_6: "The Recommended {icon} timeline is where you can see posts from servers
|
||||
step5_6: "The Recommended {icon} timeline is where you can see beeps from servers
|
||||
the admins recommend."
|
||||
step5_7: "The Global {icon} timeline is where you can see posts from every other
|
||||
step5_7: "The Global {icon} timeline is where you can see beeps from every other
|
||||
connected server."
|
||||
step6_1: "So, what is this place?"
|
||||
step6_2: "Well, you didn't just join Iceshrimp. You joined a portal to the Fediverse,
|
||||
|
@ -1602,7 +1606,7 @@ _permissions:
|
|||
"write:messaging": "Compose or delete chat messages"
|
||||
"read:mutes": "View your list of muted users"
|
||||
"write:mutes": "Edit your list of muted users"
|
||||
"write:notes": "Compose or delete posts"
|
||||
"write:notes": "Compose or delete beeps"
|
||||
"read:notifications": "View your notifications"
|
||||
"write:notifications": "Manage your notifications"
|
||||
"read:reactions": "View your reactions"
|
||||
|
@ -1618,8 +1622,8 @@ _permissions:
|
|||
"write:channels": "Edit your channels"
|
||||
"read:gallery": "View your gallery"
|
||||
"write:gallery": "Edit your gallery"
|
||||
"read:gallery-likes": "View your list of liked gallery posts"
|
||||
"write:gallery-likes": "Edit your list of liked gallery posts"
|
||||
"read:gallery-likes": "View your list of liked gallery beeps"
|
||||
"write:gallery-likes": "Edit your list of liked gallery beeps"
|
||||
_auth:
|
||||
shareAccess: "Would you like to authorize \"{name}\" to access this account?"
|
||||
shareAccessAsk: "Are you sure you want to authorize this application to access your
|
||||
|
@ -1633,12 +1637,12 @@ _auth:
|
|||
signedInAs: "Signed in as"
|
||||
authRequired: "Authorization required"
|
||||
_antennaSources:
|
||||
all: "All posts"
|
||||
homeTimeline: "Posts from followed users"
|
||||
users: "Posts from specific users"
|
||||
userList: "Posts from a specified list of users"
|
||||
userGroup: "Posts from users in a specified group"
|
||||
instances: "Posts from all users on an server"
|
||||
all: "All beeps"
|
||||
homeTimeline: "Beeps from followed users"
|
||||
users: "Beeps from specific users"
|
||||
userList: "Beeps from a specified list of users"
|
||||
userGroup: "Beeps from users in a specified group"
|
||||
instances: "Beeps from all users on an server"
|
||||
_weekday:
|
||||
sunday: "Sunday"
|
||||
monday: "Monday"
|
||||
|
@ -1662,7 +1666,7 @@ _widgets:
|
|||
unixClock: "UNIX Clock"
|
||||
federation: "Federation"
|
||||
instanceCloud: "Server Cloud"
|
||||
postForm: "Posting Form"
|
||||
postForm: "Beeping Form"
|
||||
slideshow: "Slideshow"
|
||||
button: "Button"
|
||||
onlineUsers: "Online Users"
|
||||
|
@ -1675,7 +1679,7 @@ _widgets:
|
|||
chooseList: "Select a list"
|
||||
meiliStatus: "Server Status"
|
||||
meiliSize: "Index size"
|
||||
meiliIndexCount: "Indexed posts"
|
||||
meiliIndexCount: "Indexed beeps"
|
||||
|
||||
_cw:
|
||||
hide: "Hide content"
|
||||
|
@ -1706,9 +1710,9 @@ _poll:
|
|||
remainingSeconds: "{s} second(s) remaining"
|
||||
_visibility:
|
||||
public: "Public"
|
||||
publicDescription: "Your post will be visible in all public timelines"
|
||||
publicDescription: "Your beep will be visible in all public timelines"
|
||||
home: "Unlisted"
|
||||
homeDescription: "Post to home timeline only"
|
||||
homeDescription: "Beep to home timeline only"
|
||||
followers: "Followers"
|
||||
followersDescription: "Make visible to your followers and mentioned users only"
|
||||
specified: "Direct"
|
||||
|
@ -1716,9 +1720,9 @@ _visibility:
|
|||
localOnly: "Local only"
|
||||
localOnlyDescription: "Not visible to remote users"
|
||||
_postForm:
|
||||
replyPlaceholder: "Reply to this post…"
|
||||
quotePlaceholder: "Quote this post…"
|
||||
channelPlaceholder: "Post to a channel…"
|
||||
replyPlaceholder: "Reply to this beep…"
|
||||
quotePlaceholder: "Quote this beep…"
|
||||
channelPlaceholder: "Beep to a channel…"
|
||||
_placeholders:
|
||||
a: "What are you up to?"
|
||||
b: "What's happening around you?"
|
||||
|
@ -1743,7 +1747,7 @@ _profile:
|
|||
locationDescription: "If you enter your city first, it will display your local time
|
||||
to other users."
|
||||
_exportOrImport:
|
||||
allNotes: "All posts"
|
||||
allNotes: "All beeps"
|
||||
followingList: "Followed users"
|
||||
muteList: "Muted users"
|
||||
blockingList: "Blocked users"
|
||||
|
@ -1756,10 +1760,10 @@ _charts:
|
|||
usersIncDec: "Difference in the number of users"
|
||||
usersTotal: "Total number of users"
|
||||
activeUsers: "Active users"
|
||||
notesIncDec: "Difference in the number of posts"
|
||||
localNotesIncDec: "Difference in the number of local posts"
|
||||
remoteNotesIncDec: "Difference in the number of remote posts"
|
||||
notesTotal: "Total number of posts"
|
||||
notesIncDec: "Difference in the number of beeps"
|
||||
localNotesIncDec: "Difference in the number of local beeps"
|
||||
remoteNotesIncDec: "Difference in the number of remote beeps"
|
||||
notesTotal: "Total number of beeps"
|
||||
filesIncDec: "Difference in the number of files"
|
||||
filesTotal: "Total number of files"
|
||||
storageUsageIncDec: "Difference in storage usage"
|
||||
|
@ -1768,8 +1772,8 @@ _instanceCharts:
|
|||
requests: "Requests"
|
||||
users: "Difference in the number of users"
|
||||
usersTotal: "Cumulative number of users"
|
||||
notes: "Difference in the number of posts"
|
||||
notesTotal: "Cumulative number of posts"
|
||||
notes: "Difference in the number of beeps"
|
||||
notesTotal: "Cumulative number of beeps"
|
||||
ff: "Difference in the number of followed users / followers "
|
||||
ffTotal: "Cumulative number of followed users / followers"
|
||||
cacheSize: "Difference in cache size"
|
||||
|
@ -1831,7 +1835,7 @@ _pages:
|
|||
if: "If"
|
||||
_if:
|
||||
variable: "Variable"
|
||||
post: "Posting form"
|
||||
post: "Beeping form"
|
||||
_post:
|
||||
text: "Content"
|
||||
attachCanvasImage: "Attach canvas image"
|
||||
|
@ -1856,10 +1860,10 @@ _pages:
|
|||
id: "Canvas ID"
|
||||
width: "Width"
|
||||
height: "Height"
|
||||
note: "Embedded post"
|
||||
note: "Embedded beep"
|
||||
_note:
|
||||
id: "Post ID"
|
||||
idDescription: "You can alternatively paste the post URL here."
|
||||
id: "Beep ID"
|
||||
idDescription: "You can alternatively paste the beep URL here."
|
||||
detailed: "Detailed view"
|
||||
switch: "Switch"
|
||||
_switch:
|
||||
|
@ -2092,7 +2096,7 @@ _notification:
|
|||
pollEnded: "Poll results have become available"
|
||||
emptyPushNotificationMessage: "Push notifications have been updated"
|
||||
reacted: "reacted to your post"
|
||||
renoted: "boosted your post"
|
||||
renoted: "boosted your beep"
|
||||
voted: "voted on your poll"
|
||||
_types:
|
||||
all: "All"
|
||||
|
@ -2108,6 +2112,7 @@ _notification:
|
|||
followRequestAccepted: "Accepted follow requests"
|
||||
groupInvited: "Group invitations"
|
||||
app: "Notifications from linked apps"
|
||||
bite: "Bites"
|
||||
_actions:
|
||||
followBack: "followed you back"
|
||||
reply: "Reply"
|
||||
|
@ -2145,8 +2150,8 @@ _deck:
|
|||
direct: "Direct messages"
|
||||
_experiments:
|
||||
title: "Experiments"
|
||||
enablePostImports: "Enable post imports"
|
||||
postImportsCaption: "Allows users to import their posts from past Iceshrimp, Misskey,
|
||||
enablePostImports: "Enable beep imports"
|
||||
postImportsCaption: "Allows users to import their beeps from past Iceshrimp, Misskey,
|
||||
Mastodon, Akkoma, and Pleroma accounts. It may cause slowdowns during load if
|
||||
your queue is bottlenecked."
|
||||
_dialog:
|
||||
|
@ -2169,12 +2174,12 @@ _cwStyle:
|
|||
modern: "Modern"
|
||||
classic: "Classic (Misskey/Foundkey-like)"
|
||||
alternative: "Alternative (Firefish-like)"
|
||||
alwaysExpandCws: "Always expand posts with content warnings"
|
||||
alwaysExpandCws: "Always expand beeps with content warnings"
|
||||
hideFromHome: "Hide from home timeline"
|
||||
_wellness:
|
||||
name: "Wellness"
|
||||
description: "These settings allow you to adjust possibly addictive or anxiety-inducing
|
||||
aspects of social media. Choose the settings that are ideal for you."
|
||||
newPostsButton: "Enable new posts alert button"
|
||||
newPostsGlowOpacity: "New posts glow opacity"
|
||||
newPostsButton: "Enable new beeps alert button"
|
||||
newPostsGlowOpacity: "New beeps glow opacity"
|
||||
immediacy: "Immediacy"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "iceshrimp",
|
||||
"version": "2023.12.7",
|
||||
"version": "2023.12.7-jormungandr-bite.0.5.2",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://iceshrimp.dev/iceshrimp/iceshrimp.git"
|
||||
|
|
BIN
packages/backend/assets/apple-touch-icon.png
(Stored with Git LFS)
BIN
packages/backend/assets/apple-touch-icon.png
(Stored with Git LFS)
Binary file not shown.
BIN
packages/backend/assets/badges/error.png
(Stored with Git LFS)
Normal file
BIN
packages/backend/assets/badges/error.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
packages/backend/assets/badges/info.png
(Stored with Git LFS)
Normal file
BIN
packages/backend/assets/badges/info.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
packages/backend/assets/badges/not-found.png
(Stored with Git LFS)
Normal file
BIN
packages/backend/assets/badges/not-found.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
packages/backend/assets/favicon.ico
(Stored with Git LFS)
BIN
packages/backend/assets/favicon.ico
(Stored with Git LFS)
Binary file not shown.
BIN
packages/backend/assets/favicon.png
(Stored with Git LFS)
BIN
packages/backend/assets/favicon.png
(Stored with Git LFS)
Binary file not shown.
BIN
packages/backend/assets/icons/192.png
(Stored with Git LFS)
BIN
packages/backend/assets/icons/192.png
(Stored with Git LFS)
Binary file not shown.
BIN
packages/backend/assets/icons/512.png
(Stored with Git LFS)
BIN
packages/backend/assets/icons/512.png
(Stored with Git LFS)
Binary file not shown.
BIN
packages/backend/assets/icons/maskable.png
(Stored with Git LFS)
BIN
packages/backend/assets/icons/maskable.png
(Stored with Git LFS)
Binary file not shown.
BIN
packages/backend/assets/icons/monochrome.png
(Stored with Git LFS)
BIN
packages/backend/assets/icons/monochrome.png
(Stored with Git LFS)
Binary file not shown.
|
@ -1,4 +1,37 @@
|
|||
user-agent: *
|
||||
allow: /
|
||||
disallow: /
|
||||
|
||||
# todo: sitemap
|
||||
# explicit disallows because some bots are assholes that need that
|
||||
|
||||
User-Agent: Googlebot
|
||||
Disallow: /
|
||||
|
||||
User-Agent: Storebot-Google
|
||||
Disallow: /
|
||||
|
||||
User-Agent: GoogleOther
|
||||
Disallow: /
|
||||
|
||||
User-Agent: Google-Extended
|
||||
Disallow: /
|
||||
|
||||
User-agent: CCBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: ChatGPT-User
|
||||
Disallow: /
|
||||
|
||||
User-agent: GPTBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: Google-Extended
|
||||
Disallow: /
|
||||
|
||||
User-agent: Omgilibot
|
||||
Disallow: /
|
||||
|
||||
User-Agent: FacebookBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: Amazonbot
|
||||
Disallow: /
|
||||
|
|
BIN
packages/backend/assets/splash.png
(Stored with Git LFS)
BIN
packages/backend/assets/splash.png
(Stored with Git LFS)
Binary file not shown.
|
@ -54,6 +54,8 @@ export default function load() {
|
|||
...config.images,
|
||||
};
|
||||
|
||||
config.pinLimit = config.pinLimit || parseInt(process.env.pinLimit || "", 100);
|
||||
|
||||
config.htmlCache = {
|
||||
ttlSeconds: parseDuration(config.htmlCache?.ttl ?? '1h', 's')!,
|
||||
prewarm: false,
|
||||
|
|
|
@ -53,6 +53,8 @@ export type Source = {
|
|||
info?: string;
|
||||
};
|
||||
|
||||
pinLimit?: number;
|
||||
|
||||
htmlCache?: {
|
||||
ttl?: string;
|
||||
ttlSeconds?: number;
|
||||
|
|
|
@ -77,6 +77,7 @@ import { OAuthToken } from "@/models/entities/oauth-token.js";
|
|||
import { HtmlNoteCacheEntry } from "@/models/entities/html-note-cache-entry.js";
|
||||
import { HtmlUserCacheEntry } from "@/models/entities/html-user-cache-entry.js";
|
||||
import { TypeORMLoggingOptions } from "@/config/types.js";
|
||||
import { Bite } from "@/models/entities/bite.js";
|
||||
|
||||
const sqlLogger = dbLogger.createSubLogger("sql", "gray", false);
|
||||
const isLogEnabled = (level: TypeORMLoggingOptions): boolean => {
|
||||
|
@ -194,6 +195,7 @@ export const entities = [
|
|||
OAuthToken,
|
||||
HtmlNoteCacheEntry,
|
||||
HtmlUserCacheEntry,
|
||||
Bite,
|
||||
...charts,
|
||||
];
|
||||
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class FederatedBite1705528046452 implements MigrationInterface {
|
||||
name = 'FederatedBite1705528046452'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`CREATE TYPE "public"."bite_targettype_enum" AS ENUM('user', 'bite')`);
|
||||
await queryRunner.query(`CREATE TABLE "bite" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "uri" character varying(512), "userId" character varying(32) NOT NULL, "targetType" "public"."bite_targettype_enum" NOT NULL, "targetUserId" character varying(32), "targetBiteId" character varying(32), "replied" boolean NOT NULL DEFAULT true, CONSTRAINT "CHK_c3a20c5756ccff3133f8927500" CHECK ("targetUserId" IS NOT NULL OR "targetBiteId" IS NOT NULL), CONSTRAINT "PK_1887f3f621a4a7655a1b78bfd66" PRIMARY KEY ("id")); COMMENT ON COLUMN "bite"."uri" IS 'null if local'`);
|
||||
await queryRunner.query(`ALTER TABLE "notification" ADD "biteId" character varying(32)`);
|
||||
await queryRunner.query(`ALTER TYPE "public"."user_profile_mutingnotificationtypes_enum" RENAME TO "user_profile_mutingnotificationtypes_enum_old"`);
|
||||
await queryRunner.query(`CREATE TYPE "public"."user_profile_mutingnotificationtypes_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app', 'bite')`);
|
||||
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "mutingNotificationTypes" DROP DEFAULT`);
|
||||
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "mutingNotificationTypes" TYPE "public"."user_profile_mutingnotificationtypes_enum"[] USING "mutingNotificationTypes"::"text"::"public"."user_profile_mutingnotificationtypes_enum"[]`);
|
||||
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "mutingNotificationTypes" SET DEFAULT '{}'`);
|
||||
await queryRunner.query(`DROP TYPE "public"."user_profile_mutingnotificationtypes_enum_old"`);
|
||||
await queryRunner.query(`ALTER TABLE "bite" ADD CONSTRAINT "FK_8d00aa79e157364ac1f60c15098" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "bite" ADD CONSTRAINT "FK_a646fbbeb6efa2531c75fec46b9" FOREIGN KEY ("targetUserId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "bite" ADD CONSTRAINT "FK_5d5f68610583f2e0b6785d3c0e9" FOREIGN KEY ("targetBiteId") REFERENCES "bite"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "notification" ADD CONSTRAINT "FK_c54844158c1eead7042e7ca4c83" FOREIGN KEY ("biteId") REFERENCES "bite"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TYPE "public"."notification_type_enum" RENAME TO "notification_type_enum_old"`);
|
||||
await queryRunner.query(`CREATE TYPE "public"."notification_type_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app', 'bite')`);
|
||||
await queryRunner.query(`ALTER TABLE "notification" ALTER COLUMN "type" TYPE "public"."notification_type_enum" USING "type"::"text"::"public"."notification_type_enum"`);
|
||||
await queryRunner.query(`DROP TYPE "public"."notification_type_enum_old"`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "notification" DROP CONSTRAINT "FK_c54844158c1eead7042e7ca4c83"`);
|
||||
await queryRunner.query(`ALTER TABLE "bite" DROP CONSTRAINT "FK_5d5f68610583f2e0b6785d3c0e9"`);
|
||||
await queryRunner.query(`ALTER TABLE "bite" DROP CONSTRAINT "FK_a646fbbeb6efa2531c75fec46b9"`);
|
||||
await queryRunner.query(`ALTER TABLE "bite" DROP CONSTRAINT "FK_8d00aa79e157364ac1f60c15098"`);
|
||||
await queryRunner.query(`CREATE TYPE "public"."user_profile_mutingnotificationtypes_enum_old" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app')`);
|
||||
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "mutingNotificationTypes" DROP DEFAULT`);
|
||||
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "mutingNotificationTypes" TYPE "public"."user_profile_mutingnotificationtypes_enum_old"[] USING "mutingNotificationTypes"::"text"::"public"."user_profile_mutingnotificationtypes_enum_old"[]`);
|
||||
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "mutingNotificationTypes" SET DEFAULT '{}'`);
|
||||
await queryRunner.query(`DROP TYPE "public"."user_profile_mutingnotificationtypes_enum"`);
|
||||
await queryRunner.query(`ALTER TYPE "public"."user_profile_mutingnotificationtypes_enum_old" RENAME TO "user_profile_mutingnotificationtypes_enum"`);
|
||||
await queryRunner.query(`ALTER TABLE "notification" DROP COLUMN "biteId"`);
|
||||
await queryRunner.query(`DROP TABLE "bite"`);
|
||||
await queryRunner.query(`DROP TYPE "public"."bite_targettype_enum"`);
|
||||
await queryRunner.query(`CREATE TYPE "public"."notification_type_enum_old" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app')`);
|
||||
await queryRunner.query(`ALTER TABLE "notification" ALTER COLUMN "type" TYPE "public"."notification_type_enum_old" USING "type"::"text"::"public"."notification_type_enum_old"`);
|
||||
await queryRunner.query(`DROP TYPE "public"."notification_type_enum"`);
|
||||
await queryRunner.query(`ALTER TYPE "public"."notification_type_enum_old" RENAME TO "notification_type_enum"`);
|
||||
}
|
||||
}
|
|
@ -31,6 +31,7 @@ import { packedQueueCountSchema } from "@/models/schema/queue.js";
|
|||
import { packedGalleryPostSchema } from "@/models/schema/gallery-post.js";
|
||||
import { packedEmojiSchema } from "@/models/schema/emoji.js";
|
||||
import { packedNoteEdit } from "@/models/schema/note-edit.js";
|
||||
import { packedBiteSchema } from "@/models/schema/bite.js";
|
||||
|
||||
export const refs = {
|
||||
UserLite: packedUserLiteSchema,
|
||||
|
@ -65,6 +66,7 @@ export const refs = {
|
|||
FederationInstance: packedFederationInstanceSchema,
|
||||
GalleryPost: packedGalleryPostSchema,
|
||||
Emoji: packedEmojiSchema,
|
||||
Bite: packedBiteSchema,
|
||||
};
|
||||
|
||||
export type Packed<x extends keyof typeof refs> = SchemaType<typeof refs[x]>;
|
||||
|
|
56
packages/backend/src/models/entities/bite.ts
Normal file
56
packages/backend/src/models/entities/bite.ts
Normal file
|
@ -0,0 +1,56 @@
|
|||
import { Check, Column, Entity, ManyToOne, PrimaryColumn } from "typeorm";
|
||||
import { id } from "../id.js";
|
||||
import { User } from "./user.js";
|
||||
|
||||
@Entity()
|
||||
@Check(`"targetUserId" IS NOT NULL OR "targetBiteId" IS NOT NULL`)
|
||||
export class Bite {
|
||||
@PrimaryColumn(id())
|
||||
public id: string;
|
||||
|
||||
@Column("timestamp with time zone")
|
||||
public createdAt: Date;
|
||||
|
||||
@Column("varchar", {
|
||||
length: 512,
|
||||
nullable: true,
|
||||
comment: "null if local",
|
||||
})
|
||||
public uri: string | null;
|
||||
|
||||
@Column(id())
|
||||
public userId: string;
|
||||
|
||||
@ManyToOne(() => User, {
|
||||
onDelete: "CASCADE",
|
||||
})
|
||||
public user: User;
|
||||
|
||||
@Column("enum", {
|
||||
enum: ["user", "bite"],
|
||||
})
|
||||
public targetType: "user" | "bite";
|
||||
|
||||
@Column({ ...id(), nullable: true })
|
||||
public targetUserId: string | null;
|
||||
|
||||
@ManyToOne(() => User, {
|
||||
onDelete: "CASCADE",
|
||||
nullable: true,
|
||||
})
|
||||
public targetUser: User | null;
|
||||
|
||||
@Column({ ...id(), nullable: true })
|
||||
public targetBiteId: string | null;
|
||||
|
||||
@ManyToOne(() => Bite, {
|
||||
onDelete: "CASCADE",
|
||||
nullable: true,
|
||||
})
|
||||
public targetBite: Bite | null;
|
||||
|
||||
@Column("boolean", {
|
||||
default: true,
|
||||
})
|
||||
public replied: boolean;
|
||||
}
|
|
@ -13,6 +13,7 @@ import { FollowRequest } from "./follow-request.js";
|
|||
import { UserGroupInvitation } from "./user-group-invitation.js";
|
||||
import { AccessToken } from "./access-token.js";
|
||||
import { notificationTypes } from "@/types.js";
|
||||
import { Bite } from "./bite.js";
|
||||
|
||||
@Entity()
|
||||
export class Notification {
|
||||
|
@ -181,4 +182,12 @@ export class Notification {
|
|||
})
|
||||
@JoinColumn()
|
||||
public appAccessToken: AccessToken | null;
|
||||
|
||||
@Column({ ...id(), nullable: true })
|
||||
public biteId: Bite["id"] | null;
|
||||
|
||||
@ManyToOne((type) => Bite, {
|
||||
onDelete: "CASCADE", nullable: true
|
||||
})
|
||||
public bite: Bite | null;
|
||||
}
|
||||
|
|
|
@ -70,6 +70,7 @@ import { OAuthToken } from "@/models/entities/oauth-token.js";
|
|||
import { UserProfileRepository } from "@/models/repositories/user-profile.js";
|
||||
import { HtmlNoteCacheEntry } from "@/models/entities/html-note-cache-entry.js";
|
||||
import { HtmlUserCacheEntry } from "@/models/entities/html-user-cache-entry.js";
|
||||
import { BiteRespository } from "./repositories/bite.js";
|
||||
|
||||
export const Announcements = db.getRepository(Announcement);
|
||||
export const AnnouncementReads = db.getRepository(AnnouncementRead);
|
||||
|
@ -138,3 +139,4 @@ export const OAuthApps = db.getRepository(OAuthApp);
|
|||
export const OAuthTokens = db.getRepository(OAuthToken);
|
||||
export const HtmlUserCacheEntries = db.getRepository(HtmlUserCacheEntry);
|
||||
export const HtmlNoteCacheEntries = db.getRepository(HtmlNoteCacheEntry);
|
||||
export const Bites = BiteRespository;
|
||||
|
|
71
packages/backend/src/models/repositories/bite.ts
Normal file
71
packages/backend/src/models/repositories/bite.ts
Normal file
|
@ -0,0 +1,71 @@
|
|||
import { db } from "@/db/postgre.js";
|
||||
import { Bite } from "../entities/bite.js";
|
||||
import { Packed } from "@/misc/schema.js";
|
||||
import { Bites, Users } from "../index.js";
|
||||
import { User } from "../entities/user.js";
|
||||
import { awaitAll } from "@/prelude/await-all.js";
|
||||
import config from "@/config/index.js";
|
||||
|
||||
export const BiteRespository = db.getRepository(Bite).extend({
|
||||
async pack(
|
||||
src: Bite | Bite["id"],
|
||||
me?: { id: User["id"] } | null | undefined,
|
||||
): Promise<Packed<"Bite">> {
|
||||
const bite =
|
||||
typeof src === "object" ? src : await this.findOneByOrFail({ id: src });
|
||||
return await awaitAll({
|
||||
id: bite.id,
|
||||
user: Users.pack(bite.user ?? bite.userId, me, { detail: false }),
|
||||
targetType: bite.targetType,
|
||||
target: this.packTarget(bite, me),
|
||||
replied: bite.replied,
|
||||
});
|
||||
},
|
||||
|
||||
async packTarget(
|
||||
bite: Bite,
|
||||
me?: { id: User["id"] } | null | undefined,
|
||||
): Promise<Packed<"UserLite"> | Packed<"Bite">> {
|
||||
switch (bite.targetType) {
|
||||
case "user":
|
||||
return await Users.pack(bite.targetUser ?? bite.targetUserId!, me, {
|
||||
detail: false,
|
||||
});
|
||||
case "bite":
|
||||
return await this.pack(bite.targetBite ?? bite.targetBiteId!, me);
|
||||
}
|
||||
},
|
||||
|
||||
async targetUri(bite: Bite): Promise<string> {
|
||||
switch (bite.targetType) {
|
||||
case "user": {
|
||||
bite.targetUser =
|
||||
bite.targetUser ??
|
||||
(await Users.findOneOrFail({ where: { id: bite.targetUserId! } }));
|
||||
return (
|
||||
bite.targetUser.uri || `${config.url}/users/${bite.targetUserId}`
|
||||
);
|
||||
}
|
||||
case "bite": {
|
||||
bite.targetBite =
|
||||
bite.targetBite ??
|
||||
(await Bites.findOneOrFail({ where: { id: bite.targetBiteId! } }));
|
||||
return (
|
||||
bite.targetBite.uri || `${config.url}/bites/${bite.targetBiteId}`
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async targetUserId(bite: Bite): Promise<User["id"]> {
|
||||
switch (bite.targetType) {
|
||||
case "user":
|
||||
return bite.targetUserId!;
|
||||
case "bite":
|
||||
bite.targetBite =
|
||||
bite.targetBite ??
|
||||
(await Bites.findOneByOrFail({ id: bite.targetBiteId! }));
|
||||
return bite.targetBite.userId;
|
||||
}
|
||||
},
|
||||
});
|
|
@ -14,6 +14,7 @@ import {
|
|||
UserGroupInvitations,
|
||||
AccessTokens,
|
||||
NoteReactions,
|
||||
Bites,
|
||||
} from "../index.js";
|
||||
|
||||
export const NotificationRepository = db.getRepository(Notification).extend({
|
||||
|
@ -143,6 +144,11 @@ export const NotificationRepository = db.getRepository(Notification).extend({
|
|||
icon: notification.customIcon || token?.iconUrl,
|
||||
}
|
||||
: {}),
|
||||
...(notification.type === "bite"
|
||||
? {
|
||||
bite: notification.bite ?? await Bites.findOneBy({ id: notification.biteId! }),
|
||||
}
|
||||
: {}),
|
||||
});
|
||||
},
|
||||
|
||||
|
|
31
packages/backend/src/models/schema/bite.ts
Normal file
31
packages/backend/src/models/schema/bite.ts
Normal file
|
@ -0,0 +1,31 @@
|
|||
export const packedBiteSchema = {
|
||||
type: "object",
|
||||
properties: {
|
||||
id: {
|
||||
type: "string",
|
||||
format: "id",
|
||||
optional: false,
|
||||
nullable: false,
|
||||
},
|
||||
user: {
|
||||
type: "object",
|
||||
ref: "UserLite",
|
||||
},
|
||||
targetType: {
|
||||
type: "string",
|
||||
enum: ["user", "bite"],
|
||||
},
|
||||
target: {
|
||||
oneOf: [
|
||||
{
|
||||
type: "object",
|
||||
ref: "UserLite",
|
||||
},
|
||||
{
|
||||
type: "object",
|
||||
ref: "Bite",
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
} as const;
|
|
@ -75,5 +75,11 @@ export const packedNotificationSchema = {
|
|||
optional: true,
|
||||
nullable: true,
|
||||
},
|
||||
bite: {
|
||||
type: "object",
|
||||
ref: "Bite",
|
||||
optional: true,
|
||||
nullable: true,
|
||||
},
|
||||
},
|
||||
} as const;
|
||||
|
|
|
@ -14,6 +14,7 @@ import { StatusError } from "@/misc/fetch.js";
|
|||
import { shouldSkipInstance } from "@/misc/skipped-instances.js";
|
||||
import type { DeliverJobData } from "@/queue/types.js";
|
||||
import type Bull from "bull";
|
||||
import { patchText, shouldPatchText } from "@/remote/activitypub/renderer/note.js";
|
||||
|
||||
const logger = new Logger("deliver");
|
||||
|
||||
|
@ -30,10 +31,33 @@ export default async (job: Bull.Job<DeliverJobData>) => {
|
|||
logger.debug(`delivering ${latest}`);
|
||||
}
|
||||
|
||||
let i = undefined;
|
||||
|
||||
if (
|
||||
["Create", "Update"].includes(job.data.content.type)
|
||||
&& job.data.content.object.type === "Note"
|
||||
) {
|
||||
const obj = job.data.content.object;
|
||||
const patchSrcContent = shouldPatchText(obj.source.content);
|
||||
if (patchSrcContent) {
|
||||
i = await registerOrFetchInstanceDoc(host);
|
||||
if (shouldPatchText(obj.content))
|
||||
obj.content = patchText(obj.content, i);
|
||||
if (shouldPatchText(obj._misskey_content))
|
||||
obj._misskey_content = patchText(obj._misskey_content, i);
|
||||
if (patchSrcContent)
|
||||
obj.source.content = patchText(obj.source.content, i);
|
||||
}
|
||||
}
|
||||
|
||||
await request(job.data.user, job.data.to, job.data.content);
|
||||
|
||||
// Update stats
|
||||
registerOrFetchInstanceDoc(host).then((i) => {
|
||||
(async () => {
|
||||
if (i === undefined) {
|
||||
i = await registerOrFetchInstanceDoc(host);
|
||||
}
|
||||
|
||||
// Update stats
|
||||
Instances.update(i.id, {
|
||||
latestRequestSentAt: new Date(),
|
||||
latestStatus: 200,
|
||||
|
@ -46,7 +70,7 @@ export default async (job: Bull.Job<DeliverJobData>) => {
|
|||
instanceChart.requestSent(i.host, true);
|
||||
apRequestChart.deliverSucc();
|
||||
federationChart.deliverd(i.host, true);
|
||||
});
|
||||
})();
|
||||
|
||||
return "Success";
|
||||
} catch (res) {
|
||||
|
|
|
@ -28,24 +28,24 @@ export async function hasSignature(req: IncomingMessage): Promise<string> {
|
|||
return required ? "supplied" : "unneeded";
|
||||
}
|
||||
|
||||
export async function checkFetch(req: IncomingMessage): Promise<number> {
|
||||
export async function checkFetch(req: IncomingMessage): Promise<{ status: number; host?: string }> {
|
||||
const meta = await fetchMeta();
|
||||
if (meta.secureMode || meta.privateMode) {
|
||||
if (req.headers.host !== config.host) return 400;
|
||||
if (req.headers.host !== config.host) return { status: 400 };
|
||||
|
||||
let signature;
|
||||
|
||||
try {
|
||||
signature = httpSignature.parseRequest(req, { headers: ["(request-target)", "host", "date"] });
|
||||
} catch (e) {
|
||||
return 401;
|
||||
return { status: 401 };
|
||||
}
|
||||
|
||||
const keyId = new URL(signature.keyId);
|
||||
const host = toPuny(keyId.hostname);
|
||||
|
||||
if (await shouldBlockInstance(host, meta)) {
|
||||
return 403;
|
||||
return { status: 403 };
|
||||
}
|
||||
|
||||
if (
|
||||
|
@ -54,13 +54,13 @@ export async function checkFetch(req: IncomingMessage): Promise<number> {
|
|||
host !== config.domain &&
|
||||
!meta.allowedHosts.includes(host)
|
||||
) {
|
||||
return 403;
|
||||
return { status: 403 };
|
||||
}
|
||||
|
||||
const keyIdLower = signature.keyId.toLowerCase();
|
||||
if (keyIdLower.startsWith("acct:")) {
|
||||
// Old keyId is no longer supported.
|
||||
return 401;
|
||||
return { status: 401 };
|
||||
}
|
||||
|
||||
const dbResolver = new DbResolver();
|
||||
|
@ -77,23 +77,23 @@ export async function checkFetch(req: IncomingMessage): Promise<number> {
|
|||
);
|
||||
} catch (e) {
|
||||
// できなければ駄目
|
||||
return 403;
|
||||
return { status: 403 };
|
||||
}
|
||||
}
|
||||
|
||||
// publicKey がなくても終了
|
||||
if (authUser?.key == null) {
|
||||
return 403;
|
||||
return { status: 403 };
|
||||
}
|
||||
|
||||
// Cannot authenticate against local user
|
||||
if (authUser.user.uri === null || authUser.user.host === null) {
|
||||
return 400;
|
||||
return { status: 400 };
|
||||
}
|
||||
|
||||
// Check if keyId hostname matches actor hostname
|
||||
if (toPuny(new URL(authUser.user.uri).hostname) !== host) {
|
||||
return 403;
|
||||
return { status: 403 };
|
||||
}
|
||||
|
||||
// HTTP-Signatureの検証
|
||||
|
@ -107,7 +107,7 @@ export async function checkFetch(req: IncomingMessage): Promise<number> {
|
|||
authUser.key = await dbResolver.refetchPublicKeyForApId(authUser.user);
|
||||
|
||||
if (authUser.key == null) {
|
||||
return 403;
|
||||
return { status: 403 };
|
||||
}
|
||||
|
||||
httpSignatureValidated = httpSignature.verifySignature(
|
||||
|
@ -117,12 +117,12 @@ export async function checkFetch(req: IncomingMessage): Promise<number> {
|
|||
}
|
||||
|
||||
if (!httpSignatureValidated) {
|
||||
return 403;
|
||||
return { status: 403 };
|
||||
}
|
||||
|
||||
return verifySignature(signature, authUser.key) ? 200 : 401;
|
||||
}
|
||||
return 200;
|
||||
return { status: 200 };
|
||||
}
|
||||
|
||||
export async function getSignatureUser(req: IncomingMessage): Promise<{
|
||||
|
|
79
packages/backend/src/remote/activitypub/kernel/bite.ts
Normal file
79
packages/backend/src/remote/activitypub/kernel/bite.ts
Normal file
|
@ -0,0 +1,79 @@
|
|||
import { CacheableRemoteUser } from "@/models/entities/user.js";
|
||||
import { IActivity, IBite } from "../type.js";
|
||||
import Resolver from "../resolver.js";
|
||||
import { fetchPerson } from "../models/person.js";
|
||||
import config from "@/config/index.js";
|
||||
import { genId } from "@/misc/gen-id.js";
|
||||
import { createBite } from "@/services/create-bite.js";
|
||||
import { Bite } from "@/models/entities/bite.js";
|
||||
|
||||
export default async (
|
||||
actor: CacheableRemoteUser,
|
||||
bite: IBite,
|
||||
): Promise<string> => {
|
||||
if (actor.uri !== bite.actor) {
|
||||
return "skip: actor uri mismatch";
|
||||
}
|
||||
|
||||
if (bite.id === null) {
|
||||
return "skip: bite id not specified";
|
||||
}
|
||||
|
||||
const resolver = new Resolver();
|
||||
const biteActor = await fetchPerson(bite.actor, resolver);
|
||||
if (biteActor === null) {
|
||||
return "skip: biteActor is null";
|
||||
}
|
||||
if (!bite.target.startsWith(`${config.url}/`)) {
|
||||
return "skip: target is not local";
|
||||
}
|
||||
|
||||
const localId = genId();
|
||||
const fields = {
|
||||
id: localId,
|
||||
userId: biteActor.id,
|
||||
replied: false,
|
||||
} as any;
|
||||
|
||||
const parts = bite.target.split("/");
|
||||
const targetDbId = parts.pop();
|
||||
const targetPathType = parts.pop();
|
||||
|
||||
let targetType: Bite["targetType"];
|
||||
let targetId;
|
||||
|
||||
if (targetPathType === "users") {
|
||||
targetType = "user";
|
||||
targetId = targetDbId;
|
||||
} else if (targetPathType === "bites") {
|
||||
targetType = "bite";
|
||||
targetId = targetDbId;
|
||||
} else {
|
||||
// fallback for unknown object types
|
||||
targetType = "user";
|
||||
if (bite.to !== undefined) {
|
||||
const to = Array.isArray(bite.to) ? bite.to[0] : bite.to;
|
||||
targetId = (to as string).split("/").pop();
|
||||
} else {
|
||||
const biteTarget = await resolver.resolve(bite.target);
|
||||
const targetActor =
|
||||
(biteTarget as IActivity).actor || biteTarget.attributedTo;
|
||||
const targetActorId =
|
||||
typeof targetActor === "string" ? targetActor : (targetActor as any).id;
|
||||
if (!targetActorId.startsWith(`${config.url}/`)) {
|
||||
return "skip: indirect target is not local";
|
||||
}
|
||||
targetId = targetActorId.split("/").pop();
|
||||
}
|
||||
}
|
||||
|
||||
await createBite(
|
||||
biteActor,
|
||||
targetType,
|
||||
targetId,
|
||||
bite.id!,
|
||||
bite.published ? new Date(bite.published) : null,
|
||||
);
|
||||
|
||||
return "ok";
|
||||
};
|
|
@ -19,6 +19,7 @@ import {
|
|||
isFlag,
|
||||
isMove,
|
||||
getApId,
|
||||
isBite,
|
||||
} from "../type.js";
|
||||
import { apLogger } from "../logger.js";
|
||||
import Resolver from "../resolver.js";
|
||||
|
@ -37,6 +38,7 @@ import remove from "./remove/index.js";
|
|||
import block from "./block/index.js";
|
||||
import flag from "./flag/index.js";
|
||||
import move from "./move/index.js";
|
||||
import bite from "./bite.js";
|
||||
import type { IObject } from "../type.js";
|
||||
import { extractDbHost } from "@/misc/convert-host.js";
|
||||
import { shouldBlockInstance } from "@/misc/should-block-instance.js";
|
||||
|
@ -105,6 +107,8 @@ async function performOneActivity(
|
|||
await flag(actor, activity);
|
||||
} else if (isMove(activity)) {
|
||||
await move(actor, activity);
|
||||
} else if (isBite(activity)) {
|
||||
await bite(actor, activity);
|
||||
} else {
|
||||
apLogger.warn(`unrecognized activity type: ${(activity as any).type}`);
|
||||
}
|
||||
|
|
|
@ -560,6 +560,8 @@ export const WellKnownContext = {
|
|||
litepub: "http://litepub.social/ns#",
|
||||
EmojiReact: "litepub:EmojiReact",
|
||||
EmojiReaction: "litepub:EmojiReaction",
|
||||
// mia
|
||||
Bite: "https://ns.mia.jetzt/as#Bite",
|
||||
},
|
||||
],
|
||||
};
|
||||
|
|
12
packages/backend/src/remote/activitypub/renderer/bite.ts
Normal file
12
packages/backend/src/remote/activitypub/renderer/bite.ts
Normal file
|
@ -0,0 +1,12 @@
|
|||
import config from "@/config/index.js";
|
||||
import { Bites } from "@/models/index.js";
|
||||
import { Bite } from "@/models/entities/bite.js";
|
||||
|
||||
export default async (bite: Bite) => ({
|
||||
id: `${config.url}/bites/${bite.id}`,
|
||||
type: "Bite",
|
||||
actor: `${config.url}/users/${bite.userId}`,
|
||||
target: await Bites.targetUri(bite),
|
||||
published: bite.createdAt.toISOString(),
|
||||
to: await Bites.targetUserId(bite),
|
||||
});
|
|
@ -10,11 +10,14 @@ import renderEmoji from "./emoji.js";
|
|||
import renderMention from "./mention.js";
|
||||
import renderHashtag from "./hashtag.js";
|
||||
import renderDocument from "./document.js";
|
||||
import { Instances } from "@/models/index.js";
|
||||
import { Instance } from "@/models/entities/instance.js";
|
||||
|
||||
export default async function renderNote(
|
||||
note: Note,
|
||||
dive = true,
|
||||
isTalk = false,
|
||||
clientHost: string | undefined = undefined,
|
||||
): Promise<Record<string, unknown>> {
|
||||
const getPromisedFiles = async (ids: string[]) => {
|
||||
if (!ids || ids.length === 0) return [];
|
||||
|
@ -93,13 +96,17 @@ export default async function renderNote(
|
|||
|
||||
const files = await getPromisedFiles(note.fileIds);
|
||||
|
||||
const text = note.text ?? "";
|
||||
let text = note.text ?? "";
|
||||
let poll: Poll | null = null;
|
||||
|
||||
if (note.hasPoll) {
|
||||
poll = await Polls.findOneBy({ noteId: note.id });
|
||||
}
|
||||
|
||||
if (clientHost && shouldPatchText(text)) {
|
||||
text = patchText(text, await Instances.findOneBy({ host: clientHost }));
|
||||
}
|
||||
|
||||
let apText = text;
|
||||
|
||||
if (quote) {
|
||||
|
@ -186,3 +193,18 @@ export async function getEmojis(names: string[]): Promise<Emoji[]> {
|
|||
|
||||
return emojis.filter((emoji) => emoji != null) as Emoji[];
|
||||
}
|
||||
export function shouldPatchText(text: string): boolean {
|
||||
return text.match(/\$INSTANCE\$(?:host|softwareName|softwareVersion|name|description)\$/) !== null;
|
||||
}
|
||||
|
||||
export function patchText(
|
||||
text: string,
|
||||
target: Instance
|
||||
): string {
|
||||
text = text.replaceAll("$INSTANCE$host$", target.host);
|
||||
text = text.replaceAll("$INSTANCE$softwareName$", target.softwareName || "softwareName");
|
||||
text = text.replaceAll("$INSTANCE$softwareVersion$", target.softwareVersion || "softwareVersion");
|
||||
text = text.replaceAll("$INSTANCE$name$", target.name || "name");
|
||||
text = text.replaceAll("$INSTANCE$description$", target.description || "description");
|
||||
return text;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import {
|
|||
NoteReactions,
|
||||
Polls,
|
||||
Users,
|
||||
Bites,
|
||||
} from "@/models/index.js";
|
||||
import { parseUri } from "./db-resolver.js";
|
||||
import renderNote from "@/remote/activitypub/renderer/note.js";
|
||||
|
@ -25,6 +26,7 @@ import renderFollow from "@/remote/activitypub/renderer/follow.js";
|
|||
import { shouldBlockInstance } from "@/misc/should-block-instance.js";
|
||||
import { apLogger } from "@/remote/activitypub/logger.js";
|
||||
import { In, IsNull, Not } from "typeorm";
|
||||
import renderBite from "@/remote/activitypub/renderer/bite.js";
|
||||
|
||||
export default class Resolver {
|
||||
private history: Set<string>;
|
||||
|
@ -219,6 +221,10 @@ export default class Resolver {
|
|||
throw new Error("resolveLocal: invalid follow URI");
|
||||
}
|
||||
return renderActivity(renderFollow(follower, followee, url));
|
||||
case "bites":
|
||||
return Bites.findOneByOrFail({ id: parsed.id }).then((bite) =>
|
||||
renderActivity(renderBite(bite)),
|
||||
);
|
||||
default:
|
||||
throw new Error(`resolveLocal: type ${type} unhandled`);
|
||||
}
|
||||
|
|
|
@ -322,6 +322,12 @@ export interface IMove extends IActivity {
|
|||
target: IObject | string;
|
||||
}
|
||||
|
||||
export interface IBite extends IActivity {
|
||||
type: "Bite";
|
||||
actor: string;
|
||||
target: string;
|
||||
}
|
||||
|
||||
export const isCreate = (object: IObject): object is ICreate =>
|
||||
getApType(object) === "Create";
|
||||
export const isDelete = (object: IObject): object is IDelete =>
|
||||
|
@ -354,3 +360,5 @@ export const isFlag = (object: IObject): object is IFlag =>
|
|||
getApType(object) === "Flag";
|
||||
export const isMove = (object: IObject): object is IMove =>
|
||||
getApType(object) === "Move";
|
||||
export const isBite = (object: IObject): object is IBite =>
|
||||
getApType(object) === "Bite";
|
||||
|
|
|
@ -16,6 +16,7 @@ import {
|
|||
Emojis,
|
||||
NoteReactions,
|
||||
FollowRequests,
|
||||
Bites,
|
||||
} from "@/models/index.js";
|
||||
import type { ILocalUser, User } from "@/models/entities/user.js";
|
||||
import { renderLike } from "@/remote/activitypub/renderer/like.js";
|
||||
|
@ -35,6 +36,7 @@ import Outbox, { packActivity } from "./activitypub/outbox.js";
|
|||
import { serverLogger } from "./index.js";
|
||||
import config from "@/config/index.js";
|
||||
import Koa from "koa";
|
||||
import renderBite from "@/remote/activitypub/renderer/bite.js";
|
||||
|
||||
// Init router
|
||||
const router = new Router();
|
||||
|
@ -108,9 +110,9 @@ router.post("/users/:user/inbox", parseJsonBodyOrFail, inbox);
|
|||
router.get("/notes/:note", async (ctx, next) => {
|
||||
if (!isActivityPubReq(ctx)) return await next();
|
||||
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
const { status, host } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -166,7 +168,7 @@ router.get("/notes/:note", async (ctx, next) => {
|
|||
serverLogger.debug("Accepting: access criteria met");
|
||||
}
|
||||
|
||||
ctx.body = renderActivity(await renderNote(note, false));
|
||||
ctx.body = renderActivity(await renderNote(note, false, false, host));
|
||||
|
||||
const meta = await fetchMeta();
|
||||
if (meta.secureMode || meta.privateMode) {
|
||||
|
@ -179,9 +181,9 @@ router.get("/notes/:note", async (ctx, next) => {
|
|||
|
||||
// note activity
|
||||
router.get("/notes/:note/activity", async (ctx) => {
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
const { status, host } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -197,7 +199,7 @@ router.get("/notes/:note/activity", async (ctx) => {
|
|||
return;
|
||||
}
|
||||
|
||||
ctx.body = renderActivity(await packActivity(note));
|
||||
ctx.body = renderActivity(await packActivity(note, host));
|
||||
const meta = await fetchMeta();
|
||||
if (meta.secureMode || meta.privateMode) {
|
||||
ctx.set("Cache-Control", "private, max-age=0, must-revalidate");
|
||||
|
@ -231,9 +233,9 @@ router.get("/users/:user/publickey", async (ctx) => {
|
|||
return;
|
||||
}
|
||||
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
const { status } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -291,10 +293,9 @@ router.get("/users/:user", async (ctx, next) => {
|
|||
return;
|
||||
}
|
||||
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
return;
|
||||
const { status } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status;
|
||||
}
|
||||
|
||||
const userId = ctx.params.user;
|
||||
|
@ -317,9 +318,9 @@ router.get("/@:user", async (ctx, next) => {
|
|||
return;
|
||||
}
|
||||
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
const { status } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -340,9 +341,9 @@ router.get("/actor", async (ctx, next) => {
|
|||
|
||||
// emoji
|
||||
router.get("/emojis/:emoji", async (ctx) => {
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
const { status } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -368,9 +369,9 @@ router.get("/emojis/:emoji", async (ctx) => {
|
|||
|
||||
// like
|
||||
router.get("/likes/:like", async (ctx) => {
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
const { status } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -402,9 +403,9 @@ router.get("/likes/:like", async (ctx) => {
|
|||
router.get(
|
||||
"/follows/:follower/:followee",
|
||||
async (ctx: Router.RouterContext) => {
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
const { status } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status;
|
||||
return;
|
||||
}
|
||||
// This may be used before the follow is completed, so we do not
|
||||
|
@ -439,9 +440,9 @@ router.get(
|
|||
|
||||
// follow request
|
||||
router.get("/follows/:followRequestId", async (ctx: Router.RouterContext) => {
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
const { status } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -480,4 +481,33 @@ router.get("/follows/:followRequestId", async (ctx: Router.RouterContext) => {
|
|||
setResponseType(ctx);
|
||||
});
|
||||
|
||||
// bite
|
||||
router.get("/bites/:biteId", async (ctx: Router.RouterContext) => {
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
return;
|
||||
}
|
||||
|
||||
const bite = await Bites.findOne({
|
||||
where: { id: ctx.params.biteId },
|
||||
relations: ["targetUser", "targetBite"],
|
||||
});
|
||||
|
||||
if (bite === null) {
|
||||
ctx.status = 404;
|
||||
return;
|
||||
}
|
||||
|
||||
const meta = await fetchMeta();
|
||||
if (meta.secureMode || meta.privateMode) {
|
||||
ctx.set("Cache-Control", "private, max-age=0, must-revalidate");
|
||||
} else {
|
||||
ctx.set("Cache-Control", "public, max-age=180");
|
||||
}
|
||||
|
||||
ctx.body = renderActivity(await renderBite(bite));
|
||||
setResponseType(ctx);
|
||||
});
|
||||
|
||||
export default router;
|
||||
|
|
|
@ -10,9 +10,9 @@ import { setResponseType } from "../activitypub.js";
|
|||
import type Router from "@koa/router";
|
||||
|
||||
export default async (ctx: Router.RouterContext) => {
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
const { status } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,9 +14,9 @@ import type { FindOptionsWhere } from "typeorm";
|
|||
import type Router from "@koa/router";
|
||||
|
||||
export default async (ctx: Router.RouterContext) => {
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
const { status } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,9 +14,9 @@ import type { FindOptionsWhere } from "typeorm";
|
|||
import type Router from "@koa/router";
|
||||
|
||||
export default async (ctx: Router.RouterContext) => {
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
const { status } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,9 +17,9 @@ import { setResponseType } from "../activitypub.js";
|
|||
import type Router from "@koa/router";
|
||||
|
||||
export default async (ctx: Router.RouterContext) => {
|
||||
const verify = await checkFetch(ctx.req);
|
||||
if (verify !== 200) {
|
||||
ctx.status = verify;
|
||||
const { status, host } = await checkFetch(ctx.req);
|
||||
if (status !== 200) {
|
||||
ctx.status = status;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -78,7 +78,7 @@ export default async (ctx: Router.RouterContext) => {
|
|||
if (sinceId) notes.reverse();
|
||||
|
||||
const activities = await Promise.all(
|
||||
notes.map((note) => packActivity(note)),
|
||||
notes.map((note) => packActivity(note, host)),
|
||||
);
|
||||
const rendered = renderOrderedCollectionPage(
|
||||
`${partOf}?${url.query({
|
||||
|
@ -129,7 +129,10 @@ export default async (ctx: Router.RouterContext) => {
|
|||
* Pack Create<Note> or Announce Activity
|
||||
* @param note Note
|
||||
*/
|
||||
export async function packActivity(note: Note): Promise<any> {
|
||||
export async function packActivity(
|
||||
note: Note,
|
||||
clientHost: string | undefined = undefined
|
||||
): Promise<any> {
|
||||
if (
|
||||
note.renoteId &&
|
||||
note.text == null &&
|
||||
|
@ -144,5 +147,5 @@ export async function packActivity(note: Note): Promise<any> {
|
|||
);
|
||||
}
|
||||
|
||||
return renderCreate(await renderNote(note, false), note);
|
||||
return renderCreate(await renderNote(note, false, false, clientHost), note);
|
||||
}
|
||||
|
|
|
@ -334,6 +334,8 @@ import * as ep___users_show from "./endpoints/users/show.js";
|
|||
import * as ep___users_stats from "./endpoints/users/stats.js";
|
||||
import * as ep___fetchRss from "./endpoints/fetch-rss.js";
|
||||
import * as ep___admin_driveCapOverride from "./endpoints/admin/drive-capacity-override.js";
|
||||
import * as ep___bites_create from "./endpoints/bites/create.js";
|
||||
import * as ep___bites_show from "./endpoints/bites/show.js";
|
||||
|
||||
//Iceshrimp Move
|
||||
import * as ep___i_move from "./endpoints/i/move.js";
|
||||
|
@ -682,6 +684,8 @@ const eps = [
|
|||
["admin/drive-capacity-override", ep___admin_driveCapOverride],
|
||||
["fetch-rss", ep___fetchRss],
|
||||
["get-sounds", ep___sounds],
|
||||
["bites/create", ep___bites_create],
|
||||
["bites/show", ep___bites_show],
|
||||
];
|
||||
|
||||
export interface IEndpointMeta {
|
||||
|
|
37
packages/backend/src/server/api/endpoints/bites/create.ts
Normal file
37
packages/backend/src/server/api/endpoints/bites/create.ts
Normal file
|
@ -0,0 +1,37 @@
|
|||
import { Bites } from "@/models/index.js";
|
||||
import define from "../../define.js";
|
||||
import { createBite } from "@/services/create-bite.js";
|
||||
import { MINUTE } from "@/const.js";
|
||||
|
||||
export const meta = {
|
||||
tags: ["bites"],
|
||||
|
||||
requireCredential: true,
|
||||
|
||||
limit: {
|
||||
duration: MINUTE,
|
||||
max: 30,
|
||||
},
|
||||
|
||||
res: {
|
||||
type: "object",
|
||||
optional: false,
|
||||
nullable: false,
|
||||
ref: "Bite",
|
||||
},
|
||||
} as const;
|
||||
|
||||
export const paramDef = {
|
||||
type: "object",
|
||||
properties: {
|
||||
targetType: { type: "string", enum: ["user", "bite"] },
|
||||
targetId: { type: "string", format: "misskey:id" },
|
||||
},
|
||||
required: ["targetType", "targetId"],
|
||||
} as const;
|
||||
|
||||
export default define(meta, paramDef, async (ps, user) => {
|
||||
const biteId = await createBite(user, ps.targetType, ps.targetId);
|
||||
|
||||
return await Bites.pack(biteId, user);
|
||||
});
|
25
packages/backend/src/server/api/endpoints/bites/show.ts
Normal file
25
packages/backend/src/server/api/endpoints/bites/show.ts
Normal file
|
@ -0,0 +1,25 @@
|
|||
import { Bites } from "@/models/index.js";
|
||||
import define from "../../define.js";
|
||||
|
||||
export const meta = {
|
||||
tags: ["bites"],
|
||||
|
||||
res: {
|
||||
type: "object",
|
||||
optional: false,
|
||||
nullable: false,
|
||||
ref: "Bite",
|
||||
},
|
||||
} as const;
|
||||
|
||||
export const paramDef = {
|
||||
type: "object",
|
||||
properties: {
|
||||
biteId: { type: "string", format: "misskey:id" },
|
||||
},
|
||||
required: ["biteId"],
|
||||
} as const;
|
||||
|
||||
export default define(meta, paramDef, async (ps, user) => {
|
||||
return await Bites.pack(ps.biteId, user);
|
||||
});
|
|
@ -7,8 +7,7 @@ import { sqlLikeEscape } from "@/misc/sql-like-escape.js";
|
|||
export const meta = {
|
||||
tags: ["federation"],
|
||||
|
||||
requireCredential: false,
|
||||
requireCredentialPrivateMode: true,
|
||||
requireCredential: true,
|
||||
|
||||
res: {
|
||||
type: "array",
|
||||
|
|
|
@ -97,10 +97,22 @@ const cache = new Cache<Awaited<ReturnType<typeof nodeinfo2>>>(
|
|||
60 * 10,
|
||||
);
|
||||
|
||||
// tell sharkey instances that we're mastodon so it properly federates likes
|
||||
const patch = (ctx, base) => {
|
||||
// note: sharkey uses misskey as it's user-agent
|
||||
if ((ctx.get("user-agent") ?? "").toLowerCase().indexOf("misskey") != -1) {
|
||||
const copied = {...base};
|
||||
copied.software = {...copied.software};
|
||||
copied.software.name = 'mastodon';
|
||||
return copied;
|
||||
}
|
||||
return base;
|
||||
};
|
||||
|
||||
router.get(nodeinfo2_1path, async (ctx) => {
|
||||
const base = await cache.fetch(null, () => nodeinfo2());
|
||||
|
||||
ctx.body = { version: "2.1", ...base };
|
||||
ctx.body = { version: "2.1", ...patch(ctx, base) };
|
||||
ctx.set("Cache-Control", "public, max-age=600");
|
||||
});
|
||||
|
||||
|
@ -110,7 +122,7 @@ router.get(nodeinfo2_0path, async (ctx) => {
|
|||
// @ts-ignore
|
||||
base.software.repository = undefined;
|
||||
|
||||
ctx.body = { version: "2.0", ...base };
|
||||
ctx.body = { version: "2.0", ...patch(ctx, base) };
|
||||
ctx.set("Cache-Control", "public, max-age=600");
|
||||
});
|
||||
|
||||
|
|
74
packages/backend/src/services/create-bite.ts
Normal file
74
packages/backend/src/services/create-bite.ts
Normal file
|
@ -0,0 +1,74 @@
|
|||
import { genId } from "@/misc/gen-id.js";
|
||||
import { Bites, Users } from "@/models/index.js";
|
||||
import { Bite } from "@/models/entities/bite.js";
|
||||
import { User } from "@/models/entities/user.js";
|
||||
import { renderActivity } from "@/remote/activitypub/renderer/index.js";
|
||||
import renderBite from "@/remote/activitypub/renderer/bite.js";
|
||||
import { deliverToUser } from "@/remote/activitypub/deliver-manager.js";
|
||||
import { createNotification } from "./create-notification.js";
|
||||
|
||||
export async function createBite(
|
||||
sender: User,
|
||||
targetType: Bite["targetType"],
|
||||
targetId: string,
|
||||
remoteUri: Bite["uri"] = null,
|
||||
createdAt: Date | null = null,
|
||||
): Promise<Bite["id"]> {
|
||||
const id = genId();
|
||||
|
||||
const insert = {
|
||||
id,
|
||||
createdAt: createdAt ?? new Date(),
|
||||
userId: sender.id,
|
||||
targetType,
|
||||
replied: false,
|
||||
uri: remoteUri,
|
||||
} as any;
|
||||
|
||||
switch (targetType) {
|
||||
case "user":
|
||||
insert.targetUserId = targetId;
|
||||
break;
|
||||
case "bite":
|
||||
insert.targetBiteId = targetId;
|
||||
break;
|
||||
}
|
||||
|
||||
await Bites.insert(insert);
|
||||
|
||||
const bite = await Bites.findOneOrFail({
|
||||
where: { id },
|
||||
relations: ["targetUser", "targetBite"],
|
||||
});
|
||||
|
||||
let deliverTarget: User;
|
||||
|
||||
switch (targetType) {
|
||||
case "user":
|
||||
deliverTarget = bite.targetUser!;
|
||||
break;
|
||||
case "bite":
|
||||
await Bites.update({ id: bite.targetBiteId! }, { replied: true });
|
||||
deliverTarget =
|
||||
bite.targetBite!.user ??
|
||||
(await Users.findOneByOrFail({ id: bite.targetBite!.userId }));
|
||||
break;
|
||||
}
|
||||
|
||||
if (Users.isLocalUser(sender) && Users.isRemoteUser(deliverTarget)) {
|
||||
await deliverToUser(
|
||||
sender,
|
||||
renderActivity(await renderBite(bite)),
|
||||
deliverTarget,
|
||||
);
|
||||
}
|
||||
|
||||
if (Users.isLocalUser(deliverTarget)) {
|
||||
await createNotification(deliverTarget.id, "bite", {
|
||||
notifierId: sender.id,
|
||||
biteId: bite.id,
|
||||
});
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
|
@ -25,7 +25,7 @@ export async function createNotification(
|
|||
|
||||
if (
|
||||
data.notifierId &&
|
||||
["mention", "reply", "renote", "quote", "reaction"].includes(type)
|
||||
["mention", "reply", "renote", "quote", "reaction", "bite"].includes(type)
|
||||
) {
|
||||
const notifier = await Users.findOneBy({ id: data.notifierId });
|
||||
// suppress if the notifier does not exist or is silenced.
|
||||
|
|
|
@ -35,7 +35,7 @@ export async function addPinned(
|
|||
|
||||
const pinings = await UserNotePinings.findBy({ userId: user.id });
|
||||
|
||||
if (pinings.length >= 5) {
|
||||
if (pinings.length >= config.pinLimit) {
|
||||
throw new IdentifiableError(
|
||||
"15a018eb-58e5-4da1-93be-330fcc5e4e1a",
|
||||
"You can not pin notes any more.",
|
||||
|
|
|
@ -11,6 +11,7 @@ export const notificationTypes = [
|
|||
"followRequestAccepted",
|
||||
"groupInvited",
|
||||
"app",
|
||||
"bite",
|
||||
] as const;
|
||||
|
||||
export const noteVisibilities = [
|
||||
|
|
124
packages/client/src/components/MkBiteButton.vue
Normal file
124
packages/client/src/components/MkBiteButton.vue
Normal file
|
@ -0,0 +1,124 @@
|
|||
<template>
|
||||
<button class="kpoogebi _button bite-button" :class="{
|
||||
full,
|
||||
large,
|
||||
wait,
|
||||
active: hasBittenBack,
|
||||
}" :disabled="wait" @click.stop="onClick" :aria-label="`bite ${user.name || user.username} back`">
|
||||
<span>{{ i18n.ts.biteBack }}</span><i class="ph-tooth ph-bold ph-lg"></i>
|
||||
</button>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import type * as Misskey from "iceshrimp-js";
|
||||
import * as os from "@/os";
|
||||
import { i18n } from "@/i18n";
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
user: Misskey.entities.UserLite,
|
||||
bite: Misskey.entities.Bite,
|
||||
full: boolean,
|
||||
large: boolean,
|
||||
}>(),
|
||||
{
|
||||
full: false,
|
||||
large: false
|
||||
},
|
||||
);
|
||||
|
||||
let wait = $ref(false);
|
||||
let hasBittenBack = $ref<boolean>(props.bite.replied);
|
||||
|
||||
async function onClick() {
|
||||
wait = true;
|
||||
|
||||
try {
|
||||
await os.api("bites/create", {
|
||||
targetType: "bite",
|
||||
targetId: props.bite.id,
|
||||
});
|
||||
hasBittenBack = true;
|
||||
} finally {
|
||||
wait = false;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.bite-button {
|
||||
position: relative;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-weight: bold;
|
||||
color: var(--accent);
|
||||
border: solid 1px var(--accent);
|
||||
padding: 0;
|
||||
font-size: 16px;
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
border-radius: 100px;
|
||||
background: var(--bg);
|
||||
vertical-align: middle;
|
||||
margin-left: 0.5em;
|
||||
|
||||
&.full {
|
||||
padding: 0.2em 0.7em;
|
||||
width: auto;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
&.large {
|
||||
font-size: 16px;
|
||||
height: 38px;
|
||||
padding: 0 12px 0 16px;
|
||||
}
|
||||
|
||||
&:not(.full) {
|
||||
width: 31px;
|
||||
|
||||
span {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
&:after {
|
||||
content: "";
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
top: -5px;
|
||||
right: -5px;
|
||||
bottom: -5px;
|
||||
left: -5px;
|
||||
border: 2px solid var(--focus);
|
||||
border-radius: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: var(--fgOnAccent);
|
||||
background: var(--accent);
|
||||
|
||||
&:hover {
|
||||
background: var(--accentLighten);
|
||||
border-color: var(--accentLighten);
|
||||
}
|
||||
|
||||
&:active {
|
||||
background: var(--accentDarken);
|
||||
border-color: var(--accentDarken);
|
||||
}
|
||||
}
|
||||
|
||||
&.wait {
|
||||
cursor: wait !important;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
>span {
|
||||
margin-right: 6px;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -222,6 +222,21 @@
|
|||
:hideMenu="true"
|
||||
/></div
|
||||
></span>
|
||||
<span
|
||||
v-if="notification.type === 'bite'"
|
||||
class="text"
|
||||
style="opacity: 0.7">{{
|
||||
notification.bite.targetType === 'user'
|
||||
? i18n.ts.bitYou
|
||||
: i18n.ts.bitYouBack
|
||||
}}
|
||||
<div v-if="full">
|
||||
<MkBiteButton
|
||||
:user="notification.user"
|
||||
:bite="notification.bite"
|
||||
:full="true"
|
||||
/></div
|
||||
></span>
|
||||
<span
|
||||
v-if="notification.type === 'followRequestAccepted'"
|
||||
class="text"
|
||||
|
@ -277,6 +292,7 @@ import { ref, onMounted, onUnmounted, watch } from "vue";
|
|||
import * as misskey from "iceshrimp-js";
|
||||
import XReactionIcon from "@/components/MkReactionIcon.vue";
|
||||
import MkFollowButton from "@/components/MkFollowButton.vue";
|
||||
import MkBiteButton from "@/components/MkBiteButton.vue";
|
||||
import XReactionTooltip from "@/components/MkReactionTooltip.vue";
|
||||
import { getNoteSummary } from "@/scripts/get-note-summary";
|
||||
import { notePage } from "@/filters/note";
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div v-if="instance.disableRegistration" style="margin-bottom: 1rem">
|
||||
<p>{{ i18n.ts.signupsDisabled }}</p>
|
||||
<a href="https://iceshrimp.dev/join">
|
||||
<a href="https://fedidb.org/software/iceshrimp">
|
||||
<MkButton rounded gradate
|
||||
>{{ i18n.ts.findOtherInstance }}
|
||||
</MkButton>
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
@load="iconLoaded"
|
||||
@click="gravity"
|
||||
/>
|
||||
<div class="misskey">Iceshrimp</div>
|
||||
<div class="misskey">jormungandr-bite</div>
|
||||
<div class="version">v{{ version }}</div>
|
||||
<span
|
||||
v-for="emoji in easterEggEmojis"
|
||||
|
@ -57,7 +57,7 @@
|
|||
<FormSection>
|
||||
<div class="_formLinksGrid">
|
||||
<FormLink
|
||||
to="https://iceshrimp.dev/iceshrimp/iceshrimp"
|
||||
to="https://iceshrimp.dev/limepotato/jormungandr-bite"
|
||||
external
|
||||
>
|
||||
<template #icon
|
||||
|
|
|
@ -32,12 +32,6 @@
|
|||
i18n.ts.configure
|
||||
}}</MkA></MkInfo
|
||||
>
|
||||
<MkInfo v-if="noEmailServer" warn class="info"
|
||||
>{{ i18n.ts.noEmailServerWarning }}
|
||||
<MkA to="/admin/email-settings" class="_link">{{
|
||||
i18n.ts.configure
|
||||
}}</MkA></MkInfo
|
||||
>
|
||||
<MkInfo v-if="updateAvailable" warn class="info"
|
||||
>{{ i18n.ts.updateAvailable }}
|
||||
<a
|
||||
|
@ -113,7 +107,6 @@ let noBotProtection =
|
|||
!instance.disableRegistration &&
|
||||
!instance.enableHcaptcha &&
|
||||
!instance.enableRecaptcha;
|
||||
let noEmailServer = !instance.enableEmail;
|
||||
let thereIsUnresolvedAbuseReport = $ref(false);
|
||||
let updateAvailable = $ref(false);
|
||||
let currentPage = $computed(() => router.currentRef.value.child);
|
||||
|
|
|
@ -59,6 +59,13 @@ export function getUserMenu(user, router: Router = mainRouter) {
|
|||
});
|
||||
}
|
||||
|
||||
async function bite() {
|
||||
await os.apiWithDialog("bites/create", {
|
||||
targetType: "user",
|
||||
targetId: user.id,
|
||||
});
|
||||
}
|
||||
|
||||
async function toggleMute() {
|
||||
if (user.isMuted) {
|
||||
os.apiWithDialog("mute/delete", {
|
||||
|
@ -310,6 +317,13 @@ export function getUserMenu(user, router: Router = mainRouter) {
|
|||
action: inviteGroup,
|
||||
}
|
||||
: undefined,
|
||||
meId !== user.id
|
||||
? {
|
||||
icon: "ph-tooth ph-bold ph-lg",
|
||||
text: i18n.ts.bite,
|
||||
action: bite,
|
||||
}
|
||||
: undefined,
|
||||
null,
|
||||
{
|
||||
icon: user.isRenoteMuted
|
||||
|
|
|
@ -28,6 +28,20 @@ export const getBuiltinThemes = () =>
|
|||
"l-light",
|
||||
"l-nord",
|
||||
"l-gruvbox",
|
||||
"l-catppuccin-latte-blue",
|
||||
"l-catppuccin-latte-flamingo",
|
||||
"l-catppuccin-latte-green",
|
||||
"l-catppuccin-latte-lavender",
|
||||
"l-catppuccin-latte-maroon",
|
||||
"l-catppuccin-latte-mauve",
|
||||
"l-catppuccin-latte-peach",
|
||||
"l-catppuccin-latte-pink",
|
||||
"l-catppuccin-latte-red",
|
||||
"l-catppuccin-latte-rosewater",
|
||||
"l-catppuccin-latte-sapphire",
|
||||
"l-catppuccin-latte-sky",
|
||||
"l-catppuccin-latte-teal",
|
||||
"l-catppuccin-latte-yellow",
|
||||
"l-coffee",
|
||||
"l-apricot",
|
||||
"l-rainy",
|
||||
|
@ -42,8 +56,48 @@ export const getBuiltinThemes = () =>
|
|||
"d-dark",
|
||||
"d-nord",
|
||||
"d-gruvbox",
|
||||
"d-catppuccin-frappe",
|
||||
"d-catppuccin-mocha",
|
||||
"d-catppuccin-frappe-blue",
|
||||
"d-catppuccin-frappe-flamingo",
|
||||
"d-catppuccin-frappe-green",
|
||||
"d-catppuccin-frappe-lavender",
|
||||
"d-catppuccin-frappe-maroon",
|
||||
"d-catppuccin-frappe-mauve",
|
||||
"d-catppuccin-frappe-peach",
|
||||
"d-catppuccin-frappe-pink",
|
||||
"d-catppuccin-frappe-red",
|
||||
"d-catppuccin-frappe-rosewater",
|
||||
"d-catppuccin-frappe-sapphire",
|
||||
"d-catppuccin-frappe-sky",
|
||||
"d-catppuccin-frappe-teal",
|
||||
"d-catppuccin-frappe-yellow",
|
||||
"d-catppuccin-mocha-blue",
|
||||
"d-catppuccin-mocha-flamingo",
|
||||
"d-catppuccin-mocha-green",
|
||||
"d-catppuccin-mocha-lavender",
|
||||
"d-catppuccin-mocha-maroon",
|
||||
"d-catppuccin-mocha-mauve",
|
||||
"d-catppuccin-mocha-peach",
|
||||
"d-catppuccin-mocha-pink",
|
||||
"d-catppuccin-mocha-red",
|
||||
"d-catppuccin-mocha-rosewater",
|
||||
"d-catppuccin-mocha-sapphire",
|
||||
"d-catppuccin-mocha-sky",
|
||||
"d-catppuccin-mocha-teal",
|
||||
"d-catppuccin-mocha-yellow",
|
||||
"d-catppuccin-macchiato-blue",
|
||||
"d-catppuccin-macchiato-flamingo",
|
||||
"d-catppuccin-macchiato-green",
|
||||
"d-catppuccin-macchiato-lavender",
|
||||
"d-catppuccin-macchiato-maroon",
|
||||
"d-catppuccin-macchiato-mauve",
|
||||
"d-catppuccin-macchiato-peach",
|
||||
"d-catppuccin-macchiato-pink",
|
||||
"d-catppuccin-macchiato-red",
|
||||
"d-catppuccin-macchiato-rosewater",
|
||||
"d-catppuccin-macchiato-sapphire",
|
||||
"d-catppuccin-macchiato-sky",
|
||||
"d-catppuccin-macchiato-teal",
|
||||
"d-catppuccin-macchiato-yellow",
|
||||
"d-persimmon",
|
||||
"d-astro",
|
||||
"d-future",
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
{id: '4ccfbe22-290d-4620-97f1-f8fe2accec89',base: 'dark',name: 'Catppuccin frappe blue',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#8caaee',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: 'ffcd3328-5c57-4ca3-9dac-4580cbf7742f',base: 'dark',name: 'Catppuccin frappe flamingo',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#eebebe',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '491fc957-6f96-4389-9e8e-c2b681a70a74',base: 'dark',name: 'Catppuccin frappe green',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#a6d189',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '2832ab96-5455-42eb-9ef2-db5ab2789acb',base: 'dark',name: 'Catppuccin frappe lavender',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#babbf1',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '397a5a63-e1c4-4716-8342-d527f94bde66',base: 'dark',name: 'Catppuccin frappe maroon',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#ea999c',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '21710e04-252c-4e9b-bed1-eab88a698e37',base: 'dark',name: 'Catppuccin frappe mauve',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#ca9ee6',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '862b065b-d682-439c-bfeb-c934edf12e10',base: 'dark',name: 'Catppuccin frappe peach',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#ef9f76',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: 'a2b4c735-2238-425d-89b0-36d1c774c21d',base: 'dark',name: 'Catppuccin frappe pink',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#f4b8e4',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
1
packages/client/src/themes/d-catppuccin-frappe-red.json5
Normal file
1
packages/client/src/themes/d-catppuccin-frappe-red.json5
Normal file
|
@ -0,0 +1 @@
|
|||
{id: '96e32447-3080-4929-81f7-5a7ee9d30e40',base: 'dark',name: 'Catppuccin frappe red',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#e78284',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '8ca43f5a-f154-4a26-9417-f087c095ddb0',base: 'dark',name: 'Catppuccin frappe rosewater',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#f2d5cf',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: 'fc3b8b09-7f73-40cd-84f0-7438e3b06188',base: 'dark',name: 'Catppuccin frappe sapphire',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#85c1dc',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
1
packages/client/src/themes/d-catppuccin-frappe-sky.json5
Normal file
1
packages/client/src/themes/d-catppuccin-frappe-sky.json5
Normal file
|
@ -0,0 +1 @@
|
|||
{id: '7930bd84-3d9f-4603-8ab2-8a6f3849aef7',base: 'dark',name: 'Catppuccin frappe sky',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#99d1db',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '556d5cbd-3fc6-47d8-b8f2-33d012ccca47',base: 'dark',name: 'Catppuccin frappe teal',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#81c8be',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '1f75a8cf-cace-4974-956a-7186b9d08566',base: 'dark',name: 'Catppuccin frappe yellow',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#232634',fg: '#c6d0f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#51576d',cwFg: '#b5bfe2',link: '#8caaee',warn: '#ef9f76',badge: '#8caaee',error: '#e78284',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#e5c890',header: ':alpha<0.7<@panel',infoBg: '#414559',infoFg: '#a5adce',renote: '#8caaee',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#85c1dc',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6d189',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#626880',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6d189',codeString: '#ef9f76',fgOnAccent: '#303446',infoWarnBg: '#414559',infoWarnFg: '#b5bfe2',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#737994',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -1,88 +0,0 @@
|
|||
{
|
||||
id: 'ffcd3328-5c57-4ca3-9dac-4580cbf7742f',
|
||||
base: 'dark',
|
||||
name: 'Catppuccin frappe',
|
||||
props: {
|
||||
interactiveElementHovered: 'rgba(255, 255, 255, 0.05)',
|
||||
messagingIsNotMe: 'rgba(255, 255, 255, 0.1)',
|
||||
postFormButtonHoverBg: 'rgba(255, 255, 255, 0.05)',
|
||||
accentLightenLess: ':lighten<5<@accent',
|
||||
accentDarkenLess: ':darken<5<@accent',
|
||||
bg: '#232634',
|
||||
fg: '#c6d0f5',
|
||||
calendarInfoMeterBg: 'rgba(0, 0, 0, 0.3)',
|
||||
dividerHovered: 'rgba(255, 255, 255, 0.15)',
|
||||
navBgTransparent: ':alpha<0.5<@navBg',
|
||||
panelFade: ':alpha<0<@panel',
|
||||
panelTransparent: ':alpha<0.7<@panel',
|
||||
cwBg: '#51576d',
|
||||
cwFg: '#b5bfe2',
|
||||
link: '#8caaee',
|
||||
warn: '#ef9f76',
|
||||
badge: '#8caaee',
|
||||
error: '#e78284',
|
||||
focus: ':alpha<0.3<@accent',
|
||||
navBg: '@panel',
|
||||
navFg: '@fg',
|
||||
panel: ':lighten<3<@bg',
|
||||
popup: ':lighten<3<@panel',
|
||||
accent: '#eebebe',
|
||||
header: ':alpha<0.7<@panel',
|
||||
infoBg: '#414559',
|
||||
infoFg: '#a5adce',
|
||||
renote: '#8caaee',
|
||||
shadow: 'rgba(0, 0, 0, 0.3)',
|
||||
divider: 'rgba(255, 255, 255, 0.1)',
|
||||
hashtag: '#85c1dc',
|
||||
mention: '@accent',
|
||||
modalBg: 'rgba(0, 0, 0, 0.5)',
|
||||
success: '#a6d189',
|
||||
buttonBg: 'rgba(255, 255, 255, 0.05)',
|
||||
switchBg: 'rgba(255, 255, 255, 0.15)',
|
||||
acrylicBg: ':alpha<0.5<@bg',
|
||||
cwHoverBg: '#626880',
|
||||
indicator: '@accent',
|
||||
mentionMe: '@mention',
|
||||
messageBg: '@bg',
|
||||
navActive: '@accent',
|
||||
accentedBg: ':alpha<0.15<@accent',
|
||||
codeNumber: '#a6d189',
|
||||
codeString: '#ef9f76',
|
||||
fgOnAccent: '#303446',
|
||||
infoWarnBg: '#414559',
|
||||
infoWarnFg: '#b5bfe2',
|
||||
navHoverFg: ':lighten<17<@fg',
|
||||
swutchOnBg: '@accentedBg',
|
||||
swutchOnFg: '@accent',
|
||||
codeBoolean: '@accent',
|
||||
dateLabelFg: '@fg',
|
||||
deckDivider: '#737994',
|
||||
inputBorder: 'rgba(255, 255, 255, 0.1)',
|
||||
panelBorder: 'solid 1px var(--divider)',
|
||||
swutchOffBg: 'rgba(255, 255, 255, 0.1)',
|
||||
swutchOffFg: '@fg',
|
||||
accentDarken: ':darken<10<@accent',
|
||||
acrylicPanel: ':alpha<0.5<@panel',
|
||||
navIndicator: '@indicator',
|
||||
windowHeader: ':alpha<0.85<@panel',
|
||||
accentLighten: ':lighten<10<@accent',
|
||||
buttonHoverBg: 'rgba(255, 255, 255, 0.1)',
|
||||
driveFolderBg: ':alpha<0.3<@accent',
|
||||
fgHighlighted: ':lighten<3<@fg',
|
||||
fgTransparent: ':alpha<0.5<@fg',
|
||||
panelHeaderBg: ':lighten<3<@panel',
|
||||
panelHeaderFg: '@fg',
|
||||
buttonGradateA: '@accent',
|
||||
buttonGradateB: ':hue<20<@accent',
|
||||
htmlThemeColor: '@bg',
|
||||
panelHighlight: ':lighten<3<@panel',
|
||||
listItemHoverBg: 'rgba(255, 255, 255, 0.03)',
|
||||
scrollbarHandle: 'rgba(255, 255, 255, 0.2)',
|
||||
inputBorderHover: 'rgba(255, 255, 255, 0.2)',
|
||||
wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',
|
||||
fgTransparentWeak: ':alpha<0.75<@fg',
|
||||
panelHeaderDivider: 'rgba(0, 0, 0, 0)',
|
||||
scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',
|
||||
},
|
||||
author: 'somebody ¯_(ツ)_/¯',
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
{id: 'b008cd09-7ed5-4b88-adcc-c5a6c27406a6',base: 'dark',name: 'Catppuccin macchiato blue',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#8aadf4',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '6365da57-9c82-4a11-b064-d2b72c1e4962',base: 'dark',name: 'Catppuccin macchiato flamingo',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#f0c6c6',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '9c1ad601-df61-4135-8598-a5bfbd8560b6',base: 'dark',name: 'Catppuccin macchiato green',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#a6da95',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: 'c42a0fb1-6142-4c97-93c6-8c26bc9c2fd1',base: 'dark',name: 'Catppuccin macchiato lavender',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#b7bdf8',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '500474c0-6f84-42bc-befd-48a6bb475ab3',base: 'dark',name: 'Catppuccin macchiato maroon',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#ee99a0',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '0dec6f16-afd8-486e-80dd-cb6dc4545305',base: 'dark',name: 'Catppuccin macchiato mauve',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#c6a0f6',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '4987d5af-9e73-4356-a317-a55046c8eeeb',base: 'dark',name: 'Catppuccin macchiato peach',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#f5a97f',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '415902ef-0e56-4797-b9af-78716d7aa98d',base: 'dark',name: 'Catppuccin macchiato pink',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#f5bde6',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: 'da38ecbe-d6b9-4397-8697-a9fb136d4686',base: 'dark',name: 'Catppuccin macchiato red',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#ed8796',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: 'e3af403a-f2f9-4de0-b55e-e12afdab62fb',base: 'dark',name: 'Catppuccin macchiato rosewater',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#f4dbd6',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: 'c92a9970-2a68-403c-9d4e-af8537f8fdca',base: 'dark',name: 'Catppuccin macchiato sapphire',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#7dc4e4',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '85d9bbcf-02fc-4c1c-9dcd-2069b3335c50',base: 'dark',name: 'Catppuccin macchiato sky',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#91d7e3',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: 'edf87ab0-a47b-4dfe-8092-8d39c72d4a84',base: 'dark',name: 'Catppuccin macchiato teal',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#8bd5ca',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '179b5cce-97e7-46fc-b2dd-d62ee3e6037a',base: 'dark',name: 'Catppuccin macchiato yellow',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#181926',fg: '#cad3f5',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#494d64',cwFg: '#b8c0e0',link: '#8aadf4',warn: '#f5a97f',badge: '#8aadf4',error: '#ed8796',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#eed49f',header: ':alpha<0.7<@panel',infoBg: '#363a4f',infoFg: '#a5adcb',renote: '#8aadf4',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#7dc4e4',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6da95',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#5b6078',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6da95',codeString: '#f5a97f',fgOnAccent: '#24273a',infoWarnBg: '#363a4f',infoWarnFg: '#b8c0e0',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6e738d',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
1
packages/client/src/themes/d-catppuccin-mocha-blue.json5
Normal file
1
packages/client/src/themes/d-catppuccin-mocha-blue.json5
Normal file
|
@ -0,0 +1 @@
|
|||
{id: 'f39f6217-a594-4dbd-9b0e-b001a0da383b',base: 'dark',name: 'Catppuccin mocha blue',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#11111b',fg: '#cdd6f4',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#45475a',cwFg: '#bac2de',link: '#89b4fa',warn: '#fab387',badge: '#89b4fa',error: '#f38ba8',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#89b4fa',header: ':alpha<0.7<@panel',infoBg: '#313244',infoFg: '#a6adc8',renote: '#89b4fa',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#74c7ec',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6e3a1',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#585b70',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6e3a1',codeString: '#fab387',fgOnAccent: '#1e1e2e',infoWarnBg: '#313244',infoWarnFg: '#bac2de',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6c7086',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: 'd413f41f-a489-48be-9e20-3532ffbb4363',base: 'dark',name: 'Catppuccin mocha flamingo',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#11111b',fg: '#cdd6f4',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#45475a',cwFg: '#bac2de',link: '#89b4fa',warn: '#fab387',badge: '#89b4fa',error: '#f38ba8',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#f2cdcd',header: ':alpha<0.7<@panel',infoBg: '#313244',infoFg: '#a6adc8',renote: '#89b4fa',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#74c7ec',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6e3a1',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#585b70',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6e3a1',codeString: '#fab387',fgOnAccent: '#1e1e2e',infoWarnBg: '#313244',infoWarnFg: '#bac2de',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6c7086',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '11bb1ab5-b7b9-4060-b0fe-5083e767e87d',base: 'dark',name: 'Catppuccin mocha green',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#11111b',fg: '#cdd6f4',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#45475a',cwFg: '#bac2de',link: '#89b4fa',warn: '#fab387',badge: '#89b4fa',error: '#f38ba8',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#a6e3a1',header: ':alpha<0.7<@panel',infoBg: '#313244',infoFg: '#a6adc8',renote: '#89b4fa',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#74c7ec',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6e3a1',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#585b70',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6e3a1',codeString: '#fab387',fgOnAccent: '#1e1e2e',infoWarnBg: '#313244',infoWarnFg: '#bac2de',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6c7086',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: 'f69c50ff-837c-48f5-803b-c94efaea433f',base: 'dark',name: 'Catppuccin mocha lavender',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#11111b',fg: '#cdd6f4',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#45475a',cwFg: '#bac2de',link: '#89b4fa',warn: '#fab387',badge: '#89b4fa',error: '#f38ba8',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#b4befe',header: ':alpha<0.7<@panel',infoBg: '#313244',infoFg: '#a6adc8',renote: '#89b4fa',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#74c7ec',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6e3a1',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#585b70',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6e3a1',codeString: '#fab387',fgOnAccent: '#1e1e2e',infoWarnBg: '#313244',infoWarnFg: '#bac2de',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6c7086',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '105a5ad5-3fb0-4db2-a7ea-b90cd21cd338',base: 'dark',name: 'Catppuccin mocha maroon',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#11111b',fg: '#cdd6f4',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#45475a',cwFg: '#bac2de',link: '#89b4fa',warn: '#fab387',badge: '#89b4fa',error: '#f38ba8',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#eba0ac',header: ':alpha<0.7<@panel',infoBg: '#313244',infoFg: '#a6adc8',renote: '#89b4fa',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#74c7ec',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6e3a1',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#585b70',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6e3a1',codeString: '#fab387',fgOnAccent: '#1e1e2e',infoWarnBg: '#313244',infoWarnFg: '#bac2de',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6c7086',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: 'a05d4ae9-d3ae-4973-8796-e4fa4a2187e3',base: 'dark',name: 'Catppuccin mocha mauve',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#11111b',fg: '#cdd6f4',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#45475a',cwFg: '#bac2de',link: '#89b4fa',warn: '#fab387',badge: '#89b4fa',error: '#f38ba8',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#cba6f7',header: ':alpha<0.7<@panel',infoBg: '#313244',infoFg: '#a6adc8',renote: '#89b4fa',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#74c7ec',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6e3a1',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#585b70',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6e3a1',codeString: '#fab387',fgOnAccent: '#1e1e2e',infoWarnBg: '#313244',infoWarnFg: '#bac2de',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6c7086',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
|
@ -0,0 +1 @@
|
|||
{id: '27eb675d-ec95-4834-88a7-defa3742860a',base: 'dark',name: 'Catppuccin mocha peach',props: {X2: ':darken<2<@panel',X3: 'rgba(255, 255, 255, 0.05)',X4: 'rgba(255, 255, 255, 0.1)',X5: 'rgba(255, 255, 255, 0.05)',X6: 'rgba(255, 255, 255, 0.15)',X7: 'rgba(255, 255, 255, 0.05)',X8: ':lighten<5<@accent',X9: ':darken<5<@accent',bg: '#11111b',fg: '#cdd6f4',X10: ':alpha<0.4<@accent',X11: 'rgba(0, 0, 0, 0.3)',X12: 'rgba(255, 255, 255, 0.1)',X13: 'rgba(255, 255, 255, 0.15)',X14: ':alpha<0.5<@navBg',X15: ':alpha<0<@panel',X16: ':alpha<0.7<@panel',X17: ':alpha<0.8<@bg',cwBg: '#45475a',cwFg: '#bac2de',link: '#89b4fa',warn: '#fab387',badge: '#89b4fa',error: '#f38ba8',focus: ':alpha<0.3<@accent',navBg: '@panel',navFg: '@fg',panel: ':lighten<3<@bg',popup: ':lighten<3<@panel',accent: '#fab387',header: ':alpha<0.7<@panel',infoBg: '#313244',infoFg: '#a6adc8',renote: '#89b4fa',shadow: 'rgba(0, 0, 0, 0.3)',divider: 'rgba(255, 255, 255, 0.1)',hashtag: '#74c7ec',mention: '@accent',modalBg: 'rgba(0, 0, 0, 0.5)',success: '#a6e3a1',buttonBg: 'rgba(255, 255, 255, 0.05)',switchBg: 'rgba(255, 255, 255, 0.15)',acrylicBg: ':alpha<0.5<@bg',cwHoverBg: '#585b70',indicator: '@accent',mentionMe: '@mention',messageBg: '@bg',navActive: '@accent',accentedBg: ':alpha<0.15<@accent',codeNumber: '#a6e3a1',codeString: '#fab387',fgOnAccent: '#1e1e2e',infoWarnBg: '#313244',infoWarnFg: '#bac2de',navHoverFg: ':lighten<17<@fg',switchOnBg: '@accentedBg',switchOnFg: '@accent',codeBoolean: '@accent',dateLabelFg: '@fg',deckDivider: '#6c7086',inputBorder: 'rgba(255, 255, 255, 0.1)',panelBorder: 'solid 1px var(--divider)',switchOffBg: 'rgba(255, 255, 255, 0.1)',switchOffFg: '@fg',accentDarken: ':darken<10<@accent',acrylicPanel: ':alpha<0.5<@panel',navIndicator: '@indicator',windowHeader: ':alpha<0.85<@panel',accentLighten: ':lighten<10<@accent',buttonHoverBg: 'rgba(255, 255, 255, 0.1)',driveFolderBg: ':alpha<0.3<@accent',fgHighlighted: ':lighten<3<@fg',fgTransparent: ':alpha<0.5<@fg',panelHeaderBg: ':lighten<3<@panel',panelHeaderFg: '@fg',buttonGradateA: '@accent',buttonGradateB: ':hue<20<@accent',htmlThemeColor: '@bg',panelHighlight: ':lighten<3<@panel',listItemHoverBg: 'rgba(255, 255, 255, 0.03)',scrollbarHandle: 'rgba(255, 255, 255, 0.2)',inputBorderHover: 'rgba(255, 255, 255, 0.2)',wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',fgTransparentWeak: ':alpha<0.75<@fg',panelHeaderDivider: 'rgba(0, 0, 0, 0)',scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',},author: 'somebody ¯\_(ツ)_/¯',}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue