Giter Site home page Giter Site logo

da-rth / yasb Goto Github PK

View Code? Open in Web Editor NEW
1.1K 18.0 68.0 2.65 MB

A highly configurable cross-platform (Windows) status bar written in Python.

License: MIT License

Python 98.24% CSS 1.76%
statusbar taskbar python customisable configurable ricing wm topbar windowbar bar

yasb's Introduction

Yasb - Yet Another Status Bar

A highly configurable cross-platform (Windows) status bar written in Python.

What is it?

Yasb (Yet Another Status Bar) is a highly configurable status bar written in Python using the Qt6 GUI Framework. The current goal of yasb is to bring a polybar/waybar-style status bar to the Windows platform. However, as yasb is written in Python + Qt6, it is cross-platform capable. With some minor adjustments and OS-specific widgets, yasb can also be configured to run on both Linux and Mac OSX.

What can it look like?

Although yasb comes with default stylesheet and configuration files, the user is given complete control over how their status bar is structured and how it will look.

The config file allows for extensive configuration of one or more taskbars, whereas, the stylesheet used by yasb allows for complete control over how the bar and its nested widgets should look. Change everything from font and colours to rounded corners, padding and opacity.

For an example of the default bar configuration, see the image below:

Some interesting features:

  • Multi-monitor and monitor-exclusive taskbars
  • Multiple bars per monitor
  • Top, bottom and centred bar alignment
  • Full UI customisation via user-defined stylesheet
  • Extensive configuration via a user-defined configuration file
  • Config and stylesheet validation
  • Configurable taskbar widgets
    • Active Window Title (and other window information)
    • Battery Widget with customisable
    • Clock Widget with multi-time zone support
    • Custom (command line) Widgets with JSON parsing
    • Memory & CPU Monitor Widgets
    • Komorebi WM Workspace Widget
    • and more...

TODO List

  • Documentation (Wiki is WIP)
  • Automatic bar creation/deletion for screen connect/disconnect events
  • New top, left, bottom, right padding setting
  • Config/stylesheet auto-loading (via file watcher)
  • Window Blur effect
  • SCSS stylesheet support
  • Tray options for toggling bars on/off
  • Improve default CSS stylesheet
  • Media Player Widget - WIP
  • Disk Space Widget
  • Keyboard State Widget
  • Bluetooth(?) Widget
  • Volume Widget
  • Backlight Widget
  • Calendar Pop-up for Clock Widget

How do you run it?

What do I do if I've spotted a bug?

This project is still in early development... If you encounter any bugs, please submit an issue ๐Ÿ›

Note: Please include a log file along with steps to reproduce when submitting a bug report, it helps!

How do you configure it?

All taskbars can be configured in a user-defined YAML config file config.yaml located in either of the following directories:

  • C:/Users/{username}/.yasb/config.yaml
  • /path/to/yasb/src/config.yaml

All taskbars can also be styled using a configurable stylesheet styles.css:

  • C:/Users/{username}/.yasb/styles.css
  • /path/to/yasb/src/styles.css

NOTE: If either configuration file is not present in the user's $HOME/.yasb directory (or if they contain errors), the default config and stylesheet will be loaded instead. You may also be prompted with a popup error dialog showing which lines of code contain linting errors.

Troubleshooting

Why aren't icons being displayed correctly in my taskbar?

By default, yasb uses the Font Awesome 5 Free icon font. If this is not installed on your system, this is likely the reason why icons are not appearing correctly in your taskbar.

If you would like to use a different icon font, simply change the wildcard font-family CSS rule in the stylesheet file to your prefered icon font:

* {
    font-family: 'Courier New', 'Font Awesome 5 Free';
    font-size: 16px;
    ...
}

Why is the Komorebi Workspaces widget not working?

The Komorebi Workspace widget bundled with Yasb requires that you are running komorebi v0.18.0 or above. This is because previous komorebi versions do not support socket-based communication with external applications via Windows Named Pipes. If you are running an older version of komorebi, yasb will not be able to query komorebi for workspace information.

