diff --git a/config/awesome/autostart.sh b/config/awesome/autostart.sh
new file mode 100755
index 0000000..d46f390
--- /dev/null
+++ b/config/awesome/autostart.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+# ---
+# Use "run program" to run it only if it is not already running
+# Use "program &" to run it regardless
+# ---
+# NOTE: This script runs with every restart of AwesomeWM
+# TODO: run_once
+
+function run {
+ if ! pgrep $1 ;
+ then
+ $@&
+ fi
+}
+
+# Load terminal colorscheme and settings
+#xrdb ~/.Xresources
+
+# Urxvt daemon
+#run urxvtd -q -o -f
+
+# Mpv input file
+mkfifo /tmp/mpv.fifo
+
+# Volume notification daemon
+#run volume-daemon
+
+# For desktop effects
+run compton --config ~/.config/compton/compton.conf
+
+# Enable numlock on login
+run numlockx
+
+# For battery notifications
+run xfce4-power-manager
+
+# Network manager tray icon
+run nm-applet
+
+# Keyboard
+setxkbmap -layout "us,gr" -option "grp:alt_shift_toggle"
+#setxkbmap -layout "us,gr,ru" -option "grp:alt_shift_toggle"
+
+# Kill redshift processes
+#pkill redshift
+
+# Music
+run mpd ~/.config/mpd/mpd.conf
+
+# Scratchpad
+#scratchpad
diff --git a/config/awesome/bars.lua b/config/awesome/bars.lua
new file mode 100644
index 0000000..55a8a72
--- /dev/null
+++ b/config/awesome/bars.lua
@@ -0,0 +1,240 @@
+local awful = require("awful")
+local gears = require("gears")
+local wibox = require("wibox")
+local beautiful = require("beautiful")
+--local xresources = require("beautiful.xresources")
+--local xrdb = xresources.get_current_theme()
+
+local helpers = require("helpers")
+local keys = require("keys")
+
+-- {{{ Widgets
+local desktop_mode_widget = require("noodle.desktop_mode_widget")
+local minimal_tasklist = require("noodle.minimal_tasklist")
+
+-- Volume widget prefix
+volumebar_prefix = wibox.widget.textbox(" ")
+volumebar_prefix.markup = helpers.colorize_text(volumebar_prefix.text, beautiful.prefix_fg)
+
+-- Keyboard map indicator and switcher
+keyboardlayout_prefix = wibox.widget.textbox(" ")
+keyboardlayout_prefix.markup = helpers.colorize_text(keyboardlayout_prefix.text, beautiful.prefix_fg)
+mykeyboardlayout = awful.widget.keyboardlayout()
+
+-- Create a textclock widget that shows date
+date_prefix = wibox.widget.textbox(" ")
+date_prefix.markup = helpers.colorize_text(date_prefix.text, beautiful.prefix_fg)
+--mytextdate = wibox.widget.textclock("%a %d %B")
+mytextdate = wibox.widget.textclock("%j days around the sun") --HAHA very useful
+-- Create a textclock widget
+clock_prefix = wibox.widget.textbox(" ")
+clock_prefix.markup = helpers.colorize_text(clock_prefix.text, beautiful.prefix_fg)
+mytextclock = wibox.widget.textclock("%H:%M")
+
+-- Create item separator
+textseparator = wibox.widget.textbox()
+textseparator.text = beautiful.separator_text
+textseparator.markup = helpers.colorize_text(textseparator.text, beautiful.separator_fg)
+
+-- Create padding
+pad = wibox.widget.textbox(" ")
+
+-- Create a wibox for each screen and add it
+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.viewprev(t.screen) end),
+ awful.button({ }, 5, function(t) awful.tag.viewnext(t.screen) end)
+ )
+
+local tasklist_buttons = gears.table.join(
+ awful.button({ }, 1,
+ function (c)
+ if c == client.focus then
+ c.minimized = true
+ else
+ -- Without this, the following
+ -- :isvisible() makes no sense
+ c.minimized = false
+ if not c:isvisible() and c.first_tag then
+ c.first_tag:view_only()
+ end
+ -- This will also un-minimize
+ -- the client, if needed
+ client.focus = c
+ c:raise()
+ end
+ end),
+ -- Middle mouse button closes the window
+ awful.button({ }, 2, function (c) c:kill() end),
+ awful.button({ }, 3, helpers.client_menu_toggle()),
+ awful.button({ }, 4, function ()
+ awful.client.focus.byidx(-1)
+ end),
+ awful.button({ }, 5, function ()
+ awful.client.focus.byidx(1)
+ end)
+)
+-- }}}
+
+awful.screen.connect_for_each_screen(function(s)
+ -- Create a promptbox for each screen
+ s.mypromptbox = awful.widget.prompt({prompt = " Run: ", fg = beautiful.prompt_fg})
+ -- Create an imagebox widget which will contain an icon indicating which layout we're using.
+ -- We need one layoutbox per screen.
+ 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 a taglist widget
+ s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, taglist_buttons)
+ s.mytaglist.font = beautiful.font
+
+ -- Create a tasklist widget
+ -- Show all clients
+ --s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, tasklist_buttons)
+ -- Show only focused client
+ --s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.focused, tasklist_buttons)
+ -- Show only minimized clients
+ --s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.minimizedcurrenttags, tasklist_buttons)
+
+ -- Outer gaps
+ --awful.screen.padding(awful.screen.focused(),{left = 28, right = 28, top = 28, bottom = 28})
+
+ -- Create a system tray widget
+ s.systray = wibox.widget.systray()
+ s.systray.visible = false -- can be toggled by a keybind
+
+ -- Wibar detached - Method: Transparent useless bar
+ -- Requires compositor
+ if beautiful.wibar_detached then
+ s.useless_wibar = awful.wibar({ position = beautiful.wibar_position, screen = s, height = beautiful.screen_margin * 2, opacity = 0 })
+ --TODO
+ --s.useless_wibar:buttons(keys.desktopbuttons)
+ end
+ -- Create the wibox
+ s.mywibox = awful.wibar({ position = beautiful.wibar_position, screen = s, width = beautiful.wibar_width, height = beautiful.wibar_height, shape = helpers.rrect(beautiful.wibar_border_radius)})
+ -- Wibar items
+ -- Add or remove widgets here
+ s.mywibox:setup {
+ layout = wibox.layout.align.horizontal,
+ { -- Left widgets
+ layout = wibox.layout.fixed.horizontal,
+ --s.mylayoutbox,
+ --mylauncher,
+ s.mytaglist,
+ textseparator,
+ minimal_tasklist
+ },
+ { -- Middle widgets
+ layout = wibox.layout.fixed.horizontal,
+ --s.mypromptbox,
+ --textseparator,
+ --s.mytasklist,
+ --minimal_tasklist
+ },
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ --mpdarc_widget,
+ --textseparator,
+ --volumebar_prefix,
+ --volumebar_widget,
+ --textseparator,
+ --keyboardlayout_prefix,
+ --mykeyboardlayout,
+ --textseparator,
+ s.systray,
+ --minimal_tasklist,
+ textseparator,
+ --date_prefix,
+ mytextdate,
+ textseparator,
+ --clock_prefix,
+ mytextclock,
+ textseparator,
+ desktop_mode_widget,
+ pad,
+ pad
+ },
+ }
+
+ -- Second (alternate panel)
+ if beautiful.wibar_alt_enabled then
+ if beautiful.wibar_alt_detached then
+ s.useless_wibar_alt = awful.wibar({ position = beautiful.wibar_alt_position, screen = s, height = beautiful.screen_margin * 2, opacity = 0 })
+ s.useless_wibar_alt:buttons(gears.table.join(
+ --TODO
+ --keys.desktopbuttons
+ ))
+ end
+ s.mywibox_alt = awful.wibox({ position = beautiful.wibar_alt_position, screen = s, width = beautiful.wibar_alt_width, height = beautiful.wibar_alt_height, shape = helpers.rrect(beautiful.wibar_alt_border_radius)})
+ -- Only set them if they exist, else they overwrite the position variable
+ if beautiful.wibar_alt_x then
+ s.mywibox_alt.x = beautiful.wibar_alt_x
+ end
+ if beautiful.wibar_alt_y then
+ s.mywibox_alt.y = beautiful.wibar_alt_y
+ end
+ -- Second wibar items
+ -- Add or remove widgets here
+ s.mywibox_alt:setup {
+ layout = wibox.layout.align.horizontal,
+ { -- Left widgets
+ layout = wibox.layout.fixed.horizontal,
+ --pad,
+ --s.mylayoutbox,
+ --mylauncher,
+ },
+ { -- Middle widgets
+ layout = wibox.layout.fixed.horizontal,
+ --s.mypromptbox,
+ --s.mytasklist,
+ --textseparator,
+ },
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ --mpdarc_widget,
+ --textseparator,
+ --volumebar_prefix,
+ --volumebar_widget,
+ --textseparator,
+ --keyboardlayout_prefix,
+ --mykeyboardlayout,
+ --textseparator,
+ s.systray,
+ minimal_tasklist,
+ textseparator,
+ date_prefix,
+ mytextdate,
+ textseparator,
+ clock_prefix,
+ mytextclock,
+ textseparator,
+ desktop_mode_widget,
+ pad
+ },
+ }
+ end
+
+ -- Only set them if they exist, else they overwrite the position variable
+ if beautiful.wibar_x then
+ s.mywibox.x = beautiful.wibar_x
+ end
+ if beautiful.wibar_y then
+ s.mywibox.y = beautiful.wibar_y
+ end
+
+end)
+
diff --git a/config/awesome/helpers.lua b/config/awesome/helpers.lua
new file mode 100644
index 0000000..106d9de
--- /dev/null
+++ b/config/awesome/helpers.lua
@@ -0,0 +1,91 @@
+local awful = require("awful")
+local gears = require("gears")
+local beautiful = require("beautiful")
+local wibox = require("wibox")
+
+local helpers = {}
+
+-- Create rounded rectangle shape
+helpers.rrect = function(radius)
+ return function(cr, width, height)
+ --gears.shape.partially_rounded_rect(cr, width, height, true, true, false, false, 12)
+ gears.shape.rounded_rect(cr, width, height, radius)
+ --gears.shape.octogon(cr, width, height, radius)
+ --gears.shape.rounded_bar(cr, width, height)
+ end
+end
+
+-- Create info bubble shape
+-- TODO
+helpers.infobubble = function(radius)
+ return function(cr, width, height)
+ gears.shape.infobubble(cr, width, height, radius)
+ end
+end
+
+-- Create rectangle shape
+helpers.rect = function()
+ return function(cr, width, height)
+ gears.shape.rectangle(cr, width, height)
+ end
+end
+
+function helpers.colorize_text(txt, fg)
+ return "" .. txt .. ""
+end
+
+function helpers.client_menu_toggle()
+ local instance = nil
+
+ return function ()
+ if instance and instance.wibox.visible then
+ instance:hide()
+ instance = nil
+ else
+ instance = awful.menu.clients({ theme = { width = 250 } })
+ end
+ end
+end
+
+function helpers.pad(size)
+ local str = ""
+ for i = 1, size do
+ str = str .. " "
+ end
+ local pad = wibox.widget.textbox(str)
+ return pad
+end
+
+function helpers.move_to_edge(c, direction)
+ local workarea = awful.screen.focused().workarea
+ local client_geometry = c:geometry()
+ if direction == "up" then
+ c:geometry({ nil, y = workarea.y + beautiful.screen_margin * 2, nil, nil })
+ elseif direction == "down" then
+ c:geometry({ nil, y = workarea.height + workarea.y - client_geometry.height - beautiful.screen_margin * 2 - beautiful.border_width * 2, nil, nil })
+ elseif direction == "left" then
+ c:geometry({ x = workarea.x + beautiful.screen_margin * 2, nil, nil, nil })
+ elseif direction == "right" then
+ c:geometry({ x = workarea.width + workarea.x - client_geometry.width - beautiful.screen_margin * 2 - beautiful.border_width * 2, nil, nil, nil })
+ end
+end
+
+function helpers.create_titlebar(c, titlebar_buttons, titlebar_position, titlebar_size)
+ awful.titlebar(c, {font = beautiful.titlebar_font, position = titlebar_position, size = titlebar_size}) : setup {
+ {
+ buttons = titlebar_buttons,
+ layout = wibox.layout.fixed.horizontal
+ },
+ {
+ buttons = titlebar_buttons,
+ layout = wibox.layout.fixed.horizontal
+ },
+ {
+ buttons = titlebar_buttons,
+ layout = wibox.layout.fixed.horizontal
+ },
+ layout = wibox.layout.align.horizontal
+ }
+end
+
+return helpers
diff --git a/config/awesome/keys.lua b/config/awesome/keys.lua
new file mode 100644
index 0000000..defb914
--- /dev/null
+++ b/config/awesome/keys.lua
@@ -0,0 +1,727 @@
+local awful = require("awful")
+local naughty = require("naughty")
+local gears = require("gears")
+local beautiful = require("beautiful")
+local wibox = require("wibox")
+
+local helpers = require("helpers")
+
+local keys = {}
+
+-- Mod keys
+modkey = "Mod4"
+altkey = "Mod1"
+ctrlkey = "Control"
+shiftkey = "Shift"
+
+-- {{{ Mouse bindings
+keys.desktopbuttons = gears.table.join(
+ awful.button({ }, 1, function ()
+ mymainmenu:hide()
+ uc = awful.client.urgent.get()
+ -- If there is no urgent client, go back to last tag
+ if uc == nil then
+ awful.tag.history.restore()
+ else
+ awful.client.urgent.jumpto()
+ end
+ end),
+ awful.button({ }, 3, function () mymainmenu:toggle() end),
+
+ -- Side buttons - Minimize and restore minimized client
+ awful.button({ }, 8, function()
+ if client.focus ~= nil then
+ client.focus.minimized = true
+ end
+ end),
+ awful.button({ }, 9, function()
+ local c = awful.client.restore()
+ -- Focus restored client
+ if c then
+ client.focus = c
+ c:raise()
+ end
+ end),
+
+ -- Middle click and scrolling - Control volume
+ awful.button({ }, 2, function () awful.spawn.with_shell("volume-control.sh toggle") end),
+ awful.button({ }, 4, function () awful.spawn.with_shell("volume-control.sh up") end),
+ awful.button({ }, 5, function () awful.spawn.with_shell("volume-control.sh down") end)
+
+ -- Switch tags with sidebuttons
+ --awful.button({ }, 8, awful.tag.viewprev),
+ --awful.button({ }, 9, awful.tag.viewnext)
+)
+-- }}}
+
+-- {{{ Key bindings
+keys.globalkeys = gears.table.join(
+ --awful.key({ modkey, }, "s", hotkeys_popup.show_help,
+ --{description="show help", group="awesome"}),
+ --awful.key({ modkey, }, "comma", awful.tag.viewprev,
+ --{description = "view previous", group = "tag"}),
+ --awful.key({ modkey, }, "period", awful.tag.viewnext,
+ --{description = "view next", group = "tag"}),
+
+ -- Focus client by direction
+ awful.key({ modkey }, "Down",
+ function()
+ awful.client.focus.bydirection("down")
+ if client.focus then client.focus:raise() end
+ end,
+ {description = "focus down", group = "client"}),
+ awful.key({ modkey }, "Up",
+ function()
+ awful.client.focus.bydirection("up")
+ if client.focus then client.focus:raise() end
+ end,
+ {description = "focus up", group = "client"}),
+ awful.key({ modkey }, "Left",
+ function()
+ awful.client.focus.bydirection("left")
+ if client.focus then client.focus:raise() end
+ end,
+ {description = "focus left", group = "client"}),
+ awful.key({ modkey }, "Right",
+ function()
+ awful.client.focus.bydirection("right")
+ if client.focus then client.focus:raise() end
+ end,
+ {description = "focus right", group = "client"}),
+ awful.key({ modkey, altkey }, "j",
+ function()
+ awful.client.focus.bydirection("down")
+ if client.focus then client.focus:raise() end
+ end,
+ {description = "focus down", group = "client"}),
+ awful.key({ modkey, altkey }, "k",
+ function()
+ awful.client.focus.bydirection("up")
+ if client.focus then client.focus:raise() end
+ end,
+ {description = "focus up", group = "client"}),
+ awful.key({ modkey, altkey }, "h",
+ function()
+ awful.client.focus.bydirection("left")
+ if client.focus then client.focus:raise() end
+ end,
+ {description = "focus left", group = "client"}),
+ awful.key({ modkey, altkey }, "l",
+ function()
+ awful.client.focus.bydirection("right")
+ if client.focus then client.focus:raise() end
+ end,
+ {description = "focus right", group = "client"}),
+ -- Focus client by index (cycle through clients)
+ 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, }, "g",
+ function ()
+ awful.tag.incgap(5, nil)
+ end,
+ {description = "increment gaps size for the current tag", group = "gaps"}
+ ),
+ awful.key({ modkey, shiftkey }, "g",
+ function ()
+ awful.tag.incgap(-5, nil)
+ end,
+ {description = "decrement gap size for the current tag", group = "gaps"}
+ ),
+ -- Kill all visible clients
+ awful.key({ modkey, altkey }, "q",
+ function ()
+ local clients = awful.screen.focused().clients
+ for _, c in pairs(clients) do
+ c:kill()
+ end
+ end,
+ {description = "kill all visible clients for the current tag", group = "gaps"}
+ ),
+ -- Main menu
+ --awful.key({ modkey, }, "w", function () mymainmenu:show() end,
+ --{description = "show main menu", group = "awesome"}),
+ awful.key({ modkey, }, "Escape", awful.tag.history.restore,
+ {description = "go back", group = "tag"}),
+
+ -- Layout manipulation
+ awful.key({ modkey, shiftkey }, "j", function ()
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ local c = client.focus
+ -- Floating: move client to edge
+ if c ~= nil and (current_layout == "floating" or c.floating) then
+ --c:relative_move( 0, 40, 0, 0)
+ helpers.move_to_edge(c, "down")
+ else
+ --awful.client.swap.byidx( 1)
+ awful.client.swap.bydirection("down", c, nil)
+
+ end
+ end,
+ --{description = "swap with next client by index", group = "client"}),
+ {description = "swap with direction down", group = "client"}),
+ awful.key({ modkey, shiftkey }, "k", function ()
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ local c = client.focus
+ -- Floating: move client to edge
+ if c ~= nil and (current_layout == "floating" or c.floating) then
+ --c:relative_move( 0, -40, 0, 0)
+ helpers.move_to_edge(c, "up")
+ else
+ --awful.client.swap.byidx( -1)
+ awful.client.swap.bydirection("up", c, nil)
+ end
+ end,
+ {description = "swap with direction up", group = "client"}),
+ -- No need for these (single screen setup)
+ --awful.key({ modkey, ctrlkey }, "j", function () awful.screen.focus_relative( 1) end,
+ --{description = "focus the next screen", group = "screen"}),
+ --awful.key({ modkey, ctrlkey }, "k", function () awful.screen.focus_relative(-1) end,
+ --{description = "focus the previous screen", group = "screen"}),
+ awful.key({ modkey, }, "u",
+ function ()
+ uc = awful.client.urgent.get()
+ -- If there is no urgent client, go back to last tag
+ if uc == nil then
+ awful.tag.history.restore()
+ else
+ awful.client.urgent.jumpto()
+ end
+ end,
+ {description = "jump to urgent client", group = "client"}),
+ awful.key({ modkey }, "Tab", function() awful.spawn.with_shell("~/scr/Rofi/rofi_combi") end,
+ {description = "window switcher", group = "launcher"}),
+ --awful.key({ modkey, }, "Tab",
+ --function ()
+ --awful.client.focus.history.previous()
+ --if client.focus then
+ --client.focus:raise()
+ --end
+ --end,
+ --{description = "go back", group = "client"}),
+
+ -- Standard program
+ awful.key({ modkey, }, "Return", function () awful.spawn(terminal) end,
+ {description = "open a terminal", group = "launcher"}),
+ awful.key({ modkey, }, "t", function () awful.spawn(tmux) end,
+ {description = "open a terminal with tmux", group = "launcher"}),
+ -- Spawn floating terminal (see awful.rules below)
+ awful.key({ modkey, shiftkey }, "Return", function()
+ awful.spawn(floating_terminal)
+ end,
+ {description = "spawn floating terminal", group = "launcher"}),
+ awful.key({ modkey, shiftkey }, "t", function() awful.spawn(floating_tmux) end,
+ {description = "spawn floating terminal with tmux", group = "launcher"}),
+ awful.key({ modkey, shiftkey }, "r", awesome.restart,
+ {description = "reload awesome", group = "awesome"}),
+ awful.key({ modkey, shiftkey }, "x", awesome.quit,
+ {description = "quit awesome", group = "awesome"}),
+ awful.key({ modkey, ctrlkey }, "h", function ()
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ local c = client.focus
+ -- Floating: resize client
+ if current_layout == "floating" or c.floating == true then
+ c:relative_move( 0, 0, -20, 0)
+ else
+ awful.tag.incmwfact(-0.05)
+ end
+ end,
+ {description = "decrease master width factor", group = "layout"}),
+ awful.key({ modkey, ctrlkey }, "l", function ()
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ local c = client.focus
+ -- Floating: resize client
+ if current_layout == "floating" or c.floating == true then
+ c:relative_move( 0, 0, 20, 0)
+ else
+ awful.tag.incmwfact( 0.05)
+ end
+ end,
+ {description = "increase master width factor", group = "layout"}),
+ awful.key({ modkey, shiftkey }, "h",
+ function ()
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ local c = client.focus
+ -- Floating: move client to edge
+ if c ~= nil and (current_layout == "floating" or c.floating) then
+ --c:relative_move( -40, 0, 0, 0)
+ helpers.move_to_edge(c, "left")
+ else
+ awful.client.swap.bydirection("left", c, nil)
+ end
+ end,
+ {description = "swap with direction left", group = "client"}),
+ awful.key({ modkey, shiftkey }, "l",
+ function ()
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ local c = client.focus
+ -- Floating: move client to edge
+ if c ~= nil and (current_layout == "floating" or c.floating) then
+ --c:relative_move( 40, 0, 0, 0)
+ helpers.move_to_edge(c, "right")
+ else
+ awful.client.swap.bydirection("right", c, nil)
+ end
+ end,
+ {description = "swap with direction right", group = "client"}),
+ awful.key({ modkey }, "h",
+ function ()
+ awful.tag.incnmaster( 1, nil, true)
+ end,
+ {description = "increase the number of master clients", group = "layout"}),
+ awful.key({ modkey }, "l",
+ function ()
+ awful.tag.incnmaster(-1, nil, true)
+ end,
+ {description = "decrease the number of master clients", group = "layout"}),
+ awful.key({ modkey, shiftkey, ctrlkey }, "h", function ()
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ local c = client.focus
+ -- Floating: move client
+ if c ~= nil and (current_layout == "floating" or c.floating) then
+ c:relative_move( -20, 0, 0, 0)
+ else
+ awful.tag.incncol( 1, nil, true)
+ end
+ end,
+ {description = "increase the number of columns", group = "layout"}),
+ awful.key({ modkey, shiftkey, ctrlkey }, "l", function ()
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ local c = client.focus
+ -- Floating: move client
+ if c ~= nil and (current_layout == "floating" or c.floating) then
+ c:relative_move( 20, 0, 0, 0)
+ else
+ awful.tag.incncol(-1, nil, true)
+ end
+ end),
+ --awful.key({ modkey, }, "space", function () awful.layout.inc( 1) end,
+ --{description = "select next", group = "layout"}),
+ --awful.key({ modkey, shiftkey }, "space", function () awful.layout.inc(-1) end,
+ --{description = "select previous", group = "layout"}),
+
+ awful.key({ modkey, shiftkey }, "n",
+ function ()
+ local c = awful.client.restore()
+ -- Focus restored client
+ if c then
+ client.focus = c
+ c:raise()
+ end
+ end,
+ {description = "restore minimized", group = "client"}),
+
+ -- Prompt
+ -- Run program (d for dmenu ;)
+ --awful.key({ modkey }, "d", function () awful.screen.focused().mypromptbox:run() end,
+ --{description = "run prompt", group = "launcher"}),
+ awful.key({ modkey }, "d", function() awful.spawn.with_shell("~/scr/Rofi/rofi_launch") end,
+ {description = "rofi launcher", group = "launcher"}),
+
+ -- Run lua code
+ --awful.key({ modkey }, "r",
+ --function ()
+ --awful.prompt.run {
+ --prompt = " Lua: ",
+ --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"}),
+
+ -- Dismiss notifications
+ awful.key( { ctrlkey }, "space", function()
+ naughty.destroy_all_notifications()
+ end,
+ {description = "dismiss notification", group = "notifications"}),
+
+ -- Menubar
+ --awful.key({ modkey, ctrlkey }, "b", function() menubar.show() end,
+ --{description = "show the menubar", group = "launcher"}),
+ -- Volume Control
+ awful.key( { }, "XF86AudioMute", function()
+ awful.spawn.with_shell("volume-control.sh toggle")
+ end,
+ {description = "(un)mute volume", group = "volume"}),
+ awful.key( { }, "XF86AudioLowerVolume", function()
+ awful.spawn.with_shell("volume-control.sh down")
+ end,
+ {description = "lower volume", group = "volume"}),
+ awful.key( { }, "XF86AudioRaiseVolume", function()
+ awful.spawn.with_shell("volume-control.sh up")
+ end,
+ {description = "raise volume", group = "volume"}),
+ -- Screenshots
+ awful.key( { }, "Print", function() awful.spawn.with_shell("screenshot.sh") end,
+ {description = "take full screenshot", group = "screenshots"}),
+ awful.key( { modkey, shiftkey }, "c", function() awful.spawn.with_shell("screenshot.sh -s") end,
+ {description = "select area to capture", group = "screenshots"}),
+ awful.key( { modkey, ctrlkey }, "c", function() awful.spawn.with_shell("screenshot.sh -c") end,
+ {description = "select area to copy to clipboard", group = "screenshots"}),
+ awful.key( { modkey }, "Print", function() awful.spawn.with_shell("screenshot.sh -b") end,
+ {description = "browse screenshots", group = "screenshots"}),
+ awful.key( { modkey, shiftkey }, "Print", function() awful.spawn.with_shell("screenshot.sh -e") end,
+ {description = "edit most recent screenshot with gimp", group = "screenshots"}),
+ -- Toggle tray visibility
+ awful.key({ modkey }, "=", function ()
+ awful.screen.focused().systray.visible = not awful.screen.focused().systray.visible
+ end,
+ {description = "toggle systray visibility", group = "custom"}),
+ -- Toggle night light
+ awful.key({ modkey }, "x", function() awful.spawn.with_shell("flux") end,
+ {description = "toggle night light", group = "launcher"}),
+ -- Toggle compositor
+ awful.key({ modkey }, "z", function() awful.spawn.with_shell("compositor") end,
+ {description = "toggle compositor", group = "launcher"}),
+ -- Media keys
+ awful.key({ modkey }, "period", function() awful.spawn.with_shell("mpc next") end,
+ {description = "next song", group = "media"}),
+ awful.key({ modkey }, "comma", function() awful.spawn.with_shell("mpc prev") end,
+ {description = "previous song", group = "media"}),
+ awful.key({ modkey }, "space", function() awful.spawn.with_shell("mpc toggle") end,
+ {description = "toggle pause/play", group = "media"}),
+ awful.key({ modkey, shiftkey }, "period", function() awful.spawn.with_shell("mpvc next") end,
+ {description = "mpv next song", group = "media"}),
+ awful.key({ modkey, shiftkey }, "comma", function() awful.spawn.with_shell("mpvc prev") end,
+ {description = "mpv previous song", group = "media"}),
+ awful.key({ modkey, shiftkey}, "space", function() awful.spawn.with_shell("mpvc toggle") end,
+ {description = "mpv toggle pause/play", group = "media"}),
+ awful.key({ modkey, shiftkey}, "F8", function() awful.spawn.with_shell("mpvc quit") end,
+ {description = "mpv quit", group = "media"}),
+ awful.key({ modkey }, "q", function()
+ if client.focus ~= nil and client.focus.class == "scratchpad" then
+ client.focus.minimized = true
+ return
+ end
+ local matcher = function (c)
+ return awful.rules.match(c, {class = 'scratchpad'})
+ end
+ awful.client.run_or_raise( "scratchpad" , matcher)
+ end,
+ {description = "scratchpad", group = "launcher"}),
+ -- Set max layout
+ awful.key({ modkey }, "w", function()
+ awful.layout.set(awful.layout.suit.max)
+ end,
+ {description = "set max layout", group = "tag"}),
+ -- Set tiled layout
+ awful.key({ modkey }, "s", function()
+ awful.layout.set(awful.layout.suit.tile)
+ end,
+ {description = "set tiled layout", group = "tag"}),
+ -- Set floating layout
+ awful.key({ modkey, shiftkey }, "s", function()
+ awful.layout.set(awful.layout.suit.floating)
+ end,
+ {description = "set floating layout", group = "tag"}),
+ -- Run or raise or minimize calcurse
+ awful.key({ modkey }, "F1", function()
+ if client.focus ~= nil and client.focus.class == "calendar" then
+ client.focus.minimized = true
+ return
+ end
+ local matcher = function (c)
+ return awful.rules.match(c, {class = 'calendar'})
+ end
+ awful.client.run_or_raise( terminal .. " --class calendar -e calcurse", matcher)
+ end,
+ {description = "calcurse", group = "launcher"}),
+ -- Spawn ranger in a terminal
+ awful.key({ modkey }, "F2", function() awful.spawn(terminal .. " -e ranger") end,
+ {description = "ranger", group = "launcher"}),
+ -- Spawn ncmpcpp in a terminal
+ awful.key({ modkey }, "F3", function() awful.spawn(terminal .. " -e ncmpcpp") end,
+ {description = "ncmpcpp", group = "launcher"}),
+ -- Spawn cava in a terminal
+ awful.key({ modkey }, "F4", function() awful.spawn(terminal .. " -e cava") end,
+ {description = "cava", group = "launcher"}),
+ -- Show system info (cpu, ram, battery, temp)
+ awful.key({ modkey }, "grave", function() awful.spawn.with_shell("~/scr/info/stats") end,
+ {description = "current system info", group = "launcher"}),
+ -- Quick edit config file
+ awful.key({ modkey }, "e", function() awful.spawn.with_shell("~/scr/Rofi/rofi_quickedit") end,
+ {description = "quick edit", group = "launcher"}),
+ -- mpvtube
+ awful.key({ modkey }, "y", function() awful.spawn.with_shell("~/scr/Rofi/rofi_mpvtube") end,
+ {description = "mpvtube", group = "launcher"}),
+ -- mpvtube song
+ awful.key({ modkey, shiftkey }, "y", function() awful.spawn.with_shell("~/scr/info/mpv-query.sh") end,
+ {description = "show mpv media title", group = "launcher"}),
+ -- Spawn htop in a terminal
+ awful.key({ modkey }, "p", function() awful.spawn(terminal .. " -e htop") end,
+ {description = "htop", group = "launcher"})
+)
+
+keys.clientkeys = gears.table.join(
+ -- Move floating client (relative)
+ awful.key({ modkey, shiftkey }, "Down", function (c) c:relative_move( 0, 40, 0, 0) end),
+ awful.key({ modkey, shiftkey }, "Up", function (c) c:relative_move( 0, -40, 0, 0) end),
+ awful.key({ modkey, shiftkey }, "Left", function (c) c:relative_move(-40, 0, 0, 0) end),
+ awful.key({ modkey, shiftkey }, "Right", function (c) c:relative_move( 40, 0, 0, 0) end),
+ -- Center client
+ awful.key({ modkey }, "c", function (c)
+ awful.placement.centered(c,{honor_workarea=true})
+ --awful.placement.centered(c,nil)
+ end),
+ -- Resize client
+ awful.key({ modkey, ctrlkey }, "j", function (c)
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ if current_layout == "floating" or c.floating == true then
+ c:relative_move( 0, 0, 0, 20)
+ else
+ awful.client.incwfact(0.15)
+ end
+ end),
+ awful.key({ modkey, ctrlkey }, "k", function (c)
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ if current_layout == "floating" or c.floating == true then
+ c:relative_move( 0, 0, 0, -20)
+ else
+ awful.client.incwfact(-0.15)
+ end
+ end),
+ awful.key({ modkey, shiftkey, ctrlkey }, "j", function (c)
+ -- Relative move
+ c:relative_move(0, 20, 0, 0)
+ end),
+ awful.key({ modkey, shiftkey, ctrlkey }, "k", function (c)
+ -- Relative move
+ c:relative_move(0, -20, 0, 0)
+ end),
+ -- Toggle titlebar (for focused client only)
+ awful.key({ modkey, }, "b",
+ function (c)
+ -- Don't toggle if titlebars are used as borders
+ if not beautiful.titlebars_imitate_borders then
+ awful.titlebar.toggle(c, beautiful.titlebar_position)
+ end
+ end,
+ {description = "toggle titlebar", group = "client"}),
+ -- Toggle titlebar (for all visible clients in selected tag)
+ awful.key({ modkey, shiftkey }, "b",
+ function (c)
+ --local s = awful.screen.focused()
+ local clients = awful.screen.focused().clients
+ for _, c in pairs(clients) do
+ -- Don't toggle if titlebars are used as borders
+ if not beautiful.titlebars_imitate_borders then
+ awful.titlebar.toggle(c, beautiful.titlebar_position)
+ end
+ end
+ end,
+ {description = "toggle titlebar", group = "client"}),
+ -- Toggle fullscreen
+ awful.key({ modkey, }, "f",
+ function (c)
+ c.fullscreen = not c.fullscreen
+ c:raise()
+ end,
+ {description = "toggle fullscreen", group = "client"}),
+ -- Resize and set floating
+ -- F for focused view
+ awful.key({ modkey, shiftkey }, "f",
+ function (c)
+ c.width = 950
+ c.height = 600
+ --c.width = 750
+ --c.height = 500
+ c.floating = true
+ awful.placement.centered(c,{honor_workarea=true})
+ c:raise()
+ end,
+ {description = "focus mode", group = "client"}),
+ -- Resize and set floating 2: Electric Boogaloo
+ -- F for focused view
+ awful.key({ modkey, ctrlkey }, "f",
+ function (c)
+ c.width = 600
+ c.height = 600
+ --c.width = 750
+ --c.height = 500
+ c.floating = true
+ awful.placement.centered(c,{honor_workarea=true})
+ c:raise()
+ end,
+ {description = "focus mode", group = "client"}),
+ -- T for tiny window
+ awful.key({ modkey, ctrlkey }, "t",
+ function (c)
+ c.width = 400
+ c.height = 260
+ c.floating = true
+ awful.placement.centered(c,{honor_workarea=true})
+ c:raise()
+ end,
+ {description = "tiny mode", group = "client"}),
+ -- N for normal window
+ awful.key({ modkey, ctrlkey }, "n",
+ function (c)
+ c.width = 640
+ c.height = 400
+ c.floating = true
+ awful.placement.centered(c,{honor_workarea=true})
+ c:raise()
+ end,
+ {description = "normal mode", group = "client"}),
+ awful.key({ modkey, shiftkey }, "q", function (c) c:kill() end,
+ {description = "close", group = "client"}),
+ --awful.key({ modkey, ctrlkey }, "space", awful.client.floating.toggle ,
+ -- Toggle floating
+ awful.key({ modkey, ctrlkey }, "space",
+ function(c)
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ if current_layout ~= "floating" then
+ awful.client.floating.toggle()
+ end
+ --c:raise()
+ end,
+ {description = "toggle floating", group = "client"}),
+ awful.key({ modkey, ctrlkey }, "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"}),
+ -- P for pin: keep on top OR sticky
+ -- On top
+ awful.key({ modkey, shiftkey }, "p", function (c) c.ontop = not c.ontop end,
+ {description = "toggle keep on top", group = "client"}),
+ -- Sticky
+ awful.key({ modkey, ctrlkey }, "p", function (c) c.sticky = not c.sticky end,
+ {description = "toggle sticky", group = "client"}),
+ -- Minimize
+ 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, ctrlkey }, "m",
+ function (c)
+ c.maximized_vertical = not c.maximized_vertical
+ c:raise()
+ end ,
+ {description = "(un)maximize vertically", group = "client"}),
+ awful.key({ modkey, shiftkey }, "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.
+local ntags = 10
+for i = 1, ntags do
+ keys.globalkeys = gears.table.join(keys.globalkeys,
+ -- View tag only.
+ awful.key({ modkey }, "#" .. i + 9,
+ function ()
+ local screen = awful.screen.focused()
+ local tag = screen.tags[i]
+ local current_tag = screen.selected_tag
+ -- Tag back and forth:
+ -- If you try to focus the same tag you are at,
+ -- go back to the previous tag.
+ -- Useful for quick switching after for example
+ -- checking an incoming chat message at tag 2
+ -- and coming back to your work at tag 1
+ if tag then
+ if tag == current_tag then
+ awful.tag.history.restore()
+ else
+ tag:view_only()
+ end
+ end
+ -- Simple tag view
+ --if tag then
+ --tag:view_only()
+ --end
+ end,
+ {description = "view tag #"..i, group = "tag"}),
+ -- Toggle tag display.
+ awful.key({ modkey, ctrlkey }, "#" .. 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, shiftkey }, "#" .. 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"}),
+ -- Move all visible clients to tag and focus that tag
+ awful.key({ modkey, altkey }, "#" .. i + 9,
+ function ()
+ local tag = client.focus.screen.tags[i]
+ local clients = awful.screen.focused().clients
+ if tag then
+ for _, c in pairs(clients) do
+ c:move_to_tag(tag)
+ end
+ tag:view_only()
+ end
+ end,
+ {description = "move all visible clients to tag #"..i, group = "tag"}),
+ -- Toggle tag on focused client.
+ awful.key({ modkey, ctrlkey, shiftkey }, "#" .. 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
+
+-- Mouse buttons on the client (whole window, not just titlebar)
+keys.clientbuttons = gears.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, function(c)
+ awful.mouse.resize(c, nil, {jump_to_corner=true})
+ end)
+)
+-- }}}
+
+-- Set keys
+root.keys(keys.globalkeys)
+root.buttons(keys.desktopbuttons)
+
+
+
+
+
+
+
+return keys
diff --git a/config/awesome/noodle/desktop_mode_widget.lua b/config/awesome/noodle/desktop_mode_widget.lua
new file mode 100644
index 0000000..5a1e437
--- /dev/null
+++ b/config/awesome/noodle/desktop_mode_widget.lua
@@ -0,0 +1,120 @@
+local awful = require("awful")
+local gears = require("gears")
+local beautiful = require("beautiful")
+local wibox = require("wibox")
+
+-- Get theme variables
+local floating_color = beautiful.desktop_mode_color_floating or "#1D8CD2"
+local tile_color = beautiful.desktop_mode_color_tile or "#2DD283"
+local max_color = beautiful.desktop_mode_color_max or "#D21D43"
+local floating_text = beautiful.desktop_mode_text_floating or "(fl)"
+local tile_text = beautiful.desktop_mode_text_tile or "(ti)"
+local max_text = beautiful.desktop_mode_text_max or "(ma)"
+
+--local desktop_mode_widget = wibox.widget.textbox("")
+--desktop_mode_widget.font = beautiful.font
+--desktop_mode_widget.align = "center"
+local desktop_mode_widget = wibox.widget{
+ font = beautiful.font,
+ markup = ' ',
+ align = 'center',
+ valign = 'center',
+ widget = wibox.widget.textbox
+}
+
+-- Mouse control
+desktop_mode_widget:buttons(gears.table.join(
+ -- Old Left click: toggle between tile and floating + toggle titlebars
+ -- Left click: toggle titlebar for focused client
+ awful.button({ }, 1, function ()
+ --switch_modes()
+ if client.focus ~= nil then
+ awful.titlebar.toggle(client.focus, beautiful.titlebar_position)
+ end
+ end),
+ -- Right click: Toggle titlebars in all visible clients
+ awful.button({ }, 3, function ()
+ local clients = awful.screen.focused().clients
+ for _, c in pairs(clients) do
+ -- Don't toggle if titlebars are used as borders
+ if not beautiful.titlebars_imitate_borders then
+ awful.titlebar.toggle(c, beautiful.titlebar_position)
+ end
+ end
+ end),
+ -- TODO
+ awful.button({ }, 4, function ()
+ awful.layout.inc(-1)
+ --local clients = awful.screen.focused().clients
+ --for _, c in pairs(clients) do
+ --awful.titlebar.show(c, beautiful.titlebar_position)
+ --end
+ end),
+ awful.button({ }, 5, function ()
+ awful.layout.inc(1)
+ --local clients = awful.screen.focused().clients
+ --for _, c in pairs(clients) do
+ ---- Don't hide if titlebars are used as borders
+ --if not beautiful.titlebars_imitate_borders then
+ --awful.titlebar.hide(c, beautiful.titlebar_position)
+ --end
+ --end
+ end)
+))
+
+function switch_modes()
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ if current_layout == "floating" then
+ local clients = awful.screen.focused().clients
+ for _, c in pairs(clients) do
+ -- Don't hide if titlebars are used as borders
+ if not beautiful.titlebars_imitate_borders then
+ awful.titlebar.hide(c, beautiful.titlebar_position)
+ end
+ end
+ awful.layout.set(awful.layout.suit.tile)
+ else
+ --elseif current_layout == "tile" then
+ local clients = awful.screen.focused().clients
+ for _, c in pairs(clients) do
+ awful.titlebar.show(c, beautiful.titlebar_position)
+ end
+ -- Delay so that the windows will first be resized properly
+ -- by the tiling layout
+ gears.timer.delayed_call(function()
+ awful.layout.set(awful.layout.suit.floating)
+ end)
+ end
+end
+
+local function update_widget()
+ local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused()))
+ local color
+ local txt
+ if current_layout == "max" then
+ color = max_color
+ txt = max_text
+ elseif current_layout == "tile" then
+ color = tile_color
+ txt = tile_text
+ elseif current_layout == "floating" then
+ color = floating_color
+ txt = floating_text
+ else
+ --default
+ color = tile_color
+ txt = tile_text
+ end
+
+ desktop_mode_widget.markup = "" .. txt .. ""
+end
+
+-- Signals
+awful.tag.attached_connect_signal(s, "property::selected", function ()
+ update_widget()
+end)
+awful.tag.attached_connect_signal(s, "property::layout", function ()
+ update_widget()
+end)
+
+return desktop_mode_widget
diff --git a/config/awesome/noodle/minimal_tasklist.lua b/config/awesome/noodle/minimal_tasklist.lua
new file mode 100644
index 0000000..8eb67d7
--- /dev/null
+++ b/config/awesome/noodle/minimal_tasklist.lua
@@ -0,0 +1,119 @@
+local awful = require("awful")
+local gears = require("gears")
+local beautiful = require("beautiful")
+local wibox = require("wibox")
+local capi = { screen = screen, client = client }
+
+-- Get theme variables
+local visible_clients_color = beautiful.minimal_tasklist_visible_clients_color or "#1D8CD2"
+local visible_clients_text = beautiful.minimal_tasklist_visible_clients_text or "v: "
+local hidden_clients_color = beautiful.minimal_tasklist_hidden_clients_color or "#2DD283"
+local hidden_clients_text = beautiful.minimal_tasklist_hidden_clients_text or "h: "
+
+local minimal_tasklist = wibox.widget{
+ font = beautiful.font,
+ text = "placeholder",
+ align = 'center',
+ valign = 'center',
+ widget = wibox.widget.textbox
+}
+ --TODO forced_width = ?
+
+-- Mouse control
+minimal_tasklist:buttons(gears.table.join(
+ -- Restore minimized
+ awful.button({ }, 1, function ()
+ local c = awful.client.restore()
+ if c then
+ client.focus = c
+ c:raise()
+ end
+ end),
+ -- Close
+ awful.button({ }, 2, function ()
+ if client.focus ~= nil then
+ client.focus:kill()
+ end
+ end),
+ -- Minimize
+ awful.button({ }, 3, function ()
+ if client.focus ~= nil then
+ client.focus.minimized = true
+ end
+ end),
+ -- Cycle clients
+ awful.button({ }, 4, function ()
+ awful.client.focus.byidx(-1)
+ end),
+ awful.button({ }, 5, function ()
+ awful.client.focus.byidx(1)
+ end)
+))
+
+-- Returns the minimized clients in the current tag(s)
+local function get_minimized_clients()
+ local clients = {}
+ for _, c in ipairs(capi.client.get()) do
+ if not (c.skip_taskbar or c.hidden
+ or c.type == "splash" or c.type == "dock"
+ or c.type == "desktop") and c.minimized
+ and awful.widget.tasklist.filter.currenttags(c, awful.screen.focused()) then
+ table.insert(clients,c)
+ end
+ end
+
+ return clients
+end
+
+local function update_widget()
+ local s = awful.screen.focused()
+ local hidden_clients = get_minimized_clients()
+ --local hidden_clients = s.hidden_clients
+ local clients = s.clients
+ --local color = "#493999"
+ local txt = hidden_clients_text .. #hidden_clients .. visible_clients_text .. #clients
+
+ -- Padding for single digit numbers
+ local vpad = ""
+ local hpad = ""
+ if #clients < 10 then
+ vpad = " "
+ --vpad = "0"
+ --vpad = "_"
+ end
+ if #hidden_clients < 10 then
+ hpad = " "
+ --hpad = "0"
+ --hpad = "_"
+ end
+
+ minimal_tasklist.text = txt
+ minimal_tasklist.markup =
+ ""
+ .. visible_clients_text .. "" .. vpad .. #clients .. " ·~"
+ .. ""
+ .. hidden_clients_text .. "" .. hpad .. #hidden_clients
+end
+
+-- Signals
+--minimal_tasklist:connect_signal("mouse::enter", function ()
+ --awful.spawn.with_shell("notify-send hello")
+--end)
+--minimal_tasklist:connect_signal("mouse::leave", function ()
+ --awful.spawn.with_shell("notify-send bye")
+--end)
+
+client.connect_signal("unmanage", function(c)
+ update_widget()
+end)
+client.connect_signal("manage", function(c)
+ update_widget()
+end)
+client.connect_signal("property::minimized", function(c)
+ update_widget()
+end)
+awful.tag.attached_connect_signal(s, "property::selected", function ()
+ update_widget()
+end)
+
+return minimal_tasklist
diff --git a/config/awesome/rc.lua b/config/awesome/rc.lua
new file mode 100644
index 0000000..cd9f2c9
--- /dev/null
+++ b/config/awesome/rc.lua
@@ -0,0 +1,684 @@
+-- ████
+-- ▒▒███
+-- ████████ ██████ ▒███ █████ ████ ██████
+-- ▒▒███▒▒███ ███▒▒███ ▒███ ▒▒███ ▒███ ▒▒▒▒▒███
+-- ▒███ ▒▒▒ ▒███ ▒▒▒ ▒███ ▒███ ▒███ ███████
+-- ▒███ ▒███ ███ ▒███ ▒███ ▒███ ███▒▒███
+-- █████ ▒▒██████ ██ █████ ▒▒████████▒▒████████
+-- ▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒
+--
+--------------------------------------------------------------------------------
+
+local theme_collection = {
+ "manta", -- 1 --
+ --"whatever", -- 2 --
+ -- Add more themes here
+}
+
+-- Change this number to use a different theme
+local theme_name = theme_collection[1]
+
+--------------------------------------------------------------------------------
+
+-- Jit
+--pcall(function() jit.on() end)
+
+-- Theme handling library
+local beautiful = require("beautiful")
+-- Themes define colours, icons, font and wallpapers.
+local theme_dir = os.getenv("HOME") .. "/.config/awesome/themes/"
+beautiful.init( theme_dir .. theme_name .. "/theme.lua" )
+--beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua")
+
+-- Standard awesome library
+local gears = require("gears")
+local awful = require("awful")
+require("awful.autofocus")
+-- Widget and layout library
+local wibox = require("wibox")
+-- Default notification library
+local naughty = require("naughty")
+local menubar = require("menubar")
+local hotkeys_popup = require("awful.hotkeys_popup").widget
+-- Enable hotkeys help widget for VIM and other apps
+-- when client with a matching name is opened:
+require("awful.hotkeys_popup.keys")
+
+-- {{{ Initialize stuff
+local helpers = require("helpers")
+local bars = require("bars")
+local keys = require("keys")
+local titlebars = require("titlebars")
+-- }}}
+
+-- {{{ Third party stuff
+--local volumebar_widget = require("third_party.awesome-wm-widgets.volumebar-widget.volumebar")
+--local mpdarc_widget = require("third_party.awesome-wm-widgets.mpdarc-widget.mpdarc")
+-- }}}
+
+-- {{{ Error handling
+-- Check if awesome encountered an error during startup and fell back to
+-- another config (This code will only ever execute for the fallback config)
+if awesome.startup_errors then
+ naughty.notify({ preset = naughty.config.presets.critical,
+ title = "Oops, there were errors during startup!",
+ text = awesome.startup_errors })
+end
+
+-- Handle runtime errors after startup
+do
+ local in_error = false
+ awesome.connect_signal("debug::error", function (err)
+ -- Make sure we don't go into an endless error loop
+ if in_error then return end
+ in_error = true
+
+ naughty.notify({ preset = naughty.config.presets.critical,
+ title = "Oops, an error happened!",
+ text = tostring(err) })
+ in_error = false
+ end)
+end
+-- }}}
+
+-- {{{ Variable definitions
+-- This is used later as the default terminal and editor to run.
+terminal = "termite"
+floating_terminal = "termite --class Diptera"
+tmux = terminal .. " -e tmux new "
+floating_tmux = terminal .. " --class Diptera -e tmux new "
+editor = "vim"
+--editor = os.getenv("EDITOR") or "nano"
+editor_cmd = terminal .. " -e " .. editor .. " "
+
+-- Table of layouts to cover with awful.layout.inc, order matters.
+awful.layout.layouts = {
+ -- I only ever use these
+ awful.layout.suit.tile,
+ awful.layout.suit.floating,
+ awful.layout.suit.max,
+ --awful.layout.suit.spiral,
+ --awful.layout.suit.spiral.dwindle,
+ --awful.layout.suit.tile.top,
+ --awful.layout.suit.fair,
+ --awful.layout.suit.fair.horizontal,
+ --awful.layout.suit.tile.left,
+ --awful.layout.suit.tile.bottom,
+ --awful.layout.suit.max.fullscreen,
+ --awful.layout.suit.corner.nw,
+ --awful.layout.suit.magnifier,
+ --awful.layout.suit.corner.ne,
+ --awful.layout.suit.corner.sw,
+ --awful.layout.suit.corner.se,
+}
+-- }}}
+
+-- {{{ Notifications
+-- TODO: some options are not respected when the notification is created
+-- through lib-notify. Naughty works as expected.
+
+-- Icon size
+naughty.config.defaults['icon_size'] = beautiful.notification_icon_size
+
+-- Timeouts
+naughty.config.defaults.timeout = 5
+naughty.config.presets.low.timeout = 2
+naughty.config.presets.critical.timeout = 12
+
+-- Apply theme variables
+naughty.config.padding = beautiful.notification_padding
+naughty.config.spacing = beautiful.notification_spacing
+naughty.config.defaults.margin = beautiful.notification_margin
+naughty.config.defaults.border_width = beautiful.notification_border_width
+
+naughty.config.presets.normal = {
+ font = beautiful.font,
+ fg = beautiful.notification_fg,
+ bg = beautiful.notification_bg,
+ border_width = beautiful.notification_border_width,
+ margin = beautiful.notification_margin,
+ position = beautiful.notification_position
+}
+
+naughty.config.presets.low = {
+ font = beautiful.font,
+ fg = beautiful.notification_fg,
+ bg = beautiful.notification_bg,
+ border_width = beautiful.notification_border_width,
+ margin = beautiful.notification_margin,
+ position = beautiful.notification_position
+}
+
+naughty.config.presets.ok = naughty.config.presets.low
+naughty.config.presets.info = naughty.config.presets.low
+naughty.config.presets.warn = naughty.config.presets.normal
+
+naughty.config.presets.critical = {
+ font = beautiful.font,
+ fg = beautiful.notification_crit_fg,
+ bg = beautiful.notification_crit_bg,
+ border_width = beautiful.notification_border_width,
+ margin = beautiful.notification_margin,
+ position = beautiful.notification_position
+}
+
+-- }}}
+
+-- {{{ Menu
+-- Create a launcher widget and a main menu
+myawesomemenu = {
+ { "hotkeys", function() return false, hotkeys_popup.show_help end},
+ { "manual", terminal .. " -e \"man awesome\"" },
+ { "restart", awesome.restart },
+ { "quit", function() awesome.quit() end}
+}
+mymusicmenu = {
+ { "mpd toggle", function() awful.spawn.with_shell("mpc toggle") end},
+ { "mpd next", function() awful.spawn.with_shell("mpc next") end},
+ { "mpd previous", function() awful.spawn.with_shell("mpc prev") end},
+ { "ncmpcpp", function() awful.spawn.with_shell(terminal .. " -e ncmpcpp") end},
+ { "--------------", nil},
+ { "mpv toggle", function() awful.spawn.with_shell("mpvc toggle") end},
+ { "mpv next", function() awful.spawn.with_shell("mpvc next") end},
+ { "mpv previous", function() awful.spawn.with_shell("mpvc prev") end},
+ { "mpvtube", function() awful.spawn.with_shell("~/scr/Rofi/rofi_mpvtube") end}
+}
+
+
+
+-- Need to allow these commands to be run without password
+-- Or if you are using systemd: systemctl [suspend|hibernate]
+mypowermenu = {
+ { "reboot", "reboot" },
+ { "suspend", "sudo pm-suspend" },
+ { "hibernate", "sudo pm-hibernate" },
+ { "poweroff", "poweroff" }
+}
+
+--mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
+ --{ "music", mymusicmenu, beautiful.awesome_icon },
+ --{ "power", mypowermenu, beautiful.awesome_icon },
+mymainmenu = awful.menu({ items = {
+ { "awesome", myawesomemenu },
+ { "music", mymusicmenu },
+ { "firefox", "firefox" },
+ { "files", "nemo" },
+ { "discord", "discord" },
+ { "gimp", "gimp" },
+ { "appearance", "lxappearance" },
+ { "volume", "pavucontrol" },
+ { "games", "lutris" },
+ { "steam", "steam" },
+ { "terminal", terminal },
+ { "power", mypowermenu }
+ }
+ })
+
+mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
+ menu = mymainmenu })
+
+-- Menubar configuration
+menubar.utils.terminal = terminal -- Set the terminal for applications that require it
+-- }}}
+
+local function set_wallpaper(s)
+ -- Wallpaper
+ if beautiful.wallpaper then
+ local wallpaper = beautiful.wallpaper
+ -- If wallpaper is a function, call it with the screen
+ if type(wallpaper) == "function" then
+ wallpaper = wallpaper(s)
+ end
+
+ -- Method 1: Built in function
+ --gears.wallpaper.maximized(wallpaper, s, true)
+
+ -- Method 2: Set theme's wallpaper with feh
+ --awful.spawn.with_shell("feh --bg-fill " .. wallpaper)
+
+ -- Method 3: Set last wallpaper with feh
+ awful.spawn.with_shell(os.getenv("HOME") .. "/.fehbg")
+ end
+end
+
+-- Re-set wallpaper when a screen's geometry changes (e.g. different resolution)
+screen.connect_signal("property::geometry", set_wallpaper)
+
+-- Tag Names
+local tagnames = beautiful.tagnames or { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }
+
+awful.screen.connect_for_each_screen(function(s)
+ -- Wallpaper
+ set_wallpaper(s)
+
+ -- Layouts
+ -- Each screen has its own tag table.
+ local l = awful.layout.suit -- Alias to save time :)
+ local layouts = { l.max, l.floating, l.max, l.tile , l.tile,
+ l.max, l.floating, l.max, l.floating, l.floating}
+ awful.tag(tagnames, s, layouts)
+end)
+
+-- {{{ Rules
+-- Rules to apply to new clients (through the "manage" signal).
+awful.rules.rules = {
+ -- All clients will match this rule.
+ { rule = { },
+ properties = { border_width = beautiful.border_width,
+ border_color = beautiful.border_normal,
+ focus = awful.client.focus.filter,
+ raise = true,
+ keys = keys.clientkeys,
+ buttons = keys.clientbuttons,
+ screen = awful.screen.preferred,
+ size_hints_honor = false,
+ honor_workarea = true,
+ honor_padding = true,
+ placement = awful.placement.no_overlap+awful.placement.no_offscreen
+ }
+ },
+
+ -- Floating clients
+ { rule_any = {
+ instance = {
+ "DTA", -- Firefox addon DownThemAll.
+ "copyq", -- Includes session name in class.
+ },
+ class = {
+ "Galculator",
+ "feh",
+ "Gpick",
+ "Diptera", -- Floating Termite
+ },
+
+ name = {
+ "Event Tester", -- xev
+ },
+ role = {
+ "AlarmWindow", -- Thunderbird's calendar.
+ "pop-up", -- e.g. Google Chrome's (detached) Developer Tools.
+ }
+ }, properties = { floating = true, ontop = false }},
+
+ -- Add titlebars to normal clients and dialogs
+ -- Not needed anymore --
+ { rule_any = {type = { "normal", "dialog" }
+ }, properties = { titlebars_enabled = true }--,
+ --callback = function (c)
+ --end
+ },
+
+ -- Centered clients
+ { rule_any = {
+ type = {
+ "dialog",
+ },
+ class = {
+ "feh",
+ },
+ name = {
+ "Save As",
+ },
+ role = {
+ "GtkFileChooserDialog",
+ }
+ }, properties = {},
+ callback = function (c)
+ awful.placement.centered(c,{honor_workarea=true})
+ end
+ },
+
+ -- Titlebars OFF (explicitly)
+ -- Titlebars of these clients will be hidden regardless of the theme setting
+ { rule_any = {
+ class = {
+ "qutebrowser",
+ "feh",
+ "Gimp",
+ "Sublime_text",
+ --"discord",
+ --"TelegramDesktop",
+ "Firefox",
+ "Chromium-browser",
+ "Rofi",
+ },
+ }, properties = {},
+ callback = function (c)
+ if not beautiful.titlebars_imitate_borders then
+ awful.titlebar.hide(c, beautiful.titlebar_position)
+ end
+ end
+ },
+
+
+ -- Titlebars ON (explicitly)
+ -- Titlebars of these clients will be shown regardless of the theme setting
+ { rule_any = {
+ class = {
+ --"feh",
+ --"qutebrowser",
+ --"Firefox",
+ --"Rofi"
+ },
+ }, properties = {},
+ callback = function (c)
+ awful.titlebar.show(c, beautiful.titlebar_position)
+ end
+ },
+
+ -- Skip taskbar
+ { rule_any = {
+ class = {
+ --"feh",
+ },
+
+ }, properties = {},
+ callback = function (c)
+ c.skip_taskbar = true
+ end
+ },
+
+ -- Fixed terminal geometry
+ { rule_any = {
+ class = {
+ "Termite",
+ "Diptera",
+ "mpvtube",
+ "kitty",
+ "st-256color",
+ "st",
+ "URxvt",
+ "XTerm",
+ },
+ }, properties = { width = 640, height = 400 }
+ },
+
+ -- File managers
+ { rule_any = {
+ class = {
+ "Nemo",
+ "Thunar"
+ },
+ }, properties = { floating = true, width = 580, height = 440 }
+ },
+
+ -- Rofi configuration
+ -- Needed only if option "-normal-window" is used
+ { rule_any = {
+ class = {
+ "Rofi",
+ },
+ }, properties = { floating = true, ontop = true, sticky = true },
+ callback = function (c)
+ c.skip_taskbar = true
+ awful.placement.centered(c,{honor_workarea=true})
+ end
+ },
+
+ -- Screenruler
+ { rule_any = {
+ class = {
+ "Screenruler",
+ },
+ }, properties = { floating = true, ontop = true },
+ callback = function (c)
+ c.border_width = 0
+ awful.titlebar.hide(c, beautiful.titlebar_position)
+ awful.placement.centered(c,{honor_workarea=true})
+ end
+ },
+
+ -- On screen keyboard
+ --{ rule_any = {
+ --class = {
+ --"Onboard",
+ --},
+ --}, properties = { floating = true, ontop = false, sticky = false, focusable = false },
+ --callback = function (c)
+ ----c.skip_taskbar = true
+ ----awful.placement.centered(c,{honor_workarea=true})
+ --end
+ --},
+
+ -- Scratchpad and calendar (calcurse)
+ { rule_any = {
+ class = {
+ "scratchpad",
+ "calendar",
+ },
+ }, properties = { tag = awful.screen.focused().tags[10], floating = true, ontop = false, sticky = true },
+ callback = function (c)
+ c.skip_taskbar = true
+ c.minimized = true
+ awful.placement.centered(c,{honor_workarea=true})
+ end
+ },
+
+ ---------------------------------------------
+ -- Start application on specific workspace --
+ ---------------------------------------------
+ -- Example:
+ -- Set Firefox to always map on the tag named "2" on screen 1.
+ --{ rule = { class = "Firefox" },
+ --properties = { screen = 1, tag = "2" } },
+ -- Browsing
+ { rule_any = {
+ class = {
+ "Firefox",
+ "Chromium-browser",
+ "qutebrowser",
+ },
+ --local clients =
+ }, properties = { screen = 1, tag = awful.screen.focused().tags[1] } },
+
+ -- Chatting
+ { rule_any = {
+ class = {
+ "discord",
+ "TelegramDesktop",
+ "TeamSpeak 3",
+ },
+ --local clients =
+ }, properties = { screen = 1, tag = awful.screen.focused().tags[3] } },
+
+ -- Photo editing
+ { rule_any = {
+ class = {
+ "Gimp",
+ "Inkscape",
+ },
+ }, properties = { screen = 1, tag = awful.screen.focused().tags[6] } },
+
+ -- Gaming
+ { rule_any = {
+ class = {
+ "Steam",
+ "battle.net.exe",
+ "Lutris",
+ },
+ }, properties = { screen = 1, tag = awful.screen.focused().tags[8] } },
+
+ -- Music
+ { rule_any = {
+ class = {
+ "mpvtube",
+ },
+ --name = {
+ --"mpvtube",
+ --},
+
+ }, properties = { screen = 1, tag = awful.screen.focused().tags[10] },
+ callback = function (c)
+ awful.placement.centered(c,{honor_workarea=true})
+ gears.timer.delayed_call(function()
+ c.urgent = false
+ end)
+ end
+ },
+}
+-- }}}
+
+-- {{{ Signals
+-- Signal function to execute when a new client appears.
+client.connect_signal("manage", function (c)
+ -- Set every new window as a 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
+
+ -- Hide titlebars if required by the theme
+ if not beautiful.titlebars_enabled then
+ awful.titlebar.hide(c, beautiful.titlebar_position)
+ end
+
+ -- If the layout is not floating, every floating client that appears is centered
+ if awful.layout.get(mouse.screen) ~= awful.layout.suit.floating then
+ awful.placement.centered(c,{honor_workarea=true})
+ else
+ -- If the layout is floating, and there is no other client visible, center it
+ if #mouse.screen.clients == 1 then
+ awful.placement.centered(c,{honor_workarea=true})
+ end
+ end
+end)
+
+-- Enable sloppy focus, so that focus follows mouse.
+--client.connect_signal("mouse::enter", function(c)
+-- if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
+-- and awful.client.focus.filter(c) then
+-- client.focus = c
+-- end
+--end)
+
+-- Rounded corners
+if beautiful.border_radius ~= 0 then
+ client.connect_signal("manage", function (c, startup)
+ if not c.fullscreen then
+ c.shape = helpers.rrect(beautiful.border_radius)
+ end
+ end)
+
+ -- Make sure fullscreen clients do not have rounded corners
+ client.connect_signal("property::fullscreen", function (c)
+ if c.fullscreen then
+ -- Use delayed_call in order to avoid flickering when corners
+ -- change shape
+ gears.timer.delayed_call(function()
+ c.shape = helpers.rect()
+ end)
+ else
+ c.shape = helpers.rrect(beautiful.border_radius)
+ end
+ end)
+end
+
+-- When a client starts up in fullscreen, resize it to cover the fullscreen a short moment later
+-- Fixes wrong geometry when titlebars are enabled
+client.connect_signal("property::fullscreen", function(c)
+ if c.fullscreen then
+ gears.timer.delayed_call(function()
+ if c.valid then
+ c:geometry(c.screen.geometry)
+ end
+ end)
+ end
+end)
+
+-- Center client when floating property changes
+--client.connect_signal("property::floating", function(c)
+ --awful.placement.centered(c,{honor_workarea=true})
+--end)
+
+-- Apply shapes
+-- beautiful.notification_shape = helpers.infobubble(beautiful.notification_border_radius)
+beautiful.notification_shape = helpers.rrect(beautiful.notification_border_radius)
+beautiful.snap_shape = helpers.rrect(beautiful.border_radius * 2)
+beautiful.taglist_shape = helpers.rrect(beautiful.taglist_item_roundness)
+
+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)
+
+-- Scratchpad gets minimized when it loses focus
+--client.connect_signal("unfocus", function(c)
+ --if c.class == "scratchpad" or c.class == "calendar" then
+ --c.minimized = true
+ --end
+--end)
+
+-- Scratchpad gets minimized if it is focused and tag changes
+awful.tag.attached_connect_signal(s, "property::selected", function ()
+ local c = client.focus
+ if c ~= nil then
+ if c.class == "scratchpad" or c.class == "calendar" then
+ c.minimized = true
+ end
+ end
+end)
+
+-- Test signal
+-- Use the following line to trigger it:
+-- awesome.emit_signal("dummy")
+--awesome.connect_signal("dummy", function(c)
+ --naughty.notify({ preset = naughty.config.presets.normal,
+ --title = "bitch",
+ --text = "dummy" })
+--end)
+
+-- Floating: restore geometry
+tag.connect_signal('property::layout',
+ function(t)
+ for k, c in ipairs(t:clients()) do
+ if awful.layout.get(mouse.screen) == awful.layout.suit.floating then
+ -- Geometry x = 0 and y = 0 most probably means that the
+ -- clients have been spawned in a non floating layout, and thus
+ -- they don't have their floating_geometry set properly.
+ -- If that is the case, don't change their geometry
+ local cgeo = awful.client.property.get(c, 'floating_geometry')
+ if cgeo ~= nil then
+ if not (cgeo.x == 0 and cgeo.y == 0) then
+ c:geometry(awful.client.property.get(c, 'floating_geometry'))
+ end
+ end
+ --c:geometry(awful.client.property.get(c, 'floating_geometry'))
+ end
+ end
+ end
+)
+
+client.connect_signal('manage',
+ function(c)
+ if awful.layout.get(mouse.screen) == awful.layout.suit.floating then
+ awful.client.property.set(c, 'floating_geometry', c:geometry())
+ end
+ end
+)
+
+client.connect_signal('property::geometry',
+ function(c)
+ if awful.layout.get(mouse.screen) == awful.layout.suit.floating then
+ awful.client.property.set(c, 'floating_geometry', c:geometry())
+ end
+ end
+)
+
+-- Make rofi possible to raise minimized clients
+-- Note: causes clients to unminimize after restarting awesome
+client.connect_signal("request::activate",
+ function(c, context, hints)
+ if c.minimized then
+ c.minimized = false
+ end
+ awful.ewmh.activate(c, context, hints)
+ end
+)
+
+-- Startup applications
+awful.spawn.with_shell( os.getenv("HOME") .. "/.config/awesome/autostart.sh")
+
+-- }}}
diff --git a/config/awesome/themes/manta/icons/submenu.svg b/config/awesome/themes/manta/icons/submenu.svg
new file mode 100644
index 0000000..54052a6
--- /dev/null
+++ b/config/awesome/themes/manta/icons/submenu.svg
@@ -0,0 +1,11 @@
+
diff --git a/config/awesome/themes/manta/theme.lua b/config/awesome/themes/manta/theme.lua
new file mode 100644
index 0000000..b90e289
--- /dev/null
+++ b/config/awesome/themes/manta/theme.lua
@@ -0,0 +1,333 @@
+-- _ _ _ _
+-- | |__ _____ _| (_) | _____
+-- | '_ \ / _ \ \/ / | | |/ / _ \
+-- | |_) | (_) > <| | | < __/
+-- |_.__/ \___/_/\_\_|_|_|\_\___|
+--
+-- A *box lookalike
+
+local theme_assets = require("beautiful.theme_assets")
+local xresources = require("beautiful.xresources")
+local dpi = xresources.apply_dpi
+local gfs = require("gears.filesystem")
+local themes_path = gfs.get_themes_dir()
+local theme_name = "manta"
+local icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/icons/"
+local titlebar_icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/titlebar/"
+local tip = titlebar_icon_path --alias to save time
+local xrdb = xresources.get_current_theme()
+local theme = dofile(themes_path.."default/theme.lua")
+--local theme = {}
+
+theme.tip = titlebar_icon_path -- So a script can access it
+
+local awful = require("awful")
+-- Used to make it easier to align the panels in specific monitor positions
+local screen_width = awful.screen.focused().geometry.width
+local screen_height = awful.screen.focused().geometry.height
+
+theme.wallpaper = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/wall.png"
+theme.font = "monospace 12"
+--theme.font = "sans-serif 12"
+
+local accent_color = xrdb.color14
+local focused_color = xrdb.color14
+local unfocused_color = xrdb.color7
+local urgent_color = xrdb.color1
+local backdrop_color = awesome.xrdb_get_value("", "color16")
+
+theme.bg_dark = xrdb.background
+theme.bg_normal = xrdb.background
+theme.bg_focus = xrdb.background
+theme.bg_urgent = xrdb.background
+theme.bg_minimize = xrdb.color8
+theme.bg_systray = bg_dark
+
+theme.fg_normal = xrdb.color7
+theme.fg_focus = focused_color
+theme.fg_urgent = urgent_color
+theme.fg_minimize = xrdb.color8
+
+-- Gaps
+theme.useless_gap = dpi(5)
+-- This is used to manually determine how far away from the
+-- screen edge the bars should be (if they are detached)
+theme.screen_margin = dpi(5)
+
+-- Borders
+theme.border_width = dpi(0)
+theme.border_normal = xrdb.color0
+theme.border_focus = xrdb.color0
+-- Rounded corners
+theme.border_radius = dpi(6)
+
+-- Titlebars
+theme.titlebars_enabled = true
+theme.titlebar_size = dpi(32)
+theme.titlebar_title_enabled = false
+theme.titlebar_font = theme.font -- BUG: Uses theme.font regardless
+-- Window title alignment: left, right, center
+theme.titlebar_title_align = "center"
+-- Titlebar position: top, bottom, left, right
+theme.titlebar_position = "top"
+-- Use 4 titlebars around the window to imitate borders
+theme.titlebars_imitate_borders = false
+theme.titlebar_bg = xrdb.color7
+-- theme.titlebar_bg_focus = xrdb.color5
+-- theme.titlebar_bg_normal = xrdb.color13
+theme.titlebar_fg_focus = xrdb.color7
+theme.titlebar_fg_normal = xrdb.color15
+--theme.titlebar_fg = xrdb.color7
+
+-- Variables set for theming notifications:
+-- notification_font
+-- notification_[bg|fg]
+-- notification_[width|height|margin]
+-- notification_[border_color|border_width|shape|opacity]
+
+-- Values: bottom_left, bottom_right, bottom_middle,
+-- top_left, top_right, top_middle
+theme.notification_position = "top_right"
+theme.notification_border_width = 0
+theme.notification_border_radius = theme.border_radius
+theme.notification_border_color = xrdb.color10
+theme.notification_bg = xrdb.color7
+theme.notification_fg = xrdb.color0
+theme.notification_crit_bg = urgent_color
+theme.notification_crit_fg = xrdb.color0
+theme.notification_margin = dpi(15)
+theme.notification_icon_size = dpi(50)
+--theme.notification_height = dpi(80)
+--theme.notification_width = dpi(300)
+--theme.notification_opacity = 0.7
+theme.notification_font = theme.font
+theme.notification_padding = theme.screen_margin * 2
+theme.notification_spacing = theme.screen_margin * 2
+
+-- Edge snap
+theme.snap_bg = theme.bg_focus
+if theme.border_width == 0 then
+ theme.snap_border_width = dpi(8)
+else
+ theme.snap_border_width = theme.border_width * 2
+end
+
+-- Tag names
+-- Symbols:
+local symb = " "
+theme.tagnames = { symb, symb, symb, symb, symb, symb, symb, symb, symb, symb }
+-- Substitutes:
+-- Nature:
+--theme.tagnames = { " ", " ", " ", " ", " ", " ", " ", " ", " ", " " }
+--theme.tagnames = { " i ", " ii ", " iii ", " iv ", " v ", " vi ", " vii ", " viii ", " ix ", " x " }
+
+-- Widget separator
+--theme.separator_text = " / "
+--theme.separator_text = " / "
+--theme.separator_text = " ) ( "
+--theme.separator_text = " "
+--theme.separator_text = " | "
+--theme.separator_text = " "
+--theme.separator_text = " :: "
+--theme.separator_text = " ⠐ "
+--theme.separator_text = " • "
+--theme.separator_text = " •• "
+--theme.separator_text = " "
+theme.separator_text = " "
+theme.separator_fg = xrdb.color8
+
+-- Wibar
+-- (The panel items can be customized in rc.lua)
+theme.wibar_position = "bottom"
+theme.wibar_detached = true
+theme.wibar_height = dpi(40)
+theme.wibar_fg = xrdb.color0
+theme.wibar_bg = xrdb.color7
+--theme.wibar_opacity = 0.7
+theme.wibar_border_color = xrdb.color0
+theme.wibar_border_width = 0
+theme.wibar_border_radius = theme.border_radius
+--theme.wibar_width = screen_width - theme.screen_margin * 4 -theme.wibar_border_width * 2
+theme.wibar_width = 885
+--theme.wibar_x = screen_width / 2 - theme.wibar_width - theme.screen_margin * 2
+--theme.wibar_x = theme.screen_margin * 2
+--theme.wibar_x = screen_width - theme.wibar_width - theme.wibar_border_width * 2 - theme.screen_margin * 2
+--theme.wibar_y = theme.screen_margin * 2
+
+-- Another wibar (optional)
+theme.wibar_alt_enabled = false
+--theme.wibar_alt_position = "bottom"
+theme.wibar_alt_position = "left" --fake position so it does not increase screen margin
+theme.wibar_alt_detached = false
+theme.wibar_alt_height = dpi(40)
+theme.wibar_alt_fg = xrdb.color7
+theme.wibar_alt_bg = xrdb.color0
+--theme.wibar_alt_opacity = 0.7
+theme.wibar_alt_border_color = xrdb.color0
+theme.wibar_alt_border_width = 0
+theme.wibar_alt_border_radius = theme.border_radius
+theme.wibar_alt_width = 420
+theme.wibar_alt_x = screen_width / 2 + theme.screen_margin
+--theme.wibar_alt_x = screen_width - theme.wibar_alt_width - theme.wibar_alt_border_width * 2 - theme.screen_margin * 2
+theme.wibar_alt_y = theme.screen_margin * 2
+--theme.wibar_alt_y = screen_height - theme.screen_margin * 2 - theme.wibar_alt_height - theme.wibar_alt_border_width * 2
+
+-- Widgets
+theme.prefix_fg = xrdb.color8
+
+ --There are other variable sets
+ --overriding the default one when
+ --defined, the sets are:
+ --taglist_[bg|fg]_[focus|urgent|occupied|empty|volatile]
+ --tasklist_[bg|fg]_[focus|urgent]
+ --titlebar_[bg|fg]_[normal|focus]
+ --tooltip_[font|opacity|fg_color|bg_color|border_width|border_color]
+ --mouse_finder_[color|timeout|animate_timeout|radius|factor]
+ --prompt_[fg|bg|fg_cursor|bg_cursor|font]
+ --hotkeys_[bg|fg|border_width|border_color|shape|opacity|modifiers_fg|label_bg|label_fg|group_margin|font|description_font]
+ --Example:
+--theme.taglist_bg_focus = "#ff0000"
+
+ --Tasklist
+theme.tasklist_disable_icon = true
+theme.tasklist_plain_task_name = true
+theme.tasklist_bg_focus = xrdb.color0 .. "00"
+theme.tasklist_fg_focus = focused_color
+theme.tasklist_bg_normal = xrdb.color0 .. "00"
+theme.tasklist_fg_normal = unfocused_color
+theme.tasklist_bg_minimize = xrdb.color0 .. "00"
+theme.tasklist_fg_minimize = theme.fg_minimize
+theme.tasklist_bg_urgent = xrdb.color0 .. "00"
+theme.tasklist_fg_urgent = urgent_color
+theme.tasklist_spacing = 5
+theme.tasklist_align = "center"
+
+-- Prompt
+theme.prompt_fg = accent_color
+
+-- Taglist
+theme.taglist_font = theme.font
+theme.taglist_bg_focus = xrdb.color0 .. "00"
+theme.taglist_fg_focus = xrdb.color9
+theme.taglist_bg_occupied = xrdb.color0 .. "00"
+theme.taglist_fg_occupied = xrdb.color1
+theme.taglist_bg_empty = xrdb.color0 .. "00"
+theme.taglist_fg_empty = xrdb.color15
+theme.taglist_bg_urgent = xrdb.color0 .. "00"
+theme.taglist_fg_urgent = urgent_color
+theme.taglist_disable_icon = true
+theme.taglist_spacing = dpi(0)
+--theme.taglist_item_roundness = 0
+theme.taglist_item_roundness = theme.border_radius
+-- Generate taglist squares:
+local taglist_square_size = dpi(0)
+theme.taglist_squares_sel = theme_assets.taglist_squares_sel(
+ taglist_square_size, theme.fg_focus
+)
+theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel(
+ taglist_square_size, theme.fg_normal
+)
+
+-- Variables set for theming the menu:
+-- menu_[bg|fg]_[normal|focus]
+-- menu_[border_color|border_width]
+theme.menu_submenu_icon = icon_path.."submenu.svg"
+theme.menu_height = dpi(25)
+theme.menu_width = dpi(200)
+
+-- You can add as many variables as
+-- you wish and access them by using
+-- beautiful.variable in your rc.lua
+--theme.bg_widget = "#cc0000"
+
+-- Define the images to load
+theme.titlebar_close_button_normal = tip .. "/close_normal.svg"
+theme.titlebar_close_button_focus = tip .. "/close_focus.svg"
+theme.titlebar_minimize_button_normal = tip .. "/minimize_normal.svg"
+theme.titlebar_minimize_button_focus = tip .. "/minimize_focus.svg"
+theme.titlebar_ontop_button_normal_inactive = tip .. "/ontop_normal_inactive.svg"
+theme.titlebar_ontop_button_focus_inactive = tip .. "/ontop_focus_inactive.svg"
+theme.titlebar_ontop_button_normal_active = tip .. "/ontop_normal_active.svg"
+theme.titlebar_ontop_button_focus_active = tip .. "/ontop_focus_active.svg"
+theme.titlebar_sticky_button_normal_inactive = tip .. "/sticky_normal_inactive.svg"
+theme.titlebar_sticky_button_focus_inactive = tip .. "/sticky_focus_inactive.svg"
+theme.titlebar_sticky_button_normal_active = tip .. "/sticky_normal_active.svg"
+theme.titlebar_sticky_button_focus_active = tip .. "/sticky_focus_active.svg"
+theme.titlebar_floating_button_normal_inactive = tip .. "/floating_normal_inactive.svg"
+theme.titlebar_floating_button_focus_inactive = tip .. "/floating_focus_inactive.svg"
+theme.titlebar_floating_button_normal_active = tip .. "/floating_normal_active.svg"
+theme.titlebar_floating_button_focus_active = tip .. "/floating_focus_active.svg"
+theme.titlebar_maximized_button_normal_inactive = tip .. "/maximized_normal_inactive.svg"
+theme.titlebar_maximized_button_focus_inactive = tip .. "/maximized_focus_inactive.svg"
+theme.titlebar_maximized_button_normal_active = tip .. "/maximized_normal_active.svg"
+theme.titlebar_maximized_button_focus_active = tip .. "/maximized_focus_active.svg"
+-- (hover)
+theme.titlebar_close_button_normal_hover = tip .. "/close_normal_hover.svg"
+theme.titlebar_close_button_focus_hover = tip .. "/close_focus_hover.svg"
+theme.titlebar_minimize_button_normal_hover = tip .. "/minimize_normal_hover.svg"
+theme.titlebar_minimize_button_focus_hover = tip .. "/minimize_focus_hover.svg"
+theme.titlebar_ontop_button_normal_inactive_hover = tip .. "/ontop_normal_inactive_hover.svg"
+theme.titlebar_ontop_button_focus_inactive_hover = tip .. "/ontop_focus_inactive_hover.svg"
+theme.titlebar_ontop_button_normal_active_hover = tip .. "/ontop_normal_active_hover.svg"
+theme.titlebar_ontop_button_focus_active_hover = tip .. "/ontop_focus_active_hover.svg"
+theme.titlebar_sticky_button_normal_inactive_hover = tip .. "/sticky_normal_inactive_hover.svg"
+theme.titlebar_sticky_button_focus_inactive_hover = tip .. "/sticky_focus_inactive_hover.svg"
+theme.titlebar_sticky_button_normal_active_hover = tip .. "/sticky_normal_active_hover.svg"
+theme.titlebar_sticky_button_focus_active_hover = tip .. "/sticky_focus_active_hover.svg"
+theme.titlebar_floating_button_normal_inactive_hover = tip .. "/floating_normal_inactive_hover.svg"
+theme.titlebar_floating_button_focus_inactive_hover = tip .. "/floating_focus_inactive_hover.svg"
+theme.titlebar_floating_button_normal_active_hover = tip .. "/floating_normal_active_hover.svg"
+theme.titlebar_floating_button_focus_active_hover = tip .. "/floating_focus_active_hover.svg"
+theme.titlebar_maximized_button_normal_inactive_hover = tip .. "/maximized_normal_inactive_hover.svg"
+theme.titlebar_maximized_button_focus_inactive_hover = tip .. "/maximized_focus_inactive_hover.svg"
+theme.titlebar_maximized_button_normal_active_hover = tip .. "/maximized_normal_active_hover.svg"
+theme.titlebar_maximized_button_focus_active_hover = tip .. "/maximized_focus_active_hover.svg"
+
+-- You can use your own layout icons like this:
+theme.layout_fairh = icon_path .. "fairh.png"
+theme.layout_fairv = icon_path .. "fairv.png"
+theme.layout_floating = icon_path .. "floating.png"
+theme.layout_magnifier = icon_path .. "magnifier.png"
+theme.layout_max = icon_path .. "max.png"
+theme.layout_fullscreen = icon_path .. "fullscreen.png"
+theme.layout_tilebottom = icon_path .. "tilebottom.png"
+theme.layout_tileleft = icon_path .. "tileleft.png"
+theme.layout_tile = icon_path .. "tile.png"
+theme.layout_tiletop = icon_path .. "tiletop.png"
+theme.layout_spiral = icon_path .. "spiral.png"
+theme.layout_dwindle = icon_path .. "dwindle.png"
+theme.layout_cornernw = icon_path .. "cornernw.png"
+theme.layout_cornerne = icon_path .. "cornerne.png"
+theme.layout_cornersw = icon_path .. "cornersw.png"
+theme.layout_cornerse = icon_path .. "cornerse.png"
+
+-- Recolor layout icons
+--theme = theme_assets.recolor_layout(theme, xrdb.color1)
+
+-- Desktop mode widget variables
+-- Symbols
+theme.desktop_mode_color_floating = xrdb.color4
+theme.desktop_mode_color_tile = xrdb.color4
+theme.desktop_mode_color_max = xrdb.color3
+theme.desktop_mode_text_floating = ""
+theme.desktop_mode_text_tile = ""
+theme.desktop_mode_text_max = ""
+-- Minimal tasklist widget variables
+theme.minimal_tasklist_visible_clients_color = focused_color
+theme.minimal_tasklist_visible_clients_text = " "
+theme.minimal_tasklist_hidden_clients_color = xrdb.color8
+theme.minimal_tasklist_hidden_clients_text = " "
+
+
+-- Generate Awesome icon:
+theme.awesome_icon = theme_assets.awesome_icon(
+ theme.menu_height, theme.bg_focus, theme.fg_focus
+)
+
+-- Define the icon theme for application icons. If not set then the icons
+-- from /usr/share/icons and /usr/share/icons/hicolor will be used.
+theme.icon_theme = "/usr/share/icons/Numix"
+
+return theme
+
+-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
diff --git a/config/awesome/themes/manta/titlebar/button_focus.svg b/config/awesome/themes/manta/titlebar/button_focus.svg
new file mode 100644
index 0000000..54052a6
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/button_focus.svg
@@ -0,0 +1,11 @@
+
diff --git a/config/awesome/themes/manta/titlebar/button_hover.svg b/config/awesome/themes/manta/titlebar/button_hover.svg
new file mode 100644
index 0000000..7b6005a
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/button_hover.svg
@@ -0,0 +1,11 @@
+
diff --git a/config/awesome/themes/manta/titlebar/button_normal.svg b/config/awesome/themes/manta/titlebar/button_normal.svg
new file mode 100644
index 0000000..9d9c73a
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/button_normal.svg
@@ -0,0 +1,11 @@
+
diff --git a/config/awesome/themes/manta/titlebar/close_focus.svg b/config/awesome/themes/manta/titlebar/close_focus.svg
new file mode 120000
index 0000000..f5c599e
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/close_focus.svg
@@ -0,0 +1 @@
+./button_focus.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/close_focus_hover.svg b/config/awesome/themes/manta/titlebar/close_focus_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/close_focus_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/close_normal.svg b/config/awesome/themes/manta/titlebar/close_normal.svg
new file mode 120000
index 0000000..a72934b
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/close_normal.svg
@@ -0,0 +1 @@
+./button_normal.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/close_normal_hover.svg b/config/awesome/themes/manta/titlebar/close_normal_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/close_normal_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/floating_focus_active.svg b/config/awesome/themes/manta/titlebar/floating_focus_active.svg
new file mode 120000
index 0000000..f5c599e
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/floating_focus_active.svg
@@ -0,0 +1 @@
+./button_focus.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/floating_focus_active_hover.svg b/config/awesome/themes/manta/titlebar/floating_focus_active_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/floating_focus_active_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/floating_focus_inactive.svg b/config/awesome/themes/manta/titlebar/floating_focus_inactive.svg
new file mode 120000
index 0000000..f5c599e
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/floating_focus_inactive.svg
@@ -0,0 +1 @@
+./button_focus.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/floating_focus_inactive_hover.svg b/config/awesome/themes/manta/titlebar/floating_focus_inactive_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/floating_focus_inactive_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/floating_normal_active.svg b/config/awesome/themes/manta/titlebar/floating_normal_active.svg
new file mode 120000
index 0000000..a72934b
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/floating_normal_active.svg
@@ -0,0 +1 @@
+./button_normal.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/floating_normal_active_hover.svg b/config/awesome/themes/manta/titlebar/floating_normal_active_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/floating_normal_active_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/floating_normal_inactive.svg b/config/awesome/themes/manta/titlebar/floating_normal_inactive.svg
new file mode 120000
index 0000000..a72934b
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/floating_normal_inactive.svg
@@ -0,0 +1 @@
+./button_normal.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/floating_normal_inactive_hover.svg b/config/awesome/themes/manta/titlebar/floating_normal_inactive_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/floating_normal_inactive_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/maximized_focus_active.svg b/config/awesome/themes/manta/titlebar/maximized_focus_active.svg
new file mode 120000
index 0000000..f5c599e
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/maximized_focus_active.svg
@@ -0,0 +1 @@
+./button_focus.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/maximized_focus_active_hover.svg b/config/awesome/themes/manta/titlebar/maximized_focus_active_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/maximized_focus_active_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/maximized_focus_inactive.svg b/config/awesome/themes/manta/titlebar/maximized_focus_inactive.svg
new file mode 120000
index 0000000..f5c599e
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/maximized_focus_inactive.svg
@@ -0,0 +1 @@
+./button_focus.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/maximized_focus_inactive_hover.svg b/config/awesome/themes/manta/titlebar/maximized_focus_inactive_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/maximized_focus_inactive_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/maximized_normal_active.svg b/config/awesome/themes/manta/titlebar/maximized_normal_active.svg
new file mode 120000
index 0000000..a72934b
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/maximized_normal_active.svg
@@ -0,0 +1 @@
+./button_normal.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/maximized_normal_active_hover.svg b/config/awesome/themes/manta/titlebar/maximized_normal_active_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/maximized_normal_active_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/maximized_normal_inactive.svg b/config/awesome/themes/manta/titlebar/maximized_normal_inactive.svg
new file mode 120000
index 0000000..a72934b
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/maximized_normal_inactive.svg
@@ -0,0 +1 @@
+./button_normal.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/maximized_normal_inactive_hover.svg b/config/awesome/themes/manta/titlebar/maximized_normal_inactive_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/maximized_normal_inactive_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/minimize_focus.svg b/config/awesome/themes/manta/titlebar/minimize_focus.svg
new file mode 120000
index 0000000..f5c599e
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/minimize_focus.svg
@@ -0,0 +1 @@
+./button_focus.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/minimize_focus_hover.svg b/config/awesome/themes/manta/titlebar/minimize_focus_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/minimize_focus_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/minimize_normal.svg b/config/awesome/themes/manta/titlebar/minimize_normal.svg
new file mode 120000
index 0000000..a72934b
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/minimize_normal.svg
@@ -0,0 +1 @@
+./button_normal.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/minimize_normal_hover.svg b/config/awesome/themes/manta/titlebar/minimize_normal_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/minimize_normal_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/ontop_focus_active.svg b/config/awesome/themes/manta/titlebar/ontop_focus_active.svg
new file mode 120000
index 0000000..f5c599e
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/ontop_focus_active.svg
@@ -0,0 +1 @@
+./button_focus.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/ontop_focus_active_hover.svg b/config/awesome/themes/manta/titlebar/ontop_focus_active_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/ontop_focus_active_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/ontop_focus_inactive.svg b/config/awesome/themes/manta/titlebar/ontop_focus_inactive.svg
new file mode 120000
index 0000000..f5c599e
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/ontop_focus_inactive.svg
@@ -0,0 +1 @@
+./button_focus.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/ontop_focus_inactive_hover.svg b/config/awesome/themes/manta/titlebar/ontop_focus_inactive_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/ontop_focus_inactive_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/ontop_normal_active.svg b/config/awesome/themes/manta/titlebar/ontop_normal_active.svg
new file mode 120000
index 0000000..a72934b
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/ontop_normal_active.svg
@@ -0,0 +1 @@
+./button_normal.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/ontop_normal_active_hover.svg b/config/awesome/themes/manta/titlebar/ontop_normal_active_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/ontop_normal_active_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/ontop_normal_inactive.svg b/config/awesome/themes/manta/titlebar/ontop_normal_inactive.svg
new file mode 120000
index 0000000..a72934b
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/ontop_normal_inactive.svg
@@ -0,0 +1 @@
+./button_normal.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/ontop_normal_inactive_hover.svg b/config/awesome/themes/manta/titlebar/ontop_normal_inactive_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/ontop_normal_inactive_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/sticky_focus_active.svg b/config/awesome/themes/manta/titlebar/sticky_focus_active.svg
new file mode 120000
index 0000000..f5c599e
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/sticky_focus_active.svg
@@ -0,0 +1 @@
+./button_focus.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/sticky_focus_active_hover.svg b/config/awesome/themes/manta/titlebar/sticky_focus_active_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/sticky_focus_active_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/sticky_focus_inactive.svg b/config/awesome/themes/manta/titlebar/sticky_focus_inactive.svg
new file mode 120000
index 0000000..f5c599e
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/sticky_focus_inactive.svg
@@ -0,0 +1 @@
+./button_focus.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/sticky_focus_inactive_hover.svg b/config/awesome/themes/manta/titlebar/sticky_focus_inactive_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/sticky_focus_inactive_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/sticky_normal_active.svg b/config/awesome/themes/manta/titlebar/sticky_normal_active.svg
new file mode 120000
index 0000000..a72934b
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/sticky_normal_active.svg
@@ -0,0 +1 @@
+./button_normal.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/sticky_normal_active_hover.svg b/config/awesome/themes/manta/titlebar/sticky_normal_active_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/sticky_normal_active_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/sticky_normal_inactive.svg b/config/awesome/themes/manta/titlebar/sticky_normal_inactive.svg
new file mode 120000
index 0000000..a72934b
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/sticky_normal_inactive.svg
@@ -0,0 +1 @@
+./button_normal.svg
\ No newline at end of file
diff --git a/config/awesome/themes/manta/titlebar/sticky_normal_inactive_hover.svg b/config/awesome/themes/manta/titlebar/sticky_normal_inactive_hover.svg
new file mode 120000
index 0000000..fb79269
--- /dev/null
+++ b/config/awesome/themes/manta/titlebar/sticky_normal_inactive_hover.svg
@@ -0,0 +1 @@
+./button_hover.svg
\ No newline at end of file
diff --git a/config/awesome/titlebars.lua b/config/awesome/titlebars.lua
new file mode 100644
index 0000000..6b197a1
--- /dev/null
+++ b/config/awesome/titlebars.lua
@@ -0,0 +1,137 @@
+local awful = require("awful")
+local gears = require("gears")
+local beautiful = require("beautiful")
+local wibox = require("wibox")
+
+local helpers = require("helpers")
+local titlebars = {}
+local pad = helpers.pad
+
+-- Mouse buttons
+titlebars.buttons = gears.table.join(
+ -- Left button - move
+ awful.button({ }, 1, function()
+ c = mouse.object_under_pointer()
+ client.focus = c
+ c:raise()
+ awful.mouse.client.move(c)
+ end),
+ -- Middle button - close
+ awful.button({ }, 2, function ()
+ window_to_kill = mouse.object_under_pointer()
+ window_to_kill:kill()
+ end),
+ -- Right button - resize
+ awful.button({ }, 3, function()
+ c = mouse.object_under_pointer()
+ client.focus = c
+ c:raise()
+ awful.mouse.client.resize(c)
+ end),
+ -- Scroll up - toggle ontop
+ awful.button({ }, 4, function()
+ c = mouse.object_under_pointer()
+ --c.maximized = not c.maximized
+ c.ontop = not c.ontop
+ c:raise()
+ end),
+ -- Scroll down - minimize
+ awful.button({ }, 5, function()
+ c = mouse.object_under_pointer()
+ c.minimized = true
+ end),
+ -- Side button up - toggle floating
+ awful.button({ }, 9, function()
+ c = mouse.object_under_pointer()
+ --client.focus = c
+ --awful.placement.centered(c,{honor_workarea=true})
+ c.floating = not c.floating
+ c:raise()
+ end),
+ -- Side button down - toggle sticky
+ awful.button({ }, 8, function()
+ c = mouse.object_under_pointer()
+ c.sticky = not c.sticky
+ end)
+)
+
+-- Disable popup tooltip on titlebar button hover
+awful.titlebar.enable_tooltip = false
+
+-- Add a titlebar
+client.connect_signal("request::titlebars", function(c)
+ local buttons = titlebars.buttons
+
+ local title_widget
+ if beautiful.titlebar_title_enabled then
+ title_widget = awful.titlebar.widget.titlewidget(c)
+ title_widget:set_align(beautiful.titlebar_title_align)
+ else
+ title_widget = wibox.widget.textbox("")
+ end
+
+ local titlebar_item_layout
+ local titlebar_layout
+ if beautiful.titlebar_position == "left" or beautiful.titlebar_position == "right" then
+ titlebar_item_layout = wibox.layout.fixed.vertical
+ titlebar_layout = wibox.layout.align.vertical
+ else
+ titlebar_item_layout = wibox.layout.fixed.horizontal
+ titlebar_layout = wibox.layout.align.horizontal
+ end
+
+ -- Create 4 dummy titlebars around the window to imitate borders
+ if beautiful.titlebars_imitate_borders then
+ helpers.create_titlebar(c, buttons, "top", beautiful.titlebar_size)
+ helpers.create_titlebar(c, buttons, "bottom", beautiful.titlebar_size)
+ helpers.create_titlebar(c, buttons, "left", beautiful.titlebar_size)
+ helpers.create_titlebar(c, buttons, "right", beautiful.titlebar_size)
+ else -- Normal, single titlebar
+ awful.titlebar(c, {font = beautiful.titlebar_font, position = beautiful.titlebar_position, size = beautiful.titlebar_size}) : setup {
+ -- Titlebar items
+ { -- Left
+ -- In the presence of buttons, use padding to center the title if needed.
+ --pad(10),
+ -- Clickable buttons
+ --awful.titlebar.widget.closebutton (c),
+ --awful.titlebar.widget.maximizedbutton(c),
+ --awful.titlebar.widget.minimizebutton (c),
+ --awful.titlebar.widget.ontopbutton (c),
+ --awful.titlebar.widget.stickybutton (c),
+ --awful.titlebar.widget.floatingbutton (c),
+
+ buttons = buttons,
+ --awful.titlebar.widget.iconwidget(c),
+
+ layout = titlebar_item_layout
+ },
+ { -- Middle
+ --{ -- Title
+ --align = beautiful.titlebar_title_align,
+ --widget = title_widget
+ --},
+ title_widget,
+ buttons = buttons,
+ layout = wibox.layout.flex.horizontal
+ },
+ { -- Right
+ -- Clickable buttons
+ --awful.titlebar.widget.floatingbutton (c),
+ --awful.titlebar.widget.stickybutton (c),
+ --awful.titlebar.widget.ontopbutton (c),
+ awful.titlebar.widget.minimizebutton(c),
+ awful.titlebar.widget.maximizedbutton(c),
+ awful.titlebar.widget.closebutton (c),
+ --buttons = buttons,
+ -- In the presence of buttons, use padding to center the title if needed.
+ --pad(10),
+ layout = titlebar_item_layout
+ --layout = wibox.layout.fixed.horizontal()
+ },
+ layout = titlebar_layout
+ --layout = wibox.layout.align.horizontal
+ }
+ end
+end)
+
+return titlebars
diff --git a/config/compton/compton.conf b/config/compton/compton.conf
new file mode 100644
index 0000000..207fabc
--- /dev/null
+++ b/config/compton/compton.conf
@@ -0,0 +1,135 @@
+# Performance related
+# Use OpenGL
+backend = "glx";
+
+# These might or might NOT help with performance
+#glx-no-stencil = true;
+#glx-copy-from-front = false; # When enbled on intel GPU: screen broken until compton is killed.
+#glx-use-copysubbuffermesa = true
+#glx-no-rebind-pixmap = false
+#glx-swap-method = 1
+
+# === Rules ===
+shadow-exclude = [
+ "class_g ?= 'slop'",
+ "class_g ?= 'Polybar'",
+ #"class_g ?= 'slop'",
+ # i3wm titlebar shadows (tabbed/stacked)
+ "class_g ?= 'i3-frame'",
+ # i3wm hidden window shadows (tabbed/stacked)
+ "_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'",
+ "window_type *= 'menu'",
+ "window_type = 'utility'",
+ "window_type = 'dropdown_menu'",
+ "window_type = 'popup_menu'"
+];
+
+opacity-rule = [
+ #"60:class_g ?= 'rofi'",
+ # i3 titlebar transparency
+ #"60:class_g = 'i3-frame'"
+ # For i3wm tabbed/stacked layout transparency
+ #"0:_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'",
+ # herbstluftwm frame
+ #"60:class_g = '_HERBST_FRAME'"
+];
+
+
+focus-exclude = [
+ #"class_g ?= 'rofi'"
+ #'_NET_WM_NAME@:s = "rofi"'
+ "class_g ?= 'slop'",
+ "name = 'rofi'",
+ "class_g ?= 'Steam'",
+ "_NET_WM_WINDOW_TYPE@:a *= 'MENU'",
+ "window_type *= 'menu'",
+ "window_type = 'utility'",
+ "window_type = 'dropdown_menu'",
+ "window_type = 'popup_menu'"
+];
+
+blur-background-exclude = [
+ "class_g ?= 'slop'"
+];
+
+# === Shadows ===
+# Enabled client-side shadows on windows.
+shadow = true;
+# Don't draw shadows on DND windows.
+no-dnd-shadow = true;
+# Avoid drawing shadows on dock/panel windows.
+no-dock-shadow = false;
+# Zero the part of the shadow's mask behind the window. Fix some weirdness with ARGB windows.
+clear-shadow = false;
+# Detect rounded corners
+# (it doesn't really do anything for shadows)
+detect-rounded-corners = false;
+
+# shadow-radius: The blur radius for shadows. (default 12)
+# shadow-offset-x: The left offset for shadows. (default -15)
+# shadow-offset-y: The top offset for shadows. (default -15)
+# shadow-opacity: The translucency for shadows. (default .75)
+
+shadow-radius = 6;
+shadow-offset-x = -8;
+shadow-offset-y = -8;
+shadow-opacity = 0.3;
+
+# === Transparency ===
+#active-opacity = 0.95
+#inactive-opacity = 0.95
+#inactive-dim = 0.30
+# Border and titlebar opacity
+#frame-opacity = 0.4;
+
+# === Fading ===
+# Fade windows during opacity changes.
+fading = true;
+# The time between steps in a fade in milliseconds. (default 10).
+fade-delta = 3;
+# Opacity change between steps while fading in. (default 0.028).
+#fade-in-step = 0.03;
+# Opacity change between steps while fading out. (default 0.03).
+#fade-out-step = 0.03;
+# Fade windows in/out when opening/closing
+ no-fading-openclose = false;
+
+# Specify a list of conditions of windows that should not be faded.
+#fade-exclude = [
+# "name = '???'"
+#];
+
+# === Blurring ===
+blur-background = false;
+#blur-method = "convolution";
+#blur-strength = 20;
+#blur-background-fixed = true;
+# Blur background of opaque windows with transparent frames as well.
+#blur-background-frame = true;
+# Predefined
+#blur-kern = "3x3box"
+#blur-kern = "3x3gaussian"
+#blur-kern = "5x5box"
+#blur-kern = "5x5gaussian"
+#blur-kern = "7x7box"
+#blur-kern = "7x7gaussian"
+#blur-kern = "9x9gaussian"
+#blur-kern = "11x11gaussian"
+# Strong-ish blur
+blur-kern = "7,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"
+# Medium blur
+#blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"
+# Weak blur
+#blur-kern = "3,3,1,1,1,1,1,1,1,1"
+
+
+#Window type settings
+# TODO
+#wintypes:
+#{
+ #tooltip = { fade = true; shadow = false; };
+ #menu = { shadow = false; };
+ #dropdown_menu = { shadow = false; };
+ #popup_menu = { shadow = false; };
+ #utility = { shadow = false; };
+#};
diff --git a/config/ncmpcpp/bindings b/config/ncmpcpp/bindings
new file mode 100644
index 0000000..ecdd09f
--- /dev/null
+++ b/config/ncmpcpp/bindings
@@ -0,0 +1,571 @@
+##########################################################
+## this is example bindings configuration file, copy it ##
+## to ~/.ncmpcpp/bindings and set up your preferences ##
+##########################################################
+
+### elena ###
+def_key "9"
+ show_help
+
+# Delete
+def_key "D"
+ delete_playlist_items
+def_key "D"
+ delete_browser_items
+def_key "D"
+ delete_stored_playlist
+
+# Scrolling
+def_key "k"
+ scroll_up
+def_key "K"
+ select_item
+ scroll_up
+def_key "j"
+ scroll_down
+def_key "J"
+ select_item
+ scroll_down
+
+# Search
+def_key "n"
+ next_found_item
+def_key "N"
+ previous_found_item
+
+### elena ###
+
+##### General rules #####
+##
+## 1) Because each action has runtime checks whether it's
+## ok to run it, a few actions can be bound to one key.
+## Actions will be bound in order given in configuration
+## file. When a key is pressed, first action in order
+## will test itself whether it's possible to run it. If
+## test succeeds, action is executed and other actions
+## bound to this key are ignored. If it doesn't, next
+## action in order tests itself etc.
+##
+## 2) It's possible to bind more that one action at once
+## to a key. It can be done using the following syntax:
+##
+## def_key "key"
+## action1
+## action2
+## ...
+##
+## This creates a chain of actions. When such chain is
+## executed, each action in chain is run until the end of
+## chain is reached or one of its actions fails to execute
+## due to its requirements not being met. If multiple actions
+## and/or chains are bound to the same key, they will be
+## consecutively run until one of them gets fully executed.
+##
+## 3) When ncmpcpp starts, bindings configuration file is
+## parsed and then ncmpcpp provides "missing pieces"
+## of default keybindings. If you want to disable some
+## bindings, there is a special action called 'dummy'
+## for that purpose. Eg. if you want to disable ability
+## to crop playlists, you need to put the following
+## into configuration file:
+##
+## def_key "C"
+## dummy
+##
+## After that ncmpcpp will not bind any default action
+## to this key.
+##
+## 4) To let you write simple macros, the following special
+## actions are provided:
+##
+## - push_character "character" - pushes given special
+## character into input queue, so it will be immediately
+## picked by ncmpcpp upon next call to readKey function.
+## Accepted values: mouse, up, down, page_up, page_down,
+## home, end, space, enter, insert, delete, left, right,
+## tab, ctrl-a, ctrl-b, ..., ctrl-z, ctrl-[, ctrl-\\,
+## ctrl-], ctrl-^, ctrl-_, f1, f2, ..., f12, backspace.
+## In addition, most of these names can be prefixed with
+## alt-/ctrl-/shift- to be recognized with the appropriate
+## modifier key(s).
+##
+## - push_characters "string" - pushes given string into
+## input queue.
+##
+## - require_runnable "action" - checks whether given action
+## is runnable and fails if it isn't. This is especially
+## useful when mixed with previous two functions. Consider
+## the following macro definition:
+##
+## def_key "key"
+## push_characters "custom_filter"
+## apply_filter
+##
+## If apply_filter can't be currently run, we end up with
+## sequence of characters in input queue which will be
+## treated just as we typed them. This may lead to unexpected
+## results (in this case 'c' will most likely clear current
+## playlist, 'u' will trigger database update, 's' will stop
+## playback etc.). To prevent such thing from happening, we
+## need to change above definition to this one:
+##
+## def_key "key"
+## require_runnable "apply_filter"
+## push_characters "custom_filter"
+## apply_filter
+##
+## Here, first we test whether apply_filter can be actually run
+## before we stuff characters into input queue, so if condition
+## is not met, whole chain is aborted and we're fine.
+##
+## - require_screen "screen" - checks whether given screen is
+## currently active. accepted values: browser, clock, help,
+## media_library, outputs, playlist, playlist_editor,
+## search_engine, tag_editor, visualizer, last_fm, lyrics,
+## selected_items_adder, server_info, song_info,
+## sort_playlist_dialog, tiny_tag_editor.
+##
+## - run_external_command "command" - runs given command using
+## system() function.
+##
+## 5) In addition to binding to a key, you can also bind actions
+## or chains of actions to a command. If it comes to commands,
+## syntax is very similar to defining keys. Here goes example
+## definition of a command:
+##
+## def_command "quit" [deferred]
+## stop
+## quit
+##
+## If you execute the above command (which can be done by
+## invoking action execute_command, typing 'quit' and pressing
+## enter), ncmpcpp will stop the player and then quit. Note the
+## presence of word 'deferred' enclosed in square brackets. It
+## tells ncmpcpp to wait for confirmation (ie. pressing enter)
+## after you typed quit. Instead of 'deferred', 'immediate'
+## could be used. Then ncmpcpp will not wait for confirmation
+## (enter) and will execute the command the moment it sees it.
+##
+## Note: while command chains are executed, internal environment
+## update (which includes current window refresh and mpd status
+## update) is not performed for performance reasons. However, it
+## may be desirable to do so in some situration. Therefore it's
+## possible to invoke by hand by performing 'update enviroment'
+## action.
+##
+## Note: There is a difference between:
+##
+## def_key "key"
+## action1
+##
+## def_key "key"
+## action2
+##
+## and
+##
+## def_key "key"
+## action1
+## action2
+##
+## First one binds two single actions to the same key whilst
+## second one defines a chain of actions. The behavior of
+## these two is different and is described in (1) and (2).
+##
+## Note: Function def_key accepts non-ascii characters.
+##
+##### List of unbound actions #####
+##
+## The following actions are not bound to any key/command:
+##
+## - set_volume
+##
+#
+#def_key "mouse"
+# mouse_event
+#
+#def_key "up"
+# scroll_up
+#
+#def_key "shift-up"
+# select_item
+# scroll_up
+#
+#def_key "down"
+# scroll_down
+#
+#def_key "shift-down"
+# select_item
+# scroll_down
+#
+#def_key "["
+# scroll_up_album
+#
+#def_key "]"
+# scroll_down_album
+#
+#def_key "{"
+# scroll_up_artist
+#
+#def_key "}"
+# scroll_down_artist
+#
+#def_key "page_up"
+# page_up
+#
+#def_key "page_down"
+# page_down
+#
+#def_key "home"
+# move_home
+#
+#def_key "end"
+# move_end
+#
+#def_key "insert"
+# select_item
+#
+#def_key "enter"
+# enter_directory
+#
+#def_key "enter"
+# toggle_output
+#
+#def_key "enter"
+# run_action
+#
+#def_key "enter"
+# play_item
+#
+#def_key "space"
+# add_item_to_playlist
+#
+#def_key "space"
+# toggle_lyrics_update_on_song_change
+#
+#def_key "space"
+# toggle_visualization_type
+#
+#def_key "delete"
+# delete_playlist_items
+#
+#def_key "delete"
+# delete_browser_items
+#
+#def_key "delete"
+# delete_stored_playlist
+#
+#def_key "right"
+# next_column
+#
+#def_key "right"
+# slave_screen
+#
+#def_key "right"
+# volume_up
+#
+#def_key "+"
+# volume_up
+#
+#def_key "left"
+# previous_column
+#
+#def_key "left"
+# master_screen
+#
+#def_key "left"
+# volume_down
+#
+#def_key "-"
+# volume_down
+#
+#def_key ":"
+# execute_command
+#
+#def_key "tab"
+# next_screen
+#
+#def_key "shift-tab"
+# previous_screen
+#
+#def_key "f1"
+# show_help
+#
+#def_key "1"
+# show_playlist
+#
+#def_key "2"
+# show_browser
+#
+#def_key "2"
+# change_browse_mode
+#
+#def_key "3"
+# show_search_engine
+#
+#def_key "3"
+# reset_search_engine
+#
+#def_key "4"
+# show_media_library
+#
+#def_key "4"
+# toggle_media_library_columns_mode
+#
+#def_key "5"
+# show_playlist_editor
+#
+#def_key "6"
+# show_tag_editor
+#
+#def_key "7"
+# show_outputs
+#
+#def_key "8"
+# show_visualizer
+#
+#def_key "="
+# show_clock
+#
+#def_key "@"
+# show_server_info
+#
+#def_key "s"
+# stop
+#
+#def_key "p"
+# pause
+#
+#def_key ">"
+# next
+#
+#def_key "<"
+# previous
+#
+#def_key "ctrl-h"
+# jump_to_parent_directory
+#
+#def_key "ctrl-h"
+# replay_song
+#
+#def_key "backspace"
+# jump_to_parent_directory
+#
+#def_key "backspace"
+# replay_song
+#
+#def_key "f"
+# seek_forward
+#
+#def_key "b"
+# seek_backward
+#
+#def_key "r"
+# toggle_repeat
+#
+#def_key "z"
+# toggle_random
+#
+#def_key "y"
+# save_tag_changes
+#
+#def_key "y"
+# start_searching
+#
+#def_key "y"
+# toggle_single
+#
+#def_key "R"
+# toggle_consume
+#
+#def_key "Y"
+# toggle_replay_gain_mode
+#
+#def_key "T"
+# toggle_add_mode
+#
+#def_key "|"
+# toggle_mouse
+#
+#def_key "#"
+# toggle_bitrate_visibility
+#
+#def_key "Z"
+# shuffle
+#
+#def_key "x"
+# toggle_crossfade
+#
+#def_key "X"
+# set_crossfade
+#
+#def_key "u"
+# update_database
+#
+#def_key "ctrl-s"
+# sort_playlist
+#
+#def_key "ctrl-s"
+# toggle_browser_sort_mode
+#
+#def_key "ctrl-s"
+# toggle_media_library_sort_mode
+#
+#def_key "ctrl-r"
+# reverse_playlist
+#
+#def_key "ctrl-_"
+# select_found_items
+#
+#def_key "/"
+# find
+#
+#def_key "/"
+# find_item_forward
+#
+#def_key "?"
+# find
+#
+#def_key "?"
+# find_item_backward
+#
+#def_key "."
+# next_found_item
+#
+#def_key ","
+# previous_found_item
+#
+#def_key "w"
+# toggle_find_mode
+#
+#def_key "e"
+# edit_song
+#
+#def_key "e"
+# edit_library_tag
+#
+#def_key "e"
+# edit_library_album
+#
+#def_key "e"
+# edit_directory_name
+#
+#def_key "e"
+# edit_playlist_name
+#
+#def_key "e"
+# edit_lyrics
+#
+#def_key "i"
+# show_song_info
+#
+#def_key "I"
+# show_artist_info
+#
+#def_key "g"
+# jump_to_position_in_song
+#
+#def_key "l"
+# show_lyrics
+#
+#def_key "ctrl-v"
+# select_range
+#
+#def_key "v"
+# reverse_selection
+#
+#def_key "V"
+# remove_selection
+#
+#def_key "B"
+# select_album
+#
+#def_key "a"
+# add_selected_items
+#
+#def_key "c"
+# clear_playlist
+#
+#def_key "c"
+# clear_main_playlist
+#
+#def_key "C"
+# crop_playlist
+#
+#def_key "C"
+# crop_main_playlist
+#
+#def_key "m"
+# move_sort_order_up
+#
+#def_key "m"
+# move_selected_items_up
+#
+#def_key "m"
+# set_visualizer_sample_multiplier
+#
+#def_key "n"
+# move_sort_order_down
+#
+#def_key "n"
+# move_selected_items_down
+#
+#def_key "M"
+# move_selected_items_to
+#
+#def_key "A"
+# add
+#
+#def_key "S"
+# save_playlist
+#
+#def_key "o"
+# jump_to_playing_song
+#
+#def_key "G"
+# jump_to_browser
+#
+#def_key "G"
+# jump_to_playlist_editor
+#
+#def_key "~"
+# jump_to_media_library
+#
+#def_key "E"
+# jump_to_tag_editor
+#
+#def_key "U"
+# toggle_playing_song_centering
+#
+#def_key "P"
+# toggle_display_mode
+#
+#def_key "\\"
+# toggle_interface
+#
+#def_key "!"
+# toggle_separators_between_albums
+#
+#def_key "L"
+# toggle_lyrics_fetcher
+#
+#def_key "F"
+# toggle_fetching_lyrics_in_background
+#
+#def_key "ctrl-l"
+# toggle_screen_lock
+#
+#def_key "`"
+# toggle_library_tag_type
+#
+#def_key "`"
+# refetch_lyrics
+#
+#def_key "`"
+# add_random_items
+#
+#def_key "ctrl-p"
+# set_selected_items_priority
+#
+#def_key "q"
+# quit
+#
diff --git a/config/ncmpcpp/config b/config/ncmpcpp/config
new file mode 100644
index 0000000..a539ec0
--- /dev/null
+++ b/config/ncmpcpp/config
@@ -0,0 +1,570 @@
+### Directories ###
+ncmpcpp_directory = ~/.config/ncmpcpp
+lyrics_directory = ~/.config/ncmpcpp/lyrics
+mpd_music_dir = ~/mus
+
+### Behaviour ###
+execute_on_song_change = "bash ~/.config/ncmpcpp/mpd-notification"
+message_delay_time = 1
+autocenter_mode = "yes"
+centered_cursor = "yes"
+ignore_leading_the = "yes"
+allow_for_physical_item_deletion = "no"
+
+### Visualizer ###
+visualizer_fifo_path = /tmp/mpd.fifo
+visualizer_output_name = "mpd_visualizer"
+visualizer_in_stereo = "yes"
+visualizer_sample_multiplier = 2
+visualizer_sync_interval = 30
+
+### Appearance ###
+colors_enabled = "yes"
+playlist_display_mode = "columns"
+
+# Window #
+song_window_title_format = "mpd » {%a - }{%t}|{%f}"
+statusbar_visibility = "yes"
+header_visibility = "no"
+titles_visibility = "no"
+
+# Progress bar #
+#progressbar_look = "⠒⠒⠐"
+#progressbar_look = "•••"
+#progressbar_look = "---"
+#progressbar_look = "▀▀ "
+#progressbar_look = "╼·"
+progressbar_look = "━━━"
+#progressbar_look = "━━─"
+#progressbar_look = "◾◾◽"
+#progressbar_look = "─╼─"
+progressbar_color = "black"
+progressbar_elapsed_color = "white"
+progressbar_boldness = "yes"
+# Song status #
+#now_playing_prefix = "$b"
+#now_playing_suffix = "$/b"
+song_status_format = "$b$6%t$/b {$8by} $b$6%a$8$/b"
+#song_status_format = " $2%a $4⟫$3⟫ $7%t $4⟫$3⟫ $5%b "
+#song_status_format = "$8%t $9• $2%a $9•{ $5%b $9• }$7%y$9"
+# Song list #
+song_list_format = "{$8%a ⠂ }{%t}$R{%l}"
+#song_list_format = "{ $8%a $1» $2}{%t} $R$1%b"
+# Playlist #
+#song_columns_list_format = "$L(9)[white]{l} (20)[red]{a} (30)[green]{b}$R(20)[cyan]{t}"
+#song_columns_list_format = "(25)[white]{a} (25)[blue]{brE} (47)[white]{t|f} (6f)[blue]{l}"
+#song_columns_list_format = "(15)[white]{lr} (1)[black]{} (40)[red]{a} (40)[green]{t}"
+#song_columns_list_format = "(40)[magenta]{ar} (40)[green]{t}"
+song_columns_list_format = "(50)[magenta]{ar} (50)[green]{t}"
+# Colors #
+main_window_highlight_color = "green"
+main_window_color = "blue"
+#state_line_color = "yellow"
+#state_flags_color = "green"
+color1 = "white"
+color2 = "red"
+
+##### connection settings #####
+#
+#mpd_host = localhost
+#
+#mpd_port = 6600
+#
+#mpd_connection_timeout = 5
+#
+## Needed for tag editor and file operations to work.
+##
+#mpd_music_dir = ~/music
+#
+#mpd_crossfade_time = 5
+#
+##### music visualizer #####
+##
+## Note: In order to make music visualizer work you'll
+## need to use mpd fifo output, whose format parameter
+## has to be set to 44100:16:1 for mono visualization
+## or 44100:16:2 for stereo visualization. Example
+## configuration (it has to be put into mpd.conf):
+##
+## audio_output {
+## type "fifo"
+## name "Visualizer feed"
+## path "/tmp/mpd.fifo"
+## format "44100:16:2"
+## }
+##
+#
+#visualizer_fifo_path = /tmp/mpd.fifo
+#
+##
+## Note: Below parameter is needed for ncmpcpp
+## to determine which output provides data for
+## visualizer and thus allow syncing between
+## visualization and sound as currently there
+## are some problems with it.
+##
+#
+#visualizer_output_name = Visualizer feed
+#
+##
+## If you set format to 44100:16:2, make it 'yes'.
+##
+#visualizer_in_stereo = yes
+#
+##
+## Multiply received samples by given value. Very
+## useful for proper visualization of quiet music.
+##
+#visualizer_sample_multiplier = 1
+#
+##
+## Note: Below parameter defines how often ncmpcpp
+## has to "synchronize" visualizer and audio outputs.
+## 30 seconds is optimal value, but if you experience
+## synchronization problems, set it to lower value.
+## Keep in mind that sane values start with >=10.
+##
+#
+#visualizer_sync_interval = 30
+#
+##
+## Note: To enable spectrum frequency visualization
+## you need to compile ncmpcpp with fftw3 support.
+##
+#
+## Available values: spectrum, wave, wave_filled, ellipse.
+##
+#visualizer_type = wave
+#
+#visualizer_look = ●▮
+#
+#visualizer_color = blue, cyan, green, yellow, magenta, red
+#
+## Alternative subset of 256 colors for terminals that support it.
+##
+#visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161
+#
+##### system encoding #####
+##
+## ncmpcpp should detect your charset encoding
+## but if it failed to do so, you can specify
+## charset encoding you are using here.
+##
+## Note: You can see whether your ncmpcpp build
+## supports charset detection by checking output
+## of `ncmpcpp --version`.
+##
+## Note: Since MPD uses UTF-8 by default, setting
+## this option makes sense only if your encoding
+## is different.
+##
+#
+#system_encoding = ""
+#
+##### delays #####
+#
+## Time of inactivity (in seconds) after playlist
+## highlighting will be disabled (0 = always on).
+##
+#playlist_disable_highlight_delay = 5
+#
+## Defines how long messages are supposed to be visible.
+##
+#message_delay_time = 5
+#
+##### song format #####
+##
+## For a song format you can use:
+##
+## %l - length
+## %f - filename
+## %D - directory
+## %a - artist
+## %A - album artist
+## %t - title
+## %b - album
+## %y - date
+## %n - track number (01/12 -> 01)
+## %N - full track info (01/12 -> 01/12)
+## %g - genre
+## %c - composer
+## %p - performer
+## %d - disc
+## %C - comment
+## %P - priority
+## $R - begin right alignment
+##
+## If you want to make sure that a part of the format is displayed
+## only when certain tags are present, you can archieve it by
+## grouping them with brackets, e.g. '{%a - %t}' will be evaluated
+## to 'ARTIST - TITLE' if both tags are present or '' otherwise.
+## It is also possible to define a list of alternatives by providing
+## several groups and separating them with '|', e.g. '{%t}|{%f}'
+## will be evaluated to 'TITLE' or 'FILENAME' if the former is not
+## present.
+##
+## Note: If you want to set limit on maximal length of a tag, just
+## put the appropriate number between % and character that defines
+## tag type, e.g. to make album take max. 20 terminal cells, use '%20b'.
+##
+## In addition, formats support markers used for text attributes.
+## They are followed by character '$'. After that you can put:
+##
+## - 0 - default window color (discards all other colors)
+## - 1 - black
+## - 2 - red
+## - 3 - green
+## - 4 - yellow
+## - 5 - blue
+## - 6 - magenta
+## - 7 - cyan
+## - 8 - white
+## - 9 - end of current color
+## - b - bold text
+## - u - underline text
+## - r - reverse colors
+## - a - use alternative character set
+##
+## If you don't want to use a non-color attribute anymore, just put it
+## again, but this time insert character '/' between '$' and attribute
+## character, e.g. {$b%t$/b}|{$r%f$/r} will display bolded title tag
+## or filename with reversed colors.
+##
+## If you want to use 256 colors and/or background colors in formats
+## (the naming scheme is described below in section about color
+## definitions), it can be done with the syntax $(COLOR), e.g. to set
+## the artist tag to one of the non-standard colors and make it have
+## yellow background, you need to write $(197_yellow)%a$(end). Note
+## that for standard colors this is interchangable with attributes
+## listed above.
+##
+## Note: colors can be nested.
+##
+#
+#song_list_format = {%a - }{%t}|{$8%f$9}$R{$3(%l)$9}
+#
+#song_status_format = {{%a{ "%b"{ (%y)}} - }{%t}}|{%f}
+#
+#song_library_format = {%n - }{%t}|{%f}
+#
+#
+#alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b
+#
+#alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D}
+#
+#now_playing_prefix = $b
+#
+#now_playing_suffix = $/b
+#
+#browser_playlist_prefix = "$2playlist$9 "
+#
+#selected_item_prefix = $6
+#
+#selected_item_suffix = $9
+#
+#modified_item_prefix = $3> $9
+#
+##
+## Note: attributes are not supported for the following variables.
+##
+#song_window_title_format = {%a - }{%t}|{%f}
+##
+## Note: Below variables are used for sorting songs in browser.
+## The sort mode determines how songs are sorted, and can be used
+## in combination with a sort format to specify a custom sorting format.
+## Available values for browser_sort_mode are "name", "mtime", "format"
+## and "noop".
+##
+#
+#browser_sort_mode = name
+#
+#browser_sort_format = {%a - }{%t}|{%f} {(%l)}
+#
+##### columns settings #####
+##
+## syntax of song columns list format is "column column etc."
+##
+## - syntax for each column is:
+##
+## (width of the column)[color of the column]{displayed tag}
+##
+## Note: Width is by default in %, if you want a column to
+## have fixed size, add 'f' after the value, e.g. (10)[white]{a}
+## will be the column that take 10% of screen (so the real width
+## will depend on actual screen size), whereas (10f)[white]{a}
+## will take 10 terminal cells, no matter how wide the screen is.
+##
+## - color is optional (if you want the default one,
+## leave the field empty).
+##
+## Note: You can give a column additional attributes by putting appropriate
+## character after displayed tag character. Available attributes are:
+##
+## - r - column will be right aligned
+## - E - if tag is empty, empty tag marker won't be displayed
+##
+## You can also:
+##
+## - give a column custom name by putting it after attributes,
+## separated with character ':', e.g. {lr:Length} gives you
+## right aligned column of lengths named "Length".
+##
+## - define sequence of tags, that have to be displayed in case
+## predecessor is empty in a way similar to the one in classic
+## song format, i.e. using '|' character, e.g. {a|c|p:Owner}
+## creates column named "Owner" that tries to display artist
+## tag and then composer and performer if previous ones are
+## not available.
+##
+#
+#song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l}
+#
+##### various settings #####
+#
+##
+## Note: Custom command that will be executed each
+## time song changes. Useful for notifications etc.
+##
+#execute_on_song_change = ""
+#
+#playlist_show_mpd_host = no
+#
+#playlist_show_remaining_time = no
+#
+#playlist_shorten_total_times = no
+#
+#playlist_separate_albums = no
+#
+##
+## Note: Possible display modes: classic, columns.
+##
+#playlist_display_mode = columns
+#
+#browser_display_mode = classic
+#
+#search_engine_display_mode = classic
+#
+#playlist_editor_display_mode = classic
+#
+#discard_colors_if_item_is_selected = yes
+#
+#incremental_seeking = yes
+#
+#seek_time = 1
+#
+#volume_change_step = 2
+#
+#autocenter_mode = no
+#
+#centered_cursor = no
+#
+##
+## Note: You can specify third character which will
+## be used to build 'empty' part of progressbar.
+##
+#progressbar_look = =>
+#
+#progressbar_boldness = yes
+#
+## Available values: database, playlist.
+##
+#default_place_to_search_in = database
+#
+## Available values: classic, alternative.
+##
+#user_interface = classic
+#
+#data_fetching_delay = yes
+#
+## Available values: artist, album_artist, date, genre, composer, performer.
+##
+#media_library_primary_tag = artist
+#
+## Available values: wrapped, normal.
+##
+#default_find_mode = wrapped
+#
+#default_tag_editor_pattern = %n - %t
+#
+#header_visibility = yes
+#
+#statusbar_visibility = yes
+#
+#titles_visibility = yes
+#
+#header_text_scrolling = yes
+#
+#cyclic_scrolling = no
+#
+#lines_scrolled = 2
+#
+#follow_now_playing_lyrics = no
+#
+#fetch_lyrics_for_current_song_in_background = no
+#
+#store_lyrics_in_song_dir = no
+#
+#generate_win32_compatible_filenames = yes
+#
+#allow_for_physical_item_deletion = no
+#
+##
+## Note: If you set this variable, ncmpcpp will try to
+## get info from last.fm in language you set and if it
+## fails, it will fall back to english. Otherwise it will
+## use english the first time.
+##
+## Note: Language has to be expressed as an ISO 639 alpha-2 code.
+##
+#lastfm_preferred_language = en
+#
+#show_hidden_files_in_local_browser = no
+#
+##
+## How shall screen switcher work?
+##
+## - "previous" - switch between the current and previous screen.
+## - "screen1,...,screenN" - switch between given sequence of screens.
+##
+## Screens available for use: help, playlist, browser, search_engine,
+## media_library, playlist_editor, tag_editor, outputs, visualizer, clock.
+##
+#screen_switcher_mode = playlist, browser
+#
+##
+## Note: You can define startup screen
+## by choosing screen from the list above.
+##
+#startup_screen = playlist
+#
+##
+## Note: You can define startup slave screen
+## by choosing screen from the list above or
+## an empty value for no slave screen.
+##
+#startup_slave_screen = ""
+#
+#startup_slave_screen_focus = no
+#
+##
+## Default width of locked screen (in %).
+## Acceptable values are from 20 to 80.
+##
+#
+#locked_screen_width_part = 50
+#
+#ask_for_locked_screen_width_part = yes
+#
+#jump_to_now_playing_song_at_start = yes
+#
+#ask_before_clearing_playlists = yes
+#
+#clock_display_seconds = no
+#
+#display_volume_level = yes
+#
+#display_bitrate = no
+#
+#display_remaining_time = no
+#
+## Available values: none, basic, extended, perl.
+##
+#regular_expressions = perl
+#
+##
+## Note: If below is enabled, ncmpcpp will ignore leading
+## "The" word while sorting items in browser, tags in
+## media library, etc.
+##
+#ignore_leading_the = no
+#
+#block_search_constraints_change_if_items_found = yes
+#
+#mouse_support = yes
+#
+#mouse_list_scroll_whole_page = yes
+#
+#empty_tag_marker =
+#
+#tags_separator = " | "
+#
+#tag_editor_extended_numeration = no
+#
+#media_library_sort_by_mtime = no
+#
+#enable_window_title = yes
+#
+##
+## Note: You can choose default search mode for search
+## engine. Available modes are:
+##
+## - 1 - use mpd built-in searching (no regexes, pattern matching)
+## - 2 - use ncmpcpp searching (pattern matching with support for regexes,
+## but if your mpd is on a remote machine, downloading big database
+## to process it can take a while
+## - 3 - match only exact values (this mode uses mpd function for searching
+## in database and local one for searching in current playlist)
+##
+#
+#search_engine_default_search_mode = 1
+#
+#external_editor = nano
+#
+## Note: set to yes if external editor is a console application.
+##
+#use_console_editor = yes
+#
+##### colors definitions #####
+##
+## It is possible to set a background color by setting a color
+## value "_", e.g. red_black will set
+## foregound color to red and background color to black.
+##
+## In addition, for terminals that support 256 colors it
+## is possible to set one of them by using a number in range
+## [1, 256] instead of color name, e.g. numerical value
+## corresponding to red_black is 2_1. To find out if the
+## terminal supports 256 colors, run ncmpcpp and check out
+## the bottom of the help screen for list of available colors
+## and their numerical values.
+##
+## Note: due to technical limitations of ncurses, if 256 colors
+## are used, it is possible to either use only the colors with
+## default background color, or all pairs from 1_1 up to 254_127,
+## depending on the ncurses version used.
+##
+#
+#colors_enabled = yes
+#
+#empty_tag_color = cyan
+#
+#header_window_color = default
+#
+#volume_color = default
+#
+#state_line_color = default
+#
+#state_flags_color = default
+#
+#main_window_color = blue
+#
+#color1 = white
+#
+#color2 = green
+#
+#main_window_highlight_color = blue
+#
+#progressbar_color = black
+#
+#progressbar_elapsed_color = green
+#
+#statusbar_color = default
+#
+#alternative_ui_separator_color = black
+#
+#active_column_color = red
+#
+#window_border_color = green
+#
+#active_window_border = red
+#
diff --git a/config/ncmpcpp/mpd-notification b/config/ncmpcpp/mpd-notification
new file mode 100755
index 0000000..deb6627
--- /dev/null
+++ b/config/ncmpcpp/mpd-notification
@@ -0,0 +1,3 @@
+#!/bin/bash
+SONG="$(mpc current)"
+notify-send "Now playing:" "$SONG"
diff --git a/firefox/MaterialFox/chrome/alert.css b/firefox/MaterialFox/chrome/alert.css
new file mode 100644
index 0000000..508872a
--- /dev/null
+++ b/firefox/MaterialFox/chrome/alert.css
@@ -0,0 +1,100 @@
+@keyframes scale-in {
+ 0% {
+ transform: scaleY(0);
+ }
+ 100% {
+ transform: scaleY(1);
+ }
+}
+
+.browserContainer {
+ position: relative;
+}
+
+tabmodalprompt {
+ animation: 0.2s scale-in;
+ transform-origin: top center;
+ background-color: transparent !important;
+}
+
+
+.mainContainer{
+ position: relative !important;
+ transform: translateY(20px);
+ width: 450px !important;
+ height: 175px !important;
+ border-radius: 10px !important;
+ border: none !important;
+ box-shadow: 0px 0px 6px 0 rgba(0,0,0,0.5) !important;
+}
+
+
+
+
+tabmodalprompt > spacer[flex='1'] {
+ display: none;
+}
+
+
+.buttonContainer{
+ background-color: transparent !important;
+ border: none !important;
+}
+
+
+.buttonContainer > button{
+ height: 33px !important;
+ width: 65px !important;
+ -moz-appearance: none !important;
+ box-shadow: 0px 0px 1px 0px rgba(0,0,0,0.75) !important;
+ border-radius: 5px !important;
+ transition: background-color 0.3s linear, box-shadow 0.1s linear !important;
+}
+
+
+.buttonContainer > button[label="Leave Page"],
+.buttonContainer > button[label="OK"],
+.buttonContainer > button[label="Resend"]{
+ background-color: rgb(67,133,242) !important;
+ color: white !important;
+ box-shadow: none !important;
+}
+
+.buttonContainer > button[label="Leave Page"] .button-text,
+.buttonContainer > button[label="OK"] .button-text,
+.buttonContainer > button[label="Resend"] .button-text{
+ color: white !important;
+}
+
+
+.buttonContainer > button:hover{
+ box-shadow: 0px 0px 3px 0px rgba(0,0,0,0.75) !important;
+}
+
+
+.buttonContainer > button[label="OK"]:hover{
+ background-color: rgb(77, 100, 255) !important;
+}
+
+.topContainer vbox {
+ text-align: left !important;
+}
+
+
+.buttonContainer > button:not([label="OK"]){
+ color: gray !important;
+}
+
+.checkbox-label-box, .checkbox-check{
+ display: none !important;
+}
+
+
+.topContainer textbox{
+ -moz-appearance: none !important;
+ border-radius: 3px !important;
+ border: 1px solid #B0B0B0 !important;
+ height: 35px !important;
+
+}
+
diff --git a/firefox/MaterialFox/chrome/context.css b/firefox/MaterialFox/chrome/context.css
new file mode 100644
index 0000000..66723c2
--- /dev/null
+++ b/firefox/MaterialFox/chrome/context.css
@@ -0,0 +1,43 @@
+/* List context items from https://redd.it/8j9t5n */
+
+#context-back image,
+#context-forward image,
+#context-reload image,
+#context-stop image,
+#context-bookmarkpage image {
+display: none !important;
+}
+
+#context-navigation .menu-iconic-left {
+-moz-margin-start: 15px !important;
+/*adjust this for your OS/theme*/
+}
+
+#context-back:after,
+#context-forward:after,
+#context-reload:after,
+#context-stop:after,
+#context-bookmarkpage:after {
+content: attr(aria-label) !important;
+}
+
+#context-navigation {
+-moz-box-orient: vertical !important;
+}
+
+#context-navigation>.menuitem-iconic {
+-moz-box-pack: start !important;
+}
+
+/* End list context items */
+
+
+
+menupopup {
+ -moz-appearance: none !important;;
+ background-color: var(--menu-bg) !important;
+}
+
+#context-navigation{
+ background-color: var(--menu-bg) !important;
+}
diff --git a/firefox/MaterialFox/chrome/custom.css b/firefox/MaterialFox/chrome/custom.css
new file mode 100644
index 0000000..9c0196b
--- /dev/null
+++ b/firefox/MaterialFox/chrome/custom.css
@@ -0,0 +1,179 @@
+/* Global font */
+/** {*/
+ /*font-size: 12pt !important;*/
+ /*font-family: sans-serif !important;*/
+ /*font-weight: normal !important;*/
+/*}*/
+
+#navigator-toolbox:after,
+.scrollbutton-down,
+.scrollbutton-up {
+ display: none !important;
+}
+
+#toolbar-menubar {
+ height: 30px !important;
+ background-color: var(--secondary) !important;
+}
+
+/*#main-menubar * {*/
+ /*color: var(--menu-fg) !important;*/
+ /*background: var(--menu-bg) !important;*/
+/*}*/
+
+#urlbar {
+ border-radius: 20px !important;
+ height: 28px !important;
+ border: none !important;
+ background-color: var(--urlbar-bg) !important;
+ color: var(--urlbar-fg) !important;
+ box-shadow: none !important;
+}
+
+/* No 'i' icon in urlbar */
+#identity-icon {
+ display: none !important;
+}
+/* No lock icon in urlbar */
+#identity-box {
+ display: none !important;
+}
+
+/* Center URL */
+#urlbar .urlbar-input-box {
+ text-align: center;
+ margin-bottom: 1px;
+}
+
+/* Remove Three Dots */
+#pageActionButton {
+ display: none !important;
+}
+
+#nav-bar {
+ background-image: none !important;
+ background-color: var(--main) !important;
+ height: 37px !important;
+ box-shadow: none !important;
+}
+
+/*#navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar):not(#nav-bar) {*/
+ /*background-image: none;*/
+/*}*/
+
+#main-window[sizemode='normal'] #TabsToolbar {
+ height: 54px !important;
+}
+
+#main-window[sizemode='normal'] #titlebar-buttonbox {
+ height: 29px !important;
+ margin-bottom: 14px !important;
+}
+
+#main-window[sizemode='normal'] .private-browsing-indicator {
+ margin-top: 0px !important;
+}
+
+#PersonalToolbar {
+ height: 30px !important;
+ background-color: var(--main) !important;
+}
+
+.toolbarbutton-badge-stack,
+toolbarbutton:not(.bookmark-item):not(.titlebar-button):not(.subviewbutton)
+ > .toolbarbutton-icon,
+.tab-close-button,
+.bookmark-item {
+ background: unset !important;
+ border-radius: 20px !important;
+ transition: background 0.25s ease-in-out !important;
+}
+
+toolbarbutton:hover .toolbarbutton-badge-stack,
+toolbarbutton:not([disabled]):not(.bookmark-item):not(.titlebar-button):not(.subviewbutton):hover
+ > .toolbarbutton-icon,
+.bookmark-item:hover {
+ background: var(--hover) !important; /*darken on hover*/
+}
+
+.browserContainer {
+ background-color: var(--main) !important;
+}
+
+
+
+#reload-button > .toolbarbutton-icon{
+ border-radius: 8px !important;
+}
+
+#PanelUI-menu-button {
+ list-style-image: url('chrome://browser/skin/page-action.svg') !important;
+ transform: rotate(90deg);
+}
+
+
+/*#downloads-button[attention="success"] #downloads-indicator-icon {*/
+ /*display: visible !important;*/
+/*}*/
+
+/* During a download, force display of progress bar */
+#downloads-button[attention="success"] #downloads-indicator-progress-area
+{
+ display: -moz-box !important;
+ visibility: visible !important;
+}
+
+/* After something have successfully completed downloading, set the color of the download icon*/
+#downloads-button[attention="success"] > #downloads-indicator-anchor > #downloads-indicator-icon,
+#downloads-button[attention="success"] > #downloads-indicator-anchor > #downloads-indicator-progress-outer
+{
+ fill: var(--download-button-finished) !important;
+}
+
+/* Sets the color of the animated arrow that appears when a download is starting*/
+#downloads-button[notification="start"] > #downloads-indicator-anchor > #downloads-indicator-icon,
+#downloads-notification-anchor[notification="start"] > #downloads-indicator-notification {
+ fill: var(--download-button-progress) !important;
+}
+
+/*Set the color of the download icon as something is downloading*/
+#downloads-button[progress] > #downloads-indicator-anchor > #downloads-indicator-icon,
+#downloads-button[progress] > #downloads-indicator-anchor > #downloads-indicator-progress-outer {
+ fill: var(--download-button-progress) !important;
+}
+
+/* Set the color for the progress bar as something is downloading */
+#downloads-button > #downloads-indicator-anchor > #downloads-indicator-progress-outer > #downloads-indicator-progress-inner {
+ fill: var(--download-button-progress) !important;
+}
+
+/* The default color of the download button */
+#downloads-button,
+#downloads-button[indicator="true"]:not([attention="success"]) #downloads-indicator-icon
+{
+ display: -moz-box !important;
+ /*visibility: visible !important;*/
+ fill: var(--download-button-default) !important;
+}
+
+/*#downloads-button[attention="success"] > #downloads-indicator-anchor > #downloads-indicator-icon,*/
+/*#downloads-button[attention="success"] > #downloads-indicator-anchor > #downloads-indicator-progress-outer {*/
+ /*-moz-context-properties: fill, fill-opacity;*/
+ /*fill: var(--toolbarbutton-icon-fill-attention);*/
+ /*fill-opacity: 1;*/
+/*}*/
+
+/*No zoom button*/
+#urlbar-zoom-button {display:none!important}
+
+/*Tab loading animation*/
+.tab-throbber::before {
+ fill: var(--tab-loading-dots) !important;
+ opacity: 1 !important;
+}
+
+
+/*No "saved to library" animation*/
+#confirmation-hint {
+ display: none !important;
+}
diff --git a/firefox/MaterialFox/chrome/find.css b/firefox/MaterialFox/chrome/find.css
new file mode 100644
index 0000000..906a418
--- /dev/null
+++ b/firefox/MaterialFox/chrome/find.css
@@ -0,0 +1,77 @@
+/* Based off of https://redd.it/7fxtdm*/
+
+@keyframes scale-out {
+ 0% {
+ transform: scaleY(1);
+ }
+ 100% {
+ transform: scaleY(0);
+ }
+}
+
+@keyframes scale-in {
+ 0% {
+ transform: scaleY(0);
+ }
+ 100% {
+ transform: scaleY(1);
+ }
+}
+
+.browserContainer {
+ position: relative;
+}
+
+findbar {
+ animation: 0.2s scale-in;
+ transform-origin: top center;
+ padding: 4px 6px 6px 6px;
+ height: 55px !important;
+ line-height: 30px !important;
+ background: var(--findbar-bg) !important;
+ color: var(--findbar-fg) !important;
+ position: absolute;
+ top: 5px;
+ right: 35px;
+ border-radius: 3px !important;
+ box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.75);
+ min-width: 300px !important;
+}
+
+findbar[hidden='true'] {
+ animation: 0.2s scale-out;
+}
+
+.findbar-closebutton .toolbarbutton-icon {
+ transform: scale(1.35);
+ padding: 2px !important;
+}
+.findbar-closebutton {
+ background: none !important;
+}
+
+.close-icon:hover {
+ fill-opacity: 0 !important;
+}
+
+.findbar-container > hbox > * {
+ border: none !important;
+ background: var(--findbar-bg) !important;
+ color: var(--findbar-fg) !important;
+}
+
+.findbar-container > hbox > toolbarbutton{
+ outline: 0 !important;
+}
+
+.findbar-container > hbox > toolbarbutton:hover:active {
+ box-shadow: none !important;
+}
+
+.findbar-container > hbox > toolbarbutton > .toolbarbutton-icon {
+ padding: 5px !important;
+}
+
+.findbar-find-status {
+ display: none !important;
+}
diff --git a/firefox/MaterialFox/chrome/tabs.css b/firefox/MaterialFox/chrome/tabs.css
new file mode 100644
index 0000000..9b34f1d
--- /dev/null
+++ b/firefox/MaterialFox/chrome/tabs.css
@@ -0,0 +1,150 @@
+.tab-line,
+.titlebar-placeholder[type='pre-tabs'],
+#alltabs-button {
+ display: none !important;
+}
+
+.tabbrowser-tab[beforehovered]:after,
+.tabbrowser-tab:hover:after,
+.tabbrowser-tab[beforeselected-visible]:after,
+last-visible-tab,
+.tabbrowser-tab[last-visible-tab]:after,
+.tabbrowser-tab[selected]:after,
+.tabbrowser-tab[selected]:before {
+ border-color: var(--secondary) !important;
+}
+
+.tabbrowser-tab:after {
+ transform: scaleY(0.6) !important;
+}
+
+#main-window[sizemode='normal'] #new-tab-button {
+ margin-top: 0px !important;
+}
+
+#main-window[sizemode='normal'] #tabbrowser-tabs {
+ margin-top: 0px !important;
+}
+
+#new-tab-button {
+ margin: 0px -2px 0 8px !important;
+}
+
+/* Background behind tabs */
+#TabsToolbar
+{
+ -moz-appearance: none !important;
+ background: var(--secondary) !important;
+ color: inherit !important;
+ padding-inline-end: 2px !important;
+}
+
+.tabbrowser-tab[selected='true'] .tab-background {
+ background: var(--main) !important;
+ color: var(--selected-fg) !important;
+ min-height: 36px !important;
+ z-index: 100 !important;
+}
+
+#tabbrowser-tabs {
+ min-height: 36px !important;
+ max-height: 36px !important;
+ margin-bottom: 0 !important;
+ padding-bottom: 0 !important;
+ background: var(--secondary) !important;
+ color: var(--unselected-fg) !important;
+}
+
+.arrowscrollbox-scrollbox {
+ padding: 0 8px 0 8px !important;
+ overflow: visible !important;
+}
+
+/* Tab curves */
+.tabbrowser-tab .tab-background {
+ height: 36px !important;
+ border-radius: 8px 8px 0 0 !important;
+ background: var(--secondary) !important;
+ position: relative !important;
+ -moz-transition: 10.25s filter ease-in-out;
+}
+
+.tab-background:before,
+.tab-background:after {
+ content: '';
+ position: absolute;
+ height: 8px;
+ width: 20px;
+ bottom: 0;
+ z-index: 50 !important;
+}
+
+.tab-background:after {
+ right: -20px;
+ border-radius: 0 0 0 8px;
+ box-shadow: -8px 0 0 0 var(--secondary);
+}
+
+.tab-background:before {
+ left: -20px;
+ border-radius: 0 0 8px 0;
+ box-shadow: 8px 0 0 0 var(--secondary);
+}
+
+.tab-background[selected]:after {
+ box-shadow: -8px 0 0 0 var(--main);
+}
+
+.tab-background[selected]:before {
+ box-shadow: 8px 0 0 0 var(--main);
+}
+
+.tabbrowser-tab:not([selected]):hover .tab-background {
+ filter: brightness(1.10) !important;
+ /*background: var(--hover) !important;*/
+ z-index: 100 !important;
+}
+
+.tabbrowser-tab:not(:hover):not([selected]) .tab-close-button {
+ display: none !important;
+}
+/* no close button */
+.tabbrowser-tab .tab-close-button {
+ display: none !important;
+}
+
+/*no scrolling*/
+
+.tabbrowser-tab {
+ min-width: initial !important;
+}
+.tab-content {
+ overflow: hidden !important;
+}
+
+/* No flash on load */
+
+.tab-loading-burst {
+ display: none !important;
+}
+
+/* greyscale icons in toolbar, not tabs*/
+toolbar#PersonalToolbar > toolbaritem#personal-bookmarks toolbarbutton.bookmark-item .toolbarbutton-icon {
+ filter: grayscale(100%);
+}
+
+/* favicons */
+.tab-icon-image {
+ /*Disable*/
+ display: none !important;
+
+ /*filter: grayscale(100%);*/
+ /*filter: contrast(10%);*/
+ /*filter: brightness(76%);*/
+
+ /*Add backdrop*/
+ /*With big enough padding, the favicon can be hidden*/
+ /*background-color: var(--favicon-backdrop) !important;*/
+ /*border-radius: 25%;*/
+ /*padding: 8px;*/
+}
diff --git a/firefox/MaterialFox/chrome/theme/manta.css b/firefox/MaterialFox/chrome/theme/manta.css
new file mode 100644
index 0000000..0728558
--- /dev/null
+++ b/firefox/MaterialFox/chrome/theme/manta.css
@@ -0,0 +1,42 @@
+/* Manta Theme */
+:root {
+ /* .Xresources colors */
+ --color0: #1E2541;
+ --color1: #F0719B;
+ --color2: #5AF7B0;
+ --color3: #FFA56B;
+ --color4: #57C7FF;
+ --color5: #C792EA;
+ --color6: #89DDFF;
+ --color7: #EEFFFF;
+ --color8: #354274;
+ --color9: #F02E6E;
+ --color10: #2CE592;
+ --color11: #FF8537;
+ --color12: #1DA0E2;
+ --color13: #A742EA;
+ --color14: #47BAE8;
+ --color15: #DEE6E7;
+
+ --color16: #2A335A;
+
+ --main: var(--color0); /*selected tab and rest of navbar*/
+ --secondary: var(--color16); /* top background and all non-selected tabs*/
+ /*--secondary: hsla(0, 0%, 0%, 0%);*/
+ --selected-fg: var(--color7);
+ --unselected-fg: var(--color7);
+ --search: var(--color4);
+ --tab-loading-dots: var(--color7);
+ --findbar-bg: var(--color8);
+ --findbar-fg: var(--color7);
+ --urlbar-bg: var(--main);
+ --urlbar-fg: var(--color7);
+ --menu-bg: var(--color7);
+ --menu-fg: var(--color0);
+ --favicon-backdrop: var(--color4);
+ /*TODO: Download button needs work*/
+ --download-button-default: var(--color0);
+ --download-button-progress: var(--color3);
+ --download-button-finished: var(--color4);
+ --hover: hsla(0, 0%, 80%, 0.2);
+}
diff --git a/firefox/MaterialFox/chrome/userChrome.css b/firefox/MaterialFox/chrome/userChrome.css
new file mode 100644
index 0000000..cc46068
--- /dev/null
+++ b/firefox/MaterialFox/chrome/userChrome.css
@@ -0,0 +1,8 @@
+@import url('theme/manta.css');
+@import url('alert.css');
+@import url('context.css');
+@import url('find.css');
+@import url('custom.css');
+@import url('tabs.css');
+
+@namespace url('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul');
diff --git a/firefox/MaterialFox/chrome/userContent.css b/firefox/MaterialFox/chrome/userContent.css
new file mode 100644
index 0000000..3c3749d
--- /dev/null
+++ b/firefox/MaterialFox/chrome/userContent.css
@@ -0,0 +1,21 @@
+/*@-moz-document url("about:newtab") { */
+ /*body {*/
+ /*background-color: #08070C !important;*/
+ /*}*/
+/*}*/
+
+/*@-moz-document url(about:blank) {*/
+ /*html,body { background: #08070C !important; }*/
+/*}*/
+
+
+/*fix dark text on dark inputbox*/
+input:not(.urlbar-input):not(.textbox-input):not(.form-control):not([type='checkbox']):not([type='radio']), textarea, select {
+ -moz-appearance: none !important;
+ background-color: white;
+ color: black;
+}
+
+#downloads-indicator-counter {
+ color: white;
+}