dotfiles/awesome/init.fnl
2020-10-07 07:36:56 -05:00

192 lines
9.5 KiB
Fennel

(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 globalkeys (require "globalkeys"))
;;; rules
(set awful.rules.rules rules)
;;; 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)
(local mykeyboardlayout (awful.widget.keyboardlayout))
(local mytextclock (wibox.widget.textclock " %a %b %d, %l:%M %p "))
;;; 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))
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 globalkeys)
;;; autostart applications
(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")