Top Related Projects
A fast and easy-to-use status bar
ElKowars wacky widgets
Awesome WM themes
There is no place like ~/
Quick Overview
Lain is a collection of custom layouts, widgets, and utilities for the Awesome Window Manager on Linux. It extends Awesome WM's functionality, providing additional tools and customization options for users to enhance their desktop environment and workflow.
Pros
- Extensive set of widgets and layouts for improved desktop customization
- Active community with regular updates and contributions
- Seamless integration with Awesome WM
- Well-documented codebase with examples
Cons
- Requires knowledge of Lua programming language for advanced customization
- May have a steeper learning curve for new users
- Limited compatibility with other window managers
- Some widgets may require additional system dependencies
Code Examples
- Adding a battery widget:
local lain = require("lain")
local mybattery = lain.widget.bat({
settings = function()
widget:set_markup("Bat: " .. bat_now.perc .. "%")
end
})
- Creating a custom layout:
local lain = require("lain")
awful.layout.layouts = {
awful.layout.suit.floating,
awful.layout.suit.tile,
lain.layout.centerwork,
lain.layout.termfair
}
- Using the CPU widget:
local lain = require("lain")
local mycpu = lain.widget.cpu({
settings = function()
widget:set_markup("CPU: " .. cpu_now.usage .. "%")
end
})
Getting Started
To use Lain with Awesome WM, follow these steps:
-
Clone the repository:
git clone https://github.com/lcpz/lain.git ~/.config/awesome/lain
-
Add the following to your
rc.lua
file:local lain = require("lain")
-
Start using Lain widgets and layouts in your Awesome WM configuration.
For more detailed instructions and examples, refer to the project's documentation on GitHub.
Competitor Comparisons
A fast and easy-to-use status bar
Pros of polybar
- More active development with frequent updates and contributions
- Extensive documentation and user guide
- Highly customizable with a wide range of built-in modules
Cons of polybar
- Steeper learning curve for configuration
- Requires more system resources compared to lightweight alternatives
Code comparison
Polybar configuration example:
[bar/mybar]
modules-left = i3
modules-center = date
modules-right = cpu memory
Lain configuration example:
local lain = require("lain")
local cpu = lain.widget.cpu()
local mem = lain.widget.mem()
Key differences
- Polybar is a standalone status bar, while Lain is a widget library for the Awesome window manager
- Polybar uses a custom configuration syntax, whereas Lain uses Lua for configuration
- Polybar offers more out-of-the-box functionality, while Lain provides more flexibility within the Awesome ecosystem
Use cases
- Choose Polybar for a feature-rich, standalone status bar that works with various window managers
- Opt for Lain if you're using Awesome window manager and prefer a lightweight, integrated solution
Both projects have their merits, and the choice depends on your specific needs and preferred window manager environment.
ElKowars wacky widgets
Pros of eww
- Written in Rust, offering better performance and memory safety
- More flexible and customizable, allowing for complex widgets and layouts
- Supports multiple window managers and desktop environments
Cons of eww
- Steeper learning curve due to its more complex configuration system
- Less integrated with specific window managers like Awesome WM
Code comparison
lain (Lua):
local cpu = lain.widget.cpu({
settings = function()
widget:set_markup("CPU " .. cpu_now.usage .. "%")
end
})
eww (YUCK):
(defwidget cpu []
(box :class "cpu"
:orientation "h"
:space-evenly false
(label :text "CPU ${round(EWW_CPU.avg, 0)}%")))
Summary
eww is a more modern and flexible widget system written in Rust, offering better performance and customization options. It supports multiple window managers but has a steeper learning curve. lain is specifically designed for Awesome WM, providing tighter integration and easier setup for that environment. The code comparison shows the different approaches: lain uses Lua callbacks, while eww uses a declarative XML-like syntax called YUCK.
Awesome WM themes
Pros of awesome-copycats
- Provides a collection of ready-to-use themes for AwesomeWM
- Includes multiple complete configurations for different styles
- Easier to set up and customize for users new to AwesomeWM
Cons of awesome-copycats
- Less flexible for advanced users who want to build custom layouts
- May include unnecessary components for users seeking minimal setups
- Potentially higher resource usage due to pre-configured widgets
Code Comparison
awesome-copycats (theme configuration):
local theme = {}
theme.font = "sans 8"
theme.bg_normal = "#222222"
theme.fg_normal = "#aaaaaa"
theme.bg_focus = "#535d6c"
lain (widget creation):
local cpu = lain.widget.cpu {
settings = function()
widget:set_markup("CPU " .. cpu_now.usage .. "%")
end
}
Summary
awesome-copycats offers a collection of pre-configured themes for AwesomeWM, making it easier for new users to set up attractive desktop environments. However, it may be less flexible for advanced users who prefer building custom layouts.
lain, on the other hand, provides a library of widgets and utilities that can be used to create custom configurations. It offers more flexibility but requires more effort to set up a complete desktop environment.
Choose awesome-copycats for quick, attractive setups, or lain for building highly customized AwesomeWM configurations.
There is no place like ~/
Pros of dotfiles
- Comprehensive collection of dotfiles for various applications and tools
- Aesthetically pleasing and customizable configurations
- Includes custom scripts and themes for enhanced functionality
Cons of dotfiles
- Primarily focused on personal configurations, may require more adaptation for general use
- Less specialized in AwesomeWM extensions compared to lain
- May have a steeper learning curve for users unfamiliar with the specific tools and configurations
Code Comparison
lain (widget creation):
local mywidget = lain.widget.calendar({
attach_to = { mytextclock },
notification_preset = {
font = "Monospace 10",
fg = "#FFFFFF",
bg = "#000000"
}
})
dotfiles (AwesomeWM configuration):
local calendar_widget = require("awesome-wm-widgets.calendar-widget.calendar")
local cw = calendar_widget({
theme = 'nord',
placement = 'top_right',
start_sunday = true,
radius = 8,
})
mytextclock:connect_signal("button::press",
function(_, _, _, button)
if button == 1 then cw.toggle() end
end)
The code comparison shows that lain focuses on providing widgets and extensions for AwesomeWM, while dotfiles includes more general configurations and customizations for various tools, including AwesomeWM.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Lain
.. image:: https://github.com/lcpz/lain/actions/workflows/main.yml/badge.svg
Layouts, widgets and utilities for Awesome WM 4.x
:Author: Luca CPZ :Version: git :License: GNU-GPL2_ :Source: https://github.com/lcpz/lain
Description
Successor of awesome-vain_, this module provides alternative layouts, asynchronous widgets and utility functions for Awesome_.
Contributions
Constructive criticism and suggestions are welcome.
If you want to create a pull request, make sure that:
-
Your code fits with the general style of the module. In particular, you should use the same indentation pattern that the code uses, and also avoid adding space at the ends of lines.
-
Your code its easy to understand, maintainable, and modularized. You should also avoid code duplication wherever possible by adding functions to or using lain.helpers_. If something is unclear, or you can not write it in such a way that it will be clear, explain it with a comment.
-
You test your changes before submitting to make sure that your code works and does not break other parts of the module.
-
You update
wiki
submodule with a thorough section, if necessary.
Contributed widgets have to be put in widget/contrib
.
.. _GNU-GPL2: http://www.gnu.org/licenses/gpl-2.0.html .. _awesome-vain: https://github.com/vain/awesome-vain .. _Awesome: https://github.com/awesomeWM/awesome .. _lain.helpers: https://github.com/lcpz/lain/blob/master/helpers.lua
Top Related Projects
A fast and easy-to-use status bar
ElKowars wacky widgets
Awesome WM themes
There is no place like ~/
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot