GTK3-based panel for sway window manager

Overview

nwg-panel

I have been using sway since 2019 and find it the most comfortable working environment, but... Have you ever missed all the graphical bells and whistles in your panel, we used to have in tint2? It happens to me. That's why I decided to try to code a GTK-based panel, including best features from my two favourites: Waybar and tint2. Many thanks to Developers and Contributors of the both projects!

Development status is alpha. Errors are expected (please report!). Breaking changes may, and probably will occur.

There are 7 modules available at the moment, and I don't plan on many more. Basis system controls are available in the Controls module, and whatever else you may need, there's an executor for that.

gh.png

Modules - as for today

Controls

Panel widget with a popup window, including sliders, some system info, user-defined rows and customizable menu (top right in the picture);

SwayTaskbar

Shows tasks from a selected or all outputs, with the program icon and name; allows switching between them, toggle the container layout (tabbed stacking splitv splith) with the mouse scroller, move to workspaces, toggle floating and kill with the right-click menu (bottom left);

CustomButton

Simple Gtk.Button with an icon, and a command assigned to it (top left corner);

SwayWorkspaces

Not really necessary set of textual buttons to switch between workspaces (not in the picture);

Clock

Just a label to show the date command output in the format of your choice (top center);

Playerctl

Set of buttons, and a label to control mpris media player with the Playerctl utility (top left);

Executor

Last but not least: the Executor module displays an icon, and a label on the basis of a script output, in user-defined intervals (bottom right, and the weather executor next to the clock).

See Wiki for more information.