Note: Yasb executes komorebic.exe commands directly via the subprocess module. For this to work, you MUST have komoreb.exe and komorebic.exe added to your system PATH.

Contributions

Contributions to yasb are more than welcome. This project was started as an experiment and has blossomed into something I use every day. If you find good use out of this software but believe there are areas for improvement (of which there are likely many), please feel free to submit a Pull Request.

Development Environment

All you will need to get started is Python 3.9 or above.

Linting

The project is linted using pylama:

pip install pylama
python -m pylama
# or just  run 'pylama'
  • The linting tool is configured in pylama.ini
  • If you choose to contribute, please lint your code beforehand.

Commit Formatting and Pull Requests

yasb's People

Contributors

anodynous avatar bukington avatar da-rth avatar dependabot[bot] avatar frnkpsycho avatar izoslav avatar lufftre avatar ronddev avatar sendhil avatar sitiom avatar wiki-bird avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

yasb's Issues

[FEATURE] Always on top but hide when in fullscreen mode

What is the request?

I have recently learned of ElevenClock which replaces the system clock and is also written in Python. One interesting feature I found there is its ability to hide in fullscreen mode despite it being an always-on-top window sitting on top of the taskbar.
image

Why is it useful?

I remember you sent a yasb config that places the workspace indicator on the bottom where the taskbar is located.
image

However, for it to be unobtrusive, one would have to use TranslucentTB or RoundedTB (or both, which I do). Some people may not want this and want it to look integrated into the taskbar like how ElevenClock does.
image

How could it be implemented?

You may want to look at ElevenClock does it

komorebi integration can cause infinitely spawning komorebic.exe instances

I'm honestly not sure if this is a yasb, komorebi, or both problem but I have decided to put this issue here for the time being. Let me know if I should move it or if I can provide any additional information.

Under certain conditions yasb being connected to komorebi can cause an error that will produce new komorebic.exe instances to spawn until a new window is focused by komorebi or yasb is terminated. These komorebic.exe instances will persist until yasb is terminated or each task is ended. This seems to be more common when dealing with windows that have had their window decorations removed but is not limited to such windows.

