diff --git a/flake.nix b/flake.nix
index d2eb32a..4eaed35 100644
--- a/flake.nix
+++ b/flake.nix
@@ -17,7 +17,12 @@
# List all themes: $ nix build nixpkgs#base16-schemes && ls result/share/themes
theme = "evangelion-blood"; # catppuccin-mocha, tokyo-night-dark, one-dark
- background = "evangelion.jpg";
+ background =
+ if userSettings.theme == "catppuccin-mocha"
+ then "aurora_borealis.png"
+ else if "evangelion-blood" == userSettings.theme
+ then "evangelion.jpg"
+ else "aurora_borealis.png";
resolution = {
width = 1920;
diff --git a/nixos/home/desktop/hyprland/eww.nix b/nixos/home/desktop/hyprland/eww.nix
new file mode 100644
index 0000000..3d2253f
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww.nix
@@ -0,0 +1,566 @@
+{
+ lib,
+ config,
+ pkgs,
+ ...
+}: let
+ EWW_PATH = ".config/eww/dashboard";
+ EWW = "${pkgs.eww}/bin/eww";
+ EWW_CACHE = ".cache/eww_launch.dashboard";
+in {
+ options = {
+ program.eww.enable = lib.mkEnableOption "Enable eww";
+ };
+
+ config =
+ lib.mkIf config.program.eww.enable
+ {
+ programs.eww = {
+ #enable = true;
+ #enableBashIntegration =
+ # if userSettings.shell == "bash"
+ # then true
+ # else false;
+ #enableZshIntegration =
+ # if userSettings.shell == "zsh"
+ # then true
+ # else false;
+ #configDir = EWW_PATH;
+ };
+
+ home.file = {
+ ".config/eww/dashboard" = {
+ enable = true;
+ recursive = true;
+ source = ./eww/dashboard;
+ };
+
+ ".config/eww/dashboard/images/bg.jpg" = {
+ enable = true;
+ source = ./eww/dashboard/images/bg.jpg;
+ };
+
+ ".config/eww/dashboard/eww.scss" = {
+ enable = true;
+ text = ''
+ /** Global *******************************************/
+ * {
+ all: unset;
+ font-family: JetBrainsMono Nerd Font;
+ font-family: JetBrainsMono Nerd Font;
+ }
+
+ /** Background ***************************************/
+ .bg {
+ background-image: url("images/bg.jpg");
+ background-color: #474d59;
+ opacity: 1;
+ }
+
+ /** Generic window ***********************************/
+ .genwin {
+ background-color: #${config.lib.stylix.colors.base01};
+ border-radius: 16px;
+ }
+
+ /** Profile ******************************************/
+ .face {
+ background-size: 200px;
+ min-height: 200px;
+ min-width: 200px;
+ margin: 65px 0px 0px 0px;
+ border-radius: 100%;
+ }
+
+ .fullname {
+ color: #${config.lib.stylix.colors.base06};
+ font-size: 30px;
+ font-weight: bold;
+ }
+
+ .username {
+ color: #${config.lib.stylix.colors.base04};
+ font-size: 22px;
+ font-weight: bold;
+ margin: -15px 0px 0px 0px;
+ }
+
+ /** System ********************************************/
+ .iconcpu,
+ .iconmem,
+ .iconbright,
+ .iconbat {
+ font-size: 32px;
+ font-weight: normal;
+ }
+ .iconcpu {
+ color: #${config.lib.stylix.colors.base05};
+ }
+ .iconmem {
+ color: #${config.lib.stylix.colors.base07};
+ }
+ .iconbright {
+ color: #${config.lib.stylix.colors.base02};
+ }
+ .iconbat {
+ color: #${config.lib.stylix.colors.base10};
+ }
+
+ .cpu_bar,
+ .mem_bar,
+ .bright_bar,
+ .bat_bar,
+ scale trough {
+ all: unset;
+ background-color: #${config.lib.stylix.colors.base11};
+ border-radius: 16px;
+ min-height: 28px;
+ min-width: 240px;
+ }
+
+ .cpu_bar,
+ .mem_bar,
+ .bright_bar,
+ .bat_bar,
+ scale trough highlight {
+ all: unset;
+ border-radius: 16px;
+ }
+
+ .cpu_bar scale trough highlight {
+ background-color: #${config.lib.stylix.colors.base05};
+ }
+ .mem_bar scale trough highlight {
+ background-color: #${config.lib.stylix.colors.base07};
+ }
+ .bright_bar scale trough highlight {
+ background-color: #${config.lib.stylix.colors.base02};
+ }
+ .bat_bar scale trough highlight {
+ background-color: #${config.lib.stylix.colors.base10};
+ }
+
+ /** Clock ********************************************/
+ .time_hour,
+ .time_min {
+ color: #${config.lib.stylix.colors.base12};
+ font-size: 70px;
+ font-weight: bold;
+ }
+ .time_hour {
+ margin: 15px 0px 0px 20px;
+ }
+ .time_min {
+ margin: 0px 0px 10px 0px;
+ }
+
+ .time_mer {
+ color: #${config.lib.stylix.colors.base07};
+ font-size: 40px;
+ font-weight: bold;
+ margin: 20px 0px 0px 0px;
+ }
+
+ .time_day {
+ color: #${config.lib.stylix.colors.base02};
+ font-size: 30px;
+ font-weight: normal;
+ margin: 0px 0px 20px -20px;
+ }
+
+ /** Uptime ********************************************/
+ .icontimer {
+ color: #${config.lib.stylix.colors.base13};
+ font-size: 90px;
+ font-weight: normal;
+ }
+
+ .uphour {
+ color: #${config.lib.stylix.colors.base14};
+ font-size: 42px;
+ font-weight: bold;
+ }
+
+ .upmin {
+ color: #${config.lib.stylix.colors.base14};
+ font-size: 32px;
+ font-weight: bold;
+ }
+
+ /** Music ***************************************/
+ .album_art {
+ background-size: 240px;
+ min-height: 240px;
+ min-width: 240px;
+ margin: 20px;
+ border-radius: 14px;
+ }
+
+ .song {
+ color: #${config.lib.stylix.colors.base15};
+ font-size: 24px;
+ font-weight: bold;
+ margin: 40px 0px 0px 0px;
+ }
+
+ .artist {
+ color: #${config.lib.stylix.colors.base02};
+ font-size: 16px;
+ font-weight: normal;
+ margin: 0px 0px 15px 0px;
+ }
+
+ .btn_prev,
+ .btn_play,
+ .btn_next {
+ font-family: Iosevka Nerd Font;
+ }
+ .btn_prev {
+ color: #${config.lib.stylix.colors.base02};
+ font-size: 32px;
+ font-weight: normal;
+ }
+ .btn_play {
+ color: #${config.lib.stylix.colors.base07};
+ font-size: 48px;
+ font-weight: bold;
+ }
+ .btn_next {
+ color: #${config.lib.stylix.colors.base02};
+ font-size: 32px;
+ font-weight: normal;
+ }
+
+ .music_bar scale trough highlight {
+ all: unset;
+ background-color: #${config.lib.stylix.colors.base13};
+ border-radius: 8px;
+ }
+ .music_bar scale trough {
+ all: unset;
+ background-color: #${config.lib.stylix.colors.base11};
+ border-radius: 8px;
+ min-height: 20px;
+ min-width: 310px;
+ margin: 10px 0px 0px 0px;
+ }
+
+ /** Weather ***************************************/
+ .iconweather {
+ font-family: Iosevka Nerd Font;
+ font-size: 120px;
+ font-weight: normal;
+ margin: 15px 0px 0px 30px;
+ }
+
+ .label_temp {
+ color: #${config.lib.stylix.colors.base00};
+ font-size: 80px;
+ font-weight: bold;
+ margin: -15px 30px 0px 0px;
+ }
+
+ .label_stat {
+ color: #${config.lib.stylix.colors.base05};
+ font-size: 38px;
+ font-weight: bold;
+ }
+
+ .label_quote {
+ color: #${config.lib.stylix.colors.base10};
+ font-size: 18px;
+ font-weight: normal;
+ }
+
+ /** Applications ***************************************/
+ .appbox {
+ margin: 15px 0px 0px 25px;
+ }
+
+ .app_fox,
+ .app_telegram,
+ .app_discord,
+ .app_terminal,
+ .app_files,
+ .app_geany,
+ .app_code,
+ .app_gimp,
+ .app_vbox {
+ background-repeat: no-repeat;
+ background-size: 64px;
+ min-height: 64px;
+ min-width: 64px;
+ margin: 8px 8px 0px 8px;
+ }
+
+ .app_fox {
+ }
+ .app_telegram {
+ }
+ .app_discord {
+ }
+ .app_terminal {
+ }
+ .app_files {
+ }
+ .app_geany {
+ }
+ .app_code {
+ }
+ .app_gimp {
+ }
+ .app_vbox {
+ }
+
+ /** Links ***************************************/
+ .iconweb,
+ .iconmail {
+ color: #${config.lib.stylix.colors.base00};
+ font-family: Iosevka Nerd Font;
+ font-size: 70px;
+ font-weight: normal;
+ }
+ .iconmail {
+ color: #df584e;
+ }
+
+ .github {
+ background-color: #24292e;
+ border-radius: 16px;
+ }
+ .reddit {
+ background-color: #e46231;
+ border-radius: 16px;
+ }
+ .twitter {
+ background-color: #61aad6;
+ border-radius: 16px;
+ }
+ .youtube {
+ background-color: #df584e;
+ border-radius: 16px;
+ }
+ .mail {
+ background-color: #ffffff;
+ border-radius: 16px;
+ }
+
+ .mailbox {
+ background-color: #${config.lib.stylix.colors.base10};
+ border-radius: 10px;
+ margin: 48px 0px 48px 0px;
+ }
+ .label_mails {
+ color: #404040;
+ font-size: 32px;
+ font-weight: bold;
+ margin: 0px 12px 0px 12px;
+ }
+
+ /** Power buttons ***************************************/
+ .btn_logout,
+ .btn_sleep,
+ .btn_reboot,
+ .btn_poweroff {
+ font-size: 48px;
+ font-weight: bold;
+ }
+
+ .btn_logout {
+ color: #${config.lib.stylix.colors.base05};
+ }
+ .btn_sleep {
+ color: #${config.lib.stylix.colors.base07};
+ }
+ .btn_reboot {
+ color: #${config.lib.stylix.colors.base02};
+ }
+ .btn_poweroff {
+ color: #${config.lib.stylix.colors.base10};
+ }
+
+ /** Home folders ***************************************/
+ .hddbox {
+ background-color: #${config.lib.stylix.colors.base11};
+ border-radius: 10px;
+ margin: 15px;
+ }
+ .hddicon {
+ color: #${config.lib.stylix.colors.base12};
+ font-family: Iosevka Nerd Font;
+ font-size: 70px;
+ font-weight: normal;
+ margin: 25px 20px 25px 40px;
+ }
+ .hdd_label {
+ color: #${config.lib.stylix.colors.base14};
+ font-size: 48px;
+ font-weight: bold;
+ margin: 0px 0px 0px 15px;
+ }
+ .fs_sep {
+ color: #2e3440;
+ font-size: 36px;
+ font-weight: bold;
+ }
+
+ .iconfolder1,
+ .iconfolder2,
+ .iconfolder3,
+ .iconfolder4,
+ .iconfolder5,
+ .iconfolder6 {
+ font-family: Iosevka Nerd Font;
+ font-size: 32px;
+ font-weight: normal;
+ margin: 0px 0px 0px 75px;
+ }
+ .iconfolder1 {
+ color: #${config.lib.stylix.colors.base05};
+ }
+ .iconfolder2 {
+ color: #${config.lib.stylix.colors.base07};
+ }
+ .iconfolder3 {
+ color: #${config.lib.stylix.colors.base02};
+ }
+ .iconfolder4 {
+ color: #${config.lib.stylix.colors.base12};
+ }
+ .iconfolder5 {
+ color: #${config.lib.stylix.colors.base13};
+ }
+ .iconfolder6 {
+ color: #${config.lib.stylix.colors.base10};
+ }
+
+ .label_folder1,
+ .label_folder2,
+ .label_folder3,
+ .label_folder4,
+ .label_folder5,
+ .label_folder6 {
+ font-size: 22px;
+ font-weight: normal;
+ margin: 0px 0px 0px 30px;
+ }
+ .label_folder1 {
+ color: #${config.lib.stylix.colors.base05};
+ }
+ .label_folder2 {
+ color: #${config.lib.stylix.colors.base07};
+ }
+ .label_folder3 {
+ color: #${config.lib.stylix.colors.base02};
+ }
+ .label_folder4 {
+ color: #${config.lib.stylix.colors.base12};
+ }
+ .label_folder5 {
+ color: #${config.lib.stylix.colors.base13};
+ }
+ .label_folder6 {
+ color: #${config.lib.stylix.colors.base10};
+ }
+
+ /** EOF *************************************************/
+ '';
+ };
+ };
+
+ home.packages = with pkgs; [
+ brightnessctl
+ busybox
+
+ (writeShellScriptBin "eww-dashboard-toggle" ''
+ FILE="$HOME/${EWW_CACHE}"
+ CFG="$HOME/${EWW_PATH}"
+
+ ## Run eww daemon if not running already
+ if [[ ! $(pidof eww) ]]; then
+ ${EWW} daemon
+ sleep 1
+ fi
+
+ ## Open widgets
+ run_eww() {
+ ${EWW} --config "$CFG" open-many \
+ background \
+ profile \
+ system \
+ clock \
+ uptime \
+ music \
+ apps \
+ logout \
+ sleep \
+ reboot \
+ poweroff \
+ folders
+ }
+
+ ## Launch or close widgets accordingly
+ if [[ ! -f "$FILE" ]]; then
+ touch "$FILE"
+ run_eww
+ else
+ ${EWW} --config "$CFG" close \
+ background profile system clock uptime music apps logout sleep reboot poweroff folders
+ rm "$FILE"
+ fi
+ '')
+
+ (writeShellScriptBin "sys_info" ''
+ PREV_TOTAL=0
+ PREV_IDLE=0
+ cpuFile="/tmp/.cpu_usage"
+
+ ## Get CPU usage
+ get_cpu() {
+ if [[ -f "''${cpuFile}" ]]; then
+ fileCont=$(cat "''${cpuFile}")
+ PREV_TOTAL=$(echo "''${fileCont}" | head -n 1)
+ PREV_IDLE=$(echo "''${fileCont}" | tail -n 1)
+ fi
+
+ CPU=(`cat /proc/stat | grep '^cpu '`) # Get the total CPU statistics.
+ unset CPU[0] # Discard the "cpu" prefix.
+ IDLE=''${CPU [4]} # Get the idle CPU time.
+
+ # Calculate the total CPU time.
+ TOTAL=0
+
+ for VALUE in "''${CPU[@]:0:4}"; do
+ let "TOTAL=$TOTAL+$VALUE"
+ done
+
+ if [[ "''${PREV_TOTAL}" != "" ]] && [[ "''${PREV_IDLE}" != "" ]]; then
+ # Calculate the CPU usage since we last checked.
+ let "DIFF_IDLE=$IDLE-$PREV_IDLE"
+ let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
+ let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
+ echo "''${DIFF_USAGE}"
+ else
+ echo "?"
+ fi
+
+ # Remember the total and idle CPU times for the next check.
+ echo "''${TOTAL}" > "''${cpuFile}"
+ echo "''${IDLE}" >> "''${cpuFile}"
+ }
+
+ ## Get Used memory
+ get_mem() {
+ printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}')
+ }
+
+ ## Execute accordingly
+ if [[ "$1" == "--cpu" ]]; then
+ get_cpu
+ elif [[ "$1" == "--mem" ]]; then
+ get_mem
+ fi
+ '')
+ ];
+ };
+}
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/eww.yuck b/nixos/home/desktop/hyprland/eww/dashboard/eww.yuck
new file mode 100644
index 0000000..34c1bee
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/eww.yuck
@@ -0,0 +1,308 @@
+;; **
+;; ** Widgets config for EWW
+;; ** Created by : @adi1090x
+;; ** Converted by : @tripleo1
+;; **
+
+;; ** Variables ***********************************************************************
+
+;; Profile vars
+(defvar IMAGE "images/profile.jpg")
+(defvar NAME "kogami")
+(defpoll UNAME :interval "5m" `whoami`)
+
+;; System vars
+(defpoll HOST :interval "5s" `hostname`)
+(defpoll CPU_USAGE :interval "1s" `scripts/sys_info --cpu`)
+(defpoll MEM_USAGE :interval "1s" `scripts/sys_info --mem`)
+(defpoll BLIGHT :interval "1s" `echo $(( ($(brightnessctl g) * 100 + $(brightnessctl m) / 2) / $(brightnessctl m) ))`)
+(defpoll BATTERY :interval "5s" `battery-hyprlock -p`)
+
+;; Time vars
+(defpoll HOUR :interval "5s" `date +\"%H\"`)
+(defpoll MIN :interval "5s" `date +\"%M\"`)
+(defpoll DAY :interval "5s" `date +\"%A\"`)
+
+;; Uptime vars
+(defpoll UPHOUR :interval "5s" `uptime -p | sed 's/,//g' | awk '{print $6, $7}'`)
+(defpoll UPMIN :interval "5s" `uptime -p | sed 's/,//g' | awk '{print $8, $9}'`)
+
+;; Music vars
+(defpoll SONG :interval "1s" `playerctl-hyprlock --title`)
+(defpoll ARTIST :interval "1s" `playerctl-hyprlock --artist`)
+(defpoll STATUS :interval "1s" `playerctl-hyprlock --status`)
+(defpoll COVER :interval "1s" `playerctl-hyprlock --cover`)
+(defpoll CURRENT :interval "1s" `scripts/music_info --time`)
+(defpoll CTIME :interval "1s" `scripts/music_info --ctime`)
+(defpoll TTIME :interval "1s" `scripts/music_info --ttime`)
+
+;; Weather vars
+(defpoll ICON :interval "15m" `scripts/weather_info --icon`)
+(defpoll STAT :interval "15m" `scripts/weather_info --stat`)
+(defpoll TEMP :interval "15m" `scripts/weather_info --temp`)
+(defpoll HEX :interval "15m" `scripts/weather_info --hex`)
+(defpoll QUOTE :interval "15m" `scripts/weather_info --quote`)
+(defpoll QUOTE2 :interval "15m" `scripts/weather_info --quote2`)
+
+;; Apps vars
+(defpoll MAILS :interval "5m" `scripts/mails`)
+
+;; Files vars
+(defpoll FREE :interval "5s" `df -h / | awk '{print $4}' | tail -n 1 | sed 's/G/GB/'`)
+
+
+;; ** Widgets *************************************************************************
+
+
+;; background
+(defwidget bg []
+ (box :class "bg")
+)
+
+;; profile
+(defwidget user []
+ (box :class "genwin" :orientation "v" :spacing 35 :space-evenly "false" :vexpand "false" :hexpand "false"
+ (box :style "background-image: url('${IMAGE}');" :class "face" :halign "center")
+ (label :class "fullname" :halign "center" :wrap "true" :limit-width 25 :text NAME)
+ (label :class "username" :halign "center" :wrap "true" :limit-width 25 :text UNAME)))
+
+;; system
+(defwidget system []
+ (box :class "genwin" :vexpand "false" :hexpand "false"
+ (box :orientation "v" :spacing 35 :halign "center" :valign "center" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (box :class "cpu_bar" :orientation "h" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false"
+ (label :class "iconcpu" :text " ")
+ (scale :min 0 :max 100 :value CPU_USAGE :active "false"))
+ (box :class "mem_bar" :orientation "h" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false"
+ (label :class "iconmem" :text " ")
+ (scale :min 0 :max 100 :value MEM_USAGE :active "false"))
+ (box :class "bright_bar" :orientation "h" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false"
+ (label :class "iconbright" :text " ")
+ (scale :min 0 :max 100 :value BLIGHT :active "false"))
+ (box :class "bat_bar" :orientation "h" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false"
+ (label :class "iconbat" :text " ")
+ (scale :min 0 :max 100 :value BATTERY :active "false")))))
+
+;; clock
+(defwidget clock []
+ (box :class "genwin" :orientation "h" :spacing 50 :space-evenly false :vexpand "false" :hexpand "false"
+ (box :orientation "h" :spacing 0
+ (label :class "time_hour" :valign "start" :wrap "true" :limit-width 25 :text HOUR)
+ (label :class "time_min" :valign "end" :wrap "true" :limit-width 25 :text MIN))
+ (box :orientation "v" :spacing 0
+ (label :class "time_day" :valign "end" :halign "end" :wrap "true" :limit-width 25 :text DAY))))
+
+;; uptime
+(defwidget uptime []
+ (box :class "genwin"
+ (box :orientation "h" :halign "center" :spacing 40 :space-evenly "false" :vexpand "false" :hexpand "false"
+ (label :class "icontimer" :valign "center" :text " ")
+ (box :orientation "v" :valign "center" :spacing 0 :space-evenly "false" :vexpand "false" :hexpand "false"
+ (label :class "uphour" :halign "start" :wrap "true" :limit-width 25 :text UPHOUR)
+ (label :class "upmin" :halign "start" :wrap "true" :limit-width 25 :text UPMIN)))))
+
+;; Music
+(defwidget music []
+ (box :class "genwin" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (box :class "album_art" :vexpand "false" :hexpand "false" :style "background-image: url('${COVER}');")
+ (box :orientation "v" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false"
+ (label :halign "center" :class "song" :wrap "true" :limit-width 20 :text SONG)
+ (label :halign "center" :class "artist" :wrap "true" :limit-width 15 :text ARTIST)
+ (box :orientation "h" :spacing 20 :halign "center" :space-evenly "true" :vexpand "false" :hexpand "false"
+ (button :class "btn_prev" :onclick "playerctl previous" "")
+ (button :class "btn_play" :onclick "playerctl play-pause" STATUS)
+ (button :class "btn_next" :onclick "playerctl next" ""))
+ (box :class "music_bar" :halign "center" :vexpand "false" :hexpand "false"
+ (scale :onscroll "mpc -q seek +1" :min 0 :active "true" :max 100 :value CURRENT)))))
+
+;; github
+(defwidget github []
+ (box :class "github" :vexpand "false" :hexpand "false"
+ (button :class "iconweb" :onclick "scripts/open_links --gh" " ")))
+
+;; reddit
+(defwidget reddit []
+ (box :class "reddit" :vexpand "false" :hexpand "false"
+ (button :class "iconweb" :onclick "scripts/open_links --rd" " ")))
+
+;; twitter
+(defwidget twitter []
+ (box :class "twitter" :vexpand "false" :hexpand "false"
+ (button :class "iconweb" :onclick "scripts/open_links --tw" "")))
+
+;; youtube
+(defwidget youtube []
+ (box :class "youtube" :vexpand "false" :hexpand "false"
+ (button :class "iconweb" :onclick "scripts/open_links --yt" "")))
+
+;; mail
+(defwidget mail []
+ (box :class "mail"
+ (box :orientation "h" :halign "center" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :class "iconmail" :onclick "scripts/open_links --mail" " ")
+ (box :class "mailbox" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :class "label_mails" :onclick "scripts/open_links --mail" MAILS)))))
+
+;; weather
+(defwidget weather []
+ (box :class "genwin"
+ (box :orientation "v" :spacing 10 :space-evenly "false" :vexpand "false" :hexpand "false"
+ (box :orientation "h" :vexpand "false" :hexpand "false"
+ (label :class "iconweather" :halign "start" :style "color: ${HEX};" :text ICON)
+ (label :class "label_temp" :halign "end" :text TEMP))
+ (box :orientation "v" :spacing 10 :halign "center" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (label :class "label_stat" :text STAT)
+ (label :class "label_quote" :text QUOTE)
+ (label :class "label_quote" :text QUOTE2)))))
+
+;; apps
+(defwidget apps []
+ (box :class "genwin" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (box :class "appbox" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :style "background-image: url('images/icons/firefox.svg');" :class "app_fox" :onclick "scripts/open_apps --ff")
+ (button :style "background-image: url('images/icons/telegram.svg');" :class "app_telegram" :onclick "scripts/open_apps --tg")
+ (button :style "background-image: url('images/icons/discord.svg');" :class "app_discord" :onclick "scripts/open_apps --dc"))
+ (box :class "appbox" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :style "background-image: url('images/icons/terminal.svg');" :class "app_terminal" :onclick "scripts/open_apps --tr")
+ (button :style "background-image: url('images/icons/files.svg');" :class "app_files" :onclick "scripts/open_apps --fm")
+ (button :style "background-image: url('images/icons/geany.svg');" :class "app_geany" :onclick "scripts/open_apps --ge"))
+ (box :class "appbox" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :style "background-image: url('images/icons/code.svg');" :class "app_code" :onclick "scripts/open_apps --cd")
+ (button :style "background-image: url('images/icons/gimp.svg');" :class "app_gimp" :onclick "scripts/open_apps --gp")
+ (button :style "background-image: url('images/icons/virtualbox.svg');" :class "app_vbox" :onclick "scripts/open_apps --vb"))))
+
+;; power buttons
+(defwidget logout []
+ (box :class "genwin" :vexpand "false" :hexpand "false"
+ (button :class "btn_logout" :onclick "" " ")))
+(defwidget sleep []
+ (box :class "genwin" :vexpand "false" :hexpand "false"
+ (button :class "btn_sleep" :onclick "systemctl suspend" " ")))
+(defwidget reboot []
+ (box :class "genwin" :vexpand "false" :hexpand "false"
+ (button :class "btn_reboot" :onclick "systemctl reboot" " ")))
+(defwidget poweroff []
+ (box :class "genwin" :vexpand "false" :hexpand "false"
+ (button :class "btn_poweroff" :onclick "systemctl poweroff" " ")))
+
+;; folders
+(defwidget folders []
+ (box :class "genwin" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (box :class "hddbox" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (box :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :class "hddicon" :onclick "scripts/open_apps --fm" " ")
+ (label :class "fs_sep" :text "|"))
+ (box :space-evenly "false" :vexpand "false" :hexpand "false"
+ (label :class "hdd_label" :wrap "true" :limit-width 25 :text FREE)))
+ (box :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :class "iconfolder1" :onclick "scripts/open_folders --docs" " ")
+ (button :class "label_folder1" :onclick "scripts/open_folders --docs" "Documents"))
+ (box :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :class "iconfolder2" :onclick "scripts/open_folders --dl" " ")
+ (button :class "label_folder2" :onclick "scripts/open_folders --dl" "Downloads"))
+ (box :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :class "iconfolder3" :onclick "scripts/open_folders --music" " ")
+ (button :class "label_folder3" :onclick "scripts/open_folders --music" "Music"))
+ (box :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :class "iconfolder4" :onclick "scripts/open_folders --pics" " ")
+ (button :class "label_folder4" :onclick "scripts/open_folders --pics" "Pictures"))
+ (box :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :class "iconfolder5" :onclick "scripts/open_folders --cfg" " ")
+ (button :class "label_folder5" :onclick "scripts/open_folders --cfg" "~/.config"))
+ (box :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false"
+ (button :class "iconfolder6" :onclick "scripts/open_folders --local" " ")
+ (button :class "label_folder6" :onclick "scripts/open_folders --local" "~/.local"))))
+
+
+;; ** Windows *************************************************************************
+
+
+;; background
+(defwindow background :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 0 :y 0 :width "1920px" :height "1080px")
+ (bg))
+
+;; profile
+(defwindow profile :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 150 :y 150 :width 350 :height 440)
+ (user))
+
+;; system
+(defwindow system :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 150 :y 605 :width 350 :height 325)
+ (system))
+
+;; clock
+(defwindow clock :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 515 :y 150 :width 350 :height 155)
+ (clock))
+
+;; uptime
+(defwindow uptime :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 515 :y 320 :width 350 :height 155)
+ (uptime))
+
+;; music
+(defwindow music :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 515 :y 490 :width 610 :height 280)
+ (music))
+
+;; github
+(defwindow github :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 515 :y 785 :width 141 :height 145)
+ (github))
+
+;; reddit
+(defwindow reddit :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 671 :y 785 :width 141 :height 145)
+ (reddit))
+
+;; twitter
+(defwindow twitter :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 827 :y 785 :width 141 :height 145)
+ (twitter))
+
+;; youtube
+(defwindow youtube :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 983 :y 785 :width 142 :height 145)
+ (youtube))
+
+;; weather
+(defwindow weather :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 880 :y 150 :width 550 :height 325)
+ (weather))
+
+;; apps
+(defwindow apps :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 1140 :y 490 :width 290 :height 280)
+ (apps))
+
+;; mail
+(defwindow mail :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 1140 :y 785 :width 290 :height 145)
+ (mail))
+
+;; logout
+(defwindow logout :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 1445 :y 150 :width 155 :height 155)
+ (logout))
+
+;; sleep
+(defwindow sleep :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 1615 :y 150 :width 155 :height 155)
+ (sleep))
+
+;; reboot
+(defwindow reboot :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 1445 :y 320 :width 155 :height 155)
+ (reboot))
+
+;; poweroff
+(defwindow poweroff :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 1615 :y 320 :width 155 :height 155)
+ (poweroff))
+
+;; folders
+(defwindow folders :stacking "fg" :focusable "false" :monitor 0
+ :geometry (geometry :x 1445 :y 490 :width 325 :height 440)
+ (folders))
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/images/bg.jpg b/nixos/home/desktop/hyprland/eww/dashboard/images/bg.jpg
new file mode 100644
index 0000000..d0cb893
Binary files /dev/null and b/nixos/home/desktop/hyprland/eww/dashboard/images/bg.jpg differ
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/images/icons/code.svg b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/code.svg
new file mode 100644
index 0000000..b340b75
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/code.svg
@@ -0,0 +1,8 @@
+
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/images/icons/discord.svg b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/discord.svg
new file mode 100644
index 0000000..a02373d
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/discord.svg
@@ -0,0 +1,6 @@
+
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/images/icons/files.svg b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/files.svg
new file mode 100644
index 0000000..8a2c892
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/files.svg
@@ -0,0 +1,16 @@
+
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/images/icons/firefox.svg b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/firefox.svg
new file mode 100644
index 0000000..e14fafa
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/firefox.svg
@@ -0,0 +1,14 @@
+
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/images/icons/geany.svg b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/geany.svg
new file mode 100644
index 0000000..94029ba
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/geany.svg
@@ -0,0 +1,5 @@
+
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/images/icons/gimp.svg b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/gimp.svg
new file mode 100644
index 0000000..3a96df9
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/gimp.svg
@@ -0,0 +1,22 @@
+
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/images/icons/telegram.svg b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/telegram.svg
new file mode 100644
index 0000000..37c62cf
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/telegram.svg
@@ -0,0 +1,20 @@
+
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/images/icons/terminal.svg b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/terminal.svg
new file mode 100644
index 0000000..ea2f949
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/terminal.svg
@@ -0,0 +1,14 @@
+
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/images/icons/virtualbox.svg b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/virtualbox.svg
new file mode 100644
index 0000000..3883061
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/images/icons/virtualbox.svg
@@ -0,0 +1,11 @@
+
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/images/music.png b/nixos/home/desktop/hyprland/eww/dashboard/images/music.png
new file mode 100644
index 0000000..3ded333
Binary files /dev/null and b/nixos/home/desktop/hyprland/eww/dashboard/images/music.png differ
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/images/profile.jpg b/nixos/home/desktop/hyprland/eww/dashboard/images/profile.jpg
new file mode 100644
index 0000000..eb32c65
Binary files /dev/null and b/nixos/home/desktop/hyprland/eww/dashboard/images/profile.jpg differ
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/scripts/mails b/nixos/home/desktop/hyprland/eww/dashboard/scripts/mails
new file mode 100755
index 0000000..974d00a
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/scripts/mails
@@ -0,0 +1,7 @@
+#!/bin/python
+
+import imaplib
+obj = imaplib.IMAP4_SSL('imap.gmail.com',993)
+obj.login('username@gmail.com','PASSWORD') # write your email and password
+obj.select()
+print(len(obj.search(None, 'UnSeen')[1][0].split()))
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/scripts/music_info b/nixos/home/desktop/hyprland/eww/dashboard/scripts/music_info
new file mode 100755
index 0000000..0c0a658
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/scripts/music_info
@@ -0,0 +1,103 @@
+#!/bin/sh
+
+## Get data
+STATUS="$(playerctl status)"
+COVER="/tmp/.music_cover.jpg"
+MUSIC_DIR="$HOME/Music"
+
+## Get status
+get_status() {
+ if [[ $STATUS == *"Playing"* ]]; then
+ echo ""
+ else
+ echo ""
+ fi
+}
+
+## Get song
+get_song() {
+ playerctl-hyprlock --title
+}
+
+## Get artist
+get_artist() {
+ playerctl-hyprlock --artist
+}
+
+## Get time
+get_time() {
+ time=$(mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)')
+ if [[ -z "$time" ]]; then
+ echo "0"
+ else
+ echo "$time"
+ fi
+}
+get_ctime() {
+ ctime=$(mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g')
+ if [[ -z "$ctime" ]]; then
+ echo "0:00"
+ else
+ echo "$ctime"
+ fi
+}
+get_ttime() {
+ ttime=$(mpc -f %time% current)
+ if [[ -z "$ttime" ]]; then
+ echo "0:00"
+ else
+ echo "$ttime"
+ fi
+}
+
+## Get cover
+get_cover() {
+
+ DOWNLOAD_PATH="$HOME/.cache/cover.png"
+ FALLBACK_PATH="./images/music.png" # Change this to your static image path
+
+ # Get the image URL from playerctl
+ URL=$(playerctl metadata mpris:artUrl 2>/dev/null)
+
+ # If the URL is empty or playerctl fails, return the fallback path
+ if [[ -z "$URL" ]]; then
+ echo "$FALLBACK_PATH"
+ return
+ fi
+
+ # Try downloading the image
+ if curl -s -o "$DOWNLOAD_PATH" "$URL"; then
+ echo "$DOWNLOAD_PATH"
+ else
+ echo "$FALLBACK_PATH"
+ fi
+}
+
+## Execute accordingly
+if [[ "$1" == "--song" ]]; then
+ get_song
+elif [[ "$1" == "--artist" ]]; then
+ get_artist
+elif [[ "$1" == "--status" ]]; then
+ get_status
+elif [[ "$1" == "--time" ]]; then
+ get_time
+elif [[ "$1" == "--ctime" ]]; then
+ get_ctime
+elif [[ "$1" == "--ttime" ]]; then
+ get_ttime
+elif [[ "$1" == "--cover" ]]; then
+ get_cover
+elif [[ "$1" == "--toggle" ]]; then
+ mpc -q toggle
+elif [[ "$1" == "--next" ]]; then
+ {
+ mpc -q next
+ get_cover
+ }
+elif [[ "$1" == "--prev" ]]; then
+ {
+ mpc -q prev
+ get_cover
+ }
+fi
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/scripts/open_apps b/nixos/home/desktop/hyprland/eww/dashboard/scripts/open_apps
new file mode 100755
index 0000000..337db83
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/scripts/open_apps
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+## Open Applications
+FILE="$HOME/.cache/eww_launch.dashboard"
+CFG="$HOME/.config/eww/dashboard"
+EWW=$(which eww)
+
+close_dash() {
+ ${EWW} --config "$CFG" close \
+ background profile system clock uptime music github \
+ reddit twitter youtube weather apps mail logout sleep reboot poweroff folders
+ rm -rf "$FILE"
+}
+
+if [[ "$1" == "--ff" ]]; then
+ close_dash && firefox &
+
+elif [[ "$1" == "--tg" ]]; then
+ close_dash && telegram-desktop &
+
+elif [[ "$1" == "--dc" ]]; then
+ close_dash && discord &
+
+elif [[ "$1" == "--tr" ]]; then
+ close_dash && alacritty --working-directory ~ &
+
+elif [[ "$1" == "--fm" ]]; then
+ close_dash && thunar ~ &
+
+elif [[ "$1" == "--ge" ]]; then
+ close_dash && geany &
+
+elif [[ "$1" == "--cd" ]]; then
+ close_dash && code &
+
+elif [[ "$1" == "--gp" ]]; then
+ close_dash && gimp &
+
+elif [[ "$1" == "--vb" ]]; then
+ close_dash && virtualbox &
+
+fi
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/scripts/open_folders b/nixos/home/desktop/hyprland/eww/dashboard/scripts/open_folders
new file mode 100755
index 0000000..fb867ca
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/scripts/open_folders
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+## Open folders in thunar
+FILE="$HOME/.cache/eww_launch.dashboard"
+CFG="$HOME/.config/eww/dashboard"
+EWW=$(which eww)
+
+close_dash() {
+ ${EWW} --config "$CFG" close \
+ background profile system clock uptime music github \
+ reddit twitter youtube weather apps mail logout sleep reboot poweroff folders
+ rm -rf "$FILE"
+}
+
+if [[ "$1" == "--dl" ]]; then
+ close_dash && xdg-open ~/Downloads &
+
+elif [[ "$1" == "--docs" ]]; then
+ close_dash && xdg-open ~/Documents &
+
+elif [[ "$1" == "--music" ]]; then
+ close_dash && xdg-open ~/Music &
+
+elif [[ "$1" == "--pics" ]]; then
+ close_dash && xdg-open ~/Pictures &
+
+elif [[ "$1" == "--cfg" ]]; then
+ close_dash && xdg-open ~/.config &
+
+elif [[ "$1" == "--local" ]]; then
+ close_dash && xdg-open ~/.local/share &
+
+fi
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/scripts/open_links b/nixos/home/desktop/hyprland/eww/dashboard/scripts/open_links
new file mode 100755
index 0000000..ae99b9b
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/scripts/open_links
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+## Open links in firefox
+FILE="$HOME/.cache/eww_launch.dashboard"
+CFG="$HOME/.config/eww/dashboard"
+EWW=$(which eww)
+cmd="xdg-open"
+
+close_dash() {
+ ${EWW} --config "$CFG" close \
+ background profile system clock uptime music github \
+ reddit twitter youtube weather apps mail logout sleep reboot poweroff folders
+ rm -rf "$FILE"
+}
+
+if [[ "$1" == "--mail" ]]; then
+ close_dash && ${cmd} "https://mail.google.com"
+
+elif [[ "$1" == "--gh" ]]; then
+ close_dash && ${cmd} "https://github.com"
+
+elif [[ "$1" == "--rd" ]]; then
+ close_dash && ${cmd} "https://reddit.com"
+
+elif [[ "$1" == "--tw" ]]; then
+ close_dash && ${cmd} "https://twitter.com"
+
+elif [[ "$1" == "--yt" ]]; then
+ close_dash && ${cmd} "https://youtube.com"
+
+fi
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/scripts/sys_info b/nixos/home/desktop/hyprland/eww/dashboard/scripts/sys_info
new file mode 100755
index 0000000..82b60a5
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/scripts/sys_info
@@ -0,0 +1,67 @@
+#!/bin/sh
+
+## Files and Data
+PREV_TOTAL=0
+PREV_IDLE=0
+cpuFile="/tmp/.cpu_usage"
+
+## Get CPU usage
+get_cpu() {
+ if [[ -f "${cpuFile}" ]]; then
+ fileCont=$(cat "${cpuFile}")
+ PREV_TOTAL=$(echo "${fileCont}" | head -n 1)
+ PREV_IDLE=$(echo "${fileCont}" | tail -n 1)
+ fi
+
+ CPU=(`cat /proc/stat | grep '^cpu '`) # Get the total CPU statistics.
+ unset CPU[0] # Discard the "cpu" prefix.
+ IDLE=${CPU[4]} # Get the idle CPU time.
+
+ # Calculate the total CPU time.
+ TOTAL=0
+
+ for VALUE in "${CPU[@]:0:4}"; do
+ let "TOTAL=$TOTAL+$VALUE"
+ done
+
+ if [[ "${PREV_TOTAL}" != "" ]] && [[ "${PREV_IDLE}" != "" ]]; then
+ # Calculate the CPU usage since we last checked.
+ let "DIFF_IDLE=$IDLE-$PREV_IDLE"
+ let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
+ let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
+ echo "${DIFF_USAGE}"
+ else
+ echo "?"
+ fi
+
+ # Remember the total and idle CPU times for the next check.
+ echo "${TOTAL}" > "${cpuFile}"
+ echo "${IDLE}" >> "${cpuFile}"
+}
+
+## Get Used memory
+get_mem() {
+ printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}')
+}
+
+## Get Brightness
+get_blight() {
+ echo $(( ($(brightnessctl g) * 100 + $(brightnessctl m) / 2) / $(brightnessctl m) ))
+}
+
+## Get Battery
+get_battery() {
+ BAT=`ls /sys/class/power_supply | grep BAT | head -n 1`
+ cat /sys/class/power_supply/${BAT}/capacity
+}
+
+## Execute accordingly
+if [[ "$1" == "--cpu" ]]; then
+ get_cpu
+elif [[ "$1" == "--mem" ]]; then
+ get_mem
+elif [[ "$1" == "--blight" ]]; then
+ get_blight
+elif [[ "$1" == "--bat" ]]; then
+ get_battery
+fi
diff --git a/nixos/home/desktop/hyprland/eww/dashboard/scripts/weather_info b/nixos/home/desktop/hyprland/eww/dashboard/scripts/weather_info
new file mode 100755
index 0000000..6c27ff7
--- /dev/null
+++ b/nixos/home/desktop/hyprland/eww/dashboard/scripts/weather_info
@@ -0,0 +1,146 @@
+#!/bin/sh
+
+## Collect data
+cache_dir="$HOME/.cache/eww/weather"
+cache_weather_stat=${cache_dir}/weather-stat
+cache_weather_degree=${cache_dir}/weather-degree
+cache_weather_quote=${cache_dir}/weather-quote
+cache_weather_hex=${cache_dir}/weather-hex
+cache_weather_icon=${cache_dir}/weather-icon
+
+## Weather data
+KEY="YOUR_KEY"
+ID="CITY_ID"
+UNIT="metric" # Available options : 'metric' or 'imperial'
+
+## Make cache dir
+if [[ ! -d "$cache_dir" ]]; then
+ mkdir -p ${cache_dir}
+fi
+
+## Get data
+get_weather_data() {
+ weather=$(curl -sf "http://api.openweathermap.org/data/2.5/weather?APPID="$KEY"&id="$ID"&units="$UNIT"")
+ echo ${weather}
+
+ if [ ! -z "$weather" ]; then
+ weather_temp=$(echo "$weather" | jq ".main.temp" | cut -d "." -f 1)
+ weather_icon_code=$(echo "$weather" | jq -r ".weather[].icon" | head -1)
+ weather_description=$(echo "$weather" | jq -r ".weather[].description" | head -1 | sed -e "s/\b\(.\)/\u\1/g")
+
+ #Big long if statement of doom
+ if [ "$weather_icon_code" == "50d" ]; then
+ weather_icon=" "
+ weather_quote="Forecast says it's misty \nMake sure you don't get lost on your way..."
+ weather_hex="#84afdb"
+ elif [ "$weather_icon_code" == "50n" ]; then
+ weather_icon=" "
+ weather_quote="Forecast says it's a misty night \nDon't go anywhere tonight or you might get lost..."
+ weather_hex="#84afdb"
+ elif [ "$weather_icon_code" == "01d" ]; then
+ weather_icon=" "
+ weather_quote="It's a sunny day, gonna be fun! \nDon't go wandering all by yourself though..."
+ weather_hex="#ffd86b"
+ elif [ "$weather_icon_code" == "01n" ]; then
+ weather_icon=" "
+ weather_quote="It's a clear night \nYou might want to take a evening stroll to relax..."
+ weather_hex="#fcdcf6"
+ elif [ "$weather_icon_code" == "02d" ]; then
+ weather_icon=" "
+ weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..."
+ weather_hex="#adadff"
+ elif [ "$weather_icon_code" == "02n" ]; then
+ weather_icon=" "
+ weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?"
+ weather_hex="#adadff"
+ elif [ "$weather_icon_code" == "03d" ]; then
+ weather_icon=" "
+ weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..."
+ weather_hex="#adadff"
+ elif [ "$weather_icon_code" == "03n" ]; then
+ weather_icon=" "
+ weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?"
+ weather_hex="#adadff"
+ elif [ "$weather_icon_code" == "04d" ]; then
+ weather_icon=" "
+ weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..."
+ weather_hex="#adadff"
+ elif [ "$weather_icon_code" == "04n" ]; then
+ weather_icon=" "
+ weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?"
+ weather_hex="#adadff"
+ elif [ "$weather_icon_code" == "09d" ]; then
+ weather_icon=" "
+ weather_quote="It's rainy, it's a great day! \nGet some ramen and watch as the rain falls..."
+ weather_hex="#6b95ff"
+ elif [ "$weather_icon_code" == "09n" ]; then
+ weather_icon=" "
+ weather_quote=" It's gonna rain tonight it seems \nMake sure your clothes aren't still outside..."
+ weather_hex="#6b95ff"
+ elif [ "$weather_icon_code" == "10d" ]; then
+ weather_icon=" "
+ weather_quote="It's rainy, it's a great day! \nGet some ramen and watch as the rain falls..."
+ weather_hex="#6b95ff"
+ elif [ "$weather_icon_code" == "10n" ]; then
+ weather_icon=" "
+ weather_quote=" It's gonna rain tonight it seems \nMake sure your clothes aren't still outside..."
+ weather_hex="#6b95ff"
+ elif [ "$weather_icon_code" == "11d" ]; then
+ weather_icon=""
+ weather_quote="There's storm for forecast today \nMake sure you don't get blown away..."
+ weather_hex="#ffeb57"
+ elif [ "$weather_icon_code" == "11n" ]; then
+ weather_icon=""
+ weather_quote="There's gonna be storms tonight \nMake sure you're warm in bed and the windows are shut..."
+ weather_hex="#ffeb57"
+ elif [ "$weather_icon_code" == "13d" ]; then
+ weather_icon=" "
+ weather_quote="It's gonna snow today \nYou'd better wear thick clothes and make a snowman as well!"
+ weather_hex="#e3e6fc"
+ elif [ "$weather_icon_code" == "13n" ]; then
+ weather_icon=" "
+ weather_quote="It's gonna snow tonight \nMake sure you get up early tomorrow to see the sights..."
+ weather_hex="#e3e6fc"
+ elif [ "$weather_icon_code" == "40d" ]; then
+ weather_icon=" "
+ weather_quote="Forecast says it's misty \nMake sure you don't get lost on your way..."
+ weather_hex="#84afdb"
+ elif [ "$weather_icon_code" == "40n" ]; then
+ weather_icon=" "
+ weather_quote="Forecast says it's a misty night \nDon't go anywhere tonight or you might get lost..."
+ weather_hex="#84afdb"
+ else
+ weather_icon=" "
+ weather_quote="Sort of odd, I don't know what to forecast \nMake sure you have a good time!"
+ weather_hex="#adadff"
+ fi
+ echo "$weather_icon" >${cache_weather_icon}
+ echo "$weather_description" >${cache_weather_stat}
+ echo "$weather_temp""°C" >${cache_weather_degree}
+ echo -e "$weather_quote" >${cache_weather_quote}
+ echo "$weather_hex" >${cache_weather_hex}
+ else
+ echo "Weather Unavailable" >${cache_weather_stat}
+ echo " " >${cache_weather_icon}
+ echo -e "Ah well, no weather huh? \nEven if there's no weather, it's gonna be a great day!" >${cache_weather_quote}
+ echo "-" >${cache_weather_degree}
+ echo "#adadff" >${tcache_weather_hex}
+ fi
+}
+
+## Execute
+if [[ "$1" == "--getdata" ]]; then
+ get_weather_data
+elif [[ "$1" == "--icon" ]]; then
+ cat ${cache_weather_icon}
+elif [[ "$1" == "--temp" ]]; then
+ cat ${cache_weather_degree}
+elif [[ "$1" == "--hex" ]]; then
+ cat ${cache_weather_hex}
+elif [[ "$1" == "--stat" ]]; then
+ cat ${cache_weather_stat}
+elif [[ "$1" == "--quote" ]]; then
+ cat ${cache_weather_quote} | head -n1
+elif [[ "$1" == "--quote2" ]]; then
+ cat ${cache_weather_quote} | tail -n1
+fi
diff --git a/nixos/home/desktop/hyprland/hyprland.nix b/nixos/home/desktop/hyprland/hyprland.nix
index 18a124a..d62219d 100644
--- a/nixos/home/desktop/hyprland/hyprland.nix
+++ b/nixos/home/desktop/hyprland/hyprland.nix
@@ -16,6 +16,7 @@
./rofi.nix
./wlogout.nix
./hyprlock.nix
+ ./eww.nix
];
config = lib.mkIf config.desktop.hyprland.enable {
@@ -29,6 +30,8 @@
wlogout.enable = lib.mkDefault true;
};
+ program.eww.enable = lib.mkDefault true;
+
# XDG Portals configuration
xdg.portal = {
enable = true;
@@ -45,7 +48,7 @@
#services.dunst.enable = true;
services.swaync = {
enable = true;
- settings = {
+ settings = {
fit-to-screen = false;
control-center-height = 500;
control-center-width = 250;
@@ -234,6 +237,7 @@
#"$mod+Shift,F, exec, windowpin.sh"
"$mod, Backspace, exec, ${pkgs.wlogout}/bin/wlogout -b 2"
"$Ctrl+Alt, W, exec, ${pkgs.toybox}/bin/killall waybar || ${pkgs.waybar}/bin/waybar" # toggle waybar
+ "$mod, B, exec, eww-dashboard-toggle"
"$mod, T, exec, $term"
"$mod, F, exec, $browser"
@@ -443,7 +447,7 @@
"float,class:^(org.raspberrypi.rpi-imager)$"
"opacity 0.80 0.70,title:^(Cobra Monitor)$"
"opacity 0.80 0.70,class:^(chat-simplex-desktop-MainKt)$"
-
+
"float,class:^(Bitwarden)$"
];
diff --git a/nixos/home/desktop/hyprland/hyprlock.nix b/nixos/home/desktop/hyprland/hyprlock.nix
index 1c7a474..819bb26 100644
--- a/nixos/home/desktop/hyprland/hyprlock.nix
+++ b/nixos/home/desktop/hyprland/hyprlock.nix
@@ -15,6 +15,11 @@
# Get the current battery percentage
battery_percentage=$(${pkgs.toybox}/bin/cat /sys/class/power_supply/BAT1/capacity)
+ if [ "$1" = "-p" ]; then
+ echo "$battery_percentage"
+ exit 0
+ fi
+
# Get the battery status (Charging or Discharging)
battery_status=$(${pkgs.toybox}/bin/cat /sys/class/power_supply/BAT1/status)
@@ -87,6 +92,27 @@
fi
}
+ get_cover() {
+ DOWNLOAD_PATH="$HOME/.cache/cover.png"
+ FALLBACK_PATH="./images/music.png" # Change this to your static image path
+
+ # Get the image URL from playerctl
+ URL=$(playerctl metadata mpris:artUrl 2>/dev/null)
+
+ # If the URL is empty or playerctl fails, return the fallback path
+ if [[ -z "$URL" ]]; then
+ echo "$FALLBACK_PATH"
+ return
+ fi
+
+ # Try downloading the image
+ if curl -s -o "$DOWNLOAD_PATH" "$URL"; then
+ echo "$DOWNLOAD_PATH"
+ else
+ echo "$FALLBACK_PATH"
+ fi
+ }
+
# Function to truncate text with ellipsis if necessary
truncate_with_ellipsis() {
text=$1
@@ -97,7 +123,6 @@
echo "$text"
fi
}
-
# Parse the argument
case "$1" in
--title)
@@ -129,9 +154,9 @@
--status)
status=$(playerctl status 2>/dev/null)
if [[ $status == "Playing" ]]; then
- echo "Playing Now"
+ echo ""
elif [[ $status == "Paused" ]]; then
- echo "Paused"
+ echo ""
else
echo ""
fi
@@ -155,6 +180,9 @@
--source)
get_source_info
;;
+ --cover)
+ get_cover
+ ;;
*)
echo "Invalid option: $1"
echo "Usage: $0 --title | --artist | --album | --source | --source-symbol"
diff --git a/nixos/home/desktop/hyprland/waybar.nix b/nixos/home/desktop/hyprland/waybar.nix
index 75fa1f9..5dc96bc 100644
--- a/nixos/home/desktop/hyprland/waybar.nix
+++ b/nixos/home/desktop/hyprland/waybar.nix
@@ -321,6 +321,8 @@
@define-color wb-act-fg #313244;
@define-color wb-hvr-bg #f5c2e7;
@define-color wb-hvr-fg #313;"
+ else if userSettings.theme == "evangelion-blood"
+ then "@define-color bar-bg rgba(0, 0, 0, 0);"
else ""
}
* {
diff --git a/nixos/home/packages/tools/fastfetch.nix b/nixos/home/packages/tools/fastfetch.nix
index 1649781..2b4d884 100644
--- a/nixos/home/packages/tools/fastfetch.nix
+++ b/nixos/home/packages/tools/fastfetch.nix
@@ -18,7 +18,7 @@
"$schema" = "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json";
"logo" = {
"source" = "/home/shinya/.config/fastfetch/logo.png";
- "width" = 30;
+ "width" = 34;
"height" = 18;
};
"modules" = [
@@ -40,6 +40,7 @@
"cpu"
"gpu"
"disk"
+ "break"
];
};
};
diff --git a/nixos/system/settings/style.nix b/nixos/system/settings/style.nix
index 7655901..970b105 100644
--- a/nixos/system/settings/style.nix
+++ b/nixos/system/settings/style.nix
@@ -14,25 +14,30 @@
stylix = {
enable = true;
image = ../../../config/backgrounds/${userSettings.background};
- #base16Scheme = "${pkgs-stable.base16-schemes}/share/themes/${userSettings.theme}.yaml"; # List all possible themes: $ nix build nixpkgs#base16-schemes && ls result/share/themes
- base16Scheme = {
- base00 = "000000"; # background
- base01 = "300505"; # additional background
- base02 = "804040"; # selected text, highlights
- base03 = "a06000"; # unselected border
- base04 = "d03030"; # discord name texts
- base05 = "f00000"; # text
- base06 = "b00505"; # main names in discord?
- base07 = "f06060";
- base08 = "f07070";
- base09 = "f08080";
- base0A = "f09090";
- base0B = "c00000"; # title text
- base0C = "c00090"; # links and main image things
- base0D = "a03030"; # select border / special text
- base0E = "f0d0d0";
- base0F = "f0e0e0";
- };
+ base16Scheme =
+ if userSettings.theme == "catppuccin-mocha"
+ then "${pkgs-stable.base16-schemes}/share/themes/${userSettings.theme}.yaml"
+ else if userSettings.theme == "evangelion-blood"
+ then # List all possible themes: $ nix build nixpkgs#base16-schemes && ls result/share/themes
+ {
+ base00 = "000000"; # background
+ base01 = "300505"; # additional background
+ base02 = "804040"; # selected text, highlights
+ base03 = "a06000"; # unselected border
+ base04 = "d03030"; # discord name texts
+ base05 = "f00000"; # text
+ base06 = "b00505"; # main names in discord?
+ base07 = "f06060";
+ base08 = "f07070";
+ base09 = "f08080";
+ base0A = "f09090";
+ base0B = "c00000"; # title text
+ base0C = "c00090"; # links and main image things
+ base0D = "a03030"; # select border / special text
+ base0E = "f0d0d0";
+ base0F = "f0e0e0";
+ }
+ else "${pkgs-stable.base16-schemes}/share/themes/${userSettings.theme}.yaml";
polarity = "dark";
autoEnable = true;
@@ -56,17 +61,17 @@
package = pkgs.nerd-fonts.monaspace;
name = "Monaspace Xenon";
};
-
+
sansSerif = {
package = pkgs.nerd-fonts.monaspace;
name = "Monaspace Argon";
};
-
+
monospace = {
- package = pkgs.nerd-fonts.monaspace;
- name = "Monaspace Neon";
+ package = pkgs.nerd-fonts.jetbrains-mono;
+ name = "JetBrainsMono NF";
};
-
+
emoji = {
package = pkgs-stable.noto-fonts-emoji;
name = "Noto Color Emoji";