feat: eww workspaces

This commit is contained in:
hesam-init 2024-06-28 09:56:54 +03:30
parent 2a1ec8967b
commit dccad1e64e
12 changed files with 564 additions and 476 deletions

View file

@ -12,7 +12,7 @@ declare -A PACKAGES=(
["BASE_PACKAGES"]="inetutils v4l2loopback bind-utils zellij bat dust aria2 fzf neofetch bat zsh fish-shell brightnessctl bluez cronie git stow eza dbus seatd elogind polkit NetworkManager gnome-keyring polkit-gnome pipewire wireplumber inotify-tools xorg gnome-keyring polkit-gnome mtpfs ffmpeg libnotify" ["BASE_PACKAGES"]="inetutils v4l2loopback bind-utils zellij bat dust aria2 fzf neofetch bat zsh fish-shell brightnessctl bluez cronie git stow eza dbus seatd elogind polkit NetworkManager gnome-keyring polkit-gnome pipewire wireplumber inotify-tools xorg gnome-keyring polkit-gnome mtpfs ffmpeg libnotify"
["DEVEL_PACKAGES"]="glib pango-devel gdk-pixbuf-devel libdbusmenu-gtk3-devel glib-devel gtk+3-devel gtk-layer-shell-devel base-devel startup-notification-devel cairo-devel xcb-util-devel xcb-util-cursor-devel xcb-util-xrm-devel xcb-util-wm-devel" ["DEVEL_PACKAGES"]="glib pango-devel gdk-pixbuf-devel libdbusmenu-gtk3-devel glib-devel gtk+3-devel gtk-layer-shell-devel base-devel startup-notification-devel cairo-devel xcb-util-devel xcb-util-cursor-devel xcb-util-xrm-devel xcb-util-wm-devel"
["AMD_DRIVERS"]="opencv Vulkan-Headers Vulkan-Tools Vulkan-ValidationLayers-32bit mesa-vulkan-radeon mesa-vulkan-radeon-32bit vulkan-loader vulkan-loader-32bit libspa-vulkan libspa-vulkan-32bit amdvlk mesa-dri mesa-vaapi" ["AMD_DRIVERS"]="opencv Vulkan-Headers Vulkan-Tools Vulkan-ValidationLayers-32bit mesa-vulkan-radeon mesa-vulkan-radeon-32bit vulkan-loader vulkan-loader-32bit libspa-vulkan libspa-vulkan-32bit amdvlk mesa-dri mesa-vaapi"
["HYPRLAND_PACKAGES"]="eww nerd-fonts-symbols-ttf Waybar avizo dunst swaybg mpvpaper grim jq slurp cliphist wl-clipboard swayidle pavucontrol nemo eog pavucontrol evince xorg-server-xwayland xdg-desktop-portal-gtk xdg-desktop-portal-wlr xdg-utils qt5-x11extras qt5-wayland qt6-wayland" ["HYPRLAND_PACKAGES"]="socat eww nerd-fonts-symbols-ttf Waybar avizo dunst swaybg mpvpaper grim jq slurp cliphist wl-clipboard swayidle pavucontrol nemo eog pavucontrol evince xorg-server-xwayland xdg-desktop-portal-gtk xdg-desktop-portal-wlr xdg-utils qt5-x11extras qt5-wayland qt6-wayland"
["SYSTEM_APPS"]="alacritty octoxbps blueman wifish wpa_gui glow" ["SYSTEM_APPS"]="alacritty octoxbps blueman wifish wpa_gui glow"
) )

View file

