----------------------------------------------------- -- Helper to get icons from a program/program name -- ----------------------------------------------------- local naughty = require("naughty") -- tries to find a matching file name in /usr/share/icons/THEME/RESOLUTION/apps/ and if not found tried with first letter -- as uppercase, this should get almost all icons to work with the papirus theme atleast -- TODO: try with more icon themes function Get_icon(theme, c, is_steam) if theme ~= nil and c ~= nil then local clientName = c.name -- TODO: Access steamdb api to fetch the clienticon if there is no icon found in this theme if is_steam then clientName = "steam_icon_" .. tostring(c) .. ".svg" else if c.class ~= nil then clientName = string.lower(c.class) .. ".svg" elseif clientName ~= nil then clientName = string.lower(c.name) .. ".svg" else return end end local resolutions = { "128x128", "96x96", "64x64", "48x48", "42x42", "32x32", "24x24", "16x16" } for i, res in ipairs(resolutions) do local iconDir = "/usr/share/icons/" .. theme .. "/" .. res .. "/apps/" local ioStream = io.open(iconDir .. clientName, "r") if ioStream ~= nil then return iconDir .. clientName else clientName = clientName:gsub("^%l", string.upper) iconDir = "/usr/share/icons/" .. theme .. "/" .. res .. "/apps/" ioStream = io.open(iconDir .. clientName, "r") if ioStream ~= nil then return iconDir .. clientName elseif type(c) ~= type("") then if pcall( function() if c:Get_icon(1) then error("icon error") else return c:Get_icon(1) end end ) then return nil end end end end end if c.icon == nil then return "/usr/share/icons/Papirus-Dark/128x128/apps/application-default-icon.svg" else return c.icon end end