diff --git a/nixpkgs/README.md b/nixpkgs/README.md
new file mode 100644
index 0000000..6ece2ce
--- /dev/null
+++ b/nixpkgs/README.md
@@ -0,0 +1,5 @@
+# Home Manager Configuration
+
+This directory contains my configuration for home-manager, which can be easily installed by running `./install.sh {machine name}`.
+
+The `machines` folder contains userland configs for specific machines. Each of these configs will import modules from the `modules` folder for shell config, git config, etc. 
\ No newline at end of file
diff --git a/nixpkgs/install.sh b/nixpkgs/install.sh
new file mode 100755
index 0000000..df7242c
--- /dev/null
+++ b/nixpkgs/install.sh
@@ -0,0 +1,5 @@
+# Where first arg is directory under machines, can be one of macos, fedora, nixos
+mkdir -p $HOME/.config
+ln -s $(pwd) $HOME/.config/nixpkgs 
+ln -s $(pwd)/machines/$1/home.nix $HOME/.config/nixpkgs/home.nix
+ln -s $(pwd)/machines/$1/config.nix $HOME/.config/nixpkgs/config.nix
diff --git a/nixpkgs/machines/loft/config.nix b/nixpkgs/machines/loft/config.nix
new file mode 100644
index 0000000..1dd1750
--- /dev/null
+++ b/nixpkgs/machines/loft/config.nix
@@ -0,0 +1,3 @@
+{
+  allowUnfree = true;
+}
diff --git a/nixpkgs/machines/loft/home.nix b/nixpkgs/machines/loft/home.nix
new file mode 100644
index 0000000..1e00d96
--- /dev/null
+++ b/nixpkgs/machines/loft/home.nix
@@ -0,0 +1,18 @@
+{ config, pkgs, ... }:
+
+{
+  imports = [
+    ../../modules/home-manager.nix
+    ../../modules/fonts.nix
+    ../../modules/git.nix
+    ../../modules/gnome.nix
+    ../../modules/vscode.nix
+    ../../modules/zsh.nix
+  ];
+
+  home.packages = with pkgs; [
+  	neofetch
+  	fortune
+  ];
+  
+}
\ No newline at end of file
diff --git a/nixpkgs/modules/fonts.nix b/nixpkgs/modules/fonts.nix
new file mode 100644
index 0000000..0d981de
--- /dev/null
+++ b/nixpkgs/modules/fonts.nix
@@ -0,0 +1,8 @@
+{ config, pkgs, libs, ... }:
+{
+  home.packages = with pkgs; [
+    (nerdfonts.override { fonts = [ "FiraCode" ]; })
+  ];
+
+  fonts.fontconfig.enable = true;
+}
\ No newline at end of file
diff --git a/nixpkgs/modules/git.nix b/nixpkgs/modules/git.nix
new file mode 100644
index 0000000..27ca9f8
--- /dev/null
+++ b/nixpkgs/modules/git.nix
@@ -0,0 +1,12 @@
+{ config, pkgs, libs, ... }:
+{
+  home.packages = with pkgs; [
+    git-lfs
+  ];
+
+  programs.git = {
+    enable = true;
+    userEmail = "michaelhthomas@outlook.com";
+    userName = "Michael Thomas";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/modules/gnome.nix b/nixpkgs/modules/gnome.nix
new file mode 100644
index 0000000..13a0f18
--- /dev/null
+++ b/nixpkgs/modules/gnome.nix
@@ -0,0 +1,27 @@
+{ config, pkgs, libs, ... }:
+{
+  home.packages = with pkgs; [
+    gnomeExtensions.caffeine
+  ];
+
+  gtk = {
+    enable = true;
+    theme.name = "Adwaita-dark";
+    # font.name = "Ubuntu 12";
+    iconTheme = {
+      name = "Papirus";
+      package = pkgs.papirus-icon-theme;
+    };
+  };
+
+  programs.gnome-terminal = {
+    enable = true;
+    profile = {
+      "5ddfe964-7ee6-4131-b449-26bdd97518f7" = {
+        default = true;
+        visibleName = "Michael";
+        font = "FiraCode Nerd Font 12";
+      };
+    };
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/modules/home-manager.nix b/nixpkgs/modules/home-manager.nix
new file mode 100644
index 0000000..114b75f
--- /dev/null
+++ b/nixpkgs/modules/home-manager.nix
@@ -0,0 +1,20 @@
+{ config, pkgs, libs, ... }:
+{
+  # Let Home Manager install and manage itself.
+  programs.home-manager.enable = true;
+
+  # Home Manager needs a bit of information about you and the
+  # paths it should manage.
+  home.username = builtins.getEnv "USER";
+  home.homeDirectory = builtins.getEnv "HOME";
+
+  # This value determines the Home Manager release that your
+  # configuration is compatible with. This helps avoid breakage
+  # when a new Home Manager release introduces backwards
+  # incompatible changes.
+  #
+  # You can update Home Manager without changing this value. See
+  # the Home Manager release notes for a list of state version
+  # changes in each release.
+  home.stateVersion = "21.03";
+}
diff --git a/nixpkgs/modules/vscode.nix b/nixpkgs/modules/vscode.nix
new file mode 100644
index 0000000..6451520
--- /dev/null
+++ b/nixpkgs/modules/vscode.nix
@@ -0,0 +1,15 @@
+{ config, pkgs, libs, ... }:
+{
+  programs = {
+    vscode = {
+      enable = true;
+      extensions = [
+        pkgs.vscode-extensions.bbenoist.Nix
+      ];
+      # userSettings = {
+      #   "editor.fontFamily" = "'FiraCode Nerd Font', 'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback'";
+      #   "editor.tabSize" = 2;
+      # };
+    };
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/modules/zsh.nix b/nixpkgs/modules/zsh.nix
new file mode 100644
index 0000000..42771b7
--- /dev/null
+++ b/nixpkgs/modules/zsh.nix
@@ -0,0 +1,35 @@
+{ config, pkgs, libs, ... }:
+{
+  programs.zsh = {
+    enable = true;
+    prezto = {
+      enable = true;
+      pmodules = [ 
+        "archive"
+        "docker"
+        "environment"
+        "git"
+        "terminal"
+        "editor"
+        "history"
+        "directory"
+        "spectrum"
+        "utility"
+        "completion"
+        "command-not-found"
+        "syntax-highlighting"
+        "history-substring-search"
+        "autosuggestions"
+        "prompt"
+      ];
+    };
+  };
+  programs.starship = {
+      enable = true;
+      enableZshIntegration = true;
+      settings = {
+      character.symbol = "➜";
+      character.success_symbol = "[➜](bold green)";
+    };
+  };
+}
\ No newline at end of file