From 6cb26020c099c13d770121d346b4685f445f96d6 Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Fri, 7 Jan 2022 19:14:21 +0100
Subject: [PATCH] Add simple project launcher

---
 modules/default.nix                 |  1 +
 modules/desktop/default.nix         |  2 ++
 modules/project-manager/default.nix | 26 ++++++++++++++++++++++++++
 modules/project-manager/launcher    | 11 +++++++++++
 modules/sway/config.nix             | 11 ++++++-----
 5 files changed, 46 insertions(+), 5 deletions(-)
 create mode 100644 modules/project-manager/default.nix
 create mode 100755 modules/project-manager/launcher

diff --git a/modules/default.nix b/modules/default.nix
index 3a3096c..d89a940 100644
--- a/modules/default.nix
+++ b/modules/default.nix
@@ -6,6 +6,7 @@
     ./desktop
     ./desktop/launcher.nix
     ./sway
+    ./project-manager
     ./dotfiles.nix
     ./he-dns.nix
     ./kea.nix
diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix
index 0983e23..042bce1 100644
--- a/modules/desktop/default.nix
+++ b/modules/desktop/default.nix
@@ -21,6 +21,8 @@ in
   config = mkIf cfg.enable {
     queezle.terminal.enable = true;
 
+    queezle.project-manager.enable = true;
+
     home-manager.users."${cfg.user}".xdg = {
       configFile."foot/foot.ini" = {
         source = import ./config/foot.nix inputs;
diff --git a/modules/project-manager/default.nix b/modules/project-manager/default.nix
new file mode 100644
index 0000000..1de8f28
--- /dev/null
+++ b/modules/project-manager/default.nix
@@ -0,0 +1,26 @@
+{ lib, pkgs, ... }:
+with lib;
+
+let
+  project-launcher = pkgs.writeScriptBin "project-launcher" ''
+    #!/usr/bin/env zsh
+
+    set -euo pipefail
+
+    projects=$(jq --raw-output '.projects | keys | .[]' ~/dev/projects.json)
+
+    project=$(dmenu <<<$projects)
+
+    projectpath=$(jq --raw-output ".projects[\"$project\"].path" ~/dev/projects.json)
+
+    terminal --working-directory $projectpath
+  '';
+in {
+  options = {
+    queezle.project-manager.enable = mkEnableOption "queezles project manager";
+  };
+
+  config = {
+    environment.systemPackages = [ project-launcher ];
+  };
+}
diff --git a/modules/project-manager/launcher b/modules/project-manager/launcher
new file mode 100755
index 0000000..ff3b571
--- /dev/null
+++ b/modules/project-manager/launcher
@@ -0,0 +1,11 @@
+#!/usr/bin/env zsh
+
+set -euo pipefail
+
+projects=$(jq --raw-output '.projects | keys | .[]' ~/dev/projects.json)
+
+project=$(dmenu <<<$projects)
+
+projectpath=$(jq --raw-output ".projects[\"$project\"].path" ~/dev/projects.json)
+
+terminal --working-directory $projectpath
diff --git a/modules/sway/config.nix b/modules/sway/config.nix
index c6608ee..951e38a 100644
--- a/modules/sway/config.nix
+++ b/modules/sway/config.nix
@@ -235,18 +235,19 @@ bindsym $mod+Alt+Return exec $terminal2
 
 # start program launcher
 bindsym $mod+Tab exec launcher
-#bindsym $mod+Tab exec rofi -show drun
-#bindsym $mod+Mod1+Tab exec rofi -show run
+
+# start project launcher
+bindsym $mod+p exec project-launcher
 
 # start an edi shell
 #bindsym $mod+o exec cool-retro-term --fullscreen --profile "Default Amber" -e run/edi/edish/edish
-bindsym $mod+o exec cool-retro-term --fullscreen --profile "Default Amber" -e ssh edi
+#bindsym $mod+o exec cool-retro-term --fullscreen --profile "Default Amber" -e ssh edi
 
 # start a python terminal
-bindsym $mod+p exec $terminal python
+#bindsym $mod+p exec $terminal python
 
 # start an haskel ghci terminal (TODO)
-bindsym $mod+Shift+p exec $terminal stack ghci --verbosity warning
+#bindsym $mod+Shift+p exec $terminal stack ghci --verbosity warning
 
 # start a browser
 bindsym $mod+b exec "chromium --enable-features=WebRTCPipeWireCapturer --force-dark-mode"
-- 
GitLab