Skip to content

A ready to use configuration for Labwc wayland compositor with 19 preconfigured color schemes + dynamic wallpaper-based color generation using matugen. It includes everything wayar, rofi (launchers, powermenu and applets) and some cool scripts...

Notifications You must be signed in to change notification settings

zenfas/modern-labwc

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A ready to use configuration for Labwc wayland compositor with 19 preconfigured color schemes + dynamic wallpaper-based color generation using matuge AND my cool scripts....

If you enjoy this project, consider giving it a star! 🌟


✨ Features

  • Preconfigured Themes - Preconfigured color schemes for labwc, GTK3, GTK4, Rofi, and waybar.

  • Wallpaper-Based Color Generation - Generate themes from wallpapers using Matugen.

  • Rofi Applets - Useful Rofi Applets

  • Audio Feedback - Plays audio on system login and hardware changes.

  • Dynamic Desktop Menu - A Python-based menu generator that builds beautiful, icon-rich labwc root menus with optional custom headers.

  • Idle Management - Manage screen dimming, locking and device suspension.

  • Immersive Hyprlock - Matugen-themed lockscreen with 'Now Playing' album art and direct wallpaper background rendering (not simple screenshot).

  • Wallpaper Picker On Steroids - Handles both images and GIFs. It toggles system theme (dark/light) based on generated color scheme, extracts GIF frame for lockscreen consistency, and analyzes wallpaper brightness to generate readable text colors for Hyprlock.

    And many more.....

📸 Click Here to View Screenshots, Videos

NOTE! Screenshots are old and not updated the UI is same but there are some improvements like no thick borders, better colors, improved scripts etc...

🎨 Preconfigured Themes (20 Total)

Tokyo Night, Onedark, Dracula, Catppuccin, Gruvbox, Nord, Everforest, Everforest Light, Solarized Dark, Solarized, Lavender Pastel, Arc, Adapta, Black, Navy, Lovelace, Paper, Cyberpunk, Yousai, and Wallpaper-based.
launcher10
Beautiful Labwc Root Menu
Without Header
launcher10
With Header
launcher9

Rofi Launchers

Rofi Launchers
launcher10 launcher9
launcher8 launcher7
launcher6 launcher5
launcher4 launcher3
launcher2 launcher1
Rofi Powermenus
pm1 pm2
pm3 pm4
pm5 pm6
pm7 pm8

Waybar

Caps Lock ON
Caps Lock ON
Compact Pill
Compact Pill
Pill
Pill
Square
Square
Outline
Outline
Standard
Standard
Waybar Customization
waybar.mp4
Change System Theme From Waybar
image

Rofi Applets

Wallpaper Picker
wallselect wallselect
Rofi WIFI Manager
wifi.mp4
Rofi Nowplaying
rofi-nowplaying.mp4
Rofi Clipboard Manager
clipboard.mp4
Rofi Nightlight
nightlight.mp4
Rofi Screen Tool
Recording Thumbnail
Screenshot Save
Screenshot Copied
screen-tool.mp4

Hyprlock

Hyprlock With Matugen and Dynamic Nowplaying With albumart
Nothing Playing Clean Look
Lock Screen With Albumart
Fallback Albumart
hyprlock.mp4

Mpv

Mpv With Matugen And Modern Look
mpv2 mpv1

Update and Fixes

First of all, scripts are efficent and light they literally use < 0% cpu and With all the daemons and script running at once the ram usage should be under 50-60mb.

