aboutsummaryrefslogtreecommitdiffstats
path: root/modules/by-name/i3/i3status-rust
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-05-20 21:22:09 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-05-20 21:22:09 +0200
commitfd9177b6cc728115999fb78e1266108210b2cb6d (patch)
tree184a4b2ca5879fd70ea94229f817ef5b8c09fd2d /modules/by-name/i3/i3status-rust
parentpkgs/{i3bar-river,i3status-rust}: Init (diff)
downloadnixos-config-fd9177b6cc728115999fb78e1266108210b2cb6d.zip
modules/{i3bar-river,i3status-rust}: Init
Diffstat (limited to 'modules/by-name/i3/i3status-rust')
-rw-r--r--modules/by-name/i3/i3status-rust/module.nix152
-rwxr-xr-xmodules/by-name/i3/i3status-rust/scripts/mpd_song_name.sh32
2 files changed, 184 insertions, 0 deletions
diff --git a/modules/by-name/i3/i3status-rust/module.nix b/modules/by-name/i3/i3status-rust/module.nix
new file mode 100644
index 00000000..fec740d7
--- /dev/null
+++ b/modules/by-name/i3/i3status-rust/module.nix
@@ -0,0 +1,152 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}: let
+ cfg = config.soispha.programs.i3bar-river;
+
+ mkScript = name: deps:
+ lib.getExe (pkgs.writeShellApplication {
+ inherit name;
+ text = builtins.readFile ./scripts/${name};
+
+ inheritPath = false;
+ runtimeInputs = deps;
+ });
+in {
+ options.soispha.programs.i3status-rust = {
+ enable = lib.mkEnableOption "i3status-rust";
+
+ package = lib.mkPackageOption pkgs "i3status-rust-patched" {};
+ };
+
+ config = lib.mkIf cfg.enable {
+ home-manager.users.soispha = {
+ programs.i3status-rust = {
+ enable = true;
+ inherit (cfg) package;
+
+ bars.default = {
+ settings = {
+ icons = {
+ icons = "material-nf";
+
+ overrides = {
+ cpu = [
+ "󰍛" # nf-md-memory
+ ];
+ memory_mem = ""; # nf-fa-bars
+ };
+ };
+
+ theme = {
+ theme = "slick";
+
+ overrides = {
+ separator = "native";
+ alternating_tint_bg = "none";
+ alternating_tint_fg = "none";
+ };
+ };
+ };
+
+ blocks = [
+ {
+ block = "time";
+ format = " $timestamp.datetime(format:'%d/%m/%y (%a) %H:%M %:z') ";
+ interval = 60;
+ }
+
+ {
+ # TODO(@bpeetz): Switch to “music” when mpd gets mpris support <2025-05-20>
+ block = "custom";
+ interval = "once";
+ persistent = true;
+ command = mkScript "mpd_song_name.sh" [pkgs.mpc pkgs.coreutils];
+ hide_when_empty = true;
+ shell = "${lib.getExe pkgs.dash}";
+ format = " $text.str(max_width:60,rot_interval:0.5) ";
+ }
+
+ {
+ block = "sound";
+ driver = "pulseaudio";
+ headphones_indicator = true;
+ }
+
+ # System info
+ {
+ block = "cpu";
+ }
+ {
+ block = "memory";
+ format = " $icon $mem_used_percents {($swap_used_percents.eng(range:1..)) | }";
+ }
+ {
+ block = "amd_gpu";
+ format = " $icon $utilization (^icon_memory_mem $vram_used_percents) ";
+ }
+
+ {
+ block = "net";
+ format = " ^icon_net_down $speed_down.eng(prefix:Ki) ^icon_net_up $speed_up.eng(prefix:Ki) ";
+ }
+ {
+ block = "privacy";
+ driver = [
+ {name = "v4l";}
+ {name = "pipewire";}
+ ];
+ }
+
+ {
+ block = "disk_space";
+ path = "/srv";
+ info_type = "used";
+ format = " $icon $used.eng(prefix:Gi) ($percentage) ";
+ backend = "btrfs";
+
+ # warn if 80 % is used, alert after 90 % used.
+ warning = 80;
+ alert = 90;
+ }
+ {
+ block = "backlight";
+ missing_format = "";
+ }
+ {
+ block = "battery";
+ missing_format = "";
+ }
+
+ # {
+ # block = "calendar";
+ #
+ # source = {
+ # calendars = ["user/calendar"];
+ # auth = {
+ # type = "unauthenticated";
+ # };
+ # };
+ # }
+ # {
+ # block = "focused_window";
+ # driver = "wlr_toplevel_management";
+ # }
+ # {
+ # block = "maildir";
+ # display_type = "new";
+ # inboxes = ["~/.local/share/maildir/soispha/*"];
+ # interval = 60;
+ # threshold_critical = 10;
+ # threshold_warning = 1;
+ # }
+ ];
+ };
+ };
+
+ programs.i3bar-river.settings.command = "${lib.getExe cfg.package} config-default.toml";
+ };
+ };
+}
diff --git a/modules/by-name/i3/i3status-rust/scripts/mpd_song_name.sh b/modules/by-name/i3/i3status-rust/scripts/mpd_song_name.sh
new file mode 100755
index 00000000..28921520
--- /dev/null
+++ b/modules/by-name/i3/i3status-rust/scripts/mpd_song_name.sh
@@ -0,0 +1,32 @@
+#!/usr/bin/env dash
+
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+
+while true; do
+ state="$(mpc status '%state%')"
+
+ if [ "$state" = "playing" ]; then
+ song="$(mpc --format '[[%artist% - ]%title%]|[%file%]' current)"
+ progress="$(mpc status "%currenttime%/%totaltime%")"
+
+ echo "$song :: $progress"
+ else
+ # The song has stopped, we are done displaying it.
+ echo ""
+
+ # Wait for a new song. (Or in this case for a new event.)
+ mpc idle
+ fi
+
+ sleep 1
+done
+
+# vim: ft=sh