How-To :: Awesome WM


Após muita pesquisa e diversos Ctrl+Alt+Backspace para testar as configs, está oficialmente pronto meu Desktop aternativo com o Awesome WM.

Instalação.

E numa distro qualquer, veja se o pacote awesome está disponível!

Arch Linux.

$ sudo pacman -S awesome vicious
$ packer|yaourt -S awesome-revelation-git  # alternativa ao pacote awesome-extra não disponível no Arch Linux.
$ packer|yaourt -S awesome-themes-git      # alternativa para não baixar os temas.
$ mkdir -p ~/.config/awesome
$ cp /etc/skel/.xinitrc ~
$ echo "exec awesome" >> ~/.xinitrc
$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/

Debian-based.

$ sudo apt-get install awesome awesome-extra
$ mkdir -p ~/.config/awesome
$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
$ sudo update-alternatives --config x-window-manager

Slackware.

$ sudo sbopkg -i "lua lgi libxdg-basedir awesome awesome-extra awemenugen"
$ mkdir -p ~/.config/awesome
$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
$ xwmconfig

* essa nota refere-se apenas ao Slackware: o awemenugen, só estará disponível no próximo fim de semana.

** e esta refere-se a qualquer distribuição: copiar o arquivo rc.lua lhe oferecerá a configuração padrão do Awesome, a minha configuração está muito modificada, seja devido a inclusão de itens no menu, do próprio gerador de menus, dos temas e dos programas a serem iniciados junto ao WM.

Temas e configs.

Por meio do link abaixo é possível baixar as configurações que estou usando bem como os temas que baixei em https://github.com/mikar/awesome-themes:

https://www.dropbox.com/s/bnvs8v86lh9d5aw/awesome-configs-by_edps.tar.xz

No modo o titio configura, hospeda e ensina como fazer:

$ mkdir ~/.config && cd ~/.config/
$ wget https://www.dropbox.com/s/bnvs8v86lh9d5aw/awesome-configs-by_edps.tar.xz
$ tar xf awesome-configs-by_edps.tar.xz

Ou de algum lugar lá na longínqua e pacata cidade de Miracema do Norte:

$ wget https://www.dropbox.com/s/bnvs8v86lh9d5aw/awesome-configs-by_edps.tar.xz
$ tar xf awesome-configs-by_edps.tar.xz -C ~/.config/

Mas se os senhores quiserem, podem baixar os temas via git e daqui pegar apenas o arquivo rc.lua:

$ mkdir ~/.config/awesome
$ cd ~/.config/awesome/
$ git clone https://github.com/mikar/awesome-themes themes

O arquivo “rc.lua”

Tendo baixado os temas, é hora de copiar o arquivo ~/.config/awesome/rc.lua que criei (inclusive adicionando todos os temas), seja baixando:

Awesome rc.lua

Ou copiando:

-- Standard awesome library
local gears = require("gears")
local awful = require("awful")
awful.rules = require("awful.rules")
require("awful.autofocus")
require("revelation")
require("applicationsmenu")

-- Widget and layout library
local wibox = require("wibox")

-- Theme handling library
local beautiful = require("beautiful")

-- Notification library
local naughty = require("naughty")
local menubar = require("menubar")

-- {{{ Error handling
-- Check if awesome encountered an error during startup and fell back to
-- another config (This code will only ever execute for the fallback config)
if awesome.startup_errors then
    naughty.notify({ preset = naughty.config.presets.critical,
                     title = "Oops, there were errors during startup!",
                     text = awesome.startup_errors })
end

-- Handle runtime errors after startup
do
    local in_error = false
    awesome.connect_signal("debug::error", function (err)
        -- Make sure we don't go into an endless error loop
        if in_error then return end
        in_error = true

        naughty.notify({ preset = naughty.config.presets.critical,
                         title = "Oops, an error happened!",
                         text = err })
        in_error = false
    end)
end
-- }}}

