diff --git a/pkgs/by-name/ag/ags-cli/bundle.nix b/pkgs/by-name/ag/ags-cli/bundle.nix new file mode 100644 index 00000000000000..f8db6ee38895ec --- /dev/null +++ b/pkgs/by-name/ag/ags-cli/bundle.nix @@ -0,0 +1,89 @@ +{ + lib, + ags, + astal, + dart-sass, + fzf, + gjs, + gnused, + gobject-introspection, + gtk3, + gtk4-layer-shell, + stdenvNoCC, + wrapGAppsHook, +}: +{ + entry ? "app.ts", + dependencies ? [ ], + enableGtk4 ? false, + ... +}@attrs: +stdenvNoCC.mkDerivation ( + finalAttrs: + attrs + // { + nativeBuildInputs = (attrs.nativeBuildInputs or [ ]) ++ [ + wrapGAppsHook + gobject-introspection + gnused + ags + ]; + + buildInputs = + (attrs.buildInputs or [ ]) + ++ dependencies + ++ [ + gjs + astal.astal4 + astal.astal3 + astal.io + ]; + + preFixup = + '' + gappsWrapperArgs+=( + --prefix PATH : ${ + lib.makeBinPath ( + dependencies + ++ [ + dart-sass + fzf + gtk3 + ] + ) + } + ) + '' + + lib.optionalString enableGtk4 '' + gappsWrapperArgs+=( + --set LD_PRELOAD "${gtk4-layer-shell}/lib/libgtk4-layer-shell.so" + ) + '' + + (attrs.preFixup or ""); + + installPhase = + let + outBin = "$out/bin/${finalAttrs.pname}"; + in + # bash + '' + runHook preInstall + + mkdir -p "$out/bin" "$out/share" + cp -r ./* "$out/share" + ags bundle "${entry}" "${outBin}" -d "SRC='$out/share'" + + chmod +x "${outBin}" + + if ! head -n 1 "${outBin}" | grep -q "^#!"; then + sed -i '1i #!${gjs}/bin/gjs -m' "${outBin}" + fi + + runHook postInstall + ''; + + meta = (attrs.meta or { }) // { + mainProgram = finalAttrs.pname; + }; + } +) diff --git a/pkgs/by-name/ag/ags-cli/package.nix b/pkgs/by-name/ag/ags-cli/package.nix new file mode 100644 index 00000000000000..408548af5e3724 --- /dev/null +++ b/pkgs/by-name/ag/ags-cli/package.nix @@ -0,0 +1,107 @@ +{ + lib, + astal, + blueprint-compiler, + buildGoModule, + callPackage, + dart-sass, + fetchFromGitHub, + gjs, + glib, + gobject-introspection, + gtk4-layer-shell, + installShellFiles, + nix-update-script, + nodejs, + wrapGAppsHook3, + writers, + + extraPackages ? [ ], +}: +let + datadirs = + writers.writeNu "datadirs" + # nu + '' + $env.XDG_DATA_DIRS + | split row ":" + | filter { $"($in)/gir-1.0" | path exists } + | str join ":" + ''; + + bins = [ + gjs + nodejs + dart-sass + blueprint-compiler + astal.io + ]; +in +buildGoModule rec { + pname = "ags-cli"; + version = "2.2.1"; + + src = fetchFromGitHub { + owner = "Aylur"; + repo = "ags"; + tag = "v${version}"; + hash = "sha256-snHhAgcH8hACWZFaAqHr5uXH412UrAuA603OK02MxN8="; + }; + + vendorHash = "sha256-Pw6UNT5YkDVz4HcH7b5LfOg+K3ohrBGPGB9wYGAQ9F4="; + proxyVendor = true; + + ldflags = [ + "-s" + "-w" + "-X main.astalGjs=${astal.gjs}/share/astal/gjs" + "-X main.gtk4LayerShell=${gtk4-layer-shell}/lib/libgtk4-layer-shell.so" + ]; + + nativeBuildInputs = [ + wrapGAppsHook3 + gobject-introspection + installShellFiles + ]; + + buildInputs = extraPackages ++ [ + glib + astal.io + astal.astal3 + astal.astal4 + ]; + + preFixup = '' + gappsWrapperArgs+=( + --prefix NIX_GI_DIRS : "$(${datadirs})" + --prefix PATH : "${lib.makeBinPath (bins ++ extraPackages)}" + ) + ''; + + postInstall = '' + installShellCompletion \ + --cmd ags \ + --bash <($out/bin/ags completion bash) \ + --fish <($out/bin/ags completion fish) \ + --zsh <($out/bin/ags completion zsh) + ''; + + passthru = { + bundle = callPackage ./bundle.nix { }; + updateScript = nix-update-script { }; + }; + + meta = { + description = "Scaffolding CLI for Astal+TypeScript"; + homepage = "https://github.com/Aylur/ags"; + changelog = "https://github.com/Aylur/ags/releases/tag/v${version}"; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ + foo-dogsquared + johnrtitor + perchun + ]; + mainProgram = "ags"; + platforms = lib.platforms.linux; + }; +}