summary refs log tree commit diff
path: root/modules/programs/bash/bash.nix
blob: 8df97ceac5f28e3d3f82dc3adeb32224b7a32f35 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# This module defines global configuration for the Bash shell, in
# particular /etc/bashrc and /etc/profile.

{ config, pkgs, ... }:

with pkgs.lib;

let

  options = {

    environment.shellInit = mkOption {
        default = "";
        example = ''export PATH=/godi/bin/:$PATH'';
        description = "
          Script used to initialized user shell environments.
        ";
        merge = mergeStringOption;
      };

  };

in    
   
{
  require = [options];

  environment.etc =
    [ { # /etc/bashrc: script executed when the shell starts as a
        # non-login shell.  /etc/profile also sources this file, so
        # most global configuration (such as environment variables)
        # should go into this script.
        source = pkgs.substituteAll {
          src = ./bashrc.sh;

          bash = pkgs.bash;
          wrapperDir = config.security.wrapperDir;
          modulesTree = config.system.modulesTree;
          shellInit = config.environment.shellInit;
        };
        target = "bashrc";
      }

      { # Script executed when the shell starts as a login shell.
        source = ./profile.sh;
        target = "profile";
      }

      { # Template for ~/.bashrc: script executed when the shell
        # starts as a non-login shell.
        source = ./bashrc-user.sh;
        target = "skel/.bashrc";
        mode = "0644";
      }
      
      { # Configuration for readline in bash.
        source = ./inputrc;
        target = "inputrc";
      }
    ];

  system.build.binsh = pkgs.bashInteractive;

  system.activationScripts.binsh = stringAfter [ "stdio" ]
    ''
      # Create the required /bin/sh symlink; otherwise lots of things
      # (notably the system() function) won't work.
      mkdir -m 0755 -p /bin
      ln -sfn ${config.system.build.binsh}/bin/sh /bin/sh
    '';
  
}