aboutsummaryrefslogtreecommitdiff
path: root/.config/awesome/rc.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/awesome/rc.lua')
-rwxr-xr-x.config/awesome/rc.lua911
1 files changed, 911 insertions, 0 deletions
diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua
new file mode 100755
index 0000000..132d702
--- /dev/null
+++ b/.config/awesome/rc.lua
@@ -0,0 +1,911 @@
+-- ██
+-- ░██ a w e s o m e ██
+-- ░██ ░██
+-- █████ ░██████ ██████ ██████ ██████
+-- ██░░░██░██░░░██ ██░░░░██ ██░░░░ ░░░██░
+-- ██░░░██░██ ░██░██ ░██░░█████ ░██
+-- ░██ ░██░██ ░██░██ ░██ ░░░░░██ ░██ ▄▄▄
+-- ░░██████░██ ░██░░██████ ██████ ░░██ ▀█▀██ ▄
+-- ░░░░░██░░ ░░ ░░░░░░ ░░░░░░ ░░ ▀▄██████▀
+-- █████ ▀█████
+-- ░░░░░ ▓▓▓▓▓▓▓▓▓▓ ▀▀██▄
+-- ░▓ author ▓ xero <x@xero.nu> ▀
+-- ░▓ code ▓ http://code.xero.nu/dotfiles
+-- ░▓ mirror ▓ http://git.io/.files
+-- ░▓▓▓▓▓▓▓▓▓▓
+-- ░░░░░░░░░░
+
+-- █▓▒░ libraries
+gears = require("gears")
+awful = require("awful")
+awful.rules = require("awful.rules")
+require("awful.autofocus")
+wibox = require("wibox")
+beautiful = require("beautiful")
+naughty = require("naughty")
+lain = require("lain")
+
+-- █▓▒░ error handling
+if awesome.startup_errors then
+ naughty.notify({
+ preset = naughty.config.presets.critical,
+ title = "#@*! startup errors!",
+ text = awesome.startup_errors
+ })
+end
+do
+ local in_error = false
+ awesome.connect_signal("debug::error", function (err)
+ if in_error then return end
+ in_error = true
+ naughty.notify({
+ preset = naughty.config.presets.critical,
+ title = "#@*! an error occured!",
+ text = err
+ })
+ in_error = false
+ end)
+end
+
+-- █▓▒░ variables
+home = os.getenv("HOME")
+config_dir = awful.util.getdir("config")
+
+-- █▓▒░ user config
+print(os.time().." : load config")
+dofile(home.."/.config/awesome/config.lua")
+
+-- █▓▒░ autostart applications
+function run_once(cmd)
+ findme = cmd
+ firstspace = cmd:find(" ")
+ if firstspace then
+ findme = cmd:sub(0, firstspace-1)
+ end
+ awful.util.spawn_with_shell("pgrep -u $USER -x " .. findme .. " > /dev/null || (" .. cmd .. ")")
+end
+
+run_once("urxvtd")
+run_once("unclutter")
+
+-- █▓▒░ theme
+beautiful.init(os.getenv("HOME") .. "/.config/awesome/themes/ghost/theme.lua")
+
+-- █▓▒░ layouts
+local layouts = {
+ -- awful layouts
+ -- awful.layout.suit.floating,
+ -- awful.layout.suit.tile,
+ -- awful.layout.suit.tile.left,
+ -- awful.layout.suit.tile.bottom,
+ -- awful.layout.suit.tile.top,
+ -- awful.layout.suit.fair,
+ -- awful.layout.suit.fair.horizontal,
+ -- awful.layout.suit.spiral,
+ -- awful.layout.suit.spiral.dwindle,
+ -- awful.layout.suit.max,
+ -- awful.layout.suit.max.fullscreen,
+ -- awful.layout.suit.magnifier,
+ -- lain layouts
+ awful.layout.suit.floating,
+ lain.layout.uselesstile,
+ lain.layout.uselesstile.left,
+ lain.layout.uselesstile.top,
+ lain.layout.uselesstile.bottom,
+ lain.layout.uselessfair,
+ lain.layout.uselessfair.horizontal,
+ lain.layout.termfair,
+ lain.layout.centerfair,
+ lain.layout.centerwork,
+ lain.layout.uselesspiral,
+ lain.layout.uselesspiral.dwindle,
+ awful.layout.suit.max.fullscreen,
+ awful.layout.suit.magnifier
+}
+
+-- █▓▒░ tag list
+tags = {
+ names = {},
+ layout = {}
+}
+for i = 1, 4 do
+ tags.names[i] = tag_icon
+ tags.layout[i] = layouts[1]
+end
+for s = 1, screen.count() do
+ tags[s] = awful.tag(tags.names, s, tags.layout)
+end
+
+-- █▓▒░ wallpaper
+if beautiful.wallpaper then
+ for s = 1, screen.count() do
+ gears.wallpaper.maximized(beautiful.wallpaper, s, true)
+ end
+end
+
+-- █▓▒░ menu
+awesomemenu = {
+ {"░░▒▒▓▓███▓▓▒▒░░"},
+ {"edit lua files :"},
+ {"rc", editor_cmd.." "..home.."/.config/awesome/rc.lua"},
+ {"config", editor_cmd.." "..home.."/.config/awesome/config.lua"},
+ {"theme", editor_cmd.." "..home.."/.config/awesome/themes/ghost/theme.lua"},
+ {"░░▒▒▓▓███▓▓▒▒░░"},
+ {"reload", awesome.restart},
+ {"exit", awesome.quit},
+ {"showdown", "cb-exit"}
+}
+gfx_settings = {
+ {"view","bash "..home.."/code/bash/gfx-status.sh"},
+ {"░░▒▒▓▓████▓▓▒▒░░"},
+ {"switch to ati","bash "..home.."/code/bash/gfx-radeon.sh"},
+ {"switch to intel","bash "..home.."/code/bash/gfx-intel.sh"},
+ {"power off unused","bash "..home.."/code/bash/gfx-off.sh"},
+ {"power on unused","bash "..home.."/code/bash/gfx-on.sh"},
+}
+prefs = {
+ {"awesome", awesomemenu, beautiful.awesome_icon},
+ {"~.xinitrc", editor_cmd.." .xinitrc"},
+ {"wallpaper","nitrogen "..home.."/images/wallpapers/"},
+ {"screensaver","xscreensaver-demo"},
+ {"power manager","xfce4-power-manager-settings"},
+ {"appearance","lxappearance"},
+ {"resolution","arandr"},
+ {"composite", composite},
+ {"░░▒▒▓▓███▓▓▒▒░░"},
+ {"graphix", gfx_settings},
+}
+systemmenu = {
+ {"deb manager", "gksu synaptic"},
+ {"gparted", "gksu gparted"},
+ {"default apps", term_exec.."sudo update-alternatives --all"},
+ {"disks usage", term_exec.."ncdu"},
+ {"cleanup","bleachbit"},
+ {"# terminal", rootterm},
+}
+net = {
+ {"chrome", webgui},
+ {"iceweasel", "iceweasel"},
+ {"irc", irc},
+ {"filezilla", ftpgui},
+}
+screenshot = {
+ {"screenshot", "xfce4-screenshooter"},
+ {"scrot", terminal.."scrot"},
+ {"scrot in 5", terminal.."scrot -d 5 '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f bash "..home.."/images/ &amp; viewnior bash "..home.."/images/$f'"},
+}
+gfx = {
+ {"photoshop","playonlinux --run photoshop_portable"},
+ {"gimp","gimp"},
+ {"color picker","gcolor2"},
+ {"░░▒▒▓▓███▓▓▒▒░░"},
+ {"screenshot", screenshot},
+}
+media = {
+ {"media player", mediaplayer},
+ {"music player", musicplayer},
+ {"mp3 metadata", mp3tag},
+ {"cd/dvd burner", burner},
+ {"volume", volumecontrol},
+}
+office = {
+ {"sublime",guieditor},
+ {"# sublime", "gksudo "..guieditor},
+ {"word","abiword"},
+}
+accessories = {
+ {"search",search},
+ {"archive",archiver},
+ {"sublime",guieditor},
+ {"geany","geany"},
+ {"terminal",terminal},
+ { "# terminal", rootterm },
+ {"files", filegui},
+ {"# files", "gksu "..filegui},
+ {"images",imageviewer},
+ {"calculator",calc},
+ {"pdf viewer",pdf},
+ {"charmap","gucharmap"},
+}
+applications = {
+ {"internet", net},
+ {"graphix", gfx},
+ {"entertainment", media},
+ {"office", office},
+ {"accessories", accessories},
+}
+fun_scripts = {
+ {"blocks", term_exec.."bash "..home.."/fun/blocks"},
+ {"colors", term_exec.."bash "..home.."/fun/colors"},
+ {"colorscheme", term_exec.."bash "..home.."/fun/colorscheme"},
+ {"dna", term_exec.."bash "..home.."/fun/dna"},
+ {"dna1", term_exec.."bash "..home.."/fun/dna1"},
+ {"faces", term_exec.."bash "..home.."/fun/faces"},
+ {"ghosts", term_exec.."bash "..home.."/fun/ghosts"},
+ {"hax0r", term_exec.."lua "..home.."/fun/2spooky.lua"},
+ {"invaders", term_exec.."bash "..home.."/fun/invaders"},
+ {"lines", term_exec.."bash "..home.."/fun/lines"},
+ {"matrix", term_exec.."cmatrix"},
+ {"pacman", term_exec.."bash "..home.."/fun/pacman"},
+ {"pipes", term_exec.."bash "..home.."/fun/pipes"},
+ {"pipesx", term_exec.."bash "..home.."/fun/pipesx"},
+ {"rain", term_exec.."bash "..home.."/fun/rain"},
+ {"rallyx", term_exec.."bash "..home.."/fun/rallyx"},
+ {"rectangles", term_exec.."bash "..home.."/fun/rectangles"},
+ {"screenfetch", term_exec.."bash "..home.."/fun/screenfetch"},
+ {"skull", term_exec.."bash "..home.."/fun/skull"},
+ {"slendy", term_exec.."bash "..home.."/fun/slendy"},
+ {"tanks", term_exec.."bash "..home.."/fun/tanks"},
+ {"tux", term_exec.."bash "..home.."/fun/tux"},
+ {"xrally", term_exec.."bash "..home.."/fun/xrally"},
+}
+climenu = {
+ {"$ terminal", terminal},
+ {"# terminal", rootterm},
+ {"file-manager", filecli},
+ {"editor", editor_cmd},
+ {"music player", musicplayer},
+ {"web browser", webcli},
+ {"cpu usage", cpucli},
+ {"fun scripts", fun_scripts},
+}
+mymainmenu = awful.menu({
+ items = {
+ {"awesome", awesomemenu, beautiful.awesome_icon},
+ {"run", runcmd},
+ {"cli apps", climenu},
+ {"░░▒▒▓▓███▓▓▒▒░░"},
+ {"terminal", terminal},
+ {"file manager", filegui},
+ {"# file manager", "gksu "..filegui},
+ {"web browser", webgui},
+ {"text editor", guieditor},
+ {"music player", musicplayer},
+ {"media player", mediaplayer},
+ {"keepass", passmanager},
+ {"░░▒▒▓▓███▓▓▒▒░░"},
+ {"applications", applications},
+ {"preferences", prefs},
+ {"system", systemmenu},
+ {"░░▒▒▓▓███▓▓▒▒░░"},
+ -- {"lock screen", locker},
+ {"exit menu", exiter}
+ },
+ width = 250
+})
+
+-- █▓▒░ internal apps
+mail = terminal .. " -e mutt "
+iptraf = terminal .. " -g 180x54-20+34 -e sudo iptraf-ng -i all "
+musicplr = terminal .. " -g 130x34-320+16 -e ncmpcpp "
+
+-- █▓▒░ wibox
+markup = lain.util.markup
+
+-- █▓▒░ textclock
+clockicon = wibox.widget.imagebox(beautiful.widget_clock)
+mytextclock = wibox.widget.background(awful.widget.textclock(markup("#FFFFFF",clock_format)), "#000000")
+
+-- █▓▒░ calendar
+lain.widgets.calendar:attach(mytextclock, { font_size = 10, fg = "#FFFFFF", position = "bottom_right" })
+
+-- █▓▒░ MPD
+mpdicon = wibox.widget.imagebox(beautiful.widget_music)
+mpdicon:buttons(awful.util.table.join(awful.button({ }, 1, function () awful.util.spawn_with_shell(musicplr) end)))
+mpdwidget = lain.widgets.mpd({
+ settings = function()
+ mpdicon:set_image(beautiful.widget_music)
+ if mpd_now.state == "play" then
+ artist = " " .. mpd_now.artist .. " "
+ -- truncate titles if too long
+ title = string.sub(mpd_now.title, 0, 55) .. " "
+ else
+ artist = ""
+ title = ""
+ end
+
+ widget:set_markup(markup("#74999E", artist) .. title)
+ end
+})
+mpdwidgetbg = mpdwidget
+
+-- █▓▒░ systray
+systray = wibox.widget.systray()
+
+-- █▓▒░ memory
+memicon = wibox.widget.background(wibox.widget.imagebox(beautiful.widget_mem), "#000000")
+memwidget = wibox.widget.background(lain.widgets.mem({
+ settings = function()
+ widget:set_text(" " .. mem_now.used .. "MB ")
+ end
+}), "#000000")
+
+-- █▓▒░ cpu
+cpuicon = wibox.widget.background(wibox.widget.imagebox(beautiful.widget_cpu), "#313131")
+cpuwidget = wibox.widget.background(lain.widgets.cpu({
+ settings = function()
+ widget:set_text(" " .. cpu_now.usage .. "% ")
+ end
+}), "#313131")
+
+-- █▓▒░ temp
+tempicon = wibox.widget.background(wibox.widget.imagebox(beautiful.widget_temp), "#313131")
+tempwidget = wibox.widget.background(lain.widgets.temp({
+ settings = function()
+ widget:set_text(" " .. coretemp_now .. "°C ")
+ end
+}), "#313131")
+
+-- █▓▒░ file system
+fsicon = wibox.widget.background(wibox.widget.imagebox(beautiful.widget_hdd), "#000000")
+fswidget = wibox.widget.background(lain.widgets.fs({
+ settings = function()
+ widget:set_text(" " .. fs_now.used .. "% ")
+ end
+}), "#000000")
+fswidgetbg = fswidget
+
+-- █▓▒░ battery
+baticon = wibox.widget.imagebox(beautiful.widget_battery)
+batwidget = lain.widgets.bat({
+ settings = function()
+ if bat_now.perc == "N/A" then
+ widget:set_markup(" AC ")
+ baticon:set_image(beautiful.widget_ac)
+ return
+ elseif tonumber(bat_now.perc) <= 5 then
+ baticon:set_image(beautiful.widget_battery_empty)
+ elseif tonumber(bat_now.perc) <= 15 then
+ baticon:set_image(beautiful.widget_battery_low)
+ else
+ baticon:set_image(beautiful.widget_battery)
+ end
+ widget:set_markup(" " .. bat_now.perc .. "% ")
+ end
+})
+
+-- █▓▒░ network
+neticon = wibox.widget.background(wibox.widget.imagebox(beautiful.widget_net), "#313131")
+neticon:buttons(awful.util.table.join(awful.button({ }, 1, function () awful.util.spawn_with_shell(iptraf) end)))
+netwidget = wibox.widget.background(lain.widgets.net({
+ settings = function()
+ widget:set_markup(markup("#ffffff", " " .. net_now.received)..
+ markup("#ffffff", " / " .. net_now.sent .. " "))
+ end
+}), "#313131")
+
+-- █▓▒░ separators
+space = wibox.widget.textbox(' ')
+black = wibox.widget.imagebox(beautiful.widget_black)
+hash1 = wibox.widget.imagebox(beautiful.widget_hash1)
+hash2 = wibox.widget.imagebox(beautiful.widget_hash2)
+hash3 = wibox.widget.imagebox(beautiful.widget_hash3)
+grey = wibox.widget.imagebox(beautiful.widget_grey)
+
+-- █▓▒░ create a wibox for each screen and add it
+mywibox = {}
+mypromptbox = {}
+mylayoutbox = {}
+mytaglist = {}
+mytaglist.buttons = awful.util.table.join(
+ awful.button({ }, 1, awful.tag.viewonly),
+ awful.button({ modkey }, 1, awful.client.movetotag),
+ awful.button({ }, 3, awful.tag.viewtoggle),
+ awful.button({ modkey }, 3, awful.client.toggletag),
+ awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end),
+ awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end)
+ )
+for s = 1, screen.count() do
+
+ -- Create a promptbox for each screen
+ mypromptbox[s] = awful.widget.prompt()
+
+ -- We need one layoutbox per screen.
+ mylayoutbox[s] = wibox.widget.background(awful.widget.layoutbox(s), "#313131")
+ mylayoutbox[s]:buttons(awful.util.table.join(
+ awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end),
+ awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end),
+ awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end),
+ awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end)))
+
+ -- Create a taglist widget
+ mytaglist[s] = wibox.widget.background(awful.widget.taglist(s, awful.widget.taglist.filter.all, mytaglist.buttons), beautiful.tag_bg_normal)
+
+ -- Create the wibox
+ mywibox[s] = awful.wibox({ position = "bottom", screen = s, height = 18 })
+
+ -- Widgets that are aligned to the upper left
+ local left_layout = wibox.layout.fixed.horizontal()
+ left_layout:add(hash3)
+ left_layout:add(hash3)
+ left_layout:add(black)
+ left_layout:add(mytaglist[s])
+ left_layout:add(black)
+ left_layout:add(hash1)
+ left_layout:add(hash1)
+ left_layout:add(grey)
+ left_layout:add(mylayoutbox[s])
+ left_layout:add(grey)
+ left_layout:add(hash2)
+ left_layout:add(hash2)
+ left_layout:add(mypromptbox[s])
+ left_layout:add(space)
+
+ -- Widgets that are aligned to the upper right
+ local right_layout = wibox.layout.fixed.horizontal()
+ if s == 1 then
+ right_layout:add(hash2)
+ right_layout:add(hash2)
+ right_layout:add(space)
+ right_layout:add(systray)
+ right_layout:add(space)
+ end
+ right_layout:add(hash1)
+ right_layout:add(hash1)
+ right_layout:add(black)
+ right_layout:add(mytextclock)
+ right_layout:add(black)
+ right_layout:add(hash3)
+ right_layout:add(hash3)
+
+ local middle_layout = wibox.layout.fixed.horizontal()
+ middle_layout:add(hash2)
+ middle_layout:add(hash2)
+ middle_layout:add(grey)
+ middle_layout:add(cpuicon)
+ middle_layout:add(cpuwidget)
+ middle_layout:add(grey)
+ middle_layout:add(hash1)
+ middle_layout:add(hash1)
+ middle_layout:add(black)
+ middle_layout:add(memicon)
+ middle_layout:add(memwidget)
+ middle_layout:add(black)
+ middle_layout:add(hash1)
+ middle_layout:add(hash1)
+ middle_layout:add(grey)
+ middle_layout:add(tempicon)
+ middle_layout:add(tempwidget)
+ middle_layout:add(grey)
+ middle_layout:add(hash1)
+ middle_layout:add(hash1)
+ middle_layout:add(space)
+ middle_layout:add(baticon)
+ middle_layout:add(batwidget)
+ middle_layout:add(space)
+ middle_layout:add(hash3)
+ middle_layout:add(hash3)
+ middle_layout:add(black)
+ middle_layout:add(fsicon)
+ middle_layout:add(fswidgetbg)
+ middle_layout:add(black)
+ middle_layout:add(hash1)
+ middle_layout:add(hash1)
+ middle_layout:add(grey)
+ middle_layout:add(neticon)
+ middle_layout:add(netwidget)
+ middle_layout:add(grey)
+ middle_layout:add(hash2)
+ middle_layout:add(hash2)
+ -- middle_layout:add(mpdicon)
+ -- middle_layout:add(mpdwidgetbg)
+
+ local layout = wibox.layout.align.horizontal()
+ layout:set_left(left_layout)
+ layout:set_middle(middle_layout)
+ layout:set_right(right_layout)
+ mywibox[s]:set_widget(layout)
+
+end
+
+-- █▓▒░ mouse bindings
+root.buttons(awful.util.table.join(
+ awful.button({ }, 3, function () mymainmenu:toggle() end)
+))
+
+-- █▓▒░ global key bindings
+globalkeys = awful.util.table.join(
+ -- sreenshot
+ awful.key({ modkey }, "Print",
+ function ()
+ awful.util.spawn("scrot -d 5 '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ & viewnior ~/images/$f'")
+ end),
+ awful.key({ }, "Print",
+ function ()
+ awful.util.spawn("scrot -d 5 '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ & viewnior ~/images/$f'")
+ end),
+
+ -- touchpad toggle
+ awful.key({ modkey, }, "m",
+ function ()
+ awful.util.spawn('bash /home/xero/code/bash/toggle-touchpad.sh')
+ end),
+
+ -- tag browsing
+ awful.key({ modkey }, "Left",
+ awful.tag.viewprev
+ ),
+ awful.key({ modkey }, "Right",
+ awful.tag.viewnext
+ ),
+ awful.key({ modkey }, "Escape",
+ awful.tag.history.restore
+ ),
+
+ -- client focus
+ awful.key({ modkey }, "k",
+ function ()
+ awful.client.focus.byidx( 1)
+ if client.focus then client.focus:raise() end
+ end),
+ awful.key({ modkey }, "j",
+ function ()
+ awful.client.focus.byidx(-1)
+ if client.focus then client.focus:raise() end
+ end),
+
+ -- client reorder
+ awful.key({ modkey, "Shift" }, "j",
+ function ()
+ awful.client.swap.byidx( 1)
+ end),
+ awful.key({ modkey, "Shift" }, "k",
+ function ()
+ awful.client.swap.byidx( -1)
+ end),
+
+ -- resize tags/clients
+ awful.key({ modkey }, "l",
+ function ()
+ awful.tag.incmwfact( 0.05)
+ end),
+ awful.key({ modkey }, "h",
+ function ()
+ awful.tag.incmwfact(-0.05)
+ end),
+ awful.key({ modkey, "Shift" }, "l",
+ function ()
+ awful.client.incwfact(-0.05)
+ end),
+ awful.key({ modkey, "Shift" }, "h",
+ function ()
+ awful.client.incwfact( 0.05)
+ end),
+
+ -- move tags/clients
+ awful.key({ modkey, "Control" }, "Next",
+ function ()
+ awful.client.moveresize( 20, 20, -40, -40)
+ end),
+ awful.key({ modkey, "Control" }, "Prior",
+ function ()
+ awful.client.moveresize(-20, -20, 40, 40)
+ end),
+ awful.key({ modkey, "Control" }, "Down",
+ function ()
+ awful.client.moveresize( 0, 20, 0, 0)
+ end),
+ awful.key({ modkey, "Control" }, "Up",
+ function ()
+ awful.client.moveresize( 0, -20, 0, 0)
+ end),
+ awful.key({ modkey, "Control" }, "Left",
+ function ()
+ awful.client.moveresize(-20, 0, 0, 0)
+ end),
+ awful.key({ modkey, "Control" }, "Right",
+ function ()
+ awful.client.moveresize( 20, 0, 0, 0)
+ end),
+
+ -- show Menu
+ awful.key({ modkey }, "w",
+ function ()
+ mymainmenu:show({ keygrabber = true })
+ end),
+
+ -- show/hide wibox
+ awful.key({ modkey }, "b", function ()
+ mywibox[mouse.screen].visible = not mywibox[mouse.screen].visible
+ end),
+
+ -- switch mouse screen
+ awful.key({ modkey, "Control" }, "j",
+ function ()
+ awful.screen.focus_relative( 1)
+ end),
+ awful.key({ modkey, "Control" }, "k",
+ function ()
+ awful.screen.focus_relative(-1)
+ end),
+
+
+ -- Layout manipulation
+ awful.key({ modkey, }, "u", awful.client.urgent.jumpto),
+ awful.key({ modkey, }, "space",
+ function ()
+ awful.layout.inc(layouts, 1)
+ end),
+ awful.key({ modkey, "Shift" }, "space",
+ function ()
+ awful.layout.inc(layouts, -1)
+ end),
+ awful.key({ modkey, "Control" }, "n", awful.client.restore),
+
+ -- change useless gap
+ awful.key({ modkey, "Control" }, "=", function () lain.util.useless_gaps_resize(1) end),
+ awful.key({ modkey, "Control" }, "-", function () lain.util.useless_gaps_resize(- 1) end),
+
+ -- standard program
+ awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end),
+ awful.key({ modkey, "Control" }, "r", awesome.restart),
+ awful.key({ modkey, "Shift" }, "q", awesome.quit),
+
+ -- widgets popups
+ awful.key({ altkey, }, "c", function () lain.widgets.calendar:show(7) end),
+ awful.key({ altkey, }, "h", function () fswidget.show(7) end),
+
+ -- ALSA volume control
+ awful.key({ altkey }, "Up",
+ function ()
+ awful.util.spawn("amixer -q set Master 1%+")
+ end),
+ awful.key({ altkey }, "Down",
+ function ()
+ awful.util.spawn("amixer -q set Master 1%-")
+ end),
+ awful.key({ altkey }, "m",
+ function ()
+ awful.util.spawn("amixer -q set Master playback toggle")
+ end),
+ awful.key({ altkey, "Control" }, "m",
+ function ()
+ awful.util.spawn("amixer -q set Master playback 100%")
+ end),
+
+ -- MPD control
+ awful.key({ altkey, "Control" }, "Up",
+ function ()
+ awful.util.spawn_with_shell("mpc toggle || ncmpcpp toggle || ncmpc toggle || pms toggle")
+ mpdwidget.update()
+ end),
+ awful.key({ altkey, "Control" }, "Down",
+ function ()
+ awful.util.spawn_with_shell("mpc stop || ncmpcpp stop || ncmpc stop || pms stop")
+ mpdwidget.update()
+ end),
+ awful.key({ altkey, "Control" }, "Left",
+ function ()
+ awful.util.spawn_with_shell("mpc prev || ncmpcpp prev || ncmpc prev || pms prev")
+ mpdwidget.update()
+ end),
+ awful.key({ altkey, "Control" }, "Right",
+ function ()
+ awful.util.spawn_with_shell("mpc next || ncmpcpp next || ncmpc next || pms next")
+ mpdwidget.update()
+ end),
+
+ -- Copy to clipboard
+ awful.key({ modkey }, "c", function () os.execute("xsel -p -o | xsel -i -b") end),
+
+ -- Prompt
+ awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end),
+ awful.key({ modkey }, "x",
+ function ()
+ awful.prompt.run({ prompt = "Run Lua code: " },
+ mypromptbox[mouse.screen].widget,
+ awful.util.eval, nil,
+ awful.util.getdir("cache") .. "/history_eval")
+ end),
+ awful.key(
+ { altkey, "Shift" }, "h",
+ function ()
+ naughty.notify({
+ title = "Command Reference: Client Keybindings"
+ , text = "<span background=\"#000000\" color=\"#FFFFFF\">WIN+SPACE</span> : spawn terminal\nWIN+W : open menu"
+ , timeout = 10
+ , position = "top_right"
+ , fg = beautiful.fg_focus
+ , bg = beautiful.bg_focus
+ })
+ end
+ )
+)
+
+-- █▓▒░ client key bindings
+clientkeys = awful.util.table.join(
+ awful.key({ modkey, }, "f",
+ function (c)
+ c.fullscreen = not c.fullscreen
+ end),
+ awful.key({ modkey, "Shift" }, "c",
+ function (c)
+ c:kill()
+ end),
+ awful.key({ modkey, "Control" }, "space",
+ awful.client.floating.toggle
+ ),
+ awful.key({ modkey, "Control" }, "Return",
+ function (c)
+ c:swap(awful.client.getmaster())
+ end),
+ awful.key({ modkey, }, "o",
+ awful.client.movetoscreen
+ ),
+ awful.key({ modkey, }, "t",
+ function (c)
+ c.ontop = not c.ontop
+ end),
+ awful.key({ modkey, }, "n",
+ function (c)
+ -- The client currently has the input focus, so it cannot be
+ -- minimized, since minimized clients can't have the focus.
+ c.minimized = true
+ end),
+ awful.key({ modkey, "Shift" }, "m",
+ function (c)
+ c.maximized_horizontal = not c.maximized_horizontal
+ c.maximized_vertical = not c.maximized_vertical
+ end)
+)
+
+-- Bind all key numbers to tags.
+-- Be careful: we use keycodes to make it works on any keyboard layout.
+-- This should map on the top row of your keyboard, usually 1 to 9.
+for i = 1, 9 do
+ globalkeys = awful.util.table.join(globalkeys,
+ awful.key({ modkey }, "#" .. i + 9,
+ function ()
+ local screen = mouse.screen
+ local tag = awful.tag.gettags(screen)[i]
+ if tag then
+ awful.tag.viewonly(tag)
+ end
+ end),
+ awful.key({ modkey, "Control" }, "#" .. i + 9,
+ function ()
+ local screen = mouse.screen
+ local tag = awful.tag.gettags(screen)[i]
+ if tag then
+ awful.tag.viewtoggle(tag)
+ end
+ end),
+ awful.key({ modkey, "Shift" }, "#" .. i + 9,
+ function ()
+ local tag = awful.tag.gettags(client.focus.screen)[i]
+ if client.focus and tag then
+ awful.client.movetotag(tag)
+ end
+ end),
+ awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
+ function ()
+ local tag = awful.tag.gettags(client.focus.screen)[i]
+ if client.focus and tag then
+ awful.client.toggletag(tag)
+ end
+ end))
+end
+
+clientbuttons = awful.util.table.join(
+ awful.button({ }, 1,
+ function (c)
+ client.focus = c; c:raise()
+ end),
+ awful.button({ modkey }, 1,
+ awful.mouse.client.move
+ ),
+ awful.button({ modkey }, 3,
+ awful.mouse.client.resize
+ )
+)
+
+-- set keys
+root.keys(globalkeys)
+
+-- █▓▒░ rules
+awful.rules.rules = {
+ -- catch all rules
+ { rule = { },
+ properties = {
+ border_width = beautiful.border_width,
+ border_color = beautiful.border_normal,
+ focus = true,
+ keys = clientkeys,
+ buttons = clientbuttons
+ } },
+ -- app rules
+ { rule = { class = "smplayer" },
+ properties = {
+ floating = true
+ } },
+ { rule = { class = "gimp" },
+ properties = {
+ floating = true
+ } },
+ { rule = { name = "File Operation Progress" },
+ properties = {
+ floating = true
+ } },
+ { rule = { name = "urxvt" },
+ properties = {
+ -- fix term sizing calculation glitches
+ size_hints_honor = false
+ } }
+}
+-- █▓▒░ signals
+-- change tag names dynamically
+dynamic_tagging = function()
+ for s = 1, screen.count() do
+ -- get a list of all tags
+ local atags = awful.tag.gettags(s)
+ -- set the standard icon
+ for i, t in ipairs(atags) do
+ t.name = tag_icon
+ end
+
+ -- get a list of all running clients
+ local clist = client.get(s)
+ for i, c in ipairs(clist) do
+ -- get the tags on which the client is displayed
+ local ctags = c:tags()
+ for i, t in ipairs(ctags) do
+ -- set active icon
+ t.name = tag_icon_active
+ end
+ end
+ end
+end
+
+-- opened client
+client.connect_signal("manage", function (c, startup)
+ dynamic_tagging()
+
+ if not startup and not c.size_hints.user_position
+ and not c.size_hints.program_position then
+ awful.placement.no_overlap(c)
+ awful.placement.no_offscreen(c)
+ end
+end)
+
+-- closed client
+client.connect_signal("unmanage", function (c, startup)
+ dynamic_tagging()
+end)
+
+-- border rollovers
+client.connect_signal("focus",
+ function(c)
+ if c.maximized_horizontal == true and c.maximized_vertical == true then
+ c.border_width = 0
+ c.border_color = beautiful.border_normal
+ else
+ c.border_width = beautiful.border_width
+ c.border_color = beautiful.border_focus
+ end
+ end)
+client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
+
+-- rearrange clients
+for s = 1, screen.count() do screen[s]:connect_signal("arrange", function ()
+ dynamic_tagging()
+ local clients = awful.client.visible(s)
+ local layout = awful.layout.getname(awful.layout.get(s))
+
+ if #clients > 0 then -- fine grained borders and floaters control
+ for _, c in pairs(clients) do -- floaters always have borders
+ if awful.client.floating.get(c) or layout == "floating" then
+ c.border_width = beautiful.border_width
+
+ -- no borders with only one visible client
+ elseif #clients == 1 or layout == "max" then
+ clients[1].border_width = 0
+ awful.client.moveresize(0, 0, 2, 2, clients[1])
+ else
+ c.border_width = beautiful.border_width
+ end
+ end
+ end
+end)
+end
+
+run_once("nitrogen --restore") \ No newline at end of file