diff --git a/themes/powerarrow-dark/icons/bluetooth.png b/themes/powerarrow-dark/icons/bluetooth.png new file mode 100755 index 0000000..5b73c11 Binary files /dev/null and b/themes/powerarrow-dark/icons/bluetooth.png differ diff --git a/themes/powerarrow-dark/rc.lua.custom b/themes/powerarrow-dark/rc.lua.custom new file mode 100644 index 0000000..eae0a9b --- /dev/null +++ b/themes/powerarrow-dark/rc.lua.custom @@ -0,0 +1,990 @@ +--[[ + + Awesome WM configuration template + github.com/lcpz + +--]] -- {{{ Required libraries +-- If LuaRocks is installed, make sure that packages installed through it are +-- found (e.g. lgi). If LuaRocks is not installed, do nothing. +pcall(require, "luarocks.loader") + +local gears = require("gears") +local awful = require("awful") +require("awful.autofocus") +local wibox = require("wibox") +local beautiful = require("beautiful") +local naughty = require("naughty") +local lain = require("lain") +-- local menubar = require("menubar") +local freedesktop = require("freedesktop") +local hotkeys_popup = require("awful.hotkeys_popup") +require("awful.hotkeys_popup.keys") +local mytable = awful.util.table or gears.table -- 4.{0,1} compatibility +-- collision +--require("collision")() + +-- }}} + +-- {{{ 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) + 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 + +-- }}} + +-- {{{ Autostart windowless processes + +-- This function will run once every time Awesome is started +local function run_once(cmd_arr) + for _, cmd in ipairs(cmd_arr) do + awful.spawn.with_shell(string.format("pgrep -u $USER -fx '%s' > /dev/null || (%s)", cmd, cmd)) + end +end + +run_once({ "urxvtd", "unclutter -root" }) -- comma-separated entries + +-- This function implements the XDG autostart specification +--[[ +awful.spawn.with_shell( + 'if (xrdb -query | grep -q "^awesome\\.started:\\s*true$"); then exit; fi;' .. + 'xrdb -merge <<< "awesome.started:true";' .. + -- list each of your autostart commands, followed by ; inside single quotes, followed by .. + 'dex --environment Awesome --autostart --search-paths "$XDG_CONFIG_DIRS/autostart:$XDG_CONFIG_HOME/autostart"' -- https://github.com/jceb/dex +) +--]] + +-- }}} + +-- {{{ Variable definitions + +local themes = { "blackburn", -- 1 + "copland", -- 2 + "dremora", -- 3 + "holo", -- 4 + "multicolor", -- 5 + "powerarrow", -- 6 + "powerarrow-dark", -- 7 + "rainbow", -- 8 + "steamburn", -- 9 + "vertex" -- 10 +} + +local chosen_theme = themes[7] +local modkey = "Mod4" +local altkey = "Mod1" +local terminal = "gnome-terminal" +local vi_focus = false -- vi-like client focus https://github.com/lcpz/awesome-copycats/issues/275 +local cycle_prev = true -- cycle with only the previously focused client or all https://github.com/lcpz/awesome-copycats/issues/274 +local editor = os.getenv("EDITOR") or "nano" +local browser = "flatpak run io.gitlab.librewolf-community" + +-- Bluetooth +os.execute("rfkill block bluetooth") +BLUESTATUS = false + +-- IBus +os.execute("ibus-daemon -d") + +awful.util.terminal = terminal +awful.util.tagnames = { "1", "2" } +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, + -- lain.layout.cascade, + -- lain.layout.cascade.tile, + -- lain.layout.centerwork, + -- lain.layout.centerwork.horizontal, + -- lain.layout.termfair, + -- lain.layout.termfair.center +} + +lain.layout.termfair.nmaster = 3 +lain.layout.termfair.ncol = 1 +lain.layout.termfair.center.nmaster = 3 +lain.layout.termfair.center.ncol = 1 +lain.layout.cascade.tile.offset_x = 2 +lain.layout.cascade.tile.offset_y = 32 +lain.layout.cascade.tile.extra_padding = 5 +lain.layout.cascade.tile.nmaster = 5 +lain.layout.cascade.tile.ncol = 2 + +awful.util.taglist_buttons = mytable.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)) + +awful.util.tasklist_buttons = mytable.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)) + +beautiful.init(string.format("%s/.config/awesome/themes/%s/theme.lua", os.getenv("HOME"), chosen_theme)) + +-- }}} + +-- {{{ Menu + +-- Create a launcher widget and a main menu +local myawesomemenu = { { "Hotkeys", function() + hotkeys_popup.show_help(nil, awful.screen.focused()) +end }, { "Manual", string.format("%s -e man awesome", terminal) }, +{ "Edit config", string.format("%s -e %s %s", terminal, editor, awesome.conffile) }, +{ "Restart", awesome.restart }, { "Quit", function() + awesome.quit() +end } } + +awful.util.mymainmenu = freedesktop.menu.build { + before = { { "Awesome", myawesomemenu, beautiful.awesome_icon } -- other triads can be put here + }, + after = { { "Open terminal", terminal } -- other triads can be put here + } +} + +-- Hide the menu when the mouse leaves it + +awful.util.mymainmenu.wibox:connect_signal("mouse::leave", function() + if not awful.util.mymainmenu.active_child or + (awful.util.mymainmenu.wibox ~= mouse.current_wibox and awful.util.mymainmenu.active_child.wibox ~= + mouse.current_wibox) then + awful.util.mymainmenu:hide() + else + awful.util.mymainmenu.active_child.wibox:connect_signal("mouse::leave", function() + if awful.util.mymainmenu.wibox ~= mouse.current_wibox then + awful.util.mymainmenu:hide() + end + end) + end +end) + +-- Set the Menubar terminal for applications that require it +-- menubar.utils.terminal = terminal + +-- }}} + +-- {{{ Screen + +-- Re-set wallpaper when a screen's geometry changes (e.g. different resolution) +-- screen.connect_signal("property::geometry", function(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) + +-- No borders when rearranging only 1 non-floating or maximized client +screen.connect_signal("arrange", function(s) + local only_one = #s.tiled_clients == 1 + for _, c in pairs(s.clients) do + if only_one and not c.floating or c.maximized or c.fullscreen then + c.border_width = 0 + else + c.border_width = beautiful.border_width + end + end +end) + +-- Create a wibox for each screen and add it +awful.screen.connect_for_each_screen(function(s) + beautiful.at_screen_connect(s) +end) + +-- }}} + +-- {{{ Mouse bindings + +root.buttons(mytable.join(awful.button({}, 3, function() + awful.util.mymainmenu:toggle() +end), awful.button({}, 4, awful.tag.viewnext), awful.button({}, 5, awful.tag.viewprev))) + +-- }}} + +-- {{{ Key bindings + +globalkeys = mytable.join(-- Destroy all notifications + awful.key({ "Control" }, "space", function() + naughty.destroy_all_notifications() + end, { + description = "destroy all notifications", + group = "hotkeys" + }), -- Take a screenshot + -- https://github.com/lcpz/dots/blob/master/bin/screenshot + awful.key({ altkey }, "p", function() + os.execute("screenshot.lnk") + end, { + description = "take a screenshot", + group = "hotkeys" + }), -- X screen locker + awful.key({ altkey, "Control", "Shift" }, "l", function() + os.execute("xscreensaver-command -lock") + end, { + description = "lock screen", + group = "hotkeys" + }), -- Show help + awful.key({ modkey }, "s", hotkeys_popup.show_help, { + description = "show help", + group = "awesome" + }), -- Tag browsing + awful.key({ modkey, "Ctrl" }, "Left", awful.tag.viewprev, { + description = "view previous", + group = "tag" + }), awful.key({ modkey, "Ctrl" }, "Right", awful.tag.viewnext, { + description = "view next", + group = "tag" + }), awful.key({ modkey }, "Escape", awful.tag.history.restore, { + description = "go back", + group = "tag" + }), -- Non-empty tag browsing + -- awful.key({altkey}, "Left", function() + -- lain.util.tag_view_nonempty(-1) + -- end, { + -- description = "view previous nonempty", + -- group = "tag" + -- }), + -- awful.key({altkey}, "Right", function() + -- lain.util.tag_view_nonempty(1) + -- end, { + -- description = "view previous nonempty", + -- group = "tag" + -- }), + -- Default client focus + awful.key({ altkey }, "j", function() + awful.client.focus.byidx(1) + end, { + description = "focus next by index", + group = "client" + }), awful.key({ altkey }, "k", function() + awful.client.focus.byidx(-1) + end, { + description = "focus previous by index", + group = "client" + }), -- By-direction client focus + awful.key({ modkey }, "j", function() + awful.client.focus.global_bydirection("down") + if client.focus then + client.focus:raise() + end + end, { + description = "focus down", + group = "client" + }), awful.key({ modkey }, "k", function() + awful.client.focus.global_bydirection("up") + if client.focus then + client.focus:raise() + end + end, { + description = "focus up", + group = "client" + }), awful.key({ modkey }, "h", function() + awful.client.focus.global_bydirection("left") + if client.focus then + client.focus:raise() + end + end, { + description = "focus left", + group = "client" + }), awful.key({ modkey }, "l", function() + awful.client.focus.global_bydirection("right") + if client.focus then + client.focus:raise() + end + end, { + description = "focus right", + group = "client" + }), -- Menu + awful.key({ modkey }, "w", function() + awful.util.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() + if cycle_prev then + awful.client.focus.history.previous() + else + awful.client.focus.byidx(-1) + end + if client.focus then + client.focus:raise() + end + end, { + description = "cycle with previous/go back", + group = "client" + }), -- Show/hide wibox + awful.key({ modkey }, "b", function() + for s in screen do + s.mywibox.visible = not s.mywibox.visible + if s.mybottomwibox then + s.mybottomwibox.visible = not s.mybottomwibox.visible + end + end + end, { + description = "toggle wibox", + group = "awesome" + }), -- On-the-fly useless gaps change + awful.key({ altkey, "Control" }, "+", function() + lain.util.useless_gaps_resize(1) + end, { + description = "increment useless gaps", + group = "tag" + }), awful.key({ altkey, "Control" }, "-", function() + lain.util.useless_gaps_resize(-1) + end, { + description = "decrement useless gaps", + group = "tag" + }), -- Dynamic tagging + awful.key({ modkey, "Shift" }, "n", function() + lain.util.add_tag() + end, { + description = "add new tag", + group = "tag" + }), awful.key({ modkey, "Shift" }, "r", function() + lain.util.rename_tag() + end, { + description = "rename tag", + group = "tag" + }), awful.key({ modkey, "Shift" }, "Left", function() + lain.util.move_tag(-1) + end, { + description = "move tag to the left", + group = "tag" + }), awful.key({ modkey, "Shift" }, "Right", function() + lain.util.move_tag(1) + end, { + description = "move tag to the right", + group = "tag" + }), awful.key({ modkey, "Shift" }, "d", function() + lain.util.delete_tag() + end, { + description = "delete tag", + group = "tag" + }), -- 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, altkey }, "l", function() + awful.tag.incmwfact(0.05) + end, { + description = "increase master width factor", + group = "layout" + }), awful.key({ modkey, altkey }, "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 + c:emit_signal("request::activate", "key.unminimize", { + raise = true + }) + end + end, { + description = "restore minimized", + group = "client" + }), -- Dropdown application + awful.key({ modkey }, "z", function() + awful.screen.focused().quake:toggle() + end, { + description = "dropdown application", + group = "launcher" + }), -- Widgets popups + awful.key({ altkey }, "c", function() + if beautiful.cal then + beautiful.cal.show(7) + end + end, { + description = "show calendar", + group = "widgets" + }), awful.key({ altkey }, "h", function() + if beautiful.fs then + beautiful.fs.show(7) + end + end, { + description = "show filesystem", + group = "widgets" + }), awful.key({ altkey }, "w", function() + if beautiful.weather then + beautiful.weather.show(7) + end + end, { + description = "show weather", + group = "widgets" + }), -- Screen brightness + awful.key({}, "#233", function() + os.execute("adjust-brightness.lnk --inc 10") + end, { + description = "Fn + f6 --- brightness +10%", + group = "hotkeys" + }), awful.key({}, "#232", function() + os.execute("adjust-brightness.lnk --dec 10") + end, { + description = "Fn + f5 --- brightness -10%", + group = "hotkeys" + }), -- Max/Min Brightness + awful.key({ altkey, "Control", "Shift" }, "0", function() + os.execute("adjust-brightness.lnk --min") + end, { + description = "Min screen brightness", + group = "hotkeys" + }), awful.key({ altkey, "Control", "Shift" }, "9", function() + os.execute("adjust-brightness.lnk --max") + end, { + description = "Max screen brightness", + group = "hotkeys" + }), + awful.key({ altkey, "Control", "Shift" }, "m", function() + os.execute("adjust-brightness.lnk --mid") + end, { + description = "Mid screen brightness", + group = "hotkeys" + }), + -- Bluetooth toggle + awful.key({ altkey, "Control", "Shift" }, "b", function() + os.execute("rfkill toggle bluetooth") + if BLUESTATUS == false then + naughty.notify({ title = "Bluetooth", text = "Bluetooth is ON", icon = "/home/sirhadrian/.config/awesome/themes/powerarrow-dark/icons/bluetooth.png" }) + BLUESTATUS = true + else + naughty.notify({ title = "Bluetooth", text = "Bluetooth is OFF", icon = "/home/sirhadrian/.config/awesome/themes/powerarrow-dark/icons/bluetooth.png" }) + BLUESTATUS = false + end + end, { + description = "Bluetooth toggle ON/OFF", + group = "hotkeys" + }), + -- ALSA volume control + awful.key({}, "#123", function() + os.execute(string.format("amixer -q set %s 5%%+", beautiful.volume.channel)) + beautiful.volume.update() + end, { + description = "Fn + f3 --- volume up", + group = "hotkeys" + }), awful.key({}, "#122", function() + os.execute(string.format("amixer -q set %s 5%%-", beautiful.volume.channel)) + beautiful.volume.update() + end, { + description = "Fn + f2 --- volume down", + group = "hotkeys" + }), awful.key({}, "#121", function() + os.execute(string.format("amixer -q set %s toggle", beautiful.volume.togglechannel or beautiful.volume.channel)) + beautiful.volume.update() + end, { + description = "Fn + f1 --- toggle mute", + group = "hotkeys" + }), awful.key({ altkey, "Control" }, "m", function() + os.execute(string.format("amixer -q set %s 100%%", beautiful.volume.channel)) + beautiful.volume.update() + end, { + description = "volume 100%", + group = "hotkeys" + }), awful.key({ altkey, "Control" }, "0", function() + os.execute(string.format("amixer -q set %s 0%%", beautiful.volume.channel)) + beautiful.volume.update() + end, { + description = "volume 0%", + group = "hotkeys" + }), -- MPD control + -- awful.key({altkey, "Control"}, "Up", function() + -- os.execute("mpc toggle") + -- beautiful.mpd.update() + -- end, { + -- description = "mpc toggle", + -- group = "widgets" + -- }), awful.key({altkey, "Control"}, "Down", function() + -- os.execute("mpc stop") + -- beautiful.mpd.update() + -- end, { + -- description = "mpc stop", + -- group = "widgets" + -- }), awful.key({altkey, "Control"}, "Left", function() + -- os.execute("mpc prev") + -- beautiful.mpd.update() + -- end, { + -- description = "mpc prev", + -- group = "widgets" + -- }), awful.key({altkey, "Control"}, "Right", function() + -- os.execute("mpc next") + -- beautiful.mpd.update() + -- end, { + -- description = "mpc next", + -- group = "widgets" + -- }), awful.key({altkey}, "0", function() + -- local common = { + -- text = "MPD widget ", + -- position = "top_middle", + -- timeout = 2 + -- } + -- if beautiful.mpd.timer.started then + -- beautiful.mpd.timer:stop() + -- common.text = common.text .. lain.util.markup.bold("OFF") + -- else + -- beautiful.mpd.timer:start() + -- common.text = common.text .. lain.util.markup.bold("ON") + -- end + -- naughty.notify(common) + -- end, { + -- description = "mpc on/off", + -- group = "widgets" + -- }), + -- Copy primary to clipboard (terminals to gtk) + awful.key({ modkey }, "c", function() + awful.spawn.with_shell("xsel | xsel -i -b") + end, { + description = "copy terminal to gtk", + group = "hotkeys" + }), -- Copy clipboard to primary (gtk to terminals) + awful.key({ modkey }, "v", function() + awful.spawn.with_shell("xsel -b | xsel") + end, { + description = "copy gtk to terminal", + group = "hotkeys" + }), -- User programs + awful.key({ modkey }, "d", function() + awful.spawn(browser) + end, { + description = "run browser", + group = "launcher" + }), -- Default + --[[ Menubar + awful.key({ modkey }, "p", function() menubar.show() end, + {description = "show the menubar", group = "launcher"}), + --]] --[[ dmenu + awful.key({ modkey }, "x", function () + os.execute(string.format("dmenu_run -i -fn 'Monospace' -nb '%s' -nf '%s' -sb '%s' -sf '%s'", + beautiful.bg_normal, beautiful.fg_normal, beautiful.bg_focus, beautiful.fg_focus)) + end, + {description = "show dmenu", group = "launcher"}), + --]] -- alternatively use rofi, a dmenu-like application with more features + -- check https://github.com/DaveDavenport/rofi for more details + --[[ rofi + awful.key({ modkey }, "x", function () + os.execute(string.format("rofi -show %s -theme %s", + 'run', 'dmenu')) + end, + {description = "show rofi", group = "launcher"}), + --]] -- Prompt + awful.key({ modkey }, "r", function() + awful.util.spawn("dmenu_run") + end, { + description = "run dmenu", + 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" + })-- ]] +) + +clientkeys = mytable.join(awful.key({ altkey, "Shift" }, "m", lain.util.magnify_client, { + description = "magnify client", + group = "client" +}), awful.key({ modkey }, "f", function(c) + c.fullscreen = not c.fullscreen + c:raise() +end, { + description = "toggle fullscreen", + group = "client" +}), awful.key({ modkey }, "q", 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 = "(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" +})) + +-- Bind all key numbers to tags. +-- Be careful: we use keycodes to make it work on any keyboard layout. +-- This should map on the top row of your keyboard, usually 1 to 9. +for i = 1, 9 do + globalkeys = mytable.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 = mytable.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 + +-- 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, + callback = awful.client.setslave, + focus = awful.client.focus.filter, + raise = true, + keys = clientkeys, + buttons = clientbuttons, + screen = awful.screen.preferred, + placement = awful.placement.no_overlap + awful.placement.no_offscreen, + size_hints_honor = false + } + }, -- Floating clients. + { + rule_any = { + instance = { "DTA", -- Firefox addon DownThemAll. + "copyq", -- Includes session name in class. + "pinentry" }, + class = { "Arandr", "Blueman-manager", "Gpick", "Kruler", "MessageWin", -- kalarm. + "Sxiv", "Tor Browser", -- Needs a fixed window size to avoid fingerprinting by screen size. + "Wpa_gui", "veromix", "xtightvncviewer" }, + + -- Note that the name property shown in xprop might be set slightly after creation of the client + -- and the name shown there might not match defined rules here. + name = { "Event Tester" -- xev. + }, + role = { "AlarmWindow", -- Thunderbird's calendar. + "ConfigManager", -- Thunderbird's about:config. + "pop-up" -- e.g. Google Chrome's (detached) Developer Tools. + } + }, + properties = { + floating = true + } + }, -- Add titlebars to normal clients and dialogs + { + rule_any = { + type = { "normal", "dialog" } + }, + properties = { + titlebars_enabled = false + } + } -- 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) + -- Custom + if beautiful.titlebar_fun then + beautiful.titlebar_fun(c) + return + end + + -- Default + -- buttons for the titlebar + local buttons = mytable.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)) + + 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, so that focus follows mouse. +-- client.connect_signal("mouse::enter", function(c) +-- c:emit_signal("request::activate", "mouse_enter", {raise = vi_focus}) +-- 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) + +-- }}} + +-- Gaps +beautiful.useless_gap = 6 + +-- Compositor +awful.spawn.with_shell("picom") + +-- Wallpapers +awful.spawn.with_shell("nitrogen --set-zoom-fill --random ~/Pictures/SFW") diff --git a/themes/powerarrow-dark/theme.lua b/themes/powerarrow-dark/theme.lua index f72b3c9..bc462ce 100644 --- a/themes/powerarrow-dark/theme.lua +++ b/themes/powerarrow-dark/theme.lua @@ -17,21 +17,41 @@ local my_table = awful.util.table or gears.table -- 4.{0,1} compatibility local theme = {} theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/powerarrow-dark" theme.wallpaper = theme.dir .. "/wall.png" -theme.font = "Terminus 9" -theme.fg_normal = "#DDDDFF" -theme.fg_focus = "#EA6F81" -theme.fg_urgent = "#CC9393" -theme.bg_normal = "#1A1A1A" -theme.bg_focus = "#313131" -theme.bg_urgent = "#1A1A1A" + + +theme.font = "Terminus 10.5" +theme.fg_normal = "#BBBBBB" +theme.fg_focus = "#78A4FF" +theme.bg_normal = "#111111" +theme.bg_focus = "#111111" +theme.fg_urgent = "#000000" +theme.bg_urgent = "#FFFFFF" + +theme.arrows = '#a1a1a1' + +-- theme.font = "Terminus 9" +-- theme.fg_normal = "#DDDDFF" +-- theme.fg_focus = "#EA6F81" +-- theme.fg_urgent = "#CC9393" +-- theme.bg_normal = "#1A1A1A" +-- theme.bg_focus = "#313131" +-- theme.bg_urgent = "#1A1A1A" theme.border_width = dpi(1) -theme.border_normal = "#3F3F3F" -theme.border_focus = "#7F7F7F" -theme.border_marked = "#CC9393" -theme.tasklist_bg_focus = "#1A1A1A" -theme.titlebar_bg_focus = theme.bg_focus -theme.titlebar_bg_normal = theme.bg_normal -theme.titlebar_fg_focus = theme.fg_focus + +theme.border_normal = "#141414" +theme.border_focus = "#93B6FF" +theme.taglist_fg_focus = "#78A4FF" +theme.taglist_bg_focus = "#111111" +theme.taglist_bg_normal = "#111111" +theme.titlebar_bg_normal = "#191919" +theme.titlebar_bg_focus = "#262626" +-- theme.border_normal = "#3F3F3F" +-- theme.border_focus = "#7F7F7F" +-- theme.border_marked = "#CC9393" +-- theme.tasklist_bg_focus = "#1A1A1A" +-- theme.titlebar_bg_focus = theme.bg_focus +-- theme.titlebar_bg_normal = theme.bg_normal +-- theme.titlebar_fg_focus = theme.fg_focus theme.menu_height = dpi(16) theme.menu_width = dpi(140) theme.menu_submenu_icon = theme.dir .. "/icons/submenu.png" @@ -113,7 +133,7 @@ theme.cal = lain.widget.cal({ }) -- Mail IMAP check -local mailicon = wibox.widget.imagebox(theme.widget_mail) +--local mailicon = wibox.widget.imagebox(theme.widget_mail) --[[ commented because it needs to be set before use mailicon:buttons(my_table.join(awful.button({ }, 1, function () awful.spawn(mail) end))) theme.mail = lain.widget.imap({ @@ -134,46 +154,46 @@ theme.mail = lain.widget.imap({ --]] -- MPD -local musicplr = awful.util.terminal .. " -title Music -e ncmpcpp" -local mpdicon = wibox.widget.imagebox(theme.widget_music) -mpdicon:buttons(my_table.join( - awful.button({ "Mod4" }, 1, function () awful.spawn(musicplr) end), - awful.button({ }, 1, function () - os.execute("mpc prev") - theme.mpd.update() - end), - awful.button({ }, 2, function () - os.execute("mpc toggle") - theme.mpd.update() - end), - awful.button({ }, 3, function () - os.execute("mpc next") - theme.mpd.update() - end))) -theme.mpd = lain.widget.mpd({ - settings = function() - if mpd_now.state == "play" then - artist = " " .. mpd_now.artist .. " " - title = mpd_now.title .. " " - mpdicon:set_image(theme.widget_music_on) - elseif mpd_now.state == "pause" then - artist = " mpd " - title = "paused " - else - artist = "" - title = "" - mpdicon:set_image(theme.widget_music) - end +-- local musicplr = awful.util.terminal .. " -title Music -e ncmpcpp" +-- local mpdicon = wibox.widget.imagebox(theme.widget_music) +-- mpdicon:buttons(my_table.join( +-- awful.button({ "Mod4" }, 1, function () awful.spawn(musicplr) end), +-- awful.button({ }, 1, function () +-- os.execute("mpc prev") +-- theme.mpd.update() +-- end), +-- awful.button({ }, 2, function () +-- os.execute("mpc toggle") +-- theme.mpd.update() +-- end), +-- awful.button({ }, 3, function () +-- os.execute("mpc next") +-- theme.mpd.update() +-- end))) +-- theme.mpd = lain.widget.mpd({ +-- settings = function() +-- if mpd_now.state == "play" then +-- artist = " " .. mpd_now.artist .. " " +-- title = mpd_now.title .. " " +-- mpdicon:set_image(theme.widget_music_on) +-- elseif mpd_now.state == "pause" then +-- artist = " mpd " +-- title = "paused " +-- else +-- artist = "" +-- title = "" +-- mpdicon:set_image(theme.widget_music) +-- end - widget:set_markup(markup.font(theme.font, markup("#EA6F81", artist) .. title)) - end -}) +-- widget:set_markup(markup.font(theme.font, markup("#EA6F81", artist) .. title)) +-- end +-- }) -- MEM local memicon = wibox.widget.imagebox(theme.widget_mem) local mem = lain.widget.mem({ settings = function() - widget:set_markup(markup.font(theme.font, " " .. mem_now.used .. "MB ")) + widget:set_markup(markup.font(theme.font, " " .. mem_now.used .. " MB ")) end }) @@ -186,15 +206,15 @@ local cpu = lain.widget.cpu({ }) -- Coretemp -local tempicon = wibox.widget.imagebox(theme.widget_temp) -local temp = lain.widget.temp({ - settings = function() - widget:set_markup(markup.font(theme.font, " " .. coretemp_now .. "°C ")) - end -}) +-- local tempicon = wibox.widget.imagebox(theme.widget_temp) +-- local temp = lain.widget.temp({ +-- settings = function() +-- widget:set_markup(markup.font(theme.font, " " .. coretemp_now .. "°C ")) +-- end +-- }) -- / fs -local fsicon = wibox.widget.imagebox(theme.widget_hdd) +--local fsicon = wibox.widget.imagebox(theme.widget_hdd) --[[ commented because it needs Gio/Glib >= 2.54 theme.fs = lain.widget.fs({ notification_preset = { fg = theme.fg_normal, bg = theme.bg_normal, font = "Terminus 10" }, @@ -267,19 +287,19 @@ local net = lain.widget.net({ -- Separators local spr = wibox.widget.textbox(' ') -local arrl_dl = separators.arrow_left(theme.bg_focus, "alpha") -local arrl_ld = separators.arrow_left("alpha", theme.bg_focus) +local arrl_dl = separators.arrow_left(theme.arrows, "alpha") +local arrl_ld = separators.arrow_left("alpha", theme.arrows) function theme.at_screen_connect(s) -- Quake application s.quake = lain.util.quake({ app = awful.util.terminal }) -- If wallpaper is a function, call it with the screen - local wallpaper = theme.wallpaper - if type(wallpaper) == "function" then - wallpaper = wallpaper(s) - end - gears.wallpaper.maximized(wallpaper, s, true) + -- local wallpaper = theme.wallpaper + -- if type(wallpaper) == "function" then + -- wallpaper = wallpaper(s) + -- end + -- gears.wallpaper.maximized(wallpaper, s, true) -- Tags awful.tag(awful.util.tagnames, s, awful.layout.layouts[1]) @@ -317,40 +337,51 @@ function theme.at_screen_connect(s) s.mytasklist, -- Middle widget { -- Right widgets layout = wibox.layout.fixed.horizontal, + + arrl_ld, + arrl_dl, wibox.widget.systray(), - keyboardlayout, + -- keyboardlayout, spr, arrl_ld, - wibox.container.background(mpdicon, theme.bg_focus), - wibox.container.background(theme.mpd.widget, theme.bg_focus), + --wibox.container.background(mpdicon, theme.bg_focus), + --wibox.container.background(theme.mpd.widget, theme.bg_focus), arrl_dl, volicon, theme.volume.widget, arrl_ld, - wibox.container.background(mailicon, theme.bg_focus), + --wibox.container.background(mailicon, theme.bg_focus), --wibox.container.background(theme.mail.widget, theme.bg_focus), arrl_dl, memicon, mem.widget, arrl_ld, - wibox.container.background(cpuicon, theme.bg_focus), - wibox.container.background(cpu.widget, theme.bg_focus), arrl_dl, - tempicon, - temp.widget, - arrl_ld, - wibox.container.background(fsicon, theme.bg_focus), + cpuicon, + cpu.widget, + --wibox.container.background(cpuicon, theme.bg_focus), + --wibox.container.background(cpu.widget, theme.bg_focus), + + --tempicon, + --temp.widget, + --arrl_ld, + --wibox.container.background(fsicon, theme.bg_focus), --wibox.container.background(theme.fs.widget, theme.bg_focus), + --arrl_dl, + arrl_ld, arrl_dl, baticon, bat.widget, arrl_ld, + arrl_dl, wibox.container.background(neticon, theme.bg_focus), wibox.container.background(net.widget, theme.bg_focus), + arrl_ld, arrl_dl, clock, spr, arrl_ld, + arrl_dl, wibox.container.background(s.mylayoutbox, theme.bg_focus), }, }