@ -1,68 +1,84 @@
.widget {
padding: 5px 5px;
border-radius: 5px;
background-color: $surface0;
margin: 5px 2px;
color: $white0;
// border-style: solid;
// border-color: $white0;
// border-width: 2px;
}
.barwidget { .barwidget {
background-color: $base; background-color: $base;
padding: 5px; padding: 5px;
} }
.icon { .icon {
font-size: 20px; font-size: 20px;
min-width: 1em; min-width: 1em;
min-height: 1em; min-height: 1em;
font-family: "Symbols Nerd Font"; font-family: "Symbols Nerd Font";
padding: 2px 0px; padding: 2px 0px;
} }
.revealtouch { .revealtouch {
font-size: 20px; font-size: 20px;
margin: 5px 0px; margin: 5px 0px;
color: $surface2; color: $surface2;
} }
.workspaces { .workspaces {
padding: 5px; @extend .widget;
}
.workspaces label { * {
font-size: 18; transition: all cubic-bezier(0.165, 0.84, 0.44, 1) 500ms;
padding-right: 5px; }
padding: 2px 5px 2px 0px;
}
.widget { .workspace {
padding: 5px 5px; margin: 6px;
border-radius: 5px; border-radius: 4px;
background-color: $surface0; }
margin: 5px 2px;
color: $white0; .workspacething {
// border-style: solid; background-color: $surface2;
// border-color: $white0; }
// border-width: 2px;
.workspacethingactive {
background-color: $accent;
}
.label {
// font-size: 18;
// padding-right: 5px;
// padding: 2px 5px 2px 0px;
}
} }
.clock label { .clock label {
font-size: 20px; font-size: 20px;
} }
.bat_scale trough{ .bat_scale trough {
min-height: 50px; min-height: 50px;
min-width: 18px; min-width: 18px;
border-radius: 5px; border-radius: 5px;
slider { slider {
all: unset; all: unset;
} }
} }
.bat_scale trough highlight{ .bat_scale trough highlight {
border-radius: 5px; border-radius: 5px;
background-color: $accent; background-color: $accent;
} }
.charging trough highlight { .charging trough highlight {
background-color: $green; background-color: $green;
} }
.dying trough highlight { .dying trough highlight {
background-color: $red; background-color: $red;
} }
// .mpd label { // .mpd label {
@ -74,87 +90,73 @@
// } // }
.mpd_controls label { .mpd_controls label {
font-family: "Symbols Nerd Font"; font-family: "Symbols Nerd Font";
min-width: 1em; min-width: 1em;
min-height: 1em; min-height: 1em;
font-size: 30px; font-size: 30px;
padding: 15px; padding: 15px;
} }
.seektime { .seektime {
trough { trough {
min-height: 10px; min-height: 10px;
min-width: 180px; min-width: 180px;
slider { slider {
background-color: $white2; background-color: $white2;
border-radius: 25px; border-radius: 25px;
min-height: 20px; min-height: 20px;
min-width: 20px; min-width: 20px;
margin: -10px; margin: -10px;
}
highlight {
background-color: $red;
}
} }
highlight {
background-color: $red;
}
}
} }
.sidempdctl { .sidempdctl {
margin: 5px; margin: 5px;
label { label {
font-size: 30px; font-size: 30px;
padding-right: 5px; padding-right: 5px;
min-height: 1em; min-height: 1em;
min-width: 1em; min-width: 1em;
} }
} }
.mpdvolumeseek { .mpdvolumeseek {
@extend .seektime; @extend .seektime;
trough { trough {
min-height: 100px; min-height: 100px;
min-width: 10px; min-width: 10px;
highlight { highlight {
background-color: $white0; background-color: $white0;
}
} }
}
} }
.touch label { .touch label {
font-size: 20px; font-size: 20px;
} }
.mtitle { .mtitle {
color: $white0; color: $white0;
font-size: 20px; font-size: 20px;
margin-top: 30px; margin-top: 30px;
} }
.launchicon { .launchicon {
@extend .icon; @extend .icon;
color: $accent; color: $accent;
} }
.picon { .picon {
@extend .icon; @extend .icon;
font-size: 18px; font-size: 18px;
} }
.lightning { .lightning {
color: $surface0 color: $surface0;
}
.workspacething, .workspacethingactive {
transition: 500ms;
border-radius: 5;
margin: 6px;
}
.workspacething {
background-color: $surface2;
}
.workspacethingactive {
background-color: $accent;
} }

View file

@ -1,5 +1,5 @@
(defwindow bar (defwindow bar
:geometry (geometry :geometry (geometry
:x "0%" :x "0%"
:y "0%" :y "0%"
@ -14,6 +14,7 @@
:wm-ignore false :wm-ignore false
(barstruct)) (barstruct))
(defwidget barstruct [] (defwidget barstruct []
(box (box
:orientation "h" :orientation "h"
@ -32,7 +33,7 @@
(bottom) (bottom)
))) )))
(defwidget top [] (defwidget top []
(box (box
:orientation "v" :orientation "v"
:space-evenly false :space-evenly false
@ -45,7 +46,7 @@
(hiddenctl) (hiddenctl)
)) ))
(defwidget middle [] (defwidget middle []
(box (box
:orientation "v" :orientation "v"
:space-evenly false :space-evenly false
@ -66,25 +67,57 @@
:hexpand false :hexpand false
(stray) (stray)
(sliders) (sliders)
(battery)
(clock) (clock)
; (battery)
)) ))
(defvar show_no_of_windows false)
(deflisten workspacesdata :initial "[]" "./scripts/workspaces get-all-workspaces")
(defpoll current_workspace :initial "0" :interval "50ms" "./scripts/workspaces get-active-workspace")
(defwidget workspaces [] (defwidget workspaces []
(eventbox (eventbox
:cursor "pointer" :cursor "pointer"
:onscroll "./scripts/workspaces change {} ${current_workspace}"
:onhover "eww update show_no_of_windows=true"
:onhoverlost "eww update show_no_of_windows=false"
(box (box
:class "workspaces widget" :class "workspaces"
:orientation "v" :space-evenly false
:space-evenly false :orientation "v"
(for workspace in {workspacejson} (for workspace in {workspacesdata}
(button (button
:onclick "swaymsg -t command workspace number ${workspace.name}" :onclick "hyprctl dispatch workspace ${workspace.id}"
(box (box
:hexpand false :hexpand false
:width 10 :width 10
:height { workspace.focused ? 60 : !workspace.empty ? 40 : 30} :height { workspace.id == current_workspace ? 60 : 35 }
:class { workspace.focused ? "workspacethingactive" : "workspacething"})))))) :class "workspace ${workspace.id == current_workspace ? "workspacethingactive" : "workspacething"}"
)
)
)
)
)
)
; (defwidget workspaces []
; (eventbox
; :cursor "pointer"
; (box
; :class "workspaces widget"
; :orientation "v"
; :space-evenly false
; (for workspace in {workspacejson}
; (button
; :onclick "swaymsg -t command workspace number ${workspace.name}"
; (box
; :hexpand false
; :width 10
; :height { workspace.focused ? 60 : !workspace.empty ? 40 : 30}
; :class { workspace.focused ? "workspacethingactive" : "workspacething"}))))))
(defwidget home [] (defwidget home []
(box (box

View file

@ -1 +1 @@
@import "./themes/oxocarbon.scss" @import "./themes/oxocarbon.scss";

View file

@ -1,17 +1,17 @@
(defwindow control_panel (defwindow control_panel
:geometry (geometry :geometry (geometry
:x 10 :x 10
:y 10 :y 10
:width 340 :width 340
:height 1000 :height 1000
:anchor "top left" :anchor "top left"
) )
:stacking "overlay" :stacking "overlay"
:monitor 0 :monitor 0
(control_widget)) (control_widget))
(defwidget control_widget[?short] (defwidget control_widget[?short]
(box (box
:class "controlpanelwindow" :class "controlpanelwindow"
:space-evenly false :space-evenly false
:orientation "v" :orientation "v"
@ -21,80 +21,80 @@
(chooser) (chooser)
;; (weather) ;; (weather)
(coolmpd :h 150 :permashow true) (coolmpd :h 150 :permashow true)
(box (box
:orientation "h" :orientation "h"
:space-evenly false :space-evenly false
:height 160 :height 160
:halign "fill" :halign "fill"
(timer) (timer)
(bigslide)) (bigslide))
(box (box
:space-evenly false :space-evenly false
:orientation "v" :orientation "v"
:vexpand true :vexpand true
:visible {!short} :visible {!short}
(tricontrol) (tricontrol)
(notiweathertoggle)) (notiweathertoggle))
)) ))
(defwidget tricontrol[] (defwidget tricontrol[]
(eventbox (eventbox
:cursor "pointer" :cursor "pointer"
(box (box
:class "tricontrol unbarwidget" :class "tricontrol unbarwidget"
:orientation "h" :orientation "h"
:space-evenly true :space-evenly true
:height 60 :height 60
:halign "fill" :halign "fill"
(button :onclick "./scripts/pop colourpick" (label :text "󰈊")) (button :onclick "./scripts/pop colourpick" (label :text "󰈊"))
(button :onclick "./scripts/pop scrop" (label :text "󰆞")) (button :onclick "./scripts/pop scrop" (label :text "󰆞"))
(button :onclick "~/.config/eww/themeswitch/scripts/pop" (label :text ""))))) (button :onclick "~/.config/eww/themeswitch/scripts/pop" (label :text "")))))
(defwidget chooser [] (defwidget chooser []
(box (box
:orientation "v" :orientation "v"
:halign "fill" :halign "fill"
:height 60 :height 60
:class "unbarwidget" :class "unbarwidget"
:space-evenly false :space-evenly false
(box (box
:orientation "h" :orientation "h"
(button (button
:onclick "${EWW_CMD} update reveal4=${!reveal4} reveal5=false reveal6=false" :onclick "${EWW_CMD} update reveal4=${!reveal4} reveal5=false reveal6=false"
:onrightclick "foot nvim ~/Documents/fuck.txt" :onrightclick "foot nvim ~/Documents/fuck.txt"
(label :class {reveal4 ? "titlesel" : "title"} :text "Notes")) (label :class {reveal4 ? "titlesel" : "title"} :text "Notes"))
(button (button
:onclick "${EWW_CMD} update reveal5=${!reveal5} reveal4=false reveal6=false" :onclick "${EWW_CMD} update reveal5=${!reveal5} reveal4=false reveal6=false"
(label :class {reveal5 ? "titlesel" : "title"} :text "System")) (label :class {reveal5 ? "titlesel" : "title"} :text "System"))
(button (button
:onclick "${EWW_CMD} update reveal6=${!reveal6} reveal5=false reveal4=false" :onclick "${EWW_CMD} update reveal6=${!reveal6} reveal5=false reveal4=false"
(label :class {reveal6 ? "titlesel" : "title"} :text "Sway"))) (label :class {reveal6 ? "titlesel" : "title"} :text "Sway")))
(notes) (notes)
(sysinfo) (sysinfo)
(wmctrl))) (wmctrl)))
(defwidget notes [] (defwidget notes []
(revealer (revealer
:reveal reveal4 :reveal reveal4
:transition "slideup" :transition "slideup"
(box (box
:height 140 :height 140
(box (box
:orientation "h" :orientation "h"
(scroll (scroll
:hscroll true :hscroll true
:vscroll true :vscroll true
(label :text notesc)))))) (label :text notesc))))))
(defwidget wmctrl [] (defwidget wmctrl []
(revealer (revealer
:reveal reveal6 :reveal reveal6
:transition "slideup" :transition "slideup"
(scroll (scroll
:hscroll false :hscroll false
:vscroll true :vscroll true
:height 140 :height 140
(box (box
@ -102,70 +102,70 @@
:valign "fill" :valign "fill"
:space-evenly false :space-evenly false
:spacing 5 :spacing 5
(wmslider (wmslider
:name "gaps outer" :name "gaps outer"
:val gapsouter :val gapsouter
:onchange "swaymsg gaps outer all set {}" :onchange "swaymsg gaps outer all set {}"
:max 300 :max 300
:reset "${EWW_CMD} update gapsouter=0 && swaymsg gaps outer all set 0") :reset "${EWW_CMD} update gapsouter=0 && swaymsg gaps outer all set 0")
(wmslider (wmslider
:name "gaps inner" :name "gaps inner"
:val gapsinner :val gapsinner
:onchange "swaymsg gaps inner all set {}" :onchange "swaymsg gaps inner all set {}"
:max 150 :max 150
:reset "${EWW_CMD} update gapsinner=15 && swaymsg gaps inner all set 15") :reset "${EWW_CMD} update gapsinner=15 && swaymsg gaps inner all set 15")
(wmslider (wmslider
:name "border size" :name "border size"
:val borderpixel :val borderpixel
:onchange "swaymsg default_border pixel {} && swaymsg '[app_id=\".*\"] border pixel {}'" :onchange "swaymsg default_border pixel {} && swaymsg '[app_id=\".*\"] border pixel {}'"
:max 50 :max 50
:reset "${EWW_CMD} update borderpixel=2 && swaymsg default_border pixel 2 && swaymsg '[app_id=\".*\"] border pixel 2'") :reset "${EWW_CMD} update borderpixel=2 && swaymsg default_border pixel 2 && swaymsg '[app_id=\".*\"] border pixel 2'")
(box (box
:orientation "h" :orientation "h"
:space-evenly false :space-evenly false
:halign "center" :halign "center"
:spacing 10 :spacing 10
(label :text "natural scrolling") (label :text "natural scrolling")
(checkbox (checkbox
:onchecked "swaymsg input \"type:touchpad\" natural_scroll enable" :onchecked "swaymsg input \"type:touchpad\" natural_scroll enable"
:onunchecked "swaymsg input \"type:touchpad\" natural_scroll disable")) :onunchecked "swaymsg input \"type:touchpad\" natural_scroll disable"))
(box (box
:orientation "h" :orientation "h"
:space-evenly false :space-evenly false
:halign "center" :halign "center"
:spacing 10 :spacing 10
(label :text "disable when typing") (label :text "disable when typing")
(checkbox (checkbox
:onchecked "swaymsg input \"type:touchpad\" dwt enable" :onchecked "swaymsg input \"type:touchpad\" dwt enable"
:onunchecked "swaymsg input \"type:touchpad\" dwt disable" :onunchecked "swaymsg input \"type:touchpad\" dwt disable"
)) ))
(box (box
:orientation "h" :orientation "h"
:space-evenly false :space-evenly false
:halign "center" :halign "center"
:spacing 10 :spacing 10
(label :text "caffeine") (label :text "caffeine")
(checkbox (checkbox
:onchecked "swaymsg [app_id='.*'] inhibit_idle open && ${EWW_CMD} update caffeine=true" :onchecked "swaymsg [app_id='.*'] inhibit_idle open && ${EWW_CMD} update caffeine=true"
:onunchecked "swaymsg [app_id='.*'] inhibit_idle none && ${EWW_CMD} update caffeine=false" :onunchecked "swaymsg [app_id='.*'] inhibit_idle none && ${EWW_CMD} update caffeine=false"
)) ))
)))) ))))
(defwidget sysinfo [] (defwidget sysinfo []
(revealer (revealer
:reveal reveal5 :reveal reveal5
:transition "slideup" :transition "slideup"
(box (box
:orientation "h" :orientation "h"
:height 140 :height 140
(systat :icon "󰻠" :val { EWW_CPU.avg }) (systat :icon "󰻠" :val { EWW_CPU.avg })
(systat :icon "󰍛" :val { EWW_RAM.used_mem_perc }) (systat :icon "󰍛" :val { EWW_RAM.used_mem_perc })
(systat :icon "" :val { EWW_BATTERY.BAT0.capacity }) (systat :icon "" :val { EWW_BATTERY.BAT0.capacity })
))) )))
(defwidget wmslider [name val onchange max reset] (defwidget wmslider [name val onchange max reset]
(box (box
:orientation "h" :orientation "h"
:space-evenly false :space-evenly false
:halign "center" :halign "center"
@ -173,29 +173,29 @@
:vexpand false :vexpand false
:valign "center" :valign "center"
:spacing 10 :spacing 10
(label (label
:text name) :text name)
(scale (scale
:min 0 :min 0
:max max :max max
:class "wmctrlslide" :class "wmctrlslide"
:tooltip val :tooltip val
:value val :value val
:onchange onchange) :onchange onchange)
(button (button
:onclick reset :onclick reset
:style "padding: 0px 8px 0px 3px;" :style "padding: 0px 8px 0px 3px;"
""))) "")))
(defwidget systat [icon val] (defwidget systat [icon val]
(overlay (overlay
(circular-progress (circular-progress
:halign "center" :halign "center"
:valign "center" :valign "center"
:class "circsys" :class "circsys"
:thickness 40 :thickness 40
:value val) :value val)
(box (box
:class "circiconcontain" :class "circiconcontain"
:halign "center" :halign "center"
@ -210,7 +210,7 @@
:transition "slideup" :transition "slideup"
(box (box
:orientation "h" :orientation "h"
:space-evenly false :space-evenly false
:height 140 :height 140
:width 320 :width 320
:class "unbarwidget" :class "unbarwidget"
@ -219,7 +219,7 @@
:hexpand true :hexpand true
(image :style "margin: 10px;" :image-width 80 :image-height 80 :path "./image/fieshidle.gif") (image :style "margin: 10px;" :image-width 80 :image-height 80 :path "./image/fieshidle.gif")
(scroll (scroll
:hscroll true :hscroll true
:vscroll false :vscroll false
:hexpand true :hexpand true
(box (box
@ -232,37 +232,37 @@
(label :halign "start" :text uptime :style "font-size: 12px;")))))) (label :halign "start" :text uptime :style "font-size: 12px;"))))))
(defwidget notiweathertoggle[] (defwidget notiweathertoggle[]
(box (box
:orientation "v" :orientation "v"
:halign "fill" :halign "fill"
:valign "fill" :valign "fill"
:vexpand true :vexpand true
:class "unbarwidget" :class "unbarwidget"
:space-evenly false :space-evenly false
(box (box
:orientation "h" :orientation "h"
(button (button
:onclick "${EWW_CMD} update revealweather=false" :onclick "${EWW_CMD} update revealweather=false"
(label :class {!revealweather ? "titlesel" : "title"} :text "Notifications")) (label :class {!revealweather ? "titlesel" : "title"} :text "Notifications"))
(button (button
:onclick "${EWW_CMD} update revealweather=true" :onclick "${EWW_CMD} update revealweather=true"
(label :class {revealweather ? "titlesel" : "title"} :text "Weather"))) (label :class {revealweather ? "titlesel" : "title"} :text "Weather")))
(box (box
:orientation "h" :orientation "h"
:vexpand true :vexpand true
:hexpand true :hexpand true
:space-evenly false :space-evenly false
(revealer (revealer
:reveal {!revealweather} :reveal {!revealweather}
:transition "slideright" :transition "slideright"
(notificationlog)) (notificationlog))
(revealer (revealer
:reveal revealweather :reveal revealweather
:transition "slideleft" :transition "slideleft"
(weather))))) (weather)))))
(defwidget weather[] (defwidget weather[]
(overlay (overlay
(box (box
:orientation "v" :orientation "v"
@ -270,51 +270,51 @@
:valign "fill" :valign "fill"
:width 320 :width 320
:vexpand true :vexpand true
:space-evenly false :space-evenly false
(weathermain) (weathermain)
(scroll (scroll
:hscroll false :hscroll false
:vscroll true :vscroll true
:vexpand true :vexpand true
(box (box
:orientation "v" :orientation "v"
:valign "start" :valign "start"
:space-evenly false :space-evenly false
(for hour in {weatherjson.hourly} (for hour in {weatherjson.hourly}
(weatherhour :hour hour))))) (weatherhour :hour hour)))))
(box (box
:valign "end" :valign "end"
:hexpand true :hexpand true
:vexpand false :vexpand false
:height 80 :height 80
:class "fadeoutbox") :class "fadeoutbox")
)) ))
(defwidget weatherhour[hour] (defwidget weatherhour[hour]
(box (box
:class "smallentry" :class "smallentry"
:orientation "h" :orientation "h"
:height 80 :height 80
:halign "fill" :halign "fill"
:valign "center" :valign "center"
:vexpand false :vexpand false
:space-evenly true :space-evenly true
:spacing 10 :spacing 10
(label :style "font-size: 20px;" :text {hour.time}) (label :style "font-size: 20px;" :text {hour.time})
(image (image
:image-width 50 :image-width 50
:image-height 50 :image-height 50
:path "./image/weather/${hour.icon}.svg") :path "./image/weather/${hour.icon}.svg")
(box (box
:orientation "v" :orientation "v"
:space-evenly false :space-evenly false
:valign "center" :valign "center"
:spacing 10 :spacing 10
(label :halign "start" :text "${hour.FeelsLikeC}°C") (label :halign "start" :text "${hour.FeelsLikeC}°C")
(label :halign "start" :text "rain: ${hour.chanceofrain}%")))) (label :halign "start" :text "rain: ${hour.chanceofrain}%"))))
(defwidget weathermain[] (defwidget weathermain[]
(box (box
:class "mainentry" :class "mainentry"
:orientation "h" :orientation "h"
:halign "fill" :halign "fill"
@ -322,12 +322,12 @@
:space-evenly false :space-evenly false
:spacing 10 :spacing 10
(image (image
:image-width 100 :image-width 100
:image-height 100 :image-height 100
:style "margin: 10px;" :style "margin: 10px;"
:path "./image/weather/${weatherjson.icon}.svg") :path "./image/weather/${weatherjson.icon}.svg")
(scroll (scroll
:hscroll true :hscroll true
:vscroll false :vscroll false
:valign "fill" :valign "fill"
:hexpand true :hexpand true
@ -338,7 +338,7 @@
(label :halign "start" :text "← ${weatherjson.windspeedKmph} km/h") (label :halign "start" :text "← ${weatherjson.windspeedKmph} km/h")
;; (label :halign "start" :text "${weatherjson.visibility} km") ;; (label :halign "start" :text "${weatherjson.visibility} km")
;; (label :halign "start" :text "${weatherjson.precipMM} mm") ;; (label :halign "start" :text "${weatherjson.precipMM} mm")
)))) ))))
(defwidget timer[] (defwidget timer[]
(box (box
@ -366,9 +366,9 @@
(bigvol) (bigvol)
(bigbright))) (bigbright)))
(defwidget bigvol [] (defwidget bigvol []
(overlay (overlay
(scale (scale
:width 50 :width 50
:class "bigslide" :class "bigslide"
:value volume :value volume
@ -377,15 +377,15 @@
:tooltip "${volume}%" :tooltip "${volume}%"
:max 100 :max 100
:min 0 :min 0
:flipped true) :flipped true)
(label (label
:class "slideicon" :class "slideicon"
:valign "end" :valign "end"
:text {volumemute == 'false' ? "󰕾" : "󰖁"}))) :text {volumemute == 'false' ? "󰕾" : "󰖁"})))
(defwidget bigbright [] (defwidget bigbright []
(overlay (overlay
(scale (scale
:width 50 :width 50
:class "bigslide" :class "bigslide"
:value brightness :value brightness
@ -394,19 +394,19 @@
:tooltip "${brightness}%" :tooltip "${brightness}%"
:max 100 :max 100
:min 0 :min 0
:flipped true) :flipped true)
(label (label
:class "slideicon" :class "slideicon"
:valign "end" :valign "end"
:text "󰃞"))) :text "󰃞")))
(defwidget notificationlog [] (defwidget notificationlog []
(box (box
:halign "fill" :halign "fill"
:valign "fill" :valign "fill"
:width 320 :width 320
:vexpand true :vexpand true
:space-evenly false :space-evenly false
:orientation "v" :orientation "v"
(overlay (overlay
:vexpand true :vexpand true
@ -416,48 +416,48 @@
:vexpand true :vexpand true
:valign "fill" :valign "fill"
(box (box
:orientation "v" :orientation "v"
:valign "start" :valign "start"
:space-evenly false :space-evenly false
(for noti in {notifications.notifications} (for noti in {notifications.notifications}
(singlenotif :noti noti :initial false)))) (singlenotif :noti noti :initial false))))
(box (box
:valign "end" :valign "end"
:hexpand true :hexpand true
:vexpand false :vexpand false
:height 80 :height 80
:class "fadeoutbox")) :class "fadeoutbox"))
(box (box
:orientation "h" :orientation "h"
(button (button
:onclick "./scripts/notifManage --clear" :onclick "./scripts/notifManage --clear"
(label (label
:class "title" :class "title"
:text "Clear All")) :text "Clear All"))
(button (button
:onclick "./scripts/notifManage --toggle" :onclick "./scripts/notifManage --toggle"
(label (label
:class { notifications.dnd ? "titlesel" : "title"} :class { notifications.dnd ? "titlesel" : "title"}
:text "Do Not Disturb"))))) :text "Do Not Disturb")))))
(defwidget quote [] (defwidget quote []
(box (box
:class "quotewid unbarwidget" :class "quotewid unbarwidget"
:halign "fill" :halign "fill"
:valign "fill" :valign "fill"
:vexpand true :vexpand true
:space-evenly false :space-evenly false
:orientation "v" :orientation "v"
(scroll :vexpand true :hscroll true :vscroll true (scroll :vexpand true :hscroll true :vscroll true
(label (label
:class "quote" :class "quote"
:text {quotejson.content} :text {quotejson.content}
:wrap true :wrap true
:width 300)) :width 300))
(label (label
:class "quoteauthor" :class "quoteauthor"
:text "- ${quotejson.author}"))) :text "- ${quotejson.author}")))
(defwidget coolmpd [h permashow] (defwidget coolmpd [h permashow]
(overlay (overlay
@ -467,17 +467,17 @@
:height h :height h
:class { pcover != "" ? "mpdcover" : "unbarwidget"} :class { pcover != "" ? "mpdcover" : "unbarwidget"}
:style "background-image: url('${pcover}')" :style "background-image: url('${pcover}')"
:visible {permashow ? true : pcover != "" }) :visible {permashow ? true : pcover != "" })
(box (box
:orientation "h" :orientation "h"
:space-evenly false :space-evenly false
:halign "center" :halign "center"
:valign "center" :valign "center"
:spacing 10 :spacing 10
(image :image-width 100 :image-height 100 :path { pcover == "" ? "./image/emptympd.png" : pcover }) (image :image-width 100 :image-height 100 :path { pcover == "" ? "./image/emptympd.png" : pcover })
(box (box
:orientation "v" :orientation "v"
:space-evenly false :space-evenly false
:width 200 :width 200
:halign "center" :halign "center"
:valign "center" :valign "center"
@ -493,11 +493,11 @@
(box (box
:orientation "h" :orientation "h"
:class "mpd_controls" :class "mpd_controls"
(button :onclick "playerctl previous" (button :onclick "playerctl previous"
(label :text "󰒮")) (label :text "󰒮"))
(button :style "padding-right: 3px;" :onclick "playerctl play-pause" (button :style "padding-right: 3px;" :onclick "playerctl play-pause"
(label :text { pstatus == "Playing" ? "" : ""} )) (label :text { pstatus == "Playing" ? "" : ""} ))
(button :onclick "playerctl next" (button :onclick "playerctl next"
(label :text "󰒭"))))))) (label :text "󰒭")))))))
(include "./control_panel/windowswitcher.yuck") (include "./control_panel/windowswitcher.yuck")

View file

@ -1,23 +1,23 @@
;; Dashboard design is made by tsukki9696 ;; Dashboard design is made by tsukki9696
(defwindow dashboard (defwindow dashboard
:geometry (geometry :geometry (geometry
:x 0 :x 0
:y 0 :y 0
:width 800 :width 800
:height 420 :height 420
:anchor "center") :anchor "center")
:stacking "overlay" :stacking "overlay"
:monitor 0 :monitor 0
(structure)) (structure))
(defwidget structure[] (defwidget structure[]
(box (box
:class "popup" :class "popup"
:space-evenly false :space-evenly false
:orientation "v" :orientation "v"
(duser :name "Failed" :tag "failed.sh" :pfp "./image/roundpfp.png") (duser :name "Failed" :tag "failed.sh" :pfp "./image/roundpfp.png")
(box (box
:space-evenly true :space-evenly true
:orientation "h" :orientation "h"
:vexpand true :vexpand true
@ -35,13 +35,13 @@
(dbutt) (dbutt)
(theme)) (theme))
(dcal) (dcal)
)) ))
(box (box
:orientation "v" :orientation "v"
:space-evenly false :space-evenly false
(dnotes) (dnotes)
(quote)) (quote))
))) )))
(defwidget duser [name tag pfp] (defwidget duser [name tag pfp]
(box (box
@ -56,13 +56,13 @@
(label :text "|" :style "color: #262626; font-size: 30px;") (label :text "|" :style "color: #262626; font-size: 30px;")
(box (box
:orientation "v" :orientation "v"
:space-evenly true :space-evenly true
:halign "start" :halign "start"
(label :style "font-weight: bold; font-size: 18px;" :text "Hello, ${name}") (label :style "font-weight: bold; font-size: 18px;" :text "Hello, ${name}")
(label :halign "start" :text tag)))) (label :halign "start" :text tag))))
(defwidget dnotes [] (defwidget dnotes []
(box (box
:class "notes unbarwidget" :class "notes unbarwidget"
:space-evenly false :space-evenly false
:orientation "v" :orientation "v"
@ -81,7 +81,7 @@
(box (box
:class "mpdcover" :class "mpdcover"
:style "background-image: url('${pcover}')" :style "background-image: url('${pcover}')"
:height 150) :height 150)
(box (box
:orientation "v" :orientation "v"
:space-evenly false :space-evenly false
@ -91,70 +91,70 @@
:hscroll true :hscroll true
:vscroll false :vscroll false
(label :style "font-size: 18px;" :text psong)) (label :style "font-size: 18px;" :text psong))
(scroll (scroll
:hscroll true :hscroll true
:vscroll false :vscroll false
(label :text partist)) (label :text partist))
;; (scale ;; (scale
;; :hexpand false ;; :hexpand false
;; :width 60 ;; :width 60
;; :class "seektime" ;; :class "seektime"
;; :value current ;; :value current
;; :orientation "h" ;; :orientation "h"
;; :min -5 ;; :min -5
;; :max 100 ;; :max 100
;; :onscroll "mpc -q seek +1" ;; :onscroll "mpc -q seek +1"
;; :tooltip "${ctime}/${ttime}") ;; :tooltip "${ctime}/${ttime}")
(box (box
:orientation "h" :orientation "h"
:space-evenly false :space-evenly false
:spacing 40 :spacing 40
:halign "center" :halign "center"
:class "dmpdcontrol" :class "dmpdcontrol"
(button :onclick "./scripts/music_info --prev" (label :text "󰒮")) (button :onclick "./scripts/music_info --prev" (label :text "󰒮"))
(button :onclick "./scripts/music_info --toggle" (label :text { pstatus == "Playing" ? "" : ""})) (button :onclick "./scripts/music_info --toggle" (label :text { pstatus == "Playing" ? "" : ""}))
(button :onclick "./scripts/music_info --next" (label :text "󰒭")))))) (button :onclick "./scripts/music_info --next" (label :text "󰒭"))))))
(defwidget dcal [] (defwidget dcal []
(box (box
:class "unbarwidget mincal" :class "unbarwidget mincal"
:height 190 :height 190
:hexpand true :hexpand true
(calendar (calendar
:show-details false :show-details false
:show-heading true :show-heading true
:show-day-names false :show-day-names false
:show-week-numbers false :show-week-numbers false
:day calendar_day :day calendar_day
:year calendar_year))) :year calendar_year)))
(defwidget dbutt[] (defwidget dbutt[]
(box (box
:space-evenly true :space-evenly true
:orientation "h" :orientation "h"
:height 130 :height 130
(box (box
:space-evenly true :space-evenly true
:orientation "v" :orientation "v"
(button :class "dicons unbarwidget" :onclick "notify-send 'shutdown' 'but its impractical'" (label :text "")) (button :class "dicons unbarwidget" :onclick "notify-send 'shutdown' 'but its impractical'" (label :text ""))
(button :class "dicons unbarwidget" :onclick "notify-send 'restart' 'but its impractical'" (label :text ""))) (button :class "dicons unbarwidget" :onclick "notify-send 'restart' 'but its impractical'" (label :text "")))
(box (box
:space-evenly true :space-evenly true
:orientation "v" :orientation "v"
(button :class "dicons unbarwidget" :onclick "notify-send 'lock' 'but its impractical'" (label :text "")) (button :class "dicons unbarwidget" :onclick "notify-send 'lock' 'but its impractical'" (label :text ""))
(button :class "dicons unbarwidget" :onclick "notify-send 'log out' 'but its impractical'" (label :text "󰍃"))))) (button :class "dicons unbarwidget" :onclick "notify-send 'log out' 'but its impractical'" (label :text "󰍃")))))
(defwidget theme [] (defwidget theme []
(button (button
:class "unbarwidget" :class "unbarwidget"
:vexpand true :vexpand true
:onclick "./scripts/toggletheme toggle" :onclick "./scripts/toggletheme toggle"
(label :style "font-size: 18px;" :text ""))) (label :style "font-size: 18px;" :text "")))
;; (defwidget dquote [] ;; (defwidget dquote []
;; (box ;; (box
;; :class "unbarwidget" ;; :class "unbarwidget"
;; :height "120" ;; :height "120"
;; :valign "center" ;; :valign "center"
;; (literal ;; (literal
;; :content quoteliteral))) ;; :content quoteliteral)))

View file

@ -1,30 +1,30 @@
(defwindow desktopicons (defwindow desktopicons
:geometry (geometry :geometry (geometry
:x 20 :x 20
:y 20 :y 20
:width 100 :width 100
:height 600 :height 600
:anchor "top right") :anchor "top right")
:stacking "bottom" :stacking "bottom"
:monitor 0 :monitor 0
(box (box
:orientation "v" :orientation "v"
:space-evenly "false" :space-evenly "false"
:spacing 10 :spacing 10
(eventbox (eventbox
:dragtype "file" :dragtype "file"
:class "desktopbox" :class "desktopbox"
:onclick "thunar ${homedir}/.local/share/Trash/files" :onclick "thunar ${homedir}/.local/share/Trash/files"
:ondropped "notify-send {}" :ondropped "notify-send {}"
(box (box
:orientation "v" :orientation "v"
:space-evenly false :space-evenly false
:height 100 :height 100
:valign "end" :valign "end"
(image :width 100 :height 100 :image-width 80 :image-height 80 :path trashcanpath) (image :width 100 :height 100 :image-width 80 :image-height 80 :path trashcanpath)
(label :class "desktoptext" :text "Trash"))) (label :class "desktoptext" :text "Trash")))
(for i in '["amogus"]' (for i in '["amogus"]'
(imagesicon :name i)))) (imagesicon :name i))))