The easiest most consistent steps to reproduce on my system have been as followed:

  1. Run komorebi
  2. Run yasb with the komorebi widget enabled
  3. Open Notepad.exe on an empty workspace
  4. Close Notepad.exe (Don't focus any windows after closing)

Result:

I have tried a decent amount of komorebi revisions* to attempt to narrow down this problem but most if not all have given similar results. I have also tried the Nov 19th, Dec 4th, and Dec 5th revisions of yasb as well. This error occurring after closing a window and stopping when a new window is focused by komorebi is the only real consistent factor I have found sadly.
*image

Windows 11 22000.348
*Yasb - ae15d7b
*komorebi - 9fd4dbf

*komorebi error (continues to repeat with each new komorebic.exe being spawned)
*the (os error 10061) mentioned in my previous issue seemed to also cause this behavior.

ERROR komorebi::process_command: could not get window title

*yasb log

Starting Yasb
Successfully loaded config file and stylesheet
Unknown property cursor
Created bar 0 on monitor \\.\DISPLAY1
Unknown property cursor
Created bar 1 on monitor \\.\DISPLAY2
Activating listener KomorebiEventListener
Activating listener SystemEventListener
SetWinEventHook Successful. Emitting focused window and waiting for events.
Waiting for Komorebi to subscribe to named pipe yasb
Unknown property cursor
Unknown property cursor
Unknown property cursor
Unknown property cursor
Komorebi connected to named pipe: yasb

[FEATURE] tauri-port: Active Window widget

What is the request?

A widget that displays information about the currently focused/active window.

Why is it useful?

Available information may include the window's class_name, hwnd, title, process, etc. Having access to this information is very useful when configuring tiling window managers such as komorebi.

[FEATURE] tauri-port: Add System Tray widget

What is the request?

A widget which enables the user to view and interact with system tray icons from within a configured yasb status bar.

image

Why is it useful?

Allows system tray applications to be managed via yasb, instead of relying on the windows built-in taskbar.

How could it be implemented?

See examples for enumerating system tray icons via win32 api:

Icon information could be polled on a frequent basis e.g. 1000ms and sent to a vue widget which renders icons and handles onclick events. HICON images could be converted to base64 to allow for displaying in the frontend.

[BUG] UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 15: invalid start byte

Expected Behavior

yasb should run when python src/main.py executed.

Current Behavior

stops running with attached error meesage.

Possible Solution

Steps to Reproduce

  1. git clone repository
  2. run python -m pip install -r requirements.txt --user
  3. run python src/main.py

Context (Environment)

error message as below:

$ python src/main.py 
Yasb - Yet Another Status Bar
Starting KomorebiEventListener...
Starting SystemEventListener...
Created named pipe yasb-5f4d3e0a-59aa-11ed-818b-dcf505ca6af6
Created file watcher for path C:\Users\canor\.yasb
Waiting for Komorebi to subscribe to named pipe yasb-5f4d3e0a-59aa-11ed-818b-dcf505ca6af6
Traceback (most recent call last):
  File "C:\Users\canor\Downloads\yasb\src\core\utils\komorebi\event_listener.py", line 56, in run
    self._wait_until_komorebi_online()
  File "C:\Users\canor\Downloads\yasb\src\core\utils\komorebi\event_listener.py", line 100, in _wait_until_komorebi_online
    logging.warning(f"Komorebi failed to subscribe named pipe. Waiting for subscription: {stderr.decode('utf-8')}")
                                                                                          ^^^^^^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 15: invalid start byte
  • Windows10 20H2
  • Python 3.11
  • yasb version isn't unsure but just pulled from repository main branch so I assume it's the latest version as of 2022-11-01.

DEFAULT_CONFIG_DIRECTORY in code is different from doc

In the Readme it is documented that the user provided config should/could be placed in

  • C:/Users/{username}/.yasb/config.yaml

As this doesn't work for me, the config didn't load and the log doesn't give me an hint i look at the code.

In the config_utils.py it is mentioned that the home dir is constructed from Path.home() and DEFAULT_CONFIG_DIRECTORY
but the DEFAULT_CONFIG_DIRECTORY in settings.py is actually set to .yabar.

So there are 2 possibilities in my eyes:

  1. change docs to mention that C:/Users/{username}/.yabar/config.yaml should be used
  2. update DEFAULT_CONFIG_DIRECTORY to .yasb

I would prefer option 2 as this fits more but that's just my 2ct ;)

[BUG] tauri-port: Callbacks not working

Expected Behavior

A widget with the following config should open the explorer when clicked on:

test:
  kind: CustomWidget
  label: "Test Widget"
  callbacks:
    on_left: { exec: { cmd: "cmd.exe", args: ["/c", "explorer"] } }

The toggle_label callback works as intended, but I can't open the json_viewer, calender, nor can I execute commands.

Current Behavior

Callbacks on_left and on_right in a custom widget do nothing. For some reason right clicking on the active program opens a browser tab as intended, other left and right click interactions do nothing. I can't open the calendar or json viewer.

Steps to Reproduce

The issue is reproducible with the default config or the custom widget above.

Context (Environment)

I'm running my own build of the tauri-port without any modifications. Using Windows 10 22H2.

The log file shows the following errors on left click:

00:20:19 [WARN] RedrawEventsCleared emitted without explicit MainEventsCleared
00:21:10 [WARN] NewEvents emitted without explicit RedrawEventsCleared

[FEATURE] Tauri Port - Change Style Of Bar Depending On If Window Is Maximized Or Not

What is the request?

Enable the ability to change the style of bar depending on whether a window is maximized or not within Komorebi.

For example when a window is not maximized it appears in this style:
BonBon_A0ULsJ7CXQ

When the window is maximized it appears like this instead:
floorp_2li8LLmPbF

Although preferably more flush fit and similar to the pre-tauri YASB where it bumps the window down instead of sitting ontop of it:
cLaUrEMjE1

Could already be possible and I'm just not familiar enough haha.

Why is it useful?

When a window is not maximized it feels more open design wise to have it in the style it comes by default, but when maximized it feels nicer to have a more flush fit while also having the bar still in view.

How could it be implemented?

Sadly not familiar with implementations, which is why i'm unsure if it's not already possible.

Thanks for your time and take care!

[BUG] Komorebi Widget: `komorebic focus-workspace <number>` seems to be the only way to update the active workspace indicator

Expected Behavior

Active workspace indicator should be updated by any action that switches the workspace.

Current Behavior

Active workspace indicator seems like it can only be updated properly by komorebic focus-workspace <number>
EDIT: komorebic move-to-workspace <number> also works properly.

Steps to Reproduce

  1. Launch komorebi and yasb
  2. Execute komorebic cycle-workspace previous or komorebic cycle-workspace next, or click an app in the Windows taskbar that redirects focus into a window in another workspace, or click a link that redirects focus into a window in another workspace.

Context (Environment)

Apart from komorebic focus-workspace <number>, the active workspace indicator in the Komorebi workspaces widget doesn't update. For example, komorebic cycle-workspace previous or komorebic cycle-workspace next doesn't update the active workspace. Clicking an app icon in the Windows taskbar also doesn't update the active workspace. Being redirected into another workspace because of clicking a link also doesn't update the active workspace.
Python version is 3.9.13.

[FEATURE]

What is the request?

Add a command-line argument to specify config directory.

Why is it useful?

For users that keep their configs neat and tidy inside $Env:USERPROFILE/.config, one may run yasb with an argument specifying the location of the config directory.

How could it be implemented?

Using argparse one could define a command-line interface for running yasb with arguments. Developers may optionally handle environment variables such as $Env:USERPROFILE for better control and more flexibility.

Intended usage

Preferably, yasb would be executed within a virtual environment. Here's how my launch command would look:

Start-Process -FilePath "$($Env:USERPROFILE)/.virtualenvs/yasb-zR90hDxo/Scripts/python.exe" -ArgumentList "$($Env:USERPROFILE)/yasb/src/main.py --config $($Env:USERPROFILE)/.config/yasb" -WindowStyle hidden

The above PowerShell command starts a Python process using a venv created by pipenv. The ArgumentList consists of yasb_main_path, a --config option, and a config_dir path. It opens yasb in a hidden window so that yasb won't close if the user closes the executing shell.

komorebi integration causes a console window to spawn when using pythonw

When running yasb through pythonw with komorebi connected a komorebic.exe console window will temporarily spawn. This appears to be on a set interval and at the same time the state command is used. Running yasb alone through pythonw or running it normally with komorebi does not cause this behavior.

Windows 11 22000.348
python - 3.10.0
yasb - 277ee71
komorebi - 5e3f1cb

Not a huge deal for me personally but might bother some.
(also thanks for the CPU widget, works great so far.)

About packaging a release

What is the request?

I was wondering if it would be possible for you to package a release for easier installation.

Why is it useful?

This would be very helpful for users like me who would like to use Yasb without having to go through the process of setting it up manually.

[BUG] Error Installing

When installing it gives this TypeError

ฮป python src/main.py

Traceback (most recent call last):
File "src/main.py", line 3, in
from core.bar_manager import BarManager
File "C:\Users\liamt\Documents\Python Scripts\yasb-main\src\core\bar_manager.py", line 7, in
from core.bar import Bar
File "C:\Users\liamt\Documents\Python Scripts\yasb-main\src\core\bar.py", line 17, in
class Bar(QWidget):
File "C:\Users\liamt\Documents\Python Scripts\yasb-main\src\core\bar.py", line 31, in Bar
padding: dict = BAR_DEFAULTS['padding']
TypeError: 'type' object is not subscriptable

[BUG] Battery widget won't allow icon changes

Expected Behavior

Battery status icon should change.

Current Behavior

YASB doesn't display the battery widget and won't respond to click gestures.

Steps to Reproduce

  1. Add status_icons to config.yml.
widgets:
    battery:
        type: "yasb.battery.BatteryWidget"
        options:
            time_remaining_natural: true
            label: "{icon} {percent}"
            label_alt: "remaining: {time_remaining}"
            update_interval: 1000
            charging_options:
                icon_format: "{icon}"
                blink_charging_icon: false
            status_thresholds:
                critical: 10
                low: 30
                medium: 60
                high: 80
                full: 100
            status_icons:
                charging: "\uf583"
                critical: "\uf579"
                low: "\uf57b"
                medium: "\uf57e"
                high: "\uf580"
                full: "\uf578"
            callbacks:
                on_left: "toggle_label"
                on_middle: "do_nothing"
                on_right: "do_nothing"

Context (Environment)

Log: yasb.log
Config: config.yml
Running on Windows 11 22H2.

[FEATURE] tauri-port: Automatically copy config and styles to configuration directory if they don't exist

What is the request?

Automatically copy default styles.scss and config.yaml to the user's configuration directory e.g. $HOME/.config/yasb if files are not present.

If files cannot be copied, yasb should fall-back to using the default configuration files.

Why is it useful?

Decreases likelihood that users will edit styles / config files from the yasb src directory. If src directory config defaults are broken/corrupt/deleted, the user will have to manually retrieve the default configuration files from the source repository.

[BUG] Application process exits after disconnecting/reconnecting monitor several times

Bug Report

Expected Behavior

The application should continue to run as normal after adding/removing a status bar when a display is connected / disconnected.

Current Behavior

The application will crash with the following exit code and no log/traceback:

Process finished with exit code -1073740771 (0xC000041D)

Possible Solution

Issue may be related to thread safety within BarManager when adding/removing Bars when signal slots for QApplication.screenAdded and QApplication.screenRemoved in main.py

Steps to Reproduce

  1. Startup Yasb with multiple monitors configured with status bars with the windows app bar setting enabled
  2. Disconnect a monitor (Settings > System > Display > Disconnect this display)
  3. Reconnect the monitor
  4. Yasb exits with no errors and the above exit code
  5. If no crash occurs, repeat steps 2 and 3 once more

Add cli commands

Like yasb.exe -h
Output: useful information on how to customize.
About project the link to ur page

-r -reload reloads the bar

-a -apply apply css style example : yasb.exe -a path to css and path of the other
-e -edit edit css with defualt editor

Maybe a json file saying hey true or false bar top =true or false for bottom ... basic functions and what not hope this helps and doesnt make things to complicated.

-u -update

Komorebi Support not working: Failed to subscribe komorebi to named pipe: error: Found argument 'subscribe' which wasn't expected, or isn't valid in this context

Hey! Love the project, Everything seems super cool, but I am not able to get komorebi support working out of the box. The error that led to the problem was:

Failed to subscribe komorebi to named pipe: error: Found argument 'subscribe' which wasn't expected, or isn't valid in this context

my komorebi folder is in the PATH so I normally just run komorebic start from powershell

specs.txt

yasb.log

[BUG] Bar padding behavior

Expected Behavior

top changes the top
left changes left
bottom changes the bottom
right changes the right

Current Behavior

top changes the top and right?
left changes the bottom?
bottom changes the bottom and right?
right changes the bottom?

Context (Environment)

This could be me misunderstanding the use of these settings but my assumption would be that changing the top padding to say top: 10 would pad the bar 10 pixels from the top of the screen it was created on. As it stands now doing so seems to do that but also pad the the bar on the right side by the same value. Similar problems exist for left/bottom/right as stated above.

yasb - c03f296
Windows 11 - 22000.438

Example

bars:
  yasb-bar:
    alignment:
      position: "top"
      center: true
    dimensions:
      width: "100%"
      height: 25
    padding:
      top: 10
      left: 0
      bottom: 0
      right: 0

Image showing the top left and right corners with pixel rulers in red.
yasb-corners

[BUG] tauri rewite doesn't create config dir if it doesn't already exist

Expected Behavior

.yasb dir should be automatically created

Current Behavior

yasb just crashes

Possible Solution

add code to logger.rs, where the crash occurs

Steps to Reproduce

attempt to start yasb when you don't have $HOME/.yasb

Context (Environment)

..

i already wrote the code for this

[FEATURE] tauri-port: Battery widget

What is the request?

Add a widget that shows system battery information

  • Support for multiple batteries
  • Show battery discharge rate or time remaining if possible

[BUG] build failed , while installing requirement

image

i even installed VS-code as it says , but still not workign

info :
OS : wind 11 ,
python = 3.11
image

      copying psutil\tests\__init__.py -> build\lib.win-amd64-cpython-311\psutil\tests
      copying psutil\tests\__main__.py -> build\lib.win-amd64-cpython-311\psutil\tests
      running build_ext
      building 'psutil._psutil_windows' extension
      error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for psutil
  Building wheel for winsdk (pyproject.toml) ... error
  error: subprocess-exited-with-error

  ร— Building wheel for winsdk (pyproject.toml) did not run successfully.
  โ”‚ exit code: 1
  โ•ฐโ”€> [332 lines of output]

[FEATURE] Mica blur

What is the request?

ElevenClock uses win32mica (made by the same author) to add a Mica effect to their settings window.

Why is it useful?

Aside from the already existing Acrylic effect, a Mica blur is a must for Windows 11.

How could it be implemented?

I'm not a python developer, so please have a look at this yourself ๐Ÿ˜…

[BUG] Not falling back to next font in font-family

Expected Behavior

Widgets should display icons properly

Current Behavior

Widgets only recognize first font defined in styles.css defined in font-family

Steps to Reproduce

I can reproduce this issue simply by running yasb with all default configurations.

Context (Environment)

I am not very experience with this kind of thing and hope I am not missing something foolish.
yasb.log

active_window eventual failure when komorebi is connected

active_window functions as expected unless komorebi is connected. When connected it will eventually* display "python" or [class_name='Qt621QWindowIcon' exe='python.exe' hwnd=9700656]
*This seems to happen after clicking on the bar a couple of times.

Windows 11 22000.348
*Yasb - b25fab7
*komorebi - 9fd4dbf
(komorebi - f9785be no longer gives the os error but Yasb still breaks and gives an error)
(komorebi - 4e6e2b3) no os error, no Yasb error, active_window still breaks)

