diff --git a/.config/amfora/config.toml b/.config/amfora/config.toml
new file mode 100644
index 0000000..970a590
--- /dev/null
+++ b/.config/amfora/config.toml
@@ -0,0 +1,311 @@
+# This is the default config file.
+# It also shows all the default values, if you don't create the file.
+
+[a-general]
+home = "gemini://distro.tube"
+color = true
+ansi = true
+bullets = true
+show_link = false
+
+# Follow up to 5 Gemini redirects without prompting.
+# A prompt is always shown after the 5th redirect and for redirects to protocols other than Gemini.
+# If set to false, a prompt will be shown before following redirects.
+auto_redirect = false
+
+# What command to run to open a HTTP(S) URL.
+# The best to define a command is using a string array.
+# Examples:
+# http = ['firefox']
+# http = ['custom-browser', '--flag', '--option=2']
+# http = ['/path/with spaces/in it/firefox']
+#
+# Note the use of single quotes, so that backslashes will not be escaped.
+# Using just a string will also work, but it is deprecated, and will degrade if
+# you use paths with spaces.
+http = 'brave'
+
+# Any URL that will accept a query string can be put here
+search = "gemini://gus.guru/search"
+
+# A number from 0 to 1, indicating what percentage of the terminal width the left margin should take up.
+left_margin = 0.10
+
+# The max number of columns to wrap a page's text to. Preformatted blocks are not wrapped.
+max_width = 140
+
+# 'downloads' is the path to a downloads folder.
+# An empty value means the code will find the default downloads folder for your system.
+# If the path does not exist it will be created.
+# Note the use of single quotes, so that backslashes will not be escaped.
+downloads = ''
+
+# Max size for displayable content in bytes - after that size a download window pops up
+page_max_size = 2097152 # 2 MiB
+# Max time it takes to load a page in seconds - after that a download window pops up
+page_max_time = 10
+
+# Whether to replace tab numbers with emoji favicons, which are cached.
+emoji_favicons = true
+
+
+[auth]
+# Authentication settings
+# Note the use of single quotes for values, so that backslashes will not be escaped.
+
+[auth.certs]
+# Client certificates
+# Set domain name equal to path to client cert
+# "example.com" = 'mycert.crt'
+
+[auth.keys]
+# Client certificate keys
+# Set domain name equal to path to key for the client cert above
+# "example.com" = 'mycert.key'
+
+[keybindings]
+bind_bottom = ":"
+bind_quit = "q"
+bind_reload = "R"
+bind_back = "H"
+bind_forward = "L"
+bind_next_tab = "J"
+bind_prev_tab = "K"
+bind_edit = "o"
+bind_new_tab = "O"
+bind_save = "S"
+bind_home = "h"
+bind_bookmarks = "b"
+bind_add_bookmark = "B"
+
+# If you have a non-US keyboard, use bind_tab1 through bind_tab0 to
+# setup the shift-number bindings: Eg, for US keyboards (the default):
+# bind_tab1 = "!"
+# bind_tab2 = "@"
+# bind_tab3 = "#"
+# bind_tab4 = "$"
+# bind_tab5 = "%"
+# bind_tab6 = "^"
+# bind_tab7 = "&"
+# bind_tab8 = "*"
+# bind_tab9 = "("
+# bind_tab0 = ")"
+
+# The bind_link[1-90] options are for the commands to go to the first 10 links on a page,
+# typically these are bound to the number keys:
+# bind_link1 = "1"
+# bind_link2 = "2"
+# bind_link3 = "3"
+# bind_link4 = "4"
+# bind_link5 = "5"
+# bind_link6 = "6"
+# bind_link7 = "7"
+# bind_link8 = "8"
+# bind_link9 = "9"
+# bind_link0 = "0"
+
+[url-handlers]
+# Allows setting the commands to run for various URL schemes.
+# E.g. to open FTP URLs with FileZilla set the following key:
+# ftp = 'filezilla'
+# You can set any scheme to "off" or "" to disable handling it, or
+# just leave the key unset.
+#
+# DO NOT use this for setting the HTTP command.
+# Use the http setting in the "a-general" section above.
+#
+# NOTE: These settings are overrided by the ones in the proxies section.
+# Note the use of single quotes, so that backslashes will not be escaped.
+
+# This is a special key that defines the handler for all URL schemes for which
+# no handler is defined.
+other = 'off'
+
+
+# [[mediatype-handlers]] section
+# ---------------------------------
+#
+# Specify what applications will open certain media types.
+# By default your default application will be used to open the file when you select "Open".
+# You only need to configure this section if you want to override your default application,
+# or do special things like streaming.
+#
+# Note the use of single quotes for commands, so that backslashes will not be escaped.
+#
+#
+# To open jpeg files with the feh command:
+#
+# [[mediatype-handlers]]
+# cmd = ['feh']
+# types = ["image/jpeg"]
+#
+# Each command that you specify must come under its own [[mediatype-handlers]]. You may
+# specify as many [[mediatype-handlers]] as you want to setup multiple commands.
+#
+# If the subtype is omitted then the specified command will be used for the
+# entire type:
+#
+# [[mediatype-handlers]]
+# command = ['vlc', '--flag']
+# types = ["audio", "video"]
+#
+# A catch-all handler can by specified with "*".
+# Note that there are already catch-all handlers in place for all OSes,
+# that open the file using your default application. This is only if you
+# want to override that.
+#
+# [[mediatype-handlers]]
+# cmd = ['some-command']
+# types = [
+# "application/pdf",
+# "*",
+# ]
+#
+# You can also choose to stream the data instead of downloading it all before
+# opening it. This is especially useful for large video or audio files, as
+# well as radio streams, which will never complete. You can do this like so:
+#
+# [[mediatype-handlers]]
+# cmd = ['vlc', '-']
+# types = ["audio", "video"]
+# stream = true
+#
+# This uses vlc to stream all video and audio content.
+# By default stream is set to off for all handlers
+#
+#
+# If you want to always open a type in its viewer without the download or open
+# prompt appearing, you can add no_prompt = true
+#
+# [[mediatype-handlers]]
+# cmd = ['feh']
+# types = ["image"]
+# no_prompt = true
+#
+# Note: Multiple handlers cannot be defined for the same full media type, but
+# still there needs to be an order for which handlers are used. The following
+# order applies regardless of the order written in the config:
+#
+# 1. Full media type: "image/jpeg"
+# 2. Just type: "image"
+# 3. Catch-all: "*"
+
+
+[cache]
+# Options for page cache - which is only for text pages
+# Increase the cache size to speed up browsing at the expense of memory
+# Zero values mean there is no limit
+
+max_size = 0 # Size in bytes
+max_pages = 30 # The maximum number of pages the cache will store
+
+# How long a page will stay in cache, in seconds.
+timeout = 1800 # 30 mins
+
+[proxies]
+# Allows setting a Gemini proxy for different schemes.
+# The settings are similar to the url-handlers section above.
+# E.g. to open a gopher page by connecting to a Gemini proxy server:
+# gopher = "example.com:123"
+#
+# Port 1965 is assumed if no port is specified.
+#
+# NOTE: These settings override any external handlers specified in
+# the url-handlers section.
+#
+# Note that HTTP and HTTPS are treated as separate protocols here.
+
+
+[subscriptions]
+# For tracking feeds and pages
+
+# Whether a pop-up appears when viewing a potential feed
+popup = true
+
+# How often to check for updates to subscriptions in the background, in seconds.
+# Set it to 0 to disable this feature. You can still update individual feeds
+# manually, or restart the browser.
+#
+# Note Amfora will check for updates on browser start no matter what this setting is.
+update_interval = 1800 # 30 mins
+
+# How many subscriptions can be checked at the same time when updating.
+# If you have many subscriptions you may want to increase this for faster
+# update times. Any value below 1 will be corrected to 1.
+workers = 3
+
+# The number of subscription updates displayed per page.
+entries_per_page = 20
+
+
+[theme]
+# This section is for changing the COLORS used in Amfora.
+# These colors only apply if 'color' is enabled above.
+# Colors can be set using a W3C color name, or a hex value such as "#ffffff".
+
+# Note that not all colors will work on terminals that do not have truecolor support.
+# If you want to stick to the standard 16 or 256 colors, you can get
+# a list of those here: https://jonasjacek.github.io/colors/
+# DO NOT use the names from that site, just the hex codes.
+
+# Definitions:
+# bg = background
+# fg = foreground
+# dl = download
+# btn = button
+# hdg = heading
+# bkmk = bookmark
+# modal = a popup window/box in the middle of the screen
+
+# EXAMPLES:
+# hdg_1 = "green"
+# hdg_2 = "#5f0000"
+
+# Available keys to set:
+
+bg = "#282c34"
+tab_num = "#3071db"
+tab_divider = "#5699af"
+bottombar_label = "#98be65"
+bottombar_text = "#7d7d7d"
+bottombar_bg = "#202328"
+
+hdg_1 = "#ff6c6b"
+hdg_2 = "#51afef"
+hdg_3 = "#4669ff"
+amfora_link = "#c678dd"
+foreign_link = "#98be65"
+link_number = "#7d7d7d"
+regular_text = "#ffffff"
+quote_text = "#a9a1e1"
+preformatted_text = "#ecbe7b"
+list_text = "#bbc2cf"
+
+# btn_bg: The bg color for all modal buttons
+# btn_text: The text color for all modal buttons
+
+# dl_choice_modal_bg
+# dl_choice_modal_text
+# dl_modal_bg
+# dl_modal_text
+# info_modal_bg
+# info_modal_text
+# error_modal_bg
+# error_modal_text
+# yesno_modal_bg
+# yesno_modal_text
+# tofu_modal_bg
+# tofu_modal_text
+# subscription_modal_bg
+# subscription_modal_text
+
+# input_modal_bg
+# input_modal_text
+# input_modal_field_bg: The bg of the input field, where you type the text
+# input_modal_field_text: The color of the text you type
+
+# bkmk_modal_bg
+# bkmk_modal_text
+# bkmk_modal_label
+# bkmk_modal_field_bg
+# bkmk_modal_field_text
diff --git a/.config/awesome/README.md b/.config/awesome/README.md
new file mode 100644
index 0000000..290641f
--- /dev/null
+++ b/.config/awesome/README.md
@@ -0,0 +1,9 @@
+# Awesome4Laptop
+
+Installation:
+
+ git clone https://github.com/msjche/Awesome4Laptop.git ~/.config/awesome
+ cd ~/.config/awesome && cp -r Awesome4Laptop/* .
+ rm -r Awesome4Laptop
+
+
diff --git a/.config/awesome/autostart.sh b/.config/awesome/autostart.sh
new file mode 100755
index 0000000..25e7227
--- /dev/null
+++ b/.config/awesome/autostart.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+function run {
+ if ! pgrep $1 ;
+ then
+ $@&
+ fi
+}
+
+#run "megasync"
+run "xscreensaver -no-splash"
+#run "/usr/bin/dropbox"
+#run "insync start"
+run "picom"
+#run "/usr/bin/redshift"
+run "mpd"
+run "nm-applet"
diff --git a/.config/awesome/conky/conkyrc.lua b/.config/awesome/conky/conkyrc.lua
new file mode 100644
index 0000000..9ad9d0b
--- /dev/null
+++ b/.config/awesome/conky/conkyrc.lua
@@ -0,0 +1,131 @@
+-----------------------------------------------------------------------------
+-- conkyrc_seamod
+-- Date : 04/23/2016
+-- Author : SeaJey and Maxiwell
+-- Conky : >= 1.10
+-- License : Distributed under the terms of GNU GPL version 2 or later
+-----------------------------------------------------------------------------
+
+conky.config = {
+
+ background = true,
+ update_interval = 1,
+ time_in_seconds = true,
+
+ cpu_avg_samples = 2,
+ net_avg_samples = 2,
+ temperature_unit = 'farenheight',
+
+ double_buffer = true,
+ no_buffers = true,
+ text_buffer_size = 2048,
+
+ gap_x = 0,
+ gap_y = 150,
+ minimum_width = 100, minimum_height = 900,
+ maximum_width = 115,
+
+ own_window = true,
+ own_window_type = 'desktop',
+ own_window_transparent = true,
+ own_window_argb_visual = true,
+ own_window_class = 'conky-semi',
+ own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
+
+ border_inner_margin = 0,
+ border_outer_margin = 0,
+ alignment = 'top_left',
+
+
+ draw_shades = false,
+ draw_outline = false,
+ draw_borders = false,
+ draw_graph_borders = false,
+
+ override_utf8_locale = true,
+ use_xft = true,
+ font = 'caviar dreams:size=11',
+ xftalpha = 0.5,
+ uppercase = false,
+
+-- Defining colors
+ default_color = '#FFFFFF',
+-- Shades of Gray
+ color1 = '#DDDDDD',
+ color2 = '#AAAAAA',
+ color3 = '#888888',
+-- Gentoo Purple
+ color4 = '#7A5ADA',
+-- Green
+ color5 = '#8FEB8F',
+-- Red
+ color6 = '#F45F45',
+-- Loading lua script for drawning rings
+ lua_load = '~/.config/awesome/conky/seamod_rings.lua',
+ lua_draw_hook_pre = 'main',
+
+};
+
+--${offset 15}${font Droid Sans:size=11:style=normal}${color1}${pre_exec lsb_release -d | cut -f 2} - $sysname $kernel
+conky.text = [[
+
+${font Droid Sans:size=8:style=normal}${color1}$kernel
+${font Droid Sans:size=8:style=normal}${color1}Temp ${color3}$alignr${exec 10 sensors | grep Core\ 3 | awk '{print $3}'}
+${font Droid Sans:size=9:style=normal}${color1}NVidia Optimus: ${color3}$alignr${execi 10 cat /proc/acpi/bbswitch | awk '{print $2}'}
+${font Droid Sans:size=9:style=normal}${color1}Uptime: $alignr${color3}${color3}$uptime
+#${voffset 40}
+#${offset 65}${font Droid Sans:size=16:style=bold}${color5}BAT
+#
+#${voffset -35}
+${font Droid Sans:size=8:style=normal}${color1}Status ${color3}$alignr${battery BAT1}
+${font Droid Sans:size=8:style=normal}${color1}Time Left ${font Droid Sans:size=8:bold:style=normal}${color4}$alignr${format_time $battery_time "\hh\mm"}${battery_time BAT1}
+
+# Showing CPU Graph
+${voffset 40}
+${offset 65}${font Droid Sans:size=19:style=bold}${color5}CPU
+${voffset 10}
+${cpugraph cpu1 20,118 666666 666666}
+${voffset -40}
+${font Droid Sans:size=9:style=normal}${color1}CPU Freq: ${font Droid Sans:size=9:bold:style=normal}${alignr}${color4}${freq} ${color2}MHz
+
+# Showing TOP 5 CPU-consumers
+${font Droid Sans:bold:size=8:style=normal}${color4}${top name 1}${alignr}${top cpu 1}%
+${font Droid Sans:size=8:style=normal}${color1}${top name 2}${alignr}${top cpu 2}%
+${font Droid Sans:size=8:style=normal}${color2}${top name 3}${alignr}${top cpu 3}%
+${font Droid Sans:size=8:style=normal}${color3}${top name 4}${alignr}${top cpu 4}%
+${font Droid Sans:size=8:style=normal}${color3}${top name 5}${alignr}${top cpu 5}%
+
+#Showing memory part with TOP 5
+${voffset 30}
+${offset 65}${font Droid Sans:size=14:style=bold}${color5}MEM
+${voffset 1}
+${font Droid Sans:bold:size=8:style=normal}${color4}${top_mem name 1}${alignr}${top_mem mem_res 1}
+${font Droid Sans:size=8:style=normal}${color1}${top_mem name 2}${alignr}${top_mem mem_res 2}
+${font Droid Sans:size=8:style=normal}${color2}${top_mem name 3}${alignr}${top_mem mem_res 3}
+${font Droid Sans:size=8:style=normal}${color3}${top_mem name 4}${alignr}${top_mem mem_res 4}
+${font Droid Sans:size=8:style=normal}${color3}${top_mem name 4}${alignr}${top_mem mem_res 5}
+
+# Showing disk partitions: boot, root, home
+${voffset 47}
+${offset 70}${font Droid Sans:size=12:style=bold}${color5}DISKS
+${voffset 20}
+${diskiograph 20,118 666666 666666}${voffset -30}
+${voffset 10}
+${font Droid Sans:size=8:}${color1}Boot Free: ${alignr}$color3${font Droid Sans:size=8:style=normal}${fs_free /boot}
+${font Droid Sans:size=8:}${color1}Root Free: ${alignr}$color3${font Droid Sans:size=8:style=normal}${fs_free /}
+${font Droid Sans:size=8:}${color1}Home Free: ${alignr}$color3${font Droid Sans:size=8:style=normal}${fs_free /home}
+
+# Network
+${voffset 49}
+${offset 70}${font Droid Sans:size=14:style=bold}${color5}WiFi
+${voffset 10}
+${font Droid Sans:size=10:style=bold}${color1}${color2}VPN: ${font Droid Sans:size=10:style=bold}${color5}${if_up tun0}UP${else}${color6}Down$endif$font$color
+${font Droid Sans:size=8:style=bold}${color1}Lan IP: ${alignr}$color3${addr wlp6s0}
+${font Droid Sans:size=8:style=bold}${color1}Ext IP: ${alignr}${color3}NOPE#${alignr}$color3${execi 600 wget -q -O /dev/stdout http://checkip.dyndns.org/ | cut -d : -f 2- | cut -d \< -f -1}
+#${font Droid Sans:size=8:style=bold}${alignr}$color3${execi 600 wget -q -O /dev/stdout https://www.dnsleaktest.com/ | grep from | grep -o '
.*.*<' | grep -oEi '[a-zA-Z0-9 ,]+'}
+${voffset 10}
+${color1}${font Droid Sans:size=8:style=bold}Up: ${alignr}${font Droid Sans:size=8:style=normal}$color2${upspeed wlp6s0} / ${totalup wlp6s0}
+${upspeedgraph wlp6s0 40,118 4B1B0C FF5C2B 1280KiB -l}
+${color1}${font Droid Sans:size=8:style=bold}Down: ${alignr}${font Droid Sans:size=8:style=normal}$color2${downspeed wlp6s0} / ${totaldown wlp6s0}
+${downspeedgraph wlp6s0 40,118 324D23 77B753 1280KiB -l}
+]];
diff --git a/.config/awesome/conky/seamod_rings.lua b/.config/awesome/conky/seamod_rings.lua
new file mode 100644
index 0000000..fce8333
--- /dev/null
+++ b/.config/awesome/conky/seamod_rings.lua
@@ -0,0 +1,478 @@
+--==============================================================================
+-- seamod_rings.lua
+--
+-- Date : 05/02/2012
+-- Author : SeaJey
+-- Version : v0.1
+-- License : Distributed under the terms of GNU GPL version 2 or later
+--
+-- This version is a modification of lunatico_rings.lua wich is modification of conky_orange.lua
+--
+-- conky_orange.lua: http://gnome-look.org/content/show.php?content=137503&forumpage=0
+-- lunatico_rings.lua: http://gnome-look.org/content/show.php?content=142884
+--==============================================================================
+
+require 'cairo'
+
+gauge = {
+{
+ name='cpu', arg='cpu1', max_value=100,
+ x=60, y=175,
+ graph_radius=54,
+ graph_thickness=5,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+ txt_radius=0,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=28,
+ graduation_thickness=0, graduation_mark_thickness=1,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='',
+ caption_weight=1, caption_size=9.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
+},
+{
+ name='cpu', arg='cpu2', max_value=100,
+ x=60, y=175,
+ graph_radius=48,
+ graph_thickness=5,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+ txt_radius=0,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=28,
+ graduation_thickness=0, graduation_mark_thickness=1,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='',
+ caption_weight=1, caption_size=9.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
+},
+{
+ name='cpu', arg='cpu3', max_value=100,
+ x=60, y=175,
+ graph_radius=42,
+ graph_thickness=5,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+ txt_radius=0,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=28,
+ graduation_thickness=0, graduation_mark_thickness=1,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='',
+ caption_weight=1, caption_size=9.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
+},
+{
+ name='cpu', arg='cpu4', max_value=100,
+ x=60, y=175,
+ graph_radius=36,
+ graph_thickness=5,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+ txt_radius=0,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=28,
+ graduation_thickness=0, graduation_mark_thickness=1,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='',
+ caption_weight=1, caption_size=9.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
+},
+{
+ name='cpu', arg='cpu5', max_value=100,
+ x=60, y=175,
+ graph_radius=30,
+ graph_thickness=5,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+ txt_radius=0,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=28,
+ graduation_thickness=0, graduation_mark_thickness=1,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='',
+ caption_weight=1, caption_size=9.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
+},
+{
+ name='cpu', arg='cpu6', max_value=100,
+ x=60, y=175,
+ graph_radius=24,
+ graph_thickness=5,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+ txt_radius=0,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=28,
+ graduation_thickness=0, graduation_mark_thickness=1,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='',
+ caption_weight=1, caption_size=9.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
+},
+{
+ name='cpu', arg='cpu7', max_value=100,
+ x=60, y=175,
+ graph_radius=18,
+ graph_thickness=5,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+ txt_radius=0,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=28,
+ graduation_thickness=0, graduation_mark_thickness=1,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='',
+ caption_weight=1, caption_size=9.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
+},
+{
+ name='cpu', arg='cpu8', max_value=100,
+ x=60, y=175,
+ graph_radius=12,
+ graph_thickness=5,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+ txt_radius=0,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=28,
+ graduation_thickness=0, graduation_mark_thickness=1,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='',
+ caption_weight=1, caption_size=9.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
+},
+--{
+-- name='battery_percent', arg='BAT1', max_value=100,
+-- x=60, y=133,
+-- graph_radius=35,
+-- graph_thickness=20,
+-- graph_start_angle=180,
+-- graph_unit_angle=2.7, graph_unit_thickness=2.7,
+-- graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+-- graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+-- hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+-- txt_radius=13,
+-- txt_weight=1, txt_size=10.0,
+-- txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+-- graduation_radius=23,
+-- graduation_thickness=0, graduation_mark_thickness=2,
+-- graduation_unit_angle=27,
+-- graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.5,
+-- caption='',
+-- caption_weight=1, caption_size=10.0,
+-- caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
+--},
+{
+ name='memperc', arg='', max_value=100,
+ x=60, y=428,
+ graph_radius=35,
+ graph_thickness=20,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+ txt_radius=18,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=23,
+ graduation_thickness=0, graduation_mark_thickness=2,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.5,
+ caption='',
+ caption_weight=1, caption_size=10.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
+},
+{
+ name='fs_used_perc', arg='/home', max_value=100,
+ x=60, y=620,
+ graph_radius=52,
+ graph_thickness=7,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+ txt_radius=65,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=23,
+ graduation_thickness=0, graduation_mark_thickness=2,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='/home',
+ caption_weight=1, caption_size=12.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.5,
+},
+{
+ name='fs_used_perc', arg='/', max_value=100,
+ x=60, y=620,
+ graph_radius=40,
+ graph_thickness=7,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+ txt_radius=27,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=23,
+ graduation_thickness=0, graduation_mark_thickness=2,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='/',
+ caption_weight=1, caption_size=12.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.5,
+},
+{
+ name='fs_used_perc', arg='/boot', max_value=100,
+ x=60, y=620,
+ graph_radius=28,
+ graph_thickness=7,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=1.0,
+ txt_radius=16,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=23,
+ graduation_thickness=0, graduation_mark_thickness=2,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='/boot',
+ caption_weight=1, caption_size=12.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.5,
+},
+{
+ name='downspeedf', arg='wlp6s0', max_value=100,
+ x=60, y=835,
+ graph_radius=42,
+ graph_thickness=7,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=0,
+ txt_radius=60,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=28,
+ graduation_thickness=0, graduation_mark_thickness=1,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='Down',
+ caption_weight=1, caption_size=12.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.5,
+},
+{
+ name='upspeedf', arg='wlp6s0', max_value=100,
+ x=60, y=835,
+ graph_radius=30,
+ graph_thickness=7,
+ graph_start_angle=180,
+ graph_unit_angle=2.7, graph_unit_thickness=2.7,
+ graph_bg_colour=0xffffff, graph_bg_alpha=0.1,
+ graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.3,
+ hand_fg_colour=0x7A5ADA, hand_fg_alpha=0,
+ txt_radius=20,
+ txt_weight=0, txt_size=10.0,
+ txt_fg_colour=0x7A5ADA, txt_fg_alpha=1.0,
+ graduation_radius=28,
+ graduation_thickness=0, graduation_mark_thickness=1,
+ graduation_unit_angle=27,
+ graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
+ caption='Up',
+ caption_weight=1, caption_size=12.0,
+ caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.5,
+},
+}
+
+-- converts color in hexa to decimal
+function rgb_to_r_g_b(colour, alpha)
+ return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
+end
+
+-- convert degree to rad and rotate (0 degree is top/north)
+function angle_to_position(start_angle, current_angle)
+ local pos = current_angle + start_angle
+ return ( ( pos * (2 * math.pi / 360) ) - (math.pi / 2) )
+end
+
+
+-- displays gauges
+function draw_gauge_ring(display, data, value)
+ local max_value = data['max_value']
+ local x, y = data['x'], data['y']
+ local graph_radius = data['graph_radius']
+ local graph_thickness, graph_unit_thickness = data['graph_thickness'], data['graph_unit_thickness']
+ local graph_start_angle = data['graph_start_angle']
+ local graph_unit_angle = data['graph_unit_angle']
+ local graph_bg_colour, graph_bg_alpha = data['graph_bg_colour'], data['graph_bg_alpha']
+ local graph_fg_colour, graph_fg_alpha = data['graph_fg_colour'], data['graph_fg_alpha']
+ local hand_fg_colour, hand_fg_alpha = data['hand_fg_colour'], data['hand_fg_alpha']
+ local graph_end_angle = (max_value * graph_unit_angle) % 360
+
+ -- background ring
+ cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, 0), angle_to_position(graph_start_angle, graph_end_angle))
+ cairo_set_source_rgba(display, rgb_to_r_g_b(graph_bg_colour, graph_bg_alpha))
+ cairo_set_line_width(display, graph_thickness)
+ cairo_stroke(display)
+
+ -- arc of value
+ local val = value % (max_value + 1)
+ local start_arc = 0
+ local stop_arc = 0
+ local i = 1
+ while i <= val do
+ start_arc = (graph_unit_angle * i) - graph_unit_thickness
+ stop_arc = (graph_unit_angle * i)
+ cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
+ cairo_set_source_rgba(display, rgb_to_r_g_b(graph_fg_colour, graph_fg_alpha))
+ cairo_stroke(display)
+ i = i + 1
+ end
+ local angle = start_arc
+
+ -- hand
+ start_arc = (graph_unit_angle * val) - (graph_unit_thickness * 2)
+ stop_arc = (graph_unit_angle * val)
+ cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
+ cairo_set_source_rgba(display, rgb_to_r_g_b(hand_fg_colour, hand_fg_alpha))
+ cairo_stroke(display)
+
+ -- graduations marks
+ local graduation_radius = data['graduation_radius']
+ local graduation_thickness, graduation_mark_thickness = data['graduation_thickness'], data['graduation_mark_thickness']
+ local graduation_unit_angle = data['graduation_unit_angle']
+ local graduation_fg_colour, graduation_fg_alpha = data['graduation_fg_colour'], data['graduation_fg_alpha']
+ if graduation_radius > 0 and graduation_thickness > 0 and graduation_unit_angle > 0 then
+ local nb_graduation = graph_end_angle / graduation_unit_angle
+ local i = 0
+ while i < nb_graduation do
+ cairo_set_line_width(display, graduation_thickness)
+ start_arc = (graduation_unit_angle * i) - (graduation_mark_thickness / 2)
+ stop_arc = (graduation_unit_angle * i) + (graduation_mark_thickness / 2)
+ cairo_arc(display, x, y, graduation_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
+ cairo_set_source_rgba(display,rgb_to_r_g_b(graduation_fg_colour,graduation_fg_alpha))
+ cairo_stroke(display)
+ cairo_set_line_width(display, graph_thickness)
+ i = i + 1
+ end
+ end
+
+ -- text
+ local txt_radius = data['txt_radius']
+ local txt_weight, txt_size = data['txt_weight'], data['txt_size']
+ local txt_fg_colour, txt_fg_alpha = data['txt_fg_colour'], data['txt_fg_alpha']
+ local movex = txt_radius * math.cos(angle_to_position(graph_start_angle, angle))
+ local movey = txt_radius * math.sin(angle_to_position(graph_start_angle, angle))
+ cairo_select_font_face (display, "ubuntu", CAIRO_FONT_SLANT_NORMAL, txt_weight)
+ cairo_set_font_size (display, txt_size)
+ cairo_set_source_rgba (display, rgb_to_r_g_b(txt_fg_colour, txt_fg_alpha))
+ if txt_radius > 0 then
+ cairo_move_to (display, x + movex - (txt_size / 2), y + movey + 3)
+ cairo_show_text (display, value)
+ cairo_stroke (display)
+ end
+
+ -- caption
+ local caption = data['caption']
+ local caption_weight, caption_size = data['caption_weight'], data['caption_size']
+ local caption_fg_colour, caption_fg_alpha = data['caption_fg_colour'], data['caption_fg_alpha']
+ local tox = graph_radius * (math.cos((graph_start_angle * 2 * math.pi / 360)-(math.pi/2)))
+ local toy = graph_radius * (math.sin((graph_start_angle * 2 * math.pi / 360)-(math.pi/2)))
+ cairo_select_font_face (display, "ubuntu", CAIRO_FONT_SLANT_NORMAL, caption_weight);
+ cairo_set_font_size (display, caption_size)
+ cairo_set_source_rgba (display, rgb_to_r_g_b(caption_fg_colour, caption_fg_alpha))
+ cairo_move_to (display, x + tox + 5, y + toy + 5)
+ -- bad hack but not enough time !
+ if graph_start_angle < 105 then
+ cairo_move_to (display, x + tox - 30, y + toy + 1)
+ end
+ cairo_show_text (display, caption)
+ cairo_stroke (display)
+end
+
+
+-- loads data and displays gauges
+function go_gauge_rings(display)
+ local function load_gauge_rings(display, data)
+ local str, value = '', 0
+ str = string.format('${%s %s}',data['name'], data['arg'])
+ str = conky_parse(str)
+ value = tonumber(str)
+ draw_gauge_ring(display, data, value)
+ end
+
+ for i in pairs(gauge) do
+ load_gauge_rings(display, gauge[i])
+ end
+end
+
+-------------------------------------------------------------------------------
+-- MAIN
+function conky_main()
+ if conky_window == nil then
+ return
+ end
+
+ local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
+ local display = cairo_create(cs)
+
+ local updates = conky_parse('${updates}')
+ update_num = tonumber(updates)
+
+ if update_num > 5 then
+ go_gauge_rings(display)
+ end
+
+ cairo_surface_destroy(cs)
+ cairo_destroy(display)
+
+end
+
diff --git a/.config/awesome/freedesktop/LICENSE b/.config/awesome/freedesktop/LICENSE
new file mode 100644
index 0000000..23cb790
--- /dev/null
+++ b/.config/awesome/freedesktop/LICENSE
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ {description}
+ Copyright (C) {year} {fullname}
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ {signature of Ty Coon}, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/.config/awesome/freedesktop/README.rst b/.config/awesome/freedesktop/README.rst
new file mode 100644
index 0000000..7a2eef6
--- /dev/null
+++ b/.config/awesome/freedesktop/README.rst
@@ -0,0 +1,52 @@
+Awesome-Freedesktop
+===================
+
+-------------------------------------------------------------------
+Freedesktop.org menu and desktop icons support for Awesome WM 4.x
+-------------------------------------------------------------------
+
+:Original author: Antonio Terceiro
+:Maintainer: Luke Bonham
+:Version: git
+:License: GNU-GPL2_
+:Source: https://github.com/copycat-killer/awesome-freedesktop
+
+Description
+-----------
+
+This is a port of awesome-freedesktop_ to Awesome_ 4.x.
+
+See branches_ for previous versions.
+
+Since the introduction of Menubar_ as core library for providing Freedesktop.org menu functionalities in Awesome,
+we can now avoid all the dirty work by just exploiting ``menubar.utils`` functions.
+
+At the initial status of this port, the menu is pretty much complete, while the desktop icons are very basic,
+so the long term objective will be to complete functionalities on this part too.
+
+More specifically, the todo list is:
+
+- A better way to handle desktop icons path
+- Ability to drag and line up icons
+- Event-based signals, in particular:
+ - Updating trash icon according to its status
+ - Dynamic update (no need to restart Awesome to see changes on desktop)
+
+Screenshot
+----------
+
+.. image:: screenshot.png
+ :align: center
+ :alt: Showcase of Freedesktop support in Awesome, using Adwaita icons
+
+Installation and usage
+----------------------
+
+Read the wiki_.
+
+.. _GNU-GPL2: http://www.gnu.org/licenses/gpl-2.0.html
+.. _awesome-freedesktop: https://github.com/terceiro/awesome-freedesktop
+.. _Awesome: https://github.com/awesomeWM/awesome
+.. _branches: https://github.com/copycat-killer/awesome-freedesktop/branches
+.. _Menubar: https://github.com/awesomeWM/awesome/tree/master/lib/menubar
+.. _wiki: https://github.com/copycat-killer/awesome-freedesktop/wiki
diff --git a/.config/awesome/freedesktop/awesome-freedesktop-git.rockspec b/.config/awesome/freedesktop/awesome-freedesktop-git.rockspec
new file mode 100644
index 0000000..36264f2
--- /dev/null
+++ b/.config/awesome/freedesktop/awesome-freedesktop-git.rockspec
@@ -0,0 +1,20 @@
+package = "awesome-freedesktop"
+version = "git"
+source = {
+ url = "https://github.com/copycat-killer/awesome-freedesktop",
+ tag = "git"
+}
+description = {
+ summary = "Freedesktop.org menu and desktop icons support for Awesome WM",
+ homepage = "https://github.com/copycat-killer/awesome-freedesktop",
+ license = "GPL v2"
+}
+dependencies = {
+ "lua >= 5.3",
+ "awesome >= 4.0"
+}
+supported_platforms = { "linux" }
+build = {
+ type = "builtin",
+ modules = { freedesktop = "init.lua" }
+}
diff --git a/.config/awesome/freedesktop/desktop.lua b/.config/awesome/freedesktop/desktop.lua
new file mode 100644
index 0000000..cf6139b
--- /dev/null
+++ b/.config/awesome/freedesktop/desktop.lua
@@ -0,0 +1,255 @@
+
+--[[
+
+ Awesome-Freedesktop
+ Freedesktop.org compliant desktop entries and menu
+
+ Desktop section
+
+ Licensed under GNU General Public License v2
+ * (c) 2016, Luke Bonham
+ * (c) 2009-2015, Antonio Terceiro
+
+--]]
+
+local awful = require("awful")
+local theme = require("beautiful")
+local utils = require("menubar.utils")
+local wibox = require("wibox")
+
+local capi = { screen = screen }
+local io = io
+local ipairs = ipairs
+local mouse = mouse
+local os = os
+local string = { format = string.format }
+local table = table
+
+-- Desktop icons
+-- freedesktop.desktop
+local desktop = {
+ -- Default desktop basic icons
+ baseicons = {
+ [1] = {
+ label = "This PC",
+ icon = "computer",
+ onclick = "computer://"
+ },
+ [2] = {
+ label = "Home",
+ icon = "user-home",
+ onclick = os.getenv("HOME")
+ },
+ [3] = {
+ label = "Trash",
+ icon = "user-trash",
+ onclick = "trash://"
+ }
+ },
+ -- Default parameters
+ iconsize = { width = 48, height = 48 },
+ labelsize = { width = 140, height = 20 },
+ margin = { x = 20, y = 20 },
+}
+
+-- MIME types list
+local mime_types = {}
+
+-- Icons positioning
+local desktop_current_pos = {}
+
+-- @return iterator on input pipe
+local function pipelines(...)
+ local f = assert(io.popen(...))
+ return function ()
+ local data = f:read()
+ if data == nil then f:close() end
+ return data
+ end
+end
+
+-- Adds an icon to desktop
+-- @param args settings from desktop.add_icons
+-- @param label icon string label
+-- @param icon icon string file path
+-- @param onclick function to execute on click
+function desktop.add_single_icon(args, label, icon, onclick)
+ local s = args.screen
+
+ -- define icon dimensions and position
+ if not desktop_current_pos[s] then
+ desktop_current_pos[s] = { x = (capi.screen[s].geometry.x + args.iconsize.width + args.margin.x), y = 40 }
+ end
+
+ local totheight = (icon and args.iconsize.height or 0) + (label and args.labelsize.height or 0)
+ if totheight == 0 then return end
+
+ if desktop_current_pos[s].y + totheight > capi.screen[s].geometry.height - 40 then
+ desktop_current_pos[s].x = desktop_current_pos[s].x + args.labelsize.width + args.iconsize.width + args.margin.x
+ desktop_current_pos[s].y = 40
+ end
+
+ local common = { screen = s, bg = "#00000000", visible = true, type = "desktop" }
+
+ -- create icon container
+ if icon then
+ common.width = args.iconsize.width
+ common.height = args.iconsize.height
+ common.x = desktop_current_pos[s].x
+ common.y = desktop_current_pos[s].y
+
+ icon = wibox.widget {
+ image = icon,
+ resize = false,
+ widget = wibox.widget.imagebox
+ }
+
+ icon:buttons(awful.button({ }, 1, nil, onclick))
+
+ icon_container = wibox(common)
+ icon_container:set_widget(icon)
+
+ desktop_current_pos[s].y = desktop_current_pos[s].y + args.iconsize.height + 5
+ end
+
+ -- create label container
+ if label then
+ common.width = args.labelsize.width
+ common.height = args.labelsize.height
+ common.x = desktop_current_pos[s].x - (args.labelsize.width/2) + args.iconsize.width/2
+ common.y = desktop_current_pos[s].y
+
+ caption = wibox.widget {
+ text = label,
+ align = "center",
+ forced_width = common.width,
+ forced_height = common.height,
+ ellipsize = "middle",
+ widget = wibox.widget.textbox
+ }
+
+ caption:buttons(awful.button({ }, 1, onclick))
+ caption_container = wibox(common)
+ caption_container:set_widget(caption)
+ end
+
+ desktop_current_pos[s].y = desktop_current_pos[s].y + args.labelsize.height + args.margin.y
+end
+
+-- Adds base icons (This PC, Trash, etc) to desktop
+-- @param args settings from desktop.add_icons
+function desktop.add_base_icons(args)
+ for _,base in ipairs(args.baseicons) do
+ desktop.add_single_icon(args, base.label, utils.lookup_icon(base.icon), function()
+ awful.spawn(string.format("%s '%s'", args.open_width, base.onclick))
+ end)
+ end
+end
+
+-- Looks up a suitable icon for filename
+-- @param filename string file name
+-- @return icon file path (string)
+function desktop.lookup_file_icon(filename)
+ -- load system MIME types
+ if #mime_types == 0 then
+ for line in io.lines("/etc/mime.types") do
+ if not line:find("^#") then
+ local parsed = {}
+ for w in line:gmatch("[^%s]+") do
+ table.insert(parsed, w)
+ end
+ if #parsed > 1 then
+ for i = 2, #parsed do
+ mime_types[parsed[i]] = parsed[1]:gsub("/", "-")
+ end
+ end
+ end
+ end
+ end
+
+ -- try to search a possible icon among standards
+ local extension = filename:match("%a+$")
+ local mime = mime_types[extension] or ""
+ local mime_family = mime:match("^%a+") or ""
+
+ local possible_filenames = {
+ mime, "gnome-mime-" .. mime,
+ mime_family, "gnome-mime-" .. mime_family,
+ extension
+ }
+
+ for i, filename in ipairs(possible_filenames) do
+ local icon = utils.lookup_icon(filename)
+ if icon then return icon end
+ end
+
+ -- if we don"t find ad icon, then pretend is a plain text file
+ return utils.lookup_icon("text-x-generic")
+end
+
+-- Parse subdirectories and files list from input directory
+-- @input dir directory to parse (string)
+-- @return files table with found entries
+function desktop.parse_dirs_and_files(dir)
+ local files = {}
+ local paths = pipelines('find '..dir..' -maxdepth 1 -type d | tail -1')
+ for path in paths do
+ if path:match("[^/]+$") then
+ local file = {}
+ file.filename = path:match("[^/]+$")
+ file.path = path
+ file.show = true
+ file.icon = utils.lookup_icon("folder")
+ table.insert(files, file)
+ end
+ end
+ local paths = pipelines('find '..dir..' -maxdepth 1 -type f')
+ for path in paths do
+ if not path:find("%.desktop$") then
+ local file = {}
+ file.filename = path:match("[^/]+$")
+ file.path = path
+ file.show = true
+ file.icon = desktop.lookup_file_icon(file.filename)
+ table.insert(files, file)
+ end
+ end
+ return files
+end
+
+-- Adds subdirectories and files icons from args.dir
+-- @param args settings from desktop.add_icons
+function desktop.add_dirs_and_files_icons(args)
+ for _, file in ipairs(desktop.parse_dirs_and_files(args.dir)) do
+ if file.show then
+ local label = args.showlabels and file.filename or nil
+ local onclick = function () awful.spawn(string.format("%s '%s'", args.open_with, file.path)) end
+ desktop.add_single_icon(args, label, file.icon, onclick)
+ end
+ end
+end
+
+-- Main function, adds base, directory and files icons
+-- @param args user defined settings, with fallback on defaults
+function desktop.add_icons(args)
+ args = args or {}
+ args.screen = args.screen or mouse.screen
+ args.dir = args.dir or os.getenv("HOME") .. "/Desktop"
+ args.showlabels = args.showlabel or true
+ args.open_with = args.open_with or "xdg_open"
+ args.baseicons = args.baseicons or desktop.baseicons
+ args.iconsize = args.iconsize or desktop.iconsize
+ args.labelsize = args.labelsize or desktop.labelsize
+ args.margin = args.margin or desktop.margin
+
+ -- trying to fallback on Adwaita if theme.icon_theme is not defined
+ -- if Adwaita is missing too, no icons will be shown
+ if not theme.icon_theme then
+ theme.icon_theme = args.icon_theme or "Adwaita"
+ end
+
+ desktop.add_base_icons(args)
+ desktop.add_dirs_and_files_icons(args)
+end
+
+return desktop
diff --git a/.config/awesome/freedesktop/init.lua b/.config/awesome/freedesktop/init.lua
new file mode 100644
index 0000000..cb0548f
--- /dev/null
+++ b/.config/awesome/freedesktop/init.lua
@@ -0,0 +1,16 @@
+
+--[[
+
+ Awesome-Freedesktop
+ Freedesktop.org compliant desktop entries and menu
+
+ Licensed under GNU General Public License v2
+ * (c) 2016, Luke Bonham
+ * (c) 2009-2015, Antonio Terceiro
+
+--]]
+
+return {
+ desktop = require("freedesktop.desktop"),
+ menu = require("freedesktop.menu")
+}
diff --git a/.config/awesome/freedesktop/menu.lua b/.config/awesome/freedesktop/menu.lua
new file mode 100644
index 0000000..591fd74
--- /dev/null
+++ b/.config/awesome/freedesktop/menu.lua
@@ -0,0 +1,123 @@
+
+--[[
+
+ Awesome-Freedesktop
+ Freedesktop.org compliant desktop entries and menu
+
+ Menu section
+
+ Licensed under GNU General Public License v2
+ * (c) 2016, Luke Bonham
+ * (c) 2014, Harvey Mittens
+
+--]]
+
+local awful_menu = require("awful.menu")
+local menu_gen = require("menubar.menu_gen")
+local menu_utils = require("menubar.utils")
+local icon_theme = require("menubar.icon_theme")
+
+local os = { execute = os.execute,
+ getenv = os.getenv }
+local pairs = pairs
+local string = { byte = string.byte,
+ format = string.format }
+local table = { insert = table.insert,
+ remove = table.remove,
+ sort = table.sort }
+
+-- Add support for NixOS systems too
+table.insert(menu_gen.all_menu_dirs, string.format("%s/.nix-profile/share/applications", os.getenv("HOME")))
+
+-- Remove non existent paths in order to avoid issues
+local existent_paths = {}
+for k,v in pairs(menu_gen.all_menu_dirs) do
+ if os.execute(string.format("ls %s &> /dev/null", v)) then
+ table.insert(existent_paths, v)
+ end
+end
+menu_gen.all_menu_dirs = existent_paths
+
+-- Expecting a wm_name of awesome omits too many applications and tools
+menu_utils.wm_name = ""
+
+-- Menu
+-- freedesktop.menu
+local menu = {}
+
+-- Determines whether an table includes a certain element
+-- @param tab a given table
+-- @param val the element to search for
+-- @return true if the given string is found within the search table; otherwise, false if not
+local function has_value (tab, val)
+ for index, value in ipairs(tab) do
+ if val:find(value) then
+ return true
+ end
+ end
+ return false
+end
+
+-- Use MenuBar parsing utils to build a menu for Awesome
+-- @return awful.menu
+function menu.build(args)
+ local args = args or {}
+ local icon_size = args.icon_size
+ local before = args.before or {}
+ local after = args.after or {}
+ local skip_items = args.skip_items or {}
+
+ local result = {}
+ local _menu = awful_menu({ items = before })
+
+ menu_gen.generate(function(entries)
+ -- Add category icons
+ for k, v in pairs(menu_gen.all_categories) do
+ table.insert(result, { k, {}, v.icon })
+ end
+
+ -- Get items table
+ for k, v in pairs(entries) do
+ for _, cat in pairs(result) do
+ if cat[1] == v.category then
+ if not has_value(skip_items, v.name) then
+ table.insert(cat[2], { v.name, v.cmdline, v.icon })
+ end
+ break
+ end
+ end
+ end
+
+ -- Cleanup things a bit
+ for i = #result, 1, -1 do
+ local v = result[i]
+ if #v[2] == 0 then
+ -- Remove unused categories
+ table.remove(result, i)
+ else
+ --Sort entries alphabetically (by name)
+ table.sort(v[2], function (a, b) return string.byte(a[1]) < string.byte(b[1]) end)
+ -- Replace category name with nice name
+ v[1] = menu_gen.all_categories[v[1]].name
+ end
+ end
+
+ -- Sort categories alphabetically also
+ table.sort(result, function(a, b) return string.byte(a[1]) < string.byte(b[1]) end)
+
+ -- Add items to menu
+ for _, v in pairs(result) do _menu:add(v) end
+ for _, v in pairs(after) do _menu:add(v) end
+ end)
+
+ -- Set icon size
+ if icon_size then
+ for _,v in pairs(menu_gen.all_categories) do
+ v.icon = icon_theme():find_icon_path(v.icon_name, icon_size)
+ end
+ end
+
+ return _menu
+end
+
+return menu
diff --git a/.config/awesome/freedesktop/screenshot.png b/.config/awesome/freedesktop/screenshot.png
new file mode 100644
index 0000000..2cf88e5
Binary files /dev/null and b/.config/awesome/freedesktop/screenshot.png differ
diff --git a/.config/awesome/lain/ISSUE_TEMPLATE.md b/.config/awesome/lain/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000..37c2141
--- /dev/null
+++ b/.config/awesome/lain/ISSUE_TEMPLATE.md
@@ -0,0 +1,21 @@
+# If you have a question
+
+Take the following steps:
+
+1. [Google it](https://encrypted.google.com)
+2. Search [Awesome doc](https://awesomewm.org/doc)
+3. Ask [community](https://awesomewm.org/community)
+
+and, if you still don't have an answer, you can ask here.
+
+**Please be warned:** if your question is __unrelated__ to this repository, a reply is only an act of kindness.
+
+# If you have an issue
+
+**Please read the [wiki](https://github.com/copycat-killer/lain/wiki) and search the [Issues section](https://github.com/copycat-killer/lain/issues) first.**
+
+If you can't find a solution there, then go ahead and provide:
+
+* output of `awesome -v` and `lua -v`
+* expected behavior and actual behavior
+* steps to reproduce the problem
diff --git a/.config/awesome/lain/LICENSE b/.config/awesome/lain/LICENSE
new file mode 100644
index 0000000..23cb790
--- /dev/null
+++ b/.config/awesome/lain/LICENSE
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ {description}
+ Copyright (C) {year} {fullname}
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ {signature of Ty Coon}, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/.config/awesome/lain/README.rst b/.config/awesome/lain/README.rst
new file mode 100644
index 0000000..9ba9715
--- /dev/null
+++ b/.config/awesome/lain/README.rst
@@ -0,0 +1,39 @@
+Lain
+====
+
+-------------------------------------------------
+Layouts, widgets and utilities for Awesome WM 4.x
+-------------------------------------------------
+
+:Author: Luke Bonham
+:Version: git
+:License: GNU-GPL2_
+:Source: https://github.com/copycat-killer/lain
+
+Description
+-----------
+
+Successor of awesome-vain_, this module provides alternative layouts, asynchronous widgets and utility functions for Awesome_ WM. Read the wiki_ for all the info.
+
+Contributions
+-------------
+
+Constructive criticism and suggestions are welcome.
+
+If you want to create a pull request, make sure that:
+
+- Your code fits with the general style of the module. In particular, you should use the same indentation pattern that the code uses, and also avoid adding space at the ends of lines.
+
+- Your code its easy to understand, maintainable, and modularized. You should also avoid code duplication wherever possible by adding functions to or using lain.helpers_. If something is unclear, or you can't write it in such a way that it will be clear, explain it with a comment.
+
+- You test your changes before submitting to make sure that you code works and does not break other parts of the module.
+
+- You eventually update ``wiki`` submodule with a thorough section.
+
+Contributed widgets have to be put in ``widget/contrib``.
+
+.. _GNU-GPL2: http://www.gnu.org/licenses/gpl-2.0.html
+.. _awesome-vain: https://github.com/vain/awesome-vain
+.. _Awesome: https://github.com/awesomeWM/awesome
+.. _wiki: https://github.com/copycat-killer/lain/wiki
+.. _lain.helpers: https://github.com/copycat-killer/lain/blob/master/helpers.lua
diff --git a/.config/awesome/lain/helpers.lua b/.config/awesome/lain/helpers.lua
new file mode 100644
index 0000000..7fa8564
--- /dev/null
+++ b/.config/awesome/lain/helpers.lua
@@ -0,0 +1,167 @@
+--[[
+
+ Licensed under GNU General Public License v2
+ * (c) 2013, Luke Bonham
+
+--]]
+
+local easy_async = require("awful.spawn").easy_async
+local timer = require("gears.timer")
+local debug = require("debug")
+local io = { lines = io.lines,
+ open = io.open }
+local rawget = rawget
+local table = { sort = table.sort }
+
+-- Lain helper functions for internal use
+-- lain.helpers
+local helpers = {}
+
+helpers.lain_dir = debug.getinfo(1, 'S').source:match[[^@(.*/).*$]]
+helpers.icons_dir = helpers.lain_dir .. 'icons/'
+helpers.scripts_dir = helpers.lain_dir .. 'scripts/'
+
+-- {{{ Modules loader
+
+function helpers.wrequire(table, key)
+ local module = rawget(table, key)
+ return module or require(table._NAME .. '.' .. key)
+end
+
+-- }}}
+
+-- {{{ File operations
+
+-- see if the file exists and is readable
+function helpers.file_exists(file)
+ local f = io.open(file)
+ if f then
+ local s = f:read()
+ f:close()
+ f = s
+ end
+ return f ~= nil
+end
+
+-- get all lines from a file, returns an empty
+-- list/table if the file does not exist
+function helpers.lines_from(file)
+ if not helpers.file_exists(file) then return {} end
+ local lines = {}
+ for line in io.lines(file) do
+ lines[#lines + 1] = line
+ end
+ return lines
+end
+
+-- match all lines from a file, returns an empty
+-- list/table if the file or match does not exist
+function helpers.lines_match(regexp, file)
+ local lines = {}
+ for index,line in pairs(helpers.lines_from(file)) do
+ if string.match(line, regexp) then
+ lines[index] = line
+ end
+ end
+ return lines
+end
+
+-- get first line of a file, return nil if
+-- the file does not exist
+function helpers.first_line(file)
+ return helpers.lines_from(file)[1]
+end
+
+-- get first non empty line from a file,
+-- returns nil otherwise
+function helpers.first_nonempty_line(file)
+ for k,v in pairs(helpers.lines_from(file)) do
+ if #v then return v end
+ end
+ return nil
+end
+
+-- }}}
+
+-- {{{ Timer maker
+
+helpers.timer_table = {}
+
+function helpers.newtimer(name, timeout, fun, nostart, stoppable)
+ if not name or #name == 0 then return end
+ name = (stoppable and name) or timeout
+ if not helpers.timer_table[name] then
+ helpers.timer_table[name] = timer({ timeout = timeout })
+ helpers.timer_table[name]:start()
+ end
+ helpers.timer_table[name]:connect_signal("timeout", fun)
+ if not nostart then
+ helpers.timer_table[name]:emit_signal("timeout")
+ end
+ return stoppable and helpers.timer_table[name]
+end
+
+-- }}}
+
+-- {{{ Pipe operations
+
+-- run a command and execute a function on its output (asynchronous pipe)
+-- @param cmd the input command
+-- @param callback function to execute on cmd output
+-- @return cmd PID
+function helpers.async(cmd, callback)
+ return easy_async(cmd,
+ function (stdout, stderr, reason, exit_code)
+ callback(stdout)
+ end)
+end
+
+-- }}}
+
+-- {{{ A map utility
+
+helpers.map_table = {}
+
+function helpers.set_map(element, value)
+ helpers.map_table[element] = value
+end
+
+function helpers.get_map(element)
+ return helpers.map_table[element]
+end
+
+-- }}}
+
+-- {{{ Misc
+
+-- check if an element exist on a table
+function helpers.element_in_table(element, tbl)
+ for _, i in pairs(tbl) do
+ if i == element then
+ return true
+ end
+ end
+ return false
+end
+
+-- iterate over table of records sorted by keys
+function helpers.spairs(t)
+ -- collect the keys
+ local keys = {}
+ for k in pairs(t) do keys[#keys+1] = k end
+
+ table.sort(keys)
+
+ -- return the iterator function
+ local i = 0
+ return function()
+ i = i + 1
+ if keys[i] then
+ return keys[i], t[keys[i]]
+ end
+ end
+end
+
+-- }}}
+
+return helpers
diff --git a/.config/awesome/lain/icons/cal/white/1.png b/.config/awesome/lain/icons/cal/white/1.png
new file mode 100644
index 0000000..a0faa20
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/1.png differ
diff --git a/.config/awesome/lain/icons/cal/white/10.png b/.config/awesome/lain/icons/cal/white/10.png
new file mode 100644
index 0000000..7d9343b
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/10.png differ
diff --git a/.config/awesome/lain/icons/cal/white/11.png b/.config/awesome/lain/icons/cal/white/11.png
new file mode 100644
index 0000000..7af5e99
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/11.png differ
diff --git a/.config/awesome/lain/icons/cal/white/12.png b/.config/awesome/lain/icons/cal/white/12.png
new file mode 100644
index 0000000..b164f85
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/12.png differ
diff --git a/.config/awesome/lain/icons/cal/white/13.png b/.config/awesome/lain/icons/cal/white/13.png
new file mode 100644
index 0000000..fef74f3
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/13.png differ
diff --git a/.config/awesome/lain/icons/cal/white/14.png b/.config/awesome/lain/icons/cal/white/14.png
new file mode 100644
index 0000000..d747a6b
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/14.png differ
diff --git a/.config/awesome/lain/icons/cal/white/15.png b/.config/awesome/lain/icons/cal/white/15.png
new file mode 100644
index 0000000..64418a6
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/15.png differ
diff --git a/.config/awesome/lain/icons/cal/white/16.png b/.config/awesome/lain/icons/cal/white/16.png
new file mode 100644
index 0000000..8b86700
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/16.png differ
diff --git a/.config/awesome/lain/icons/cal/white/17.png b/.config/awesome/lain/icons/cal/white/17.png
new file mode 100644
index 0000000..033b5ff
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/17.png differ
diff --git a/.config/awesome/lain/icons/cal/white/18.png b/.config/awesome/lain/icons/cal/white/18.png
new file mode 100644
index 0000000..0cf1c24
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/18.png differ
diff --git a/.config/awesome/lain/icons/cal/white/19.png b/.config/awesome/lain/icons/cal/white/19.png
new file mode 100644
index 0000000..bfd3530
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/19.png differ
diff --git a/.config/awesome/lain/icons/cal/white/2.png b/.config/awesome/lain/icons/cal/white/2.png
new file mode 100644
index 0000000..e7f3fa4
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/2.png differ
diff --git a/.config/awesome/lain/icons/cal/white/20.png b/.config/awesome/lain/icons/cal/white/20.png
new file mode 100644
index 0000000..9a5a1fb
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/20.png differ
diff --git a/.config/awesome/lain/icons/cal/white/21.png b/.config/awesome/lain/icons/cal/white/21.png
new file mode 100644
index 0000000..266ab9f
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/21.png differ
diff --git a/.config/awesome/lain/icons/cal/white/22.png b/.config/awesome/lain/icons/cal/white/22.png
new file mode 100644
index 0000000..f486289
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/22.png differ
diff --git a/.config/awesome/lain/icons/cal/white/23.png b/.config/awesome/lain/icons/cal/white/23.png
new file mode 100644
index 0000000..244dceb
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/23.png differ
diff --git a/.config/awesome/lain/icons/cal/white/24.png b/.config/awesome/lain/icons/cal/white/24.png
new file mode 100644
index 0000000..0ce1c75
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/24.png differ
diff --git a/.config/awesome/lain/icons/cal/white/25.png b/.config/awesome/lain/icons/cal/white/25.png
new file mode 100644
index 0000000..48d279c
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/25.png differ
diff --git a/.config/awesome/lain/icons/cal/white/26.png b/.config/awesome/lain/icons/cal/white/26.png
new file mode 100644
index 0000000..7535855
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/26.png differ
diff --git a/.config/awesome/lain/icons/cal/white/27.png b/.config/awesome/lain/icons/cal/white/27.png
new file mode 100644
index 0000000..2aa9074
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/27.png differ
diff --git a/.config/awesome/lain/icons/cal/white/28.png b/.config/awesome/lain/icons/cal/white/28.png
new file mode 100644
index 0000000..0201976
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/28.png differ
diff --git a/.config/awesome/lain/icons/cal/white/29.png b/.config/awesome/lain/icons/cal/white/29.png
new file mode 100644
index 0000000..9305b9b
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/29.png differ
diff --git a/.config/awesome/lain/icons/cal/white/3.png b/.config/awesome/lain/icons/cal/white/3.png
new file mode 100644
index 0000000..f1eb5de
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/3.png differ
diff --git a/.config/awesome/lain/icons/cal/white/30.png b/.config/awesome/lain/icons/cal/white/30.png
new file mode 100644
index 0000000..1ba61aa
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/30.png differ
diff --git a/.config/awesome/lain/icons/cal/white/31.png b/.config/awesome/lain/icons/cal/white/31.png
new file mode 100644
index 0000000..e9a873b
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/31.png differ
diff --git a/.config/awesome/lain/icons/cal/white/4.png b/.config/awesome/lain/icons/cal/white/4.png
new file mode 100644
index 0000000..ee1ed6a
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/4.png differ
diff --git a/.config/awesome/lain/icons/cal/white/5.png b/.config/awesome/lain/icons/cal/white/5.png
new file mode 100644
index 0000000..466aa71
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/5.png differ
diff --git a/.config/awesome/lain/icons/cal/white/6.png b/.config/awesome/lain/icons/cal/white/6.png
new file mode 100644
index 0000000..0a7bf4d
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/6.png differ
diff --git a/.config/awesome/lain/icons/cal/white/7.png b/.config/awesome/lain/icons/cal/white/7.png
new file mode 100644
index 0000000..e971951
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/7.png differ
diff --git a/.config/awesome/lain/icons/cal/white/8.png b/.config/awesome/lain/icons/cal/white/8.png
new file mode 100644
index 0000000..cb03d0b
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/8.png differ
diff --git a/.config/awesome/lain/icons/cal/white/9.png b/.config/awesome/lain/icons/cal/white/9.png
new file mode 100644
index 0000000..fca554a
Binary files /dev/null and b/.config/awesome/lain/icons/cal/white/9.png differ
diff --git a/.config/awesome/lain/icons/layout/default/cascade.png b/.config/awesome/lain/icons/layout/default/cascade.png
new file mode 100644
index 0000000..292a057
Binary files /dev/null and b/.config/awesome/lain/icons/layout/default/cascade.png differ
diff --git a/.config/awesome/lain/icons/layout/default/cascadetile.png b/.config/awesome/lain/icons/layout/default/cascadetile.png
new file mode 100644
index 0000000..ba30f43
Binary files /dev/null and b/.config/awesome/lain/icons/layout/default/cascadetile.png differ
diff --git a/.config/awesome/lain/icons/layout/default/cascadetilew.png b/.config/awesome/lain/icons/layout/default/cascadetilew.png
new file mode 100644
index 0000000..d15eb70
Binary files /dev/null and b/.config/awesome/lain/icons/layout/default/cascadetilew.png differ
diff --git a/.config/awesome/lain/icons/layout/default/cascadew.png b/.config/awesome/lain/icons/layout/default/cascadew.png
new file mode 100644
index 0000000..da64bd6
Binary files /dev/null and b/.config/awesome/lain/icons/layout/default/cascadew.png differ
diff --git a/.config/awesome/lain/icons/layout/default/centerfair.png b/.config/awesome/lain/icons/layout/default/centerfair.png
new file mode 100644
index 0000000..188c243
Binary files /dev/null and b/.config/awesome/lain/icons/layout/default/centerfair.png differ
diff --git a/.config/awesome/lain/icons/layout/default/centerfairw.png b/.config/awesome/lain/icons/layout/default/centerfairw.png
new file mode 100644
index 0000000..ed4bcf5
Binary files /dev/null and b/.config/awesome/lain/icons/layout/default/centerfairw.png differ
diff --git a/.config/awesome/lain/icons/layout/default/centerwork.png b/.config/awesome/lain/icons/layout/default/centerwork.png
new file mode 100644
index 0000000..51e06bc
Binary files /dev/null and b/.config/awesome/lain/icons/layout/default/centerwork.png differ
diff --git a/.config/awesome/lain/icons/layout/default/centerworkh.png b/.config/awesome/lain/icons/layout/default/centerworkh.png
new file mode 100644
index 0000000..c59092f
Binary files /dev/null and b/.config/awesome/lain/icons/layout/default/centerworkh.png differ
diff --git a/.config/awesome/lain/icons/layout/default/centerworkhw.png b/.config/awesome/lain/icons/layout/default/centerworkhw.png
new file mode 100644
index 0000000..7820f8c
Binary files /dev/null and b/.config/awesome/lain/icons/layout/default/centerworkhw.png differ
diff --git a/.config/awesome/lain/icons/layout/default/centerworkw.png b/.config/awesome/lain/icons/layout/default/centerworkw.png
new file mode 100644
index 0000000..85e6996
Binary files /dev/null and b/.config/awesome/lain/icons/layout/default/centerworkw.png differ
diff --git a/.config/awesome/lain/icons/layout/default/termfair.png b/.config/awesome/lain/icons/layout/default/termfair.png
new file mode 100644
index 0000000..06226c1
Binary files /dev/null and b/.config/awesome/lain/icons/layout/default/termfair.png differ
diff --git a/.config/awesome/lain/icons/layout/default/termfairw.png b/.config/awesome/lain/icons/layout/default/termfairw.png
new file mode 100644
index 0000000..0a8b576
Binary files /dev/null and b/.config/awesome/lain/icons/layout/default/termfairw.png differ
diff --git a/.config/awesome/lain/icons/layout/zenburn/cascade.png b/.config/awesome/lain/icons/layout/zenburn/cascade.png
new file mode 100644
index 0000000..fbe4fac
Binary files /dev/null and b/.config/awesome/lain/icons/layout/zenburn/cascade.png differ
diff --git a/.config/awesome/lain/icons/layout/zenburn/cascadetile.png b/.config/awesome/lain/icons/layout/zenburn/cascadetile.png
new file mode 100644
index 0000000..2e03a80
Binary files /dev/null and b/.config/awesome/lain/icons/layout/zenburn/cascadetile.png differ
diff --git a/.config/awesome/lain/icons/layout/zenburn/centerfair.png b/.config/awesome/lain/icons/layout/zenburn/centerfair.png
new file mode 100644
index 0000000..75dc993
Binary files /dev/null and b/.config/awesome/lain/icons/layout/zenburn/centerfair.png differ
diff --git a/.config/awesome/lain/icons/layout/zenburn/centerwork.png b/.config/awesome/lain/icons/layout/zenburn/centerwork.png
new file mode 100644
index 0000000..af7a863
Binary files /dev/null and b/.config/awesome/lain/icons/layout/zenburn/centerwork.png differ
diff --git a/.config/awesome/lain/icons/layout/zenburn/centerworkh.png b/.config/awesome/lain/icons/layout/zenburn/centerworkh.png
new file mode 100644
index 0000000..88019b3
Binary files /dev/null and b/.config/awesome/lain/icons/layout/zenburn/centerworkh.png differ
diff --git a/.config/awesome/lain/icons/layout/zenburn/termfair.png b/.config/awesome/lain/icons/layout/zenburn/termfair.png
new file mode 100644
index 0000000..f7640b5
Binary files /dev/null and b/.config/awesome/lain/icons/layout/zenburn/termfair.png differ
diff --git a/.config/awesome/lain/icons/mail.png b/.config/awesome/lain/icons/mail.png
new file mode 100644
index 0000000..9c0c7a3
Binary files /dev/null and b/.config/awesome/lain/icons/mail.png differ
diff --git a/.config/awesome/lain/icons/no_net.png b/.config/awesome/lain/icons/no_net.png
new file mode 100644
index 0000000..3613372
Binary files /dev/null and b/.config/awesome/lain/icons/no_net.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/01d.png b/.config/awesome/lain/icons/openweathermap/01d.png
new file mode 100644
index 0000000..569965e
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/01d.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/01n.png b/.config/awesome/lain/icons/openweathermap/01n.png
new file mode 100644
index 0000000..ce5b135
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/01n.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/02d.png b/.config/awesome/lain/icons/openweathermap/02d.png
new file mode 100644
index 0000000..2ba9799
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/02d.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/02n.png b/.config/awesome/lain/icons/openweathermap/02n.png
new file mode 100644
index 0000000..12e4283
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/02n.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/03d.png b/.config/awesome/lain/icons/openweathermap/03d.png
new file mode 100644
index 0000000..1cf0e9d
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/03d.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/03n.png b/.config/awesome/lain/icons/openweathermap/03n.png
new file mode 100644
index 0000000..89a42b8
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/03n.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/04d.png b/.config/awesome/lain/icons/openweathermap/04d.png
new file mode 100644
index 0000000..e7fb67f
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/04d.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/09d.png b/.config/awesome/lain/icons/openweathermap/09d.png
new file mode 100644
index 0000000..cfa066a
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/09d.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/10d.png b/.config/awesome/lain/icons/openweathermap/10d.png
new file mode 100644
index 0000000..712d0c8
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/10d.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/11d.png b/.config/awesome/lain/icons/openweathermap/11d.png
new file mode 100644
index 0000000..3b62f7c
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/11d.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/13d.png b/.config/awesome/lain/icons/openweathermap/13d.png
new file mode 100644
index 0000000..e265b01
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/13d.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/50d.png b/.config/awesome/lain/icons/openweathermap/50d.png
new file mode 100644
index 0000000..905ace3
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/50d.png differ
diff --git a/.config/awesome/lain/icons/openweathermap/README.md b/.config/awesome/lain/icons/openweathermap/README.md
new file mode 100644
index 0000000..f908fbd
--- /dev/null
+++ b/.config/awesome/lain/icons/openweathermap/README.md
@@ -0,0 +1,3 @@
+[Plain Weather Icons](http://merlinthered.deviantart.com/art/plain-weather-icons-157162192), created by [MerlinTheRed](http://merlinthered.deviantart.com/).
+
+
diff --git a/.config/awesome/lain/icons/openweathermap/na.png b/.config/awesome/lain/icons/openweathermap/na.png
new file mode 100644
index 0000000..1cc5132
Binary files /dev/null and b/.config/awesome/lain/icons/openweathermap/na.png differ
diff --git a/.config/awesome/lain/icons/taskwarrior.png b/.config/awesome/lain/icons/taskwarrior.png
new file mode 100644
index 0000000..c64fe86
Binary files /dev/null and b/.config/awesome/lain/icons/taskwarrior.png differ
diff --git a/.config/awesome/lain/init.lua b/.config/awesome/lain/init.lua
new file mode 100644
index 0000000..46c7659
--- /dev/null
+++ b/.config/awesome/lain/init.lua
@@ -0,0 +1,15 @@
+--[[
+
+ Lain
+ Layouts, widgets and utilities for Awesome WM
+
+ Licensed under GNU General Public License v2
+ * (c) 2013, Luke Bonham
+
+--]]
+
+return {
+ layout = require("lain.layout"),
+ util = require("lain.util"),
+ widget = require("lain.widget")
+}
diff --git a/.config/awesome/lain/lain-git.rockspec b/.config/awesome/lain/lain-git.rockspec
new file mode 100644
index 0000000..1b42903
--- /dev/null
+++ b/.config/awesome/lain/lain-git.rockspec
@@ -0,0 +1,26 @@
+package = "lain"
+version = "git"
+source = {
+ url = "https://github.com/copycat-killer/lain",
+ tag = "git"
+}
+description = {
+ summary = "Layout, widgets and utilities for Awesome WM",
+ detailed = [[
+ Successor of awesome-vain, this module provides alternative layouts, asynchronous widgets and utility functions for Awesome WM.
+
+ Optional dependency: curl (for IMAP, MPD and weather widgets).
+ ]],
+ homepage = "https://github.com/copycat-killer/lain",
+ license = "GPL v2"
+}
+dependencies = {
+ "lua >= 5.1",
+ "awesome >= 4.0",
+ "curl"
+}
+supported_platforms = { "linux" }
+build = {
+ type = "builtin",
+ modules = { lain = "init.lua" }
+}
diff --git a/.config/awesome/lain/layout/cascade.lua b/.config/awesome/lain/layout/cascade.lua
new file mode 100644
index 0000000..f7dffb9
--- /dev/null
+++ b/.config/awesome/lain/layout/cascade.lua
@@ -0,0 +1,172 @@
+--[[
+
+ Licensed under GNU General Public License v2
+ * (c) 2014, projektile
+ * (c) 2013, Luke Bonham
+ * (c) 2010-2012, Peter Hofmann
+
+--]]
+
+local floor = math.floor
+local screen = screen
+
+local cascade = {
+ name = "cascade",
+ nmaster = 0,
+ offset_x = 32,
+ offset_y = 8,
+ tile = {
+ name = "cascadetile",
+ nmaster = 0,
+ ncol = 0,
+ mwfact = 0,
+ offset_x = 5,
+ offset_y = 32,
+ extra_padding = 0
+ }
+}
+
+local function do_cascade(p, tiling)
+ local t = p.tag or screen[p.screen].selected_tag
+ local wa = p.workarea
+ local cls = p.clients
+
+ if #cls == 0 then return end
+
+ if not tiling then
+ -- Cascade windows.
+
+ local num_c
+ if cascade.nmaster > 0 then
+ num_c = cascade.nmaster
+ else
+ num_c = t.master_count
+ end
+
+ -- Opening a new window will usually force all existing windows to
+ -- get resized. This wastes a lot of CPU time. So let's set a lower
+ -- bound to "how_many": This wastes a little screen space but you'll
+ -- get a much better user experience.
+ local how_many = (#cls >= num_c and #cls) or num_c
+
+ local current_offset_x = cascade.offset_x * (how_many - 1)
+ local current_offset_y = cascade.offset_y * (how_many - 1)
+
+ -- Iterate.
+ for i = 1,#cls,1 do
+ local c = cls[i]
+ local g = {}
+
+ g.x = wa.x + (how_many - i) * cascade.offset_x
+ g.y = wa.y + (i - 1) * cascade.offset_y
+ g.width = wa.width - current_offset_x
+ g.height = wa.height - current_offset_y
+
+ if g.width < 1 then g.width = 1 end
+ if g.height < 1 then g.height = 1 end
+
+ p.geometries[c] = g
+ end
+ else
+ -- Layout with one fixed column meant for a master window. Its
+ -- width is calculated according to mwfact. Other clients are
+ -- cascaded or "tabbed" in a slave column on the right.
+
+ -- (1) (2) (3) (4)
+ -- +----------+---+ +----------+---+ +----------+---+ +----------+---+
+ -- | | | | | 3 | | | 4 | | +---+|
+ -- | | | -> | | | -> | +---++ -> | +---+|+
+ -- | 1 | 2 | | 1 +---++ | 1 | 3 || | 1 +---+|+|
+ -- | | | | | 2 || | +---++| | +---+|+ |
+ -- | | | | | || | | 2 | | | | 2 |+ |
+ -- +----------+---+ +---------+---++ +--------+---+-+ +------+---+---+
+
+ local mwfact
+ if cascade.tile.mwfact > 0 then
+ mwfact = cascade.tile.mwfact
+ else
+ mwfact = t.master_width_factor
+ end
+
+ -- Make slave windows overlap main window? Do this if ncol is 1.
+ local overlap_main
+ if cascade.tile.ncol > 0 then
+ overlap_main = cascade.tile.ncol
+ else
+ overlap_main = t.column_count
+ end
+
+ -- Minimum space for slave windows? See cascade.tile.lua.
+ local num_c
+ if cascade.tile.nmaster > 0 then
+ num_c = cascade.tile.nmaster
+ else
+ num_c = t.master_count
+ end
+
+ local how_many = (#cls - 1 >= num_c and (#cls - 1)) or num_c
+
+ local current_offset_x = cascade.tile.offset_x * (how_many - 1)
+ local current_offset_y = cascade.tile.offset_y * (how_many - 1)
+
+ if #cls <= 0 then return end
+
+ -- Main column, fixed width and height.
+ local c = cls[1]
+ local g = {}
+ -- Rounding is necessary to prevent the rendered size of slavewid
+ -- from being 1 pixel off when the result is not an integer.
+ local mainwid = floor(wa.width * mwfact)
+ local slavewid = wa.width - mainwid
+
+ if overlap_main == 1 then
+ g.width = wa.width
+
+ -- The size of the main window may be reduced a little bit.
+ -- This allows you to see if there are any windows below the
+ -- main window.
+ -- This only makes sense, though, if the main window is
+ -- overlapping everything else.
+ g.width = g.width - cascade.tile.extra_padding
+ else
+ g.width = mainwid
+ end
+
+ g.height = wa.height
+ g.x = wa.x
+ g.y = wa.y
+
+ if g.width < 1 then g.width = 1 end
+ if g.height < 1 then g.height = 1 end
+
+ p.geometries[c] = g
+
+ -- Remaining clients stacked in slave column, new ones on top.
+ if #cls <= 1 then return end
+ for i = 2,#cls do
+ c = cls[i]
+ g = {}
+
+ g.width = slavewid - current_offset_x
+ g.height = wa.height - current_offset_y
+
+ g.x = wa.x + mainwid + (how_many - (i - 1)) * cascade.tile.offset_x
+ g.y = wa.y + (i - 2) * cascade.tile.offset_y
+
+ if g.width < 1 then g.width = 1 end
+ if g.height < 1 then g.height = 1 end
+
+ p.geometries[c] = g
+ end
+ end
+end
+
+function cascade.tile.arrange(p)
+ return do_cascade(p, true)
+end
+
+function cascade.arrange(p)
+ return do_cascade(p, false)
+end
+
+return cascade
diff --git a/.config/awesome/lain/layout/centerwork.lua b/.config/awesome/lain/layout/centerwork.lua
new file mode 100644
index 0000000..aff2771
--- /dev/null
+++ b/.config/awesome/lain/layout/centerwork.lua
@@ -0,0 +1,153 @@
+--[[
+
+ Licensed under GNU General Public License v2
+ * (c) 2016, Henrik Antonsson
+ * (c) 2015, Joerg Jaspert
+ * (c) 2014, projektile
+ * (c) 2013, Luke Bonham
+ * (c) 2010-2012, Peter Hofmann
+
+--]]
+
+local floor = math.floor
+local screen = screen
+
+local centerwork = {
+ name = "centerwork",
+ horizontal = { name = "centerworkh" }
+}
+
+local function do_centerwork(p, orientation)
+ local t = p.tag or screen[p.screen].selected_tag
+ local wa = p.workarea
+ local cls = p.clients
+
+ if #cls == 0 then return end
+
+ local c = cls[1]
+ local g = {}
+
+ -- Main column, fixed width and height.
+ local mwfact = t.master_width_factor
+ local mainhei = floor(wa.height * mwfact)
+ local mainwid = floor(wa.width * mwfact)
+ local slavewid = wa.width - mainwid
+ local slaveLwid = floor(slavewid / 2)
+ local slaveRwid = slavewid - slaveLwid
+ local slavehei = wa.height - mainhei
+ local slaveThei = floor(slavehei / 2)
+ local slaveBhei = slavehei - slaveThei
+ local nbrFirstSlaves = floor(#cls / 2)
+ local nbrSecondSlaves = floor((#cls - 1) / 2)
+
+ local slaveFirstDim, slaveSecondDim = 0, 0
+
+ if orientation == "vertical" then
+ if nbrFirstSlaves > 0 then slaveFirstDim = floor(wa.height / nbrFirstSlaves) end
+ if nbrSecondSlaves > 0 then slaveSecondDim = floor(wa.height / nbrSecondSlaves) end
+
+ g.height = wa.height
+ g.width = mainwid
+
+ g.x = wa.x + slaveLwid
+ g.y = wa.y
+ else
+ if nbrFirstSlaves > 0 then slaveFirstDim = floor(wa.width / nbrFirstSlaves) end
+ if nbrSecondSlaves > 0 then slaveSecondDim = floor(wa.width / nbrSecondSlaves) end
+
+ g.height = mainhei
+ g.width = wa.width
+
+ g.x = wa.x
+ g.y = wa.y + slaveThei
+ end
+
+ if g.width < 1 then g.width = 1 end
+ if g.height < 1 then g.height = 1 end
+
+ p.geometries[c] = g
+
+ -- Auxiliary windows.
+ if #cls <= 1 then return end
+ for i = 2,#cls do
+ local c = cls[i]
+ local g = {}
+
+ local rowIndex = floor(i/2)
+
+ if orientation == "vertical" then
+ if i % 2 == 0 then
+ -- left slave
+ g.x = wa.x
+ g.y = wa.y + (rowIndex-1)*slaveFirstDim
+
+ g.width = slaveLwid
+
+ -- if last slave in left row use remaining space for that slave
+ if rowIndex == nbrFirstSlaves then
+ g.height = wa.y + wa.height - g.y
+ else
+ g.height = slaveFirstDim
+ end
+ else
+ -- right slave
+ g.x = wa.x + slaveLwid + mainwid
+ g.y = wa.y + (rowIndex-1)*slaveSecondDim
+
+ g.width = slaveRwid
+
+ -- if last slave in right row use remaining space for that slave
+ if rowIndex == nbrSecondSlaves then
+ g.height = wa.y + wa.height - g.y
+ else
+ g.height = slaveSecondDim
+ end
+ end
+ else
+ if i % 2 == 0 then
+ -- top slave
+ g.x = wa.x + (rowIndex-1)*slaveFirstDim
+ g.y = wa.y
+
+ g.height = slaveThei
+
+ -- if last slave in top row use remaining space for that slave
+ if rowIndex == nbrFirstSlaves then
+ g.width = wa.x + wa.width - g.x
+ else
+ g.width = slaveFirstDim
+ end
+ else
+ -- bottom slave
+ g.x = wa.x + (rowIndex-1)*slaveSecondDim
+ g.y = wa.y + slaveThei + mainhei
+
+ g.height = slaveBhei
+
+ -- if last slave in bottom row use remaining space for that slave
+ if rowIndex == nbrSecondSlaves then
+ g.width = wa.x + wa.width - g.x
+ else
+ g.width = slaveSecondDim
+ end
+
+ end
+ end
+
+ if g.width < 1 then g.width = 1 end
+ if g.height < 1 then g.height = 1 end
+
+ p.geometries[c] = g
+ end
+end
+
+
+function centerwork.horizontal.arrange(p)
+ return do_centerwork(p, "horizontal")
+end
+
+function centerwork.arrange(p)
+ return do_centerwork(p, "vertical")
+end
+
+return centerwork
diff --git a/.config/awesome/lain/layout/init.lua b/.config/awesome/lain/layout/init.lua
new file mode 100644
index 0000000..b311f45
--- /dev/null
+++ b/.config/awesome/lain/layout/init.lua
@@ -0,0 +1,19 @@
+--[[
+
+ Lain
+ Layouts, widgets and utilities for Awesome WM
+
+ Layouts section
+
+ Licensed under GNU General Public License v2
+ * (c) 2013, Luke Bonham
+ * (c) 2010-2012, Peter Hofmann
+
+--]]
+
+local wrequire = require("lain.helpers").wrequire
+local setmetatable = setmetatable
+
+local layout = { _NAME = "lain.layout" }
+
+return setmetatable(layout, { __index = wrequire })
diff --git a/.config/awesome/lain/layout/termfair.lua b/.config/awesome/lain/layout/termfair.lua
new file mode 100644
index 0000000..60b3c7d
--- /dev/null
+++ b/.config/awesome/lain/layout/termfair.lua
@@ -0,0 +1,239 @@
+--[[
+
+ Licensed under GNU General Public License v2
+ * (c) 2014, projektile
+ * (c) 2013, Luke Bonham
+ * (c) 2010, Nicolas Estibals
+ * (c) 2010-2012, Peter Hofmann
+
+--]]
+
+local math = { ceil = math.ceil,
+ floor = math.floor,
+ max = math.max }
+local screen = screen
+local tonumber = tonumber
+
+local termfair = { name = "termfair" }
+termfair.center = { name = "centerfair" }
+
+local function do_fair(p, orientation)
+ local t = p.tag or screen[p.screen].selected_tag
+ local wa = p.workarea
+ local cls = p.clients
+
+ if #cls == 0 then return end
+
+ if orientation == "west" then
+ -- Layout with fixed number of vertical columns (read from nmaster).
+ -- New windows align from left to right. When a row is full, a now
+ -- one above it is created. Like this:
+
+ -- (1) (2) (3)
+ -- +---+---+---+ +---+---+---+ +---+---+---+
+ -- | | | | | | | | | | | |
+ -- | 1 | | | -> | 2 | 1 | | -> | 3 | 2 | 1 | ->
+ -- | | | | | | | | | | | |
+ -- +---+---+---+ +---+---+---+ +---+---+---+
+
+ -- (4) (5) (6)
+ -- +---+---+---+ +---+---+---+ +---+---+---+
+ -- | 4 | | | | 5 | 4 | | | 6 | 5 | 4 |
+ -- +---+---+---+ -> +---+---+---+ -> +---+---+---+
+ -- | 3 | 2 | 1 | | 3 | 2 | 1 | | 3 | 2 | 1 |
+ -- +---+---+---+ +---+---+---+ +---+---+---+
+
+ -- How many vertical columns? Read from nmaster on the tag.
+ local num_x = tonumber(termfair.nmaster) or t.master_count
+ local ncol = tonumber(termfair.ncol) or t.column_count
+
+ if num_x <= 2 then num_x = 2 end
+ if ncol <= 1 then ncol = 1 end
+ local width = math.floor(wa.width/num_x)
+
+ local num_y = math.max(math.ceil(#cls / num_x), ncol)
+ local height = math.floor(wa.height/num_y)
+ local cur_num_x = num_x
+ local at_x = 0
+ local at_y = 0
+
+ local remaining_clients = #cls
+
+ -- We start the first row. Left-align by limiting the number of
+ -- available slots.
+ if remaining_clients < num_x then
+ cur_num_x = remaining_clients
+ end
+
+ -- Iterate in reversed order.
+ for i = #cls,1,-1 do
+ -- Get x and y position.
+ local c = cls[i]
+ local this_x = cur_num_x - at_x - 1
+ local this_y = num_y - at_y - 1
+
+ -- Calculate geometry.
+ local g = {}
+ if this_x == (num_x - 1) then
+ g.width = wa.width - (num_x - 1)*width
+ else
+ g.width = width
+ end
+
+ if this_y == (num_y - 1) then
+ g.height = wa.height - (num_y - 1)*height
+ else
+ g.height = height
+ end
+
+ g.x = wa.x + this_x*width
+ g.y = wa.y + this_y*height
+
+ if g.width < 1 then g.width = 1 end
+ if g.height < 1 then g.height = 1 end
+
+ p.geometries[c] = g
+
+ remaining_clients = remaining_clients - 1
+
+ -- Next grid position.
+ at_x = at_x + 1
+ if at_x == num_x then
+ -- Row full, create a new one above it.
+ at_x = 0
+ at_y = at_y + 1
+
+ -- We start a new row. Left-align.
+ if remaining_clients < num_x then
+ cur_num_x = remaining_clients
+ end
+ end
+ end
+ elseif orientation == "center" then
+ -- Layout with fixed number of vertical columns (read from nmaster).
+ -- Cols are centerded until there is nmaster columns, then windows
+ -- are stacked in the slave columns, with at most ncol clients per
+ -- column if possible.
+
+ -- with nmaster=3 and ncol=1 you'll have
+ -- (1) (2) (3)
+ -- +---+---+---+ +-+---+---+-+ +---+---+---+
+ -- | | | | | | | | | | | | |
+ -- | | 1 | | -> | | 1 | 2 | | -> | 1 | 2 | 3 | ->
+ -- | | | | | | | | | | | | |
+ -- +---+---+---+ +-+---+---+-+ +---+---+---+
+
+ -- (4) (5)
+ -- +---+---+---+ +---+---+---+
+ -- | | | 3 | | | 2 | 4 |
+ -- + 1 + 2 +---+ -> + 1 +---+---+
+ -- | | | 4 | | | 3 | 5 |
+ -- +---+---+---+ +---+---+---+
+
+ -- How many vertical columns? Read from nmaster on the tag.
+ local num_x = tonumber(termfair.center.nmaster) or t.master_count
+ local ncol = tonumber(termfair.center.ncol) or t.column_count
+
+ if num_x <= 2 then num_x = 2 end
+ if ncol <= 1 then ncol = 1 end
+
+ local width = math.floor(wa.width / num_x)
+
+ if #cls < num_x then
+ -- Less clients than the number of columns, let's center it!
+ local offset_x = wa.x + (wa.width - #cls*width) / 2
+ for i = 1, #cls do
+ local g = { y = wa.y }
+ g.width = width
+ g.height = wa.height
+ if g.width < 1 then g.width = 1 end
+ if g.height < 1 then g.height = 1 end
+ g.x = offset_x + (i - 1) * width
+ p.geometries[cls[i]] = g
+ end
+ else
+ -- More clients than the number of columns, let's arrange it!
+ -- Master client deserves a special treatement
+ local g = {}
+ g.width = wa.width - (num_x - 1)*width
+ g.height = wa.height
+ if g.width < 1 then g.width = 1 end
+ if g.height < 1 then g.height = 1 end
+ g.x = wa.x
+ g.y = wa.y
+ p.geometries[cls[1]] = g
+
+ -- Treat the other clients
+
+ -- Compute distribution of clients among columns
+ local num_y = {}
+ local remaining_clients = #cls-1
+ local ncol_min = math.ceil(remaining_clients/(num_x-1))
+
+ if ncol >= ncol_min then
+ for i = (num_x-1), 1, -1 do
+ if (remaining_clients-i+1) < ncol then
+ num_y[i] = remaining_clients-i + 1
+ else
+ num_y[i] = ncol
+ end
+ remaining_clients = remaining_clients - num_y[i]
+ end
+ else
+ local rem = remaining_clients % (num_x-1)
+ if rem == 0 then
+ for i = 1, num_x-1 do
+ num_y[i] = ncol_min
+ end
+ else
+ for i = 1, num_x-1 do
+ num_y[i] = ncol_min - 1
+ end
+ for i = 0, rem-1 do
+ num_y[num_x-1-i] = num_y[num_x-1-i] + 1
+ end
+ end
+ end
+
+ -- Compute geometry of the other clients
+ local nclient = 2 -- we start with the 2nd client
+ local wx = g.x + g.width
+ for i = 1, (num_x-1) do
+ local height = math.floor(wa.height / num_y[i])
+ local wy = wa.y
+ for j = 0, (num_y[i]-2) do
+ local g = {}
+ g.x = wx
+ g.y = wy
+ g.height = height
+ g.width = width
+ if g.width < 1 then g.width = 1 end
+ if g.height < 1 then g.height = 1 end
+ p.geometries[cls[nclient]] = g
+ nclient = nclient + 1
+ wy = wy + height
+ end
+ local g = {}
+ g.x = wx
+ g.y = wy
+ g.height = wa.height - (num_y[i] - 1)*height
+ g.width = width
+ if g.width < 1 then g.width = 1 end
+ if g.height < 1 then g.height = 1 end
+ p.geometries[cls[nclient]] = g
+ nclient = nclient + 1
+ wx = wx + width
+ end
+ end
+ end
+end
+
+function termfair.center.arrange(p)
+ return do_fair(p, "center")
+end
+
+function termfair.arrange(p)
+ return do_fair(p, "west")
+end
+
+return termfair
diff --git a/.config/awesome/lain/scripts/dfs b/.config/awesome/lain/scripts/dfs
new file mode 100755
index 0000000..47c7b82
--- /dev/null
+++ b/.config/awesome/lain/scripts/dfs
@@ -0,0 +1,397 @@
+#!/usr/bin/env bash
+#
+# Adapted from Eridan's "fs" (cleanup, enhancements and switch to bash/Linux)
+# JM, 10/12/2004
+#
+# Integrated into Lain in september 2013
+# https://github.com/copycat-killer/lain
+
+# Requires gawk
+
+# -------------------------------------------------------------------------
+# Decoding options
+# -------------------------------------------------------------------------
+USAGE="Usage: $0 [-h(elp)] | [-n(arrow mode)] | [-w(eb output) | --type= | --exclude-type=]"
+
+NARROW_MODE=0
+WEB_OUTPUT=0
+DF_OPTIONS=""
+
+while [ $# -gt 0 ]; do
+case "$1" in
+"-h" )
+echo $USAGE
+exit
+;;
+"-d" )
+DEBUG=1
+;;
+"-n" )
+NARROW_MODE=1
+;;
+"-w" )
+WEB_OUTPUT=1
+;;
+--type=*)
+DF_OPTIONS+=" $1"
+;;
+--exclude-type=*)
+DF_OPTIONS+=" $1"
+;;
+* )
+echo $USAGE
+exit
+;;
+esac
+shift
+done
+
+# -------------------------------------------------------------------------
+# Preparations
+# -------------------------------------------------------------------------
+SYSTEM=`uname -s`
+PATTERN="/"
+
+case "$SYSTEM" in
+"Linux" )
+DF_COMMAND="/usr/bin/env df -k"
+SORT_COMMAND="/usr/bin/env sort -k6"
+AWK_COMMAND="/usr/bin/env awk"
+;;
+* )
+DF_COMMAND="/bin/df -k"
+SORT_COMMAND="/usr/bin/sort -k6"
+AWK_COMMAND="/usr/bin/env gawk"
+;;
+esac
+
+# Add additional df options
+DF_COMMAND+=$DF_OPTIONS
+
+# -------------------------------------------------------------------------
+# Grabbing "df" result
+# -------------------------------------------------------------------------
+DF_RESULT=`$DF_COMMAND`
+if [ ! -z $DEBUG ]; then
+echo "--> DF_RESULT:"
+echo "$DF_RESULT"
+echo ""
+fi
+
+# -------------------------------------------------------------------------
+# Preprocessing "df" result, to join split logical lines
+# -------------------------------------------------------------------------
+PREPROCESSING_RESULT=` \
+ echo "$DF_RESULT" | $AWK_COMMAND -v PATTERN=$PATTERN \
+ '
+ NF == 1 {
+ printf ("%s", $0)
+ }
+
+NF == 5 {
+ printf ("%s\n", $0)
+}
+
+NF > 6 {
+}
+
+NF == 6 {
+ printf ("%s\n", $0)
+}'
+`
+if [ ! -z $DEBUG ]; then
+echo "--> PREPROCESSING_RESULT:"
+echo "$PREPROCESSING_RESULT"
+echo ""
+fi
+
+SORTED_FILE_SYSTEMS_INFO=`echo "$PREPROCESSING_RESULT" | $SORT_COMMAND`
+
+if [ ! -z $DEBUG ]; then
+echo "--> SORTED_FILE_SYSTEMS_INFO:"
+echo "$SORTED_FILE_SYSTEMS_INFO"
+echo ""
+fi
+
+# -------------------------------------------------------------------------
+# Computing mount point max length
+# -------------------------------------------------------------------------
+MOUNT_POINT_MAX_LENGTH=` \
+ echo "$SORTED_FILE_SYSTEMS_INFO" | $AWK_COMMAND -v PATTERN=$PATTERN \
+ '
+ BEGIN {
+ mount_point_length_max = 15;
+ }
+
+END {
+ printf ("%d", mount_point_length_max);
+}
+
+$0 ~ PATTERN {
+# printf ("$6 = %s\n", $6);
+
+ mount_point = $6;
+# printf ("mount_point = %s\n", mount_point);
+
+ mount_point_length = length (mount_point);
+# printf ("mount_point_length = %d\n", mount_point_length);
+
+ if (mount_point_length > mount_point_length_max)
+ mount_point_length_max = mount_point_length;
+}'
+`
+if [ ! -z $DEBUG ]; then
+echo "MOUNT_POINT_MAX_LENGTH: $MOUNT_POINT_MAX_LENGTH"
+fi
+
+# -------------------------------------------------------------------------
+# Computing mount point data max size
+# -------------------------------------------------------------------------
+MOUNT_POINT_MAX_SIZE=` \
+ echo "$SORTED_FILE_SYSTEMS_INFO" | $AWK_COMMAND -v PATTERN=$PATTERN \
+ '
+ BEGIN {
+ mount_point_size_max = 0;
+ }
+
+END {
+ printf ("%d", mount_point_size_max);
+}
+
+$0 ~ PATTERN {
+# df -k shows k_bytes!
+# printf ("$2 = %s\n", $2);
+
+ mount_point_size = $2 * 1024;
+# printf ("mount_point_size = %d\n", mount_point_size);
+
+ if (mount_point_size > mount_point_size_max)
+ mount_point_size_max = mount_point_size;
+}'
+`
+if [ ! -z $DEBUG ]; then
+echo "MOUNT_POINT_MAX_SIZE: $MOUNT_POINT_MAX_SIZE"
+fi
+
+# -------------------------------------------------------------------------
+# Let's go!
+# -------------------------------------------------------------------------
+echo "$SORTED_FILE_SYSTEMS_INFO" | $AWK_COMMAND -v DEBUG=$DEBUG -v PATTERN=$PATTERN -v NARROW_MODE=$NARROW_MODE -v LEFT_COLUMN=$MOUNT_POINT_MAX_LENGTH -v MAX_SIZE=$MOUNT_POINT_MAX_SIZE -v SCALE=$SCALE -v WEB_OUTPUT=$WEB_OUTPUT \
+ '
+# {printf ("$0 = %s\n", $0);}
+# {printf ("$1 = %s\n", $1);}
+# {printf ("PATTERN = %s\n", PATTERN);}
+# {printf ("LEFT_COLUMN = %s\n", LEFT_COLUMN);}
+
+ BEGIN {
+ k_bytes = 1024.0;
+ m_bytes = 1024.0 * k_bytes;
+ g_bytes = 1024.0 * m_bytes;
+ t_bytes = 1024.0 * g_bytes;
+
+ if (WEB_OUTPUT)
+ {
+ all_stars = "**************************************************";
+ current_date = strftime ("%d-%m-%Y @ %H:%M:%S", localtime (systime ()));
+ free_threshold = 10; # %
+
+ printf ("\n");
+
+ printf ( \
+ "\n" \
+ "
+
+
+ You can’t perform that action at this time.
+
+
+
+
+
+
+
+
+
+
+
+
+ You signed in with another tab or window. Reload to refresh your session.
+ You signed out in another tab or window. Reload to refresh your session.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Press h to open a hovercard with more details.
+
+
+
+
+
+
diff --git a/.config/awesome/themes/msjche/icons/centerfair.png b/.config/awesome/themes/msjche/icons/centerfair.png
new file mode 100644
index 0000000..185d5e1
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/centerfair.png differ
diff --git a/.config/awesome/themes/msjche/icons/centerwork.png b/.config/awesome/themes/msjche/icons/centerwork.png
new file mode 100644
index 0000000..49d5a11
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/centerwork.png differ
diff --git a/.config/awesome/themes/msjche/icons/disk.png b/.config/awesome/themes/msjche/icons/disk.png
new file mode 100644
index 0000000..3ccd728
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/disk.png differ
diff --git a/.config/awesome/themes/msjche/icons/dwindle.png b/.config/awesome/themes/msjche/icons/dwindle.png
new file mode 100644
index 0000000..55b61b0
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/dwindle.png differ
diff --git a/.config/awesome/themes/msjche/icons/fairh.png b/.config/awesome/themes/msjche/icons/fairh.png
new file mode 100644
index 0000000..848f5a8
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/fairh.png differ
diff --git a/.config/awesome/themes/msjche/icons/fairv.png b/.config/awesome/themes/msjche/icons/fairv.png
new file mode 100644
index 0000000..610eb7b
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/fairv.png differ
diff --git a/.config/awesome/themes/msjche/icons/floating.png b/.config/awesome/themes/msjche/icons/floating.png
new file mode 100644
index 0000000..d8ce00a
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/floating.png differ
diff --git a/.config/awesome/themes/msjche/icons/fullscreen.png b/.config/awesome/themes/msjche/icons/fullscreen.png
new file mode 100644
index 0000000..feb44d1
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/fullscreen.png differ
diff --git a/.config/awesome/themes/msjche/icons/magnifier.png b/.config/awesome/themes/msjche/icons/magnifier.png
new file mode 100644
index 0000000..49616bc
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/magnifier.png differ
diff --git a/.config/awesome/themes/msjche/icons/max.png b/.config/awesome/themes/msjche/icons/max.png
new file mode 100644
index 0000000..3f4bdec
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/max.png differ
diff --git a/.config/awesome/themes/msjche/icons/pause.png b/.config/awesome/themes/msjche/icons/pause.png
new file mode 100644
index 0000000..381e532
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/pause.png differ
diff --git a/.config/awesome/themes/msjche/icons/play.png b/.config/awesome/themes/msjche/icons/play.png
new file mode 100644
index 0000000..05ad253
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/play.png differ
diff --git a/.config/awesome/themes/msjche/icons/spiral.png b/.config/awesome/themes/msjche/icons/spiral.png
new file mode 100644
index 0000000..664afb4
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/spiral.png differ
diff --git a/.config/awesome/themes/msjche/icons/square_sel.png b/.config/awesome/themes/msjche/icons/square_sel.png
new file mode 100644
index 0000000..58b58f2
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/square_sel.png differ
diff --git a/.config/awesome/themes/msjche/icons/square_unsel.png b/.config/awesome/themes/msjche/icons/square_unsel.png
new file mode 100644
index 0000000..40411f4
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/square_unsel.png differ
diff --git a/.config/awesome/themes/msjche/icons/stop.png b/.config/awesome/themes/msjche/icons/stop.png
new file mode 100644
index 0000000..b01b75e
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/stop.png differ
diff --git a/.config/awesome/themes/msjche/icons/submenu.png b/.config/awesome/themes/msjche/icons/submenu.png
new file mode 100644
index 0000000..10ed739
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/submenu.png differ
diff --git a/.config/awesome/themes/msjche/icons/termfair.png b/.config/awesome/themes/msjche/icons/termfair.png
new file mode 100644
index 0000000..9cfb636
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/termfair.png differ
diff --git a/.config/awesome/themes/msjche/icons/tile.png b/.config/awesome/themes/msjche/icons/tile.png
new file mode 100644
index 0000000..890e354
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/tile.png differ
diff --git a/.config/awesome/themes/msjche/icons/tilebottom.png b/.config/awesome/themes/msjche/icons/tilebottom.png
new file mode 100644
index 0000000..aac4302
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/tilebottom.png differ
diff --git a/.config/awesome/themes/msjche/icons/tileleft.png b/.config/awesome/themes/msjche/icons/tileleft.png
new file mode 100644
index 0000000..c87a32f
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/tileleft.png differ
diff --git a/.config/awesome/themes/msjche/icons/tiletop.png b/.config/awesome/themes/msjche/icons/tiletop.png
new file mode 100644
index 0000000..89f7f8d
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/tiletop.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/close_focus.png b/.config/awesome/themes/msjche/icons/titlebar/close_focus.png
new file mode 100644
index 0000000..c1fa3ad
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/close_focus.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/close_normal.png b/.config/awesome/themes/msjche/icons/titlebar/close_normal.png
new file mode 100644
index 0000000..77cd8eb
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/close_normal.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/floating_focus_active.png b/.config/awesome/themes/msjche/icons/titlebar/floating_focus_active.png
new file mode 100644
index 0000000..8fcf336
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/floating_focus_active.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/floating_focus_inactive.png b/.config/awesome/themes/msjche/icons/titlebar/floating_focus_inactive.png
new file mode 100644
index 0000000..47f19f6
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/floating_focus_inactive.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/floating_normal_active.png b/.config/awesome/themes/msjche/icons/titlebar/floating_normal_active.png
new file mode 100644
index 0000000..df17970
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/floating_normal_active.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/floating_normal_inactive.png b/.config/awesome/themes/msjche/icons/titlebar/floating_normal_inactive.png
new file mode 100644
index 0000000..98f7f1d
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/floating_normal_inactive.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/maximized_focus_active.png b/.config/awesome/themes/msjche/icons/titlebar/maximized_focus_active.png
new file mode 100644
index 0000000..96e8937
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/maximized_focus_active.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/maximized_focus_inactive.png b/.config/awesome/themes/msjche/icons/titlebar/maximized_focus_inactive.png
new file mode 100644
index 0000000..bce1d00
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/maximized_focus_inactive.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/maximized_normal_active.png b/.config/awesome/themes/msjche/icons/titlebar/maximized_normal_active.png
new file mode 100644
index 0000000..6ce0b10
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/maximized_normal_active.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/maximized_normal_inactive.png b/.config/awesome/themes/msjche/icons/titlebar/maximized_normal_inactive.png
new file mode 100644
index 0000000..2e56d32
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/maximized_normal_inactive.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/ontop_focus_active.png b/.config/awesome/themes/msjche/icons/titlebar/ontop_focus_active.png
new file mode 100644
index 0000000..d206ea4
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/ontop_focus_active.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/ontop_focus_inactive.png b/.config/awesome/themes/msjche/icons/titlebar/ontop_focus_inactive.png
new file mode 100644
index 0000000..2f3a2be
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/ontop_focus_inactive.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/ontop_normal_active.png b/.config/awesome/themes/msjche/icons/titlebar/ontop_normal_active.png
new file mode 100644
index 0000000..9a26d34
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/ontop_normal_active.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/ontop_normal_inactive.png b/.config/awesome/themes/msjche/icons/titlebar/ontop_normal_inactive.png
new file mode 100644
index 0000000..a9a3206
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/ontop_normal_inactive.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/sticky_focus_active.png b/.config/awesome/themes/msjche/icons/titlebar/sticky_focus_active.png
new file mode 100644
index 0000000..7e360db
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/sticky_focus_active.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/sticky_focus_inactive.png b/.config/awesome/themes/msjche/icons/titlebar/sticky_focus_inactive.png
new file mode 100644
index 0000000..5493d8e
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/sticky_focus_inactive.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/sticky_normal_active.png b/.config/awesome/themes/msjche/icons/titlebar/sticky_normal_active.png
new file mode 100644
index 0000000..a06138d
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/sticky_normal_active.png differ
diff --git a/.config/awesome/themes/msjche/icons/titlebar/sticky_normal_inactive.png b/.config/awesome/themes/msjche/icons/titlebar/sticky_normal_inactive.png
new file mode 100644
index 0000000..7e6c99b
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/titlebar/sticky_normal_inactive.png differ
diff --git a/.config/awesome/themes/msjche/icons/vol.png b/.config/awesome/themes/msjche/icons/vol.png
new file mode 100644
index 0000000..847d575
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/vol.png differ
diff --git a/.config/awesome/themes/msjche/icons/vol_low.png b/.config/awesome/themes/msjche/icons/vol_low.png
new file mode 100644
index 0000000..54d653e
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/vol_low.png differ
diff --git a/.config/awesome/themes/msjche/icons/vol_mute.png b/.config/awesome/themes/msjche/icons/vol_mute.png
new file mode 100644
index 0000000..361412d
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/vol_mute.png differ
diff --git a/.config/awesome/themes/msjche/icons/vol_no.png b/.config/awesome/themes/msjche/icons/vol_no.png
new file mode 100644
index 0000000..06d1a97
Binary files /dev/null and b/.config/awesome/themes/msjche/icons/vol_no.png differ
diff --git a/.config/awesome/themes/msjche/theme.lua b/.config/awesome/themes/msjche/theme.lua
new file mode 100644
index 0000000..a785c7e
--- /dev/null
+++ b/.config/awesome/themes/msjche/theme.lua
@@ -0,0 +1,391 @@
+--[[
+
+ Copland Awesome WM theme 2.0
+ github.com/copycat-killer
+
+--]]
+
+local gears = require("gears")
+local lain = require("lain")
+local awful = require("awful")
+local wibox = require("wibox")
+local os = { getenv = os.getenv, setlocale = os.setlocale }
+local awesome, client = awesome, client
+local gpmdp = require("widgets.gpmdp")
+
+local theme = {}
+theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/msjche"
+-- theme.wallpaper = theme.dir .. "/wall.png"
+theme.font = "Droid Sans 14"
+theme.taglist_font = "Xirod 17"
+theme.fg_normal = "#757575"
+theme.fg_focus = "#7A5ADA"
+theme.bg_normal = "#111111"
+theme.bg_normal = "#11111199"
+theme.bg_focus = "#11111110"
+theme.fg_urgent = "#000000"
+theme.bg_urgent = "#FFFFFF"
+theme.border_width = 1
+theme.border_normal = "#141414"
+--theme.border_focus = "#93B6FF"
+theme.border_focus = "#7A5ADA"
+theme.taglist_fg_focus = "#FFFFFF"
+theme.taglist_bg_focus = "#111111"
+theme.taglist_bg_normal = "#111111"
+theme.titlebar_bg_normal = "#191919"
+theme.titlebar_bg_focus = "#262626"
+theme.menu_height = 25
+theme.menu_width = 250
+theme.tasklist_disable_icon = true
+theme.awesome_icon = theme.dir .."/icons/awesome.png"
+theme.menu_submenu_icon = theme.dir .. "/icons/submenu.png"
+theme.taglist_squares_sel = theme.dir .. "/icons/square_unsel.png"
+theme.taglist_squares_unsel = theme.dir .. "/icons/square_unsel.png"
+theme.vol = theme.dir .. "/icons/vol.png"
+theme.vol_low = theme.dir .. "/icons/vol_low.png"
+theme.vol_no = theme.dir .. "/icons/vol_no.png"
+theme.vol_mute = theme.dir .. "/icons/vol_mute.png"
+theme.disk = theme.dir .. "/icons/disk.png"
+theme.ac = theme.dir .. "/icons/ac.png"
+theme.bat = theme.dir .. "/icons/bat.png"
+theme.bat_low = theme.dir .. "/icons/bat_low.png"
+theme.bat_no = theme.dir .. "/icons/bat_no.png"
+theme.play = theme.dir .. "/icons/play.png"
+theme.pause = theme.dir .. "/icons/pause.png"
+theme.stop = theme.dir .. "/icons/stop.png"
+theme.layout_tile = theme.dir .. "/icons/tile.png"
+theme.layout_tileleft = theme.dir .. "/icons/tileleft.png"
+theme.layout_tilebottom = theme.dir .. "/icons/tilebottom.png"
+theme.layout_tiletop = theme.dir .. "/icons/tiletop.png"
+theme.layout_fairv = theme.dir .. "/icons/fairv.png"
+theme.layout_fairh = theme.dir .. "/icons/fairh.png"
+theme.layout_spiral = theme.dir .. "/icons/spiral.png"
+theme.layout_dwindle = theme.dir .. "/icons/dwindle.png"
+theme.layout_max = theme.dir .. "/icons/max.png"
+theme.layout_fullscreen = theme.dir .. "/icons/fullscreen.png"
+theme.layout_magnifier = theme.dir .. "/icons/magnifier.png"
+theme.layout_floating = theme.dir .. "/icons/floating.png"
+theme.useless_gap = 0
+theme.titlebar_close_button_focus = theme.dir .. "/icons/titlebar/close_focus.png"
+theme.titlebar_close_button_normal = theme.dir .. "/icons/titlebar/close_normal.png"
+theme.titlebar_ontop_button_focus_active = theme.dir .. "/icons/titlebar/ontop_focus_active.png"
+theme.titlebar_ontop_button_normal_active = theme.dir .. "/icons/titlebar/ontop_normal_active.png"
+theme.titlebar_ontop_button_focus_inactive = theme.dir .. "/icons/titlebar/ontop_focus_inactive.png"
+theme.titlebar_ontop_button_normal_inactive = theme.dir .. "/icons/titlebar/ontop_normal_inactive.png"
+theme.titlebar_sticky_button_focus_active = theme.dir .. "/icons/titlebar/sticky_focus_active.png"
+theme.titlebar_sticky_button_normal_active = theme.dir .. "/icons/titlebar/sticky_normal_active.png"
+theme.titlebar_sticky_button_focus_inactive = theme.dir .. "/icons/titlebar/sticky_focus_inactive.png"
+theme.titlebar_sticky_button_normal_inactive = theme.dir .. "/icons/titlebar/sticky_normal_inactive.png"
+theme.titlebar_floating_button_focus_active = theme.dir .. "/icons/titlebar/floating_focus_active.png"
+theme.titlebar_floating_button_normal_active = theme.dir .. "/icons/titlebar/floating_normal_active.png"
+theme.titlebar_floating_button_focus_inactive = theme.dir .. "/icons/titlebar/floating_focus_inactive.png"
+theme.titlebar_floating_button_normal_inactive = theme.dir .. "/icons/titlebar/floating_normal_inactive.png"
+theme.titlebar_maximized_button_focus_active = theme.dir .. "/icons/titlebar/maximized_focus_active.png"
+theme.titlebar_maximized_button_normal_active = theme.dir .. "/icons/titlebar/maximized_normal_active.png"
+theme.titlebar_maximized_button_focus_inactive = theme.dir .. "/icons/titlebar/maximized_focus_inactive.png"
+theme.titlebar_maximized_button_normal_inactive = theme.dir .. "/icons/titlebar/maximized_normal_inactive.png"
+
+-- lain related
+theme.layout_centerfair = theme.dir .. "/icons/centerfair.png"
+theme.layout_termfair = theme.dir .. "/icons/termfair.png"
+theme.layout_centerwork = theme.dir .. "/icons/centerwork.png"
+
+local markup = lain.util.markup
+local blue = theme.fg_focus
+local red = "#EB8F8F"
+local green = "#8FEB8F"
+local white = theme.fg_normal
+
+local mytextclock = wibox.widget.textclock(markup(blue, " %a") .. markup(white, " %d ") .. markup(blue, "%b ") .. markup(white, "%I:%M "))
+mytextclock.font = theme.font
+
+--uptimewidget = wibox.widget.textbox()
+--vicious.register(uptimewidget, vicious.widgeet.uptime, (markup(blue, "$1") .. markup(white, " D") .. markup(blue, " $2") .. markup(white, " h"))
+
+-- Calendar
+lain.widget.calendar({
+ attach_to = { mytextclock },
+ notification_preset = {
+ font = "Droid Sans Mono 13",
+ fg = white,
+ bg = theme.bg_normal
+}})
+
+-- Launcher
+local mylauncher = awful.widget.button({image = theme.awesome_icon})
+mylauncher:connect_signal("button::press", function() awful.util.mymainmenu:toggle() end)
+
+--[[ Mail IMAP check
+-- commented because it needs to be set before use
+local mail = lain.widget.imap({
+ timeout = 180,
+ server = "server",
+ mail = "mail",
+ password = "keyring get mail",
+ settings = function()
+ mail = ""
+ count = ""
+
+ if mailcount > 0 then
+ mail = "Mail "
+ count = mailcount .. " "
+ end
+
+ widget:set_markup(markup(blue, mail) .. count)
+ end
+})
+--]]
+
+-- MPD
+local mpdicon = wibox.widget.imagebox()
+theme.mpd = lain.widget.mpd({
+ settings = function()
+ if mpd_now.state == "play" then
+ title = mpd_now.title
+ artist = " " .. mpd_now.artist .. markup("#333333", " |")
+ mpdicon:set_image(theme.play)
+ elseif mpd_now.state == "pause" then
+ title = "mpd "
+ artist = "paused" .. markup("#333333", " |")
+ mpdicon:set_image(theme.pause)
+ else
+ title = ""
+ artist = ""
+ mpdicon._private.image = nil
+ mpdicon:emit_signal("widget::redraw_needed")
+ mpdicon:emit_signal("widget::layout_changed")
+ end
+
+ widget:set_markup(markup.font(theme.font, markup(blue, title) .. artist))
+ end
+})
+
+-- Battery
+local baticon = wibox.widget.imagebox(theme.bat)
+local batbar = wibox.widget {
+ forced_height = 1,
+ forced_width = 143,
+ color = theme.fg_normal,
+ background_color = theme.bg_normal,
+ margins = 1,
+ paddings = 1,
+ ticks = true,
+ ticks_size = 13,
+ widget = wibox.widget.progressbar,
+}
+local batupd = lain.widget.bat({
+ settings = function()
+ if bat_now.status == "N/A" or type(bat_now.perc) ~= "number" then return end
+
+ if bat_now.status == "Charging" then
+ baticon:set_image(theme.ac)
+ if bat_now.perc >= 98 then
+ batbar:set_color(green)
+ elseif bat_now.perc > 50 then
+ batbar:set_color(theme.fg_normal)
+ elseif bat_now.perc > 15 then
+ batbar:set_color(theme.fg_normal)
+ else
+ batbar:set_color(red)
+ end
+ else
+ if bat_now.perc >= 98 then
+ batbar:set_color(green)
+ elseif bat_now.perc > 50 then
+ batbar:set_color(theme.fg_normal)
+ baticon:set_image(theme.bat)
+ elseif bat_now.perc > 15 then
+ batbar:set_color(theme.fg_normal)
+ baticon:set_image(theme.bat_low)
+ else
+ batbar:set_color(red)
+ baticon:set_image(theme.bat_no)
+ end
+ end
+ batbar:set_value(bat_now.perc / 100)
+ end
+})
+local batbg = wibox.container.background(batbar, "#474747", gears.shape.rectangle)
+local batwidget = wibox.container.margin(batbg, 2, 7, 4, 4)
+
+---- / fs
+--local fsicon = wibox.widget.imagebox(theme.disk)
+--local fsbar = wibox.widget {
+-- forced_height = 1,
+-- forced_width = 143,
+-- color = theme.fg_normal,
+-- background_color = theme.bg_normal,
+-- margins = 1,
+-- paddings = 1,
+-- ticks = true,
+-- ticks_size = 13,
+-- widget = wibox.widget.progressbar,
+--}
+--theme.fs = lain.widget.fs({
+-- partition = "/home",
+---- partition = "/",
+-- options = "--exclude-type=tmpfs",
+-- notification_preset = { fg = theme.fg_normal, bg = theme.bg_normal, font = "Droid Sans 10.5" },
+-- settings = function()
+-- if tonumber(fs_now.used) < 90 then
+-- fsbar:set_color(theme.fg_normal)
+-- else
+-- fsbar:set_color("#EB8F8F")
+-- end
+-- fsbar:set_value(fs_now.used / 100)
+-- end
+--})
+--local fsbg = wibox.container.background(fsbar, "#474747", gears.shape.rectangle)
+--local fswidget = wibox.container.margin(fsbg, 2, 7, 4, 4)
+
+-- ALSA volume bar
+local volicon = wibox.widget.imagebox(theme.vol)
+theme.volume = lain.widget.alsabar({
+ width = 143, border_width = 0, ticks = true, ticks_size = 13,
+ notification_preset = { font = theme.font },
+ --togglechannel = "IEC958,3",
+ settings = function()
+ if volume_now.status == "off" then
+ volicon:set_image(theme.vol_mute)
+ elseif volume_now.level == 0 then
+ volicon:set_image(theme.vol_no)
+ elseif volume_now.level <= 50 then
+ volicon:set_image(theme.vol_low)
+ else
+ volicon:set_image(theme.vol)
+ end
+ end,
+ colors = {
+ background = theme.bg_normal,
+ mute = red,
+ unmute = theme.fg_normal
+ }
+})
+theme.volume.tooltip.wibox.fg = theme.fg_focus
+theme.volume.bar:buttons(awful.util.table.join (
+ awful.button({}, 1, function()
+ awful.spawn.with_shell(string.format("%s -e alsamixer", awful.util.terminal))
+ end),
+ awful.button({}, 2, function()
+ awful.spawn(string.format("%s set %s 100%%", theme.volume.cmd, theme.volume.channel))
+ theme.volume.update()
+ end),
+ awful.button({}, 3, function()
+ awful.spawn(string.format("%s set %s toggle", theme.volume.cmd, theme.volume.togglechannel or theme.volume.channel))
+ theme.volume.update()
+ end),
+ awful.button({}, 4, function()
+ awful.spawn(string.format("%s set %s 2%%+", theme.volume.cmd, theme.volume.channel))
+ theme.volume.update()
+ end),
+ awful.button({}, 5, function()
+ awful.spawn(string.format("%s set %s 2%%-", theme.volume.cmd, theme.volume.channel))
+ theme.volume.update()
+ end)
+))
+local volumebg = wibox.container.background(theme.volume.bar, "#474747", gears.shape.rectangle)
+local volumewidget = wibox.container.margin(volumebg, 2, 7, 4, 4)
+
+-- Weather
+theme.weather = lain.widget.weather({
+ --city_id = 2643743, -- placeholder (London)
+ city_id = 5570160, -- placeholder (not London)
+})
+
+-- Separators
+local first = wibox.widget.textbox(markup.font("Droid Sans 3", " "))
+local spr = wibox.widget.textbox(' ')
+local small_spr = wibox.widget.textbox(markup.font("Droid Sans 4", " "))
+local bar_spr = wibox.widget.textbox(markup.font("Droid Sans 3", " ") .. markup.fontfg(theme.font, "#333333", "|") .. markup.font("Droid Sans 5", " "))
+
+-- Eminent-like task filtering
+local orig_filter = awful.widget.taglist.filter.all
+
+-- Taglist label functions
+awful.widget.taglist.filter.all = function (t, args)
+ if t.selected or #t:clients() > 0 then
+ return orig_filter(t, args)
+ end
+end
+
+function theme.at_screen_connect(s)
+ -- Quake application
+ s.quake = lain.util.quake({ app = awful.util.terminal })
+
+ -- If wallpaper is a function, call it with the screen
+ local wallpaper = theme.wallpaper
+ if type(wallpaper) == "function" then
+ wallpaper = wallpaper(s)
+ end
+ gears.wallpaper.maximized(wallpaper, s, true)
+
+ -- Tag names and layouts
+ --awful.tag(awful.util.tagnames, s, awful.layout.layouts)
+ local names = { "1-WEB", "2-POR", "3-NEW", "4-IRC", "5-MUS", "6-PIR", "7-MOV", "8-GAM", "9-MIS" }
+ local l = awful.layout.suit
+ local layouts = { l.max, l.fair.horizontal, l.spiral, l.corner.se, l.tile.bottom, l.corner.se, l.magnifier, l.floating, l.floating, }
+ awful.tag(names, s, layouts)
+
+ -- Create a promptbox for each screen
+ s.mypromptbox = awful.widget.prompt()
+ -- Create an imagebox widget which will contains an icon indicating which layout we're using.
+ -- We need one layoutbox per screen.
+ s.mylayoutbox = awful.widget.layoutbox(s)
+ s.mylayoutbox:buttons(awful.util.table.join(
+ awful.button({ }, 1, function () awful.layout.inc( 1) end),
+ awful.button({ }, 3, function () awful.layout.inc(-1) end),
+ awful.button({ }, 4, function () awful.layout.inc( 1) end),
+ awful.button({ }, 5, function () awful.layout.inc(-1) end)))
+
+ -- Create a taglist widget
+ s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons)
+
+ -- Create a tasklist widget
+ s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons)
+
+ -- Create the horizontal wibox
+ s.mywibox = awful.wibar({ position = "top", screen = s, height = 28, bg = theme.bg_normal, fg = theme.fg_normal })
+
+ -- Add widgets to the wibox
+ s.mywibox:setup {
+ layout = wibox.layout.align.horizontal,
+ { -- Left widgets
+ mylauncher,
+ layout = wibox.layout.fixed.horizontal,
+ small_spr,
+ s.mylayoutbox,
+ first,
+ bar_spr,
+ s.mytaglist,
+ bar_spr,
+ first,
+ s.mypromptbox,
+ },
+ s.mytasklist, -- Middle widget
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ bar_spr,
+ wibox.widget.systray(),
+ bar_spr,
+ --mail.widget,
+-- brightness.widget,
+ gpmdp.widget,
+ mpdicon,
+ theme.mpd.widget,
+ baticon,
+ batwidget,
+ --bar_spr,
+ --fsicon,
+ --fswidget,
+ bar_spr,
+ volicon,
+ volumewidget,
+ bar_spr,
+ mytextclock,
+ },
+ }
+
+
+end
+
+return theme
diff --git a/.config/awesome/themes/msjche/wall.png b/.config/awesome/themes/msjche/wall.png
new file mode 100644
index 0000000..76ebf10
Binary files /dev/null and b/.config/awesome/themes/msjche/wall.png differ
diff --git a/.config/awesome/themes/msjche/wall_default.png b/.config/awesome/themes/msjche/wall_default.png
new file mode 100644
index 0000000..aa3ce51
Binary files /dev/null and b/.config/awesome/themes/msjche/wall_default.png differ
diff --git a/.config/awesome/themes/multicolor/icons/ac.png b/.config/awesome/themes/multicolor/icons/ac.png
new file mode 100644
index 0000000..272b832
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/ac.png differ
diff --git a/.config/awesome/themes/multicolor/icons/bat.png b/.config/awesome/themes/multicolor/icons/bat.png
new file mode 100644
index 0000000..bd63927
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/bat.png differ
diff --git a/.config/awesome/themes/multicolor/icons/clock.png b/.config/awesome/themes/multicolor/icons/clock.png
new file mode 100644
index 0000000..22aef71
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/clock.png differ
diff --git a/.config/awesome/themes/multicolor/icons/cpu.png b/.config/awesome/themes/multicolor/icons/cpu.png
new file mode 100644
index 0000000..e3794ca
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/cpu.png differ
diff --git a/.config/awesome/themes/multicolor/icons/dish.png b/.config/awesome/themes/multicolor/icons/dish.png
new file mode 100644
index 0000000..c71499b
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/dish.png differ
diff --git a/.config/awesome/themes/multicolor/icons/dwindle.png b/.config/awesome/themes/multicolor/icons/dwindle.png
new file mode 100644
index 0000000..94d8382
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/dwindle.png differ
diff --git a/.config/awesome/themes/multicolor/icons/fairh.png b/.config/awesome/themes/multicolor/icons/fairh.png
new file mode 100644
index 0000000..4468efc
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/fairh.png differ
diff --git a/.config/awesome/themes/multicolor/icons/fairv.png b/.config/awesome/themes/multicolor/icons/fairv.png
new file mode 100644
index 0000000..7c8728e
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/fairv.png differ
diff --git a/.config/awesome/themes/multicolor/icons/floating.png b/.config/awesome/themes/multicolor/icons/floating.png
new file mode 100644
index 0000000..7593a2a
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/floating.png differ
diff --git a/.config/awesome/themes/multicolor/icons/fs.png b/.config/awesome/themes/multicolor/icons/fs.png
new file mode 100644
index 0000000..1c1b13e
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/fs.png differ
diff --git a/.config/awesome/themes/multicolor/icons/fullscreen.png b/.config/awesome/themes/multicolor/icons/fullscreen.png
new file mode 100644
index 0000000..f63a69c
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/fullscreen.png differ
diff --git a/.config/awesome/themes/multicolor/icons/magnifier.png b/.config/awesome/themes/multicolor/icons/magnifier.png
new file mode 100644
index 0000000..8819554
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/magnifier.png differ
diff --git a/.config/awesome/themes/multicolor/icons/mail.png b/.config/awesome/themes/multicolor/icons/mail.png
new file mode 100644
index 0000000..25021f5
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/mail.png differ
diff --git a/.config/awesome/themes/multicolor/icons/max.png b/.config/awesome/themes/multicolor/icons/max.png
new file mode 100644
index 0000000..4b6a8c3
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/max.png differ
diff --git a/.config/awesome/themes/multicolor/icons/mem.png b/.config/awesome/themes/multicolor/icons/mem.png
new file mode 100644
index 0000000..d04ee11
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/mem.png differ
diff --git a/.config/awesome/themes/multicolor/icons/net_down.png b/.config/awesome/themes/multicolor/icons/net_down.png
new file mode 100644
index 0000000..09433b1
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/net_down.png differ
diff --git a/.config/awesome/themes/multicolor/icons/net_up.png b/.config/awesome/themes/multicolor/icons/net_up.png
new file mode 100644
index 0000000..395d014
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/net_up.png differ
diff --git a/.config/awesome/themes/multicolor/icons/note.png b/.config/awesome/themes/multicolor/icons/note.png
new file mode 100644
index 0000000..2f41eb3
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/note.png differ
diff --git a/.config/awesome/themes/multicolor/icons/note_on.png b/.config/awesome/themes/multicolor/icons/note_on.png
new file mode 100755
index 0000000..264d2c8
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/note_on.png differ
diff --git a/.config/awesome/themes/multicolor/icons/spiral.png b/.config/awesome/themes/multicolor/icons/spiral.png
new file mode 100644
index 0000000..6a1ebf1
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/spiral.png differ
diff --git a/.config/awesome/themes/multicolor/icons/spkr.png b/.config/awesome/themes/multicolor/icons/spkr.png
new file mode 100644
index 0000000..80c20b0
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/spkr.png differ
diff --git a/.config/awesome/themes/multicolor/icons/square_a.png b/.config/awesome/themes/multicolor/icons/square_a.png
new file mode 100755
index 0000000..1774d95
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/square_a.png differ
diff --git a/.config/awesome/themes/multicolor/icons/square_b.png b/.config/awesome/themes/multicolor/icons/square_b.png
new file mode 100755
index 0000000..b47e9f3
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/square_b.png differ
diff --git a/.config/awesome/themes/multicolor/icons/submenu.png b/.config/awesome/themes/multicolor/icons/submenu.png
new file mode 100644
index 0000000..7c81cab
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/submenu.png differ
diff --git a/.config/awesome/themes/multicolor/icons/temp.png b/.config/awesome/themes/multicolor/icons/temp.png
new file mode 100755
index 0000000..6c8f8bd
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/temp.png differ
diff --git a/.config/awesome/themes/multicolor/icons/tile.png b/.config/awesome/themes/multicolor/icons/tile.png
new file mode 100644
index 0000000..64103d9
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/tile.png differ
diff --git a/.config/awesome/themes/multicolor/icons/tilebottom.png b/.config/awesome/themes/multicolor/icons/tilebottom.png
new file mode 100644
index 0000000..9363636
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/tilebottom.png differ
diff --git a/.config/awesome/themes/multicolor/icons/tileleft.png b/.config/awesome/themes/multicolor/icons/tileleft.png
new file mode 100644
index 0000000..9331898
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/tileleft.png differ
diff --git a/.config/awesome/themes/multicolor/icons/tiletop.png b/.config/awesome/themes/multicolor/icons/tiletop.png
new file mode 100644
index 0000000..1cef886
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/tiletop.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/close_focus.png b/.config/awesome/themes/multicolor/icons/titlebar/close_focus.png
new file mode 100644
index 0000000..cd297db
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/close_focus.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/close_normal.png b/.config/awesome/themes/multicolor/icons/titlebar/close_normal.png
new file mode 100644
index 0000000..5448ed8
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/close_normal.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/floating_focus_active.png b/.config/awesome/themes/multicolor/icons/titlebar/floating_focus_active.png
new file mode 100644
index 0000000..ae5a8e2
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/floating_focus_active.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/floating_focus_inactive.png b/.config/awesome/themes/multicolor/icons/titlebar/floating_focus_inactive.png
new file mode 100644
index 0000000..c54eb0c
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/floating_focus_inactive.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/floating_normal_active.png b/.config/awesome/themes/multicolor/icons/titlebar/floating_normal_active.png
new file mode 100644
index 0000000..62342d1
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/floating_normal_active.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/floating_normal_inactive.png b/.config/awesome/themes/multicolor/icons/titlebar/floating_normal_inactive.png
new file mode 100644
index 0000000..e2bbdfa
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/floating_normal_inactive.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/maximized_focus_active.png b/.config/awesome/themes/multicolor/icons/titlebar/maximized_focus_active.png
new file mode 100644
index 0000000..957298b
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/maximized_focus_active.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/maximized_focus_inactive.png b/.config/awesome/themes/multicolor/icons/titlebar/maximized_focus_inactive.png
new file mode 100644
index 0000000..1187229
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/maximized_focus_inactive.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/maximized_normal_active.png b/.config/awesome/themes/multicolor/icons/titlebar/maximized_normal_active.png
new file mode 100644
index 0000000..a705f81
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/maximized_normal_active.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/maximized_normal_inactive.png b/.config/awesome/themes/multicolor/icons/titlebar/maximized_normal_inactive.png
new file mode 100644
index 0000000..4c1ab1f
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/maximized_normal_inactive.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/minimize_focus.png b/.config/awesome/themes/multicolor/icons/titlebar/minimize_focus.png
new file mode 100644
index 0000000..bbe8cff
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/minimize_focus.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/minimize_normal.png b/.config/awesome/themes/multicolor/icons/titlebar/minimize_normal.png
new file mode 100644
index 0000000..36621d0
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/minimize_normal.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/ontop_focus_active.png b/.config/awesome/themes/multicolor/icons/titlebar/ontop_focus_active.png
new file mode 100644
index 0000000..25a3080
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/ontop_focus_active.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/ontop_focus_inactive.png b/.config/awesome/themes/multicolor/icons/titlebar/ontop_focus_inactive.png
new file mode 100644
index 0000000..d3c077a
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/ontop_focus_inactive.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/ontop_normal_active.png b/.config/awesome/themes/multicolor/icons/titlebar/ontop_normal_active.png
new file mode 100644
index 0000000..117a203
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/ontop_normal_active.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/ontop_normal_inactive.png b/.config/awesome/themes/multicolor/icons/titlebar/ontop_normal_inactive.png
new file mode 100644
index 0000000..d3a10c8
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/ontop_normal_inactive.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/sticky_focus_active.png b/.config/awesome/themes/multicolor/icons/titlebar/sticky_focus_active.png
new file mode 100644
index 0000000..147ce6a
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/sticky_focus_active.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/sticky_focus_inactive.png b/.config/awesome/themes/multicolor/icons/titlebar/sticky_focus_inactive.png
new file mode 100644
index 0000000..396628a
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/sticky_focus_inactive.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/sticky_normal_active.png b/.config/awesome/themes/multicolor/icons/titlebar/sticky_normal_active.png
new file mode 100644
index 0000000..bdb5595
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/sticky_normal_active.png differ
diff --git a/.config/awesome/themes/multicolor/icons/titlebar/sticky_normal_inactive.png b/.config/awesome/themes/multicolor/icons/titlebar/sticky_normal_inactive.png
new file mode 100644
index 0000000..a96b9b1
Binary files /dev/null and b/.config/awesome/themes/multicolor/icons/titlebar/sticky_normal_inactive.png differ
diff --git a/.config/awesome/themes/multicolor/theme.lua b/.config/awesome/themes/multicolor/theme.lua
new file mode 100644
index 0000000..b4b050e
--- /dev/null
+++ b/.config/awesome/themes/multicolor/theme.lua
@@ -0,0 +1,343 @@
+--[[
+
+ Multicolor Awesome WM theme 2.0
+ github.com/copycat-killer
+
+--]]
+
+
+local gears = require("gears")
+local lain = require("lain")
+local awful = require("awful")
+local wibox = require("wibox")
+local os = { getenv = os.getenv, setlocale = os.setlocale }
+
+local theme = {}
+theme.confdir = os.getenv("HOME") .. "/.config/awesome/themes/multicolor"
+theme.wallpaper = theme.confdir .. "/wall.png"
+theme.font = "xos4 Terminus 8"
+theme.menu_bg_normal = "#000000"
+theme.menu_bg_focus = "#000000"
+theme.bg_normal = "#000000"
+theme.bg_focus = "#000000"
+theme.bg_urgent = "#000000"
+theme.fg_normal = "#aaaaaa"
+theme.fg_focus = "#ff8c00"
+theme.fg_urgent = "#af1d18"
+theme.fg_minimize = "#ffffff"
+theme.border_width = 1
+theme.border_normal = "#1c2022"
+theme.border_focus = "#606060"
+theme.border_marked = "#3ca4d8"
+theme.menu_border_width = 0
+theme.menu_width = 130
+theme.menu_submenu_icon = theme.confdir .. "/icons/submenu.png"
+theme.menu_fg_normal = "#aaaaaa"
+theme.menu_fg_focus = "#ff8c00"
+theme.menu_bg_normal = "#050505dd"
+theme.menu_bg_focus = "#050505dd"
+theme.widget_temp = theme.confdir .. "/icons/temp.png"
+theme.widget_uptime = theme.confdir .. "/icons/ac.png"
+theme.widget_cpu = theme.confdir .. "/icons/cpu.png"
+theme.widget_weather = theme.confdir .. "/icons/dish.png"
+theme.widget_fs = theme.confdir .. "/icons/fs.png"
+theme.widget_mem = theme.confdir .. "/icons/mem.png"
+theme.widget_fs = theme.confdir .. "/icons/fs.png"
+theme.widget_note = theme.confdir .. "/icons/note.png"
+theme.widget_note_on = theme.confdir .. "/icons/note_on.png"
+theme.widget_netdown = theme.confdir .. "/icons/net_down.png"
+theme.widget_netup = theme.confdir .. "/icons/net_up.png"
+theme.widget_mail = theme.confdir .. "/icons/mail.png"
+theme.widget_batt = theme.confdir .. "/icons/bat.png"
+theme.widget_clock = theme.confdir .. "/icons/clock.png"
+theme.widget_vol = theme.confdir .. "/icons/spkr.png"
+theme.taglist_squares_sel = theme.confdir .. "/icons/square_a.png"
+theme.taglist_squares_unsel = theme.confdir .. "/icons/square_b.png"
+theme.tasklist_plain_task_name = true
+theme.tasklist_disable_icon = true
+theme.useless_gap = 0
+theme.layout_tile = theme.confdir .. "/icons/tile.png"
+theme.layout_tilegaps = theme.confdir .. "/icons/tilegaps.png"
+theme.layout_tileleft = theme.confdir .. "/icons/tileleft.png"
+theme.layout_tilebottom = theme.confdir .. "/icons/tilebottom.png"
+theme.layout_tiletop = theme.confdir .. "/icons/tiletop.png"
+theme.layout_fairv = theme.confdir .. "/icons/fairv.png"
+theme.layout_fairh = theme.confdir .. "/icons/fairh.png"
+theme.layout_spiral = theme.confdir .. "/icons/spiral.png"
+theme.layout_dwindle = theme.confdir .. "/icons/dwindle.png"
+theme.layout_max = theme.confdir .. "/icons/max.png"
+theme.layout_fullscreen = theme.confdir .. "/icons/fullscreen.png"
+theme.layout_magnifier = theme.confdir .. "/icons/magnifier.png"
+theme.layout_floating = theme.confdir .. "/icons/floating.png"
+theme.titlebar_close_button_normal = theme.confdir .. "/icons/titlebar/close_normal.png"
+theme.titlebar_close_button_focus = theme.confdir .. "/icons/titlebar/close_focus.png"
+theme.titlebar_minimize_button_normal = theme.confdir .. "/icons/titlebar/minimize_normal.png"
+theme.titlebar_minimize_button_focus = theme.confdir .. "/icons/titlebar/minimize_focus.png"
+theme.titlebar_ontop_button_normal_inactive = theme.confdir .. "/icons/titlebar/ontop_normal_inactive.png"
+theme.titlebar_ontop_button_focus_inactive = theme.confdir .. "/icons/titlebar/ontop_focus_inactive.png"
+theme.titlebar_ontop_button_normal_active = theme.confdir .. "/icons/titlebar/ontop_normal_active.png"
+theme.titlebar_ontop_button_focus_active = theme.confdir .. "/icons/titlebar/ontop_focus_active.png"
+theme.titlebar_sticky_button_normal_inactive = theme.confdir .. "/icons/titlebar/sticky_normal_inactive.png"
+theme.titlebar_sticky_button_focus_inactive = theme.confdir .. "/icons/titlebar/sticky_focus_inactive.png"
+theme.titlebar_sticky_button_normal_active = theme.confdir .. "/icons/titlebar/sticky_normal_active.png"
+theme.titlebar_sticky_button_focus_active = theme.confdir .. "/icons/titlebar/sticky_focus_active.png"
+theme.titlebar_floating_button_normal_inactive = theme.confdir .. "/icons/titlebar/floating_normal_inactive.png"
+theme.titlebar_floating_button_focus_inactive = theme.confdir .. "/icons/titlebar/floating_focus_inactive.png"
+theme.titlebar_floating_button_normal_active = theme.confdir .. "/icons/titlebar/floating_normal_active.png"
+theme.titlebar_floating_button_focus_active = theme.confdir .. "/icons/titlebar/floating_focus_active.png"
+theme.titlebar_maximized_button_normal_inactive = theme.confdir .. "/icons/titlebar/maximized_normal_inactive.png"
+theme.titlebar_maximized_button_focus_inactive = theme.confdir .. "/icons/titlebar/maximized_focus_inactive.png"
+theme.titlebar_maximized_button_normal_active = theme.confdir .. "/icons/titlebar/maximized_normal_active.png"
+theme.titlebar_maximized_button_focus_active = theme.confdir .. "/icons/titlebar/maximized_focus_active.png"
+
+local markup = lain.util.markup
+
+-- Textclock
+os.setlocale(os.getenv("LANG")) -- to localize the clock
+local clockicon = wibox.widget.imagebox(theme.widget_clock)
+local mytextclock = wibox.widget.textclock(markup("#7788af", "%A %d %B ") .. markup("#535f7a", ">") .. markup("#de5e1e", " %H:%M "))
+mytextclock.font = theme.font
+
+-- Calendar
+theme.cal = lain.widget.calendar({
+ attach_to = { mytextclock },
+ notification_preset = {
+ font = "xos4 Terminus 10",
+ fg = theme.fg_normal,
+ bg = theme.bg_normal
+ }
+})
+
+-- Weather
+local weathericon = wibox.widget.imagebox(theme.widget_weather)
+theme.weather = lain.widget.weather({
+ city_id = 2643743, -- placeholder (London)
+ notification_preset = { font = "xos4 Terminus 10", fg = theme.fg_normal },
+ weather_na_markup = markup.fontfg(theme.font, "#eca4c4", "N/A "),
+ settings = function()
+ descr = weather_now["weather"][1]["description"]:lower()
+ units = math.floor(weather_now["main"]["temp"])
+ widget:set_markup(markup.fontfg(theme.font, "#eca4c4", descr .. " @ " .. units .. "°C "))
+ end
+})
+
+-- / fs
+local fsicon = wibox.widget.imagebox(theme.widget_fs)
+theme.fs = lain.widget.fs({
+ options = "--exclude-type=tmpfs",
+ notification_preset = { font = "xos4 Terminus 10", fg = theme.fg_normal },
+ settings = function()
+ widget:set_markup(markup.fontfg(theme.font, "#80d9d8", fs_now.used .. "% "))
+ end
+})
+
+--[[ Mail IMAP check
+-- commented because it needs to be set before use
+local mailicon = wibox.widget.imagebox()
+local mail = lain.widget.imap({
+ timeout = 180,
+ server = "server",
+ mail = "mail",
+ password = "keyring get mail",
+ settings = function()
+ if mailcount > 0 then
+ mailicon:set_image(theme.widget_mail)
+ widget:set_markup(markup.fontfg(theme.font, "#cccccc", mailcount .. " "))
+ else
+ widget:set_text("")
+ --mailicon:set_image() -- not working in 4.0
+ mailicon._private.image = nil
+ mailicon:emit_signal("widget::redraw_needed")
+ mailicon:emit_signal("widget::layout_changed")
+ end
+ end
+})
+--]]
+
+-- CPU
+local cpuicon = wibox.widget.imagebox(theme.widget_cpu)
+local cpu = lain.widget.cpu({
+ settings = function()
+ widget:set_markup(markup.fontfg(theme.font, "#e33a6e", cpu_now.usage .. "% "))
+ end
+})
+
+-- Coretemp
+local tempicon = wibox.widget.imagebox(theme.widget_temp)
+local temp = lain.widget.temp({
+ settings = function()
+ widget:set_markup(markup.fontfg(theme.font, "#f1af5f", coretemp_now .. "°C "))
+ end
+})
+
+-- Battery
+local baticon = wibox.widget.imagebox(theme.widget_batt)
+local bat = lain.widget.bat({
+ settings = function()
+ local perc = bat_now.perc ~= "N/A" and bat_now.perc .. "%" or bat_now.perc
+
+ if bat_now.ac_status == 1 then
+ perc = perc .. " plug"
+ end
+
+ widget:set_markup(markup.fontfg(theme.font, theme.fg_normal, perc .. " "))
+ end
+})
+
+-- ALSA volume
+local volicon = wibox.widget.imagebox(theme.widget_vol)
+theme.volume = lain.widget.alsa({
+ settings = function()
+ if volume_now.status == "off" then
+ volume_now.level = volume_now.level .. "M"
+ end
+
+ widget:set_markup(markup.fontfg(theme.font, "#7493d2", volume_now.level .. "% "))
+ end
+})
+
+-- Net
+local netdownicon = wibox.widget.imagebox(theme.widget_netdown)
+local netdowninfo = wibox.widget.textbox()
+local netupicon = wibox.widget.imagebox(theme.widget_netup)
+local netupinfo = lain.widget.net({
+ settings = function()
+ if iface ~= "network off" and
+ string.match(theme.weather.widget.text, "N/A")
+ then
+ theme.weather.update()
+ end
+
+ widget:set_markup(markup.fontfg(theme.font, "#e54c62", net_now.sent .. " "))
+ netdowninfo:set_markup(markup.fontfg(theme.font, "#87af5f", net_now.received .. " "))
+ end
+})
+
+-- MEM
+local memicon = wibox.widget.imagebox(theme.widget_mem)
+local memory = lain.widget.mem({
+ settings = function()
+ widget:set_markup(markup.fontfg(theme.font, "#e0da37", mem_now.used .. "M "))
+ end
+})
+
+-- MPD
+local mpdicon = wibox.widget.imagebox()
+theme.mpd = lain.widget.mpd({
+ settings = function()
+ mpd_notification_preset = {
+ text = string.format("%s [%s] - %s\n%s", mpd_now.artist,
+ mpd_now.album, mpd_now.date, mpd_now.title)
+ }
+
+ if mpd_now.state == "play" then
+ artist = mpd_now.artist .. " > "
+ title = mpd_now.title .. " "
+ mpdicon:set_image(theme.widget_note_on)
+ elseif mpd_now.state == "pause" then
+ artist = "mpd "
+ title = "paused "
+ else
+ artist = ""
+ title = ""
+ --mpdicon:set_image() -- not working in 4.0
+ mpdicon._private.image = nil
+ mpdicon:emit_signal("widget::redraw_needed")
+ mpdicon:emit_signal("widget::layout_changed")
+ end
+ widget:set_markup(markup.fontfg(theme.font, "#e54c62", artist) .. markup.fontfg(theme.font, "#b2b2b2", title))
+ end
+})
+
+function theme.at_screen_connect(s)
+ -- Quake application
+ s.quake = lain.util.quake({ app = awful.util.terminal })
+
+ -- If wallpaper is a function, call it with the screen
+ local wallpaper = theme.wallpaper
+ if type(wallpaper) == "function" then
+ wallpaper = wallpaper(s)
+ end
+ gears.wallpaper.maximized(wallpaper, s, true)
+
+ -- Tags
+ awful.tag(awful.util.tagnames, s, awful.layout.layouts)
+
+ -- Create a promptbox for each screen
+ s.mypromptbox = awful.widget.prompt()
+ -- Create an imagebox widget which will contains an icon indicating which layout we're using.
+ -- We need one layoutbox per screen.
+ s.mylayoutbox = awful.widget.layoutbox(s)
+ s.mylayoutbox:buttons(awful.util.table.join(
+ awful.button({ }, 1, function () awful.layout.inc( 1) end),
+ awful.button({ }, 3, function () awful.layout.inc(-1) end),
+ awful.button({ }, 4, function () awful.layout.inc( 1) end),
+ awful.button({ }, 5, function () awful.layout.inc(-1) end)))
+ -- Create a taglist widget
+ s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons)
+
+ -- Create a tasklist widget
+ s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons)
+
+ -- Create the wibox
+ s.mywibox = awful.wibar({ position = "top", screen = s, height = 20, bg = theme.bg_normal, fg = theme.fg_normal })
+
+ -- Add widgets to the wibox
+ s.mywibox:setup {
+ layout = wibox.layout.align.horizontal,
+ { -- Left widgets
+ layout = wibox.layout.fixed.horizontal,
+ --s.mylayoutbox,
+ s.mytaglist,
+ s.mypromptbox,
+ mpdicon,
+ theme.mpd.widget,
+ },
+ --s.mytasklist, -- Middle widget
+ nil,
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ wibox.widget.systray(),
+ --mailicon,
+ --mail.widget,
+ netdownicon,
+ netdowninfo,
+ netupicon,
+ netupinfo.widget,
+ volicon,
+ theme.volume.widget,
+ memicon,
+ memory.widget,
+ cpuicon,
+ cpu.widget,
+ fsicon,
+ theme.fs.widget,
+ weathericon,
+ theme.weather.widget,
+ tempicon,
+ temp.widget,
+ baticon,
+ bat.widget,
+ clockicon,
+ mytextclock,
+ },
+ }
+
+ -- Create the bottom wibox
+ s.mybottomwibox = awful.wibar({ position = "bottom", screen = s, border_width = 0, height = 20, bg = theme.bg_normal, fg = theme.fg_normal })
+
+ -- Add widgets to the bottom wibox
+ s.mybottomwibox:setup {
+ layout = wibox.layout.align.horizontal,
+ { -- Left widgets
+ layout = wibox.layout.fixed.horizontal,
+ },
+ s.mytasklist, -- Middle widget
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ s.mylayoutbox,
+ },
+ }
+end
+
+return theme
diff --git a/.config/awesome/themes/multicolor/wall.png b/.config/awesome/themes/multicolor/wall.png
new file mode 100644
index 0000000..a3188d0
Binary files /dev/null and b/.config/awesome/themes/multicolor/wall.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/ac.png b/.config/awesome/themes/powerarrow-dark/icons/ac.png
new file mode 100644
index 0000000..96efcb4
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/ac.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/battery.png b/.config/awesome/themes/powerarrow-dark/icons/battery.png
new file mode 100644
index 0000000..8c85596
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/battery.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/battery_empty.png b/.config/awesome/themes/powerarrow-dark/icons/battery_empty.png
new file mode 100644
index 0000000..00821c9
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/battery_empty.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/battery_low.png b/.config/awesome/themes/powerarrow-dark/icons/battery_low.png
new file mode 100644
index 0000000..29f3fc5
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/battery_low.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/centerfair.png b/.config/awesome/themes/powerarrow-dark/icons/centerfair.png
new file mode 100644
index 0000000..c4f64b0
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/centerfair.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/centerwork.png b/.config/awesome/themes/powerarrow-dark/icons/centerwork.png
new file mode 100644
index 0000000..9071516
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/centerwork.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/centerworkh.png b/.config/awesome/themes/powerarrow-dark/icons/centerworkh.png
new file mode 100644
index 0000000..b1d1379
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/centerworkh.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/cpu.png b/.config/awesome/themes/powerarrow-dark/icons/cpu.png
new file mode 100644
index 0000000..35af1c3
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/cpu.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/dwindle.png b/.config/awesome/themes/powerarrow-dark/icons/dwindle.png
new file mode 100644
index 0000000..649ea99
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/dwindle.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/fairh.png b/.config/awesome/themes/powerarrow-dark/icons/fairh.png
new file mode 100644
index 0000000..62d3d99
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/fairh.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/fairv.png b/.config/awesome/themes/powerarrow-dark/icons/fairv.png
new file mode 100644
index 0000000..131dd0f
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/fairv.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/floating.png b/.config/awesome/themes/powerarrow-dark/icons/floating.png
new file mode 100644
index 0000000..d25c47b
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/floating.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/hdd.png b/.config/awesome/themes/powerarrow-dark/icons/hdd.png
new file mode 100644
index 0000000..0fb6833
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/hdd.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/magnifier.png b/.config/awesome/themes/powerarrow-dark/icons/magnifier.png
new file mode 100644
index 0000000..60d3e0d
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/magnifier.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/mail.png b/.config/awesome/themes/powerarrow-dark/icons/mail.png
new file mode 100644
index 0000000..474e602
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/mail.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/mail_on.png b/.config/awesome/themes/powerarrow-dark/icons/mail_on.png
new file mode 100644
index 0000000..19106d7
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/mail_on.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/max.png b/.config/awesome/themes/powerarrow-dark/icons/max.png
new file mode 100644
index 0000000..5b0a5b7
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/max.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/mem.png b/.config/awesome/themes/powerarrow-dark/icons/mem.png
new file mode 100644
index 0000000..7860a1a
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/mem.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/net.png b/.config/awesome/themes/powerarrow-dark/icons/net.png
new file mode 100644
index 0000000..bc42fdc
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/net.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/net_wired.png b/.config/awesome/themes/powerarrow-dark/icons/net_wired.png
new file mode 100644
index 0000000..e8cc2bd
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/net_wired.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/note.png b/.config/awesome/themes/powerarrow-dark/icons/note.png
new file mode 100644
index 0000000..baa29c3
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/note.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/note_on.png b/.config/awesome/themes/powerarrow-dark/icons/note_on.png
new file mode 100644
index 0000000..1a7ab94
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/note_on.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/scissors.png b/.config/awesome/themes/powerarrow-dark/icons/scissors.png
new file mode 100644
index 0000000..f8c700d
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/scissors.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/spiral.png b/.config/awesome/themes/powerarrow-dark/icons/spiral.png
new file mode 100644
index 0000000..d9ee0f6
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/spiral.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/square_sel.png b/.config/awesome/themes/powerarrow-dark/icons/square_sel.png
new file mode 100644
index 0000000..1102a9f
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/square_sel.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/square_unsel.png b/.config/awesome/themes/powerarrow-dark/icons/square_unsel.png
new file mode 100644
index 0000000..7386b85
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/square_unsel.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/submenu.png b/.config/awesome/themes/powerarrow-dark/icons/submenu.png
new file mode 100644
index 0000000..b55ebce
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/submenu.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/task.png b/.config/awesome/themes/powerarrow-dark/icons/task.png
new file mode 100644
index 0000000..9701b68
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/task.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/temp.png b/.config/awesome/themes/powerarrow-dark/icons/temp.png
new file mode 100644
index 0000000..6793a9f
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/temp.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/termfair.png b/.config/awesome/themes/powerarrow-dark/icons/termfair.png
new file mode 100644
index 0000000..3e06023
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/termfair.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/tile.png b/.config/awesome/themes/powerarrow-dark/icons/tile.png
new file mode 100644
index 0000000..922c05c
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/tile.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/tilebottom.png b/.config/awesome/themes/powerarrow-dark/icons/tilebottom.png
new file mode 100644
index 0000000..6ec9cb8
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/tilebottom.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/tileleft.png b/.config/awesome/themes/powerarrow-dark/icons/tileleft.png
new file mode 100644
index 0000000..8e3d2d6
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/tileleft.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/tiletop.png b/.config/awesome/themes/powerarrow-dark/icons/tiletop.png
new file mode 100644
index 0000000..3da75a1
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/tiletop.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/close_focus.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/close_focus.png
new file mode 100644
index 0000000..b2051b0
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/close_focus.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/close_normal.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/close_normal.png
new file mode 100644
index 0000000..da6028c
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/close_normal.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/floating_focus_active.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/floating_focus_active.png
new file mode 100644
index 0000000..5fe84c0
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/floating_focus_active.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/floating_focus_inactive.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/floating_focus_inactive.png
new file mode 100644
index 0000000..47f19f6
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/floating_focus_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/floating_normal_active.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/floating_normal_active.png
new file mode 100644
index 0000000..576fa36
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/floating_normal_active.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/floating_normal_inactive.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/floating_normal_inactive.png
new file mode 100644
index 0000000..4adc5e9
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/floating_normal_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/maximized_focus_active.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/maximized_focus_active.png
new file mode 100644
index 0000000..7d9a11a
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/maximized_focus_active.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/maximized_focus_inactive.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/maximized_focus_inactive.png
new file mode 100644
index 0000000..bce1d00
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/maximized_focus_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/maximized_normal_active.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/maximized_normal_active.png
new file mode 100644
index 0000000..9f24945
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/maximized_normal_active.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/maximized_normal_inactive.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/maximized_normal_inactive.png
new file mode 100644
index 0000000..2e56d32
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/maximized_normal_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/ontop_focus_active.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/ontop_focus_active.png
new file mode 100644
index 0000000..41a69e2
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/ontop_focus_active.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/ontop_focus_inactive.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/ontop_focus_inactive.png
new file mode 100644
index 0000000..2f3a2be
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/ontop_focus_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/ontop_normal_active.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/ontop_normal_active.png
new file mode 100644
index 0000000..0f937b7
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/ontop_normal_active.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/ontop_normal_inactive.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/ontop_normal_inactive.png
new file mode 100644
index 0000000..a9a3206
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/ontop_normal_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/sticky_focus_active.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/sticky_focus_active.png
new file mode 100644
index 0000000..a9bc8a2
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/sticky_focus_active.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/sticky_focus_inactive.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/sticky_focus_inactive.png
new file mode 100644
index 0000000..5493d8e
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/sticky_focus_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/sticky_normal_active.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/sticky_normal_active.png
new file mode 100644
index 0000000..1e150f5
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/sticky_normal_active.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/titlebar/sticky_normal_inactive.png b/.config/awesome/themes/powerarrow-dark/icons/titlebar/sticky_normal_inactive.png
new file mode 100644
index 0000000..7e6c99b
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/titlebar/sticky_normal_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/vol.png b/.config/awesome/themes/powerarrow-dark/icons/vol.png
new file mode 100644
index 0000000..bbf33d4
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/vol.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/vol_low.png b/.config/awesome/themes/powerarrow-dark/icons/vol_low.png
new file mode 100644
index 0000000..aa3ce4d
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/vol_low.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/vol_mute.png b/.config/awesome/themes/powerarrow-dark/icons/vol_mute.png
new file mode 100644
index 0000000..e855fd2
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/vol_mute.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/icons/vol_no.png b/.config/awesome/themes/powerarrow-dark/icons/vol_no.png
new file mode 100644
index 0000000..bbe917b
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/icons/vol_no.png differ
diff --git a/.config/awesome/themes/powerarrow-dark/theme.lua b/.config/awesome/themes/powerarrow-dark/theme.lua
new file mode 100644
index 0000000..c1688e1
--- /dev/null
+++ b/.config/awesome/themes/powerarrow-dark/theme.lua
@@ -0,0 +1,343 @@
+--[[
+
+ Powerarrow Dark Awesome WM theme
+ github.com/copycat-killer
+
+--]]
+
+local gears = require("gears")
+local lain = require("lain")
+local awful = require("awful")
+local wibox = require("wibox")
+local os = { getenv = os.getenv }
+
+local theme = {}
+theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/powerarrow-dark"
+theme.wallpaper = theme.dir .. "/wall.png"
+theme.font = "xos4 Terminus 9"
+theme.fg_normal = "#DDDDFF"
+theme.fg_focus = "#EA6F81"
+theme.fg_urgent = "#CC9393"
+theme.bg_normal = "#1A1A1A"
+theme.bg_focus = "#313131"
+theme.bg_urgent = "#1A1A1A"
+theme.border_width = 1
+theme.border_normal = "#3F3F3F"
+theme.border_focus = "#7F7F7F"
+theme.border_marked = "#CC9393"
+theme.tasklist_bg_focus = "#1A1A1A"
+theme.titlebar_bg_focus = theme.bg_focus
+theme.titlebar_bg_normal = theme.bg_normal
+theme.titlebar_fg_focus = theme.fg_focus
+theme.menu_height = 16
+theme.menu_width = 140
+theme.menu_submenu_icon = theme.dir .. "/icons/submenu.png"
+theme.taglist_squares_sel = theme.dir .. "/icons/square_sel.png"
+theme.taglist_squares_unsel = theme.dir .. "/icons/square_unsel.png"
+theme.layout_tile = theme.dir .. "/icons/tile.png"
+theme.layout_tileleft = theme.dir .. "/icons/tileleft.png"
+theme.layout_tilebottom = theme.dir .. "/icons/tilebottom.png"
+theme.layout_tiletop = theme.dir .. "/icons/tiletop.png"
+theme.layout_fairv = theme.dir .. "/icons/fairv.png"
+theme.layout_fairh = theme.dir .. "/icons/fairh.png"
+theme.layout_spiral = theme.dir .. "/icons/spiral.png"
+theme.layout_dwindle = theme.dir .. "/icons/dwindle.png"
+theme.layout_max = theme.dir .. "/icons/max.png"
+theme.layout_fullscreen = theme.dir .. "/icons/fullscreen.png"
+theme.layout_magnifier = theme.dir .. "/icons/magnifier.png"
+theme.layout_floating = theme.dir .. "/icons/floating.png"
+theme.widget_ac = theme.dir .. "/icons/ac.png"
+theme.widget_battery = theme.dir .. "/icons/battery.png"
+theme.widget_battery_low = theme.dir .. "/icons/battery_low.png"
+theme.widget_battery_empty = theme.dir .. "/icons/battery_empty.png"
+theme.widget_mem = theme.dir .. "/icons/mem.png"
+theme.widget_cpu = theme.dir .. "/icons/cpu.png"
+theme.widget_temp = theme.dir .. "/icons/temp.png"
+theme.widget_net = theme.dir .. "/icons/net.png"
+theme.widget_hdd = theme.dir .. "/icons/hdd.png"
+theme.widget_music = theme.dir .. "/icons/note.png"
+theme.widget_music_on = theme.dir .. "/icons/note_on.png"
+theme.widget_vol = theme.dir .. "/icons/vol.png"
+theme.widget_vol_low = theme.dir .. "/icons/vol_low.png"
+theme.widget_vol_no = theme.dir .. "/icons/vol_no.png"
+theme.widget_vol_mute = theme.dir .. "/icons/vol_mute.png"
+theme.widget_mail = theme.dir .. "/icons/mail.png"
+theme.widget_mail_on = theme.dir .. "/icons/mail_on.png"
+theme.tasklist_plain_task_name = true
+theme.tasklist_disable_icon = true
+theme.useless_gap = 0
+theme.titlebar_close_button_focus = theme.dir .. "/icons/titlebar/close_focus.png"
+theme.titlebar_close_button_normal = theme.dir .. "/icons/titlebar/close_normal.png"
+theme.titlebar_ontop_button_focus_active = theme.dir .. "/icons/titlebar/ontop_focus_active.png"
+theme.titlebar_ontop_button_normal_active = theme.dir .. "/icons/titlebar/ontop_normal_active.png"
+theme.titlebar_ontop_button_focus_inactive = theme.dir .. "/icons/titlebar/ontop_focus_inactive.png"
+theme.titlebar_ontop_button_normal_inactive = theme.dir .. "/icons/titlebar/ontop_normal_inactive.png"
+theme.titlebar_sticky_button_focus_active = theme.dir .. "/icons/titlebar/sticky_focus_active.png"
+theme.titlebar_sticky_button_normal_active = theme.dir .. "/icons/titlebar/sticky_normal_active.png"
+theme.titlebar_sticky_button_focus_inactive = theme.dir .. "/icons/titlebar/sticky_focus_inactive.png"
+theme.titlebar_sticky_button_normal_inactive = theme.dir .. "/icons/titlebar/sticky_normal_inactive.png"
+theme.titlebar_floating_button_focus_active = theme.dir .. "/icons/titlebar/floating_focus_active.png"
+theme.titlebar_floating_button_normal_active = theme.dir .. "/icons/titlebar/floating_normal_active.png"
+theme.titlebar_floating_button_focus_inactive = theme.dir .. "/icons/titlebar/floating_focus_inactive.png"
+theme.titlebar_floating_button_normal_inactive = theme.dir .. "/icons/titlebar/floating_normal_inactive.png"
+theme.titlebar_maximized_button_focus_active = theme.dir .. "/icons/titlebar/maximized_focus_active.png"
+theme.titlebar_maximized_button_normal_active = theme.dir .. "/icons/titlebar/maximized_normal_active.png"
+theme.titlebar_maximized_button_focus_inactive = theme.dir .. "/icons/titlebar/maximized_focus_inactive.png"
+theme.titlebar_maximized_button_normal_inactive = theme.dir .. "/icons/titlebar/maximized_normal_inactive.png"
+
+local markup = lain.util.markup
+local separators = lain.util.separators
+
+-- Textclock
+local clockicon = wibox.widget.imagebox(theme.widget_clock)
+local clock = awful.widget.watch(
+ "date +'%a %d %b %R'", 60,
+ function(widget, stdout)
+ widget:set_markup(" " .. markup.font(theme.font, stdout))
+ end
+)
+
+-- Calendar
+theme.cal = lain.widget.calendar({
+ attach_to = { clock.widget },
+ notification_preset = {
+ font = "xos4 Terminus 10",
+ fg = theme.fg_normal,
+ bg = theme.bg_normal
+ }
+})
+
+-- Mail IMAP check
+local mailicon = wibox.widget.imagebox(theme.widget_mail)
+--[[ commented because it needs to be set before use
+mailicon:buttons(awful.util.table.join(awful.button({ }, 1, function () awful.spawn(mail) end)))
+local mail = lain.widget.imap({
+ timeout = 180,
+ server = "server",
+ mail = "mail",
+ password = "keyring get mail",
+ settings = function()
+ if mailcount > 0 then
+ widget:set_text(" " .. mailcount .. " ")
+ mailicon:set_image(theme.widget_mail_on)
+ else
+ widget:set_text("")
+ mailicon:set_image(theme.widget_mail)
+ end
+ end
+})
+--]]
+
+-- MPD
+local musicplr = awful.util.terminal .. " -title Music -g 130x34-320+16 -e ncmpcpp"
+local mpdicon = wibox.widget.imagebox(theme.widget_music)
+mpdicon:buttons(awful.util.table.join(
+ awful.button({ modkey }, 1, function () awful.spawn.with_shell(musicplr) end),
+ awful.button({ }, 1, function ()
+ awful.spawn.with_shell("mpc prev")
+ theme.mpd.update()
+ end),
+ awful.button({ }, 2, function ()
+ awful.spawn.with_shell("mpc toggle")
+ theme.mpd.update()
+ end),
+ awful.button({ }, 3, function ()
+ awful.spawn.with_shell("mpc next")
+ theme.mpd.update()
+ end)))
+theme.mpd = lain.widget.mpd({
+ settings = function()
+ if mpd_now.state == "play" then
+ artist = " " .. mpd_now.artist .. " "
+ title = mpd_now.title .. " "
+ mpdicon:set_image(theme.widget_music_on)
+ elseif mpd_now.state == "pause" then
+ artist = " mpd "
+ title = "paused "
+ else
+ artist = ""
+ title = ""
+ mpdicon:set_image(theme.widget_music)
+ end
+
+ widget:set_markup(markup.font(theme.font, markup("#EA6F81", artist) .. title))
+ end
+})
+
+-- MEM
+local memicon = wibox.widget.imagebox(theme.widget_mem)
+local mem = lain.widget.mem({
+ settings = function()
+ widget:set_markup(markup.font(theme.font, " " .. mem_now.used .. "MB "))
+ end
+})
+
+-- CPU
+local cpuicon = wibox.widget.imagebox(theme.widget_cpu)
+local cpu = lain.widget.cpu({
+ settings = function()
+ widget:set_markup(markup.font(theme.font, " " .. cpu_now.usage .. "% "))
+ end
+})
+
+-- Coretemp
+local tempicon = wibox.widget.imagebox(theme.widget_temp)
+local temp = lain.widget.temp({
+ settings = function()
+ widget:set_markup(markup.font(theme.font, " " .. coretemp_now .. "°C "))
+ end
+})
+
+-- / fs
+local fsicon = wibox.widget.imagebox(theme.widget_hdd)
+theme.fs = lain.widget.fs({
+ options = "--exclude-type=tmpfs",
+ notification_preset = { fg = theme.fg_normal, bg = theme.bg_normal, font = "xos4 Terminus 10" },
+ settings = function()
+ widget:set_markup(markup.font(theme.font, " " .. fs_now.used .. "% "))
+ end
+})
+
+-- Battery
+local baticon = wibox.widget.imagebox(theme.widget_battery)
+local bat = lain.widget.bat({
+ settings = function()
+ if bat_now.status ~= "N/A" then
+ if bat_now.ac_status == 1 then
+ widget:set_markup(markup.font(theme.font, " AC "))
+ baticon:set_image(theme.widget_ac)
+ return
+ elseif not bat_now.perc and tonumber(bat_now.perc) <= 5 then
+ baticon:set_image(theme.widget_battery_empty)
+ elseif not bat_now.perc and tonumber(bat_now.perc) <= 15 then
+ baticon:set_image(theme.widget_battery_low)
+ else
+ baticon:set_image(theme.widget_battery)
+ end
+ widget:set_markup(markup.font(theme.font, " " .. bat_now.perc .. "% "))
+ else
+ widget:set_markup(markup.font(theme.font, " AC "))
+ baticon:set_image(theme.widget_ac)
+ end
+ end
+})
+
+-- ALSA volume
+local volicon = wibox.widget.imagebox(theme.widget_vol)
+theme.volume = lain.widget.alsa({
+ settings = function()
+ if volume_now.status == "off" then
+ volicon:set_image(theme.widget_vol_mute)
+ elseif tonumber(volume_now.level) == 0 then
+ volicon:set_image(theme.widget_vol_no)
+ elseif tonumber(volume_now.level) <= 50 then
+ volicon:set_image(theme.widget_vol_low)
+ else
+ volicon:set_image(theme.widget_vol)
+ end
+
+ widget:set_markup(markup.font(theme.font, " " .. volume_now.level .. "% "))
+ end
+})
+
+-- Net
+local neticon = wibox.widget.imagebox(theme.widget_net)
+local net = lain.widget.net({
+ settings = function()
+ widget:set_markup(markup.font(theme.font,
+ markup("#7AC82E", " " .. net_now.received)
+ .. " " ..
+ markup("#46A8C3", " " .. net_now.sent .. " ")))
+ end
+})
+
+-- Separators
+local spr = wibox.widget.textbox(' ')
+local arrl_dl = separators.arrow_left(theme.bg_focus, "alpha")
+local arrl_ld = separators.arrow_left("alpha", theme.bg_focus)
+
+function theme.at_screen_connect(s)
+ -- Quake application
+ s.quake = lain.util.quake({ app = awful.util.terminal })
+
+ -- If wallpaper is a function, call it with the screen
+ local wallpaper = theme.wallpaper
+ if type(wallpaper) == "function" then
+ wallpaper = wallpaper(s)
+ end
+ gears.wallpaper.maximized(wallpaper, s, true)
+
+ -- Tags
+ awful.tag(awful.util.tagnames, s, awful.layout.layouts)
+
+ -- Create a promptbox for each screen
+ s.mypromptbox = awful.widget.prompt()
+ -- Create an imagebox widget which will contains an icon indicating which layout we're using.
+ -- We need one layoutbox per screen.
+ s.mylayoutbox = awful.widget.layoutbox(s)
+ s.mylayoutbox:buttons(awful.util.table.join(
+ awful.button({ }, 1, function () awful.layout.inc( 1) end),
+ awful.button({ }, 3, function () awful.layout.inc(-1) end),
+ awful.button({ }, 4, function () awful.layout.inc( 1) end),
+ awful.button({ }, 5, function () awful.layout.inc(-1) end)))
+ -- Create a taglist widget
+ s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons)
+
+ -- Create a tasklist widget
+ s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons)
+
+ -- Create the wibox
+ s.mywibox = awful.wibar({ position = "top", screen = s, height = 18, bg = theme.bg_normal, fg = theme.fg_normal })
+
+ -- Add widgets to the wibox
+ s.mywibox:setup {
+ layout = wibox.layout.align.horizontal,
+ { -- Left widgets
+ layout = wibox.layout.fixed.horizontal,
+ --spr,
+ s.mytaglist,
+ s.mypromptbox,
+ spr,
+ },
+ s.mytasklist, -- Middle widget
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ wibox.widget.systray(),
+ spr,
+ arrl_ld,
+ wibox.container.background(mpdicon, theme.bg_focus),
+ wibox.container.background(theme.mpd.widget, theme.bg_focus),
+ arrl_dl,
+ volicon,
+ theme.volume.widget,
+ arrl_ld,
+ wibox.container.background(mailicon, theme.bg_focus),
+ --wibox.container.background(mail.widget, theme.bg_focus),
+ arrl_dl,
+ memicon,
+ mem.widget,
+ arrl_ld,
+ wibox.container.background(cpuicon, theme.bg_focus),
+ wibox.container.background(cpu.widget, theme.bg_focus),
+ arrl_dl,
+ tempicon,
+ temp.widget,
+ arrl_ld,
+ wibox.container.background(fsicon, theme.bg_focus),
+ wibox.container.background(theme.fs.widget, theme.bg_focus),
+ arrl_dl,
+ baticon,
+ bat.widget,
+ arrl_ld,
+ wibox.container.background(neticon, theme.bg_focus),
+ wibox.container.background(net.widget, theme.bg_focus),
+ arrl_dl,
+ clock,
+ spr,
+ arrl_ld,
+ wibox.container.background(s.mylayoutbox, theme.bg_focus),
+ },
+ }
+end
+
+return theme
diff --git a/.config/awesome/themes/powerarrow-dark/wall.png b/.config/awesome/themes/powerarrow-dark/wall.png
new file mode 100644
index 0000000..9d1118b
Binary files /dev/null and b/.config/awesome/themes/powerarrow-dark/wall.png differ
diff --git a/.config/awesome/themes/powerarrow/binclock.lua b/.config/awesome/themes/powerarrow/binclock.lua
new file mode 100644
index 0000000..3263b84
--- /dev/null
+++ b/.config/awesome/themes/powerarrow/binclock.lua
@@ -0,0 +1,95 @@
+--[[
+
+ Licensed under GNU General Public License v2
+ * (c) 2017, Luke Bonham
+ * (c) 2013, romockee
+
+--]]
+
+local gears = require("gears")
+local wibox = require("wibox")
+local date = os.date
+local ipairs = ipairs
+local math = math
+local select = select
+local string = string
+
+local binclock = {}
+
+function binclock.dec2bin(num, bits)
+ local bits, t = bits or select(2, math.frexp(num)), {}
+ for b = bits, 1, -1 do
+ t[b] = math.fmod(num, 2)
+ num = (num - t[b]) / 2
+ end
+ return t
+end
+
+function binclock.paintdot(cr, val, shift)
+ local height = 0
+ for _, bit in ipairs(binclock.dec2bin(val, 4)) do
+ if bit >= 1 then
+ cr:set_source(gears.color(binclock.color_active))
+ else
+ cr:set_source(gears.color(binclock.color_inactive))
+ end
+ cr:rectangle(shift, height, binclock.dotsize, binclock.dotsize)
+ cr:fill()
+ height = height + binclock.dotsize + binclock.step
+ end
+end
+
+local function factory(args)
+ local args = args or {}
+
+ binclock.width = args.width or 42
+ binclock.height = args.height or 18
+ binclock.show_seconds = args.show_seconds or false
+ binclock.color_active = args.color_active or "#CCCCCC"
+ binclock.color_inactive = args.color_inactive or "#444444"
+ binclock.dotsize = math.floor(binclock.height / 5)
+ binclock.step = math.floor(binclock.dotsize / 3)
+
+ binclock.widget = wibox.widget {
+ fit = function(self, context, width, height)
+ return binclock.width, binclock.height
+ end,
+ draw = function(self, context, cr, width, height)
+ local t = date("*t")
+
+ local hour = string.format("%02d", t.hour)
+ local min = string.format("%02d", t.min)
+ local sec = string.format("%02d", t.sec)
+
+ local col_count = 4
+ if binclock.show_seconds then
+ col_count = 6
+ end
+ local step = math.floor((binclock.width - col_count * binclock.dotsize) / 8)
+
+ binclock.paintdot(cr, string.sub(hour, 1, 1), step, 2)
+ binclock.paintdot(cr, string.sub(hour, 2, 2), binclock.dotsize + 2 * step)
+
+ binclock.paintdot(cr, string.sub(min, 1, 1), binclock.dotsize * 2 + 4 * step)
+ binclock.paintdot(cr, string.sub(min, 2, 2), binclock.dotsize * 3 + 5 * step)
+
+ if binclock.show_seconds then
+ binclock.paintdot(cr, string.sub(sec, 1, 1), binclock.dotsize * 4 + 7 * step)
+ binclock.paintdot(cr, string.sub(sec, 2, 2), binclock.dotsize * 5 + 8 * step)
+ end
+ end,
+ layout = wibox.widget.base.make_widget
+ }
+
+ binclock.timer = gears.timer {
+ autostart = true,
+ timeout = binclock.show_seconds and 1 or 60,
+ callback = function()
+ binclock.widget:emit_signal("widget::redraw_needed")
+ end
+ }
+
+ return binclock
+end
+
+return factory
diff --git a/.config/awesome/themes/powerarrow/icons/ac.png b/.config/awesome/themes/powerarrow/icons/ac.png
new file mode 100644
index 0000000..453af4e
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/ac.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/awesome.png b/.config/awesome/themes/powerarrow/icons/awesome.png
new file mode 100644
index 0000000..4cabb6c
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/awesome.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/battery.png b/.config/awesome/themes/powerarrow/icons/battery.png
new file mode 100644
index 0000000..7dd78a5
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/battery.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/battery_empty.png b/.config/awesome/themes/powerarrow/icons/battery_empty.png
new file mode 100644
index 0000000..763aa93
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/battery_empty.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/battery_low.png b/.config/awesome/themes/powerarrow/icons/battery_low.png
new file mode 100644
index 0000000..626222f
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/battery_low.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/cpu.png b/.config/awesome/themes/powerarrow/icons/cpu.png
new file mode 100644
index 0000000..c28a787
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/cpu.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/floating.png b/.config/awesome/themes/powerarrow/icons/floating.png
new file mode 100644
index 0000000..079fea4
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/floating.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/fwd.png b/.config/awesome/themes/powerarrow/icons/fwd.png
new file mode 100644
index 0000000..e9b875e
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/fwd.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/hdd.png b/.config/awesome/themes/powerarrow/icons/hdd.png
new file mode 100644
index 0000000..8922eaa
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/hdd.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/mail.png b/.config/awesome/themes/powerarrow/icons/mail.png
new file mode 100644
index 0000000..be656ed
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/mail.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/mail_on.png b/.config/awesome/themes/powerarrow/icons/mail_on.png
new file mode 100644
index 0000000..ce8984f
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/mail_on.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/mem.png b/.config/awesome/themes/powerarrow/icons/mem.png
new file mode 100644
index 0000000..ee6d480
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/mem.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/net.png b/.config/awesome/themes/powerarrow/icons/net.png
new file mode 100644
index 0000000..769bfec
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/net.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/next.png b/.config/awesome/themes/powerarrow/icons/next.png
new file mode 100644
index 0000000..9a62593
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/next.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/note.png b/.config/awesome/themes/powerarrow/icons/note.png
new file mode 100644
index 0000000..19866aa
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/note.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/note_on.png b/.config/awesome/themes/powerarrow/icons/note_on.png
new file mode 100644
index 0000000..aae5ca3
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/note_on.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/pacman.png b/.config/awesome/themes/powerarrow/icons/pacman.png
new file mode 100644
index 0000000..575144a
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/pacman.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/pause.png b/.config/awesome/themes/powerarrow/icons/pause.png
new file mode 100644
index 0000000..d4546e6
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/pause.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/phones.png b/.config/awesome/themes/powerarrow/icons/phones.png
new file mode 100644
index 0000000..bec0e57
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/phones.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/play.png b/.config/awesome/themes/powerarrow/icons/play.png
new file mode 100644
index 0000000..b228f74
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/play.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/prev.png b/.config/awesome/themes/powerarrow/icons/prev.png
new file mode 100644
index 0000000..4c4ca40
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/prev.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/rwd.png b/.config/awesome/themes/powerarrow/icons/rwd.png
new file mode 100644
index 0000000..ac3d6f4
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/rwd.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/scissors.png b/.config/awesome/themes/powerarrow/icons/scissors.png
new file mode 100644
index 0000000..30f867d
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/scissors.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/stop.png b/.config/awesome/themes/powerarrow/icons/stop.png
new file mode 100644
index 0000000..207915b
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/stop.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/task.png b/.config/awesome/themes/powerarrow/icons/task.png
new file mode 100644
index 0000000..962b51a
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/task.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/temp.png b/.config/awesome/themes/powerarrow/icons/temp.png
new file mode 100644
index 0000000..7952de8
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/temp.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/tile.png b/.config/awesome/themes/powerarrow/icons/tile.png
new file mode 100644
index 0000000..01fd1b5
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/tile.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/tilebottom.png b/.config/awesome/themes/powerarrow/icons/tilebottom.png
new file mode 100644
index 0000000..bff1f42
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/tilebottom.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/tileleft.png b/.config/awesome/themes/powerarrow/icons/tileleft.png
new file mode 100644
index 0000000..205140a
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/tileleft.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/tiletop.png b/.config/awesome/themes/powerarrow/icons/tiletop.png
new file mode 100644
index 0000000..148cb9b
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/tiletop.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/close_focus.png b/.config/awesome/themes/powerarrow/icons/titlebar/close_focus.png
new file mode 100644
index 0000000..cccbadc
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/close_focus.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/close_normal.png b/.config/awesome/themes/powerarrow/icons/titlebar/close_normal.png
new file mode 100644
index 0000000..cb0c3fa
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/close_normal.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/floating_focus_active.png b/.config/awesome/themes/powerarrow/icons/titlebar/floating_focus_active.png
new file mode 100644
index 0000000..77ea127
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/floating_focus_active.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/floating_focus_inactive.png b/.config/awesome/themes/powerarrow/icons/titlebar/floating_focus_inactive.png
new file mode 100644
index 0000000..d254a73
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/floating_focus_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/floating_normal_active.png b/.config/awesome/themes/powerarrow/icons/titlebar/floating_normal_active.png
new file mode 100644
index 0000000..c5ce3de
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/floating_normal_active.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/floating_normal_inactive.png b/.config/awesome/themes/powerarrow/icons/titlebar/floating_normal_inactive.png
new file mode 100644
index 0000000..850b602
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/floating_normal_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/maximized_focus_active.png b/.config/awesome/themes/powerarrow/icons/titlebar/maximized_focus_active.png
new file mode 100644
index 0000000..9fc0483
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/maximized_focus_active.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/maximized_focus_inactive.png b/.config/awesome/themes/powerarrow/icons/titlebar/maximized_focus_inactive.png
new file mode 100644
index 0000000..f684470
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/maximized_focus_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/maximized_normal_active.png b/.config/awesome/themes/powerarrow/icons/titlebar/maximized_normal_active.png
new file mode 100644
index 0000000..4aa4196
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/maximized_normal_active.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/maximized_normal_inactive.png b/.config/awesome/themes/powerarrow/icons/titlebar/maximized_normal_inactive.png
new file mode 100644
index 0000000..bfe01a3
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/maximized_normal_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/ontop_focus_active.png b/.config/awesome/themes/powerarrow/icons/titlebar/ontop_focus_active.png
new file mode 100644
index 0000000..86e61b7
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/ontop_focus_active.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/ontop_focus_inactive.png b/.config/awesome/themes/powerarrow/icons/titlebar/ontop_focus_inactive.png
new file mode 100644
index 0000000..286d439
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/ontop_focus_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/ontop_normal_active.png b/.config/awesome/themes/powerarrow/icons/titlebar/ontop_normal_active.png
new file mode 100644
index 0000000..fcee772
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/ontop_normal_active.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/ontop_normal_inactive.png b/.config/awesome/themes/powerarrow/icons/titlebar/ontop_normal_inactive.png
new file mode 100644
index 0000000..a628626
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/ontop_normal_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/sticky_focus_active.png b/.config/awesome/themes/powerarrow/icons/titlebar/sticky_focus_active.png
new file mode 100644
index 0000000..5af45c1
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/sticky_focus_active.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/sticky_focus_inactive.png b/.config/awesome/themes/powerarrow/icons/titlebar/sticky_focus_inactive.png
new file mode 100644
index 0000000..22d7453
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/sticky_focus_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/sticky_normal_active.png b/.config/awesome/themes/powerarrow/icons/titlebar/sticky_normal_active.png
new file mode 100644
index 0000000..aad079e
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/sticky_normal_active.png differ
diff --git a/.config/awesome/themes/powerarrow/icons/titlebar/sticky_normal_inactive.png b/.config/awesome/themes/powerarrow/icons/titlebar/sticky_normal_inactive.png
new file mode 100644
index 0000000..5f3e655
Binary files /dev/null and b/.config/awesome/themes/powerarrow/icons/titlebar/sticky_normal_inactive.png differ
diff --git a/.config/awesome/themes/powerarrow/theme.lua b/.config/awesome/themes/powerarrow/theme.lua
new file mode 100644
index 0000000..972452d
--- /dev/null
+++ b/.config/awesome/themes/powerarrow/theme.lua
@@ -0,0 +1,383 @@
+--[[
+
+ Powerarrow Awesome WM theme
+ github.com/copycat-killer
+
+--]]
+
+local gears = require("gears")
+local lain = require("lain")
+local awful = require("awful")
+local wibox = require("wibox")
+local os, math, string = os, math, string
+
+local theme = {}
+theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/powerarrow"
+theme.wallpaper = theme.dir .. "/wall.png"
+theme.font = "xos4 Terminus 9"
+theme.fg_normal = "#FEFEFE"
+theme.fg_focus = "#32D6FF"
+theme.fg_urgent = "#C83F11"
+theme.bg_normal = "#222222"
+theme.bg_focus = "#1E2320"
+theme.bg_urgent = "#3F3F3F"
+theme.taglist_fg_focus = "#00CCFF"
+theme.tasklist_bg_focus = "#222222"
+theme.tasklist_fg_focus = "#00CCFF"
+theme.border_width = 1
+theme.border_normal = "#3F3F3F"
+theme.border_focus = "#6F6F6F"
+theme.border_marked = "#CC9393"
+theme.titlebar_bg_focus = "#3F3F3F"
+theme.titlebar_bg_normal = "#3F3F3F"
+theme.titlebar_bg_focus = theme.bg_focus
+theme.titlebar_bg_normal = theme.bg_normal
+theme.titlebar_fg_focus = theme.fg_focus
+theme.menu_height = 16
+theme.menu_width = 140
+theme.menu_submenu_icon = theme.dir .. "/icons/submenu.png"
+theme.awesome_icon = theme.dir .. "/icons/awesome.png"
+theme.taglist_squares_sel = theme.dir .. "/icons/square_sel.png"
+theme.taglist_squares_unsel = theme.dir .. "/icons/square_unsel.png"
+theme.layout_tile = theme.dir .. "/icons/tile.png"
+theme.layout_tileleft = theme.dir .. "/icons/tileleft.png"
+theme.layout_tilebottom = theme.dir .. "/icons/tilebottom.png"
+theme.layout_tiletop = theme.dir .. "/icons/tiletop.png"
+theme.layout_fairv = theme.dir .. "/icons/fairv.png"
+theme.layout_fairh = theme.dir .. "/icons/fairh.png"
+theme.layout_spiral = theme.dir .. "/icons/spiral.png"
+theme.layout_dwindle = theme.dir .. "/icons/dwindle.png"
+theme.layout_max = theme.dir .. "/icons/max.png"
+theme.layout_fullscreen = theme.dir .. "/icons/fullscreen.png"
+theme.layout_magnifier = theme.dir .. "/icons/magnifier.png"
+theme.layout_floating = theme.dir .. "/icons/floating.png"
+theme.widget_ac = theme.dir .. "/icons/ac.png"
+theme.widget_battery = theme.dir .. "/icons/battery.png"
+theme.widget_battery_low = theme.dir .. "/icons/battery_low.png"
+theme.widget_battery_empty = theme.dir .. "/icons/battery_empty.png"
+theme.widget_mem = theme.dir .. "/icons/mem.png"
+theme.widget_cpu = theme.dir .. "/icons/cpu.png"
+theme.widget_temp = theme.dir .. "/icons/temp.png"
+theme.widget_net = theme.dir .. "/icons/net.png"
+theme.widget_hdd = theme.dir .. "/icons/hdd.png"
+theme.widget_music = theme.dir .. "/icons/note.png"
+theme.widget_music_on = theme.dir .. "/icons/note_on.png"
+theme.widget_music_pause = theme.dir .. "/icons/pause.png"
+theme.widget_music_stop = theme.dir .. "/icons/stop.png"
+theme.widget_vol = theme.dir .. "/icons/vol.png"
+theme.widget_vol_low = theme.dir .. "/icons/vol_low.png"
+theme.widget_vol_no = theme.dir .. "/icons/vol_no.png"
+theme.widget_vol_mute = theme.dir .. "/icons/vol_mute.png"
+theme.widget_mail = theme.dir .. "/icons/mail.png"
+theme.widget_mail_on = theme.dir .. "/icons/mail_on.png"
+theme.widget_task = theme.dir .. "/icons/task.png"
+theme.widget_scissors = theme.dir .. "/icons/scissors.png"
+theme.tasklist_plain_task_name = true
+theme.tasklist_disable_icon = true
+theme.useless_gap = 0
+theme.titlebar_close_button_focus = theme.dir .. "/icons/titlebar/close_focus.png"
+theme.titlebar_close_button_normal = theme.dir .. "/icons/titlebar/close_normal.png"
+theme.titlebar_ontop_button_focus_active = theme.dir .. "/icons/titlebar/ontop_focus_active.png"
+theme.titlebar_ontop_button_normal_active = theme.dir .. "/icons/titlebar/ontop_normal_active.png"
+theme.titlebar_ontop_button_focus_inactive = theme.dir .. "/icons/titlebar/ontop_focus_inactive.png"
+theme.titlebar_ontop_button_normal_inactive = theme.dir .. "/icons/titlebar/ontop_normal_inactive.png"
+theme.titlebar_sticky_button_focus_active = theme.dir .. "/icons/titlebar/sticky_focus_active.png"
+theme.titlebar_sticky_button_normal_active = theme.dir .. "/icons/titlebar/sticky_normal_active.png"
+theme.titlebar_sticky_button_focus_inactive = theme.dir .. "/icons/titlebar/sticky_focus_inactive.png"
+theme.titlebar_sticky_button_normal_inactive = theme.dir .. "/icons/titlebar/sticky_normal_inactive.png"
+theme.titlebar_floating_button_focus_active = theme.dir .. "/icons/titlebar/floating_focus_active.png"
+theme.titlebar_floating_button_normal_active = theme.dir .. "/icons/titlebar/floating_normal_active.png"
+theme.titlebar_floating_button_focus_inactive = theme.dir .. "/icons/titlebar/floating_focus_inactive.png"
+theme.titlebar_floating_button_normal_inactive = theme.dir .. "/icons/titlebar/floating_normal_inactive.png"
+theme.titlebar_maximized_button_focus_active = theme.dir .. "/icons/titlebar/maximized_focus_active.png"
+theme.titlebar_maximized_button_normal_active = theme.dir .. "/icons/titlebar/maximized_normal_active.png"
+theme.titlebar_maximized_button_focus_inactive = theme.dir .. "/icons/titlebar/maximized_focus_inactive.png"
+theme.titlebar_maximized_button_normal_inactive = theme.dir .. "/icons/titlebar/maximized_normal_inactive.png"
+
+local markup = lain.util.markup
+local separators = lain.util.separators
+
+-- Binary clock
+local binclock = require("themes.powerarrow.binclock"){
+ height = 16,
+ show_seconds = true,
+ color_active = theme.fg_normal,
+ color_inactive = theme.bg_focus
+}
+
+-- Calendar
+theme.cal = lain.widget.calendar({
+ --cal = "cal --color=always",
+ attach_to = { binclock.widget },
+ notification_preset = {
+ font = "xos4 Terminus 10",
+ fg = theme.fg_normal,
+ bg = theme.bg_normal
+ }
+})
+
+-- Taskwarrior
+local task = wibox.widget.imagebox(theme.widget_task)
+lain.widget.contrib.task.attach(task, {
+ -- do not colorize output
+ show_cmd = "task | sed -r 's/\\x1B\\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g'"
+})
+task:buttons(awful.util.table.join(awful.button({}, 1, lain.widget.contrib.task.prompt)))
+
+-- Scissors (xsel copy and paste)
+local scissors = wibox.widget.imagebox(theme.widget_scissors)
+scissors:buttons(awful.util.table.join(awful.button({}, 1, function() awful.spawn("xsel | xsel -i -b") end)))
+
+-- Mail IMAP check
+local mailicon = wibox.widget.imagebox(theme.widget_mail)
+--[[ commented because it needs to be set before use
+mailicon:buttons(awful.util.table.join(awful.button({ }, 1, function () awful.spawn(mail) end)))
+local mail = lain.widget.imap({
+ timeout = 180,
+ server = "server",
+ mail = "mail",
+ password = "keyring get mail",
+ settings = function()
+ if mailcount > 0 then
+ widget:set_text(" " .. mailcount .. " ")
+ mailicon:set_image(theme.widget_mail_on)
+ else
+ widget:set_text("")
+ mailicon:set_image(theme.widget_mail)
+ end
+ end
+})
+--]]
+
+-- ALSA volume
+theme.volume = lain.widget.alsabar({
+ --togglechannel = "IEC958,3",
+ notification_preset = { font = "xos4 Terminus 10", fg = theme.fg_normal },
+})
+
+-- MPD
+local musicplr = awful.util.terminal .. " -title Music -g 130x34-320+16 -e ncmpcpp"
+local mpdicon = wibox.widget.imagebox(theme.widget_music)
+mpdicon:buttons(awful.util.table.join(
+ awful.button({ modkey }, 1, function () awful.spawn.with_shell(musicplr) end),
+ awful.button({ }, 1, function ()
+ awful.spawn.with_shell("mpc prev")
+ theme.mpd.update()
+ end),
+ awful.button({ }, 2, function ()
+ awful.spawn.with_shell("mpc toggle")
+ theme.mpd.update()
+ end),
+ awful.button({ }, 3, function ()
+ awful.spawn.with_shell("mpc next")
+ theme.mpd.update()
+ end)))
+theme.mpd = lain.widget.mpd({
+ settings = function()
+ if mpd_now.state == "play" then
+ artist = " " .. mpd_now.artist .. " "
+ title = mpd_now.title .. " "
+ mpdicon:set_image(theme.widget_music_on)
+ widget:set_markup(markup.font(theme.font, markup("#FF8466", artist) .. " " .. title))
+ elseif mpd_now.state == "pause" then
+ widget:set_markup(markup.font(theme.font, " mpd paused "))
+ mpdicon:set_image(theme.widget_music_pause)
+ else
+ widget:set_text("")
+ mpdicon:set_image(theme.widget_music)
+ end
+ end
+})
+
+-- MEM
+local memicon = wibox.widget.imagebox(theme.widget_mem)
+local mem = lain.widget.mem({
+ settings = function()
+ widget:set_markup(markup.font(theme.font, " " .. mem_now.used .. "MB "))
+ end
+})
+
+-- CPU
+local cpuicon = wibox.widget.imagebox(theme.widget_cpu)
+local cpu = lain.widget.cpu({
+ settings = function()
+ widget:set_markup(markup.font(theme.font, " " .. cpu_now.usage .. "% "))
+ end
+})
+
+--[[ Coretemp (lm_sensors, per core)
+local tempwidget = awful.widget.watch({awful.util.shell, '-c', 'sensors | grep Core'}, 30,
+function(widget, stdout)
+ local temps = ""
+ for line in stdout:gmatch("[^\r\n]+") do
+ temps = temps .. line:match("+(%d+).*°C") .. "° " -- in Celsius
+ end
+ widget:set_markup(markup.font(theme.font, " " .. temps))
+end)
+--]]
+-- Coretemp (lain, average)
+local temp = lain.widget.temp({
+ settings = function()
+ widget:set_markup(markup.font(theme.font, " " .. coretemp_now .. "°C "))
+ end
+})
+--]]
+local tempicon = wibox.widget.imagebox(theme.widget_temp)
+
+-- / fs
+local fsicon = wibox.widget.imagebox(theme.widget_hdd)
+theme.fs = lain.widget.fs({
+ options = "--exclude-type=tmpfs",
+ notification_preset = { fg = theme.fg_normal, bg = theme.bg_normal, font = "xos4 Terminus 10" },
+ settings = function()
+ widget:set_markup(markup.font(theme.font, " " .. fs_now.available_gb .. "GB "))
+ end
+})
+
+-- Battery
+local baticon = wibox.widget.imagebox(theme.widget_battery)
+local bat = lain.widget.bat({
+ settings = function()
+ if bat_now.status ~= "N/A" then
+ if bat_now.ac_status == 1 then
+ widget:set_markup(markup.font(theme.font, " AC "))
+ baticon:set_image(theme.widget_ac)
+ return
+ elseif not bat_now.perc and tonumber(bat_now.perc) <= 5 then
+ baticon:set_image(theme.widget_battery_empty)
+ elseif not bat_now.perc and tonumber(bat_now.perc) <= 15 then
+ baticon:set_image(theme.widget_battery_low)
+ else
+ baticon:set_image(theme.widget_battery)
+ end
+ widget:set_markup(markup.font(theme.font, " " .. bat_now.perc .. "% "))
+ else
+ widget:set_markup()
+ baticon:set_image(theme.widget_ac)
+ end
+ end
+})
+
+-- Net
+local neticon = wibox.widget.imagebox(theme.widget_net)
+local net = lain.widget.net({
+ settings = function()
+ widget:set_markup(markup.fontfg(theme.font, "#FEFEFE", " " .. net_now.received .. " ↓↑ " .. net_now.sent .. " "))
+ end
+})
+
+-- Separators
+local arrow = separators.arrow_left
+
+function theme.powerline_rl(cr, width, height)
+ local arrow_depth, offset = height/2, 0
+
+ -- Avoid going out of the (potential) clip area
+ if arrow_depth < 0 then
+ width = width + 2*arrow_depth
+ offset = -arrow_depth
+ end
+
+ cr:move_to(offset + arrow_depth , 0 )
+ cr:line_to(offset + width , 0 )
+ cr:line_to(offset + width - arrow_depth , height/2 )
+ cr:line_to(offset + width , height )
+ cr:line_to(offset + arrow_depth , height )
+ cr:line_to(offset , height/2 )
+
+ cr:close_path()
+end
+
+local function pl(widget, bgcolor, padding)
+ return wibox.container.background(wibox.container.margin(widget, 16, 16), bgcolor, theme.powerline_rl)
+end
+
+function theme.at_screen_connect(s)
+ -- Quake application
+ s.quake = lain.util.quake({ app = awful.util.terminal })
+
+ -- If wallpaper is a function, call it with the screen
+ local wallpaper = theme.wallpaper
+ if type(wallpaper) == "function" then
+ wallpaper = wallpaper(s)
+ end
+ gears.wallpaper.maximized(wallpaper, s, true)
+
+ -- Tags
+ awful.tag(awful.util.tagnames, s, awful.layout.layouts)
+
+ -- Create a promptbox for each screen
+ s.mypromptbox = awful.widget.prompt()
+ -- Create an imagebox widget which will contains an icon indicating which layout we're using.
+ -- We need one layoutbox per screen.
+ s.mylayoutbox = awful.widget.layoutbox(s)
+ s.mylayoutbox:buttons(awful.util.table.join(
+ awful.button({ }, 1, function () awful.layout.inc( 1) end),
+ awful.button({ }, 3, function () awful.layout.inc(-1) end),
+ awful.button({ }, 4, function () awful.layout.inc( 1) end),
+ awful.button({ }, 5, function () awful.layout.inc(-1) end)))
+ -- Create a taglist widget
+ s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons)
+
+ -- Create a tasklist widget
+ s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons)
+
+ -- Create the wibox
+ s.mywibox = awful.wibar({ position = "top", screen = s, height = 16, bg = theme.bg_normal, fg = theme.fg_normal })
+
+ -- Add widgets to the wibox
+ s.mywibox:setup {
+ layout = wibox.layout.align.horizontal,
+ { -- Left widgets
+ layout = wibox.layout.fixed.horizontal,
+ --spr,
+ s.mytaglist,
+ s.mypromptbox,
+ spr,
+ },
+ s.mytasklist, -- Middle widget
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ wibox.widget.systray(),
+ wibox.container.margin(scissors, 4, 8),
+ --[[ using shapes
+ pl(wibox.widget { mpdicon, theme.mpd.widget, layout = wibox.layout.align.horizontal }, "#343434"),
+ pl(task, "#343434"),
+ --pl(wibox.widget { mailicon, mail and mail.widget, layout = wibox.layout.align.horizontal }, "#343434"),
+ pl(wibox.widget { memicon, mem.widget, layout = wibox.layout.align.horizontal }, "#777E76"),
+ pl(wibox.widget { cpuicon, cpu.widget, layout = wibox.layout.align.horizontal }, "#4B696D"),
+ pl(wibox.widget { tempicon, temp.widget, layout = wibox.layout.align.horizontal }, "#4B3B51"),
+ pl(wibox.widget { fsicon, theme.fs.widget, layout = wibox.layout.align.horizontal }, "#CB755B"),
+ pl(wibox.widget { baticon, bat.widget, layout = wibox.layout.align.horizontal }, "#8DAA9A"),
+ pl(wibox.widget { neticon, net.widget, layout = wibox.layout.align.horizontal }, "#C0C0A2"),
+ pl(binclock.widget, "#777E76"),
+ --]]
+ -- using separators
+ arrow(theme.bg_normal, "#343434"),
+ wibox.container.background(wibox.container.margin(wibox.widget { mailicon, mail and mail.widget, layout = wibox.layout.align.horizontal }, 4, 7), "#343434"),
+ arrow("#343434", theme.bg_normal),
+ wibox.container.background(wibox.container.margin(wibox.widget { mpdicon, theme.mpd.widget, layout = wibox.layout.align.horizontal }, 3, 6), theme.bg_focus),
+ arrow(theme.bg_normal, "#343434"),
+ wibox.container.background(wibox.container.margin(task, 3, 7), "#343434"),
+ arrow("#343434", "#777E76"),
+ wibox.container.background(wibox.container.margin(wibox.widget { memicon, mem.widget, layout = wibox.layout.align.horizontal }, 2, 3), "#777E76"),
+ arrow("#777E76", "#4B696D"),
+ wibox.container.background(wibox.container.margin(wibox.widget { cpuicon, cpu.widget, layout = wibox.layout.align.horizontal }, 3, 4), "#4B696D"),
+ arrow("#4B696D", "#4B3B51"),
+ wibox.container.background(wibox.container.margin(wibox.widget { tempicon, temp.widget, layout = wibox.layout.align.horizontal }, 4, 4), "#4B3B51"),
+ arrow("#4B3B51", "#CB755B"),
+ wibox.container.background(wibox.container.margin(wibox.widget { fsicon, theme.fs.widget, layout = wibox.layout.align.horizontal }, 3, 3), "#CB755B"),
+ arrow("#CB755B", "#8DAA9A"),
+ wibox.container.background(wibox.container.margin(wibox.widget { baticon, bat.widget, layout = wibox.layout.align.horizontal }, 3, 3), "#8DAA9A"),
+ arrow("#8DAA9A", "#C0C0A2"),
+ wibox.container.background(wibox.container.margin(wibox.widget { nil, neticon, net.widget, layout = wibox.layout.align.horizontal }, 3, 3), "#C0C0A2"),
+ arrow("#C0C0A2", "#777E76"),
+ wibox.container.background(wibox.container.margin(binclock.widget, 4, 8), "#777E76"),
+ arrow("#777E76", "alpha"),
+ --]]
+ s.mylayoutbox,
+ },
+ }
+end
+
+return theme
diff --git a/.config/awesome/themes/powerarrow/wall.png b/.config/awesome/themes/powerarrow/wall.png
new file mode 100644
index 0000000..0989db9
Binary files /dev/null and b/.config/awesome/themes/powerarrow/wall.png differ
diff --git a/.config/awesome/themes/rainbow/icons/awesome.png b/.config/awesome/themes/rainbow/icons/awesome.png
new file mode 100644
index 0000000..d99fd37
Binary files /dev/null and b/.config/awesome/themes/rainbow/icons/awesome.png differ
diff --git a/.config/awesome/themes/rainbow/icons/square_sel.png b/.config/awesome/themes/rainbow/icons/square_sel.png
new file mode 100644
index 0000000..532719f
Binary files /dev/null and b/.config/awesome/themes/rainbow/icons/square_sel.png differ
diff --git a/.config/awesome/themes/rainbow/icons/square_unsel.png b/.config/awesome/themes/rainbow/icons/square_unsel.png
new file mode 100644
index 0000000..72dea5b
Binary files /dev/null and b/.config/awesome/themes/rainbow/icons/square_unsel.png differ
diff --git a/.config/awesome/themes/rainbow/icons/submenu.png b/.config/awesome/themes/rainbow/icons/submenu.png
new file mode 100644
index 0000000..26ab82a
Binary files /dev/null and b/.config/awesome/themes/rainbow/icons/submenu.png differ
diff --git a/.config/awesome/themes/rainbow/theme.lua b/.config/awesome/themes/rainbow/theme.lua
new file mode 100644
index 0000000..065ff00
--- /dev/null
+++ b/.config/awesome/themes/rainbow/theme.lua
@@ -0,0 +1,273 @@
+--[[
+
+ Rainbow Awesome WM theme 2.0
+ github.com/copycat-killer
+
+--]]
+
+local gears = require("gears")
+local lain = require("lain")
+local awful = require("awful")
+local wibox = require("wibox")
+local os = { getenv = os.getenv }
+
+local theme = {}
+theme.default_dir = require("awful.util").get_themes_dir() .. "default"
+theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/rainbow"
+theme.wallpaper = theme.dir .. "/wall.png"
+theme.font = "Misc Tamsyn 10.5"
+theme.fg_normal = "#9E9E9E"
+theme.fg_focus = "#EBEBFF"
+theme.bg_normal = "#242424"
+theme.bg_focus = "#242424"
+theme.fg_urgent = "#000000"
+theme.bg_urgent = "#FFFFFF"
+theme.border_width = 1
+theme.border_normal = "#242424"
+theme.border_focus = "#EBEBFF"
+theme.taglist_fg_focus = "#EDEFFF"
+theme.taglist_bg_focus = "#242424"
+theme.menu_height = 16
+theme.menu_width = 140
+theme.ocol = ""
+theme.tasklist_sticky = theme.ocol .. "[S]"
+theme.tasklist_ontop = theme.ocol .. "[T]"
+theme.tasklist_floating = theme.ocol .. "[F]"
+theme.tasklist_maximized_horizontal = theme.ocol .. "[M] "
+theme.tasklist_maximized_vertical = ""
+theme.tasklist_disable_icon = true
+theme.awesome_icon = theme.dir .."/icons/awesome.png"
+theme.menu_submenu_icon = theme.dir .."/icons/submenu.png"
+theme.taglist_squares_sel = theme.dir .. "/icons/square_sel.png"
+theme.taglist_squares_unsel = theme.dir .. "/icons/square_unsel.png"
+theme.useless_gap = 8
+theme.layout_txt_tile = "[t]"
+theme.layout_txt_tileleft = "[l]"
+theme.layout_txt_tilebottom = "[b]"
+theme.layout_txt_tiletop = "[tt]"
+theme.layout_txt_fairv = "[fv]"
+theme.layout_txt_fairh = "[fh]"
+theme.layout_txt_spiral = "[s]"
+theme.layout_txt_dwindle = "[d]"
+theme.layout_txt_max = "[m]"
+theme.layout_txt_fullscreen = "[F]"
+theme.layout_txt_magnifier = "[M]"
+theme.layout_txt_floating = "[*]"
+theme.titlebar_close_button_normal = theme.default_dir.."/titlebar/close_normal.png"
+theme.titlebar_close_button_focus = theme.default_dir.."/titlebar/close_focus.png"
+theme.titlebar_minimize_button_normal = theme.default_dir.."/titlebar/minimize_normal.png"
+theme.titlebar_minimize_button_focus = theme.default_dir.."/titlebar/minimize_focus.png"
+theme.titlebar_ontop_button_normal_inactive = theme.default_dir.."/titlebar/ontop_normal_inactive.png"
+theme.titlebar_ontop_button_focus_inactive = theme.default_dir.."/titlebar/ontop_focus_inactive.png"
+theme.titlebar_ontop_button_normal_active = theme.default_dir.."/titlebar/ontop_normal_active.png"
+theme.titlebar_ontop_button_focus_active = theme.default_dir.."/titlebar/ontop_focus_active.png"
+theme.titlebar_sticky_button_normal_inactive = theme.default_dir.."/titlebar/sticky_normal_inactive.png"
+theme.titlebar_sticky_button_focus_inactive = theme.default_dir.."/titlebar/sticky_focus_inactive.png"
+theme.titlebar_sticky_button_normal_active = theme.default_dir.."/titlebar/sticky_normal_active.png"
+theme.titlebar_sticky_button_focus_active = theme.default_dir.."/titlebar/sticky_focus_active.png"
+theme.titlebar_floating_button_normal_inactive = theme.default_dir.."/titlebar/floating_normal_inactive.png"
+theme.titlebar_floating_button_focus_inactive = theme.default_dir.."/titlebar/floating_focus_inactive.png"
+theme.titlebar_floating_button_normal_active = theme.default_dir.."/titlebar/floating_normal_active.png"
+theme.titlebar_floating_button_focus_active = theme.default_dir.."/titlebar/floating_focus_active.png"
+theme.titlebar_maximized_button_normal_inactive = theme.default_dir.."/titlebar/maximized_normal_inactive.png"
+theme.titlebar_maximized_button_focus_inactive = theme.default_dir.."/titlebar/maximized_focus_inactive.png"
+theme.titlebar_maximized_button_normal_active = theme.default_dir.."/titlebar/maximized_normal_active.png"
+theme.titlebar_maximized_button_focus_active = theme.default_dir.."/titlebar/maximized_focus_active.png"
+
+-- lain related
+theme.layout_txt_cascade = "[cascade]"
+theme.layout_txt_cascadetile = "[cascadetile]"
+theme.layout_txt_centerwork = "[centerwork]"
+theme.layout_txt_termfair = "[termfair]"
+theme.layout_txt_centerfair = "[centerfair]"
+
+local markup = lain.util.markup
+local white = theme.fg_focus
+local gray = theme.fg_normal
+
+-- Textclock
+local mytextclock = wibox.widget.textclock(markup(white, " %H:%M "))
+mytextclock.font = theme.font
+
+-- Calendar
+lain.widget.calendar({
+ attach_to = { mytextclock },
+ notification_preset = {
+ font = "Misc Tamsyn 11",
+ fg = white,
+ bg = theme.bg_normal
+ }
+})
+
+--[[ Mail IMAP check
+-- commented because it needs to be set before use
+local mail = lain.widget.imap({
+ timeout = 180,
+ server = "server",
+ mail = "mail",
+ password = "keyring get mail",
+ settings = function()
+ mail_notification_preset.fg = white
+
+ mail = ""
+ count = ""
+
+ if mailcount > 0 then
+ mail = "Mail "
+ count = mailcount .. " "
+ end
+
+ widget:set_markup(markup.font(theme.font, markup(gray, mail) .. markup(white, count)))
+ end
+})
+]]
+
+-- MPD
+theme.mpd = lain.widget.mpd({
+ settings = function()
+ mpd_notification_preset.fg = white
+
+ artist = mpd_now.artist .. " "
+ title = mpd_now.title .. " "
+
+ if mpd_now.state == "pause" then
+ artist = "mpd "
+ title = "paused "
+ elseif mpd_now.state == "stop" then
+ artist = ""
+ title = ""
+ end
+
+ widget:set_markup(markup.font(theme.font, markup(gray, artist) .. markup(white, title)))
+ end
+})
+
+-- /home fs
+theme.fs = lain.widget.fs({
+ partition = "/home",
+ options = "--exclude-type=tmpfs",
+ notification_preset = { fg = white, bg = theme.bg_normal, font = "Misc Tamsyn 10.5" },
+ settings = function()
+ hdd = ""
+ p = ""
+
+ if tonumber(fs_now.used) >= 90 then
+ hdd = " Hdd "
+ p = fs_now.used .. " "
+ end
+
+ widget:set_markup(markup.font(theme.font, markup(gray, hdd) .. markup(white, p)))
+ end
+})
+
+-- ALSA volume bar
+theme.volume = lain.widget.alsabar({
+ ticks = true, width = 67,
+ notification_preset = { font = theme.font }
+})
+theme.volume.tooltip.wibox.fg = theme.fg_focus
+theme.volume.tooltip.wibox.font = theme.font
+theme.volume.bar:buttons(awful.util.table.join (
+ awful.button({}, 1, function()
+ awful.spawn.with_shell(string.format("%s -e alsamixer", terminal))
+ end),
+ awful.button({}, 2, function()
+ awful.spawn(string.format("%s set %s 100%%", theme.volume.cmd, theme.volume.channel))
+ theme.volume.update()
+ end),
+ awful.button({}, 3, function()
+ awful.spawn(string.format("%s set %s toggle", theme.volume.cmd, theme.volume.togglechannel or theme.volume.channel))
+ theme.volume.update()
+ end),
+ awful.button({}, 4, function()
+ awful.spawn(string.format("%s set %s 1%%+", theme.volume.cmd, theme.volume.channel))
+ theme.volume.update()
+ end),
+ awful.button({}, 5, function()
+ awful.spawn(string.format("%s set %s 1%%-", theme.volume.cmd, theme.volume.channel))
+ theme.volume.update()
+ end)
+))
+local volumebg = wibox.container.background(theme.volume.bar, "#585858", gears.shape.rectangle)
+local volumewidget = wibox.container.margin(volumebg, 7, 7, 5, 5)
+
+-- Weather
+theme.weather = lain.widget.weather({
+ city_id = 2643743, -- placeholder (London)
+ notification_preset = { font = theme.font, fg = white }
+})
+
+-- Separators
+local first = wibox.widget.textbox(markup.font("Misc Tamsyn 4", " "))
+local spr = wibox.widget.textbox(' ')
+
+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.mytxtlayoutbox:set_text(txt_l)
+end
+
+function theme.at_screen_connect(s)
+ -- Quake application
+ s.quake = lain.util.quake({ app = awful.util.terminal })
+
+ -- If wallpaper is a function, call it with the screen
+ local wallpaper = theme.wallpaper
+ if type(wallpaper) == "function" then
+ wallpaper = wallpaper(s)
+ end
+ gears.wallpaper.maximized(wallpaper, s, true)
+
+ -- Tags
+ awful.tag(awful.util.tagnames, s, awful.layout.layouts)
+
+ -- Create a promptbox for each screen
+ s.mypromptbox = awful.widget.prompt()
+
+ -- Textual layoutbox
+ s.mytxtlayoutbox = wibox.widget.textbox(theme["layout_txt_" .. awful.layout.getname(awful.layout.get(s))])
+ 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.mytxtlayoutbox:buttons(awful.util.table.join(
+ awful.button({}, 1, function() awful.layout.inc(1) end),
+ awful.button({}, 3, function() awful.layout.inc(-1) end),
+ awful.button({}, 4, function() awful.layout.inc(1) end),
+ awful.button({}, 5, function() awful.layout.inc(-1) end)))
+
+ -- Create a taglist widget
+ s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons)
+
+ -- Create a tasklist widget
+ s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons)
+
+ -- Create the wibox
+ s.mywibox = awful.wibar({ position = "top", screen = s, height = 18, bg = theme.bg_normal, fg = theme.fg_normal })
+
+ -- Add widgets to the wibox
+ s.mywibox:setup {
+ layout = wibox.layout.align.horizontal,
+ { -- Left widgets
+ layout = wibox.layout.fixed.horizontal,
+ first,
+ s.mytaglist,
+ spr,
+ s.mytxtlayoutbox,
+ --spr,
+ s.mypromptbox,
+ spr,
+ },
+ s.mytasklist, -- Middle widget
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ wibox.widget.systray(),
+ spr,
+ theme.mpd.widget,
+ --mail.widget,
+ theme.fs.widget,
+ volumewidget,
+ mytextclock,
+ },
+ }
+end
+
+return theme
diff --git a/.config/awesome/themes/rainbow/wall.png b/.config/awesome/themes/rainbow/wall.png
new file mode 100644
index 0000000..6bed238
Binary files /dev/null and b/.config/awesome/themes/rainbow/wall.png differ
diff --git a/.config/awesome/themes/steamburn/icons/awesome.png b/.config/awesome/themes/steamburn/icons/awesome.png
new file mode 100644
index 0000000..0306bdf
Binary files /dev/null and b/.config/awesome/themes/steamburn/icons/awesome.png differ
diff --git a/.config/awesome/themes/steamburn/icons/square_sel.png b/.config/awesome/themes/steamburn/icons/square_sel.png
new file mode 100644
index 0000000..2bcabb8
Binary files /dev/null and b/.config/awesome/themes/steamburn/icons/square_sel.png differ
diff --git a/.config/awesome/themes/steamburn/icons/square_unsel.png b/.config/awesome/themes/steamburn/icons/square_unsel.png
new file mode 100644
index 0000000..14c4fe4
Binary files /dev/null and b/.config/awesome/themes/steamburn/icons/square_unsel.png differ
diff --git a/.config/awesome/themes/steamburn/icons/submenu.png b/.config/awesome/themes/steamburn/icons/submenu.png
new file mode 100644
index 0000000..12b97c6
Binary files /dev/null and b/.config/awesome/themes/steamburn/icons/submenu.png differ
diff --git a/.config/awesome/themes/steamburn/theme.lua b/.config/awesome/themes/steamburn/theme.lua
new file mode 100644
index 0000000..b078eb9
--- /dev/null
+++ b/.config/awesome/themes/steamburn/theme.lua
@@ -0,0 +1,270 @@
+--[[
+
+ Steamburn Awesome WM theme 3.0
+ github.com/copycat-killer
+
+--]]
+
+local gears = require("gears")
+local lain = require("lain")
+local awful = require("awful")
+local wibox = require("wibox")
+local os = { getenv = os.getenv }
+
+local theme = {}
+theme.zenburn_dir = require("awful.util").get_themes_dir() .. "zenburn"
+theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/steamburn"
+theme.wallpaper = theme.dir .. "/wall.png"
+theme.font = "Misc Tamsyn 10.5"
+theme.fg_normal = "#e2ccb0"
+theme.fg_focus = "#d88166"
+theme.fg_urgent = "#CC9393"
+theme.bg_normal = "#140c0b"
+theme.bg_focus = "#140c0b"
+theme.bg_urgent = "#2a1f1e"
+theme.border_width = 1
+theme.border_normal = "#302627"
+theme.border_focus = "#c2745b"
+theme.border_marked = "#CC9393"
+theme.taglist_fg_focus = "#d88166"
+theme.tasklist_bg_focus = "#140c0b"
+theme.tasklist_fg_focus = "#d88166"
+theme.taglist_squares_sel = theme.dir .. "/icons/square_sel.png"
+theme.taglist_squares_unsel = theme.dir .. "/icons/square_unsel.png"
+theme.menu_height = 16
+theme.menu_width = 140
+theme.awesome_icon = theme.dir .."/icons/awesome.png"
+theme.menu_submenu_icon = theme.dir .. "/icons/submenu.png"
+theme.layout_txt_tile = "[t]"
+theme.layout_txt_tileleft = "[l]"
+theme.layout_txt_tilebottom = "[b]"
+theme.layout_txt_tiletop = "[tt]"
+theme.layout_txt_fairv = "[fv]"
+theme.layout_txt_fairh = "[fh]"
+theme.layout_txt_spiral = "[s]"
+theme.layout_txt_dwindle = "[d]"
+theme.layout_txt_max = "[m]"
+theme.layout_txt_fullscreen = "[F]"
+theme.layout_txt_magnifier = "[M]"
+theme.layout_txt_floating = "[|]"
+theme.tasklist_plain_task_name = true
+theme.tasklist_disable_icon = true
+theme.useless_gap = 0
+theme.titlebar_close_button_normal = theme.zenburn_dir.."/titlebar/close_normal.png"
+theme.titlebar_close_button_focus = theme.zenburn_dir.."/titlebar/close_focus.png"
+theme.titlebar_minimize_button_normal = theme.zenburn_dir.."/titlebar/minimize_normal.png"
+theme.titlebar_minimize_button_focus = theme.zenburn_dir.."/titlebar/minimize_focus.png"
+theme.titlebar_ontop_button_normal_inactive = theme.zenburn_dir.."/titlebar/ontop_normal_inactive.png"
+theme.titlebar_ontop_button_focus_inactive = theme.zenburn_dir.."/titlebar/ontop_focus_inactive.png"
+theme.titlebar_ontop_button_normal_active = theme.zenburn_dir.."/titlebar/ontop_normal_active.png"
+theme.titlebar_ontop_button_focus_active = theme.zenburn_dir.."/titlebar/ontop_focus_active.png"
+theme.titlebar_sticky_button_normal_inactive = theme.zenburn_dir.."/titlebar/sticky_normal_inactive.png"
+theme.titlebar_sticky_button_focus_inactive = theme.zenburn_dir.."/titlebar/sticky_focus_inactive.png"
+theme.titlebar_sticky_button_normal_active = theme.zenburn_dir.."/titlebar/sticky_normal_active.png"
+theme.titlebar_sticky_button_focus_active = theme.zenburn_dir.."/titlebar/sticky_focus_active.png"
+theme.titlebar_floating_button_normal_inactive = theme.zenburn_dir.."/titlebar/floating_normal_inactive.png"
+theme.titlebar_floating_button_focus_inactive = theme.zenburn_dir.."/titlebar/floating_focus_inactive.png"
+theme.titlebar_floating_button_normal_active = theme.zenburn_dir.."/titlebar/floating_normal_active.png"
+theme.titlebar_floating_button_focus_active = theme.zenburn_dir.."/titlebar/floating_focus_active.png"
+theme.titlebar_maximized_button_normal_inactive = theme.zenburn_dir.."/titlebar/maximized_normal_inactive.png"
+theme.titlebar_maximized_button_focus_inactive = theme.zenburn_dir.."/titlebar/maximized_focus_inactive.png"
+theme.titlebar_maximized_button_normal_active = theme.zenburn_dir.."/titlebar/maximized_normal_active.png"
+theme.titlebar_maximized_button_focus_active = theme.zenburn_dir.."/titlebar/maximized_focus_active.png"
+
+-- lain related
+theme.layout_txt_termfair = "[termfair]"
+theme.layout_txt_centerfair = "[centerfair]"
+
+local markup = lain.util.markup
+local gray = "#94928F"
+
+-- Textclock
+local mytextclock = wibox.widget.textclock(" %H:%M ")
+mytextclock.font = theme.font
+
+-- Calendar
+lain.widget.calendar({
+ attach_to = { mytextclock },
+ notification_preset = {
+ font = "Misc Tamsyn 11",
+ fg = theme.fg_normal,
+ bg = theme.bg_normal
+ }
+})
+
+--[[ Mail IMAP check
+-- commented because it needs to be set before use
+local mail = lain.widget.imap({
+ timeout = 180,
+ server = "server",
+ mail = "mail",
+ password = "keyring get mail",
+ settings = function()
+ mail = ""
+ count = ""
+
+ if mailcount > 0 then
+ mail = "Mail "
+ count = mailcount .. " "
+ end
+
+ widget:set_markup(markup(gray, mail) .. count)
+ end
+})
+--]]
+
+-- MPD
+theme.mpd = lain.widget.mpd({
+ settings = function()
+ artist = mpd_now.artist .. " "
+ title = mpd_now.title .. " "
+
+ if mpd_now.state == "pause" then
+ artist = "mpd "
+ title = "paused "
+ elseif mpd_now.state == "stop" then
+ artist = ""
+ title = ""
+ end
+
+ widget:set_markup(markup.font(theme.font, markup(gray, artist) .. title))
+ end
+})
+
+-- CPU
+local cpu = lain.widget.sysload({
+ settings = function()
+ widget:set_markup(markup.font(theme.font, markup(gray, " Cpu ") .. load_1 .. " "))
+ end
+})
+
+-- MEM
+local mem = lain.widget.mem({
+ settings = function()
+ widget:set_markup(markup.font(theme.font, markup(gray, " Mem ") .. mem_now.used .. " "))
+ end
+})
+
+-- /home fs
+theme.fs = lain.widget.fs({
+ options = "--exclude-type=tmpfs",
+ partition = "/home",
+ notification_preset = { fg = theme.fg_normal, bg = theme.bg_normal, font = "Misc Tamsyn 10.5" },
+})
+
+-- Battery
+local bat = lain.widget.bat({
+ settings = function()
+ local perc = bat_now.perc
+ if bat_now.ac_status == 1 then perc = "Plug" end
+ widget:set_markup(markup.font(theme.font, markup(gray, " Bat ") .. perc .. " "))
+ end
+})
+
+-- Net checker
+local net = lain.widget.net({
+ settings = function()
+ if net_now.state == "up" then net_state = "On"
+ else net_state = "Off" end
+ widget:set_markup(markup.font(theme.font, markup(gray, " Net ") .. net_state .. " "))
+ end
+})
+
+-- ALSA volume
+theme.volume = lain.widget.alsa({
+ settings = function()
+ header = " Vol "
+ vlevel = volume_now.level
+
+ if volume_now.status == "off" then
+ vlevel = vlevel .. "M "
+ else
+ vlevel = vlevel .. " "
+ end
+
+ widget:set_markup(markup.font(theme.font, markup(gray, header) .. vlevel))
+ end
+})
+
+-- Weather
+theme.weather = lain.widget.weather({
+ city_id = 2643743, -- placeholder (London)
+})
+
+-- Separators
+local first = wibox.widget.textbox(markup.font("Misc Tamsyn 4", " "))
+local spr = wibox.widget.textbox(' ')
+
+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.mytxtlayoutbox:set_text(txt_l)
+end
+
+function theme.at_screen_connect(s)
+ -- Quake application
+ s.quake = lain.util.quake({ app = awful.util.terminal })
+
+ -- If wallpaper is a function, call it with the screen
+ local wallpaper = theme.wallpaper
+ if type(wallpaper) == "function" then
+ wallpaper = wallpaper(s)
+ end
+ gears.wallpaper.maximized(wallpaper, s, true)
+
+ -- Tags
+ awful.tag(awful.util.tagnames, s, awful.layout.layouts)
+
+ -- Create a promptbox for each screen
+ s.mypromptbox = awful.widget.prompt()
+
+ -- Textual layoutbox
+ s.mytxtlayoutbox = wibox.widget.textbox(theme["layout_txt_" .. awful.layout.getname(awful.layout.get(s))])
+ 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.mytxtlayoutbox:buttons(awful.util.table.join(
+ awful.button({}, 1, function() awful.layout.inc(1) end),
+ awful.button({}, 3, function() awful.layout.inc(-1) end),
+ awful.button({}, 4, function() awful.layout.inc(1) end),
+ awful.button({}, 5, function() awful.layout.inc(-1) end)))
+
+ -- Create a taglist widget
+ s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons)
+
+ -- Create a tasklist widget
+ s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons)
+
+ -- Create the wibox
+ s.mywibox = awful.wibar({ position = "top", screen = s, height = 18 })
+
+ -- Add widgets to the wibox
+ s.mywibox:setup {
+ layout = wibox.layout.align.horizontal,
+ { -- Left widgets
+ layout = wibox.layout.fixed.horizontal,
+ first,
+ s.mytaglist,
+ spr,
+ s.mytxtlayoutbox,
+ --spr,
+ s.mypromptbox,
+ spr,
+ },
+ s.mytasklist, -- Middle widget
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ wibox.widget.systray(),
+ spr,
+ theme.mpd.widget,
+ --mail.widget,
+ cpu.widget,
+ mem.widget,
+ bat.widget,
+ net.widget,
+ theme.volume.widget,
+ mytextclock
+ },
+ }
+end
+
+return theme
diff --git a/.config/awesome/themes/steamburn/wall.png b/.config/awesome/themes/steamburn/wall.png
new file mode 100644
index 0000000..57359d1
Binary files /dev/null and b/.config/awesome/themes/steamburn/wall.png differ
diff --git a/.config/awesome/themes/vertex/icons/awesome.png b/.config/awesome/themes/vertex/icons/awesome.png
new file mode 100644
index 0000000..b700a1a
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/awesome.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-000-charging.png b/.config/awesome/themes/vertex/icons/bat-000-charging.png
new file mode 100644
index 0000000..cc2abdd
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-000-charging.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-000.png b/.config/awesome/themes/vertex/icons/bat-000.png
new file mode 100644
index 0000000..550d8f0
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-000.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-020-charging.png b/.config/awesome/themes/vertex/icons/bat-020-charging.png
new file mode 100644
index 0000000..bd5e788
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-020-charging.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-020.png b/.config/awesome/themes/vertex/icons/bat-020.png
new file mode 100644
index 0000000..c8525eb
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-020.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-040-charging.png b/.config/awesome/themes/vertex/icons/bat-040-charging.png
new file mode 100644
index 0000000..5d20c11
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-040-charging.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-040.png b/.config/awesome/themes/vertex/icons/bat-040.png
new file mode 100644
index 0000000..ad378bf
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-040.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-060-charging.png b/.config/awesome/themes/vertex/icons/bat-060-charging.png
new file mode 100644
index 0000000..ea7c293
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-060-charging.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-060.png b/.config/awesome/themes/vertex/icons/bat-060.png
new file mode 100644
index 0000000..5883885
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-060.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-080-charging.png b/.config/awesome/themes/vertex/icons/bat-080-charging.png
new file mode 100644
index 0000000..b633044
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-080-charging.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-080.png b/.config/awesome/themes/vertex/icons/bat-080.png
new file mode 100644
index 0000000..d3fb971
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-080.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-100-charging.png b/.config/awesome/themes/vertex/icons/bat-100-charging.png
new file mode 100644
index 0000000..f2d7419
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-100-charging.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-100.png b/.config/awesome/themes/vertex/icons/bat-100.png
new file mode 100644
index 0000000..5852e69
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-100.png differ
diff --git a/.config/awesome/themes/vertex/icons/bat-charged.png b/.config/awesome/themes/vertex/icons/bat-charged.png
new file mode 100644
index 0000000..bb6b657
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/bat-charged.png differ
diff --git a/.config/awesome/themes/vertex/icons/ethernet-connected.png b/.config/awesome/themes/vertex/icons/ethernet-connected.png
new file mode 100644
index 0000000..6894931
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/ethernet-connected.png differ
diff --git a/.config/awesome/themes/vertex/icons/ethernet-disconnected.png b/.config/awesome/themes/vertex/icons/ethernet-disconnected.png
new file mode 100644
index 0000000..cfd73bb
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/ethernet-disconnected.png differ
diff --git a/.config/awesome/themes/vertex/icons/panel.png b/.config/awesome/themes/vertex/icons/panel.png
new file mode 100644
index 0000000..2f429e5
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/panel.png differ
diff --git a/.config/awesome/themes/vertex/icons/square_sel.png b/.config/awesome/themes/vertex/icons/square_sel.png
new file mode 100644
index 0000000..b94c0c5
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/square_sel.png differ
diff --git a/.config/awesome/themes/vertex/icons/square_unsel.png b/.config/awesome/themes/vertex/icons/square_unsel.png
new file mode 100644
index 0000000..af19a20
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/square_unsel.png differ
diff --git a/.config/awesome/themes/vertex/icons/volume-high.png b/.config/awesome/themes/vertex/icons/volume-high.png
new file mode 100644
index 0000000..8fc8279
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/volume-high.png differ
diff --git a/.config/awesome/themes/vertex/icons/volume-low.png b/.config/awesome/themes/vertex/icons/volume-low.png
new file mode 100644
index 0000000..7a0682f
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/volume-low.png differ
diff --git a/.config/awesome/themes/vertex/icons/volume-medium.png b/.config/awesome/themes/vertex/icons/volume-medium.png
new file mode 100644
index 0000000..2b5c888
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/volume-medium.png differ
diff --git a/.config/awesome/themes/vertex/icons/volume-muted-blocked.png b/.config/awesome/themes/vertex/icons/volume-muted-blocked.png
new file mode 100644
index 0000000..6dea15b
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/volume-muted-blocked.png differ
diff --git a/.config/awesome/themes/vertex/icons/volume-muted.png b/.config/awesome/themes/vertex/icons/volume-muted.png
new file mode 100644
index 0000000..7d08ac9
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/volume-muted.png differ
diff --git a/.config/awesome/themes/vertex/icons/volume-off.png b/.config/awesome/themes/vertex/icons/volume-off.png
new file mode 100644
index 0000000..8a6d8c5
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/volume-off.png differ
diff --git a/.config/awesome/themes/vertex/icons/wireless-disconnected.png b/.config/awesome/themes/vertex/icons/wireless-disconnected.png
new file mode 100644
index 0000000..f98d8b4
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/wireless-disconnected.png differ
diff --git a/.config/awesome/themes/vertex/icons/wireless-full.png b/.config/awesome/themes/vertex/icons/wireless-full.png
new file mode 100644
index 0000000..3f83dec
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/wireless-full.png differ
diff --git a/.config/awesome/themes/vertex/icons/wireless-high.png b/.config/awesome/themes/vertex/icons/wireless-high.png
new file mode 100644
index 0000000..b3622ec
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/wireless-high.png differ
diff --git a/.config/awesome/themes/vertex/icons/wireless-low.png b/.config/awesome/themes/vertex/icons/wireless-low.png
new file mode 100644
index 0000000..3f1e740
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/wireless-low.png differ
diff --git a/.config/awesome/themes/vertex/icons/wireless-medium.png b/.config/awesome/themes/vertex/icons/wireless-medium.png
new file mode 100644
index 0000000..6bd0ec5
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/wireless-medium.png differ
diff --git a/.config/awesome/themes/vertex/icons/wireless-none.png b/.config/awesome/themes/vertex/icons/wireless-none.png
new file mode 100644
index 0000000..e47b478
Binary files /dev/null and b/.config/awesome/themes/vertex/icons/wireless-none.png differ
diff --git a/.config/awesome/themes/vertex/theme.lua b/.config/awesome/themes/vertex/theme.lua
new file mode 100644
index 0000000..93cf599
--- /dev/null
+++ b/.config/awesome/themes/vertex/theme.lua
@@ -0,0 +1,463 @@
+--[[
+
+ Vertex Awesome WM theme
+ github.com/copycat-killer
+
+--]]
+
+local gears = require("gears")
+local lain = require("lain")
+local awful = require("awful")
+local wibox = require("wibox")
+
+local math, string, tag, tonumber, type, os = math, string, tag, tonumber, type, os
+
+local theme = {}
+theme.default_dir = require("awful.util").get_themes_dir() .. "default"
+theme.icon_dir = os.getenv("HOME") .. "/.config/awesome/themes/vertex/icons"
+theme.wallpaper = os.getenv("HOME") .. "/.config/awesome/themes/vertex/wall.png"
+theme.font = "Roboto Bold 10"
+theme.taglist_font = "FontAwesome 17"
+theme.fg_normal = "#FFFFFF"
+theme.fg_focus = "#6A95EB"
+theme.bg_focus = "#303030"
+theme.bg_normal = "#242424"
+theme.fg_urgent = "#CC9393"
+theme.bg_urgent = "#006B8E"
+theme.border_width = 4
+theme.border_normal = "#252525"
+theme.border_focus = "#7CA2EE"
+theme.tooltip_border_color = theme.fg_focus
+theme.tooltip_border_width = theme.border_width
+theme.menu_height = 24
+theme.menu_width = 140
+theme.awesome_icon = theme.icon_dir .. "/awesome.png"
+theme.taglist_squares_sel = theme.icon_dir .. "/square_sel.png"
+theme.taglist_squares_unsel = theme.icon_dir .. "/square_unsel.png"
+theme.panelbg = theme.icon_dir .. "/panel.png"
+theme.bat000charging = theme.icon_dir .. "/bat-000-charging.png"
+theme.bat000 = theme.icon_dir .. "/bat-000.png"
+theme.bat020charging = theme.icon_dir .. "/bat-020-charging.png"
+theme.bat020 = theme.icon_dir .. "/bat-020.png"
+theme.bat040charging = theme.icon_dir .. "/bat-040-charging.png"
+theme.bat040 = theme.icon_dir .. "/bat-040.png"
+theme.bat060charging = theme.icon_dir .. "/bat-060-charging.png"
+theme.bat060 = theme.icon_dir .. "/bat-060.png"
+theme.bat080charging = theme.icon_dir .. "/bat-080-charging.png"
+theme.bat080 = theme.icon_dir .. "/bat-080.png"
+theme.bat100charging = theme.icon_dir .. "/bat-100-charging.png"
+theme.bat100 = theme.icon_dir .. "/bat-100.png"
+theme.batcharged = theme.icon_dir .. "/bat-charged.png"
+theme.ethon = theme.icon_dir .. "/ethernet-connected.png"
+theme.ethoff = theme.icon_dir .. "/ethernet-disconnected.png"
+theme.volhigh = theme.icon_dir .. "/volume-high.png"
+theme.vollow = theme.icon_dir .. "/volume-low.png"
+theme.volmed = theme.icon_dir .. "/volume-medium.png"
+theme.volmutedblocked = theme.icon_dir .. "/volume-muted-blocked.png"
+theme.volmuted = theme.icon_dir .. "/volume-muted.png"
+theme.voloff = theme.icon_dir .. "/volume-off.png"
+theme.wifidisc = theme.icon_dir .. "/wireless-disconnected.png"
+theme.wififull = theme.icon_dir .. "/wireless-full.png"
+theme.wifihigh = theme.icon_dir .. "/wireless-high.png"
+theme.wifilow = theme.icon_dir .. "/wireless-low.png"
+theme.wifimed = theme.icon_dir .. "/wireless-medium.png"
+theme.wifinone = theme.icon_dir .. "/wireless-none.png"
+theme.layout_fairh = theme.default_dir.."/layouts/fairhw.png"
+theme.layout_fairv = theme.default_dir.."/layouts/fairvw.png"
+theme.layout_floating = theme.default_dir.."/layouts/floatingw.png"
+theme.layout_magnifier = theme.default_dir.."/layouts/magnifierw.png"
+theme.layout_max = theme.default_dir.."/layouts/maxw.png"
+theme.layout_fullscreen = theme.default_dir.."/layouts/fullscreenw.png"
+theme.layout_tilebottom = theme.default_dir.."/layouts/tilebottomw.png"
+theme.layout_tileleft = theme.default_dir.."/layouts/tileleftw.png"
+theme.layout_tile = theme.default_dir.."/layouts/tilew.png"
+theme.layout_tiletop = theme.default_dir.."/layouts/tiletopw.png"
+theme.layout_spiral = theme.default_dir.."/layouts/spiralw.png"
+theme.layout_dwindle = theme.default_dir.."/layouts/dwindlew.png"
+theme.layout_cornernw = theme.default_dir.."/layouts/cornernww.png"
+theme.layout_cornerne = theme.default_dir.."/layouts/cornernew.png"
+theme.layout_cornersw = theme.default_dir.."/layouts/cornersww.png"
+theme.layout_cornerse = theme.default_dir.."/layouts/cornersew.png"
+theme.tasklist_plain_task_name = true
+theme.tasklist_disable_icon = true
+theme.useless_gap = 10
+theme.titlebar_close_button_normal = theme.default_dir.."/titlebar/close_normal.png"
+theme.titlebar_close_button_focus = theme.default_dir.."/titlebar/close_focus.png"
+theme.titlebar_minimize_button_normal = theme.default_dir.."/titlebar/minimize_normal.png"
+theme.titlebar_minimize_button_focus = theme.default_dir.."/titlebar/minimize_focus.png"
+theme.titlebar_ontop_button_normal_inactive = theme.default_dir.."/titlebar/ontop_normal_inactive.png"
+theme.titlebar_ontop_button_focus_inactive = theme.default_dir.."/titlebar/ontop_focus_inactive.png"
+theme.titlebar_ontop_button_normal_active = theme.default_dir.."/titlebar/ontop_normal_active.png"
+theme.titlebar_ontop_button_focus_active = theme.default_dir.."/titlebar/ontop_focus_active.png"
+theme.titlebar_sticky_button_normal_inactive = theme.default_dir.."/titlebar/sticky_normal_inactive.png"
+theme.titlebar_sticky_button_focus_inactive = theme.default_dir.."/titlebar/sticky_focus_inactive.png"
+theme.titlebar_sticky_button_normal_active = theme.default_dir.."/titlebar/sticky_normal_active.png"
+theme.titlebar_sticky_button_focus_active = theme.default_dir.."/titlebar/sticky_focus_active.png"
+theme.titlebar_floating_button_normal_inactive = theme.default_dir.."/titlebar/floating_normal_inactive.png"
+theme.titlebar_floating_button_focus_inactive = theme.default_dir.."/titlebar/floating_focus_inactive.png"
+theme.titlebar_floating_button_normal_active = theme.default_dir.."/titlebar/floating_normal_active.png"
+theme.titlebar_floating_button_focus_active = theme.default_dir.."/titlebar/floating_focus_active.png"
+theme.titlebar_maximized_button_normal_inactive = theme.default_dir.."/titlebar/maximized_normal_inactive.png"
+theme.titlebar_maximized_button_focus_inactive = theme.default_dir.."/titlebar/maximized_focus_inactive.png"
+theme.titlebar_maximized_button_normal_active = theme.default_dir.."/titlebar/maximized_normal_active.png"
+theme.titlebar_maximized_button_focus_active = theme.default_dir.."/titlebar/maximized_focus_active.png"
+
+-- http://fontawesome.io/cheatsheet
+awful.util.tagnames = { " ", " ", " ", " ", " ", " ", " ", " ", " " }
+
+local markup = lain.util.markup
+
+-- Clock
+--os.setlocale(os.getenv("LANG")) -- to localize the clock
+local mytextclock = wibox.widget.textclock(markup("#FFFFFF", "%a %d %b, %H:%M"))
+mytextclock.font = theme.font
+lain.widget.calendar({
+ attach_to = { mytextclock },
+ notification_preset = {
+ fg = "#FFFFFF",
+ bg = theme.bg_normal,
+ position = "top_middle",
+ font = "Monospace 10"
+ }
+})
+
+-- Battery
+local baticon = wibox.widget.imagebox(theme.bat000)
+local battooltip = awful.tooltip({
+ objects = { baticon },
+ margin_leftright = 15,
+ margin_topbottom = 12
+})
+battooltip.wibox.fg = theme.fg_normal
+battooltip.textbox.font = theme.font
+battooltip.timeout = 0
+battooltip:set_shape(function(cr, width, height)
+ gears.shape.infobubble(cr, width, height, corner_radius, arrow_size, width - 35)
+end)
+local bat = lain.widget.bat({
+ settings = function()
+ local index, perc = "bat", tonumber(bat_now.perc) or 0
+
+ if perc <= 7 then
+ index = index .. "000"
+ elseif perc <= 20 then
+ index = index .. "020"
+ elseif perc <= 40 then
+ index = index .. "040"
+ elseif perc <= 60 then
+ index = index .. "060"
+ elseif perc <= 80 then
+ index = index .. "080"
+ elseif perc <= 100 then
+ index = index .. "100"
+ end
+
+ if bat_now.ac_status == 1 then
+ index = index .. "charging"
+ end
+
+ baticon:set_image(theme[index])
+ battooltip:set_markup(string.format("\n%s%%, %s", perc, bat_now.time))
+ end
+})
+
+-- MPD
+theme.mpd = lain.widget.mpd({
+ music_dir = "/mnt/storage/Downloads/Music",
+ settings = function()
+ if mpd_now.state == "play" then
+ title = mpd_now.title
+ artist = " " .. mpd_now.artist .. " "
+ elseif mpd_now.state == "pause" then
+ title = "mpd "
+ artist = "paused "
+ else
+ title = ""
+ artist = ""
+ end
+
+ widget:set_markup(markup.font(theme.font, title .. markup(theme.fg_focus, artist)))
+ end
+})
+
+-- ALSA volume
+local volicon = wibox.widget.imagebox()
+theme.volume = lain.widget.alsabar({
+ --togglechannel = "IEC958,3",
+ notification_preset = { font = "Monospace 12", fg = theme.fg_normal },
+ settings = function()
+ local index, perc = "", tonumber(volume_now.level) or 0
+
+ if volume_now.status == "off" then
+ index = "volmutedblocked"
+ else
+ if perc <= 5 then
+ index = "volmuted"
+ elseif perc <= 25 then
+ index = "vollow"
+ elseif perc <= 75 then
+ index = "volmed"
+ else
+ index = "volhigh"
+ end
+ end
+
+ volicon:set_image(theme[index])
+ end
+})
+volicon:buttons(awful.util.table.join (
+ awful.button({}, 1, function()
+ awful.spawn.with_shell(string.format("%s -e alsamixer", awful.util.terminal))
+ end),
+ awful.button({}, 2, function()
+ awful.spawn(string.format("%s set %s 100%%", theme.volume.cmd, theme.volume.channel))
+ theme.volume.notify()
+ end),
+ awful.button({}, 3, function()
+ awful.spawn(string.format("%s set %s toggle", theme.volume.cmd, theme.volume.togglechannel or theme.volume.channel))
+ theme.volume.notify()
+ end),
+ awful.button({}, 4, function()
+ awful.spawn(string.format("%s set %s 1%%+", theme.volume.cmd, theme.volume.channel))
+ theme.volume.notify()
+ end),
+ awful.button({}, 5, function()
+ awful.spawn(string.format("%s set %s 1%%-", theme.volume.cmd, theme.volume.channel))
+ theme.volume.notify()
+ end)
+))
+
+-- Wifi carrier and signal strength
+local wificon = wibox.widget.imagebox()
+local wifitooltip = awful.tooltip({
+ objects = { wificon },
+ margin_leftright = 15,
+ margin_topbottom = 15
+})
+wifitooltip.wibox.fg = theme.fg_normal
+wifitooltip.textbox.font = theme.font
+wifitooltip.timeout = 0
+wifitooltip:set_shape(function(cr, width, height)
+ gears.shape.infobubble(cr, width, height, corner_radius, arrow_size, width - 120)
+end)
+local mywifisig = awful.widget.watch(
+ { awful.util.shell, "-c", "awk 'NR==3 {printf(\"%d-%.0f\\n\",$2, $3*10/7)}' /proc/net/wireless; iw dev wlan0 link" },
+ 2,
+ function(widget, stdout)
+ local carrier, perc = stdout:match("(%d)-(%d+)")
+ local tiptext = stdout:gsub("(%d)-(%d+)", ""):gsub("%s+$", "")
+
+ if carrier == "1" then
+ wificon:set_image(theme.wifidisc)
+ wifitooltip:set_markup("No carrier")
+ else
+ perc = tonumber(perc)
+ if perc <= 5 then
+ wificon:set_image(theme.wifinone)
+ elseif perc <= 25 then
+ wificon:set_image(theme.wifilow)
+ elseif perc <= 50 then
+ wificon:set_image(theme.wifimed)
+ elseif perc <= 75 then
+ wificon:set_image(theme.wifihigh)
+ else
+ wificon:set_image(theme.wififull)
+ end
+ wifitooltip:set_markup(tiptext)
+ end
+ end
+)
+wificon:connect_signal("button::press", function() awful.spawn(string.format("%s -e wavemon", awful.util.terminal)) end)
+
+-- Weather
+theme.weather = lain.widget.weather({
+ city_id = 2643743, -- placeholder (London)
+ notification_preset = { font = "Monospace 10" },
+ settings = function()
+ units = math.floor(weather_now["main"]["temp"])
+ widget:set_markup(" " .. markup.font(theme.font, units .. "°C") .. " ")
+ end
+})
+
+-- Launcher
+local mylauncher = awful.widget.button({image = theme.awesome_icon})
+mylauncher:connect_signal("button::press", function() awful.util.mymainmenu:toggle() end)
+
+-- Separators
+local space = wibox.widget.textbox(" ")
+local rspace1 = wibox.widget.textbox()
+local rspace0 = wibox.widget.textbox()
+local rspace2 = wibox.widget.textbox()
+local rspace3 = wibox.widget.textbox()
+local tspace1 = wibox.widget.textbox()
+tspace1.forced_width = 18
+rspace1.forced_width = 16
+rspace0.forced_width = 18
+rspace2.forced_width = 19
+rspace3.forced_width = 21
+
+local lspace1 = wibox.widget.textbox()
+local lspace2 = wibox.widget.textbox()
+local lspace3 = wibox.widget.textbox()
+lspace1.forced_height = 18
+lspace2.forced_height = 10
+lspace3.forced_height = 16
+
+local barcolor = gears.color({
+ type = "linear",
+ from = { 0, 46 },
+ to = { 46, 46 },
+ stops = { {0, theme.bg_focus}, {0.9, "#457be7"} }
+})
+
+local barcolor2 = gears.color({
+ type = "linear",
+ from = { 0, 46 },
+ to = { 46, 46 },
+ stops = { {0, "#323232"}, {1, theme.bg_normal} }
+})
+
+local dockshape = function(cr, width, height)
+ gears.shape.partially_rounded_rect(cr, width, height, false, true, true, false, 6)
+end
+
+function theme.vertical_wibox(s)
+ -- Create the vertical wibox
+ s.dockheight = (40 * s.workarea.height)/100
+
+ s.myleftwibox = wibox({ screen = s, x=0, y=s.workarea.height/2 - s.dockheight/2, width = 6, height = s.dockheight, fg = theme.fg_normal, bg = barcolor2, ontop = true, visible = true, type = "dock" })
+
+ if s.index > 1 and s.myleftwibox.y == 0 then
+ s.myleftwibox.y = screen[1].myleftwibox.y
+ end
+
+ -- Add widgets to the vertical wibox
+ s.myleftwibox:setup {
+ layout = wibox.layout.align.vertical,
+ {
+ layout = wibox.layout.fixed.vertical,
+ lspace1,
+ s.mytaglist,
+ lspace2,
+ s.layoutb,
+ wibox.container.margin(mylauncher, 5, 8, 13, 0),
+ },
+ }
+
+ -- Add toggling functionalities
+ s.docktimer = gears.timer{ timeout = 2 }
+ s.docktimer:connect_signal("timeout", function()
+ local s = awful.screen.focused()
+ s.myleftwibox.width = 6
+ s.layoutb.visible = false
+ mylauncher.visible = false
+ if s.docktimer.started then
+ s.docktimer:stop()
+ end
+ end)
+ tag.connect_signal("property::selected", function(t)
+ local s = t.screen or awful.screen.focused()
+ s.myleftwibox.width = 46
+ s.layoutb.visible = true
+ mylauncher.visible = true
+ gears.surface.apply_shape_bounding(s.myleftwibox, dockshape)
+ if not s.docktimer.started then
+ s.docktimer:start()
+ end
+ end)
+
+ s.myleftwibox:connect_signal("mouse::leave", function()
+ local s = awful.screen.focused()
+ s.myleftwibox.width = 6
+ s.layoutb.visible = false
+ mylauncher.visible = false
+ end)
+
+ s.myleftwibox:connect_signal("mouse::enter", function()
+ local s = awful.screen.focused()
+ s.myleftwibox.width = 46
+ s.layoutb.visible = true
+ mylauncher.visible = true
+ gears.surface.apply_shape_bounding(s.myleftwibox, dockshape)
+ end)
+end
+
+
+function theme.at_screen_connect(s)
+ -- Quake application
+ s.quake = lain.util.quake({ app = awful.util.terminal, border = theme.border_width })
+
+ -- If wallpaper is a function, call it with the screen
+ local wallpaper = theme.wallpaper
+ if type(wallpaper) == "function" then
+ wallpaper = wallpaper(s)
+ end
+ gears.wallpaper.maximized(wallpaper, s, true)
+
+ -- Tags
+ awful.tag(awful.util.tagnames, s, awful.layout.layouts)
+
+ -- Create a promptbox for each screen
+ s.mypromptbox = awful.widget.prompt()
+ s.mypromptbox.bg = "#00000000"
+
+ -- Create an imagebox widget which will contains an icon indicating which layout we're using.
+ -- We need one layoutbox per screen.
+ s.mylayoutbox = awful.widget.layoutbox(s)
+ s.mylayoutbox:buttons(awful.util.table.join(
+ awful.button({ }, 1, function () awful.layout.inc( 1) end),
+ awful.button({ }, 3, function () awful.layout.inc(-1) end),
+ awful.button({ }, 4, function () awful.layout.inc( 1) end),
+ awful.button({ }, 5, function () awful.layout.inc(-1) end)))
+ s.layoutb = wibox.container.margin(s.mylayoutbox, 8, 11, 3, 3)
+
+ -- Create a taglist widget
+ s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons, {
+ font = theme.taglist_font,
+ shape = gears.shape.rectangle,
+ spacing = 10,
+ square_unsel = theme.square_unsel,
+ bg_focus = barcolor
+ }, nil, wibox.layout.fixed.vertical())
+
+ -- Create a tasklist widget
+ s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.focused, awful.util.tasklist_buttons, { bg_focus = "#00000000" })
+
+ -- Create the wibox
+ s.mywibox = awful.wibar({ position = "top", screen = s, height = 25, bg = gears.color.create_png_pattern(theme.panelbg) })
+
+ -- Add widgets to the wibox
+ s.mywibox:setup {
+ layout = wibox.layout.align.horizontal,
+ { -- Left widgets
+ layout = wibox.layout.fixed.horizontal,
+ s.mypromptbox,
+ tspace1,
+ wibox.container.constraint(s.mytasklist, "exact", s.workarea.width/2.6),
+ },
+ { -- Middle widgets
+ layout = wibox.layout.flex.horizontal,
+ space,
+ mytextclock,
+ },
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ wibox.container.constraint(wibox.widget { nil, nil, theme.mpd.widget, layout = wibox.layout.align.horizontal }, "exact", s.workarea.width/3),
+ rspace0,
+ theme.weather.icon,
+ theme.weather.widget,
+ rspace1,
+ wificon,
+ rspace0,
+ volicon,
+ rspace2,
+ baticon,
+ rspace3,
+ wibox.widget.systray(),
+ },
+ }
+
+ gears.timer.delayed_call(theme.vertical_wibox, s)
+end
+
+return theme
diff --git a/.config/awesome/themes/vertex/wall.png b/.config/awesome/themes/vertex/wall.png
new file mode 100644
index 0000000..863b1bf
Binary files /dev/null and b/.config/awesome/themes/vertex/wall.png differ
diff --git a/.config/awesome/widgets/gpmdp.lua b/.config/awesome/widgets/gpmdp.lua
new file mode 100644
index 0000000..bbbca70
--- /dev/null
+++ b/.config/awesome/widgets/gpmdp.lua
@@ -0,0 +1,104 @@
+
+--[[
+
+ Licensed under GNU General Public License v2
+ * (c) 2017, Greg Flynn
+
+--]]
+local awful = require("awful")
+local naughty = require("naughty")
+local io, next, os, string, table = io, next, os, string, table
+
+-- Google Play Music Desktop Player widget
+-- requires: curl and dkjson or lain
+
+local gpmdp = {
+ notify = "on",
+ followtag = false,
+ file_location = os.getenv("HOME") .. "/.config/Google Play Music Desktop Player/json_store/playback.json",
+ notification_preset = {
+ title = "Now playing",
+-- icon_size = dpi(128),
+ timeout = 6
+ },
+ notification = nil,
+ current_track = nil,
+ album_cover = "/tmp/gpmcover"
+}
+
+function gpmdp.notification_on()
+ local gpm_now = gpmdp.latest
+ gpmdp.current_track = gpm_now.title
+
+ if gpmdp.followtag then gpmdp.notification_preset.screen = awful.screen.focused() end
+ awful.spawn.easy_async({"curl", gpm_now.cover_url, "-o", gpmdp.album_cover}, function(stdout)
+ local old_id = nil
+ if gpmdp.notification then old_id = gpmdp.notification.id end
+
+ gpmdp.notification = naughty.notify({
+ preset = gpmdp.notification_preset,
+ icon = gpmdp.album_cover,
+ replaces_id = old_id
+ })
+ end)
+end
+
+function gpmdp.notification_off()
+ if not gpmdp.notification then return end
+ naughty.destroy(gpmdp.notification)
+ gpmdp.notification = nil
+end
+
+function gpmdp.get_lines(file)
+ local f = io.open(file)
+ if not f then
+ return
+ else
+ f:close()
+ end
+
+ local lines = {}
+ for line in io.lines(file) do
+ lines[#lines + 1] = line
+ end
+ return lines
+end
+
+gpmdp.widget = awful.widget.watch({"pidof", "Google Play Music Desktop Player"}, 2, function(widget, stdout)
+ local filelines = gpmdp.get_lines(gpmdp.file_location)
+ if not filelines then return end -- GPMDP not running?
+
+ gpm_now = { running = stdout ~= '' }
+
+ if not next(filelines) then
+ gpm_now.running = false
+ gpm_now.playing = false
+ else
+ --dict, pos, err = require("dkjson").decode(table.concat(filelines), 1, nil) -- dkjson
+ dict, pos, err = require("lain.util").dkjson.decode(table.concat(filelines), 1, nil) -- lain
+ gpm_now.artist = dict.song.artist
+ gpm_now.album = dict.song.album
+ gpm_now.title = dict.song.title
+ gpm_now.cover_url = dict.song.albumArt
+ gpm_now.playing = dict.playing
+ end
+ gpmdp.latest = gpm_now
+
+ -- customize here
+ gpmdp_notification_preset.text = string.format("%s (%s) - %s", gpm_now.artist, gpm_now.album, gpm_now.title)
+ widget:set_text(gpm_now.artist .. " - " .. gpm_now.title)
+
+ if gpm_now.playing then
+ if gpmdp.notify == "on" and gpm_now.title ~= gpmdp.current_track then
+ gpmdp.notification_on()
+ end
+ elseif not gpm_now.running then
+ gpmdp.current_track = nil
+ end
+end)
+
+-- add mouse hover
+gpmdp.widget:connect_signal("mouse::enter", gpmdp.notification_on)
+gpmdp.widget:connect_signal("mouse::leave", gpmdp.notification_off)
+
+return gpmdp
diff --git a/.config/berry/autostart b/.config/berry/autostart
new file mode 100755
index 0000000..5d3c6d7
--- /dev/null
+++ b/.config/berry/autostart
@@ -0,0 +1,79 @@
+#!/usr/bin/env bash
+
+# Set wallpaper
+nitrogen --restore &
+
+# Start sxhkd
+sxhkd -c ~/.config/sxhkd/sxhkdrc &
+
+# tint2 panel
+tint2 &
+
+# Set the color of the outer border of the focused window
+berryc focus_color 3071db
+
+# Set the color of the outer border for all unfocused windows
+berryc unfocus_color 5699af
+
+# Set the color of the inner border and the titlebar of the focused window
+berryc inner_focus_color c678dd
+
+# Set the color of the inner border and the titlebar of the unfocused window
+berryc inner_unfocus_color a9a1e1
+
+# Set the color of the title bar text for the focused window
+berryc text_focus_color ffffff
+
+# Set the color of the title bar text for all unfocused windows
+berryc text_unfocus_color d7d7d7
+
+# Set the name of the font to use (e.g. set_font dina-9)
+berryc set_font Ubuntu Bold 12
+
+# Set the border width, in pixels, of the outer border
+berryc border_width 2
+
+# Set the border width, in pixels, of the inneer border
+berryc inner_border_width 2
+
+# Set the height of the title bar, does not include border widths
+berryc title_height 20
+
+# Set the offset at the top of the monitor (usually for system bars)
+berryc top_gap 30
+
+# Set the edge gap around the monitor (must include all parameters)
+berryc edge_gap 8 8 8 8
+
+# Determine whether or not text should be draw in title bars
+berryc draw_text true
+
+# Determine whether or not newly placed windows should be placed in the largest available space.
+berryc smart_place true
+
+# Associate the ith monitor to the jth workspace
+berryc save_monitor 0 0
+berryc save_monitor 1 1
+berryc save_monitor 2 2
+berryc save_monitor 0 3
+berryc save_monitor 1 4
+berryc save_monitor 2 5
+berryc save_monitor 0 6
+berryc save_monitor 1 7
+berryc save_monitor 2 8
+
+# Determine whether or not BERRY_WINDOW_STATUS returns JSON formatted text.
+berryc json_status true
+
+# Set berry to manage clients of the above type. Clients which are managed will be given decorations and are movable by the window manager. This is not retroactive for current clients. Only Toolbars and Splahes are not handled by default.
+berryc manage Dialog|Menu|Utility
+
+# Set berry to not manage clients of the above type.
+berryc unmanage Toolbar|Splash
+
+# Determine whether or not new windows are decorated by default
+berryc decorate_new true
+
+# The minimum interval between two motion events generated by the pointer. Should help resolve issues related to resize lag on high refresh rate monitors. Default value of 0.
+berryc pointer_interval 0
+
diff --git a/.config/bspwm/README.md b/.config/bspwm/README.md
new file mode 100755
index 0000000..7f6b0a7
--- /dev/null
+++ b/.config/bspwm/README.md
@@ -0,0 +1,72 @@
+# My BSPWM Configuration
+
+
+
+*bspwm* is a tiling window manager that represents windows as the leaves of a full binary tree.
+
+It only responds to X events, and the messages it receives on a dedicated socket.
+
+*bspc* is a program that writes messages on *bspwm*'s socket.
+
+*bspwm* doesn't handle any keyboard or pointer inputs: a third party program (e.g. *sxhkd*) is needed in order to translate keyboard and pointer events to *bspc* invocations.
+
+The outlined architecture is the following:
+
+```
+ PROCESS SOCKET
+sxhkd --------> bspc <------> bspwm
+```
+
+## Configuration
+
+The default configuration file is `$XDG_CONFIG_HOME/bspwm/bspwmrc`: this is simply a shell script that calls *bspc*.
+
+Keyboard and pointer bindings are defined with [sxhkd](https://github.com/baskerville/sxhkd).
+
+Example configuration files can be found in the [examples](examples) directory.
+
+## Monitors, desktops and windows
+
+*bspwm* holds a list of monitors.
+
+A monitor is just a rectangle that contains desktops.
+
+A desktop is just a pointer to a tree.
+
+Monitors only show the tree of one desktop at a time (their focused desktop).
+
+The tree is a partition of a monitor's rectangle into smaller rectangular regions.
+
+Each node in a tree either has zero or two children.
+
+Each internal node is responsible for splitting a rectangle in half.
+
+A split is defined by two parameters: the type (horizontal or vertical) and the ratio (a real number *r* such that *0 < r < 1*).
+
+Each leaf node holds exactly one window.
+
+# My Keybindings (defined by sxhkd)
+
+The keybindings for bspwm are controlled by another program called sxhkd. You will find my sxhkdrc here: https://gitlab.com/dwt1/dotfiles/blob/master/.config/sxhkd/sxhkdrc
+
+The MODKEY is set to the Super key (aka the Windows key).
+
+| Keybinding | Action |
+| :--- | :--- |
+| `ALT + CRTL + Enter` | opens run launcher (dmenu is the run launcher but can be easily changed) |
+| `MODKEY + Enter` | opens terminal (st is the terminal but can be easily changed) |
+| `MODKEY + SHIFT + c` | closes window with focus |
+| `MODKEY + Esc` | reloads the bspwm conifguration file |
+| `MODKEY + SHIFT + r` | restarts bspwm |
+| `MODKEY + SHIFT + q` | quits bspwm |
+| `MODKEY + j` | switches focus between windows in the stack, going down |
+| `MODKEY + k` | switches focus between windows in the stack, going up |
+| `MODKEY + SHIFT + j` | rotates the windows in the stack, going down|
+| `MODKEY + SHIFT + k` | rotates the windows in the stack, going up |
+| `MODKEY + t` | set window state to tiled |
+| `MODKEY + s` | set window state to pseudo-tiled |
+| `MODKEY + f` | set window state to floating |
+| `MODKEY + 1-9` | switch focus to workspace (1-9) |
+| `MODKEY + SHIFT + 1-9` | sends focused window to workspace (1-9) |
+
+
diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc
new file mode 100755
index 0000000..005a365
--- /dev/null
+++ b/.config/bspwm/bspwmrc
@@ -0,0 +1,81 @@
+#!/usr/bin/env bash
+# ____ _____
+# | _ \_ _| Derek Taylor (DistroTube)
+# | | | || | http://www.youtube.com/c/DistroTube
+# | |_| || | http://www.gitlab.com/dwt1/
+# |____/ |_|
+#
+# A customized bspwmrc for the bspwm window manager.
+# https://github.com/baskerville/sxhkd
+# https://github.com/baskerville/bspwm
+
+#### VARIABLES ####
+COLORSCHEME="DoomOne"
+
+#### AUTOSTART ####
+sxhkd &
+picom &
+killall nm-applet && nm-applet &
+killall volumeicon && volumeicon &
+/usr/bin/emacs --daemon &
+killall conky
+sleep 3 && conky -c "$HOME"/.config/conky/bspwm/"$COLORSCHEME"-01.conkyrc
+polybar-bspwm &
+
+### Select only ONE of the following four ways to set the wallpaper.
+xargs xwallpaper --stretch < ~/.cache/wall &
+# ~/.fehbg &
+# feh --randomize --bg-fill /usr/share/backgrounds/dtos-backgrounds/* &
+# nitrogen --restore &
+
+#### MONITORS ####
+for monitor in $(bspc query -M)
+do
+ # set the workspaces on each monitor to 1-9
+ bspc monitor $monitor -d 1 2 3 4 5 6 7 8 9
+ #polybar hidden when fullscreen for vlc, youtube, mpv ...
+ xdo below -t $(xdo id -n root) $(xdo id -a polybar-main_$monitor)
+done
+
+#polybar hidden when fullscreen for vlc, youtube, mpv ...
+#find out the name of your monitor with xrandr
+# xdo below -t $(xdo id -n root) $(xdo id -a polybar-main_DisplayPort-0)
+# xdo below -t $(xdo id -n root) $(xdo id -a polybar-main_DisplayPort-1)
+# xdo below -t $(xdo id -n root) $(xdo id -a polybar-main_HDMI-A-0)
+
+#### BSPWM configuration ####
+#bspc config border_radius 8
+bspc config border_width 2
+bspc config window_gap 10
+bspc config top_padding 20
+bspc config bottom_padding 0
+bspc config left_padding 0
+bspc config right_padding 0
+bspc config single_monocle false
+bspc config click_to_focus true
+bspc config split_ratio 0.50
+bspc config borderless_monocle true
+bspc config gapless_monocle true
+bspc config focus_by_distance true
+bspc config focus_follows_pointer true
+bspc config history_aware_focus true
+bspc config remove_disabled_monitors true
+bspc config merge_overlapping_monitors true
+bspc config pointer_modifier mod4
+bspc config pointer_action1 move
+bspc config pointer_action2 resize_side
+bspc config pointer_action3 resize_corner
+
+#### BSPWM coloring ####
+bspc config normal_border_color "#4c566a"
+bspc config active_border_color "#1e1e1e"
+bspc config focused_border_color "#5e81ac"
+bspc config presel_feedback_color "#5e81ac"
+bspc config urgent_border_color "#dd2727"
+
+
+bspc rule -a Gimp desktop='^8' state=floating follow=on
+bspc rule -a Chromium desktop='^2'
+bspc rule -a mplayer2 state=floating
+bspc rule -a Kupfer.py focus=on
+bspc rule -a Screenkey manage=off
diff --git a/.config/castero/castero.conf b/.config/castero/castero.conf
new file mode 100644
index 0000000..40f0750
--- /dev/null
+++ b/.config/castero/castero.conf
@@ -0,0 +1,288 @@
+# castero configuration file
+# https://github.com/xgi/castero
+
+
+[client]
+# Whether to ask for confirmation before deleting a feed.
+# default: False
+delete_feed_confirmation = False
+
+# The minimum number of feeds before the client asks you for confirmation
+# after pressing the reload key.
+# default: 10
+reload_feeds_threshold = 10
+
+# The maximum number of episodes to retain per feed. Set to -1 for no limit.
+# default: -1
+max_episodes = -1
+
+# Whether to keep episodes in the client even if they are no longer present on
+# the feed (i.e. the RSS feed only shows the x most recent episodes).
+# default: False
+retain_absent_episodes = False
+
+# Hide vertical borders between menus.
+# default: False
+disable_vertical_borders = False
+
+# Whether to remove HTML tags from feed/episode descriptions.
+# default: True
+clean_html_descriptions = True
+
+# The display refresh delay, in ms. Increase to reduce idle CPU usage.
+# default: 30
+refresh_delay = 30
+
+# The external player to use for media playback.
+# If the given player is not valid or a dependency is not met, the client will
+# instead try to use the first valid interface.
+# Available players (in order of precedence):
+# mpv, vlc
+# default: (blank)
+player =
+
+# The command to run when you press key_execute (default e). All instances of
+# the following tokens are replaced with the corresponding episode attributes:
+# {file} - the episode enclosure, usually a remote mp3 file
+# {title} - the episode name
+# {description} - the episode description
+# {link} - the link to the episode, which is often a blog post
+# {pubdate} - the publish date/time of the episode
+# {copyright} - the copyright of the episode
+# Most of these attributes have spaces, so you will probably want to enclose
+# the token with quotations.
+# For example, `firefox "{file}"` would open the file in Firefox.
+# The client executes the text you enter as a shell command. Use with caution!
+# default: (blank)
+execute_command =
+
+# An HTTP or SOCKS proxy to use for HTTP network requests.
+# example: http://user:pass@10.10.1.10:3128
+# example: socks5://user:pass@host:port
+# default: (blank)
+proxy_http =
+
+# An HTTP or SOCKS proxy to use for HTTPS network requests.
+# example: http://user:pass@10.10.1.10:3128
+# example: socks5://user:pass@host:port
+# default: (blank)
+proxy_https =
+
+
+[feeds]
+# Whether to reload/refresh your feeds when the client starts. Depending on how
+# many feeds you have, this operation may take a long time.
+# default: False
+reload_on_start = False
+
+
+[downloads]
+# The (absolute) location to save episodes downloaded for offline playback. Set
+# to blank or whitespaces to disable -- the client will default to either
+# $XDG_DATA_DIR, if set, otherwise ~/.local/share/castero/downloaded
+# default: (blank)
+custom_download_dir =
+
+# The timeout for network requests, in seconds. The same value is used for
+# connection and read timeouts.
+# default: 3
+request_timeout = 3
+
+
+[colors]
+# Available colors for all fields are:
+# black, blue, cyan, green, magenta, red, white, yellow, transparent (background),
+# integer from -1 to 255 if terminal supports 256 colors
+# NOTE: Background transparency only works on compatible terminals with compositing
+
+# The foreground (text) color of the main interface.
+# default: yellow
+color_foreground = yellow
+
+# The background color of the main interface.
+# default: black
+color_background = black
+
+# The foreground (text) color of selected items.
+# default: black
+color_foreground_alt = white
+
+# The background color of selected items.
+# default: white
+color_background_alt = black
+
+# The foreground (text) color of marked items. Paired with color_background.
+# default: green
+color_foreground_dim = green
+
+# The foreground (text) color of status lines. Paired with color_background.
+# default: white
+color_foreground_status = white
+
+# The foreground (text) color of menu headings. Paired with color_background.
+# default: yellow
+color_foreground_heading = yellow
+
+# The foreground (text) color of dividers. Paired with color_background.
+# default: white
+color_foreground_dividers = white
+
+
+[playback]
+# The distance to move forward when pressing seek keys, in seconds.
+# default: 30
+seek_distance_forward = 30
+
+# The distance to move backward when pressing seek keys, in seconds.
+# default: 10
+seek_distance_backward = 10
+
+# The default playback speed. See also the rate_increase/rate_decrease keys.
+# default: 1.0
+default_playback_speed = 1.0
+
+# The default volume. Can be 0-100, inclusive.
+# default: 100
+default_volume = 100
+
+# The amount to adjust the volume when pressing the volume up/down keys.
+# default: 5
+volume_adjust_distance = 5
+
+
+[keys]
+# Keybindings for controlling the client. Entries may not be blank, but may
+# overlap -- however, only one operation will be performed for each key press.
+# Please see this page for a list of available key names:
+# https://docs.python.org/3/library/curses.html#constants
+
+# Show the help menu.
+# default: h
+key_help = h
+
+# Exit the client
+# default: q
+key_exit = q
+
+# Add a feed.
+# default: a
+key_add_feed = a
+
+# Remove the selected feed.
+# default: d
+key_remove = d
+
+# Reload/refresh all feeds.
+# default: r
+key_reload = r
+
+# Reload/refresh the selected feed.
+# default: R
+key_reload_selected = R
+
+# Save episode for offline playback.
+# default: s
+key_save = s
+
+# Delete downloaded episodes.
+# default: x
+key_delete = x
+
+# Navigate up.
+# default: UP
+key_up = UP
+
+# Navigate right.
+# default: RIGHT
+key_right = RIGHT
+
+# Navigate down.
+# default: DOWN
+key_down = DOWN
+
+# Navigate left.
+# default: LEFT
+key_left = LEFT
+
+# Scroll menu up.
+# default: PPAGE
+key_scroll_up = PPAGE
+
+# Scroll menu down.
+# default: NPAGE
+key_scroll_down = NPAGE
+
+# Play selected feed/episode.
+# default: ENTER
+key_play_selected = ENTER
+
+# Add selected feed/episode to queue.
+# default: SPACE
+key_add_selected = SPACE
+
+# Clear the queue.
+# default: c
+key_clear = c
+
+# Go to the next episode in the queue.
+# default: n
+key_next = n
+
+# Execute a command on the selected episode. See also execute_command.
+key_execute = e
+
+# Invert the order of the menu.
+# default: i
+key_invert = i
+
+# Filter the contents of the menu. Press again to clear the filter.
+# default: /
+key_filter = /
+
+# Mark the episode as played/unplayed.
+# default: i
+key_mark_played = m
+
+# Pause/play the current episode.
+# default: p
+key_pause_play = p
+
+# Alternate binding for key_pause_play -- make identical to disable.
+# default: k
+key_pause_play_alt = k
+
+# Seek forward.
+# default: f
+key_seek_forward = f
+
+# Alternate binding for key_seek_forward -- make identical to disable.
+# default: l
+key_seek_forward_alt = l
+
+# Seek backward.
+# default: b
+key_seek_backward = b
+
+# Alternate binding for key_seek_backward -- make identical to disable.
+# default: j
+key_seek_backward_alt = j
+
+# Increase playback speed.
+# default: ]
+key_rate_increase = ]
+
+# Decrease playback speed.
+# default: [
+key_rate_decrease = [
+
+# Increase volume.
+# default: =
+key_volume_increase = =
+
+# Decrease volume.
+# default: -
+key_volume_decrease = -
+
+# Show episode URL.
+# default: u
+key_show_url = u
diff --git a/.config/doom/init.el b/.config/doom/init.el
index 393683c..1afc6cd 100644
--- a/.config/doom/init.el
+++ b/.config/doom/init.el
@@ -185,7 +185,7 @@
:app
;;calendar
- ;;emms
+ emms
;;everywhere ; *leave* Emacs!? You must be joking
;;irc ; how neckbeards socialize
(rss +org) ; emacs as an RSS reader
diff --git a/.config/eww/bar/eww.scss b/.config/eww/bar/eww.scss
new file mode 100644
index 0000000..256f8e3
--- /dev/null
+++ b/.config/eww/bar/eww.scss
@@ -0,0 +1,447 @@
+/** EWW.SCSS
+Created by saimoom **/
+*{
+ all: unset;
+ font-family: Ubuntu;
+ font-family: Ubuntu Mono;
+}
+
+/** General **/
+.bar_class {
+ background-color: #282c34;
+ border-radius: 16px;
+}
+.module {
+ margin: 0px 0px 0px 0px;
+ border-radius: 10px 16px 0px 10px;
+}
+
+/** tooltip!! **/
+tooltip.background {
+ background-color: #282c34;
+ font-size: 18;
+ border-radius: 10px;
+ color: #bfc9db;
+}
+
+tooltip label {
+ margin: 6px;
+}
+
+
+/** Widgets **/
+
+.clock_time_sep {
+ font-size: 16;
+ color: #bfc9db;
+ margin: 0px 4px 1px 4px;
+}
+.clock_time_class, .clock_minute_class {
+ font-size: 23;
+}
+.clock_date_class {
+ font-size: 18;
+ margin: 0px 20px 0px -1px;
+ color: #d7beda;
+}
+.clock_minute_class {
+ margin: 0px 20px 0px 3px;
+ color: #bfc9db;
+}
+
+.clock_time_class {
+ color: #bfc9db;
+ font-weight: bold;
+ margin: 0px 5px 0px 0px;
+}
+
+
+.membar {
+ color: #e0b089;
+ background-color: #38384d;
+ border-radius: 10px;
+}
+.batbar {
+ color: #afbea2;
+ background-color: #38384d;
+ border-radius: 10px;
+}
+.brightbar trough highlight {
+ background-image: linear-gradient(to right, #e4c9af 30%, #f2cdcd 50%, #e0b089 100% *50);
+ border-radius: 10px;
+}
+.volbar trough highlight {
+ background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50);
+ border-radius: 10px;
+}
+.volume_icon {
+ font-size: 22;
+ color: #a1bdce;
+ margin: 0px 10px 0px 10px;
+}
+
+
+.module_essid {
+ font-size: 18;
+ color: #a1bdce;
+ margin: 0px 10px 0px 0px;
+}
+.module-wif {
+ font-size: 22;
+ color: #a1bdce;
+ border-radius: 100%;
+ margin: 0px 10px 0px 5px;
+}
+
+.iconmem {
+ color: #e0b089;
+}
+.iconbat {
+ color: #afbea2;
+}
+.iconbat, .iconmem {
+ font-size: 15;
+ margin: 10px;
+}
+.bright_icon {
+ font-size: 22;
+ color: #e4c9af;
+ margin: 0px 10px 0px 10px;
+}
+
+
+.separ {
+ color: #3e424f;
+ font-weight: bold;
+ font-size: 22px;
+ margin: 0px 8px 0px 8px;
+ }
+
+.mem_module {
+ background-color: #282c34;
+ border-radius: 16px;
+ margin: 0px 10px 0px 3px;
+ }
+.bat_module {
+ background-color: #282c34;
+ border-radius: 16px;
+ margin: 0px 10px 0px 10px;
+ }
+
+
+scale trough {
+ all: unset;
+ background-color: #22242b;
+ box-shadow: 0 2px 3px 2px #06060b;
+ border-radius: 16px;
+ min-height: 10px;
+ min-width: 70px;
+ margin: 0px 10px 0px 0px;
+}
+
+.works {
+font-size: 27px;
+font-weight: normal;
+margin: 5px 0px 0px 20px;
+background-color: #282c34;
+}
+
+.0 , .01, .02, .03, .04, .05, .06,
+.011, .022, .033, .044, .055, .066{
+ margin: 0px 10px 0px 0px;
+}
+
+/* Unoccupied */
+.0 {
+color: #3e424f;
+}
+
+/* Occupied */
+.01, .02, .03, .04, .05, .06 {
+ color: #bfc9db;
+}
+
+/* Focused */
+.011, .022, .033, .044, .055, .066 {
+ color: #a1bdce;
+}
+
+
+.song_cover_art {
+ background-size: cover;
+ background-position: center;
+ min-height: 24px;
+ min-width: 24px;
+ margin: 10px;
+ border-radius: 100px;
+}
+
+.song {
+ color: #a1bdce;
+ font-size : 18px;
+ font-weight : bold;
+ margin : 3px 5px 0px 0px;
+}
+
+.song_btn_play {
+ color: #a1bdce;
+ font-size : 28px;
+ margin : 3px 0px 0px 5px;
+
+}
+
+
+.song_btn_prev, .song_btn_next {
+ color: #bfc9db;
+ font-size : 24px;
+ margin : 3px 0px 0px 5px;
+
+}
+// Calendar
+.cal {
+ background-color: #282c34;
+ font-family: JetBrainsMono Nerd Font;
+ font-size: 18px;
+ font-weight: normal;
+
+.cal-in {
+ padding: 0px 10px 0px 10px;
+ color: #bfc9db;
+
+.cal {
+ &.highlight {
+ padding: 20px;
+ }
+
+ padding: 5px 5px 5px 5px;
+ margin-left: 10px;
+ }
+ }
+}
+
+calender {
+ color: #bfc9db;
+}
+calendar:selected {
+ color: #a1bdce;
+}
+
+calendar.header {
+color: #a1bdce;
+font-weight: bold;
+}
+
+calendar.button {
+color: #afbea2;
+}
+
+calendar.highlight {
+color: #a1bdce;
+font-weight: bold;
+}
+
+calendar:indeterminate {
+color: #bfc9db;
+}
+
+
+
+
+
+
+
+.sys_sep {
+ color: #38384d;
+ font-size: 18;
+ margin: 0px 10px 0px 10px;
+}
+.sys_text_bat_sub, .sys_text_mem_sub {
+ font-size: 16;
+ color: #bbc5d7;
+ margin: 5px 0px 0px 25px;
+}
+.sys_text_bat, .sys_text_mem {
+ font-size: 21;
+ font-weight: bold;
+ margin: 14px 0px 0px 25px;
+}
+.sys_icon_bat, .sys_icon_mem {
+ font-size: 30;
+ margin: 30px;
+}
+.sys_win {
+ background-color: #282c34;
+}
+.sys_bat {
+ color: #afbea2;
+ background-color: #38384d;
+ border-radius: 10px;
+}
+.sys_mem {
+ color: #e4c9af;
+ background-color: #38384d;
+ border-radius: 10px;
+}
+.sys_icon_bat, .sys_text_bat {
+ color: #afbea2;
+}
+.sys_icon_mem, .sys_text_mem {
+ color: #e4c9af;
+}
+.sys_bat_box {
+ border-radius: 16px;
+ margin: 15px 10px 10px 20px;
+ }
+.sys_mem_box {
+ border-radius: 16px;
+ margin: 10px 10px 15px 20px;
+ }
+
+
+
+
+
+
+
+.music_pop {
+ background-color: #282c34;
+ border-radius: 16px;
+}
+ .music_cover_art {
+ background-size: cover;
+ background-position: center;
+ min-height: 100px;
+ box-shadow: 5px 5px 5px 5px #06060b;
+ min-width: 170px;
+ margin: 20px;
+ border-radius: 20px;
+}
+
+.music {
+ color: #a1bdce;
+ font-size : 20px;
+ font-weight : bold;
+ margin : 20px 0px 0px -15px;
+}
+
+.music_artist {
+ color: #bbc5d7;
+ font-size : 16px;
+ font-weight : normal;
+ margin : 0px 0px 0px 0px;
+}
+
+.music_btn_prev, .music_btn_play, .music_btn_next {
+ font-family: Iosevka Nerd Font;
+}
+.music_btn_prev {
+ color: #bbc5d7;
+ font-size : 32px;
+ font-weight : normal;
+ margin: 0px 0px 0px 0px;
+}
+.music_btn_play {
+ color: #a1bdce;
+ font-size : 48px;
+ font-weight : normal;
+ margin: 0px 0px 0px 0px;
+}
+.music_btn_next {
+ color: #bbc5d7;
+ font-size : 32px;
+ font-weight : normal;
+ margin: 0px 0px 0px 0px;
+}
+
+.music_bar scale trough highlight {
+ all: unset;
+ background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50);
+ border-radius: 24px;
+}
+.music_bar scale trough {
+ all: unset;
+ background-color: #232232;
+ box-shadow: 0 6px 5px 2px #06060b;
+ border-radius: 24px;
+ min-height: 13px;
+ min-width: 190px;
+ margin : -10px 10px 20px 0px;
+}
+
+.audio-box {
+ background-color: #282c34;
+ border-radius: 16px;
+}
+.speaker_icon {
+ background-size: cover;
+ background-image: url('images/speaker.png');
+ background-position: center;
+ min-height: 70px;
+ min-width: 75px;
+ margin: 10px 20px 5px 20px;
+ border-radius: 12px;
+}
+
+.speaker_text {
+ color: #a1bdce;
+ font-size : 26px;
+ font-weight : bold;
+ margin: 20px 0px 0px 0px;
+}
+
+.speaker_bar scale trough highlight {
+ all: unset;
+ background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50);
+ border-radius: 24px;
+}
+.speaker_bar scale trough {
+ all: unset;
+ background-color: #232232;
+ box-shadow: 0 6px 5px 2px #06060b;
+ border-radius: 24px;
+ min-height: 13px;
+ min-width: 120px;
+ margin : 0px 0px 5px 0px;
+}
+
+
+
+
+.mic_icon {
+ background-size: cover;
+ background-image: url('images/mic.png');
+ background-position: center;
+ min-height: 70px;
+ min-width: 75px;
+ margin: 5px 20px 20px 20px;
+ border-radius: 12px;
+}
+
+.mic_text {
+ color: #a1bdce;
+ font-size : 26px;
+ font-weight : bold;
+ margin: 0px 0px 0px 0px;
+}
+
+.mic_bar scale trough highlight {
+ all: unset;
+ background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50);
+ border-radius: 24px;
+}
+.mic_bar scale trough {
+ all: unset;
+ box-shadow: 0 6px 5px 2px #06060b;
+ background-color: #232232;
+ border-radius: 24px;
+ min-height: 13px;
+ min-width: 120px;
+ margin : 0px 0px 20px 0px;
+}
+
+.audio_sep {
+ color: #38384d;
+ font-size: 18;
+ margin : 0px 0px 0px 0px;
+}
+
diff --git a/.config/eww/bar/eww.yuck b/.config/eww/bar/eww.yuck
new file mode 100644
index 0000000..244f5c0
--- /dev/null
+++ b/.config/eww/bar/eww.yuck
@@ -0,0 +1,351 @@
+;; Variables
+(defpoll clock_time :interval "5m" "date +\%I")
+(defpoll clock_minute :interval "5s" "date +\%M")
+(defpoll clock_date :interval "10h" "date '+%d/%m'")
+(defpoll volume_percent :interval "3s" "amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'")
+(defpoll mic_percent :interval "3s" "amixer -D pulse sget Capture | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'")
+(defpoll brightness_percent :interval "5s" "brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%'")
+(defpoll battery :interval "15s" "./scripts/battery --bat")
+(defpoll battery_status :interval "1m" "./scripts/battery --bat-st")
+(defpoll memory :interval "15s" "scripts/memory")
+(defpoll memory_used_mb :interval "2m" "scripts/mem-ad used")
+(defpoll memory_total_mb :interval "2m" "scripts/mem-ad total")
+(defpoll memory_free_mb :interval "2m" "scripts/mem-ad free")
+(defvar vol_reveal false)
+(defvar br_reveal false)
+(defvar music_reveal false)
+(defvar wifi_rev false)
+(defvar time_rev false)
+(deflisten workspace "scripts/workspace")
+
+(defvar eww "eww -c $HOME/.config/eww/bar")
+
+
+(defpoll COL_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --COL")
+(defpoll ESSID_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --ESSID")
+(defpoll WLAN_ICON :interval "1m" "~/.config/eww/bar/scripts/wifi --ICON")
+
+
+(defpoll song :interval "2s" "~/.config/eww/bar/scripts/music_info --song")
+(defpoll song_artist :interval "2s" "~/.config/eww/bar/scripts/music_info --artist")
+(defpoll current_status :interval "1s" "~/.config/eww/bar/scripts/music_info --time")
+(defpoll song_status :interval "2s" "~/.config/eww/bar/scripts/music_info --status")
+(defpoll cover_art :interval "2s" "~/.config/eww/bar/scripts/music_info --cover")
+
+(defpoll calendar_day :interval "20h" "date '+%d'")
+(defpoll calendar_year :interval "20h" "date '+%Y'")
+
+;; widgets
+
+(defwidget wifi []
+ (eventbox :onhover "${eww} update wifi_rev=true"
+ :onhoverlost "${eww} update wifi_rev=false"
+ (box :vexpand "false" :hexpand "false" :space-evenly "false"
+ (button :class "module-wif" :onclick "networkmanager_dmenu" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" WLAN_ICON)
+ (revealer :transition "slideright"
+ :reveal wifi_rev
+ :duration "350ms"
+ (label :class "module_essid"
+ :text ESSID_WLAN
+ :orientation "h"
+ )))))
+
+
+(defwidget workspaces []
+ (literal :content workspace))
+
+
+(defwidget bat []
+ (box :class "bat_module" :vexpand "false" :hexpand "false"
+ (circular-progress :value battery
+ :class "batbar"
+ :thickness 4
+ (button
+ :class "iconbat"
+ :limit-width 2
+ :tooltip "battery on ${battery}%"
+ :show_truncated false
+ :onclick "$HOME/.config/eww/bar/scripts/pop system"
+ :wrap false
+ ""))))
+
+
+(defwidget mem []
+ (box :class "mem_module" :vexpand "false" :hexpand "false"
+ (circular-progress :value memory
+ :class "membar"
+ :thickness 4
+ (button
+ :class "iconmem"
+ :limit-width 2
+ :tooltip "using ${memory}% ram"
+ :onclick "$HOME/.config/eww/bar/scripts/pop system"
+ :show_truncated false
+ :wrap false
+ ""))))
+
+
+
+(defwidget sep []
+ (box :class "module-2" :vexpand "false" :hexpand "false"
+ (label :class "separ" :text "|")))
+
+(defwidget clock_module []
+ (eventbox :onhover "${eww} update time_rev=true"
+ :onhoverlost "${eww} update time_rev=false"
+ (box :class "module" :space-evenly "false" :orientation "h" :spacing "3"
+ (label :text clock_time :class "clock_time_class" )
+ (label :text "" :class "clock_time_sep" )
+ (label :text clock_minute :class "clock_minute_class")
+ (revealer :transition "slideleft"
+ :reveal time_rev
+ :duration "350ms"
+ (button :class "clock_date_class"
+ :onclick "$HOME/.config/eww/bar/scripts/pop calendar" clock_date
+ )
+ ))))
+
+(defwidget volume []
+ (eventbox :onhover "${eww} update vol_reveal=true"
+ :onhoverlost "${eww} update vol_reveal=false"
+ (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3"
+ (button :onclick "scripts/pop audio" :class "volume_icon" "")
+ (revealer :transition "slideleft"
+ :reveal vol_reveal
+ :duration "350ms"
+ (scale :class "volbar"
+ :value volume_percent
+ :orientation "h"
+ :tooltip "${volume_percent}%"
+ :max 100
+ :min 0
+ :onchange "amixer -D pulse sset Master {}%" )))))
+
+(defwidget bright []
+ (eventbox :onhover "${eww} update br_reveal=true" :onhoverlost "${eww} update br_reveal=false"
+ (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3"
+ (label :text "" :class "bright_icon" :tooltip "brightness")
+ (revealer :transition "slideleft"
+ :reveal br_reveal
+ :duration "350ms"
+ (scale :class "brightbar"
+ :value brightness_percent
+ :orientation "h"
+ :tooltip "${brightness_percent}%"
+ :max 100
+ :min 0
+ :onchange "brightnessctl set {}%" )))))
+
+
+
+ ;; Music
+(defwidget music []
+ (eventbox :onhover "${eww} update music_reveal=true"
+ :onhoverlost "${eww} update music_reveal=false"
+ (box :class "module-2" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (box :class "song_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');")
+ (button :class "song" :wrap "true" :onclick "~/.config/eww/bar/scripts/pop music" song)
+ (revealer :transition "slideright"
+ :reveal music_reveal
+ :duration "350ms"
+ (box :vexpand "false" :hexpand "false" :oreintation "h"
+ (button :class "song_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "")
+ (button :class "song_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status)
+ (button :class "song_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" ""))))))
+
+
+
+(defwidget left []
+ (box :orientation "h"
+ :space-evenly false
+ :halign "end"
+ :class "left_modules"
+(bright)
+(volume)
+(wifi)
+(sep)
+(bat)
+(mem)
+(sep)
+(clock_module)))
+
+
+(defwidget right []
+ (box :orientation "h"
+ :space-evenly false
+ :halign "start"
+ :class "right_modules"
+(workspaces)))
+
+
+(defwidget center []
+ (box :orientation "h"
+ :space-evenly false
+ :halign "center"
+ :class "center_modules"
+(music)))
+
+(defwidget bar_1 []
+ (box :class "bar_class"
+ :orientation "h"
+ (right)
+ (center)
+ (left)
+ ))
+
+(defwindow bar
+ :monitor 0
+ :geometry (geometry :x "0%"
+ :y "9px"
+ :width "98%"
+ :height "24px"
+ :anchor "top right")
+ :stacking "fg"
+ :windowtype "dock"
+ (bar_1))
+
+(defwidget system []
+ (box :class "sys_win" :orientation "v" :space-evenly "false" :hexpand "false" :vexpand "false" :spacing 0
+ (box :class "sys_bat_box" :orientation "h" :space-evenly "false"
+ (circular-progress :value battery
+ :class "sys_bat"
+ :thickness 9
+ (label :text ""
+ :class "sys_icon_bat"
+ :limit-width 2
+ :show_truncated false
+ :wrap false))
+ (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false"
+ (label :text "battery"
+ :halign "start"
+ :class "sys_text_bat"
+ :limit-width 9
+ :show_truncated false
+ :wrap false)
+ (label :text "${battery}%"
+ :halign "start"
+ :class "sys_text_bat_sub"
+ :limit-width 22
+ :show_truncated false
+ :wrap false)
+ (label :text "${battery_status}"
+ :halign "start"
+ :class "sys_text_bat_sub"
+ :limit-width 22
+ :show_truncated false
+ :wrap false)))
+ (label :text "" :class "sys_sep" :halign "center")
+ (box :class "sys_mem_box" :orientation "h" :space-evenly "false" :halign "start"
+ (circular-progress :value memory
+ :class "sys_mem"
+ :thickness 9
+ (label :text ""
+ :class "sys_icon_mem"
+ :limit-width 2
+ :show_truncated false
+ :wrap false
+ :angle 0.0))
+ (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false"
+ (label :text "memory"
+ :halign "start"
+ :class "sys_text_mem"
+ :limit-width 9
+ :show_truncated false
+ :wrap false)
+ (label :text "${memory_used_mb} | ${memory_total_mb}mb "
+ :halign "start"
+ :class "sys_text_mem_sub"
+ :limit-width 22
+ :show_truncated false
+ :wrap false)
+ (label :text "${memory_free_mb}mb free"
+ :halign "start"
+ :class "sys_text_mem_sub"
+ :limit-width 22
+ :show_truncated false
+ :wrap false)))))
+
+(defwidget cal []
+ (box :class "cal" :orientation "v"
+ (box :class "cal-in"
+ (calendar :class "cal"
+ :day calendar_day
+ :year calendar_year))))
+
+(defwindow calendar
+ :geometry (geometry :x "-20px"
+ :y "7%"
+ :anchor "top right"
+ :width "270px"
+ :height "60px")
+(cal))
+
+
+
+(defwidget audio []
+ (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false"
+ (box :class "speaker_icon" :orientation "v")
+ (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false"
+ (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" )
+ (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false"
+ (scale :value volume_percent
+ :space-evenly "false"
+ :orientation "h"
+ :onchange "amixer -D pulse sset Master {}%"
+ :tooltip "volume on ${volume_percent}%"
+ :max 100
+ :min 0))))
+ (label :text "" :class "audio_sep" :halign "center")
+ (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false"
+ (box :class "mic_icon" :orientation "v")
+ (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false"
+ (label :class "mic_text" :text "mic" :valign "center" :halign "left" )
+ (box :class "mic_bar" :halign "center" :vexpand "false" :hexpand "false"
+ (scale :value mic_percent
+ :space-evenly "false"
+ :orientation "h"
+ :tooltip "mic on ${mic_percent}%"
+ :onchange "amixer -D pulse sset Capture {}%"
+ :max 100
+ :min 0))))))
+
+(defwindow audio_ctl
+ :geometry (geometry :x "-20px"
+ :y "7%"
+ :anchor "top right"
+ :width "280px"
+ :height "60px")
+(audio))
+
+
+(defwindow system
+ :geometry (geometry :x "-20px"
+ :y "7%"
+ :anchor "top right"
+ :width "290px"
+ :height "120px")
+(system))
+
+
+
+;; Music
+(defwidget music_pop []
+ (box :class "music_pop" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (box :class "music_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');")
+ (box :orientation "v" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false"
+ (label :halign "center" :class "music" :wrap "true" :limit-width 13 :text song)
+ (label :halign "center" :class "music_artist" :wrap "true" :limit-width 15 :text song_artist)
+ (box :orientation "h" :spacing 15 :halign "center" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :class "music_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "")
+ (button :class "music_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status)
+ (button :class "music_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" ""))
+ (box :class "music_bar" :halign "center" :vexpand "false" :hexpand "false" :space-evenly "false"
+ (scale :onscroll "mpc -q seek {}" :min 0 :active "true" :max 100 :value current_status)))))
+
+
+;; music
+ (defwindow music_win :stacking "fg" :focusable "false" :screen 1
+ :geometry (geometry :x "0" :y "7%" :width 428 :height 104 :anchor "top center")
+ (music_pop))
+
diff --git a/.config/eww/bar/images/mic.png b/.config/eww/bar/images/mic.png
new file mode 100644
index 0000000..d77f315
Binary files /dev/null and b/.config/eww/bar/images/mic.png differ
diff --git a/.config/eww/bar/images/music.png b/.config/eww/bar/images/music.png
new file mode 100644
index 0000000..11804f5
Binary files /dev/null and b/.config/eww/bar/images/music.png differ
diff --git a/.config/eww/bar/images/profile.png b/.config/eww/bar/images/profile.png
new file mode 100644
index 0000000..0190a36
Binary files /dev/null and b/.config/eww/bar/images/profile.png differ
diff --git a/.config/eww/bar/images/speaker.png b/.config/eww/bar/images/speaker.png
new file mode 100644
index 0000000..79e005b
Binary files /dev/null and b/.config/eww/bar/images/speaker.png differ
diff --git a/.config/eww/bar/launch_bar b/.config/eww/bar/launch_bar
new file mode 100755
index 0000000..93f20bd
--- /dev/null
+++ b/.config/eww/bar/launch_bar
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+## Files and cmd
+FILE="$HOME/.cache/eww_launch.xyz"
+EWW="eww -c $HOME/.config/eww/bar"
+
+## Run eww daemon if not running already
+if [[ ! `pidof eww` ]]; then
+ ${EWW} daemon
+ sleep 1
+fi
+
+## Open widgets
+run_eww() {
+ ${EWW} open-many \
+ bar
+
+}
+
+## Launch or close widgets accordingly
+if [[ ! -f "$FILE" ]]; then
+ touch "$FILE"
+ run_eww ## && bspc config -m LVDS-1 top_padding 49
+else
+ ${EWW} close-all && killall eww
+ rm "$FILE"
+fi
diff --git a/.config/eww/bar/scripts/battery b/.config/eww/bar/scripts/battery
new file mode 100755
index 0000000..0540a1b
--- /dev/null
+++ b/.config/eww/bar/scripts/battery
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+battery() {
+ BAT=`ls /sys/class/power_supply | grep BAT | head -n 1`
+ cat /sys/class/power_supply/${BAT}/capacity
+}
+battery_stat() {
+ BAT=`ls /sys/class/power_supply | grep BAT | head -n 1`
+ cat /sys/class/power_supply/${BAT}/status
+}
+
+if [[ "$1" == "--bat" ]]; then
+ battery
+elif [[ "$1" == "--bat-st" ]]; then
+ battery_stat
+fi
+
diff --git a/.config/eww/bar/scripts/mem-ad b/.config/eww/bar/scripts/mem-ad
new file mode 100755
index 0000000..1e4cf89
--- /dev/null
+++ b/.config/eww/bar/scripts/mem-ad
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+
+total="$(free -m | grep Mem: | awk '{ print $2 }')"
+used="$(free -m | grep Mem: | awk '{ print $3 }')"
+
+free=$(expr $total - $used)
+
+if [ "$1" = "total" ]; then
+ echo $total
+elif [ "$1" = "used" ]; then
+ echo $used
+elif [ "$1" = "free" ]; then
+ echo $free
+fi
diff --git a/.config/eww/bar/scripts/memory b/.config/eww/bar/scripts/memory
new file mode 100755
index 0000000..217c834
--- /dev/null
+++ b/.config/eww/bar/scripts/memory
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}')
diff --git a/.config/eww/bar/scripts/music_info b/.config/eww/bar/scripts/music_info
new file mode 100755
index 0000000..ffafe87
--- /dev/null
+++ b/.config/eww/bar/scripts/music_info
@@ -0,0 +1,98 @@
+#!/bin/bash
+# scripts by adi1090x
+
+## Get data
+STATUS="$(mpc status)"
+COVER="/tmp/.music_cover.png"
+MUSIC_DIR="$HOME/Music"
+
+## Get status
+get_status() {
+ if [[ $STATUS == *"[playing]"* ]]; then
+ echo ""
+ else
+ echo "奈"
+ fi
+}
+
+## Get song
+get_song() {
+ song=`mpc -f %title% current`
+ if [[ -z "$song" ]]; then
+ echo "Offline"
+ else
+ echo "$song"
+ fi
+}
+
+## Get artist
+get_artist() {
+ artist=`mpc -f %artist% current`
+ if [[ -z "$artist" ]]; then
+ echo ""
+ else
+ echo "$artist"
+ fi
+}
+
+## Get time
+get_time() {
+ time=`mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)'`
+ if [[ -z "$time" ]]; then
+ echo "0"
+ else
+ echo "$time"
+ fi
+}
+get_ctime() {
+ ctime=`mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g'`
+ if [[ -z "$ctime" ]]; then
+ echo "0:00"
+ else
+ echo "$ctime"
+ fi
+}
+get_ttime() {
+ ttime=`mpc -f %time% current`
+ if [[ -z "$ttime" ]]; then
+ echo "0:00"
+ else
+ echo "$ttime"
+ fi
+}
+
+## Get cover
+get_cover() {
+ ffmpeg -i "${MUSIC_DIR}/$(mpc current -f %file%)" "${COVER}" -y &> /dev/null
+ STATUS=$?
+
+ # Check if the file has a embbeded album art
+ if [ "$STATUS" -eq 0 ];then
+ echo "$COVER"
+ else
+ echo "images/music.png"
+ fi
+}
+
+## Execute accordingly
+if [[ "$1" == "--song" ]]; then
+ get_song
+elif [[ "$1" == "--artist" ]]; then
+ get_artist
+elif [[ "$1" == "--status" ]]; then
+ get_status
+elif [[ "$1" == "--time" ]]; then
+ get_time
+elif [[ "$1" == "--ctime" ]]; then
+ get_ctime
+elif [[ "$1" == "--ttime" ]]; then
+ get_ttime
+elif [[ "$1" == "--cover" ]]; then
+ get_cover
+elif [[ "$1" == "--toggle" ]]; then
+ mpc -q toggle
+elif [[ "$1" == "--next" ]]; then
+ { mpc -q next; get_cover; }
+elif [[ "$1" == "--prev" ]]; then
+ { mpc -q prev; get_cover; }
+fi
diff --git a/.config/eww/bar/scripts/pop b/.config/eww/bar/scripts/pop
new file mode 100755
index 0000000..3ad9095
--- /dev/null
+++ b/.config/eww/bar/scripts/pop
@@ -0,0 +1,88 @@
+#!/bin/bash
+
+calendar() {
+LOCK_FILE="$HOME/.cache/eww-calendar.lock"
+
+run() {
+ eww -c $HOME/.config/eww/bar open calendar
+}
+
+# Open widgets
+if [[ ! -f "$LOCK_FILE" ]]; then
+ eww -c $HOME/.config/eww/bar close system music_win audio_ctl
+ touch "$LOCK_FILE"
+ run && echo "ok good!"
+else
+ eww -c $HOME/.config/eww/bar close calendar
+ rm "$LOCK_FILE" && echo "closed"
+fi
+}
+
+
+system() {
+LOCK_FILE_MEM="$HOME/.cache/eww-system.lock"
+
+run() {
+ eww -c $HOME/.config/eww/bar open system
+}
+
+# Open widgets
+if [[ ! -f "$LOCK_FILE_MEM" ]]; then
+ eww -c $HOME/.config/eww/bar close calendar music_win audio_ctl
+ touch "$LOCK_FILE_MEM"
+ run && echo "ok good!"
+else
+ eww -c $HOME/.config/eww/bar close system
+ rm "$LOCK_FILE_MEM" && echo "closed"
+fi
+}
+
+
+music() {
+LOCK_FILE_SONG="$HOME/.cache/eww-song.lock"
+
+run() {
+ eww -c $HOME/.config/eww/bar open music_win
+}
+
+# Open widgets
+if [[ ! -f "$LOCK_FILE_SONG" ]]; then
+ eww -c $HOME/.config/eww/bar close system calendar
+ touch "$LOCK_FILE_SONG"
+ run && echo "ok good!"
+else
+ eww -c $HOME/.config/eww/bar close music_win
+ rm "$LOCK_FILE_SONG" && echo "closed"
+fi
+}
+
+
+
+audio() {
+LOCK_FILE_AUDIO="$HOME/.cache/eww-audio.lock"
+
+run() {
+ eww -c $HOME/.config/eww/bar open audio_ctl
+}
+
+# Open widgets
+if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then
+ eww -c $HOME/.config/eww/bar close system calendar music
+ touch "$LOCK_FILE_AUDIO"
+ run && echo "ok good!"
+else
+ eww -c $HOME/.config/eww/bar close audio_ctl
+ rm "$LOCK_FILE_AUDIO" && echo "closed"
+fi
+}
+
+
+if [ "$1" = "calendar" ]; then
+calendar
+elif [ "$1" = "system" ]; then
+system
+elif [ "$1" = "music" ]; then
+music
+elif [ "$1" = "audio" ]; then
+audio
+fi
diff --git a/.config/eww/bar/scripts/wifi b/.config/eww/bar/scripts/wifi
new file mode 100755
index 0000000..5d7cc59
--- /dev/null
+++ b/.config/eww/bar/scripts/wifi
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+status=$(nmcli g | grep -oE "disconnected")
+essid=$(nmcli c | grep wlp2s0 | awk '{print ($1)}')
+
+if [ $status ] ; then
+ icon=""
+ text=""
+ col="#575268"
+
+else
+ icon=""
+ text="${essid}"
+ col="#a1bdce"
+fi
+
+
+
+if [[ "$1" == "--COL" ]]; then
+ echo $col
+elif [[ "$1" == "--ESSID" ]]; then
+ echo $text
+elif [[ "$1" == "--ICON" ]]; then
+ echo $icon
+fi
+
diff --git a/.config/eww/bar/scripts/workspace b/.config/eww/bar/scripts/workspace
new file mode 100755
index 0000000..335caf9
--- /dev/null
+++ b/.config/eww/bar/scripts/workspace
@@ -0,0 +1,75 @@
+#!/bin/sh
+workspaces() {
+
+ws1="0"
+ws2="1"
+ws3="2"
+ws4="3"
+ws5="4"
+ws6="5"
+ws7="6"
+ws8="7"
+ws9="8"
+
+# Unoccupied
+un="0"
+
+# check if Occupied
+o1=$(bspc query -D -d .occupied --names | grep "$ws1" )
+o2=$(bspc query -D -d .occupied --names | grep "$ws2" )
+o3=$(bspc query -D -d .occupied --names | grep "$ws3" )
+o4=$(bspc query -D -d .occupied --names | grep "$ws4" )
+o5=$(bspc query -D -d .occupied --names | grep "$ws5" )
+o6=$(bspc query -D -d .occupied --names | grep "$ws6" )
+o7=$(bspc query -D -d .occupied --names | grep "$ws7" )
+o8=$(bspc query -D -d .occupied --names | grep "$ws8" )
+o9=$(bspc query -D -d .occupied --names | grep "$ws9" )
+
+# check if Focused
+f1=$(bspc query -D -d focused --names | grep "$ws1" )
+f2=$(bspc query -D -d focused --names | grep "$ws2" )
+f3=$(bspc query -D -d focused --names | grep "$ws3" )
+f4=$(bspc query -D -d focused --names | grep "$ws4" )
+f5=$(bspc query -D -d focused --names | grep "$ws5" )
+f6=$(bspc query -D -d focused --names | grep "$ws6" )
+f7=$(bspc query -D -d focused --names | grep "$ws7" )
+f8=$(bspc query -D -d focused --names | grep "$ws8" )
+f9=$(bspc query -D -d focused --names | grep "$ws9" )
+
+ic_1=""
+ic_2=""
+ic_3=""
+ic_4=""
+ic_5=""
+ic_6=""
+ic_7=""
+ic_8=""
+ic_9=""
+
+if [ $f1 ]; then
+ ic_1=""
+elif [ $f2 ]; then
+ ic_2=""
+elif [ $f3 ]; then
+ ic_3=""
+elif [ $f4 ]; then
+ ic_4=""
+elif [ $f5 ]; then
+ ic_5=""
+elif [ $f6 ]; then
+ ic_6=""
+elif [ $f7 ]; then
+ ic_7=""
+elif [ $f8 ]; then
+ ic_8=""
+elif [ $f9 ]; then
+ ic_9=""
+fi
+
+echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"wmctrl -s 0\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"wmctrl -s 1\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"wmctrl -s 2\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"wmctrl -s 3\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"wmctrl -s 4\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"wmctrl -s 5\" :class \"$un$o6$f6\" \"$ic_6\") (button :onclick \"wmctrl -s 6\" :class \"$un$o7$f7\" \"$ic_7\") (button :onclick \"wmctrl -s 7\" :class \"$un$o8$f8\" \"$ic_8\") (button :onclick \"wmctrl -s 8\" :class \"$un$o9$f9\" \"$ic_9\"))"
+
+}
+workspaces
+bspc subscribe desktop node_transfer | while read -r _ ; do
+workspaces
+done
diff --git a/.config/herbstluftwm/README.md b/.config/herbstluftwm/README.md
new file mode 100755
index 0000000..338c8f5
--- /dev/null
+++ b/.config/herbstluftwm/README.md
@@ -0,0 +1,17 @@
+
+# My Herbstluftwm Configuration
+
+herbstluftwm is a manual tiling window manager for X. It licensed under the
+"Simplified BSD License" (see `LICENSE`).
+
+- the layout is based on splitting frames into subframes which can be split again or can be filled with windows (similar to i3/ musca)
+- tags (or workspaces or virtual desktops or …) can be added/removed at runtime. Each tag contains an own layout
+- exactly one tag is viewed on each monitor. The tags are monitor independent (similar to xmonad)
+- it is configured at runtime via ipc calls from herbstclient. So the configuration file is just a script which is run on startup. (similar to wmii/ musca)
+
+For more, see the herbstluftwm homepage http://herbstluftwm.org -- in
+particular the [herbstluftwm tutorial](http://herbstluftwm.org/tutorial.html)
+for the first steps (also available as `man herbstluftwm-tutorial` after
+installing herbstluftwm on your system).
+
+You are welcome to join the IRC channel `#herbstluftwm` on `irc.freenode.net`.
diff --git a/.config/herbstluftwm/autostart b/.config/herbstluftwm/autostart
new file mode 100755
index 0000000..17196a4
--- /dev/null
+++ b/.config/herbstluftwm/autostart
@@ -0,0 +1,214 @@
+#!/usr/bin/env bash
+# ____ _____
+# | _ \_ _| Derek Taylor (DistroTube)
+# | | | || | http://www.youtube.com/c/DistroTube
+# | |_| || | http://www.gitlab.com/dwt1/
+# |____/ |_|
+#
+# A customized configuration for herbstluftwm (http://www.herbstluftwm.org)
+# Modified by Derek Taylor (http://www.gitlab.com/dwt1/ )
+
+
+hc() {
+ herbstclient "$@"
+}
+
+hc emit_hook reload
+
+xsetroot -solid '#5A8E3A'
+picom &
+nitrogen --restore &
+lxsession &
+
+# Uncomment the following lines to use xmobar as the panel
+# Remember to comment out the last 8 lines of this config, so that
+# polybar will no longer launch on startup.
+# $HOME/.config/herbstluftwm/xmobar
+
+# remove all existing keybindings
+hc keyunbind --all
+
+# keybindings
+Mod=Mod4 # Use the super key as the main modifier
+myTerm=alacritty # Set my preferred terminal
+myEditor="emacsclient -c -a emacs" # Set my preferred editor
+
+hc keybind $Mod-Shift-q quit
+hc keybind $Mod-Shift-r reload
+hc keybind $Mod-Shift-c close
+hc keybind $Mod-Return spawn $myTerm
+hc keybind $Mod-e spawn $myEditor
+hc keybind Mod1-Control-Return spawn ./xmenu/xmenu.sh
+
+# Dmenu launcher
+hc keybind $Mod-Shift-Return spawn dmenu_run -fn 'Mononoki Nerd Font:size=10' -nb '#292d3e' -nf '#bbc5ff' -sb '#82AAFF' -sf '#292d3e' -p 'dmenu:'
+
+# My dmenu scripts (Alt+Ctrl+Key)
+hc keybind Mod1-Control-e spawn ./.dmenu/dmenu-edit-configs.sh
+hc keybind Mod1-Control-m spawn ./.dmenu/dmenu-sysmon.sh
+hc keybind Mod1-Control-p spawn passmenu
+hc keybind Mod1-Control-s spawn ./.dmenu/dmenu-surfraw.sh
+hc keybind Mod1-Control-t spawn ./.dmenu/dmenu-trading.sh
+
+# My applications (Super+Alt+Key)
+hc keybind $Mod-Mod1-l spawn $myTerm -e lynx -cfg=~/.lynx.cfg -lss=~/.lynx.lss http://www.distrowatch.com
+hc keybind $Mod-Mod1-n spawn $myTerm -e newsboat
+hc keybind $Mod-Mod1-r spawn $myTerm -e rtv
+hc keybind $Mod-Mod1-e spawn $myTerm -e neomutt
+hc keybind $Mod-Mod1-m spawn $myTerm -e toot curses
+hc keybind $Mod-Mod1-t spawn $myTerm -e sh ./scripts/tig-script.sh
+hc keybind $Mod-Mod1-f spawn $myTerm -e ~/.config/vifm/scripts/vifmrun
+hc keybind $Mod-Mod1-j spawn $myTerm -e joplin
+hc keybind $Mod-Mod1-c spawn $myTerm -e cmus
+hc keybind $Mod-Mod1-i spawn $myTerm -e irssi
+hc keybind $Mod-Mod1-y spawn $myTerm -e youtube-viewer
+hc keybind $Mod-Mod1-a spawn $myTerm -e ncpamixer
+
+# focusing clients
+hc keybind $Mod-Left focus left
+hc keybind $Mod-Down focus down
+hc keybind $Mod-Up focus up
+hc keybind $Mod-Right focus right
+hc keybind $Mod-h focus left
+hc keybind $Mod-j focus down
+hc keybind $Mod-k focus up
+hc keybind $Mod-l focus right
+
+# moving clients
+hc keybind $Mod-Shift-Left shift left
+hc keybind $Mod-Shift-Down shift down
+hc keybind $Mod-Shift-Up shift up
+hc keybind $Mod-Shift-Right shift right
+hc keybind $Mod-Shift-h shift left
+hc keybind $Mod-Shift-j shift down
+hc keybind $Mod-Shift-k shift up
+hc keybind $Mod-Shift-l shift right
+
+# splitting frames
+hc keybind $Mod-u split bottom 0.5
+hc keybind $Mod-o split right 0.5
+hc keybind $Mod-Control-space split explode
+
+# resizing frames
+resizestep=0.05
+hc keybind $Mod-Control-h resize left +$resizestep
+hc keybind $Mod-Control-j resize down +$resizestep
+hc keybind $Mod-Control-k resize up +$resizestep
+hc keybind $Mod-Control-l resize right +$resizestep
+hc keybind $Mod-Control-Left resize left +$resizestep
+hc keybind $Mod-Control-Down resize down +$resizestep
+hc keybind $Mod-Control-Up resize up +$resizestep
+hc keybind $Mod-Control-Right resize right +$resizestep
+
+# tags
+tag_names=("dev" "www" "sys" "doc" "vbox" "chat" "mus" "vid" "gfx")
+tag_keys=( {1..9} 0 )
+
+hc rename default "${tag_names[0]}" || true
+for i in ${!tag_names[@]} ; do
+ hc add "${tag_names[$i]}"
+ key="${tag_keys[$i]}"
+ if ! [ -z "$key" ] ; then
+ hc keybind "$Mod-$key" use_index "$i"
+ hc keybind "$Mod-Shift-$key" move_index "$i"
+ fi
+done
+
+# cycle through tags
+hc keybind $Mod-period use_index +1 --skip-visible
+hc keybind $Mod-comma use_index -1 --skip-visible
+
+# layouting
+hc keybind $Mod-r remove
+hc keybind $Mod-s floating toggle
+hc keybind $Mod-f fullscreen toggle
+hc keybind $Mod-p pseudotile toggle
+# The following cycles through the available layouts within a frame, but skips
+# layouts, if the layout change wouldn't affect the actual window positions.
+# I.e. if there are two windows within a frame, the grid layout is skipped.
+hc keybind $Mod-space \
+ or , and . compare tags.focus.curframe_wcount = 2 \
+ . cycle_layout +1 vertical horizontal max vertical grid \
+ , cycle_layout +1
+
+# mouse
+hc mouseunbind --all
+hc mousebind $Mod-Button1 move
+hc mousebind $Mod-Button2 zoom
+hc mousebind $Mod-Button3 resize
+
+# focus
+hc keybind $Mod-BackSpace cycle_monitor
+hc keybind $Mod-Tab cycle_all +1
+hc keybind $Mod-Shift-Tab cycle_all -1
+hc keybind $Mod-c cycle
+hc keybind $Mod-i jumpto urgent
+
+# theme
+hc attr theme.tiling.reset 1
+hc attr theme.floating.reset 1
+hc set frame_border_active_color '#222222'
+hc set frame_border_normal_color '#101010'
+hc set frame_bg_normal_color '#565656'
+hc set frame_bg_active_color '#345F0C'
+hc set frame_border_width 1
+hc set always_show_frame 0
+hc set frame_bg_transparent 1
+hc set frame_transparent_width 0
+hc set frame_padding 0
+hc set focus_follows_mouse 1
+
+hc attr theme.active.color '#9fbc00'
+hc attr theme.normal.color '#454545'
+hc attr theme.urgent.color orange
+hc attr theme.inner_width 0
+hc attr theme.inner_color black
+hc attr theme.border_width 3
+hc attr theme.floating.border_width 4
+hc attr theme.floating.outer_width 1
+hc attr theme.floating.outer_color black
+hc attr theme.active.inner_color '#3E4A00'
+hc attr theme.active.outer_color '#3E4A00'
+hc attr theme.background_color '#141414'
+
+hc set window_gap 8
+hc set smart_window_surroundings 0
+hc set smart_frame_surroundings 1
+hc set mouse_recenter_gap 0
+hc set focus_crosses_monitor_boundaries 1
+hc set swap_monitors_to_get_tag 1
+
+# rules
+hc unrule -F
+#hc rule class=XTerm tag=3 # move all xterms to tag 3
+hc rule class=VirtualBox tag=5 # move all VMs to tag 5
+hc rule title='Oracle VM VirtualBox Manager' tag=5
+hc rule class=VirtualBox pseudotile=on
+hc rule class=VirtualBox fullscreen=on
+hc rule focus=on # normally focus new clients
+#hc rule focus=off # normally do not focus new clients
+# give focus to most common terminals
+#hc rule class~'(.*[Rr]xvt.*|.*[Tt]erm|Konsole)' focus=on
+hc rule windowtype~'_NET_WM_WINDOW_TYPE_(DIALOG|UTILITY|SPLASH)' pseudotile=on
+hc rule windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on
+hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK|DESKTOP)' manage=off
+
+# unlock, just to be sure
+hc unlock
+
+herbstclient set tree_style '╾│ ├└╼─┐'
+
+# do multi monitor setup here, e.g.:
+# hc set_monitors 1280x1024+0+0 1280x1024+1280+0
+# or simply:
+# hc detect_monitors
+hc set_monitors 1920x1060+0+20 1920x1060+1920+20 1920x1060+3840+20
+
+# find the panel
+panel=~/.config/herbstluftwm/panel.sh
+[ -x "$panel" ] || panel=/etc/xdg/herbstluftwm/panel.sh
+for monitor in $(herbstclient list_monitors | cut -d: -f1) ; do
+ # start it on each monitor
+ "$panel" $monitor &
+done
+
diff --git a/.config/herbstluftwm/panel.sh b/.config/herbstluftwm/panel.sh
new file mode 100755
index 0000000..43590fd
--- /dev/null
+++ b/.config/herbstluftwm/panel.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+# Terminate already running bar instances
+killall -q polybar
+
+# Wait until the processes have been shut down
+while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
+
+if type "xrandr"; then
+ for m in $(xrandr --query | grep " connected" | cut -d" " -f1); do
+ MONITOR=$m polybar --reload mainbar-herbst &
+ done
+else
+ polybar --reload mainbar-herbst &
+fi
+
+echo "Bars launched..."
diff --git a/.config/herbstluftwm/xmobar b/.config/herbstluftwm/xmobar
new file mode 100755
index 0000000..0cd0252
--- /dev/null
+++ b/.config/herbstluftwm/xmobar
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+$HOME/.config/herbstluftwm/xmobar-tags | xmobar -x 0 -B "#292d3e" -F "#ffffff" ~/.config/xmobar/xmobarrc2 &
+$HOME/.config/herbstluftwm/xmobar-tags | xmobar -x 1 -B "#292d3e" -F "#ffffff" ~/.config/xmobar/xmobarrc1 &
+$HOME/.config/herbstluftwm/xmobar-tags | xmobar -x 2 -B "#292d3e" -F "#ffffff" ~/.config/xmobar/xmobarrc0 &
+
+echo "Bars launched..."
diff --git a/.config/herbstluftwm/xmobar-tags b/.config/herbstluftwm/xmobar-tags
new file mode 100755
index 0000000..ba937c6
--- /dev/null
+++ b/.config/herbstluftwm/xmobar-tags
@@ -0,0 +1,22 @@
+#!/bin/bash
+## HLWM Xmobar Tag Status ######
+# Version 0.1 by Scott Garrett #
+# Wintervenom [(at)] gmail.com #
+################################
+
+hc () {
+ herbstclient "$@"
+}
+
+tags () {
+ printf '[%s] ' $(hc tag_status)
+ echo
+}
+
+set -f
+IFS=$'\t'
+tags
+hc -i tag_changed |
+while read hook tag mon; do
+ tags
+done
diff --git a/.config/hypr/hypridle.conf b/.config/hypr/hypridle.conf
new file mode 100644
index 0000000..2bfc9c4
--- /dev/null
+++ b/.config/hypr/hypridle.conf
@@ -0,0 +1,6 @@
+
+listener {
+ timeout = 300 # 5.5min
+ on-timeout = hyprctl dispatch dpms off # command to run when timeout has passed
+ on-resume = hyprctl dispatch dpms on # command to run when activity is detected after timeout has fired.
+}
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
new file mode 100644
index 0000000..e38ff97
--- /dev/null
+++ b/.config/hypr/hyprland.conf
@@ -0,0 +1,360 @@
+#pragma once
+
+#include
+
+# #######################################################################################
+# AUTOGENERATED HYPR CONFIG.
+# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT,
+# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
+# #######################################################################################
+
+# This is an example Hyprland config file.
+# Refer to the wiki for more information.
+# https://wiki.hyprland.org/Configuring/Configuring-Hyprland/
+
+# Please note not all available settings / options are set here.
+# For a full list, see the wiki
+
+# You can split this configuration into multiple files
+# Create your files separately and then link them to this file like this:
+# source = ~/.config/hypr/myColors.conf
+
+
+################
+### MONITORS ###
+################
+
+# See https://wiki.hyprland.org/Configuring/Monitors/
+# To list all available monitors (active and inactive):
+# hyprctl monitors all
+# monitor= name, resolution, pos, scale
+
+### DT'S HOME COMPUTER
+# monitor = DP-1, 1920x1080, 1920x0, 1
+# monitor = DP-2, 1920x1080, 0x0, 1
+# monitor = HDMI-A-1, 1920x1080, 3840x0, 1
+
+source = ~/.config/hypr/monitors.conf
+
+###################
+### MY PROGRAMS ###
+###################
+
+# See https://wiki.hyprland.org/Configuring/Keywords/
+
+# Set programs that you use
+$terminal = alacritty
+$fileManager = pcmanfm
+$menu = rofi -show drun
+$emacs = emacsclient -c -a 'emacs' # The space at the end is IMPORTANT!
+$reset = hyprctl dispatch submap reset && #use a variable to keep things more readable
+
+#################
+### AUTOSTART ###
+#################
+
+# Autostart necessary processes (like notifications daemons, status bars, etc.)
+# Or execute your favorite apps at launch like this:
+
+# exec-once = $terminal
+# exec-once = nm-applet &
+exec-once = waybar & hyprpaper
+exec-once = /usr/bin/emacs --daemon &
+exec-once = nextcloud &
+exec-once = flameshot &
+
+#############################
+### ENVIRONMENT VARIABLES ###
+#############################
+
+# See https://wiki.hyprland.org/Configuring/Environment-variables/
+
+env = XCURSOR_SIZE,24
+env = HYPRCURSOR_SIZE,24
+env = XDG_SESSION_TYPE,wayland
+# env = LIBVA_DRIVER_NAME,nvidia
+# env = GBM_BACKEND,nvidia-drm
+# env = __GLX_VENDOR_LIBRARY_NAME,nvidia
+
+cursor {
+ no_hardware_cursors = true
+}
+
+#####################
+### LOOK AND FEEL ###
+#####################
+
+# Refer to https://wiki.hyprland.org/Configuring/Variables/
+
+# https://wiki.hyprland.org/Configuring/Variables/#general
+general {
+ gaps_in = 4
+ gaps_out = 8
+
+ border_size = 2
+
+ # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
+ col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
+ col.inactive_border = rgba(595959aa)
+
+ # Set to true enable resizing windows by clicking and dragging on borders and gaps
+ resize_on_border = false
+
+ # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
+ allow_tearing = false
+
+ layout = dwindle
+}
+
+# https://wiki.hyprland.org/Configuring/Variables/#decoration
+decoration {
+ rounding = 8
+
+ # Change transparency of focused and unfocused windows
+ active_opacity = 1.0
+ inactive_opacity = 1.0
+
+ shadow {
+ enabled = true
+ range = 4
+ render_power = 3
+ color = rgba(1a1a1aee)
+ }
+
+ # https://wiki.hyprland.org/Configuring/Variables/#blur
+ blur {
+ enabled = true
+ size = 3
+ passes = 1
+
+ vibrancy = 0.1696
+ }
+}
+
+# https://wiki.hyprland.org/Configuring/Variables/#animations
+animations {
+ enabled = true
+
+ # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
+
+ bezier = myBezier, 0.05, 0.9, 0.1, 1.05
+
+ animation = windows, 1, 7, myBezier
+ animation = windowsOut, 1, 7, default, popin 80%
+ animation = border, 1, 10, default
+ animation = borderangle, 1, 8, default
+ animation = fade, 1, 7, default
+ animation = workspaces, 1, 6, default
+}
+
+# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
+dwindle {
+ pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
+ preserve_split = true # You probably want this
+}
+
+# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
+master {
+ new_status = master
+}
+
+# https://wiki.hyprland.org/Configuring/Variables/#misc
+misc {
+ force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
+ disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
+}
+
+#############
+### INPUT ###
+#############
+
+# https://wiki.hyprland.org/Configuring/Variables/#input
+input {
+ kb_layout = us
+ kb_variant =
+ kb_model =
+ kb_options =
+ kb_rules =
+
+ follow_mouse = 1
+
+ sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
+
+ touchpad {
+ natural_scroll = false
+ }
+}
+
+# https://wiki.hyprland.org/Configuring/Variables/#gestures
+gestures {
+ workspace_swipe = false
+}
+
+# Example per-device config
+# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
+device {
+ name = epic-mouse-v1
+ sensitivity = -0.5
+}
+
+###################
+### KEYBINDINGS ###
+###################
+
+# See https://wiki.hyprland.org/Configuring/Keywords/
+$mainMod = SUPER # Sets "Windows" key as main modifier
+
+# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
+bind = $mainMod, Return, exec, $terminal
+bind = $mainMod SHIFT, Return, exec, $menu
+bind = $mainMod SHIFT, C, killactive,
+# bind = $mainMod SHIFT, Q, exit,
+bind = $mainMod SHIFT, Q, exec, dm-logout -r
+bind = $mainMod, F, fullscreen, 0
+bind = $mainMod, V, togglefloating,
+bind = $mainMod, D, pseudo, # dwindle
+bind = $mainMod, T, togglesplit, # dwindle
+
+# Move focus with SUPER + arrow keys
+bind = $mainMod, left, movefocus, l
+bind = $mainMod, down, movefocus, d
+bind = $mainMod, up, movefocus, u
+bind = $mainMod, right, movefocus, r
+
+# Move focus with SUPER + h/j/k/l
+bind = $mainMod, H, movefocus, l
+bind = $mainMod, J, movefocus, d
+bind = $mainMod, K, movefocus, u
+bind = $mainMod, L, movefocus, r
+
+# Move window around the stack with SUPER + SHIFT + arrow keys
+bind = $mainMod SHIFT, left, movewindow, l
+bind = $mainMod SHIFT, down, movewindow, d
+bind = $mainMod SHIFT, up, movewindow, u
+bind = $mainMod SHIFT, right, movewindow, r
+
+# Move window around the stack with SUPER + SHIFT + h/j/k/l
+bind = $mainMod SHIFT, H, movewindow, l
+bind = $mainMod SHIFT, J, movewindow, d
+bind = $mainMod SHIFT, K, movewindow, u
+bind = $mainMod SHIFT, L, movewindow, r
+
+# Switch workspaces with mainMod + [0-9]
+bind = $mainMod, 1, workspace, 1
+bind = $mainMod, 2, workspace, 2
+bind = $mainMod, 3, workspace, 3
+bind = $mainMod, 4, workspace, 4
+bind = $mainMod, 5, workspace, 5
+bind = $mainMod, 6, workspace, 6
+bind = $mainMod, 7, workspace, 7
+bind = $mainMod, 8, workspace, 8
+bind = $mainMod, 9, workspace, 9
+bind = $mainMod, 0, workspace, 10
+
+# Move active window to a workspace with mainMod + SHIFT + [0-9]
+bind = $mainMod SHIFT, 1, movetoworkspace, 1
+bind = $mainMod SHIFT, 2, movetoworkspace, 2
+bind = $mainMod SHIFT, 3, movetoworkspace, 3
+bind = $mainMod SHIFT, 4, movetoworkspace, 4
+bind = $mainMod SHIFT, 5, movetoworkspace, 5
+bind = $mainMod SHIFT, 6, movetoworkspace, 6
+bind = $mainMod SHIFT, 7, movetoworkspace, 7
+bind = $mainMod SHIFT, 8, movetoworkspace, 8
+bind = $mainMod SHIFT, 9, movetoworkspace, 9
+bind = $mainMod SHIFT, 0, movetoworkspace, 10
+
+# Example special workspace (scratchpad)
+bind = $mainMod, S, togglespecialworkspace, magic
+bind = $mainMod SHIFT, S, movetoworkspace, special:magic
+
+# Scroll through existing workspaces with mainMod + scroll
+bind = $mainMod, mouse_down, workspace, e+1
+bind = $mainMod, mouse_up, workspace, e-1
+
+# Move/resize windows with mainMod + LMB/RMB and dragging
+bindm = $mainMod, mouse:272, movewindow
+bindm = $mainMod, mouse:273, resizewindow
+
+# Emacs programs launched using the key chord SUPER+e followed by 'key'
+bind = $mainMod, E, submap, emacs # will switch to a submap called 'emacs'
+submap = emacs # will start a submap called "emacs"
+# sets repeatable binds for resizing the active window
+binde = , E, exec, $reset $emacs
+binde = , A, exec, $reset $emacs --eval '(emms-play-directory-tree \"~/Music/\")'
+binde = , B, exec, $reset $emacs --eval '(ibuffer)'
+binde = , D, exec, $reset $emacs --eval '(dired nil)'
+binde = , I, exec, $reset $emacs --eval '(erc)'
+binde = , S, exec, $reset $emacs --eval '(eshell)'
+binde = , V, exec, $reset $emacs --eval '(vterm)'
+binde = , W, exec, $reset $emacs --eval '(eww \"distro.tube\")'
+binde = , F4, exec, $reset killall emacs
+# use reset to go back to the global submap
+bind = , escape, submap, reset
+# will reset the submap, which will return to the global submap
+submap = reset
+
+# Rofi scripts (dmscripts) launched using the key chord SUPER+p followed by 'key'
+bind = $mainMod, P, submap, dmscripts # will switch to a submap called 'emacs'
+submap = dmscripts # will start a submap called "dmscripts"
+# sets repeatable binds for resizing the active window
+binde = , H, exec, $reset dm-hub -r
+binde = , A, exec, $reset dm-sounds -r
+binde = , B, exec, $reset dm-setbg -r # doesn't work in Wayland
+binde = , C, exec, $reset dm-colorscheme -r
+binde = , E, exec, $reset dm-confedit -r
+binde = , I, exec, $reset dm-maim -r # doesn't work in Wayland
+binde = , K, exec, $reset dm-kill -r
+binde = , M, exec, $reset dm-man -r
+binde = , N, exec, $reset dm-note -r
+binde = , O, exec, $reset dm-bookman -r
+binde = , P, exec, $reset rofi-pass
+binde = , Q, exec, $reset dm-logout -r
+binde = , R, exec, $reset dm-radio -r
+binde = , S, exec, $reset dm-websearch -r
+binde = , T, exec, $reset dm-translate -r
+# use reset to go back to the global submap
+bind = , escape, submap, reset
+# will reset the submap, which will return to the global submap
+submap = reset
+
+# Laptop multimedia keys for volume and LCD brightness
+bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
+bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
+bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
+bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
+bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
+bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
+
+# Requires playerctl
+bindl = , XF86AudioNext, exec, playerctl next
+bindl = , XF86AudioPause, exec, playerctl play-pause
+bindl = , XF86AudioPlay, exec, playerctl play-pause
+bindl = , XF86AudioPrev, exec, playerctl previous
+
+##############################
+### WINDOWS AND WORKSPACES ###
+##############################
+
+# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
+# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
+
+# Example windowrule v1
+# windowrule = float, ^(kitty)$
+
+# Example windowrule v2
+# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
+windowrulev2 = float,class:^(tasty.javafx.launcher.LauncherFxApp)$,title:^(tastytrade)$
+windowrulev2 = float,class:^(tasty.javafx.launcher.LauncherFxApp)$,title:^(tastycharts)$
+windowrulev2 = float,class:^(tasty.javafx.launcher.LauncherFxApp)$,title:^(tastytrade - Portfolio Report)$
+windowrulev2 = float,class:^(tasty.javafx.launcher.LauncherFxApp)$,title:^(Dashboard)$
+
+# Ignore maximize requests from apps. You'll probably like this.
+windowrulev2 = suppressevent maximize, class:.*
+
+# Fix some dragging issues with XWayland
+windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
+
+# Example of how you can set window rules.
+# This rule is for noborders and no rounded corners on workspace 4.
+windowrulev2 = noborder, norounding, onworkspace:4
+workspace = 4, gapsout:0, gapsin:0, border: 0, rounding:0
diff --git a/.config/hypr/hyprpaper.conf b/.config/hypr/hyprpaper.conf
new file mode 100644
index 0000000..5eda036
--- /dev/null
+++ b/.config/hypr/hyprpaper.conf
@@ -0,0 +1,19 @@
+preload = /usr/share/backgrounds/dtos-backgrounds/0188.jpg
+#if more than one preload is desired then continue to preload other backgrounds
+#preload = /path/to/next_image.png
+# .. more preloads
+
+#set the default wallpaper(s) seen on initial workspace(s) --depending on the number of monitors used
+wallpaper = DP-1,/usr/share/backgrounds/dtos-backgrounds/0188.jpg
+wallpaper = DP-2,/usr/share/backgrounds/dtos-backgrounds/0188.jpg
+wallpaper = DP-3,/usr/share/backgrounds/dtos-backgrounds/0188.jpg
+wallpaper = HDMI-A-1,/usr/share/backgrounds/dtos-backgrounds/0188.jpg
+#if more than one monitor in use, can load a 2nd image
+# wallpaper = monitor2,/path/to/next_image.png
+# .. more monitors
+
+#enable splash text rendering over the wallpaper
+splash = false
+
+#fully disable ipc
+# ipc = off
diff --git a/.config/hypr/passwmenu b/.config/hypr/passwmenu
new file mode 100755
index 0000000..c2296a2
--- /dev/null
+++ b/.config/hypr/passwmenu
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+
+shopt -s nullglob globstar
+
+typeit=0
+if [[ $1 == "--type" ]]; then
+ typeit=1
+ shift
+fi
+
+prefix=${PASSWORD_STORE_DIR-~/.password-store}
+password_files=( "$prefix"/**/*.gpg )
+password_files=( "${password_files[@]#"$prefix"/}" )
+password_files=( "${password_files[@]%.gpg}" )
+
+password=$(printf '%s\n' "${password_files[@]}" | wofi --dmenu "$@")
+
+[[ -n $password ]] || exit
+
+if [[ $typeit -eq 0 ]]; then
+ gopass show -c "$password" 2>/dev/null
+else
+ pass show "$password" | { IFS= read -r pass; printf %s "$pass"; } |
+ ydotool type --clearmodifiers --file -
+fi
\ No newline at end of file
diff --git a/.config/i3/config b/.config/i3/config
new file mode 100644
index 0000000..803390e
--- /dev/null
+++ b/.config/i3/config
@@ -0,0 +1,421 @@
+# ____ _____
+# | _ \_ _| Derek Taylor (DistroTube)
+# | | | || | http://www.youtube.com/c/DistroTube
+# | |_| || | http://www.gitlab.com/dwt1/
+# |____/ |_|
+#
+# A customized config for i3-gaps window manager (http://www.i3wm.org)
+# Based off of the config for Manjaro's i3 Community Distro.
+# Modified by Derek Taylor (http://www.gitlab.com/dwt1/ )
+# Please see http://i3wm.org/docs/userguide.html for a complete reference!
+
+# Set mod key (Mod1=, Mod4=)
+set $mod Mod4
+
+# set default desktop layout (default is tiling)
+# workspace_layout tabbed
+
+# Configure border style
+new_window pixel 1
+new_float normal
+
+# Hide borders
+hide_edge_borders none
+
+# change borders
+bindsym $mod+u border none
+bindsym $mod+y border pixel 1
+bindsym $mod+n border normal
+
+# Font for window titles. Will also be used by the bar unless a different font
+# is used in the bar {} block below.
+font xft:URWGothic-Book 11
+
+# Use Mouse+$mod to drag floating windows
+floating_modifier $mod
+
+# start a $myTerm
+set $myTerm st
+bindsym $mod+Return exec $myTerm
+
+# kill focused window
+bindsym $mod+Shift+c kill
+
+# start program launcher
+bindsym $mod+Shift+Return exec --no-startup-id rofi -show run
+
+# launch categorized menu
+bindsym $mod+' exec --no-startup-id morc_menu
+
+# Apps Launched with +
+bindsym $mod+KP_End exec $myTerm -e lynx -cfg=~/.lynx.cfg -lss=~/.lynx.lss http://www.distrowatch.com
+bindsym $mod+KP_Down exec $myTerm -e sh ./scripts/googler-script.sh
+bindsym $mod+KP_Page_Down exec $myTerm -e newsboat
+bindsym $mod+KP_Left exec $myTerm -e rtv
+bindsym $mod+KP_Begin exec $myTerm -e neomutt
+bindsym $mod+KP_Right exec $myTerm -e twitch-curses
+bindsym $mod+KP_Home exec $myTerm -e sh ./scripts/haxor-news.sh
+bindsym $mod+KP_Up exec $myTerm -e toot curses
+bindsym $mod+KP_Page_Up exec $myTerm -e sh ./scripts/tig-script.sh
+
+# Apps Launched with + +
+bindsym $mod+Shift+KP_1 exec $myTerm -e vifm
+bindsym $mod+Shift+KP_2 exec $myTerm -e joplin
+bindsym $mod+Shift+KP_3 exec $myTerm -e cmus
+bindsym $mod+Shift+KP_4 exec $myTerm -e irssi
+bindsym $mod+Shift+KP_5 exec $myTerm -e rtorrent
+bindsym $mod+Shift+KP_6 exec $myTerm -e youtube-viewer
+bindsym $mod+Shift+KP_7 exec $myTerm -e ncpamixer
+bindsym $mod+Shift+KP_8 exec $myTerm -e calcurse
+bindsym $mod+Shift+KP_9 exec $myTerm -e vim ~/.config/i3/config
+
+# Apps Launched with + +
+bindsym $mod+Ctrl+KP_End exec $myTerm -e htop
+bindsym $mod+Ctrl+KP_Down exec $myTerm -e gtop
+bindsym $mod+Ctrl+KP_Page_Down exec $myTerm -e nmon
+bindsym $mod+Ctrl+KP_Left exec $myTerm -e glances
+bindsym $mod+Ctrl+KP_Begin exec $myTerm -e s-tui
+bindsym $mod+Ctrl+KP_Right exec $myTerm -e httping -KY --draw-phase localhost
+bindsym $mod+Ctrl+KP_Home exec $myTerm -e cmatrix -C cyan
+bindsym $mod+Ctrl+KP_Up exec $myTerm -e pianobar
+bindsym $mod+Ctrl+KP_Page_Up exec $myTerm -e wopr report.xml
+
+################################################################################################
+## sound-section - DO NOT EDIT if you wish to automatically upgrade Alsa -> Pulseaudio later! ##
+################################################################################################
+
+exec --no-startup-id volumeicon
+#exec --no-startup-id pulseaudio
+#exec --no-startup-id pa-applet
+
+################################################################################################
+
+# Screen brightness controls
+# bindsym XF86MonBrightnessUp exec "xbacklight -inc 10; notify-send 'brightness up'"
+# bindsym XF86MonBrightnessDown exec "xbacklight -dec 10; notify-send 'brightness down'"
+
+# Start Applications
+bindsym $mod+Ctrl+b exec $myTerm -e 'bmenu'
+bindsym $mod+F1 exec firefox
+bindsym $mod+F2 exec obs
+bindsym $mod+F3 exec kdenlive
+bindsym $mod+F5 exec $myTerm -e 'mocp'
+bindsym $mod+Shift+d --release exec "killall dunst; exec notify-send 'restart dunst'"
+bindsym Print exec --no-startup-id i3-scrot
+bindsym $mod+Print --release exec --no-startup-id i3-scrot -w
+bindsym $mod+Shift+Print --release exec --no-startup-id i3-scrot -s
+bindsym $mod+Ctrl+h exec xdg-open /usr/share/doc/manjaro/i3_help.pdf
+bindsym $mod+Ctrl+x --release exec --no-startup-id xkill
+
+# focus_follows_mouse no
+
+# change focus
+bindsym $mod+h focus left
+bindsym $mod+j focus down
+bindsym $mod+k focus up
+bindsym $mod+l focus right
+
+# alternatively, you can use the arrow keys:
+bindsym $mod+Left focus left
+bindsym $mod+Down focus down
+bindsym $mod+Up focus up
+bindsym $mod+Right focus right
+
+# move focused window
+bindsym $mod+Shift+h move left
+bindsym $mod+Shift+j move down
+bindsym $mod+Shift+k move up
+bindsym $mod+Shift+l move right
+
+# alternatively, you can use the arrow keys:
+bindsym $mod+Shift+Left move left
+bindsym $mod+Shift+Down move down
+bindsym $mod+Shift+Up move up
+bindsym $mod+Shift+Right move right
+
+# workspace back and forth (with/without active container)
+workspace_auto_back_and_forth yes
+bindsym $mod+b workspace back_and_forth
+bindsym $mod+Shift+b move container to workspace back_and_forth; workspace back_and_forth
+
+# split orientation
+bindsym $mod+z split h;exec notify-send 'tile horizontally'
+bindsym $mod+v split v;exec notify-send 'tile vertically'
+bindsym $mod+q split toggle
+
+# toggle fullscreen mode for the focused container
+bindsym $mod+f fullscreen toggle
+
+# change container layout (stacked, tabbed, toggle split)
+bindsym $mod+s layout stacking
+bindsym $mod+w layout tabbed
+bindsym $mod+e layout toggle split
+
+# toggle tiling / floating
+bindsym $mod+Shift+space floating toggle
+
+# change focus between tiling / floating windows
+bindsym $mod+space focus mode_toggle
+
+# toggle sticky
+# bindsym $mod+Shift+s sticky toggle
+bindsym $mod+Shift+s exec ~/.i3/i3-display-swap.sh
+
+# focus the parent container
+bindsym $mod+a focus parent
+
+# move the currently focused window to the scratchpad
+bindsym $mod+Shift+minus move scratchpad
+
+# Show the next scratchpad window or hide the focused scratchpad window.
+# If there are multiple scratchpad windows, this command cycles through them.
+bindsym $mod+minus scratchpad show
+
+#navigate workspaces next / previous
+bindsym $mod+Ctrl+Right workspace next
+bindsym $mod+Ctrl+Left workspace prev
+
+# Workspace names
+# to display names or symbols instead of plain workspace numbers you can use
+# something like: set $ws1 1:mail
+# set $ws2 2:
+set $ws1 1
+set $ws2 2
+set $ws3 3
+set $ws4 4
+set $ws5 5
+set $ws6 6
+set $ws7 7
+set $ws8 8
+
+# switch to workspace
+bindsym $mod+1 workspace $ws1
+bindsym $mod+2 workspace $ws2
+bindsym $mod+3 workspace $ws3
+bindsym $mod+4 workspace $ws4
+bindsym $mod+5 workspace $ws5
+bindsym $mod+6 workspace $ws6
+bindsym $mod+7 workspace $ws7
+bindsym $mod+8 workspace $ws8
+
+# Move focused container to workspace
+bindsym $mod+Ctrl+1 move container to workspace $ws1
+bindsym $mod+Ctrl+2 move container to workspace $ws2
+bindsym $mod+Ctrl+3 move container to workspace $ws3
+bindsym $mod+Ctrl+4 move container to workspace $ws4
+bindsym $mod+Ctrl+5 move container to workspace $ws5
+bindsym $mod+Ctrl+6 move container to workspace $ws6
+bindsym $mod+Ctrl+7 move container to workspace $ws7
+bindsym $mod+Ctrl+8 move container to workspace $ws8
+
+# Move to workspace with focused container
+bindsym $mod+Shift+1 move container to workspace $ws1; workspace $ws1
+bindsym $mod+Shift+2 move container to workspace $ws2; workspace $ws2
+bindsym $mod+Shift+3 move container to workspace $ws3; workspace $ws3
+bindsym $mod+Shift+4 move container to workspace $ws4; workspace $ws4
+bindsym $mod+Shift+5 move container to workspace $ws5; workspace $ws5
+bindsym $mod+Shift+6 move container to workspace $ws6; workspace $ws6
+bindsym $mod+Shift+7 move container to workspace $ws7; workspace $ws7
+bindsym $mod+Shift+8 move container to workspace $ws8; workspace $ws8
+
+# Open applications on specific workspaces
+# assign [class="Thunderbird"] $ws1
+# assign [class="Firefox"] $ws2
+# assign [class="Pcmanfm"] $ws3
+
+# Open specific applications in floating mode
+for_window [title="alsamixer"] floating enable border pixel 1
+for_window [class="Clipgrab"] floating enable
+for_window [title="File Transfer*"] floating enable
+for_window [class="Galculator"] floating enable border pixel 1
+for_window [class="GParted"] floating enable border normal
+for_window [title="i3_help"] floating enable sticky enable border normal
+for_window [class="Lightdm-gtk-greeter-settings"] floating enable
+for_window [class="Lxappearance"] floating enable sticky enable border normal
+for_window [class="Manjaro-hello"] floating enable
+for_window [class="Manjaro Settings Manager"] floating enable border normal
+for_window [title="MuseScore: Play Panel"] floating enable
+for_window [class="Nitrogen"] floating enable sticky enable border normal
+for_window [class="Oblogout"] fullscreen enable
+for_window [class="octopi"] floating enable
+for_window [class="Pamac-manager"] floating enable
+for_window [class="Pavucontrol"] floating enable
+for_window [class="qt5ct"] floating enable sticky enable border normal
+for_window [class="Qtconfig-qt4"] floating enable sticky enable border normal
+for_window [class="Simple-scan"] floating enable border normal
+for_window [class="(?i)System-config-printer.py"] floating enable border normal
+for_window [class="Thus"] floating enable border normal
+for_window [class="Timeset-gui"] floating enable border normal
+for_window [class="(?i)virtualbox"] floating enable border normal
+for_window [class="(?i)virtualbox"] fullscreen enable
+for_window [class="Xfburn"] floating enable
+
+# switch to workspace with urgent window automatically
+for_window [urgent=latest] focus
+
+# reload the configuration file
+bindsym $mod+Ctrl+r reload
+
+# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
+bindsym $mod+Shift+r restart
+
+# exit i3 (logs you out of your X session)
+# bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
+
+# Set shut down, restart and locking features
+bindsym $mod+0 mode "$mode_system"
+set $mode_system (l)ock, (e)xit, switch_(u)ser, (s)uspend, (h)ibernate, (r)eboot, (Shift+s)hutdown
+mode "$mode_system" {
+ bindsym l exec --no-startup-id i3exit lock, mode "default"
+ bindsym s exec --no-startup-id i3exit suspend, mode "default"
+ bindsym u exec --no-startup-id i3exit switch_user, mode "default"
+ bindsym e exec --no-startup-id i3exit logout, mode "default"
+ bindsym h exec --no-startup-id i3exit hibernate, mode "default"
+ bindsym r exec --no-startup-id i3exit reboot, mode "default"
+ bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default"
+
+ # exit system mode: "Enter" or "Escape"
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+
+# Resize window (you can also use the mouse for that)
+bindsym $mod+r mode "resize"
+mode "resize" {
+ # Originally set to jkl;.
+ # These bindings trigger as soon as you enter the resize mode
+ # Pressing left will shrink the window’s width.
+ # Pressing right will grow the window’s width.
+ # Pressing up will shrink the window’s height.
+ # Pressing down will grow the window’s height.
+ bindsym h resize shrink width 4 px or 4 ppt
+ bindsym j resize grow height 4 px or 4 ppt
+ bindsym k resize shrink height 4 px or 4 ppt
+ bindsym l resize grow width 4 px or 4 ppt
+
+ # same bindings, but for the arrow keys
+ bindsym Left resize shrink width 10 px or 10 ppt
+ bindsym Down resize grow height 10 px or 10 ppt
+ bindsym Up resize shrink height 10 px or 10 ppt
+ bindsym Right resize grow width 10 px or 10 ppt
+
+ # exit resize mode: Enter or Escape
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+
+# Lock screen
+bindsym $mod+9 exec --no-startup-id blurlock
+
+# Autostart applications
+exec_always --no-startup-id $HOME/.config/polybar/launch.sh
+exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
+exec --no-startup-id nitrogen --restore; sleep 1; picom --config ~/.config/picom/picom.conf
+exec --no-startup-id numlockx off
+exec --no-startup-id nm-applet
+exec --no-startup-id xfce4-power-manager
+# exec --no-startup-id xautolock -time 10 -locker blurlock
+exec_always --no-startup-id ff-theme-util
+exec_always --no-startup-id fix_xcursor
+
+# Color palette used for the terminal ( ~/.Xresources file )
+# Colors are gathered based on the documentation:
+# https://i3wm.org/docs/userguide.html#xresources
+# Change the variable name at the place you want to match the color
+# of your terminal like this:
+# [example]
+# If you want your bar to have the same background color as your
+# terminal background change the line 362 from:
+# background #14191D
+# to:
+# background $term_background
+# Same logic applied to everything else.
+set_from_resource $term_background background
+set_from_resource $term_foreground foreground
+set_from_resource $term_color0 color0
+set_from_resource $term_color1 color1
+set_from_resource $term_color2 color2
+set_from_resource $term_color3 color3
+set_from_resource $term_color4 color4
+set_from_resource $term_color5 color5
+set_from_resource $term_color6 color6
+set_from_resource $term_color7 color7
+set_from_resource $term_color8 color8
+set_from_resource $term_color9 color9
+set_from_resource $term_color10 color10
+set_from_resource $term_color11 color11
+set_from_resource $term_color12 color12
+set_from_resource $term_color13 color13
+set_from_resource $term_color14 color14
+set_from_resource $term_color15 color15
+
+# Theme colors
+# class border backgr. text indic. child_border
+ client.focused #556064 #556064 #80FFF9 #FDF6E3
+ client.focused_inactive #2F3D44 #2F3D44 #AD69AF #454948
+ client.unfocused #2F3D44 #2F3D44 #AD69AF #454948
+ client.urgent #CB4B16 #FDF6E3 #AD69AF #268BD2
+ client.placeholder #000000 #0c0c0c #ffffff #000000
+
+ client.background #2B2C2B
+
+#############################
+### settings for i3-gaps: ###
+#############################
+
+# Set inner/outer gaps
+gaps inner 10
+gaps outer -4
+
+# Additionally, you can issue commands with the following syntax. This is useful to bind keys to changing the gap size.
+# gaps inner|outer current|all set|plus|minus
+# gaps inner all set 10
+# gaps outer all plus 5
+
+# Smart gaps (gaps used if only more than one container on the workspace)
+smart_gaps on
+
+# Smart borders (draw borders around container only if it is not the only container on this workspace)
+# on|no_gaps (on=always activate and no_gaps=only activate if the gap size to the edge of the screen is 0)
+smart_borders on
+
+# Press $mod+Shift+g to enter the gap mode.
+# Choose o or i for modifying outer/inner gaps.
+# Press one of + / - (in-/decrement for current workspace)
+# or 0 (remove gaps for current workspace). If you also press Shift
+# with these keys, the change will be global for all workspaces.
+set $mode_gaps Gaps: (o) outer, (i) inner
+set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
+set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
+bindsym $mod+Shift+g mode "$mode_gaps"
+
+mode "$mode_gaps" {
+ bindsym o mode "$mode_gaps_outer"
+ bindsym i mode "$mode_gaps_inner"
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+mode "$mode_gaps_inner" {
+ bindsym plus gaps inner current plus 5
+ bindsym minus gaps inner current minus 5
+ bindsym 0 gaps inner current set 0
+
+ bindsym Shift+plus gaps inner all plus 5
+ bindsym Shift+minus gaps inner all minus 5
+ bindsym Shift+0 gaps inner all set 0
+
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+mode "$mode_gaps_outer" {
+ bindsym plus gaps outer current plus 5
+ bindsym minus gaps outer current minus 5
+ bindsym 0 gaps outer current set 0
+
+ bindsym Shift+plus gaps outer all plus 5
+ bindsym Shift+minus gaps outer all minus 5
+ bindsym Shift+0 gaps outer all set 0
+
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
diff --git a/.config/i3/i3-display-swap.sh b/.config/i3/i3-display-swap.sh
new file mode 100755
index 0000000..f0bf5a1
--- /dev/null
+++ b/.config/i3/i3-display-swap.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+# requires jq
+
+IFS=:
+i3-msg -t get_outputs | jq -r '.[]|"\(.name):\(.current_workspace)"' | grep -v '^null:null$' | \
+while read -r name current_workspace; do
+ echo "moving ${current_workspace} right..."
+ i3-msg workspace "${current_workspace}"
+ i3-msg move workspace to output right
+done
diff --git a/.config/leftwm/config.ron b/.config/leftwm/config.ron
new file mode 100644
index 0000000..7b7cad2
--- /dev/null
+++ b/.config/leftwm/config.ron
@@ -0,0 +1,97 @@
+// _ ___ ___ _
+// | | / __)_ / __|_)
+// | | ____| |__| |_ _ _ _ ____ ____ ___ ____ | |__ _ ____ ____ ___ ____
+// | |/ _ ) __) _) | | | \ / ___) _ \| _ \| __) |/ _ | / ___) _ \| _ \
+// | ( (/ /| | | |_| | | | | | | ( (__| |_| | | | | | | ( ( | |_| | | |_| | | | |
+// |_|\____)_| \___)____|_|_|_| \____)___/|_| |_|_| |_|\_|| (_)_| \___/|_| |_|
+// A WindowManager for Adventurers (____/
+// For info about configuration please visit https://github.com/leftwm/leftwm/wiki
+
+#![enable(implicit_some)]
+(
+ modkey: "Mod4",
+ mousekey: "Mod4",
+ workspaces: [],
+ tags: [
+ " dev ",
+ " www ",
+ " sys ",
+ " doc ",
+ " vbox ",
+ " chat ",
+ " mus ",
+ " vid ",
+ " gfx ",
+ ],
+ max_window_width: None,
+ layouts: [
+ MainAndVertStack,
+ MainAndHorizontalStack,
+ MainAndDeck,
+ GridHorizontal,
+ EvenHorizontal,
+ EvenVertical,
+ Fibonacci,
+ LeftMain,
+ CenterMain,
+ CenterMainBalanced,
+ CenterMainFluid,
+ Monocle,
+ RightWiderLeftStack,
+ LeftWiderRightStack,
+ ],
+ layout_mode: Workspace,
+ insert_behavior: Bottom,
+ scratchpad: [
+ (name: "Alacritty", value: "alacritty", x: 860, y: 390, height: 300, width: 200),
+ ],
+ window_rules: [],
+ disable_current_tag_swap: false,
+ disable_tile_drag: false,
+ disable_window_snap: true,
+ focus_behaviour: Sloppy,
+ focus_new_windows: true,
+ sloppy_mouse_follows_focus: true,
+ keybind: [
+ (command: Execute, value: "dmenu_run", modifier: ["modkey", "Shift"], key: "Return"),
+ (command: Execute, value: "alacritty", modifier: ["modkey"], key: "Return"),
+ (command: CloseWindow, value: "", modifier: ["modkey", "Shift"], key: "c"),
+ (command: SoftReload, value: "", modifier: ["modkey", "Shift"], key: "r"),
+ (command: Execute, value: "pkill leftwm", modifier: ["modkey", "Shift"], key: "q"),
+ (command: Execute, value: "slock", modifier: ["modkey", "Control"], key: "l"),
+ (command: MoveToLastWorkspace, value: "", modifier: ["modkey", "Shift"], key: "w"),
+ (command: SwapTags, value: "", modifier: ["modkey"], key: "w"),
+ (command: MoveWindowDown, value: "", modifier: ["modkey", "Shift"], key: "k"),
+ (command: MoveWindowUp, value: "", modifier: ["modkey", "Shift"], key: "j"),
+ (command: MoveWindowTop, value: "", modifier: ["modkey", "Shift"], key: "m"),
+ (command: FocusWindowDown, value: "", modifier: ["modkey"], key: "k"),
+ (command: FocusWindowUp, value: "", modifier: ["modkey"], key: "j"),
+ (command: NextLayout, value: "", modifier: ["modkey"], key: "Tab"),
+ (command: PreviousLayout, value: "", modifier: ["modkey", "Shift"], key: "Tab"),
+ (command: FocusWorkspaceNext, value: "", modifier: ["modkey"], key: "period"),
+ (command: FocusWorkspacePrevious, value: "", modifier: ["modkey"], key: "comma"),
+ (command: ToggleFullScreen, modifier: ["modkey"], key: "space"),
+ (command: GotoTag, value: "1", modifier: ["modkey"], key: "1"),
+ (command: GotoTag, value: "2", modifier: ["modkey"], key: "2"),
+ (command: GotoTag, value: "3", modifier: ["modkey"], key: "3"),
+ (command: GotoTag, value: "4", modifier: ["modkey"], key: "4"),
+ (command: GotoTag, value: "5", modifier: ["modkey"], key: "5"),
+ (command: GotoTag, value: "6", modifier: ["modkey"], key: "6"),
+ (command: GotoTag, value: "7", modifier: ["modkey"], key: "7"),
+ (command: GotoTag, value: "8", modifier: ["modkey"], key: "8"),
+ (command: GotoTag, value: "9", modifier: ["modkey"], key: "9"),
+ (command: MoveToTag, value: "1", modifier: ["modkey", "Shift"], key: "1"),
+ (command: MoveToTag, value: "2", modifier: ["modkey", "Shift"], key: "2"),
+ (command: MoveToTag, value: "3", modifier: ["modkey", "Shift"], key: "3"),
+ (command: MoveToTag, value: "4", modifier: ["modkey", "Shift"], key: "4"),
+ (command: MoveToTag, value: "5", modifier: ["modkey", "Shift"], key: "5"),
+ (command: MoveToTag, value: "6", modifier: ["modkey", "Shift"], key: "6"),
+ (command: MoveToTag, value: "7", modifier: ["modkey", "Shift"], key: "7"),
+ (command: MoveToTag, value: "8", modifier: ["modkey", "Shift"], key: "8"),
+ (command: MoveToTag, value: "9", modifier: ["modkey", "Shift"], key: "9"),
+ (command: IncreaseMainWidth, value: "1", modifier: ["modkey", "Shift"], key: "l"),
+ (command: DecreaseMainWidth, value: "1", modifier: ["modkey", "Shift"], key: "h"),
+ (command: Execute, value: "emacsclient -c -a 'emacs'", modifier: ["modkey"], key: "e"),
+ ],
+ state_path: None,
+)
diff --git a/.config/leftwm/themes/README.md b/.config/leftwm/themes/README.md
new file mode 100644
index 0000000..007e680
--- /dev/null
+++ b/.config/leftwm/themes/README.md
@@ -0,0 +1,48 @@
+# Why have themes
+
+With LeftWM, there are two types of configs:
+* **LeftWM Configuration files:** LeftWM configurations are specific to you and don’t change for different themes. These are settings like keybindings, workspace locations, and names of desktops/tags. These settings can be found in `~/.config/leftwm/config.toml`.
+
+* **Theme Configuration files:** The appearance of your desktop is different. It’s fun to try new looks and feels. It’s fun to tweak and customize the appearance (AKA: [ricing](https://www.reddit.com/r/unixporn/comments/3iy3wd/stupid_question_what_is_ricing/)). It’s fun to share so others can experience your awesome desktop! LeftWM is built around this concept. By pulling all these settings out into themes, you can now easily tweak, switch, and share your experiences. This configuration is spread between `theme.toml` and related files contained within a theme's folder.
+
+
+# We want your themes
+
+We are looking to expand the list of available themes for an upcoming release. If you enjoy making desktops look good please consider sharing by making a pull request on [the community themes repository](https://github.com/leftwm/leftwm-community-themes).
+
+
+# Requirements for a theme
+
+A theme has only two requirements. An “up” and a “down” executable/script. They can be written in whatever makes you happy. The up script you guessed it starts up all the things that make your script unique and awesome. The down script restores the environment to an un-themes state. A theme should be self contained if possible so that it can be shared and doesn’t interfere with other themes. For example when booting an application with a config file, put the config file in the theme folder instead of ~/.config. This way other themes can use the same application
+
+
+# Setup / selection of theme
+
+There are two ways to setup a theme: you can use [leftwm-theme](https://github.com/leftwm/leftwm-theme/) or you can set a symlink yourself.
+
+## Using LeftWM-theme
+Install LeftWM-theme, as per the directions on [its Github](https://github.com/leftwm/leftwm-theme).
+
+Update your list of themes:
+```bash
+leftwm-theme update
+```
+Install the theme you like:
+```bash
+leftwm-theme install "THEME NAME GOES HERE"
+```
+Apply the theme you like as the current theme:
+```bash
+leftwm-theme apply "THEME NAME GOES HERE"
+```
+
+## Using symlinks
+
+To select a theme all that is required is that it’s located at: `~/.config/leftwm/themes/current`
+It is strongly recommended that you do this with a symlink rather than creating a folder. Using a symlink makes it easy to save all your themes in the folder `~/.config/leftwm/themes` and switch between them using a symlink easily.
+
+The following command would set the included basic_polybar to the current theme:
+
+```bash
+ln -s ~/.config/leftwm/themes/basic_polybar ~/.config/leftwm/themes/current
+```
diff --git a/.config/leftwm/themes/basic_xmobar/background.jpg b/.config/leftwm/themes/basic_xmobar/background.jpg
new file mode 100644
index 0000000..5130f25
Binary files /dev/null and b/.config/leftwm/themes/basic_xmobar/background.jpg differ
diff --git a/.config/leftwm/themes/basic_xmobar/change_to_tag b/.config/leftwm/themes/basic_xmobar/change_to_tag
new file mode 100755
index 0000000..d652de4
--- /dev/null
+++ b/.config/leftwm/themes/basic_xmobar/change_to_tag
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+leftwm-command "SendWorkspaceToTag $1 $2"
diff --git a/.config/leftwm/themes/basic_xmobar/down b/.config/leftwm/themes/basic_xmobar/down
new file mode 100755
index 0000000..78a1ff5
--- /dev/null
+++ b/.config/leftwm/themes/basic_xmobar/down
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+
+SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
+
+#set background
+if [ -x "$(command -v feh)" ]; then
+ feh --bg-scale $SCRIPTPATH/reset.jpg
+fi
+
+leftwm-command "UnloadTheme"
+
+
+ps -alh | grep xmobar_control_script | awk '{print $3}' | xargs kill
+
+killall picom
+killall conky
+killall trayer
+killall xmobar
+killall nm-applet
+killall volumeicon
+
diff --git a/.config/leftwm/themes/basic_xmobar/reset.jpg b/.config/leftwm/themes/basic_xmobar/reset.jpg
new file mode 100644
index 0000000..da757f7
Binary files /dev/null and b/.config/leftwm/themes/basic_xmobar/reset.jpg differ
diff --git a/.config/leftwm/themes/basic_xmobar/sizes.liquid b/.config/leftwm/themes/basic_xmobar/sizes.liquid
new file mode 100644
index 0000000..020a3a2
--- /dev/null
+++ b/.config/leftwm/themes/basic_xmobar/sizes.liquid
@@ -0,0 +1,3 @@
+{% for w in workspaces %}
+Static { xpos = {{w.x}} , ypos = {{w.y}}, width = {{w.w}}, height = 24 }
+{% endfor %}
diff --git a/.config/leftwm/themes/basic_xmobar/template.liquid b/.config/leftwm/themes/basic_xmobar/template.liquid
new file mode 100644
index 0000000..9a5423a
--- /dev/null
+++ b/.config/leftwm/themes/basic_xmobar/template.liquid
@@ -0,0 +1,12 @@
+{% for tag in workspace.tags %}
+{% if tag.mine %}
+ {{tag.name}}
+{% elsif tag.visible %}
+ {{tag.name}}
+{% elsif tag.busy %}
+ {{tag.name}}*
+{% else %}
+ {{tag.name}}
+{% endif %}
+{% endfor %}
+ {{ window_title }}
diff --git a/.config/leftwm/themes/basic_xmobar/theme.ron b/.config/leftwm/themes/basic_xmobar/theme.ron
new file mode 100644
index 0000000..b0467ba
--- /dev/null
+++ b/.config/leftwm/themes/basic_xmobar/theme.ron
@@ -0,0 +1,6 @@
+(border_width: 2,
+margin: 12,
+default_border_color: "#222222",
+floating_border_color: "#555555",
+focused_border_color: "#FF3333",
+)
\ No newline at end of file
diff --git a/.config/leftwm/themes/basic_xmobar/up b/.config/leftwm/themes/basic_xmobar/up
new file mode 100755
index 0000000..5e540d4
--- /dev/null
+++ b/.config/leftwm/themes/basic_xmobar/up
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+export SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
+
+
+#down the last running theme
+if [ -f "/tmp/leftwm-theme-down" ]; then
+ /tmp/leftwm-theme-down
+ rm /tmp/leftwm-theme-down
+fi
+ln -s $SCRIPTPATH/down /tmp/leftwm-theme-down
+
+
+#boot compton or picom if it exists
+# killall conky
+# killall trayer
+lxsession &
+picom &
+nm-applet &
+volumeicon &
+/usr/bin/emacs --daemon &
+
+conky -c $HOME/.config/conky/leftwm/doom-one-01.conkyrc &
+trayer --edge top --align right --widthtype request --padding 6 --SetDockType true --SetPartialStrut true --expand true --monitor 1 --transparent true --alpha 0 --tint 0x282c34 --height 22 &
+
+#set the theme.ron config
+leftwm-command "LoadTheme $SCRIPTPATH/theme.ron"
+
+
+# SET WALLPAPER
+# Uncomment only ONE of the following FOUR lines, depending on which wallpaper setter you use.
+xargs xwallpaper --stretch < ~/.cache/wall &
+# ~/.fehbg &" -- set last saved feh wallpaper
+# feh --randomize --bg-fill /usr/share/backgrounds/dtos-backgrounds/*" -- feh set random wallpaper
+# nitrogen --restore &" -- if you prefer nitrogen to feh
+
+index=0
+leftwm-state -q -n -t $SCRIPTPATH/sizes.liquid | sed -r '/^\s*$/d' | while read size
+do
+ leftwm-state -w $index -t $SCRIPTPATH/template.liquid | xmobar -p "$size" $SCRIPTPATH/xmobar-config.hs --alpha=230 &
+ let index=index+1
+done
+
diff --git a/.config/leftwm/themes/basic_xmobar/xmobar-config-example.hs b/.config/leftwm/themes/basic_xmobar/xmobar-config-example.hs
new file mode 100644
index 0000000..c7b2a5a
--- /dev/null
+++ b/.config/leftwm/themes/basic_xmobar/xmobar-config-example.hs
@@ -0,0 +1,23 @@
+
+
+Config { font = "-misc-fixed-*-*-*-*-13-*-*-*-*-*-*-*"
+ , bgColor = "black"
+ , fgColor = "grey"
+ , position = Top
+ , lowerOnStart = True
+ , allDesktops = True
+ , pickBroadest = False
+ , overrideRedirect = False
+ , commands = [ Run Weather "KSHV" ["-t"," F","-L","64","-H","77","--normal","green","--high","red","--low","lightblue"] 36000
+ , Run Network "eno1" ["-L","0","-H","32","--normal","green","--high","red"] 10
+ , Run MultiCpu ["-L","15","-H","50","--normal","green","--high","red"] 10
+ , Run Memory [] 10
+ , Run Swap [] 10
+ , Run TopProc [] 10
+ , Run Date "%a %b %_d %Y %H:%M:%S" "date" 10
+ , Run UnsafeStdinReader
+ ]
+ , sepChar = "%"
+ , alignSep = "}{"
+ , template = "%UnsafeStdinReader% }{ %top% | %multicpu% | %memory% * %swap% | %eno1% | %date% | %KSHV%"
+}
diff --git a/.config/leftwm/themes/basic_xmobar/xmobar-config.hs b/.config/leftwm/themes/basic_xmobar/xmobar-config.hs
new file mode 100644
index 0000000..e7ce21f
--- /dev/null
+++ b/.config/leftwm/themes/basic_xmobar/xmobar-config.hs
@@ -0,0 +1,52 @@
+Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=true"
+ , additionalFonts = [ "xft:Mononoki:pixelsize=11:antialias=true:hinting=true"
+ , "xft:Font Awesome 6 Free Solid:pixelsize=12"
+ , "xft:Font Awesome 6 Brands:pixelsize=12"
+ ]
+ , bgColor = "#282c34"
+ , fgColor = "#ff6c6b"
+ -- Position TopSize and BottomSize take 3 arguments:
+ -- an alignment parameter (L/R/C) for Left, Right or Center.
+ -- an integer for the percentage width, so 100 would be 100%.
+ -- an integer for the minimum pixel height for xmobar, so 24 would force a height of at least 24 pixels.
+ -- NOTE: The height should be the same as the trayer (system tray) height.
+ , position = TopSize L 100 24
+ , lowerOnStart = True
+ , hideOnStart = False
+ , allDesktops = True
+ , overrideRedirect = False
+ , persistent = True
+ , commands = [
+ -- Echos a "penguin" icon in front of the kernel output.
+ Run Com "echo" ["\xf17c"] "penguin" 3600
+ -- Get kernel version (script found in .local/bin)
+ , Run Com ".local/bin/kernel" [] "kernel" 36000
+ -- Cpu usage in percent
+ , Run Cpu ["-t", "\xf108 cpu: (%)","-H","50","--high","red"] 20
+ -- Ram used number and percent
+ , Run Memory ["-t", "\xf233 mem: M (%)"] 20
+ -- Disk space free
+ , Run DiskU [("/", "\xf0c7 hdd: free")] [] 60
+ -- Echos an "up arrow" icon in front of the uptime output.
+ , Run Com "echo" ["\xf0aa"] "uparrow" 3600
+ -- Uptime
+ , Run Uptime ["-t", "uptime: d h"] 360
+ -- Echos a "bell" icon in front of the pacman updates.
+ , Run Com "echo" ["\xf0f3"] "bell" 3600
+ -- Check for pacman updates (script found in .local/bin)
+ , Run Com ".local/bin/pacupdate" [] "pacupdate" 36000
+ -- Echos a "battery" icon in front of the pacman updates.
+ , Run Com "echo" ["\xf242"] "baticon" 3600
+ -- Battery
+ , Run BatteryP ["BAT0"] ["-t", " (%)"] 360
+ -- Time and date
+ , Run Date "\xf017 %b %d %Y - (%H:%M) " "date" 50
+ -- Script that dynamically adjusts xmobar padding depending on number of trayer icons.
+ , Run Com ".config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 20
+ -- Prints out the left side items such as workspaces, layout, etc.
+ , Run UnsafeStdinReader
+ ]
+ , sepChar = "%"
+ , alignSep = "}{"
+ , template = " %UnsafeStdinReader% }{ %penguin% %kernel%%cpu%%memory%%disku%%uparrow% %uptime%%bell% %pacupdate%%baticon% %battery%%date% %trayerpad%"
+ }
diff --git a/.config/leftwm/themes/controlling_leftwm/README.md b/.config/leftwm/themes/controlling_leftwm/README.md
new file mode 100644
index 0000000..f99fd50
--- /dev/null
+++ b/.config/leftwm/themes/controlling_leftwm/README.md
@@ -0,0 +1,30 @@
+# How to control LeftWM from an external proccess
+
+LeftWM supports being controlled using EWMH calls and from an external pipe
+file.
+
+This folder has example of how to send commands to LeftWM using its external pipe
+file.
+
+A full list of supported commands can be found here:
+
+```
+LoadTheme PATH_TO_THEME
+UnloadTheme
+Reload
+SendWorkspaceToTag INDEX_OF_WORKSPACE, INDEX_OF_TAG
+SendWindowToTag INDEX_OF_TAG
+SwapScreens
+MoveWindowToLastWorkspace
+MoveWindowUp
+MoveWindowDown
+FocusWindowUp
+FocusWindowDown
+FocusWorkspaceNext
+FocusWorkspacePrevious
+CloseWindow
+NextLayout
+PreviousLayout
+```
+
+
diff --git a/.config/leftwm/themes/controlling_leftwm/change_to_tag b/.config/leftwm/themes/controlling_leftwm/change_to_tag
new file mode 100755
index 0000000..d652de4
--- /dev/null
+++ b/.config/leftwm/themes/controlling_leftwm/change_to_tag
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+leftwm-command "SendWorkspaceToTag $1 $2"
diff --git a/.config/leftwm/themes/controlling_leftwm/move_window_to_last_workspace b/.config/leftwm/themes/controlling_leftwm/move_window_to_last_workspace
new file mode 100755
index 0000000..4052c9e
--- /dev/null
+++ b/.config/leftwm/themes/controlling_leftwm/move_window_to_last_workspace
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+leftwm-command "MoveWindowToLastWorkspace"
diff --git a/.config/leftwm/themes/controlling_leftwm/move_window_to_tag b/.config/leftwm/themes/controlling_leftwm/move_window_to_tag
new file mode 100755
index 0000000..d322824
--- /dev/null
+++ b/.config/leftwm/themes/controlling_leftwm/move_window_to_tag
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+leftwm-command "SendWindowToTag $1"
diff --git a/.config/leftwm/themes/controlling_leftwm/swap_screens b/.config/leftwm/themes/controlling_leftwm/swap_screens
new file mode 100755
index 0000000..99eeea5
--- /dev/null
+++ b/.config/leftwm/themes/controlling_leftwm/swap_screens
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+leftwm-command "SwapScreens"
diff --git a/.config/leftwm/themes/current b/.config/leftwm/themes/current
new file mode 120000
index 0000000..9e0d2e9
--- /dev/null
+++ b/.config/leftwm/themes/current
@@ -0,0 +1 @@
+basic_xmobar
\ No newline at end of file
diff --git a/.config/mu4e/mbsyncpass-acc1 b/.config/mu4e/mbsyncpass-acc1
new file mode 100644
index 0000000..8e25544
--- /dev/null
+++ b/.config/mu4e/mbsyncpass-acc1
@@ -0,0 +1 @@
+password1234
diff --git a/.config/mu4e/mbsyncrc b/.config/mu4e/mbsyncrc
new file mode 100644
index 0000000..b897ba3
--- /dev/null
+++ b/.config/mu4e/mbsyncrc
@@ -0,0 +1,98 @@
+# mbsyncrc based on
+# http://www.ict4g.net/adolfo/notes/2014/12/27/EmacsIMAP.html
+
+# ACCOUNT INFORMATION
+IMAPAccount derek-distrotube
+# Address to connect to
+Host imap.1and1.com
+User derek@distrotube.com
+# Create a plain text file that contains your password. Name it mbsyncpass-acc1.
+# Then, gpg encrypt it by running: gpg2 -c mbsyncpass-acc1
+# Then delete the plain text file, leaving only mbsyncpass-acc1.gpg.
+PassCmd "gpg2 -q --for-your-eyes-only --no-tty -d ~/.config/mu4e/mbsyncpass-acc1.gpg"
+AuthMechs LOGIN
+SSLType IMAPS
+SSLVersions TLSv1.2
+CertificateFile /etc/ssl/certs/ca-certificates.crt
+
+# THEN WE SPECIFY THE LOCAL AND REMOTE STORAGE
+# - THE REMOTE STORAGE IS WHERE WE GET THE MAIL FROM (E.G., THE
+# SPECIFICATION OF AN IMAP ACCOUNT)
+# - THE LOCAL STORAGE IS WHERE WE STORE THE EMAIL ON OUR COMPUTER
+
+# REMOTE STORAGE (USE THE IMAP ACCOUNT SPECIFIED ABOVE)
+IMAPStore derek-distrotube-remote
+Account derek-distrotube
+
+# LOCAL STORAGE (CREATE DIRECTORIES with mkdir -p ~/Maildir/derek-distrotube)
+MaildirStore derek-distrotube-local
+Path ~/Maildir/derek-distrotube/
+Inbox ~/Maildir/derek-distrotube/INBOX
+# REQUIRED ONLY IF YOU WANT TO DOWNLOAD ALL SUBFOLDERS; SYNCING SLOWS DOWN
+# SubFolders Verbatim
+
+# CONNECTIONS SPECIFY LINKS BETWEEN REMOTE AND LOCAL FOLDERS
+#
+# CONNECTIONS ARE SPECIFIED USING PATTERNS, WHICH MATCH REMOTE MAIL
+# FOLDERS. SOME COMMONLY USED PATTERS INCLUDE:
+#
+# 1 "*" TO MATCH EVERYTHING
+# 2 "!DIR" TO EXCLUDE "DIR"
+# 3 "DIR" TO MATCH DIR
+
+Channel derek-distrotube
+Master :derek-distrotube-remote:
+Slave :derek-distrotube-local:
+Patterns *
+Create Both
+Expunge Both
+SyncState *
+
+
+# ================================================================================
+
+
+# ACCOUNT INFORMATION
+IMAPAccount marysue-distrotube
+# Address to connect to
+Host imap.1and1.com
+User mary_sue@distrotube.com
+# Create a plain text file that contains your password. Name it mbsyncpass-acc2.
+# Then, gpg encrypt it by running: gpg2 -c mbsyncpass-acc2
+# Then delete the plain text file, leaving only mbsyncpass-acc2.gpg.
+PassCmd "gpg2 -q --for-your-eyes-only --no-tty -d ~/.config/mu4e/mbsyncpass-acc2.gpg"
+AuthMechs LOGIN
+SSLType IMAPS
+SSLVersions TLSv1.2
+CertificateFile /etc/ssl/certs/ca-certificates.crt
+
+# THEN WE SPECIFY THE LOCAL AND REMOTE STORAGE
+# - THE REMOTE STORAGE IS WHERE WE GET THE MAIL FROM (E.G., THE
+# SPECIFICATION OF AN IMAP ACCOUNT)
+# - THE LOCAL STORAGE IS WHERE WE STORE THE EMAIL ON OUR COMPUTER
+
+# REMOTE STORAGE (USE THE IMAP ACCOUNT SPECIFIED ABOVE)
+IMAPStore marysue-distrotube-remote
+Account marysue-distrotube
+
+# LOCAL STORAGE (CREATE DIRECTORIES with mkdir -p ~/Maildir/marysue-distrotube)
+MaildirStore marysue-distrotube-local
+Path ~/Maildir/marysue-distrotube/
+Inbox ~/Maildir/marysue-distrotube/INBOX
+
+# CONNECTIONS SPECIFY LINKS BETWEEN REMOTE AND LOCAL FOLDERS
+#
+# CONNECTIONS ARE SPECIFIED USING PATTERNS, WHICH MATCH REMOTE MAIL
+# FOLDERS. SOME COMMONLY USED PATTERS INCLUDE:
+#
+# 1 "*" TO MATCH EVERYTHING
+# 2 "!DIR" TO EXCLUDE "DIR"
+# 3 "DIR" TO MATCH DIR
+
+Channel marysue-distrotube-inbox
+Master :marysue-distrotube-remote:
+Slave :marysue-distrotube-local:
+Patterns *
+Create Both
+Expunge Both
+SyncState *
diff --git a/.config/ncmpcpp/config b/.config/ncmpcpp/config
new file mode 100755
index 0000000..0885687
--- /dev/null
+++ b/.config/ncmpcpp/config
@@ -0,0 +1,66 @@
+# mpd stuff
+mpd_host = "localhost"
+mpd_port = "6600"
+mpd_music_dir = "/home/derek/Music"
+mpd_connection_timeout = "5"
+
+# visualizer
+visualizer_fifo_path = "/tmp/mpd.fifo"
+visualizer_output_name = "my_fifo"
+visualizer_sync_interval = "30"
+visualizer_in_stereo = "yes"
+visualizer_type = "spectrum"
+visualizer_look = "+|"
+
+# appearance
+song_list_format = "$3{%l}$9 $1│$9 $5{%a}$9 $1│$9 $2{%t}$9 $R $6{%b}$9 $7({%y})$9 $1│$9 $4{%n}"
+song_status_format = "{%a} - {%t}|{%f} - \"{%b}\" ({%y})"
+now_playing_prefix = "$b"
+now_playing_suffix = "$/b"
+browser_playlist_prefix = "$2playlist$9 "
+selected_item_prefix = "$6"
+selected_item_suffix = "$9"
+playlist_display_mode = "columns" # (classic/columns)
+browser_display_mode = "columns" #(classic/columns)
+autocenter_mode = "yes"
+progressbar_look = "━━╸"
+user_interface = "classic" #(classic/alternative)
+header_visibility = "no"
+statusbar_visibility = "yes"
+titles_visibility = "no"
+header_text_scrolling = "yes"
+cyclic_scrolling = "no"
+display_volume_level = "no"
+display_bitrate = "yes"
+display_remaining_time = "no"
+
+# colors
+colors_enabled = "yes"
+header_window_color = "blue"
+volume_color = "blue"
+state_line_color = "green"
+state_flags_color = "red"
+main_window_color = "blue"
+color1 = "red"
+color2 = "magenta"
+main_window_highlight_color = "cyan"
+progressbar_color = "blue"
+statusbar_color = "default"
+alternative_ui_separator_color = "green"
+active_column_color = "magenta"
+visualizer_color = "blue"
+window_border_color = "magenta"
+active_window_border = "blue"
+
+# more stuff
+playlist_disable_highlight_delay = "3"
+message_delay_time = "4"
+default_find_mode = "wrapped" #(wrapped/normal)
+follow_now_playing_lyrics = "yes"
+store_lyrics_in_song_dir = "yes"
+jump_to_now_playing_song_at_start = "yes"
+clock_display_seconds = "yes"
+ignore_leading_the = "yes"
+mouse_support = "no"
+empty_tag_marker = "-"
+enable_window_title = "yes"
diff --git a/.config/nitrogen/bg-saved.cfg b/.config/nitrogen/bg-saved.cfg
new file mode 100644
index 0000000..56876fc
--- /dev/null
+++ b/.config/nitrogen/bg-saved.cfg
@@ -0,0 +1,14 @@
+[xin_0]
+file=/home/dt/wallpapers/wallpaperbetter.com_1920x1080 (1).jpg
+mode=5
+bgcolor=#000000
+
+[xin_1]
+file=/home/dt/wallpapers/wallpaperbetter.com_1920x1080 (1).jpg
+mode=5
+bgcolor=#000000
+
+[xin_2]
+file=/home/dt/wallpapers/wallpaperbetter.com_1920x1080 (1).jpg
+mode=5
+bgcolor=#000000
diff --git a/.config/nitrogen/nitrogen.cfg b/.config/nitrogen/nitrogen.cfg
new file mode 100644
index 0000000..18effe6
--- /dev/null
+++ b/.config/nitrogen/nitrogen.cfg
@@ -0,0 +1,12 @@
+[geometry]
+posx=3840
+posy=26
+sizex=1296
+sizey=739
+
+[nitrogen]
+view=icon
+recurse=true
+sort=alpha
+icon_caps=false
+dirs=/home/dt/wallpapers;
diff --git a/.config/openbox/autostart b/.config/openbox/autostart
new file mode 100755
index 0000000..0a3a7f4
--- /dev/null
+++ b/.config/openbox/autostart
@@ -0,0 +1,4 @@
+tint2 &
+picom &
+nitrogen --restore &
+/usr/bin/emacs --daemon &
diff --git a/.config/openbox/menu.xml b/.config/openbox/menu.xml
new file mode 100755
index 0000000..00b4417
--- /dev/null
+++ b/.config/openbox/menu.xml
@@ -0,0 +1,776 @@
+
+
+
+
diff --git a/.config/openbox/pipemenus/date-menu.py b/.config/openbox/pipemenus/date-menu.py
new file mode 100755
index 0000000..0a89069
--- /dev/null
+++ b/.config/openbox/pipemenus/date-menu.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python3
+#
+# DATE-MENU by Derek Taylor (DistroTube)
+# A simple python script that creates an openbox pipemenu that displays time and date.
+
+# This program is free software: you can redistribute it and/or modify it under the terms of
+# the GNU General Public License version 3 as published by the Free Software Foundation.
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see: http://www.gnu.org/licenses
+
+# Copy this file somewhere on your path and make it executable.
+# Add the following line somewhere to your /.config/openbox/menu.xml
+#
+# Be sure to change the PATH/TO to the correct path to this file.
+# Reconfigure openbox.
+
+# SETTINGS
+
+import datetime
+
+dt = datetime.datetime.now()
+theDate = dt.strftime('%A, %B %d, %Y')
+theTime = dt.strftime('%I:%M %p %Z')
+theDay = dt.strftime('%j')
+theWeek = dt.strftime('%U')
+
+# OPENBOX PIPEMENU
+
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
diff --git a/.config/openbox/pipemenus/deadbeef.sh b/.config/openbox/pipemenus/deadbeef.sh
new file mode 100755
index 0000000..242567a
--- /dev/null
+++ b/.config/openbox/pipemenus/deadbeef.sh
@@ -0,0 +1,50 @@
+#! /bin/bash
+#
+# DEADBEEF by Derek Taylor (DistroTube)
+# A simple script that creates an openbox pipemenu that controls the deadbeef music player.
+#
+# This program is free software: you can redistribute it and/or modify it under the terms of
+# the GNU General Public License version 3 as published by the Free Software Foundation.
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see: http://www.gnu.org/licenses
+#
+# Copy this file somewhere on your path and make it executable.
+# Add the following line somewhere to your /.config/openbox/menu.xml
+#
+# Be sure to change the PATH/TO to the correct path to this file.
+#
+# Reconfigure openbox.
+#
+# REQUIRES the Deadbeef music player to be installed on your computer.
+
+
+nowplaying=`deadbeef --nowplaying "%n %a - %t - %b - %y" | sed -n '1p' | tr -d '"'`
+tracktime=`deadbeef --nowplaying "%l" | sed -n '1p'`
+playlist_num=`ls -l ~/.config/deadbeef/playlists/* | wc -l | sed -n '1p'`
+
+echo ""
+echo ""
+echo "deadbeef"
+echo "deadbeef"
+echo ""
+echo "deadbeef"
+echo ""
+echo ""
+for file in $(ls ~/.config/deadbeef/playlists/*.dbpl -1v); do
+NAME=$(echo "$file" | rev | cut -d"/" -f1 | rev)
+echo "deadbeef $file"
+done
+echo ""
+echo ""
+echo "deadbeef --play"
+echo "deadbeef --pause"
+echo "deadbeef --stop"
+echo "deadbeef --next"
+echo "deadbeef --prev"
+echo ""
+echo "deadbeef --quit"
+echo ""
diff --git a/.config/openbox/pipemenus/gmusicbrowser.py b/.config/openbox/pipemenus/gmusicbrowser.py
new file mode 100755
index 0000000..fdcaf56
--- /dev/null
+++ b/.config/openbox/pipemenus/gmusicbrowser.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python3
+#
+# GMUISCBROWSER by Derek Taylor (DistroTube)
+# A simple script that creates an openbox pipemenu that controls gmusicbrowser.
+#
+# This program is free software: you can redistribute it and/or modify it under the terms of
+# the GNU General Public License version 3 as published by the Free Software Foundation.
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see: http://www.gnu.org/licenses
+#
+# Copy this file somewhere on your path and make it executable.
+# Add the following line somewhere to your /.config/openbox/menu.xml
+#
+# Be sure to change the PATH/TO to the correct path to this file.
+#
+# Reconfigure openbox.
+#
+# REQUIRES the gmusicbrowser music player to be installed on your computer.
+
+# The playlist submenu is designed to pull all .m3u files from the ~home/$USER/.config/gmusicbrowser/ directory.
+# Therefore, you must create this folder and export your playlists to this folder.
+# To enable song information to display, you must enable the NOW PLAYHING plugin in gmusicbrowser.
+# Add this to "command for when playing song changed": tee /home/$USER/.config/gmusicbrowser/nowplaying.info
+# Change $USER to your actual username. Tick the checkbox for send title/artist/album in standard input.
+# You also should go to Preferences > Misc. and tick the checkbox for remember playing position between sessions.
+# This allows gmusicbrowser to remember the song it was playing within the playlist upon exit.
+
+# SETTING
+
+import subprocess
+import os
+
+playlistDir = '/home/derek/.config/gmusicbrowser/'
+
+cmd1 = "cat /home/derek/.config/gmusicbrowser/*.info | sed -n -e 's/^.*Title=//p' | tr -d '\"'"
+process = subprocess.Popen(cmd1, stdout=subprocess.PIPE, shell=True)
+songTitle = process.communicate()[0].decode("utf-8").rstrip()
+
+cmd2 = "cat /home/derek/.config/gmusicbrowser/*.info | sed -n -e 's/^.*Artist=//p' | tr -d '\"'"
+process = subprocess.Popen(cmd2, stdout=subprocess.PIPE, shell=True)
+songArtist = process.communicate()[0].decode("utf-8").rstrip()
+
+cmd3 = "cat /home/derek/.config/gmusicbrowser/*.info | sed -n -e 's/^.*Album=//p' | tr -d '\"'"
+process = subprocess.Popen(cmd3, stdout=subprocess.PIPE, shell=True)
+songAlbum = process.communicate()[0].decode("utf-8").rstrip()
+
+cmd4 = "cat /home/derek/.config/gmusicbrowser/*.info | sed -n -e 's/^.*Length=//p' | tr -d '\"'"
+process = subprocess.Popen(cmd4, stdout=subprocess.PIPE, shell=True)
+songLength = process.communicate()[0].decode("utf-8").rstrip()
+
+cmd5 = "cat /home/derek/.config/gmusicbrowser/*.info | sed -n -e 's/^.*Year=//p' | tr -d '\"'"
+process = subprocess.Popen(cmd5, stdout=subprocess.PIPE, shell=True)
+songYear = process.communicate()[0].decode("utf-8").rstrip()
+
+cmd6 = "cat /home/derek/.config/gmusicbrowser/*.info | sed -n -e 's/^.*Track=//p' | tr -d '\"'"
+process = subprocess.Popen(cmd6, stdout=subprocess.PIPE, shell=True)
+songTrack = process.communicate()[0].decode("utf-8").rstrip()
+
+cmd7 = "ls -l /home/derek/.config/gmusicbrowser/*m3u | wc -l | sed -n '1p'"
+process = subprocess.Popen(cmd7, stdout=subprocess.PIPE, shell=True)
+playlistNum = process.communicate()[0].decode("utf-8").rstrip()
+
+# OPENBOX PIPEMENU
+
+print ('')
+print ('')
+print ('')
+print ('gmusicbrowser -cmd PlayPause')
+print ('gmusicbrowser -cmd PlayPause')
+print ('')
+print ('gmusicbrowser -cmd')
+print ('')
+print ('')
+for filename in os.listdir('/home/derek/.config/gmusicbrowser/'):
+ plist = "echo "+filename+" | rev | cut -d\"/\" -f1 | rev"
+ process = subprocess.Popen(plist, stdout=subprocess.PIPE, shell=True)
+ playlist = process.communicate()[0].decode("utf-8").rstrip()
+ if playlist.endswith(".m3u"):
+ print ('gmusicbrowser '+playlistDir+filename+'')
+print ('')
+print ('')
+print ('gmusicbrowser -cmd Play')
+print ('gmusicbrowser -cmd Pause')
+print ('gmusicbrowser -cmd Stop')
+print ('gmusicbrowser -cmd NextSong')
+print ('gmusicbrowser -cmd PrevSong')
+print ('')
+print ('gmusicbrowser -cmd IncVolume')
+print ('gmusicbrowser -cmd DecVolume')
+print ('')
+print ('gmusicbrowser -cmd ShowHide')
+print ('gmusicbrowser -cmd Quit')
+print ('')
diff --git a/.config/openbox/pipemenus/mpcob.sh b/.config/openbox/pipemenus/mpcob.sh
new file mode 100755
index 0000000..04ff17d
--- /dev/null
+++ b/.config/openbox/pipemenus/mpcob.sh
@@ -0,0 +1,95 @@
+#!/bin/sh
+# mpcob - control mpc in your openbox menu
+# 02/03/10 - supulton - vrfeight3@gmail.com
+# chmod +x mpcob.sh, and place:
+# ""
+# somewhere in your menu.
+
+# replace "urxvtc" with your preferred terminal
+set_term=`echo urxvt`
+
+# gui mpd preference?
+set_player=`echo ncmpcpp`
+
+#set variables
+playing=`mpc -f "%track%. %artist% - %title%" | sed -n '1p'`
+nowstatus=`mpc | sed -n '2p' | cut -d ' ' -f1`
+repeat=`mpc | tail -n 1 | cut -c 15-25`
+random=`mpc | tail -n 1 | cut -c 29-39`
+single=`mpc | tail -n 1 | cut -c 43-53`
+consume=`mpc | tail -n 1 | cut -c 57-`
+
+# tell when mpc is stopped
+
+if [ "$nowstatus" != "[Playing]" -a "$nowstatus" != "[Paused]" ]
+then
+export nowstatus=`echo "[Stopped]"`
+fi
+if [ "$nowstatus" = "[Stopped]" ]
+then
+export Playing=`echo Play`
+fi
+
+# convert reserved XML characters '&', '<', '>', '"' for songs containing characters
+
+if [[ $playing =~ '&' ]]
+then
+export playing=${playing//\&/\&\;}
+fi
+if [[ $playing =~ '<' ]]
+then
+export playing=${playing//\\<\;}
+fi
+if [[ $playing =~ '>' ]]
+then
+export playing=${playing//\>/\>\;}
+fi
+if [[ $playing =~ '"' ]]
+then
+export playing=${playing//\"/\"\;}
+fi
+# echo menu
+echo ""
+echo ""
+echo " "
+echo " "
+echo " mpc toggle"
+echo " "
+echo " "
+echo " "
+echo " urxvt -e ncmpcpp"
+echo " "
+echo " "
+echo " "
+echo " "
+echo " mpc toggle"
+echo " "
+echo " "
+echo " mpc prev"
+echo " "
+echo " "
+echo " mpc next"
+echo " "
+echo " "
+echo " mpc stop"
+echo " "
+echo " "
+echo " "
+echo " "
+echo " mpc random"
+echo " "
+echo " "
+echo " mpc repeat"
+echo " "
+echo " "
+echo " mpc consume"
+echo " "
+echo " "
+echo " mpc single"
+echo " "
+echo " "
+echo " "
+echo " mpc update"
+echo " "
+echo " "
+echo ""
diff --git a/.config/openbox/pipemenus/mpd.sh b/.config/openbox/pipemenus/mpd.sh
new file mode 100755
index 0000000..b29bee1
--- /dev/null
+++ b/.config/openbox/pipemenus/mpd.sh
@@ -0,0 +1,68 @@
+#! /bin/bash
+
+# MPD/MPC by olshrimpeyes
+nowplaying=`mpc -f "%track%. %artist% - %title%" | sed -n '1p'`
+playing=`mpc | grep playing `
+nowstatus=`mpc | sed -n '2p' | cut -d ' ' -f1`
+
+echo ""
+
+
+
+#
+#
+#
+# pcmanfm -n ~/
+#
+#
+#
+
+
+if [[ -z $nowplaying ]]
+
+then
+
+echo "mpc"
+
+else
+
+echo ""
+echo "mpc"
+echo "mpc"
+echo ""
+echo "urxvt -e ncmpcpp"
+echo ""
+
+# if [[ -z $playing ]]
+
+# then
+
+# echo "mpc"
+
+# else
+
+# echo "mpc"
+
+# fi
+
+fi
+
+echo ""
+
+if [[ -z $playing ]]
+
+then
+
+echo "mpc play"
+
+else
+
+echo "mpc pause"
+echo "mpc stop"
+
+fi
+
+echo "mpc next"
+echo "mpc prev"
+echo "urxvt -e alsamixer"
+echo ""
diff --git a/.config/openbox/pipemenus/obrecent.sh b/.config/openbox/pipemenus/obrecent.sh
new file mode 100755
index 0000000..84fd981
--- /dev/null
+++ b/.config/openbox/pipemenus/obrecent.sh
@@ -0,0 +1,22 @@
+From Openbox
+Jump to: navigation, search
+
+#!/bin/sh
+echo ""
+files=$(
+cat ~/.local/share/recently-used.xbel | grep file:/// | tail -n15 | cut -d "\"" -f 2 | tac | while read line;
+do
+file=$(echo "$line")
+name=$(echo -en "$file" | sed 's,.*/,,' | sed 's/%20/ /g')
+echo "
+ xdg-open $line
+ "
+done);
+echo "$files"
+echo ""
+echo "
+ rm ~/.local/share/recently-used.xbel
+ "
+echo ""
+
+
diff --git a/.config/openbox/pipemenus/places-menu.sh b/.config/openbox/pipemenus/places-menu.sh
new file mode 100755
index 0000000..faf90c3
--- /dev/null
+++ b/.config/openbox/pipemenus/places-menu.sh
@@ -0,0 +1,183 @@
+#!/bin/sh
+# cb-places-pipemenu - a places openbox pipe menu
+# Copyright (C) 2010 John Crawley
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+# Version 2012/09/27-cb
+
+
+# Ported to #!++
+# by Ben Young
+# Ported to Manjaro
+# by Daniel Napora
+
+# NB The shell, not bash, is invoked in the hope that
+# dash will be used, as it is much faster.
+
+# Usage: add
+#
+# to your .config/openbox/menu.xml
+
+# or, if you want the "recent files" menu incorporated at the top, use:
+#
+# make sure you have mabox-recent-files-pipemenu somewhere, and enter its path below.
+
+# path to your "recent files" script, if you want to incorporate it:
+recent_script=/usr/bin/mabox-recent-files-pipemenu
+
+# Command to open folders at "Browse here..." - any file manager
+open_folder_cmd=pcmanfm
+# Default command to open files with - others might be xdg-open, gnome-open, pcmanfm...
+default_open_cmd=exo-open # exo-open comes with thunar
+# Text editor of choice
+text_editor=geany
+
+# function to open files with default open command, or alternative command for certain files
+# - add other conditions to choice
+open_file() {
+ [ -x "$1" ] && exec "$text_editor" "$1" # comment out this line if you don't want to edit executables instead of executing
+ #[ -x "$1" ] && exec "terminator -e" "$1" # uncomment this and comment out previous line to run executables in terminal instead of editing
+ [ "${1##*.}" = desktop ] && exec "$text_editor" "$1" # comment out this line if you don't want to edit .desktop files instead of executing
+ exec "$default_open_cmd" "$1" # use default open command if above conditions not satisfied
+}
+
+# extra dotfiles to display in HOME folder (dotfiles are hidden by default)
+# edit the list (space separated, surrounded by single quotes) or comment this line out, to taste:
+shown_dotfiles='.config .local'
+
+# By default, this script will display directories separately, before files.
+# To change this behaviour, see NOTE1, NOTE2 and NOTE3 below, near end of page.
+
+#######################################################################
+
+case $1 in
+# if "--open" option is sent as $1, open file ($2) instead of generating menu
+--open)
+ open_file "$2"
+ echo "$0 : failed to open $2" >&2
+ exit;; # in case exec command fails
+# if "--recent" option is sent, incorporate "recent files" menu
+--recent)
+ shift
+ output='
+'
+ if [ -x "$recent_script" ]
+ then
+ output="$output"'
+
+'
+ else
+ echo "$0 : cannot find executable script $recent_script" >&2
+ fi;;
+*)
+ output='
+';;
+esac
+
+path="${1:-$HOME}" # default starting place is ~, otherwise $1
+path="$( echo "${path}"/ | tr -s '/' )" # ensure one final slash
+[ -d "$path" ] || { echo "$0 : $path is not a directory" >&2; exit 1; }
+
+case "$path" in # only escape if string needs it
+*\&*|*\<*|*\>*|*\"*|*\'*) pathe=$(sed "s/\&/\&/g;s/\</g;s/>/\>/g;s/\"/\"/g;s/'/\'/g;" <
+output="$output"'
+
+
+
+ ''"$open_folder_cmd"'' ''"$pathe_apos"''
+
+
+
+
+'
+
+unset extra_entries directories_menu files_menu
+[ "$path" = "$HOME"/ ] && extra_entries="$shown_dotfiles"
+for i in "$path"* $extra_entries
+do
+ [ -e "$i" ] || continue # only output code if file exists
+ shortname="${i##*/}"
+ case $shortname in
+ *\&*|*\<*|*\>*|*\"*|*\'*) shortnamee=$(sed "s/\&/\&/g;s/\</g;s/>/\>/g;s/\"/\"/g;s/'/\'/g;" <'; continue; }
+ files_menu="$files_menu"'
+
+
+
+ ''"$0"'' --open ''"${pathe_apos}${shortnamee_apos}"''
+
+
+'
+done
+
+[ -n "$directories_menu" ] && {
+# NOTE2 comment out next 2 lines if you don't want "Directories" label
+# output="${output}"'
+# '
+# output="${output}"'
+# '
+output="${output}${directories_menu}"'
+'; }
+# [ -n "$files_menu" ] && {
+# NOTE3 comment out next 2 lines if you don't want "Files" label
+# output="${output}"'
+# '
+# output="${output}"'
+# '
+# output="${output}${files_menu}"'
+#'; }
+output="${output}"'
+'
+printf '%s' "$output"
+exit
diff --git a/.config/openbox/pipemenus/shell-color-scripts.sh b/.config/openbox/pipemenus/shell-color-scripts.sh
new file mode 100755
index 0000000..6b02422
--- /dev/null
+++ b/.config/openbox/pipemenus/shell-color-scripts.sh
@@ -0,0 +1,97 @@
+#! /bin/bash
+#
+# SHELL-COLOR-SCRIPTS by Derek Taylor (DistroTube)
+# A simple script that creates an openbox pipemenu that runs shell-color-scripts
+# (https://github.com/dwt1/shell-color-scripts) in a terminal window.
+#
+# shell-color-scripts was forked from Color-Scripts (https://github.com/stark/Color-Scripts)
+#
+# This program is free software: you can redistribute it and/or modify it under the terms of
+# the GNU General Public License version 3 as published by the Free Software Foundation.
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see: http://www.gnu.org/licenses
+#
+# Copy this file somewhere on your path and make it executable.
+# Add the following line somewhere to your /.config/openbox/menu.xml
+#
+# Be sure to change the PATH/TO to the correct path to this file.
+#
+# Reconfigure openbox.
+
+
+# output the initial menu
+# NOTE: If you do not use the "alacritty" terminal program or the "ranger" file manager, edit the below.
+cat <
+
+
+
+ alacritty -e 'ranger ~/color-scripts'
+
+
+
+EOF
+
+
+# seperate the main command from the virtuals
+echo " "
+
+echo " "
+# each color script listed in the menu
+for file in $(ls ~/shell-color-scripts/* | head -15); do
+NAME=$(echo "$file" | rev | cut -d"/" -f1 | rev)
+echo " "
+# NOTE: If you do not use the "alacritty" terminal program, then change "alacritty" to your preferred terminal (ex. xterm, urxvt, etc.)
+echo "alacritty -t '$file' -e '$file'"
+# NOTE: If you do not use the "vim" text editor, then change "vim" to your preferred editor (ex. nano, geany, etc.)
+echo "alacritty -e 'vim $file'"
+echo " "
+done
+echo " "
+
+echo " "
+# each color script listed in the menu
+for file in $(ls ~/shell-color-scripts/* | tail -37 | head -15); do
+NAME=$(echo "$file" | rev | cut -d"/" -f1 | rev)
+echo " "
+# NOTE: If you do not use the "alacritty" terminal program, then change "alacritty" to your preferred terminal (ex. xterm, urxvt, etc.)
+echo "alacritty -t '$file' -e '$file'"
+# NOTE: If you do not use the "vim" text editor, then change "vim" to your preferred editor (ex. nano, geany, etc.)
+echo "alacritty -e 'vim $file'"
+echo " "
+done
+echo " "
+
+echo " "
+# each color script listed in the menu
+for file in $(ls ~/shell-color-scripts/* | tail -22 | head -15); do
+NAME=$(echo "$file" | rev | cut -d"/" -f1 | rev)
+echo " "
+# NOTE: If you do not use the "alacritty" terminal program, then change "alacritty" to your preferred terminal (ex. xterm, urxvt, etc.)
+echo "alacritty -t '$file' -e '$file'"
+# NOTE: If you do not use the "vim" text editor, then change "vim" to your preferred editor (ex. nano, geany, etc.)
+echo "alacritty -e 'vim $file'"
+echo " "
+done
+echo " "
+
+echo " "
+# each color script listed in the menu
+for file in $(ls ~/shell-color-scripts/* | tail -7 | head -15); do
+NAME=$(echo "$file" | rev | cut -d"/" -f1 | rev)
+echo " "
+# NOTE: If you do not use the "alacritty" terminal program, then change "alacritty" to your preferred terminal (ex. xterm, urxvt, etc.)
+echo "alacritty -t '$file' -e '$file'"
+# NOTE: If you do not use the "vim" text editor, then change "vim" to your preferred editor (ex. nano, geany, etc.)
+echo "alacritty -e 'vim $file'"
+echo " "
+done
+echo " "
+
+# and finally...
+echo ""
+
diff --git a/.config/openbox/pipemenus/steam.sh b/.config/openbox/pipemenus/steam.sh
new file mode 100755
index 0000000..b9d0d32
--- /dev/null
+++ b/.config/openbox/pipemenus/steam.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+#
+# STEAM by Derek Taylor (DistroTube)
+# A simple script that creates an openbox pipemenu that launches Steam games.
+#
+# This program is free software: you can redistribute it and/or modify it under the terms of
+# the GNU General Public License version 3 as published by the Free Software Foundation.
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see: http://www.gnu.org/licenses
+#
+# Copy this file somewhere on your path and make it executable.
+# Add the following line somewhere to your /.config/openbox/menu.xml
+#
+# Be sure to change the PATH/TO to the correct path to this file.
+#
+# Reconfigure openbox.
+
+STEAMAPPS=~/.steam/steam/steamapps
+echo ''
+echo 'steam'
+echo ''
+for file in $(ls $STEAMAPPS/*.acf -1v); do
+ID=$(cat "$file" | grep '"appID"' | head -1 | sed -r 's/[^"]*"appID"[^"]*"([^"]*)"/\1/')
+NAME=$(cat "$file" | grep '"name"' | head -1 | sed -r 's/[^"]*"name"[^"]*"([^"]*)"/\1/')
+echo "steam steam://run/$ID"
+done
+echo ''
diff --git a/.config/openbox/pipemenus/sysinfo.py b/.config/openbox/pipemenus/sysinfo.py
new file mode 100755
index 0000000..abb5fe5
--- /dev/null
+++ b/.config/openbox/pipemenus/sysinfo.py
@@ -0,0 +1,177 @@
+#!/usr/bin/env python3
+#
+# SYSTEMINFO by Derek Taylor (DistroTube)
+# A simple script that creates an openbox pipemenu that displays system information.
+# My root partition is on /dev/sda1 and my swap is /dev/sda5. Edit these is your partitioning is different.
+#
+# This program is free software: you can redistribute it and/or modify it under the terms of
+# the GNU General Public License version 3 as published by the Free Software Foundation.
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see: http://www.gnu.org/licenses
+#
+# Copy this file somewhere on your path and make it executable.
+# Add the following line somewhere to your /.config/openbox/menu.xml
+#
+# Be sure to change the PATH/TO to the correct path to this file.
+#
+# Reconfigure openbox.
+#
+# REQUIRES net-tools (for ifconfig) to be installed on your computer.
+
+# SETTINGS
+
+import subprocess
+
+# SETTINGS - SYSTEM
+
+syst1 = "whoami"
+process = subprocess.Popen(syst1, stdout=subprocess.PIPE, shell=True)
+user = process.communicate()[0].decode("utf-8").rstrip()
+
+syst2 = "uname -n"
+process = subprocess.Popen(syst2, stdout=subprocess.PIPE, shell=True)
+host = process.communicate()[0].decode("utf-8").rstrip()
+
+syst3 = "uname -s"
+process = subprocess.Popen(syst3, stdout=subprocess.PIPE, shell=True)
+system = process.communicate()[0].decode("utf-8").rstrip()
+
+syst4 = "uname -r"
+process = subprocess.Popen(syst4, stdout=subprocess.PIPE, shell=True)
+release = process.communicate()[0].decode("utf-8").rstrip()
+
+syst5 = "uname -m"
+process = subprocess.Popen(syst5, stdout=subprocess.PIPE, shell=True)
+arch = process.communicate()[0].decode("utf-8").rstrip()
+
+syst6 = "uptime | sed 's/.* up //' | sed 's/[0-9]* us.*//' | sed 's/ day, / day /' | sed 's/ days, / days /' | sed 's/:/ hours /' | sed 's/ min//'| sed 's/,/ min/' | sed 's/ / /'"
+process = subprocess.Popen(syst6, stdout=subprocess.PIPE, shell=True)
+uptime = process.communicate()[0].decode("utf-8").rstrip()
+
+# SETTINGS - CPU
+
+cpu1 = "cat /proc/cpuinfo | grep 'model name' | sed 's/.*: //' | sed -n '1p'"
+process = subprocess.Popen(cpu1, stdout=subprocess.PIPE, shell=True)
+CPUmodel = process.communicate()[0].decode("utf-8").rstrip()
+
+cpu2 = "cat /proc/cpuinfo | grep -m 1 'cpu MHz' | sed 's/.*: //'"
+process = subprocess.Popen(cpu2, stdout=subprocess.PIPE, shell=True)
+CPUfreq = process.communicate()[0].decode("utf-8").rstrip()
+
+cpu3 = "cat /proc/cpuinfo | grep -m 1 'cache size' | sed 's/.*: //'"
+process = subprocess.Popen(cpu3, stdout=subprocess.PIPE, shell=True)
+CPUcache = process.communicate()[0].decode("utf-8").rstrip()
+
+# SETTINGS - MEM
+
+mem1 = "echo 'scale = 2; ('$(cat /proc/meminfo | grep MemTotal: | awk '{print $2}' | sed 's/k//')' /1024)' | bc"
+process = subprocess.Popen(mem1, stdout=subprocess.PIPE, shell=True)
+memTotal = process.communicate()[0].decode("utf-8").rstrip()
+
+mem2 = "echo 'scale = 2; ('$(cat /proc/meminfo | grep MemFree: | awk '{print $2}' | sed 's/k//')' /1024) + ('$(cat /proc/meminfo | grep grep -m 1 Cached: | awk '{print $2}' | sed 's/k//')' /1024)' | bc"
+process = subprocess.Popen(mem2, stdout=subprocess.PIPE, shell=True)
+memFree = process.communicate()[0].decode("utf-8").rstrip()
+
+mem3 = "echo 'scale = 2; ('$(cat /proc/meminfo | grep MemTotal: | awk '{print $2}' | sed 's/k//')' /1024) - (('$(cat /proc/meminfo | grep MemFree: | awk '{print $2}' | sed 's/k//')' /1024) + ('$(cat /proc/meminfo | grep -m 1 Cached: | awk '{print $2}' | sed 's/k//')' /1024))' | bc"
+process = subprocess.Popen(mem3, stdout=subprocess.PIPE, shell=True)
+memUsed = process.communicate()[0].decode("utf-8").rstrip()
+
+mem4 = "echo 'scale = 2; (('$(cat /proc/meminfo | grep MemTotal: | awk '{print $2}' | sed 's/k//')' /1024) - (('$(cat /proc/meminfo | grep MemFree: | awk '{print $2}' | sed 's/k//')' /1024) + ('$(cat /proc/meminfo | grep -m 1 Cached: | awk '{print $2}' | sed 's/k//')' /1024))) / ('$(cat /proc/meminfo | grep MemTotal: | awk '{print $2}' | sed 's/k//')' /1024) *100' | bc"
+process = subprocess.Popen(mem4, stdout=subprocess.PIPE, shell=True)
+memUsedPercent = process.communicate()[0].decode("utf-8").rstrip()
+
+# SETTINGS - DISKS
+
+disk1 = "df -HlT | grep /dev/sda1 | sed -r 's/ / /g' | sed -r 's/ / /g' | cut -d ' ' -f 1"
+process = subprocess.Popen(disk1, stdout=subprocess.PIPE, shell=True)
+rootPart = process.communicate()[0].decode("utf-8").rstrip()
+
+disk2 = "df -HlT | grep /dev/sda1 | sed -r 's/ / /g' | sed -r 's/ / /g' | cut -d ' ' -f 2"
+process = subprocess.Popen(disk2, stdout=subprocess.PIPE, shell=True)
+fileSys = process.communicate()[0].decode("utf-8").rstrip()
+
+disk3 = "df -HlT | grep /dev/sda1 | sed -r 's/ / /g' | sed -r 's/ / /g' | cut -d ' ' -f 3"
+process = subprocess.Popen(disk3, stdout=subprocess.PIPE, shell=True)
+diskTotal = process.communicate()[0].decode("utf-8").rstrip()
+
+disk4 = "df -HlT | grep /dev/sda1 | sed -r 's/ / /g' | sed -r 's/ / /g' | cut -d ' ' -f 4"
+process = subprocess.Popen(disk4, stdout=subprocess.PIPE, shell=True)
+diskUsed = process.communicate()[0].decode("utf-8").rstrip()
+
+disk5 = "df -HlT | grep /dev/sda1 | sed -r 's/ / /g' | sed -r 's/ / /g' | cut -d ' ' -f 5"
+process = subprocess.Popen(disk5, stdout=subprocess.PIPE, shell=True)
+diskFree = process.communicate()[0].decode("utf-8").rstrip()
+
+# SETTINGS - SWAP
+
+swap1 = "cat /proc/swaps | grep /dev/sda5 | sed -r 's/ / /g' | sed -r 's/ / /g' | cut -d ' ' -f 1"
+process = subprocess.Popen(swap1, stdout=subprocess.PIPE, shell=True)
+swapPart = process.communicate()[0].decode("utf-8").rstrip()
+
+swap2 = "echo 'scale = 2; ('$(cat /proc/meminfo | grep SwapTotal: | awk '{print $2}' | sed 's/k//')' /1024)' | bc"
+process = subprocess.Popen(swap2, stdout=subprocess.PIPE, shell=True)
+swapTotal = process.communicate()[0].decode("utf-8").rstrip()
+
+swap3 = "echo 'scale = 2; ('$(cat /proc/meminfo | grep SwapFree: | awk '{print $2}' | sed 's/k//')' /1024)' | bc"
+process = subprocess.Popen(swap3, stdout=subprocess.PIPE, shell=True)
+swapFree = process.communicate()[0].decode("utf-8").rstrip()
+
+swap4 = "echo 'scale = 2; ('$(cat /proc/meminfo | grep SwapTotal: | awk '{print $2}' | sed 's/k//')' /1024) - ('$(cat /proc/meminfo | grep SwapFree: | awk '{print $2}' | sed 's/k//')' /1024)' | bc"
+process = subprocess.Popen(swap4, stdout=subprocess.PIPE, shell=True)
+swapUsed = process.communicate()[0].decode("utf-8").rstrip()
+
+swap5 = "echo 'scale = 2; (('$(cat /proc/meminfo | grep SwapTotal: | awk '{print $2}' | sed 's/k//')' /1024) - ('$(cat /proc/meminfo | grep SwapFree: | awk '{print $2}' | sed 's/k//')' /1024)) / ('$(cat /proc/meminfo | grep SwapTotal: | awk '{print $2}' | sed 's/k//')' /1024) *100' | bc"
+process = subprocess.Popen(swap5, stdout=subprocess.PIPE, shell=True)
+swapUsedPercent = process.communicate()[0].decode("utf-8").rstrip()
+
+# SETTINGS - NET
+
+net1 = "/sbin/ifconfig 'enp3s0' | grep 'inet ' | sed 's/.*inet //' | sed 's/netmask.*//'"
+process = subprocess.Popen(net1, stdout=subprocess.PIPE, shell=True)
+netIP = process.communicate()[0].decode("utf-8").rstrip()
+
+net2 = "/sbin/ifconfig 'enp3s0' | grep 'RX packets' | sed 's/.*bytes [0-9]* (//' | sed 's/iB).*)*//' | sed 's/b).*)*//' | sed 's/).*)*//'"
+process = subprocess.Popen(net2, stdout=subprocess.PIPE, shell=True)
+netDown = process.communicate()[0].decode("utf-8").rstrip()
+
+net3 = "/sbin/ifconfig 'enp3s0' | grep 'TX packets' | sed 's/.*bytes [0-9]* (//' | sed 's/iB).*)*//' | sed 's/b).*)*//' | sed 's/).*)*//'"
+process = subprocess.Popen(net3, stdout=subprocess.PIPE, shell=True)
+netUp = process.communicate()[0].decode("utf-8").rstrip()
+
+# OPENBOX PIPEMENU
+
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
+print ('')
diff --git a/.config/openbox/pipemenus/virtualbox.sh b/.config/openbox/pipemenus/virtualbox.sh
new file mode 100755
index 0000000..f85ccb3
--- /dev/null
+++ b/.config/openbox/pipemenus/virtualbox.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+#
+# Copyright (C) 2009-2013 "isomorph"
+# All Rights Reserved.
+#
+# BSD 3-Clause License
+#
+# ----
+#
+# OpenBox "VirtualBox" pipe-menu
+# Outputs a menu roughly akin to:
+#
+# VirtualBox
+# ----------
+#
+#
+#
+# ...
+#
+# Usage:
+#
+# 1. Copy this file somewhere on your path and make it executable
+# 2. Add the following line somewhere to your /.config/openbox/menu.xml
+#
+#
+#
+# 3. Reconfigure openbox
+
+
+# make sure virtualbox itself exists
+which "virtualbox" > /dev/null
+if [ "$?" -ne "0" ]; then
+ cat <
+
+
+
+ x-www-browser https://www.virtualbox.org/wiki/Linux_Downloads
+
+
+EOF
+ exit 1
+fi
+
+# output the initial menu
+cat <
+
+
+
+ virtualbox -style gtk
+
+
+
+EOF
+
+# Check for the vboxmanage binary
+which "vboxmanage" > /dev/null
+if [ "$?" -ne "0" ]; then
+ echo ""
+ exit 0
+fi
+
+# seperate the main command from the virtuals
+echo " "
+
+# output the list of virtual machines
+vboxmanage list vms | cut -f 2 -d "\"" | sort -f | while read vm
+do
+ cat <
+
+
+ vboxmanage startvm "$vm"
+
+
+
+EOF
+done;
+
+# and finally...
+echo ""
diff --git a/.config/openbox/rc.xml b/.config/openbox/rc.xml
new file mode 100755
index 0000000..cc87504
--- /dev/null
+++ b/.config/openbox/rc.xml
@@ -0,0 +1,1090 @@
+
+
+
+
+ 10
+ 20
+
+
+ yes
+
+ yes
+
+ yes
+
+ no
+
+ 200
+
+ no
+
+
+
+ Smart
+
+