-- If LuaRocks is installed, make sure that packages installed through it are
-- found (e.g. lgi). If LuaRocks is not installed, do nothing.
pcall(require, "luarocks.loader")
-- libraries {{{
local awful = require("awful")
local beautiful = require("beautiful")
local gears   = require("gears")
---@diagnostic disable-next-line: unused-local
--- for debugging
local inspect = require("inspect")
local wibox   = require("wibox")
require("awful.autofocus")
require("util.errors")
-- }}}

beautiful.init(awful.util.getdir("config") .. "/theme.lua")

require("tapestry")

-- {{{ Logging
local log = require("talkative")
log.add_logger(log.loggers.stdio, log.level.DEBUG)
log.add_logger(log.loggers.naughty, log.level.WARNING)
-- }}}

-- {{{ Tags

local tags = require('tags')
tags.setup()

-- }}}

-- {{{ widgets
local widgets = require("widgets")
awful.screen.connect_for_each_screen(function(s)
	widgets.dynamic_taskbar(s)
	widgets(s).left(
		{
			widgets.screennum(s),
			widgets.spacer,
			widgets.layout(s),
			widgets.taglist(s),
			layout = wibox.layout.fixed.horizontal
		},
		wibox.widget.textclock()
	)

	widgets(s).right(
		{
			widgets.cpu(),
			widgets.ram(),
			widgets.battery(s),
			widgets.systray(s),
			layout = wibox.layout.fixed.horizontal
		},
		widgets.mail({ os.getenv("HOME") .. "/.maildir/uber" }, "bottom_right", "uber")
	)
end)
-- }}}

local audiowheel = require("audiowheel")
local speakerwheel = audiowheel {
	volume_control = { cardid = 0 },
	image_prefix = "/usr/share/icons/ePapirus/24x24/panel/",
}

local micwheel = audiowheel {
	image_prefix = "/usr/share/icons/ePapirus/24x24/panel/",
	image_muted = "microphone-sensitivity-muted.svg",
	image_low = "microphone-sensitivity-low.svg",
	image_medium = "microphone-sensitivity-medium.svg",
	image_high = "microphone-sensitivity-high.svg",
	--volume_control = { cardid = 0, tooltip = false, channel = "Dmic0" }
	volume_control = { tooltip = false, type = "source" }
}


-- {{{ Key bindings

local binder = require("separable.binder")
binder.modal.set_location("bottom_left")
binder.modal.hide_default_options()
binder.modal.set_opacity(0.8)
--binder.modal.set_x_offset(18)

binder.add_default_bindings()
binder.add_reloadable(tags.create_bindings)
local mybindings = awful.util.getdir("config") .. "/mybindings.lua"
binder.add_reloadable(function() return dofile(mybindings) end)

binder.add_bindings(awful.util.table.join(
	awful.key({}, "XF86AudioRaiseVolume", function() speakerwheel:up() end),
	awful.key({}, "XF86AudioLowerVolume", function() speakerwheel:down() end),
	awful.key({}, "XF86AudioMute", function() speakerwheel:toggle() end),
	awful.key({ "Shift" }, "XF86AudioRaiseVolume", function() micwheel:up() end),
	awful.key({ "Shift" }, "XF86AudioLowerVolume", function() micwheel:down() end),
	awful.key({}, "XF86AudioMicMute", function() micwheel:toggle() end)
))

binder.apply()

-- }}}

require("rules")
require("signals")

local autorun_file = awful.util.getdir("config") .. "/autorun"
if gears.filesystem.file_readable(autorun_file) then
	awful.spawn(autorun_file)
end

--
-- vim: fdm=marker
--