From b95e1eb37f675b270497023b675a524017e4450c Mon Sep 17 00:00:00 2001
From: Peder Bergebakken Sundt <pbsds@hotmail.com>
Date: Thu, 20 Mar 2025 13:48:34 +0100
Subject: [PATCH] fhs envrc

---
 .envrc     | 18 +++++++++++-------
 .remoteenv |  9 ++++++++-
 flake.nix  | 22 ++++++++++++----------
 3 files changed, 31 insertions(+), 18 deletions(-)

diff --git a/.envrc b/.envrc
index 64e10c1..39a6c78 100644
--- a/.envrc
+++ b/.envrc
@@ -44,14 +44,18 @@ if [[ ! -s .direnv/pull-date || "$now" != "$(cat .direnv/pull-date)" ]]; then
 fi
 
 # source env
-if [[ ! -f .remote.toml ]]; then
-  use flake .#envrc-local
-else
-  use flake .#envrc-remote
-  printf "\n"
-  just motd
-  printf "\n"
+flake_shell=.#envrc
+if [[ -f .remote.toml ]]; then
+  flake_shell+=-remotes
 fi
+if [[ ! -f /run/current-system/nixos-version ]]; then
+  flake_shell+=-fhs
+fi
+use flake "$flake_shell"
+
+printf "\n"
+just motd
+printf "\n"
 
 unset -f git
 
diff --git a/.remoteenv b/.remoteenv
index 97c80b9..56147a2 100644
--- a/.remoteenv
+++ b/.remoteenv
@@ -1,6 +1,13 @@
 #!/usr/bin/env bash
 export HOST_SHELL="$(command -v "$SHELL")"
 export IS_REMOTE_ENV=1
-eval "$(nix print-dev-env .#remoteenv)"
+
+flake_shell=.#remoteenv
+if [[ ! -f /run/current-system/nixos-version ]]; then
+  flake_shell+=-fhs
+fi
+eval "$(nix print-dev-env "$flake_shell")"
+unset flake_shell
+
 echo Entered "$(hostname --fqdn)"
 df -h /nix/store
diff --git a/flake.nix b/flake.nix
index 034a8e8..98226d9 100644
--- a/flake.nix
+++ b/flake.nix
@@ -451,14 +451,14 @@
     #});
 
     devShells = forAllSystems ({ pkgs, system, ... }: let
-      mkShell = packages: pkgs.mkShellNoCC { inherit packages; };
-      #mkShell'= packages: pkgs.mkShellNoCC {
+      mkShell = {...}@args: packages: pkgs.mkShellNoCC (args // { packages = (args.packages or []) ++ packages; });
+      #mkShell'= {...}@args: packages: pkgs.mkShellNoCC (args // {
       #    inherit (self.checks.${system}.pre-commit-check) shellHook;
-      #    packages = packages ++ self.checks.${system}.pre-commit-check.enabledPackages;
-      #};
+      #    packages = (args.packages or []) ++ packages ++ self.checks.${system}.pre-commit-check.enabledPackages;
+      #});
+      inherit  (inputs-edge.system-manager-edge.packages.${system}) system-manager;
       envrc-pkgs = [
         self.packages.${system}.nixos-rebuild-nom
-        inputs-edge.system-manager-edge.packages.${system}.system-manager
         pkgs.home-manager
         pkgs.nix-output-monitor
         pkgs.cachix
@@ -469,21 +469,23 @@
         pkgs.gum
         pkgs.mprocs
       ];
-    in {
-      envrc-local  = mkShell envrc-pkgs;
-      envrc-remote = mkShell (envrc-pkgs ++ [
+    in rec {
+      envrc         = mkShell { } envrc-pkgs;
+      envrc-remotes = mkShell { } (envrc-pkgs ++ [
         pkgs.remote-exec
         pkgs.yq
         pkgs.rsync
       ]);
-      remoteenv = mkShell [
+      remoteenv = mkShell { } [
         self.packages.${system}.nixos-rebuild-nom
-        inputs-edge.system-manager-edge.packages.${system}.system-manager
         pkgs.age
         pkgs.ssh-to-age
         pkgs.just
         pkgs.gum
       ];
+      envrc-fhs         = mkShell { inheritFrom = [ envrc ]; }         [ system-manager ];
+      envrc-remotes-fhs = mkShell { inheritFrom = [ envrc-remotes ]; } [ system-manager ];
+      remoteenv-fhs     = mkShell { inheritFrom = [ remoteenv ]; }     [ system-manager ];
     });
 
   };