setting sail
This commit is contained in:
		
						commit
						cfcbf22469
					
				
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
sims/*
 | 
			
		||||
!*/.keep
 | 
			
		||||
.direnv
 | 
			
		||||
							
								
								
									
										75
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
# OpenFOAM nix shell environment
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
With `direnv` installed and active (`eval $"(direnv hook bash)"`) the 
 | 
			
		||||
environment loads itself when you enter this directory or any below it.
 | 
			
		||||
Simulations can be placed inside the `sims` directory. The `sims` 
 | 
			
		||||
directory is ignored by git. If you change branches your simulations 
 | 
			
		||||
should stay untouched. However it may lead to confusion if you have
 | 
			
		||||
simulation results from one OpenFOAM version and then change to another.
 | 
			
		||||
Clone this repository again for each OpenFOAM version you want to use to
 | 
			
		||||
not confuse yourself ;-)
 | 
			
		||||
 | 
			
		||||
## Requirements
 | 
			
		||||
 | 
			
		||||
### nix with flakes
 | 
			
		||||
On `nixos` flakes can be enabled by adding the following to your system
 | 
			
		||||
configuration:
 | 
			
		||||
 | 
			
		||||
``` nix
 | 
			
		||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
On other systems add the following to your `/etc/nix/nix.conf`:
 | 
			
		||||
 | 
			
		||||
``` conf
 | 
			
		||||
experimental-features = nix-command flakes
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### direnv
 | 
			
		||||
 | 
			
		||||
After installing `direnv` it has to be loaded. Maybe add the hook to your
 | 
			
		||||
shellrc:
 | 
			
		||||
 | 
			
		||||
``` sh
 | 
			
		||||
echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
See https://direnv.net/docs/hook.html for more information.
 | 
			
		||||
You'll need to `allow` the current directory:
 | 
			
		||||
 | 
			
		||||
``` sh
 | 
			
		||||
direnv allow
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Update nixpkgs
 | 
			
		||||
 | 
			
		||||
From within this directory run
 | 
			
		||||
 | 
			
		||||
