minor fixes + freedesktop menu added
This commit is contained in:
parent
32a3e10f36
commit
17d50faff8
|
@ -25,6 +25,7 @@ Notable features:
|
|||
- No borders when there's only one visible client
|
||||
- Powerful volume bar
|
||||
- Custom layouts
|
||||
- Freedesktop menu
|
||||
|
||||
They're scattered all over the set, so try each theme and choose the one you enjoy the most.
|
||||
|
||||
|
@ -83,6 +84,8 @@ Blackburn and Holo use png topbars, supported screen width sizes are:
|
|||
|
||||
if your screen don't match one of these widths, then you have to create a proper topbar, and put it into ``themes/*chosentheme*/icons/topbar``.
|
||||
|
||||
Freedesktop menu in use is just an example: feel free to modify ``freedesktop/freedesktop.lua``.
|
||||
|
||||
**Have any suggestions?** Did you see some great stuff and you want me to put my paws on it? Feel free to email me, it might just be the next copycat!
|
||||
|
||||
Author
|
||||
|
|
|
@ -0,0 +1,127 @@
|
|||
local wibox = wibox
|
||||
local widget = widget
|
||||
local screen = screen
|
||||
local image = image
|
||||
local button = button
|
||||
local table = table
|
||||
local ipairs = ipairs
|
||||
local awful = require("awful")
|
||||
local utils = require("freedesktop.utils")
|
||||
local wibox = require("wibox")
|
||||
|
||||
module("freedesktop.desktop")
|
||||
|
||||
local current_pos = {}
|
||||
local iconsize = { width = 48, height = 48 }
|
||||
local labelsize = { width = 130, height = 20 }
|
||||
local margin = { x = 20, y = 20 }
|
||||
|
||||
function add_icon(settings)
|
||||
|
||||
local s = settings.screen
|
||||
|
||||
if not current_pos[s] then
|
||||
current_pos[s] = { x = (screen[s].geometry.width - iconsize.width - margin.x), y = 40 }
|
||||
end
|
||||
|
||||
local totheight = (settings.icon and iconsize.height or 0) + (settings.label and labelsize.height or 0)
|
||||
if totheight == 0 then return end
|
||||
|
||||
if current_pos[s].y + totheight > screen[s].geometry.height - 40 then
|
||||
current_pos[s].x = current_pos[s].x - labelsize.width - iconsize.width - margin.x
|
||||
current_pos[s].y = 40
|
||||
end
|
||||
|
||||
if (settings.icon) then
|
||||
icon = awful.widget.button({ image = settings.icon })
|
||||
local newbuttons = icon:buttons()
|
||||
table.insert(newbuttons, button({}, 1, nil, settings.click));
|
||||
icon:buttons(newbuttons)
|
||||
|
||||
icon_container = wibox({ position = "floating", screen = s, bg = "#00000000" })
|
||||
icon_container.widgets = { icon }
|
||||
icon_container:geometry({
|
||||
width = iconsize.width,
|
||||
height = iconsize.height,
|
||||
y = current_pos[s].y,
|
||||
x = current_pos[s].x
|
||||
})
|
||||
icon_container.screen = s
|
||||
|
||||
current_pos[s].y = current_pos[s].y + iconsize.height + 5
|
||||
end
|
||||
|
||||
if (settings.label) then
|
||||
caption = wibox.widget.textbox()
|
||||
caption.ellipsize = "middle"
|
||||
caption.text = settings.label
|
||||
caption:buttons({
|
||||
button({ }, 1, settings.click)
|
||||
})
|
||||
|
||||
caption_container = wibox({ position = "floating", screen = s, bg = "#00000000" })
|
||||
caption_container.widgets = { caption }
|
||||
caption_container:geometry({
|
||||
width = labelsize.width,
|
||||
height = labelsize.height,
|
||||
y = current_pos[s].y,
|
||||
x = current_pos[s].x - labelsize.width + iconsize.width
|
||||
})
|
||||
caption_container.screen = s
|
||||
end
|
||||
|
||||
current_pos[s].y = current_pos[s].y + labelsize.height + margin.y
|
||||
end
|
||||
|
||||
--- Adds subdirs and files icons to the desktop
|
||||
-- @param dir The directory to parse, (default is ~/Desktop)
|
||||
-- @param showlabels Shows icon captions (default is false)
|
||||
function add_applications_icons(arg)
|
||||
for i, program in ipairs(utils.parse_desktop_files({
|
||||
dir = arg.dir or '~/Desktop/',
|
||||
icon_sizes = {
|
||||
iconsize.width .. "x" .. iconsize.height,
|
||||
"128x128", "96x96", "72x72", "64x64", "48x48",
|
||||
"36x36", "32x32", "24x24", "22x22", "16x6"
|
||||
}
|
||||
})) do
|
||||
if program.show then
|
||||
add_icon({
|
||||
label = arg.showlabels and program.Name or nil,
|
||||
icon = program.icon_path,
|
||||
screen = arg.screen,
|
||||
click = function () awful.util.spawn(program.cmdline) end
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Adds subdirs and files icons to the desktop
|
||||
-- @param dir The directory to parse
|
||||
-- @param showlabels Shows icon captions
|
||||
-- @param open_with The program to use to open clicked files and dirs (i.e. xdg_open, thunar, etc.)
|
||||
function add_dirs_and_files_icons(arg)
|
||||
arg.open_with = arg.open_width or 'thunar'
|
||||
for i, file in ipairs(utils.parse_dirs_and_files({
|
||||
dir = arg.dir or '~/Desktop/',
|
||||
icon_sizes = {
|
||||
iconsize.width .. "x" .. iconsize.height,
|
||||
"128x128", "96x96", "72x72", "64x64", "48x48",
|
||||
"36x36", "32x32", "24x24", "22x22", "16x6"
|
||||
}
|
||||
})) do
|
||||
if file.show then
|
||||
add_icon({
|
||||
label = arg.showlabels and file.filename or nil,
|
||||
icon = file.icon,
|
||||
screen = arg.screen,
|
||||
click = function () awful.util.spawn(arg.open_with .. ' ' .. file.path) end
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function add_desktop_icons(args)
|
||||
add_applications_icons(args)
|
||||
add_dirs_and_files_icons(args)
|
||||
end
|
|
@ -0,0 +1,38 @@
|
|||
-- This is an usage example
|
||||
-- Modify according to your preferences
|
||||
|
||||
-- If you are a Debian user, you can also uncomment the two lines that insert
|
||||
-- the Debian menu together with the rest of the items.
|
||||
|
||||
local awful = require("awful")
|
||||
local beautiful = require("beautiful")
|
||||
|
||||
require('freedesktop.utils')
|
||||
require('freedesktop.menu')
|
||||
require('freedesktop.desktop')
|
||||
-- require("debian.menu")
|
||||
|
||||
freedesktop.utils.terminal = terminal
|
||||
freedesktop.utils.icon_theme = 'gnome' -- look inside /usr/share/icons/, default: nil (don't use icon theme)
|
||||
|
||||
menu_items = freedesktop.menu.new()
|
||||
|
||||
myawesomemenu = {
|
||||
{ "manual", terminal .. " -e man awesome", freedesktop.utils.lookup_icon({ icon = 'help' }) },
|
||||
{ "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua", freedesktop.utils.lookup_icon({ icon = 'package_settings' }) },
|
||||
{ "restart", awesome.restart, freedesktop.utils.lookup_icon({ icon = 'gtk-refresh' }) },
|
||||
{ "quit", awesome.quit, freedesktop.utils.lookup_icon({ icon = 'gtk-quit' }) }
|
||||
}
|
||||
|
||||
for s = 1, screen.count() do
|
||||
freedesktop.desktop.add_applications_icons({screen = s, showlabels = true})
|
||||
freedesktop.desktop.add_dirs_and_files_icons({screen = s, showlabels = true})
|
||||
end
|
||||
|
||||
table.insert(menu_items, { "awesome", myawesomemenu, beautiful.awesome_icon })
|
||||
table.insert(menu_items, { "open terminal", terminal, freedesktop.utils.lookup_icon({icon = 'terminal'}) })
|
||||
-- table.insert(menu_items, { "Debian", debian.menu.Debian_menu.Debian, freedesktop.utils.lookup_icon({ icon = 'debian-logo' }) })
|
||||
|
||||
mymainmenu = awful.menu.new({ items = menu_items, width = 200 })
|
||||
|
||||
mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon, menu = mymainmenu })
|
|
@ -0,0 +1,5 @@
|
|||
require("freedesktop.utils")
|
||||
require("freedesktop.desktop")
|
||||
require("freedesktop.menu")
|
||||
|
||||
module("freedesktop")
|
|
@ -0,0 +1,97 @@
|
|||
-- Grab environment
|
||||
local utils = require("freedesktop.utils")
|
||||
local io = io
|
||||
local string = string
|
||||
local table = table
|
||||
local os = os
|
||||
local ipairs = ipairs
|
||||
local pairs = pairs
|
||||
|
||||
module("freedesktop.menu")
|
||||
|
||||
all_menu_dirs = {
|
||||
'/usr/share/applications/',
|
||||
'/usr/local/share/applications/',
|
||||
'~/.local/share/applications/'
|
||||
}
|
||||
|
||||
show_generic_name = false
|
||||
|
||||
--- Create menus for applications
|
||||
-- @param menu_dirs A list of application directories (optional).
|
||||
-- @return A prepared menu w/ categories
|
||||
function new(arg)
|
||||
-- the categories and their synonyms where shamelessly copied from lxpanel
|
||||
-- source code.
|
||||
local programs = {}
|
||||
local config = arg or {}
|
||||
|
||||
programs['AudioVideo'] = {}
|
||||
programs['Development'] = {}
|
||||
programs['Education'] = {}
|
||||
programs['Game'] = {}
|
||||
programs['Graphics'] = {}
|
||||
programs['Network'] = {}
|
||||
programs['Office'] = {}
|
||||
programs['Settings'] = {}
|
||||
programs['System'] = {}
|
||||
programs['Utility'] = {}
|
||||
programs['Other'] = {}
|
||||
|
||||
for i, dir in ipairs(config.menu_dirs or all_menu_dirs) do
|
||||
local entries = utils.parse_desktop_files({dir = dir})
|
||||
for j, program in ipairs(entries) do
|
||||
-- check whether to include in the menu
|
||||
if program.show and program.Name and program.cmdline then
|
||||
if show_generic_name and program.GenericName then
|
||||
program.Name = program.Name .. ' (' .. program.GenericName .. ')'
|
||||
end
|
||||
local target_category = nil
|
||||
if program.categories then
|
||||
for _, category in ipairs(program.categories) do
|
||||
if programs[category] then
|
||||
target_category = category
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if not target_category then
|
||||
target_category = 'Other'
|
||||
end
|
||||
if target_category then
|
||||
table.insert(programs[target_category], { program.Name, program.cmdline, program.icon_path })
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- sort each submenu alphabetically case insensitive
|
||||
for k, v in pairs(programs) do
|
||||
table.sort(v, function(a, b) return a[1]:lower() < b[1]:lower() end)
|
||||
end
|
||||
|
||||
local menu = {
|
||||
{ "Accessories", programs["Utility"], utils.lookup_icon({ icon = 'applications-accessories.png' }) },
|
||||
{ "Development", programs["Development"], utils.lookup_icon({ icon = 'applications-development.png' }) },
|
||||
{ "Education", programs["Education"], utils.lookup_icon({ icon = 'applications-science.png' }) },
|
||||
{ "Games", programs["Game"], utils.lookup_icon({ icon = 'applications-games.png' }) },
|
||||
{ "Graphics", programs["Graphics"], utils.lookup_icon({ icon = 'applications-graphics.png' }) },
|
||||
{ "Internet", programs["Network"], utils.lookup_icon({ icon = 'applications-internet.png' }) },
|
||||
{ "Multimedia", programs["AudioVideo"], utils.lookup_icon({ icon = 'applications-multimedia.png' }) },
|
||||
{ "Office", programs["Office"], utils.lookup_icon({ icon = 'applications-office.png' }) },
|
||||
{ "Other", programs["Other"], utils.lookup_icon({ icon = 'applications-other.png' }) },
|
||||
{ "Settings", programs["Settings"], utils.lookup_icon({ icon = 'preferences-desktop.png' }) },
|
||||
{ "System Tools", programs["System"], utils.lookup_icon({ icon = 'applications-system.png' }) },
|
||||
}
|
||||
|
||||
-- Removing empty entries from menu
|
||||
local cleanedMenu = {}
|
||||
for index, item in ipairs(menu) do
|
||||
itemTester = item[2]
|
||||
if itemTester[1] then
|
||||
table.insert(cleanedMenu, item)
|
||||
end
|
||||
end
|
||||
|
||||
return cleanedMenu
|
||||
end
|
|
@ -0,0 +1,255 @@
|
|||
-- Grab environment
|
||||
|
||||
local io = io
|
||||
local os = os
|
||||
local table = table
|
||||
local type = type
|
||||
local ipairs = ipairs
|
||||
local pairs = pairs
|
||||
|
||||
module("freedesktop.utils")
|
||||
|
||||
terminal = 'xterm'
|
||||
|
||||
icon_theme = nil
|
||||
|
||||
all_icon_sizes = {
|
||||
'128x128',
|
||||
'96x96',
|
||||
'72x72',
|
||||
'64x64',
|
||||
'48x48',
|
||||
'36x36',
|
||||
'32x32',
|
||||
'24x24',
|
||||
'22x22',
|
||||
'16x16'
|
||||
}
|
||||
all_icon_types = {
|
||||
'apps',
|
||||
'actions',
|
||||
'devices',
|
||||
'places',
|
||||
'categories',
|
||||
'status',
|
||||
'mimetypes'
|
||||
}
|
||||
all_icon_paths = { os.getenv("HOME") .. '/.icons/', '/usr/share/icons/' }
|
||||
|
||||
icon_sizes = {}
|
||||
|
||||
local mime_types = {}
|
||||
|
||||
function get_lines(...)
|
||||
local f = io.popen(...)
|
||||
return function () -- iterator
|
||||
local data = f:read()
|
||||
if data == nil then f:close() end
|
||||
return data
|
||||
end
|
||||
end
|
||||
|
||||
function file_exists(filename)
|
||||
local file = io.open(filename, 'r')
|
||||
local result = (file ~= nil)
|
||||
if result then
|
||||
file:close()
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
function lookup_icon(arg)
|
||||
if arg.icon:sub(1, 1) == '/' and (arg.icon:find('.+%.png') or arg.icon:find('.+%.xpm')) then
|
||||
-- icons with absolute path and supported (AFAICT) formats
|
||||
return arg.icon
|
||||
else
|
||||
local icon_path = {}
|
||||
local icon_themes = {}
|
||||
local icon_theme_paths = {}
|
||||
if icon_theme and type(icon_theme) == 'table' then
|
||||
icon_themes = icon_theme
|
||||
elseif icon_theme then
|
||||
icon_themes = { icon_theme }
|
||||
end
|
||||
for i, theme in ipairs(icon_themes) do
|
||||
for j, path in ipairs(all_icon_paths) do
|
||||
table.insert(icon_theme_paths, path .. theme .. '/')
|
||||
end
|
||||
-- TODO also look in parent icon themes, as in freedesktop.org specification
|
||||
end
|
||||
table.insert(icon_theme_paths, '/usr/share/icons/hicolor/') -- fallback theme cf spec
|
||||
|
||||
local isizes = icon_sizes
|
||||
for i, sz in ipairs(all_icon_sizes) do
|
||||
table.insert(isizes, sz)
|
||||
end
|
||||
|
||||
for i, icon_theme_directory in ipairs(icon_theme_paths) do
|
||||
for j, size in ipairs(arg.icon_sizes or isizes) do
|
||||
for k, icon_type in ipairs(all_icon_types) do
|
||||
table.insert(icon_path, icon_theme_directory .. size .. '/' .. icon_type .. '/')
|
||||
end
|
||||
end
|
||||
end
|
||||
-- lowest priority fallbacks
|
||||
table.insert(icon_path, '/usr/share/pixmaps/')
|
||||
table.insert(icon_path, '/usr/share/icons/')
|
||||
table.insert(icon_path, '/usr/share/app-install/icons/')
|
||||
|
||||
for i, directory in ipairs(icon_path) do
|
||||
if (arg.icon:find('.+%.png') or arg.icon:find('.+%.xpm')) and file_exists(directory .. arg.icon) then
|
||||
return directory .. arg.icon
|
||||
elseif file_exists(directory .. arg.icon .. '.png') then
|
||||
return directory .. arg.icon .. '.png'
|
||||
elseif file_exists(directory .. arg.icon .. '.xpm') then
|
||||
return directory .. arg.icon .. '.xpm'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function lookup_file_icon(arg)
|
||||
load_mime_types()
|
||||
|
||||
local extension = arg.filename:match('%a+$')
|
||||
local mime = mime_types[extension] or ''
|
||||
local mime_family = mime:match('^%a+') or ''
|
||||
|
||||
-- possible icons in a typical gnome theme (i.e. Tango icons)
|
||||
local possible_filenames = {
|
||||
mime,
|
||||
'gnome-mime-' .. mime,
|
||||
mime_family,
|
||||
'gnome-mime-' .. mime_family,
|
||||
extension
|
||||
}
|
||||
|
||||
for i, filename in ipairs(possible_filenames) do
|
||||
local icon = lookup_icon({icon = filename, icon_sizes = (arg.icon_sizes or all_icon_sizes)})
|
||||
if icon then
|
||||
return icon
|
||||
end
|
||||
end
|
||||
|
||||
-- If we don't find ad icon, then pretend is a plain text file
|
||||
return lookup_icon({ icon = 'txt', icon_sizes = arg.icon_sizes or all_icon_sizes })
|
||||
end
|
||||
|
||||
--- Load system MIME types
|
||||
-- @return A table with file extension <--> MIME type mapping
|
||||
function load_mime_types()
|
||||
if #mime_types == 0 then
|
||||
for line in io.lines('/etc/mime.types') do
|
||||
if not line:find('^#') then
|
||||
local parsed = {}
|
||||
for w in line:gmatch('[^%s]+') do
|
||||
table.insert(parsed, w)
|
||||
end
|
||||
if #parsed > 1 then
|
||||
for i = 2, #parsed do
|
||||
mime_types[parsed[i]] = parsed[1]:gsub('/', '-')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Parse a .desktop file
|
||||
-- @param file The .desktop file
|
||||
-- @param requested_icon_sizes A list of icon sizes (optional). If this list is given, it will be used as a priority list for icon sizes when looking up for icons. If you want large icons, for example, you can put '128x128' as the first item in the list.
|
||||
-- @return A table with file entries.
|
||||
function parse_desktop_file(arg)
|
||||
local program = { show = true, file = arg.file }
|
||||
for line in io.lines(arg.file) do
|
||||
for key, value in line:gmatch("(%w+)=(.+)") do
|
||||
program[key] = value
|
||||
end
|
||||
end
|
||||
|
||||
-- Don't show the program if NoDisplay is true
|
||||
-- Only show the program if there is not OnlyShowIn attribute
|
||||
-- or if it's equal to 'awesome'
|
||||
if program.NoDisplay == "true" or program.OnlyShowIn ~= nil and program.OnlyShowIn ~= "awesome" then
|
||||
program.show = false
|
||||
end
|
||||
|
||||
-- Look up for a icon.
|
||||
if program.Icon then
|
||||
program.icon_path = lookup_icon({ icon = program.Icon, icon_sizes = (arg.icon_sizes or all_icon_sizes) })
|
||||
if program.icon_path ~= nil and not file_exists(program.icon_path) then
|
||||
program.icon_path = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- Split categories into a table.
|
||||
if program.Categories then
|
||||
program.categories = {}
|
||||
for category in program.Categories:gmatch('[^;]+') do
|
||||
table.insert(program.categories, category)
|
||||
end
|
||||
end
|
||||
|
||||
if program.Exec then
|
||||
local cmdline = program.Exec:gsub('%%c', program.Name)
|
||||
cmdline = cmdline:gsub('%%[fmuFMU]', '')
|
||||
cmdline = cmdline:gsub('%%k', program.file)
|
||||
if program.icon_path then
|
||||
cmdline = cmdline:gsub('%%i', '--icon ' .. program.icon_path)
|
||||
else
|
||||
cmdline = cmdline:gsub('%%i', '')
|
||||
end
|
||||
if program.Terminal == "true" then
|
||||
cmdline = terminal .. ' -e ' .. cmdline
|
||||
end
|
||||
program.cmdline = cmdline
|
||||
end
|
||||
|
||||
return program
|
||||
end
|
||||
|
||||
--- Parse a directory with .desktop files
|
||||
-- @param dir The directory.
|
||||
-- @param icons_size, The icons sizes, optional.
|
||||
-- @return A table with all .desktop entries.
|
||||
function parse_desktop_files(arg)
|
||||
local programs = {}
|
||||
local files = get_lines('find '.. arg.dir ..' -name "*.desktop" 2>/dev/null')
|
||||
for file in files do
|
||||
arg.file = file
|
||||
table.insert(programs, parse_desktop_file(arg))
|
||||
end
|
||||
return programs
|
||||
end
|
||||
|
||||
--- Parse a directory files and subdirs
|
||||
-- @param dir The directory.
|
||||
-- @param icons_size, The icons sizes, optional.
|
||||
-- @return A table with all .desktop entries.
|
||||
function parse_dirs_and_files(arg)
|
||||
local files = {}
|
||||
local paths = get_lines('find '..arg.dir..' -maxdepth 1 -type d')
|
||||
for path in paths do
|
||||
if path:match("[^/]+$") then
|
||||
local file = {}
|
||||
file.filename = path:match("[^/]+$")
|
||||
file.path = path
|
||||
file.show = true
|
||||
file.icon = lookup_icon({ icon = "folder", icon_sizes = (arg.icon_sizes or all_icon_sizes) })
|
||||
table.insert(files, file)
|
||||
end
|
||||
end
|
||||
local paths = get_lines('find '..arg.dir..' -maxdepth 1 -type f')
|
||||
for path in paths do
|
||||
if not path:find("%.desktop$") then
|
||||
local file = {}
|
||||
file.filename = path:match("[^/]+$")
|
||||
file.path = path
|
||||
file.show = true
|
||||
file.icon = lookup_file_icon({ filename = file.filename, icon_sizes = (arg.icon_sizes or all_icon_sizes) })
|
||||
table.insert(files, file)
|
||||
end
|
||||
end
|
||||
return files
|
||||
end
|
||||
|
|
@ -129,35 +129,11 @@ end
|
|||
|
||||
-- }}}
|
||||
|
||||
-- {{{ Menu
|
||||
myaccessories = {
|
||||
{ "archives", "7zFM" },
|
||||
{ "charmap", "gucharmap" },
|
||||
{ "gbdfed", "gbdfed" },
|
||||
{ "gimp", "gimp" },
|
||||
{ "text editor", gui_editor },
|
||||
}
|
||||
myinternet = {
|
||||
{ "torrent" , "transmission-gtk" },
|
||||
{ "torrent search" , "torrent-search" }
|
||||
}
|
||||
myoffice = {
|
||||
{ "writer" , "lowriter" },
|
||||
{ "impress" , "loimpress" },
|
||||
}
|
||||
mysystem = {
|
||||
{ "appearance" , "lxappearance" },
|
||||
{ "cleaning" , "bleachbit" },
|
||||
{ "powertop" , terminal .. " -e sudo powertop " },
|
||||
}
|
||||
mymainmenu = awful.menu({ items = {
|
||||
{ "accessories" , myaccessories },
|
||||
{ "internet" , myinternet },
|
||||
{ "office" , myoffice },
|
||||
{ "system" , mysystem },
|
||||
}
|
||||
})
|
||||
mylauncher = awful.widget.launcher({ menu = mymainmenu })
|
||||
-- {{{ Freedesktop Menu
|
||||
|
||||
require("freedesktop/freedesktop")
|
||||
|
||||
-- }}}
|
||||
|
||||
-- }}}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
--[[ ]]--
|
||||
|
||||
|
||||
-- Required Libraries
|
||||
-- {{{ Required Libraries
|
||||
|
||||
local gears = require("gears")
|
||||
local awful = require("awful")
|
||||
|
@ -20,7 +20,9 @@ local scratch = require("scratch")
|
|||
local yawn = require("yawn")
|
||||
local layouts = require("layouts")
|
||||
|
||||
-- Run once function
|
||||
-- }}}
|
||||
|
||||
-- {{{ Autostart programs
|
||||
|
||||
function run_once(cmd)
|
||||
findme = cmd
|
||||
|
@ -31,17 +33,19 @@ function run_once(cmd)
|
|||
awful.util.spawn_with_shell("pgrep -u $USER -x " .. findme .. " > /dev/null || (" .. cmd .. ")")
|
||||
end
|
||||
|
||||
-- autostart applications
|
||||
run_once("urxvtd")
|
||||
run_once("unclutter -idle 10")
|
||||
run_once("compton")
|
||||
|
||||
-- Localization
|
||||
-- }}}
|
||||
|
||||
-- {{{ Localization
|
||||
|
||||
os.setlocale(os.getenv("LANG"))
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Error Handling
|
||||
-- {{{ Error Handling
|
||||
|
||||
-- Check if awesome encountered an error during startup and fell back to
|
||||
-- another config (This code will only ever execute for the fallback config)
|
||||
|
@ -66,8 +70,9 @@ do
|
|||
end)
|
||||
end
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Global variables
|
||||
-- {{{ Global variables
|
||||
|
||||
home = os.getenv("HOME")
|
||||
confdir = home .. "/.config/awesome"
|
||||
|
@ -102,8 +107,9 @@ layouts =
|
|||
layouts.tilegaps, -- 6
|
||||
}
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Wallpaper
|
||||
-- {{{ Wallpaper
|
||||
|
||||
if beautiful.wallpaper then
|
||||
for s = 1, screen.count() do
|
||||
|
@ -111,7 +117,9 @@ if beautiful.wallpaper then
|
|||
end
|
||||
end
|
||||
|
||||
-- Tags
|
||||
-- }}}
|
||||
|
||||
-- {{{ Tags
|
||||
|
||||
tags = {
|
||||
names = { "ƀ", "Ƅ", "Ɗ", "ƈ", "ƙ" },
|
||||
|
@ -121,38 +129,15 @@ for s = 1, screen.count() do
|
|||
tags[s] = awful.tag(tags.names, s, tags.layout)
|
||||
end
|
||||
|
||||
-- Menu
|
||||
myaccessories = {
|
||||
{ "archives", "7zFM" },
|
||||
{ "charmap", "gucharmap" },
|
||||
{ "gbdfed", "gbdfed" },
|
||||
{ "gimp", "gimp" },
|
||||
{ "text editor", gui_editor },
|
||||
}
|
||||
myinternet = {
|
||||
{ "torrent" , "transmission-gtk" },
|
||||
{ "torrent search" , "torrent-search" }
|
||||
}
|
||||
myoffice = {
|
||||
{ "writer" , "lowriter" },
|
||||
{ "impress" , "loimpress" },
|
||||
}
|
||||
mysystem = {
|
||||
{ "appearance" , "lxappearance" },
|
||||
{ "cleaning" , "bleachbit" },
|
||||
{ "powertop" , terminal .. " -e sudo powertop " },
|
||||
}
|
||||
mymainmenu = awful.menu({ items = {
|
||||
{ "accessories" , myaccessories },
|
||||
{ "internet" , myinternet },
|
||||
{ "office" , myoffice },
|
||||
{ "system" , mysystem },
|
||||
}
|
||||
})
|
||||
mylauncher = awful.widget.launcher({ menu = mymainmenu })
|
||||
-- }}}
|
||||
|
||||
-- {{{ Freedesktop menu
|
||||
|
||||
-- Wibox
|
||||
require("freedesktop/freedesktop")
|
||||
|
||||
-- }}}
|
||||
|
||||
-- {{{ Wibox
|
||||
|
||||
-- awful.util
|
||||
local util = awful.util
|
||||
|
@ -468,8 +453,9 @@ arrl_pre:set_image(beautiful.arrl_lr_pre)
|
|||
arrl_post = wibox.widget.imagebox()
|
||||
arrl_post:set_image(beautiful.arrl_lr_post)
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Layout
|
||||
-- {{{ Layout
|
||||
|
||||
-- Create a wibox for each screen and add it
|
||||
mywibox = {}
|
||||
|
@ -576,7 +562,9 @@ for s = 1, screen.count() do
|
|||
|
||||
end
|
||||
|
||||
-- Mouse Bindings
|
||||
-- }}}
|
||||
|
||||
-- {{{ Mouse Bindings
|
||||
|
||||
root.buttons(awful.util.table.join(
|
||||
awful.button({ }, 3, function () mymainmenu:toggle() end),
|
||||
|
@ -584,8 +572,9 @@ root.buttons(awful.util.table.join(
|
|||
awful.button({ }, 5, awful.tag.viewprev)
|
||||
))
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Key bindings
|
||||
-- {{{ Key bindings
|
||||
globalkeys = awful.util.table.join(
|
||||
|
||||
-- Capture a screenshot
|
||||
|
@ -733,7 +722,6 @@ clientkeys = awful.util.table.join(
|
|||
end)
|
||||
)
|
||||
|
||||
|
||||
-- Compute the maximum number of digit we need, limited to 9
|
||||
keynumber = 0
|
||||
for s = 1, screen.count() do
|
||||
|
@ -781,8 +769,9 @@ clientbuttons = awful.util.table.join(
|
|||
-- Set keys
|
||||
root.keys(globalkeys)
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Rules
|
||||
-- {{{ Rules
|
||||
|
||||
awful.rules.rules = {
|
||||
-- All clients will match this rule.
|
||||
|
@ -819,8 +808,9 @@ awful.rules.rules = {
|
|||
properties = { tag = tags[1][5] } },
|
||||
}
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Signals
|
||||
-- {{{ Signals
|
||||
|
||||
-- Signal function to execute when a new client appears.
|
||||
client.connect_signal("manage", function (c, startup)
|
||||
|
@ -892,3 +882,5 @@ 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)
|
||||
|
||||
-- }}}
|
||||
|
|
31
rc.lua.holo
31
rc.lua.holo
|
@ -129,36 +129,9 @@ end
|
|||
|
||||
-- }}}
|
||||
|
||||
-- {{{ Menu
|
||||
-- {{{ Freedesktop menu
|
||||
|
||||
myaccessories = {
|
||||
{ "archives", "7zFM" },
|
||||
{ "charmap", "gucharmap" },
|
||||
{ "gbdfed", "gbdfed" },
|
||||
{ "gimp", "gimp" },
|
||||
{ "text editor", gui_editor },
|
||||
}
|
||||
myinternet = {
|
||||
{ "torrent" , "transmission-gtk" },
|
||||
{ "torrent search" , "torrent-search" }
|
||||
}
|
||||
myoffice = {
|
||||
{ "writer" , "lowriter" },
|
||||
{ "impress" , "loimpress" },
|
||||
}
|
||||
mysystem = {
|
||||
{ "appearance" , "lxappearance" },
|
||||
{ "cleaning" , "bleachbit" },
|
||||
{ "powertop" , terminal .. " -e sudo powertop " },
|
||||
}
|
||||
mymainmenu = awful.menu({ items = {
|
||||
{ "accessories" , myaccessories },
|
||||
{ "internet" , myinternet },
|
||||
{ "office" , myoffice },
|
||||
{ "system" , mysystem },
|
||||
}
|
||||
})
|
||||
mylauncher = awful.widget.launcher({ menu = mymainmenu })
|
||||
require("freedesktop/freedesktop")
|
||||
|
||||
-- }}}
|
||||
|
||||
|
|
|
@ -139,52 +139,13 @@ for s = 1, screen.count() do
|
|||
-- Each screen has its own tag table.
|
||||
tags[s] = awful.tag(tags.names, s, tags.layout)
|
||||
end
|
||||
|
||||
-- }}}
|
||||
|
||||
-- {{{ Menu
|
||||
myaccessories = {
|
||||
{ "archives", "7zFM" },
|
||||
{ "file manager", "spacefm" },
|
||||
{ "editor", gui_editor },
|
||||
}
|
||||
myinternet = {
|
||||
{ "browser", browser },
|
||||
{ "irc client" , chat },
|
||||
{ "torrent" , "rtorrent" },
|
||||
{ "torrtux" , terminal .. " -e torrtux " },
|
||||
{ "torrent search" , "torrent-search" }
|
||||
}
|
||||
mygames = {
|
||||
{ "NES", "fceux" },
|
||||
{ "Super NES", "zsnes" },
|
||||
}
|
||||
mygraphics = {
|
||||
{ "gimp" , "gimp" },
|
||||
{ "inkscape", "inkscape" },
|
||||
{ "dia", "dia" },
|
||||
{ "image viewer" , "viewnior" }
|
||||
}
|
||||
myoffice = {
|
||||
{ "writer" , "lowriter" },
|
||||
{ "impress" , "loimpress" }
|
||||
}
|
||||
mysystem = {
|
||||
{ "appearance" , "lxappearance" },
|
||||
{ "cleaning" , "bleachbit" },
|
||||
{ "powertop" , terminal .. " -e sudo powertop " },
|
||||
{ "task manager" , tasks }
|
||||
}
|
||||
mymainmenu = awful.menu({ items = {
|
||||
{ "accessories" , myaccessories },
|
||||
{ "graphics" , mygraphics },
|
||||
{ "internet" , myinternet },
|
||||
{ "games" , mygames },
|
||||
{ "office" , myoffice },
|
||||
{ "system" , mysystem },
|
||||
}
|
||||
})
|
||||
mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
|
||||
menu = mymainmenu })
|
||||
-- {{{ Freedesktop Menu
|
||||
|
||||
require("freedesktop/freedesktop")
|
||||
|
||||
-- }}}
|
||||
|
||||
-- {{{ Wibox
|
||||
|
@ -694,6 +655,7 @@ end
|
|||
-- {{{ Mouse Bindings
|
||||
|
||||
root.buttons(awful.util.table.join(
|
||||
awful.button({ }, 3, function () mymainmenu:toggle() end),
|
||||
awful.button({ }, 4, awful.tag.viewnext),
|
||||
awful.button({ }, 5, awful.tag.viewprev)
|
||||
))
|
||||
|
@ -701,6 +663,7 @@ root.buttons(awful.util.table.join(
|
|||
-- }}}
|
||||
|
||||
-- {{{ Key bindings
|
||||
|
||||
globalkeys = awful.util.table.join(
|
||||
|
||||
-- Capture a screenshot
|
||||
|
|
|
@ -143,52 +143,13 @@ for s = 1, screen.count() do
|
|||
-- Each screen has its own tag table.
|
||||
tags[s] = awful.tag(tags.names, s, tags.layout)
|
||||
end
|
||||
|
||||
-- }}}
|
||||
|
||||
-- {{{ Menu
|
||||
myaccessories = {
|
||||
{ "archives", "7zFM" },
|
||||
{ "file manager", "spacefm" },
|
||||
{ "editor", gui_editor },
|
||||
}
|
||||
myinternet = {
|
||||
{ "browser", browser },
|
||||
{ "irc client" , chat },
|
||||
{ "torrent" , "rtorrent" },
|
||||
{ "torrtux" , terminal .. " -e torrtux " },
|
||||
{ "torrent search" , "torrent-search" }
|
||||
}
|
||||
mygames = {
|
||||
{ "NES", "fceux" },
|
||||
{ "Super NES", "zsnes" },
|
||||
}
|
||||
mygraphics = {
|
||||
{ "gimp" , "gimp" },
|
||||
{ "inkscape", "inkscape" },
|
||||
{ "dia", "dia" },
|
||||
{ "image viewer" , "viewnior" }
|
||||
}
|
||||
myoffice = {
|
||||
{ "writer" , "lowriter" },
|
||||
{ "impress" , "loimpress" },
|
||||
}
|
||||
mysystem = {
|
||||
{ "appearance" , "lxappearance" },
|
||||
{ "cleaning" , "bleachbit" },
|
||||
{ "powertop" , terminal .. " -e sudo powertop " },
|
||||
{ "task manager" , tasks }
|
||||
}
|
||||
mymainmenu = awful.menu({ items = {
|
||||
{ "accessories" , myaccessories },
|
||||
{ "graphics" , mygraphics },
|
||||
{ "internet" , myinternet },
|
||||
{ "games" , mygames },
|
||||
{ "office" , myoffice },
|
||||
{ "system" , mysystem },
|
||||
}
|
||||
})
|
||||
mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
|
||||
menu = mymainmenu })
|
||||
-- {{{ Freedesktop menu
|
||||
|
||||
require("freedesktop/freedesktop")
|
||||
|
||||
-- }}}
|
||||
|
||||
-- {{{ Wibox
|
||||
|
@ -665,6 +626,7 @@ end
|
|||
-- {{{ Mouse Bindings
|
||||
|
||||
root.buttons(awful.util.table.join(
|
||||
awful.button({ }, 3, function () mymainmenu:toggle() end),
|
||||
awful.button({ }, 4, awful.tag.viewnext),
|
||||
awful.button({ }, 5, awful.tag.viewprev)
|
||||
))
|
||||
|
@ -672,6 +634,7 @@ root.buttons(awful.util.table.join(
|
|||
-- }}}
|
||||
|
||||
-- {{{ Key bindings
|
||||
|
||||
globalkeys = awful.util.table.join(
|
||||
|
||||
-- Capture a screenshot
|
||||
|
@ -990,3 +953,4 @@ client.connect_signal("focus", function(c) c.border_color = beautiful.border_foc
|
|||
client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
|
||||
|
||||
-- }}}
|
||||
|
||||
|
|
|
@ -135,6 +135,7 @@ end
|
|||
|
||||
-- {{{ Menu
|
||||
|
||||
-- my current menu
|
||||
myaccessories = {
|
||||
{ "archives", "7zFM" },
|
||||
{ "charmap", "gucharmap" },
|
||||
|
@ -164,6 +165,9 @@ mymainmenu = awful.menu({ items = {
|
|||
})
|
||||
mylauncher = awful.widget.launcher({ menu = mymainmenu })
|
||||
|
||||
-- if you prefer freedesktop, uncomment the following line
|
||||
require("freedesktop/freedesktop")
|
||||
|
||||
-- }}}
|
||||
|
||||
-- {{{ Wibox
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
--[[ ]]--
|
||||
|
||||
|
||||
-- Required Libraries
|
||||
-- {{{ Required Libraries
|
||||
|
||||
gears = require("gears")
|
||||
awful = require("awful")
|
||||
|
@ -19,8 +19,9 @@ vicious = require("vicious")
|
|||
scratch = require("scratch")
|
||||
layouts = require("layouts")
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Run once function
|
||||
-- {{{ Autostart applications
|
||||
|
||||
function run_once(cmd)
|
||||
findme = cmd
|
||||
|
@ -31,17 +32,18 @@ function run_once(cmd)
|
|||
awful.util.spawn_with_shell("pgrep -u $USER -x " .. findme .. " > /dev/null || (" .. cmd .. ")")
|
||||
end
|
||||
|
||||
-- autostart applications
|
||||
run_once("urxvtd")
|
||||
run_once("unclutter -idle 10")
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Localization
|
||||
-- {{{ Localization
|
||||
|
||||
os.setlocale(os.getenv("LANG"))
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Error Handling
|
||||
-- {{{ Error Handling
|
||||
|
||||
-- Check if awesome encountered an error during startup and fell back to
|
||||
-- another config (This code will only ever execute for the fallback config)
|
||||
|
@ -66,8 +68,9 @@ do
|
|||
end)
|
||||
end
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Variable Definitions
|
||||
-- {{{ Variable Definitions
|
||||
|
||||
home = os.getenv("HOME")
|
||||
confdir = home .. "/.config/awesome"
|
||||
|
@ -109,8 +112,9 @@ layouts =
|
|||
layouts.tilegaps, -- 13
|
||||
}
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Wallpaper
|
||||
-- {{{ Wallpaper
|
||||
|
||||
if beautiful.wallpaper then
|
||||
for s = 1, screen.count() do
|
||||
|
@ -118,7 +122,9 @@ if beautiful.wallpaper then
|
|||
end
|
||||
end
|
||||
|
||||
-- Tags
|
||||
-- }}}
|
||||
|
||||
-- {{{ Tags
|
||||
|
||||
tags = {
|
||||
names = { "web", "term", "docs", "media", "down"},
|
||||
|
@ -128,53 +134,15 @@ for s = 1, screen.count() do
|
|||
tags[s] = awful.tag(tags.names, s, tags.layout)
|
||||
end
|
||||
|
||||
-- Menu
|
||||
myaccessories = {
|
||||
{ "archives", "7zFM" },
|
||||
{ "file manager", "spacefm" },
|
||||
{ "editor", gui_editor },
|
||||
}
|
||||
myinternet = {
|
||||
{ "browser", browser },
|
||||
{ "irc client" , chat },
|
||||
{ "torrent" , "rtorrent" },
|
||||
{ "torrtux" , terminal .. " -e torrtux " },
|
||||
{ "torrent search" , "torrent-search" }
|
||||
}
|
||||
mygames = {
|
||||
{ "NES", "fceux" },
|
||||
{ "Super NES", "zsnes" },
|
||||
}
|
||||
mygraphics = {
|
||||
{ "gimp" , "gimp" },
|
||||
{ "inkscape", "inkscape" },
|
||||
{ "dia", "dia" },
|
||||
{ "image viewer" , "viewnior" }
|
||||
}
|
||||
myoffice = {
|
||||
{ "writer" , "lowriter" },
|
||||
{ "impress" , "loimpress" },
|
||||
}
|
||||
mysystem = {
|
||||
{ "appearance" , "lxappearance" },
|
||||
{ "cleaning" , "bleachbit" },
|
||||
{ "powertop" , terminal .. " -e sudo powertop " },
|
||||
{ "task manager" , tasks }
|
||||
}
|
||||
mymainmenu = awful.menu({ items = {
|
||||
{ "accessories" , myaccessories },
|
||||
{ "graphics" , mygraphics },
|
||||
{ "internet" , myinternet },
|
||||
{ "games" , mygames },
|
||||
{ "office" , myoffice },
|
||||
{ "system" , mysystem },
|
||||
}
|
||||
})
|
||||
mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
|
||||
menu = mymainmenu })
|
||||
-- }}}
|
||||
|
||||
-- {{{ Freedesktop menu
|
||||
|
||||
-- Wibox
|
||||
require("freedesktop/freedesktop")
|
||||
|
||||
-- }}}
|
||||
|
||||
-- {{{ Wibox
|
||||
|
||||
-- Colours
|
||||
coldef = "</span>"
|
||||
|
@ -509,8 +477,9 @@ spr = wibox.widget.textbox(' ')
|
|||
leftbr = wibox.widget.textbox(' [')
|
||||
rightbr = wibox.widget.textbox('] ')
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Layout
|
||||
-- {{{ Layout
|
||||
|
||||
-- Create a wibox for each screen and add it
|
||||
mywibox = {}
|
||||
|
@ -627,7 +596,9 @@ for s = 1, screen.count() do
|
|||
|
||||
end
|
||||
|
||||
-- Mouse Bindings
|
||||
-- }}}
|
||||
|
||||
-- {{{ Mouse Bindings
|
||||
|
||||
root.buttons(awful.util.table.join(
|
||||
awful.button({ }, 3, function () mymainmenu:toggle() end),
|
||||
|
@ -635,8 +606,10 @@ root.buttons(awful.util.table.join(
|
|||
awful.button({ }, 5, awful.tag.viewprev)
|
||||
))
|
||||
|
||||
-- }}}
|
||||
|
||||
-- {{{ Key bindings
|
||||
|
||||
-- Key bindings
|
||||
globalkeys = awful.util.table.join(
|
||||
|
||||
-- Capture a screenshot
|
||||
|
@ -828,8 +801,9 @@ clientbuttons = awful.util.table.join(
|
|||
-- Set keys
|
||||
root.keys(globalkeys)
|
||||
|
||||
-- }}}
|
||||
|
||||
-- Rules
|
||||
-- {{{ Rules
|
||||
|
||||
awful.rules.rules = {
|
||||
-- All clients will match this rule.
|
||||
|
@ -951,3 +925,5 @@ 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)
|
||||
|
||||
-- }}}
|
||||
|
|
Loading…
Reference in New Issue