Comments
  • add system tray module

    add system tray module

    This is an attempt to create an SNI based system tray module for nwg-panel.

    Progress:

    • [X] dbus watcher
    • [X] dbus host
    • [X] item
    • [X] tray module (showing real app icons)
    • [X] wire in DbusmenuGtk3
    • [x] cleanup and action any feedback

    I think the menu's can be implemented by leveraging the libdbusmenu library. There is example python code in the following two tests:

    • https://github.com/AyatanaIndicators/libdbusmenu/blob/master/tests/test-glib-simple-items.py
    • https://github.com/AyatanaIndicators/libdbusmenu/blob/master/tests/test-gtk-shortcut-client.py

    I'm a front-end developer by day so I apologise in advance for butchering the python language :wink: All feedback welcome!

    This addresses #41

    opened by christian-schulze 31
  • alsa-related issues

    alsa-related issues

    hello there whenever i try to launch the panel i get this error i use pipewire if that helps as it looks like its related to audio image anything else ill be willing to provide

    opened by mackdroid 31
  • Support system tray

    Support system tray

    I'd like to be able to fully replace waybar with nwg-panel. One thing preventing me from doing so is a lack of support for displaying system tray icons.

    If you added tray support, that would make nwg-panel a great replacement for other sway panels.

    feature request 
    opened by emmaliddell 16
  • Controlling brightness for external monitors using ddcutil

    Controlling brightness for external monitors using ddcutil

    Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

    As a desktop PC user, I use ddcutil instead of light or brightnessctl to control my display brightness.

    Describe the solution you'd like A clear and concise description of what you want to happen.

    To be able to use the current brightness slider in the controls module to control brightness for external displays.

    Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

    Other than that, I also propose to allow users to choose between light, brightnessctl and ddcutil in the settings, since the current logic automatically chooses by the order of met dependency (light, then brightnessctl, etc.). This would be useful for users who have more than one of the dependencies installed, for example laptop users who also use additional external monitors.

    Additional context Add any other context or screenshots about the feature request here.

    opened by az01101001 11
  • [BUG] duplicate panels after edit with `nwg-panel-config`

    [BUG] duplicate panels after edit with `nwg-panel-config`

    Describe the bug more than one panel

    To Reproduce Steps to reproduce the behavior:

    1. open nwg-panel-config
    2. Change a setting (eg remove modules on the right)
    3. click Save & restart
    4. now there should be 2 panels

    Expected behavior The current one gets terminated and the new one starts

    Screenshots image

    Desktop (please complete the following information):

    • Linux distribution: Arch
    • Sway version sway -v: 1.7
    • Panel version nwg-panel -v: 0.6.1

    Additional context Can provide if needed

    opened by matthis-k 11
  • add systemd service

    add systemd service

    Not all sway users rely on the "flaky" exec_always in the sway config.

    For example if the app crashes (like it currently does on my machine after a suspend / resume), then nwg-panel is terminated and never comes back.

    For users using sway-service this would be a nice addition.

    Also this is the required change in the PKGBUILD

    diff --git a/PKGBUILD b/PKGBUILD
    index 26c5832..f698201 100644
    --- a/PKGBUILD
    +++ b/PKGBUILD
    @@ -20,4 +20,5 @@ package() {
       install -D -t "$pkgdir"/usr/share/pixmaps nwg-panel.svg
       install -D -t "$pkgdir"/usr/share/pixmaps nwg-shell.svg
       install -D -t "$pkgdir"/usr/share/applications nwg-panel-config.desktop
    +  install -D -t "$pkgdir"/usr/lib/systemd/user/ nwg-panel.service
     }
    
    opened by jtheoof 9
  • Force refresh of executor

    Force refresh of executor

    Is your feature request related to a problem? Please describe.

    I wrote an quick and dirty alertmanager executor, which works fine. However, if I want to refresh it's status, I don't know any other way than waiting for the end of the current interval.

    Describe the solution you'd like

    I'd like to have an option to force a refresh (a.k.a. force-end the current interval), configurable i.e. via right-click.

    enhancement 
    opened by varac 8
  • Name root/parent module GTK objects.

    Name root/parent module GTK objects.

    This allows the modules root object (the module object directly inheriting a GTK object) to be referenced in CSS (as 'root-' and whatever CSS name was configured for that module).

    opened by simplejack-src 7
  • Bug in 0.1.6?

    Bug in 0.1.6?

    nwg-panel
    Running on sway Display: HDMI-A-1, position: top, layer: bottom, width: 2048, height: 30

    ** (nwg-panel:156765): WARNING **: 01:46:28.599: gtk-layer-shell v0.5.2 may not work on GTK v3.24.26. If you experience crashes, check https://github.com/wmww/gtk-layer-shell/blob/master/compatibility.md Traceback (most recent call last): File "/usr/bin/nwg-panel", line 33, in sys.exit(load_entry_point('nwg-panel==0.1.6', 'gui_scripts', 'nwg-panel')()) File "/usr/lib/python3.9/site-packages/nwg_panel/main.py", line 281, in main check_key(panel["controls-settings"], "window-width", 0) KeyError: 'controls-settings'

    opened by IntinteDAO 7
  • Let user choose which backlight device is controlled by brightness slider

    Let user choose which backlight device is controlled by brightness slider

    Is your feature request related to a problem? Please describe. My computer (an Apple MacBookPro16,1) has two backlight devices:

    $ ls /sys/class/backlight/
    acpi_video0  amdgpu_bl0
    

    "acpi_video0" is the one that actually controls my display backlight, while "amdgpu_bl0" does nothing. When nwg-panel calls light, it selects the amd backlight by default, so the brightness slider in my panel's controls menu doesn't do anything.

    Describe the solution you'd like

    I would like some way to set the backlight device that is used so that I can set it to control the "acpi_video0" backlight. This could probably be done by adding a dropdown menu that lets you select from the outputs of

    $ ls /sys/class/backlight`
    acpi_video0 
    amdgpu_bl0
    

    If a specific backlight is selected, -s sysfs/backlight/<SELECTED_BACKLIGHT> could be added to light's arguments, or -d <SELECTED_BACKLIGHT> to brightnessctl

    This dropdown to select device could be located above "output switcher" and to the right of "Brightness" in this screenshot: image

    Describe alternatives you've considered Alternatively, the slider in the panel's controls thing could be set up to change the brightness of all display backlights in the system.

    Additional context

    light is called to set brightness here in the code https://github.com/nwg-piotr/nwg-panel/blob/97e2cc0ee8e5f050d92a74434978d6bd71496cd2/nwg_panel/tools.py#L432

    opened by Redecorating 6
  • SwayTaskbar doesn't show icons for some applications

    SwayTaskbar doesn't show icons for some applications

    For example Element and Manuskript. Maybe instead of looking at the icon names which are element and manuskript, the uppercase versions are being used to find icons?

    Also if a desktop entry is opened and the icon specified there doesn't exist, taskbar crashes.

    opened by CIAvash 6
  • nwg-panel hangs when resuming from standby/hibernation (0.7.15)

    nwg-panel hangs when resuming from standby/hibernation (0.7.15)

    Dependencies check: {'light': True, 'brightnessctl': True, 'ddcutil': False, 'pamixer': True, 'pactl': True, 'playerctl': True, 'netifaces': True, 'btmgmt': True, 'wlr-randr': False, 'upower': True, 'swaync': True, 'python-requests': True}
    Running on sway
    Error loading json: [Errno 2] No such file or directory: '/home/user/.local/share/nwg-panel/calendar.json'
    executor name: executor-updates
    Panel 'top': output: eDP-1, position: top, layer: bottom, width: 1920, height: 30
    executor name: executor-cpuav
    executor name: executor-cpubar
    executor name: executor-temp
    executor name: executor-memory
    executor name: executor-drives
    Panel 'bottom': output: eDP-1, position: bottom, layer: bottom, width: 1920, height: 30
    
    (nwg-panel:34704): Gdk-CRITICAL **: 04:04:29.540: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed
    
    (nwg-panel:34704): Gdk-CRITICAL **: 04:04:29.541: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed
    
    (nwg-panel:34704): Gdk-CRITICAL **: 04:04:29.541: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed
    
    (nwg-panel:34704): Gdk-CRITICAL **: 04:04:29.541: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed
    
    ...
    ``
    shift+mod+c reloads as expected, but is required after every resume
    opened by envolution 4
  • [BUG] Playerctl not displaying info for spotify

    [BUG] Playerctl not displaying info for spotify

    The last few weeks I have had quite a bit of trouble getting playerctl to display spotify information. I am able to see my spotify session with "playerctl -p spotify metadata" but the only time the executor displays anything is while watching a youtube video or using lollypop. Previously if this was an issue skipping a song or pausing it on spotify would refresh playerctl but this is no longer sufficient.

    Is there some way to edit how the playerctl commands behave? Because if possible I would like to ignore youtube but not the others. Apologies if this is a spotify issue and not an nwg issue, I am just having trouble understanding where the error lies. I know there is a way to ignore certain players, but I don't see anywhere I can change the playerctl commands even reading the config files.

    Still loving the shell regardless, thanks!

    opened by xi-pinmping 0
  • mimic i3status

    mimic i3status

    Hi there,

    Firstly thank you for your efforts to date. The project looks great and your additions are really cool.

    I would like to request (apologies for asking in an Issues page!) a drop in theme to mimic the default i3status of i3wm.

    I am struggling to, for example, show the i3 status style of "desktops in use" "active desktop". And to have the simplistic default line of text to the right to indicate ipv6, wireless, ethernet, battery, disk usage, ram, and date.

    I like your project because, unlike i3status, your application indicators work with the desired results.

    I know this might seem an odd request - but if this can mimic 100% the design of a default i3status, then many might simply set and forget.

    Hope you don't see this as any criticism and just more constructive input towards your great project. Thanks for doing it!

    feature request 
    opened by mattdrepo 1
  • [BUG] Nextcloud client freezes the panel for a long time at startup

    [BUG] Nextcloud client freezes the panel for a long time at startup

    Describe the bug

    When I start nextcloud client it freezes the panel immediatly and it takes a very long time until the icon shows up in the panel, then it is responsive again

    To Reproduce

    Steps to reproduce the behavior:

    1. Install nextcloud client (3.6.2-1) on Arch Linux.
    2. Remove existing .config/Nextcloud folder
    3. Start with nextcloud --logfile /tmp/nextcloud.log --logdebug
    4. Panel freezes
    5. Wait apporx. 3 minutes
    6. Icon shows up in panel, and the initial NC window appears

    Expected behavior

    The icon should show up in the panel shortly after start, and the initial window should appear quickly. The panel should not freeze at any moment.

    Desktop (please complete the following information):

    • Linux distribution: Arch Linux
    • Sway version 1.7
    • Panel version 0.7.13

    Additional context

    The log shows messages like System tray is not available, waiting... : nextcloud.log

    opened by varac 3
  • [FEATURE REQUEST] More css-name to have more control over css customization

    [FEATURE REQUEST] More css-name to have more control over css customization

    Is your feature request related to a problem? Please describe. Hello, I would like to have more control over css customization to be able to customization panel box left/middle/right and sway workspaces button container for exemple

    Describe the solution you'd like All gtx box created should have a property name to able to be access by css selector and to be edited in style.css

    Additional context Maybe I have missing some things about how Gtk works and something like that is already done by Gtk

    Exemaple of level of customization i would like: https://i.redd.it/6cni5jbtlyw91.jpg https://i.redd.it/207tgukid1t91.png https://i.redd.it/ux7tmqcx2ix91.png https://i.redd.it/fuujqm9q7ox91.png https://i.redd.it/uh5cz1h7wsu91.png

    opened by Blist 0
Releases(v0.7.15)
  • v0.7.15(Dec 10, 2022)

    • added try/except clause -> signal subscription loop, in order to fix #162;
    • added a possibility to refresh executors on an RT signal; closes #164.
    Source code(tar.gz)
    Source code(zip)
  • v0.7.14(Oct 29, 2022)

    • Scratchpad module: added the /tmp/nwg-scratchpad file. It stores info on the containers moved to scratchpad, for it to survive sway reloads.
    Source code(tar.gz)
    Source code(zip)
  • v0.7.13(Oct 28, 2022)

    This feature adds the move scratchpad ("minimize") entry to the SwayTaskbar context menu. It moves the window to the sway scratchpad. If you place the Scratchpad module next to the SwayTaskbar module, you'll see minimized windows' icons in it.

    image

    The SwayTaskbar module saves the window parent workspace and floating state. When you click the window icon in the Scratchpad module, these two properties will be restored. Obviously it won't happen if you move a window to the scratchpad in any other way.

    Users of multi-headed setups with a SwayTaskbar + Scratch module combo on each of them, may want to see the tasks that belong to the certain display on every Scratchpad module instance. That's why the "Single output" check box has been added.

    image

    Again, for it to work, you need to "minimize" the window from the SwayTaskbar module. Also, the panel needs to be assigned to an output.

    image

    Please find this feature beta, and report bugs, if any.

    Source code(tar.gz)
    Source code(zip)
  • v0.7.12(Oct 22, 2022)

    • Playerctl module: full (unshortened) label text -> tooltip text;
    • Controls module: added optional, semi-transparent background window to click and close the popup, in addition to the previous behaviour;
    • some typos fixed by @kianmeng;
    • added fallback icon name, same as the app_id, when all other icon name detection methods fail.
    Source code(tar.gz)
    Source code(zip)
  • v0.7.11(Oct 12, 2022)

  • v0.7.10(Oct 7, 2022)

  • v0.7.9(Oct 5, 2022)

    • added (back) check box to disable the panel homogeneity. See #95: if we use Center modules in a panel, the panel's box "columns" need to be homogeneous, if we want the center columns content (e.g. clock) to be centered in the screen. If some columns width exceeds 1/3 of the screen width, it results in cutting off the panel edges. If one really needs 3 columns and wide content, the only solution is to turn the columns' homogeneity off, and give up on centering.
    • Playerctl module: added possibility to scroll track metadata longer than the label length limit (instead of shortening).

    image

    Source code(tar.gz)
    Source code(zip)
  • v0.7.7(Aug 31, 2022)

    • fixed improper Tray icon size on outputs scaled up;
    • fixed output dimensions detection on compositors other than sway: closes #134, reported from Wayfire.
    Source code(tar.gz)
    Source code(zip)
  • v0.7.6(Aug 28, 2022)

  • v0.7.5(Aug 21, 2022)

  • v0.7.4(Aug 15, 2022)

    • nwg-panel-config & Clock module: icon names fixed to work with Adwaita icon theme - closes #139;
    • fix to prevent SwayWorkspaces from crashing on empty floating node.name - closes #137 (hopefully, as I couldn't reproduce the crash on my side).
    Source code(tar.gz)
    Source code(zip)
  • v0.7.3(Jul 30, 2022)

    Clock module: added Calendar window, with the ability to save a simple note for each day.

    image

    Hint: by default, calendar data is stored in the /home/$USER/.local/share/nwg-panel/calendar.json file. Use a folder that you sync over the web to access the same calendar on various machines. E.g. you may install Dropbox and use the /home/$USER/Dropbox/calendar.json path.

    image

    Source code(tar.gz)
    Source code(zip)
  • v0.7.2(Jul 18, 2022)

    Openweather module:

    • added precipitation volume
    • added Romanian translation by drLobes
    • added Watherbit.io weather alerts (requires a separate API key)

    Controls module:

    • brightness slider now supports ddcutil to control external displays @az01101001

    BrightnessSlider module

    • allows to have a separate brightness slider, especially on ddcutil-controlled outputs, without multiple instances of the Controls module. @az01101001
    Source code(tar.gz)
    Source code(zip)
  • v0.7.1(Jun 16, 2022)

    • Added OpenWeather module (NEW DEPENDENCY: python-requests);
    • added separate horizontal and vertical margin for the Controls module popup window #121 by @az01101001;
    • added custom labels for workspaces in the SwayWorkspaces module #123 by @az01101001.
    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(Jun 6, 2022)

  • v0.6.5(May 22, 2022)

  • v0.6.4(May 13, 2022)

  • v0.6.3(Apr 13, 2022)

    • fixed improper error message on python-dasbus module missing; The module should be moved to hard dependencies; Closes #99
    • added check if Gdk.Monitor detected: if not, the panel instance won't be created
    • [SwayTaskbar] added switch to turn the (a)utotiling marker on/off; Closes #100
    • [SwayTaskbar] added switchable X|wayland marker
    Source code(tar.gz)
    Source code(zip)
  • v0.6.2(Mar 17, 2022)

    • fixed crash happening on a Monitor turned off and back on
    • added fallback method of killing the running instance if SIGTERM fails: fixes the panel duplication occurring sometimes on panel restart #93
    Source code(tar.gz)
    Source code(zip)
  • v0.6.1(Feb 1, 2022)

  • v0.6.0(Jan 29, 2022)

  • v0.5.8(Jan 26, 2022)

    • fixed bug that would permanently hide executors (2 lines, icon + text) if no content found
    • added optional field to specify a backlight device path or name (for light / brightnessctl) used by the Controls module. Closes #83
    Source code(tar.gz)
    Source code(zip)
  • v0.5.7(Jan 15, 2022)

  • v0.5.6(Jan 9, 2022)

  • v0.5.5(Jan 7, 2022)

  • v0.5.4(Dec 30, 2021)

  • v0.5.3(Dec 30, 2021)

  • v0.5.2(Dec 14, 2021)

    The python-pybluez module crashes on python 3.10 (#72). Since the bug seems to have been first reported in February, and still remains unfixed, I decided to drop this dependency, and use the btmgmt info command from the bluez-utils package instead. Additional benefit is that we now have the BT name instead od MAC address.

    TL/DR: dependency changed - bluez-utils instead of python-pybluez.

    Source code(tar.gz)
    Source code(zip)
  • v0.5.1(Dec 13, 2021)

    • support for brightnessctl as the light package alternative
    • upower as fallback battery check (where psutil doesn't work)
    • changed assignment battery level -> icon
    Source code(tar.gz)
    Source code(zip)
Owner
Piotr Miller
After hours developer, Linux fan, Arch Linux user
Piotr Miller
SquireBot is a Discord bot designed to run and manage tournaments entirely within a Discord.

Overview SquireBot is a Discord bot designed to run and manage tournaments entirely within a Discord. The current intended usecase is Magic: the Gathe

7 Nov 29, 2022
The Most Simple yet Powerful and Advanced Google Colab Notebook for Zip, Unzip, Tar, UnTar, RaR, UnRaR Files in Google Drive

The Most Simple yet Powerful and Advanced Google Colab Notebook for Zip, Unzip, Tar, UnTar, RaR, UnRaR Files in Google Drive

Dr.Caduceus 15 Aug 16, 2022
Semplice pagina di informazione per sapere se e quando è uscito Joypad, il podcast a tema videoludico di Matteo Bordone (Corri!), Francesco Fossetti (Salta!) e Alessandro Zampini (Spara! per finta).

È uscito Joypad? Semplice pagina di informazione per sapere se e quando è uscito Joypad, il podcast a tema videoludico di Matteo Bordone (Corri!), Fra

Paolo Donadeo 32 Jan 02, 2023
Activate exitlag trial accounts

Exitlag Account Activator Activate exitlag trial accounts (unlimited trial accounts) ⭐ If you want to support me, follow me on github and star the pro

Benjamin 173 Nov 10, 2022
Osmopy - osmo python client library

osmopy Version 0.0.2 Tools for Osmosis wallet management and offline transaction

5 May 22, 2022
Python bindings for BigML.io

BigML Python Bindings BigML makes machine learning easy by taking care of the details required to add data-driven decisions and predictive power to yo

BigML Inc, Machine Learning made easy 271 Dec 27, 2022
Who are we? We are the Hunters of all Torrent in this world.🗡️.Fork from SlamDevs

MIRROR HUNTER This Mirror Bot is a multipurpose Telegram Bot writen in Python for mirroring files on the Internet to our beloved Google Drive. Repo la

Anime Republic 130 May 28, 2022
A Twitter bot developed in Python using the Tweepy library and hosted in AWS.

Twitter Cameroon: @atangana_aron A Twitter bot developed in Python using the Tweepy library and hosted in AWS. https://twitter.com/atangana_aron Cost

1 Jan 30, 2022
Discord-Bot - Bot using nextcord for beginners

Discord-Bot Bot using nextcord for beginners! Requirements: 1 :- Install nextcord by typing "pip install nextcord" Thats it! You can use this code any

INFINITE_. 3 Jan 10, 2022
Deploy a STAC API and a dynamic mosaic tiler API using AWS CDK.

Earth Observation API Deploy a STAC API and a dynamic mosaic tiler API using AWS CDK.

Development Seed 39 Oct 30, 2022
The best (and now open source) Discord selfbot.

React Selfbot Yes, for real Why am I making this open source? Because can't stop calling my product a rat, tokenlogger and what else not. But there is

30 Nov 13, 2022
Bot for automated buying boxes on Binance

V 1.0 Bot for automated buying boxes on Binance В settings.py выставляем свои COOKIE и свой CSRFTOKEN В settings.py для headers выставляем свои параме

Matvey 3 Jan 18, 2022
Wonderful Phoenix-Bot

Phoenix Bot Discord Phoenix Bot is inspired by Natewong1313's Bird Bot project yet due to lack of activity by their team. We have decided to revive th

Senior Developer 0 Aug 12, 2021
BingBot - A bot that will automate searches on bing

bingBot A bot that will automate searches on bing. To install this just download

Lukas 2 Jul 28, 2022
🎀 First and most powerfull open source clicktune botter

CTB 🖤 Follow me here: Discord | YouTube | Twitter | Github 🐺 Features: /* *- The first *- Fast *- Proxy support: http/s, socks4/5, premieum (w

Iтѕ_Ѵιcнч#1337 22 Aug 29, 2022
Tiktok 2 Instagram With Python

Tiktok2Instagram 📸 About The Project What it does: Download the source video from a user inputted Tiktok URL. 📙 Add audio to the Tiktok video from a

Carter Belisle 4 Feb 06, 2022
Public API client for GETTR, a "non-bias [sic] social network," designed for data archival and analysis.

GoGettr GoGettr is an API client for GETTR, a "non-bias [sic] social network." (We will not reward their domain with a hyperlink.) GoGettr is built an

Stanford Internet Observatory 72 Dec 14, 2022
Fully undetected auto skillcheck hack for dead by daylight that works decently well

Auto-skillcheck was made by Love ❌ code ✅ ❔ ・How to use Start off by installing python ofc Open cmd in the same directory and type pip install -r requ

Rdimo 10 Aug 13, 2022
This is simply code for bitcoin fair value.

About The Project This is a code for bitcoin fair value, its simply exclude bubble data using RANSAC method, and then plot the results. Check youtube

BitcoinRaven 4 Mar 26, 2022
Sms-bomber - A Simple Browser Automated Bomber

A Simple Browser Automated Bomber which uses selenium :D Star the Repo and Follo

Terminal1337 9 Apr 11, 2022