-- {{{ Variable definitions
-- Themes define colours, icons, font and wallpapers.
-- beautiful.init("/usr/share/awesome/themes/default/theme.lua")
-- beautiful.init("/usr/share/awesome/themes/sky/theme.lua")
-- beautiful.init("/usr/share/awesome/themes/zenburn/theme.lua")
-- beautiful.init("~/.config/awesome/themes/anon/theme.lua")
-- beautiful.init("~/.config/awesome/themes/arch/theme.lua")
-- beautiful.init("~/.config/awesome/themes/bamboo/theme.lua")
-- beautiful.init("~/.config/awesome/themes/bio/theme.lua")
-- beautiful.init("~/.config/awesome/themes/blackburn/theme.lua")
-- beautiful.init("~/.config/awesome/themes/blue/theme.lua")
-- beautiful.init("~/.config/awesome/themes/blue-black-red/theme.lua")
-- beautiful.init("~/.config/awesome/themes/blue-black-red-2/theme.lua")
-- beautiful.init("~/.config/awesome/themes/brown/theme.lua")
-- beautiful.init("~/.config/awesome/themes/byte/theme.lua")
-- beautiful.init("~/.config/awesome/themes/citrus/theme.lua")
-- beautiful.init("~/.config/awesome/themes/cool-blue/theme.lua")
-- beautiful.init("~/.config/awesome/themes/copland/theme.lua")
-- beautiful.init("~/.config/awesome/themes/crown/theme.lua")
-- beautiful.init("~/.config/awesome/themes/dk-grey/theme.lua")
-- beautiful.init("~/.config/awesome/themes/dremora/theme.lua")
-- beautiful.init("~/.config/awesome/themes/dunzor/theme.lua")
-- beautiful.init("~/.config/awesome/themes/dunzor2/theme.lua")
-- beautiful.init("~/.config/awesome/themes/dust/theme.lua")
-- beautiful.init("~/.config/awesome/themes/dwm/theme.lua")
-- beautiful.init("~/.config/awesome/themes/elric/theme.lua")
-- beautiful.init("~/.config/awesome/themes/fence/theme.lua")
-- beautiful.init("~/.config/awesome/themes/fluizing/theme.lua")
-- beautiful.init("~/.config/awesome/themes/foo/theme.lua")
-- beautiful.init("~/.config/awesome/themes/gray/theme.lua")
-- beautiful.init("~/.config/awesome/themes/green-owl/theme.lua")
-- beautiful.init("~/.config/awesome/themes/grey/theme.lua")
-- beautiful.init("~/.config/awesome/themes/grey-new/theme.lua")
-- beautiful.init("~/.config/awesome/themes/grey-old/theme.lua")
-- beautiful.init("~/.config/awesome/themes/him/theme.lua")
-- beautiful.init("~/.config/awesome/themes/holo/theme.lua")
-- beautiful.init("~/.config/awesome/themes/lined/theme.lua")
-- beautiful.init("~/.config/awesome/themes/matrix/theme.lua")
-- beautiful.init("~/.config/awesome/themes/multicolor/theme.lua")
-- beautiful.init("~/.config/awesome/themes/muted-dream-tree/theme.lua")
beautiful.init("~/.config/awesome/themes/niceandclean/theme.lua")
-- beautiful.init("~/.config/awesome/themes/obscur/theme.lua")
-- beautiful.init("~/.config/awesome/themes/powerarrow-darker/theme.lua")
-- beautiful.init("~/.config/awesome/themes/rainbow/theme.lua")
-- beautiful.init("~/.config/awesome/themes/rbow/theme.lua")
-- beautiful.init("~/.config/awesome/themes/redhalo/theme.lua")
-- beautiful.init("~/.config/awesome/themes/roig/theme.lua")
-- beautiful.init("~/.config/awesome/themes/sky-grey/theme.lua")
-- beautiful.init("~/.config/awesome/themes/smoked/theme.lua")
-- beautiful.init("~/.config/awesome/themes/snow/theme.lua")
-- beautiful.init("~/.config/awesome/themes/spectrum/theme.lua")
-- beautiful.init("~/.config/awesome/themes/steamburn/theme.lua")
-- beautiful.init("~/.config/awesome/themes/strict/theme.lua")
-- beautiful.init("~/.config/awesome/themes/sunjack/theme.lua")
-- beautiful.init("~/.config/awesome/themes/tree/theme.lua")
-- beautiful.init("~/.config/awesome/themes/vinyl/theme.lua")
-- beautiful.init("~/.config/awesome/themes/wabbit/theme.lua")
-- beautiful.init("~/.config/awesome/themes/wmii/theme.lua")
-- beautiful.init("~/.config/awesome/themes/wombat/theme.lua")
-- beautiful.init("~/.config/awesome/themes/worm/theme.lua")
-- beautiful.init("~/.config/awesome/themes/zenburn-custom/theme.lua")
-- beautiful.init("~/.config/awesome/themes/zenburn-red/theme.lua")

-- This is used later as the default terminal and editor to run.
terminal = "sakura"
editor = os.getenv("EDITOR") or "nano"
editor_cmd = terminal .. " -e " .. editor

-- Default modkey.
-- Usually, Mod4 is the key with a logo between Control and Alt.
-- If you do not like this or do not have such a key,
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
-- However, you can use another modifier like Mod1, but it may interact with others.
modkey = "Mod4"

-- Table of layouts to cover with awful.layout.inc, order matters.
local 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
}
-- }}}

