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
# Status code images
#images:
# info: '/twemoji/1f440.svg'
# notFound: '/twemoji/2049.svg'
# error: '/twemoji/1f480.svg'
images:
info: '/static-assets/badges/info.png'
notFound: '/static-assets/badges/not-found.png'
error: '/static-assets/badges/error.png'
# Pinned Post Limit
pinLimit: 5
# Search engine (MFM)
#searchEngine: 'https://duckduckgo.com/?q='

View file

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

3
.gitignore vendored
View file

@ -1,3 +1,6 @@
# LimePot
run.sh
# Visual Studio Code
/.vscode
!/.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
enableTelemetry: false
nodeLinker: pnp
npmScopes:

View file

@ -1,20 +1,29 @@
<p><img src="assets/logo.png" alt="Iceshrimp" width="400px"></p>
<p><strong>Iceshrimp</strong> is a decentralized and federated social networking service, implementing the <strong>ActivityPub</strong> standard.<br>
It was forked from <del>Calckey</del> Firefish (itself a fork of Misskey) in mid-2023, to focus on stability, performance and usability instead of new features.</p>
# Jörmungandr
---
> **Note**
> This project is **not** inactive.
> 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 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.
> This is a softer fork of [Iceshrimp Bite](https://iceshrimp.dev/mia/iceshrimp-bite) which is a fork of [Iceshrimp](https://iceshrimp.dev/iceshrimp/iceshrimp) which is a fork of [Firefish](https://firefish.dev/firefish/firefish) which is a rebranding of Calckey, which is a fork of [Misskey](https://github.com/misskey-dev/misskey), Confused? I hope so.
---
- Highlighted changes:
- Jormungandr changes:
- Full Catppuccin theme support
- Configuarble pinned post limit
- Menhera error images
- Post button now says "Beep" instead of "Post"
- Fix "Find Another Server" link
- For more see [Jormungandr Changelog](./limepot-CHANGELOG.md)
- IceShrimp Bite!
- Withdrawal Patches
- silence-email
- replacements
- robots
- hide-federation
- yarn telemetry
- traumatize
- Highlighted Iceshrimp changes:
- First-class Mastodon client API support
- Significantly improved database performance
- Options to prune cached remote media automatically
@ -24,15 +33,6 @@ It was forked from <del>Calckey</del> Firefish (itself a fork of Misskey) in mid
- [Elk](https://elk.zone), [Phanpy](https://phanpy.social/), [Enafore](https://enafore.social/), [Masto-FE-standalone](https://iceshrimp.dev/iceshrimp/masto-fe-standalone) (Web)
- [Mona](https://apps.apple.com/us/app/mona-for-mastodon/id1659154653), [Toot!](https://apps.apple.com/us/app/toot-for-mastodon/id1229021451), [Ice Cubes](https://apps.apple.com/us/app/ice-cubes-for-mastodon/id6444915884), [Tusker](https://apps.apple.com/us/app/tusker/id1498334597), [Feditext](https://github.com/feditext/feditext), [Mastodon](https://apps.apple.com/us/app/mastodon-for-iphone-and-ipad/id1571998974) (iOS)
- [Tusky](https://tusky.app/), [Moshidon](https://lucasggamerm.github.io/moshidon/), [Megalodon](https://sk22.github.io/megalodon/), [Mastodon](https://play.google.com/store/apps/details?id=org.joinmastodon.android) (Android)
- Project goals:
- No-nonsense bug fixes
- QoL improvements
- Better performance
- Change of focus to actual community needs
- Prioritization of user choice and configurability
- Project anti-goals:
- Flashy marketing
- Commercialization of any kind
- Documentation on installing (and updating) Iceshrimp using:
- [Binary packages](https://iceshrimp.dev/iceshrimp/packaging)
- [Docker Compose](docs/docker-compose-install.md)

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

View file

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

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: *
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.pinLimit = config.pinLimit || parseInt(process.env.pinLimit || "", 100);
config.htmlCache = {
ttlSeconds: parseDuration(config.htmlCache?.ttl ?? '1h', 's')!,
prewarm: false,

View file

@ -53,6 +53,8 @@ export type Source = {
info?: string;
};
pinLimit?: number;
htmlCache?: {
ttl?: string;
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 { HtmlUserCacheEntry } from "@/models/entities/html-user-cache-entry.js";
import { TypeORMLoggingOptions } from "@/config/types.js";
import { Bite } from "@/models/entities/bite.js";
const sqlLogger = dbLogger.createSubLogger("sql", "gray", false);
const isLogEnabled = (level: TypeORMLoggingOptions): boolean => {
@ -194,6 +195,7 @@ export const entities = [
OAuthToken,
HtmlNoteCacheEntry,
HtmlUserCacheEntry,
Bite,
...charts,
];

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

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 { AccessToken } from "./access-token.js";
import { notificationTypes } from "@/types.js";
import { Bite } from "./bite.js";
@Entity()
export class Notification {
@ -181,4 +182,12 @@ export class Notification {
})
@JoinColumn()
public appAccessToken: AccessToken | null;
@Column({ ...id(), nullable: true })
public biteId: Bite["id"] | null;
@ManyToOne((type) => Bite, {
onDelete: "CASCADE", nullable: true
})
public bite: Bite | null;
}

View file

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

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

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,
nullable: true,
},
bite: {
type: "object",
ref: "Bite",
optional: true,
nullable: true,
},
},
} as const;

View file

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

View file

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

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

View file

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

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

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

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 = {
tags: ["federation"],
requireCredential: false,
requireCredentialPrivateMode: true,
requireCredential: true,
res: {
type: "array",

View file

@ -97,10 +97,22 @@ const cache = new Cache<Awaited<ReturnType<typeof nodeinfo2>>>(
60 * 10,
);
// tell sharkey instances that we're mastodon so it properly federates likes
const patch = (ctx, base) => {
// note: sharkey uses misskey as it's user-agent
if ((ctx.get("user-agent") ?? "").toLowerCase().indexOf("misskey") != -1) {
const copied = {...base};
copied.software = {...copied.software};
copied.software.name = 'mastodon';
return copied;
}
return base;
};
router.get(nodeinfo2_1path, async (ctx) => {
const base = await cache.fetch(null, () => nodeinfo2());
ctx.body = { version: "2.1", ...base };
ctx.body = { version: "2.1", ...patch(ctx, base) };
ctx.set("Cache-Control", "public, max-age=600");
});
@ -110,7 +122,7 @@ router.get(nodeinfo2_0path, async (ctx) => {
// @ts-ignore
base.software.repository = undefined;
ctx.body = { version: "2.0", ...base };
ctx.body = { version: "2.0", ...patch(ctx, base) };
ctx.set("Cache-Control", "public, max-age=600");
});

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 (
data.notifierId &&
["mention", "reply", "renote", "quote", "reaction"].includes(type)
["mention", "reply", "renote", "quote", "reaction", "bite"].includes(type)
) {
const notifier = await Users.findOneBy({ id: data.notifierId });
// suppress if the notifier does not exist or is silenced.

View file

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

View file

@ -11,6 +11,7 @@ export const notificationTypes = [
"followRequestAccepted",
"groupInvited",
"app",
"bite",
] as const;
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"
/></div
></span>
<span
v-if="notification.type === 'bite'"
class="text"
style="opacity: 0.7">{{
notification.bite.targetType === 'user'
? i18n.ts.bitYou
: i18n.ts.bitYouBack
}}
<div v-if="full">
<MkBiteButton
:user="notification.user"
:bite="notification.bite"
:full="true"
/></div
></span>
<span
v-if="notification.type === 'followRequestAccepted'"
class="text"
@ -277,6 +292,7 @@ import { ref, onMounted, onUnmounted, watch } from "vue";
import * as misskey from "iceshrimp-js";
import XReactionIcon from "@/components/MkReactionIcon.vue";
import MkFollowButton from "@/components/MkFollowButton.vue";
import MkBiteButton from "@/components/MkBiteButton.vue";
import XReactionTooltip from "@/components/MkReactionTooltip.vue";
import { getNoteSummary } from "@/scripts/get-note-summary";
import { notePage } from "@/filters/note";

View file

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

View file

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

View file

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

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

View file

@ -28,6 +28,20 @@ export const getBuiltinThemes = () =>
"l-light",
"l-nord",
"l-gruvbox",
"l-catppuccin-latte-blue",
"l-catppuccin-latte-flamingo",
"l-catppuccin-latte-green",
"l-catppuccin-latte-lavender",
"l-catppuccin-latte-maroon",
"l-catppuccin-latte-mauve",
"l-catppuccin-latte-peach",
"l-catppuccin-latte-pink",
"l-catppuccin-latte-red",
"l-catppuccin-latte-rosewater",
"l-catppuccin-latte-sapphire",
"l-catppuccin-latte-sky",
"l-catppuccin-latte-teal",
"l-catppuccin-latte-yellow",
"l-coffee",
"l-apricot",
"l-rainy",
@ -42,8 +56,48 @@ export const getBuiltinThemes = () =>
"d-dark",
"d-nord",
"d-gruvbox",
"d-catppuccin-frappe",
"d-catppuccin-mocha",
"d-catppuccin-frappe-blue",
"d-catppuccin-frappe-flamingo",
"d-catppuccin-frappe-green",
"d-catppuccin-frappe-lavender",
"d-catppuccin-frappe-maroon",
"d-catppuccin-frappe-mauve",
"d-catppuccin-frappe-peach",
"d-catppuccin-frappe-pink",
"d-catppuccin-frappe-red",
"d-catppuccin-frappe-rosewater",
"d-catppuccin-frappe-sapphire",
"d-catppuccin-frappe-sky",
"d-catppuccin-frappe-teal",
"d-catppuccin-frappe-yellow",
"d-catppuccin-mocha-blue",
"d-catppuccin-mocha-flamingo",
"d-catppuccin-mocha-green",
"d-catppuccin-mocha-lavender",
"d-catppuccin-mocha-maroon",
"d-catppuccin-mocha-mauve",
"d-catppuccin-mocha-peach",
"d-catppuccin-mocha-pink",
"d-catppuccin-mocha-red",
"d-catppuccin-mocha-rosewater",
"d-catppuccin-mocha-sapphire",
"d-catppuccin-mocha-sky",
"d-catppuccin-mocha-teal",
"d-catppuccin-mocha-yellow",
"d-catppuccin-macchiato-blue",
"d-catppuccin-macchiato-flamingo",
"d-catppuccin-macchiato-green",
"d-catppuccin-macchiato-lavender",
"d-catppuccin-macchiato-maroon",
"d-catppuccin-macchiato-mauve",
"d-catppuccin-macchiato-peach",
"d-catppuccin-macchiato-pink",
"d-catppuccin-macchiato-red",
"d-catppuccin-macchiato-rosewater",
"d-catppuccin-macchiato-sapphire",
"d-catppuccin-macchiato-sky",
"d-catppuccin-macchiato-teal",
"d-catppuccin-macchiato-yellow",
"d-persimmon",
"d-astro",
"d-future",

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