main
1{den, ...}: {
2 den.aspects.core.includes = [den.aspects.core.shell];
3 den.aspects.core.shell = {
4 nixos = {
5 pkgs,
6 lib,
7 ...
8 }: {
9 # Flyline right prompt support. RPS1 wiring is upstream PR #7673;
10 # multi-line right prompts are a local extension.
11 nixpkgs.overlays = [
12 (final: prev: {
13 starship = prev.starship.overrideAttrs (finalAttrs: prevAttrs: {
14 patches = (prevAttrs.patches or []) ++ [./starship-flyline-rps1.patch];
15 doCheck = false;
16 });
17 })
18 ];
19
20 environment.systemPackages = [
21 pkgs.starship
22 pkgs.nur.repos.hpcesia.flyline
23 ];
24
25 environment.etc."starship.toml".source = ./starship.toml;
26
27 environment.variables.STARSHIP_CONFIG = "/etc/starship.toml";
28
29 programs.bash = {
30 enable = true;
31 completion.enable = true;
32 promptInit = "";
33 interactiveShellInit = ''
34 enable -f ${pkgs.nur.repos.hpcesia.flyline}/lib/libflyline.so flyline
35 flyline mouse --mode disabled
36 flyline set-cursor --backend terminal
37
38 flyline create-prompt-widget custom \
39 --name STARSHIP_TRANSIENT \
40 --command '${lib.getExe pkgs.starship} prompt --profile transient' \
41 --block
42 PS1_FINAL=STARSHIP_TRANSIENT
43
44 RPS1_FINAL=""
45
46 PROMPT_RULER="empty-line"
47
48 if [ "$TERM" != "dumb" ]; then
49 eval "$(${lib.getExe pkgs.starship} init bash)"
50 fi
51 '';
52 };
53 };
54
55 provides.to-users = {
56 persistHome = {config, ...}: {
57 directories = [
58 "${config.xdg.data.directory}/stinkpot"
59 ];
60 };
61
62 hjem = {
63 pkgs,
64 lib,
65 ...
66 }: {
67 imports = [./_module.nix];
68
69 packages = [pkgs.nur.repos.hpcesia.stinkpot];
70
71 programs.bash = {
72 interactiveShellInit = ''
73 eval "$(${lib.getExe pkgs.nur.repos.hpcesia.stinkpot} init)"
74 flyline key bind Ctrl+r 'always=runBashCommand(__stinkpot_search)'
75
76 __ix_history_flush() {
77 history -a
78 }
79 if [[ ";''${PROMPT_COMMAND[*]:-};" != *";__ix_history_flush;"* ]]; then
80 if [[ "$(declare -p PROMPT_COMMAND 2>&1)" == "declare -a"* ]]; then
81 PROMPT_COMMAND=("''${PROMPT_COMMAND[@]}" __ix_history_flush)
82 else
83 PROMPT_COMMAND="''${PROMPT_COMMAND:+$PROMPT_COMMAND;}__ix_history_flush"
84 fi
85 fi
86
87 # Fix Flyline panic in Zellij
88 __ix_fix_term_size() {
89 local rows cols
90 IFS=' ' read -r rows cols < <(stty size 2>/dev/null)
91 if [ "''${cols:-0}" -gt 0 ] && [ "''${rows:-0}" -gt 0 ]; then
92 export COLUMNS="$cols" LINES="$rows"
93 else
94 [ "''${COLUMNS:-0}" -gt 0 ] || COLUMNS=80
95 [ "''${LINES:-0}" -gt 0 ] || LINES=24
96 export COLUMNS LINES
97 fi
98 }
99 if [[ ";''${PROMPT_COMMAND[*]:-};" != *";__ix_fix_term_size;"* ]]; then
100 if [[ "$(declare -p PROMPT_COMMAND 2>&1)" == "declare -a"* ]]; then
101 PROMPT_COMMAND=("''${PROMPT_COMMAND[@]}" __ix_fix_term_size)
102 else
103 PROMPT_COMMAND="''${PROMPT_COMMAND:+$PROMPT_COMMAND;}__ix_fix_term_size"
104 fi
105 fi
106 '';
107 };
108 };
109 };
110 };
111}