diff options
Diffstat (limited to 'nix')
| -rw-r--r-- | nix/containerize.nix | 12 | ||||
| -rw-r--r-- | nix/derivation.nix | 71 | ||||
| -rw-r--r-- | nix/module.nix | 52 | ||||
| -rw-r--r-- | nix/package.nix | 60 | ||||
| -rw-r--r-- | nix/static.nix | 20 |
5 files changed, 113 insertions, 102 deletions
diff --git a/nix/containerize.nix b/nix/containerize.nix index 8175e17..b936b90 100644 --- a/nix/containerize.nix +++ b/nix/containerize.nix @@ -1,17 +1,21 @@ { lib, dockerTools }: + let containerize = - teawie-bot: + chill-discord-bot: + let - inherit (teawie-bot.passthru) crossPkgs; + inherit (chill-discord-bot.passthru) crossPkgs; architecture = crossPkgs.go.GOARCH; in + dockerTools.buildLayeredImage { - name = "teawie-bot"; + name = "chill-discord-bot"; tag = "latest-${architecture}"; contents = [ dockerTools.caCertificates ]; - config.Cmd = [ (lib.getExe teawie-bot) ]; + config.Cmd = [ (lib.getExe chill-discord-bot) ]; inherit architecture; }; in + containerize diff --git a/nix/derivation.nix b/nix/derivation.nix deleted file mode 100644 index 955f601..0000000 --- a/nix/derivation.nix +++ /dev/null @@ -1,71 +0,0 @@ -{ - lib, - stdenv, - rustPlatform, - darwin, - self ? { }, - lto ? true, - optimizeSize ? false, -}: -let - fs = lib.fileset; -in -rustPlatform.buildRustPackage { - pname = "teawie-bot"; - version = (lib.importTOML ../Cargo.toml).package.version or "unknown"; - - src = fs.toSource { - root = ../.; - 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 - ] - ); - - 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"; - } - // lib.optionalAttrs lto (toRustFlags { - lto = "thin"; - }) - // lib.optionalAttrs optimizeSize (toRustFlags { - codegen-units = 1; - opt-level = "s"; - panic = "abort"; - strip = "symbols"; - }); - - meta = { - description = "funni bot"; - homepage = "https://github.com/getchoo/teawiebot"; - license = lib.licenses.mit; - maintainers = with lib.maintainers; [ getchoo ]; - mainProgram = "teawie-bot"; - }; -} diff --git a/nix/module.nix b/nix/module.nix index 4e3b683..8220e3f 100644 --- a/nix/module.nix +++ b/nix/module.nix @@ -5,14 +5,11 @@ self: pkgs, ... }: -let - cfg = config.services.teawiebot; - defaultUser = "teawiebot"; +let inherit (lib) getExe literalExpression - mdDoc mkEnableOption mkIf mkOption @@ -20,17 +17,22 @@ let optionals types ; - inherit (pkgs.stdenv.hostPlatform) system; + + cfg = config.services.chill-discord-bot; + + defaultUser = "chill-discord-bot"; + flakePackages = self.packages.${system} or (throw "getchoo/chill: ${system} is not supported"); in + { - options.services.teawiebot = { - enable = mkEnableOption "teawieBot"; - package = mkPackageOption (self.packages.${system} or (builtins.throw "${system} is not supported!") - ) "teawie-bot" { }; + options.services.chill-discord-bot = { + enable = mkEnableOption "chill"; + + package = mkPackageOption flakePackages "chill-discord-bot" { }; user = mkOption { - description = mdDoc '' + description = '' 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. @@ -43,7 +45,7 @@ in }; group = mkOption { - description = mdDoc '' + description = '' Group under which the service should run. If this is the default value, the group will be created. ''; @@ -55,7 +57,7 @@ in }; redisUrl = mkOption { - description = mdDoc '' + description = '' Connection to a redis server. If this needs to include credentials that shouldn't be world-readable in the Nix store, set environmentFile and override the `REDIS_URL` entry. @@ -69,28 +71,36 @@ in }; environmentFile = mkOption { - description = mdDoc '' + description = '' Environment file as defined in {manpage}`systemd.exec(5)` ''; type = types.nullOr types.path; default = null; example = literalExpression '' - "/run/agenix.d/1/teawieBot" + "/run/agenix.d/1/chillDiscordBot" ''; }; }; + imports = [ + (lib.mkRenamedOptionModule [ "services" "teawiebot" ] [ "services" "chill-discord-bot" ]) + ]; + config = mkIf cfg.enable { - services.redis.servers.teawiebot = mkIf (cfg.redisUrl == "local") { - enable = true; - inherit (cfg) user; - port = 0; # disable tcp listener + services.redis.servers = mkIf (cfg.redisUrl == "local") { + chill-discord-bot = { + enable = true; + inherit (cfg) user; + port = 0; # disable tcp listener + }; }; - systemd.services."teawiebot" = { + systemd.services.chill-discord-bot = { enable = true; wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ] ++ optionals (cfg.redisUrl == "local") [ "redis-teawiebot.service" ]; + after = [ + "network.target" + ] ++ optionals (cfg.redisUrl == "local") [ "redis-chill-discord-bot.service" ]; script = '' ${getExe cfg.package} @@ -99,7 +109,7 @@ in environment = { REDIS_URL = if cfg.redisUrl == "local" then - "unix:${config.services.redis.servers.teawiebot.unixSocket}" + "unix:${config.services.redis.servers.chill-discord-bot.unixSocket}" else cfg.redisUrl; }; diff --git a/nix/package.nix b/nix/package.nix new file mode 100644 index 0000000..abb3129 --- /dev/null +++ b/nix/package.nix @@ -0,0 +1,60 @@ +{ + lib, + rustPlatform, + self ? { }, + lto ? true, + optimizeSize ? false, +}: + +let + fs = lib.fileset; +in + +rustPlatform.buildRustPackage { + pname = "chill-discord-bot"; + version = (lib.importTOML ../Cargo.toml).package.version or "unknown"; + + src = fs.toSource { + root = ../.; + fileset = fs.intersection (fs.gitTracked ../.) ( + lib.fileset.unions [ + ../src + ../Cargo.toml + ../Cargo.lock + ] + ); + }; + + cargoLock.lockFile = ../Cargo.lock; + + # `-C panic="abort"` breaks checks + doCheck = !optimizeSize; + + RUSTFLAGS = + lib.optionals lto [ + "-C" + "embed-bitcode=yes" + "-C" + "lto=thin" + ] + ++ lib.optionals optimizeSize [ + "-C" + "codegen-units=1" + "-C" + "opt-level=s" + "-C" + "panic=abort" + "-C" + "strip=symbols" + ]; + + GIT_SHA = self.shortRev or self.dirtyShortRev or "unknown"; + + meta = { + description = "funni bot"; + homepage = "https://github.com/getchoo/chill"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ getchoo ]; + mainProgram = "chill"; + }; +} diff --git a/nix/static.nix b/nix/static.nix index 5a5606f..1c9ac42 100644 --- a/nix/static.nix +++ b/nix/static.nix @@ -1,20 +1,28 @@ { lib, pkgsCross, - teawie-bot, + self, }: + 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; - }; -}) + +(crossPkgs.callPackage ./package.nix { + inherit self; + optimizeSize = true; +}).overrideAttrs + (old: { + passthru = old.passthru or { } // { + inherit crossPkgs; + }; + }) |
