Usage on NixOS
Initialize a directory using the template.
nix flake init --template github:aylur/agsBundle and DevShell
To build a derivation you can use the ags bundle command.
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
astal = {
url = "github:aylur/astal";
inputs.nixpkgs.follows = "nixpkgs";
};
ags = {
url = "github:aylur/ags";
inputs.nixpkgs.follows = "nixpkgs";
inputs.astal.follows = "astal";
};
};
outputs = { self, nixpkgs, ags, astal }: let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in {
packages.${system}.default = pkgs.stdenv.mkDerivation {
pname = "my-shell";
src = ./.;
nativeBuildInputs = with pkgs; [
wrapGAppsHook3
gobject-introspection
ags.packages.${system}.default
];
buildInputs = [
pkgs.glib
pkgs.gjs
astal.io
astal.astal4
# packages like astal.battery or pkgs.libsoup_4
];
installPhase = ''
ags bundle app.ts $out/bin/my-shell
'';
preFixup = ''
gappsWrapperArgs+=(
--prefix PATH : ${pkgs.lib.makeBinPath ([
# runtime executables
])}
)
'';
};
};
}While working on the project, it would make sense to use the ags cli instead of building it everytime with nix.
You could enter a shell with agsFull package which exposes AGS + every Astal library.
nix shell github:aylur/ags#agsFullOr define a devShell and cherry pick packages.
{
outputs = { self, nixpkgs, ags }: let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in {
devShells.${system}.default = pkgs.mkShell {
buildInputs = [
(ags.packages.${system}.default.override {
extraPackages = [
# cherry pick packages
];
})
];
};
};
}Using home-manager
If you prefer the workflow of "configuring a program" instead of "using a library", you can use the home-manager module.
Example content of flake.nix
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
astal.url = "github:aylur/astal";
ags.url = "github:aylur/ags";
};
outputs = { home-manager, nixpkgs, ... }@inputs:
let
system = "x86_64-linux";
in
{
homeConfigurations."${username}" = home-manager.lib.homeManagerConfiguration {
pkgs = import nixpkgs { inherit system; };
# pass inputs as specialArgs #
extraSpecialArgs = { inherit inputs; };
# import your home.nix #
modules = [ ./home-manager/home.nix ];
};
};
}Example content of home.nix file
{ inputs, pkgs, ... }:
{
# add the home manager module
imports = [ inputs.ags.homeManagerModules.default ];
programs.ags = {
enable = true;
# symlink to ~/.config/ags
configDir = ../ags;
# additional packages and executables to add to gjs's runtime
extraPackages = with pkgs; [
inputs.astal.packages.${pkgs.system}.battery
fzf
];
};
}The module only includes the core astal3, astal4 and astal-io libraries. If you want to include any other library you have to add them to extraPackages. You can also add binaries which will be added to the gjs runtime.
WARNING
The configDir option symlinks the given path to ~/.config/ags. If you already have your source code there leave it as null.
Using Astal CLI tools
The home-manager module does not expose Astal CLIs to the home environment, you have to do that yourself if you want:
home.packages = [ inputs.astal.packages.${pkgs.system}.notifd ];astal-notifd --help