From 5aff13cb3fe8dd56ff0ae90e0035be120fc7ce71 Mon Sep 17 00:00:00 2001 From: alexion Date: Sun, 11 Oct 2026 20:33:47 -0400 Subject: [PATCH] refactor(network): own NetworkManager integration --- configs/nixos/hosts/neogaia/default.nix | 3 +- configs/nixos/hosts/zeus/default.nix | 2 +- .../nixos/modules/desktop/session/waybar.nix | 41 ------------- configs/nixos/modules/network/default.nix | 57 +++++++++++++++++++ 4 files changed, 59 insertions(+), 44 deletions(-) create mode 100644 configs/nixos/modules/network/default.nix diff --git a/configs/nixos/hosts/neogaia/default.nix b/configs/nixos/hosts/neogaia/default.nix index 45e7d36..aeabd67 100644 --- a/configs/nixos/hosts/neogaia/default.nix +++ b/configs/nixos/hosts/neogaia/default.nix @@ -14,8 +14,7 @@ modules.host.cachyos.enable = true; - # So wifi can be joined from the console. - networking.networkmanager.enable = true; + modules.network.enable = true; registry.address.neogaia.self = "10.23.50.146"; diff --git a/configs/nixos/hosts/zeus/default.nix b/configs/nixos/hosts/zeus/default.nix index f30db78..14f8b19 100644 --- a/configs/nixos/hosts/zeus/default.nix +++ b/configs/nixos/hosts/zeus/default.nix @@ -21,7 +21,7 @@ enable32Bit = true; }; - networking.networkmanager.enable = true; + modules.network.enable = true; services.logind.settings.Login = { HandlePowerKey = "ignore"; diff --git a/configs/nixos/modules/desktop/session/waybar.nix b/configs/nixos/modules/desktop/session/waybar.nix index a78c23a..7eb8dd6 100644 --- a/configs/nixos/modules/desktop/session/waybar.nix +++ b/configs/nixos/modules/desktop/session/waybar.nix @@ -27,38 +27,6 @@ let registeredWaybarModuleSettings = lib.mapAttrs (_name: module: module.settings) hostWaybarModules; - networkStatus = pkgs.writeShellScript "waybar-network-status" '' - active=$( - ${lib.getExe' pkgs.networkmanager "nmcli"} -t -f DEVICE,TYPE,STATE,CONNECTION device status \ - | ${lib.getExe' pkgs.gawk "awk"} -F: '$3 == "connected" && $2 != "loopback" { print; exit }' - ) - - if [ -z "$active" ]; then - ${lib.getExe pkgs.jq} -cn \ - --arg text "${util.glyph "f127"} off" \ - --arg tooltip "Network disconnected" \ - --arg class "disconnected" \ - '{ text: $text, tooltip: $tooltip, class: $class }' - exit 0 - fi - - IFS=: read -r device type _state connection <<< "$active" - - case "$type" in - wifi) icon="${util.glyph "f1eb"}" ;; - ethernet) icon="LAN" ;; - *) icon="NET" ;; - esac - - ipaddr=$(${lib.getExe' pkgs.iproute2 "ip"} -4 -o addr show dev "$device" | ${lib.getExe' pkgs.gawk "awk"} '{ print $4; exit }') - - ${lib.getExe pkgs.jq} -cn \ - --arg text "$icon $connection" \ - --arg tooltip "$device: ''${ipaddr:-no IPv4}" \ - --arg class "$type" \ - '{ text: $text, tooltip: $tooltip, class: $class }' - ''; - in { options.modules.desktop.session.waybar.enable = lib.mkEnableOption "the Waybar status bar"; @@ -106,15 +74,6 @@ in }; }; - "custom/network" = { - order = 60; - settings = { - return-type = "json"; - exec = "${networkStatus}"; - interval = 5; - }; - }; - battery = { order = 70; settings = { diff --git a/configs/nixos/modules/network/default.nix b/configs/nixos/modules/network/default.nix new file mode 100644 index 0000000..c524db1 --- /dev/null +++ b/configs/nixos/modules/network/default.nix @@ -0,0 +1,57 @@ +{ + config, + lib, + pkgs, + util, + ... +}: +# NetworkManager-managed networking. +let + networkStatus = pkgs.writeShellScript "waybar-network-status" '' + active=$( + ${lib.getExe' pkgs.networkmanager "nmcli"} -t -f DEVICE,TYPE,STATE,CONNECTION device status \ + | ${lib.getExe' pkgs.gawk "awk"} -F: '$3 == "connected" && $2 != "loopback" { print; exit }' + ) + + if [ -z "$active" ]; then + ${lib.getExe pkgs.jq} -cn \ + --arg text "${util.glyph "f127"} off" \ + --arg tooltip "Network disconnected" \ + --arg class "disconnected" \ + '{ text: $text, tooltip: $tooltip, class: $class }' + exit 0 + fi + + IFS=: read -r device type _state connection <<< "$active" + + case "$type" in + wifi) icon="${util.glyph "f1eb"}" ;; + ethernet) icon="LAN" ;; + *) icon="NET" ;; + esac + + ipaddr=$(${lib.getExe' pkgs.iproute2 "ip"} -4 -o addr show dev "$device" | ${lib.getExe' pkgs.gawk "awk"} '{ print $4; exit }') + + ${lib.getExe pkgs.jq} -cn \ + --arg text "$icon $connection" \ + --arg tooltip "$device: ''${ipaddr:-no IPv4}" \ + --arg class "$type" \ + '{ text: $text, tooltip: $tooltip, class: $class }' + ''; +in +{ + options.modules.network.enable = lib.mkEnableOption "NetworkManager-managed networking"; + + config = lib.mkIf config.modules.network.enable { + networking.networkmanager.enable = true; + + registry.waybar.${config.networking.hostName}."custom/network" = { + order = 60; + settings = { + return-type = "json"; + exec = "${networkStatus}"; + interval = 5; + }; + }; + }; +}