105 lines
2.9 KiB
Nix
105 lines
2.9 KiB
Nix
{
|
|
description = "boddle, in Anlehnung an bottle";
|
|
|
|
outputs = { self, nixpkgs }: let
|
|
module = { pkgs, lib, config, ... }: let
|
|
cfg = config.services.boddle;
|
|
in {
|
|
options.services.boddle = {
|
|
enable = lib.mkEnableOption "enable";
|
|
# TODO: configurability
|
|
server = lib.mkOption {
|
|
type = lib.types.strMatching ".+:[1-9][0-9]*";
|
|
default = "irc.ircnet.com:6667";
|
|
};
|
|
nick = lib.mkOption {
|
|
type = lib.types.strMatching "[^ ]+";
|
|
default = "boddle";
|
|
};
|
|
database = lib.mkOption {
|
|
type = lib.types.strMatching "/.+";
|
|
default = "/var/lib/boddle/${cfg.nick}.db";
|
|
};
|
|
channels = lib.mkOption {
|
|
type = lib.types.coercedTo lib.types.nonEmptyStr (lib.strings.splitString " ") (lib.types.nonEmptyListOf (lib.types.strMatching "[^ ]+"));
|
|
};
|
|
};
|
|
|
|
config.nixpkgs.overlays = [ self.overlay ];
|
|
|
|
config.systemd.services.boddle = lib.mkIf config.services.boddle.enable {
|
|
confinement.enable = true;
|
|
unitConfig.ConditionPathExists = [ cfg.database ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
after = [ "network-online.service" ];
|
|
serviceConfig = {
|
|
ExecStart = let
|
|
args = lib.lists.foldl (acc: channel: acc ++ [ "--channel" channel ]) [
|
|
(lib.getExe pkgs.boddle)
|
|
"--server" cfg.server
|
|
"--nick" cfg.nick
|
|
"--database" "./${cfg.nick}.db"
|
|
] cfg.channels;
|
|
in lib.strings.escapeShellArgs args;
|
|
WorkingDirectory = "%S/boddle";
|
|
StateDirectory = "boddle";
|
|
DynamicUser = true;
|
|
BindPaths = [
|
|
"/etc/resolv.conf"
|
|
"${cfg.database}:%S/boddle/${cfg.nick}.db"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
|
|
per-system = fn: builtins.mapAttrs (_: fn) nixpkgs.legacyPackages;
|
|
|
|
package = pkgs: pkgs.buildGoModule {
|
|
meta = {
|
|
description = "boddle, in Anlehnung an bottle";
|
|
homepage = "https://git.fbs42.ddnss.de/forgejo/fbs42/boddle";
|
|
name = "boddle";
|
|
mainProgram = "boddle";
|
|
};
|
|
pname = "boddle";
|
|
version = "v0.0.1";
|
|
vendorHash = "sha256-XH/u+lcVsLoWDoMPp5/rwWytTpM17mXmoLKJUnJ9BRI=";
|
|
src = ./.;
|
|
};
|
|
|
|
devshell = pkgs: pkgs.mkShell {
|
|
nativeBuildInputs = with pkgs.buildPackages; [
|
|
go
|
|
];
|
|
};
|
|
|
|
app = pkgs: {
|
|
type = "app";
|
|
program = nixpkgs.lib.getExe (package pkgs);
|
|
};
|
|
|
|
in {
|
|
nixosModules = {
|
|
default = self.nixosModules.boddle;
|
|
boddle = module;
|
|
};
|
|
|
|
overlay = final: prev: {
|
|
boddle = package final;
|
|
};
|
|
|
|
packages = per-system (pkgs: {
|
|
default = package pkgs;
|
|
boddle = package pkgs;
|
|
});
|
|
|
|
apps = per-system (pkgs: {
|
|
default = app pkgs;
|
|
boddle = app pkgs;
|
|
});
|
|
|
|
devShells = per-system (pkgs: {
|
|
default = devshell pkgs;
|
|
});
|
|
};
|
|
}
|