aboutsummaryrefslogtreecommitdiff
path: root/programs/bash.nix
blob: 2a3cb97a29a885dcd6f97612526591bbac3054de (plain)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
{ config
, pkgs
, ...
}:

{
  programs.bash = {
    enable = true;
    historyControl = [ "erasedups" ];
    historyFile = "\$HOME/.bash_history";
    historyFileSize = 2000;
    historyIgnore = [ "ls" "exit" "kill" ];
    historySize = 1000;

    shellAliases = {
      "..." = "cd -- ../..";
      grep = "grep --color=auto";
      l = "ls -CF";
      la = "ls -A";
      ll = "ls -alF";
      ls = "ls -F --color=always";
      o = "xdg-open";
      rless = "less -r";
      tmux = "tmux -u";
      tree = "tree -C";
      tb = "nc termbin.com 9999";
      n = "j";

      # git aliases
      gb = "git branch -v";
      gc = "git commit --verbose";
      gd = "git diff --minimal";
      ggp = "git push";
      gl = "git log -p --abbrev-commit --pretty=medium";
      glo = "git log --pretty=oneline --abbrev-commit";
      gst = "git status --short";
      gwls = "git worktree list";
    };

    shellOptions = [
      "histappend"
      "autocd"
      "globstar"
      "checkwinsize"
      "cdspell"
      "dirspell"
      "expand_aliases"
      "dotglob"
      "gnu_errfmt"
      "histreedit"
      "nocasematch"
    ];

    sessionVariables = {

      PF_INFO = "ascii title os kernel uptime pkgs shell";
      PF_SEP = " ";
      PF_COL1 = 7;
      PF_COL2 = 7;
      PF_COL3 = 6;
      PF_ALIGN = "9";
      PF_ASCII = "nixos";

      _JAVA_AWT_WM_NONREPARENTING = 1;

      TERM = "xterm-256color-italic";
      EDITOR = "nvim";
      MANPAGER = "nvim +Man!";
      GPG_TTY = "\$(tty)";

    };

    initExtra = ''
      [ -f $HOME/.github ] && . $HOME/.github
      eval "$(direnv hook bash)"
      export PATH=$PATH:"$HOME/scripts"
      export PROMPT_COMMAND="tmux refresh-client -S";
      export PS1="\n\001\e[0;36m\002λ\001\e[0m\002 ";
      export PS2="> ";

      # git functions

      function fuzzy_worktree () {
        # 1: function that operates on the fzf result
        # 2: an optional query
        query="''${2:- }"
        out=$(
          set -o pipefail && \
          git worktree list | \
          fzf --min-height=15 \
            --preview-window=up,10 \
            --preview='git log --color=always -n10 --oneline {2}' \
            --cycle -1 \
            -q "$query" | \
          awk '{print $1}'
        )
        [ $? -eq 0 ] && echo "$out" && $1 $out
      }

      function gwj () {
        fuzzy_worktree __cd $@
      }

      function gwa () {
        git worktree add "$1" && cd "$1"
      }

      function gwrm () {
        fuzzy_worktree __rm $@
      }

      function __cd() {
        cd "$1"
      }

      function __rm() {
        git worktree remove "$1"
      }

    '';

  };
}