Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so dont bother with any of their useless mail servers here and just use oauth login instead. Thank the nice Russians for causing that. :)

Paste

Pasted as Lua by mdm ( 17 years ago )
-- Standard awesome library
require("awful")
-- Theme handling library
require("beautiful")
-- Notification library
require("naughty")
require("tabulous")
-- Widgets library
require("wicked")
 
theme_path = "/home/mdm/.config/awesome/themes/dyned"
 
-- Actually load theme
beautiful.init(theme_path)
 
-- This is used later as the default terminal and editor to run.
terminal = "urxvt"
editor = os.getenv("EDITOR") or "vim"
editor_cmd = terminal .. " -e " .. editor
 
-- Default modkey
modkey = "Mod4"
 
-- Table of layouts to cover with awful.layout.inc, order matters.
layouts =
{
    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.max,
    awful.layout.suit.magnifier,
    awful.layout.suit.floating
}
 
-- Table of clients that should be set floating. The index may be either
-- the application class or instance. The instance is useful when running
-- a console app in a terminal like (Music on Console)
--    xterm -name mocp -e mocp
floatapps =
{
    -- by class
        ["gimp"] = false,
        ["MPlayer"] = true,
 
}
 
-- Applications to be moved to a pre-defined tag by class or instance.
-- Use the screen and tags indices.
apptags =
{
    ["Firefox"] = { screen = 1, tag = 1 },
    ["Iceweasel"] = { screen = 1, tag = 1 },

    ["Pidgin"] = { screen = 1, tag = 2 },
    ["gajim.py"] = { screen = 1, tag = 2 },

    ["gvim"] = { screen = 1, tag = 3 },
    ["Geany"] = { screen = 1, tag = 3 },

    ["urxvt"] = { screen = 1, tag = 4 },

    ["gimp"] = { screen = 1, tag = 5 },
    ["gimp-remote"] = { screen = 1, tag = 5 },
    ["digikam"] = { screen = 1, tag = 5 },

    ["soffice"] = { screen = 1, tag = 6 },
    ["FBReader"] = { screen = 1, tag = 6 },

    ["Skype"] = { screen = 1, tag = 7 },
    ["pcmanfm"] = { screen = 1, tag = 7 }
}
 
-- Define if we want to use titlebar on all applications.
use_titlebar = false
 
tagnames = {"1:web", "2:im", "3:dev", "4:term", "Q:gimp", "W:ofs", "E:nil"}
taglayouts = {
    awful.layout.suit.max, --web
    awful.layout.suit.tile, --im
    awful.layout.suit.max, --dev
    awful.layout.suit.fair.horizontal, --term
    awful.layout.suit.tile,  --gimp
    awful.layout.suit.max,  --office
    awful.layout.suit.tile --nil
}
tagmwfacts = {
        0.5, --web
        0.189, --im
        0.5, --dev
        0.5, --term
        0.5, --gimp
        0.5, --office
        0.5  --nil
}
tags = {} 
for s = 1, screen.count() do
tags[s] = {}
        for tagnumber = 1, 7 do
            tags[s][tagnumber] = tag({ name = tagnames[tagnumber]})  
                tags[s][tagnumber].screen = s
                awful.layout.set(taglayouts[tagnumber], tags[s][tagnumber])
                awful.tag.setmwfact(tagmwfacts[tagnumber], tags[s][tagnumber])
        end
    tags[s][1].selected = true
