From fd7c4079fb327b9d9943f21868d3b411c43e22f5 Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Thu, 14 Apr 2022 00:35:06 +0300 Subject: [PATCH] Big changes --- .config/alacritty/alacritty.yml | 3 +- .../bindings/{client/init.lua => client.lua} | 0 .../bindings/{global/init.lua => global.lua} | 33 +- .config/awesome/bindings/init.lua | 2 + .config/awesome/bindings/mod.lua | 1 - .config/awesome/config/apps.lua | 3 - .config/awesome/config/init.lua | 4 +- .../awesome/extras/bling/bling-dev-1.rockspec | 63 ++ .../extras/bling/helpers/filesystem.lua | 9 + .config/awesome/extras/bling/init.lua | 12 +- .../awesome/extras/bling/layout/centered.lua | 50 +- .config/awesome/extras/bling/layout/init.lua | 2 +- .../extras/bling/module/flash_focus.lua | 2 +- .../extras/bling/module/scratchpad.lua | 4 +- .../awesome/extras/bling/module/wallpaper.lua | 51 +- .../extras/bling/module/window_swallowing.lua | 90 ++- .config/awesome/extras/bling/signal/init.lua | 4 +- .../extras/bling/signal/playerctl/init.lua | 33 +- .../bling/signal/playerctl/playerctl_cli.lua | 419 ++++++++---- .../bling/signal/playerctl/playerctl_lib.lua | 620 ++++++++++++------ .../extras/bling/theme-var-template.lua | 105 +++ .../extras/bling/widget/app_launcher/init.lua | 8 +- .config/awesome/functions/init.lua | 74 ++- .config/awesome/rules/init.lua | 22 +- .config/awesome/screen/init.lua | 13 +- .config/awesome/screen/wibar.lua | 186 +----- .config/awesome/screen/wibar/layoutbox.lua | 28 + .config/awesome/screen/wibar/taglist.lua | 69 ++ .config/awesome/screen/wibar/tasklist.lua | 85 +++ .config/awesome/screen/wibar/widgets.lua | 16 + .config/awesome/scripts/switch_theme.sh | 47 +- .config/awesome/signals/init.lua | 30 +- .../awesome/theme/abstract_office/theme.lua | 133 ++++ .config/awesome/theme/init.lua | 83 ++- .config/awesome/theme/nordic_legion/theme.lua | 137 ++++ .config/picom/picom.conf | 9 +- .zshrc | 1 + wallpapers/abstract_office/Abstract Data.jpg | 3 + .../abstract_office/Abstract Office 2.jpg | 3 + .../abstract_office/Abstract Office 3.jpg | 3 + .../abstract_office/Abstract Office.jpg | 3 + wallpapers/abstract_office/Blocks.jpg | 3 + wallpapers/abstract_office/Blue Data.jpg | 3 + wallpapers/abstract_office/Blue Light.jpg | 3 + wallpapers/abstract_office/Blush.jpg | 3 + wallpapers/abstract_office/Byte Lights.jpg | 3 + wallpapers/abstract_office/Cage.jpg | 3 + wallpapers/abstract_office/Curves.jpg | 3 + wallpapers/abstract_office/Data Link.jpg | 3 + wallpapers/abstract_office/Data Packets.jpg | 3 + wallpapers/abstract_office/Data Stream.jpg | 3 + wallpapers/abstract_office/Depth.jpg | 3 + wallpapers/abstract_office/Fire Spiral.jpg | 3 + .../abstract_office/Fluent Minecraft 2.jpg | 3 + .../abstract_office/Fluent Minecraft.jpg | 3 + .../abstract_office/Interior Design.jpg | 3 + .../abstract_office/Internet of Things.jpg | 3 + wallpapers/abstract_office/Layers.jpg | 3 + wallpapers/abstract_office/Light.jpg | 3 + wallpapers/abstract_office/Macro.jpg | 3 + wallpapers/abstract_office/Modern Art.jpg | 3 + wallpapers/abstract_office/Night.jpg | 3 + wallpapers/abstract_office/Office Blocks.jpg | 3 + wallpapers/abstract_office/Orange Square.jpg | 3 + wallpapers/abstract_office/Panes.jpg | 3 + wallpapers/abstract_office/Paper Planes.jpg | 3 + wallpapers/abstract_office/Peak.jpg | 3 + wallpapers/abstract_office/Pile.jpg | 3 + wallpapers/abstract_office/Pink.jpg | 3 + wallpapers/abstract_office/Purple.jpg | 3 + wallpapers/abstract_office/Sheet.jpg | 3 + wallpapers/abstract_office/Shell.jpg | 3 + wallpapers/abstract_office/Spectre.jpg | 3 + wallpapers/abstract_office/Spiral.jpg | 3 + wallpapers/abstract_office/Spotlight.jpg | 3 + wallpapers/abstract_office/Square.jpg | 3 + wallpapers/abstract_office/Steps.jpg | 3 + wallpapers/abstract_office/The Grid.jpg | 3 + wallpapers/abstract_office/The Internet.jpg | 3 + wallpapers/abstract_office/Tricolour.jpg | 3 + wallpapers/abstract_office/Trinity.jpg | 3 + wallpapers/abstract_office/Trio.jpg | 3 + wallpapers/abstract_office/Uplink.jpg | 3 + wallpapers/abstract_office/Veil.jpg | 3 + wallpapers/astronaut/cutout.png | 0 wallpapers/astronaut/wallpaper.jpg | 0 wallpapers/astronaut/wallpaper.png | 0 wallpapers/lock_screen_1.jpg | 0 wallpapers/nordic_firewatch/cutout.png | 3 - wallpapers/nordic_firewatch/wallpaper.png | 3 - wallpapers/nordic_legion/cutout.png | 0 wallpapers/nordic_legion/wallpaper.png | 0 wallpapers/nordic_moon/cutout.png | 3 - wallpapers/nordic_moon/wallpaper.png | 3 - wallpapers/nordic_wolf/lock_screen.jpg | 3 - wallpapers/nordic_wolf/lock_screen.png | 3 - 96 files changed, 1921 insertions(+), 689 deletions(-) rename .config/awesome/bindings/{client/init.lua => client.lua} (100%) rename .config/awesome/bindings/{global/init.lua => global.lua} (94%) delete mode 100644 .config/awesome/bindings/mod.lua delete mode 100644 .config/awesome/config/apps.lua create mode 100644 .config/awesome/extras/bling/bling-dev-1.rockspec create mode 100644 .config/awesome/extras/bling/theme-var-template.lua create mode 100644 .config/awesome/screen/wibar/layoutbox.lua create mode 100644 .config/awesome/screen/wibar/taglist.lua create mode 100644 .config/awesome/screen/wibar/tasklist.lua create mode 100644 .config/awesome/screen/wibar/widgets.lua create mode 100644 .config/awesome/theme/abstract_office/theme.lua create mode 100644 .config/awesome/theme/nordic_legion/theme.lua create mode 100644 wallpapers/abstract_office/Abstract Data.jpg create mode 100644 wallpapers/abstract_office/Abstract Office 2.jpg create mode 100644 wallpapers/abstract_office/Abstract Office 3.jpg create mode 100644 wallpapers/abstract_office/Abstract Office.jpg create mode 100644 wallpapers/abstract_office/Blocks.jpg create mode 100644 wallpapers/abstract_office/Blue Data.jpg create mode 100644 wallpapers/abstract_office/Blue Light.jpg create mode 100644 wallpapers/abstract_office/Blush.jpg create mode 100644 wallpapers/abstract_office/Byte Lights.jpg create mode 100644 wallpapers/abstract_office/Cage.jpg create mode 100644 wallpapers/abstract_office/Curves.jpg create mode 100644 wallpapers/abstract_office/Data Link.jpg create mode 100644 wallpapers/abstract_office/Data Packets.jpg create mode 100644 wallpapers/abstract_office/Data Stream.jpg create mode 100644 wallpapers/abstract_office/Depth.jpg create mode 100644 wallpapers/abstract_office/Fire Spiral.jpg create mode 100644 wallpapers/abstract_office/Fluent Minecraft 2.jpg create mode 100644 wallpapers/abstract_office/Fluent Minecraft.jpg create mode 100644 wallpapers/abstract_office/Interior Design.jpg create mode 100644 wallpapers/abstract_office/Internet of Things.jpg create mode 100644 wallpapers/abstract_office/Layers.jpg create mode 100644 wallpapers/abstract_office/Light.jpg create mode 100644 wallpapers/abstract_office/Macro.jpg create mode 100644 wallpapers/abstract_office/Modern Art.jpg create mode 100644 wallpapers/abstract_office/Night.jpg create mode 100644 wallpapers/abstract_office/Office Blocks.jpg create mode 100644 wallpapers/abstract_office/Orange Square.jpg create mode 100644 wallpapers/abstract_office/Panes.jpg create mode 100644 wallpapers/abstract_office/Paper Planes.jpg create mode 100644 wallpapers/abstract_office/Peak.jpg create mode 100644 wallpapers/abstract_office/Pile.jpg create mode 100644 wallpapers/abstract_office/Pink.jpg create mode 100644 wallpapers/abstract_office/Purple.jpg create mode 100644 wallpapers/abstract_office/Sheet.jpg create mode 100644 wallpapers/abstract_office/Shell.jpg create mode 100644 wallpapers/abstract_office/Spectre.jpg create mode 100644 wallpapers/abstract_office/Spiral.jpg create mode 100644 wallpapers/abstract_office/Spotlight.jpg create mode 100644 wallpapers/abstract_office/Square.jpg create mode 100644 wallpapers/abstract_office/Steps.jpg create mode 100644 wallpapers/abstract_office/The Grid.jpg create mode 100644 wallpapers/abstract_office/The Internet.jpg create mode 100644 wallpapers/abstract_office/Tricolour.jpg create mode 100644 wallpapers/abstract_office/Trinity.jpg create mode 100644 wallpapers/abstract_office/Trio.jpg create mode 100644 wallpapers/abstract_office/Uplink.jpg create mode 100644 wallpapers/abstract_office/Veil.jpg mode change 100755 => 100644 wallpapers/astronaut/cutout.png mode change 100755 => 100644 wallpapers/astronaut/wallpaper.jpg mode change 100755 => 100644 wallpapers/astronaut/wallpaper.png mode change 100755 => 100644 wallpapers/lock_screen_1.jpg delete mode 100755 wallpapers/nordic_firewatch/cutout.png delete mode 100755 wallpapers/nordic_firewatch/wallpaper.png mode change 100755 => 100644 wallpapers/nordic_legion/cutout.png mode change 100755 => 100644 wallpapers/nordic_legion/wallpaper.png delete mode 100755 wallpapers/nordic_moon/cutout.png delete mode 100755 wallpapers/nordic_moon/wallpaper.png delete mode 100755 wallpapers/nordic_wolf/lock_screen.jpg delete mode 100755 wallpapers/nordic_wolf/lock_screen.png diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml index ef6582c..961850e 100644 --- a/.config/alacritty/alacritty.yml +++ b/.config/alacritty/alacritty.yml @@ -1,8 +1,7 @@ # Configuration for Alacritty, the GPU enhanced terminal emulator. -background_opacity: 0.95 - window: + opacity: 0.85 padding: x: 8 y: 8 diff --git a/.config/awesome/bindings/client/init.lua b/.config/awesome/bindings/client.lua similarity index 100% rename from .config/awesome/bindings/client/init.lua rename to .config/awesome/bindings/client.lua diff --git a/.config/awesome/bindings/global/init.lua b/.config/awesome/bindings/global.lua similarity index 94% rename from .config/awesome/bindings/global/init.lua rename to .config/awesome/bindings/global.lua index 6db48c6..e6d52e7 100644 --- a/.config/awesome/bindings/global/init.lua +++ b/.config/awesome/bindings/global.lua @@ -1,18 +1,17 @@ local gears = require("gears") local awful = require("awful") -local hotkeys_popup = require("awful.hotkeys_popup") +-- local hotkeys_popup = require("awful.hotkeys_popup") -require "bindings.mod" -require "config.apps" +require "config" globalkeys = gears.table.join( - awful.key( - {modkey}, - "s", - hotkeys_popup.show_help, - {description = "show help", group = "awesome"} - ), + -- awful.key( + -- {modkey}, + -- "s", + -- hotkeys_popup.show_help, + -- {description = "show help", group = "awesome"} + -- ), awful.key( {modkey, "Control"}, "r", @@ -297,6 +296,22 @@ globalkeys = "Escape", awful.tag.history.restore, {description = "go back", group = "tag"} + ), + awful.key( + {modkey}, + ".", + function() + awful.spawn("/usr/bin/emoji-picker") + end, + {description = "emoji picker", group = "launcher"} + ), + awful.key( + {modkey, "Control"}, + "w", + function() + toggle_window_buffers(awful.screen.focused()) + end, + {description = "set workarea height to 200", group = "screen"} ) ) diff --git a/.config/awesome/bindings/init.lua b/.config/awesome/bindings/init.lua index 8351477..537b0f5 100644 --- a/.config/awesome/bindings/init.lua +++ b/.config/awesome/bindings/init.lua @@ -1,2 +1,4 @@ +modkey = "Mod4" + require "bindings.global" require "bindings.client" \ No newline at end of file diff --git a/.config/awesome/bindings/mod.lua b/.config/awesome/bindings/mod.lua deleted file mode 100644 index 8c7dc2d..0000000 --- a/.config/awesome/bindings/mod.lua +++ /dev/null @@ -1 +0,0 @@ -modkey = "Mod4" diff --git a/.config/awesome/config/apps.lua b/.config/awesome/config/apps.lua deleted file mode 100644 index 8382901..0000000 --- a/.config/awesome/config/apps.lua +++ /dev/null @@ -1,3 +0,0 @@ -terminal = "alacritty" -editor = os.getenv("EDITOR") or "nano" -editor_cmd = terminal .. " -e " .. editor diff --git a/.config/awesome/config/init.lua b/.config/awesome/config/init.lua index 827e151..8382901 100644 --- a/.config/awesome/config/init.lua +++ b/.config/awesome/config/init.lua @@ -1 +1,3 @@ -require "config.apps" +terminal = "alacritty" +editor = os.getenv("EDITOR") or "nano" +editor_cmd = terminal .. " -e " .. editor diff --git a/.config/awesome/extras/bling/bling-dev-1.rockspec b/.config/awesome/extras/bling/bling-dev-1.rockspec new file mode 100644 index 0000000..575d3f0 --- /dev/null +++ b/.config/awesome/extras/bling/bling-dev-1.rockspec @@ -0,0 +1,63 @@ +package = "bling" +version = "dev-1" + +source = { + url = "git://github.com/BlingCorp/bling", + branch = "master", +} + +description = { + summary = "Utilities for the AwesomeWM", + detailed = [[ + This module extends the Awesome window manager with alternative layouts, + flash focus, tabbing, a simple tiling wallpaper generator, a declarative + wallpaper setter, window swallowing and a playerctl signal. + ]], + homepage = "https://github.com/BlingCorp/bling", + license = "MIT", +} + +dependencies = { + "lua >= 5.1", +} + +build = { + type = "builtin", + modules = { + ["bling"] = "init.lua", + ["bling.helpers"] = "helpers/init.lua", + ["bling.helpers.client"] = "helpers/client.lua", + ["bling.helpers.color"] = "helpers/color.lua", + ["bling.helpers.filesystem"] = "helpers/filesystem.lua", + ["bling.helpers.shape"] = "helpers/shape.lua", + ["bling.helpers.time"] = "helpers/time.lua", + ["bling.layout"] = "layout/init.lua", + ["bling.layout.centered"] = "layout/centered.lua", + ["bling.layout.deck"] = "layout/deck.lua", + ["bling.layout.equalarea"] = "layout/equalarea.lua", + ["bling.layout.horizontal"] = "layout/horizontal.lua", + ["bling.layout.mstab"] = "layout/mstab.lua", + ["bling.layout.vertical"] = "layout/vertical.lua", + ["bling.module"] = "module/init.lua", + ["bling.module.flash_focus"] = "module/flash_focus.lua", + ["bling.module.scratchpad"] = "module/scratchpad.lua", + ["bling.module.tabbed"] = "module/tabbed.lua", + ["bling.module.tiled_wallpaper"] = "module/tiled_wallpaper.lua", + ["bling.module.wallpaper"] = "module/wallpaper.lua", + ["bling.module.window_swallowing"] = "module/window_swallowing.lua", + ["bling.signal"] = "signal/init.lua", + ["bling.signal.playerctl"] = "signal/playerctl/init.lua", + ["bling.signal.playerctl.playerctl_cli"] = "signal/playerctl/playerctl_cli.lua", + ["bling.signal.playerctl.playerctl_lib"] = "signal/playerctl/playerctl_lib.lua", + ["bling.widget"] = "widget/init.lua", + ["bling.widget.tabbar.boxes"] = "widget/tabbar/boxes.lua", + ["bling.widget.tabbar.default"] = "widget/tabbar/default.lua", + ["bling.widget.tabbar.modern"] = "widget/tabbar/modern.lua", + ["bling.widget.tabbed_misc"] = "widget/tabbed_misc/init.lua", + ["bling.widget.tabbed_misc.custom_tasklist"] = "widget/tabbed_misc/custom_tasklist.lua", + ["bling.widget.tabbed_misc.titlebar_indicator"] = "widget/tabbed_misc/titlebar_indicator.lua", + ["bling.widget.tag_preview"] = "widget/tag_preview.lua", + ["bling.widget.task_preview"] = "widget/task_preview.lua", + ["bling.widget.window_switcher"] = "widget/window_switcher.lua", + }, +} diff --git a/.config/awesome/extras/bling/helpers/filesystem.lua b/.config/awesome/extras/bling/helpers/filesystem.lua index 9f65d0e..f06139a 100644 --- a/.config/awesome/extras/bling/helpers/filesystem.lua +++ b/.config/awesome/extras/bling/helpers/filesystem.lua @@ -1,4 +1,6 @@ local Gio = require("lgi").Gio +local awful = require("awful") +local string = string local _filesystem = {} @@ -50,4 +52,11 @@ function _filesystem.list_directory_files(path, exts, recursive) return files end +function _filesystem.save_image_async_curl(url, filepath, callback) + awful.spawn.with_line_callback(string.format("curl -L -s %s -o %s", url, filepath), + { + exit=callback + }) +end + return _filesystem diff --git a/.config/awesome/extras/bling/init.lua b/.config/awesome/extras/bling/init.lua index 93bde56..23c0acf 100644 --- a/.config/awesome/extras/bling/init.lua +++ b/.config/awesome/extras/bling/init.lua @@ -1,7 +1,11 @@ +--[[ + Bling + Layouts, widgets and utilities for Awesome WM +--]] return { layout = require(... .. ".layout"), - --module = require(... .. ".module"), - --helpers = require(... .. ".helpers"), - --signal = require(... .. ".signal"), - --widget = require(... .. ".widget"), + module = require(... .. ".module"), + helpers = require(... .. ".helpers"), + signal = require(... .. ".signal"), + widget = require(... .. ".widget"), } diff --git a/.config/awesome/extras/bling/layout/centered.lua b/.config/awesome/extras/bling/layout/centered.lua index 4e1ad24..7929dd8 100644 --- a/.config/awesome/extras/bling/layout/centered.lua +++ b/.config/awesome/extras/bling/layout/centered.lua @@ -8,37 +8,27 @@ mylayout.name = "centered" function mylayout.arrange(p) local area = p.workarea local t = p.tag or screen[p.screen].selected_tag - local mwfact = t.master_width_factor local nmaster = math.min(t.master_count, #p.clients) local nslaves = #p.clients - nmaster - local master_area_width = area.width * mwfact - local slave_area_width = area.width - master_area_width - local master_area_x = area.x + 0.5 * slave_area_width + local master_area_width = area.width * t.master_width_factor + if t.master_count == 0 then master_area_width = 0 end + local slave_width = 0.5 * (area.width - master_area_width) + local master_area_x = area.x + slave_width - local number_of_left_sided_slaves = math.floor(nslaves / 2) - local number_of_right_sided_slaves = nslaves - number_of_left_sided_slaves - local left_iterator = 0 - local right_iterator = 0 - -- Special case: no maters -> rrelapse into awesomes fair layout - if t.master_count == 0 then - awful.layout.suit.fair.arrange(p) - return - end - - -- Special case: one slave -> relapse into awesomes masterstack tile layout - if nslaves == 1 then - awful.layout.suit.tile.right.arrange(p) - return - end - - -- Special case: no slaves -> fullscreen master area - if nslaves < 1 then - master_area_width = area.width + -- Special case: few slaves -> make masters take more space - unless requested otherwise! + if nslaves < 2 and t.master_fill_policy ~= "master_width_factor" then master_area_x = area.x + + if nslaves == 1 then + slave_width = area.width - master_area_width + else + master_area_width = area.width + end end + -- iterate through masters for idx = 1, nmaster do local c = p.clients[idx] @@ -52,8 +42,14 @@ function mylayout.arrange(p) p.geometries[c] = g end + -- iterate through slaves - for idx = 1, nslaves do -- idx=nmaster+1,#p.clients do + local number_of_left_sided_slaves = math.floor(nslaves / 2) + local number_of_right_sided_slaves = nslaves - number_of_left_sided_slaves + local left_iterator = 0 + local right_iterator = 0 + + for idx = 1, nslaves do local c = p.clients[idx + nmaster] local g if idx % 2 == 0 then @@ -62,17 +58,17 @@ function mylayout.arrange(p) y = area.y + left_iterator * (area.height / number_of_left_sided_slaves), - width = slave_area_width / 2, + width = slave_width, height = area.height / number_of_left_sided_slaves, } left_iterator = left_iterator + 1 else g = { - x = area.x + master_area_width + slave_area_width / 2, + x = master_area_x + master_area_width, y = area.y + right_iterator * (area.height / number_of_right_sided_slaves), - width = slave_area_width / 2, + width = slave_width, height = area.height / number_of_right_sided_slaves, } right_iterator = right_iterator + 1 diff --git a/.config/awesome/extras/bling/layout/init.lua b/.config/awesome/extras/bling/layout/init.lua index a57dd6a..91b4ec6 100644 --- a/.config/awesome/extras/bling/layout/init.lua +++ b/.config/awesome/extras/bling/layout/init.lua @@ -20,7 +20,7 @@ end local function get_icon(icon_raw) if icon_raw ~= nil then - return gears.color.recolor_image(icon_raw, "#e6e6e6") + return gears.color.recolor_image(icon_raw, beautiful.fg_focus) else return nil end diff --git a/.config/awesome/extras/bling/module/flash_focus.lua b/.config/awesome/extras/bling/module/flash_focus.lua index 2fe3f47..246f4a3 100644 --- a/.config/awesome/extras/bling/module/flash_focus.lua +++ b/.config/awesome/extras/bling/module/flash_focus.lua @@ -5,7 +5,7 @@ local op = beautiful.flash_focus_start_opacity or 0.6 local stp = beautiful.flash_focus_step or 0.01 local flashfocus = function(c) - if c then + if c and #c.screen.clients > 1 then c.opacity = op local q = op local g = gears.timer({ diff --git a/.config/awesome/extras/bling/module/scratchpad.lua b/.config/awesome/extras/bling/module/scratchpad.lua index 6f1bf8b..6ef011f 100644 --- a/.config/awesome/extras/bling/module/scratchpad.lua +++ b/.config/awesome/extras/bling/module/scratchpad.lua @@ -293,10 +293,10 @@ function Scratchpad:turn_on() animate_turn_on(self, anim_y, "y") end self:emit_signal("inital_apply", c1) - self.client.disconnect_signal("manage", inital_apply) + client.disconnect_signal("manage", inital_apply) end end - self.client.connect_signal("manage", inital_apply) + client.connect_signal("manage", inital_apply) end end end diff --git a/.config/awesome/extras/bling/module/wallpaper.lua b/.config/awesome/extras/bling/module/wallpaper.lua index b8344ff..e7bddf6 100644 --- a/.config/awesome/extras/bling/module/wallpaper.lua +++ b/.config/awesome/extras/bling/module/wallpaper.lua @@ -53,36 +53,37 @@ function apply(wallpaper_object, args) args.offset = args.offset or { x = 0, y = 0 } args.scale = args.scale or 1 local positions = { - ["centered"] = function() + ["centered"] = function(s) gears.wallpaper.centered( wallpaper_object, - args.screen, + s, args.background, args.scale ) end, - ["tiled"] = function() - gears.wallpaper.tiled(wallpaper_object, args.screen, args.offset) + ["tiled"] = function(s) + gears.wallpaper.tiled(wallpaper_object, s, args.offset) end, - ["maximized"] = function() + ["maximized"] = function(s) gears.wallpaper.maximized( wallpaper_object, - args.screen, + s, args.ignore_aspect, args.offset ) end, - ["fit"] = function() - gears.wallpaper.fit(wallpaper_object, args.screen, args.background) + ["fit"] = function(s) + gears.wallpaper.fit(wallpaper_object, s, args.background) end, } + local call_func = nil if type(wallpaper_object) == "string" and gears.filesystem.file_readable(wallpaper_object) then -- path of an image file, we use a position function local p = args.position or "centered" - positions[p]() + call_func = positions[p] elseif type(wallpaper_object) == "function" then -- function wallpaper_object(args) @@ -91,10 +92,13 @@ function apply(wallpaper_object, args) and args.position then -- if the user sets a position function, wallpaper_object should be a cairo surface - positions[args.position]() + call_func = positions[args.position] else gears.wallpaper.set(wallpaper_object) end + if call_func then + call_func(args.screen) + end end --- Converts `args.wallpaper` to a list of `wallpaper_objects` readable by `apply` function). @@ -154,7 +158,15 @@ local simple_index = 0 function setters.simple(args) local wallpapers = prepare_list(args) simple_index = (simple_index % #wallpapers) + 1 - apply(wallpapers[simple_index], args) + if type(args.screen) == 'table' then + for _,v in ipairs(args.screen) do + args.screen = v + apply(wallpapers[simple_index], args) + args.screen = nil + end + else + apply(wallpapers[simple_index], args) + end end --- Set a random wallpaper from a list. @@ -164,7 +176,15 @@ end -- @see prepare_list function setters.random(args) local wallpapers = prepare_list(args) - apply(wallpapers[math.random(#wallpapers)], args) + if type(args.screen) == 'table' then + for _,v in ipairs(args.screen) do + args.screen = v + apply(wallpapers[math.random(#wallpapers)], args) + args.screen = nil + end + else + apply(wallpapers[math.random(#wallpapers)], args) + end end local simple_schedule_object = nil @@ -310,7 +330,10 @@ function setup(args) config.set_function = config.set_function or (config.wallpaper and setters.simple or setters.awesome_wallpaper) local function set_wallpaper(s) - config.screen = s or config.screen + if type(config.screen) ~= 'table' then + if config.screen and s and config.screen ~= s then return end + config.screen = s or config.screen + end config.set_function(config) end @@ -324,7 +347,7 @@ function setup(args) end, }) end - if awesome.version == "v4.3" then + if awesome.version == "v4.3" or awesome.version == "4.3" then awful.screen.connect_for_each_screen(set_wallpaper) else screen.connect_signal("request::wallpaper", set_wallpaper) diff --git a/.config/awesome/extras/bling/module/window_swallowing.lua b/.config/awesome/extras/bling/module/window_swallowing.lua index 368541b..60950aa 100644 --- a/.config/awesome/extras/bling/module/window_swallowing.lua +++ b/.config/awesome/extras/bling/module/window_swallowing.lua @@ -11,53 +11,93 @@ local helpers = require(tostring(...):match(".*bling") .. ".helpers") local window_swallowing_activated = false -- you might want to add or remove applications here -local dont_swallow_classname_list = beautiful.dont_swallow_classname_list +local parent_filter_list = beautiful.parent_filter_list + or beautiful.dont_swallow_classname_list or { "firefox", "Gimp", "Google-chrome" } -local activate_dont_swallow_filter = beautiful.dont_swallow_filter_activated - or true +local child_filter_list = beautiful.child_filter_list + or beautiful.dont_swallow_classname_list or { } --- checks if client classname matches with any entry of the dont-swallow-list -local function check_if_swallow(c) - if not activate_dont_swallow_filter then - return true - end - for _, classname in ipairs(dont_swallow_classname_list) do - if classname == c.class then - return false +-- for boolean values the or chain way to set the values breaks with 2 vars +-- and always defaults to true so i had to do this to se the right value... +local swallowing_filter = true +local filter_vars = { beautiful.swallowing_filter, beautiful.dont_swallow_filter_activated } +for _, var in pairs(filter_vars) do + swallowing_filter = var +end + +-- check if element exist in table +-- returns true if it is +local function is_in_table(element, table) + local res = false + for _, value in pairs(table) do + if element:match(value) then + res = true + break end end - return true + return res end +-- if the swallowing filter is active checks the child and parent classes +-- against their filters +local function check_swallow(parent, child) + local res = true + if swallowing_filter then + local prnt = not is_in_table(parent, parent_filter_list) + local chld = not is_in_table(child, child_filter_list) + res = ( prnt and chld ) + end + return res +end + +-- async function to get the parent's pid +-- recieves a child process pid and a callback function +-- parent_pid in format "init(1)---ancestorA(pidA)---ancestorB(pidB)...---process(pid)" +function get_parent_pid(child_ppid, callback) + local ppid_cmd = string.format("pstree -A -p -s %s", child_ppid) + awful.spawn.easy_async(ppid_cmd, function(stdout, stderr, reason, exit_code) + -- primitive error checking + if stderr and stderr ~= "" then + callback(stderr) + return + end + local ppid = stdout + callback(nil, ppid) + end) +end + + -- the function that will be connected to / disconnected from the spawn client signal local function manage_clientspawn(c) -- get the last focused window to check if it is a parent window local parent_client = awful.client.focus.history.get(c.screen, 1) if not parent_client then return + elseif parent_client.type == "dialog" or parent_client.type == "splash" then + return end - -- io.popen is normally discouraged. Should probably be changed - local handle = io.popen( - [[pstree -T -p -a -s ]] - .. tostring(c.pid) - .. [[ | sed '2q;d' | grep -o '[0-9]*$' | tr -d '\n']] - ) - local parent_pid = handle:read("*a") - handle:close() - + get_parent_pid(c.pid, function(err, ppid) + if err then + return + end + parent_pid = ppid if - (tostring(parent_pid) == tostring(parent_client.pid)) - and check_if_swallow(c) + -- will search for "(parent_client.pid)" inside the parent_pid string + ( tostring(parent_pid):find("("..tostring(parent_client.pid)..")") ) + and check_swallow(parent_client.class, c.class) then c:connect_signal("unmanage", function() - helpers.client.turn_on(parent_client) - helpers.client.sync(parent_client, c) + if parent_client then + helpers.client.turn_on(parent_client) + helpers.client.sync(parent_client, c) + end end) helpers.client.sync(c, parent_client) helpers.client.turn_off(parent_client) end + end) end -- without the following functions that module would be autoloaded by require("bling") diff --git a/.config/awesome/extras/bling/signal/init.lua b/.config/awesome/extras/bling/signal/init.lua index a953d59..c513381 100644 --- a/.config/awesome/extras/bling/signal/init.lua +++ b/.config/awesome/extras/bling/signal/init.lua @@ -1 +1,3 @@ -return { playerctl = require(... .. ".playerctl") } +return { + playerctl = require(... .. ".playerctl"), +} diff --git a/.config/awesome/extras/bling/signal/playerctl/init.lua b/.config/awesome/extras/bling/signal/playerctl/init.lua index 1d586ed..357b02c 100644 --- a/.config/awesome/extras/bling/signal/playerctl/init.lua +++ b/.config/awesome/extras/bling/signal/playerctl/init.lua @@ -1,4 +1,7 @@ +local awful = require("awful") +local gtimer = require("gears.timer") local beautiful = require("beautiful") +local naughty = require("naughty") -- Use CLI backend as default as it is supported on most if not all systems local backend_config = beautiful.playerctl_backend or "playerctl_cli" @@ -7,13 +10,37 @@ local backends = { playerctl_lib = require(... .. ".playerctl_lib"), } +local backend = nil + local function enable_wrapper(args) + local open = naughty.action { name = "Open" } + + open:connect_signal("invoked", function() + awful.spawn("xdg-open https://blingcorp.github.io/bling/#/signals/pctl") + end) + + gtimer.delayed_call(function() + naughty.notify({ + title = "Bling Error", + text = "Global signals are deprecated! Please take a look at the playerctl documentation.", + app_name = "Bling Error", + app_icon = "system-error", + actions = { open } + }) + end) + backend_config = (args and args.backend) or backend_config - backends[backend_config].enable(args) + backend = backends[backend_config](args) + return backend end local function disable_wrapper() - backends[backend_config].disable() + backend:disable() end -return { enable = enable_wrapper, disable = disable_wrapper } +return { + lib = backends.playerctl_lib, + cli = backends.playerctl_cli, + enable = enable_wrapper, + disable = disable_wrapper +} \ No newline at end of file diff --git a/.config/awesome/extras/bling/signal/playerctl/playerctl_cli.lua b/.config/awesome/extras/bling/signal/playerctl/playerctl_cli.lua index 93959f7..d091407 100644 --- a/.config/awesome/extras/bling/signal/playerctl/playerctl_cli.lua +++ b/.config/awesome/extras/bling/signal/playerctl/playerctl_cli.lua @@ -1,151 +1,348 @@ +-- Playerctl signals -- -- Provides: --- bling::playerctl::status --- playing (boolean) --- bling::playerctl::title_artist_album +-- metadata -- title (string) --- artist (string) +-- artist (string) -- album_path (string) --- bling::playerctl::position +-- album (string) +-- player_name (string) +-- position -- interval_sec (number) -- length_sec (number) --- bling::playerctl::no_players --- +-- playback_status +-- playing (boolean) +-- volume +-- volume (number) +-- loop_status +-- loop_status (string) +-- shuffle +-- shuffle (bool) +-- no_players +-- (No parameters) + local awful = require("awful") +local gobject = require("gears.object") +local gtable = require("gears.table") +local gtimer = require("gears.timer") +local gstring = require("gears.string") local beautiful = require("beautiful") +local helpers = require(tostring(...):match(".*bling") .. ".helpers") +local setmetatable = setmetatable +local tonumber = tonumber +local ipairs = ipairs +local type = type +local capi = { awesome = awesome } -local interval = beautiful.playerctl_position_update_interval or 1 +local playerctl = { mt = {} } -local function emit_player_status() - local status_cmd = "playerctl status -F" - - -- Follow status - awful.spawn.easy_async({ - "pkill", - "--full", - "--uid", - os.getenv("USER"), - "^playerctl status", - }, function() - awful.spawn.with_line_callback(status_cmd, { - stdout = function(line) - local playing = false - if line:find("Playing") then - playing = true - else - playing = false - end - awesome.emit_signal("bling::playerctl::status", playing) - end, - }) - collectgarbage("collect") - end) +function playerctl:disable() + self._private.metadata_timer:stop() + self._private.metadata_timer = nil + awful.spawn.with_shell("killall playerctl") end -local function emit_player_info() - local art_script = [[ -sh -c ' +function playerctl:pause(player) + if player ~= nil then + awful.spawn.with_shell("playerctl --player=" .. player .. " pause") + else + awful.spawn.with_shell(self._private.cmd .. "pause") + end +end -tmp_dir="$XDG_CACHE_HOME/awesome/" +function playerctl:play(player) + if player ~= nil then + awful.spawn.with_shell("playerctl --player=" .. player .. " play") + else + awful.spawn.with_shell(self._private.cmd .. "play") + end +end -if [ -z ${XDG_CACHE_HOME} ]; then - tmp_dir="$HOME/.cache/awesome/" -fi +function playerctl:stop(player) + if player ~= nil then + awful.spawn.with_shell("playerctl --player=" .. player .. " stop") + else + awful.spawn.with_shell(self._private.cmd .. "stop") + end +end -tmp_cover_path=${tmp_dir}"cover.png" +function playerctl:play_pause(player) + if player ~= nil then + awful.spawn.with_shell("playerctl --player=" .. player .. " play-pause") + else + awful.spawn.with_shell(self._private.cmd .. "play-pause") + end +end -if [ ! -d $tmp_dir ]; then - mkdir -p $tmp_dir -fi +function playerctl:previous(player) + if player ~= nil then + awful.spawn.with_shell("playerctl --player=" .. player .. " previous") + else + awful.spawn.with_shell(self._private.cmd .. "previous") + end +end -link="$(playerctl metadata mpris:artUrl)" +function playerctl:next(player) + if player ~= nil then + awful.spawn.with_shell("playerctl --player=" .. player .. " next") + else + awful.spawn.with_shell(self._private.cmd .. "next") + end +end -curl -s "$link" --output $tmp_cover_path +function playerctl:set_loop_status(loop_status, player) + if player ~= nil then + awful.spawn.with_shell("playerctl --player=" .. player .. " loop " .. loop_status) + else + awful.spawn.with_shell(self._private.cmd .. "loop " .. loop_status) + end +end -echo "$tmp_cover_path" -']] +function playerctl:cycle_loop_status(player) + local function set_loop_status(loop_status) + if loop_status == "None" then + self:set_loop_status("Track") + elseif loop_status == "Track" then + self:set_loop_status("Playlist") + elseif loop_status == "Playlist" then + self:set_loop_status("None") + end + end - -- Command that lists artist and title in a format to find and follow - local song_follow_cmd = - "playerctl metadata --format 'artist_{{artist}}title_{{title}}' -F" + if player ~= nil then + awful.spawn.easy_async_with_shell("playerctl --player=" .. player .. " loop", function(stdout) + set_loop_status(stdout) + end) + else + set_loop_status(self._private.loop_status) + end +end - -- Progress Cmds - local prog_cmd = "playerctl position" - local length_cmd = "playerctl metadata mpris:length" +function playerctl:set_position(position, player) + if player ~= nil then + awful.spawn.with_shell("playerctl --player=" .. player .. " position " .. position) + else + awful.spawn.with_shell(self._private.cmd .. "position " .. position) + end +end - awful.widget.watch(prog_cmd, interval, function(_, interval) +function playerctl:set_shuffle(shuffle, player) + shuffle = shuffle and "on" or "off" + + if player ~= nil then + awful.spawn.with_shell("playerctl --player=" .. player .. " shuffle " .. shuffle) + else + awful.spawn.with_shell(self._private.cmd .. "shuffle " .. shuffle) + end +end + +function playerctl:cycle_shuffle(player) + if player ~= nil then + awful.spawn.easy_async_with_shell("playerctl --player=" .. player .. " shuffle", function(stdout) + local shuffle = stdout == "on" and true or false + self:set_shuffle(not self._private.shuffle) + end) + else + self:set_shuffle(not self._private.shuffle) + end +end + +function playerctl:set_volume(volume, player) + if player ~= nil then + awful.spawn.with_shell("playerctl --player=" .. player .. " volume " .. volume) + else + awful.spawn.with_shell(self._private.cmd .. "volume " .. volume) + end +end + +local function emit_player_metadata(self) + local metadata_cmd = self._private.cmd .. "metadata --format 'title_{{title}}artist_{{artist}}art_url_{{mpris:artUrl}}player_name_{{playerName}}album_{{album}}' -F" + + awful.spawn.with_line_callback(metadata_cmd, { + stdout = function(line) + local title = gstring.xml_escape(line:match('title_(.*)artist_')) or "" + local artist = gstring.xml_escape(line:match('artist_(.*)art_url_')) or "" + local art_url = line:match('art_url_(.*)player_name_') or "" + local player_name = line:match('player_name_(.*)album_') or "" + local album = gstring.xml_escape(line:match('album_(.*)')) or "" + + art_url = art_url:gsub('%\n', '') + if player_name == "spotify" then + art_url = art_url:gsub("open.spotify.com", "i.scdn.co") + end + + if self._private.metadata_timer + and self._private.metadata_timer.started + then + self._private.metadata_timer:stop() + end + + self._private.metadata_timer = gtimer { + timeout = self.debounce_delay, + autostart = true, + single_shot = true, + callback = function() + if title and title ~= "" then + if art_url ~= "" then + local art_path = os.tmpname() + helpers.filesystem.save_image_async_curl(art_url, art_path, function() + self:emit_signal("metadata", title, artist, art_path, album, player_name) + capi.awesome.emit_signal("bling::playerctl::title_artist_album", title, artist, art_path) + end) + else + self:emit_signal("metadata", title, artist, "", album, player_name) + capi.awesome.emit_signal("bling::playerctl::title_artist_album", title, artist, "") + end + else + self:emit_signal("no_players") + capi.awesome.emit_signal("bling::playerctl::no_players") + end + end + } + + collectgarbage("collect") + end, + }) +end + +local function emit_player_position(self) + local position_cmd = self._private.cmd .. "position" + local length_cmd = self._private.cmd .. "metadata mpris:length" + + awful.widget.watch(position_cmd, self.interval, function(_, interval) awful.spawn.easy_async_with_shell(length_cmd, function(length) local length_sec = tonumber(length) -- in microseconds local interval_sec = tonumber(interval) -- in seconds if length_sec and interval_sec then if interval_sec >= 0 and length_sec > 0 then - awesome.emit_signal( - "bling::playerctl::position", - interval_sec, - length_sec / 1000000 - ) + self:emit_signal("position", interval_sec, length_sec / 1000000) + capi.awesome.emit_signal("bling::playerctl::position", interval_sec, length_sec / 1000000) end end end) collectgarbage("collect") end) - - -- Follow title - awful.spawn.easy_async({ - "pkill", - "--full", - "--uid", - os.getenv("USER"), - "^playerctl metadata", - }, function() - awful.spawn.with_line_callback(song_follow_cmd, { - stdout = function(line) - local album_path = "" - awful.spawn.easy_async_with_shell(art_script, function(out) - -- Get album path - album_path = out:gsub("%\n", "") - -- Get title and artist - local artist = line:match("artist_(.*)title_") - local title = line:match("title_(.*)") - -- If the title is nil or empty then the players stopped - if title and title ~= "" then - awesome.emit_signal( - "bling::playerctl::title_artist_album", - title, - artist, - album_path - ) - else - awesome.emit_signal("bling::playerctl::no_players") - end - end) - collectgarbage("collect") - end, - }) - collectgarbage("collect") - end) end --- Emit info --- emit_player_status() --- emit_player_info() +local function emit_player_playback_status(self) + local status_cmd = self._private.cmd .. "status -F" -local enable = function(args) - interval = (args and args.interval) or interval - emit_player_status() - emit_player_info() + awful.spawn.with_line_callback(status_cmd, { + stdout = function(line) + if line:find("Playing") then + self:emit_signal("playback_status", true) + capi.awesome.emit_signal("bling::playerctl::status", true) + else + self:emit_signal("playback_status", false) + capi.awesome.emit_signal("bling::playerctl::status", false) + end + end, + }) end -local disable = function() - awful.spawn.with_shell( - "pkill --full --uid " .. os.getenv("USER") .. " '^playerctl status -F'" - ) +local function emit_player_volume(self) + local volume_cmd = self._private.cmd .. "volume -F" - awful.spawn.with_shell( - "pkill --full --uid " - .. os.getenv("USER") - .. " '^playerctl metadata --format'" - ) + awful.spawn.with_line_callback(volume_cmd, { + stdout = function(line) + self:emit_signal("volume", tonumber(line)) + end, + }) end -return { enable = enable, disable = disable } +local function emit_player_loop_status(self) + local loop_status_cmd = self._private.cmd .. "loop -F" + + awful.spawn.with_line_callback(loop_status_cmd, { + stdout = function(line) + self._private.loop_status = line + self:emit_signal("loop_status", line:lower()) + end, + }) +end + +local function emit_player_shuffle(self) + local shuffle_cmd = self._private.cmd .. "shuffle -F" + + awful.spawn.with_line_callback(shuffle_cmd, { + stdout = function(line) + if line:find("On") then + self._private.shuffle = true + self:emit_signal("shuffle", true) + else + self._private.shuffle = false + self:emit_signal("shuffle", false) + end + end, + }) +end + +local function parse_args(self, args) + if args.player then + self._private.cmd = self._private.cmd .. "--player=" + + if type(args.player) == "string" then + self._private.cmd = self._private.cmd .. args.player .. " " + elseif type(args.player) == "table" then + for index, player in ipairs(args.player) do + self._private.cmd = self._private.cmd .. player + if index < #args.player then + self._private.cmd = self._private.cmd .. "," + else + self._private.cmd = self._private.cmd .. " " + end + end + end + end + + if args.ignore then + self._private.cmd = self._private.cmd .. "--ignore-player=" + + if type(args.ignore) == "string" then + self._private.cmd = self._private.cmd .. args.ignore .. " " + elseif type(args.ignore) == "table" then + for index, player in ipairs(args.ignore) do + self._private.cmd = self._private.cmd .. player + if index < #args.ignore then + self._private.cmd = self._private.cmd .. "," + else + self._private.cmd = self._private.cmd .. " " + end + end + end + end +end + +local function new(args) + args = args or {} + + local ret = gobject{} + gtable.crush(ret, playerctl, true) + + ret.interval = args.interval or beautiful.playerctl_position_update_interval or 1 + ret.debounce_delay = args.debounce_delay or beautiful.playerctl_debounce_delay or 0.35 + + ret._private = {} + ret._private.metadata_timer = nil + ret._private.cmd = "playerctl " + parse_args(ret, args) + + emit_player_metadata(ret) + emit_player_position(ret) + emit_player_playback_status(ret) + emit_player_volume(ret) + emit_player_loop_status(ret) + emit_player_shuffle(ret) + + return ret +end + +function playerctl.mt:__call(...) + return new(...) +end + +-- On startup instead of on playerctl object init to make it +-- possible to have more than one of these running +awful.spawn.with_shell("killall playerctl") + +return setmetatable(playerctl, playerctl.mt) diff --git a/.config/awesome/extras/bling/signal/playerctl/playerctl_lib.lua b/.config/awesome/extras/bling/signal/playerctl/playerctl_lib.lua index 5e67f1f..1df1e1f 100644 --- a/.config/awesome/extras/bling/signal/playerctl/playerctl_lib.lua +++ b/.config/awesome/extras/bling/signal/playerctl/playerctl_lib.lua @@ -1,88 +1,209 @@ -- Playerctl signals -- -- Provides: --- bling::playerctl::status --- playing (boolean) --- player_name (string) --- bling::playerctl::title_artist_album +-- metadata -- title (string) -- artist (string) -- album_path (string) +-- album (string) +-- new (bool) -- player_name (string) --- bling::playerctl::position +-- position -- interval_sec (number) -- length_sec (number) -- player_name (string) --- bling::playerctl::no_players +-- playback_status +-- playing (boolean) +-- player_name (string) +-- seeked +-- position (number) +-- player_name (string) +-- volume +-- volume (number) +-- player_name (string) +-- loop_status +-- loop_status (string) +-- player_name (string) +-- shuffle +-- shuffle (boolean) +-- player_name (string) +-- exit +-- player_name (string) +-- no_players -- (No parameters) -local gears = require("gears") local awful = require("awful") +local gobject = require("gears.object") +local gtable = require("gears.table") +local gtimer = require("gears.timer") +local gstring = require("gears.string") local beautiful = require("beautiful") -local Playerctl = nil +local helpers = require(tostring(...):match(".*bling") .. ".helpers") +local setmetatable = setmetatable +local ipairs = ipairs +local pairs = pairs +local type = type +local capi = { awesome = awesome } -local manager = nil -local metadata_timer = nil -local position_timer = nil +local playerctl = { mt = {} } -local ignore = {} -local priority = {} -local update_on_activity = true -local interval = 1 +function playerctl:disable() + -- Restore default settings + self.ignore = {} + self.priority = {} + self.update_on_activity = true + self.interval = 1 + self.debounce_delay = 0.35 --- Track position callback -local last_position = -1 -local last_length = -1 -local function position_cb() - local player = manager.players[1] + -- Reset timers + self._private.manager = nil + self._private.metadata_timer:stop() + self._private.metadata_timer = nil + self._private.position_timer:stop() + self._private.position_timer = nil + + -- Reset default values + self._private.last_position = -1 + self._private.last_length = -1 + self._private.last_player = nil + self._private.last_title = "" + self._private.last_artist = "" + self._private.last_artUrl = "" +end + +function playerctl:pause(player) + player = player or self._private.manager.players[1] if player then - local position = player:get_position() / 1000000 - local length = (player.metadata.value["mpris:length"] or 0) / 1000000 - if position ~= last_position or length ~= last_length then - awesome.emit_signal( - "bling::playerctl::position", - position, - length, - player.player_name - ) - last_position = position - last_length = length + player:pause() + end +end + +function playerctl:play(player) + player = player or self._private.manager.players[1] + if player then + player:play() + end +end + +function playerctl:stop(player) + player = player or self._private.manager.players[1] + if player then + player:stop() + end +end + +function playerctl:play_pause(player) + player = player or self._private.manager.players[1] + if player then + player:play_pause() + end +end + +function playerctl:previous(player) + player = player or self._private.manager.players[1] + if player then + player:previous() + end +end + +function playerctl:next(player) + player = player or self._private.manager.players[1] + if player then + player:next() + end +end + +function playerctl:set_loop_status(loop_status, player) + player = player or self._private.manager.players[1] + if player then + player:set_loop_status(loop_status) + end +end + +function playerctl:cycle_loop_status(player) + player = player or self._private.manager.players[1] + if player then + if player.loop_status == "NONE" then + player:set_loop_status("TRACK") + elseif player.loop_status == "TRACK" then + player:set_loop_status("PLAYLIST") + elseif player.loop_status == "PLAYLIST" then + player:set_loop_status("NONE") end end end -local function get_album_art(url) - return awful.util.shell - .. [[ -c ' - -tmp_dir="$XDG_CACHE_HOME/awesome/" - -if [ -z "$XDG_CACHE_HOME" ]; then - tmp_dir="$HOME/.cache/awesome/" -fi - -tmp_cover_path="${tmp_dir}cover.png" - -if [ ! -d "$tmp_dir" ]; then - mkdir -p $tmp_dir -fi - -curl -s ']] - .. url - .. [[' --output $tmp_cover_path - -echo "$tmp_cover_path" -']] +function playerctl:set_position(position, player) + player = player or self._private.manager.players[1] + if player then + player:set_position(position * 1000000) + end end --- Metadata callback for title, artist, and album art -local last_player = nil -local last_title = "" -local last_artist = "" -local last_artUrl = "" -local function metadata_cb(player, metadata) - if update_on_activity then - manager:move_player_to_top(player) +function playerctl:set_shuffle(shuffle, player) + player = player or self._private.manager.players[1] + if player then + player:set_shuffle(shuffle) + end +end + +function playerctl:cycle_shuffle(player) + player = player or self._private.manager.players[1] + if player then + player:set_shuffle(not player.shuffle) + end +end + +function playerctl:set_volume(volume, player) + player = player or self._private.manager.players[1] + if player then + player:set_volume(volume) + end +end + +function playerctl:get_manager() + return self._private.manager +end + +function playerctl:get_active_player() + return self._private.manager.players[1] +end + +function playerctl:get_player_of_name(name) + for _, player in ipairs(self._private.manager.players[1]) do + if player.name == name then + return player + end + end + + return nil +end + +local function emit_metadata_signal(self, title, artist, artUrl, album, new, player_name) + title = gstring.xml_escape(title) + artist = gstring.xml_escape(artist) + album = gstring.xml_escape(album) + + -- Spotify client doesn't report its art URL's correctly... + if player_name == "spotify" then + artUrl = artUrl:gsub("open.spotify.com", "i.scdn.co") + end + + if artUrl ~= "" then + local art_path = os.tmpname() + helpers.filesystem.save_image_async_curl(artUrl, art_path, function() + self:emit_signal("metadata", title, artist, art_path, album, new, player_name) + capi.awesome.emit_signal("bling::playerctl::title_artist_album", title, artist, art_path, player_name) + end) + else + capi.awesome.emit_signal("bling::playerctl::title_artist_album", title, artist, "", player_name) + self:emit_signal("metadata", title, artist, "", album, new, player_name) + end +end + +local function metadata_cb(self, player, metadata) + if self.update_on_activity then + self._private.manager:move_player_to_top(player) end local data = metadata.value @@ -93,101 +214,136 @@ local function metadata_cb(player, metadata) artist = artist .. ", " .. data["xesam:artist"][i] end local artUrl = data["mpris:artUrl"] or "" - -- Spotify client doesn't report its art URL's correctly... - if player.player_name == "spotify" then - artUrl = artUrl:gsub("open.spotify.com", "i.scdn.co") - end + local album = data["xesam:album"] or "" + + if player == self._private.manager.players[1] then + self._private.active_player = player - if player == manager.players[1] then -- Callback can be called even though values we care about haven't -- changed, so check to see if they have if - player ~= last_player - or title ~= last_title - or artist ~= last_artist - or artUrl ~= last_artUrl + player ~= self._private.last_player + or title ~= self._private.last_title + or artist ~= self._private.last_artist + or artUrl ~= self._private.last_artUrl then - if title == "" and artist == "" and artUrl == "" then - return + if (title == "" and artist == "" and artUrl == "") then return end + + if self._private.metadata_timer ~= nil and self._private.metadata_timer.started then + self._private.metadata_timer:stop() end - if metadata_timer ~= nil then - if metadata_timer.started then - metadata_timer:stop() - end - end - - metadata_timer = gears.timer({ - timeout = 0.3, + self._private.metadata_timer = gtimer { + timeout = self.debounce_delay, autostart = true, single_shot = true, callback = function() - if artUrl ~= "" then - awful.spawn.with_line_callback(get_album_art(artUrl), { - stdout = function(line) - awesome.emit_signal( - "bling::playerctl::title_artist_album", - title, - artist, - line, - player.player_name - ) - end, - }) - else - awesome.emit_signal( - "bling::playerctl::title_artist_album", - title, - artist, - "", - player.player_name - ) - end - end, - }) + emit_metadata_signal(self, title, artist, artUrl, album, true, player.player_name) + end + } -- Re-sync with position timer when track changes - position_timer:again() - last_player = player - last_title = title - last_artist = artist - last_artUrl = artUrl + self._private.position_timer:again() + self._private.last_player = player + self._private.last_title = title + self._private.last_artist = artist + self._private.last_artUrl = artUrl end end end --- Playback status callback --- Reported as PLAYING, PAUSED, or STOPPED -local function playback_status_cb(player, status) - if update_on_activity then - manager:move_player_to_top(player) +local function position_cb(self) + local player = self._private.manager.players[1] + if player then + + local position = player:get_position() / 1000000 + local length = (player.metadata.value["mpris:length"] or 0) / 1000000 + if position ~= self._private.last_position or length ~= self._private.last_length then + capi.awesome.emit_signal("bling::playerctl::position", position, length, player.player_name) + self:emit_signal("position", position, length, player.player_name) + self._private.last_position = position + self._private.last_length = length + end + end +end + +local function playback_status_cb(self, player, status) + if self.update_on_activity then + self._private.manager:move_player_to_top(player) end - if player == manager.players[1] then + if player == self._private.manager.players[1] then + self._private.active_player = player + + -- Reported as PLAYING, PAUSED, or STOPPED if status == "PLAYING" then - awesome.emit_signal( - "bling::playerctl::status", - true, - player.player_name - ) + self:emit_signal("playback_status", true, player.player_name) + capi.awesome.emit_signal("bling::playerctl::status", true, player.player_name) else - awesome.emit_signal( - "bling::playerctl::status", - false, - player.player_name - ) + self:emit_signal("playback_status", false, player.player_name) + capi.awesome.emit_signal("bling::playerctl::status", false, player.player_name) end end end +local function seeked_cb(self, player, position) + if self.update_on_activity then + self._private.manager:move_player_to_top(player) + end + + if player == self._private.manager.players[1] then + self._private.active_player = player + self:emit_signal("seeked", position / 1000000, player.player_name) + end +end + +local function volume_cb(self, player, volume) + if self.update_on_activity then + self._private.manager:move_player_to_top(player) + end + + if player == self._private.manager.players[1] then + self._private.active_player = player + self:emit_signal("volume", volume, player.player_name) + end +end + +local function loop_status_cb(self, player, loop_status) + if self.update_on_activity then + self._private.manager:move_player_to_top(player) + end + + if player == self._private.manager.players[1] then + self._private.active_player = player + self:emit_signal("loop_status", loop_status:lower(), player.player_name) + end +end + +local function shuffle_cb(self, player, shuffle) + if self.update_on_activity then + self._private.manager:move_player_to_top(player) + end + + if player == self._private.manager.players[1] then + self._private.active_player = player + self:emit_signal("shuffle", shuffle, player.player_name) + end +end + +local function exit_cb(self, player) + if player == self._private.manager.players[1] then + self:emit_signal("exit", player.player_name) + end +end + -- Determine if player should be managed -local function name_is_selected(name) - if ignore[name.name] then +local function name_is_selected(self, name) + if self.ignore[name.name] then return false end - if #priority > 0 then - for _, arg in pairs(priority) do + if #self.priority > 0 then + for _, arg in pairs(self.priority) do if arg == name.name or arg == "%any" then return true end @@ -199,23 +355,42 @@ local function name_is_selected(name) end -- Create new player and connect it to callbacks -local function init_player(name) - if name_is_selected(name) then - local player = Playerctl.Player.new_from_name(name) - manager:manage_player(player) - player.on_playback_status = playback_status_cb - player.on_metadata = metadata_cb +local function init_player(self, name) + if name_is_selected(self, name) then + local player = self._private.lgi_Playerctl.Player.new_from_name(name) + self._private.manager:manage_player(player) + player.on_metadata = function(player, metadata) + metadata_cb(self, player, metadata) + end + player.on_playback_status = function(player, playback_status) + playback_status_cb(self, player, playback_status) + end + player.on_seeked = function(player, position) + seeked_cb(self, player, position) + end + player.on_volume = function(player, volume) + volume_cb(self, player, volume) + end + player.on_loop_status = function(player, loop_status) + loop_status_cb(self, player, loop_status) + end + player.on_shuffle = function(player, shuffle_status) + shuffle_cb(self, player, shuffle_status) + end + player.on_exit = function(player, shuffle_status) + exit_cb(self, player) + end -- Start position timer if its not already running - if not position_timer.started then - position_timer:again() + if not self._private.position_timer.started then + self._private.position_timer:again() end end end -- Determine if a player name comes before or after another according to the -- priority order -local function player_compare_name(name_a, name_b) +local function player_compare_name(self, name_a, name_b) local any_index = math.huge local a_match_index = nil local b_match_index = nil @@ -224,7 +399,7 @@ local function player_compare_name(name_a, name_b) return 0 end - for index, name in ipairs(priority) do + for index, name in ipairs(self.priority) do if name == "%any" then any_index = (any_index == math.huge) and index or any_index elseif name == name_a then @@ -248,103 +423,138 @@ local function player_compare_name(name_a, name_b) end -- Sorting function used by manager if a priority order is specified -local function player_compare(a, b) - local player_a = Playerctl.Player(a) - local player_b = Playerctl.Player(b) - return player_compare_name(player_a.player_name, player_b.player_name) +local function player_compare(self, a, b) + local player_a = self._private.lgi_Playerctl.Player(a) + local player_b = self._private.lgi_Playerctl.Player(b) + return player_compare_name(self, player_a.player_name, player_b.player_name) end -local function start_manager() - manager = Playerctl.PlayerManager() - if #priority > 0 then - manager:set_sort_func(player_compare) +local function get_current_player_info(self, player) + local title = player:get_title() or "" + local artist = player:get_artist() or "" + local artUrl = player:print_metadata_prop("mpris:artUrl") or "" + local album = player:get_album() or "" + + emit_metadata_signal(self, title, artist, artUrl, album, false, player.player_name) + playback_status_cb(self, player, player.playback_status) + volume_cb(self, player, player.volume) + loop_status_cb(self, player, player.loop_status) + shuffle_cb(self, player, player.shuffle) +end + +local function start_manager(self) + self._private.manager = self._private.lgi_Playerctl.PlayerManager() + + if #self.priority > 0 then + self._private.manager:set_sort_func(function(a, b) + return player_compare(self, a, b) + end) end -- Timer to update track position at specified interval - position_timer = gears.timer({ - timeout = interval, - callback = position_cb, - }) + self._private.position_timer = gtimer { + timeout = self.interval, + callback = function() + position_cb(self) + end, + } -- Manage existing players on startup - for _, name in ipairs(manager.player_names) do - init_player(name) + for _, name in ipairs(self._private.manager.player_names) do + init_player(self, name) end + if self._private.manager.players[1] then + get_current_player_info(self, self._private.manager.players[1]) + end + + local _self = self + -- Callback to manage new players - function manager:on_name_appeared(name) - init_player(name) + function self._private.manager:on_name_appeared(name) + init_player(_self, name) end - -- Callback to check if all players have exited - function manager:on_name_vanished(name) - if #manager.players == 0 then - metadata_timer:stop() - position_timer:stop() - awesome.emit_signal("bling::playerctl::no_players") + function self._private.manager:on_player_appeared(player) + if player == self.players[1] then + _self._private.active_player = player + end + end + + function self._private.manager:on_player_vanished(player) + if #self.players == 0 then + _self._private.metadata_timer:stop() + _self._private.position_timer:stop() + _self:emit_signal("no_players") + capi.awesome.emit_signal("bling::playerctl::no_players") + elseif player == _self._private.active_player then + _self._private.active_player = self.players[1] + get_current_player_info(_self, self.players[1]) end end end --- Parse arguments -local function parse_args(args) - if args then - update_on_activity = args.update_on_activity or update_on_activity - interval = args.interval or interval - - if type(args.ignore) == "string" then - ignore[args.ignore] = true - elseif type(args.ignore) == "table" then - for _, name in pairs(args.ignore) do - ignore[name] = true - end +local function parse_args(self, args) + self.ignore = {} + if type(args.ignore) == "string" then + self.ignore[args.ignore] = true + elseif type(args.ignore) == "table" then + for _, name in pairs(args.ignore) do + self.ignore[name] = true end + end - if type(args.player) == "string" then - priority[1] = args.player - elseif type(args.player) == "table" then - priority = args.player - end + self.priority = {} + if type(args.player) == "string" then + self.priority[1] = args.player + elseif type(args.player) == "table" then + self.priority = args.player end end -local function playerctl_enable(args) +local function new(args) args = args or {} + + local ret = gobject{} + gtable.crush(ret, playerctl, true) + -- Grab settings from beautiful variables if not set explicitly args.ignore = args.ignore or beautiful.playerctl_ignore args.player = args.player or beautiful.playerctl_player - args.update_on_activity = args.update_on_activity - or beautiful.playerctl_update_on_activity - args.interval = args.interval - or beautiful.playerctl_position_update_interval - parse_args(args) + ret.update_on_activity = args.update_on_activity or + beautiful.playerctl_update_on_activity or true + ret.interval = args.interval or beautiful.playerctl_position_update_interval or 1 + ret.debounce_delay = args.debounce_delay or beautiful.playerctl_debounce_delay or 0.35 + parse_args(ret, args) + + ret._private = {} + + -- Metadata callback for title, artist, and album art + ret._private.last_player = nil + ret._private.last_title = "" + ret._private.last_artist = "" + ret._private.last_artUrl = "" + + -- Track position callback + ret._private.last_position = -1 + ret._private.last_length = -1 -- Grab playerctl library - Playerctl = require("lgi").Playerctl + ret._private.lgi_Playerctl = require("lgi").Playerctl + ret._private.manager = nil + ret._private.metadata_timer = nil + ret._private.position_timer = nil -- Ensure main event loop has started before starting player manager - gears.timer.delayed_call(start_manager) + gtimer.delayed_call(function() + start_manager(ret) + end) + + return ret end -local function playerctl_disable() - -- Remove manager and timer - manager = nil - metadata_timer:stop() - metadata_timer = nil - position_timer:stop() - position_timer = nil - -- Restore default settings - ignore = {} - priority = {} - update_on_activity = true - interval = 1 - -- Reset default values - last_position = -1 - last_length = -1 - last_player = nil - last_title = "" - last_artist = "" - last_artUrl = "" +function playerctl.mt:__call(...) + return new(...) end -return { enable = playerctl_enable, disable = playerctl_disable } +return setmetatable(playerctl, playerctl.mt) diff --git a/.config/awesome/extras/bling/theme-var-template.lua b/.config/awesome/extras/bling/theme-var-template.lua new file mode 100644 index 0000000..13d0f5a --- /dev/null +++ b/.config/awesome/extras/bling/theme-var-template.lua @@ -0,0 +1,105 @@ +--[[ Bling theme variables template + +This file has all theme variables of the bling module. +Every variable has a small comment on what it does. +You might just want to copy that whole part into your theme.lua and start adjusting from there. + +--]] +-- LuaFormatter off +-- window swallowing +theme.dont_swallow_classname_list = { "firefox", "Gimp" } -- list of class names that should not be swallowed +theme.dont_swallow_filter_activated = true -- whether the filter above should be active + +-- flash focus +theme.flash_focus_start_opacity = 0.6 -- the starting opacity +theme.flash_focus_step = 0.01 -- the step of animation + +-- playerctl signal +theme.playerctl_backend = "playerctl_cli" -- backend to use +theme.playerctl_ignore = {} -- list of players to be ignored +theme.playerctl_player = {} -- list of players to be used in priority order +theme.playerctl_update_on_activity = true -- whether to prioritize the most recently active players or not +theme.playerctl_position_update_interval = 1 -- the update interval for fetching the position from playerctl + +-- tabbed +theme.tabbed_spawn_in_tab = false -- whether a new client should spawn into the focused tabbing container + +-- tabbar general +theme.tabbar_disable = false -- disable the tab bar entirely +theme.tabbar_ontop = false +theme.tabbar_radius = 0 -- border radius of the tabbar +theme.tabbar_style = "default" -- style of the tabbar ("default", "boxes" or "modern") +theme.tabbar_font = "Sans 11" -- font of the tabbar +theme.tabbar_size = 40 -- size of the tabbar +theme.tabbar_position = "top" -- position of the tabbar +theme.tabbar_bg_normal = "#000000" -- background color of the focused client on the tabbar +theme.tabbar_fg_normal = "#ffffff" -- foreground color of the focused client on the tabbar +theme.tabbar_bg_focus = "#1A2026" -- background color of unfocused clients on the tabbar +theme.tabbar_fg_focus = "#ff0000" -- foreground color of unfocused clients on the tabbar +theme.tabbar_bg_focus_inactive = nil -- background color of the focused client on the tabbar when inactive +theme.tabbar_fg_focus_inactive = nil -- foreground color of the focused client on the tabbar when inactive +theme.tabbar_bg_normal_inactive = nil -- background color of unfocused clients on the tabbar when inactive +theme.tabbar_fg_normal_inactive = nil -- foreground color of unfocused clients on the tabbar when inactive + +-- mstab +theme.mstab_bar_disable = false -- disable the tabbar +theme.mstab_bar_ontop = false -- whether you want to allow the bar to be ontop of clients +theme.mstab_dont_resize_slaves = false -- whether the tabbed stack windows should be smaller than the +-- currently focused stack window (set it to true if you use +-- transparent terminals. False if you use shadows on solid ones +theme.mstab_bar_padding = "default" -- how much padding there should be between clients and your tabbar +-- by default it will adjust based on your useless gaps. +-- If you want a custom value. Set it to the number of pixels (int) +theme.mstab_border_radius = 0 -- border radius of the tabbar +theme.mstab_bar_height = 40 -- height of the tabbar +theme.mstab_tabbar_position = "top" -- position of the tabbar (mstab currently does not support left,right) +theme.mstab_tabbar_style = "default" -- style of the tabbar ("default", "boxes" or "modern") +-- defaults to the tabbar_style so only change if you want a +-- different style for mstab and tabbed + +-- the following variables are currently only for the "modern" tabbar style +theme.tabbar_color_close = "#f9929b" -- changes the color of the close button +theme.tabbar_color_min = "#fbdf90" -- changes the color of the minimize button +theme.tabbar_color_float = "#ccaced" -- changes the color of the float button + +-- tag preview widget +theme.tag_preview_widget_border_radius = 0 -- Border radius of the widget (With AA) +theme.tag_preview_client_border_radius = 0 -- Border radius of each client in the widget (With AA) +theme.tag_preview_client_opacity = 0.5 -- Opacity of each client +theme.tag_preview_client_bg = "#000000" -- The bg color of each client +theme.tag_preview_client_border_color = "#ffffff" -- The border color of each client +theme.tag_preview_client_border_width = 3 -- The border width of each client +theme.tag_preview_widget_bg = "#000000" -- The bg color of the widget +theme.tag_preview_widget_border_color = "#ffffff" -- The border color of the widget +theme.tag_preview_widget_border_width = 3 -- The border width of the widget +theme.tag_preview_widget_margin = 0 -- The margin of the widget + +-- task preview widget +theme.task_preview_widget_border_radius = 0 -- Border radius of the widget (With AA) +theme.task_preview_widget_bg = "#000000" -- The bg color of the widget +theme.task_preview_widget_border_color = "#ffffff" -- The border color of the widget +theme.task_preview_widget_border_width = 3 -- The border width of the widget +theme.task_preview_widget_margin = 0 -- The margin of the widget + +-- window switcher +theme.window_switcher_widget_bg = "#000000" -- The bg color of the widget +theme.window_switcher_widget_border_width = 3 -- The border width of the widget +theme.window_switcher_widget_border_radius = 0 -- The border radius of the widget +theme.window_switcher_widget_border_color = "#ffffff" -- The border color of the widget +theme.window_switcher_clients_spacing = 20 -- The space between each client item +theme.window_switcher_client_icon_horizontal_spacing = 5 -- The space between client icon and text +theme.window_switcher_client_width = 150 -- The width of one client widget +theme.window_switcher_client_height = 250 -- The height of one client widget +theme.window_switcher_client_margins = 10 -- The margin between the content and the border of the widget +theme.window_switcher_thumbnail_margins = 10 -- The margin between one client thumbnail and the rest of the widget +theme.thumbnail_scale = false -- If set to true, the thumbnails fit policy will be set to "fit" instead of "auto" +theme.window_switcher_name_margins = 10 -- The margin of one clients title to the rest of the widget +theme.window_switcher_name_valign = "center" -- How to vertically align one clients title +theme.window_switcher_name_forced_width = 200 -- The width of one title +theme.window_switcher_name_font = "Sans 11" -- The font of all titles +theme.window_switcher_name_normal_color = "#ffffff" -- The color of one title if the client is unfocused +theme.window_switcher_name_focus_color = "#ff0000" -- The color of one title if the client is focused +theme.window_switcher_icon_valign = "center" -- How to vertically align the one icon +theme.window_switcher_icon_width = 40 -- The width of one icon + +-- LuaFormatter on diff --git a/.config/awesome/extras/bling/widget/app_launcher/init.lua b/.config/awesome/extras/bling/widget/app_launcher/init.lua index 7eeaf17..b74c2ab 100644 --- a/.config/awesome/extras/bling/widget/app_launcher/init.lua +++ b/.config/awesome/extras/bling/widget/app_launcher/init.lua @@ -281,8 +281,8 @@ local function search(self, text) text = text:gsub( "%W", "" ) -- Check if there's a match by the app name or app command - if string.find(entry.name, case_insensitive_pattern(text)) ~= nil or - self.search_commands and string.find(entry.commandline, case_insensitive_pattern(text)) ~= nil + if string.find(entry.name:lower(), text:lower(), 1, true) ~= nil or + self.search_commands and string.find(entry.commandline, text:lower(), 1, true) ~= nil then table.insert(self._private.matched_entries, { name = entry.name, @@ -498,7 +498,6 @@ local function scroll_right(self) local rows, columns = self._private.grid:get_dimension() local pos = self._private.grid:get_widget_position(self._private.active_widget) local is_less_than_max_column = pos.col < columns - local is_less_than_max_page = self._private.current_page < self._private.pages_count -- Check if we can scroll down the app list if is_less_than_max_column then @@ -773,6 +772,7 @@ local function new(args) args.icon_theme = args.icon_theme or nil args.icons_size = args.icons_size or nil + args.type = args.type or "dock" args.show_on_focused_screen = args.show_on_focused_screen == nil and true or args.show_on_focused_screen args.screen = args.screen or capi.screen.primary args.placement = args.placement or awful.placement.centered @@ -919,7 +919,7 @@ local function new(args) } ret._private.widget = awful.popup { - type = "dock", + type = args.type, visible = false, ontop = true, placement = ret.placement, diff --git a/.config/awesome/functions/init.lua b/.config/awesome/functions/init.lua index bb27339..0d33079 100644 --- a/.config/awesome/functions/init.lua +++ b/.config/awesome/functions/init.lua @@ -1,4 +1,5 @@ +local beautiful = require("beautiful") local awful = require("awful") local shapes = require("extras.nice.shapes") @@ -8,12 +9,77 @@ function update_titlebars(c, init) -- Rounded Corners if not c.fullscreen and not c.maximized then c.shape = shapes.rounded_rect { - tl = 9, - tr = 9, - bl = 9, - br = 9 + tl = beautiful.corner_radius, + tr = beautiful.corner_radius, + bl = beautiful.corner_radius, + br = beautiful.corner_radius } else c.shape = nil end end + +function toggle_window_buffers(s) + if not s.top then + s.left = awful.wibar({ + screen = s, + position = "left", + opacity = 0.0, + input_passthrough = true, + }) + + s.right = awful.wibar({ + screen = s, + position = "right", + opacity = 0.0, + input_passthrough = true, + }) + + s.top = awful.wibar({ + screen = s, + position = "top", + opacity = 0.0, + input_passthrough = true, + }) + + s.bottom = awful.wibar({ + screen = s, + position = "bottom", + opacity = 0.0, + input_passthrough = true, + }) + end + + -- Three states: off, small borders, large borders + s.buffer_state = s.buffer_state or "off" + + if s.buffer_state == "off" then + s.buffer_state = "small" + s.left.visible = true + s.right.visible = true + s.top.visible = true + s.bottom.visible = true + s.left.width = 50 + s.right.width = 50 + s.top.height = 50 + s.bottom.height = 50 + elseif s.buffer_state == "small" then + s.buffer_state = "large" + s.left.visible = true + s.right.visible = true + s.top.visible = true + s.bottom.visible = true + s.left.width = 200 + s.right.width = 200 + s.top.height = 50 + s.bottom.height = 350 + elseif s.buffer_state == "large" then + s.buffer_state = "off" + s.left.visible = false + s.right.visible = false + s.top.visible = false + s.bottom.visible = false + end + +end + diff --git a/.config/awesome/rules/init.lua b/.config/awesome/rules/init.lua index c30c0e2..3bbb570 100644 --- a/.config/awesome/rules/init.lua +++ b/.config/awesome/rules/init.lua @@ -2,7 +2,7 @@ local awful = require("awful") local beautiful = require("beautiful") awful.rules.rules = { - -- All clients will match this rule. + -- All clients { rule = {}, properties = { @@ -15,7 +15,7 @@ awful.rules.rules = { placement = awful.placement.no_overlap + awful.placement.no_offscreen + awful.placement.centered } }, - -- Floating clients. + -- Floating clients { rule_any = { instance = { @@ -42,7 +42,7 @@ awful.rules.rules = { }, properties = {floating = true}, }, - -- Fullscreen clients. + -- Fullscreen clients { rule_any = { name = { @@ -53,6 +53,18 @@ awful.rules.rules = { fullscreen = true } }, + -- Ontop clients + { + rule_any = { + class = { + "qalculate-gtk", + "Qalculate-gtk", + }, + }, + properties = { + ontop = true + } + }, -- Anbox floating window size { rule_any = { @@ -62,8 +74,8 @@ awful.rules.rules = { }, properties = { floating = true, - height = 1280, - width = 800, + height = 800, + width = 480, }, }, -- Music Visualizer diff --git a/.config/awesome/screen/init.lua b/.config/awesome/screen/init.lua index 5dc70e9..774e0ad 100644 --- a/.config/awesome/screen/init.lua +++ b/.config/awesome/screen/init.lua @@ -1 +1,12 @@ -require "screen.wibar" \ No newline at end of file +local awful = require("awful") +require "screen.wibar" + +awful.screen.connect_for_each_screen( + function(s) + set_wallpaper(s) + + awful.tag({"1", "2", "3", "4", "5", "6", "7", "8", "9"}, s, awful.layout.layouts[1]) + + wibar = wibar_builder(s) + end +) \ No newline at end of file diff --git a/.config/awesome/screen/wibar.lua b/.config/awesome/screen/wibar.lua index 07b0de6..a557bd6 100644 --- a/.config/awesome/screen/wibar.lua +++ b/.config/awesome/screen/wibar.lua @@ -3,166 +3,36 @@ local awful = require("awful") local wibox = require("wibox") local beautiful = require("beautiful") -beautiful.bg_systray = "#2e3440" -beautiful.tasklist_bg_normal = "#2e3440" -beautiful.tasklist_bg_focus = "#4c566a" -beautiful.tasklist_bg_urgent = "#bf616a" -beautiful.tasklist_bg_minimize = "#5e81ac" +require "screen.wibar.widgets" -mykeyboardlayout = awful.widget.keyboardlayout() -mytextclock = wibox.widget.textclock() -mysystray = wibox.widget.systray() +function wibar_builder(s) + local w = awful.wibar({ + screen = s, + position = "top", + bg = beautiful.bg_systray, + height = 26, + }) -local taglist_buttons = - gears.table.join( - awful.button( - {}, - 1, - function(t) - t:view_only() - end - ), - awful.button( - {modkey}, - 1, - function(t) - if client.focus then - client.focus:move_to_tag(t) - end - end - ), - awful.button({}, 3, awful.tag.viewtoggle), - awful.button( - {modkey}, - 3, - function(t) - if client.focus then - client.focus:toggle_tag(t) - end - end - ), - awful.button( - {}, - 4, - function(t) - awful.tag.viewnext(t.screen) - end - ), - awful.button( - {}, - 5, - function(t) - awful.tag.viewprev(t.screen) - end - ) -) + local taglist = taglist(s) + local tasklist = tasklist(s) + local layoutbox = layoutbox(s) -local tasklist_buttons = - gears.table.join( - awful.button( - {}, - 1, - function(c) - if c == client.focus then - c.minimized = true - else - c:emit_signal("request::activate", "tasklist", {raise = true}) - end - end - ), - awful.button( - {}, - 4, - function() - awful.client.focus.byidx(1) - end - ), - awful.button( - {}, - 5, - function() - awful.client.focus.byidx(-1) - end - ) -) - -awful.screen.connect_for_each_screen( - function(s) - -- Wallpaper - set_wallpaper(s) - - -- Tags - awful.tag({"1", "2", "3", "4", "5", "6", "7", "8", "9"}, s, awful.layout.layouts[1]) - - s.mytaglist = awful.widget.taglist { - screen = s, - filter = awful.widget.taglist.filter.all, - buttons = taglist_buttons + w:setup{ + expand = "none", + layout = wibox.layout.align.horizontal, + { + layout = wibox.layout.fixed.horizontal, + taglist, + }, + tasklist, + { + layout = wibox.layout.fixed.horizontal, + systray, + keyboardlayout, + clock, + layoutbox, } + } - -- Layout Box - s.mylayoutbox = awful.widget.layoutbox(s) - s.mylayoutbox:buttons( - gears.table.join( - awful.button( - {}, - 1, - function() - awful.layout.inc(1) - end - ), - awful.button( - {}, - 3, - function() - awful.layout.inc(-1) - end - ), - awful.button( - {}, - 4, - function() - awful.layout.inc(1) - end - ), - awful.button( - {}, - 5, - function() - awful.layout.inc(-1) - end - ) - ) - ) - - -- Create a tasklist widget - s.mytasklist = awful.widget.tasklist { - screen = s, - filter = awful.widget.tasklist.filter.currenttags, - buttons = tasklist_buttons, - } - - -- Wibar initialization - s.mywibox = awful.wibar({ - position = "top", - screen = s, - bg = "#2e3440" - }) - - s.mywibox:setup { - layout = wibox.layout.align.horizontal, - { - layout = wibox.layout.fixed.horizontal, - s.mytaglist, - }, - s.mytasklist, - { - layout = wibox.layout.fixed.horizontal, - mysystray, - mykeyboardlayout, - mytextclock, - s.mylayoutbox, - } - } - end -) \ No newline at end of file + return w +end diff --git a/.config/awesome/screen/wibar/layoutbox.lua b/.config/awesome/screen/wibar/layoutbox.lua new file mode 100644 index 0000000..72e4ed7 --- /dev/null +++ b/.config/awesome/screen/wibar/layoutbox.lua @@ -0,0 +1,28 @@ +local gears = require("gears") +local awful = require("awful") +local wibox = require("wibox") + +function layoutbox(s) + lb = awful.widget.layoutbox(s) + + lb:buttons( + gears.table.join( + awful.button( + {}, + 1, + function() + awful.layout.inc(1) + end + ), + awful.button( + {}, + 3, + function() + awful.layout.inc(-1) + end + ) + ) + ) + + return lb +end \ No newline at end of file diff --git a/.config/awesome/screen/wibar/taglist.lua b/.config/awesome/screen/wibar/taglist.lua new file mode 100644 index 0000000..8d567e2 --- /dev/null +++ b/.config/awesome/screen/wibar/taglist.lua @@ -0,0 +1,69 @@ +local awful = require("awful") +local gears = require("gears") +local wibox = require("wibox") +local beautiful = require("beautiful") + +local taglist_buttons = + gears.table.join( + awful.button( + {}, + 1, + function(t) + t:view_only() + end + ), + awful.button( + {modkey}, + 1, + function(t) + if client.focus then + client.focus:move_to_tag(t) + end + end + ), + awful.button({}, 3, awful.tag.viewtoggle), + awful.button( + {modkey}, + 3, + function(t) + if client.focus then + client.focus:toggle_tag(t) + end + end + ) +) + +function taglist(s) + return awful.widget.taglist { + screen = s, + filter = awful.widget.taglist.filter.all, --.noempty, + buttons = taglist_buttons, + widget_template = { + { + { + id = 'index_role', + widget = wibox.widget.textbox, + }, + margins = 2, + widget = wibox.container.margin, + }, + id = 'background_role', + widget = wibox.container.background, + create_callback = function(self, c3, index, objects) + self:get_children_by_id('index_role')[1].markup = ' '..index..' ' + + self:connect_signal('mouse::enter', function() + if self.bg ~= beautiful.taglist_bg_focus then + self.backup = self.bg + self.has_backup = true + end + self.bg = beautiful.taglist_bg_focus + end) + + self:connect_signal('mouse::leave', function() + if self.has_backup then self.bg = self.backup end + end) + end, + }, + } +end \ No newline at end of file diff --git a/.config/awesome/screen/wibar/tasklist.lua b/.config/awesome/screen/wibar/tasklist.lua new file mode 100644 index 0000000..4c4fefb --- /dev/null +++ b/.config/awesome/screen/wibar/tasklist.lua @@ -0,0 +1,85 @@ +local gears = require("gears") +local awful = require("awful") +local wibox = require("wibox") +local beautiful = require("beautiful") + +local tasklist_buttons = + gears.table.join( + awful.button( + {}, + 1, + function(c) + if c == client.focus then + c.minimized = true + else + c:emit_signal("request::activate", "tasklist", {raise = true}) + end + end + ) +) + +function tasklist(s) + return awful.widget.tasklist { + screen = s, + filter = awful.widget.tasklist.filter.currenttags, + buttons = tasklist_buttons, + style = { + --disable_task_name = true + }, + layout = { + spacing = 5, + spacing_widget = { + valign = 'center', + halign = 'center', + widget = wibox.container.place, + }, + layout = wibox.layout.fixed.horizontal + }, + widget_template = { + { + { + { + { + id = 'icon_role', + widget = wibox.widget.imagebox, + }, + top = 2, + bottom = 2, + right = 3, + widget = wibox.container.margin, + }, + { + id = 'text_role', + widget = wibox.widget.textbox, + }, + layout = wibox.layout.fixed.horizontal, + }, + left = 8, + right = 10, + widget = wibox.container.margin + }, + id = 'background_role', + widget = wibox.container.background, + create_callback = function(self, c3, index, objects) + self:connect_signal('mouse::enter', function() + if self.bg ~= beautiful.tasklist_bg_focus then + self.backup = self.bg + self.has_backup = true + end + self.bg = beautiful.tasklist_bg_focus + -- Raise client + c3:emit_signal( + "request::activate", + "tasklist", { + raise = true + } + ) + end) + + self:connect_signal('mouse::leave', function() + if self.has_backup then self.bg = self.backup end + end) + end, + }, + } +end \ No newline at end of file diff --git a/.config/awesome/screen/wibar/widgets.lua b/.config/awesome/screen/wibar/widgets.lua new file mode 100644 index 0000000..91118d8 --- /dev/null +++ b/.config/awesome/screen/wibar/widgets.lua @@ -0,0 +1,16 @@ +local gears = require("gears") +local awful = require("awful") +local wibox = require("wibox") +local beautiful = require("beautiful") + +keyboardlayout = awful.widget.keyboardlayout() + +clock = wibox.widget.textclock() +clock.format = "".." %A %B %d, %H:%M ".."" + +systray = wibox.widget.systray() +systray:set_base_size(26) + +require "screen.wibar.taglist" +require "screen.wibar.layoutbox" +require "screen.wibar.tasklist" \ No newline at end of file diff --git a/.config/awesome/scripts/switch_theme.sh b/.config/awesome/scripts/switch_theme.sh index 4eb22ac..989b3e4 100755 --- a/.config/awesome/scripts/switch_theme.sh +++ b/.config/awesome/scripts/switch_theme.sh @@ -3,14 +3,11 @@ theme=$(grep -o -P '(?<=local theme = ").*(?=")' /home/nick/.config/awesome/theme/init.lua) case $theme in - "nordic_firewatch") - new_theme="nordic_moon" - ;; - "nordic_moon") - new_theme="nordic_legion" - ;; "nordic_legion") - new_theme="nordic_firewatch" + new_theme="abstract_office" + ;; + "abstract_office") + new_theme="nordic_legion" ;; *) esac @@ -18,41 +15,5 @@ esac # Replace the theme in the init.lua file sed -i "s/local theme = .*$/local theme = \"$new_theme\"/" /home/nick/.config/awesome/theme/init.lua -# Configure glava -case $new_theme in - "nordic_firewatch") - sed -i 's/#request mod .*/#request mod bars/g' /home/nick/.config/glava/rc.glsl - sed -i 's/#request setgeometry .*/#request setgeometry 0 0 2560 750/g' /home/nick/.config/glava/rc.glsl - ;; - "nordic_moon") - sed -i 's/#request mod .*/#request mod radial/g' /home/nick/.config/glava/rc.glsl - sed -i 's/#request setgeometry .*/#request setgeometry 0 0 2560 1600/g' /home/nick/.config/glava/rc.glsl - ;; - "nordic_legion") - sed -i 's/#request mod .*/#request mod bars/g' /home/nick/.config/glava/rc.glsl - sed -i 's/#request setgeometry .*/#request setgeometry 0 0 2560 1600/g' /home/nick/.config/glava/rc.glsl - ;; - *) -esac - -# Restart glava if it's running -if pgrep glava > /dev/null; then - killall glava - glava --desktop &>/dev/null & disown -fi - # Restart awesome echo 'awesome.restart()' | awesome-client - -# Configure conky -case $new_theme in - "nordic_firewatch") - pkill conky - ;; - "nordic_moon") - pkill conky - ;; - "nordic_legion") - ;; - *) -esac diff --git a/.config/awesome/signals/init.lua b/.config/awesome/signals/init.lua index 0122810..560db26 100644 --- a/.config/awesome/signals/init.lua +++ b/.config/awesome/signals/init.lua @@ -22,6 +22,24 @@ client.connect_signal( end ) +client.connect_signal( + "unmanage", + function(_) + local focus_timer = timer({ timeout = 0.05 }) + focus_timer:connect_signal( + "timeout", + function() + local c = awful.mouse.client_under_pointer() + if c ~= nil and not c.below then + client.focus = c + c:raise() + end + focus_timer:stop() + end) + focus_timer:start() + end +) + -- Enable sloppy focus, so that focus follows mouse. client.connect_signal( "mouse::enter", @@ -75,7 +93,6 @@ client.connect_signal( update_titlebars ) --- Automatically unminimize windows client.connect_signal( "property::minimized", function(c) @@ -85,14 +102,15 @@ client.connect_signal( end ) --- Re-set wallpaper when a screen's geometry changes (e.g. different resolution) -screen.connect_signal("property::geometry", set_wallpaper) +screen.connect_signal( + "property::geometry", + set_wallpaper +) tag.connect_signal( "property::selected", - function (t) - local selected = tostring(t.selected) == "false" - if selected then + function(t) + if not t.selected then local focus_timer = timer({ timeout = 0.05 }) focus_timer:connect_signal( "timeout", diff --git a/.config/awesome/theme/abstract_office/theme.lua b/.config/awesome/theme/abstract_office/theme.lua new file mode 100644 index 0000000..0de5553 --- /dev/null +++ b/.config/awesome/theme/abstract_office/theme.lua @@ -0,0 +1,133 @@ +--------------------------- +-- Default awesome theme -- +--------------------------- + +local gears = require("gears") +local theme_assets = require("beautiful.theme_assets") +local xresources = require("beautiful.xresources") +local dpi = xresources.apply_dpi + +local gfs = require("gears.filesystem") +local themes_path = gfs.get_themes_dir() + +local theme = {} + +theme.font = "Sans Serif 11" +theme.icon_font = "Font Awesome 6 Free" +theme.icon_size = 11 + +theme.bg_normal = "#151821" +theme.bg_dark = "#000000" +theme.bg_focus = "#1f2430" +theme.bg_urgent = "#ed8274" + +theme.fg_normal = "#ffffff" +theme.fg_focus = "#e4e4e4" +theme.fg_urgent = "#ffffff" +theme.fg_minimize = "#ffffff" + +theme.taglist_bg_empty = theme.bg_normal +theme.taglist_bg_occupied = "#ffffff1a" +theme.taglist_bg_urgent = "#e91e6399" +theme.taglist_bg_focus = theme.bg_focus + +theme.tasklist_bg_normal = theme.bg_normal +theme.tasklist_bg_focus = theme.bg_focus +theme.tasklist_bg_urgent = theme.bg_urgent + +theme.tasklist_fg_focus = theme.fg_focus +theme.tasklist_fg_urgent = theme.fg_urgent +theme.tasklist_fg_normal = theme.fg_normal + +theme.useless_gap = dpi(7) +theme.gap_single_client = true + +theme.border_width = dpi(0) +theme.corner_radius = dpi(10) + +theme.transparency = 85 + +-- taglist_[bg|fg]_[focus|urgent|occupied|empty|volatile] +-- tasklist_[bg|fg]_[focus|urgent] +-- titlebar_[bg|fg]_[normal|focus] +-- tooltip_[font|opacity|fg_color|bg_color|border_width|border_color] +-- mouse_finder_[color|timeout|animate_timeout|radius|factor] +-- prompt_[fg|bg|fg_cursor|bg_cursor|font] +-- hotkeys_[bg|fg|border_width|border_color|shape|opacity|modifiers_fg|label_bg|label_fg|group_margin|font|description_font] + +-- notification_font +-- notification_[bg|fg] +-- notification_[width|height|margin] +-- notification_[border_color|border_width|shape|opacity] + +theme.menu_height = dpi(15) +theme.menu_width = dpi(100) +-- menu_[bg|fg]_[normal|focus] +-- menu_[border_color|border_width] + +-- Image recoloring +local function get_icon(icon_raw) + if icon_raw ~= nil then + return gears.color.recolor_image(icon_raw, theme.fg_focus) + else + return nil + end +end + +-- Define the image to load +theme.titlebar_close_button_normal = get_icon(themes_path.."default/titlebar/close_normal.png") +theme.titlebar_close_button_focus = get_icon(themes_path.."default/titlebar/close_focus.png") + +theme.titlebar_minimize_button_normal = get_icon(themes_path.."default/titlebar/minimize_normal.png") +theme.titlebar_minimize_button_focus = get_icon(themes_path.."default/titlebar/minimize_focus.png") + +theme.titlebar_ontop_button_normal_inactive = get_icon(themes_path.."default/titlebar/ontop_normal_inactive.png") +theme.titlebar_ontop_button_focus_inactive = get_icon(themes_path.."default/titlebar/ontop_focus_inactive.png") +theme.titlebar_ontop_button_normal_active = get_icon(themes_path.."default/titlebar/ontop_normal_active.png") +theme.titlebar_ontop_button_focus_active = get_icon(themes_path.."default/titlebar/ontop_focus_active.png") + +theme.titlebar_sticky_button_normal_inactive = get_icon(themes_path.."default/titlebar/sticky_normal_inactive.png") +theme.titlebar_sticky_button_focus_inactive = get_icon(themes_path.."default/titlebar/sticky_focus_inactive.png") +theme.titlebar_sticky_button_normal_active = get_icon(themes_path.."default/titlebar/sticky_normal_active.png") +theme.titlebar_sticky_button_focus_active = get_icon(themes_path.."default/titlebar/sticky_focus_active.png") + +theme.titlebar_floating_button_normal_inactive = get_icon(themes_path.."default/titlebar/floating_normal_inactive.png") +theme.titlebar_floating_button_focus_inactive = get_icon(themes_path.."default/titlebar/floating_focus_inactive.png") +theme.titlebar_floating_button_normal_active = get_icon(themes_path.."default/titlebar/floating_normal_active.png") +theme.titlebar_floating_button_focus_active = get_icon(themes_path.."default/titlebar/floating_focus_active.png") + +theme.titlebar_maximized_button_normal_inactive = get_icon(themes_path.."default/titlebar/maximized_normal_inactive.png") +theme.titlebar_maximized_button_focus_inactive = get_icon(themes_path.."default/titlebar/maximized_focus_inactive.png") +theme.titlebar_maximized_button_normal_active = get_icon(themes_path.."default/titlebar/maximized_normal_active.png") +theme.titlebar_maximized_button_focus_active = get_icon(themes_path.."default/titlebar/maximized_focus_active.png") + +theme.wallpaper = get_icon(themes_path.."default/background.png") + +-- You can use your own layout icons like this: +theme.layout_fairh = get_icon(themes_path.."default/layouts/fairhw.png") +theme.layout_fairv = get_icon(themes_path.."default/layouts/fairvw.png") +theme.layout_floating = get_icon(themes_path.."default/layouts/floatingw.png") +theme.layout_magnifier = get_icon(themes_path.."default/layouts/magnifierw.png") +theme.layout_max = get_icon(themes_path.."default/layouts/maxw.png") +theme.layout_fullscreen = get_icon(themes_path.."default/layouts/fullscreenw.png") +theme.layout_tilebottom = get_icon(themes_path.."default/layouts/tilebottomw.png") +theme.layout_tileleft = get_icon(themes_path.."default/layouts/tileleftw.png") +theme.layout_tile = get_icon(themes_path.."default/layouts/tilew.png") +theme.layout_tiletop = get_icon(themes_path.."default/layouts/tiletopw.png") +theme.layout_spiral = get_icon(themes_path.."default/layouts/spiralw.png") +theme.layout_dwindle = get_icon(themes_path.."default/layouts/dwindlew.png") +theme.layout_cornernw = get_icon(themes_path.."default/layouts/cornernww.png") +theme.layout_cornerne = get_icon(themes_path.."default/layouts/cornernew.png") +theme.layout_cornersw = get_icon(themes_path.."default/layouts/cornersww.png") +theme.layout_cornerse = get_icon(themes_path.."default/layouts/cornersew.png") + +-- Generate Awesome icon: +theme.awesome_icon = theme_assets.awesome_icon( + theme.menu_height, theme.bg_focus, theme.fg_focus +) + +-- Define the icon theme for application icons. If not set then the icons +-- from /usr/share/icons and /usr/share/icons/hicolor will be used. +theme.icon_theme = "Tela-blue-dark" + +return theme diff --git a/.config/awesome/theme/init.lua b/.config/awesome/theme/init.lua index f5604e6..0e9ff89 100644 --- a/.config/awesome/theme/init.lua +++ b/.config/awesome/theme/init.lua @@ -3,20 +3,9 @@ local beautiful = require("beautiful") local awful = require("awful") local wibox = require("wibox") -beautiful.init(gears.filesystem.get_configuration_dir() .. "theme/default/theme.lua") -beautiful.font = "Ubuntu Sans 11" -beautiful.useless_gap = 7 -beautiful.gap_single_client = true - -local theme = "nordic_legion" -beautiful.wallpaper = "/home/nick/Pictures/wallpapers/" .. theme .. "/wallpaper.png" -local cutout = "/home/nick/Pictures/wallpapers/" .. theme .. "/cutout.png" - function set_wallpaper(s) - -- Wallpaper if beautiful.wallpaper then local wallpaper = beautiful.wallpaper - -- If wallpaper is a function, call it with the screen if type(wallpaper) == "function" then wallpaper = wallpaper(s) end @@ -24,6 +13,53 @@ function set_wallpaper(s) end end +local function set_transparency(t) + -- Percentage xx/100 + awful.spawn("sed -i 's/[0-9]*:class_g/" .. t .. ":class_g/g' /home/nick/.config/picom/picom.conf", false) + -- Integer 0.xx/1.00 + awful.spawn("sed -i 's/opacity: [0-9]*.[0-9]*/opacity: " .. t/100 .. "/g' /home/nick/.config/alacritty/alacritty.yml", false) + -- Binary xx/255 + awful.spawn("sed -i 's/\"glassit.alpha\": [0-9]*/\"glassit.alpha\": " .. math.floor((t/100)*255 + 0.5) .. "/g' /home/nick/.config/Code/User/settings.json", false) +end + +local theme = "abstract_office" + +-- Cleanup running theme applications +awful.spawn("pkill conky", false) + +-- Per-theme settings +if theme == "nordic_legion" then + beautiful.init(gears.filesystem.get_configuration_dir() .. "theme/nordic_legion/theme.lua") + beautiful.font = "Ubuntu Sans 11" + beautiful.useless_gap = 7 + beautiful.gap_single_client = true + + beautiful.wallpaper = "/home/nick/Pictures/wallpapers/nordic_legion/wallpaper.png" + + -- Launch Conky + awful.spawn.with_shell("killall conky; conky -c /home/nick/.config/conky/conky_left.conf &>/dev/null & disown; conky -c /home/nick/.config/conky/conky_right.conf &>/dev/null & disown", false) + + -- Configure Glava + awful.spawn("sed -i 's/#request mod .*/#request mod bars/g' /home/nick/.config/glava/rc.glsl", false) + awful.spawn("sed -i 's/#request setgeometry .*/#request setgeometry 0 0 2560 1600/g' /home/nick/.config/glava/rc.glsl", false) + +elseif theme == "abstract_office" then + beautiful.init(gears.filesystem.get_configuration_dir() .. "theme/abstract_office/theme.lua") + beautiful.wallpaper = "/home/nick/Pictures/wallpapers/abstract_office/Cage.jpg" + + -- Configure Glava + awful.spawn("sed -i 's/#request mod .*/#request mod bars/g' /home/nick/.config/glava/rc.glsl", false) + awful.spawn("sed -i 's/#request setgeometry .*/#request setgeometry 0 0 2560 1600/g' /home/nick/.config/glava/rc.glsl", false) + +end + +-- Update external configs +awful.spawn("sed -i 's/corner-radius = [0-9]*/corner-radius = " .. beautiful.corner_radius .. "/g' /home/nick/.config/picom/picom.conf", false) +set_transparency(beautiful.transparency) + +-- Restart Glava if it's running +awful.spawn.with_shell("if pgrep glava; then killall glava; glava --desktop &>/dev/null & disown; fi", false) + local bling = require("extras.bling") awful.layout.layouts = { @@ -36,28 +72,3 @@ awful.layout.layouts = { awful.layout.suit.corner.nw, awful.layout.suit.floating } - --- Wallpaper cutout -local imgbox = wibox({ - type = "desktop", - width = 2560, - height = 1600, - x = 0, - y = 0, - visible = true, - focusable = false, - opacity = 1, - bg = "#00000000", -}) -imgbox:setup{ - layout = wibox.layout.fixed.vertical, - { - widget = wibox.widget.imagebox, - image = cutout, - } -} - --- Launch conky if theme is nordic_legion -if theme == "nordic_legion" then - awful.spawn.with_shell("killall conky; conky -c /home/nick/.config/conky/conky_left.conf; conky -c /home/nick/.config/conky/conky_right.conf") -end \ No newline at end of file diff --git a/.config/awesome/theme/nordic_legion/theme.lua b/.config/awesome/theme/nordic_legion/theme.lua new file mode 100644 index 0000000..d5c452a --- /dev/null +++ b/.config/awesome/theme/nordic_legion/theme.lua @@ -0,0 +1,137 @@ +--------------------------- +-- Default awesome theme -- +--------------------------- + +local gears = require("gears") +local theme_assets = require("beautiful.theme_assets") +local xresources = require("beautiful.xresources") +local dpi = xresources.apply_dpi + +local gfs = require("gears.filesystem") +local themes_path = gfs.get_themes_dir() + +local theme = {} + +theme.font = "Sans Serif 11" +theme.icon_font = "Font Awesome 6 Free" +theme.icon_size = 11 + +theme.bg_normal = "#2e3440" +theme.bg_focus = "#535d6c" +theme.bg_urgent = "#ff0000" +theme.bg_minimize = "#444444" + +theme.tasklist_bg_normal = theme.bg_normal +theme.tasklist_bg_focus = "#4c566a" +theme.tasklist_bg_urgent = "#bf616a" +theme.tasklist_bg_minimize = "#5e81ac" + +theme.fg_normal = "#ffffff" +theme.fg_focus = "#ffffff" +theme.fg_urgent = "#ffffff" +theme.fg_minimize = "#ffffff" + +theme.useless_gap = dpi(7) +theme.gap_single_client = true + +theme.border_width = dpi(1) +theme.border_normal = "#000000" +theme.border_focus = "#535d6c" +theme.border_marked = "#91231c" +theme.corner_radius = dpi(10) + +theme.transparency = 95 + +-- taglist_[bg|fg]_[focus|urgent|occupied|empty|volatile] +-- tasklist_[bg|fg]_[focus|urgent] +-- titlebar_[bg|fg]_[normal|focus] +-- tooltip_[font|opacity|fg_color|bg_color|border_width|border_color] +-- mouse_finder_[color|timeout|animate_timeout|radius|factor] +-- prompt_[fg|bg|fg_cursor|bg_cursor|font] +-- hotkeys_[bg|fg|border_width|border_color|shape|opacity|modifiers_fg|label_bg|label_fg|group_margin|font|description_font] + +-- Generate taglist squares: +local taglist_square_size = dpi(4) +theme.taglist_squares_sel = theme_assets.taglist_squares_sel( + taglist_square_size, theme.fg_normal +) +theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel( + taglist_square_size, theme.fg_normal +) + +-- notification_font +-- notification_[bg|fg] +-- notification_[width|height|margin] +-- notification_[border_color|border_width|shape|opacity] + +theme.menu_height = dpi(15) +theme.menu_width = dpi(100) +-- menu_[bg|fg]_[normal|focus] +-- menu_[border_color|border_width] + +-- Image recoloring +local function get_icon(icon_raw) + if icon_raw ~= nil then + return gears.color.recolor_image(icon_raw, theme.fg_focus) + else + return nil + end +end + +-- Define the image to load +theme.titlebar_close_button_normal = get_icon(themes_path.."default/titlebar/close_normal.png") +theme.titlebar_close_button_focus = get_icon(themes_path.."default/titlebar/close_focus.png") + +theme.titlebar_minimize_button_normal = get_icon(themes_path.."default/titlebar/minimize_normal.png") +theme.titlebar_minimize_button_focus = get_icon(themes_path.."default/titlebar/minimize_focus.png") + +theme.titlebar_ontop_button_normal_inactive = get_icon(themes_path.."default/titlebar/ontop_normal_inactive.png") +theme.titlebar_ontop_button_focus_inactive = get_icon(themes_path.."default/titlebar/ontop_focus_inactive.png") +theme.titlebar_ontop_button_normal_active = get_icon(themes_path.."default/titlebar/ontop_normal_active.png") +theme.titlebar_ontop_button_focus_active = get_icon(themes_path.."default/titlebar/ontop_focus_active.png") + +theme.titlebar_sticky_button_normal_inactive = get_icon(themes_path.."default/titlebar/sticky_normal_inactive.png") +theme.titlebar_sticky_button_focus_inactive = get_icon(themes_path.."default/titlebar/sticky_focus_inactive.png") +theme.titlebar_sticky_button_normal_active = get_icon(themes_path.."default/titlebar/sticky_normal_active.png") +theme.titlebar_sticky_button_focus_active = get_icon(themes_path.."default/titlebar/sticky_focus_active.png") + +theme.titlebar_floating_button_normal_inactive = get_icon(themes_path.."default/titlebar/floating_normal_inactive.png") +theme.titlebar_floating_button_focus_inactive = get_icon(themes_path.."default/titlebar/floating_focus_inactive.png") +theme.titlebar_floating_button_normal_active = get_icon(themes_path.."default/titlebar/floating_normal_active.png") +theme.titlebar_floating_button_focus_active = get_icon(themes_path.."default/titlebar/floating_focus_active.png") + +theme.titlebar_maximized_button_normal_inactive = get_icon(themes_path.."default/titlebar/maximized_normal_inactive.png") +theme.titlebar_maximized_button_focus_inactive = get_icon(themes_path.."default/titlebar/maximized_focus_inactive.png") +theme.titlebar_maximized_button_normal_active = get_icon(themes_path.."default/titlebar/maximized_normal_active.png") +theme.titlebar_maximized_button_focus_active = get_icon(themes_path.."default/titlebar/maximized_focus_active.png") + +theme.wallpaper = get_icon(themes_path.."default/background.png") + +-- You can use your own layout icons like this: +theme.layout_fairh = get_icon(themes_path.."default/layouts/fairhw.png") +theme.layout_fairv = get_icon(themes_path.."default/layouts/fairvw.png") +theme.layout_floating = get_icon(themes_path.."default/layouts/floatingw.png") +theme.layout_magnifier = get_icon(themes_path.."default/layouts/magnifierw.png") +theme.layout_max = get_icon(themes_path.."default/layouts/maxw.png") +theme.layout_fullscreen = get_icon(themes_path.."default/layouts/fullscreenw.png") +theme.layout_tilebottom = get_icon(themes_path.."default/layouts/tilebottomw.png") +theme.layout_tileleft = get_icon(themes_path.."default/layouts/tileleftw.png") +theme.layout_tile = get_icon(themes_path.."default/layouts/tilew.png") +theme.layout_tiletop = get_icon(themes_path.."default/layouts/tiletopw.png") +theme.layout_spiral = get_icon(themes_path.."default/layouts/spiralw.png") +theme.layout_dwindle = get_icon(themes_path.."default/layouts/dwindlew.png") +theme.layout_cornernw = get_icon(themes_path.."default/layouts/cornernww.png") +theme.layout_cornerne = get_icon(themes_path.."default/layouts/cornernew.png") +theme.layout_cornersw = get_icon(themes_path.."default/layouts/cornersww.png") +theme.layout_cornerse = get_icon(themes_path.."default/layouts/cornersew.png") + +-- Generate Awesome icon: +theme.awesome_icon = theme_assets.awesome_icon( + theme.menu_height, theme.bg_focus, theme.fg_focus +) + +-- Define the icon theme for application icons. If not set then the icons +-- from /usr/share/icons and /usr/share/icons/hicolor will be used. +theme.icon_theme = "Tela-blue-dark" + +return theme diff --git a/.config/picom/picom.conf b/.config/picom/picom.conf index ca88b74..4358101 100644 --- a/.config/picom/picom.conf +++ b/.config/picom/picom.conf @@ -4,7 +4,7 @@ glx-no-stencil = true; glx-no-rebind-pixmap = true; unredir-if-possible = true; -corner-radius = 9; +corner-radius = 10; rounded-corners-exclude = [ "window_type = 'dock'", "window_type = 'desktop'" @@ -37,10 +37,11 @@ blur-background-exclude = [ ]; blur-kern = "3x3box"; blur-method = "dual_kawase"; -blur-strength = 5; +blur-strength = 10; opacity-rule = [ - "95:class_g = 'thunar'", - "95:class_g = 'Thunar'", + "85:class_g = 'thunar'", + "85:class_g = 'Thunar'", + "70:name = 'GLava'", ]; fading = true; diff --git a/.zshrc b/.zshrc index 1a83a0a..78c9a1a 100644 --- a/.zshrc +++ b/.zshrc @@ -113,6 +113,7 @@ alias fetch='neofetch' alias tor='sudo /usr/bin/tor' alias ssh='TERM=xterm-256color ssh' alias proton-call-ge='proton-call -c /usr/share/steam/compatibilitytools.d/proton-ge-custom -r' +alias sync-timezone='timedatectl set-timezone "$(curl --fail https://ipapi.co/timezone)" && timedatectl' # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh diff --git a/wallpapers/abstract_office/Abstract Data.jpg b/wallpapers/abstract_office/Abstract Data.jpg new file mode 100644 index 0000000..e14e6f5 --- /dev/null +++ b/wallpapers/abstract_office/Abstract Data.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddd2e53a610a89fa9078daa7e43879f7ab473ef59c7b3c779cdd4b6f685a40a8 +size 252373 diff --git a/wallpapers/abstract_office/Abstract Office 2.jpg b/wallpapers/abstract_office/Abstract Office 2.jpg new file mode 100644 index 0000000..5707492 --- /dev/null +++ b/wallpapers/abstract_office/Abstract Office 2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:402157dc3222ffc0f28dd31d39c7ec03ac4ea34aee137dd936b733b90e1338cd +size 1408160 diff --git a/wallpapers/abstract_office/Abstract Office 3.jpg b/wallpapers/abstract_office/Abstract Office 3.jpg new file mode 100644 index 0000000..e8255a1 --- /dev/null +++ b/wallpapers/abstract_office/Abstract Office 3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57a210c69f2dc2d803d4931c8bc519bdfabbcf8d1c42579bd1a7a632802fd0df +size 701457 diff --git a/wallpapers/abstract_office/Abstract Office.jpg b/wallpapers/abstract_office/Abstract Office.jpg new file mode 100644 index 0000000..e50c809 --- /dev/null +++ b/wallpapers/abstract_office/Abstract Office.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88f87b3441b793dca6b68f911da7afbfafb18bb72a8f4d59653348e4bb6712fa +size 719426 diff --git a/wallpapers/abstract_office/Blocks.jpg b/wallpapers/abstract_office/Blocks.jpg new file mode 100644 index 0000000..fe1b171 --- /dev/null +++ b/wallpapers/abstract_office/Blocks.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93089224acec5788fb8742ed27a80294fad1fe106f8d6570a95abbeb35b432e6 +size 279399 diff --git a/wallpapers/abstract_office/Blue Data.jpg b/wallpapers/abstract_office/Blue Data.jpg new file mode 100644 index 0000000..5287e56 --- /dev/null +++ b/wallpapers/abstract_office/Blue Data.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf05f6cdfe14757e8fb3367f51ee8bf1a0130b8b606391674c48d725002151a0 +size 100183 diff --git a/wallpapers/abstract_office/Blue Light.jpg b/wallpapers/abstract_office/Blue Light.jpg new file mode 100644 index 0000000..8cf4d72 --- /dev/null +++ b/wallpapers/abstract_office/Blue Light.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b639e25424fc28b1b9dbe909941b6b267370fc2efad549f13ed3b52b69552cea +size 71665 diff --git a/wallpapers/abstract_office/Blush.jpg b/wallpapers/abstract_office/Blush.jpg new file mode 100644 index 0000000..c96f97e --- /dev/null +++ b/wallpapers/abstract_office/Blush.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fcb0822a1d68ffdfb8c594b3ff608af1bad31103fa2d6ae85e9d29ce2009047 +size 211526 diff --git a/wallpapers/abstract_office/Byte Lights.jpg b/wallpapers/abstract_office/Byte Lights.jpg new file mode 100644 index 0000000..3f1f4a8 --- /dev/null +++ b/wallpapers/abstract_office/Byte Lights.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35664bbe0cbd3b5e82efcc8c261a298859b9e64d45e8946dd319e14e3829e8f3 +size 257213 diff --git a/wallpapers/abstract_office/Cage.jpg b/wallpapers/abstract_office/Cage.jpg new file mode 100644 index 0000000..4f55f3d --- /dev/null +++ b/wallpapers/abstract_office/Cage.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:966a3f431b3ccc67acaed722e4972c2632577f48c2ce3e3571a2427e3749cbe3 +size 492735 diff --git a/wallpapers/abstract_office/Curves.jpg b/wallpapers/abstract_office/Curves.jpg new file mode 100644 index 0000000..fb0f167 --- /dev/null +++ b/wallpapers/abstract_office/Curves.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c384b39b405660c7dcb331f3b37c6fa66139d2cc3fcf48616efcf3cad8ab6dbb +size 229261 diff --git a/wallpapers/abstract_office/Data Link.jpg b/wallpapers/abstract_office/Data Link.jpg new file mode 100644 index 0000000..6cbcb7d --- /dev/null +++ b/wallpapers/abstract_office/Data Link.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0dfca6f13c666e49a17e06d5f3e1257ffdfd265b5bc13e106f4a2dc69d7bdee +size 57977 diff --git a/wallpapers/abstract_office/Data Packets.jpg b/wallpapers/abstract_office/Data Packets.jpg new file mode 100644 index 0000000..1f2c626 --- /dev/null +++ b/wallpapers/abstract_office/Data Packets.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79f47af422d642e7aa1c4591611b459d4c7ec0a6ffa8f81895e339307576740b +size 93196 diff --git a/wallpapers/abstract_office/Data Stream.jpg b/wallpapers/abstract_office/Data Stream.jpg new file mode 100644 index 0000000..1813d65 --- /dev/null +++ b/wallpapers/abstract_office/Data Stream.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15571ec7e367e208c2aacee7f903b117a7c350e0d67adf6aecbdab19f08eb599 +size 189363 diff --git a/wallpapers/abstract_office/Depth.jpg b/wallpapers/abstract_office/Depth.jpg new file mode 100644 index 0000000..5453645 --- /dev/null +++ b/wallpapers/abstract_office/Depth.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8623bfbed28e1ffcbac52d126c015c9cdf4215d1b43b9a61ff4747ec0e66f92 +size 95616 diff --git a/wallpapers/abstract_office/Fire Spiral.jpg b/wallpapers/abstract_office/Fire Spiral.jpg new file mode 100644 index 0000000..b334e83 --- /dev/null +++ b/wallpapers/abstract_office/Fire Spiral.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:918a3114bb2aeeb0fba62f7238782840cda8184c460cc869870665e19eea1e9b +size 349720 diff --git a/wallpapers/abstract_office/Fluent Minecraft 2.jpg b/wallpapers/abstract_office/Fluent Minecraft 2.jpg new file mode 100644 index 0000000..cadecb0 --- /dev/null +++ b/wallpapers/abstract_office/Fluent Minecraft 2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a764d8fb7bf872ba9d1173786095704a0d36adf40eca104531ea0b8959306a34 +size 271755 diff --git a/wallpapers/abstract_office/Fluent Minecraft.jpg b/wallpapers/abstract_office/Fluent Minecraft.jpg new file mode 100644 index 0000000..487c248 --- /dev/null +++ b/wallpapers/abstract_office/Fluent Minecraft.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de003cba49045025e5f42cf6ca944e445a37e78ca1ac6244f5748619aa9d2c2f +size 284113 diff --git a/wallpapers/abstract_office/Interior Design.jpg b/wallpapers/abstract_office/Interior Design.jpg new file mode 100644 index 0000000..98f6ced --- /dev/null +++ b/wallpapers/abstract_office/Interior Design.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bc638a96abdb37718b265a4e69286ccc3286c4584addac5ca0d8abe01ec36af +size 140005 diff --git a/wallpapers/abstract_office/Internet of Things.jpg b/wallpapers/abstract_office/Internet of Things.jpg new file mode 100644 index 0000000..0479f96 --- /dev/null +++ b/wallpapers/abstract_office/Internet of Things.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b22ca2cf45c094a7834be617f1c1c01d773f45c9b8210916cc9ebcc965354038 +size 252063 diff --git a/wallpapers/abstract_office/Layers.jpg b/wallpapers/abstract_office/Layers.jpg new file mode 100644 index 0000000..5346e36 --- /dev/null +++ b/wallpapers/abstract_office/Layers.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:227c664f48f76df868e1d639fcdaaa4e558dce5612fa365ab1c4f1dabeb07f91 +size 378545 diff --git a/wallpapers/abstract_office/Light.jpg b/wallpapers/abstract_office/Light.jpg new file mode 100644 index 0000000..0f150ce --- /dev/null +++ b/wallpapers/abstract_office/Light.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b83b89f5a8009e4e498ebf21c540c14122441011484280e15a28fb4146d018ae +size 193369 diff --git a/wallpapers/abstract_office/Macro.jpg b/wallpapers/abstract_office/Macro.jpg new file mode 100644 index 0000000..129203f --- /dev/null +++ b/wallpapers/abstract_office/Macro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:548092947ee45e2b9a71e5c2abb0a1da2d206aaebffc761792072e3135c69545 +size 271293 diff --git a/wallpapers/abstract_office/Modern Art.jpg b/wallpapers/abstract_office/Modern Art.jpg new file mode 100644 index 0000000..bd9b993 --- /dev/null +++ b/wallpapers/abstract_office/Modern Art.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21e706c949a9cfef83f39eb05e9bc04a6e1300155fe54708cbc95a38fb5c34b0 +size 22889 diff --git a/wallpapers/abstract_office/Night.jpg b/wallpapers/abstract_office/Night.jpg new file mode 100644 index 0000000..bc0f244 --- /dev/null +++ b/wallpapers/abstract_office/Night.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6f2568bfedfd35f2aa4b662f7c9e65626daf71c826727a64e1aeaf67ef25493 +size 25462 diff --git a/wallpapers/abstract_office/Office Blocks.jpg b/wallpapers/abstract_office/Office Blocks.jpg new file mode 100644 index 0000000..3261b2d --- /dev/null +++ b/wallpapers/abstract_office/Office Blocks.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f1f445fd11374ae21dc28f13de8899f82c14beb75cf27d41aef2a855fc2277a +size 581475 diff --git a/wallpapers/abstract_office/Orange Square.jpg b/wallpapers/abstract_office/Orange Square.jpg new file mode 100644 index 0000000..a9c2000 --- /dev/null +++ b/wallpapers/abstract_office/Orange Square.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8f78586f9ee7cc7c0da729f37142c5aee7f8580106b371a7c7d388022d3cf66 +size 263534 diff --git a/wallpapers/abstract_office/Panes.jpg b/wallpapers/abstract_office/Panes.jpg new file mode 100644 index 0000000..a5aa6b3 --- /dev/null +++ b/wallpapers/abstract_office/Panes.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e06885e78c33c2abad207df0541d6b970e92678324eb6a72f1d7203ef7a797ce +size 84323 diff --git a/wallpapers/abstract_office/Paper Planes.jpg b/wallpapers/abstract_office/Paper Planes.jpg new file mode 100644 index 0000000..aad764a --- /dev/null +++ b/wallpapers/abstract_office/Paper Planes.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d34e51ea264c324e1f729df47d1095aefb48bd5956540ff17e6fc85b6a88c66 +size 180124 diff --git a/wallpapers/abstract_office/Peak.jpg b/wallpapers/abstract_office/Peak.jpg new file mode 100644 index 0000000..cf42610 --- /dev/null +++ b/wallpapers/abstract_office/Peak.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:308ea3d4de1910bd6ba109d4f596c6cb07394c9f0fb46baf1e0e342367e3d52e +size 271245 diff --git a/wallpapers/abstract_office/Pile.jpg b/wallpapers/abstract_office/Pile.jpg new file mode 100644 index 0000000..be7db8c --- /dev/null +++ b/wallpapers/abstract_office/Pile.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:809d322cf86f073842760e47df01056b72ac6108ef2535bcdfeae1858850ff43 +size 137576 diff --git a/wallpapers/abstract_office/Pink.jpg b/wallpapers/abstract_office/Pink.jpg new file mode 100644 index 0000000..8fcabbf --- /dev/null +++ b/wallpapers/abstract_office/Pink.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60dfe7ff8c63eebe851e6343cb76005625246d69dd30a3fb82d2c970cf383835 +size 87684 diff --git a/wallpapers/abstract_office/Purple.jpg b/wallpapers/abstract_office/Purple.jpg new file mode 100644 index 0000000..fe93c51 --- /dev/null +++ b/wallpapers/abstract_office/Purple.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44067760591fbbf6b49b363560b21231a611e2fc181263e40e7dae9f8431cdda +size 39444 diff --git a/wallpapers/abstract_office/Sheet.jpg b/wallpapers/abstract_office/Sheet.jpg new file mode 100644 index 0000000..47514bb --- /dev/null +++ b/wallpapers/abstract_office/Sheet.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:037f3c1a813284694759b0edbf2d07ed882f4c2e65ed28d49f93fff5b2c92545 +size 87720 diff --git a/wallpapers/abstract_office/Shell.jpg b/wallpapers/abstract_office/Shell.jpg new file mode 100644 index 0000000..bc22c24 --- /dev/null +++ b/wallpapers/abstract_office/Shell.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4739406b1571b0492432d9ce6039bb3dc3c334d9d3c7751478b02f389b56c239 +size 64421 diff --git a/wallpapers/abstract_office/Spectre.jpg b/wallpapers/abstract_office/Spectre.jpg new file mode 100644 index 0000000..22bbfa5 --- /dev/null +++ b/wallpapers/abstract_office/Spectre.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea4c58df273741a69c67eb91909e41e034741af67a0b391635f306baa4219946 +size 55771 diff --git a/wallpapers/abstract_office/Spiral.jpg b/wallpapers/abstract_office/Spiral.jpg new file mode 100644 index 0000000..665bd30 --- /dev/null +++ b/wallpapers/abstract_office/Spiral.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff613ef9c64398ac20b1f2ae89e132a05d2373e81bdece03aa11a3f442af74c5 +size 582612 diff --git a/wallpapers/abstract_office/Spotlight.jpg b/wallpapers/abstract_office/Spotlight.jpg new file mode 100644 index 0000000..ee1fe9d --- /dev/null +++ b/wallpapers/abstract_office/Spotlight.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d64b589b6950a23266a5a589edb2a155c3c2c45c64d2a20646ed475021528f70 +size 498485 diff --git a/wallpapers/abstract_office/Square.jpg b/wallpapers/abstract_office/Square.jpg new file mode 100644 index 0000000..5706e3f --- /dev/null +++ b/wallpapers/abstract_office/Square.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29bbe5e5bcecf217c69f54365fdcdbc6f05638b3f10f5c989130a8316df4adc2 +size 269262 diff --git a/wallpapers/abstract_office/Steps.jpg b/wallpapers/abstract_office/Steps.jpg new file mode 100644 index 0000000..361a216 --- /dev/null +++ b/wallpapers/abstract_office/Steps.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f94809bc020985233d566a1731a4de12f97555da5a1654b8edf19eeeab6194d +size 133880 diff --git a/wallpapers/abstract_office/The Grid.jpg b/wallpapers/abstract_office/The Grid.jpg new file mode 100644 index 0000000..5066760 --- /dev/null +++ b/wallpapers/abstract_office/The Grid.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9b515db5814fb24f0b81232c3253466fe9245af2516ce76115cbd55d387f3bb +size 245120 diff --git a/wallpapers/abstract_office/The Internet.jpg b/wallpapers/abstract_office/The Internet.jpg new file mode 100644 index 0000000..fc30577 --- /dev/null +++ b/wallpapers/abstract_office/The Internet.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa83955c04277f1eef8cd7fe4bf85572b42fa33bb8d53ae51dfbbde0578dcfd0 +size 257279 diff --git a/wallpapers/abstract_office/Tricolour.jpg b/wallpapers/abstract_office/Tricolour.jpg new file mode 100644 index 0000000..aee16a2 --- /dev/null +++ b/wallpapers/abstract_office/Tricolour.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54398f5b2bba675d2c62f5b732eb9c5bb26b44a0eaa0cb949d5b835ea432dc7e +size 252754 diff --git a/wallpapers/abstract_office/Trinity.jpg b/wallpapers/abstract_office/Trinity.jpg new file mode 100644 index 0000000..98ceea6 --- /dev/null +++ b/wallpapers/abstract_office/Trinity.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11f9bac62797893b3cac2a1f5d9e9c9cc689583d465a4a53437a18fad2651f9d +size 232523 diff --git a/wallpapers/abstract_office/Trio.jpg b/wallpapers/abstract_office/Trio.jpg new file mode 100644 index 0000000..f6e27cf --- /dev/null +++ b/wallpapers/abstract_office/Trio.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5f5fd35040731e6cd0f93ffee7414ac0ff8d40a56157c8cb46d35fdf9ce9d02 +size 153497 diff --git a/wallpapers/abstract_office/Uplink.jpg b/wallpapers/abstract_office/Uplink.jpg new file mode 100644 index 0000000..36d28d2 --- /dev/null +++ b/wallpapers/abstract_office/Uplink.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e19425295b9d1d0dde6f95f3816ce338778326b80a150998ef4234aa5d5280f +size 109287 diff --git a/wallpapers/abstract_office/Veil.jpg b/wallpapers/abstract_office/Veil.jpg new file mode 100644 index 0000000..e0babcb --- /dev/null +++ b/wallpapers/abstract_office/Veil.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c298975069ace50303f371214af2bca897b1d17e0dc3af293a9b7d8f7021bda +size 70909 diff --git a/wallpapers/astronaut/cutout.png b/wallpapers/astronaut/cutout.png old mode 100755 new mode 100644 diff --git a/wallpapers/astronaut/wallpaper.jpg b/wallpapers/astronaut/wallpaper.jpg old mode 100755 new mode 100644 diff --git a/wallpapers/astronaut/wallpaper.png b/wallpapers/astronaut/wallpaper.png old mode 100755 new mode 100644 diff --git a/wallpapers/lock_screen_1.jpg b/wallpapers/lock_screen_1.jpg old mode 100755 new mode 100644 diff --git a/wallpapers/nordic_firewatch/cutout.png b/wallpapers/nordic_firewatch/cutout.png deleted file mode 100755 index bb914aa..0000000 --- a/wallpapers/nordic_firewatch/cutout.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f022ee38e790ae495bc07659cbacd58cd1ae2163403eeeb5cae0cd001c614892 -size 193274 diff --git a/wallpapers/nordic_firewatch/wallpaper.png b/wallpapers/nordic_firewatch/wallpaper.png deleted file mode 100755 index a8c4c1f..0000000 --- a/wallpapers/nordic_firewatch/wallpaper.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:10598031eb1db1365c1026ba7f606425764a1fd7fbcb9306482e7c2fa1381270 -size 475134 diff --git a/wallpapers/nordic_legion/cutout.png b/wallpapers/nordic_legion/cutout.png old mode 100755 new mode 100644 diff --git a/wallpapers/nordic_legion/wallpaper.png b/wallpapers/nordic_legion/wallpaper.png old mode 100755 new mode 100644 diff --git a/wallpapers/nordic_moon/cutout.png b/wallpapers/nordic_moon/cutout.png deleted file mode 100755 index e989e3c..0000000 --- a/wallpapers/nordic_moon/cutout.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:20bd71d564bc59d17e51563ab63d5cf6aeb87e33c3315913e333c20dd6bd63ff -size 987413 diff --git a/wallpapers/nordic_moon/wallpaper.png b/wallpapers/nordic_moon/wallpaper.png deleted file mode 100755 index f17d2fe..0000000 --- a/wallpapers/nordic_moon/wallpaper.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b1723db3423575520b65e18a29733a2682259d8e51b5d3a43d1a6494600bf915 -size 972080 diff --git a/wallpapers/nordic_wolf/lock_screen.jpg b/wallpapers/nordic_wolf/lock_screen.jpg deleted file mode 100755 index fcdf099..0000000 --- a/wallpapers/nordic_wolf/lock_screen.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ec56ea3acb28b90fd010f8402512b211b2fd602ee4cf7c92641b62e927648a6b -size 260117 diff --git a/wallpapers/nordic_wolf/lock_screen.png b/wallpapers/nordic_wolf/lock_screen.png deleted file mode 100755 index 3142686..0000000 --- a/wallpapers/nordic_wolf/lock_screen.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0456ff7b538235bd26041a5bbb05f1d3ddc5fc92bb02e85d3bc5c0ac58b1fdf5 -size 298287