*Yasb log

Starting Yasb
Successfully loaded config file and stylesheet
Created bar 0 on monitor \\.\DISPLAY1
Activating listener <class 'core.utils.komorebi.event_listener.KomorebiEventListener'>
Activating listener <class 'core.utils.win32.event_listener.SystemEventListener'>
SetWinEventHook Successful. Emitting focused window and waiting for events.
Waiting for Komorebi to subscribe to named pipe yasb
Komorebi connected to named pipe: yasb
Failed to emit event signal <bound PYQT_SIGNAL k_signal_update of WorkspaceWidget object at 0x00000214F31C5FC0> with args: (None,)
Traceback (most recent call last):
  File "C:\Users\%USERPROFILE%\Python\yasb\yasb-main\src\core\event_service.py", line 25, in emit_event
    event_signal.emit(*args)
TypeError: WorkspaceWidget.k_signal_update[dict].emit(): argument 1 has unexpected type 'NoneType'
Failed to emit event signal <bound PYQT_SIGNAL k_signal_update of WorkspaceWidget object at 0x00000214F31C5FC0> with args: (None,)

*komorebi log

ERROR komorebi::process_command: No connection could be made because the target machine actively refused it. (os error 10061)

How to "reclaim" screen area after closing yasb?

After closing yasb, the space used by it seems to be still "blocked" and I'm left with an empty space that can't be used by my windows.
Not sure if this is related, but what is the expected way to close yasb? I'm assuming using exit through the tray icon menu is supported, what about killing the process running in the cmdline?

