diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/_sidebar.md b/docs/_sidebar.md new file mode 100644 index 0000000..4a0615c --- /dev/null +++ b/docs/_sidebar.md @@ -0,0 +1,16 @@ +- [Home](home.md) + +- [Layouts](layouts/layout.md) + +- Modules + - [Flash Focus](module/flash.md) + - [Tabbed](module/tabbed.md) + - [Tiled Wallpaper](module/twall.md) + - [Wallpaper Easy Setup](module/wall.md) + - [Window Swallowing](module/swal.md) + +- Signals + - [Playerctl](signals/pctl.md) + +- Extra + - [Theme Variable Template](theme.md) diff --git a/docs/home.md b/docs/home.md new file mode 100644 index 0000000..d5eed80 --- /dev/null +++ b/docs/home.md @@ -0,0 +1,34 @@ +#
🌟 Bling - Utilities for AwesomeWM 🌟
+ +## Why + +[AwesomeWM](https://awesomewm.org/) is literally what it stands for, an awesome window manager. + +Its unique selling point has always been the widget system, which allows for fancy buttons, sliders, bars, dashboards and anything you can imagine. But that feature can be a curse. Most modules focus on the widget side of things which leave the actual window managing part of AwesomeWM underdeveloped compared to, for example, [xmonad](https://xmonad.org/) even though it's probably just as powerfull in that area. + +This project focuses on that problem - adding new layouts and modules that make use of the widget system, but primarily focus on the new window managing features. + +## Installation +- clone this repo into your `~/.config/awesome` folder + - `git clone https://github.com/Nooo37/bling.git ~/.config/awesome/bling` +- require the module in your `rc.lua`, and make sure it's under the beautiful module initialization + +```lua +-- other imports + +local beautiful = require("beautiful") + +-- other configuration stuff here + +beautiful.init("some_theme.lua") +local bling = require("bling") +``` + +## Contributors +A special thanks to all our contributors... + + + + + +Made with [contributors-img](https://contrib.rocks). diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..7f0cae4 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,27 @@ + + + + + Bling Docs + + + + + + +
+ + + + + + diff --git a/docs/layouts/layout.md b/docs/layouts/layout.md new file mode 100644 index 0000000..97c8ab6 --- /dev/null +++ b/docs/layouts/layout.md @@ -0,0 +1,44 @@ +## 📎 Layouts + +Choose layouts from the list below and add them to to your `awful.layouts` list in your `rc.lua`. + +Everyone of them supports multiple master clients and master width factor making them easy to use. + +The mstab layout uses the tab theme from the tabbed module. + +```Lua +bling.layout.mstab +bling.layout.centered +bling.layout.vertical +bling.layout.horizontal +``` + +### Theme Variables +```lua +-- mstab +theme.mstab_bar_ontop = false -- whether you want to allow the bar to be ontop of clients +theme.mstab_dont_resize_slaves = false -- whether the tabbed stack windows should be smaller than the + -- currently focused stack window (set it to true if you use + -- transparent terminals. False if you use shadows on solid ones +theme.mstab_bar_padding = "default" -- how much padding there should be between clients and your tabbar + -- by default it will adjust based on your useless gaps. + -- If you want a custom value. Set it to the number of pixels (int) +theme.mstab_border_radius = 0 -- border radius of the tabbar +theme.mstab_bar_height = 40 -- height of the tabbar +theme.mstab_tabbar_position = "top" -- position of the tabbar (mstab currently does not support left,right) +theme.mstab_tabbar_style = "default" -- style of the tabbar ("default", "boxes" or "modern") + -- defaults to the tabbar_style so only change if you want a + -- different style for mstab and tabbed +``` + +### Previews + +#### Mstab (dynamic tabbing layout) +![](https://imgur.com/HZRgApE.png) + +*screenshot by [javacafe](https://github.com/JavaCafe01)* + +#### Centered +![](https://media.discordapp.net/attachments/769673106842845194/780095998239834142/unknown.png) + +*screenshot by [branwright](https://github.com/branwright1)* diff --git a/docs/module/flash.md b/docs/module/flash.md new file mode 100644 index 0000000..ed4fa42 --- /dev/null +++ b/docs/module/flash.md @@ -0,0 +1,33 @@ +## 🔦 Flash Focus + +Flash focus does an opacity animation effect on a client when it is focused. + + +### Usage + +There are two ways in which you can use this module. You can enable it by calling the `enable()` function: +```lua +bling.module.flash_focus.enable() +``` +This connects to the focus signal of a client, which means that the flash focus will activate however you focus the client. + +The other way is to call the function itself like this: `bling.module.flash_focus.flashfocus(someclient)`. This allows you to activate on certain keybinds like so: +```lua +awful.key({modkey}, "Up", + function() + awful.client.focus.bydirection("up") + bling.module.flash_focus.flashfocus(client.focus) + end, {description = "focus up", group = "client"}) +``` + +### Theme Variables +```lua +theme.flash_focus_start_opacity = 0.6 -- the starting opacity +theme.flash_focus_step = 0.01 -- the step of animation +``` + +### Preview + +![](https://imgur.com/5txYrlV.gif) + +*gif by [JavaCafe01](https://github.com/JavaCafe01)* diff --git a/docs/module/swal.md b/docs/module/swal.md new file mode 100644 index 0000000..ad40c0f --- /dev/null +++ b/docs/module/swal.md @@ -0,0 +1,24 @@ +## 😋 Window Swallowing + +Can your window manager swallow? It probably can... + +### Usage + +To activate and deactivate window swallowing here are the following functions. If you want to activate it, just call the `start` function once in your `rc.lua`. +```lua +bling.module.window_swallowing.start() -- activates window swallowing +bling.module.window_swallowing.stop() -- deactivates window swallowing +bling.module.window_swallowing.toggle() -- toggles window swallowing +``` + +### Theme Variables +```lua +theme.dont_swallow_classname_list = {"firefox", "Gimp"} -- list of class names that should not be swallowed +theme.dont_swallow_filter_activated = true -- whether the filter above should be active +``` + +### Preview + +![](https://media.discordapp.net/attachments/635625813143978012/769180910683684864/20-10-23-14-40-32.gif) + +*gif by [Nooo37](https://github.com/Nooo37)* diff --git a/docs/module/tabbed.md b/docs/module/tabbed.md new file mode 100644 index 0000000..1c82253 --- /dev/null +++ b/docs/module/tabbed.md @@ -0,0 +1,45 @@ +## 📑 Tabbed + +Tabbed implements a tab container. There are also different themes for the tabs. + +### Usage + +You should bind these functions to keys in order to use the tabbed module effectively: +```lua +bling.module.tabbed.pick() -- picks a client with your cursor to add to the tabbing group +bling.module.tabbed.pop() -- removes the focused client from the tabbing group +bling.module.tabbed.iter() -- iterates through the currently focused tabbing group +bling.module.tabbed.pick_with_dmenu() -- picks a client with a dmenu application (defaults to rofi, other options can be set with a string parameter like "dmenu") +``` + +### Theme Variables + +```lua +-- For tabbed only +theme.tabbed_spawn_in_tab = false -- whether a new client should spawn into the focused tabbing container + +-- For tabbar in general +theme.tabbar_ontop = false +theme.tabbar_radius = 0 -- border radius of the tabbar +theme.tabbar_style = "default" -- style of the tabbar ("default", "boxes" or "modern") +theme.tabbar_font = "Sans 11" -- font of the tabbar +theme.tabbar_size = 40 -- size of the tabbar +theme.tabbar_position = "top" -- position of the tabbar +theme.tabbar_bg_normal = "#000000" -- background color of the focused client on the tabbar +theme.tabbar_fg_normal = "#ffffff" -- foreground color of the focused client on the tabbar +theme.tabbar_bg_focus = "#1A2026" -- background color of unfocused clients on the tabbar +theme.tabbar_fg_focus = "#ff0000" -- foreground color of unfocused clients on the tabbar + +-- the following variables are currently only for the "modern" tabbar style +theme.tabbar_color_close = "#f9929b" -- chnges the color of the close button +theme.tabbar_color_min = "#fbdf90" -- chnges the color of the minimize button +theme.tabbar_color_float = "#ccaced" -- chnges the color of the float button +``` + +### Preview + +Modern theme: + + + +*screenshot by [javacafe](https://github.com/JavaCafe01)* diff --git a/docs/module/twall.md b/docs/module/twall.md new file mode 100644 index 0000000..73ef4a3 --- /dev/null +++ b/docs/module/twall.md @@ -0,0 +1,25 @@ +## 🏬 Tiled Wallpaper + +### Usage + +The function to set an automatically created tiled wallpaper can be called the following way (you don't need to set every option in the table): +```lua +awful.screen.connect_for_each_screen(function(s) -- that way the wallpaper is applied to every screen + bling.module.tiled_wallpaper("x", s, { -- call the actual function ("x" is the string that will be tiled) + fg = "#ff0000", -- define the foreground color + bg = "#00ffff", -- define the background color + offset_y = 25, -- set a y offset + offset_x = 25, -- set a x offset + font = "Hack", -- set the font (without the size) + font_size = 14, -- set the font size + padding = 100, -- set padding (default is 100) + zickzack = true -- rectangular pattern or criss cross + }) +end) +``` + +### Preview + +![](https://media.discordapp.net/attachments/702548913999314964/773887721294135296/tiled-wallpapers.png?width=1920&height=1080) + +*screenshots by [Nooo37](https://github.com/Nooo37)* diff --git a/docs/module/wall.md b/docs/module/wall.md new file mode 100644 index 0000000..12a5e4d --- /dev/null +++ b/docs/module/wall.md @@ -0,0 +1,127 @@ +## 🎇 Wallpaper Easy Setup + +This is a simple-to-use, extensible, declarative wallpaper manager. + +### Practical Examples + +```lua +-- A default Awesome wallpaper +bling.module.wallpaper.setup() + +-- A slideshow with pictures from different sources changing every 30 minutes +bling.module.wallpaper.setup { + wallpaper = {"/images/my_dog.jpg", "/images/my_cat.jpg"}, + change_timer = 1800 +} + +-- A random wallpaper with images from multiple folders +bling.module.wallpaper.setup { + set_function = bling.module.wallpaper.setters.random + wallpaper = {"/path/to/a/folder", "/path/to/another/folder"}, + change_timer = 631, -- prime numbers are better for timers + position = "fit", + background = "#424242" +} + +-- wallpapers based on a schedule, like awesome-glorious-widgets dynamic wallpaper +-- https://github.com/manilarome/awesome-glorious-widgets/tree/master/dynamic-wallpaper +bling.module.wallpaper.setup { + set_function = wallpaper.setters.simple_schedule, + wallpaper = { + ["06:22:00"] = "morning-wallpaper.jpg", + ["12:00:00"] = "noon-wallpaper.jpg", + ["17:58:00"] = "night-wallpaper.jpg", + ["24:00:00"] = "midnight-wallpaper.jpg", + }, + position = "maximized", +} + +-- random wallpapers, from different folder depending on time of the day +bling.module.wallpaper.setup { + set_function = bling.module.wallpaper.setters.simple_schedule, + wallpaper = { + ["09:00:00"] = "~/Pictures/safe_for_work", + ["18:00:00"] = "~/Pictures/personal", + }, + schedule_set_function = bling.module.wallpaper.setters.random + position = "maximized", + recursive = false, + change_timer = 600 +} +``` +### Details + +The setup function will do 2 things: call the set-function when awesome requests a wallpaper, and manage a timer to call `set_function` periodically. + +Its argument is a args table that is passed to ohter functions (setters and wallpaper functions), so you define everything with setup. + +The `set_function` is a function called every times a wallpaper is needed. + +The module provides some setters: + +* `bling.module.wallpaper.setters.awesome_wallpaper`: beautiful.theme_assets.wallpaper with defaults from beautiful. +* `bling.module.wallpaper.setters.simple`: slideshow from the `wallpaper` argument. +* `bling.module.wallpaper.setters.random`: same as simple but in a random way. +* `bling.module.wallpaper.setters.simple_schedule`: takes a table of `["HH:MM:SS"] = wallpaper` arguments, where wallpaper is the `wallpaper` argument used by `schedule_set_function`. + +A wallpaper is one of the following elements: + +* a color +* an image +* a folder containing images +* a function that sets a wallpaper +* everything gears.wallpaper functions can manage (cairo surface, cairo pattern string) +* a list containing any of the elements above + +```lua +-- This is a valid wallpaper definition +bling.module.wallpaper.setup { + wallpaper = { -- a list + "black", "#112233", -- colors + "wall1.jpg", "wall2.png", -- files + "/path/to/wallpapers", -- folders + -- cairo patterns + "radial:600,50,100:105,550,900:0,#2200ff:0.5,#00ff00:1,#101010", + -- or functions that set a wallpaper + function(args) bling.module.tiled_wallpaper("\\o/", args.screen) end, + bling.module.wallpaper.setters.awesome_wallpaper, + }, + change_timer = 10, +} +``` +The provided setters `simple` and `random` will use 2 internal functions that you can use to write your own setter: + +* `bling.module.wallpaper.prepare_list`: return a list of wallpapers directly usable by `apply` (for now, it just explores folders) +* `bling.module.wallpaper.apply`: a wrapper for gears.wallpaper functions, using the args table of setup + +Here are the defaults: + +```lua +-- Default parameters +bling.module.wallpaper.setup { + screen = nil, -- the screen to apply the wallpaper, as seen in gears.wallpaper functions + change_timer = nil, -- the timer in seconds. If set, call the set_function every change_timer seconds + set_function = nil, -- the setter function + + -- parameters used by bling.module.wallpaper.prepare_list + wallpaper = nil, -- the wallpaper object, see simple or simple_schedule documentation + image_formats = {"jpg", "jpeg", "png", "bmp"}, -- when searching in folder, consider these files only + recursive = true, -- when searching in folder, search also in subfolders + + -- parameters used by bling.module.wallpaper.apply + position = nil, -- use a function of gears.wallpaper when applicable ("centered", "fit", "maximized", "tiled") + background = beautiful.bg_normal or "black", -- see gears.wallpaper functions + ignore_aspect = false, -- see gears.wallpaper.maximized + offset = {x = 0, y = 0}, -- see gears.wallpaper functions + scale = 1, -- see gears.wallpaper.centered + + -- parameters that only apply to bling.module.wallpaper.setter.awesome (as a setter or as a wallpaper function) + colors = { -- see beautiful.theme_assets.wallpaper + bg = beautiful.bg_color, -- the actual default is this color but darkened or lightned + fg = beautiful.fg_color, + alt_fg = beautiful.fg_focus + } +} +``` + +Check documentation in [module/wallpaper.lua](module/wallpaper.lua) for more details. diff --git a/docs/signals/pctl.md b/docs/signals/pctl.md new file mode 100644 index 0000000..b06d69c --- /dev/null +++ b/docs/signals/pctl.md @@ -0,0 +1,88 @@ +## 🎵 Playerctl + +This is a signal module in which you can connect to certain bling signals to grab playerctl info. Currently, this is what it supports: + +- Song title and artist +- Album art (the path this module downloaded the art to) +- If playing or not +- Position +- Song length + +This module relies on `playerctl` and `curl`. If you have this module disabled, you won't need those programs. With this module, you can create a widget like below without worrying about the backend. + +![](https://user-images.githubusercontent.com/33443763/107377569-fa807900-6a9f-11eb-93c1-174c58eb7bf1.png) + +*screenshot by [javacafe](https://github.com/JavaCafe01)* + +### Usage + +To enable: `bling.signal.playerctl.enable()` + +Here are the signals available: + +```lua +-- bling::playerctl::status -- first line is the signal +-- playing (boolean) -- indented lines are function parameters +-- bling::playerctl::title_artist_album +-- title (string) +-- artist (string) +-- album_path (string) +-- bling::playerctl::position +-- interval_sec (number) +-- length_sec (number) +``` + +### Example Implementation + +Lets say we have an imagebox. If I wanted to set the imagebox to show the album art, all I have to do is this: +```lua +local art = wibox.widget { + image = "default_image.png", + resize = true, + forced_height = dpi(80), + forced_width = dpi(80), + widget = wibox.widget.imagebox +} + +local title_widget = wibox.widget { + markup = 'Nothing Playing', + align = 'center', + valign = 'center', + widget = wibox.widget.textbox +} + +local artist_widget = wibox.widget { + markup = 'Nothing Playing', + align = 'center', + valign = 'center', + widget = wibox.widget.textbox +} + +-- Get Song Info +awesome.connect_signal("bling::playerctl::title_artist_album", + function(title, artist, art_path) + -- Set art widget + art:set_image(gears.surface.load_uncached(art_path)) + + -- Set title and artist widgets + title_widget:set_markup_silently(title) + artist_widget:set_markup_silently(artist) +end) +``` +Thats all! You don't even have to worry about updating the widgets, the signals will handle that for you. + +Here's another example in which you get a notification with the album art, title, and artist whenever the song changes. + +```lua +local naughty = require("naughty") + +awesome.connect_signal("bling::playerctl::title_artist_album", + function(title, artist, art_path) + naughty.notify({title = title, text = artist, image = art_path}) +end) +``` + +### Theme Variables +```lua +theme.playerctl_position_update_interval = 1 -- the update interval for fetching the position from playerctl +``` diff --git a/docs/theme.md b/docs/theme.md new file mode 100644 index 0000000..5814a2e --- /dev/null +++ b/docs/theme.md @@ -0,0 +1,54 @@ +```lua +--[[ Bling theme variables template +This file has all theme variables of the bling module. +Every variable has a small comment on what it does. +You might just want to copy that whole part into your theme.lua and start adjusting from there. +--]] + + +-- window swallowing +theme.dont_swallow_classname_list = {"firefox", "Gimp"} -- list of class names that should not be swallowed +theme.dont_swallow_filter_activated = true -- whether the filter above should be active + +-- flash focus +theme.flash_focus_start_opacity = 0.6 -- the starting opacity +theme.flash_focus_step = 0.01 -- the step of animation + +-- playerctl signal +theme.playerctl_position_update_interval = 1 -- the update interval for fetching the position from playerctl + +-- tabbed +theme.tabbed_spawn_in_tab = false -- whether a new client should spawn into the focused tabbing container + +-- tabbar general +theme.tabbar_ontop = false +theme.tabbar_radius = 0 -- border radius of the tabbar +theme.tabbar_style = "default" -- style of the tabbar ("default", "boxes" or "modern") +theme.tabbar_font = "Sans 11" -- font of the tabbar +theme.tabbar_size = 40 -- size of the tabbar +theme.tabbar_position = "top" -- position of the tabbar +theme.tabbar_bg_normal = "#000000" -- background color of the focused client on the tabbar +theme.tabbar_fg_normal = "#ffffff" -- foreground color of the focused client on the tabbar +theme.tabbar_bg_focus = "#1A2026" -- background color of unfocused clients on the tabbar +theme.tabbar_fg_focus = "#ff0000" -- foreground color of unfocused clients on the tabbar + +-- mstab +theme.mstab_bar_ontop = false -- whether you want to allow the bar to be ontop of clients +theme.mstab_dont_resize_slaves = false -- whether the tabbed stack windows should be smaller than the + -- currently focused stack window (set it to true if you use + -- transparent terminals. False if you use shadows on solid ones +theme.mstab_bar_padding = "default" -- how much padding there should be between clients and your tabbar + -- by default it will adjust based on your useless gaps. + -- If you want a custom value. Set it to the number of pixels (int) +theme.mstab_border_radius = 0 -- border radius of the tabbar +theme.mstab_bar_height = 40 -- height of the tabbar +theme.mstab_tabbar_position = "top" -- position of the tabbar (mstab currently does not support left,right) +theme.mstab_tabbar_style = "default" -- style of the tabbar ("default", "boxes" or "modern") + -- defaults to the tabbar_style so only change if you want a + -- different style for mstab and tabbed + +-- the following variables are currently only for the "modern" tabbar style +theme.tabbar_color_close = "#f9929b" -- chnges the color of the close button +theme.tabbar_color_min = "#fbdf90" -- chnges the color of the minimize button +theme.tabbar_color_float = "#ccaced" -- chnges the color of the float button +```