Add Nix flake with NixOS module
ci/woodpecker/push/woodpecker Pipeline is pending
Details
ci/woodpecker/push/woodpecker Pipeline is pending
Details
This commit is contained in:
parent
3f2170263b
commit
7c142e8080
|
@ -0,0 +1,87 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"naersk": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1652722411,
|
||||||
|
"narHash": "sha256-FxzNgYiH9c91hUVAntcjrqY//KOTUPP2a4e8Wyuysxg=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "naersk",
|
||||||
|
"rev": "94beb7a3edfeb3bcda65fa3f2ebc48ec6b40bf72",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "naersk",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1653117584,
|
||||||
|
"narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1653117584,
|
||||||
|
"narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"naersk": "naersk",
|
||||||
|
"nixpkgs": "nixpkgs_2",
|
||||||
|
"src": "src",
|
||||||
|
"utils": "utils"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"src": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"narHash": "sha256-rokT3gG2BKALiOQ5kSaf0FKXzH9dGnR8t3nsAH7YsLc=",
|
||||||
|
"path": ".",
|
||||||
|
"type": "path"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"path": ".",
|
||||||
|
"type": "path"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1652776076,
|
||||||
|
"narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
{
|
||||||
|
description = "Matrix Monzo bot";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
utils.url = "github:numtide/flake-utils";
|
||||||
|
naersk.url = "github:nix-community/naersk";
|
||||||
|
src.url = "path:./.";
|
||||||
|
src.flake = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, utils, naersk, src }:
|
||||||
|
utils.lib.eachDefaultSystem (system: let
|
||||||
|
pkgs = nixpkgs.legacyPackages."${system}";
|
||||||
|
naersk-lib = naersk.lib."${system}";
|
||||||
|
in rec {
|
||||||
|
# `nix build`
|
||||||
|
packages.mxmonzo = naersk-lib.buildPackage {
|
||||||
|
pname = "mxmonzo";
|
||||||
|
root = src;
|
||||||
|
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
openssl
|
||||||
|
pkgconfig
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultPackage = packages.mxmonzo;
|
||||||
|
|
||||||
|
# NixOS Modules
|
||||||
|
nixosModules = {
|
||||||
|
mxmonzo = import ./nixos_modules/mxmonzo.nix self;
|
||||||
|
};
|
||||||
|
|
||||||
|
# `nix run`
|
||||||
|
apps.mxmonzo = utils.lib.mkApp {
|
||||||
|
drv = packages.mxmonzo;
|
||||||
|
};
|
||||||
|
defaultApp = apps.mxmonzo;
|
||||||
|
|
||||||
|
# `nix develop`
|
||||||
|
devShell = pkgs.mkShell {
|
||||||
|
nativeBuildInputs = with pkgs; [ rustc cargo ];
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,114 @@
|
||||||
|
flake: {config, pkgs, lib, ...}:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.mxmonzo;
|
||||||
|
inherit (flake.packages.${pkgs.stdenv.hostPlatform.system}) mxmonzo;
|
||||||
|
in
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
services.mxmonzo = {
|
||||||
|
enable = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = with types; bool;
|
||||||
|
description = ''
|
||||||
|
Start the Matrix Monzo bot.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
user = mkOption {
|
||||||
|
default = "mxmonzo";
|
||||||
|
type = with types; uniq str;
|
||||||
|
description = ''
|
||||||
|
Name of the user.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
matrixId = mkOption {
|
||||||
|
type = with types; str;
|
||||||
|
example = "@monzobot:librepush.net";
|
||||||
|
description = ''
|
||||||
|
Matrix ID of the Monzo bot user.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
bindAddress = mkOption {
|
||||||
|
default = "127.0.0.1:38320";
|
||||||
|
type = with types; str;
|
||||||
|
description = ''
|
||||||
|
Host:Port upon which to bind the web interface (used for OAuth + webhooks).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
externalBaseUri = mkOption {
|
||||||
|
example = "https://mxmonzo.my.librepush.net";
|
||||||
|
type = with types; str;
|
||||||
|
description = ''
|
||||||
|
External URL prefix to which this MxMonzo instance can be accessed (by webhooks).
|
||||||
|
It should be proxied to the HTTP interface listening on `bindAddress`.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
environmentFile = mkOption {
|
||||||
|
type = with types; path;
|
||||||
|
description = ''
|
||||||
|
File containing environment variables, especially:
|
||||||
|
- MATRIX_PASSWORD
|
||||||
|
- MONZO_CLIENT_ID
|
||||||
|
- MONZO_CLIENT_SECRET
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
matrixRoom = mkOption {
|
||||||
|
type = with types; str;
|
||||||
|
description = ''
|
||||||
|
Room ID, like !roomid:librepush.net, of the bot's room to answer commands and emit notifications to.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
dataPath = mkOption {
|
||||||
|
type = with types; path;
|
||||||
|
description = ''
|
||||||
|
Path to where data can be kept.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
users.users."${cfg.user}" = {
|
||||||
|
description = "Matrix Monzo User";
|
||||||
|
isSystemUser = true;
|
||||||
|
group = "${cfg.user}";
|
||||||
|
};
|
||||||
|
users.groups."${cfg.user}" = {};
|
||||||
|
|
||||||
|
systemd.services.mxmonzo = {
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
description = "Start the Matrix Monzo bot.";
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
BIND_ADDRESS = cfg.bindAddress;
|
||||||
|
MATRIX_ID = cfg.matrixId;
|
||||||
|
MATRIX_ROOM = cfg.matrixRoom;
|
||||||
|
MATRIX_STORE = "${cfg.dataPath}/matrix-sdk";
|
||||||
|
MATRIX_PERSIST = "${cfg.dataPath}/matrix.json";
|
||||||
|
MONZO_PERSIST = "${cfg.dataPath}/monzo.json";
|
||||||
|
BASE_URI = cfg.externalBaseUri;
|
||||||
|
};
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "simple";
|
||||||
|
User = "${cfg.user}";
|
||||||
|
ExecStart = ''${mxmonzo}/bin/mxmonzo'';
|
||||||
|
|
||||||
|
EnvironmentFile = [
|
||||||
|
cfg.environmentFile
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue