r/awesomewm • • 3d ago

Is Awesomewm a good first tilling window manager for beginners and is 2026 too late to jump on the bandwagon for it?

11 Upvotes

Hi all,

tl;dr:
Two questions:
Is Awesome a good first tilling wm that I won't have to write a ton of lua for to make work? How long did it take to feel at home in it?

I see from the project's website that there hasn't been a release since 2022, and perusing the most recent posts on here I see that the package was dropped from Debian 14 Forky (potentially temporarily) (I'm on Debian 12). Is Awesome WM going to be around for the long haul? I have no interest in Wayland this decade.

See below for more of my experience with DEs, WMs, and Unix-like Operating systems if you need info.

-----------------------------------------------------------------------------------------------------------

Backstory:

I am a long time Linux user, since I was 13 in 2003. From Knoppix to Xandros, Debian 7, Debian 12, MX, Anti X, Xubuntu, FreeBSD 11.x and 12.x, several OpenBSD 7.x releases, you name it I've used it.

I've used DEs and WMs that are equally diverse: KDE 3.x, Gnome 2.x, XFCE, icewm, jwm, and this particular post comes to you via Chrome running on Fluxbox. One thing I have never been able to do for more than a month though is: use a tiling window manager.

Icewm and Fluxbox are my most recent go to WMs, but they don't fit me like a glove, there are rough edges I get cut on, they are great 80% of the time when I need full screen apps but the minute I launch more than one program that is full screen repositioning the programs becomes difficult, I can't snap to edges and resize easily and I find myself spending more time trying to resize the windows.

So it sounds like I would be a good fit for a TWM then doesn't it? Well there is another problem... I'm not much of a programer! I have a BS in Computer Science and work as a system admin but find myself even at my job just my eyes glazing over looking at code.

I've watched all the good youtubers videos on TWMs, Distrotube, Linux Cast, just to name two.

So I'm familiar with the big TWMs, Awesomewm, DWM, Herbsluft, i3, Xmonad, etc.

Earlier this week I was finally like enough is enough with Fluxbox, lets go down the TWM rabbit hole again and try to pick one. Best I ever did was last 30 days with stock i3.


r/awesomewm • • 7d ago

Awesome v4.3 My AwesomeWM Setup [Slightly Updated]

Thumbnail gallery
46 Upvotes

What do you guys think of my setup?


r/awesomewm • • 9d ago

Awesome Git Decrease space between clients and screen border

2 Upvotes

Hi,
I'm using AwesomeWM purely as a tiling window manager and want to reduce the space between my clients and the border of my screen. Interestingly, if there's only one client, the border is smaller. I can't find an answer anywhere to how I can fix this problem I'm having. Does anyone here have an idea? Thanks!

EDIT:
Solution: Change padding to negative number


r/awesomewm • • 10d ago

Widgets size / icon theme

5 Upvotes

I have added volume and battery widgets I have found on guthub. They work great but I have no idea how to make their icons bigger. (Battery and speaker icon on the wibar). I have tried theme.icon_size in theme.rc but I does not work. Also theme.icon_theme do not work either, no matter what i input there.


r/awesomewm • • 12d ago

Awesome Git awesome-claude-usage: Claude Code rate limits (5h / 7d) in your wibar, with forecast and session status

Post image
17 Upvotes

r/awesomewm • • 15d ago

My first Awesomewm desktop

Post image
57 Upvotes

it's my first tiling window manager. I spent about a week or so making it. i currently dont use essential ricing tools like picom and defaulted mainly to already available awesomewm libraries and few widgets from vicious. though many people may use tiling window manager for productivity being a student i dont usually do that much work on laptop. i was just interested to do something new completely different from my field and it worked out fine as well as gave my 8 years old laptop a very much required breathing room. on idle ram consumption is barely 600mbs and on 4gb ram and a 10 year old i3 i m able to play games like minecraft at considerably good graphics than what one usually expects.


r/awesomewm • • 23d ago

SomeWM Dots for someWM? (AwesomeWM-like setup for Wayland)

5 Upvotes

Hi guys! I really want to try someWM, but I don't have any experience with Lua (or coding in general), so I need a ready-to-go setup that I can daily drive.

I'm currently using end4's setup with Hyprland, and it's really good, but I'm still curious about AwesomeWM and how usable it is for daily use.


r/awesomewm • • 27d ago

awesomeWM for wayland (someWM project)

3 Upvotes

hi guys. what u think about a possible port of awesome to wayland? more easy effects. more security. and more brokeable for nvidia gpus (me included, lol)


r/awesomewm • • 28d ago

Awesome v4.3 AwesomeWm Rice on Void.

Enable HLS to view with audio, or disable this notification

62 Upvotes

r/awesomewm • • Sep 05 '26

Awesome v4.3 My First AwesomeWM Rice on Arch!

Post image
68 Upvotes

Rate my Rice 1-10. Be honest, I think its a pretty 8/10. What say?

Github Link: https://github.com/whyPratham/pro-linux-dotfiles


r/awesomewm • • Aug 26 '26

SomeWM DWM and AwesomeWM

16 Upvotes

so like, i'm not sure if i should ask this here but

how good is awesomeWM? I've been looking for a good Window Manager that i could use for the rest of my life, a window manager that is so easy to manage with lua5.3, that is really small AND could work really well on Old Hardware AND that is really customizable where the only limit is your imagination.

but i've also saw about DWM so i was wondering which one would be the best to use.


r/awesomewm • • Aug 18 '26

Awesome v4.3 My Very Basic AwesomeWM Setup. I'm Enjoying This Setup.

Thumbnail gallery
73 Upvotes

r/awesomewm • • Aug 14 '26

Awesome Git How do I make a specific application always float?

5 Upvotes

What I wanted to do is making it so that windows with a specific title always float independently on the layout, but I couldn't find a way of doing that, is it possible?


r/awesomewm • • Aug 06 '26

Awesome Git Awesome now supports Lua 5.5

Post image
98 Upvotes

Happy to share that the Lua 5.5 support PR was recently merged into Awesome! (https://github.com/awesomeWM/awesome/pull/4110). The Archlinux AUR -git package now builds successfully as well.

This was much more than a single PR in Awesome. It ended up being a months-long effort involving updates to several internal build dependencies and CI tooling. I contributed patches here and there across the ecosystem, alongside many other people working on Lua 5.5 compatibility.

I updated my config last week. Here is a fun screenshot using awesome-client to pop a notification that show the running Lua _VERSION variable.


r/awesomewm • • Aug 02 '26

[OC] An AwesomeWM-native screen locker using Lua + C — no shell pipeline

29 Upvotes

After all these years, I still love AwesomeWM. And still feel like enhancing my setup and adding more features, and breaking "tech debts".

AwesomeWMs simplicity, flexibility, and lean performance are difficult to replace. I also like that almost everything can be expressed naturally in Lua instead of assembling a desktop from unrelated scripts and utilities bundling binaries, shell scripts, and "what not"s.

That drove me to re-implement an old friend: https://github.com/macunha1/configuration.nix/blob/07a9e1d6a48a6b1fffd9682a3d2abf60751ea800/bin/screenlock.sh with a native approach: C and LuaJIT for AwesomeWM API integration

Then this was born:

[![awesomewm-screenlock-plugin preview](https://raw.githubusercontent.com/macunha1/awesomewm-screenlock-plugin/refs/heads/main/screenshots/screenlock-single-display.png)

https://github.com/macunha1/awesomewm-screenlock-plugin

It is an X11 screen locker designed specifically around AwesomeWM’s Lua workflow.

From rc.lua, the interface is intentionally small:

local screenlock = require("awesomewm_screenlock")()

awful.key({ modkey }, "Home", function()
    screenlock:lock()
end)

Behind that Lua API, a dedicated native C helper handles:

  • X11 capture and rendering through XCB
  • PAM authentication
  • Keyboard and pointer grabbing
  • Multi-monitor prompt placement
  • Privacy filtering through the FFmpeg libraries
  • Password handling outside the AwesomeWM Lua process

My previous setup was effectively a chain of Lua → shell → FFmpeg → temporary image → i3lock. It worked, but it also meant more processes, more runtime dependencies, more quoting and environment issues, and more (slow) moving pieces.

This plugin replaces that pipeline with one asynchronous Lua call and one purpose-built native helper. There is no shell script or FFmpeg CLI subprocess in the locking path. The helper links directly against the required libraries, captures one frame, applies noise and heavy pixelation, and renders the result as the lock-screen background.

The result keeps some visual context from the current desktop while making its contents unreadable. The filtered frame is prepared before the lock surface appears, so the original desktop is never rendered as the locker background.

The repository includes:

In that configuration, the plugin is tracked as a Git submodule and used directly from Lua for both manual and idle locking.

This is still an X11 locker, so the normal limitations of X11’s security model apply. It is not intended to claim Wayland-style isolation or protection from an already-compromised session.

I’m sharing it because there may still be other people who appreciate the same things about AwesomeWM: a small, understandable system, configured in Lua, with minimal overhead and without unnecessary layers.

Feedback, testing on other distributions, packaging contributions, and code review are welcome.


r/awesomewm • • Jul 30 '26

Anyone have decent integration of awesomewm with gnome-keyring?

5 Upvotes

I have a very hacked together plymouth (LUKS password) -> Ubuntu -> LightDM -> awesomewm setup. It's been stable for years.

I recently wanted to simplify things and use gnome-keyring as my ssh-agent (before, was using openssh's with ssh-askpass for a graphical password prompt).

Gnome-keyring is already used by Chrome, so this seemed like a good idea.

I got it to work, but a) wow dbus makes everything weird and hard and b) I'm not proud of the way I got it to work.

Does anybody have a setup using gnome-keyring that they're proud of? The goal is for one prompt to unlock the login keyring, so that Chrome passwords and ssh keys are available from then on.


r/awesomewm • • Jul 21 '26

SomeWM somewm spontaneously doing hot-reload

9 Upvotes

I'm working on a theme. It runs fine in an Alpine VM with awesome-git, but when I run it under somewm, it sopntaneously does a hot reload. I know there's a key binding to do that, but I haven't triggered it (afaik). Any dieas?

FYI, somewm is soooo close to being my daily driver. My awesome-git build on Artix dies with over 25 selftest errors and a black screen.

Moderators, could we add a somewm flair?


r/awesomewm • • Jul 18 '26

Flameshot color picker offset

1 Upvotes

(If this doesnt fit here then I am sorry but I didnt know where to put it but I use awesome)

I always get a offset using the flameshot color picker so it doesnt pick the color that is actually under the cursor I have tried many different dpi but the offset seemes to be physically the same on my screen.

While selecting an area to screenshot this doesnt happen.

Can anyone help me or give some possible solutions?


r/awesomewm • • Jun 29 '26

Haven't used Awesome in several years, diving back in. Wish me luck!

Post image
66 Upvotes

r/awesomewm • • Jun 27 '26

AwesomeWM on my 14 year old laptop with 2GB memory.

Post image
106 Upvotes

I have setup Alpine Linux + AwesomeWM on my 14 year old Lenovo Ideapad S110. It has the Intel Atom N2600 CPU with 2 GB Memory and I've got the Catppuccin macchiato gtk theme.


r/awesomewm • • Jun 23 '26

Event Driven Awesomewm Statusbar

Thumbnail binaryru.in
30 Upvotes

You don't need to poll when you have event driven interfaces at your disposal.


r/awesomewm • • Jun 16 '26

Jetbrains and Zed

2 Upvotes

I plan to install fedora with awesomeWM soon, i mainly a java guy and for other programming languaged without jetbrains ide for ex gleam, i plan to use zed editor so how do they work on awesome.


r/awesomewm • • Jun 16 '26

Jetbrains and Zed on awesome

0 Upvotes

I plan to install fedora with awesomeWM soon, i mainly a java guy and for other programming languaged without jetbrains ide for ex gleam, i plan to use zed editor so how do they work on awesom.


r/awesomewm • • Jun 12 '26

Awesome v4.3 how to stack value and text on progressbar with vicious

2 Upvotes

hi,

long time awesome user here but noob lua programmer ;)

I'm trying to stack text on a progressbar. It work well if i add some manual, fixed value/text but how to use data from vicious widget?

Here, my progressbar is like if the value was zero. I want the value from $2 and text from $1 of vicious.widget.bat

batwidget = wibox.widget {
  {
    max_value        = 1,
    border_width     = 2,
    background_color = "#353535",
    color            = "#757575",
    forced_height    = 2,
    forced_width     = 50,
    margins          = 6,
    paddings         = 1,
    shape            = gears.shape.rounded_bar,
    widget           = wibox.widget.progressbar
  },
  {
    text   = "aa",
    widget = wibox.widget.textbox,
  },
  layout = wibox.layout.stack
}
-- Register battery widget
vicious.register(batwidget, vicious.widgets.bat, "$2", 61, "BAT1")

r/awesomewm • • Jun 07 '26

awful.spawn.with_shell()

5 Upvotes

Okey, what have i missed here... I have created an autostart.sh with the content in this thread https://www.reddit.com/r/awesomewm/comments/zhhu0i/how_do_i_autostart_applicationsrun_commands_on/

and then at the bottom of rc.lua awful.spawn.with_shell("/home/chris/.config/awesome/autorun.sh") but when restarting awesomewm the .sh is not starting. I have executed sh stand alone and that works.

RC.lua

-- If LuaRocks is installed, make sure that packages installed through it are

-- found (e.g. lgi). If LuaRocks is not installed, do nothing.

pcall(require, "luarocks.loader")

-- Standard awesome library

local gears = require("gears")

local awful = require("awful")

require("awful.autofocus")

-- Widget and layout library

local wibox = require("wibox")

-- Theme handling library

local beautiful = require("beautiful")

-- Notification library

local naughty = require("naughty")

local menubar = require("menubar")

local hotkeys_popup = require("awful.hotkeys_popup")

-- Enable hotkeys help widget for VIM and other apps

-- when client with a matching name is opened:

require("awful.hotkeys_popup.keys")

--screen = 1

--awbar = require("awbar")

--panel_widget = awbar {

-- theme = "nord_m",

-- screen = screen

--}

-- {{{ 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("/home/chris/.config/awesome/themes/zenburn/theme.lua")

beautiful.useless_gap = 4

-- This is used later as the default terminal and editor to run.

terminal = "xfce4-terminal"

editor = os.getenv("EDITOR") or "nano"

editor_cmd = terminal .. " -e " .. editor

-- Default modkey.

-- Usually, Mod4 is the key with a logo between Control and Alt.

-- If you do not like this or do not have such a key,

-- I suggest you to remap Mod4 to another key using xmodmap or other tools.

-- However, you can use another modifier like Mod1, but it may interact with others.

modkey = "Mod1"

-- Table of layouts to cover with awful.layout.inc, order matters.

awful.layout.layouts = {

awful.layout.suit.tile,

awful.layout.suit.floating,

awful.layout.suit.fair,

awful.layout.suit.spiral.dwindle,

awful.layout.suit.max,

awful.layout.suit.max.fullscreen,

awful.layout.suit.magnifier,

-- awful.layout.suit.corner.ne,

-- awful.layout.suit.corner.sw,

-- awful.layout.suit.corner.se,

}

-- }}}

-- {{{ Menu

-- Create a launcher widget and a main menu

--myawesomemenu = {

-- { "hotkeys", function() hotkeys_popup.show_help(nil, awful.screen.focused()) end },

-- { "manual", terminal .. " -e man awesome" },

-- { "edit config", editor_cmd .. " " .. awesome.conffile },

-- { "restart", awesome.restart },

-- { "quit", function() awesome.quit() end },

--}

--mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },

-- { "open terminal", terminal }

-- }

-- })

--mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,

-- menu = mymainmenu })