New Scripts

  • alarm: A full function alarm with snoozing feature. you can set alarm once, specific day of week or daily with alarm title.

  • waybar timer: A waybar timere with stopwatch, countdown and pomodoro mode with sound ofcourse.

  • data monitor: A script to monitor internet traffic. It shows internet speed, control data usage (you set data limit for day and month and it will notify when usage reaches 90%. (It will not disconnect internet connection)

  • pin notes: A script that shows notes as waybar tooltip. It reads the files in pins folder in your home directory finds .txt file which are your notes and show them as tooltip. You can scroll to switch the notes and also use some basic markup.

       H3 (###) -> Medium Bold
       H2 (##)  -> Large Bold
       H1 (#)   -> Extra Large Bold Underline
       Bold (**text**) 
       Italic (*text*) 
       Bullets (- ) -> • 
    
  • dns changer: A script to apply encrypted (DoT) dns to you system (requires systemd.resolved to work). It works!!!

  • clock-calendar script for waybar. This script shows calendar tooltip with events.

  • rofi tube: A Python script to play youtube videos in mpv or vlc. You can use Youtube or Youtube-music. It's good if you use it for listening to music. It stores the search history and also has cache function so it's not slow.

    Some clarification about this script

    • I know that yt-dlp is integrated in mpv by default
    • I know you can fetch youtube search from yt-dlp and don't need a youtube scrapper
    • I used these complex function as Youtube scrapper is super fast it takes few seconds maybe 2-3 (depending on internet speed) whereas yt-dlp can take more than 30sec maybe even more than a minute
    • Providing a direct link to mpv will generate a very long playlist which is time taking and also useless in my point of view i wanted few items only.
    • One downside of this script is that you can't have an actual playlist in the player and to skip an item you just end the video and it will play next (no previous)
  • Swaync: You can use swaync as notification daemon. It will give you buttons in notification and animation.

and few more small scripts...

Improvements

  • Hover selection and single mouse click input for all rofi window.
  • Fixes notification flooding by using notification id's
  • Improved wallselect script, you can now use script as wallselect.sh /path/to/img and it will use that image. You can set context menu in thunar and now just right click the image and set it as wallpaer and everything will update colors, theme etc.
  • Improved rofi-nowplaying script (more fast, improved notifications, player cache and more themes) It's great....
  • Improved screen-tool script, Now you can record system audio too and also screen freez while taking screenshot so that you can take screenshot of tooltips, popups etc..
  • Dynamic colors for fallback_album_arts for both hyprlock and rofi
  • Added keybindings for volume and brightness buttons XF86buttons to bash script that shows real beautiful notification
  • Added copied image as icon for notification when copying from history in clipboard.sh.
  • New transparency(alpha) control app for waybar to customize.

and many more small changes...

📸 Click Here to View Updates and Changes

Alarm

Dunst
Swaync
launcher8 launcher7 launcher10 launcher9

Clock-Calendar Script

New Styles of Rofi nowplaying

Style 1
Style 2
Style 3
Style 4
Style 5
style-1 style-2 style-3 style-4 style-5

Dns (Dot) and Data Monitor Script

Waybar Tooltip
DNS Changer
Alert Notification
img2 img4 img4 img3

New Todo and Countdown Scripts

Todo
Countdown
img2 img4

Rofi Tube

Mode Selection
Search window with history
Search result window
img2 img4 img4

Videos (unmute video to listen to sound)

Rofi-tube.mp4
alarm.mp4
swaync.mp4
timer.mp4
waybar.mp4
notification.mp4

Installation

Arch Linux Users:

git clone https://github.com/Harsh-bin/modern-labwc/
cd modern-labwc
chmod +x setup.sh
./setup.sh

Other Distributions:

  1. Install dependencies manually.
  2. Copy config files to ~/.config/ matching the directory structure.
  3. Copy fonts to ~/.local/share/.
  4. Copy Curso theme to ~/.local/share/icons.
  5. Copy matugen-labwc theme folder to ~/.themes.

Dependencies

For Arch Linux: Run setup.sh to automatically install all dependencies.

For Other Distributions: Install these packages manually:

imagemagick, labwc, wl-clipboard, cliphist, wl-clip-persist, waybar, rofi, ffmpegthumbnailer, ffmpeg, dunst, matugen, foot, swww, swayidle, hyprlock, qt5-wayland, qt5ct, qt6ct, qt6-wayland, nm-connection-editor, lxqt-policykit, gnome-keyring, wf-recorder, grim, gammastep, mpv-mpris, slurp, playerctl, pavucontrol, pamixer, brightnessctl, xdg-desktop-portal, xdg-desktop-portal-wlr, thunar, xfce4-taskmanager, jq, netcat, python-watchdog, alsa-utils, swayimg, otf-font-awesome, inter-font, ttf-roboto, papirus-icon-theme, adw-gtk-theme.


Keybindings

Keybindings are configured in ~/.config/labwc/rc.xml.

Keys Naming: --Return: Enter key

  • W: Super / Windows key
  • A: Alt key
  • S: Shift key (Note: lowercase s is just alphabate, uppercase S is shift)
  • C: Ctrl key

Example of how to edit: To change the terminal (Return key) shortcut:

<keybind key="W-Return">
    <action name="Execute" command="foot" />
</keybind>

Main Shortcuts (used in this confi)

Key Combination Action Description
W-Return Execute Open Terminal (foot)
F11 ToggleFullscreen Toggle fullscreen mode
W-d Execute Open Rofi Dmenu (Apps Launcher)
W-c Execute Customization Panel
W-b Execute Wallpaper selector
W-Delete Execute Power Menu
W-g Execute Generate desktop root menu (Apps Menu)
W-s Execute Open Screen Tool (Screenshot/Record)
W-y Execute Open Rofi Tube (YouTube)
W-l Execute Lock Session
W-r Reconfigure Reload Labwc Config
A-Tab NextWindow Switch to next window
A-S-Tab PreviousWindow Switch to previous window

Workspaces & Windows

Key Combination Description
W-1 to W-4 Switch to Workspace 1-4
W-S-1 to W-S-4 Move window to Workspace 1-4
W-Arrow Keys Snap window to Top/Bottom/Left/Right

Configuration

Caution

Important Configuration to control Alarm and Timer script from terminal

Click here to see instruction

[!WARNING] This script uses syntax compatible with Bash and Zsh.
It will not work on Fish or NuShell without modification.

Add the following lines to your ~/.bashrc or ~/.zshrc just copy paste it:

######################################
#### To Control Waybar Timer #########
######################################

timer() {
    local script_path="$HOME/.config/waybar/scripts/timer/waybar_timer.py"

    if [[ ! -f "$script_path" ]]; then
        echo "Error: Script not found at $script_path"
        return 1
    fi

    if [[ $# -eq 0 ]]; then
        python3 "$script_path" --help
        return
    fi

    case "$1" in
        # Shortcuts for specific modes
        sw|stopwatch)
            python3 "$script_path" stopwatch "${@:2}"
            ;;
        cd|countdown)
            python3 "$script_path" countdown "${@:2}"
            ;;
        add)
            python3 "$script_path" countdown add "${@:2}"
            ;;
        pomo|pomodoro)
            python3 "$script_path" pomodoro "${@:2}"
            ;;
        pause|resume|start|reset|toggle|toggle-pause)
            python3 "$script_path" --current "$1"
            ;;            
        # View toggling
        view|toggle-view)
            python3 "$script_path" --toggle-view
            ;;            
        [0-9]*)
            python3 "$script_path" countdown "$@"
            ;;            
        # Pass anything else directly to the script
        *)
            python3 "$script_path" "$@"
            ;;
    esac
}

