From a86f5af2fb1be881ccee03d378ceaa1920130671 Mon Sep 17 00:00:00 2001 From: vincent Date: Wed, 7 Nov 2018 23:15:54 +0100 Subject: [PATCH] modif awesome --- awesome/.config/awesome/rc.lua | 81 ++++++++++++++++- awesome/.config/awesome/xrandr.lua | 135 +++++++++++++++++++++++++++++ 2 files changed, 214 insertions(+), 2 deletions(-) create mode 100644 awesome/.config/awesome/xrandr.lua diff --git a/awesome/.config/awesome/rc.lua b/awesome/.config/awesome/rc.lua index 4db162f..35a8eab 100644 --- a/awesome/.config/awesome/rc.lua +++ b/awesome/.config/awesome/rc.lua @@ -6,6 +6,7 @@ require("awful.autofocus") local wibox = require("wibox") -- Theme handling library local lain = require("lain") +local markup = lain.util.markup local beautiful = require("beautiful") --import xrandr library local xrandr = require("xrandr") @@ -47,7 +48,11 @@ end beautiful.init(awful.util.getdir("config") .. "/themes/default/theme.lua") beautiful.useless_gap = 5 -- This is used later as the default terminal and editor to run. -terminal = "termite" + +local terminal = "termite" + +awful.util.terminal = terminal + editor = os.getenv("EDITOR") or "vim" editor_cmd = terminal .. " -e " .. editor @@ -122,6 +127,65 @@ mykeyboardlayout = awful.widget.keyboardlayout() -- Create a textclock widget mytextclock = wibox.widget.textclock() +local cpu = lain.widget.cpu({ + settings = function() + widget:set_markup(markup.fontfg(beautiful.font, "#e33a6e", cpu_now.usage .. "% ")) + end +}) + +-- Net +local netdownicon = wibox.widget.imagebox(beautiful.widget_netdown) +local netdowninfo = wibox.widget.textbox() +local netupicon = wibox.widget.imagebox(beautiful.widget_netup) +local netupinfo = lain.widget.net({ + settings = function() + + widget:set_markup(markup.fontfg(beautiful.font, "#e54c62", net_now.sent .. " ")) + netdowninfo:set_markup(markup.fontfg(beautiful.font, "#87af5f", net_now.received .. " ")) + end +}) + +local mpdicon = wibox.widget.imagebox() +local mpd = lain.widget.mpd({ + settings = function() + mpd_notification_preset = { + text = string.format("%s [%s] - %s\n%s", mpd_now.artist, + mpd_now.album, mpd_now.date, mpd_now.title) + } + + if mpd_now.state == "play" then + artist = mpd_now.artist .. " > " + title = mpd_now.title .. " " + mpdicon:set_image(beautiful.widget_note_on) + elseif mpd_now.state == "pause" then + artist = "mpd " + title = "paused " + else + artist = "" + title = "" + --mpdicon:set_image() -- not working in 4.0 + mpdicon._private.image = nil + mpdicon:emit_signal("widget::redraw_needed") + mpdicon:emit_signal("widget::layout_changed") + end + widget:set_markup(markup.fontfg(beautiful.font, "#e54c62", artist) .. markup.fontfg(beautiful.font, "#b2b2b2", title)) + end +}) + +local baticon = wibox.widget.imagebox(beautiful +.widget_batt) +local bat = lain.widget.bat({ + settings = function() + local perc = bat_now.perc ~= "N/A" and bat_now.perc .. "%" or bat_now.perc + + if bat_now.ac_status == 1 then + perc = perc .. " plug" + end + + widget:set_markup(markup.fontfg(beautiful.font, beautiful.fg_normal, perc .. " ")) + end +}) + -- Create a wibox for each screen and add it local taglist_buttons = gears.table.join( awful.button({ }, 1, function(t) t:view_only() end), @@ -157,10 +221,12 @@ end screen.connect_signal("property::geometry", set_wallpaper) awful.screen.connect_for_each_screen(function(s) + s.quake = lain.util.quake({ app = awful.util.terminal , + argname = "-name %s"}) -- Wallpaper set_wallpaper(s) - -- Each screen has its own tag table. + -- Each screen has its own tag taawful.util.terminable. awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[2]) @@ -188,10 +254,18 @@ awful.screen.connect_for_each_screen(function(s) mylauncher, s.mytaglist, s.mypromptbox, + mpdicon, + mpd.widget }, nil -- Middle widget ,{ -- Right widgets layout = wibox.layout.fixed.horizontal, + netdownicon, + netdowninfo, + netupicon, + netupinfo.widget, + cpuicon, + cpu , mykeyboardlayout, wibox.widget.systray(), mytextclock, @@ -258,6 +332,9 @@ globalkeys = gears.table.join( {description = "go back", group = "client"}), -- Standard program + -- Dropdown application + awful.key({ modkey, }, "z", function () awful.screen.focused().quake:toggle() end, + {description = "dropdown application", group = "launcher"}), awful.key({ modkey, }, "Return", function () awful.spawn(terminal) end, {description = "open a terminal", group = "launcher"}), awful.key({ modkey, "Control" }, "r", awesome.restart, diff --git a/awesome/.config/awesome/xrandr.lua b/awesome/.config/awesome/xrandr.lua new file mode 100644 index 0000000..bd90c19 --- /dev/null +++ b/awesome/.config/awesome/xrandr.lua @@ -0,0 +1,135 @@ +--- Separating Multiple Monitor functions as a separeted module (taken from awesome wiki) + +local awful = require("awful") +local naughty = require("naughty") + +-- A path to a fancy icon +local icon_path = "" + +-- Get active outputs +local function outputs() + local outputs = {} + local xrandr = io.popen("xrandr -q --current") + + if xrandr then + for line in xrandr:lines() do + local output = line:match("^([%w-]+) connected ") + if output then + outputs[#outputs + 1] = output + end + end + xrandr:close() + end + + return outputs +end + +local function arrange(out) + -- We need to enumerate all permutations of horizontal outputs. + + local choices = {} + local previous = { {} } + for i = 1, #out do + -- Find all permutation of length `i`: we take the permutation + -- of length `i-1` and for each of them, we create new + -- permutations by adding each output at the end of it if it is + -- not already present. + local new = {} + for _, p in pairs(previous) do + for _, o in pairs(out) do + if not awful.util.table.hasitem(p, o) then + new[#new + 1] = awful.util.table.join(p, {o}) + end + end + end + choices = awful.util.table.join(choices, new) + previous = new + end + + return choices +end + +-- Build available choices +local function menu() + local menu = {} + local out = outputs() + local choices = arrange(out) + + for _, choice in pairs(choices) do + local cmd = "xrandr" + -- Enabled outputs + for i, o in pairs(choice) do + cmd = cmd .. " --output " .. o .. " --auto" + if i > 1 then + cmd = cmd .. " --right-of " .. choice[i-1] + end + end + -- Disabled outputs + for _, o in pairs(out) do + if not awful.util.table.hasitem(choice, o) then + cmd = cmd .. " --output " .. o .. " --off" + end + end + + local label = "" + if #choice == 1 then + label = 'Only ' .. choice[1] .. '' + else + for i, o in pairs(choice) do + if i > 1 then label = label .. " + " end + label = label .. '' .. o .. '' + end + end + + menu[#menu + 1] = { label, cmd } + end + + return menu +end + +-- Display xrandr notifications from choices +local state = { cid = nil } + +local function naughty_destroy_callback(reason) + if reason == naughty.notificationClosedReason.expired or + reason == naughty.notificationClosedReason.dismissedByUser then + local action = state.index and state.menu[state.index - 1][2] + if action then + awful.util.spawn(action, false) + state.index = nil + end + end +end + +local function xrandr() + -- Build the list of choices + if not state.index then + state.menu = menu() + state.index = 1 + end + + -- Select one and display the appropriate notification + local label, action + local next = state.menu[state.index] + state.index = state.index + 1 + + if not next then + label = "Keep the current configuration" + state.index = nil + else + label, action = unpack(next) + end + state.cid = naughty.notify({ text = label, + icon = icon_path, + timeout = 4, + screen = mouse.screen, + replaces_id = state.cid, + destroy = naughty_destroy_callback}).id +end + +return { + outputs = outputs, + arrange = arrange, + menu = menu, + xrandr = xrandr +}