Fish · 1593 bytes Raw Blame History
1 # FORTRESS shell integration for Fish
2 # This file should be placed in:
3 # ~/.config/fish/functions/fortress.fish
4 # or
5 # /usr/share/fish/vendor_functions.d/fortress.fish (system-wide)
6
7 function fortress --description "Navigate filesystem with FORTRESS and cd on exit"
8 # Set fortress directory - prefer system install, fallback to FORTRESS_DIR env var
9 set -l fortress_dir
10 set -l fortress_exe
11
12 # Check for fortress-bin in PATH first (works for all package managers including Homebrew)
13 if command -v fortress-bin &> /dev/null
14 set fortress_exe fortress-bin
15 else if test -x /usr/bin/fortress-bin
16 # Use system-installed binary (RPM/AUR)
17 set fortress_exe /usr/bin/fortress-bin
18 else if set -q FORTRESS_DIR
19 set fortress_dir $FORTRESS_DIR
20 set fortress_exe $fortress_dir/build/gfortran_*/app/fortress
21 else
22 # Fallback to local development path
23 set fortress_dir $HOME/Documents/GithubOrgs/FortranGoingOnForty/fortress
24 set fortress_exe $fortress_dir/build/gfortran_*/app/fortress
25 end
26
27 # Run fortress
28 if test -n "$fortress_exe"
29 eval $fortress_exe
30 else
31 $fortress_dir/build/gfortran_*/app/fortress
32 end
33
34 # Check if fortress wants us to cd somewhere
35 if test -f $HOME/.fortress_cd
36 set -l target_dir (cat $HOME/.fortress_cd)
37 rm -f $HOME/.fortress_cd
38 if cd $target_dir 2>/dev/null
39 echo "fortress: changed directory to "(pwd)
40 else
41 echo "fortress: failed to change directory to $target_dir" >&2
42 end
43 end
44 end