{ config, lib, pkgs, dots, ... }: { options.custom = with lib; { shell = { packages = mkOption { type = with types; attrsOf (oneOf [ str attrs package ]); default = { }; apply = custom.mkShellPackages; description = '' Attrset of shell packages to install and add to pkgs.custom overlay (for compatibility across multiple shells). Both string and attr values will be passed as arguments to writeShellApplicationCompletions ''; example = '' shell.packages = { myPackage1 = "echo 'Hello, World!'"; myPackage2 = { runtimeInputs = [ pkgs.hello ]; text = "hello --greeting 'Hi'"; }; } ''; }; # additionalSourceFile = mkOption { # type = # with types; # nullOr (oneOf [ # path # str # ]); # default = "${dots}/src/home/shell/custom.sh"; # }; }; }; config = { # xdg.configFile."emacs".source = config.lib.file.mkOutOfStoreSymlink "${dots}/home/emacs/config"; programs.bash = { bashrcExtra = lib.mkAfter '' export PATH="${dots}/home/shell/bin:$PATH" ''; }; programs.zsh = { initContent = lib.mkAfter '' export PATH="${dots}/home/shell/bin:$PATH" ''; }; # programs.bash = lib.mkIf (config.custom.shell.additionalSourceFile != null) { # bashrcExtra = lib.mkAfter '' # source ${config.custom.shell.additionalSourceFile} # ''; # }; # programs.zsh = lib.mkIf (config.custom.shell.additionalSourceFile != null) { # initExtra = lib.mkAfter '' # source ${config.custom.shell.additionalSourceFile} # ''; # }; }; }