``` sh
 | 
			
		||||
nix flake update
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
to pin to the latest `nixpkgs` version.
 | 
			
		||||
 | 
			
		||||
## Update OpenFOAM version
 | 
			
		||||
 | 
			
		||||
The OpenFOAM derivation is defined in `pkgs/openfoam/default.nix`. Edit the
 | 
			
		||||
variables in the `let` block at the top of the file and replace the 
 | 
			
		||||
`"sha256-..."` string with an empty string. The first build will then fail 
 | 
			
		||||
and give you the correct sha hash. Replace the empty string with it.
 | 
			
		||||
 | 
			
		||||
## Add different OpenFOAM release
 | 
			
		||||
 | 
			
		||||
There are branches for each OpenFOAM release. The main branch has always the 
 | 
			
		||||
latest version. If you want to add a new one:
 | 
			
		||||
 | 
			
		||||
- create a new branch to hold the current version (e.g. openfoam-12)
 | 
			
		||||
- update the repository path in `pkgs/openfoam/default.nix` by editing the
 | 
			
		||||
  parameters in the `let` block.
 | 
			
		||||
- adjust the `patches`, `postPatch`, `configurePhase`, `buildPhase` and 
 | 
			
		||||
  `installPhase` if required
 | 
			
		||||
 | 
			
		||||
Reevaluating `envrc` will build the new OpenFOAM (this may take a while (expect
 | 
			
		||||
 up to 1h).
 | 
			
		||||
							
								
								
									
										59
									
								
								flake.lock
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								flake.lock
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
{
 | 
			
		||||
  "nodes": {
 | 
			
		||||
    "flake-utils": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "systems": "systems"
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1731533236,
 | 
			
		||||
        "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
 | 
			
		||||
        "owner": "numtide",
 | 
			
		||||
        "repo": "flake-utils",
 | 
			
		||||
        "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "numtide",
 | 
			
		||||
        "repo": "flake-utils",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "nixpkgs": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1744868846,
 | 
			
		||||
        "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=",
 | 
			
		||||
        "owner": "NixOS",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "id": "nixpkgs",
 | 
			
		||||
        "type": "indirect"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "root": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "flake-utils": "flake-utils",
 | 
			
		||||
        "nixpkgs": "nixpkgs"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "systems": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1681028828,
 | 
			
		||||
        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
 | 
			
		||||
        "owner": "nix-systems",
 | 
			
		||||
        "repo": "default",
 | 
			
		||||
        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "nix-systems",
 | 
			
		||||
        "repo": "default",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "root": "root",
 | 
			
		||||
  "version": 7
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								flake.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								flake.nix
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
{
 | 
			
		||||
  description = "OpenFOAM 12 Simulation Environment for pirates";
 | 
			
		||||
 | 
			
		||||
  inputs.flake-utils.url = "github:numtide/flake-utils";
 | 
			
		||||
 | 
			
		||||
  outputs = { self, nixpkgs, flake-utils }:
 | 
			
		||||
    flake-utils.lib.eachDefaultSystem
 | 
			
		||||
      (system:
 | 
			
		||||
        let pkgs = nixpkgs.legacyPackages.${system}; in
 | 
			
		||||
        {
 | 
			
		||||
          devShells.default = import ./shell.nix { inherit pkgs; };
 | 
			
		||||
        }
 | 
			
		||||
      );
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
From 8043842ab7feceae999addf2725d44ab0f65071a Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Sebastian Woetzel <wose@zuendmasse.de>
 | 
			
		||||
Date: Sun, 20 Apr 2025 18:00:41 +0200
 | 
			
		||||
Subject: [PATCH] etc/bashrc: add placeholder for FOAM_INST_DIR
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 etc/bashrc | 11 ++---------
 | 
			
		||||
 1 file changed, 2 insertions(+), 9 deletions(-)
 | 
			
		||||
 | 
			
		||||
diff --git a/etc/bashrc b/etc/bashrc
 | 
			
		||||
index 1ead5cc1c7..59d0bdb2ad 100644
 | 
			
		||||
--- a/etc/bashrc
 | 
			
		||||
+++ b/etc/bashrc
 | 
			
		||||
@@ -42,15 +42,8 @@ export WM_PROJECT_VERSION=12
 | 
			
		||||
 # the directory two levels below this file, or $HOME/$WM_PROJECT if that
 | 
			
		||||
 # directory cannot be determined.
 | 
			
		||||
 #
 | 
			
		||||
-[ "$BASH" ] && bashrcFile=${BASH_SOURCE}
 | 
			
		||||
-[ "$ZSH_NAME" ] && bashrcFile=$0
 | 
			
		||||
-if [ -n "$bashrcFile" ]
 | 
			
		||||
-then
 | 
			
		||||
-    export FOAM_INST_DIR=$(cd $(dirname $bashrcFile)/../.. && pwd -P)
 | 
			
		||||
-else
 | 
			
		||||
-    export FOAM_INST_DIR=$HOME/$WM_PROJECT
 | 
			
		||||
-fi
 | 
			
		||||
-unset bashrcFile
 | 
			
		||||
+# FOAM_INST_DIR is set in postPatch phase
 | 
			
		||||
+# __inst_dir_placeholder__
 | 
			
		||||
 #
 | 
			
		||||
 # Please set to the appropriate path if the above default is not correct. E.g.,
 | 
			
		||||
 #
 | 
			
		||||
-- 
 | 
			
		||||
2.49.0
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										87
									
								
								pkgs/openfoam/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								pkgs/openfoam/default.nix
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,87 @@
 | 
			
		|||
{
 | 
			
		||||
  stdenv,
 | 
			
		||||
  lib,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  ...
 | 
			
		||||
}: let
 | 
			
		||||
  version = "12.20250206";
 | 
			
		||||
  major = "12";
 | 
			
		||||
  revision = "20250206";
 | 
			
		||||
  realname = "OpenFOAM";
 | 
			
		||||
in let
 | 
			
		||||
  pkg = stdenv.mkDerivation {
 | 
			
		||||
    pname = "openfoam";
 | 
			
		||||
    inherit version major;
 | 
			
		||||
 | 
			
		||||
    src = pkgs.fetchFromGitHub {
 | 
			
		||||
      owner = realname;
 | 
			
		||||
      repo = "${realname}-${major}";
 | 
			
		||||
      rev = "${revision}";
 | 
			
		||||
      sha256 = "sha256-MZ29G5+49ZjE2hHC4uRF6PTR7cI5hrdjOn66lMnIgIw=";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    nativeBuildInputs = with pkgs; [bash m4 flex bison];
 | 
			
		||||
 | 
			
		||||
    buildInputs = with pkgs; [fftw mpi scotch boost cgal zlib];
 | 
			
		||||
 | 
			
		||||
    patches = [
 | 
			
		||||
      ./0001-etc-bashrc-add-placeholder-for-FOAM_INST_DIR.patch
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    postPatch = ''
 | 
			
		||||
      substituteInPlace etc/bashrc \
 | 
			
		||||
        --replace 'export SCOTCH_TYPE=ThirdParty' 'export SCOTCH_TYPE=system' \
 | 
			
		||||
        --replace 'export ZOLTAN_TYPE=ThirdParty' 'export ZOLTAN_TYPE=none'
 | 
			
		||||
 | 
			
		||||
      patchShebangs Allwmake
 | 
			
		||||
      patchShebangs etc
 | 
			
		||||
      patchShebangs wmake
 | 
			
		||||
      patchShebangs applications
 | 
			
		||||
      patchShebangs bin
 | 
			
		||||
    '';
 | 
			
		||||
 | 
			
		||||
    configurePhase = ''
 | 
			
		||||
      export FOAM_INST_DIR=$NIX_BUILD_TOP/source
 | 
			
		||||
      export WM_PROJECT_DIR=$FOAM_INST_DIR/${realname}-${major}
 | 
			
		||||
      mkdir $WM_PROJECT_DIR
 | 
			
		||||
 | 
			
		||||
      mv $(find $FOAM_INST_DIR/ -maxdepth 1 -not -path $WM_PROJECT_DIR -not -path $FOAM_INST_DIR/) \
 | 
			
		||||
          $WM_PROJECT_DIR/
 | 
			
		||||
 | 
			
		||||
      set +e
 | 
			
		||||
      . $WM_PROJECT_DIR/etc/bashrc
 | 
			
		||||
      set -e
 | 
			
		||||
    '';
 | 
			
		||||
 | 
			
		||||
    buildPhase = ''
 | 
			
		||||
      sh $WM_PROJECT_DIR/Allwmake -j$CORES
 | 
			
		||||
      wclean all
 | 
			
		||||
      wmakeLnIncludeAll
 | 
			
		||||
    '';
 | 
			
		||||
 | 
			
		||||
    installPhase = ''
 | 
			
		||||
      mkdir -p $out/${realname}-${major}
 | 
			
		||||
 | 
			
		||||
      substituteInPlace $WM_PROJECT_DIR/etc/bashrc \
 | 
			
		||||
          --replace '# __inst_dir_placeholder__' "export FOAM_INST_DIR=$out"
 | 
			
		||||
 | 
			
		||||
      cp -Ra $WM_PROJECT_DIR/* $out/${realname}-${major}
 | 
			
		||||
    '';
 | 
			
		||||
 | 
			
		||||
    passthru = {
 | 
			
		||||
      shellHook = ''
 | 
			
		||||
        . ${pkg}/${realname}-${major}/etc/bashrc
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    meta = with pkgs.lib; {
 | 
			
		||||
      homepage = "https://www.openfoam.org/";
 | 
			
		||||
      description = "OpenFOAM is a free, open source CFD software released and developed by OpenFOAM Foundation";
 | 
			
		||||
      license = licenses.gpl3;
 | 
			
		||||
      platforms = platforms.linux;
 | 
			
		||||
      maintainers = [ "wose" ];
 | 
			
		||||
      broken = pkgs.stdenv.isDarwin;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
in
 | 
			
		||||
  pkg
 | 
			
		||||
							
								
								
									
										31
									
								
								shell.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								shell.nix
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
{ pkgs ? import <nixpkgs> { } }:
 | 
			
		||||
with pkgs;
 | 
			
		||||
mkShell rec {
 | 
			
		||||
  openfoam = callPackage ./pkgs/openfoam/default.nix { };
 | 
			
		||||
  buildInputs = [
 | 
			
		||||
    gnumake
 | 
			
		||||
    mpi
 | 
			
		||||
    openfoam
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  shellHook = ''
 | 
			
		||||
    echo "⠀⢰⣿⣷⣦⣄⡀⠀⣀⣀⣀⣀⣀⡀⠀⢀⣠⣴⣶⣿⡆"
 | 
			
		||||
    echo "⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡃"
 | 
			
		||||
    echo "⠀⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"
 | 
			
		||||
    echo "⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇"⠀
 | 
			
		||||
    echo "⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄"⠀
 | 
			
		||||
    echo "⠀⢸⣿⣿⠟⠁⠀⠈⢹⣿⣿⣿⣿⠏⠁⠀⠙⢻⣿⣿⡇"
 | 
			
		||||
    echo "⠀⠈⢿⣿⣷⣄⣀⣠⣼⣿⣿⣿⣿⣦⣀⣀⣠⣾⣿⡿"
 | 
			
		||||
    echo "⢠⣤⡀⠉⠻⠿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⠿⠟⢁⣤⣄"
 | 
			
		||||
    echo "⣼⣿⣿⣦⣄⡀⠘⠿⠻⠿⠟⠿⡿⠻⠿⠀⢀⣀⣤⣾⣿⣧⡀"
 | 
			
		||||
    echo "⠉⠉⠉⠉⠛⠿⣿⣷⣶⣤⣀⣀⣤⣶⣾⣿⠿⠟⠋⠉⠉⠛"
 | 
			
		||||
    echo "⢀⡀⠀⠀⢀⣀⣤⣴⣿⣿⠿⠿⣿⣿⣦⣤⣀⡀⠀⠀⢀⡀"
 | 
			
		||||
    echo "⢿⣿⣷⣾⠿⠟⠛⠋⠁⠀⠀⠀⠀⠈⠙⠛⠻⢿⣷⣶⣿⣿⠆"
 | 
			
		||||
    echo "⠘⢿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⡇⠀"
 | 
			
		||||
    echo ""
 | 
			
		||||
    echo "Setting sail to the open foaming sea!"
 | 
			
		||||
    echo "Arrrrr!"
 | 
			
		||||
    echo ""
 | 
			
		||||
    . ${openfoam}/OpenFOAM-12/etc/bashrc
 | 
			
		||||
  '';
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										0
									
								
								sims/.keep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								sims/.keep
									
									
									
									
									
										Normal file
									
								
							
		Loading…
	
		Reference in a new issue