end
 
        
-- {{{ Wibox
-- Create a laucher widget and a main menu
awmenu = {
    { "manual", terminal .. " -e man awesome" },
    { "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" },
    { "restart", awesome.restart },
    { "quit", awesome.quit }
}
 
sysmenu = { 
    { "Halt", "sudo halt" },
    { "Reboot", "sudo reboot" }
}
 
officemenu = { 
    { "OOo Office", "ooffice" },
    { "OOo Base", "oobase" },
    { "OOo Writer", "oowriter" },
    { "OOo Calc", "oocalc" },
    { "OOo Draw", "oodraw" },
    { "OOo Impress", "ooimpress" },
    { "OOo Math", "oomath" },
    { "OOo Printer Administration", "ooffice-printeradmin" }
}

mymainmenu = awful.menu.new({ items = {
    { "Firefox", "firefox" },

    { "Gajim", "gajim" },
    { "Pidgin", "pidgin" },

    { "GVIM", "gvim" },
    { "Geany", "geany" },

    { "URxvt", "urxvt" },
    { "Xterm", "xterm" },
    { "ALSA mixer", terminal .. " -e alsamixer" },

    { "DigiKam", "digikam" },
    { "The GIMP", "gimp" },

    { "FBReader", "FBReader" },
    { "Office", officemenu },

    { "PCmanFM", "pcmanfm" },
    { "Skype", "skype" },

    { "GQView", "gqview" },
    { "Xcalc", "xcalc" },
    { "OpenTTD", "openttd" },
    { "Awesome", awmenu },
    { "System", sysmenu }
} })
 
 
 
-- Create a systray
mysystray = widget({ type = "systray", align = "right" })
 
-- Create a wibox for each screen and add it
bar = {}
mywibox = {}
mypromptbox = {}
mylayoutbox = {}
mytaglist = {}
mytaglist.buttons = { button({ }, 1, awful.tag.viewonly),
                      button({ modkey }, 1, awful.client.movetotag),
                      button({ }, 3, function (tag) tag.selected = not tag.selected end),
                      button({ modkey }, 3, awful.client.toggletag),
                      button({ }, 4, awful.tag.viewnext),
                      button({ }, 5, awful.tag.viewprev) }
mytasklist = {}
mytasklist.buttons = { button({ }, 1, function (c)
                                          if not c:isvisible() then
                                              awful.tag.viewonly(c:tags()[1])
                                          end
                                          client.focus = c
                                          c:raise()
                                      end),
                       button({ }, 3, function () if instance then instance:hide() end instance = awful.menu.clients({ width=250 }) end),
                       button({ }, 4, function () awful.client.focus.byidx(1) end),
                       button({ }, 5, function () awful.client.focus.byidx(-1) end) }
 
for s = 1, screen.count() do
    -- Create a promptbox for each screen
    mypromptbox[s] = widget({ type = "textbox", align = "left", fg = "beautiful.fg_focus" })
    -- Create an imagebox widget which will contains an icon indicating which layout we're using.
    -- We need one layoutbox per screen.
    mylayoutbox[s] = widget({ type = "imagebox" })
    mylayoutbox[s]:buttons({ button({ }, 1, function () awful.layout.inc(layouts, 1) end),
                             button({ }, 3, function () awful.layout.inc(layouts, -1) end),
                             button({ }, 4, function () awful.layout.inc(layouts, 1) end),
                             button({ }, 5, function () awful.layout.inc(layouts, -1) end) })
    -- Create a taglist widget
    mytaglist[s] = awful.widget.taglist.new(s, awful.widget.taglist.label.all, mytaglist.buttons)
        
        -- Create a tasklist widget
    mytasklist[s] = awful.widget.tasklist.new(function(c)
                                                  return awful.widget.tasklist.label.currenttags(c, s)
                                              end, mytasklist.buttons)
        
        --RAM usage widget
        memwidget = widget({
                type = 'textbox',
                name = 'memwidget',
                align = "right"
        })
 
        wicked.register(memwidget, wicked.widgets.mem, 'M:<span color="#cccccc">$1%</span>')
 
        --CPU usage widget
        cpuwidget = widget({
                type = 'textbox',
                name = 'cpuwidget',
                align = "right"
        })
 
        wicked.register(cpuwidget, wicked.widgets.cpu, 'C:<span color="#cccccc">$1%</span>')
 
        -- Date widget
        datewidget = widget({ type = 'textbox', name = 'datewidget', align = 'right'})
        wicked.register(datewidget, wicked.widgets.date,'<span color="#909090">%d.%m <span color="#cccccc">%H:%M</span> %a</span>')
        
        -- Battery widget
        batwidget = widget({ type = 'textbox', name = 'batwidget', align = 'right'})
 
--        function run_script()
--              local pc = io.popen('bat_prec')
--                local p = pc:read()
--                pc:close()
--                local sc = io.popen('bat_state')
--               local s = sc:read()
--              sc:close()
--                return {p,s}
--        end
        function run_script()
                local pc = io.popen('batt')
                local p = pc:read()
                pc:close()
                return {p}
        end
 
        wicked.register(batwidget, run_script, "$1\%</span>", 60)
 
        -- Spacer widget
        spacer = widget({ type = "textbox", name = "spacer"})
        spacer.text = (" ")
        rspacer = widget({ type = "textbox", name = "rspacer",align = "right" })
        rspacer.text = (" ")
 
 
    -- Create the wibox
 
    mywibox[s] = wibox({ position = "bottom", height = 12, fg = beautiful.fg_normal, bg = beautiful.bg_normal })   
        
    -- Add widgets to the wibox - order matters
        mywibox[s].widgets = { mytaglist[s],
                                                mylayoutbox[s],
                                                mypromptbox[s],
                                                spacer,
                                                mytasklist[s],
                                                cpuwidget,
                                                rspacer,
                                                memwidget,
                                                rspacer,
                                                batwidget,
                                                rspacer,
                                                datewidget,
                                                rspacer,
                                                mysystray
                                        }
    mywibox[s].screen = s
end
-- }}}
 
