diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua index 2f639535..cd7c70a8 100644 --- a/.config/awesome/rc.lua +++ b/.config/awesome/rc.lua @@ -23,24 +23,24 @@ vicious = require("vicious") -- 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 }) + 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.add_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 + local in_error = false + awesome.add_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) + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, an error happened!", + text = err }) + in_error = false + end) end -- }}} @@ -64,527 +64,518 @@ 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.spiral, - -- awful.layout.suit.spiral.dwindle, - awful.layout.suit.max, - awful.layout.suit.max.fullscreen, - -- awful.layout.suit.magnifier, - 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.floating + } + -- }}} --- {{{ 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 ", " 5. Factory ", " 6. Music ", "7. Mail " }, s, layouts[1]) - tags[s] = awful.tag({ " 1 ", " 2 "," 3 "," 4 ", " 5 ⚒ ", " 6 ♫ ", "7 ✉ " }, s, layouts[1]) -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 ", " 5. Factory ", " 6. Music ", "7. Mail " }, s, layouts[1]) + tags[s] = awful.tag({ " 1 ", " 2 "," 3 "," 4 ", " 5 ⚒ ", " 6 ♫ ", "7 ✉ " }, s, layouts[1]) + end + -- }}} --------------------------------------------------------------------------------- + -------------------------------------------------------------------------------- --- {{{ Wibox + -- {{{ Wibox --- Clock -clockwidget = awful.widget.textclock({ align = "right" }) + -- Separator + separator = " | " + separator_date = widget({ type = "textbox" }) + separator_date.text = " |" --- Systray -systraywidget = widget({ type = "systray" }) + -- Systray + systraywidget = widget({ type = "systray" }) --- CPU -cpuwidget = widget({ type = "textbox" }) -vicious.register(cpuwidget, vicious.widgets.cpu, 'CPU $1%') + -- Clock + clockwidget = awful.widget.textclock({ align = "right" }) --- Net -netwidget = widget({ type = "textbox" }) -networks = { "eth0", "wlan0" } -vicious.register(netwidget, vicious.widgets.net, - function (widget, args) - for _,device in pairs(networks) do - value = tonumber(args["{".. device .." carrier}"]) - if value ~= nil and value > 0 then - return '↓' .. args["{" .. device .. " down_kb}"] .. ' ↑' .. args["{" .. device .. " up_kb}"] .. '' - end - end - end, 3) + -- CPU + cpuwidget = widget({ type = "textbox" }) + vicious.register(cpuwidget, vicious.widgets.cpu, separator .. 'CPU $1%') --- Battery -batwidget = widget({ type = "textbox" }) -local batf = io.popen("ls '/sys/class/power_supply' 2>/dev/null") -local batl = batf:read("*a") -local batlimit = 10 -if batl ~= "" then - --{{ Simple version (perf friendly) - -- vicious.register(batwidget, vicious.widgets.bat, '$2%$1$3 | ', 60, "BAT0") - --{{ Complex version (time warning) - -- This functions changes the status color when batlimit is reached. - vicious.register(batwidget, vicious.widgets.bat, + -- Net + netwidget = widget({ type = "textbox" }) + networks = { "eth0", "wlan0" } + vicious.register(netwidget, vicious.widgets.net, function (widget, args) - -- We check if time is displayed (otherwise it's 'N/A'), and if minutes are less than limit. - if args[1] == "-" - and string.len(args[3]) == 5 - and tonumber(string.sub(args[3],1,2)) == 0 - and tonumber(string.sub(args[3],4,5)) <= batlimit - then - return '' .. args[2] .. '%' .. args[1] .. args[3] .. '' - else - return '' .. args[2] .. '%' .. args[1] .. args[3] .. '' + for _,device in pairs(networks) do + value = tonumber(args["{".. device .." carrier}"]) + if value ~= nil and value > 0 then + return separator .. '↓' .. args["{" .. device .. " down_kb}"] .. ' ↑' .. args["{" .. device .. " up_kb}"] .. '' + end end - end, - 60, "BAT0") -end -batf:close() + end, 3) --- Volume -volmwidget = widget({ type = "textbox" }) -vicious.register(volmwidget, vicious.widgets.volume, "Master $1% $2 ", 1, "Master") --- PCM may not be available all the time on every machine. --- If PCM is toggled after awesome has been started, you'll need to reload the --- configuration. --- If 'amixer' is not installed, status will never display. -local volpf = io.popen("amixer | grep PCM 2>/dev/null") -local volpl = volpf:read("*a") -if volpl ~= "" then - volpwidget = widget({ type = "textbox" }) - vicious.register(volpwidget, vicious.widgets.volume, "PCM $1%", 1, "PCM") -end -volpf:close() + -- Volume + volmwidget = widget({ type = "textbox" }) + vicious.register(volmwidget, vicious.widgets.volume, separator .. "Master $1% $2 ", 1, "Master") + -- PCM may not be available all the time on every machine. If PCM is toggled + -- after awesome has been started, you'll need to reload the configuration. + -- If 'amixer' is not installed, status will never display. + local volpf = io.popen("amixer | grep PCM 2>/dev/null") + local volpl = volpf:read("*a") + if volpl ~= "" then + volpwidget = widget({ type = "textbox" }) + vicious.register(volpwidget, vicious.widgets.volume, "PCM $1%", 1, "PCM") + end + volpf:close() --- Separator -separator = widget({ type = "textbox" }) -separator.text = " | " -separatordate = widget({ type = "textbox" }) -separatordate.text = " |" -separatorapps = widget({ type = "textbox" }) -separatorapps.text = " " + -- Battery + batwidget = widget({ type = "textbox" }) + local batf = io.popen("ls '/sys/class/power_supply' 2>/dev/null") + local batl = batf:read("*a") + local batlimit = 10 + if batl ~= "" then + --{{ Simple version (perf friendly) + -- vicious.register(batwidget, vicious.widgets.bat, '$2%$1$3 | ', 60, "BAT0") + --{{ Complex version (time warning) + -- This functions changes the status color when batlimit is reached. + vicious.register(batwidget, vicious.widgets.bat, + function (widget, args) + -- We check if time is displayed (otherwise it's 'N/A'), and if minutes are less than limit. + if args[1] == "-" + and string.len(args[3]) == 5 + and tonumber(string.sub(args[3],1,2)) == 0 + and tonumber(string.sub(args[3],4,5)) <= batlimit + then + return separator .. '' .. args[2] .. '%' .. args[1] .. args[3] .. '' + else + return separator .. '' .. args[2] .. '%' .. args[1] .. args[3] .. '' + end + end, + 60, "BAT0") + end + batf:close() --- 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, awful.tag.viewnext), - awful.button({ }, 5, awful.tag.viewprev) - ) -mytasklist = {} -mytasklist.buttons = awful.util.table.join( - awful.button({ }, 1, function (c) - if c == client.focus then - c.minimized = true - else - 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({ 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)) + -- 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, awful.tag.viewnext), + awful.button({ }, 5, awful.tag.viewprev) + ) + mytasklist = {} + mytasklist.buttons = awful.util.table.join( + awful.button({ }, 1, function (c) + if c == client.focus then + c.minimized = true + else + 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({ 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({ layout = awful.widget.layout.horizontal.leftright }) - -- 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.label.all, mytaglist.buttons) + for s = 1, screen.count() do + -- Create a promptbox for each screen + mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright }) + -- 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.label.all, mytaglist.buttons) - -- Create a tasklist widget - mytasklist[s] = awful.widget.tasklist(function(c) - return awful.widget.tasklist.label.currenttags(c, s) - end, mytasklist.buttons) + -- Create a tasklist widget + mytasklist[s] = awful.widget.tasklist(function(c) + return awful.widget.tasklist.label.currenttags(c, s) + end, mytasklist.buttons) - -- Create the wibox - mywibox[s] = awful.wibox({ position = "top", screen = s }) - -- Add widgets to the wibox - order matters - mywibox[s].widgets = { - { - mylayoutbox[s], - -- mylauncher, + -- Create the wibox + mywibox[s] = awful.wibox({ position = "top", screen = s }) + -- Add widgets to the wibox - order matters + mywibox[s].widgets = { + { + mylayoutbox[s], mytaglist[s], mypromptbox[s], layout = awful.widget.layout.horizontal.leftright - }, - s == 1 and systraywidget or nil, - clockwidget, - separatordate, - volpwidget, - volmwidget, - separator, - cpuwidget, - separator, - netwidget, - separator, - batwidget, - separatorapps, - mytasklist[s], - layout = awful.widget.layout.horizontal.rightleft - } -end --- }}} + }, + s == 1 and systraywidget or nil, + clockwidget, + separator_date, + cpuwidget, + netwidget, + volpwidget, + volmwidget, + batwidget, + mytasklist[s], + layout = awful.widget.layout.horizontal.rightleft + } + end + -- }}} --------------------------------------------------------------------------------- --- CUSTOM --------------------------------------------------------------------------------- + -------------------------------------------------------------------------------- + -- CUSTOM + -------------------------------------------------------------------------------- --- Mouse control --- set the desired pixel coordinates: -local safeCoords = {x=0, y=0} --- Flag to tell Awesome whether to do this at startup. -local moveMouseOnStartup = true + -- Mouse control + -- set the desired pixel coordinates: + local safeCoords = {x=0, y=0} + -- Flag to tell Awesome whether to do this at startup. + local moveMouseOnStartup = true --- Simple function to move the mouse to the coordinates set above. -local function moveMouseAway(x_co, y_co) - mouse.coords({ x=x_co, y=y_co }) -end + -- Simple function to move the mouse to the coordinates set above. + local function moveMouseAway(x_co, y_co) + mouse.coords({ x=x_co, y=y_co }) + end -local function moveMouse(x_co, y_co) - t=mouse.coords() - mouse.coords( {x = t.x + x_co, y = t.y + y_co} ) -end + local function moveMouse(x_co, y_co) + t=mouse.coords() + mouse.coords( {x = t.x + x_co, y = t.y + y_co} ) + end --- Optionally move the mouse when rc.lua is read (startup) -if moveMouseOnStartup then - moveMouseAway(safeCoords.x, safeCoords.y) -end + -- Optionally move the mouse when rc.lua is read (startup) + if moveMouseOnStartup then + moveMouseAway(safeCoords.x, safeCoords.y) + end --------------------------------------------------------------------------------- --- Key bindings --- Note that some laptop will not work when pressing Super+Fn. --- Therefore we only use Fn and Mod1+Fn. --------------------------------------------------------------------------------- -term = "urxvt" -termcmd = term .. " -e " + -------------------------------------------------------------------------------- + -- Key bindings + -- Note that some laptop will not work when pressing Super+Fn. + -- Therefore we only use Fn and Mod1+Fn. + -------------------------------------------------------------------------------- + term = "urxvt" + termcmd = term .. " -e " -globalkeys = awful.util.table.join( - -- Terminal - awful.key({ modkey, }, "Return", function () awful.util.spawn(term) end), - awful.key({ }, "XF86Terminal", function () awful.util.spawn(term) end), + globalkeys = awful.util.table.join( + -- Terminal + awful.key({ modkey, }, "Return", function () awful.util.spawn(term) end), + awful.key({ }, "XF86Terminal", function () awful.util.spawn(term) end), - -- Calc - awful.key({ modkey, }, "b", function () awful.util.spawn(termcmd .. "calc") end), - awful.key({ }, "XF86Calculator", function () awful.util.spawn(termcmd .. "calc") end), + -- Calc + awful.key({ modkey, }, "b", function () awful.util.spawn(termcmd .. "calc") end), + awful.key({ }, "XF86Calculator", function () awful.util.spawn(termcmd .. "calc") end), - -- File browser - awful.key({ modkey, }, "e", function () awful.util.spawn(termcmd .. "ranger") end), - awful.key({ }, "XF86Explorer", function () awful.util.spawn(termcmd .. "ranger") end), - awful.key({ }, "XF86MyComputer", function () awful.util.spawn(termcmd .. "ranger") end), + -- File browser + awful.key({ modkey, }, "e", function () awful.util.spawn(termcmd .. "ranger") end), + awful.key({ }, "XF86Explorer", function () awful.util.spawn(termcmd .. "ranger") end), + awful.key({ }, "XF86MyComputer", function () awful.util.spawn(termcmd .. "ranger") end), - -- Screen lock - awful.key({ modkey, }, "s", function () awful.util.spawn("slock") end), - awful.key({ }, "XF86ScreenSaver", function () awful.util.spawn("slock") end), - awful.key({ }, "XF86Sleep", function () awful.util.spawn("slock") end), - awful.key({ }, "XF86Standby", function () awful.util.spawn("slock") end), + -- Screen lock + awful.key({ modkey, }, "s", function () awful.util.spawn("slock") end), + awful.key({ }, "XF86ScreenSaver", function () awful.util.spawn("slock") end), + awful.key({ }, "XF86Sleep", function () awful.util.spawn("slock") end), + awful.key({ }, "XF86Standby", function () awful.util.spawn("slock") end), - -- PDF Reader - awful.key({ modkey, }, "p", function () awful.util.spawn("zathura") end), + -- PDF Reader + awful.key({ modkey, }, "p", function () awful.util.spawn("zathura") end), - -- Mail user agent - awful.key({ modkey, }, "m", function () awful.util.spawn(termcmd .. "mutt") end), - awful.key({ }, "XF86Mail", function () awful.util.spawn(termcmd .. "mutt") end), + -- Mail user agent + awful.key({ modkey, }, "m", function () awful.util.spawn(termcmd .. "mutt") end), + awful.key({ }, "XF86Mail", function () awful.util.spawn(termcmd .. "mutt") end), - -- Web browser - awful.key({ modkey, }, "w", function () awful.util.spawn_with_shell("luakit 2>>/tmp/luakit.log") end), - awful.key({ }, "XF86WWW", function () awful.util.spawn_with_shell("luakit 2>>/tmp/luakit.log") end), + -- Web browser + awful.key({ modkey, }, "w", function () awful.util.spawn_with_shell("luakit 2>>/tmp/luakit.log") end), + awful.key({ }, "XF86WWW", function () awful.util.spawn_with_shell("luakit 2>>/tmp/luakit.log") end), - -- Music player - awful.key({ modkey, }, "a", function () awful.util.spawn(termcmd .. "cmus") end), - awful.key({ modkey, "Mod1" }, "a", function () awful.util.spawn("cmus-remote -u") end), - awful.key({ modkey, "Shift" }, "a", function () awful.util.spawn("cmus-remote -n") end), - awful.key({ modkey, "Control" }, "a", function () awful.util.spawn("cmus-remote -r") end), + -- Music player + awful.key({ modkey, }, "a", function () awful.util.spawn(termcmd .. "cmus") end), + awful.key({ modkey, "Mod1" }, "a", function () awful.util.spawn("cmus-remote -u") end), + awful.key({ modkey, "Shift" }, "a", function () awful.util.spawn("cmus-remote -n") end), + awful.key({ modkey, "Control" }, "a", function () awful.util.spawn("cmus-remote -r") end), - awful.key({ }, "XF86AudioMedia", function () awful.util.spawn(termcmd .. "cmus") end), - awful.key({ }, "XF86AudioPlay", function () awful.util.spawn("cmus-remote -u") end), - awful.key({ }, "XF86AudioNext", function () awful.util.spawn("cmus-remote -n") end), - awful.key({ }, "XF86AudioPrev", function () awful.util.spawn("cmus-remote -r") end), + awful.key({ }, "XF86AudioMedia", function () awful.util.spawn(termcmd .. "cmus") end), + awful.key({ }, "XF86AudioPlay", function () awful.util.spawn("cmus-remote -u") end), + awful.key({ }, "XF86AudioNext", function () awful.util.spawn("cmus-remote -n") end), + awful.key({ }, "XF86AudioPrev", function () awful.util.spawn("cmus-remote -r") end), - -- Screenshot - awful.key({}, "Print", function () awful.util.spawn("scrot 'screen-%Y-%m-%d-%H%M%S.png' -e 'mkdir -p ~/temp && mv $f ~/temp/'") end), + -- Screenshot + awful.key({}, "Print", function () awful.util.spawn("scrot 'screen-%Y-%m-%d-%H%M%S.png' -e 'mkdir -p ~/temp && mv $f ~/temp/'") end), - -- Sound Volume - awful.key({ modkey, }, "KP_Subtract", function () awful.util.spawn("amixer set Master 5%- >/dev/null") end), - awful.key({ modkey, }, "KP_Add", function () awful.util.spawn("amixer set Master 5%+ >/dev/null") end), - awful.key({ modkey, }, "KP_Enter", function () awful.util.spawn("amixer set Master toggle >/dev/null") end), - awful.key({ modkey, "Mod1" }, "KP_Subtract", function () awful.util.spawn("amixer set PCM 5%- >/dev/null") end), - awful.key({ modkey, "Mod1" }, "KP_Add", function () awful.util.spawn("amixer set PCM 5%+ >/dev/null") end), + -- Sound Volume + awful.key({ modkey, }, "KP_Subtract", function () awful.util.spawn("amixer set Master 5%- >/dev/null") end), + awful.key({ modkey, }, "KP_Add", function () awful.util.spawn("amixer set Master 5%+ >/dev/null") end), + awful.key({ modkey, }, "KP_Enter", function () awful.util.spawn("amixer set Master toggle >/dev/null") end), + awful.key({ modkey, "Mod1" }, "KP_Subtract", function () awful.util.spawn("amixer set PCM 5%- >/dev/null") end), + awful.key({ modkey, "Mod1" }, "KP_Add", function () awful.util.spawn("amixer set PCM 5%+ >/dev/null") end), - awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set Master 5%+ >/dev/null") end), - awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set Master 5%- >/dev/null") end), - awful.key({ }, "XF86AudioMute", function () awful.util.spawn("amixer set Master toggle >/dev/null") end), - awful.key({ "Mod1" }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set PCM 5%+ >/dev/null") end), - awful.key({ "Mod1" }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set PCM 5%- >/dev/null") end), + awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set Master 5%+ >/dev/null") end), + awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set Master 5%- >/dev/null") end), + awful.key({ }, "XF86AudioMute", function () awful.util.spawn("amixer set Master toggle >/dev/null") end), + awful.key({ "Mod1" }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set PCM 5%+ >/dev/null") end), + awful.key({ "Mod1" }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set PCM 5%- >/dev/null") end), - -- Touchpad - awful.key({ }, "XF86TouchpadToggle", function () os.execute("synclient TouchpadOff=`synclient -l | grep -c 'TouchpadOff.*=.*0'`") end), - awful.key({ }, "XF86Tools", function () os.execute("synclient TouchpadOff=`synclient -l | grep -c 'TouchpadOff.*=.*0'`") end), + -- Touchpad + awful.key({ }, "XF86TouchpadToggle", function () os.execute("synclient TouchpadOff=`synclient -l | grep -c 'TouchpadOff.*=.*0'`") end), + awful.key({ }, "XF86Tools", function () os.execute("synclient TouchpadOff=`synclient -l | grep -c 'TouchpadOff.*=.*0'`") end), - -- Mouse control - -- Bind ''Meta4+Ctrl+m'' to move the mouse to the coordinates set above. - -- This is useful if you needed the mouse for something and now want it out of the way. - awful.key({ modkey, "Control" }, "m", function() moveMouseAway(safeCoords.x, safeCoords.y) end), - -- awful.key({ modkey, "Control" }, "h", function() moveMouse(-5, 0) end), - -- awful.key({ modkey, "Control" }, "j", function() moveMouse(0, 5) end), - -- awful.key({ modkey, "Control" }, "k", function() moveMouse(0, -5) end), - -- awful.key({ modkey, "Control" }, "l", function() moveMouse(5, 0) end), + -- Mouse control + -- Bind ''Meta4+Ctrl+m'' to move the mouse to the coordinates set above. + -- This is useful if you needed the mouse for something and now want it out of the way. + awful.key({ modkey, "Control" }, "m", function() moveMouseAway(safeCoords.x, safeCoords.y) end), + -- awful.key({ modkey, "Control" }, "h", function() moveMouse(-5, 0) end), + -- awful.key({ modkey, "Control" }, "j", function() moveMouse(0, 5) end), + -- awful.key({ modkey, "Control" }, "k", function() moveMouse(0, -5) end), + -- awful.key({ modkey, "Control" }, "l", function() moveMouse(5, 0) end), - -------------------------------------------------------------------------------- - -- Awesome specific - -------------------------------------------------------------------------------- + -------------------------------------------------------------------------------- + -- Awesome specific + -------------------------------------------------------------------------------- - -- Standard program - awful.key({ modkey, "Control" }, "r", awesome.restart), - awful.key({ modkey, "Shift" }, "q", awesome.quit), + -- Standard program + awful.key({ modkey, "Control" }, "r", awesome.restart), + awful.key({ modkey, "Shift" }, "q", awesome.quit), - -- Tags - awful.key({ modkey }, "Prior", awful.tag.viewprev ), - awful.key({ modkey }, "Next", awful.tag.viewnext ), - awful.key({ modkey }, "Escape", awful.tag.history.restore), + -- Tags + awful.key({ modkey }, "Prior", awful.tag.viewprev ), + awful.key({ modkey }, "Next", awful.tag.viewnext ), + awful.key({ modkey }, "Escape", awful.tag.history.restore), - -- Layout select and switch - awful.key({ modkey }, "Up", function () awful.client.swap.byidx( 1) end), - awful.key({ modkey }, "Down", function () awful.client.swap.byidx( -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), + -- Layout select and switch + awful.key({ modkey }, "Up", function () awful.client.swap.byidx( 1) end), + awful.key({ modkey }, "Down", function () awful.client.swap.byidx( -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), - awful.key({ modkey }, "Right", - function () - awful.client.focus.byidx( 1) - if client.focus then client.focus:raise() end - end), - awful.key({ modkey }, "Left", - function () - awful.client.focus.byidx(-1) - if client.focus then client.focus:raise() end - end), + awful.key({ modkey }, "Right", + function () + awful.client.focus.byidx( 1) + if client.focus then client.focus:raise() end + end), + awful.key({ modkey }, "Left", + function () + awful.client.focus.byidx(-1) + if client.focus then client.focus:raise() end + end), - -- Layout resize - awful.key({ modkey, "Mod1" }, "Left", function () awful.tag.incmwfact(-0.05) end), - awful.key({ modkey, "Mod1" }, "Right", function () awful.tag.incmwfact(0.05) end), - awful.key({ modkey, "Mod1" }, "Up", function () awful.client.incwfact(0.05) end), - awful.key({ modkey, "Mod1" }, "Down", function () awful.client.incwfact(-0.05) end), + -- Layout resize + awful.key({ modkey, "Mod1" }, "Left", function () awful.tag.incmwfact(-0.05) end), + awful.key({ modkey, "Mod1" }, "Right", function () awful.tag.incmwfact(0.05) end), + awful.key({ modkey, "Mod1" }, "Up", function () awful.client.incwfact(0.05) end), + awful.key({ modkey, "Mod1" }, "Down", function () awful.client.incwfact(-0.05) end), - -- Floating clients resize - awful.key({ modkey , "Mod1"}, "j", function () awful.client.moveresize( 20, 20, -40, -40) end), - awful.key({ modkey , "Mod1"}, "k", function () awful.client.moveresize(-20, -20, 40, 40) end), + -- Floating clients resize + awful.key({ modkey , "Mod1"}, "j", function () awful.client.moveresize( 20, 20, -40, -40) end), + awful.key({ modkey , "Mod1"}, "k", function () awful.client.moveresize(-20, -20, 40, 40) end), - -- Layout organization - awful.key({ modkey, "Control" }, "Left", function () awful.tag.incnmaster( 1) end), - awful.key({ modkey, "Control" }, "Right", function () awful.tag.incnmaster(-1) end), - awful.key({ modkey, "Control" }, "Up", function () awful.tag.incncol( 1) end), - awful.key({ modkey, "Control" }, "Down", function () awful.tag.incncol(-1) end), + -- Layout organization + awful.key({ modkey, "Control" }, "Left", function () awful.tag.incnmaster( 1) end), + awful.key({ modkey, "Control" }, "Right", function () awful.tag.incnmaster(-1) end), + awful.key({ modkey, "Control" }, "Up", function () awful.tag.incncol( 1) end), + awful.key({ modkey, "Control" }, "Down", 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, }, "space", function () awful.layout.inc(layouts, 1) end), + awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end), - -- Multi screen - awful.key({ modkey, "Mod1" }, "Next", function () awful.screen.focus_relative( 1) end), - awful.key({ modkey, "Mod1" }, "Prior", function () awful.screen.focus_relative(-1) end), + -- Multi screen + awful.key({ modkey, "Mod1" }, "Next", function () awful.screen.focus_relative( 1) end), + awful.key({ modkey, "Mod1" }, "Prior", function () awful.screen.focus_relative(-1) end), - -- Prompt - awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end), + -- Prompt + awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end), - -- Lua code - 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) -) + -- Lua code + 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) + ) --- Client keys -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, "Shift" }, "r", function (c) c:redraw() end), - awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end), + -- Client keys + 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, "Shift" }, "r", function (c) c:redraw() end), + awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end), - - -- Floating clients move - awful.key({ modkey }, "j", function () awful.client.moveresize( 0, 20, 0, 0) end), - awful.key({ modkey }, "k", function () awful.client.moveresize( 0, -20, 0, 0) end), - awful.key({ modkey }, "h", function () awful.client.moveresize(-20, 0, 0, 0) end), - awful.key({ modkey }, "l", function () awful.client.moveresize( 20, 0, 0, 0) end), + + -- Floating clients move + awful.key({ modkey }, "j", function () awful.client.moveresize( 0, 20, 0, 0) end), + awful.key({ modkey }, "k", function () awful.client.moveresize( 0, -20, 0, 0) end), + awful.key({ modkey }, "h", function () awful.client.moveresize(-20, 0, 0, 0) end), + awful.key({ modkey }, "l", function () awful.client.moveresize( 20, 0, 0, 0) 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, "Control" }, "n", awful.client.restore), + -- 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, "Control" }, "n", awful.client.restore), - awful.key({ modkey, "Mod1" }, "m", - function (c) - c.maximized_horizontal = not c.maximized_horizontal - c.maximized_vertical = not c.maximized_vertical - end) -) + awful.key({ modkey, "Mod1" }, "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 + -- 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 --- 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, keynumber do - globalkeys = awful.util.table.join(globalkeys, - awful.key({ modkey }, "#" .. i + 9, - function () - local screen = mouse.screen - if tags[screen][i] then - awful.tag.viewonly(tags[screen][i]) + -- 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, keynumber do + globalkeys = awful.util.table.join(globalkeys, + awful.key({ modkey }, "#" .. i + 9, + function () + local screen = mouse.screen + if tags[screen][i] then + awful.tag.viewonly(tags[screen][i]) + end + end), + awful.key({ modkey, "Control" }, "#" .. i + 9, + function () + local screen = mouse.screen + if tags[screen][i] then + awful.tag.viewtoggle(tags[screen][i]) + end + end), + awful.key({ modkey, "Mod1" }, "#" .. i + 9, + function () + if client.focus and tags[client.focus.screen][i] then + awful.client.movetotag(tags[client.focus.screen][i]) + end + end) + ) + -- awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, + -- function () + -- if client.focus and tags[client.focus.screen][i] then + -- awful.client.toggletag(tags[client.focus.screen][i]) + -- 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 + awful.rules.rules = { + -- All clients will match this rule. + { rule = { }, + properties = { border_width = beautiful.border_width, + border_color = beautiful.border_normal, + focus = true, + keys = clientkeys, + buttons = clientbuttons } }, + + { rule = { class = "MPlayer" }, + properties = { floating = true } }, + { rule = { class = "mplayer2" }, + properties = { floating = true } }, + + { rule = { class = "pinentry" }, + properties = { floating = true } }, + + { rule = { class = "Gimp" }, + properties = { floating = false } }, + + -- Flash workaround. Does not work? + { rule = { instance = "plugin-container" }, + properties = { floating = true } }, + + { rule = { instance = "exe" }, + properties = { floating = true } }, + + -- Only works for terminal with WM_COMMAND property? + -- Does not work with LXTerminal. + { rule = { name = "cmus"}, + properties = { tag = tags[1][6] } }, + { rule = { name = "mutt"}, + properties = { tag = tags[1][7] } }, + + } + -- }}} + + -- {{{ Signals + -- Signal function to execute when a new client appears. + client.add_signal("manage", function (c, startup) + -- Add a titlebar + -- awful.titlebar.add(c, { modkey = modkey }) + + -- Enable sloppy focus + c:add_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 - end), - awful.key({ modkey, "Control" }, "#" .. i + 9, - function () - local screen = mouse.screen - if tags[screen][i] then - awful.tag.viewtoggle(tags[screen][i]) - end - end), - awful.key({ modkey, "Mod1" }, "#" .. i + 9, - function () - if client.focus and tags[client.focus.screen][i] then - awful.client.movetotag(tags[client.focus.screen][i]) - end - end) - ) - -- awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, - -- function () - -- if client.focus and tags[client.focus.screen][i] then - -- awful.client.toggletag(tags[client.focus.screen][i]) - -- 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 -awful.rules.rules = { - -- All clients will match this rule. - { rule = { }, - properties = { border_width = beautiful.border_width, - border_color = beautiful.border_normal, - focus = true, - keys = clientkeys, - buttons = clientbuttons } }, - - { rule = { class = "MPlayer" }, - properties = { floating = true } }, - { rule = { class = "mplayer2" }, - properties = { floating = true } }, - - { rule = { class = "pinentry" }, - properties = { floating = true } }, - - { rule = { class = "Gimp" }, - properties = { floating = false } }, - - -- Flash workaround. Does not work? - { rule = { instance = "plugin-container" }, - properties = { floating = true } }, - - { rule = { instance = "exe" }, - properties = { floating = true } }, - - -- Only works for terminal with WM_COMMAND property? - -- Does not work with LXTerminal. - { rule = { name = "cmus"}, - properties = { tag = tags[1][6] } }, - { rule = { name = "mutt"}, - properties = { tag = tags[1][7] } }, - -} --- }}} - --- {{{ Signals --- Signal function to execute when a new client appears. -client.add_signal("manage", function (c, startup) - -- Add a titlebar - -- awful.titlebar.add(c, { modkey = modkey }) - - -- Enable sloppy focus - c:add_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 -end) - -client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end) -client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) --- }}} + client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end) + client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) + -- }}} diff --git a/.config/ranger/apps.py b/.config/ranger/apps.py index 6a35917f..692f5a23 100644 --- a/.config/ranger/apps.py +++ b/.config/ranger/apps.py @@ -37,6 +37,11 @@ class CustomApplications(DefaultApps): c.flags += 'd' return self.either(c, 'zathura', 'evince') + # CUSTOM + if f.extension == 'svg': + c.flags += 'd' + return self.either(c, 'inkscape') + # CUSTOM if f.extension == 'm2ts': c.flags += 'd' diff --git a/.shell.d/dircolorsdb b/.shell.d/dircolorsdb new file mode 100644 index 00000000..ec5f9e3a --- /dev/null +++ b/.shell.d/dircolorsdb @@ -0,0 +1,177 @@ +# Attribute codes: +# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed +# Text color codes: +# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white +# Background color codes: +# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white + +# Filesystem +MULTIHARDLINK 01;37 # regular file with more than one link +FIFO 01;33 # pipe + + # archives or compressed (bright red) +.tar 00;31 +.tgz 00;31 +.arj 00;31 +.taz 00;31 +.lzh 00;31 +.lzma 00;31 +.tlz 00;31 +.txz 00;31 +.zip 00;31 +.z 00;31 +.Z 00;31 +.dz 00;31 +.gz 00;31 +.lz 00;31 +.xz 00;31 +.bz2 00;31 +.bz 00;31 +.tbz 00;31 +.tbz2 00;31 +.tz 00;31 +.deb 00;31 +.rpm 00;31 +.jar 00;31 +.war 00;31 +.ear 00;31 +.sar 00;31 +.rar 00;31 +.ace 00;31 +.zoo 00;31 +.cpio 00;31 +.7z 00;31 +.rz 00;31 + +# Disc image +.iso 04;31 + +# image formats +.jpg 04;33 +.jpeg 04;33 +.gif 04;33 +.bmp 04;33 +.pbm 04;33 +.pgm 04;33 +.ppm 04;33 +.tga 04;33 +.xbm 04;33 +.xpm 04;33 +.tif 04;33 +.tiff 04;33 +.png 04;33 +.svg 04;33 +.svgz 04;33 +.mng 04;33 +.pcx 04;33 + +# image formats UPPERCASE +.JPG 04;33 +.JPEG 04;33 +.GIF 04;33 +.BMP 04;33 +.PBM 04;33 +.PGM 04;33 +.PPM 04;33 +.TGA 04;33 +.XBM 04;33 +.XPM 04;33 +.TIF 04;33 +.TIFF 04;33 +.PNG 04;33 +.SVG 04;33 +.SVGZ 04;33 +.MNG 04;33 +.PCX 04;33 + +# Documents +.pdf 00;33 +.ps 00;33 +.dvi 00;33 +.0 00;33 +.1 00;33 +.2 00;33 +.3 00;33 +.4 00;33 +.5 00;33 +.6 00;33 +.7 00;33 +.8 00;33 +.9 00;33 + +# videos +.mov 00;35 +.mpg 00;35 +.mpeg 00;35 +.m2v 00;35 +.mkv 00;35 +.webm 00;35 +.ogm 00;35 +.mp4 00;35 +.m4v 00;35 +.mp4v 00;35 +.vob 00;35 +.qt 00;35 +.nuv 00;35 +.wmv 00;35 +.asf 00;35 +.rm 00;35 +.rmvb 00;35 +.flc 00;35 +.avi 00;35 +.fli 00;35 +.flv 00;35 +.gl 00;35 +.dl 00;35 +.xcf 00;35 +.xwd 00;35 +.yuv 00;35 +.cgm 00;35 +.emf 00;35 + +# audio formats +.aac 04;35 +.au 04;35 +.flac 04;35 +.mid 04;35 +.midi 04;35 +.mka 04;35 +.mp3 04;35 +.mpc 04;35 +.ogg 04;35 +.ra 04;35 +.wav 04;35 + +# Text files +.txt 04;37 +.log 04;37 +.tex 04;37 +.srt 04;37 +.sub 04;37 + +# Web +.html 04;37 +.htm 04;37 +.css 04;37 +.js 04;37 + +# Makefile +.mk 04;36 +.in 04;36 + +# Prog +.lua 00;36 +.py 00;36 +.pl 00;36 +.el 00;36 +.c 00;36 +.h 00;36 +.cpp 00;36 +.hpp 00;36 +.cc 00;36 +.hh 00;36 +.sh 00;36 +.bash 00;36 +.zsh 00;36 +.csh 00;36 +.ksh 00;36 diff --git a/.shell.d/main_rc b/.shell.d/main_rc index e0571681..8e845deb 100644 --- a/.shell.d/main_rc +++ b/.shell.d/main_rc @@ -30,7 +30,7 @@ unset TEXDIR ## Enable color support of ls. if [ "$TERM" != "dumb" ]; then - eval "`dircolors -b`" + eval "`dircolors $HOME/.shell.d/dircolorsdb`" fi ## Terminal