X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/c68f69b400236b5b880ea4d25310b276d154f76e..HEAD:/awesome/rc.lua diff --git a/awesome/rc.lua b/awesome/rc.lua index cd71125..9381277 100644 --- a/awesome/rc.lua +++ b/awesome/rc.lua @@ -1,19 +1,14 @@ --- Standard awesome library +-- Awesome libraries {{{1 gears = require("gears") awful = require("awful") awful.rules = require("awful.rules") require("awful.autofocus") --- Widget and layout library -wibox = require("wibox") --- Theme handling library beautiful = require("beautiful") --- Notification library naughty = require("naughty") menubar = require("menubar") --- Pulseaudio widget ---local APW = require("apw/widget") +require("awful.remote") --- {{{ Error handling +-- Error handling {{{1 -- 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 @@ -32,208 +27,59 @@ do naughty.notify({ preset = naughty.config.presets.critical, title = "Oops, an error happened!", - text = err }) + text = tostring(err) }) in_error = false end) end --- }}} --- {{{ Variable definitions --- Themes define colours, icons, and wallpapers -beautiful.init("/usr/share/awesome/themes/default/theme.lua") - --- This is used later as the default terminal and editor to run. -terminal = "konsole" -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" - --- Tags -require("tags") --- }}} - --- {{{ Wallpaper -if beautiful.wallpaper then - for s = 1, screen.count() do - gears.wallpaper.maximized(beautiful.wallpaper, s, true) - end +-- Variable definitions {{{1 +-- Themes define colours, icons, font and wallpapers. +local gfs = require("gears.filesystem") +local theme = os.getenv("THEME") +local theme_path = gfs.get_dir("config").."/themes/"..theme.."/theme.lua" + +if not beautiful.init(theme_path) then + -- we failed to load the theme, load default instead + naughty.notify({ preset = naughty.config.presets.warning, + title = "Could not load theme, fallback to default", + text = "theme_path = '"..theme_path.."'" }) + beautiful.init(gfs.get_themes_dir() .. "default/theme.lua") end --- }}} - --- {{{ Menu --- Create a laucher widget and a main menu -myawesomemenu = { - { "manual", terminal .. " -e man awesome" }, - { "edit config", editor_cmd .. " " .. awesome.conffile }, - { "restart", awesome.restart }, - { "quit", awesome.quit } -} - -mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon }, - { "open terminal", terminal } - } - }) - -mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon, - menu = mymainmenu }) - --- Menubar configuration -menubar.utils.terminal = terminal -- Set the terminal for applications that require it --- }}} - --- {{{ Wibox --- Create a textclock widget -mytextclock = awful.widget.textclock() - --- Create a wibox for each screen and add it -mywibox = {} -mypromptbox = {} -mylayoutbox = {} -mytaglist = {} -mytaglist.buttons = awful.util.table.join( - awful.button({ }, 1, awful.tag.viewonly), - awful.button({ modkey }, 1, awful.client.movetotag), - awful.button({ }, 3, awful.tag.viewtoggle), - awful.button({ modkey }, 3, awful.client.toggletag), - awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end), - awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end) - ) -mytasklist = {} -mytasklist.buttons = awful.util.table.join( - awful.button({ }, 1, function (c) - if c == client.focus then - c.minimized = true - else - -- Without this, the following - -- :isvisible() makes no sense - c.minimized = false - if not c:isvisible() then - awful.tag.viewonly(c:tags()[1]) - end - -- This will also un-minimize - -- the client, if needed - client.focus = c - c:raise() - end - end), - awful.button({ }, 3, function () - if instance then - instance:hide() - instance = nil - else - instance = awful.menu.clients({ 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(APW) - 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/Key Bindings +-- This is used later as the default terminal to run. +terminal = os.getenv("TERMINAL") or "xterm" +terminal_class = (function() + local map = { urxvt = "URxvt" + , urxvtc = "URxvt" + , xterm = "XTerm" + } + return map[terminal] or terminal +end)() + +-- Require files {{{1 require("bindings") - --- {{{ Rules -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, - 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 -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) --- }}} - --- {{{ Autostart applications -require("autostart") --- }}} +require("tags") +require("menu") +require("topbar") +require("rules") +-- require("conky") +require("signals") + +-- Set keys {{{1 +root.keys(globalkeys) + +-- Autostart {{{1 +local utils = require("utils") +awful.spawn.once("kdeconnect-indicator") +-- This seems to not keep awesome as parent of these processes +utils.spawn_terminal_once("ncmpcpp", { instance = "ncmpcpp" + , tag = mediatag + }) +utils.spawn_terminal_once("neomutt", + { instance = "mutt" , tag = wwwtag }) +utils.spawn_terminal_once("weechat", { instance = "weechat" + , tag = imtag + , function (c) awful.client.setmaster(c) end + }) +-- can't get this to work propery, restarting awesowe will respawn a new qutebrowser +awful.spawn.single_instance("qutebrowser", { instance = "qutebrowser", tag = wwwtag })