Top Related Projects
The core of xmonad, a small but functional ICCCM-compliant tiling window manager
A tiling window manager for X11
A tiling window manager based on binary space partitioning
A manual tiling window manager for X11
:cookie: A full-featured, hackable tiling window manager written and configured in Python (X11 + Wayland)
i3-compatible Wayland compositor
Quick Overview
Awesome is a highly configurable, next-generation framework window manager for X. It is primarily targeted at power users, developers, and any people dealing with every day computing tasks who want to have fine-grained control over their graphical environment.
Pros
- Extremely customizable with Lua scripting
- Lightweight and fast performance
- Tiling and floating window management
- Extensive documentation and active community
Cons
- Steep learning curve for new users
- Requires knowledge of Lua for advanced customization
- Limited out-of-the-box functionality compared to full desktop environments
- Can be overwhelming due to its extensive configuration options
Getting Started
- Install Awesome on your system (e.g., for Ubuntu:
sudo apt-get install awesome
) - Create a configuration file:
mkdir -p ~/.config/awesome cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
- Edit
~/.config/awesome/rc.lua
to customize your setup - Log out and select Awesome as your window manager at the login screen
- Use the default mod4 (Windows key) + s to open the help menu for keybindings
For more detailed instructions and customization options, refer to the official documentation at https://awesomewm.org/doc/
Competitor Comparisons
The core of xmonad, a small but functional ICCCM-compliant tiling window manager
Pros of xmonad
- Written in Haskell, offering strong type safety and functional programming benefits
- Highly extensible and customizable through Haskell modules
- Minimal resource usage and excellent performance
Cons of xmonad
- Steeper learning curve due to Haskell configuration
- Smaller community and ecosystem compared to Awesome
- Less out-of-the-box functionality, requiring more manual configuration
Code Comparison
xmonad
main = xmonad $ def
{ modMask = mod4Mask
, layoutHook = Tall 1 (3/100) (1/2) ||| Full
, terminal = "xterm"
}
awesome
awful.layout.layouts = {
awful.layout.suit.floating,
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
}
The xmonad configuration is more concise and leverages Haskell's functional nature, while Awesome's Lua-based configuration is more imperative and verbose. xmonad's approach may be more powerful for advanced users, but Awesome's style is generally easier for beginners to understand and modify.
A tiling window manager for X11
Pros of i3
- Simpler configuration using a plain text file
- More lightweight and faster startup times
- Easier to learn for beginners due to its straightforward tiling approach
Cons of i3
- Less customizable compared to Awesome
- Limited support for floating windows and dynamic layouts
- Lacks built-in widgets and more advanced features
Code Comparison
i3 configuration example:
bar {
status_command i3status
position top
}
bindsym $mod+Return exec i3-sensible-terminal
bindsym $mod+Shift+q kill
Awesome configuration example (Lua):
awful.key({ modkey }, "Return", function() awful.spawn(terminal) end),
awful.key({ modkey, "Shift" }, "q", function() client.focus:kill() end),
awful.wibar({ position = "top", screen = s })
Both window managers use configuration files to define keybindings and UI elements. i3 uses a simpler, more readable syntax, while Awesome leverages Lua for more complex configurations and customizations.
i3 focuses on a straightforward tiling approach with minimal overhead, making it ideal for users who prefer simplicity and efficiency. Awesome, on the other hand, offers more advanced features and customization options, catering to power users who want granular control over their desktop environment.
A tiling window manager based on binary space partitioning
Pros of bspwm
- Lightweight and minimalist design, consuming fewer system resources
- Highly customizable through simple shell scripts
- True tiling window manager with automatic window splitting
Cons of bspwm
- Steeper learning curve for new users
- Lacks built-in features like a status bar or system tray
- Requires additional tools for basic functionality (e.g., sxhkd for keybindings)
Code Comparison
bspwm configuration (bspwmrc):
#! /bin/sh
bspc monitor -d I II III IV V VI VII VIII IX X
bspc config border_width 2
bspc config window_gap 12
bspc config split_ratio 0.52
bspc config borderless_monocle true
awesome configuration (rc.lua):
local awful = require("awful")
awful.layout.layouts = {
awful.layout.suit.floating,
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
}
Both bspwm and awesome are popular window managers for Linux, but they cater to different user preferences. bspwm is a minimalist tiling window manager that focuses on simplicity and efficiency, while awesome offers a more feature-rich environment with built-in widgets and layouts. The choice between them depends on the user's desired level of customization and out-of-the-box functionality.
A manual tiling window manager for X11
Pros of herbstluftwm
- Simpler configuration using shell scripts
- More flexible tiling layouts with manual splitting
- Lighter resource usage
Cons of herbstluftwm
- Less feature-rich out of the box
- Smaller community and ecosystem
- Steeper learning curve for advanced customization
Code Comparison
herbstluftwm configuration (bash script):
hc keybind $Mod-Shift-q quit
hc keybind $Mod-Shift-r reload
hc keybind $Mod-w close
hc keybind $Mod-Return spawn ${TERMINAL:-xterm}
awesome configuration (Lua):
awful.key({ modkey, "Shift" }, "q", awesome.quit),
awful.key({ modkey, "Shift" }, "r", awesome.restart),
awful.key({ modkey, }, "w", function () client.focus:kill() end),
awful.key({ modkey, }, "Return", function () awful.spawn(terminal) end),
Both window managers allow for extensive customization, but herbstluftwm uses shell scripts for configuration, while awesome uses Lua. herbstluftwm offers more manual control over window layouts, while awesome provides a more feature-rich environment with widgets and pre-configured layouts. The choice between them often comes down to personal preference and specific needs.
:cookie: A full-featured, hackable tiling window manager written and configured in Python (X11 + Wayland)
Pros of qtile
- Written in Python, making it more accessible for customization and scripting
- Supports multiple screens and layouts out of the box
- Has a built-in widget system for easy statusbar customization
Cons of qtile
- Less mature and smaller community compared to awesome
- Fewer pre-built widgets and extensions available
- May have slightly higher resource usage due to Python runtime
Code Comparison
qtile configuration example:
from libqtile import bar, layout, widget
from libqtile.config import Key, Group, Drag, Click
from libqtile.lazy import lazy
keys = [
Key(["mod1"], "k", lazy.layout.down()),
Key(["mod1"], "j", lazy.layout.up()),
]
awesome configuration example:
local awful = require("awful")
local beautiful = require("beautiful")
awful.rules.rules = {
{ rule = { },
properties = { border_width = beautiful.border_width,
border_color = beautiful.border_normal,
focus = awful.client.focus.filter,
raise = true,
keys = clientkeys,
buttons = clientbuttons } },
}
Both window managers offer powerful customization options, but qtile's Python-based configuration may be more familiar to some users, while awesome's Lua-based setup provides a lightweight and efficient environment.
i3-compatible Wayland compositor
Pros of Sway
- Native Wayland support, offering better performance and security
- Seamless HiDPI and mixed DPI setups
- Drop-in replacement for i3, easing transition for i3 users
Cons of Sway
- Limited compatibility with X11 applications
- Less customizable compared to Awesome's Lua scripting
- Smaller ecosystem and fewer third-party tools
Code Comparison
Sway configuration (sway/config):
input * {
xkb_layout "us"
xkb_variant "dvorak"
}
Awesome configuration (rc.lua):
awful.keyboard.append_global_keybindings({
awful.key({ modkey }, "s", hotkeys_popup.show_help,
{description="show help", group="awesome"})
})
Sway focuses on a more straightforward configuration syntax, while Awesome leverages Lua for advanced customization. Sway's config is similar to i3, making it familiar for i3 users. Awesome's use of Lua allows for more complex behaviors and integrations.
Both window managers offer tiling capabilities, but Sway is designed specifically for Wayland, while Awesome is primarily an X11 window manager. This fundamental difference impacts their feature sets, performance characteristics, and compatibility with various applications and systems.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Readme
About Awesome
Awesome is a highly configurable, next generation framework window manager for X.
Building and installation
After extracting the dist tarball or cloning the repository, run:
make
sudo make install
This will
- create a build directory at
./build
, - run
cmake
, - build Awesome and
- install it to the default prefix path
/usr/local
.
Alternatively to the above, you can generate a .deb
or .rpm
package, for easy installation management:
make package
sudo dpkg -i awesome-x.y.z.deb
# or
sudo rpm -Uvh awesome-x.y.z.rpm
Advanced options and testing
A full list of dependencies, more advanced build options, as well as instructions on how to use the test suite can be found here.
Installing current git master as a package receipts
Arch Linux AUR
sudo pacman -S --needed base-devel git
git clone https://aur.archlinux.org/awesome-git.git
cd awesome-git
makepkg -fsri
Debian-based
sudo apt build-dep awesome
git clone https://github.com/awesomewm/awesome
cd awesome
make package
cd build
sudo apt install ./*.deb
Running Awesome
You can directly select Awesome from your display manager. If not, you can
add the following line to your .xinitrc
to start Awesome using startx
or to .xsession
to start Awesome using your display manager:
exec awesome
In order to connect Awesome to a specific display, make sure that
the DISPLAY
environment variable is set correctly, e.g.:
DISPLAY=foo.bar:1 exec awesome
(This will start Awesome on display :1
of the host foo.bar.)
Configuration
The configuration of Awesome is done by creating a
$XDG_CONFIG_HOME/awesome/rc.lua
file, typically ~/.config/awesome/rc.lua
.
An example configuration named awesomerc.lua
is provided in the source.
Troubleshooting
On most systems any message printed by Awesome (including warnings and errors)
is written to ~/.xsession-errors
.
If Awesome does not start or the configuration file is not producing the desired results the user should examine this file to gain insight into the problem.
Debugging tips
You can call awesome
with gdb
like this:
DISPLAY=:2 gdb awesome
Then in gdb
set any arguments and run it:
(gdb) set args --replace
(gdb) run
Asking questions
IRC
You can join us in the #awesome
channel on the OFTC IRC network.
Stack Overflow
You can ask questions on Stack Overflow.
We also have an awesome subreddit where you can share your work and ask questions.
Reporting issues
Please report any issues you may find on our bugtracker.
Contributing code
You can submit pull requests on the GitHub repository. Please read the contributing guide for any coding, documentation or patch guidelines.
Status
Documentation
Online documentation is available here.
License
The project is licensed under GNU General Public License v2 or later. You can read it online at (v2 or v3).
Top Related Projects
The core of xmonad, a small but functional ICCCM-compliant tiling window manager
A tiling window manager for X11
A tiling window manager based on binary space partitioning
A manual tiling window manager for X11
:cookie: A full-featured, hackable tiling window manager written and configured in Python (X11 + Wayland)
i3-compatible Wayland compositor
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot