Installation & Bootstrapping

Juna is designed to be integrated into a Nix Flake-based workflow. While it can be used with legacy Nixpath setups, we recommend using Flakes to ensure pinning and reproducible asset realization.


1. Update flake.nix

Add Juna to your inputs. To maintain a lean dependency tree and prevent nix-store bloat, ensure you follow your system's nixpkgs instance.

{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";

    juna = {
      url = "git+https://codeberg.org/Gurjaka/juna";
      inputs.nixpkgs.follows = "nixpkgs"; # Critical for store hygiene
    };

    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, juna, home-manager, ... }: {
    # Your configuration logic here
  };
}


2. Inject the Module

Juna operates as a Home Manager module. You must import the default module into your home-manager configuration block to expose the juna.* options.

Standalone Home Manager

homeConfigurations.your-user = home-manager.lib.homeManagerConfiguration {
  ...
  modules = [
    juna.homeManagerModules.default
    ./home.nix
  ];
};

NixOS Module (via Home Manager)

home-manager.users.gurjaka = {
  imports = [ juna.homeManagerModules.default ];
};


3. Initial Activation

Juna is inert by default. To bootstrap the engine, you must explicitly enable it and select a theme. Add this to your home.nix or equivalent module:

{
  juna = {
    enable = true;
    theme = "nord"; # Ensure this theme exists in junaAllThemes

    ...
  };
}

Check out usage guide for a deeper dive into options.


Verification

After running home-manager switch (or nixos-rebuild switch), Juna will begin realizing assets. You can verify the installation by checking the environment:

  1. Check Symlinks: Ensure ~/.cache/juna/ is created (if IPC-capable modules are enabled).
  2. Inspect Options: Visit Modules to see the generated documentation for all available domain modules.

Troubleshooting

  • Missing Themes: If you get an "attribute missing" error, ensure the string passed to juna.theme matches a key in junaAllThemes (check themes gallery).
  • Collision Errors: Juna is a "Polite Guest." If you have existing manual configurations for an application (e.g., programs.foot.settings), Juna will attempt to merge pigments. If a conflict occurs, Juna's domain-specific options will usually require lib.mkForce or a cleanup of your static config.