diff --git a/home/modules/i3+sway/default.nix b/home/modules/i3+sway/default.nix index fa12dbb..7511b5a 100644 --- a/home/modules/i3+sway/default.nix +++ b/home/modules/i3+sway/default.nix @@ -105,12 +105,134 @@ in { }; config = { + # i3blocks configuration file + home.file.".config/i3blocks/config".text = '' + # i3blocks config - replicating waybar setup + separator_block_width=15 + markup=pango + + [disk] + command=df -h / | awk 'NR==2 {print "💾 " $5}' + interval=30 + separator=true + + [cpu] + command=top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print "🧠 " int(100 - $1) "%"}' + interval=2 + separator=true + + [memory] + command=free | awk 'NR==2 {printf "🐏 %.0f%%\n", $3*100/$2}' + interval=5 + separator=true + + [pulseaudio] + command=${pkgs.writeShellScript "i3blocks-pulseaudio" '' + volume=$(pactl get-sink-volume @DEFAULT_SINK@ | grep -Po '\d+%' | head -1) + muted=$(pactl get-sink-mute @DEFAULT_SINK@ | grep -o 'yes') + if [ "$muted" = "yes" ]; then + echo "🔇" + else + vol_num=''${volume%\%} + if [ $vol_num -le 33 ]; then + echo "🔈 $volume" + elif [ $vol_num -le 66 ]; then + echo "🔉 $volume" + else + echo "🔊 $volume" + fi + fi + ''} + interval=1 + signal=10 + separator=true + + [backlight] + command=${pkgs.writeShellScript "i3blocks-backlight" '' + if command -v brightnessctl &>/dev/null; then + brightnessctl g | awk -v max=$(brightnessctl m) '{printf "☀️ %.0f%%\n", ($1/max)*100}' + fi + ''} + interval=1 + separator=true + + [network] + command=${pkgs.writeShellScript "i3blocks-network" '' + if iwgetid -r &>/dev/null; then + ssid=$(iwgetid -r) + signal=$(grep "^\s*w" /proc/net/wireless | awk '{print int($3 * 100 / 70)}') + echo "📶 $ssid ($signal%)" + else + ip=$(ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '127.0.0.1' | head -1) + if [ -n "$ip" ]; then + echo "🔌 $ip" + else + echo "❌" + fi + fi + ''} + interval=5 + separator=true + + [battery] + command=${pkgs.writeShellScript "i3blocks-battery" '' + if [ -d /sys/class/power_supply/BAT0 ]; then + capacity=$(cat /sys/class/power_supply/BAT0/capacity) + status=$(cat /sys/class/power_supply/BAT0/status) + + if [ "$status" = "Charging" ]; then + echo "⚡ $capacity%" + else + echo "🔋 $capacity%" + fi + fi + ''} + interval=10 + separator=true + + [time] + command=date '+%Y-%m-%d %H:%M' + interval=1 + separator=false + ''; + xsession.windowManager.i3 = let base_i3_config = recursiveUpdate shared_config { bars = [{ position = "bottom"; - statusCommand = "${pkgs.i3status}/bin/i3status"; + statusCommand = "${pkgs.i3blocks}/bin/i3blocks"; trayOutput = "primary"; # Enable system tray on primary output + fonts = { + names = [ "Fira Code" "monospace" ]; + size = 11.0; + }; + colors = { + background = "#000000"; + statusline = "#ffffff"; + separator = "#666666"; + + # Workspace button colors (matching waybar) + focusedWorkspace = { + border = "#285577"; + background = "#285577"; + text = "#ffffff"; + }; + activeWorkspace = { + border = "#5f676a"; + background = "#5f676a"; + text = "#ffffff"; + }; + inactiveWorkspace = { + border = "#222222"; + background = "#222222"; + text = "#888888"; + }; + urgentWorkspace = { + border = "#900000"; + background = "#900000"; + text = "#ffffff"; + }; + }; }]; keybindings = shared_config.keybindings // { "${shared_config.modifier}+d" = "exec rofi -show drun"; @@ -315,7 +437,5 @@ in { sidebar-mode = true; }; }; - - programs.i3status.enable = true; }; }