Compare commits

..

40 commits

Author SHA1 Message Date
limepotato
cc098b1af8 Update limepot-CHANGELOG.md
Some checks failed
/ test-build (push) Has been cancelled
2024-06-20 23:01:43 +02:00
limepotato
01f66a4039 Update README.md 2024-06-20 23:01:43 +02:00
limepotato
55bb476ada Add limepot-CHANGELOG.md 2024-06-20 23:01:43 +02:00
limepotato
9ba71c86dc Update README.md 2024-06-20 23:01:43 +02:00
41337a0f1b bit 2024-06-20 23:01:43 +02:00
limepotato
e8a21fd579 Update README.md 2024-06-20 23:01:43 +02:00
aed654b219 a lil bit of clarity 2024-06-20 14:47:18 -06:00
13b6dc5e2d update README.md
Some checks are pending
/ test-build (push) Waiting to run
2024-06-18 00:49:39 -06:00
ff1eea6c3b update version 2024-06-18 00:48:35 -06:00
86633506f7 update .gitignore 2024-06-18 00:45:36 -06:00
ed290d74d7 fix pinLimit config 2024-06-18 00:44:41 -06:00
023b5897d4 fix status image config 2024-06-18 00:43:45 -06:00
02daa6b02a Fix find another server link 2024-06-18 00:38:13 -06:00
733fd1892a more todo 2024-06-18 00:32:33 -06:00
93a9a10c8a todo list 2024-06-18 00:30:26 -06:00
limepotato
f82c3fa928
revert ec098c059f
Some checks are pending
/ test-build (push) Waiting to run
revert more beeps so many beep
2024-06-18 01:37:43 +02:00
ec098c059f more beeps so many beep 2024-06-17 17:37:12 -06:00
be2ea8af29 full beep 2024-06-17 17:16:06 -06:00
6b6be527d4 update version 2024-06-17 13:43:10 -06:00
3ad4cbb5b5 Change post button to say beep 2024-06-17 13:41:10 -06:00
1e9a7096e1 withdrawal traumatize patch 2024-06-17 13:39:53 -06:00
35d88fa3af withdrawal yarn telemetry patch 2024-06-17 13:39:33 -06:00
989e30c6d9 withdrawal meow patch 2024-06-17 13:39:13 -06:00
1d0ff68688 withdrawal hide-federation patch 2024-06-17 13:38:56 -06:00
e93373d72c withdrawal robots patch 2024-06-17 13:38:18 -06:00
bebe68dab1 withdrawal silence-email patch 2024-06-17 13:38:03 -06:00
98f3f55371 withdrawal replacements patch 2024-06-17 13:02:29 -06:00
50eb66e375 enable menhera and pin limit by default 2024-06-17 12:21:45 -06:00
866a598aad ouroboros icons 2024-06-17 12:01:26 -06:00
941fc66512 update readme 2024-06-17 11:16:55 -06:00
a358ef5dc0 version 2024-06-17 10:52:46 -06:00
17532215ed menhera images 2024-06-17 10:48:37 -06:00
97c57405eb Proper catppuccin theme support 2024-06-17 10:47:11 -06:00
ecae6145a2 update docker example yml 2024-06-17 10:40:02 -06:00
ff4b51cd37 change default status code image location 2024-06-17 10:39:33 -06:00
a44a89276d make pinned post limit configurable 2024-06-17 10:37:56 -06:00
6c2131fdcc corepack 2024-06-17 10:25:26 -06:00
limepotato
4410989fa2
revert ba0e5eec93
revert ?
2024-06-17 18:18:03 +02:00
ba0e5eec93 ? 2024-06-17 10:15:54 -06:00
mia
cc4a0d3e58 apply patches 2024-04-29 07:55:26 -07:00
126 changed files with 1187 additions and 503 deletions

View file

