feat: add hyprlua config set and migrate hyprland envvars to dedicated file

Duplicates desktopenvs/hyprland/ as desktopenvs/hyprlua/ and converts all
Hyprland-specific configs (.conf) to Lua (.lua) using the 0.55+ hl.* API:
hyprland.lua, envvars.lua, monitors.lua, input.lua, autostart.lua,
windowrules.lua, binds.lua. Non-Hyprland tool configs (hyprpaper, hyprlock,
hypridle, hyprtoolkit) remain as .conf. Adds hyprlua.sh installer (user-side
.lua files install to ~/.config/hypr/ for require() resolution) and registers
HyprLua as the recommended DE option in tui-install.sh, marking the old
hyprlang-based Hyprland install as legacy.

Also consolidates hyprland (legacy) env vars into hypr-usr/envvars.conf,
removing duplicates from hyprland.conf and monitors.conf.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
main
The_miro 2026-05-19 08:50:23 +02:00
parent 2b282a1565
commit b629697ddd
237 changed files with 16438 additions and 18 deletions

View File

@ -0,0 +1,7 @@
env = GTK_THEME,cyberqueer
env = GDK_SCALE,2
env = XCURSOR_SIZE,40
env = HYPRCURSOR_SIZE,40
env = QT_QPA_PLATFORMTHEME,qt6ct
env = QT_STYLE_OVERRIDE,Fusion
env = QT_STYLE_SHEET,~/.config/qt6ct/qss/style.qss

View File

@ -9,6 +9,3 @@ xwayland {
force_zero_scaling = true
}
# toolkit-specific scale
env = GDK_SCALE,2
env = XCURSOR_SIZE,32

View File

@ -1,9 +1,9 @@
source = ~/.config/input.conf
source = ~/.config/monitors.conf
source = ~/.config/envvars.conf
source = ~/.config/binds.conf
source = ~/.config/windowrules.conf
source = ~/.config/autostart.conf
env GTK_THEME = cyberqueer
#plugin {
# hyprexpo {
# columns = 3
@ -60,17 +60,6 @@ $menu = wofi --show=drun
#############################
### ENVIRONMENT VARIABLES ###
#############################
# See https://wiki.hyprland.org/Configuring/Environment-variables/
env = XCURSOR_SIZE,40
env = HYPRCURSOR_SIZE,40
env = QT_QPA_PLATFORMTHEME,qt6ct
env = QT_STYLE_OVERRIDE,"Fusion"
env = QT_STYLE_SHEET,"~/.config/qt6ct/qss/style.qss"
#####################
### LOOK AND FEEL ###

View File

@ -0,0 +1,27 @@
{
"backgroundColor": "#1a1a1a",
"fontColor": "#d6abab",
"flickering": 0.2,
"horizontalSync": 0.3762,
"staticNoise": 0.0955,
"chromaColor": 1,
"saturationColor": 0.4983,
"screenCurvature": 0.1716,
"glowingLine": 0.1476,
"burnIn": 0.0754,
"bloom": 0.5017,
"rasterization": 1,
"jitter": 0.2368,
"rbgShift": 0.0224,
"brightness": 0.5014,
"contrast": 0.85,
"ambientLight": 0.0835,
"windowOpacity": 0.2561,
"fontName": "TERMINUS_SCALED",
"fontWidth": 1,
"margin": 0.1,
"blinkingCursor": true,
"frameMargin": 0,
"name": "Cyberqeer",
"version": 2
}

View File

@ -0,0 +1,632 @@
{
"autoUpdate": true,
"autoUpdateNotification": true,
"useQuickCss": true,
"themeLinks": [],
"eagerPatches": false,
"enabledThemes": [
"cyberqueer.theme.css"
],
"enableReactDevtools": true,
"frameless": false,
"transparent": false,
"winCtrlQ": false,
"disableMinSize": false,
"winNativeTitleBar": false,
"plugins": {
"ChatInputButtonAPI": {
"enabled": true
},
"CommandsAPI": {
"enabled": true
},
"DynamicImageModalAPI": {
"enabled": false
},
"MemberListDecoratorsAPI": {
"enabled": true
},
"MessageAccessoriesAPI": {
"enabled": true
},
"MessageDecorationsAPI": {
"enabled": true
},
"MessageEventsAPI": {
"enabled": false
},
"MessagePopoverAPI": {
"enabled": true
},
"MessageUpdaterAPI": {
"enabled": true
},
"ServerListAPI": {
"enabled": true
},
"UserSettingsAPI": {
"enabled": true
},
"AccountPanelServerProfile": {
"enabled": true
},
"AlwaysAnimate": {
"enabled": true
},
"AlwaysExpandRoles": {
"enabled": true
},
"AlwaysTrust": {
"enabled": true,
"domain": true,
"file": true
},
"AnonymiseFileNames": {
"enabled": true
},
"AppleMusicRichPresence": {
"enabled": false
},
"BANger": {
"enabled": false
},
"BetterFolders": {
"enabled": false,
"sidebar": true,
"showFolderIcon": 1,
"keepIcons": false,
"closeAllHomeButton": false,
"closeAllFolders": false,
"forceOpen": false,
"sidebarAnim": true,
"closeOthers": false
},
"BetterGifAltText": {
"enabled": true
},
"BetterGifPicker": {
"enabled": true
},
"BetterNotesBox": {
"enabled": true,
"hide": false
},
"BetterRoleContext": {
"enabled": true
},
"BetterRoleDot": {
"enabled": true,
"bothStyles": false,
"copyRoleColorInProfilePopout": false
},
"BetterSessions": {
"enabled": true,
"backgroundCheck": false
},
"BetterSettings": {
"enabled": true,
"disableFade": true,
"eagerLoad": true,
"organizeMenu": true
},
"BetterUploadButton": {
"enabled": true
},
"BiggerStreamPreview": {
"enabled": true
},
"BlurNSFW": {
"enabled": false
},
"CallTimer": {
"enabled": true
},
"ClearURLs": {
"enabled": false
},
"ClientTheme": {
"enabled": false
},
"ColorSighted": {
"enabled": false
},
"ConsoleJanitor": {
"enabled": false
},
"ConsoleShortcuts": {
"enabled": false
},
"CopyEmojiMarkdown": {
"enabled": false
},
"CopyFileContents": {
"enabled": false
},
"CopyUserURLs": {
"enabled": true
},
"CrashHandler": {
"enabled": true
},
"CtrlEnterSend": {
"enabled": false
},
"CustomRPC": {
"enabled": true,
"type": 0
},
"CustomIdle": {
"enabled": false
},
"Dearrow": {
"enabled": false
},
"Decor": {
"enabled": false
},
"DisableCallIdle": {
"enabled": false
},
"DontRoundMyTimestamps": {
"enabled": false
},
"EmoteCloner": {
"enabled": false
},
"Experiments": {
"enabled": false
},
"F8Break": {
"enabled": false
},
"FakeNitro": {
"enabled": false
},
"FakeProfileThemes": {
"enabled": false
},
"FavoriteEmojiFirst": {
"enabled": false
},
"FavoriteGifSearch": {
"enabled": false
},
"FixCodeblockGap": {
"enabled": true
},
"FixImagesQuality": {
"enabled": true
},
"FixSpotifyEmbeds": {
"enabled": true
},
"FixYoutubeEmbeds": {
"enabled": true
},
"ForceOwnerCrown": {
"enabled": true
},
"FriendInvites": {
"enabled": false
},
"FriendsSince": {
"enabled": true
},
"FullSearchContext": {
"enabled": false
},
"FullUserInChatbox": {
"enabled": false
},
"GameActivityToggle": {
"enabled": false
},
"GifPaste": {
"enabled": false
},
"GreetStickerPicker": {
"enabled": false
},
"HideMedia": {
"enabled": false
},
"iLoveSpam": {
"enabled": false
},
"IgnoreActivities": {
"enabled": false
},
"ImageLink": {
"enabled": false
},
"ImageZoom": {
"enabled": false
},
"ImplicitRelationships": {
"enabled": true,
"sortByAffinity": true
},
"InvisibleChat": {
"enabled": true
},
"IrcColors": {
"enabled": false,
"memberListColors": true,
"lightness": 70,
"applyColorOnlyInDms": false,
"applyColorOnlyToUsersWithoutColor": false
},
"KeepCurrentChannel": {
"enabled": false
},
"LastFMRichPresence": {
"enabled": false
},
"LoadingQuotes": {
"enabled": true,
"replaceEvents": true,
"enableDiscordPresetQuotes": false,
"additionalQuotes": "",
"additionalQuotesDelimiter": "|",
"enablePluginPresetQuotes": true
},
"MemberCount": {
"enabled": false
},
"MentionAvatars": {
"enabled": false
},
"MessageClickActions": {
"enabled": false
},
"MessageLatency": {
"enabled": false
},
"MessageLinkEmbeds": {
"enabled": false
},
"MessageLogger": {
"enabled": false
},
"MessageTags": {
"enabled": false
},
"MoreCommands": {
"enabled": false
},
"MoreKaomoji": {
"enabled": false
},
"Moyai": {
"enabled": false
},
"MutualGroupDMs": {
"enabled": false
},
"NewGuildSettings": {
"enabled": false
},
"NoBlockedMessages": {
"enabled": false
},
"NoDevtoolsWarning": {
"enabled": false
},
"NoF1": {
"enabled": false
},
"NoMaskedUrlPaste": {
"enabled": false
},
"NoMosaic": {
"enabled": false
},
"NoOnboardingDelay": {
"enabled": false
},
"NoPendingCount": {
"enabled": false
},
"NoProfileThemes": {
"enabled": false
},
"NoRPC": {
"enabled": false
},
"NoReplyMention": {
"enabled": false
},
"NoServerEmojis": {
"enabled": true
},
"NoSystemBadge": {
"enabled": false
},
"NoTypingAnimation": {
"enabled": false
},
"NoUnblockToJump": {
"enabled": false
},
"NormalizeMessageLinks": {
"enabled": false
},
"NotificationVolume": {
"enabled": false
},
"NSFWGateBypass": {
"enabled": false
},
"OnePingPerDM": {
"enabled": false
},
"oneko": {
"enabled": false
},
"OpenInApp": {
"enabled": false
},
"OverrideForumDefaults": {
"enabled": false
},
"PartyMode": {
"enabled": false
},
"PauseInvitesForever": {
"enabled": false
},
"PermissionFreeWill": {
"enabled": false
},
"PermissionsViewer": {
"enabled": false
},
"petpet": {
"enabled": false
},
"PictureInPicture": {
"enabled": false
},
"PinDMs": {
"enabled": false
},
"PlainFolderIcon": {
"enabled": true
},
"PlatformIndicators": {
"enabled": true,
"colorMobileIndicator": true,
"list": true,
"badges": true,
"messages": true
},
"PreviewMessage": {
"enabled": false
},
"QuickMention": {
"enabled": true
},
"QuickReply": {
"enabled": true
},
"ReactErrorDecoder": {
"enabled": false
},
"ReadAllNotificationsButton": {
"enabled": true
},
"RelationshipNotifier": {
"enabled": true,
"offlineRemovals": true,
"groups": true,
"servers": true,
"friends": true,
"friendRequestCancels": true
},
"ReplaceGoogleSearch": {
"enabled": false
},
"ReplyTimestamp": {
"enabled": false
},
"RevealAllSpoilers": {
"enabled": false
},
"ReverseImageSearch": {
"enabled": true
},
"ReviewDB": {
"enabled": true,
"notifyReviews": true
},
"RoleColorEverywhere": {
"enabled": true,
"chatMentions": true,
"memberList": true,
"voiceUsers": true,
"reactorsList": true,
"pollResults": true,
"colorChatMessages": false
},
"SecretRingToneEnabler": {
"enabled": false
},
"Summaries": {
"enabled": false
},
"SendTimestamps": {
"enabled": false
},
"ServerInfo": {
"enabled": false
},
"ServerListIndicators": {
"enabled": false
},
"ShikiCodeblocks": {
"enabled": false
},
"ShowAllMessageButtons": {
"enabled": false
},
"ShowConnections": {
"enabled": false
},
"ShowHiddenChannels": {
"enabled": false
},
"ShowHiddenThings": {
"enabled": false
},
"ShowMeYourName": {
"enabled": false
},
"ShowTimeoutDuration": {
"enabled": false
},
"SilentMessageToggle": {
"enabled": false
},
"SilentTyping": {
"enabled": false
},
"SortFriendRequests": {
"enabled": false
},
"SpotifyControls": {
"enabled": true,
"hoverControls": false
},
"SpotifyCrack": {
"enabled": false
},
"SpotifyShareCommands": {
"enabled": false
},
"StartupTimings": {
"enabled": false
},
"StickerPaste": {
"enabled": false
},
"StreamerModeOnStream": {
"enabled": false
},
"SuperReactionTweaks": {
"enabled": false
},
"TextReplace": {
"enabled": false
},
"ThemeAttributes": {
"enabled": false
},
"Translate": {
"enabled": false
},
"TypingIndicator": {
"enabled": false
},
"TypingTweaks": {
"enabled": true,
"alternativeFormatting": true
},
"Unindent": {
"enabled": false
},
"UnlockedAvatarZoom": {
"enabled": false
},
"UnsuppressEmbeds": {
"enabled": false
},
"UserMessagesPronouns": {
"enabled": true,
"showSelf": true,
"pronounsFormat": "LOWERCASE"
},
"UserVoiceShow": {
"enabled": false
},
"USRBG": {
"enabled": true,
"voiceBackground": true,
"nitroFirst": true
},
"ValidReply": {
"enabled": true
},
"ValidUser": {
"enabled": true
},
"VoiceChatDoubleClick": {
"enabled": false
},
"VcNarrator": {
"enabled": false
},
"VencordToolbox": {
"enabled": true
},
"ViewIcons": {
"enabled": false
},
"ViewRaw": {
"enabled": false
},
"VoiceDownload": {
"enabled": true
},
"VoiceMessages": {
"enabled": true
},
"VolumeBooster": {
"enabled": false
},
"WhoReacted": {
"enabled": true
},
"XSOverlay": {
"enabled": true,
"webSocketPort": 42070,
"botNotifications": false,
"pingColor": "#7289da",
"channelPingColor": "#8a2be2",
"serverNotifications": true,
"lengthBasedTimeout": true,
"opacity": 1,
"volume": 0.2,
"soundPath": "default",
"preferUDP": false
},
"YoutubeAdblock": {
"enabled": true
},
"BadgeAPI": {
"enabled": true
},
"NoTrack": {
"enabled": true,
"disableAnalytics": true
},
"Settings": {
"enabled": true,
"settingsLocation": "aboveNitro"
},
"SupportHelper": {
"enabled": true
}
},
"notifications": {
"timeout": 5000,
"position": "bottom-right",
"useNative": "not-focused",
"logLimit": 50
},
"cloud": {
"authenticated": false,
"url": "https://api.vencord.dev/",
"settingsSync": false,
"settingsSyncVersion": 1744550478260
}
}

View File

@ -0,0 +1,89 @@
/**
* @name system24
* @description A tui-style discord theme.
* @author refact0r
* @version 1.0.0
* @invite nz87hXyvcy
* @website https://github.com/refact0r/system24
* @source https://github.com/refact0r/system24/blob/master/system24.theme.css
* @authorId 508863359777505290
* @authorLink https://www.refact0r.dev
*/
@import url('https://refact0r.github.io/system24/src/main.css'); /* main theme css. DO NOT REMOVE */
/* @import url('https://refact0r.github.io/system24/src/unrounding.css'); /* gets rid of all rounded corners. remove if you want rounded corners. */
*{
font-family: 'Agave Nerd Font Mono';
}
/* customize things here */
:root {
font: 'Agave Nerd Font'; /* UI font name. it must be installed on your system. */
letter-spacing: 0; /* decreases letter spacing for better readability. */
font-weight: 400; /* UI font weight. */
--label-font-weight: 400; /* font weight for panel labels. */
--corner-text: 'system24'; /* custom text to display in the corner. only works on windows. */
--pad: 20px; /* padding between panels. */
--txt-pad: 5px; /* padding inside panels to prevent labels from clipping */
--panel-roundness: 0px; /* corner roundness of panels. ONLY WORKS IF unrounding.css IS REMOVED (see above). */
/* background colors */
--bg-0: #1a1a1a; /* main background color. */
--bg-1: #1a1a1a; /* background color for secondary elements like code blocks, embeds, etc. */
--bg-2: #1a1a1a; /* color of neutral buttons. */
--bg-3: #641a1a; /* color of neutral buttons when hovered. */
/* state modifiers */
--hover: #5018dd;/* color of hovered elements. */
--active: #E40046;/* color of elements when clicked. */
--selected: #5018dd; /* color of selected elements. */
/* text colors */
--txt-dark: var(--bg-0); /* color of dark text on colored backgrounds. */
--txt-link: var(--cyan); /* color of links. */
--txt-0: #d6abab; /* color of bright/white text. */
--txt-1: #d6abab;/* main text color. */
--txt-2: #5018dd;/* color of secondary text like channel list. */
--txt-3: #d6abab;/* color of muted text. */
/* accent colors */
--acc-1: #E40046; /* main accent color. */
--acc-0: #5018dd; /* color of accent buttons when hovered. */
--acc-2: #5018dd; /* color of accent buttons when clicked. */
/* borders */
--border-width: 19px; /* panel border thickness. */
--border-color: #5018dd; /* panel border color. */
--border-hover-color: #E40046; /* panel border color when hovered. */
--border-transition: 0.2s ease; /* panel border transition. */
/* status dot colors */
--online-dot: var(--green); /* color of online dot. */
--dnd-dot: var(--pink); /* color of do not disturb dot. */
--idle-dot: var(--yellow); /* color of idle dot. */
--streaming-dot: var(--purple); /* color of streaming dot. */
/* mention/ping and message colors */
--mention-txt: #5018dd; /* color of mention text. */
--mention-bg: #E40046; /* background highlight of mention text. */
--mention-overlay: color-mix(in oklch, var(--acc-0), transparent 90%); /* overlay color of messages that mention you. */
--mention-hover-overlay: color-mix(in oklch, var(--acc-0), transparent 95%); /* overlay color of messages that mention you when hovered. */
--reply-overlay: var(--active); /* overlay color of message you are replying to. */
--reply-hover-overlay: var(--hover); /* overlay color of message you are replying to when hovered. */
/* color shades */
--pink: oklch(73% 0.12 0);
--pink-1: oklch(63% 0.12 0);
--pink-2: oklch(53% 0.12 0);
--purple: oklch(73% 0.12 300);
--purple-1: oklch(63% 0.12 300);
--purple-2: oklch(53% 0.12 300);
--cyan: oklch(73% 0.12 200);
--yellow: oklch(78% 0.12 80);
--green: hsl(141, 76%, 48%);
--green-1: hsl(141, 73%, 42%);
--green-2: hsl(141, 73%, 36%);
}
/* .container_c48ade{
background-color: transparent;
} */

View File

