From 0de1ca5f871d5c975aa2a37dc3e29c3c3639d324 Mon Sep 17 00:00:00 2001 From: Ethan Turkeltaub Date: Mon, 26 Jan 2026 18:12:21 -0500 Subject: [PATCH 1/5] Update inputs, configure Zed, Haskell --- flake.lock | 50 +++++------ flake.nix | 7 +- modules/development/treefmt.nix | 2 +- modules/overlays/default.nix | 1 - modules/profiles/home/git/common.nix | 83 ++++++++++--------- modules/profiles/home/haskell.nix | 2 + modules/profiles/home/zed-editor.nix | 4 + modules/profiles/system/core/nix-config.nix | 2 +- modules/profiles/system/darwin/common.nix | 2 +- .../profiles/system/home-manager/common.nix | 2 +- users/et/profiles/git.nix | 3 +- users/et/profiles/tmuxp.nix | 36 +++++--- users/et/profiles/tools.nix | 2 +- users/ethan/profiles/git.nix | 3 +- 14 files changed, 109 insertions(+), 90 deletions(-) diff --git a/flake.lock b/flake.lock index 70b63051..2967f811 100644 --- a/flake.lock +++ b/flake.lock @@ -528,11 +528,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1768182537, - "narHash": "sha256-1Ff3WJ57qPtX8D5srMKzXbsWD+bmC0sZzWIIRdAkmNo=", + "lastModified": 1769448145, + "narHash": "sha256-499V3+SiDzp+Vkwo2Osp1AkstlWeDc3KzfOn+xoiu6Y=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "35a115b97a6dfc196cc479c676556ce3c874ee81", + "rev": "2d2050b17743f564ffed290602e7816614a0dbdd", "type": "github" }, "original": { @@ -2017,16 +2017,16 @@ ] }, "locked": { - "lastModified": 1763992789, - "narHash": "sha256-WHkdBlw6oyxXIra/vQPYLtqY+3G8dUVZM8bEXk0t8x4=", + "lastModified": 1768949235, + "narHash": "sha256-TtjKgXyg1lMfh374w5uxutd6Vx2P/hU81aEhTxrO2cg=", "owner": "nix-community", "repo": "home-manager", - "rev": "44831a7eaba4360fb81f2acc5ea6de5fde90aaa3", + "rev": "75ed713570ca17427119e7e204ab3590cc3bf2a5", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-25.05", + "ref": "release-25.11", "repo": "home-manager", "type": "github" } @@ -2309,16 +2309,16 @@ ] }, "locked": { - "lastModified": 1762912391, - "narHash": "sha256-4hpBE7bGd24SfD28rzMdUGXsLsNEYxCCrTipFdoqoNM=", + "lastModified": 1767634391, + "narHash": "sha256-owcSz2ICqTSvhBbhPP+1eWzi88e54rRZtfCNE5E/wwg=", "owner": "nix-darwin", "repo": "nix-darwin", - "rev": "d76299b2cd01837c4c271a7b5186e3d5d8ebd126", + "rev": "08585aacc3d6d6c280a02da195fdbd4b9cf083c2", "type": "github" }, "original": { "owner": "nix-darwin", - "ref": "nix-darwin-25.05", + "ref": "nix-darwin-25.11", "repo": "nix-darwin", "type": "github" } @@ -2993,16 +2993,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1767313136, - "narHash": "sha256-16KkgfdYqjaeRGBaYsNrhPRRENs0qzkQVUooNHtoy2w=", + "lastModified": 1769248673, + "narHash": "sha256-oyxrDiV2yFToXpzwiJUYkxCjFHvL21tMQ2BpQMyMDTw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ac62194c3917d5f474c1a844b6fd6da2db95077d", + "rev": "c0301d62ba146fee37e79fbc4b6323af52a2834e", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixpkgs-25.05-darwin", + "ref": "nixpkgs-25.11-darwin", "repo": "nixpkgs", "type": "github" } @@ -3211,11 +3211,11 @@ }, "nixpkgs-master": { "locked": { - "lastModified": 1768191469, - "narHash": "sha256-rzuxdNuXhgLDBLzdodY8yzsgNCs8m/lcRtxFsFuHUIQ=", + "lastModified": 1769452922, + "narHash": "sha256-v4nhqnhj8p2rfv3zNtotgtmVnpnuxaymFmLBfY9rFFs=", "owner": "nixos", "repo": "nixpkgs", - "rev": "3f4eb67e4f48568dce12741e62cca4e3b9db0a98", + "rev": "68aef776b7ac90c5438347fbccb5690bd1de9c34", "type": "github" }, "original": { @@ -4567,11 +4567,11 @@ ] }, "locked": { - "lastModified": 1767885888, - "narHash": "sha256-Y3RhSp6KeCsJauZqy0ePJ1QxerL8HlcdRnZwsO5H1fs=", + "lastModified": 1769469089, + "narHash": "sha256-7XDEInTFGLaiOOqK3Lp5PiyXuonUfwtG/qwJqkns6Pw=", "ref": "refs/heads/main", - "rev": "ec8b2efda6ffe00b693a80e303976c0326efc7f9", - "revCount": 33, + "rev": "451e1d0c6e14cd046338fc4e6cfde5d5fc820f99", + "revCount": 34, "type": "git", "url": "ssh://git@github.com/ethnt/tilde-secrets" }, @@ -4984,11 +4984,11 @@ ] }, "locked": { - "lastModified": 1768158989, - "narHash": "sha256-67vyT1+xClLldnumAzCTBvU0jLZ1YBcf4vANRWP3+Ak=", + "lastModified": 1769353635, + "narHash": "sha256-J0G1ACrUK29M0THPAsz429eZX07GmR9Bs/b0pB3N0dQ=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "e96d59dff5c0d7fddb9d113ba108f03c3ef99eca", + "rev": "f46bb205f239b415309f58166f8df6919fa88377", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 867603aa..16252bbb 100644 --- a/flake.nix +++ b/flake.nix @@ -20,16 +20,16 @@ }; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-25.05-darwin"; + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-25.11-darwin"; nixpkgs-master.url = "github:nixos/nixpkgs"; flake-parts.url = "github:hercules-ci/flake-parts"; - nix-darwin.url = "github:nix-darwin/nix-darwin/nix-darwin-25.05"; + nix-darwin.url = "github:nix-darwin/nix-darwin/nix-darwin-25.11"; nix-darwin.inputs.nixpkgs.follows = "nixpkgs"; - home-manager.url = "github:nix-community/home-manager/release-25.05"; + home-manager.url = "github:nix-community/home-manager/release-25.11"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; flake-root.url = "github:srid/flake-root"; @@ -41,7 +41,6 @@ treefmt.inputs.nixpkgs.follows = "nixpkgs"; tilde-secrets.url = "git+ssh://git@github.com/ethnt/tilde-secrets"; - # tilde-secrets.url = "git+file:///Users/et/Workspace/personal/tilde-secrets"; emacs-overlay.url = "github:nix-community/emacs-overlay"; emacs-overlay.inputs.nixpkgs.follows = "nixpkgs"; diff --git a/modules/development/treefmt.nix b/modules/development/treefmt.nix index ed4c8641..9c71567e 100644 --- a/modules/development/treefmt.nix +++ b/modules/development/treefmt.nix @@ -1,7 +1,7 @@ { inputs, ... }: { imports = [ inputs.treefmt.flakeModule ]; - perSystem = { config, pkgs, lib, ... }: + perSystem = { config, pkgs, ... }: let treefmtConfig = { inherit (config.flake-root) projectRootFile; diff --git a/modules/overlays/default.nix b/modules/overlays/default.nix index 59a1d2dd..9042ca61 100644 --- a/modules/overlays/default.nix +++ b/modules/overlays/default.nix @@ -9,7 +9,6 @@ config.allowUnfree = true; }; in { - inherit (nixpkgs-master) claude-code; nixpkgs-master-darwin-linux-builder = nixpkgs-master.darwin.linux-builder; }; }; diff --git a/modules/profiles/home/git/common.nix b/modules/profiles/home/git/common.nix index 03942c6c..126b1274 100644 --- a/modules/profiles/home/git/common.nix +++ b/modules/profiles/home/git/common.nix @@ -4,50 +4,53 @@ programs.git = { enable = true; - userName = "Ethan Turkeltaub"; - - aliases = let - gitCommand = lib.getExe config.programs.git.package; - fzfCommand = lib.getExe pkgs.fzf; - ghCommand = lib.getExe pkgs.gh; - superprune = pkgs.writeShellScript "git-alias-superprune" '' - echo 'Fetching remote then deleting branches that are gone. This may take a moment' - - ${gitCommand} fetch -p - - gone=$(git for-each-ref --format '%(refname) %(upstream:track)' refs/heads | awk '$2 == "[gone]" {sub("refs/heads/", "", $1); print $1}') - for branch in $gone; do - ${gitCommand} branch -D $branch; - done; - ''; - co = pkgs.writeShellScript "git-alias-co" '' - ${gitCommand} checkout "$(${gitCommand} branch --sort="-committerdate" | ${fzfCommand} | tr -d '[:space:]')"; - ''; - wipe = pkgs.writeShellScript "git-alias-wipe" '' - ${gitCommand} add . - ${gitCommand} stash - ''; - in { - s = "status"; - superprune = "!sh ${superprune}"; - co = "!sh ${co}"; - wipe = "!sh ${wipe}"; - sync = "!${ghCommand} repo sync"; + settings = { + user.name = "Ethan Turkeltaub"; + + aliases = let + gitCommand = lib.getExe config.programs.git.package; + fzfCommand = lib.getExe pkgs.fzf; + ghCommand = lib.getExe pkgs.gh; + superprune = pkgs.writeShellScript "git-alias-superprune" '' + echo 'Fetching remote then deleting branches that are gone. This may take a moment' + + ${gitCommand} fetch -p + + gone=$(git for-each-ref --format '%(refname) %(upstream:track)' refs/heads | awk '$2 == "[gone]" {sub("refs/heads/", "", $1); print $1}') + for branch in $gone; do + ${gitCommand} branch -D $branch; + done; + ''; + co = pkgs.writeShellScript "git-alias-co" '' + ${gitCommand} checkout "$(${gitCommand} branch --sort="-committerdate" | ${fzfCommand} | tr -d '[:space:]')"; + ''; + wipe = pkgs.writeShellScript "git-alias-wipe" '' + ${gitCommand} add . + ${gitCommand} stash + ''; + in { + s = "status"; + superprune = "!sh ${superprune}"; + co = "!sh ${co}"; + wipe = "!sh ${wipe}"; + sync = "!${ghCommand} repo sync"; + }; + + extraConfig = let deltaCommand = lib.getExe pkgs.delta; + in { + core.pager = deltaCommand; + interactive.diffFilter = "${deltaCommand} --color-only"; + http = { sslCAinfo = "/etc/ssl/certs/ca-certificates.crt"; }; + color = { + status = "always"; + diff = "always"; + }; + init.defaultBranch = "main"; + }; }; ignores = [ "*~" "#*#" ".elc" ".#*" "flycheck_*.el" ".projectile" ]; signing.signByDefault = config.programs.git.signing.key != null; - - extraConfig = let deltaCommand = lib.getExe pkgs.delta; - in { - core.pager = deltaCommand; - interactive.diffFilter = "${deltaCommand} --color-only"; - http = { sslCAinfo = "/etc/ssl/certs/ca-certificates.crt"; }; - color = { - status = "always"; - diff = "always"; - }; - }; }; } diff --git a/modules/profiles/home/haskell.nix b/modules/profiles/home/haskell.nix index 8ecdb89d..9bf2a70a 100644 --- a/modules/profiles/home/haskell.nix +++ b/modules/profiles/home/haskell.nix @@ -8,4 +8,6 @@ :seti -XTypeApplications :seti -XOverloadedStrings ''; + + home.sessionPath = [ "$HOME/.cabal/bin" ]; } diff --git a/modules/profiles/home/zed-editor.nix b/modules/profiles/home/zed-editor.nix index 1666b5ae..4783c1c8 100644 --- a/modules/profiles/home/zed-editor.nix +++ b/modules/profiles/home/zed-editor.nix @@ -19,6 +19,10 @@ dark = "Nord Dark"; }; + # Ergonomics + tab_size = 2; + hard_tabs = false; + # Git git.inline_blame.enabled = false; diff --git a/modules/profiles/system/core/nix-config.nix b/modules/profiles/system/core/nix-config.nix index 0abfa276..49d3d5c7 100644 --- a/modules/profiles/system/core/nix-config.nix +++ b/modules/profiles/system/core/nix-config.nix @@ -1,4 +1,4 @@ -{ flake, pkgs, ... }: { +{ pkgs, ... }: { nixpkgs = { # NOTE: This relies on all hosts having the same `system`. If a system comes along that is different, this cannot # be set to the flake-wide `pkgs`, as it is here: https://nix-darwin.github.io/nix-darwin/manual/index.html#opt-nixpkgs.pkgs diff --git a/modules/profiles/system/darwin/common.nix b/modules/profiles/system/darwin/common.nix index 586390d8..9ecf699d 100644 --- a/modules/profiles/system/darwin/common.nix +++ b/modules/profiles/system/darwin/common.nix @@ -6,7 +6,7 @@ settings = { trusted-users = [ config.system.primaryUser ]; extra-nix-path = [ "darwin-config=${flake}/lib/compat/darwin" ]; - extra-experimental-features = [ "nix-command" "flakes" "ca-derivations" ]; + extra-experimental-features = [ "nix-command" "flakes" ]; }; }; diff --git a/modules/profiles/system/home-manager/common.nix b/modules/profiles/system/home-manager/common.nix index f29746a2..075ff4c4 100644 --- a/modules/profiles/system/home-manager/common.nix +++ b/modules/profiles/system/home-manager/common.nix @@ -1,4 +1,4 @@ -{ flake, lib, ... }: { +{ flake, ... }: { home-manager = { inherit (flake.lib.hm) sharedModules extraSpecialArgs; diff --git a/users/et/profiles/git.nix b/users/et/profiles/git.nix index 985356cd..385dcde2 100644 --- a/users/et/profiles/git.nix +++ b/users/et/profiles/git.nix @@ -1,7 +1,6 @@ { programs.git = { - userEmail = "et@mercury.com"; - userName = "Ethan Turkeltaub"; + settings = { user.email = "et@mercury.com"; }; signing.key = "F8E4DBB3201AFD1E"; }; } diff --git a/users/et/profiles/tmuxp.nix b/users/et/profiles/tmuxp.nix index d5ca70b4..c3110cf2 100644 --- a/users/et/profiles/tmuxp.nix +++ b/users/et/profiles/tmuxp.nix @@ -2,18 +2,32 @@ programs.tmuxp.workspaces = { tilde = { session_name = "tilde"; - windows = [{ - focus = true; - layout = "c5e0,212x37,0,0,3"; - options = { }; - panes = [{ + windows = [ + { focus = true; - shell_command = "direnv reload"; - }]; - start_directory = - "${config.home.homeDirectory}/Workspace/personal/tilde"; - window_name = "fish"; - }]; + layout = "c5e0,212x37,0,0,3"; + options = { }; + panes = [{ + focus = true; + shell_command = "direnv reload"; + }]; + start_directory = + "${config.home.homeDirectory}/Workspace/personal/tilde"; + window_name = "tilde"; + } + { + focus = false; + layout = "c5e0,212x37,0,0,3"; + options = { }; + panes = [{ + focus = true; + shell_command = "direnv reload"; + }]; + start_directory = + "${config.home.homeDirectory}/Workspace/personal/tilde-secrets"; + window_name = "tilde-secrets"; + } + ]; }; }; } diff --git a/users/et/profiles/tools.nix b/users/et/profiles/tools.nix index 85b3f91e..f34c2bce 100644 --- a/users/et/profiles/tools.nix +++ b/users/et/profiles/tools.nix @@ -1,5 +1,5 @@ { pkgs, ... }: { - home.packages = with pkgs; [ claude-code graphite-cli fnm mkcert ]; + home.packages = with pkgs; [ graphite-cli fnm mkcert ]; programs.fish.interactiveShellInit = let fnm = pkgs.lib.getExe pkgs.fnm; in '' diff --git a/users/ethan/profiles/git.nix b/users/ethan/profiles/git.nix index 367757bf..0156f248 100644 --- a/users/ethan/profiles/git.nix +++ b/users/ethan/profiles/git.nix @@ -1,7 +1,6 @@ { programs.git = { - userEmail = "ethan@turkeltaub.dev"; - userName = "Ethan Turkeltaub"; + settings = { user.email = "ethan@turkeltaub.dev"; }; signing.key = "0x690FEBBF6380166A"; }; } From c78bc023cee591602d3e3463179868acacd08843 Mon Sep 17 00:00:00 2001 From: Ethan Turkeltaub Date: Tue, 27 Jan 2026 13:08:44 -0500 Subject: [PATCH 2/5] Fix git aliases --- modules/profiles/home/git/common.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/profiles/home/git/common.nix b/modules/profiles/home/git/common.nix index 126b1274..f93690c3 100644 --- a/modules/profiles/home/git/common.nix +++ b/modules/profiles/home/git/common.nix @@ -7,7 +7,7 @@ settings = { user.name = "Ethan Turkeltaub"; - aliases = let + alias = let gitCommand = lib.getExe config.programs.git.package; fzfCommand = lib.getExe pkgs.fzf; ghCommand = lib.getExe pkgs.gh; From 2c06c4d10c21b71106c1d94c56597074163da2d9 Mon Sep 17 00:00:00 2001 From: Ethan Turkeltaub Date: Wed, 28 Jan 2026 13:38:10 -0500 Subject: [PATCH 3/5] Fix git config --- modules/profiles/home/git/common.nix | 70 ++++++++++++++-------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/modules/profiles/home/git/common.nix b/modules/profiles/home/git/common.nix index f93690c3..19123cfb 100644 --- a/modules/profiles/home/git/common.nix +++ b/modules/profiles/home/git/common.nix @@ -4,49 +4,51 @@ programs.git = { enable = true; - settings = { + settings = let + delta = lib.getExe pkgs.delta; + git = lib.getExe config.programs.git.package; + fzf = lib.getExe pkgs.fzf; + gh = lib.getExe pkgs.gh; + superprune = pkgs.writeShellScript "git-alias-superprune" '' + echo 'Fetching remote then deleting branches that are gone. This may take a moment' + + ${git} fetch -p + + gone=$(git for-each-ref --format '%(refname) %(upstream:track)' refs/heads | awk '$2 == "[gone]" {sub("refs/heads/", "", $1); print $1}') + for branch in $gone; do + ${git} branch -D $branch; + done; + ''; + co = pkgs.writeShellScript "git-alias-co" '' + ${git} checkout "$(${git} branch --sort="-committerdate" | ${fzf} | tr -d '[:space:]')"; + ''; + wipe = pkgs.writeShellScript "git-alias-wipe" '' + ${git} add . + ${git} stash + ''; + in { user.name = "Ethan Turkeltaub"; - alias = let - gitCommand = lib.getExe config.programs.git.package; - fzfCommand = lib.getExe pkgs.fzf; - ghCommand = lib.getExe pkgs.gh; - superprune = pkgs.writeShellScript "git-alias-superprune" '' - echo 'Fetching remote then deleting branches that are gone. This may take a moment' - - ${gitCommand} fetch -p - - gone=$(git for-each-ref --format '%(refname) %(upstream:track)' refs/heads | awk '$2 == "[gone]" {sub("refs/heads/", "", $1); print $1}') - for branch in $gone; do - ${gitCommand} branch -D $branch; - done; - ''; - co = pkgs.writeShellScript "git-alias-co" '' - ${gitCommand} checkout "$(${gitCommand} branch --sort="-committerdate" | ${fzfCommand} | tr -d '[:space:]')"; - ''; - wipe = pkgs.writeShellScript "git-alias-wipe" '' - ${gitCommand} add . - ${gitCommand} stash - ''; - in { + alias = { s = "status"; superprune = "!sh ${superprune}"; co = "!sh ${co}"; wipe = "!sh ${wipe}"; - sync = "!${ghCommand} repo sync"; + sync = "!${gh} repo sync"; }; - extraConfig = let deltaCommand = lib.getExe pkgs.delta; - in { - core.pager = deltaCommand; - interactive.diffFilter = "${deltaCommand} --color-only"; - http = { sslCAinfo = "/etc/ssl/certs/ca-certificates.crt"; }; - color = { - status = "always"; - diff = "always"; - }; - init.defaultBranch = "main"; + core.pager = delta; + + interactive.diffFilter = "${delta} --color-only"; + + http = { sslCAinfo = "/etc/ssl/certs/ca-certificates.crt"; }; + + color = { + status = "always"; + diff = "always"; }; + + init.defaultBranch = "main"; }; ignores = [ "*~" "#*#" ".elc" ".#*" "flycheck_*.el" ".projectile" ]; From b7fea947e881386f8cc7f303cc2fffbee1456aeb Mon Sep 17 00:00:00 2001 From: Ethan Turkeltaub Date: Wed, 28 Jan 2026 13:39:01 -0500 Subject: [PATCH 4/5] Add Emacs to suite --- modules/suites/home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/suites/home.nix b/modules/suites/home.nix index 60ce24c6..c536ba83 100644 --- a/modules/suites/home.nix +++ b/modules/suites/home.nix @@ -9,6 +9,7 @@ with profiles; autojump bat direnv + emacs fish fzf ghostty From 6e733a016ec65550ac68fda2a593ea4b591604dd Mon Sep 17 00:00:00 2001 From: Ethan Turkeltaub Date: Thu, 29 Jan 2026 17:30:54 -0500 Subject: [PATCH 5/5] Use Emacs from Homebrew --- modules/profiles/system/darwin/brew.nix | 3 +++ modules/suites/home.nix | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/profiles/system/darwin/brew.nix b/modules/profiles/system/darwin/brew.nix index 2829f1f6..cc21d00b 100644 --- a/modules/profiles/system/darwin/brew.nix +++ b/modules/profiles/system/darwin/brew.nix @@ -8,6 +8,8 @@ brews = [ "pinentry-mac" ]; + taps = [ "railwaycat/emacsmacport" ]; + casks = [ "1password" "arc" @@ -15,6 +17,7 @@ "dash" "docker-desktop" "elgato-stream-deck" + "emacs-mac-spacemacs-icon" "ghostty" "fantastical" "firefox" diff --git a/modules/suites/home.nix b/modules/suites/home.nix index c536ba83..60ce24c6 100644 --- a/modules/suites/home.nix +++ b/modules/suites/home.nix @@ -9,7 +9,6 @@ with profiles; autojump bat direnv - emacs fish fzf ghostty