diff options
| author | Amir Saeid <amir@glgdgt.com> | 2026-03-08 20:12:44 +0000 |
|---|---|---|
| committer | Amir Saeid <amir@glgdgt.com> | 2026-03-08 20:12:44 +0000 |
| commit | 1b95597c921f7a94e0e7b08871d51f941076c319 (patch) | |
| tree | 663383bc82412d690cd44927bf8cd289d3a3c4c6 | |
Initial commit
| -rw-r--r-- | flake.lock | 114 | ||||
| -rw-r--r-- | flake.nix | 77 | ||||
| -rw-r--r-- | hosts/gheshki/home.nix | 13 | ||||
| -rw-r--r-- | hosts/gheshki/userOptions.nix | 6 | ||||
| -rw-r--r-- | hosts/mentat/home.nix | 21 | ||||
| -rw-r--r-- | hosts/mentat/userOptions.nix | 6 | ||||
| -rw-r--r-- | modules/base.nix | 20 | ||||
| -rw-r--r-- | modules/dev-tools.nix | 46 | ||||
| -rw-r--r-- | modules/host-common.nix | 10 | ||||
| -rw-r--r-- | modules/shell.nix | 75 | ||||
| -rw-r--r-- | modules/term.nix | 37 |
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"; + }; +} |