@ -0,0 +1,6 @@
{
"tabWidth": 4,
"singleQuote": true,
"useTabs": true,
"printWidth": 200
}

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 refact0r
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,72 @@
> [!WARNING]
> recently discord has rolled out a new UI refresh update, which breaks the theme. for now, development is paused. if and when i find the motivation, the theme will be rewritten for the new UI. until then, please check out my other theme, [midnight](https://github.com/refact0r/midnight-discord).
![preivew](/assets/preview.png)
# system24
a tui-style discord theme, inspired by [spicetify text theme](https://github.com/spicetify/spicetify-themes/tree/master/text).
![screenshot](/assets/screenshot3.png)
## discord server
need help? want to get notified about updates? have feedback? join <https://discord.gg/nz87hXyvcy>
## install
### vencord/betterdiscord (or client with theme folder)
1. go the [default theme file](https://github.com/refact0r/system24/blob/main/theme/system24.theme.css) or choose a flavor from the options below.
2. click the download button in the top right.
3. move the downloaded file into your theme folder. (there should be a button to open the theme folder in theme settings)
4. you may need to enable the theme in your theme settings by clicking a toggle switch.
5. (optional) customize the theme by editing the variables in `system24.theme.css`.
### install through link
1. add `https://refact0r.github.io/system24/theme/system24.theme.css` to your theme import links.
## flavors
customized variants of the theme.
### spotify-text
matches the spotify/spicetify ["text" theme](https://github.com/spicetify/spicetify-themes/tree/master/text). thinner borders and different font weights from the default system24.
[theme file](https://github.com/refact0r/system24/blob/main/theme/flavors/spotify-text.theme.css)
![image](https://github.com/user-attachments/assets/f459f9fc-7b6c-4e9d-a8c9-4adefb0be417)
### catppuccin mocha
based on the mocha palette of [catppuccin](https://catppuccin.com/palette).
[theme file](https://github.com/refact0r/system24/blob/main/theme/flavors/catppuccin-mocha.theme.css)
![image](https://github.com/user-attachments/assets/994d35f6-90d8-4f99-bfce-c3df13f415d4)
### gruvbox material
based on the vim theme [gruvbox material](https://github.com/sainnhe/gruvbox-material).
[theme file](https://github.com/refact0r/system24/blob/main/theme/flavors/gruvbox-material.theme.css)
![image](/assets/gruv-material.png)
### monochrome
A monochrome version of the default theme with mostly neutral colors.
[theme file](https://github.com/refact0r/system24/blob/main/theme/flavors/monochrome.theme.css)
![image](/assets/monochrome.png)
### rose pine
based on the main palette of [rose pine](https://rosepinetheme.com/palette/).
[theme file](https://github.com/refact0r/system24/blob/main/theme/flavors/rosepine.theme.css)
![image](/assets/rosepine.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 769 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 620 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 KiB

View File

@ -0,0 +1,56 @@
function benchmarkSelectors(cssString) {
function extractSelectors(cssString) {
cssString = cssString.replace(/\/\*[\s\S]*?\*\//g, '') // remove comments
// remove nested brackets
let result = ''
let depth = 0
for (let char of cssString) {
if (char === '{') {
depth++
} else if (char === '}') {
depth--
} else if (depth === 0) {
result += char
}
}
cssString = result
let selectors = cssString
.split(/,(?![^(]*\))|[\n\r]+/) // split by commas or newline
.map((s) => s.trim().replace(/::(?:before|after)/, '')) // trim pseudo-elements
.filter(Boolean) // remove empty strings
return selectors
}
const benchmarkSelector = (selector) => {
const start = performance.now()
let matches = 0
for (let i = 0; i < 1000; i++) {
matches = document.querySelectorAll(selector).length
}
return [(performance.now() - start) / 1000, matches]
}
return extractSelectors(cssString)
.map((selector) => {
try {
const [time, matches] = benchmarkSelector(selector)
return { selector, time, matches }
} catch (error) {
console.error(
`Error benchmarking "${selector}": ${error.message}`
)
return null
}
})
.filter(Boolean)
.sort((a, b) => b.time - a.time)
.map(
({ selector, time, matches }) =>
`"${selector}",${time.toFixed(6)},${matches}`
)
.join('\n')
.replace(/^/, 'Selector,Time (ms),Matches\n')
}

View File

@ -0,0 +1,195 @@
Selector,Time (ms),Matches
"[class^='chatContent_']:has([class^='messagesWrapper_']:hover)",0.256000,0
"[class^='chatContent_']:has([class^='typing_']) > [class^='messagesWrapper_']",0.252800,0
"[class^=chat_] > [class*=container_]",0.191900,0
"[class*=embedFull_]",0.191100,1
"[class*=lookFilled_][class*=colorPrimary_]",0.187400,0
"#app-mount [class*=lookLink_][class*=colorPrimary_]",0.186500,0
"#app-mount [class*=controlIcon_]",0.180000,0
"[class^=container_] > [class^=wrapper_]",0.134800,1
"[class^=container_] > [class^=wrapper_]",0.133600,1
"[class^=container_] > [class^=wrapper_]",0.132400,1
"[class^=message_][class*=replying_]",0.132300,0
"[class^=embedVideoActions_] > [class^=centerContent_] > [class^=wrapper_]",0.131900,1
"[class^=panels_] > [class^=wrapper_] > [class^=container]",0.131600,0
"[class^=sidebar_] > [class^=container_]",0.131200,1
"[class^=container_] > [class^=wrapper_]",0.131200,1
"[class^='form_'] > [class^='wrapper_']",0.131000,0
"[class^=chat_] > [class^=content_] > [class^=container_]",0.130700,1
"[class^=message_][class*=mentioned_]",0.130200,0
"[class^=container_] > [class^=wrapper_]",0.130000,1
"[class^=panels_] > [class^=container_]",0.129600,1
"#app-mount [class^=sidebar_] > [class^=container_]",0.128500,1
"[class^='sidebar_'] > [class^='container_']",0.128500,1
"[class^=member_]",0.126500,28
"[class^=panels_]",0.126500,1
"[class^='membersWrap_']",0.126400,1
"[class^=navButton_][class*=navButtonActive_]",0.126000,0
"[class^='sidebar_'] > [class^='container_']",0.125800,1
"[class^='dot_'][class*='maskSecondary_']",0.125800,0
"[class^='membersWrap_']",0.125600,1
"[class^=panels_]",0.125600,1
"[class^=sidebar_]",0.125500,1
"[class^=centerContent_] > [class^=wrapper_] > [class^=anchor_]",0.125300,1
"[class^=privateChannels_] > [class^=scroller_]",0.125200,0
"[class^=childWrapper_]",0.125200,9
"#app-mount [class^=partyStatus_] [class^=anchor_]",0.125200,0
"[class^=iconBadge_]:not([class*=isCurrentUserConnected_])",0.125200,1
"[class^='toolbar_'] > [class^='search_']",0.125100,1
"[class^=container_] > [class^=base_]",0.125100,1
"[class^='panels_']",0.125000,1
"[class^='status_'][style='background-color: rgb(242, 63, 67);']",0.124900,0
"[class^=chatContent_] > [class^=messagesWrapper_]",0.124800,1
"[class^='form_'] [class^='channelTextArea_']",0.124700,1
"#app-mount [class^=sidebar_]",0.124700,1
"[class^=members_]",0.124500,1
"[class*=bannerVisible_] [class^=headerContent_]",0.124500,0
"[class^=form_] [class^=channelTextArea_]",0.124500,1
"[class^='typing_']",0.124500,0
"[class^='upperBadge_']",0.124500,1
"[class^=tabBody_]",0.124400,0
"[class^=resizeHandle_]",0.124200,0
"[class^='userPanelInner_']",0.124200,0
"[class^=attachedBars_]",0.124100,0
"[class^=container_] > [class^=base_]",0.124100,1
"[class^=gifFavoriteButton_]",0.124000,0
"[class^=membersWrap_]",0.124000,1
"[class^=panels_] > [class^=panel_]",0.124000,0
"[class^='searchResultsWrap_']",0.124000,0
"[class^=profilePanel_] > [class^=userPanelOuter_]",0.123900,0
"[class^=chat_]",0.123900,1
"[class^=sidebar_]",0.123900,1
"[class^='form_'] [class^='channelTextArea_']",0.123900,1
"[class^=panels_] > [class^=panel_]",0.123800,0
"[class^='membersWrap_']",0.123800,1
"[class^='nowPlayingColumn_']",0.123800,0
"[class^=replyBar_]",0.123700,0
"[class^=iconWrapper_]",0.123700,7
"[class^='status_'][style='background-color: rgb(35, 165, 90);']",0.123700,0
"[class^=searchResultsWrap_]",0.123700,0
"[class^='unreadPill_'][class*='endCap_']",0.123600,1
"[class^=overlayBottom_] > [class^=text-]",0.123600,0
"[class^=privateChannels_]",0.123600,0
"[class^=categoryText_]",0.123500,0
"[class^=profilePanel_]",0.123500,0
"[class^='searchResultsWrap_']",0.123400,0
"[class^='membersWrap_']",0.123400,1
"[class^='peopleListItem_']",0.123400,0
"[class^='status_'][style='background-color: rgb(240, 178, 50);']",0.123300,0
"[class^=tabBody_]",0.123200,0
"[class^=privateChannels_]",0.123200,0
"[class^='status_'][style='background-color: rgb(128, 132, 142);']",0.123200,0
"[class^='chatContent_'] > [class^='messagesWrapper_']",0.123100,1
"[class^='profilePanel_']",0.123100,0
"[class^=videoControls_]",0.123000,0
"[class^=sidebar_]",0.123000,1
"[class^=searchAnswer_]",0.122800,0
"[class^='profilePanel_']",0.122800,0
"[class^='peopleColumn_']",0.122800,0
"[class^='nowPlayingColumn_']",0.122800,0
"[class^='sectionDivider_']",0.122800,1
"[class^=notAppAsidePanel_] > [class^=layerContainer_]",0.122700,2
"[class^='privateChannels_']",0.122700,0
"[class^=privateChannels_]",0.122500,0
"[class^=container_] > [class^=base_]",0.122500,1
"[class^='lowerBadge_']",0.122400,0
"[class^=searchResultsWrap_]",0.122400,0
"[class^=threadSuggestionBar_]",0.122200,0
"[class^='chatContent_'] > [class^='messagesWrapper_']",0.122200,1
"[class^=searchResultsWrap_]",0.122200,0
"[class^=peopleColumn_]",0.122200,0
"[class^='nowPlayingColumn_']",0.122100,0
"[class^=searchFilter_]",0.122000,0
"[class^=privateChannels_]",0.122000,0
"[class^=nowPlayingColumn_]",0.122000,0
"[class^='folderIconWrapper_'][style='background-color: rgba(88, 101, 242, 0.4);']",0.121900,6
"[class^='container_'] > [class^='base_']",0.121900,1
"[class^='panels_']",0.121800,1
"[class^=friendRequestsButton_] [class^=numberBadge_]",0.121600,0
"[class^=peopleColumn_]",0.121400,0
"#app-mount [class^=partyStatus_]",0.121300,0
"[class^='form_'] [class^='channelTextArea_']",0.121100,1
"[class^='privateChannels_']",0.121100,0
"[class^='peopleColumn_']",0.120900,0
"#app-mount [class^='divider_']",0.120100,3
".wrapper_c51b4e:has(rect[fill='#593695'])",0.109200,0
".wrapper_c51b4e:has(rect[fill='#80848e'])",0.107600,0
".wrapper_c51b4e:has(rect[fill='#23a55a'])",0.096000,18
".wrapper_c51b4e:has(rect[fill='#f0b232'])",0.095800,4
".wrapper_c51b4e:has(rect[fill='#f23f43'])",0.089600,8
".wrapper_c51b4e:has(rect)",0.087900,30
"[style='opacity: 1; background-color: rgb(35, 165, 90);']",0.074800,0
"svg[style='color: rgb(88, 101, 242);']",0.062200,8
"#app-mount button path[fill='var(--white-500)']",0.061600,0
"[role='button'] path[fill='var(--white-500)']",0.060400,0
"[class^='mask_'] > svg",0.060400,2
"[class^='listItem_'] [class^='wrapper_'] > [class^='svg_'] > mask",0.058600,48
"[class^='bannerSVGWrapper_'] > mask > circle",0.056000,1
"svg[class^=slider_] > rect[fill='white']",0.055400,0
"[class^='mask_'] > rect",0.055400,30
":root",0.055200,1
"[class^='mask_'] > foreignObject",0.055100,32
"[class^='svg_'] > foreignObject",0.054900,70
"[class^='mask_'] > circle",0.054300,1
":root",0.053800,1
":root",0.052300,1
"[class^=jumpToPresentBar_] > button",0.051700,0
"aside[class^='profilePanel_']",0.051000,0
".custom-profile-theme [class*=color_][class*=text_]",0.049900,0
".horizontal_bba380 > .flex_bba380",0.044800,0
".container_fb4810",0.044300,0
".container_a4d4d9",0.043900,1
".clipContainer_b11c5e",0.043900,0
".content_a7d72e",0.043600,1
".container_fc4f04",0.043600,1
".scroller_e2e187",0.043400,1
"html.theme-light",0.043400,0
".platform-osx [class^=container_] > [class^=wrapper_]",0.043300,0
".container_fc4f04",0.043300,1
".container_fc4f04",0.043300,1
".container_adcaac",0.043200,0
".attachButton_f298d4",0.043200,1
".wrapper_fea3ef",0.043200,1
".container_d1c246",0.043200,0
".container_e85446:has(div[style='background-color: rgb(35, 165, 90);'])",0.043100,0
".textArea_d0696b",0.043000,2
".chat_a7d72e",0.043000,1
".wordmarkWindows_a934d8 > svg",0.043000,1
".vc-spotify-time-right",0.042900,1
".theme-dark",0.042900,3
".container_c75f85",0.042800,0
".form_a7d72e",0.042800,1
".container_a6d69a",0.042800,0
".vc-spotify-time-left",0.042800,1
".form_a7d72e",0.042700,1
".container_b2ca13",0.042700,1
".container_a6d69a",0.042700,0
".container_c2739c",0.042700,0
".tabBody_c2739c",0.042700,0
".vc-spotify-time-right",0.042700,1
".container_e85446 > [class^='svg_'] > foreignObject > [class^='status_']",0.042600,0
".container_d1c246",0.042600,0
".panels_a4d4d9",0.042600,1
".container_adcaac",0.042600,0
".container_c2739c",0.042500,0
".scroller_fb4810",0.042500,0
".form_a7d72e",0.042400,1
".newMessagesBar_cf58b5",0.042400,1
".animatedContainer_fd6364",0.042400,1
".vc-spotify-time-left",0.042400,1
".scroller_fb4810",0.042300,0
".wordmarkWindows_a934d8",0.042300,1
".container_e85446:has(div[style='background-color: rgb(35, 165, 90);'])",0.042300,0
".grabber_c7a159",0.042200,1
".container_a6d69a",0.042100,0
".scroller_fb4810",0.042100,0
".scroller_fb4810",0.042100,0
".container_fc4f04",0.041600,1
"*",0.036500,6407
"#vc-spotify-progress-bar [class^='bar_']",0.000300,1
"#app-mount #vc-spotify-player",0.000200,1
"#vc-spotify-player",0.000200,1
"#vc-spotify-player",0.000200,1
"#vc-spotify-progress-bar",0.000200,1
"::-webkit-scrollbar-thumb",0.000200,0
"#vc-spotify-player",0.000100,1
1 Selector Time (ms) Matches
2 [class^='chatContent_']:has([class^='messagesWrapper_']:hover) 0.256000 0
3 [class^='chatContent_']:has([class^='typing_']) > [class^='messagesWrapper_'] 0.252800 0
4 [class^=chat_] > [class*=container_] 0.191900 0
5 [class*=embedFull_] 0.191100 1
6 [class*=lookFilled_][class*=colorPrimary_] 0.187400 0
7 #app-mount [class*=lookLink_][class*=colorPrimary_] 0.186500 0
8 #app-mount [class*=controlIcon_] 0.180000 0
9 [class^=container_] > [class^=wrapper_] 0.134800 1
10 [class^=container_] > [class^=wrapper_] 0.133600 1
11 [class^=container_] > [class^=wrapper_] 0.132400 1
12 [class^=message_][class*=replying_] 0.132300 0
13 [class^=embedVideoActions_] > [class^=centerContent_] > [class^=wrapper_] 0.131900 1
14 [class^=panels_] > [class^=wrapper_] > [class^=container] 0.131600 0
15 [class^=sidebar_] > [class^=container_] 0.131200 1
16 [class^=container_] > [class^=wrapper_] 0.131200 1
17 [class^='form_'] > [class^='wrapper_'] 0.131000 0
18 [class^=chat_] > [class^=content_] > [class^=container_] 0.130700 1
19 [class^=message_][class*=mentioned_] 0.130200 0
20 [class^=container_] > [class^=wrapper_] 0.130000 1
21 [class^=panels_] > [class^=container_] 0.129600 1
22 #app-mount [class^=sidebar_] > [class^=container_] 0.128500 1
23 [class^='sidebar_'] > [class^='container_'] 0.128500 1
24 [class^=member_] 0.126500 28
25 [class^=panels_] 0.126500 1
26 [class^='membersWrap_'] 0.126400 1
27 [class^=navButton_][class*=navButtonActive_] 0.126000 0
28 [class^='sidebar_'] > [class^='container_'] 0.125800 1
29 [class^='dot_'][class*='maskSecondary_'] 0.125800 0
30 [class^='membersWrap_'] 0.125600 1
31 [class^=panels_] 0.125600 1
32 [class^=sidebar_] 0.125500 1
33 [class^=centerContent_] > [class^=wrapper_] > [class^=anchor_] 0.125300 1
34 [class^=privateChannels_] > [class^=scroller_] 0.125200 0
35 [class^=childWrapper_] 0.125200 9
36 #app-mount [class^=partyStatus_] [class^=anchor_] 0.125200 0
37 [class^=iconBadge_]:not([class*=isCurrentUserConnected_]) 0.125200 1
38 [class^='toolbar_'] > [class^='search_'] 0.125100 1
39 [class^=container_] > [class^=base_] 0.125100 1
40 [class^='panels_'] 0.125000 1
41 [class^='status_'][style='background-color: rgb(242, 63, 67);'] 0.124900 0
42 [class^=chatContent_] > [class^=messagesWrapper_] 0.124800 1
43 [class^='form_'] [class^='channelTextArea_'] 0.124700 1
44 #app-mount [class^=sidebar_] 0.124700 1
45 [class^=members_] 0.124500 1
46 [class*=bannerVisible_] [class^=headerContent_] 0.124500 0
47 [class^=form_] [class^=channelTextArea_] 0.124500 1
48 [class^='typing_'] 0.124500 0
49 [class^='upperBadge_'] 0.124500 1
50 [class^=tabBody_] 0.124400 0
51 [class^=resizeHandle_] 0.124200 0
52 [class^='userPanelInner_'] 0.124200 0
53 [class^=attachedBars_] 0.124100 0
54 [class^=container_] > [class^=base_] 0.124100 1
55 [class^=gifFavoriteButton_] 0.124000 0
56 [class^=membersWrap_] 0.124000 1
57 [class^=panels_] > [class^=panel_] 0.124000 0
58 [class^='searchResultsWrap_'] 0.124000 0
59 [class^=profilePanel_] > [class^=userPanelOuter_] 0.123900 0
60 [class^=chat_] 0.123900 1
61 [class^=sidebar_] 0.123900 1
62 [class^='form_'] [class^='channelTextArea_'] 0.123900 1
63 [class^=panels_] > [class^=panel_] 0.123800 0
64 [class^='membersWrap_'] 0.123800 1
65 [class^='nowPlayingColumn_'] 0.123800 0
66 [class^=replyBar_] 0.123700 0
67 [class^=iconWrapper_] 0.123700 7
68 [class^='status_'][style='background-color: rgb(35, 165, 90);'] 0.123700 0
69 [class^=searchResultsWrap_] 0.123700 0
70 [class^='unreadPill_'][class*='endCap_'] 0.123600 1
71 [class^=overlayBottom_] > [class^=text-] 0.123600 0
72 [class^=privateChannels_] 0.123600 0
73 [class^=categoryText_] 0.123500 0
74 [class^=profilePanel_] 0.123500 0
75 [class^='searchResultsWrap_'] 0.123400 0
76 [class^='membersWrap_'] 0.123400 1
77 [class^='peopleListItem_'] 0.123400 0
78 [class^='status_'][style='background-color: rgb(240, 178, 50);'] 0.123300 0
79 [class^=tabBody_] 0.123200 0
80 [class^=privateChannels_] 0.123200 0
81 [class^='status_'][style='background-color: rgb(128, 132, 142);'] 0.123200 0
82 [class^='chatContent_'] > [class^='messagesWrapper_'] 0.123100 1
83 [class^='profilePanel_'] 0.123100 0
84 [class^=videoControls_] 0.123000 0
85 [class^=sidebar_] 0.123000 1
86 [class^=searchAnswer_] 0.122800 0
87 [class^='profilePanel_'] 0.122800 0
88 [class^='peopleColumn_'] 0.122800 0
89 [class^='nowPlayingColumn_'] 0.122800 0
90 [class^='sectionDivider_'] 0.122800 1
91 [class^=notAppAsidePanel_] > [class^=layerContainer_] 0.122700 2
92 [class^='privateChannels_'] 0.122700 0
93 [class^=privateChannels_] 0.122500 0
94 [class^=container_] > [class^=base_] 0.122500 1
95 [class^='lowerBadge_'] 0.122400 0
96 [class^=searchResultsWrap_] 0.122400 0
97 [class^=threadSuggestionBar_] 0.122200 0
98 [class^='chatContent_'] > [class^='messagesWrapper_'] 0.122200 1
99 [class^=searchResultsWrap_] 0.122200 0
100 [class^=peopleColumn_] 0.122200 0
101 [class^='nowPlayingColumn_'] 0.122100 0
102 [class^=searchFilter_] 0.122000 0
103 [class^=privateChannels_] 0.122000 0
104 [class^=nowPlayingColumn_] 0.122000 0
105 [class^='folderIconWrapper_'][style='background-color: rgba(88, 101, 242, 0.4);'] 0.121900 6
106 [class^='container_'] > [class^='base_'] 0.121900 1
107 [class^='panels_'] 0.121800 1
108 [class^=friendRequestsButton_] [class^=numberBadge_] 0.121600 0
109 [class^=peopleColumn_] 0.121400 0
110 #app-mount [class^=partyStatus_] 0.121300 0
111 [class^='form_'] [class^='channelTextArea_'] 0.121100 1
112 [class^='privateChannels_'] 0.121100 0
113 [class^='peopleColumn_'] 0.120900 0
114 #app-mount [class^='divider_'] 0.120100 3
115 .wrapper_c51b4e:has(rect[fill='#593695']) 0.109200 0
116 .wrapper_c51b4e:has(rect[fill='#80848e']) 0.107600 0
117 .wrapper_c51b4e:has(rect[fill='#23a55a']) 0.096000 18
118 .wrapper_c51b4e:has(rect[fill='#f0b232']) 0.095800 4
119 .wrapper_c51b4e:has(rect[fill='#f23f43']) 0.089600 8
120 .wrapper_c51b4e:has(rect) 0.087900 30
121 [style='opacity: 1; background-color: rgb(35, 165, 90);'] 0.074800 0
122 svg[style='color: rgb(88, 101, 242);'] 0.062200 8
123 #app-mount button path[fill='var(--white-500)'] 0.061600 0
124 [role='button'] path[fill='var(--white-500)'] 0.060400 0
125 [class^='mask_'] > svg 0.060400 2
126 [class^='listItem_'] [class^='wrapper_'] > [class^='svg_'] > mask 0.058600 48
127 [class^='bannerSVGWrapper_'] > mask > circle 0.056000 1
128 svg[class^=slider_] > rect[fill='white'] 0.055400 0
129 [class^='mask_'] > rect 0.055400 30
130 :root 0.055200 1
131 [class^='mask_'] > foreignObject 0.055100 32
132 [class^='svg_'] > foreignObject 0.054900 70
133 [class^='mask_'] > circle 0.054300 1
134 :root 0.053800 1
135 :root 0.052300 1
136 [class^=jumpToPresentBar_] > button 0.051700 0
137 aside[class^='profilePanel_'] 0.051000 0
138 .custom-profile-theme [class*=color_][class*=text_] 0.049900 0
139 .horizontal_bba380 > .flex_bba380 0.044800 0
140 .container_fb4810 0.044300 0
141 .container_a4d4d9 0.043900 1
142 .clipContainer_b11c5e 0.043900 0
143 .content_a7d72e 0.043600 1
144 .container_fc4f04 0.043600 1
145 .scroller_e2e187 0.043400 1
146 html.theme-light 0.043400 0
147 .platform-osx [class^=container_] > [class^=wrapper_] 0.043300 0
148 .container_fc4f04 0.043300 1
149 .container_fc4f04 0.043300 1
150 .container_adcaac 0.043200 0
151 .attachButton_f298d4 0.043200 1
152 .wrapper_fea3ef 0.043200 1
153 .container_d1c246 0.043200 0
154 .container_e85446:has(div[style='background-color: rgb(35, 165, 90);']) 0.043100 0
155 .textArea_d0696b 0.043000 2
156 .chat_a7d72e 0.043000 1
157 .wordmarkWindows_a934d8 > svg 0.043000 1
158 .vc-spotify-time-right 0.042900 1
159 .theme-dark 0.042900 3
160 .container_c75f85 0.042800 0
161 .form_a7d72e 0.042800 1
162 .container_a6d69a 0.042800 0
163 .vc-spotify-time-left 0.042800 1
164 .form_a7d72e 0.042700 1
165 .container_b2ca13 0.042700 1
166 .container_a6d69a 0.042700 0
167 .container_c2739c 0.042700 0
168 .tabBody_c2739c 0.042700 0
169 .vc-spotify-time-right 0.042700 1
170 .container_e85446 > [class^='svg_'] > foreignObject > [class^='status_'] 0.042600 0
171 .container_d1c246 0.042600 0
172 .panels_a4d4d9 0.042600 1
173 .container_adcaac 0.042600 0
174 .container_c2739c 0.042500 0
175 .scroller_fb4810 0.042500 0
176 .form_a7d72e 0.042400 1
177 .newMessagesBar_cf58b5 0.042400 1
178 .animatedContainer_fd6364 0.042400 1
179 .vc-spotify-time-left 0.042400 1
180 .scroller_fb4810 0.042300 0
181 .wordmarkWindows_a934d8 0.042300 1
182 .container_e85446:has(div[style='background-color: rgb(35, 165, 90);']) 0.042300 0
183 .grabber_c7a159 0.042200 1
184 .container_a6d69a 0.042100 0
185 .scroller_fb4810 0.042100 0
186 .scroller_fb4810 0.042100 0
187 .container_fc4f04 0.041600 1
188 * 0.036500 6407
189 #vc-spotify-progress-bar [class^='bar_'] 0.000300 1
190 #app-mount #vc-spotify-player 0.000200 1
191 #vc-spotify-player 0.000200 1
192 #vc-spotify-player 0.000200 1
193 #vc-spotify-progress-bar 0.000200 1
194 ::-webkit-scrollbar-thumb 0.000200 0
195 #vc-spotify-player 0.000100 1

View File

@ -0,0 +1,232 @@
Selector,Time (ms),Matches,Total
[class*=buttonColor_],0.4697,0,38.4736
[class*=embedFull_],0.446,2,
[class^='chatContent_']:has([class^='typing_']:hover),0.4342,0,
#app-mount [class*=lookLink_][class*=colorPrimary_],0.4331,0,
[class*=lookFilled_][class*=colorPrimary_],0.4315,0,
[class^='chatContent_']:has([class^='messagesWrapper_']:hover),0.4189,0,
[class^='chatContent_']:has([class^='typing_']) > [class^='messagesWrapper_'] > [class^='jumpToPresentBar_'],0.4146,0,
#app-mount [class*=controlIcon_],0.3911,0,
[class^=searchFilter_],0.3541,0,
[class^='newBadge_'],0.3385,0,
[class^=friendRequestsButton_] [class^=numberBadge_],0.3314,0,
[class^=chat_] > [class*=container_],0.32,0,
[class^=videoControls_],0.3099,0,
[class*=backgroundAccent_],0.3097,0,
[class^=searchAnswer_],0.3096,0,
#app-mount [class^=partyStatus_],0.3063,0,
[class^='newChannel_'],0.2995,0,
[class^=iconBadge_]:not([class*=isCurrentUserConnected_]),0.2892,0,
#app-mount [class^=partyStatus_] [class^=anchor_],0.2834,0,
[class^=childWrapper_],0.2817,15,
[class^=overlayBottom_] > [class^=text-],0.2786,0,
[class^=gifFavoriteButton_],0.2739,0,
[class^='form_'] [class^='channelTextArea_'],0.2703,1,
[class^='panels_'],0.2612,1,
[class^=panels_],0.2599,1,
[class^=sidebar_],0.2585,1,
[class^=button_][class*=bannerColor_],0.2576,0,
[class^='content_']>[class^='outer_'],0.2546,0,
[class^=channelTextArea] > [class^=scrollableContainer],0.2527,1,
[class^='content_']>[class^='outer_'],0.2511,0,
[class^=sidebar_] > [class^=container_],0.2439,1,
[class^='channelBottomBarArea_'],0.2423,1,
[class^=panels_] > [class^=wrapper_] > [class^=container],0.2386,0,
[class^='form_'] > [class^='wrapper_'],0.2365,0,
[class^=navButton_][class*=navButtonActive_],0.2356,0,
[class^=sidebar_],0.2315,1,
[class^=membersWrap_],0.2308,1,
[class^=embedVideoActions_] > [class^=centerContent_] > [class^=wrapper_],0.2273,0,
[class^=categoryText_],0.2255,0,
[class^='form_'] > [class^='wrapper_'],0.2233,0,
[class^=sidebar_],0.2232,1,
[class^=members_],0.2213,1,
"[class^='folderIconWrapper_'][style='background-color: rgba(88, 101, 242, 0.4);']",0.2209,0,
[class^=peopleColumn_],0.2206,0,
[class^=nowPlayingColumn_],0.2206,0,
[class^=message_][class*=replying_],0.2181,0,
[class^=message_][class*=mentioned_],0.2175,5,
[class^=bottomControls_],0.2173,0,
[class*=bannerVisible_] [class^=headerContent_],0.2168,0,
[class^=container_] > [class^=base_],0.2148,1,
[class^=tabBody_],0.2147,0,
[class^=privateChannels_],0.2141,0,
[class^='sidebar_'] > [class^='container_'],0.2129,1,
[class^='dot_'][class*='maskSecondary_'],0.2125,0,
"[class^='status_'][style='background-color: rgb(35, 165, 90);']",0.2124,0,
[class^=privateChannels_],0.2119,0,
[class^='sidebar_'] > [class^='container_'],0.2112,1,
[class^='content_']>[class^='outer_'],0.2105,0,
[class^=channelBottomBarArea_],0.2103,1,
[class^='form_'] [class^='channelTextArea_'],0.2101,1,
[class^=privateChannels_],0.21,0,
[class^='channelAppLauncher_'],0.2099,1,
[class^=gradientBottom_],0.2099,0,
[class^=centerContent_] > [class^=wrapper_] > [class^=anchor_],0.2099,0,
[class^='form_'] > [class^='typing_'],0.2095,0,
[class^='content_']>[class^='outer_']>[class^='inner_'],0.2094,0,
#app-mount [class^=sidebar_] > [class^=container_],0.2093,1,
[class^='nowPlayingColumn_'],0.209,0,
"[class^='status_'][style='background-color: rgb(128, 132, 142);']",0.2087,0,
[class^=peopleColumn_],0.2082,0,
[class^='nowPlayingColumn_'],0.2079,0,
[class^=session_],0.2078,0,
[class^='container_'] > [class^='base_'],0.2076,1,
[class^=searchResultsWrap_],0.2076,0,
[class^=panels_] > [class^=panel_],0.2076,0,
[class^='membersWrap_'],0.2076,1,
[class^=searchResultsWrap_],0.2073,0,
[class^=guildSeparator_],0.2072,2,
[class^=tableCell_],0.2072,0,
[class^=chat_] > [class^=content_] > [class^=container_],0.2071,1,
[class^='membersWrap_'],0.207,1,
[class^='sectionDivider_'],0.2069,0,
[class^='privateChannels_'],0.2067,0,
[class^='peopleColumn_'],0.2065,0,
[class^=attachedBars_],0.2061,0,
[class^=searchResultsWrap_],0.206,0,
[class^='callContainer_'],0.2055,0,
[class^='peopleColumn_'],0.2051,0,
[class^='notAppAsidePanel_'] > [class^='layerContainer_'],0.2049,2,
[class^='unreadPill_'][class*='endCap_'],0.2048,0,
[class^='panels_'],0.2047,1,
#app-mount [class^=sidebar_],0.2045,1,
[class^=chat_],0.2044,1,
[class^=panels_],0.2044,1,
[class^=panels_] > [class^=container_],0.2042,1,
[class^='chatContent_'] > [class^='messagesWrapper_'],0.2042,1,
[class^='nowPlayingColumn_'],0.2041,0,
[class^='membersWrap_'],0.2041,1,
[class^=container_] > [class^=base_],0.2039,1,
[class^='toolbar_'] > [class^='search_'],0.2034,1,
"[class^='status_'][style='background-color: rgb(240, 178, 50);']",0.2034,0,
[class^=tabBody_],0.2031,0,
[class^='lowerBadge_'],0.2031,0,
[class^=privateChannels_] > [class^=scroller_],0.2029,0,
[class^='searchResultsWrap_'],0.2028,0,
[class^=customizationSection_],0.2028,0,
[class^=chatContent_] > [class^=messagesWrapper_],0.2027,1,
[class^='upperBadge_'],0.2027,0,
"[class^='status_'][style='background-color: rgb(242, 63, 67);']",0.2025,0,
[class^=threadSuggestionBar_],0.2021,0,
[class^=panels_] > [class^=panel_],0.202,0,
[class^='searchResultsWrap_'],0.202,0,
[class^=columnHeading_],0.2016,0,
#app-mount [class^='divider_'],0.2016,2,
[class^=callContainer_],0.2014,0,
[class^='chatContent_'] > [class^='messagesWrapper_'],0.2011,1,
[class^='channelBottomBarArea_']:hover,0.201,0,
[class^=gradientTop_],0.2009,0,
[class^=iconWrapper_],0.2008,6,
[class^='guildSeparator_'],0.1998,2,
[class^='content_']>[class^='outer_'],0.1998,0,
[class^='privateChannels_'],0.1997,0,
[class^=container_] > [class^=base_],0.1996,1,
[class^=member_],0.1985,25,
[class^='content_']>[class^='outer_'],0.1984,0,
[class^='sectionDivider_'],0.198,0,
[class^=topControls_],0.198,0,
[class^='membersWrap_'],0.1974,1,
[class^=privateChannels_],0.1971,0,
[class^=content_] > [class^=resizeHandle_],0.1969,0,
[class^=replyBar_],0.196,0,
[class^='form_'] [class^='channelTextArea_'],0.1958,1,
[class^='divider_']:not(.isUnread_c2654d),0.194,2,
.wrapper_c51b4e:has(rect[fill='#f0b232']),0.1871,8,
[class^='listItem_'] [class^='wrapper_'] > [class^='svg_'] > mask,0.1624,39,
:root,0.1432,1,
.wrapper_c51b4e:has(rect[fill='#80848e']),0.1408,1,
.wrapper_c51b4e:has(rect[fill='#593695']),0.1371,0,
.wrapper_c51b4e:has(rect[fill='#f23f43']),0.1349,5,
.wrapper_c51b4e:has(rect),0.1342,26,
.wrapper_c51b4e:has(rect[fill='#23a55a']),0.1332,12,
[class^='svg_'] > foreignObject,0.123,99,
[role='button'] path[fill='var(--white-500)'],0.1159,0,
"svg[style='color: rgb(88, 101, 242);']",0.1122,13,
[class^=jumpToPresentBar_] > button,0.1117,2,
"[style='opacity: 1; background-color: rgb(35, 165, 90);']",0.1095,0,
:root,0.1094,1,
[class^='mask_'] > rect,0.1049,26,
[class^='mask_'] > foreignObject,0.1041,26,
[class^='mask_'] > svg,0.1035,1,
#app-mount button path[fill='var(--white-500)'],0.1031,0,
[class^='bannerSVGWrapper_'] > mask > circle,0.102,0,
svg[class^=slider_] > rect[fill='white'],0.1016,0,
:root,0.0946,1,
[class^='mask_'] > circle,0.0937,0,
[class^=callContainer_] [class^=topControls_] section,0.0882,0,
.container_a6d69a,0.0797,0,
.guilds_a4d4d9,0.0771,1,
.container_adcaac,0.0769,0,
.vc-spotify-time-left,0.0766,0,
.vc-spotify-time-right,0.0746,0,
.guilds_a4d4d9,0.0733,1,
.form_a7d72e,0.0731,1,
.container_fc4f04,0.0723,1,
.container_c2739c,0.072,0,
.form_a7d72e,0.0719,1,
*,0.0714,6196,
.timestamp_f9f2ca.latin24CompactTimeStamp_f9f2ca,0.0713,13,
.container_d1c246,0.0713,0,
.vc-ranb-button,0.0709,0,
.container_b2ca13,0.0707,1,
.wrapper_fea3ef,0.0706,1,
.statusBubbleOuter_d0a252,0.0706,0,
.container_fc4f04,0.0704,1,
.scroller_bf550a,0.0703,0,
.guilds_a4d4d9,0.0703,1,
.attachButton_f298d4,0.0702,1,
.container_a6d69a,0.07,0,
.clipContainer_b11c5e,0.0699,0,
.chat_a7d72e,0.0699,1,
.form_a7d72e,0.0698,1,
.panels_a4d4d9,0.0698,1,
".container_e85446:has(div[style='background-color: rgb(35, 165, 90);'])",0.0698,0,
.textArea_bdf0de,0.0697,1,
.content_a7d72e,0.0695,1,
.container_adcaac,0.0695,0,
.animatedContainer_fd6364,0.0693,1,
.guilds_a4d4d9,0.0692,1,
.container_fb4810,0.0692,0,
.separator_a0,0.0692,0,
".container_e85446:has(div[style='background-color: rgb(35, 165, 90);'])",0.0692,0,
.scroller_fb4810,0.0691,0,
.wordmarkWindows_a934d8 > svg,0.0691,1,
.wordmarkWindows_a934d8,0.0688,1,
.container_fc4f04,0.0688,1,
.scroller_fb4810,0.0688,0,
.guilds_a4d4d9,0.0687,1,
.container_e85446 > [class^='svg_'] > foreignObject > [class^='status_'],0.0686,0,
.newMessagesBar_cf58b5,0.0685,0,
.container_a4d4d9,0.0684,1,
.scroller_e2e187,0.0684,1,
.platform-osx .guilds_a4d4d9,0.0684,0,
.scroller_fb4810,0.0683,0,
.container_c75f85,0.0683,0,
.container_c2739c,0.0681,0,
html.theme-light,0.0681,0,
.container_a6d69a,0.0681,0,
.grabber_c7a159,0.068,0,
.scroller_fb4810,0.0679,0,
.theme-dark,0.0678,1,
.statusBubbleOuter_d0a252,0.0678,0,
.tabBody_c2739c,0.0677,0,
.container_d1c246,0.0676,0,
.horizontal_dc333f > .flex_dc333f,0.0673,0,
.separator_a0,0.0669,0,
.vc-spotify-time-left,0.0666,0,
.container_fc4f04,0.0662,1,
.vc-spotify-time-right,0.0661,0,
.wrapper_fea3ef.hidden_fea3ef,0.0661,0,
#vc-spotify-player,0.0004,0,
#vc-spotify-progress-bar [class^='bar_'],0.0004,0,
#vc-spotify-player,0.0004,0,
.overlay_f94206:after,0.0004,0,
#app-mount #vc-spotify-player,0.0003,0,
#vc-spotify-player,0.0003,0,
#vc-spotify-progress-bar,0.0003,0,
::placeholder,0.0003,0,
::selection,0.0003,0,
::-webkit-scrollbar-thumb,0.0003,0,
.overlay_f18fcb:after,0.0003,0,
#vc-spotify-player,0.0002,0,
1 Selector Time (ms) Matches Total
2 [class*=buttonColor_] 0.4697 0 38.4736
3 [class*=embedFull_] 0.446 2
4 [class^='chatContent_']:has([class^='typing_']:hover) 0.4342 0
5 #app-mount [class*=lookLink_][class*=colorPrimary_] 0.4331 0
6 [class*=lookFilled_][class*=colorPrimary_] 0.4315 0
7 [class^='chatContent_']:has([class^='messagesWrapper_']:hover) 0.4189 0
8 [class^='chatContent_']:has([class^='typing_']) > [class^='messagesWrapper_'] > [class^='jumpToPresentBar_'] 0.4146 0
9 #app-mount [class*=controlIcon_] 0.3911 0
10 [class^=searchFilter_] 0.3541 0
11 [class^='newBadge_'] 0.3385 0
12 [class^=friendRequestsButton_] [class^=numberBadge_] 0.3314 0
13 [class^=chat_] > [class*=container_] 0.32 0
14 [class^=videoControls_] 0.3099 0
15 [class*=backgroundAccent_] 0.3097 0
16 [class^=searchAnswer_] 0.3096 0
17 #app-mount [class^=partyStatus_] 0.3063 0
18 [class^='newChannel_'] 0.2995 0
19 [class^=iconBadge_]:not([class*=isCurrentUserConnected_]) 0.2892 0
20 #app-mount [class^=partyStatus_] [class^=anchor_] 0.2834 0
21 [class^=childWrapper_] 0.2817 15
22 [class^=overlayBottom_] > [class^=text-] 0.2786 0
23 [class^=gifFavoriteButton_] 0.2739 0
24 [class^='form_'] [class^='channelTextArea_'] 0.2703 1
25 [class^='panels_'] 0.2612 1
26 [class^=panels_] 0.2599 1
27 [class^=sidebar_] 0.2585 1
28 [class^=button_][class*=bannerColor_] 0.2576 0
29 [class^='content_']>[class^='outer_'] 0.2546 0
30 [class^=channelTextArea] > [class^=scrollableContainer] 0.2527 1
31 [class^='content_']>[class^='outer_'] 0.2511 0
32 [class^=sidebar_] > [class^=container_] 0.2439 1
33 [class^='channelBottomBarArea_'] 0.2423 1
34 [class^=panels_] > [class^=wrapper_] > [class^=container] 0.2386 0
35 [class^='form_'] > [class^='wrapper_'] 0.2365 0
36 [class^=navButton_][class*=navButtonActive_] 0.2356 0
37 [class^=sidebar_] 0.2315 1
38 [class^=membersWrap_] 0.2308 1
39 [class^=embedVideoActions_] > [class^=centerContent_] > [class^=wrapper_] 0.2273 0
40 [class^=categoryText_] 0.2255 0
41 [class^='form_'] > [class^='wrapper_'] 0.2233 0
42 [class^=sidebar_] 0.2232 1
43 [class^=members_] 0.2213 1
44 [class^='folderIconWrapper_'][style='background-color: rgba(88, 101, 242, 0.4);'] 0.2209 0
45 [class^=peopleColumn_] 0.2206 0
46 [class^=nowPlayingColumn_] 0.2206 0
47 [class^=message_][class*=replying_] 0.2181 0
48 [class^=message_][class*=mentioned_] 0.2175 5
49 [class^=bottomControls_] 0.2173 0
50 [class*=bannerVisible_] [class^=headerContent_] 0.2168 0
51 [class^=container_] > [class^=base_] 0.2148 1
52 [class^=tabBody_] 0.2147 0
53 [class^=privateChannels_] 0.2141 0
54 [class^='sidebar_'] > [class^='container_'] 0.2129 1
55 [class^='dot_'][class*='maskSecondary_'] 0.2125 0
56 [class^='status_'][style='background-color: rgb(35, 165, 90);'] 0.2124 0
57 [class^=privateChannels_] 0.2119 0
58 [class^='sidebar_'] > [class^='container_'] 0.2112 1
59 [class^='content_']>[class^='outer_'] 0.2105 0
60 [class^=channelBottomBarArea_] 0.2103 1
61 [class^='form_'] [class^='channelTextArea_'] 0.2101 1
62 [class^=privateChannels_] 0.21 0
63 [class^='channelAppLauncher_'] 0.2099 1
64 [class^=gradientBottom_] 0.2099 0
65 [class^=centerContent_] > [class^=wrapper_] > [class^=anchor_] 0.2099 0
66 [class^='form_'] > [class^='typing_'] 0.2095 0
67 [class^='content_']>[class^='outer_']>[class^='inner_'] 0.2094 0
68 #app-mount [class^=sidebar_] > [class^=container_] 0.2093 1
69 [class^='nowPlayingColumn_'] 0.209 0
70 [class^='status_'][style='background-color: rgb(128, 132, 142);'] 0.2087 0
71 [class^=peopleColumn_] 0.2082 0
72 [class^='nowPlayingColumn_'] 0.2079 0
73 [class^=session_] 0.2078 0
74 [class^='container_'] > [class^='base_'] 0.2076 1
75 [class^=searchResultsWrap_] 0.2076 0
76 [class^=panels_] > [class^=panel_] 0.2076 0
77 [class^='membersWrap_'] 0.2076 1
78 [class^=searchResultsWrap_] 0.2073 0
79 [class^=guildSeparator_] 0.2072 2
80 [class^=tableCell_] 0.2072 0
81 [class^=chat_] > [class^=content_] > [class^=container_] 0.2071 1
82 [class^='membersWrap_'] 0.207 1
83 [class^='sectionDivider_'] 0.2069 0
84 [class^='privateChannels_'] 0.2067 0
85 [class^='peopleColumn_'] 0.2065 0
86 [class^=attachedBars_] 0.2061 0
87 [class^=searchResultsWrap_] 0.206 0
88 [class^='callContainer_'] 0.2055 0
89 [class^='peopleColumn_'] 0.2051 0
90 [class^='notAppAsidePanel_'] > [class^='layerContainer_'] 0.2049 2
91 [class^='unreadPill_'][class*='endCap_'] 0.2048 0
92 [class^='panels_'] 0.2047 1
93 #app-mount [class^=sidebar_] 0.2045 1
94 [class^=chat_] 0.2044 1
95 [class^=panels_] 0.2044 1
96 [class^=panels_] > [class^=container_] 0.2042 1
97 [class^='chatContent_'] > [class^='messagesWrapper_'] 0.2042 1
98 [class^='nowPlayingColumn_'] 0.2041 0
99 [class^='membersWrap_'] 0.2041 1
100 [class^=container_] > [class^=base_] 0.2039 1
101 [class^='toolbar_'] > [class^='search_'] 0.2034 1
102 [class^='status_'][style='background-color: rgb(240, 178, 50);'] 0.2034 0
103 [class^=tabBody_] 0.2031 0
104 [class^='lowerBadge_'] 0.2031 0
105 [class^=privateChannels_] > [class^=scroller_] 0.2029 0
106 [class^='searchResultsWrap_'] 0.2028 0
107 [class^=customizationSection_] 0.2028 0
108 [class^=chatContent_] > [class^=messagesWrapper_] 0.2027 1
109 [class^='upperBadge_'] 0.2027 0
110 [class^='status_'][style='background-color: rgb(242, 63, 67);'] 0.2025 0
111 [class^=threadSuggestionBar_] 0.2021 0
112 [class^=panels_] > [class^=panel_] 0.202 0
113 [class^='searchResultsWrap_'] 0.202 0
114 [class^=columnHeading_] 0.2016 0
115 #app-mount [class^='divider_'] 0.2016 2
116 [class^=callContainer_] 0.2014 0
117 [class^='chatContent_'] > [class^='messagesWrapper_'] 0.2011 1
118 [class^='channelBottomBarArea_']:hover 0.201 0
119 [class^=gradientTop_] 0.2009 0
120 [class^=iconWrapper_] 0.2008 6
121 [class^='guildSeparator_'] 0.1998 2
122 [class^='content_']>[class^='outer_'] 0.1998 0
123 [class^='privateChannels_'] 0.1997 0
124 [class^=container_] > [class^=base_] 0.1996 1
125 [class^=member_] 0.1985 25
126 [class^='content_']>[class^='outer_'] 0.1984 0
127 [class^='sectionDivider_'] 0.198 0
128 [class^=topControls_] 0.198 0
129 [class^='membersWrap_'] 0.1974 1
130 [class^=privateChannels_] 0.1971 0
131 [class^=content_] > [class^=resizeHandle_] 0.1969 0
132 [class^=replyBar_] 0.196 0
133 [class^='form_'] [class^='channelTextArea_'] 0.1958 1
134 [class^='divider_']:not(.isUnread_c2654d) 0.194 2
135 .wrapper_c51b4e:has(rect[fill='#f0b232']) 0.1871 8
136 [class^='listItem_'] [class^='wrapper_'] > [class^='svg_'] > mask 0.1624 39
137 :root 0.1432 1
138 .wrapper_c51b4e:has(rect[fill='#80848e']) 0.1408 1
139 .wrapper_c51b4e:has(rect[fill='#593695']) 0.1371 0
140 .wrapper_c51b4e:has(rect[fill='#f23f43']) 0.1349 5
141 .wrapper_c51b4e:has(rect) 0.1342 26
142 .wrapper_c51b4e:has(rect[fill='#23a55a']) 0.1332 12
143 [class^='svg_'] > foreignObject 0.123 99
144 [role='button'] path[fill='var(--white-500)'] 0.1159 0
145 svg[style='color: rgb(88, 101, 242);'] 0.1122 13
146 [class^=jumpToPresentBar_] > button 0.1117 2
147 [style='opacity: 1; background-color: rgb(35, 165, 90);'] 0.1095 0
148 :root 0.1094 1
149 [class^='mask_'] > rect 0.1049 26
150 [class^='mask_'] > foreignObject 0.1041 26
151 [class^='mask_'] > svg 0.1035 1
152 #app-mount button path[fill='var(--white-500)'] 0.1031 0
153 [class^='bannerSVGWrapper_'] > mask > circle 0.102 0
154 svg[class^=slider_] > rect[fill='white'] 0.1016 0
155 :root 0.0946 1
156 [class^='mask_'] > circle 0.0937 0
157 [class^=callContainer_] [class^=topControls_] section 0.0882 0
158 .container_a6d69a 0.0797 0
159 .guilds_a4d4d9 0.0771 1
160 .container_adcaac 0.0769 0
161 .vc-spotify-time-left 0.0766 0
162 .vc-spotify-time-right 0.0746 0
163 .guilds_a4d4d9 0.0733 1
164 .form_a7d72e 0.0731 1
165 .container_fc4f04 0.0723 1
166 .container_c2739c 0.072 0
167 .form_a7d72e 0.0719 1
168 * 0.0714 6196
169 .timestamp_f9f2ca.latin24CompactTimeStamp_f9f2ca 0.0713 13
170 .container_d1c246 0.0713 0
171 .vc-ranb-button 0.0709 0
172 .container_b2ca13 0.0707 1
173 .wrapper_fea3ef 0.0706 1
174 .statusBubbleOuter_d0a252 0.0706 0
175 .container_fc4f04 0.0704 1
176 .scroller_bf550a 0.0703 0
177 .guilds_a4d4d9 0.0703 1
178 .attachButton_f298d4 0.0702 1
179 .container_a6d69a 0.07 0
180 .clipContainer_b11c5e 0.0699 0
181 .chat_a7d72e 0.0699 1
182 .form_a7d72e 0.0698 1
183 .panels_a4d4d9 0.0698 1
184 .container_e85446:has(div[style='background-color: rgb(35, 165, 90);']) 0.0698 0
185 .textArea_bdf0de 0.0697 1
186 .content_a7d72e 0.0695 1
187 .container_adcaac 0.0695 0
188 .animatedContainer_fd6364 0.0693 1
189 .guilds_a4d4d9 0.0692 1
190 .container_fb4810 0.0692 0
191 .separator_a0 0.0692 0
192 .container_e85446:has(div[style='background-color: rgb(35, 165, 90);']) 0.0692 0
193 .scroller_fb4810 0.0691 0
194 .wordmarkWindows_a934d8 > svg 0.0691 1
195 .wordmarkWindows_a934d8 0.0688 1
196 .container_fc4f04 0.0688 1
197 .scroller_fb4810 0.0688 0
198 .guilds_a4d4d9 0.0687 1
199 .container_e85446 > [class^='svg_'] > foreignObject > [class^='status_'] 0.0686 0
200 .newMessagesBar_cf58b5 0.0685 0
201 .container_a4d4d9 0.0684 1
202 .scroller_e2e187 0.0684 1
203 .platform-osx .guilds_a4d4d9 0.0684 0
204 .scroller_fb4810 0.0683 0
205 .container_c75f85 0.0683 0
206 .container_c2739c 0.0681 0
207 html.theme-light 0.0681 0
208 .container_a6d69a 0.0681 0
209 .grabber_c7a159 0.068 0
210 .scroller_fb4810 0.0679 0
211 .theme-dark 0.0678 1
212 .statusBubbleOuter_d0a252 0.0678 0
213 .tabBody_c2739c 0.0677 0
214 .container_d1c246 0.0676 0
215 .horizontal_dc333f > .flex_dc333f 0.0673 0
216 .separator_a0 0.0669 0
217 .vc-spotify-time-left 0.0666 0
218 .container_fc4f04 0.0662 1
219 .vc-spotify-time-right 0.0661 0
220 .wrapper_fea3ef.hidden_fea3ef 0.0661 0
221 #vc-spotify-player 0.0004 0
222 #vc-spotify-progress-bar [class^='bar_'] 0.0004 0
223 #vc-spotify-player 0.0004 0
224 .overlay_f94206:after 0.0004 0
225 #app-mount #vc-spotify-player 0.0003 0
226 #vc-spotify-player 0.0003 0
227 #vc-spotify-progress-bar 0.0003 0
228 ::placeholder 0.0003 0
229 ::selection 0.0003 0
230 ::-webkit-scrollbar-thumb 0.0003 0
231 .overlay_f18fcb:after 0.0003 0
232 #vc-spotify-player 0.0002 0

View File

@ -0,0 +1,231 @@
Selector,Time (ms),Matches,Total
[class^='chatContent_']:has([class^='messagesWrapper_']:hover),0.4053,0,29.2904
[class^='chatContent_']:has([class^='typing_']:hover),0.3815,0,
[class^=chat_] > [class*=container_],0.3098,0,
[class^=chat_] > [class^=content_] > [class^=container_],0.238,0,
[class*=backgroundAccent_],0.2297,0,
[class^='form_'] [class^='channelTextArea_'],0.2236,1,
[class^='membersWrap_'],0.2207,0,
[class^=panels_],0.2156,1,
[class^=centerContent_] > [class^=wrapper_] > [class^=anchor_],0.2081,0,
[class^=searchResultsWrap_],0.1998,0,
[class^='content_']>[class^='outer_'],0.1997,0,
[class^='form_'] > [class^='wrapper_'],0.1982,0,
[class^=videoControls_],0.1967,0,
[class^=sidebar_] > [class^=container_],0.1947,1,
[class^=privateChannels_],0.1911,0,
[class^='content_'] > [class^='outer_'],0.19,0,
"[class^='status_'][style='background-color: rgb(240, 178, 50);']",0.19,0,
[class^='form_'] > [class^='wrapper_'],0.1888,0,
[class^=embedVideoActions_] > [class^=centerContent_] > [class^=wrapper_],0.1887,0,
[class^=iconBadge_]:not([class*=isCurrentUserConnected_]),0.1881,1,
[class^='sidebar_'] > [class^='container_'],0.1842,1,
[class^='peopleColumn_'],0.1839,0,
[class^='lowerBadge_'],0.1839,0,
[class^='gradientBottom_'],0.1836,0,
[class^=overlayBottom_] > [class^=text-],0.1834,0,
"[class^='status_'][style='background-color: rgb(35, 165, 90);']",0.1834,0,
[class^='chatContent_']:has([class^='typing_']) > [class^='messagesWrapper_'] > [class^='jumpToPresentBar_'],0.1834,0,
"[class^='status_'][style='background-color: rgb(128, 132, 142);']",0.1834,0,
"[class^='status_'][style='background-color: rgb(242, 63, 67);']",0.1832,0,
[class^='form_'] > [class^='typing_'],0.183,1,
[class^=panels_],0.1826,1,
[class^='searchResultsWrap_'],0.1826,0,
[class^='callContainer_'],0.182,0,
[class^='upperBadge_'],0.1817,0,
[class^=childWrapper_],0.1817,15,
[class^=members_],0.1815,0,
[class^=button_][class*=bannerColor_],0.181,0,
[class^='gradientTop_'],0.181,0,
[class^='sidebar_'] > [class^='container_'],0.1808,1,
[class^=searchFilter_],0.1807,0,
[class^=privateChannels_],0.1804,0,
[class^='panels_'],0.1794,1,
[class^=member_],0.1791,0,
[class^='membersWrap_'],0.1791,0,
[class^=message_][class*=replying_],0.179,0,
[class^='unreadPill_'][class*='endCap_'],0.1788,0,
[class^='privateChannels_'],0.1787,0,
[class^='bottomControls_'],0.1787,0,
[class^=message_][class*=mentioned_],0.1784,5,
[class^='content_'] > [class^='outer_'],0.1784,0,
#app-mount [class^=partyStatus_],0.1784,0,
[class^=searchAnswer_],0.1781,0,
[class^=panels_] > [class^=wrapper_] > [class^=container],0.178,0,
[class^='peopleColumn_'],0.1779,0,
[class^='form_'] [class^='channelTextArea_'],0.1779,1,
#app-mount [class^=partyStatus_] [class^=anchor_],0.1776,0,
[class^='panels_'],0.1766,1,
[class^='form_'] [class^='channelTextArea_'],0.1766,1,
[class^=replyBar_],0.1765,0,
[class^='privateChannels_'],0.1765,0,
[class^=channelBottomBarArea_],0.1764,1,
[class^='divider_']:not(.isUnread_c2654d),0.1763,2,
[class^=navButton_][class*=navButtonActive_],0.1762,0,
[class^=container_] > [class^=base_],0.1756,1,
[class^='nowPlayingColumn_'],0.1755,0,
[class^='membersWrap_'],0.1755,0,
[class^=sidebar_],0.1753,1,
[class^='newChannel_'],0.1752,0,
[class^=nowPlayingColumn_],0.1752,0,
[class^=guildSeparator_],0.1751,2,
[class^='topControls_'],0.175,0,
[class^='container_'] > [class^='base_'],0.1748,1,
[class^=panels_] > [class^=container_],0.1742,1,
[class^='notAppAsidePanel_'] > [class^='layerContainer_'],0.1742,2,
[class^=columnHeading_],0.174,0,
[class^='channelBottomBarArea_']:hover,0.1739,0,
[class^=attachedBars_],0.1738,0,
[class^='membersWrap_'],0.1738,0,
[class^=searchResultsWrap_],0.1737,0,
[class^=gifFavoriteButton_],0.1736,0,
[class^=membersWrap_],0.1736,0,
[class^=customizationSection_],0.1732,0,
#app-mount [class^=sidebar_] > [class^=container_],0.1727,1,
[class^='newBadge_'],0.1726,0,
[class^='channelBottomBarArea_'],0.1723,1,
[class^=sidebar_],0.1722,1,
[class^=privateChannels_],0.1722,0,
[class^=sidebar_],0.1721,1,
[class^='toolbar_'] > [class^='search_'],0.172,1,
[class^=privateChannels_],0.1713,0,
[class^=friendRequestsButton_] [class^=numberBadge_],0.1713,0,
[class*=bannerVisible_] [class^=headerContent_],0.1712,0,
[class^=iconWrapper_],0.1712,7,
[class^=chatContent_] > [class^=messagesWrapper_],0.1712,1,
[class^='content_']>[class^='outer_']>[class^='inner_'],0.171,0,
[class^='nowPlayingColumn_'],0.1709,0,
[class^=peopleColumn_],0.1709,0,
[class^='content_']>[class^='outer_'],0.1707,0,
[class^=searchResultsWrap_],0.1707,0,
[class^='chatContent_'] > [class^='messagesWrapper_'],0.1707,1,
[class^=tableCell_],0.1707,0,
[class^=tabBody_],0.1706,0,
[class^=peopleColumn_],0.1705,0,
[class^=tabBody_],0.1703,0,
[class^='dot_'][class*='maskSecondary_'],0.1702,0,
[class^='sectionDivider_'],0.1701,1,
[class^='searchResultsWrap_'],0.1701,0,
[class^=privateChannels_] > [class^=scroller_],0.17,0,
[class^=container_] > [class^=base_],0.17,1,
[class^='content_'] > [class^='outer_'],0.1699,0,
[class^=chat_],0.1696,1,
[class^='channelAppLauncher_'],0.1696,1,
[class^='nowPlayingColumn_'],0.1696,0,
#app-mount [class^=sidebar_],0.1689,1,
[class^='guildSeparator_'],0.1688,2,
[class^=panels_] > [class^=panel_],0.1686,0,
[class^=threadSuggestionBar_],0.1685,0,
[class^='chatContent_'] > [class^='messagesWrapper_'],0.1684,1,
[class^=session_],0.1684,0,
[class^=categoryText_],0.1683,0,
[class^=channelTextArea] > [class^=scrollableContainer],0.1679,1,
[class^=panels_] > [class^=panel_],0.1677,0,
"[class^='folderIconWrapper_'][style='background-color: rgba(88, 101, 242, 0.4);']",0.1674,0,
[class^='sectionDivider_'],0.1671,1,
[class^='callContainer_'],0.1669,0,
[class^=content_] > [class^=resizeHandle_],0.1663,0,
[class^=container_] > [class^=base_],0.1661,1,
#app-mount [class^='divider_'],0.1639,2,
[class^='listItem_'] [class^='wrapper_'] > [class^='svg_'] > mask,0.123,45,
*,0.1194,5612,
[class^='mask_'] > foreignObject,0.1165,1,
[class^='bannerSVGWrapper_'] > mask > circle,0.1122,0,
[class^='mask_'] > rect,0.1074,1,
[class^='svg_'] > foreignObject,0.1069,100,
[class^='mask_'] > svg,0.1043,0,
#app-mount .controlIcon_ef18ee,0.1034,0,
#app-mount .lookLink_dd4f85.colorPrimary_dd4f85,0.1023,0,
[class^='mask_'] > circle,0.099,0,
"[style='opacity: 1; background-color: rgb(35, 165, 90);']",0.0979,0,
"svg[style='color: rgb(88, 101, 242);']",0.0884,13,
#app-mount button path[fill='var(--white-500)'],0.087,0,
[role='button'] path[fill='var(--white-500)'],0.083,0,
:root,0.0804,1,
:root,0.0792,1,
[class^='callContainer_'] [class^='topControls_'] section,0.0784,0,
svg[class^=slider_] > rect[fill='white'],0.0784,0,
:root,0.0767,1,
[class^=jumpToPresentBar_] > button,0.0735,0,
.wrapper_c51b4e:has(rect[fill='#80848e']),0.0695,1,
.textArea_bdf0de,0.0636,1,
.attachButton_f298d4,0.0619,1,
.wrapper_c51b4e:has(rect[fill='#593695']),0.0614,0,
.wrapper_c51b4e:has(rect[fill='#f0b232']),0.0609,0,
.guilds_a4d4d9,0.0607,1,
.wrapper_c51b4e:has(rect),0.0607,1,
.wrapper_c51b4e:has(rect[fill='#f23f43']),0.0606,0,
.theme-dark,0.0602,1,
.wrapper_c51b4e:has(rect[fill='#23a55a']),0.0597,0,
.lookFilled_dd4f85.colorPrimary_dd4f85,0.0584,0,
.container_fc4f04,0.0581,1,
.guilds_a4d4d9,0.058,1,
.timestamp_f9f2ca.latin24CompactTimeStamp_f9f2ca,0.0577,32,
.container_c2739c,0.0572,0,
.container_b2ca13,0.0571,1,
".container_e85446:has(div[style='background-color: rgb(35, 165, 90);'])",0.0568,0,
.embedFull_b0068a,0.0567,1,
.separator_a0,0.0564,0,
.scroller_fb4810,0.0562,0,
.scroller_fb4810,0.0562,0,
.statusBubbleOuter_d0a252,0.056,0,
.statusBubbleOuter_d0a252,0.0559,0,
.container_a4d4d9,0.0558,1,
.container_a6d69a,0.0557,0,
.container_fc4f04,0.0557,1,
.container_a6d69a,0.0557,0,
.form_a7d72e,0.0556,1,
.wrapper_fea3ef.hidden_fea3ef,0.0556,0,
.guilds_a4d4d9,0.0555,1,
.vc-ranb-button,0.0555,0,
.horizontal_dc333f > .flex_dc333f,0.0555,0,
.wordmarkWindows_a934d8 > svg,0.0554,1,
".container_e85446:has(div[style='background-color: rgb(35, 165, 90);'])",0.0554,0,
.vc-spotify-time-right,0.0553,0,
.newMessagesBar_cf58b5,0.0553,0,
.chat_a7d72e,0.0552,1,
.panels_a4d4d9,0.0552,1,
.container_fb4810,0.0552,0,
.vc-spotify-time-right,0.0552,0,
.content_a7d72e,0.0551,1,
.container_d1c246,0.0551,0,
.form_a7d72e,0.0551,1,
.wordmarkWindows_a934d8,0.0551,1,
.vc-spotify-time-left,0.0551,0,
.scroller_bf550a,0.055,0,
.clipContainer_b11c5e,0.0549,0,
.vc-spotify-time-left,0.0549,0,
.wrapper_fea3ef,0.0549,1,
.grabber_c7a159,0.0549,0,
.platform-osx .guilds_a4d4d9,0.0548,0,
.container_fc4f04,0.0548,1,
.guilds_a4d4d9,0.0547,1,
.container_a6d69a,0.0547,0,
.scroller_e2e187,0.0546,1,
.container_c75f85,0.0546,0,
.container_c2739c,0.0546,0,
.animatedContainer_fd6364,0.0544,0,
.container_e85446 > [class^='svg_'] > foreignObject > [class^='status_'],0.0544,0,
.container_fc4f04,0.0544,1,
.container_d1c246,0.0544,0,
.separator_a0,0.0544,0,
.container_adcaac,0.0542,0,
.guilds_a4d4d9,0.0542,1,
html.theme-light,0.054,0,
.form_a7d72e,0.0539,1,
.tabBody_c2739c,0.0539,0,
.scroller_fb4810,0.0539,0,
.container_adcaac,0.0538,0,
.scroller_fb4810,0.0533,0,
::selection,0.0028,0,
#vc-spotify-player,0.0003,0,
#vc-spotify-player,0.0003,0,
#vc-spotify-player,0.0003,0,
#vc-spotify-progress-bar,0.0003,0,
#vc-spotify-progress-bar [class^='bar_'],0.0003,0,
.overlay_f94206:after,0.0003,0,
#app-mount #vc-spotify-player,0.0002,0,
#vc-spotify-player,0.0002,0,
.overlay_f18fcb:after,0.0002,0,
::-webkit-scrollbar-thumb,0.0001,0,
::placeholder,0.0001,0,
1 Selector Time (ms) Matches Total
2 [class^='chatContent_']:has([class^='messagesWrapper_']:hover) 0.4053 0 29.2904
3 [class^='chatContent_']:has([class^='typing_']:hover) 0.3815 0
4 [class^=chat_] > [class*=container_] 0.3098 0
5 [class^=chat_] > [class^=content_] > [class^=container_] 0.238 0
6 [class*=backgroundAccent_] 0.2297 0
7 [class^='form_'] [class^='channelTextArea_'] 0.2236 1
8 [class^='membersWrap_'] 0.2207 0
9 [class^=panels_] 0.2156 1
10 [class^=centerContent_] > [class^=wrapper_] > [class^=anchor_] 0.2081 0
11 [class^=searchResultsWrap_] 0.1998 0
12 [class^='content_']>[class^='outer_'] 0.1997 0
13 [class^='form_'] > [class^='wrapper_'] 0.1982 0
14 [class^=videoControls_] 0.1967 0
15 [class^=sidebar_] > [class^=container_] 0.1947 1
16 [class^=privateChannels_] 0.1911 0
17 [class^='content_'] > [class^='outer_'] 0.19 0
18 [class^='status_'][style='background-color: rgb(240, 178, 50);'] 0.19 0
19 [class^='form_'] > [class^='wrapper_'] 0.1888 0
20 [class^=embedVideoActions_] > [class^=centerContent_] > [class^=wrapper_] 0.1887 0
21 [class^=iconBadge_]:not([class*=isCurrentUserConnected_]) 0.1881 1
22 [class^='sidebar_'] > [class^='container_'] 0.1842 1
23 [class^='peopleColumn_'] 0.1839 0
24 [class^='lowerBadge_'] 0.1839 0
25 [class^='gradientBottom_'] 0.1836 0
26 [class^=overlayBottom_] > [class^=text-] 0.1834 0
27 [class^='status_'][style='background-color: rgb(35, 165, 90);'] 0.1834 0
28 [class^='chatContent_']:has([class^='typing_']) > [class^='messagesWrapper_'] > [class^='jumpToPresentBar_'] 0.1834 0
29 [class^='status_'][style='background-color: rgb(128, 132, 142);'] 0.1834 0
30 [class^='status_'][style='background-color: rgb(242, 63, 67);'] 0.1832 0
31 [class^='form_'] > [class^='typing_'] 0.183 1
32 [class^=panels_] 0.1826 1
33 [class^='searchResultsWrap_'] 0.1826 0
34 [class^='callContainer_'] 0.182 0
35 [class^='upperBadge_'] 0.1817 0
36 [class^=childWrapper_] 0.1817 15
37 [class^=members_] 0.1815 0
38 [class^=button_][class*=bannerColor_] 0.181 0
39 [class^='gradientTop_'] 0.181 0
40 [class^='sidebar_'] > [class^='container_'] 0.1808 1
41 [class^=searchFilter_] 0.1807 0
42 [class^=privateChannels_] 0.1804 0
43 [class^='panels_'] 0.1794 1
44 [class^=member_] 0.1791 0
45 [class^='membersWrap_'] 0.1791 0
46 [class^=message_][class*=replying_] 0.179 0
47 [class^='unreadPill_'][class*='endCap_'] 0.1788 0
48 [class^='privateChannels_'] 0.1787 0
49 [class^='bottomControls_'] 0.1787 0
50 [class^=message_][class*=mentioned_] 0.1784 5
51 [class^='content_'] > [class^='outer_'] 0.1784 0
52 #app-mount [class^=partyStatus_] 0.1784 0
53 [class^=searchAnswer_] 0.1781 0
54 [class^=panels_] > [class^=wrapper_] > [class^=container] 0.178 0
55 [class^='peopleColumn_'] 0.1779 0
56 [class^='form_'] [class^='channelTextArea_'] 0.1779 1
57 #app-mount [class^=partyStatus_] [class^=anchor_] 0.1776 0
58 [class^='panels_'] 0.1766 1
59 [class^='form_'] [class^='channelTextArea_'] 0.1766 1
60 [class^=replyBar_] 0.1765 0
61 [class^='privateChannels_'] 0.1765 0
62 [class^=channelBottomBarArea_] 0.1764 1
63 [class^='divider_']:not(.isUnread_c2654d) 0.1763 2
64 [class^=navButton_][class*=navButtonActive_] 0.1762 0
65 [class^=container_] > [class^=base_] 0.1756 1
66 [class^='nowPlayingColumn_'] 0.1755 0
67 [class^='membersWrap_'] 0.1755 0
68 [class^=sidebar_] 0.1753 1
69 [class^='newChannel_'] 0.1752 0
70 [class^=nowPlayingColumn_] 0.1752 0
71 [class^=guildSeparator_] 0.1751 2
72 [class^='topControls_'] 0.175 0
73 [class^='container_'] > [class^='base_'] 0.1748 1
74 [class^=panels_] > [class^=container_] 0.1742 1
75 [class^='notAppAsidePanel_'] > [class^='layerContainer_'] 0.1742 2
76 [class^=columnHeading_] 0.174 0
77 [class^='channelBottomBarArea_']:hover 0.1739 0
78 [class^=attachedBars_] 0.1738 0
79 [class^='membersWrap_'] 0.1738 0
80 [class^=searchResultsWrap_] 0.1737 0
81 [class^=gifFavoriteButton_] 0.1736 0
82 [class^=membersWrap_] 0.1736 0
83 [class^=customizationSection_] 0.1732 0
84 #app-mount [class^=sidebar_] > [class^=container_] 0.1727 1
85 [class^='newBadge_'] 0.1726 0
86 [class^='channelBottomBarArea_'] 0.1723 1
87 [class^=sidebar_] 0.1722 1
88 [class^=privateChannels_] 0.1722 0
89 [class^=sidebar_] 0.1721 1
90 [class^='toolbar_'] > [class^='search_'] 0.172 1
91 [class^=privateChannels_] 0.1713 0
92 [class^=friendRequestsButton_] [class^=numberBadge_] 0.1713 0
93 [class*=bannerVisible_] [class^=headerContent_] 0.1712 0
94 [class^=iconWrapper_] 0.1712 7
95 [class^=chatContent_] > [class^=messagesWrapper_] 0.1712 1
96 [class^='content_']>[class^='outer_']>[class^='inner_'] 0.171 0
97 [class^='nowPlayingColumn_'] 0.1709 0
98 [class^=peopleColumn_] 0.1709 0
99 [class^='content_']>[class^='outer_'] 0.1707 0
100 [class^=searchResultsWrap_] 0.1707 0
101 [class^='chatContent_'] > [class^='messagesWrapper_'] 0.1707 1
102 [class^=tableCell_] 0.1707 0
103 [class^=tabBody_] 0.1706 0
104 [class^=peopleColumn_] 0.1705 0
105 [class^=tabBody_] 0.1703 0
106 [class^='dot_'][class*='maskSecondary_'] 0.1702 0
107 [class^='sectionDivider_'] 0.1701 1
108 [class^='searchResultsWrap_'] 0.1701 0
109 [class^=privateChannels_] > [class^=scroller_] 0.17 0
110 [class^=container_] > [class^=base_] 0.17 1
111 [class^='content_'] > [class^='outer_'] 0.1699 0
112 [class^=chat_] 0.1696 1
113 [class^='channelAppLauncher_'] 0.1696 1
114 [class^='nowPlayingColumn_'] 0.1696 0
115 #app-mount [class^=sidebar_] 0.1689 1
116 [class^='guildSeparator_'] 0.1688 2
117 [class^=panels_] > [class^=panel_] 0.1686 0
118 [class^=threadSuggestionBar_] 0.1685 0
119 [class^='chatContent_'] > [class^='messagesWrapper_'] 0.1684 1
120 [class^=session_] 0.1684 0
121 [class^=categoryText_] 0.1683 0
122 [class^=channelTextArea] > [class^=scrollableContainer] 0.1679 1
123 [class^=panels_] > [class^=panel_] 0.1677 0
124 [class^='folderIconWrapper_'][style='background-color: rgba(88, 101, 242, 0.4);'] 0.1674 0
125 [class^='sectionDivider_'] 0.1671 1
126 [class^='callContainer_'] 0.1669 0
127 [class^=content_] > [class^=resizeHandle_] 0.1663 0
128 [class^=container_] > [class^=base_] 0.1661 1
129 #app-mount [class^='divider_'] 0.1639 2
130 [class^='listItem_'] [class^='wrapper_'] > [class^='svg_'] > mask 0.123 45
131 * 0.1194 5612
132 [class^='mask_'] > foreignObject 0.1165 1
133 [class^='bannerSVGWrapper_'] > mask > circle 0.1122 0
134 [class^='mask_'] > rect 0.1074 1
135 [class^='svg_'] > foreignObject 0.1069 100
136 [class^='mask_'] > svg 0.1043 0
137 #app-mount .controlIcon_ef18ee 0.1034 0
138 #app-mount .lookLink_dd4f85.colorPrimary_dd4f85 0.1023 0
139 [class^='mask_'] > circle 0.099 0
140 [style='opacity: 1; background-color: rgb(35, 165, 90);'] 0.0979 0
141 svg[style='color: rgb(88, 101, 242);'] 0.0884 13
142 #app-mount button path[fill='var(--white-500)'] 0.087 0
143 [role='button'] path[fill='var(--white-500)'] 0.083 0
144 :root 0.0804 1
145 :root 0.0792 1
146 [class^='callContainer_'] [class^='topControls_'] section 0.0784 0
147 svg[class^=slider_] > rect[fill='white'] 0.0784 0
148 :root 0.0767 1
149 [class^=jumpToPresentBar_] > button 0.0735 0
150 .wrapper_c51b4e:has(rect[fill='#80848e']) 0.0695 1
151 .textArea_bdf0de 0.0636 1
152 .attachButton_f298d4 0.0619 1
153 .wrapper_c51b4e:has(rect[fill='#593695']) 0.0614 0
154 .wrapper_c51b4e:has(rect[fill='#f0b232']) 0.0609 0
155 .guilds_a4d4d9 0.0607 1
156 .wrapper_c51b4e:has(rect) 0.0607 1
157 .wrapper_c51b4e:has(rect[fill='#f23f43']) 0.0606 0
158 .theme-dark 0.0602 1
159 .wrapper_c51b4e:has(rect[fill='#23a55a']) 0.0597 0
160 .lookFilled_dd4f85.colorPrimary_dd4f85 0.0584 0
161 .container_fc4f04 0.0581 1
162 .guilds_a4d4d9 0.058 1
163 .timestamp_f9f2ca.latin24CompactTimeStamp_f9f2ca 0.0577 32
164 .container_c2739c 0.0572 0
165 .container_b2ca13 0.0571 1
166 .container_e85446:has(div[style='background-color: rgb(35, 165, 90);']) 0.0568 0
167 .embedFull_b0068a 0.0567 1
168 .separator_a0 0.0564 0
169 .scroller_fb4810 0.0562 0
170 .scroller_fb4810 0.0562 0
171 .statusBubbleOuter_d0a252 0.056 0
172 .statusBubbleOuter_d0a252 0.0559 0
173 .container_a4d4d9 0.0558 1
174 .container_a6d69a 0.0557 0
175 .container_fc4f04 0.0557 1
176 .container_a6d69a 0.0557 0
177 .form_a7d72e 0.0556 1
178 .wrapper_fea3ef.hidden_fea3ef 0.0556 0
179 .guilds_a4d4d9 0.0555 1
180 .vc-ranb-button 0.0555 0
181 .horizontal_dc333f > .flex_dc333f 0.0555 0
182 .wordmarkWindows_a934d8 > svg 0.0554 1
183 .container_e85446:has(div[style='background-color: rgb(35, 165, 90);']) 0.0554 0
184 .vc-spotify-time-right 0.0553 0
185 .newMessagesBar_cf58b5 0.0553 0
186 .chat_a7d72e 0.0552 1
187 .panels_a4d4d9 0.0552 1
188 .container_fb4810 0.0552 0
189 .vc-spotify-time-right 0.0552 0
190 .content_a7d72e 0.0551 1
191 .container_d1c246 0.0551 0
192 .form_a7d72e 0.0551 1
193 .wordmarkWindows_a934d8 0.0551 1
194 .vc-spotify-time-left 0.0551 0
195 .scroller_bf550a 0.055 0
196 .clipContainer_b11c5e 0.0549 0
197 .vc-spotify-time-left 0.0549 0
198 .wrapper_fea3ef 0.0549 1
199 .grabber_c7a159 0.0549 0
200 .platform-osx .guilds_a4d4d9 0.0548 0
201 .container_fc4f04 0.0548 1
202 .guilds_a4d4d9 0.0547 1
203 .container_a6d69a 0.0547 0
204 .scroller_e2e187 0.0546 1
205 .container_c75f85 0.0546 0
206 .container_c2739c 0.0546 0
207 .animatedContainer_fd6364 0.0544 0
208 .container_e85446 > [class^='svg_'] > foreignObject > [class^='status_'] 0.0544 0
209 .container_fc4f04 0.0544 1
210 .container_d1c246 0.0544 0
211 .separator_a0 0.0544 0
212 .container_adcaac 0.0542 0
213 .guilds_a4d4d9 0.0542 1
214 html.theme-light 0.054 0
215 .form_a7d72e 0.0539 1
216 .tabBody_c2739c 0.0539 0
217 .scroller_fb4810 0.0539 0
218 .container_adcaac 0.0538 0
219 .scroller_fb4810 0.0533 0
220 ::selection 0.0028 0
221 #vc-spotify-player 0.0003 0
222 #vc-spotify-player 0.0003 0
223 #vc-spotify-player 0.0003 0
224 #vc-spotify-progress-bar 0.0003 0
225 #vc-spotify-progress-bar [class^='bar_'] 0.0003 0
226 .overlay_f94206:after 0.0003 0
227 #app-mount #vc-spotify-player 0.0002 0
228 #vc-spotify-player 0.0002 0
229 .overlay_f18fcb:after 0.0002 0
230 ::-webkit-scrollbar-thumb 0.0001 0
231 ::placeholder 0.0001 0

View File

@ -0,0 +1,215 @@
{
"name": "systemtheme",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "systemtheme",
"version": "1.0.0",
"license": "MIT",
"devDependencies": {
"chokidar": "^3.6.0",
"dotenv": "^16.4.5"
}
},
"node_modules/anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/binary-extensions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/braces": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/chokidar": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dev": true,
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"funding": {
"url": "https://paulmillr.com/funding/"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/dotenv": {
"version": "16.4.5",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
"dev": true,
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
}
}
}

View File

@ -0,0 +1,14 @@
{
"name": "systemtheme",
"version": "1.0.0",
"scripts": {
"dev": "node scripts/dev.js",
"build": "node scripts/build.js"
},
"author": "refact0r",
"license": "MIT",
"devDependencies": {
"chokidar": "^3.6.0",
"dotenv": "^16.4.5"
}
}

View File

@ -0,0 +1,46 @@
const fs = require('fs');
const path = require('path');
const chokidar = require('chokidar');
require('dotenv').config({ path: path.join(__dirname, '..', '.env') });
const srcDir = path.join(__dirname, '..', 'src');
const baseFile = path.join(__dirname, '..', 'system24.theme.css');
const outputFile = process.env.DEV_OUTPUT_PATH;
const pathToIgnore = 'https://refact0r.github.io/system24/';
if (!outputFile) {
console.error('DEV_OUTPUT_PATH is not set in .env file');
process.exit(1);
}
async function replaceImports(content) {
const importRegex = /@import url\('([^']+)'\);/g;
let match;
while ((match = importRegex.exec(content)) !== null) {
const importUrl = match[1];
const filePath = importUrl.replace(pathToIgnore, '');
const localFilePath = path.join(__dirname, '..', filePath);
if (fs.existsSync(localFilePath)) {
const importedContent = fs.readFileSync(localFilePath, 'utf8');
content = content.replace(match[0], importedContent);
} else {
console.error(`File not found: ${localFilePath}`);
}
}
return content;
}
async function combineCSS() {
let combinedCSS = fs.readFileSync(baseFile, 'utf8');
combinedCSS = await replaceImports(combinedCSS);
fs.writeFileSync(outputFile, combinedCSS);
console.log('Updated development CSS file.');
}
combineCSS();
chokidar.watch(srcDir).on('change', (event, path) => {
console.log('Changes detected. Rebuilding...');
combineCSS();
});

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,67 @@
/* unrounding */
::-webkit-scrollbar-thumb,
* {
border-radius: 0 !important;
}
/* hide round masks */
[class^='listItem_'] [class^='wrapper_'] > [class^='svg_'] > mask,
[class^='bannerSVGWrapper_'] > mask > circle {
display: none;
}
[class^='mask_'] > foreignObject,
[class^='svg_'] > foreignObject {
mask-image: none;
}
/* fiil circle mask on profile avatar */
.overlay__75742:after, /* profile popup */
.overlay_c0bea0:after {
/* user settings */
border-radius: 0;
}
/* hide status indicators */
[class^='mask_'] > rect,
[class^='mask_'] > circle,
[class^='mask_'] > svg {
display: none;
}
/* re-add status indicators */
.wrapper__44b0c:has(rect)::after {
content: '';
display: block;
position: absolute;
height: 8px;
width: 8px;
bottom: -4px;
right: -4px;
border: 2px solid var(--bg-0);
}
.wrapper__44b0c:has(rect[fill='#23a55a'])::after {
background: var(--online-dot) !important;
}
.wrapper__44b0c:has(rect[fill='#f23f43'])::after {
background: var(--dnd-dot) !important;
}
.wrapper__44b0c:has(rect[fill='#f0b232'])::after {
background: var(--idle-dot) !important;
}
.wrapper__44b0c:has(rect[fill='#80848e'])::after {
background: var(--txt-3) !important;
}
.wrapper__44b0c:has(rect[fill='#593695'])::after {
background: var(--streaming-dot);
}
/* fix server list badges */
[class^='lowerBadge_'] {
border: 2px solid var(--bg-0);
bottom: -4px;
right: -4px;
}
[class^='upperBadge_'] {
border: 2px solid var(--bg-0);
top: -4px;
right: -4px;
}

View File

@ -0,0 +1,87 @@
/**
* @name system24 (catppuccin macchiato lavender)
* @description A tui-style discord theme. Based on the catppuccin maccchiato color palette.
* @author refact0r, bean
* @version 1.0.0
* @invite nz87hXyvcy
* @website https://github.com/refact0r/system24
* @source https://github.com/refact0r/system24/blob/master/flavors/catppuccin-mocha.theme.css
* @authorId 508863359777505290
* @authorLink https://www.refact0r.dev
*/
/* import theme modules */
@import url('https://refact0r.github.io/system24/src/main.css'); /* main theme css. DO NOT REMOVE */
@import url('https://refact0r.github.io/system24/src/unrounding.css'); /* gets rid of all rounded corners. remove if you want rounded corners. */
/* customize things here */
:root {
--font: 'DM Mono'; /* UI font name. it must be installed on your system. */
letter-spacing: -0.05ch; /* decreases letter spacing for better readability. */
font-weight: 300; /* UI font weight. */
--label-font-weight: 500; /* font weight for panel labels. */
--corner-text: 'macchiato24'; /* custom text to display in the corner. only works on windows. */
--pad: 16px; /* padding between panels. */
--txt-pad: 10px; /* padding inside panels to prevent labels from clipping */
--panel-roundness: 0px; /* corner roundness of panels. ONLY WORKS IF unrounding.css IS REMOVED (see above). */
/* background colors */
--bg-0: #24273a; /* main background color. */
--bg-1: #1e2030; /* background color for secondary elements like code blocks, embeds, etc. */
--bg-2: #363a4f; /* color of neutral buttons. */
--bg-3: #494d64; /* color of neutral buttons when hovered. */
/* state modifiers */
--hover: color-mix(in oklch, var(--txt-3), transparent 80%); /* color of hovered elements. */
--active: color-mix(in oklch, var(--txt-3), transparent 60%); /* color of elements when clicked. */
--selected: var(--active); /* color of selected elements. */
/* text colors */
--txt-dark: var(--bg-0); /* color of dark text on colored backgrounds. */
--txt-link: var(--cyan); /* color of links. */
--txt-0: #eaeefa; /* color of bright/white text. */
--txt-1: #cad3f5; /* main text color. */
--txt-2: #939ab7; /* color of secondary text like channel list. */
--txt-3: #5b6078; /* color of muted text. */
/* accent colors */
--acc-0: var(--lavender); /* main accent color. */
--acc-1: var(--lavender-1); /* color of accent buttons when hovered. */
--acc-2: var(--lavender-2); /* color of accent buttons when clicked. */
/* borders */
--border-width: 2px; /* panel border thickness. */
--border-color: var(--bg-2); /* panel border color. */
--border-hover-color: var(--acc-0); /* panel border color when hovered. */
--border-transition: 0.2s ease; /* panel border transition. */
/* status dot colors */
--online-dot: var(--cyan); /* color of online dot. */
--dnd-dot: var(--pink); /* color of do not disturb dot. */
--idle-dot: var(--yellow); /* color of idle dot. */
--streaming-dot: var(--purple); /* color of streaming dot. */
/* mention/ping and message colors */
--mention-txt: var(--acc-0); /* color of mention text. */
--mention-bg: color-mix(in oklch, var(--acc-0), transparent 90%); /* background highlight of mention text. */
--mention-overlay: color-mix(in oklch, var(--acc-0), transparent 90%); /* overlay color of messages that mention you. */
--mention-hover-overlay: color-mix(in oklch, var(--acc-0), transparent 95%); /* overlay color of messages that mention you when hovered. */
--reply-overlay: var(--active); /* overlay color of message you are replying to. */
--reply-hover-overlay: var(--hover); /* overlay color of message you are replying to when hovered. */
/* color shades */
--pink: oklch(73.7% 0.125 11.19);
--pink-1: oklch(63.7% 0.125 11.19);
--pink-2: oklch(53.7% 0.125 11.19);
--purple: oklch(77.15% 0.126 303.9);
--purple-1: oklch(67.15% 0.126 303.9);
--purple-2: oklch(57.15% 0.126 303.9);
--cyan: oklch(78.51% 0.085 228.38);
--yellow: oklch(87.9% 0.074 84.75);
--green: oklch(83.5% 0.108 138.15);
--green-1: oklch(73.5% 0.108 138.15);
--green-2: oklch(63.5% 0.108 138.15);
--lavender: oklch(81.66% 0.091 277.31);
--lavender-1: oklch(71.66% 0.091 277.31);
--lavender-2: oklch(61.66% 0.091 277.31);
}

View File

@ -0,0 +1,84 @@
/**
* @name system24 (catppuccin mocha)
* @description A tui-style discord theme. Based on the catppuccin mocha color palette.
* @author refact0r
* @version 1.0.0
* @invite nz87hXyvcy
* @website https://github.com/refact0r/system24
* @source https://github.com/refact0r/system24/blob/master/flavors/catppuccin-mocha.theme.css
* @authorId 508863359777505290
* @authorLink https://www.refact0r.dev
*/
/* import theme modules */
@import url('https://refact0r.github.io/system24/src/main.css'); /* main theme css. DO NOT REMOVE */
@import url('https://refact0r.github.io/system24/src/unrounding.css'); /* gets rid of all rounded corners. remove if you want rounded corners. */
/* customize things here */
:root {
--font: 'DM Mono'; /* UI font name. it must be installed on your system. */
letter-spacing: -0.05ch; /* decreases letter spacing for better readability. */
font-weight: 300; /* UI font weight. */
--label-font-weight: 500; /* font weight for panel labels. */
--corner-text: 'catppuccin24'; /* custom text to display in the corner. only works on windows. */
--pad: 16px; /* padding between panels. */
--txt-pad: 10px; /* padding inside panels to prevent labels from clipping */
--panel-roundness: 0px; /* corner roundness of panels. ONLY WORKS IF unrounding.css IS REMOVED (see above). */
/* background colors */
--bg-0: #1e1e2e; /* main background color. */
--bg-1: #181825; /* background color for secondary elements like code blocks, embeds, etc. */
--bg-2: #313244; /* color of neutral buttons. */
--bg-3: #45475a; /* color of neutral buttons when hovered. */
/* state modifiers */
--hover: color-mix(in oklch, var(--txt-3), transparent 80%); /* color of hovered elements. */
--active: color-mix(in oklch, var(--txt-3), transparent 60%); /* color of elements when clicked. */
--selected: var(--active); /* color of selected elements. */
/* text colors */
--txt-dark: var(--bg-0); /* color of dark text on colored backgrounds. */
--txt-link: var(--cyan); /* color of links. */
--txt-0: #eaeefa; /* color of bright/white text. */
--txt-1: #cdd6f4; /* main text color. */
--txt-2: #9399b2; /* color of secondary text like channel list. */
--txt-3: #585b70; /* color of muted text. */
/* accent colors */
--acc-0: var(--purple); /* main accent color. */
--acc-1: var(--purple-1); /* color of accent buttons when hovered. */
--acc-2: var(--purple-2); /* color of accent buttons when clicked. */
/* borders */
--border-width: 2px; /* panel border thickness. */
--border-color: var(--bg-2); /* panel border color. */
--border-hover-color: var(--acc-0); /* panel border color when hovered. */
--border-transition: 0.2s ease; /* panel border transition. */
/* status dot colors */
--online-dot: var(--green); /* color of online dot. */
--dnd-dot: var(--pink); /* color of do not disturb dot. */
--idle-dot: var(--yellow); /* color of idle dot. */
--streaming-dot: var(--purple); /* color of streaming dot. */
/* mention/ping and message colors */
--mention-txt: var(--acc-0); /* color of mention text. */
--mention-bg: color-mix(in oklch, var(--acc-0), transparent 90%); /* background highlight of mention text. */
--mention-overlay: color-mix(in oklch, var(--acc-0), transparent 90%); /* overlay color of messages that mention you. */
--mention-hover-overlay: color-mix(in oklch, var(--acc-0), transparent 95%); /* overlay color of messages that mention you when hovered. */
--reply-overlay: var(--active); /* overlay color of message you are replying to. */
--reply-hover-overlay: var(--hover); /* overlay color of message you are replying to when hovered. */
/* color shades */
--pink: #f38ba8;
--pink-1: #d16c89;
--pink-2: #af4e6c;
--purple: #cba6f7;
--purple-1: #ab87d6;
--purple-2: #8d69b5;
--cyan: #74c7ec;
--yellow: #f9e2af;
--green: #a6e3a1;
--green-1: #87c282;
--green-2: #68a364;
}

View File

@ -0,0 +1,84 @@
/**
* @name system24
* @description A tui-style discord theme.
* @author refact0r
* @version 1.0.0
* @invite nz87hXyvcy
* @website https://github.com/refact0r/system24
* @source https://github.com/refact0r/system24/blob/master/system24.theme.css
* @authorId 508863359777505290
* @authorLink https://www.refact0r.dev
*/
/* import theme modules */
@import url('https://refact0r.github.io/system24/src/main.css'); /* main theme css. DO NOT REMOVE */
@import url('https://refact0r.github.io/system24/src/unrounding.css'); /* gets rid of all rounded corners. remove if you want rounded corners. */
/* customize things here */
:root {
--font: 'Agave Nerd Font'; /* UI font name. it must be installed on your system. */
letter-spacing: 0; /* decreases letter spacing for better readability. */
font-weight: 400; /* UI font weight. */
--label-font-weight: 400; /* font weight for panel labels. */
--corner-text: 'system24'; /* custom text to display in the corner. only works on windows. */
--pad: 18px; /* padding between panels. */
--txt-pad: 10px; /* padding inside panels to prevent labels from clipping */
--panel-roundness: 0px; /* corner roundness of panels. ONLY WORKS IF unrounding.css IS REMOVED (see above). */
/* background colors */
--bg-0: #1a1a1a; /* main background color. */
--bg-1: #1a1a1a; /* background color for secondary elements like code blocks, embeds, etc. */
--bg-2: #1a1a1a; /* color of neutral buttons. */
--bg-3: #641a1a; /* color of neutral buttons when hovered. */
/* state modifiers */
--hover: #641a1a; /* color of hovered elements. */
--active: #5018dd; /* color of elements when clicked. */
--selected: #E40046; /* color of selected elements. */
/* text colors */
--txt-dark: var(--bg-0); /* color of dark text on colored backgrounds. */
--txt-link: var(--cyan); /* color of links. */
--txt-0: #d6abab; /* color of bright/white text. */
--txt-1: #d6abab;/* main text color. */
--txt-2: #5018dd;/* color of secondary text like channel list. */
--txt-3: #d6abab;/* color of muted text. */
/* accent colors */
--acc-1: #E40046; /* main accent color. */
--acc-0: #5018dd; /* color of accent buttons when hovered. */
--acc-2: #5018dd; /* color of accent buttons when clicked. */
/* borders */
--border-width: 1px; /* panel border thickness. */
--border-color: #5018dd; /* panel border color. */
--border-hover-color: #E40046; /* panel border color when hovered. */
--border-transition: 0.2s ease; /* panel border transition. */
/* status dot colors */
--online-dot: var(--green); /* color of online dot. */
--dnd-dot: var(--pink); /* color of do not disturb dot. */
--idle-dot: var(--yellow); /* color of idle dot. */
--streaming-dot: var(--purple); /* color of streaming dot. */
/* mention/ping and message colors */
--mention-txt: #f50505; /* color of mention text. */
--mention-bg: #5018dd; /* background highlight of mention text. */
--mention-overlay: color-mix(in oklch, var(--acc-0), transparent 90%); /* overlay color of messages that mention you. */
--mention-hover-overlay: color-mix(in oklch, var(--acc-0), transparent 95%); /* overlay color of messages that mention you when hovered. */
--reply-overlay: var(--active); /* overlay color of message you are replying to. */
--reply-hover-overlay: var(--hover); /* overlay color of message you are replying to when hovered. */
/* color shades */
--pink: oklch(73% 0.12 0);
--pink-1: oklch(63% 0.12 0);
--pink-2: oklch(53% 0.12 0);
--purple: oklch(73% 0.12 300);
--purple-1: oklch(63% 0.12 300);
--purple-2: oklch(53% 0.12 300);
--cyan: oklch(73% 0.12 200);
--yellow: oklch(78% 0.12 80);
--green: hsl(141, 76%, 48%);
--green-1: hsl(141, 73%, 42%);
--green-2: hsl(141, 73%, 36%);
}

View File

@ -0,0 +1,78 @@
/**
* @name system24 (gruvbox material)
* @description A tui-style discord theme. Based on the gruvbox material color palette.
* @author refact0r, Sophed
* @version 1.0.0
* @invite nz87hXyvcy
* @website https://github.com/refact0r/system24
* @authorId 508863359777505290
* @authorLink https://www.refact0r.dev
*/
/* import theme modules */
@import url('https://refact0r.github.io/system24/src/main.css'); /* main theme css. DO NOT REMOVE */
@import url('https://refact0r.github.io/system24/src/unrounding.css'); /* gets rid of all rounded corners. remove if you want rounded corners. */
/* customize things here */
:root {
--font: 'DM Mono'; /* UI font name. it must be installed on your system. */
letter-spacing: -0.05ch; /* decreases letter spacing for better readability. */
font-weight: 400; /* UI font weight. */
--label-font-weight: 500; /* font weight for panel labels. */
--corner-text: 'gruvbox material'; /* custom text to display in the corner. only works on windows. */
--pad: 16px; /* padding between panels. */
--txt-pad: 10px; /* padding inside panels to prevent labels from clipping */
--panel-roundness: 0px; /* corner roundness of panels. ONLY WORKS IF unrounding.css IS REMOVED (see above). */
/* background colors */
--bg-0: #282828; /* main background color. */
--bg-1: #1d2021; /* background color for secondary elements like code blocks, embeds, etc. */
--bg-2: #3c3836; /* color of neutral buttons. */
--bg-3: #504945; /* color of neutral buttons when hovered. */
/* state modifiers */
--hover: color-mix(in oklch, var(--txt-3), transparent 80%); /* color of hovered elements. */
--active: color-mix(in oklch, var(--txt-3), transparent 60%); /* color of elements when clicked. */
--selected: var(--active); /* color of selected elements. */
/* text colors */
--txt-dark: var(--bg-0); /* color of dark text on colored backgrounds. */
--txt-link: var(--aqua); /* color of links. */
--txt-0: #d4be98; /* color of bright/white text. */
--txt-1: #ddc7a1; /* main text color. */
--txt-2: #d4be98; /* color of secondary text like channel list. */
--txt-3: #928374; /* color of muted text. */
/* accent colors */
--acc-0: var(--aqua); /* main accent color. */
--acc-1: var(--green); /* color of accent buttons when hovered. */
--acc-2: var(--blue); /* color of accent buttons when clicked. */
/* borders */
--border-width: 2px; /* panel border thickness. */
--border-color: var(--bg-2); /* panel border color. */
--border-hover-color: var(--acc-0); /* panel border color when hovered. */
--border-transition: 0.2s ease; /* panel border transition. */
/* status dot colors */
--online-dot: var(--green); /* color of online dot. */
--dnd-dot: var(--red); /* color of do not disturb dot. */
--idle-dot: var(--yellow); /* color of idle dot. */
--streaming-dot: var(--purple); /* color of streaming dot. */
/* mention/ping and message colors */
--mention-txt: var(--acc-0); /* color of mention text. */
--mention-bg: color-mix(in oklch, var(--acc-0), transparent 90%); /* background highlight of mention text. */
--mention-overlay: color-mix(in oklch, var(--acc-0), transparent 90%); /* overlay color of messages that mention you. */
--mention-hover-overlay: color-mix(in oklch, var(--acc-0), transparent 95%); /* overlay color of messages that mention you when hovered. */
--reply-overlay: var(--active); /* overlay color of message you are replying to. */
--reply-hover-overlay: var(--hover); /* overlay color of message you are replying to when hovered. */
/* color shades */
--red: #ea6962;
--purple: #d3869b;
--yellow: #f9e2af;
--aqua: #89b482;
--blue: #7daea3;
--green: #a9b665;
}

View File

@ -0,0 +1,88 @@
/**
* @name system24 (light)
* @description A tui-style discord theme. light mode.
* @author refact0r
* @version 1.0.0
* @invite nz87hXyvcy
* @website https://github.com/refact0r/system24
* @source https://github.com/refact0r/system24/blob/master/flavors/light.theme.css
* @authorId 508863359777505290
* @authorLink https://www.refact0r.dev
*/
/* import theme modules */
@import url('https://refact0r.github.io/system24/src/main.css'); /* main theme css. DO NOT REMOVE */
@import url('https://refact0r.github.io/system24/src/unrounding.css'); /* gets rid of all rounded corners. remove if you want rounded corners. */
/* customize things here */
:root {
--font: 'DM Mono'; /* UI font name. it must be installed on your system. */
letter-spacing: -0.05ch; /* decreases letter spacing for better readability. */
font-weight: 300; /* UI font weight. */
--label-font-weight: 500; /* font weight for panel labels. */
--corner-text: 'system24'; /* custom text to display in the corner. only works on windows. */
--pad: 16px; /* padding between panels. */
--txt-pad: 10px; /* padding inside panels to prevent labels from clipping */
--panel-roundness: 0px; /* corner roundness of panels. ONLY WORKS IF unrounding.css IS REMOVED (see above). */
/* background colors */
--bg-0: oklch(97.6% 0 0); /* main background color. */
--bg-1: oklch(92.6% 0 0); /* background color for secondary elements like code blocks, embeds, etc. */
--bg-2: oklch(87.6% 0 0); /* color of neutral buttons. */
--bg-3: oklch(82.6% 0 0); /* color of neutral buttons when hovered. */
/* state modifiers */
--hover: oklch(40% 0 0 / 0.1); /* color of hovered elements. */
--active: oklch(40% 0 0 / 0.2); /* color of elements when clicked. */
--selected: var(--active); /* color of selected elements. */
/* text colors */
--txt-dark: var(--bg-0); /* color of dark text on colored backgrounds. */
--txt-link: var(--cyan); /* color of links. */
--txt-0: oklch(100% 0 0); /* color of bright/white text. */
--txt-1: oklch(30% 0 0); /* main text color. */
--txt-2: oklch(50% 0 0); /* color of secondary text like channel list. */
--txt-3: oklch(70% 0 0); /* color of muted text. */
/* accent colors */
--acc-0: var(--purple); /* main accent color. */
--acc-1: var(--purple-1); /* color of accent buttons when hovered. */
--acc-2: var(--purple-2); /* color of accent buttons when clicked. */
/* borders */
--border-width: 2px; /* panel border thickness. */
--border-color: var(--bg-2); /* panel border color. */
--border-hover-color: var(--acc-0); /* panel border color when hovered. */
--border-transition: 0.2s ease; /* panel border transition. */
/* status dot colors */
--online-dot: var(--green); /* color of online dot. */
--dnd-dot: var(--pink); /* color of do not disturb dot. */
--idle-dot: var(--yellow); /* color of idle dot. */
--streaming-dot: var(--purple); /* color of streaming dot. */
/* mention/ping and message colors */
--mention-txt: var(--acc-0); /* color of mention text. */
--mention-bg: color-mix(in oklch, var(--acc-0), transparent 85%); /* background highlight of mention text. */
--mention-overlay: color-mix(in oklch, var(--acc-0), transparent 85%); /* overlay color of messages that mention you. */
--mention-hover-overlay: color-mix(in oklch, var(--acc-0), transparent 90%); /* overlay color of messages that mention you when hovered. */
--reply-overlay: var(--active); /* overlay color of message you are replying to. */
--reply-hover-overlay: var(--hover); /* overlay color of message you are replying to when hovered. */
/* color shades */
--pink: oklch(57% 0.13 0);
--pink-1: oklch(50% 0.13 0);
--pink-2: oklch(43% 0.13 0);
--purple: oklch(57% 0.13 300);
--purple-1: oklch(50% 0.13 300);
--purple-2: oklch(43% 0.13 300);
--cyan: oklch(57% 0.13 200);
--yellow: oklch(71% 0.13 80);
--green: oklch(57% 0.13 160);
--green-1: oklch(50% 0.13 160);
--green-2: oklch(43% 0.13 160);
}
[class^=jumpToPresentBar_] > button {
color: var(--txt-1);
}

View File

@ -0,0 +1,86 @@
/**
* @name system24 (monochrome)
* @description A tui-style discord theme. Has less colors and more neutral greys and whites.
* @author refact0r, DeadGrip
* @version 1.0.0
* @invite nz87hXyvcy
* @website https://github.com/refact0r/system24
* @authorId 508863359777505290
* @authorLink https://refact0r.dev/
*/
/* import theme modules */
@import url('https://refact0r.github.io/system24/src/main.css'); /* main theme css. DO NOT REMOVE */
@import url('https://refact0r.github.io/system24/src/unrounding.css'); /* gets rid of all rounded corners. remove if you want rounded corners. */
/* customize things here */
:root {
--font: 'DM Mono'; /* UI font name. it must be installed on your system. */
letter-spacing: -0.05ch; /* decreases letter spacing for better readability. */
font-weight: 300; /* UI font weight. */
--label-font-weight: 500; /* font weight for panel labels. */
--corner-text: 'monochrome'; /* custom text to display in the corner. only works on windows. */
--pad: 16px; /* padding between panels. */
--txt-pad: 10px; /* padding inside panels to prevent labels from clipping */
--panel-roundness: 0px; /* corner roundness of panels. ONLY WORKS IF unrounding.css IS REMOVED (see above). */
/* background colors */
--bg-0: oklch(19% 0 0); /* main background color. */
--bg-1: oklch(23% 0 0); /* background color for secondary elements like code blocks, embeds, etc. */
--bg-2: oklch(27% 0 0); /* color of neutral buttons. */
--bg-3: oklch(31% 0 0); /* color of neutral buttons when hovered. */
/* state modifiers */
--hover: oklch(54% 0 0 / 0.1); /* color of hovered elements. */
--active: oklch(54% 0 0 / 0.2); /* color of elements when clicked. */
--selected: var(--active); /* color of selected elements. */
/* text colors */
--txt-dark: var(--bg-0); /* color of dark text on colored backgrounds. */
--txt-link: var(--shade-0); /* color of links. */
--txt-0: oklch(90% 0 0); /* color of bright/white text. */
--txt-1: oklch(80% 0 0); /* main text color. */
--txt-2: oklch(60% 0 0); /* color of secondary text like channel list. */
--txt-3: oklch(40% 0 0); /* color of muted text. */
/* accent colors */
--acc-0: var(--shade-0); /* main accent color. */
--acc-1: var(--shade-1); /* color of accent buttons when hovered. */
--acc-2: var(--shade-2); /* color of accent buttons when clicked. */
/* borders */
--border-width: 2px; /* panel border thickness. */
--border-color: var(--bg-3); /* panel border color. */
--border-hover-color: var(--acc-1); /* panel border color when hovered. */
--border-transition: 0.2s ease; /* panel border transition. */
/* status dot colors */
--online-dot: var(--shade-0); /* color of online dot. */
--dnd-dot: oklch(80% 0.08 0); /* color of do not disturb dot. */
--idle-dot: oklch(80% 0.08 100); /* color of idle dot. */
--streaming-dot: oklch(80% 0.08 300); /* color of streaming dot. */
/* mention/ping and message colors */
--mention-txt: var(--acc-0); /* color of mention text. */
--mention-bg: color-mix(in oklch, var(--acc-0), transparent 90%); /* background highlight of mention text. */
--mention-overlay: color-mix(in oklch, var(--acc-0), transparent 90%); /* overlay color of messages that mention you. */
--mention-hover-overlay: color-mix(in oklch, var(--acc-0), transparent 95%); /* overlay color of messages that mention you when hovered. */
--reply-overlay: var(--active); /* overlay color of message you are replying to. */
--reply-hover-overlay: var(--hover); /* overlay color of message you are replying to when hovered. */
/* color shades */
--pink: oklch(90% 0 0);
--pink-1: oklch(70% 0 0);
--pink-2: oklch(50% 0 0);
--purple: oklch(90% 0 0);
--purple-1: oklch(70% 0 0);
--purple-2: oklch(50% 0 0);
--cyan: oklch(90% 0 0);
--yellow: oklch(90% 0 0);
--green: oklch(90% 0 0);
--green-1: oklch(70% 0 0);
--green-2: oklch(50% 0 0);
--shade-0: oklch(90% 0 0);
--shade-1: oklch(70% 0 0);
--shade-2: oklch(50% 0 0);
}

View File

@ -0,0 +1,87 @@
/**
* @name system24
* @description A tui-style discord theme.
* @author refact0r
* @version 1.0.0
* @invite nz87hXyvcy
* @website https://github.com/refact0r/system24
* @source https://github.com/refact0r/system24/blob/master/system24.theme.css
* @authorId 508863359777505290
* @authorLink https://www.refact0r.dev
*/
/* import theme modules */
@import url('https://refact0r.github.io/system24/src/main.css'); /* main theme css. DO NOT REMOVE */
@import url('https://refact0r.github.io/system24/src/unrounding.css'); /* gets rid of all rounded corners. remove if you want rounded corners. */
/* customize things here */
:root {
--font: 'DM Mono'; /* UI font name. it must be installed on your system. */
letter-spacing: 0; /* decreases letter spacing for better readability. */
font-weight: 400; /* UI font weight. */
--label-font-weight: 400; /* font weight for panel labels. */
--corner-text: 'system24'; /* custom text to display in the corner. only works on windows. */
--pad: 16px; /* padding between panels. */
--txt-pad: 10px; /* padding inside panels to prevent labels from clipping */
--panel-roundness: 0px; /* corner roundness of panels. ONLY WORKS IF unrounding.css IS REMOVED (see above). */
/* background colors */
--bg-0: #191724; /* main background color. */
--bg-1: #1f1d2e; /* background color for secondary elements like code blocks, embeds, etc. */
--bg-2: #26233a; /* color of neutral buttons. */
--bg-3: #403d52; /* color of neutral buttons when hovered. */
/* state modifiers */
--hover: color-mix(in srgb, var(--bg-3), transparent 60%); /* color of hovered elements. */
--active: color-mix(in srgb, var(--bg-3), transparent 80%); /* color of elements when clicked. */
--selected: var(--active); /* color of selected elements. */
/* text colors */
--txt-dark: var(--bg-0); /* color of dark text on colored backgrounds. */
--txt-link: var(--rose); /* color of links. */
--txt-0: #ffffff; /* color of bright/white text. */
--txt-1: #e0def4; /* main text color. */
--txt-2: #908caa; /* color of secondary text like channel list. */
--txt-3: #6e6a86; /* color of muted text. */
/* accent colors */
--acc-0: var(--rose); /* main accent color. */
--acc-1: var(--rose-1); /* color of accent buttons when hovered. */
--acc-2: var(--rose-2); /* color of accent buttons when clicked. */
/* borders */
--border-width: 2px; /* panel border thickness. */
--border-color: var(--bg-2); /* panel border color. */
--border-hover-color: var(--acc-0); /* panel border color when hovered. */
--border-transition: 0.2s ease; /* panel border transition. */
/* status dot colors */
--online-dot: var(--green); /* color of online dot. */
--dnd-dot: var(--pink); /* color of do not disturb dot. */
--idle-dot: var(--yellow); /* color of idle dot. */
--streaming-dot: var(--purple); /* color of streaming dot. */
/* mention/ping and message colors */
--mention-txt: var(--acc-0); /* color of mention text. */
--mention-bg: color-mix(in oklch, var(--acc-0), transparent 90%); /* background highlight of mention text. */
--mention-overlay: color-mix(in oklch, var(--acc-0), transparent 90%); /* overlay color of messages that mention you. */
--mention-hover-overlay: color-mix(in oklch, var(--acc-0), transparent 95%); /* overlay color of messages that mention you when hovered. */
--reply-overlay: var(--active); /* overlay color of message you are replying to. */
--reply-hover-overlay: var(--hover); /* overlay color of message you are replying to when hovered. */
/* color shades */
--pink: oklch(69.77% 0.1565 4.22);
--pink-1: oklch(59.77% 0.1565 4.22);
--pink-2: oklch(49.77% 0.1565 4.22);
--purple: oklch(77.6% 0.0945 304.99);
--purple-1: oklch(67.6% 0.0945 304.99);
--purple-2: oklch(57.6% 0.0945 304.99);
--cyan: oklch(52.77% 0.0793 227.72);
--yellow: oklch(84.29% 0.11 74.6);
--green: oklch(82.19% 0.0543 209.56);
--green-1: oklch(72.19% 0.0543 209.56);
--green-2: oklch(62.19% 0.0543 209.56);
--rose: oklch(83.63% 0.0544 21.14);
--rose-1: oklch(73.63% 0.0544 21.14);
--rose-2: oklch(63.63% 0.0544 21.14);
}

View File

@ -0,0 +1,84 @@
/**
* @name system24
* @description A tui-style discord theme.
* @author refact0r
* @version 1.0.0
* @invite nz87hXyvcy
* @website https://github.com/refact0r/system24
* @source https://github.com/refact0r/system24/blob/master/system24.theme.css
* @authorId 508863359777505290
* @authorLink https://www.refact0r.dev
*/
/* import theme modules */
@import url('https://refact0r.github.io/system24/src/main.css'); /* main theme css. DO NOT REMOVE */
@import url('https://refact0r.github.io/system24/src/unrounding.css'); /* gets rid of all rounded corners. remove if you want rounded corners. */
/* customize things here */
:root {
--font: 'DM Mono'; /* UI font name. it must be installed on your system. */
letter-spacing: 0; /* decreases letter spacing for better readability. */
font-weight: 400; /* UI font weight. */
--label-font-weight: 400; /* font weight for panel labels. */
--corner-text: 'system24'; /* custom text to display in the corner. only works on windows. */
--pad: 18px; /* padding between panels. */
--txt-pad: 10px; /* padding inside panels to prevent labels from clipping */
--panel-roundness: 0px; /* corner roundness of panels. ONLY WORKS IF unrounding.css IS REMOVED (see above). */
/* background colors */
--bg-0: hsl(0, 0%, 7%); /* main background color. */
--bg-1: hsl(0, 0%, 10%); /* background color for secondary elements like code blocks, embeds, etc. */
--bg-2: hsl(0, 0%, 13%); /* color of neutral buttons. */
--bg-3: hsl(0, 0%, 16%); /* color of neutral buttons when hovered. */
/* state modifiers */
--hover: hsla(0, 0%, 40%, 0.1); /* color of hovered elements. */
--active: hsla(0, 0%, 40%, 0.2); /* color of elements when clicked. */
--selected: var(--active); /* color of selected elements. */
/* text colors */
--txt-dark: var(--bg-0); /* color of dark text on colored backgrounds. */
--txt-link: var(--cyan); /* color of links. */
--txt-0: hsl(0, 0%, 100%); /* color of bright/white text. */
--txt-1: hsl(0, 0%, 70%); /* main text color. */
--txt-2: hsl(0, 0%, 50%); /* color of secondary text like channel list. */
--txt-3: hsl(0, 0%, 30%); /* color of muted text. */
/* accent colors */
--acc-0: var(--green); /* main accent color. */
--acc-1: var(--green-1); /* color of accent buttons when hovered. */
--acc-2: var(--green-2); /* color of accent buttons when clicked. */
/* borders */
--border-width: 1px; /* panel border thickness. */
--border-color: #535353; /* panel border color. */
--border-hover-color: #1ed760; /* panel border color when hovered. */
--border-transition: 0.2s ease; /* panel border transition. */
/* status dot colors */
--online-dot: var(--green); /* color of online dot. */
--dnd-dot: var(--pink); /* color of do not disturb dot. */
--idle-dot: var(--yellow); /* color of idle dot. */
--streaming-dot: var(--purple); /* color of streaming dot. */
/* mention/ping and message colors */
--mention-txt: var(--acc-0); /* color of mention text. */
--mention-bg: color-mix(in oklch, var(--acc-0), transparent 90%); /* background highlight of mention text. */
--mention-overlay: color-mix(in oklch, var(--acc-0), transparent 90%); /* overlay color of messages that mention you. */
--mention-hover-overlay: color-mix(in oklch, var(--acc-0), transparent 95%); /* overlay color of messages that mention you when hovered. */
--reply-overlay: var(--active); /* overlay color of message you are replying to. */
--reply-hover-overlay: var(--hover); /* overlay color of message you are replying to when hovered. */
/* color shades */
--pink: oklch(73% 0.12 0);
--pink-1: oklch(63% 0.12 0);
--pink-2: oklch(53% 0.12 0);
--purple: oklch(73% 0.12 300);
--purple-1: oklch(63% 0.12 300);
--purple-2: oklch(53% 0.12 300);
--cyan: oklch(73% 0.12 200);
--yellow: oklch(78% 0.12 80);
--green: hsl(141, 76%, 48%);
--green-1: hsl(141, 73%, 42%);
--green-2: hsl(141, 73%, 36%);
}

View File

@ -0,0 +1,84 @@
/**
* @name system24
* @description A tui-style discord theme.
* @author refact0r, Liyua
* @version 1.0.0
* @invite nz87hXyvcy
* @website https://github.com/refact0r/system24
* @source https://github.com/refact0r/system24/blob/master/system24.theme.css
* @authorId 508863359777505290
* @authorLink https://www.refact0r.dev
*/
/* import theme modules */
@import url('https://refact0r.github.io/system24/src/main.css'); /* main theme css. DO NOT REMOVE */
@import url('https://refact0r.github.io/system24/src/unrounding.css'); /* gets rid of all rounded corners. remove if you want rounded corners. */
/* customize things here */
:root {{
--font: 'DM Mono'; /* UI font name. it must be installed on your system. */
letter-spacing: -0.05ch; /* decreases letter spacing for better readability. */
font-weight: 300; /* UI font weight. */
--label-font-weight: 500; /* font weight for panel labels. */
--corner-text: 'system24'; /* custom text to display in the corner. only works on windows. */
--pad: 16px; /* padding between panels. */
--txt-pad: 10px; /* padding inside panels to prevent labels from clipping */
--panel-roundness: 0px; /* corner roundness of panels. ONLY WORKS IF unrounding.css IS REMOVED (see above). */
/* background colors */
--bg-0: oklch(from {background} l c h); /* main background color. */
--bg-1: oklch(from {background} calc(l + 0.04) c h); /* background color for secondary elements like code blocks, embeds, etc. */
--bg-2: oklch(from {background} calc(l + 0.08) c h); /* color of neutral buttons. */
--bg-3: oklch(from {background} calc(l + 0.12) c h); /* color of neutral buttons when hovered. */
/* state modifiers */
--hover: oklch(54% 0 0 / 0.1); /* color of hovered elements. */
--active: oklch(54% 0 0 / 0.2); /* color of elements when clicked. */
--selected: var(--active); /* color of selected elements. */
/* text colors */
--txt-dark: var(--bg-0); /* color of dark text on colored backgrounds. */
--txt-link: var(--cyan); /* color of links. */
--txt-0: oklch(from {foreground} 100% c h); /* color of bright/white text. */
--txt-1: oklch(from {foreground} 80% c h); /* main text color. */
--txt-2: oklch(from {foreground} 60% c h); /* color of secondary text like channel list. */
--txt-3: oklch(from {foreground} 40% c h); /* color of muted text. */
/* accent colors */
--acc-0: var(--purple); /* main accent color. */
--acc-1: var(--purple-1); /* color of accent buttons when hovered. */
--acc-2: var(--purple-2); /* color of accent buttons when clicked. */
/* borders */
--border-width: 2px; /* panel border thickness. */
--border-color: var(--bg-3); /* panel border color. */
--border-hover-color: var(--acc-0); /* panel border color when hovered. */
--border-transition: 0.2s ease; /* panel border transition. */
/* status dot colors */
--online-dot: var(--green); /* color of online dot. */
--dnd-dot: var(--pink); /* color of do not disturb dot. */
--idle-dot: var(--yellow); /* color of idle dot. */
--streaming-dot: var(--purple); /* color of streaming dot. */
/* mention/ping and message colors */
--mention-txt: var(--acc-0); /* color of mention text. */
--mention-bg: color-mix(in oklch, var(--acc-0), transparent 90%); /* background highlight of mention text. */
--mention-overlay: color-mix(in oklch, var(--acc-0), transparent 90%); /* overlay color of messages that mention you. */
--mention-hover-overlay: color-mix(in oklch, var(--acc-0), transparent 95%); /* overlay color of messages that mention you when hovered. */
--reply-overlay: var(--active); /* overlay color of message you are replying to. */
--reply-hover-overlay: var(--hover); /* overlay color of message you are replying to when hovered. */
/* color shades */
--pink: oklch(from {color0} l c h);
--pink-1: oklch(from var(--pink) calc(l - 0.1) c h);
--pink-2: oklch(from var(--pink) calc(l - 0.2) c h);
--purple: oklch(from {color1} l c h);
--purple-1: oklch(from var(--purple) calc(l - 0.1) c h);
--purple-2: oklch(from var(--purple) calc(l - 0.2) c h);
--cyan: oklch(from {color2} l c h);
--yellow: oklch(from {color3} l c h);
--green: oklch(from {color4} l c h);
--green-1: oklch(from var(--green) calc(l - 0.1) c h);
--green-2: oklch(from var(--green) calc(l - 0.2) c h);
}}

View File

@ -0,0 +1,83 @@
/**
* @name system24 (vencord)
* @description A tui-style discord theme. Based on Vencord's color palette. (https://vencord.dev/)
* @author refact0r, makimwah
* @version 1.0.0
* @invite nz87hXyvcy
* @website https://github.com/refact0r/system24
* @source https://github.com/refact0r/system24/blob/master/system24.theme.css
* @authorId 508863359777505290
* @authorLink https://www.refact0r.dev
*/
/* import theme modules */
@import url('https://refact0r.github.io/system24/src/main.css'); /* main theme css. DO NOT REMOVE */
@import url('https://refact0r.github.io/system24/src/unrounding.css'); /* gets rid of all rounded corners. remove if you want rounded corners. */
/* customize things here */
:root {
--font: 'DM Mono'; /* UI font name. it must be installed on your system. */
letter-spacing: -0.05ch; /* decreases letter spacing for better readability. */
font-weight: 300; /* UI font weight. */
--label-font-weight: 500; /* font weight for panel labels. */
--corner-text: 'vencord24'; /* custom text to display in the corner. only works on windows. */
--pad: 16px; /* padding between panels. */
--txt-pad: 10px; /* padding inside panels to prevent labels from clipping */
--panel-roundness: 0px; /* corner roundness of panels. ONLY WORKS IF unrounding.css IS REMOVED (see above). */
/* background colors */
--bg-0: oklch(28% 0.002 48); /* main background color. */
--bg-1: oklch(25% 0.001 48); /* background color for secondary elements like code blocks, embeds, etc. */
--bg-2: oklch(34% 0.004 48); /* color of neutral buttons. */
--bg-3: oklch(38% 0.006 48); /* color of neutral buttons when hovered. */
/* state modifiers */
--hover: oklch(54% 0.006 48 / 0.1); /* color of hovered elements. */
--active: oklch(54% 0.006 48 / 0.2); /* color of elements when clicked. */
--selected: var(--active); /* color of selected elements. */
/* text colors */
--txt-dark: var(--bg-0); /* color of dark text on colored backgrounds. */
--txt-link: var(--cyan); /* color of links. */
--txt-0: oklch(90% 0 0); /* color of bright/white text. */
--txt-1: #ddc7a0; /* main text color. */
--txt-2: #918274; /* color of secondary text like channel list. */
--txt-3: #918274; /* color of muted text. */
/* accent colors */
--acc-0: var(--purple); /* main accent color. */
--acc-1: var(--purple-1); /* color of accent buttons when hovered. */
--acc-2: var(--purple-1); /* color of accent buttons when clicked. */
/* borders */
--border-width: 2px; /* panel border thickness. */
--border-color: var(--bg-2); /* panel border color. */
--border-hover-color: var(--acc-0); /* panel border color when hovered. */
--border-transition: 0.2s ease; /* panel border transition. */
/* status dot colors */
--online-dot: var(--green); /* color of online dot. */
--dnd-dot: var(--pink); /* color of do not disturb dot. */
--idle-dot: var(--yellow); /* color of idle dot. */
--streaming-dot: var(--purple); /* color of streaming dot. */
/* mention/ping and message colors */
--mention-txt: var(--acc-0); /* color of mention text. */
--mention-bg: color-mix(in oklch, var(--acc-0), transparent 90%); /* background highlight of mention text. */
--mention-overlay: color-mix(in oklch, var(--acc-0), transparent 90%); /* overlay color of messages that mention you. */
--mention-hover-overlay: color-mix(in oklch, var(--acc-0), transparent 95%); /* overlay color of messages that mention you when hovered. */
--reply-overlay: var(--active); /* overlay color of message you are replying to. */
--reply-hover-overlay: var(--hover); /* overlay color of message you are replying to when hovered. */
/* color shades */
--pink: #ea6962;
--pink-1: oklch(63% 0.12 0);
--pink-2: oklch(53% 0.12 0);
--purple: #d3869b;
--purple-1: #d27390;
--cyan: #7caea3;
--yellow: #d8a656;
--green: #a8b665;
--green-1: oklch(63% 0.12 160);
--green-2: oklch(53% 0.12 160);
}

View File

@ -0,0 +1,84 @@
/**
* @name system24
* @description A tui-style discord theme.
* @author refact0r
* @version 1.0.0
* @invite nz87hXyvcy
* @website https://github.com/refact0r/system24
* @source https://github.com/refact0r/system24/blob/master/system24.theme.css
* @authorId 508863359777505290
* @authorLink https://www.refact0r.dev
*/
/* import theme modules */
@import url('https://refact0r.github.io/system24/src/main.css'); /* main theme css. DO NOT REMOVE */
@import url('https://refact0r.github.io/system24/src/unrounding.css'); /* gets rid of all rounded corners. remove if you want rounded corners. */
/* customize things here */
:root {
--font: 'DM Mono'; /* UI font name. it must be installed on your system. */
letter-spacing: -0.05ch; /* decreases letter spacing for better readability. */
font-weight: 300; /* UI font weight. */
--label-font-weight: 500; /* font weight for panel labels. */
--corner-text: 'system24'; /* custom text to display in the corner. only works on windows. */
--pad: 16px; /* padding between panels. */
--txt-pad: 10px; /* padding inside panels to prevent labels from clipping */
--panel-roundness: 0px; /* corner roundness of panels. ONLY WORKS IF unrounding.css IS REMOVED (see above). */
/* background colors */
--bg-0: oklch(19% 0 0); /* main background color. */
--bg-1: oklch(23% 0 0); /* background color for secondary elements like code blocks, embeds, etc. */
--bg-2: oklch(27% 0 0); /* color of neutral buttons. */
--bg-3: oklch(31% 0 0); /* color of neutral buttons when hovered. */
/* state modifiers */
--hover: oklch(54% 0 0 / 0.1); /* color of hovered elements. */
--active: oklch(54% 0 0 / 0.2); /* color of elements when clicked. */
--selected: var(--active); /* color of selected elements. */
/* text colors */
--txt-dark: var(--bg-0); /* color of dark text on colored backgrounds. */
--txt-link: var(--cyan); /* color of links. */
--txt-0: oklch(90% 0 0); /* color of bright/white text. */
--txt-1: oklch(80% 0 0); /* main text color. */
--txt-2: oklch(60% 0 0); /* color of secondary text like channel list. */
--txt-3: oklch(40% 0 0); /* color of muted text. */
/* accent colors */
--acc-0: var(--purple); /* main accent color. */
--acc-1: var(--purple-1); /* color of accent buttons when hovered. */
--acc-2: var(--purple-2); /* color of accent buttons when clicked. */
/* borders */
--border-width: 2px; /* panel border thickness. */
--border-color: var(--bg-3); /* panel border color. */
--border-hover-color: var(--acc-0); /* panel border color when hovered. */
--border-transition: 0.2s ease; /* panel border transition. */
/* status dot colors */
--online-dot: var(--green); /* color of online dot. */
--dnd-dot: var(--pink); /* color of do not disturb dot. */
--idle-dot: var(--yellow); /* color of idle dot. */
--streaming-dot: var(--purple); /* color of streaming dot. */
/* mention/ping and message colors */
--mention-txt: var(--acc-0); /* color of mention text. */
--mention-bg: color-mix(in oklch, var(--acc-0), transparent 90%); /* background highlight of mention text. */
--mention-overlay: color-mix(in oklch, var(--acc-0), transparent 90%); /* overlay color of messages that mention you. */
--mention-hover-overlay: color-mix(in oklch, var(--acc-0), transparent 95%); /* overlay color of messages that mention you when hovered. */
--reply-overlay: var(--active); /* overlay color of message you are replying to. */
--reply-hover-overlay: var(--hover); /* overlay color of message you are replying to when hovered. */
/* color shades */
--pink: oklch(73% 0.12 0);
--pink-1: oklch(63% 0.12 0);
--pink-2: oklch(53% 0.12 0);
--purple: oklch(73% 0.12 300);
--purple-1: oklch(63% 0.12 300);
--purple-2: oklch(53% 0.12 300);
--cyan: oklch(73% 0.12 200);
--yellow: oklch(78% 0.12 80);
--green: oklch(73% 0.12 160);
--green-1: oklch(63% 0.12 160);
--green-2: oklch(53% 0.12 160);
}

View File

@ -0,0 +1 @@
/home/themiro/Dotfiles/desktopenvs/hyprland/alacritty

View File

@ -0,0 +1,10 @@
[font]
normal = {family = "Agave NerdFont", style = "Regular"}
[terminal]
[terminal.shell]
program = "/usr/bin/zsh"
args = ["-l"]
[window]
opacity = 0.3

View File

@ -0,0 +1,272 @@
#? Config file for btop v.1.4.6
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "/usr/share/btop/themes/cyberqueer.theme"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = true
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = true
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = false
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = false
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = true
#* Use terminal synchronized output sequences to reduce flickering on supported terminals.
terminal_sync = true
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
graph_symbol_gpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "cpu mem net proc"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 100
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "cpu lazy"
#* Reverse sorting order, True or False.
proc_reversed = false
#* Show processes as a tree.
proc_tree = false
#* Use the cpu graph colors in the process list.
proc_colors = true
#* Use a darkening gradient in the process list.
proc_gradient = true
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = false
#* Show process memory as bytes instead of percent.
proc_mem_bytes = true
#* Show cpu graph for each process.
proc_cpu_graphs = true
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = false
#* Show proc box on left side of screen instead of right.
proc_left = false
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = false
#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = false
#* Should cpu and memory usage display be preserved for dead processes when paused.
keep_dead_proc_usage = false
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "Auto"
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "Auto"
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
show_gpu_info = "Auto"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = true
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = false
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = false
#* Shows the system uptime in the CPU box.
show_uptime = true
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
show_cpu_watts = true
#* Show cpu temperature.
check_temp = true
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = true
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = false
#* Show CPU frequency.
show_cpu_freq = true
#* How to calculate CPU frequency, available values: "first", "range", "lowest", "highest" and "average".
freq_mode = "first"
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = true
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
disks_filter = ""
#* Show graphs instead of meters for memory values.
mem_graphs = true
#* Show mem box below net box instead of above.
mem_below_net = false
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = true
#* If swap memory should be shown in memory box.
show_swap = true
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = true
#* If mem box should be split to also show disks info.
show_disks = true
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = true
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = true
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = false
#* Set to true to show available disk space for privileged users.
disk_free_priv = false
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = true
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = false
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = false
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = true
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = true
#* Starts with the Network Interface specified here.
net_iface = ""
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
base_10_bitrate = "Auto"
#* Show battery stats in top right if battery is present.
show_battery = true
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Show power stats of battery next to charge indicator.
show_battery_watts = true
#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"
#* Automatically save current settings to config file on exit.
save_config_on_exit = true
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = true
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
rsmi_measure_pcie_speeds = true
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = true
#* Set which GPU vendors to show. Available values are "nvidia amd intel"
shown_gpus = "nvidia amd intel"
#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""
#* Custom gpu1 model name, empty string to disable.
custom_gpu_name1 = ""
#* Custom gpu2 model name, empty string to disable.
custom_gpu_name2 = ""
#* Custom gpu3 model name, empty string to disable.
custom_gpu_name3 = ""
#* Custom gpu4 model name, empty string to disable.
custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""

View File

@ -0,0 +1,92 @@
#Bashtop monokai theme
#by aristocratos
# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255"
# example for white: "#FFFFFF", "#ff" or "255 255 255".
# All graphs and meters can be gradients
# For single color graphs leave "mid" and "end" variable empty.
# Use "start" and "end" variables for two color gradient
# Use "start", "mid" and "end" for three color gradient
# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#1a1a1a"
# Main text color
theme[main_fg]="#E40046"
# Title color for boxes
theme[title]="#d6abab"
# Highlight color for keyboard shortcuts
theme[hi_fg]="#f50505"
# Background color of selected item in processes box
theme[selected_bg]="#7a1137"
# Foreground color of selected item in processes box
theme[selected_fg]="#F8F8F2"
# Color of inactive/disabled text
theme[inactive_fg]="#5018dd"
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
theme[graph_text]="#797667"
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#A6E22E"
# Cpu box outline color
theme[cpu_box]="#5018dd"
# Memory/disks box outline color
theme[mem_box]="#5018dd"
# Net up/down box outline color
theme[net_box]="#5018dd"
# Processes box outline color
theme[proc_box]="#5018dd"
# Box divider line and small boxes line color
theme[div_line]="#5018dd"
# Temperature graph colors
theme[temp_start]="#5018dd"
theme[temp_mid]="#E40046"
theme[temp_end]="#f50505"
# CPU graph colors
theme[cpu_start]="#5018dd"
theme[cpu_mid]="#E40046"
theme[cpu_end]="#f50505"
# Mem/Disk free meter
theme[free_start]="#5018dd"
theme[free_mid]="#E40046"
theme[free_end]="#f50505"
# Mem/Disk cached meter
theme[cached_start]="#5018dd"
theme[cached_mid]="#E40046"
theme[cached_end]="#f50505"
# Mem/Disk available meter
theme[available_start]="#5018dd"
theme[available_mid]="#E40046"
theme[available_end]="#f50505"
# Mem/Disk used meter
theme[used_start]="#5018dd"
theme[used_mid]="#E40046"
theme[used_end]="#f50505"
# Download graph colors
theme[download_start]="#5018dd"
theme[download_mid]="#E40046"
theme[download_end]="#f50505"
# Upload graph colors
theme[upload_start]="#5018dd"
theme[upload_mid]="#E40046"
theme[upload_end]="#f50505"

View File

@ -0,0 +1,123 @@
#!/usr/bin/env bash
# update-configs — sync dotfiles configs into ~/.config
#
# Config: ~/.config/config-updater/updater.conf
# Manifest: ~/.config/config-updater/manifest
set -euo pipefail
CONF_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/config-updater"
CONF_FILE="${CONF_DIR}/updater.conf"
MANIFEST="${CONF_DIR}/manifest"
TARGET="${XDG_CONFIG_HOME:-$HOME/.config}"
RED='\033[0;31m'; YEL='\033[1;33m'; GRN='\033[0;32m'; DIM='\033[2m'; RST='\033[0m'
err() { printf "${RED}✖ %s${RST}\n" "$*" >&2; }
warn() { printf "${YEL}⚠ %s${RST}\n" "$*"; }
ok() { printf "${GRN}✔ %s${RST}\n" "$*"; }
note() { printf "${DIM} %s${RST}\n" "$*"; }
die() { err "$*"; exit 1; }
[[ -f "$CONF_FILE" ]] || die "Config not found: $CONF_FILE"
# ── parse updater.conf ────────────────────────────────────────────────────────
SOURCE_BASE=""
declare -A ENTRY_TYPE # name → config | flat | ignore
while IFS= read -r line; do
line="${line%%#*}"
line="${line#"${line%%[! ]*}"}"
line="${line%"${line##*[! ]}"}"
[[ -z "$line" ]] && continue
if [[ "$line" =~ ^SOURCE_BASE[[:space:]]*=[[:space:]]*(.+)$ ]]; then
src="${BASH_REMATCH[1]%"${BASH_REMATCH[1]##*[! ]}"}"
SOURCE_BASE="${src/#\~/$HOME}"
continue
fi
read -r type name _rest <<< "$line"
[[ -z "${name:-}" ]] && continue
case "$type" in
config|flat|ignore) ENTRY_TYPE["$name"]="$type" ;;
*) warn "Unknown type '$type' for '$name' — skipping" ;;
esac
done < "$CONF_FILE"
[[ -n "$SOURCE_BASE" ]] || die "SOURCE_BASE not defined in $CONF_FILE"
[[ -d "$SOURCE_BASE" ]] || die "SOURCE_BASE not found: $SOURCE_BASE"
# ── load previous manifest ────────────────────────────────────────────────────
declare -A PREV_MANIFEST
if [[ -f "$MANIFEST" ]]; then
while IFS=: read -r mtype mname; do
[[ -n "${mtype:-}" && -n "${mname:-}" ]] && PREV_MANIFEST["$mname"]="$mtype"
done < "$MANIFEST"
fi
warned=0
# ── warn: manifest entries no longer in updater.conf ─────────────────────────
for mname in "${!PREV_MANIFEST[@]}"; do
[[ -n "${ENTRY_TYPE[$mname]:-}" ]] && continue
warn "'$mname' was previously managed but is no longer in updater.conf"
note "Remove ~/.config/$mname manually if it is no longer needed"
warned=1
done
# ── warn: source items not covered by updater.conf ───────────────────────────
while IFS= read -r -d '' item; do
name="$(basename "$item")"
[[ "$name" == .* ]] && continue
[[ -n "${ENTRY_TYPE[$name]:-}" ]] && continue
warn "Untracked source item: '$name' — add to updater.conf (config / flat / ignore)"
warned=1
done < <(find "$SOURCE_BASE" -maxdepth 1 -mindepth 1 -print0 | sort -z)
(( warned )) && printf '\n'
# ── apply ─────────────────────────────────────────────────────────────────────
errors=0
new_manifest=()
for name in "${!ENTRY_TYPE[@]}"; do
type="${ENTRY_TYPE[$name]}"
[[ "$type" == ignore ]] && continue
src="${SOURCE_BASE}/${name}"
if [[ ! -e "$src" ]]; then
err "Source missing: $src"
(( errors++ )) || true
continue
fi
case "$type" in
config)
rm -rf "${TARGET:?}/${name}"
cp -r "$src" "$TARGET/$name"
ok "config $name"
;;
flat)
[[ -d "$src" ]] || {
err "flat entry '$name' must be a directory: $src"
(( errors++ )) || true
continue
}
cp -r "${src}/." "$TARGET/"
ok "flat $name → (contents into ~/.config/)"
;;
esac
new_manifest+=("${type}:${name}")
done
# ── write manifest ────────────────────────────────────────────────────────────
printf '%s\n' "${new_manifest[@]}" | sort > "$MANIFEST"
printf '\n'
if (( errors > 0 )); then
err "$errors error(s) — manifest may be incomplete"
exit 1
else
ok "Done — manifest updated at $MANIFEST"
fi

View File

@ -0,0 +1,42 @@
# Config updater — defines which dotfiles configs are deployed to ~/.config
#
# SOURCE_BASE base directory containing all configs in the dotfiles
#
# config <name> copy SOURCE_BASE/<name> to ~/.config/<name>
# flat <name> copy contents of SOURCE_BASE/<name> directly into ~/.config/
# (for installation-specific files that live at the ~/.config root)
# ignore <name> present in source but intentionally not managed here
SOURCE_BASE = ~/Dotfiles/desktopenvs/hyprland
# ── deployed as ~/.config/<name> ─────────────────────────────────────────────
config alacritty
config btop
config dunst
config gtk-3.0
config hypr
config kitty
config mimeapps.list
config nwg-dock-hyprland
config nwg-drawer
config nwg-panel
config scripts
config ulauncher
config vicinae
config walker
config wofi
config xfce4
# ── flat: directory contents copied directly into ~/.config/ ──────────────────
flat hypr-usr # installation-specific: binds, monitors, autostart, etc.
# ── intentionally not managed here ───────────────────────────────────────────
ignore config-updater # the updater itself
ignore CRT # referenced from dotfiles path directly in binds.conf
ignore eww # eww bar variant selected and installed separately
ignore eww-nobattery
ignore eww-touch
ignore greetd-tuigreet # deployed to /etc/greetd/ at install time
ignore spicetify # managed separately (spicetify handles its own config)
ignore Vencord # managed separately
ignore waybar # present but inactive; eww bar is used instead

View File

@ -0,0 +1 @@
/home/themiro/Dotfiles/desktopenvs/hyprland/dunst/

View File

@ -0,0 +1,492 @@
# See dunst(5) for all configuration options
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = none
### Geometry ###
# The width of the window, excluding the frame.
# dynamic width from 0 to 300
# width = (0, 300)
# constant width of 300
width = 300
# The height of a single notification, excluding the frame.
# dynamic height from 0 to 300
height = (0, 300)
# constant height of 300
# height = 300
# Position the notification in the top right corner
origin = top-center
# Offset from the origin
offset = (10, 50)
# Scale factor. It is auto-detected if value is 0.
scale = 0
# Maximum number of notification (0 means no limit)
notification_limit = 20
### Progress bar ###
# Turn on the progress bar. It appears when a progress hint is passed with
# for example dunstify -h int:value:12
progress_bar = true
# Set the progress bar height. This includes the frame, so make sure
# it's at least twice as big as the frame width.
progress_bar_height = 10
# Set the frame width of the progress bar
progress_bar_frame_width = 1
# Set the minimum width for the progress bar
progress_bar_min_width = 150
# Set the maximum width for the progress bar
progress_bar_max_width = 300
# Corner radius for the progress bar. 0 disables rounded corners.
progress_bar_corner_radius = 0
# Define which corners to round when drawing the progress bar. If progress_bar_corner_radius
# is set to 0 this option will be ignored.
progress_bar_corners = all
# Corner radius for the image.
icon_corner_radius = 23
# Define which corners to round when drawing the icon image. If icon_corner_radius
# is set to 0 this option will be ignored.
icon_corners = all
# Show how many messages are currently hidden (because of
# notification_limit).
indicate_hidden = yes
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
transparency = 0
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
# If gap_size is greater than 0, this setting will be ignored.
separator_height = 2
# Padding between text and separator.
padding = 4
# Horizontal padding.
horizontal_padding = 8
# Padding between text and icon.
text_icon_padding = 0
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 3
# Defines color of the frame around the notification window.
frame_color = "#aaaaaa"
# Size of gap to display between notifications - requires a compositor.
# If value is greater than 0, separator_height will be ignored and a border
# of size frame_width will be drawn around each notification instead.
# Click events on gaps do not currently propagate to applications below.
gap_size = 5
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort type.
# possible values are:
# * id: sort by id
# * urgency_ascending: sort by urgency (low then normal then critical)
# * urgency_descending: sort by urgency (critical then normal then low)
# * update: sort by update (most recent always at the top)
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
# idle_threshold = 120
### Text ###
font = Agave Nerd Font 12
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://docs.gtk.org/Pango/pango_markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# %n progress value if set without any extra characters
# %% Literal %
# Markup is allowed
format = "<b>%s</b>\n%b"
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = center
# Vertical alignment of message text and icon.
# Possible values are "top", "center" and "bottom".
vertical_alignment = center
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Stack together notifications with the same content
stack_duplicates = true
# Hide the count of stacked notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
### Icons ###
# Recursive icon lookup. You can set a single theme, instead of having to
# define all lookup paths.
enable_recursive_icon_lookup = true
# Set icon theme (only used for recursive icon lookup)
icon_theme = "Adwaita, breeze"
# You can also set multiple icon themes, with the leftmost one being used first.
# icon_theme = "Adwaita, breeze"
# Align icons left/right/top/off
icon_position = top
# Scale small icons up to this size, set to 0 to disable. Helpful
# for e.g. small files or high-dpi screens. In case of conflict,
# max_icon_size takes precedence over this.
min_icon_size = 32
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 128
# Paths to default icons (only necessary when not using recursive icon lookup)
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path.
dmenu = /usr/bin/dmenu -p dunst:
# Browser for opening urls in context menu.
browser = /usr/bin/xdg-open
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst (X11 only)
title = Dunst
# Define the class of the windows spawned by dunst (X11 only)
class = Dunst
# Define the corner radius of the notification window
# in pixel size. If the radius is 0, you have no rounded
# corners.
# The radius will be automatically lowered if it exceeds half of the
# notification height to avoid clipping text and/or icons.
corner_radius = 20
# Define which corners to round when drawing the window. If the corner radius
# is set to 0 this option will be ignored.
#
# Comma-separated list of the corners. The accepted corner values are bottom-right,
# bottom-left, top-right, top-left, top, bottom, left, right or all.
corners = all
# Ignore the dbus closeNotification message.
# Useful to enforce the timeout set by dunst configuration. Without this
# parameter, an application may close the notification sent before the
# user defined timeout.
ignore_dbusclose = false
### Wayland ###
# These settings are Wayland-specific. They have no effect when using X11
# Uncomment this if you want to let notifications appear under fullscreen
# applications (default: overlay)
# layer = top
# Set this to true to use X11 output on Wayland.
force_xwayland = false
### Legacy
# Use the Xinerama extension instead of RandR for multi-monitor support.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
### mouse
# Defines list of actions for each mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: Invoke the action determined by the action_name rule. If there is no
# such action, open the context menu.
# * open_url: If the notification has exactly one url, open it. If there are multiple
# ones, open the context menu.
# * close_current: Close current notification.
# * close_all: Close all notifications.
# * context: Open context menu for the notification.
# * context_all: Open context menu for all notifications.
# These values can be strung together for each mouse event, and
# will be executed in sequence.
mouse_left_click = close_current
mouse_middle_click = do_action, close_current
mouse_right_click = close_all
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "#1a1a1a"
foreground = "#5018dd"
frame_color = "#5018dd"
timeout = 10
# Icon for notifications with low urgency
default_icon = dialog-information
[urgency_normal]
background = "#1a1a1a"
foreground = "#E40046"
frame_color = "#5018dd"
timeout = 10
override_pause_level = 30
# Icon for notifications with normal urgency
default_icon = dialog-information
[urgency_critical]
background = "#E40046"
foreground = "#5018dd"
frame_color = "#5018dd"
timeout = 0
override_pause_level = 60
# Icon for notifications with critical urgency
default_icon = dialog-warning
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# set_category
# timeout
# urgency
# icon_position
# skip_display
# history_ignore
# action_name
# word_wrap
# ellipsize
# alignment
# hide_text
# override_pause_level
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# You can also allow a notification to appear even when paused. Notification will appear whenever notification's override_pause_level >= dunst's paused level.
# This can be used to set partial pause modes, where more urgent notifications get through, but less urgent stay paused. To do that, you can override the following in the rules:
# override_pause_level = X
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# skip_display = true
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg

View File

@ -0,0 +1 @@
/home/themiro/Dotfiles/desktopenvs/hyprland/eww/

View File

@ -0,0 +1,104 @@
* {
all: unset; // Unsets everything so you can style everything from scratch
font-family: Agave Nerd Font Mono, sans-serif;
font-size: 14pt;
}
tooltip {
border: solid;
border-width: 3px;
background: #1a1a1a;
color: #5018dd;
border-radius: 25px;
}
// Global Styles
.bar {
color: #b0b4bc;
padding: 10px;
}
// Styles on classes (see eww.yuck for more information)
.sidestuff slider {
all: unset;
color: #ffd5cd;
}
.metric scale trough highlight {
all: unset;
background: #E40046;
color: #000000;
border-radius: 10px;
}
.metric scale trough {
all: unset;
background-color: #5018dd;
border-radius: 50px;
min-height: 3px;
min-width: 50px;
margin-left: 10px;
margin-right: 20px;
}
.label-ram {
font-size: large;
}
.music,.metric,.clock,.workspace-button {
border: solid;
border-width: 3px;
background: #1a1a1a;
color: #5018dd;
padding-top:5px;
margin-top:1px;
padding-bottom:5px;
margin-bottom:1px;
padding-left:5px;
margin-left:4px;
padding-right:5px;
margin-right:4px;
border-radius: 25px;
}
.workspace-active {
color: #E40046;
}
menuitem {
border: solid;
border-width: 3px;
background: #1a1a1a;
color: #5018dd;
padding-top:2px;
margin-top:3px;
padding-bottom:2px;
margin-bottom:3px;
padding-left:2px;
margin-left:3px;
padding-right:2px;
margin-right:3px;
border-radius: 25px;
}
menuitem:hover {
color: #E40046;
}

View File

@ -0,0 +1,114 @@
(defwindow bar [monitor]
:monitor monitor
:class "ewwbar"
:windowtype "dock"
:geometry (geometry :x "0%"
:y "1%"
:width "99%"
:height "20px"
:anchor "top center")
:exclusive true
(bar :monitor_ monitor))
(defwidget bar [monitor_]
(centerbox :orientation "h"
(winsworks :monitor monitor_)
(music)
(sidestuff)))
(defwidget winsworks [monitor]
(box :orientation "h" :space-evenly false :halign "start"
(workspaceWidget :monitor monitor)
(button :onclick "~/Dotfiles/desktopenvs/hyprland/scripts/drawer.sh" :class "music" {" ${activewindow}"})
)
)
(defwidget sidestuff []
(box :class "sidestuff" :orientation "h" :space-evenly false :halign "end"
(box :class "music" {"󰛳 ${IP}"})
(metric :label "󰓃"
:value volume
:onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%"
:onclick "killall pavucontrol || hyprctl dispatch exec \[tag +mixer\] pavucontrol")
(box
:tooltip {disks}
(metric :label ""
:value {round((1 - (EWW_DISK["/"].free / EWW_DISK["/"].total)) * 100, 0)}
:onchange ""
:onclick ""))
(clock)
(systray :class "music" :orientation "h" :spacing 2 :space-evenly true)
))
(defwidget music []
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "~/Dotfiles/desktopenvs/hyprland/scripts/playpause.sh"
{music != "" ? " ${music}" : " None"}))
(defwidget metric [label value onchange onclick]
(box :orientation "h"
:class "metric"
:space-evenly false
(button :class "label" :onclick onclick label)
(scale :min 0
:max 101
:active {onchange != ""}
:value value
:onchange onchange)))
(deflisten workspaces "hyprland-workspaces _")
(defwidget workspaceWidget [monitor]
(eventbox :onscroll "hyprctl dispatch workspace `echo {} | sed 's/up/+/\' | sed 's/down/-/'`1"
(box :class "workspaces"
:space-evenly false
:width 20
(for i in {workspaces[monitor].workspaces}
(button
:width 20
:onclick "hyprctl dispatch workspace ${i.id}"
:class "${i.class}"
{i.name == "special:magic" ? "󱂬" : "󱂬${i.name}"})))))
(deflisten workspace-old "~/Dotfiles/desktopenvs/hyprland/scripts/workspace")
(defwidget workspaces-old []
(literal :content workspace-old))
(defpoll music :interval "0.5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/playerget")
(defpoll activewindow :interval "0.5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/activewindow")
(defpoll IP :interval "5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/ip")
(defpoll volume :interval "0.5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/getvol")
(defpoll time :interval "1s"
"date '+%H:%M:%S|%d.%m.%Y'")
(defwidget clock []
(box :class "clock"
:tooltip {calender}
(label :text {"${time}"})
)
)
(defpoll calender :interval "600s"
"~/Dotfiles/desktopenvs/hyprland/scripts/calender-fix.sh")
(defpoll disks :interval "600s"
"~/Dotfiles/desktopenvs/hyprland/scripts/dysk-phydisks.sh")

View File

@ -0,0 +1 @@
/home/themiro/Dotfiles/desktopenvs/hyprland/eww/

View File

@ -0,0 +1,104 @@
* {
all: unset; // Unsets everything so you can style everything from scratch
font-family: Agave Nerd Font Mono, sans-serif;
font-size: 27pt;
}
tooltip {
border: solid;
border-width: 3px;
background: #1a1a1a;
color: #5018dd;
border-radius: 35px;
}
// Global Styles
.bar {
color: #b0b4bc;
padding: 10px;
}
// Styles on classes (see eww.yuck for more information)
.sidestuff slider {
all: unset;
color: #ffd5cd;
}
.metric scale trough highlight {
all: unset;
background: #E40046;
color: #000000;
border-radius: 10px;
}
.metric scale trough {
all: unset;
background-color: #5018dd;
border-radius: 50px;
min-height: 3px;
min-width: 50px;
margin-left: 10px;
margin-right: 20px;
}
.label-ram {
font-size: large;
}
.music,.metric,.clock,.workspace-button {
border: solid;
border-width: 3px;
background: #1a1a1a;
color: #5018dd;
padding-top:5px;
margin-top:1px;
padding-bottom:5px;
margin-bottom:1px;
padding-left:5px;
margin-left:4px;
padding-right:5px;
margin-right:4px;
border-radius: 25px;
}
.workspace-active {
color: #E40046;
}
menuitem {
border: solid;
border-width: 3px;
background: #1a1a1a;
color: #5018dd;
padding-top:2px;
margin-top:3px;
padding-bottom:2px;
margin-bottom:3px;
padding-left:2px;
margin-left:3px;
padding-right:2px;
margin-right:3px;
border-radius: 25px;
}
menuitem:hover {
color: #E40046;
}

View File

@ -0,0 +1,161 @@
(defwindow bar [monitor]
:monitor monitor
:class "ewwbar"
:windowtype "dock"
:geometry (geometry :x "0%"
:y "1%"
:width "99%"
:height "5%"
:anchor "top center")
:exclusive true
(bar :monitor_ monitor))
(defpoll battery :interval "2s"
"~/.config/scripts/batteryperc")
(defwidget bar [monitor_]
(centerbox :orientation "h"
(winsworks :monitor monitor_)
(screenrotate )
(sidestuff)))
(defwidget winsworks [monitor]
(box :orientation "h" :space-evenly false :halign "start"
(osk)
(box :class "music" {"${battery}"})
(button :onclick "~/Dotfiles/desktopenvs/hyprland/scripts/drawer.sh" :class "music" {""})
(metric :label "󰓃 "
:value volume
:onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%"
:onclick "killall pavucontrol || hyprctl dispatch exec \[tag +mixer\] pavucontrol")
)
)
(defwidget sidestuff []
(box :class "sidestuff" :orientation "h" :space-evenly false :halign "end"
(clock)
(systray :class "music" :orientation "h" :spacing 2 :space-evenly true)
))
(defwidget screenrotate []
(box :orientation "h" :space-evenly false :halign "center"
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "hyprctl dispatch workspace -1"
{""}
)
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "~/.config/scripts/screenrotationacw.sh"
{"󱞧"}
)
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "hyprctl dispatch killactive"
{""}
)
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "~/.config/scripts/screenrotationwcw.sh"
{"󱞫"}
)
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "hyprctl dispatch workspace +1"
{""}
)
))
(defwidget music []
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "~/Dotfiles/desktopenvs/hyprland/scripts/playpause.sh"
{music != "" ? " ${music}" : " None"}))
(defwidget osk []
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "~/.config/scripts/onscreenkb.sh"
{" 󰌌"}
)
)
(defwidget metric [label value onchange onclick]
(box :orientation "h"
:class "metric"
:space-evenly false
(button :class "label" :onclick onclick label)
(scale :min 0
:max 101
:active {onchange != ""}
:value value
:onchange onchange)))
(deflisten workspaces "hyprland-workspaces _")
(defwidget workspaceWidget [monitor]
(eventbox :onscroll "hyprctl dispatch workspace `echo {} | sed 's/up/+/\' | sed 's/down/-/'`1"
(box :class "workspaces"
:space-evenly false
:width 20
(for i in {workspaces[monitor].workspaces}
(button
:width 20
:onclick "hyprctl dispatch workspace ${i.id}"
:class "${i.class}"
{i.name == "special:magic" ? "󱂬" : "󱂬${i.name}"})))))
(deflisten workspace-old "~/Dotfiles/desktopenvs/hyprland/scripts/workspace")
(defwidget workspaces-old []
(literal :content workspace-old))
(defpoll music :interval "0.5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/playerget")
(defpoll activewindow :interval "0.5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/activewindow")
(defpoll IP :interval "5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/ip")
(defpoll volume :interval "0.5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/getvol")
(defpoll time :interval "1s"
"date '+%H:%M:%S|%d.%m.%Y'")
(defwidget clock []
(box :class "clock"
:tooltip {calender}
(label :text {"${time}"})
)
)
(defpoll calender :interval "600s"
"~/Dotfiles/desktopenvs/hyprland/scripts/calender-fix.sh")

View File

@ -0,0 +1,150 @@
(defwindow bar [monitor]
:monitor monitor
:class "ewwbar"
:windowtype "dock"
:geometry (geometry :x "0%"
:y "1%"
:width "99%"
:height "5%"
:anchor "top center")
:exclusive true
(bar :monitor_ monitor))
(defpoll battery :interval "2s"
"~/.config/scripts/batteryperc")
(defwidget bar [monitor_]
(centerbox :orientation "h"
(winsworks :monitor monitor_)
(screenrotate )
(sidestuff)))
(defwidget winsworks [monitor]
(box :orientation "h" :space-evenly false :halign "start"
(osk)
(box :class "music" {"${battery}"})
(workspaceWidget :monitor monitor)
(button :onclick "~/Dotfiles/desktopenvs/hyprland/scripts/drawer.sh" :class "music" {" ${activewindow}"})
)
)
(defwidget sidestuff []
(box :class "sidestuff" :orientation "h" :space-evenly false :halign "end"
(metric :label "󰓃 "
:value volume
:onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%"
:onclick "hyprctl dispatch exec \[tag +mixer\] hyprpwcenter")
(metric :label " "
:value {round((1 - (EWW_DISK["/"].free / EWW_DISK["/"].total)) * 100, 0)}
:onchange ""
:onclick "")
(clock)
(systray :class "music" :orientation "h" :spacing 2 :space-evenly true)
))
(defwidget screenrotate []
(box :orientation "h" :space-evenly false :halign "center"
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "~/.config/scripts/screenrotationacw.sh"
{"󱞧"}
)
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "hyprctl dispatch killactive"
{""}
)
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "~/.config/scripts/screenrotationwcw.sh"
{"󱞫"}
)
))
(defwidget music []
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "~/Dotfiles/desktopenvs/hyprland/scripts/playpause.sh"
{music != "" ? " ${music}" : " None"}))
(defwidget osk []
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "~/.config/scripts/onscreenkb.sh"
{" 󰌌"}
)
)
(defwidget metric [label value onchange onclick]
(box :orientation "h"
:class "metric"
:space-evenly false
(button :class "label" :onclick onclick label)
(scale :min 0
:max 101
:active {onchange != ""}
:value value
:onchange onchange)))
(deflisten workspaces "hyprland-workspaces _")
(defwidget workspaceWidget [monitor]
(eventbox :onscroll "hyprctl dispatch workspace `echo {} | sed 's/up/+/\' | sed 's/down/-/'`1"
(box :class "workspaces"
:space-evenly false
:width 20
(for i in {workspaces[monitor].workspaces}
(button
:width 20
:onclick "hyprctl dispatch workspace ${i.id}"
:class "${i.class}"
{i.name == "special:magic" ? "󱂬" : "󱂬${i.name}"})))))
(deflisten workspace-old "~/Dotfiles/desktopenvs/hyprland/scripts/workspace")
(defwidget workspaces-old []
(literal :content workspace-old))
(defpoll music :interval "0.5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/playerget")
(defpoll activewindow :interval "0.5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/activewindow")
(defpoll IP :interval "5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/ip")
(defpoll volume :interval "0.5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/getvol")
(defpoll time :interval "1s"
"date '+%H:%M:%S|%d.%m.%Y'")
(defwidget clock []
(box :class "clock"
:tooltip {calender}
(label :text {"${time}"})
)
)
(defpoll calender :interval "600s"
"~/Dotfiles/desktopenvs/hyprland/scripts/calender-fix.sh")

