local wibox = require("wibox")
-- Theme handling library
local beautiful = require("beautiful")
+local xrdb = beautiful.xresources
-- Notification library
local naughty = require("naughty")
local menubar = require("menubar")
local hotkeys_popup = require("awful.hotkeys_popup").widget
+local tblutils = require("tblutils")
local lain = require("lain")
local dkjson = require("lain.util").dkjson
local math = require("math")
+local freedesktop = require("freedesktop")
+local luatz = require("luatz")
-- }}}
-- {{{ Error handling
-- }}}
-- {{{ Variable definitions
+--xrdb.set_dpi(95, screen[1])
+--xrdb.set_dpi(120, screen[2])
+
-- Themes define colours, icons, and wallpapers
beautiful.init(awful.util.get_themes_dir() .. "default/theme.lua")
+beautiful.font = 'Sans 10'
-- This is used later as the default terminal and editor to run.
terminal = "x-terminal-emulator"
end
end
-local function sorted_pairs(t, f)
- local a = {}
- for n in pairs(t) do table.insert(a, n) end
- table.sort(a, f)
- local i = 0 -- iterator variable
- local iter = function () -- iterator function
- i = i + 1
- if a[i] == nil then return nil
- else return a[i], t[a[i]]
- end
- end
- return iter
-end
-
-local function print_table(tbl, indent)
- if not indent then indent = 0 end
- for k, v in pairs(tbl) do
- formatting = string.rep(" ", indent) .. k .. ": "
- if type(v) == "table" then
- print(formatting)
- print_table(v, indent+1)
- else
- print(formatting .. tostring(v))
- end
- end
-end
-
-local lain_bat = lain.widgets.bat({
+local lain_bat = lain.widget.bat({
batteries = {"BAT0", "BAT1"},
settings = function()
local delim = "↓"
- if bat_now.status == "Charging" then delim = "↑" end
+ if bat_now.status == "Charging" then delim = "↑"
+ elseif bat_now.status == "Unknown" then delim = "٭" end
widget:set_text(bat_now.perc .. "% " .. delim .. " " .. bat_now.time)
end,
})
return (not err and val) or "n/a"
end
-local eth_widget = lain.widgets.abase({
+local eth_widget = lain.widget.watch({
cmd = "curl -m5 -s 'https://poloniex.com/public?command=returnTicker'",
timeout = 600,
settings = function()
})
local function coindesk_price(output, base, prec)
- print(output)
local xc, pos, err = dkjson.decode(output, 1, nil)
if not prec then prec = 4 end
val = (xc and xc["bpi"][base]["rate_float"]) or 0
return (not err and val) or "n/a"
end
-local btc_widget = lain.widgets.abase({
+local btc_widget = lain.widget.watch({
cmd = "curl -m5 -Ls 'https://api.coindesk.com/v1/bpi/currentprice/EUR.json'",
timeout = 600,
settings = function()
{ "quit", awesome.quit }
}
-mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
- { "open terminal", terminal }
- }
- })
+mymainmenu = freedesktop.menu.build({
+ before = {
+ { "awesome", myawesomemenu, beautiful.awesome_icon },
+ { "terminal", terminal },
+ },
+ after = {
+ }
+})
mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
menu = mymainmenu })
-- {{{ Wibox
local spacer = wibox.widget.textbox()
-spacer:set_text(' | ')
+spacer:set_text(' │ ')
-- Create a textclock widget
-mytextclock = wibox.widget.textclock("%a %d %b %H:%M:%S", 1)
+clocks = { wibox.widget.textclock("%a %d %b %H:%M:%S %Z", 1) }
+
+ZONES = {
+ ["NZ"] = "Pacific/Auckland",
+ ["DE"] = "Europe/Berlin"
+}
+local now = luatz.time_in(nil)
+for c, tz in tblutils.sorted_pairs(ZONES) do
+ local t = luatz.time_in(tz)
+ if math.abs(os.difftime(t, now)) > 10 then
+ local widget = wibox.widget.textclock(c .. ": %H:%M (%a)", 60, tz)
+ table.insert(clocks, 1, spacer)
+ table.insert(clocks, 1, widget)
+ end
+end
-- Create a wibox for each screen and add it
mywibox = {}
end
awful.screen.connect_for_each_screen(function(s)
+ -- local fontsize = math.floor(250 * xrdb.get_dpi(s)/s.geometry.width)
+ -- beautiful.font = "Sans " .. tostring(fontsize)
-- Wallpaper
--DISABLED--if beautiful.wallpaper then
--DISABLED-- local wallpaper = beautiful.wallpaper
if not tags[s.index] then
tags[s.index] = {}
end
- for n,p in sorted_pairs(screentags[s.index]) do
+ for n,p in tblutils.sorted_pairs(screentags[s.index]) do
p["screen"] = s
n = string.sub(n, 2) -- remove leading 't' needed for syntax in table
table.insert(tags[s.index], awful.tag.add(n, p))
mypromptbox[s],
},
mytasklist[s], -- Middle widget
- { -- Right widgets
- layout = wibox.layout.fixed.horizontal,
- mykeyboardlayout,
- wibox.widget.systray(),
- btc_widget,
- spacer,
- eth_widget,
- spacer,
- lain_bat.widget,
- spacer,
- mytextclock,
- mylayoutbox[s],
- },
+ awful.util.table.join( -- Right widgets
+ {
+ layout = wibox.layout.fixed.horizontal,
+ mykeyboardlayout,
+ wibox.widget.systray(),
+ btc_widget,
+ spacer,
+ lain_bat.widget,
+ spacer,
+ },
+ clocks,
+ {
+ mylayoutbox[s],
+ }
+ ),
}
end)
-- }}}
awful.key({ modkey, }, "m",
function (c)
c.maximized = not c.maximized
+ c.maximized_horizontal = false
+ c.maximized_vertical = false
c:raise()
end ,
{description = "maximize", group = "client"})
-- misc apps
globalkeys = awful.util.table.join(globalkeys,
awful.key({ cmdkey }, "n", function () awful.spawn("firefox") end),
-awful.key({ cmdkey }, "m", function () awful.spawn("chromium") end),
+awful.key({ cmdkey }, "m", function () awful.spawn("chromium --enable-remote-extensions") end),
awful.key({ cmdkey }, "y", function () awful.spawn(terminal .. " -e python") end),
-awful.key({ cmdkey }, "c", function () awful.spawn("icedove") end),
+awful.key({ cmdkey }, "c", function () awful.spawn("thunderbird") end),
awful.key({ cmdkey }, "r", function () mypromptbox[mouse.screen]:run() end),
awful.key({ cmdkey }, "g", function () awful.spawn("gscan2pdf") end),
awful.key({ cmdkey }, "v", function () awful.spawn("virt-manager") end),
awful.key({ cmdkey }, "l", function () awful.spawn("libreoffice") end),
awful.key({ cmdkey }, "f", function () awful.spawn("thunar") end),
-awful.key({ cmdkey }, "i", function () awful.spawn(terminal .. " -title irc -name irc -e env MOSH_TITLE_NOPREFIX=true mosh -4 -- irc-host screen -dr irc") end),
+awful.key({ cmdkey }, "i", function () awful.spawn(terminal .. " -name irc -e env MOSH_TITLE_NOPREFIX=true mosh -4 -- irc-host tmux new -As irc irssi") end),
awful.key({ cmdkey }, "x", function () awful.spawn.with_shell("/sbin/start-stop-daemon --start --background --exec /usr/bin/xscreensaver -- -no-capture-stderr; sleep 2; xscreensaver-command -lock") end),
awful.key({ cmdkey, "Shift" }, "x", function () awful.spawn("xscreensaver-command -exit") end),
buttons = clientbuttons,
screen = awful.screen.preferred,
placement = awful.placement.no_overlap+awful.placement.no_offscreen,
- floating = true
+ floating = false
},
},
--DISABLED-- },
{ rule = { type = "dialog" },
- properties = { placement = awful.placement.centered }},
+ properties = { floating = true,
+ placement = awful.placement.centered
+ }
+ },
{ rule = { class = "URxvt" },
properties = {
- floating = false,
+ -- floating = false,
size_hints_honor = false
} },
{ rule = { class = "URxvt", instance = "irc" },
},
callback = move_to_tag(screen.count() == 1 and 1 or 2, 9)
},
- { rule = { class = "Icedove", instance = "Mail" },
+ { rule = { class = "Firefox-esr", instance = "Navigator" },
+ properties = {
+ floating = false,
+ },
+ callback = move_to_tag(screen.count() == 1 and 1 or 2, 9)
+ },
+ { rule = { class = "Thunderbird", instance = "Mail" },
properties = {
floating = false,
},
floating = false,
},
},
+ { rule = { class = "MuPDF", instance = "mupdf" },
+ properties = {
+ floating = true,
+ },
+ },
+ { rule = { class = "Pinentry", instance = "pinentry" },
+ properties = {
+ floating = true,
+ },
+ },
+ { rule = { class = "Gxmessage" },
+ properties = {
+ floating = true,
+ },
+ },
}
-- }}}
client.connect_signal("manage", function (c)
-- Set the windows at the slave,
-- i.e. put it at the end of others instead of setting it master.
- -- if not awesome.startup then awful.client.setslave(c) end
+ if not awesome.startup then awful.client.setslave(c) end
if awesome.startup and
not c.size_hints.user_position
-- Prevent clients from being unreachable after screen count changes.
awful.placement.no_offscreen(c)
end
+
+ c.maximized_horizontal = false
+ c.maximized_vertical = false
end)
-- Add a titlebar if titlebars_enabled is set to true in the rules.
client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
awful.ewmh.add_activate_filter(function(c, context, hints)
- if context == "ewmh" and c.class == "Firefox" then return false end
+ if context == "ewmh" and (c.class == "Firefox-esr" or c.class == "Firefox") then return false end
end)
-- vim:ft=lua:sw=4:sts=4:ts=4:et