View file

@ -1,15 +1,14 @@
(defwindow dock (defwindow dock
:geometry (geometry :geometry (geometry
:x 0 :x 0
:y 0 :y 0
:width 10 :width 10
:height 54 :height 54
:anchor "bottom center") :anchor "bottom center")
:stacking "overlay"
:monitor 0 :monitor 0
(dockstruct)) (dockstruct))
(defwidget dockstruct [] (defwidget dockstruct []
(eventbox (eventbox
:onhover "${EWW_CMD} update revealdock=true" :onhover "${EWW_CMD} update revealdock=true"
:onhoverlost "${EWW_CMD} update revealdock=false" :onhoverlost "${EWW_CMD} update revealdock=false"
@ -18,11 +17,11 @@
:space-evenly false :space-evenly false
:valign "end" :valign "end"
(box (box
:height 4) :height 4)
(revealer (revealer
:reveal revealdock :reveal revealdock
:transition "slideup" :transition "slideup"
(box (box
:class "popup" :class "popup"
:height 60 :height 60
:orientation "h" :orientation "h"
@ -30,8 +29,8 @@
(tasklist :iconsize 50)))))) (tasklist :iconsize 50))))))
(defwidget tasklist [iconsize] (defwidget tasklist [iconsize]
(box (box
:orientation "h" :orientation "h"
:space-evenly true :space-evenly true
:spacing 10 :spacing 10
(for task in {tasksjson} (for task in {tasksjson}
@ -41,24 +40,24 @@
(box (box
:orientation "v" :orientation "v"
:space-evenly false :space-evenly false
(image (image
:image-width iconsize :image-width iconsize
:image-height iconsize :image-height iconsize
:path {task.path}) :path {task.path})
(scroll (scroll
:hscroll true :hscroll true
:vscroll false :vscroll false
(box (box
:orientation "h" :orientation "h"
:halign "center" :halign "center"
:space-evenly false :space-evenly false
:spacing 3 :spacing 3
(for focus in {task.focused} (for focus in {task.focused}
(box (box
:class "dockindicate" :class "dockindicate"
:hexpand false :hexpand false
:width { focus ? 10 : 5 } :width { focus ? 10 : 5 }
:height 3)))) :height 3))))
))))) )))))