-- {{{ Wallpaper
if beautiful.wallpaper then
    for s = 1, screen.count() do
        gears.wallpaper.maximized(beautiful.wallpaper, s, true)
    end
end
-- }}}

-- {{{ Tags
-- Define a tag table which hold all screen tags.
tags = {}
for s = 1, screen.count() do
    -- Each screen has its own tag table.
    -- tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1])
    tags[s] = awful.tag({ 1, 2, 3, 4 }, s, layouts[1])
end
-- }}}

-- {{{ Menu
-- Create a laucher widget and a main menu
myawesomemenu = {
   { "manual", terminal .. " -e man awesome" },
   { "edit config", editor_cmd .. " " .. awesome.conffile },
   { "restart", awesome.restart },
   { "quit", awesome.quit }
}

mymainmenu = awful.menu({ items = { { "accessories",    
applicationsmenu.applicationsmenu(), beautiful.awesome_icon     },
                                    { "edit config", editor_cmd .. " " .. awesome.conffile },
                                    {"", nil },
                                    {"Audio Player", "pogo" },
                                    {"BitTorrent Client", "transmission-gtk" },
                                    {"File Manager", "thunar" },
                                    {"LibreOffice", "libreoffice5.0 --writer" },
                                    {"Screenshot", "xfce4-xscreenshooter" },
                                    {"Terminal",  terminal},
                                    {"Text Editor", "leafpad" },
                                    {"Web Browser", "opera" },
                                    {"", nil },
                                    {"restart-awesome",        awesome.restart},
                                    {"quit-awesome",           awesome.quit},
                                    {"", nil },
                                    {"run Command", "gmrun" },
                                    {"", nil },
                                    {"restart", "sudo /sbin/shutdown -r now" },
                                    {"shutdown", "sudo /sbin/shutdown -h now" }
                                  }
                        })
mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
                                     menu = mymainmenu })

-- Menubar configuration
menubar.utils.terminal = terminal -- Set the terminal for applications that require it
-- }}}

-- {{{ Wibox
-- Create a textclock widget
mytextclock = awful.widget.textclock()

-- Create a wibox for each screen and add it
mywibox = {}
mypromptbox = {}
mylayoutbox = {}
mytaglist = {}
mytaglist.buttons = awful.util.table.join(
                    awful.button({ }, 1, awful.tag.viewonly),
                    awful.button({ modkey }, 1, awful.client.movetotag),
                    awful.button({ }, 3, awful.tag.viewtoggle),
                    awful.button({ modkey }, 3, awful.client.toggletag),
                    awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end),
                    awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end)
                    )
mytasklist = {}
mytasklist.buttons = awful.util.table.join(
                     awful.button({ }, 1, function (c)
                                              if c == client.focus then
                                                  c.minimized = true
                                              else
                                                  -- Without this, the following
                                                  -- :isvisible() makes no sense
                                                  c.minimized = false
                                                  if not c:isvisible() then
                                                      awful.tag.viewonly(c:tags()[1])
                                                  end
                                                  -- This will also un-minimize
                                                  -- the client, if needed
                                                  client.focus = c
                                                  c:raise()
                                              end
                                          end),
                     awful.button({ }, 3, function ()
                                              if instance then
                                                  instance:hide()
                                                  instance = nil
                                              else
                                                  instance = awful.menu.clients({
                                                      theme = { width = 250 }
                                                  })
                                              end
                                          end),
                     awful.button({ }, 4, function ()
                                              awful.client.focus.byidx(1)
                                              if client.focus then client.focus:raise() end
                                          end),
                     awful.button({ }, 5, function ()
                                              awful.client.focus.byidx(-1)
                                              if client.focus then client.focus:raise() end
                                          end))

for s = 1, screen.count() do
    -- Create a promptbox for each screen
    mypromptbox[s] = awful.widget.prompt()
    -- Create an imagebox widget which will contains an icon indicating which layout we're using.
    -- We need one layoutbox per screen.
    mylayoutbox[s] = awful.widget.layoutbox(s)
    mylayoutbox[s]:buttons(awful.util.table.join(
                           awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end),
                           awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end),
                           awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end),
                           awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end)))
    -- Create a taglist widget
    mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.filter.all, mytaglist.buttons)

    -- Create a tasklist widget
    mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons)

    -- Create the wibox
    mywibox[s] = awful.wibox({ position = "top", screen = s })

    -- Widgets that are aligned to the left
    local left_layout = wibox.layout.fixed.horizontal()
    left_layout:add(mylauncher)
    left_layout:add(mytaglist[s])
    left_layout:add(mypromptbox[s])

    -- Widgets that are aligned to the right
    local right_layout = wibox.layout.fixed.horizontal()
    if s == 1 then right_layout:add(wibox.widget.systray()) end
    right_layout:add(mytextclock)
    right_layout:add(mylayoutbox[s])

    -- Now bring it all together (with the tasklist in the middle)
    local layout = wibox.layout.align.horizontal()
    layout:set_left(left_layout)
    layout:set_middle(mytasklist[s])
    layout:set_right(right_layout)

    mywibox[s]:set_widget(layout)
