From 372ee5985abdb43b4e2caff4ecc241a833766c2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Sun, 10 Sep 2023 15:07:55 +0200 Subject: [PATCH] refactor: small changes --- modules/profiles/base.nix | 66 +++++++++++++++++++------------- modules/programs/fish.nix | 9 +++-- modules/services/openconnect.nix | 2 +- overlays/builders.nix | 63 +++++++++++++++++++----------- 4 files changed, 86 insertions(+), 54 deletions(-) diff --git a/modules/profiles/base.nix b/modules/profiles/base.nix index aefaac4..b22c622 100644 --- a/modules/profiles/base.nix +++ b/modules/profiles/base.nix @@ -34,42 +34,54 @@ let which-nix = pkgs.writeFishApplication { name = "which-nix"; - runtimeInputs = with pkgs; [ which coreutils-full ]; + runtimeInputs = with pkgs; [ which coreutils-full procps ]; text = /* fish */ '' - readlink -f (which $argv) + function recurse -a path; + if not test -f "$path" + return + end + + echo $path + if test -L $path + recurse (readlink $path) + end + end + + for arg in $argv + recurse (which $arg) + end ''; completions = /* fish */ '' complete -c which-nix -fa '(__fish_complete_command)' ''; }; - gi = pkgs.writeFishApplication - { - name = "gi"; - runtimeInputs = with pkgs; [ fzf gum curl ]; - text = /* fish */ '' - set url https://www.gitignore.io/api + gi = pkgs.writeFishApplication { + name = "gi"; + runtimeInputs = with pkgs; [ fzf gum curl ]; + text = /* fish */ '' + set url https://www.gitignore.io/api - if test (count $argv) -eq 0 - set choice ( curl -sL $url/list \ - | string split "," \ - | fzf -m \ - | string join "," ) - else - set choice (string join "," $argv[1..]) - end + if test (count $argv) -eq 0 + set choice ( curl -sL $url/list \ + | string split "," \ + | fzf -m \ + | string join "," ) + else + set choice (string join "," $argv[1..]) + end - if gum confirm "Overwrite current .gitignore?" - curl -sL $url/$choice > .gitignore - else - curl -sL $url/$choice >> .gitignore - end - ''; - completions = /* fish */ '' - set args (curl -sL https://www.gitignore.io/api/list | string split ",") - complete -c gi -fa "$args" - ''; - }; + if gum confirm "Overwrite current .gitignore?" + curl -sL $url/$choice > .gitignore + else + curl -sL $url/$choice >> .gitignore + end + ''; + completions = /* fish */ '' + set args (curl -sL https://www.gitignore.io/api/list | string split ",") + complete -c gi -fa "$args" + ''; + }; in { users.users.moritz = { diff --git a/modules/programs/fish.nix b/modules/programs/fish.nix index de683ab..f6e8c92 100644 --- a/modules/programs/fish.nix +++ b/modules/programs/fish.nix @@ -8,9 +8,12 @@ with lib; let cfg = config.my.programs.fish; shellConfig = config.my.shell; - exportVariables = - lib.mapAttrsToList (n: v: ''set -x ${n} "${v}"'') shellConfig.variables; - exportedVariables = lib.concatStringsSep "\n" exportVariables; + exportedVariables = + let + exportVariables = + lib.mapAttrsToList (n: v: ''set -x ${n} "${v}"'') shellConfig.variables; + in + lib.concatStringsSep "\n" exportVariables; in { options.my.programs.fish.enable = mkEnableOption "fish"; diff --git a/modules/services/openconnect.nix b/modules/services/openconnect.nix index 87c37a1..6eddd64 100644 --- a/modules/services/openconnect.nix +++ b/modules/services/openconnect.nix @@ -17,7 +17,7 @@ in gateway = "vpn.uni-leipzig.de"; protocol = "anyconnect"; user = "mb18cele@uni-leipzig.de"; - # NOTE file content as follows: + # NOTE: file content as follows: # # "1-Standard-Uni" or "2-Spezial-Alles" # Explanation: diff --git a/overlays/builders.nix b/overlays/builders.nix index 813b7d3..359a4af 100644 --- a/overlays/builders.nix +++ b/overlays/builders.nix @@ -2,7 +2,33 @@ _: final: _: with final.lib; -{ +rec { + fishFile = + { name + , destination + , content + , checkPhase ? null + }: + final.writeTextFile { + inherit name destination; + executable = true; + allowSubstitutes = true; + preferLocalBuild = false; + text = '' + #!${getExe final.fish} + + ${content} + ''; + + checkPhase = + if checkPhase == null then '' + runHook preCheck + ${getExe final.fish} -n "$target" + runHook postCheck + '' + else checkPhase; + }; + writeFishApplication = { name , text @@ -11,30 +37,21 @@ with final.lib; , checkPhase ? null }: let - fishFile = destination: content: final.writeTextFile { - inherit name destination; - executable = true; - allowSubstitutes = true; - preferLocalBuild = false; - text = '' - #!${getExe final.fish} + runtimeHeader = optionalString (runtimeInputs != [ ]) + ''export PATH="${makeBinPath runtimeInputs}:$PATH"''; - ${optionalString (runtimeInputs != [ ]) ''export PATH="${makeBinPath runtimeInputs}:$PATH"''} - - ${content} - ''; - - checkPhase = - if checkPhase == null then '' - runHook preCheck - ${getExe final.fish} -n "$target" - runHook postCheck - '' - else checkPhase; + script = fishFile { + inherit checkPhase; + name = "${name}_script"; + destination = "/bin/${name}"; + content = concatLines [ runtimeHeader text ]; + }; + completions_file = fishFile { + inherit checkPhase; + name = "${name}_completions"; + destination = "/share/fish/vendor_completions.d/${name}.fish"; + content = concatLines [ runtimeHeader completions ]; }; - - script = fishFile "/bin/${name}" text; - completions_file = fishFile "/share/fish/vendor_completions.d/${name}.fish" completions; in final.symlinkJoin { inherit name;