A modules/shell.nix => modules/shell.nix +78 -0
@@ 0,0 1,78 @@
+/*
+Opinionated shell environment.
+*/
+{
+ flake.modules.nixos.shell = {pkgs, ...}: {
+ environment.systemPackages = with pkgs; [
+ btop
+ carapace
+ elvish
+ fd
+ ripgrep
+ silicon
+ sl
+ ];
+
+ programs.direnv = {
+ enable = true;
+ nix-direnv.enable = true;
+ silent = true;
+ };
+ };
+
+ flake.modules.homeManager.shell = {...}: {
+ home.file = {
+ ".config/elvish/lib/direnv.elv" = {
+ executable = true;
+ text = ''
+ ## Hook for direnv as of direnv 2.34.0
+ set @edit:before-readline = $@edit:before-readline {
+ try {
+ var m = [("direnv" export elvish | from-json)]
+ if (> (count $m) 0) {
+ set m = (all $m)
+ keys $m | each { |k|
+ if $m[$k] {
+ set-env $k $m[$k]
+ } else {
+ unset-env $k
+ }
+ }
+ }
+ } catch e {
+ echo $e
+ }
+ }
+ '';
+ };
+ ".config/elvish/rc.elv" = {
+ executable = true;
+ text = ''
+ #!/usr/bin/env elvish
+ use direnv
+ eval (starship init elvish)
+ eval (carapace _carapace|slurp)
+ '';
+ };
+ };
+ programs.bash = {
+ enable = true;
+ bashrcExtra = ''
+ eval "$(direnv hook bash)"
+ eval "$(starship init bash)"
+ '';
+ };
+ programs.starship = {
+ enable = true;
+ settings = {
+ add_newline = false;
+ scan_timeout = 10;
+ shell = {
+ disabled = false;
+ bash_indicator = "bsh";
+ elvish_indicator = "elv";
+ };
+ };
+ };
+ };
+}