# This shell setup was originally inspired by sioodmy. # Some further cool tricks, like using vendor_conf.d to avoid having # to build fish myself, are taken from viperml's setup. {pkgs, ...}: let inherit (pkgs) lib; inherit (lib.strings) concatStringsSep; inherit (lib.attrsets) mapAttrsToList; toml = pkgs.formats.toml {}; starship-config = import ./starship.nix; aliases = import ./aliases.nix {inherit pkgs;}; vendorConf = "share/fish/vendor_conf.d"; fishinit = import ./fishinit.nix { inherit pkgs aliasesStr vendorConf ; }; aliasesStr = mapAttrsToList (k: v: "alias ${k}=\"${v}\"") aliases |> concatStringsSep "\n"; packages = import ./packages.nix pkgs; in (pkgs.symlinkJoin { name = "fish"; paths = [pkgs.fish] ++ packages; nativeBuildInputs = [pkgs.makeWrapper]; postBuild = '' wrapProgram $out/bin/fish \ --set STARSHIP_CONFIG "${toml.generate "starship.toml" starship-config}" \ --prefix XDG_DATA_DIRS : "${ lib.makeSearchPathOutput "out" "share" [ fishinit ] }" ''; }) .overrideAttrs (_: { passthru = { shellPath = "/bin/fish"; }; })