View file

@ -1,139 +1,140 @@
@import './colors.scss'; @import "./colors.scss";
@import './bar/bar.scss'; @import "./bar/bar.scss";
// @import './bottom_bar/bar.scss'; // @import "./bottom_bar/bar.scss";
@import './control_panel/control_panel.scss'; @import "./control_panel/control_panel.scss";
@import './dashboard/dashboard.scss'; @import "./dashboard/dashboard.scss";
@import './dock/dock.scss'; @import "./dock/dock.scss";
@import './desktop/desktop.scss'; @import "./desktop/desktop.scss";
@import './notification/notification.scss'; @import "./notification/notification.scss";
* { * {
all: unset; all: unset;
color: $white0; color: $white0;
font-size: 15px; font-size: 15px;
font-family: "Iosevka Nerd Font"; font-family: "Iosevka Nerd Font";
// font-weight: bold; // font-weight: bold;
// font-smooth: never; // font-smooth: never;
} }
tooltip { tooltip {
background-color: $surface0; background-color: $surface0;
color: $white0; color: $white0;
border-radius: 5px; border-radius: 5px;
border-style: solid; border-style: solid;
border-width: 2px; border-width: 2px;
border-color: $surface2; border-color: $surface2;
} }
scale { scale {
all: unset; all: unset;
trough {
background-color: $surface2;
border-radius: 24px;
min-height: 80px;
min-width: 10px;
margin : 5px;
slider { trough {
background-color: $white2; background-color: $surface2;
border-radius: 25px; border-radius: 24px;
min-height: 15px; min-height: 80px;
min-width: 15px; min-width: 10px;
margin: -10px; margin: 5px;
}
highlight { slider {
background-color: $white0; background-color: $white2;
border-radius: 24px; border-radius: 25px;
} min-height: 15px;
min-width: 15px;
margin: -10px;
} }
highlight {
background-color: $white0;
border-radius: 24px;
}
}
} }
button { button {
transition-duration: 0.5s; transition-duration: 0.5s;
border-radius: 5px; border-radius: 5px;
}
button:hover {
background-color: $surface2;
} }
button:hover {
background-color: $surface2;
}
calendar { calendar {
all: unset; all: unset;
background-color: $surface0; background-color: $surface0;
font-size: 20; font-size: 20;
color: $white0; color: $white0;
} }
calendar:selected { calendar:selected {
color: $base; color: $base;
background-color: $accent; background-color: $accent;
border-radius: 25px; border-radius: 25px;
} }
calendar.header { calendar.header {
color: $accent; color: $accent;
font-weight: bold; font-weight: bold;
} }
calendar:indeterminate { calendar:indeterminate {
color: $surface2; color: $surface2;
} }
checkbutton { checkbutton {
border-radius: 24px; border-radius: 24px;
background-color: $surface1; background-color: $surface1;
padding: 4px; padding: 4px;
check { check {
min-height: 15px; min-height: 15px;
min-width: 15px; min-width: 15px;
color: $white0; color: $white0;
} }
} }
checkbutton:checked { checkbutton:checked {
check{ check {
border-radius: 24px; border-radius: 24px;
background-color: $white0; background-color: $white0;
} }
} }
.popup { .popup {
background-color: $base; background-color: $base;
padding: 5px; padding: 5px;
border-radius: 5px; border-radius: 5px;
border-style: solid; border-style: solid;
border-color: $surface2; border-color: $surface2;
border-width: 2px; border-width: 2px;
margin: 10px; margin: 10px;
} }
entry { entry {
// image: url('./image/screenshot.png'); // image: url('./image/screenshot.png');
padding: 5px; padding: 5px;
margin: 5px; margin: 5px;
border-radius: 5px; border-radius: 5px;
border-style: solid; border-style: solid;
border-color: $surface2; border-color: $surface2;
background-color: $surface1; background-color: $surface1;
color: $white0; color: $white0;
} }
.mainentry { .mainentry {
background-color: $surface1; background-color: $surface1;
padding: 5px; padding: 5px;
border-radius: 5px; border-radius: 5px;
margin: 5px; margin: 5px;
} }
.mainentry label { .mainentry label {
font-size: 18px; font-size: 18px;
color: $white0; color: $white0;
} }
.smallentry { .smallentry {
@extend .mainentry; @extend .mainentry;
label { label {
font-size: 15px; font-size: 15px;
} }
} }

