|
|
| { pkgs, pkgs-unstable, bom, sovereign-daemon, bifrost-cli, prolog-policies, dotfilesSrc, ... }:
|
|
|
| let
|
|
|
|
|
| msys2-base = pkgs.fetchurl {
|
| url = "https://repo.msys2.org/distrib/x86_64/msys2-base-x86_64-${bom.msys2_base.date}.tar.xz";
|
| sha256 = bom.msys2_base.sha256;
|
| };
|
|
|
|
|
| mingw64 = pkgs.mingwW64.override {
|
| version = bom.mingw_w64.version;
|
|
|
| };
|
|
|
|
|
| runtimePkgs = with pkgs; [
|
| git.override { version = bom.runtime_package.git.version; }
|
| openssh.override { version = bom.runtime_package.openssh.version; }
|
| jq.override { version = bom.runtime_package.jq.version; }
|
| swiprolog.override { version = bom.runtime_package.swi_prolog.version; }
|
|
|
| bifrost-cli
|
|
|
| (pkgs.writeScriptBin "sovereign-daemon" ''
|
| #!${pkgs.runtimeShell}
|
| exec ${sovereign-daemon}/bin/sovereign-daemon "$@"
|
| '')
|
| ];
|
|
|
|
|
|
|
|
|
| dotfiles = pkgs.buildEnv {
|
| name = "snapkitty-dotfiles";
|
| paths = [ dotfilesSrc ];
|
| pathsToLink = [ "/etc" "/home" ];
|
| };
|
|
|
|
|
| launcher = pkgs.writeScriptBin "snapkitty-shell" ''
|
| #!${pkgs.runtimeShell}
|
| # SnapKitty Meta-GitBash Launcher
|
|
|
| export MSYSTEM=MINGW64
|
| export CHERE_INVOKING=1
|
| export SNAPKITTY_ROOT="${msys2-base}"
|
| export SNAPKITTY_BOM_HASH="${bom.hash}" # Injected at build time
|
|
|
| # Ensure WORM Log dir exists
|
| mkdir -p "$HOME/.snapkitty/worm"
|
| mkdir -p "/run/user/$(id -u)"
|
|
|
| # Start Daemon if not running (Socket Activation)
|
| if ! ss -l | grep -q "snapkitty.sock"; then
|
| ${sovereign-daemon}/bin/sovereign-daemon serve --socket /run/user/$(id -u)/snapkitty.sock \
|
| --policy ${prolog-policies}/share/snapkitty/policies \
|
| --bifrost-key $HOME/.snapkitty/keys/operator.ed25519 \
|
| > $HOME/.snapkitty/daemon.log 2>&1 &
|
| DAEMON_PID=$!
|
| trap "kill $DAEMON_PID" EXIT
|
| fi
|
|
|
| # Exec Bash with our RC file
|
| exec ${pkgs.bash}/bin/bash --rcfile <(cat ${dotfiles}/home/.bashrc) -i "$@"
|
| '';
|
|
|
| in
|
| pkgs.buildEnv {
|
| name = "snapkitty-gitbash-meta-${bom.version}";
|
| paths = [ msys2-base mingw64 ] ++ runtimePkgs ++ [ launcher dotfiles prolog-policies ];
|
|
|
| postBuild = ''
|
| # Ensure the MSYS2 root structure looks right
|
| ln -sfn ${mingw64} $out/mingw64
|
| ln -sfn ${msys2-base} $out/msys2
|
|
|
| # Generate version manifest
|
| echo "{\"version\": \"${bom.version}\", \"bom_hash\": \"${bom.hash}\", \"daemon\": \"${sovereign-daemon}\", \"shell\": \"$out/bin/snapkitty-shell\"}" > $out/snapkitty-manifest.json
|
| '';
|
| }
|
|
|