-- {{{ Mouse bindings
root.buttons({
    button({ }, 3, function () mymainmenu:toggle() end),
    button({ }, 4, awful.tag.viewnext),
    button({ }, 5, awful.tag.viewprev)
})
-- }}}
 
-- {{{ Key bindings
globalkeys =
{
    key({ modkey,           }, "Left",   awful.tag.viewprev       ),
    key({ modkey,           }, "Right",  awful.tag.viewnext       ),
    key({ modkey,           }, "Escape", awful.tag.history.restore),
 
    key({ modkey,           }, "j",
        function ()
            awful.client.focus.byidx( 1)
            if client.focus then client.focus:raise() end
        end),
    key({ modkey,           }, "k",
        function ()
            awful.client.focus.byidx(-1)
            if client.focus then client.focus:raise() end
        end),
 
    -- Layout manipulation
    key({ modkey, "Shift"   }, "j", function () awful.client.swap.byidx(  1) end),
    key({ modkey, "Shift"   }, "k", function () awful.client.swap.byidx( -1) end),
    key({ modkey, "Control" }, "j", function () awful.screen.focus( 1)       end),
    key({ modkey, "Control" }, "k", function () awful.screen.focus(-1)       end),
    key({ modkey,           }, "u", awful.client.urgent.jumpto),
    key({ modkey,           }, "Tab",
        function ()
            awful.client.focus.history.previous()
            if client.focus then
                client.focus:raise()
            end
        end),
 
    -- Standard program
    key({ "Mod1", "Control" }, "r", awesome.restart),
    key({ "Mod1", "Control" }, "q", awesome.quit),
 
    key({ modkey,           }, "l",     function () awful.tag.incmwfact( 0.05)    end),
    key({ modkey,           }, "h",     function () awful.tag.incmwfact(-0.05)    end),
    key({ modkey, "Shift"   }, "h",     function () awful.tag.incnmaster( 1)      end),
    key({ modkey, "Shift"   }, "l",     function () awful.tag.incnmaster(-1)      end),
    key({ modkey, "Control" }, "h",     function () awful.tag.incncol( 1)         end),
    key({ modkey, "Control" }, "l",     function () awful.tag.incncol(-1)         end),
    key({ modkey,           }, "space", function () awful.layout.inc(layouts,  1) end),
    key({ modkey, "Shift"   }, "space", function () awful.layout.inc(layouts, -1) end),
 
    -- Prompt
    key({ modkey }, "F1",
        function ()
            awful.prompt.run({ prompt = "  Run: " },
            mypromptbox[mouse.screen],
            awful.util.spawn, awful.completion.bash,
            awful.util.getdir("cache") .. "/history")
        end),
 
    key({ modkey }, "F4",
        function ()
            awful.prompt.run({ prompt = "  Run Lua code: " },
            mypromptbox[mouse.screen],
            awful.util.eval, awful.prompt.bash,
            awful.util.getdir("cache") .. "/history_eval")
        end),
}
 
-- Client awful tagging: this is useful to tag some clients and then do stuff like move to tag on them
clientkeys =
{
    key({ modkey, "Shift"   }, "c",      function (c) c:kill()                         end),
    key({ modkey, "Control" }, "space",  awful.client.floating.toggle                     ),
    key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
    key({ modkey,           }, "o",      awful.client.movetoscreen                        ),
    key({ modkey, "Shift"   }, "r",      function (c) c:redraw()                       end),
    key({ modkey }, "t", awful.client.togglemarked),
    key({ modkey,}, "m",
        function (c)
            c.maximized_horizontal = not c.maximized_horizontal
            c.maximized_vertical   = not c.maximized_vertical
        end),
}
 
-- Compute the maximum number of digit we need, limited to 9
keynumber = 0
for s = 1, screen.count() do
   keynumber = math.min(9, math.max(#tags[s], keynumber));
end
 
tagkeys = {"1","2","3","4","q","w","e","r"}
 
for i = 1, keynumber do
    table.insert(globalkeys,
        key({ modkey }, tagkeys[i],
            function ()
                local screen = mouse.screen
                if tags[screen][i] then
                    awful.tag.viewonly(tags[screen][i])
                end
            end))
    table.insert(globalkeys,
        key({ modkey, "Control" }, tagkeys[i],
            function ()
                local screen = mouse.screen
                if tags[screen][i] then
                    tags[screen][i].selected = not tags[screen][i].selected
                end
            end))
    table.insert(globalkeys,
        key({ modkey, "Shift" }, tagkeys[i],
            function ()
                if client.focus and tags[client.focus.screen][i] then
                    awful.client.movetotag(tags[client.focus.screen][i])
                end
            end))
    table.insert(globalkeys,
        key({ modkey, "Control", "Shift" }, tagkeys[i],
            function ()
                if client.focus and tags[client.focus.screen][i] then
                    awful.client.toggletag(tags[client.focus.screen][i])
                end
            end))
end
 
 
for i = 1, keynumber do
    table.insert(globalkeys, key({ modkey, "Shift" }, "F" .. tagkeys[i],
                 function ()
                     local screen = mouse.screen
                     if tags[screen][i] then
                         for k, c in pairs(awful.client.getmarked()) do
                             awful.client.movetotag(tags[screen][i], c)
                         end
                     end
                 end))
end
 
-- Set keys
root.keys(globalkeys)
-- }}}
 
-- {{{ Hooks
-- Hook function to execute when focusing a client.
awful.hooks.focus.register(function (c)
    if not awful.client.ismarked(c) then
        c.border_color = beautiful.border_focus
    end
end)
 
-- Hook function to execute when unfocusing a client.
awful.hooks.unfocus.register(function (c)
    if not awful.client.ismarked(c) then
        c.border_color = beautiful.border_normal
    end
end)
 
-- Hook function to execute when marking a client
awful.hooks.marked.register(function (c)
    c.border_color = beautiful.border_marked
end)
 
-- Hook function to execute when unmarking a client.
awful.hooks.unmarked.register(function (c)
    c.border_color = beautiful.border_focus
end)
 
-- Hook function to execute when the mouse enters a client.
awful.hooks.mouse_enter.register(function (c)
    -- Sloppy focus, but disabled for magnifier layout
    if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
        and awful.client.focus.filter(c) then
        client.focus = c
    end
end)
 
-- Hook function to execute when a new client appears.
awful.hooks.manage.register(function (c, startup)
    -- If we are not managing this application at startup,
    -- move it to the screen where the mouse is.
    -- We only do it for filtered windows (i.e. no dock, etc).
    if not startup and awful.client.focus.filter(c) then
        c.screen = mouse.screen
    end
 
    if use_titlebar then
        -- Add a titlebar
        awful.titlebar.add(c, { modkey = modkey })
    end
    -- Add mouse bindings
    c:buttons({
        button({ }, 1, function (c) client.focus = c; c:raise() end),
        button({ modkey }, 1, awful.mouse.client.move),
        button({ modkey }, 3, awful.mouse.client.resize)
    })
    -- New client may not receive focus
    -- if they're not focusable, so set border anyway.
    c.border_width = beautiful.border_width
    c.border_color = beautiful.border_normal
 
    -- Check if the application should be floating.
    local cls = c.class
    local inst = c.instance
    if floatapps[cls] then
        awful.client.floating.set(c, floatapps[cls])
    elseif floatapps[inst] then
        awful.client.floating.set(c, floatapps[inst])
    end
 
    -- Check application->screen/tag mappings.
    local target
    if apptags[cls] then
        target = apptags[cls]
    elseif apptags[inst] then
        target = apptags[inst]
    end
    if target then
        c.screen = target.screen
        awful.client.movetotag(tags[target.screen][target.tag], c)
    end
 
    -- Do this after tag mapping, so you don't see it on the wrong tag for a split second.
    client.focus = c
 
    -- Set key bindings
    c:keys(clientkeys)
 
    -- Set the windows at the slave,
    -- i.e. put it at the end of others instead of setting it master.
    awful.client.setslave(c)
 
    -- Honor size hints: if you want to drop the gaps between windows, set this to false.
    c.size_hints_honor = false
end)
 
-- Hook function to execute when arranging the screen.
 -- c.honorsizehints = false
-- (tag switch, new client, etc)
awful.hooks.arrange.register(function (screen)
    local layout = awful.layout.getname(awful.layout.get(screen))
    if layout and beautiful["layout_" ..layout] then
        mylayoutbox[screen].image = image(beautiful["layout_" .. layout])
    else
        mylayoutbox[screen].image = nil
    end
 
    -- Give focus to the latest client in history if no window has focus
    -- or if the current window is a desktop or a dock one.
    if not client.focus then
        local c = awful.client.focus.history.get(screen, 0)
        if c then client.focus = c end
    end
end)

 

Revise this Paste

Your Name: Code Language: