dotfiles/awesome/components/pastel/wallpaper.lua

102 lines
3.7 KiB
Lua

-- ██╗ ██╗ █████╗ ██╗ ██╗ ██████╗ █████╗ ██████╗ ███████╗██████╗
-- ██║ ██║██╔══██╗██║ ██║ ██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗
-- ██║ █╗ ██║███████║██║ ██║ ██████╔╝███████║██████╔╝█████╗ ██████╔╝
-- ██║███╗██║██╔══██║██║ ██║ ██╔═══╝ ██╔══██║██╔═══╝ ██╔══╝ ██╔══██╗
-- ╚███╔███╔╝██║ ██║███████╗███████╗██║ ██║ ██║██║ ███████╗██║ ██║
-- ╚══╝╚══╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═╝ ╚═╝
-- ===================================================================
-- Imports
-- ===================================================================
local awful = require("awful")
local gears = require("gears")
local naughty = require("naughty")
-- ===================================================================
-- Initialization
-- ===================================================================
local is_blurred = false;
local wallpaper_dir = gears.filesystem.get_configuration_dir() .. "/wallpaper"
local wallpaper = wallpaper_dir .. "/wallpaper.png"
local blurred_wallpaper = wallpaper_dir .. "/blurredWallpaper.png"
awful.spawn.with_shell("feh --bg-fill " .. wallpaper)
--- Check if a file or directory exists in this path
local function exists(file)
local ok, err, code = os.rename(file, file)
if not ok then
if code == 13 then
-- Permission denied, but it exists
return true
end
end
return ok, err
end
-- check if blurred wallpaper needs to be created
if not exists(blurred_wallpaper) then
naughty.notify({
preset = naughty.config.presets.normal,
title = "Wallpaper",
text = "Generating blurred wallpaper..."
})
-- uses image magick to create a blurred version of the wallpaper
awful.spawn.with_shell("convert -filter Gaussian -blur 0x30 " .. wallpaper .. " " .. blurred_wallpaper)
end
-- ===================================================================
-- Functionality
-- ===================================================================
-- changes to blurred wallpaper
local function blur()
if not is_blurred then
awful.spawn.with_shell("feh --bg-fill " .. blurred_wallpaper)
is_blurred = true
end
end
-- changes to normal wallpaper
local function unblur()
if is_blurred then
awful.spawn.with_shell("feh --bg-fill " .. wallpaper)
is_blurred = false
end
end
-- blur / unblur on tag change
tag.connect_signal("property::selected", function(t)
-- check if tag has any clients
for _ in pairs(t:clients()) do
blur()
return
end
-- unblur if tag has no clients
unblur()
end)
-- check if wallpaper should be blurred on client open
client.connect_signal("manage", function(c)
blur()
end)
-- check if wallpaper should be unblurred on client close
client.connect_signal("unmanage", function(c)
local t = awful.screen.focused().selected_tag
-- check if tag has any clients
for _ in pairs(t:clients()) do
return
end
-- unblur if tag has no clients
unblur()
end)