From 48ac907d9e8bcf5aa547178f32399d87624fae65 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Thu, 3 Apr 2025 16:12:25 +0200 Subject: [PATCH] home/cargo: init --- flake.nix | 1 + home/home.nix | 2 ++ home/modules/programs/cargo/default.nix | 40 +++++++++++++++++++++++++ home/programs/cargo.nix | 9 ++++++ 4 files changed, 52 insertions(+) create mode 100644 home/modules/programs/cargo/default.nix create mode 100644 home/programs/cargo.nix diff --git a/flake.nix b/flake.nix index 87aebe1..d71ffc7 100644 --- a/flake.nix +++ b/flake.nix @@ -151,6 +151,7 @@ direnv-auto-prune = ./home/modules/programs/direnv/auto-prune.nix; newsboat = ./home/modules/programs/newsboat; mpd-auto-updater = ./home/modules/services/mpd.nix; + cargo = ./home/modules/programs/cargo; }; homeConfigurations = { diff --git a/home/home.nix b/home/home.nix index a1cd69c..7669c55 100644 --- a/home/home.nix +++ b/home/home.nix @@ -14,6 +14,7 @@ in { ./programs/bat.nix ./programs/beets.nix ./programs/bottom.nix + ./programs/cargo.nix ./programs/comma.nix ./programs/direnv ./programs/eza.nix @@ -49,6 +50,7 @@ in { ./modules/colors.nix ./modules/shellAliases.nix ./modules/uidGid.nix + ./modules/programs/cargo ./modules/programs/gpg ./modules/programs/neovim/auto-clean-swapfiles.nix ./modules/programs/nix-index/auto-update-database.nix diff --git a/home/modules/programs/cargo/default.nix b/home/modules/programs/cargo/default.nix new file mode 100644 index 0000000..8954a0d --- /dev/null +++ b/home/modules/programs/cargo/default.nix @@ -0,0 +1,40 @@ +{ config, pkgs, lib, ... }: +let + cfg = config.programs.cargo; + format = pkgs.formats.toml { }; + cargoHome = lib.traceVal (config.home.sessionVariables.CARGO_HOME or "${config.home.homeDirectory}/.cargo"); + relativeCargoHome = lib.strings.removePrefix config.home.homeDirectory cargoHome; +in +{ + options.programs.cargo = { + enable = lib.mkEnableOption "cargo, the rust package manager and build tool"; + + package = lib.mkPackageOption pkgs "cargo" { }; + + addPackageToEnvironment = lib.mkOption { + description = "Whether to add cargo to the user's environment."; + type = lib.types.bool; + default = true; + example = false; + }; + + settings = lib.mkOption { + description = "cargo settings"; + type = lib.types.submodule { + freeformType = format.type; + }; + }; + }; + + config = lib.mkIf cfg.enable { + home = { + sessionVariables.CARGO_HOME = lib.mkIf config.home.preferXdgDirectories (lib.mkDefault "${config.xdg.dataHome}/cargo"); + + packages = lib.mkIf cfg.addPackageToEnvironment [ cfg.package ]; + + file."${relativeCargoHome}/config.toml" = lib.mkIf (cfg.settings != { }) { + source = format.generate "cargo-config.toml" cfg.settings; + }; + }; + }; +} diff --git a/home/programs/cargo.nix b/home/programs/cargo.nix new file mode 100644 index 0000000..45c6ec7 --- /dev/null +++ b/home/programs/cargo.nix @@ -0,0 +1,9 @@ +{ ... }: +{ + programs.cargo = { + enable = true; + settings = { + cargo-new.vcs = "git"; + }; + }; +}