Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 22 additions & 6 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 15 additions & 7 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
nixpkgs.url = "nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
rust-overlay.url = "github:oxalica/rust-overlay";
crane.url = "github:ipetkov/crane";

# let git manage submodules
self.submodules = true;
Expand All @@ -25,26 +26,33 @@
nixpkgs,
flake-utils,
rust-overlay,
crane,
...
}:
flake-utils.lib.eachDefaultSystem (system: let
# add rust overlay
pkgs = import nixpkgs {
# Plain nixpkgs — used for packages and checks.
pkgs = import nixpkgs {inherit system;};

# nixpkgs with rust-overlay — only needed for the dev shell, which uses
# pkgs.rust-bin to get a customised Rust toolchain.
devPkgs = import nixpkgs {
inherit system;
overlays = [rust-overlay.overlays.default];
};

craneLib = crane.mkLib pkgs;
in {
devShells.default = import ./nix/shell.nix {
inherit pkgs;
};
devShells.default = import ./nix/shell.nix {pkgs = devPkgs; inherit craneLib;};

packages.default = pkgs.callPackage ./nix/package.nix {
inherit pkgs;
inherit pkgs craneLib;
};

checks.default = self.packages.${system}.default;

formatter = pkgs.alejandra;
})
// {
nixosModules.default = import ./nix/nixos-module.nix;
nixosModules.default = import ./nix/nixos-module.nix {mkCraneLib = crane.mkLib;};
};
}
34 changes: 16 additions & 18 deletions nix/nixos-module.nix
Original file line number Diff line number Diff line change
@@ -1,61 +1,59 @@
{
{mkCraneLib}: {
config,
lib,
pkgs,
...
}:
with lib; let
defguard-client = pkgs.callPackage ./package.nix {};
}: let
craneLib = mkCraneLib pkgs;
defguard-client = pkgs.callPackage ./package.nix {inherit pkgs craneLib;};
cfg = config.programs.defguard-client;
in {
options.programs.defguard-client = {
enable = mkEnableOption "Defguard VPN client and service";
enable = lib.mkEnableOption "Defguard VPN client and service";

package = mkOption {
type = types.package;
package = lib.mkOption {
type = lib.types.package;
default = defguard-client;
description = "defguard-client package to use";
};

logLevel = mkOption {
type = types.str;
logLevel = lib.mkOption {
type = lib.types.str;
default = "info";
description = "Log level for defguard-service";
};

statsPeriod = mkOption {
type = types.int;
statsPeriod = lib.mkOption {
type = lib.types.int;
default = 30;
description = "Interval in seconds for interface statistics updates";
};
};

config = mkIf cfg.enable {
# Add client package
config = lib.mkIf cfg.enable {
environment.systemPackages = [cfg.package];

# Setup systemd service for the intrerface management daemon
systemd.services.defguard-service = {
description = "Defguard VPN Service";
documentation = ["https://docs.defguard.net"];
wantedBy = ["multi-user.target"];
wants = ["network-online.target"];
after = ["network-online.target"];
serviceConfig = {
Group = "defguard";
ExecStart = "${cfg.package}/bin/defguard-service --log-level ${cfg.logLevel} --stats-period ${toString cfg.statsPeriod}";
ExecReload = "/bin/kill -HUP $MAINPID";
Group = "defguard";
Restart = "on-failure";
RestartSec = 2;
KillMode = "process";
KillSignal = "SIGINT";
LimitNOFILE = 65536;
LimitNPROC = "infinity";
Restart = "on-failure";
RestartSec = 2;
TasksMax = "infinity";
OOMScoreAdjust = -1000;
};
};

# Make sure the defguard group exists
users.groups.defguard = {};
};
}
Loading
Loading