awesome is awesome. I use it on all Arch Linux desktop/laptop machines that I have control over (admittedly, it is not designed for handheld smartphones/tablets).
one-key-combo switching between tiling and stacking window management styles.
the ability to do dynamic tagging (meaning it is not enabled by the default configuration---at least up to v3.5.4 (Brown Paper Bag) released on 2 April 2014).
This repo holds my personal take of awesome's configuration. Hightlights:
persistent dynamic tagging across (both regular and randr-induced) restarts.
dynamic tagging means tags can be created/moved/renamed/deleted on the fly without touching the configuration.
persistent means tags and the clients/programs associated with each tag is preserved across awesome restart.
this is the feature I have desired for that is lacking in current default configuration.
Emacs-inspired universal argument: Specify a numeric argument for, e.g., repetition or precise resizing. Idea/prototype credit: @AnthonyAaronHughWong in #3.
confirmation before quit/restart to minimize data loss accidents.
you have to type "yes" (case insensitive) before quitting/restarting.
this minimizes the chance that you lose your work by accidents.
keybindings for tuning transparency (using picom), stay-on-top, sticky.
these features combined, along with tiling and floating layouts, allow you to type in one window while seeing the content of others.
keybindings to my preferred applications.
only cycle through the most sensible (IMHO) layouts.
keybinding optimized for Arch Linux over Thinkpad W530 (my current workhorse).
setup
install on Linux
Install awesome with your preferred package manager. Example: sudo pacman -S awesome --needed --noconfirm on Arch Linux.
These dependencies are mostly derived from the application keybindings. Some are needed to enable basic features like theming (feh), Desktop Entry Specification-style autostart (dex), audio setup (alsa-utils), backlight (xorg-xbacklight), Webcam (cheese), music player (mpd and mpc), screen lock (xfce4-screensaver), network management (network-manager-applet), terminal (kitty), task manager (xfce4-taskmanager), and screen setup (arandr), etc..
Although not strictly dependencies, some of the packages are, in my opinion, nice to have.
populate your $HOME/.config/autostart with Desktop Entry Specification-style autostart files (optionally with OnlyShowIn=awesome if you only want them to auto-start in awesome).
Take a look at the "rc.lua" configuration file ($HOME/.config/awesome/rc.lua; perhaps by pressing the keybinding Modkeyc which will open rc.lua with the primary editor---for me, Vim).
Most keybindings are prefixed with the Modkey. This config associates Modkey to X Window's Mod4. On many machines, this associates the Super_L (tip: use xmodmap in terminal emulator to verify/change this), which usually translate to the (intuitively) Windows key.
Some keybinding requires further input (e.g., rename a tag), which will grab the key focus from your application. The Esc key is used to cancel partial input.
universal argument
Universal Argument (UniArg), inspired by the namesake Emacs feature, supplies a positive numeric argument to the following command. Depending on the context, it may supply a number of repetitions (search for uniarg:key_repeat in rc.lua) or a numeric argument (search for uniarg:key_numarg in rc.lua) such as percentage of volume adjustment or pixels to resize the client window. For example, with the UniArg being 3, "open terminal" operation (ModkeyEnter by default) will open 3 terminals.
Universal argument is activated when inputing a great-than-1 integer, and is deactivated when inputing a less-than-2 integer or a non-number. When universal argument is deactivated, the default behavior kicks in, which follows some heuristics to do sensible things such as the "extend client by 1/7 of the margin" and "shrink client by 1/11 of client width and leave client width at least 50 pixels" behavior for client window side expansion/shrinking documented below.
There are two modes of universal argument: Regular and persistent. Regular universal argument only applies to the next operation, while persistent universal argument applies to all following operations until changed or deactivated.
key combo
function
comment
Modkeyu
prompt for universal argument
see above paragraphs for details
ModkeyShiftu
prompt for persistent universal argument
see above paragraphs for details
window management
restart/quit/info
key combo
function
comment
ModkeyCtrlr
restart
"r" for restart; used for apply updated "rc.lua" config file
ModkeyCtrlShiftr
restart
"r" for restart; restart without confirming with user
ModkeyShiftq
quit
"q" for quit; exit the current Awesome session
ModkeyShiftCtrlq
forcibly quit
"q" for quit; quit without confirming with user
Modkey\
system info popup
ModkeyCtrl\
clear all pending notifications
ModkeyAlt\
toggle between suspending/resuming notifications
Modkeyf1
open help in browser
CtrlShiftEsc
open task manager
xfce4-taskmanager
layout
key combo
function
comment
ModkeySpace
change to next layout
ModkeyShiftSpace
change to prev layout
mouse action
function
left button
change to next layout
right button
change to prev layout
scroll up
change to prev layout
scroll down
change to next layout
only the following layouts are enabled
layout
comment
floating
allow window stacking; the default
tile
tiling with master on the left
fair
fair allocation of screen space
fullscreen
the focused client fullscreened
magnifier
the focused client centered but not fullscreened
in the floating mode, the following mouse actions on client window are enabled
create a new tag after the current one and view it
"a" for add
ModkeyShifta
create a new tag before the current one and view it
"a" for add
ModkeyShiftd
delte the current tag if there is no client on it
"d" for delete
ModkeyShiftr
rename the current tag
"r" for rename
view
key combo
function
comment
Modkeyp
view previous tag
"p" for previous
Modkeyn
view next tag
"n" for next
Modkeyz
view last tag
Modkeyg
prompted for a tag to view
with tag name completion with Tab
Modkey+[1-9,0]
view the first-ninth, tenth tag
prompt for "add a new tag" if not already existed
ModkeyCtrl+[1-9,0]
view also the first-ninth, tenth tag
prompt for "add a new tag" if not already existed
move
key combo
function
comment
ModkeyCtrlp
move the current tag backward by 1 position
ModkeyCtrln
move the current tag forward by 1 position
client management
operation
key combo
function
comment
ModkeyShiftc
kill focused client
Altf4
kill focused client
MSFT Windows key
Modkeyf
toggle fullscreen status
hides statusbar
Modkeym
toggle maximized status
leaves statusbar visible
ModkeyLeft
move window to left half screen
leaves statusbar visible
ModkeyRight
move window to right half screen
leaves statusbar visible
ModkeyUp
move window to top half screen
leaves statusbar visible
ModkeyDown
move window to bottom half screen
leaves statusbar visible
ModkeyAltLeft
extend client to the left
by 1/7 of the margin
ModkeyAltRight
extend client to the right
by 1/7 of the margin
ModkeyAltUp
extend client to the top
by 1/7 of the margin
ModkeyAltDown
extend client to the bottom
by 1/7 of the margin
ModkeyAltShiftLeft
shrink client from right
by 1/11 of client width; leave client width at least 50 pixels
ModkeyAltShiftRight
shrink client from left
by 1/11 of client width; leave client width at least 50 pixels
ModkeyAltShiftUp
shrink client from bottom
by 1/11 of client height; leave client height at least 50 pixels
ModkeyAltShiftDown
shrink client from top
by 1/11 of client height; leave client height at least 50 pixels
ModkeyShiftm
minimize
minimized client need mouse click on tasklist to restore
ModkeyCtrlSpace
toggle floating status
Modkeyt
toggle ontop status
Modkeys
toggle sticky status
Modkey,
toggle horizontal maximized status
Modkey.
toggle vertical maximized status
Modkey[
decrease opacity by 10%
need composite manager
Modkey]
increase opacity by 10%
need composite manager
ModkeyShift[
disable composite manager
ModkeyShift]
enable composite manager
change focus
key combo
function
comment
Modkeyj
focus on the next client in current tag
"j" is easy to reach
ModkeyTab
focus on the next client in current tag
MSFT Windows key
Modkeyk
focus on the prev client in current tag
"k" is easy to reach
ModkeyShiftTab
focus on the prev client in current tag
MSFT Windows key
Modkeyy
jump to the urgent client
"y" next to "u" (taken by universal argument) for urgent
swap order/select master
key combo
function
comment
ModkeyCtrlEnter
select current client as the master
master is featured on the screen
ModkeyShiftj
swap current client with the next one
"j" is easy to reach
ModkeyShiftk
swap current client with the prev one
"k" is easy to reach
move/copy to tag
all these keys work on the single currently focused client
key combo
function
comment
ModkeyShiftp
send the client to the previous tag
"p" for previous
ModkeyShiftn
send the client to the next tag
"n" for next
ModkeyShiftg
move the client to the named tag
with tag name completion by Tab
ModkeyCtrlShiftg
toggle the named tag for the client
with tag name completion by Tab
ModkeyShift1-9,0
move the client to {first-ninth, tenth} tag
prompt for "add a new tag" if not already existed
ModkeyCtrlShift1-9,0
toggle the {first-ninth, tenth} tag for the client
prompt for "add a new tag" if not already existed
change space allocation in tile layout
key combo
function
comment
Modkey=
reset master width to 50%
"=" for equal partition of screen
Modkeyl
increase master width by 5%
"l" towards right on keyboard
Modkeyh
decrease master width by 5%
"h" towards left on keyboard
ModkeyShiftl
increase number of masters by 1
"l" towards right on keyboard
ModkeyShifth
decrease number of masters by 1
"h" towards left on keyboard
ModkeyCtrll
increase number of columns by 1
"l" towards right on keyboard
ModkeyCtrlh
decrease number of columns by 1
"h" towards left on keyboard
misc
key combo
function
comment
ModkeyShift`
toggle the visibility of current client's titlebar
app bindings
shortcut keys are bound for most common apps; the keybinding is designed to be balanced between the left (pressing the Modkey) and the right hand (an additional easy to reach key).
The items can be changed with awesome-client. Example:
customization.option.wallpaper_change_p=true-- enable random wallpaper choosingcustomization.timer.change_wallpaper.timeout=7.5-- choose a wallpaper every 7.5 seconds
value
type
meaning
default value
customization.option.wallpaper_change_p
boolean
random wallpaper choosing enabled?
true
customization.option.launch_compmgr_p
boolean
launch composite manager on startup?
false
customization.timer.change_wallpaper.timeout
number
randomly choose a wallpaper from the "wallpaper" directory after every this number of seconds
15
customization.option.tag_persistent_p
boolean
tag persistent across restart? false for clean slate
true
customization.option.low_battery_notification_p
boolean
warn about low battery condition
true
customization.widgets.bat.warning_threshold
number
low battery notification threshold in percentage
10
customization.widgets.bat.instance
string
battery under monitor for low battery notification
"BAT0"
todo
improve persistent dynamic tagging: preserve tag configuration (e.g., layout style and client positions)
I've noticed that the key-binding s-S-m that uses the customization.func.client_minimize() function for minimizing a window is not working. However, when left clicking the task name in the task list, or using the drop-down menu, which uses that same function to minimize a window, it works just fine.
Thank you for this awesome Awesome config!
Edit: s-m for maximizing a window is not working as well :(.
I am trying to fix your rc.lua with awesome 4.0 (Released today on arch) but give random errors every time I fixed something >.< and I am wondering if you are going to upgrade :D
Hi,
first of all: awesome awesome setup. I did some modifications to fit my needs. I might share them when I find time.
Sometimes my persistent Tagging gets messed up. By just rebooting the computer, it starts over with just the genesis tag instead of my custom list. Do you face that problem as well? How can we debug it?
Hi,
I just started to use your awesome config. It is very nice.
I have some problem with the dynamic tagging and my dual setup monitor.
Usually when I finish to work i suspend my laptop and reset the display only to the laptop display later on when I switch back to the dual monitor setup all the tags in the different monitors are screwed! Plus I have on both monitor the default awesome tag (1..9) .
I do not see where the tags are written. I thought in ~/.cache/awesome but I cannot find every tag I have.
This has worked on all the other awesome configs ive tried (was using arco stock but it doesnt make mnuch sense to me and i wanted to actually learn this wm even though lua configs are fairly confusing af to me if not a simple var name and value option) but with yours it just brings up a totally blank hotkey/cheatsheet on-top notify/window. No tmux/awesome/client with hot keys.
I tried moving my modfied config and just copying straight from git as per the readme.md but exactly the same. Its usable and I dunno where to start without tthat helping me to learn hotkeys and without them, back to arco or onto the next one but i love the nested tags setup and other things, plus a few thousand lines of lua is enough effort to appreciate.
I dont even know where awesomes logs are, i tried awesome -k to test and it says rc was fine.
only logs i can find with a little ddgr'ing
╭─nsomnia at LauraMum in ⌁/Crypto--Final.My.Master.All.Root/4_Docker-crypto-images--all/freqtrade/ft_userdata
╰─tail -f /proc/688/fd/* 130 (4.006s) < 22:50:35
tail: cannot open '/proc/688/fd/0' for reading: Permission denied
==> /proc/688/fd/1 <==
==> /proc/688/fd/2 <==
JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
JavaScript error: resource://gre/modules/PromiseWorker.jsm, line 106: Error: Could not get children of file(/home/nsomnia/.cache/librewolf/53xmlvl6.default-release/thumbnails) because it does not exist
JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
JavaScript error: moz-extension://1fc6f246-b245-4ea2-991f-8daa6647ae47/background/background.js, line 8: Error: Promised response from onMessage listener went out of scope
JavaScript error: moz-extension://1fc6f246-b245-4ea2-991f-8daa6647ae47/background/background.js, line 8: Error: Promised response from onMessage listener went out of scope
JavaScript error: moz-extension://1fc6f246-b245-4ea2-991f-8daa6647ae47/background/background.js, line 8: Error: Promised response from onMessage listener went out of scope
[116912:116917:1118/224314.195320:ERROR:ssl_client_socket_impl.cc(941)] handshake failed; returned -1, SSL error code 1, net_error -100
Hi, I've been using your configuration for two years and I still love it! Great work! I recently upgraded to version version 4.0.5 and I have a different behavior. I just want to know if it is normal.
When I create an empty tag, it is not visible. For example, let's say that I have:
tag1, tag2, tag3
tag1: 1 window
tag2: 0 window
tag3: 1 window
If my current tag is tag1, I only see tag1 and tag3. and if I hit "mod4 + n" or "mod4 + 2", I get moved to tag2. I can use it normally but it is not shown if my current tag is 1 or 3.
Personally, I find it harder to work with invisible tags so maybe it's just a bug? Or my configuration
You store persistent tagging information in /tmp/ (rc.lua:94). It's my understanding that the XDG_CACHE_DIR, which can be found with awful.util.getdir("cache"), is a better, more standard location for such semi-persistent information.
I was browsing around for some Zenburn Awesome theme files for 3.5 when I found your config. Awesome work!