Initial Commit

pull/1/head
Adriel Sand 2021-04-26 11:20:41 +03:00
commit 5a99cb9e82
125 changed files with 6148 additions and 0 deletions

1
battery-widget 160000

@ -0,0 +1 @@
Subproject commit 25b7e94a34ed854697d61e3cbb0a3ebd9745dbd4

View File

@ -0,0 +1,62 @@
local filesystem = require('gears.filesystem')
local beautiful = require('beautiful')
-- Thanks to jo148 on github for making rofi dpi aware!
local with_dpi = require('beautiful').xresources.apply_dpi
local get_dpi = require('beautiful').xresources.get_dpi
local rofi_command = 'env /usr/bin/rofi -show drun -display-drun -run-command "/bin/bash -c -i \'shopt -s expand_aliases; {cmd}\'"'
return {
-- List of apps to start by default on some actions
default = {
terminal = 'env alacritty',
rofi = rofi_command,
lock = 'i3lock -c 000000',
quake = 'alacritty',
screenshot = 'flameshot full -p ~/Pictures',
region_screenshot = 'flameshot gui -p ~/Pictures',
delayed_screenshot = 'flameshot gui -p ~/Pictures',
-- Editing these also edits the default program
-- associated with each tag/workspace
browser = 'env brave',
editor = 'code', -- gui text editor
social = 'telegram-desktop',
game = rofi_command,
files = 'nautilus',
music = 'clementine',
video = 'vlc',
appmng = 'alacritty -e htop',
vmapp = 'virtualbox',
power_command = 'i3lock-fancy',
audiomng = 'pavucontrol',
obs = 'obs',
},
-- List of apps to start once on start-up
run_on_start_up = {
-- Add applications that need to be killed between reloads
-- to avoid multipled instances, inside the autostart script
'~/.config/awesome/configuration/autostart', -- Spawn "dirty" apps that can linger between sessions
--'compton',
'picom --config ' .. filesystem.get_configuration_dir() .. '/configuration/picom.conf',
'nitrogen --restore',
'nm-applet --indicator', -- wifi
'xfce4-power-manager', -- Power manager
'pamac-tray',
-- 'ibus-daemon --xim --daemonize', -- Ibus daemon for keyboard
'scream-start', -- scream audio sink
-- 'flameshot', -- screenshots
-- 'numlockx on', -- enable numlock
'/usr/lib/xfce-polkit/xfce-polkit & eval $(gnome-keyring-daemon -s --components=pkcs11,secrets,ssh,gpg)', -- credential manager
'blueman-tray', -- bluetooth tray
--'copyq',
'dropbox',
'megasync',
'~/.config/awesome/configuration/awspawn', -- Spawn "dirty" apps that can linger between sessions
-- '/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1 &")',
'keepassxc',
'kdeconnect-indicator',
'planner',
}
}

View File

@ -0,0 +1,53 @@
#!/bin/bash
## This configuration file is meant for applications that
# still run in the background when a reload is triggered
# for awesome, this script just kills the running instance
# and starts a new one.
# Only add applications/scripts without parameters here
# (if you want to apply parameters then use a script file!)
# List of applications to run
# the script $HOME/.config/awesomestart
# is intended to be a copy of this file
# to allow out of tree autostart programs
APPS=(
# keepassxc
# kdeconnect-indicator
radeon-profile
$HOME/.config/awesomestart
)
# Some applications start child applications that need to be killed on reload
KILL=(
synergyc
nextcloud
)
# Some applications need to be started without GUI
SILENT=(
gnome-clocks
)
#Kill the polkit
killall xfce-polkit
# First kill lingering apps
for app in "${APPS[@]}"
do
kill -9 $(pidof $app)
done
for app in "${KILL[@]}"
do
kill -9 $(pidof $app)
done
# Start new instances
for app in "${APPS[@]}"
do
env $app ${@:2} &
done
# Run silent apps
Xvfb :99 &
for silentapp in "${SILENT[@]}"
do
DISPLAY=:99 $silentapp &
done

View File

@ -0,0 +1,13 @@
local awful = require('awful')
local modkey = require('configuration.keys.mod').modKey
return awful.util.table.join(awful.button({}, 1, function(c)
_G.client.focus = c
c:raise()
end), awful.button({modkey}, 1, awful.mouse.client.move), awful.button({modkey, 'Shift'}, 1, awful.mouse.client.resize),
awful.button({modkey}, 4, function()
awful.layout.inc(1)
end), awful.button({modkey}, 5, function()
awful.layout.inc(-1)
end))

View File

@ -0,0 +1 @@
require('configuration.client.rules')

View File

@ -0,0 +1,27 @@
local awful = require('awful')
require('awful.autofocus')
local modkey = require('configuration.keys.mod').modKey
local altkey = require('configuration.keys.mod').altKey
local clientKeys =
awful.util.table.join(
awful.key(
{modkey},
'f',
function(c)
c.fullscreen = not c.fullscreen
c:raise()
end,
{description = 'toggle fullscreen', group = 'client'}
),
awful.key(
{modkey},
'q',
function(c)
c:kill()
end,
{description = 'close', group = 'client'}
)
)
return clientKeys

View File

@ -0,0 +1,74 @@
local awful = require('awful')
local gears = require('gears')
local client_keys = require('configuration.client.keys')
local client_buttons = require('configuration.client.buttons')
-- Rules
awful.rules.rules = {{
rule = {},
properties = {
focus = awful.client.focus.filter,
raise = true,
keys = client_keys,
buttons = client_buttons,
screen = awful.screen.preferred,
placement = awful.placement.no_offscreen,
floating = false,
maximized = false,
above = false,
below = false,
ontop = false,
sticky = false,
maximized_horizontal = false,
maximized_vertical = false
}
}, {
rule_any = {
type = {'dialog'},
class = {'Wicd-client.py', 'calendar.google.com'}
},
properties = {
placement = awful.placement.centered,
ontop = true,
floating = true,
drawBackdrop = true,
shape = function()
return function(cr, w, h)
gears.shape.rounded_rect(cr, w, h, 8)
end
end,
skip_decoration = true
}
}, {
rule_any = {
type = {'modal'}
},
properties = {
titlebars_enabled = true,
floating = true,
above = true,
skip_decoration = true,
placement = awful.placement.centered
}
}, {
rule_any = {
type = {'utility'}
},
properties = {
titlebars_enabled = false,
floating = true,
skip_decoration = true,
placement = awful.placement.centered
}
}, {
rule_any = {
type = {'splash'},
name = {'Discord Updater'}
},
properties = {
floating = true,
above = true,
skip_decoration = true,
placement = awful.placement.centered
}
}}

View File

@ -0,0 +1,4 @@
return {
keys = require('configuration.keys'),
apps = require('configuration.apps')
}

View File

@ -0,0 +1,274 @@
local awful = require('awful')
require('awful.autofocus')
local beautiful = require('beautiful')
local hotkeys_popup = require('awful.hotkeys_popup').widget
local modkey = require('configuration.keys.mod').modKey
local altkey = require('configuration.keys.mod').altKey
local apps = require('configuration.apps')
function poweroff_command()
awful.spawn.with_shell('poweroff')
awful.keygrabber.stop(_G.exit_screen_grabber)
end
-- Key bindings
local globalKeys = awful.util.table.join( -- Hotkeys
awful.key({modkey}, 'F1', hotkeys_popup.show_help,
{description = 'show help', group = 'awesome'}), -- Tag browsing
awful.key({modkey}, 'w', awful.tag.viewprev,
{description = 'view previous', group = 'tag'}),
awful.key({modkey}, 's', awful.tag.viewnext,
{description = 'view next', group = 'tag'}),
awful.key({altkey, 'Control'}, 'Left', awful.tag.viewprev,
{description = 'view previous', group = 'tag'}),
awful.key({altkey, 'Control'}, 'Right', awful.tag.viewnext,
{description = 'view next', group = 'tag'}),
awful.key({modkey}, 'Escape', awful.tag.history.restore,
{description = 'go back', group = 'tag'}), -- Default client focus
awful.key({modkey}, 'r', function() _G.awesome.spawn(apps.default.rofi) end,
{description = 'show rofi menu', group = 'awesome'}),
awful.key({modkey}, 'd', function()
local flag = false
for _, c in ipairs(mouse.screen.selected_tag:clients()) do
if c.minimized == true then flag = true end
c.minimized = true
end
for _, c in ipairs(mouse.screen.selected_tag:clients()) do
if flag == true then c.minimized = false end
end
end, {description = 'minimize all clients', group = 'awesome'}),
awful.key({modkey}, 'u', awful.client.urgent.jumpto,
{description = 'jump to urgent client', group = 'client'}),
awful.key({modkey}, 'Tab', function()
-- awful.client.focus.history.previous()
awful.client.focus.byidx(1)
if _G.client.focus then _G.client.focus:raise() end
end, {description = 'Switch to next window', group = 'client'}),
awful.key({modkey, 'Shift'}, 'Tab', function()
-- awful.client.focus.history.previous()
awful.client.focus.byidx(-1)
if _G.client.focus then _G.client.focus:raise() end
end, {description = 'Switch to previous window', group = 'client'}),
-- Programms
awful.key({modkey}, 'l', function() awful.spawn(apps.default.lock) end,
{description = 'Lock the screen', group = 'awesome'}),
awful.key({modkey, 'Shift'}, 'z', function()
awful.util.spawn_with_shell(apps.default.delayed_screenshot)
end, {
description = 'Mark an area and screenshot it (clipboard)',
group = 'screenshots (clipboard)'
}),
--[[ awful.key({modkey}, 'z', function()
awful.util.spawn_with_shell(apps.default.screenshot)
end, {
description = 'Take a screenshot of your active monitor and copy it to clipboard',
group = 'screenshots (clipboard)'
}), awful.key({'Control'}, 'Print', function()
awful.util.spawn_with_shell(apps.default.region_screenshot)
end, {
description = 'Mark an area and screenshot it to your clipboard',
group = 'screenshots (clipboard)'
}),]]
awful.key({modkey}, 'c', function() awful.util.spawn(apps.default.editor) end,
{description = 'open a text/code editor', group = 'launcher'}),
awful.key({modkey}, 'b', function() awful.util.spawn(apps.default.browser) end,
{description = 'open a browser', group = 'launcher'}),
-- Open private browser/brave
--[[awful.key({modkey}, 'b',
function() awful.util.spawn_with_shell('firefox') end,
{description = 'Open Firefox', group = 'launcher'}),
--]]
awful.key({modkey, 'Shift'}, 'e', function()
awful.util.spawn(apps.default.files)
end, {
description = 'open a file explorer',
group = 'launcher'
}),
awful.key({modkey, 'Shift'}, 'a', function()
awful.util.spawn(apps.default.audiomng)
end, {
description = 'open a pavucontrol window',
group = 'launcher'
}),
awful.key({modkey, 'Shift'}, 'h', function()
awful.util.spawn(apps.default.appmng)
end, {
description = 'open a process manager',
group = 'launcher'
}),
awful.key({modkey, 'Shift'}, 's', function()
awful.util.spawn(apps.default.obs)
end, {
description = 'open obs',
group = 'launcher'
}),
-- Standard program
awful.key({modkey}, 'x',
function() awful.util.spawn_with_shell(apps.default.terminal) end,
{description = 'open a terminal', group = 'launcher'}),
awful.key({modkey, 'Control'}, 'r', _G.awesome.restart,
{description = 'reload awesome', group = 'awesome'}),
awful.key({modkey, 'Control'}, 'q', _G.awesome.quit,
{description = 'quit awesome', group = 'awesome'}),
awful.key({modkey}, 'm', function() _G.dashboard_show() end,
{description = 'toggle main menu', group = 'awesome'}),
awful.key({modkey, 'Shift'}, 'p', function() _G.exit_screen_show() end,
{description = 'end session menu', group = 'awesome'}),
awful.key({altkey, 'Shift'}, 'Right', function() awful.tag.incmwfact(0.05) end,
{description = 'increase master width factor', group = 'layout'}),
awful.key({altkey, 'Shift'}, 'Left', function() awful.tag.incmwfact(-0.05) end,
{description = 'decrease master width factor', group = 'layout'}),
awful.key({altkey, 'Shift'}, 'Down', function() awful.client.incwfact(0.05) end,
{description = 'decrease master height factor', group = 'layout'}),
awful.key({altkey, 'Shift'}, 'Up', function() awful.client.incwfact(-0.05) end,
{description = 'increase master height factor', group = 'layout'}),
awful.key({modkey, 'Shift'}, 'Left',
function() awful.tag.incnmaster(1, nil, true) end, {
description = 'increase the number of master clients',
group = 'layout'
}), awful.key({modkey, 'Shift'}, 'Right',
function() awful.tag.incnmaster(-1, nil, true) end, {
description = 'decrease the number of master clients',
group = 'layout'
}), awful.key({modkey, 'Control'}, 'Left',
function() awful.tag.incncol(1, nil, true) end, {
description = 'increase the number of columns',
group = 'layout'
}), awful.key({modkey, 'Control'}, 'Right',
function() awful.tag.incncol(-1, nil, true) end, {
description = 'decrease the number of columns',
group = 'layout'
}), awful.key({modkey}, 'space', function() awful.layout.inc(1) end,
{description = 'select next', group = 'layout'}),
awful.key({modkey, 'Shift'}, 'space', function() awful.layout.inc(-1) end,
{description = 'select previous', group = 'layout'}),
awful.key({modkey, 'Control'}, 'n', function()
local c = awful.client.restore()
-- Focus restored client
if c then
_G.client.focus = c
c:raise()
end
end, {description = 'restore minimized', group = 'client'}),
-- Dropdown application
awful.key({modkey}, 'z', function() _G.toggle_quake() end,
{description = 'dropdown application', group = 'launcher'}),
-- Widgets popups
--[[awful.key(
{altkey},
'h',
function()
if beautiful.fs then
beautiful.fs.show(7)
end
end,
{description = 'show filesystem', group = 'widgets'}
),
awful.key(
{altkey},
'w',
function()
if beautiful.weather then
beautiful.weather.show(7)
end
end,
{description = 'show weather', group = 'widgets'}
),--]]
-- Brightness
awful.key({}, 'XF86MonBrightnessUp',
function() awful.spawn('xbacklight -inc 10') end,
{description = '+10%', group = 'hotkeys'}),
awful.key({}, 'XF86MonBrightnessDown',
function() awful.spawn('xbacklight -dec 10') end,
{description = '-10%', group = 'hotkeys'}), -- ALSA volume control
awful.key({}, 'XF86AudioRaiseVolume', function()
awful.spawn.easy_async('amixer -D pulse set Master 5%+', function()
_G.update_volume()
end)
end, {description = 'volume up', group = 'hotkeys'}),
awful.key({}, 'XF86AudioLowerVolume', function()
awful.spawn.easy_async('amixer -D pulse set Master 5%-', function()
_G.update_volume()
end)
end, {description = 'volume down', group = 'hotkeys'}),
awful.key({}, 'XF86AudioMute', function()
awful.spawn('amixer -D pulse set Master 1+ toggle')
_G.update_volume()
end, {description = 'toggle mute', group = 'hotkeys'}),
awful.key({}, 'XF86AudioNext', function()
--
end, {description = 'toggle mute', group = 'hotkeys'}),
awful.key({}, 'XF86PowerDown', function()
--
end, {description = 'toggle mute', group = 'hotkeys'}),
awful.key({}, 'XF86PowerOff', function() _G.exit_screen_show() end,
{description = 'toggle mute', group = 'hotkeys'}),
-- Screen management
awful.key({modkey}, 'o', awful.client.movetoscreen,
{description = 'move window to next screen', group = 'client'}),
-- Open default program for tag
awful.key({modkey}, 't', function()
awful.spawn(awful.screen.focused().selected_tag.defaultApp, {
tag = _G.mouse.screen.selected_tag,
placement = awful.placement.bottom_right
})
end, {description = 'open default program for tag/workspace', group = 'tag'}),
-- Custom hotkeys
-- vfio integration
awful.key({'Control', altkey}, 'space',
function() awful.util.spawn_with_shell('vm-attach attach') end),
-- Emoji typing
-- setup info at https://gist.github.com/HikariKnight/8562837d28dec3674dba027c7892e6a5
awful.key({modkey}, 'e',
function() awful.util.spawn_with_shell('emoji-toggle') end, {
description = 'Toggle the ibus unimoji engine for writing emojis',
group = 'hotkeys'
}))
-- Bind all key numbers to tags.
-- Be careful: we use keycodes to make it works on any keyboard layout.
-- This should map on the top row of your keyboard, usually 1 to 9.
for i = 1, 9 do
-- Hack to only show tags 1 and 9 in the shortcut window (mod+s)
local descr_view, descr_toggle, descr_move, descr_toggle_focus
if i == 1 or i == 9 then
descr_view = {description = 'view tag #', group = 'tag'}
descr_toggle = {description = 'toggle tag #', group = 'tag'}
descr_move = {
description = 'move focused client to tag #',
group = 'tag'
}
descr_toggle_focus = {
description = 'toggle focused client on tag #',
group = 'tag'
}
end
globalKeys = awful.util.table.join(globalKeys, -- View tag only.
awful.key({modkey}, '#' .. i + 9, function()
local screen = awful.screen.focused()
local tag = screen.tags[i]
if tag then tag:view_only() end
end, descr_view), -- Toggle tag display.
awful.key({modkey, 'Control'}, '#' .. i + 9, function()
local screen = awful.screen.focused()
local tag = screen.tags[i]
if tag then awful.tag.viewtoggle(tag) end
end, descr_toggle), -- Move client to tag.
awful.key({modkey, 'Shift'}, '#' .. i + 9, function()
if _G.client.focus then
local tag = _G.client.focus.screen.tags[i]
if tag then _G.client.focus:move_to_tag(tag) end
end
end, descr_move), -- Toggle tag on focused client.
awful.key({modkey, 'Control', 'Shift'}, '#' .. i + 9, function()
if _G.client.focus then
local tag = _G.client.focus.screen.tags[i]
if tag then _G.client.focus:toggle_tag(tag) end
end
end, descr_toggle_focus))
end
return globalKeys

