From 6a5354e09fcf0a89e2d48bd80ecd494fc52c7b48 Mon Sep 17 00:00:00 2001 From: "Adrian C. (anrxc)" Date: Mon, 27 May 2024 17:08:20 +0200 Subject: rc.lua: port to awesomev4 Old awesomewm v3 configuration moved to branch awesomev3. --- osk.lua | 90 ----- rc.lua | 981 +++++++++++++++++++++++++++++-------------------------- scratch/drop.lua | 134 -------- scratch/init.lua | 14 - scratch/pad.lua | 137 -------- zenburn.lua | 144 -------- 6 files changed, 511 insertions(+), 989 deletions(-) delete mode 100644 osk.lua delete mode 100644 scratch/drop.lua delete mode 100644 scratch/init.lua delete mode 100644 scratch/pad.lua delete mode 100644 zenburn.lua diff --git a/osk.lua b/osk.lua deleted file mode 100644 index e4c608d..0000000 --- a/osk.lua +++ /dev/null @@ -1,90 +0,0 @@ ----------------------------------------------------- --- On Screen Keyboard for the awesome window manager ----------------------------------------------------- --- Coded by: Farhaven --- Hacked by: Adrian C. --- Licensed under the WTFPL version 2 --- * http://sam.zoy.org/wtfpl/COPYING ----------------------------------------------------- --- To use this module add: --- require("osk") --- to your rc.lua, and call it from a keybinding: --- osk(position, screen) --- --- Parameters: --- position - optional, "bottom" by default --- screen - optional, screen.count() by default ----------------------------------------------------- - --- Grab environment -local util = require("awful.util") -local wibox = require("awful.wibox") -local button = require("awful.button") -local layout = require("awful.widget.layout") -local table = table -local ipairs = ipairs -local tostring = tostring -local setmetatable = setmetatable -local capi = { - widget = widget, - screen = screen, - fake_input = root.fake_input -} - --- OSK: On Screen Keyboard for the awesome window manager -module("osk") - --- Variable definitions -local kbd = {} -kbd.codes = { - q=24, w=25, e=26, r=27, t=28, z=52, u=30, i=31, o=32, p=33, ["."]=60, - a=38, s=39, d=40, f=41, g=42, h=43, j=44, k=45, l=46, - Caps=66, y=29, x=53, c=54, v=55, b=56, n=57, m=58, Spc=65, Ret=36, Del=22, -} - --- Create a chain of key widgets for an OSK row -local function create_button_row(...) - local widgets = { layout = layout.horizontal.flex } - - for _, i in ipairs(arg) do - local w = capi.widget({ type = "textbox" }) - w:margin({ top = 10, left = 10, right = 10, bottom = 10 }) - w.border_width = 1 - w.text_align = "center" - w.border_color = "#1E2320" - w.text = util.escape(tostring(i)) - w:buttons(util.table.join( - button({ }, 1, nil, function () - capi.fake_input("key_press", kbd.codes[i]) - capi.fake_input("key_release", kbd.codes[i]) - end) - )) - - table.insert(widgets, w) - end - - return widgets -end - --- Create a wibox holding OSK rows and toggle its visibility -setmetatable(_M, { __call = function (_, pos, scr) - if not kbd.init then - kbd.box = wibox({ - height = 100, - position = pos or "bottom", - screen = scr or capi.screen.count(), - fg = "#F0DFAF", - bg = "#4F4F4F", - widgets = { - { create_button_row("q", "w", "e", "r", "t", "z", "u", "i", "o", "p", ".") }, - { create_button_row("a", "s", "d", "f", "g", "h", "j", "k", "l") }, - { create_button_row("Caps", "y", "x", "c", "v", "b", "n", "m", "Spc", "Ret", "Del") }, - layout = layout.vertical.flex - } - }) - kbd.init = true - kbd.box.visible = false - end - - kbd.box.visible = not kbd.box.visible -end }) diff --git a/rc.lua b/rc.lua index c2347ca..1601c2e 100644 --- a/rc.lua +++ b/rc.lua @@ -1,6 +1,6 @@ -- {{{ License -- --- Awesome configuration, using awesome 3.4.14 on Arch GNU/Linux +-- Awesome configuration, using awesome 4.3-7 on Debian GNU/Linux -- * Adrian C. -- Screenshot: http://sysphere.org/gallery/snapshots @@ -11,556 +11,597 @@ -- {{{ Libraries -require("awful") -require("awful.rules") +pcall(require, "luarocks.loader") +-- Standard awesome library +local gears = require("gears") +local awful = require("awful") require("awful.autofocus") --- User libraries -vicious = require("vicious") -scratch = require("scratch") +-- Widget and layout libraries +local wibox = require("wibox") +local vicious = require("vicious") +-- Theme handling library +local beautiful = require("beautiful") +-- Notification library +--local naughty = require("naughty") +--local menubar = require("menubar") -- }}} - -- {{{ Variable definitions -local altkey = "Mod1" -local modkey = "Mod4" - -local home = os.getenv("HOME") -local exec = awful.util.spawn -local sexec = awful.util.spawn_with_shell -local scount = screen.count() +terminal = "/usr/bin/urxvt" +editor = "emacs" +editor_cmd = terminal .. " -e emacs -nw" +modkey = "Mod4" +altkey = "Mod1" +exec = awful.spawn +scount = screen.count() -- Beautiful theme -beautiful.init(home .. "/.config/awesome/zenburn.lua") +beautiful.init(gears.filesystem.get_themes_dir() .. "zenburn/theme.lua") -- Window management layouts -layouts = { - awful.layout.suit.tile, -- 1 - awful.layout.suit.tile.bottom, -- 2 - awful.layout.suit.fair, -- 3 - awful.layout.suit.max, -- 4 - awful.layout.suit.magnifier, -- 5 - awful.layout.suit.floating -- 6 +awful.layout.layouts = { + awful.layout.suit.floating, -- 1 + awful.layout.suit.tile, -- 2 + awful.layout.suit.tile.left, -- 3 + awful.layout.suit.tile.bottom, -- 4 + awful.layout.suit.tile.top, -- 5 + awful.layout.suit.fair, -- 6 + awful.layout.suit.fair.horizontal, -- 7 + awful.layout.suit.spiral, -- 8 + awful.layout.suit.spiral.dwindle, -- 9 + awful.layout.suit.max, -- 10 + awful.layout.suit.max.fullscreen, -- 11 + awful.layout.suit.magnifier, -- 12 + awful.layout.suit.corner.nw, -- 13 + -- awful.layout.suit.corner.ne, + -- awful.layout.suit.corner.sw, + -- awful.layout.suit.corner.se, } -- }}} - --- {{{ Tags -tags = { - names = { "term", "emacs", "web", "mail", "im", 6, 7, "rss", "media" }, - layout = { layouts[2], layouts[1], layouts[1], layouts[4], layouts[1], - layouts[6], layouts[6], layouts[5], layouts[6] -}} - -for s = 1, scount do - tags[s] = awful.tag(tags.names, s, tags.layout) - for i, t in ipairs(tags[s]) do - awful.tag.setproperty(t, "mwfact", i==5 and 0.13 or 0.5) - awful.tag.setproperty(t, "hide", (i==6 or i==7) and true) - end -end +-- {{{ Menu +--menubar.utils.terminal = terminal -- }}} --- {{{ Wibox --- --- {{{ Widgets configuration +-- {{{ Wibar -- -- {{{ Reusable separator -separator = widget({ type = "imagebox" }) -separator.image = image(beautiful.widget_sep) --- }}} - --- {{{ CPU usage and temperature -cpuicon = widget({ type = "imagebox" }) -cpuicon.image = image(beautiful.widget_cpu) --- Initialize widgets -cpugraph = awful.widget.graph() -tzswidget = widget({ type = "textbox" }) --- Graph properties -cpugraph:set_width(40):set_height(14) -cpugraph:set_background_color(beautiful.fg_off_widget) -cpugraph:set_gradient_angle(0):set_gradient_colors({ - beautiful.fg_end_widget, beautiful.fg_center_widget, beautiful.fg_widget -}) -- Register widgets -vicious.register(cpugraph, vicious.widgets.cpu, "$1") -vicious.register(tzswidget, vicious.widgets.thermal, " $1C", 19, "thermal_zone0") --- }}} - --- {{{ Battery state -baticon = widget({ type = "imagebox" }) -baticon.image = image(beautiful.widget_bat) --- Initialize widget -batwidget = widget({ type = "textbox" }) --- Register widget -vicious.register(batwidget, vicious.widgets.bat, "$1$2%", 61, "BAT0") --- }}} - --- {{{ Memory usage -memicon = widget({ type = "imagebox" }) -memicon.image = image(beautiful.widget_mem) --- Initialize widget -membar = awful.widget.progressbar() --- Pogressbar properties -membar:set_vertical(true):set_ticks(true) -membar:set_height(12):set_width(8):set_ticks_size(2) -membar:set_background_color(beautiful.fg_off_widget) -membar:set_gradient_colors({ beautiful.fg_widget, - beautiful.fg_center_widget, beautiful.fg_end_widget -}) -- Register widget -vicious.register(membar, vicious.widgets.mem, "$1", 13) --- }}} - --- {{{ File system usage -fsicon = widget({ type = "imagebox" }) -fsicon.image = image(beautiful.widget_fs) --- Initialize widgets -fs = { - b = awful.widget.progressbar(), r = awful.widget.progressbar(), - h = awful.widget.progressbar(), s = awful.widget.progressbar() -} --- Progressbar properties -for _, w in pairs(fs) do - w:set_vertical(true):set_ticks(true) - w:set_height(14):set_width(5):set_ticks_size(2) - w:set_border_color(beautiful.border_widget) - w:set_background_color(beautiful.fg_off_widget) - w:set_gradient_colors({ beautiful.fg_widget, - beautiful.fg_center_widget, beautiful.fg_end_widget - }) -- Register buttons - w.widget:buttons(awful.util.table.join( - awful.button({ }, 1, function () exec("rox", false) end) - )) -end -- Enable caching -vicious.cache(vicious.widgets.fs) --- Register widgets -vicious.register(fs.b, vicious.widgets.fs, "${/boot used_p}", 599) -vicious.register(fs.r, vicious.widgets.fs, "${/ used_p}", 599) -vicious.register(fs.h, vicious.widgets.fs, "${/home used_p}", 599) -vicious.register(fs.s, vicious.widgets.fs, "${/mnt/storage used_p}", 599) +myseparator = wibox.widget.imagebox("/home/anrxc/.config/awesome/icons/separator.png", false) -- }}} --- {{{ Network usage -dnicon = widget({ type = "imagebox" }) -upicon = widget({ type = "imagebox" }) -dnicon.image = image(beautiful.widget_net) -upicon.image = image(beautiful.widget_netup) +-- {{{ CPU temperature +mycpuicon = wibox.widget.imagebox("/home/anrxc/.config/awesome/icons/cpu.png", false) -- Initialize widget -netwidget = widget({ type = "textbox" }) +mycpuwidget = wibox.widget.textbox() -- Register widget -vicious.register(netwidget, vicious.widgets.net, '${eth0 down_kb} ${eth0 up_kb}', 3) +vicious.register(mycpuwidget, vicious.widgets.thermal, "$1C", 19, "thermal_zone0") -- }}} --- {{{ Mail subject -mailicon = widget({ type = "imagebox" }) -mailicon.image = image(beautiful.widget_mail) +-- {{{ Battery state +mybaticon = wibox.widget.imagebox("/home/anrxc/.config/awesome/icons/bat.png", false) -- Initialize widget -mailwidget = widget({ type = "textbox" }) +mybatwidget = wibox.widget.textbox() -- Register widget -vicious.register(mailwidget, vicious.widgets.mbox, "$1", 181, {home .. "/mail/Inbox", 15}) --- Register buttons -mailwidget:buttons(awful.util.table.join( - awful.button({ }, 1, function () exec("urxvt -T Alpine -e alpine.exp") end) -)) +vicious.register(mybatwidget, vicious.widgets.bat, "$1$2%", 61, "BAT0") -- }}} --- {{{ Org-mode agenda -orgicon = widget({ type = "imagebox" }) -orgicon.image = image(beautiful.widget_org) --- Initialize widget -orgwidget = widget({ type = "textbox" }) --- Configure widget -local orgmode = { - files = { home.."/.org/computers.org", - home.."/.org/index.org", home.."/.org/personal.org", - }, - color = { - past = '', - today = '', - soon = '', - future = '' -}} -- Register widget -vicious.register(orgwidget, vicious.widgets.org, - orgmode.color.past..'$1-'..orgmode.color.today .. '$2-' .. - orgmode.color.soon..'$3-'..orgmode.color.future.. '$4', 601, - orgmode.files -) -- Register buttons -orgwidget:buttons(awful.util.table.join( - awful.button({ }, 1, function () exec("emacsclient --eval '(org-agenda-list)'") end), - awful.button({ }, 3, function () exec("emacsclient --eval '(make-remember-frame)'") end) -)) --- }}} - --- {{{ Volume level -volicon = widget({ type = "imagebox" }) -volicon.image = image(beautiful.widget_vol) +-- {{{ Date and time +mydateicon = wibox.widget.imagebox("/home/anrxc/.config/awesome/icons/time.png", false) -- Initialize widgets -volbar = awful.widget.progressbar() -volwidget = widget({ type = "textbox" }) --- Progressbar properties -volbar:set_vertical(true):set_ticks(true) -volbar:set_height(12):set_width(8):set_ticks_size(2) -volbar:set_background_color(beautiful.fg_off_widget) -volbar:set_gradient_colors({ beautiful.fg_widget, - beautiful.fg_center_widget, beautiful.fg_end_widget -}) -- Enable caching -vicious.cache(vicious.widgets.volume) +mydatewidget = wibox.widget.textbox() +mydatestwidget = wibox.widget.textbox() -- Register widgets -vicious.register(volbar, vicious.widgets.volume, "$1", 2, "PCM") -vicious.register(volwidget, vicious.widgets.volume, " $1%", 2, "PCM") --- Register buttons -volbar.widget:buttons(awful.util.table.join( - awful.button({ }, 1, function () exec("kmix") end), - awful.button({ }, 4, function () exec("amixer -q set PCM 1dB+", false) end), - awful.button({ }, 5, function () exec("amixer -q set PCM 1dB-", false) end) -)) -- Register assigned buttons -volwidget:buttons(volbar.widget:buttons()) +vicious.register(mydatewidget, vicious.widgets.date, "%R", 61) -- Amsterdam +vicious.register(mydatestwidget, vicious.widgets.date, "%R", 61, -21600) -- New York -- }}} --- {{{ Date and time -dateicon = widget({ type = "imagebox" }) -dateicon.image = image(beautiful.widget_date) --- Initialize widget -datewidget = widget({ type = "textbox" }) --- Register widget -vicious.register(datewidget, vicious.widgets.date, "%R", 61) --- Register buttons -datewidget:buttons(awful.util.table.join( - awful.button({ }, 1, function () exec("pylendar.py") end) -)) --- }}} - --- {{{ System tray -systray = widget({ type = "systray" }) --- }}} --- }}} -- {{{ Wibox initialisation -wibox = {} -promptbox = {} -layoutbox = {} -taglist = {} -taglist.buttons = awful.util.table.join( - awful.button({ }, 1, awful.tag.viewonly), - awful.button({ modkey }, 1, awful.client.movetotag), - awful.button({ }, 3, awful.tag.viewtoggle), - awful.button({ modkey }, 3, awful.client.toggletag), - awful.button({ }, 4, awful.tag.viewnext), - awful.button({ }, 5, awful.tag.viewprev -)) +local taglist_buttons = gears.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 = gears.table.join( + awful.button({ }, 1, function (c) + if c == client.focus then + c.minimized = true + else + c:emit_signal( + "request::activate", + "tasklist", + {raise = true} + ) + end + end), + awful.button({ }, 3, function() + awful.menu.client_list({ theme = { width = 250 } }) + end), + awful.button({ }, 4, function () + awful.client.focus.byidx(1) + end), + awful.button({ }, 5, function () + awful.client.focus.byidx(-1) + end)) +-- Wallpaper signal handler +local function set_wallpaper(s) + if beautiful.wallpaper then + local wallpaper = beautiful.wallpaper + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + end +end +screen.connect_signal("property::geometry", set_wallpaper) + +awful.screen.connect_for_each_screen(function(s) + set_wallpaper(s) + + -- Tags + local names = { "term", "emacs", "web", "mail", "im", "6", "7", "ssh", "media" } + local ly = awful.layout.suit + local llayouts = { ly.tile, ly.tile, ly.tile, ly.magnifier, ly.tile, ly.floating, ly.floating, ly.fair, ly.floating } + awful.tag(names, s, llayouts) -for s = 1, scount do -- Create a promptbox - promptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright }) + s.mypromptbox = awful.widget.prompt() + -- Create a layoutbox - layoutbox[s] = awful.widget.layoutbox(s) - layoutbox[s]:buttons(awful.util.table.join( - awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end), - awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end), - awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end), - awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end) + s.mylayoutbox = awful.widget.layoutbox(s) + s.mylayoutbox:buttons(gears.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 the taglist - taglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, taglist.buttons) + s.mytaglist = awful.widget.taglist { + screen = s, + filter = awful.widget.taglist.filter.all, + buttons = taglist_buttons + } + + -- Create the tasklist + s.mytasklist = awful.widget.tasklist { + screen = s, + filter = awful.widget.tasklist.filter.currenttags, + buttons = tasklist_buttons + } + -- Create the wibox - wibox[s] = awful.wibox({ screen = s, - fg = beautiful.fg_normal, height = 12, - bg = beautiful.bg_normal, position = "top", - border_color = beautiful.border_focus, - border_width = beautiful.border_width - }) + -- * theme font "Terminus 8" or "ProFont 8" for this widget bar height + s.mywibox = awful.wibar({ position = "top", screen = s, height = 12 }) + -- Add widgets to the wibox - wibox[s].widgets = { - { taglist[s], layoutbox[s], separator, promptbox[s], - ["layout"] = awful.widget.layout.horizontal.leftright + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + s.mytaglist, + s.mylayoutbox, + myseparator, + s.mypromptbox, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + myseparator, + mycpuicon, + mycpuwidget, + myseparator, + mybaticon, + mybatwidget, + myseparator, + mydateicon, + mydatestwidget, + myseparator, + mydateicon, + mydatewidget, + myseparator, + s == scount and wibox.widget.systray() or nil, }, - s == 1 and systray or nil, - separator, datewidget, dateicon, - separator, volwidget, volbar.widget, volicon, - separator, orgwidget, orgicon, - separator, mailwidget, mailicon, - separator, upicon, netwidget, dnicon, - separator, fs.s.widget, fs.h.widget, fs.r.widget, fs.b.widget, fsicon, - separator, membar.widget, memicon, - separator, batwidget, baticon, - separator, tzswidget, cpugraph.widget, cpuicon, - separator, ["layout"] = awful.widget.layout.horizontal.rightleft } -end +end) -- }}} -- }}} - -- {{{ Mouse bindings -root.buttons(awful.util.table.join( +root.buttons(gears.table.join( awful.button({ }, 4, awful.tag.viewnext), awful.button({ }, 5, awful.tag.viewprev) )) - --- Client bindings -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) -) -- }}} - -- {{{ Key bindings --- --- {{{ Global keys -globalkeys = awful.util.table.join( - -- {{{ Applications - awful.key({ modkey }, "e", function () exec("emacsclient -n -c") end), - awful.key({ modkey }, "r", function () exec("rox", false) end), - awful.key({ modkey }, "w", function () exec("firefox") end), - awful.key({ altkey }, "F1", function () exec("urxvt") end), - awful.key({ altkey }, "#49", function () scratch.drop("urxvt", "bottom", nil, nil, 0.30) end), - awful.key({ modkey }, "a", function () exec("urxvt -T Alpine -e alpine.exp") end), - awful.key({ modkey }, "g", function () sexec("GTK2_RC_FILES=~/.gtkrc-gajim gajim") end), - awful.key({ modkey }, "q", function () exec("emacsclient --eval '(make-remember-frame)'") end), - awful.key({ altkey }, "#51", function () if boosk then osk(nil, mouse.screen) - else boosk, osk = pcall(require, "osk") end - end), - -- }}} - - -- {{{ Multimedia keys - --awful.key({}, "#160", function () exec("kscreenlocker --forcelock") end), - --awful.key({}, "#121", function () exec("pvol.py -m") end), - awful.key({}, "#122", function () exec("pvol.py -p -c -2") end), - awful.key({}, "#123", function () exec("pvol.py -p -c 2") end), - awful.key({}, "#232", function () exec("plight.py -s") end), - awful.key({}, "#233", function () exec("plight.py -s") end), - --awful.key({}, "#150", function () exec("sudo /usr/bin/pm-suspend") end), - awful.key({}, "#213", function () exec("sudo /usr/bin/pm-hibernate") end), - --awful.key({}, "#235", function () exec("xset dpms force off") end), - awful.key({}, "#235", function () exec("pypres.py") end), - awful.key({}, "#244", function () sexec("acpitool -b | xmessage -timeout 10 -file -") end), - -- }}} - - -- {{{ Prompt menus - awful.key({ altkey }, "F2", function () - awful.prompt.run({ prompt = "Run: " }, promptbox[mouse.screen].widget, - function (...) promptbox[mouse.screen].text = exec(unpack(arg), false) end, - awful.completion.shell, awful.util.getdir("cache") .. "/history") - end), - awful.key({ altkey }, "F3", function () - awful.prompt.run({ prompt = "Dictionary: " }, promptbox[mouse.screen].widget, - function (words) - sexec("crodict "..words.." | ".."xmessage -timeout 10 -file -") - end) - end), - awful.key({ altkey }, "F4", function () - awful.prompt.run({ prompt = "Web: " }, promptbox[mouse.screen].widget, - function (command) - sexec("firefox 'http://yubnub.org/parser/parse?command="..command.."'") - awful.tag.viewonly(tags[scount][3]) - end) - end), - awful.key({ altkey }, "F5", function () - awful.prompt.run({ prompt = "Lua: " }, promptbox[mouse.screen].widget, - awful.util.eval, nil, awful.util.getdir("cache") .. "/history_eval") - end), - -- }}} - - -- {{{ Awesome controls - awful.key({ modkey }, "b", function () - wibox[mouse.screen].visible = not wibox[mouse.screen].visible - end), - awful.key({ modkey, "Shift" }, "q", awesome.quit), - awful.key({ modkey, "Shift" }, "r", function () - promptbox[mouse.screen].text = awful.util.escape(awful.util.restart()) - end), - -- }}} - - -- {{{ Tag browsing - awful.key({ altkey }, "n", awful.tag.viewnext), - awful.key({ altkey }, "p", awful.tag.viewprev), - awful.key({ altkey }, "Tab", awful.tag.history.restore), - -- }}} - - -- {{{ Layout manipulation - awful.key({ modkey }, "l", function () awful.tag.incmwfact( 0.05) end), - awful.key({ modkey }, "h", function () awful.tag.incmwfact(-0.05) end), - awful.key({ modkey, "Shift" }, "l", function () awful.client.incwfact(-0.05) end), - awful.key({ modkey, "Shift" }, "h", function () awful.client.incwfact( 0.05) end), - awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end), - awful.key({ modkey }, "space", function () awful.layout.inc(layouts, 1) end), - -- }}} - - -- {{{ Focus controls - awful.key({ modkey }, "p", function () awful.screen.focus_relative(1) end), - awful.key({ modkey }, "s", function () scratch.pad.toggle() end), - awful.key({ modkey }, "u", awful.client.urgent.jumpto), - awful.key({ modkey }, "j", function () - awful.client.focus.byidx(1) - if client.focus then client.focus:raise() end - end), - awful.key({ modkey }, "k", function () - awful.client.focus.byidx(-1) - if client.focus then client.focus:raise() end - end), - awful.key({ modkey }, "Tab", function () - awful.client.focus.history.previous() - if client.focus then client.focus:raise() end - end), - awful.key({ altkey }, "Escape", function () - awful.menu.menu_keys.down = { "Down", "Alt_L" } - local cmenu = awful.menu.clients({width=230}, { keygrabber=true, coords={x=525, y=330} }) - end), - awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx(1) end), - awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx(-1) end) - -- }}} +globalkeys = gears.table.join( + -- Tag browsing + awful.key({ altkey, }, "p", awful.tag.viewprev, + {description = "view previous", group = "tag"}), + awful.key({ altkey, }, "n", awful.tag.viewnext, + {description = "view next", group = "tag"}), + awful.key({ altkey, }, "Tab", awful.tag.history.restore, + {description = "go back", group = "tag"}), + + -- Focus controls + 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, "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 }, "p", 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"}), + + -- Multimedia keys + awful.key({}, "#151", function () awful.spawn("xdg-screensaver lock") end, + {description = "lock the screen", group = "launcher"}), + awful.key({}, "#198", function () awful.spawn("amixer set Capture toggle") end, + {description = "mute the microphone", group = "launcher"}), + + -- Applications + awful.key({ altkey, }, "F1", function () awful.spawn(terminal) end, + {description = "open a terminal", group = "launcher"}), + awful.key({ modkey, }, "w", function () awful.spawn("firefox") end, + {description = "open a browser", group = "launcher"}), + awful.key({ modkey, }, "n", function () awful.spawn("urxvt -T Terminal1 -e terminal1-expect-script") end, + {description = "open ssh terminal1", group = "launcher"}), + awful.key({ modkey, }, "v", function () awful.spawn("urxvt -T Terminal2 -e ssh terminal2") end, + {description = "open ssh terminal2", group = "launcher"}), + awful.key({ modkey, }, "a", function () awful.spawn("urxvt -T Alpine -e alpine") end, + {description = "open e-mail client", group = "launcher"}), + awful.key({ modkey, }, "e", function () awful.spawn("emacs") end, + {description = "open emacs", group = "launcher"}), + + -- Awesome controls + awful.key({ modkey, "Shift" }, "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() + if c then + c:emit_signal( + "request::activate", "key.unminimize", {raise = true} + ) + end + end, + {description = "restore minimized", group = "client"}), + + -- Prompt menus + awful.key({ altkey }, "F2", function () awful.screen.focused().mypromptbox:run() end, + {description = "run prompt", group = "launcher"}), + + awful.key({ altkey }, "F5", + 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, "Control" }, "j", function() menubar.show() end, + -- {description = "show the menubar", group = "launcher"}) ) --- }}} -- {{{ Client manipulation -clientkeys = awful.util.table.join( - awful.key({ modkey }, "c", function (c) c:kill() end), - awful.key({ modkey }, "d", function (c) scratch.pad.set(c, 0.60, 0.60, true) end), - awful.key({ modkey }, "f", function (c) c.fullscreen = not c.fullscreen end), - awful.key({ modkey }, "m", function (c) - c.maximized_horizontal = not c.maximized_horizontal - c.maximized_vertical = not c.maximized_vertical - end), - awful.key({ modkey }, "o", awful.client.movetoscreen), - awful.key({ modkey }, "Next", function () awful.client.moveresize( 20, 20, -40, -40) end), - awful.key({ modkey }, "Prior", function () awful.client.moveresize(-20, -20, 40, 40) end), - awful.key({ modkey }, "Down", function () awful.client.moveresize( 0, 20, 0, 0) end), - awful.key({ modkey }, "Up", function () awful.client.moveresize( 0, -20, 0, 0) end), - awful.key({ modkey }, "Left", function () awful.client.moveresize(-20, 0, 0, 0) end), - awful.key({ modkey }, "Right", function () awful.client.moveresize( 20, 0, 0, 0) end), - awful.key({ modkey, "Control"},"r", function (c) c:redraw() end), - awful.key({ modkey, "Shift" }, "0", function (c) c.sticky = not c.sticky end), - awful.key({ modkey, "Shift" }, "m", function (c) c:swap(awful.client.getmaster()) end), - awful.key({ modkey, "Shift" }, "c", function (c) exec("kill -CONT " .. c.pid) end), - awful.key({ modkey, "Shift" }, "s", function (c) exec("kill -STOP " .. c.pid) end), - awful.key({ modkey, "Shift" }, "t", function (c) - if c.titlebar then awful.titlebar.remove(c) - else awful.titlebar.add(c, { modkey = modkey }) end - end), - awful.key({ modkey, "Shift" }, "f", function (c) if awful.client.floating.get(c) - then awful.client.floating.delete(c); awful.titlebar.remove(c) - else awful.client.floating.set(c, true); awful.titlebar.add(c) end - end) +clientkeys = gears.table.join( + awful.key({ modkey, }, "f", + function (c) + c.fullscreen = not c.fullscreen + c:raise() + end, + {description = "toggle fullscreen", group = "client"}), + awful.key({ modkey, }, "c", function (c) c:kill() end, + {description = "kill client", group = "client"}), + awful.key({ modkey, "Shift" }, "f", awful.client.floating.toggle , + {description = "toggle floating", group = "client"}), + awful.key({ modkey, "Shift" }, "m", function (c) c:swap(awful.client.getmaster()) end, + {description = "move to master", group = "client"}), + awful.key({ modkey, "Control" }, "r", function (c) c:redraw() end, + {description = "redraw client", 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, }, "Next", function (c) awful.client.moveresize( 20, 20, -40, -40) end, + {description = "resize client PgUP", group = "client"}), + awful.key({ modkey, }, "Prior", function (c) awful.client.moveresize(-20, -20, 40, 40) end, + {description = "resize client PgDN", group = "client"}), + awful.key({ modkey, }, "Down", function (c) awful.client.moveresize(0, 20, 0, 0) end, + {description = "move client down", group = "client"}), + awful.key({ modkey, }, "Up", function (c) awful.client.moveresize(0, -20, 0, 0) end, + {description = "move client up", group = "client"}), + awful.key({ modkey, }, "Left", function (c) awful.client.moveresize(-20, 0, 0, 0) end, + {description = "move client left", group = "client"}), + awful.key({ modkey, }, "Right", function (c) awful.client.moveresize(20, 0, 0, 0) end, + {description = "move client right", group = "client"}), + + awful.key({ modkey, "Shift" }, "t", function (c) awful.titlebar.toggle(c) end, + {description = "remove client titlebar", group = "client"}), + + awful.key({ modkey, }, "m", + function (c) + c.maximized = not c.maximized + c:raise() + end , + {description = "(un)maximize", group = "client"}) + --awful.key({ modkey, "Control" }, "m", + -- function (c) + -- c.maximized_vertical = not c.maximized_vertical + -- c:raise() + -- end , + -- {description = "(un)maximize vertically", group = "client"}), + --awful.key({ modkey, "Shift" }, "m", + -- function (c) + -- c.maximized_horizontal = not c.maximized_horizontal + -- c:raise() + -- end , + -- {description = "(un)maximize horizontally", group = "client"}) ) -- }}} --- {{{ Keyboard digits -local keynumber = 0 -for s = 1, scount do - keynumber = math.min(9, math.max(#tags[s], keynumber)); -end --- }}} - -- {{{ Tag controls -for i = 1, keynumber do - globalkeys = awful.util.table.join( globalkeys, - awful.key({ modkey }, "#" .. i + 9, function () - local screen = mouse.screen - if tags[screen][i] then awful.tag.viewonly(tags[screen][i]) end - end), - awful.key({ modkey, "Control" }, "#" .. i + 9, function () - local screen = mouse.screen - if tags[screen][i] then awful.tag.viewtoggle(tags[screen][i]) end - end), - awful.key({ modkey, "Shift" }, "#" .. i + 9, function () - if client.focus and tags[client.focus.screen][i] then - awful.client.movetotag(tags[client.focus.screen][i]) - end - end), - awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, function () - if client.focus and tags[client.focus.screen][i] then - awful.client.toggletag(tags[client.focus.screen][i]) - end - end)) +for i = 1, 9 do + globalkeys = gears.table.join(globalkeys, + 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"}), + 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"}), + 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"}), + 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 = gears.table.join( + awful.button({ }, 1, function (c) + c:emit_signal("request::activate", "mouse_click", {raise = true}) + end), + awful.button({ modkey }, 1, function (c) + c:emit_signal("request::activate", "mouse_click", {raise = true}) + awful.mouse.client.move(c) + end), + awful.button({ modkey }, 3, function (c) + c:emit_signal("request::activate", "mouse_click", {raise = true}) + awful.mouse.client.resize(c) + end) +) -- Set keys root.keys(globalkeys) -- }}} - -- {{{ Rules awful.rules.rules = { - { rule = { }, properties = { - focus = true, size_hints_honor = false, - keys = clientkeys, buttons = clientbuttons, - border_width = beautiful.border_width, - border_color = beautiful.border_normal } + { rule = { }, + properties = { border_width = beautiful.border_width, + border_color = beautiful.border_normal, + focus = awful.client.focus.filter, + size_hints_honor = false, + raise = true, + keys = clientkeys, + buttons = clientbuttons, + screen = awful.screen.preferred, + placement = awful.placement.no_overlap+awful.placement.no_offscreen + } + }, + + { rule = { name = "Alpine" }, + properties = { screen = 1, tag = "4" } }, + { rule = { class = "Emacs" }, + properties = { screen = scount, tag = "2" } }, + { rule = { class = "Firefox" }, + properties = { screen = scount, tag = "3" } }, + { rule = { class = "Slack" }, + properties = { screen = scount, tag = "5" } }, + + { rule_any = { + instance = { + "xmessage", + "pinentry", + "plugin-container", + }, + + class = { + "Places", -- firefox downloads, history... + "Pinentry.*", + "Nautilus", + "feh", + "ROX-Filer", + "Xmessage", + }, + + name = { + "Library", -- firefox downloads, history... + "Event Tester", -- xev + }, + + role = { + "AlarmWindow", -- Thunderbird calendar + "ConfigManager", -- Thunderbird about:config + "pop-up", -- Browser developer tools + } + }, properties = { floating = true, titlebars_enabled = true }}, + + { rule_any = {type = { "normal", "dialog" } + }, properties = { titlebars_enabled = true } }, - { rule = { class = "Firefox", instance = "Navigator" }, - properties = { tag = tags[scount][3] } }, - { rule = { class = "Emacs", instance = "emacs" }, - properties = { tag = tags[1][2] } }, - { rule = { class = "Emacs", instance = "_Remember_" }, - properties = { floating = true }, callback = awful.titlebar.add }, - { rule = { class = "Xmessage", instance = "xmessage" }, - properties = { floating = true }, callback = awful.titlebar.add }, - { rule = { instance = "plugin-container" }, - properties = { floating = true }, callback = awful.titlebar.add }, - { rule = { class = "Akregator" }, properties = { tag = tags[scount][8]}}, - { rule = { name = "Alpine" }, properties = { tag = tags[1][4]} }, - { rule = { class = "Gajim" }, properties = { tag = tags[1][5]} }, - { rule = { class = "Ark" }, properties = { floating = true } }, - { rule = { class = "Geeqie" }, properties = { floating = true } }, - { rule = { class = "ROX-Filer" }, properties = { floating = true } }, - { rule = { class = "Pinentry.*" }, properties = { floating = true } }, } -- }}} - -- {{{ Signals --- --- {{{ Manage signal handler -client.add_signal("manage", function (c, startup) - -- Add titlebar to floaters, but remove those from rule callback - if awful.client.floating.get(c) - or awful.layout.get(c.screen) == awful.layout.suit.floating then - if c.titlebar then awful.titlebar.remove(c) - else awful.titlebar.add(c, {modkey = modkey}) end +client.connect_signal("manage", function (c) + 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 + awful.placement.no_overlap(c) + awful.placement.no_offscreen(c) end - -- Enable sloppy focus - c:add_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 placement - if not startup then - awful.client.setslave(c) + if not awful.client.floating.get(c) then + awful.titlebar.hide(c) + end - if not c.size_hints.program_position - and not c.size_hints.user_position then - awful.placement.no_overlap(c) - awful.placement.no_offscreen(c) - end + if awful.layout.get(c.screen) == awful.layout.suit.floating then + awful.titlebar.show(c) end end) --- }}} --- {{{ Focus signal handlers -client.add_signal("focus", function (c) c.border_color = beautiful.border_focus end) -client.add_signal("unfocus", function (c) c.border_color = beautiful.border_normal end) +-- New client signal handlers +client.connect_signal("request::titlebars", function(c) + local buttons = gears.table.join( + awful.button({ }, 1, function() + c:emit_signal("request::activate", "titlebar", {raise = true}) + awful.mouse.client.move(c) + end), + awful.button({ }, 3, function() + c:emit_signal("request::activate", "titlebar", {raise = true}) + awful.mouse.client.resize(c) + end) + ) + + -- Theme font "Terminus 8" or "ProFont 8" for this titlebar height + awful.titlebar(c, { size = 16}) : 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 +client.connect_signal("mouse::enter", function(c) + c:emit_signal("request::activate", "mouse_enter", {raise = false}) +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) -- }}} --- {{{ Arrange signal handler -for s = 1, scount do screen[s]:add_signal("arrange", function () - local clients = awful.client.visible(s) - local layout = awful.layout.getname(awful.layout.get(s)) - for _, c in pairs(clients) do -- Floaters are always on top - if awful.client.floating.get(c) or layout == "floating" - then if not c.fullscreen then c.above = true end - else c.above = false end - end - end) +-- {{{ Screen padding +-- * when a laptop is right in front of the monitor and its +-- LCD is obstructing the view of the bottom of the screen +-- on the external monitor +if scount == 2 then + awful.screen.padding(screen[1], { bottom = 235 }) end -- }}} + + +-- {{{ Autostart +awful.spawn("/usr/bin/xinput set-prop 9 334 0 1 0") -- touchpad single finger scrolling +awful.spawn("/home/anrxc/bin/autostart-keychain-agent.sh") -- launch the ssh-agent +awful.spawn("/home/anrxc/bin/autostart-xmodmap-xdefaults.sh") -- xrdb merge defaults and keymap -- }}} diff --git a/scratch/drop.lua b/scratch/drop.lua deleted file mode 100644 index a3e4490..0000000 --- a/scratch/drop.lua +++ /dev/null @@ -1,134 +0,0 @@ -------------------------------------------------------------------- --- Drop-down applications manager for the awesome window manager -------------------------------------------------------------------- --- Coded by: * Lucas de Vries --- Hacked by: * Adrian C. (anrxc) --- Licensed under the WTFPL version 2 --- * http://sam.zoy.org/wtfpl/COPYING -------------------------------------------------------------------- --- To use this module add: --- local scratch = require("scratch") --- to the top of your rc.lua, and call it from a keybinding: --- scratch.drop(prog, vert, horiz, width, height, sticky, screen) --- --- Parameters: --- prog - Program to run; "urxvt", "gmrun", "thunderbird" --- vert - Vertical; "bottom", "center" or "top" (default) --- horiz - Horizontal; "left", "right" or "center" (default) --- width - Width in absolute pixels, or width percentage --- when <= 1 (1 (100% of the screen) by default) --- height - Height in absolute pixels, or height percentage --- when <= 1 (0.25 (25% of the screen) by default) --- sticky - Visible on all tags, false by default --- screen - Screen (optional), mouse.screen by default -------------------------------------------------------------------- - --- Grab environment -local pairs = pairs -local awful = require("awful") -local setmetatable = setmetatable -local capi = { - mouse = mouse, - client = client, - screen = screen -} - --- Scratchdrop: drop-down applications manager for the awesome window manager -local drop = {} -- module scratch.drop - - -local dropdown = {} - --- Create a new window for the drop-down application when it doesn't --- exist, or toggle between hidden and visible states when it does -function toggle(prog, vert, horiz, width, height, sticky, screen) - vert = vert or "top" - horiz = horiz or "center" - width = width or 1 - height = height or 0.25 - sticky = sticky or false - screen = screen or capi.mouse.screen - - -- Determine signal usage in this version of awesome - local attach_signal = capi.client.connect_signal or capi.client.add_signal - local detach_signal = capi.client.disconnect_signal or capi.client.remove_signal - - if not dropdown[prog] then - dropdown[prog] = {} - - -- Add unmanage signal for scratchdrop programs - attach_signal("unmanage", function (c) - for scr, cl in pairs(dropdown[prog]) do - if cl == c then - dropdown[prog][scr] = nil - end - end - end) - end - - if not dropdown[prog][screen] then - spawnw = function (c) - dropdown[prog][screen] = c - - -- Scratchdrop clients are floaters - awful.client.floating.set(c, true) - - -- Client geometry and placement - local screengeom = capi.screen[screen].workarea - - if width <= 1 then width = screengeom.width * width end - if height <= 1 then height = screengeom.height * height end - - if horiz == "left" then x = screengeom.x - elseif horiz == "right" then x = screengeom.width - width - else x = screengeom.x+(screengeom.width-width)/2 end - - if vert == "bottom" then y = screengeom.height + screengeom.y - height - elseif vert == "center" then y = screengeom.y+(screengeom.height-height)/2 - else y = screengeom.y - screengeom.y end - - -- Client properties - c:geometry({ x = x, y = y, width = width, height = height }) - c.ontop = true - c.above = true - c.skip_taskbar = true - if sticky then c.sticky = true end - if c.titlebar then awful.titlebar.remove(c) end - - c:raise() - capi.client.focus = c - detach_signal("manage", spawnw) - end - - -- Add manage signal and spawn the program - attach_signal("manage", spawnw) - awful.util.spawn(prog, false) - else - -- Get a running client - c = dropdown[prog][screen] - - -- Switch the client to the current workspace - if c:isvisible() == false then c.hidden = true - awful.client.movetotag(awful.tag.selected(screen), c) - end - - -- Focus and raise if hidden - if c.hidden then - -- Make sure it is centered - if vert == "center" then awful.placement.center_vertical(c) end - if horiz == "center" then awful.placement.center_horizontal(c) end - c.hidden = false - c:raise() - capi.client.focus = c - else -- Hide and detach tags if not - c.hidden = true - local ctags = c:tags() - for i, t in pairs(ctags) do - ctags[i] = nil - end - c:tags(ctags) - end - end -end - -return setmetatable(drop, { __call = function(_, ...) return toggle(...) end }) diff --git a/scratch/init.lua b/scratch/init.lua deleted file mode 100644 index f3b3e7e..0000000 --- a/scratch/init.lua +++ /dev/null @@ -1,14 +0,0 @@ ---------------------------------------------------------------- --- Drop-down applications and scratchpad manager for awesome wm ---------------------------------------------------------------- --- Coded by: * Adrian C. (anrxc) --- Licensed under the WTFPL version 2 --- * http://sam.zoy.org/wtfpl/COPYING ---------------------------------------------------------------- - -local scratch = {} -- module scratch - -scratch.pad = require("scratch.pad") -scratch.drop = require("scratch.drop") - -return scratch diff --git a/scratch/pad.lua b/scratch/pad.lua deleted file mode 100644 index cdc4c01..0000000 --- a/scratch/pad.lua +++ /dev/null @@ -1,137 +0,0 @@ ---------------------------------------------------------------- --- Basic scratchpad manager for the awesome window manager ---------------------------------------------------------------- --- Coded by: * Adrian C. (anrxc) --- Licensed under the WTFPL version 2 --- * http://sam.zoy.org/wtfpl/COPYING ---------------------------------------------------------------- --- To use this module add: --- local scratch = require("scratch") --- to the top of your rc.lua, and call: --- scratch.pad.set(c, width, height, sticky, screen) --- from a clientkeys binding, and: --- scratch.pad.toggle(screen) --- from a globalkeys binding. --- --- Parameters: --- c - Client to scratch or un-scratch --- width - Width in absolute pixels, or width percentage --- when <= 1 (0.50 (50% of the screen) by default) --- height - Height in absolute pixels, or height percentage --- when <= 1 (0.50 (50% of the screen) by default) --- sticky - Visible on all tags, false by default --- screen - Screen (optional), mouse.screen by default ---------------------------------------------------------------- - --- Grab environment -local pairs = pairs -local awful = require("awful") -local capi = { - mouse = mouse, - client = client, - screen = screen -} - --- Scratchpad: basic scratchpad manager for the awesome window manager -local pad = {} -- module scratch.pad - - -local scratchpad = {} - --- Toggle a set of properties on a client. -local function toggleprop(c, prop) - c.ontop = prop.ontop or false - c.above = prop.above or false - c.hidden = prop.hidden or false - c.sticky = prop.stick or false - c.skip_taskbar = prop.task or false -end - --- Scratch the focused client, or un-scratch and tile it. If another --- client is already scratched, replace it with the focused client. -function pad.set(c, width, height, sticky, screen) - width = width or 0.50 - height = height or 0.50 - sticky = sticky or false - screen = screen or capi.mouse.screen - - -- Determine signal usage in this version of awesome - local attach_signal = capi.client.connect_signal or capi.client.add_signal - local detach_signal = capi.client.disconnect_signal or capi.client.remove_signal - - local function setscratch(c) - -- Scratchpad is floating and has no titlebar - awful.client.floating.set(c, true); awful.titlebar.remove(c) - - -- Scratchpad client properties - toggleprop(c, {ontop=true, above=true, task=true, stick=sticky}) - - -- Scratchpad geometry and placement - local screengeom = capi.screen[screen].workarea - if width <= 1 then width = screengeom.width * width end - if height <= 1 then height = screengeom.height * height end - - c:geometry({ -- Scratchpad is always centered on screen - x = screengeom.x + (screengeom.width - width) / 2, - y = screengeom.y + (screengeom.height - height) / 2, - width = width, height = height - }) - - -- Scratchpad should not loose focus - c:raise(); capi.client.focus = c - end - - -- Prepare a table for storing clients, - if not scratchpad.pad then scratchpad.pad = {} - -- add unmanage signal for scratchpad clients - attach_signal("unmanage", function (c) - for scr, cl in pairs(scratchpad.pad) do - if cl == c then scratchpad.pad[scr] = nil end - end - end) - end - - -- If the scratcphad is emtpy, store the client, - if not scratchpad.pad[screen] then - scratchpad.pad[screen] = c - -- then apply geometry and properties - setscratch(c) - else -- If a client is already scratched, - local oc = scratchpad.pad[screen] - -- unscratch, and compare it with the focused client - awful.client.floating.toggle(oc); toggleprop(oc, {}) - -- If it matches clear the table, if not replace it - if oc == c then scratchpad.pad[screen] = nil - else scratchpad.pad[screen] = c; setscratch(c) end - end -end - --- Move the scratchpad to the current workspace, focus and raise it --- when it's hidden, or hide it when it's visible. -function pad.toggle(screen) - screen = screen or capi.mouse.screen - - -- Check if we have a client on storage, - if scratchpad.pad and - scratchpad.pad[screen] ~= nil - then -- and get it out, to play - local c = scratchpad.pad[screen] - - -- If it's visible on another tag hide it, - if c:isvisible() == false then c.hidden = true - -- and move it to the current worskpace - awful.client.movetotag(awful.tag.selected(screen), c) - end - - -- Focus and raise if it's hidden, - if c.hidden then - awful.placement.centered(c) - c.hidden = false - c:raise(); capi.client.focus = c - else -- hide it if it's not - c.hidden = true - end - end -end - -return pad diff --git a/zenburn.lua b/zenburn.lua deleted file mode 100644 index ba06d4b..0000000 --- a/zenburn.lua +++ /dev/null @@ -1,144 +0,0 @@ -------------------------------- --- "Zenburn" awesome theme -- --- By Adrian C. (anrxc) -- --- License: GNU GPL v2 -- -------------------------------- - - --- {{{ Main -theme = {} -theme.confdir = awful.util.getdir("config") -theme.wallpaper_cmd = { "/usr/bin/nitrogen --restore" } ---theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/zenburn/zenburn-background.png" } --- }}} - - --- {{{ Styles -theme.font = "Profont 8" - --- {{{ Colors -theme.fg_normal = "#DCDCCC" -theme.fg_focus = "#F0DFAF" -theme.fg_urgent = "#CC9393" -theme.bg_normal = "#3F3F3F" -theme.bg_focus = "#1E2320" -theme.bg_urgent = theme.bg_normal --- }}} - --- {{{ Borders -theme.border_width = 1 -theme.border_focus = "#6F6F6F" -theme.border_normal = theme.bg_normal -theme.border_marked = theme.fg_urgent --- }}} - --- {{{ Titlebars -theme.titlebar_bg_focus = theme.bg_normal -theme.titlebar_bg_normal = theme.bg_normal --- theme.titlebar_[normal|focus] --- }}} - --- {{{ Widgets -theme.fg_widget = "#AECF96" -theme.fg_center_widget = "#88A175" -theme.fg_end_widget = "#FF5656" -theme.fg_off_widget = "#494B4F" -theme.fg_netup_widget = "#7F9F7F" -theme.fg_netdn_widget = theme.fg_urgent -theme.bg_widget = theme.bg_normal -theme.border_widget = theme.bg_normal --- }}} - --- {{{ Mouse finder -theme.mouse_finder_color = theme.fg_urgent --- theme.mouse_finder_[timeout|animate_timeout|radius|factor] --- }}} - --- {{{ Tooltips --- theme.tooltip_[font|opacity|fg_color|bg_color|border_width|border_color] --- }}} - --- {{{ Taglist and Tasklist --- theme.[taglist|tasklist]_[bg|fg]_[focus|urgent] --- }}} - --- {{{ Menu --- theme.menu_[bg|fg]_[normal|focus] --- theme.menu_[height|width|border_color|border_width] --- }}} --- }}} - - --- {{{ Icons --- --- {{{ Taglist icons -theme.taglist_squares_sel = theme.confdir .. "/icons/taglist/sel.png" -theme.taglist_squares_unsel = theme.confdir .. "/icons/taglist/unsel.png" ---theme.taglist_squares_resize = "false" --- }}} - --- {{{ Misc icons ---theme.awesome_icon = theme.confdir .. "/icons/awesome.png" ---theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png" ---theme.tasklist_floating_icon = "/usr/share/awesome/themes/default/tasklist/floatingw.png" --- }}} - --- {{{ Layout icons -theme.layout_tile = theme.confdir .. "/icons/layouts/tile.png" -theme.layout_tileleft = theme.confdir .. "/icons/layouts/tileleft.png" -theme.layout_tilebottom = theme.confdir .. "/icons/layouts/tilebottom.png" -theme.layout_tiletop = theme.confdir .. "/icons/layouts/tiletop.png" -theme.layout_fairv = theme.confdir .. "/icons/layouts/fairv.png" -theme.layout_fairh = theme.confdir .. "/icons/layouts/fairh.png" -theme.layout_spiral = theme.confdir .. "/icons/layouts/spiral.png" -theme.layout_dwindle = theme.confdir .. "/icons/layouts/dwindle.png" -theme.layout_max = theme.confdir .. "/icons/layouts/max.png" -theme.layout_fullscreen = theme.confdir .. "/icons/layouts/fullscreen.png" -theme.layout_magnifier = theme.confdir .. "/icons/layouts/magnifier.png" -theme.layout_floating = theme.confdir .. "/icons/layouts/floating.png" --- }}} - --- {{{ Widget icons -theme.widget_cpu = theme.confdir .. "/icons/cpu.png" -theme.widget_bat = theme.confdir .. "/icons/bat.png" -theme.widget_mem = theme.confdir .. "/icons/mem.png" -theme.widget_fs = theme.confdir .. "/icons/disk.png" -theme.widget_net = theme.confdir .. "/icons/down.png" -theme.widget_netup = theme.confdir .. "/icons/up.png" -theme.widget_wifi = theme.confdir .. "/icons/wifi.png" -theme.widget_mail = theme.confdir .. "/icons/mail.png" -theme.widget_vol = theme.confdir .. "/icons/vol.png" -theme.widget_org = theme.confdir .. "/icons/cal.png" -theme.widget_date = theme.confdir .. "/icons/time.png" -theme.widget_crypto = theme.confdir .. "/icons/crypto.png" -theme.widget_sep = theme.confdir .. "/icons/separator.png" --- }}} - --- {{{ Titlebar icons -theme.titlebar_close_button_focus = theme.confdir .. "/icons/titlebar/close_focus.png" -theme.titlebar_close_button_normal = theme.confdir .. "/icons/titlebar/close_normal.png" - -theme.titlebar_ontop_button_focus_active = theme.confdir .. "/icons/titlebar/ontop_focus_active.png" -theme.titlebar_ontop_button_normal_active = theme.confdir .. "/icons/titlebar/ontop_normal_active.png" -theme.titlebar_ontop_button_focus_inactive = theme.confdir .. "/icons/titlebar/ontop_focus_inactive.png" -theme.titlebar_ontop_button_normal_inactive = theme.confdir .. "/icons/titlebar/ontop_normal_inactive.png" - -theme.titlebar_sticky_button_focus_active = theme.confdir .. "/icons/titlebar/sticky_focus_active.png" -theme.titlebar_sticky_button_normal_active = theme.confdir .. "/icons/titlebar/sticky_normal_active.png" -theme.titlebar_sticky_button_focus_inactive = theme.confdir .. "/icons/titlebar/sticky_focus_inactive.png" -theme.titlebar_sticky_button_normal_inactive = theme.confdir .. "/icons/titlebar/sticky_normal_inactive.png" - -theme.titlebar_floating_button_focus_active = theme.confdir .. "/icons/titlebar/floating_focus_active.png" -theme.titlebar_floating_button_normal_active = theme.confdir .. "/icons/titlebar/floating_normal_active.png" -theme.titlebar_floating_button_focus_inactive = theme.confdir .. "/icons/titlebar/floating_focus_inactive.png" -theme.titlebar_floating_button_normal_inactive = theme.confdir .. "/icons/titlebar/floating_normal_inactive.png" - -theme.titlebar_maximized_button_focus_active = theme.confdir .. "/icons/titlebar/maximized_focus_active.png" -theme.titlebar_maximized_button_normal_active = theme.confdir .. "/icons/titlebar/maximized_normal_active.png" -theme.titlebar_maximized_button_focus_inactive = theme.confdir .. "/icons/titlebar/maximized_focus_inactive.png" -theme.titlebar_maximized_button_normal_inactive = theme.confdir .. "/icons/titlebar/maximized_normal_inactive.png" --- }}} --- }}} - - -return theme -- cgit v1.2.3