dotfile overhaul, reorganized directories, updated almost everything, and only kept the most essential

Former-commit-id: 4295c806ec
Former-commit-id: c87f8e56cd2677dbb5a2a15e90f879a9fa1a1a6b
Former-commit-id: 1ad787023efcecb57853b9a5103dff461192e56d
Former-commit-id: 595bf6d1621414a7b6e7d8e9acb374ce52687596
This commit is contained in:
elena 2018-09-28 02:54:28 +03:00
parent e660daf771
commit 199af78429
625 changed files with 27566 additions and 0 deletions

51
awesome/autostart.sh Executable file
View file

@ -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

240
awesome/bars.lua Normal file
View file

@ -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)

91
awesome/helpers.lua Normal file
View file

@ -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 "<span foreground='" .. fg .."'>" .. txt .. "</span>"
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

727
awesome/keys.lua Normal file
View file

@ -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

View file

@ -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 = "<span foreground='" .. color .."'>" .. txt .. "</span>"
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

View file

@ -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 =
"<span foreground='" .. visible_clients_color .."'>"
.. visible_clients_text .. "</span>" .. vpad .. #clients .. " ·~"
.. "<span foreground='" .. hidden_clients_color .."'>"
.. hidden_clients_text .. "</span>" .. 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

684
awesome/rc.lua Normal file
View file

@ -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")
-- }}}

View file

@ -0,0 +1,11 @@
<svg viewBox="0 0 100 100">
<rect
style="fill:#F0719B; fill-opacity:1; stroke:#1E2541; stroke-width:0; stroke-opacity:1"
width="50"
height="50"
x="25"
y="25"
ry="25"
rx="25"
/>
</svg>

After

Width:  |  Height:  |  Size: 248 B

View file

@ -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

View file

@ -0,0 +1,11 @@
<svg viewBox="0 0 100 100">
<rect
style="fill:#F0719B; fill-opacity:1; stroke:#1E2541; stroke-width:0; stroke-opacity:1"
width="50"
height="50"
x="25"
y="25"
ry="25"
rx="25"
/>
</svg>

After

Width:  |  Height:  |  Size: 248 B

View file

@ -0,0 +1,11 @@
<svg viewBox="0 0 100 100">
<rect
style="fill:#F02E6E; fill-opacity:1; stroke:#1E2541; stroke-width:0; stroke-opacity:1"
width="50"
height="50"
x="25"
y="25"
ry="25"
rx="25"
/>
</svg>

After

Width:  |  Height:  |  Size: 248 B

View file

@ -0,0 +1,11 @@
<svg viewBox="0 0 100 100">
<rect
style="fill:#DEE6E7; fill-opacity:1; stroke:#1E2541; stroke-width:0; stroke-opacity:1"
width="50"
height="50"
x="25"
y="25"
ry="25"
rx="25"
/>
</svg>

After

Width:  |  Height:  |  Size: 248 B

View file

@ -0,0 +1 @@
./button_focus.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_normal.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_focus.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_focus.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_normal.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_normal.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_focus.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_focus.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_normal.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_normal.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_focus.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_normal.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_focus.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_focus.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_normal.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_normal.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_focus.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_focus.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_normal.svg

View file

@ -0,0 +1 @@
./button_hover.svg

View file

@ -0,0 +1 @@
./button_normal.svg

View file

@ -0,0 +1 @@
./button_hover.svg

137
awesome/titlebars.lua Normal file
View file

@ -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

24
bin/colorballs Executable file
View file

@ -0,0 +1,24 @@
#!/bin/bash
# Script that shows terminal colors
# -- elenapan @ github
f=3 b=4
for j in f b; do
for i in {0..7}; do
printf -v $j$i %b "\e[${!j}${i}m"
done
done
d=$'\e[1m'
t=$'\e[0m'
v=$'\e[7m'
# Symbol
s=
# s=
cat << EOF
$f0$s$d$s$t $f1$s$d$s$t $f2$s$d$s$t $f3$s$d$s$t
$f4$s$d$s$t $f5$s$d$s$t $f6$s$d$s$t $f7$s$d$s$t
EOF

24
bin/colorblocks Executable file
View file

@ -0,0 +1,24 @@
#!/bin/bash
# Show the terminal colourscheme as blocks
# Inspired by u/dkeg
# Cheers! Addy
f=3 b=4
for j in f b; do
for i in {0..7}; do
printf -v $j$i %b "\e[${!j}${i}m"
done
done
d=$'\e[1m'
t=$'\e[0m'
v=$'\e[7m'
cat << EOF
$f1██████$d██$t $f2██████$d██$t $f3██████$d██$t $f4██████$d██$t $f5██████$d██$t $f6██████$d██$t
$f1██████$d██$t $f2██████$d██$t $f3██████$d██$t $f4██████$d██$t $f5██████$d██$t $f6██████$d██$t
$f1██████$d██$t $f2██████$d██$t $f3██████$d██$t $f4██████$d██$t $f5██████$d██$t $f6██████$d██$t
$ft██████$d$f7██$t $ft██████$d$f7██$t $ft██████$d$f7██$t $ft██████$d$f7██$t $ft██████$d$f7██$t $ft██████$d$f7██$t
EOF

