|
| 1 | +# _█████╗ ████████╗██╗ ██╗██╗███╗ ██╗ ███████╗███████╗██████╗ ██╗ ██╗███████╗██████╗ |
| 2 | +# ██╔══██╗╚══██╔══╝██║ ██║██║████╗ ██║ ██╔════╝██╔════╝██╔══██╗██║ ██║██╔════╝██╔══██╗ |
| 3 | +# ███████║ ██║ ██║ ██║██║██╔██╗ ██║ ███████╗█████╗ ██████╔╝██║ ██║█████╗ ██████╔╝ |
| 4 | +# ██╔══██║ ██║ ██║ ██║██║██║╚██╗██║ ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██╔══╝ ██╔══██╗ |
| 5 | +# ██║ ██║ ██║ ╚██████╔╝██║██║ ╚████║ ███████║███████╗██║ ██║ ╚████╔╝ ███████╗██║ ██║ |
| 6 | +# ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝╚═╝ ╚═══╝ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝ |
| 7 | +# ════════════════════════════════════════════════════════════════════════════════════════════ |
| 8 | +# This module was auto-generated using compose2nix v0.3.2-pre and then edited |
| 9 | +# by hand. Atuin is a shell history database with advanced search features. |
| 10 | +# More information under https://docs.atuin.sh/self-hosting/docker. |
| 11 | + |
| 12 | +{ pkgs, lib, config, ... }@args: |
| 13 | +let inherit (args) inputs; |
| 14 | +in { |
| 15 | + imports = [ |
| 16 | + # The docker user: |
| 17 | + ../../users/docker.nix |
| 18 | + # Any other modules: |
| 19 | + inputs.sops-nix.nixosModules.sops |
| 20 | + ]; |
| 21 | + |
| 22 | + # Secrets are managed via sops |
| 23 | + sops = { |
| 24 | + # defaultSopsFile = ../../secrets/atuin.env.enc; |
| 25 | + # defaultSopsFormat = "dotenv"; |
| 26 | + # age.keyFile = "/home/lukas/.config/sops/age/keys.txt"; |
| 27 | + secrets.atuin-env = { |
| 28 | + sopsFile = ../../secrets/atuin.env.enc; |
| 29 | + format = "dotenv"; |
| 30 | + }; |
| 31 | + }; |
| 32 | + |
| 33 | + # Create persistent directory for postgres data |
| 34 | + systemd.tmpfiles.rules = [ |
| 35 | + "d /srv/atuin/database 0750 docker docker -" |
| 36 | + "d /srv/atuin/config 0750 docker docker -" |
| 37 | + ]; |
| 38 | + |
| 39 | + # # Runtime |
| 40 | + # virtualisation.docker = { |
| 41 | + # enable = true; |
| 42 | + # autoPrune.enable = true; |
| 43 | + # }; |
| 44 | + # virtualisation.oci-containers.backend = "docker"; |
| 45 | + |
| 46 | + # Define the containers |
| 47 | + virtualisation.oci-containers.containers."atuin-server" = { |
| 48 | + image = "ghcr.io/atuinsh/atuin:latest"; |
| 49 | + environment = { |
| 50 | + "ATUIN_HOST" = "0.0.0.0"; |
| 51 | + "ATUIN_OPEN_REGISTRATION" = "true"; |
| 52 | + "RUST_LOG" = "info,atuin_server=debug"; |
| 53 | + }; |
| 54 | + environmentFiles = [ config.sops.secrets.atuin-env.path ]; |
| 55 | + volumes = [ "/srv/atuin/config:/config:rw" ]; |
| 56 | + ports = [ "8888:8888/tcp" ]; |
| 57 | + cmd = [ "server" "start" ]; |
| 58 | + dependsOn = [ "atuin-server-postgresql" ]; |
| 59 | + log-driver = "journald"; |
| 60 | + extraOptions = [ "--network-alias=atuin" "--network=atuin-server_default" ]; |
| 61 | + user = "990:131"; |
| 62 | + }; |
| 63 | + systemd.services."docker-atuin-server" = { |
| 64 | + serviceConfig = { |
| 65 | + Restart = lib.mkOverride 90 "always"; |
| 66 | + RestartMaxDelaySec = lib.mkOverride 90 "1m"; |
| 67 | + RestartSec = lib.mkOverride 90 "100ms"; |
| 68 | + RestartSteps = lib.mkOverride 90 9; |
| 69 | + }; |
| 70 | + after = [ "docker-network-atuin-server_default.service" ]; |
| 71 | + requires = [ "docker-network-atuin-server_default.service" ]; |
| 72 | + partOf = [ "docker-compose-atuin-server-root.target" ]; |
| 73 | + wantedBy = [ "docker-compose-atuin-server-root.target" ]; |
| 74 | + }; |
| 75 | + |
| 76 | + virtualisation.oci-containers.containers."atuin-server-postgresql" = { |
| 77 | + image = "postgres:14"; |
| 78 | + environment = { }; |
| 79 | + volumes = [ "/srv/atuin/database:/var/lib/postgresql/data:rw" ]; |
| 80 | + log-driver = "journald"; |
| 81 | + extraOptions = |
| 82 | + [ "--network-alias=postgresql" "--network=atuin-server_default" ]; |
| 83 | + environmentFiles = [ config.sops.secrets.atuin-env.path ]; |
| 84 | + user = "990:131"; |
| 85 | + }; |
| 86 | + systemd.services."docker-atuin-server-postgresql" = { |
| 87 | + serviceConfig = { |
| 88 | + Restart = lib.mkOverride 90 "always"; |
| 89 | + RestartMaxDelaySec = lib.mkOverride 90 "1m"; |
| 90 | + RestartSec = lib.mkOverride 90 "100ms"; |
| 91 | + RestartSteps = lib.mkOverride 90 9; |
| 92 | + }; |
| 93 | + after = [ "docker-network-atuin-server_default.service" ]; |
| 94 | + requires = [ "docker-network-atuin-server_default.service" ]; |
| 95 | + partOf = [ "docker-compose-atuin-server-root.target" ]; |
| 96 | + wantedBy = [ "docker-compose-atuin-server-root.target" ]; |
| 97 | + }; |
| 98 | + |
| 99 | + # Networks |
| 100 | + systemd.services."docker-network-atuin-server_default" = { |
| 101 | + path = [ pkgs.docker ]; |
| 102 | + serviceConfig = { |
| 103 | + Type = "oneshot"; |
| 104 | + RemainAfterExit = true; |
| 105 | + ExecStop = "docker network rm -f atuin-server_default"; |
| 106 | + }; |
| 107 | + script = '' |
| 108 | + docker network inspect atuin-server_default || docker network create atuin-server_default |
| 109 | + ''; |
| 110 | + partOf = [ "docker-compose-atuin-server-root.target" ]; |
| 111 | + wantedBy = [ "docker-compose-atuin-server-root.target" ]; |
| 112 | + }; |
| 113 | + |
| 114 | + # Root service |
| 115 | + # When started, this will automatically create all resources and start |
| 116 | + # the containers. When stopped, this will teardown all resources. |
| 117 | + systemd.targets."docker-compose-atuin-server-root" = { |
| 118 | + unitConfig = { Description = "Root target generated by compose2nix."; }; |
| 119 | + wantedBy = [ "multi-user.target" ]; |
| 120 | + }; |
| 121 | +} |
0 commit comments