dotfiles/awesome/rc.lua

171 lines
5.8 KiB
Lua
Raw Normal View History

2022-07-19 19:45:11 +02:00
-- █████╗ ██╗ ██╗███████╗███████╗ ██████╗ ███╗ ███╗███████╗
-- ██╔══██╗██║ ██║██╔════╝██╔════╝██╔═══██╗████╗ ████║██╔════╝
-- ███████║██║ █╗ ██║█████╗ ███████╗██║ ██║██╔████╔██║█████╗
-- ██╔══██║██║███╗██║██╔══╝ ╚════██║██║ ██║██║╚██╔╝██║██╔══╝
-- ██║ ██║╚███╔███╔╝███████╗███████║╚██████╔╝██║ ╚═╝ ██║███████╗
-- ╚═╝ ╚═╝ ╚══╝╚══╝ ╚══════╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝
2022-07-19 15:24:06 +02:00
2022-07-19 19:45:11 +02:00
-- Standard awesome libraries
2022-07-19 15:24:06 +02:00
local gears = require("gears")
local awful = require("awful")
2022-07-19 19:45:11 +02:00
-- ===================================================================
-- User Configuration
-- ===================================================================
2022-07-19 15:24:06 +02:00
2022-07-19 19:45:11 +02:00
local theme_config_dir = gears.filesystem.get_configuration_dir() .. "/configuration/"
2022-07-19 15:24:06 +02:00
2022-07-19 19:45:11 +02:00
-- define default apps (global variable so other components can access it)
apps = {
network_manager = "nm-connection-editor", -- recommended: nm-connection-editor
power_manager = "", -- recommended: xfce4-power-manager
2022-07-21 15:40:10 +02:00
terminal = 'bash -c "WINIT_X11_SCALE_FACTOR=1 alacritty"',
2022-07-19 19:45:11 +02:00
launcher = "/home/user/.toggle_rofi.sh",
lock = "i3lock",
screenshot = "scrot -e 'mv $f ~/Pictures/Screenshots/ 2>/dev/null'",
filebrowser = "nautilus"
2022-07-19 15:24:06 +02:00
}
2022-07-19 19:45:11 +02:00
-- define wireless and ethernet interface names for the network widget
-- use `ip link` command to determine these
network_interfaces = {
lan = 'enp4s0'
2022-07-19 15:24:06 +02:00
}
2022-07-19 19:45:11 +02:00
-- List of apps to run on start-up
local run_on_start_up = {
2022-07-21 15:40:10 +02:00
"numlockx on",
2022-07-21 17:11:07 +02:00
"bluetoothctl power on",
"nm-applet",
2022-07-23 18:44:22 +02:00
"blueman-applet"
2022-07-19 19:45:11 +02:00
}
2022-07-19 15:24:06 +02:00
2022-07-19 19:45:11 +02:00
-- ===================================================================
-- Initialization
-- ===================================================================
-- Import notification appearance
require("components.notifications")
-- Run all the apps listed in run_on_start_up
for _, app in ipairs(run_on_start_up) do
local findme = app
local firstspace = app:find(" ")
if firstspace then
findme = app:sub(0, firstspace - 1)
end
-- pipe commands to bash to allow command to be shell agnostic
awful.spawn.with_shell(string.format("echo 'pgrep -u $USER -x %s > /dev/null || (%s)' | bash -", findme, app), false)
2022-07-19 15:24:06 +02:00
end
2022-07-19 19:45:11 +02:00
-- Import theme
local beautiful = require("beautiful")
beautiful.init(gears.filesystem.get_configuration_dir() .. "theme.lua")
-- Initialize theme
local selected_theme = require("pastel")
selected_theme.initialize()
-- Import Keybinds
local keys = require("keys")
root.keys(keys.globalkeys)
root.buttons(keys.desktopbuttons)
-- Import rules
local create_rules = require("rules").create
awful.rules.rules = create_rules(keys.clientkeys, keys.clientbuttons)
-- Define layouts
awful.layout.layouts = {
2022-07-20 00:24:45 +02:00
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,
2022-07-19 15:24:06 +02:00
}
2022-07-19 19:45:11 +02:00
-- remove gaps if layout is set to max
tag.connect_signal('property::layout', function(t)
local current_layout = awful.tag.getproperty(t, 'layout')
if (current_layout == awful.layout.suit.max) then
t.gap = 0
else
t.gap = beautiful.useless_gap
end
end)
2022-07-19 15:24:06 +02:00
-- Signal function to execute when a new client appears.
client.connect_signal("manage", function (c)
2022-07-19 19:45:11 +02:00
-- Set the window as a slave (put it at the end of others instead of setting it as 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
2022-07-19 15:24:06 +02:00
end)
2022-07-19 19:45:11 +02:00
-- ===================================================================
-- Client Focusing
-- ===================================================================
-- Autofocus a new client when previously focused one is closed
require("awful.autofocus")
-- Focus clients under mouse
2022-07-19 15:24:06 +02:00
client.connect_signal("mouse::enter", function(c)
2022-07-19 19:45:11 +02:00
c:emit_signal("request::activate", "mouse_enter", {raise = false})
2022-07-19 15:24:06 +02:00
end)
2022-07-19 19:45:11 +02:00
-- ===================================================================
-- Screen Change Functions (ie multi monitor)
-- ===================================================================
-- Reload config when screen geometry changes
screen.connect_signal("property::geometry", awesome.restart)
-- ===================================================================
-- Garbage collection (allows for lower memory consumption)
-- ===================================================================
collectgarbage("setpause", 110)
collectgarbage("setstepmul", 1000)
require("awesomewm-vim-tmux-navigator") {
up = {"Up", "k"},
down = {"Down", "j"},
left = {"Left", "h"},
right = {"Right", "l"},
mod = "Mod4",
mod_keysym = "Super_L",
-- experimental = true
}
2022-07-19 22:11:37 +02:00
local handle_single_win = function(focused)
local hide = focused.maximized or focused.fullscreen
for i, c in ipairs(client.get()) do
if not c.floating and c.screen == focused.screen then
2022-07-23 19:13:05 +02:00
c.minimized = hide
2022-07-19 22:11:37 +02:00
end
end
2022-07-19 19:45:11 +02:00
2022-07-23 19:13:05 +02:00
focused.minimized = false
2022-07-19 22:11:37 +02:00
end
2022-07-23 19:13:05 +02:00
--
-- client.connect_signal("property::fullscreen", handle_single_win)
2022-07-19 22:11:37 +02:00
client.connect_signal("property::maximized", handle_single_win)