summaryrefslogtreecommitdiff
path: root/nix
diff options
context:
space:
mode:
authorseth <[email protected]>2024-08-09 23:35:41 -0400
committerGitHub <[email protected]>2024-08-09 23:35:41 -0400
commitb643a6a235b0c1c9902b97421f24eff2b0d0a5ac (patch)
tree350794c0e9330fb77367838313bc6bb97278a0aa /nix
parent372780546b508684839916e5ad54c9e90456a94f (diff)
tree-wide: end of summer cleanup (#214)
* api: refactor & rename module to http * client: split from main.rs * tree-wide: use eyre::Report as error * nix: alejandra -> nixfmt * nix: start using treefmt-nix * nix: simplify flake * nix: refactor derivation & docker image * nix: remove overlay * ci: update & cleanup workflows * commands: assign all commands automatically * commands/copypasta: remove * http/teawie: update response struct for upstream rust rewrite * handlers: rename modules to events; flatten * crates: rename self to teawie-bot * nix: fenix -> rust-overlay i want a specific rust version grrrrrrr * ci: pin rust to 1.79 this is what our nix dev shell uses and what we can compile on. it seems the time crate doesn't like v1.80 of the compiler :( * ci: always run release gates * nix: fix static toolchain * nix: rust-overlay -> nixpkgs * ci: adopt actions-rust-lang actions * nix: use docker arch names for containers * crates/time: 0.3.30 -> 0.3.36 fixes building on rust 1.80.0
Diffstat (limited to 'nix')
-rw-r--r--nix/containerize.nix17
-rw-r--r--nix/derivation.nix67
-rw-r--r--nix/docker.nix43
-rw-r--r--nix/module.nix40
-rw-r--r--nix/static.nix20
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;
+ };
+})