blob: fa4e1df827b485b048d915ecb1ced97beca7160f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
#!/usr/bin/env fish
if not set --query HOME
echo "error: no HOME"
exit 1
end
set --function channel_root $HOME/.nix-defexpr/channels
set --function user_nixpkgs $HOME/.nixpkgs
if set --query XDG_CONFIG_HOME
set --function hm_config_dir $XDG_CONFIG_HOME/home-manager
else
set --function hm_config_dir $HOME/.config/home-manager
end
for i in 1
if test ! -d $user_nixpkgs
echo "user nixpkgs folder $user_nixpkgs does not exist, creating it"
mkdir -p $user_nixpkgs
end
if test -L $hm_config_dir -a (path resolve $hm_config_dir) = (path resolve (status basename))
if test y = (read --nchars=1 --prompt-str="$hm_config_dir already exists as a symlink to the current directory. Remove it [yN]? ")
unlink $hm_config_dir
end
end
if test ! -d $hm_config_dir
echo "user home-manager configuration folder $hm_config_dir does not exist, creating it"
mkdir -p $hm_config_dir
end
if test ! -e $channel_root
if test -L $channel_root
# broken symlink
rm $channel_root
end
echo "channel root $channel_root does not exist, creating it"
mkdir -p $channel_root
else
if test ! -d $channel_root
echo "error: $channel_root is not a directory"
else if test -L $channel_root
echo "error: $channel_root is a symlink, please remove it"
else if path is --invert --perm write $channel_root
echo "error: $channel_root is not writable; might be a symlink"
else if path is --invert --type link $channel_root/*
for p in (path filter --invert --type link $channel_root/*)
# might be a broken symlink
if test -L $p -a ! -e $p
rm $p
else
echo "error: channel $p is not a broken symlink, don't know what to do with it"
end
end
# check again and fail if there are still unknown files
if path is --invert --type link $channel_root/*
echo "error: non-link(s) in $channel_root"
path filter --invert --type link $channel_root/*
else
continue
end
else
continue # with script
end
exit 1
end
end
set --function current_script_name (status basename)
switch $current_script_name
case darwin-rebuild
set --local darwin_config_source (path resolve (status dirname)/../system/$hostname.nix)
set --local darwin_config_target $user_nixpkgs/darwin-configuration.nix
if test ! -e $darwin_config_target
ln -s $darwin_config_source $darwin_config_target
end
set --append argv -I darwin-config=$darwin_config_source
case nixos-rebuild
set --local nixos_config_source (path resolve (status dirname)/system/$hostname.nix)
set --local nixos_config_target $user_nixpkgs/configuration.nix
if test ! -e $nixos_config_target
ln -s $nixos_config_source $nixos_config_target
end
if ! fish_is_root_user
set --append argv --use-remote-sudo
end
set --append argv -I nixos-config=$nixos_config_source
case home-manager
set --local hm_config_source (path resolve (status dirname)/../user/$hostname.nix)
set --local hm_config_target $hm_config_dir/home.nix
if test ! -e $hm_config_target
ln -s $hm_config_source $hm_config_target
end
set --export HOME_MANAGER_CONFIG $hm_config_source
end
set --function old_channels (path basename $channel_root/*)
for np in $NIX_PATH
echo $np | read --function --delimiter "=" channel new_src_rel
set --local new_src (path resolve $new_src_rel)
if test $channel = darwin-config
continue
end
if set --local i (contains --index $channel $old_channels)
set --erase old_channels[$i]
end
set --local target $channel_root/$channel
set --local src (path resolve $target)
if test -e $src
if test $src = $new_src
# no need to re-link it
continue
else
unlink $target
end
end
ln -s $new_src $target
end
for old in $channel_root/$old_channels
rm $old
end
set --function i (contains --index (status dirname) $PATH)
if test -n $i
set --erase PATH[$i]
end
set --function cmd $current_script_name $argv
if set --query IN_NIX_SHELL
eval $cmd
else
nix-shell --run "$cmd"
end
|