You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
1.6 KiB
Plaintext

def after_apply_all [] {
if $env.SILO_HM_CALLED? != null {
return;
}
$env.SILO_HM_CALLED = true
if not ('~/.nix-profile/bin/home-manager' | path exists) {
print $"(ansi red)home-manager is not installed(ansi reset)"
return
}
if (ha-chksum) == $env.SILO_HA_CHKSUM? {
print $"(ansi green)home-manager configuration unchanged(ansi reset)"
return;
}
print "Updating with home-manager"
( home-manager switch )
print "Expiring old home manager configurations"
( home-manager expire-generations -1 days )
print "Cleaning nix store"
( nix-store --gc )
print "Linking applications"
link-applications
print "Clearing invalid application links"
clear-invalid-links
print "Applying silo config after package install"
( silo apply )
ignore
}
def --env before_apply_all [] {
if $env.SILO_HM_CALLED? != null {
return;
}
$env.SILO_HA_CHKSUM = (ha-chksum)
$env.PATH = ($env.PATH | append $"($env.HOME)/.nix-profile/bin")
ignore
}
def ha-chksum [] {
shasum ~/.config/home-manager/home.nix
}
def link-applications [] {
( glob ~/.nix-profile/share/applications/*.desktop
| par-each { try { ln -s $in ~/.local/share/applications/; print $"Linked ($in)" } } )
}
def clear-invalid-links [] {
( glob /home/jri/.local/share/applications/*.desktop
| each { ls -l $in }
| flatten
| where target? != null
| par-each {|entry| get target
| open $in
| parse -r '\nTryExec\s?=\s?(?<bin>[^\n]+)'
| get -i 0
| default {}
| merge $entry }
| where bin? != null
| where {|e| which $e.bin | is-empty }
| each {|e| rm $e.name; print $"Cleared ($e.name)" }
)
}