old
 1{
 2  den.aspects.core.shell = {
 3    nixos = {pkgs, ...}: let
 4      flyline-src = pkgs.fetchFromGitHub {
 5        owner = "HalFrgrd";
 6        repo = "flyline";
 7        tag = "v1.7.1";
 8        hash = "sha256-MscTAE921ymn0qyL3YQ06P3+AGg23c//6rh7+c+Iv4Y=";
 9      };
10      flyline = (pkgs.callPackage "${flyline-src}/nix/package.nix" {}).overrideAttrs {
11        cargoDeps = pkgs.rustPlatform.importCargoLock {
12          lockFile = "${flyline-src}/Cargo.lock";
13          outputHashes = {
14            "ansi-to-tui-8.0.1" = "sha256-kjTxPzF0eIgJqtfsmquAqo1UFt1hXWv4oACFRgnHg9k=";
15            "flash-0.0.6" = "sha256-lIfTgRdBQWqOeYo3XkI/X6Q/0Vrcpm5vJMCxtX4u9Go=";
16            "flycomp-1.1.2" = "sha256-ipOFG1ZSro5OyWzCu28AYd2+eAuSW7vRDHOT5PuxDPA=";
17            "ratatui-0.30.2" = "sha256-68o9FXF2ioEuXyCq+3254ud95mVF3FRKVPOuBFKWeSI=";
18            "skim-4.6.0" = "sha256-cUSiXwEWUDZccbl3sts2DG4ZNzYExD9ra/VESv2u+Zs=";
19            "termina-0.3.3" = "sha256-WpBKKnOhA+Q1+iopQ3IcGxsjGGW1SNweo8R7gFN5QRA=";
20          };
21        };
22      };
23    in {
24      environment.systemPackages = [flyline];
25
26      programs.bash = {
27        enable = true;
28        completion.enable = true;
29        interactiveShellInit = ''
30          enable -f ${flyline}/lib/libflyline.so flyline
31        '';
32        promptInit = ''
33          # Provide a nice prompt if the terminal supports it.
34          if [ "$TERM" != "dumb" ] || [ -n "$INSIDE_EMACS" ]; then
35            PROMPT_COLOR="1;31m"
36            ((UID)) && PROMPT_COLOR="1;32m"
37            # Show the hostname only when connected via SSH.
38            SSH_HOST=""
39            [ -n "$SSH_CONNECTION" ] && SSH_HOST="@$HOSTNAME"
40            if [ -n "$INSIDE_EMACS" ]; then
41              # Emacs term mode doesn't support xterm title escape sequence (\e]0;)
42              PS1="\[\033[$PROMPT_COLOR\]\u$SSH_HOST\[\033[0m\]: \[\033[1;34m\]\w\[\033[0m\]\n\[\033[$PROMPT_COLOR\]\\$\[\033[0m\] "
43            else
44              PS1="\[\033[$PROMPT_COLOR\]\u$SSH_HOST\[\033[0m\]: \[\033[1;34m\]\w\[\033[0m\]\n\[\033[$PROMPT_COLOR\]\\$\[\033[0m\] "
45              PS1="\[\e]0;\u@\h: \w\a\]$PS1"
46            fi
47            if test "$TERM" = "xterm"; then
48              PS1="\[\033]2;\h:\u:\w\007\]$PS1"
49            fi
50            # Final (transient) prompt: replace the two-line prompt in scrollback.
51            PS1_FINAL="\[\033[$PROMPT_COLOR\]\u@\h\\$\[\033[0m\] "
52          fi
53        '';
54      };
55    };
56
57    homeManager = {
58      programs.bash = {
59        enable = true;
60        enableCompletion = true;
61      };
62    };
63  };
64}