@ -163,10 +163,14 @@ reservedUsernames: [
# cleanHeaders: false # cleanHeaders: false
# Status code images # Status code images
#images: images:
# info: '/twemoji/1f440.svg' info: '/static-assets/badges/info.png'
# notFound: '/twemoji/2049.svg' notFound: '/static-assets/badges/not-found.png'
# error: '/twemoji/1f480.svg' error: '/static-assets/badges/error.png'
# Pinned Post Limit
pinLimit: 5
# Search engine (MFM) # Search engine (MFM)
#searchEngine: 'https://duckduckgo.com/?q=' #searchEngine: 'https://duckduckgo.com/?q='

View file

@ -175,10 +175,13 @@ reservedUsernames: [
# cleanHeaders: false # cleanHeaders: false
# Status code images # Status code images
#images: images:
# info: '/twemoji/1f440.svg' info: '/static-assets/badges/info.png'
# notFound: '/twemoji/2049.svg' notFound: '/static-assets/badges/not-found.png'
# error: '/twemoji/1f480.svg' error: '/static-assets/badges/error.png'
# Pinned Post Limit
pinLimit: 5
# Search engine (MFM) # Search engine (MFM)
#searchEngine: 'https://duckduckgo.com/?q=' #searchEngine: 'https://duckduckgo.com/?q='

3
.gitignore vendored
View file

@ -1,3 +1,6 @@
# LimePot
run.sh
# Visual Studio Code # Visual Studio Code
/.vscode /.vscode
!/.vscode/extensions.json !/.vscode/extensions.json

BIN
.yarn/corepack.tgz (Stored with Git LFS)

Binary file not shown.

View file

@ -2,6 +2,8 @@ compressionLevel: mixed
enableGlobalCache: false enableGlobalCache: false
enableTelemetry: false
nodeLinker: pnp nodeLinker: pnp
npmScopes: npmScopes:

View file

@ -1,20 +1,29 @@
<p><img src="assets/logo.png" alt="Iceshrimp" width="400px"></p> # Jörmungandr
<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>
--- ---
> **Note** > **Note**
> This project is **not** inactive. > DO NOT USE THIS FORK, as I am dumbb and just a lil guy.
> >
> Most of our current development resources are going into the [rewrite](/iceshrimp/Iceshrimp.NET), to further our goal of increasing stability and performance. > 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.
>
> 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.
--- ---
- 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 - First-class Mastodon client API support
- Significantly improved database performance - Significantly improved database performance
- Options to prune cached remote media automatically - 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) - [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) - [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) - [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: - Documentation on installing (and updating) Iceshrimp using:
- [Binary packages](https://iceshrimp.dev/iceshrimp/packaging) - [Binary packages](https://iceshrimp.dev/iceshrimp/packaging)
- [Docker Compose](docs/docker-compose-install.md) - [Docker Compose](docs/docker-compose-install.md)

22
TODO.md Normal file
View 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
View 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

View file

@ -88,8 +88,8 @@ lists: "Lists"
listsDesc: "Lists let you create timelines with specified users. They can be accessed listsDesc: "Lists let you create timelines with specified users. They can be accessed
from the timelines page." from the timelines page."
noLists: "You don't have any lists" noLists: "You don't have any lists"
note: "Post" note: "Beep"
notes: "Posts" notes: "Beeps"
following: "Following" following: "Following"
followers: "Followers" followers: "Followers"
followsYou: "Follows you" followsYou: "Follows you"
@ -116,10 +116,10 @@ enterEmoji: "Enter an emoji"
renote: "Boost" renote: "Boost"
unrenote: "Take back boost" unrenote: "Take back boost"
renoted: "Boosted." renoted: "Boosted."
cantRenote: "This post can't be boosted." cantRenote: "This beep can't be boosted."
cantReRenote: "A boost can't be boosted." cantReRenote: "A boost can't be boosted."
quote: "Quote" quote: "Quote"
pinnedNote: "Pinned post" pinnedNote: "Pinned beep"
pinned: "Pin to profile" pinned: "Pin to profile"
you: "You" you: "You"
clickToShow: "Click to show" clickToShow: "Click to show"
@ -131,7 +131,7 @@ enableEmojiReactions: "Enable emoji reactions"
showEmojisInReactionNotifications: "Show emojis in reaction notifications" showEmojisInReactionNotifications: "Show emojis in reaction notifications"
reactionSetting: "Reactions to show in the reaction picker" reactionSetting: "Reactions to show in the reaction picker"
reactionSettingDescription2: "Drag to reorder, click to delete, press \"+\" to add." reactionSettingDescription2: "Drag to reorder, click to delete, press \"+\" to add."
rememberNoteVisibility: "Remember post visibility settings" rememberNoteVisibility: "Remember beep visibility settings"
attachCancel: "Remove attachment" attachCancel: "Remove attachment"
markAsSensitive: "Mark as sensitive" markAsSensitive: "Mark as sensitive"
unmarkAsSensitive: "Unmark 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? 😺" flagAsCat: "Are you a cat? 😺"
flagAsCatDescription: "You'll get cat ears and speak like a cat!" flagAsCatDescription: "You'll get cat ears and speak like a cat!"
flagSpeakAsCat: "Speak as 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" 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." in the timeline if turned on."
autoAcceptFollowed: "Automatically approve follow requests from users you're following" autoAcceptFollowed: "Automatically approve follow requests from users you're following"
addAccount: "Add account" addAccount: "Add account"
@ -225,7 +225,7 @@ instanceInfo: "Server Information"
statistics: "Statistics" statistics: "Statistics"
clearQueue: "Clear queue" clearQueue: "Clear queue"
clearQueueConfirmTitle: "Are you sure that you want to clear the 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." Usually this operation is not needed."
clearCachedFiles: "Clear cache" clearCachedFiles: "Clear cache"
clearCachedFilesConfirm: "Are you sure that you want to delete all cached remote files?" 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" noUsers: "There are no users"
noInstances: "There are no servers" noInstances: "There are no servers"
editProfile: "Edit profile" editProfile: "Edit profile"
noteDeleteConfirm: "Are you sure you want to delete this post?" noteDeleteConfirm: "Are you sure you want to delete this beep?"
pinLimitExceeded: "You cannot pin any more posts" pinLimitExceeded: "You cannot pin any more beeps"
intro: "Installation of Iceshrimp has been finished! Please create an admin user." intro: "Installation of Iceshrimp has been finished! Please create an admin user."
done: "Done" done: "Done"
processing: "Processing…" processing: "Processing…"
@ -397,7 +397,7 @@ pinnedPages: "Pinned Pages"
pinnedPagesDescription: "Enter the paths of the Pages you want to pin to the top page pinnedPagesDescription: "Enter the paths of the Pages you want to pin to the top page
of this server, separated by line breaks." of this server, separated by line breaks."
pinnedClipId: "ID of the clip to pin" pinnedClipId: "ID of the clip to pin"
pinnedNotes: "Pinned posts" pinnedNotes: "Pinned beeps"
hcaptcha: "hCaptcha" hcaptcha: "hCaptcha"
enableHcaptcha: "Enable hCaptcha" enableHcaptcha: "Enable hCaptcha"
hcaptchaSiteKey: "Site key" 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 them. Would you like to disable the other Captcha systems currently active? If you
would like them to stay enabled, press cancel." would like them to stay enabled, press cancel."
antennas: "Antennas" 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." be accessed from the timelines page."
manageAntennas: "Manage Antennas" manageAntennas: "Manage Antennas"
name: "Name" name: "Name"
@ -419,17 +419,17 @@ antennaKeywords: "Keywords to listen to"
antennaExcludeKeywords: "Keywords to exclude" antennaExcludeKeywords: "Keywords to exclude"
antennaKeywordsDescription: "Separate with spaces for an AND condition or with line antennaKeywordsDescription: "Separate with spaces for an AND condition or with line
breaks for an OR condition." breaks for an OR condition."
notifyAntenna: "Notify about new posts" notifyAntenna: "Notify about new beeps"
withFileAntenna: "Only posts with files" withFileAntenna: "Only beeps with files"
enableServiceworker: "Enable Push-Notifications for your Browser" enableServiceworker: "Enable Push-Notifications for your Browser"
antennaUsersDescription: "List one username per line" antennaUsersDescription: "List one username per line"
antennaInstancesDescription: "List one server host 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." in, which is not necessarily chronological."
caseSensitive: "Case sensitive" caseSensitive: "Case sensitive"
withReplies: "Include replies" withReplies: "Include replies"
connectedTo: "Following account(s) are connected" connectedTo: "Following account(s) are connected"
notesAndReplies: "Posts and replies" notesAndReplies: "Beeps and replies"
withFiles: "With attachments" withFiles: "With attachments"
silence: "Silence" silence: "Silence"
silenceConfirm: "Are you sure that you want to silence this user?" silenceConfirm: "Are you sure that you want to silence this user?"
@ -444,7 +444,7 @@ exploreFediverse: "Explore the Fediverse"
popularTags: "Popular tags" popularTags: "Popular tags"
userList: "Lists" userList: "Lists"
about: "About" about: "About"
aboutIceshrimp: "About Iceshrimp" aboutIceshrimp: "About Jörmungandr"
administrator: "Administrator" administrator: "Administrator"
token: "Token" token: "Token"
twoStepAuthentication: "Two-factor authentication" twoStepAuthentication: "Two-factor authentication"
@ -466,7 +466,7 @@ notFoundDescription: "No page corresponding to this URL could be found."
uploadFolder: "Default folder for uploads" uploadFolder: "Default folder for uploads"
cacheClear: "Clear cache" cacheClear: "Clear cache"
markAsReadAllNotifications: "Mark all notifications as read" markAsReadAllNotifications: "Mark all notifications as read"
markAsReadAllUnreadNotes: "Mark all posts as read" markAsReadAllUnreadNotes: "Mark all beeps as read"
markAsReadAllTalkMessages: "Mark all messages as read" markAsReadAllTalkMessages: "Mark all messages as read"
help: "Help" help: "Help"
inputMessageHere: "Enter message here" inputMessageHere: "Enter message here"
@ -487,7 +487,7 @@ text: "Text"
enable: "Enable" enable: "Enable"
next: "Next" next: "Next"
retype: "Enter again" retype: "Enter again"
noteOf: "Post by {user}" noteOf: "Beep by {user}"
inviteToGroup: "Invite to group" inviteToGroup: "Invite to group"
quoteAttached: "Quote" quoteAttached: "Quote"
quoteQuestion: "Append as quote?" quoteQuestion: "Append as quote?"
@ -546,8 +546,8 @@ accountSettings: "Account Settings"
promotion: "Promoted" promotion: "Promoted"
promote: "Promote" promote: "Promote"
numberOfDays: "Number of days" numberOfDays: "Number of days"
hideThisNote: "Hide this post" hideThisNote: "Hide this beep"
showFeaturedNotesInTimeline: "Show featured posts in timelines" showFeaturedNotesInTimeline: "Show featured beeps in timelines"
objectStorage: "Object Storage" objectStorage: "Object Storage"
useObjectStorage: "Use object storage" useObjectStorage: "Use object storage"
objectStorageBaseUrl: "Base URL" 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" objectStorageSetPublicRead: "Set \"public-read\" on upload"
serverLogs: "Server logs" serverLogs: "Server logs"
deleteAll: "Delete all" deleteAll: "Delete all"
showFixedPostForm: "Display the posting form at the top of the timeline" showFixedPostForm: "Display the beeping form at the top of the timeline"
newNoteRecived: "There are new posts" newNoteRecived: "There are new beeps"
sounds: "Sounds" sounds: "Sounds"
listen: "Listen" listen: "Listen"
none: "None" none: "None"
@ -604,8 +604,8 @@ scratchpadDescription: "The scratchpad provides an environment for AiScript expe
output: "Output" output: "Output"
script: "Script" script: "Script"
disablePagesScript: "Disable AiScript on Pages" disablePagesScript: "Disable AiScript on Pages"
expandOnNoteClick: "Open post on click" expandOnNoteClick: "Open beep on click"
expandOnNoteClickDesc: "If disabled, you can still open posts in the right-click menu expandOnNoteClickDesc: "If disabled, you can still open beeps in the right-click menu
or by clicking the timestamp." or by clicking the timestamp."
updateRemoteUser: "Update remote user information" updateRemoteUser: "Update remote user information"
deleteAllFiles: "Delete all files" deleteAllFiles: "Delete all files"
@ -627,11 +627,11 @@ addRelay: "Add Relay"
inboxUrl: "Inbox URL" inboxUrl: "Inbox URL"
addedRelays: "Added Relays" addedRelays: "Added Relays"
serviceworkerInfo: "Must be enabled for push notifications." serviceworkerInfo: "Must be enabled for push notifications."
deletedNote: "Deleted post" deletedNote: "Deleted beep"
invisibleNote: "Invisible post" invisibleNote: "Invisible beep"
enableInfiniteScroll: "Automatically load more" enableInfiniteScroll: "Automatically load more"
visibility: "Visiblility" 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" poll: "Poll"
useCw: "Hide content" useCw: "Hide content"
enablePlayer: "Open video player" enablePlayer: "Open video player"
@ -687,9 +687,9 @@ regexpErrorDescription: "An error occurred in the regular expression on line {li
instanceMute: "Server Mutes" instanceMute: "Server Mutes"
userSaysSomething: "{name} said something" userSaysSomething: "{name} said something"
userSaysSomethingReason: "{name} said {reason}" userSaysSomethingReason: "{name} said {reason}"
userSaysSomethingReasonReply: "{name} replied to a post containing {reason}" userSaysSomethingReasonReply: "{name} replied to a beep containing {reason}"
userSaysSomethingReasonRenote: "{name} boosted a post containing {reason}" userSaysSomethingReasonRenote: "{name} boosted a beep containing {reason}"
userSaysSomethingReasonQuote: "{name} quoted a post containing {reason}" userSaysSomethingReasonQuote: "{name} quoted a beep containing {reason}"
makeActive: "Activate" makeActive: "Activate"
display: "Display" display: "Display"
copy: "Copy" copy: "Copy"
@ -719,7 +719,7 @@ abuseReports: "Reports"
reportAbuse: "Report" reportAbuse: "Report"
reportAbuseOf: "Report {name}" reportAbuseOf: "Report {name}"
fillAbuseReportDescription: "Please fill in details regarding this report. If it is 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." abuseReported: "Your report has been sent. Thank you very much."
reporter: "Reporter" reporter: "Reporter"
reporteeOrigin: "Reportee Origin" reporteeOrigin: "Reportee Origin"
@ -733,7 +733,7 @@ openInNewTab: "Open in new tab"
openInSideView: "Open in side view" openInSideView: "Open in side view"
defaultNavigationBehaviour: "Default navigation behavior" defaultNavigationBehaviour: "Default navigation behavior"
editTheseSettingsMayBreakAccount: "Editing these settings may damage your account." editTheseSettingsMayBreakAccount: "Editing these settings may damage your account."
instanceTicker: "Server information of posts" instanceTicker: "Server information of beeps"
waitingFor: "Waiting for {x}" waitingFor: "Waiting for {x}"
random: "Random" random: "Random"
system: "System" system: "System"
@ -744,14 +744,14 @@ createNew: "Create new"
optional: "Optional" optional: "Optional"
createNewClip: "Create new clip" createNewClip: "Create new clip"
unclip: "Unclip" 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?" Do you want to remove it from this clip instead?"
public: "Public" public: "Public"
i18nInfo: "Iceshrimp is being translated into various languages by volunteers. You i18nInfo: "Iceshrimp is being translated into various languages by volunteers. You
can help at {link}." can help at {link}."
manageAccessTokens: "Manage access tokens" manageAccessTokens: "Manage access tokens"
accountInfo: "Account Info" accountInfo: "Account Info"
notesCount: "Number of posts" notesCount: "Number of beeps"
repliesCount: "Number of replies sent" repliesCount: "Number of replies sent"
renotesCount: "Number of boosts sent" renotesCount: "Number of boosts sent"
repliedCount: "Number of replies received" repliedCount: "Number of replies received"
@ -767,10 +767,10 @@ no: "No"
driveFilesCount: "Number of Drive files" driveFilesCount: "Number of Drive files"
driveUsage: "Drive space usage" driveUsage: "Drive space usage"
noCrawle: "Reject crawler indexing" 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." etc."
lockedAccountInfo: "Unless you set your post visiblity to \"Followers only\", your lockedAccountInfo: "Unless you set your beep visiblity to \"Followers only\", your
posts will be visible to anyone, even if you require followers to be manually approved." beeps will be visible to anyone, even if you require followers to be manually approved."
alwaysMarkSensitive: "Mark as sensitive by default" alwaysMarkSensitive: "Mark as sensitive by default"
loadRawImages: "Load original images instead of showing thumbnails" loadRawImages: "Load original images instead of showing thumbnails"
disableShowingAnimatedImages: "Don't play animated images" 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." link to complete verification."
notSet: "Not set" notSet: "Not set"
emailVerified: "Email has been verified" emailVerified: "Email has been verified"
noteFavoritesCount: "Number of bookmarked posts" noteFavoritesCount: "Number of bookmarked beeps"
pageLikesCount: "Number of liked Pages" pageLikesCount: "Number of liked Pages"
pageLikedCount: "Number of received Page likes" pageLikedCount: "Number of received Page likes"
contact: "Contact" contact: "Contact"
useSystemFont: "Use the system's default font" useSystemFont: "Use the system's default font"
clips: "Clips" clips: "Clips"
clipsDesc: "Clips are like share-able categorized bookmarks. You can create 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" experimentalFeatures: "Experimental features"
developer: "Developer" developer: "Developer"
makeExplorable: "Make account visible in \"Explore\"" makeExplorable: "Make account visible in \"Explore\""
makeExplorableDescription: "If you turn this off, your account will not show up in makeExplorableDescription: "If you turn this off, your account will not show up in
the \"Explore\" section." the \"Explore\" section."
showGapBetweenNotesInTimeline: "Show a gap between posts on the timeline" showGapBetweenNotesInTimeline: "Show a gap between beeps on the timeline"
duplicate: "Duplicate" duplicate: "Duplicate"
left: "Left" left: "Left"
center: "Center" center: "Center"
@ -803,7 +803,7 @@ showTitlebar: "Show title bar"
clearCache: "Clear cache" clearCache: "Clear cache"
onlineUsersCount: "{n} users are online" onlineUsersCount: "{n} users are online"
nUsers: "{n} Users" nUsers: "{n} Users"
nNotes: "{n} Posts" nNotes: "{n} Beeps"
sendErrorReports: "Send error reports" sendErrorReports: "Send error reports"
sendErrorReportsDescription: "When turned on, detailed error information will be shared sendErrorReportsDescription: "When turned on, detailed error information will be shared
with Iceshrimp when a problem occurs, helping to improve the quality of Iceshrimp.\n 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" fullView: "Full view"
quitFullView: "Exit full view" quitFullView: "Exit full view"
addDescription: "Add description" addDescription: "Add description"
userPagePinTip: "You can display posts here by selecting \"Pin to profile\" from the userPagePinTip: "You can display beeps here by selecting \"Pin to profile\" from the
menu of individual posts." menu of individual beeps."
notSpecifiedMentionWarning: "This post contains mentions of users not included as notSpecifiedMentionWarning: "This beep contains mentions of users not included as
recipients" recipients"
info: "About" info: "About"
userInfo: "User information" userInfo: "User information"
@ -876,11 +876,11 @@ switch: "Switch"
noMaintainerInformationWarning: "Maintainer information is not configured." noMaintainerInformationWarning: "Maintainer information is not configured."
noBotProtectionWarning: "Bot protection is not configured." noBotProtectionWarning: "Bot protection is not configured."
configure: "Configure" configure: "Configure"
postToGallery: "Create new gallery post" postToGallery: "Create new gallery beep"
gallery: "Gallery" gallery: "Gallery"
recentPosts: "Recent pages" recentPosts: "Recent pages"
popularPosts: "Popular pages" popularPosts: "Popular pages"
shareWithNote: "Share with post" shareWithNote: "Share with beep"
ads: "Advertisements" ads: "Advertisements"
expiration: "Deadline" expiration: "Deadline"
memo: "Memo" memo: "Memo"
@ -895,7 +895,7 @@ instanceSecurity: "Server Security"
secureModeInfo: "When requesting from other servers, do not send back without proof." secureModeInfo: "When requesting from other servers, do not send back without proof."
privateMode: "Private Mode" privateMode: "Private Mode"
privateModeInfo: "When enabled, only the listed servers can federate with your server. 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" allowedInstances: "Allowlisted Servers"
allowedInstancesDescription: "Hosts of servers to be allowed to federate with, each allowedInstancesDescription: "Hosts of servers to be allowed to federate with, each
separated by a new line (only applies in private mode)." 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 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 your account normally again.\nAlso, please ensure that you've set this current account
as the account you're moving from." 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" license: "License"
customKaTeXMacro: "Custom KaTeX macros" customKaTeXMacro: "Custom KaTeX macros"
customKaTeXMacroDescription: "Set up macros to write mathematical expressions easily! 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; lines are simply ignored. Only simple string substitution functions are supported;
advanced syntax, such as conditional branching, cannot be used here." advanced syntax, such as conditional branching, cannot be used here."
enableCustomKaTeXMacro: "Enable custom KaTeX macros" enableCustomKaTeXMacro: "Enable custom KaTeX macros"
noteId: "Post ID" noteId: "Beep ID"
signupsDisabled: "Signups on this server are currently disabled, but you can always 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 sign up at another server! If you have an invitation code for this server, please
enter it below." enter it below."
@ -1105,7 +1105,7 @@ apps: "Apps"
sendModMail: "Send Moderation Notice" sendModMail: "Send Moderation Notice"
preventAiLearning: "Prevent AI bot scraping" preventAiLearning: "Prevent AI bot scraping"
preventAiLearningDescription: "Request third-party AI language models not to study 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 noGraze: "Please disable the \"Graze for Mastodon\" browser extension, as it interferes
with Iceshrimp." with Iceshrimp."
silencedWarning: "This page is showing because these users are from servers your admin 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_1: "You have to be authenticated in order to use full text search."
searchNotLoggedIn_2: "However, you can search using hashtags, and search users." searchNotLoggedIn_2: "However, you can search using hashtags, and search users."
searchEmptyQuery: "Please enter a search term." searchEmptyQuery: "Please enter a search term."
bite: "Bite"
biteBack: "Bite back"
bittenBack: "Bitten back"
bitYou: "bit you"
bitYouBack: "bit you back"
_sensitiveMediaDetection: _sensitiveMediaDetection:
description: "Reduces the effort of server moderation through automatically recognizing description: "Reduces the effort of server moderation through automatically recognizing
@ -1184,7 +1189,7 @@ _forgotPassword:
the server administrator to reset your password instead." the server administrator to reset your password instead."
_gallery: _gallery:
my: "My Gallery" my: "My Gallery"
liked: "Liked Posts" liked: "Liked beeps"
like: "Like" like: "Like"
unlike: "Remove like" unlike: "Remove like"
_email: _email:
@ -1225,11 +1230,10 @@ _registry:
domain: "Domain" domain: "Domain"
createKey: "Create key" createKey: "Create key"
_aboutIceshrimp: _aboutIceshrimp:
about: "Iceshrimp is yet another fork of Misskey, bringing you no-nonsense fixes, 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."
features & improvements you actually want since 2023."
contributors: "Main contributors" contributors: "Main contributors"
allContributors: "All contributors" allContributors: "All contributors"
source: "Iceshrimp development" source: "Jörmungandr-bite development"
translation: "Translations" translation: "Translations"
chatroom: "Chat room" chatroom: "Chat room"
documentation: "Documentation" documentation: "Documentation"
@ -1258,7 +1262,7 @@ _mfm:
alwaysPlay: "Always autoplay all animated MFM" alwaysPlay: "Always autoplay all animated MFM"
cheatSheet: "MFM Cheatsheet" cheatSheet: "MFM Cheatsheet"
intro: "MFM is a markup language used on Iceshrimp, Misskey, Akkoma, and more that 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." syntax."
dummy: "Iceshrimp expands the world of the Fediverse" dummy: "Iceshrimp expands the world of the Fediverse"
advanced: "Advanced MFM" advanced: "Advanced MFM"
@ -1359,7 +1363,7 @@ _channel:
owned: "Owned" owned: "Owned"
following: "Followed" following: "Followed"
usersCount: "{n} Participants" usersCount: "{n} Participants"
notesCount: "{n} Posts" notesCount: "{n} Beeps"
nameAndDescription: "Name and description" nameAndDescription: "Name and description"
nameOnly: "Name only" nameOnly: "Name only"
_messaging: _messaging:
@ -1375,18 +1379,18 @@ _wordMute:
muteWordsDescription: "Separate with spaces for an AND condition or with line breaks muteWordsDescription: "Separate with spaces for an AND condition or with line breaks
for an OR condition." for an OR condition."
muteWordsDescription2: "Surround keywords with slashes to use regular expressions." muteWordsDescription2: "Surround keywords with slashes to use regular expressions."
softDescription: "Hide posts that fulfil the set conditions from the timeline." softDescription: "Hide beeps that fulfil the set conditions from the timeline."
hardDescription: "Prevents posts fulfilling the set conditions from being added hardDescription: "Prevents beeps fulfilling the set conditions from being added
to the timeline. In addition, these posts will not be added to the timeline even to the timeline. In addition, these beeps will not be added to the timeline even
if the conditions are changed." if the conditions are changed."
soft: "Soft" soft: "Soft"
hard: "Hard" hard: "Hard"
mutedNotes: "Muted posts" mutedNotes: "Muted beeps"
_instanceMute: _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." including those of users replying to a user from a muted server."
instanceMuteDescription2: "Separate with newlines" instanceMuteDescription2: "Separate with newlines"
title: "Hides posts from listed servers." title: "Hides beeps from listed servers."
heading: "List of servers to be muted" heading: "List of servers to be muted"
_theme: _theme:
explore: "Explore Themes" explore: "Explore Themes"
@ -1463,8 +1467,8 @@ _theme:
accentLighten: "Accent (Lightened)" accentLighten: "Accent (Lightened)"
fgHighlighted: "Highlighted Text" fgHighlighted: "Highlighted Text"
_sfx: _sfx:
note: "New post" note: "New beep"
noteMy: "Own post" noteMy: "Own beep"
notification: "Notifications" notification: "Notifications"
chat: "Chat" chat: "Chat"
chatBg: "Chat (Background)" chatBg: "Chat (Background)"
@ -1489,11 +1493,11 @@ _filters:
_dialog: _dialog:
title: "Search filter syntax" title: "Search filter syntax"
learnMore: "View filter syntax" learnMore: "View filter syntax"
wordFilters: "Filter by post text" wordFilters: "Filter by beep text"
inFilters: "Filter by bookmark and/or favorite status" inFilters: "Filter by bookmark and/or favorite status"
miscFilters: "Filter by following relationship and/or note type" miscFilters: "Filter by following relationship and/or note type"
userDomain: "Filter by author, mentioned users, reply user or instance domain" 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 exclusivity: "Note that the before: filter is exclusive, while the after: filter
is inclusive." is inclusive."
word: "word" word: "word"
@ -1515,8 +1519,8 @@ _filters:
inBookmarks: "Bookmarked" inBookmarks: "Bookmarked"
withFile: "Has attachment" withFile: "Has attachment"
fromDomain: "Specific instance only" fromDomain: "Specific instance only"
notesBefore: "Posts before" notesBefore: "Beeps before"
notesAfter: "Posts after" notesAfter: "Beeps after"
followingOnly: "Following only" followingOnly: "Following only"
followersOnly: "Followers only" followersOnly: "Followers only"
repliesOnly: "Replies 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!" 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_1: "First, please fill out your profile."
step2_2: "Providing some information about who you are will make it easier for others 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_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 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 following a couple accounts to get started.\nClick the plus circle on the top
right of a profile to follow them." right of a profile to follow them."
step4_1: "Let's get you out there." 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!\"" a simple \"Hello world!\""
step5_1: "Timelines, timelines everywhere!" step5_1: "Timelines, timelines everywhere!"
step5_2: "Your server has {timelines} different timelines enabled." 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." 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." on this server."
step5_5: "The Social {icon} timeline is a combination of the Home and Local timelines." 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." 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." connected server."
step6_1: "So, what is this place?" step6_1: "So, what is this place?"
step6_2: "Well, you didn't just join Iceshrimp. You joined a portal to the Fediverse, 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" "write:messaging": "Compose or delete chat messages"
"read:mutes": "View your list of muted users" "read:mutes": "View your list of muted users"
"write:mutes": "Edit 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" "read:notifications": "View your notifications"
"write:notifications": "Manage your notifications" "write:notifications": "Manage your notifications"
"read:reactions": "View your reactions" "read:reactions": "View your reactions"
@ -1618,8 +1622,8 @@ _permissions:
"write:channels": "Edit your channels" "write:channels": "Edit your channels"
"read:gallery": "View your gallery" "read:gallery": "View your gallery"
"write:gallery": "Edit your gallery" "write:gallery": "Edit your gallery"
"read:gallery-likes": "View 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 posts" "write:gallery-likes": "Edit your list of liked gallery beeps"
_auth: _auth:
shareAccess: "Would you like to authorize \"{name}\" to access this account?" shareAccess: "Would you like to authorize \"{name}\" to access this account?"
shareAccessAsk: "Are you sure you want to authorize this application to access your shareAccessAsk: "Are you sure you want to authorize this application to access your
@ -1633,12 +1637,12 @@ _auth:
signedInAs: "Signed in as" signedInAs: "Signed in as"
authRequired: "Authorization required" authRequired: "Authorization required"
_antennaSources: _antennaSources:
all: "All posts" all: "All beeps"
homeTimeline: "Posts from followed users" homeTimeline: "Beeps from followed users"
users: "Posts from specific users" users: "Beeps from specific users"
userList: "Posts from a specified list of users" userList: "Beeps from a specified list of users"
userGroup: "Posts from users in a specified group" userGroup: "Beeps from users in a specified group"
instances: "Posts from all users on an server" instances: "Beeps from all users on an server"
_weekday: _weekday:
sunday: "Sunday" sunday: "Sunday"
monday: "Monday" monday: "Monday"
@ -1662,7 +1666,7 @@ _widgets:
unixClock: "UNIX Clock" unixClock: "UNIX Clock"
federation: "Federation" federation: "Federation"
instanceCloud: "Server Cloud" instanceCloud: "Server Cloud"
postForm: "Posting Form" postForm: "Beeping Form"
slideshow: "Slideshow" slideshow: "Slideshow"
button: "Button" button: "Button"
onlineUsers: "Online Users" onlineUsers: "Online Users"
@ -1675,7 +1679,7 @@ _widgets:
chooseList: "Select a list" chooseList: "Select a list"
meiliStatus: "Server Status" meiliStatus: "Server Status"
meiliSize: "Index size" meiliSize: "Index size"
meiliIndexCount: "Indexed posts" meiliIndexCount: "Indexed beeps"
_cw: _cw:
hide: "Hide content" hide: "Hide content"
@ -1706,9 +1710,9 @@ _poll:
remainingSeconds: "{s} second(s) remaining" remainingSeconds: "{s} second(s) remaining"
_visibility: _visibility:
public: "Public" public: "Public"
publicDescription: "Your post will be visible in all public timelines" publicDescription: "Your beep will be visible in all public timelines"
home: "Unlisted" home: "Unlisted"
homeDescription: "Post to home timeline only" homeDescription: "Beep to home timeline only"
followers: "Followers" followers: "Followers"
followersDescription: "Make visible to your followers and mentioned users only" followersDescription: "Make visible to your followers and mentioned users only"
specified: "Direct" specified: "Direct"
@ -1716,9 +1720,9 @@ _visibility:
localOnly: "Local only" localOnly: "Local only"
localOnlyDescription: "Not visible to remote users" localOnlyDescription: "Not visible to remote users"
_postForm: _postForm:
replyPlaceholder: "Reply to this post…" replyPlaceholder: "Reply to this beep…"
quotePlaceholder: "Quote this post…" quotePlaceholder: "Quote this beep…"
channelPlaceholder: "Post to a channel…" channelPlaceholder: "Beep to a channel…"
_placeholders: _placeholders:
a: "What are you up to?" a: "What are you up to?"
b: "What's happening around you?" b: "What's happening around you?"
@ -1743,7 +1747,7 @@ _profile:
locationDescription: "If you enter your city first, it will display your local time locationDescription: "If you enter your city first, it will display your local time
to other users." to other users."
_exportOrImport: _exportOrImport:
allNotes: "All posts" allNotes: "All beeps"
followingList: "Followed users" followingList: "Followed users"
muteList: "Muted users" muteList: "Muted users"
blockingList: "Blocked users" blockingList: "Blocked users"
@ -1756,10 +1760,10 @@ _charts:
usersIncDec: "Difference in the number of users" usersIncDec: "Difference in the number of users"
usersTotal: "Total number of users" usersTotal: "Total number of users"
activeUsers: "Active users" activeUsers: "Active users"
notesIncDec: "Difference in the number of posts" notesIncDec: "Difference in the number of beeps"
localNotesIncDec: "Difference in the number of local posts" localNotesIncDec: "Difference in the number of local beeps"
remoteNotesIncDec: "Difference in the number of remote posts" remoteNotesIncDec: "Difference in the number of remote beeps"
notesTotal: "Total number of posts" notesTotal: "Total number of beeps"
filesIncDec: "Difference in the number of files" filesIncDec: "Difference in the number of files"
filesTotal: "Total number of files" filesTotal: "Total number of files"
storageUsageIncDec: "Difference in storage usage" storageUsageIncDec: "Difference in storage usage"
@ -1768,8 +1772,8 @@ _instanceCharts:
requests: "Requests" requests: "Requests"
users: "Difference in the number of users" users: "Difference in the number of users"
usersTotal: "Cumulative number of users" usersTotal: "Cumulative number of users"
notes: "Difference in the number of posts" notes: "Difference in the number of beeps"
notesTotal: "Cumulative number of posts" notesTotal: "Cumulative number of beeps"
ff: "Difference in the number of followed users / followers " ff: "Difference in the number of followed users / followers "
ffTotal: "Cumulative number of followed users / followers" ffTotal: "Cumulative number of followed users / followers"
cacheSize: "Difference in cache size" cacheSize: "Difference in cache size"
@ -1831,7 +1835,7 @@ _pages:
if: "If" if: "If"
_if: _if:
variable: "Variable" variable: "Variable"
post: "Posting form" post: "Beeping form"
_post: _post:
text: "Content" text: "Content"
attachCanvasImage: "Attach canvas image" attachCanvasImage: "Attach canvas image"
@ -1856,10 +1860,10 @@ _pages:
id: "Canvas ID" id: "Canvas ID"
width: "Width" width: "Width"
height: "Height" height: "Height"
note: "Embedded post" note: "Embedded beep"
_note: _note:
id: "Post ID" id: "Beep ID"
idDescription: "You can alternatively paste the post URL here." idDescription: "You can alternatively paste the beep URL here."
detailed: "Detailed view" detailed: "Detailed view"
switch: "Switch" switch: "Switch"
_switch: _switch:
@ -2092,7 +2096,7 @@ _notification:
pollEnded: "Poll results have become available" pollEnded: "Poll results have become available"
emptyPushNotificationMessage: "Push notifications have been updated" emptyPushNotificationMessage: "Push notifications have been updated"
reacted: "reacted to your post" reacted: "reacted to your post"
renoted: "boosted your post" renoted: "boosted your beep"
voted: "voted on your poll" voted: "voted on your poll"
_types: _types:
all: "All" all: "All"
@ -2108,6 +2112,7 @@ _notification:
followRequestAccepted: "Accepted follow requests" followRequestAccepted: "Accepted follow requests"
groupInvited: "Group invitations" groupInvited: "Group invitations"
app: "Notifications from linked apps" app: "Notifications from linked apps"
bite: "Bites"
_actions: _actions:
followBack: "followed you back" followBack: "followed you back"
reply: "Reply" reply: "Reply"
@ -2145,8 +2150,8 @@ _deck:
direct: "Direct messages" direct: "Direct messages"
_experiments: _experiments:
title: "Experiments" title: "Experiments"
enablePostImports: "Enable post imports" enablePostImports: "Enable beep imports"
postImportsCaption: "Allows users to import their posts from past Iceshrimp, Misskey, postImportsCaption: "Allows users to import their beeps from past Iceshrimp, Misskey,
Mastodon, Akkoma, and Pleroma accounts. It may cause slowdowns during load if Mastodon, Akkoma, and Pleroma accounts. It may cause slowdowns during load if
your queue is bottlenecked." your queue is bottlenecked."
_dialog: _dialog:
@ -2169,12 +2174,12 @@ _cwStyle:
modern: "Modern" modern: "Modern"
classic: "Classic (Misskey/Foundkey-like)" classic: "Classic (Misskey/Foundkey-like)"
alternative: "Alternative (Firefish-like)" alternative: "Alternative (Firefish-like)"
alwaysExpandCws: "Always expand posts with content warnings" alwaysExpandCws: "Always expand beeps with content warnings"
hideFromHome: "Hide from home timeline" hideFromHome: "Hide from home timeline"
_wellness: _wellness:
name: "Wellness" name: "Wellness"
description: "These settings allow you to adjust possibly addictive or anxiety-inducing description: "These settings allow you to adjust possibly addictive or anxiety-inducing
aspects of social media. Choose the settings that are ideal for you." aspects of social media. Choose the settings that are ideal for you."
newPostsButton: "Enable new posts alert button" newPostsButton: "Enable new beeps alert button"
newPostsGlowOpacity: "New posts glow opacity" newPostsGlowOpacity: "New beeps glow opacity"
immediacy: "Immediacy" immediacy: "Immediacy"

View file

@ -1,6 +1,6 @@
{ {
"name": "iceshrimp", "name": "iceshrimp",
"version": "2023.12.7", "version": "2023.12.7-jormungandr-bite.0.5.2",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://iceshrimp.dev/iceshrimp/iceshrimp.git" "url": "https://iceshrimp.dev/iceshrimp/iceshrimp.git"

Binary file not shown.

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

Binary file not shown.

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)

Binary file not shown.

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)

Binary file not shown.

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)

Binary file not shown.

Binary file not shown.

View file

@ -1,4 +1,37 @@
user-agent: * 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)

Binary file not shown.

View file

@ -54,6 +54,8 @@ export default function load() {
...config.images, ...config.images,
}; };
config.pinLimit = config.pinLimit || parseInt(process.env.pinLimit || "", 100);
config.htmlCache = { config.htmlCache = {
ttlSeconds: parseDuration(config.htmlCache?.ttl ?? '1h', 's')!, ttlSeconds: parseDuration(config.htmlCache?.ttl ?? '1h', 's')!,
prewarm: false, prewarm: false,

View file

@ -53,6 +53,8 @@ export type Source = {
info?: string; info?: string;
}; };
pinLimit?: number;
htmlCache?: { htmlCache?: {
ttl?: string; ttl?: string;
ttlSeconds?: number; ttlSeconds?: number;

View file

@ -77,6 +77,7 @@ import { OAuthToken } from "@/models/entities/oauth-token.js";
import { HtmlNoteCacheEntry } from "@/models/entities/html-note-cache-entry.js"; import { HtmlNoteCacheEntry } from "@/models/entities/html-note-cache-entry.js";
import { HtmlUserCacheEntry } from "@/models/entities/html-user-cache-entry.js"; import { HtmlUserCacheEntry } from "@/models/entities/html-user-cache-entry.js";
import { TypeORMLoggingOptions } from "@/config/types.js"; import { TypeORMLoggingOptions } from "@/config/types.js";
import { Bite } from "@/models/entities/bite.js";
const sqlLogger = dbLogger.createSubLogger("sql", "gray", false); const sqlLogger = dbLogger.createSubLogger("sql", "gray", false);
const isLogEnabled = (level: TypeORMLoggingOptions): boolean => { const isLogEnabled = (level: TypeORMLoggingOptions): boolean => {
@ -194,6 +195,7 @@ export const entities = [
OAuthToken, OAuthToken,
HtmlNoteCacheEntry, HtmlNoteCacheEntry,
HtmlUserCacheEntry, HtmlUserCacheEntry,
Bite,
...charts, ...charts,
]; ];

View file

@ -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"`);
}
}

View file

@ -31,6 +31,7 @@ import { packedQueueCountSchema } from "@/models/schema/queue.js";
import { packedGalleryPostSchema } from "@/models/schema/gallery-post.js"; import { packedGalleryPostSchema } from "@/models/schema/gallery-post.js";
import { packedEmojiSchema } from "@/models/schema/emoji.js"; import { packedEmojiSchema } from "@/models/schema/emoji.js";
import { packedNoteEdit } from "@/models/schema/note-edit.js"; import { packedNoteEdit } from "@/models/schema/note-edit.js";
import { packedBiteSchema } from "@/models/schema/bite.js";
export const refs = { export const refs = {
UserLite: packedUserLiteSchema, UserLite: packedUserLiteSchema,
@ -65,6 +66,7 @@ export const refs = {
FederationInstance: packedFederationInstanceSchema, FederationInstance: packedFederationInstanceSchema,
GalleryPost: packedGalleryPostSchema, GalleryPost: packedGalleryPostSchema,
Emoji: packedEmojiSchema, Emoji: packedEmojiSchema,
Bite: packedBiteSchema,
}; };
export type Packed<x extends keyof typeof refs> = SchemaType<typeof refs[x]>; export type Packed<x extends keyof typeof refs> = SchemaType<typeof refs[x]>;

View 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;
}

View file

@ -13,6 +13,7 @@ import { FollowRequest } from "./follow-request.js";
import { UserGroupInvitation } from "./user-group-invitation.js"; import { UserGroupInvitation } from "./user-group-invitation.js";
import { AccessToken } from "./access-token.js"; import { AccessToken } from "./access-token.js";
import { notificationTypes } from "@/types.js"; import { notificationTypes } from "@/types.js";
import { Bite } from "./bite.js";
@Entity() @Entity()
export class Notification { export class Notification {
@ -181,4 +182,12 @@ export class Notification {
}) })
@JoinColumn() @JoinColumn()
public appAccessToken: AccessToken | null; public appAccessToken: AccessToken | null;
@Column({ ...id(), nullable: true })
public biteId: Bite["id"] | null;
@ManyToOne((type) => Bite, {
onDelete: "CASCADE", nullable: true
})
public bite: Bite | null;
} }