end
-- }}}

-- {{{ Mouse bindings
root.buttons(awful.util.table.join(
    awful.button({ }, 3, function () mymainmenu:toggle() end),
    awful.button({ }, 4, awful.tag.viewnext),
    awful.button({ }, 5, awful.tag.viewprev)
))
-- }}}

-- {{{ Key bindings
globalkeys = awful.util.table.join(
--    awful.key({ modkey,           }, "Left",   awful.tag.viewprev       ),
--    awful.key({ modkey,           }, "Right",  awful.tag.viewnext       ),
--    awful.key({ modkey,           }, "Escape", awful.tag.history.restore),
      awful.key({ modkey,           }, "Left",   awful.tag.viewprev       ), 
      awful.key({ modkey,           }, "Right",  awful.tag.viewnext       ),
      awful.key({ modkey,           }, "Escape", awful.tag.history.restore),
      awful.key({ modkey}, "e", revelation),  -- Insert this line

    awful.key({ modkey,           }, "j",
        function ()
            awful.client.focus.byidx( 1)
            if client.focus then client.focus:raise() end
        end),
    awful.key({ modkey,           }, "k",
        function ()
            awful.client.focus.byidx(-1)
            if client.focus then client.focus:raise() end
        end),
    awful.key({ modkey,           }, "w", function () mymainmenu:show() end),

    -- Layout manipulation
    awful.key({ modkey, "Shift"   }, "j", function () awful.client.swap.byidx(  1)    end),
    awful.key({ modkey, "Shift"   }, "k", function () awful.client.swap.byidx( -1)    end),
    awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end),
    awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end),
    awful.key({ modkey,           }, "u", awful.client.urgent.jumpto),
    awful.key({ modkey,           }, "Tab",
        function ()
            awful.client.focus.history.previous()
            if client.focus then
                client.focus:raise()
            end
        end),

    -- Standard program
    awful.key({ modkey,           }, "Return", function () awful.util.spawn(terminal) end),
    awful.key({ modkey, "Control" }, "r", awesome.restart),
    awful.key({ modkey, "Shift"   }, "q", awesome.quit),

    awful.key({ modkey,           }, "l",     function () awful.tag.incmwfact( 0.05)    end),
    awful.key({ modkey,           }, "h",     function () awful.tag.incmwfact(-0.05)    end),
    awful.key({ modkey, "Shift"   }, "h",     function () awful.tag.incnmaster( 1)      end),
    awful.key({ modkey, "Shift"   }, "l",     function () awful.tag.incnmaster(-1)      end),
    awful.key({ modkey, "Control" }, "h",     function () awful.tag.incncol( 1)         end),
    awful.key({ modkey, "Control" }, "l",     function () awful.tag.incncol(-1)         end),
    awful.key({ modkey,           }, "space", function () awful.layout.inc(layouts,  1) end),
    awful.key({ modkey, "Shift"   }, "space", function () awful.layout.inc(layouts, -1) end),

    awful.key({ modkey, "Control" }, "n", awful.client.restore),

    -- Prompt
    awful.key({ modkey },            "r",     function () mypromptbox[mouse.screen]:run() end),

    awful.key({ modkey }, "x",
              function ()
                  awful.prompt.run({ prompt = "Run Lua code: " },
                  mypromptbox[mouse.screen].widget,
                  awful.util.eval, nil,
                  awful.util.getdir("cache") .. "/history_eval")
              end),
    -- Menubar
    awful.key({ modkey }, "p", function() menubar.show() end)
)

clientkeys = awful.util.table.join(
    awful.key({ modkey,           }, "f",      function (c) c.fullscreen = not c.fullscreen  end),
    awful.key({ modkey, "Shift"   }, "c",      function (c) c:kill()                         end),
    awful.key({ modkey, "Control" }, "space",  awful.client.floating.toggle                     ),
    awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
    awful.key({ modkey,           }, "o",      awful.client.movetoscreen                        ),
    awful.key({ modkey,           }, "t",      function (c) c.ontop = not c.ontop            end),
    awful.key({ modkey,           }, "n",
        function (c)
            -- The client currently has the input focus, so it cannot be
            -- minimized, since minimized clients can't have the focus.
            c.minimized = true
        end),
    awful.key({ modkey,           }, "m",
        function (c)
            c.maximized_horizontal = not c.maximized_horizontal
            c.maximized_vertical   = not c.maximized_vertical
        end)
)

-- Bind all key numbers to tags.
-- Be careful: we use keycodes to make it works on any keyboard layout.
-- This should map on the top row of your keyboard, usually 1 to 9.
for i = 1, 9 do
    globalkeys = awful.util.table.join(globalkeys,
        -- View tag only.
        awful.key({ modkey }, "#" .. i + 9,
                  function ()
                        local screen = mouse.screen
                        local tag = awful.tag.gettags(screen)[i]
                        if tag then
                           awful.tag.viewonly(tag)
                        end
                  end),
        -- Toggle tag.
        awful.key({ modkey, "Control" }, "#" .. i + 9,
                  function ()
                      local screen = mouse.screen
                      local tag = awful.tag.gettags(screen)[i]
                      if tag then
                         awful.tag.viewtoggle(tag)
                      end
                  end),
        -- Move client to tag.
        awful.key({ modkey, "Shift" }, "#" .. i + 9,
                  function ()
                      if client.focus then
                          local tag = awful.tag.gettags(client.focus.screen)[i]
                          if tag then
                              awful.client.movetotag(tag)
                          end
                     end
                  end),
        -- Toggle tag.
        awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
                  function ()
                      if client.focus then
                          local tag = awful.tag.gettags(client.focus.screen)[i]
                          if tag then
                              awful.client.toggletag(tag)
                          end
                      end
                  end))
end

clientbuttons = awful.util.table.join(
    awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
    awful.button({ modkey }, 1, awful.mouse.client.move),
    awful.button({ modkey }, 3, awful.mouse.client.resize))

-- Set keys
root.keys(globalkeys)
-- }}}

-- {{{ Rules
-- Rules to apply to new clients (through the "manage" signal).
awful.rules.rules = {
    -- All clients will match this rule.
    { rule = { },
      properties = { border_width = beautiful.border_width,
                     border_color = beautiful.border_normal,
                     focus = awful.client.focus.filter,
                     raise = true,
                     keys = clientkeys,
                     buttons = clientbuttons } },
    { rule = { class = "MPlayer" },
      properties = { floating = true } },
    { rule = { class = "pinentry" },
      properties = { floating = true } },
    { rule = { class = "gimp" },
      properties = { floating = true } },
    -- Set Firefox to always map on tags number 2 of screen 1.
    -- { rule = { class = "Firefox" },
    --   properties = { tag = tags[1][2] } },
}
-- }}}

-- {{{ Signals
-- Signal function to execute when a new client appears.
client.connect_signal("manage", function (c, startup)
    -- Enable sloppy focus
    c:connect_signal("mouse::enter", function(c)
        if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
            and awful.client.focus.filter(c) then
            client.focus = c
        end
    end)

    if not startup then
        -- Set the windows at the slave,
        -- i.e. put it at the end of others instead of setting it master.
        -- awful.client.setslave(c)

        -- Put windows in a smart way, only if they does not set an initial position.
        if not c.size_hints.user_position and not c.size_hints.program_position then
            awful.placement.no_overlap(c)
            awful.placement.no_offscreen(c)
        end
    end

    local titlebars_enabled = true
    if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then
        -- buttons for the titlebar
        local buttons = awful.util.table.join(
                awful.button({ }, 1, function()
                    client.focus = c
                    c:raise()
                    awful.mouse.client.move(c)
                end),
                awful.button({ }, 3, function()
                    client.focus = c
                    c:raise()
                    awful.mouse.client.resize(c)
                end)
                )

        -- Widgets that are aligned to the left
        local left_layout = wibox.layout.fixed.horizontal()
        left_layout:add(awful.titlebar.widget.iconwidget(c))
        left_layout:buttons(buttons)

        -- Widgets that are aligned to the right
        local right_layout = wibox.layout.fixed.horizontal()
        right_layout:add(awful.titlebar.widget.floatingbutton(c))
        right_layout:add(awful.titlebar.widget.maximizedbutton(c))
        right_layout:add(awful.titlebar.widget.stickybutton(c))
        right_layout:add(awful.titlebar.widget.ontopbutton(c))
        right_layout:add(awful.titlebar.widget.closebutton(c))

        -- The title goes in the middle
        local middle_layout = wibox.layout.flex.horizontal()
        local title = awful.titlebar.widget.titlewidget(c)
        title:set_align("center")
        middle_layout:add(title)
        middle_layout:buttons(buttons)

        -- Now bring it all together
        local layout = wibox.layout.align.horizontal()
        layout:set_left(left_layout)
        layout:set_right(right_layout)
        layout:set_middle(middle_layout)

        awful.titlebar(c):set_widget(layout)
    end
end)

-- autostart Programs:
awful.util.spawn_with_shell("numlockx &")
awful.util.spawn_with_shell("compton &")
awful.util.spawn_with_shell("tint2 &")
awful.util.spawn_with_shell("volti &")
awful.util.spawn_with_shell("wicd-gtk --tray &")
awful.util.spawn_with_shell("conky -c .conkyrc &")
-- }}}

