diff --git a/awesome/error.lua b/awesome/error.lua new file mode 100644 index 0000000..fee07ae --- /dev/null +++ b/awesome/error.lua @@ -0,0 +1,27 @@ +-- Awesome Window Manager +-- Error handling + +-- {{{ 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 +-- }}} diff --git a/awesome/keybindings.lua b/awesome/keybindings.lua new file mode 100644 index 0000000..6259e76 --- /dev/null +++ b/awesome/keybindings.lua @@ -0,0 +1,183 @@ +-- Awesome Window Manager +-- Key and Mouse Bindings + + +-- {{{ 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, "Shift" }, "s", function () os.execute("systemctl suspend") end ), + awful.key({ modkey, "Shift" }, "a", function () os.execute("sleep 1s; xset dpms force off") end ), + + -- + -- Volume keys + -- + awful.key({ }, "XF86AudioRaiseVolume", function () volumecfg.up() end), + awful.key({ }, "XF86AudioLowerVolume", function () volumecfg.down() end), + awful.key({ }, "XF86AudioMute", function () volumecfg.toggle() end), + + -- + -- Alt-Tab + -- + awful.key({ "Mod1", }, "Tab", function () + alttab.switch(1, "Alt_L", "Tab", "ISO_Left_Tab") + end), + + awful.key({ "Mod1", "Shift" }, "Tab", function () + alttab.switch(-1, "Alt_L", "Tab", "ISO_Left_Tab") + end), + + -- + -- Standard + -- + 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, }, "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) +-- }}} + diff --git a/awesome/rc.lua b/awesome/rc.lua index b3a3fb2..94f9ede 100644 --- a/awesome/rc.lua +++ b/awesome/rc.lua @@ -1,17 +1,61 @@ --- Standard awesome library -local gears = require("gears") -local awful = require("awful") +-- +-- Load libraries +-- +gears = require("gears") +awful = require("awful") awful.rules = require("awful.rules") -require("awful.autofocus") --- 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") +awful.autofocus = require("awful.autofocus") +beautiful = require("beautiful") +naughty = require("naughty") +-- +-- Configuration +-- + +AWESOME_CONFDIR = awful.util.getdir('config') +AWESOME_THEME = '/usr/share/awesome/themes/default/theme.lua' + +-- HOSTNAME = socket.dns.gethostname() +HOMEDIR = os.getenv('HOME') + +TERMINAL = "terminology" +EDITOR = os.getenv("EDITOR") or "vim" +EDITOR_CMD = TERMINAL .. " -e " .. EDITOR +MODKEY = "Mod4" + +-- lock = terminal .. " -e xscreensavercmd -lock" +CMD_LOCK = 'xlock -mode rain' +CMD_SUSPEND = 'systemctl suspend' + +BROWSER = 'firefox' +FILEMANAGER = 'nemo' + +-- +-- Run Once +-- +function run_once(prg,arg_string,pname,screen) + if not prg then + do return nil end + end + + if not pname then + pname = prg + end + + if not arg_string then + awful.util.spawn_with_shell("pgrep -f -u $USER -x '" .. pname .. "' || (" .. prg .. ")",screen) + else + awful.util.spawn_with_shell("pgrep -f -u $USER -x '" .. pname .. " ".. arg_string .."' || (" .. prg .. " " .. arg_string .. ")",screen) + end +end + +run_once("xscreensaver","-no-splash") +run_once("nm-applet") + + +-- -- Alt-Tab +-- local alttab = require("alttab") alttab.settings.preview_box = true -- display preview-box alttab.settings.preview_box_bg = "#ddddddaa" -- background color @@ -23,52 +67,22 @@ local alttab = require("alttab") alttab.settings.client_opacity_value = 0.5 -- alpha-value alttab.settings.client_opacity_delay = 150 -- delay in ms --- Widgets ---launchbar = require("quick_launch") -require("volume") -require("power") +-- +-- Error Handling +-- +require("error") +-- Init Theming +beautiful.init(AWESOME_THEME) --- {{{ 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) +-- {{{ Wallpaper +if beautiful.wallpaper then + for s = 1, screen.count() do + gears.wallpaper.maximized(beautiful.wallpaper, s, true) + end end -- }}} --- {{{ Variable definitions --- Themes define colours, icons, font and wallpapers. -beautiful.init("/usr/share/awesome/themes/default/theme.lua") - --- This is used later as the default terminal and editor to run. -terminal = "terminology" -editor = os.getenv("EDITOR") or "vim" -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 = @@ -88,13 +102,6 @@ local layouts = } -- }}} --- {{{ 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. @@ -105,398 +112,9 @@ for s = 1, screen.count() do end -- }}} --- {{{ Menu --- Create a laucher widget and a main menu -mypowermenu = { - { "suspend", terminal .. " -e systemctl suspend"}, - { "lock", terminal .. " -e xscreensavercmd -lock"} -} -myawesomemenu = { - { "manual", terminal .. " -e man awesome" }, - { "edit config", editor_cmd .. " " .. awesome.conffile }, - { "restart", awesome.restart }, - { "quit", awesome.quit } -} +-- Get topbar, bindings, rules, signals +require("topbar") +require("keybindings") +require("rules") +require("signals") -mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon }, - { "powermenu", mypowermenu }, - { "open terminal", terminal }, - { "filemanager", function () os.execute("nemo") end } - } - }) - -mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon, menu = mymainmenu }, - { image = filebrowser, command = function() os.execute("nemo &") end }, - { image = firefox, command = function () os.execute("firefox") end }) - --- 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)) - ---require("volume2") ---require("diskusage") ---diskwidget = widget({ type = 'imagebox' }) ---diskwidget.image = image("/home/username/.config/awesome/du.png") ---disk = require("diskusage") --- the first argument is the widget to trigger the diskusage --- -- the second/third is the percentage at which a line gets orange/red --- -- true = show only local filesystems ---disk.addToWidget(diskwidget, 75, 90, false) - -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(diskwidget) - --right_layout:add(launchbar) - right_layout:add(powercfg.widget) - right_layout:add(volumecfg.widget) - -- right_layout:add(volume_widget) - 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, "Shift" }, "s", function () os.execute("systemctl suspend") end ), - awful.key({ modkey, "Shift" }, "a", function () os.execute("sleep 1s; xset dpms force off") end ), --- Volume keys - awful.key({ }, "XF86AudioRaiseVolume", function () volumecfg.up() end), - awful.key({ }, "XF86AudioLowerVolume", function () volumecfg.down() end), - awful.key({ }, "XF86AudioMute", function () volumecfg.toggle() end), - --- Alt-Tab - awful.key({ "Mod1", }, "Tab", function () - alttab.switch(1, "Alt_L", "Tab", "ISO_Left_Tab") - end), - - awful.key({ "Mod1", "Shift" }, "Tab", function () - alttab.switch(-1, "Alt_L", "Tab", "ISO_Left_Tab") - end), - --- Standard - 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, }, "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 = false - 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) - -client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) -client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) --- }}} diff --git a/awesome/rules.lua b/awesome/rules.lua new file mode 100644 index 0000000..163dbbc --- /dev/null +++ b/awesome/rules.lua @@ -0,0 +1,25 @@ +-- Awesome Window Manager +-- Rules + +-- {{{ 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] } }, +} +-- }}} diff --git a/awesome/signals.lua b/awesome/signals.lua new file mode 100644 index 0000000..99de84f --- /dev/null +++ b/awesome/signals.lua @@ -0,0 +1,76 @@ +-- Awesome Window Manager +-- Signals + +-- {{{ 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 = false + 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) + +client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) + +client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) +-- }}} diff --git a/awesome/topbar.lua b/awesome/topbar.lua new file mode 100644 index 0000000..dd2f9cf --- /dev/null +++ b/awesome/topbar.lua @@ -0,0 +1,143 @@ +-- Awesome Window Manager +-- Topbar + +local wibox = require("wibox") +local menubar = require("menubar") + +-- Widgets +--launchbar = require("quick_launch") +volumecfg = require("widgets/volume") +powercfg = require("widgets/power") +mytextclock = awful.widget.textclock() + +-- {{{ Menu + +-- Menubar configuration +menubar.utils.terminal = TERMINAL -- Set the terminal for applications that require it + +-- Create a laucher widget and a main menu +mypowermenu = { + { "suspend", function () os.execute(CMD_SUSPEND) end}, + { "lock", function () os.execute(CMD_LOCK) end} +} +myawesomemenu = { + { "manual", TERMINAL .. " -e man awesome" }, + { "edit config", EDITOR_CMD .. " " .. awesome.conffile }, + { "restart", awesome.restart }, + { "quit", awesome.quit } +} + +mymainmenu = awful.menu({ + items = { + { "awesome", myawesomemenu, beautiful.awesome_icon }, + { "powermenu", mypowermenu }, + { "open terminal", TERMINAL }, + { "filemanager", function () os.execute(FILEMANAGER) end }, + { "firefox", function () os.execute(BROWSER) end } + } +}) + +mylauncher = awful.widget.launcher( + { image = beautiful.awesome_icon, menu = mymainmenu }, + { image = filebrowser, command = function() awful.util.spawn(FILEMANAGER) end }, + { image = firefox, command = function () awful.util.spawn(BROWSER) end } +) +-- }}} + +-- {{{ Wibox +-- 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(diskwidget) + --right_layout:add(launchbar) + right_layout:add(powercfg.widget) + right_layout:add(volumecfg.widget) + --right_layout:add(volume_widget) + 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 +-- }}} diff --git a/awesome/calendar2.lua b/awesome/widgets/calendar2.lua similarity index 100% rename from awesome/calendar2.lua rename to awesome/widgets/calendar2.lua diff --git a/awesome/diskusage.lua b/awesome/widgets/diskusage.lua similarity index 100% rename from awesome/diskusage.lua rename to awesome/widgets/diskusage.lua diff --git a/awesome/power.lua b/awesome/widgets/power.lua similarity index 82% rename from awesome/power.lua rename to awesome/widgets/power.lua index 68db095..6c4c626 100644 --- a/awesome/power.lua +++ b/awesome/widgets/power.lua @@ -7,15 +7,17 @@ powercfg.widget = wibox.widget.textbox() powercfg.widget:set_align("right"); powercfg.update = function () - local fd = io.popen("acpi | cut -d ':' -f 2") - local status = fd:read("*all") - fd:close() + --local fd = io.popen("acpi | cut -d ':' -f 2") + --local status = fd:read("*all") + --fd:close() - local power = tonumber(string.match(status, "%d+")) - stats = string.match(status,"(%s+),") + --local power = tonumber(string.match(status, "%d+")) + --stats = string.match(status,"(%s+),") -- local charging = false -- --- +-- + stats = '1' + power = '' local colour = 'blue' -- -- colours (start and end) -- local sr, sg, sb = 0x3F,0x3F,0x3F @@ -48,6 +50,9 @@ end -- start updating it powercfg.update() +-- start timer powercfg.timer = timer({ timeout = 1}) powercfg.timer:connect_signal("timeout", function () powercfg.update() end) powercfg.timer:start() + +return powercfg diff --git a/awesome/volume.lua b/awesome/widgets/volume.lua similarity index 97% rename from awesome/volume.lua rename to awesome/widgets/volume.lua index 2244481..47b036b 100644 --- a/awesome/volume.lua +++ b/awesome/widgets/volume.lua @@ -28,7 +28,7 @@ volumecfg.mixercommand = function (command) local er, eg, eb = 0xDC, 0xDC, 0xCC if string.find(status, "on", 1, true) then - color = 'blue' + color = 'grey' mute = '♪' else sr, sg, sb = 0xFF, 0x33, 0xAA @@ -69,6 +69,9 @@ volumecfg.widget:buttons(awful.util.table.join( )) -- start updating volumecfg.update() +-- start timer mytimer = timer({ timeout = 1 }) mytimer:connect_signal("timeout", function () volumecfg.update() end) mytimer:start() + +return volumecfg diff --git a/awesome/volume2.lua b/awesome/widgets/volume2.lua similarity index 100% rename from awesome/volume2.lua rename to awesome/widgets/volume2.lua diff --git a/bin/countdown b/bin/countdown index 8c3e6e0..5408bc6 100755 --- a/bin/countdown +++ b/bin/countdown @@ -3,31 +3,31 @@ m=${1} Floor () { - DIVIDEND=${1} - DIVISOR=${2} - RESULT=$(( ( ${DIVIDEND} - ( ${DIVIDEND} % ${DIVISOR}) )/${DIVISOR} )) - echo ${RESULT} + DIVIDEND=${1} + DIVISOR=${2} + RESULT=$(( ( ${DIVIDEND} - ( ${DIVIDEND} % ${DIVISOR}) )/${DIVISOR} )) + echo ${RESULT} } Timecount(){ - s=${1} - HOUR=$( Floor ${s} 60/60 ) - s=$((${s}-(60*60*${HOUR}))) - MIN=$( Floor ${s} 60 ) - SEC=$((${s}-60*${MIN})) - while [ $HOUR -ge 0 ]; do - while [ $MIN -ge 0 ]; do - while [ $SEC -ge 0 ]; do - printf "%02d:%02d:%02d\033[0K\r" $HOUR $MIN $SEC - SEC=$((SEC-1)) - sleep 1 - done - SEC=59 - MIN=$((MIN-1)) - done - MIN=59 - HOUR=$((HOUR-1)) - done + s=${1} + HOUR=$( Floor ${s} 60/60 ) + s=$((${s}-(60*60*${HOUR}))) + MIN=$( Floor ${s} 60 ) + SEC=$((${s}-60*${MIN})) + while [ $HOUR -ge 0 ]; do + while [ $MIN -ge 0 ]; do + while [ $SEC -ge 0 ]; do + printf "%02d:%02d:%02d\033[0K\r" $HOUR $MIN $SEC + SEC=$((SEC-1)) + sleep 1 + done + SEC=59 + MIN=$((MIN-1)) + done + MIN=59 + HOUR=$((HOUR-1)) + done } Timecount $m diff --git a/profiles/main.sh b/profiles/main.sh index 7668bf1..10c8bb7 100644 --- a/profiles/main.sh +++ b/profiles/main.sh @@ -1,8 +1,12 @@ DOTFILES="$HOME/.dotfiles" #Add DOTFILES/bin/ to PATH DOTBIN="$DOTFILES/bin" -if [ -d "$DOTBIN" ]; then - export PATH="$PATH:$DOTBIN" + +addpath() { case ":${PATH:=$1}:" in *:$1:*) ;; *) PATH="$1:$PATH" ;; esac; } + +if [ -d "$DOTBIN" ] +then + addpath "$DOTBIN" fi @@ -11,14 +15,22 @@ export EDITOR="vi" # Source Envs -DOTENVS="$HOME/.envs" -if [ -d "DOTENVS" ]; then - source "$DOTENVS/*.active" +DOTENVS="$DOTFILES/envs.d" +if [ -d "$DOTENVS" ] +then + for f in "$DOTENVS/*.active" + do + if [ "$f" = "$DOTENVS/*.active" ] + then + break + fi + + source "$f" + done fi - - # Source Bashrc if BASH -if [ "$BASH" ] && [ -f $DOTFILES/bash/bashrc ]; then +if [ "$BASH" ] && [ -f $DOTFILES/bash/bashrc ] +then source $DOTFILES/bash/bashrc fi diff --git a/vim/vimrc b/vim/vimrc index 2d4b1e6..1f06b8c 100644 --- a/vim/vimrc +++ b/vim/vimrc @@ -16,20 +16,19 @@ if &term=="xterm" set t_Sf=^[[3%dm endif -"Auto indentation +"Auto indentation, just "za" needed filetype indent on " Set tabbing stuff -set autoindent set tabstop=4 set shiftwidth=4 set noexpandtab "Folding -augroup vimrc - au BufReadPre * setlocal foldmethod=indent - au BufWinEnter * if &fdm == 'indent' | setlocal foldmethod=manual | endif -augroup END +"augroup vimrc +" au BufReadPre * setlocal foldmethod=indent +" au BufWinEnter * if &fdm == 'indent' | setlocal foldmethod=manual | endif +"augroup END set grepprg=grep\ -nH\ $* diff --git a/xinitrc b/xinitrc index 92edee5..e58d724 100644 --- a/xinitrc +++ b/xinitrc @@ -22,39 +22,41 @@ fi # Load session -DEFAULT_SESSION=awesome +DEFAULT_SESSION="awesome >> $HOME/.cache/awesome/stdout 2>> $HOME/.cache/awesome/stderr" XTERM=xterm case $1 in xfce4) - exec startxfce4 + RUN=startxfce4 ;; awesome) xscreensaver -nosplash & nm-applet & - exec awesome >> $HOME/.cache/awesome/stdout 2>> $HOME/.cache/awesome/stderr + RUN=awesome ;; enlightenment) - exec enlightenment_start + RUN=enlightenment_start ;; openbox) - exec openbox + RUN=openbox ;; cinnamon) - exec cinnamon + RUN=cinnamon ;; kde) - exec startkde + RUN=startkde ;; gnome) - exec gnome-session + RUN=gnome-session ;; unity) - exec unity + RUN=unity ;; xterm) - exec xterm + RUN=xterm ;; *) - exec $DEFAULT_SESSION + RUN=$DEFAULT_SESSION ;; esac + +exec "$RUN" || exec "$XTERM"