Skip to content

Commit

Permalink
Add generic-device-plugin module
Browse files Browse the repository at this point in the history
Signed-off-by: magic_rb <[email protected]>
  • Loading branch information
MagicRB committed Dec 26, 2024
1 parent a2d09d2 commit 0ca294d
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 0 deletions.
2 changes: 2 additions & 0 deletions modules/ids.nix
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
dnsmasq = 405;
attic = 406;
ntfy-sh = 407;
generic-device-plugin = 411;
vmail = 5000;
nobody = 65534;
};
Expand Down Expand Up @@ -70,6 +71,7 @@
dnsmasq = 405;
attic = 406;
ntfy-sh = 407;
generic-device-plugin = 411;
vmail = 5000;
nogroup = 65534;
};
Expand Down
1 change: 1 addition & 0 deletions modules/list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,5 @@
./services/dnsmasq.nix
./services/attic.nix
./services/ntfy-sh.nix
./services/generic-device-plugin.nix
]
105 changes: 105 additions & 0 deletions modules/services/generic-device-plugin.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# SPDX-FileCopyrightText: 2021 Richard Brežák and NixNG contributors
#
# SPDX-License-Identifier: MPL-2.0
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
{
pkgs,
config,
lib,
nglib,
...
}:
let
cfg = config.services.genericDevicePlugin;
settingsFormat = pkgs.formats.json { };
usageLink = "https://github.com/squat/generic-device-plugin/tree/main?tab=readme-ov-file#usage";
in
{
options.services.genericDevicePlugin = {
enable = lib.mkEnableOption "Whether to enable the generic-device-plugin";

package = lib.mkPackageOption pkgs "generic-device-plugin" { };

settings = {
devices = lib.mkOption {
type = lib.types.listOf (settingsFormat.type);
default = [ ];
description = ''
See [upstream documentation](${usageLink});
'';
example = lib.literalExpression ''
[
{
name = "zigbee";
groups = lib.singleton { paths = lib.singleton { path = "/dev/ttyZigbee"; }; };
}
{
name = "ender3";
groups = lib.singleton { paths = lib.singleton { path = "/dev/ttyEnder3"; }; };
}
]
'';
};
domain = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
See [upstream documentation](${usageLink}). If `null`, upstream default is used.
'';
};
listen = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
See [upstream documentation](${usageLink}). If `null`, upstream default is used.
'';
};
logLevel = lib.mkOption {
type = lib.types.enum [
"all"
"debug"
"info"
"warn"
"error"
"none"
"info"
];
default = "info";
description = ''
Log level to use.
'';
};
pluginDirectory = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = ''
See [upstream documentation](${usageLink}). If `null`, upstream default is used.
'';
};
};
user = nglib.mkUserOption "generic-device-plugin" "User to run `generic-device-plugin` as.";
group = nglib.mkGroupOption "generic-device-plugin" "Group to run `generic-device-plugin` as.";
};
config = lib.mkIf cfg.enable {

users.users.${cfg.user} = nglib.mkDefaultRec {
description = "generic-device-plugin";
group = cfg.group;
createHome = false;
home = "/var/empty";
useDefaultShell = false;
uid = config.ids.uids.generic-device-plugin;
};

users.groups.${cfg.group} = nglib.mkDefaultRec { gid = config.ids.gids.generic-device-plugin; };

init.services.generic-device-plugin = {
shutdownOnExit = true;
enabled = true;
execStart = "${lib.getExe cfg.package} --config ${settingsFormat.generate "settings.json" cfg.settings}";
};
};
}
1 change: 1 addition & 0 deletions overlay/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ in
systemdStandalone = callPackage ./systemd-minimal.nix { };
systemdTmpfilesD = callPackage ./systemd-tmpfiles.d.nix { };
dinit = callPackage ./dinit.nix { };
generic-device-plugin = callPackage ./generic-device-plugin.nix { };

util-linuxSystemdFree = prev.util-linux.override {
systemdSupport = false;
Expand Down
31 changes: 31 additions & 0 deletions overlay/generic-device-plugin.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
buildGoModule,
fetchFromGitHub,
lib,
...
}:

buildGoModule {
pname = "generic-device-plugin";
version = "20241207-unstable";

src = fetchFromGitHub {
owner = "squat";
repo = "generic-device-plugin";
rev = "36bfc606bba2064de6ede0ff2764cbb52edff70d";
hash = "sha256-xztISJxFWKFWvanWY6WBx7KBIbJdUUkVX+YM0xLgBzk=";
};

vendorHash = "sha256-L0OYB6iI4z1o4FEmzpL0Qbc9uamyJZ89HWV77D10p3M=";

# requires a docker instance running
doCheck = false;

meta = with lib; {
description = "The generic-device-plugin enables allocating generic Linux devices, such as serial devices, the FUSE device, or video cameras, to Kubernetes Pods.";
homepage = "https://github.com/squat/generic-device-plugin";
license = licenses.asl20;
maintainers = with maintainers; [ ];
mainProgram = "generic-device-plugin";
};
}

0 comments on commit 0ca294d

Please sign in to comment.