131 lines
3.3 KiB
Nix
131 lines
3.3 KiB
Nix
{
|
|
description = "A very basic flake";
|
|
|
|
inputs = {
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
devenv.url = "github:cachix/devenv";
|
|
};
|
|
|
|
outputs = {
|
|
self,
|
|
nixpkgs,
|
|
flake-utils,
|
|
devenv,
|
|
} @ inputs:
|
|
flake-utils.lib.eachDefaultSystem (
|
|
system: let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
};
|
|
|
|
lib = pkgs.lib;
|
|
|
|
beamPackages = pkgs.beam.packagesWith pkgs.beam.interpreters.erlang_26;
|
|
|
|
erlang = beamPackages.erlang;
|
|
|
|
elixir = beamPackages.elixir_1_15;
|
|
|
|
elixir-ls = beamPackages.elixir-ls.override {elixir = elixir;};
|
|
|
|
hex = beamPackages.hex;
|
|
|
|
rebar3 = beamPackages.rebar3;
|
|
rebar = beamPackages.rebar;
|
|
in {
|
|
devShells.default = devenv.lib.mkShell {
|
|
inherit inputs pkgs;
|
|
modules = [
|
|
{
|
|
packages = [
|
|
elixir
|
|
elixir-ls
|
|
erlang
|
|
hex
|
|
rebar
|
|
rebar3
|
|
pkgs.flyctl
|
|
pkgs.inotify-tools
|
|
pkgs.sqlite
|
|
];
|
|
}
|
|
];
|
|
};
|
|
|
|
packages.default = beamPackages.mixRelease rec {
|
|
pname = "wish";
|
|
version = "nightly-231124";
|
|
|
|
src = ./.;
|
|
|
|
postUnpack = ''
|
|
export ELIXIR_MAKE_CACHE_DIR=$TMP
|
|
'';
|
|
|
|
mixFodDeps = beamPackages.fetchMixDeps {
|
|
inherit src version;
|
|
pname = "mix-deps-${pname}";
|
|
hash = "sha256-W/peopoh52iM3K068eu5gQ9dsKJTIVZ+5M6lZjP+vcE=";
|
|
};
|
|
};
|
|
|
|
nixosModules.default = {
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
with lib; let
|
|
cfg = config.wish.service;
|
|
in {
|
|
options.wish.service = {
|
|
enable = mkEnableOption "Enable the wish service.";
|
|
|
|
stateDir = mkOption {
|
|
type = types.str;
|
|
default = "/var/lib/wish";
|
|
description = lib.mdDoc "Wish data directory.";
|
|
};
|
|
|
|
environmentFile = mkOption {
|
|
type = types.path;
|
|
description = lib.mdDoc ''
|
|
Environment file as defined in {manpage}`systemd.exec(5)` passed to the service.
|
|
'';
|
|
};
|
|
|
|
databasePath = mkOption {
|
|
type = types.str;
|
|
default = "${cfg.stateDir}/data/wish.db";
|
|
description = lib.mdDoc "Path to the sqlite3 database file.";
|
|
};
|
|
|
|
secretKeyBase = mkOption {
|
|
type = types.str;
|
|
description = lib.mdDoc "Phoenix secret key base.";
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
systemd.services."wish" = {
|
|
wantedBy = ["multi-user.target"];
|
|
|
|
serviceConfig = let
|
|
pkg = self.packages.${system}.default;
|
|
in {
|
|
EnvironmentFile = cfg.environmentFile;
|
|
Restart = "on-failure";
|
|
ExecStart = "${pkg}/bin/wish start";
|
|
};
|
|
|
|
environment = {
|
|
DATABASE_PATH = cfg.databasePath;
|
|
SECRET_KEY_BASE = cfg.secretKeyBase;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|
|
);
|
|
}
|