Nix
Using Astal on Nix will require you to write a derivation for your project. You can either copy and build off of these example flakes or you can incorporate the derivations into your existing flake/configuration.
Q: "How do I install Astal on Nix?"
See answer
A: You don't.
You can't install libraries globally on Nix as you would with regular package managers like pacman
, dnf
or apt
. You have to write a derivation for your projects like you would for any other program.
TypeScript
Using AGS as the bundler.
nix
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
astal = {
url = "github:aylur/astal";
inputs.nixpkgs.follows = "nixpkgs";
};
ags = {
url = "github:aylur/ags";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, astal, ags }: let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in {
packages.${system}. default = pkgs.stdenvNoCC.mkDerivation rec {
name = "my-shell";
src = ./.;
nativeBuildInputs = [
ags.packages.${system}.default
pkgs.wrapGAppsHook
pkgs.gobject-introspection
];
buildInputs = with astal.packages.${system}; [
astal3
io
# any other package
];
installPhase = ''
mkdir -p $out/bin
ags bundle app.ts $out/bin/${name}
'';
};
};
}
TIP
You can use any other bundler too like esbuild
which is what ags
uses under the hood.
Lua
nix
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
astal = {
url = "github:aylur/astal";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, astal }: let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in {
packages.${system}.default = astal.lib.mkLuaPackage {
inherit pkgs;
name = "my-shell"; # how to name the executable
src = ./path/to/project; # should contain init.lua
# add extra glib packages or binaries
extraPackages = [
astal.packages.${system}.battery
pkgs.dart-sass
];
};
};
}
Python
nix
# Not documented yet
Vala
Keep in mind that this is just the nix derivation and you still have to use some build tool like meson.
nix
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
astal = {
url = "github:aylur/astal";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, astal }: let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in {
packages.${system}.default = pkgs.stdenv.mkDerivation {
name = "my-shell";
src = ./.;
nativeBuildInputs = with pkgs; [
meson
ninja
pkg-config
vala
gobject-introspection
];
buildInputs = [
astal.packages.${system}.io
astal.packages.${system}.astal3
astal.packages.${system}.battery
# add extra packages
];
};
};
}