24
bin/colorpanes Executable file
View file

@ -0,0 +1,24 @@
#!/bin/bash
# Author: GekkoP
# Source: http://linuxbbq.org/bbs/viewtopic.php?f=4&t=1656#p33189
f=3 b=4
for j in f b; do
for i in {0..7}; do
printf -v $j$i %b "\e[${!j}${i}m"
done
done
d=$'\e[1m'
t=$'\e[0m'
v=$'\e[7m'
cat << EOF
$f0████$d▄$t $f1████$d▄$t $f2████$d▄$t $f3████$d▄$t $f4████$d▄$t $f5████$d▄$t $f6████$d▄$t $f7████$d▄$t
$f0████$d█$t $f1████$d█$t $f2████$d█$t $f3████$d█$t $f4████$d█$t $f5████$d█$t $f6████$d█$t $f7████$d█$t
$f0████$d█$t $f1████$d█$t $f2████$d█$t $f3████$d█$t $f4████$d█$t $f5████$d█$t $f6████$d█$t $f7████$d█$t
$d$f0 ▀▀▀▀ $d$f1 ▀▀▀▀ $f2▀▀▀▀ $f3▀▀▀▀ $f4▀▀▀▀ $f5▀▀▀▀ $f6▀▀▀▀ $f7▀▀▀▀$t
EOF

44
bin/screenshot.sh Executable file
View file

@ -0,0 +1,44 @@
#!/bin/bash
# Screenshot wrapper
# Uses maim (which uses slop)
# "Friendship ended with scrot. Now maim is my best friend."
SCREENSHOTS_DIR=~/pix/Screenshots
TIMESTAMP="$(date +%Y.%m.%d-%H.%M.%S)"
#TIMESTAMP="$(date +%Y.%m.%d--%s)"
FILENAME=$SCREENSHOTS_DIR/$TIMESTAMP.screenshot.png
PHOTO_ICON_PATH=~/.icons/oomox-only_icons/categories/scalable/applications-photography.svg
# -u option hides cursor
# -m option changes the compression level
# -m 3 takes the shot faster but the file size is slightly bigger
if [[ "$1" = "-s" ]]; then
# Area/window selection.
notify-send 'Select area to capture.' --urgency low -i $PHOTO_ICON_PATH
maim -u -m 3 -s $FILENAME
if [[ "$?" = "0" ]]; then
notify-send "Screenshot taken." --urgency low -i $PHOTO_ICON_PATH
fi
elif [[ "$1" = "-c" ]]; then
notify-send 'Select area to copy to clipboard.' --urgency low -i $PHOTO_ICON_PATH
# Copy selection to clipboard
#maim -u -m 3 -s | xclip -selection clipboard -t image/png
maim -u -m 3 -s /tmp/maim_clipboard
if [[ "$?" = "0" ]]; then
xclip -selection clipboard -t image/png /tmp/maim_clipboard
notify-send "Copied selection to clipboard." --urgency low -i $PHOTO_ICON_PATH
rm /tmp/maim_clipboard
fi
elif [[ "$1" = "-b" ]]; then
# Browse with feh
cd $SCREENSHOTS_DIR ; feh $(ls -t) &
elif [[ "$1" = "-e" ]]; then
# Edit last screenshot with GIMP
cd $SCREENSHOTS_DIR ; gimp $(ls -t | head -n1) & notify-send 'Opening last screenshot with GIMP' --urgency low -i ~/.icons/oomox-only_icons/categories/scalable/applications-painting.svg
else
# Full screenshot
maim -u -m 3 $FILENAME
notify-send "Screenshot taken." --urgency low -i $PHOTO_ICON_PATH
fi

22
bin/volume-control.sh Executable file
View file

@ -0,0 +1,22 @@
#!/bin/bash
# Control volume
# Requires pulseaudio
# --------------------------
# Steps for raising/lowering volume
STEP=5
BIG_STEP=25
if [[ "$1" = "up" ]]; then
pactl set-sink-mute 0 0 && pactl set-sink-volume @DEFAULT_SINK@ +$STEP%
elif [[ "$1" = "UP" ]]; then
pactl set-sink-mute 0 0 && pactl set-sink-volume @DEFAULT_SINK@ +$BIG_STEP%
elif [[ "$1" = "down" ]]; then
pactl set-sink-mute 0 0 && pactl set-sink-volume @DEFAULT_SINK@ -$STEP%
elif [[ "$1" = "DOWN" ]]; then
pactl set-sink-mute 0 0 && pactl set-sink-volume @DEFAULT_SINK@ -$BIG_STEP%
elif [[ "$1" = "toggle" ]]; then
pactl set-sink-mute 0 toggle
else
echo "No argument."
fi

22
bin/xvars Executable file
View file

