summaryrefslogtreecommitdiffstats
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix70
1 files changed, 70 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..9a8ec32
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,70 @@
+{
+ 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;
+ };
+ };
+ };
+ };
+ });
+}