diff --git a/awesome/src/assets/icons/ArchLogo.png b/awesome/src/assets/icons/ArchLogo.png
new file mode 100644
index 0000000..143dc53
Binary files /dev/null and b/awesome/src/assets/icons/ArchLogo.png differ
diff --git a/awesome/src/assets/userpfp/crylia.png b/awesome/src/assets/userpfp/crylia.png
index cc2d872..f7f5c0d 100644
Binary files a/awesome/src/assets/userpfp/crylia.png and b/awesome/src/assets/userpfp/crylia.png differ
diff --git a/awesome/src/lib/dbus_proxy b/awesome/src/lib/dbus_proxy
deleted file mode 160000
index c9253bd..0000000
--- a/awesome/src/lib/dbus_proxy
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit c9253bde3fa5a64261953d1b196c57fabf9f8561
diff --git a/awesome/src/lib/lua-dbus_proxy b/awesome/src/lib/lua-dbus_proxy
new file mode 160000
index 0000000..011306f
--- /dev/null
+++ b/awesome/src/lib/lua-dbus_proxy
@@ -0,0 +1 @@
+Subproject commit 011306f859457865d3d289c49b640ac848d8fb1a
diff --git a/awesome/src/modules/crylia_bar/init.lua b/awesome/src/modules/crylia_bar/init.lua
index d8a412e..5d29bb1 100644
--- a/awesome/src/modules/crylia_bar/init.lua
+++ b/awesome/src/modules/crylia_bar/init.lua
@@ -19,7 +19,7 @@ return function(s)
elseif widget == "Clock" then
table.insert(widget_table, require("src.widgets.clock")())
elseif widget == "Cpu Frequency" then
- table.insert(widget_table, require("src.widgets.cpu_info")("freq", User_config.cpu_frequency))
+ table.insert(widget_table, require("src.widgets.cpu_info")("freq"))
elseif widget == "Cpu Temperature" then
table.insert(widget_table, require("src.widgets.cpu_info")("temp"))
elseif widget == "Cpu Usage" then
@@ -35,7 +35,7 @@ return function(s)
elseif widget == "Tiling Layout" then
table.insert(widget_table, require("src.widgets.layout_list")())
elseif widget == "Network" then
- table.insert(widget_table, require("src.widgets.network")())
+ table.insert(widget_table, require("src.widgets.network") { screen = s })
elseif widget == "Power Button" then
table.insert(widget_table, require("src.widgets.power")())
elseif widget == "Ram Usage" then
diff --git a/awesome/src/modules/crylia_bar/right_bar.lua b/awesome/src/modules/crylia_bar/right_bar.lua
index 97d02c7..58684ac 100644
--- a/awesome/src/modules/crylia_bar/right_bar.lua
+++ b/awesome/src/modules/crylia_bar/right_bar.lua
@@ -55,7 +55,6 @@ return function(s, w)
bg = Theme_config.right_bar.bg,
visible = true,
screen = s,
- maximum_width = dpi(650),
placement = function(c) awful.placement.top_right(c, { margins = dpi(10) }) end
}
diff --git a/awesome/src/modules/init.lua b/awesome/src/modules/init.lua
index 2ad7e51..5a35788 100644
--- a/awesome/src/modules/init.lua
+++ b/awesome/src/modules/init.lua
@@ -19,7 +19,7 @@ awful.screen.connect_for_each_screen(function(s)
require("src.modules.notification-center.init")(s)
require("src.modules.window_switcher.init")(s)
require("src.modules.application_launcher.init") { screen = s }
- require("src.modules.network_controller.init") { screen = s }
+ --require("src.modules.network_controller.init") { screen = s }
end)
do
diff --git a/awesome/src/modules/network_controller/access_point.lua b/awesome/src/modules/network_controller/access_point.lua
index e63c1b8..311c416 100644
--- a/awesome/src/modules/network_controller/access_point.lua
+++ b/awesome/src/modules/network_controller/access_point.lua
@@ -102,7 +102,7 @@ function access_point:create_profile(ap, password, auto_connect)
}
end
-function access_point:disconnect_ap()
+function access_point:disconnect()
self.NetworkManager:DeactivateConnection(self.NetworkManagerDevice.ActiveConnection)
end
@@ -137,16 +137,16 @@ function access_point:connect(ap, password, auto_connect)
end
end
-function access_point:toggle_access_point(ap, password, auto_connect)
+function access_point:toggle_connection(ap, password, auto_connect)
if self:is_ap_active(ap) then
- self:disconnect_ap()
+ self:disconnect()
else
- self:connect_ap(ap, password, auto_connect)
+ self:connect(ap, password, auto_connect)
end
end
function access_point:is_ap_active(ap)
- return ap.path == self.NetworkManagerDeviceWireless.ActiveAccessPoint
+ return ap.object_path == self.NetworkManagerDeviceWireless.ActiveAccessPoint
end
function access_point.new(args)
@@ -154,14 +154,6 @@ function access_point.new(args)
if not args.NetworkManagerAccessPoint then return end
- local bg, fg, icon_color = Theme_config.network_manager.access_point.bg, Theme_config.network_manager.access_point.fg,
- Theme_config.network_manager.access_point.icon_color
-
- --[[ if get_active_access_point() == args.NetworkManagerAccessPoint.access_point_path then
- bg, fg, icon_color = Theme_config.network_manager.access_point.fg, Theme_config.network_manager.access_point.bg,
- Theme_config.network_manager.access_point.icon_color2
- end ]]
-
local ssid_text = awidget.inputbox {
text = NM.utils_ssid_to_utf8(args.NetworkManagerAccessPoint.Ssid) or
args.NetworkManagerAccessPoint.hw_address or "Unknown",
@@ -177,7 +169,7 @@ function access_point.new(args)
{
image = gcolor.recolor_image(
icondir .. "wifi-strength-" .. math.floor(args.NetworkManagerAccessPoint.Strength / 25) + 1 .. ".svg",
- icon_color),
+ Theme_config.network_manager.access_point.icon_color),
id = "icon",
resize = true,
valign = "center",
@@ -245,8 +237,8 @@ function access_point.new(args)
margins = dpi(5),
widget = wibox.container.margin
},
- bg = bg,
- fg = fg,
+ bg = Theme_config.network_manager.access_point.bg,
+ fg = Theme_config.network_manager.access_point.fg,
border_color = Theme_config.network_manager.access_point.border_color,
border_width = Theme_config.network_manager.access_point.border_width,
id = "background",
@@ -262,6 +254,47 @@ function access_point.new(args)
ret.NetworkManagerDevice = args.NetworkManagerDevice
ret.NetworkManager = args.NetworkManager
+ ret.NetworkManagerAccessPointProperties = dbus_proxy.Proxy:new {
+ bus = dbus_proxy.Bus.SYSTEM,
+ name = "org.freedesktop.NetworkManager",
+ interface = "org.freedesktop.DBus.Properties",
+ path = ret.NetworkManagerAccessPoint.object_path,
+ }
+
+ -- Update the access point strength
+ ret.NetworkManagerAccessPointProperties:connect_signal(function(_, properties, data)
+ if data.Strength then
+ awesome.emit_signal("NM::AccessPointStrength", data.Strength)
+ if ret.is_ap_active(ret.NetworkManagerAccessPoint.object_path) then
+ ret:get_children_by_id("icon")[1].image = gcolor.recolor_image(
+ icondir .. "wifi-strength-" .. math.floor(data.Strength / 25) + 1 .. ".svg",
+ Theme_config.network_manager.access_point.icon_color2)
+ else
+ ret:get_children_by_id("icon")[1].image = gcolor.recolor_image(
+ icondir .. "wifi-strength-" .. math.floor(data.Strength / 25) + 1 .. ".svg",
+ Theme_config.network_manager.access_point.icon_color)
+ end
+ end
+ end, "PropertiesChanged")
+
+ if ret:is_ap_active(ret.NetworkManagerAccessPoint) then
+ ret.bg = Theme_config.network_manager.access_point.fg
+ ret.fg = Theme_config.network_manager.access_point.bg
+ ret:get_children_by_id("icon")[1].image = gcolor.recolor_image(
+ icondir .. "wifi-strength-" .. math.floor(ret.NetworkManagerAccessPoint.Strength / 25) + 1 .. ".svg",
+ Theme_config.network_manager.access_point.icon_color2)
+ ret:get_children_by_id("con")[1].image = gcolor.recolor_image(
+ icondir .. "link.svg", Theme_config.network_manager.access_point.icon_color2)
+ else
+ ret.bg = Theme_config.network_manager.access_point.bg
+ ret.fg = Theme_config.network_manager.access_point.fg
+ ret:get_children_by_id("icon")[1].image = gcolor.recolor_image(
+ icondir .. "wifi-strength-" .. math.floor(ret.NetworkManagerAccessPoint.Strength / 25) + 1 .. ".svg",
+ Theme_config.network_manager.access_point.icon_color)
+ ret:get_children_by_id("con")[1].image = gcolor.recolor_image(
+ icondir .. "link.svg", Theme_config.network_manager.access_point.icon_color)
+ end
+
ret.ap_form = ap_form {
screen = args.screen,
NetworkManagerAccessPoint = args.NetworkManagerAccessPoint,
@@ -305,27 +338,9 @@ function access_point.new(args)
icondir .. "link.svg",
Theme_config.network_manager.access_point.icon_color),
callback = function()
- ret:toggle_access_point()
+ ret:toggle_connection(ret.NetworkManagerAccessPoint)
end,
id = "connected"
- },
- { -- Rename a device
- name = "Rename",
- icon = gcolor.recolor_image(icondir .. "edit.svg", Theme_config.network_manager.icon_color),
- callback = function()
- ssid_text:focus()
- ssid_text:connect_signal("submit", function(text)
- text = text:get_text()
- ssid_text.markup = ret:rename(text)
- end)
- end
- },
- { -- Remove a device
- name = "Remove",
- icon = gcolor.recolor_image(icondir .. "delete.svg", Theme_config.network_manager.icon_color),
- callback = function()
-
- end
}
}
}
@@ -333,8 +348,11 @@ function access_point.new(args)
ret:buttons(gtable.join(
abutton({}, 1, nil,
function()
- --TODO:Check if there are any connection details, else open the popup
- ret.ap_form:popup_toggle()
+ if ret:is_ap_active(ret.NetworkManagerAccessPoint) then
+ ret:disconnect()
+ else
+ ret.ap_form:popup_toggle()
+ end
end
),
abutton({}, 3, nil,
@@ -344,9 +362,6 @@ function access_point.new(args)
)
))
- ret:get_children_by_id("con")[1].image = gcolor.recolor_image(
- icondir .. "link.svg", icon_color)
-
Hover_signal(ret)
return ret
diff --git a/awesome/src/modules/network_controller/init.lua b/awesome/src/modules/network_controller/init.lua
index 5007fec..bb8a6bf 100644
--- a/awesome/src/modules/network_controller/init.lua
+++ b/awesome/src/modules/network_controller/init.lua
@@ -3,25 +3,28 @@
------------------------------------
-- Awesome Libs
-local awful = require("awful")
+local abutton = require("awful.button")
+local base = require("wibox.widget.base")
local dbus_proxy = require("src.lib.lua-dbus_proxy.src.dbus_proxy")
local dpi = require("beautiful").xresources.apply_dpi
-local gtable = require("gears").table
-local gtimer = require("gears").timer
-local gshape = require("gears").shape
-local gcolor = require("gears").color
-local gears = require("gears")
+local gcolor = require("gears.color")
+local gfilesystem = require("gears.filesystem")
+local gshape = require("gears.shape")
+local gtable = require("gears.table")
+local gtimer = require("gears.timer")
local lgi = require("lgi")
+local NM = lgi.NM
+local naughty = require("naughty")
local wibox = require("wibox")
-local NM = require("lgi").NM
-local base = require("wibox.widget.base")
+-- Third party libs
local rubato = require("src.lib.rubato")
+-- Local libs
local access_point = require("src.modules.network_controller.access_point")
local dnd_widget = require("awful.widget.toggle_widget")
-local icondir = gears.filesystem.get_configuration_dir() .. "src/assets/icons/network/"
+local icondir = gfilesystem.get_configuration_dir() .. "src/assets/icons/network/"
local network = { mt = {} }
@@ -57,10 +60,17 @@ network.DeviceState = {
FAILED = 120
}
-function network:get_wifi_proxy()
+---Get the wifi and or ethernet proxy and connect to their PropertiesChanged signal
+-- The signals will return the following
+-- wifi: { "Bitrate", "Strength" }
+-- ethernet: { "Carrier", "Speed" }
+function network:get_active_device()
+ --Get all devices
local devices = self._private.NetworkManager:GetDevices()
if (not devices) or (#devices == 0) then return end
+ -- Loop trough every found device
for _, path in ipairs(devices) do
+ --Create a new proxy for every device
local NetworkManagerDevice = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
name = "org.freedesktop.NetworkManager",
@@ -68,67 +78,108 @@ function network:get_wifi_proxy()
path = path
}
- if NetworkManagerDevice.DeviceType == network.DeviceType.WIFI then
+ --Check if the device is either a wifi or ethernet device, and if its activated
+ -- if its activated then its currently in use
+ if (NetworkManagerDevice.DeviceType == network.DeviceType.WIFI) and
+ (NetworkManagerDevice.State == network.DeviceState.ACTIVATED) then
+ -- Set the wifi device as the main device
self._private.NetworkManagerDevice = NetworkManagerDevice
+ --New wifi proxy to check the bitrate
self._private.NetworkManagerDeviceWireless = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
name = "org.freedesktop.NetworkManager",
interface = "org.freedesktop.NetworkManager.Device.Wireless",
path = path
}
+ -- Watch PropertiesChanged and update the bitrate
+ local NetworkManagerDeviceWirelessProperties = dbus_proxy.Proxy:new {
+ bus = dbus_proxy.Bus.SYSTEM,
+ name = "org.freedesktop.NetworkManager",
+ interface = "org.freedesktop.DBus.Properties",
+ path = self._private.NetworkManagerDeviceWireless.object_path
+ }
- self._private.NetworkManagerDevice:connect_signal(function(proxy, new_state, old_state, reason)
+ NetworkManagerDeviceWirelessProperties:connect_signal(function(_, properties, data)
+ if data.Bitrate then
+ self:emit_signal("NM::Bitrate", data.Bitrate)
+ end
+ end, "PropertiesChanged")
+ -- Watch the StateChanged signal, update and notify when a new AP is connected
+ self._private.NetworkManagerDevice:connect_signal(function(proxy, new_state)
local NetworkManagerAccessPoint = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
name = "org.freedesktop.NetworkManager",
interface = "org.freedesktop.NetworkManager.AccessPoint",
- path = self._private.wifi_proxy.ActiveAccessPoint
+ path = self._private.NetworkManagerDeviceWireless.ActiveAccessPoint
}
- self:emit_signal(tostring(NetworkManagerAccessPoint.HwAddress) .. "::state", new_state, old_state)
if new_state == network.DeviceState.ACTIVATED then
local ssid = NM.utils_ssid_to_utf8(NetworkManagerAccessPoint.Ssid)
self:emit_signal("NM::AccessPointConnected", ssid, NetworkManagerAccessPoint.Strength)
- print("AP Connected: ", ssid, NetworkManagerAccessPoint.Strength)
+ end
+ end, "StateChanged")
+
+ elseif (NetworkManagerDevice.DeviceType == network.DeviceType.ETHERNET) and
+ (NetworkManagerDevice.State == network.DeviceState.ACTIVATED) then
+ -- Create a new ethernet device and set it as the active device
+ self._private.NetworkManagerDevice = NetworkManagerDevice
+ self._private.NetworkManagerDeviceWired = dbus_proxy.Proxy:new {
+ bus = dbus_proxy.Bus.SYSTEM,
+ name = "org.freedesktop.NetworkManager",
+ interface = "org.freedesktop.NetworkManager.Device.Wired",
+ path = path
+ }
+
+ local NetworkManagerDeviceWiredProperties = dbus_proxy.Proxy:new {
+ bus = dbus_proxy.Bus.SYSTEM,
+ name = "org.freedesktop.NetworkManager",
+ interface = "org.freedesktop.DBus.Properties",
+ path = self._private.NetworkManagerDeviceWired.object_path
+ }
+
+ -- Watch the PropertiesChanged signal and update the speed and carrier
+ NetworkManagerDeviceWiredProperties:connect_signal(function(_, properties, data)
+ if data.Speed then
+ print(data.Speed)
+ self:emit_signal("NM::Speed", data.Speed)
+ elseif data.Carrier then
+ print(data.Carrier)
+ self:emit_signal("NM::Carrier", data.Carrier)
+ end
+ end, "PropertiesChanged")
+
+ -- Connect to the StateChanged signal and notify when the wired connection is ready
+ self._private.NetworkManagerDevice:connect_signal(function(proxy, new_state)
+ if new_state == network.DeviceState.ACTIVATED then
+ self:emit_signal("NM::EthernetActive")
+ print("Ethernet active")
end
end, "StateChanged")
end
end
end
-function network.device_state_to_string(state)
- local device_state_to_string = {
- [0] = "Unknown",
- [10] = "Unmanaged",
- [20] = "Unavailable",
- [30] = "Disconnected",
- [40] = "Prepare",
- [50] = "Config",
- [60] = "Need Auth",
- [70] = "IP Config",
- [80] = "IP Check",
- [90] = "Secondaries",
- [100] = "Activated",
- [110] = "Deactivated",
- [120] = "Failed"
- }
-
- return device_state_to_string[state]
-end
-
---Scan for access points and create a widget for each one.
function network:scan_access_points()
if not self._private.NetworkManagerDeviceWireless then return end
local ap_list = self:get_children_by_id("wifi_ap_list")[1]
ap_list:reset()
- self._private.NetworkManagerDeviceWireless:RequestScanAsync(function(proxy, context, success, failure)
+ local ap_table = {}
+ self._private.NetworkManagerDeviceWireless:RequestScanAsync(function(_, _, _, failure)
if failure then
+ naughty.notification {
+ app_icon = icondir .. "ethernet.svg",
+ app_name = "Network Manager",
+ title = "Error: Scan failed!",
+ message = "Failed to scan for access points.\n" .. failure,
+ icon = gcolor.recolor_image(icondir .. "ethernet.svg", Theme_config.network.icon_color),
+ timeout = 5,
+ }
return
end
-- Get every access point even those who hide their ssid
for _, ap in ipairs(self._private.NetworkManagerDeviceWireless:GetAllAccessPoints()) do
-
-- Create a new proxy for every ap
local NetworkManagerAccessPoint = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
@@ -138,34 +189,42 @@ function network:scan_access_points()
}
-- We are only interested in those with a ssid
- if NetworkManagerAccessPoint.Ssid then
- ap_list:add(access_point {
- NetworkManagerAccessPoint = NetworkManagerAccessPoint,
- NetworkManagerDevice = self._private.NetworkManagerDevice,
- NetworkManagerSettings = self._private.NetworkManagerSettings,
- NetworkManager = self._private.NetworkManager,
- NetworkManagerDeviceWireless = self._private.NetworkManagerDeviceWireless
- })
+ if NM.utils_ssid_to_utf8(NetworkManagerAccessPoint.Ssid) and NetworkManagerAccessPoint.Strength then
+ if (ap_table[NetworkManagerAccessPoint.Ssid] == nil) or
+ NetworkManagerAccessPoint.Strength > ap_table[NetworkManagerAccessPoint.Ssid].Strength then
+ ap_table[NetworkManagerAccessPoint.Ssid] = NetworkManagerAccessPoint
+ end
end
end
- table.sort(ap_list, function(a, b)
- return a.NetworkManagerAccessPoint.Strength > b.NetworkManagerAccessPoint.Strength
+ --sort ap_table first by strength
+ local sorted_ap_table = {}
+ for _, NetworkManagerAccessPoint in pairs(ap_table) do
+ table.insert(sorted_ap_table, NetworkManagerAccessPoint)
+ end
+ --sort the table by strength but have the active_ap at the top
+ table.sort(sorted_ap_table, function(a, b)
+ if a.object_path == self._private.NetworkManagerDeviceWireless.ActiveAccessPoint then
+ return true
+ else
+ return a.Strength > b.Strength
+ end
end)
+ for _, NetworkManagerAccessPoint in ipairs(sorted_ap_table) do
+ ap_list:add(access_point {
+ NetworkManagerAccessPoint = NetworkManagerAccessPoint,
+ NetworkManagerDevice = self._private.NetworkManagerDevice,
+ NetworkManagerSettings = self._private.NetworkManagerSettings,
+ NetworkManager = self._private.NetworkManager,
+ NetworkManagerDeviceWireless = self._private.NetworkManagerDeviceWireless
+ })
+ end
end, { call_id = "my-id" }, {})
end
-function network:is_ap_active(ap)
- return ap.path == self._private.NetworkManagerDeviceWireless.ActiveAccessPoint
-end
-
---Toggles networking on or off
function network:toggle_wifi()
local enable = not self._private.NetworkManager.WirelessEnabled
- if enable then
- self._private.NetworkManager.Enable(true)
- end
-
self._private.NetworkManager:Set("org.freedesktop.NetworkManager", "WirelessEnabled", lgi.GLib.Variant("b", enable))
self._private.NetworkManager.WirelessEnabled = { signature = "b", value = enable }
end
@@ -336,11 +395,16 @@ function network.new(args)
}
ret._private.NetworkManagerProperties:connect_signal(function(_, properties, data)
- if data.WirelessEnables ~= nil and ret._private.WirelessEnabled ~= data.WirelessEnabled then
+ if data.WirelessEnabled ~= nil and ret._private.WirelessEnabled ~= data.WirelessEnabled then
ret._private.WirelessEnabled = data.WirelessEnabled
+ if ret._private.WirelessEnabled then
+ dnd:set_enabled()
+ else
+ dnd:set_disabled()
+ end
+
ret:emit_signal("NetworkManager::status", ret._private.WirelessEnabled)
- print(ret._private.WirelessEnabled)
if data.WirelessEnabled then
gtimer {
@@ -356,21 +420,15 @@ function network.new(args)
end
end, "PropertiesChanged")
- ret:get_wifi_proxy()
+ ret:get_active_device()
ret:scan_access_points()
- --[[ gtimer.delayed_call(function()
- local active_access_point = ret._private.NetworkManagerDeviceWireless.ActiveAccessPoint
- if ret._private.NetworkManager.State == network.DeviceState.ACTIVATED and active_access_point ~= "/" then
- local active_access_point_proxy = dbus_proxy.Proxy:new {
- bus = dbus_proxy.Bus.SYSTEM,
- name = "org.freedesktop.NetworkManager",
- interface = "org.freedesktop.NetworkManager.AccessPoint",
- path = active_access_point,
- }
- end
- end) ]]
+ if ret._private.NetworkManager.WirelessEnabled then
+ dnd:set_enabled()
+ else
+ dnd:set_disabled()
+ end
--#endregion
@@ -389,7 +447,7 @@ function network.new(args)
}
wifi_margin:buttons(gtable.join(
- awful.button({}, 1, nil,
+ abutton({}, 1, nil,
function()
if wifi_list.forced_height == 0 then
if not ret:get_children_by_id("wifi_ap_list")[1].children then
@@ -420,7 +478,7 @@ function network.new(args)
local refresh_button = ret:get_children_by_id("refresh")[1]
refresh_button:buttons(gtable.join(
- awful.button({}, 1, nil,
+ abutton({}, 1, nil,
function()
ret:scan_access_points()
end
diff --git a/awesome/src/widgets/network.lua b/awesome/src/widgets/network.lua
index 657ead9..f268b2f 100644
--- a/awesome/src/widgets/network.lua
+++ b/awesome/src/widgets/network.lua
@@ -3,374 +3,109 @@
--------------------------------
-- Awesome Libs
-local awful = require("awful")
+local abutton = require("awful.button")
+local apopup = require("awful.popup")
+local atooltip = require("awful.tooltip")
+local base = require("wibox.widget.base")
local dpi = require("beautiful").xresources.apply_dpi
local gears = require("gears")
+local gtable = require("gears.table")
local naughty = require("naughty")
local wibox = require("wibox")
local capi = {
awesome = awesome,
+ mouse = mouse,
}
-- Icon directory path
local icondir = gears.filesystem.get_configuration_dir() .. "src/assets/icons/network/"
--- Insert your interfaces here, get the from ip a
-local interfaces = {
- wlan_interface = User_config.network.wlan,
- lan_interface = User_config.network.ethernet
-}
-
-local network_mode = nil
-
local nm_widget = require("src.modules.network_controller.init")
--- Returns the network widget
-return function(s)
- local startup = true
- local reconnect_startup = true
- local wifi_strength
- local network_widget = wibox.widget {
+local network = { mt = {} }
+
+function network.new(args)
+ args = args or {}
+
+ local w = base.make_widget_from_value({
{
{
{
{
- {
- id = 'icon',
- image = gears.color.recolor_image(icondir .. "no-internet" .. ".svg", Theme_config.network.fg),
- widget = wibox.widget.imagebox,
- valign = "center",
- halign = "center",
- resize = false
- },
- id = "icon_layout",
- widget = wibox.container.place
+ id = 'wifi_icon',
+ image = gears.color.recolor_image(icondir .. "no-internet" .. ".svg", Theme_config.network.fg),
+ widget = wibox.widget.imagebox,
+ resize = false
},
- id = "icon_margin",
- top = dpi(2),
- widget = wibox.container.margin
+ {
+ id = "wifi_strength",
+ visible = true,
+ widget = wibox.widget.textbox
+ },
+ spacing = dpi(10),
+ layout = wibox.layout.fixed.horizontal
},
- spacing = dpi(10),
- {
- id = "label",
- visible = false,
- valign = "center",
- align = "center",
- widget = wibox.widget.textbox
- },
- id = "network_layout",
- layout = wibox.layout.fixed.horizontal
+ left = dpi(8),
+ right = dpi(8),
+ widget = wibox.container.margin
},
- id = "container",
- left = dpi(8),
- right = dpi(8),
- widget = wibox.container.margin
+ widget = wibox.container.place,
+ halign = "center",
+ valign = "center"
},
bg = Theme_config.network.bg,
fg = Theme_config.network.fg,
- shape = function(cr, width, height)
- gears.shape.rounded_rect(cr, width, height, dpi(6))
- end,
+ shape = Theme_config.network.shape,
widget = wibox.container.background
- }
+ })
- local network_tooltip = awful.tooltip {
- text = "Loading",
- objects = { network_widget },
- mode = "inside",
- preferred_alignments = "middle",
- margins = dpi(10)
- }
+ Hover_signal(w)
- local check_for_internet = [=[
- status_ping=0
- packets="$(ping -q -w2 -c2 1.1.1.1 | grep -o "100% packet loss")"
- if [ ! -z "${packets}" ];
- then
- status_ping=0
- else
- status_ping=1
- fi
- if [ $status_ping -eq 0 ];
- then
- echo "Connected but no internet"
- fi
- ]=]
+ gtable.crush(w, network, true)
- local update_startup = function()
- if startup then
- startup = false
- end
- end
+ local nm = nm_widget { screen = args.screen }
- local update_reconnect_startup = function(status)
- reconnect_startup = status
- end
-
- local update_tooltip = function(message)
- network_tooltip:set_markup(message)
- end
-
- local network_notify = function(message, title, app_name, icon)
- naughty.notification {
- text = message,
- title = title,
- app_name = app_name,
- icon = gears.color.recolor_image(icon, Theme_config.network.notify_icon_color),
- timeout = 3
- }
- end
-
- local update_wireless = function()
- network_mode = "wireless"
-
- local notify_connected = function(essid)
- local message = "You are now connected to " .. essid
- local title = "Connection successfull"
- local app_name = "System Notification"
- local icon = icondir .. "wifi-strength-4.svg"
- network_notify(message, title, app_name, icon)
- end
-
- local update_wireless_data = function(healthy)
- awful.spawn.easy_async_with_shell(
- [[ iw dev ]] .. interfaces.wlan_interface .. [[ link ]],
- function(stdout)
- local essid = stdout:match("SSID: (.-)\n") or "N/A"
- local bitrate = stdout:match("tx bitrate: (.+/s)") or "N/A"
- local message = "Connected to " ..
- essid ..
- "\nSignal strength " ..
- tostring(wifi_strength) .. "%\n" .. "Bit rate " .. tostring(bitrate) .. ""
-
- if healthy then
- update_tooltip(message)
- else
- update_tooltip("You are connected but have no internet" .. message)
- end
-
- if reconnect_startup or startup then
- notify_connected(essid)
- update_reconnect_startup(false)
- end
- end
- )
- end
-
- local update_wireless_icon = function(strength)
- awful.spawn.easy_async_with_shell(
- check_for_internet,
- function(stdout)
- local icon = "wifi-strength"
- if not stdout:match("Connected but no internet") then
- if startup or reconnect_startup then
- capi.awesome.emit_signal("system::network_connected")
- end
- icon = icon .. '-' .. tostring(strength)
- update_wireless_data(true)
- else
- icon = icon .. "-" .. tostring(strength)
- update_wireless_data(false)
- end
- network_widget.container.network_layout.spacing = dpi(8)
- network_widget.container.network_layout.icon_margin.icon_layout.icon:set_image(gears.color.recolor_image(icondir
- .. icon .. ".svg", Theme_config.network.fg))
- end
- )
- end
-
- local update_wireless_strength = function()
- awful.spawn.easy_async_with_shell(
- [[ awk 'NR==3 {printf "%3.0f", ($3/70)*100}' /proc/net/wireless ]],
- function(stdout)
- if not tonumber(stdout) then
- return
- end
- wifi_strength = tonumber(stdout)
- network_widget.container.network_layout.spacing = dpi(8)
- network_widget.container.network_layout.label.visible = true
- network_widget.container.network_layout.label:set_text(tostring(wifi_strength .. "%"))
- local wifi_strength_rounded = math.floor(wifi_strength / 25 + 0.5)
- update_wireless_icon(wifi_strength_rounded)
- end
- )
- end
-
- update_wireless_strength()
- update_startup()
- end
-
- local update_wired = function()
- network_mode = "wired"
-
- local notify_connected = function()
- local message = "You are now connected to " .. interfaces.lan_interface
- local title = "Connection successfull"
- local app_name = "System Notification"
- local icon = icondir .. "ethernet.svg"
- network_notify(message, title, app_name, icon)
- end
-
- awful.spawn.easy_async_with_shell(
- check_for_internet,
- function(stdout)
- local icon = "ethernet"
-
- if stdout:match("Connected but no internet") then
- icon = "no-internet"
- update_tooltip(
- "No internet"
- )
- else
- update_tooltip("You are connected to:\nEthernet Interface " .. interfaces.lan_interface .. "")
- if startup or reconnect_startup then
- capi.awesome.emit_signal("system::network_connected")
- notify_connected()
- update_startup()
- end
- update_reconnect_startup(false)
- end
- network_widget.container.network_layout.label.visible = false
- network_widget.container.network_layout.spacing = 0
- network_widget.container.network_layout.icon_margin.icon_layout.icon:set_image(icondir .. icon .. ".svg")
- end
- )
-
- end
-
- local update_disconnected = function()
- local notify_wireless_disconnected = function()
- local message = "WiFi has been disconnected"
- local title = "Connection lost"
- local app_name = "System Notification"
- local icon = icondir .. "wifi-strength-off-outline.svg"
- network_notify(message, title, app_name, icon)
- end
- local notify_wired_disconnected = function()
- local message = "Ethernet has been unplugged"
- local title = "Connection lost"
- local app_name = "System Notification"
- local icon = icondir .. "no-internet.svg"
- network_notify(message, title, app_name, icon)
- end
- local icon = "wifi-strength-off-outline"
- if network_mode == "wireless" then
- icon = "wifi-strength-off-outline"
- if not reconnect_startup then
- update_reconnect_startup(true)
- notify_wireless_disconnected()
- end
- elseif network_mode == "wired" then
- icon = "no-internet"
- if not reconnect_startup then
- update_reconnect_startup(true)
- notify_wired_disconnected()
- end
- end
- network_widget.container.network_layout.label.visible = false
- update_tooltip("Network unreachable")
- network_widget.container.network_layout.spacing = 0
- network_widget.container.network_layout.icon_margin.icon_layout.icon:set_image(gears.color.recolor_image(icondir ..
- icon .. ".svg", Theme_config.network.fg))
- end
-
- local check_network_mode = function()
- awful.spawn.easy_async_with_shell(
- [=[
- wireless="]=] .. tostring(interfaces.wlan_interface) .. [=["
- wired="]=] .. tostring(interfaces.lan_interface) .. [=["
- net="/sys/class/net/"
- wireless_state="down"
- wired_state="down"
- network_mode=""
- function check_network_state(){
- if [[ "${wireless_state}" == "up" ]];
- then
- network_mode="wireless"
- elif [[ "${wired_state}" == "up" ]];
- then
- network_mode="wired"
- else
- network_mode="No internet connected"
- fi
- }
- function check_network_directory(){
- if [[ -n "${wireless}" && -d "${net}${wireless}" ]];
- then
- wireless_state="$(cat "${net}${wireless}/operstate")"
- fi
- if [[ -n "${wired}" && -d "${net}${wired}" ]];
- then
- wired_state="$(cat "${net}${wired}/operstate")"
- fi
- check_network_state
- }
- function print_network_mode(){
- check_network_directory
- printf "${network_mode}"
- }
- print_network_mode
- ]=],
- function(stdout)
- if stdout:match("No internet connected") then
- update_disconnected()
- elseif stdout:match("wireless") then
- update_wireless()
- elseif stdout:match("wired") then
- update_wired()
- end
- end
- )
- end
-
- gears.timer {
- timeout = 5,
- autostart = true,
- call_now = true,
- callback = function()
- check_network_mode()
- end
- }
-
- local network_container = awful.popup {
- widget = nm_widget {},
- bg = Theme_config.network_manager.bg,
- screen = s,
- stretch = false,
+ local network_controler_popup = apopup {
+ widget = nm,
visible = false,
ontop = true,
- placement = function(c) awful.placement.align(c,
- { position = "top_right", margins = { right = dpi(350), top = dpi(60) } })
- end,
- shape = function(cr, width, height)
- gears.shape.rounded_rect(cr, width, height, dpi(12))
- end
+ screen = args.screen,
}
- -- Signals
- Hover_signal(network_widget)
+ w:buttons(gtable.join(
+ abutton({}, 1, function()
+ --This gets the wrong wibox, get all wiboxed and find the correct widget
+ network_controler_popup.x = capi.mouse.coords().x - (network_controler_popup:geometry().width / 2)
+ network_controler_popup.y = dpi(65)
+ network_controler_popup.visible = not network_controler_popup.visible
+ end)
+ ))
- network_widget:buttons(
- gears.table.join(
- awful.button(
- {},
- 1,
- nil,
- function()
- network_container.visible = not network_container.visible
- end
- ),
- awful.button(
- {},
- 3,
- nil,
- function()
- capi.awesome.emit_signal("NM::toggle_wifi")
- end
- )
- )
- )
+ awesome.connect_signal("NM::AccessPointStrength", function(strength)
+ strength = math.floor(strength)
+ w:get_children_by_id("wifi_strength")[1].text = strength .. "%"
+ w:get_children_by_id("wifi_icon")[1].image = gears.color.recolor_image(icondir ..
+ "wifi-strength-" .. math.floor(strength / 25) + 1 .. ".svg", Theme_config.network.fg)
+ end)
- return network_widget
+ nm:connect_signal("NM::Bitrate", function(_, bitrate)
+ print(bitrate)
+ end)
+
+ atooltip {
+ objects = { w },
+ mode = "outside",
+ preferred_alignments = "middle",
+ margins = dpi(10),
+ text = "Connected to " .. "" .. " with " .. "" .. " signal strength"
+ }
+
+ return w
end
+
+function network.mt:__call(...)
+ return network.new(...)
+end
+
+return setmetatable(network, network.mt)