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}