From aefae07bde1937197dabea9233c484efd8228252 Mon Sep 17 00:00:00 2001 From: Jonathan McCrohan Date: Sun, 9 Jul 2017 18:37:37 +0100 Subject: Initial commit of my awesome configuration --- .config/awesome/functions/error.lua | 26 + .config/awesome/functions/helper.lua | 17 + .config/awesome/functions/run_once.lua | 35 ++ .config/awesome/icons/awesome.svg | 62 +++ .config/awesome/icons/debian.svg | 17 + .config/awesome/icons/googleplaymusic.png | Bin 0 -> 19123 bytes .config/awesome/icons/linux.svg | 63 +++ .config/awesome/lain | 1 + .config/awesome/rc.lua | 874 ++++++++++++++++++++++++++++++ .config/awesome/stock/binds.lua | 204 +++++++ .config/awesome/stock/signals.lua | 73 +++ .config/awesome/theme.lua | 110 ++++ .config/awesome/vicious | 1 + 13 files changed, 1483 insertions(+) create mode 100644 .config/awesome/functions/error.lua create mode 100644 .config/awesome/functions/helper.lua create mode 100644 .config/awesome/functions/run_once.lua create mode 100644 .config/awesome/icons/awesome.svg create mode 100644 .config/awesome/icons/debian.svg create mode 100644 .config/awesome/icons/googleplaymusic.png create mode 100644 .config/awesome/icons/linux.svg create mode 160000 .config/awesome/lain create mode 100644 .config/awesome/rc.lua create mode 100644 .config/awesome/stock/binds.lua create mode 100644 .config/awesome/stock/signals.lua create mode 100644 .config/awesome/theme.lua create mode 160000 .config/awesome/vicious (limited to '.config/awesome') 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 @@ + + + + + + + + + image/svg+xml + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + \ 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 Binary files /dev/null and b/.config/awesome/icons/googleplaymusic.png 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 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/.config/awesome/lain b/.config/awesome/lain new file mode 160000 index 0000000..245ab7c --- /dev/null +++ b/.config/awesome/lain @@ -0,0 +1 @@ +Subproject commit 245ab7c33a3261bd2730fdb054e888e31b26f1db 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
temperature: %d°C
pressure: %dhPa
humidity: %d%%
wind: %d m/s at %d°
cloudliness: %d%%
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 index 0000000..aabb3d3 --- /dev/null +++ b/.config/awesome/vicious @@ -0,0 +1 @@ +Subproject commit aabb3d3ae5289f9b837e80eea9e503a07c2f173c -- cgit v1.2.3