171 lines
5.2 KiB
Lua
171 lines
5.2 KiB
Lua
local awful = require("awful")
|
|
local gears = require("gears")
|
|
local gfs = gears.filesystem
|
|
local wibox = require("wibox")
|
|
local beautiful = require("beautiful")
|
|
local dpi = require("beautiful.xresources").apply_dpi
|
|
local helpers = require("helpers")
|
|
|
|
-- Bling Module
|
|
local bling = require("module.bling")
|
|
|
|
-- Layout Machi
|
|
local machi = require("module.layout-machi")
|
|
beautiful.layout_machi = machi.get_icon()
|
|
|
|
-- This is to slave windows' positions in floating layout
|
|
require("module.savefloats")
|
|
|
|
-- Better mouse resizing on tiled
|
|
require("module.better-resize")
|
|
|
|
client.connect_signal("request::manage", function(c)
|
|
if not c.icon then
|
|
local i = gears.surface(gfs.get_configuration_dir() ..
|
|
"theme/assets/icons/awesome.png")
|
|
c.icon = i._native
|
|
end
|
|
|
|
-- Set the windows at the slave,
|
|
if awesome.startup and not c.size_hints.user_position and
|
|
not c.size_hints.program_position then
|
|
-- Prevent clients from being unreachable after screen count changes.
|
|
awful.placement.no_offscreen(c)
|
|
end
|
|
end)
|
|
|
|
-- Enable sloppy focus, so that focus follows mouse.
|
|
client.connect_signal("mouse::enter", function(c)
|
|
c:emit_signal("request::activate", "mouse_enter", {raise = false})
|
|
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)
|
|
|
|
-- Custom Layouts -------------------------------------------------------------
|
|
|
|
local mstab = bling.layout.mstab
|
|
local centered = bling.layout.centered
|
|
local horizontal = bling.layout.horizontal
|
|
local equal = bling.layout.equalarea
|
|
local deck = bling.layout.deck
|
|
|
|
machi.editor.nested_layouts = {
|
|
["0"] = deck,
|
|
["1"] = awful.layout.suit.spiral,
|
|
["2"] = awful.layout.suit.fair,
|
|
["3"] = awful.layout.suit.fair.horizontal
|
|
}
|
|
|
|
-- Set the layouts
|
|
|
|
tag.connect_signal("request::default_layouts", function()
|
|
awful.layout.append_default_layouts({
|
|
awful.layout.suit.tile, awful.layout.suit.floating, centered, mstab,
|
|
horizontal, machi.default_layout, equal, deck
|
|
})
|
|
end)
|
|
|
|
-- Layout List Widget ---------------------------------------------------------
|
|
|
|
-- List
|
|
local ll = awful.widget.layoutlist {
|
|
source = awful.widget.layoutlist.source.default_layouts, -- DOC_HIDE
|
|
spacing = dpi(24),
|
|
base_layout = wibox.widget {
|
|
spacing = dpi(24),
|
|
forced_num_cols = 4,
|
|
layout = wibox.layout.grid.vertical
|
|
},
|
|
widget_template = {
|
|
{
|
|
{
|
|
id = "icon_role",
|
|
forced_height = dpi(68),
|
|
forced_width = dpi(68),
|
|
widget = wibox.widget.imagebox
|
|
},
|
|
margins = dpi(24),
|
|
widget = wibox.container.margin
|
|
},
|
|
id = "background_role",
|
|
forced_width = dpi(68),
|
|
forced_height = dpi(68),
|
|
widget = wibox.container.background
|
|
}
|
|
}
|
|
|
|
-- Popup
|
|
local layout_popup = awful.popup {
|
|
widget = wibox.widget {
|
|
{ll, margins = dpi(24), widget = wibox.container.margin},
|
|
bg = beautiful.xbackground,
|
|
shape = helpers.rrect(beautiful.border_radius),
|
|
border_color = beautiful.widget_border_color,
|
|
border_width = beautiful.widget_border_width,
|
|
widget = wibox.container.background
|
|
},
|
|
placement = awful.placement.centered,
|
|
ontop = true,
|
|
visible = false,
|
|
bg = beautiful.xbackground .. "00"
|
|
}
|
|
|
|
-- Key Bindings for Widget ----------------------------------------------------
|
|
|
|
function gears.table.iterate_value(t, value, step_size, filter, start_at)
|
|
local k = gears.table.hasitem(t, value, true, start_at)
|
|
if not k then return end
|
|
|
|
step_size = step_size or 1
|
|
local new_key = gears.math.cycle(#t, k + step_size)
|
|
|
|
if filter and not filter(t[new_key]) then
|
|
for i = 1, #t do
|
|
local k2 = gears.math.cycle(#t, new_key + i)
|
|
if filter(t[k2]) then return t[k2], k2 end
|
|
end
|
|
return
|
|
end
|
|
|
|
return t[new_key], new_key
|
|
end
|
|
|
|
awful.keygrabber {
|
|
start_callback = function() layout_popup.visible = true end,
|
|
stop_callback = function() layout_popup.visible = false end,
|
|
export_keybindings = true,
|
|
stop_event = "release",
|
|
stop_key = {"Escape", "Super_L", "Super_R", "Mod4"},
|
|
keybindings = {
|
|
{
|
|
{modkey, "Shift"}, " ", function()
|
|
awful.layout.set(gears.table.iterate_value(ll.layouts,
|
|
ll.current_layout, -1),
|
|
nil)
|
|
end
|
|
}, {
|
|
{modkey}, " ", function()
|
|
awful.layout.set(gears.table.iterate_value(ll.layouts,
|
|
ll.current_layout, 1),
|
|
nil)
|
|
end
|
|
}
|
|
}
|
|
}
|
|
|
|
-- Hide all windows when a splash is shown
|
|
awesome.connect_signal("widgets::splash::visibility", function(vis)
|
|
local t = screen.primary.selected_tag
|
|
if vis then
|
|
for idx, c in ipairs(t:clients()) do c.hidden = true end
|
|
else
|
|
for idx, c in ipairs(t:clients()) do c.hidden = false end
|
|
end
|
|
end)
|
|
|
|
-- EOF ------------------------------------------------------------------------
|