Add nixgen package
This commit is contained in:
		
							parent
							
								
									019826d09e
								
							
						
					
					
						commit
						58a3b78799
					
				| @ -37,6 +37,7 @@ let | ||||
|     nanos6 = callPackage ./pkgs/nanos6/default.nix { }; | ||||
|     nanos6Debug = final.nanos6.override { enableDebug = true; }; | ||||
|     nixtools = callPackage ./pkgs/nixtools/default.nix { }; | ||||
|     nixgen = callPackage ./pkgs/nixgen/default.nix { }; | ||||
|     # Broken because of pkgsStatic.libcap | ||||
|     # See: https://github.com/NixOS/nixpkgs/pull/268791 | ||||
|     #nix-wrap = callPackage ./pkgs/nix-wrap/default.nix { }; | ||||
|  | ||||
							
								
								
									
										22
									
								
								pkgs/nixgen/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkgs/nixgen/default.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| { | ||||
|   stdenv | ||||
| , lib | ||||
| }: | ||||
| 
 | ||||
| stdenv.mkDerivation { | ||||
|   pname = "nixgen"; | ||||
|   version = "0.0.1"; | ||||
|   src = ./nixgen; | ||||
|   dontUnpack = true; | ||||
|   phases = [ "installPhase" ]; | ||||
|   installPhase = '' | ||||
|     mkdir -p $out/bin | ||||
|     cp -a $src $out/bin/nixgen | ||||
|   ''; | ||||
|   meta = { | ||||
|     description = "Quickly generate flake.nix from command line"; | ||||
|     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||
|     platforms = lib.platforms.linux; | ||||
|     license = lib.licenses.gpl3Plus; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										97
									
								
								pkgs/nixgen/nixgen
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										97
									
								
								pkgs/nixgen/nixgen
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,97 @@ | ||||
| #!/bin/sh | ||||
| # | ||||
| # Copyright (c) 2025, Barcelona Supercomputing Center (BSC) | ||||
| # SPDX-License-Identifier: GPL-3.0+ | ||||
| # Author: Rodrigo Arias Mallo <rodrigo.arias@bsc.es> | ||||
| 
 | ||||
| function usage() { | ||||
|   echo "USAGE: nixgen [-f] [package [...]] [-b package [...]]" >&2 | ||||
|   echo "  Generates a flake.nix file with the given packages." >&2 | ||||
|   echo "  After flake.nix is created, use 'nix develop' to enter the shell." >&2 | ||||
|   echo "OPTIONS" >&2 | ||||
|   echo "  -f               Overwrite existing flake.nix (default: no)." >&2 | ||||
|   echo "  packages...      Add these packages to the shell." >&2 | ||||
|   echo "  -b packages...   Add the dependencies needed to build these packages." >&2 | ||||
|   echo "EXAMPLE" >&2 | ||||
|   echo "  $ nixgen ovni bigotes -b nosv tampi" >&2 | ||||
|   echo "  Adds the packages ovni and bigotes as well as all required dependencies" >&2 | ||||
|   echo "  to build nosv and tampi." >&2 | ||||
|   echo "AUTHOR" >&2 | ||||
|   echo "  Rodrigo Arias Mallo <rodrigo.arias@bsc.es>" >&2 | ||||
|   exit 1 | ||||
| } | ||||
| 
 | ||||
| mode=package | ||||
| packages= | ||||
| inputsFrom= | ||||
| force= | ||||
| 
 | ||||
| if [[ $# -eq 0 ]]; then | ||||
|   usage | ||||
| fi | ||||
| 
 | ||||
| while [[ $# -gt 0 ]]; do | ||||
|     case $1 in -b) | ||||
|       mode=build | ||||
|       shift | ||||
|       ;; | ||||
|     -f) | ||||
|       force=1 | ||||
|       shift | ||||
|       ;; | ||||
|     -h) | ||||
|       usage | ||||
|       ;; | ||||
|     -*|--*) | ||||
|       echo "error: unknown option $1" >&2 | ||||
|       exit 1 | ||||
|       ;; | ||||
|     *) | ||||
|       if [ "$mode" == "package" ]; then | ||||
|         packages+="${packages:+ }$1" | ||||
|       else | ||||
|         inputsFrom+="${inputsFrom:+ }$1" | ||||
|       fi | ||||
|       shift | ||||
|       ;; | ||||
|   esac | ||||
| done | ||||
| 
 | ||||
| if [ ! "$force" -a -e flake.nix ]; then | ||||
|   echo "error: flake.nix exists, force overwrite with -f" >&2 | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| cat > flake.nix <<EOF | ||||
| { | ||||
|   inputs.jungle.url = "git+https://jungle.bsc.es/git/rarias/jungle"; | ||||
|   outputs = { self, jungle }: | ||||
|   let | ||||
|     nixpkgs = jungle.inputs.nixpkgs; | ||||
|     customOverlay = (final: prev: { | ||||
|       # Example overlay, for now empty | ||||
|     }); | ||||
|     pkgs = import nixpkgs { | ||||
|       system = "x86_64-linux"; | ||||
|       overlays = [ | ||||
|         # Apply jungle overlay to get our BSC custom packages | ||||
|         jungle.outputs.bscOverlay | ||||
|         # And on top apply our local changes to customize for cluster | ||||
|         customOverlay | ||||
|       ]; | ||||
|     }; | ||||
|   in { | ||||
|     devShells.x86_64-linux.default = pkgs.mkShell { | ||||
|       pname = "devshell"; | ||||
|       # Include these packages in the shell | ||||
|       packages = with pkgs; [ | ||||
|         $packages | ||||
|       ]; | ||||
|       # The dependencies needed to build these packages will be also included | ||||
|       inputsFrom = with pkgs; [ | ||||
|         $inputsFrom | ||||
|       ]; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| EOF | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user