View file

@ -77,14 +77,13 @@ elif [ "$1" = "control" ]; then
elif [ "$1" = "dashboard" ]; then elif [ "$1" = "dashboard" ]; then
dashboard dashboard
elif [ "$1" = "colourpick" ]; then elif [ "$1" = "colourpick" ]; then
COLOUR=$(grim -g "$(slurp -p)" -t ppm - | convert - -format '%[pixel:p{0,0}]' txt:- | awk -F ' ' 'NR==2 {print $3}') hyprpicker -a
wl-copy "$COLOUR" notify-send -a colourpicker -i ~/.config/eww/image/eyedropper.png -t 3000 "Colour copied to clipboard"
notify-send -a colourpicker -i ~/.config/eww/carbonmonoxide/image/eyedropper.png -t 3000 "$COLOUR" "Colour copied to clipboard"
elif [ "$1" = "scrop" ]; then elif [ "$1" = "scrop" ]; then
# control # control
# sleep 0.5 # sleep 0.5
grim -g "$(slurp)" - | wl-copy grim -g "$(slurp)" - | wl-copy
notify-send -a screenshot -i ~/.config/eww/carbonmonoxide/image/screenshot.png -t 3000 "Screenshot Taken" "Image copied to clipboard" notify-send -a screenshot -i ~/.config/eww/image/screenshot.png -t 3000 "Screenshot Taken" "Image copied to clipboard"
elif [ "$1" = "sscreen" ]; then elif [ "$1" = "sscreen" ]; then
# control # control
grim - | wl-copy grim - | wl-copy

