From 8b75b16ccf09cfebfa89a9bf5ad2b6e1de7941e6 Mon Sep 17 00:00:00 2001 From: DavHau Date: Wed, 14 Aug 2024 22:03:20 +0200 Subject: [PATCH] golem: add golem-provider clan module --- clanModules/flake-module.nix | 1 + clanModules/golem-provider/README.md | 7 +++++ clanModules/golem-provider/default.nix | 34 ++++++++++++++++++++++++ clanModules/golem-provider/interface.nix | 20 ++++++++++++++ clanModules/golem-provider/test/vm.nix | 4 +++ docs/mkdocs.yml | 1 + 6 files changed, 67 insertions(+) create mode 100644 clanModules/golem-provider/README.md create mode 100644 clanModules/golem-provider/default.nix create mode 100644 clanModules/golem-provider/interface.nix create mode 100644 clanModules/golem-provider/test/vm.nix diff --git a/clanModules/flake-module.nix b/clanModules/flake-module.nix index dc9911531..60e1a32fc 100644 --- a/clanModules/flake-module.nix +++ b/clanModules/flake-module.nix @@ -7,6 +7,7 @@ dyndns = ./dyndns; ergochat = ./ergochat; garage = ./garage; + golem-provider = ./golem-provider; iwd = ./iwd; localbackup = ./localbackup; localsend = ./localsend; diff --git a/clanModules/golem-provider/README.md b/clanModules/golem-provider/README.md new file mode 100644 index 000000000..f9b6bf789 --- /dev/null +++ b/clanModules/golem-provider/README.md @@ -0,0 +1,7 @@ +--- +description = "Golem Provider for the Golem Network, an open-source and decentralized platform where everyone can use and share each other's computing power without relying on centralized entities like cloud computing corporations" +--- + +By running a golem provider your machine's compute resources are offered via the golem network which will allow other members to execute compute tasks on your machine. If this happens, you will be compensated with GLM, an ERC20 token. + +More about golem providers: https://docs.golem.network/docs/golem/overview diff --git a/clanModules/golem-provider/default.nix b/clanModules/golem-provider/default.nix new file mode 100644 index 000000000..6a3325db9 --- /dev/null +++ b/clanModules/golem-provider/default.nix @@ -0,0 +1,34 @@ +{ config, pkgs, ... }: +let + cfg = config.clan.golem-provider; + yagna = pkgs.callPackage ../../pkgs/yagna { }; + accountFlag = if cfg.account != null then "--account ${cfg.account}" else ""; +in +{ + imports = [ ./interface.nix ]; + + users.users.golem = { + isSystemUser = true; + home = "/var/lib/golem"; + group = "golem"; + createHome = true; + }; + + users.groups.golem = { }; + + environment.systemPackages = [ yagna ]; + + systemd.services.golem-provider = { + description = "Golem Provider"; + wantedBy = [ "multi-user.target" ]; + after = [ "network-online.target" ]; + serviceConfig = { + Type = "simple"; + ExecStart = "${yagna}/bin/golemsp run --no-interactive ${accountFlag}"; + Restart = "always"; + RestartSec = "5"; + User = "golem"; + Group = "golem"; + }; + }; +} diff --git a/clanModules/golem-provider/interface.nix b/clanModules/golem-provider/interface.nix new file mode 100644 index 000000000..98ae7ccf3 --- /dev/null +++ b/clanModules/golem-provider/interface.nix @@ -0,0 +1,20 @@ +{ lib, ... }: +let + inherit (lib) mkOption; + + inherit (lib.types) nullOr str; + +in +{ + options.clan.golem-provider = { + account = mkOption { + type = nullOr str; + description = '' + Ethereum address for payouts. + + Leave empty to automatically generate a new address upon first start. + ''; + default = null; + }; + }; +} diff --git a/clanModules/golem-provider/test/vm.nix b/clanModules/golem-provider/test/vm.nix new file mode 100644 index 000000000..006e5a042 --- /dev/null +++ b/clanModules/golem-provider/test/vm.nix @@ -0,0 +1,4 @@ +{ ... }: +{ + imports = [ ../. ]; +} diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 3a641b56c..647e880e0 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -61,6 +61,7 @@ nav: - reference/clanModules/dyndns.md - reference/clanModules/ergochat.md - reference/clanModules/garage.md + - reference/clanModules/golem-provider.md - reference/clanModules/index.md - reference/clanModules/iwd.md - reference/clanModules/localbackup.md