###################################
#### To Manage Alarms #############
###################################

alias alarm='~/.config/waybar/scripts/clock_calendar/alarm/alarm.sh'

1. Keybindings

As mentioned above, all keybindings are handled in ~/.config/labwc/rc.xml inside the <keyboard> section.

2. Mouse & Touchpad Acceleration

To change mouse/touchpad speed and acceleration, edit the <libinput> section in ~/.config/labwc/rc.xml.

Example:

<libinput>
    <device category="touchpad">
        <pointerSpeed>0.3</pointerSpeed> <!-- -1.0 (slowest) to 1.0 (fastest) -->
        <accelProfile>adaptive</accelProfile> <!-- adaptive or flat -->
        <tap>yes</tap>
    </device>
</libinput>

3. Workspaces

To change the number of workspaces or their names, edit the <desktops> section in ~/.config/labwc/rc.xml:

<desktops number="4" />
<desktops>
    <names>
        <name>WS 1</name>
        <name>WS 2</name>
    </names>
</desktops>

4. Waybar Customization

You can tweak config.jsonc to your needs.

IMPORTANT!!! Don't change the module name like if you planed to modify the config to use firefox insted of chrome then you shouldn't change the module name form custom/chrome to custom/firefox as if you do then you have to edit the waybar css to apply the changes so it's best to just edit the command.

Example: Change the browser used by the custom/chrome module

  • Open the file ~/.config/waybar/config.jsonc and edit custom/chrome:
"custom/chrome":
{
	"format": "",
	"tooltip": true,
	"tooltip-format": "Browser",
	"on-click": "google-chrome-stable",
	"on-click-right": "chromium",
	"on-click-middle": "brave"
}
  • Edit the on-click, on-click-right, or on-click-middle commands to your preferred browsers. For example:
"custom/chrome":
{
	"format": "",
	"tooltip": true,
	"tooltip-format": "Browser",
	"on-click": "firefox",
	"on-click-right": "brave",
	"on-click-middle": "google-chrome-stable"
}