1
desktopenvs/hyprlua/eww/eww Symbolic link
View File

@ -0,0 +1 @@
/home/themiro/Dotfiles/desktopenvs/hyprland/eww/

View File

@ -0,0 +1,104 @@
* {
all: unset; // Unsets everything so you can style everything from scratch
font-family: Agave Nerd Font Mono, sans-serif;
font-size: 14pt;
}
tooltip {
border: solid;
border-width: 3px;
background: #1a1a1a;
color: #5018dd;
border-radius: 25px;
}
// Global Styles
.bar {
color: #b0b4bc;
padding: 10px;
}
// Styles on classes (see eww.yuck for more information)
.sidestuff slider {
all: unset;
color: #ffd5cd;
}
.metric scale trough highlight {
all: unset;
background: #E40046;
color: #000000;
border-radius: 10px;
}
.metric scale trough {
all: unset;
background-color: #5018dd;
border-radius: 50px;
min-height: 3px;
min-width: 50px;
margin-left: 10px;
margin-right: 20px;
}
.label-ram {
font-size: large;
}
.music,.metric,.clock,.workspace-button {
border: solid;
border-width: 3px;
background: #1a1a1a;
color: #5018dd;
padding-top:5px;
margin-top:1px;
padding-bottom:5px;
margin-bottom:1px;
padding-left:5px;
margin-left:4px;
padding-right:5px;
margin-right:4px;
border-radius: 25px;
}
.workspace-active {
color: #E40046;
}
menuitem {
border: solid;
border-width: 3px;
background: #1a1a1a;
color: #5018dd;
padding-top:2px;
margin-top:3px;
padding-bottom:2px;
margin-bottom:3px;
padding-left:2px;
margin-left:3px;
padding-right:2px;
margin-right:3px;
border-radius: 25px;
}
menuitem:hover {
color: #E40046;
}

