summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.config/awesome/functions/error.lua26
-rw-r--r--.config/awesome/functions/helper.lua17
-rw-r--r--.config/awesome/functions/run_once.lua35
-rw-r--r--.config/awesome/icons/awesome.svg62
-rw-r--r--.config/awesome/icons/debian.svg17
-rw-r--r--.config/awesome/icons/googleplaymusic.pngbin0 -> 19123 bytes
-rw-r--r--.config/awesome/icons/linux.svg63
m---------.config/awesome/lain0
-rw-r--r--.config/awesome/rc.lua874
-rw-r--r--.config/awesome/stock/binds.lua204
-rw-r--r--.config/awesome/stock/signals.lua73
-rw-r--r--.config/awesome/theme.lua110
m---------.config/awesome/vicious0
13 files changed, 1481 insertions, 0 deletions
diff --git a/.config/awesome/functions/error.lua b/.config/awesome/functions/error.lua
new file mode 100644
index 0000000..74d5af4
--- /dev/null
+++ b/.config/awesome/functions/error.lua
@@ -0,0 +1,26 @@
+local naughty = require("naughty")
+
+-- {{{ 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)
+if awesome.startup_errors then
+ naughty.notify({ preset = naughty.config.presets.critical,
+ title = "Oops, there were errors during startup!",
+ text = awesome.startup_errors })
+end
+
+-- Handle runtime errors after startup
+do
+ local in_error = false
+ awesome.connect_signal("debug::error", function (err)
+ -- Make sure we don't go into an endless error loop
+ if in_error then return end
+ in_error = true
+
+ naughty.notify({ preset = naughty.config.presets.critical,
+ title = "Oops, an error happened!",
+ text = tostring(err) })
+ in_error = false
+ end)
+end
+-- }}}
diff --git a/.config/awesome/functions/helper.lua b/.config/awesome/functions/helper.lua
new file mode 100644
index 0000000..a16080e
--- /dev/null
+++ b/.config/awesome/functions/helper.lua
@@ -0,0 +1,17 @@
+awful = require("awful")
+beautiful = require("beautiful")
+
+-- {{{ Helper functions
+local function client_menu_toggle_fn()
+ local instance = nil
+
+ return function ()
+ if instance and instance.wibox.visible then
+ instance:hide()
+ instance = nil
+ else
+ instance = awful.menu.clients({ theme = { width = 250 } })
+ end
+ end
+end
+-- }}}
diff --git a/.config/awesome/functions/run_once.lua b/.config/awesome/functions/run_once.lua
new file mode 100644
index 0000000..7c57482
--- /dev/null
+++ b/.config/awesome/functions/run_once.lua
@@ -0,0 +1,35 @@
+local awful = require("awful")
+local lfs = require("lfs")
+
+local function processwalker()
+ local function yieldprocess()
+ for dir in lfs.dir("/proc") do
+ if tonumber(dir) ~= nil then
+ local f, err = io.open("/proc/"..dir.."/cmdline")
+ if f then
+ local cmdline = f:read("*all")
+ f:close()
+ if cmdline ~= "" then
+ coroutine.yield(cmdline)
+ end
+ end
+ end
+ end
+ end
+ return coroutine.wrap(yieldprocess)
+end
+
+function run_once(process, cmd)
+ assert(type(process) == "string")
+ local regex_killer = {
+ ["+"] = "%+", ["-"] = "%-",
+ ["*"] = "%*", ["?"] = "%?" }
+
+ for p in processwalker() do
+ if p:find(process:gsub("[-+?*]", regex_killer)) then
+ return
+ end
+ end
+ return awful.spawn(cmd or process)
+end
+-- run once END
diff --git a/.config/awesome/icons/awesome.svg b/.config/awesome/icons/awesome.svg
new file mode 100644
index 0000000..88a3000
--- /dev/null
+++ b/.config/awesome/icons/awesome.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64px"
+ height="64px"
+ id="svg2160"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ sodipodi:docbase="/home/blackfox/Documents/Branko/Projekti/Awsome/package"
+ sodipodi:docname="aw-block_icon_64px.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/blackfox/Documents/Branko/Projekti/Awsome/package/aw-block_icon_64px.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2162" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.5"
+ inkscape:cx="18.374202"
+ inkscape:cy="37.52583"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ inkscape:window-width="737"
+ inkscape:window-height="582"
+ inkscape:window-x="192"
+ inkscape:window-y="251" />
+ <metadata
+ id="metadata2165">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="opacity:1;fill:#535d6c;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M -1.3e-07,4.440892e-16 L -1.3e-07,20 L 20,20 L 44,20 L 44,22 L 20,22 L -1.3e-07,22 L -1.3e-07,46 L -1.3e-07,64 L 27.0625,64 L 42,64 L 42,44 L 27.0625,44 L 20,44 L 20,42 L 44,42 L 44,44 L 44,48 L 44,64 L 64,64 L 64,48 L 64,44 L 64,18 L 64,4.440892e-16 L 44,4.440892e-16 L 20,4.440892e-16 L -1.3e-07,4.440892e-16 z "
+ id="rect3458" />
+ </g>
+</svg>
diff --git a/.config/awesome/icons/debian.svg b/.config/awesome/icons/debian.svg
new file mode 100644
index 0000000..3d9eb01
--- /dev/null
+++ b/.config/awesome/icons/debian.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-60 -75 210 260">
+ <g fill="#D70751">
+ <path d="M64.525,62.053c-4.125,0.058,0.78,2.125,6.165,2.954,1.488-1.161,2.838-2.336,4.04-3.479-3.354,0.821-6.765,0.838-10.205,0.525"/>
+ <path d="M86.665,56.533c2.457-3.389,4.246-7.102,4.878-10.939-0.551,2.736-2.035,5.099-3.435,7.592-7.711,4.854-0.726-2.883-0.004-5.824-8.29,10.436-1.138,6.257-1.439,9.171"/>
+ <path d="M94.839,35.268c0.497-7.428-1.462-5.08-2.121-2.245,0.766,0.4,1.377,5.237,2.121,2.245"/>
+ <path d="M48.883-66.264c2.201,0.395,4.757,0.698,4.398,1.224,2.407-0.528,2.954-1.015-4.398-1.224"/>
+ <path d="M53.281-65.04l-1.556,0.32,1.448-0.127,0.108-0.193"/>
+ <path d="M121.93,38.085c0.247,6.671-1.95,9.907-3.932,15.637l-3.564,1.781c-2.919,5.666,0.282,3.598-1.807,8.105-4.556,4.049-13.823,12.67-16.789,13.457-2.163-0.047,1.469-2.554,1.943-3.537-6.097,4.188-4.894,6.285-14.217,8.83l-0.273-0.607c-23.001,10.818-54.947-10.622-54.526-39.876-0.246,1.857-0.698,1.393-1.208,2.144-1.186-15.052,6.952-30.17,20.675-36.343,13.427-6.646,29.163-3.918,38.78,5.044-5.282-6.92-15.795-14.254-28.255-13.568-12.208,0.193-23.625,7.95-27.436,16.369-6.253,3.938-6.979,15.177-9.704,17.233-3.665,26.943,6.896,38.583,24.762,52.275,2.812,1.896,0.792,2.184,1.173,3.627-5.936-2.779-11.372-6.976-15.841-12.114,2.372,3.473,4.931,6.847,8.239,9.499-5.596-1.897-13.074-13.563-15.256-14.038,9.647,17.274,39.142,30.295,54.587,23.836-7.146,0.263-16.226,0.146-24.256-2.822-3.371-1.734-7.958-5.331-7.14-6.003,21.079,7.875,42.854,5.965,61.09-8.655,4.641-3.614,9.709-9.761,11.173-9.846-2.206,3.317,0.377,1.596-1.318,4.523,4.625-7.456-2.008-3.035,4.779-12.877l2.507,3.453c-0.931-6.188,7.687-13.704,6.813-23.492,1.975-2.994,2.206,3.22,0.107,10.107,2.912-7.64,0.767-8.867,1.516-15.171,0.81,2.118,1.867,4.37,2.412,6.606-1.895-7.382,1.948-12.433,2.898-16.724-0.937-0.415-2.928,3.264-3.383-5.457,0.065-3.788,1.054-1.985,1.435-2.917-0.744-0.427-2.694-3.33-3.88-8.9,0.86-1.308,2.3,3.393,3.47,3.586-0.753-4.429-2.049-7.805-2.103-11.202-3.421-7.149-1.211,0.953-3.985-3.069-3.641-11.357,3.021-2.637,3.47-7.796,5.52,7.995,8.667,20.387,10.11,25.519-1.103-6.258-2.883-12.32-5.058-18.185,1.677,0.705-2.699-12.875,2.18-3.882-5.21-19.172-22.302-37.087-38.025-45.493,1.924,1.76,4.354,3.971,3.481,4.317-7.819-4.656-6.444-5.018-7.565-6.985-6.369-2.591-6.788,0.208-11.007,0.004-12.005-6.368-14.318-5.69-25.368-9.681l0.502,2.349c-7.953-2.649-9.265,1.005-17.862,0.009-0.523-0.409,2.753-1.479,5.452-1.871-7.69,1.015-7.329-1.515-14.854,0.279,1.855-1.301,3.815-2.162,5.793-3.269-6.271,0.381-14.971,3.649-12.286,0.677-10.235,4.569-28.403,10.976-38.597,20.535l-0.321-2.142c-4.672,5.608-20.371,16.748-21.622,24.011l-1.249,0.291c-2.431,4.116-4.004,8.781-5.932,13.016-3.18,5.417-4.661,2.085-4.208,2.934-6.253,12.679-9.359,23.332-12.043,32.069,1.912,2.858,0.046,17.206,0.769,28.688-3.141,56.709,39.8,111.77,86.737,124.48,6.88,2.459,17.11,2.364,25.813,2.618-10.268-2.937-11.595-1.556-21.595-5.044-7.215-3.398-8.797-7.277-13.907-11.711l2.022,3.573c-10.021-3.547-5.829-4.39-13.982-6.972l2.16-2.82c-3.249-0.246-8.604-5.475-10.069-8.371l-3.553,0.14c-4.27-5.269-6.545-9.063-6.379-12.005l-1.148,2.047c-1.301-2.235-15.709-19.759-8.234-15.679-1.389-1.271-3.235-2.067-5.237-5.703l1.522-1.739c-3.597-4.627-6.621-10.562-6.391-12.536,1.919,2.592,3.25,3.075,4.568,3.52-9.083-22.539-9.593-1.242-16.474-22.942l1.456-0.116c-1.116-1.682-1.793-3.506-2.69-5.298l0.633-6.313c-6.541-7.562-1.829-32.151-0.887-45.637,0.655-5.485,5.459-11.322,9.114-20.477l-2.227-0.384c4.256-7.423,24.301-29.814,33.583-28.662,4.499-5.649-0.892-0.02-1.772-1.443,9.878-10.223,12.984-7.222,19.65-9.061,7.19-4.268-6.17,1.664-2.761-1.628,12.427-3.174,8.808-7.216,25.021-8.828,1.71,0.973-3.969,1.503-5.395,2.766,10.354-5.066,32.769-3.914,47.326,2.811,16.895,7.896,35.873,31.232,36.622,53.189l0.852,0.229c-0.431,8.729,1.336,18.822-1.727,28.094l2.1-4.385"/>
+ <path d="M19.5,67.715l-0.578,2.893c2.71,3.683,4.861,7.673,8.323,10.552-2.49-4.863-4.341-6.872-7.745-13.445"/>
+ <path d="M25.909,67.464c-1.435-1.587-2.284-3.497-3.235-5.4,0.909,3.345,2.771,6.219,4.504,9.143l-1.269-3.743"/>
+ <path d="M139.32,42.814l-0.605,1.52c-1.111,7.892-3.511,15.701-7.189,22.941,4.06-7.639,6.69-15.995,7.79-24.461"/>
+ <path d="M49.698-68.243c2.789-1.022,6.855-0.56,9.814-1.233-3.855,0.324-7.693,0.517-11.484,1.005l1.67,0.228"/>
+ <path d="M-48.219-16.176c0.642,5.951-4.477,8.26,1.134,4.337,3.007-6.773-1.175-1.87-1.134-4.337"/>
+ <path d="M-54.812,11.362c1.292-3.967,1.526-6.349,2.02-8.645-3.571,4.566-1.643,5.539-2.02,8.645"/>
+ </g>
+</svg> \ No newline at end of file
diff --git a/.config/awesome/icons/googleplaymusic.png b/.config/awesome/icons/googleplaymusic.png
new file mode 100644
index 0000000..0dfa1f4
--- /dev/null
+++ b/.config/awesome/icons/googleplaymusic.png
Binary files differ
diff --git a/.config/awesome/icons/linux.svg b/.config/awesome/icons/linux.svg
new file mode 100644
index 0000000..a77db4e
--- /dev/null
+++ b/.config/awesome/icons/linux.svg
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.0"
+ width="100%"
+ height="100%"
+ viewBox="0 0 600 700"
+ id="svg3191">
+ <defs
+ id="defs3213" />
+ <metadata
+ id="metadata3193">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <path
+ d="m 495,294.4 c -16.1,0 -18.8,0.2 -29.5,3 -13.2,3.5 -20.9,7.9 -29.9,17 -4.6,4.5 -6.9,7.4 -9.1,11.1 -5.5,9.5 -9.1,20.3 -11.3,34.9 -1.2,7.1 -1.3,9.7 -1.2,27.3 0,18.5 2.2,74.9 3.5,91.8 0.9,11.2 0.5,12.4 -8.9,25.5 -3.3,4.6 -7.9,11.3 -10.2,14.9 -6.3,9.7 -15.2,22.2 -22.5,31.8 -13.5,17.4 -16.9,23.8 -25.4,46.9 -8.2,22.6 -13.2,33.8 -25.3,57.3 -6.2,11.8 -7.8,16.8 -8.1,25.2 -0.4,7.2 0.6,17.2 1.7,19 0.9,1.2 2,1.5 4.2,0.9 -0.3,0.3 -0.5,0.5 -0.7,0.6 -3.5,2.3 -7.5,7.2 -10,13.4 -0.1,0.1 -0.1,0.3 -0.2,0.4 -0.9,1.4 -1.9,3.8 -3.1,7.5 -3.6,10.2 -6.6,14.7 -12,17.6 -4.6,2.5 -8.7,3.1 -20.7,3.1 -12.4,0 -15.1,0.6 -18.8,3.8 -6.6,5.6 -7.6,16.7 -3.1,32.1 4.1,13.9 3.9,20.3 -1.4,35.9 -2.9,8.6 -3.3,10.4 -3.3,14.1 0,2.8 0.3,4.9 0.9,6.2 1.3,2.7 5.4,6 9.4,7.7 4.5,1.7 27.1,7.3 43.3,10.5 25.1,5.1 34.1,7.8 57.4,17.1 20.7,8.2 29.5,11.2 36.5,12.3 3.3,0.5 10.1,-0.1 13.2,-1.3 3.7,-1.3 7.2,-3.7 14.9,-10.2 13.6,-11.4 21,-15 36.2,-17.4 5.7,-0.9 10.9,-1 54.4,-1 26.4,0 49.7,0.2 51.8,0.5 4.9,0.6 6.8,2.2 10.9,9.4 6.3,11.3 14,16.3 28,18.4 6.6,1 17.9,1.1 23.1,0.3 11.4,-1.9 17.1,-5.3 30,-18.2 15,-15.1 29,-24.6 48.7,-33.2 10,-4.4 14.5,-6.9 26.3,-14.9 14.5,-9.8 17.3,-12.9 17.3,-19.3 0,-6.7 -3.6,-10.9 -16.9,-19.7 -12.7,-8.4 -18.4,-13.5 -23.7,-21.3 -3.7,-5.5 -5,-9.7 -5.5,-17.9 -0.2,-3.8 -0.6,-6.4 -1.1,-8 -0.5,-5.7 -2.8,-12.2 -6.9,-14.3 -5.7,-3 -7.7,-2.1 -9.6,-0.9 6.4,-7.2 8.5,-10.6 10.6,-16.8 3.7,-11 2.9,-23.3 -3.5,-55.3 -7.4,-37.2 -20,-63.8 -46,-97.2 -16.5,-21.3 -23.2,-31.9 -39.3,-62.1 -8,-15.1 -10.3,-20.3 -12.2,-28.4 -2.8,-11.7 -4.1,-22.2 -6.2,-52.1 -2,-27.9 -3.4,-39.4 -6,-49.1 -6.9,-26.4 -27.6,-46.4 -56.5,-54.7 -12.3,-3.5 -17.6,-4.2 -34.2,-4.2 z"
+ transform="translate(-200.8403,-238.943)"
+ id="path3195"
+ style="fill:#ffffff" />
+ <g
+ transform="translate(-200.8403,-238.943)"
+ id="g3197"
+ style="fill:#f8bf11">
+ <path
+ d="m 552,300.4 c 0,25.1 -29.9,30.4 -44.4,39.4 -13.5,12.5 -91.2,47.8 -111.8,47.8 -33.1,-7 -73.4,-56.4 -78.6,-89.2 0,-19.1 24.3,-34.4 37.9,-46.9 13.5,-12.5 29.1,-24.3 55.7,-19.3 20.6,0 52.8,9.8 66.3,22.3 27,9 74.9,14.8 74.9,45.9 z"
+ transform="matrix(0.55569,0,0,0.55569,249.6684,292.4824)"
+ id="path3199" />
+ <path
+ d="m 7.597,971.1 c 30.75,14 102.4,31.9 127.6,34.9 16.9,7 128.5,33 154.2,33 38.1,-27 44.4,-67.9 33.7,-109.3 -47.5,-76.7 -84.2,-177.2 -173,-211.8 -8.9,4.4 -16.2,16.3 -19.4,18.3 -6.4,4.1 -13.5,13 -18,24.1 -4.7,11.6 -9,25.8 -14.24,46.5 -10.26,20.6 -52.15,2 -80.84,17 -10.46,31.7 7.39,109.9 -10.02,147.3 z"
+ transform="matrix(0.55569,0,0,0.55569,249.6684,292.4824)"
+ id="path3201" />
+ <path
+ d="m 834.2,853.6 c 19.2,15.7 49.3,27.4 62.9,53.5 -25.9,30.9 -48.2,41.8 -81,57.4 -45,21.4 -73.2,41.5 -93.8,55.5 -20.6,18 -68.4,29 -90.1,26 -13.7,-9 -29.1,-118.3 -24.1,-154 0,-19 -23.3,-95.1 14,-141.5 36.1,-6.9 67.1,26.1 90,48.6 18.9,-12.7 48.8,-32.2 71.4,-37.1 7.4,-1.7 7.7,-9.4 23.2,-1.3 7.4,3.9 11.7,16.1 12.5,26.5 1.3,16.8 3,52.4 15,66.4 z"
+ transform="matrix(0.55569,0,0,0.55569,249.6684,292.4824)"
+ id="path3203" />
+ </g>
+ <g
+ transform="translate(-200.8403,-238.943)"
+ id="g3205">
+ <g
+ transform="matrix(0.55569,0,0,0.55569,249.6684,292.4824)"
+ id="g3207">
+ <path
+ d="m 265.5,1063 c -12.6,-2 -28.5,-7 -65.7,-22 -42,-17 -58.1,-21 -103.3,-31 C 67.4,1005 26.59,994.5 18.62,991.3 11.41,988.4 3.92,982.4 1.63,977.5 0.562,975.3 0,971.4 0,966.4 c 0,-6.8 0.7248,-9.8 5.962,-25.3 9.516,-28.2 9.976,-39.7 2.577,-64.7 -8.194,-27.7 -6.277,-47.7 5.529,-57.8 6.67,-5.7 11.53,-6.7 33.8,-6.7 21.64,0 28.95,-1.1 37.33,-5.7 9.65,-5.3 15.08,-13.3 21.48,-31.7 4.1,-11.9 6.8,-16.6 9.4,-16.6 2.1,0 3.9,5.2 3.9,11.5 0,5.6 -6.3,29.2 -9.4,35.3 -3.3,6.6 -7.8,11.7 -12.99,14.7 -9.68,5.7 -28.33,7.2 -48.79,4.1 -13.07,-2.1 -20.57,-1.6 -25.57,1.4 -7.4,4.5 -8.61,14.6 -3.24,27.1 10.4,24.1 12.39,29.3 14.59,37.4 2.61,9.7 3.03,18.2 1.39,28.3 -1.63,10 -4.5,16.3 -12.99,28.2 -4.38,6.2 -8.39,12.8 -8.92,14.8 -1.5,5.4 0.71,9.5 6.67,12.6 5.06,2.5 77.22,21.2 128.2,32.7 15.7,4 44.3,11 63.5,16 19.3,5 39.3,9 44.5,10 16.1,2 31,0 41.3,-6 14.3,-9 24.3,-29.7 25.5,-53.8 0.8,-15.9 -2.7,-30.2 -12,-48.7 -7.1,-14.2 -10.6,-19.7 -44.3,-70.6 -59.5,-89.6 -85.3,-119.5 -107.3,-124.1 -7.1,-1.4 -11.8,-0.6 -21.3,3.7 -9.1,4.1 -12.2,4.3 -14.4,1 -2.1,-3.2 -3.8,-21.1 -3.2,-34.1 0.7,-15.1 3.6,-24.1 14.6,-45.5 21.8,-42.2 30.7,-62.4 45.6,-103 15.3,-41.6 21.5,-53.1 45.6,-84.5 13.2,-17.1 29.2,-39.7 40.5,-57.1 4.3,-6.5 12.6,-18.6 18.5,-26.9 16.8,-23.6 17.6,-25.8 16,-45.9 -2.4,-30.3 -6.4,-131.9 -6.4,-165.1 -0.1,-31.6 0.1,-36.4 2.1,-49.2 4.1,-26.16 10.5,-45.79 20.5,-62.79 3.8,-6.64 8.1,-11.89 16.2,-20.07 16.2,-16.34 30.2,-24.18 53.9,-30.38 19.3,-5.052 24.2,-5.554 53.1,-5.528 29.8,0.026 39.3,1.205 61.5,7.583 52,14.94 89.3,50.96 101.8,98.39 4.6,17.5 7.1,38.3 10.7,88.5 3.8,53.7 6.1,72.6 11.2,93.8 3.4,14.4 7.5,23.9 21.9,51 29,54.4 41,73.4 70.7,111.6 46.8,60.2 69.4,108 82.8,175 11.5,57.6 12.9,79.7 6.3,99.6 -4,12 -7.9,18 -21.6,33.1 -28.8,31.9 -60.9,51.9 -82.9,51.9 -20,0 -38.3,-13.6 -51.4,-38.3 -6.1,-13.6 -5.3,-24.5 -22.8,-20.6 -8.5,2.3 -15.5,12.6 -17.6,25.9 -1.6,9.5 -1.3,45.9 0.4,55 0.7,4.1 3.1,16.3 5.1,27 3.6,18.5 3.8,20.5 3.8,39.5 0,17.5 -0.4,22.8 -3.3,42 -2.7,18 -3.2,24.2 -2.9,34 0.4,11.4 0.6,12.5 4,19.6 4.1,9 13.1,19 20.9,24 17.2,11 41.2,12 61.4,2 5.7,-3 14,-9 28,-20 22.7,-18.4 39.6,-30.1 52.4,-36.6 4.9,-2.4 16.7,-6.9 26.2,-10 39.4,-12.7 57.4,-20.3 67.4,-28.6 11.9,-9.7 17.6,-20.2 15.5,-28.1 -2.7,-9.8 -14,-16.8 -37.1,-22.8 -17.4,-4.6 -21.6,-6.7 -28.7,-14.5 -6.3,-6.9 -11.2,-16.8 -14.8,-30 -3.5,-12.9 -4,-33.8 -1,-42 2.1,-5.8 4.2,-8.5 6.6,-8.5 2.8,0 4.2,4.9 5,18 1,14.6 3.3,22.3 10,32.1 9.5,14.1 19.6,23.2 42.5,38.4 23.9,15.8 30.5,23.4 30.5,35.5 0,11.5 -5.1,17.1 -31.1,34.6 -21.3,14.4 -29.3,19 -47.3,26.8 -35.5,15.5 -60.7,32.7 -87.8,59.7 -23.2,23 -33.3,30 -54,33 -9.3,1 -29.6,1 -41.5,-1 -25.2,-3 -38.9,-12 -50.4,-33 -7.3,-13 -10.7,-16 -19.5,-17 -3.8,0 -45.8,-1 -93.4,-1 -78.2,0 -87.6,1 -97.7,2 -27.4,5 -40.9,11 -65.3,31 -13.8,12 -20.1,16 -26.8,19 -5.5,2 -17.8,3 -23.7,2 z m 90.2,-64.5 c 2.2,-1.9 5.5,-6.3 7.4,-9.8 3,-5.6 3.4,-7.3 3.7,-15.9 0.7,-15.8 -2.7,-24.7 -13.9,-36.5 -7.7,-8.1 -8.8,-11.6 -4.4,-13.6 4.1,-1.8 9.3,0.5 18.6,8.3 17.6,14.9 28,17.4 66.4,16.6 41.3,-1 63.8,-5.3 86.5,-16.7 14.7,-7.4 24.4,-15.8 36.7,-32.1 8.7,-11.4 12.6,-15.3 17.5,-17.3 8.1,-3.4 12.4,3.2 12.2,18.9 -0.1,7.3 -0.9,11.9 -4.2,24.1 -9,32.5 -11.8,50.8 -9.3,60.1 1.5,5.4 6.2,9.5 10.5,9.1 3,-0.3 3.1,-0.5 3.9,-6.3 0.4,-3.3 2.1,-14.5 3.8,-25 1.6,-10.4 3.6,-23.9 4.5,-30 2.1,-15.8 3.7,-64.8 3.8,-118 0.1,-45.9 0.1,-46 2.5,-53 1.9,-5.4 3.6,-8.1 7.5,-12 6.1,-6 11.8,-8.2 24.7,-9.1 l 8.6,-0.7 1.2,-6.1 c 2.9,-13.9 11.2,-21.8 27.6,-26.2 5.3,-1.4 10.6,-1.9 22,-1.9 16.5,0 21.1,1 36,8.2 6.7,3.2 12.5,4.3 12.5,2.4 0,-1.5 -8.1,-9.1 -14.6,-13.7 -3.4,-2.5 -9.3,-5.7 -13,-7.2 -5.1,-2.1 -7,-3.4 -7.2,-4.9 -0.2,-1.2 1.3,-7.9 3.3,-15 5.8,-21 7.7,-34.3 7.8,-54.3 0.2,-32.9 -5.6,-54.7 -24.7,-91.6 -17.7,-34.2 -36.4,-59.3 -51.2,-68.7 -4.3,-2.6 -9.4,-4.4 -9.4,-3.3 0,0.4 3.6,5.7 7.9,11.9 20.4,28.9 41.6,65.8 50.6,88.3 7.3,18 12.8,42.4 14.5,64.6 2.9,36.4 -7,67.5 -24,75.1 -3.4,1.6 -7.2,2.2 -15.5,2.4 -13.2,0.5 -15,-0.2 -18.5,-7.2 l -2.5,-5 -0.6,-40 c -1.1,-68.1 -4.3,-79.7 -40,-144.2 -11,-19.8 -13.2,-25 -17.9,-43 -9.6,-37 -18.9,-58.7 -33.5,-78.3 -22.3,-29.8 -25.2,-42.2 -16.3,-69.7 5.7,-17.9 5.6,-27.1 -0.4,-33.2 -4.4,-4.5 -7.8,-6.1 -27.9,-12.5 -30.5,-9.7 -44.6,-18.4 -48.5,-29.9 -3.9,-11.3 -1.1,-29.7 5.9,-38.8 5,-6.6 11.4,-9.4 21.2,-9.4 6.5,0.1 9.1,0.6 13.6,2.6 6.9,3.3 12.4,8 15.2,13.3 3,5.7 2.9,19.2 -0.2,29.1 -5.1,16.1 -4.9,14.4 -1.3,17.6 6.5,5.8 16.8,6.3 21.3,0.9 3.9,-4.6 5.1,-9.3 5.6,-22.5 0.6,-14.4 -0.9,-24 -6.8,-42.1 -8.1,-24.8 -16.2,-32 -40.7,-36 -18.3,-3 -28.3,-0.6 -37.5,8.9 -14.4,15 -21.6,38.9 -18.7,62.9 1.6,13.3 1.3,13.9 -6.2,11.5 -6.7,-2.1 -21.4,-3.8 -29.9,-3.5 -9.1,0.4 -9.9,-0.4 -9.9,-10.6 -0.1,-41.5 -12.6,-64.1 -35.5,-63.9 -15.9,0 -28.8,12.1 -33.6,31.3 -1.9,7.5 -1.5,29 0.6,41.5 4.3,24.6 13.6,36.9 20.9,27.3 3,-4.1 5.6,-9.3 5.6,-11 0,-0.7 -2.3,-2.3 -5,-3.6 -3,-1.4 -5.7,-3.6 -6.9,-5.6 -5.7,-9.1 -8.5,-25.4 -6.1,-34.1 3.1,-11 18.2,-17.8 28.6,-12.9 8.8,4.2 18.2,23.6 17.2,35.8 -0.8,9.7 -2.6,12.7 -11.4,19.2 -4.4,3.2 -11.5,9 -15.9,12.9 -4.4,3.9 -9.8,8.4 -12,10 -11.2,8.1 -17.5,17.6 -17.5,26.6 0,5.9 2.4,9.1 9.9,12.8 5.9,3 11.2,8.2 16.8,16.4 7.5,10.8 16.4,14.2 36.8,14.1 24.9,-0.1 47.2,-5.4 89,-21 22.7,-8.5 29,-11.2 30.3,-13.2 3.7,-5.4 8,-9.2 10.6,-9.2 3.5,0 6.6,3.3 6.6,6.9 0,6.1 -9.4,11.1 -42,22.2 -9.6,3.3 -24.5,9.3 -33,13.3 -17.2,8.2 -22,9.9 -33.3,12.1 -9.3,1.8 -30.8,2 -42.6,0.4 -9.6,-1.3 -15.4,-0.6 -14.9,1.9 0.5,2.6 22.7,19.9 27.8,21.8 7.2,2.5 21.4,3 30.6,0.9 13.9,-3 57.8,-21.9 79.6,-34.1 7.3,-4.1 11.4,-5.8 14,-5.8 4.4,-0.1 7.8,2.7 7.8,6.2 0,3.8 -7.4,10.3 -15.5,13.7 -14.3,5.8 -17.3,7.4 -31.5,16.4 -19.4,12.4 -27.9,18.6 -40.7,29.8 -13.7,11.9 -17.6,13.5 -32.8,13.7 -12.1,0.1 -15.8,-1.1 -23.7,-7.9 -6.2,-5.3 -21,-23.7 -25.2,-31.4 -4.4,-8 -14.2,-19.1 -16.8,-19.1 -1.7,0 -1.9,0.4 -4.8,13 -2,9 -9.4,26 -21.4,49.5 -14.4,28.3 -15.1,30.8 -15.1,60.5 0,24.8 0.6,22.7 -11.5,39.5 -14.8,20.8 -37.8,75.1 -43.3,102.5 -4.2,20.5 -7.1,55.4 -6.3,75 0.6,15.6 -0.2,20.2 -3.9,22.5 -3.8,2.4 -8.3,-0.1 -17.6,-9.3 -14.6,-14.7 -19.3,-26.9 -19.2,-50.2 0.1,-14.8 1.4,-26.2 4.3,-37.2 2.5,-9.4 2.6,-12.1 0.3,-11.6 -2.4,0.4 -7.8,11.5 -10.4,21.4 -1.6,5.9 -2.2,12 -2.6,24.4 -0.4,15.2 -0.3,17.4 2.1,28 3,13.3 8.7,25.7 16.6,36.1 12.1,16 73.4,70.4 114.2,101.5 9.8,7.4 20.7,16.7 24.3,20.6 21.6,23.4 17.4,44.8 -12.1,61.3 -4.6,2.6 -8.4,4.9 -8.4,5.1 0,0.2 3.8,5.5 8.4,11.6 16.9,22.8 26.7,39.5 30.1,51.2 2.3,7.7 2.2,18.8 -0.3,25.9 -1,3.2 -1.6,5.8 -1.2,5.8 0.4,0 2.5,-2 4.7,-3.5 z M 373,253.9 c -3.1,-5.9 2.7,-11 12.6,-11 3.5,0 6.6,0.4 6.9,1 0.7,1.2 -2.7,3 -5.7,3 -1.8,0 -2.8,1 -4.3,4.3 -1.6,3.5 -2.5,4.3 -5.2,4.5 -2.4,0.2 -3.4,-0.2 -4.3,-1.8 z m 59.3,-4.3 c -5.8,-2.1 -10.3,-5 -9.2,-6.1 0.3,-0.3 3.7,-0.8 7.5,-1.2 9,-0.8 12.4,0.5 12.4,4.5 0,2 -0.7,3.4 -1.9,4.1 -1.1,0.5 -2.1,1 -2.3,0.9 -0.1,0 -3.1,-1 -6.5,-2.2 z M 224.1,529.9 c 9.6,-9.9 12.3,-14.9 11.7,-22 -0.3,-4.9 -2.2,-6.6 -6.2,-5.6 -2.9,0.7 -4.5,3.7 -7.1,12.8 -1.1,4.4 -2.9,7.3 -7,11.9 -5.5,6.2 -6.5,8.5 -4.3,10.7 2.3,2.3 4.2,1.2 12.9,-7.8 z M 608.7,361.1 c 2.1,-1.3 6.3,-11.6 6.3,-15.5 0,-3.1 -0.6,-4.5 -3.1,-6.8 -1.7,-1.6 -3.5,-2.9 -4,-2.9 -0.5,0 -4.4,-1.6 -8.7,-3.7 -5.2,-2.5 -9.8,-5.6 -14.3,-10 -3.6,-3.4 -7.1,-6.3 -7.7,-6.3 -0.6,0 -1.4,1.2 -1.8,2.6 -1.1,4.6 0.5,11.7 4.7,20.1 3.6,7.5 4.9,9 13.2,15.8 8.9,7.3 12.2,8.7 15.4,6.7 z M 368.1,227.2 c 1.2,-3.1 0.9,-5.5 -2.2,-15.6 -1.3,-4.4 -3.2,-8.1 -5.2,-10.3 -2.9,-3.1 -3.4,-3.3 -5.7,-2.1 -3.3,1.8 -3,5.8 0.9,10.2 2.9,3.3 5.4,9.6 6.6,16.8 0.8,4.6 4,5.2 5.6,1 z M 509,224.4 c 2.2,-2.6 0.6,-15 -2.4,-19.6 -3.1,-4.7 -10.3,-9 -16,-9.6 -3.8,-0.5 -4.5,-0.2 -5.6,1.7 -1.4,2.6 -0.7,3.4 4.2,4.9 6.2,2 11.9,10.5 13.4,19.9 0.6,3.5 1.1,4.2 2.9,4.2 1.3,0 2.8,-0.7 3.5,-1.5 z m 6.7,-134.7 c 7.2,-4.97 7.7,-5.19 14.6,-5.37 8.8,-0.23 10.7,-0.97 10.7,-4.07 0,-4.83 -16.6,-19.55 -23.6,-20.85 -7,-1.32 -9.5,2.48 -10.9,16.71 -0.6,5.32 -1.3,7.54 -3.6,10.39 -3.1,3.93 -3.6,6.24 -1.6,8.22 2,2.05 6.3,0.54 14.4,-5.03 z"
+ id="path3209"
+ style="fill:#000000" />
+ </g>
+ </g>
+</svg>
diff --git a/.config/awesome/lain b/.config/awesome/lain
new file mode 160000
+Subproject 245ab7c33a3261bd2730fdb054e888e31b26f1d
diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua
new file mode 100644
index 0000000..21f79e8
--- /dev/null
+++ b/.config/awesome/rc.lua
@@ -0,0 +1,874 @@
+-- Standard awesome library
+local gears = require("gears")
+local awful = require("awful")
+require("awful.autofocus")
+-- Widget and layout library
+local wibox = require("wibox")
+-- Theme handling library
+local beautiful = require("beautiful")
+-- Notification library
+local naughty = require("naughty")
+local menubar = require("menubar")
+local hotkeys_popup = require("awful.hotkeys_popup").widget
+
+-- Load Debian menu entries
+require("debian.menu")
+
+-- Load vicious
+vicious = require("vicious")
+vicious.contrib = require("vicious.contrib")
+
+-- Load lain
+lain = require("lain")
+lain.helpers = require("lain.helpers")
+
+-- Load run_once function
+require("functions.run_once")
+
+-- {{{ 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)
+if awesome.startup_errors then
+ naughty.notify({ preset = naughty.config.presets.critical,
+ title = "Oops, there were errors during startup!",
+ text = awesome.startup_errors })
+end
+
+-- Handle runtime errors after startup
+do
+ local in_error = false
+ awesome.connect_signal("debug::error", function (err)
+ -- Make sure we don't go into an endless error loop
+ if in_error then return end
+ in_error = true
+
+ naughty.notify({ preset = naughty.config.presets.critical,
+ title = "Oops, an error happened!",
+ text = tostring(err) })
+ in_error = false
+ end)
+end
+-- }}}
+
+-- {{{ Variable definitions
+configpath="/home/"..os.getenv("USER").."/.config/awesome/"
+
+-- Themes define colours, icons, font and wallpapers.
+beautiful.init(configpath .. "/theme.lua")
+
+-- This is used later as the default terminal and editor to run.
+terminal = "/usr/bin/urxvtcd"
+editor = os.getenv("EDITOR") or "editor"
+editor_cmd = terminal .. " -e " .. editor
+
+-- System Info
+local popen_cmds = io.popen("hostname -f; egrep -o '([0-9]+)\.([0-9]+)(.[0-9]+)\-([0-9]+)' /proc/sys/kernel/version")
+local hostname = popen_cmds:read("*l")
+local kernel = popen_cmds:read("*l")
+popen_cmds:close()
+
+-- Default modkey.
+-- Usually, Mod4 is the key with a logo between Control and Alt.
+-- If you do not like this or do not have such a key,
+-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
+-- However, you can use another modifier like Mod1, but it may interact with others.
+modkey = "Mod4"
+
+-- Static configs
+naughty.config.defaults.icon_size = 150
+
+-- Table of layouts to cover with awful.layout.inc, order matters.
+awful.layout.layouts = {
+ 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.floating,
+ awful.layout.suit.max,
+ -- awful.layout.suit.max.fullscreen,
+ -- awful.layout.suit.magnifier,
+ awful.layout.suit.corner.nw,
+ awful.layout.suit.corner.ne,
+ awful.layout.suit.corner.sw,
+ awful.layout.suit.corner.se,
+}
+-- }}}
+
+-- {{{ Helper functions
+local function client_menu_toggle_fn()
+ local instance = nil
+
+ return function ()
+ if instance and instance.wibox.visible then
+ instance:hide()
+ instance = nil
+ else
+ instance = awful.menu.clients({ theme = { width = 250 } })
+ end
+ end
+end
+-- }}}
+
+-- {{{ Menu
+-- Create a launcher widget and a main menu
+systemmenu = {
+ { "hotkeys", function() return false, hotkeys_popup.show_help end},
+ { "monitor standby", "sleep 2 && xset dpms force off" }, -- xset s blank
+ { "lock screen", "sleep 2 && xautolock -locknow"},
+ { "suspend", "systemctl suspend" },
+ { "hibernate", "systemctl hibernate" },
+ { "restart awesome", awesome.restart },
+ { "logoff", function() awesome.quit() end },
+ { "reboot to EFI", "systemctl reboot --firmware-setup" },
+ { "reboot", "systemctl reboot" },
+ { "halt", "systemctl poweroff" }
+}
+
+mymainmenu = awful.menu({ items = { { hostname , nil, beautiful.debian_icon },
+ { "linux " .. kernel, nil, beautiful.linux_icon },
+ { "awesome " .. awesome.version, nil, beautiful.awesome_icon },
+ { "" },
+ -- { "open terminal", terminal },
+ { "applications", debian.menu.Debian_menu.Debian },
+ { "system", systemmenu }
+ }
+ })
+
+mylauncher = awful.widget.launcher({ image = beautiful.debian_icon,
+ menu = mymainmenu })
+
+-- Menubar configuration
+menubar.utils.terminal = terminal -- Set the terminal for applications that require it
+-- }}}
+
+-- Keyboard map indicator and switcher
+mykeyboardlayout = awful.widget.keyboardlayout()
+
+-- {{{ Wibar
+-- Create a textclock widget
+mytextclock = wibox.widget.textclock("%a, %d %b %Y %H:%M")
+laincal = lain.widget.calendar({
+ attach_to = { mytextclock },
+ followtag = true,
+ cal = "/usr/bin/gcal -H no",
+ notification_preset = {
+ fg = "#FFFFFF",
+ bg = beautiful.bg_normal,
+ position = "bottom_right",
+ font = "dejavu sans mono 8"
+ }
+})
+
+-- {{ Divider widgets
+dividerwidget = wibox.widget.textbox()
+dividerwidget:set_text(" | ")
+
+ldividerwidget = wibox.widget.textbox()
+ldividerwidget:set_text("| ")
+
+rdividerwidget = wibox.widget.textbox()
+rdividerwidget:set_text(" |")
+
+spacewidget = wibox.widget.textbox()
+spacewidget:set_text(" ")
+-- }}
+
+-- {{ Load widget
+loadwidget = wibox.widget.textbox()
+vicious.cache(vicious.widgets.uptime)
+vicious.register(loadwidget, vicious.widgets.uptime, "load: $4, $5, $6", 3)
+loadwidget:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell(terminal .. " -n htop -e htop") end)
+ )
+ )
+-- }}
+
+-- {{ Memory widget
+memwidget = wibox.widget.textbox()
+vicious.cache(vicious.widgets.mem)
+vicious.register(memwidget, vicious.widgets.mem, "mem: $1%", 3)
+-- }}
+
+-- {{ CPU widget
+cpuwidget = wibox.widget.textbox()
+vicious.cache(vicious.widgets.cpu)
+vicious.register(cpuwidget, vicious.widgets.cpu, "cpu: $1%", 3)
+-- }}
+
+-- {{ Network widget
+netwidget = wibox.widget.textbox()
+vicious.cache(vicious.widgets.net)
+vicious.register(netwidget, vicious.widgets.net, "net: ↑${eth0 up_kb}kb/s↑ ↓${eth0 down_kb}kb/s↓", 3)
+-- }}
+
+-- {{ Volume widget
+volwidget = wibox.widget.textbox()
+volmenu = awful.menu({ items = { { "pavucontrol", function() awful.spawn.with_shell("/usr/bin/pavucontrol") end },
+ { "" },
+ { "headphones", function() awful.spawn.with_shell("pacmd set-default-sink headphones") end },
+ { "speakers", function() awful.spawn.with_shell("pacmd set-default-sink speakers") end }
+ }
+ })
+vicious.cache(vicious.contrib.pulse)
+vicious.register(volwidget, vicious.contrib.pulse,
+ function(widget, args)
+ local volvalue = nil
+ if args[1] == 0 then
+ volvalue = " M"
+ else
+ volvalue = args[1]
+ end
+ return "vol: " .. volvalue .. "%"
+ end, 1, "alsa_output.pci-0000_05_00.0.analog-surround-71" )
+volwidget:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("pactl set-sink-mute 0 toggle") end),
+ awful.button({ }, 3, function() volmenu:show() end),
+ awful.button({ }, 4, function() awful.spawn.with_shell("pactl set-sink-volume 0 +5%") end),
+ awful.button({ }, 5, function() awful.spawn.with_shell("pactl set-sink-volume 0 -5%") end)
+ )
+ )
+-- }}
+
+-- {{ Package widget
+pkgwidget = wibox.widget.textbox()
+vicious.cache(vicious.widgets.pkg)
+vicious.register(pkgwidget, vicious.widgets.pkg, "pkg: $1", 1800, "Debian")
+-- }}
+
+-- {{ Weather widget
+weatherwidget = lain.widget.weather({
+ city_id = 2964574, -- Dublin, Ireland
+ units = "metric",
+ cnt = 1,
+ forecast_call = "curl -s 'http://api.openweathermap.org/data/2.5/forecast?id=%s&units=%s&lang=%s&cnt=%s&APPID=%s'",
+ notification_preset = {fg = "#FFFFFF",bg = beautiful.bg_normal,position = "bottom_right",font = "dejavu sans mono 8" },
+ notification_text_fun = function(wn)
+ --local day = os.date("%A", wn["dt"])
+ local desc = wn["weather"][1]["description"]
+ local temp = math.floor(wn["main"]["temp"])
+ --local sunrise = tonumber(wn["sys"]["sunrise"])
+ local pres = math.floor(wn["main"]["pressure"])
+ local humi = math.floor(wn["main"]["humidity"])
+ local wspe = math.floor(wn["wind"]["speed"])
+ local wdeg = math.floor(wn["wind"]["deg"])
+ local clou = math.floor(wn["clouds"]["all"])
+ local rain3h = 0
+ if wn["rain"]["3h"] then
+ rain3h = math.floor(wn["rain"]["3h"])
+ end
+
+ -- format infos as you like, HTML text markup is allowed
+ return string.format("%s<br>temperature: %d°C<br>pressure: %dhPa<br>humidity: %d%%<br>wind: %d m/s at %d°<br>cloudliness: %d%%<br>rain: %d mm", desc, temp, pres, humi, wspe, wdeg, clou, rain3h)
+ end,
+ settings = function()
+ units = math.floor(weather_now["main"]["temp"])
+ widget:set_text(units .. "°C")
+ end
+})
+weatherwidget.widget:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/firefox http://www.met.ie/latest/rainfall_radar.asp") end),
+ awful.button({ }, 3, function() awful.spawn.with_shell("/usr/bin/firefox http://www.met.ie/forecasts/5day-ireland.asp") end)
+ )
+ )
+
+
+-- {{ gmusicbrowser widget (set using awesome-client)
+gmbwidget = wibox.widget.textbox()
+gmbwidget:set_text("music: nothing playing")
+gmbwidget:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/gmusicbrowser -cmd PlayPause") end),
+ awful.button({ }, 3, function() screen[2].tags[3]:view_only() end),
+ awful.button({ }, 4, function() awful.spawn.with_shell("/usr/bin/gmusicbrowser -cmd NextSong -ifnotrunning abort") end),
+ awful.button({ }, 5, function() awful.spawn.with_shell("/usr/bin/gmusicbrowser -cmd PrevSong -ifnotrunning abort") end)
+ )
+ )
+-- }}
+
+-- {{ quodlibet widget (using quodlibet dbus signal)
+quodlibetwidget = wibox.widget.textbox()
+quodlibetwidget:set_text("music: nothing playing")
+dbus.add_match("session", "interface='net.sacredchao.QuodLibet'")
+dbus.connect_signal("net.sacredchao.QuodLibet", function(...)
+ local dbussignal = {...}
+ if dbussignal[1].member == 'SongStarted' then
+ quodlibetwidget:set_text("music: " .. dbussignal[2].title .. " by " .. dbussignal[2].artist )
+ else if dbussignal[1].member == 'SongEnded' then
+ quodlibetwidget:set_text("music: nothing playing")
+ end
+ end
+ end)
+quodlibetwidget:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/quodlibet --run --play-pause") end),
+ --awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/xdotool key ctrl+shift+8") end),
+ awful.button({ }, 3, function() screen[2].tags[3]:view_only() end),
+ awful.button({ }, 4, function() awful.spawn.with_shell("/usr/bin/quodlibet --next") end),
+ awful.button({ }, 5, function() awful.spawn.with_shell("/usr/bin/quodlibet --force-previous") end)
+ )
+ )
+-- }}
+
+-- {{ Quicklaunch
+quicklaunch_urxvt = wibox.widget.imagebox()
+quicklaunch_urxvt:set_image("/usr/share/pixmaps/urxvt_32x32.xpm")
+quicklaunch_urxvt:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/urxvt") end)
+ )
+ )
+
+quicklaunch_firefox = wibox.widget.imagebox()
+quicklaunch_firefox:set_image("/usr/share/icons/hicolor/32x32/apps/firefox.png")
+quicklaunch_firefox:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/firefox") end),
+ awful.button({ }, 3, function() awful.spawn.with_shell("/usr/bin/firefox -private-window") end)
+ )
+ )
+
+quicklaunch_chromium = wibox.widget.imagebox()
+quicklaunch_chromium:set_image("/usr/share/icons/hicolor/48x48/apps/chromium.png")
+quicklaunch_chromium:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/chromium %U --incognito --user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\"" ) end),
+ awful.button({ }, 3, function() awful.spawn.with_shell("/usr/bin/chromium %U --incognito --user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\" --disable-plugins --disable-bundled-ppapi-flash --proxy-server=alpha:8123 --host-resolver-rules=\"MAP * 0.0.0.0 , EXCLUDE alpha\" http://check.torproject.org") end)
+ )
+ )
+
+quicklaunch_chrome = wibox.widget.imagebox()
+quicklaunch_chrome:set_image("/opt/google/chrome/product_logo_64.png")
+quicklaunch_chrome:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/google-chrome") end)
+ )
+ )
+
+quicklaunch_torbrowser = wibox.widget.imagebox()
+quicklaunch_torbrowser:set_image("/usr/share/pixmaps/torbrowser.png")
+quicklaunch_torbrowser:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/torbrowser-launcher" ) end)
+ )
+ )
+
+quicklaunch_chrome_gpm = wibox.widget.imagebox()
+quicklaunch_chrome_gpm:set_image("/home/jmccrohan/.config/awesome/icons/googleplaymusic.png")
+quicklaunch_chrome_gpm:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/google-chrome --app=https://play.google.com/music/listen") end)
+ )
+ )
+
+quicklaunch_mutt = wibox.widget.imagebox()
+quicklaunch_mutt:set_image("/usr/share/pixmaps/mutt.xpm")
+quicklaunch_mutt:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() os.execute("sleep 1"); awful.spawn.with_shell(terminal .. " -n mutt -e mutt") end)
+ )
+ )
+
+quicklaunch_vlc = wibox.widget.imagebox()
+quicklaunch_vlc:set_image("/usr/share/icons/hicolor/32x32/apps/vlc.png")
+quicklaunch_vlc:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/vlc") end)
+ )
+ )
+
+--quicklaunch_gmusicbrowser = wibox.widget.imagebox()
+--quicklaunch_gmusicbrowser:set_image("/usr/share/icons/hicolor/32x32/apps/gmusicbrowser.png")
+--quicklaunch_gmusicbrowser:buttons(awful.util.table.join(
+-- )
+-- )
+
+quicklaunch_quodlibet = wibox.widget.imagebox()
+quicklaunch_quodlibet:set_image("/usr/share/icons/hicolor/64x64/apps/quodlibet.png")
+quicklaunch_quodlibet:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/quodlibet") end)
+ )
+ )
+
+quicklaunch_virtmanager = wibox.widget.imagebox()
+quicklaunch_virtmanager:set_image("/usr/share/icons/hicolor/32x32/apps/virt-manager.png")
+quicklaunch_virtmanager:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/virt-manager") end)
+ )
+ )
+
+quicklaunch_remmina = wibox.widget.imagebox()
+quicklaunch_remmina:set_image("/usr/share/icons/hicolor/32x32/apps/remmina.png")
+quicklaunch_remmina:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/remmina") end)
+ )
+ )
+
+quicklaunch_thunar = wibox.widget.imagebox()
+quicklaunch_thunar:set_image("/usr/share/icons/gnome/32x32/places/user-home.png")
+quicklaunch_thunar:buttons(awful.util.table.join(
+ awful.button({ }, 1, function() awful.spawn.with_shell("/usr/bin/thunar") end)
+ )
+ )
+
+-- Create Quicklaunch wibox
+local quicklaunch = wibox.layout.fixed.horizontal()
+quicklaunch:add(quicklaunch_urxvt)
+quicklaunch:add(quicklaunch_firefox)
+quicklaunch:add(quicklaunch_mutt)
+quicklaunch:add(quicklaunch_quodlibet)
+quicklaunch:add(quicklaunch_chrome_gpm)
+quicklaunch:add(quicklaunch_chromium)
+quicklaunch:add(quicklaunch_chrome)
+quicklaunch:add(quicklaunch_torbrowser)
+quicklaunch:add(quicklaunch_vlc)
+quicklaunch:add(quicklaunch_virtmanager)
+quicklaunch:add(quicklaunch_remmina)
+quicklaunch:add(quicklaunch_thunar)
+--}}
+
+-- Create a wibox for each screen and add it
+local taglist_buttons = awful.util.table.join(
+ awful.button({ }, 1, function(t) t:view_only() end),
+ awful.button({ modkey }, 1, function(t)
+ if client.focus then
+ client.focus:move_to_tag(t)
+ end
+ end),
+ awful.button({ }, 3, awful.tag.viewtoggle),
+ awful.button({ modkey }, 3, function(t)
+ if client.focus then
+ client.focus:toggle_tag(t)
+ end
+ end),
+ awful.button({ }, 4, function(t) awful.tag.viewnext(t.screen) end),
+ awful.button({ }, 5, function(t) awful.tag.viewprev(t.screen) end)
+ )
+
+local tasklist_buttons = awful.util.table.join(
+ awful.button({ }, 1, function (c)
+ if c == client.focus then
+ c.minimized = true
+ else
+ -- Without this, the following
+ -- :isvisible() makes no sense
+ c.minimized = false
+ if not c:isvisible() and c.first_tag then
+ c.first_tag:view_only()
+ end
+ -- This will also un-minimize
+ -- the client, if needed
+ client.focus = c
+ c:raise()
+ end
+ end),
+ awful.button({ }, 3, client_menu_toggle_fn()),
+ awful.button({ }, 4, function ()
+ awful.client.focus.byidx(1)
+ end),
+ awful.button({ }, 5, function ()
+ awful.client.focus.byidx(-1)
+ end))
+
+local function set_wallpaper(s)
+ -- Wallpaper
+ if beautiful.wallpaper then
+ local wallpaper = beautiful.wallpaper
+ -- If wallpaper is a function, call it with the screen
+ if type(wallpaper) == "function" then
+ wallpaper = wallpaper(s)
+ end
+ gears.wallpaper.maximized(wallpaper, s, true)
+ end
+end
+
+-- Re-set wallpaper when a screen's geometry changes (e.g. different resolution)
+screen.connect_signal("property::geometry", set_wallpaper)
+
+awful.screen.connect_for_each_screen(function(s)
+ -- Wallpaper
+ set_wallpaper(s)
+
+ -- Each screen has its own tag table.
+ awful.tag({ "", "", "", "", "", "" }, s, awful.layout.layouts[1])
+
+ -- Create a promptbox for each screen
+ s.mypromptbox = awful.widget.prompt()
+ -- Create an imagebox widget which will contains an icon indicating which layout we're using.
+ -- We need one layoutbox per screen.
+ s.mylayoutbox = awful.widget.layoutbox(s)
+ s.mylayoutbox:buttons(awful.util.table.join(
+ awful.button({ }, 1, function () awful.layout.inc( 1) end),
+ awful.button({ }, 3, function () awful.layout.inc(-1) end),
+ awful.button({ }, 4, function () awful.layout.inc( 1) end),
+ awful.button({ }, 5, function () awful.layout.inc(-1) end)))
+ -- Create a taglist widget
+ s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, taglist_buttons)
+
+ -- Create a tasklist widget
+ s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, tasklist_buttons)
+
+ -- Create the wibox
+ s.mywibox = awful.wibar({ position = "bottom", height = "15", screen = s })
+
+ -- Add widgets to the wibox
+ s.mywibox:setup {
+ layout = wibox.layout.align.horizontal,
+ { -- Left widgets
+ layout = wibox.layout.fixed.horizontal,
+ s.index == 1 and mylauncher,
+ s.index == 1 and spacewidget,
+ s.index == 1 and spacewidget,
+ s.index == 1 and spacewidget,
+ s.index == 1 and spacewidget,
+ s.index == 1 and quicklaunch,
+ s.index == 1 and spacewidget,
+ s.index == 1 and spacewidget,
+ s.index == 1 and spacewidget,
+ s.index == 1 and spacewidget,
+
+ s.mypromptbox,
+ },
+ s.mytasklist, -- Middle widget
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ s.index == 1 and mykeyboardlayout,
+ s.index == 1 and wibox.widget.systray(),
+ s.index == 1 and dividerwidget,
+ s.index == 1 and volwidget,
+ s.index == 1 and dividerwidget,
+ s.index == 1 and weatherwidget,
+ s.index == 1 and dividerwidget,
+ s.index == 1 and mytextclock,
+
+ s.index == 2 and ldividerwidget,
+ s.index == 2 and quodlibetwidget,
+ s.index == 2 and dividerwidget,
+ s.index == 2 and loadwidget,
+ s.index == 2 and dividerwidget,
+ s.index == 2 and memwidget,
+ s.index == 2 and dividerwidget,
+ s.index == 2 and netwidget,
+ s.index == 2 and dividerwidget,
+ s.index == 2 and pkgwidget,
+
+ s.mylayoutbox,
+ s.mytaglist,
+ },
+ }
+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)
+))
+-- }}}
+
+-- {{{ Key bindings
+globalkeys = awful.util.table.join(
+ awful.key({ modkey, }, "s", hotkeys_popup.show_help,
+ {description="show help", group="awesome"}),
+ awful.key({ modkey, }, "Left", awful.tag.viewprev,
+ {description = "view previous", group = "tag"}),
+ awful.key({ modkey, }, "Right", awful.tag.viewnext,
+ {description = "view next", group = "tag"}),
+ awful.key({ modkey, }, "Escape", awful.tag.history.restore,
+ {description = "go back", group = "tag"}),
+
+ awful.key({ modkey, }, "j",
+ function ()
+ awful.client.focus.byidx( 1)
+ end,
+ {description = "focus next by index", group = "client"}
+ ),
+ awful.key({ modkey, }, "k",
+ function ()
+ awful.client.focus.byidx(-1)
+ end,
+ {description = "focus previous by index", group = "client"}
+ ),
+ awful.key({ modkey, }, "w", function () mymainmenu:show() end,
+ {description = "show main menu", group = "awesome"}),
+
+ -- Layout manipulation
+ awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end,
+ {description = "swap with next client by index", group = "client"}),
+ awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end,
+ {description = "swap with previous client by index", group = "client"}),
+ awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end,
+ {description = "focus the next screen", group = "screen"}),
+ awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end,
+ {description = "focus the previous screen", group = "screen"}),
+ awful.key({ modkey, }, "u", awful.client.urgent.jumpto,
+ {description = "jump to urgent client", group = "client"}),
+ awful.key({ modkey, }, "Tab",
+ function ()
+ awful.client.focus.history.previous()
+ if client.focus then
+ client.focus:raise()
+ end
+ end,
+ {description = "go back", group = "client"}),
+
+ -- Standard program
+ awful.key({ modkey, }, "Return", function () awful.spawn(terminal) end,
+ {description = "open a terminal", group = "launcher"}),
+ awful.key({ modkey, "Control" }, "r", awesome.restart,
+ {description = "reload awesome", group = "awesome"}),
+ awful.key({ modkey, "Shift" }, "q", awesome.quit,
+ {description = "quit awesome", group = "awesome"}),
+
+ awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end,
+ {description = "increase master width factor", group = "layout"}),
+ awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end,
+ {description = "decrease master width factor", group = "layout"}),
+ awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end,
+ {description = "increase the number of master clients", group = "layout"}),
+ awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end,
+ {description = "decrease the number of master clients", group = "layout"}),
+ awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end,
+ {description = "increase the number of columns", group = "layout"}),
+ awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end,
+ {description = "decrease the number of columns", group = "layout"}),
+ awful.key({ modkey, }, "space", function () awful.layout.inc( 1) end,
+ {description = "select next", group = "layout"}),
+ awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(-1) end,
+ {description = "select previous", group = "layout"}),
+
+ awful.key({ modkey, "Control" }, "n",
+ function ()
+ local c = awful.client.restore()
+ -- Focus restored client
+ if c then
+ client.focus = c
+ c:raise()
+ end
+ end,
+ {description = "restore minimized", group = "client"}),
+
+ -- Prompt
+ awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() end,
+ {description = "run prompt", group = "launcher"}),
+
+ awful.key({ modkey }, "x",
+ function ()
+ awful.prompt.run {
+ prompt = "Run Lua code: ",
+ textbox = awful.screen.focused().mypromptbox.widget,
+ exe_callback = awful.util.eval,
+ history_path = awful.util.get_cache_dir() .. "/history_eval"
+ }
+ end,
+ {description = "lua execute prompt", group = "awesome"}),
+ -- Menubar
+ awful.key({ modkey }, "p", function() menubar.show() end,
+ {description = "show the menubar", group = "launcher"})
+)
+
+clientkeys = awful.util.table.join(
+ awful.key({ modkey, }, "f",
+ function (c)
+ c.fullscreen = not c.fullscreen
+ c:raise()
+ end,
+ {description = "toggle fullscreen", group = "client"}),
+ awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end,
+ {description = "close", group = "client"}),
+ awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ,
+ {description = "toggle floating", group = "client"}),
+ awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end,
+ {description = "move to master", group = "client"}),
+ awful.key({ modkey, }, "o", function (c) c:move_to_screen() end,
+ {description = "move to screen", group = "client"}),
+ awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end,
+ {description = "toggle keep on top", group = "client"}),
+ 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 ,
+ {description = "minimize", group = "client"}),
+ awful.key({ modkey, }, "m",
+ function (c)
+ c.maximized = not c.maximized
+ c:raise()
+ end ,
+ {description = "maximize", group = "client"})
+)
+
+-- 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,
+ -- View tag only.
+ awful.key({ modkey }, "#" .. i + 9,
+ function ()
+ local screen = awful.screen.focused()
+ local tag = screen.tags[i]
+ if tag then
+ tag:view_only()
+ end
+ end,
+ {description = "view tag #"..i, group = "tag"}),
+ -- Toggle tag display.
+ awful.key({ modkey, "Control" }, "#" .. i + 9,
+ function ()
+ local screen = awful.screen.focused()
+ local tag = screen.tags[i]
+ if tag then
+ awful.tag.viewtoggle(tag)
+ end
+ end,
+ {description = "toggle tag #" .. i, group = "tag"}),
+ -- Move client to tag.
+ awful.key({ modkey, "Shift" }, "#" .. i + 9,
+ function ()
+ if client.focus then
+ local tag = client.focus.screen.tags[i]
+ if tag then
+ client.focus:move_to_tag(tag)
+ end
+ end
+ end,
+ {description = "move focused client to tag #"..i, group = "tag"}),
+ -- Toggle tag on focused client.
+ awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
+ function ()
+ if client.focus then
+ local tag = client.focus.screen.tags[i]
+ if tag then
+ client.focus:toggle_tag(tag)
+ end
+ end
+ end,
+ {description = "toggle focused client on tag #" .. i, group = "tag"})
+ )
+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
+-- Rules to apply to new clients (through the "manage" signal).
+awful.rules.rules = {
+ -- All clients will match this rule.
+ { rule = { },
+ properties = { border_width = beautiful.border_width,
+ border_color = beautiful.border_normal,
+ focus = awful.client.focus.filter,
+ raise = true,
+ keys = clientkeys,
+ buttons = clientbuttons,
+ size_hints_honor = false,
+ screen = awful.screen.preferred,
+ placement = awful.placement.no_overlap+awful.placement.no_offscreen
+ }
+ },
+
+ { rule = { class = "gimp" }, properties = { floating = true } },
+ { rule = { class = "Firefox" }, properties = { floating = true } },
+ { rule = { class = "Firefox", instance = "Navigator" }, properties = { tag = screen[1].tags[1], floating = false } },
+ { rule = { class = "Thunar" }, properties = { tag = screen[1].tags[2], switchtotag = true } },
+ { rule = { class = "Evince" }, properties = { tag = screen[1].tags[3], switchtotag = true } },
+ { rule = { class = "Eog" }, properties = { tag = screen[1].tags[4], switchtotag = true } },
+ { rule = { name = "mutt" }, properties = { tag = screen[2].tags[2] } },
+ { rule = { class = "Gmusicbrowser" }, properties = { tag = screen[2].tags[3] } },
+ { rule = { class = "Quodlibet" }, properties = { tag = screen[2].tags[3] } },
+ { rule = { class = "Google-chrome", instance = "play.google.com__music" }, properties = { tag = screen[2].tags[3] } },
+ { rule = { class = "Steam" }, properties = { floating = true, tag = screen[2].tags[4] } },
+ { rule = { instance = "plugin-container" }, properties = { floating = true }, callback = awful.titlebar.add },
+ { rule = { instance = "exe", class = "Exe" }, properties = { floating = true } },
+ { rule = { class = "Wine" }, properties = { floating = true } },
+
+ -- Add titlebars to normal clients and dialogs
+ --{ rule_any = {type = { "normal", "dialog" }
+ -- }, properties = { titlebars_enabled = true }
+ --},
+
+ -- Set Firefox to always map on the tag named "2" on screen 1.
+ -- { rule = { class = "Firefox" },
+ -- properties = { screen = 1, tag = "2" } },
+}
+-- }}}
+
+-- {{{ Signals
+-- Signal function to execute when a new client appears.
+client.connect_signal("manage", function (c)
+ -- Set the windows at the slave,
+ -- i.e. put it at the end of others instead of setting it master.
+ -- if not awesome.startup then awful.client.setslave(c) end
+
+ 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)
+
+-- Add a titlebar if titlebars_enabled is set to true in the rules.
+client.connect_signal("request::titlebars", function(c)
+ -- buttons for the titlebar
+ local buttons = awful.util.table.join(
+ awful.button({ }, 1, function()
+ client.focus = c
+ c:raise()
+ awful.mouse.client.move(c)
+ end),
+ awful.button({ }, 3, function()
+ client.focus = c
+ c:raise()
+ awful.mouse.client.resize(c)
+ end)
+ )
+
+ awful.titlebar(c) : setup {
+ { -- Left
+ awful.titlebar.widget.iconwidget(c),
+ buttons = buttons,
+ layout = wibox.layout.fixed.horizontal
+ },
+ { -- Middle
+ { -- Title
+ align = "center",
+ widget = awful.titlebar.widget.titlewidget(c)
+ },
+ buttons = buttons,
+ layout = wibox.layout.flex.horizontal
+ },
+ { -- Right
+ awful.titlebar.widget.floatingbutton (c),
+ awful.titlebar.widget.maximizedbutton(c),
+ awful.titlebar.widget.stickybutton (c),
+ awful.titlebar.widget.ontopbutton (c),
+ awful.titlebar.widget.closebutton (c),
+ layout = wibox.layout.fixed.horizontal()
+ },
+ layout = wibox.layout.align.horizontal
+ }
+end)
+
+-- Enable sloppy focus, so that focus follows mouse.
+client.connect_signal("mouse::enter", function(c)
+ if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
+ and awful.client.focus.filter(c) then
+ client.focus = c
+ end
+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)
+-- }}}
+
+-- {{{ Startup Apps
+run_once("redshift")
+run_once("xbindkeys")
+-- run_once("parcellite", "parcellite --no-icon")
+run_once("nitrogen", "nitrogen --restore")
+run_once("xautolock", "xautolock -time 20 -locker 'i3lock -denc 000000' -killtime 60 -killer 'systemctl suspend' -detectsleep")
+run_once("pulseaudio", "pulseaudio --daemonize")
+-- }}}
diff --git a/.config/awesome/stock/binds.lua b/.config/awesome/stock/binds.lua
new file mode 100644
index 0000000..73bc09c
--- /dev/null
+++ b/.config/awesome/stock/binds.lua
@@ -0,0 +1,204 @@
+local awful = require("awful")
+local menubar = require("menubar")
+local hotkeys_popup = require("awful.hotkeys_popup").widget
+
+
+-- {{{ 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)
+))
+-- }}}
+
+-- {{{ Key bindings
+globalkeys = awful.util.table.join(
+ awful.key({ modkey, }, "s", hotkeys_popup.show_help,
+ {description="show help", group="awesome"}),
+ awful.key({ modkey, }, "Left", awful.tag.viewprev,
+ {description = "view previous", group = "tag"}),
+ awful.key({ modkey, }, "Right", awful.tag.viewnext,
+ {description = "view next", group = "tag"}),
+ awful.key({ modkey, }, "Escape", awful.tag.history.restore,
+ {description = "go back", group = "tag"}),
+
+ awful.key({ modkey, }, "j",
+ function ()
+ awful.client.focus.byidx( 1)
+ end,
+ {description = "focus next by index", group = "client"}
+ ),
+ awful.key({ modkey, }, "k",
+ function ()
+ awful.client.focus.byidx(-1)
+ end,
+ {description = "focus previous by index", group = "client"}
+ ),
+ awful.key({ modkey, }, "w", function () mymainmenu:show() end,
+ {description = "show main menu", group = "awesome"}),
+
+ -- Layout manipulation
+ awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end,
+ {description = "swap with next client by index", group = "client"}),
+ awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end,
+ {description = "swap with previous client by index", group = "client"}),
+ awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end,
+ {description = "focus the next screen", group = "screen"}),
+ awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end,
+ {description = "focus the previous screen", group = "screen"}),
+ awful.key({ modkey, }, "u", awful.client.urgent.jumpto,
+ {description = "jump to urgent client", group = "client"}),
+ awful.key({ modkey, }, "Tab",
+ function ()
+ awful.client.focus.history.previous()
+ if client.focus then
+ client.focus:raise()
+ end
+ end,
+ {description = "go back", group = "client"}),
+
+ -- Standard program
+ awful.key({ modkey, }, "Return", function () awful.spawn(terminal) end,
+ {description = "open a terminal", group = "launcher"}),
+ awful.key({ modkey, "Control" }, "r", awesome.restart,
+ {description = "reload awesome", group = "awesome"}),
+ awful.key({ modkey, "Shift" }, "q", awesome.quit,
+ {description = "quit awesome", group = "awesome"}),
+
+ awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end,
+ {description = "increase master width factor", group = "layout"}),
+ awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end,
+ {description = "decrease master width factor", group = "layout"}),
+ awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end,
+ {description = "increase the number of master clients", group = "layout"}),
+ awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end,
+ {description = "decrease the number of master clients", group = "layout"}),
+ awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end,
+ {description = "increase the number of columns", group = "layout"}),
+ awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end,
+ {description = "decrease the number of columns", group = "layout"}),
+ awful.key({ modkey, }, "space", function () awful.layout.inc( 1) end,
+ {description = "select next", group = "layout"}),
+ awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(-1) end,
+ {description = "select previous", group = "layout"}),
+
+ awful.key({ modkey, "Control" }, "n",
+ function ()
+ local c = awful.client.restore()
+ -- Focus restored client
+ if c then
+ client.focus = c
+ c:raise()
+ end
+ end,
+ {description = "restore minimized", group = "client"}),
+
+ -- Prompt
+ --awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end,
+ -- {description = "run prompt", group = "launcher"}),
+ awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() end,
+ {description = "run prompt", group = "launcher"}),
+
+ awful.key({ modkey }, "x",
+ function ()
+ awful.prompt.run {
+ prompt = "Run Lua code: ",
+ textbox = awful.screen.focused().mypromptbox.widget,
+ exe_callback = awful.util.eval,
+ history_path = awful.util.get_cache_dir() .. "/history_eval"
+ }
+ end,
+ {description = "lua execute prompt", group = "awesome"}),
+ -- Menubar
+ awful.key({ modkey }, "p", function() menubar.show() end,
+ {description = "show the menubar", group = "launcher"})
+)
+
+clientkeys = awful.util.table.join(
+ awful.key({ modkey, }, "f",
+ function (c)
+ c.fullscreen = not c.fullscreen
+ c:raise()
+ end,
+ {description = "toggle fullscreen", group = "client"}),
+ awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end,
+ {description = "close", group = "client"}),
+ awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ,
+ {description = "toggle floating", group = "client"}),
+ awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end,
+ {description = "move to master", group = "client"}),
+ awful.key({ modkey, }, "o", function (c) c:move_to_screen() end,
+ {description = "move to screen", group = "client"}),
+ awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end,
+ {description = "toggle keep on top", group = "client"}),
+ 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 ,
+ {description = "minimize", group = "client"}),
+ awful.key({ modkey, }, "m",
+ function (c)
+ c.maximized = not c.maximized
+ c:raise()
+ end ,
+ {description = "maximize", group = "client"})
+)
+
+-- 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,
+ -- View tag only.
+ awful.key({ modkey }, "#" .. i + 9,
+ function ()
+ local screen = awful.screen.focused()
+ local tag = screen.tags[i]
+ if tag then
+ tag:view_only()
+ end
+ end,
+ {description = "view tag #"..i, group = "tag"}),
+ -- Toggle tag display.
+ awful.key({ modkey, "Control" }, "#" .. i + 9,
+ function ()
+ local screen = awful.screen.focused()
+ local tag = screen.tags[i]
+ if tag then
+ awful.tag.viewtoggle(tag)
+ end
+ end,
+ {description = "toggle tag #" .. i, group = "tag"}),
+ -- Move client to tag.
+ awful.key({ modkey, "Shift" }, "#" .. i + 9,
+ function ()
+ if client.focus then
+ local tag = client.focus.screen.tags[i]
+ if tag then
+ client.focus:move_to_tag(tag)
+ end
+ end
+ end,
+ {description = "move focused client to tag #"..i, group = "tag"}),
+ -- Toggle tag on focused client.
+ awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
+ function ()
+ if client.focus then
+ local tag = client.focus.screen.tags[i]
+ if tag then
+ client.focus:toggle_tag(tag)
+ end
+ end
+ end,
+ {description = "toggle focused client on tag #" .. i, group = "tag"})
+ )
+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))
+
+
diff --git a/.config/awesome/stock/signals.lua b/.config/awesome/stock/signals.lua
new file mode 100644
index 0000000..2c6b1ef
--- /dev/null
+++ b/.config/awesome/stock/signals.lua
@@ -0,0 +1,73 @@
+awful = require("awful")
+beautiful = require("beautiful")
+
+-- {{{ Signals
+-- Signal function to execute when a new client appears.
+client.connect_signal("manage", function (c)
+ -- Set the windows at the slave,
+ -- i.e. put it at the end of others instead of setting it master.
+ -- if not awesome.startup then awful.client.setslave(c) end
+
+ 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)
+
+-- Add a titlebar if titlebars_enabled is set to true in the rules.
+client.connect_signal("request::titlebars", function(c)
+ -- buttons for the titlebar
+ local buttons = awful.util.table.join(
+ awful.button({ }, 1, function()
+ client.focus = c
+ c:raise()
+ awful.mouse.client.move(c)
+ end),
+ awful.button({ }, 3, function()
+ client.focus = c
+ c:raise()
+ awful.mouse.client.resize(c)
+ end)
+ )
+
+ awful.titlebar(c) : setup {
+ { -- Left
+ awful.titlebar.widget.iconwidget(c),
+ buttons = buttons,
+ layout = wibox.layout.fixed.horizontal
+ },
+ { -- Middle
+ { -- Title
+ align = "center",
+ widget = awful.titlebar.widget.titlewidget(c)
+ },
+ buttons = buttons,
+ layout = wibox.layout.flex.horizontal
+ },
+ { -- Right
+ awful.titlebar.widget.floatingbutton (c),
+ awful.titlebar.widget.maximizedbutton(c),
+ awful.titlebar.widget.stickybutton (c),
+ awful.titlebar.widget.ontopbutton (c),
+ awful.titlebar.widget.closebutton (c),
+ layout = wibox.layout.fixed.horizontal()
+ },
+ layout = wibox.layout.align.horizontal
+ }
+end)
+
+-- Enable sloppy focus, so that focus follows mouse.
+client.connect_signal("mouse::enter", function(c)
+ if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
+ and awful.client.focus.filter(c) then
+ client.focus = c
+ end
+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)
+-- }}}
+
+
diff --git a/.config/awesome/theme.lua b/.config/awesome/theme.lua
new file mode 100644
index 0000000..35ef62f
--- /dev/null
+++ b/.config/awesome/theme.lua
@@ -0,0 +1,110 @@
+---------------------------
+-- Default awesome theme --
+---------------------------
+
+local theme = {}
+
+theme.font = "dejavu sans 7"
+
+theme.bg_normal = "#222222"
+theme.bg_focus = "#222222"
+theme.bg_urgent = "#ff0000"
+theme.bg_minimize = "#444444"
+theme.bg_systray = theme.bg_normal
+
+theme.fg_normal = "#aaaaaa"
+theme.fg_focus = "#ffffff"
+theme.fg_urgent = "#ffffff"
+theme.fg_minimize = "#ffffff"
+
+theme.useless_gap = 0
+theme.border_width = 1
+theme.border_normal = "#000000"
+theme.border_focus = "#535d6c"
+theme.border_marked = "#91231c"
+
+-- There are other variable sets
+-- overriding the default one when
+-- defined, the sets are:
+-- taglist_[bg|fg]_[focus|urgent|occupied|empty]
+-- tasklist_[bg|fg]_[focus|urgent]
+-- titlebar_[bg|fg]_[normal|focus]
+-- tooltip_[font|opacity|fg_color|bg_color|border_width|border_color]
+-- mouse_finder_[color|timeout|animate_timeout|radius|factor]
+-- Example:
+--theme.taglist_bg_focus = "#ff0000"
+
+-- Display the taglist squares
+theme.taglist_squares_sel = "/usr/share/awesome/themes/default/taglist/squarefw.png"
+theme.taglist_squares_unsel = "/usr/share/awesome/themes/default/taglist/squarew.png"
+
+-- Variables set for theming the menu:
+-- menu_[bg|fg]_[normal|focus]
+-- menu_[border_color|border_width]
+theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png"
+theme.menu_height = 15
+theme.menu_width = 150
+
+-- You can add as many variables as
+-- you wish and access them by using
+-- beautiful.variable in your rc.lua
+--theme.bg_widget = "#cc0000"
+
+-- Define the image to load
+theme.titlebar_close_button_normal = "/usr/share/awesome/themes/default/titlebar/close_normal.png"
+theme.titlebar_close_button_focus = "/usr/share/awesome/themes/default/titlebar/close_focus.png"
+
+theme.titlebar_minimize_button_normal = "/usr/share/awesome/themes/default/titlebar/minimize_normal.png"
+theme.titlebar_minimize_button_focus = "/usr/share/awesome/themes/default/titlebar/minimize_focus.png"
+
+theme.titlebar_ontop_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_normal_inactive.png"
+theme.titlebar_ontop_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_focus_inactive.png"
+theme.titlebar_ontop_button_normal_active = "/usr/share/awesome/themes/default/titlebar/ontop_normal_active.png"
+theme.titlebar_ontop_button_focus_active = "/usr/share/awesome/themes/default/titlebar/ontop_focus_active.png"
+
+theme.titlebar_sticky_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_normal_inactive.png"
+theme.titlebar_sticky_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_focus_inactive.png"
+theme.titlebar_sticky_button_normal_active = "/usr/share/awesome/themes/default/titlebar/sticky_normal_active.png"
+theme.titlebar_sticky_button_focus_active = "/usr/share/awesome/themes/default/titlebar/sticky_focus_active.png"
+
+theme.titlebar_floating_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/floating_normal_inactive.png"
+theme.titlebar_floating_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/floating_focus_inactive.png"
+theme.titlebar_floating_button_normal_active = "/usr/share/awesome/themes/default/titlebar/floating_normal_active.png"
+theme.titlebar_floating_button_focus_active = "/usr/share/awesome/themes/default/titlebar/floating_focus_active.png"
+
+theme.titlebar_maximized_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_normal_inactive.png"
+theme.titlebar_maximized_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_focus_inactive.png"
+theme.titlebar_maximized_button_normal_active = "/usr/share/awesome/themes/default/titlebar/maximized_normal_active.png"
+theme.titlebar_maximized_button_focus_active = "/usr/share/awesome/themes/default/titlebar/maximized_focus_active.png"
+
+-- theme.wallpaper = "/usr/share/awesome/themes/default/background.png"
+
+-- You can use your own layout icons like this:
+theme.layout_fairh = "/usr/share/awesome/themes/default/layouts/fairhw.png"
+theme.layout_fairv = "/usr/share/awesome/themes/default/layouts/fairvw.png"
+theme.layout_floating = "/usr/share/awesome/themes/default/layouts/floatingw.png"
+theme.layout_magnifier = "/usr/share/awesome/themes/default/layouts/magnifierw.png"
+theme.layout_max = "/usr/share/awesome/themes/default/layouts/maxw.png"
+theme.layout_fullscreen = "/usr/share/awesome/themes/default/layouts/fullscreenw.png"
+theme.layout_tilebottom = "/usr/share/awesome/themes/default/layouts/tilebottomw.png"
+theme.layout_tileleft = "/usr/share/awesome/themes/default/layouts/tileleftw.png"
+theme.layout_tile = "/usr/share/awesome/themes/default/layouts/tilew.png"
+theme.layout_tiletop = "/usr/share/awesome/themes/default/layouts/tiletopw.png"
+theme.layout_spiral = "/usr/share/awesome/themes/default/layouts/spiralw.png"
+theme.layout_dwindle = "/usr/share/awesome/themes/default/layouts/dwindlew.png"
+theme.layout_cornernw = "/usr/share/awesome/themes/default/layouts/cornernww.png"
+theme.layout_cornerne = "/usr/share/awesome/themes/default/layouts/cornernew.png"
+theme.layout_cornersw = "/usr/share/awesome/themes/default/layouts/cornersww.png"
+theme.layout_cornerse = "/usr/share/awesome/themes/default/layouts/cornersew.png"
+
+theme.awesome_icon = configpath .. "/icons/awesome.svg"
+theme.debian_icon = configpath .. "/icons/debian.svg"
+theme.linux_icon = configpath .. "/icons/linux.svg"
+
+-- Define the icon theme for application icons. If not set then the icons
+-- from /usr/share/icons and /usr/share/icons/hicolor will be used.
+theme.icon_theme = nil
+
+return theme
+
+-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
diff --git a/.config/awesome/vicious b/.config/awesome/vicious
new file mode 160000
+Subproject aabb3d3ae5289f9b837e80eea9e503a07c2f173