diff options
Diffstat (limited to 'nix')
| -rw-r--r-- | nix/containerize.nix | 17 | ||||
| -rw-r--r-- | nix/derivation.nix | 67 | ||||
| -rw-r--r-- | nix/docker.nix | 43 | ||||
| -rw-r--r-- | nix/module.nix | 40 | ||||
| -rw-r--r-- | nix/static.nix | 20 |
5 files changed, 92 insertions, 95 deletions
diff --git a/nix/containerize.nix b/nix/containerize.nix new file mode 100644 index 0000000..8175e17 --- /dev/null +++ b/nix/containerize.nix @@ -0,0 +1,17 @@ +{ lib, dockerTools }: +let + containerize = + teawie-bot: + let + inherit (teawie-bot.passthru) crossPkgs; + architecture = crossPkgs.go.GOARCH; + in + dockerTools.buildLayeredImage { + name = "teawie-bot"; + tag = "latest-${architecture}"; + contents = [ dockerTools.caCertificates ]; + config.Cmd = [ (lib.getExe teawie-bot) ]; + inherit architecture; + }; +in +containerize diff --git a/nix/derivation.nix b/nix/derivation.nix index 6a25976..955f601 100644 --- a/nix/derivation.nix +++ b/nix/derivation.nix @@ -3,46 +3,51 @@ stdenv, rustPlatform, darwin, - self ? {inherit ((lib.importTOML ../Cargo.toml).package) version;}, + self ? { }, lto ? true, optimizeSize ? false, }: +let + fs = lib.fileset; +in rustPlatform.buildRustPackage { - pname = "teawiebot"; - version = - (lib.importTOML ../Cargo.toml).package.version - + "-" - + self.shortRev or self.dirtyShortRev or self.version or "unknown"; + pname = "teawie-bot"; + version = (lib.importTOML ../Cargo.toml).package.version or "unknown"; - __structuredAttrs = true; - - src = lib.fileset.toSource { + src = fs.toSource { root = ../.; - fileset = lib.fileset.unions [ - ../src - ../Cargo.toml - ../Cargo.lock - ]; + fileset = fs.intersection (fs.gitTracked ../.) ( + lib.fileset.unions [ + ../src + ../Cargo.toml + ../Cargo.lock + ] + ); }; cargoLock = { lockFile = ../Cargo.lock; }; - buildInputs = lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ - CoreFoundation - Security - SystemConfiguration - darwin.libiconv - ]); + buildInputs = lib.optionals stdenv.isDarwin ( + with darwin.apple_sdk.frameworks; + [ + CoreFoundation + Security + SystemConfiguration + darwin.libiconv + ] + ); - env = let - toRustFlags = lib.mapAttrs' ( - name: - lib.nameValuePair - "CARGO_BUILD_RELEASE_${lib.toUpper (builtins.replaceStrings ["-"] ["_"] name)}" - ); - in + env = + let + toRustFlags = lib.mapAttrs' ( + name: + lib.nameValuePair "CARGO_BUILD_RELEASE_${ + lib.toUpper (builtins.replaceStrings [ "-" ] [ "_" ] name) + }" + ); + in { GIT_SHA = self.shortRev or self.dirtyShortRev or "unknown"; } @@ -56,11 +61,11 @@ rustPlatform.buildRustPackage { strip = "symbols"; }); - meta = with lib; { - mainProgram = "teawiebot"; + meta = { description = "funni bot"; homepage = "https://github.com/getchoo/teawiebot"; - license = licenses.mit; - maintainers = with maintainers; [getchoo]; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ getchoo ]; + mainProgram = "teawie-bot"; }; } diff --git a/nix/docker.nix b/nix/docker.nix deleted file mode 100644 index 79f49cc..0000000 --- a/nix/docker.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - pkgs, - arch, - inputs, -}: let - inherit (pkgs) lib; - inputs' = lib.mapAttrs (_: lib.mapAttrs (_: v: v.${pkgs.system} or v)) inputs; - - crossTargets = with pkgs.pkgsCross; { - x86_64 = musl64.pkgsStatic; - aarch64 = aarch64-multiplatform.pkgsStatic; - }; - - rustStdFor = pkgs: inputs'.fenix.packages.targets.${pkgs.stdenv.hostPlatform.rust.rustcTarget}.stable.rust-std; - toolchain = with inputs'.fenix.packages; - combine (lib.flatten [ - stable.cargo - stable.rustc - (map rustStdFor (lib.attrValues crossTargets)) - ]); - - rustPlatformFor = pkgs: - pkgs.makeRustPlatform ( - lib.genAttrs ["cargo" "rustc"] (lib.const toolchain) - ); - crossPlatforms = lib.mapAttrs (lib.const rustPlatformFor) crossTargets; -in { - "teawiebot-static-${arch}" = inputs'.self.packages.teawiebot.override { - rustPlatform = crossPlatforms.${arch}; - optimizeSize = true; - }; - - "container-${arch}" = pkgs.dockerTools.buildLayeredImage { - name = "teawiebot"; - tag = "latest-${arch}"; - contents = [pkgs.dockerTools.caCertificates]; - config.Cmd = [ - (lib.getExe inputs'.self.packages."teawiebot-static-${arch}") - ]; - - architecture = inputs.nixpkgs.legacyPackages."${arch}-linux".pkgsStatic.go.GOARCH; - }; -} diff --git a/nix/module.nix b/nix/module.nix index c129e68..4e3b683 100644 --- a/nix/module.nix +++ b/nix/module.nix @@ -1,14 +1,15 @@ -self: { +self: +{ config, lib, pkgs, ... -}: let +}: +let cfg = config.services.teawiebot; defaultUser = "teawiebot"; - inherit - (lib) + inherit (lib) getExe literalExpression mdDoc @@ -21,18 +22,18 @@ self: { ; inherit (pkgs.stdenv.hostPlatform) system; -in { +in +{ options.services.teawiebot = { - enable = mkEnableOption "teawiebot"; - package = mkPackageOption ( - self.packages.${system} or (builtins.throw "${system} is not supported!") - ) "teawiebot" {}; + enable = mkEnableOption "teawieBot"; + package = mkPackageOption (self.packages.${system} or (builtins.throw "${system} is not supported!") + ) "teawie-bot" { }; user = mkOption { description = mdDoc '' User under which the service should run. If this is the default value, - the user will be created, with the specified group as the primary - group. + the user will be created, with the specified group as the primary + group. ''; type = types.str; default = defaultUser; @@ -88,10 +89,8 @@ in { systemd.services."teawiebot" = { enable = true; - wantedBy = ["multi-user.target"]; - after = - ["network.target"] - ++ optionals (cfg.redisUrl == "local") ["redis-teawiebot.service"]; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ] ++ optionals (cfg.redisUrl == "local") [ "redis-teawiebot.service" ]; script = '' ${getExe cfg.package} @@ -99,9 +98,10 @@ in { environment = { REDIS_URL = - if cfg.redisUrl == "local" - then "unix:${config.services.redis.servers.teawiebot.unixSocket}" - else cfg.redisUrl; + if cfg.redisUrl == "local" then + "unix:${config.services.redis.servers.teawiebot.unixSocket}" + else + cfg.redisUrl; }; serviceConfig = { @@ -140,9 +140,7 @@ in { }; }; - groups = mkIf (cfg.group == defaultUser) { - ${defaultUser} = {}; - }; + groups = mkIf (cfg.group == defaultUser) { ${defaultUser} = { }; }; }; }; } diff --git a/nix/static.nix b/nix/static.nix new file mode 100644 index 0000000..5a5606f --- /dev/null +++ b/nix/static.nix @@ -0,0 +1,20 @@ +{ + lib, + pkgsCross, + teawie-bot, +}: +let + crossPkgsFor = with pkgsCross; { + x86_64 = musl64.pkgsStatic; + aarch64 = aarch64-multiplatform.pkgsStatic; + }; +in +{ arch }: +let + crossPkgs = crossPkgsFor.${arch}; +in +(crossPkgs.callPackage ./derivation.nix { optimizeSize = true; }).overrideAttrs (old: { + passthru = old.passthru or { } // { + inherit crossPkgs; + }; +}) |