View file

@ -70,6 +70,7 @@ import { OAuthToken } from "@/models/entities/oauth-token.js";
import { UserProfileRepository } from "@/models/repositories/user-profile.js"; import { UserProfileRepository } from "@/models/repositories/user-profile.js";
import { HtmlNoteCacheEntry } from "@/models/entities/html-note-cache-entry.js"; import { HtmlNoteCacheEntry } from "@/models/entities/html-note-cache-entry.js";
import { HtmlUserCacheEntry } from "@/models/entities/html-user-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 Announcements = db.getRepository(Announcement);
export const AnnouncementReads = db.getRepository(AnnouncementRead); export const AnnouncementReads = db.getRepository(AnnouncementRead);
@ -138,3 +139,4 @@ export const OAuthApps = db.getRepository(OAuthApp);
export const OAuthTokens = db.getRepository(OAuthToken); export const OAuthTokens = db.getRepository(OAuthToken);
export const HtmlUserCacheEntries = db.getRepository(HtmlUserCacheEntry); export const HtmlUserCacheEntries = db.getRepository(HtmlUserCacheEntry);
export const HtmlNoteCacheEntries = db.getRepository(HtmlNoteCacheEntry); export const HtmlNoteCacheEntries = db.getRepository(HtmlNoteCacheEntry);
export const Bites = BiteRespository;

View 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;
}
},
});

View file

@ -14,6 +14,7 @@ import {
UserGroupInvitations, UserGroupInvitations,
AccessTokens, AccessTokens,
NoteReactions, NoteReactions,
Bites,
} from "../index.js"; } from "../index.js";
export const NotificationRepository = db.getRepository(Notification).extend({ export const NotificationRepository = db.getRepository(Notification).extend({
@ -143,6 +144,11 @@ export const NotificationRepository = db.getRepository(Notification).extend({
icon: notification.customIcon || token?.iconUrl, icon: notification.customIcon || token?.iconUrl,
} }
: {}), : {}),
...(notification.type === "bite"
? {
bite: notification.bite ?? await Bites.findOneBy({ id: notification.biteId! }),
}
: {}),
}); });
}, },

View 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;

View file

@ -75,5 +75,11 @@ export const packedNotificationSchema = {
optional: true, optional: true,
nullable: true, nullable: true,
}, },
bite: {
type: "object",
ref: "Bite",
optional: true,
nullable: true,
},
}, },
} as const; } as const;

View file

@ -14,6 +14,7 @@ import { StatusError } from "@/misc/fetch.js";
import { shouldSkipInstance } from "@/misc/skipped-instances.js"; import { shouldSkipInstance } from "@/misc/skipped-instances.js";
import type { DeliverJobData } from "@/queue/types.js"; import type { DeliverJobData } from "@/queue/types.js";
import type Bull from "bull"; import type Bull from "bull";
import { patchText, shouldPatchText } from "@/remote/activitypub/renderer/note.js";
const logger = new Logger("deliver"); const logger = new Logger("deliver");
@ -30,10 +31,33 @@ export default async (job: Bull.Job<DeliverJobData>) => {
logger.debug(`delivering ${latest}`); 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); await request(job.data.user, job.data.to, job.data.content);
(async () => {
if (i === undefined) {
i = await registerOrFetchInstanceDoc(host);
}
// Update stats // Update stats
registerOrFetchInstanceDoc(host).then((i) => {
Instances.update(i.id, { Instances.update(i.id, {
latestRequestSentAt: new Date(), latestRequestSentAt: new Date(),
latestStatus: 200, latestStatus: 200,
@ -46,7 +70,7 @@ export default async (job: Bull.Job<DeliverJobData>) => {
instanceChart.requestSent(i.host, true); instanceChart.requestSent(i.host, true);
apRequestChart.deliverSucc(); apRequestChart.deliverSucc();
federationChart.deliverd(i.host, true); federationChart.deliverd(i.host, true);
}); })();
return "Success"; return "Success";
} catch (res) { } catch (res) {

View file

@ -28,24 +28,24 @@ export async function hasSignature(req: IncomingMessage): Promise<string> {
return required ? "supplied" : "unneeded"; 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(); const meta = await fetchMeta();
if (meta.secureMode || meta.privateMode) { if (meta.secureMode || meta.privateMode) {
if (req.headers.host !== config.host) return 400; if (req.headers.host !== config.host) return { status: 400 };
let signature; let signature;
try { try {
signature = httpSignature.parseRequest(req, { headers: ["(request-target)", "host", "date"] }); signature = httpSignature.parseRequest(req, { headers: ["(request-target)", "host", "date"] });
} catch (e) { } catch (e) {
return 401; return { status: 401 };
} }
const keyId = new URL(signature.keyId); const keyId = new URL(signature.keyId);
const host = toPuny(keyId.hostname); const host = toPuny(keyId.hostname);
if (await shouldBlockInstance(host, meta)) { if (await shouldBlockInstance(host, meta)) {
return 403; return { status: 403 };
} }
if ( if (
@ -54,13 +54,13 @@ export async function checkFetch(req: IncomingMessage): Promise<number> {
host !== config.domain && host !== config.domain &&
!meta.allowedHosts.includes(host) !meta.allowedHosts.includes(host)
) { ) {
return 403; return { status: 403 };
} }
const keyIdLower = signature.keyId.toLowerCase(); const keyIdLower = signature.keyId.toLowerCase();
if (keyIdLower.startsWith("acct:")) { if (keyIdLower.startsWith("acct:")) {
// Old keyId is no longer supported. // Old keyId is no longer supported.
return 401; return { status: 401 };
} }
const dbResolver = new DbResolver(); const dbResolver = new DbResolver();
@ -77,23 +77,23 @@ export async function checkFetch(req: IncomingMessage): Promise<number> {
); );
} catch (e) { } catch (e) {
// できなければ駄目 // できなければ駄目
return 403; return { status: 403 };
} }
} }
// publicKey がなくても終了 // publicKey がなくても終了
if (authUser?.key == null) { if (authUser?.key == null) {
return 403; return { status: 403 };
} }
// Cannot authenticate against local user // Cannot authenticate against local user
if (authUser.user.uri === null || authUser.user.host === null) { if (authUser.user.uri === null || authUser.user.host === null) {
return 400; return { status: 400 };
} }
// Check if keyId hostname matches actor hostname // Check if keyId hostname matches actor hostname
if (toPuny(new URL(authUser.user.uri).hostname) !== host) { if (toPuny(new URL(authUser.user.uri).hostname) !== host) {
return 403; return { status: 403 };
} }
// HTTP-Signatureの検証 // HTTP-Signatureの検証
@ -107,7 +107,7 @@ export async function checkFetch(req: IncomingMessage): Promise<number> {
authUser.key = await dbResolver.refetchPublicKeyForApId(authUser.user); authUser.key = await dbResolver.refetchPublicKeyForApId(authUser.user);
if (authUser.key == null) { if (authUser.key == null) {
return 403; return { status: 403 };
} }
httpSignatureValidated = httpSignature.verifySignature( httpSignatureValidated = httpSignature.verifySignature(
@ -117,12 +117,12 @@ export async function checkFetch(req: IncomingMessage): Promise<number> {
} }
if (!httpSignatureValidated) { if (!httpSignatureValidated) {
return 403; return { status: 403 };
} }
return verifySignature(signature, authUser.key) ? 200 : 401; return verifySignature(signature, authUser.key) ? 200 : 401;
} }
return 200; return { status: 200 };
} }
export async function getSignatureUser(req: IncomingMessage): Promise<{ export async function getSignatureUser(req: IncomingMessage): Promise<{

View 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";
};

View file

@ -19,6 +19,7 @@ import {
isFlag, isFlag,
isMove, isMove,
getApId, getApId,
isBite,
} from "../type.js"; } from "../type.js";
import { apLogger } from "../logger.js"; import { apLogger } from "../logger.js";
import Resolver from "../resolver.js"; import Resolver from "../resolver.js";
@ -37,6 +38,7 @@ import remove from "./remove/index.js";
import block from "./block/index.js"; import block from "./block/index.js";
import flag from "./flag/index.js"; import flag from "./flag/index.js";
import move from "./move/index.js"; import move from "./move/index.js";
import bite from "./bite.js";
import type { IObject } from "../type.js"; import type { IObject } from "../type.js";
import { extractDbHost } from "@/misc/convert-host.js"; import { extractDbHost } from "@/misc/convert-host.js";
import { shouldBlockInstance } from "@/misc/should-block-instance.js"; import { shouldBlockInstance } from "@/misc/should-block-instance.js";
@ -105,6 +107,8 @@ async function performOneActivity(
await flag(actor, activity); await flag(actor, activity);
} else if (isMove(activity)) { } else if (isMove(activity)) {
await move(actor, activity); await move(actor, activity);
} else if (isBite(activity)) {
await bite(actor, activity);
} else { } else {
apLogger.warn(`unrecognized activity type: ${(activity as any).type}`); apLogger.warn(`unrecognized activity type: ${(activity as any).type}`);
} }

View file

@ -560,6 +560,8 @@ export const WellKnownContext = {
litepub: "http://litepub.social/ns#", litepub: "http://litepub.social/ns#",
EmojiReact: "litepub:EmojiReact", EmojiReact: "litepub:EmojiReact",
EmojiReaction: "litepub:EmojiReaction", EmojiReaction: "litepub:EmojiReaction",
// mia
Bite: "https://ns.mia.jetzt/as#Bite",
}, },
], ],
}; };