View File

@ -0,0 +1,381 @@
require('awful.autofocus')
local awful = require('awful')
local beautiful = require('beautiful')
local hotkeys_popup = require('awful.hotkeys_popup').widget
local modkey = require('configuration.keys.mod').modKey
local altkey = require('configuration.keys.mod').altKey
local apps = require('configuration.apps')
local dpi = require('beautiful').xresources.apply_dpi
local theme = require('theme')
-- Key bindings
local globalKeys = awful.util.table.join( -- Hotkeys
awful.key({modkey}, 'h', hotkeys_popup.show_help, {
description = 'show help',
group = 'awesome'
}), awful.key({modkey}, 'F1', hotkeys_popup.show_help, {
description = 'show help',
group = 'awesome'
}), -- Tag browsing
awful.key({modkey}, 'Left', function()
awful.tag.viewprev()
_G._splash_to_current_tag()
end, {
description = 'go to previous workspace',
group = 'tag'
}), awful.key({modkey}, 'Right', function()
awful.tag.viewnext()
_G._splash_to_current_tag()
end, {
description = 'go to next workspace',
group = 'tag'
}), awful.key({modkey}, 'Escape', function()
awful.tag.history.restore()
_G._splash_to_current_tag()
end, {
description = 'go back',
group = 'tag'
}), -- Default client focus
awful.key({modkey}, 'd', function()
awful.client.focus.byidx(1)
end, {
description = 'focus next by index',
group = 'client'
}), awful.key({modkey}, 'a', function()
awful.client.focus.byidx(-1)
end, {
description = 'focus previous by index',
group = 'client'
}), awful.key({modkey}, 'r', function()
_G.awesome.spawn(apps.default.rofi)
end, {
description = 'show rofi menu',
group = 'awesome'
}), awful.key({modkey}, 'u', function()
awful.client.urgent.jumpto()
_G._splash_to_current_tag()
end, {
description = 'jump to urgent client',
group = 'client'
}), awful.key({altkey}, 'Tab', function()
awful.client.focus.byidx(1)
if _G.client.focus then
_G.client.focus:raise()
end
end, {
description = 'switch to next window',
group = 'client'
}), awful.key({modkey}, 'm', function()
focus = not _G.client.focus
if not focus then
_G.client.focus.minimized = true
else
for _, c in ipairs(mouse.screen.selected_tag:clients()) do
c.minimized = false
end
end
end, {
description = 'minimize window in focus / unminimize all',
group = 'client'
}), awful.key({altkey, 'Shift'}, 'Tab', function()
awful.client.focus.byidx(-1)
if _G.client.focus then
_G.client.focus:raise()
end
end, {
description = 'switch to previous window',
group = 'client'
}), awful.key({modkey}, 'l', function()
awful.spawn(apps.default.lock)
end, {
description = 'lock the screen',
group = 'awesome'
}), awful.key({'Control', 'Shift'}, 'Print', function()
awful.util.spawn_with_shell(apps.default.delayed_screenshot)
end, {
description = 'mark an area and screenshot it (clipboard)',
group = 'screenshots (clipboard)'
}), awful.key({altkey}, 'Print', function()
awful.util.spawn_with_shell(apps.default.screenshot)
end, {
description = 'take a screenshot of your active monitor and copy it to clipboard',
group = 'screenshots (clipboard)'
}), awful.key({'Control'}, 'Print', function()
awful.util.spawn_with_shell(apps.default.region_screenshot)
end, {
description = 'mark an area and screenshot it to your clipboard',
group = 'screenshots (clipboard)'
}), awful.key({modkey}, 'c', function()
awful.util.spawn(apps.default.editor)
end, {
description = 'open a text/code editor',
group = 'launcher'
}), awful.key({modkey}, 'b', function()
awful.util.spawn(apps.default.browser)
end, {
description = 'open a browser',
group = 'launcher'
}), awful.key({modkey}, 'Return', function()
awful.util.spawn_with_shell(apps.default.terminal)
end, {
description = 'open a terminal',
group = 'launcher'
}), awful.key({modkey, 'Control'}, 'r', _G.awesome.restart, {
description = 'reload awesome',
group = 'awesome'
}), awful.key({modkey, 'Control'}, 'q', _G.awesome.quit, {
description = 'quit awesome',
group = 'awesome'
}), awful.key({modkey, 'Shift'}, 'g', function(t)
t = t or awful.screen.focused().selected_tag
local current_gap = t.gap
local new_gap
if current_gap == 0 then
new_gap = beautiful.gaps
else
new_gap = 0
end
t.gap = new_gap
end, {
description = 'toggle gaps',
group = 'awesome'
}), awful.key({modkey}, 'p', function()
awful.util.spawn_with_shell(apps.default.power_command)
end, {
description = 'end session menu',
group = 'awesome'
}), awful.key({altkey, 'Shift'}, 'Right', function()
awful.tag.incmwfact(0.05)
end, {
description = 'increase master width factor',
group = 'layout'
}), awful.key({altkey, 'Shift'}, 'Left', function()
awful.tag.incmwfact(-0.05)
end, {
description = 'decrease master width factor',
group = 'layout'
}), awful.key({altkey, 'Shift'}, 'Down', function()
awful.client.incwfact(0.05)
end, {
description = 'decrease master height factor',
group = 'layout'
}), awful.key({altkey, 'Shift'}, 'Up', function()
awful.client.incwfact(-0.05)
end, {
description = 'increase master height factor',
group = 'layout'
}), awful.key({modkey, 'Shift'}, 'Left', function()
awful.tag.incnmaster(1, nil, true)
end, {
description = 'increase the number of master clients',
group = 'layout'
}), awful.key({modkey, 'Shift'}, 'Right', function()
awful.tag.incnmaster(-1, nil, true)
end, {
description = 'decrease the number of master clients',
group = 'layout'
}), awful.key({modkey, 'Control'}, 'Left', function()
awful.tag.incncol(1, nil, true)
end, {
description = 'increase the number of columns',
group = 'layout'
}), awful.key({modkey, 'Control'}, 'Right', function()
awful.tag.incncol(-1, nil, true)
end, {
description = 'decrease the number of columns',
group = 'layout'
}), awful.key({modkey}, 'space', function()
awful.layout.inc(1)
end, {
description = 'select next layout',
group = 'layout'
}), awful.key({modkey, 'Shift'}, 'space', function()
awful.layout.inc(-1)
end, {
description = 'select previous layout',
group = 'layout'
}), awful.key({altkey, 'Shift'}, 'l', function()
awful.tag.incmwfact(0.05)
end, {
description = 'increase master width factor',
group = 'layout'
}), awful.key({altkey, 'Shift'}, 'h', function()
awful.tag.incmwfact(-0.05)
end, {
description = 'decrease master width factor',
group = 'layout'
}), awful.key({altkey, 'Shift'}, 'j', function()
awful.client.incwfact(0.05)
end, {
description = 'decrease master height factor',
group = 'layout'
}), awful.key({altkey, 'Shift'}, 'k', function()
awful.client.incwfact(-0.05)
end, {
description = 'increase master height factor',
group = 'layout'
}), awful.key({modkey, 'Shift'}, 'h', function()
awful.tag.incnmaster(1, nil, true)
end, {
description = 'increase the number of master clients',
group = 'layout'
}), awful.key({modkey, 'Shift'}, 'l', function()
awful.tag.incnmaster(-1, nil, true)
end, {
description = 'decrease the number of master clients',
group = 'layout'
}), awful.key({modkey, 'Control'}, 'h', function()
awful.tag.incncol(1, nil, true)
end, {
description = 'increase the number of columns',
group = 'layout'
}), awful.key({modkey, 'Control'}, 'l', function()
awful.tag.incncol(-1, nil, true)
end, {
description = 'decrease the number of columns',
group = 'layout'
}), awful.key({modkey, 'Control'}, 'n', function()
local c = awful.client.restore()
-- Focus restored client
if c then
_G.client.focus = c
c:raise()
end
end, {
description = 'restore minimized',
group = 'client'
}), awful.key({modkey}, 'k', function()
_G.toggle_splash()
end, {
description = 'toggle splash terminal',
group = 'launcher'
}), awful.key({modkey}, 'j', function()
_G.toggle_splash_height()
end, {
description = 'toggle splash terminal height',
group = 'launcher'
}), awful.key({}, 'XF86MonBrightnessUp', function()
awful.spawn('xbacklight -inc 10')
end, {
description = '+10%',
group = 'hotkeys'
}), awful.key({}, 'XF86MonBrightnessDown', function()
awful.spawn('xbacklight -dec 10')
end, {
description = '-10%',
group = 'hotkeys'
}), -- ALSA volume control
awful.key({altkey}, 'k', function()
awful.spawn.easy_async('amixer -D pulse sset Master 5%+', function()
_G.update_volume()
end)
end, {
description = 'volume up',
group = 'hotkeys'
}), awful.key({}, 'XF86AudioRaiseVolume', function()
awful.spawn.easy_async('amixer -D pulse sset Master 5%+', function()
_G.update_volume()
end)
end, {
description = 'volume up',
group = 'hotkeys'
}), awful.key({}, 'XF86AudioLowerVolume', function()
awful.spawn.easy_async('amixer -D pulse sset Master 5%-', function()
_G.update_volume()
end)
end, {
description = 'volume down',
group = 'hotkeys'
}), awful.key({altkey}, 'j', function()
awful.spawn.easy_async('amixer -D pulse sset Master 5%-', function()
_G.update_volume()
end)
end, {
description = 'volume down',
group = 'hotkeys'
}), awful.key({altkey}, 'm', function()
awful.spawn('amixer -D pulse set Master 1+ toggle')
_G.update_volume()
end, {
description = 'toggle mute',
group = 'hotkeys'
}), awful.key({}, 'XF86AudioMute', function()
awful.spawn('amixer -D pulse set Master 1+ toggle')
_G.update_volume()
end, {
description = 'toggle mute',
group = 'hotkeys'
}), awful.key({modkey}, 'o', awful.client.movetoscreen, {
description = 'move window to next screen',
group = 'client'
}), awful.key({modkey}, 'n', function()
awful.spawn(awful.screen.focused().selected_tag.defaultApp, {
tag = _G.mouse.screen.selected_tag,
placement = awful.placement.bottom_right
})
end, {
description = 'open default program for tag/workspace',
group = 'tag'
}), awful.key({'Control', altkey}, 'space', function()
awful.util.spawn_with_shell('vm-attach attach')
end))
-- Bind all key numbers to tags.
-- Be careful: we use keycodes to make it works on any keyboard layout.
-- This should map on the top row of your keyboard, usually 1 to 9.
for i = 1, 9 do
-- Hack to only show tags 1 and 9 in the shortcut window (mod+s)
local descr_view, descr_toggle, descr_move, descr_toggle_focus
if i == 1 or i == 9 then
descr_view = {
description = 'view tag #',
group = 'tag'
}
descr_toggle = {
description = 'toggle tag #',
group = 'tag'
}
descr_move = {
description = 'move focused client to tag #',
group = 'tag'
}
descr_toggle_focus = {
description = 'toggle focused client on tag #',
group = 'tag'
}
end
globalKeys = awful.util.table.join(globalKeys, -- View tag only.
awful.key({modkey}, '#' .. i + 9, function()
local screen = awful.screen.focused()
local tag = screen.tags[i]
if tag then
tag:view_only()
_G._splash_to_current_tag()
end
end, descr_view), -- Toggle tag display.
awful.key({modkey, 'Control'}, '#' .. i + 9, function()
local screen = awful.screen.focused()
local tag = screen.tags[i]
if tag then
awful.tag.viewtoggle(tag)
end
end, descr_toggle), -- Move client to tag.
awful.key({modkey, 'Shift'}, '#' .. i + 9, function()
if _G.client.focus then
local tag = _G.client.focus.screen.tags[i]
if tag then
_G.client.focus:move_to_tag(tag)
end
end
end, descr_move), -- Toggle tag on focused client.
awful.key({modkey, 'Control', 'Shift'}, '#' .. i + 9, function()
if _G.client.focus then
local tag = _G.client.focus.screen.tags[i]
if tag then
_G.client.focus:toggle_tag(tag)
end
end
end, descr_toggle_focus))
end
return globalKeys

View File

@ -0,0 +1,4 @@
return {
mod = require('configuration.keys.mod'),
global = require('configuration.keys.global')
}

View File

@ -0,0 +1,4 @@
return {
modKey = 'Mod4',
altKey = 'Mod1'
}

View File