View File

@ -0,0 +1,119 @@
(defwindow bar [monitor]
:monitor monitor
:class "ewwbar"
:windowtype "dock"
:geometry (geometry :x "0%"
:y "1%"
:width "99%"
:height "20px"
:anchor "top center")
:exclusive true
(bar :monitor_ monitor))
(defpoll battery :interval "2s"
"~/Dotfiles/desktopenvs/hyprland/scripts/batteryperc")
(defwidget bar [monitor_]
(centerbox :orientation "h"
(winsworks :monitor monitor_)
(music)
(sidestuff)))
(defwidget winsworks [monitor]
(box :orientation "h" :space-evenly false :halign "start"
(box :class "music" {"${battery}"})
(workspaceWidget :monitor monitor)
(button :onclick "~/Dotfiles/desktopenvs/hyprland/scripts/drawer.sh" :class "music" {" ${activewindow}"})
)
)
(defwidget sidestuff []
(box :class "sidestuff" :orientation "h" :space-evenly false :halign "end"
(box :class "music" {"󰛳 ${IP}"})
(metric :label "󰓃"
:value volume
:onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%"
:onclick "killall pavucontrol || hyprctl dispatch exec \[tag +mixer\] pavucontrol")
(box
:tooltip {disks}
(metric :label ""
:value {round((1 - (EWW_DISK["/"].free / EWW_DISK["/"].total)) * 100, 0)}
:onchange ""
:onclick ""))
(clock)
(systray :class "music" :orientation "h" :spacing 2 :space-evenly true)
))
(defwidget music []
(button :class "music"
:orientation "h"
:space-evenly false
:halign "center"
:onclick "~/Dotfiles/desktopenvs/hyprland/scripts/playpause.sh"
{music != "" ? " ${music}" : " None"}))
(defwidget metric [label value onchange onclick]
(box :orientation "h"
:class "metric"
:space-evenly false
(button :class "label" :onclick onclick label)
(scale :min 0
:max 101
:active {onchange != ""}
:value value
:onchange onchange)))
(deflisten workspaces "hyprland-workspaces _")
(defwidget workspaceWidget [monitor]
(eventbox :onscroll "hyprctl dispatch workspace `echo {} | sed 's/up/+/\' | sed 's/down/-/'`1"
(box :class "workspaces"
:space-evenly false
:width 20
(for i in {workspaces[monitor].workspaces}
(button
:width 20
:onclick "hyprctl dispatch workspace ${i.id}"
:class "${i.class}"
{i.name == "special:magic" ? "󱂬" : "󱂬${i.name}"})))))
(deflisten workspace-old "~/Dotfiles/desktopenvs/hyprland/scripts/workspace")
(defwidget workspaces-old []
(literal :content workspace-old))
(defpoll music :interval "0.5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/playerget")
(defpoll activewindow :interval "0.5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/activewindow")
(defpoll IP :interval "5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/ip")
(defpoll volume :interval "0.5s"
"~/Dotfiles/desktopenvs/hyprland/scripts/getvol")
(defpoll time :interval "1s"
"date '+%H:%M:%S|%d.%m.%Y'")
(defwidget clock []
(box :class "clock"
:tooltip {calender}
(label :text {"${time}"})
)
)
(defpoll calender :interval "600s"
"~/Dotfiles/desktopenvs/hyprland/scripts/calender-fix.sh")
(defpoll disks :interval "600s"
"~/Dotfiles/desktopenvs/hyprland/scripts/dysk-phydisks.sh")