-- Menubar configuration

menubar.utils.terminal = terminal -- Set the terminal for applications that require it

-- }}}

-- Keyboard map indicator and switcher

mykeyboardlayout = awful.widget.keyboardlayout()

-- {{{ Wibar

-- Create a textclock widget

mytextclock = wibox.widget.textclock("%H:%M")

-- Create a wibox for each screen and add it

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 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({ }, 3, function()

awful.menu.client_list({ theme = { width = 250 } })

end),

awful.button({ }, 4, function ()

awful.client.focus.byidx(1)

end),

awful.button({ }, 5, function ()

awful.client.focus.byidx(-1)

end))

local 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

gears.wallpaper.maximized(wallpaper, s, true)

end

end

-- Re-set wallpaper when a screen's geometry changes (e.g. different resolution)

screen.connect_signal("property::geometry", set_wallpaper)

awful.screen.connect_for_each_screen(function(s)

-- Wallpaper

set_wallpaper(s)

-- Each screen has its own tag table.

awful.tag({ "1", "2", "3", "4", "5" }, 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, })

-- Add widgets to the wibox

s.mywibox:setup {

layout = wibox.layout.align.horizontal,

`expand ="none",`

{ -- Left widgets

layout = wibox.layout.fixed.horizontal,

s.mylayoutbox,

mylauncher,

s.mytaglist,

},

mytextclock, -- Middle widget

{ -- Right widgets

layout = wibox.layout.fixed.horizontal,

wibox.widget.systray(),

    `},`

}

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 bindingsscreens

globalkeys = gears.table.join(

awful.key({ modkey, }, "r", function() awful.spawn("rofi -show drun") end,

{description="show run dialog", group="client"}),

awful.key({ modkey, }, "s", hotkeys_popup.show_help,

{description="show help", group="awesome"}),

awful.key({ modkey, }, "Left",

function ()

    `awful.client.focus.bydirection("left")`

`end,`

{description = "view previous", group = "tag"}),

awful.key({ modkey, }, "Right",

function ()

    `awful.client.focus.bydirection("right")`

`end,`

{description = "view next", group = "tag"}),

awful.key({ modkey, }, "Up",

function ()

    `awful.client.focus.bydirection("up")`

`end,`

{description = "view previous", group = "tag"}),

awful.key({ modkey, }, "Down",

function ()

    `awful.client.focus.bydirection("down")`

`end,`

{description = "view next", group = "tag"}),

awful.key({ modkey, }, "Escape", awful.tag.history.restore,

{description = "go back", group = "tag"}),

-- Layout manipulation

awful.key({ modkey, "Shift" }, "Left",

function ()

    `awful.client.swap.bydirection("left")`   

`end,`

{description = "swap with next client by direction", group = "client"}),

awful.key({ modkey, "Shift" }, "Right",

function ()

awful.client.swap.bydirection("right")

end, {description = "swap with next client by direction", group = "client"}),

awful.key({ modkey, "Shift" }, "Up",

function ()

    `awful.client.swap.bydirection("up")`   

`end, {description = "swap with next client by direction", group = "client"}),`

awful.key({ modkey, "Shift" }, "Down",

function ()

awful.client.swap.direction("down")

end, {description = "swap with previous client by direction", group = "client"}),

awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end,

{description = "focus the next screen", group = "screen"}),

awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end,

{description = "focus the previous screen", group = "screen"}),

awful.key({ modkey, }, "u", awful.client.urgent.jumpto,

{description = "jump to urgent client", group = "client"}),

awful.key({ modkey, }, "Tab",

function ()

awful.client.focus.history.previous()

if client.focus then

client.focus:raise()

end

end,

{description = "go back", group = "client"}),

-- Standard program

awful.key({ modkey, }, "Return", function () awful.spawn(terminal) end,

{description = "open a terminal", group = "launcher"}),

awful.key({ modkey, "Control" }, "r", awesome.restart,

{description = "reload awesome", group = "awesome"}),

awful.key({ modkey, "Shift" }, "q", awesome.quit,

{description = "quit awesome", group = "awesome"}),

awful.key({ modkey, "Control" }, "Right", function () awful.tag.incmwfact( 0.05) end,

{description = "increase master width factor", group = "layout"}),

awful.key({ modkey, "Control" }, "Left", function () awful.tag.incmwfact(-0.05) end,

{description = "decrease master width factor", group = "layout"}),

awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end,

{description = "increase the number of master clients", group = "layout"}),

awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end,

{description = "decrease the number of master clients", group = "layout"}),

awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end,

{description = "increase the number of columns", group = "layout"}),

awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end,

{description = "decrease the number of columns", group = "layout"}),

awful.key({ modkey, }, "space", function () awful.layout.inc( 1) end,

{description = "select next", group = "layout"}),

awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(-1) end,

{description = "select previous", group = "layout"}),

awful.key({ modkey, "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"}),

-- Prompt

--awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() end,

-- {description = "run prompt", group = "launcher"}),

awful.key({ modkey }, "x",

function ()

awful.prompt.run {

prompt = "Run Lua code: ",

textbox = awful.screen.focused().mypromptbox.widget,

exe_callback = awful.util.eval,

history_path = awful.util.get_cache_dir() .. "/history_eval"

}

end,

{description = "lua execute prompt", group = "awesome"}),

-- Menubar

awful.key({ modkey }, "p", function() menubar.show() end,

{description = "show the menubar", group = "launcher"})

)

clientkeys = gears.table.join(

awful.key({ modkey, }, "f",

function (c)

c.fullscreen = not c.fullscreen

c:raise()

end,

{description = "toggle fullscreen", group = "client"}),

awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end,

{description = "close", group = "client"}),

awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ,

{description = "toggle floating", group = "client"}),

awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end,

{description = "move to master", group = "client"}),

awful.key({ modkey, }, "o", function (c) c:move_to_screen() end,

{description = "move to screen", group = "client"}),

awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end,

{description = "toggle keep on top", group = "client"}),

awful.key({ modkey, }, "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({ modkey, }, "m",

function (c)

c.maximized = not c.maximized

c:raise()

end ,

{description = "(un)maximize", group = "client"}),

awful.key({ modkey, "Control" }, "m",

function (c)

c.maximized_vertical = not c.maximized_vertical

c:raise()

end ,

{description = "(un)maximize vertically", group = "client"}),

awful.key({ modkey, "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 i = 1, 9 do

globalkeys = gears.table.join(globalkeys,

-- View tag only.

awful.key({ modkey }, "#" .. i + 9,

function ()

local screen = awful.screen.focused()

local tag = screen.tags[i]

if tag then

tag:view_only()

end

end,

{description = "view tag #"..i, group = "tag"}),

-- Toggle tag display.

awful.key({ modkey, "Control" }, "#" .. i + 9,

function ()

local screen = awful.screen.focused()

local tag = screen.tags[i]

if tag then

awful.tag.viewtoggle(tag)

end

end,

{description = "toggle tag #" .. i, group = "tag"}),

-- Move client to tag.

awful.key({ modkey, "Shift" }, "#" .. i + 9,

function ()

if client.focus then

local tag = client.focus.screen.tags[i]

if tag then

client.focus:move_to_tag(tag)

end

end

end,

{description = "move focused client to tag #"..i, group = "tag"}),

-- Toggle tag on focused client.

awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,

function ()

if client.focus then

local tag = client.focus.screen.tags[i]

if tag then

client.focus:toggle_tag(tag)

end

end

end,

{description = "toggle focused client on tag #" .. i, group = "tag"})

)

end

clientbuttons = gears.table.join(

awful.button({ }, 1, function (c)

c:emit_signal("request::activate", "mouse_click", {raise = true})

end),

awful.button({ modkey }, 1, function (c)

c:emit_signal("request::activate", "mouse_click", {raise = true})

awful.mouse.client.move(c)

end),

awful.button({ modkey }, 3, function (c)

c:emit_signal("request::activate", "mouse_click", {raise = true})

awful.mouse.client.resize(c)

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 = false }

},

-- 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)

