feat: add module and package for self-hosting ignis
This commit is contained in:
parent
04b152a268
commit
2d2f62fd14
3 changed files with 133 additions and 0 deletions
72
modules/nixos/services/apps/ignis/default.nix
Normal file
72
modules/nixos/services/apps/ignis/default.nix
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
namespace,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
inherit (lib) mkIf;
|
||||
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveServicePort;
|
||||
inherit (config.networking) hostName;
|
||||
|
||||
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
|
||||
|
||||
isEnabled = hostHasService networkCfg.network-services hostName "ignis";
|
||||
port = resolveServicePort networkCfg.network-services "ignis" 8081;
|
||||
in {
|
||||
config = mkIf isEnabled {
|
||||
users = {
|
||||
users.ignis = {
|
||||
isSystemUser = true;
|
||||
group = "ignis";
|
||||
};
|
||||
groups.ignis = {};
|
||||
};
|
||||
|
||||
systemd.tmpfiles.rules = [
|
||||
"d /var/lib/ignis/vaults 0750 ignis ignis -"
|
||||
"d /var/lib/ignis/data 0750 ignis ignis -"
|
||||
];
|
||||
|
||||
networking.firewall.allowedTCPPorts = [port];
|
||||
|
||||
systemd.services.ignis = {
|
||||
description = "Ignis - Self-hosted Obsidian web app";
|
||||
after = ["network.target"];
|
||||
wantedBy = ["multi-user.target"];
|
||||
|
||||
path = with pkgs; [
|
||||
git
|
||||
];
|
||||
|
||||
environment = {
|
||||
PORT = toString port;
|
||||
VAULT_ROOT = "/var/lib/ignis/vaults";
|
||||
DATA_ROOT = "/var/lib/ignis/data";
|
||||
OBSIDIAN_ASSETS_PATH = "${pkgs.ignis}/lib/ignis/obsidian-app";
|
||||
OBSIDIAN_VERSION = "1.12.7";
|
||||
};
|
||||
|
||||
preStart = ''
|
||||
mkdir -p /var/lib/ignis/vaults /var/lib/ignis/data
|
||||
chown -R ignis:ignis /var/lib/ignis/vaults /var/lib/ignis/data
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = "ignis";
|
||||
Group = "ignis";
|
||||
Restart = "always";
|
||||
RestartSec = 5;
|
||||
ExecStart = "${pkgs.ignis}/bin/ignis-server";
|
||||
StateDirectory = "ignis";
|
||||
StateDirectoryMode = "0750";
|
||||
WorkingDirectory = "${pkgs.ignis}/lib/ignis";
|
||||
};
|
||||
};
|
||||
|
||||
${namespace}.services.storage.impermanence.folders = [
|
||||
"/var/lib/ignis/data"
|
||||
];
|
||||
};
|
||||
}
|
||||
3
overlays/ignis/default.nix
Normal file
3
overlays/ignis/default.nix
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
{...}: final: prev: {
|
||||
ignis = final.callPackage ./package.nix {};
|
||||
}
|
||||
58
overlays/ignis/package.nix
Normal file
58
overlays/ignis/package.nix
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
{
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
buildNpmPackage,
|
||||
makeWrapper,
|
||||
nodejs,
|
||||
obsidian,
|
||||
asar,
|
||||
}:
|
||||
buildNpmPackage rec {
|
||||
pname = "ignis";
|
||||
version = "0.8.7";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Nystik-gh";
|
||||
repo = "ignis";
|
||||
rev = "v${version}+obsidian.1.12.7";
|
||||
hash = "sha256-jbtuoVgCNApqijTHmPcjnh842WVWAPUtTVXJHa1Nm+Q=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-u4DV2MXga+J4YotyYKrLIldSQljY+MNNA9uVWGjJLpE=";
|
||||
npmDepsFetcherVersion = 2;
|
||||
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
asar
|
||||
obsidian
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
npm prune --omit=dev --ignore-scripts
|
||||
|
||||
mkdir -p $out/lib/ignis
|
||||
cp -r . $out/lib/ignis/
|
||||
|
||||
mkdir -p $out/lib/ignis/obsidian-app
|
||||
${lib.getExe asar} extract ${obsidian}/share/obsidian/obsidian.asar $out/lib/ignis/obsidian-app
|
||||
|
||||
mkdir -p $out/bin
|
||||
makeWrapper ${lib.getExe nodejs} $out/bin/ignis-server \
|
||||
--add-flags "$out/lib/ignis/apps/ignis-server/server/index.js" \
|
||||
--chdir "$out/lib/ignis"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Run Obsidian as a self-hosted web app";
|
||||
homepage = "https://github.com/Nystik-gh/ignis";
|
||||
license = lib.licenses.agpl3Only;
|
||||
platforms = lib.platforms.linux;
|
||||
maintainers = with lib.maintainers; [
|
||||
c4patino
|
||||
];
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue