Skip to content

docs: add comprehensive flake-parts + full dendritic migration playbook#17

Open
sygint wants to merge 1 commit intomainfrom
docs/flake-parts-dendritic-playbook
Open

docs: add comprehensive flake-parts + full dendritic migration playbook#17
sygint wants to merge 1 commit intomainfrom
docs/flake-parts-dendritic-playbook

Conversation

@sygint
Copy link
Owner

@sygint sygint commented Jan 20, 2026

  • Detailed step-by-step playbook (576 lines) covering:
    • Flake-parts migration from manual outputs
    • Complete dendritic pattern (merge system+home features)
    • Testing & validation procedures
    • Rollback plan
  • Quick reference guide (205 lines) for day-to-day usage
  • Feature module template for creating new features
  • Estimated timeline: 6-9 hours (can be done incrementally)

- Detailed step-by-step playbook (576 lines) covering:
  - Flake-parts migration from manual outputs
  - Complete dendritic pattern (merge system+home features)
  - Testing & validation procedures
  - Rollback plan
- Quick reference guide (205 lines) for day-to-day usage
- Feature module template for creating new features
- Estimated timeline: 6-9 hours (can be done incrementally)
Copilot AI review requested due to automatic review settings January 20, 2026 08:55
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds comprehensive documentation for migrating to flake-parts and implementing the full dendritic pattern for NixOS configuration management. The documentation guides users through restructuring their flake from manual outputs to a modular flake-parts system, while unifying system and home-manager configurations into single feature modules.

Changes:

  • Added feature module template showing the dendritic pattern (system + home config in one file)
  • Created quick reference guide with common commands and patterns for day-to-day usage
  • Added detailed 576-line migration playbook with step-by-step instructions, testing procedures, and rollback plan

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 11 comments.

File Description
modules/features/_template.nix Template showing standard dendritic pattern for unified feature modules with system and home-manager configuration
docs/FLAKE-PARTS-QUICK-REFERENCE.md Quick reference guide for common commands, patterns, and troubleshooting
docs/FLAKE-PARTS-DENDRITIC-PLAYBOOK.md Comprehensive migration playbook with phases, testing, and rollback procedures

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

inputs = {
flake-parts.url = "github:hercules-ci/flake-parts";
nixpkgs.url = "github:nixos/nixpkgs?shallow=1&ref=nixos-unstable";
# ... all your existing inputs
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment "... all your existing inputs" is vague in documentation that's meant to be a detailed playbook. Consider either listing the specific inputs that should be included here (based on the actual flake inputs), or providing a clearer reference to where users can find their existing inputs to copy.

Suggested change
# ... all your existing inputs
# Copy the rest of your existing inputs from your current flake.nix
# (for example: home-manager, flake-utils, nixpkgs-stable, etc.)

Copilot uses AI. Check for mistakes.
self.nixosConfigurations.orion;
};
};
# ... other systems
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment "... other systems" leaves users without guidance on how to structure additional systems. For a comprehensive playbook, either show the complete structure for at least one more system, or provide a clear template pattern that users should follow.

Suggested change
# ... other systems
vega = {
hostname = "vega";
profiles.system = {
user = "root";
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos
self.nixosConfigurations.vega;
};
};

Copilot uses AI. Check for mistakes.
description = "Default terminal emulator";
};

# ... other options
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment "... other options" is too vague. Since this is meant as a template/example in a detailed playbook, it would be more helpful to show 1-2 additional concrete option examples that users might commonly need for a window manager feature.

Suggested change
# ... other options
animationsEnabled = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Whether to enable Hyprland animations by default.";
};
extraConfig = lib.mkOption {
type = lib.types.lines;
default = "";
description = "Additional Hyprland configuration to append to the generated config.";
};

Copilot uses AI. Check for mistakes.
settings = {
# Use cfg options here
"$terminal" = cfg.terminal;
# ... rest of hyprland config
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment "... rest of hyprland config" is too vague for a playbook meant to guide users through migration. Consider showing at least a few more key settings to give users a better sense of what belongs here.

Suggested change
# ... rest of hyprland config
# Example core Hyprland settings
monitor = [
"eDP-1,1920x1080@60,0x0,1"
];
general = {
gaps_in = 5;
gaps_out = 20;
border_size = 2;
"col.active_border" = "rgba(33ccffee)";
"col.inactive_border" = "rgba(595959aa)";
};
input = {
kb_layout = "us";
follow_mouse = 1;
touchpad = {
natural_scroll = true;
};
};
# Basic keybinds (use $terminal from cfg)
bind = [
"SUPER, Return, exec, $terminal"
"SUPER, Q, killactive,"
"SUPER, F, togglefloating,"
];

Copilot uses AI. Check for mistakes.
# Hyprland scripts
"hypr/scripts/monitor-handler.sh".source =
./../../systems/${config.networking.hostName}/scripts/monitor-handler.sh;
# ...
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ellipsis "..." comment is not helpful. Either show one more concrete example of additional config files that would typically be needed, or remove this comment.

Suggested change
# ...
"hypr/hyprland.conf".source =
./../../systems/${config.networking.hostName}/hypr/hyprland.conf;

Copilot uses AI. Check for mistakes.
- ✅ Using `flake-parts` for modular flake composition
- ✅ Unified feature modules in `modules/features/`
- ✅ One file per feature with system + home config
- ✅ Consistent enable options: `modules.<feature>.enable`
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The option naming pattern shown here as modules.<feature>.enable is inconsistent with the rest of the document, which uses modules.features.<feature>.enable (note the missing "features" namespace). This should be modules.features.<feature>.enable to match the actual implementation shown throughout the document.

Suggested change
- ✅ Consistent enable options: `modules.<feature>.enable`
- ✅ Consistent enable options: `modules.features.<feature>.enable`

Copilot uses AI. Check for mistakes.
fh = inputs.fh.packages.x86_64-linux;
};
modules = [
./systems/orion/default.nix
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The module path ./systems/orion/default.nix should be relative to the flake root or use an absolute path from the flake root. In the context of flake-modules/nixos-configurations.nix, this path would need to be ../systems/orion/default.nix or ${self}/systems/orion/default.nix to be correct.

Suggested change
./systems/orion/default.nix
../systems/orion/default.nix

Copilot uses AI. Check for mistakes.
modules = [
./systems/orion/default.nix
inputs.home-manager.nixosModules.home-manager
# ... other common modules
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment "... other common modules" is too vague for a detailed playbook. Users need to know what modules should be included here. This should either list the specific common modules (like the system modules, home-manager configuration, etc.) or provide a clear reference to where these can be found.

Suggested change
# ... other common modules
# Common modules shared across all hosts:
./modules/system/common.nix
./modules/system/security.nix
./modules/system/networking.nix
./modules/system/users.nix

Copilot uses AI. Check for mistakes.
hyprlock
hypridle
hyprpicker
# ... other system packages
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment "... other system packages" doesn't provide enough guidance. For a playbook example, showing 2-3 more concrete packages would help users understand what typically belongs here versus in user packages.

Suggested change
# ... other system packages
seatd
xdg-desktop-portal-hyprland
wayland-utils

Copilot uses AI. Check for mistakes.
# User-level packages
rofi-wayland
waybar
# ...
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ellipsis "..." comment is not helpful in documentation. Either show more concrete examples of additional packages that would typically be included, or remove this comment.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant