mirror of
https://gitlab.com/dwt1/dotfiles.git
synced 2026-04-24 03:50:24 +10:00
Awesome configs for Ben.
This commit is contained in:
15
.config/awesome/lain/wiki/Home.md
Executable file → Normal file
15
.config/awesome/lain/wiki/Home.md
Executable file → Normal file
@@ -1,16 +1,13 @@
|
||||
Welcome to the Lain wiki!
|
||||
|
||||
If you spot a typo or have a suggestion to improve these pages, please notify me opening an [issue](https://github.com/lcpz/lain/issues) format. Thank you.
|
||||
If you spot a typo or have a suggestion, please notify me opening an [issue](https://github.com/copycat-killer/lain/issues) format. Thank you.
|
||||
|
||||
Dependencies
|
||||
Dependency
|
||||
------------
|
||||
|
||||
Package | Requested by | Reasons of choice
|
||||
--- | --- | ---
|
||||
[curl](https://curl.haxx.se) | `imap`, `mpd`, and `weather` widgets | 1. faster and simpler to use than [LuaSocket](https://github.com/diegonehab/luasocket); 2. it's in the core of almost every distro; 3. can be called [asynchronously](https://awesomewm.org/doc/api/libraries/awful.spawn.html#easy_async)
|
||||
GLib >= 2.54 | `fs` widget | Pure Awesome/Lua implementation.
|
||||
|
||||
The second dependency will be removed once all major distros update their Gio/Glib versions.
|
||||
|
||||
Installation
|
||||
------------
|
||||
@@ -22,7 +19,7 @@ Installation
|
||||
### Other distributions
|
||||
|
||||
```shell
|
||||
git clone https://github.com/lcpz/lain.git ~/.config/awesome/lain
|
||||
git clone https://github.com/copycat-killer/lain.git ~/.config/awesome/lain
|
||||
```
|
||||
|
||||
Also available via [LuaRocks](https://luarocks.org/modules/aajjbb/lain).
|
||||
@@ -38,6 +35,6 @@ local lain = require("lain")
|
||||
|
||||
Then check out the submodules you want:
|
||||
|
||||
- [Layouts](https://github.com/lcpz/lain/wiki/Layouts)
|
||||
- [Widgets](https://github.com/lcpz/lain/wiki/Widgets)
|
||||
- [Utilities](https://github.com/lcpz/lain/wiki/Utilities)
|
||||
- [Layouts](https://github.com/copycat-killer/lain/wiki/Layouts)
|
||||
- [Widgets](https://github.com/copycat-killer/lain/wiki/Widgets)
|
||||
- [Utilities](https://github.com/copycat-killer/lain/wiki/Utilities)
|
||||
|
||||
8
.config/awesome/lain/wiki/Layouts.md
Executable file → Normal file
8
.config/awesome/lain/wiki/Layouts.md
Executable file → Normal file
@@ -222,12 +222,12 @@ Following are a couple of `uselesstile` variants that were not part of lain. The
|
||||
Xmonad-like
|
||||
-----------
|
||||
|
||||
If you want to have `awful.layout.suit.tile` behave like xmonad, with internal gaps two times wider than external ones, download [this](https://gist.github.com/lcpz/9e56dcfbe66bfe14967c) as `lain/layout/uselesstile`.
|
||||
If you want to have `awful.layout.suit.tile` behave like xmonad, with internal gaps two times wider than external ones, download [this](https://gist.github.com/copycat-killer/9e56dcfbe66bfe14967c) as `lain/layout/uselesstile`.
|
||||
|
||||
Inverted master
|
||||
---------------
|
||||
|
||||
Want to invert master window position? Use [this](https://gist.github.com/lcpz/c59dc59c9f99d98218eb) version. You can set `single_gap` with `width` and `height` in your `theme.lua`, in order to define the window geometry when there's only one client, otherwise it goes maximized. An example:
|
||||
Want to invert master window position? Use [this](https://gist.github.com/copycat-killer/c59dc59c9f99d98218eb) version. You can set `single_gap` with `width` and `height` in your `theme.lua`, in order to define the window geometry when there's only one client, otherwise it goes maximized. An example:
|
||||
|
||||
theme.single_gap = { width = 600, height = 100 }
|
||||
|
||||
@@ -246,10 +246,10 @@ theme.layout_centerfair = theme.lain_icons .. "centerfair.png" -- termfair.cen
|
||||
theme.layout_cascade = theme.lain_icons .. "cascade.png"
|
||||
theme.layout_cascadetile = theme.lain_icons .. "cascadetile.png" -- cascade.tile
|
||||
theme.layout_centerwork = theme.lain_icons .. "centerwork.png"
|
||||
theme.layout_centerworkh = theme.lain_icons .. "centerworkh.png" -- centerwork.horizontal
|
||||
theme.layout_centerhwork = theme.lain_icons .. "centerworkh.png" -- centerwork.horizontal
|
||||
```
|
||||
|
||||
Credit goes to [Nicolas Estibals](https://github.com/nestibal) for creating
|
||||
Credits go to [Nicolas Estibals](https://github.com/nestibal) for creating
|
||||
layout icons for default theme.
|
||||
|
||||
You can use them as a template for your custom versions.
|
||||
113
.config/awesome/lain/wiki/Utilities.md
Executable file → Normal file
113
.config/awesome/lain/wiki/Utilities.md
Executable file → Normal file
@@ -40,12 +40,12 @@ Variable | Meaning | Type | Default
|
||||
`name` | client name | string | "QuakeDD"
|
||||
`argname` | how to specify client name | string | "-name %s"
|
||||
`extra` | extra `app` arguments | string | empty string
|
||||
`border` | border width | integer | 1
|
||||
`border` | border width | number | 1
|
||||
`visible` | initially visible | boolean | false
|
||||
`followtag` | always spawn on currently focused screen | boolean | false
|
||||
`overlap` | Overlap the wibox or not | boolean | false
|
||||
`settings` | Additional settings to make on the client | function | `nil`
|
||||
`screen` | screen where to spawn the client | integer | `awful.screen.focused()`
|
||||
`settings` | Additional settings to make on the client | function | nil
|
||||
`screen` | screen where to spawn the client | number | `awful.screen.focused()`
|
||||
`height` | dropdown client height | float in [0,1] or exact pixels number | 0.25
|
||||
`width` | dropdown client width | float in [0,1] or exact pixels number | 1
|
||||
`vert` | vertical position | string, possible values: "top", "bottom", "center" | "top"
|
||||
@@ -64,10 +64,10 @@ Read [here](https://awesomewm.org/doc/api/classes/client.html#Object_properties)
|
||||
|
||||
**Notes**
|
||||
|
||||
* [Does not work](https://github.com/lcpz/lain/issues/358) with `gnome-terminal`, `konsole`, or any other terminal which is strictly designed for a Desktop Environment. Just pick a better terminal, [there's plenty](https://wiki.archlinux.org/index.php/List_of_applications#Terminal_emulators).
|
||||
* Set `followtag = true` if [experiencing issues with multiple screens](https://github.com/lcpz/lain/issues/346).
|
||||
* [Does not work](https://github.com/copycat-killer/lain/issues/358) with `gnome-terminal`, `konsole`, or any other terminal which is strictly designed for a Desktop Environment. Just pick a better terminal, [there's plenty](https://wiki.archlinux.org/index.php/List_of_applications#Terminal_emulators).
|
||||
* Set `followtag = true` if [experiencing issues with multiscreen setups](https://github.com/copycat-killer/lain/issues/346).
|
||||
* If you have a `awful.client.setslave` rule for your application, ensure you use an exception for `QuakeDD` (or your defined `name`). Otherwise, you may run into problems with focus.
|
||||
* If you are using a VTE-based terminal like `termite`, be sure to set [`argname = "--name %s"`](https://github.com/lcpz/lain/issues/211).
|
||||
* If you are using a VTE-based terminal like `termite`, be sure to set [`argname = "--name %s"`](https://github.com/copycat-killer/lain/issues/211).
|
||||
|
||||
Separators
|
||||
----------
|
||||
@@ -170,17 +170,9 @@ Useless gaps resize
|
||||
|
||||
Changes `beautiful.useless_gaps` on the fly.
|
||||
|
||||
```lua
|
||||
lain.util.useless_gap_resize(thatmuch, s, t)
|
||||
```
|
||||
The function takes an integer argument, being the amount of pixel to add/remove to gaps.
|
||||
|
||||
The argument `thatmuch` is the number of pixel to add to/substract from gaps (integer).
|
||||
|
||||
The arguments `s` and `t` are the `awful.screen` and `awful.tag` in which you want to change the gap. They are optional.
|
||||
|
||||
Following are example keybindings for changing client gaps on current screen and tag.
|
||||
|
||||
Example 1:
|
||||
You could use it with these keybindings:
|
||||
|
||||
```lua
|
||||
-- On the fly useless gaps change
|
||||
@@ -188,7 +180,7 @@ awful.key({ altkey, "Control" }, "+", function () lain.util.useless_gaps_resize(
|
||||
awful.key({ altkey, "Control" }, "-", function () lain.util.useless_gaps_resize(-1) end),
|
||||
```
|
||||
|
||||
where `altkey = Mod1`. Example 2:
|
||||
where `altkey = Mod1`, or you could use it like this:
|
||||
|
||||
```lua
|
||||
mywidget:buttons(awful.util.table.join (
|
||||
@@ -238,7 +230,7 @@ clientkeys = awful.util.table.join(
|
||||
|
||||
If you want to "de-magnify" it, just retype the keybinding.
|
||||
|
||||
If you want magnified client to respond to `incmwfact`, read [here](https://github.com/lcpz/lain/issues/195).
|
||||
If you want magnified client to respond to `incmwfact`, read [here](https://github.com/copycat-killer/lain/issues/195).
|
||||
|
||||
menu\_clients\_current\_tags
|
||||
----------------------------
|
||||
@@ -251,88 +243,3 @@ awful.key({ "Mod1" }, "Tab", function()
|
||||
lain.util.menu_clients_current_tags({ width = 350 }, { keygrabber = true })
|
||||
end),
|
||||
```
|
||||
|
||||
menu\_iterator
|
||||
--------------
|
||||
|
||||
A generic menu utility which enables iteration over lists of possible
|
||||
actions to execute. The perfect example is a menu for choosing what
|
||||
configuration to apply to X with `xrandr`, as suggested on the [Awesome wiki page](https://awesomewm.org/recipes/xrandr).
|
||||
|
||||
<p align="center">
|
||||
<img src="https://user-images.githubusercontent.com/4147254/36317474-3027f8b6-130b-11e8-9b6b-9a2cf55ae841.gif"/>
|
||||
<br>An example Synergy menu, courtesy of <a href="https://github.com/sim590/dotfiles/blob/master/awesome/rc/xrandr.lua">sim590</a>
|
||||
</p>
|
||||
|
||||
You can either manually create a menu by defining a table in this format:
|
||||
|
||||
```lua
|
||||
{ { "choice description 1", callbackFuction1 }, { "choice description 2", callbackFunction2 }, ... }
|
||||
```
|
||||
|
||||
or use `util.menu_iterator.menu`. Once you have your menu, use it with `lain.menu_iterator.iterate`.
|
||||
|
||||
### Input tables
|
||||
|
||||
**lain.menu_iterator.iterate**
|
||||
|
||||
| Argument | Description | Type
|
||||
|---|---| ---
|
||||
| `menu` | the menu to iterate on | table
|
||||
| `timeout` | time (in seconds) to wait on a choice before the choice is accepted | integer (default: 4)
|
||||
| `icon` | path to the icon to display in `naughty.notify` window | string
|
||||
|
||||
**lain.menu_iterator.menu**
|
||||
|
||||
| Argument | Description | Type
|
||||
|---|---| ---
|
||||
`choices` | list of choices (e.g., `{ "choice1", "choice2", ... }`) | array of strings
|
||||
`name` | name of the program related to this menu | string
|
||||
`selected_cb` | callback to execute for each selected choice, it takes one choice (string) as argument; can be `nil` (no action to execute) | function
|
||||
`rejected_cb` | callback to execute for all rejected choices (the remaining choices, once one is selected), it takes one choice (string) as argument; can be `nil` (no action to execute) | function
|
||||
`extra_choices` | more choices to be added to the menu; unlike `choices`, these ones won't trigger `rejected_cb` | array of `{ choice, callback }` pairs, where `choice` is a string and `callback` is a function
|
||||
`combination` | how choices have to be combined in the menu; possible values are: "single" (default), the set of possible choices will simply be the input set ; "powerset", the set of possible choices will be the [power set](https://en.wikipedia.org/wiki/Power_set) of the input set | string
|
||||
|
||||
### Examples
|
||||
|
||||
A simple example is:
|
||||
|
||||
```lua
|
||||
local mymenu_iterable = lain.util.menu_iterator.menu {
|
||||
choices = {"My first choice", "My second choice"},
|
||||
name = "My awesome program",
|
||||
selected_cb = function(choice)
|
||||
-- do something with selected choice
|
||||
end,
|
||||
rejected_cb = function(choice)
|
||||
-- do something with every rejected choice
|
||||
end
|
||||
}
|
||||
```
|
||||
|
||||
The variable `mymenu_iterable` is a menu compatible with the function `lain.util.menu_iterator.iterate`, which will iterate over it and displays notification with `naughty.notify` every time it is called. You can use it like this:
|
||||
|
||||
```lua
|
||||
local confirm_timeout = 5 -- time to wait before confirming the menu selection
|
||||
local my_notify_icon = "/path/to/icon" -- the icon to display in the notification
|
||||
lain.util.menu_iterator.iterate(mymenu_iterable, confirm_timeout, my_notify_icon)
|
||||
```
|
||||
|
||||
Once `confirm_timeout` has passed without anymore calls to `iterate`, the choice is made and the associated callbacks (both for selected and rejected choices) are spawned.
|
||||
|
||||
A useful practice is to add a `Cancel` option as an extra choice for canceling a menu selection. Extending the above example:
|
||||
|
||||
```lua
|
||||
local mymenu_iterable = lain.util.menu_iterator.menu {
|
||||
choices = {"My first choice", "My second choice"},
|
||||
name = "My awesome program",
|
||||
selected_cb = function(choice)
|
||||
-- do something with selected choice
|
||||
end,
|
||||
rejected_cb = function(choice)
|
||||
-- do something with every rejected choice
|
||||
end
|
||||
-- nil means no action to do
|
||||
extra_choices = { {"Cancel"}, nil }
|
||||
}
|
||||
```
|
||||
|
||||
43
.config/awesome/lain/wiki/Widgets.md
Executable file → Normal file
43
.config/awesome/lain/wiki/Widgets.md
Executable file → Normal file
@@ -4,7 +4,7 @@ Every lain widget is a table.
|
||||
|
||||
A lain widget is generated by a `function`.
|
||||
|
||||
The `function` signature, input and output arguments can be found in the [related wiki entry](https://github.com/lcpz/lain/wiki/Widgets#index).
|
||||
The `function` signature, input and output arguments can be found in the [related wiki entry](https://github.com/copycat-killer/lain/wiki/Widgets#index).
|
||||
|
||||
Every lain widget contains a `wibox.widget`, which is updated by a timed function. To access the widget, use the field `widget`, while to access the timed function, use the field `update`. Some lain widgets may also have an `icon` field, which is a `wibox.widget.imagebox`, and/or a `timer` field, which is the `gears.timer` on `update`.
|
||||
|
||||
@@ -27,29 +27,30 @@ local cpu = lain.widget.cpu {
|
||||
-- to access the widget: cpu.widget
|
||||
```
|
||||
|
||||
If you want to see some applications, check [awesome-copycats](https://github.com/lcpz/awesome-copycats).
|
||||
If you want to see some applications, check [awesome-copycats](https://github.com/copycat-killer/awesome-copycats).
|
||||
|
||||
# Index
|
||||
|
||||
- [alsa](https://github.com/lcpz/lain/wiki/alsa)
|
||||
- [alsabar](https://github.com/lcpz/lain/wiki/alsabar)
|
||||
- [bat](https://github.com/lcpz/lain/wiki/bat)
|
||||
- [cal](https://github.com/lcpz/lain/wiki/cal)
|
||||
- [cpu](https://github.com/lcpz/lain/wiki/cpu)
|
||||
- [fs](https://github.com/lcpz/lain/wiki/fs)
|
||||
- [imap](https://github.com/lcpz/lain/wiki/imap)
|
||||
- [mem](https://github.com/lcpz/lain/wiki/mem)
|
||||
- [mpd](https://github.com/lcpz/lain/wiki/mpd)
|
||||
- [net](https://github.com/lcpz/lain/wiki/net)
|
||||
- [pulse](https://github.com/lcpz/lain/wiki/pulse)
|
||||
- [pulsebar](https://github.com/lcpz/lain/wiki/pulsebar)
|
||||
- [sysload](https://github.com/lcpz/lain/wiki/sysload)
|
||||
- [temp](https://github.com/lcpz/lain/wiki/temp)
|
||||
- [weather](https://github.com/lcpz/lain/wiki/weather)
|
||||
- [alsa](https://github.com/copycat-killer/lain/wiki/alsa)
|
||||
- [alsabar](https://github.com/copycat-killer/lain/wiki/alsabar)
|
||||
- [bat](https://github.com/copycat-killer/lain/wiki/bat)
|
||||
- [calendar](https://github.com/copycat-killer/lain/wiki/calendar)
|
||||
- [cpu](https://github.com/copycat-killer/lain/wiki/cpu)
|
||||
- [fs](https://github.com/copycat-killer/lain/wiki/fs)
|
||||
- [imap](https://github.com/copycat-killer/lain/wiki/imap)
|
||||
- [mem](https://github.com/copycat-killer/lain/wiki/mem)
|
||||
- [mpd](https://github.com/copycat-killer/lain/wiki/mpd)
|
||||
- [net](https://github.com/copycat-killer/lain/wiki/net)
|
||||
- [pulse](https://github.com/copycat-killer/lain/wiki/pulse)
|
||||
- [pulsebar](https://github.com/copycat-killer/lain/wiki/pulsebar)
|
||||
- [sysload](https://github.com/copycat-killer/lain/wiki/sysload)
|
||||
- [temp](https://github.com/copycat-killer/lain/wiki/temp)
|
||||
- [weather](https://github.com/copycat-killer/lain/wiki/weather)
|
||||
|
||||
## Users contributed
|
||||
|
||||
- [moc](https://github.com/lcpz/lain/wiki/moc)
|
||||
- [redshift](https://github.com/lcpz/lain/wiki/redshift)
|
||||
- [task](https://github.com/lcpz/lain/wiki/task)
|
||||
- [tp_smapi](https://github.com/lcpz/lain/wiki/tp_smapi)
|
||||
- [kbdlayout](https://github.com/copycat-killer/lain/wiki/kbdlayout)
|
||||
- [moc](https://github.com/copycat-killer/lain/wiki/moc)
|
||||
- [redshift](https://github.com/copycat-killer/lain/wiki/redshift)
|
||||
- [task](https://github.com/copycat-killer/lain/wiki/task)
|
||||
- [tpbat](https://github.com/copycat-killer/lain/wiki/tpbat)
|
||||
|
||||
2
.config/awesome/lain/wiki/_Footer.md
Executable file → Normal file
2
.config/awesome/lain/wiki/_Footer.md
Executable file → Normal file
@@ -1 +1 @@
|
||||
[Home](https://github.com/lcpz/lain/wiki) • [Layouts](https://github.com/lcpz/lain/wiki/Layouts) • [Widgets](https://github.com/lcpz/lain/wiki/Widgets) • [Utilities](https://github.com/lcpz/lain/wiki/Utilities)
|
||||
[Home](https://github.com/copycat-killer/lain/wiki) • [Layouts](https://github.com/copycat-killer/lain/wiki/Layouts) • [Widgets](https://github.com/copycat-killer/lain/wiki/Widgets) • [Utilities](https://github.com/copycat-killer/lain/wiki/Utilities)
|
||||
|
||||
51
.config/awesome/lain/wiki/_Sidebar.md
Executable file → Normal file
51
.config/awesome/lain/wiki/_Sidebar.md
Executable file → Normal file
@@ -1,26 +1,25 @@
|
||||
* [Home](https://github.com/lcpz/lain/wiki/Home)
|
||||
* [Layouts](https://github.com/lcpz/lain/wiki/Layouts)
|
||||
* [Usage](https://github.com/lcpz/lain/wiki/Layouts#Usage)
|
||||
* [How do layouts work?](https://github.com/lcpz/lain/wiki/Layouts#how-do-layouts-work)
|
||||
* [termfair](https://github.com/lcpz/lain/wiki/Layouts#termfair)
|
||||
* [centerfair](https://github.com/lcpz/lain/wiki/Layouts#termfaircenter)
|
||||
* [cascade](https://github.com/lcpz/lain/wiki/Layouts#cascade)
|
||||
* [cascadetile](https://github.com/lcpz/lain/wiki/Layouts#cascadetile)
|
||||
* [centerwork](https://github.com/lcpz/lain/wiki/Layouts#centerwork)
|
||||
* [centerworkh](https://github.com/lcpz/lain/wiki/Layouts#centerworkhorizontal)
|
||||
* [Pre 4.0 uselesstile patches](https://github.com/lcpz/lain/wiki/Layouts#pre-40-uselesstile-patches)
|
||||
* [What about layout icons?](https://github.com/lcpz/lain/wiki/Layouts#what-about-layout-icons)
|
||||
* [Widgets](https://github.com/lcpz/lain/wiki/Widgets)
|
||||
* [Usage](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
* [Index](https://github.com/lcpz/lain/wiki/Widgets#index)
|
||||
* [Users contributed](https://github.com/lcpz/lain/wiki/Widgets#users-contributed)
|
||||
* [Utilities](https://github.com/lcpz/lain/wiki/Utilities)
|
||||
* [quake](https://github.com/lcpz/lain/wiki/Utilities#quake)
|
||||
* [separators](https://github.com/lcpz/lain/wiki/Utilities#separators)
|
||||
* [markup](https://github.com/lcpz/lain/wiki/Utilities#markup)
|
||||
* [dynamic tagging](https://github.com/lcpz/lain/wiki/Utilities#dynamic-tagging)
|
||||
* [useless_gaps_resize](https://github.com/lcpz/lain/wiki/Utilities#useless-gaps-resize)
|
||||
* [tag_view_non_empty](https://github.com/lcpz/lain/wiki/Utilities#tag_view_nonempty)
|
||||
* [magnify_client](https://github.com/lcpz/lain/wiki/Utilities#magnify_client)
|
||||
* [menu_clients_current_tags](https://github.com/lcpz/lain/wiki/Utilities#menu_clients_current_tags)
|
||||
* [menu_iterator](https://github.com/lcpz/lain/wiki/Utilities#menu_iterator)
|
||||
* [Home](https://github.com/copycat-killer/lain/wiki/Home)
|
||||
* [Layouts](https://github.com/copycat-killer/lain/wiki/Layouts)
|
||||
* [Usage](https://github.com/copycat-killer/lain/wiki/Layouts#Usage)
|
||||
* [How do layouts work?](https://github.com/copycat-killer/lain/wiki/Layouts#how-do-layouts-work)
|
||||
* [termfair](https://github.com/copycat-killer/lain/wiki/Layouts#termfair)
|
||||
* [centerfair](https://github.com/copycat-killer/lain/wiki/Layouts#termfaircenter)
|
||||
* [cascade](https://github.com/copycat-killer/lain/wiki/Layouts#cascade)
|
||||
* [cascadetile](https://github.com/copycat-killer/lain/wiki/Layouts#cascadetile)
|
||||
* [centerwork](https://github.com/copycat-killer/lain/wiki/Layouts#centerwork)
|
||||
* [centerworkh](https://github.com/copycat-killer/lain/wiki/Layouts#centerworkhorizontal)
|
||||
* [Pre 4.0 uselesstile patches](https://github.com/copycat-killer/lain/wiki/Layouts#pre-40-uselesstile-patches)
|
||||
* [What about layout icons?](https://github.com/copycat-killer/lain/wiki/Layouts#what-about-layout-icons)
|
||||
* [Widgets](https://github.com/copycat-killer/lain/wiki/Widgets)
|
||||
* [Usage](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
* [Index](https://github.com/copycat-killer/lain/wiki/Widgets#index)
|
||||
* [Users contributed](https://github.com/copycat-killer/lain/wiki/Widgets#users-contributed)
|
||||
* [Utilities](https://github.com/copycat-killer/lain/wiki/Utilities)
|
||||
* [quake](https://github.com/copycat-killer/lain/wiki/Utilities#quake)
|
||||
* [separators](https://github.com/copycat-killer/lain/wiki/Utilities#separators)
|
||||
* [markup](https://github.com/copycat-killer/lain/wiki/Utilities#markup)
|
||||
* [dynamic tagging](https://github.com/copycat-killer/lain/wiki/Utilities#dynamic-tagging)
|
||||
* [useless_gaps_resize](https://github.com/copycat-killer/lain/wiki/Utilities#useless-gaps-resize)
|
||||
* [tag_view_non_empty](https://github.com/copycat-killer/lain/wiki/Utilities#tag_view_nonempty)
|
||||
* [magnify_client](https://github.com/copycat-killer/lain/wiki/Utilities#magnify_client)
|
||||
* [menu_clients_current_tags](https://github.com/copycat-killer/lain/wiki/Utilities#menu_clients_current_tags)
|
||||
16
.config/awesome/lain/wiki/alsa.md
Executable file → Normal file
16
.config/awesome/lain/wiki/alsa.md
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
@@ -14,7 +14,7 @@ local volume = lain.widget.alsa()
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 5
|
||||
`timeout` | Refresh timeout seconds | number | 5
|
||||
`cmd` | Alsa mixer command | string | "amixer"
|
||||
`channel` | Mixer channel | string | "Master"
|
||||
`togglechannel` | Toggle channel | string | `nil`
|
||||
@@ -26,7 +26,7 @@ Variable | Meaning | Type | Default
|
||||
|
||||
Variable | Meaning | Type | Values
|
||||
--- | --- | --- | ---
|
||||
`volume_now.level` | Volume level | integer | 0-100
|
||||
`volume_now.level` | Volume level | number | 0-100
|
||||
`volume_now.status` | Device status | string | "on", "off"
|
||||
|
||||
## Output table
|
||||
@@ -82,19 +82,19 @@ volume.widget:buttons(awful.util.table.join(
|
||||
awful.spawn(string.format("%s -e alsamixer", terminal))
|
||||
end),
|
||||
awful.button({}, 2, function() -- middle click
|
||||
os.execute(string.format("%s set %s 100%%", volume.cmd, volume.channel))
|
||||
awful.spawn(string.format("%s set %s 100%%", volume.cmd, volume.channel))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 3, function() -- right click
|
||||
os.execute(string.format("%s set %s toggle", volume.cmd, volume.togglechannel or volume.channel))
|
||||
awful.spawn(string.format("%s set %s toggle", volume.cmd, volume.togglechannel or volume.channel))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 4, function() -- scroll up
|
||||
os.execute(string.format("%s set %s 1%%+", volume.cmd, volume.channel))
|
||||
awful.spawn(string.format("%s set %s 1%%+", volume.cmd, volume.channel))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 5, function() -- scroll down
|
||||
os.execute(string.format("%s set %s 1%%-", volume.cmd, volume.channel))
|
||||
awful.spawn(string.format("%s set %s 1%%-", volume.cmd, volume.channel))
|
||||
volume.update()
|
||||
end)
|
||||
))
|
||||
@@ -133,4 +133,4 @@ awful.key({ altkey, "Control" }, "0",
|
||||
end),
|
||||
```
|
||||
|
||||
where `altkey = "Mod1"`.
|
||||
where `altkey = "Mod1"`.
|
||||
30
.config/awesome/lain/wiki/alsabar.md
Executable file → Normal file
30
.config/awesome/lain/wiki/alsabar.md
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
@@ -14,33 +14,31 @@ local volume = lain.widget.alsabar()
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 5
|
||||
`timeout` | Refresh timeout seconds | number | 5
|
||||
`settings` | User settings | function | empty function
|
||||
`width` | Bar width | number | 63
|
||||
`height` | Bar height | number | 1
|
||||
`margins` | Bar margins | number | 1
|
||||
`paddings` | Bar paddings | number | 1
|
||||
`ticks` | Set bar ticks on | boolean | false
|
||||
`ticks_size` | Ticks size | integer | 7
|
||||
`ticks_size` | Ticks size | number | 7
|
||||
`cmd` | ALSA mixer command | string | "amixer"
|
||||
`channel` | Mixer channel | string | "Master"
|
||||
`togglechannel` | Toggle channel | string | `nil`
|
||||
`colors` | Bar colors | table | see [Default colors](https://github.com/lcpz/lain/wiki/alsabar#default-colors)
|
||||
`notification_preset` | Notification preset | table | See [default `notification_preset`](https://github.com/lcpz/lain/wiki/alsabar#default-notification_preset)
|
||||
`colors` | Bar colors | table | see [Default colors](https://github.com/copycat-killer/lain/wiki/alsabar#default-colors)
|
||||
`notification_preset` | Notification preset | table | See [default `notification_preset`](https://github.com/copycat-killer/lain/wiki/alsabar#default-notification_preset)
|
||||
`followtag` | Display the notification on currently focused screen | boolean | false
|
||||
|
||||
`cmd` is useful if you need to pass additional arguments to `amixer`. For instance, you may want to define `cmd = "amixer -c X"` in order to set amixer with card `X`.
|
||||
`cmd` is useful if you need to pass additional arguments to `amixer`. For instance, you may want to define `command = "amixer -c X"` in order to set amixer with card `X`.
|
||||
|
||||
In case mute toggling can't be mapped to master channel (this happens, for instance, when you are using an HDMI output), define `togglechannel` as your S/PDIF device. Read [`alsa`](https://github.com/lcpz/lain/wiki/alsa#toggle-channel) page to know how.
|
||||
In case mute toggling can't be mapped to master channel (this happens, for instance, when you are using an HDMI output), define `togglechannel` as your S/PDIF device. Read [`alsa`](https://github.com/copycat-killer/lain/wiki/alsa#toggle-channel) page to know how.
|
||||
|
||||
`settings` can use the following variables:
|
||||
|
||||
Variable | Meaning | Type | Values
|
||||
--- | --- | --- | ---
|
||||
`volume_now.level` | Volume level | integer | 0-100
|
||||
`volume_now.level` | Volume level | number | 0-100
|
||||
`volume_now.status` | Device status | string | "on", "off"
|
||||
|
||||
With multiple screens, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
In multiple screen setups, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
|
||||
### Default colors
|
||||
|
||||
@@ -79,19 +77,19 @@ volume.bar:buttons(awful.util.table.join(
|
||||
awful.spawn(string.format("%s -e alsamixer", terminal))
|
||||
end),
|
||||
awful.button({}, 2, function() -- middle click
|
||||
os.execute(string.format("%s set %s 100%%", volume.cmd, volume.channel))
|
||||
awful.spawn(string.format("%s set %s 100%%", volume.cmd, volume.channel))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 3, function() -- right click
|
||||
os.execute(string.format("%s set %s toggle", volume.cmd, volume.togglechannel or volume.channel))
|
||||
awful.spawn(string.format("%s set %s toggle", volume.cmd, volume.togglechannel or volume.channel))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 4, function() -- scroll up
|
||||
os.execute(string.format("%s set %s 1%%+", volume.cmd, volume.channel))
|
||||
awful.spawn(string.format("%s set %s 1%%+", volume.cmd, volume.channel))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 5, function() -- scroll down
|
||||
os.execute(string.format("%s set %s 1%%-", volume.cmd, volume.channel))
|
||||
awful.spawn(string.format("%s set %s 1%%-", volume.cmd, volume.channel))
|
||||
volume.update()
|
||||
end)
|
||||
))
|
||||
@@ -99,4 +97,4 @@ volume.bar:buttons(awful.util.table.join(
|
||||
|
||||
## Keybindings
|
||||
|
||||
Read [here](https://github.com/lcpz/lain/wiki/alsa#keybindings). If you want notifications, use `volume.notify()` instead of `volume.update()`.
|
||||
Read [here](https://github.com/copycat-killer/lain/wiki/alsa#keybindings). If you want notifications, use `volume.notify()` instead of `volume.update()`.
|
||||
66
.config/awesome/lain/wiki/bat.md
Executable file → Normal file
66
.config/awesome/lain/wiki/bat.md
Executable file → Normal file
@@ -1,13 +1,13 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
Shows the remaining time and percentage capacity of your laptop battery, as well
|
||||
as the current wattage. Multiple batteries are supported.
|
||||
Shows the remaining time and percentage capacity of your laptop battery, as well as
|
||||
the current wattage. Multiple batteries are supported.
|
||||
|
||||
Displays a notification when battery is fully charged, low, or critical.
|
||||
Displays a notification when battery is low or critical.
|
||||
|
||||
```lua
|
||||
local mybattery = lain.widget.bat()
|
||||
@@ -17,54 +17,35 @@ local mybattery = lain.widget.bat()
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 30
|
||||
`pspath` | Power supply directory path | string | "/sys/class/power_supply/"
|
||||
`battery` | Single battery id | string | autodetected
|
||||
`batteries` | Multiple batteries id table | table of strings | autodetected
|
||||
`ac` | AC | string | autodetected
|
||||
`timeout` | Refresh timeout seconds | number | 30
|
||||
`battery` | Single battery id | string | "BAT0"
|
||||
`batteries` | Multiple batteries id table | table of strings | `{"BAT0"}`
|
||||
`ac` | AC | string | "AC0"
|
||||
`notify` | Show notification popups | string | "on"
|
||||
`n_perc` | Percentages assumed for critical and low battery levels | table of integers | `{5, 15}`
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
The widget will try to autodetect `battery`, `batteries` and `ac`. If something
|
||||
goes wrong, you will have to define them manually. In that case, you only have
|
||||
to define one between `battery` and `batteries`. If you have one battery, you
|
||||
can either use `args.battery = "BAT*"` or `args.batteries = {"BAT*"}`, where `BAT*`
|
||||
is the identifier of your battery in `pspath` (do not use it as a wildcard).
|
||||
Of course, if you have multiple batteries, you need to use the latter option.
|
||||
You only have to define one between `battery` and `batteries`.
|
||||
|
||||
To disable notifications, set `notify` to `"off"`.
|
||||
If you have one battery, you can either use `args.battery = "BAT*"` or `args.batteries = {"BAT*"}`. Of course, if you have multiple batteries, you need to use the latter option.
|
||||
|
||||
If you define `pspath`, **be sure** to not forget the final slash (/).
|
||||
To disable warning notifications, set `notify` to `"off"`.
|
||||
|
||||
`settings` can use the `bat_now` table, which contains the following strings:
|
||||
|
||||
- `status`, general status ("N/A", "Discharging", "Charging", "Full");
|
||||
- `status`, battery status ("N/A", "Discharging", "Charging", "Full");
|
||||
- `n_status[i]`, i-th battery status (like above);
|
||||
- `ac_status`, AC-plug flag (0 if cable is unplugged, 1 if plugged, "N/A" otherwise);
|
||||
- `perc`, total charge percentage (integer between 0 and 100 or "N/A");
|
||||
- `n_perc[i]`, i-th battery charge percentage (like above);
|
||||
- `time`, time remaining until charge if charging, until discharge if discharging (HH:MM string or "N/A");
|
||||
- `n_perc`, i-th battery charge percentage (like above);
|
||||
- `time`, time remaining until charge if charging, until discharge if discharging (HH:SS string or "N/A");
|
||||
- `watt`, battery watts (float with 2 decimals).
|
||||
|
||||
and can modify the following three tables, which will be the preset for the naughty notifications:
|
||||
* `bat_notification_charged_preset` (used if battery is fully charged and connected to AC)
|
||||
* `bat_notification_low_preset` (used if battery charge level <= 15)
|
||||
and can modify the following two tables, which will be the preset for the naughty notifications:
|
||||
* `bat_notification_low_preset`(used if battery charge level <= 15)
|
||||
* `bat_notification_critical_preset` (used if battery charge level <= 5)
|
||||
|
||||
Check [here](https://awesomewm.org/doc/api/libraries/naughty.html#notify) for
|
||||
the list of variables they can contain. Default definitions:
|
||||
|
||||
```lua
|
||||
bat_notification_charged_preset = {
|
||||
title = "Battery full",
|
||||
text = "You can unplug the cable",
|
||||
timeout = 15,
|
||||
fg = "#202020",
|
||||
bg = "#CDCDCD"
|
||||
}
|
||||
|
||||
```
|
||||
Check [here](https://awesomewm.org/doc/api/libraries/naughty.html#notify) for the list of variables they can contain. Default definitions:
|
||||
|
||||
```lua
|
||||
bat_notification_low_preset = {
|
||||
@@ -94,6 +75,15 @@ Variable | Meaning | Type
|
||||
|
||||
The `update` function can be used to refresh the widget before `timeout` expires.
|
||||
|
||||
## Note
|
||||
## Notes
|
||||
* Another common identifier for `ac` is `ACAD`.
|
||||
* If your widget is always on "N/A" with default settings, and you have a single battery, then `BAT0` is not your battery file. Locate the right one in `/sys/class/power_supply/` and set `battery` properly. For instance, with `BAT1`:
|
||||
|
||||
Alternatively, you can try the [`upower` recipe](https://awesomewm.org/recipes/watch).
|
||||
```lua
|
||||
batwidget = lain.widget.bat({
|
||||
battery = "BAT1",
|
||||
-- [...]
|
||||
})
|
||||
|
||||
```
|
||||
* Alternatively, you can try the `upower` widget [here](https://awesomewm.org/recipes/watch).
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
Creates a calendar notification that can be attached to widgets.
|
||||
|
||||
This is a simpler but [faster](https://github.com/awesomeWM/awesome/issues/1861)
|
||||
alternative to [`awful.widget.calendar_popup`](https://awesomewm.org/doc/api/classes/awful.widget.calendar_popup.html), which emulates UNIX's `cal`.
|
||||
|
||||
```lua
|
||||
local mycal = lain.widget.cal()
|
||||
```
|
||||
|
||||
## Input table
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`attach_to` | List of widgets | table | empty table
|
||||
`week_start` | First day of the week | integer | 2 (Monday)
|
||||
`three` | Display three months spanning the date | boolean | false
|
||||
`followtag` | Display the notification on currently focused screen | boolean | false
|
||||
`icons` | Path to calendar icons | string | [icons/cal/white/](https://github.com/lcpz/lain/tree/master/icons/cal/white)
|
||||
`notification_preset` | Notification preset | table | See [default `notification_preset`](https://github.com/lcpz/lain/wiki/calendar#default-notification_preset)
|
||||
|
||||
Set `attach_to` as the list of widgets to which you want to attach the calendar, like this:
|
||||
|
||||
```lua
|
||||
local mycal = lain.widget.cal {
|
||||
attach_to = { mywidget1, mywidget2, ... },
|
||||
-- [...]
|
||||
}
|
||||
```
|
||||
|
||||
For every widget in `attach_to`:
|
||||
|
||||
- Left click / scroll down: switch to previous month.
|
||||
- Middle click show current month.
|
||||
- Right click / scroll up: switch to next month.
|
||||
|
||||
With multiple screens, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
|
||||
### Default `notification_preset`
|
||||
|
||||
```lua
|
||||
notification_preset = {
|
||||
font = "Monospace 10",
|
||||
fg = "#FFFFFF",
|
||||
bg = "#000000"
|
||||
}
|
||||
```
|
||||
|
||||
## Output table
|
||||
|
||||
Variable | Meaning | Type
|
||||
--- | --- | ---
|
||||
`attach` | Attach the calendar to an input widget | function
|
||||
`show` | Show calendar | function
|
||||
`hide` | Hide calendar | function
|
||||
|
||||
`attach` takes as argument any widget you want to attach the calendar to, while
|
||||
`show` takes as optional argument an integer to indicate the seconds to timeout.
|
||||
|
||||
## Keybinding
|
||||
|
||||
```lua
|
||||
awful.key({ altkey }, "c", function () mycal.show(7) end)
|
||||
```
|
||||
|
||||
Where `altkey = "Mod1"`.
|
||||
|
||||
## Notes
|
||||
|
||||
* Naughty notifications require `notification_preset.font` to be **monospaced**, in order to correctly display the output.
|
||||
* If you want to [disable notification icon](https://github.com/lcpz/lain/pull/351), set `icons = ""` in the input table.
|
||||
* If you want to localise the calendar, put `os.setlocale(os.getenv("LANG"))` in your `rc.lua`.
|
||||
* If you want to get notifications [only with mouse clicks](https://github.com/lcpz/lain/issues/320) on a given widget, use this code:
|
||||
```lua
|
||||
yourwidget:disconnect_signal("mouse::enter", mycal.hover_on)
|
||||
```
|
||||
105
.config/awesome/lain/wiki/calendar.md
Normal file
105
.config/awesome/lain/wiki/calendar.md
Normal file
@@ -0,0 +1,105 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
Attaches a calendar notification to a widget.
|
||||
|
||||
This is a simpler but [faster](https://github.com/awesomeWM/awesome/issues/1861)
|
||||
alternative to [`awful.widget.calendar_popup](https://awesomewm.org/doc/api/classes/awful.widget.calendar_popup.html).
|
||||
|
||||
```lua
|
||||
local calendar = lain.widget.calendar()
|
||||
```
|
||||
|
||||
- Left click / scroll down: switch to previous month.
|
||||
- Right click / scroll up: switch to next month.
|
||||
|
||||
## Input table
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`cal` | custom call for `cal` | string | "/usr/bin/cal"
|
||||
`attach_to` | Array of widgets | array | empty array
|
||||
`followtag` | Display the notification on currently focused screen | boolean | false
|
||||
`icons` | Path to calendar icons | string | [lain/icons/cal/white](https://github.com/copycat-killer/lain/tree/master)
|
||||
`notification_preset` | Notification preset | table | See [default `notification_preset`](https://github.com/copycat-killer/lain/wiki/calendar#default-notification_preset)
|
||||
|
||||
You can reset `cal` any way you like (using `-w` to display weeks as well, for instance). If the current day is not highlighted, you can reset `cal` to also include the proper coloring flag. For instance, under Arch Linux it's `/usr/bin/cal --color=always`, while under Ubuntu it's `/usr/bin/cal -h`.
|
||||
|
||||
You can set `attach_to` as the array of widgets to which you want to attach the calendar, for instance:
|
||||
|
||||
```lua
|
||||
lain.widget.calendar({
|
||||
`attach_to = { mywidget1, mywidget2, ... }`,
|
||||
-- [...]
|
||||
})
|
||||
```
|
||||
|
||||
The notification will show an icon of the current day number, and output from ``cal`` with current day highlighted.
|
||||
|
||||
In multiple screen setups, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
|
||||
### Default `notification_preset`
|
||||
|
||||
```lua
|
||||
notification_preset = {
|
||||
font = "Monospace 10",
|
||||
fg = "#FFFFFF",
|
||||
bg = "#000000"
|
||||
}
|
||||
```
|
||||
|
||||
## Output table
|
||||
|
||||
Variable | Meaning | Type
|
||||
--- | --- | ---
|
||||
`attach` | Attach the calendar to an input widget | function
|
||||
`show` | Show calendar | function
|
||||
`hide` | Hide calendar | function
|
||||
|
||||
`attach` takes as argument the widget you want to attach the calendar to: `calendar.attach(widget)`.
|
||||
|
||||
## Keybindings
|
||||
|
||||
You can call the notification with a key binding like this:
|
||||
|
||||
```lua
|
||||
awful.key({ altkey }, "c", function ()
|
||||
calendar:show(7)
|
||||
end),
|
||||
```
|
||||
|
||||
where ``altkey = "Mod1"`` and ``show`` argument is an optional integer, meaning timeout seconds.
|
||||
|
||||
You can also call it defining a notification screen with a third argument like this:
|
||||
|
||||
```lua
|
||||
awful.key({ altkey }, "c", function ()
|
||||
calendar:show(7, 0, my_scr_number)
|
||||
end),
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
* Naughty notifications require `notification_preset.font` to be **monospaced**, in order to correctly display the output.
|
||||
* In case current day is not being highlighted in notifications, try setting `cal` specifying your environment. For instance: `cal = "/usr/bin/env TERM=linux /usr/bin/cal --your-coloring-flag-here"`.
|
||||
* If you want to [disable notification icon](https://github.com/copycat-killer/lain/pull/351), set `icons = ""` in the input table.
|
||||
* In order to have [khal](https://github.com/pimutils/khal) agenda output combined with the widget you can use this script as `cal`:
|
||||
|
||||
```shell
|
||||
#!/bin/bash
|
||||
days=3 # days to show
|
||||
cal_flag="--color=always" # colorizing flag
|
||||
if [ $# -eq 0 ]; then
|
||||
awk '{max = 21}
|
||||
FNR==NR{s1[FNR]=$0; next}{s2[FNR]=$0}
|
||||
END { format = "%-" max "s\t%-" max "s\n";
|
||||
numlines=(NR-FNR)>FNR?NR-FNR:FNR;
|
||||
for (i=1; i<=numlines; i++) { printf format, s1[i]?s1[i]:"", s2[i]?s2[i]:"" }
|
||||
}' <(/usr/bin/cal $cal_flag) <(/usr/bin/khal list today $(date -d "+$days days" "+%d.%m.%Y"))
|
||||
else
|
||||
/usr/bin/cal $@
|
||||
fi
|
||||
```
|
||||
4
.config/awesome/lain/wiki/cpu.md
Executable file → Normal file
4
.config/awesome/lain/wiki/cpu.md
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
@@ -14,7 +14,7 @@ local mycpu = lain.widget.cpu()
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 2
|
||||
`timeout` | Refresh timeout seconds | number | 2
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
`settings` can use these strings:
|
||||
|
||||
58
.config/awesome/lain/wiki/fs.md
Executable file → Normal file
58
.config/awesome/lain/wiki/fs.md
Executable file → Normal file
@@ -1,12 +1,12 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
Shows file systems informations.
|
||||
Shows disk space usage for a set partition.
|
||||
|
||||
If a partition is given in input, a notification will be displayed when it is almost full.
|
||||
Displays a notification when the partition is full or has low space.
|
||||
|
||||
```lua
|
||||
local mypartition = lain.widget.fs()
|
||||
@@ -16,38 +16,52 @@ local mypartition = lain.widget.fs()
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 600
|
||||
`partition` | (Optional) Partition to watch: a notification will be displayed when full | string | `nil`
|
||||
`threshold` | Percentage threshold at which the notification is triggered | integer | 99
|
||||
`notification_preset` | Notification preset | table | See [default `notification_preset`](https://github.com/lcpz/lain/wiki/fs#default-notification_preset)
|
||||
`timeout` | Refresh timeout seconds -| number | 600
|
||||
`partition` | Partition to monitor | string | "/"
|
||||
`options` | Additional options to pass to [`dfs`](https://github.com/copycat-killer/lain/blob/master/scripts/dfs) | string, in the form `--type='fstype' | --exclude-type='fstype'` | nil
|
||||
`notification_preset` | Notification preset | table | See [default `notification_preset`](https://github.com/copycat-killer/lain/wiki/fs#default-notification_preset)
|
||||
`followtag` | Display the notification on currently focused screen | boolean | false
|
||||
`notify` | Display notifications | string | "on"
|
||||
`showpopup` | Display popups with mouse hovering | string, possible values: "on", "off" | "on"
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
`settings` can use the table `fs_now`, which contains a string entry for each file system path available. For instance, root infos are located in the variable `fs_now["/"]`. Every entry in this table have the following variables:
|
||||
`settings` can use the following `partition` related strings:
|
||||
|
||||
Variable | Meaning | Type
|
||||
--- | --- | ---
|
||||
`units` | (multiple of) units used | string ("Kb", "Mb", "Gb", and so on)
|
||||
`percentage` | the used percentage | integer
|
||||
`size` | size in `units` of the given fs | float
|
||||
`used` | amount of space used in the given fs, expressed in `units` | float
|
||||
`free` | amount of free space in the given fs, expressed in `units` | float
|
||||
* `fs_now.size_mb`
|
||||
* `fs_now.size_gb`
|
||||
* `fs_now.used`
|
||||
* `fs_now.used_mb`
|
||||
* `fs_now.used_gb`
|
||||
* `fs_now.available`
|
||||
* `fs_now.available_mb`
|
||||
* `fs_now.available_gb`
|
||||
|
||||
Usage example:
|
||||
Within `settings`, you can obtain other partition values from internal `fs_info` table. For each partition, the following indexes are available:
|
||||
|
||||
* `fs_info[other_partition .. " size_mb"]`
|
||||
* `fs_info[other_partition .. " size_gb"]`
|
||||
* `fs_info[other_partition .. " used_p"]`
|
||||
* `fs_info[other_partition .. " used_mb"]`
|
||||
* `fs_info[other_partition .. " used_gb"]`
|
||||
* `fs_info[other_partition .. " avail_p"]`
|
||||
* `fs_info[other_partition .. " avail_mb"]`
|
||||
* `fs_info[other_partition .. " avail_gb"]`
|
||||
|
||||
just like the variables of `fs_now`. Example:
|
||||
|
||||
```lua
|
||||
-- shows used (percentage) and remaining space in home partition
|
||||
-- shows root and home partitions percentage used
|
||||
local fsroothome = lain.widget.fs({
|
||||
settings = function()
|
||||
widget:set_text("/home: " .. fs_now["/home"].percentage .. "% (" ..
|
||||
fs_now["/home"].free .. " " .. fs_now["/home"].units .. " left)")
|
||||
local home_used = tonumber(fs_info["/home used_p"]) or 0
|
||||
widget:set_text("/ " .. fs_now.used .. "% | /home " .. home_used .. "% ")
|
||||
end
|
||||
})
|
||||
-- output example: "/home: 37% (239.4 Gb left)"
|
||||
```
|
||||
|
||||
With multiple screens, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
Also, `settings` can modify `notification_preset` table. This table will be the preset for the naughty notifications. Check [here](https://awesomewm.org/doc/api/libraries/naughty.html#notify) for the list of variables it can contain.
|
||||
|
||||
In multiple screen setups, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
|
||||
### Default `notification_preset`
|
||||
|
||||
@@ -79,4 +93,4 @@ where ``altkey = "Mod1"`` and ``show`` arguments, both optionals, are:
|
||||
|
||||
## Note
|
||||
|
||||
Naughty notifications require `notification_preset.font` to be **monospaced**, in order to correctly display the output.
|
||||
Naughty notifications require `notification_preset.font` to be **monospaced**, in order to correctly display the output.
|
||||
83
.config/awesome/lain/wiki/imap.md
Executable file → Normal file
83
.config/awesome/lain/wiki/imap.md
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
@@ -32,75 +32,55 @@ while the optional are:
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`port` | IMAP port | integer | 993
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 60
|
||||
`pwdtimeout` | Timeout for password retrieval function (see [here](https://github.com/lcpz/lain/wiki/imap#password-security)) | integer | 10
|
||||
`port` | IMAP port | number | 993
|
||||
`timeout` | Refresh timeout seconds | number | 60
|
||||
`is_plain` | Define whether `password` is a plain password (true) or a command that retrieves it (false) | boolean | false
|
||||
`followtag` | Notification behaviour | boolean | false
|
||||
`notify` | Show notification popups | string | "on"
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
`settings` can use `imap_now` table, which contains the following non negative integers:
|
||||
The reason why `is_plain` is false by default is to discourage the habit of storing passwords in plain.
|
||||
|
||||
- `["MESSAGES"]`
|
||||
- `["RECENT"]`
|
||||
- `["UNSEEN"]`
|
||||
So, you can set your password in plain like this:
|
||||
|
||||
example of fetch: `total = imap_now["MESSAGES"]`. For backwards compatibility, `settings` can also use `mailcount`, a pointer to `imap_now["UNSEEN"]`.
|
||||
```lua
|
||||
myimapcheck = lain.widget.imap({
|
||||
is_plain = true,
|
||||
password = "mymailpassword",
|
||||
-- [...]
|
||||
})
|
||||
```
|
||||
|
||||
Also, `settings` can modify `mail_notification_preset` table, which will be the preset for the naughty notifications. Check [here](https://awesomewm.org/apidoc/libraries/naughty.html#notify) for the list of variables it can contain. Default definition:
|
||||
and you'll have the same security provided by `~/.netrc`.
|
||||
|
||||
**Or you can use a password manager**, like [spm](https://notabug.org/kl3/spm) or [pass](https://www.passwordstore.org):
|
||||
|
||||
```lua
|
||||
myimapcheck = lain.widget.imap({
|
||||
password = function()
|
||||
-- return the output of "spm show mymail"
|
||||
end,
|
||||
-- [...]
|
||||
})
|
||||
```
|
||||
|
||||
When `is_plain == false` (default), `password` can be either a string, a table or a function: the widget will execute it asynchronously in the first two cases.
|
||||
|
||||
`settings` can use the value `mailcount`, an integer greater or equal to zero, and can modify `mail_notification_preset` table, which will be the preset for the naughty notifications. Check [here](https://awesomewm.org/apidoc/libraries/naughty.html#notify) for the list of variables it can contain. Default definition:
|
||||
|
||||
```lua
|
||||
mail_notification _preset = {
|
||||
icon = "lain/icons/mail.png",
|
||||
icon = lain/icons/mail.png,
|
||||
position = "top_left"
|
||||
}
|
||||
```
|
||||
|
||||
Note that `mailcount` and `imap_now` elements are equals to 0 either if there are no new mails or credentials are invalid, so make sure that your settings are correct.
|
||||
Note that `mailcount` is 0 either if there are no new mails or credentials are invalid, so make sure you get the right settings.
|
||||
|
||||
With multiple screens, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
In multiple screen setups, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
|
||||
You can have multiple instances of this widget at the same time.
|
||||
|
||||
## Password security
|
||||
|
||||
The reason why `is_plain` is false by default is to discourage the habit of storing passwords in plain.
|
||||
|
||||
In general, when `is_plain == false`, `password` can be either a string, a table or a function: the widget will execute it asynchronously in the first two cases.
|
||||
|
||||
### Using plain passwords
|
||||
|
||||
You can set your password in plain like this:
|
||||
|
||||
```lua
|
||||
myimapcheck = lain.widget.imap {
|
||||
is_plain = true,
|
||||
password = "mymailpassword",
|
||||
-- [...]
|
||||
}
|
||||
```
|
||||
|
||||
and you will have the same security provided by `~/.netrc`.
|
||||
|
||||
### Using a password manager
|
||||
|
||||
I recommend to use [spm](https://notabug.org/kl3/spm) or [pass](https://www.passwordstore.org). In this case, `password` has to be a function. Example stub:
|
||||
|
||||
```lua
|
||||
myimapcheck = lain.widget.imap {
|
||||
password = function()
|
||||
-- do your retrieval
|
||||
return retrieved_password, try_again
|
||||
end,
|
||||
-- [...]
|
||||
}
|
||||
```
|
||||
|
||||
Where `retrieved_password` is the password retrieved from the manager, and `try_again` supports [DBus Secret Service](https://specifications.freedesktop.org/secret-service).
|
||||
|
||||
The process flow is that the first `password()` call spawns the unlock prompt, then the second call retrieves the password. [Here](https://gist.github.com/lcpz/1854fc4320f4701957cd5309c8eed4a6) is an example of `password` function.
|
||||
|
||||
## Output table
|
||||
|
||||
Variable | Meaning | Type
|
||||
@@ -108,7 +88,6 @@ Variable | Meaning | Type
|
||||
`widget` | The widget | `wibox.widget.textbox`
|
||||
`update` | Update `widget` | function
|
||||
`timer` | The widget timer | [`gears.timer`](https://awesomewm.org/doc/api/classes/gears.timer.html)
|
||||
`pwdtimer` | Password retrieval timer (available only if `password` is a function)| [`gears.timer`](https://awesomewm.org/doc/api/classes/gears.timer.html)
|
||||
|
||||
The `update` function can be used to refresh the widget before `timeout` expires.
|
||||
|
||||
|
||||
75
.config/awesome/lain/wiki/kbdlayout.md
Normal file
75
.config/awesome/lain/wiki/kbdlayout.md
Normal file
@@ -0,0 +1,75 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
Shows and controls keyboard layouts and variants using `setxkbmap`. This is a simpler but asynchronous alternative to [awful.widget.kbdlayout](https://awesomewm.org/apidoc/classes/awful.widget.keyboardlayout.html).
|
||||
|
||||
```lua
|
||||
local mykbdlayout = lain.widget.contrib.kbdlayout()
|
||||
```
|
||||
|
||||
Left/right click switches to next/previous keyboard layout.
|
||||
|
||||
## Input table
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`layouts` | Keyboard layouts and variants to switch between | table | **nil**
|
||||
`add_us_secondary` | Whether to add `us` as a secondary layout | boolean | true
|
||||
`timeout` | Refresh timeout (in seconds) | number | 10
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
- `layouts`
|
||||
|
||||
A table (array) which contains tables with keys indicating layout and (optionally) variant. This argument is **mandatory**.
|
||||
|
||||
- `add_us_secondary`
|
||||
|
||||
A boolean controlling whether to add `us` as a secondary layout. This is needed in order for keyboard shortcuts to work in certain applications, i.e. Firefox, while using a non-US keyboard layout.
|
||||
|
||||
- `timeout`
|
||||
|
||||
An integer which determines the interval at which the widget will be updated, in case the keyboard layout was changed by other means.
|
||||
|
||||
- `settings`
|
||||
|
||||
A "callback" function in which the user is expected to set the text widget up. The widget itself is available as the global variable `widget`, while layout information is available as `kbdlayout_now`. `kbdlayout_now` contains two keys, `layout` containing the primary layout, and `variant`, containing the variant. If there is no variant, `variant` is `nil`.
|
||||
|
||||
## Output table
|
||||
|
||||
Variable | Meaning | Type
|
||||
--- | --- | ---
|
||||
`widget` | The widget (textbox) | `wibox.widget.textbox`
|
||||
`update` | Function to update the widget and call `settings` | function
|
||||
`set` | Function taking an index as an argument to manually set the layout given by that index | function
|
||||
`next` | Change to the next layout | function
|
||||
`prev` | Change to the prev layout | function
|
||||
|
||||
The textbox can be added to the layout via standard means.
|
||||
|
||||
By default, left-clicking the textbox calls `next`, and right-clicking calls `prev`. You can set up additional key- or mouse-bindings. See the example below.
|
||||
|
||||
## Example
|
||||
|
||||
```lua
|
||||
-- Switch between US Dvorak and DE layouts.
|
||||
mykbdlayout = lain.widget.contrib.kbdlayout({
|
||||
layouts = { { layout = "us", variant = "dvorak" },
|
||||
{ layout = "de" } },
|
||||
settings = function()
|
||||
if kbdlayout_now.variant then
|
||||
widget:set_text(string.format("%s/%s", kbdlayout_now.layout,
|
||||
kbdlayout_now.variant))
|
||||
else
|
||||
widget:set_text(kbdlayout_now.layout)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
-- [...]
|
||||
|
||||
-- Add key binding (traditional Alt+Shift switching)
|
||||
awful.key({ "Mod1" }, "Shift_L", function () mykbdlayout.next() end),
|
||||
```
|
||||
6
.config/awesome/lain/wiki/mem.md
Executable file → Normal file
6
.config/awesome/lain/wiki/mem.md
Executable file → Normal file
@@ -1,10 +1,10 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
Shows memory status in MiB, [like `top` and `free -h`](https://github.com/lcpz/lain/issues/271).
|
||||
Shows memory status (in MiB).
|
||||
|
||||
```lua
|
||||
local mymem = lain.widget.mem()
|
||||
@@ -14,7 +14,7 @@ local mymem = lain.widget.mem()
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 2
|
||||
`timeout` | Refresh timeout seconds | number | 2
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
in `settings` you can use the following variables:
|
||||
|
||||
18
.config/awesome/lain/wiki/moc.md
Executable file → Normal file
18
.config/awesome/lain/wiki/moc.md
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
@@ -24,9 +24,9 @@ Now playing songs are notified like this:
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 1
|
||||
`timeout` | Refresh timeout seconds | number | 1
|
||||
`music_dir` | Music directory | string | "~/Music"
|
||||
`cover_size` | Album art notification size (both height and width) | integer | 100
|
||||
`cover_size` | Album art notification size | number | 100
|
||||
`cover_pattern` | Pattern for the album art file | string | `*\\.(jpg|jpeg|png|gif)`*
|
||||
`default_art` | Default art | string | ""
|
||||
`followtag` | Display the notification on currently focused screen | boolean | false
|
||||
@@ -59,7 +59,7 @@ moc_notification_preset = {
|
||||
}
|
||||
```
|
||||
|
||||
With multiple screens, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
In multiple screen setups, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
|
||||
## Output table
|
||||
|
||||
@@ -81,22 +81,22 @@ You can control the widget with key bindings like these:
|
||||
-- MOC control
|
||||
awful.key({ altkey, "Control" }, "Up",
|
||||
function ()
|
||||
os.execute("mocp -G") -- toggle
|
||||
awful.spawn.with_shell("mocp -G")
|
||||
moc.update()
|
||||
end),
|
||||
awful.key({ altkey, "Control" }, "Down",
|
||||
function ()
|
||||
os.execute("mocp -s") -- stop
|
||||
awful.spawn.with_shell("mocp -s")
|
||||
moc.update()
|
||||
end),
|
||||
awful.key({ altkey, "Control" }, "Left",
|
||||
function ()
|
||||
os.execute("mocp -r") -- previous
|
||||
awful.spawn.with_shell("mocp -r")
|
||||
moc.update()
|
||||
end),
|
||||
awful.key({ altkey, "Control" }, "Right",
|
||||
function ()
|
||||
os.execute("mocp -f") -- next
|
||||
awful.spawn.with_shell("mocp -f")
|
||||
moc.update()
|
||||
end),
|
||||
```
|
||||
@@ -119,4 +119,4 @@ awful.key({ altkey }, "0",
|
||||
end
|
||||
naughty.notify(common)
|
||||
end),
|
||||
```
|
||||
```
|
||||
32
.config/awesome/lain/wiki/mpd.md
Executable file → Normal file
32
.config/awesome/lain/wiki/mpd.md
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
@@ -26,13 +26,13 @@ Now playing songs are notified like this:
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 2
|
||||
`timeout` | Refresh timeout seconds | number | 2
|
||||
`password` | MPD password | string | ""
|
||||
`host` | MPD server | string | "127.0.0.1"
|
||||
`port` | MPD port | string | "6600"
|
||||
`music_dir` | Music directory | string | "~/Music"
|
||||
`cover_size` | Album art notification size (both height and width) | integer | 100
|
||||
`cover_pattern` | Pattern for the album art file | string | `*.(jpg\|jpeg\|png\|gif)$`
|
||||
`cover_size` | Album art notification size | number | 100
|
||||
`cover_pattern` | Pattern for the album art file | string | `*\\.(jpg|jpeg|png|gif)`*
|
||||
`default_art` | Default art | string | `nil`
|
||||
`notify` | Show notification popups | string | "on"
|
||||
`followtag` | Notification behaviour | boolean | false
|
||||
@@ -46,7 +46,7 @@ Pay attention to case sensitivity when defining `music_dir`.
|
||||
|
||||
`settings` can use `mpd_now` table, which contains the following values:
|
||||
|
||||
(**note:** the first four are boolean [flags](https://github.com/lcpz/lain/pull/205), the remaining are all strings)
|
||||
(**note:** the first four are boolean [flags](https://github.com/copycat-killer/lain/pull/205), the remaining are all strings)
|
||||
|
||||
- random_mode
|
||||
- single_mode
|
||||
@@ -63,8 +63,8 @@ Pay attention to case sensitivity when defining `music_dir`.
|
||||
- track
|
||||
- genre
|
||||
- date
|
||||
- [time](https://github.com/lcpz/lain/pull/90) (length of current song, in seconds)
|
||||
- [elapsed](https://github.com/lcpz/lain/pull/90) (elapsed time of current song, in seconds)
|
||||
- [time](https://github.com/copycat-killer/lain/pull/90) (length of current song, in seconds)
|
||||
- [elapsed](https://github.com/copycat-killer/lain/pull/90) (elapsed time of current song, in seconds)
|
||||
|
||||
and can modify `mpd_notification_preset` table, which will be the preset for the naughty notifications. Check [here](https://awesomewm.org/doc/api/libraries/naughty.html#notify) for the list of variables it can contain. Default definition:
|
||||
|
||||
@@ -77,7 +77,7 @@ mpd_notification_preset = {
|
||||
}
|
||||
```
|
||||
|
||||
With multiple screens, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
In multiple screen setups, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
|
||||
## Output table
|
||||
|
||||
@@ -145,28 +145,20 @@ awful.key({ altkey }, "0",
|
||||
|
||||
## Notes
|
||||
|
||||
### Cover not showing in notifications
|
||||
|
||||
If the cover file is existent but not showed in notifications, [try](https://github.com/lcpz/lain/issues/393) setting `music_dir` to a symlink of your music folder, rather than to a physical path. This can be easily done through
|
||||
```shell
|
||||
ln -s /the/real_path_to_your_music/ /home/username/Music
|
||||
```
|
||||
However, this only applies if the music is stored outside your user-specific folder, for instance in an external partition.
|
||||
|
||||
### Always use `set_markup`
|
||||
|
||||
In `settings`, if you use `widget:set_text`, [it will ignore Pango markup](https://github.com/lcpz/lain/issues/258), so be sure to always use `widget:set_markup`.
|
||||
In `settings`, if you use `widget:set_text`, [it will ignore Pango markup](https://github.com/copycat-killer/lain/issues/258), so be sure to always use `widget:set_markup`.
|
||||
|
||||
### Volume fade in toggling MPD
|
||||
|
||||
If you want a fade in/out in toggling MPD, you can put [this script](https://gist.github.com/lcpz/76e315bc27c6cdf7edd5021964b88df1) in your local `bin` directory:
|
||||
If you want a fade in/out in toggling MPD, you can put [this script](https://gist.github.com/copycat-killer/76e315bc27c6cdf7edd5021964b88df1) in your local `bin` directory:
|
||||
|
||||
```shell
|
||||
$ curl https://gist.githubusercontent.com/lcpz/76e315bc27c6cdf7edd5021964b88df1/raw/97f7ba586418a4e07637cfbc91d2974278dfa623/mpd-fade -o ~/bin/mpc-fade
|
||||
$ curl https://gist.githubusercontent.com/copycat-killer/76e315bc27c6cdf7edd5021964b88df1/raw/97f7ba586418a4e07637cfbc91d2974278dfa623/mpd-fade -o ~/bin/mpc-fade
|
||||
$ chmod +x ~/bin/mpc-fade
|
||||
```
|
||||
|
||||
Set your 1% decrease/increase commands [here](https://gist.github.com/lcpz/76e315bc27c6cdf7edd5021964b88df1#file-mpd-fade-L8-L9), then use a keybinding like this:
|
||||
Set your 1% decrease/increase commands [here](https://gist.github.com/copycat-killer/76e315bc27c6cdf7edd5021964b88df1#file-mpd-fade-L8-L9), then use a keybinding like this:
|
||||
|
||||
```lua
|
||||
-- MPD toggle with volume fading
|
||||
|
||||
68
.config/awesome/lain/wiki/net.md
Executable file → Normal file
68
.config/awesome/lain/wiki/net.md
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
@@ -14,16 +14,14 @@ local mynet = lain.widget.net()
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 2
|
||||
`iface` | Network device(s) | string (single interface) or table of strings (multiple interfaces) | autodetected
|
||||
`units` | Units | integer | 1024 (kilobytes)
|
||||
`timeout` | Refresh timeout seconds | number | 2
|
||||
`iface` | Network device(s) | string (single interface) or array of strings (multiple interfaces) | autodetected
|
||||
`units` | Units | number | 1024 (kilobytes)
|
||||
`notify` | Display "no carrier" notifications | string | "on"
|
||||
`wifi_state` | Get wifi connection status | string | "off"
|
||||
`eth_state` | Get ethernet connection status | string | "off"
|
||||
`screen` | Notifications screen | integer | 1
|
||||
`screen` | Notifications screen | number | 1
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
`iface` can be a string or an table of the form `{ "eth0", "eth1", ... }` containing a list of the devices to collect data on.
|
||||
`iface` can be a string or an array of the form `{ "eth0", "eth1", ... }` containing a list of the devices to collect data on.
|
||||
|
||||
If more than one device is included, `net_now.sent` and `net_now.received` will contain cumulative values over all given devices.
|
||||
Use `net_now.devices["eth0"]` to access `sent`, `received`, `state` or `carrier` per device.
|
||||
@@ -39,13 +37,7 @@ If `notify = "off"` is set, the widget won't display a notification when there's
|
||||
- `net_now.sent` and `net_now.received` (numbers) will be the sum across all specified interfaces;
|
||||
- `net_now.devices["interface"]` contains the same attributes as the old api for each interface. More on this in the "Multiple devices" section below.
|
||||
|
||||
If `wifi_state = "on"` is set, `settings` can use the following extra strings attached to `net_now.devices["wireless interface"]`:
|
||||
- `wifi` (true, false) indicates if the interface is connected to a network;
|
||||
- `signal` (number) is the connection signal strength in dBm;
|
||||
|
||||
If `eth_state = "on"` is set, `settings` can use the following extra string: `net_now.devices["ethernet interface"].ethernet`, which is a boolean indicating if an ethernet connection's active.
|
||||
|
||||
For compatibility reasons, if multiple devices are given, `net_now.carrier` and `net_now.state` correspond to the last interface in the iface table and should not be relied upon (deprecated).
|
||||
For compatibility reasons, if multiple devices are given, `net_now.carrier` and `net_now.state` correspond to the last interface in the iface array and should not be relied upon (deprecated).
|
||||
|
||||
## Output table
|
||||
|
||||
@@ -58,58 +50,20 @@ Variable | Meaning | Type
|
||||
|
||||
### Setting `iface` manually
|
||||
|
||||
If the widget [spawns a "no carrier" notification and you are sure to have an active network device](https://github.com/lcpz/lain/issues/102), then autodetection is probably not working. This may due to [your user privileges](https://github.com/lcpz/lain/issues/102#issuecomment-246470526). In this case you can set `iface` manually. You can see which device is **UP,LOWER_UP** with the following command:
|
||||
If the widget [spawns a "no carrier" notification and you are sure to have an active network device](https://github.com/copycat-killer/lain/issues/102), then autodetection is probably not working. This may due to [your user privileges](https://github.com/copycat-killer/lain/issues/102#issuecomment-246470526). In this case you can set `iface` manually. You can see which device is **UP,LOWER_UP** with the following command:
|
||||
|
||||
```shell
|
||||
ip link show
|
||||
```
|
||||
## Usage examples
|
||||
|
||||
### Two widgets for upload/download rates from the same `iface`
|
||||
|
||||
```lua
|
||||
local mynetdown = wibox.widget.textbox()
|
||||
local mynetup = lain.widget.net {
|
||||
local mynetup = lain.widgets.net {
|
||||
settings = function()
|
||||
widget:set_markup(net_now.sent)
|
||||
netdowninfo:set_markup(net_now.received)
|
||||
end
|
||||
}
|
||||
```
|
||||
### Wifi connection + signal strength indicator and ethernet connection indicator
|
||||
```lua
|
||||
local wifi_icon = wibox.widget.imagebox()
|
||||
local eth_icon = wibox.widget.imagebox()
|
||||
local net = lain.widget.net {
|
||||
notify = "off",
|
||||
wifi_state = "on",
|
||||
eth_state = "on",
|
||||
settings = function()
|
||||
local eth0 = net_now.devices.eth0
|
||||
if eth0 then
|
||||
if eth0.ethernet then
|
||||
eth_icon:set_image(ethernet_icon_filename)
|
||||
else
|
||||
eth_icon:set_image()
|
||||
end
|
||||
end
|
||||
|
||||
local wlan0 = net_now.devices.wlan0
|
||||
if wlan0 then
|
||||
if wlan0.wifi then
|
||||
local signal = wlan0.signal
|
||||
if signal < -83 then
|
||||
wifi_icon:set_image(wifi_weak_filename)
|
||||
elseif signal < -70 then
|
||||
wifi_icon:set_image(wifi_mid_filename)
|
||||
elseif signal < -53 then
|
||||
wifi_icon:set_image(wifi_good_filename)
|
||||
elseif signal >= -53 then
|
||||
wifi_icon:set_image(wifi_great_filename)
|
||||
end
|
||||
else
|
||||
wifi_icon:set_image()
|
||||
end
|
||||
end
|
||||
end
|
||||
}
|
||||
```
|
||||
```
|
||||
26
.config/awesome/lain/wiki/pulse.md
Executable file → Normal file
26
.config/awesome/lain/wiki/pulse.md
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
@@ -14,9 +14,9 @@ local volume = lain.widget.pulse()
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 5
|
||||
`timeout` | Refresh timeout seconds | number | 5
|
||||
`devicetype` | PulseAudio device type | string ("sink", "source") | "sink"
|
||||
`cmd` | PulseAudio command | string or function | see [here](https://github.com/lcpz/lain/blob/master/widget/pulse.lua#L26)
|
||||
`cmd` | PulseAudio command | string or function | see [here](https://github.com/copycat-killer/lain/blob/master/widget/pulse.lua#L26)
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
`cmd` is a terminal command to catch infos from current default device. You can redefine it, being sure that the ouput is something like this:
|
||||
@@ -28,7 +28,7 @@ Variable | Meaning | Type | Default
|
||||
device.string = "front:1"
|
||||
```
|
||||
|
||||
If your devices change dynamically, you can define it as a function which returns a command string.
|
||||
If your devices change dinamically, you can define it as a function which returns a command string.
|
||||
|
||||
If sed doesn't work, you can try with a grep variant:
|
||||
|
||||
@@ -68,19 +68,19 @@ volume.widget:buttons(awful.util.table.join(
|
||||
awful.spawn("pavucontrol")
|
||||
end),
|
||||
awful.button({}, 2, function() -- middle click
|
||||
os.execute(string.format("pactl set-sink-volume %d 100%%", volume.device))
|
||||
awful.spawn(string.format("pactl set-sink-volume %d 100%%", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 3, function() -- right click
|
||||
os.execute(string.format("pactl set-sink-mute %d toggle", volume.device))
|
||||
awful.spawn(string.format("pactl set-sink-mute %d toggle", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 4, function() -- scroll up
|
||||
os.execute(string.format("pactl set-sink-volume %d +1%%", volume.device))
|
||||
awful.spawn(string.format("pactl set-sink-volume %d +1%%", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 5, function() -- scroll down
|
||||
os.execute(string.format("pactl set-sink-volume %d -1%%", volume.device))
|
||||
awful.spawn(string.format("pactl set-sink-volume %d -1%%", volume.sink))
|
||||
volume.update()
|
||||
end)
|
||||
))
|
||||
@@ -92,27 +92,27 @@ volume.widget:buttons(awful.util.table.join(
|
||||
-- PulseAudio volume control
|
||||
awful.key({ altkey }, "Up",
|
||||
function ()
|
||||
os.execute(string.format("pactl set-sink-volume %d +1%%", volume.device))
|
||||
os.execute(string.format("pactl set-sink-volume %d +1%%", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.key({ altkey }, "Down",
|
||||
function ()
|
||||
os.execute(string.format("pactl set-sink-volume %d -1%%", volume.device))
|
||||
os.execute(string.format("pactl set-sink-volume %d -1%%", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.key({ altkey }, "m",
|
||||
function ()
|
||||
os.execute(string.format("pactl set-sink-mute %d toggle", volume.device))
|
||||
os.execute(string.format("pactl set-sink-mute %d toggle", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.key({ altkey, "Control" }, "m",
|
||||
function ()
|
||||
os.execute(string.format("pactl set-sink-volume %d 100%%", volume.device))
|
||||
os.execute(string.format("pactl set-sink-volume %d 100%%", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.key({ altkey, "Control" }, "0",
|
||||
function ()
|
||||
os.execute(string.format("pactl set-sink-volume %d 0%%", volume.device))
|
||||
os.execute(string.format("pactl set-sink-volume %d 0%%", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
```
|
||||
|
||||
@@ -1,150 +0,0 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
Shows and controls PulseAudio volume.
|
||||
|
||||
```lua
|
||||
local volume = lain.widget.pulseaudio()
|
||||
```
|
||||
|
||||
## Input table
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout seconds | number | 5
|
||||
`devicetype | PulseAudio device type | string ("sink", "source") | "sink"
|
||||
`cmd` | PulseAudio command | string | [link](https://github.com/lcpz/lain/blob/master/widget/pulseaudio.lua#L28)
|
||||
`scallback` | PulseAudio sink callback | function | `nil`
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
`cmd` catch infos from current default sink. You can redefine it, being sure that the ouput is something like this:
|
||||
|
||||
```shell
|
||||
* index: 0
|
||||
volume: front-left: 18340 / 28% / -33.18 dB, front-right: 18340 / 28% / -33.18 dB
|
||||
muted: no
|
||||
device.string = "front:1"
|
||||
```
|
||||
|
||||
**Note:** you can set PulseAudio default sink like this: `pacmd set-default-sink #sink`.
|
||||
|
||||
If [`sed`](https://github.com/lcpz/lain/blob/master/widget/pulseaudio.lua#L28) doesn't work, you can try with `grep`:
|
||||
|
||||
```shell
|
||||
pacmd list-sinks | grep -e $(pactl info | grep -e 'ink' | cut -d' ' -f3) -e 'volume: front' -e 'muted'
|
||||
```
|
||||
|
||||
`scallback` is a callback function to update `cmd`, in case you switch between audio channels and therefore PulseAudio sink changes. If default `cmd` works for you, you can tell `scallback` to work in the same way:
|
||||
|
||||
```lua
|
||||
scallback = function()
|
||||
devicetype = "sink"
|
||||
return "pacmd list-" .. devicetype .. "s | sed -n -e '0,/*/d' -e '/base volume/d' -e '/volume:/p' -e '/muted:/p' -e '/device\\.string/p'"
|
||||
end
|
||||
```
|
||||
|
||||
### `settings` variables
|
||||
|
||||
`settings` can use the following variables:
|
||||
|
||||
Variable | Meaning | Type | Values
|
||||
--- | --- | --- | ---
|
||||
`volume_now.index` | Sink index | string | >= "0"
|
||||
`volume_now.sink` | Sink name | string | sink name or "N/A"
|
||||
`volume_now.muted` | Sink mute status | string | "yes", "no", "N/A"
|
||||
`volume_now.channel` | Sink channels | table of string integers | `volume_now.channel[i]`, where `i >= 1`
|
||||
`volume_now.left` | Front left level | string | "0"-"100"
|
||||
`volume_now.right` | Front right level | string | "0"-"100"
|
||||
|
||||
`volume_now.channel` is a table of your pulseaudio sink channels. Fetch a channel level like this: `volume_now.channel[i]`, where `i >= 1`.
|
||||
|
||||
`volume_now.{left,right}` are pointers for `volume_now.{channel[1], channel[2]}` (stereo).
|
||||
|
||||
## Output table
|
||||
|
||||
Variable | Meaning | Type
|
||||
--- | --- | ---
|
||||
`widget` | The widget | `wibox.widget.textbox`
|
||||
`update` | Update `widget` | function
|
||||
|
||||
## Buttons
|
||||
|
||||
If you want buttons, just add the following after your widget in `rc.lua`.
|
||||
|
||||
```lua
|
||||
volume.widget:buttons(awful.util.table.join(
|
||||
awful.button({}, 1, function() -- left click
|
||||
awful.spawn("pavucontrol")
|
||||
end),
|
||||
awful.button({}, 2, function() -- middle click
|
||||
awful.spawn(string.format("pactl set-sink-volume %d 100%%", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 3, function() -- right click
|
||||
awful.spawn(string.format("pactl set-sink-mute %d toggle", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 4, function() -- scroll up
|
||||
awful.spawn(string.format("pactl set-sink-volume %d +1%%", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 5, function() -- scroll down
|
||||
awful.spawn(string.format("pactl set-sink-volume %d -1%%", volume.sink))
|
||||
volume.update()
|
||||
end)
|
||||
))
|
||||
```
|
||||
|
||||
## Keybindings
|
||||
|
||||
You can control the widget with key bindings like these:
|
||||
|
||||
```lua
|
||||
-- PulseAudio volume control
|
||||
awful.key({ altkey }, "Up",
|
||||
function ()
|
||||
os.execute(string.format("pactl set-sink-volume %d +1%%", volumewidget.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.key({ altkey }, "Down",
|
||||
function ()
|
||||
os.execute(string.format("pactl set-sink-volume %d -1%%", volumewidget.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.key({ altkey }, "m",
|
||||
function ()
|
||||
os.execute(string.format("pactl set-sink-mute %d toggle", volumewidget.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.key({ altkey, "Control" }, "m",
|
||||
function ()
|
||||
os.execute(string.format("pactl set-sink-volume %d 100%%", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.key({ altkey, "Control" }, "0",
|
||||
function ()
|
||||
os.execute(string.format("pactl set-sink-volume %d 0%%", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
```
|
||||
|
||||
where `altkey = "Mod1"`.
|
||||
|
||||
## Example
|
||||
|
||||
```lua
|
||||
-- PulseAudio volume (based on multicolor theme)
|
||||
local volume = lain.widget.pulseaudio({
|
||||
settings = function()
|
||||
vlevel = volume_now.left .. "-" .. volume_now.right .. "% | " .. volume_now.sink
|
||||
if volume_now.muted == "yes" then
|
||||
vlevel = vlevel .. " M"
|
||||
end
|
||||
|
||||
widget:set_markup(lain.util.markup("#7493d2", vlevel))
|
||||
end
|
||||
})
|
||||
```
|
||||
29
.config/awesome/lain/wiki/pulsebar.md
Executable file → Normal file
29
.config/awesome/lain/wiki/pulsebar.md
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
@@ -14,26 +14,21 @@ local volume = lain.widget.pulsebar()
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 5
|
||||
`timeout` | Refresh timeout seconds | number | 5
|
||||
`settings` | User settings | function | empty function
|
||||
`width` | Bar width | number | 63
|
||||
`height` | Bar height | number | 1
|
||||
`margins` | Bar margins | number | 1
|
||||
`paddings` | Bar paddings | number | 1
|
||||
`ticks` | Set bar ticks on | boolean | false
|
||||
`ticks_size` | Ticks size | number | 7
|
||||
`scallback` | [PulseAudio sink callback](https://github.com/lcpz/lain/wiki/pulseaudio/) | function | `nil`
|
||||
`sink` | Mixer sink | number | 0
|
||||
`colors` | Bar colors | table | see [Default colors](https://github.com/lcpz/lain/wiki/pulsebar#default-colors)
|
||||
`notification_preset` | Notification preset | table | See [default `notification_preset`](https://github.com/lcpz/lain/wiki/pulsebar#default-notification_preset)
|
||||
`colors` | Bar colors | table | see [Default colors](https://github.com/copycat-killer/lain/wiki/pulsebar#default-colors)
|
||||
`followtag` | Display the notification on currently focused screen | boolean | false
|
||||
`notification_preset` | Notification preset | table | See [default `notification_preset`](https://github.com/lcpz/lain/wiki/pulsebar#default-notification_preset)
|
||||
`notification_preset` | Notification preset | table | See [default `notification_preset`](https://github.com/copycat-killer/lain/wiki/pulsebar#default-notification_preset)
|
||||
`devicetype` | PulseAudio device type | string ("sink", "source") | "sink"
|
||||
`cmd` | PulseAudio command | string or function | see [here](https://github.com/lcpz/lain/blob/master/widget/pulsebar.lua#L48)
|
||||
`cmd` | PulseAudio command | string or function | see [here](https://github.com/copycat-killer/lain/blob/master/widget/pulsebar.lua#L48)
|
||||
|
||||
Read [pulse](https://github.com/lcpz/lain/wiki/pulse) page for `cmd` settings.
|
||||
Read [pulse](https://github.com/copycat-killer/lain/wiki/pulse) page for `cmd` settings.
|
||||
|
||||
`settings` can use [these variables](https://github.com/lcpz/lain/wiki/pulse#settings-variables).
|
||||
`settings` can use [these variables](https://github.com/copycat-killer/lain/wiki/pulse#settings-variables).
|
||||
|
||||
With multiple screens, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
|
||||
@@ -71,19 +66,19 @@ volume.bar:buttons(awful.util.table.join(
|
||||
awful.spawn("pavucontrol")
|
||||
end),
|
||||
awful.button({}, 2, function() -- middle click
|
||||
os.execute(string.format("pactl set-sink-volume %d 100%%", volume.device))
|
||||
awful.spawn(string.format("pactl set-sink-volume %d 100%%", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 3, function() -- right click
|
||||
os.execute(string.format("pactl set-sink-mute %d toggle", volume.device))
|
||||
awful.spawn(string.format("pactl set-sink-mute %d toggle", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 4, function() -- scroll up
|
||||
os.execute(string.format("pactl set-sink-volume %d +1%%", volume.device))
|
||||
awful.spawn(string.format("pactl set-sink-volume %d +1%%", volume.sink))
|
||||
volume.update()
|
||||
end),
|
||||
awful.button({}, 5, function() -- scroll down
|
||||
os.execute(string.format("pactl set-sink-volume %d -1%%", volume.device))
|
||||
awful.spawn(string.format("pactl set-sink-volume %d -1%%", volume.sink))
|
||||
volume.update()
|
||||
end)
|
||||
))
|
||||
@@ -91,4 +86,4 @@ volume.bar:buttons(awful.util.table.join(
|
||||
|
||||
## Keybindings
|
||||
|
||||
Same as [here](https://github.com/lcpz/lain/wiki/pulse#keybindings). If you want notifications, use `volume.notify()` instead of `volume.update()`.
|
||||
Same as [here](https://github.com/copycat-killer/lain/wiki/pulse#keybindings). If you want notifications, use `volume.notify()` instead of `volume.update()`.
|
||||
|
||||
4
.config/awesome/lain/wiki/redshift.md
Executable file → Normal file
4
.config/awesome/lain/wiki/redshift.md
Executable file → Normal file
@@ -3,9 +3,9 @@
|
||||
[**Project homepage**](http://jonls.dk/redshift/)
|
||||
|
||||
>**Redshift** is an application that adjusts the computer display's color temperature based upon the Sun's apparent position in relation to the user's location on Earth.
|
||||
>
|
||||
|
||||
>The program is free software, inspired by the proprietary f.lux, and can be used to reduce eye strain as well as insomnia and delayed sleep phase syndrome.
|
||||
>
|
||||
|
||||
>The computer display's color temperature transitions evenly from night to daytime temperature to allow the user's eyes to slowly adapt. At night, the color temperature is low and is typically 3000–4000 K (default is 3500 K), preferably matching the room's lighting temperature. Typical color temperature during the daytime is 5500–6500 K (default is 5500 K).
|
||||
|
||||
**Source:** [Wikipedia](https://en.wikipedia.org/wiki/Redshift_%28software%29)
|
||||
|
||||
4
.config/awesome/lain/wiki/sysload.md
Executable file → Normal file
4
.config/awesome/lain/wiki/sysload.md
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
@@ -14,7 +14,7 @@ mysysload = lain.widget.sysload()
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 2
|
||||
`timeout` | Refresh timeout seconds | number | 2
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
`settings` can use strings `load_1`, `load_5` and `load_15`, which are the load averages over 1, 5, and 15 minutes.
|
||||
|
||||
8
.config/awesome/lain/wiki/task.md
Executable file → Normal file
8
.config/awesome/lain/wiki/task.md
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
@@ -17,11 +17,11 @@ Variable | Meaning | Type | Default
|
||||
`show_cmd` | Taskwarrior command to show in the popup | string | "task next"
|
||||
`prompt_text` | Prompt text | string | "Enter task command: "
|
||||
`followtag` | Display the notification on currently focused screen | boolean | false
|
||||
`notification_preset` | Notification preset | table | See [default `notification_preset`](https://github.com/lcpz/lain/wiki/task#default-notification_preset)
|
||||
`notification_preset` | Notification preset | table | See [default `notification_preset`](https://github.com/copycat-killer/lain/wiki/task#default-notification_preset)
|
||||
|
||||
The tasks are shown in a notification popup when the mouse is moved over the attached `widget`, and the popup is hidden when the mouse is moved away. By default, the notification will show the output of `task next`. With `show_cmd`, the `task` popup command can be customized, for example if you want to [filter the tasks](https://taskwarrior.org/docs/filter.html) or show a [custom report](https://github.com/lcpz/lain/pull/213).
|
||||
The tasks are shown in a notification popup when the mouse is moved over the attached `widget`, and the popup is hidden when the mouse is moved away. By default, the notification will show the output of `task next`. With `show_cmd`, the `task` popup command can be customized, for example if you want to [filter the tasks](https://taskwarrior.org/docs/filter.html) or show a [custom report](https://github.com/copycat-killer/lain/pull/213).
|
||||
|
||||
With multiple screens, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
In multiple screen setups, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
|
||||
You can call the notification with a keybinding like this:
|
||||
|
||||
|
||||
6
.config/awesome/lain/wiki/temp.md
Executable file → Normal file
6
.config/awesome/lain/wiki/temp.md
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
@@ -14,7 +14,7 @@ local mytemp = lain.widget.temp()
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 2
|
||||
`timeout` | Refresh timeout seconds | number | 2
|
||||
`tempfile` | Path of file which stores core temperature value | string | "/sys/class/thermal/thermal_zone0/temp"
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
@@ -29,4 +29,4 @@ Variable | Meaning | Type
|
||||
|
||||
## Note
|
||||
|
||||
Depending on the architecture, note that your temp files location [might vary](https://github.com/lcpz/lain/issues/84#issuecomment-72751763).
|
||||
Depending on the architecture, note that your temp files location [might vary](https://github.com/copycat-killer/lain/issues/84#issuecomment-72751763).
|
||||
@@ -1,103 +0,0 @@
|
||||
# Description
|
||||
|
||||
[`tp_smapi`](http://www.thinkwiki.org/wiki/Tp_smapi) interface and widget creator.
|
||||
|
||||
```lua
|
||||
local tp_smapi = lain.widget.contrib.tp_smapi(apipath)
|
||||
```
|
||||
|
||||
The argument `apipath` is an optional string which defines the API path. Its default value is `"/sys/devices/platform/smapi"`.
|
||||
|
||||
# Functions
|
||||
|
||||
## tp_smapi.get(batid, feature)
|
||||
|
||||
Gets the `feature` of battery `batid`. Returns a string. The list of available features is available at [this page](https://www.thinkwiki.org/wiki/Tp_smapi#Battery_status_features).
|
||||
|
||||
## tp_smapi.installed(batid)
|
||||
|
||||
Checks if battery `batid` is installed. Returns a boolean.
|
||||
|
||||
## tp_smapi.status(batid)
|
||||
|
||||
Gets the status of battery `batid`. Returns a string ("charging", "discharging", or "full").
|
||||
|
||||
## tp_smapi.percentage(batid)
|
||||
|
||||
Gets the percentage of battery `batid`. Returns a numeric string.
|
||||
|
||||
## tp_smapi.time(batid)
|
||||
|
||||
Gets the time of battery `batid`. Depending on the current status, it can be either running or charging time. Returns a string of the format `HH:MM`.
|
||||
|
||||
## tp_smapi.hide()
|
||||
|
||||
Removes any notification spawned by `tp_smapi.show`.
|
||||
|
||||
## tp_smapi.show(batid, seconds, scr)
|
||||
|
||||
Notifies the current information of battery `batid` for `seconds` seconds on screen `scr`.
|
||||
The argument `scr` is optional, and if missing, the notification will be displayed on the currently focused screen.
|
||||
|
||||
## tp_smapi.create_widget(args)
|
||||
|
||||
Creates a [lain widget](https://github.com/lcpz/lain/wiki/Widgets#usage) of the available ThinkPad batteries.
|
||||
|
||||
```lua
|
||||
local tpbat = tp_smapi.create_widget()
|
||||
```
|
||||
|
||||
### Input table
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`widget` | The widget type to use | [`wibox.widget`](https://awesomewm.org/doc/api/classes/wibox.widget.html) | [`wibox.widget.textbox`](https://awesomewm.org/doc/api/classes/wibox.widget.textbox.html)
|
||||
`timeout` | Refresh timeout (in seconds) | integer | 30
|
||||
`pspath` | Power supply directory path | string | "/sys/class/power_supply/"
|
||||
`battery` | Single battery id | string | autodetected
|
||||
`batteries` | Multiple batteries id table | table of strings | autodetected
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
The widget will try to autodetect `battery` and `batteries`. If something
|
||||
goes wrong, you will have to define them manually. In that case, you only have
|
||||
to define one between `battery` and `batteries`. If you have one battery, you
|
||||
can either use `args.battery = "BAT*"` or `args.batteries = {"BAT*"}`, where `BAT*`
|
||||
is the identifier of your battery in `pspath` (do not use it as a wildcard).
|
||||
Of course, if you have multiple batteries, you need to use the latter option.
|
||||
|
||||
If you define `pspath`, **be sure** to not forget the final slash (/).
|
||||
|
||||
`settings` can use the `tpbat_now` table, which contains the following strings:
|
||||
|
||||
- `status`, general status ("N/A", "discharging", "charging", "full");
|
||||
- `n_status[i]`, i-th battery status (like above);
|
||||
- `n_perc[i]`, i-th battery charge percentage (like above);
|
||||
- `n_time[i]`, i-th battery running or charging time (HH:MM string or "N/A");
|
||||
|
||||
`n_time[i]` is the running time of battery `i` when it is discharging, and the charging time otherwise.
|
||||
|
||||
### Output table
|
||||
|
||||
Variable | Meaning | Type
|
||||
--- | --- | ---
|
||||
`widget` | The widget | [`wibox.widget`](https://awesomewm.org/doc/api/classes/wibox.widget.html) | [textbox](https://awesomewm.org/doc/api/classes/wibox.widget.textbox.html)
|
||||
`batteries` | Battery identifiers | Table of strings
|
||||
`update` | Update `widget` | function
|
||||
`timer` | The widget timer | [`gears.timer`](https://awesomewm.org/doc/api/classes/gears.timer.html)
|
||||
|
||||
The `update` function can be used to refresh the widget before `timeout` expires.
|
||||
|
||||
### Usage example
|
||||
|
||||
```lua
|
||||
local tp_smapi = lain.widget.contrib.tp_smapi()
|
||||
local bat = tp_smapi.create_widget {
|
||||
battery = "BAT0",
|
||||
settings = function()
|
||||
widget:set_markup(tpbat_now.n_perc[1] .. "%")
|
||||
end
|
||||
}
|
||||
|
||||
bat.widget:connect_signal("mouse::enter", function () tp_smapi.show("BAT0") end)
|
||||
bat.widget:connect_signal("mouse::leave", function () tp_smapi.hide() end)
|
||||
```
|
||||
30
.config/awesome/lain/wiki/tpbat.md
Normal file
30
.config/awesome/lain/wiki/tpbat.md
Normal file
@@ -0,0 +1,30 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
A battery widget that works with Lenovo ThinkPad laptops using [tp_smapi](http://www.thinkwiki.org/wiki/Tp_smapi).
|
||||
|
||||
Includes hover notification with more details.
|
||||
|
||||
```lua
|
||||
local mytpbat = lain.widget.contrib.tpbat()
|
||||
```
|
||||
|
||||
## Input table
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`timeout` | Refresh timeout seconds | number | 30
|
||||
`battery` | Single battery id | string | "BAT0"
|
||||
`settings` | User settings | function | empty function
|
||||
|
||||
## Output table
|
||||
|
||||
Variable | Meaning | Type
|
||||
--- | --- | ---
|
||||
`widget` | The widget | `wibox.widget.textbox`
|
||||
`update` | Update `widget` | function
|
||||
|
||||
The `update` function can be used to refresh the widget before `timeout` expires.
|
||||
@@ -1,222 +0,0 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
Template for asynchronous watcher widgets.
|
||||
|
||||
Executes an input command and makes the user feed a `wibox.widget` with the output.
|
||||
|
||||
```lua
|
||||
local mywatch = lain.widget.watch()
|
||||
```
|
||||
|
||||
This has been implemented in Awesome 4.0 as [`awful.widget.watch`](https://awesomewm.org/doc/api/classes/awful.widget.watch.html). But while Awesome `watch` returns only the widget, Lain one returns a table including its timer and internal update function too.
|
||||
|
||||
## Input table
|
||||
|
||||
Variable | Meaning | Type | Default
|
||||
--- | --- | --- | ---
|
||||
`widget` | Widget to feed | `wibox.widget` | `wibox.widget.textbox`
|
||||
`timeout` | Refresh timeout seconds | number | 5
|
||||
`cmd` | The command to execute | string **or** table | `nil`
|
||||
`nostart` | Widget timer doesn't start immediately | boolean | false
|
||||
`stoppable` | Widget timer is stoppable | boolean | false
|
||||
`settings` | User settings | function | see [Default `settings` function](https://github.com/lcpz/lain/wiki/watch#default-settings-function)
|
||||
|
||||
If your command needs a shell, you need to set `cmd` as an array of 3 strings, where the first contains the shell, the second contains `-c`, and the third contains the actual command. Example:
|
||||
|
||||
```lua
|
||||
cmd = { awful.util.shell, "-c", "myactualcommand" }
|
||||
```
|
||||
|
||||
`settings` can use the string `output`, which is the output of `cmd`.
|
||||
|
||||
### Default `settings` function
|
||||
|
||||
```lua
|
||||
settings = function() widget:set_text(output) end
|
||||
```
|
||||
## Output table
|
||||
|
||||
Variable | Meaning | Type
|
||||
--- | --- | ---
|
||||
`widget` | The widget | input widget type or `wibox.widget.textbox`
|
||||
`update` | Update `widget` | function
|
||||
`timer` | The widget timer | [`gears.timer`](https://awesomewm.org/doc/api/classes/gears.timer.html) or `nil`
|
||||
|
||||
The `update` function can be used to refresh the widget before `timeout` expires.
|
||||
|
||||
If `stoppable == true`, the widget will have an ad-hoc timer, which you can control though `timer` variable.
|
||||
|
||||
## Use case examples
|
||||
|
||||
### bitcoin
|
||||
|
||||
```lua
|
||||
-- Bitcoin to USD current price, using Coinbase V1 API
|
||||
local bitcoin = lain.widget.watch({
|
||||
timeout = 43200, -- half day
|
||||
stoppable = true,
|
||||
cmd = "curl -m5 -s 'https://coinbase.com/api/v1/prices/buy'",
|
||||
settings = function()
|
||||
local btc, pos, err = require("lain.util").dkjson.decode(output, 1, nil)
|
||||
local btc_price = (not err and btc and btc["subtotal"]["amount"]) or "N/A"
|
||||
|
||||
-- customize here
|
||||
widget:set_text(btc_price)
|
||||
end
|
||||
})
|
||||
```
|
||||
|
||||
### btrfs
|
||||
|
||||
```lua
|
||||
-- btrfs root df
|
||||
local myrootfs = lain.widget.watch({
|
||||
timeout = 600,
|
||||
cmd = "btrfs filesystem df -g /",
|
||||
settings = function()
|
||||
local total, used = string.match(output, "Data.-total=(%d+%.%d+)GiB.-used=(%d+%.%d+)GiB")
|
||||
local percent_used = math.ceil((tonumber(used) / tonumber(total)) * 100)
|
||||
|
||||
-- customize here
|
||||
widget:set_text(" [/: " .. percent_used .. "%] ")
|
||||
end
|
||||
})
|
||||
```
|
||||
|
||||
### cmus
|
||||
|
||||
```lua
|
||||
-- cmus audio player
|
||||
local cmus = lain.widget.watch({
|
||||
timeout = 2,
|
||||
stoppable = true,
|
||||
cmd = "cmus-remote -Q",
|
||||
settings = function()
|
||||
local cmus_now = {
|
||||
state = "N/A",
|
||||
artist = "N/A",
|
||||
title = "N/A",
|
||||
album = "N/A"
|
||||
}
|
||||
|
||||
for w in string.gmatch(output, "(.-)tag") do
|
||||
a, b = w:match("(%w+) (.-)\n")
|
||||
cmus_now[a] = b
|
||||
end
|
||||
|
||||
-- customize here
|
||||
widget:set_text(cmus_now.artist .. " - " .. cmus_now.title)
|
||||
end
|
||||
})
|
||||
```
|
||||
|
||||
### maildir
|
||||
|
||||
```lua
|
||||
-- checks whether there are files in the "new" directories of a mail dirtree
|
||||
local mailpath = "~/Mail"
|
||||
local mymaildir = lain.widget.watch({
|
||||
timeout = 60,
|
||||
stoppable = true,
|
||||
cmd = { awful.util.shell, "-c", string.format("ls -1dr %s/*/new/*", mailpath) },
|
||||
settings = function()
|
||||
local inbox_now = { digest = "" }
|
||||
|
||||
for dir in output:gmatch(".-/(%w+)/new") do
|
||||
inbox_now[dir] = 1
|
||||
for _ in output:gmatch(dir) do
|
||||
inbox_now[dir] = inbox_now[dir] + 1
|
||||
end
|
||||
if #inbox_now.digest > 0 then inbox_now.digest = inbox_now.digest .. ", " end
|
||||
inbox_now.digest = inbox_now.digest .. string.format("%s (%d)", dir, inbox_now[dir])
|
||||
end
|
||||
|
||||
-- customize here
|
||||
widget:set_text("mail: " .. inbox_now.digest)
|
||||
end
|
||||
})
|
||||
```
|
||||
|
||||
### mpris
|
||||
|
||||
```lua
|
||||
-- infos from mpris clients such as spotify and VLC
|
||||
-- based on https://github.com/acrisci/playerctl
|
||||
local mpris = lain.widget.watch({
|
||||
cmd = "playerctl status && playerctl metadata",
|
||||
timeout = 2,
|
||||
stoppable = true,
|
||||
settings = function()
|
||||
local escape_f = require("awful.util").escape
|
||||
local mpris_now = {
|
||||
state = "N/A",
|
||||
artist = "N/A",
|
||||
title = "N/A",
|
||||
art_url = "N/A",
|
||||
album = "N/A",
|
||||
album_artist = "N/A"
|
||||
}
|
||||
|
||||
mpris_now.state = string.match(output, "Playing") or
|
||||
string.match(output, "Paused") or "N/A"
|
||||
|
||||
for k, v in string.gmatch(output, "'[^:]+:([^']+)':[%s]<%[?'([^']+)'%]?>")
|
||||
do
|
||||
if k == "artUrl" then mpris_now.art_url = v
|
||||
elseif k == "artist" then mpris_now.artist = escape_f(v)
|
||||
elseif k == "title" then mpris_now.title = escape_f(v)
|
||||
elseif k == "album" then mpris_now.album = escape_f(v)
|
||||
elseif k == "albumArtist" then mpris_now.album_artist = escape_f(v)
|
||||
end
|
||||
end
|
||||
|
||||
-- customize here
|
||||
widget:set_text(mpris_now.artist .. " - " .. mpris_now.title)
|
||||
end
|
||||
})
|
||||
```
|
||||
|
||||
### upower
|
||||
|
||||
```lua
|
||||
-- battery infos from freedesktop upower
|
||||
local mybattery = lain.widget.watch({
|
||||
timeout = 30,
|
||||
cmd = { awful.util.shell, "-c", "upower -i /org/freedesktop/UPower/devices/battery_BAT | sed -n '/present/,/icon-name/p'" },
|
||||
settings = function()
|
||||
local bat_now = {
|
||||
present = "N/A",
|
||||
state = "N/A",
|
||||
warninglevel = "N/A",
|
||||
energy = "N/A",
|
||||
energyfull = "N/A",
|
||||
energyrate = "N/A",
|
||||
voltage = "N/A",
|
||||
percentage = "N/A",
|
||||
capacity = "N/A",
|
||||
icon = "N/A"
|
||||
}
|
||||
|
||||
for k, v in string.gmatch(output, '([%a]+[%a|-]+):%s*([%a|%d]+[,|%a|%d]-)') do
|
||||
if k == "present" then bat_now.present = v
|
||||
elseif k == "state" then bat_now.state = v
|
||||
elseif k == "warning-level" then bat_now.warninglevel = v
|
||||
elseif k == "energy" then bat_now.energy = string.gsub(v, ",", ".") -- Wh
|
||||
elseif k == "energy-full" then bat_now.energyfull = string.gsub(v, ",", ".") -- Wh
|
||||
elseif k == "energy-rate" then bat_now.energyrate = string.gsub(v, ",", ".") -- W
|
||||
elseif k == "voltage" then bat_now.voltage = string.gsub(v, ",", ".") -- V
|
||||
elseif k == "percentage" then bat_now.percentage = tonumber(v) -- %
|
||||
elseif k == "capacity" then bat_now.capacity = string.gsub(v, ",", ".") -- %
|
||||
elseif k == "icon-name" then bat_now.icon = v
|
||||
end
|
||||
end
|
||||
|
||||
-- customize here
|
||||
widget:set_text("Bat: " .. bat_now.percentage .. " " .. bat_now.state)
|
||||
end
|
||||
})
|
||||
```
|
||||
13
.config/awesome/lain/wiki/weather.md
Executable file → Normal file
13
.config/awesome/lain/wiki/weather.md
Executable file → Normal file
@@ -1,12 +1,12 @@
|
||||
## Usage
|
||||
|
||||
[Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage)
|
||||
[Read here.](https://github.com/copycat-killer/lain/wiki/Widgets#usage)
|
||||
|
||||
### Description
|
||||
|
||||
Provides current weather status widgets and X-days forecast popup notifications.
|
||||
|
||||
Powered by [OpenWeatherMap](http://openweathermap.org/api) API.
|
||||
Uses [OpenWeatherMap](http://openweathermap.org/api) API.
|
||||
|
||||
By default, it uses [current](http://openweathermap.org/current) for current weather data and [forecast16](http://openweathermap.org/forecast16) for forecasts.
|
||||
|
||||
@@ -23,14 +23,13 @@ Variable | Meaning | Type | Default
|
||||
`current_call` | Command to fetch weather status data from the API | string | see `default_current_call`
|
||||
`forecast_call` | Command to fetch forecast data from the API | string | see `default_forecast_call`
|
||||
`city_id` | API city code | number | not set
|
||||
`utc_offset` | UTC time offset | function | see [here](https://github.com/lcpz/lain/blob/master/widget/weather.lua#L35-L39)
|
||||
`units` | Temperature units system | string | "metric"
|
||||
`lang` | API data localization | string | "en"
|
||||
`cnt` | Forecast days interval | integer | 5
|
||||
`cnt` | Forecast days interval | number | 5
|
||||
`date_cmd` | Forecast notification format style | string | "date -u -d @%d +'%%a %%d'"
|
||||
`icons_path` | Icons path | string | `lain/icons/openweathermap`
|
||||
`notification_preset` | Preset for notifications | table | empty table
|
||||
`notification_text_fun` | Function to format forecast notifications | function | see `notification_text_fun` below
|
||||
`notification_text_fun` | Function to format forecast notifications | function | see `notification_text_fun`
|
||||
`weather_na_markup` | Markup to be used when weather textbox is not available | text | " N/A "
|
||||
`followtag` | Display the notification on currently focused screen | boolean | false
|
||||
`showpopup` | Display popups with mouse hovering | string, possible values: "on", "off" | "on"
|
||||
@@ -104,11 +103,11 @@ Variable | Meaning | Type | Default
|
||||
return string.format("<b>%s</b>: %s, %d - %d ", day, desc, tmin, tmax)
|
||||
end
|
||||
```
|
||||
See [here](https://github.com/lcpz/lain/issues/186#issuecomment-203400918) for a complete customization example.
|
||||
See [here](https://github.com/copycat-killer/lain/issues/186#issuecomment-203400918) for a complete customization example.
|
||||
|
||||
- ``followtag``
|
||||
|
||||
With multiple screens, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
In multiple screen setups, the default behaviour is to show a visual notification pop-up window on the first screen. By setting `followtag` to `true` it will be shown on the currently focused tag screen.
|
||||
|
||||
- ``settings``
|
||||
|
||||
|
||||
Reference in New Issue
Block a user