awesome: idk

This commit is contained in:
2024-07-27 15:55:13 +03:00
parent edc05887fb
commit 198811bbef
3 changed files with 574 additions and 29 deletions

422
.config/awesome/old/rc.lua Normal file
View File

@ -0,0 +1,422 @@
pcall(require, "luarocks.loader")
local gears = require("gears")
local awful = require("awful")
require("awful.autofocus")
local wibox = require("wibox")
local beautiful = require("beautiful")
local naughty = require("naughty")
local menubar = require("menubar")
require("awful.hotkeys_popup.keys")
-- {{{ Error handling
-- Check if awesome encountered an error during startup and fell back to
-- another config (This code will only ever execute for the fallback config)
if awesome.startup_errors then
naughty.notify({
preset = naughty.config.presets.critical,
title = "Oops, there were errors during startup!",
text = awesome.startup_errors,
})
end
-- Handle runtime errors after startup
do
local in_error = false
awesome.connect_signal("debug::error", function(err)
-- Make sure we don't go into an endless error loop
if in_error then
return
end
in_error = true
naughty.notify({
preset = naughty.config.presets.critical,
title = "Oops, an error happened!",
text = tostring(err),
})
in_error = false
end)
end
-- }}}
-- {{{ Variable definitions
-- Themes define colours, icons, font and wallpapers.
beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua")
-- This is used later as the default terminal and editor to run.
terminal = "kitty"
browser = "firefox"
calc = "rofi -show calc"
file_manager = "thunar"
launcher = "rofi -show run"
music_player = terminal .. " -e ncmpcpp"
screen_locker = "i3lock -c 000000"
mod = "Mod4"
awful.layout.layouts = {
-- awful.layout.suit.floating,
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
awful.layout.suit.fair,
awful.layout.suit.fair.horizontal,
awful.layout.suit.spiral,
awful.layout.suit.spiral.dwindle,
awful.layout.suit.max,
awful.layout.suit.max.fullscreen,
awful.layout.suit.magnifier,
awful.layout.suit.corner.nw,
-- awful.layout.suit.corner.ne,
-- awful.layout.suit.corner.sw,
-- awful.layout.suit.corner.se,
}
local tag_names = { "a", "s", "d", "f", "g", "z", "x", "c", "v", "b" }
-- Widgets
local mydate = wibox.widget.textclock("%H:%M")
mydate.font = "mononoki 12"
awful.screen.connect_for_each_screen(function(s)
-- Each screen has its own tag table.
awful.tag(tag_names, s, awful.layout.layouts[1])
-- Create a promptbox for each screen
s.mypromptbox = awful.widget.prompt()
-- Create an imagebox widget which will contain an icon indicating which layout we're using.
-- We need one layoutbox per screen.
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 taglist widget
s.mytaglist = awful.widget.taglist({
screen = s,
filter = awful.widget.taglist.filter.all,
buttons = taglist_buttons,
})
-- Create a tasklist widget
s.mytasklist = awful.widget.tasklist({
screen = s,
filter = awful.widget.tasklist.filter.currenttags,
buttons = tasklist_buttons,
})
-- Create the wibox
s.mywibox = awful.wibar({
position = "top",
screen = s,
height = 29,
})
-- Add widgets to the wibox
s.mywibox:setup({
layout = wibox.layout.align.horizontal,
{ -- Left widgets
layout = wibox.layout.fixed.horizontal,
mylauncher,
s.mytaglist,
s.mypromptbox,
},
s.mytasklist, -- Middle widget
{ -- Right widgets
layout = wibox.layout.fixed.horizontal,
mykeyboardlayout,
wibox.widget.systray(),
mytextclock,
s.mylayoutbox,
},
})
end)
-- {{{ Mouse bindings
root.buttons(gears.table.join(
awful.button({}, 3, function()
mymainmenu:toggle()
end),
awful.button({}, 4, awful.tag.viewnext),
awful.button({}, 5, awful.tag.viewprev)
))
-- }}}
-- {{{ Key bindings
globalkeys = gears.table.join(
-- basics
awful.key({ mod }, "t", awesome.restart),
-- focus
awful.key({ mod }, "h", awful.client.focus.bydirection("left")),
awful.key({ mod }, "j", awful.client.focus.bydirection("down")),
awful.key({ mod }, "k", awful.client.focus.bydirection("up")),
awful.key({ mod }, "l", awful.client.focus.bydirection("right")),
-- shift
awful.key({ mod, "Shift" }, "h", awful.client.swap.bydirection("left")),
awful.key({ mod, "Shift" }, "j", awful.client.swap.bydirection("down")),
awful.key({ mod, "Shift" }, "k", awful.client.swap.bydirection("up")),
awful.key({ mod, "Shift" }, "l", awful.client.swap.bydirection("right")),
-- cycle
awful.key({ mod }, "m", function()
awful.screen.focus_relative(1)
end),
-- cycle layouts
awful.key({ mod }, "Tab", function()
awful.layout.inc(1)
end),
-- Standard program
awful.key({ mod }, "Return", function()
awful.spawn(terminal)
end),
awful.key({ mod, "Control" }, "l", function()
awful.tag.incmwfact(0.05)
end),
awful.key({ mod, "Control" }, "h", function()
awful.tag.incmwfact(-0.05)
end),
awful.key({ mod, "Shift" }, "h", function()
awful.tag.incnmaster(1, nil, true)
end),
awful.key({ mod, "Shift" }, "l", function()
awful.tag.incnmaster(-1, nil, true)
end),
awful.key({ mod, "Control" }, "h", function()
awful.tag.incncol(1, nil, true)
end),
awful.key({ mod, "Control" }, "l", function()
awful.tag.incncol(-1, nil, true)
end),
awful.key({ mod, "Shift" }, "Tab", function()
awful.layout.inc(-1)
end),
awful.key({ mod }, "space", function()
awful.spawn("rofi -show run")
end),
awful.key({ mod }, "1", function()
awful.spawn("thunar")
end),
awful.key({ mod }, "2", function()
awful.spawn("firefox")
end),
awful.key({ mod }, "3", function()
awful.spawn("rofi -show calc")
end),
awful.key({ mod }, "4", function()
awful.spawn("kitty -e ncmpcpp")
end),
awful.key({ mod }, "0", function()
awful.spawn("i3lock -c 000000")
end),
awful.key({ mod, "Control" }, "n", function()
local c = awful.client.restore()
-- Focus restored client
if c then
c:emit_signal("request::activate", "key.unminimize", { raise = true })
end
end, { description = "restore minimized", group = "client" })
)
clientkeys = gears.table.join(
-- basics
awful.key({ mod }, "w", function(c)
c:kill()
end),
-- window attributes
awful.key({ mod, "Control" }, "e", function(c)
c.fullscreen = not c.fullscreen
c:raise()
end),
awful.key({ mod, "Control" }, "q", awful.client.floating.toggle),
awful.key({ mod, "Control" }, "Return", function(c)
c:swap(awful.client.getmaster())
end, { description = "move to master", group = "client" }),
awful.key({ mod }, "o", function(c)
c:move_to_screen()
end, { description = "move to screen", group = "client" }),
awful.key({ mod }, "t", function(c)
c.ontop = not c.ontop
end, { description = "toggle keep on top", group = "client" }),
awful.key({ mod }, "n", function(c)
-- The client currently has the input focus, so it cannot be
-- minimized, since minimized clients can't have the focus.
c.minimized = true
end, { description = "minimize", group = "client" }),
awful.key({ mod }, "m", function(c)
c.maximized = not c.maximized
c:raise()
end, { description = "(un)maximize", group = "client" }),
awful.key({ mod, "Control" }, "m", function(c)
c.maximized_vertical = not c.maximized_vertical
c:raise()
end, { description = "(un)maximize vertically", group = "client" }),
awful.key({ mod, "Shift" }, "m", function(c)
c.maximized_horizontal = not c.maximized_horizontal
c:raise()
end, { description = "(un)maximize horizontally", group = "client" })
)
-- Bind all key numbers to tags.
-- Be careful: we use keycodes to make it work on any keyboard layout.
-- This should map on the top row of your keyboard, usually 1 to 9.
-- for
local tags = { "a", "s", "d", "f", "g", "z", "x", "c", "v", "b" }
for i, tag_name in ipairs(tags) do
globalkeys = gears.table.join(
globalkeys,
-- View tag only.
awful.key({ mod }, tag_name, function()
local screen = awful.screen.focused()
local tag = screen.tags[i]
if tag then
tag:view_only()
end
end),
-- Toggle tag display.
awful.key({ mod, "Control" }, tag_name, function()
local screen = awful.screen.focused()
local tag = screen.tags[i]
if tag then
awful.tag.viewtoggle(tag)
end
end),
-- Move client to tag.
awful.key({ mod, "Shift" }, tag_name, function()
if client.focus then
local tag = client.focus.screen.tags[i]
if tag then
client.focus:move_to_tag(tag)
end
end
end),
-- Toggle tag on focused client.
awful.key({ mod, "Control", "Shift" }, tag_name, function()
if client.focus then
local tag = client.focus.screen.tags[i]
if tag then
client.focus:toggle_tag(tag)
end
end
end)
)
end
-- Set keys
root.keys(globalkeys)
-- }}}
-- {{{ Rules
-- Rules to apply to new clients (through the "manage" signal).
awful.rules.rules = {
-- All clients will match this rule.
{
rule = {},
properties = {
border_width = beautiful.border_width,
border_color = beautiful.border_normal,
focus = awful.client.focus.filter,
raise = true,
keys = clientkeys,
buttons = clientbuttons,
screen = awful.screen.preferred,
placement = awful.placement.no_overlap + awful.placement.no_offscreen,
},
},
-- Floating clients.
{
rule_any = {
instance = {
"DTA", -- Firefox addon DownThemAll.
"copyq", -- Includes session name in class.
"pinentry",
},
class = {
"Arandr",
"Blueman-manager",
"Gpick",
"Kruler",
"MessageWin", -- kalarm.
"Sxiv",
"Tor Browser", -- Needs a fixed window size to avoid fingerprinting by screen size.
"Wpa_gui",
"veromix",
"xtightvncviewer",
},
-- Note that the name property shown in xprop might be set slightly after creation of the client
-- and the name shown there might not match defined rules here.
name = {
"Event Tester", -- xev.
},
role = {
"AlarmWindow", -- Thunderbird's calendar.
"ConfigManager", -- Thunderbird's about:config.
"pop-up", -- e.g. Google Chrome's (detached) Developer Tools.
},
},
properties = { floating = true },
},
-- Add titlebars to normal clients and dialogs
{ rule_any = { type = { "normal", "dialog" } }, properties = { titlebars_enabled = true } },
-- Set Firefox to always map on the tag named "2" on screen 1.
-- { rule = { class = "Firefox" },
-- properties = { screen = 1, tag = "2" } },
}
-- }}}
-- {{{ Signals
-- Signal function to execute when a new client appears.
client.connect_signal("manage", function(c)
-- Set the windows at the slave,
-- i.e. put it at the end of others instead of setting it master.
-- if not awesome.startup then awful.client.setslave(c) end
if awesome.startup and not c.size_hints.user_position and not c.size_hints.program_position then
-- Prevent clients from being unreachable after screen count changes.
awful.placement.no_offscreen(c)
end
end)
-- Enable sloppy focus, so that focus follows mouse.
client.connect_signal("mouse::enter", function(c)
c:emit_signal("request::activate", "mouse_enter", { raise = false })
end)
client.connect_signal("focus", function(c)
c.border_color = beautiful.border_focus
end)
client.connect_signal("unfocus", function(c)
c.border_color = beautiful.border_normal
end)
-- }}}
--
-- local theme_path = string.format("%s/.config/awesome/themes/%s/theme.lua", os.getenv("HOME"), "default")
-- beautiful.init(theme_path)
-- beautiful.init(gears.filesystem.get_themes_dir() .. "xresources/theme.lua")
local mytheme = require("theme")
beautiful.init(mytheme)

View File

@ -0,0 +1,118 @@
---------------------------------------------
-- Awesome theme which follows xrdb config --
-- by Yauhen Kirylau --
---------------------------------------------
local theme_assets = require("beautiful.theme_assets")
local xresources = require("beautiful.xresources")
local dpi = xresources.apply_dpi
local xrdb = xresources.get_current_theme()
local gfs = require("gears.filesystem")
local themes_path = gfs.get_themes_dir()
-- inherit default theme
local theme = dofile(themes_path .. "default/theme.lua")
-- load vector assets' generators for this theme
theme.font = "mononoki 12"
theme.bg_normal = xrdb.color0
theme.bg_focus = xrdb.color8
theme.bg_urgent = xrdb.color1
theme.bg_minimize = xrdb.color7
theme.bg_systray = theme.bg_normal
theme.fg_normal = xrdb.foreground
theme.fg_focus = theme.bg_normal
theme.fg_urgent = theme.bg_normal
theme.fg_minimize = theme.bg_normal
theme.useless_gap = dpi(6)
theme.border_width = dpi(4)
theme.border_normal = xrdb.color0
theme.border_focus = theme.bg_focus
theme.border_marked = xrdb.color10
-- There are other variable sets
-- overriding the default one when
-- defined, the sets are:
-- 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]
-- Example:
--theme.taglist_bg_focus = "#ff0000"
theme.tooltip_fg = theme.fg_normal
theme.tooltip_bg = theme.bg_normal
-- Variables set for theming the menu:
-- menu_[bg|fg]_[normal|focus]
-- menu_[border_color|border_width]
theme.menu_submenu_icon = themes_path .. "default/submenu.png"
theme.menu_height = dpi(16)
theme.menu_width = dpi(100)
-- You can add as many variables as
-- you wish and access them by using
-- beautiful.variable in your rc.lua
--theme.bg_widget = "#cc0000"
-- Recolor Layout icons:
theme = theme_assets.recolor_layout(theme, theme.fg_normal)
-- Recolor titlebar icons:
--
local function darker(color_value, darker_n)
local result = "#"
for s in color_value:gmatch("[a-fA-F0-9][a-fA-F0-9]") do
local bg_numeric_value = tonumber("0x" .. s) - darker_n
if bg_numeric_value < 0 then
bg_numeric_value = 0
end
if bg_numeric_value > 255 then
bg_numeric_value = 255
end
result = result .. string.format("%2.2x", bg_numeric_value)
end
return result
end
theme = theme_assets.recolor_titlebar(theme, theme.fg_normal, "normal")
theme = theme_assets.recolor_titlebar(theme, darker(theme.fg_normal, -60), "normal", "hover")
theme = theme_assets.recolor_titlebar(theme, xrdb.color1, "normal", "press")
theme = theme_assets.recolor_titlebar(theme, theme.fg_focus, "focus")
theme = theme_assets.recolor_titlebar(theme, darker(theme.fg_focus, -60), "focus", "hover")
theme = theme_assets.recolor_titlebar(theme, xrdb.color1, "focus", "press")
-- 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 = nil
-- Generate Awesome icon:
theme.awesome_icon = theme_assets.awesome_icon(theme.menu_height, theme.bg_focus, theme.fg_focus)
-- 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)
-- Try to determine if we are running light or dark colorscheme:
local bg_numberic_value = 0
for s in theme.bg_normal:gmatch("[a-fA-F0-9][a-fA-F0-9]") do
bg_numberic_value = bg_numberic_value + tonumber("0x" .. s)
end
local is_dark_bg = (bg_numberic_value < 383)
-- Generate wallpaper:
local wallpaper_bg = xrdb.color8
local wallpaper_fg = xrdb.color7
local wallpaper_alt_fg = xrdb.color12
if not is_dark_bg then
wallpaper_bg, wallpaper_fg = wallpaper_fg, wallpaper_bg
end
theme.wallpaper = function(s)
return theme_assets.wallpaper(wallpaper_bg, wallpaper_fg, wallpaper_alt_fg, s)
end
return theme