Difference between revisions of "Nixpkgs/Reviewing changes"

From NixOS Wiki
Jump to: navigation, search
(add cross-compiling of modules)
 
(3 intermediate revisions by the same user not shown)
Line 37: Line 37:
 
   pkgsReview = builtins.fetchTarball {
 
   pkgsReview = builtins.fetchTarball {
 
     url = "https://github.com/USERNAME/nixpkgs/archive/BRANCHNAME.tar.gz";
 
     url = "https://github.com/USERNAME/nixpkgs/archive/BRANCHNAME.tar.gz";
 +
  #pkgsReview = ../nixpkgs;
 
   };
 
   };
 
in [
 
in [
Line 52: Line 53:
 
   pkgsReview = builtins.fetchTarball {
 
   pkgsReview = builtins.fetchTarball {
 
     url = "https://github.com/Artturin/nixpkgs/archive/add-swap-options.tar.gz";
 
     url = "https://github.com/Artturin/nixpkgs/archive/add-swap-options.tar.gz";
 +
  #pkgsReview = ../nixpkgs
 
   };
 
   };
 
in [
 
in [
Line 63: Line 65:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 
  
 
=== Flakes ===
 
=== Flakes ===
Line 83: Line 84:
 
   inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
 
   inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
 
   inputs.pkgsReview.url = "github:Artturin/nixpkgs/pipewirejackldpath";
 
   inputs.pkgsReview.url = "github:Artturin/nixpkgs/pipewirejackldpath";
   #inputs.pkgsReview.url = "path:../nixgits/my-nixpkgs";
+
   #inputs.pkgsReview.url = "/home/artturin/nixgits/my-nixpkgs";
  
 
   outputs = inputs@{ self, nixpkgs, pkgsReview }: {
 
   outputs = inputs@{ self, nixpkgs, pkgsReview }: {
Line 107: Line 108:
 
             diskSize = 1024 * 3;
 
             diskSize = 1024 * 3;
 
             cores = 4;
 
             cores = 4;
 +
            msize = 104857600;
 
           };
 
           };
  
Line 127: Line 129:
 
       type = "app";
 
       type = "app";
 
       program = "${self.defaultPackage.x86_64-linux}/bin/run-nixos-vm";
 
       program = "${self.defaultPackage.x86_64-linux}/bin/run-nixos-vm";
 +
    };
 +
  };
 +
}
 +
</syntaxhighlight>
 +
 +
==== Testing the cross-compilation of modules ====
 +
 +
For example
 +
 +
an improved version can be found at https://github.com/NixOS/nixpkgs/pull/142273#issuecomment-948225922
 +
 +
<syntaxHighlight lang=console>
 +
$ nix build .#nixosConfigurations.nixos.config.services.xserver.displayManager.sessionData.desktops
 +
</syntaxHighlight>
 +
 +
<syntaxhighlight lang="nix">
 +
{
 +
  inputs = {
 +
    nixpkgs.url = "github:ju1m/nixpkgs/display-managers";
 +
  };
 +
 +
  outputs = inputs@{ self, nixpkgs }: {
 +
 +
    nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
 +
      system = "x86_64-linux";
 +
      modules = [
 +
        ({ pkgs, lib, config, ... }: {
 +
          nixpkgs.crossSystem = lib.systems.examples.aarch64-multiplatform;
 +
          services.xserver = {
 +
            enable = true;
 +
            desktopManager.session = [
 +
              { name = "home-manager";
 +
                start = ''
 +
                  ${pkgs.runtimeShell} $HOME/.hm-xsession &
 +
                  waitPID=$!
 +
                '';
 +
                bgSupport = true;
 +
              }
 +
            ];
 +
          };
 +
        })
 +
      ];
 
     };
 
     };
 
   };
 
   };
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>

Latest revision as of 21:33, 22 October 2021

Guides and examples for reviewing nixpkgs pull requests

Packages

Pre-flakes

nixpkgs.overlays = let 
  owner = "Artturin";
  branchname = "cups-filters-update"; # branchname or rev
  pkgsReview = pkgs.fetchzip {
    url = "https://github.com/${owner}/nixpkgs/archive/${branchname}.tar.gz";
    # Change to 52 zeroes when the archive needs to be redownloaded
    sha256 = "sha256-/OR/uEqCy4QlManW9LcySsDXoTXFJ8G/xjhIsEpM4zM=";
  };
  # local checkout
  #pkgsReview = /home/artturin/nixgits/my-nixpkgs;
