From 97d8c174367e09497132f1b62834751a8d9da26a Mon Sep 17 00:00:00 2001 From: servius Date: Wed, 4 Feb 2026 22:37:11 +0530 Subject: [PATCH] feat: auto generate remmina desktop entries --- AGENTS.md | 1 + home/programs/cargo.nix | 40 +++++++++++++------------ home/services/remmina.nix | 63 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 84 insertions(+), 20 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index d0757646..b3560400 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -133,6 +133,7 @@ sessionVariables.BROWSER = if device.isDarwin then "open" else "xdg-open"; 2. **DO NOT add shell scripts** - use Nix expressions 3. **All configurations must use Nix expressions** when possible 4. **Follow existing naming conventions** and directory structure +5. Create custom application entries in `~/.local/share/applications/{appname}.desktop` ## Secrets Management diff --git a/home/programs/cargo.nix b/home/programs/cargo.nix index 5508b0a8..370fc3c9 100644 --- a/home/programs/cargo.nix +++ b/home/programs/cargo.nix @@ -3,25 +3,27 @@ device, cratesNix, ... -}: -lib.mkIf (!device.isServer) { - home.file.".cargo/config.toml".text = - # toml - '' - [alias] - lldb = ["with", "rust-lldb", "--"] - t = ["nextest", "run"] +}: let + cargo-credential-1password = cratesNix.buildCrate "cargo-credential-1password" {}; +in + lib.mkIf (!device.isServer) { + home.file.".cargo/config.toml".text = + # toml + '' + [alias] + lldb = ["with", "rust-lldb", "--"] + t = ["nextest", "run"] - [net] - git-fetch-with-cli = true + [net] + git-fetch-with-cli = true - [registries.kellnr] - index = "sparse+https://crates.darksailor.dev/api/v1/crates/" + [registries.kellnr] + index = "sparse+https://crates.darksailor.dev/api/v1/crates/" - [registry] - global-credential-providers = ["cargo:token", "/etc/profiles/per-user/fs0c131y/bin/cargo-credential-1password --account my.1password.com"] - ''; - home.packages = [ - (cratesNix.buildCrate "cargo-credential-1password" {}) - ]; -} + [registry] + global-credential-providers = ["cargo:token", "${lib.getExe cargo-credential-1password} --account my.1password.com"] + ''; + home.packages = [ + cargo-credential-1password + ]; + } diff --git a/home/services/remmina.nix b/home/services/remmina.nix index f779d94b..868f9b7d 100644 --- a/home/services/remmina.nix +++ b/home/services/remmina.nix @@ -1,7 +1,68 @@ -{device, ...}: { +{ + device, + pkgs, + lib, + config, + ... +}: +with lib; let + remminaDir = "${config.home.homeDirectory}/.local/share/remmina"; + applicationsDir = "${config.home.homeDirectory}/.local/share/applications"; + + # Script to generate desktop entries for Remmina connections + generateRemminaDesktopEntries = pkgs.writeShellScript "generate-remmina-desktop-entries" '' + REMMINA_DIR="${remminaDir}" + APPS_DIR="${applicationsDir}" + + # Create applications directory if it doesn't exist + mkdir -p "$APPS_DIR" + + # Remove old remmina desktop entries + rm -f "$APPS_DIR"/remmina-*.desktop + + # Exit if remmina directory doesn't exist + [[ ! -d "$REMMINA_DIR" ]] && exit 0 + + # Generate desktop entries for each .remmina file + find "$REMMINA_DIR" -name "*.remmina" -type f | while read -r file; do + # Extract connection details + name=$(${pkgs.gnugrep}/bin/grep "^name=" "$file" | ${pkgs.coreutils}/bin/cut -d'=' -f2-) + server=$(${pkgs.gnugrep}/bin/grep "^server=" "$file" | ${pkgs.coreutils}/bin/cut -d'=' -f2-) + protocol=$(${pkgs.gnugrep}/bin/grep "^protocol=" "$file" | ${pkgs.coreutils}/bin/cut -d'=' -f2-) + + # Use filename as fallback if name is empty + [[ -z "$name" ]] && name=$(${pkgs.coreutils}/bin/basename "$file" .remmina) + [[ -z "$protocol" ]] && protocol="Unknown" + + # Generate desktop entry filename + desktop_name=$(${pkgs.coreutils}/bin/basename "$file" .remmina | ${pkgs.gnused}/bin/sed 's/[^a-zA-Z0-9_-]/-/g') + desktop_file="$APPS_DIR/remmina-$desktop_name.desktop" + + # Create desktop entry + cat > "$desktop_file" <