birthday-boy/flake.nix
2025-04-18 16:08:37 -06:00

86 lines
2.7 KiB
Nix

{
description = "Simple bot for matrix birthday reminders";
inputs = {
flake-parts.url = "github:hercules-ci/flake-parts";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
devshell.url = "github:numtide/devshell";
};
outputs = inputs@{ flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } {
imports = [
inputs.devshell.flakeModule
# To import a flake module
# 1. Add foo to inputs
# 2. Add foo as a parameter to the outputs function
# 3. Add here: foo.flakeModule
];
systems =
[ "x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin" ];
perSystem = { config, self', inputs', pkgs, system, ... }:
let
sbcl' = pkgs.sbcl.withPackages (ps:
with ps; [
dexador
cl-dotenv
jonathan
local-time
deploy
cl-yaml
alexandria
]);
in {
# Per-system attributes can be defined here. The self' and inputs'
# module parameters provide easy access to attributes of the same
# system.
# Equivalent to inputs'.nixpkgs.legacyPackages.hello;
packages.default = pkgs.hello;
packages.birthday-boy = pkgs.stdenv.mkDerivation {
name = "birthday-boy";
src = ./.;
nativeBuildInputs = with pkgs; [ openssl sbcl' ];
dontStrip = true;
buildPhase = ''
${sbcl'}/bin/sbcl --load ./bot.lisp \
--eval '(sb-ext:save-lisp-and-die #P"birthday-boy" :toplevel #'"'"'birthday-boy:main* :executable t)'
'';
installPhase = ''
mkdir -p $out/bin
cp birthday-boy $out/bin/_birthday-boy
chmod +x $out/bin/_birthday-boy
touch $out/bin/birthday-boy
echo "#!/usr/bin/env sh" >> $out/bin/birthday-boy
echo "LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:${
pkgs.lib.makeLibraryPath [ pkgs.openssl pkgs.libyaml ]
} $out/bin/_birthday-boy \$1" >> $out/bin/birthday-boy
chmod +x $out/bin/birthday-boy
'';
};
apps.birthday-boy = {
type = "app";
program = "${self'.packages.birthday-boy}/bin/birthday-boy";
};
devshells.default = {
env = [ ];
commands = [ ];
packages = with pkgs; [ openssl sbcl' ];
};
};
flake = {
# The usual flake attributes can be defined here, including system-
# agnostic ones like nixosModule and system-enumerating ones, although
# those are more easily expressed in perSystem.
};
};
}