yep, more dotfiles
1{ config
2, lib
3, pkgs
4, lpkgs
5
6, isDarwin
7, ...
8}:
9
10let
11 flags = config.local.flags;
12 cfg = config.local.fragment.shell;
13in
14{
15 options.local.fragment.shell.enable = lib.mkEnableOption ''
16 Shell related
17 '';
18
19 config = lib.mkIf cfg.enable {
20 programs.starship = {
21 enable = true;
22
23 settings = {
24 git_branch.disabled = true;
25 git_commit.disabled = true;
26 git_metrics.disabled = false;
27 git_state.disabled = true;
28 git_status.disabled = true;
29
30 nix_shell = {
31 format = "via [$symbol$state]($style) "; # Remove nix shell name
32 symbol = " ";
33 };
34 };
35 };
36
37 programs.direnv = {
38 enable = true;
39 silent = true;
40 nix-direnv.enable = true;
41 };
42
43 programs.nushell = {
44 enable = true;
45
46 extraConfig = ''
47 $env.config = {
48 show_banner: false,
49 }
50 '';
51 };
52
53 programs.zoxide = {
54 enable = true;
55 options = [ "--cmd cd" ];
56 };
57 home.sessionVariables._ZO_EXCLUDE_DIRS = "$HOME:/nix/store/*:/tmp/*";
58
59 programs.fish = {
60 enable = true;
61 package = pkgs.fish;
62
63 interactiveShellInit = ''
64 abbr -a !! --position anywhere --function last_history_item
65 '';
66
67 shellAliases = {
68 # Use `eza` for `ls` invocations
69 #
70 # This is also a more pure version than using `__fish_ls_*` variables
71 # that depends on fish internal ls wrappers and can be overridden by
72 # bad configuration. (e.g. NixOS `environment.shellAliases` default)
73 ls = "${lib.getExe pkgs.eza} --color=auto --icons=auto --hyperlink";
74
75 pasters = "${lib.getExe pkgs.curl} --data-binary @- https://paste.rs/";
76 };
77
78 shellAbbrs = {
79 # One letter abbrs
80 c = "cargo";
81 d = "docker";
82 dc = "docker compose";
83 g = "git";
84 j = "just";
85 n = "nix";
86 m = "make";
87
88 # Edit utilities
89 cp = "cp -iv";
90 ln = "ln -v";
91 mv = "mv -iv";
92 mkdir = "mkdir -v";
93 tp = "trash-put";
94
95 # Listing utilities
96 l = "ls -aF";
97 ll = "ls -lhaF";
98 tree = "ls -T";
99
100 # Nix-related
101 ur = " unlink result";
102
103 # Use newer tools
104 clear = "#"; # <ctrl-l>
105 cat = "#"; # bat
106 rm = "#"; # trash-put
107 tr = "#"; # srgn
108
109 # Do not keep these commands in history
110 exit = " exit";
111 history = " history";
112 reboot = " reboot";
113 shutdown = " shutdown";
114 };
115
116 functions = {
117 # Executed on interactive shell start
118 fish_greeting = ""; # do nothing
119
120 # Used in interactiveShellInit
121 last_history_item = "echo $history[1]";
122
123 repeat = ''
124 set -l command (string join ' ' -- $argv)
125
126 while true
127 # Prompt for package name
128 read -P "\$ "(set_color brgreen)"$command "(set_color normal) package_name
129
130 # Check if nothing was entered to quit
131 test "$package_name" = "" && break
132
133 # Run 'apt info' command with the provided package name
134 fish -c "$command $package_name"
135 end
136 '';
137
138 launch = ''nohup $argv &> /dev/null &'';
139
140 # Transform a store link file to a real one
141 # Useful when playing with config files
142 unnix = ''
143 set -l path $argv[1]
144 set -l realpath (readlink $path)
145 set -l nstore "/nix/store"
146 test (echo $realpath | head -c(string length $nstore)) = "$nstore"
147
148 unlink $path
149 cp "$realpath" "$path"
150 chmod 644 "$path"
151 '';
152
153 # Quickly explore a derivation (using registry syntax)
154 # e.g. `cdd nixpkgs#fontforge` or `cdd unixpkgs#fontforge`
155 cdd = "cd (nix build --no-link --print-out-paths $argv | ${lib.getExe pkgs.fzf})";
156 } // lib.optionalAttrs (!flags.onlyCached) {
157 # Quickly get outta here to test something
158 cdtmp = ''
159 set -l name $argv[1] (${lib.getExe lpkgs.names})
160 set -l dir /tmp/$name[1]
161
162 mkdir $dir
163 cd $dir
164 '';
165 } // lib.optionalAttrs (!isDarwin) {
166 change-mac = ''
167 set dev (nmcli --get-values GENERAL.DEVICE,GENERAL.TYPE device show | sed '/^wifi/!{h;d;};x;q')
168 sudo ip link set $dev down
169
170 if test "$argv[1]" = "reset";
171 sudo ${lib.getExe pkgs.macchanger} --permanent $dev
172 else;
173 sudo ${lib.getExe pkgs.macchanger} --ending --another $dev
174 end
175
176 sudo ip link set $dev up
177 '';
178 };
179 };
180 };
181}