Author | SHA1 | Message | Date |
---|---|---|---|
HMSheets | 5cc1fe9a31 | added gnome disk utility to packages | 4 years ago |
HMSheets | fb0a97847a | added dmenu and midnight commander to packages | 4 years ago |
HMSheets | c30c1f592c | commented out titlebar code | 4 years ago |
HMSheets | 7e142cd339 | changed terminal to sakura and editor to vscode | 4 years ago |
HMSheets | 1f51cafb5a | moved tile layout to top of layout list | 4 years ago |
HMSheets | b10aba1cc1 | sloppy focus commented out | 4 years ago |
HMSheets | 69a23f9e59 | added gaps | 4 years ago |
HMSheets | 439a3c2430 | home path modified | 4 years ago |
HMSheets | 1baa97f16e | fixed rc.lua config path | 4 years ago |
HMSheets | bcd3c71db6 | modified rc.conf target path | 4 years ago |
HMSheets | 9e538d722b | added git package | 4 years ago |
HMSheets | 51b5982613 | added xdg packages | 4 years ago |
HMSheets | b5d55e2a51 | enabled awesome rc.lua | 4 years ago |
HMSheets | ac1c15ba61 | awesome and home man conf | 4 years ago |
@@ -10,6 +10,8 @@ | |||||
imports = | imports = | ||||
[ # Include the results of the hardware scan. | [ # Include the results of the hardware scan. | ||||
./hardware-configuration.nix | ./hardware-configuration.nix | ||||
# home-manager config | |||||
#./home.nix | |||||
]; | ]; | ||||
#### Boot | #### Boot | ||||
@@ -30,12 +32,21 @@ | |||||
}; | }; | ||||
environment.systemPackages = with pkgs; [ | environment.systemPackages = with pkgs; [ | ||||
# Basics | # Basics | ||||
mc | |||||
git | |||||
wget | wget | ||||
youtube-dl | youtube-dl | ||||
tmux | tmux | ||||
neofetch | neofetch | ||||
sakura | sakura | ||||
firefox | firefox | ||||
home-manager | |||||
gnome3.gnome-disk-utility | |||||
# WM Helpers | |||||
dmenu | |||||
# xdg | |||||
xdg-user-dirs | |||||
xdg_utils | |||||
# Editors | # Editors | ||||
vscode | vscode | ||||
nano | nano | ||||
@@ -102,7 +113,7 @@ | |||||
#### User | #### User | ||||
users.users.hms = { | users.users.hms = { | ||||
isNormalUser = true; | isNormalUser = true; | ||||
home = "/home/hms/"; | |||||
home = "/home/hms"; | |||||
extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. | extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. | ||||
}; | }; | ||||
@@ -0,0 +1,27 @@ | |||||
{ config, pkgs, ... }: | |||||
{ | |||||
# Let Home Manager install and manage itself. | |||||
programs.home-manager.enable = true; | |||||
# awesome window manager config | |||||
## xdg will automaticly append /home/USER-NAME/.config/ to the "something".source part of the | |||||
## xdg.configFile."something".source = "/etc/nixos/wm/awesome/rc.lua"; config option | |||||
xdg.configFile."awesome/rc.lua".source = "/etc/nixos/wm/awesome/rc.lua"; | |||||
# Home Manager needs a bit of information about you and the | |||||
# paths it should manage. | |||||
home.username = "hms"; | |||||
home.homeDirectory = "/home/hms"; | |||||
# This value determines the Home Manager release that your | |||||
# configuration is compatible with. This helps avoid breakage | |||||
# when a new Home Manager release introduces backwards | |||||
# incompatible changes. | |||||
# | |||||
# You can update Home Manager without changing this value. See | |||||
# the Home Manager release notes for a list of state version | |||||
# changes in each release. | |||||
home.stateVersion = "20.09"; | |||||
} |
@@ -0,0 +1,589 @@ | |||||
-- 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") | |||||
-- @DOC_REQUIRE_SECTION@ | |||||
-- 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") | |||||
-- {{{ Error handling | |||||
-- @DOC_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 | |||||
-- @DOC_LOAD_THEME@ | |||||
-- Themes define colours, icons, font and wallpapers. | |||||
beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua") | |||||
-- @DOC_DEFAULT_APPLICATIONS@ | |||||
-- This is used later as the default terminal and editor to run. | |||||
terminal = "xterm" | |||||
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 = "Mod4" | |||||
-- @DOC_LAYOUT@ | |||||
-- Table of layouts to cover with awful.layout.inc, order matters. | |||||
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, | |||||
} | |||||
-- }}} | |||||
-- {{{ Menu | |||||
-- @DOC_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() | |||||
-- Create a wibox for each screen and add it | |||||
-- @TAGLIST_BUTTON@ | |||||
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) | |||||
) | |||||
-- @TASKLIST_BUTTON@ | |||||
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)) | |||||
-- @DOC_WALLPAPER@ | |||||
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) | |||||
-- @DOC_FOR_EACH_SCREEN@ | |||||
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", "6", "7", "8", "9" }, 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 | |||||
} | |||||
-- @DOC_WIBAR@ | |||||
-- Create the wibox | |||||
s.mywibox = awful.wibar({ position = "top", screen = s }) | |||||
-- @DOC_SETUP_WIDGETS@ | |||||
-- 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 | |||||
-- @DOC_ROOT_BUTTONS@ | |||||
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 | |||||
-- @DOC_GLOBAL_KEYBINDINGS@ | |||||
globalkeys = gears.table.join( | |||||
awful.key({ modkey, }, "s", hotkeys_popup.show_help, | |||||
{description="show help", group="awesome"}), | |||||
awful.key({ modkey, }, "Left", awful.tag.viewprev, | |||||
{description = "view previous", group = "tag"}), | |||||
awful.key({ modkey, }, "Right", awful.tag.viewnext, | |||||
{description = "view next", group = "tag"}), | |||||
awful.key({ modkey, }, "Escape", awful.tag.history.restore, | |||||
{description = "go back", group = "tag"}), | |||||
awful.key({ modkey, }, "j", | |||||
function () | |||||
awful.client.focus.byidx( 1) | |||||
end, | |||||
{description = "focus next by index", group = "client"} | |||||
), | |||||
awful.key({ modkey, }, "k", | |||||
function () | |||||
awful.client.focus.byidx(-1) | |||||
end, | |||||
{description = "focus previous by index", group = "client"} | |||||
), | |||||
awful.key({ modkey, }, "w", function () mymainmenu:show() end, | |||||
{description = "show main menu", group = "awesome"}), | |||||
-- Layout manipulation | |||||
awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end, | |||||
{description = "swap with next client by index", group = "client"}), | |||||
awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end, | |||||
{description = "swap with previous client by index", 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, }, "l", function () awful.tag.incmwfact( 0.05) end, | |||||
{description = "increase master width factor", group = "layout"}), | |||||
awful.key({ modkey, }, "h", 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"}) | |||||
) | |||||
-- @DOC_CLIENT_KEYBINDINGS@ | |||||
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"}) | |||||
) | |||||
-- @DOC_NUMBER_KEYBINDINGS@ | |||||
-- 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 | |||||
-- @DOC_CLIENT_BUTTONS@ | |||||
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). | |||||
-- @DOC_RULES@ | |||||
awful.rules.rules = { | |||||
-- @DOC_GLOBAL_RULE@ | |||||
-- 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 | |||||
} | |||||
}, | |||||
-- @DOC_FLOATING_RULE@ | |||||
-- 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 }}, | |||||
-- @DOC_DIALOG_RULE@ | |||||
-- Add titlebars to normal clients and dialogs | |||||
{ rule_any = {type = { "normal", "dialog" } | |||||
-- @DOC_CSD_TITLEBARS@ | |||||
}, 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. | |||||
-- @DOC_MANAGE_HOOK@ | |||||
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) | |||||
-- @DOC_TITLEBARS@ | |||||
-- 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) | |||||
-- @DOC_BORDER@ | |||||
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) | |||||
-- }}} |
@@ -0,0 +1,592 @@ | |||||
-- 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") | |||||
-- @DOC_REQUIRE_SECTION@ | |||||
-- 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") | |||||
-- {{{ Error handling | |||||
-- @DOC_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 | |||||
-- @DOC_LOAD_THEME@ | |||||
-- Themes define colours, icons, font and wallpapers. | |||||
beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua") | |||||
-- @DOC_DEFAULT_APPLICATIONS@ | |||||
-- This is used later as the default terminal and editor to run. | |||||
terminal = "sakura" | |||||
editor = os.getenv("code") 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 = "Mod4" | |||||
-- @DOC_LAYOUT@ | |||||
-- 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.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, | |||||
} | |||||
-- }}} | |||||
-- {{{ Menu | |||||
-- @DOC_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() | |||||
-- Create a wibox for each screen and add it | |||||
-- @TAGLIST_BUTTON@ | |||||
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) | |||||
) | |||||
-- @TASKLIST_BUTTON@ | |||||
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)) | |||||
-- @DOC_WALLPAPER@ | |||||
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) | |||||
-- @DOC_FOR_EACH_SCREEN@ | |||||
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", "6", "7", "8", "9" }, 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 | |||||
} | |||||
-- @DOC_WIBAR@ | |||||
-- Create the wibox | |||||
s.mywibox = awful.wibar({ position = "top", screen = s }) | |||||
-- @DOC_SETUP_WIDGETS@ | |||||
-- 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 | |||||
-- @DOC_ROOT_BUTTONS@ | |||||
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 | |||||
-- @DOC_GLOBAL_KEYBINDINGS@ | |||||
globalkeys = gears.table.join( | |||||
awful.key({ modkey, }, "s", hotkeys_popup.show_help, | |||||
{description="show help", group="awesome"}), | |||||
awful.key({ modkey, }, "Left", awful.tag.viewprev, | |||||
{description = "view previous", group = "tag"}), | |||||
awful.key({ modkey, }, "Right", awful.tag.viewnext, | |||||
{description = "view next", group = "tag"}), | |||||
awful.key({ modkey, }, "Escape", awful.tag.history.restore, | |||||
{description = "go back", group = "tag"}), | |||||
awful.key({ modkey, }, "j", | |||||
function () | |||||
awful.client.focus.byidx( 1) | |||||
end, | |||||
{description = "focus next by index", group = "client"} | |||||
), | |||||
awful.key({ modkey, }, "k", | |||||
function () | |||||
awful.client.focus.byidx(-1) | |||||
end, | |||||
{description = "focus previous by index", group = "client"} | |||||
), | |||||
awful.key({ modkey, }, "w", function () mymainmenu:show() end, | |||||
{description = "show main menu", group = "awesome"}), | |||||
-- Layout manipulation | |||||
awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end, | |||||
{description = "swap with next client by index", group = "client"}), | |||||
awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end, | |||||
{description = "swap with previous client by index", 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, }, "l", function () awful.tag.incmwfact( 0.05) end, | |||||
{description = "increase master width factor", group = "layout"}), | |||||
awful.key({ modkey, }, "h", 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"}) | |||||
) | |||||
-- @DOC_CLIENT_KEYBINDINGS@ | |||||
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"}) | |||||
) | |||||
-- @DOC_NUMBER_KEYBINDINGS@ | |||||
-- 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 | |||||
-- @DOC_CLIENT_BUTTONS@ | |||||
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). | |||||
-- @DOC_RULES@ | |||||
awful.rules.rules = { | |||||
-- @DOC_GLOBAL_RULE@ | |||||
-- 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 | |||||
} | |||||
}, | |||||
-- @DOC_FLOATING_RULE@ | |||||
-- 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 }}, | |||||
-- @DOC_DIALOG_RULE@ | |||||
--[[ -- Add titlebars to normal clients and dialogs | |||||
{ rule_any = {type = { "normal", "dialog" } | |||||
-- @DOC_CSD_TITLEBARS@ | |||||
}, 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. | |||||
-- @DOC_MANAGE_HOOK@ | |||||
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) | |||||
-- @DOC_TITLEBARS@ | |||||
-- 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) ]] | |||||
-- @DOC_BORDER@ | |||||
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) | |||||
-- }}} | |||||
-- gaps | |||||
beautiful.useless_gap = 5 |