* Para utilizar este rc.lua, além dos temas, os senhores terão que instalar o pacote awesome-extra e o awemenugen!

Apenas o Slackware oferece(rá) todos os pacotes necessários, visto que já empacotei e foram aprovados os 2 pacotes acima.

Então, para os sistemas que não disporem do pacote awesome-extra, tem-se a seguinte possibilidade:

$ wget http://http.debian.net/debian/pool/main/a/awesome-extra/awesome-extra_2012061101.tar.gz
$ tar xvf awesome-extra_2012061101.tar.gz
$ cd awesome-extra
$ mkdir -p $PKG/usr/share/awesome/lib
$ cp -a flaw obvious revelation shifty vicious bashets/bashets.lua wicked/wicked.lua /usr/share/awesome/lib/

Pronto! agora ficou fácil.

Gerador de menus.

E para finalizar, restará apenas instalar o gerador de menus para o Awesome, o awemenugen, que para os Slackers deverá estar disponível no próximo fim de semana (e para rodá-lo é necessário ter instalado o JAVA).

$ wget http://sourceforge.net/projects/awemenugen/files/awemenugen-20120205.tar.gz
$ tar xf awemenugen-20120205.tar.gz
$ cd awemenugen
$ sudo ./install.sh
$ awemenugen

Observações.

QUalquer alteração no arquivo ~/.config/awesome/rc.lua, deverá ser seguida da checagem deste arquivo:

$ awesome -k ~/.config/awesome/rc.lua

Cujo resultado deverá ser este:

~ » awesome -k ~/.config/awesome/rc.lua
✔ Configuration file syntax OK.
~ » 

Se quiser que o Awesome se comporte como o seu normal, ou seja, sem bordas de janelas, altere para false o valor da linha local titlebars_enabled = true.

E se quiser usá-lo em seu modo padrão, simplesmente substitua o ~/.config/awesome/rc.lua pelo constante no diretório /etc/xdg/awesome:

$ cp -av /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua

Isto é o ideal, para aprender a compreender este arquivo.

Screenshots.

Abaixo seguem algumas screenshots com os temas baixados:

Tema Bamboo...
Tema Bamboo…
Tema "desconhecido", pois não lembro o nome! rsrsrs
Tema “desconhecido”, pois não lembro o nome! rsrsrs
Tema Nice and Clean.
Tema Nice and Clean.

Aqueles que baixarem os temas via git, poderão ver diversas screenshots (embora básicas) de todos os temas, estas screenshots foram removidas no arquivo empacotado que hospedei no DropBox, afim de economizar espaço.

E já que o módulo revelation do pacote awesome-extra está habilitado em minha config, aos interessados, vejam como usá-lo em:

http://awesome.naquadah.org/wiki/Revelation

IntÉ!

Anúncios
How-To :: Awesome WM

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s