diff --git a/README.md b/README.md
new file mode 100644
index 0000000..2be2d50
--- /dev/null
+++ b/README.md
@@ -0,0 +1,57 @@
+# Crylia Theme
+
+This theme is inspired by simple bar and many other things that I think look good and fit my theme. AwesomeWM lets you configure your desktop as you want, no compromises, the sky is the limit!
+This is the reason I choose AwesomeWM.
+
+## FAQ - Wiki
+
+---
+
+If you feel lost, got a problem or just have a question, please check out the wiki first before opening an issue.
+
+## Quick Install
+
+---
+
+Installing my theme is rather easy, just copy the repo and put the awesome folder to ~/.config/
+But in order for it to work as seen you need some dependencies installed along the way
+
+||Arch|Ubuntu|Why?|
+|:-:|:-:|:-:|:-:|
+|Command|sudo pacman -S ( yay -S for aur )|sudo apt install||
+|AwesomeWM|awesome|awesome|Its your Window Manager lol|
+|Rofi|rofi|rofi|For the application launcher|
+|Picom|picom-ibhagwan-gitaur|[Guide here]()|Compositor, needed for transparency/blur/effects/animations etc|
+|||||
+## TODO
+
+---
+
+This is my 1.0 release, meaning that I will add many more features as time goes on. At this state the config is usable on (hopefully) all systems complying with my dependency list.
+
+- [ ] Independent Application launcher
+- [ ] Alt+Tab like Window switcher
+- [ ] Switching trough Keyboard layouts using \<*super*\>+\<*space*\>(like on gnome where you hold down super)
+- [ ] System tray needs a lot of work (maybe an own implementation)
+- [ ] Manual tiling layout like i3
+- [ ] Interactive calendar with online support
+
+## Features
+
+---
+
+Some would say there are more features than a WM needs, I say you can never have enough features (as long as they make some sense).
+
+- [x] Multi screen support
+- [x] Interactive taskbar (left, right click and hover over)
+- [x] Session option to reboot, shutdown etc
+- [x] Multi keyboard layout support + switch widget
+- [x] Calendar widget (not interactive)
+- [x] Rofi application launcher and window switcher
+- [x] Volume / Brightness switcher
+
+I've added various widgets you can choose or remove how you like it.
+
+__Including__:
+Battery, Network (Wifi, Ethernet), Bluetooth, Volume, Keyboardlayout, Date (with Calendar), Time, Session options, Taglist, Tasklist, Layoutswitcher.
+
diff --git a/awesome/crylia_bar/dock.lua b/awesome/crylia_bar/dock.lua
new file mode 100644
index 0000000..bc16cbe
--- /dev/null
+++ b/awesome/crylia_bar/dock.lua
@@ -0,0 +1,165 @@
+--------------------------------------------------------------------------------------------------------------
+-- This is the statusbar, every widget, module and so on is combined to all the stuff you see on the screen --
+--------------------------------------------------------------------------------------------------------------
+-- Awesome Libs
+local awful = require("awful")
+local colors = require ("theme.crylia.colors")
+local dpi = require("beautiful").xresources.apply_dpi
+local gears = require("gears")
+local wibox = require("wibox")
+
+return function(s, programs)
+
+ local function create_dock_element (program, name, size)
+
+ local function create_indicator()
+ local color = ""
+ local indicators = {layout = wibox.layout.flex.horizontal}
+ local t = 2
+ local naughty = require("naughty")
+ for i, indicator_screen in ipairs(screen) do
+ for j, indicator_client in ipairs(indicator_screen.clients) do
+ if indicator_client.class == program then
+ if indicator_client.maximized then
+ color = colors.color["Green200"]
+ elseif indicator_client.fullscreen then
+ color = colors.color["Red200"]
+ elseif indicator_client.focus then
+ color = colors.color["Blue200"]
+ elseif indicator_client.minimised then
+ color = colors.color["Pink200"]
+ else
+ color = colors.color["White"]
+ end
+
+ local indicator = wibox.widget{
+ widget = wibox.container.background,
+ shape = gears.shape.circle,
+ forced_height = dpi(5),
+ bg = color
+ }
+ indicators[t] = indicator
+ t = t + 1
+ end
+ end
+ end
+ return indicators
+ end
+
+ local dock_element = wibox.widget{
+ {
+ {
+ {
+ {
+ resize = true,
+ forced_width = size,
+ forced_height = size,
+ image = Get_icon_by_class_name("Papirus-Dark",program),
+ widget = wibox.widget.imagebox
+ },
+ create_indicator(),
+ layout = wibox.layout.align.vertical,
+ id = "dock_layout"
+ },
+ margins = dpi(5),
+ widget = wibox.container.margin,
+ id = "margin"
+ },
+ shape = function (cr, width, height)
+ gears.shape.rounded_rect(cr, width, height, 10)
+ end,
+ bg = colors.color["Grey900"],
+ widget = wibox.container.background,
+ id = "background"
+ },
+ margins = dpi(5),
+ widget = wibox.container.margin
+ }
+
+ hover_signal(dock_element.background, colors.color["Grey800"], colors.color["White"])
+
+ dock_element:connect_signal(
+ "button::press",
+ function ()
+ awful.spawn(program)
+ end
+ )
+
+ local dock_tooltip = awful.tooltip{
+ objects = {dock_element},
+ text = name,
+ mode = "outside",
+ preferred_alignments = "middle",
+ margins = dpi(10)
+ }
+ return dock_element
+ end
+
+ local dock = awful.popup{
+ widget = wibox.container.background,
+ ontop = true,
+ bg = colors.color["Grey900"],
+ visible = true,
+ screen = s,
+ type = "dock",
+ height = user_vars.vars.dock_icon_size + 10,
+ placement = function(c) awful.placement.bottom(c, {margins = dpi(10)}) end,
+ shape = function(cr, width, height)
+ gears.shape.rounded_rect(cr, width, height, 15)
+ end
+ }
+
+ local function get_dock_elements(pr)
+ local dock_elements = {layout = wibox.layout.fixed.horizontal}
+
+ for i, p in ipairs(pr) do
+ dock_elements[i] = create_dock_element(p[1], p[2], user_vars.vars.dock_icon_size)
+ end
+
+ return dock_elements
+ end
+
+ dock:setup {
+ get_dock_elements(programs),
+ layout = wibox.layout.fixed.vertical
+ }
+
+ -- TODO: This function runs only every second, it can be optimized by
+ -- calling it every time the mouse is over the dock, a client changes it states ...
+ -- but im too lazy rn
+ local function check_for_dock_hide()
+ for i, screen in ipairs(screen) do
+ local mx, my = mouse.coords().x * 100 / screen.geometry.width, mouse.coords().y * 100 / screen.geometry.height
+ if ((mx > 30) and (mx < 70)) and (my > 95) then
+ dock.visible = true
+ break;
+ end
+ for j, c in ipairs(screen.clients) do
+ local y = c:geometry().y
+ local h = c.height
+ if (y + h) >= screen.geometry.height - user_vars.vars.dock_icon_size - 35 then
+ dock.visible = false
+ break;
+ else
+ dock.visible = true
+ end
+ end
+ end
+ end
+ local naughty = require("naughty")
+ awesome.connect_signal(
+ "manage",
+ function ()
+ naughty.notify({title = "hi"})
+ end
+ )
+
+ local dock_intelligent_hide = gears.timer{
+ timeout = 1,
+ autostart = true,
+ call_now = true,
+ callback = function ()
+ check_for_dock_hide()
+ end
+ }
+end
\ No newline at end of file
diff --git a/awesome/crylia_bar/init.lua b/awesome/crylia_bar/init.lua
index 989df8b..9dbd783 100644
--- a/awesome/crylia_bar/init.lua
+++ b/awesome/crylia_bar/init.lua
@@ -31,5 +31,6 @@ awful.screen.connect_for_each_screen(
require("crylia_bar.left_bar")(s, {s.layoutlist, s.systray, s.taglist})
require("crylia_bar.center_bar")(s, s.tasklist)
require("crylia_bar.right_bar")(s, {s.battery, s.network, s.bluetooth, s.audio, s.kblayout, s.date, s.clock,s.powerbutton})
+ require("crylia_bar.dock")(s, user_vars.vars.dock_programs)
end
)
diff --git a/awesome/main/user_variables.lua b/awesome/main/user_variables.lua
index e10a729..c521ecf 100644
--- a/awesome/main/user_variables.lua
+++ b/awesome/main/user_variables.lua
@@ -1,8 +1,17 @@
-------------------------------------------
-- Uservariables are stored in this file --
-------------------------------------------
+local dpi = require("beautiful").xresources.apply_dpi
local home = os.getenv("HOME")
+local function get_screen()
+ local screen = {}
+ for i, s in ipairs(screen) do
+ screen[i] = {screen.x, screen.y}
+ end
+ return screen
+end
+
-- If you want different default programs, wallpaper path or modkey; edit this file.
local _M = {
@@ -28,7 +37,27 @@ local _M = {
file_manager = "thunar",
-- Screenshot program to make a screenshot when print is hit
- screenshot_program = "flameshot gui"
+ screenshot_program = "flameshot gui",
+
+ -- If you use the dock here is how you control its size
+ dock_icon_size = dpi(50),
+
+ -- Add your programs exactly like in this example.
+ -- First entry has to be how you would start the program in the terminal (just try it if you dont know yahoo it)
+ -- Second can be what ever the fuck you want it to be (will be the displayed name if you hover over it)
+ dock_programs = {
+ {"firefox", "Firefox"},
+ {"discord", "Discord"},
+ {"spotify", "Spotify"},
+ {"code", "Visual Studio Code"},
+ {"arduino", "Arduino IDE"},
+ {"zoom", "Zoom"},
+ {"thunderbird", "Thunderbird"},
+ {"mattermost-desktop", "Mattermost"},
+ {"blender", "Blender"}
+ },
+
+ screens_size = get_screen()
}
return _M
\ No newline at end of file
diff --git a/awesome/theme/crylia/theme_variables.lua b/awesome/theme/crylia/theme_variables.lua
index b52d9e3..0baa365 100644
--- a/awesome/theme/crylia/theme_variables.lua
+++ b/awesome/theme/crylia/theme_variables.lua
@@ -70,4 +70,13 @@ Theme.titlebar_maximized_button_active = icondir .. "maximize.svg"
Theme.titlebar_maximized_button_inactive = icondir .. "maximize.svg"
Theme.bg_systray = colors.color["BlueGrey800"]
-Theme.systray_icon_spacing = dpi(10)
\ No newline at end of file
+Theme.systray_icon_spacing = dpi(10)
+
+Theme.hotkeys_bg = colors.color["Grey900"]
+Theme.hotkeys_fg = colors.color["White"]
+Theme.hotkeys_border_width = 0
+Theme.hotkeys_shape = function (cr, width, height)
+ gears.shape.rounded_rect(cr, width, height, 10)
+end
+Theme.hotkeys_description_font = "JetBrains Mono, Bold 14"
+
diff --git a/awesome/theme/crylia/tools/icon_handler.lua b/awesome/theme/crylia/tools/icon_handler.lua
index 2a9ce31..0520356 100644
--- a/awesome/theme/crylia/tools/icon_handler.lua
+++ b/awesome/theme/crylia/tools/icon_handler.lua
@@ -2,11 +2,13 @@
-- This is the audio widget --
------------------------------
local naughty = require("naughty")
+local awful = require("awful")
+
function Get_icon(theme, c)
if theme and c then
- local clientName = string.lower(c.class) .. ".svg"
+ local clientName
+ clientName = string.lower(c.class) .. ".svg"
local resolutions = {"128x128", "96x96", "64x64", "48x48", "42x42", "32x32", "24x24", "16x16"}
- local home = os.getenv("HOME")
for i, res in ipairs(resolutions) do
local iconDir = "/usr/share/icons/" .. theme .. "/" .. res .."/apps/"
local ioStream = io.open(iconDir .. clientName, "r")
@@ -18,4 +20,22 @@ function Get_icon(theme, c)
end
end
return c:Get_icon(1)
+end
+
+function Get_icon_by_class_name(theme, c)
+ if theme and c then
+ local c_name = string.lower(c) .. ".svg"
+ local resolutions = {"128x128", "96x96", "64x64", "48x48", "42x42", "32x32", "24x24", "16x16"}
+ for i, res in ipairs(resolutions) do
+ local iconDir = "/usr/share/icons/" .. theme .. "/" .. res .."/apps/"
+ local ioStream = io.open(iconDir .. c_name, "r")
+ if ioStream ~= nil then
+ return iconDir .. c_name
+ end
+ end
+ end
+end
+
+function Get_icon_by_desktop(theme, c)
+
end
\ No newline at end of file
diff --git a/awesome/theme/crylia/widgets/battery.lua b/awesome/theme/crylia/widgets/battery.lua
index 96789e1..5c5d313 100644
--- a/awesome/theme/crylia/widgets/battery.lua
+++ b/awesome/theme/crylia/widgets/battery.lua
@@ -62,8 +62,8 @@ return function ()
local battery_tooltip = awful.tooltip{
objects = {battery_widget},
text = "",
- mode = "inside",
- align = "right",
+ mode = "outside",
+ preferred_alignments = "middle",
margins = dpi(10)
}
diff --git a/awesome/theme/crylia/widgets/bluetooth.lua b/awesome/theme/crylia/widgets/bluetooth.lua
index 413fbfe..3dcda5a 100644
--- a/awesome/theme/crylia/widgets/bluetooth.lua
+++ b/awesome/theme/crylia/widgets/bluetooth.lua
@@ -43,8 +43,8 @@ return function ()
local bluetooth_tooltip = awful.tooltip{
objects = {bluetooth_widget},
text = "",
- mode = "inside",
- align = "right",
+ mode = "outside",
+ preferred_alignments = "middle",
margins = dpi(10)
}
diff --git a/awesome/theme/crylia/widgets/kblayout.lua b/awesome/theme/crylia/widgets/kblayout.lua
index e32c7ee..e0d79d0 100644
--- a/awesome/theme/crylia/widgets/kblayout.lua
+++ b/awesome/theme/crylia/widgets/kblayout.lua
@@ -75,7 +75,7 @@ return function ()
local xkeyboard_country_code = {
{"ad", "", "AND"}, -- Andorra
- {"af", "", "AFG"}, -- Afganistan
+ {"af", "", "AFG"}, -- Afghanistan
{"al", "", "ALB"}, -- Albania
{"am", "", "ARM"}, -- Armenia
{"ara", "", "ARB"}, -- Arabic
diff --git a/awesome/theme/crylia/widgets/network.lua b/awesome/theme/crylia/widgets/network.lua
index 3473d2e..251f28c 100644
--- a/awesome/theme/crylia/widgets/network.lua
+++ b/awesome/theme/crylia/widgets/network.lua
@@ -72,8 +72,8 @@ return function ()
local network_tooltip = awful.tooltip{
text = "Loading",
objects = {network_widget},
- mode = "inside",
- align = "right",
+ mode = "outside",
+ preferred_alignments = "middle",
margins = dpi(10)
}
diff --git a/awesome/theme/crylia/widgets/systray.lua b/awesome/theme/crylia/widgets/systray.lua
index f7e2fe2..769ec59 100644
--- a/awesome/theme/crylia/widgets/systray.lua
+++ b/awesome/theme/crylia/widgets/systray.lua
@@ -26,6 +26,7 @@ return function (s)
width = dpi(100),
strategy = "exact",
layout = wibox.container.constraint,
+ id = "container"
},
widget = wibox.container.background,
shape = function (cr, width, height)
@@ -34,7 +35,7 @@ return function (s)
bg = color.color["BlueGrey800"]
}
-- Signals
- --hover_signal(systray, color.color["Red200"])
+ hover_signal(systray.container, color.color["Red200"])
return systray
end
\ No newline at end of file
diff --git a/awesome/theme/crylia/widgets/taglist.lua b/awesome/theme/crylia/widgets/taglist.lua
index 51c37c2..20b3895 100644
--- a/awesome/theme/crylia/widgets/taglist.lua
+++ b/awesome/theme/crylia/widgets/taglist.lua
@@ -90,10 +90,12 @@ local list_update = function (widget, buttons, label, data, objects)
tag_widget:buttons(create_buttons(buttons, object))
local text, bg_color, bg_image, icon, args = label(object, tag_label)
-
+ local naughty = require("naughty")
tag_label:set_text(object.index)
-
- if object == awful.screen.focused().selected_tag then
+ if object.urgent == true then
+ tag_widget:set_bg(color.color["RedA200"])
+ tag_widget:set_fg(color.color["Grey900"])
+ elseif object == awful.screen.focused().selected_tag then
tag_widget:set_bg(color.color["White"])
tag_widget:set_fg(color.color["Grey900"])
else
diff --git a/awesome/theme/crylia/widgets/tasklist.lua b/awesome/theme/crylia/widgets/tasklist.lua
index 26cb249..d52a470 100644
--- a/awesome/theme/crylia/widgets/tasklist.lua
+++ b/awesome/theme/crylia/widgets/tasklist.lua
@@ -6,45 +6,42 @@ local color = require('theme.crylia.colors')
local list_update = function (widget, buttons, label, data, objects)
widget:reset()
-
for i, object in ipairs(objects) do
-
- local task_icon = wibox.widget{
- nil,
- {
- id = "icon",
- resize = true,
- widget = wibox.widget.imagebox
- },
- nil,
- layout = wibox.layout.align.horizontal
- }
-
- local task_icon_margin = wibox.widget{
- task_icon,
- forced_width = dpi(33),
- margins = dpi(3),
- widget = wibox.container.margin
- }
-
- local task_title = wibox.widget{
- text = "",
- align = "center",
- valign = "center",
- visible = true,
- widget = wibox.widget.textbox
- }
-
local task_widget = wibox.widget{
{
{
- task_icon_margin,
- task_title,
- layout = wibox.layout.fixed.horizontal
+ {
+ {
+ nil,
+ {
+ id = "icon",
+ resize = true,
+ widget = wibox.widget.imagebox
+ },
+ nil,
+ layout = wibox.layout.align.horizontal,
+ id = "layout_icon"
+ },
+ forced_width = dpi(33),
+ margins = dpi(3),
+ widget = wibox.container.margin,
+ id = "margin"
+ },
+ {
+ text = "",
+ align = "center",
+ valign = "center",
+ visible = true,
+ widget = wibox.widget.textbox,
+ id = "title"
+ },
+ layout = wibox.layout.fixed.horizontal,
+ id = "layout_it"
},
right = dpi(5),
left = dpi(5),
- widget = wibox.container.margin
+ widget = wibox.container.margin,
+ id = "container"
},
bg = color.color["White"],
fg = color.color["Grey900"],
@@ -87,11 +84,11 @@ local list_update = function (widget, buttons, label, data, objects)
task_widget:buttons(create_buttons(buttons, object))
- local text, bg, bg_image, icon, args = label(object, task_title)
+ local text, bg, bg_image, icon, args = label(object, task_widget.container.layout_it.title)
if object == client.focus then
if text == nil or text == '' then
- task_title:set_margins(0)
+ task_widget.container.layout_it.title:set_margins(0)
else
local text_full = text:match('>(.-)<')
if text_full then
@@ -104,12 +101,12 @@ local list_update = function (widget, buttons, label, data, objects)
end
task_widget:set_bg(color.color["White"])
task_widget:set_fg(color.color["Grey900"])
- task_title:set_text(text)
+ task_widget.container.layout_it.title:set_text(text)
else
task_widget:set_bg("#3A475C")
- task_title:set_text('')
+ task_widget.container.layout_it.title:set_text('')
end
- task_icon.icon:set_image(Get_icon("Papirus-Dark", object))
+ task_widget.container.layout_it.margin.layout_icon.icon:set_image(Get_icon("Papirus-Dark", object))
widget:add(task_widget)
widget:set_spacing(dpi(6))