From ba17b0ee0cabfc30e546730b47c6f57b83331a69 Mon Sep 17 00:00:00 2001 From: technofab Date: Sat, 27 Apr 2024 19:52:51 +0200 Subject: [PATCH] feat: add dotfile loading via home-manager --- image.nix | 5 +++-- nix-kubernetes/coder.nix | 15 +++++++++++++++ nix-kubernetes/kubernetes.nix | 4 ++++ nix-kubernetes/parameters.nix | 25 +++++++++++++++++++------ 4 files changed, 41 insertions(+), 8 deletions(-) diff --git a/image.nix b/image.nix index 10bed46..9736a4d 100644 --- a/image.nix +++ b/image.nix @@ -17,8 +17,9 @@ pkgs.dockerTools.buildLayeredImage { pkgs.openssh pkgs.git pkgs.curl - pkgs.home-manager - pkgs.direnv + (pkgs.writeShellScriptBin "reload-dotfiles" '' + ${pkgs.home-manager}/bin/home-manager switch --flake ''${DOTFILES_REPO:-$1} + '') (pkgs.writeTextDir "etc/nix/nix.conf" "experimental-features = nix-command flakes") (pkgs.writeTextDir "etc/passwd" "coder:x:1000:1000::/home/coder:/bin/bash") (pkgs.writeTextDir "etc/shadow" "coder:!:::::::") diff --git a/nix-kubernetes/coder.nix b/nix-kubernetes/coder.nix index bf7de48..227153e 100644 --- a/nix-kubernetes/coder.nix +++ b/nix-kubernetes/coder.nix @@ -39,5 +39,20 @@ run_on_start = true; start_blocks_login = true; }; + coder_script."home-manager" = { + agent_id = "\${coder_agent.coder.id}"; + display_name = "Home Manager"; + icon = "/emojis/1f3e0.png"; + script = '' + if [ ! -z "$DOTFILES_REPO" ] then + echo "Dotfiles present, reloading home-manager profile" + reload-dotfiles + else + echo "No dotfiles repo specified, skipping..." + fi + ''; + run_on_start = true; + start_blocks_login = true; + }; }; } diff --git a/nix-kubernetes/kubernetes.nix b/nix-kubernetes/kubernetes.nix index 482d017..1c5cc30 100644 --- a/nix-kubernetes/kubernetes.nix +++ b/nix-kubernetes/kubernetes.nix @@ -54,6 +54,10 @@ name = "CODER_AGENT_TOKEN"; value = "\${resource.coder_agent.coder.token}"; } + { + name = "DOTFILES_REPO"; + value = "\${data.coder_parameter.dotfiles_repo.value}"; + } ]; resources = { requests = { diff --git a/nix-kubernetes/parameters.nix b/nix-kubernetes/parameters.nix index cd305f9..630bfbb 100644 --- a/nix-kubernetes/parameters.nix +++ b/nix-kubernetes/parameters.nix @@ -1,12 +1,25 @@ {...}: { data.coder_parameter = { + dotfiles_repo = { + name = "Dotfiles Repository (passed to home-manager)"; + description = '' + Nix flake URI to your dotfiles repository, eg. + github:example/dotfiles#coder + + Your flake.nix has to expose a homeManagerConfiguration.coder in this case. + ''; + default = ""; + order = 1; + type = "string"; + mutable = true; + }; git_repo = { name = "Git Repository"; description = '' URI for a git repository which should automatically be cloned to ~/repos/ ''; default = ""; - order = 1; + order = 2; type = "string"; mutable = true; }; @@ -16,7 +29,7 @@ Which container image tag should be used. ''; default = "latest"; - order = 2; + order = 3; type = "string"; mutable = true; }; @@ -26,7 +39,7 @@ CPU Limit for Kubernetes Pod. Kubernetes Notation (eg. 500m) ''; default = "500m"; - order = 3; + order = 4; type = "string"; mutable = true; }; @@ -36,7 +49,7 @@ Memory Limit for Kubernetes Pod. Kubernetes Notation (eg. 1Gi) ''; default = "1Gi"; - order = 4; + order = 5; type = "string"; mutable = true; }; @@ -46,7 +59,7 @@ Size for the /home PV in GB ''; default = 5; - order = 5; + order = 6; type = "number"; mutable = true; validation = [ @@ -63,7 +76,7 @@ Size for the /nix PV in GB. This might grow pretty big. ''; default = 5; - order = 6; + order = 7; type = "number"; mutable = true; validation = [