@ -0,0 +1,422 @@
#################################
# Shadows #
#################################
# Enabled client-side shadows on windows. Note desktop windows
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
# unless explicitly requested using the wintypes option.
#
# shadow = false
shadow = true;
# The blur radius for shadows, in pixels. (defaults to 12)
# shadow-radius = 12
shadow-radius = 7;
# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
# shadow-opacity = .75
# The left offset for shadows, in pixels. (defaults to -15)
# shadow-offset-x = -15
shadow-offset-x = -7;
# The top offset for shadows, in pixels. (defaults to -15)
# shadow-offset-y = -15
shadow-offset-y = -7;
# Avoid drawing shadows on dock/panel windows. This option is deprecated,
# you should use the *wintypes* option in your config file instead.
#
# no-dock-shadow = false
# Don't draw shadows on drag-and-drop windows. This option is deprecated,
# you should use the *wintypes* option in your config file instead.
#
# no-dnd-shadow = false
# Red color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-red = 0
# Green color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-green = 0
# Blue color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-blue = 0
# Do not paint shadows on shaped windows. Note shaped windows
# here means windows setting its shape through X Shape extension.
# Those using ARGB background is beyond our control.
# Deprecated, use
# shadow-exclude = 'bounding_shaped'
# or
# shadow-exclude = 'bounding_shaped && !rounded_corners'
# instead.
#
# shadow-ignore-shaped = ''
# Specify a list of conditions of windows that should have no shadow.
#
# examples:
# shadow-exclude = "n:e:Notification";
#
# shadow-exclude = []
shadow-exclude = [
"name = 'Notification'",
"class_g = 'Conky'",
"class_g ?= 'Notify-osd'",
"class_g = 'Cairo-clock'",
"_GTK_FRAME_EXTENTS@:c"
];
# Specify a X geometry that describes the region in which shadow should not
# be painted in, such as a dock window region. Use
# shadow-exclude-reg = "x10+0+0"
# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
#
# shadow-exclude-reg = ""
# Crop shadow of a window fully on a particular Xinerama screen to the screen.
# xinerama-shadow-crop = false
#################################
# Fading #
#################################
# Fade windows in/out when opening/closing and when opacity changes,
# unless no-fading-openclose is used.
# fading = false
fading = true
# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
# fade-in-step = 0.028
fade-in-step = 0.03;
# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
# fade-out-step = 0.03
fade-out-step = 0.03;
# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
# fade-delta = 10
fade-delta = 5
# Specify a list of conditions of windows that should not be faded.
# fade-exclude = []
# Do not fade on window open/close.
# no-fading-openclose = false
# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
# no-fading-destroyed-argb = false
#################################
# Transparency / Opacity #
#################################
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
# inactive-opacity = 1
inactive-opacity = 1.0;
# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
# frame-opacity = 1.0
frame-opacity = 0.95;
# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
# menu-opacity = 1.0
# Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows.
# inactive-opacity-override = true
inactive-opacity-override = true;
# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
active-opacity = 1.0
# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
# inactive-dim = 0.0
# Specify a list of conditions of windows that should always be considered focused.
# focus-exclude = []
#focus-exclude = [ "class_g = 'Termite'" ];
# Use fixed inactive dim value, instead of adjusting according to window opacity.
# inactive-dim-fixed = 1.0
# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
# like `50:name *= "Firefox"`. picom-trans is recommended over this.
# Note we don't make any guarantee about possible conflicts with other
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
# example:
# opacity-rule = [ "80:class_g = 'URxvt'" ];
#################################
# Background-Blurring #
#################################
# Parameters for background blurring, see the *BLUR* section for more information.
# blur-method =
# blur-size = 12
#
# blur-deviation = false
# Blur background of semi-transparent / ARGB windows.
# Bad in performance, with driver-dependent behavior.
# The name of the switch may change without prior notifications.
#
# blur-background = false
# Blur background of windows when the window frame is not opaque.
# Implies:
# blur-background
# Bad in performance, with driver-dependent behavior. The name may change.
#
# blur-background-frame = false
# Use fixed blur strength rather than adjusting according to window opacity.
# blur-background-fixed = false
# Specify the blur convolution kernel, with the following format:
# example:
# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
#
# blur-kern = ''
blur-kern = "3x3box";
# Exclude conditions for background blur.
# blur-background-exclude = []
blur-background-exclude = [
"window_type = 'dock'",
"window_type = 'desktop'",
"_GTK_FRAME_EXTENTS@:c"
];
#################################
# General Settings #
#################################
# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
# daemon = false
# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
# `xrender` is the default one.
#
# backend = 'glx'
backend = "xrender";
# Enable/disable VSync.
# vsync = false
vsync = true
# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
# dbus = false
# Try to detect WM windows (a non-override-redirect window with no
# child that has 'WM_STATE') and mark them as active.
#
# mark-wmwin-focused = false
mark-wmwin-focused = true;
# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
# mark-ovredir-focused = false
mark-ovredir-focused = true;
# Try to detect windows with rounded corners and don't consider them
# shaped windows. The accuracy is not very high, unfortunately.
#
# detect-rounded-corners = false
detect-rounded-corners = true;
# Detect '_NET_WM_OPACITY' on client windows, useful for window managers
# not passing '_NET_WM_OPACITY' of client windows to frame windows.
#
# detect-client-opacity = false
detect-client-opacity = true;
# Specify refresh rate of the screen. If not specified or 0, picom will
# try detecting this with X RandR extension.
#
# refresh-rate = 60
refresh-rate = 60
# Limit picom to repaint at most once every 1 / 'refresh_rate' second to
# boost performance. This should not be used with
# vsync drm/opengl/opengl-oml
# as they essentially does sw-opti's job already,
# unless you wish to specify a lower refresh rate than the actual value.
#
# sw-opti =
# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
# provided that the WM supports it.
#
# use-ewmh-active-win = false
# Unredirect all windows if a full-screen opaque window is detected,
# to maximize performance for full-screen windows. Known to cause flickering
# when redirecting/unredirecting windows.
#
# unredir-if-possible = false
# Delay before unredirecting the window, in milliseconds. Defaults to 0.
# unredir-if-possible-delay = 0
# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
# unredir-if-possible-exclude = []
# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
# in the same group focused at the same time.
#
# detect-transient = false
detect-transient = true
# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
# group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if
# detect-transient is enabled, too.
#
# detect-client-leader = false
detect-client-leader = true
# Resize damaged region by a specific number of pixels.
# A positive value enlarges it while a negative one shrinks it.
# If the value is positive, those additional pixels will not be actually painted
# to screen, only used in blur calculation, and such. (Due to technical limitations,
# with use-damage, those pixels will still be incorrectly painted to screen.)
# Primarily used to fix the line corruption issues of blur,
# in which case you should use the blur radius value here
# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
# with a 5x5 one you use `--resize-damage 2`, and so on).
# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
#
# resize-damage = 1
# Specify a list of conditions of windows that should be painted with inverted color.
# Resource-hogging, and is not well tested.
#
# invert-color-include = []
# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
# Might cause incorrect opacity when rendering transparent content (but never
# practically happened) and may not work with blur-background.
# My tests show a 15% performance boost. Recommended.
#
# glx-no-stencil = false
# GLX backend: Avoid rebinding pixmap on window damage.
# Probably could improve performance on rapid window content changes,
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
# Recommended if it works.
#
# glx-no-rebind-pixmap = false
# Disable the use of damage information.
# This cause the whole screen to be redrawn everytime, instead of the part of the screen
# has actually changed. Potentially degrades the performance, but might fix some artifacts.
# The opposing option is use-damage
#
# no-use-damage = false
use-damage = true
# Use X Sync fence to sync clients' draw calls, to make sure all draw
# calls are finished before picom starts drawing. Needed on nvidia-drivers
# with GLX backend for some users.
#
# xrender-sync-fence = false
# GLX backend: Use specified GLSL fragment shader for rendering window contents.
# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
# in the source tree for examples.
#
# glx-fshader-win = ''
# Force all windows to be painted with blending. Useful if you
# have a glx-fshader-win that could turn opaque pixels transparent.
#
# force-win-blend = false
# Do not use EWMH to detect fullscreen windows.
# Reverts to checking if a window is fullscreen based only on its size and coordinates.
#
# no-ewmh-fullscreen = false
# Dimming bright windows so their brightness doesn't exceed this set value.
# Brightness of a window is estimated by averaging all pixels in the window,
# so this could comes with a performance hit.
# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
#
# max-brightness = 1.0
# Make transparent windows clip other windows like non-transparent windows do,
# instead of blending on top of them.
#
# transparent-clipping = false
# Set the log level. Possible values are:
# "trace", "debug", "info", "warn", "error"
# in increasing level of importance. Case doesn't matter.
# If using the "TRACE" log level, it's better to log into a file
# using *--log-file*, since it can generate a huge stream of logs.
#
# log-level = "debug"
log-level = "warn";
# Set the log file.
# If *--log-file* is never specified, logs will be written to stderr.
# Otherwise, logs will to written to the given file, though some of the early
# logs might still be written to the stderr.
# When setting this option from the config file, it is recommended to use an absolute path.
#
# log-file = '/path/to/your/log/file'
# Show all X errors (for debugging)
# show-all-xerrors = false
# Write process ID to a file.
# write-pid-path = '/path/to/your/log/file'
# Window type settings
#
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
# "tooltip", "notification", "combo", and "dnd".
#
# Following per window-type options are available: ::
#
# fade, shadow:::
# Controls window-type-specific shadow and fade settings.
#
# opacity:::
# Controls default opacity of the window type.
#
# focus:::
# Controls whether the window of this type is to be always considered focused.
# (By default, all window types except "normal" and "dialog" has this on.)
#
# full-shadow:::
# Controls whether shadow is drawn under the parts of the window that you
# normally won't be able to see. Useful when the window has parts of it
# transparent, and you want shadows in those areas.
#
# redir-ignore:::
# Controls whether this type of windows should cause screen to become
# redirected again after been unredirected. If you have unredir-if-possible
# set, and doesn't want certain window to cause unnecessary screen redirection,
# you can set this to `true`.
#
wintypes:
{
tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
dock = { shadow = false; }
dnd = { shadow = false; }
popup_menu = { opacity = 1.0; }
dropdown_menu = { opacity = 1.0; }
};

View File

@ -0,0 +1,148 @@
/**
* User: deadguy
* Copyright: deadguy
*/
configuration {
display-drun: "Activate";
display-run: "Execute";
show-icons: true;
sidebar-mode: false;
}
* {
background-color: rgb(0, 0, 0, 0);
text-color: rgb(255, 255, 255);
selbg: rgb(255, 255, 255, 0.5);
urgbg: rgb(255, 255, 255);
actbg: rgb(255, 255, 255, 0.05);
winbg: rgb(255, 255, 255);
selected-normal-foreground: @winbg;
normal-foreground: @text-color;
selected-normal-background: @actbg;
normal-background: @background-color;
selected-urgent-foreground: @background-color;
urgent-foreground: @text-color;
selected-urgent-background: @urgbg;
urgent-background: @background-color;
selected-active-foreground: @winbg;
active-foreground: @text-color;
selected-active-background: @actbg;
active-background: @selbg;
line-margin: 2;
line-padding: 2;
separator-style: "none";
hide-scrollbar: "true";
margin: 0px;
padding: 0px;
font: "FiraCode Nerd Font Mono Medium 10";
}
window {
location: west;
anchor: west;
x-offset: 0px;
height: 100%;
width: 30%;
padding: 0%;
orientation: horizontal;
children: [mainbox];
background-color: rgb(20, 20, 20, 0.9);
}
mainbox {
spacing: 0em;
padding: 0px;
width: 100%;
children: [ inputbar, listview ];
expand: true;
}
button { padding: 5px 2px; }
button selected {
background-color: @active-background;
text-color: @background-color;
}
inputbar {
children: [ entry ];
}
textbox-prompt-colon {
text-color: inherit;
expand: false;
margin: 0 0.3em 0em 0em;
}
listview {
spacing: 0em;
dynamic: false;
cycle: false;
}
element {
padding: 16px;
border: 0 0 0 0 solid;
}
entry {
expand: true;
text-color: @normal-foreground;
background-color: rgb(0, 0, 0, 0);
vertical-align: 1;
padding: 12px;
font: "FiraCode Nerd Font Mono Bold 18";
}
element normal.normal {
background-color: @normal-background;
text-color: @normal-foreground;
}
element normal.urgent {
background-color: @urgent-background;
text-color: @urgent-foreground;
}
element normal.active {
background-color: @active-background;
text-color: @active-foreground;
}
element selected.normal {
background-color: @selected-normal-background;
text-color: @selected-normal-foreground;
padding: 16px;
border: 0 0 0 0 solid;
border-color: @active-background;
}
element selected.urgent {
background-color: @selected-urgent-background;
text-color: @selected-urgent-foreground;
}
element selected.active {
background-color: @selected-active-background;
text-color: @selected-active-foreground;
}
element alternate.normal {
background-color: @normal-background;
text-color: @normal-foreground;
}
element alternate.urgent {
background-color: @urgent-background;
text-color: @urgent-foreground;
}
element alternate.active {
background-color: @active-background;
text-color: @active-foreground;
}

View File

@ -0,0 +1,46 @@
local awful = require('awful')
local beautiful = require('beautiful')
local gears = require('gears')
local apps = require('configuration.apps')
local dpi = require('beautiful').xresources.apply_dpi
local tags = {
{text = 'web', type = 'web', defaultApp = apps.default.browser, screen = 1},
{text = 'term', type = 'code', defaultApp = apps.default.terminal, screen = 1},
{text = 'social', type = 'social', defaultApp = apps.default.social, screen = 1},
{text = 'video', type = 'video', defaultApp = apps.default.video, screen = 1},
{text = 'file', type = 'file', defaultApp = apps.default.files, screen = 1},
{text = 'music', type = 'music', defaultApp = apps.default.music, screen = 1},
{text = 'misc', type = 'misc', defaultApp = apps.default.vmapp, screen = 1}
}
awful.layout.layouts = {
awful.layout.suit.tile,
awful.layout.suit.floating,
-- awful.layout.suit.tile.left,
-- awful.layout.suit.tile.bottom,
-- awful.layout.suit.tile.top,
--[[ awful.layout.suit.fair,
-- awful.layout.suit.fair.horizontal,
-- awful.layout.suit.spiral,
awful.layout.suit.spiral.dwindle,
--]] awful.layout.suit.max,
-- awful.layout.suit.max.fullscreen,
-- awful.layout.suit.magnifier,
-- awful.layout.suit.corner.nw,
}
awful.screen.connect_for_each_screen(function(s)
for i, tag in pairs(tags) do
awful.tag.add(tag.text, {
icon = tag.icon,
icon_only = false,
layout = awful.layout.suit.tile,
gap = beautiful.gaps,
screen = s,
defaultApp = tag.defaultApp,
selected = i == 1
})
end
end)

View File

@ -0,0 +1,35 @@
#!/usr/bin/env bash
# rofi-power
# Use rofi to call systemctl for shutdown, reboot, etc
# 2016 Oliver Kraitschy - http://okraits.de
OPTIONS="Poweroff\nExit\nReboot\nSuspend\nHibernate"
config_path=$(dirname "$0")
LAUNCHER="rofi -dmenu -i"
USE_LOCKER="true"
LOCKER="i3lock -c 000000"
option=`echo -e $OPTIONS | $LAUNCHER | awk '{print $1}' | tr -d '\r\n'`
case $option in
Exit)
kill -9 -1
;;
Reboot)
systemctl reboot
;;
Poweroff)
systemctl poweroff
;;
Suspend)
$($USE_LOCKER) && "$LOCKER"; systemctl suspend
;;
Hibernate)
$($USE_LOCKER) && "$LOCKER"; systemctl hibernate
;;
*)
;;
esac

View File

@ -0,0 +1,8 @@
#!/bin/bash
if [ $1 == "--delayed" ]; then
spectacle -b -n ${@:2} -o /tmp/screenshot.png ; xclip -selection clipboard -target image/png -i /tmp/screenshot.png ; paplay /usr/share/sounds/freedesktop/stereo/camera-shutter.oga
else
spectacle -b -n $@ -o /tmp/screenshot.png ; xclip -selection clipboard -target image/png -i /tmp/screenshot.png ; paplay /usr/share/sounds/freedesktop/stereo/camera-shutter.oga
fi

View File

@ -0,0 +1,37 @@
local beautiful = require('beautiful')
local wibox = require('wibox')
local TaskList = require('widget.task-list')
local dpi = require('beautiful').xresources.apply_dpi
local BottomBar = function(s, offset)
-- BOTTOM BAR
-- =======
local panel_height = dpi(16)
local panel = wibox({
ontop = false,
screen = s,
height = panel_height,
width = s.geometry.width,
x = s.geometry.x,
y = s.geometry.height - panel_height,
stretch = false,
bg = beautiful.primary.hue_100,
fg = beautiful.fg_normal,
})
panel:struts({
bottom = panel.height
})
panel:setup{
layout = wibox.layout.align.horizontal,
nil,
TaskList(s),
nil,
}
return panel
end
return BottomBar

44
layout/init.lua 100644
View File

@ -0,0 +1,44 @@
local awful = require('awful')
local top_bar = require('layout.top-bar')
local bottom_bar = require('layout.bottom-bar')
local left_panel = require('layout.left-panel')
local key_grabber
-- Create a wibox for each screen and add it
awful.screen.connect_for_each_screen(function(s)
if s.index == 1 then
s.top_bar = top_bar(s, true)
s.bottom_bar = bottom_bar(s, true)
else
s.top_bar = top_bar(s, false)
s.bottom_bar = bottom_bar(s, false)
end
end)
-- Hide bars when app go fullscreen
function updateBarsVisibility()
for s in screen do
if s.selected_tag then
local fullscreen = s.selected_tag.fullscreenMode
s.top_bar.visible = not fullscreen
s.bottom_bar.visible = not fullscreen
end
end
end
_G.tag.connect_signal('property::selected', function(t)
updateBarsVisibility()
end)
_G.client.connect_signal('property::fullscreen', function(c)
c.screen.selected_tag.fullscreenMode = c.fullscreen
updateBarsVisibility()
end)
_G.client.connect_signal('unmanage', function(c)
if c.fullscreen then
c.screen.selected_tag.fullscreenMode = false
updateBarsVisibility()
end
end)

View File

@ -0,0 +1,34 @@
local awful = require('awful')
local beautiful = require('beautiful')
local wibox = require('wibox')
local gears = require('gears')
local mat_icon = require('widget.material.icon')
local dpi = require('beautiful').xresources.apply_dpi
local icons = require('theme.icons')
local clickable_container = require('widget.material.clickable-container')
return function(screen, panel, action_bar_width)
local menu_icon = wibox.widget {
icon = icons.menu,
size = dpi(16),
widget = mat_icon
}
local home_button = wibox.widget {
wibox.widget {menu_icon, widget = clickable_container},
visible = true,
bg = beautiful.primary.hue_700,
widget = wibox.container.background
}
home_button:buttons(gears.table.join(
awful.button({}, 1, nil,
function() _G.dashboard_show() end)))
return wibox.widget {
id = 'action_bar',
layout = wibox.layout.align.horizontal,
forced_width = action_bar_width,
{layout = wibox.layout.fixed.horizontal, home_button}
}
end

View File

@ -0,0 +1,18 @@
local wibox = require('wibox')
local mat_list_item = require('widget.material.list-item')
return wibox.widget {
-- wibox.widget {
-- wibox.widget {
-- text = 'Hardware monitor',
-- font = 'Roboto medium 12',
-- widget = wibox.widget.textbox
-- },
-- widget = mat_list_item
-- },
require('widget.cpu.cpu-meter'),
require('widget.ram.ram-meter'),
require('widget.temperature.temperature-meter'),
require('widget.harddrive.harddrive-meter'),
layout = wibox.layout.fixed.vertical
}

View File

@ -0,0 +1,71 @@
local awful = require('awful')
local beautiful = require('beautiful')
local wibox = require('wibox')
local mat_list_item = require('widget.material.list-item')
local mat_icon = require('widget.material.icon')
local dpi = require('beautiful').xresources.apply_dpi
local icons = require('theme.icons')
return function(_, panel)
local search_button = wibox.widget {
wibox.widget {icon = icons.search, size = dpi(24), widget = mat_icon},
wibox.widget {
text = 'Search Applications',
font = 'Roboto medium 13',
widget = wibox.widget.textbox
},
clickable = true,
widget = mat_list_item
}
search_button:buttons(awful.util.table.join(
awful.button({}, 1,
function() panel:run_rofi() end)))
local exit_button = wibox.widget {
wibox.widget {icon = icons.logout, size = dpi(24), widget = mat_icon},
wibox.widget {
text = 'End work session',
font = 'Roboto medium 13',
widget = wibox.widget.textbox
},
clickable = true,
divider = true,
widget = mat_list_item
}
exit_button:buttons(awful.util.table.join(
awful.button({}, 1, function()
panel:toggle()
_G.exit_screen_show()
end)))
return wibox.widget {
layout = wibox.layout.align.vertical,
{
layout = wibox.layout.fixed.vertical,
{
search_button,
bg = beautiful.primary.hue_800,
widget = wibox.container.background
},
wibox.widget {
orientation = 'horizontal',
forced_height = 0.8,
opacity = 0.3,
widget = wibox.widget.separator
},
require('layout.left-panel.dashboard.quick-settings'),
require('layout.left-panel.dashboard.hardware-monitor')
},
nil,
{
layout = wibox.layout.fixed.vertical,
{
exit_button,
bg = beautiful.primary.hue_800,
widget = wibox.container.background
}
}
}
end