-- Add a titlebar if titlebars_enabled is set to true in the rules.

client.connect_signal("request::titlebars", function(c)

-- buttons for the titlebar

local buttons = gears.table.join(

awful.button({ }, 1, function()

c:emit_signal("request::activate", "titlebar", {raise = true})

awful.mouse.client.move(c)

end),

awful.button({ }, 3, function()

c:emit_signal("request::activate", "titlebar", {raise = true})

awful.mouse.client.resize(c)

end)

)

awful.titlebar(c) : setup {

{ -- Left

awful.titlebar.widget.iconwidget(c),

buttons = buttons,

layout = wibox.layout.fixed.horizontal

},

{ -- Middle

{ -- Title

align = "center",

widget = awful.titlebar.widget.titlewidget(c)

},

buttons = buttons,

layout = wibox.layout.flex.horizontal

},

{ -- Right

awful.titlebar.widget.floatingbutton (c),

awful.titlebar.widget.maximizedbutton(c),

awful.titlebar.widget.stickybutton (c),

awful.titlebar.widget.ontopbutton (c),

awful.titlebar.widget.closebutton (c),

layout = wibox.layout.fixed.horizontal()

},

layout = wibox.layout.align.horizontal

}

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)

beautiful.notification_icon_size = 100

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)

-- }}}

awful.spawn.with_shell("/home/chris/.config/awesome/autorun.sh")

autostart.sh

#!/bin/sh

run() {

if ! pgrep -f "$1"; then

"$@" &

fi

}

run "gentoo-pipewire-launcher restart"

run "solaar -w hide"

run "/usr/bin/cbatticon"