in [
  (self: super: {
    review = import pkgsReview { overlays = []; config = super.config; };
    cups-filters = self.review.cups-filters;
  })
];


Modules

Pre-flakes

You may use the rev instead of the branchname, the rev will get redownloaded when changed but the branch wont be redownloaded

disabledModules = [ "module.nix" ];

imports = let
  pkgsReview = builtins.fetchTarball {
    url = "https://github.com/USERNAME/nixpkgs/archive/BRANCHNAME.tar.gz";
  #pkgsReview = ../nixpkgs;
  };
in [
  (import "${pkgsReview}/nixos/modules/module.nix")
];


for example

disabledModules = [ "config/swap.nix" "tasks/filesystems.nix" ];

imports = let
  pkgsReview = builtins.fetchTarball {
    url = "https://github.com/Artturin/nixpkgs/archive/add-swap-options.tar.gz";
  #pkgsReview = ../nixpkgs
  };
in [
  (import "${pkgsReview}/nixos/modules/config/swap.nix")
  (import "${pkgsReview}/nixos/modules/tasks/filesystems.nix")
];

  swapDevices = [
    { "device" = "/swapfile"; "options" = [ "nofail" "noatime" ]; "priority" =  0; "discardPolicy" = "once"; }
  ];

Flakes

Vm example

run with

$ nix run

When the pull request is updated or forcepushed, run

$ nix run --update-input pkgsReview

To update the commit hash

{
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
  inputs.pkgsReview.url = "github:Artturin/nixpkgs/pipewirejackldpath";
  #inputs.pkgsReview.url = "/home/artturin/nixgits/my-nixpkgs";

  outputs = inputs@{ self, nixpkgs, pkgsReview }: {

    nixosConfigurations.vm = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      specialArgs = { inherit inputs; };
      modules = [
        ({ pkgs, ... }: {
          disabledModules = [ "services/desktops/pipewire/pipewire.nix" ];
          imports = [ 
            "${inputs.pkgsReview}/nixos/modules/services/desktops/pipewire/pipewire.nix"

            # For virtualisation settings
            "${inputs.nixpkgs}/nixos/modules/virtualisation/qemu-vm.nix"
          ];

          services.pipewire.enable = true;

          # Documentation for these is in nixos/modules/virtualisation/qemu-vm.nix
          virtualisation = {
            memorySize = 1024 * 3;
            diskSize = 1024 * 3;
            cores = 4;
            msize = 104857600;
          };

          users.mutableUsers = false;
          users.users.root = {
            password = "root";
          };
          users.users.user = {
            password = "user";
            isNormalUser = true;
            extraGroups = [ "wheel" ];
          };
        })
      ];
    };
    # So that we can just run 'nix run' instead of 
    # 'nix build ".#nixosConfigurations.vm.config.system.build.vm" && ./result/bin/run-nixos-vm'
    defaultPackage.x86_64-linux = self.nixosConfigurations.vm.config.system.build.vm;
    defaultApp.x86_64-linux = {
      type = "app";
      program = "${self.defaultPackage.x86_64-linux}/bin/run-nixos-vm";
    };
  };
}

Testing the cross-compilation of modules

For example

an improved version can be found at https://github.com/NixOS/nixpkgs/pull/142273#issuecomment-948225922

$ nix build .#nixosConfigurations.nixos.config.services.xserver.displayManager.sessionData.desktops
{
  inputs = {
    nixpkgs.url = "github:ju1m/nixpkgs/display-managers";
  };

  outputs = inputs@{ self, nixpkgs }: {

    nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        ({ pkgs, lib, config, ... }: {
          nixpkgs.crossSystem = lib.systems.examples.aarch64-multiplatform;
          services.xserver = {
            enable = true;
            desktopManager.session = [
              { name = "home-manager";
                start = ''
                  ${pkgs.runtimeShell} $HOME/.hm-xsession &
                  waitPID=$!
                '';
                bgSupport = true;
              }
            ];
          };
        })
      ];
    };
  };
}