Ver Fonte

fish function for copying flakes

Johan Rong há 1 mês atrás
pai
commit
89d37a9f71
3 ficheiros alterados com 148 adições e 6 exclusões
  1. 26 0
      dev-flakes/js/monoweb.nix
  2. 39 1
      flake.lock
  3. 83 5
      home/modules/configs/fish/dev-flakes.nix

+ 26 - 0
dev-flakes/js/monoweb.nix

@@ -0,0 +1,26 @@
+{
+  description = "Development environment for Online Dotkom monoweb";
+
+  inputs = {
+    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+    flake-utils.url = "github:numtide/flake-utils";
+  };
+
+  outputs = { self, nixpkgs, flake-utils }:
+    flake-utils.lib.eachDefaultSystem (system:
+      let
+        pkgs = nixpkgs.legacyPackages.${system};
+      in
+      {
+        devShells.default = pkgs.mkShell {
+          buildInputs = with pkgs; [
+            nodejs_22
+            corepack
+            pnpm
+            doppler
+            docker
+            docker-compose
+          ];
+        };
+      });
+}

+ 39 - 1
flake.lock

@@ -1,5 +1,26 @@
 {
   "nodes": {
+    "dank-greeter": {
+      "inputs": {
+        "dank-qml-common": "dank-qml-common",
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1788455394,
+        "narHash": "sha256-Qjpv8Oq255lsCsm/rCFFr73W2euvw2HTbNnZ2xnf2jk=",
+        "owner": "AvengeMedia",
+        "repo": "dank-greeter",
+        "rev": "54e41b9d97938ca055bf090ab08e2684b5030989",
+        "type": "github"
+      },
+      "original": {
+        "owner": "AvengeMedia",
+        "repo": "dank-greeter",
+        "type": "github"
+      }
+    },
     "dank-qml-common": {
       "flake": false,
       "locked": {
@@ -16,9 +37,25 @@
         "type": "github"
       }
     },
+    "dank-qml-common_2": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1788376015,
+        "narHash": "sha256-/tT8rTznLADndTwLBzdgzzgfJH1ZhYQibYo5v/F8U+U=",
+        "owner": "AvengeMedia",
+        "repo": "dank-qml-common",
+        "rev": "26396ce432d6c71c3f5367438f96f4a8d667e160",
+        "type": "github"
+      },
+      "original": {
+        "owner": "AvengeMedia",
+        "repo": "dank-qml-common",
+        "type": "github"
+      }
+    },
     "dms": {
       "inputs": {
-        "dank-qml-common": "dank-qml-common",
+        "dank-qml-common": "dank-qml-common_2",
         "flake-compat": "flake-compat",
         "nixpkgs": [
           "nixpkgs"
@@ -110,6 +147,7 @@
     },
     "root": {
       "inputs": {
+        "dank-greeter": "dank-greeter",
         "dms": "dms",
         "home-manager": "home-manager",
         "nix-flatpak": "nix-flatpak",

+ 83 - 5
home/modules/configs/fish/dev-flakes.nix

@@ -1,14 +1,92 @@
 { pkgs, ... }: {
   programs.fish = {
     functions = {
-      devflake = {
+      flakeme = {
         body = ''
           set -l flake_dir "$HOME/nix-dots/dev-flakes"
-          echo $flake_dir
-          echo $tool, $name
+
+          argparse 'l/list' -- $argv
+          or return 1
+
+          if set -q _flag_list
+            if command -q tree
+              tree --noreport -P '*.nix' --prune "$flake_dir"
+            else
+              for dir in "$flake_dir"/*/
+                if test -d "$dir"
+                  echo (basename "$dir")"/"
+                  for file in "$dir"*.nix
+                    if test -f "$file"
+                      echo "  └── "(basename "$file")
+                    end
+                  end
+                end
+              end
+            end
+            return 0
+          end
+
+          set -l tool $argv[1]
+          set -l name $argv[2]
+
+          if test -z "$tool"
+            echo "Error: No tool specified."
+            return 1
+          end
+
+          set -l target_dir "$flake_dir/$tool"
+
+          if not test -d "$target_dir"
+            echo "Error: Directory $target_dir does not exist."
+            return 1
+          end
+
+          set -l target_file ""
+          if test -n "$name"
+            set target_file "$target_dir/$name.nix"
+          else
+            set target_file "$target_dir/default.nix"
+          end
+
+          if not test -f "$target_file"
+            echo "Error: File $target_file does not exist."
+            return 1
+          end
+
+          echo "Selected: $target_file"
+          cp $target_file ./flake.nix
         '';
-        argumentNames = [ "tool" "name" ];
       };
     };
+
+    completions = {
+      flakeme = ''
+        set -l flake_dir "$HOME/nix-dots/dev-flakes"
+
+        complete -c flakeme -f
+
+        complete -c flakeme -s l -l list -d "List available dev flakes"
+
+        complete -c flakeme -n '__fish_is_nth_token 1' -a "(
+          if test -d $flake_dir
+            for dir in $flake_dir/*/
+              basename \$dir
+            end
+          end
+        )" -d "Tool directory"
+
+        complete -c flakeme -n '__fish_is_nth_token 2' -a "(
+          set -l cmd (commandline -opc)
+          set -l tool \$cmd[2]
+          if test -n \"\$tool\" -a -d $flake_dir/\$tool
+            for file in $flake_dir/\$tool/*.nix
+              if test -f \$file
+                basename \$file .nix
+              end
+            end
+          end
+        )" -d "Flake template name"
+      '';
+    };
   };
-}
+}