From 63550987b45107b490d84be35f4e9bc711d755de Mon Sep 17 00:00:00 2001 From: jri Date: Thu, 7 Mar 2024 13:06:29 +0100 Subject: [PATCH] Add script to automatically link nix applications to ~/.local/share/applications --- content/config/home-manager/home.nix.tmpl | 1 + hooks/home-manager.nu | 38 +++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/content/config/home-manager/home.nix.tmpl b/content/config/home-manager/home.nix.tmpl index 301507c..8d12438 100644 --- a/content/config/home-manager/home.nix.tmpl +++ b/content/config/home-manager/home.nix.tmpl @@ -25,6 +25,7 @@ librewolf spotify + # other dev tools insomnia diff --git a/hooks/home-manager.nu b/hooks/home-manager.nu index fdfe5b8..6364482 100644 --- a/hooks/home-manager.nu +++ b/hooks/home-manager.nu @@ -1,4 +1,8 @@ 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 @@ -16,14 +20,48 @@ def after_apply_all [] { 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?(?[^\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)" } + ) +}