Difference between revisions of "Nixpkgs/Reviewing changes"

From NixOS Wiki
Jump to: navigation, search
m (add local)
(mesa example)
 
(3 intermediate revisions by the same user not shown)
Line 6: Line 6:
 
=== Pre-flakes ===
 
=== Pre-flakes ===
 
<syntaxhighlight lang="nix">
 
<syntaxhighlight lang="nix">
nixpkgs.overlays = let  
+
nixpkgs.overlays = let
 
   owner = "Artturin";
 
   owner = "Artturin";
 
   branchname = "cups-filters-update"; # branchname or rev
 
   branchname = "cups-filters-update"; # branchname or rev
Line 23: Line 23:
 
];
 
];
  
 +
</syntaxhighlight>
 +
 +
===mesa updates/changes===
 +
i(Artturin) tested https://github.com/NixOS/nixpkgs/pull/160267 this way
 +
this can also be used to test other changes for which overlaying would rebuild too many packages.
 +
<syntaxhighlight lang="nix">
 +
hardware.opengl = let
 +
  patched-pkgs = import (pkgs.applyPatches {
 +
    src = pkgs.path;
 +
    patches = [
 +
      (pkgs.fetchpatch {
 +
      url = "https://github.com/NixOS/nixpkgs/commit/4e199a91dc49659ea3ecd7f8e174d6ade2a1d717.patch";
 +
      sha256 = "sha256-xgZXntLx7U120RJ78RTw3+oSmlQ2qdwfVaLM+/H6ReA=";
 +
      })
 +
    ];
 +
  }) { config = pkgs.config; };
 +
in {
 +
  package = patched-pkgs.mesa.drivers;
 +
  package32 = patched-pkgs.pkgsi686Linux.mesa.drivers;
 +
};
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Line 32: Line 52:
  
 
<syntaxhighlight lang="nix">
 
<syntaxhighlight lang="nix">
 +
# if it is not a new module
 
disabledModules = [ "module.nix" ];
 
disabledModules = [ "module.nix" ];
  
Line 70: Line 91:
 
====Vm example====
 
====Vm example====
  
run with  
+
run with
 
<syntaxHighlight lang=console>
 
<syntaxHighlight lang=console>
 
$ nix run
 
$ nix run
Line 84: Line 105:
 
   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 94: Line 115:
 
         ({ pkgs, ... }: {
 
         ({ pkgs, ... }: {
 
           disabledModules = [ "services/desktops/pipewire/pipewire.nix" ];
 
           disabledModules = [ "services/desktops/pipewire/pipewire.nix" ];
           imports = [  
+
           imports = [
 
             "${inputs.pkgsReview}/nixos/modules/services/desktops/pipewire/pipewire.nix"
 
             "${inputs.pkgsReview}/nixos/modules/services/desktops/pipewire/pipewire.nix"
  
Line 123: Line 144:
 
       ];
 
       ];
 
     };
 
     };
     # So that we can just run 'nix run' instead of  
+
     # So that we can just run 'nix run' instead of
 
     # 'nix build ".#nixosConfigurations.vm.config.system.build.vm" && ./result/bin/run-nixos-vm'
 
     # 'nix build ".#nixosConfigurations.vm.config.system.build.vm" && ./result/bin/run-nixos-vm'
 
     defaultPackage.x86_64-linux = self.nixosConfigurations.vm.config.system.build.vm;
 
     defaultPackage.x86_64-linux = self.nixosConfigurations.vm.config.system.build.vm;
Line 129: Line 150:
 
       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 18:07, 18 February 2022

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;
  })
];

mesa updates/changes

i(Artturin) tested https://github.com/NixOS/nixpkgs/pull/160267 this way this can also be used to test other changes for which overlaying would rebuild too many packages.

hardware.opengl = let
  patched-pkgs = import (pkgs.applyPatches {
    src = pkgs.path;
    patches = [
      (pkgs.fetchpatch {
      url = "https://github.com/NixOS/nixpkgs/commit/4e199a91dc49659ea3ecd7f8e174d6ade2a1d717.patch";
      sha256 = "sha256-xgZXntLx7U120RJ78RTw3+oSmlQ2qdwfVaLM+/H6ReA=";
      })
    ];
  }) { config = pkgs.config; };
in {
  package = patched-pkgs.mesa.drivers;
  package32 = patched-pkgs.pkgsi686Linux.mesa.drivers;
};


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

# if it is not a new module
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;
              }
            ];
          };
        })
      ];
    };
  };
}