komorebi widgets not working

ive followed what to do on the page but i get this error

Starting KomorebiEventListener...
Created named pipe yasb-c44170f9-1f49-11ed-b703-5cf3707bf232
Waiting for Komorebi to subscribe to named pipe yasb-c44170f9-1f49-11ed-b703-5cf3707bf232
Created file watcher for path C:\Users\eric.yasb
Komorebi failed to subscribe named pipe. Waiting for subscription: 'komorebic.exe' is not recognized as an internal or external command,
operable program or batch file.

Clarifying the run_interval unit in config.yaml

Hi,

Thanks for making this. It's a really beautiful app.

I was trying to create a custom widget, but wasn't really able to determine what the units for run_interval are.

In the sample config.yaml, I see

        # run every hour
        run_interval: 6000000

but I wasn't sure what unit that could be.

Looking through the code, it appears we're using QTimer behind the scenes, and from what I could tell from their docs, it should be in milliseconds. In that case this comment would be wrong since it's 3600000 ms in an hour. I was thinking it might be a little bug.

[BUG] komorebi-active-layout is not updated when workspace is switched

Expected Behavior

Assume there are two workspaces named 0 and 1, active-layout of workspace 0 is bsp and active-layout of workspace 1 is monocle

Switching from workspace 0 to workspace 1 should update the layout status, from bsp to monocle

