summaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2023-11-16 19:06:43 -0500
committerLLLL Colonq <llll@colonq>2023-11-16 19:06:43 -0500
commitdcef0b65069fb38fd0f6c4382353167f603ebff1 (patch)
tree45954ffe308c3dd056e6af4f734e6d2af89e5856 /flake.nix
Initial commit
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix214
1 files changed, 214 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..e24e0ff
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,214 @@
+{
+ description = "fig";
+
+ inputs.nixpkgs.url = github:NixOS/nixpkgs/nixos-23.05;
+
+ outputs = { self, nixpkgs }:
+ let
+ pkgs = nixpkgs.legacyPackages.x86_64-linux;
+ haskellPackages = pkgs.haskell.packages.ghc94.override {
+ overrides = self: super: {
+ discord-haskell = self.callCabal2nix "discord-haskell" ./deps/discord-haskell {};
+ irc-conduit = self.callCabal2nix "irc-conduit" ./deps/irc-conduit {};
+ irc-client = self.callCabal2nix "irc-client" ./deps/irc-client {};
+ fig-utils = self.callCabal2nix "fig-utils" ./fig-utils {};
+ fig-bus = self.callCabal2nix "fig-bus" ./fig-bus {};
+ fig-monitor-discord = self.callCabal2nix "fig-monitor-discord" ./fig-monitor-discord {};
+ fig-monitor-irc = self.callCabal2nix "fig-monitor-irc" ./fig-monitor-irc {};
+ fig-monitor-bullfrog = self.callCabal2nix "fig-monitor-bullfrog" ./fig-monitor-bullfrog {};
+ fig-bridge-irc-discord = self.callCabal2nix "fig-bridge-irc-discord" ./fig-bridge-irc-discord {};
+ };
+ };
+ figBusModule = { config, lib, ... }:
+ let
+ cfg = config.colonq.services.fig-bus;
+ in {
+ options.colonq.services.fig-bus = {
+ enable = lib.mkEnableOption "Enable the fig message bus";
+ host = lib.mkOption {
+ type = lib.types.str;
+ default = "127.0.0.1";
+ description = "The host bound by the fig server";
+ };
+ port = lib.mkOption {
+ type = lib.types.port;
+ default = 32050;
+ description = "The port bound by the fig server";
+ };
+ };
+ config = lib.mkIf cfg.enable {
+ systemd.services."colonq.fig-bus" = {
+ after = ["network-online.target"];
+ wantedBy = ["network-online.target"];
+ serviceConfig = {
+ Restart = "on-failure";
+ ExecStart = "${haskellPackages.fig-bus}/bin/fig-bus --host ${cfg.host} --port ${toString cfg.port}";
+ DynamicUser = "yes";
+ RuntimeDirectory = "colonq.fig-bus";
+ RuntimeDirectoryMode = "0755";
+ StateDirectory = "colonq.fig-bus";
+ StateDirectoryMode = "0700";
+ CacheDirectory = "colonq.fig-bus";
+ CacheDirectoryMode = "0750";
+ };
+ };
+ };
+ };
+ figMonitorDiscordModule = { config, lib, ... }:
+ let
+ cfg = config.colonq.services.fig-monitor-discord;
+ in {
+ options.colonq.services.fig-monitor-discord = {
+ enable = lib.mkEnableOption "Enable the fig Discord monitor";
+ busHost = lib.mkOption {
+ type = lib.types.str;
+ default = "127.0.0.1";
+ description = "Message bus port";
+ };
+ busPort = lib.mkOption {
+ type = lib.types.port;
+ default = 32050;
+ description = "Address of message bus";
+ };
+ configFile = lib.mkOption {
+ type = lib.types.path;
+ description = "Path to config file";
+ default = pkgs.writeText "fig-monitor-discord.toml" ''
+ auth_token = ""
+ channel = 1064660360533135551
+ '';
+ };
+ };
+ config = lib.mkIf cfg.enable {
+ systemd.services."colonq.fig-monitor-discord" = {
+ wantedBy = ["multi-user.target"];
+ after = ["colonq.fig-bus.service"];
+ serviceConfig = {
+ Restart = "on-failure";
+ ExecStart = "${haskellPackages.fig-monitor-discord}/bin/fig-monitor-discord --bus-host ${cfg.busHost} --bus-port ${toString cfg.busPort} --config ${cfg.configFile}";
+ DynamicUser = "yes";
+ RuntimeDirectory = "colonq.fig-monitor-discord";
+ RuntimeDirectoryMode = "0755";
+ StateDirectory = "colonq.fig-monitor-discord";
+ StateDirectoryMode = "0700";
+ CacheDirectory = "colonq.fig-monitor-discord";
+ CacheDirectoryMode = "0750";
+ };
+ };
+ };
+ };
+ figMonitorIRCModule = { config, lib, ... }:
+ let
+ cfg = config.colonq.services.fig-monitor-irc;
+ in {
+ options.colonq.services.fig-monitor-irc = {
+ enable = lib.mkEnableOption "Enable the fig IRC monitor";
+ busHost = lib.mkOption {
+ type = lib.types.str;
+ default = "127.0.0.1";
+ description = "Message bus port";
+ };
+ busPort = lib.mkOption {
+ type = lib.types.port;
+ default = 32050;
+ description = "Address of message bus";
+ };
+ configFile = lib.mkOption {
+ type = lib.types.path;
+ description = "Path to config file";
+ default = pkgs.writeText "fig-monitor-irc.toml" ''
+ host = "colonq.computer"
+ port = 26697
+ nick = "discord"
+ sendchannel = "#cyberspace"
+ channels = ["#cyberspace"]
+ '';
+ };
+ };
+ config = lib.mkIf cfg.enable {
+ systemd.services."colonq.fig-monitor-irc" = {
+ wantedBy = ["multi-user.target"];
+ after = ["colonq.fig-bus.service"];
+ serviceConfig = {
+ Restart = "on-failure";
+ ExecStart = "${haskellPackages.fig-monitor-irc}/bin/fig-monitor-irc --bus-host ${cfg.busHost} --bus-port ${toString cfg.busPort} --config ${cfg.configFile}";
+ DynamicUser = "yes";
+ RuntimeDirectory = "colonq.fig-monitor-irc";
+ RuntimeDirectoryMode = "0755";
+ StateDirectory = "colonq.fig-monitor-irc";
+ StateDirectoryMode = "0700";
+ CacheDirectory = "colonq.fig-monitor-irc";
+ CacheDirectoryMode = "0750";
+ };
+ };
+ };
+ };
+ figBridgeIRCDiscordModule = { config, lib, ... }:
+ let
+ cfg = config.colonq.services.fig-bridge-irc-discord;
+ in {
+ options.colonq.services.fig-bridge-irc-discord = {
+ enable = lib.mkEnableOption "Enable the fig IRC/Discord bridge";
+ busHost = lib.mkOption {
+ type = lib.types.str;
+ default = "127.0.0.1";
+ description = "Message bus port";
+ };
+ busPort = lib.mkOption {
+ type = lib.types.port;
+ default = 32050;
+ description = "Address of message bus";
+ };
+ };
+ config = lib.mkIf cfg.enable {
+ systemd.services."colonq.fig-bridge-irc-discord" = {
+ wantedBy = ["multi-user.target"];
+ after = ["colonq.fig-bus.service"];
+ serviceConfig = {
+ Restart = "on-failure";
+ ExecStart = "${haskellPackages.fig-bridge-irc-discord}/bin/fig-bridge-irc-discord --bus-host ${cfg.busHost} --bus-port ${toString cfg.busPort}";
+ DynamicUser = "yes";
+ RuntimeDirectory = "colonq.fig-bridge-irc-discord";
+ RuntimeDirectoryMode = "0755";
+ StateDirectory = "colonq.fig-bridge-irc-discord";
+ StateDirectoryMode = "0700";
+ CacheDirectory = "colonq.fig-bridge-irc-discord";
+ CacheDirectoryMode = "0750";
+ };
+ };
+ };
+ };
+ in {
+ devShells.x86_64-linux.default = haskellPackages.shellFor {
+ packages = hspkgs: with hspkgs; [
+ fig-utils
+ fig-bus
+ fig-monitor-discord
+ fig-monitor-irc
+ fig-monitor-bullfrog
+ fig-bridge-irc-discord
+ ];
+ withHoogle = true;
+ buildInputs = [
+ ];
+ };
+ packages.x86_64-linux = {
+ default = haskellPackages.fig-bus;
+ figBus = haskellPackages.fig-bus;
+ figMonitorDiscord = haskellPackages.fig-monitor-discord;
+ figMonitorIRC = haskellPackages.fig-monitor-irc;
+ figMonitorBullfrog = haskellPackages.fig-monitor-bullfrog;
+ figBridgeIRCDiscord = haskellPackages.fig-bridge-irc-discord;
+ };
+ apps.x86_64-linux.default = {
+ type = "app";
+ program = "${haskellPackages.fig-bus}/bin/fig-bus";
+ };
+ nixosModules = {
+ figBus = figBusModule;
+ figMonitorDiscord = figMonitorDiscordModule;
+ figMonitorIRC = figMonitorIRCModule;
+ figBridgeIRCDiscord = figBridgeIRCDiscordModule;
+ };
+ };
+}