View File

@ -0,0 +1,16 @@
[terminal]
# The VT to run the greeter on. Can be "next", "current" or a number
# designating the VT.
vt = 1
# The default session, also known as the greeter.
[default_session]
# `agreety` is the bundled agetty/login-lookalike. You can replace `/bin/sh`
# with whatever you want started, such as `sway`.
command = "tuigreet --cmd Hyprland"
# The user to run the command as. The privileges this user must have depends
# on the greeter. A graphical greeter may for example require the user to be
# in the `video` group.
user = "greeter"

View File

@ -0,0 +1 @@
file://$HOME/Nextcloud

View File

@ -0,0 +1,17 @@
[Settings]
gtk-theme-name=cyberqueer
gtk-icon-theme-name=Papirus-Dark
gtk-font-name=Adwaita Sans 11
gtk-cursor-theme-name=Nordzy-cursors-lefthand
gtk-cursor-theme-size=50
gtk-toolbar-style=GTK_TOOLBAR_ICONS
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-button-images=0
gtk-menu-images=0
gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=0
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=hintslight
gtk-xft-rgba=rgb
gtk-application-prefer-dark-theme=0

View File

@ -0,0 +1,23 @@
-- https://wiki.hypr.land/Configuring/Basics/Autostart/
hl.on("hyprland.start", function()
-- monitorhandler (was exec-once in monitors.conf)
hl.exec_cmd("~/Dotfiles/desktopenvs/hyprlua/scripts/monitorhandler.sh")
hl.exec_cmd("export QT_QPA_PLATFORMTHEME='' && vicinae server")
hl.exec_cmd("bash ~/Dotfiles/desktopenvs/hyprlua/scripts/bluetooth-applet.sh")
hl.exec_cmd("bash ~/Dotfiles/desktopenvs/hyprlua/scripts/ulwatchdog.sh")
hl.exec_cmd("bash ~/Dotfiles/desktopenvs/hyprlua/scripts/ewwstart.sh")
hl.exec_cmd("udiskie -t -m nested -n")
hl.exec_cmd("~/.config/scripts/unified-rotate.sh cw && sleep 0.3 && ~/.config/scripts/unified-rotate.sh ccw")
hl.exec_cmd("systemctl --user start hyprpolkitagent")
hl.exec_cmd("hyprsunset")
hl.exec_cmd("nm-applet")
hl.exec_cmd("dunst")
hl.exec_cmd("[workspace special:magic silent] kitty")
hl.exec_cmd("hyprctl setcursor Nordzy-cursors-lefthand 50")
hl.exec_cmd("hyprpaper")
hl.exec_cmd("GTK_THEME=Default nwg-dock-hyprland -mb 15 -r -p right -s style.css")
hl.exec_cmd("blueman-applet")
hl.exec_cmd("blueman-tray")
hl.exec_cmd("hypridle")
end)

View File

@ -0,0 +1,267 @@
-- https://wiki.hypr.land/Configuring/Basics/Binds/
local mainMod = "SUPER"
local terminal = "kitty"
local fileManager = "thunar"
local editor = "kitty nvim"
local menu = "vicinae toggle"
local winswitch = "" -- TODO: define your window switcher command
--------------------
---- LID SWITCH ----
--------------------
hl.bind("switch:on:Lid Switch", hl.dsp.exec_cmd("systemctl suspend &"), { locked = true })
hl.bind("switch:off:Lid Switch", hl.dsp.exec_cmd("hyprctl dispatch exec hyprlock"), { locked = true })
--------------------
---- GESTURES ------
--------------------
hl.gesture({ fingers = 3, direction = "horizontal", action = "workspace" })
-- TODO: verify dispatcher syntax for non-built-in gesture actions in Lua:
-- gesture = 3, up, dispatcher, movetoworkspacesilent, special:magic
-- gesture = 3, down, special, magic
-- gesture = 3, pinchin, dispatcher, exec, $menu
-- gesture = 3, pinchout, float
-- gesture = 4, pinchout, close
-- gesture = 4, pinchin, dispatcher, exec, $terminal
-- gesture = 4, down, dispatcher, movetoworkspace, special:magic
-- gesture = 4, up, dispatcher, movetoworkspace, r+0
-- gesture = 4, left, dispatcher, movetoworkspace, r+1
-- gesture = 4, right, dispatcher, movetoworkspace, r-1
--------------------
---- APPS ----------
--------------------
hl.bind(mainMod .. " + T", hl.dsp.exec_cmd(terminal))
hl.bind(mainMod .. " + SHIFT + T", hl.dsp.exec_cmd("cool-retro-term -p ~/Dotfiles/desktopenvs/hyprlua/CRT"))
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd(editor))
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager))
hl.bind(mainMod .. " + ALT + E", hl.dsp.exec_cmd("pcmanfm-qt"))
hl.bind(mainMod .. " + X", hl.dsp.exec_cmd("wofi --show=run"))
hl.bind(mainMod .. " + N", hl.dsp.exec_cmd("nextcloud"))
hl.bind(mainMod .. " + I", hl.dsp.exec_cmd("iwmenu --launcher walker"))
hl.bind(mainMod .. " + ALT + I", hl.dsp.exec_cmd("bzmenu --launcher walker"))
hl.bind(mainMod .. " + SHIFT + I", hl.dsp.exec_cmd("[tag +mixer] nm-connection-editor"))
hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(menu))
hl.bind(mainMod .. " + RETURN", hl.dsp.exec_cmd(menu))
hl.bind(mainMod .. " + SHIFT + RETURN", hl.dsp.exec_cmd(winswitch))
hl.bind(mainMod .. " + SHIFT + R", hl.dsp.exec_cmd("wofi --show drun"))
hl.bind("CTRL + SHIFT + R", hl.dsp.exec_cmd(menu))
hl.bind(mainMod .. " + F", hl.dsp.exec_cmd("~/.config/scripts/wofi-file-search.sh"))
hl.bind(mainMod .. " + SHIFT + F", hl.dsp.exec_cmd("~/.config/scripts/foldersearch.sh"))
hl.bind(mainMod .. " + ALT + F", hl.dsp.exec_cmd("wofi-calc"))
hl.bind(mainMod .. " + S", hl.dsp.exec_cmd("[tag +mixer] pavucontrol"))
hl.bind(mainMod .. " + U", hl.dsp.exec_cmd("[tag +centered-L] kitty btop"))
hl.bind(mainMod .. " + W", hl.dsp.exec_cmd("[tag +centered-L] kitty -e ~/.config/scripts/wallpaper-picker ~/Pictures"))
hl.bind(mainMod .. " + CTRL + R", hl.dsp.exec_cmd("[tag +centered-L] kitty -e ~/.config/scripts/amssh"))
hl.bind(mainMod .. " + F1", hl.dsp.exec_cmd("[tag +centered] kitty ~/.config/scripts/helpmenu.sh"))
hl.bind(mainMod .. " + CTRL + T", hl.dsp.exec_cmd("[tag +centered-S] kitty bash ~/.config/scripts/timer-pick"))
hl.bind(mainMod .. " + SHIFT + F1", hl.dsp.exec_cmd("[tag +centered-L] kitty nvim ~/.config/binds.lua"))
hl.bind(mainMod .. " + CTRL + P", hl.dsp.exec_cmd("~/.config/scripts/screenrec.sh"))
--------------------
---- WINDOW MGMT ---
--------------------
hl.bind(mainMod .. " + Q", hl.dsp.window.close())
hl.bind(mainMod .. " + V", hl.dsp.window.float({ action = "toggle" }))
hl.bind(mainMod .. " + C", hl.dsp.window.pseudo())
hl.bind(mainMod .. " + SHIFT + V", hl.dsp.window.tag("+centered")) -- TODO: verify hl.dsp.window.tag() API
hl.bind(mainMod .. " + SHIFT + Q", hl.dsp.exec_cmd("hyprctl kill"))
hl.bind(mainMod .. " + CTRL + M", hl.dsp.exec_cmd("~/.config/scripts/toggle-layout.sh"))
-- lock/exit
hl.bind(mainMod .. " + O", hl.dsp.exec_cmd("hyprlock"))
hl.bind(mainMod .. " + SHIFT + O", hl.dsp.exec_cmd("hyprctl dispatch exit"))
hl.bind(mainMod .. " + CTRL + O", hl.dsp.exec_cmd("systemctl poweroff"))
hl.bind(mainMod .. " + ALT + O", hl.dsp.exec_cmd("~/.config/scripts/pwr-dmenu.sh"))
hl.bind(mainMod .. " + ALT + CTRL + SHIFT + END", hl.dsp.exit())
-- bar / ui
hl.bind(mainMod .. " + Z", hl.dsp.exec_cmd("~/.config/scripts/togglebar.sh"))
hl.bind(mainMod .. " + CTRL + B", hl.dsp.exec_cmd("eww reload"))
--------------------
---- FOCUS ---------
--------------------
hl.bind(mainMod .. " + h", hl.dsp.focus({ direction = "left" }))
hl.bind(mainMod .. " + l", hl.dsp.focus({ direction = "right" }))
hl.bind(mainMod .. " + k", hl.dsp.focus({ direction = "up" }))
hl.bind(mainMod .. " + j", hl.dsp.focus({ direction = "down" }))
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
hl.bind(mainMod .. " + TAB", hl.dsp.focus({ cycle = true })) -- TODO: verify cycle focus API
hl.bind(mainMod .. " + SHIFT + TAB", hl.dsp.exec_cmd(winswitch))
--------------------
---- MOVE WINDOW ---
--------------------
hl.bind(mainMod .. " + SHIFT + left", hl.dsp.window.move({ direction = "left" }))
hl.bind(mainMod .. " + SHIFT + right", hl.dsp.window.move({ direction = "right" }))
hl.bind(mainMod .. " + SHIFT + up", hl.dsp.window.move({ direction = "up" }))
hl.bind(mainMod .. " + SHIFT + down", hl.dsp.window.move({ direction = "down" }))
hl.bind(mainMod .. " + SHIFT + h", hl.dsp.window.move({ direction = "left" }))
hl.bind(mainMod .. " + SHIFT + l", hl.dsp.window.move({ direction = "right" }))
hl.bind(mainMod .. " + SHIFT + k", hl.dsp.window.move({ direction = "up" }))
hl.bind(mainMod .. " + SHIFT + j", hl.dsp.window.move({ direction = "down" }))
-- mouse drag / resize
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
hl.bind(mainMod .. " + SHIFT + mouse:272", hl.dsp.window.resize(), { mouse = true })
--------------------
---- RESIZE --------
--------------------
hl.bind(mainMod .. " + ALT + right", hl.dsp.window.resize({ delta = "10 0" }), { repeating = true }) -- TODO: verify resize delta API
hl.bind(mainMod .. " + ALT + left", hl.dsp.window.resize({ delta = "-10 0" }), { repeating = true })
hl.bind(mainMod .. " + ALT + up", hl.dsp.window.resize({ delta = "0 -10" }), { repeating = true })
hl.bind(mainMod .. " + ALT + down", hl.dsp.window.resize({ delta = "0 10" }), { repeating = true })
hl.bind(mainMod .. " + ALT + l", hl.dsp.window.resize({ delta = "10 0" }), { repeating = true })
hl.bind(mainMod .. " + ALT + h", hl.dsp.window.resize({ delta = "-10 0" }), { repeating = true })
hl.bind(mainMod .. " + ALT + k", hl.dsp.window.resize({ delta = "0 -10" }), { repeating = true })
hl.bind(mainMod .. " + ALT + j", hl.dsp.window.resize({ delta = "0 10" }), { repeating = true })
--------------------
---- WORKSPACES ----
--------------------
for i = 1, 9 do
hl.bind(mainMod .. " + " .. i, hl.dsp.focus({ workspace = i }))
hl.bind(mainMod .. " + SHIFT + " .. i, hl.dsp.window.move({ workspace = i }))
end
hl.bind(mainMod .. " + 0", hl.dsp.focus({ workspace = 10 }))
hl.bind(mainMod .. " + SHIFT + 0", hl.dsp.window.move({ workspace = 10 }))
-- relative workspace nav — arrows
hl.bind(mainMod .. " + CTRL + right", hl.dsp.focus({ workspace = "r+1" }))
hl.bind(mainMod .. " + CTRL + left", hl.dsp.focus({ workspace = "r-1" }))
hl.bind(mainMod .. " + CTRL + SHIFT + right", hl.dsp.window.move({ workspace = "r+1" }))
hl.bind(mainMod .. " + CTRL + SHIFT + left", hl.dsp.window.move({ workspace = "r-1" }))
-- relative workspace nav — vim
hl.bind(mainMod .. " + CTRL + l", hl.dsp.focus({ workspace = "r+1" }))
hl.bind(mainMod .. " + CTRL + h", hl.dsp.focus({ workspace = "r-1" }))
hl.bind(mainMod .. " + CTRL + SHIFT + l", hl.dsp.window.move({ workspace = "r+1" }))
hl.bind(mainMod .. " + CTRL + SHIFT + h", hl.dsp.window.move({ workspace = "r-1" }))
-- scroll through workspaces
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "r+1" }))
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "r-1" }))
-- volume keys as workspace nav (when mainMod held)
hl.bind(mainMod .. " + XF86AudioRaiseVolume", hl.dsp.focus({ workspace = "r+1" }), { repeating = true })
hl.bind(mainMod .. " + XF86AudioLowerVolume", hl.dsp.focus({ workspace = "r-1" }), { repeating = true })
hl.bind(mainMod .. " + SHIFT + XF86AudioRaiseVolume", hl.dsp.window.move({ workspace = "r+1" }))
hl.bind(mainMod .. " + SHIFT + XF86AudioLowerVolume", hl.dsp.window.move({ workspace = "r-1" }))
--------------------
---- SCRATCHPAD ----
--------------------
hl.bind(mainMod .. " + SPACE", hl.dsp.workspace.toggle_special("magic"))
hl.bind(mainMod .. " + SHIFT + SPACE", hl.dsp.window.move({ workspace = "special:magic" }))
hl.bind(mainMod .. " + CTRL + up", hl.dsp.workspace.toggle_special("magic"))
hl.bind(mainMod .. " + CTRL + SHIFT + up", hl.dsp.window.move({ workspace = "special:magic" }))
hl.bind(mainMod .. " + CTRL + SHIFT + down", hl.dsp.window.move({ workspace = "empty" }))
hl.bind(mainMod .. " + CTRL + down", hl.dsp.window.move({ workspace = "special:magic", silent = true }))
hl.bind(mainMod .. " + CTRL + k", hl.dsp.workspace.toggle_special("magic"))
hl.bind(mainMod .. " + CTRL + j", hl.dsp.window.move({ workspace = "special:magic", silent = true }))
hl.bind(mainMod .. " + CTRL + SHIFT + j", hl.dsp.window.move({ workspace = "r+0" }))
hl.bind(mainMod .. " + CTRL + SHIFT + k", hl.dsp.window.move({ workspace = "special:magic" }))
hl.bind(mainMod .. " + XF86AudioMute", hl.dsp.workspace.toggle_special("magic"), { repeating = true })
hl.bind(mainMod .. " + SHIFT + XF86AudioMute", hl.dsp.window.move({ workspace = "special:magic" }), { repeating = true })
--------------------
---- GROUPS --------
--------------------
hl.bind(mainMod .. " + ALT + C", hl.dsp.group.toggle()) -- TODO: verify hl.dsp.group API
hl.bind(mainMod .. " + CTRL + SHIFT + C", hl.dsp.group.lock_active("toggle"))
hl.bind(mainMod .. " + A", hl.dsp.group.change_active("f"))
hl.bind(mainMod .. " + Y", hl.dsp.group.change_active("b"))
hl.bind(mainMod .. " + SHIFT + ALT + left", hl.dsp.group.move_window("l"))
hl.bind(mainMod .. " + SHIFT + ALT + right", hl.dsp.group.move_window("r"))
hl.bind(mainMod .. " + SHIFT + ALT + up", hl.dsp.group.move_window("u"))
hl.bind(mainMod .. " + SHIFT + ALT + down", hl.dsp.group.move_window("d"))
hl.bind(mainMod .. " + SHIFT + ALT + h", hl.dsp.group.move_window("l"))
hl.bind(mainMod .. " + SHIFT + ALT + l", hl.dsp.group.move_window("r"))
hl.bind(mainMod .. " + SHIFT + ALT + k", hl.dsp.group.move_window("u"))
hl.bind(mainMod .. " + SHIFT + ALT + j", hl.dsp.group.move_window("d"))
--------------------
---- NWG-DOCK ------
--------------------
hl.bind(mainMod .. " + SHIFT + W", hl.dsp.exec_cmd("killall nwg-dock-hyprland && nwg-dock-hyprland -c ~/.config/scripts/drawer.sh -ml 15 -r -s style.css -p left"))
hl.bind(mainMod .. " + SHIFT + E", hl.dsp.exec_cmd("killall nwg-dock-hyprland && nwg-dock-hyprland -c ~/.config/scripts/drawer.sh -mr 15 -r -s style.css -p right"))
hl.bind(mainMod .. " + SHIFT + S", hl.dsp.exec_cmd("killall nwg-dock-hyprland && nwg-dock-hyprland -c ~/.config/scripts/drawer.sh -mt 80 -r -s style.css -p top"))
hl.bind(mainMod .. " + SHIFT + D", hl.dsp.exec_cmd("killall nwg-dock-hyprland && nwg-dock-hyprland -c ~/.config/scripts/drawer.sh -mb 15 -r -s style.css -p bottom"))
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd("nwg-dock-hyprland"), { release = true })
hl.bind(mainMod .. " + SHIFT + A", hl.dsp.exec_cmd("~/.config/scripts/drawer.sh"))
--------------------
---- SCREENSHOT ----
--------------------
hl.bind("Print", hl.dsp.exec_cmd("~/.config/scripts/screenshot.sh"))
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("~/.config/scripts/screenshot.sh"))
hl.bind(mainMod .. " + SHIFT + P", hl.dsp.exec_cmd("hyprpicker | wl-copy"))
hl.bind(mainMod .. " + CTRL + P", hl.dsp.exec_cmd("~/.config/scripts/screenrec.sh"))
--------------------
---- AUDIO ---------
--------------------
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+"), { repeating = true })
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%-"), { repeating = true })
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"))
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"))
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause -p spotify,vlc"), { locked = true })
--------------------
---- BRIGHTNESS ----
--------------------
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("bri --up"), { locked = true, repeating = true })
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("bri --down"), { locked = true, repeating = true })
--------------------
---- HYPRSUNSET ----
--------------------
hl.bind(mainMod .. " + CTRL + W", hl.dsp.exec_cmd("hyprctl hyprsunset gamma +10"))
hl.bind(mainMod .. " + CTRL + S", hl.dsp.exec_cmd("hyprctl hyprsunset gamma -10"))
hl.bind(mainMod .. " + CTRL + A", hl.dsp.exec_cmd("hyprctl hyprsunset temperature +450"))
hl.bind(mainMod .. " + CTRL + Q", hl.dsp.exec_cmd("hyprctl hyprsunset temperature -450"))
hl.bind(mainMod .. " + CTRL + X", hl.dsp.exec_cmd("hyprctl hyprsunset identity"))
--------------------
---- MISC ----------
--------------------
hl.bind(mainMod .. " + CTRL + I", hl.dsp.exec_cmd("chamel toggle"))
hl.bind(mainMod .. " + CTRL + U", hl.dsp.exec_cmd("chamel clear"))
hl.bind(mainMod .. " + CTRL + Z", hl.dsp.exec_cmd("chamel clear-and-deactivate"))
hl.bind(mainMod .. " + CTRL + C", hl.dsp.exec_cmd("dunstctl close-all"))
hl.bind(mainMod .. " + CTRL + G", hl.dsp.exec_cmd("~/.config/scripts/onscreenkb.sh"))
hl.bind(mainMod .. " + SHIFT + C", hl.dsp.exec_cmd("~/.config/scripts/caffeine.sh"))
hl.bind(mainMod .. " + SHIFT + X", hl.dsp.exec_cmd("~/.config/scripts/hyprland-toggle-touchpad.sh"))
hl.bind(mainMod .. " + CTRL + E", hl.dsp.exec_cmd("~/.config/scripts/screenrotationwcw.sh"))
hl.bind(mainMod .. " + CTRL + D", hl.dsp.exec_cmd("~/.config/scripts/screenrotationacw.sh"))

View File

@ -0,0 +1,7 @@
hl.env("GTK_THEME", "cyberqueer")
hl.env("GDK_SCALE", "2")
hl.env("XCURSOR_SIZE", "40")
hl.env("HYPRCURSOR_SIZE", "40")
hl.env("QT_QPA_PLATFORMTHEME", "qt6ct")
hl.env("QT_STYLE_OVERRIDE", "Fusion")
hl.env("QT_STYLE_SHEET", "~/.config/qt6ct/qss/style.qss")

View File

@ -0,0 +1,16 @@
-- https://wiki.hypr.land/Configuring/Basics/Variables/
hl.config({
input = {
kb_layout = "de",
kb_variant = "",
kb_model = "",
kb_options = "caps:swapescape",
kb_rules = "",
left_handed = true,
follow_mouse = 1,
sensitivity = 0,
touchpad = {
natural_scroll = false,
},
},
})

View File

@ -0,0 +1,13 @@
-- https://wiki.hypr.land/Configuring/Basics/Monitors/
hl.monitor({
output = "",
mode = "highres",
position = "auto",
scale = 2,
})
hl.config({
xwayland = {
force_zero_scaling = true,
},
})

View File

@ -0,0 +1,7 @@
# template for ~/.config/wallpaper.conf — sourced by hypr/hyprpaper.conf,
# rewritten by ~/.config/scripts/wallpaper-picker
wallpaper {
monitor =
path = ~/Pictures/background.jpg
fit_mode = cover
}

View File

@ -0,0 +1,109 @@
layerrule = ignorezero, nwg-dock
workspace = w[tv1]s[false], gapsout:0, gapsin:0
workspace = f[1]s[false], gapsout:0, gapsin:0
windowrule = bordersize 2, floating:0, onworkspace:w[tv1]s[false]
windowrule = rounding 4, floating:0, onworkspace:w[tv1]s[false]
windowrule = bordersize 2, floating:0, onworkspace:f[1]s[false]
windowrule = rounding 4, floating:0, onworkspace:f[1]s[false]
# Example windowrule v1
#windowrule = float, ^(rofi)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
#windowrulev2 = noborder, class:wofi
windowrulev2 = float, class:wofi
windowrulev2 = pin, class:wofi
windowrulev2 = center, class:wofi
windowrulev2 = stayfocused, class:wofi
windowrulev2 = nomaxsize, class:wofi
windowrulev2 = minsize 5 5, class:wofi
windowrulev2 = noshadow, class:wofi
windowrulev2 = float, class:nm-connection-editor
windowrulev2 = pin, class:nm-connection-editor
windowrulev2 = center, class:nm-connection-editor
windowrulev2 = nomaxsize, class:nm-connection-editor
windowrulev2 = minsize 5 5, class:nm-connection-editor
windowrulev2 = noshadow, class:nm-connection-editor
windowrulev2 = opacity 1 0.8, class:kitty
windowrulev2 = opacity 0.8 0.3, initialTitle:Spotify
windowrulev2 = float, initialTitle:Spotify
windowrulev2 = noblur, initialTitle:Spotify
#windowrulev2 = float, class:Spaceengineers
#windowrulev2 = fullscreen, class:Spaceengineers
#windowrulev2 = stayfocused, class:Spaceengineers
#windowrule = float, class:steam_app_1133870
windowrulev2 = tile, class:RimWorldLinux
windowrulev2 = float, class:Drill.+
#windowrulev2 = fakefullscreen, title:Drill.+
#windowrule = fakefullscreen, class:steam_app_1217060
#windowrule = fakefullscreen, title:Gunfire Reborn
windowrule = float, class:steam_app_1217060
windowrule = float, title:Gunfire Reborn
#windowrulev2 = fullscreen, class:steam_app_1217060
#windowrulev2 = fullscreen, title:Gunfire Reborn
windowrulev2 = float, title:pico.+
windowrulev2 = minsize 60 70, title:.+btop.+
windowrulev2 = stayfocused, class:.+dmenu.+
windowrulev2 = move 65% 10%, class:com.nextcloud.desktopclient.nextcloud
windowrulev2 = float, class:com.nextcloud.desktopclient.nextcloud
windowrulev2 = pin, class:com.nextcloud.desktopclient.nextcloud
windowrulev2 = size 30% 50%, class:com.nextcloud.desktopclient.nextcloud
windowrulev2 = move 65% 10%, tag:mixer
windowrulev2 = float, tag:mixer
windowrulev2 = pin, tag:mixer
windowrulev2 = size 30% 50%, tag:mixer
windowrulev2 = move 65% 10%, class:blueman-manager
windowrulev2 = float, class:blueman-manager
windowrulev2 = pin, class:blueman-manager
windowrulev2 = size 30% 50%, class:blueman-manager
windowrulev2 = opacity 1 1 override, class:firefox
windowrulev2 = float, tag:centered
windowrulev2 = pin, tag:centered
windowrulev2 = center, tag:centered
windowrulev2 = stayfocused, tag:centered
windowrulev2 = size 40% 50%, tag:centered
windowrulev2 = float, tag:centered-L
windowrulev2 = pin, tag:centered-L
windowrulev2 = center, tag:centered-L
windowrulev2 = stayfocused, tag:centered-L
windowrulev2 = size 70% 80%, tag:centered-L
windowrulev2 = float, class:dev.benz.walker.+
windowrulev2 = pin, class:dev.benz.walker.+
windowrulev2 = center, class:dev.benz.walker.+
windowrulev2 = stayfocused, class:dev.benz.walker.+
windowrulev2 = minsize 180% 170%, class:dev.benz.walker.+
windowrulev2 = noblur, class:dev.benz.walker.+
windowrulev2 = noshadow, class:dev.benz.walker.+
windowrulev2 = noborder, class:dev.benz.walker.+
windowrulev2 = float, class:dev.benz.walker.+
windowrulev2 = float, class:dev.benz.walker
windowrulev2 = pin, class:dev.benz.walker
windowrulev2 = center, class:dev.benz.walker
windowrulev2 = stayfocused, class:dev.benz.walker
windowrulev2 = minsize 180% 170%, class:dev.benz.walker
windowrulev2 = noblur, class:dev.benz.walker
windowrulev2 = noshadow, class:dev.benz.walker
windowrulev2 = noborder, class:dev.benz.walker
windowrulev2 = float, class:dev.benz.walker
windowrulev2 = float, class:ulauncher
windowrulev2 = pin, class:ulauncher
windowrulev2 = stayfocused, class:ulauncher
windowrulev2 = minsize 180% 170%, class:ulauncher
windowrulev2 = noblur, class:ulauncher
windowrulev2 = noshadow, class:ulauncher
windowrulev2 = noborder, class:ulauncher
windowrulev2 = float, class:ulauncher
windowrulev2 = move onscreen cursor -10% -10%, initialClass:ulauncher
windowrulev2 = float, title:Quake 3: Arena
windowrulev2 = pin, title:Quake 3: Arena
windowrulev2 = center, title:Quake 3: Arena
windowrulev2 = stayfocused, title:Quake 3: Arena
windowrulev2 = minsize 80% 70%, title:Quake 3: Arena

View File

@ -0,0 +1,88 @@
-- https://wiki.hypr.land/Configuring/Basics/Window-Rules/
-- launchers — float centred at cursor
hl.window_rule({ name = "ulauncher-launcher", match = { class = "ulauncher" }, tag = "+launcher" })
hl.window_rule({ name = "vicinae-launcher", match = { class = "vicinae" }, tag = "+launcher" })
hl.window_rule({
name = "launcher",
match = { tag = "launcher" },
pin = true,
no_shadow = true,
no_blur = true,
border_size = 0,
move = "(cursor_x-(window_w/2)) (cursor_y-(window_h/2))",
})
hl.window_rule({
name = "vicinae-server",
match = { class = "vicinae-server" },
pin = true,
no_shadow = true,
no_blur = true,
border_size = 0,
move = "(cursor_x-(window_w/2)) (cursor_y-(window_h/2))",
})
-- firefox
hl.window_rule({ name = "firefox", match = { class = "firefox" }, opaque = true, render_unfocused = true })
-- vesktop (Discord)
hl.window_rule({ name = "vesktop", match = { class = "vesktop" }, render_unfocused = true, no_screen_share = true })
-- mixer tag — tag assignment
hl.window_rule({ name = "nextcloud-mixer", match = { class = "com.nextcloud.desktopclient.nextcloud" }, tag = "+mixer" })
hl.window_rule({ name = "blueman-mixer", match = { class = "blueman-manager" }, tag = "+mixer" })
hl.window_rule({ name = "nm-mixer", match = { class = "nm-connection-editor" }, tag = "+mixer" })
-- mixer tag — behaviour
hl.window_rule({
name = "mixer-float",
match = { tag = "mixer" },
float = true,
pin = true,
move = "(monitor_w*0.7) (monitor_h*0.05)",
size = "(monitor_w*0.2) (monitor_h*0.3)",
})
-- centred large
hl.window_rule({
name = "large-centered-L",
match = { tag = "centered-L" },
float = true,
move = "(monitor_w*0.1) (monitor_h*0.1)",
size = "(monitor_w*0.8) (monitor_h*0.8)",
})
-- centred medium
hl.window_rule({
name = "large-centered",
match = { tag = "centered" },
float = true,
move = "(monitor_w*0.2) (monitor_h*0.2)",
size = "(monitor_w*0.6) (monitor_h*0.6)",
})
-- centred small
hl.window_rule({
name = "centered-small",
match = { tag = "centered-S" },
float = true,
move = "(monitor_w*0.4) (monitor_h*0.4)",
size = "(monitor_w*0.2) (monitor_h*0.2)",
})
-- spotify floating
hl.window_rule({
name = "spotify-float",
match = { class = "spotify", float = true },
no_blur = true,
opacity = "0.5 0.05",
})
-- smart gaps
hl.workspace_rule({ workspace = "w[tv1]s[false]", gaps_out = 0, gaps_in = 0 })
hl.workspace_rule({ workspace = "f[1]s[false]", gaps_out = 0, gaps_in = 0 })
hl.window_rule({ name = "smart-gaps-tiling-tv1", match = { float = false, workspace = "w[tv1]s[false]" }, border_size = 1, rounding = 3 })
hl.window_rule({ name = "smart-gaps-tiling-f1", match = { float = false, workspace = "f[1]s[false]" }, border_size = 0, rounding = 0 })

View File