This is not a big problem though. But I like to take a glance at the current layout from time to time, just to make sure I'm not in the monocle layout since I can't remember how many windows are there. So probably it would be better if there's a fix to this little issue?

Current Behavior

_update_active_layout isn't triggered until there's a manual change

similarly, if the tiling is paused, then the inital status of komorebi-active-layout after re-tiling won't get updated, but still in the pause-status.

Steps to Reproduce

  1. ensure there are two workspaces that have two different layouts
  2. switch from one to another
  3. check if the active-layout is updated

[FEATURE] add CPU temp, battery charge/discharge rate

What is the request?

Adding more data options; I suggest real time CPU temps and battery charge/discharge rate (Wh).

Why is it useful?

I use BatteryBar or HardwareInfo to monitor my battery discharge rate because I want to maximize the battery life of my laptop.
CPU temperatures are just a nice touch for desktop, but on my laptop I want to monitor them so I can go fanless when the temperatures are low.

I appreciate your work a lot ๐Ÿ™๐Ÿผ

[BUG] Active window widget broken

The window title widget should be working by default, I assume, but it is not. Komorebi is correctly connected, the window title widget is enabled, and the options are set to their default values in config.yaml. We have no errors being printed by main.py, but some esoteric Qt warnings.

The widget fails to appear entirely, unless we set label_no_window, in which case it will flash briefly on startup before disappearing within 100ms or so.

