diff --git a/nix-os/core.nix b/nix-os/core.nix index 39ae485..4252607 100644 --- a/nix-os/core.nix +++ b/nix-os/core.nix @@ -1,14 +1,31 @@ -{ - inputs, - lib, - pkgs, - ... -}: +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running 'nixos-help'). +{ inputs, lib, pkgs, ... }: + +let + inherit (pkgs) mkWrappedExecutable; + + # bool -> nixpkgs[] + wrappedNixExecutables = inEnvironment: assert builtins.isBool inEnvironment; [ + (mkWrappedExecutable {pkg = pkgs.nix; exe = "nix-build"; wrapperArgs = ["--add-flags" "\"--log-format\"" "--add-flags" "bar${lib.optionalString inEnvironment "-with-logs"}"];}) + (mkWrappedExecutable {pkg = pkgs.nix; exe = "nix-shell"; wrapperArgs = ["--add-flags" "\"--log-format\"" "--add-flags" "bar"];}) + ]; + wrappedNixosExecutables = [ + (mkWrappedExecutable {pkg = pkgs.nixos-rebuild; wrapperArgs = ["--add-flags" "\"--log-format\"" "--add-flags" "bar"];}) + ]; + wrappedNix = (pkgs.buildEnv { + name = "wrappedNix-${pkgs.nix.version}"; + paths = [ pkgs.nix ] ++ wrappedNixExecutables false; + }).overrideAttrs { + version = pkgs.nix.version; + passthru.meta = pkgs.nix.meta; + }; +in { imports = [ ./module-overrides.nix - ./nix.nix ]; # kernel @@ -20,6 +37,7 @@ # Allow unfree packages nixpkgs.config.allowUnfree = true; nix = { + package = wrappedNix; channel.enable = false; settings.experimental-features = [ "no-url-literals" @@ -44,7 +62,9 @@ fastfetch smartmontools ddrescue - ]; + ] ++ wrappedNixExecutables true + ++ wrappedNixosExecutables; + programs.git.enable = true; programs.git.config = { commit.verbose = true; diff --git a/nix-os/nix.nix b/nix-os/nix.nix deleted file mode 100644 index 9a7b7c4..0000000 --- a/nix-os/nix.nix +++ /dev/null @@ -1,51 +0,0 @@ -{ - lib, - pkgs, - ... -}: - -let - makeWrapper = "${pkgs.makeWrapper}/nix-support/setup-hook"; - # bool -> nixpkgs[] - wrappedNixExecutables = inEnvironment: assert builtins.isBool inEnvironment; pkgs.symlinkJoin { - name = "${pkgs.nix.name}-wrap"; - paths = [ pkgs.nix ]; - postBuild = '' - . ${makeWrapper} - wrapProgram $out/bin/nix-build \ - --add-flags "--log-format" \ - --add-flags "bar${lib.optionalString inEnvironment "-with-logs"}" - wrapProgram $out/bin/nix-shell \ - --add-flags "--log-format" \ - --add-flags "bar" - ''; - }; - - wrappedNixosExecutables = pkgs.symlinkJoin { - name = "${pkgs.nixos-rebuild.name}-wrap"; - paths = [ pkgs.nixos-rebuild ]; - postBuild = '' - . ${makeWrapper} - wrapProgram $out/bin/nixos-rebuild \ - --add-flags "--log-format" \ - --add-flags "bar" - ''; - }; - - - wrappedNix = (pkgs.symlinkJoin { - name = "wrappedNix-${pkgs.nix.version}"; - paths = [ pkgs.nix ] ++ [( wrappedNixExecutables false )]; - }).overrideAttrs { - version = pkgs.nix.version; - passthru.meta = pkgs.nix.meta; - }; -in { - config = { - nix.package = wrappedNix; - environment.systemPackages = lib.map (lib.hiPrio) [ - (wrappedNixExecutables true) - wrappedNixosExecutables - ]; - }; -} diff --git a/outputs.nix b/outputs.nix index d6b8a54..cb46fbd 100644 --- a/outputs.nix +++ b/outputs.nix @@ -7,29 +7,11 @@ let lib = (import "${inputs.nixpkgs}/lib").extend (import ./lib/overlays/version-info-fixup.nix { revision = inputs.lock.nixpkgs.revision; }); -systems = [ - "x86_64-linux" - "aarch64-linux" -]; - -# (system -> x) -> { [system] := x } -forEachSystem = x: lib.pipe systems [ - (builtins.map (system: { name = system; value = x system; })) - builtins.listToAttrs -]; - self = { inherit inputs lib self; outPath = selfPath; modifiedNixpkgs = import ./pkgs/top-level/impure.nix; modifiedNixpkgsPure = import ./pkgs/top-level/default.nix; - packagesForSystem = system: self.modifiedNixpkgsPure { localSystem = system; }; - packages = forEachSystem (system: let - nixpkgs = import "${inputs.nixpkgs}/pkgs/top-level/default.nix" { localSystem = system; }; - attrnames = builtins.attrNames nixpkgs; - in - builtins.removeAttrs (self.pkgsForSystem system) attrnames - ); overlays = { cosmicPackages = import ./pkgs/overlays/cosmic-packages.nix { inherit inputs; }; selfExpr = import ./pkgs/overlays/selfExpr.nix { nixpkgsPath = inputs.nixpkgs; }; diff --git a/pkgs/by-name/mk/mkScriptOverride/package.nix b/pkgs/by-name/mk/mkScriptOverride/package.nix new file mode 100644 index 0000000..0b71a07 --- /dev/null +++ b/pkgs/by-name/mk/mkScriptOverride/package.nix @@ -0,0 +1,31 @@ +{ + lib, + stdenv, +}: + +{ + src, + script, + ... +} @ args: +lib.hiPrio (stdenv.mkDerivation ( + { + src = src; + name = if lib.isDerivation src + then "${src.name}-script-override" + else "${builtins.baseNameOf src}-script-override"; + phases = [ "installPhase" "scriptOverridePhase" ]; + installPhase = '' + runHook preInstall + + cp -r $src $out + chmod u+w -R $out + + runHook postInstall + ''; + scriptOverridePhase = script; + } // lib.removeAttrs args [ + "src" + "script" + ] +)) diff --git a/pkgs/by-name/mk/mkWrappedExecutable/package.nix b/pkgs/by-name/mk/mkWrappedExecutable/package.nix new file mode 100644 index 0000000..039b6f4 --- /dev/null +++ b/pkgs/by-name/mk/mkWrappedExecutable/package.nix @@ -0,0 +1,22 @@ +{ + lib, + makeWrapper, + stdenv +}: + +/* + pkg: package - nixpkgs package + exe: string - executable (under bin) in pkg + wrapperArgs: string[] - arguments to pass to the wrapper +*/ +{ pkg, exe ? pkg.meta.mainProgram, wrapperArgs }: +lib.hiPrio (stdenv.mkDerivation { + inherit wrapperArgs; + name = "${pkg.name}-wrap-${exe}"; + nativeBuildInputs = [ makeWrapper ]; + phases = ["installPhase"]; + installPhase = '' + mkdir -p $out/bin + makeWrapper ${pkg}/bin/${exe} $out/bin/${exe} $wrapperArgs + ''; +})