diff --git a/home-manager/services/default.nix b/home-manager/services/default.nix index 039b52de2..3ccb20135 100644 --- a/home-manager/services/default.nix +++ b/home-manager/services/default.nix @@ -14,6 +14,7 @@ let docker = import ./docker { inherit lib pkgs; }; dockerPostgres = import ./docker-postgres { inherit pkgs; }; dotfilesUpdater = import ./dotfiles-updater { inherit pkgs; }; + gasTown = import ./gas-town { inherit pkgs; }; makeUpdater = import ./make-updater { inherit pkgs; }; neversslKeepalive = import ./neverssl-keepalive { inherit pkgs; }; ollama = import ./ollama { inherit pkgs inputs; }; @@ -31,6 +32,7 @@ in docker dockerPostgres dotfilesUpdater + gasTown makeUpdater neversslKeepalive ollama diff --git a/home-manager/services/gas-town/default.nix b/home-manager/services/gas-town/default.nix new file mode 100644 index 000000000..1a01b05bc --- /dev/null +++ b/home-manager/services/gas-town/default.nix @@ -0,0 +1,31 @@ +{ pkgs, ... }: +let + inherit (pkgs) lib; +in +{ + systemd.user.services.gas-town = lib.mkIf pkgs.stdenv.isLinux { + Unit = { + Description = "Gas Town daemon (dolt + tmux + worker orchestration)"; + After = [ "network.target" ]; + }; + Service = { + Type = "simple"; + Environment = [ + "PATH=${ + lib.makeBinPath [ + pkgs.bash + pkgs.coreutils + pkgs.git + pkgs.tmux + ] + }:$HOME/.local/bin:$HOME/go/bin:/usr/local/bin" + ]; + ExecStart = "${pkgs.bash}/bin/bash ${./start.sh}"; + Restart = "always"; + RestartSec = 30; + }; + Install = { + WantedBy = [ "default.target" ]; + }; + }; +} diff --git a/home-manager/services/gas-town/start.sh b/home-manager/services/gas-town/start.sh new file mode 100755 index 000000000..b39259a37 --- /dev/null +++ b/home-manager/services/gas-town/start.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Initialize Gas Town if not already set up +if ! gt status >/dev/null 2>&1; then + gt init +fi + +# Add dotfiles rig if not already present +if ! gt rig list 2>/dev/null | grep -q dotfiles; then + gt rig add dotfiles --adopt +fi + +# Start the daemon (blocks - runs dolt+tmux+daemon) +exec gt up diff --git a/spec/coverage_spec.sh b/spec/coverage_spec.sh index ad3cc9dab..98c3d22b9 100644 --- a/spec/coverage_spec.sh +++ b/spec/coverage_spec.sh @@ -93,6 +93,10 @@ It 'has spec file for home-manager/services/dotfiles-updater/update.sh' The path "spec/dotfiles_updater_spec.sh" should be exist End +It 'has spec file for home-manager/services/gas-town/start.sh' +The path "spec/gas_town_spec.sh" should be exist +End + It 'has spec file for home-manager/services/make-updater/update.sh' The path "spec/make_updater_spec.sh" should be exist End @@ -278,6 +282,7 @@ home-manager/services/docker-postgres/start-postgres.sh home-manager/services/docker/docker-setup.sh home-manager/services/docker/setup-docker.sh home-manager/services/dotfiles-updater/update.sh +home-manager/services/gas-town/start.sh home-manager/services/make-updater/update.sh home-manager/services/neverssl-keepalive/keepalive.sh install.sh diff --git a/spec/gas_town_spec.sh b/spec/gas_town_spec.sh new file mode 100644 index 000000000..0bf7d6ded --- /dev/null +++ b/spec/gas_town_spec.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +# shellcheck disable=SC2329 + +Describe 'gas-town/start.sh' +SCRIPT="$PWD/home-manager/services/gas-town/start.sh" + +Describe 'script properties' +It 'uses bash shebang' +When run bash -c "head -1 '$SCRIPT'" +The output should include '#!/usr/bin/env bash' +End + +It 'uses strict mode' +When run bash -c "head -5 '$SCRIPT'" +The output should include 'set -euo pipefail' +End +End + +Describe 'initialization' +It 'checks gt status before init' +When run bash -c "grep 'gt status' '$SCRIPT'" +The output should include 'gt status' +End + +It 'runs gt init if not set up' +When run bash -c "grep 'gt init' '$SCRIPT'" +The output should include 'gt init' +End +End + +Describe 'rig setup' +It 'checks for dotfiles rig' +When run bash -c "grep 'gt rig list' '$SCRIPT'" +The output should include 'gt rig list' +End + +It 'adds dotfiles rig with adopt flag' +When run bash -c "grep 'gt rig add dotfiles --adopt' '$SCRIPT'" +The output should include 'gt rig add dotfiles --adopt' +End +End + +Describe 'daemon startup' +It 'starts with exec gt up' +When run bash -c "grep 'exec gt up' '$SCRIPT'" +The output should include 'exec gt up' +End +End + +End