From 6db8e0130982161308ad00cec0819c878b347dc1 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 9 Aug 2025 21:19:13 -0400 Subject: [PATCH] Honor ownership. --- nix/configuration/configuration.nix | 2 +- .../util/install_files/default.nix | 37 +++++++++++++++---- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/nix/configuration/configuration.nix b/nix/configuration/configuration.nix index 8c34538..3b36f76 100644 --- a/nix/configuration/configuration.nix +++ b/nix/configuration/configuration.nix @@ -81,7 +81,7 @@ # me.install.user.file.talexander.".local/nixcfg" = ./README.org; me.install.user.talexander.file.".local/nixcfg" = { source = ./flake.lock; - method = "overwrite"; + # method = "overwrite"; }; nix.settings.experimental-features = [ diff --git a/nix/configuration/util/install_files/default.nix b/nix/configuration/util/install_files/default.nix index 8777add..341250a 100644 --- a/nix/configuration/util/install_files/default.nix +++ b/nix/configuration/util/install_files/default.nix @@ -12,12 +12,19 @@ let attrNames ; - get_shell_values = target: rec { - source = lib.strings.escapeShellArg "${target.source}"; - homedir = config.users.users."${target.username}".home; - destination = lib.strings.escapeShellArg "${homedir}/${target.target}"; - mode = lib.strings.escapeShellArg "${target.mode}"; - }; + get_shell_values = + target: + let + homedir = config.users.users."${target.username}".home; + group = config.users.users."${target.username}".group; + in + { + source = lib.strings.escapeShellArg "${target.source}"; + destination = lib.strings.escapeShellArg "${homedir}/${target.target}"; + mode = lib.strings.escapeShellArg "${target.mode}"; + username = lib.strings.escapeShellArg "${target.username}"; + group = lib.strings.escapeShellArg "${group}"; + }; install_user_file = let constructors = { @@ -35,10 +42,17 @@ let source destination mode + username + group ; + flags = lib.strings.concatStringsSep " " [ + (if mode != "" then "-m ${mode}" else "") + (if username != "" then "-o ${username}" else "") + (if group != "" then "-g ${group}" else "") + ]; in '' - $DRY_RUN_CMD install $VERBOSE_ARG -D --compare -m ${mode} ${source} ${destination} + $DRY_RUN_CMD install $VERBOSE_ARG -D --compare ${flags} ${source} ${destination} '' ); "uninstall" = ( @@ -61,10 +75,19 @@ let inherit (get_shell_values target) source destination + username + group ; + owner = lib.strings.concatStringsSep ":" ( + filter (val: val != "") [ + username + group + ] + ); in '' $DRY_RUN_CMD ln $VERBOSE_ARG -s ${source} ${destination} + $DRY_RUN_CMD chown $VERBOSE_ARG -h ${owner} ${destination} '' ); "uninstall" = (