View File

@ -0,0 +1,16 @@
local wibox = require('wibox')
local mat_list_item = require('widget.material.list-item')
return wibox.widget {
-- wibox.widget {
-- wibox.widget {
-- text = 'Quick settings',
-- font = 'Roboto medium 12',
-- widget = wibox.widget.textbox
-- },
-- widget = mat_list_item
-- },
require('widget.volume.volume-slider'),
require('widget.brightness.brightness-slider'),
layout = wibox.layout.fixed.vertical
}

View File

@ -0,0 +1,98 @@
local awful = require('awful')
local beautiful = require('beautiful')
local wibox = require('wibox')
local apps = require('configuration.apps')
local dpi = require('beautiful').xresources.apply_dpi
local left_panel = function(screen)
local action_bar_width = dpi(32)
local panel_content_width = dpi(400)
local offsety = dpi(12)
local panel = wibox {
screen = screen,
width = dpi(32),
height = dpi(32),
x = screen.geometry.x + 12,
y = screen.geometry.y + offsety,
ontop = false,
bg = beautiful.primary.hue_900,
fg = beautiful.fg_normal
}
panel.opened = false
panel:struts({left = dpi(0), top = dpi(48)})
local backdrop = wibox {
ontop = true,
screen = screen,
bg = '#00000000',
type = 'dock',
x = screen.geometry.x,
y = screen.geometry.y + offsety,
width = screen.geometry.width,
height = screen.geometry.height
}
function panel:run_rofi()
_G.awesome.spawn(apps.default.rofi, false, false, false, false,
function() panel:toggle() end)
end
local openPanel = function(should_run_rofi)
panel.width = panel_content_width
panel.height = screen.geometry.height
backdrop.visible = true
panel.visible = false
panel.visible = true
panel.x = screen.geometry.x
panel.y = screen.geometry.y
panel.ontop = true
panel:get_children_by_id('panel_content')[1].visible = true
if should_run_rofi then panel:run_rofi() end
panel:emit_signal('opened')
end
local closePanel = function()
panel.width = action_bar_width
panel.height = dpi(32)
panel:get_children_by_id('panel_content')[1].visible = false
backdrop.visible = false
panel.ontop = false
panel.x = screen.geometry.x + 12
panel.y = screen.geometry.y + offsety
panel:emit_signal('closed')
end
function panel:toggle(should_run_rofi)
self.opened = not self.opened
if self.opened then
openPanel(should_run_rofi)
else
closePanel()
end
end
backdrop:buttons(awful.util.table.join(
awful.button({}, 1, function() panel:toggle() end)))
panel:setup{
require('layout.left-panel.action-bar')(screen, panel, action_bar_width),
layout = wibox.layout.align.vertical,
{
id = 'panel_content',
bg = beautiful.primary.hue_900,
widget = wibox.container.background,
visible = false,
forced_width = panel_content_width,
{
require('layout.left-panel.dashboard')(screen, panel),
layout = wibox.layout.stack
}
}
}
return panel
end
return left_panel

165
layout/top-bar.lua 100644
View File

