(local awful (require "awful")) (local gears (require "gears")) (require "awful.autofocus") (local ruled (require "ruled")) (local rules (require "rules")) (local beautiful (require "beautiful")) (local wibox (require "wibox")) (local xresources (require "beautiful.xresources")) ;; (local naughty (require "naughty")) (local menubar (require "menubar")) (local hotkeys_popup (require "awful.hotkeys_popup")) (local dpi xresources.apply_dpi) (local keybindings (require "keybindings")) ;; Modules (require "module.notifications") (require "module.backdrop") (require "module.volume-osd") (require "module.brigtness-osd") ;;; rules (set awful.rules.rules rules) ;; Variable definitions ;; Themes define colours, icons, font and wallpapers. (beautiful.init (.. (gears.filesystem.get_themes_dir) "default/theme.lua")) (var terminal "alacritty") (var editor (or (os.getenv "EDITOR") "emacsclient -a emacs")) (var editor_cmd (.. terminal " -e " editor)) ;; Default modkey. (var modkey "Mod4") (var altkey "Mod1") ;; Table of layouts to cover with awful.layout.inc, order matters. (set awful.layout.layouts [ awful.layout.suit.tile awful.layout.suit.magnifier 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.corner.nw ;; awful.layout.suit.corner.ne ;; awful.layout.suit.corner.sw ;; awful.layout.suit.corner.se ]) ;; Menu ;; Create a launcher widget and a main menu (global myawesomemenu [ [ "hotkeys" (fn [] (hotkeys_popup.show_help nil (awful.screen.focused))) ] [ "manual" (.. terminal " -e man awesome") ] [ "edit config" (.. editor_cmd " " awesome.conffile) ] [ "restart" awesome.restart ] [ "quit" (fn [] (awesome.quit)) ]]) (global mymainmenu (awful.menu {:items [ [ "awesome" myawesomemenu beautiful.awesome_icon ] [ "open terminal" terminal ]]})) (global mylauncher (awful.widget.launcher {:image beautiful.awesome_icon :menu mymainmenu })) ;; Menubar configuration (set menubar.utils.terminal terminal) ;; Set the terminal for applications that require it (local mykeyboardlayout (awful.widget.keyboardlayout)) (local mytextclock (wibox.widget.textclock " %a %b %d, %l:%M %p ")) ;; Create a wibox for each screen and add it (local taglist_buttons (gears.table.join (awful.button [] 1 (fn [t] (: t :view_only))) (awful.button [ modkey ] 1 (fn [t] (when client.focus (: client.focus :move_to_tag t)))) (awful.button [] 3 awful.tag.viewtoggle) (awful.button [ modkey ] 3 (fn [t] (when client.focus (: client.focus :toggle_tag t)))) (awful.button [] 4 (fn [t] (awful.tag.viewnext t.screen))) (awful.button [] 5 (fn [t] (awful.tag.viewprev t.screen))))) (local tasklist_buttons (gears.table.join (awful.button [] 1 (fn [c] (if (= c client.focus) (set c.minimized true) (: c :emit_signal "request::activate" "tasklist" {:raise true} )))) (awful.button [] 3 (fn [] (awful.menu.client_list {:theme {:width 250 }}))) (awful.button [] 4 (fn [] (awful.client.focus.byidx 1))) (awful.button [] 5 (fn [] (awful.client.focus.byidx -1))))) ;;; wallpaper (fn set_wallpaper [s] ;; Wallpaper (when beautiful.wallpaper (var wallpaper beautiful.wallpaper) ;; If wallpaper is a function, call it with the screen (when (= (type wallpaper) "function") (set wallpaper (wallpaper s))) (gears.wallpaper.maximized wallpaper s true))) ;; Re-set wallpaper when a screen's geometry changes (e.g. different resolution) (screen.connect_signal "property::geometry" set_wallpaper) ;; panel (awful.screen.connect_for_each_screen (fn [s] ;; Wallpaper (set_wallpaper s) ;; Each screen has its own tag table. (awful.tag [ "" "" "" "" ] s (. awful.layout.layouts 1)) ;; Create a promptbox for each screen (set 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. (set s.mylayoutbox (awful.widget.layoutbox s)) (: s.mylayoutbox :buttons (gears.table.join (awful.button [] 1 (fn [] (awful.layout.inc 1 s awful.layout.layouts))) (awful.button [] 3 (fn [] (awful.layout.inc -1 s))) (awful.button [] 4 (fn [] (awful.layout.inc 1 s))) (awful.button [] 5 (fn [] (awful.layout.inc -1 s))))) ;; create a systray widget (set s.mysystray { 1 (wibox.widget.systray) :widget wibox.container.background }) ;; Create a taglist widget (set s.mytaglist (awful.widget.taglist { :screen s :filter awful.widget.taglist.filter.all :buttons taglist_buttons })) ;; Create a tasklist widget ;; (set s.mytasklist (awful.widget.tasklist { ;; :screen s ;; :filter awful.widget.tasklist.filter.currenttags ;; :buttons tasklist_buttons ;; :style { ;; :border_width 0 ;; :border_color "#777777" ;; :shape gears.shape.rounded_bar ;; } ;; :layout { ;; :spacing 20 ;; :spacing_widget { ;; 1 { ;; :forced_width 5 ;; :forced_height (dpi 20) ;; :widget wibox.widget.seperator ;; } ;; :valign "center" ;; :halign "center" ;; :widget wibox.container.place ;; } ;; :layout wibox.layout.flex.horizontal ;; } ;; } ;; :widget_template { ;; 1 { ;; 1 { ;; 1 { ;; 1 { ;; :id "icon_role" ;; :widget wibox.widget.imagebox ;; } ;; :margins 2 ;; :widget wibox.container.margin ;; } ;; 2 { ;; :id "text_role" ;; :widget wibox.widget.textbox ;; } ;; :layout wibox.layout.align.horizontal ;; } ;; :left 10 ;; :right 10 ;; :widget wibox.container.margin ;; } ;; :id "background_role" ;; :widget wibox.container.background} )) ;; create battery network and volume widgets (set s.battery (require "widget.battery")) (set s.volume (require "widget.volume")) (set s.updater (require "widget.package-updater")) ;; create right widgets ;; (set s.myrightwidgets { ;; 1 { ;; :layout wibox.layout.fixed.horizontal ;; 1 s.volume ;; 2 s.mysystray ;; 3 s.updater ;; 4 s.battery ;; 5 (wibox.container.margin (s.mylayoutbox 0 (dpi 25) 0 0)) ;; } ;; :widget wibox.container.background}) ;; empty widget to use for spacing (set s.myemptywidget (wibox.widget { :markup "" :align "" :valign "" :widget wibox.widget.textbox })) (local yoffset (dpi 45)) (local xoffset (dpi 18)) (set s.mypanel (wibox.wibox { ;; :x (+ s.geometry.x xoffset) ;; :y (- s.geometry.height yoffset) :height (dpi 30) ;; :width (- s.geometry.width (* xoffset 2)) :ontop false :stretch false :type "dock" :shape gears.shape.rounded_bar :bg beautiful.bg_normal :fg beautiful.fg_normal :opacity 0.65 })) (: s.mypanel :struts { :bottom (dpi 40) }) (: s.mypanel :setup { :layout wibox.layout.align.horizontal :expand "outside" 1 { :layout wibox.layout.align.horizontal 1 (wibox.container.margin (s.mytaglist (dpi 15) 0 (dpi -3) 0)) ;; 2 (wibox.container.margin (s.mytasklist (dpi 25) (dpi 25) 0 0)) 2 s.myemptywidget 3 s.myemptywidget :spacing (dpi 15) } 2 mytextclock 3 { :layout wibox.layout.align.horizontal 1 s.myemptywidget 2 (wibox.container.margin (s.mypromptbox (dpi 25) (dpi 25) 0 0)) 3 s.myrightwidgets } :visible true }) (root.keys keybindings.globalkeys) ;; Signals ;; Signal function to execute when a new client appears. (client.connect_signal "manage" (fn [c] ;; Set the windows at the slave, ;; i.e. put it at the end of others instead of setting it master. (when (not awesome.startup) (awful.client.setslave c)) (when (and awesome.startup (not c.size_hints.user_position) (not c.size_hints.program_position)) ;; Prevent clients from being unreachable after screen count changes. (awful.placement.no_offscreen c)))) (client.connect_signal "focus" (fn [c] (set c.border_color beautiful.border_focus))) (client.connect_signal "unfocus" (fn [c] (set c.border_color beautiful.border_normal))) ;;; autostart applications ;;; Need to move to shell script (awful.spawn.with_shell "picom --experimental-backend") (awful.spawn.with_shell "xset r rate 220 90") (awful.spawn.with_shell "/usr/lib/polkit-kde-authentication-agent-1") (awful.spawn.with_shell "feh --bg-fill ~/Pictures/wallpapers/RoyalKing.png") (awful.spawn.with_shell "flameshot") (awful.spawn.with_shell "caffeine") (awful.spawn.with_shell "nextcloud --background") (awful.spawn.with_shell "emacs -daemon") (awful.spawn.with_shell "libinput-gestures-setup start")