summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flake.lock114
-rw-r--r--flake.nix77
-rw-r--r--hosts/gheshki/home.nix13
-rw-r--r--hosts/gheshki/userOptions.nix6
-rw-r--r--hosts/mentat/home.nix21
-rw-r--r--hosts/mentat/userOptions.nix6
-rw-r--r--modules/base.nix20
-rw-r--r--modules/dev-tools.nix46
-rw-r--r--modules/host-common.nix10
-rw-r--r--modules/shell.nix75
-rw-r--r--modules/term.nix37
11 files changed, 425 insertions, 0 deletions
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..b5f994c
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,114 @@
+{
+ "nodes": {
+ "flake-utils": {
+ "inputs": {
+ "systems": "systems"
+ },
+ "locked": {
+ "lastModified": 1731533236,
+ "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": "nixpkgs"
+ },
+ "locked": {
+ "lastModified": 1772633058,
+ "narHash": "sha256-SO7JapRy2HPhgmqiLbfnW1kMx5rakPMKZ9z3wtRLQjI=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "080657a04188aca25f8a6c70a0fb2ea7e37f1865",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "ref": "release-25.11",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1772465433,
+ "narHash": "sha256-ywy9troNEfpgh0Ee+zaV1UTgU8kYBVKtvPSxh6clYGU=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "c581273b8d5bdf1c6ce7e0a54da9841e6a763913",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-25.11",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_2": {
+ "locked": {
+ "lastModified": 1772822230,
+ "narHash": "sha256-yf3iYLGbGVlIthlQIk5/4/EQDZNNEmuqKZkQssMljuw=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "71caefce12ba78d84fe618cf61644dce01cf3a96",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-25.11",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "flake-utils": "flake-utils",
+ "home-manager": "home-manager",
+ "nixpkgs": "nixpkgs_2",
+ "unstable": "unstable"
+ }
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "unstable": {
+ "locked": {
+ "lastModified": 1772773019,
+ "narHash": "sha256-E1bxHxNKfDoQUuvriG71+f+s/NT0qWkImXsYZNFFfCs=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "aca4d95fce4914b3892661bcb80b8087293536c6",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..c0d9f5f
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,77 @@
+{
+ description = "Amir's Home Manager";
+
+ inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
+ home-manager = {
+ url = "github:nix-community/home-manager/release-25.11";
+ };
+ unstable = {
+ url = "github:NixOS/nixpkgs/nixos-unstable";
+ };
+ flake-utils = {
+ url = "github:numtide/flake-utils";
+ };
+ };
+
+ outputs = { self, nixpkgs, home-manager, unstable, flake-utils, ... }:
+ let
+ mkExtraArgs = system: {
+ unstablePkgs = import unstable {
+ inherit system;
+ config.allowUnfree = false;
+ };
+ unfreePkgs = import nixpkgs {
+ inherit system;
+ config.allowUnfree = true;
+ };
+ unstableUnfreePkgs = import unstable {
+ inherit system;
+ config.allowUnfree = true;
+ };
+ };
+
+ mkHostConfig = { hostname, system ? "aarch64-darwin" }: {
+ pkgs = import nixpkgs {
+ inherit system;
+ config = {
+ allowUnfree = false;
+ };
+ };
+ modules = [ ./hosts/${hostname}/home.nix ];
+ extraSpecialArgs = (mkExtraArgs system) // {
+ inherit hostname;
+ hmLib = home-manager.lib;
+ };
+ };
+ in
+ flake-utils.lib.eachDefaultSystem
+ (system:
+ let
+ pkgs = import nixpkgs {
+ inherit system;
+ config = {
+ allowUnfree = false;
+ };
+ };
+ in
+ {
+ packages = {
+ default = home-manager.packages.${system}.home-manager;
+ };
+
+ devShells.default = pkgs.mkShell {
+ buildInputs = with pkgs; [
+ #home-manager
+ home-manager.packages.${system}.home-manager
+ nixpkgs-fmt
+ ];
+ };
+ }
+ ) // {
+ homeConfigurations = {
+ mentat = home-manager.lib.homeManagerConfiguration (mkHostConfig { hostname = "mentat"; });
+ gheshki = home-manager.lib.homeManagerConfiguration (mkHostConfig { hostname = "gheshki"; });
+ };
+ };
+}
diff --git a/hosts/gheshki/home.nix b/hosts/gheshki/home.nix
new file mode 100644
index 0000000..c02c1f8
--- /dev/null
+++ b/hosts/gheshki/home.nix
@@ -0,0 +1,13 @@
+{ config
+, pkgs
+, unstablePkgs
+, unfreePkgs
+, unstableUnfreePkgs
+, userOptions
+, ...
+}:
+{
+ imports = [
+ ../../modules/base.nix
+ ];
+}
diff --git a/hosts/gheshki/userOptions.nix b/hosts/gheshki/userOptions.nix
new file mode 100644
index 0000000..301838b
--- /dev/null
+++ b/hosts/gheshki/userOptions.nix
@@ -0,0 +1,6 @@
+{
+ username = "amir";
+ userHome = "/home/amir";
+ gitEmail = "amir@glgdgt.com";
+ gitName = "Amir Saeid";
+}
diff --git a/hosts/mentat/home.nix b/hosts/mentat/home.nix
new file mode 100644
index 0000000..3351cbe
--- /dev/null
+++ b/hosts/mentat/home.nix
@@ -0,0 +1,21 @@
+{ config
+, pkgs
+, unstablePkgs
+, unfreePkgs
+, unstableUnfreePkgs
+, userOptions
+, ...
+}:
+{
+ imports = [
+ ../../modules/base.nix
+ ];
+
+ home.sessionPath = [
+ "${userOptions.userHome}/Library/Application Support/Coursier/bin"
+ ];
+
+ home.packages = [
+ pkgs.stats
+ ];
+}
diff --git a/hosts/mentat/userOptions.nix b/hosts/mentat/userOptions.nix
new file mode 100644
index 0000000..554ce1d
--- /dev/null
+++ b/hosts/mentat/userOptions.nix
@@ -0,0 +1,6 @@
+{
+ username = "amir";
+ userHome = "/Users/amir";
+ gitEmail = "amir@glgdgt.com";
+ gitName = "Amir Saeid";
+}
diff --git a/modules/base.nix b/modules/base.nix
new file mode 100644
index 0000000..bf5efe9
--- /dev/null
+++ b/modules/base.nix
@@ -0,0 +1,20 @@
+{ config
+, pkgs
+, lib
+, userOptions
+, ...
+}:
+{
+ home.stateVersion = "25.11";
+
+ imports = [
+ ./host-common.nix
+ ./dev-tools.nix
+ ./shell.nix
+ ./term.nix
+ ];
+
+ home.packages = with pkgs; [ nixd ];
+
+ programs.home-manager.enable = true;
+}
diff --git a/modules/dev-tools.nix b/modules/dev-tools.nix
new file mode 100644
index 0000000..3c0643b
--- /dev/null
+++ b/modules/dev-tools.nix
@@ -0,0 +1,46 @@
+{ config
+, pkgs
+, unstablePkgs
+, unfreePkgs
+, unstableUnfreePkgs
+, ...
+}:
+{
+ home.packages = with pkgs; [
+ alacritty
+ coursier
+ curl
+ cvc4
+ cvc5
+ fzf
+ git
+ haskell.compiler.ghc912
+ haskellPackages.cabal-install
+ hugo
+ imagemagick
+ jq
+ neovim
+ ripgrep
+ pass
+ starship
+ rustup
+ tig
+ tmux
+ uv
+ wget
+ z3
+ zed-editor
+ zsh
+
+ unfreePkgs.claude-code
+ ];
+
+ programs.claude-code = {
+ package = unfreePkgs.claude-code;
+ enable = true;
+ };
+
+ programs.zed-editor = {
+ enable = true;
+ };
+}
diff --git a/modules/host-common.nix b/modules/host-common.nix
new file mode 100644
index 0000000..83a51e2
--- /dev/null
+++ b/modules/host-common.nix
@@ -0,0 +1,10 @@
+{ config, lib, hostname, ... }:
+let
+ userOptions = import ../hosts/${hostname}/userOptions.nix;
+in
+{
+ _module.args.userOptions = userOptions;
+
+ home.username = userOptions.username;
+ home.homeDirectory = userOptions.userHome;
+}
diff --git a/modules/shell.nix b/modules/shell.nix
new file mode 100644
index 0000000..68111ea
--- /dev/null
+++ b/modules/shell.nix
@@ -0,0 +1,75 @@
+{ config
+, pkgs
+, hmLib
+, lib
+, userOptions
+, ...
+}:
+{
+ home.sessionVariables = {
+ EDITOR = "nvim";
+ };
+
+ home.sessionPath = [
+ "${userOptions.userHome}/.cargo/bin"
+ ];
+
+ home.activation.coursierSetup = hmLib.hm.dag.entryAfter [ "writeBoundary" ] ''
+ $DRY_RUN_CMD ${pkgs.coursier}/bin/cs setup --env --jvm 21
+ '';
+
+ programs.fzf = {
+ enable = true;
+ enableZshIntegration = true;
+ };
+
+ programs.zsh = {
+ enable = true;
+ enableCompletion = true;
+ initContent = ''
+ bindkey '\e.' insert-last-word
+ if java_home=$(cs java-home --jvm 21 2>/dev/null); then
+ export JAVA_HOME="$java_home"
+ fi
+ '';
+ plugins = [
+ {
+ name = "fzf-tab";
+ src = pkgs.fetchFromGitHub {
+ owner = "Aloxaf";
+ repo = "fzf-tab";
+ rev = "v1.2.0";
+ sha256 = "0mnsmfv0bx6np2r6pll43h261v7mh2ic1kd08r7jcwyb5xarfvmb";
+ };
+ }
+ ];
+ };
+
+ programs.git = {
+ enable = true;
+ settings = {
+ user = {
+ email = "${userOptions.gitEmail}";
+ name = "${userOptions.gitName}";
+ };
+ pull.rebase = true;
+ merge.conflictstyle = "zdiff3";
+ };
+ };
+
+ services.gpg-agent = {
+ enable = true;
+ };
+
+ programs.tmux = {
+ enable = true;
+ extraConfig = ''
+ set -g default-command "${pkgs.zsh}/bin/zsh"
+ '';
+ };
+
+ programs.starship = {
+ enable = true;
+ enableZshIntegration = true;
+ };
+}
diff --git a/modules/term.nix b/modules/term.nix
new file mode 100644
index 0000000..3d455d5
--- /dev/null
+++ b/modules/term.nix
@@ -0,0 +1,37 @@
+{ config
+, pkgs
+, lib
+, userOptions
+, ...
+}:
+{
+ home.packages = with pkgs.nerd-fonts; [
+ blex-mono
+ ];
+
+ programs.alacritty = {
+ enable = true;
+ settings = {
+ font = {
+ normal = {
+ family = "BlexMono Nerd Font";
+ style = "SemiBold";
+ };
+ bold = {
+ family = "BlexMono Nerd Font";
+ style = "Bold";
+ };
+ italic = {
+ family = "BlexMono Nerd Font";
+ style = "SemiBold Italic";
+ };
+ bold_italic = {
+ family = "BlexMono Nerd Font";
+ style = "Bold Italic";
+ };
+ size = 12;
+ };
+ };
+ theme = "tokyo_night";
+ };
+}