@ -0,0 +1,165 @@
local awful = require('awful')
local beautiful = require('beautiful')
local clickable_container = require('widget.material.clickable-container')
local mat_icon_button = require('widget.material.icon-button')
local wibox = require('wibox')
local TagList = require('widget.tag-list')
local gears = require('gears')
local dpi = require('beautiful').xresources.apply_dpi
local theme = require "theme"
local table = awful.util.table or gears.table
local separator = wibox.container.margin(wibox.widget {
orientation = 'vertical',
forced_width = dpi(1),
opacity = 0.3,
widget = wibox.widget.separator
}, dpi(0), dpi(0), dpi(4), dpi(4))
local TopBar = function(s, offset)
-- LAYOUT BOX
-- ==========
local function update_txt_layoutbox(s)
-- Writes a string representation of the current layout in a textbox widget
local txt_l = theme["layout_txt_" .. awful.layout.getname(awful.layout.get(s))] or ""
s.layoutbox:set_text(txt_l)
end
s.layoutbox = wibox.widget.textbox(theme["layout_txt_" .. awful.layout.getname(awful.layout.get(s))])
s.layoutbox.font = beautiful.icon_font
awful.tag.attached_connect_signal(s, "property::selected", function () update_txt_layoutbox(s) end)
awful.tag.attached_connect_signal(s, "property::layout", function () update_txt_layoutbox(s) end)
s.layoutbox:buttons(table.join(
awful.button({}, 1, function() awful.layout.inc(1) end),
awful.button({}, 2, function () awful.layout.set( awful.layout.layouts[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)))
-- SYSTEM TRAY
-- ===========
local systray = wibox.widget.systray()
systray:set_horizontal(true)
-- SYSTEM DETAILS
-- ==============
local volume_widget = require('widget.volume')
local battery_widget = require('widget.battery')
local clock_widget = require('widget.clock')
local mem_widget = require('widget.memory')
local cpu_widget = require('widget.cpu')
local temprature_widget = require('widget.temprature')
local storage_widget = require('widget.storage')
local system_details = wibox.widget {
systray,
separator,
battery,
--separator,
wibox.widget{
wibox.widget{
text = 'mem',
font = beautiful.icon_font,
widget = wibox.widget.textbox
},
fg = beautiful.accent.hue_600,
widget = wibox.container.background
},
mem_widget,
separator,
wibox.widget{
wibox.widget{
text = 'cpu',
font = beautiful.icon_font,
widget = wibox.widget.textbox
},
fg = beautiful.accent.hue_500,
widget = wibox.container.background
},
cpu_widget,
separator,
wibox.widget{
wibox.widget{
text = 'temp',
font = beautiful.icon_font,
widget = wibox.widget.textbox
},
fg = beautiful.accent.hue_400,
widget = wibox.container.background
},
temprature_widget,
separator,
wibox.widget{
wibox.widget{
text = 'disk',
font = beautiful.icon_font,
widget = wibox.widget.textbox
},
fg = beautiful.accent.hue_200,
widget = wibox.container.background
},
storage_widget,
separator,
wibox.widget{
wibox.widget{
text = 'vol',
font = beautiful.icon_font,
widget = wibox.widget.textbox
},
fg = beautiful.accent.hue_500,
widget = wibox.container.background
},
volume_widget,
separator,
wibox.widget{
wibox.widget{
text = 'date',
font = beautiful.icon_font,
widget = wibox.widget.textbox
},
fg = beautiful.accent.hue_400,
widget = wibox.container.background
},
clock_widget,
wibox.widget{
s.layoutbox,
fg = beautiful.primary.hue_100,
bg = beautiful.accent.hue_200,
widget = wibox.container.background
},
spacing = dpi(4),
layout = wibox.layout.fixed.horizontal
}
local calendar = require('widget.calendar')
calendar:attach(clock_widget)
-- TOP BAR
-- =======
local panel = wibox({
ontop = false,
screen = s,
height = dpi(20),
width = s.geometry.width,
x = s.geometry.x,
y = s.geometry.y,
stretch = false,
bg = beautiful.primary.hue_100,
fg = beautiful.fg_normal,
})
panel:struts({
top = panel.height - panel.y
})
panel:setup{
layout = wibox.layout.align.horizontal,
TagList(s),
nil,
system_details,
}
return panel
end
return TopBar

View File

@ -0,0 +1,19 @@
-- MODULE AUTO-START
-- Run all the apps listed in configuration/apps.lua as run_on_start_up only once when awesome start
local awful = require('awful')
local apps = require('configuration.apps')
local function run_once(cmd)
local findme = cmd
local firstspace = cmd:find(' ')
if firstspace then
findme = cmd:sub(0, firstspace - 1)
end
awful.spawn.with_shell(string.format('pgrep -u $USER -x %s > /dev/null || (%s)', findme, cmd))
--This broke compton ===> awful.spawn.single_instance(string.format('pgrep -u $USER -x %s > /dev/null || (%s)', findme, cmd))
end
for _, app in ipairs(apps.run_on_start_up) do
run_once(app)
end

View File

@ -0,0 +1,545 @@
local awful = require('awful')
local gears = require('gears')
local wibox = require('wibox')
local beautiful = require('beautiful')
local icons = require('theme.icons')
local mat_list_item = require('widget.material.list-item')
local mat_icon = require('widget.material.icon')
local clickable_container = require('widget.material.clickable-container')
local apps = require('configuration.apps')
local dpi = require('beautiful').xresources.apply_dpi
local icon_size = beautiful.dashboard_icon_size or dpi(140)
local username = os.getenv("USER")
local panel_style = gears.shape.rounded_rect
local buildButton = function(icon, name)
local button_text = wibox.widget {
text = name,
font = beautiful.font,
align = 'center',
valign = 'center',
bg = beautiful.primary.hue_900,
fg = beautiful.fg_normal,
widget = wibox.widget.textbox
}
local a_button = wibox.widget {
{
{
{
{image = icon, widget = wibox.widget.imagebox},
margins = dpi(16),
widget = wibox.container.margin
},
bg = beautiful.groups_bg,
widget = wibox.container.background
},
shape = panel_style,
forced_width = dpi(60),
forced_height = dpi(60),
visible = true,
-- bg = beautiful.bg_normal,
widget = clickable_container
},
visible = true,
-- bg = beautiful.bg_normal,
shape = panel_style,
widget = wibox.container.background
}
local build_a_button = wibox.widget {
layout = wibox.layout.fixed.horizontal,
spacing = dpi(5),
a_button
-- button_text
}
return build_a_button
end
local buildLabel = function(name)
local label_text = wibox.widget {
{
text = name,
font = beautiful.font_large,
align = 'center',
valign = 'center',
bg = beautiful.primary.hue_900,
fg = beautiful.fg_normal,
widget = wibox.widget.textbox
},
shape = panel_style,
forced_height = dpi(56),
visible = true,
-- bg = beautiful.bg_normal,
widget = clickable_container
}
local build_a_label = wibox.widget {
layout = wibox.layout.flex.horizontal,
spacing = dpi(5),
label_text
}
return build_a_label
end
function suspend_command()
dashboard_hide()
awful.spawn.with_shell(apps.default.lock .. ' & systemctl suspend')
end
function exit_command() _G.awesome.quit() end
function lock_command()
dashboard_hide()
awful.spawn.with_shell('sleep 1 && ' .. apps.default.lock)
end
function poweroff_command()
awful.spawn.with_shell('poweroff')
awful.keygrabber.stop(_G.dashboard_grabber)
end
function reboot_command()
awful.spawn.with_shell('reboot')
awful.keygrabber.stop(_G.dashboard_grabber)
end
local poweroff = buildButton(icons.power, 'Shutdown')
poweroff:connect_signal('button::release', function() poweroff_command() end)
local reboot = buildButton(icons.restart, 'Restart')
reboot:connect_signal('button::release', function() reboot_command() end)
local suspend = buildButton(icons.sleep, 'Sleep')
suspend:connect_signal('button::release', function() suspend_command() end)
local exit = buildButton(icons.logout, 'Logout')
exit:connect_signal('button::release', function() exit_command() end)
local lock = buildButton(icons.lock, 'Lock')
lock:connect_signal('button::release', function() lock_command() end)
local search = buildButton(icons.search, 'Search')
search:connect_signal('button::release', function()
-- rofi_command()
dashboard_hide()
_G.awesome.spawn(apps.default.rofi)
end)
local close = buildButton(icons.close_dark, 'Close')
close:connect_signal('button::release', function() dashboard_hide() end)
-- Get screen geometry
local screen_geometry = awful.screen.focused().geometry
-- Create the widget
dashboard = wibox({
x = screen_geometry.x,
y = screen_geometry.y,
visible = false,
ontop = true,
type = 'splash',
bg = beautiful.accent.hue_800 .. '66',
height = screen_geometry.height,
width = screen_geometry.width
})
local dashboard_grabber
function dashboard_hide()
awful.keygrabber.stop(dashboard_grabber)
dashboard.visible = false
end
function dashboard_show()
dashboard_grabber = awful.keygrabber.run(
function(_, key, event)
if event == 'release' then return end
if key == 'Escape' or key == 'q' or key == 'x' or key == 'm' then
dashboard_hide()
end
end)
dashboard.visible = true
end
dashboard:buttons(gears.table.join( -- Middle click - Hide dashboard
awful.button({}, 2, function() dashboard_hide() end),
awful.button({}, 3, function() dashboard_hide() end)))
local profile_picture = os.getenv("HOME") ..
"/.face"
local profile = wibox.widget {
wibox.widget {
{
{
{
{
image = profile_picture,
resize = true,
widget = wibox.widget.imagebox
},
resize = true,
top = dpi(12),
right = dpi(12),
left = dpi(12),
widget = wibox.container.margin
},
bg = beautiful.groups_bg,
shape = panel_style,
widget = wibox.container.background
},
forced_width = dpi(244),
forced_height = dpi(244),
visible = true,
bg = beautiful.bg_normal,
shape = panel_style,
widget = wibox.container.background
},
wibox.widget {
{
wibox.widget {
text = '@' .. username,
font = beautiful.font_large,
align = 'center',
valign = 'center',
widget = wibox.widget.textbox
},
bottom = dpi(8),
widget = wibox.container.margin
},
fg = beautiful.primary.hue_500,
widget = wibox.container.background
},
layout = wibox.layout.fixed.vertical
},
visible = true,
bg = beautiful.bg_normal,
shape = panel_style,
widget = wibox.container.background
}
local power_options = wibox.widget {
{
poweroff,
reboot,
suspend,
exit,
lock,
layout = wibox.layout.flex.horizontal
},
visible = true,
bg = beautiful.primary.hue_900,
shape = panel_style,
widget = wibox.container.background
}
local search_button = wibox.widget {
{
search,
bg = beautiful.primary.hue_600,
layout = wibox.layout.fixed.vertical
},
visible = true,
bg = beautiful.primary.hue_200,
shape = panel_style,
widget = wibox.container.background
}
local close_button = wibox.widget {
{
close,
bg = beautiful.primary.hue_600,
layout = wibox.layout.fixed.vertical
},
visible = true,
bg = beautiful.primary.hue_350,
shape = panel_style,
widget = wibox.container.background
}
local quick_settings = wibox.widget {
{
{
require('layout.left-panel.dashboard.quick-settings'),
right = dpi(16),
bottom = dpi(12),
top = dpi(12),
widget = wibox.container.margin
},
visible = true,
bg = beautiful.bg_normal,
shape = panel_style,
widget = wibox.container.background
},
bg = beautiful.bg_normal,
shape = panel_style,
widget = wibox.container.background
}
local hardware_monitor = wibox.widget {
{
require('layout.left-panel.dashboard.hardware-monitor'),
right = dpi(16),
bottom = dpi(12),
top = dpi(12),
widget = wibox.container.margin
},
visible = true,
bg = beautiful.bg_normal,
shape = panel_style,
widget = wibox.container.background
}
local cal = require('widget.calendar')
--[[local calwidget = wibox.widget {
{
nil,
{cal, margins = dpi(16), widget = wibox.container.margin},
nil,
layout = wibox.layout.flex.horizontal
},
resize = true,
shape = panel_style,
bg = beautiful.bg_normal,
widget = wibox.container.background
}]]
-- Fortune widget Credits: u/EmpressNoodle, github/elenapan
local fortune_command = "fortune -n 140 -s"
local fortune_update_interval = 3600
-- local fortune_command = "fortune -n 140 -s computers"
local fortune = wibox.widget {
font = "Roboto 11",
text = "You so poor you don't even have a cookie yet...",
widget = wibox.widget.textbox
}
local update_fortune = function()
awful.spawn.easy_async_with_shell(fortune_command, function(out)
-- Remove trailing whitespaces
out = out:gsub('^%s*(.-)%s*$', '%1')
fortune.markup = "<i>" .. out .. "</i>"
end)
end
gears.timer {
autostart = true,
timeout = fortune_update_interval,
single_shot = false,
call_now = true,
callback = update_fortune
}
local fortune_widget = wibox.widget {
{
{fortune, layout = wibox.layout.flex.horizontal},
margins = dpi(16),
widget = wibox.container.margin
},
bg = beautiful.primary.hue_700,
fg = beautiful.primary.hue_900,
shape = panel_style,
forced_height = dpi(112),
widget = wibox.container.background
}
local uptime_text = wibox.widget.textbox()
uptime_text.font = "Roboto 10"
uptime_text.valign = "center"
awful.widget.watch("uptime -p | sed 's/^...//'", 60, function(_, stdout)
local out = stdout:gsub('^%s*(.-)%s*up', '%1')
uptime_text.text = out
end)
local uptime_widget = wibox.widget {
{
{
{
image = icons.uptime,
resize = true,
forced_width = dpi(24),
widget = wibox.widget.imagebox
},
uptime_text,
spacing = dpi(8),
layout = wibox.layout.fixed.horizontal
},
margins = dpi(16),
widget = wibox.container.margin
},
bg = beautiful.bg_normal,
shape = panel_style,
forced_height = dpi(48),
forced_width = dpi(182),
widget = wibox.container.background
}
-- Bookmarks
function reddit_command()
dashboard_hide()
awful.spawn(apps.default.browser .. " " .. "reddit.com")
end
function youtube_command()
dashboard_hide()
awful.spawn(apps.default.browser .. " " .. "youtube.com")
end
function linkedin_command()
dashboard_hide()
awful.spawn(apps.default.browser .. " " .. "linkedin.com")
end
function github_command()
dashboard_hide()
awful.spawn(apps.default.browser .. " " .. "github.com")
end
function deviantart_command()
dashboard_hide()
awful.spawn(apps.default.browser .. " " .. "deviantart.com")
end
function codeforces_command()
dashboard_hide()
awful.spawn(apps.default.browser .. " " .. "codeforces.com")
end
function files_command(directory)
dashboard_hide()
awful.spawn(apps.default.files .. " " .. directory)
end
local reddit = buildButton(icons.reddit, 'Reddit')
reddit:connect_signal('button::release', function() reddit_command() end)
local youtube = buildButton(icons.youtube, 'Youtube')
youtube:connect_signal('button::release', function() youtube_command() end)
local linkedin = buildButton(icons.linkedin, 'Linkedin')
linkedin:connect_signal('button::release', function() linkedin_command() end)
local github = buildButton(icons.github, 'Github')
github:connect_signal('button::release', function() github_command() end)
local deviantart = buildButton(icons.deviantart, 'Deviantart')
deviantart:connect_signal('button::release', function() deviantart_command() end)
local codeforces = buildButton(icons.codeforces, 'Codeforces')
codeforces:connect_signal('button::release', function() codeforces_command() end)
local home = buildLabel('Home')
home:connect_signal('button::release', function() files_command(".") end)
local downloads = buildLabel('Downloads')
downloads:connect_signal('button::release',
function() files_command("Downloads") end)
local desktop = buildLabel('Desktop')
desktop:connect_signal('button::release',
function() files_command("Desktop") end)
local pictures = buildLabel('Pictures')
pictures:connect_signal('button::release',
function() files_command("Pictures") end)
local videos = buildLabel('Videos')
videos:connect_signal('button::release', function() files_command("Videos") end)
local documents = buildLabel('Documents')
documents:connect_signal('button::release',
function() files_command("Documents") end)
local bookmarks = wibox.widget {
{
{reddit, youtube, linkedin, layout = wibox.layout.flex.horizontal},
{github, deviantart, codeforces, layout = wibox.layout.ratio.horizontal},
layout = wibox.layout.fixed.vertical
},
visible = true,
bg = beautiful.bg_normal,
shape = panel_style,
forced_width = dpi(182),
widget = wibox.container.background
}
local places = wibox.widget {
{
{
home,
desktop,
downloads,
pictures,
documents,
videos,
layout = wibox.layout.fixed.vertical
},
layout = wibox.layout.fixed.vertical
},
visible = true,
bg = beautiful.bg_normal,
shape = panel_style,
forced_width = dpi(182),
widget = wibox.container.background
}
-- Item placement
dashboard:setup{
nil,
{
nil,
{
{
search_button,
close_button,
spacing = dpi(10),
layout = wibox.layout.fixed.vertical
},
{
{
{
quick_settings,
hardware_monitor,
fortune_widget,
forced_width = dpi(300),
spacing = dpi(10),
layout = wibox.layout.fixed.vertical
},
{
bookmarks,
places,
spacing = dpi(10),
layout = wibox.layout.fixed.vertical
},
spacing = dpi(10),
layout = wibox.layout.fixed.horizontal
},
{
power_options,
uptime_widget,
spacing = dpi(10),
layout = wibox.layout.fixed.horizontal
},
spacing = dpi(10),
layout = wibox.layout.fixed.vertical
},
{
profile,
calWidget,
spacing = dpi(10),
layout = wibox.layout.fixed.vertical
},
spacing = dpi(10),
layout = wibox.layout.fixed.horizontal
},
nil,
expand = 'none',
layout = wibox.layout.align.horizontal
},
{nil, expand = 'none', layout = wibox.layout.align.horizontal},
expand = 'none',
layout = wibox.layout.align.vertical
}

View File

@ -0,0 +1,93 @@
local awful = require('awful')
local gears = require('gears')
local beautiful = require('beautiful')
local dpi = require('beautiful').xresources.apply_dpi
local function renderClient(client, mode)
if client.skip_decoration or (client.rendering_mode == mode) then
return
end
client.rendering_mode = mode
client.floating = false
client.maximized = false
client.above = false
client.below = false
client.ontop = false
client.sticky = false
client.maximized_horizontal = false
client.maximized_vertical = false
client.border_width = beautiful.border_width
client.shape = function(cr, w, h)
gears.shape.rectangle(cr, w, h)
end
end
local changesOnScreenCalled = false
local function changesOnScreen(currentScreen)
local tagIsMax = currentScreen.selected_tag ~= nil and currentScreen.selected_tag.layout == awful.layout.suit.max
local clientsToManage = {}
for _, client in pairs(currentScreen.clients) do
if not client.skip_decoration and not client.hidden then
table.insert(clientsToManage, client)
end
end
if (tagIsMax or #clientsToManage == 1) then
currentScreen.client_mode = 'maximized'
else
currentScreen.client_mode = 'tiled'
end
for _, client in pairs(clientsToManage) do
renderClient(client, currentScreen.client_mode)
end
changesOnScreenCalled = false
end
function clientCallback(client)
if not changesOnScreenCalled then
if not client.skip_decoration and client.screen then
changesOnScreenCalled = true
local screen = client.screen
gears.timer.delayed_call(function()
changesOnScreen(screen)
end)
end
end
end
function tagCallback(tag)
if not changesOnScreenCalled then
if tag.screen then
changesOnScreenCalled = true
local screen = tag.screen
gears.timer.delayed_call(function()
changesOnScreen(screen)
end)
end
end
end
_G.client.connect_signal('manage', clientCallback)
_G.client.connect_signal('unmanage', clientCallback)
_G.client.connect_signal('property::hidden', clientCallback)
_G.client.connect_signal('property::minimized', clientCallback)
_G.client.connect_signal('property::fullscreen', function(c)
if c.fullscreen then
renderClient(c, 'maximized')
else
clientCallback(c)
end
end)
_G.tag.connect_signal('property::selected', tagCallback)
_G.tag.connect_signal('property::layout', tagCallback)

View File

@ -0,0 +1,201 @@
local awful = require('awful')
local gears = require('gears')
local wibox = require('wibox')
local beautiful = require('beautiful')
local icons = require('theme.icons')
local clickable_container = require('widget.material.clickable-container')
local apps = require('configuration.apps')
local dpi = require('beautiful').xresources.apply_dpi
-- Appearance
local icon_size = beautiful.exit_screen_icon_size or dpi(140)
local buildButton = function(icon)
local abutton =
wibox.widget {
wibox.widget {
wibox.widget {
wibox.widget {
image = icon,
widget = wibox.widget.imagebox
},
top = dpi(16),
bottom = dpi(16),
left = dpi(16),
right = dpi(16),
widget = wibox.container.margin
},
shape = gears.shape.circle,
forced_width = icon_size,
forced_height = icon_size,
widget = clickable_container
},
left = dpi(24),
right = dpi(24),
widget = wibox.container.margin
}
return abutton
end
function suspend_command()
exit_screen_hide()
awful.spawn.with_shell(apps.default.lock .. ' & systemctl suspend')
end
function exit_command()
_G.awesome.quit()
end
function lock_command()
exit_screen_hide()
awful.spawn.with_shell('sleep 1 && ' .. apps.default.lock)
end
function poweroff_command()
awful.spawn.with_shell('poweroff')
awful.keygrabber.stop(_G.exit_screen_grabber)
end
function reboot_command()
awful.spawn.with_shell('reboot')
awful.keygrabber.stop(_G.exit_screen_grabber)
end
local poweroff = buildButton(icons.power, 'Shutdown')
poweroff:connect_signal(
'button::release',
function()
poweroff_command()
end
)
local reboot = buildButton(icons.restart, 'Restart')
reboot:connect_signal(
'button::release',
function()
reboot_command()
end
)
local suspend = buildButton(icons.sleep, 'Sleep')
suspend:connect_signal(
'button::release',
function()
suspend_command()
end
)
local exit = buildButton(icons.logout, 'Logout')
exit:connect_signal(
'button::release',
function()
exit_command()
end
)
local lock = buildButton(icons.lock, 'Lock')
lock:connect_signal(
'button::release',
function()
lock_command()
end
)
-- Get screen geometry
local screen_geometry = awful.screen.focused().geometry
-- Create the widget
exit_screen =
wibox(
{
x = screen_geometry.x,
y = screen_geometry.y,
visible = false,
ontop = true,
type = 'splash',
height = screen_geometry.height,
width = screen_geometry.width
}
)
exit_screen.bg = '#212121CC'
--exit_screen.fg = beautiful.exit_screen_fg or beautiful.wibar_fg or '#FEFEFE'
local exit_screen_grabber
function exit_screen_hide()
awful.keygrabber.stop(exit_screen_grabber)
exit_screen.visible = false
end
function exit_screen_show()
-- naughty.notify({text = "starting the keygrabber"})
exit_screen_grabber =
awful.keygrabber.run(
function(_, key, event)
if event == 'release' then
return
end
if key == 's' then
suspend_command()
elseif key == 'e' then
exit_command()
elseif key == 'l' then
lock_command()
elseif key == 'p' then
poweroff_command()
elseif key == 'r' then
reboot_command()
elseif key == 'Escape' or key == 'q' or key == 'x' then
-- naughty.notify({text = "Cancel"})
exit_screen_hide()
-- else awful.keygrabber.stop(exit_screen_grabber)
end
end
)
exit_screen.visible = true
end
exit_screen:buttons(
gears.table.join(
-- Middle click - Hide exit_screen
awful.button(
{},
2,
function()
exit_screen_hide()
end
),
-- Right click - Hide exit_screen
awful.button(
{},
3,
function()
exit_screen_hide()
end
)
)
)
-- Item placement
exit_screen:setup {
nil,
{
nil,
{
-- {
poweroff,
reboot,
suspend,
exit,
lock,
layout = wibox.layout.fixed.horizontal
-- },
-- widget = exit_screen_box
},
nil,
expand = 'none',
layout = wibox.layout.align.horizontal
},
nil,
expand = 'none',
layout = wibox.layout.align.vertical
}

View File

@ -0,0 +1,53 @@
local naughty = require('naughty')
local beautiful = require('beautiful')
local gears = require('gears')
local dpi = require('beautiful').xresources.apply_dpi
-- Naughty presets
naughty.config.padding = 8
naughty.config.spacing = 8
naughty.config.defaults.timeout = 10
naughty.config.defaults.screen = 1
naughty.config.defaults.position = 'top_right'
naughty.config.defaults.margin = dpi(16)
naughty.config.defaults.ontop = true
naughty.config.defaults.font = beautiful.font
--naughty.config.defaults.icon = nil
naughty.config.defaults.icon_size = dpi(32)
naughty.config.defaults.shape = gears.shape.rounded_rect
naughty.config.defaults.border_width = dpi(0)
naughty.config.defaults.hover_timeout = nil
-- Error handling
if _G.awesome.startup_errors then
naughty.notify({
preset = naughty.config.presets.critical,
title = 'Oops, there were errors during startup!',
text = _G.awesome.startup_errors
})
end
do
local in_error = false
_G.awesome.connect_signal('debug::error', function(err)
if in_error then
return
end
in_error = true
naughty.notify({
preset = naughty.config.presets.critical,
title = 'Oops, an error happened!',
text = tostring(err)
})
in_error = false
end)
end
function log_this(title, txt)
naughty.notify({
title = 'log: ' .. title,
text = txt
})
end

View File

@ -0,0 +1,79 @@
local awful = require('awful')
local app = require('configuration.apps').default.splash
local dpi = require('beautiful').xresources.apply_dpi
local beautiful = require('beautiful')
local screen = awful.screen.focused()
-- Theme
beautiful.init(require('theme'))
local splash_id = 'notnil'
local splash_client
local opened = false
function create_shell()
splash_id = awful.spawn.with_shell(app)
end
-- Dirty hack to prevent splash from showing up in occupied tags
function _splash_to_current_tag()
if splash_client then
splash_client:move_to_tag(screen.selected_tag)
end
end
function open_splash()
splash_client.hidden = false
end
function close_splash()
splash_client.hidden = true
end
toggle_splash_height = function()
if splash_client and opened then
splash_client.maximized_vertical = not splash_client.maximized_vertical
end
end
toggle_splash = function()
opened = not opened
if not splash_client then
create_shell()
else
if opened then
open_splash()
client.focus = splash_client
splash_client:raise()
else
close_splash()
end
end
end
_G.client.connect_signal('manage', function(c)
if (c.pid == splash_id) then
splash_client = c
c.x = c.screen.geometry.x
c.height = (c.screen.geometry.height / 5) * 3
c.y = c.screen.geometry.height - c.height - beautiful.border_width - dpi(16)
c.floating = true
c.skip_taskbar = true
c.skip_decoration = true
c.ontop = true
c.floating = true
c.above = true
c.sticky = true
c.type = 'splash'
c.hidden = not opened
c.border_width = beautiful.border_width
c.maximized_horizontal = true
end
end)
_G.client.connect_signal('unmanage', function(c)
if (c.pid == splash_id) then
opened = false
splash_client = nil
end
end)

53
rc.lua 100644
View File

@ -0,0 +1,53 @@
require('awful.autofocus')
local gears = require('gears')
local awful = require('awful')
local naughty = require('naughty')
local beautiful = require('beautiful')
-- Theme
beautiful.init(require('theme'))
-- Layout
require('layout')
-- Init all modules
require('module.notifications')
require('module.auto-start')
require('module.decorate-client')
require('module.splash-terminal')
require('module.exit-screen')
require('module.dashboard')
-- Setup all configurations
require('configuration.client')
require('configuration.tags')
_G.root.keys(require('configuration.keys.global'))
-- Signal function to execute when a new client appears.
_G.client.connect_signal('manage', function(c)
-- Set the windows at the slave,
-- i.e. put it at the end of others instead of setting it master.
if not _G.awesome.startup then
awful.client.setslave(c)
end
if _G.awesome.startup and not c.size_hints.user_position and not c.size_hints.program_position then
-- Prevent clients from being unreachable after screen count changes.
awful.placement.no_offscreen(c)
end
end)
--[[ Enable sloppy focus, so that focus follows mouse.
_G.client.connect_signal('mouse::enter', function(c)
c:emit_signal('request::activate', 'mouse_enter', {raise = true})
end)
--]]
-- Make the focused window have a glowing border
_G.client.connect_signal('focus', function(c)
c.border_color = beautiful.border_focus
end)
_G.client.connect_signal('unfocus', function(c)
c.border_color = beautiful.border_normal
end)

View File

@ -0,0 +1,67 @@
return {
dracula = {
primary = {
hue_100 = '#282a36',
hue_200 = '#44475a'
},
accent = {
hue_100 = '#f1fa8c',
hue_200 = '#50fa7b',
hue_300 = '#8be9fd',
hue_400 = '#ff5555',
hue_500 = '#6272a4',
hue_600 = '#ff79c6',
hue_700 = '#ffb86c',
hue_800 = '#f8f8f2',
}
},
gruvbox = {
primary = {
hue_100 = '#282828',
hue_200 = '#3c3c3c'
},
accent = {
hue_100 = '#fe8019',
hue_200 = '#fabd2f',
hue_300 = '#8ec07c',
hue_400 = '#fb4934',
hue_500 = '#d3869b',
hue_600 = '#b8bb26',
hue_700 = '#458588',
hue_800 = '#fbf1c7',
}
},
gruvbox_material = {
primary = {
hue_100 = '#212121',
hue_200 = '#3c3c3c'
},
accent = {
hue_100 = '#e1be7f', -- orange-ish
hue_200 = '#92c96a', -- green - MAIN
hue_300 = '#66aeea', -- light blue
hue_400 = '#f35a5a', -- light red
hue_500 = '#4083bc', -- dark blue
hue_600 = '#c57cda', -- light magenta
hue_700 = '#cd996a', -- light brown
hue_800 = '#d6d6d6', -- light gray
}
},
flat_remix_teal = {
primary = {
hue_100 = '#212121',
hue_200 = '#3c3c3c'
},
accent = {
hue_100 = '#e1be7f', -- orange-ish
hue_200 = '#458ECC', -- green - MAIN
--hue_200 = '#06A284', -- green - MAIN
hue_300 = '#66aeea', -- light blue
hue_400 = '#f35a5a', -- light red
hue_500 = '#4083bc', -- dark blue
hue_600 = '#c57cda', -- light magenta
hue_700 = '#25B29B', -- light brown
hue_800 = '#d6d6d6', -- light gray
}
}
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M12,8A4,4 0 0,0 8,12A4,4 0 0,0 12,16A4,4 0 0,0 16,12A4,4 0 0,0 12,8M12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6A6,6 0 0,1 18,12A6,6 0 0,1 12,18M20,8.69V4H15.31L12,0.69L8.69,4H4V8.69L0.69,12L4,15.31V20H8.69L12,23.31L15.31,20H20V15.31L23.31,12L20,8.69Z" /></svg>

After

Width:  |  Height:  |  Size: 554 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M17.45,15.18L22,7.31V19L22,21H2V3H4V15.54L9.5,6L16,9.78L20.24,2.45L21.97,3.45L16.74,12.5L10.23,8.75L4.31,19H6.57L10.96,11.44L17.45,15.18Z" /></svg>

After

Width:  |  Height:  |  Size: 449 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" /></svg>

After

Width:  |  Height:  |  Size: 421 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M8,3A2,2 0 0,0 6,5V9A2,2 0 0,1 4,11H3V13H4A2,2 0 0,1 6,15V19A2,2 0 0,0 8,21H10V19H8V14A2,2 0 0,0 6,12A2,2 0 0,0 8,10V5H10V3M16,3A2,2 0 0,1 18,5V9A2,2 0 0,0 20,11H21V13H20A2,2 0 0,0 18,15V19A2,2 0 0,1 16,21H14V19H16V14A2,2 0 0,1 18,12A2,2 0 0,1 16,10V5H14V3H16Z" /></svg>

After

Width:  |  Height:  |  Size: 572 B

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="9.7 16.5 280 266"
version="1.1"
id="svg4"
sodipodi:docname="firefox.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1872"
inkscape:window-height="1032"
id="namedview6"
showgrid="false"
inkscape:zoom="3.1541353"
inkscape:cx="140"
inkscape:cy="133"
inkscape:window-x="48"
inkscape:window-y="48"
inkscape:window-maximized="0"
inkscape:current-layer="svg4" />
<path
d="M288.9 113.8c-1.4 3.5-2.5 7.1-3.9 10.6-1-14.7-3.4-29.3-8.1-43.2-3.2-8.6-6.9-17.2-13.3-23.9.9 8.2 3 16.2 2.8 24.5-1.8-6.3-3.9-12.7-7.7-18.1-8.2-12.7-21.5-21.3-35.7-25.9-3.7-1.2-7.6-1.9-10.9-3.9-20.4-11.9-44.2-17.8-67.8-17.2-30.7.4-60.9 12.5-83.4 33.3-3.5 3.3-6.7 6.9-10.2 10.3-6.1-7.1-9.2-16.1-9.6-25.4-5.5 4.7-8.7 11.5-11 18.2-3.2 9.4-4.9 19.4-3.9 29.3.1 2.2.7 4.6-.8 6.5-7.8 11.4-14.1 24.4-15.6 38.3 2.5-1.7 4.9-3.5 7.4-5.2-1 5-2.4 10-3.2 15.1-3.5 24.5 1 50 12.7 71.9 12.8 23.6 32.6 43.1 55.9 56.4 26.2 14.9 57.5 20.4 87.3 15.6 26-4.3 51.2-15.7 69.8-34.6 13.2-13.4 24.7-28.5 33-45.4 13.6-26.8 19.3-57.5 16.2-87.2m-48.7 38.4c-2.7-5.5-4.1-12-9.3-15.8 1.3 13.8 1.9 27.8-1.2 41.4-1.9 9.2-6 18.1-12.7 24.8 1.2-6.6 2.3-13.3 1.9-20-9.7 13.1-21.4 25.2-36.3 32.3-12.6 6.1-27.5 5.8-40.7 1.7-12-3.9-22.4-11.3-31.6-19.7h3.2c9 .6 18.1-.7 26.7-3.2 8.6-2.5 15-8.9 22.5-13.4 3.5-2.1 7.9-1.2 11.7-2.3 2.4-1.3 3.2-4.8 1-6.7-5.6-6.1-13.7-11-22.2-10-8.2 1.2-14.9 6.8-23 8.7-5.8 1-11.7-.8-16.8-3.4-7.3-3.7-12.8-9.9-18-16l-2.3-1.9c0-.9 0-1.9.1-2.8.5-2.5 1.9-4.7 3.1-7l1.4-2.8c8.1.6 16.1 1.9 24 3.9-.1-7.5-.6-16-5.2-22.2l1.6-1.2c5.1-4 9.8-8.7 15.5-11.8 2.3-1.2 4.4-2.8 6.1-4.7l.4-3.4h-.1c.1-1.3-.1-2.7-.1-4-2.8-.3-5.6-.5-8.5-.5l-7.8-.5c-.6-.4-1.2-.8-1.8-1.1-5.3-3.3-9.9-7.7-14.9-11.4l-2-1.8.3-2.7c1.9-12.5 11.1-22.3 20.7-29.8-6.8 1-13.5 2.9-19.6 6C99.9 54 94.4 58.7 89 63.3c-10.9-2.8-22.6-1.1-33 2.9-5.1 2.3-9.7 5.7-14.7 8.3 3.2-3.2 6.9-5.7 10.5-8.5 3.2-2.4 5.6-5.7 8.4-8.5 20.8-21.4 49.9-34.3 79.6-35.8 19.7-1 40 2.1 57.8 10.8-4.8-.2-9.5-.5-14.3-.4 10.7 3.2 23.2 6.6 29.2 17-5.5.2-11.1.3-16.4 2.1 15.3 5.9 30.7 13.2 42.1 25.4 6.8 7.3 11.5 16.8 11.3 27-3.6-2.7-7.3-5.2-11.3-7.2 4.3 18.1 7 37.4 2 55.8"
id="path2"
style="fill:#ffffff" />
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M6,22A3,3 0 0,1 3,19C3,18.4 3.18,17.84 3.5,17.37L9,7.81V6A1,1 0 0,1 8,5V4A2,2 0 0,1 10,2H14A2,2 0 0,1 16,4V5A1,1 0 0,1 15,6V7.81L20.5,17.37C20.82,17.84 21,18.4 21,19A3,3 0 0,1 18,22H6M5,19A1,1 0 0,0 6,20H18A1,1 0 0,0 19,19C19,18.79 18.93,18.59 18.82,18.43L16.53,14.47L14,17L8.93,11.93L5.18,18.43C5.07,18.59 5,18.79 5,19M13,10A1,1 0 0,0 12,11A1,1 0 0,0 13,12A1,1 0 0,0 14,11A1,1 0 0,0 13,10Z" /></svg>

After

Width:  |  Height:  |  Size: 702 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z" /></svg>

After

Width:  |  Height:  |  Size: 405 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M17,12V3A1,1 0 0,0 16,2H3A1,1 0 0,0 2,3V17L6,13H16A1,1 0 0,0 17,12M21,6H19V15H6V17A1,1 0 0,0 7,18H18L22,22V7A1,1 0 0,0 21,6Z" /></svg>

After

Width:  |  Height:  |  Size: 436 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M12,20L15.46,14H15.45C15.79,13.4 16,12.73 16,12C16,10.8 15.46,9.73 14.62,9H19.41C19.79,9.93 20,10.94 20,12A8,8 0 0,1 12,20M4,12C4,10.54 4.39,9.18 5.07,8L8.54,14H8.55C9.24,15.19 10.5,16 12,16C12.45,16 12.88,15.91 13.29,15.77L10.89,19.91C7,19.37 4,16.04 4,12M15,12A3,3 0 0,1 12,15A3,3 0 0,1 9,12A3,3 0 0,1 12,9A3,3 0 0,1 15,12M12,4C14.96,4 17.54,5.61 18.92,8H12C10.06,8 8.45,9.38 8.08,11.21L5.7,7.08C7.16,5.21 9.44,4 12,4M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" /></svg>

After

Width:  |  Height:  |  Size: 807 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M7.97,16L5,19C4.67,19.3 4.23,19.5 3.75,19.5A1.75,1.75 0 0,1 2,17.75V17.5L3,10.12C3.21,7.81 5.14,6 7.5,6H16.5C18.86,6 20.79,7.81 21,10.12L22,17.5V17.75A1.75,1.75 0 0,1 20.25,19.5C19.77,19.5 19.33,19.3 19,19L16.03,16H7.97M7,8V10H5V11H7V13H8V11H10V10H8V8H7M16.5,8A0.75,0.75 0 0,0 15.75,8.75A0.75,0.75 0 0,0 16.5,9.5A0.75,0.75 0 0,0 17.25,8.75A0.75,0.75 0 0,0 16.5,8M14.75,9.75A0.75,0.75 0 0,0 14,10.5A0.75,0.75 0 0,0 14.75,11.25A0.75,0.75 0 0,0 15.5,10.5A0.75,0.75 0 0,0 14.75,9.75M18.25,9.75A0.75,0.75 0 0,0 17.5,10.5A0.75,0.75 0 0,0 18.25,11.25A0.75,0.75 0 0,0 19,10.5A0.75,0.75 0 0,0 18.25,9.75M16.5,11.5A0.75,0.75 0 0,0 15.75,12.25A0.75,0.75 0 0,0 16.5,13A0.75,0.75 0 0,0 17.25,12.25A0.75,0.75 0 0,0 16.5,11.5Z" /></svg>

After

Width:  |  Height:  |  Size: 1023 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M6,2H18A2,2 0 0,1 20,4V20A2,2 0 0,1 18,22H6A2,2 0 0,1 4,20V4A2,2 0 0,1 6,2M12,4A6,6 0 0,0 6,10C6,13.31 8.69,16 12.1,16L11.22,13.77C10.95,13.29 11.11,12.68 11.59,12.4L12.45,11.9C12.93,11.63 13.54,11.79 13.82,12.27L15.74,14.69C17.12,13.59 18,11.9 18,10A6,6 0 0,0 12,4M12,9A1,1 0 0,1 13,10A1,1 0 0,1 12,11A1,1 0 0,1 11,10A1,1 0 0,1 12,9M7,18A1,1 0 0,0 6,19A1,1 0 0,0 7,20A1,1 0 0,0 8,19A1,1 0 0,0 7,18M12.09,13.27L14.58,19.58L17.17,18.08L12.95,12.77L12.09,13.27Z" /></svg>

After

Width:  |  Height:  |  Size: 771 B

View File

@ -0,0 +1,29 @@
local dir = os.getenv('HOME') .. '/.config/awesome/theme/icons'
return {
--tags
chrome = dir .. '/firefox.svg',
code = dir .. '/code-braces.svg',
social = dir .. '/forum.svg',
folder = dir .. '/folder.svg',
music = dir .. '/music.svg',
game = dir .. '/google-controller.svg',
lab = dir .. '/flask.svg',
play = dir .. '/play.svg',
--others
menu = dir .. '/menu.svg',
close = dir .. '/close.svg',
logout = dir .. '/logout.svg',
sleep = dir .. '/power-sleep.svg',
power = dir .. '/power.svg',
lock = dir .. '/lock.svg',
restart = dir .. '/restart.svg',
search = dir .. '/magnify.svg',
volume = dir .. '/volume-high.svg',
brightness = dir .. '/brightness-7.svg',
chart = dir .. '/chart-areaspline.svg',
memory = dir .. '/memory.svg',
harddisk = dir .. '/harddisk.svg',
thermometer = dir .. '/thermometer.svg',
plus = dir .. '/plus.svg'
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M12,17A2,2 0 0,0 14,15C14,13.89 13.1,13 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6A2,2 0 0,1 4,20V10C4,8.89 4.9,8 6,8H7V6A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,3A3,3 0 0,0 9,6V8H15V6A3,3 0 0,0 12,3Z" /></svg>

After

Width:  |  Height:  |  Size: 547 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M16,17V14H9V10H16V7L21,12L16,17M14,2A2,2 0 0,1 16,4V6H14V4H5V20H14V18H16V20A2,2 0 0,1 14,22H5A2,2 0 0,1 3,20V4A2,2 0 0,1 5,2H14Z" /></svg>

After

Width:  |  Height:  |  Size: 440 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z" /></svg>

After

Width:  |  Height:  |  Size: 569 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M17,17H7V7H17M21,11V9H19V7C19,5.89 18.1,5 17,5H15V3H13V5H11V3H9V5H7C5.89,5 5,5.89 5,7V9H3V11H5V13H3V15H5V17A2,2 0 0,0 7,19H9V21H11V19H13V21H15V19H17A2,2 0 0,0 19,17V15H21V13H19V11M13,13H11V11H13M15,9H9V15H15V9Z" /></svg>

After

Width:  |  Height:  |  Size: 522 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z" /></svg>

After

Width:  |  Height:  |  Size: 358 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M21,3V15.5A3.5,3.5 0 0,1 17.5,19A3.5,3.5 0 0,1 14,15.5A3.5,3.5 0 0,1 17.5,12C18.04,12 18.55,12.12 19,12.34V6.47L9,8.6V17.5A3.5,3.5 0 0,1 5.5,21A3.5,3.5 0 0,1 2,17.5A3.5,3.5 0 0,1 5.5,14C6.04,14 6.55,14.12 7,14.34V6L21,3Z" /></svg>

After

Width:  |  Height:  |  Size: 532 B

View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Capa_1"
x="0px"
y="0px"
width="163.861px"
height="163.861px"
viewBox="0 0 163.861 163.861"
style="enable-background:new 0 0 163.861 163.861;"
xml:space="preserve"
sodipodi:docname="play-button-arrowhead.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
id="metadata41"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs39" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="920"
inkscape:window-height="500"
id="namedview37"
showgrid="false"
inkscape:zoom="0.55861271"
inkscape:cx="105.18391"
inkscape:cy="152.94358"
inkscape:window-x="988"
inkscape:window-y="568"
inkscape:window-maximized="0"
inkscape:current-layer="Capa_1" />
<g
id="g4"
style="fill:#ffffff">
<path
d="M34.857,3.613C20.084-4.861,8.107,2.081,8.107,19.106v125.637c0,17.042,11.977,23.975,26.75,15.509L144.67,97.275 c14.778-8.477,14.778-22.211,0-30.686L34.857,3.613z"
id="path2"
style="fill:#ffffff" />
</g>
<g
id="g6">
</g>
<g
id="g8">
</g>
<g
id="g10">
</g>
<g
id="g12">
</g>
<g
id="g14">
</g>
<g
id="g16">
</g>
<g
id="g18">
</g>
<g
id="g20">
</g>
<g
id="g22">
</g>
<g
id="g24">
</g>
<g
id="g26">
</g>
<g
id="g28">
</g>
<g
id="g30">
</g>
<g
id="g32">
</g>
<g
id="g34">
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z" /></svg>

After

Width:  |  Height:  |  Size: 353 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M18.73,18C15.4,21.69 9.71,22 6,18.64C2.33,15.31 2.04,9.62 5.37,5.93C6.9,4.25 9,3.2 11.27,3C7.96,6.7 8.27,12.39 12,15.71C13.63,17.19 15.78,18 18,18C18.25,18 18.5,18 18.73,18Z" /></svg>

After

Width:  |  Height:  |  Size: 485 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M16.56,5.44L15.11,6.89C16.84,7.94 18,9.83 18,12A6,6 0 0,1 12,18A6,6 0 0,1 6,12C6,9.83 7.16,7.94 8.88,6.88L7.44,5.44C5.36,6.88 4,9.28 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12C20,9.28 18.64,6.88 16.56,5.44M13,3H11V13H13" /></svg>

After

Width:  |  Height:  |  Size: 526 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M12,4C14.1,4 16.1,4.8 17.6,6.3C20.7,9.4 20.7,14.5 17.6,17.6C15.8,19.5 13.3,20.2 10.9,19.9L11.4,17.9C13.1,18.1 14.9,17.5 16.2,16.2C18.5,13.9 18.5,10.1 16.2,7.7C15.1,6.6 13.5,6 12,6V10.6L7,5.6L12,0.6V4M6.3,17.6C3.7,15 3.3,11 5.1,7.9L6.6,9.4C5.5,11.6 5.9,14.4 7.8,16.2C8.3,16.7 8.9,17.1 9.6,17.4L9,19.4C8,19 7.1,18.4 6.3,17.6Z" /></svg>

After

Width:  |  Height:  |  Size: 635 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M2,11L4.05,11.1C4.3,8.83 5.5,6.85 7.25,5.56L6.13,3.84C5.86,3.36 6,2.75 6.5,2.47C7,2.2 7.59,2.36 7.87,2.84L8.8,4.66C9.78,4.24 10.86,4 12,4C13.14,4 14.22,4.24 15.2,4.66L16.13,2.84C16.41,2.36 17,2.2 17.5,2.47C18,2.75 18.14,3.36 17.87,3.84L16.75,5.56C18.5,6.85 19.7,8.83 19.95,11.1L22,11A1,1 0 0,1 23,12A1,1 0 0,1 22,13L19.95,12.9C19.7,15.17 18.5,17.15 16.75,18.44L17.87,20.16C18.14,20.64 18,21.25 17.5,21.53C17,21.8 16.41,21.64 16.13,21.16L15.2,19.34C14.22,19.76 13.14,20 12,20C10.86,20 9.78,19.76 8.8,19.34L7.87,21.16C7.59,21.64 7,21.8 6.5,21.53C6,21.25 5.86,20.64 6.13,20.16L7.25,18.44C5.5,17.15 4.3,15.17 4.05,12.9L2,13A1,1 0 0,1 1,12A1,1 0 0,1 2,11M9.07,11.35C9.2,10.74 9.53,10.2 10,9.79L8.34,7.25C7.11,8.19 6.27,9.6 6.05,11.2L9.07,11.35M12,9C12.32,9 12.62,9.05 12.9,9.14L14.28,6.45C13.58,6.16 12.81,6 12,6C11.19,6 10.42,6.16 9.72,6.45L11.1,9.14C11.38,9.05 11.68,9 12,9M14.93,11.35L17.95,11.2C17.73,9.6 16.89,8.19 15.66,7.25L14,9.79C14.47,10.2 14.8,10.74 14.93,11.35M14.93,12.65C14.8,13.26 14.47,13.8 14,14.21L15.66,16.75C16.89,15.81 17.73,14.4 17.95,12.8L14.93,12.65M12,15C11.68,15 11.38,14.95 11.09,14.86L9.72,17.55C10.42,17.84 11.19,18 12,18C12.81,18 13.58,17.84 14.28,17.55L12.91,14.86C12.62,14.95 12.32,15 12,15M9.07,12.65L6.05,12.8C6.27,14.4 7.11,15.81 8.34,16.75L10,14.21C9.53,13.8 9.2,13.26 9.07,12.65Z" /></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 841 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M17,17A5,5 0 0,1 12,22A5,5 0 0,1 7,17C7,15.36 7.79,13.91 9,13V5A3,3 0 0,1 12,2A3,3 0 0,1 15,5V13C16.21,13.91 17,15.36 17,17M11,8V14.17C9.83,14.58 9,15.69 9,17A3,3 0 0,0 12,20A3,3 0 0,0 15,17C15,15.69 14.17,14.58 13,14.17V8H11Z" /></svg>

After

Width:  |  Height:  |  Size: 538 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M14,3.23V5.29C16.89,6.15 19,8.83 19,12C19,15.17 16.89,17.84 14,18.7V20.77C18,19.86 21,16.28 21,12C21,7.72 18,4.14 14,3.23M16.5,12C16.5,10.23 15.5,8.71 14,7.97V16C15.5,15.29 16.5,13.76 16.5,12M3,9V15H7L12,20V4L7,9H3Z" /></svg>

After

Width:  |  Height:  |  Size: 527 B

10
theme/init.lua 100644
View File

@ -0,0 +1,10 @@
local gtable = require('gears.table')
local theme = require('theme.theme')
local final_theme = {}
gtable.crush(final_theme, theme.theme)
gtable.crush(final_theme, theme.theme)
theme.awesome_overrides(final_theme)
theme.awesome_overrides(final_theme)
return final_theme

View File

@ -0,0 +1,317 @@
return {
-- Red
red = {
hue_50 = '#FFEBEE',
hue_100 = '#FFCDD2',
hue_200 = '#EF9A9A',
hue_300 = '#E57373',
hue_400 = '#EF5350',
hue_500 = '#F44336',
hue_600 = '#E53935',
hue_700 = '#D32F2F',
hue_800 = '#C62828',
hue_900 = '#B71C1C',
hue_A100 = '#FF8A80',
hue_A200 = '#FF5252',
hue_A400 = '#FF1744',
hue_A700 = '#D50000'
},
-- Pink
pink = {
hue_50 = '#FCE4EC',
hue_100 = '#F8BBD0',
hue_200 = '#F48FB1',
hue_300 = '#F06292',
hue_400 = '#EC407A',
hue_500 = '#E91E63',
hue_600 = '#D81B60',
hue_700 = '#C2185B',
hue_800 = '#AD1457',
hue_900 = '#880E4F',
hue_A100 = '#FF80AB',
hue_A200 = '#FF4081',
hue_A400 = '#F50057',
hue_A700 = '#C51162'
},
-- Purple
purle = {
hue_50 = '#F3E5F5',
hue_100 = '#E1BEE7',
hue_200 = '#CE93D8',
hue_300 = '#BA68C8',
hue_400 = '#AB47BC',
hue_500 = '#9C27B0',
hue_600 = '#8E24AA',
hue_700 = '#7B1FA2',
hue_800 = '#6A1B9A',
hue_900 = '#4A148C',
hue_A100 = '#EA80FC',
hue_A200 = '#E040FB',
hue_A400 = '#D500F9',
hue_A700 = '#AA00FF'
},
-- Deep Purple
hue_purple = {
hue_50 = '#EDE7F6',
hue_100 = '#D1C4E9',
hue_200 = '#B39DDB',
hue_300 = '#9575CD',
hue_400 = '#7E57C2',
hue_500 = '#673AB7',
hue_600 = '#5E35B1',
hue_700 = '#512DA8',
hue_800 = '#4527A0',
hue_900 = '#311B92',
hue_A100 = '#B388FF',
hue_A200 = '#7C4DFF',
hue_A400 = '#651FFF',
hue_A700 = '#6200EA'
},
-- Indigo
indigo = {
hue_50 = '#E8EAF6',
hue_100 = '#C5CAE9',
hue_200 = '#9FA8DA',
hue_300 = '#7986CB',
hue_400 = '#5C6BC0',
hue_500 = '#3F51B5',
hue_600 = '#3949AB',
hue_700 = '#303F9F',
hue_800 = '#283593',
hue_900 = '#1A237E',
hue_A100 = '#8C9EFF',
hue_A200 = '#536DFE',
hue_A400 = '#3D5AFE',
hue_A700 = '#304FFE'
},
-- Blue
blue = {
hue_50 = '#E3F2FD',
hue_100 = '#BBDEFB',
hue_200 = '#90CAF9',
hue_300 = '#64B5F6',
hue_400 = '#42A5F5',
hue_500 = '#2196F3',
hue_600 = '#1E88E5',
hue_700 = '#1976D2',
hue_800 = '#1565C0',
hue_900 = '#0D47A1',
hue_A100 = '#82B1FF',
hue_A200 = '#448AFF',
hue_A400 = '#2979FF',
hue_A700 = '#2962FF'
},
-- Light Blue
hue_blue = {
hue_50 = '#E1F5FE',
hue_100 = '#B3E5FC',
hue_200 = '#81D4FA',
hue_300 = '#4FC3F7',
hue_400 = '#29B6F6',
hue_500 = '#03A9F4',
hue_600 = '#039BE5',
hue_700 = '#0288D1',
hue_800 = '#0277BD',
hue_900 = '#01579B',
hue_A100 = '#80D8FF',
hue_A200 = '#40C4FF',
hue_A400 = '#00B0FF',
hue_A700 = '#0091EA'
},
-- Cyan
cyan = {
hue_50 = '#E0F7FA',
hue_100 = '#B2EBF2',
hue_200 = '#80DEEA',
hue_300 = '#4DD0E1',
hue_400 = '#26C6DA',
hue_500 = '#00BCD4',
hue_600 = '#00ACC1',
hue_700 = '#0097A7',
hue_800 = '#00838F',
hue_900 = '#006064',
hue_A100 = '#84FFFF',
hue_A200 = '#18FFFF',
hue_A400 = '#00E5FF',
hue_A700 = '#00B8D4'
},
-- Teal
teal = {
hue_50 = '#E0F2F1',
hue_100 = '#B2DFDB',
hue_200 = '#80CBC4',
hue_300 = '#4DB6AC',
hue_400 = '#26A69A',
hue_500 = '#009688',
hue_600 = '#00897B',
hue_700 = '#00796B',
hue_800 = '#00695C',
hue_900 = '#004D40',
hue_A100 = '#A7FFEB',
hue_A200 = '#64FFDA',
hue_A400 = '#1DE9B6',
hue_A700 = '#00BFA5'
},
-- Green
green = {
hue_50 = '#E8F5E9',
hue_100 = '#C8E6C9',
hue_200 = '#A5D6A7',
hue_300 = '#81C784',
hue_400 = '#66BB6A',
hue_500 = '#4CAF50',
hue_600 = '#43A047',
hue_700 = '#388E3C',
hue_800 = '#2E7D32',
hue_900 = '#1B5E20',
hue_A100 = '#B9F6CA',
hue_A200 = '#69F0AE',
hue_A400 = '#00E676',
hue_A700 = '#00C853'
},
-- Light Green
hue_green = {
hue_50 = '#F1F8E9',
hue_100 = '#DCEDC8',
hue_200 = '#C5E1A5',
hue_300 = '#AED581',
hue_400 = '#9CCC65',
hue_500 = '#8BC34A',
hue_600 = '#7CB342',
hue_700 = '#689F38',
hue_800 = '#558B2F',
hue_900 = '#33691E',
hue_A100 = '#CCFF90',
hue_A200 = '#B2FF59',
hue_A400 = '#76FF03',
hue_A700 = '#64DD17'
},
-- Lime
lime = {
hue_50 = '#F9FBE7',
hue_100 = '#F0F4C3',
hue_200 = '#E6EE9C',
hue_300 = '#DCE775',
hue_400 = '#D4E157',
hue_500 = '#CDDC39',
hue_600 = '#C0CA33',
hue_700 = '#AFB42B',
hue_800 = '#9E9D24',
hue_900 = '#827717',
hue_A100 = '#F4FF81',
hue_A200 = '#EEFF41',
hue_A400 = '#C6FF00',
hue_A700 = '#AEEA00'
},
-- Yellow
yellow = {
hue_50 = '#FFFDE7',
hue_100 = '#FFF9C4',
hue_200 = '#FFF59D',
hue_300 = '#FFF176',
hue_400 = '#FFEE58',
hue_500 = '#FFEB3B',
hue_600 = '#FDD835',
hue_700 = '#FBC02D',
hue_800 = '#F9A825',
hue_900 = '#F57F17',
hue_A100 = '#FFFF8D',
hue_A200 = '#FFFF00',
hue_A400 = '#FFEA00',
hue_A700 = '#FFD600'
},
-- Amber
amber = {
hue_50 = '#FFF8E1',
hue_100 = '#FFECB3',
hue_200 = '#FFE082',
hue_300 = '#FFD54F',
hue_400 = '#FFCA28',
hue_500 = '#FFC107',
hue_600 = '#FFB300',
hue_700 = '#FFA000',
hue_800 = '#FF8F00',
hue_900 = '#FF6F00',
hue_A100 = '#FFE57F',
hue_A200 = '#FFD740',
hue_A400 = '#FFC400',
hue_A700 = '#FFAB00'
},
-- Orange
orange = {
hue_50 = '#FFF3E0',
hue_100 = '#FFE0B2',
hue_200 = '#FFCC80',
hue_300 = '#FFB74D',
hue_400 = '#FFA726',
hue_500 = '#FF9800',
hue_600 = '#FB8C00',
hue_700 = '#F57C00',
hue_800 = '#EF6C00',
hue_900 = '#E65100',
hue_A100 = '#FFD180',
hue_A200 = '#FFAB40',
hue_A400 = '#FF9100',
hue_A700 = '#FF6D00'
},
-- Deep Orange
deep_orange = {
hue_50 = '#FBE9E7',
hue_100 = '#FFCCBC',
hue_200 = '#FFAB91',
hue_300 = '#FF8A65',
hue_400 = '#FF7043',
hue_500 = '#FF5722',
hue_600 = '#F4511E',
hue_700 = '#E64A19',
hue_800 = '#D84315',
hue_900 = '#BF360C',
hue_A100 = '#FF9E80',
hue_A200 = '#FF6E40',
hue_A400 = '#FF3D00',
hue_A700 = '#DD2C00'
},
-- Brown
brown = {
hue_50 = '#EFEBE9',
hue_100 = '#D7CCC8',
hue_200 = '#BCAAA4',
hue_300 = '#A1887F',
hue_400 = '#8D6E63',
hue_500 = '#795548',
hue_600 = '#6D4C41',
hue_700 = '#5D4037',
hue_800 = '#4E342E',
hue_900 = '#3E2723'
},
-- Grey
grey = {
hue_50 = '#FAFAFA',
hue_100 = '#F5F5F5',
hue_200 = '#EEEEEE',
hue_300 = '#E0E0E0',
hue_400 = '#BDBDBD',
hue_500 = '#9E9E9E',
hue_600 = '#757575',
hue_700 = '#616161',
hue_800 = '#424242',
hue_900 = '#212121'
},
-- Blue Grey
blue_grey = {
hue_50 = '#ECEFF1',
hue_100 = '#CFD8DC',
hue_200 = '#B0BEC5',
hue_300 = '#90A4AE',
hue_400 = '#78909C',
hue_500 = '#607D8B',
hue_600 = '#546E7A',
hue_700 = '#455A64',
hue_800 = '#37474F',
hue_900 = '#263238'
},
-- Black
black = '#000000',
-- White
white = '#FFFFFF'
}

62
theme/theme.lua 100644
View File

@ -0,0 +1,62 @@
local filesystem = require('gears.filesystem')
local color_schemes = require('theme.color-schemes')
local theme_dir = filesystem.get_configuration_dir() .. '/theme'
local gears = require('gears')
local dpi = require('beautiful').xresources.apply_dpi
local theme = {}
-- Color Scheme
theme.primary = color_schemes.flat_remix_teal.primary
theme.accent = color_schemes.flat_remix_teal.accent
local awesome_overrides = function(theme)
theme.dir = os.getenv('HOME') .. '/.config/awesome/theme'
theme.icons = theme.dir .. '/.config/awesome/theme/icons/'
theme.font = 'Product Sans Regular 9' -- Glyphs don't work properly with this (#442)
--theme.font = 'Robotomono nerd font 9' -- Glyphs don't work properly with this (#442)
theme.font_large = 'Product Sans Regular 11'
theme.icon_font = 'Product Sans Medium 10' -- Fira mono patched version
--theme.icon_font = 'firamono nerd font 11' -- Fira mono patched version
-- Layout icons
theme.layout_txt_tile = "|til|"
theme.layout_txt_max = "|max|"
theme.layout_txt_fair = "|fai|"
theme.layout_txt_spiral_dwindle = "|spi|"
theme.layout_txt_floating = "|flt|"
-- Taglist
theme.taglist_font = theme.font
theme.taglist_bg_empty = theme.primary.hue_100
theme.taglist_bg_occupied = 'linear:0,0:0,' .. dpi(32) .. ':0,' ..
theme.primary.hue_200 .. ':0.1,' ..
theme.primary.hue_200 .. ':0.1,' ..
theme.primary.hue_100 .. ':0.9,' ..
theme.primary.hue_100
theme.taglist_bg_urgent = 'linear:0,0:0,' .. dpi(48) .. ':0,' ..
theme.accent.hue_700 .. ':0.07,' ..
theme.accent.hue_700 .. ':0.07,' ..
theme.primary.hue_100 .. ':1,' ..
theme.primary.hue_100
theme.taglist_bg_focus = theme.accent.hue_200
theme.taglist_fg_focus = theme.primary.hue_100
-- Tasklist
theme.tasklist_font = theme.font
theme.tasklist_bg_normal = theme.primary.hue_200
theme.tasklist_bg_focus = theme.primary.hue_100
theme.tasklist_bg_urgent = theme.primary.hue_200
-- Icons
theme.icon_theme = 'Flat-Remix-Green-Dark'
-- Client
theme.gaps = dpi(2)
theme.border_width = dpi(2)
theme.border_focus = theme.accent.hue_200
theme.border_normal = theme.primary.hue_100
theme.gap_single_client = true
theme.bg_normal = theme.primary.hue_100
end
return {theme = theme, awesome_overrides = awesome_overrides}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 796 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

@ -0,0 +1,124 @@
-------------------------------------------------
-- Battery Widget for Awesome Window Manager
-- Shows the battery status using the ACPI tool
-- More details could be found here:
-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/battery-widget
-- @author Pavel Makhov
-- @copyright 2017 Pavel Makhov
-------------------------------------------------
local awful = require('awful')
local watch = require('awful.widget.watch')
local wibox = require('wibox')
local beautiful = require('beautiful')
local dpi = require('beautiful').xresources.apply_dpi
-- acpi sample outputs
-- Battery 0: Discharging, 75%, 01:51:38 remaining
-- Battery 0: Charging, 53%, 00:57:43 until charged
local percentage = wibox.widget.textbox()
local battery_icon = wibox.widget.textbox()
battery_icon.font = beautiful.icon_font
local battery_popup = awful.tooltip({
objects = {percentage},
mode = 'outside',
align = 'left',
preferred_positions = {'right', 'left', 'top', 'bottom'}
})
watch('acpi -i', 10, function(_, stdout)
local battery_info = {}
local capacities = {}
for s in stdout:gmatch('[^\r\n]+') do
local status, charge_str, time = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?.*')
if status ~= nil then
table.insert(battery_info, {
status = status,
charge = tonumber(charge_str)
})
else
local cap_str = string.match(s, '.+:.+last full capacity (%d+)')
table.insert(capacities, tonumber(cap_str))
end
end
local capacity = 0
for _, cap in ipairs(capacities) do
capacity = capacity + cap
end
local charge = 0
local status
for i, batt in ipairs(battery_info) do
if batt.charge >= charge then
status = batt.status -- use most charged battery status
-- this is arbitrary, and maybe another metric should be used
end
charge = charge + batt.charge * capacities[i]
end
charge = charge / capacity
battery_popup.text = string.gsub(stdout, '\n$', '')
percentage.text = math.floor(charge)
if status == 'Charging' then
battery_icon.text = ''
if math.floor(charge) <= 20 then
battery_icon.text = ''
elseif math.floor(charge) <= 30 then
battery_icon.text = ''
elseif math.floor(charge) <= 40 then
battery_icon.text = ''
elseif math.floor(charge) <= 60 then
battery_icon.text = ''
elseif math.floor(charge) <= 80 then
battery_icon.text = ''
elseif math.floor(charge) <= 90 then
--battery_icon.text = ''
battery_icon.text = '90'
elseif math.floor(charge) <= 100 then
--battery_icon.text = ''
battery_icon.text = '90'
end
elseif status == 'Full' then
battery_icon.text = ''
else
if math.floor(charge) <= 10 then
battery_icon.text = ''
elseif math.floor(charge) <= 20 then
battery_icon.text = ''
elseif math.floor(charge) <= 30 then
battery_icon.text = ''
elseif math.floor(charge) <= 40 then
battery_icon.text = ''
elseif math.floor(charge) <= 50 then
battery_icon.text = ''
elseif math.floor(charge) <= 60 then
battery_icon.text = ''
elseif math.floor(charge) <= 60 then
battery_icon.text = ''
elseif math.floor(charge) <= 80 then
battery_icon.text = ''
elseif math.floor(charge) <= 90 then
battery_icon.text = ''
battery_icon.text = '90'
elseif math.floor(charge) <= 100 then
battery_icon.text = ''
battery_icon.text = '90'
end
end
collectgarbage('collect')
end)
return wibox.widget {
wibox.widget{
battery_icon,
fg = beautiful.accent.hue_300,
widget = wibox.container.background
},
percentage,
spacing = dpi(2),
layout = wibox.layout.fixed.horizontal
}

191
widget/battery.lua 100644
View File

@ -0,0 +1,191 @@
-------------------------------------------------
-- Battery Widget for Awesome Window Manager
-- Shows the battery status using the ACPI tool
-- More details could be found here:
-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/battery-widget
-- @author Pavel Makhov
-- @copyright 2017 Pavel Makhov
-------------------------------------------------
local awful = require("awful")
local naughty = require("naughty")
local watch = require("awful.widget.watch")
local wibox = require("wibox")
local gfs = require("gears.filesystem")
local dpi = require('beautiful').xresources.apply_dpi
-- acpi sample outputs
-- Battery 0: Discharging, 75%, 01:51:38 remaining
-- Battery 0: Charging, 53%, 00:57:43 until charged
local HOME = os.getenv("HOME")
local battery_widget = {}
local function worker(args)
local args = args or {}
local bat_num = '1'
local font = args.font or 'Play 8'
local path_to_icons = args.path_to_icons or "/usr/share/icons/Arc/status/symbolic/"
local show_current_level = args.show_current_level or false
local margin_left = args.margin_left or 0
local margin_right = args.margin_right or 0
local display_notification = args.display_notification or false
local position = args.notification_position or "top_right"
local timeout = args.timeout or 10
local warning_msg_title = args.warning_msg_title or 'Huston, we have a problem'
local warning_msg_text = args.warning_msg_text or 'Battery is dying'
local warning_msg_position = args.warning_msg_position or 'bottom_right'
local warning_msg_icon = args.warning_msg_icon or HOME .. '/.config/awesome/awesome-wm-widgets/batteryarc-widget/spaceman.jpg'
local enable_battery_warning = args.enable_battery_warning
if enable_battery_warning == nil then
enable_battery_warning = true
end
local bat_expr = 'Battery ' .. bat_num
if not gfs.dir_readable(path_to_icons) then
naughty.notify{
title = "Battery Widget",
text = "Folder with icons doesn't exist: " .. path_to_icons,
preset = naughty.config.presets.critical
}
end
local icon_widget = wibox.widget {
{
id = "icon",
widget = wibox.widget.imagebox,
resize = false
},
layout = wibox.container.margin(_, 0, 0, 3)
}
local level_widget = wibox.widget {
font = font,
widget = wibox.widget.textbox
}
battery_widget = wibox.widget {
icon_widget,
level_widget,
layout = wibox.layout.fixed.horizontal,
}
-- Popup with battery info
-- One way of creating a pop-up notification - naughty.notify
local notification
local function show_battery_status(batteryType)
awful.spawn.easy_async('bash -c "acpi | grep \'' .. bat_expr .. '\'"',
function(stdout, _, _, _)
naughty.destroy(notification)
notification = naughty.notify{
text = stdout,
title = "Battery status",
icon = path_to_icons .. batteryType .. ".svg",
icon_size = dpi(16),
position = position,
timeout = 5, hover_timeout = 0.5,
width = 200,
screen = mouse.screen
}
end
)
end
-- Alternative to naughty.notify - tooltip. You can compare both and choose the preferred one
--battery_popup = awful.tooltip({objects = {battery_widget}})
-- To use colors from beautiful theme put
-- following lines in rc.lua before require("battery"):
-- beautiful.tooltip_fg = beautiful.fg_normal
-- beautiful.tooltip_bg = beautiful.bg_normal
local function show_battery_warning()
naughty.notify {
icon = warning_msg_icon,
icon_size = 100,
text = warning_msg_text,
title = warning_msg_title,
timeout = 25, -- show the warning for a longer time
hover_timeout = 0.5,
position = warning_msg_position,
bg = "#F06060",
fg = "#EEE9EF",
width = 300,
screen = mouse.screen
}
end
local last_battery_check = os.time()
local batteryType = "battery-good-symbolic"
watch('bash -c "acpi -i | grep \'' .. bat_expr .. '\'"', timeout,
function(widget, stdout, stderr, exitreason, exitcode)
local battery_info = {}
local capacities = {}
for s in stdout:gmatch("[^\r\n]+") do
local status, charge_str, time = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?(.*)')
if status ~= nil then
table.insert(battery_info, {status = status, charge = tonumber(charge_str)})
else
local cap_str = string.match(s, '.+:.+last full capacity (%d+)')
table.insert(capacities, tonumber(cap_str))
end
end
local capacity = 0
for i, cap in ipairs(capacities) do
capacity = capacity + cap
end
local charge = 0
local status
for i, batt in ipairs(battery_info) do
if batt.charge >= charge then
status = batt.status -- use most charged battery status
-- this is arbitrary, and maybe another metric should be used
end
charge = charge + batt.charge * capacities[i]
end
charge = charge / capacity
if show_current_level then
level_widget.text = string.format('%d%%', charge)
end
if (charge >= 0 and charge < 15) then
batteryType = "battery-empty%s-symbolic"
if enable_battery_warning and status ~= 'Charging' and os.difftime(os.time(), last_battery_check) > 300 then
-- if 5 minutes have elapsed since the last warning
last_battery_check = os.time()
show_battery_warning()
end
elseif (charge >= 15 and charge < 40) then batteryType = "battery-caution%s-symbolic"
elseif (charge >= 40 and charge < 60) then batteryType = "battery-low%s-symbolic"
elseif (charge >= 60 and charge < 80) then batteryType = "battery-good%s-symbolic"
elseif (charge >= 80 and charge <= 100) then batteryType = "battery-full%s-symbolic"
end
if status == 'Charging' then
batteryType = string.format(batteryType, '-charging')
else
batteryType = string.format(batteryType, '')
end
widget.icon:set_image(path_to_icons .. batteryType .. ".svg")
-- Update popup text
-- battery_popup.text = string.gsub(stdout, "\n$", "")
end,
icon_widget)
if display_notification then
battery_widget:connect_signal("mouse::enter", function() show_battery_status(batteryType) end)
battery_widget:connect_signal("mouse::leave", function() naughty.destroy(notification) end)
end
return wibox.container.margin(battery_widget, margin_left, margin_right)
end
return setmetatable(battery_widget, { __call = function(_, ...) return worker(...) end })

View File

@ -0,0 +1,49 @@
local wibox = require('wibox')
local mat_list_item = require('widget.material.list-item')
local mat_slider = require('widget.material.slider')
local mat_icon_button = require('widget.material.icon-button')
local clickable_container = require('widget.material.clickable-container')
local icons = require('theme.icons')
local watch = require('awful.widget.watch')
local spawn = require('awful.spawn')
local slider =
wibox.widget {
read_only = false,
widget = mat_slider
}
slider:connect_signal(
'property::value',
function()
spawn('xbacklight -set ' .. math.max(slider.value, 5))
end
)
watch(
[[bash -c "xbacklight -get"]],
1,
function(widget, stdout, stderr, exitreason, exitcode)
local brightness = string.match(stdout, '(%d+)')
slider:set_value(tonumber(brightness))
collectgarbage('collect')
end
)
local icon =
wibox.widget {
image = icons.brightness,
widget = wibox.widget.imagebox
}
local button = mat_icon_button(icon)
local brightness_setting =
wibox.widget {
button,
slider,
widget = mat_list_item
}
return brightness_setting

View File

@ -0,0 +1,53 @@
# Calendar Widget
Calendar widget for Awesome WM - slightly improved version of the `wibox.widget.calendar`.
## Features
- mouse support: scroll up - shows next month, scroll down - previous
- themes:
| Name | Screenshot |
|---|---|
|nord (default) | ![nord_theme](./nord.png) |
| outrun | ![outrun_theme](./outrun.png) |
| light | ![outrun_theme](./light.png) |
| dark | ![outrun_theme](./dark.png) |
- setup widget placement
top center - in case you clock is centered:
![calendar_top](./calendar_top.png)
top right - for default awesome config:
![calendar_top_right](./calendar_top_right.png)
bottom right - in case your wibar at the bottom:
![calendar_bottom_right](./calendar_bottom_right.png)
## How to use
This widget needs an 'anchor' - another widget which triggers visibility of the calendar. Default `mytextclock` is the perfect candidate!
Just after mytextclock is instantiated, create the widget and add the mouse listener to it.
```lua
local calendar_widget = require("awesome-wm-widgets.calendar-widget.calendar")
-- ...
-- Create a textclock widget
mytextclock = wibox.widget.textclock()
-- default
local cw = calendar_widget()
-- or customized
local cw = calendar_widget({
theme = 'outrun',
placement = 'bottom_right'
})
mytextclock:connect_signal("button::press",
function(_, _, _, button)
if button == 1 then cw.toggle() end
end)
```

View File

@ -0,0 +1,235 @@
-------------------------------------------------
-- Calendar Widget for Awesome Window Manager
-- Shows the current month and supports scroll up/down to switch month
-- More details could be found here:
-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/calendar-widget
-- @author Pavel Makhov
-- @copyright 2019 Pavel Makhov
-------------------------------------------------
local awful = require("awful")
local beautiful = require("beautiful")
local wibox = require("wibox")
local gears = require("gears")
local naughty = require("naughty")
local calendar_widget = {}
local function worker(args)
local calendar_themes = {
nord = {
bg = '#2E3440',
fg = '#D8DEE9',
focus_date_bg = '#88C0D0',
focus_date_fg = '#000000',
weekend_day_bg = '#3B4252',
weekday_fg = '#88C0D0',
header_fg = '#E5E9F0',
border = '#4C566A'
},
outrun = {
bg = '#0d0221',
fg = '#D8DEE9',
focus_date_bg = '#650d89',
focus_date_fg = '#2de6e2',
weekend_day_bg = '#261447',
weekday_fg = '#2de6e2',
header_fg = '#f6019d',
border = '#261447'
},
dark = {
bg = '#000000',
fg = '#ffffff',
focus_date_bg = '#ffffff',
focus_date_fg = '#000000',
weekend_day_bg = '#444444',
weekday_fg = '#ffffff',
header_fg = '#ffffff',
border = '#333333'
},
light = {
bg = '#ffffff',
fg = '#000000',
focus_date_bg = '#000000',
focus_date_fg = '#ffffff',
weekend_day_bg = '#AAAAAA',
weekday_fg = '#000000',
header_fg = '#000000',
border = '#CCCCCC'
},
monokai = {
bg = '#272822',
fg = '#F8F8F2',
focus_date_bg = '#AE81FF',
focus_date_fg = '#ffffff',
weekend_day_bg = '#75715E',
weekday_fg = '#FD971F',
header_fg = '#F92672',
border = '#75715E'
}
}
local args = args or {}
if args.theme ~= nil and calendar_themes[args.theme] == nil then
naughty.notify({
preset = naughty.config.presets.critical,
title = 'Calendar Widget',
text = 'Theme "' .. args.theme .. '" not found, fallback to default'})
args.theme = 'nord'
end
local theme = args.theme or 'nord'
local placement = args.placement or 'top'
local styles = {}
local function rounded_shape(size)
return function(cr, width, height)
gears.shape.rounded_rect(cr, width, height, size)
end
end
styles.month = {
padding = 4,
bg_color = calendar_themes[theme].bg,
border_width = 0,
}
styles.normal = {
markup = function(t) return t end,
shape = rounded_shape(4)
}
styles.focus = {
fg_color = calendar_themes[theme].focus_date_fg,
bg_color = calendar_themes[theme].focus_date_bg,
markup = function(t) return '<b>' .. t .. '</b>' end,
shape = rounded_shape(4)
}
styles.header = {
fg_color = calendar_themes[theme].header_fg,
bg_color = calendar_themes[theme].bg,
markup = function(t) return '<b>' .. t .. '</b>' end
}
styles.weekday = {
fg_color = calendar_themes[theme].weekday_fg,
bg_color = calendar_themes[theme].bg,
markup = function(t) return '<b>' .. t .. '</b>' end,
}
local function decorate_cell(widget, flag, date)
if flag == 'monthheader' and not styles.monthheader then
flag = 'header'
end
-- highlight only today's day
if flag == 'focus' then
local today = os.date('*t')
if today.month ~= date.month then
flag = 'normal'
end
end
local props = styles[flag] or {}
if props.markup and widget.get_text and widget.set_markup then
widget:set_markup(props.markup(widget:get_text()))
end
-- Change bg color for weekends
local d = { year = date.year, month = (date.month or 1), day = (date.day or 1) }
local weekday = tonumber(os.date('%w', os.time(d)))
local default_bg = (weekday == 0 or weekday == 6) and calendar_themes[theme].weekend_day_bg or calendar_themes[theme].bg
local ret = wibox.widget {
{
{
widget,
halign = 'center',
widget = wibox.container.place
},
margins = (props.padding or 2) + (props.border_width or 0),
widget = wibox.container.margin
},
shape = props.shape,
shape_border_color = props.border_color or '#000000',
shape_border_width = props.border_width or 0,
fg = props.fg_color or calendar_themes[theme].fg,
bg = props.bg_color or default_bg,
widget = wibox.container.background
}
return ret
end
local cal = wibox.widget {
date = os.date('*t'),
font = beautiful.get_font(),
fn_embed = decorate_cell,
long_weekdays = true,
widget = wibox.widget.calendar.month
}
local popup = awful.popup {
ontop = true,
visible = false,
shape = gears.shape.rounded_rect,
offset = { y = 5 },
border_width = 1,
border_color = calendar_themes[theme].border,
widget = cal
}
popup:buttons(
awful.util.table.join(
awful.button({}, 4, function()
local a = cal:get_date()
a.month = a.month + 1
cal:set_date(nil)
cal:set_date(a)
popup:set_widget(cal)
end),
awful.button({}, 5, function()
local a = cal:get_date()
a.month = a.month - 1
cal:set_date(nil)
cal:set_date(a)
popup:set_widget(cal)
end)
)
)
function calendar_widget.toggle()
if popup.visible then
-- to faster render the calendar refresh it and just hide
cal:set_date(nil) -- the new date is not set without removing the old one
cal:set_date(os.date('*t'))
popup:set_widget(nil) -- just in case
popup:set_widget(cal)
popup.visible = not popup.visible
else
if placement == 'top' then
awful.placement.top(popup, { margins = { top = 30 }, parent = awful.screen.focused() })
elseif placement == 'top_right' then
awful.placement.top_right(popup, { margins = { top = 30, right = 10}, parent = awful.screen.focused() })
elseif placement == 'bottom_right' then
awful.placement.bottom_right(popup, { margins = { bottom = 30, right = 10}, parent = awful.screen.focused() })
else
awful.placement.top(popup, { margins = { top = 30 }, parent = awful.screen.focused() })
end
popup.visible = true
end
end
return calendar_widget
end
return setmetatable(calendar_widget, { __call = function(_, ...)
return worker(...)
end })

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

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