Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Standard awesome library
- require("awful")
- require("awful.autofocus")
- require("awful.rules")
- -- Theme handling library
- require("beautiful")
- -- Notification library
- require("naughty")
- -- shifty - dynamic tagging library
- require("shifty")
- -- {{{ 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.add_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 = err })
- in_error = false
- end)
- end
- -- }}}
- -- useful for debugging, marks the beginning of rc.lua exec
- print("Entered rc.lua: " .. os.time())
- -- {{{ Variable definitions
- -- Themes define colours, icons, and wallpapers
- beautiful.init(awful.util.getdir("config") .. "/themes/own/theme.lua")
- -- This is used later as the default terminal and editor to run.
- terminal = "urxvt"
- editor = os.getenv("EDITOR") or "nano"
- editor_cmd = editor
- browser = os.getenv("BROWSER")
- mail = terminal .. " -e mutt"
- office = "soffice"
- screenlock = "slock"
- alsa_mute = "amixer -q set Master toggle"
- alsa_lower = "amixer -q set Master 5dB-"
- alsa_raise = "amixer -q set Master 5dB+"
- backlight_inc = "xbacklight -inc 10"
- backlight_dec = "xbacklight -dec 10"
- -- 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"
- -- Table of layouts to cover with awful.layout.inc, order matters.
- layouts =
- {
- awful.layout.suit.floating,
- awful.layout.suit.tile,
- awful.layout.suit.tile.bottom,
- awful.layout.suit.max,
- awful.layout.suit.max.fullscreen,
- }
- -- }}}
- -- Define if we want to use titlebar on all applications.
- use_titlebar = false
- -- Shifty configured tags.
- shifty.config.tags = {
- ["1:term"] = {
- layout = awful.layout.suit.tile.bottom,
- mwfact = 0.60,
- position = 1,
- init = true,
- screen = screen.count(),
- spawn = terminal,
- exclusive = true,
- },
- ["2:web"] = {
- layout = awful.layout.suit.max,
- position = 2,
- screen = 1,
- spawn = browser,
- exclusive = true,
- },
- ["3:view"] = {
- layout = awful.layout.suit.max,
- position = 3,
- screen = 1,
- spawn = "evince"
- },
- ["4:edit"] = {
- layout = awful.layout.suit.max,
- position = 4,
- screen = screen.count(),
- spawn = editor_cmd
- },
- ["5:office"] = {
- layout = awful.layout.suit.tile,
- position = 5,
- screen = screen.count(),
- spawn = office
- },
- ["6:dev"] = {
- layout = awful.layout.suit.max,
- position = 6,
- screen = screen.count(),
- },
- ["7:soc"] = {
- layout = awful.layout.suit.tile,
- position = 7,
- screen = screen.count(),
- },
- ["8:media"] = {
- layout = awful.layout.suit.tile,
- position = 8,
- screen = 1,
- },
- ["9:mail"] = {
- layout = awful.layout.suit.max,
- position = 9,
- screen = screen.count(),
- spawn = mail
- },
- }
- -- SHIFTY: application matching rules
- -- order here matters, early rules will be applied first
- shifty.config.apps = {
- { match = { "XTerm", "URxvt" },
- tag = "1:term",
- },
- { match = { "Firefox", "luakit", "Iceweasel", "Icedove", "uzbl", "dwb" },
- tag = "2:web",
- nopopup = true,
- },
- { match = { "Xpdf", "Okular", "XDvi", "Geeqie", "Apvlv", "Evince", "feh", "zathura" },
- tag = "3:view",
- },
- { match = { "Gimp", "Scite", "Gvim", "Gview", "Zim", "jabref" },
- tag = "4:edit",
- max_clients = 1,
- },
- { match = { "LibreOffice*", "Calligra*" },
- tag = "5:office",
- },
- { match = { "Codeblocks", "Texmaker" },
- tag = "6:dev",
- },
- { match = { "Pidgin", "Skype", "Empathy", "Jitsi" },
- tag = "7:soc",
- },
- { match = { "Vlc", "mplayer", "guayadeque" },
- tag = "8:media",
- },
- { match = { "Icedove" },
- tag = "9:mail",
- },
- { match = { name = { "Mutt" } },
- tag = "9:mail",
- },
- {
- match = {""},
- buttons = awful.util.table.join(
- awful.button({}, 1, function (c) client.focus = c; c:raise() end),
- awful.button({modkey}, 1, function(c)
- client.focus = c
- c:raise()
- awful.mouse.client.move(c)
- end),
- awful.button({modkey}, 3, awful.mouse.client.resize)
- )
- },
- }
- -- SHIFTY: default tag creation rules
- -- parameter description
- -- * floatBars : if floating clients should always have a titlebar
- -- * guess_name : should shifty try and guess tag names when creating
- -- new (unconfigured) tags?
- -- * guess_position: as above, but for position parameter
- -- * run : function to exec when shifty creates a new tag
- -- * all other parameters (e.g. layout, mwfact) follow awesome's tag API
- shifty.config.defaults = {
- layout = awful.layout.suit.max,
- ncol = 1,
- mwfact = 0.60,
- floatBars = true,
- guess_name = true,
- guess_position = true,
- }
- -- {{{ Wibox
- -- Create a systray
- mysystray = widget({ type = "systray" })
- -- Create a wibox for each screen and add it
- mywibox = {}
- myconkybox = {}
- mypromptbox = {}
- mylayoutbox = {}
- mytaglist = {}
- mytaglist.buttons = awful.util.table.join(
- awful.button({ }, 1, awful.tag.viewonly),
- awful.button({ modkey }, 1, awful.client.movetotag),
- awful.button({ }, 3, awful.tag.viewtoggle),
- awful.button({ modkey }, 3, awful.client.toggletag),
- awful.button({ }, 4, awful.tag.viewnext),
- awful.button({ }, 5, awful.tag.viewprev)
- )
- mytasklist = {}
- mytasklist.buttons = awful.util.table.join(
- awful.button({ }, 1, function (c)
- if c == client.focus then
- c.minimized = true
- else
- if not c:isvisible() then
- awful.tag.viewonly(c:tags()[1])
- end
- -- This will also un-minimize
- -- the client, if needed
- client.focus = c
- c:raise()
- end
- end),
- awful.button({ }, 3, function ()
- if instance then
- instance:hide()
- instance = nil
- else
- instance = awful.menu.clients({ width=250 })
- end
- end),
- awful.button({ }, 4, function ()
- awful.client.focus.byidx(1)
- if client.focus then client.focus:raise() end
- end),
- awful.button({ }, 5, function ()
- awful.client.focus.byidx(-1)
- if client.focus then client.focus:raise() end
- end))
- for s = 1, screen.count() do
- -- Create a promptbox for each screen
- mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright })
- -- Create an imagebox widget which will contains an icon indicating which layout we're using.
- -- We need one layoutbox per screen.
- mylayoutbox[s] = awful.widget.layoutbox(s)
- -- Create a taglist widget
- mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons)
- -- Create a tasklist widget
- mytasklist[s] = awful.widget.tasklist(function(c)
- return awful.widget.tasklist.label.currenttags(c, s)
- end, mytasklist.buttons)
- -- Create the wibox
- mywibox[s] = awful.wibox({ position = "top", screen = s })
- myconkybox[s] = awful.wibox({ position = "bottom", screen = screen.count(), height = "15", width = "1", ontop = false })
- -- Add widgets to the wibox - order matters
- mywibox[s].widgets = {
- {
- mylayoutbox[s],
- mytaglist[s],
- mypromptbox[s],
- layout = awful.widget.layout.horizontal.leftright
- },
- s == 1 and mysystray or nil,
- mytasklist[s],
- layout = awful.widget.layout.horizontal.rightleft
- }
- end
- -- }}}
- -- SHIFTY: initialize shifty
- -- the assignment of shifty.taglist must always be after its actually
- -- initialized with awful.widget.taglist.new()
- shifty.taglist = mytaglist
- shifty.init()
- -- {{{ Mouse bindings
- root.buttons(awful.util.table.join(
- awful.button({ }, 4, awful.tag.viewnext),
- awful.button({ }, 5, awful.tag.viewprev)
- ))
- -- }}}
- -- {{{ Key bindings
- globalkeys = awful.util.table.join(
- awful.key({ modkey, }, "Left", awful.tag.viewprev ),
- awful.key({ modkey, }, "Right", awful.tag.viewnext ),
- awful.key({ modkey, }, "Escape", awful.tag.history.restore),
- 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),
- -- Shifty: keybindings specific to shifty
- awful.key({modkey, "Shift" }, "d", shifty.del ), -- delete a tag
- awful.key({modkey, "Shift" }, "n", shifty.send_prev ), -- client to prev tag
- awful.key({modkey }, "n", shifty.send_next ), -- client to next tag
- awful.key({modkey, "Control"}, "n",
- function()
- local t = awful.tag.selected()
- if t ~= nil then
- local s = awful.util.cycle(screen.count(), t.screen + 1)
- awful.tag.history.restore()
- t = shifty.tagtoscr(s, t)
- awful.tag.viewonly(t)
- end
- end),
- awful.key({modkey }, "a", shifty.add ), -- creat a new tag
- awful.key({modkey }, "r", shifty.rename ), -- rename a tag
- awful.key({modkey, "Shift" }, "a", -- nopopup new tag
- function()
- shifty.add({nopopup = true})
- end),
- -- Layout manipulation
- awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end),
- awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end),
- awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end),
- awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end),
- awful.key({ modkey, }, "u", awful.client.urgent.jumpto),
- awful.key({ modkey, }, "Tab",
- function ()
- awful.client.focus.history.previous()
- if client.focus then
- client.focus:raise()
- end
- end),
- -- Standard program
- awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end),
- awful.key({ modkey, "Control" }, "r", awesome.restart ),
- awful.key({ modkey, "Shift" }, "q", awesome.quit ),
- 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" }, "h", function () awful.tag.incnmaster( 1) end),
- awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end),
- awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end),
- awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end),
- awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end),
- awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end),
- -- awful.key({ modkey, "Control" }, "n", awful.client.restore ), -- used for shifty and does not work!
- -- Prompt
- awful.key({ modkey }, "F1", function () mypromptbox[screen.count()]:run() end),
- awful.key({ modkey }, "F4",
- function ()
- awful.prompt.run({ prompt = "Run Lua code: " },
- mypromptbox[screen.count()].widget,
- awful.util.eval, nil,
- awful.util.getdir("cache") .. "/history_eval")
- end),
- -- own keys
- awful.key({ modkey, }, "e", function () awful.util.spawn(editor) end),
- awful.key({ }, "#160", function () awful.util.spawn(screenlock) end),
- awful.key({ }, "#122", function () awful.util.spawn(alsa_lower) end),
- awful.key({ }, "#123", function () awful.util.spawn(alsa_raise) end),
- awful.key({ }, "#121", function () awful.util.spawn(alsa_mute) end),
- awful.key({ }, "#158", function () awful.util.spawn(browser) end),
- awful.key({ }, "#163", function () awful.util.spawn(mail) end)--,
- -- awful.key({ }, "#232", function () awful.util.spawn(backlight_dec) end),
- -- awful.key({ }, "#233", function () awful.util.spawn(backlight_inc) end)
- )
- clientkeys = awful.util.table.join(
- awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end),
- awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end),
- awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ),
- awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
- awful.key({ modkey, }, "o", awful.client.movetoscreen ),
- awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end),
- awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end),
- awful.key({ modkey, }, "n",
- function (c)
- -- The client currently has the input focus, so it cannot be
- -- minimized, since minimized clients can't have the focus.
- c.minimized = true
- end),
- awful.key({ modkey, }, "m",
- function (c)
- c.maximized_horizontal = not c.maximized_horizontal
- c.maximized_vertical = not c.maximized_vertical
- end)
- )
- -- SHIFTY: assign client keys to shifty for use in
- -- match() function(manage hook)
- shifty.config.clientkeys = clientkeys
- shifty.config.modkey = modkey
- -- Compute the maximum number of digit we need, limited to 9
- for i = 1, (shifty.config.maxtags or 9) do
- globalkeys = awful.util.table.join(globalkeys,
- awful.key({modkey}, i, function()
- local t = awful.tag.viewonly(shifty.getpos(i))
- end),
- awful.key({modkey, "Control"}, i, function()
- local t = shifty.getpos(i)
- t.selected = not t.selected
- end),
- awful.key({modkey, "Control", "Shift"}, i, function()
- if client.focus then
- awful.client.toggletag(shifty.getpos(i))
- end
- end),
- -- move clients to other tags
- awful.key({modkey, "Shift"}, i, function()
- if client.focus then
- t = shifty.getpos(i)
- awful.client.movetotag(t)
- awful.tag.viewonly(t)
- end
- end))
- end
- -- Set keys
- root.keys(globalkeys)
- -- }}}
- -- {{{ Signals
- -- Signal function to execute when a new client appears.
- client.add_signal("manage", function (c, startup)
- -- Add a titlebar
- -- awful.titlebar.add(c, { modkey = modkey })
- -- 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)
- if not startup then
- -- Set the windows at the slave,
- -- i.e. put it at the end of others instead of setting it master.
- -- awful.client.setslave(c)
- -- Put windows in a smart way, only if they does not set an initial position.
- if not c.size_hints.user_position and not c.size_hints.program_position then
- awful.placement.no_overlap(c)
- awful.placement.no_offscreen(c)
- end
- end
- end)
- 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)
- -- }}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement