From 152327bd85962a7447c6b38d29590d9fd4cce26e Mon Sep 17 00:00:00 2001 From: Eli Ribble Date: Fri, 11 Jul 2025 21:24:59 +0000 Subject: [PATCH] Add home-manager, per-user configs, and tmux configuration --- configs/tmux/tmux.conf | 22 ++++++++++++ nixos-anywhere/configuration.nix | 2 ++ nixos-anywhere/flake.lock | 22 ++++++++++++ nixos-anywhere/flake.nix | 44 ++++++++++++++++++----- nixos-anywhere/modules/default.nix | 5 +++ nixos-anywhere/modules/home/default.nix | 5 +++ nixos-anywhere/modules/system/default.nix | 5 +++ nixos-anywhere/modules/system/tmux.nix | 18 ++++++++++ 8 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 configs/tmux/tmux.conf create mode 100644 nixos-anywhere/modules/default.nix create mode 100644 nixos-anywhere/modules/home/default.nix create mode 100644 nixos-anywhere/modules/system/default.nix create mode 100644 nixos-anywhere/modules/system/tmux.nix diff --git a/configs/tmux/tmux.conf b/configs/tmux/tmux.conf new file mode 100644 index 0000000..9828b10 --- /dev/null +++ b/configs/tmux/tmux.conf @@ -0,0 +1,22 @@ +set-option -g default-command /run/current-system/sw/bin/fish + +bind-key h select-pane -L +bind-key j select-pane -D +bind-key k select-pane -U +bind-key l select-pane -R + +# nested tmux, obey me +bind-key a send-prefix + +# Avoid the annoying bit of delay when using the control character +set -g escape-time 0 +set -g renumber-windows on + +# Show a visual bell, even on other windows +#set-window-option -g visual-bell both +#set-window-option -g bell-action any +#set-hook -g alert-bell "run-shell '~/.config/tmux/bell.sh \"#S\" \"#W\"'" + +# Set up the window visuals +set -g window-status-style bg=yellow +set -g window-status-current-style bg=red,fg=white diff --git a/nixos-anywhere/configuration.nix b/nixos-anywhere/configuration.nix index 6d1f3ed..6b3c041 100644 --- a/nixos-anywhere/configuration.nix +++ b/nixos-anywhere/configuration.nix @@ -22,6 +22,8 @@ pkgs.gitMinimal ]; + myModules.tmux.enable = true; + services.openssh.enable = true; system.stateVersion = "25.05"; diff --git a/nixos-anywhere/flake.lock b/nixos-anywhere/flake.lock index 5b1c56d..81502f3 100644 --- a/nixos-anywhere/flake.lock +++ b/nixos-anywhere/flake.lock @@ -20,6 +20,27 @@ "type": "github" } }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1752208517, + "narHash": "sha256-aRY1cYOdVdXdNjcL/Twpa27CknO7pVHxooPsBizDraE=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "c6a01e54af81b381695db796a43360bf6db5702f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-25.05", + "repo": "home-manager", + "type": "github" + } + }, "nixos-facter-modules": { "locked": { "lastModified": 1750412875, @@ -54,6 +75,7 @@ "root": { "inputs": { "disko": "disko", + "home-manager": "home-manager", "nixos-facter-modules": "nixos-facter-modules", "nixpkgs": "nixpkgs" } diff --git a/nixos-anywhere/flake.nix b/nixos-anywhere/flake.nix index 95d3db9..2820a90 100644 --- a/nixos-anywhere/flake.nix +++ b/nixos-anywhere/flake.nix @@ -1,25 +1,53 @@ { - inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - inputs.disko.url = "github:nix-community/disko"; - inputs.disko.inputs.nixpkgs.follows = "nixpkgs"; - inputs.nixos-facter-modules.url = "github:numtide/nixos-facter-modules"; + inputs = { + disko = { + inputs.nixpkgs.follows = "nixpkgs"; + url = "github:nix-community/disko"; + }; + home-manager = { + url = "github:nix-community/home-manager/release-25.05"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nixos-facter-modules.url = "github:numtide/nixos-facter-modules"; + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + }; outputs = { - nixpkgs, disko, + home-manager, + nixpkgs, nixos-facter-modules, ... }: - { + let + configFiles = pkgs.stdenv.mkDerivation { + installPhase = '' + mkdir -p $out + cp -r * $out/ + ''; + name = "config-files"; + src = ./configs; + }; + pkgs = nixpkgs.legacyPackages.${system}; + system = "x86_64-linux"; + in { # tested with 2GB/2CPU droplet, 1GB droplets do not have enough RAM for kexec nixosConfigurations.digitalocean = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; + system = "${system}"; modules = [ + ./configuration.nix ./digitalocean.nix disko.nixosModules.disko { disko.devices.disk.disk1.device = "/dev/vda"; } - ./configuration.nix + home-manager.nixosModules.home-manager { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.sharedModules = []; + home-manager.extraSpecialArgs = { inherit configFiles; }; + } + ./modules + ./users ]; }; }; diff --git a/nixos-anywhere/modules/default.nix b/nixos-anywhere/modules/default.nix new file mode 100644 index 0000000..520a646 --- /dev/null +++ b/nixos-anywhere/modules/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./system + ]; +} diff --git a/nixos-anywhere/modules/home/default.nix b/nixos-anywhere/modules/home/default.nix new file mode 100644 index 0000000..520a646 --- /dev/null +++ b/nixos-anywhere/modules/home/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./system + ]; +} diff --git a/nixos-anywhere/modules/system/default.nix b/nixos-anywhere/modules/system/default.nix new file mode 100644 index 0000000..bf53d71 --- /dev/null +++ b/nixos-anywhere/modules/system/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./tmux.nix + ]; +} diff --git a/nixos-anywhere/modules/system/tmux.nix b/nixos-anywhere/modules/system/tmux.nix new file mode 100644 index 0000000..5214cb8 --- /dev/null +++ b/nixos-anywhere/modules/system/tmux.nix @@ -0,0 +1,18 @@ +{ config, lib, pkgs, configFiles, ... }: + +with lib; + +{ + options.myModules.tmux.enable = mkEnableOption "custom tmux configuration"; + + config = mkIf config.myModules.tmux.enable { + environment.systemPackages = [ pkgs.tmux ]; + + environment.etc."tmux.conf".source = "${configFiles}/tmux/tmux.conf"; + + # Alternative: if you want per-user configs + # users.users = mkMerge (map (user: { + # ${user}.home = "${configPath}/configs/tmux/tmux.conf"; + # }) config.myModules.tmux.users); + }; +}