Topic 07-my-first-awesome.md - awesome API documentation

# My first Awesome

This little tutorial is for people who never used a tiling window manager before and don't have fancy hacking skills. We will explore the awesome world of Awesome step by step and finally come up with a working desktop, providing some basic knowledge on how to configure Awesome in the process. We will start with the default rc.lua that comes with Awesome, play around a little and try to make it more beautiful and useful with widgets. For this tutorial you don't need any programming skills besides using a text editor.

## Explore Awesome

I will assume that you properly installed Awesome through your distribution's package manager or compiled it from source. You should now add `exec awesome` to your `~/.xinitrc`. As already mentioned, Awesome provides a default config file which will be our starting point. You will usually find this rc.lua file in `/etc/xdg/awesome/`. Copy it to `~/.config/awesome/`, and then start X (for example by running `startx`).

Move your mouse to the upper left corner and click on the Awesome logo. A little menu opens. Browse through the menu, then click the logo again to close it. Next to the Awesome menu you see numbers 1-9. These are your tags (or desktops if you want). You can click on these to change them but nothing will happen because we have not opened any programs. On the top right you see the time/date and a symbol showing the current layout. You can also click on the symbol to change the active layout.

One of the big advantages of Awesome over other tiling window managers is its good mouse support. Awesome can act as a full floating window manager (almost like openbox) if you want. For this basic tutorial we will mainly focus on keyboard control, so let's learn some key bindings now.

Let's open a terminal: press Mod4+Enter. Mod4 is your "Windows key", the key between Ctrl and Alt. You can change the modkey if you want, but we'll get to that later. An `xterm` window will pop up. You can of course use your favourite terminal if you like. Again, more on that later. Now press Mod4+Shift+c to close the terminal. This is the command which lets you close any application. Awesome has an elegant way to launch programs: press Mod4+r. Now you will see a Run: prompt in the status bar. Start anything you like, it also features Tab-completion!

Open more applications to see the tiling features. You can now press Mod4+Space to cycle through all the possible tiling (and floating) layouts. Note that the icon in the upper right changes.

Also try Mod4+h, Mod4+l, Mod4+Shift+h and Mod4+Shift+l to resize windows. You can also resize with Mod4+Button3 (right click). Mod4+f will make your current window fullscreen.

With Mod4+Number (1-9) you can browse through your tags. With Mod4+Shift+Number (1-9) you can send a window to a specific tag. Mod4+Left and Mod4+Right moves to the next tag in the specified direction.

Use Mod4+k and Mod4+j to change your focused client - moving your mouse will also do that.

Mod4+Shift+q quits Awesome, but don't do that now.

For an overview of all key bindings, press Mod4+s. Pressing any key closes this overview again.

If you are a Vim user, try this: Press Mod4+r for the run prompt, enter `gvim` and press Enter to start it. Now press Mod4+s again. The key binding overview now also provides a cheat sheet for controlling Vim.

## Change the theme

Awesome has four themes you can choose from: default, sky, xresources, and zenburn.

To change the theme, open your rc.lua and edit this line near the beginning of the file:

    beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua")

For this tutorial we will stick with the default theme.

Now we will customize the theme. Copy `/usr/share/awesome/themes/default/theme.lua` to `~/.config/awesome/` and change the above line in your theme like this (remember to replace `USER` with your user name):

    beautiful.init("/home/USER/.config/awesome/theme.lua")

### Change the background image

Your desktop background image is handled in your theme file. To change it, edit this line in your theme file:

    beautiful.get().wallpaper = "/usr/share/awesome/themes/default/background.png"

## Personalize your layouts

To optimize our workflow, we now want to give names to our tags and set the specific tiling or floating mode for each of them. Open your rc.lua and find the layouts section. It should look like this:

    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,
        awful.layout.suit.fair,
        awful.layout.suit.fair.horizontal,
        awful.layout.suit.spiral,
        awful.layout.suit.spiral.dwindle,
        awful.layout.suit.max,
        awful.layout.suit.max.fullscreen,
        awful.layout.suit.magnifier,
        awful.layout.suit.corner.nw,
        -- awful.layout.suit.corner.ne,
        -- awful.layout.suit.corner.sw,
        -- awful.layout.suit.corner.se,
    }

These are all possible tiling and floating layouts Awesome has. If you don't find all of them useful, you can comment some of them out by adding "--" to the beginning of the line. Awesome already comes with three layouts which are not used in the default config, as you can see above.

## Personalize your tags

Next, we want to name our tags. This is the default tag creation with numbers from 1 to 9:

    -- Each screen has its own tag table.
    awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[1])

Now we want to change the tag names and assign a specific layout to each of them. By default, each tag has a floating layout (the first entry in the `layouts` table). To change this, we define a specific layout for each tag.

Replace the above with this code:

    -- Each screen has its own tag table.
    local names = { "main", "www", "skype", "gimp", "office", "im", "7", "8", "9" }
    local l = awful.layout.suit  -- Just to save some typing: use an alias.
    local layouts = { l.floating, l.tile, l.floating, l.fair, l.max,
        l.floating, l.tile.left, l.floating, l.floating }
    awful.tag(names, s, layouts)

We use `layouts` to set the layout for each tag. Edit this as you like.

## Some global settings

While we are at it, we can also change the default terminal, editor and assign the modkey to a different key:

    terminal = "xterm"
    editor = os.getenv("EDITOR") or "nano"
    […]
    modkey = "Mod4"

Change these settings to your liking. They are pretty self-explanatory and well-documented in the comments.

## Wrapping up

Save your rc.lua and restart awesome (Mod4+Ctrl+r). Now the modifications done above should be applied.

Note that any mistakes in your rc.lua can cause problems. You can save yourself some trouble by using `Xephyr` to test your changes.

Open a terminal and run the following command:

    Xephyr :5 & sleep 1 ; DISPLAY=:5 awesome

A new window will appear and a new awesome instance runs inside of it.

## Add widgets

Before the following line:

    mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,

Add this to create a new widget:

    praisewidget = wibox.widget.textbox()
    praisewidget.text = "You are great!"

The widget still needs to be added to a wibar. For this, find the definition of your wibar and change it as follows:

    { -- Left widgets
        layout = wibox.layout.fixed.horizontal,
        mylauncher,
        praisewidget, -- This line is new
        s.mytaglist,
        s.mypromptbox,
    },

This gives you a basic idea on how to add a widget. For an overview of available widgets and how to arrange them, please read 03-declarative-layout.md.

## Further reading

To learn more about the individual parts of the default configuration file, please look at 05-awesomerc.md.

generated by LDoc 1.5.0 Last updated 2025-09-27 02:02:16