I've tried running it in both a normal and elevated prompt.

As for reproduction, I'm not really sure since this is just running it exactly as it is on github, with all of the default settings, on Windows 11 and Komorebi 0.14

All of the fonts are installed correctly and every other widget is working as expected.

This is the output:

python src/main.py         
Yasb - Yet Another Status Bar
Starting SystemEventListener...
Starting KomorebiEventListener...
Created named pipe yasb-5360e67d-98aa-11ed-a093-001a7dda7115
Waiting for Komorebi to subscribe to named pipe yasb-5360e67d-98aa-11ed-a093-001a7dda7115
Created file watcher for path C:\Users\amnesia\.yasb
Komorebi connected to named pipe: yasb-5360e67d-98aa-11ed-a093-001a7dda7115
QWindowsWindow::setDarkBorderToWindow: Unable to set dark window border.
QWindowsWindow::setDarkBorderToWindow: Unable to set dark window border.
QWindowsWindow::setDarkBorderToWindow: Unable to set dark window border.
QWindowsWindow::setDarkBorderToWindow: Unable to set dark window border.
QWindowsWindow::setDarkBorderToWindow: Unable to set dark window border.
QWindowsWindow::setDarkBorderToWindow: Unable to set dark window border.
QWindowsWindow::setDarkBorderToWindow: Unable to set dark window border.