View 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),
});

View file

@ -10,11 +10,14 @@ import renderEmoji from "./emoji.js";
import renderMention from "./mention.js"; import renderMention from "./mention.js";
import renderHashtag from "./hashtag.js"; import renderHashtag from "./hashtag.js";
import renderDocument from "./document.js"; import renderDocument from "./document.js";
import { Instances } from "@/models/index.js";
import { Instance } from "@/models/entities/instance.js";
export default async function renderNote( export default async function renderNote(
note: Note, note: Note,
dive = true, dive = true,
isTalk = false, isTalk = false,
clientHost: string | undefined = undefined,
): Promise<Record<string, unknown>> { ): Promise<Record<string, unknown>> {
const getPromisedFiles = async (ids: string[]) => { const getPromisedFiles = async (ids: string[]) => {
if (!ids || ids.length === 0) return []; if (!ids || ids.length === 0) return [];
@ -93,13 +96,17 @@ export default async function renderNote(
const files = await getPromisedFiles(note.fileIds); const files = await getPromisedFiles(note.fileIds);
const text = note.text ?? ""; let text = note.text ?? "";
let poll: Poll | null = null; let poll: Poll | null = null;
if (note.hasPoll) { if (note.hasPoll) {
poll = await Polls.findOneBy({ noteId: note.id }); poll = await Polls.findOneBy({ noteId: note.id });
} }
if (clientHost && shouldPatchText(text)) {
text = patchText(text, await Instances.findOneBy({ host: clientHost }));
}
let apText = text; let apText = text;
if (quote) { if (quote) {
@ -186,3 +193,18 @@ export async function getEmojis(names: string[]): Promise<Emoji[]> {
return emojis.filter((emoji) => emoji != null) as 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;
}

View file

@ -13,6 +13,7 @@ import {
NoteReactions, NoteReactions,
Polls, Polls,
Users, Users,
Bites,
} from "@/models/index.js"; } from "@/models/index.js";
import { parseUri } from "./db-resolver.js"; import { parseUri } from "./db-resolver.js";
import renderNote from "@/remote/activitypub/renderer/note.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 { shouldBlockInstance } from "@/misc/should-block-instance.js";
import { apLogger } from "@/remote/activitypub/logger.js"; import { apLogger } from "@/remote/activitypub/logger.js";
import { In, IsNull, Not } from "typeorm"; import { In, IsNull, Not } from "typeorm";
import renderBite from "@/remote/activitypub/renderer/bite.js";
export default class Resolver { export default class Resolver {
private history: Set<string>; private history: Set<string>;
@ -219,6 +221,10 @@ export default class Resolver {
throw new Error("resolveLocal: invalid follow URI"); throw new Error("resolveLocal: invalid follow URI");
} }
return renderActivity(renderFollow(follower, followee, url)); return renderActivity(renderFollow(follower, followee, url));
case "bites":
return Bites.findOneByOrFail({ id: parsed.id }).then((bite) =>
renderActivity(renderBite(bite)),
);
default: default:
throw new Error(`resolveLocal: type ${type} unhandled`); throw new Error(`resolveLocal: type ${type} unhandled`);
} }

View file

@ -322,6 +322,12 @@ export interface IMove extends IActivity {
target: IObject | string; target: IObject | string;
} }
export interface IBite extends IActivity {
type: "Bite";
actor: string;
target: string;
}
export const isCreate = (object: IObject): object is ICreate => export const isCreate = (object: IObject): object is ICreate =>
getApType(object) === "Create"; getApType(object) === "Create";
export const isDelete = (object: IObject): object is IDelete => export const isDelete = (object: IObject): object is IDelete =>
@ -354,3 +360,5 @@ export const isFlag = (object: IObject): object is IFlag =>
getApType(object) === "Flag"; getApType(object) === "Flag";
export const isMove = (object: IObject): object is IMove => export const isMove = (object: IObject): object is IMove =>
getApType(object) === "Move"; getApType(object) === "Move";
export const isBite = (object: IObject): object is IBite =>
getApType(object) === "Bite";

View file

@ -16,6 +16,7 @@ import {
Emojis, Emojis,
NoteReactions, NoteReactions,
FollowRequests, FollowRequests,
Bites,
} from "@/models/index.js"; } from "@/models/index.js";
import type { ILocalUser, User } from "@/models/entities/user.js"; import type { ILocalUser, User } from "@/models/entities/user.js";
import { renderLike } from "@/remote/activitypub/renderer/like.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 { serverLogger } from "./index.js";
import config from "@/config/index.js"; import config from "@/config/index.js";
import Koa from "koa"; import Koa from "koa";
import renderBite from "@/remote/activitypub/renderer/bite.js";
// Init router // Init router
const router = new Router(); const router = new Router();
@ -108,9 +110,9 @@ router.post("/users/:user/inbox", parseJsonBodyOrFail, inbox);
router.get("/notes/:note", async (ctx, next) => { router.get("/notes/:note", async (ctx, next) => {
if (!isActivityPubReq(ctx)) return await next(); if (!isActivityPubReq(ctx)) return await next();
const verify = await checkFetch(ctx.req); const { status, host } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status;
return; return;
} }
@ -166,7 +168,7 @@ router.get("/notes/:note", async (ctx, next) => {
serverLogger.debug("Accepting: access criteria met"); 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(); const meta = await fetchMeta();
if (meta.secureMode || meta.privateMode) { if (meta.secureMode || meta.privateMode) {
@ -179,9 +181,9 @@ router.get("/notes/:note", async (ctx, next) => {
// note activity // note activity
router.get("/notes/:note/activity", async (ctx) => { router.get("/notes/:note/activity", async (ctx) => {
const verify = await checkFetch(ctx.req); const { status, host } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status;
return; return;
} }
@ -197,7 +199,7 @@ router.get("/notes/:note/activity", async (ctx) => {
return; return;
} }
ctx.body = renderActivity(await packActivity(note)); ctx.body = renderActivity(await packActivity(note, host));
const meta = await fetchMeta(); const meta = await fetchMeta();
if (meta.secureMode || meta.privateMode) { if (meta.secureMode || meta.privateMode) {
ctx.set("Cache-Control", "private, max-age=0, must-revalidate"); ctx.set("Cache-Control", "private, max-age=0, must-revalidate");
@ -231,9 +233,9 @@ router.get("/users/:user/publickey", async (ctx) => {
return; return;
} }
const verify = await checkFetch(ctx.req); const { status } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status;
return; return;
} }
@ -291,10 +293,9 @@ router.get("/users/:user", async (ctx, next) => {
return; return;
} }
const verify = await checkFetch(ctx.req); const { status } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status;
return;
} }
const userId = ctx.params.user; const userId = ctx.params.user;
@ -317,9 +318,9 @@ router.get("/@:user", async (ctx, next) => {
return; return;
} }
const verify = await checkFetch(ctx.req); const { status } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status;
return; return;
} }
@ -340,9 +341,9 @@ router.get("/actor", async (ctx, next) => {
// emoji // emoji
router.get("/emojis/:emoji", async (ctx) => { router.get("/emojis/:emoji", async (ctx) => {
const verify = await checkFetch(ctx.req); const { status } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status;
return; return;
} }
@ -368,9 +369,9 @@ router.get("/emojis/:emoji", async (ctx) => {
// like // like
router.get("/likes/:like", async (ctx) => { router.get("/likes/:like", async (ctx) => {
const verify = await checkFetch(ctx.req); const { status } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status;
return; return;
} }
@ -402,9 +403,9 @@ router.get("/likes/:like", async (ctx) => {
router.get( router.get(
"/follows/:follower/:followee", "/follows/:follower/:followee",
async (ctx: Router.RouterContext) => { async (ctx: Router.RouterContext) => {
const verify = await checkFetch(ctx.req); const { status } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status;
return; return;
} }
// This may be used before the follow is completed, so we do not // This may be used before the follow is completed, so we do not
@ -439,9 +440,9 @@ router.get(
// follow request // follow request
router.get("/follows/:followRequestId", async (ctx: Router.RouterContext) => { router.get("/follows/:followRequestId", async (ctx: Router.RouterContext) => {
const verify = await checkFetch(ctx.req); const { status } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status
return; return;
} }
@ -480,4 +481,33 @@ router.get("/follows/:followRequestId", async (ctx: Router.RouterContext) => {
setResponseType(ctx); 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; export default router;

View file

@ -10,9 +10,9 @@ import { setResponseType } from "../activitypub.js";
import type Router from "@koa/router"; import type Router from "@koa/router";
export default async (ctx: Router.RouterContext) => { export default async (ctx: Router.RouterContext) => {
const verify = await checkFetch(ctx.req); const { status } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status;
return; return;
} }

View file

@ -14,9 +14,9 @@ import type { FindOptionsWhere } from "typeorm";
import type Router from "@koa/router"; import type Router from "@koa/router";
export default async (ctx: Router.RouterContext) => { export default async (ctx: Router.RouterContext) => {
const verify = await checkFetch(ctx.req); const { status } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status;
return; return;
} }

View file

@ -14,9 +14,9 @@ import type { FindOptionsWhere } from "typeorm";
import type Router from "@koa/router"; import type Router from "@koa/router";
export default async (ctx: Router.RouterContext) => { export default async (ctx: Router.RouterContext) => {
const verify = await checkFetch(ctx.req); const { status } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status;
return; return;
} }

View file

@ -17,9 +17,9 @@ import { setResponseType } from "../activitypub.js";
import type Router from "@koa/router"; import type Router from "@koa/router";
export default async (ctx: Router.RouterContext) => { export default async (ctx: Router.RouterContext) => {
const verify = await checkFetch(ctx.req); const { status, host } = await checkFetch(ctx.req);
if (verify !== 200) { if (status !== 200) {
ctx.status = verify; ctx.status = status;
return; return;
} }
@ -78,7 +78,7 @@ export default async (ctx: Router.RouterContext) => {
if (sinceId) notes.reverse(); if (sinceId) notes.reverse();
const activities = await Promise.all( const activities = await Promise.all(
notes.map((note) => packActivity(note)), notes.map((note) => packActivity(note, host)),
); );
const rendered = renderOrderedCollectionPage( const rendered = renderOrderedCollectionPage(
`${partOf}?${url.query({ `${partOf}?${url.query({
@ -129,7 +129,10 @@ export default async (ctx: Router.RouterContext) => {
* Pack Create<Note> or Announce Activity * Pack Create<Note> or Announce Activity
* @param note Note * @param note Note
*/ */
export async function packActivity(note: Note): Promise<any> { export async function packActivity(
note: Note,
clientHost: string | undefined = undefined
): Promise<any> {
if ( if (
note.renoteId && note.renoteId &&
note.text == null && 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);
} }

View file

@ -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___users_stats from "./endpoints/users/stats.js";
import * as ep___fetchRss from "./endpoints/fetch-rss.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___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 //Iceshrimp Move
import * as ep___i_move from "./endpoints/i/move.js"; import * as ep___i_move from "./endpoints/i/move.js";
@ -682,6 +684,8 @@ const eps = [
["admin/drive-capacity-override", ep___admin_driveCapOverride], ["admin/drive-capacity-override", ep___admin_driveCapOverride],
["fetch-rss", ep___fetchRss], ["fetch-rss", ep___fetchRss],
["get-sounds", ep___sounds], ["get-sounds", ep___sounds],
["bites/create", ep___bites_create],
["bites/show", ep___bites_show],
]; ];
export interface IEndpointMeta { export interface IEndpointMeta {

View 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);
});

View 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);
});

View file

@ -7,8 +7,7 @@ import { sqlLikeEscape } from "@/misc/sql-like-escape.js";
export const meta = { export const meta = {
tags: ["federation"], tags: ["federation"],
requireCredential: false, requireCredential: true,
requireCredentialPrivateMode: true,
res: { res: {
type: "array", type: "array",

View file

@ -97,10 +97,22 @@ const cache = new Cache<Awaited<ReturnType<typeof nodeinfo2>>>(
60 * 10, 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) => { router.get(nodeinfo2_1path, async (ctx) => {
const base = await cache.fetch(null, () => nodeinfo2()); 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"); ctx.set("Cache-Control", "public, max-age=600");
}); });
@ -110,7 +122,7 @@ router.get(nodeinfo2_0path, async (ctx) => {
// @ts-ignore // @ts-ignore
base.software.repository = undefined; 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"); ctx.set("Cache-Control", "public, max-age=600");
}); });

View 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;
}

View file

@ -25,7 +25,7 @@ export async function createNotification(
if ( if (
data.notifierId && 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 }); const notifier = await Users.findOneBy({ id: data.notifierId });
// suppress if the notifier does not exist or is silenced. // suppress if the notifier does not exist or is silenced.

View file

@ -35,7 +35,7 @@ export async function addPinned(
const pinings = await UserNotePinings.findBy({ userId: user.id }); const pinings = await UserNotePinings.findBy({ userId: user.id });
if (pinings.length >= 5) { if (pinings.length >= config.pinLimit) {
throw new IdentifiableError( throw new IdentifiableError(
"15a018eb-58e5-4da1-93be-330fcc5e4e1a", "15a018eb-58e5-4da1-93be-330fcc5e4e1a",
"You can not pin notes any more.", "You can not pin notes any more.",

View file

@ -11,6 +11,7 @@ export const notificationTypes = [
"followRequestAccepted", "followRequestAccepted",
"groupInvited", "groupInvited",
"app", "app",
"bite",
] as const; ] as const;
export const noteVisibilities = [ export const noteVisibilities = [

View 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>

View file

@ -222,6 +222,21 @@
:hideMenu="true" :hideMenu="true"
/></div /></div
></span> ></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 <span
v-if="notification.type === 'followRequestAccepted'" v-if="notification.type === 'followRequestAccepted'"
class="text" class="text"
@ -277,6 +292,7 @@ import { ref, onMounted, onUnmounted, watch } from "vue";
import * as misskey from "iceshrimp-js"; import * as misskey from "iceshrimp-js";
import XReactionIcon from "@/components/MkReactionIcon.vue"; import XReactionIcon from "@/components/MkReactionIcon.vue";
import MkFollowButton from "@/components/MkFollowButton.vue"; import MkFollowButton from "@/components/MkFollowButton.vue";
import MkBiteButton from "@/components/MkBiteButton.vue";
import XReactionTooltip from "@/components/MkReactionTooltip.vue"; import XReactionTooltip from "@/components/MkReactionTooltip.vue";
import { getNoteSummary } from "@/scripts/get-note-summary"; import { getNoteSummary } from "@/scripts/get-note-summary";
import { notePage } from "@/filters/note"; import { notePage } from "@/filters/note";

View file

@ -1,7 +1,7 @@
<template> <template>
<div v-if="instance.disableRegistration" style="margin-bottom: 1rem"> <div v-if="instance.disableRegistration" style="margin-bottom: 1rem">
<p>{{ i18n.ts.signupsDisabled }}</p> <p>{{ i18n.ts.signupsDisabled }}</p>
<a href="https://iceshrimp.dev/join"> <a href="https://fedidb.org/software/iceshrimp">
<MkButton rounded gradate <MkButton rounded gradate
>{{ i18n.ts.findOtherInstance }} >{{ i18n.ts.findOtherInstance }}
</MkButton> </MkButton>

View file

@ -31,7 +31,7 @@
@load="iconLoaded" @load="iconLoaded"
@click="gravity" @click="gravity"
/> />
<div class="misskey">Iceshrimp</div> <div class="misskey">jormungandr-bite</div>
<div class="version">v{{ version }}</div> <div class="version">v{{ version }}</div>
<span <span
v-for="emoji in easterEggEmojis" v-for="emoji in easterEggEmojis"
@ -57,7 +57,7 @@
<FormSection> <FormSection>
<div class="_formLinksGrid"> <div class="_formLinksGrid">
<FormLink <FormLink
to="https://iceshrimp.dev/iceshrimp/iceshrimp" to="https://iceshrimp.dev/limepotato/jormungandr-bite"
external external
> >
<template #icon <template #icon

View file

@ -32,12 +32,6 @@
i18n.ts.configure i18n.ts.configure
}}</MkA></MkInfo }}</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" <MkInfo v-if="updateAvailable" warn class="info"
>{{ i18n.ts.updateAvailable }} >{{ i18n.ts.updateAvailable }}
<a <a
@ -113,7 +107,6 @@ let noBotProtection =
!instance.disableRegistration && !instance.disableRegistration &&
!instance.enableHcaptcha && !instance.enableHcaptcha &&
!instance.enableRecaptcha; !instance.enableRecaptcha;
let noEmailServer = !instance.enableEmail;
let thereIsUnresolvedAbuseReport = $ref(false); let thereIsUnresolvedAbuseReport = $ref(false);
let updateAvailable = $ref(false); let updateAvailable = $ref(false);
let currentPage = $computed(() => router.currentRef.value.child); let currentPage = $computed(() => router.currentRef.value.child);

View file

@ -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() { async function toggleMute() {
if (user.isMuted) { if (user.isMuted) {
os.apiWithDialog("mute/delete", { os.apiWithDialog("mute/delete", {
@ -310,6 +317,13 @@ export function getUserMenu(user, router: Router = mainRouter) {
action: inviteGroup, action: inviteGroup,
} }
: undefined, : undefined,
meId !== user.id
? {
icon: "ph-tooth ph-bold ph-lg",
text: i18n.ts.bite,
action: bite,
}
: undefined,
null, null,
{ {
icon: user.isRenoteMuted icon: user.isRenoteMuted

View file

@ -28,6 +28,20 @@ export const getBuiltinThemes = () =>
"l-light", "l-light",
"l-nord", "l-nord",
"l-gruvbox", "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-coffee",
"l-apricot", "l-apricot",
"l-rainy", "l-rainy",
@ -42,8 +56,48 @@ export const getBuiltinThemes = () =>
"d-dark", "d-dark",
"d-nord", "d-nord",
"d-gruvbox", "d-gruvbox",
"d-catppuccin-frappe", "d-catppuccin-frappe-blue",
"d-catppuccin-mocha", "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-persimmon",
"d-astro", "d-astro",
"d-future", "d-future",

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View 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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View 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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯_(ツ)_/¯',
}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View 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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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 ¯\_(ツ)_/¯',}

View file

@ -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