diff options
Diffstat (limited to 'meta/nix')
| -rw-r--r-- | meta/nix/dev.nix | 35 | ||||
| -rw-r--r-- | meta/nix/nixos/default.nix | 10 | ||||
| -rw-r--r-- | meta/nix/nixos/meta.nix | 70 | ||||
| -rw-r--r-- | meta/nix/packages.nix | 18 | ||||
| -rw-r--r-- | meta/nix/pkgs/blockgame-meta.nix | 70 |
5 files changed, 203 insertions, 0 deletions
diff --git a/meta/nix/dev.nix b/meta/nix/dev.nix new file mode 100644 index 0000000000..1ca4edfc91 --- /dev/null +++ b/meta/nix/dev.nix @@ -0,0 +1,35 @@ +{ + perSystem = { + config, + pkgs, + self', + ... + }: { + pre-commit.settings = { + excludes = ["flake.lock"]; + hooks = { + markdownlint.enable = true; + + alejandra.enable = true; + deadnix.enable = true; + nil.enable = true; + + black.enable = true; + }; + }; + + devShells.default = pkgs.mkShell { + shellHook = '' + ${config.pre-commit.installationScript} + ''; + + buildInputs = with pkgs; [ + poetry + ]; + + inputsFrom = [self'.packages.default]; + }; + + formatter = pkgs.alejandra; + }; +} diff --git a/meta/nix/nixos/default.nix b/meta/nix/nixos/default.nix new file mode 100644 index 0000000000..c4aa24174b --- /dev/null +++ b/meta/nix/nixos/default.nix @@ -0,0 +1,10 @@ +{self, ...}: { + flake.nixosModules = { + default = self.nixosModules.meta; + meta = { + imports = [self.nixosModules.metaBare]; + nixpkgs.overlays = [self.overlays.default]; + }; + metaBare = ./meta.nix; + }; +} diff --git a/meta/nix/nixos/meta.nix b/meta/nix/nixos/meta.nix new file mode 100644 index 0000000000..c03d4e6e01 --- /dev/null +++ b/meta/nix/nixos/meta.nix @@ -0,0 +1,70 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (lib) getExe getExe' mkEnableOption mkIf mkOption mkPackageOption types; + + settingsFormat = pkgs.formats.keyValue {}; + + cfg = config.services.blockgame-meta; +in { + options.services.blockgame-meta = { + enable = mkEnableOption "blockgame-meta service"; + + package = mkPackageOption pkgs "blockgame-meta" {}; + + settings = mkOption { + type = types.submodule { + freeformType = settingsFormat.type; + options = { + DEPLOY_TO_S3 = mkOption { + type = types.str; + default = "false"; + }; + DEPLOY_TO_FOLDER = mkOption { + type = types.str; + default = "false"; + }; + DEPLOY_TO_GIT = mkOption { + type = types.str; + default = "false"; + }; + }; + }; + }; + }; + config = mkIf cfg.enable { + users.users."blockgame-meta" = { + isSystemUser = true; + group = "blockgame-meta"; + }; + + users.groups."blockgame-meta" = {}; + + systemd = { + services."blockgame-meta" = { + description = "blockgame metadata generator"; + after = ["network-online.target"]; + wants = ["network-online.target"]; + serviceConfig = { + EnvironmentFile = [(settingsFormat.generate "blockgame-meta.env" cfg.settings)]; + ExecStartPre = getExe' cfg.package "init"; + ExecStart = getExe cfg.package; + StateDirectory = "blockgame-meta"; + CacheDirectory = "blockgame-meta"; + User = "blockgame-meta"; + }; + }; + + timers."blockgame-meta" = { + timerConfig = { + OnCalendar = "hourly"; + RandomizedDelaySec = "5m"; + }; + wantedBy = ["timers.target"]; + }; + }; + }; +} diff --git a/meta/nix/packages.nix b/meta/nix/packages.nix new file mode 100644 index 0000000000..4af7b97e5b --- /dev/null +++ b/meta/nix/packages.nix @@ -0,0 +1,18 @@ +{inputs, ...}: { + imports = [inputs.flake-parts.flakeModules.easyOverlay]; + + perSystem = { + config, + final, + ... + }: { + packages = { + blockgame-meta = final.python3.pkgs.callPackage ./pkgs/blockgame-meta.nix {}; + default = config.packages.blockgame-meta; + }; + + overlayAttrs = { + inherit (config.packages) blockgame-meta; + }; + }; +} diff --git a/meta/nix/pkgs/blockgame-meta.nix b/meta/nix/pkgs/blockgame-meta.nix new file mode 100644 index 0000000000..8409c37cb4 --- /dev/null +++ b/meta/nix/pkgs/blockgame-meta.nix @@ -0,0 +1,70 @@ +{ + lib, + buildPythonApplication, + poetry-core, + bash, + cachecontrol, + requests, + filelock, + git, + openssh, + packaging, + pydantic_1, + python, + rsync, +}: +buildPythonApplication { + pname = "blockgame-meta"; + version = "unstable"; + + pyproject = true; + + src = with lib.fileset; + toSource { + root = ../../.; + fileset = unions (map (fileName: ../../${fileName}) [ + "meta" + "init.sh" + "pyproject.toml" + "poetry.lock" + "README.md" + "update.sh" + ]); + }; + + nativeBuildInputs = [ + poetry-core + ]; + + buildInputs = [ + bash + ]; + + propagatedBuildInputs = [ + cachecontrol + requests + filelock + packaging + pydantic_1 + ]; + + postInstall = '' + install -Dm755 $src/update.sh $out/bin/update + install -Dm755 $src/init.sh $out/bin/init + + wrapProgram $out/bin/update \ + --prefix PYTHONPATH : "$PYTHONPATH" \ + --prefix PATH : ${lib.makeBinPath [git openssh python rsync]} + + wrapProgram $out/bin/init \ + --prefix PATH : ${lib.makeBinPath [git openssh]} + ''; + + meta = with lib; { + description = "Metadata generator for blockgame launcher."; + platforms = platforms.linux; + license = licenses.mspl; + maintainers = with maintainers; [Scrumplex]; + mainProgram = "update"; + }; +} |
