aboutsummaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix97
1 files changed, 97 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..b559c45
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,97 @@
+{
+ inputs = {
+ flake-utils.url = "github:numtide/flake-utils";
+ naersk.url = "github:nix-community/naersk";
+ };
+
+ outputs = { self, nixpkgs, flake-utils, naersk }:
+ flake-utils.lib.eachDefaultSystem (
+ system: let
+ pkgs = nixpkgs.legacyPackages."${system}";
+ naersk-lib = naersk.lib."${system}";
+ in
+ rec {
+ # `nix build`
+ deps = with pkgs; [
+ pkg-config
+ openssl
+ gcc
+ ];
+ packages.glitch-ng = naersk-lib.buildPackage {
+ pname = "glitch-ng";
+ root = ./.;
+ buildInputs = deps;
+ };
+ defaultPackage = packages.glitch-ng;
+
+ # `nix run`
+ apps.glitch-ng = flake-utils.lib.mkApp {
+ drv = packages.glitch-ng;
+ };
+ defaultApp = apps.glitch-ng;
+
+ nixosModules.glitch = { config, lib, ... }: {
+ options = {
+ services.glitch-ng.enable = lib.mkEnableOption "enable glitch NG";
+ services.glitch-ng.environment-file-location = lib.mkOption {
+ type = lib.types.path;
+ default = "/var/lib/glitch-ng/.env";
+ description = "The location of the environment file";
+ };
+ };
+
+ config = lib.mkIf config.services.glitch-ng.enable {
+ users.groups.glitch-ng = {
+ members = [ "glitch-ng" ];
+ };
+ users.users.glitch-ng = {
+ createHome = true;
+ isSystemUser = true;
+ home = "/var/lib/glitch-ng";
+ group = "glitch-ng";
+ };
+
+ systemd.services.glitch-ng = {
+ wantedBy = [ "multi-user.target" ];
+ after = [ "glitch-ng-init.service" ];
+ requires = [ "glitch-ng-init.service" ];
+ serviceConfig = {
+ User = "glitch-ng";
+ Group = "glitch-ng";
+ Restart = "always";
+ WorkingDirectory = "${defaultPackage}";
+ ExecStart = "${defaultPackage}/bin/glitch-ng";
+ EnvironmentFile = "${config.services.glitch-ng.environment-file-location}";
+ };
+ };
+
+ systemd.services.glitch-ng-init = {
+ wantedBy = [ "multi-user.target" ];
+ requires = [ "postgresql.service" ];
+ after = [ "postgresql.service" ];
+ description = "Initialize for glitch-ng";
+
+ script = with pkgs; ''
+ if ! [ -e /var/lib/glitch-ng/.db-created ]; then
+ runuser -u ${config.services.postgresql.superUser} -- ${config.services.postgresql.package}/bin/createuser glitch-ng
+ runuser -u ${config.services.postgresql.superUser} -- ${config.services.postgresql.package}/bin/createdb -O glitch-ng glitch
+ touch /var/lib/glitch-ng/.db-created
+ fi
+ '';
+ serviceConfig = {
+ Type = "oneshot";
+ };
+ };
+
+ services.postgresql.enable = true;
+
+ };
+ };
+
+ # `nix develop`
+ devShell = pkgs.mkShell {
+ nativeBuildInputs = with pkgs; [ rustc cargo ] ++ deps;
+ };
+ }
+ );
+}