From bdb4ad8160557fa71321f30c995495216fc17ce0 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 1 Oct 2025 16:33:55 +0200 Subject: [PATCH 01/33] Updates --- modules/apps/arr/default.nix | 2 +- modules/apps/jellyfin/default.nix | 24 +++++++++--------------- modules/services/actions/default.nix | 2 +- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/modules/apps/arr/default.nix b/modules/apps/arr/default.nix index 3b05429..e2c0df5 100644 --- a/modules/apps/arr/default.nix +++ b/modules/apps/arr/default.nix @@ -343,7 +343,7 @@ in { port = 7878; in lib.mkIf cfg.radarr.enable { hostname = "radarr"; - image = "ghcr.io/hotio/radarr:release-5.28.0.10205"; + image = "ghcr.io/hotio/radarr:testing-5.28.0.10205"; autoStart = true; ports = lib.mkIf cfg.radarr.exposePorts [ "${toString port}:${toString port}/tcp" diff --git a/modules/apps/jellyfin/default.nix b/modules/apps/jellyfin/default.nix index 5b4081a..011f56b 100644 --- a/modules/apps/jellyfin/default.nix +++ b/modules/apps/jellyfin/default.nix @@ -4,6 +4,7 @@ let cfg = config.homelab.apps.jellyfin; networkName = "jellyfin"; + inherit (config.homelab.fileSystems) media; UID = 3008; GID = config.users.groups.media.gid; @@ -12,6 +13,11 @@ in { config = lib.mkIf cfg.enable { homelab = { + fileSystems.media.video = { + enable = true; + permissions = [ "read" ]; + }; + users = { apps.enable = true; media.enable = true; @@ -32,18 +38,6 @@ in { ]; }; - "/srv/video" = { - device = "192.168.0.11:/mnt/SMALL/MEDIA/VIDEO"; - fsType = "nfs"; - options = [ - "ro" - "nfsvers=4.2" - "async" "soft" - "timeo=100" "retry=50" "actimeo=1800" "lookupcache=all" - "nosuid" "tcp" - ]; - }; - "/srv/homevideo" = { device = "192.168.0.11:/mnt/BIG/MEDIA/HOMEVIDEO/ARCHIVE"; fsType = "nfs"; @@ -101,7 +95,7 @@ in { virtualisation.oci-containers.containers = { jellyfin = { hostname = "jellyfin"; - image = "jellyfin/jellyfin:10.10.0"; + image = "jellyfin/jellyfin:10.10.7"; user = "${toString UID}:${toString GID}"; autoStart = true; ports = [ @@ -117,7 +111,7 @@ in { "cache:/cache" "/srv/audio:/media/audio" - "/srv/video:/media/video" + "${media.video.hostPath}:/media/video" "/srv/homevideo:/media/homevideo" "/srv/photo:/media/photo" ]; @@ -144,7 +138,7 @@ in { feishinPort = "9180"; in { hostname = "feishin"; - image = "ghcr.io/jeffvli/feishin:0.7.1"; + image = "ghcr.io/jeffvli/feishin:0.19.0"; autoStart = true; ports = [ "${feishinPort}:9180/tcp" # Web player (HTTP) diff --git a/modules/services/actions/default.nix b/modules/services/actions/default.nix index 338b963..ea6b025 100644 --- a/modules/services/actions/default.nix +++ b/modules/services/actions/default.nix @@ -44,6 +44,6 @@ in { ]; }; }; - }; } + From d2a0da648c5c1e7f4ae1f2be02431bf4116a5bb2 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 1 Oct 2025 16:36:14 +0200 Subject: [PATCH 02/33] feat(solidtime): Add module --- modules/apps/solidtime/default.nix | 238 +++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 modules/apps/solidtime/default.nix diff --git a/modules/apps/solidtime/default.nix b/modules/apps/solidtime/default.nix new file mode 100644 index 0000000..9174df4 --- /dev/null +++ b/modules/apps/solidtime/default.nix @@ -0,0 +1,238 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.homelab.apps.solidtime; + + networkName = "solidtime"; + internalNetworkName = "solidtime-internal"; + + version = "0.8.0"; + + port = 8000; + user = "1000:1000"; + + # dbExternalPort = ...; + dbInternalPort = 5432; + + gotenbergPort = 3000; + + inherit (config.virtualisation.oci-containers) containers; + + volumes = [ + "solidtime-storage:/var/www/html/storage" + "solidtime-logs:/var/www/html/storage/logs" + "solidtime-app:/var/www/html/storage/app" + ]; + + # laravel.env + laravelEnv = { + APP_NAME = "Solidtime"; + VITE_APP_NAME = laravelEnv.APP_NAME; + APP_ENV = "production"; + APP_DEBUG = "false"; + APP_URL = "http://localhost:${toString port}"; + APP_FORCE_HTTPS = "false"; + APP_ENABLE_REGISTRATION = "false"; + TRUSTED_PROXIES = "0.0.0.0/0,2000:0:0:0:0:0:0:0/3"; + + # Logging + LOG_CHANNEL = "stderr_daily"; + LOG_LEVEL = "debug"; + + # Database + DB_CONNECTION = "pgsql"; + DB_HOST = containers.solidtimeDb.hostname; + DB_PORT = toString dbInternalPort; + DB_SSL_MODE = "require"; + DB_DATABASE = "solidtime"; + DB_USERNAME = "solidtime"; + DB_PASSWORD = "ChangeMe"; + + # Mail + #MAIL_MAILER = "smtp"; + #MAIL_HOST = "smtp.gmail.com"; + #MAIL_PORT = "465"; + #MAIL_ENCRYPTION = "tls"; + #MAIL_FROM_ADDRESS = "no-reply@time.depeuter.dev"; + MAIL_FROM_NAME = laravelEnv.APP_NAME; + #MAIL_USERNAME = "kmtl.hugo@gmail.com"; + #MAIL_PASSWORD = "fhfxoequhhqidrhd"; + + # Queue + QUEUE_CONNECTION = "database"; + + # File storage + FILESYSTEM_DISK = "local"; + PUBLIC_FILESYSTEM_DISK = "public"; + + # Services + GOTENBERG_URL = "http://${containers.solidtimeGotenberg.hostname}:${toString gotenbergPort}"; + }; + +in { + options.homelab.apps.solidtime.enable = lib.mkEnableOption "Solidtime time tracker using Docker"; + + config = lib.mkIf cfg.enable { + homelab.virtualisation.containers.enable = true; + + # Make sure the Docker network exists. + systemd.services = { + "docker-${networkName}-create-network" = { + description = "Create Docker network for ${networkName}"; + requiredBy = [ + "${containers.solidtime.serviceName}.service" + ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + }; + script = '' + if ! ${pkgs.docker}/bin/docker network ls | grep -q ${networkName}; then + ${pkgs.docker}/bin/docker network create ${networkName} + fi + ''; + }; + "docker-${internalNetworkName}-create-network" = { + description = "Create Docker network for ${internalNetworkName}"; + requiredBy = [ + "${containers.solidtime.serviceName}.service" + "${containers.solidtimeScheduler.serviceName}.service" + "${containers.solidtimeQueue.serviceName}.service" + "${containers.solidtimeDb.serviceName}.service" + "${containers.solidtimeGotenberg.serviceName}.service" + ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + }; + script = '' + if ! ${pkgs.docker}/bin/docker network ls | grep -q ${internalNetworkName}; then + ${pkgs.docker}/bin/docker network create ${internalNetworkName} + fi + ''; + }; + }; + + virtualisation.oci-containers.containers = { + solidtime = { + hostname = "solidtime"; + image = "solidtime/solidtime:${version}"; + autoStart = true; + inherit user; + ports = [ + # Open ports if you don't use Traefik + "${toString port}:8000" + ]; + extraOptions = [ + "--network=${networkName}" + "--network=${internalNetworkName}" + + # Healthecks + # test: [ "CMD-SHELL", "curl --fail http://localhost:8000/health-check/up || exit 1" ] + ''--health-cmd=curl --fail http://localhost:8000/health-check/up || exit 1'' + ]; + inherit volumes; + dependsOn = [ + "solidtimeDb" + ]; + environmentFiles = [ + "/home/admin/.solidtime.env" + ]; + environment = laravelEnv // { + CONTAINER_MODE = "http"; + }; + labels = { + "traefik.enable" = "true"; + "traefik.http.routers.solidtime.rule" = "Host(`time.${config.networking.hostName}.depeuter.dev`)"; + "traefik.http.services.solidtime.loadbalancer.server.port" = toString port; + }; + }; + solidtimeScheduler = { + hostname = "scheduler"; + image = "solidtime/solidtime:${version}"; + inherit user; + autoStart = true; + extraOptions = [ + "--network=${internalNetworkName}" + + # Healthchecks + # test: [ "CMD-SHELL", "supervisorctl status scheduler:scheduler_00" ] + ''--health-cmd="supervisorctl status scheduler:scheduler_00"'' + ]; + inherit volumes; + dependsOn = [ + "solidtimeDb" + ]; + environmentFiles = [ + "/home/admin/.solidtime.env" + ]; + environment = laravelEnv // { + CONTAINER_MODE = "scheduler"; + }; + }; + solidtimeQueue = { + hostname = "queue"; + image = "solidtime/solidtime:${version}"; + inherit user; + autoStart = true; + extraOptions = [ + "--network=${internalNetworkName}" + + # Healthchecks + # test: [ "CMD-SHELL", "supervisorctl status worker:worker_00" ] + ''--health-cmd="supervisorctl status worker:worker_00"'' + ]; + inherit volumes; + dependsOn = [ + "solidtimeDb" + ]; + environmentFiles = [ + "/home/admin/.solidtime.env" + ]; + environment = laravelEnv // { + CONTAINER_MODE = "worker"; + WORKER_COMMAND = "php /var/www/html/artisan queue:work"; + }; + }; + solidtimeDb = { + hostname = "database"; + image = "postgres:15"; + autoStart = true; + ports = [ + # "${toString dbExternalPort}:${toString dbInternalPort}" + ]; + extraOptions = [ + "--network=${internalNetworkName}" + + # Healthchecks + # test: - CMD - pg_isready - '-q' - '-d' - '${DB_DATABASE}' - '-U' - '${DB_USERNAME}' retries: 3 timeout: 5s + ''--health-cmd="pg_isready -q -d ${laravelEnv.DB_DATABASE} -U ${laravelEnv.DB_USERNAME}"'' + "--health-retries=3" + "--health-timeout=5s" + ]; + volumes = [ + "solidtime-db:/var/lib/postgresql/data" + ]; + environment = { + PGPASSWORD = laravelEnv.DB_PASSWORD; + POSTGRES_DB = laravelEnv.DB_DATABASE; + POSTGRES_USER = laravelEnv.DB_USERNAME; + POSTGRES_PASSWORD = laravelEnv.DB_PASSWORD; + }; + }; + solidtimeGotenberg = { + hostname = "gotenberg"; + image = "gotenberg/gotenberg:8"; + autoStart = true; + extraOptions = [ + "--network=${internalNetworkName}" + + # Healthchecks + # test: [ "CMD", "curl", "--silent", "--fail", "http://localhost:3000/health" ] + ''--health-cmd="curl --silent --fail http://localhost:${toString gotenbergPort}/health"'' + ]; + }; + }; + }; +} + From 16b72ed6e02f6b8bae4ec84f23d45f877f9d7f0e Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 6 Feb 2026 14:15:19 +0100 Subject: [PATCH 03/33] feat: Test Action --- .github/workflows/test.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..eb99b2a --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,16 @@ +name: "Test" +on: + pull_request: + push: +jobs: + tests: + runs-on: ubuntu-latest + container: + image: catthehacker/ubuntu:act-latest + steps: + - uses: actions/checkout@v5 + - uses: https://github.com/cachix/install-nix-action@v31 + with: + nix_path: nixpkgs=channel:nixos-unstable + - name: "My custom step" + run: nix run nixpkgs#hello From bc8118b48a9dbfc3192f82daa2a979882f15fc64 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 11:57:18 +0100 Subject: [PATCH 04/33] chore: Disable test workflow --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index eb99b2a..8cb0f4b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,6 +4,7 @@ on: push: jobs: tests: + if: false runs-on: ubuntu-latest container: image: catthehacker/ubuntu:act-latest From 90bd5ed66bf670329327c824efd3e5d2a57689cf Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 11:57:38 +0100 Subject: [PATCH 05/33] Determine hosts --- .github/workflows/build.yml | 34 ++++++++++++++++++++++++++++++++++ .gitignore | 1 + 2 files changed, 35 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..2a1fb35 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,34 @@ +name: "Build" +on: + pull_request: + +jobs: + determine_hosts: + name: "Determining hosts to build" + runs-on: ubuntu-latest + container: + image: catthehacker/ubuntu:act-latest + + steps: + - uses: actions/checkout@v5 + - uses: https://github.com/cachix/install-nix-action@v31 + with: + nix_path: nixpkgs=channel:nixos-unstable + - name: "List hosts" + id: hosts + run: nix eval .#nixosConfigurations --apply builtins.attrNames --json + outputs: + hosts: ${{ steps.hosts.outputs }} + + build: + runs-on: ubuntu-latest + container: + image: catthehacker/ubuntu:act-latest + needs: determine_hosts + strategy: + matrix: + hostname: ${{ fromJSON(needs.determine_hosts.outputs.hosts) }} + + steps: + - run: echo "${{ matrix.hostname }}" + diff --git a/.gitignore b/.gitignore index 485dee6..8daf605 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .idea +result From 4103c488b3958413b5c135fd751b9421ab01c62c Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 11:58:43 +0100 Subject: [PATCH 06/33] Build each host --- .github/workflows/build.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2a1fb35..482df03 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,7 +16,8 @@ jobs: nix_path: nixpkgs=channel:nixos-unstable - name: "List hosts" id: hosts - run: nix eval .#nixosConfigurations --apply builtins.attrNames --json + run: | + nix eval .#nixosConfigurations --apply builtins.attrNames --json outputs: hosts: ${{ steps.hosts.outputs }} @@ -30,5 +31,11 @@ jobs: hostname: ${{ fromJSON(needs.determine_hosts.outputs.hosts) }} steps: - - run: echo "${{ matrix.hostname }}" + - name: "Define host" + env: + hostname: ${{ matrix.hostname }} + run: | + echo "${hostname}" + - run: | + nixos-rebuild build --flake ".#${hostname}" From 60fe8110b1249ca3751419c21be2fc05be25dfd7 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 12:00:31 +0100 Subject: [PATCH 07/33] Add NixOS to build step as well --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 482df03..44248aa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,6 +31,10 @@ jobs: hostname: ${{ fromJSON(needs.determine_hosts.outputs.hosts) }} steps: + - uses: actions/checkout@v5 + - uses: https://github.com/cachix/install-nix-action@v31 + with: + nix_path: nixpkgs=channel:nixos-unstable - name: "Define host" env: hostname: ${{ matrix.hostname }} From bfbe4204e75de965f8cbcdf3bb2cb72c83b96615 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 12:04:02 +0100 Subject: [PATCH 08/33] More specific hostnames --- .github/workflows/build.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 44248aa..baafa8e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,8 @@ jobs: - name: "List hosts" id: hosts run: | - nix eval .#nixosConfigurations --apply builtins.attrNames --json + hosts="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" + echo "hostnames=${hosts}" >> "$GITHUB_OUTPUT" outputs: hosts: ${{ steps.hosts.outputs }} @@ -28,7 +29,7 @@ jobs: needs: determine_hosts strategy: matrix: - hostname: ${{ fromJSON(needs.determine_hosts.outputs.hosts) }} + hostname: ${{ fromJSON(needs.determine_hosts.outputs.hosts.hostnames) }} steps: - uses: actions/checkout@v5 @@ -39,7 +40,7 @@ jobs: env: hostname: ${{ matrix.hostname }} run: | - echo "${hostname}" + echo "Hostname: ${hostname}" - run: | nixos-rebuild build --flake ".#${hostname}" From cef1259f8d76e8f699a87736a8c56cafd042ad10 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 12:06:26 +0100 Subject: [PATCH 09/33] fix json elements --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index baafa8e..de0b62b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,7 +20,7 @@ jobs: hosts="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" echo "hostnames=${hosts}" >> "$GITHUB_OUTPUT" outputs: - hosts: ${{ steps.hosts.outputs }} + hosts: ${{ steps.hosts.outputs.hostnames }} build: runs-on: ubuntu-latest @@ -29,7 +29,7 @@ jobs: needs: determine_hosts strategy: matrix: - hostname: ${{ fromJSON(needs.determine_hosts.outputs.hosts.hostnames) }} + hostname: ${{ fromJSON(needs.determine_hosts.outputs.hosts) }} steps: - uses: actions/checkout@v5 From 7d8a6693c1ff9bd2f32bb6dde6f1be5145b79caf Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 12:14:07 +0100 Subject: [PATCH 10/33] try different way --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de0b62b..13865b6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,7 +40,7 @@ jobs: env: hostname: ${{ matrix.hostname }} run: | - echo "Hostname: ${hostname}" + echo "Hostname: ${{ matrix.hostname }}" - run: | nixos-rebuild build --flake ".#${hostname}" From 2996df479f1f898e433052f6ce672145eda7082f Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 12:17:33 +0100 Subject: [PATCH 11/33] Debug matrix --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 13865b6..766266c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,6 +36,8 @@ jobs: - uses: https://github.com/cachix/install-nix-action@v31 with: nix_path: nixpkgs=channel:nixos-unstable + - name: Debug Matrix + run: echo "The matrix value is: [${{ matrix.hostname }}]" - name: "Define host" env: hostname: ${{ matrix.hostname }} From b5af201e86aa8f59a45334c22f4db23669d5bedf Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 12:18:59 +0100 Subject: [PATCH 12/33] run on push --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 766266c..9e11680 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,7 @@ name: "Build" on: pull_request: + push: jobs: determine_hosts: From fce4a03fa5878aaa2946b336ca166a789c630a85 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 12:25:00 +0100 Subject: [PATCH 13/33] use var directly --- .github/workflows/build.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9e11680..d59217a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,10 +40,8 @@ jobs: - name: Debug Matrix run: echo "The matrix value is: [${{ matrix.hostname }}]" - name: "Define host" - env: - hostname: ${{ matrix.hostname }} run: | - echo "Hostname: ${{ matrix.hostname }}" + echo "Building for: ${{ matrix.hostname }}" - run: | - nixos-rebuild build --flake ".#${hostname}" + nixos-rebuild build --flake ".#${{ matrix.hostname }}" From 675204152d62b97a871bddd3364cf73b4dbf15e8 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 12:25:52 +0100 Subject: [PATCH 14/33] fix mappings --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d59217a..7738210 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -38,7 +38,7 @@ jobs: with: nix_path: nixpkgs=channel:nixos-unstable - name: Debug Matrix - run: echo "The matrix value is: [${{ matrix.hostname }}]" + run: echo "The matrix value is: [ ${{ matrix.hostname }} ]" - name: "Define host" run: | echo "Building for: ${{ matrix.hostname }}" From 99141d2c7a37bcf47741b639e131f92dece82d24 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 12:26:31 +0100 Subject: [PATCH 15/33] fix mappings --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7738210..f095725 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -38,7 +38,8 @@ jobs: with: nix_path: nixpkgs=channel:nixos-unstable - name: Debug Matrix - run: echo "The matrix value is: [ ${{ matrix.hostname }} ]" + run: | + echo "The matrix value is: ${{ matrix.hostname }}" - name: "Define host" run: | echo "Building for: ${{ matrix.hostname }}" From 3e78d7e0f77e9767fc3a06796a5ed78856e638f0 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 12:29:05 +0100 Subject: [PATCH 16/33] add toolcache --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f095725..3295110 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,6 +3,9 @@ on: pull_request: push: +env: + RUNNER_TOOL_CACHE: /toolcache + jobs: determine_hosts: name: "Determining hosts to build" From de54d86be1c78f1b04441a9a414420f85511b818 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 12:33:23 +0100 Subject: [PATCH 17/33] Change names and ordere --- .github/workflows/build.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3295110..ca38b1a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,12 +7,13 @@ env: RUNNER_TOOL_CACHE: /toolcache jobs: - determine_hosts: + determine-hosts: name: "Determining hosts to build" runs-on: ubuntu-latest container: image: catthehacker/ubuntu:act-latest - + outputs: + hosts: ${{ steps.hosts.outputs.hostnames }} steps: - uses: actions/checkout@v5 - uses: https://github.com/cachix/install-nix-action@v31 @@ -22,18 +23,16 @@ jobs: id: hosts run: | hosts="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" - echo "hostnames=${hosts}" >> "$GITHUB_OUTPUT" - outputs: - hosts: ${{ steps.hosts.outputs.hostnames }} + echo "hostnames=${hosts}" >> $GITHUB_OUTPUT build: runs-on: ubuntu-latest container: image: catthehacker/ubuntu:act-latest - needs: determine_hosts + needs: determine-hosts strategy: matrix: - hostname: ${{ fromJSON(needs.determine_hosts.outputs.hosts) }} + hostname: ${{ fromJSON(needs.determine-hosts.outputs.hosts) }} steps: - uses: actions/checkout@v5 From 4eff2772d12a9b61091d261bc285fb02ae5b7a03 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 14:50:41 +0100 Subject: [PATCH 18/33] Debugging --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ca38b1a..9950555 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,6 +23,7 @@ jobs: id: hosts run: | hosts="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" + echo "${hosts}" echo "hostnames=${hosts}" >> $GITHUB_OUTPUT build: From 478ace7bb43babf31e979ec338e0bc79ec01feb3 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 14:54:31 +0100 Subject: [PATCH 19/33] Debugging extra step --- .github/workflows/build.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9950555..e950a7b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,12 +19,15 @@ jobs: - uses: https://github.com/cachix/install-nix-action@v31 with: nix_path: nixpkgs=channel:nixos-unstable - - name: "List hosts" + - name: "Determine hosts" id: hosts run: | hosts="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" echo "${hosts}" echo "hostnames=${hosts}" >> $GITHUB_OUTPUT + - name: "List hosts" + run: | + echo "${{ steps.hosts.outputs.hostnames }}" build: runs-on: ubuntu-latest From 4245b09a71a7b98385893b86a3b4a886e166c1bb Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 14:58:21 +0100 Subject: [PATCH 20/33] Debugging needs outputs --- .github/workflows/build.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e950a7b..1b14f27 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,7 +25,7 @@ jobs: hosts="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" echo "${hosts}" echo "hostnames=${hosts}" >> $GITHUB_OUTPUT - - name: "List hosts" + - name: "List hosts of step" run: | echo "${{ steps.hosts.outputs.hostnames }}" @@ -43,6 +43,9 @@ jobs: - uses: https://github.com/cachix/install-nix-action@v31 with: nix_path: nixpkgs=channel:nixos-unstable + - name: "Debug needs outputs" + run: | + echo "${{ needs.determine-hosts.outputs }}" - name: Debug Matrix run: | echo "The matrix value is: ${{ matrix.hostname }}" From bc42639059125dfa42f216acb86b9cf220448dc0 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 14:59:10 +0100 Subject: [PATCH 21/33] Debugging needs outputs hosts --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1b14f27..9455028 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -45,7 +45,7 @@ jobs: nix_path: nixpkgs=channel:nixos-unstable - name: "Debug needs outputs" run: | - echo "${{ needs.determine-hosts.outputs }}" + echo "${{ needs.determine-hosts.outputs.hosts }}" - name: Debug Matrix run: | echo "The matrix value is: ${{ matrix.hostname }}" From 8824ee080ccd8c75b6cc7338ca865dde769f224f Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 15:08:55 +0100 Subject: [PATCH 22/33] Preserve quotes --- .github/workflows/build.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9455028..d4b53ca 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,12 +22,8 @@ jobs: - name: "Determine hosts" id: hosts run: | - hosts="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" - echo "${hosts}" - echo "hostnames=${hosts}" >> $GITHUB_OUTPUT - - name: "List hosts of step" - run: | - echo "${{ steps.hosts.outputs.hostnames }}" + hostnames="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" + printf "hostnames=%s\n" "${hostnames}" >> "${GITHUB_OUTPUT}" # Preserve quotes build: runs-on: ubuntu-latest From 9008b6ab3d9c2e80152720f105cd3a0d6c3176d1 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 15:09:38 +0100 Subject: [PATCH 23/33] printf escaped --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d4b53ca..26bd67d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,7 @@ jobs: id: hosts run: | hostnames="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" - printf "hostnames=%s\n" "${hostnames}" >> "${GITHUB_OUTPUT}" # Preserve quotes + printf "hostnames=%q \n" "${hostnames}" >> "${GITHUB_OUTPUT}" # Preserve quotes build: runs-on: ubuntu-latest From 02f2ade703f802237cbb24d4dc7342fc45c01172 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 15:16:02 +0100 Subject: [PATCH 24/33] Using EOF --- .github/workflows/build.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 26bd67d..7a98325 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,11 @@ jobs: id: hosts run: | hostnames="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" - printf "hostnames=%q \n" "${hostnames}" >> "${GITHUB_OUTPUT}" # Preserve quotes + { + echo "hostnames<> "${GITHUB_OUTPUT}" # Preserve quotes build: runs-on: ubuntu-latest From 44131ad8e77d8c530f5933c010e5d27942b8c90b Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 15:17:34 +0100 Subject: [PATCH 25/33] test --- .github/workflows/build.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7a98325..e24ffc9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,11 +23,7 @@ jobs: id: hosts run: | hostnames="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" - { - echo "hostnames<> "${GITHUB_OUTPUT}" # Preserve quotes + printf "hostnames=%s\n" "${hostnames}" >> "${GITHUB_OUTPUT}" build: runs-on: ubuntu-latest @@ -45,7 +41,7 @@ jobs: nix_path: nixpkgs=channel:nixos-unstable - name: "Debug needs outputs" run: | - echo "${{ needs.determine-hosts.outputs.hosts }}" + printf "%s\n" "${{ needs.determine-hosts.outputs.hosts }}" - name: Debug Matrix run: | echo "The matrix value is: ${{ matrix.hostname }}" From ea3492ee27ec0e2ea7aaed945b412e0deda61025 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 15:26:27 +0100 Subject: [PATCH 26/33] escape? --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e24ffc9..a2dd14e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,7 @@ jobs: - name: "Determine hosts" id: hosts run: | - hostnames="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" + hostnames="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json | tr '\n' ', ' | sed 's/,$//')" printf "hostnames=%s\n" "${hostnames}" >> "${GITHUB_OUTPUT}" build: From a5ed47a4783b6be2233d71bde6fc69aa7fe78537 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 15:30:52 +0100 Subject: [PATCH 27/33] without json parse --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a2dd14e..7926715 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,7 @@ jobs: - name: "Determine hosts" id: hosts run: | - hostnames="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json | tr '\n' ', ' | sed 's/,$//')" + hostnames="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json)" printf "hostnames=%s\n" "${hostnames}" >> "${GITHUB_OUTPUT}" build: @@ -32,7 +32,7 @@ jobs: needs: determine-hosts strategy: matrix: - hostname: ${{ fromJSON(needs.determine-hosts.outputs.hosts) }} + hostname: ${{ needs.determine-hosts.outputs.hosts }} steps: - uses: actions/checkout@v5 From 3d4082c25c06741297ee5cb53e921e8e54731d3f Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 15:35:02 +0100 Subject: [PATCH 28/33] hardcoding --- .github/workflows/build.yml | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7926715..ca96545 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,22 +32,17 @@ jobs: needs: determine-hosts strategy: matrix: - hostname: ${{ needs.determine-hosts.outputs.hosts }} + hostname: [ + Development + Testing + ] steps: - uses: actions/checkout@v5 - uses: https://github.com/cachix/install-nix-action@v31 with: nix_path: nixpkgs=channel:nixos-unstable - - name: "Debug needs outputs" + - name: "Build host" run: | - printf "%s\n" "${{ needs.determine-hosts.outputs.hosts }}" - - name: Debug Matrix - run: | - echo "The matrix value is: ${{ matrix.hostname }}" - - name: "Define host" - run: | - echo "Building for: ${{ matrix.hostname }}" - - run: | nixos-rebuild build --flake ".#${{ matrix.hostname }}" From b9bd093ba878bffdfddf9f35e4735191c84fd654 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 8 Feb 2026 15:38:18 +0100 Subject: [PATCH 29/33] change build command --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ca96545..cce5071 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -44,5 +44,5 @@ jobs: nix_path: nixpkgs=channel:nixos-unstable - name: "Build host" run: | - nixos-rebuild build --flake ".#${{ matrix.hostname }}" + nix build ".#nixosConfigurations.${{ matrix.hostname }}.config.system.build.toplevel" From 04b4254a72c7b104a28b23ae40bd107e2d158f97 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 10 Feb 2026 08:30:11 +0100 Subject: [PATCH 30/33] chore(soldtime): Cleanup options --- hosts/Development/default.nix | 1 + modules/apps/default.nix | 1 + modules/apps/solidtime/default.nix | 67 ++++++++++++++++++------------ 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/hosts/Development/default.nix b/hosts/Development/default.nix index fda8e57..77f6758 100644 --- a/hosts/Development/default.nix +++ b/hosts/Development/default.nix @@ -11,6 +11,7 @@ }; traefik.enable = true; plex.enable = true; + solidtime.enable = true; }; virtualisation.guest.enable = true; }; diff --git a/modules/apps/default.nix b/modules/apps/default.nix index f62dca7..385f915 100644 --- a/modules/apps/default.nix +++ b/modules/apps/default.nix @@ -9,6 +9,7 @@ ./homepage ./jellyfin ./plex + ./solidtime ./speedtest ./technitium-dns ./traefik diff --git a/modules/apps/solidtime/default.nix b/modules/apps/solidtime/default.nix index 9174df4..17193a3 100644 --- a/modules/apps/solidtime/default.nix +++ b/modules/apps/solidtime/default.nix @@ -5,10 +5,10 @@ let networkName = "solidtime"; internalNetworkName = "solidtime-internal"; + proxyNet = config.homelab.apps.traefiik.sharedNetworkName; version = "0.8.0"; - port = 8000; user = "1000:1000"; # dbExternalPort = ...; @@ -30,7 +30,7 @@ let VITE_APP_NAME = laravelEnv.APP_NAME; APP_ENV = "production"; APP_DEBUG = "false"; - APP_URL = "http://localhost:${toString port}"; + APP_URL = "http://localhost:${toString cfg.port}"; APP_FORCE_HTTPS = "false"; APP_ENABLE_REGISTRATION = "false"; TRUSTED_PROXIES = "0.0.0.0/0,2000:0:0:0:0:0:0:0/3"; @@ -70,7 +70,15 @@ let }; in { - options.homelab.apps.solidtime.enable = lib.mkEnableOption "Solidtime time tracker using Docker"; + options.homelab.apps.solidtime = { + enable = lib.mkEnableOption "Solidtime time tracker using Docker"; + port = lib.mkOption { + type = lib.types.int; + default = 8000; + description = "Solidtime WebUI port"; + }; + exposePort = lib.mkEnableOption "Expose Soldtime port"; + }; config = lib.mkIf cfg.enable { homelab.virtualisation.containers.enable = true; @@ -117,52 +125,54 @@ in { solidtime = { hostname = "solidtime"; image = "solidtime/solidtime:${version}"; - autoStart = true; inherit user; + autoStart = true; + dependsOn = [ + "solidtimeDb" + ]; ports = [ # Open ports if you don't use Traefik - "${toString port}:8000" + "${toString cfg.port}:8000" + ]; + networks = [ + networkName + internalNetworkName ]; extraOptions = [ - "--network=${networkName}" - "--network=${internalNetworkName}" - # Healthecks # test: [ "CMD-SHELL", "curl --fail http://localhost:8000/health-check/up || exit 1" ] ''--health-cmd=curl --fail http://localhost:8000/health-check/up || exit 1'' ]; inherit volumes; - dependsOn = [ - "solidtimeDb" - ]; + labels = { + "traefik.enable" = "true"; + "traefik.http.routers.solidtime.rule" = "Host(`time.${config.networking.hostName}.depeuter.dev`)"; + "traefik.http.services.solidtime.loadbalancer.server.port" = toString cfg.port; + }; environmentFiles = [ "/home/admin/.solidtime.env" ]; environment = laravelEnv // { CONTAINER_MODE = "http"; }; - labels = { - "traefik.enable" = "true"; - "traefik.http.routers.solidtime.rule" = "Host(`time.${config.networking.hostName}.depeuter.dev`)"; - "traefik.http.services.solidtime.loadbalancer.server.port" = toString port; - }; }; solidtimeScheduler = { hostname = "scheduler"; image = "solidtime/solidtime:${version}"; inherit user; autoStart = true; + dependsOn = [ + "solidtimeDb" + ]; + networks = [ + internalNetworkName + ]; extraOptions = [ - "--network=${internalNetworkName}" - # Healthchecks # test: [ "CMD-SHELL", "supervisorctl status scheduler:scheduler_00" ] ''--health-cmd="supervisorctl status scheduler:scheduler_00"'' ]; inherit volumes; - dependsOn = [ - "solidtimeDb" - ]; environmentFiles = [ "/home/admin/.solidtime.env" ]; @@ -175,9 +185,10 @@ in { image = "solidtime/solidtime:${version}"; inherit user; autoStart = true; + networks = [ + internalNetworkName + ]; extraOptions = [ - "--network=${internalNetworkName}" - # Healthchecks # test: [ "CMD-SHELL", "supervisorctl status worker:worker_00" ] ''--health-cmd="supervisorctl status worker:worker_00"'' @@ -201,9 +212,10 @@ in { ports = [ # "${toString dbExternalPort}:${toString dbInternalPort}" ]; + networks = [ + internalNetworkName + ]; extraOptions = [ - "--network=${internalNetworkName}" - # Healthchecks # test: - CMD - pg_isready - '-q' - '-d' - '${DB_DATABASE}' - '-U' - '${DB_USERNAME}' retries: 3 timeout: 5s ''--health-cmd="pg_isready -q -d ${laravelEnv.DB_DATABASE} -U ${laravelEnv.DB_USERNAME}"'' @@ -224,9 +236,10 @@ in { hostname = "gotenberg"; image = "gotenberg/gotenberg:8"; autoStart = true; + networks = [ + internalNetworkName + ]; extraOptions = [ - "--network=${internalNetworkName}" - # Healthchecks # test: [ "CMD", "curl", "--silent", "--fail", "http://localhost:3000/health" ] ''--health-cmd="curl --silent --fail http://localhost:${toString gotenbergPort}/health"'' From 84c94afda46feab5947f5050b0fb9def869ea6a4 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 10 Feb 2026 08:37:32 +0100 Subject: [PATCH 31/33] chore(solidtime): Update to 0.9.0 --- modules/apps/solidtime/default.nix | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/apps/solidtime/default.nix b/modules/apps/solidtime/default.nix index 17193a3..0a62900 100644 --- a/modules/apps/solidtime/default.nix +++ b/modules/apps/solidtime/default.nix @@ -7,7 +7,7 @@ let internalNetworkName = "solidtime-internal"; proxyNet = config.homelab.apps.traefiik.sharedNetworkName; - version = "0.8.0"; + version = "0.9.0"; user = "1000:1000"; @@ -140,8 +140,8 @@ in { ]; extraOptions = [ # Healthecks - # test: [ "CMD-SHELL", "curl --fail http://localhost:8000/health-check/up || exit 1" ] - ''--health-cmd=curl --fail http://localhost:8000/health-check/up || exit 1'' + # test: [ "CMD", "curl", "--fail", "http://localhost:8000/health-check/up" ] + ''--health-cmd=curl --fail http://localhost:8000/health-check/up'' ]; inherit volumes; labels = { @@ -169,8 +169,8 @@ in { ]; extraOptions = [ # Healthchecks - # test: [ "CMD-SHELL", "supervisorctl status scheduler:scheduler_00" ] - ''--health-cmd="supervisorctl status scheduler:scheduler_00"'' + # test: [ "CMD", "healthcheck" ] + ''--health-cmd="healthcheck"'' ]; inherit volumes; environmentFiles = [ @@ -190,8 +190,8 @@ in { ]; extraOptions = [ # Healthchecks - # test: [ "CMD-SHELL", "supervisorctl status worker:worker_00" ] - ''--health-cmd="supervisorctl status worker:worker_00"'' + # test: [ "CMD", "healthcheck" ] + ''--health-cmd="healthcheck"'' ]; inherit volumes; dependsOn = [ From 687b85eeefe14c553f6cda03c3c57c7ce716229f Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 10 Feb 2026 09:08:11 +0100 Subject: [PATCH 32/33] feat(solidtime): Preload Docker images --- modules/apps/solidtime/default.nix | 42 +++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/modules/apps/solidtime/default.nix b/modules/apps/solidtime/default.nix index 0a62900..3348e0b 100644 --- a/modules/apps/solidtime/default.nix +++ b/modules/apps/solidtime/default.nix @@ -18,6 +18,15 @@ let inherit (config.virtualisation.oci-containers) containers; + solidtimeImageName = "solidtime/solidtime"; + solidtimeImage = "${solidtimeImageName}:${version}"; + solidtimeImageFile = pkgs.dockerTools.pullImage { + imageName = solidtimeImageName; + finalImageTag = version; + imageDigest = "sha256:5601b81f63ece49cdc4110f90f7624b0cc4ba87448b3e4bddce904457822a4ef"; + sha256 = "sha256-/VwuJGczs41XeItNamLahLt/ypUQHTn9AcwneVw/3YY="; + }; + volumes = [ "solidtime-storage:/var/www/html/storage" "solidtime-logs:/var/www/html/storage/logs" @@ -124,7 +133,8 @@ in { virtualisation.oci-containers.containers = { solidtime = { hostname = "solidtime"; - image = "solidtime/solidtime:${version}"; + image = solidtimeImage; + imageFile = solidtimeImageFile; inherit user; autoStart = true; dependsOn = [ @@ -158,7 +168,8 @@ in { }; solidtimeScheduler = { hostname = "scheduler"; - image = "solidtime/solidtime:${version}"; + image = solidtimeImage; + imageFile = solidtimeImageFile; inherit user; autoStart = true; dependsOn = [ @@ -182,7 +193,8 @@ in { }; solidtimeQueue = { hostname = "queue"; - image = "solidtime/solidtime:${version}"; + image = solidtimeImage; + imageFile = solidtimeImageFile; inherit user; autoStart = true; networks = [ @@ -205,9 +217,17 @@ in { WORKER_COMMAND = "php /var/www/html/artisan queue:work"; }; }; - solidtimeDb = { + solidtimeDb = let + imageName = "postgres"; + finalImageTag = "15"; + in { hostname = "database"; - image = "postgres:15"; + image = "${imageName}:${finalImageTag}"; + imageFile = pkgs.dockerTools.pullImage { + inherit imageName finalImageTag; + imageDigest = "sha256:98fe06b500b5eb29e45bf8c073eb0ca399790ce17b1d586448edc4203627d342"; + sha256 = "sha256-AZ4VkOlROX+nR/MjDjsA4xdHzmtKjiBAtsp2Q6IdOvg="; + }; autoStart = true; ports = [ # "${toString dbExternalPort}:${toString dbInternalPort}" @@ -232,9 +252,17 @@ in { POSTGRES_PASSWORD = laravelEnv.DB_PASSWORD; }; }; - solidtimeGotenberg = { + solidtimeGotenberg = let + imageName = "gotenberg/gotenberg"; + finalImageTag = "8.26.0"; + in { hostname = "gotenberg"; - image = "gotenberg/gotenberg:8"; + image = "${imageName}:${finalImageTag}"; + imageFile = pkgs.dockerTools.pullImage { + inherit imageName finalImageTag; + imageDigest = "sha256:328551506b3dec3ff6381dd47e5cd72a44def97506908269e201a8fbfa1c12c0"; + sha256 = "sha256-1zz4xDAgXxHUnkCVIfjHTgXb82EFEx+5am6Cu9+eZj4="; + }; autoStart = true; networks = [ internalNetworkName From 58f2ea9b74731144f1f375419ad1b7f43980cfec Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 10 Feb 2026 09:25:16 +0100 Subject: [PATCH 33/33] chore(solidtime): Update to 0.10.0 --- modules/apps/solidtime/default.nix | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/apps/solidtime/default.nix b/modules/apps/solidtime/default.nix index 3348e0b..725d32d 100644 --- a/modules/apps/solidtime/default.nix +++ b/modules/apps/solidtime/default.nix @@ -7,8 +7,6 @@ let internalNetworkName = "solidtime-internal"; proxyNet = config.homelab.apps.traefiik.sharedNetworkName; - version = "0.9.0"; - user = "1000:1000"; # dbExternalPort = ...; @@ -19,12 +17,13 @@ let inherit (config.virtualisation.oci-containers) containers; solidtimeImageName = "solidtime/solidtime"; + version = "0.10.0"; solidtimeImage = "${solidtimeImageName}:${version}"; solidtimeImageFile = pkgs.dockerTools.pullImage { imageName = solidtimeImageName; finalImageTag = version; - imageDigest = "sha256:5601b81f63ece49cdc4110f90f7624b0cc4ba87448b3e4bddce904457822a4ef"; - sha256 = "sha256-/VwuJGczs41XeItNamLahLt/ypUQHTn9AcwneVw/3YY="; + imageDigest = "sha256:817d3a366ecc39f0473d7154372afa82dd4e6e50c66d70be45804892c8421cbb"; + sha256 = "sha256-h5aCKaquUF/EVsOHaLOHrn1HAoXZYPhAbJ+e4cmjSA8="; }; volumes = [