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";