{ description = "systemd-networkd Web UI (Go + HTML/JS)"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; in { # Kehitysympäristö devShells.default = pkgs.mkShell { buildInputs = with pkgs; [ go_1_24 gopls # LSP-tuki ]; shellHook = '' echo "Development shell for systemd-networkd Web UI" echo "Go version: $(go version)" ''; }; # Sovelluksen buildattava paketti packages.default = pkgs.buildGoModule { pname = "networkd-webui"; version = "0.1.0"; src = ./.; vendorHash = null; # täytetään `nix develop` -> `go mod vendor` -> `nix hash` subPackages = [ "." ]; ldflags = [ "-s" "-w" ]; }; # Deploymenttiin tarkoitettu NixOS service module nixosModules.default = { config, pkgs, lib, ... }: { options.services.networkd-webui = { enable = lib.mkEnableOption "systemd-networkd Web UI"; port = lib.mkOption { type = lib.types.port; default = 8080; description = "Port for the web UI."; }; }; config = lib.mkIf config.services.networkd-webui.enable { systemd.services.networkd-webui = { description = "systemd-networkd Web UI"; after = [ "network.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStart = "${self.packages.${system}.default}/bin/networkd-webui -port ${toString config.services.networkd-webui.port}"; Restart = "on-failure"; DynamicUser = true; ProtectSystem = "strict"; ProtectHome = true; NoNewPrivileges = true; }; }; }; }; }); }