View file

@ -0,0 +1,54 @@
#!/bin/bash
SOCKET="/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
spaces() {
local workspace_windows=$(hyprctl workspaces -j | jq 'map({key: .id | tostring, value: .windows}) | from_entries')
seq 1 5 | jq --argjson windows "$workspace_windows" --slurp -Mc 'map(tostring) | map({id: ., windows: ($windows[.]//0)})'
}
clamp() {
python -c "print(max($1, min($3, $2)))"
}
get_workspaces() {
spaces
socat -u UNIX-CONNECT:"$SOCKET" - | while read -r; do
spaces
done
}
get_active_workspace() {
hyprctl monitors -j | jq '.[] | select(.focused) | .activeWorkspace.id'
socat -u UNIX-CONNECT:"$SOCKET" - | stdbuf -o0 awk -F '>>|,' '/^workspace>>/ {print $2} /^focusedmon>>/ {print $3}'
}
change_workspace() {
local direction=$1 current=$2 target
if [[ "$direction" == "down" ]]; then
target=$(clamp 1 9 $((current + 1)))
elif [[ "$direction" == "up" ]]; then
target=$(clamp 1 9 $((current - 1)))
else
echo "Invalid direction" >&2
return 1
fi
echo "Jumping to $target"
hyprctl dispatch workspace "$target"
}
main() {
case $1 in
get-all-workspaces) get_workspaces ;;
get-active-workspace) get_active_workspace ;;
change) change_workspace "$2" "$3" ;;
*)
echo "Usage: $0 {gw|ga|c <direction> <current>}" >&2
exit 1
;;
esac
}
main "$@"

View file

@ -1,71 +1,71 @@
(defwindow wallpaperselect (defwindow wallpaperselect
:geometry (geometry :geometry (geometry
:x 0 :x 0
:y 0 :y 0
:width 415 :width 415
:height 600 :height 600
:anchor "center") :anchor "center")
:stacking "overlay" :stacking "overlay"
:monitor 0 :monitor 0
:focusable true :focusable true
(box (box
:class "popup" :class "popup"
(wallpaperselectwidget))) (wallpaperselectwidget)))
(defwidget wallpaperselectwidget [] (defwidget wallpaperselectwidget []
(eventbox (eventbox
;; :onhoverlost "${EWW_CMD} close wallpaperselect" ;; :onhoverlost "${EWW_CMD} close wallpaperselect"
(box (box
:orientation "v" :orientation "v"
:class "unbarwidget" :class "unbarwidget"
:space-evenly false :space-evenly false
(box (box
:orientation "h" :orientation "h"
:space-evenly false :space-evenly false
(input (input
:hexpand true :hexpand true
:onaccept "./scripts/wallhaven.py search {}" :onaccept "./scripts/wallhaven.py search {}"
:timeout "20000ms") :timeout "20000ms")
(button (button
:onclick "${EWW_CMD} update wallpapers=[] && ./scripts/wallhaven.py reset" :onclick "${EWW_CMD} update wallpapers=[] && ./scripts/wallhaven.py reset"
;; :style "padding: 0px 8px 0px 3px;" ;; :style "padding: 0px 8px 0px 3px;"
(label (label
:class "icon" :class "icon"
:text ""))) :text "")))
(scroll (scroll
:hscroll false :hscroll false
:vscroll true :vscroll true
:vexpand true :vexpand true
(box (box
:orientation "v" :orientation "v"
:space-evenly false :space-evenly false
:valign "start" :valign "start"
(image (image
:style "margin: 50px 0px 5px 0px;" :style "margin: 50px 0px 5px 0px;"
:hexpand false :hexpand false
:vexpand false :vexpand false
:path "./image/fieshidle.gif" :path "./image/fieshidle.gif"
:visible {arraylength(wallpapers) == 0}) :visible {arraylength(wallpapers) == 0})
(label (label
:visible {arraylength(wallpapers) == 0} :visible {arraylength(wallpapers) == 0}
:text "No wallpapers yet") :text "No wallpapers yet")
(for wall in wallpapers (for wall in wallpapers
(box (box
:orientation "v" :orientation "v"
:space-evenly false :space-evenly false
:class "mainentry" :class "mainentry"
:spacing 5 :spacing 5
(button (button
:onclick "./scripts/wallhaven.py select ${wall.url}" :onclick "./scripts/wallhaven.py select ${wall.url}"
(image :image-height 225 :image-width 400 :path {wall.path})) (image :image-height 225 :image-width 400 :path {wall.path}))
(box (box
:orientation "h" :orientation "h"
:space-evenly true :space-evenly true
(label :text "${wall.views} 󰈈") (label :text "${wall.views} 󰈈")
(label :text "${wall.fav} 󰣐") (label :text "${wall.fav} 󰣐")
)))) ))))
)))) ))))