Convert Figma logo to code with AI

awesomeWM logoawesome

awesome window manager

6,364
598
6,364
561

Top Related Projects

3,347

The core of xmonad, a small but functional ICCCM-compliant tiling window manager

9,488

A tiling window manager for X11

7,755

A tiling window manager based on binary space partitioning

A manual tiling window manager for X11

4,793

:cookie: A full-featured, hackable tiling window manager written and configured in Python (X11 + Wayland)

14,537

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

  1. Install Awesome on your system (e.g., for Ubuntu: sudo apt-get install awesome)
  2. Create a configuration file:
    mkdir -p ~/.config/awesome
    cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
    
  3. Edit ~/.config/awesome/rc.lua to customize your setup
  4. Log out and select Awesome as your window manager at the login screen
  5. 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

3,347

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.

9,488

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.

7,755

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.

4,793

: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.

14,537

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

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

  1. create a build directory at ./build,
  2. run cmake,
  3. build Awesome and
  4. 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.

IRC Webchat

Stack Overflow

You can ask questions on Stack Overflow.

Reddit

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

Build 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).