@ -0,0 +1,384 @@
source = ~/.config/input.conf
source = ~/.config/monitors.conf
# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures {
workspace_swipe = true
}
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
device {
name = epic-mouse-v1
sensitivity = -0.5
}
#autogenerated = 0 # remove this line to remove the warning
# This is an example Hyprland config file.
# Refer to the wiki for more information.
# https://wiki.hyprland.org/Configuring/Configuring-Hyprland/
# Please note not all available settings / options are set here.
# For a full list, see the wiki
# You can split this configuration into multiple files
# Create your files separately and then link them to this file like this:
# source = ~/.config/hypr/myColors.conf
################
### MONITORS ###
################
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=,preferred,auto,auto
################
### XWayland ###
################
# change monitor to high resolution, the last argument is the scale factor
#monitor = , highres, auto, 2
# unscale XWayland
xwayland {
force_zero_scaling = true
}
# toolkit-specific scale
env = GDK_SCALE,2
env = XCURSOR_SIZE,32
###################
### MY PROGRAMS ###
###################
# See https://wiki.hyprland.org/Configuring/Keywords/
# Set programs that you use
$terminal = kitty
$fileManager = kitty -e yazi
$editor = kitty micro
$menu = wofi --show=drun
#################
### AUTOSTART ###
#################
# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:
exec-once=bash ~/.config/hypr/ewwstart.sh
#exec-once = waybar
exec-once = dunst
# exec-once = nm-applet &
exec-once = swww-daemon & swww img /ast/bg.jpg & sleep 1s & swww restore
#############################
### ENVIRONMENT VARIABLES ###
#############################
# See https://wiki.hyprland.org/Configuring/Environment-variables/
env = XCURSOR_SIZE,40
env = HYPRCURSOR_SIZE,40
#####################
### LOOK AND FEEL ###
#####################
# Refer to https://wiki.hyprland.org/Configuring/Variables/
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
gaps_in = 5
gaps_out = 20
border_size = 4
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
col.active_border = rgb(E40046) rgb(fc0588) 40deg
col.inactive_border = rgb(5018dd)
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false
layout = dwindle
}
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
rounding = 20
# Change transparency of focused and unfocused windows
active_opacity = 1
inactive_opacity = 0.8
#drop_shadow = true
#shadow_range = 4
#shadow_render_power = 3
#col.shadow = rgba(1a1a1aee)
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur {
enabled = true
size = 3
passes = 3
vibrancy = 0.1696
}
}
# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
enabled = true
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
#animation = workspaces, 1, 6, default
#animation = workspaces,1,5,default,slidevert
animation = specialWorkspace, 1, 10, default, slidevert
}
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true # You probably want this
}
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master {
new_status = master
}
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
}
####################
### KEYBINDINGSS ###
####################
# See https://wiki.hyprland.org/Configuring/Keywords/
$mainMod = SUPER # Sets "Windows" key as main modifier
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod, T, exec, $terminal
bind = $mainMod, Z, exec, $terminal btop
bind = $mainMod, K, killactive,
bind = $mainMod, M, exec, $editor
bind = $mainMod, F, exec, $fileManager
bind = $mainMod, V, togglefloating,
bind = $mainMod, H, movecurrentworkspacetomonitor
bind = $mainMod, D, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle
bind = $mainMod, L, exec, hyprctl dispatch exit 1
#bind = $mainMod, A, exec, killall waybar ; waybar
bind = $mainMod, A, exec, eww reload
bind = $mainMod, N, exec, nextcloud
bind = $mainMod, I, exec, kitty nmtui
bind = $mainMod, S, exec, kitty pulsemixer
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10
# Example special workspace (scratchpad)
bind = $mainMod, SPACE, togglespecialworkspace, magic
bind = $mainMod SHIFT, SPACE, movetoworkspace, special:magic
bind = $mainMod CTRL, up, togglespecialworkspace, magic
bind = $mainMod CTRL SHIFT, up, movetoworkspace, special:magic
# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
binde = $mainMod, XF86AudioLowerVolume, workspace, e-1
binde = $mainMod, XF86AudioRaiseVolume, workspace, e+1
bind = $mainMod SHIFT, XF86AudioLowerVolume, movetoworkspace, e-1
bind = $mainMod SHIFT, XF86AudioRaiseVolume, movetoworkspace, e+1
bind = $mainMod CTRL, left, workspace, e-1
bind = $mainMod CTRL, right, workspace, e+1
bind = $mainMod CTRL SHIFT, left, movetoworkspace, e-1
bind = $mainMod CTRL SHIFT, right, movetoworkspace, e+1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
bindm = $mainMod SHIFT, mouse:272, resizewindow
# Move/rezie windows with Keyboard
#rofi keybind
bind = $mainMod, R, exec, wofi --show drun
bind = CTRL SHIFT, R, exec, wofi --show drun
#window location edit mode source: https://www.reddit.com/r/hyprland/comments/14jehzj/comment/jpl5c8f/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button
#bind = $mainMod, A, submap, fastedit
#submap = fastedit
bind = $mainMod ALT, right, resizeactive, 10 0
bind = $mainMod ALT, left, resizeactive, -10 0
bind = $mainMod ALT, up, resizeactive, 0 -10
bind = $mainMod ALT, down, resizeactive, 0 10
bind = $mainMod SHIFT, left, movewindow, l
bind = $mainMod SHIFT, right, movewindow, r
bind = $mainMod SHIFT, up, movewindow, u
bind = $mainMod SHIFT, down, movewindow, d
#bind = , escape, submap, reset
#submap = reset
bind = $mainMod SHIFT, K , exec, hyprctl kill
#flameshot
#monitor=eDP-1, preferred, 0x0, 1
#monitor=DP-1, preferred, 1920x0, 1
#
#windowrule=fakefullscreen, flameshot
#windowrule=float,flameshot
#windowrule=monitor 0,flameshot
#windowrule=move 0 0,flameshot
#windowrule=workspace 0,flameshot
#windowrule=stayfocused,flameshot
#screenshot capture
bind = , Print, exec, grim -g "$(slurp -d)" - | wl-copy
bind = $mainMod, P, exec, grim -g "$(slurp -d)" - | wl-copy
#audio controls
binde =, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+
binde =, XF86AudioLowerVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%-
bind =, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindle=, XF86MonBrightnessUp, exec, bri --up
bindle=, XF86MonBrightnessDown, exec, bri --down
bindl=, XF86AudioPlay, exec, playerctl play-pause -p spotify, vlc
#exec-once = flameshot
#bind = $mainMod, Print, exec, flameshot gui
#bind = $mainMod, Print, exec, XDG_CURRENT_DESKTOP=hyprland flameshot gui -r | wl-copy
##############################
### WINDOWS AND WORKSPACES ###
##############################
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# Example windowrule v1
windowrule = float, ^(rofi)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
#windowrulev2 = noborder, class:wofi
windowrulev2 = float, class:wofi
windowrulev2 = pin, class:wofi
windowrulev2 = center, class:wofi
windowrulev2 = stayfocused, class:wofi
windowrulev2 = nomaxsize, class:wofi
windowrulev2 = minsize 5 5, class:wofi
windowrulev2 = noshadow, class:wofi
windowrulev2 = opacity 1 0.8, class:kitty
windowrulev2 = opacity 0.8 0.3, initialTitle:Spotify
windowrulev2 = float, initialTitle:Spotify
#sefix
windowrulev2 = float, class:Spaceengineers
windowrulev2 = stayfocused, class:Spaceengineers
#rwfix
windowrulev2 = tile, class:RimWorldLinux
windowrulev2 = float, class:Drill.+
#windowrulev2 = fakefullscreen, title:Drill.+
#windowrule = fakefullscreen, class:steam_app_1217060
#windowrule = fakefullscreen, title:Gunfire Reborn
windowrule = float, class:steam_app_1217060
windowrule = float, title:Gunfire Reborn
#windowrulev2 = fullscreen, class:steam_app_1217060
#windowrulev2 = fullscreen, title:Gunfire Reborn
windowrulev2 = float, title:pico.+
windowrulev2 = minsize 60 70, title:.+btop.+
windowrulev2 = stayfocused, class:.+dmenu.+
windowrulev2 = move 70% 10%, class:com.nextcloud.desktopclient.nextcloud
windowrulev2 = float, class:com.nextcloud.desktopclient.nextcloud
windowrulev2 = pin, class:com.nextcloud.desktopclient.nextcloud
windowrulev2 = size 28% 50%, class:com.nextcloud.desktopclient.nextcloud
#exec-once = nextcloud
exec-once=bash swww img ~/Pictures/background.jpg && swww restore
#exec-once=bash dunst
#exec-once=bash nm-applet --indicator
#exec-once=exec, [workspace 2 silent; float; move 0 0] kitty

View File

@ -0,0 +1,142 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
# Hyprlock
# Original config submitted by https://github.com/SherLock707
# Sourcing colors generated by wallust
source = $HOME/.config/hypr/wallust/wallust-hyprland.conf
$Scripts = $HOME/.config/hypr/scripts
general {
grace = 2
hide_cursor = true
ignore_empty_input = true
}
auth {
pam:module = sudo
}
background {
monitor =
#path = screenshot # screenshot of your desktop
path = ~/Pictures/background.jpg # NOTE only png supported for now
#color = $color7
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
blur_size = 5
blur_passes = 1 # 0 disables blurring
noise = 0.0117
contrast = 1.3000 # Vibrant!!!
brightness = 0.8000
vibrancy = 0.2100
vibrancy_darkness = 0.0
}
input-field {
monitor =
size = 250, 50
outline_thickness = 8
dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
#fade_on_empty = true
placeholder_text = <i>Password...</i> # Text rendered in the input box when it's empty.
hide_input = false
position = 0, 200
halign = center
valign = bottom
}
# Date
label {
monitor =
text = cmd[update:18000000] echo "<b> "$(date +'%A, %-d %B %Y')" </b>"
color = $color12
font_size = 34
font_family = Agave NerdFont 10
position = 0, -150
halign = center
valign = top
}
# Week
label {
monitor =
text = cmd[update:18000000] echo "<b> "$(date +'Week %U')" </b>"
color = $color5
font_size = 24
font_family = Agave NerdFont 10
position = 0, -250
halign = center
valign = top
}
# Time
label {
monitor =
#text = cmd[update:1000] echo "<b><big> $(date +"%I:%M:%S %p") </big></b>" # AM/PM
text = cmd[update:1000] echo "<b><big> $(date +"%H:%M:%S") </big></b>" # 24H
color = $color15
font_size = 94
font_family = Agave NerdFont 10
position = 0, 0
halign = center
valign = center
}
# User
label {
monitor =
text =  $USER
color = $color12
font_size = 18
font_family = Agave NerdFont 10
position = 0, 100
halign = center
valign = bottom
}
# uptime
label {
monitor =
text = cmd[update:60000] echo "<b> "$(uptime -p || $Scripts/UptimeNixOS.sh)" </b>"
color = $color12
font_size = 24
font_family = Agave NerdFont 10
position = 0, 0
halign = right
valign = bottom
}
# weather edit specific location. Note, this cause a 2-4 seconds delay in locking
label {
monitor =
text = cmd[update:10000] sh ~/Dotfiles/desktopenvs/hyprland/eww/scripts/batteryperc
color = $color12
font_size = 24
font_family = Agave NerdFont 10
position = 50, 0
halign = left
valign = bottom
}
# Put a picture of choice here. Default is the current wallpaper
image {
monitor =
path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current
size = 230
rounding = -1
border_size = 2
border_color = $color11
rotate = 0
reload_time = -1
position = 0, 300
halign = center
valign = bottom
}

View File

@ -0,0 +1,22 @@
#source ~/.config/idle.conf
general {
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
before_sleep_cmd = loginctl lock-session # lock before suspend.
after_sleep_cmd = systemctl restart fprintd.service ;; hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
}
listener {
timeout = 120
on-timeout = loginctl lock-session # lock screen when timeout has passed
}
listener {
timeout = 600 #10min
on-timeout = systemctl suspend-then-hibernate # suspend pc
}
#listener {
# timeout = 18000 #5h
# on-timeout = /usr/bin/reboot #reboot
#}

View File

@ -0,0 +1,110 @@
-- Hyprland Lua config — https://wiki.hypr.land/Configuring/Start/
-- User-side files are required from ~/.config/hypr/ alongside this file.
require("monitors")
require("envvars")
require("input")
require("binds")
require("windowrules")
require("autostart")
--------------------
---- MY PROGRAMS ---
--------------------
local terminal = "kitty"
local fileManager = "thunar"
local editor = "kitty nvim"
local menu = "vicinae toggle"
---------------------
---- LOOK & FEEL ----
---------------------
hl.config({
general = {
gaps_in = 3,
gaps_out = 6,
border_size = 4,
col = {
active_border = { colors = { "rgb(E40046)", "rgb(f50505)", "rgb(E40046)", "rgb(f50505)", "rgb(E40046)" }, angle = 35 },
inactive_border = "rgb(5018dd)",
},
resize_on_border = false,
allow_tearing = false,
layout = "dwindle",
},
group = {
col = {
border_active = "rgb(E40046)",
border_inactive = "rgb(5018dd)",
border_locked_active = "rgb(f50505)",
border_locked_inactive = "rgb(5018dd)",
},
groupbar = {
font_family = "Agave NerdFont",
font_size = 20,
height = 25,
round_only_edges = false,
indicator_height = 25,
stacked = false,
text_color = "rgb(E40046)",
priority = 3,
rounding = 13,
col = {
active = "rgb(E40046)",
inactive = "rgb(5018dd)",
locked_active = "rgb(E40046)",
locked_inactive = "rgb(5018dd)",
},
},
},
decoration = {
rounding = 20,
active_opacity = 1,
inactive_opacity = 0.8,
blur = {
enabled = true,
size = 3,
passes = 3,
vibrancy = 0.1696,
},
},
animations = {
enabled = true,
},
dwindle = {
preserve_split = true,
special_scale_factor = 0.95,
},
master = {
new_status = "master",
special_scale_factor = 0.95,
},
misc = {
force_default_wallpaper = 0,
disable_hyprland_logo = true,
},
})
-----------------
---- ANIMATIONS --
-----------------
hl.curve("myBezier", { type = "bezier", points = { {0.05, 0.9}, {0.1, 1.05} } })
hl.animation({ leaf = "windows", enabled = true, speed = 7, bezier = "myBezier" })
hl.animation({ leaf = "windowsOut", enabled = true, speed = 7, bezier = "default", style = "popin 80%" })
hl.animation({ leaf = "border", enabled = true, speed = 10, bezier = "default" })
hl.animation({ leaf = "borderangle", enabled = true, speed = 8, bezier = "default" })
hl.animation({ leaf = "fade", enabled = true, speed = 7, bezier = "default" })
hl.animation({ leaf = "specialWorkspace", enabled = true, speed = 10, bezier = "default", style = "slidevert" })
--------------
---- DEVICE ---
--------------
hl.device({
name = "epic-mouse-v1",
sensitivity = -0.5,
})

View File

@ -0,0 +1,115 @@
# Hyprlock Themed Config 💫 Matching EWW
general {
grace = 2
hide_cursor = true
ignore_empty_input = true
}
auth {
pam:module = sudo
fingerprint:enabled = true
}
background {
monitor =
path = ~/Pictures/background.jpg
blur_size = 6
blur_passes = 2
noise = 0.015
contrast = 1.25
brightness = 0.85
vibrancy = 0.2
vibrancy_darkness = 0.1
}
input-field {
monitor =
size = 300, 60
outline_thickness = 4
dots_size = 0.5
dots_spacing = 0.2
dots_center = true
hide_input = false
placeholder_text = <i>Password...</i>
position = 0, 20%
halign = center
valign = bottom
# Accent border & color matching EWW
inner_color = rgb(1a1a1a)
font_color = rgb(b0b4bc)
font_family = Agave Nerd Font Mono
}
# DATE
label {
text = cmd[update:18000000] sh ~/Dotfiles/desktopenvs/hyprland/scripts/date.sh
color = rgb(5018dd)
font_size = 34
font_family = Agave Nerd Font Mono
position = 0, 40%
halign = center
valign = center
}
# TIME
label {
text = cmd[update:1000] sh ~/Dotfiles/desktopenvs/hyprland/scripts/time.sh
color = rgb(E40046)
font_size = 95
font_family = Agave Nerd Font Mono
position = 0, 25%
halign = center
valign = center
}
# USER
label {
text =  $USER
color = rgb(5018dd)
font_size = 18
font_family = Agave Nerd Font Mono
position = 0, 10%
halign = center
valign = bottom
}
# UPTIME
label {
text = cmd[update:60000] sh ~/Dotfiles/desktopenvs/hyprland/scripts/uptime.sh
font_size = 24
color = rgb(5018dd)
font_family = Agave Nerd Font Mono
position = 0, 0
halign = right
valign = bottom
}
# BATTERY
label {
text = cmd[update:10000] sh ~/Dotfiles/desktopenvs/hyprland/scripts/batteryperc
color = rgb(5018dd)
font_size = 24
font_family = Agave Nerd Font Mono
position = 50, 0
halign = left
valign = bottom
}
# PROFILE PICTURE OR LOGO
image {
path = ~/Pictures/profile.jpg
size = 230
rounding = 110
border_size = 4
border_color = rgb(5018dd)
rotate = 0
position = 0, 40%
halign = center
valign = bottom
}

View File

@ -0,0 +1,11 @@
splash = false
# fallback if no per-monitor entries exist (first boot)
wallpaper {
monitor =
path = ~/Pictures/background.jpg
fit_mode = cover
}
# per-monitor state, written by ~/.config/scripts/wallpaper-picker
source = ~/.config/wallpaper.conf

View File

@ -0,0 +1,15 @@
background = rgb(1A1A1A)
base = rgb(5018DD)
font_family = Agave Nerd Font Mono
font_family_monospace = Agave Nerd Font Mono
text = rgb(D6ABAB)
alternate_base = rgb(E40046)
bright_text = rgb(F50505)
accent = rgb(E40046)
accent_secondary = rgb(5018DD)
icon_theme = Papirus
h1_size = 15
h1_size = 20
h1_size = 30
font_size = 10
small_font_size = 5

View File

@ -0,0 +1,5 @@
#!/bin/bash
swww restore
"$(dirname "$(readlink -f "$0")")/ewwstart.sh"

View File

@ -0,0 +1,63 @@
#
# ~/.bashrc
#
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
alias ls='ls --color=auto'
alias grep='grep --color=auto'
PS1='[\u@\h \W]\$ '
alias ll="ls -la"
alias l="ll"
alias ..="cd .."
alias m="micro"
alias sm="sudo micro"
alias n="nano"
alias sn="sudo nano"
alias gita="git add ."
alias gitc="git commit -m"
alias gitp="git push"
function gitf() {
if [ -z $1 ]; then
echo "no commit message, doing nothing"
else
echo "directly commiting with message \"$1\""
git add .
git commit -m $1
git push
fi
}
alias icat="kitten icat"
alias cls="clear"
alias ssh="kitten ssh"
alias ssk="kitten ssh"
alias t="wd"
function y() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
yazi "$@" --cwd-file="$tmp"
if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd"
fi
rm -f -- "$tmp"
}
export TERM=xterm-256color
#eval "$(starship init bash)"
#fastfetch --logo-color-1 red --logo-color-2 red --color red -l ~/Dotfiles/pin.txt
export PS1="\u@\H>\t "

View File

@ -0,0 +1,106 @@
# vim:ft=kitty
#: This is a template that can be used to create new kitty themes.
#: Theme files should start with a metadata block consisting of
#: lines beginning with ##. All metadata fields are optional.
## name: The name of the theme (if not present, derived from filename)
## author: The name of the theme author
## license: The license information
## upstream: A URL pointing to the location of this file upstream for auto-updates
## blurb: A description of this theme. This must be the
## last item in the metadata and can continue over multiple lines.
#: All the settings below are colors, which you can choose to modify, or use the
#: defaults. You can also add non-color based settings if needed but note that
#: these will not work with using kitty @ set-colors with this theme. For a
#: reference on what these settings do see https://sw.kovidgoyal.net/kitty/conf/
#: The basic colors
foreground #d6abab
background #000000
selection_foreground #E40046
selection_background #5018dd
#: Cursor colors
cursor #E40046
cursor_text_color #5018dd
#: URL underline color when hovering with mouse
url_color #f50505
#: kitty window border colors and terminal bell colors
# active_border_color #00ff00
# inactive_border_color #cccccc
# bell_border_color #ff5a00
# visual_bell_color none
#: OS Window titlebar colors
# wayland_titlebar_color system
# macos_titlebar_color system
#: Tab bar colors
active_tab_foreground #5018dd
active_tab_background #E40046
inactive_tab_foreground #E40046
inactive_tab_background #5018dd
# tab_bar_background none
# tab_bar_margin_color none
#: Colors for marks (marked text in the terminal)
# mark1_foreground black
# mark1_background #98d3cb
# mark2_foreground black
# mark2_background #f2dcd3
# mark3_foreground black
# mark3_background #f274bc
#: The basic 16 colors
#: black
# color0 #000000
# color8 #767676
#: red
# color1 #cc0403
# color9 #f2201f
#: green
# color2 #19cb00
# color10 #23fd00
#: yellow
# color3 #cecb00
# color11 #fffd00
#: blue
# color4 #0d73cc
# color12 #1a8fff
#: magenta
# color5 #cb1ed1
# color13 #fd28ff
#: cyan
# color6 #0dcdcd
# color14 #14ffff
#: white
# color7 #dddddd
# color15 #ffffff
#: You can set the remaining 240 colors as color16 to color255.

View File

@ -0,0 +1,36 @@
font_family Agave Nerd Font
font_size 13.0
shell_integration no-cursor
cursor_shape beam
cursor_beam_thickness 2
cursor_trail 3
cursor_text_color #E40046
cursor_trail_decay 0.1 0.7
cursor #5018dd
cursor_trail_start_threshold 0
cursor_blink_interval -1
window_padding_width 4
scrollback_lines 20000
background_opacity 0.4
background_blur 1
editor nvim
confirm_os_window_close 0
map f1 new_tab_with_cwd
map f2 previous_tab
map f3 next_tab
map ctrl+f2 new_tab
map ctrl+f3 close_tab
tab_bar_style powerline
# active_tab_foreground #5018dd
# active_tab_background #E40046
# inactive_tab_foreground #E40046
# inactive_tab_background #5018dd
# BEGIN_KITTY_THEME
# Cyberqueer
include current-theme.conf
# END_KITTY_THEME

View File

@ -0,0 +1,25 @@
font_family Agave Nerd Font
font_size 13.0
shell_integration enabled
cursor_shape block
cursor_blink_interval 4
window_padding_width 4
scrollback_lines 20000
background_opacity 0.4
background_blur 1
editor micro
confirm_os_window_close 0
map f1 new_tab_with_cwd
map f2 previous_tab
map f3 next_tab
map ctrl+f2 new_tab
map ctrl+f3 close_tab
tab_bar_style powerline
active_tab_foreground #5018dd
active_tab_background #E40046
inactive_tab_foreground #E40046
inactive_tab_background #5018dd

View File

@ -0,0 +1,6 @@
remote_dir .local/share/kitty-ssh-kitten
copy --dest .bashrc Dotfiles/desktopenvs/hyprland/kitty/bash-remoteconf
shell_integration inherited
remote_kitty if-needed
share_connections yes
askpass native

View File

@ -0,0 +1,106 @@
# vim:ft=kitty
#: This is a template that can be used to create new kitty themes.
#: Theme files should start with a metadata block consisting of
#: lines beginning with ##. All metadata fields are optional.
## name: The name of the theme (if not present, derived from filename)
## author: The name of the theme author
## license: The license information
## upstream: A URL pointing to the location of this file upstream for auto-updates
## blurb: A description of this theme. This must be the
## last item in the metadata and can continue over multiple lines.
#: All the settings below are colors, which you can choose to modify, or use the
#: defaults. You can also add non-color based settings if needed but note that
#: these will not work with using kitty @ set-colors with this theme. For a
#: reference on what these settings do see https://sw.kovidgoyal.net/kitty/conf/
#: The basic colors
foreground #d6abab
background #000000
selection_foreground #E40046
selection_background #5018dd
#: Cursor colors
cursor #E40046
cursor_text_color #5018dd
#: URL underline color when hovering with mouse
url_color #f50505
#: kitty window border colors and terminal bell colors
# active_border_color #00ff00
# inactive_border_color #cccccc
# bell_border_color #ff5a00
# visual_bell_color none
#: OS Window titlebar colors
# wayland_titlebar_color system
# macos_titlebar_color system
#: Tab bar colors
active_tab_foreground #5018dd
active_tab_background #E40046
inactive_tab_foreground #E40046
inactive_tab_background #5018dd
# tab_bar_background none
# tab_bar_margin_color none
#: Colors for marks (marked text in the terminal)
# mark1_foreground black
# mark1_background #98d3cb
# mark2_foreground black
# mark2_background #f2dcd3
# mark3_foreground black
# mark3_background #f274bc
#: The basic 16 colors
#: black
# color0 #000000
# color8 #767676
#: red
# color1 #cc0403
# color9 #f2201f
#: green
# color2 #19cb00
# color10 #23fd00
#: yellow
# color3 #cecb00
# color11 #fffd00
#: blue
# color4 #0d73cc
# color12 #1a8fff
#: magenta
# color5 #cb1ed1
# color13 #fd28ff
#: cyan
# color6 #0dcdcd
# color14 #14ffff
#: white
# color7 #dddddd
# color15 #ffffff
#: You can set the remaining 240 colors as color16 to color255.

View File

@ -0,0 +1,47 @@
[Default Applications]
text/plain=nvim.desktop
image/svg+xml=org.inkscape.Inkscape.desktop
image/jpeg=pinta.desktop
image/png=pinta.desktop
x-scheme-handler/discord=vesktop.desktop
x-scheme-handler/ror2mm=gale-handler.desktop
x-scheme-handler/gale=gale-handler.desktop
application/zip=org.gnome.FileRoller.desktop
terminal=kitty.desktop
TerminalEmulator=kitty.desktop
inode/directory=thunar.desktop
x-scheme-handler/http=firefox.desktop
x-scheme-handler/https=firefox.desktop
x-scheme-handler/chrome=firefox.desktop
text/html=firefox.desktop
application/x-extension-htm=firefox.desktop
application/x-extension-html=firefox.desktop
application/x-extension-shtml=firefox.desktop
application/xhtml+xml=firefox.desktop
application/x-extension-xhtml=firefox.desktop
application/x-extension-xht=firefox.desktop
text/x-python=nvim.desktop
x-scheme-handler/opendeck=opendeck-handler.desktop
x-scheme-handler/openaction=opendeck-handler.desktop
x-scheme-handler/streamdeck=opendeck-handler.desktop
x-scheme-handler/claude-cli=claude-code-url-handler.desktop
[Added Associations]
application/zip=org.gnome.FileRoller.desktop;org.kde.ark.desktop;thunar.desktop;
application/x-compressed-tar=thunar.desktop;
image/jpeg=pinta.desktop;
text/x-emacs-lisp=vim.desktop;
x-scheme-handler/http=firefox.desktop;
x-scheme-handler/https=firefox.desktop;
x-scheme-handler/chrome=firefox.desktop;
text/html=firefox.desktop;
application/x-extension-htm=firefox.desktop;
application/x-extension-html=firefox.desktop;
application/x-extension-shtml=firefox.desktop;
application/xhtml+xml=firefox.desktop;
application/x-extension-xhtml=firefox.desktop;
application/x-extension-xht=firefox.desktop;
application/xml=nvim.desktop;
text/x-python=nvim.desktop;
video/mp4=firefox.desktop;vlc.desktop;
application/x-shellscript=nvim.desktop;

View File

@ -0,0 +1,45 @@
* {
all: unset;
font-family: Agave Nerd Font Mono, Arial, sans-serif;
border-radius: 60px;
font-size: 10pt;
}
window {
color: #E40046;
margin-bottom: 10px;
padding: 5px
}
#box {
/* Define attributes of the box surrounding icons here */
padding: 10px;
border: solid;
border-width: 4px;
background-color: #1a1a1a;
}
button, image {
background: none;
border-style: none;
box-shadow: none;
color: #999
}
button {
padding: 4px;
margin-left: 4px;
margin-right: 4px;
color: #eee;
font-size: 12px
}
button:hover {
background-color: rgba(255, 255, 255, 0.15);
border-radius: 2px;
}
button:focus {
box-shadow: none
}

View File

@ -0,0 +1,49 @@
* {
all: unset;
font-family: Agave Nerd Font Mono, Arial, sans-serif;
border-radius: 60px;
font-size: 10pt;
}
window {
color: #E40046;
border: solid;
border-width: 4px;
background-color: #1a1a1a;
margin-bottom: 10px;
padding: 5px
}
#box {
/* Define attributes of the box surrounding icons here */
padding: 25px;
}
#active {
background-color: #5018dd;
color: #f50505;
}
button, image {
background: none;
border-style: none;
box-shadow: none;
color: #d6abab;
}
button {
padding: 4px;
margin-left: 4px;
margin-right: 4px;
color: #d6abab;
font-size: 12px;
}
button:hover {
background-color: #5018dd;
}
button:focus {
background-color: #E40046;
color: #5018dd;
}

View File

@ -0,0 +1,40 @@
window {
background-color: rgba(36, 47, 79, 0.95);
color: #eeeeee
}
/* search entry */
entry {
background-color: rgba(0, 0, 0, 0.2)
}
button, image {
background: none;
border: none
}
button:hover {
background-color: rgba(255, 255, 255, 0.1)
}
/* in case you wanted to give category buttons a different look */
#category-button {
margin: 0 10px 0 10px
}
#pinned-box {
padding-bottom: 5px;
border-bottom: 1px dotted gray
}
#files-box {
padding: 5px;
border: 1px dotted gray;
border-radius: 15px
}
/* math operation result label */
#math-label {
font-weight: bold;
font-size: 16px
}

View File

@ -0,0 +1,8 @@
{
"restart-on-display": true,
"restart-delay": 500,
"processes-background-only": false,
"processes-own-only": true,
"processes-interval-ms": 2000,
"run-through-compositor": true
}

View File

@ -0,0 +1,466 @@
[
{
"name": "",
"output": "",
"run-if-output-exist": [],
"run-if-output-absent": [],
"layer": "bottom",
"position": "top",
"controls": "off",
"menu-start": "off",
"width": "auto",
"height": 0,
"margin-top": 0,
"margin-bottom": 0,
"padding-horizontal": 0,
"padding-vertical": 0,
"spacing": 0,
"icons": "",
"css-name": "",
"modules-left": [],
"modules-center": [],
"modules-right": [],
"controls-settings": {
"components": [
"brightness",
"volume",
"battery"
],
"commands": {
"battery": ""
},
"show-brightness": false,
"show-volume": false,
"show-battery": true,
"interval": 1,
"icon-size": 16,
"hover-opens": false,
"leave-closes": true,
"click-closes": false,
"root-css-name": "controls-overview",
"css-name": "controls-window",
"battery-low-level": 20,
"battery-low-interval": 3,
"custom-items": [
{
"name": "Panel settings",
"icon": "nwg-panel",
"cmd": "nwg-panel-config"
}
],
"menu": {
"name": "unnamed",
"icon": "",
"items": []
}
},
"menu-start-settings": {
"cmd-lock": "swaylock -f -c 000000",
"cmd-logout": "swaymsg exit",
"cmd-restart": "systemctl reboot",
"cmd-shutdown": "systemctl -i poweroff",
"autohide": true,
"file-manager": "thunar",
"height": 0,
"icon-size-large": 32,
"icon-size-small": 16,
"icon-size-button": 16,
"margin-bottom": 0,
"margin-left": 0,
"margin-right": 0,
"margin-top": 0,
"padding": 2,
"terminal": "foot",
"width": 0
},
"sway-taskbar": {
"workspace-menu": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8"
],
"name-max-len": 20,
"image-size": 16,
"workspaces-spacing": 0,
"task-padding": 0,
"show-app-icon": true,
"show-app-name": true,
"show-layout": true,
"workspace-buttons": true,
"all-workspaces": true,
"mark-autotiling": true,
"mark-xwayland": true,
"all-outputs": false
},
"hyprland-taskbar": {
"name-max-len": 24,
"icon-size": 16,
"workspaces-spacing": 0,
"client-padding": 0,
"show-app-icon": true,
"show-app-name": true,
"show-layout": true,
"all-outputs": false,
"mark-xwayland": true,
"angle": 0.0
},
"sway-workspaces": {
"numbers": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8"
],
"show-icon": true,
"image-size": 16,
"show-name": true,
"name-length": 40,
"mark-autotiling": true,
"mark-content": true,
"hide-empty": false,
"show-layout": true
},
"hyprland-workspaces": {
"num-ws": 10,
"show-icon": true,
"image-size": 16,
"show-name": true,
"name-length": 40,
"show-empty": true,
"mark-content": true,
"show-names": true,
"mark-floating": true,
"mark-xwayland": true,
"angle": 0.0
},
"clock": {
"format": "%a, %d. %b %H:%M:%S",
"tooltip-text": "",
"tooltip-date-format": false,
"on-left-click": "",
"on-middle-click": "",
"on-right-click": "",
"on-scroll-up": "",
"on-scroll-down": "",
"root-css-name": "root-clock",
"css-name": "clock",
"interval": 1,
"angle": 0.0
},
"playerctl": {
"buttons-position": "left",
"icon-size": 16,
"chars": 30,
"scroll": false,
"button-css-name": "",
"label-css-name": "",
"interval": 1
},
"scratchpad": {
"css-name": "",
"icon-size": 16
},
"dwl-tags": {
"tag-names": "1 2 3 4 5 6 7 8 9",
"title-limit": 55
},
"openweather": {
"appid": "",
"weatherbit-api-key": "",
"lat": null,
"long": null,
"lang": "en",
"units": "metric",
"interval": 1800,
"loc-name": "",
"weather-icons": "color",
"on-right-click": "",
"on-middle-click": "",
"on-scroll": "",
"icon-placement": "start",
"icon-size": 24,
"css-name": "weather",
"show-name": false,
"angle": 0.0,
"ow-popup-icons": "light",
"popup-icon-size": 24,
"popup-text-size": "medium",
"popup-css-name": "weather-forecast",
"popup-placement": "right",
"popup-margin-horizontal": 0,
"popup-margin-top": 0,
"popup-margin-bottom": 0,
"show-humidity": true,
"show-wind": true,
"show-pressure": true,
"show-cloudiness": true,
"show-visibility": true,
"show-pop": true,
"show-volume": true
},
"brightness-slider": {
"show-values": true,
"icon-size": 16,
"interval": 10,
"hover-opens": false,
"leave-closes": false,
"root-css-name": "brightness-module",
"css-name": "brightness-popup",
"angle": 0.0,
"icon-placement": "start",
"backlight-device": "",
"backlight-controller": "brightnessctl",
"slider-orientation": "horizontal",
"slider-inverted": false,
"popup-icon-placement": "start",
"popup-horizontal-alignment": "left",
"popup-vertical-alignment": "top",
"popup-width": 256,
"popup-height": 64,
"popup-horizontal-margin": 0,
"popup-vertical-margin": 0,
"step-size": 1
}
},
{
"name": "",
"output": "",
"run-if-output-exist": [],
"run-if-output-absent": [],
"layer": "bottom",
"position": "top",
"controls": "off",
"menu-start": "off",
"width": "auto",
"height": 0,
"margin-top": 0,
"margin-bottom": 0,
"padding-horizontal": 0,
"padding-vertical": 0,
"spacing": 0,
"icons": "",
"css-name": "",
"modules-left": [],
"modules-center": [],
"modules-right": [],
"controls-settings": {
"components": [
"brightness",
"volume",
"battery"
],
"commands": {
"battery": ""
},
"show-brightness": false,
"show-volume": false,
"show-battery": true,
"interval": 1,
"icon-size": 16,
"hover-opens": false,
"leave-closes": true,
"click-closes": false,
"root-css-name": "controls-overview",
"css-name": "controls-window",
"battery-low-level": 20,
"battery-low-interval": 3,
"custom-items": [
{
"name": "Panel settings",
"icon": "nwg-panel",
"cmd": "nwg-panel-config"
}
],
"menu": {
"name": "unnamed",
"icon": "",
"items": []
}
},
"menu-start-settings": {
"cmd-lock": "swaylock -f -c 000000",
"cmd-logout": "swaymsg exit",
"cmd-restart": "systemctl reboot",
"cmd-shutdown": "systemctl -i poweroff",
"autohide": true,
"file-manager": "thunar",
"height": 0,
"icon-size-large": 32,
"icon-size-small": 16,
"icon-size-button": 16,
"margin-bottom": 0,
"margin-left": 0,
"margin-right": 0,
"margin-top": 0,
"padding": 2,
"terminal": "foot",
"width": 0
},
"sway-taskbar": {
"workspace-menu": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8"
],
"name-max-len": 20,
"image-size": 16,
"workspaces-spacing": 0,
"task-padding": 0,
"show-app-icon": true,
"show-app-name": true,
"show-layout": true,
"workspace-buttons": true,
"all-workspaces": true,
"mark-autotiling": true,
"mark-xwayland": true,
"all-outputs": false
},
"hyprland-taskbar": {
"name-max-len": 24,
"icon-size": 16,
"workspaces-spacing": 0,
"client-padding": 0,
"show-app-icon": true,
"show-app-name": true,
"show-layout": true,
"all-outputs": false,
"mark-xwayland": true,
"angle": 0.0
},
"sway-workspaces": {
"numbers": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8"
],
"show-icon": true,
"image-size": 16,
"show-name": true,
"name-length": 40,
"mark-autotiling": true,
"mark-content": true,
"hide-empty": false,
"show-layout": true
},
"hyprland-workspaces": {
"num-ws": 10,
"show-icon": true,
"image-size": 16,
"show-name": true,
"name-length": 40,
"show-empty": true,
"mark-content": true,
"show-names": true,
"mark-floating": true,
"mark-xwayland": true,
"angle": 0.0
},
"clock": {
"format": "%a, %d. %b %H:%M:%S",
"tooltip-text": "",
"tooltip-date-format": false,
"on-left-click": "",
"on-middle-click": "",
"on-right-click": "",
"on-scroll-up": "",
"on-scroll-down": "",
"root-css-name": "root-clock",
"css-name": "clock",
"interval": 1,
"angle": 0.0
},
"playerctl": {
"buttons-position": "left",
"icon-size": 16,
"chars": 30,
"scroll": false,
"button-css-name": "",
"label-css-name": "",
"interval": 1
},
"scratchpad": {
"css-name": "",
"icon-size": 16
},
"dwl-tags": {
"tag-names": "1 2 3 4 5 6 7 8 9",
"title-limit": 55
},
"openweather": {
"appid": "",
"weatherbit-api-key": "",
"lat": null,
"long": null,
"lang": "en",
"units": "metric",
"interval": 1800,
"loc-name": "",
"weather-icons": "color",
"on-right-click": "",
"on-middle-click": "",
"on-scroll": "",
"icon-placement": "start",
"icon-size": 24,
"css-name": "weather",
"show-name": false,
"angle": 0.0,
"ow-popup-icons": "light",
"popup-icon-size": 24,
"popup-text-size": "medium",
"popup-css-name": "weather-forecast",
"popup-placement": "right",
"popup-margin-horizontal": 0,
"popup-margin-top": 0,
"popup-margin-bottom": 0,
"show-humidity": true,
"show-wind": true,
"show-pressure": true,
"show-cloudiness": true,
"show-visibility": true,
"show-pop": true,
"show-volume": true
},
"brightness-slider": {
"show-values": true,
"icon-size": 16,
"interval": 10,
"hover-opens": false,
"leave-closes": false,
"root-css-name": "brightness-module",
"css-name": "brightness-popup",
"angle": 0.0,
"icon-placement": "start",
"backlight-device": "",
"backlight-controller": "brightnessctl",
"slider-orientation": "horizontal",
"slider-inverted": false,
"popup-icon-placement": "start",
"popup-horizontal-alignment": "left",
"popup-vertical-alignment": "top",
"popup-width": 256,
"popup-height": 64,
"popup-horizontal-margin": 0,
"popup-vertical-margin": 0,
"step-size": 1
}
}
]

View File

