#!/bin/env fish function isConfigured -S set -q CONFIG_NAME end function selectProfile -S -a result source "$(status dirname)/../../../lib/modules/partition/select.fish" set -l file (mktemp) set -l header NAME set -l profiles getProfiles | jq ".[]" --raw-output0 | string split0 | while read profile set -a profiles "$profile" end select "$header" "$file" \ "Please choose a profile" \ "No profiles specified" \ "$(string collect $profiles)" set -g "$result" (cat "$file") rm "$file" end function getProfiles -S source "$(status dirname)/eval-flake.fish" evalFlake "" "" --apply "builtins.attrNames" --json end function getConfig -S -a property source "$(status dirname)/eval-flake.fish" evalFlake "$CONFIG_NAME" "$property" $argv[2..] end function getOSConfigRoot echo "valhalla.linux" end function getOSConfig -S -a property getConfig "$(getOSConfigRoot).$property" $argv[2..] end function getProgramConfig -S -a name user set -l option "programs.$name" if [ -z "$user" ] getOSConfig "$option" $argv[3..] --fallback "{}" else getUserConfig "$user" "$option" $argv[3..] --fallback "{}" end end function getAttributes -S -a property getConfig "$property" --apply "builtins.attrNames" --json end function getUsers -S getAttributes "$(getOSConfigRoot).users" end function getUserConfig -S -a name property getOSConfig "users.$name.$property" $argv[3..] end function isSet -S -a property not test "$(getConfig "$property" --json)" = null end function isOSSet -S -a property isSet "$(getOSConfigRoot).$property" end function isUserSet -S -a name property isOSSet "users.$name.$property" end function isEnabled -S -a property getConfig "$property" --json | jq --exit-status >/dev/null end function isProgramEnabled -S -a name user getProgramConfig "$name" "$user" --json 2>/dev/null | jq --exit-status ".enable" >/dev/null end function isOSEnabled -S -a property isEnabled "$(getOSConfigRoot).$property" end function collectionActive -S -a name isOSEnabled "software.$name" end