main @ 240 LINES
[ HISTORY ] [ UP ]
┌─ NIX ──────────────────────────────────────────────────────────────────────┐
│ { │
│ lib, │
│ config, │
│ pkgs, │
│ osConfig, │
│ ... │
│ }: let │
│ inherit (lib) mkIf; │
│ inherit (osConfig.ooknet.console) multiplexer; │
│ inherit (config.ooknet) binds; │
│ zellijmenu = pkgs.writeShellApplication { │
│ name = "zellijmenu"; │
│ runtimeInputs = with pkgs; [zellij coreutils rofi]; │
│ text = │
│ /* │
│ bash │
│ */ │
│ '' │
│ set -e │
│ │
│ type="" │
│ type_dir="" │
│ project_name="" │
│ project_dir="" │
│ session_name="" │
│ layout="" │
│ spawn_terminal=0 │
│ │
│ while [[ "$#" -gt 0 ]]; do │
│ case $1 in │
│ -n) spawn_terminal=1 ;; │
│ *) │
│ echo "Unknown parameter: $1" >&2 │
│ exit 1 │
│ ;; │
│ esac │
│ shift │
│ done │
│ │
│ rofi_cmd() { │
│ MSG=$1 │
│ rofi -dmenu -i -mesg "$MSG" │
│ } │
│ │
│ zellij_cmd() { │
│ if [[ "$spawn_terminal" -eq 1 ]]; then │
│ ${binds.terminalLaunch} zellij "$@" │
│ else │
│ zellij "$@" │
│ fi │
│ } │
│ │
│ session_manager() { │
│ session_list() { │
│ zellij ls -s | tr ' ' '\n' │
│ } │
│ │
│ layout_menu() { │
│ layout_list=$(find ~/.config/zellij/layouts -name "*.kdl" | sed 's|.*/ │
│ ||; s/\.kdl$//' | tr ' ' '\n') │
│ echo -e "$layout_list" | rofi_cmd "Select layout for $session_name:" │
│ } │
│ │
│ session_menu() { │
│ echo -e "$(session_list)" | rofi_cmd "Session:" │
│ } │
│ │
│ session_select() { │
│ session_name=$(session_menu) │
│ if [[ -z "$session_name" ]]; then │
│ echo "Nothing selected." │
│ exit 0 │
│ fi │
│ │
│ if session_list | grep -qx "$session_name"; then │
│ session_action="select" │
│ else │
│ session_action="create" │
│ fi │
│ } │
│ │
│ selection_menu() { │
│ echo -e "Attach\nDelete\nBack" | rofi_cmd "$session_name action:" │
│ } │
│ │
│ while true; do │
│ session_select │
│ case $session_action in │
│ "create") │
│ layout="$(layout_menu)" │
│ if [ -z "$layout" ]; then │
│ echo "No layout given" │
│ continue │
│ fi │
│ zellij_cmd --layout "$layout" attach -c "$session_name" │
│ break │
│ ;; │
│ "select") │
│ selection=$(selection_menu) │
│ case $selection in │
│ "Attach") │
│ zellij_cmd attach "$session_name" │
│ break │
│ ;; │
│ "Delete") zellij delete-session --force "$session_name" ;; │
│ "Back") echo "Going back." ;; │
│ *) echo "Going Back." ;; │
│ esac │
│ ;; │
│ *) echo "Going Back" ;; │
│ esac │
│ done │
│ } │
│ │
│ project_manager() { │
│ get_project_type() { │
│ while true; do │
│ type=$(echo -e "script\nnix" | rofi_cmd "Select project type:") │
│ case "$type" in │
│ script) │
│ type_dir="$SCRIPTS" │
│ break │
│ ;; │
│ nix) │
│ type_dir="$NIX_DIR" │
│ break │
│ ;; │
│ *) │
│ echo "Invalid selection, try again." │
│ ;; │
│ esac │
│ done │
│ } │
│ │
│ get_project_name() { │
│ while true; do │
│ project_name=$(rofi_cmd "Enter project name:") │
│ if [ -z "$project_name" ]; then │
│ echo "No name provided, try again." │
│ elif [ -d "$type_dir/$project_name" ]; then │
│ echo "Project already exists, try again." │
│ else │
│ project_dir="$type_dir/$project_name" │
│ break │
│ fi │
│ done │
│ } │
│ │
│ get_session_name() { │
│ session_name="$project_name" │
│ if zellij ls | grep -q "^$session_name$"; then │
│ session_name=$(rofi_cmd "Session name '$project_name' in use, enter │
│ a new session name:") │
│ if [ -z "$session_name" ]; then │
│ echo "No session name entered, exiting." │
│ exit 1 │
│ fi │
│ fi │
│ } │
│ │
│ get_layout() { │
│ case "$type" in │
│ script) │
│ layout="script" │
│ ;; │
│ nix) │
│ layout="nix" │
│ ;; │
│ *) │
│ echo "Unknown project type, using default layout." │
│ layout="base" │
│ ;; │
│ esac │
│ } │
│ │
│ select_project() { │
│ project_name=$(find "$type_dir" -maxdepth 1 -mindepth 1 -type d ! -nam │
│ e .git -exec basename {} \; | rofi_cmd "Select project:") │
│ project_dir="$type_dir/$project_name" │
│ │
│ cd "$project_dir" || return 1 │
│ get_session_name │
│ get_layout │
│ zellij_cmd -s "$session_name" --layout "$layout" │
│ } │
│ │
│ create_and_start_project() { │
│ mkdir -p "$project_dir" │
│ cd "$project_dir" || return 1 │
│ │
│ case "$type" in │
│ script) │
│ echo -e "#!/usr/bin/env bash\necho 'hello world'" >"$project_name.sh │
│ " │
│ chmod +x "$project_name.sh" │
│ ;; │
│ nix) │
│ echo "Creating Nix project..." │
│ # still need to implement │
│ ;; │
│ *) │
│ echo "Unknown project type." │
│ return 1 │
│ ;; │
│ esac │
│ │
│ get_session_name │
│ get_layout │
│ zellij_cmd -s "$session_name" --layout "$layout" │
│ } │
│ project_action=$(echo -e "Create Project\nSelect Project" | rofi_cmd "Pr │
│ oject action:") │
│ case "$project_action" in │
│ "Create Project") │
│ get_project_type │
│ get_project_name │
│ create_and_start_project │
│ ;; │
│ "Select Project") │
│ get_project_type │
│ select_project │
│ ;; │
│ esac │
│ │
│ } │
│ │
│ main() { │
│ main_action=$(echo -e "Projects\nSessions" | rofi_cmd "Choose action:") │
│ case "$main_action" in │
│ "Projects") project_manager ;; │
│ "Sessions") session_manager ;; │
│ *) echo "Invalid option, exiting." ;; │
│ esac │
│ } │
│ │
│ main │
│ ''; │
│ }; │
│ in { │
│ config = mkIf (multiplexer == "zellij") { │
│ home.packages = [zellijmenu]; │
│ ooknet.binds.zellijMenu = "zellijmenu -n"; │
│ }; │
│ } │
└────────────────────────────────────────────────────────────────────────────────────┘
┌─ NIX ────────────────────────────────┐
│ { │
│ lib, │
│ config, │
│ pkgs, │
│ osConfig, │
│ ... │
│ }: let │
│ inherit (lib) mkIf; │
│ inherit (osConfig.ooknet.console) multiple │
│ xer; │
│ inherit (config.ooknet) binds; │
│ zellijmenu = pkgs.writeShellApplication { │
│ name = "zellijmenu"; │
│ runtimeInputs = with pkgs; [zellij coreu │
│ tils rofi]; │
│ text = │
│ /* │
│ bash │
│ */ │
│ '' │
│ set -e │
│ │
│ type="" │
│ type_dir="" │
│ project_name="" │
│ project_dir="" │
│ session_name="" │
│ layout="" │
│ spawn_terminal=0 │
│ │
│ while [[ "$#" -gt 0 ]]; do │
│ case $1 in │
│ -n) spawn_terminal=1 ;; │
│ *) │
│ echo "Unknown parameter: $1" >&2 │
│ exit 1 │
│ ;; │
│ esac │
│ shift │
│ done │
│ │
│ rofi_cmd() { │
│ MSG=$1 │
│ rofi -dmenu -i -mesg "$MSG" │
│ } │
│ │
│ zellij_cmd() { │
│ if [[ "$spawn_terminal" -eq 1 ]]; │
│ then │
│ ${binds.terminalLaunch} zellij " │
│ $@" │
│ else │
│ zellij "$@" │
│ fi │
│ } │
│ │
│ session_manager() { │
│ session_list() { │
│ zellij ls -s | tr ' ' '\n' │
│ } │
│ │
│ layout_menu() { │
│ layout_list=$(find ~/.config/zel │
│ lij/layouts -name "*.kdl" | sed 's|.*/||; s/ │
│ \.kdl$//' | tr ' ' '\n') │
│ echo -e "$layout_list" | rofi_cm │
│ d "Select layout for $session_name:" │
│ } │
│ │
│ session_menu() { │
│ echo -e "$(session_list)" | rofi │
│ _cmd "Session:" │
│ } │
│ │
│ session_select() { │
│ session_name=$(session_menu) │
│ if [[ -z "$session_name" ]]; the │
│ n │
│ echo "Nothing selected." │
│ exit 0 │
│ fi │
│ │
│ if session_list | grep -qx "$ses │
│ sion_name"; then │
│ session_action="select" │
│ else │
│ session_action="create" │
│ fi │
│ } │
│ │
│ selection_menu() { │
│ echo -e "Attach\nDelete\nBack" | │
│ rofi_cmd "$session_name action:" │
│ } │
│ │
│ while true; do │
│ session_select │
│ case $session_action in │
│ "create") │
│ layout="$(layout_menu)" │
│ if [ -z "$layout" ]; then │
│ echo "No layout given" │
│ continue │
│ fi │
│ zellij_cmd --layout "$layout" │
│ attach -c "$session_name" │
│ break │
│ ;; │
│ "select") │
│ selection=$(selection_menu) │
│ case $selection in │
│ "Attach") │
│ zellij_cmd attach "$session_ │
│ name" │
│ break │
│ ;; │
│ "Delete") zellij delete-sessio │
│ n --force "$session_name" ;; │
│ "Back") echo "Going back." ;; │
│ *) echo "Going Back." ;; │
│ esac │
│ ;; │
│ *) echo "Going Back" ;; │
│ esac │
│ done │
│ } │
│ │
│ project_manager() { │
│ get_project_type() { │
│ while true; do │
│ type=$(echo -e "script\nnix" | │
│ rofi_cmd "Select project type:") │
│ case "$type" in │
│ script) │
│ type_dir="$SCRIPTS" │
│ break │
│ ;; │
│ nix) │
│ type_dir="$NIX_DIR" │
│ break │
│ ;; │
│ *) │
│ echo "Invalid selection, try │
│ again." │
│ ;; │
│ esac │
│ done │
│ } │
│ │
│ get_project_name() { │
│ while true; do │
│ project_name=$(rofi_cmd "Enter │
│ project name:") │
│ if [ -z "$project_name" ]; the │
│ n │
│ echo "No name provided, try │
│ again." │
│ elif [ -d "$type_dir/$project_ │
│ name" ]; then │
│ echo "Project already exists │
│ , try again." │
│ else │
│ project_dir="$type_dir/$proj │
│ ect_name" │
│ break │
│ fi │
│ done │
│ } │
│ │
│ get_session_name() { │
│ session_name="$project_name" │
│ if zellij ls | grep -q "^$sessio │
│ n_name$"; then │
│ session_name=$(rofi_cmd "Sessi │
│ on name '$project_name' in use, enter a new │
│ session name:") │
│ if [ -z "$session_name" ]; the │
│ n │
│ echo "No session name entere │
│ d, exiting." │
│ exit 1 │
│ fi │
│ fi │
│ } │
│ │
│ get_layout() { │
│ case "$type" in │
│ script) │
│ layout="script" │
│ ;; │
│ nix) │
│ layout="nix" │
│ ;; │
│ *) │
│ echo "Unknown project type, us │
│ ing default layout." │
│ layout="base" │
│ ;; │
│ esac │
│ } │
│ │
│ select_project() { │
│ project_name=$(find "$type_dir" │
│ -maxdepth 1 -mindepth 1 -type d ! -name .git │
│ -exec basename {} \; | rofi_cmd "Select pro │
│ ject:") │
│ project_dir="$type_dir/$project_ │
│ name" │
│ │
│ cd "$project_dir" || return 1 │
│ get_session_name │
│ get_layout │
│ zellij_cmd -s "$session_name" -- │
│ layout "$layout" │
│ } │
│ │
│ create_and_start_project() { │
│ mkdir -p "$project_dir" │
│ cd "$project_dir" || return 1 │
│ │
│ case "$type" in │
│ script) │
│ echo -e "#!/usr/bin/env bash\n │
│ echo 'hello world'" >"$project_name.sh" │
│ chmod +x "$project_name.sh" │
│ ;; │
│ nix) │
│ echo "Creating Nix project..." │
│ # still need to implement │
│ ;; │
│ *) │
│ echo "Unknown project type." │
│ return 1 │
│ ;; │
│ esac │
│ │
│ get_session_name │
│ get_layout │
│ zellij_cmd -s "$session_name" -- │
│ layout "$layout" │
│ } │
│ project_action=$(echo -e "Create P │
│ roject\nSelect Project" | rofi_cmd "Project │
│ action:") │
│ case "$project_action" in │
│ "Create Project") │
│ get_project_type │
│ get_project_name │
│ create_and_start_project │
│ ;; │
│ "Select Project") │
│ get_project_type │
│ select_project │
│ ;; │
│ esac │
│ │
│ } │
│ │
│ main() { │
│ main_action=$(echo -e "Projects\nS │
│ essions" | rofi_cmd "Choose action:") │
│ case "$main_action" in │
│ "Projects") project_manager ;; │
│ "Sessions") session_manager ;; │
│ *) echo "Invalid option, exiting." │
│ ;; │
│ esac │
│ } │
│ │
│ main │
│ ''; │
│ }; │
│ in { │
│ config = mkIf (multiplexer == "zellij") { │
│ home.packages = [zellijmenu]; │
│ ooknet.binds.zellijMenu = "zellijmenu -n │
│ "; │
│ }; │
│ } │
└──────────────────────────────────────────────┘
──────────────────────────────────────────────────────────────────────────────────────
OOKNET
────────────────────────────────────────────────
OOKNET