2026-05-06 18:03:09 +10:00
2026-05-06 17:32:40 +10:00
2026-05-06 17:32:40 +10:00
2026-05-06 17:32:40 +10:00
2026-05-06 18:03:09 +10:00

❄️ My NixOS Configuration

This directory contains the declarative configuration for my user environment, managed by Home Manager.

🛠️ How it Works (The Nix Way)

In NixOS, configuration files are managed "declaratively" rather than manually.

  1. The Source of Truth: Everything is defined in your .nix files.
  2. The Nix Store: When you "switch," Nix builds your files and stores them in /nix/store/. These are immutable (read-only).
  3. Symlinking: Home Manager creates symbolic links in your home directory (like ~/.pi/agents/settings.json) that point back to that read-only store.

✍️ How to Make Changes

Do not edit the files in your home directory. They are read-only symlinks. To change settings:

  1. Edit your source code: Open home.nix in nvim.
  2. Modify the Nix block: Locate the home.file section for your agents.
  3. Apply changes:
    home-manager switch
    

Why "sudo" doesn't work

The /nix/store is mounted as read-only at the system level. This ensures your system always matches your config and allows for instant rollbacks if something breaks.

Example: Adding a local file and remote extensions

{ config, pkgs, ... }:

{
  home.file = {
    # 1. Manual/Local File Management
    ".pi/agents/settings.json".text = ''
      {
        "defaultProvider": "openrouter",
        "extensionsPath": "~/.pi/extensions"
      }
    '';

    # 2. Adding an entire folder (e.g., extensions) from Gitea
    ".pi/extensions/my-tool".source = pkgs.fetchgit {
      url = "https://your-gitea-instance.com";
      rev = "main"; # or a specific commit hash
      sha256 = "0000000000000000000000000000000000000000000000000000"; # Run 'nix-prefetch-git' to get this
    };

    # 3. Recursive directory from your local config folder
    # This maps everything inside your local 'agents' folder to ~/.pi/agents/
    ".pi/agents" = {
      source = ./agents; 
      recursive = true;
    };
  };
}

Tips for Extensions

  • Git Tracking: If you use git add . in your config directory, Nix will track your local changes.
  • Fetchers: Use pkgs.fetchgit for Gitea repos to ensure they are version-controlled and reproducible.
  • Permissions: If an extension needs to be executable, add executable = true; to the home.file block.
Description
No description provided
Readme 8.1 MiB
Languages
TypeScript 97.2%
Python 1.2%
HTML 1.1%
JavaScript 0.4%