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