Apply the same edit pattern to other custom/* modules.

To know more follow waybar wiki

5. Changing Wallpaper Path

To change the directory: Edit ~/.config/rofi/wallselect/wallselect.sh and change the wall_dir path to your liking.

You can also change the wallpaper picker theme to style-2

# Change path to wallpaper
wall_dir="/usr/share/backgrounds/images/"

# Wallselect theme file
wallselect_theme="$HOME/.config/rofi/wallselect/style-1.rasi"

6. Adding context menu in thunar to easily set wallpaer by right clicking on Images or Gif's

  • Open thunar go to Edit -> Configure custom actions
  • Click + icon to add new
  • In command field write this $HOME/.config/rofi/wallselect/wallselect.sh %f
  • The go to Appearance Conditions and tick imgage files

Tip If you don't use xfce4 and don't use the default Set as wallpaper option that is used to set background in xfce4 then you can disable it by sudo mv thunar-wallpaper-plugin.so thunar-wallpaper-plugin.so.old and to re-enable it sudo mv thunar-wallpaper-plugin.so.old thunar-wallpaper-plugin.so

7. Changing Lockscreen Profile Photo

To change the profile picture (pfp), you must replace the ~/.config/hypr/hyprlock/user.jpg image.

  1. Rename your desired photo to user.jpg.
  2. Move it to ~/.config/hypr/hyprlock/.

Troubleshooting:

  • Extension Mismatch: If you rename a .png file to .jpg manually, it may not load. The file extension must match the format.
  • Convert Image: Run magick your_image.png output.jpg to convert it properly.
  • Use PNG: If you prefer using a PNG, edit ~/.config/hypr/hyprlock.conf. Look for line 34: path = ~/.config/hypr/hyprlock/user.jpg Change it to: path = ~/.config/hypr/hyprlock/user.png.

8. Use TUI Version of todo countdown and clock-calendar

Tui version of these scripts exist to use them you have to modify the waybar config.jsonc file

Example

{
      "custom/todo":
      {
          "format": "\u00a0{}",
          "exec": "~/.config/waybar/scripts/todo/todo.sh",
          "on-double-click": "~/.config/waybar/scripts/todo/todo.sh --mark-done",

          /// To use tui on right click use something like this
         ///  "on-click-right": "foot ~/.config/waybar/scripts/todo/todo.sh --show-tui",

          "on-click-right": "killall rofi || bash ~/.config/waybar/scripts/todo/todo.sh --show-rofi",
          "on-click-middle": "~/.config/waybar/scripts/todo/todo.sh --middle-click",
          "return-type": "json",
          "interval": 5,
          "tooltip": true
      },
}

Note: For `clock-calendar script you have to edit this

      "custom/clock":
      {
          "exec": "~/.config/waybar/scripts/clock_calendar/clock_calendar.sh",
          "return-type": "json",
          "format": "  {}",
          "format-alt": "  {alt}",
          "interval": 10,
          "tooltip": true,

          /// To use tui on right click use something like this
         ///  "on-click-right": "foot ~/.config/waybar/scripts/clock_calendar/clock_calendar.sh --show-tui",

          "on-click-right": "killall rofi || bash ~/.config/waybar/scripts/clock_calendar/choose.sh",
          "on-scroll-up": "$HOME/.config/waybar/scripts/clock_calendar/clock_calendar.sh --scroll-up",
          "on-scroll-down": "$HOME/.config/waybar/scripts/clock_calendar/clock_calendar.sh --scroll-down"
      },

9. Locale & Input

To change your keyboard layout or region, edit ~/.config/labwc/environment:

# --- Input & Region ---
XKB_DEFAULT_LAYOUT=us
LANG=en.US.UTF-8

10. Rofi Tube

You can set the video Quality, Coded and video player by editing ~.config/rofi/rofi-tube/rofi-tube.conf

Important Rofi tube will stop working if you use it regularly without using a browser cookie To fix this:

  • you have to Download this extension Get cookies.txt LOCALLY
  • Open Incognito Window and open youtube and then click this extension and click Export All Cookies this will download a .txt file
  • Rename that .txt file to youtube-cookies.txt and move it to ~.config/rofi/rofi-tube/

TIP You can watch youtube in browser for a while to build your feed, then export cookies. so that rofi tube can use that cookie and recommend the videos and music which you like

IMPORTANT!!! Don't use your google account cookies as it may block your youtube account

11. Changing Notification Daemon

To Change the notification daemon you have to edit the ~/.config/labwc/autostart file. Search the dunst >/dev/null 2>&1 & and replace it with swaync >/dev/null 2>&1 &

🤝 Contributing

I am happy to collaborate! Feel free to contribute to this project in any way you can. Whether it's fixing a bug, adding a new feature, or even a small change like enhancing README, every contribution matters and is highly appreciated.

Credits

Rofi launcher and powermenu adi1090x Matugen InioX

Enjoy your beautifully themed Labwc desktop! 🎉

Star History Chart

About

A ready to use configuration for Labwc wayland compositor with 19 preconfigured color schemes + dynamic wallpaper-based color generation using matugen. It includes everything wayar, rofi (launchers, powermenu and applets) and some cool scripts...

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Lua 34.0%
  • Shell 32.2%
  • CSS 17.5%
  • Python 16.3%