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
|
|
@ -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
|
||||||
|
|
@ -9,6 +9,3 @@ xwayland {
|
||||||
force_zero_scaling = true
|
force_zero_scaling = true
|
||||||
}
|
}
|
||||||
|
|
||||||
# toolkit-specific scale
|
|
||||||
env = GDK_SCALE,2
|
|
||||||
env = XCURSOR_SIZE,32
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
source = ~/.config/input.conf
|
source = ~/.config/input.conf
|
||||||
source = ~/.config/monitors.conf
|
source = ~/.config/monitors.conf
|
||||||
|
source = ~/.config/envvars.conf
|
||||||
source = ~/.config/binds.conf
|
source = ~/.config/binds.conf
|
||||||
source = ~/.config/windowrules.conf
|
source = ~/.config/windowrules.conf
|
||||||
source = ~/.config/autostart.conf
|
source = ~/.config/autostart.conf
|
||||||
env GTK_THEME = cyberqueer
|
|
||||||
#plugin {
|
#plugin {
|
||||||
# hyprexpo {
|
# hyprexpo {
|
||||||
# columns = 3
|
# 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 ###
|
### LOOK AND FEEL ###
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
} */
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"tabWidth": 4,
|
||||||
|
"singleQuote": true,
|
||||||
|
"useTabs": true,
|
||||||
|
"printWidth": 200
|
||||||
|
}
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -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).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# system24
|
||||||
|
|
||||||
|
a tui-style discord theme, inspired by [spicetify text theme](https://github.com/spicetify/spicetify-themes/tree/master/text).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 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)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 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)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 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)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 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)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 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)
|
||||||
|
|
||||||
|

|
||||||
|
After Width: | Height: | Size: 769 KiB |
|
After Width: | Height: | Size: 629 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 203 KiB |
|
After Width: | Height: | Size: 620 KiB |
|
After Width: | Height: | Size: 615 KiB |
|
After Width: | Height: | Size: 640 KiB |
|
|
@ -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')
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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();
|
||||||
|
});
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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%);
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -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%);
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/themiro/Dotfiles/desktopenvs/hyprland/alacritty
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
[font]
|
||||||
|
normal = {family = "Agave NerdFont", style = "Regular"}
|
||||||
|
|
||||||
|
[terminal]
|
||||||
|
[terminal.shell]
|
||||||
|
program = "/usr/bin/zsh"
|
||||||
|
args = ["-l"]
|
||||||
|
|
||||||
|
[window]
|
||||||
|
opacity = 0.3
|
||||||
|
|
@ -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 = ""
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/themiro/Dotfiles/desktopenvs/hyprland/dunst/
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/themiro/Dotfiles/desktopenvs/hyprland/eww/
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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")
|
||||||
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/themiro/Dotfiles/desktopenvs/hyprland/eww/
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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")
|
||||||
|
|
@ -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")
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/themiro/Dotfiles/desktopenvs/hyprland/eww/
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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")
|
||||||
|
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
file://$HOME/Nextcloud
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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)
|
||||||
|
|
@ -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"))
|
||||||
|
|
@ -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")
|
||||||
|
|
@ -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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
@ -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,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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 })
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
#}
|
||||||
|
|
@ -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,
|
||||||
|
})
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
swww restore
|
||||||
|
|
||||||
|
"$(dirname "$(readlink -f "$0")")/ewwstart.sh"
|
||||||
|
|
@ -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 "
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -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;
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
statecon=$( echo "example" | grep x)
|
||||||
|
#notify-send $statecon
|
||||||
|
if [ "$statecon" != '' ]; then
|
||||||
|
|
||||||
|
echo "ex"
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
echo "nx"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -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/$/.../'
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
#!/bin/bash
|
||||||
|
hyprctl dispatch exec blueman-applet
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -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]/"
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
#!/bin/bash
|
||||||
|
echo "<b> "$(date +'%A, %-d %B %Y')" </b>"
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||