@ -0,0 +1,22 @@
#!/bin/bash
# Grab ~/.Xresources colors
# Use like so:
# source xvars
XBG="$(xrdb -query | grep -m 1 background: | awk '{print $2}')"
XFG="$(xrdb -query | grep -m 1 foreground: | awk '{print $2}')"
X0="$(xrdb -query | grep -m 1 color0: | awk '{print $2}')"
X1="$(xrdb -query | grep -m 1 color1: | awk '{print $2}')"
X2="$(xrdb -query | grep -m 1 color2: | awk '{print $2}')"
X3="$(xrdb -query | grep -m 1 color3: | awk '{print $2}')"
X4="$(xrdb -query | grep -m 1 color4: | awk '{print $2}')"
X5="$(xrdb -query | grep -m 1 color5: | awk '{print $2}')"
X6="$(xrdb -query | grep -m 1 color6: | awk '{print $2}')"
X7="$(xrdb -query | grep -m 1 color7: | awk '{print $2}')"
X8="$(xrdb -query | grep -m 1 color8: | awk '{print $2}')"
X9="$(xrdb -query | grep -m 1 color9: | awk '{print $2}')"
X10="$(xrdb -query | grep -m 1 color10: | awk '{print $2}')"
X11="$(xrdb -query | grep -m 1 color11: | awk '{print $2}')"
X12="$(xrdb -query | grep -m 1 color12: | awk '{print $2}')"
X13="$(xrdb -query | grep -m 1 color13: | awk '{print $2}')"
X14="$(xrdb -query | grep -m 1 color14: | awk '{print $2}')"
X15="$(xrdb -query | grep -m 1 color15: | awk '{print $2}')"

339
gtk/manta/COPYING Normal file
View file

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path d="m10 3v10l-5-5z" fill="#1E2541" opacity="0.54"/>
</svg>

After

Width:  |  Height:  |  Size: 150 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path d="m6 3v10l5-5z" fill="#1E2541" opacity="0.54"/>
</svg>

After

Width:  |  Height:  |  Size: 148 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" fill="#1E2541" opacity="0.54"/>
</svg>

After

Width:  |  Height:  |  Size: 226 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" fill="#57C7FF"/>
</svg>

After

Width:  |  Height:  |  Size: 252 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M 17,8.41 15.59,7 12,10.59 8.41,7 7,8.41 10.59,12 7,15.59 8.41,17 12,13.41 15.59,17 17,15.59 13.41,12 Z" fill="#1E2541" opacity="0.54"/>
</svg>

After

Width:  |  Height:  |  Size: 239 B

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<circle cx="12" cy="12" r="12" fill="#EEFFFF" opacity="0.3"/>
<circle cx="12" cy="12" r="4" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 204 B

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="36" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="36" cy="6" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 190 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="36" cy="66" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 142 B

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="32" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="40" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="36" cy="6" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 239 B

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="32" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="40" cy="66" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 191 B

View file

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="28" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="36" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="44" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="36" cy="6" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 288 B

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="28" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="36" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="44" cy="66" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 240 B

View file

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="24" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="32" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="40" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="48" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="36" cy="6" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 337 B

View file

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="24" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="32" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="40" cy="66" r="2" fill="#EEFFFF"/>
<circle cx="48" cy="66" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 289 B

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="6" cy="36" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="36" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 190 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="6" cy="36" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 141 B

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="6" cy="32" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="40" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="36" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 238 B

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="6" cy="32" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="40" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 189 B

View file

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="6" cy="28" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="36" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="44" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="36" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 286 B

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="6" cy="28" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="36" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="44" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 237 B

View file

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="6" cy="24" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="32" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="40" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="48" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="36" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 334 B

View file

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="6" cy="24" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="32" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="40" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="48" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 285 B

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="66" cy="36" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="36" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 190 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="66" cy="36" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 142 B

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="66" cy="32" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="40" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="36" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 239 B

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="66" cy="32" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="40" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 191 B

View file

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="66" cy="28" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="36" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="44" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="36" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 288 B

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="66" cy="28" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="36" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="44" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 240 B

View file

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="66" cy="24" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="32" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="40" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="48" r="2" fill="#EEFFFF"/>
<circle cx="6" cy="36" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 337 B

View file

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="66" cy="24" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="32" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="40" r="2" fill="#EEFFFF"/>
<circle cx="66" cy="48" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 289 B

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="36" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="36" cy="66" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 190 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="36" cy="6" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 141 B

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="32" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="40" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="36" cy="66" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 238 B

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="32" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="40" cy="6" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 189 B

View file

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="28" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="36" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="44" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="36" cy="66" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 286 B

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="28" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="36" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="44" cy="6" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 237 B

View file

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="24" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="32" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="40" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="48" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="36" cy="66" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 334 B

View file

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="144" viewBox="0 0 72 72">
<circle cx="24" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="32" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="40" cy="6" r="2" fill="#EEFFFF"/>
<circle cx="48" cy="6" r="2" fill="#EEFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 285 B

Some files were not shown because too many files have changed in this diff Show more