[FEATURE] Custom cmd falid label

What is the request?

i hope to custom label text when cmd falid due to no network or others

Why is it useful?

the current label of falid status is not beautiful
image

[BUG]Can't Install

After i run pip install -r [requirements.txt](https://github.com/denBot/yasb/blob/main/requirements.txt) it says that it cant open requirements folder

Hot reload

It would be good if the changes were immediately applied on config save instead of having to restart yasb, much like how komorebic watch-configuration works.

[BUG] the active_window widget does not work when monitor_exclusive is true

Expected Behavior

I have 2 monitors. The active window title should be shown exclusively for the bars on the active window screen, when the monitor_exclusive is true.

Current Behavior

The active window title won't be shown on any of bars of both monitors.

Possible Solution

Add logging.info(f"The monitor name is {monitor_name}, and the screen name is {self.screen().name()}") in active_window.py and the prints are as follow:

2023-04-27 19:24:16 INFO active_window.py: The monitor name is \\.\DISPLAY1, and the screen name is LF24T35
2023-04-27 19:24:16 INFO active_window.py: The monitor name is \\.\DISPLAY1, and the screen name is L24e-30

Since monitor_name does not equal to both screens, the program will always execute self._window_title_text.hide().

Context (Environment)

  • Windows 11 Pro 22H2 22621.1635
  • Python 3.10.0
  • pyqt6 6.3.1
  • pywin32 304

[BUG] DLL load failed while importing QtGui: The specified procedure could not be found.

Following the installation section in Wiki to setup, but can not start src/main.py.

Expected Behavior

When running python src\main.py, the programs should start.

Current Behavior

Traceback (most recent call last):
  File "C:\Users\...\yasb\src\main.py", line 2, in <module>
    from PyQt6.QtWidgets import QApplication
ImportError: DLL load failed while importing QtGui: The specified procedure could not be found.

Possible Solution

pip install --upgrade PyQt6

Steps to Reproduce

  1. Install Python 3.9.
  2. pip install -r requirements.txt
  3. python src\main.py

Context (Environment)

System is a newly installed Windows 11. Tried both Conda and native Python 3.9 but none works.

Export .css file to .config/yasb And bblean support

easy to find the config file

Export .css file to .config/yasb
And bblean support

How could it be implemented?

Mkdir ~./.config/yasb
Cp path to css configfile yourname/.config/yasb

Heck even micro text editor uses it

[FEATURE] Tray/Task Support?

What is the request?

Tray and taskbar button support for Windows

Why is it useful?

In order to ditch the default taskbar, which received a very (IMO) terrible rewrite in Windows 11. Calling the tray popup with AHK is rather inconsistent/buggy.

How could it be implemented?

https://github.com/cairoshell/ManagedShell - This repo might be useful in implementing this.

I understand that this is a gargantuan request - just implementing a tray widget would make a world of difference.

[BUG] Troubles getting running - issue with QT ?

Hey,

Despite installing all the packages from requirements.txt I think there is something missing in my system from QT.

python src/main.py
Yasb - Yet Another Status Bar
qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
 python --version
Python 3.9.12

Not sure what's missing (PyQT6 is installed from reqs)

[FEATURE] tauri-port: Media Player widget

What is the request?

A widget that displays information for currently playing media, e.g. song title, artist, play/pause status etc.

Why is it useful?

Lets user view information about the currently playing media source

How could it be implemented?

Via win32 API or a rust windows media wrapper. Yasb 1.0 implementation can be used as a reference:
#13

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.