@ -0,0 +1,56 @@
* {
all: unset;
font-family: Agave Nerd Font Mono, Arial, sans-serif;
border-radius: 30px;
font-size: 10pt;
color: #d6abab;
}
window {
background-color: #1a1a1a;
color: #E40046;
border: solid;
border-width: 4px;
margin-bottom: 10px;
padding: 5px;
}
list {
background: none;
border-radius: 25px;
padding: 5px;
margin: 5px;
}
entry {
background-color: #1a1a1a;
padding: 2px 2px;
border-radius: 15px;
color: #5018dd;
}
button, image {
background: none;
border: none;
box-shadow: none;
color: #d6abab;
}
button {
padding: 2px;
margin-left: 4px;
margin-right: 4px;
font-size: 12px;
border-radius: 2px;
color: #d6abab;
}
button:hover {
background-color: #1a1a1a;
color: #E40046;
}
button:focus {
box-shadow: none;
color: #E40046;
}

View File

@ -0,0 +1,111 @@
/***** SUGGESTED TO CHANGE CAREFULLY *****/
/* Recommended if panel "height" unset or smaller then your theme default button height */
button {
margin: 2px
}
/* SwayTaskBar and SwayWorkspaces use custom widgets, that need this and the next name
to highlight currently focused task / workspace. */
#task-box {
padding-left: 4px;
padding-right: 4px
}
#task-box-focused {
background-color: rgba (255, 255, 255, 0.12);
padding-left: 4px;
padding-right: 4px
}
/***** MODIFY TO YOUR TASTE *****/
/* Sample button in sample config w/ no background nor border */
#button-custom {
background: rgba (0, 0, 0, 0.0);
border: 0
}
/* Top panel in sample config uses this name */
#panel-top {
background: #101010;
color: #eeeeee
}
/* Bottom panel in sample config uses this name */
#panel-bottom {
background: #101010;
color: #eeeeee
}
/* Controls window in sample config uses this name */
#controls-window {
border-radius: 15px;
background: #36364f;
color: #eeeeee
}
#controls-window scale value {
color: #eeeeee
}
/* Brightness slider popup window in sample config uses this name */
#brightness-popup {
border-radius: 15px;
background: #36364f;
color: #eeeeee
}
#brightness-popup box {
padding: 15px;
}
/* Executors usually behave better in monospace fonts */
#executor-label {
font-family: monospace
}
/* and so does the Clock */
#clock {
font-family: monospace;
font-size: 16px
}
/* Sample executor-weather uses "css-name": "weather" */
#weather {
font-size: 16px
}
/* dwl-tags module */
#dwl-tag-box {
padding-top: 4px;
padding-bottom: 4px
}
#dwl-tag-occupied {
font-family: monospace;
color: #eee;
background-color: #006699;
padding-left: 3px;
padding-right: 3px;
}
#dwl-tag-free {
font-family: monospace;
color: #eee;
background-color: rgba (32, 50, 90, 1.0);
padding-left: 3px;
padding-right: 3px;
}
#dwl-tag-urgent {
font-family: monospace;
color: #eee;
background-color: #ee6600;
padding-left: 3px;
padding-right: 3px;
}
#dwl-tag-selected {
border: solid 2px;
border-color: #81a1c1
}

View File

@ -0,0 +1,15 @@
#!/bin/bash
statecon=$( echo "example" | grep x)
#notify-send $statecon
if [ "$statecon" != '' ]; then
echo "ex"
else
echo "nx"
fi

View File

@ -0,0 +1,18 @@
#!/bin/bash
trunc=16
sample=$(hyprctl activewindow | grep title: | awk -F: '{print $2}')
#echo ${sample}
if [ ${#sample} -gt $trunc ]; then
echo $sample | head -c $trunc | sed 's/$/…/'
else
if [ ${#sample} -ne 0 ]; then
echo $sample
else
echo None
fi
fi
#hyprctl activewindow | grep title: | awk -F: '{print $2}' | head -c $trunc | sed 's/$/.../'

659
desktopenvs/hyprlua/scripts/amssh Executable file
View File

@ -0,0 +1,659 @@
#!/usr/bin/env bash
# amssh — encrypted SSH login manager
# Storage : ~/.amssh (AES-256-CBC · PBKDF2-SHA256 · 600 000 iterations)
# Modes : --tui (default, fzf TUI) | --drun (wofi launcher mode)
# Auth : master passphrase; FIDO2/PAM layer if pam_u2f + pamtester present
set -euo pipefail
# ── constants ────────────────────────────────────────────────────────────────
STORE="${AMSSH_STORE:-$HOME/.amssh}"
CONF_DIR="${HOME}/.config/amssh"
AUTH_CONF="${CONF_DIR}/auth"
ITERS=600000
TERM_CMD="${AMSSH_TERM:-kitty}"
MODE="tui"
VERSION="#amssh:v1"
_TMP=$(mktemp -d /tmp/amssh.XXXXXX)
trap 'rm -rf "$_TMP"' EXIT
# ── usage ────────────────────────────────────────────────────────────────────
_usage() {
cat >&2 <<'EOF'
amssh — encrypted SSH login manager
Usage:
amssh [--tui] Interactive fzf TUI (default)
amssh --drun Wofi launcher mode
TUI keys:
Enter Connect to selected host
Ctrl-A Add new entry
Ctrl-E Edit selected entry
Ctrl-D Delete selected entry
Esc Quit
Store: ~/.amssh (AES-256-CBC, PBKDF2-SHA256)
EOF
}
# ── argument parsing ─────────────────────────────────────────────────────────
while [[ $# -gt 0 ]]; do
case "$1" in
--tui|-t) MODE="tui" ;;
--drun|-d) MODE="drun" ;;
--help|-h) _usage; exit 0 ;;
*) printf '[amssh] Unknown option: %s\n' "$1" >&2; _usage; exit 1 ;;
esac
shift
done
# ── crypto ───────────────────────────────────────────────────────────────────
_decrypt() {
AMSSH_PASS="$1" openssl enc -aes-256-cbc -pbkdf2 -iter "$ITERS" -d \
-in "$STORE" -pass env:AMSSH_PASS 2>/dev/null
}
_encrypt_stdin() {
AMSSH_PASS="$1" openssl enc -aes-256-cbc -pbkdf2 -iter "$ITERS" \
-out "$STORE" -pass env:AMSSH_PASS
}
# ── passphrase helpers ────────────────────────────────────────────────────────
_ask_tty() {
local p
printf '%s' "${1:-Passphrase: }" >&2
IFS= read -rs p </dev/tty
printf '\n' >&2
printf '%s' "$p"
}
_ask_pinentry() {
local cmd
cmd=$(command -v pinentry-qt 2>/dev/null \
|| command -v pinentry-gtk-2 2>/dev/null \
|| command -v pinentry 2>/dev/null) || return 1
local out
out=$(printf 'SETPROMPT amssh master passphrase\nSETDESC Enter master passphrase for the encrypted SSH store\nGETPIN\n' \
| "$cmd" 2>/dev/null) || return 1
printf '%s\n' "$out" | grep -q '^ERR' && return 1
printf '%s\n' "$out" | awk '/^D /{sub(/^D /,""); print; exit}'
}
# ── FIDO2 / PAM detection ────────────────────────────────────────────────────
PAM_SVC=amssh
PAM_SVC_FILE="/etc/pam.d/${PAM_SVC}"
_find_pam_u2f() {
local f
for f in /lib/security/pam_u2f.so \
/usr/lib/security/pam_u2f.so \
/lib/x86_64-linux-gnu/security/pam_u2f.so \
/usr/lib/x86_64-linux-gnu/security/pam_u2f.so \
/usr/lib/aarch64-linux-gnu/security/pam_u2f.so; do
[[ -f "$f" ]] && printf '%s' "$f" && return 0
done
return 1
}
_fido_keys_file() {
local f
for f in "$HOME/.config/Yubico/u2f_keys" "$HOME/.config/pam-u2f/keys"; do
[[ -f "$f" ]] && printf '%s' "$f" && return 0
done
return 1
}
# Hardware + tool present — enough to offer FIDO setup in the dialog.
_fido_hardware_available() {
_find_pam_u2f >/dev/null && command -v pamtester &>/dev/null
}
# Fully configured — all four prerequisites ready to authenticate.
_fido_pam_available() {
_fido_hardware_available \
&& _fido_keys_file >/dev/null \
&& [[ -f "$PAM_SVC_FILE" ]]
}
# Creates /etc/pam.d/amssh — requires sudo once.
_ensure_pam_service() {
[[ -f "$PAM_SVC_FILE" ]] && return 0
printf '[amssh] Creating PAM service %s (requires sudo)\n' "$PAM_SVC_FILE" >&2
sudo tee "$PAM_SVC_FILE" >/dev/null <<'PAM'
#%PAM-1.0
auth required pam_u2f.so cue
PAM
}
# Registers a FIDO key into ~/.config/Yubico/u2f_keys if not already present.
_register_fido_key() {
local keys_file="$HOME/.config/Yubico/u2f_keys"
if [[ -f "$keys_file" ]]; then
printf '[amssh] Key file already exists at %s\n' "$keys_file" >&2
printf '[amssh] To add another key run: pamu2fcfg -n >> %s\n' "$keys_file" >&2
return 0
fi
mkdir -p "$(dirname "$keys_file")"
printf '[amssh] Insert your FIDO key, then press Enter...\n' >&2
read -r -s < /dev/tty
printf '[amssh] Touch your FIDO key when it blinks...\n' >&2
if pamu2fcfg > "$keys_file" 2>/dev/tty; then
printf '[amssh] Key registered at %s\n' "$keys_file" >&2
else
rm -f "$keys_file"
printf '[amssh] Registration failed — check key and retry\n' >&2
return 1
fi
}
_pam_authenticate() {
# Both stdout and stderr must go to /dev/tty: pamtester prints its success
# message to stdout, which would contaminate pass=$(_get_passphrase) if left
# uncaptured. stderr carries the pam_u2f tap prompt.
pamtester "$PAM_SVC" "$USER" authenticate >/dev/tty 2>&1
}
# ── master auth (passphrase + optional FIDO2 PAM layer) ─────────────────────
_get_passphrase() {
# FIDO2/PAM second-factor: opt-in via AMSSH_PAM=1
if [[ "${AMSSH_PAM:-}" == "1" ]] && _fido_pam_available; then
printf '[amssh] FIDO2/PAM authentication required\n' >&2
_pam_authenticate || { printf '[amssh] PAM auth failed\n' >&2; exit 1; }
printf '[amssh] PAM OK\n' >&2
fi
local pass
if [[ "$MODE" == "drun" ]]; then
pass=$(_ask_pinentry) || pass=$(_ask_tty "amssh passphrase: ")
else
pass=$(_ask_tty "amssh passphrase: ")
fi
[[ -z "$pass" ]] && { printf '[amssh] No passphrase provided\n' >&2; exit 1; }
printf '%s' "$pass"
}
# ── store helpers ─────────────────────────────────────────────────────────────
# Entry format: alias|user|host|port|identity|description
# (port defaults to 22; identity and description may be empty)
_init_store() {
printf '%s\n' "$VERSION" | _encrypt_stdin "$1"
}
_verify_pass() {
_decrypt "$1" 2>/dev/null | grep -q "^${VERSION}" || return 1
}
_load_entries() {
_decrypt "$1" | grep -v '^#' | grep -v '^[[:space:]]*$' || true
}
_save_entries() {
# reads entry lines from stdin, prepends version header, encrypts
local pass="$1"
{ printf '%s\n' "$VERSION"; cat; } | grep -v '^[[:space:]]*$' | _encrypt_stdin "$pass"
}
# ── display formatting ────────────────────────────────────────────────────────
# Entry format: alias|user|host|port|identity|description|password (7 fields)
# password is stored in plaintext inside the AES-256 encrypted store.
_entry_to_display() {
awk -F'|' '{
addr = $2 "@" $3
if ($4 != "" && $4 != "22") addr = addr ":" $4
line = $1 " \342\200\224 " addr
if ($7 != "") line = line " [*]"
if ($6 != "") line = line " \342\200\224 " $6
print line
}'
}
# ── SSH connector ─────────────────────────────────────────────────────────────
_connect() {
local entry="$1"
local alias user host port identity desc password
IFS='|' read -r alias user host port identity desc password <<< "$entry"
local args=()
[[ -n "$port" && "$port" != "22" ]] && args+=(-p "$port")
[[ -n "$identity" ]] && args+=(-i "$identity")
args+=("${user}@${host}")
printf '[amssh] Connecting: ssh %s\n' "${args[*]}" >&2
if [[ -n "$password" ]]; then
# Use SSH_ASKPASS_REQUIRE=force so SSH calls our script for the password
# instead of prompting interactively — works with OpenSSH 8.4+
local askpass="$_TMP/askpass"
printf '#!/bin/sh\nprintf "%%s" "$AMSSH_CONN_PW"\n' > "$askpass"
chmod 700 "$askpass"
AMSSH_CONN_PW="$password" SSH_ASKPASS="$askpass" \
SSH_ASKPASS_REQUIRE=force ssh "${args[@]}"
else
ssh "${args[@]}"
fi
}
# ── prompt for entry (drun / zenity) ─────────────────────────────────────────
_prompt_entry_zenity() {
local result
result=$(zenity --forms \
--title="amssh — Add Entry" \
--text="SSH login details" \
--add-entry="user@host[:port]" \
--add-entry="Alias" \
--add-password="SSH password (optional)" \
--separator='|' 2>/dev/null) || return 1
local target alias password
IFS='|' read -r target alias password <<< "$result"
local user hostport host port
user="${target%%@*}"; hostport="${target#*@}"
if [[ "$hostport" == *:* ]]; then
host="${hostport%%:*}"; port="${hostport##*:}"
else
host="$hostport"; port="22"
fi
[[ -z "$alias" || -z "$user" || -z "$host" ]] && {
zenity --error --text="user@host and alias are required" 2>/dev/null || true
return 1
}
printf '%s|%s|%s|%s||%s|%s' "$alias" "$user" "$host" "$port" "$alias" "$password"
}
# ── TUI mode (fzf with execute+reload — stays inside fzf on add/delete) ──────
_tui_mode() {
local pass="$1"
local passfile="$_TMP/.pass"
local list_sh="$_TMP/list.sh"
local add_sh="$_TMP/add.sh"
local del_sh="$_TMP/del.sh"
local prev_sh="$_TMP/prev.sh"
# Secure passphrase file — readable only by owner
printf '%s' "$pass" > "$passfile"
chmod 600 "$passfile"
# Snapshot constants into local vars for script generation
local S="$STORE" I="$ITERS" V="$VERSION"
# ── list.sh: decrypt + format for fzf display ────────────────────────────
{ printf '#!/usr/bin/env bash\n'
printf '_P=$(cat %q); _S=%q; _I=%q\n' "$passfile" "$S" "$I"
cat << 'LIST'
AMSSH_PASS="$_P" openssl enc -aes-256-cbc -pbkdf2 -iter "$_I" -d \
-in "$_S" -pass env:AMSSH_PASS 2>/dev/null \
| awk -F'|' '!/^#/ && NF>0 {
addr=$2"@"$3; if($4!=""&&$4!="22") addr=addr":"$4
line=$1" \342\200\224 "addr
if($7!="") line=line" [*]"
if($6!="") line=line" \342\200\224 "$6
print line
}' 2>/dev/null || true
LIST
} > "$list_sh"; chmod +x "$list_sh"
# ── add.sh: full-screen TUI form (alternate screen, hidden password) ────────
{ printf '#!/usr/bin/env bash\n'
printf '_P=$(cat %q); _S=%q; _I=%q; _V=%q\n' "$passfile" "$S" "$I" "$V"
cat << 'ADD'
# ── terminal setup ────────────────────────────────────────────────────────────
_stty=$(stty -g 2>/dev/null)
_cleanup() { stty "$_stty" 2>/dev/null; tput rmcup 2>/dev/null; tput cnorm 2>/dev/null; }
trap '_cleanup; exit 1' INT TERM
trap '_cleanup' EXIT
tput smcup 2>/dev/null # switch to alternate screen
tput civis # hide cursor while drawing
tput clear
cols=$(tput cols 2>/dev/null || printf '80')
rows=$(tput lines 2>/dev/null || printf '24')
BW=66; BH=14
BX=$(( (cols - BW) / 2 )); [[ $BX -lt 0 ]] && BX=0
BY=$(( (rows - BH) / 2 )); [[ $BY -lt 0 ]] && BY=0
# colour / style shortcuts
_b=$(tput bold); _r=$(tput sgr0); _di=$(tput dim)
_HL=$'\033[38;2;228;0;70m' # Highlights #E40046
_DK=$'\033[38;2;80;24;221m' # Dark #5018DD
_QW=$'\033[38;2;214;171;171m' # Quasi-White #D6ABAB
_RH=$'\033[38;2;245;5;5m' # Red-Hivis #F50505
# ── draw box ──────────────────────────────────────────────────────────────────
tput cup $BY $BX
printf "${_b}${_HL}╔$(printf '═%.0s' $(seq 1 $((BW-2))))╗${_r}"
for (( i=1; i<BH-1; i++ )); do
tput cup $((BY+i)) $BX; printf "${_HL}║${_r}"
tput cup $((BY+i)) $((BX+BW-1)); printf "${_HL}║${_r}"
done
tput cup $((BY+BH-1)) $BX
printf "${_b}${_HL}╚$(printf '═%.0s' $(seq 1 $((BW-2))))╝${_r}"
_title=" Add SSH Server "
tput cup $BY $(( BX + (BW - ${#_title}) / 2 ))
printf "${_b}${_HL}${_title}${_r}"
# ── layout constants ──────────────────────────────────────────────────────────
# Columns
_LC=$((BX+3)); _LF=$((BX+13)) # left label col / field col
_RC=$((BX+37)); _RF=$((BX+43)) # right label col / field col
_LFW=22; _RFW=18 # field widths
# Rows
_R1=$((BY+3)) # Username | Host
_R2=$((BY+4)) # Password | Port
_R3=$((BY+6)) # Alias
_AFW=48 # alias field width
# draw one field slot: "▸ ·····"
_slot() {
local row=$1 col=$2 w=$3
tput cup "$row" "$col"
printf "${_DK}▸ ${_di}$(printf '·%.0s' $(seq 1 "$w"))${_r}"
}
# draw labels
tput cup $_R1 $_LC; printf "${_QW}${_b}Username${_r}"
tput cup $_R2 $_LC; printf "${_QW}${_b}Password${_r}"
tput cup $_R3 $_LC; printf "${_QW}${_b}Alias${_r}"
tput cup $_R1 $_RC; printf "${_QW}${_b}Host${_r}"
tput cup $_R2 $_RC; printf "${_QW}${_b}Port${_r}"
# draw field slots
_slot $_R1 $_LF $_LFW
_slot $_R1 $_RF $_RFW
_slot $_R2 $_LF $_LFW
_slot $_R2 $_RF 5
_slot $_R3 $_LF $_AFW
# hint line
tput cup $((BY+BH-3)) $((BX+3))
printf "${_QW}${_di}Tab/Enter to advance · Ctrl-C to cancel${_r}"
# ── field reader helpers ──────────────────────────────────────────────────────
# Reads chars until Tab or Enter; Backspace edits in place; sets named var.
_readfield() {
local _v="$1" _r="" _ch
while IFS= read -r -s -n1 _ch; do
case "$_ch" in
$'\t'|$'\n'|'') break ;;
$'\x7f'|$'\x08') [[ -n "$_r" ]] && { _r="${_r%?}"; printf '\b \b'; } ;;
*) _r+="$_ch"; printf '%s' "$_ch" ;;
esac
done
printf -v "$_v" '%s' "$_r"
}
_readpw() {
local _v="$1" _r="" _ch
while IFS= read -r -s -n1 _ch; do
case "$_ch" in
$'\t'|$'\n'|'') break ;;
$'\x7f'|$'\x08') [[ -n "$_r" ]] && { _r="${_r%?}"; printf '\b \b'; } ;;
*) _r+="$_ch"; printf '*' ;;
esac
done
printf -v "$_v" '%s' "$_r"
}
# ── read fields ───────────────────────────────────────────────────────────────
tput cnorm
_user="" _host="" _pw="" _port="" _alias=""
tput cup $_R1 $((_LF+2)); _readfield _user
tput cup $_R1 $((_RF+2)); _readfield _host
tput cup $_R2 $((_LF+2)); _readpw _pw
tput cup $_R2 $((_RF+2)); printf "22"; tput cup $_R2 $((_RF+2)); _readfield _port
tput cup $_R3 $((_LF+2)); _readfield _alias
[[ -z "$_port" ]] && _port="22"
tput civis
# ── validate ──────────────────────────────────────────────────────────────────
_err() {
tput cup $((BY+BH-2)) $((BX+3))
printf "${_RH}${_b}✗ %s${_r}" "$1"
sleep 1.5; exit 1
}
[[ -z "$_user" ]] && _err "username is required"
[[ -z "$_host" ]] && _err "host is required"
[[ -z "$_alias" ]] && _err "alias is required"
_ex=$(AMSSH_PASS="$_P" openssl enc -aes-256-cbc -pbkdf2 -iter "$_I" -d \
-in "$_S" -pass env:AMSSH_PASS 2>/dev/null \
| grep -v '^#' | grep -v '^[[:space:]]*$' || true)
if printf '%s\n' "$_ex" | grep -q "^${_alias}|" 2>/dev/null; then
_err "alias \"${_alias}\" already exists"
fi
# ── save ──────────────────────────────────────────────────────────────────────
{ printf '%s\n' "$_V"
printf '%s\n' "$_ex"
printf '%s|%s|%s|%s||%s|%s\n' "$_alias" "$_user" "$_host" "$_port" "$_alias" "$_pw"
} | grep -v '^[[:space:]]*$' \
| AMSSH_PASS="$_P" openssl enc -aes-256-cbc -pbkdf2 -iter "$_I" \
-out "$_S" -pass env:AMSSH_PASS
tput cup $((BY+BH-2)) $((BX+3))
printf "${_QW}${_b}✓ Added:${_r} %s → %s@%s:%s" "$_alias" "$_user" "$_host" "$_port"
sleep 0.8
ADD
} > "$add_sh"; chmod +x "$add_sh"
# ── del.sh: delete entry by alias ────────────────────────────────────────
{ printf '#!/usr/bin/env bash\n'
printf '_P=$(cat %q); _S=%q; _I=%q; _V=%q\n' "$passfile" "$S" "$I" "$V"
cat << 'DEL'
_alias="$1"; [[ -z "$_alias" ]] && exit 0
_ex=$(AMSSH_PASS="$_P" openssl enc -aes-256-cbc -pbkdf2 -iter "$_I" -d \
-in "$_S" -pass env:AMSSH_PASS 2>/dev/null \
| grep -v '^#' | grep -v '^[[:space:]]*$' || true)
{ printf '%s\n' "$_V"
printf '%s\n' "$_ex" | grep -v "^${_alias}|"
} | grep -v '^[[:space:]]*$' \
| AMSSH_PASS="$_P" openssl enc -aes-256-cbc -pbkdf2 -iter "$_I" \
-out "$_S" -pass env:AMSSH_PASS
printf ' Deleted: %s\n' "$_alias" >&2
DEL
} > "$del_sh"; chmod +x "$del_sh"
# ── prev.sh: preview panel ────────────────────────────────────────────────
{ printf '#!/usr/bin/env bash\n'
printf '_P=$(cat %q); _S=%q; _I=%q\n' "$passfile" "$S" "$I"
cat << 'PREV'
_line="$1"
_a=$(printf '%s' "$_line" | awk -F' \342\200\224 ' '{gsub(/^[[:space:]]+|[[:space:]]+$/,"",$1);print $1}')
[[ -z "$_a" ]] && exit 0
AMSSH_PASS="$_P" openssl enc -aes-256-cbc -pbkdf2 -iter "$_I" -d \
-in "$_S" -pass env:AMSSH_PASS 2>/dev/null \
| awk -F'|' -v a="$_a" '$1==a {
addr=$3; if($4!=""&&$4!="22") addr=addr":"$4
printf " Alias : %s\n User : %s\n Host : %s\n Port : %s\n Identity : %s\n Password : %s\n Note : %s\n",
$1,$2,addr,($4?$4:"22"),($5?$5:"(default)"),($7?"stored":"none"),($6?$6:"-")
}' 2>/dev/null || true
PREV
} > "$prev_sh"; chmod +x "$prev_sh"
# ── fzf loop: stay open after SSH session ends ────────────────────────────
while true; do
local sel
sel=$(bash "$list_sh" \
| fzf \
--prompt="SSH " \
--color='fg:#D6ABAB,hl:#E40046,fg+:#D6ABAB,bg+:#1A1A1A,hl+:#F50505,info:#5018DD,prompt:#E40046,pointer:#E40046,marker:#5018DD,spinner:#E40046,header:#D6ABAB' \
--header=$' \e[1m\e[38;2;228;0;70mEnter\e[0m connect \e[1m\e[38;2;228;0;70ma\e[0m add \e[1m\e[38;2;228;0;70md\e[0m delete \e[1m\e[38;2;228;0;70mq\e[0m quit\n \e[2m\e[38;2;80;24;221mj/k\e[0m down/up \e[2m\e[38;2;80;24;221mg/G\e[0m top/bottom \e[2m\e[38;2;80;24;221m/\e[0m filter' \
--bind="a:execute(bash '$add_sh')+reload(bash '$list_sh')" \
--bind="d:execute(bash '$del_sh' {1})+reload(bash '$list_sh')" \
--preview="bash '$prev_sh' {}" \
--preview-window="right:50%:wrap" \
--no-sort --ansi \
--bind="j:down,k:up,g:first,G:last,/:toggle-search,q:abort" \
2>/dev/null || true)
[[ -z "$sel" ]] && break
local alias
alias=$(printf '%s' "$sel" \
| awk -F' \342\200\224 ' '{gsub(/^[[:space:]]+|[[:space:]]+$/,"",$1); print $1}')
[[ -z "$alias" ]] && break
local entry
entry=$(AMSSH_PASS="$pass" openssl enc -aes-256-cbc -pbkdf2 -iter "$ITERS" -d \
-in "$STORE" -pass env:AMSSH_PASS 2>/dev/null \
| awk -F'|' -v a="$alias" '$1==a' || true)
[[ -z "$entry" ]] && { printf '[amssh] Entry not found: %s\n' "$alias" >&2; continue; }
_connect "$entry"
# fzf reopens after SSH session ends
done
}
# ── drun mode (wofi) ──────────────────────────────────────────────────────────
_drun_mode() {
local pass="$1"
local raw_entries display_list
raw_entries=$(_load_entries "$pass")
if [[ -z "$raw_entries" ]]; then
display_list="(no entries — add via amssh --tui)"
else
display_list=$(printf '%s\n' "$raw_entries" | _entry_to_display)
fi
local selected
selected=$(printf '%s\n' "$display_list" \
| wofi --show=dmenu --prompt="SSH: " --dmenu \
2>/dev/null) || exit 0
[[ -z "$selected" || "$selected" == "(no entries"* ]] && exit 0
local alias
alias=$(printf '%s' "$selected" | awk -F' — ' '{gsub(/^[[:space:]]+|[[:space:]]+$/,"",\$1); print $1}')
local entry
entry=$(printf '%s\n' "$raw_entries" | awk -F'|' -v a="$alias" '$1==a')
[[ -z "$entry" ]] && exit 1
local e_alias e_user e_host e_port e_identity e_desc
IFS='|' read -r e_alias e_user e_host e_port e_identity e_desc <<< "$entry"
local args=()
[[ -n "$e_port" && "$e_port" != "22" ]] && args+=(-p "$e_port")
[[ -n "$e_identity" ]] && args+=(-i "$e_identity")
args+=("${e_user}@${e_host}")
# Launch SSH in a terminal window
"$TERM_CMD" -e ssh "${args[@]}"
}
# ── FIDO2 info on startup (TUI only) ─────────────────────────────────────────
_print_fido_status() {
[[ "$MODE" != "tui" ]] && return
if _fido_pam_available; then
if [[ "${AMSSH_PAM:-}" == "1" ]]; then
printf '[amssh] FIDO2/PAM: active (second factor enabled)\n' >&2
else
printf '[amssh] FIDO2/PAM: available — set AMSSH_PAM=1 to require as second factor\n' >&2
fi
fi
}
# ── auth config (persisted choice from first-launch dialog) ──────────────────
_load_auth_config() {
[[ ! -f "$AUTH_CONF" ]] && return
local method
method=$(cat "$AUTH_CONF")
if [[ "$method" == "fido" ]] && _fido_pam_available; then
export AMSSH_PAM=1
fi
}
_first_launch_dialog() {
mkdir -p "$CONF_DIR"
# FIDO2 hardware unavailable — silently default to passphrase
if ! _fido_hardware_available; then
printf 'passphrase' > "$AUTH_CONF"
return
fi
local choice
if [[ "$MODE" == "drun" ]]; then
choice=$(zenity --list \
--radiolist \
--title="amssh — Authentication Setup" \
--text="Choose how to unlock your SSH store:" \
--column="" --column="Method" --column="Description" \
TRUE "passphrase" "Master passphrase (recommended)" \
FALSE "fido" "FIDO2 hardware key (second factor)" \
--height=210 --width=500 2>/dev/null) || choice="passphrase"
else
# whiptail writes selection to stderr; swap fds so $() captures it
choice=$(whiptail \
--title "amssh — Authentication Setup" \
--menu "Choose how to unlock your SSH store:" \
13 62 2 \
"passphrase" "Master passphrase" \
"fido" "FIDO2 hardware key (second factor)" \
3>&1 1>&2 2>&3) || choice="passphrase"
fi
[[ -z "$choice" ]] && choice="passphrase"
printf '%s' "$choice" > "$AUTH_CONF"
if [[ "$choice" == "fido" ]]; then
printf '\n[amssh] FIDO2 selected — setting up...\n' >&2
_register_fido_key || { printf 'passphrase' > "$AUTH_CONF"; return; }
_ensure_pam_service || { printf 'passphrase' > "$AUTH_CONF"; return; }
printf '[amssh] FIDO2 ready — your key will be required on each unlock.\n' >&2
fi
}
# ── main ─────────────────────────────────────────────────────────────────────
main() {
_load_auth_config
if [[ ! -f "$STORE" ]]; then
_first_launch_dialog
_load_auth_config # apply choice made in dialog
fi
_print_fido_status
local pass
pass=$(_get_passphrase)
if [[ ! -f "$STORE" ]]; then
printf '[amssh] Creating new store at %s\n' "$STORE" >&2
local confirm
if [[ "$MODE" == "drun" ]]; then
confirm=$(_ask_pinentry) || { printf '[amssh] Cancelled\n' >&2; exit 1; }
else
confirm=$(_ask_tty "Confirm passphrase: ")
fi
[[ "$pass" != "$confirm" ]] && { printf '[amssh] Passphrases do not match\n' >&2; exit 1; }
_init_store "$pass"
printf '[amssh] Store initialised\n' >&2
[[ "$MODE" == "drun" ]] && exit 0
else
_verify_pass "$pass" || { printf '[amssh] Wrong passphrase or corrupted store\n' >&2; exit 1; }
fi
case "$MODE" in
tui) _tui_mode "$pass" ;;
drun) _drun_mode "$pass" ;;
esac
}
main

View File

@ -0,0 +1,44 @@
#!/bin/bash
# Get percentage and remove the % sign cleanly
perc=$(upower -i /org/freedesktop/UPower/devices/battery_BAT1 | awk '/percentage/ {gsub("%",""); print $2}')
state=$(upower -i /org/freedesktop/UPower/devices/battery_BAT1 | awk '/state/ {print $2}')
# Check if values are not empty
if [ -z "$perc" ] || [ -z "$state" ]; then
echo "Battery info unavailable"
exit 1
fi
# Convert to integer
num=${perc%%.*} # In case perc is float
if [ "$state" == "charging" ]; then
echo "󰂄 ${perc}%"
else
if [ "$num" -gt 95 ]; then
echo "󰁹 ${perc}%"
elif [ "$num" -gt 90 ]; then
echo "󰂂 ${perc}%"
elif [ "$num" -gt 80 ]; then
echo "󰂁 ${perc}%"
elif [ "$num" -gt 70 ]; then
echo "󰂀 ${perc}%"
elif [ "$num" -gt 60 ]; then
echo "󰁿 ${perc}%"
elif [ "$num" -gt 50 ]; then
echo "󰁾 ${perc}%"
elif [ "$num" -gt 40 ]; then
echo "󰁽 ${perc}%"
elif [ "$num" -gt 30 ]; then
echo "󰁼 ${perc}%"
elif [ "$num" -gt 20 ]; then
echo "󰁻 ${perc}%"
elif [ "$num" -gt 10 ]; then
echo "󰁺 ${perc}%"
else
notify-send --urgency=critical -t 2000 "󱃍 low battery, please charge"
echo "󰂎 ${perc}%"
fi
fi

View File

@ -0,0 +1,2 @@
#!/bin/bash
hyprctl dispatch exec blueman-applet

View File

@ -0,0 +1,17 @@
#!/bin/bash
statecon=$( pidof hypridle | grep "[1234567890]" )
#echo $statecon
if [ "$statecon" != "" ]; then
notify-send -t 1000 "caffeine mode on"
killall hypridle
else
notify-send -t 1000 "caffeine mode off"
hyprctl dispatch exec hypridle
fi

View File

@ -0,0 +1,26 @@
#!/bin/bash
today=$(date +%-d)
weekdaynum=$(date +%u)
weekday=""
if [[ $weekdaynum -eq 1 ]]; then
weekday="Mo"
elif [[ $weekdaynum -eq 2 ]]; then
weekday="Tu"
elif [[ $weekdaynum -eq 3 ]]; then
weekday="We"
elif [[ $weekdaynum -eq 4 ]]; then
weekday="Th"
elif [[ $weekdaynum -eq 5 ]]; then
weekday="Fr"
elif [[ $weekdaynum -eq 6 ]]; then
weekday="Sa"
elif [[ $weekdaynum -eq 7 ]]; then
weekday="Su"
fi
echo ======================
date '+%A, %d.%m.%Y'
echo ======================
cal -m | sed -e 's/^/ /' | sed "s/ $today /[$today]/" | sed "s/ $weekday /[$weekday]/"

View File

@ -0,0 +1,2 @@
#!/bin/bash
echo "<b> "$(date +'%A, %-d %B %Y')" </b>"

View File

@ -0,0 +1,37 @@
#!/bin/bash
perc=$(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep percentage | awk -F: '{print $2}' | xargs)
state=$(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep state | awk -F: '{print $2}' | xargs)
num=$(echo ${perc::-1})
if [ $state == "charging" ]; then
echo "󰂄 ${perc}"
else
#echo "󰁹 ${perc}"
if [ $num -gt 95 ]; then
echo "󰁹 ${perc}"
elif [ $num -gt 90 ]; then
echo "󰂂 ${perc}"
elif [ $num -gt 80 ]; then
echo "󰂁 ${perc}"
elif [ $num -gt 70 ]; then
echo "󰂀 ${perc}"
elif [ $num -gt 60 ]; then
echo "󰁿 ${perc}"
elif [ $num -gt 50 ]; then
echo "󰁾 ${perc}"
elif [ $num -gt 40 ]; then
echo "󰁽 ${perc}"
elif [ $num -gt 30 ]; then
echo "󰁼 ${perc}"
elif [ $num -gt 20 ]; then
echo "󰁻 ${perc}"
elif [ $num -gt 10 ]; then
echo "󰁺 ${perc}"
else
notify-send --urgency=critical -t 2000 "󱃍 low battery, please charge"
echo "󰂎 ${perc}"
fi
fi

View File

@ -0,0 +1,40 @@
#!/usr/bin/env bash
STATUS_FILE="$XDG_RUNTIME_DIR/touchpad.status"
# Detect touchpad name dynamically
TOUCHPAD_NAME=$(hyprctl devices | awk '/type: touchpad/{getline; print $2; exit}')
TOUCHPAD_KEYWORD="device:${TOUCHPAD_NAME}:enabled"
# Functions
enable_touchpad() {
printf "true" >"$STATUS_FILE"
notify-send -u normal "Touchpad Enabled"
hyprctl keyword "$TOUCHPAD_KEYWORD" "true" -r
}
disable_touchpad() {
printf "false" >"$STATUS_FILE"
notify-send -u normal "Touchpad Disabled"
hyprctl keyword "$TOUCHPAD_KEYWORD" "false" -r
}
# Get current state from Hyprland (1 = enabled, 0 = disabled)
CURRENT_STATE=$(hyprctl getoption "$TOUCHPAD_KEYWORD" | grep "int:" | awk '{print $2}')
# Initialize status file if missing
if ! [ -f "$STATUS_FILE" ]; then
if [ "$CURRENT_STATE" -eq 1 ]; then
printf "true" >"$STATUS_FILE"
else
printf "false" >"$STATUS_FILE"
fi
fi
# Toggle based on status file
if [ "$(cat "$STATUS_FILE")" = "true" ]; then
disable_touchpad
else
enable_touchpad
fi

Some files were not shown because too many files have changed in this diff Show More