├── README.md ├── Windhawk ├── Taskbar Clock Customization.txt ├── Taskbar Labels for Windows 11.txt ├── Taskbar height and icon size.txt ├── Windows 11 Notification Center Styler.txt ├── Windows 11 Start Menu Styler.txt └── Windows 11 Taskbar Styler.txt └── YASB ├── .keep ├── config.yaml └── styles.css /README.md: -------------------------------------------------------------------------------- 1 | Preview 2 | 3 | ![Screenshot 2024-07-07 091742](https://github.com/user-attachments/assets/2e655a11-ad16-4e7b-b116-312d36118013) 4 | ![Screenshot 2024-07-07 091753](https://github.com/user-attachments/assets/dd3e8c01-1165-487a-9ff4-2a7ba04a257f) 5 | -------------------------------------------------------------------------------- /Windhawk/Taskbar Clock Customization.txt: -------------------------------------------------------------------------------- 1 | { 2 | "ShowSeconds": 0, 3 | "TimeFormat": "HH':'mm'", 4 | "DateFormat": "ddd',' dd MMM yyyy", 5 | "WeekdayFormat": "dddd", 6 | "TopLine": "", 7 | "BottomLine": "%date% | %time% ", 8 | "MiddleLine": "%weekday%", 9 | "TooltipLine": "%web1_full%", 10 | "Width": 180, 11 | "Height": 60, 12 | "TextSpacing": 1, 13 | "WebContentsItems[0].Url": "https://feeds.bbci.co.uk/news/world/rss.xml", 14 | "WebContentsItems[0].BlockStart": "", 15 | "WebContentsItems[0].Start": "<![CDATA[", 16 | "WebContentsItems[0].End": "]]>", 17 | "WebContentsItems[0].MaxLength": 28, 18 | "WebContentsUpdateInterval": 10, 19 | "TimeStyle.Visible": 0, 20 | "TimeStyle.TextColor": "", 21 | "TimeStyle.TextAlignment": "", 22 | "TimeStyle.FontSize": 0, 23 | "TimeStyle.FontFamily": "", 24 | "TimeStyle.FontWeight": "", 25 | "TimeStyle.FontStyle": "", 26 | "TimeStyle.FontStretch": "", 27 | "TimeStyle.CharacterSpacing": 0, 28 | "DateStyle.TextColor": "", 29 | "DateStyle.TextAlignment": "", 30 | "DateStyle.FontSize": 12, 31 | "DateStyle.FontFamily": "", 32 | "DateStyle.FontWeight": "Normal", 33 | "DateStyle.FontStyle": "", 34 | "DateStyle.FontStretch": "", 35 | "DateStyle.CharacterSpacing": 0, 36 | "oldTaskbarOnWin11": 0 37 | } -------------------------------------------------------------------------------- /Windhawk/Taskbar Labels for Windows 11.txt: -------------------------------------------------------------------------------- 1 | { 2 | "taskbarItemWidth": 0, 3 | "minimumTaskbarItemWidth": 0, 4 | "maximumTaskbarItemWidth": 200, 5 | "runningIndicatorStyle": "fullWidth", 6 | "progressIndicatorStyle": "sameAsRunningIndicatorStyle", 7 | "fontSize": 12, 8 | "leftAndRightPaddingSize": 12, 9 | "spaceBetweenIconAndLabel": 8, 10 | "labelForSingleItem": "%name%", 11 | "labelForMultipleItems": "[%amount%] %name%" 12 | } -------------------------------------------------------------------------------- /Windhawk/Taskbar height and icon size.txt: -------------------------------------------------------------------------------- 1 | { 2 | "IconSize": 20, 3 | "TaskbarHeight": 48, 4 | "TaskbarButtonWidth": 44 5 | } -------------------------------------------------------------------------------- /Windhawk/Windows 11 Notification Center Styler.txt: -------------------------------------------------------------------------------- 1 | { 2 | "theme": "", 3 | "controlStyles[0].target": "Grid#NotificationCenterGrid", 4 | "controlStyles[0].styles[0]": "Shadow:=", 5 | "resourceVariables[0].variableKey": "", 6 | "resourceVariables[0].value": "", 7 | "controlStyles[1].target": "Grid#CalendarCenterGrid", 8 | "controlStyles[1].styles[0]": "Shadow:=", 9 | "controlStyles[2].target": "Grid#MediaTransportControlsRegion", 10 | "controlStyles[2].styles[0]": "Shadow:=", 11 | "controlStyles[3].target": "Grid#ControlCenterRegion", 12 | "controlStyles[3].styles[0]": "Shadow:=", 13 | "controlStyles[4].target": "Grid#ThumbnailImage", 14 | "controlStyles[4].styles[0]": "CornerRadius=5", 15 | "controlStyles[4].styles[1]": "Grid.Column=0", 16 | "controlStyles[4].styles[2]": "Margin=0,0,0,0", 17 | "controlStyles[5].target": "StackPanel#PrimaryAndSecondaryTextContainer", 18 | "controlStyles[5].styles[0]": "Margin=160,-10,0,0", 19 | "controlStyles[4].styles[3]": "Height=135", 20 | "controlStyles[4].styles[4]": "Width=135", 21 | "controlStyles[6].target": "Windows.UI.Xaml.Controls.ListView#MediaButtonsListView", 22 | "controlStyles[7].target": "Grid#MediaTransportControlsRegion", 23 | "controlStyles[7].styles[0]": "Height=192", 24 | "controlStyles[6].styles[0]": "HorizontalAlignment=2", 25 | "controlStyles[6].styles[1]": "VerticalAlignment=0", 26 | "controlStyles[6].styles[2]": "Margin=60,-30,-10,0", 27 | "controlStyles[8].target": "Windows.UI.Xaml.Controls.Image#IconImage", 28 | "controlStyles[8].styles[0]": "Visibility=Collapsed", 29 | "controlStyles[9].target": "Windows.UI.Xaml.Controls.TextBlock#AppNameText", 30 | "controlStyles[9].styles[0]": "Margin=160,0,0,-40" 31 | } -------------------------------------------------------------------------------- /Windhawk/Windows 11 Start Menu Styler.txt: -------------------------------------------------------------------------------- 1 | { 2 | "controlStyles[0].target": "Windows.UI.Xaml.Controls.Grid#UndockedRoot", 3 | "controlStyles[0].styles[0]": "Visibility=Visible", 4 | "controlStyles[0].styles[1]": "MaxWidth=700", 5 | "controlStyles[0].styles[2]": "Margin=232,0,0,0", 6 | "controlStyles[1].target": "Windows.UI.Xaml.Controls.Grid#AllAppsRoot", 7 | "controlStyles[1].styles[0]": "Visibility=Visible", 8 | "controlStyles[1].styles[1]": "Width=322", 9 | "controlStyles[1].styles[2]": "Transform3D:=", 10 | "controlStyles[2].target": "Windows.UI.Xaml.Controls.Button#CloseAllAppsButton", 11 | "controlStyles[2].styles[0]": "Visibility=Collapsed", 12 | "controlStyles[3].target": "StartDocked.StartSizingFrame", 13 | "controlStyles[3].styles[0]": "MinWidth=776", 14 | "controlStyles[3].styles[1]": "MaxWidth=776", 15 | "controlStyles[4].target": "Windows.UI.Xaml.Controls.Grid#ShowMoreSuggestions", 16 | "controlStyles[4].styles[0]": "Visibility=Collapsed", 17 | "controlStyles[5].target": "Windows.UI.Xaml.Controls.Button#ShowAllAppsButton", 18 | "controlStyles[5].styles[0]": "Visibility=Collapsed", 19 | "controlStyles[6].target": "Windows.UI.Xaml.Controls.GridView#RecommendedList > Windows.UI.Xaml.Controls.Border > Windows.UI.Xaml.Controls.ScrollViewer#ScrollViewer > Windows.UI.Xaml.Controls.Border#Root > Windows.UI.Xaml.Controls.Grid > Windows.UI.Xaml.Controls.ScrollContentPresenter#ScrollContentPresenter > Windows.UI.Xaml.Controls.ItemsPresenter > Windows.UI.Xaml.Controls.ItemsWrapGrid > Windows.UI.Xaml.Controls.GridViewItem", 20 | "controlStyles[6].styles[0]": "MaxWidth=220", 21 | "controlStyles[6].styles[1]": "MinWidth=220", 22 | "controlStyles[7].target": "StartDocked.AllAppsGridListView#AppsList", 23 | "controlStyles[7].styles[0]": "Padding=48,3,-36,32", 24 | "controlStyles[8].target": "Windows.UI.Xaml.Controls.Grid#AllAppsPaneHeader", 25 | "controlStyles[8].styles[0]": "Margin=97,0,0,0", 26 | "controlStyles[9].target": "Windows.UI.Xaml.Controls.Grid#SuggestionsParentContainer", 27 | "controlStyles[9].styles[0]": "Height=168", 28 | "controlStyles[10].target": "StartDocked.NavigationPaneView#NavigationPane", 29 | "controlStyles[10].styles[0]": "FlowDirection=1", 30 | "controlStyles[10].styles[1]": "Margin=30,0,30,0", 31 | "controlStyles[11].target": "StartDocked.PowerOptionsView#PowerButton", 32 | "controlStyles[11].styles[0]": "FlowDirection=0", 33 | "controlStyles[12].target": "Windows.UI.Xaml.Controls.ItemsStackPanel", 34 | "controlStyles[12].styles[0]": "FlowDirection=1", 35 | "controlStyles[13].target": "Windows.UI.Xaml.Controls.ListViewItem", 36 | "controlStyles[13].styles[0]": "FlowDirection=0", 37 | "controlStyles[14].target": "Windows.UI.Xaml.Controls.ItemsStackPanel > Windows.UI.Xaml.Controls.ListViewItem", 38 | "controlStyles[14].styles[0]": "FlowDirection=0", 39 | "controlStyles[15].target": "StartDocked.SearchBoxToggleButton#StartMenuSearchBox", 40 | "controlStyles[15].styles[0]": "Margin=23,1,23,14", 41 | "controlStyles[16].target": "Windows.UI.Xaml.Controls.TextBlock#NoSuggestionsWithoutSettingsLink", 42 | "controlStyles[16].styles[0]": "Margin=11,0,48,0", 43 | "controlStyles[17].target": "StartDocked.LauncherFrame > Windows.UI.Xaml.Controls.Grid#RootGrid > Windows.UI.Xaml.Controls.Grid#RootContent > Windows.UI.Xaml.Controls.Grid#MainContent > Windows.UI.Xaml.Controls.Grid#InnerContent > Windows.UI.Xaml.Shapes.Rectangle", 44 | "controlStyles[17].styles[0]": "Margin=67,7,0,21", 45 | "controlStyles[18].target": "Windows.UI.Xaml.Controls.Border#DropShadow", 46 | "controlStyles[18].styles[0]": "Shadow:=", 47 | "controlStyles[19].styles[0]": "Shadow:=", 48 | "controlStyles[19].target": "Windows.UI.Xaml.Controls.Border#dropshadow", 49 | "controlStyles[20].target": "Windows.UI.Xaml.Controls.Border#BorderElement", 50 | "controlStyles[20].styles[0]": "CornerRadius=5", 51 | "controlStyles[21].target": "Windows.UI.Xaml.Controls.Border#TaskbarSearchBackground", 52 | "controlStyles[21].styles[0]": "CornerRadius=5" 53 | } -------------------------------------------------------------------------------- /Windhawk/Windows 11 Taskbar Styler.txt: -------------------------------------------------------------------------------- 1 | { 2 | "controlStyles[0].target": "Rectangle#BackgroundFill", 3 | "controlStyles[0].styles[0]": "Fill=Transparent", 4 | "controlStyles[1].target": "Taskbar.TaskListLabeledButtonPanel@CommonStates > Border#BackgroundElement", 5 | "controlStyles[1].styles[0]": "CornerRadius=5", 6 | "controlStyles[1].styles[1]": "Background@InactivePointerOver:=", 7 | "controlStyles[1].styles[2]": "Background@ActivePointerOver=Transparent", 8 | "controlStyles[1].styles[3]": "Background:=", 9 | "controlStyles[1].styles[4]": "Background@ActivePressed:=", 10 | "controlStyles[1].styles[5]": "Background@InactivePressed:=", 11 | "controlStyles[1].styles[6]": "Background@ActiveNormal:=", 12 | "controlStyles[1].styles[7]": "Margin=1", 13 | "controlStyles[2].target": "Taskbar.TaskListButtonPanel@CommonStates > Border#BackgroundElement", 14 | "controlStyles[2].styles[0]": "CornerRadius=5", 15 | "controlStyles[2].styles[1]": "Background:=", 16 | "controlStyles[2].styles[2]": "Background@InactivePointerOver:=", 17 | "controlStyles[2].styles[3]": "Background@ActivePointerOver:=", 18 | "controlStyles[2].styles[4]": "Background@ActiveNormal=:=", 19 | "controlStyles[2].styles[5]": "Background@InactivePressed:=", 20 | "controlStyles[2].styles[6]": "Background@ActivePressed:=", 21 | "controlStyles[3].target": "Grid#SystemTrayFrameGrid", 22 | "controlStyles[3].styles[0]": "Background:=", 23 | "controlStyles[3].styles[1]": "CornerRadius=5", 24 | "controlStyles[3].styles[2]": "Margin=0,5,14,5", 25 | "controlStyles[3].styles[3]": "Padding=10,0,0,0", 26 | "controlStyles[4].target": "Rectangle#RunningIndicator", 27 | "controlStyles[4].styles[0]": "Fill:=", 28 | "controlStyles[4].styles[1]": "RadiusX=5", 29 | "controlStyles[4].styles[2]": "RadiusY=5", 30 | "controlStyles[4].styles[3]": "Height=38", 31 | "controlStyles[4].styles[4]": "Width=40", 32 | "controlStyles[5].target": "Taskbar.TaskListLabeledButtonPanel > TextBlock#LabelControl", 33 | "controlStyles[5].styles[0]": "Margin=4,0,0,0", 34 | "controlStyles[5].styles[1]": "Foreground=White", 35 | "controlStyles[6].target": "Taskbar.SearchBoxButton", 36 | "controlStyles[6].styles[0]": "Foreground=White", 37 | "controlStyles[6].styles[1]": "Margin=-11,0,0,0", 38 | "controlStyles[7].target": "TextBlock#SearchBoxTextBlock", 39 | "controlStyles[7].styles[0]": "FontSize=12", 40 | "controlStyles[7].styles[1]": "Foreground=White", 41 | "controlStyles[8].target": "Rectangle#BackgroundStroke", 42 | "controlStyles[8].styles[0]": "Fill=Transparent", 43 | "controlStyles[9].target": "Grid", 44 | "controlStyles[9].styles[0]": "RequestedTheme=2", 45 | "controlStyles[10].target": "Taskbar.TaskListButton#TaskListButton[AutomationProperties.Name=Copilot] > Taskbar.TaskListLabeledButtonPanel#IconPanel > Border#BackgroundElement", 46 | "controlStyles[10].styles[0]": "Background:=", 47 | "controlStyles[11].target": "Border#BackgroundBorder", 48 | "controlStyles[11].styles[0]": "Margin=0,3,0,3", 49 | "controlStyles[11].styles[1]": "CornerRadius=5", 50 | "controlStyles[12].target": "Taskbar.AugmentedEntryPointButton#AugmentedEntryPointButton > Taskbar.TaskListButtonPanel#ExperienceToggleButtonRootPanel > Border#BackgroundElement@CommonStates", 51 | "controlStyles[12].styles[0]": "Background@InactivePointerOver:=", 52 | "controlStyles[12].styles[1]": "Background:=", 53 | "controlStyles[13].target": "Border#MultiWindowElement", 54 | "controlStyles[13].styles[0]": "Background:=", 55 | "controlStyles[14].target": "TextBlock#TimeInnerTextBlock", 56 | "controlStyles[14].styles[0]": "Foreground=White", 57 | "controlStyles[15].target": "TextBlock#DateInnerTextBlock", 58 | "controlStyles[15].styles[0]": "Foreground=White", 59 | "controlStyles[16].target": "SystemTray.TextIconContent > Grid > SystemTray.AdaptiveTextBlock#Base > TextBlock", 60 | "controlStyles[16].styles[0]": "Foreground=White", 61 | "controlStyles[17].target": "Border#BackgroundElement", 62 | "controlStyles[17].styles[0]": "BorderThickness=0", 63 | "controlStyles[18].target": "Taskbar.AugmentedEntryPointButton#AugmentedEntryPointButton", 64 | "controlStyles[18].styles[0]": "Margin=-11,0,0,0", 65 | "controlStyles[19].target": "Taskbar.ExperienceToggleButton#LaunchListButton[AutomationProperties.Name=Task View] ", 66 | "controlStyles[19].styles[0]": "Margin=-12,0,0,0", 67 | "controlStyles[20].target": "Border#OverflowFlyoutBackgroundBorder", 68 | "controlStyles[20].styles[0]": "Shadow:=" 69 | } -------------------------------------------------------------------------------- /YASB/.keep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /YASB/config.yaml: -------------------------------------------------------------------------------- 1 | # Configuration for Yasb (Yet Another Status Bar) 2 | # Author: @denBot 3 | # Last updated: 21/08/2023 4 | 5 | # General Bar Configuration Notes: 6 | # - All bars must be defined in within the `bars` section 7 | # - Each bar configuration should be defined using a name, e.g. 'yasb-bar', 'my-awesome-bar', etc. 8 | # - Default bar options can be found at: https://github.com/denBot/yasb/blob/main/src/core/validation/bar.py#L1-L10 9 | 10 | # General Widget Configuration Notes: 11 | # - ALL configured widgets must be defined in within the `widgets` section of this config file 12 | # - Each wid easiget configuration should be allocated a unique name, e.g. 'my-widget', 'my-custom-clock', etc. 13 | # > This makes iter for you to keep track of your configured widgets and add them to your bar(s) 14 | # - Each widget should specify a widget `type` - this points to the python class of the widget you are configuring 15 | # > For example: type: "yasb.clock.ClockWidget" 16 | # - Each widget supports mouse event callback functionality (left, middle, right click). 17 | # > The callbacks "do_nothing" and "exec" can be used across any widget which allows them. 18 | # > "exec" allows you to run programs from the command-line, where each argument is separated by a space 19 | # > "do_nothing" allows you to override default mouse events to do nothing 20 | # > "toggle_label" *some widgets* allow you to toggle between two label formats 21 | # - Example callbacks: 22 | # on_left: "exec wt.exe" -- run the windows terminal when the widget is left-clicked 23 | # on_middle: "do_nothing" -- overrides default widget middle-click behaviour to do nothing 24 | # on_right: "exec cmd /c Taskmg" -- open the task manager when the widget is right-clicked 25 | 26 | 27 | # bars: 28 | # ^ a list of your bar configurations 29 | # yasb-bar: 30 | # ^ the name of your bar 31 | # enabled: true 32 | # ^ Specify if the bar configuration should be loaded by yasb 33 | # screens: ['*'] 34 | # ^ A list of screen names which the bar should be displayed on 35 | # Accepts: a list of screen names 36 | # Example: [ "\\.\DISPLAY1", "eDP-1", "HDMI-1" ] 37 | # Wildcard '*' is used to show the bar on all screens 38 | # class_name: 'yab-bar' 39 | # ^ The CSS class name used to style the bar and all of its children (widgets). 40 | # alignment: 41 | # ^ alignment options are configured here 42 | # position: 'top' or 'bottom' 43 | # ^ The vertical positioning of the bar on the screen 44 | # center: false 45 | # ^ Specify if the bar should be horizontally centered on the screen. 46 | # window_flags: 47 | # ^ special window flags can be enabled here 48 | # always_on_top: false 49 | # ^ Forces all windows of lower window levels underneath the bar (even in full-screen). 50 | # windows_app_bar: false 51 | # ^ Exclusively reserve the desktop workspace area behind the bar, just like the Windows Taskbar. 52 | # dimensions: 53 | # ^ the dimensions of the bar can be set here 54 | # width: "100%" 55 | # ^ The width of the bar (in percentage or pixels). Accepts: string (percentage) or positive integer (pixels) # height: 30 56 | # ^ The height of the bar (in pixels). Accepts: positive integer (pixels e.g. 20) 57 | # offset: 58 | # x: 0 59 | # ^ The x-axis positioning offset of the bar. Accepts: integer 60 | # y: 0 61 | # ^ The y-axis positioning offset of the bar. Accepts: integer 62 | # widgets: 63 | # left: [] 64 | # ^ A list of widget names to be placed on the left side of the bar. Accepts: list of strings (widget names / types) 65 | # center: [] 66 | # ^ A list of widget names to be placed at the center of the bar. Accepts: list of strings (widget names / types) 67 | # right: [] 68 | # ^ A list of widget names to be placed on the right side of the bar. Accepts: list of strings (widget names / types) 69 | 70 | watch_stylesheet: true 71 | watch_config: true 72 | 73 | bars: 74 | yasb-bar: 75 | enabled: true 76 | screens: ['*'] 77 | class_name: "yasb-bar" 78 | alignment: 79 | position: "top" 80 | center: false 81 | blur_effect: 82 | enabled: false 83 | acrylic: false 84 | dark: false 85 | window_flags: 86 | always_on_top: false 87 | windows_app_bar: true 88 | dimensions: 89 | width: "100%" 90 | height: 40 91 | padding: 92 | top: 7 93 | left: 6 94 | bottom: 0 95 | right: 7 96 | widgets: 97 | left: ["active_window", "komorebi_workspaces", "komorebi_active_layout"] 98 | center: [] 99 | right: ["traffic"] 100 | 101 | # widgets: 102 | # my-clock-widget: 103 | # type: "yasb.clock.ClockWidget" 104 | # options: 105 | # label: "{%H:%M:%S}" 106 | # ^ The label format of the widget. Accepts: string with datetime format enclosed between curly brackets 107 | # ^ Label format options: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes 108 | # label_alt: "{%d-%m-%y %H:%M:%S}" 109 | # ^ The alternate label format of the widget. Accepts: string with datetime format enclosed between curly brackets 110 | # update_interval: 1000 111 | # ^ The interval at which the widget will update itself. Accepts: positive integer (number of milliseconds) 112 | # timezones: [] 113 | # ^ A list of timezones to switch between. Accepts: list of strings (e.g. Europe/London, America/New_York) 114 | # ^ Options: https://timezonedb.com/time-zones ('Time Zone' strings) 115 | # callbacks: 116 | # on_left: "toggle_label" - toggles between the clock and alternate clock labels 117 | # on_middle: "do_nothing" 118 | # on_right: "next_timezone" - cycles the next timezone to be shown by the clock 119 | 120 | # memory-widget: 121 | # type: "yasb.memory.MemoryWidget" 122 | # options: 123 | # label: "\uf538 {virtual_mem_free}/{virtual_mem_total}" 124 | # ^ The format label for the widget. Accepts: string containing any of the below format options: 125 | # {virtual_mem_free} : The amount of free virtual memory 126 | # {virtual_mem_percent} : The percentage of free virtual memory 127 | # {virtual_mem_total} : The amount of total virtual memory 128 | # {virtual_mem_avail} : The amount of total available virtual memory 129 | # {swap_mem_free} : The amount of free swap memory 130 | # {swap_mem_percent} : The percentage of free swal memory 131 | # {swap_mem_total} : The amount of total swap memory 132 | # label_alt: "\uf538 VIRT: {virtual_mem_percent}% SWAP: {swap_mem_percent}%" 133 | # ^ The alternate format label for the widget. Accepts: string containing any of the above format options 134 | # update_interval: 1000 135 | # ^ The interval at which the widget will update itself. Accepts: positive integer (number of milliseconds) 136 | # memory_thresholds: All options accept a positive integer between 0 and 100 137 | # low: 25 138 | # ^ The percentage at which the .status-low CSS class is applied. Accepts integer from 0 to 100 139 | # medium: 50 140 | # ^ The percentage at which the .status-medium CSS class is applied. Accepts integer from 0 to 100 141 | # high: 90 142 | # ^ The percentage at which the .status-high CSS class is applied. Accepts integer from 0 to 100 143 | # callbacks: 144 | # on_left: "toggle_label" - toggles between the clock and alternate clock labels 145 | # on_middle: "do_nothing" 146 | # on_right:" "do_nothing" 147 | 148 | # battery-widget: 149 | # type: "yasb.battery.BatteryWidget" 150 | # options: 151 | # label: "{icon}" 152 | # ^ The format label for the widget. Accepts: string containing any of the below format options 153 | # {percent} : The current battery percentage 154 | # {time_remaining} : The estimated battery duration remaining 155 | # {is_charging} : The boolean charging status 156 | # {icon} : The battery status icon 157 | # label_alt: "{percent}% | remaining: {time_remaining}" 158 | # ^ The alternate format label for the widget. Accepts: string 159 | # update_interval: 1000 160 | # ^ The interval at which the widget will update itself. Accepts: positive integer 161 | # charging_options: 162 | # icon_format: "{charging_icon} {icon}" 163 | # ^ The charging icon positio bn relative to theattery icon. Accepts string containing {charging_icon} and {icon} 164 | # blink_charging_icon: True 165 | # ^ Specify if the charging icon should blink at each update interval period 166 | # status_thresholds: 167 | # critical: 10 168 | # ^ The percentage at which the .status-critical CSS class is applied Accepts: integer from 0 to 100 169 | # low: 25 170 | # ^ The max percentage at which the .status-low CSS class is applied Accepts: integer from 0 to 100 171 | # medium: 75 172 | # ^ The max percentage at which the .status-medium CSS class is applied Accepts: integer from 0 to 100 173 | # high: 95 174 | # ^ The max percentage at which the .status-high CSS class is applied Accepts: integer from 0 to 100 175 | # full: 100 176 | # ^ The max percentage at which the .status-full CSS class is applied. Accepts: integer from 0 to 100 177 | # status_icons: 178 | # icon_charging: "\uf0e7" 179 | # ^ The icon shown when the battery is charging. Accepts: string 180 | # icon_critical: "\uf244" 181 | # ^ The icon shown when critical battery status threshold is reached 182 | # icon_low: "\uf243" 183 | # ^ The icon shown when low battery status threshold is reached 184 | # icon_medium: "\uf242" 185 | # ^ The icon shown when medium status threshold is reached 186 | # icon_high: "\uf241" 187 | # ^ The icon shown when high status threshold is reached 188 | # icon_full: "\uf240" 189 | # ^ The icon shown when full status threshold is reached 190 | # callbacks: 191 | # on_left: "toggle_label" - toggles between the clock and alternate clock labels 192 | # on_middle: "do_nothing" 193 | # on_right: "do_nothing" 194 | 195 | # cpu-widget: 196 | # type: "yasb.cpu.CpuWidget" 197 | # options: 198 | # label: "{info[histograms][cpu_percent]}" 199 | # ^ The format label for the widget. Accepts: string containing any of the below format options 200 | # {info[cores][physical]} - The total number of physical cores available to the system 201 | # {info[cores][total]} - The total number of cores available to the system 202 | # {info[freq][min]} - The minimum possible frequency of the CPU 203 | # {info[freq][max]} - The maximum possible frequency of the CPU 204 | # {info[freq][current]} - The current frequency of the CPU 205 | # {info[stats][context_switches]} - The number of context switches performed since boot 206 | # {info[stats][interrupts] - The number of interrupts performed since boot 207 | # {info[stats][soft_interrupts] - The number of soft interrupts performed since boot 208 | # {info[stats][sys_calls] - The number of system calls performed since boot 209 | # {info[histograms][cpu_freq] - A unicode histogram representation of the lat N CPU frequency readings 210 | # {info[histograms][cpu_percent] - A unicode histogram representation of the last N CPU percent readings 211 | # {info[histograms][cores] - A unicode histogram representation of the percentage of all system CPU cores 212 | # label_alt: "{percent}% | remaining: {time_remaining}" 213 | # ^ The alternate format label for the widget. Accepts: string 214 | # update_interval: 1000 215 | # ^ The interval at which the CPU widget will update. Accepts: positive integer 216 | # histogram_icons: 217 | # ^ The unicode characters used to represent CPU the frequency/percentage histogram data. Accepts: list of 9 unicode strings. 218 | # ^ Note: the below unicode characters require the following graph bars font: https://github.com/and3rson/graph-bars-font 219 | # - ' ' # 0% 220 | # - '\u2581' # 10% 221 | # - '\u2582' # 20% 222 | # - '\u2583' # 30% 223 | # - '\u2584' # 40% 224 | # - '\u2585' # 50% 225 | # - '\u2586' # 60% 226 | # - '\u2587' # 70% 227 | # - '\u2588' # 80%+ 228 | # histogram_num_columns: 10 229 | # ^ The number of columns displayed for each generated histogram. Accepts: positive integer between 0 and 128. 230 | # callbacks: 231 | # on_left: "toggle_label" - toggles between the cpu and alternate cpu labels 232 | # on_middle: "do_nothing" 233 | # on_right: "do_nothing" 234 | 235 | # active-window-widget: 236 | # type: "yasb.active_window.ActiveWindowWidget" 237 | # options: 238 | # label: "{win[title]}" 239 | # ^ The format label for the widget. Accepts: string containing any of the below {win} format options 240 | # win[hwnd] - the hwnd of the active window 241 | # win[event] - the event which focused the active window 242 | # win[title] - the active window title 243 | # win[class_name] - the active window class_name 244 | # win[monitor_hwnd] - the hwnd of the monitor displaying the application 245 | # win[monitor_info][rect][x,y,width,height] - the dimensions of the screen 246 | # win[monitor_info][rect_work_area][x,y,width,height] - the dimensions of the screen work area 247 | # win[monitor_info][flags] - the flags assocaited with the screen 248 | # win[monitor_info][device] - the device name of the screen 249 | # win[process][name] - the name of the active window process 250 | # win[process][pid] - the process id of the parent process 251 | # win[process][ppid] - the parent process id 252 | # win[process][cpu_num] - the number of CPUs being used 253 | # win[process][cpu_percent] - the window cpu usage in percent 254 | # win[process][mem_percent] - the window memory usage in percent 255 | # win[process][num_threads] - the windows number of threads in use 256 | # win[process][username] - the username of the user executing the window process 257 | # win[process][status] - the status of the process 258 | # label_alt: "[class_name='{win[class_name]}' exe='{win[process][name]}' hwnd={win[hwnd]}]" 259 | # ^ The format label for the widget. Accepts: string containing any of the above {win} format options 260 | # label_no_window: "" 261 | # ^ The label shown when no window is active. Accepts: string 262 | # max_length: None 263 | # ^ The max length of the active window label. Accepts: positive integer or None 264 | # max_length_ellipsis: "..." 265 | # ^ The ellipsis string used when truncating the window label if it exceeds the max length. Accepts: string 266 | # monitor_exclusive: true 267 | # ^ Specifies if the active window title should be shown on all bars, or exclusively for the bars on the active window screen 268 | # ignore_window: 269 | # class: [] 270 | # ^ A list of class_names the widget should ignore. Accepts: list of strings 271 | # process: [] 272 | # ^ A list of process names the widget should ignore. Accepts: list of strings 273 | # titles: 274 | # ^ A list of titles the widget should ignore. Accepts: list of strings 275 | # callbacks: 276 | # on_left: "toggle_label" - toggles between the clock and alternate clock labels 277 | # on_middle: "do_nothing" 278 | # on_right: "do_nothing" 279 | 280 | # komorebi_workspaces: 281 | # type: "komorebi.workspaces.WorkspacesWidget" 282 | # options: 283 | # label_offline: "Komorebi Offline" 284 | # ^ The message shown when YASB cannot connect with the komorebi window manager. Accepts: string 285 | # label_workspace_btn: "{index}" 286 | # ^ The label format for all workspace buttons. Accepts: string. 287 | # Format options: {name}, {index}, {monitor_index} 288 | # label_default_name: "{index}" 289 | # ^ The default name value used if no workspace name is set via Komorebi. Accepts: string 290 | # Format options: {index}, {monitor_index} 291 | # label_zero_index: false 292 | # ^ Specifies if the workspace and monitor index values should be zero-indexed. Accepts: boolean 293 | # hide_empty_workspaces: False 294 | # ^ Specifies if empty workspaces should be shown in the list of komorebi workspaces. Accepts: boolean 295 | 296 | # komorebi_active_layout: 297 | # type: "komorebi.active_layout.ActiveLayoutWidget" 298 | # options: 299 | # hide_if_offline: false 300 | # ^ Specifies if the active layout label should be shown when komorebi is offline 301 | # label: "{icon}" 302 | # ^ The label shown when an active layout change is detected. Accepts: string containing format options {icon} and {layout_name} 303 | # layout_icons: 304 | # bsp: "[\\]" 305 | # columns: "[||]" 306 | # rows: "[---]" 307 | # vertical_stack: "[]=" 308 | # horizontal_stack: "H/=" 309 | # ultrawide_vertical_stack: "[|]=" 310 | # monocle: "[M]" 311 | # maximised: "[X]" 312 | # floating: "><>" 313 | # paused: "|P|" 314 | # callbacks 315 | # ^ callback options include: 316 | # "next_layout" - Cycles the next layout for the active workspace 317 | # "prev_layout" - Cycles the previous layout for the active workspace 318 | # "flip_layout" - Flips layout of active workspace. Works for BSP tiling mode only 319 | # "toggle_tiling" - Toggles tiling of all windows for the active workspace 320 | # "toggle_float" - Toggles floating of active window for current workspace 321 | # "toggle_monocle" - Toggles monocle mode for active window for current workspace 322 | # "toggle_maximise" - Toggles maximising active window for current workspace 323 | # "toggle_pause" - Toggles pausing komorebi on/off for all workspaces 324 | # on_left: "next_layout" 325 | # on_middle: "toggle_monocle" 326 | # on_right: "prev_layout" 327 | 328 | # custom-weather-widget-example: 329 | # type: "yasb.clock.CustomWidget" 330 | # options: 331 | # label: "Temperature: {data[current][temp]}°" 332 | # ^ The format label for the custom widget. Accepts: string containing {data} format options. Required field. 333 | # If the command executed returns a JSON structure, 334 | # the JSON object can be used within the format label using the python dictionary string formatting syntax. 335 | # - data = "curl.exe wttr.in/..." 336 | # - data = {"current_condition": [{"temp_C":16, "humidity":71}], ...} 337 | # label_alt: "Temperature: {data[current_condition][0][temp_C]}%" 338 | # ^ The alternate format label for the clock. Accepts: string containing {data} format options. Required field. 339 | # label_max_length: None 340 | # ^ The maximum length of the label. Accepts: positive integer 341 | # class_name: 'my-weather-widget' 342 | # ^ The CSS class name of the custom widget. Accepts: string. Required field. 343 | # icon: 344 | # position: "left" 345 | # ^ The position of the icon relative to the widget label. Accepts: string 'left' or 'right' 346 | # label: None 347 | # ^ The contents of the icon. Accepts: string e.g. a unicode character / emoji. Required field. 348 | # exec_options: 349 | # run_cmd: "curl.exe api.openweathermap.org/data/2.5/weather?q=Glasgow&units=metric&appid={YOUR_API_KEY_HERE}" 350 | # ^ The command to be executed by the custom widget's timer event. Accepts: string of command-line arguments. 351 | # run_once: False 352 | # ^ Specifies that the custom widget's timer event only run once on start-up. Accepts: boolean 353 | # run_interval: 30000 354 | # ^ The duration in which the custom widget's timer event will fire. Accepts: positive integer (milliseconds) 355 | # run_format: "json" 356 | # ^ The format of the data written to stdout by the command-line program. Accepts: strings 'string' or 'json' 357 | # callbacks: 358 | # on_left: "toggle_label" - toggles between the clock and alternate clock labels 359 | # on_middle: "do_nothing" 360 | # on_right: "do_nothing" 361 | 362 | widgets: 363 | active_window: 364 | type: "yasb.active_window.ActiveWindowWidget" 365 | options: 366 | label: "{win[title]}" 367 | label_alt: "[class_name='{win[class_name]}' exe='{win[process][name]}' hwnd={win[hwnd]}]" 368 | label_no_window: "" 369 | max_length: 36 370 | max_length_ellipsis: "..." 371 | monitor_exclusive: true 372 | 373 | battery: 374 | type: "yasb.battery.BatteryWidget" 375 | options: 376 | time_remaining_natural: true 377 | label: "{percent}%" 378 | label_alt: "{icon} {time_remaining}" 379 | update_interval: 1000 380 | charging_options: 381 | icon_format: "{charging_icon} {icon}" 382 | blink_charging_icon: true 383 | callbacks: 384 | on_left: "toggle_label" 385 | on_middle: "do_nothing" 386 | on_right: "exec cmd.exe /c start ms-settings:batterysaver" 387 | 388 | 389 | clock: 390 | type: "yasb.clock.ClockWidget" 391 | options: 392 | label: "{%H:%M}" 393 | label_alt: "{%a %d/%m/%y %H:%M:%S %Z}" 394 | timezones: ["Europe/London", "America/New_York"] 395 | callbacks: 396 | on_middle: "exec explorer.exe shell:Appsfolder\\Microsoft.WindowsAlarms_8wekyb3d8bbwe!App" 397 | on_right: "next_timezone" 398 | 399 | cpu: 400 | type: "yasb.cpu.CpuWidget" 401 | options: 402 | label: "\uf200 {info[histograms][cpu_percent]}" 403 | label_alt: "\uf200 CPU: {info[percent][total]}% | freq: {info[freq][current]:.2f} Mhz" 404 | update_interval: 500 405 | histogram_icons: 406 | - '\u2581' # 0% 407 | - '\u2581' # 10% 408 | - '\u2582' # 20% 409 | - '\u2583' # 30% 410 | - '\u2584' # 40% 411 | - '\u2585' # 50% 412 | - '\u2586' # 60% 413 | - '\u2587' # 70% 414 | - '\u2588' # 80%+ 415 | histogram_num_columns: 10 416 | 417 | memory: 418 | type: "yasb.memory.MemoryWidget" 419 | options: 420 | label: "\uf538 {virtual_mem_free}" 421 | label_alt: "\uf538 {virtual_mem_percent}%" 422 | update_interval: 5000 423 | callbacks: 424 | on_right: "exec cmd /c Taskmgr" 425 | 426 | komorebi_workspaces: 427 | type: "komorebi.workspaces.WorkspaceWidget" 428 | options: 429 | label_offline: "Komorebi Offline" 430 | label_workspace_btn: "{index}" 431 | label_default_name: "{index}" 432 | label_zero_index: false 433 | hide_empty_workspaces: false 434 | 435 | komorebi_active_layout: 436 | type: "komorebi.active_layout.ActiveLayoutWidget" 437 | options: 438 | hide_if_offline: false 439 | label: "{icon}" 440 | layout_icons: 441 | bsp: " Change Layout " 442 | columns: " Change Layout " 443 | rows: " Change Layout " 444 | vertical_stack: " Change Layout " 445 | horizontal_stack: " Change Layout " 446 | ultrawide_vertical_stack: " Change Layout " 447 | monocle: " Change Layout " 448 | maximised: " Change Layout " 449 | floating: " Change Layout " 450 | paused: " Change Layout " 451 | callbacks: 452 | on_left: 'next_layout' 453 | on_middle: 'toggle_monocle' 454 | on_right: 'toggle_monocle' 455 | 456 | wifi: 457 | type: "yasb.wifi.WifiWidget" 458 | options: 459 | label: "{wifi_icon}" 460 | label_alt: "{wifi_icon} {wifi_name}" 461 | update_interval: 5000 462 | wifi_icons: 463 | - "\udb82\udd1f" # 0% strength (no wifi) 464 | - "\udb82\udd2b" # 1-25% strength 465 | - "\udb82\udd22" # 26-50% strength 466 | - "\udb82\udd25" # 51-75% strength 467 | - "\udb82\udd28t" # 76-100% strength. Alternate theming: \uf1eb 468 | callbacks: 469 | on_middle: "do_nothing" 470 | on_right: "exec cmd.exe /c start ms-settings:network" 471 | 472 | traffic: 473 | type: "yasb.traffic.TrafficWidget" 474 | options: 475 | label: "Download: {download_speed} | Upload: {upload_speed}" 476 | label_alt: "Download: {download_speed} | Upload: {upload_speed}" 477 | update_interval: 1000 # Update interval should be a multiple of 1000 478 | callbacks: 479 | on_right: "exec cmd /c Taskmgr" 480 | 481 | # Some custom widgets 482 | 483 | explorer_button: 484 | type: "yasb.custom.CustomWidget" 485 | options: 486 | label: "\uf07c" 487 | label_alt: "Explorer" 488 | class_name: "explorer-widget" 489 | exec_options: 490 | run_once: true 491 | callbacks: 492 | on_left: "exec explorer.exe" 493 | on_right: "toggle_label" 494 | 495 | ip_info: 496 | type: "yasb.custom.CustomWidget" 497 | options: 498 | label: "\uf3c5 {data[city]}, {data[region]}" 499 | label_alt: "\uf3c5 {data[ip]} [{data[country]}]" 500 | class_name: "ip-info-widget" 501 | exec_options: 502 | run_cmd: "curl.exe https://ipinfo.io" 503 | run_interval: 120000 # every 5 minutes 504 | return_format: "json" 505 | callbacks: 506 | on_left: "toggle_label" 507 | on_middle: "exec cmd /c ncpa.cpl" # open network settings 508 | on_right: "exec cmd /c start https://ipinfo.io/{data[ip]} " # open ipinfo in browser 509 | 510 | weather: 511 | type: "yasb.custom.CustomWidget" 512 | options: 513 | label: "\uf0c2 {data[current_condition][0][temp_C]}\u00b0c" 514 | label_alt: "\uf0c2 {data[current_condition][0][weatherDesc][0][value]}" 515 | class_name: "weather-widget" 516 | exec_options: 517 | run_cmd: "curl.exe wttr.in/Vancouver?format=j1" 518 | # run every hour 519 | run_interval: 3600000 520 | return_format: "json" 521 | 522 | -------------------------------------------------------------------------------- /YASB/styles.css: -------------------------------------------------------------------------------- 1 | 2 | * { 3 | /* Font used with icons is NerdFonts JetBrainsMono */ 4 | font-family: 'Sagoe UI', 'Bars'; 5 | font-size: 12px; 6 | color: #f2e5bc; 7 | } 8 | 9 | .bar { 10 | background: rgba(0, 0, 0, 0); 11 | border: none; 12 | padding: 5px 5px; 13 | } 14 | 15 | .container-right .widget { 16 | border-radius: 5px; 17 | } 18 | 19 | .container-right .widget * { 20 | color: #ff0000; 21 | } 22 | 23 | .komorebi-workspaces { 24 | margin-left: 0; 25 | font-family: "Sagoe UI"; 26 | } 27 | .ws-btn { 28 | padding: 8px 10px; 29 | background: rgba(0, 0, 0, 0.3); 30 | border: 0px solid rgba(0, 0, 0, 0.0); 31 | margin: 2px 2px; 32 | font-size: 12px; 33 | border-radius: 5px; 34 | font-family: "Sagoe UI"; 35 | color: #ffffff; 36 | } 37 | 38 | .ws-btn:hover { 39 | background: rgba(0, 0, 0, 0.7); 40 | } 41 | 42 | .ws-btn.active { 43 | background: rgba(0, 0, 0, 0.7); 44 | padding: 8px 20px; 45 | border: 0px solid rgba(95, 135, 185, 1) 46 | 47 | } 48 | 49 | .ws-btn.populated { 50 | color: #ffffff; 51 | padding: 8px 10px; 52 | background: rgba(0, 0, 0, 0.7); 53 | border: 0px solid rgba(0, 0, 0, 0.0); 54 | } 55 | 56 | .custom-widget { 57 | padding: 2px 6px; 58 | font-size: 14px; 59 | background: #bdae93; 60 | } 61 | .custom-widget .icon { 62 | font-size: 13px; 63 | } 64 | .custom-widget:hover { 65 | background: #fbf1c7; 66 | } 67 | .custom-widget .icon.icon-left { 68 | margin-right: 5px; 69 | } 70 | .custom-widget .icon.icon-right { 71 | margin-left: 5px; 72 | } 73 | .custom-widget.hostname-widget { 74 | background: #83a598; 75 | } 76 | 77 | .custom-widget.terminal-widget { 78 | font-size: 14px; 79 | } 80 | 81 | .cpu-widget .label, 82 | .wifi-widget .label, 83 | .memory-widget .label, 84 | .traffic-widget .label, 85 | .battery-widget .label { 86 | color: #ffffff; 87 | padding: 2px 5px; 88 | font-size: 13px; 89 | border-radius: 5px; 90 | } 91 | 92 | .traffic-widget { 93 | background: rgba(0, 0, 0, 0.7); 94 | border: 0px solid rgba(0, 0, 0, 0.0); 95 | margin: 2px 2px; 96 | border-radius: 5px; 97 | } 98 | 99 | .traffic-widget .label { 100 | color: #ffffff; 101 | } 102 | 103 | .wifi-widget .label { 104 | font-family: 'JetBrainsMono NF'; 105 | background: rgba(36, 51, 71, 0.3); 106 | } 107 | 108 | .cpu-widget .label { 109 | background: #d3869b; 110 | } 111 | 112 | .battery-widget .label { 113 | font-family: 'JetBrainsMono NF'; 114 | background: rgba(36, 51, 71, 0.3); 115 | } 116 | 117 | .battery-widget, 118 | .memory-widget { 119 | margin: 0; 120 | } 121 | 122 | .memory-widget .label.status-low { 123 | background: #689d6a; 124 | } 125 | .memory-widget .label.status-medium { 126 | background: #fe8019; 127 | } 128 | .memory-widget .label.status-high { 129 | background: #cc241d; 130 | } 131 | .active-window-widget { 132 | margin-left: 0px; 133 | } 134 | .active-window-widget .label { 135 | font-family: 'JetBrainsMono NF'; 136 | padding: -5px 7px 0 7px; 137 | color: #242424; 138 | background: #5e86bd; 139 | margin-bottom: -1px; 140 | border-radius: 3px; 141 | margin: 2px; 142 | } 143 | 144 | .komorebi-active-layout { 145 | padding: 0 0px 0px 0px; 146 | background: rgba(0, 0, 0, 0.7); 147 | border: 0px solid rgba(0, 0, 0, 0.0); 148 | margin: 2px 2px; 149 | font-size: 12px; 150 | border-radius: 5px; 151 | font-family: "Sagoe UI"; 152 | color: #ffffff; 153 | } 154 | 155 | .komorebi-active-layout:hover { 156 | background: rgba(0, 0, 0, 0.7); 157 | } 158 | 159 | .komorebi-active-layout .label { 160 | color: #ffffff; 161 | margin: 0px 0px; 162 | font-size: 12px; 163 | border: 0px solid rgba(0, 0, 0, 0.0); 164 | padding: 0 0px 0px 0px; 165 | font-family: 'Sagoe UI'; 166 | border-radius: 5px; 167 | background: rgba(0, 0, 0, 0.0); 168 | } 169 | 170 | .komorebi-active-layout .label:hover { 171 | background: rgba(0, 0, 0, 0.7); 172 | } 173 | 174 | .clock-widget .label { 175 | font-family: 'Sagoe UI'; 176 | color: #ffffff; 177 | margin: 8px 0; 178 | } 179 | --------------------------------------------------------------------------------