From eeedce208047e8cf5c120bc050c6230c0b9690be Mon Sep 17 00:00:00 2001 From: arrayofone <11287980+arrayofone@users.noreply.github.com> Date: Sun, 7 Sep 2025 02:17:27 -0700 Subject: [PATCH 1/9] feat(dotfiles) buncha stuff --- .sops.yaml | 19 +- Taskfile.yml | 30 +- flake.lock | 588 +++++++-------- flake.nix | 8 +- homes/aarch64-darwin/db/default.nix | 24 +- homes/x86_64-linux/arrayofone/default.nix | 16 +- lib/module/default.nix | 2 +- modules/darwin/core/default.nix | 53 ++ modules/darwin/core/dock.nix | 95 +++ modules/darwin/core/fonts.nix | 37 + modules/darwin/core/homebrew.nix | 54 ++ modules/darwin/core/programs.nix | 116 +++ modules/darwin/core/secrets.nix | 28 + modules/darwin/networking/wg/default.nix | 88 +++ modules/home/core/default.nix | 27 +- modules/home/core/editor.nix | 7 +- modules/home/core/env.nix | 8 - modules/home/core/fonts.nix | 32 +- modules/home/core/secrets.nix | 9 +- modules/home/core/shell.nix | 200 +++-- modules/home/core/terminal.nix | 18 + modules/home/core/theme.nix | 86 ++- modules/home/core/zeditor.nix | 689 ++++++++++++++++++ modules/home/dev/default.nix | 9 +- modules/home/dev/modules/flutter/default.nix | 37 + modules/home/dev/modules/go/default.nix | 2 +- modules/home/dev/modules/java/default.nix | 25 - modules/home/gui/desktop/dunst/default.nix | 108 +-- modules/home/gui/desktop/hyprland/default.nix | 329 +++++---- modules/home/gui/desktop/waybar/README.md | 155 ++++ modules/home/gui/desktop/waybar/default.nix | 279 ++++++- modules/nixos/core/default.nix | 1 + modules/nixos/core/fonts.nix | 39 + modules/nixos/core/secrets.nix | 15 +- .../nixos/gui/desktop/hyprland/default.nix | 8 +- modules/nixos/gui/desktop/sddm/default.nix | 12 +- modules/nixos/hardware/nvidia/default.nix | 24 +- .../nixos/networking/headscale/default.nix | 41 -- .../nixos/networking/tailscale/default.nix | 9 - modules/nixos/networking/vpn/proton.nix | 22 - modules/nixos/networking/wg/default.nix | 147 ++-- packages/kotlin-lsp/default.nix | 31 + packages/sddm_theme/default.nix | 4 +- packages/sys/default.nix | 13 +- secrets/_db.yaml | 28 + secrets/arrayofone.yaml | 28 + secrets/baradur.yaml | 26 + secrets/db.yaml | 28 + secrets/dbook.yaml | 26 + secrets/fellowship.yaml | 50 -- shells/digits/default.nix | 55 -- systems/aarch64-darwin/dbook/default.nix | 38 + systems/aarch64-darwin/dbook/networking.nix | 20 + systems/aarch64-darwin/dbook/users.nix | 66 ++ systems/aarch64-darwin/digibook/default.nix | 20 +- .../x86_64-linux/baradur/aws-client-vpn.nix | 6 +- systems/x86_64-linux/baradur/default.nix | 151 ++-- .../baradur/hardware-configuration.nix | 58 +- 58 files changed, 3083 insertions(+), 1061 deletions(-) create mode 100644 modules/darwin/core/default.nix create mode 100644 modules/darwin/core/dock.nix create mode 100644 modules/darwin/core/fonts.nix create mode 100644 modules/darwin/core/homebrew.nix create mode 100644 modules/darwin/core/programs.nix create mode 100644 modules/darwin/core/secrets.nix create mode 100644 modules/darwin/networking/wg/default.nix create mode 100644 modules/home/core/terminal.nix create mode 100644 modules/home/core/zeditor.nix create mode 100644 modules/home/dev/modules/flutter/default.nix delete mode 100644 modules/home/dev/modules/java/default.nix create mode 100644 modules/home/gui/desktop/waybar/README.md create mode 100644 modules/nixos/core/fonts.nix delete mode 100644 modules/nixos/networking/headscale/default.nix delete mode 100644 modules/nixos/networking/tailscale/default.nix delete mode 100644 modules/nixos/networking/vpn/proton.nix create mode 100644 packages/kotlin-lsp/default.nix create mode 100644 secrets/_db.yaml create mode 100644 secrets/arrayofone.yaml create mode 100644 secrets/baradur.yaml create mode 100644 secrets/db.yaml create mode 100644 secrets/dbook.yaml delete mode 100644 secrets/fellowship.yaml delete mode 100644 shells/digits/default.nix create mode 100644 systems/aarch64-darwin/dbook/default.nix create mode 100644 systems/aarch64-darwin/dbook/networking.nix create mode 100644 systems/aarch64-darwin/dbook/users.nix diff --git a/.sops.yaml b/.sops.yaml index 40a112e..53c04b9 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -1,11 +1,22 @@ keys: - - &baradur age1fe2alznmwldqrnlx09n4e7hfc3kflm2h9lmgem54kcadze5kp53qjuyrqy - &arrayofone age19r87m08mt03zg8ustzlx733s4m4wph6vvkd0qxlequfje5k0mawsy68vp2 - - &db age1smv5elusy6hpywadnyfvcf0gph8yqpjyeqcf7spvfgrghd3u55qq6lc9aw + - &baradur age1fe2alznmwldqrnlx09n4e7hfc3kflm2h9lmgem54kcadze5kp53qjuyrqy + - &db age19r87m08mt03zg8ustzlx733s4m4wph6vvkd0qxlequfje5k0mawsy68vp2 + - &dbook age126t4jjumls89dfl83cx3lvukhwad5nte38zeq5uue4m39ex9kfeqtw4r2v creation_rules: - - path_regex: secrets/fellowship.yaml$ + - path_regex: secrets/arrayofone.yaml$ key_groups: - age: - - *baradur - *arrayofone + - path_regex: secrets/baradur.yaml$ + key_groups: + - age: + - *baradur + - path_regex: secrets/db.yaml$ + key_groups: + - age: - *db + - path_regex: secrets/dbook.yaml$ + key_groups: + - age: + - *dbook diff --git a/Taskfile.yml b/Taskfile.yml index 09acc1e..945b051 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -47,11 +47,11 @@ tasks: cmds: - sudo nixos-rebuild dry-run --flake {{.FLAKE_DIR}}#{{.NIXOS_HOST}} - vm:nixos: - desc: "Build and run NixOS configuration in VM" - cmds: - - sudo nixos-rebuild build-vm --flake {{.FLAKE_DIR}}#{{.NIXOS_HOST}} - - echo "VM built! Run: ./result/bin/run-{{.NIXOS_HOST}}-vm" + # vm:nixos: + # desc: "Build and run NixOS configuration in VM" + # cmds: + # - sudo nixos-rebuild build-vm --flake {{.FLAKE_DIR}}#{{.NIXOS_HOST}} + # - echo "VM built! Run: ./result/bin/run-{{.NIXOS_HOST}}-vm" # ============================================================================= # HOME MANAGER OPERATIONS @@ -169,6 +169,26 @@ tasks: cmds: - sops updatekeys {{.FLAKE_DIR}}/secrets/fellowship.yaml + sops:user:ssh-gen-private: + cmds: + - nix run nixpkgs#ssh-to-age -- -private-key -i ~/.ssh/sops-nix > ~/.config/sops/age/keys.txt + + sops:user:gen-public: + cmds: + - nix run nixpkgs#age-keygen -y ~/.config/sops/age/keys.txt + + sops:system:ssh-gen-private: + cmds: + - ssh-keygen -A + - mkdir -p /var/lib/sops-nix + # - rm -rf /var/lib/sops-nix/key.txt + # - touch /var/lib/sops-nix/key.txt + - nix run nixpkgs#ssh-to-age -- -private-key -i /etc/ssh/ssh_host_ed25519_key > /var/lib/sops-nix/key.txt + + sops:system:gen-public: + cmds: + - nix shell nixpkgs#age -c age-keygen -y /var/lib/sops-nix/key.txt + age:keygen: desc: "Generate new age key" cmds: diff --git a/flake.lock b/flake.lock index d480ef1..ec98999 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ ] }, "locked": { - "lastModified": 1755946532, - "narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=", + "lastModified": 1764714051, + "narHash": "sha256-AjcMlM3UoavFoLzr0YrcvsIxALShjyvwe+o7ikibpCM=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada", + "rev": "a43bedcceced5c21ad36578ed823e6099af78214", "type": "github" }, "original": { @@ -38,11 +38,11 @@ "fromYaml": "fromYaml" }, "locked": { - "lastModified": 1746562888, - "narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=", + "lastModified": 1755819240, + "narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=", "owner": "SenchoPens", "repo": "base16.nix", - "rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89", + "rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6", "type": "github" }, "original": { @@ -54,27 +54,28 @@ "base16-fish": { "flake": false, "locked": { - "lastModified": 1622559957, - "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", + "lastModified": 1765809053, + "narHash": "sha256-XCUQLoLfBJ8saWms2HCIj4NEN+xNsWBlU1NrEPcQG4s=", "owner": "tomyun", "repo": "base16-fish", - "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", + "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", "type": "github" }, "original": { "owner": "tomyun", "repo": "base16-fish", + "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", "type": "github" } }, "base16-helix": { "flake": false, "locked": { - "lastModified": 1752979451, - "narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=", + "lastModified": 1760703920, + "narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=", "owner": "tinted-theming", "repo": "base16-helix", - "rev": "27cf1e66e50abc622fb76a3019012dc07c678fac", + "rev": "d646af9b7d14bff08824538164af99d0c521b185", "type": "github" }, "original": { @@ -103,16 +104,16 @@ "brew-src": { "flake": false, "locked": { - "lastModified": 1753461463, - "narHash": "sha256-kGc7pRH0diLzKmOHsEFA8sZ9NJpgT+tqxAMsuqNd5Po=", + "lastModified": 1763638478, + "narHash": "sha256-n/IMowE9S23ovmTkKX7KhxXC2Yq41EAVFR2FBIXPcT8=", "owner": "Homebrew", "repo": "brew", - "rev": "4d14be89e99a45181c18e96a5f19a5b43343cc0f", + "rev": "fbfdbaba008189499958a7aeb1e2c36ab10c067d", "type": "github" }, "original": { "owner": "Homebrew", - "ref": "4.5.13", + "ref": "5.0.3", "repo": "brew", "type": "github" } @@ -122,11 +123,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1756293646, - "narHash": "sha256-VgJtXf3j4/4nJJAk7Ol2un7U6+7tN54sj4nWP+wpYSo=", + "lastModified": 1765485905, + "narHash": "sha256-fk6zFzzcwz6su99K7UTxS2497+z/Cdk3FzNsacsmZKA=", "owner": "catppuccin", "repo": "nix", - "rev": "f2e3c4c73d4fbd5e2c24ae44075ded300fe7b52b", + "rev": "b49c675acd80931fc8b54290920a90189b461dcf", "type": "github" }, "original": { @@ -142,11 +143,11 @@ ] }, "locked": { - "lastModified": 1755825449, - "narHash": "sha256-XkiN4NM9Xdy59h69Pc+Vg4PxkSm9EWl6u7k6D5FZ5cM=", + "lastModified": 1765684049, + "narHash": "sha256-svCS2r984qEowMT0y3kCrsD/m0J6zaF5I/UusS7QaH0=", "owner": "nix-darwin", "repo": "nix-darwin", - "rev": "8df64f819698c1fee0c2969696f54a843b2231e8", + "rev": "9b628e171bfaea1a3d1edf31eee46251e0fe4a33", "type": "github" }, "original": { @@ -163,11 +164,11 @@ ] }, "locked": { - "lastModified": 1741473158, - "narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=", + "lastModified": 1764011051, + "narHash": "sha256-M7SZyPZiqZUR/EiiBJnmyUbOi5oE/03tCeFrTiUZchI=", "owner": "numtide", "repo": "devshell", - "rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0", + "rev": "17ed8d9744ebe70424659b0ef74ad6d41fc87071", "type": "github" }, "original": { @@ -179,25 +180,22 @@ "ethereum-nix": { "inputs": { "devshell": "devshell", - "flake-compat": "flake-compat", "flake-parts": "flake-parts", "flake-utils": "flake-utils", "foundry-nix": "foundry-nix", - "hercules-ci-effects": "hercules-ci-effects", "nixpkgs": [ "nixpkgs" ], - "nixpkgs-2311": "nixpkgs-2311", "nixpkgs-unstable": "nixpkgs-unstable", "systems": "systems", "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1756233487, - "narHash": "sha256-TO0W5dF2Da/dWI1jKBUJsOV9HB0di3233ZF/fspCRGs=", + "lastModified": 1765899520, + "narHash": "sha256-TGvi2rjgJlF4PiaQf8z1jx03V3j7boZZD7uATwcYIhQ=", "owner": "nix-community", "repo": "ethereum.nix", - "rev": "7a8739707e003a2b3cb509e100ccdd2cc1753031", + "rev": "4e0823d882457b986bb5041d943a5d8b7876cafa", "type": "github" }, "original": { @@ -209,11 +207,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1748383148, - "narHash": "sha256-pGvD/RGuuPf/4oogsfeRaeMm6ipUIznI2QSILKjKzeA=", + "lastModified": 1764724327, + "narHash": "sha256-OkFLrD3pFR952TrjQi1+Vdj604KLcMnkpa7lkW7XskI=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "4eb2714fbed2b80e234312611a947d6cb7d70caf", + "rev": "66b7c635763d8e6eb86bd766de5a1e1fbfcc1047", "type": "github" }, "original": { @@ -223,28 +221,13 @@ } }, "flake-compat": { - "locked": { - "lastModified": 1746162366, - "narHash": "sha256-5SSSZ/oQkwfcAz/o/6TlejlVGqeK08wyREBQ5qFFPhM=", - "owner": "nix-community", - "repo": "flake-compat", - "rev": "0f158086a2ecdbb138cd0429410e44994f1b7e4b", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_2": { "flake": false, "locked": { - "lastModified": 1747046372, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "lastModified": 1761588595, + "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", "owner": "edolstra", "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", "type": "github" }, "original": { @@ -253,14 +236,14 @@ "type": "github" } }, - "flake-compat_3": { + "flake-compat_2": { "flake": false, "locked": { - "lastModified": 1747046372, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "lastModified": 1765121682, + "narHash": "sha256-4VBOP18BFeiPkyhy9o4ssBNQEvfvv1kXkasAYd0+rrA=", "owner": "edolstra", "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "rev": "65f23138d8d09a92e30f1e5c87611b23ef451bf3", "type": "github" }, "original": { @@ -269,7 +252,7 @@ "type": "github" } }, - "flake-compat_4": { + "flake-compat_3": { "flake": false, "locked": { "lastModified": 1650374568, @@ -290,11 +273,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1754487366, - "narHash": "sha256-pHYj8gUBapuUzKV/kN/tR3Zvqc7o6gdFB9XKXIp1SQ8=", + "lastModified": 1763759067, + "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "af66ad14b28a127c5c0f3bbb298218fc63528a18", + "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", "type": "github" }, "original": { @@ -311,11 +294,11 @@ ] }, "locked": { - "lastModified": 1751413152, - "narHash": "sha256-Tyw1RjYEsp5scoigs1384gIg6e0GoBVjms4aXFfRssQ=", + "lastModified": 1763759067, + "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "77826244401ea9de6e3bac47c2db46005e1f30b5", + "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", "type": "github" }, "original": { @@ -394,11 +377,11 @@ ] }, "locked": { - "lastModified": 1754212248, - "narHash": "sha256-sbmTD2L72nbZPFMT/GTHFt9N8/9AFi23FBY25wrt7zM=", + "lastModified": 1764753179, + "narHash": "sha256-2u7C/aKEcCpND60JfREYhKaMg/0cZ/pk1HviizWrCl8=", "owner": "shazow", "repo": "foundry.nix", - "rev": "b070c157f5dfcb4d67de1d1969668d6a633da652", + "rev": "8c21d3ac7a03da27af55d3c94fe95620c9d6f316", "type": "github" }, "original": { @@ -449,43 +432,20 @@ "gnome-shell": { "flake": false, "locked": { - "lastModified": 1748186689, - "narHash": "sha256-UaD7Y9f8iuLBMGHXeJlRu6U1Ggw5B9JnkFs3enZlap0=", + "host": "gitlab.gnome.org", + "lastModified": 1764524476, + "narHash": "sha256-bTmNn3Q4tMQ0J/P0O5BfTQwqEnCiQIzOGef9/aqAZvk=", "owner": "GNOME", "repo": "gnome-shell", - "rev": "8c88f917db0f1f0d80fa55206c863d3746fa18d0", - "type": "github" + "rev": "c0e1ad9f0f703fd0519033b8f46c3267aab51a22", + "type": "gitlab" }, "original": { + "host": "gitlab.gnome.org", "owner": "GNOME", - "ref": "48.2", + "ref": "gnome-49", "repo": "gnome-shell", - "type": "github" - } - }, - "hercules-ci-effects": { - "inputs": { - "flake-parts": [ - "ethereum-nix", - "flake-parts" - ], - "nixpkgs": [ - "ethereum-nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1755233722, - "narHash": "sha256-AavrbMltJKcC2Fx0lfJoZfmy7g87ebXU0ddVenhajLA=", - "owner": "hercules-ci", - "repo": "hercules-ci-effects", - "rev": "99e03e72e3f7e13506f80ef9ebaedccb929d84d0", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "hercules-ci-effects", - "type": "github" + "type": "gitlab" } }, "home-manager": { @@ -495,11 +455,11 @@ ] }, "locked": { - "lastModified": 1756261190, - "narHash": "sha256-eiy0klFK5EVJLNilutR7grsZN/7Itj9DyD75eyOf83k=", + "lastModified": 1765860045, + "narHash": "sha256-7Lxp/PfOy4h3QIDtmWG/EgycaswqRSkDX4DGtet14NE=", "owner": "nix-community", "repo": "home-manager", - "rev": "77f348da3176dc68b20a73dab94852a417daf361", + "rev": "09de9577d47d8bffb11c449b6a3d24e32ac16c99", "type": "github" }, "original": { @@ -511,11 +471,11 @@ "homebrew-bun": { "flake": false, "locked": { - "lastModified": 1756122803, - "narHash": "sha256-ws8JQtm7BoA7Zx2zbCsMapfyqzCxuBnjdF23Gef5/eY=", + "lastModified": 1765083303, + "narHash": "sha256-/tEX9vaQcC5Etx+voCsu0LOjacPMTIKILgmsp94PJn8=", "owner": "oven-sh", "repo": "homebrew-bun", - "rev": "fac54c7bc48bf285b1fd08487582526e059be64d", + "rev": "e422bc5378b0c2aedc89a00150ca8bc4b3cfa473", "type": "github" }, "original": { @@ -527,11 +487,11 @@ "homebrew-cask": { "flake": false, "locked": { - "lastModified": 1756326097, - "narHash": "sha256-KjjOy+bm6qnU3cpcf5vJKCBkJlVDOYXa0Vd5MF+L3JA=", + "lastModified": 1765922611, + "narHash": "sha256-NcU4GHpFHvwm+YD6EesMLEAhKpgXguHUovksDYVu+jc=", "owner": "homebrew", "repo": "homebrew-cask", - "rev": "226ed4625d5ff8d29e9fc2ed6faf260c34848dbe", + "rev": "ca6e880814bb78752dfc7caaf8a11e58c225cc2d", "type": "github" }, "original": { @@ -543,11 +503,11 @@ "homebrew-core": { "flake": false, "locked": { - "lastModified": 1756329258, - "narHash": "sha256-ifOeyHNZ02ZeTOLwRaQAHoRox9PCcs9+x9VZnWnvwD0=", + "lastModified": 1765920865, + "narHash": "sha256-vfCesfCRhE4BJJHK2UbTNkWBOcUQeoe4z7AuLNtFoTA=", "owner": "homebrew", "repo": "homebrew-core", - "rev": "0bd7ebe0166eb3aeaa8d9b3323110432fd21f29b", + "rev": "09ad6aa18dafae921d6663b40c87f3f620542c1c", "type": "github" }, "original": { @@ -601,11 +561,11 @@ ] }, "locked": { - "lastModified": 1755678602, - "narHash": "sha256-uEC5O/NIUNs1zmc1aH1+G3GRACbODjk2iS0ET5hXtuk=", + "lastModified": 1763733840, + "narHash": "sha256-JnET78yl5RvpGuDQy3rCycOCkiKoLr5DN1fPhRNNMco=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "157cc52065a104fc3b8fa542ae648b992421d1c7", + "rev": "8f1bec691b2d198c60cccabca7a94add2df4ed1a", "type": "github" }, "original": { @@ -630,11 +590,11 @@ ] }, "locked": { - "lastModified": 1750621377, - "narHash": "sha256-8u6b5oAdX0rCuoR8wFenajBRmI+mzbpNig6hSCuWUzE=", + "lastModified": 1763733840, + "narHash": "sha256-JnET78yl5RvpGuDQy3rCycOCkiKoLr5DN1fPhRNNMco=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "b3d628d01693fb9bb0a6690cd4e7b80abda04310", + "rev": "8f1bec691b2d198c60cccabca7a94add2df4ed1a", "type": "github" }, "original": { @@ -653,11 +613,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1756291201, - "narHash": "sha256-YzRWE3rCnsY0WDRJcn4KvyWUoe+5zdkUYNIaHGP9BZ4=", + "lastModified": 1762027241, + "narHash": "sha256-w0NhWx95Xao6Dh3G1p7G1cHwGBknwPVPG5VRghk3LSg=", "owner": "hyprwm", "repo": "hypridle", - "rev": "5430b73ddf148651bcf35fa39ed4d757c7534028", + "rev": "f3d1f3b232a5e3267008568196397b03fab244d2", "type": "github" }, "original": { @@ -671,22 +631,23 @@ "aquamarine": "aquamarine", "hyprcursor": "hyprcursor", "hyprgraphics": "hyprgraphics", + "hyprland-guiutils": "hyprland-guiutils", "hyprland-protocols": "hyprland-protocols_2", - "hyprland-qtutils": "hyprland-qtutils", "hyprlang": "hyprlang_2", "hyprutils": "hyprutils_2", "hyprwayland-scanner": "hyprwayland-scanner_2", + "hyprwire": "hyprwire", "nixpkgs": "nixpkgs_3", "pre-commit-hooks": "pre-commit-hooks", "systems": "systems_3", "xdph": "xdph" }, "locked": { - "lastModified": 1756325904, - "narHash": "sha256-sfE2ta6RgWpXuqh7UI+T9wFofp2X+AV4yD140P9s494=", + "lastModified": 1765902757, + "narHash": "sha256-NUOxXjV94sSVoCCjiFC1wECT8A+kAf7JrhJZzHnzWos=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "378e130f1426648d8d734049800128f9882805bf", + "rev": "709855842068315bb2109d8f422a70c2b5ed1931", "type": "github" }, "original": { @@ -695,69 +656,90 @@ "type": "github" } }, - "hyprland-plugins": { + "hyprland-guiutils": { "inputs": { - "hyprland": [ - "hyprland" + "aquamarine": [ + "hyprland", + "aquamarine" + ], + "hyprgraphics": [ + "hyprland", + "hyprgraphics" + ], + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "hyprtoolkit": "hyprtoolkit", + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" ], "nixpkgs": [ - "hyprland-plugins", "hyprland", "nixpkgs" ], "systems": [ - "hyprland-plugins", "hyprland", "systems" ] }, "locked": { - "lastModified": 1756325158, - "narHash": "sha256-aJ9jAYtZ64MWBpWPfH1q+t6U9b6kJWc2yK9Vrlj6fZY=", + "lastModified": 1764812575, + "narHash": "sha256-1bK1yGgaR82vajUrt6z+BSljQvFn91D74WJ/vJsydtE=", "owner": "hyprwm", - "repo": "hyprland-plugins", - "rev": "bf843fc6adf90d43a5dd7742e9df61d395ba780d", + "repo": "hyprland-guiutils", + "rev": "fd321368a40c782cfa299991e5584ca338e36ebe", "type": "github" }, "original": { "owner": "hyprwm", - "repo": "hyprland-plugins", + "repo": "hyprland-guiutils", "type": "github" } }, - "hyprland-protocols": { + "hyprland-plugins": { "inputs": { + "hyprland": [ + "hyprland" + ], "nixpkgs": [ - "hypridle", + "hyprland-plugins", + "hyprland", "nixpkgs" ], "systems": [ - "hypridle", + "hyprland-plugins", + "hyprland", "systems" ] }, "locked": { - "lastModified": 1749046714, - "narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", + "lastModified": 1765207366, + "narHash": "sha256-s0jO2kEj5cLLTgTblKnAKjqt3MjYFnmyrQT3SxiUugM=", "owner": "hyprwm", - "repo": "hyprland-protocols", - "rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", + "repo": "hyprland-plugins", + "rev": "e058ea23b80775cf20c675d064678416df2d9d04", "type": "github" }, "original": { "owner": "hyprwm", - "repo": "hyprland-protocols", + "repo": "hyprland-plugins", "type": "github" } }, - "hyprland-protocols_2": { + "hyprland-protocols": { "inputs": { "nixpkgs": [ - "hyprland", + "hypridle", "nixpkgs" ], "systems": [ - "hyprland", + "hypridle", "systems" ] }, @@ -775,51 +757,8 @@ "type": "github" } }, - "hyprland-qt-support": { - "inputs": { - "hyprlang": [ - "hyprland", - "hyprland-qtutils", - "hyprlang" - ], - "nixpkgs": [ - "hyprland", - "hyprland-qtutils", - "nixpkgs" - ], - "systems": [ - "hyprland", - "hyprland-qtutils", - "systems" - ] - }, - "locked": { - "lastModified": 1749154592, - "narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=", - "owner": "hyprwm", - "repo": "hyprland-qt-support", - "rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-qt-support", - "type": "github" - } - }, - "hyprland-qtutils": { + "hyprland-protocols_2": { "inputs": { - "hyprland-qt-support": "hyprland-qt-support", - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "hyprutils": [ - "hyprland", - "hyprland-qtutils", - "hyprlang", - "hyprutils" - ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -830,16 +769,16 @@ ] }, "locked": { - "lastModified": 1753819801, - "narHash": "sha256-tHe6XeNeVeKapkNM3tcjW4RuD+tB2iwwoogWJOtsqTI=", + "lastModified": 1759610243, + "narHash": "sha256-+KEVnKBe8wz+a6dTLq8YDcF3UrhQElwsYJaVaHXJtoI=", "owner": "hyprwm", - "repo": "hyprland-qtutils", - "rev": "b308a818b9dcaa7ab8ccab891c1b84ebde2152bc", + "repo": "hyprland-protocols", + "rev": "bd153e76f751f150a09328dbdeb5e4fab9d23622", "type": "github" }, "original": { "owner": "hyprwm", - "repo": "hyprland-qtutils", + "repo": "hyprland-protocols", "type": "github" } }, @@ -888,11 +827,11 @@ ] }, "locked": { - "lastModified": 1753622892, - "narHash": "sha256-0K+A+gmOI8IklSg5It1nyRNv0kCNL51duwnhUO/B8JA=", + "lastModified": 1764612430, + "narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "23f0debd2003f17bd65f851cd3f930cff8a8c809", + "rev": "0d00dc118981531aa731150b6ea551ef037acddd", "type": "github" }, "original": { @@ -917,11 +856,11 @@ ] }, "locked": { - "lastModified": 1750371198, - "narHash": "sha256-/iuJ1paQOBoSLqHflRNNGyroqfF/yvPNurxzcCT0cAE=", + "lastModified": 1764612430, + "narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "cee01452bca58d6cadb3224e21e370de8bc20f0b", + "rev": "0d00dc118981531aa731150b6ea551ef037acddd", "type": "github" }, "original": { @@ -940,11 +879,11 @@ "systems": "systems_4" }, "locked": { - "lastModified": 1756305651, - "narHash": "sha256-KttBtdPHDCuD+BT0da8DmBarv6k+9GA9INpeDLLgpc8=", + "lastModified": 1765358139, + "narHash": "sha256-1hIq5gSfV0xc7gaBQDVk3XPv47vjhlc8qbAskOqT4b0=", "owner": "hyprwm", "repo": "hyprlock", - "rev": "8d0e56998e299ae42f3fd8ede5bb5c396193cdbc", + "rev": "e2da7c6b1fceee9358229a3b5ca48127cd2c427c", "type": "github" }, "original": { @@ -953,6 +892,58 @@ "type": "github" } }, + "hyprtoolkit": { + "inputs": { + "aquamarine": [ + "hyprland", + "hyprland-guiutils", + "aquamarine" + ], + "hyprgraphics": [ + "hyprland", + "hyprland-guiutils", + "hyprgraphics" + ], + "hyprlang": [ + "hyprland", + "hyprland-guiutils", + "hyprlang" + ], + "hyprutils": [ + "hyprland", + "hyprland-guiutils", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprland-guiutils", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "hyprland-guiutils", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland-guiutils", + "systems" + ] + }, + "locked": { + "lastModified": 1764592794, + "narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=", + "owner": "hyprwm", + "repo": "hyprtoolkit", + "rev": "5cfe0743f0e608e1462972303778d8a0859ee63e", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprtoolkit", + "type": "github" + } + }, "hyprutils": { "inputs": { "nixpkgs": [ @@ -990,11 +981,11 @@ ] }, "locked": { - "lastModified": 1756117388, - "narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=", + "lastModified": 1764962281, + "narHash": "sha256-rGbEMhTTyTzw4iyz45lch5kXseqnqcEpmrHdy+zHsfo=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0", + "rev": "fe686486ac867a1a24f99c753bb40ffed338e4b0", "type": "github" }, "original": { @@ -1015,11 +1006,11 @@ ] }, "locked": { - "lastModified": 1751061882, - "narHash": "sha256-g9n8Vrbx+2JYM170P9BbvGHN39Wlkr4U+V2WLHQsXL8=", + "lastModified": 1764962281, + "narHash": "sha256-rGbEMhTTyTzw4iyz45lch5kXseqnqcEpmrHdy+zHsfo=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "4737241eaf8a1e51671a2a088518071f9a265cf4", + "rev": "fe686486ac867a1a24f99c753bb40ffed338e4b0", "type": "github" }, "original": { @@ -1065,11 +1056,11 @@ ] }, "locked": { - "lastModified": 1755184602, - "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", + "lastModified": 1763640274, + "narHash": "sha256-Uan1Nl9i4TF/kyFoHnTq1bd/rsWh4GAK/9/jDqLbY5A=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", + "rev": "f6cf414ca0e16a4d30198fd670ec86df3c89f671", "type": "github" }, "original": { @@ -1090,11 +1081,11 @@ ] }, "locked": { - "lastModified": 1750371869, - "narHash": "sha256-lGk4gLjgZQ/rndUkzmPYcgbHr8gKU5u71vyrjnwfpB4=", + "lastModified": 1763640274, + "narHash": "sha256-Uan1Nl9i4TF/kyFoHnTq1bd/rsWh4GAK/9/jDqLbY5A=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "aa38edd6e3e277ae6a97ea83a69261a5c3aab9fd", + "rev": "f6cf414ca0e16a4d30198fd670ec86df3c89f671", "type": "github" }, "original": { @@ -1103,16 +1094,45 @@ "type": "github" } }, + "hyprwire": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1764872015, + "narHash": "sha256-INI9AVrQG5nJZFvGPSiUZ9FEUZJLfGdsqjF1QSak7Gc=", + "owner": "hyprwm", + "repo": "hyprwire", + "rev": "7997451dcaab7b9d9d442f18985d514ec5891608", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwire", + "type": "github" + } + }, "nix-homebrew": { "inputs": { "brew-src": "brew-src" }, "locked": { - "lastModified": 1754250993, - "narHash": "sha256-MEin+qoQKtFC1b0f4tnQ+Z82BQWSCgh6Ef7rpmH9gig=", + "lastModified": 1764473698, + "narHash": "sha256-C91gPgv6udN5WuIZWNehp8qdLqlrzX6iF/YyboOj6XI=", "owner": "zhaofengli", "repo": "nix-homebrew", - "rev": "314d057294e79bc2596972126b84c6f9f144499a", + "rev": "6a8ab60bfd66154feeaa1021fc3b32684814a62a", "type": "github" }, "original": { @@ -1181,15 +1201,15 @@ }, "nixos-wsl": { "inputs": { - "flake-compat": "flake-compat_3", + "flake-compat": "flake-compat_2", "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1755261305, - "narHash": "sha256-EOqCupB5X5WoGVHVcfOZcqy0SbKWNuY3kq+lj1wHdu8=", + "lastModified": 1765841014, + "narHash": "sha256-55V0AJ36V5Egh4kMhWtDh117eE3GOjwq5LhwxDn9eHg=", "owner": "nix-community", "repo": "NixOS-WSL", - "rev": "203a7b463f307c60026136dd1191d9001c43457f", + "rev": "be4af8042e7a61fa12fda58fe9a3b3babdefe17b", "type": "github" }, "original": { @@ -1200,11 +1220,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1755615617, - "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", + "lastModified": 1763966396, + "narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "20075955deac2583bb12f07151c2df830ef346b4", + "rev": "5ae3b07d8d6527c42f17c876e404993199144b6a", "type": "github" }, "original": { @@ -1214,29 +1234,13 @@ "type": "github" } }, - "nixpkgs-2311": { - "locked": { - "lastModified": 1701282334, - "narHash": "sha256-MxCVrXY6v4QmfTwIysjjaX0XUhqBbxTWWB4HXtDYsdk=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "057f9aecfb71c4437d2b27d3323df7f93c010b7e", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "23.11", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs-lib": { "locked": { - "lastModified": 1754788789, - "narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=", + "lastModified": 1761765539, + "narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "a73b9c743612e4244d865a2fdee11865283c04e6", + "rev": "719359f4562934ae99f5443f20aa06c2ffff91fc", "type": "github" }, "original": { @@ -1247,11 +1251,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1755829505, - "narHash": "sha256-4/Jd+LkQ2ssw8luQVkqVs9spDBVE6h/u/hC/tzngsPo=", + "lastModified": 1765270179, + "narHash": "sha256-g2a4MhRKu4ymR4xwo+I+auTknXt/+j37Lnf0Mvfl1rE=", "owner": "nixos", "repo": "nixpkgs", - "rev": "f937f8ecd1c70efd7e9f90ba13dfb400cf559de4", + "rev": "677fbe97984e7af3175b6c121f3c39ee5c8d62c9", "type": "github" }, "original": { @@ -1279,11 +1283,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1756266583, - "narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=", + "lastModified": 1764950072, + "narHash": "sha256-BmPWzogsG2GsXZtlT+MTcAWeDK5hkbGRZTeZNW42fwA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2", + "rev": "f61125a668a320878494449750330ca58b78c557", "type": "github" }, "original": { @@ -1295,11 +1299,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1751011381, - "narHash": "sha256-krGXKxvkBhnrSC/kGBmg5MyupUUT5R6IBCLEzx9jhMM=", + "lastModified": 1765186076, + "narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "30e2e2857ba47844aa71991daa6ed1fc678bcbb7", + "rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8", "type": "github" }, "original": { @@ -1311,11 +1315,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1754725699, - "narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=", + "lastModified": 1765472234, + "narHash": "sha256-9VvC20PJPsleGMewwcWYKGzDIyjckEz8uWmT0vCDYK0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054", + "rev": "2fbfb1d73d239d2402a8fe03963e37aab15abe8b", "type": "github" }, "original": { @@ -1327,11 +1331,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1756266583, - "narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=", + "lastModified": 1765779637, + "narHash": "sha256-KJ2wa/BLSrTqDjbfyNx70ov/HdgNBCBBSQP3BIzKnv4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2", + "rev": "1306659b587dc277866c7b69eb97e5f07864d8c4", "type": "github" }, "original": { @@ -1343,11 +1347,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1744868846, - "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", + "lastModified": 1765457389, + "narHash": "sha256-ddhDtNYvleZeYF7g7TRFSmuQuZh7HCgqstg5YBGwo5s=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", + "rev": "f997fa0f94fb1ce55bccb97f60d41412ae8fde4c", "type": "github" }, "original": { @@ -1369,11 +1373,11 @@ ] }, "locked": { - "lastModified": 1751906969, - "narHash": "sha256-BSQAOdPnzdpOuCdAGSJmefSDlqmStFNScEnrWzSqKPw=", + "lastModified": 1764773531, + "narHash": "sha256-mCBl7MD1WZ7yCG6bR9MmpPO2VydpNkWFgnslJRIT1YU=", "owner": "nix-community", "repo": "NUR", - "rev": "ddb679f4131e819efe3bbc6457ba19d7ad116f25", + "rev": "1d9616689e98beded059ad0384b9951e967a17fa", "type": "github" }, "original": { @@ -1384,7 +1388,7 @@ }, "pre-commit-hooks": { "inputs": { - "flake-compat": "flake-compat_2", + "flake-compat": "flake-compat", "gitignore": "gitignore", "nixpkgs": [ "hyprland", @@ -1392,11 +1396,11 @@ ] }, "locked": { - "lastModified": 1755960406, - "narHash": "sha256-RF7j6C1TmSTK9tYWO6CdEMtg6XZaUKcvZwOCD2SICZs=", + "lastModified": 1765016596, + "narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "e891a93b193fcaf2fc8012d890dc7f0befe86ec2", + "rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c", "type": "github" }, "original": { @@ -1429,18 +1433,18 @@ }, "snowfall-lib": { "inputs": { - "flake-compat": "flake-compat_4", + "flake-compat": "flake-compat_3", "flake-utils-plus": "flake-utils-plus", "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1736130495, - "narHash": "sha256-4i9nAJEZFv7vZMmrE0YG55I3Ggrtfo5/T07JEpEZ/RM=", + "lastModified": 1765361626, + "narHash": "sha256-kX0Dp/kYSRbQ+yd9e3lmmUWdNbipufvKfL2IzbrSpnY=", "owner": "snowfallorg", "repo": "lib", - "rev": "02d941739f98a09e81f3d2d9b3ab08918958beac", + "rev": "c566ad8b7352c30ec3763435de7c8f1c46ebb357", "type": "github" }, "original": { @@ -1454,11 +1458,11 @@ "nixpkgs": "nixpkgs_7" }, "locked": { - "lastModified": 1754988908, - "narHash": "sha256-t+voe2961vCgrzPFtZxha0/kmFSHFobzF00sT8p9h0U=", + "lastModified": 1765836173, + "narHash": "sha256-hWRYfdH2ONI7HXbqZqW8Q1y9IRbnXWvtvt/ONZovSNY=", "owner": "Mic92", "repo": "sops-nix", - "rev": "3223c7a92724b5d804e9988c6b447a0d09017d48", + "rev": "443a7f2e7e118c4fc63b7fae05ab3080dd0e5c63", "type": "github" }, "original": { @@ -1488,11 +1492,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1755997543, - "narHash": "sha256-/fejmCQ7AWa655YxyPxRDbhdU7c5+wYsFSjmEMXoBCM=", + "lastModified": 1765897595, + "narHash": "sha256-NgTRxiEC5y96zrhdBygnY+mSzk5FWMML39PcRGVJmxg=", "owner": "danth", "repo": "stylix", - "rev": "f47c0edcf71e802378b1b7725fa57bb44fe85ee8", + "rev": "e6829552d4bb659ebab00f08c61d8c62754763f3", "type": "github" }, "original": { @@ -1627,11 +1631,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1750770351, - "narHash": "sha256-LI+BnRoFNRa2ffbe3dcuIRYAUcGklBx0+EcFxlHj0SY=", + "lastModified": 1763914658, + "narHash": "sha256-Hju0WtMf3iForxtOwXqGp3Ynipo0EYx1AqMKLPp9BJw=", "owner": "tinted-theming", "repo": "schemes", - "rev": "5a775c6ffd6e6125947b393872cde95867d85a2a", + "rev": "0f6be815d258e435c9b137befe5ef4ff24bea32c", "type": "github" }, "original": { @@ -1643,11 +1647,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1751159871, - "narHash": "sha256-UOHBN1fgHIEzvPmdNMHaDvdRMgLmEJh2hNmDrp3d3LE=", + "lastModified": 1764465359, + "narHash": "sha256-lbSVPqLEk2SqMrnpvWuKYGCaAlfWFMA6MVmcOFJjdjE=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "bded5e24407cec9d01bd47a317d15b9223a1546c", + "rev": "edf89a780e239263cc691a987721f786ddc4f6aa", "type": "github" }, "original": { @@ -1659,11 +1663,11 @@ "tinted-zed": { "flake": false, "locked": { - "lastModified": 1751158968, - "narHash": "sha256-ksOyv7D3SRRtebpXxgpG4TK8gZSKFc4TIZpR+C98jX8=", + "lastModified": 1764464512, + "narHash": "sha256-rCD/pAhkMdCx6blsFwxIyvBJbPZZ1oL2sVFrH07lmqg=", "owner": "tinted-theming", "repo": "base16-zed", - "rev": "86a470d94204f7652b906ab0d378e4231a5b3384", + "rev": "907dbba5fb8cf69ebfd90b00813418a412d0a29a", "type": "github" }, "original": { @@ -1680,11 +1684,11 @@ ] }, "locked": { - "lastModified": 1755934250, - "narHash": "sha256-CsDojnMgYsfshQw3t4zjRUkmMmUdZGthl16bXVWgRYU=", + "lastModified": 1762938485, + "narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "74e1a52d5bd9430312f8d1b8b0354c92c17453e5", + "rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4", "type": "github" }, "original": { @@ -1721,11 +1725,11 @@ ] }, "locked": { - "lastModified": 1755354946, - "narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=", + "lastModified": 1761431178, + "narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0", + "rev": "4b8801228ff958d028f588f0c2b911dbf32297f9", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 8014eda..4baafdd 100644 --- a/flake.nix +++ b/flake.nix @@ -16,8 +16,6 @@ sops-nix.url = "github:Mic92/sops-nix"; - # headscale.url = "github:juanfont/headscale"; - stylix = { url = "github:danth/stylix"; inputs.nixpkgs.follows = "nixpkgs"; @@ -94,10 +92,6 @@ lib.mkFlake { src = ./.; - shells = { - default = "digits"; - }; - channels-config = { allowUnfree = true; permittedInsecurePackages = [ ]; @@ -119,7 +113,7 @@ ) ]; - systems.hosts.digibook.modules = with inputs; [ + systems.hosts.dbook.modules = with inputs; [ # # An existing Linux builder is needed to initially bootstrap `nix-rosetta-builder`. # # If one isn't already available: comment out the `nix-rosetta-builder` module below, # # uncomment this `linux-builder` module, and run `darwin-rebuild switch`: diff --git a/homes/aarch64-darwin/db/default.nix b/homes/aarch64-darwin/db/default.nix index 9ce7277..5468570 100644 --- a/homes/aarch64-darwin/db/default.nix +++ b/homes/aarch64-darwin/db/default.nix @@ -1,18 +1,20 @@ -{ pkgs, ... }: { - fellowship.home.dev.enable = true; + config, + lib, + pkgs, + ... +}: +{ + fellowship.home = { + dev.enable = true; + dev_modules.go.enable = lib.mkForce false; + dev_modules.flutter.enable = lib.mkForce false; + }; - programs.zsh.envExtra = '' - export JAVA_HOME="$(/usr/libexec/java_home -v 21)" - export GCP_ACCOUNT_EMAIL=darren@digits.com - export DIGITS_REPO_PATH=$HOME/digits - ''; + programs.zsh.envExtra = ''''; home = { - packages = with pkgs; [ - google-cloud-sdk - claude-code - ]; + packages = with pkgs; [ ]; stateVersion = "24.05"; }; } diff --git a/homes/x86_64-linux/arrayofone/default.nix b/homes/x86_64-linux/arrayofone/default.nix index 5c79743..6c56ef5 100644 --- a/homes/x86_64-linux/arrayofone/default.nix +++ b/homes/x86_64-linux/arrayofone/default.nix @@ -1,17 +1,17 @@ { pkgs, ... }: let - nixosVSCodeServer = { - url = "https://github.com/msteen/nixos-vscode-server/tarball/master"; - sha256 = "1rdn70jrg5mxmkkrpy2xk8lydmlc707sk0zb35426v1yxxka10by"; - }; + # nixosVSCodeServer = { + # url = "https://github.com/msteen/nixos-vscode-server/tarball/master"; + # sha256 = "1rdn70jrg5mxmkkrpy2xk8lydmlc707sk0zb35426v1yxxka10by"; + # }; in { imports = [ - "${fetchTarball nixosVSCodeServer}/modules/vscode-server/home.nix" + # "${fetchTarball nixosVSCodeServer}/modules/vscode-server/home.nix" ]; services = { - vscode-server.enable = true; + # vscode-server.enable = false; gpg-agent = { enable = true; pinentry.package = pkgs.pinentry-curses; @@ -31,7 +31,7 @@ in programs = { brave.enable = true; firefox.enable = true; - librewolf.enable = true; + librewolf.enable = false; dbeaver.enable = true; element.enable = true; gparted.enable = true; @@ -50,7 +50,7 @@ in packages = with pkgs; [ clipse fontconfig - # nixd + nixd pinentry-curses ]; diff --git a/lib/module/default.nix b/lib/module/default.nix index b94c7f2..14333a9 100644 --- a/lib/module/default.nix +++ b/lib/module/default.nix @@ -60,4 +60,4 @@ rec { #@ false enable = false; }; -} \ No newline at end of file +} diff --git a/modules/darwin/core/default.nix b/modules/darwin/core/default.nix new file mode 100644 index 0000000..95a7d40 --- /dev/null +++ b/modules/darwin/core/default.nix @@ -0,0 +1,53 @@ +{ + config, + lib, + namespace, + pkgs, + ... +}: +{ + imports = [ + # ./dock.nix + # ./fonts.nix + ./homebrew.nix + ./programs.nix + ./secrets.nix + ]; + + options.${namespace}.system.name = lib.mkOption { + description = "The system name"; + type = lib.types.str; + default = ""; + }; + + # local.dock = { + # enable = true; + # dock.entries = [ + # { path = "/Applications/Slack.app/"; } + # { path = "/System/Applications/Messages.app/"; } + # { path = "/System/Applications/Facetime.app/"; } + # { path = "/Applications/Telegram.app/"; } + # { path = "${pkgs.alacritty}/Applications/Alacritty.app/"; } + # { path = "/System/Applications/Music.app/"; } + # { path = "/System/Applications/News.app/"; } + # { path = "/System/Applications/Photos.app/"; } + # { path = "/System/Applications/Photo Booth.app/"; } + # { path = "/System/Applications/TV.app/"; } + # { path = "${pkgs.jetbrains.phpstorm}/Applications/PhpStorm.app/"; } + # { path = "/Applications/TablePlus.app/"; } + # { path = "/Applications/Asana.app/"; } + # { path = "/Applications/Drafts.app/"; } + # { path = "/System/Applications/Home.app/"; } + # # { + # # path = "${config.users.users.${user}.home}/.local/share/"; + # # section = "others"; + # # options = "--sort name --view grid --display folder"; + # # } + # # { + # # path = "${config.users.users.${user}.home}/.local/share/downloads"; + # # section = "others"; + # # options = "--sort name --view grid --display stack"; + # # } + # ]; + # }; +} diff --git a/modules/darwin/core/dock.nix b/modules/darwin/core/dock.nix new file mode 100644 index 0000000..619c97d --- /dev/null +++ b/modules/darwin/core/dock.nix @@ -0,0 +1,95 @@ +{ + config, + pkgs, + lib, + ... +}: +with lib; +let + cfg = config.local.dock; + inherit (pkgs) stdenv dockutil; +in +{ + options = { + local.dock.enable = mkOption { + description = "Enable dock"; + default = stdenv.isDarwin; + example = false; + }; + + local.dock.entries = mkOption { + description = "Entries on the Dock"; + type = + with types; + listOf (submodule { + options = { + path = lib.mkOption { type = str; }; + section = lib.mkOption { + type = str; + default = "apps"; + }; + options = lib.mkOption { + type = str; + default = ""; + }; + }; + }); + readOnly = true; + }; + }; + + config = mkIf cfg.enable ( + let + normalize = path: if hasSuffix ".app" path then path + "/" else path; + entryURI = + path: + "file://" + + (builtins.replaceStrings + [ + " " + "!" + "\"" + "#" + "$" + "%" + "&" + "'" + "(" + ")" + ] + [ + "%20" + "%21" + "%22" + "%23" + "%24" + "%25" + "%26" + "%27" + "%28" + "%29" + ] + (normalize path) + ); + wantURIs = concatMapStrings (entry: "${entryURI entry.path}\n") cfg.entries; + createEntries = concatMapStrings ( + entry: + "${dockutil}/bin/dockutil --no-restart --add '${entry.path}' --section ${entry.section} ${entry.options}\n" + ) cfg.entries; + in + { + system.activationScripts.postUserActivation.text = '' + echo >&2 "Setting up the Dock..." + haveURIs="$(${dockutil}/bin/dockutil --list | ${pkgs.coreutils}/bin/cut -f2)" + if ! diff -wu <(echo -n "$haveURIs") <(echo -n '${wantURIs}') >&2 ; then + echo >&2 "Resetting Dock." + ${dockutil}/bin/dockutil --no-restart --remove all + ${createEntries} + killall Dock + else + echo >&2 "Dock setup complete." + fi + ''; + } + ); +} diff --git a/modules/darwin/core/fonts.nix b/modules/darwin/core/fonts.nix new file mode 100644 index 0000000..befe13a --- /dev/null +++ b/modules/darwin/core/fonts.nix @@ -0,0 +1,37 @@ +{ + lib, + pkgs, + ... +}: +{ + fonts = { + fontconfig = { + enable = true; + + defaultFonts = { + emoji = [ pkgs.noto-fonts-color-emoji.name ]; + serif = [ pkgs.nerd-fonts.ubuntu.name ]; + sansSerif = [ pkgs.nerd-fonts.ubuntu-sans.name ]; + monospace = [ pkgs.nerd-fonts.intone-mono.name ]; + }; + + hinting = { + autohint = true; + enable = true; + }; + }; + + packages = + with pkgs; + [ + dina-font + fontconfig + + noto-fonts + noto-fonts-color-emoji + + proggyfonts + ] + ++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts); + }; +} diff --git a/modules/darwin/core/homebrew.nix b/modules/darwin/core/homebrew.nix new file mode 100644 index 0000000..cc2a2e2 --- /dev/null +++ b/modules/darwin/core/homebrew.nix @@ -0,0 +1,54 @@ +{ config, ... }: +{ + homebrew = { + enable = true; + global = { + autoUpdate = false; + }; + onActivation = { + cleanup = "uninstall"; + extraFlags = [ ]; + upgrade = true; + }; + taps = builtins.attrNames config.nix-homebrew.taps; + brews = [ + "bun@1.2.7" + "gettext" + "ghostscript" + "git-lfs" + "protoc-gen-grpc-web" + # "sops" + "tmux" + ]; + casks = [ + "arc" + "brave-browser" + "chromium" + "cursor" + "dbeaver-community" + "discord" + "element" + "firefox" + "ghostty" + "gimp" + "google-chrome" + "hiddenbar" + "istat-menus" + "messenger" + "obsidian" + "orbstack" + "postman" + "proton-mail" + "slack" + "spotify" + "telegram" + "tuple" + "visual-studio-code" + "whatsapp" + "zoom" + ]; + masApps = { + "amphetamine" = 937984704; + }; + }; +} diff --git a/modules/darwin/core/programs.nix b/modules/darwin/core/programs.nix new file mode 100644 index 0000000..1fc3e34 --- /dev/null +++ b/modules/darwin/core/programs.nix @@ -0,0 +1,116 @@ +{ pkgs, ... }: +{ + programs = { + _1password = { + enable = true; + package = pkgs._1password-cli; + }; + + _1password-gui = { + enable = true; + package = pkgs._1password-gui; + }; + + arqbackup = { + enable = false; + # package + }; + + bash = { + enable = false; + completion = { + enable = true; + package = pkgs.bash-completion; + }; + interactiveShellInit = ""; + }; + + direnv = { + enable = true; + package = pkgs.direnv; + direnvrcExtra = ""; + # finalPackage + loadInNixShell = true; + nix-direnv = { + enable = true; + package = pkgs.nix-direnv; + }; + settings = { }; + silent = false; + }; + + fish = { + enable = false; + package = pkgs.fish; + # babelfishPackage + interactiveShellInit = ""; + loginShellInit = ""; + promptInit = ""; + shellAliases = { }; + shellInit = ""; + useBabelfish = false; + vendor = { + completions.enable = false; + config.enable = false; + functions.enable = false; + }; + }; + + gnupg.agent = { + enable = true; + enableSSHSupport = false; + }; + + info.enable = true; + + man.enable = true; + + nix-index = { + enable = true; + package = pkgs.nix-index; + }; + + ssh = { + extraConfig = ""; + knownHosts = { }; + }; + + tmux = { + enable = true; + enableFzf = true; + enableMouse = true; + enableSensible = true; + enableVim = false; + extraConfig = ""; + iTerm2 = false; + tmuxOptions = { }; + }; + + vim = { + enable = false; + enableSensible = true; + extraKnownPlugins = { }; + plugins = [ ]; + vimConfig = ""; + vimOptions = { }; + }; + + # zsh = { + # enable = true; + # enableAutosuggestions = false; + # enableBashCompletion = false; + # enableCompletion = false; + # enableFastSyntaxHighlighting = false; + # enableFzfCompletion = false; + # enableFzfGit = false; + # enableFzfHistory = false; + # enableGlobalCompInit = false; + # enableSyntaxHighlighting = false; + # interactiveShellInit = ""; + # loginShellInit = ""; + # promptInit = ""; + # shellInit = ""; + # variables = { }; + # }; + }; +} diff --git a/modules/darwin/core/secrets.nix b/modules/darwin/core/secrets.nix new file mode 100644 index 0000000..e5b21f4 --- /dev/null +++ b/modules/darwin/core/secrets.nix @@ -0,0 +1,28 @@ +{ + config, + inputs, + lib, + namespace, + ... +}: +{ + imports = [ inputs.sops-nix.darwinModules.sops ]; + + sops = { + defaultSopsFile = "${lib.snowfall.fs.get-file "secrets"}/${config.${namespace}.system.name}.yaml"; + validateSopsFiles = false; + age = { + sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ]; + keyFile = "/var/lib/sops-nix/key.txt"; + generateKey = true; + }; + + secrets = { + "vpn/wg/endpoint" = { }; + "vpn/wg/endpoint-ip" = { }; + "vpn/wg/endpoint-ip-port" = { }; + "vpn/wg/port" = { }; + "vpn/wg/privateKey" = { }; + }; + }; +} diff --git a/modules/darwin/networking/wg/default.nix b/modules/darwin/networking/wg/default.nix new file mode 100644 index 0000000..3b9aa07 --- /dev/null +++ b/modules/darwin/networking/wg/default.nix @@ -0,0 +1,88 @@ +{ + lib, + config, + namespace, + ... +}: +{ + options.${namespace}.networking.wireguard.server = { + enable = lib.mkEnableOption "enable wireguard server"; + interface = lib.mkOption { + description = "WireGuard interface name"; + type = lib.types.str; + default = "wg0"; + }; + ips = lib.mkOption { + description = "IP addresses and subnets for the WireGuard interface"; + type = lib.types.listOf lib.types.str; + default = [ "10.20.0.2/24" ]; + }; + privateKeyFile = lib.mkOption { + description = "Path to the private key file"; + type = lib.types.nullOr lib.types.path; + }; + peers = lib.mkOption { + description = "WireGuard peers configuration"; + type = lib.types.listOf ( + lib.types.submodule { + options = { + publicKey = lib.mkOption { + description = "Public key of the peer"; + type = lib.types.nullOr lib.types.str; + default = null; + }; + allowedIPs = lib.mkOption { + description = "Allowed IP addresses for this peer"; + type = lib.types.listOf lib.types.str; + default = [ "0.0.0.0/0" ]; + }; + endpoint = lib.mkOption { + description = "Endpoint address and port"; + type = lib.types.nullOr lib.types.str; + }; + persistentKeepalive = lib.mkOption { + description = "Keepalive interval in seconds"; + type = lib.types.nullOr lib.types.int; + default = 25; + }; + }; + } + ); + default = [ { } ]; + }; + }; + + config = lib.mkIf config.${namespace}.networking.wireguard.server.enable { + # enable NAT + # networking.nat.enable = true; + # networking.nat.externalInterface = + # config.${namespace}.networking.wireguard.server.externalInterface; # "enp42s0" + # networking.nat.internalInterfaces = [ "wg0" ]; + + # networking.firewall = { + # enable = lib.mkForce false; + # allowedUDPPorts = [ config.${namespace}.networking.wireguard.server.port ]; + # }; + + networking.wg-quick.interfaces = { + ${config.${namespace}.networking.wireguard.server.interface} = { + address = config.${namespace}.networking.wireguard.server.ips; + dns = [ "9.9.9.9" ]; + privateKeyFile = config.${namespace}.networking.wireguard.server.privateKeyFile; + + peers = map ( + peer: + { + publicKey = peer.publicKey; + allowedIPs = peer.allowedIPs; + endpoint = peer.endpoint; + persistentKeepalive = peer.persistentKeepalive; + } + // lib.optionalAttrs (peer.publicKey != null) { inherit (peer) publicKey; } + // lib.optionalAttrs (peer.endpoint != null) { inherit (peer) endpoint; } + // lib.optionalAttrs (peer.persistentKeepalive != null) { inherit (peer) persistentKeepalive; } + ) config.${namespace}.networking.wireguard.server.peers; + }; + }; + }; +} diff --git a/modules/home/core/default.nix b/modules/home/core/default.nix index ec80159..4a81f52 100644 --- a/modules/home/core/default.nix +++ b/modules/home/core/default.nix @@ -4,20 +4,28 @@ }: { imports = [ - ./editor.nix + # ./editor.nix ./env.nix ./fonts.nix ./secrets.nix ./shell.nix + ./terminal.nix ./theme.nix + ./zeditor.nix ]; + home.file.".zed_server" = { + source = "${pkgs.zed-editor.remote_server}/bin"; + recursive = true; + }; + home.packages = with pkgs; [ age bash bat btop gcc + gemini-cli gh git gnupg @@ -26,7 +34,7 @@ jq lf lsof - neofetch + #neofetch neovim netcat openssl @@ -40,12 +48,12 @@ zellij # TODO: are these needed for all systems? - probably not - awscli2 + # awscli2 docker docker-compose emacs k9s - kotlin-language-server + # kotlin-language-server kubectl kubectx kubernetes-helm @@ -59,5 +67,16 @@ podman-compose podman-tui protobuf + + alacritty + # foot + ghostty + kitty + nixfmt + zip + unzip + + claude-code + claude-monitor ]; } diff --git a/modules/home/core/editor.nix b/modules/home/core/editor.nix index d56b7c4..2f9beee 100644 --- a/modules/home/core/editor.nix +++ b/modules/home/core/editor.nix @@ -4,9 +4,13 @@ ... }: { + sessionVariables = { + EDITOR = "zeditor"; + }; + programs = { vscode = { - enable = true; + enable = false; package = pkgs.vscode; profiles.default = { @@ -156,7 +160,6 @@ }; "editor.suggestSelection" = "first"; - "editor.fontFamily" = "Intel One Mono"; "editor.fontLigatures" = true; "editor.wordWrap" = "on"; "editor.tabSize" = 2; diff --git a/modules/home/core/env.nix b/modules/home/core/env.nix index 92ac9c3..405624f 100644 --- a/modules/home/core/env.nix +++ b/modules/home/core/env.nix @@ -5,12 +5,4 @@ EDITOR = "zeditor"; }; }; - - # read secrets into env at runtime to prevent embedding - # secrets into the build as sessionVariables does - programs.zsh = { - initContent = '' - export ANTHROPIC_API_KEY=$(cat ${config.sops.secrets."ai/anthropic/api-key".path}) - ''; - }; } diff --git a/modules/home/core/fonts.nix b/modules/home/core/fonts.nix index b2a0db0..ea4b081 100644 --- a/modules/home/core/fonts.nix +++ b/modules/home/core/fonts.nix @@ -3,22 +3,20 @@ ... }: { - home.packages = with pkgs; [ - fontconfig - nerd-fonts.intone-mono - nerd-fonts.ubuntu - nerd-fonts.ubuntu-mono - nerd-fonts.ubuntu-sans - nerd-fonts.liberation - ]; + fonts = { + fontconfig = { + enable = true; - # fonts = { - # fontconfig = { - # enable = true; - # defaultFonts = { - # sansSerif = [ pkgs.nerd-fonts.ubuntu.name ]; - # monospace = [ pkgs.nerd-fonts.ubuntu-mono.name ]; - # }; - # }; - # }; + defaultFonts = { + emoji = [ pkgs.noto-fonts-color-emoji.name ]; + serif = [ pkgs.nerd-fonts.ubuntu.name ]; + sansSerif = [ pkgs.nerd-fonts.ubuntu-sans.name ]; + monospace = [ pkgs.nerd-fonts.intone-mono.name ]; + }; + + hinting = "full"; + + # subpixelRendering = "rgb"; + }; + }; } diff --git a/modules/home/core/secrets.nix b/modules/home/core/secrets.nix index ee0eaff..0bbd8e2 100644 --- a/modules/home/core/secrets.nix +++ b/modules/home/core/secrets.nix @@ -2,8 +2,6 @@ config, inputs, lib, - namespace, - pkgs, ... }: let @@ -16,7 +14,7 @@ in # age.keyFile = "/home/${config.snowfallorg.user.name}/.age-key.txt"; # must have no password! # It's also possible to use a ssh key, but only when it has no password: age.sshKeyPaths = [ "/home/${config.snowfallorg.user.name}/.ssh/sops-nix" ]; - defaultSopsFile = "${secrets}/${namespace}.yaml"; + defaultSopsFile = "${secrets}/${config.snowfallorg.user.name}.yaml"; # secrets.test = { # # sopsFile = ./secrets.yml.enc; # optionally define per-secret files @@ -32,8 +30,13 @@ in "git/gh/ssh-private" = { }; "git/gh/ssh-public" = { }; "ai/anthropic/api-key" = { }; + "ai/gemini/api-key" = { }; }; }; + programs.zsh.initContent = '' + export GEMINI_API_KEY="$(cat ${config.sops.secrets."ai/gemini/api-key".path})" + ''; + systemd.user.services.mbsync.unitConfig.After = [ "sops-nix.service" ]; } diff --git a/modules/home/core/shell.nix b/modules/home/core/shell.nix index d2f444e..ea0672d 100644 --- a/modules/home/core/shell.nix +++ b/modules/home/core/shell.nix @@ -49,7 +49,7 @@ # strategy }; # cdpath - completionInit = "autoload -U compinit && compinit -i"; + # completionInit = "autoload -U compinit && compinit -i"; # defaultKeymap # dirHashes dotDir = config.home.homeDirectory + "/.config/zsh"; @@ -71,14 +71,14 @@ }; historySubstringSearch = { enable = true; - # searchDownKey - # searchUpKey + searchDownKey = "$key[Down]"; + searchUpKey = "$key[Up]"; }; + # initcontent + # export LANG=C.UTF-8 initContent = '' export PATH=$PATH:~/go/bin - export LANG=C.UTF-8 ZLE_PROMPT_INDENT=0 - autopair-init ''; # localVariables @@ -89,10 +89,7 @@ # package # custom # extraConfig - plugins = [ - "history" - "sudo" - ]; + plugins = [ ]; # theme = "half-life"; }; plugins = [ @@ -107,17 +104,6 @@ file = "formarks.plugin.zsh"; } - { - name = "zsh-syntax-highlighting"; - src = pkgs.fetchFromGitHub { - owner = "zsh-users"; - repo = "zsh-syntax-highlighting"; - rev = "0.8.0"; - hash = "sha256-iJdWopZwHpSyYl5/FQXEW7gl/SrKaYDEtTH9cGP7iPo="; - }; - file = "zsh-syntax-highlighting.zsh"; - } - { name = "zsh-completions"; src = pkgs.fetchFromGitHub { @@ -128,16 +114,6 @@ }; } - { - name = "zsh-history-substring-search"; - src = pkgs.fetchFromGitHub { - owner = "zsh-users"; - repo = "zsh-history-substring-search"; - rev = "400e58a"; - hash = "sha256-GSEvgvgWi1rrsgikTzDXokHTROoyPRlU0FVpAoEmXG4="; - }; - } - { name = "zsh-nix-shell"; file = "nix-shell.plugin.zsh"; @@ -171,81 +147,81 @@ file = "autopair.zsh"; } ]; - prezto = { - enable = false; - # package - autosuggestions = { - # color - }; - # caseSensitive - # color - completions = { - # ignoredHosts - }; - editor = { - # dotExpansion - # keymap - # promptContext - }; - # extraConfig - # extraFunctions - # extraModules - git = { - # submoduleIgnore - }; - gnuUtility = { - # prefix - }; - historySubstring = { - # foundColor - # globbingFlags - # notFoundColor - }; - macOS = { - # dashKeyword - }; - # pmoduleDirs - # pmodules - prompt = { - # pwdLength - # showReturnVal - # theme - }; - python = { - # virtualenvAutoSwitch - # virtualenvInitialize - }; - ruby = { - # chrubyAutoSwitch - }; - screen = { - # autoStartLocal - # autoStartRemote - }; - ssh = { - # identities - }; - syntaxHighlighting = { - # highlighters - # pattern - # styles - }; - terminal = { - # autoTitle - # multiplexerTitleFormat - # tabTitleFormat - # windowTitleFormat - }; - tmux = { - # autoStartLocal - # autoStartRemote - # defaultSessionName - # itermIntegration - }; - utility = { - # safeOps - }; - }; + # prezto = { + # enable = false; + # # package + # autosuggestions = { + # # color + # }; + # # caseSensitive + # # color + # completions = { + # # ignoredHosts + # }; + # editor = { + # # dotExpansion + # # keymap + # # promptContext + # }; + # # extraConfig + # # extraFunctions + # # extraModules + # git = { + # # submoduleIgnore + # }; + # gnuUtility = { + # # prefix + # }; + # historySubstring = { + # # foundColor + # # globbingFlags + # # notFoundColor + # }; + # macOS = { + # # dashKeyword + # }; + # # pmoduleDirs + # # pmodules + # prompt = { + # # pwdLength + # # showReturnVal + # # theme + # }; + # python = { + # # virtualenvAutoSwitch + # # virtualenvInitialize + # }; + # ruby = { + # # chrubyAutoSwitch + # }; + # screen = { + # # autoStartLocal + # # autoStartRemote + # }; + # ssh = { + # # identities + # }; + # syntaxHighlighting = { + # # highlighters + # # pattern + # # styles + # }; + # terminal = { + # # autoTitle + # # multiplexerTitleFormat + # # tabTitleFormat + # # windowTitleFormat + # }; + # tmux = { + # # autoStartLocal + # # autoStartRemote + # # defaultSessionName + # # itermIntegration + # }; + # utility = { + # # safeOps + # }; + # }; # profileExtra # sessionVariables shellAliases = { @@ -310,13 +286,13 @@ csys = "c ~/.sys"; }; # shellGlobalAliases - # syntaxHighlighting = { - # enable - # package - # highlighters - # patterns - # styles - # }; + syntaxHighlighting = { + enable = true; + # package + # highlighters + # patterns + # styles + }; # zplug = { # enable # plugins = { diff --git a/modules/home/core/terminal.nix b/modules/home/core/terminal.nix new file mode 100644 index 0000000..2601038 --- /dev/null +++ b/modules/home/core/terminal.nix @@ -0,0 +1,18 @@ +{ + pkgs, + ... +}: +{ + programs = { + alacritty.enable = true; + foot.enable = true; + ghostty.enable = true; + kitty.enable = true; + }; + + # home.packages = [ pkgs.foot ]; + + programs.foot = { + package = pkgs.foot; + }; +} diff --git a/modules/home/core/theme.nix b/modules/home/core/theme.nix index 248e030..de5c9e2 100644 --- a/modules/home/core/theme.nix +++ b/modules/home/core/theme.nix @@ -1,72 +1,106 @@ { - host, + inputs, lib, pkgs, - inputs, + system, ... }: { imports = [ inputs.stylix.homeModules.stylix ]; + home.packages = [ + pkgs.font-awesome + ] + ++ lib.optionals (builtins.elem system pkgs.bibata-cursors.meta.platforms) [ pkgs.bibata-cursors ] + ++ lib.optionals (builtins.elem system pkgs.papirus-icon-theme.meta.platforms) [ + pkgs.papirus-icon-theme + ]; + # ++ lib.mkIf (builtins.elem system pkgs.papirus-icon-theme.meta.platforms) [ ]; + stylix = { enable = true; autoEnable = true; - base16Scheme = ./theme/base16/catppuccin/mocha.yaml; - cursor = { + + opacity = { + applications = 0.95; + desktop = 1.0; + popups = 0.95; + terminal = 0.95; + }; + + base16Scheme = ./theme/base16/catppuccin/macciato.yaml; + + cursor = lib.mkIf (builtins.elem system pkgs.bibata-cursors.meta.platforms) { package = pkgs.bibata-cursors; - name = "Bibata-Original-Ice"; - size = 24; + name = "Bibata-Modern-Ice"; + size = 32; }; fonts = { monospace = { - package = pkgs.intel-one-mono; - name = "Intel One Mono"; + name = "IntoneMono Nerd Font Mono"; + package = lib.mkDefault pkgs.nerd-fonts.intone-mono; }; + sansSerif = { - package = pkgs.ubuntu_font_family; - name = "Ubuntu"; + name = "UbuntuSans Nerd Font"; + package = lib.mkDefault pkgs.nerd-fonts.ubuntu-sans; }; + serif = { - package = pkgs.ubuntu_font_family; - name = "Ubuntu"; + name = "Ubuntu Nerd Font"; + package = lib.mkDefault pkgs.nerd-fonts.ubuntu; }; + emoji = { - package = pkgs.noto-fonts-emoji; name = "Noto Color Emoji"; + package = lib.mkDefault pkgs.noto-fonts-color-emoji; }; + sizes = { applications = 12; - desktop = 10; - popups = 10; + desktop = 12; + popups = 12; terminal = 12; }; }; - iconTheme = lib.mkIf (builtins.elem host pkgs.papirus-icon-theme.meta.platforms) { + iconTheme = lib.mkIf (builtins.elem system pkgs.papirus-icon-theme.meta.platforms) { enable = true; package = pkgs.papirus-icon-theme; light = "Papirus-Light"; dark = "Papirus-Dark"; }; + # override = { + # base00 = "1e1e2e"; # base - Catppuccin Mocha + # base01 = "181825"; # mantle + # base02 = "313244"; # surface0 + # base03 = "45475a"; # surface1 + # base04 = "585b70"; # surface2 + # base05 = "cdd6f4"; # text + # base06 = "f5e0dc"; # rosewater + # base07 = "b4befe"; # lavender + # base08 = "f38ba8"; # red + # base09 = "fab387"; # peach + # base0A = "f9e2af"; # yellow + # base0B = "a6e3a1"; # green + # base0C = "94e2d5"; # teal + # base0D = "89b4fa"; # blue + # base0E = "cba6f7"; # mauve + # base0F = "f2cdcd"; # flamingo + # }; + image = ./theme/wallpapers/rx7.png; polarity = "dark"; - targets = { - kitty.enable = false; - waybar.enable = true; - hyprlock.enable = false; - neovim.enable = false; - zed.enable = false; - - vscode.profileNames = [ "default" ]; + targets = { + # vscode.profileNames = [ "default" ]; firefox.profileNames = [ "default" ]; librewolf.profileNames = [ "default" ]; - - # cavalier.enable = false; + zed.enable = false; }; }; } diff --git a/modules/home/core/zeditor.nix b/modules/home/core/zeditor.nix new file mode 100644 index 0000000..c1a18de --- /dev/null +++ b/modules/home/core/zeditor.nix @@ -0,0 +1,689 @@ +{ + inputs, + lib, + namespace, + pkgs, + system, + ... +}: +{ + programs.zed-editor = { + enable = true; + package = pkgs.zed-editor; + installRemoteServer = true; + extraPackages = [ pkgs.nixd ]; + + themes = { }; + userKeymaps = [ ]; + userTasks = [ ]; + + # Extensions organized by category + extensions = [ + # Icons + "bearded-icon-theme" + "catppuccin-icons" + "charmed-icons" + "chawyehsu-vscode-icons" + "clean-vscode-icons" + "colored-zed-icons-theme" + "icons-modern-material" + "jetbrains-icons" + "jetbrains-new-ui-icons" + "material-icon-theme" + "modern-icons" + "monospace-icon-theme" + "openmoji-icons" + "phosphor-icons-theme" + "seti-icons" + "symbols" + "vscode-icons" + "vscode-great-icons" + + # Language Support + "assembly" + "csv" + "dart" + "deno" + "flatbuffers" + "graphql" + "html" + "ini" + "java" + "kotlin" + "nix" + "proto" + "sql" + "toml" + "xml" + "zig" + + # Development Tools + "docker-compose" + "dockerfile" + "git-firefly" + "golangci-lint" + "helm" + "http" + "make" + "nginx" + "terraform" + "tmux" + + # Utilities + "brainfuck" + "log" + "mermaid" + "perplexity" + + # Themes + "0x96f" + "0xtz" + "1984-theme" + "adaltas-theme" + "adech" + "adwaita" + "adwaita-pastel" + "aesthetic-theme" + "alabaster" + "alabaster-dark" + "amber-monochrome-monitor-crt-phosphor" + "andromeda" + "anthracite-theme" + "anya" + "anysphere-theme" + "apisartisan" + "aquarium-theme" + "arctic-depth" + "ariake" + "asteroid" + "atomize" + "axolosin" + "aylin-theme" + "aystra" + "ayu-darker" + "azutiku-theme" + "bamboo-theme" + "barbenheimer" + "base16" + "batman" + "beanseeds-pro" + "bearded" + "becker-theme" + "blackfox" + "blackrain-theme" + "blackula" + "blade-runner-2049" + "blanche" + "blankeos-zen" + "blinds-theme" + "bluloco-theme" + "brook-code-theme" + "bubblegum" + "call-trans-opt-received" + "catbox" + "catppuccin" + "catppuccin-blur" + "catppuccin-blur-plus" + "chai-theme" + "chanterelle" + "chaos-theory-theme" + "chatgpt" + "chocolate" + "cisco-theme" + "city-lights" + "claude-code-inspired-dark" + "cobalt2" + "codely-theme" + "codesandbox-theme" + "codestackr" + "colorizer" + "cosmos" + "crimson-theme" + "crystal-theme" + "cursor" + "cyan-light-theme" + "darcula-dark" + "darcula-dark-okkano" + "dark-discord" + "dark-material-dracula" + "dark-pop-ui" + "darker-horizon" + "darkmatter-theme" + "day-shift" + "decorative-stitch" + "denix" + "dogi" + "dracula" + "dram" + "dream" + "dune-theme" + "eiffel-theme" + "elderberry" + "ember-theme" + "emerald-night" + "everforest" + "everforest-theme" + "evil-rabbit-theme" + "exquisite" + "eyecandy" + "ezio-theme" + "flat-theme" + "fleet-themes" + "fleeting-theme" + "fleury" + "flexoki-themes" + "focus-theme" + "forest-night" + "frosted-theme" + "gafelson" + "gentle-dark" + "github-classic" + "github-copilot-theme" + "github-dark-default" + "github-monochrome-theme" + "github-plus-theme" + "github-theme" + "glazier" + "gleam-theme" + "graphene" + "green-monochrome-monitor-crt-phosphor" + "grey-theme" + "gruber-darker" + "gruber-flavors" + "gruvbox-baby" + "gruvbox-crisp-themes" + "gruvbox-ish" + "gruvbox-material" + "gruvchad" + "hacker-night-vision" + "hacker-theme" + "haku-dark-theme" + "halcyon" + "hami-melon-theme" + "hex-light-theme" + "hivacruz-theme" + "horizon" + "horizon-extended" + "hot-dog-stand" + "ibm-5151" + "iceberg" + "iceicebergy" + "indigo" + "intellij-newui-theme" + "ir-black" + "jellybeans-vim" + "jetbrains-darcula-theme-by-bronya0" + "jetbrains-rider" + "jetbrains-themes" + "kanagawa-themes" + "kanso" + "kiro" + "kiselevka" + "ktrz-monokai" + "kubesong" + "leblackque" + "lights-out" + "lonely-planet" + "lotus-theme" + "lusch-theme" + "lydia" + "macos-classic" + "malibu" + "maple-theme" + "marble" + "mariana-theme" + "marine-dark" + "martianized" + "material-dark" + "material-theme" + "matte-black" + "mau" + "maya" + "melange" + "mellow" + "min-theme" + "min-theme-plus" + "mint-theme" + "mnemonic" + "modest-dark" + "modus-themes" + "molten-theme" + "monokai-nebula" + "monokai-night" + "monokai-og" + "monokai-reversed" + "monokai-vibrant-amped" + "monolith" + "monosami" + "monospace-theme" + "moonlight" + "mosel" + "msun-dark" + "muted" + "nanowise" + "napalm" + "nebula-pulse" + "neo-brutalism" + "neon-cyberpunk" + "neon-pulse-theme" + "neosolarized" + "neovim-default" + "neutral-theme" + "new-darcula" + "night-owlz" + "night-shift" + "nightfox" + "nightfox-m" + "nixdorf-8870" + "nobin-theme" + "noctis-port" + "noir-and-blanc-theme" + "nord" + "nordic-nvim-theme" + "nordic-theme" + "norrsken" + "not-material-theme" + "nstlgy-dark" + "nuisance" + "nvim-nightfox" + "nyxvamp-theme" + "oasis" + "obsidian-sunset" + "ocean-dark-motifs" + "oceanic-next" + "oh-lucy" + "oldbook-theme" + "one-black-theme" + "one-dark-darkened" + "one-dark-extended" + "one-dark-flat" + "one-dark-pro" + "one-dark-pro-max" + "one-dark-pro-monokai-darker" + "one-hunter" + "one-thing-theme" + "onurb" + "oolong" + "oscura" + "outrun" + "oxocarbon" + "palenight" + "panda-theme" + "papercolor" + "paraiso" + "penumbra" + "penumbra-plus" + "perfect-dusk" + "phine-theme" + "pinata-theme" + "plato-themes" + "poimandres" + "polar-theme" + "popping-and-locking" + "purr" + "quiet-light-theme" + "quill" + "railscast" + "rainbow" + "replicant" + "retrofit-theme" + "rich-vesper" + "rose-pine-theme" + "rosevin" + "rust-rover-dark-theme" + "s-dark-theme" + "sequoia" + "serendipity" + "severance-theme" + "shades-of-purple-theme" + "short-giraffe-theme" + "simple-darker" + "siri" + "sitruuna" + "sl4y-theme" + "slate" + "smooth" + "snazzy" + "snow-fox-theme" + "snowfall" + "snowflake" + "solarized" + "solarized-fp" + "sonokai" + "spai-zero-theme" + "spiceflow-theme" + "srcery" + "struct-theme" + "sublime-mariana-theme" + "subliminal-nightfall" + "sumi-light" + "sunset-drive" + "supaglass" + "supergreatmonokai" + "syntax" + "synthwave" + "synthwave-alpha-theme" + "t3-theme" + "tailwind-theme" + "tanuki" + "terrible-theme" + "the-best-theme" + "the-dark-side" + "theme-lince" + "tm-twilight" + "tokyo-night" + "tomorrow-min-theme" + "tomorrow-night-burns-theme" + "tomorrow-theme" + "tron-legacy" + "tsar" + "tsarcasm" + "twilight" + "ultimate-dark-neo" + "umbralkai" + "underground-theme" + "unoflat" + "v0-theme" + "vague" + "vapor-theme" + "vercel-theme" + "vesper" + "vim-theme" + "vintergata" + "visual-assist-dark" + "vitesse" + "vitesse-theme-refined" + "vscode-classic-theme" + "vscode-dark-high-contrast" + "vscode-dark-modern" + "vscode-dark-plus" + "vscode-dark-polished" + "vscode-light-plus" + "vscode-monokai-charcoal" + "vue-theme" + "vynora" + "wakfu-theme" + "warp-one-dark" + "xcode-themes" + "xy-zed" + "yaka" + "yamura" + "yellowed" + "yue-theme" + "yugen" + "zed-legacy-themes" + "zedburn" + "zedokai" + "zedokai-darkest-machine" + "zedrack-theme" + "zedspace" + "zedwaita" + "zen" + "zen-abyssal" + "zero-trust-theme" + "zoegi-theme" + ]; + + userSettings = { + # Core Settings + auto_update = false; + vim_mode = false; + base_keymap = "VSCode"; + hour_format = "hour24"; + load_direnv = "shell_hook"; + + # UI and Theme Settings + theme = lib.mkDefault { + mode = "system"; + light = "Tokyo Night Storm"; + dark = "Palenight Theme"; + }; + ui_font_family = lib.mkDefault "IntoneMono Nerd Font Mono"; + ui_font_size = lib.mkDefault 12; + buffer_font_family = lib.mkDefault "IntoneMono Nerd Font Mono"; + buffer_font_size = lib.mkDefault 12; + show_whitespaces = "boundary"; + + # Editor Settings + soft_wrap = "none"; + tab_size = 2; + hard_tabs = false; + show_copilot_suggestions = true; + auto_save = "on_focus_change"; + format_on_save = "on"; + ensure_final_newline_on_save = true; + remove_trailing_whitespace_on_save = true; + show_inline_completions = true; + + # Project Panel Settings + project_panel = { + button = true; + dock = "left"; + git_status = true; + auto_fold_dirs = true; + indent_size = 20; + }; + + # Outline Panel Settings + outline_panel = { + button = true; + dock = "right"; + }; + + # Collaboration Settings + collaboration_panel = { + button = false; + }; + + # Chat Panel Settings + chat_panel = { + button = true; + dock = "right"; + }; + + # Notification Settings + notification_panel = { + button = true; + dock = "bottom"; + }; + + # Terminal Settings + terminal = { + alternate_scroll = "off"; + blinking = "off"; + copy_on_select = false; + dock = "bottom"; + font_family = "IntoneMono Nerd Font Mono"; + font_features = null; + font_size = null; + line_height = "comfortable"; + option_as_meta = false; + button = false; + shell = "system"; + toolbar = { + title = true; + }; + working_directory = "current_project_directory"; + env = { + TERM = "ghostty"; + }; + detect_venv = { + on = { + directories = [ + ".env" + "env" + ".venv" + "venv" + ]; + activate_script = "default"; + }; + }; + }; + + # Git Settings + git = { + git_gutter = "tracked_files"; + inline_blame = { + enabled = true; + delay_ms = 600; + }; + }; + + # Language Server Settings + lsp = { + # rust-analyzer = { + # binary = { + # path = lib.getExe pkgs.rust-analyzer; + # path_lookup = true; + # }; + # }; + jdtls = { + binary = { + path = lib.getExe pkgs.jdt-language-server; + # arguments = [ ]; + # env = { }; + ignore_system_version = true; + }; + }; + + kotlin-lsp = { + binary = { + path = lib.getExe pkgs.${namespace}.kotlin-lsp; + arguments = [ + # Add your custom flags here + # Example: "--flag-name" "value" + "--stdio" + ]; + }; + }; + + nixd = { }; + nil = { }; + nix = { + binary = { + path = lib.getExe pkgs.nixd; + }; + }; + protobuf-language-server = { + binary = { + path = lib.getExe pkgs.protols; + }; + }; + }; + + # Language Server Configurations + "[language_servers.claude-code-server]" = { + name = "Claude Code Server"; + languages = [ + "Rust" + "JavaScript" + "TypeScript" + "Python" + "Markdown" + "Go" + "Java" + ]; + }; + + # Node.js Configuration + node = { + path = lib.getExe pkgs.nodejs; + npm_path = lib.getExe' pkgs.nodejs "npm"; + }; + + # Language-specific Settings + languages = { + "JavaScript" = { + tab_size = 2; + hard_tabs = false; + }; + "TypeScript" = { + tab_size = 2; + hard_tabs = false; + }; + "JSON" = { + tab_size = 2; + hard_tabs = false; + }; + "Nix" = { + tab_size = 4; + hard_tabs = true; + language_servers = [ + "nixd" + "!nil" + ]; + }; + "Go" = { + tab_size = 4; + hard_tabs = true; + }; + "Kotlin" = { + language_servers = [ + "kotlin-lsp" + "!kotlin-language-server" + ]; + }; + "Java" = { + language_servers = [ + "jdtls" + ]; + }; + }; + + # Assistant/AI Settings + assistant = { + enabled = true; + version = "2"; + default_open_ai_model = null; + # Provider Options: + # zed.dev models { claude-3-5-sonnet-latest } requires github connected + # anthropic models { claude-3-5-sonnet-latest claude-3-haiku-latest claude-3-opus-latest } requires API_KEY + # copilot_chat models { gpt-4o gpt-4 gpt-3.5-turbo o1-preview } requires github connected + default_model = { + provider = "zed.dev"; + model = "claude-3-5-sonnet-latest"; + }; + # inline_alternatives = [ + # { + # provider = "copilot_chat"; + # model = "gpt-3.5-turbo"; + # } + # ]; + }; + + # Feature Flags + features = { + edit_prediction_provider = "none"; + copilot = true; + }; + + # File associations + file_types = { + "Dockerfile" = [ "Dockerfile*" ]; + "YAML" = [ + "*.yml" + "*.yaml" + ]; + "Shell Script" = [ + "*.zsh" + "*.bash" + ]; + }; + + # Preview Settings + preview_tabs = { + enabled = true; + enable_preview_from_file_finder = true; + enable_preview_from_code_navigation = true; + }; + + # Search Settings + search = { + whole_word = false; + case_sensitive = false; + include_ignored = false; + regex = false; + }; + }; + }; +} diff --git a/modules/home/dev/default.nix b/modules/home/dev/default.nix index 31a1ac9..157f2ca 100644 --- a/modules/home/dev/default.nix +++ b/modules/home/dev/default.nix @@ -15,19 +15,16 @@ in config = lib.mkIf cfg.enable { ${namespace}.home.dev_modules = { - db.enable = true; + db.enable = false; go.enable = true; gql.enable = true; - java = { - temurin.enable = true; - jdk21.enable = false; - }; js.enable = true; + flutter.enable = false; }; home = { packages = with pkgs; [ - # nixd + nixd parallel ]; }; diff --git a/modules/home/dev/modules/flutter/default.nix b/modules/home/dev/modules/flutter/default.nix new file mode 100644 index 0000000..3e47305 --- /dev/null +++ b/modules/home/dev/modules/flutter/default.nix @@ -0,0 +1,37 @@ +{ + lib, + config, + pkgs, + namespace, + ... +}: +let + cfg = config.${namespace}.home.dev_modules.flutter; +in +{ + options.${namespace}.home.dev_modules.flutter = { + enable = lib.mkEnableOption "enable flutter tooling"; + }; + + config = lib.mkIf cfg.enable { + programs.java = { + enable = true; + package = pkgs.temurin-bin-21; + }; + + home = { + sessionVariables = { + CHROME_EXECUTABLE = "${pkgs.google-chrome}/bin/google-chrome-stable"; + GOOGLE_APPLICATION_CREDENTIALS = "~/myGoogleCreds.json"; + }; + + packages = with pkgs; [ + flutter + firebase-tools + android-studio + android-tools + temurin-bin-21 + ]; + }; + }; +} diff --git a/modules/home/dev/modules/go/default.nix b/modules/home/dev/modules/go/default.nix index 3e5df67..7521baf 100644 --- a/modules/home/dev/modules/go/default.nix +++ b/modules/home/dev/modules/go/default.nix @@ -23,7 +23,7 @@ in home = { packages = with pkgs; [ delve - go_1_24 + go_1_25 go-ethereum gopls gotools diff --git a/modules/home/dev/modules/java/default.nix b/modules/home/dev/modules/java/default.nix deleted file mode 100644 index 5944f52..0000000 --- a/modules/home/dev/modules/java/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ - lib, - config, - pkgs, - namespace, - ... -}: -let - cfg = config.${namespace}.home.dev_modules.java; -in -{ - options.${namespace}.home.dev_modules.java = { - jdk21.enable = lib.mkEnableOption "enable java"; - temurin.enable = lib.mkEnableOption "enable temurin java"; - }; - - config = { - home = { - packages = - with pkgs; - lib.optionals cfg.jdk21.enable [ jdk21_headless ] - ++ lib.optionals cfg.temurin.enable [ temurin-bin ]; - }; - }; -} diff --git a/modules/home/gui/desktop/dunst/default.nix b/modules/home/gui/desktop/dunst/default.nix index 3880c49..1628635 100644 --- a/modules/home/gui/desktop/dunst/default.nix +++ b/modules/home/gui/desktop/dunst/default.nix @@ -34,16 +34,16 @@ in # dynamic width from 0 to 300 # width = (0, 300) # constant width of 300 - width = 300; + width = 380; # The maximum height of a single notification, excluding the frame. - height = 300; + height = 120; # Position the notification in the top right corner origin = "top-right"; # Offset from the origin - offset = "20x20"; + offset = "15x15"; # Scale factor. It is auto-detected if value is 0. scale = 0; @@ -59,22 +59,22 @@ in # Set the progress bar height. This includes the frame, so make sure # it's at least twice as big as the frame width. - progress_bar_height = 10; + progress_bar_height = 8; # Set the frame width of the progress bar progress_bar_frame_width = 0; # Set the minimum width for the progress bar - progress_bar_min_width = 125; + progress_bar_min_width = 150; # Set the maximum width for the progress bar - progress_bar_max_width = 250; + progress_bar_max_width = 300; # Corner radius for the progress bar. 0 disables rounded corners. - progress_bar_corner_radius = 4; + progress_bar_corner_radius = 6; # Corner radius for the icon image. - icon_corner_radius = 5; + icon_corner_radius = 8; # Show how many messages are currently hidden (because of # notification_limit). @@ -83,35 +83,35 @@ in # The transparency of the window. Range: [0; 100]. # This option will only work if a compositing window manager is # present (e.g. xcompmgr, compiz, etc.). (X11 only) - transparency = 10; + transparency = 5; # Draw a line of "separator_height" pixel height between two # notifications. # Set to 0 to disable. # If gap_size is greater than 0, this setting will be ignored. - separator_height = 2; + separator_height = 0; # Padding between text and separator. - padding = 8; + padding = 12; # Horizontal padding. - horizontal_padding = 8; + horizontal_padding = 16; # Padding between text and icon. - text_icon_padding = 10; + text_icon_padding = 12; # Defines width in pixels of frame around the notification window. # Set to 0 to disable. - frame_width = 3; + frame_width = 2; # Defines color of the frame around the notification window. - frame_color = "#eba0ac"; + frame_color = "#ca9ee6"; # Size of gap to display between notifications - requires a compositor. # If value is greater than 0, separator_height will be ignored and a border # of size frame_width will be drawn around each notification instead. # Click events on gaps do not currently propagate to applications below. - gap_size = 5; + gap_size = 8; # Define a color for the separator. # possible values are: @@ -173,7 +173,7 @@ in # %n progress value if set without any extra characters # %% Literal % # Markup is allowed - format = "☁️ %a\n♥︎ %s\n%b"; + format = "%a\n%s\n%b"; # Alignment of message text. # Possible values are "left", "center" and "right". @@ -211,9 +211,9 @@ in #enable_recursive_icon_lookup = true # Set icon theme (only used for recursive icon lookup) - #icon_theme = Adwaita + # icon_theme = Adwaita # You can also set multiple icon themes, with the leftmost one being used first. - icon_theme = "Tela-circle-dracula"; + icon_theme = "Papirus-Dark"; # Align icons left/right/top/off icon_position = "left"; @@ -227,7 +227,7 @@ in max_icon_size = 64; # Paths to default icons (only neccesary when not using recursive icon lookup) - icon_path = "/usr/share/icons/Tela-circle-dracula/16/actions:/usr/share/icons/Tela-circle-dracula/16/apps:/usr/share/icons/Tela-circle-dracula/16/devices:/usr/share/icons/Tela-circle-dracula/16/mimetypes:/usr/share/icons/Tela-circle-dracula/16/panel:/usr/share/icons/Tela-circle-dracula/16/places:/usr/share/icons/Tela-circle-dracula/16/status"; + icon_path = "/usr/share/icons/Papirus-Dark/16x16/actions:/usr/share/icons/Papirus-Dark/16x16/apps:/usr/share/icons/Papirus-Dark/16x16/devices:/usr/share/icons/Papirus-Dark/16x16/mimetypes:/usr/share/icons/Papirus-Dark/16x16/panel:/usr/share/icons/Papirus-Dark/16x16/places:/usr/share/icons/Papirus-Dark/16x16/status"; ### History ### @@ -260,7 +260,7 @@ in # corners. # The radius will be automatically lowered if it exceeds half of the # notification height to avoid clipping text and/or icons. - corner_radius = 10; + corner_radius = 12; # Ignore the dbus closeNotification message. # Useful to enforce the timeout set by dunst configuration. Without this @@ -312,40 +312,58 @@ in experimental = { per_monitor_dpi = false; }; - urgency_low = { - # background = "#32302f"; - # foreground = "#ebdbb2"; - # frame_color = "#689d6a"; - icon = config.home.homeDirectory + "/.config/dunst/icons/low.svg"; - timeout = 5; - }; - urgency_normal = { - # background = "#32302f"; - # foreground = "#ebdbb2"; - # frame_color = "#458588"; - icon = config.home.homeDirectory + "/.config/dunst/icons/normal.svg"; - timeout = 5; - }; - urgency_critical = { - # background = "#32302f"; - # foreground = "#ebdbb2"; - # frame_color = "#cc241d"; - icon = config.home.homeDirectory + "/.config/dunst/icons/critical.svg"; - timeout = 0; - }; + # urgency_low = { + # background = "#313244"; + # foreground = "#c6d0f5"; + # frame_color = "#a6e3a1"; + # icon = config.home.homeDirectory + "/.config/dunst/icons/low.svg"; + # timeout = 8; + # }; + # urgency_normal = { + # background = "#1e1e2e"; + # foreground = "#c6d0f5"; + # frame_color = "#89b4fa"; + # icon = config.home.homeDirectory + "/.config/dunst/icons/normal.svg"; + # timeout = 10; + # }; + # urgency_critical = { + # background = "#1e1e2e"; + # foreground = "#f38ba8"; + # frame_color = "#e78284"; + # icon = config.home.homeDirectory + "/.config/dunst/icons/critical.svg"; + # timeout = 0; + # }; volume-control = { summary = "volctl"; - format = "\"%a\n%b\""; + format = "\"󰕾 %s\n%b\""; + frame_color = "#fab387"; + timeout = 3; }; brightness-control = { summary = "brightctl"; - format = "\"%a\n%b\""; + format = "\"󰃟 %s\n%b\""; + frame_color = "#f9e2af"; + timeout = 3; }; theme-switch = { summary = "theme"; - format = "%a"; + format = "\"󰐱 %s\n%b\""; + frame_color = "#cba6f7"; + timeout = 5; + }; + + network = { + summary = "*Network*"; + format = "\"󰖩 %s\n%b\""; + frame_color = "#89b4fa"; + }; + + battery = { + summary = "*Battery*"; + format = "\"󰁹 %s\n%b\""; + frame_color = "#a6e3a1"; }; }; }; diff --git a/modules/home/gui/desktop/hyprland/default.nix b/modules/home/gui/desktop/hyprland/default.nix index c1c98e4..7d1b68d 100644 --- a/modules/home/gui/desktop/hyprland/default.nix +++ b/modules/home/gui/desktop/hyprland/default.nix @@ -1,7 +1,6 @@ { config, lib, - inputs, pkgs, namespace, ... @@ -15,11 +14,6 @@ in }; config = lib.mkIf cfg.enable { - # nix.settings = { - # substituters = ["https://hyprland.cachix.org"]; - # trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; - # }; - wayland.windowManager.hyprland = { enable = true; plugins = [ ]; @@ -55,12 +49,13 @@ in "$ws_10" = "10"; monitor = [ - ",preferred,auto,1" + ",highres,auto,1" ]; env = [ "XCURSOR_SIZE,24" "HYPRCURSOR_SIZE,24" + "HYPRCURSOR_THEME,Bibata-Modern-Ice" "ELECTRON_OZONE_PLATFORM_HINT,x11" "XDG_CURRENT_DESKTOP,Hyprland" "XDG_SESSION_DESKTOP,Hyprland" @@ -68,17 +63,16 @@ in ]; general = { - border_size = 1; - no_border_on_floating = false; - gaps_in = 2; - gaps_out = 10; + border_size = 2; + gaps_in = 5; + gaps_out = 15; float_gaps = 0; gaps_workspaces = 0; - "col.inactive_border" = lib.mkDefault "0xff444444"; - "col.active_border" = lib.mkDefault "0xffffffff"; - "col.nogroup_border" = lib.mkDefault "0xffffaaff"; - "col.nogroup_border_active" = lib.mkDefault "0xffff00ff"; + "col.inactive_border" = lib.mkDefault "0x66333333"; + "col.active_border" = lib.mkDefault "rgba(ca9ee6ff) rgba(f2d5cfff) 45deg"; + "col.nogroup_border" = lib.mkDefault "0x66ae8b2d"; + "col.nogroup_border_active" = lib.mkDefault "0xffe78284"; layout = "dwindle"; no_focus_fallback = false; @@ -89,22 +83,22 @@ in resize_corner = 0; snap = { - enabled = false; - window_gap = 10; - monitor_gap = 10; - border_overlap = false; - respect_gaps = false; + enabled = true; + window_gap = 15; + monitor_gap = 20; + border_overlap = true; + respect_gaps = true; }; }; decoration = { - rounding = 6; + rounding = 10; rounding_power = 2.0; active_opacity = 1.0; - inactive_opacity = 1.0; + inactive_opacity = 0.95; fullscreen_opacity = 1.0; - dim_inactive = false; - dim_strength = 0.5; + dim_inactive = true; + dim_strength = 0.15; dim_special = 0.2; dim_around = 0.4; screen_shader = ""; @@ -112,33 +106,33 @@ in blur = { enabled = true; - size = 3; - passes = 1; - ignore_opacity = true; + size = 8; + passes = 3; + ignore_opacity = false; new_optimizations = true; xray = false; noise = 0.0117; - contrast = 0.8916; - brightness = 0.8172; - vibrancy = 0.1696; - vibrancy_darkness = 0.0; - special = false; - popups = false; - popups_ignorealpha = 0.2; - input_methods = false; - input_methods_ignorealpha = 0.2; + contrast = 1.1; + brightness = 1.0; + vibrancy = 0.2; + vibrancy_darkness = 0.2; + special = true; + popups = true; + popups_ignorealpha = 0.6; + input_methods = true; + input_methods_ignorealpha = 0.6; }; shadow = { enabled = true; - range = 4; + range = 12; render_power = 3; sharp = false; ignore_window = true; - color = lib.mkDefault "1a1a1aee"; + color = lib.mkDefault "0xcc000000"; # color_inactive = ""; # unset - offset = "0 0"; - scale = 1.0; + offset = "0 8"; + scale = 0.97; }; }; @@ -147,30 +141,33 @@ in workspace_wraparound = false; bezier = [ - "easeOutQuint,0.23,1,0.32,1" - "easeInOutCubic,0.65,0.05,0.36,1" + "fluent_decel,0.1, 1, 0, 1" + "easeOutCirc,0, 0.55, 0.45, 1" + "easeOutCubic,0.33, 1, 0.68, 1" + "easeInOutQuart,0.76, 0, 0.24, 1" "linear,0,0,1,1" "almostLinear,0.5,0.5,0.75,1.0" "quick,0.15,0,0.1,1" ]; animation = [ - "global, 1, 10, default" - "border, 1, 5.39, easeOutQuint" - "windows, 1, 4.79, easeOutQuint" - "windowsIn, 1, 4.1, easeOutQuint, popin 87%" - "windowsOut, 1, 1.49, linear, popin 87%" - "fadeIn, 1, 1.73, almostLinear" - "fadeOut, 1, 1.46, almostLinear" - "fade, 1, 3.03, quick" - "layers, 1, 3.81, easeOutQuint" - "layersIn, 1, 4, easeOutQuint, fade" - "layersOut, 1, 1.5, linear, fade" - "fadeLayersIn, 1, 1.79, almostLinear" - "fadeLayersOut, 1, 1.39, almostLinear" - "workspaces, 1, 1.94, almostLinear, fade" - "workspacesIn, 1, 1.21, almostLinear, fade" - "workspacesOut, 1, 1.94, almostLinear, fade" + "global, 1, 8, default" + "border, 1, 6, fluent_decel" + "borderangle, 1, 30, fluent_decel, once" + "windows, 1, 5, fluent_decel, popin 60%" + "windowsIn, 1, 5, fluent_decel, slide" + "windowsOut, 1, 4, easeInOutQuart, slide" + "windowsMove, 1, 4, fluent_decel, slide" + "fadeIn, 1, 3, easeOutCirc" + "fadeOut, 1, 3, easeOutCirc" + "fade, 1, 8, easeOutCirc" + "layers, 1, 4, easeOutCirc, fade" + "layersIn, 1, 4, easeOutCirc, slide" + "layersOut, 1, 4, easeOutCirc, slide" + "workspaces, 1, 4, easeOutCubic, slide" + "workspacesIn, 1, 4, easeOutCubic, slidefade 15%" + "workspacesOut, 1, 4, easeInOutQuart, slidefade 15%" + "specialWorkspace, 1, 3, easeOutCirc, slidevert" ]; }; @@ -239,9 +236,9 @@ in }; gestures = { - workspace_swipe = false; - workspace_swipe_fingers = 3; - workspace_swipe_min_fingers = false; + # workspace_swipe = false; + # workspace_swipe_fingers = 3; + # workspace_swipe_min_fingers = false; workspace_swipe_distance = 300; workspace_swipe_touch = false; workspace_swipe_invert = true; @@ -265,19 +262,19 @@ in merge_floated_into_tiled_on_groupbar = false; group_on_movetoworkspace = false; - "col.border_active" = lib.mkDefault "0x66ffff00"; - "col.border_inactive" = lib.mkDefault "0x66777700"; - "col.border_locked_active" = lib.mkDefault "0x66ff5500"; - "col.border_locked_inactive" = lib.mkDefault "0x66775500"; + "col.border_active" = lib.mkDefault "rgba(ca9ee6ff)"; + "col.border_inactive" = lib.mkDefault "0x66414559"; + "col.border_locked_active" = lib.mkDefault "rgba(e78284ff)"; + "col.border_locked_inactive" = lib.mkDefault "0x66626880"; groupbar = { enabled = true; font_family = ""; - font_size = 8; + font_size = 10; font_weight_active = "normal"; font_weight_inactive = "normal"; gradients = false; - height = 14; + height = 16; indicator_gap = 0; indicator_height = 3; stacked = false; @@ -285,18 +282,18 @@ in render_titles = true; text_offset = 0; scrolling = true; - rounding = 1; + rounding = 6; gradient_rounding = 2; round_only_edges = true; gradient_round_only_edges = true; - text_color = lib.mkDefault "0xffffffff"; + text_color = lib.mkDefault "0xffc6d0f5"; # text_color_inactive = null; # unset # text_color_locked_active = null; # unset # text_color_locked_inactive = null; # unset - "col.active" = lib.mkDefault "0x66ffff00"; - "col.inactive" = lib.mkDefault "0x66777700"; - "col.locked_active" = lib.mkDefault "0x66ff5500"; - "col.locked_inactive" = lib.mkDefault "0x66775500"; + "col.active" = lib.mkDefault "0x80ca9ee6"; + "col.inactive" = lib.mkDefault "0x80414559"; + "col.locked_active" = lib.mkDefault "0x80e78284"; + "col.locked_inactive" = lib.mkDefault "0x80626880"; gaps_in = 2; gaps_out = 2; keep_upper_gap = true; @@ -316,8 +313,8 @@ in key_press_enables_dpms = false; always_follow_on_dnd = true; layers_hog_keyboard_focus = true; - animate_manual_resizes = false; - animate_mouse_windowdragging = false; + animate_manual_resizes = true; + animate_mouse_windowdragging = true; disable_autoreload = false; enable_swallow = false; swallow_regex = ""; @@ -326,15 +323,13 @@ in mouse_move_focuses_monitor = true; allow_session_lock_restore = false; # session_lock_xray = false; # does not exist. Bug in documentation? - background_color = lib.mkDefault "0x111111"; + background_color = lib.mkDefault "0x1e1e2e"; close_special_on_empty = true; - new_window_takes_over_fullscreen = 0; exit_window_retains_fullscreen = false; initial_workspace_tracking = 1; middle_click_paste = true; render_unfocused_fps = 15; disable_xdg_env_checks = false; - disable_hyprland_qtutils_check = false; lockdead_screen_delay = 1000; enable_anr_dialog = true; anr_missed_pings = 1; @@ -381,8 +376,8 @@ in }; cursor = { - sync_gsettings_theme = true; - no_hardware_cursors = 1; + sync_gsettings_theme = false; + no_hardware_cursors = 2; no_break_fs_vrr = 2; min_refresh_rate = 24; hotspot_padding = 1; @@ -431,23 +426,31 @@ in dwindle = { pseudotile = true; - force_split = 0; + force_split = 2; preserve_split = true; - smart_split = false; + smart_split = true; smart_resizing = true; permanent_direction_override = false; - special_scale_factor = 1; + special_scale_factor = 0.8; split_width_multiplier = 1.0; use_active_for_splits = true; - default_split_ratio = 1.0; + default_split_ratio = 1.618; # Golden ratio for elegant proportions split_bias = 0; - precise_mouse_move = false; - single_window_aspect_ratio = "0 0"; - single_window_aspect_ratio_tolerance = 0.1; + precise_mouse_move = true; + single_window_aspect_ratio = "16 10"; + single_window_aspect_ratio_tolerance = 0.15; }; master = { + allow_small_split = true; new_status = "master"; + new_on_active = "after"; + new_on_top = false; + orientation = "left"; + smart_resizing = true; + drop_at_cursor = true; + mfact = 0.618; # Golden ratio for master area + special_scale_factor = 0.8; }; device = { @@ -541,51 +544,121 @@ in "$ws_3, monitor:DP-2, default:true" "$ws_4, monitor:DP-2, default:true" + # Smart workspace layouts + "$ws_1, layoutopt:orientation:left" + "$ws_2, layoutopt:orientation:top" + "$ws_3, layoutopt:orientation:right" + "$ws_4, layoutopt:orientation:center" + "special:calculator s[true]" "special:passman s[true]" - "special:resourceman s[true]" "special:obsidian s[true]" ]; - windowrulev2 = [ - "suppressevent maximize, class:.*" - "nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0" - - ######## TAGS ######## - "tag:+browser class:^(brave-browser)$" - "tag:+browser class:^(firefox)$" - - "tag:+ide class:^(code)$" - - "tag:+term class:^(kitty)$" - "tag:+term class:^(foot)$" - "tag:+term class:^(com.mitchellh.ghostty)$" - - "float, class:(clipse)" - "size 622 652, class:(clipse)" - "stayfocused, class:(clipse)" - - "float,class:($calculator)" - "workspace special:special:calculator,class:($calculator)" - "size 622 652, class:($calculator)" - "stayfocused, class:($calculator)" - - "float,class:($passman)" - "workspace special:special:passman,class:($passman)" - "size 622 652, class:($passman)" - "stayfocused, class:($passman)" - - "float,title:($resourceman)" - "workspace special:special:resourceman,title:($resourceman)" - "size 622 652, title:($resourceman)" - "stayfocused, title:($resourceman)" - - "float,class:($obsidian)" - "workspace special:special:obsidian,class:($obsidian)" - "size 622 652, class:($obsidian)" - - "workspace name:ide tag:^ide$" - ]; + # windowrule = [ + # "suppressevent maximize, class:.*" + # "nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0" + + # ######## SMART TILING RULES ######## + # # Browsers - optimized for reading and productivity + # "size 70% 100%, class:^(brave-browser)$" + # "tile, class:^(brave-browser)$" + # "group set always, class:^(brave-browser)$" + # "size 70% 100%, class:^(firefox)$" + # "tile, class:^(firefox)$" + # "group set always, class:^(firefox)$" + + # # Chrome-based browsers + # "size 70% 100%, class:^(google-chrome)$" + # "tile, class:^(google-chrome)$" + # "group set always, class:^(google-chrome)$" + + # # IDEs and editors - generous space for productivity + # "size 80% 90%, class:^(code)$" + # "tile, class:^(code)$" + # "center, class:^(code)$" + # "group set always, class:^(code)$" + + # "size 80% 90%, class:^(neovim)$" + # "tile, class:^(neovim)$" + # "group set always, class:^(neovim)$" + + # "size 85% 95%, class:^(jetbrains-.*)$" + # "tile, class:^(jetbrains-.*)$" + # "center, class:^(jetbrains-.*)$" + + # # Terminals - golden ratio proportions for elegance + # "size 61.8% 70%, class:^(kitty)$" + # "tile, class:^(kitty)$" + # "size 61.8% 70%, class:^(foot)$" + # "tile, class:^(foot)$" + # "size 61.8% 70%, class:^(com.mitchellh.ghostty)$" + # "tile, class:^(com.mitchellh.ghostty)$" + # "size 61.8% 70%, class:^(alacritty)$" + # "tile, class:^(alacritty)$" + + # # Media applications - center stage + # "size 80% 80%, class:^(mpv)$" + # "center, class:^(mpv)$" + # "size 85% 85%, class:^(vlc)$" + # "center, class:^(vlc)$" + + # # Communication apps - sidebar friendly + # "size 30% 80%, class:^(discord)$" + # "tile, class:^(discord)$" + # "size 30% 80%, class:^(slack)$" + # "tile, class:^(slack)$" + # "size 35% 85%, class:^(teams)$" + # "tile, class:^(teams)$" + + # # File managers - explorer layout + # "size 65% 75%, class:^(thunar)$" + # "tile, class:^(thunar)$" + # "size 65% 75%, class:^(nautilus)$" + # "tile, class:^(nautilus)$" + # "size 65% 75%, class:^(dolphin)$" + # "tile, class:^(dolphin)$" + + # # System utilities - compact and efficient + # "size 50% 60%, class:^(htop)$" + # "center, class:^(htop)$" + # "size 55% 65%, class:^(btop)$" + # "center, class:^(btop)$" + + # ######## TAGS ######## + # # "tag:+browser class:^(brave-browser)$" + # # "tag:+browser class:^(firefox)$" + + # # "tag:+ide class:^(code)$" + + # # "tag:+term class:^(kitty)$" + # # "tag:+term class:^(foot)$" + # # "tag:+term class:^(com.mitchellh.ghostty)$" + + # "float, class:(clipse)" + # "size 622 652, class:(clipse)" + # "stayfocused, class:(clipse)" + + # "float,class:($calculator)" + # "workspace special:special:calculator,class:($calculator)" + # "size 622 652, class:($calculator)" + # "stayfocused, class:($calculator)" + + # "float,class:($passman)" + # "workspace special:special:passman,class:($passman)" + # "size 622 652, class:($passman)" + # "stayfocused, class:($passman)" + + # "float,title:($resourceman)" + # "workspace special:special:resourceman,title:($resourceman)" + # "size 622 652, title:($resourceman)" + # "stayfocused, title:($resourceman)" + + # "float,class:($obsidian)" + # "workspace special:special:obsidian,class:($obsidian)" + # "size 622 652, class:($obsidian)" + # # "workspace name:ide tag:^ide$" + # ]; exec-once = [ "nm-applet --indicator" @@ -606,7 +679,7 @@ in home = { packages = with pkgs; [ - rofi-wayland + rofi networkmanagerapplet brightnessctl playerctl diff --git a/modules/home/gui/desktop/waybar/README.md b/modules/home/gui/desktop/waybar/README.md new file mode 100644 index 0000000..16b5250 --- /dev/null +++ b/modules/home/gui/desktop/waybar/README.md @@ -0,0 +1,155 @@ +# Waybar Theme Configuration + +This module provides a comprehensive waybar configuration that maintains visual consistency with Hyprland and Stylix theming using the Catppuccin Mocha color palette. + +## Overview + +The waybar configuration is designed to: +- Match the Catppuccin Mocha theme used throughout the system +- Complement the Hyprland window manager styling +- Integrate seamlessly with Stylix automatic theming +- Provide a modern, animated, and responsive status bar experience + +## Color Palette + +The configuration uses the Catppuccin Mocha color scheme with the following key colors: + +| Color | Hex Code | Usage | +|-------|----------|-------| +| Base | `#1e1e2e` | Background, dark text | +| Mantle | `#181825` | Secondary backgrounds | +| Surface0 | `#313244` | Module backgrounds | +| Surface1 | `#45475a` | Hover states | +| Surface2 | `#585b70` | Muted text, borders | +| Text | `#cdd6f4` | Primary text color | +| Mauve | `#cba6f7` | Active workspace, accents | +| Blue | `#89b4fa` | CPU indicator | +| Green | `#a6e3a1` | Memory, battery good | +| Teal | `#94e2d5` | Network indicator | +| Yellow | `#f9e2af` | Temperature, warnings | +| Peach | `#fab387` | Audio indicator | +| Red | `#f38ba8` | Critical states, urgent | + +## Features + +### Workspaces +- **Hyprland Integration**: Direct workspace switching and status +- **Visual States**: Active, urgent, and default workspace styling +- **Icons**: Custom Nerd Font icons for workspace numbers +- **Animations**: Smooth hover and state transitions + +### System Monitoring +- **CPU Usage**: Real-time CPU percentage with warning states +- **Memory Usage**: RAM usage with detailed tooltip information +- **Temperature**: System temperature monitoring with critical alerts +- **Battery**: Battery level, charging status, and time estimates +- **Network**: WiFi/Ethernet status with connection details + +### Audio & Media +- **PulseAudio**: Volume control with mute detection +- **Icons**: Context-aware audio device icons +- **Integration**: Direct pavucontrol access on click + +### Window Management +- **Active Window**: Shows current window title with app icons +- **Submap**: Displays active Hyprland keybind submaps +- **Tray**: System tray with attention states + +### Clock & Calendar +- **Time Display**: 24-hour format with date alternative +- **Calendar**: Interactive calendar with Catppuccin styling +- **Timezone**: Configurable timezone support + +## File Structure + +``` +waybar/ +├── default.nix # Main module configuration +├── config/ +│ ├── config.jsonc # Waybar JSON configuration +│ └── style.css # Custom CSS styling +└── README.md # This documentation +``` + +## Consistency with Other Components + +### Hyprland Integration +- **Border Colors**: Matches Hyprland's active border gradient (`cba6f7` → `f2cdcd`) +- **Opacity**: Consistent opacity settings with window decorations +- **Gaps**: Respects Hyprland's gap settings in positioning + +### Stylix Integration +- **Font Family**: Uses Stylix-configured fonts (Ubuntu, Font Awesome) +- **Font Sizes**: Matches Stylix application font sizes +- **Base16 Colors**: Directly uses Stylix base16 color overrides +- **Automatic Updates**: Theme updates when Stylix configuration changes + +## Dependencies + +The module automatically installs required packages: +- `waybar` - The status bar application +- `font-awesome` - Icon fonts for modules +- `pavucontrol` - Audio control GUI +- `networkmanagerapplet` - Network management tools + +## Customization + +### Modifying Colors +Colors are defined in the CSS file and can be updated by changing the hex values: + +```css +/* Example: Change active workspace color */ +#workspaces button.active { + background: linear-gradient(135deg, #your-color, #your-secondary-color); +} +``` + +### Adding Modules +New modules can be added to the configuration by: +1. Adding the module name to the appropriate `modules-*` array +2. Defining module configuration in the settings +3. Adding corresponding CSS styling + +### Layout Adjustments +- **Position**: Change `position` from "top" to "bottom" +- **Height**: Adjust the `height` value +- **Margins**: Modify `margin-*` values for spacing +- **Module Order**: Reorder items in the `modules-*` arrays + +## Animations and Effects + +The configuration includes several animations: +- **Workspace Transitions**: Smooth scaling and color changes +- **Critical States**: Blinking animations for battery/temperature warnings +- **Hover Effects**: Subtle transform and shadow effects +- **Submap Pulse**: Breathing animation for active keybind modes + +## Troubleshooting + +### Common Issues +1. **Missing Icons**: Ensure Font Awesome is installed and available +2. **Temperature Module**: May need to adjust `hwmon-path` for your system +3. **Network Issues**: Verify NetworkManager is running +4. **Audio Problems**: Check PulseAudio/PipeWire status + +### Debug Mode +Enable debug output by adding to waybar execution: +```bash +waybar --log-level debug +``` + +### Reloading Configuration +Waybar automatically reloads on configuration changes, or manually: +```bash +pkill -SIGUSR2 waybar +``` + +## Integration Notes + +This waybar configuration is specifically designed for: +- **NixOS** systems using Home Manager +- **Hyprland** as the window manager +- **Stylix** for system-wide theming +- **Catppuccin Mocha** color scheme + +The module integrates with the systemd user session and will automatically start/restart with Hyprland sessions. \ No newline at end of file diff --git a/modules/home/gui/desktop/waybar/default.nix b/modules/home/gui/desktop/waybar/default.nix index 553bd42..e7728a8 100644 --- a/modules/home/gui/desktop/waybar/default.nix +++ b/modules/home/gui/desktop/waybar/default.nix @@ -1,6 +1,12 @@ -{ lib, config, pkgs, namespace, ... }: +{ + lib, + config, + pkgs, + namespace, + ... +}: let - cfg = config.${namespace}.gui.desktop.waybar; + cfg = config.${namespace}.gui.desktop.waybar; in { options.${namespace}.gui.desktop.waybar = { @@ -8,14 +14,273 @@ in }; config = lib.mkIf cfg.enable { - programs.waybar.enable = true; - programs.waybar.systemd.enable = true; - + programs.waybar = { + enable = true; + systemd.enable = true; + + # Use external configuration files for better maintainability + settings = { + mainBar = { + # Waybar configuration for Hyprland + Stylix + Catppuccin Mocha + layer = "top"; + position = "top"; + height = 35; + spacing = 4; + margin-top = 10; + margin-left = 15; + margin-right = 15; + margin-bottom = 0; + + # Module layout + modules-left = [ + "hyprland/workspaces" + "hyprland/submap" + ]; + modules-center = [ + "hyprland/window" + ]; + modules-right = [ + "tray" + "idle_inhibitor" + "pulseaudio" + "network" + "cpu" + "memory" + "temperature" + "battery" + "clock" + ]; + + # Hyprland workspaces + "hyprland/workspaces" = { + disable-scroll = true; + all-outputs = true; + warp-on-scroll = false; + format = "{icon}"; + format-icons = { + "1" = "󰲠"; + "2" = "󰲢"; + "3" = "󰲤"; + "4" = "󰲦"; + "5" = "󰲨"; + "6" = "󰲪"; + "7" = "󰲬"; + "8" = "󰲮"; + "9" = "󰲰"; + "10" = "󰿬"; + urgent = "󰀪"; + active = "󰮯"; + default = "󰧞"; + }; + persistent-workspaces = { + "*" = 5; + }; + }; + + # Hyprland window title + "hyprland/window" = { + format = "{}"; + max-length = 60; + separate-outputs = true; + rewrite = { + "(.*) — Mozilla Firefox" = "󰈹 $1"; + "(.*) - Visual Studio Code" = "󰨞 $1"; + "(.*) - vim" = " $1"; + "(.*) - nvim" = " $1"; + "(.*)Spotify" = "󰓇 $1"; + "(.*) - Discord" = "󰙯 $1"; + }; + }; + + # Hyprland submap (keybind modes) + "hyprland/submap" = { + format = "󰌌 {}"; + max-length = 20; + tooltip = false; + }; + + # System tray + tray = { + icon-size = 18; + spacing = 8; + }; + + # Clock + clock = { + timezone = "America/Vancouver"; + tooltip-format = "{:%Y %B}\n{calendar}"; + format = "{:%H:%M}"; + format-alt = "{:%a, %b %d, %Y}"; + calendar = { + mode = "year"; + mode-mon-col = 3; + weeks-pos = "right"; + on-scroll = 1; + format = { + months = "{}"; + days = "{}"; + weeks = "W{}"; + weekdays = "{}"; + today = "{}"; + }; + }; + }; + + # CPU usage + cpu = { + format = "󰻠 {usage}%"; + tooltip = false; + interval = 2; + states = { + warning = 70; + critical = 90; + }; + }; + + # Memory usage + memory = { + format = "󰍛 {}%"; + tooltip-format = "Memory: {used:0.1f}G/{total:0.1f}G\nSwap: {swapUsed:0.1f}G/{swapTotal:0.1f}G"; + interval = 2; + states = { + warning = 70; + critical = 90; + }; + }; + + # Temperature monitoring + temperature = { + thermal-zone = 2; + hwmon-path = [ + "/sys/class/hwmon/hwmon1/temp1_input" + "/sys/class/hwmon/hwmon2/temp1_input" + ]; + critical-threshold = 80; + format-critical = "󰸁 {temperatureC}°C"; + format = "󰔏 {temperatureC}°C"; + tooltip = true; + interval = 2; + }; + + # Battery status + battery = { + states = { + good = 95; + warning = 30; + critical = 20; + }; + format = "{icon} {capacity}%"; + format-charging = "󰂄 {capacity}%"; + format-plugged = "󰚥 {capacity}%"; + format-alt = "{icon} {time}"; + format-full = "󰁹 {capacity}%"; + format-icons = [ + "󰂎" + "󰁺" + "󰁻" + "󰁼" + "󰁽" + "󰁾" + "󰁿" + "󰂀" + "󰂁" + "󰂂" + ]; + tooltip-format = "{timeTo}, {capacity}% - {power}W"; + }; + + # Network status + network = { + format-wifi = "󰤨 {signalStrength}%"; + format-ethernet = "󰈀 Connected"; + tooltip-format = "󰤨 {essid}\n󰈀 {ifname}\n󰩠 {ipaddr}/{cidr}\n󰚇 {frequency}MHz\n󰤨 {signalStrength}% ({signaldBm}dBm)"; + tooltip-format-ethernet = "󰈀 {ifname}\n󰩠 {ipaddr}/{cidr}\n󰕒 Up: {bandwidthUpOctets} Down: {bandwidthDownOctets}"; + format-linked = "󰤭 {ifname} (No IP)"; + format-disconnected = "󰤮 Disconnected"; + format-alt = "{ifname}: {ipaddr}/{cidr}"; + on-click-right = "nm-connection-editor"; + }; + + # Audio control + pulseaudio = { + scroll-step = 5; + format = "{icon} {volume}%"; + format-bluetooth = "󰂯 {icon} {volume}%"; + format-bluetooth-muted = "󰂲 "; + format-muted = "󰖁 Muted"; + format-source = "󰍬 {volume}%"; + format-source-muted = "󰍭"; + format-icons = { + headphone = "󰋋"; + hands-free = "󰏳"; + headset = "󰋎"; + phone = "󰏲"; + portable = "󰦧"; + car = "󰄋"; + default = [ + "󰕿" + "󰖀" + "󰕾" + ]; + }; + on-click = "pavucontrol"; + on-click-right = "pactl set-sink-mute @DEFAULT_SINK@ toggle"; + tooltip-format = "{desc}\nVolume: {volume}%"; + }; + + # Idle inhibitor + idle_inhibitor = { + format = "{icon}"; + format-icons = { + activated = "󰅶"; + deactivated = "󰾪"; + }; + tooltip-format-activated = "Idle inhibitor is active"; + tooltip-format-deactivated = "Idle inhibitor is inactive"; + }; + }; + }; + + # style = builtins.readFile ./config/style.css; + }; + home = { packages = with pkgs; [ - waybar - font-awesome # default icons for waybar + waybar + pavucontrol # Audio control GUI + networkmanagerapplet # Network management + + # Additional utilities that waybar modules might use + playerctl # Media player control + brightnessctl # Brightness control + wireplumber # Audio session manager ]; }; + + # Ensure waybar restarts when Hyprland restarts + systemd.user.services.waybar = { + Unit = { + # Description = "Highly customizable Wayland bar for Sway and Wlroots based compositors"; + Documentation = "https://github.com/Alexays/Waybar/wiki"; + PartOf = [ "hyprland-session.target" ]; + After = [ + "hyprland-session.target" + "time-sync.target" + ]; + Requisite = [ "hyprland-session.target" ]; + }; + + Service = { + Type = "exec"; + ExecStart = "${pkgs.waybar}/bin/waybar"; + ExecReload = "${pkgs.coreutils}/bin/kill -SIGUSR2 $MAINPID"; + Restart = "on-failure"; + KillMode = "mixed"; + }; + + Install = { + WantedBy = [ "hyprland-session.target" ]; + }; + }; }; } diff --git a/modules/nixos/core/default.nix b/modules/nixos/core/default.nix index 361fa67..403fa17 100644 --- a/modules/nixos/core/default.nix +++ b/modules/nixos/core/default.nix @@ -3,6 +3,7 @@ }: { imports = [ + ./fonts.nix ./secrets.nix ]; } diff --git a/modules/nixos/core/fonts.nix b/modules/nixos/core/fonts.nix new file mode 100644 index 0000000..c124471 --- /dev/null +++ b/modules/nixos/core/fonts.nix @@ -0,0 +1,39 @@ +{ + lib, + pkgs, + ... +}: +{ + fonts = { + fontconfig = { + enable = true; + + defaultFonts = { + emoji = [ pkgs.noto-fonts-color-emoji.name ]; + serif = [ pkgs.nerd-fonts.ubuntu.name ]; + sansSerif = [ pkgs.nerd-fonts.ubuntu-sans.name ]; + monospace = [ pkgs.nerd-fonts.intone-mono.name ]; + }; + + hinting = { + autohint = true; + enable = true; + }; + + antialias = true; + }; + + packages = + with pkgs; + [ + dina-font + fontconfig + + noto-fonts + noto-fonts-color-emoji + + proggyfonts + ] + ++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts); + }; +} diff --git a/modules/nixos/core/secrets.nix b/modules/nixos/core/secrets.nix index da1dbf7..c759da8 100644 --- a/modules/nixos/core/secrets.nix +++ b/modules/nixos/core/secrets.nix @@ -1,14 +1,14 @@ { + config, inputs, lib, - namespace, ... }: { imports = [ inputs.sops-nix.nixosModules.sops ]; sops = { - defaultSopsFile = "${lib.snowfall.fs.get-file "secrets"}/${namespace}.yaml"; + defaultSopsFile = "${lib.snowfall.fs.get-file "secrets"}/${config.system.name}.yaml"; validateSopsFiles = false; age = { sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ]; @@ -17,11 +17,12 @@ }; secrets = { - "git/name" = { }; - "git/email" = { }; - "git/gh/ssh-private" = { }; - "git/gh/ssh-public" = { }; - "ai/anthropic/api-key" = { }; + "vpn/wg/endpoint" = { }; + "vpn/wg/port" = { }; + "vpn/wg/privateKey" = { }; + "system/users/arrayofone/password" = { + neededForUsers = true; + }; }; }; } diff --git a/modules/nixos/gui/desktop/hyprland/default.nix b/modules/nixos/gui/desktop/hyprland/default.nix index fcca1fd..536fe0a 100644 --- a/modules/nixos/gui/desktop/hyprland/default.nix +++ b/modules/nixos/gui/desktop/hyprland/default.nix @@ -15,10 +15,10 @@ in }; config = lib.mkIf cfg.enable { - # nix.settings = { - # substituters = ["https://hyprland.cachix.org"]; - # trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; - # }; + nix.settings = { + substituters = [ "https://hyprland.cachix.org" ]; + trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; + }; programs = { uwsm.enable = true; diff --git a/modules/nixos/gui/desktop/sddm/default.nix b/modules/nixos/gui/desktop/sddm/default.nix index 30e4bac..c6e32a3 100644 --- a/modules/nixos/gui/desktop/sddm/default.nix +++ b/modules/nixos/gui/desktop/sddm/default.nix @@ -1,8 +1,16 @@ -{ inputs, lib, pkgs, config, namespace, ... }: +{ + inputs, + lib, + pkgs, + config, + namespace, + ... +}: let cfg = config.${namespace}.gui.desktop.sddm; theme = pkgs.${namespace}.sddm_theme; -in { +in +{ options.${namespace}.gui.desktop.sddm = { enable = lib.mkEnableOption "sddm"; }; diff --git a/modules/nixos/hardware/nvidia/default.nix b/modules/nixos/hardware/nvidia/default.nix index 1b8d783..575301f 100644 --- a/modules/nixos/hardware/nvidia/default.nix +++ b/modules/nixos/hardware/nvidia/default.nix @@ -1,6 +1,12 @@ -{config, pkgs, lib, namespace, ...}: +{ + config, + pkgs, + lib, + namespace, + ... +}: let - cfg = config.${namespace}.hardware.nvidia; + cfg = config.${namespace}.hardware.nvidia; in { options.${namespace}.hardware.nvidia = { @@ -9,12 +15,16 @@ in config = lib.mkIf cfg.enable { services.xserver.enable = true; - services.xserver.videoDrivers = ["nvidia"]; + services.xserver.videoDrivers = [ "nvidia" ]; hardware = { graphics = { enable = true; enable32Bit = true; + extraPackages = with pkgs; [ + libva-vdpau-driver + libvdpau-va-gl + ]; }; nvidia = { @@ -22,8 +32,8 @@ in powerManagement.enable = false; powerManagement.finegrained = false; open = true; - nvidiaSettings = false; - package = config.boot.kernelPackages.nvidiaPackages.beta; + nvidiaSettings = true; + package = config.boot.kernelPackages.nvidiaPackages.stable; }; }; @@ -35,6 +45,8 @@ in __GLX_VENDOR_LIBRARY_NAME = "nvidia"; # __GL_GSYNC_ALLOWED = "1"; __GL_VRR_ALLOWED = "0"; # Controls if Adaptive Sync should be used. Recommended to set as “0” to avoid having problems on some games. + NVD_BACKEND = "direct"; + ELECTRON_OZONE_PLATFORM_HINT = "auto"; # QT_AUTO_SCREEN_SCALE_FACTOR = "1"; # QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; # CUDA_CACHE_PATH = "$XDG_CACHE_HOME/nv"; @@ -44,7 +56,7 @@ in NIXOS_OZONE_WL = "1"; # Hint electron apps to use wayland WLR_NO_HARDWARE_CURSORS = "1"; # Fix cursor rendering issue on wlr nvidia. }; - + shellAliases = { nvidia-settings = "nvidia-settings --config='$XDG_CONFIG_HOME'/nvidia/settings"; }; diff --git a/modules/nixos/networking/headscale/default.nix b/modules/nixos/networking/headscale/default.nix deleted file mode 100644 index ce8adf3..0000000 --- a/modules/nixos/networking/headscale/default.nix +++ /dev/null @@ -1,41 +0,0 @@ -{pkgs, lib, config, namespace, ...}: -let domain = "headscale.${namespace}.com"; -in { - # options.${namespace}.networking.headscale = { - # enable = lib.mkEnableOption "enable headscale"; - # # domain = lib.mkOption - # }; - - # config = lib.mkIf config.${namespace}.networking.headscale.enable { - # services = { - # headscale = { - # enable = true; - # address = "0.0.0.0"; - # port = 8080; - # settings = { - # server_url = "https://${domain}"; - # dns = { - # base_domain = "dnet"; - # }; - # logtail.enabled = false; - # }; - # }; - - # nginx.virtualHosts.${domain} = { - # forceSSL = true; - # enableACME = true; - # locations."/" = { - # proxyPass = - # "http://localhost:${toString config.services.headscale.port}"; - # proxyWebsockets = true; - # }; - # }; - # }; - - # # environment.systemPackages = [ config.services.headscale.package ]; - # }; -} - - - - diff --git a/modules/nixos/networking/tailscale/default.nix b/modules/nixos/networking/tailscale/default.nix deleted file mode 100644 index ba59b13..0000000 --- a/modules/nixos/networking/tailscale/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{pkgs, lib, config, namespace, ...}: { - # options.${namespace}.networking.tailscale = { - # enable = lib.mkEnableOption "enable tailscale"; - # }; - - # config = lib.mkIf config.${namespace}.networking.tailscale.enable { - # services.tailscale.enable = true; - # }; -} \ No newline at end of file diff --git a/modules/nixos/networking/vpn/proton.nix b/modules/nixos/networking/vpn/proton.nix deleted file mode 100644 index 082c44d..0000000 --- a/modules/nixos/networking/vpn/proton.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ pkgs, ... }:{ - networking.firewall = { - allowedUDPPorts = [ 51820 ]; - }; - networking.wg-quick.interfaces = { - wg-proton = { - listenPort = 51820; - address = [ "10.2.0.2/32" ]; - # dns = [ "10.2.0.1" ]; - privateKeyFile = "/home/arrayofone/vpn/proton-wireguard-CA-500.priv"; - - peers = [ - { - publicKey = "WajeJDezN7JFBe//v/VMsASFyBUk01Hlyvjb0T+dTjE="; - allowedIPs = [ "0.0.0.0/0" ]; - endpoint = "79.127.254.92:51820"; - persistentKeepalive = 25; - } - ]; - }; - }; -} \ No newline at end of file diff --git a/modules/nixos/networking/wg/default.nix b/modules/nixos/networking/wg/default.nix index efebf95..d88f955 100644 --- a/modules/nixos/networking/wg/default.nix +++ b/modules/nixos/networking/wg/default.nix @@ -1,24 +1,63 @@ { - pkgs, lib, config, namespace, + pkgs, ... }: -let - # serverPvtKey = (builtins.readFile ./keys/server/private); - # serverPubKey = (builtins.readFile ./keys/server/public); - # baradurPvtKey = (builtins.readFile ./keys/baradur/private); - # baradurPubKey = (builtins.readFile ./keys/baradur/public); - # rollbookPvtKey = (builtins.readFile ./keys/rollbook/private); - # rollbookPubKey = (builtins.readFile ./keys/rollbook/public); -in { options.${namespace}.networking.wireguard.server = { + dns = lib.mkOption { + description = "DNS addresses for the wireguard interface"; + type = lib.types.listOf lib.types.str; + default = [ "1.1.1.1" ]; + }; enable = lib.mkEnableOption "enable wireguard server"; - externalInterface = lib.mkOption { - description = "External facing interface"; - type = lib.types.string; + interface = lib.mkOption { + description = "WireGuard interface name"; + type = lib.types.str; + default = "wg0"; + }; + + ips = lib.mkOption { + description = "IP addresses and subnets for the WireGuard interface"; + type = lib.types.listOf lib.types.str; + default = [ "10.20.0.2/24" ]; + }; + + privateKeyFile = lib.mkOption { + description = "Path to the private key file"; + type = lib.types.nullOr lib.types.path; + }; + + peers = lib.mkOption { + description = "WireGuard peers configuration"; + type = lib.types.listOf ( + lib.types.submodule { + options = { + publicKey = lib.mkOption { + description = "Public key of the peer"; + type = lib.types.nullOr lib.types.str; + default = null; + }; + allowedIPs = lib.mkOption { + description = "Allowed IP addresses for this peer"; + type = lib.types.listOf lib.types.str; + default = [ "0.0.0.0/0" ]; + }; + endpoint = lib.mkOption { + description = "Endpoint address and port"; + type = lib.types.nullOr lib.types.str; + }; + persistentKeepalive = lib.mkOption { + description = "Keepalive interval in seconds"; + type = lib.types.nullOr lib.types.int; + default = 25; + }; + }; + } + ); + default = [ { } ]; }; }; @@ -28,77 +67,31 @@ in # networking.nat.externalInterface = # config.${namespace}.networking.wireguard.server.externalInterface; # "enp42s0" # networking.nat.internalInterfaces = [ "wg0" ]; - networking.firewall = { - enable = lib.mkForce false; - allowedUDPPorts = [ 51821 ]; - }; - - networking.wireguard.interfaces = { - # "wg0" is the network interface name. You can name the interface arbitrarily. - wg0 = { - # Determines the IP address and subnet of the client's end of the tunnel interface. - ips = [ "10.20.0.2/24" ]; - # Path to the private key file. - # - # Note: The private key can also be included inline via the privateKey option, - # but this makes the private key world-readable; thus, using privateKeyFile is - # recommended. - # privateKeyFile = "${lib.snowfall.fs.get-file "modules"}/nixos/networking/wg/keys/baradur/private"; - postSetup = '' - ip route add 3.98.30.232 via 10.10.0.1 dev enp42s0 - ''; + # networking.firewall = { + # enable = lib.mkForce false; + # allowedUDPPorts = [ config.${namespace}.networking.wireguard.server.port ]; + # }; - # # This undoes the above command - postShutdown = '' - ip route del 3.98.30.232 via 10.10.0.1 dev enp42s0 - ''; - - peers = [ - # For a client configuration, one peer entry for the server will suffice. + networking.wg-quick.interfaces = { + ${config.${namespace}.networking.wireguard.server.interface} = { + address = config.${namespace}.networking.wireguard.server.ips; + dns = config.${namespace}.networking.wireguard.server.dns; + privateKeyFile = config.${namespace}.networking.wireguard.server.privateKeyFile; + peers = map ( + peer: { - # Public key of the server (not a file path). - # publicKey = "2932qgfQczv8nX63HFB0wupQ15f8AG3lPeKCrTMHm2g="; - - allowedIPs = [ "0.0.0.0/0" ]; - - # Set this to the server IP and port. - # endpoint = "wg.arrayof.one:51820"; # ToDo: route to endpoint not automatically configured https://wiki.archlinux.org/index.php/WireGuard#Loop_routing https://discourse.nixos.org/t/solved-minimal-firewall-setup-for-wireguard-client/7577 - - # Send keepalives every 25 seconds. Important to keep NAT tables alive. - persistentKeepalive = 25; + publicKey = peer.publicKey; + allowedIPs = peer.allowedIPs; + endpoint = peer.endpoint; + persistentKeepalive = peer.persistentKeepalive; } - ]; + // lib.optionalAttrs (peer.publicKey != null) { inherit (peer) publicKey; } + // lib.optionalAttrs (peer.endpoint != null) { inherit (peer) endpoint; } + // lib.optionalAttrs (peer.persistentKeepalive != null) { inherit (peer) persistentKeepalive; } + ) config.${namespace}.networking.wireguard.server.peers; }; - # wg1 = { - # # Path to the private key file. - # # - # # Note: The private key can also be included inline via the privateKey option, - # # but this makes the private key world-readable; thus, using privateKeyFile is - # # recommended. - # privateKey = "${baradurPvtKey}"; - - # peers = [ - # { # baradur - # publicKey = "${baradurPubKey}"; - # allowedIPs = [ "10.100.0.2/32" ]; - # } - # ]; - # }; - # wg2 = { - # # Path to the private key file. - # # - # # Note: The private key can also be included inline via the privateKey option, - # # but this makes the private key world-readable; thus, using privateKeyFile is - # # recommended. - # privateKey = "${rollbookPvtKey}"; - - # peers = [{ # rollbook - # publicKey = "${rollbookPubKey}"; - # allowedIPs = [ "10.100.0.3/32" ]; - # }]; - # }; }; }; } diff --git a/packages/kotlin-lsp/default.nix b/packages/kotlin-lsp/default.nix new file mode 100644 index 0000000..711fbf2 --- /dev/null +++ b/packages/kotlin-lsp/default.nix @@ -0,0 +1,31 @@ +{ + pkgs, + stdenv, + wrapGAppsHook3, +}: +let + version = "0.253.10629"; +in +stdenv.mkDerivation { + name = "kotlin-lsp"; + + src = pkgs.fetchzip { + url = "https://download-cdn.jetbrains.com/kotlin-lsp/${version}/kotlin-${version}.zip"; + sha256 = "sha256-LCLGo3Q8/4TYI7z50UdXAbtPNgzFYtmUY/kzo2JCln0="; + stripRoot = false; + }; + + nativeBuildInputs = [ + wrapGAppsHook3 + ]; + + installPhase = '' + mkdir -p $out/lib + cp -r $src/* $out/lib + chmod +x $out/lib/kotlin-lsp.sh + + mkdir -p $out/bin + ln -s $out/lib/kotlin-lsp.sh $out/bin/kotlin-lsp + wrapProgram $out/bin/kotlin-lsp + ''; +} diff --git a/packages/sddm_theme/default.nix b/packages/sddm_theme/default.nix index a8b47af..69c0902 100644 --- a/packages/sddm_theme/default.nix +++ b/packages/sddm_theme/default.nix @@ -148,5 +148,5 @@ pkgs.stdenv.mkDerivation { TranslateVirtualKeyboardButton="" ## These don't necessarily need to translate anything. You can enter whatever you want here. " > $out/theme.conf - ''; -} \ No newline at end of file + ''; +} diff --git a/packages/sys/default.nix b/packages/sys/default.nix index c1431ed..adc64f8 100644 --- a/packages/sys/default.nix +++ b/packages/sys/default.nix @@ -1,9 +1,14 @@ -{writeShellScriptBin, ...}: +{ writeShellScriptBin, ... }: writeShellScriptBin "sys" '' cmd_rebuild() { + local flake_name=".#" + if [[ -n $1 ]]; then + flake_name=$1 + fi + echo "🔨 Building system configuration with $REBUILD_COMMAND" - $REBUILD_COMMAND switch --flake .# + $REBUILD_COMMAND switch --flake "$flake_name" } cmd_test() { @@ -26,7 +31,7 @@ writeShellScriptBin "sys" '' cmd_usage() { cat <<-_EOF Usage: - $PROGRAM rebuild + $PROGRAM rebuild [flake_name] Rebuild the system. (You must be in the system flake directory!) Must be run as root. $PROGRAM test @@ -53,7 +58,7 @@ writeShellScriptBin "sys" '' PROGRAM=sys COMMAND="$1" case "$1" in - rebuild|r) shift; cmd_rebuild ;; + rebuild|r) shift; cmd_rebuild "$@" ;; test|t) shift; cmd_test ;; update|u) shift; cmd_update ;; clean|c) shift; cmd_clean ;; diff --git a/secrets/_db.yaml b/secrets/_db.yaml new file mode 100644 index 0000000..f30947b --- /dev/null +++ b/secrets/_db.yaml @@ -0,0 +1,28 @@ +git: + name: ENC[AES256_GCM,data:Bsj5r9d3dJZcCA==,iv:7Z2WpK5hroNFdl9wCy2vVoOxlA5rJ2H+qdh9kf1qaaA=,tag:aT3Br4TyKtvYHWLpdDopPg==,type:str] + email: ENC[AES256_GCM,data:BXUeS1xkloygkR35mHuUOZG2qPUql9xuSbgiE98Jih7uY0xEbb4oareayG8=,iv:Vio24kuOyXyVonhZ56Gnp9bj+aroBOpWehc3/Na+6o8=,tag:xIvz+jqxCt6wYW3I+SOqxw==,type:str] + gh: + ssh-private: ENC[AES256_GCM,data:FGf6BVAbmjcYXgnlSwUxR0RIVq/RMk9nXSebHNnMY+MvHSWXcdxB0TTaEp9nZfijtLimWdEn5MgZf0qauG7hvGmzj8wQ0KRy78aMtr8Qv12zUecTVQ0gBkGjvzw1y3yP4W4I3edSQirto59zIUZSN7rcElgNleHDDYJlSVCzfAUu11iQ7XVFVUIR58kSHdCVvgzUdWKx54xZVcUr68ZDYiUqNNzhYCVnxg/ViKtwNz6BU/MTUrgL4C50WW7XVvpcD08pIkLWQKv0zRBYX1exoq/Js80vfxEG7Nub6UFNZz1s4PmDIuCwsooaAnWjO9XCV/0PrGFJBFFihtLu+dDNzfYZFFw1vWq1I5Fd3lyLx2/26xa92eplnUuSQzt5MgmMKz34bpIHMvIj019LjOkyV14ELoKYXFhYAS7ceIahrhOKjTLR34DHWH9ZN4JV15wJrscgwaLMrCf5JvyqDW8yrHVBJABkff7q+UbyWmLfIdCTCrzA1Gyyu3642MgsUSUpxXjB7smBC2tCVI9BRgoKTS6/zPRR2141tWKs,iv:ZjsD+1Yhcl/EKix83QR7eSVJboMMWYINRecOTKxkqcA=,tag:+4OpxwMk6myug5Mn+145Tw==,type:str] + ssh-public: ENC[AES256_GCM,data:9YBEwKUHJ9qLa59xxxT5H+kNwNwcEV5DCSzkSwKLgeqH/fbbOiUyGxme7hBsE6Uao6vk53QpWvYcLyp3NHFWiXJ3K7qUD1aiEA2B62OZEfsBV/xEPzaw+PGP2jYx4mYpyQ==,iv:bTFmOAXTuiHTwXSel/m1ycyBmBzunYvsP4TsDQCTNzg=,tag:aKfzS5eF1tz+PXRNV25jHg==,type:str] +ai: + anthropic: + api-key: ENC[AES256_GCM,data:WhAL+1FiRGPI1qysl9Uf9q5qsYlO8Hoegrs+xeH5jAwCn6Q4FDTprJkuJ2NndkkmcaOYxrz7HtmBTL0V9pJN/zVyrSOwsrncsc+Pnx3lMWO/0hBRIIfDfn13io56u9phhSwKjcHGWBZ1QRuR,iv:63uqDkHGmtMRWozzOD/tNdAPegGzaGJ5SrQZ1HsWyxc=,tag:Z0GzzlSHF46mkPPixF/4Gw==,type:str] + gemini: + api-key: ENC[AES256_GCM,data:TVVCu2ukIOLFNdSFww04t4ie+8y5wCU+6ZuZKg9jLG+kIhY1p8x8,iv:8c024FyI+rPhNA3HUxfGA4NXOru7oWjNgMNlgzpQyUc=,tag:rlmGyUs56pSNkuGTgCc/vw==,type:str] +digits: + email: ENC[AES256_GCM,data:DiZdNStazKwhSQzxLnaWo0w=,iv:XXeVzVRf+uNKi7e79Ze7vii+lxbDy9ZCYrhzbn5gkfM=,tag:AbHSsIDd4Mb8C3hXdAKEeQ==,type:str] +sops: + age: + - recipient: age1sg27wjszvx68d2u9p2rk2k8he2xxuae475wyawcwp893sdzfnd5sqxz6ck + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArTkhIbnZKRy9NMWNyeUtB + ZndpcVJuR29QMGlhdEhQZ2tIL2RPOUlwVmd3CmVtSHlhTkZIZW44Yk1DRHU4VzRQ + V29QUVcwREkzTitONkNDTSt5VlRjMjQKLS0tIGpyWTQ2bTJEUHlsUHQwcXdtbUtO + V2NvYlkvcDdGa3ZTK29WVXprdUlVTW8KmyfTS6K/clDnuligndXA9SWxCb6KxCj+ + pX69eCfn4yv6iPBsJQreAYexGdMVhDmLgs82U+L8/yapm8UFxhgObw== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-11-01T22:37:47Z" + mac: ENC[AES256_GCM,data:YH3Yd59dmI6LGvpgX0ixVEwib+hZqtdGBcqBuSordv0M1cOYEErB5lZPjaNfQmMvfYuvanfXOJ2PgjcokSDwLluMt0rFVQ1la02va27FR8iRSZy7wUaCrg1wAQ0XN4psr2s54rVVVvBBoq5p/27QqOn4Cp5D0JEOsFDFXVKeV64=,iv:Rt+yrnk1C0lJIYs8L+ZEdUOgtaYLmO0UsDv7/qgW3OM=,tag:BZFKOUPaqz7gH8eg7Z4MAg==,type:str] + unencrypted_suffix: _unencrypted + version: 3.11.0 diff --git a/secrets/arrayofone.yaml b/secrets/arrayofone.yaml new file mode 100644 index 0000000..05e96f9 --- /dev/null +++ b/secrets/arrayofone.yaml @@ -0,0 +1,28 @@ +git: + name: ENC[AES256_GCM,data:wA7md/GDvWt6AQ==,iv:b+uzgZgJ1ZZNoUZjpQSl27BboFdsp9St+WtPuIyoU3E=,tag:TxFclEAaGMkstPJ1VImzMg==,type:str] + email: ENC[AES256_GCM,data:gP8chWGWIpNjecjIN8S4iY3v+YARNQ6/6RJIjiUaFzHZ4+q9AjUjbmUFb3w=,iv:0a69q7dwpWcH03VzBN2bizlDwQsxQh2mGYF/QUP/LGs=,tag:IKQBxNANKxEki4W+g7XTbQ==,type:str] + gh: + ssh-private: ENC[AES256_GCM,data:JD3afmODAGotbbzIQn77sGM7YP5tIm7z4auRXM2hNWoHc5F8oZMFfYD6piN1+jGWXNbjY6tKJs1UMXeqnYNMuMYsnZmSrjB8sz+/sE24/wJpIWyKmE+Y2XFJUM5HWptBcB9hOaH5xJIVMiFIycez5DendVnkJBzwTErO+Kb4O5YjYHDCLMXBrh81MLFDltEhGg9QanlGxU2t50RZXn0GjOLM1bVOaDQVtOE1wOFdHgGB6Re1E/b1vnIzyj9NK0rVThf+BALZS7WNfl4AxZnQW8ptulXyDe/gSj5nNMnTWGtxWJW6POVnI1XikX+wG+yVCC3IQ5ef1nA7slyEsDt4dXab4cfyHRjvx59b9okJc1ptMbjTQLnWVfBQP1NmswTpr4lozgDZHJQOx3fBtt5kTzMe+PzC9FpDMcTKCbAwWjyNtQtqm+ZYe79JyFRi7cUzq55jzWXaZouMLk/g1msx+C02hk5bLe54z7Th/YLehgKt3gFlZJC7KYbaPQy/EAjiopZUq88ydsX2Za4QAzwgj2ElkK6pK9NW8cyJ,iv:WpvvGFbQPJV98OXDacRU6D4WpSQAB51AWaZMiFSX6VE=,tag:peoZC8bLHYOQz6jwqw3uOw==,type:str] + ssh-public: ENC[AES256_GCM,data:C6rhlzUdlfHir1Qw4Fr8AlPwV9E5J3xLyEqxSlZD7RBf4ceZ85VPk4DDcLVZ2TlO5kYBr1sx9bKsBNK5bamwQ9WckwvPcTTztZMo6V2vpFOE3MiyL/OfQze14ttPmYnrKw==,iv:lgJqn6A18NZl2whbeP6MVPrt+bRkdOpY0rKIO1k+PEI=,tag:JI7Z2Ju2npDzMvOUPn0T5Q==,type:str] +ai: + anthropic: + api-key: ENC[AES256_GCM,data:6d2U9FkuzHM3gCOiuMjxmmwS5FtzcyZXxod0IwIN/UqpMTfVAl11q/MxGOsKOV0G3tjl1rH5bYSqnPlezD/LTZi20rQufytHzTRPns98kWz6gdzwxDz//LEY8GHAo11nNOEjLu0eNnbaH0Ho,iv:P4iN6rvmjZam2trmtAQxjtDru/IrxEagk6QCbCFH6tQ=,tag:GPSZYsPvyJQV1H6bJy3snQ==,type:str] + gemini: + api-key: ENC[AES256_GCM,data:FHTdZqxkEVF0KkpmI4kZJOQMSpt4yqazlySYPL63wAyUBljgby73,iv:Xa5SmMRR2nYFuNrDSvTRh81hWi4JatlwdwvYKuaEUtc=,tag:dLmsr61jv8lOFiCv2FcthQ==,type:str] +digits: + email: ENC[AES256_GCM,data:c5JrJZxk62tnpyamSjWDrmY=,iv:yrDrM5VmKaoZ8lhTy+wIQaAr6aLKY8D6/zfDmQ/nAVU=,tag:pV4+OG0egY5NUU9sAOtDnQ==,type:str] +sops: + age: + - recipient: age19r87m08mt03zg8ustzlx733s4m4wph6vvkd0qxlequfje5k0mawsy68vp2 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3QkVYaWRuMFhRSlcwV3Fq + U3hWaUdldkJBblV1U3hRdVBJTjJwcVpxd0JVCk1HVVBNSGZzblFwSXJzek5TUEFJ + MWF2ckQwc2NtUGRqeDk3R3Q4cHlpTlkKLS0tIGk5ZDRyb3hhWS9BRFQ0d3NMMEJx + dXNCRGsvM1pZd3pWeGNmVzJnVkJMelEKFrd6yacZO9Y9+Z3M5PPd1IKsedlEXsD7 + +kpZ/Sv7jWqg0CI9EUEtI3lwmTTrOzc4zYON7c2wW2WXwdo/fOFClQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-11-14T23:32:48Z" + mac: ENC[AES256_GCM,data:x7JYSY/E72IusCneXgouQk/SpLgeIX2tPdFq6Tm4uFNDYe+x09rbWFajPZUog9uRK06d8G2cXHbH7Fu/v9WoaxTICieMpv3PR8tVqzfYXCsLbWLEKL4heUF/nNmjWLxskaB45tWouDLyWP5vZF81GYAIqu9RG2lHUKG2uK9qLNI=,iv:+h4K6TyWcsThMVFowljSJxwKAVk9arR/v2hRJAwxO5M=,tag:ksBP0Qe/22I1tAaT3f5X5A==,type:str] + unencrypted_suffix: _unencrypted + version: 3.11.0 diff --git a/secrets/baradur.yaml b/secrets/baradur.yaml new file mode 100644 index 0000000..7c3726f --- /dev/null +++ b/secrets/baradur.yaml @@ -0,0 +1,26 @@ +vpn: + wg: + port: ENC[AES256_GCM,data:Xb6MYPs=,iv:f5MqJFtLcbxqA4UVIOqneQiyogn2DzkpSyRPTjnKTsE=,tag:WFtVNPQop43dfNwdJwWWyg==,type:str] + privateKey: ENC[AES256_GCM,data:j+foonVgiJsrGkZ3Lgc2lMShB6zV3jDRut81cWXxuxDm4543APaBvj6OWaY=,iv:ICIfgQyrb+HZRn/oykQCB8UsqDeusv3dUtXAxJ/PHYw=,tag:loG/DpzjuAfvuXFnBNOi1Q==,type:str] + endpoint: ENC[AES256_GCM,data:zTdNORqtCkc4VmdpJbIIFoww,iv:JC/KlfimqXdsE2NfRhuUw6iCHRqecut35khxq9v0S2M=,tag:NJ1vQnDaexyZi4gskw+xiw==,type:str] + endpoint-ip: ENC[AES256_GCM,data:NsGwiyxPpSX9gcaX8vM=,iv:m6ppILpIM5XBY6Ypelo+VRTq7rYHckbc7X3hejQ+O0Q=,tag:4MWBppOrESTlQV6jSwKAYQ==,type:str] + endpoint-ip-port: ENC[AES256_GCM,data:Y0nEswjllcfrV+E+KCDBM3Lz,iv:EioFT0lTcGLELB67Pbisk9GxbLwNMCVTG1qGdWsCkL4=,tag:ZBmG/4y+oMPTyKyumNFFOQ==,type:str] +system: + users: + arrayofone: + password: ENC[AES256_GCM,data:waOvH4Ptc6zWpGYJv4tf+Jo1gfduUQjrJGL8go2yB+j/kEpaUc5MYhhpzsemNkybbUR8qnLtkVy9+zDsqspNAQ+HNSSf4sVmVg==,iv:E6/1rrT8Ia9/aYa7ziTdB4/zOVCCHQwY1BVEshoMMT8=,tag:KMVshPqx+rOQ59RLlCJwwQ==,type:str] +sops: + age: + - recipient: age1fe2alznmwldqrnlx09n4e7hfc3kflm2h9lmgem54kcadze5kp53qjuyrqy + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuQ0NVcTJlaEJRejBwbUN3 + NXQwRzUySlJqUndHZ1d5RS9oQVF1bmV1SEcwCnM0SlFrbSt0QzVKVmNBb0VBN2xu + QkRIWHoydW1CQTk2Wmw5TDZ5M0pxdFkKLS0tIGlFMXlJcGpHQUhLSWc0MmNRbjJz + aFI1UWtCT3hWTEM0S2RaQTFsdEx3cDQKDrON47iynQQTk82oZsjYGSrBk654yYmR + BjGcIvY69gVJoizqx+0TaPoQ56Iw+UZ940HMSxinJEhNSJRED9eDEw== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-11-01T22:27:02Z" + mac: ENC[AES256_GCM,data:OY6UYc/pXDkIWQ8ofiE5GiWapP4qLXp/WJeFd6R3tffZcKzVEloPukIceiDPXk1DsisMkwcoXA8M52ny7uQCo5N/HHIXhxaUrbIqaHnw9DlAn2PimWQTKKuXnAaBWG21Lume2pPK2LpXuBOifEUt16wr0LqwnAb3O1lhV9/zga4=,iv:V5ZehkeI2Ur0ZzSt7/z7lFOS3Dnkp/tlOq2SHyoW11g=,tag:xqIBTSPVfOyk9+svMvTmfQ==,type:str] + unencrypted_suffix: _unencrypted + version: 3.11.0 diff --git a/secrets/db.yaml b/secrets/db.yaml new file mode 100644 index 0000000..6f7589b --- /dev/null +++ b/secrets/db.yaml @@ -0,0 +1,28 @@ +git: + name: ENC[AES256_GCM,data:Mrk00Bcmk6atJg==,iv:kFxRlo8BBcXnWogAg6waGo42/7EI0x1WDa+HpRkqYwo=,tag:ONbxjLU+S1DlusyJxKdwCg==,type:str] + email: ENC[AES256_GCM,data:fiJLNmEyIyyowYhuqSsVIQfLtqz53VhAIVJis9b/R3MEC8pVEo7eefUJiw8=,iv:F4FOTgEwwA3phANg1xiIk+qfxL7ZGj9X7MW1hgjGA0c=,tag:ZI313TKofd3p8MwPmg/Cdg==,type:str] + gh: + ssh-private: ENC[AES256_GCM,data:O9zLiwz+w7OwvwrPYQn2PMTQLm6vkrHknSROw7VWQBtIMVPrjDim0xVPlNaeJ8v+NwvHM+IxDBWLXKINOiET7BYJrKA5sGXJhGeOC+hEC+rusoTBVdcO+3AzWxUrtPyeE7eUY7cnUeGjItjTNz/ezn93HNGYc4gqX9axyrfqAsn4US6zoFwQO2t5b0g/5jbpWD7qncxK4jG1mSx0R+17aoZpCS0o3xPKz5EucWgFv1pFCXMIsnUbhPu78CTo6Saa5wbfeJ2NQrNc3/dZT0eQjYlLtGmh71iYq1Uulk4kFy3c40/7ID/t16rGxXjjtL150UUSgMY53ALBOIjl9Radsya6MxieRkk/5PiaEWkHf2hxVL56ykSCkDMuB9tvHhwgF9whCZlSmh9wxgx+eczB7R2OXujUQCmFCdcXeREd9wD1jVnB9NUJAPFJZzmg6YmGXs/YJqVy+yzUeqTciwRoS1wd5QqTxIWg4aJi4h9T98FO0JXnwTt7WLFs572k+EniHvdjuAT2NiYoTLSdPQWfHd9H6m7xczM2eebx,iv:4GTrMLFVltEpTg8jpq6VvF74AwWi+zHS2IWh9HLI21I=,tag:NglU1VDaCj1C1HrlhuDXVw==,type:str] + ssh-public: ENC[AES256_GCM,data:gzUwV/uQ8ioXwT/d+ZtF27jLR5AOpPZy1XqVaWYgG4jUMCucwvBAOTsS/3cgJjrw/wMLG+ptnaCwg/UBL0Iij1qjncWhAFfFs1UN4YeCPUiATeVyn2iDVc5G01YgoNH7Ig==,iv:mA82OfmCIivyuftggW0Eq6wPFV9vqKutmd1Et/WNeMs=,tag:nwfwUaTV926kYWQ6P15YSQ==,type:str] +ai: + anthropic: + api-key: ENC[AES256_GCM,data:UoVMdQyLtCSx9dW+Wq0LsiQpPe+YCtz5ZZ9Mv+KWzy6E3Xd5Db1gA2GEt+DTNVuHcrDXepTeWKRNknK4x+BvSyOs1hVG3YQPL64keCeys2WrWUzrY0DONMyLbDDPHG/z/gbxtMQ0fwIXKH5i,iv:KpZhDMNvcugpQSBK5joyc5PqI3NtFT2/1G2/8pxSM68=,tag:CgCK3qX42wfWXkDabd631Q==,type:str] + gemini: + api-key: ENC[AES256_GCM,data:TAPO6QNkUSGRgDE0+Y1jwGwbKslZYmGylQgXePqu08AgVf7Kzam/,iv:Ma3SJB0IngVizvnheQt/FP4LjmKZ3AL4ismic5K/Ri4=,tag:uWchRR8YQOIuAJ6c3g6upw==,type:str] +digits: + email: ENC[AES256_GCM,data:1cddiUhFdMZ3zE64IHh05BM=,iv:Mx+Z57Tc53HuD2QgrW4OiOftdeJQ85BmhJ5NnLGLlYs=,tag:dkZA5jTGzI/eXc6uYGueTw==,type:str] +sops: + age: + - recipient: age19r87m08mt03zg8ustzlx733s4m4wph6vvkd0qxlequfje5k0mawsy68vp2 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGRCtrMG1hMGFWRTQ5bGox + Q2hBNkZDSDdSV1lOUi9pS0crZzBDVmxBc1gwCk1EZVZuZzRSOGZhbVF4eXJKQitY + dm4yTE1LR0RDWThHNEY0STFoVGkxMlEKLS0tIFkrbXcycnVCU01lemtDUDJPZjBQ + WUtGczFFK3IzUDZaVk1xdDNCa2tBTUEKFTaPmf1NYUazSAMHxjMNrIjHzHxNOP4O + O5BZhqr6X7hhVfVaLbuW3CbZ7utzHj3MqtIBopUZshdfYCH57pABdQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-11-15T22:41:59Z" + mac: ENC[AES256_GCM,data:qoi0/1diBEjrkUCRL4H8247eegbbgyb32+VozuVv8F0sLjVkzThJvL/zgGf0h6TauHPde+Mcz43bMwQDDD2CerqRnNoRSM9GDOGqdA0LRDmW+2IYSE06SK+vQqViGUqzVlpql7mjZ9rWDn9toYLmx6uolgbadT+5ejaxoWh6hss=,iv:Mw+kUMfhYXJOIbut1Ui7TRmS4L7zF9i9kiBlnrkZTsQ=,tag:8ZUccbSwVN6p0H0vW8NQ5g==,type:str] + unencrypted_suffix: _unencrypted + version: 3.11.0 diff --git a/secrets/dbook.yaml b/secrets/dbook.yaml new file mode 100644 index 0000000..95f2da2 --- /dev/null +++ b/secrets/dbook.yaml @@ -0,0 +1,26 @@ +vpn: + wg: + port: ENC[AES256_GCM,data:6EJnHJM=,iv:d95KclPSkeF+Iva2n6XUKmw7fBaubiZ+2KnXJDWuUDA=,tag:FZwD/WvmazMJppK6U2XLDw==,type:str] + privateKey: ENC[AES256_GCM,data:8znQcc4EiHXTM03ef1RaU+gGFg2V1Bamj6d2CDrYdWkD3hrGFs5L3HRQoR0=,iv:Ygm9fcpgso5FX9cg60p/HlLeZMCYN3FxIiA/95a2bMU=,tag:FQlivzgwx3Kr4L0SwYSohw==,type:str] + endpoint: ENC[AES256_GCM,data:ZbnEVO23JRxCNjZ34QVyd0/t,iv:W9G3JXE9aCZ4OI3v9W26egEdq1qoauNx3AeF5N51rm8=,tag:BCdQr2zSpx9GmvV1pr4mcw==,type:str] + endpoint-ip: ENC[AES256_GCM,data:JANhXcVVkg5JI+gIRMc=,iv:bm2fnKvKtk26vSBcneMZSwiOVK6PR1qrLCm2j7f7U6U=,tag:Wp5qDa47LsDsbg1C5e1PFQ==,type:str] + endpoint-ip-port: ENC[AES256_GCM,data:bzzuNuyLaHd9eBC8+ByeGXlw,iv:alWtCiUT6zYrYMGlWauTpOxNwJrktvJPX01+TE2O6OU=,tag:BmIO5uyTIkCa4eWyYg09vw==,type:str] +system: + users: + arrayofone: + password: ENC[AES256_GCM,data:WFzxTwg+Bb0Y7qIVz05p3nHnMvzv+N4Kmyz+UdOg8qcgX3qH0GDFaLo512G7LTphEirEinIkytipFDvGFUH2W3+DKBbCCMhWBQ==,iv:WtLeJgXBf/kEsgRd86KmRXCIhiL7wuQasjFwz6ryGck=,tag:7VEarYN1ZZ6PxT7XYJrD9Q==,type:str] +sops: + age: + - recipient: age126t4jjumls89dfl83cx3lvukhwad5nte38zeq5uue4m39ex9kfeqtw4r2v + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBEM0NWVHFzamhxMHhLNEpy + WUZFNXJQUmZ6bHFadzNLM2RadW00NHBCVjBzClFoMHhLZGZYaThnM1QxWW9tamgz + blB5L2lTdTZzekIyMFZ3QzFNeGNLdnMKLS0tIGEzU0UzUlZ0VHA2a0cxeS8zVGxv + aTBqaTF5YjY1c2pURjh0dHNUK1ZHdm8K/1oi9JrS9o2jgIXAHjcnJyEyP4nN4uor + OrGS8F2gcnlsWvbUZbEpp+XjewzBZUc7CXs9SvqoPtJapQ8haCsstA== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-11-01T22:37:21Z" + mac: ENC[AES256_GCM,data:QdqbU4VnmYdWw2dpVMpzFifXCY9oRXj1pBi448yTc2RvoeTjn7VCr36DNcdk1ddorVK4u4nhk1Y2d1uimkyW9Ex1md/upzTiQ9mlhUttSvlneqjStwTo43Z24uuEkgkgloVelTpbKij0WmbrnBssudy1DwmmtMQiXFTVSPFbpKU=,iv:55SLdhk6Oc1iVizVI1HNTdTYyMvF5f4kto6eJExJ0c4=,tag:31mpix1nO7tiWep71mCoYg==,type:str] + unencrypted_suffix: _unencrypted + version: 3.11.0 diff --git a/secrets/fellowship.yaml b/secrets/fellowship.yaml deleted file mode 100644 index 2b83bb2..0000000 --- a/secrets/fellowship.yaml +++ /dev/null @@ -1,50 +0,0 @@ -git: - name: ENC[AES256_GCM,data:APMghngrmBXM2w==,iv:curAnsT5w0s6e0SWzokik5IADpZpIsr5MbtT35ktvaw=,tag:HEjsN9QbObmEbX6vSq4v3w==,type:str] - email: ENC[AES256_GCM,data:N7xHGeRmHqLCHNu9K+Hg+y33wNWVIvVlzhXZG3Q7dmdDs6SbYWzHDhNYDrA=,iv:voMZtn3tJ9PaZUaSrm0eGMiI13rEhpY5BxLuyqBU5lo=,tag:xW/i37G9Gtr48o6ivVKNCA==,type:str] - gh: - ssh-private: ENC[AES256_GCM,data:rqb4jVFZhk2iSQLqmB3sE4rHd/yBrLLvtJfh3iEjg3LhueHNPw99zJVmZJfFJlSUQVdx+vcDXp5pxSs9VaAobADGMQ5FC40aC5b56NK+yq9i9656Y9QpgDFIZsqFLVBYZ4PllyG/xmmUkhJGwhha8MgGvX6IQVxFW9azyuO+Ehk+QPbIboTNl0QuoNrOWn0gfZoIDvdGRMCXK4LS7O1nlG8r2fwLTB9SdTYSKCdEbntSFiHX3Cah/neNgf9gPkCh34xZGzEKnOdXhgBgssPEbMpFIoVUIM8OiZW57plB2r6zAxPwPQQ8cfY8AYF9BDV5pzSFJrWfXgUxVYM1gtwONSZgMuaz5Bl2pJmedOnkfb6kFXYVSlCjh0tc8EbJp7LT8Xz/Qj275hmeNlZzBBUnj4GHn1x2Kx4lcvGdPVaCCIt+cRYUgrdCYZH72CfSUHCUKtX1S0d6lXJS6XQVvbAgF26EP2rLhE6rPC8lvh63WWH45L8jsApUhwzXiZjTg0F+XIhgqoYAKixYlp3XIfIf0rlruCz7pe8J083E,iv:N6gTUEEHaxKaOxJ525/lQCnNdcglUcfouwv7wOPQucw=,tag:ByM1I0o9ncdxpTgAorUO9Q==,type:str] - ssh-public: ENC[AES256_GCM,data:HbSsf82h96W+H3yOBSuPIDzkxmeYaiRwqr8bxgJInQ/R7i0CY9cjvU2fYAlTIm+ScqNJEQJwygZ5yglsG4MbnU61j+0i2wgKsX5sU1KUViZwEEmsVmG8Nb7dq12C1Z1tqw==,iv:mbb4vbkRzXnhGlUZTZ1rcGA0SDFXjgF11uylov9tl5k=,tag:tVFSZ2RmsmLZf/dVuC7boQ==,type:str] -vpn: - wg: - peers: - hub: - endpoint: ENC[AES256_GCM,data:O/LA8LJSZGBOfzx8maI=,iv:quNAnIwkBJHAUYhfmFUZ7+KJtpuKgXRUtC56GFGX7+g=,tag:YB7h2U7TXE+LDxMNE1cy1A==,type:str] - ip: ENC[AES256_GCM,data:+jEvH0prSTjTvkU=,iv:bxUR6v41q9YtNFFHeeKdN8H9RmiNin+ymj8VkbqgGwc=,tag:WVgfM0k/6BkKhxyB8b2c5g==,type:str] - client: - ip: ENC[AES256_GCM,data:y7iS9z2gKhzRXDdx,iv:tSfv0Iddqb2IEAwzDyDno9x9kwe5Hy4aO0tgMnB3PS8=,tag:UOcgSpDmyxpYHqoImi4uTA==,type:str] -ai: - anthropic: - api-key: ENC[AES256_GCM,data:gWLjy8/2m5rL95hSix4Xq9wbEV2JsZDdA5yC0qnaUbZW1k/L4bCyVFzHslX7WEQJ5+ytwGS30o03k2rrG9uGZQpL/b17LX0y63gBfTjZWzj5HjuR82PO7aG4Tc++xeLA0a2asiVDJ1zztrz6,iv:o1c4iwA5JRSrEoMr5f4YMZfc6+WDbWT1HevVSiPK+lc=,tag:XOvwNoTKYEmSFsK0h06i0w==,type:str] -sops: - age: - - recipient: age1fe2alznmwldqrnlx09n4e7hfc3kflm2h9lmgem54kcadze5kp53qjuyrqy - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5cktjR1ZoZDgrRXFuSUJY - SWpZcmRDOEEzT0hkbjRORy9RN0F3M2RVOFZvCktlMGd4aXZzYTZrckw2QzErZ2NS - MjhpSmk0NW1mUGhmc1JxeEZnSnd2dlkKLS0tIGtPTXhLc1lDREdLUlMyVHdrMnlE - NEVOWm4zY0dNbnVpc2lUdFNNU1BTODQKH+7OHcO8WGW/NQupA8wlCqeNEefBfaiJ - VWmJb9Rxzu/sRiUooAnLiF4fKe2aJQP50S9iOAcFnK+RpA/Hz9txBg== - -----END AGE ENCRYPTED FILE----- - - recipient: age19r87m08mt03zg8ustzlx733s4m4wph6vvkd0qxlequfje5k0mawsy68vp2 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqVlV6QytLK2d4c3hhWmFJ - RDAwV2ZEbTZUVVNTOEtjbVlzZDlUL2FuYkNVCmsvRnEwaWF4S2hDZk1TSjY1dU8v - MUxCRWplTTlxVVI0MzVhNjZsR1U2Nm8KLS0tIFBmUkh0eHpHRDRoeU1YTVFxb243 - Q25vOEVDbC9BZWVCdzZuV2wvNmJWc3MKzXIk/1BHQhH+DtzX4V6g3GIN0kPeXAkF - i/iRLEPr/MW/Lrd5tP3aXWsbE7MtGTSOAhEPYV+gI/ICFRQCIEfwcA== - -----END AGE ENCRYPTED FILE----- - - recipient: age1smv5elusy6hpywadnyfvcf0gph8yqpjyeqcf7spvfgrghd3u55qq6lc9aw - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxYUtvVzFKdEQ5NzdMS2M2 - bStMcjBpdXJTQnZTSVZNSG54ZndYRy84WFhBCjM5VmZDTUo0WXlNZG9uOGcwa1Rn - UFN4aFR5SHhxbnEwUDNlSHNhTHplWXMKLS0tIHhtKzBpbmhZck13SDlzR05nUmpr - WHk2MTcwWE15aFZXWE02Y3hoMExGaXMKhvfd1JXx1II/0iJzwbSvqEuPOn7b/N4v - Dy9YQEU4oRbdztVyeg6pcXET37HH5P/XdhUNiBgheSuX8OeVLpCGKg== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-08-27T20:09:16Z" - mac: ENC[AES256_GCM,data:J9T4ZzR9G+Ir4hNSMAmf4DV6JZOoGAIl+YlSIPA8DOf0EcjW1Sq+7ZexCHHQ92n8loBAq0S8N53X4FT3G4xhDasMT8xcgT7OmQMIPhD0SKQAJEjxXHqqurQlN4lqzN3rRuXBO3pdekXFv8oSY8st3oDzHQ69YcQw1T9PqzhBTQ8=,iv:PKhpIh0lPDNAa/LWD1Xe9dzUEXT0R6WcOaDh3AxfPBs=,tag:3xywd5IDDG33iXShrxhYAQ==,type:str] - unencrypted_suffix: _unencrypted - version: 3.10.2 diff --git a/shells/digits/default.nix b/shells/digits/default.nix deleted file mode 100644 index afcb669..0000000 --- a/shells/digits/default.nix +++ /dev/null @@ -1,55 +0,0 @@ -{ pkgs, ... }: - -pkgs.mkShell { - name = "nix-digits"; - - packages = with pkgs; [ - # go - delve - go_1_23 - go-ethereum - gopls - gotools - go-tools - golangci-lint - - # java - # jdk21_headless - - # js - deno - nodejs - typescript - yarn - - # tools - bash - docker - docker-compose - gcc - gh - git - gnupg - gnumake - htop - jq - k9s - kubectl - kubectx - kubernetes-helm - lazydocker - lazysql - lf - minikube - neofetch - neovim - openssl - podman - podman-compose - podman-tui - postgresql - protobuf - ripgrep - vim-full - ]; -} diff --git a/systems/aarch64-darwin/dbook/default.nix b/systems/aarch64-darwin/dbook/default.nix new file mode 100644 index 0000000..ea280b7 --- /dev/null +++ b/systems/aarch64-darwin/dbook/default.nix @@ -0,0 +1,38 @@ +{ namespace, ... }: +{ + imports = [ + ./networking.nix + ./users.nix + ]; + + ${namespace} = { + system.name = "dbook"; + }; + + system = { + activationScripts.extraActivation.text = '' + test -d /usr/libexec/rosetta || softwareupdate --install-rosetta --agree-to-license + ''; + + primaryUser = "db"; + stateVersion = 6; + }; + + nix = { + settings.experimental-features = "nix-command flakes"; + gc = { + automatic = true; + interval = { + Weekday = 0; + Hour = 0; + Minute = 0; + }; + options = "--delete-older-than 30d"; + }; + extraOptions = '' + extra-platforms = x86_64-darwin aarch64-darwin + ''; + }; + + security.pam.services.sudo_local.touchIdAuth = true; +} diff --git a/systems/aarch64-darwin/dbook/networking.nix b/systems/aarch64-darwin/dbook/networking.nix new file mode 100644 index 0000000..66a1ec3 --- /dev/null +++ b/systems/aarch64-darwin/dbook/networking.nix @@ -0,0 +1,20 @@ +{ ... }: +{ + networking = { + computerName = "dbook"; + dns = [ + "1.1.1.1" + ]; + hostName = "dbook"; + localHostName = "dbook"; + knownNetworkServices = [ + "Thunderbolt Bridge" + "Wi-Fi" + ]; + wg-quick = { + interfaces = { + + }; + }; + }; +} diff --git a/systems/aarch64-darwin/dbook/users.nix b/systems/aarch64-darwin/dbook/users.nix new file mode 100644 index 0000000..f193b69 --- /dev/null +++ b/systems/aarch64-darwin/dbook/users.nix @@ -0,0 +1,66 @@ +{ ... }: +{ + snowfallorg.users = { + db = { + create = true; + + home = { + enable = true; + config = { }; + }; + }; + }; + + users = { + knownGroups = [ + "db" + ]; + knownUsers = [ + "db" + ]; + + groups = { + # personal = { + # description = ""; + # gid = 2337; + # members = [ "personal" ]; + # name = "personal"; + # }; + # work = { + # description = ""; + # gid = 2338; + # members = [ "work" ]; + # name = "work"; + # }; + }; + + users = { + db = { + createHome = true; + description = "db"; + home = "/Users/db"; + isHidden = false; + name = "db"; + openssh.authorizedKeys.keyFiles = [ ]; + openssh.authorizedKeys.keys = [ ]; + # shell = pkgs.zsh; + uid = 501; + }; + + # work = { + # packages = [ ]; + # createHome = true; + # description = "work"; + # gid = 2338; + # home = "/Users/work"; + # ignoreShellProgramCheck = false; + # isHidden = false; + # name = "work"; + # openssh.authorizedKeys.keyFiles = [ ]; + # openssh.authorizedKeys.keys = [ ]; + # shell = pkgs.zsh; + # uid = 1338; + # }; + }; + }; +} diff --git a/systems/aarch64-darwin/digibook/default.nix b/systems/aarch64-darwin/digibook/default.nix index 640db7e..4f7642e 100644 --- a/systems/aarch64-darwin/digibook/default.nix +++ b/systems/aarch64-darwin/digibook/default.nix @@ -1,4 +1,4 @@ -{ ... }: +{ config, namespace, ... }: { imports = [ ./homebrew.nix @@ -16,10 +16,26 @@ stateVersion = 6; }; + ${namespace} = { + system.name = "digibook"; + networking.wireguard.server = { + enable = true; + interface = "wg0"; + ips = [ "10.20.255.252/32" ]; + privateKeyFile = config.sops.secrets."vpn/wg/privateKey".path; + peers = [ + { + publicKey = "4N2292pRHaViKm4TCSuDHa8x48ARn8tNZv1dSHWRuhA="; + endpoint = "wg.arrayof.one:443"; + } + ]; + }; + }; + homebrew = { taps = [ ]; brews = [ - "bun@1.2.7" + "bun@1.2.19" "gettext" "ghostscript" "git-lfs" diff --git a/systems/x86_64-linux/baradur/aws-client-vpn.nix b/systems/x86_64-linux/baradur/aws-client-vpn.nix index 444cb4f..af0c66d 100644 --- a/systems/x86_64-linux/baradur/aws-client-vpn.nix +++ b/systems/x86_64-linux/baradur/aws-client-vpn.nix @@ -6,7 +6,7 @@ , dpkg , curl , lttng-ust -, wrapGAppsHook +, wrapGAppsHook3 , libredirect }: @@ -21,7 +21,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ autoPatchelfHook - wrapGAppsHook + wrapGAppsHook3 ]; buildInputs = [ @@ -69,4 +69,4 @@ stdenv.mkDerivation rec { platforms = platforms.linux; maintainers = with maintainers; [ mcwitt ]; }; -} \ No newline at end of file +} diff --git a/systems/x86_64-linux/baradur/default.nix b/systems/x86_64-linux/baradur/default.nix index e2463d1..10da453 100644 --- a/systems/x86_64-linux/baradur/default.nix +++ b/systems/x86_64-linux/baradur/default.nix @@ -1,16 +1,46 @@ -{ pkgs, ... }: +{ + config, + namespace, + pkgs, + ... +}: { imports = [ ./hardware-configuration.nix - # pkgs.fetchTarball awsVpnClient ]; + nix = { + settings = { + auto-optimise-store = true; + experimental-features = "nix-command flakes"; + trusted-users = [ "@wheel" ]; + }; + + gc = { + automatic = true; + dates = [ "05:00" ]; + }; + }; + networking.hostName = "baradur"; boot = { + kernelPackages = pkgs.linuxPackages_6_6; + loader = { - systemd-boot.enable = true; - efi.canTouchEfiVariables = true; + systemd-boot.enable = false; + + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot"; + }; + + grub = { + enable = true; + device = "nodev"; + useOSProber = true; + efiSupport = true; + }; }; }; @@ -30,7 +60,7 @@ users.arrayofone = { isNormalUser = true; group = "arrayofone"; - initialPassword = "letmein"; + hashedPasswordFile = config.sops.secrets."system/users/arrayofone/password".path; description = "primordial devboi"; shell = pkgs.zsh; extraGroups = [ @@ -61,36 +91,49 @@ programs.ethereum.geth.sepolia = { enable = false; }; - networking = { - # headscale.enable = false; - # tailscale.enable = false; - wireguard.server = { - enable = false; - externalInterface = "enp42s0"; - }; + + networking.wireguard.server = { + dns = [ "1.1.1.1" ]; + enable = true; + interface = "wg0"; + ips = [ + "10.200.255.254/32" + "fd3c:fd4c:b4e7:74d1:ffff:ffff:ffff:fffe/128" + ]; + peers = [ + { + publicKey = "4N2292pRHaViKm4TCSuDHa8x48ARn8tNZv1dSHWRuhA="; + endpoint = "wg.arrayof.one:443"; + allowedIPs = [ + "0.0.0.0/0" + "::/0" + ]; + } + ]; + privateKeyFile = config.sops.secrets."vpn/wg/privateKey".path; }; }; environment = { - systemPackages = with pkgs; [ - alacritty - dconf - foot - ghostty - kitty - libqalculate - mdadm - pciutils - proton-pass - qalculate-gtk - shotman - usbutils - nixfmt - libsecret - gimp - zip - unzip - ]; + systemPackages = + with pkgs; + [ + dconf + libqalculate + mdadm + pciutils + proton-pass + qalculate-gtk + shotman + usbutils + libsecret + gimp + cherry-studio + nvitop + ] + ++ [ + pkgs.${namespace}.sys + ]; sessionVariables = { DEFAULT_BROWSER = "${pkgs.firefox}/bin/firefox"; # Set default browser @@ -99,14 +142,6 @@ hardware = { }; - nix = { - settings.experimental-features = "nix-command flakes"; - gc = { - automatic = true; - dates = "03:15"; - }; - }; - services = { pulseaudio = { enable = false; @@ -142,13 +177,39 @@ ollama = { enable = true; - acceleration = "cuda"; + loadModels = [ - "deepseek-r1" - "incept5/llama3.1-claude" + # general models + "deepseek-r1:14b" + "gemma3:12b" + "gpt-oss:20b" + "phi3:14b" ]; + # environmentVariables = ; + # group = ; + # home = ; + # host = ; + # models = ; + # openFirewall = ; + package = pkgs.ollama-cuda; + # port = ; + # rocmOverrideGfx = ; + # user = ; + }; + + open-webui = { + enable = true; + environment = { + "WEBUI_AUTH" = "False"; + }; + # environmentFile = ; + host = "0.0.0.0"; + # openFirewall = ; + # package = ; + port = 1111; + # stateDir = ; }; - open-webui.enable = false; + vsftpd = { # allowWriteableChroot # anonymousMkdirEnable @@ -230,11 +291,14 @@ networking.firewall = { enable = true; allowedTCPPorts = [ + 11434 8082 5432 5433 5434 3000 + 1111 + 443 21 20 ]; @@ -245,6 +309,7 @@ # networking.firewall.allowedTCPPorts = [ ... ]; # networking.firewall.allowedUDPPorts = [ ... ]; # Or disable the firewall altogether. + # system.stateVersion = "24.05"; # Did you read the comment? diff --git a/systems/x86_64-linux/baradur/hardware-configuration.nix b/systems/x86_64-linux/baradur/hardware-configuration.nix index ad0e54a..66a174a 100644 --- a/systems/x86_64-linux/baradur/hardware-configuration.nix +++ b/systems/x86_64-linux/baradur/hardware-configuration.nix @@ -1,36 +1,50 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, modulesPath, ... }: - { - imports = - [(modulesPath + "/installer/scan/not-detected.nix")]; + config, + lib, + modulesPath, + ... +}: - boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; +{ + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "usbhid" + "usb_storage" + "sd_mod" + ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-uuid/5d0c20ce-5ad1-4517-89be-4e307b36aa72"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/3A72-06DC"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; + fileSystems."/" = { + device = "/dev/disk/by-uuid/5d0c20ce-5ad1-4517-89be-4e307b36aa72"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/3A72-06DC"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; - fileSystems."/mnt/node" = - { device = "/dev/md0"; - fsType = "ext4"; - }; + fileSystems."/mnt/node" = { + device = "/dev/md0"; + fsType = "ext4"; + }; - swapDevices = - [ { device = "/dev/disk/by-uuid/e3ab7a32-acc9-42c0-ae69-c65ae9775a76"; } - ]; + swapDevices = [ + { device = "/dev/disk/by-uuid/e3ab7a32-acc9-42c0-ae69-c65ae9775a76"; } + ]; # Enables DHCP on each ethernet and wireless interface. In case of scripted networking # (the default) this is the recommended approach. When using systemd-networkd it's From bfce4cf8ae31a7110a62e7c4c3ed2ebdbb800c00 Mon Sep 17 00:00:00 2001 From: Darren Bangsund Date: Wed, 14 Jan 2026 09:35:59 -0800 Subject: [PATCH 2/9] feat(system): add mingabook and improve secrets management - **System**: Add 'mingabook' (aarch64-darwin) configuration for user 'darrenbangsund', preserving existing user ID/GID. - **Secrets**: - Add 'scripts/init-secrets.sh' and 'scripts/manage-secrets.sh' for unified secret operations. - Update 'Taskfile.yml' to use new scripts for dynamic host/user secret management. - Register new 'mingabook' and 'darrenbangsund' keys in '.sops.yaml'. - **Home**: - Add 'go-task', 'google-cloud-sdk', 'claude-code' to default packages. - Refactor package lists and environment variables in 'modules/home/core'. - Switch fonts to 'Ubuntu' and 'Noto Color Emoji'. - Disable 'foot' and 'ghostty' terminals by default. - Make ANTHROPIC_API_KEY export in zsh optional based on secret existence. - **Maintenance**: - Add 'meta.mainProgram' to 'kotlin-lsp' to fix evaluation warning. - Remove unused 'users/default.nix' and 'modules/darwin/core/programs.nix'. - Update flake inputs. --- .sops.yaml | 10 + Taskfile.yml | 50 ++-- flake.lock | 244 +++++++++--------- flake.nix | 41 +++ homes/aarch64-darwin/arrayofone/default.nix | 11 + .../aarch64-darwin/darrenbangsund/default.nix | 13 + modules/darwin/core/default.nix | 5 +- modules/home/core/default.nix | 127 +++++---- modules/home/core/env.nix | 14 +- modules/home/core/secrets.nix | 5 +- modules/home/core/shell.nix | 8 +- modules/home/core/terminal.nix | 4 +- modules/home/core/theme.nix | 10 +- modules/home/core/zeditor.nix | 2 - modules/home/dev/modules/db/default.nix | 4 +- packages/kotlin-lsp/default.nix | 4 + scripts/init-secrets.sh | 135 ++++++++++ scripts/manage-secrets.sh | 86 ++++++ secrets/darrenbangsund.yaml | 26 ++ secrets/mingabook.yaml | 26 ++ shells/digits/default.nix | 55 ++++ systems/aarch64-darwin/mingabook/default.nix | 82 ++++++ systems/aarch64-darwin/mingabook/homebrew.nix | 15 ++ .../aarch64-darwin/mingabook/networking.nix | 18 ++ .../aarch64-darwin/mingabook}/programs.nix | 24 +- systems/aarch64-darwin/mingabook/users.nix | 55 ++++ systems/x86_64-linux/baradur/default.nix | 33 +-- users/default.nix | 56 ---- 28 files changed, 837 insertions(+), 326 deletions(-) create mode 100644 homes/aarch64-darwin/arrayofone/default.nix create mode 100644 homes/aarch64-darwin/darrenbangsund/default.nix create mode 100755 scripts/init-secrets.sh create mode 100755 scripts/manage-secrets.sh create mode 100644 secrets/darrenbangsund.yaml create mode 100644 secrets/mingabook.yaml create mode 100644 shells/digits/default.nix create mode 100644 systems/aarch64-darwin/mingabook/default.nix create mode 100644 systems/aarch64-darwin/mingabook/homebrew.nix create mode 100644 systems/aarch64-darwin/mingabook/networking.nix rename {modules/darwin/core => systems/aarch64-darwin/mingabook}/programs.nix (76%) create mode 100644 systems/aarch64-darwin/mingabook/users.nix delete mode 100644 users/default.nix diff --git a/.sops.yaml b/.sops.yaml index 53c04b9..8c61a47 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -3,6 +3,8 @@ keys: - &baradur age1fe2alznmwldqrnlx09n4e7hfc3kflm2h9lmgem54kcadze5kp53qjuyrqy - &db age19r87m08mt03zg8ustzlx733s4m4wph6vvkd0qxlequfje5k0mawsy68vp2 - &dbook age126t4jjumls89dfl83cx3lvukhwad5nte38zeq5uue4m39ex9kfeqtw4r2v + - &mingabook age14ejy4tppggtacyzxfhtnagqhtr60zyf6l6euh5vxlf8uh9vcef3s2clada + - &darrenbangsund age1fyndjw4ucc39hh2kyuxth2pyevl2h5zh9lmfq7v9h8neq9csnc9qrcm4zq creation_rules: - path_regex: secrets/arrayofone.yaml$ key_groups: @@ -20,3 +22,11 @@ creation_rules: key_groups: - age: - *dbook + - path_regex: secrets/mingabook.yaml$ + key_groups: + - age: + - *mingabook + - path_regex: secrets/darrenbangsund.yaml$ + key_groups: + - age: + - *darrenbangsund diff --git a/Taskfile.yml b/Taskfile.yml index 945b051..2918e6f 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -154,48 +154,40 @@ tasks: # SECRETS MANAGEMENT # ============================================================================= - secrets:edit: - desc: "Edit secrets file with SOPS" + secrets:init: + desc: "Initialize secrets keys and files for the current host and user" cmds: - - sops {{.FLAKE_DIR}}/secrets/fellowship.yaml + - scripts/init-secrets.sh - secrets:decrypt: - desc: "Decrypt and show secrets" + secrets:edit:system: + desc: "Edit system secrets (secrets/$(hostname).yaml)" cmds: - - sops -d {{.FLAKE_DIR}}/secrets/fellowship.yaml + - scripts/manage-secrets.sh edit system - secrets:encrypt: - desc: "Re-encrypt secrets with current keys" + secrets:edit:user: + desc: "Edit user secrets (secrets/$(whoami).yaml)" cmds: - - sops updatekeys {{.FLAKE_DIR}}/secrets/fellowship.yaml + - scripts/manage-secrets.sh edit user - sops:user:ssh-gen-private: + secrets:encrypt:system: + desc: "Re-encrypt system secrets" cmds: - - nix run nixpkgs#ssh-to-age -- -private-key -i ~/.ssh/sops-nix > ~/.config/sops/age/keys.txt + - scripts/manage-secrets.sh encrypt system - sops:user:gen-public: + secrets:encrypt:user: + desc: "Re-encrypt user secrets" cmds: - - nix run nixpkgs#age-keygen -y ~/.config/sops/age/keys.txt + - scripts/manage-secrets.sh encrypt user - sops:system:ssh-gen-private: + secrets:decrypt:system: + desc: "Decrypt and show system secrets" cmds: - - ssh-keygen -A - - mkdir -p /var/lib/sops-nix - # - rm -rf /var/lib/sops-nix/key.txt - # - touch /var/lib/sops-nix/key.txt - - nix run nixpkgs#ssh-to-age -- -private-key -i /etc/ssh/ssh_host_ed25519_key > /var/lib/sops-nix/key.txt + - scripts/manage-secrets.sh decrypt system - sops:system:gen-public: + secrets:decrypt:user: + desc: "Decrypt and show user secrets" cmds: - - nix shell nixpkgs#age -c age-keygen -y /var/lib/sops-nix/key.txt - - age:keygen: - desc: "Generate new age key" - cmds: - - mkdir -p ~/.config/age - - age-keygen -o ~/.config/age/keys.txt - - echo "Public key:" - - age-keygen -y ~/.config/age/keys.txt + - scripts/manage-secrets.sh decrypt user # ============================================================================= # MAINTENANCE & CLEANUP diff --git a/flake.lock b/flake.lock index ec98999..86e7bf8 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ ] }, "locked": { - "lastModified": 1764714051, - "narHash": "sha256-AjcMlM3UoavFoLzr0YrcvsIxALShjyvwe+o7ikibpCM=", + "lastModified": 1767024902, + "narHash": "sha256-sMdk6QkMDhIOnvULXKUM8WW8iyi551SWw2i6KQHbrrU=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "a43bedcceced5c21ad36578ed823e6099af78214", + "rev": "b8a0c5ba5a9fbd2c660be7dd98bdde0ff3798556", "type": "github" }, "original": { @@ -123,11 +123,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1765485905, - "narHash": "sha256-fk6zFzzcwz6su99K7UTxS2497+z/Cdk3FzNsacsmZKA=", + "lastModified": 1767967164, + "narHash": "sha256-Cx4VETh9dGoQYDtWhre7g66d7SAr+h1h6f+SSHxVrck=", "owner": "catppuccin", "repo": "nix", - "rev": "b49c675acd80931fc8b54290920a90189b461dcf", + "rev": "e973584280e3b0e1d5b5a1a5e9948dc222c54af7", "type": "github" }, "original": { @@ -143,11 +143,11 @@ ] }, "locked": { - "lastModified": 1765684049, - "narHash": "sha256-svCS2r984qEowMT0y3kCrsD/m0J6zaF5I/UusS7QaH0=", + "lastModified": 1768220509, + "narHash": "sha256-8wMrJP/Xk5Dkm0TxzaERLt3eGFEhHTWaJKUpK3AoL4o=", "owner": "nix-darwin", "repo": "nix-darwin", - "rev": "9b628e171bfaea1a3d1edf31eee46251e0fe4a33", + "rev": "7b1d394e7d9112d4060e12ef3271b38a7c43e83b", "type": "github" }, "original": { @@ -191,11 +191,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1765899520, - "narHash": "sha256-TGvi2rjgJlF4PiaQf8z1jx03V3j7boZZD7uATwcYIhQ=", + "lastModified": 1767776044, + "narHash": "sha256-yNLLrf4qKubvO11vTH6FjfPV2iCcNusivuzngEEuc+w=", "owner": "nix-community", "repo": "ethereum.nix", - "rev": "4e0823d882457b986bb5041d943a5d8b7876cafa", + "rev": "34217e7d20d6ed04170a1347db346df068669090", "type": "github" }, "original": { @@ -207,11 +207,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1764724327, - "narHash": "sha256-OkFLrD3pFR952TrjQi1+Vdj604KLcMnkpa7lkW7XskI=", + "lastModified": 1764873433, + "narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "66b7c635763d8e6eb86bd766de5a1e1fbfcc1047", + "rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92", "type": "github" }, "original": { @@ -223,15 +223,15 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1761588595, - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", - "owner": "edolstra", + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "NixOS", "repo": "flake-compat", - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", "type": "github" }, "original": { - "owner": "edolstra", + "owner": "NixOS", "repo": "flake-compat", "type": "github" } @@ -294,11 +294,11 @@ ] }, "locked": { - "lastModified": 1763759067, - "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", + "lastModified": 1767609335, + "narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", + "rev": "250481aafeb741edfe23d29195671c19b36b6dca", "type": "github" }, "original": { @@ -433,11 +433,11 @@ "flake": false, "locked": { "host": "gitlab.gnome.org", - "lastModified": 1764524476, - "narHash": "sha256-bTmNn3Q4tMQ0J/P0O5BfTQwqEnCiQIzOGef9/aqAZvk=", + "lastModified": 1767737596, + "narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=", "owner": "GNOME", "repo": "gnome-shell", - "rev": "c0e1ad9f0f703fd0519033b8f46c3267aab51a22", + "rev": "ef02db02bf0ff342734d525b5767814770d85b49", "type": "gitlab" }, "original": { @@ -455,11 +455,11 @@ ] }, "locked": { - "lastModified": 1765860045, - "narHash": "sha256-7Lxp/PfOy4h3QIDtmWG/EgycaswqRSkDX4DGtet14NE=", + "lastModified": 1768271922, + "narHash": "sha256-zmFw7AtcmfMxW3vR7AiGeQQeHhdrd2x7a3hxzd6vJYI=", "owner": "nix-community", "repo": "home-manager", - "rev": "09de9577d47d8bffb11c449b6a3d24e32ac16c99", + "rev": "fbd566923adcfa67be512a14a79467e2ab8a5777", "type": "github" }, "original": { @@ -471,11 +471,11 @@ "homebrew-bun": { "flake": false, "locked": { - "lastModified": 1765083303, - "narHash": "sha256-/tEX9vaQcC5Etx+voCsu0LOjacPMTIKILgmsp94PJn8=", + "lastModified": 1768271356, + "narHash": "sha256-x/pXdRQ/GR4P/buAwQMPXmghekDvWOTOub8+Cocsy/o=", "owner": "oven-sh", "repo": "homebrew-bun", - "rev": "e422bc5378b0c2aedc89a00150ca8bc4b3cfa473", + "rev": "31a2a9a35632ce20b087f39e7d78ab9e1bc85669", "type": "github" }, "original": { @@ -487,11 +487,11 @@ "homebrew-cask": { "flake": false, "locked": { - "lastModified": 1765922611, - "narHash": "sha256-NcU4GHpFHvwm+YD6EesMLEAhKpgXguHUovksDYVu+jc=", + "lastModified": 1768322624, + "narHash": "sha256-DiP/H7EUhv6jyyNnlWEHXuIPga6o3ZntWRQCZQ1hQvo=", "owner": "homebrew", "repo": "homebrew-cask", - "rev": "ca6e880814bb78752dfc7caaf8a11e58c225cc2d", + "rev": "00ec6cb3678f970ffa5c1a456cc21066a41067bf", "type": "github" }, "original": { @@ -503,11 +503,11 @@ "homebrew-core": { "flake": false, "locked": { - "lastModified": 1765920865, - "narHash": "sha256-vfCesfCRhE4BJJHK2UbTNkWBOcUQeoe4z7AuLNtFoTA=", + "lastModified": 1768322123, + "narHash": "sha256-s9EqSoeYwmshGF1+ipeklUxKtVY1B4LRhBzp12sfAkE=", "owner": "homebrew", "repo": "homebrew-core", - "rev": "09ad6aa18dafae921d6663b40c87f3f620542c1c", + "rev": "5f3039348c27467865ffc5304b63f6784c09cdfa", "type": "github" }, "original": { @@ -561,11 +561,11 @@ ] }, "locked": { - "lastModified": 1763733840, - "narHash": "sha256-JnET78yl5RvpGuDQy3rCycOCkiKoLr5DN1fPhRNNMco=", + "lastModified": 1766946335, + "narHash": "sha256-MRD+Jr2bY11MzNDfenENhiK6pvN+nHygxdHoHbZ1HtE=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "8f1bec691b2d198c60cccabca7a94add2df4ed1a", + "rev": "4af02a3925b454deb1c36603843da528b67ded6c", "type": "github" }, "original": { @@ -613,11 +613,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1762027241, - "narHash": "sha256-w0NhWx95Xao6Dh3G1p7G1cHwGBknwPVPG5VRghk3LSg=", + "lastModified": 1766230298, + "narHash": "sha256-9Qg2/L69yghAH9KLjxOv/n7Sn5JSJDLGnQjJok4r3ZM=", "owner": "hyprwm", "repo": "hypridle", - "rev": "f3d1f3b232a5e3267008568196397b03fab244d2", + "rev": "833eb85d05deb73ead48e57826e7385384fd55a6", "type": "github" }, "original": { @@ -643,11 +643,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1765902757, - "narHash": "sha256-NUOxXjV94sSVoCCjiFC1wECT8A+kAf7JrhJZzHnzWos=", + "lastModified": 1768319076, + "narHash": "sha256-is65o80lB9tWMekx77O4+GCQxLeB2kiA60hejzpA+HA=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "709855842068315bb2109d8f422a70c2b5ed1931", + "rev": "e0cf88809de12c39ad8a1ad1c0194967b0029ec8", "type": "github" }, "original": { @@ -689,11 +689,11 @@ ] }, "locked": { - "lastModified": 1764812575, - "narHash": "sha256-1bK1yGgaR82vajUrt6z+BSljQvFn91D74WJ/vJsydtE=", + "lastModified": 1767023960, + "narHash": "sha256-R2HgtVS1G3KSIKAQ77aOZ+Q0HituOmPgXW9nBNkpp3Q=", "owner": "hyprwm", "repo": "hyprland-guiutils", - "rev": "fd321368a40c782cfa299991e5584ca338e36ebe", + "rev": "c2e906261142f5dd1ee0bfc44abba23e2754c660", "type": "github" }, "original": { @@ -719,11 +719,11 @@ ] }, "locked": { - "lastModified": 1765207366, - "narHash": "sha256-s0jO2kEj5cLLTgTblKnAKjqt3MjYFnmyrQT3SxiUugM=", + "lastModified": 1767723101, + "narHash": "sha256-jObY8O7OI+91hoE137APsDxm0235/Yx+HhFIip187zM=", "owner": "hyprwm", "repo": "hyprland-plugins", - "rev": "e058ea23b80775cf20c675d064678416df2d9d04", + "rev": "fef398ed5e4faf59bc43b915e46a75cfe8b16697", "type": "github" }, "original": { @@ -744,11 +744,11 @@ ] }, "locked": { - "lastModified": 1749046714, - "narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", + "lastModified": 1765214753, + "narHash": "sha256-P9zdGXOzToJJgu5sVjv7oeOGPIIwrd9hAUAP3PsmBBs=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", + "rev": "3f3860b869014c00e8b9e0528c7b4ddc335c21ab", "type": "github" }, "original": { @@ -769,11 +769,11 @@ ] }, "locked": { - "lastModified": 1759610243, - "narHash": "sha256-+KEVnKBe8wz+a6dTLq8YDcF3UrhQElwsYJaVaHXJtoI=", + "lastModified": 1765214753, + "narHash": "sha256-P9zdGXOzToJJgu5sVjv7oeOGPIIwrd9hAUAP3PsmBBs=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "bd153e76f751f150a09328dbdeb5e4fab9d23622", + "rev": "3f3860b869014c00e8b9e0528c7b4ddc335c21ab", "type": "github" }, "original": { @@ -798,11 +798,11 @@ ] }, "locked": { - "lastModified": 1749145882, - "narHash": "sha256-qr0KXeczF8Sma3Ae7+dR2NHhvG7YeLBJv19W4oMu6ZE=", + "lastModified": 1764612430, + "narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "1bfb84f54d50c7ae6558c794d3cfd5f6a7e6e676", + "rev": "0d00dc118981531aa731150b6ea551ef037acddd", "type": "github" }, "original": { @@ -879,11 +879,11 @@ "systems": "systems_4" }, "locked": { - "lastModified": 1765358139, - "narHash": "sha256-1hIq5gSfV0xc7gaBQDVk3XPv47vjhlc8qbAskOqT4b0=", + "lastModified": 1766230281, + "narHash": "sha256-Vk23viKuhcP5O5uIXXZopDZgd/TT5FgsfZ3ZoRp8k58=", "owner": "hyprwm", "repo": "hyprlock", - "rev": "e2da7c6b1fceee9358229a3b5ca48127cd2c427c", + "rev": "ef3017f5efba0db0960474a74d519a19816057fb", "type": "github" }, "original": { @@ -956,11 +956,11 @@ ] }, "locked": { - "lastModified": 1749135356, - "narHash": "sha256-Q8mAKMDsFbCEuq7zoSlcTuxgbIBVhfIYpX0RjE32PS0=", + "lastModified": 1766160771, + "narHash": "sha256-roINUGikWRqqgKrD4iotKbGj3ZKJl3hjMz5l/SyKrHw=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "e36db00dfb3a3d3fdcc4069cb292ff60d2699ccb", + "rev": "5ac060bfcf2f12b3a6381156ebbc13826a05b09f", "type": "github" }, "original": { @@ -981,11 +981,11 @@ ] }, "locked": { - "lastModified": 1764962281, - "narHash": "sha256-rGbEMhTTyTzw4iyz45lch5kXseqnqcEpmrHdy+zHsfo=", + "lastModified": 1766253372, + "narHash": "sha256-1+p4Kw8HdtMoFSmJtfdwjxM4bPxDK9yg27SlvUMpzWA=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "fe686486ac867a1a24f99c753bb40ffed338e4b0", + "rev": "51a4f93ce8572e7b12b7284eb9e6e8ebf16b4be9", "type": "github" }, "original": { @@ -1006,11 +1006,11 @@ ] }, "locked": { - "lastModified": 1764962281, - "narHash": "sha256-rGbEMhTTyTzw4iyz45lch5kXseqnqcEpmrHdy+zHsfo=", + "lastModified": 1766160771, + "narHash": "sha256-roINUGikWRqqgKrD4iotKbGj3ZKJl3hjMz5l/SyKrHw=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "fe686486ac867a1a24f99c753bb40ffed338e4b0", + "rev": "5ac060bfcf2f12b3a6381156ebbc13826a05b09f", "type": "github" }, "original": { @@ -1031,11 +1031,11 @@ ] }, "locked": { - "lastModified": 1749145760, - "narHash": "sha256-IHaGWpGrv7seFWdw/1A+wHtTsPlOGIKMrk1TUIYJEFI=", + "lastModified": 1763640274, + "narHash": "sha256-Uan1Nl9i4TF/kyFoHnTq1bd/rsWh4GAK/9/jDqLbY5A=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "817918315ea016cc2d94004bfb3223b5fd9dfcc6", + "rev": "f6cf414ca0e16a4d30198fd670ec86df3c89f671", "type": "github" }, "original": { @@ -1110,11 +1110,11 @@ ] }, "locked": { - "lastModified": 1764872015, - "narHash": "sha256-INI9AVrQG5nJZFvGPSiUZ9FEUZJLfGdsqjF1QSak7Gc=", + "lastModified": 1767473322, + "narHash": "sha256-RGOeG+wQHeJ6BKcsSB8r0ZU77g9mDvoQzoTKj2dFHwA=", "owner": "hyprwm", "repo": "hyprwire", - "rev": "7997451dcaab7b9d9d442f18985d514ec5891608", + "rev": "d5e7d6b49fe780353c1cf9a1cf39fa8970bd9d11", "type": "github" }, "original": { @@ -1220,11 +1220,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1763966396, - "narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=", + "lastModified": 1767116409, + "narHash": "sha256-5vKw92l1GyTnjoLzEagJy5V5mDFck72LiQWZSOnSicw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5ae3b07d8d6527c42f17c876e404993199144b6a", + "rev": "cad22e7d996aea55ecab064e84834289143e44a0", "type": "github" }, "original": { @@ -1267,11 +1267,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1748929857, - "narHash": "sha256-lcZQ8RhsmhsK8u7LIFsJhsLh/pzR9yZ8yqpTzyGdj+Q=", + "lastModified": 1766070988, + "narHash": "sha256-G/WVghka6c4bAzMhTwT2vjLccg/awmHkdKSd2JrycLc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c2a03962b8e24e669fb37b7df10e7c79531ff1a4", + "rev": "c6245e83d836d0433170a16eb185cefe0572f8b8", "type": "github" }, "original": { @@ -1283,11 +1283,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1764950072, - "narHash": "sha256-BmPWzogsG2GsXZtlT+MTcAWeDK5hkbGRZTeZNW42fwA=", + "lastModified": 1767379071, + "narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f61125a668a320878494449750330ca58b78c557", + "rev": "fb7944c166a3b630f177938e478f0378e64ce108", "type": "github" }, "original": { @@ -1299,11 +1299,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1765186076, - "narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=", + "lastModified": 1766070988, + "narHash": "sha256-G/WVghka6c4bAzMhTwT2vjLccg/awmHkdKSd2JrycLc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8", + "rev": "c6245e83d836d0433170a16eb185cefe0572f8b8", "type": "github" }, "original": { @@ -1331,11 +1331,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1765779637, - "narHash": "sha256-KJ2wa/BLSrTqDjbfyNx70ov/HdgNBCBBSQP3BIzKnv4=", + "lastModified": 1768127708, + "narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", "owner": "nixos", "repo": "nixpkgs", - "rev": "1306659b587dc277866c7b69eb97e5f07864d8c4", + "rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", "type": "github" }, "original": { @@ -1347,11 +1347,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1765457389, - "narHash": "sha256-ddhDtNYvleZeYF7g7TRFSmuQuZh7HCgqstg5YBGwo5s=", + "lastModified": 1768032153, + "narHash": "sha256-6kD1MdY9fsE6FgSwdnx29hdH2UcBKs3/+JJleMShuJg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f997fa0f94fb1ce55bccb97f60d41412ae8fde4c", + "rev": "3146c6aa9995e7351a398e17470e15305e6e18ff", "type": "github" }, "original": { @@ -1373,11 +1373,11 @@ ] }, "locked": { - "lastModified": 1764773531, - "narHash": "sha256-mCBl7MD1WZ7yCG6bR9MmpPO2VydpNkWFgnslJRIT1YU=", + "lastModified": 1767810917, + "narHash": "sha256-ZKqhk772+v/bujjhla9VABwcvz+hB2IaRyeLT6CFnT0=", "owner": "nix-community", "repo": "NUR", - "rev": "1d9616689e98beded059ad0384b9951e967a17fa", + "rev": "dead29c804adc928d3a69dfe7f9f12d0eec1f1a4", "type": "github" }, "original": { @@ -1396,11 +1396,11 @@ ] }, "locked": { - "lastModified": 1765016596, - "narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=", + "lastModified": 1767281941, + "narHash": "sha256-6MkqajPICgugsuZ92OMoQcgSHnD6sJHwk8AxvMcIgTE=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c", + "rev": "f0927703b7b1c8d97511c4116eb9b4ec6645a0fa", "type": "github" }, "original": { @@ -1458,11 +1458,11 @@ "nixpkgs": "nixpkgs_7" }, "locked": { - "lastModified": 1765836173, - "narHash": "sha256-hWRYfdH2ONI7HXbqZqW8Q1y9IRbnXWvtvt/ONZovSNY=", + "lastModified": 1768271704, + "narHash": "sha256-jJqlW8A3OZ5tYbXphF7U8P8g/3Cn8PPwPa4YlJ/9agg=", "owner": "Mic92", "repo": "sops-nix", - "rev": "443a7f2e7e118c4fc63b7fae05ab3080dd0e5c63", + "rev": "691b8b6713855d0fe463993867291c158472fc6f", "type": "github" }, "original": { @@ -1492,11 +1492,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1765897595, - "narHash": "sha256-NgTRxiEC5y96zrhdBygnY+mSzk5FWMML39PcRGVJmxg=", + "lastModified": 1768241331, + "narHash": "sha256-li0Z2Tr5qpH+wyuCMpzXSsHYRleaTukcdLTpAsGcVzY=", "owner": "danth", "repo": "stylix", - "rev": "e6829552d4bb659ebab00f08c61d8c62754763f3", + "rev": "a62840a9e95801969a03b91e49c1607b5322224c", "type": "github" }, "original": { @@ -1631,11 +1631,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1763914658, - "narHash": "sha256-Hju0WtMf3iForxtOwXqGp3Ynipo0EYx1AqMKLPp9BJw=", + "lastModified": 1767710407, + "narHash": "sha256-+W1EB79Jl0/gm4JqmO0Nuc5C7hRdp4vfsV/VdzI+des=", "owner": "tinted-theming", "repo": "schemes", - "rev": "0f6be815d258e435c9b137befe5ef4ff24bea32c", + "rev": "2800e2b8ac90f678d7e4acebe4fa253f602e05b2", "type": "github" }, "original": { @@ -1647,11 +1647,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1764465359, - "narHash": "sha256-lbSVPqLEk2SqMrnpvWuKYGCaAlfWFMA6MVmcOFJjdjE=", + "lastModified": 1767489635, + "narHash": "sha256-e6nnFnWXKBCJjCv4QG4bbcouJ6y3yeT70V9MofL32lU=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "edf89a780e239263cc691a987721f786ddc4f6aa", + "rev": "3c32729ccae99be44fe8a125d20be06f8d7d8184", "type": "github" }, "original": { @@ -1663,11 +1663,11 @@ "tinted-zed": { "flake": false, "locked": { - "lastModified": 1764464512, - "narHash": "sha256-rCD/pAhkMdCx6blsFwxIyvBJbPZZ1oL2sVFrH07lmqg=", + "lastModified": 1767488740, + "narHash": "sha256-wVOj0qyil8m+ouSsVZcNjl5ZR+1GdOOAooAatQXHbuU=", "owner": "tinted-theming", "repo": "base16-zed", - "rev": "907dbba5fb8cf69ebfd90b00813418a412d0a29a", + "rev": "11abb0b282ad3786a2aae088d3a01c60916f2e40", "type": "github" }, "original": { @@ -1684,11 +1684,11 @@ ] }, "locked": { - "lastModified": 1762938485, - "narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=", + "lastModified": 1766000401, + "narHash": "sha256-+cqN4PJz9y0JQXfAK5J1drd0U05D5fcAGhzhfVrDlsI=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4", + "rev": "42d96e75aa56a3f70cab7e7dc4a32868db28e8fd", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 4baafdd..2515510 100644 --- a/flake.nix +++ b/flake.nix @@ -153,5 +153,46 @@ }; } ]; + + systems.hosts.mingabook.modules = with inputs; [ + # # An existing Linux builder is needed to initially bootstrap `nix-rosetta-builder`. + # # If one isn't already available: comment out the `nix-rosetta-builder` module below, + # # uncomment this `linux-builder` module, and run `darwin-rebuild switch`: + # { nix.linux-builder.enable = true; } + # # Then: uncomment `nix-rosetta-builder`, remove `linux-builder`, and `darwin-rebuild switch` + # # a second time. Subsequently, `nix-rosetta-builder` can rebuild itself. + nix-rosetta-builder.darwinModules.default + { + nix-rosetta-builder.enable = true; + # see available options in module.nix's `options.nix-rosetta-builder` + nix-rosetta-builder.onDemand = true; + } + nix-homebrew.darwinModules.nix-homebrew + { + nix-homebrew = { + # Install Homebrew under the default prefix + enable = true; + + # Apple Silicon Only: Also install Homebrew under the default Intel prefix for Rosetta 2 + enableRosetta = true; + + # User owning the Homebrew prefix + user = "darrenbangsund"; + + # Optional: Declarative tap management + taps = { + # "oven-sh/bun" = homebrew-bun; + "oven-sh/homebrew-bun" = homebrew-bun; + "homebrew/homebrew-core" = homebrew-core; + "homebrew/homebrew-cask" = homebrew-cask; + }; + + # Optional: Enable fully-declarative tap management + # + # With mutableTaps disabled, taps can no longer be added imperatively with `brew tap`. + mutableTaps = false; + }; + } + ]; }; } diff --git a/homes/aarch64-darwin/arrayofone/default.nix b/homes/aarch64-darwin/arrayofone/default.nix new file mode 100644 index 0000000..64e823c --- /dev/null +++ b/homes/aarch64-darwin/arrayofone/default.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: +{ + fellowship.home.dev.enable = false; + + programs.zsh.envExtra = ""; + + home = { + packages = with pkgs; [ ]; + stateVersion = "24.05"; + }; +} diff --git a/homes/aarch64-darwin/darrenbangsund/default.nix b/homes/aarch64-darwin/darrenbangsund/default.nix new file mode 100644 index 0000000..98e106c --- /dev/null +++ b/homes/aarch64-darwin/darrenbangsund/default.nix @@ -0,0 +1,13 @@ +{ ... }: +{ + fellowship.home.dev.enable = true; + + programs.zsh.envExtra = '' + neofetch + ''; + + home = { + # packages = with pkgs; [ ]; + stateVersion = "24.05"; + }; +} diff --git a/modules/darwin/core/default.nix b/modules/darwin/core/default.nix index 95a7d40..4bcd77a 100644 --- a/modules/darwin/core/default.nix +++ b/modules/darwin/core/default.nix @@ -9,9 +9,8 @@ imports = [ # ./dock.nix # ./fonts.nix - ./homebrew.nix - ./programs.nix - ./secrets.nix + # ./homebrew.nix + # ./secrets.nix ]; options.${namespace}.system.name = lib.mkOption { diff --git a/modules/home/core/default.nix b/modules/home/core/default.nix index 4a81f52..f8a93af 100644 --- a/modules/home/core/default.nix +++ b/modules/home/core/default.nix @@ -1,4 +1,5 @@ { + namespace, pkgs, ... }: @@ -19,64 +20,76 @@ recursive = true; }; - home.packages = with pkgs; [ - age - bash - bat - btop - gcc - gemini-cli - gh - git - gnupg - gnumake - htop - jq - lf - lsof - #neofetch - neovim - netcat - openssl - protols - ripgrep - sops - tmux - vim-full - wget - wireguard-tools - zellij + home.packages = + with pkgs; + [ + age + alacritty + bash + bat + btop + claude-code + gcc + gemini-cli + gh + git + gnupg + gnumake + go-task + google-cloud-sdk + htop + jq + kitty + lf + lsof + neofetch + neovim + netcat + openssl + protols + ripgrep + sops + tmux + unzip + vim-full + wget + wireguard-tools + zellij + zip - # TODO: are these needed for all systems? - probably not - # awscli2 - docker - docker-compose - emacs - k9s - # kotlin-language-server - kubectl - kubectx - kubernetes-helm - lazydocker - lazysql - minikube - nil - nixfmt-rfc-style - oxker - podman - podman-compose - podman-tui - protobuf + # TODO: are these needed for all systems? - probably not + # awscli2 + docker + docker-compose + emacs + k9s + # kotlin-language-server + kubectl + kubectx + kubernetes-helm + lazydocker + lazysql + minikube + nil + nixfmt + oxker + podman + podman-compose + podman-tui + protobuf - alacritty - # foot - ghostty - kitty - nixfmt - zip - unzip + alacritty + # foot + # ghostty + kitty + nixfmt + zip + unzip - claude-code - claude-monitor - ]; + claude-code + claude-monitor + ] + ++ [ + pkgs.${namespace}.sys + ]; } diff --git a/modules/home/core/env.nix b/modules/home/core/env.nix index 405624f..e3578fe 100644 --- a/modules/home/core/env.nix +++ b/modules/home/core/env.nix @@ -1,8 +1,20 @@ -{ config, ... }: +{ config, lib, ... }: { home = { sessionVariables = { EDITOR = "zeditor"; }; }; + + # read secrets into env at runtime to prevent embedding + # secrets into the build as sessionVariables does + programs.zsh = { + initContent = lib.mkAfter ( + lib.optionalString (builtins.hasAttr "ai/anthropic/api-key" config.sops.secrets) '' + if [ -f "${config.sops.secrets."ai/anthropic/api-key".path}" ]; then + export ANTHROPIC_API_KEY=$(cat "${config.sops.secrets."ai/anthropic/api-key".path}") + fi + '' + ); + }; } diff --git a/modules/home/core/secrets.nix b/modules/home/core/secrets.nix index 0bbd8e2..83a1286 100644 --- a/modules/home/core/secrets.nix +++ b/modules/home/core/secrets.nix @@ -34,9 +34,8 @@ in }; }; - programs.zsh.initContent = '' - export GEMINI_API_KEY="$(cat ${config.sops.secrets."ai/gemini/api-key".path})" - ''; + # export GEMINI_API_KEY="$(cat ${config.sops.secrets."ai/gemini/api-key".path})" + programs.zsh.initContent = ""; systemd.user.services.mbsync.unitConfig.After = [ "sops-nix.service" ]; } diff --git a/modules/home/core/shell.nix b/modules/home/core/shell.nix index ea0672d..0b8ab18 100644 --- a/modules/home/core/shell.nix +++ b/modules/home/core/shell.nix @@ -26,7 +26,7 @@ golang = { symbol = ""; style = "bg:#212736"; - format = ''[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)''; + format = "[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)"; }; }; }; @@ -53,7 +53,7 @@ # defaultKeymap # dirHashes dotDir = config.home.homeDirectory + "/.config/zsh"; - envExtra = ''''; + envExtra = ""; history = { append = true; expireDuplicatesFirst = true; @@ -71,8 +71,8 @@ }; historySubstringSearch = { enable = true; - searchDownKey = "$key[Down]"; - searchUpKey = "$key[Up]"; + # searchDownKey = "$key[Down]"; + # searchUpKey = "$key[Up]"; }; # initcontent # export LANG=C.UTF-8 diff --git a/modules/home/core/terminal.nix b/modules/home/core/terminal.nix index 2601038..171e338 100644 --- a/modules/home/core/terminal.nix +++ b/modules/home/core/terminal.nix @@ -5,8 +5,8 @@ { programs = { alacritty.enable = true; - foot.enable = true; - ghostty.enable = true; + foot.enable = false; + ghostty.enable = false; kitty.enable = true; }; diff --git a/modules/home/core/theme.nix b/modules/home/core/theme.nix index de5c9e2..4a0fffa 100644 --- a/modules/home/core/theme.nix +++ b/modules/home/core/theme.nix @@ -44,18 +44,18 @@ }; sansSerif = { - name = "UbuntuSans Nerd Font"; - package = lib.mkDefault pkgs.nerd-fonts.ubuntu-sans; + name = "Ubuntu"; + package = pkgs.ubuntu-classic; }; serif = { - name = "Ubuntu Nerd Font"; - package = lib.mkDefault pkgs.nerd-fonts.ubuntu; + name = "Ubuntu"; + package = pkgs.ubuntu-classic; }; emoji = { name = "Noto Color Emoji"; - package = lib.mkDefault pkgs.noto-fonts-color-emoji; + package = pkgs.noto-fonts-color-emoji; }; sizes = { diff --git a/modules/home/core/zeditor.nix b/modules/home/core/zeditor.nix index c1a18de..c507dc1 100644 --- a/modules/home/core/zeditor.nix +++ b/modules/home/core/zeditor.nix @@ -1,9 +1,7 @@ { - inputs, lib, namespace, pkgs, - system, ... }: { diff --git a/modules/home/dev/modules/db/default.nix b/modules/home/dev/modules/db/default.nix index 8ed9b31..4fc9083 100644 --- a/modules/home/dev/modules/db/default.nix +++ b/modules/home/dev/modules/db/default.nix @@ -18,8 +18,8 @@ in packages = with pkgs; [ sqlc sqlite - pgcli - postgresql + # pgcli + # postgresql # mongodb ]; }; diff --git a/packages/kotlin-lsp/default.nix b/packages/kotlin-lsp/default.nix index 711fbf2..165daef 100644 --- a/packages/kotlin-lsp/default.nix +++ b/packages/kotlin-lsp/default.nix @@ -28,4 +28,8 @@ stdenv.mkDerivation { ln -s $out/lib/kotlin-lsp.sh $out/bin/kotlin-lsp wrapProgram $out/bin/kotlin-lsp ''; + + meta = { + mainProgram = "kotlin-lsp"; + }; } diff --git a/scripts/init-secrets.sh b/scripts/init-secrets.sh new file mode 100755 index 0000000..a38cfc3 --- /dev/null +++ b/scripts/init-secrets.sh @@ -0,0 +1,135 @@ +#!/usr/bin/env bash +set -e + +# Colors +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +# Variables +HOST_NAME="${HOST_NAME:-$(hostname)}" +USER_NAME="${USER_NAME:-$(whoami)}" +SECRETS_DIR="secrets" +mkdir -p "$SECRETS_DIR" + +echo -e "${YELLOW}Initializing Secrets Setup for Host: $HOST_NAME, User: $USER_NAME${NC}" + +# Ensure sops is available +if ! command -v sops &> /dev/null; then + echo -e "${RED}Error: sops is not installed or not in PATH.${NC}" + exit 1 +fi + +# --- System Keys --- +echo -e "\n${GREEN}== System Keys ==${NC}" +SYSTEM_PUBLIC_KEY="" + +if [[ "$(uname)" == "Darwin" ]]; then + KEY_PATH="/etc/ssh/ssh_host_ed25519_key" + AGE_DIR="/var/lib/sops-nix" + AGE_KEY="$AGE_DIR/key.txt" + + # Generate SSH key if missing + if [ ! -f "$KEY_PATH" ]; then + echo "Generating system SSH key..." + sudo ssh-keygen -t ed25519 -f "$KEY_PATH" -N "" + else + echo "System SSH key exists." + fi + + # Generate Age key if missing + if [ ! -f "$AGE_KEY" ]; then + echo "Generating system Age key..." + sudo mkdir -p "$AGE_DIR" + # Read the ssh key with sudo, convert with nix run (user), write with sudo + # Using nix run nixpkgs#ssh-to-age. This assumes nix is configured for user. + sudo cat "$KEY_PATH" | nix run nixpkgs#ssh-to-age -- -private-key | sudo tee "$AGE_KEY" > /dev/null + else + echo "System Age key exists." + fi + + # Get Public Key + # Use 'age-keygen -y' on the private key. + # We pipe the private key content to nix shell executing age-keygen + SYSTEM_PUBLIC_KEY=$(sudo cat "$AGE_KEY" | nix shell nixpkgs#age -c age-keygen -y /dev/stdin) + echo "System Public Key: $SYSTEM_PUBLIC_KEY" +else + echo "Skipping System Keys (not Darwin/Local execution). Setup manually if remote." + SYSTEM_PUBLIC_KEY="" +fi + +# --- User Keys --- +echo -e "\n${GREEN}== User Keys ==${NC}" +USER_SSH_KEY="$HOME/.ssh/sops-nix" +USER_AGE_DIR="$HOME/.config/sops/age" +USER_AGE_KEY="$USER_AGE_DIR/keys.txt" + +if [ ! -f "$USER_SSH_KEY" ]; then + echo "Generating user SSH key ($USER_SSH_KEY)..." + ssh-keygen -t ed25519 -f "$USER_SSH_KEY" -N "" +else + echo "User SSH key exists." +fi + +mkdir -p "$USER_AGE_DIR" +if [ ! -f "$USER_AGE_KEY" ]; then + echo "Generating user Age key..." + nix run nixpkgs#ssh-to-age -- -private-key -i "$USER_SSH_KEY" > "$USER_AGE_KEY" +else + echo "User Age key exists." +fi + +USER_PUBLIC_KEY=$(nix shell nixpkgs#age -c age-keygen -y "$USER_AGE_KEY") +echo "User Public Key: $USER_PUBLIC_KEY" + +# --- Secrets Files Initialization --- +echo -e "\n${GREEN}== Secrets Files ==${NC}" + +# Helper to init a file +init_secret_file() { + local file=$1 + local keys=$2 + + if [ ! -f "$file" ]; then + echo "Creating and encrypting $file..." + # Create a valid sops file with empty map + # We pass the keys explicitly via --age so we don't depend on .sops.yaml yet + echo "{}" | sops --encrypt --age "$keys" --filename "$file" /dev/stdin > "$file" + else + echo "$file already exists. Skipping creation." + fi +} + +KEYS_FOR_SYSTEM="" +if [ -n "$SYSTEM_PUBLIC_KEY" ]; then + KEYS_FOR_SYSTEM="$SYSTEM_PUBLIC_KEY,$USER_PUBLIC_KEY" +else + KEYS_FOR_SYSTEM="$USER_PUBLIC_KEY" +fi + +HOST_SECRET="$SECRETS_DIR/$HOST_NAME.yaml" +USER_SECRET="$SECRETS_DIR/$USER_NAME.yaml" + +# Init Host Secret (System + User keys) +if [ -n "$HOST_NAME" ]; then + init_secret_file "$HOST_SECRET" "$KEYS_FOR_SYSTEM" +fi + +# Init User Secret (User key only) +if [ -n "$USER_NAME" ]; then + init_secret_file "$USER_SECRET" "$USER_PUBLIC_KEY" +fi + +# --- Summary --- +echo -e "\n${GREEN}== Action Required ==${NC}" +echo "Add the following keys to your .sops.yaml:" +echo -e "${YELLOW}" +echo "keys:" +if [ -n "$SYSTEM_PUBLIC_KEY" ]; then + echo " - & $HOST_NAME $SYSTEM_PUBLIC_KEY" +fi +echo " - & $USER_NAME $USER_PUBLIC_KEY" +echo -e "${NC}" +echo "And update the creation_rules in .sops.yaml to match these keys." +echo "Your secret files have been initialized and are ready for 'task secrets:edit:system' etc." \ No newline at end of file diff --git a/scripts/manage-secrets.sh b/scripts/manage-secrets.sh new file mode 100755 index 0000000..8969df1 --- /dev/null +++ b/scripts/manage-secrets.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash +set -e + +# Usage: ./manage-secrets.sh +# action: edit, encrypt, decrypt +# scope: system, user + +ACTION=$1 +SCOPE=$2 + +if [ -z "$ACTION" ] || [ -z "$SCOPE" ]; then + echo "Usage: $0 " + echo " action: edit, encrypt, decrypt" + echo " scope: system, user" + exit 1 +fi + +HOST_NAME=$(hostname) +USER_NAME=$(whoami) +SECRETS_DIR="secrets" +SYSTEM_AGE_KEY="/var/lib/sops-nix/key.txt" + +if [ "$SCOPE" == "system" ]; then + TARGET_FILE="$SECRETS_DIR/$HOST_NAME.yaml" +elif [ "$SCOPE" == "user" ]; then + TARGET_FILE="$SECRETS_DIR/$USER_NAME.yaml" +else + echo "Error: Scope must be 'system' or 'user'" + exit 1 +fi + +if [ ! -f "$TARGET_FILE" ]; then + echo "Error: Secrets file '$TARGET_FILE' does not exist." + echo "Run 'task secrets:init' to initialize it." + exit 1 +fi + +# Function to execute sops with fallback to sudo/system key +execute_sops() { + local sops_bin + sops_bin=$(command -v sops) + + # Try as user first + if "$sops_bin" "$@"; then + return 0 + fi + + # If failed and scope is system, try with system key via sudo + if [ "$SCOPE" == "system" ]; then + echo "User access failed. Attempting with system key (requires sudo)..." >&2 + + if [ ! -f "$SYSTEM_AGE_KEY" ]; then + echo "System age key not found at $SYSTEM_AGE_KEY. Cannot fallback." >&2 + return 1 + fi + + # Use sudo with the absolute path to sops and the key environment variable + sudo SOPS_AGE_KEY_FILE="$SYSTEM_AGE_KEY" "$sops_bin" "$@" + return $? + fi + + return 1 +} + +case $ACTION in + edit) + echo "Editing $TARGET_FILE..." + execute_sops "$TARGET_FILE" + ;; + encrypt) + echo "Encrypting (in-place) $TARGET_FILE..." + if [ ! -f ".sops.yaml" ]; then + echo "Error: .sops.yaml not found. Cannot encrypt correctly." + exit 1 + fi + execute_sops -e -i "$TARGET_FILE" + ;; + decrypt) + echo "Decrypting $TARGET_FILE..." + execute_sops -d "$TARGET_FILE" + ;; + *) + echo "Error: Action must be 'edit', 'encrypt', or 'decrypt'" + exit 1 + ;; +esac \ No newline at end of file diff --git a/secrets/darrenbangsund.yaml b/secrets/darrenbangsund.yaml new file mode 100644 index 0000000..0936693 --- /dev/null +++ b/secrets/darrenbangsund.yaml @@ -0,0 +1,26 @@ +git: + name: ENC[AES256_GCM,data:hAeCAvWRUQK/MBjS88I=,iv:PkbddGqq2TmTBs/CUY1Na8P2667jPLNo6EbvdYCJpck=,tag:ocRmtWkxUMl5q4VGWqs8Dg==,type:str] + email: ENC[AES256_GCM,data:v5VP/AjQJ3EiD1eoEoLjTDs59U/CWRAF8p7Pf+uJK4EkafvediJyHpQVl+/Y+kaa2g==,iv:s5qnyYF5sM8ggys02hm3uyU3CaKSbhSUHMMRCsyFv1M=,tag:Zr1MV8J7O7uFjrP6V0PzPw==,type:str] + gh: + ssh-private: ENC[AES256_GCM,data:rIX7BHIet4/ToI8M2gkUtlfUA3cuHZgSonqjYjd+4v4ZZncVyK1ExIxCGI/XH98LkkEr6jUBaNaWifWBNAvBc2KD0DfRu7bYlO6EpsgWxvkNyFRYcqrIjVXuvRgSC7rx/jiKEAL40bUnbiQrvbkYZx/ZhojLEAfukGfZYosyMItihG6IsnjtMZX2ibUIv8fghtYbH2vsqEPFmzgRYzPAxLIs951bWlaXfYCsCuSqgp1i0N5X2St/q165G+IPC7k+1nkFeWZ30y6e++1XGuPyym6sf21k6l5v36aWsbdSsZGUjebwLthJYh54R+A5JTtayGPBznTRVOsHMJa6nKgA7EWFNDHiVqIo2h6MNH9PV0G5taME7/GD5UIR06kEGpgwRhg5Z21GrJWktaLSnx3zAuMNDbmp3ysIvhGT6hmGoBe3pI1GPCdkH1l4bx+2L7hQs+t/siiRSiUC+nSM7CIeu1lTwdjtjJ4KK8hZDlZKDpRGUqCI7jcHcViD3oUDYDWeeZPcdRi7PXt1/ywoBiWdcDqo5I40+6ApnRwp/Hq8OiUXmmo=,iv:MpgGbrDPQ7/Ee/CYUIuayCRyS9+XPleTHBMNAK5zi+Y=,tag:+t0AGLEuq94p6DqVu/56yQ==,type:str] + ssh-public: ENC[AES256_GCM,data:1y5/RKf0l/l1EjsJVIEy9pbEq1wc+NAGEvCzftBLJjsEbY1hjH8MDqiwPKl5DWc2inriUTeTKQucniCs1ROzb11An2SiE3BJYiL+H5plliJWSgxq0FZGGmuK5EZ/Ev2K4P6kJYB4oGA3,iv:TGpwLKiZXVlbNGgAXryvlhRPHUsclER0mDJZ0jJ7R/U=,tag:ECD0xJaB3Fjnq4T5yBLPcg==,type:str] +ai: + anthropic: + api-key: "" + gemini: + api-key: "" +sops: + age: + - recipient: age1fyndjw4ucc39hh2kyuxth2pyevl2h5zh9lmfq7v9h8neq9csnc9qrcm4zq + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6TjlLazVieDUvcDMxaVEw + WjdESzl4N3NqNHQ4QXdjdXk4amxRYVlQZHhzCkhYYkpLMnBPRmlzU3hQY1VIcnBE + RUt0MEs2RE5oOEJUUzRLZjJKbEpVdFEKLS0tIGt1dDVXUU95QnV4NW9PSE9iU0xl + YnBVYUdFN1I2UUNvRHp6SENqTFNveFkKmcgK64yqR/AvsJ6TqGCjOX6vxPuHHkDv + 96prckMYLr66KJYC6MZTtERnXhk2bHbVr8oKdfw+zB1lAfZ2OPlt4Q== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2026-01-13T16:16:02Z" + mac: ENC[AES256_GCM,data:sLY7OLvDEAguAybFIhogRTmhwPFQW2tjQNYsYPCW4yoSInfBKyHsQ/Et+madPpPspXKKwHy+NL93oLxdiyafCpT3sFJBPYCDDjaBL4uRFwwhBX3eA0XvmyXW0uF62rfr3aVc3/6TDwB73THCQM6Bhd5vUqwyiWmibE5Epy89gSQ=,iv:WXVZOtHtDfvcoHbUsWDLbPvgbjNH5KA0aTvf0/J8uqE=,tag:SW8aa4hhzmQ0F5fnn8mXWA==,type:str] + unencrypted_suffix: _unencrypted + version: 3.11.0 diff --git a/secrets/mingabook.yaml b/secrets/mingabook.yaml new file mode 100644 index 0000000..5b10782 --- /dev/null +++ b/secrets/mingabook.yaml @@ -0,0 +1,26 @@ +vpn: + wg: + port: "" + privateKey: "" + endpoint: "" + endpoint-ip: "" + endpoint-ip-port: "" +system: + users: + arrayofone: + password: "" +sops: + age: + - recipient: age14ejy4tppggtacyzxfhtnagqhtr60zyf6l6euh5vxlf8uh9vcef3s2clada + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwRWxjLzRoV0tUZ21PZjZ1 + cHJMV0JIa3Zvemg5bDJDUW5EZE5kdlBRNGhRCi95WUErUGdlV0FXT0xsRHcwNWRC + ZEJVZ3NLaEUxOGoyMUM1WmdoRnlXSmcKLS0tIGVrVjI1OXdDSUt3dk1MZ1k3SGJL + eXhTSGNZOUI0KzI3dGN5V1FEV0ZKS0kKKp5Vjz8VK2epNldQyuWLzmNxk+PlZA2P + eIwaoXTb3oyxrFZqj0sTvHvNYFMhDu5I4fdXYuFpYrV0dZmBRZT0gg== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2026-01-13T16:16:20Z" + mac: ENC[AES256_GCM,data:hxpk0a5ef1o86361DO4ANOAx6xIcMm0S8aj7XEFvjlYXRACgPBxjsd302VPuorcM0tbjgNXMJQHO7uv5OUfcHjfg8FUNnQdH+JwGq/CemERb9m4DlSonkf1wE+lPUrSiJBJLRy9eTQa+GoG/57FklAZjJRoqzz7AQXn4h4MrY0k=,iv:GpAE083f/POWue0tQL1mBXgzTRRDySucLyS7IyEiNTo=,tag:JL2gB6QOopXzX1CL3lWz3A==,type:str] + unencrypted_suffix: _unencrypted + version: 3.11.0 diff --git a/shells/digits/default.nix b/shells/digits/default.nix new file mode 100644 index 0000000..a59e2ad --- /dev/null +++ b/shells/digits/default.nix @@ -0,0 +1,55 @@ +{ pkgs, ... }: + +pkgs.mkShell { + name = "nix-digits"; + + packages = with pkgs; [ + # go + delve + go_1_23 + go-ethereum + gopls + gotools + go-tools + golangci-lint + + # java + # jdk21_headless + + # js + deno + nodejs + typescript + yarn + + # tools + bash + docker + docker-compose + gcc + gh + git + gnupg + gnumake + htop + jq + k9s + kubectl + kubectx + kubernetes-helm + lazydocker + lazysql + lf + minikube + # neofetch + neovim + openssl + podman + podman-compose + podman-tui + # postgresql + protobuf + ripgrep + vim-full + ]; +} diff --git a/systems/aarch64-darwin/mingabook/default.nix b/systems/aarch64-darwin/mingabook/default.nix new file mode 100644 index 0000000..7a8806d --- /dev/null +++ b/systems/aarch64-darwin/mingabook/default.nix @@ -0,0 +1,82 @@ +{ ... }: +{ + imports = [ + ./homebrew.nix + ./networking.nix + ./programs.nix + ./users.nix + ]; + + system = { + activationScripts.extraActivation.text = '' + test -d /usr/libexec/rosetta || softwareupdate --install-rosetta --agree-to-license + ''; + + primaryUser = "darrenbangsund"; + stateVersion = 6; + }; + + homebrew = { + taps = [ ]; + brews = [ + "bun@1.2.7" + "gettext" + "ghostscript" + "git-lfs" + "protoc-gen-grpc-web" + "tmux" + ]; + casks = [ + "arc" + "brave-browser" + "chromium" + "cursor" + "datagrip" + "dbeaver-community" + "discord" + "firefox" + "ghostty" + "gimp" + "goland" + "google-chrome" + "hiddenbar" + "insomnia" + "intellij-idea" + "istat-menus" + "linear-linear" + "messenger" + "obsidian" + "orbstack" + "postman" + "proton-mail" + "proton-pass" + "slack" + "spotify" + "telegram" + "visual-studio-code" + "whatsapp" + "zen" + ]; + masApps = { + "amphetamine" = 937984704; + }; + }; + + nix = { + settings.experimental-features = "nix-command flakes"; + gc = { + automatic = true; + interval = { + Weekday = 0; + Hour = 0; + Minute = 0; + }; + options = "--delete-older-than 30d"; + }; + extraOptions = '' + extra-platforms = x86_64-darwin aarch64-darwin + ''; + }; + + security.pam.services.sudo_local.touchIdAuth = true; +} diff --git a/systems/aarch64-darwin/mingabook/homebrew.nix b/systems/aarch64-darwin/mingabook/homebrew.nix new file mode 100644 index 0000000..0c5260c --- /dev/null +++ b/systems/aarch64-darwin/mingabook/homebrew.nix @@ -0,0 +1,15 @@ +{ config, ... }: +{ + homebrew = { + enable = true; + global = { + autoUpdate = false; + }; + onActivation = { + cleanup = "zap"; + extraFlags = [ ]; + upgrade = true; + }; + taps = builtins.attrNames config.nix-homebrew.taps; + }; +} diff --git a/systems/aarch64-darwin/mingabook/networking.nix b/systems/aarch64-darwin/mingabook/networking.nix new file mode 100644 index 0000000..9beb43c --- /dev/null +++ b/systems/aarch64-darwin/mingabook/networking.nix @@ -0,0 +1,18 @@ +{ ... }: +{ + networking = { + computerName = "mingabook"; + dns = [ + "1.1.1.1" + ]; + hostName = "mingabook"; + localHostName = "mingabook"; + knownNetworkServices = [ + "Thunderbolt Bridge" + "Wi-Fi" + ]; + wg-quick = { + interfaces = { }; + }; + }; +} diff --git a/modules/darwin/core/programs.nix b/systems/aarch64-darwin/mingabook/programs.nix similarity index 76% rename from modules/darwin/core/programs.nix rename to systems/aarch64-darwin/mingabook/programs.nix index 1fc3e34..e277c5e 100644 --- a/modules/darwin/core/programs.nix +++ b/systems/aarch64-darwin/mingabook/programs.nix @@ -2,12 +2,12 @@ { programs = { _1password = { - enable = true; + enable = false; package = pkgs._1password-cli; }; _1password-gui = { - enable = true; + enable = false; package = pkgs._1password-gui; }; @@ -87,30 +87,12 @@ }; vim = { - enable = false; + enable = true; enableSensible = true; extraKnownPlugins = { }; plugins = [ ]; vimConfig = ""; vimOptions = { }; }; - - # zsh = { - # enable = true; - # enableAutosuggestions = false; - # enableBashCompletion = false; - # enableCompletion = false; - # enableFastSyntaxHighlighting = false; - # enableFzfCompletion = false; - # enableFzfGit = false; - # enableFzfHistory = false; - # enableGlobalCompInit = false; - # enableSyntaxHighlighting = false; - # interactiveShellInit = ""; - # loginShellInit = ""; - # promptInit = ""; - # shellInit = ""; - # variables = { }; - # }; }; } diff --git a/systems/aarch64-darwin/mingabook/users.nix b/systems/aarch64-darwin/mingabook/users.nix new file mode 100644 index 0000000..c668ac5 --- /dev/null +++ b/systems/aarch64-darwin/mingabook/users.nix @@ -0,0 +1,55 @@ +{ ... }: +{ + snowfallorg.users = { + darrenbangsund = { + create = false; + + home = { + enable = true; + config = { }; + }; + }; + db = { + create = false; + + home = { + enable = false; + config = { }; + }; + }; + }; + + users = { + knownGroups = [ ]; + knownUsers = [ + "darrenbangsund" + ]; + + users = { + darrenbangsund = { + createHome = false; + description = "darrenbangsund"; + home = "/Users/darrenbangsund"; + isHidden = false; + name = "darrenbangsund"; + openssh.authorizedKeys.keyFiles = [ ]; + openssh.authorizedKeys.keys = [ ]; + # shell = pkgs.zsh; + uid = 502; + gid = 20; + }; + # db = { + # createHome = false; + # description = "db"; + # home = "/Users/db"; + # isHidden = false; + # name = "db"; + # openssh.authorizedKeys.keyFiles = [ ]; + # openssh.authorizedKeys.keys = [ ]; + # # shell = pkgs.zsh; + # uid = 502; + # gid = 20; + # }; + }; + }; +} diff --git a/systems/x86_64-linux/baradur/default.nix b/systems/x86_64-linux/baradur/default.nix index 10da453..27db372 100644 --- a/systems/x86_64-linux/baradur/default.nix +++ b/systems/x86_64-linux/baradur/default.nix @@ -115,25 +115,20 @@ }; environment = { - systemPackages = - with pkgs; - [ - dconf - libqalculate - mdadm - pciutils - proton-pass - qalculate-gtk - shotman - usbutils - libsecret - gimp - cherry-studio - nvitop - ] - ++ [ - pkgs.${namespace}.sys - ]; + systemPackages = with pkgs; [ + dconf + libqalculate + mdadm + pciutils + proton-pass + qalculate-gtk + shotman + usbutils + libsecret + gimp + cherry-studio + nvitop + ]; sessionVariables = { DEFAULT_BROWSER = "${pkgs.firefox}/bin/firefox"; # Set default browser diff --git a/users/default.nix b/users/default.nix deleted file mode 100644 index a8adf05..0000000 --- a/users/default.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ lib, config, pkgs, ... }: -let - cfg = config.main-user; -in -{ - options.main-user = { - enable = lib.mkEnableOption "enable main user"; - - userName = lib.mkOption { - default = "arrayofone"; - description = '' - username - ''; - }; - - description = lib.mkOption { - default = "main-user"; - description = '' - description - ''; - }; - - auto-login = lib.mkOption { - default = false; - description = '' - enable auto-login - ''; - }; - }; - - config = lib.mkIf cfg.enable { - users = { - groups.${cfg.userName} = {}; - - users.${cfg.userName} = { - isNormalUser = true; - group = "${cfg.userName}"; - initialPassword = "letmein"; - description = "${cfg.description}"; - shell = pkgs.zsh; - extraGroups = [ - "networkmanager" - "docker" - "podman" - "wheel" - "libvirtd" - ]; - }; - }; - - services.displayManager.autoLogin = lib.mkIf cfg.auto-login { - enable = true; - user = "arrayofone"; - }; - }; -} From b8876f2baf6a5a0397166f2aa73f9c9574e7c669 Mon Sep 17 00:00:00 2001 From: Darren Bangsund Date: Thu, 15 Jan 2026 08:50:00 -0800 Subject: [PATCH 3/9] feat(zed): parameterize node paths - Introduce 'fellowship.home.programs.zeditor' configuration options: - 'nodePath': Path to node executable (default: /run/current-system/sw/bin/node) - 'npmPath': Path to npm executable (default: /run/current-system/sw/bin/npm) - Update Zed configuration to use these parameterized values. - Allows flexibility to use system-provided Node.js binaries or override with Nix store paths. --- modules/home/core/zeditor.nix | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/modules/home/core/zeditor.nix b/modules/home/core/zeditor.nix index c507dc1..672cea4 100644 --- a/modules/home/core/zeditor.nix +++ b/modules/home/core/zeditor.nix @@ -1,11 +1,28 @@ { + config, lib, namespace, pkgs, ... }: +let + cfg = config.${namespace}.home.programs.zeditor; +in { - programs.zed-editor = { + options.${namespace}.home.programs.zeditor = { + nodePath = lib.mkOption { + type = lib.types.str; + default = "/run/current-system/sw/bin/node"; + description = "Path to node executable for Zed"; + }; + npmPath = lib.mkOption { + type = lib.types.str; + default = "/run/current-system/sw/bin/npm"; + description = "Path to npm executable for Zed"; + }; + }; + + config.programs.zed-editor = { enable = true; package = pkgs.zed-editor; installRemoteServer = true; @@ -585,8 +602,8 @@ # Node.js Configuration node = { - path = lib.getExe pkgs.nodejs; - npm_path = lib.getExe' pkgs.nodejs "npm"; + path = cfg.nodePath; + npm_path = cfg.npmPath; }; # Language-specific Settings @@ -684,4 +701,4 @@ }; }; }; -} +} \ No newline at end of file From d787f447654a7e42615c1cd22496fef23ab6e796 Mon Sep 17 00:00:00 2001 From: Darren Bangsund Date: Thu, 15 Jan 2026 08:56:50 -0800 Subject: [PATCH 4/9] feat(system): update node version for mingabook and zeditor - Remove explicit node path overrides for Zed in 'mingabook/default.nix'. - Update 'nodejs_20' to 'nodejs_21' in 'mingabook' system packages. - Update Node paths in 'editor.nix' to use system paths for consistency. --- flake.nix | 2 - .../aarch64-darwin/darrenbangsund/default.nix | 2 +- homes/x86_64-linux/arrayofone/default.nix | 1 - modules/darwin/core/homebrew.nix | 54 ------------------ modules/home/core/default.nix | 1 + modules/home/core/editor.nix | 4 +- modules/home/core/zeditor.nix | 2 +- scripts/manage-secrets.sh | 13 +++-- secrets/darrenbangsund.yaml | 22 ++++---- shells/digits/default.nix | 55 ------------------- systems/aarch64-darwin/mingabook/default.nix | 24 +++----- 11 files changed, 31 insertions(+), 149 deletions(-) delete mode 100644 modules/darwin/core/homebrew.nix delete mode 100644 shells/digits/default.nix diff --git a/flake.nix b/flake.nix index 2515510..ce110a7 100644 --- a/flake.nix +++ b/flake.nix @@ -140,7 +140,6 @@ # Optional: Declarative tap management taps = { - # "oven-sh/bun" = homebrew-bun; "oven-sh/homebrew-bun" = homebrew-bun; "homebrew/homebrew-core" = homebrew-core; "homebrew/homebrew-cask" = homebrew-cask; @@ -181,7 +180,6 @@ # Optional: Declarative tap management taps = { - # "oven-sh/bun" = homebrew-bun; "oven-sh/homebrew-bun" = homebrew-bun; "homebrew/homebrew-core" = homebrew-core; "homebrew/homebrew-cask" = homebrew-cask; diff --git a/homes/aarch64-darwin/darrenbangsund/default.nix b/homes/aarch64-darwin/darrenbangsund/default.nix index 98e106c..be8bf38 100644 --- a/homes/aarch64-darwin/darrenbangsund/default.nix +++ b/homes/aarch64-darwin/darrenbangsund/default.nix @@ -1,6 +1,6 @@ { ... }: { - fellowship.home.dev.enable = true; + fellowship.home.dev.enable = false; programs.zsh.envExtra = '' neofetch diff --git a/homes/x86_64-linux/arrayofone/default.nix b/homes/x86_64-linux/arrayofone/default.nix index 6c56ef5..3b19fa7 100644 --- a/homes/x86_64-linux/arrayofone/default.nix +++ b/homes/x86_64-linux/arrayofone/default.nix @@ -50,7 +50,6 @@ in packages = with pkgs; [ clipse fontconfig - nixd pinentry-curses ]; diff --git a/modules/darwin/core/homebrew.nix b/modules/darwin/core/homebrew.nix deleted file mode 100644 index cc2a2e2..0000000 --- a/modules/darwin/core/homebrew.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ config, ... }: -{ - homebrew = { - enable = true; - global = { - autoUpdate = false; - }; - onActivation = { - cleanup = "uninstall"; - extraFlags = [ ]; - upgrade = true; - }; - taps = builtins.attrNames config.nix-homebrew.taps; - brews = [ - "bun@1.2.7" - "gettext" - "ghostscript" - "git-lfs" - "protoc-gen-grpc-web" - # "sops" - "tmux" - ]; - casks = [ - "arc" - "brave-browser" - "chromium" - "cursor" - "dbeaver-community" - "discord" - "element" - "firefox" - "ghostty" - "gimp" - "google-chrome" - "hiddenbar" - "istat-menus" - "messenger" - "obsidian" - "orbstack" - "postman" - "proton-mail" - "slack" - "spotify" - "telegram" - "tuple" - "visual-studio-code" - "whatsapp" - "zoom" - ]; - masApps = { - "amphetamine" = 937984704; - }; - }; -} diff --git a/modules/home/core/default.nix b/modules/home/core/default.nix index f8a93af..e46b852 100644 --- a/modules/home/core/default.nix +++ b/modules/home/core/default.nix @@ -45,6 +45,7 @@ neofetch neovim netcat + nixd openssl protols ripgrep diff --git a/modules/home/core/editor.nix b/modules/home/core/editor.nix index 2f9beee..ab26b54 100644 --- a/modules/home/core/editor.nix +++ b/modules/home/core/editor.nix @@ -368,8 +368,8 @@ }; node = { - path = lib.getExe pkgs.nodejs; - npm_path = lib.getExe' pkgs.nodejs "npm"; + path = "/run/current-system/sw/bin/node"; + npm_path = "/run/current-system/sw/bin/npm"; }; hour_format = "hour24"; diff --git a/modules/home/core/zeditor.nix b/modules/home/core/zeditor.nix index 672cea4..0cdf3c2 100644 --- a/modules/home/core/zeditor.nix +++ b/modules/home/core/zeditor.nix @@ -701,4 +701,4 @@ in }; }; }; -} \ No newline at end of file +} diff --git a/scripts/manage-secrets.sh b/scripts/manage-secrets.sh index 8969df1..60cb617 100755 --- a/scripts/manage-secrets.sh +++ b/scripts/manage-secrets.sh @@ -18,6 +18,7 @@ fi HOST_NAME=$(hostname) USER_NAME=$(whoami) SECRETS_DIR="secrets" +USER_AGE_KEY="/Users/$USER_NAME/.config/sops/age/keys.txt" SYSTEM_AGE_KEY="/var/lib/sops-nix/key.txt" if [ "$SCOPE" == "system" ]; then @@ -41,14 +42,14 @@ execute_sops() { sops_bin=$(command -v sops) # Try as user first - if "$sops_bin" "$@"; then + if SOPS_AGE_KEY_FILE="$USER_AGE_KEY" "$sops_bin" "$@"; then return 0 fi # If failed and scope is system, try with system key via sudo if [ "$SCOPE" == "system" ]; then echo "User access failed. Attempting with system key (requires sudo)..." >&2 - + if [ ! -f "$SYSTEM_AGE_KEY" ]; then echo "System age key not found at $SYSTEM_AGE_KEY. Cannot fallback." >&2 return 1 @@ -58,7 +59,7 @@ execute_sops() { sudo SOPS_AGE_KEY_FILE="$SYSTEM_AGE_KEY" "$sops_bin" "$@" return $? fi - + return 1 } @@ -76,11 +77,11 @@ case $ACTION in execute_sops -e -i "$TARGET_FILE" ;; decrypt) - echo "Decrypting $TARGET_FILE..." - execute_sops -d "$TARGET_FILE" + echo "Decrypting (in-place) $TARGET_FILE..." + execute_sops -d -i "$TARGET_FILE" ;; *) echo "Error: Action must be 'edit', 'encrypt', or 'decrypt'" exit 1 ;; -esac \ No newline at end of file +esac diff --git a/secrets/darrenbangsund.yaml b/secrets/darrenbangsund.yaml index 0936693..312d11a 100644 --- a/secrets/darrenbangsund.yaml +++ b/secrets/darrenbangsund.yaml @@ -1,9 +1,9 @@ git: - name: ENC[AES256_GCM,data:hAeCAvWRUQK/MBjS88I=,iv:PkbddGqq2TmTBs/CUY1Na8P2667jPLNo6EbvdYCJpck=,tag:ocRmtWkxUMl5q4VGWqs8Dg==,type:str] - email: ENC[AES256_GCM,data:v5VP/AjQJ3EiD1eoEoLjTDs59U/CWRAF8p7Pf+uJK4EkafvediJyHpQVl+/Y+kaa2g==,iv:s5qnyYF5sM8ggys02hm3uyU3CaKSbhSUHMMRCsyFv1M=,tag:Zr1MV8J7O7uFjrP6V0PzPw==,type:str] + name: ENC[AES256_GCM,data:ccVp8kFig6KGjYnDSxk=,iv:kG2bKYH7XVo1UT/5thGd+oiyv7/xzB56Y2EJADuQ9EU=,tag:w3MwDv+59z0S8NxaCE+gXg==,type:str] + email: ENC[AES256_GCM,data:HnuxXN3RpeY4wsSFl4e/PZpZ3h4IMtZsfx0CrIDSju9MjeLd3eYIhglEsOQEEaHCZA==,iv:hxWaefhVPXPb7RV8k811QwkRsojEnS4iWIOocLslvZQ=,tag:BQf8Y+CMOEDP1XKZCG6iJA==,type:str] gh: - ssh-private: ENC[AES256_GCM,data:rIX7BHIet4/ToI8M2gkUtlfUA3cuHZgSonqjYjd+4v4ZZncVyK1ExIxCGI/XH98LkkEr6jUBaNaWifWBNAvBc2KD0DfRu7bYlO6EpsgWxvkNyFRYcqrIjVXuvRgSC7rx/jiKEAL40bUnbiQrvbkYZx/ZhojLEAfukGfZYosyMItihG6IsnjtMZX2ibUIv8fghtYbH2vsqEPFmzgRYzPAxLIs951bWlaXfYCsCuSqgp1i0N5X2St/q165G+IPC7k+1nkFeWZ30y6e++1XGuPyym6sf21k6l5v36aWsbdSsZGUjebwLthJYh54R+A5JTtayGPBznTRVOsHMJa6nKgA7EWFNDHiVqIo2h6MNH9PV0G5taME7/GD5UIR06kEGpgwRhg5Z21GrJWktaLSnx3zAuMNDbmp3ysIvhGT6hmGoBe3pI1GPCdkH1l4bx+2L7hQs+t/siiRSiUC+nSM7CIeu1lTwdjtjJ4KK8hZDlZKDpRGUqCI7jcHcViD3oUDYDWeeZPcdRi7PXt1/ywoBiWdcDqo5I40+6ApnRwp/Hq8OiUXmmo=,iv:MpgGbrDPQ7/Ee/CYUIuayCRyS9+XPleTHBMNAK5zi+Y=,tag:+t0AGLEuq94p6DqVu/56yQ==,type:str] - ssh-public: ENC[AES256_GCM,data:1y5/RKf0l/l1EjsJVIEy9pbEq1wc+NAGEvCzftBLJjsEbY1hjH8MDqiwPKl5DWc2inriUTeTKQucniCs1ROzb11An2SiE3BJYiL+H5plliJWSgxq0FZGGmuK5EZ/Ev2K4P6kJYB4oGA3,iv:TGpwLKiZXVlbNGgAXryvlhRPHUsclER0mDJZ0jJ7R/U=,tag:ECD0xJaB3Fjnq4T5yBLPcg==,type:str] + ssh-private: ENC[AES256_GCM,data:W57Obez4HVSJbOCCuYHJCuY0tUGoC1AqGKMpU65UkhhsQi2HIsWQfCHRdrERgZ1i6g3izx/LbsqswAxWWR8ZRShHpNKhw1NRGXvvcZLMFWYE5mbg0ADhEwWTiGoKt4vuJoZ+ZtZclB4IETCaBNnrpeIy0eTtuxcZAh1e6pNQbzdsafXUnoVvmJ2A7EYgHUNaIJGfQqBHzCZ/xZtGfqfZcVmc7zLhuP8IjTbObklvtpfSDcyhLJKw4U1pVkanVY3a5FntnnwyslfSrWl87zD3MCc1H3oyGxbLdKUv+bD2bRtfxp4D3A10UW1h9L9PmxgYLZsgGwb07sUqHLi1T0TNisWMQaprJNDG93Te6+/v4neRs9Lzc5yBgSPT1YnL7LMWzp/9OGZcX7AKf9cAZDZ83K4YCDUvOk0Gx9ANfEmMQ8Vt4CA3yyKBdTmRED4rJx3/qdj0lRlF2h2x7r8ostNa7zxDtFAD9zEOhEgtCVqAboRjLXQXn/5ZLN4ix3I4XPwuhAx6lVJe+/e2Wef0DlAFYte5PUFJ4NmFloSTznH5m5jdQ7qfm0oyltGbzMCQkrmYaeH/psntAxEWjMPn,iv:XpgMeBKX2RD4fNKh/doepYuDApKMV8Td904aMkr/7wU=,tag:H8fN5jTr4Ua/2O7Ao/uJ6w==,type:str] + ssh-public: ENC[AES256_GCM,data:kucom/pt2jCaNmLawr9ZSbXwqs7BDS+2/uUGjkLZrsiAB0mC48YTOZTdUEd3HVmlkolSGC/IrjYfRa2EWxbL07L3fJ/TURWxm5cfuJADBUkHKOoUrU6m5AdhT8g936MbcK54ynK62TW5j/6DB27wd01Zn26Xg/dXOQ==,iv:6vuq6rkpJoUZ+e4OE/il3vUOGXQhC2gQja4LkxrGXUI=,tag:ON5AOBpEDk3wXp1iCGTiKQ==,type:str] ai: anthropic: api-key: "" @@ -14,13 +14,13 @@ sops: - recipient: age1fyndjw4ucc39hh2kyuxth2pyevl2h5zh9lmfq7v9h8neq9csnc9qrcm4zq enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6TjlLazVieDUvcDMxaVEw - WjdESzl4N3NqNHQ4QXdjdXk4amxRYVlQZHhzCkhYYkpLMnBPRmlzU3hQY1VIcnBE - RUt0MEs2RE5oOEJUUzRLZjJKbEpVdFEKLS0tIGt1dDVXUU95QnV4NW9PSE9iU0xl - YnBVYUdFN1I2UUNvRHp6SENqTFNveFkKmcgK64yqR/AvsJ6TqGCjOX6vxPuHHkDv - 96prckMYLr66KJYC6MZTtERnXhk2bHbVr8oKdfw+zB1lAfZ2OPlt4Q== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtZ1BlWGZ2UEtuemtVa01H + cWVEOGJEVjRJWXZMTEduNHA2eVpSMGZvMFRZClgzS3A2OU5hTmNscjBtMEh1MU5Y + RldWOGlTSG9aNzk4YUtqaFFlVmhoQkUKLS0tIEVOeDZ1Q01lU0pNNVFqdlZpUGt6 + V0VUTUM1blJmSzNKNExaMUFPYnI0QmsKEf8Ika5PLMkK/kkUWie+EgvonMT8+T1P + 7Ckn4CqQyYanwqI4hdoAEDduaH2zSA9UJAS3UXgUcaDI/UVWw+w36A== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-01-13T16:16:02Z" - mac: ENC[AES256_GCM,data:sLY7OLvDEAguAybFIhogRTmhwPFQW2tjQNYsYPCW4yoSInfBKyHsQ/Et+madPpPspXKKwHy+NL93oLxdiyafCpT3sFJBPYCDDjaBL4uRFwwhBX3eA0XvmyXW0uF62rfr3aVc3/6TDwB73THCQM6Bhd5vUqwyiWmibE5Epy89gSQ=,iv:WXVZOtHtDfvcoHbUsWDLbPvgbjNH5KA0aTvf0/J8uqE=,tag:SW8aa4hhzmQ0F5fnn8mXWA==,type:str] + lastmodified: "2026-01-13T17:18:35Z" + mac: ENC[AES256_GCM,data:K4qSU7gpQMH9PxUUmoRt9PAyalL1kTYvZtKTHZDQpuG9IDnNVt7mNqMTQlGNBCbLcMNcB9Na09vkLrzGoLubeD0Oy/If07pt+EcKed58of/jzyFGaiIuvRKcSE/drxg/m7PEsFVbtHUKh1bPR6CEeQJh4gdVjV/UymVtj84h79E=,iv:I/eS8bp8vRmORsFHUHDU99sSoF7xWPsWVi3KG6XFyzs=,tag:DJcx0R6Q26WdLOk8P6H2jA==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0 diff --git a/shells/digits/default.nix b/shells/digits/default.nix deleted file mode 100644 index a59e2ad..0000000 --- a/shells/digits/default.nix +++ /dev/null @@ -1,55 +0,0 @@ -{ pkgs, ... }: - -pkgs.mkShell { - name = "nix-digits"; - - packages = with pkgs; [ - # go - delve - go_1_23 - go-ethereum - gopls - gotools - go-tools - golangci-lint - - # java - # jdk21_headless - - # js - deno - nodejs - typescript - yarn - - # tools - bash - docker - docker-compose - gcc - gh - git - gnupg - gnumake - htop - jq - k9s - kubectl - kubectx - kubernetes-helm - lazydocker - lazysql - lf - minikube - # neofetch - neovim - openssl - podman - podman-compose - podman-tui - # postgresql - protobuf - ripgrep - vim-full - ]; -} diff --git a/systems/aarch64-darwin/mingabook/default.nix b/systems/aarch64-darwin/mingabook/default.nix index 7a8806d..17ffd61 100644 --- a/systems/aarch64-darwin/mingabook/default.nix +++ b/systems/aarch64-darwin/mingabook/default.nix @@ -1,4 +1,4 @@ -{ ... }: +{ lib, pkgs, ... }: { imports = [ ./homebrew.nix @@ -16,32 +16,26 @@ stateVersion = 6; }; + environment.systemPackages = with pkgs; [ + mkcert + nodejs_21 + pnpm + python310 + ]; + homebrew = { taps = [ ]; brews = [ - "bun@1.2.7" - "gettext" - "ghostscript" "git-lfs" - "protoc-gen-grpc-web" "tmux" ]; casks = [ "arc" - "brave-browser" "chromium" - "cursor" - "datagrip" - "dbeaver-community" "discord" "firefox" "ghostty" - "gimp" - "goland" "google-chrome" - "hiddenbar" - "insomnia" - "intellij-idea" "istat-menus" "linear-linear" "messenger" @@ -52,8 +46,6 @@ "proton-pass" "slack" "spotify" - "telegram" - "visual-studio-code" "whatsapp" "zen" ]; From 82ae297b058aec5a36ed4f219da5b3c56f4b7b61 Mon Sep 17 00:00:00 2001 From: Darren Bangsund Date: Thu, 15 Jan 2026 09:13:32 -0800 Subject: [PATCH 5/9] config(mingabook): explicitly pin Zed to nodejs_21 --- systems/aarch64-darwin/mingabook/default.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/systems/aarch64-darwin/mingabook/default.nix b/systems/aarch64-darwin/mingabook/default.nix index 17ffd61..9c1c6f5 100644 --- a/systems/aarch64-darwin/mingabook/default.nix +++ b/systems/aarch64-darwin/mingabook/default.nix @@ -16,6 +16,11 @@ stateVersion = 6; }; + fellowship.home.programs.zeditor = { + nodePath = lib.getExe pkgs.nodejs_21; + npmPath = lib.getExe' pkgs.nodejs_21 "npm"; + }; + environment.systemPackages = with pkgs; [ mkcert nodejs_21 From cd208a70f7528e98378e281a1ea0c20fcaf7a8d0 Mon Sep 17 00:00:00 2001 From: Darren Bangsund Date: Mon, 19 Jan 2026 08:06:49 -0800 Subject: [PATCH 6/9] feat(zed): externalize settings to json and expand file associations - Extracted Zed settings from 'zeditor.nix' to 'zed-settings.json'. - 'zeditor.nix' now imports settings from the JSON file, decoupling config from logic. - Expanded 'file_types' in settings with comprehensive language associations (Python, JS/TS, Go, Rust, C++, etc.). - Preserved parameterized node paths and Nix-specific LSP binary configurations. --- modules/home/core/zed-settings.json | 998 ++++++++++++++++++++++++++++ modules/home/core/zeditor.nix | 683 +------------------ 2 files changed, 1017 insertions(+), 664 deletions(-) create mode 100644 modules/home/core/zed-settings.json diff --git a/modules/home/core/zed-settings.json b/modules/home/core/zed-settings.json new file mode 100644 index 0000000..bf7b13a --- /dev/null +++ b/modules/home/core/zed-settings.json @@ -0,0 +1,998 @@ +{ + "active_pane_modifiers": { + "border_size": 0, + "inactive_opacity": 1 + }, + "bottom_dock_layout": "contained", + "agent_font_size": null, + "allow_rewrap": "in_comments", + "auto_indent": true, + "auto_indent_on_paste": true, + "auto_install_extensions": { + "html": true + }, + "auto_update_extensions": null, + "autosave": "off", + "autoscroll_on_clicks": false, + "auto_signature_help": false, + "show_signature_help_after_edits": false, + "auto_update": false, + "base_keymap": "VSCode", + "buffer_font_family": "IntoneMono Nerd Font Mono", + "buffer_font_features": null, + "buffer_font_fallbacks": null, + "buffer_font_size": 12, + "buffer_font_weight": 400, + "buffer_line_height": "comfortable", + "centered_layout": { + "left_padding": 0.2, + "right_padding": 0.2 + }, + "close_on_file_delete": false, + "confirm_quit": false, + "diagnostics_max_severity": null, + "disable_ai": false, + "load_direnv": "shell_hook", + "double_click_in_multibuffer": "select", + "drop_target_size": 0.2, + "edit_predictions": { + "disabled_globs": [ + "**/.env*", + "**/*.pem", + "**/*.key", + "**/*.cert", + "**/*.crt", + "**/.dev.vars", + "**/secrets.yml" + ] + }, + "edit_predictions_disabled_in": [], + "current_line_highlight": "all", + "selection_highlight": true, + "rounded_selection": true, + "cursor_blink": true, + "cursor_shape": "bar", + "gutter": { + "line_numbers": true, + "runnables": true, + "breakpoints": true, + "folds": true, + "min_line_number_digits": 4 + }, + "hide_mouse": "on_typing_and_movement", + "snippet_sort_order": "inline", + "scrollbar": { + "show": "auto", + "cursors": true, + "git_diff": true, + "search_results": true, + "selected_text": true, + "selected_symbol": true, + "diagnostics": "all", + "axes": { + "horizontal": true, + "vertical": true + } + }, + "minimap": { + "show": "never", + "thumb": "always", + "thumb_border": "left_open", + "current_line_highlight": null + }, + "tab_bar": { + "show": true, + "show_nav_history_buttons": true, + "show_tab_bar_buttons": true + }, + "tabs": { + "close_position": "right", + "file_icons": false, + "git_status": false, + "activate_on_close": "history", + "show_close_button": "hover", + "show_diagnostics": "off" + }, + "inline_code_actions": true, + "session": { + "restore_unsaved_buffers": true, + "trust_all_worktrees": false + }, + "drag_and_drop_selection": { + "enabled": true, + "delay": 300 + }, + "toolbar": { + "breadcrumbs": true, + "quick_actions": true, + "selections_menu": true, + "agent_review": true, + "code_actions": false + }, + "use_system_window_tabs": false, + "enable_language_server": true, + "ensure_final_newline_on_save": true, + "expand_excerpt_lines": 5, + "excerpt_context_lines": 2, + "extend_comment_on_newline": true, + "extend_list_on_newline": true, + "indent_list_on_tab": true, + "status_bar": { + "active_language_button": true, + "cursor_position_button": true, + "line_endings_button": false, + "active_encoding_button": "non_utf8" + }, + "lsp": { + "jdtls": { + "binary": { + "ignore_system_version": true + } + }, + "nix": {}, + "protobuf-language-server": {} + }, + "global_lsp_settings": { + "button": true + }, + "lsp_highlight_debounce": 75, + "features": { + "edit_prediction_provider": "none" + }, + "format_on_save": "on", + "formatter": "auto", + "use_autoclose": true, + "always_treat_brackets_as_autoclosed": false, + "file_scan_exclusions": [ + "**/.git", + "**/.svn", + "**/.hg", + "**/.jj", + "**/.sl", + "**/.repo", + "**/CVS", + "**/.DS_Store", + "**/Thumbs.db", + "**/.classpath", + "**/.settings" + ], + "file_scan_inclusions": [ + ".env*" + ], + "file_types": { + "JSONC": [ + "**/.zed/**/*.json", + "**/zed/**/*.json", + "**/Zed/**/*.json", + "**/.vscode/**/*.json", + "tsconfig.json", + "jsconfig.json" + ], + "Dockerfile": [ + "Dockerfile*", + "*.dockerfile" + ], + "YAML": [ + "*.yml", + "*.yaml" + ], + "Shell Script": [ + ".env.*", + "*.zsh", + "*.bash", + "*.sh", + "APKBUILD", + "PKGBUILD", + "*.ebuild", + "*.eclass", + ".bashrc", + ".bash_profile", + ".zshrc", + ".zprofile" + ], + "Python": ["*.py", "*.pyi", "SConstruct", "SConscript"], + "JavaScript": ["*.js", "*.cjs", "*.mjs", "*.jsx"], + "TypeScript": ["*.ts", "*.cts", "*.mts", "*.tsx"], + "HTML": ["*.html", "*.htm", "*.shtml", "*.xhtml"], + "CSS": ["*.css"], + "SCSS": ["*.scss"], + "Java": ["*.java", "*.jav"], + "Kotlin": ["*.kt", "*.kts"], + "Go": ["*.go"], + "Rust": ["*.rs"], + "C": ["*.c", "*.h"], + "C++": ["*.cpp", "*.cc", "*.cxx", "*.hpp", "*.hh", "*.hxx"], + "Markdown": ["*.md", "*.markdown"], + "TOML": ["*.toml"], + "XML": ["*.xml", "*.xsd", "*.xsl", "*.xslt"], + "SQL": ["*.sql", "*.ddl", "*.dml"], + "Terraform": ["*.tf", "*.tfvars"], + "HCL": ["*.hcl"], + "Nix": ["*.nix"], + "Lua": ["*.lua"], + "Ruby": ["*.rb", "Rakefile", "Gemfile"], + "PHP": ["*.php"], + "C#": ["*.cs"], + "Swift": ["*.swift"], + "Zig": ["*.zig"], + "Dart": ["*.dart"], + "Proto": ["*.proto"], + "GraphQL": ["*.graphql", "*.gql"] + }, + "diagnostics": { + "include_warnings": true, + "inline": { + "enabled": false, + "update_debounce_ms": 150, + "padding": 4, + "min_column": 0, + "max_severity": null + }, + "update_with_cursor": false, + "primary_only": false, + "use_rendered": false + }, + "git": { + "git_gutter": "tracked_files", + "gutter_debounce": null, + "inline_blame": { + "enabled": true, + "delay_ms": 600 + }, + "branch_picker": { + "show_author_name": true + }, + "hunk_style": "staged_hollow" + }, + "go_to_definition_fallback": "find_all_references", + "hard_tabs": false, + "helix_mode": false, + "indent_guides": { + "enabled": true, + "line_width": 1, + "active_line_width": 1, + "coloring": "fixed", + "background_coloring": "disabled" + }, + "hover_popover_enabled": true, + "hover_popover_delay": 300, + "icon_theme": { + "mode": "system", + "dark": "Zed (Default)", + "light": "Zed (Default)" + }, + "image_viewer": { + "unit": "binary" + }, + "inlay_hints": { + "enabled": false, + "show_type_hints": true, + "show_parameter_hints": true, + "show_other_hints": true, + "show_background": false, + "edit_debounce_ms": 700, + "scroll_debounce_ms": 50, + "toggle_on_modifiers_press": null + }, + "journal": { + "path": "~", + "hour_format": "hour12" + }, + "jsx_tag_auto_close": { + "enabled": true + }, + "languages": { + "JavaScript": { + "tab_size": 2, + "enable_language_server": true, + "hard_tabs": false, + "language_servers": [ + "!eslint", + "biome" + ] + }, + "TypeScript": { + "tab_size": 2, + "hard_tabs": false, + "enable_language_server": true, + "language_servers": [ + "!eslint", + "!graphql", + "!deno", + "!typescript-language-server", + "biome", + "..." + ] + }, + "JSON": { + "tab_size": 2, + "hard_tabs": false + }, + "Nix": { + "tab_size": 4, + "hard_tabs": true, + "language_servers": [ + "nixd", + "!nil" + ] + }, + "Go": { + "tab_size": 4, + "hard_tabs": true + }, + "Kotlin": { + "language_servers": [ + "kotlin-lsp", + "!kotlin-language-server" + ] + }, + "Java": { + "language_servers": [ + "jdtls" + ] + } + }, + "language_models": { + "anthropic": { + "api_url": "https://api.anthropic.com" + }, + "google": { + "api_url": "https://generativelanguage.googleapis.com" + }, + "ollama": { + "api_url": "http://localhost:11434" + }, + "openai": { + "api_url": "https://api.openai.com/v1" + } + }, + "line_indicator_format": "short", + "linked_edits": true, + "lsp_document_colors": true, + "max_tabs": null, + "middle_click_paste": true, + "multi_cursor_modifier": "alt", + "node": { + "ignore_system_version": true + }, + "proxy": null, + "on_last_window_closed": "platform_default", + "profiles": {}, + "preview_tabs": { + "enabled": true, + "enable_preview_from_project_panel": true, + "enable_preview_from_file_finder": true, + "enable_preview_from_multibuffer": true, + "enable_preview_multibuffer_from_code_navigation": false, + "enable_preview_file_from_code_navigation": true, + "enable_keep_preview_on_code_navigation": false + }, + "file_finder": { + "file_icons": true, + "modal_max_width": "small", + "skip_focus_for_active_in_search": true + }, + "pane_split_direction_horizontal": "up", + "pane_split_direction_vertical": "left", + "preferred_line_length": 80, + "private_files": [ + "**/.env*", + "**/*.pem", + "**/*.key", + "**/*.cert", + "**/*.crt", + "**/secrets.yml" + ], + "projects_online_by_default": true, + "read_ssh_config": true, + "redact_private_values": false, + "relative_line_numbers": "disabled", + "remove_trailing_whitespace_on_save": true, + "resize_all_panels_in_dock": [ + "left" + ], + "restore_on_file_reopen": true, + "restore_on_startup": "last_session", + "scroll_beyond_last_line": "one_page", + "scroll_sensitivity": 1, + "fast_scroll_sensitivity": 4, + "horizontal_scroll_margin": 5, + "vertical_scroll_margin": 3, + "search": { + "button": true, + "whole_word": false, + "case_sensitive": false, + "include_ignored": false, + "regex": false, + "center_on_match": false + }, + "search_wrap": true, + "seed_search_query_from_cursor": "always", + "use_smartcase_search": false, + "show_call_status_icon": true, + "completions": { + "words": "fallback", + "words_min_length": 3, + "lsp": true, + "lsp_fetch_timeout_ms": 0, + "lsp_insert_mode": "replace_suffix" + }, + "show_completions_on_input": true, + "show_completion_documentation": true, + "show_edit_predictions": true, + "show_whitespaces": "boundary", + "whitespace_map": { + "space": "•", + "tab": "→" + }, + "soft_wrap": "none", + "show_wrap_guides": true, + "use_on_type_format": true, + "use_auto_surround": true, + "use_auto_close": true, + "use_system_path_prompts": true, + "use_system_prompts": true, + "wrap_guides": [], + "tab_size": 2, + "tasks": { + "variables": {}, + "enabled": true, + "prefer_lsp": false + }, + "telemetry": { + "diagnostics": true, + "metrics": true + }, + "terminal": { + "alternate_scroll": "off", + "blinking": "off", + "copy_on_select": false, + "keep_selection_on_copy": true, + "dock": "bottom", + "default_width": 640, + "default_height": 320, + "detect_venv": { + "on": { + "directories": [ + ".env", + "env", + ".venv", + "venv" + ], + "activate_script": "default" + } + }, + "env": { + "TERM": "ghostty" + }, + "font_family": "IntoneMono Nerd Font Mono", + "font_features": null, + "font_size": null, + "line_height": "comfortable", + "minimum_contrast": 45, + "option_as_meta": false, + "button": false, + "shell": "system", + "scroll_multiplier": 3, + "toolbar": { + "breadcrumbs": false + }, + "working_directory": "current_project_directory", + "scrollbar": { + "show": null + }, + "path_hyperlink_regexes": [ + "File \"(?[^\"]+)\", line (?[0-9]+)", + "(?x) # optionally starts with 0-2 opening prefix symbols [({\\[<]{0,2} # which may be followed by an opening quote (?[\`\"])? # `path` is the shortest sequence of any non-space character (?(?[^ ]+?\n # which may end with a line and optionally a column,\n (?:+[0-9]+(:[0-9]+)?|:?\([0-9]+([,:][0-9]+)?\))?\n)) # which must be followed by a matching quote (?()\\k) # and optionally a single closing symbol [)}\\]>]? # if line/column matched, may be followed by a description (?():[^ 0-9][^ ]*)? # which may be followed by trailing punctuation [.,:)}\\]>]* # and always includes trailing whitespace or end of line ([ ]+|$) \n" + ], + "path_hyperlink_timeout_ms": 1 + }, + "repl": { + "max_columns": 128, + "max_lines": 32 + }, + "text_rendering_mode": "platform_default", + "theme": { + "mode": "system", + "dark": "Palenight Theme", + "light": "Tokyo Night Storm" + }, + "title_bar": { + "show_branch_icon": false, + "show_branch_name": true, + "show_project_items": true, + "show_onboarding_banner": true, + "show_user_picture": true, + "show_user_menu": true, + "show_sign_in": true, + "show_menus": false + }, + "vim_mode": false, + "when_closing_with_no_tabs": "platform_default", + "project_panel": { + "button": true, + "default_width": 240, + "dock": "left", + "entry_spacing": "comfortable", + "file_icons": true, + "folder_icons": true, + "git_status": true, + "indent_size": 20, + "auto_reveal_entries": true, + "auto_fold_dirs": true, + "drag_and_drop": true, + "scrollbar": { + "show": null + }, + "sticky_scroll": true, + "show_diagnostics": "all", + "indent_guides": { + "show": "always" + }, + "sort_mode": "directories_first", + "hide_root": false, + "hide_hidden": false, + "starts_open": true, + "auto_open": { + "on_create": true, + "on_paste": true, + "on_drop": true + } + }, + "collaboration_panel": { + "button": false, + "dock": "left", + "default_width": 240 + }, + "debugger": { + "stepping_granularity": "line", + "save_breakpoints": true, + "dock": "bottom", + "button": true + }, + "git_panel": { + "button": true, + "dock": "left", + "default_width": 360, + "status_style": "icon", + "fallback_branch_name": "main", + "sort_by_path": false, + "collapse_untracked_diff": false, + "scrollbar": { + "show": null + } + }, + "git_hosting_providers": [], + "outline_panel": { + "button": true, + "default_width": 300, + "dock": "right", + "file_icons": true, + "folder_icons": true, + "git_status": true, + "indent_size": 20, + "auto_reveal_entries": true, + "auto_fold_dirs": true, + "indent_guides": { + "show": "always" + }, + "scrollbar": { + "show": null + } + }, + "calls": { + "mute_on_join": false, + "share_on_join": false + }, + "colorize_brackets": false, + "unnecessary_code_fade": 0.3, + "ui_font_family": "IntoneMono Nerd Font Mono", + "ui_font_features": { + "calt": false + }, + "ui_font_fallbacks": null, + "ui_font_size": 12, + "ui_font_weight": 400, + "agent": {}, + "notification_panel": { + "button": true, + "dock": "bottom" + }, + "extensions": [ + "bearded-icon-theme", + "catppuccin-icons", + "charmed-icons", + "chawyehsu-vscode-icons", + "clean-vscode-icons", + "colored-zed-icons-theme", + "icons-modern-material", + "jetbrains-icons", + "jetbrains-new-ui-icons", + "material-icon-theme", + "modern-icons", + "monospace-icon-theme", + "openmoji-icons", + "phosphor-icons-theme", + "seti-icons", + "symbols", + "vscode-icons", + "vscode-great-icons", + "assembly", + "biome", + "csv", + "dart", + "deno", + "flatbuffers", + "graphql", + "html", + "ini", + "java", + "kotlin", + "nix", + "proto", + "sql", + "toml", + "xml", + "zig", + "docker-compose", + "dockerfile", + "git-firefly", + "golangci-lint", + "helm", + "http", + "make", + "nginx", + "terraform", + "tmux", + "brainfuck", + "log", + "mermaid", + "perplexity", + "0x96f", + "0xtz", + "1984-theme", + "adaltas-theme", + "adech", + "adwaita", + "adwaita-pastel", + "aesthetic-theme", + "alabaster", + "alabaster-dark", + "amber-monochrome-monitor-crt-phosphor", + "andromeda", + "anthracite-theme", + "anya", + "anysphere-theme", + "apisartisan", + "aquarium-theme", + "arctic-depth", + "ariake", + "asteroid", + "atomize", + "axolosin", + "aylin-theme", + "aystra", + "ayu-darker", + "azutiku-theme", + "bamboo-theme", + "barbenheimer", + "base16", + "batman", + "beanseeds-pro", + "bearded", + "becker-theme", + "blackfox", + "blackrain-theme", + "blackula", + "blade-runner-2049", + "blanche", + "blankeos-zen", + "blinds-theme", + "bluloco-theme", + "brook-code-theme", + "bubblegum", + "call-trans-opt-received", + "catbox", + "catppuccin", + "catppuccin-blur", + "catppuccin-blur-plus", + "chai-theme", + "chanterelle", + "chaos-theory-theme", + "chatgpt", + "chocolate", + "cisco-theme", + "city-lights", + "claude-code-inspired-dark", + "cobalt2", + "codely-theme", + "codesandbox-theme", + "codestackr", + "colorizer", + "cosmos", + "crimson-theme", + "crystal-theme", + "cursor", + "cyan-light-theme", + "darcula-dark", + "darcula-dark-okkano", + "dark-discord", + "dark-material-dracula", + "dark-pop-ui", + "darker-horizon", + "darkmatter-theme", + "day-shift", + "decorative-stitch", + "denix", + "dogi", + "dracula", + "dram", + "dream", + "dune-theme", + "eiffel-theme", + "elderberry", + "ember-theme", + "emerald-night", + "everforest", + "everforest-theme", + "evil-rabbit-theme", + "exquisite", + "eyecandy", + "ezio-theme", + "flat-theme", + "fleet-themes", + "fleeting-theme", + "fleury", + "flexoki-themes", + "focus-theme", + "forest-night", + "frosted-theme", + "gafelson", + "gentle-dark", + "github-classic", + "github-copilot-theme", + "github-dark-default", + "github-monochrome-theme", + "github-plus-theme", + "github-theme", + "glazier", + "gleam-theme", + "graphene", + "green-monochrome-monitor-crt-phosphor", + "grey-theme", + "gruber-darker", + "gruber-flavors", + "gruvbox-baby", + "gruvbox-crisp-themes", + "gruvbox-ish", + "gruvbox-material", + "gruvchad", + "hacker-night-vision", + "hacker-theme", + "haku-dark-theme", + "halcyon", + "hami-melon-theme", + "hex-light-theme", + "hivacruz-theme", + "horizon", + "horizon-extended", + "hot-dog-stand", + "ibm-5151", + "iceberg", + "iceicebergy", + "indigo", + "intellij-newui-theme", + "ir-black", + "jellybeans-vim", + "jetbrains-darcula-theme-by-bronya0", + "jetbrains-rider", + "jetbrains-themes", + "kanagawa-themes", + "kanso", + "kiro", + "kiselevka", + "ktrz-monokai", + "kubesong", + "leblackque", + "lights-out", + "lonely-planet", + "lotus-theme", + "lusch-theme", + "lydia", + "macos-classic", + "malibu", + "maple-theme", + "marble", + "mariana-theme", + "marine-dark", + "martianized", + "material-dark", + "material-theme", + "matte-black", + "mau", + "maya", + "melange", + "mellow", + "min-theme", + "min-theme-plus", + "mint-theme", + "mnemonic", + "modest-dark", + "modus-themes", + "molten-theme", + "monokai-nebula", + "monokai-night", + "monokai-og", + "monokai-reversed", + "monokai-vibrant-amped", + "monolith", + "monosami", + "monospace-theme", + "moonlight", + "mosel", + "msun-dark", + "muted", + "nanowise", + "napalm", + "nebula-pulse", + "neo-brutalism", + "neon-cyberpunk", + "neon-pulse-theme", + "neosolarized", + "neovim-default", + "neutral-theme", + "new-darcula", + "night-owlz", + "night-shift", + "nightfox", + "nightfox-m", + "nixdorf-8870", + "nobin-theme", + "noctis-port", + "noir-and-blanc-theme", + "nord", + "nordic-nvim-theme", + "nordic-theme", + "norrsken", + "not-material-theme", + "nstlgy-dark", + "nuisance", + "nvim-nightfox", + "nyxvamp-theme", + "oasis", + "obsidian-sunset", + "ocean-dark-motifs", + "oceanic-next", + "oh-lucy", + "oldbook-theme", + "one-black-theme", + "one-dark-darkened", + "one-dark-extended", + "one-dark-flat", + "one-dark-pro", + "one-dark-pro-max", + "one-dark-pro-monokai-darker", + "one-hunter", + "one-thing-theme", + "onurb", + "oolong", + "oscura", + "outrun", + "oxocarbon", + "palenight", + "panda-theme", + "papercolor", + "paraiso", + "penumbra", + "penumbra-plus", + "perfect-dusk", + "phine-theme", + "pinata-theme", + "plato-themes", + "poimandres", + "polar-theme", + "popping-and-locking", + "purr", + "quiet-light-theme", + "quill", + "railscast", + "rainbow", + "replicant", + "retrofit-theme", + "rich-vesper", + "rose-pine-theme", + "rosevin", + "rust-rover-dark-theme", + "s-dark-theme", + "sequoia", + "serendipity", + "severance-theme", + "shades-of-purple-theme", + "short-giraffe-theme", + "simple-darker", + "siri", + "sitruuna", + "sl4y-theme", + "slate", + "smooth", + "snazzy", + "snow-fox-theme", + "snowfall", + "snowflake", + "solarized", + "solarized-fp", + "sonokai", + "spai-zero-theme", + "spiceflow-theme", + "srcery", + "struct-theme", + "sublime-mariana-theme", + "subliminal-nightfall", + "sumi-light", + "sunset-drive", + "supaglass", + "supergreatmonokai", + "syntax", + "synthwave", + "synthwave-alpha-theme", + "t3-theme", + "tailwind-theme", + "tanuki", + "terrible-theme", + "the-best-theme", + "the-dark-side", + "theme-lince", + "tm-twilight", + "tokyo-night", + "tomorrow-min-theme", + "tomorrow-night-burns-theme", + "tomorrow-theme", + "tron-legacy", + "tsar", + "tsarcasm", + "twilight", + "ultimate-dark-neo", + "umbralkai", + "underground-theme", + "unoflat", + "v0-theme", + "vague", + "vapor-theme", + "vercel-theme", + "vesper", + "vim-theme", + "vintergata", + "visual-assist-dark", + "vitesse", + "vitesse-theme-refined", + "vscode-classic-theme", + "vscode-dark-high-contrast", + "vscode-dark-modern", + "vscode-dark-plus", + "vscode-dark-polished", + "vscode-light-plus", + "vscode-monokai-charcoal", + "vue-theme", + "vynora", + "wakfu-theme", + "warp-one-dark", + "xcode-themes", + "xy-zed", + "yaka", + "yamura", + "yellowed", + "yue-theme", + "yugen", + "zed-legacy-themes", + "zedburn", + "zedokai", + "zedokai-darkest-machine", + "zedrack-theme", + "zedspace", + "zedwaita", + "zen", + "zen-abyssal", + "zero-trust-theme", + "zoegi-theme" + ] +} \ No newline at end of file diff --git a/modules/home/core/zeditor.nix b/modules/home/core/zeditor.nix index 0cdf3c2..69bb5d8 100644 --- a/modules/home/core/zeditor.nix +++ b/modules/home/core/zeditor.nix @@ -7,6 +7,7 @@ }: let cfg = config.${namespace}.home.programs.zeditor; + settings = builtins.fromJSON (builtins.readFile ./zed-settings.json); in { options.${namespace}.home.programs.zeditor = { @@ -32,673 +33,27 @@ in userKeymaps = [ ]; userTasks = [ ]; - # Extensions organized by category - extensions = [ - # Icons - "bearded-icon-theme" - "catppuccin-icons" - "charmed-icons" - "chawyehsu-vscode-icons" - "clean-vscode-icons" - "colored-zed-icons-theme" - "icons-modern-material" - "jetbrains-icons" - "jetbrains-new-ui-icons" - "material-icon-theme" - "modern-icons" - "monospace-icon-theme" - "openmoji-icons" - "phosphor-icons-theme" - "seti-icons" - "symbols" - "vscode-icons" - "vscode-great-icons" + extensions = settings.extensions; - # Language Support - "assembly" - "csv" - "dart" - "deno" - "flatbuffers" - "graphql" - "html" - "ini" - "java" - "kotlin" - "nix" - "proto" - "sql" - "toml" - "xml" - "zig" - - # Development Tools - "docker-compose" - "dockerfile" - "git-firefly" - "golangci-lint" - "helm" - "http" - "make" - "nginx" - "terraform" - "tmux" - - # Utilities - "brainfuck" - "log" - "mermaid" - "perplexity" - - # Themes - "0x96f" - "0xtz" - "1984-theme" - "adaltas-theme" - "adech" - "adwaita" - "adwaita-pastel" - "aesthetic-theme" - "alabaster" - "alabaster-dark" - "amber-monochrome-monitor-crt-phosphor" - "andromeda" - "anthracite-theme" - "anya" - "anysphere-theme" - "apisartisan" - "aquarium-theme" - "arctic-depth" - "ariake" - "asteroid" - "atomize" - "axolosin" - "aylin-theme" - "aystra" - "ayu-darker" - "azutiku-theme" - "bamboo-theme" - "barbenheimer" - "base16" - "batman" - "beanseeds-pro" - "bearded" - "becker-theme" - "blackfox" - "blackrain-theme" - "blackula" - "blade-runner-2049" - "blanche" - "blankeos-zen" - "blinds-theme" - "bluloco-theme" - "brook-code-theme" - "bubblegum" - "call-trans-opt-received" - "catbox" - "catppuccin" - "catppuccin-blur" - "catppuccin-blur-plus" - "chai-theme" - "chanterelle" - "chaos-theory-theme" - "chatgpt" - "chocolate" - "cisco-theme" - "city-lights" - "claude-code-inspired-dark" - "cobalt2" - "codely-theme" - "codesandbox-theme" - "codestackr" - "colorizer" - "cosmos" - "crimson-theme" - "crystal-theme" - "cursor" - "cyan-light-theme" - "darcula-dark" - "darcula-dark-okkano" - "dark-discord" - "dark-material-dracula" - "dark-pop-ui" - "darker-horizon" - "darkmatter-theme" - "day-shift" - "decorative-stitch" - "denix" - "dogi" - "dracula" - "dram" - "dream" - "dune-theme" - "eiffel-theme" - "elderberry" - "ember-theme" - "emerald-night" - "everforest" - "everforest-theme" - "evil-rabbit-theme" - "exquisite" - "eyecandy" - "ezio-theme" - "flat-theme" - "fleet-themes" - "fleeting-theme" - "fleury" - "flexoki-themes" - "focus-theme" - "forest-night" - "frosted-theme" - "gafelson" - "gentle-dark" - "github-classic" - "github-copilot-theme" - "github-dark-default" - "github-monochrome-theme" - "github-plus-theme" - "github-theme" - "glazier" - "gleam-theme" - "graphene" - "green-monochrome-monitor-crt-phosphor" - "grey-theme" - "gruber-darker" - "gruber-flavors" - "gruvbox-baby" - "gruvbox-crisp-themes" - "gruvbox-ish" - "gruvbox-material" - "gruvchad" - "hacker-night-vision" - "hacker-theme" - "haku-dark-theme" - "halcyon" - "hami-melon-theme" - "hex-light-theme" - "hivacruz-theme" - "horizon" - "horizon-extended" - "hot-dog-stand" - "ibm-5151" - "iceberg" - "iceicebergy" - "indigo" - "intellij-newui-theme" - "ir-black" - "jellybeans-vim" - "jetbrains-darcula-theme-by-bronya0" - "jetbrains-rider" - "jetbrains-themes" - "kanagawa-themes" - "kanso" - "kiro" - "kiselevka" - "ktrz-monokai" - "kubesong" - "leblackque" - "lights-out" - "lonely-planet" - "lotus-theme" - "lusch-theme" - "lydia" - "macos-classic" - "malibu" - "maple-theme" - "marble" - "mariana-theme" - "marine-dark" - "martianized" - "material-dark" - "material-theme" - "matte-black" - "mau" - "maya" - "melange" - "mellow" - "min-theme" - "min-theme-plus" - "mint-theme" - "mnemonic" - "modest-dark" - "modus-themes" - "molten-theme" - "monokai-nebula" - "monokai-night" - "monokai-og" - "monokai-reversed" - "monokai-vibrant-amped" - "monolith" - "monosami" - "monospace-theme" - "moonlight" - "mosel" - "msun-dark" - "muted" - "nanowise" - "napalm" - "nebula-pulse" - "neo-brutalism" - "neon-cyberpunk" - "neon-pulse-theme" - "neosolarized" - "neovim-default" - "neutral-theme" - "new-darcula" - "night-owlz" - "night-shift" - "nightfox" - "nightfox-m" - "nixdorf-8870" - "nobin-theme" - "noctis-port" - "noir-and-blanc-theme" - "nord" - "nordic-nvim-theme" - "nordic-theme" - "norrsken" - "not-material-theme" - "nstlgy-dark" - "nuisance" - "nvim-nightfox" - "nyxvamp-theme" - "oasis" - "obsidian-sunset" - "ocean-dark-motifs" - "oceanic-next" - "oh-lucy" - "oldbook-theme" - "one-black-theme" - "one-dark-darkened" - "one-dark-extended" - "one-dark-flat" - "one-dark-pro" - "one-dark-pro-max" - "one-dark-pro-monokai-darker" - "one-hunter" - "one-thing-theme" - "onurb" - "oolong" - "oscura" - "outrun" - "oxocarbon" - "palenight" - "panda-theme" - "papercolor" - "paraiso" - "penumbra" - "penumbra-plus" - "perfect-dusk" - "phine-theme" - "pinata-theme" - "plato-themes" - "poimandres" - "polar-theme" - "popping-and-locking" - "purr" - "quiet-light-theme" - "quill" - "railscast" - "rainbow" - "replicant" - "retrofit-theme" - "rich-vesper" - "rose-pine-theme" - "rosevin" - "rust-rover-dark-theme" - "s-dark-theme" - "sequoia" - "serendipity" - "severance-theme" - "shades-of-purple-theme" - "short-giraffe-theme" - "simple-darker" - "siri" - "sitruuna" - "sl4y-theme" - "slate" - "smooth" - "snazzy" - "snow-fox-theme" - "snowfall" - "snowflake" - "solarized" - "solarized-fp" - "sonokai" - "spai-zero-theme" - "spiceflow-theme" - "srcery" - "struct-theme" - "sublime-mariana-theme" - "subliminal-nightfall" - "sumi-light" - "sunset-drive" - "supaglass" - "supergreatmonokai" - "syntax" - "synthwave" - "synthwave-alpha-theme" - "t3-theme" - "tailwind-theme" - "tanuki" - "terrible-theme" - "the-best-theme" - "the-dark-side" - "theme-lince" - "tm-twilight" - "tokyo-night" - "tomorrow-min-theme" - "tomorrow-night-burns-theme" - "tomorrow-theme" - "tron-legacy" - "tsar" - "tsarcasm" - "twilight" - "ultimate-dark-neo" - "umbralkai" - "underground-theme" - "unoflat" - "v0-theme" - "vague" - "vapor-theme" - "vercel-theme" - "vesper" - "vim-theme" - "vintergata" - "visual-assist-dark" - "vitesse" - "vitesse-theme-refined" - "vscode-classic-theme" - "vscode-dark-high-contrast" - "vscode-dark-modern" - "vscode-dark-plus" - "vscode-dark-polished" - "vscode-light-plus" - "vscode-monokai-charcoal" - "vue-theme" - "vynora" - "wakfu-theme" - "warp-one-dark" - "xcode-themes" - "xy-zed" - "yaka" - "yamura" - "yellowed" - "yue-theme" - "yugen" - "zed-legacy-themes" - "zedburn" - "zedokai" - "zedokai-darkest-machine" - "zedrack-theme" - "zedspace" - "zedwaita" - "zen" - "zen-abyssal" - "zero-trust-theme" - "zoegi-theme" - ]; - - userSettings = { - # Core Settings - auto_update = false; - vim_mode = false; - base_keymap = "VSCode"; - hour_format = "hour24"; - load_direnv = "shell_hook"; - - # UI and Theme Settings - theme = lib.mkDefault { - mode = "system"; - light = "Tokyo Night Storm"; - dark = "Palenight Theme"; - }; - ui_font_family = lib.mkDefault "IntoneMono Nerd Font Mono"; - ui_font_size = lib.mkDefault 12; - buffer_font_family = lib.mkDefault "IntoneMono Nerd Font Mono"; - buffer_font_size = lib.mkDefault 12; - show_whitespaces = "boundary"; - - # Editor Settings - soft_wrap = "none"; - tab_size = 2; - hard_tabs = false; - show_copilot_suggestions = true; - auto_save = "on_focus_change"; - format_on_save = "on"; - ensure_final_newline_on_save = true; - remove_trailing_whitespace_on_save = true; - show_inline_completions = true; - - # Project Panel Settings - project_panel = { - button = true; - dock = "left"; - git_status = true; - auto_fold_dirs = true; - indent_size = 20; - }; - - # Outline Panel Settings - outline_panel = { - button = true; - dock = "right"; - }; - - # Collaboration Settings - collaboration_panel = { - button = false; - }; - - # Chat Panel Settings - chat_panel = { - button = true; - dock = "right"; - }; - - # Notification Settings - notification_panel = { - button = true; - dock = "bottom"; - }; - - # Terminal Settings - terminal = { - alternate_scroll = "off"; - blinking = "off"; - copy_on_select = false; - dock = "bottom"; - font_family = "IntoneMono Nerd Font Mono"; - font_features = null; - font_size = null; - line_height = "comfortable"; - option_as_meta = false; - button = false; - shell = "system"; - toolbar = { - title = true; - }; - working_directory = "current_project_directory"; - env = { - TERM = "ghostty"; - }; - detect_venv = { - on = { - directories = [ - ".env" - "env" - ".venv" - "venv" - ]; - activate_script = "default"; - }; - }; - }; - - # Git Settings - git = { - git_gutter = "tracked_files"; - inline_blame = { - enabled = true; - delay_ms = 600; - }; - }; - - # Language Server Settings - lsp = { - # rust-analyzer = { - # binary = { - # path = lib.getExe pkgs.rust-analyzer; - # path_lookup = true; - # }; - # }; - jdtls = { - binary = { - path = lib.getExe pkgs.jdt-language-server; - # arguments = [ ]; - # env = { }; - ignore_system_version = true; - }; - }; - - kotlin-lsp = { - binary = { - path = lib.getExe pkgs.${namespace}.kotlin-lsp; - arguments = [ - # Add your custom flags here - # Example: "--flag-name" "value" - "--stdio" - ]; - }; + userSettings = + let + # Remove extensions from settings so they don't end up in settings.json + # although Zed might ignore them, it's cleaner. + cleanSettings = builtins.removeAttrs settings [ "extensions" ]; + in + lib.recursiveUpdate cleanSettings { + # Nix-specific binary overrides that use lib.getExe or config values + node = { + path = cfg.nodePath; + npm_path = cfg.npmPath; }; - nixd = { }; - nil = { }; - nix = { - binary = { - path = lib.getExe pkgs.nixd; - }; - }; - protobuf-language-server = { - binary = { - path = lib.getExe pkgs.protols; - }; + lsp = { + jdtls.binary.path = lib.getExe pkgs.jdt-language-server; + kotlin-lsp.binary.path = lib.getExe pkgs.${namespace}.kotlin-lsp; + nix.binary.path = lib.getExe pkgs.nixd; + protobuf-language-server.binary.path = lib.getExe pkgs.protols; }; }; - - # Language Server Configurations - "[language_servers.claude-code-server]" = { - name = "Claude Code Server"; - languages = [ - "Rust" - "JavaScript" - "TypeScript" - "Python" - "Markdown" - "Go" - "Java" - ]; - }; - - # Node.js Configuration - node = { - path = cfg.nodePath; - npm_path = cfg.npmPath; - }; - - # Language-specific Settings - languages = { - "JavaScript" = { - tab_size = 2; - hard_tabs = false; - }; - "TypeScript" = { - tab_size = 2; - hard_tabs = false; - }; - "JSON" = { - tab_size = 2; - hard_tabs = false; - }; - "Nix" = { - tab_size = 4; - hard_tabs = true; - language_servers = [ - "nixd" - "!nil" - ]; - }; - "Go" = { - tab_size = 4; - hard_tabs = true; - }; - "Kotlin" = { - language_servers = [ - "kotlin-lsp" - "!kotlin-language-server" - ]; - }; - "Java" = { - language_servers = [ - "jdtls" - ]; - }; - }; - - # Assistant/AI Settings - assistant = { - enabled = true; - version = "2"; - default_open_ai_model = null; - # Provider Options: - # zed.dev models { claude-3-5-sonnet-latest } requires github connected - # anthropic models { claude-3-5-sonnet-latest claude-3-haiku-latest claude-3-opus-latest } requires API_KEY - # copilot_chat models { gpt-4o gpt-4 gpt-3.5-turbo o1-preview } requires github connected - default_model = { - provider = "zed.dev"; - model = "claude-3-5-sonnet-latest"; - }; - # inline_alternatives = [ - # { - # provider = "copilot_chat"; - # model = "gpt-3.5-turbo"; - # } - # ]; - }; - - # Feature Flags - features = { - edit_prediction_provider = "none"; - copilot = true; - }; - - # File associations - file_types = { - "Dockerfile" = [ "Dockerfile*" ]; - "YAML" = [ - "*.yml" - "*.yaml" - ]; - "Shell Script" = [ - "*.zsh" - "*.bash" - ]; - }; - - # Preview Settings - preview_tabs = { - enabled = true; - enable_preview_from_file_finder = true; - enable_preview_from_code_navigation = true; - }; - - # Search Settings - search = { - whole_word = false; - case_sensitive = false; - include_ignored = false; - regex = false; - }; - }; }; -} +} \ No newline at end of file From ec17719ca98d5cb4f95af06311d4ed6cd6771c10 Mon Sep 17 00:00:00 2001 From: Darren Bangsund Date: Mon, 19 Jan 2026 08:15:21 -0800 Subject: [PATCH 7/9] refactor(zed): revert json settings decoupling - Removed 'zed-settings.json' and reverted 'zeditor.nix' to a pure Nix configuration. - The external JSON file was causing issues with string escaping and complexity. - All settings, including the expanded file associations and default configuration values, have been merged back into the 'userSettings' attribute set within 'zeditor.nix'. - Preserved parameterized node paths and Nix-specific LSP binary logic. --- modules/home/core/zed-settings.json | 998 ------------------------ modules/home/core/zeditor.nix | 1092 ++++++++++++++++++++++++++- 2 files changed, 1073 insertions(+), 1017 deletions(-) delete mode 100644 modules/home/core/zed-settings.json diff --git a/modules/home/core/zed-settings.json b/modules/home/core/zed-settings.json deleted file mode 100644 index bf7b13a..0000000 --- a/modules/home/core/zed-settings.json +++ /dev/null @@ -1,998 +0,0 @@ -{ - "active_pane_modifiers": { - "border_size": 0, - "inactive_opacity": 1 - }, - "bottom_dock_layout": "contained", - "agent_font_size": null, - "allow_rewrap": "in_comments", - "auto_indent": true, - "auto_indent_on_paste": true, - "auto_install_extensions": { - "html": true - }, - "auto_update_extensions": null, - "autosave": "off", - "autoscroll_on_clicks": false, - "auto_signature_help": false, - "show_signature_help_after_edits": false, - "auto_update": false, - "base_keymap": "VSCode", - "buffer_font_family": "IntoneMono Nerd Font Mono", - "buffer_font_features": null, - "buffer_font_fallbacks": null, - "buffer_font_size": 12, - "buffer_font_weight": 400, - "buffer_line_height": "comfortable", - "centered_layout": { - "left_padding": 0.2, - "right_padding": 0.2 - }, - "close_on_file_delete": false, - "confirm_quit": false, - "diagnostics_max_severity": null, - "disable_ai": false, - "load_direnv": "shell_hook", - "double_click_in_multibuffer": "select", - "drop_target_size": 0.2, - "edit_predictions": { - "disabled_globs": [ - "**/.env*", - "**/*.pem", - "**/*.key", - "**/*.cert", - "**/*.crt", - "**/.dev.vars", - "**/secrets.yml" - ] - }, - "edit_predictions_disabled_in": [], - "current_line_highlight": "all", - "selection_highlight": true, - "rounded_selection": true, - "cursor_blink": true, - "cursor_shape": "bar", - "gutter": { - "line_numbers": true, - "runnables": true, - "breakpoints": true, - "folds": true, - "min_line_number_digits": 4 - }, - "hide_mouse": "on_typing_and_movement", - "snippet_sort_order": "inline", - "scrollbar": { - "show": "auto", - "cursors": true, - "git_diff": true, - "search_results": true, - "selected_text": true, - "selected_symbol": true, - "diagnostics": "all", - "axes": { - "horizontal": true, - "vertical": true - } - }, - "minimap": { - "show": "never", - "thumb": "always", - "thumb_border": "left_open", - "current_line_highlight": null - }, - "tab_bar": { - "show": true, - "show_nav_history_buttons": true, - "show_tab_bar_buttons": true - }, - "tabs": { - "close_position": "right", - "file_icons": false, - "git_status": false, - "activate_on_close": "history", - "show_close_button": "hover", - "show_diagnostics": "off" - }, - "inline_code_actions": true, - "session": { - "restore_unsaved_buffers": true, - "trust_all_worktrees": false - }, - "drag_and_drop_selection": { - "enabled": true, - "delay": 300 - }, - "toolbar": { - "breadcrumbs": true, - "quick_actions": true, - "selections_menu": true, - "agent_review": true, - "code_actions": false - }, - "use_system_window_tabs": false, - "enable_language_server": true, - "ensure_final_newline_on_save": true, - "expand_excerpt_lines": 5, - "excerpt_context_lines": 2, - "extend_comment_on_newline": true, - "extend_list_on_newline": true, - "indent_list_on_tab": true, - "status_bar": { - "active_language_button": true, - "cursor_position_button": true, - "line_endings_button": false, - "active_encoding_button": "non_utf8" - }, - "lsp": { - "jdtls": { - "binary": { - "ignore_system_version": true - } - }, - "nix": {}, - "protobuf-language-server": {} - }, - "global_lsp_settings": { - "button": true - }, - "lsp_highlight_debounce": 75, - "features": { - "edit_prediction_provider": "none" - }, - "format_on_save": "on", - "formatter": "auto", - "use_autoclose": true, - "always_treat_brackets_as_autoclosed": false, - "file_scan_exclusions": [ - "**/.git", - "**/.svn", - "**/.hg", - "**/.jj", - "**/.sl", - "**/.repo", - "**/CVS", - "**/.DS_Store", - "**/Thumbs.db", - "**/.classpath", - "**/.settings" - ], - "file_scan_inclusions": [ - ".env*" - ], - "file_types": { - "JSONC": [ - "**/.zed/**/*.json", - "**/zed/**/*.json", - "**/Zed/**/*.json", - "**/.vscode/**/*.json", - "tsconfig.json", - "jsconfig.json" - ], - "Dockerfile": [ - "Dockerfile*", - "*.dockerfile" - ], - "YAML": [ - "*.yml", - "*.yaml" - ], - "Shell Script": [ - ".env.*", - "*.zsh", - "*.bash", - "*.sh", - "APKBUILD", - "PKGBUILD", - "*.ebuild", - "*.eclass", - ".bashrc", - ".bash_profile", - ".zshrc", - ".zprofile" - ], - "Python": ["*.py", "*.pyi", "SConstruct", "SConscript"], - "JavaScript": ["*.js", "*.cjs", "*.mjs", "*.jsx"], - "TypeScript": ["*.ts", "*.cts", "*.mts", "*.tsx"], - "HTML": ["*.html", "*.htm", "*.shtml", "*.xhtml"], - "CSS": ["*.css"], - "SCSS": ["*.scss"], - "Java": ["*.java", "*.jav"], - "Kotlin": ["*.kt", "*.kts"], - "Go": ["*.go"], - "Rust": ["*.rs"], - "C": ["*.c", "*.h"], - "C++": ["*.cpp", "*.cc", "*.cxx", "*.hpp", "*.hh", "*.hxx"], - "Markdown": ["*.md", "*.markdown"], - "TOML": ["*.toml"], - "XML": ["*.xml", "*.xsd", "*.xsl", "*.xslt"], - "SQL": ["*.sql", "*.ddl", "*.dml"], - "Terraform": ["*.tf", "*.tfvars"], - "HCL": ["*.hcl"], - "Nix": ["*.nix"], - "Lua": ["*.lua"], - "Ruby": ["*.rb", "Rakefile", "Gemfile"], - "PHP": ["*.php"], - "C#": ["*.cs"], - "Swift": ["*.swift"], - "Zig": ["*.zig"], - "Dart": ["*.dart"], - "Proto": ["*.proto"], - "GraphQL": ["*.graphql", "*.gql"] - }, - "diagnostics": { - "include_warnings": true, - "inline": { - "enabled": false, - "update_debounce_ms": 150, - "padding": 4, - "min_column": 0, - "max_severity": null - }, - "update_with_cursor": false, - "primary_only": false, - "use_rendered": false - }, - "git": { - "git_gutter": "tracked_files", - "gutter_debounce": null, - "inline_blame": { - "enabled": true, - "delay_ms": 600 - }, - "branch_picker": { - "show_author_name": true - }, - "hunk_style": "staged_hollow" - }, - "go_to_definition_fallback": "find_all_references", - "hard_tabs": false, - "helix_mode": false, - "indent_guides": { - "enabled": true, - "line_width": 1, - "active_line_width": 1, - "coloring": "fixed", - "background_coloring": "disabled" - }, - "hover_popover_enabled": true, - "hover_popover_delay": 300, - "icon_theme": { - "mode": "system", - "dark": "Zed (Default)", - "light": "Zed (Default)" - }, - "image_viewer": { - "unit": "binary" - }, - "inlay_hints": { - "enabled": false, - "show_type_hints": true, - "show_parameter_hints": true, - "show_other_hints": true, - "show_background": false, - "edit_debounce_ms": 700, - "scroll_debounce_ms": 50, - "toggle_on_modifiers_press": null - }, - "journal": { - "path": "~", - "hour_format": "hour12" - }, - "jsx_tag_auto_close": { - "enabled": true - }, - "languages": { - "JavaScript": { - "tab_size": 2, - "enable_language_server": true, - "hard_tabs": false, - "language_servers": [ - "!eslint", - "biome" - ] - }, - "TypeScript": { - "tab_size": 2, - "hard_tabs": false, - "enable_language_server": true, - "language_servers": [ - "!eslint", - "!graphql", - "!deno", - "!typescript-language-server", - "biome", - "..." - ] - }, - "JSON": { - "tab_size": 2, - "hard_tabs": false - }, - "Nix": { - "tab_size": 4, - "hard_tabs": true, - "language_servers": [ - "nixd", - "!nil" - ] - }, - "Go": { - "tab_size": 4, - "hard_tabs": true - }, - "Kotlin": { - "language_servers": [ - "kotlin-lsp", - "!kotlin-language-server" - ] - }, - "Java": { - "language_servers": [ - "jdtls" - ] - } - }, - "language_models": { - "anthropic": { - "api_url": "https://api.anthropic.com" - }, - "google": { - "api_url": "https://generativelanguage.googleapis.com" - }, - "ollama": { - "api_url": "http://localhost:11434" - }, - "openai": { - "api_url": "https://api.openai.com/v1" - } - }, - "line_indicator_format": "short", - "linked_edits": true, - "lsp_document_colors": true, - "max_tabs": null, - "middle_click_paste": true, - "multi_cursor_modifier": "alt", - "node": { - "ignore_system_version": true - }, - "proxy": null, - "on_last_window_closed": "platform_default", - "profiles": {}, - "preview_tabs": { - "enabled": true, - "enable_preview_from_project_panel": true, - "enable_preview_from_file_finder": true, - "enable_preview_from_multibuffer": true, - "enable_preview_multibuffer_from_code_navigation": false, - "enable_preview_file_from_code_navigation": true, - "enable_keep_preview_on_code_navigation": false - }, - "file_finder": { - "file_icons": true, - "modal_max_width": "small", - "skip_focus_for_active_in_search": true - }, - "pane_split_direction_horizontal": "up", - "pane_split_direction_vertical": "left", - "preferred_line_length": 80, - "private_files": [ - "**/.env*", - "**/*.pem", - "**/*.key", - "**/*.cert", - "**/*.crt", - "**/secrets.yml" - ], - "projects_online_by_default": true, - "read_ssh_config": true, - "redact_private_values": false, - "relative_line_numbers": "disabled", - "remove_trailing_whitespace_on_save": true, - "resize_all_panels_in_dock": [ - "left" - ], - "restore_on_file_reopen": true, - "restore_on_startup": "last_session", - "scroll_beyond_last_line": "one_page", - "scroll_sensitivity": 1, - "fast_scroll_sensitivity": 4, - "horizontal_scroll_margin": 5, - "vertical_scroll_margin": 3, - "search": { - "button": true, - "whole_word": false, - "case_sensitive": false, - "include_ignored": false, - "regex": false, - "center_on_match": false - }, - "search_wrap": true, - "seed_search_query_from_cursor": "always", - "use_smartcase_search": false, - "show_call_status_icon": true, - "completions": { - "words": "fallback", - "words_min_length": 3, - "lsp": true, - "lsp_fetch_timeout_ms": 0, - "lsp_insert_mode": "replace_suffix" - }, - "show_completions_on_input": true, - "show_completion_documentation": true, - "show_edit_predictions": true, - "show_whitespaces": "boundary", - "whitespace_map": { - "space": "•", - "tab": "→" - }, - "soft_wrap": "none", - "show_wrap_guides": true, - "use_on_type_format": true, - "use_auto_surround": true, - "use_auto_close": true, - "use_system_path_prompts": true, - "use_system_prompts": true, - "wrap_guides": [], - "tab_size": 2, - "tasks": { - "variables": {}, - "enabled": true, - "prefer_lsp": false - }, - "telemetry": { - "diagnostics": true, - "metrics": true - }, - "terminal": { - "alternate_scroll": "off", - "blinking": "off", - "copy_on_select": false, - "keep_selection_on_copy": true, - "dock": "bottom", - "default_width": 640, - "default_height": 320, - "detect_venv": { - "on": { - "directories": [ - ".env", - "env", - ".venv", - "venv" - ], - "activate_script": "default" - } - }, - "env": { - "TERM": "ghostty" - }, - "font_family": "IntoneMono Nerd Font Mono", - "font_features": null, - "font_size": null, - "line_height": "comfortable", - "minimum_contrast": 45, - "option_as_meta": false, - "button": false, - "shell": "system", - "scroll_multiplier": 3, - "toolbar": { - "breadcrumbs": false - }, - "working_directory": "current_project_directory", - "scrollbar": { - "show": null - }, - "path_hyperlink_regexes": [ - "File \"(?[^\"]+)\", line (?[0-9]+)", - "(?x) # optionally starts with 0-2 opening prefix symbols [({\\[<]{0,2} # which may be followed by an opening quote (?[\`\"])? # `path` is the shortest sequence of any non-space character (?(?[^ ]+?\n # which may end with a line and optionally a column,\n (?:+[0-9]+(:[0-9]+)?|:?\([0-9]+([,:][0-9]+)?\))?\n)) # which must be followed by a matching quote (?()\\k) # and optionally a single closing symbol [)}\\]>]? # if line/column matched, may be followed by a description (?():[^ 0-9][^ ]*)? # which may be followed by trailing punctuation [.,:)}\\]>]* # and always includes trailing whitespace or end of line ([ ]+|$) \n" - ], - "path_hyperlink_timeout_ms": 1 - }, - "repl": { - "max_columns": 128, - "max_lines": 32 - }, - "text_rendering_mode": "platform_default", - "theme": { - "mode": "system", - "dark": "Palenight Theme", - "light": "Tokyo Night Storm" - }, - "title_bar": { - "show_branch_icon": false, - "show_branch_name": true, - "show_project_items": true, - "show_onboarding_banner": true, - "show_user_picture": true, - "show_user_menu": true, - "show_sign_in": true, - "show_menus": false - }, - "vim_mode": false, - "when_closing_with_no_tabs": "platform_default", - "project_panel": { - "button": true, - "default_width": 240, - "dock": "left", - "entry_spacing": "comfortable", - "file_icons": true, - "folder_icons": true, - "git_status": true, - "indent_size": 20, - "auto_reveal_entries": true, - "auto_fold_dirs": true, - "drag_and_drop": true, - "scrollbar": { - "show": null - }, - "sticky_scroll": true, - "show_diagnostics": "all", - "indent_guides": { - "show": "always" - }, - "sort_mode": "directories_first", - "hide_root": false, - "hide_hidden": false, - "starts_open": true, - "auto_open": { - "on_create": true, - "on_paste": true, - "on_drop": true - } - }, - "collaboration_panel": { - "button": false, - "dock": "left", - "default_width": 240 - }, - "debugger": { - "stepping_granularity": "line", - "save_breakpoints": true, - "dock": "bottom", - "button": true - }, - "git_panel": { - "button": true, - "dock": "left", - "default_width": 360, - "status_style": "icon", - "fallback_branch_name": "main", - "sort_by_path": false, - "collapse_untracked_diff": false, - "scrollbar": { - "show": null - } - }, - "git_hosting_providers": [], - "outline_panel": { - "button": true, - "default_width": 300, - "dock": "right", - "file_icons": true, - "folder_icons": true, - "git_status": true, - "indent_size": 20, - "auto_reveal_entries": true, - "auto_fold_dirs": true, - "indent_guides": { - "show": "always" - }, - "scrollbar": { - "show": null - } - }, - "calls": { - "mute_on_join": false, - "share_on_join": false - }, - "colorize_brackets": false, - "unnecessary_code_fade": 0.3, - "ui_font_family": "IntoneMono Nerd Font Mono", - "ui_font_features": { - "calt": false - }, - "ui_font_fallbacks": null, - "ui_font_size": 12, - "ui_font_weight": 400, - "agent": {}, - "notification_panel": { - "button": true, - "dock": "bottom" - }, - "extensions": [ - "bearded-icon-theme", - "catppuccin-icons", - "charmed-icons", - "chawyehsu-vscode-icons", - "clean-vscode-icons", - "colored-zed-icons-theme", - "icons-modern-material", - "jetbrains-icons", - "jetbrains-new-ui-icons", - "material-icon-theme", - "modern-icons", - "monospace-icon-theme", - "openmoji-icons", - "phosphor-icons-theme", - "seti-icons", - "symbols", - "vscode-icons", - "vscode-great-icons", - "assembly", - "biome", - "csv", - "dart", - "deno", - "flatbuffers", - "graphql", - "html", - "ini", - "java", - "kotlin", - "nix", - "proto", - "sql", - "toml", - "xml", - "zig", - "docker-compose", - "dockerfile", - "git-firefly", - "golangci-lint", - "helm", - "http", - "make", - "nginx", - "terraform", - "tmux", - "brainfuck", - "log", - "mermaid", - "perplexity", - "0x96f", - "0xtz", - "1984-theme", - "adaltas-theme", - "adech", - "adwaita", - "adwaita-pastel", - "aesthetic-theme", - "alabaster", - "alabaster-dark", - "amber-monochrome-monitor-crt-phosphor", - "andromeda", - "anthracite-theme", - "anya", - "anysphere-theme", - "apisartisan", - "aquarium-theme", - "arctic-depth", - "ariake", - "asteroid", - "atomize", - "axolosin", - "aylin-theme", - "aystra", - "ayu-darker", - "azutiku-theme", - "bamboo-theme", - "barbenheimer", - "base16", - "batman", - "beanseeds-pro", - "bearded", - "becker-theme", - "blackfox", - "blackrain-theme", - "blackula", - "blade-runner-2049", - "blanche", - "blankeos-zen", - "blinds-theme", - "bluloco-theme", - "brook-code-theme", - "bubblegum", - "call-trans-opt-received", - "catbox", - "catppuccin", - "catppuccin-blur", - "catppuccin-blur-plus", - "chai-theme", - "chanterelle", - "chaos-theory-theme", - "chatgpt", - "chocolate", - "cisco-theme", - "city-lights", - "claude-code-inspired-dark", - "cobalt2", - "codely-theme", - "codesandbox-theme", - "codestackr", - "colorizer", - "cosmos", - "crimson-theme", - "crystal-theme", - "cursor", - "cyan-light-theme", - "darcula-dark", - "darcula-dark-okkano", - "dark-discord", - "dark-material-dracula", - "dark-pop-ui", - "darker-horizon", - "darkmatter-theme", - "day-shift", - "decorative-stitch", - "denix", - "dogi", - "dracula", - "dram", - "dream", - "dune-theme", - "eiffel-theme", - "elderberry", - "ember-theme", - "emerald-night", - "everforest", - "everforest-theme", - "evil-rabbit-theme", - "exquisite", - "eyecandy", - "ezio-theme", - "flat-theme", - "fleet-themes", - "fleeting-theme", - "fleury", - "flexoki-themes", - "focus-theme", - "forest-night", - "frosted-theme", - "gafelson", - "gentle-dark", - "github-classic", - "github-copilot-theme", - "github-dark-default", - "github-monochrome-theme", - "github-plus-theme", - "github-theme", - "glazier", - "gleam-theme", - "graphene", - "green-monochrome-monitor-crt-phosphor", - "grey-theme", - "gruber-darker", - "gruber-flavors", - "gruvbox-baby", - "gruvbox-crisp-themes", - "gruvbox-ish", - "gruvbox-material", - "gruvchad", - "hacker-night-vision", - "hacker-theme", - "haku-dark-theme", - "halcyon", - "hami-melon-theme", - "hex-light-theme", - "hivacruz-theme", - "horizon", - "horizon-extended", - "hot-dog-stand", - "ibm-5151", - "iceberg", - "iceicebergy", - "indigo", - "intellij-newui-theme", - "ir-black", - "jellybeans-vim", - "jetbrains-darcula-theme-by-bronya0", - "jetbrains-rider", - "jetbrains-themes", - "kanagawa-themes", - "kanso", - "kiro", - "kiselevka", - "ktrz-monokai", - "kubesong", - "leblackque", - "lights-out", - "lonely-planet", - "lotus-theme", - "lusch-theme", - "lydia", - "macos-classic", - "malibu", - "maple-theme", - "marble", - "mariana-theme", - "marine-dark", - "martianized", - "material-dark", - "material-theme", - "matte-black", - "mau", - "maya", - "melange", - "mellow", - "min-theme", - "min-theme-plus", - "mint-theme", - "mnemonic", - "modest-dark", - "modus-themes", - "molten-theme", - "monokai-nebula", - "monokai-night", - "monokai-og", - "monokai-reversed", - "monokai-vibrant-amped", - "monolith", - "monosami", - "monospace-theme", - "moonlight", - "mosel", - "msun-dark", - "muted", - "nanowise", - "napalm", - "nebula-pulse", - "neo-brutalism", - "neon-cyberpunk", - "neon-pulse-theme", - "neosolarized", - "neovim-default", - "neutral-theme", - "new-darcula", - "night-owlz", - "night-shift", - "nightfox", - "nightfox-m", - "nixdorf-8870", - "nobin-theme", - "noctis-port", - "noir-and-blanc-theme", - "nord", - "nordic-nvim-theme", - "nordic-theme", - "norrsken", - "not-material-theme", - "nstlgy-dark", - "nuisance", - "nvim-nightfox", - "nyxvamp-theme", - "oasis", - "obsidian-sunset", - "ocean-dark-motifs", - "oceanic-next", - "oh-lucy", - "oldbook-theme", - "one-black-theme", - "one-dark-darkened", - "one-dark-extended", - "one-dark-flat", - "one-dark-pro", - "one-dark-pro-max", - "one-dark-pro-monokai-darker", - "one-hunter", - "one-thing-theme", - "onurb", - "oolong", - "oscura", - "outrun", - "oxocarbon", - "palenight", - "panda-theme", - "papercolor", - "paraiso", - "penumbra", - "penumbra-plus", - "perfect-dusk", - "phine-theme", - "pinata-theme", - "plato-themes", - "poimandres", - "polar-theme", - "popping-and-locking", - "purr", - "quiet-light-theme", - "quill", - "railscast", - "rainbow", - "replicant", - "retrofit-theme", - "rich-vesper", - "rose-pine-theme", - "rosevin", - "rust-rover-dark-theme", - "s-dark-theme", - "sequoia", - "serendipity", - "severance-theme", - "shades-of-purple-theme", - "short-giraffe-theme", - "simple-darker", - "siri", - "sitruuna", - "sl4y-theme", - "slate", - "smooth", - "snazzy", - "snow-fox-theme", - "snowfall", - "snowflake", - "solarized", - "solarized-fp", - "sonokai", - "spai-zero-theme", - "spiceflow-theme", - "srcery", - "struct-theme", - "sublime-mariana-theme", - "subliminal-nightfall", - "sumi-light", - "sunset-drive", - "supaglass", - "supergreatmonokai", - "syntax", - "synthwave", - "synthwave-alpha-theme", - "t3-theme", - "tailwind-theme", - "tanuki", - "terrible-theme", - "the-best-theme", - "the-dark-side", - "theme-lince", - "tm-twilight", - "tokyo-night", - "tomorrow-min-theme", - "tomorrow-night-burns-theme", - "tomorrow-theme", - "tron-legacy", - "tsar", - "tsarcasm", - "twilight", - "ultimate-dark-neo", - "umbralkai", - "underground-theme", - "unoflat", - "v0-theme", - "vague", - "vapor-theme", - "vercel-theme", - "vesper", - "vim-theme", - "vintergata", - "visual-assist-dark", - "vitesse", - "vitesse-theme-refined", - "vscode-classic-theme", - "vscode-dark-high-contrast", - "vscode-dark-modern", - "vscode-dark-plus", - "vscode-dark-polished", - "vscode-light-plus", - "vscode-monokai-charcoal", - "vue-theme", - "vynora", - "wakfu-theme", - "warp-one-dark", - "xcode-themes", - "xy-zed", - "yaka", - "yamura", - "yellowed", - "yue-theme", - "yugen", - "zed-legacy-themes", - "zedburn", - "zedokai", - "zedokai-darkest-machine", - "zedrack-theme", - "zedspace", - "zedwaita", - "zen", - "zen-abyssal", - "zero-trust-theme", - "zoegi-theme" - ] -} \ No newline at end of file diff --git a/modules/home/core/zeditor.nix b/modules/home/core/zeditor.nix index 69bb5d8..48f1b1c 100644 --- a/modules/home/core/zeditor.nix +++ b/modules/home/core/zeditor.nix @@ -7,7 +7,6 @@ }: let cfg = config.${namespace}.home.programs.zeditor; - settings = builtins.fromJSON (builtins.readFile ./zed-settings.json); in { options.${namespace}.home.programs.zeditor = { @@ -33,27 +32,1082 @@ in userKeymaps = [ ]; userTasks = [ ]; - extensions = settings.extensions; + # Extensions organized by category + extensions = [ + # Icons + "bearded-icon-theme" + "catppuccin-icons" + "charmed-icons" + "chawyehsu-vscode-icons" + "clean-vscode-icons" + "colored-zed-icons-theme" + "icons-modern-material" + "jetbrains-icons" + "jetbrains-new-ui-icons" + "material-icon-theme" + "modern-icons" + "monospace-icon-theme" + "openmoji-icons" + "phosphor-icons-theme" + "seti-icons" + "symbols" + "vscode-icons" + "vscode-great-icons" - userSettings = - let - # Remove extensions from settings so they don't end up in settings.json - # although Zed might ignore them, it's cleaner. - cleanSettings = builtins.removeAttrs settings [ "extensions" ]; - in - lib.recursiveUpdate cleanSettings { - # Nix-specific binary overrides that use lib.getExe or config values - node = { - path = cfg.nodePath; - npm_path = cfg.npmPath; - }; + # Language Support + "assembly" + "biome" + "csv" + "dart" + "deno" + "flatbuffers" + "graphql" + "html" + "ini" + "java" + "kotlin" + "nix" + "proto" + "sql" + "toml" + "xml" + "zig" + + # Development Tools + "docker-compose" + "dockerfile" + "git-firefly" + "golangci-lint" + "helm" + "http" + "make" + "nginx" + "terraform" + "tmux" + + # Utilities + "brainfuck" + "log" + "mermaid" + "perplexity" - lsp = { - jdtls.binary.path = lib.getExe pkgs.jdt-language-server; - kotlin-lsp.binary.path = lib.getExe pkgs.${namespace}.kotlin-lsp; - nix.binary.path = lib.getExe pkgs.nixd; - protobuf-language-server.binary.path = lib.getExe pkgs.protols; + # Themes + "0x96f" + "0xtz" + "1984-theme" + "adaltas-theme" + "adech" + "adwaita" + "adwaita-pastel" + "aesthetic-theme" + "alabaster" + "alabaster-dark" + "amber-monochrome-monitor-crt-phosphor" + "andromeda" + "anthracite-theme" + "anya" + "anysphere-theme" + "apisartisan" + "aquarium-theme" + "arctic-depth" + "ariake" + "asteroid" + "atomize" + "axolosin" + "aylin-theme" + "aystra" + "ayu-darker" + "azutiku-theme" + "bamboo-theme" + "barbenheimer" + "base16" + "batman" + "beanseeds-pro" + "bearded" + "becker-theme" + "blackfox" + "blackrain-theme" + "blackula" + "blade-runner-2049" + "blanche" + "blankeos-zen" + "blinds-theme" + "bluloco-theme" + "brook-code-theme" + "bubblegum" + "call-trans-opt-received" + "catbox" + "catppuccin" + "catppuccin-blur" + "catppuccin-blur-plus" + "chai-theme" + "chanterelle" + "chaos-theory-theme" + "chatgpt" + "chocolate" + "cisco-theme" + "city-lights" + "claude-code-inspired-dark" + "cobalt2" + "codely-theme" + "codesandbox-theme" + "codestackr" + "colorizer" + "cosmos" + "crimson-theme" + "crystal-theme" + "cursor" + "cyan-light-theme" + "darcula-dark" + "darcula-dark-okkano" + "dark-discord" + "dark-material-dracula" + "dark-pop-ui" + "darker-horizon" + "darkmatter-theme" + "day-shift" + "decorative-stitch" + "denix" + "dogi" + "dracula" + "dram" + "dream" + "dune-theme" + "eiffel-theme" + "elderberry" + "ember-theme" + "emerald-night" + "everforest" + "everforest-theme" + "evil-rabbit-theme" + "exquisite" + "eyecandy" + "ezio-theme" + "flat-theme" + "fleet-themes" + "fleeting-theme" + "fleury" + "flexoki-themes" + "focus-theme" + "forest-night" + "frosted-theme" + "gafelson" + "gentle-dark" + "github-classic" + "github-copilot-theme" + "github-dark-default" + "github-monochrome-theme" + "github-plus-theme" + "github-theme" + "glazier" + "gleam-theme" + "graphene" + "green-monochrome-monitor-crt-phosphor" + "grey-theme" + "gruber-darker" + "gruber-flavors" + "gruvbox-baby" + "gruvbox-crisp-themes" + "gruvbox-ish" + "gruvbox-material" + "gruvchad" + "hacker-night-vision" + "hacker-theme" + "haku-dark-theme" + "halcyon" + "hami-melon-theme" + "hex-light-theme" + "hivacruz-theme" + "horizon" + "horizon-extended" + "hot-dog-stand" + "ibm-5151" + "iceberg" + "iceicebergy" + "indigo" + "intellij-newui-theme" + "ir-black" + "jellybeans-vim" + "jetbrains-darcula-theme-by-bronya0" + "jetbrains-rider" + "jetbrains-themes" + "kanagawa-themes" + "kanso" + "kiro" + "kiselevka" + "ktrz-monokai" + "kubesong" + "leblackque" + "lights-out" + "lonely-planet" + "lotus-theme" + "lusch-theme" + "lydia" + "macos-classic" + "malibu" + "maple-theme" + "marble" + "mariana-theme" + "marine-dark" + "martianized" + "material-dark" + "material-theme" + "matte-black" + "mau" + "maya" + "melange" + "mellow" + "min-theme" + "min-theme-plus" + "mint-theme" + "mnemonic" + "modest-dark" + "modus-themes" + "molten-theme" + "monokai-nebula" + "monokai-night" + "monokai-og" + "monokai-reversed" + "monokai-vibrant-amped" + "monolith" + "monosami" + "monospace-theme" + "moonlight" + "mosel" + "msun-dark" + "muted" + "nanowise" + "napalm" + "nebula-pulse" + "neo-brutalism" + "neon-cyberpunk" + "neon-pulse-theme" + "neosolarized" + "neovim-default" + "neutral-theme" + "new-darcula" + "night-owlz" + "night-shift" + "nightfox" + "nightfox-m" + "nixdorf-8870" + "nobin-theme" + "noctis-port" + "noir-and-blanc-theme" + "nord" + "nordic-nvim-theme" + "nordic-theme" + "norrsken" + "not-material-theme" + "nstlgy-dark" + "nuisance" + "nvim-nightfox" + "nyxvamp-theme" + "oasis" + "obsidian-sunset" + "ocean-dark-motifs" + "oceanic-next" + "oh-lucy" + "oldbook-theme" + "one-black-theme" + "one-dark-darkened" + "one-dark-extended" + "one-dark-flat" + "one-dark-pro" + "one-dark-pro-max" + "one-dark-pro-monokai-darker" + "one-hunter" + "one-thing-theme" + "onurb" + "oolong" + "oscura" + "outrun" + "oxocarbon" + "palenight" + "panda-theme" + "papercolor" + "paraiso" + "penumbra" + "penumbra-plus" + "perfect-dusk" + "phine-theme" + "pinata-theme" + "plato-themes" + "poimandres" + "polar-theme" + "popping-and-locking" + "purr" + "quiet-light-theme" + "quill" + "railscast" + "rainbow" + "replicant" + "retrofit-theme" + "rich-vesper" + "rose-pine-theme" + "rosevin" + "rust-rover-dark-theme" + "s-dark-theme" + "sequoia" + "serendipity" + "severance-theme" + "shades-of-purple-theme" + "short-giraffe-theme" + "simple-darker" + "siri" + "sitruuna" + "sl4y-theme" + "slate" + "smooth" + "snazzy" + "snow-fox-theme" + "snowfall" + "snowflake" + "solarized" + "solarized-fp" + "sonokai" + "spai-zero-theme" + "spiceflow-theme" + "srcery" + "struct-theme" + "sublime-mariana-theme" + "subliminal-nightfall" + "sumi-light" + "sunset-drive" + "supaglass" + "supergreatmonokai" + "syntax" + "synthwave" + "synthwave-alpha-theme" + "t3-theme" + "tailwind-theme" + "tanuki" + "terrible-theme" + "the-best-theme" + "the-dark-side" + "theme-lince" + "tm-twilight" + "tokyo-night" + "tomorrow-min-theme" + "tomorrow-night-burns-theme" + "tomorrow-theme" + "tron-legacy" + "tsar" + "tsarcasm" + "twilight" + "ultimate-dark-neo" + "umbralkai" + "underground-theme" + "unoflat" + "v0-theme" + "vague" + "vapor-theme" + "vercel-theme" + "vesper" + "vim-theme" + "vintergata" + "visual-assist-dark" + "vitesse" + "vitesse-theme-refined" + "vscode-classic-theme" + "vscode-dark-high-contrast" + "vscode-dark-modern" + "vscode-dark-plus" + "vscode-dark-polished" + "vscode-light-plus" + "vscode-monokai-charcoal" + "vue-theme" + "vynora" + "wakfu-theme" + "warp-one-dark" + "xcode-themes" + "xy-zed" + "yaka" + "yamura" + "yellowed" + "yue-theme" + "yugen" + "zed-legacy-themes" + "zedburn" + "zedokai" + "zedokai-darkest-machine" + "zedrack-theme" + "zedspace" + "zedwaita" + "zen" + "zen-abyssal" + "zero-trust-theme" + "zoegi-theme" + ]; + + userSettings = { + active_pane_modifiers = { + border_size = 0; + inactive_opacity = 1; + }; + bottom_dock_layout = "contained"; + agent_font_size = null; + allow_rewrap = "in_comments"; + auto_indent = true; + auto_indent_on_paste = true; + auto_install_extensions = { + html = true; + }; + auto_update_extensions = null; + autosave = "off"; + autoscroll_on_clicks = false; + auto_signature_help = false; + show_signature_help_after_edits = false; + auto_update = false; + base_keymap = "VSCode"; + buffer_font_family = "IntoneMono Nerd Font Mono"; + buffer_font_features = null; + buffer_font_fallbacks = null; + buffer_font_size = 12; + buffer_font_weight = 400; + buffer_line_height = "comfortable"; + centered_layout = { + left_padding = 0.2; + right_padding = 0.2; + }; + close_on_file_delete = false; + confirm_quit = false; + diagnostics_max_severity = null; + disable_ai = false; + load_direnv = "shell_hook"; + double_click_in_multibuffer = "select"; + drop_target_size = 0.2; + edit_predictions = { + disabled_globs = [ + "**/.env*" + "**/*.pem" + "**/*.key" + "**/*.cert" + "**/*.crt" + "**/.dev.vars" + "**/secrets.yml" + ]; + }; + edit_predictions_disabled_in = [ ]; + current_line_highlight = "all"; + selection_highlight = true; + rounded_selection = true; + cursor_blink = true; + cursor_shape = "bar"; + gutter = { + line_numbers = true; + runnables = true; + breakpoints = true; + folds = true; + min_line_number_digits = 4; + }; + hide_mouse = "on_typing_and_movement"; + snippet_sort_order = "inline"; + scrollbar = { + show = "auto"; + cursors = true; + git_diff = true; + search_results = true; + selected_text = true; + selected_symbol = true; + diagnostics = "all"; + axes = { + horizontal = true; + vertical = true; + }; + }; + minimap = { + show = "never"; + thumb = "always"; + thumb_border = "left_open"; + current_line_highlight = null; + }; + tab_bar = { + show = true; + show_nav_history_buttons = true; + show_tab_bar_buttons = true; + }; + tabs = { + close_position = "right"; + file_icons = false; + git_status = false; + activate_on_close = "history"; + show_close_button = "hover"; + show_diagnostics = "off"; + }; + inline_code_actions = true; + session = { + restore_unsaved_buffers = true; + trust_all_worktrees = false; + }; + drag_and_drop_selection = { + enabled = true; + delay = 300; + }; + toolbar = { + breadcrumbs = true; + quick_actions = true; + selections_menu = true; + agent_review = true; + code_actions = false; + }; + use_system_window_tabs = false; + enable_language_server = true; + ensure_final_newline_on_save = true; + expand_excerpt_lines = 5; + excerpt_context_lines = 2; + extend_comment_on_newline = true; + extend_list_on_newline = true; + indent_list_on_tab = true; + status_bar = { + active_language_button = true; + cursor_position_button = true; + line_endings_button = false; + active_encoding_button = "non_utf8"; + }; + lsp = { + jdtls = { + binary = { + path = lib.getExe pkgs.jdt-language-server; + ignore_system_version = true; + }; + }; + kotlin-lsp = { + binary = { + path = lib.getExe pkgs.${namespace}.kotlin-lsp; + arguments = [ "--stdio" ]; + }; + }; + nix = { + binary = { + path = lib.getExe pkgs.nixd; + }; }; + protobuf-language-server = { + binary = { + path = lib.getExe pkgs.protols; + }; + }; + }; + global_lsp_settings = { + button = true; + }; + lsp_highlight_debounce = 75; + features = { + edit_prediction_provider = "none"; + }; + format_on_save = "on"; + formatter = "auto"; + use_autoclose = true; + always_treat_brackets_as_autoclosed = false; + file_scan_exclusions = [ + "**/.git" + "**/.svn" + "**/.hg" + "**/.jj" + "**/.sl" + "**/.repo" + "**/CVS" + "**/.DS_Store" + "**/Thumbs.db" + "**/.classpath" + "**/.settings" + ]; + file_scan_inclusions = [ ".env*" ]; + file_types = { + "JSONC" = [ + "**/.zed/**/*.json" + "**/zed/**/*.json" + "**/Zed/**/*.json" + "**/.vscode/**/*.json" + "tsconfig.json" + "jsconfig.json" + ]; + "Dockerfile" = [ + "Dockerfile*" + "*.dockerfile" + ]; + "YAML" = [ + "*.yml" + "*.yaml" + ]; + "Shell Script" = [ + ".env.*" + "*.zsh" + "*.bash" + "*.sh" + "APKBUILD" + "PKGBUILD" + "*.ebuild" + "*.eclass" + ".bashrc" + ".bash_profile" + ".zshrc" + ".zprofile" + ]; + "Python" = [ + "*.py" + "*.pyi" + "SConstruct" + "SConscript" + ]; + "JavaScript" = [ + "*.js" + "*.cjs" + "*.mjs" + "*.jsx" + ]; + "TypeScript" = [ + "*.ts" + "*.cts" + "*.mts" + "*.tsx" + ]; + "HTML" = [ + "*.html" + "*.htm" + "*.shtml" + "*.xhtml" + ]; + "CSS" = [ "*.css" ]; + "SCSS" = [ "*.scss" ]; + "Java" = [ + "*.java" + "*.jav" + ]; + "Kotlin" = [ + "*.kt" + "*.kts" + ]; + "Go" = [ "*.go" ]; + "Rust" = [ "*.rs" ]; + "C" = [ + "*.c" + "*.h" + ]; + "C++" = [ + "*.cpp" + "*.cc" + "*.cxx" + "*.hpp" + "*.hh" + "*.hxx" + ]; + "Markdown" = [ + "*.md" + "*.markdown" + ]; + "TOML" = [ "*.toml" ]; + "XML" = [ + "*.xml" + "*.xsd" + "*.xsl" + "*.xslt" + ]; + "SQL" = [ + "*.sql" + "*.ddl" + "*.dml" + ]; + "Terraform" = [ + "*.tf" + "*.tfvars" + ]; + "HCL" = [ "*.hcl" ]; + "Nix" = [ "*.nix" ]; + "Lua" = [ "*.lua" ]; + "Ruby" = [ + "*.rb" + "Rakefile" + "Gemfile" + ]; + "PHP" = [ "*.php" ]; + "C#" = [ "*.cs" ]; + "Swift" = [ "*.swift" ]; + "Zig" = [ "*.zig" ]; + "Dart" = [ "*.dart" ]; + "Proto" = [ "*.proto" ]; + "GraphQL" = [ + "*.graphql" + "*.gql" + ]; + }; + diagnostics = { + include_warnings = true; + inline = { + enabled = false; + update_debounce_ms = 150; + padding = 4; + min_column = 0; + max_severity = null; + }; + update_with_cursor = false; + primary_only = false; + use_rendered = false; + }; + git = { + git_gutter = "tracked_files"; + gutter_debounce = null; + inline_blame = { + enabled = true; + delay_ms = 600; + }; + branch_picker = { + show_author_name = true; + }; + hunk_style = "staged_hollow"; + }; + go_to_definition_fallback = "find_all_references"; + hard_tabs = false; + helix_mode = false; + indent_guides = { + enabled = true; + line_width = 1; + active_line_width = 1; + coloring = "fixed"; + background_coloring = "disabled"; }; + hover_popover_enabled = true; + hover_popover_delay = 300; + icon_theme = { + mode = "system"; + dark = "Zed (Default)"; + light = "Zed (Default)"; + }; + image_viewer = { + unit = "binary"; + }; + inlay_hints = { + enabled = false; + show_type_hints = true; + show_parameter_hints = true; + show_other_hints = true; + show_background = false; + edit_debounce_ms = 700; + scroll_debounce_ms = 50; + toggle_on_modifiers_press = null; + }; + journal = { + path = "~"; + hour_format = "hour12"; + }; + jsx_tag_auto_close = { + enabled = true; + }; + languages = { + JavaScript = { + tab_size = 2; + enable_language_server = true; + hard_tabs = false; + language_servers = [ + "!eslint" + "biome" + ]; + }; + TypeScript = { + tab_size = 2; + hard_tabs = false; + enable_language_server = true; + language_servers = [ + "!eslint" + "!graphql" + "!deno" + "!typescript-language-server" + "biome" + "..." + ]; + }; + JSON = { + tab_size = 2; + hard_tabs = false; + }; + Nix = { + tab_size = 4; + hard_tabs = true; + language_servers = [ + "nixd" + "!nil" + ]; + }; + Go = { + tab_size = 4; + hard_tabs = true; + }; + Kotlin = { + language_servers = [ + "kotlin-lsp" + "!kotlin-language-server" + ]; + }; + Java = { + language_servers = [ "jdtls" ]; + }; + }; + language_models = { + anthropic = { + api_url = "https://api.anthropic.com"; + }; + google = { + api_url = "https://generativelanguage.googleapis.com"; + }; + ollama = { + api_url = "http://localhost:11434"; + }; + openai = { + api_url = "https://api.openai.com/v1"; + }; + }; + line_indicator_format = "short"; + linked_edits = true; + lsp_document_colors = true; + max_tabs = null; + middle_click_paste = true; + multi_cursor_modifier = "alt"; + node = { + ignore_system_version = true; + path = cfg.nodePath; + npm_path = cfg.npmPath; + }; + proxy = null; + on_last_window_closed = "platform_default"; + profiles = { }; + preview_tabs = { + enabled = true; + enable_preview_from_project_panel = true; + enable_preview_from_file_finder = true; + enable_preview_from_multibuffer = true; + enable_preview_multibuffer_from_code_navigation = false; + enable_preview_file_from_code_navigation = true; + enable_keep_preview_on_code_navigation = false; + }; + file_finder = { + file_icons = true; + modal_max_width = "small"; + skip_focus_for_active_in_search = true; + }; + pane_split_direction_horizontal = "up"; + pane_split_direction_vertical = "left"; + preferred_line_length = 80; + private_files = [ + "**/.env*" + "**/*.pem" + "**/*.key" + "**/*.cert" + "**/*.crt" + "**/secrets.yml" + ]; + projects_online_by_default = true; + read_ssh_config = true; + redact_private_values = false; + relative_line_numbers = "disabled"; + remove_trailing_whitespace_on_save = true; + resize_all_panels_in_dock = [ "left" ]; + restore_on_file_reopen = true; + restore_on_startup = "last_session"; + scroll_beyond_last_line = "one_page"; + scroll_sensitivity = 1; + fast_scroll_sensitivity = 4; + horizontal_scroll_margin = 5; + vertical_scroll_margin = 3; + search = { + button = true; + whole_word = false; + case_sensitive = false; + include_ignored = false; + regex = false; + center_on_match = false; + }; + search_wrap = true; + seed_search_query_from_cursor = "always"; + use_smartcase_search = false; + show_call_status_icon = true; + completions = { + words = "fallback"; + words_min_length = 3; + lsp = true; + lsp_fetch_timeout_ms = 0; + lsp_insert_mode = "replace_suffix"; + }; + show_completions_on_input = true; + show_completion_documentation = true; + show_edit_predictions = true; + show_whitespaces = "boundary"; + whitespace_map = { + space = "•"; + tab = "→"; + }; + soft_wrap = "none"; + show_wrap_guides = true; + use_on_type_format = true; + use_auto_surround = true; + use_system_path_prompts = true; + use_system_prompts = true; + wrap_guides = [ ]; + tab_size = 2; + tasks = { + variables = { }; + enabled = true; + prefer_lsp = false; + }; + telemetry = { + diagnostics = true; + metrics = true; + }; + terminal = { + alternate_scroll = "off"; + blinking = "off"; + copy_on_select = false; + keep_selection_on_copy = true; + dock = "bottom"; + default_width = 640; + default_height = 320; + detect_venv = { + on = { + directories = [ + ".env" + "env" + ".venv" + "venv" + ]; + activate_script = "default"; + }; + }; + env = { + TERM = "ghostty"; + }; + font_family = "IntoneMono Nerd Font Mono"; + font_features = null; + font_size = null; + line_height = "comfortable"; + minimum_contrast = 45; + option_as_meta = false; + button = false; + shell = "system"; + scroll_multiplier = 3; + toolbar = { + breadcrumbs = false; + }; + working_directory = "current_project_directory"; + scrollbar = { + show = null; + }; + path_hyperlink_regexes = [ + "File \"(?[^\"]+)\", line (?[0-9]+)" + "(?x) # optionally starts with 0-2 opening prefix symbols [({\\[<]{0,2} # which may be followed by an opening quote (?["`])? # `path` is the shortest sequence of any non-space character (?(?[^ ]+? # which may end with a line and optionally a column, (?:+[0-9]+(:[0-9]+)?|:?\([0-9]+([,:][0-9]+)?\))? )) # which must be followed by a matching quote (?()\\k) # and optionally a single closing symbol [)}\\]>]? # if line/column matched, may be followed by a description (?():[^ 0-9][^ ]*)? # which may be followed by trailing punctuation [.,:)}\\]>]* # and always includes trailing whitespace or end of line ([ ]+|$)" + ]; + path_hyperlink_timeout_ms = 1; + }; + repl = { + max_columns = 128; + max_lines = 32; + }; + text_rendering_mode = "platform_default"; + theme = { + mode = "system"; + dark = "Palenight Theme"; + light = "Tokyo Night Storm"; + }; + title_bar = { + show_branch_icon = false; + show_branch_name = true; + show_project_items = true; + show_onboarding_banner = true; + show_user_picture = true; + show_user_menu = true; + show_sign_in = true; + show_menus = false; + }; + vim_mode = false; + when_closing_with_no_tabs = "platform_default"; + project_panel = { + button = true; + default_width = 240; + dock = "left"; + entry_spacing = "comfortable"; + file_icons = true; + folder_icons = true; + git_status = true; + indent_size = 20; + auto_reveal_entries = true; + auto_fold_dirs = true; + drag_and_drop = true; + scrollbar = { + show = null; + }; + sticky_scroll = true; + show_diagnostics = "all"; + indent_guides = { + show = "always"; + }; + sort_mode = "directories_first"; + hide_root = false; + hide_hidden = false; + starts_open = true; + auto_open = { + on_create = true; + on_paste = true; + on_drop = true; + }; + }; + collaboration_panel = { + button = false; + dock = "left"; + default_width = 240; + }; + debugger = { + stepping_granularity = "line"; + save_breakpoints = true; + dock = "bottom"; + button = true; + }; + git_panel = { + button = true; + dock = "left"; + default_width = 360; + status_style = "icon"; + fallback_branch_name = "main"; + sort_by_path = false; + collapse_untracked_diff = false; + scrollbar = { + show = null; + }; + }; + git_hosting_providers = [ ]; + outline_panel = { + button = true; + default_width = 300; + dock = "right"; + file_icons = true; + folder_icons = true; + git_status = true; + indent_size = 20; + auto_reveal_entries = true; + auto_fold_dirs = true; + indent_guides = { + show = "always"; + }; + scrollbar = { + show = null; + }; + }; + calls = { + mute_on_join = false; + share_on_join = false; + }; + colorize_brackets = false; + unnecessary_code_fade = 0.3; + ui_font_family = "IntoneMono Nerd Font Mono"; + ui_font_features = { + calt = false; + }; + ui_font_fallbacks = null; + ui_font_size = 12; + ui_font_weight = 400; + agent = { }; + notification_panel = { + button = true; + dock = "bottom"; + }; + }; }; } \ No newline at end of file From 7589d3062053bf5cb17d4b9764988fc8ca8ad534 Mon Sep 17 00:00:00 2001 From: Darren Bangsund Date: Mon, 19 Jan 2026 12:26:37 -0800 Subject: [PATCH 8/9] config(zed): configure biome formatter for web languages --- .../aarch64-darwin/darrenbangsund/default.nix | 10 +- modules/home/core/env.nix | 18 ++- modules/home/core/zeditor.nix | 142 +++++++++++++----- systems/aarch64-darwin/mingabook/default.nix | 15 +- 4 files changed, 134 insertions(+), 51 deletions(-) diff --git a/homes/aarch64-darwin/darrenbangsund/default.nix b/homes/aarch64-darwin/darrenbangsund/default.nix index be8bf38..b174d76 100644 --- a/homes/aarch64-darwin/darrenbangsund/default.nix +++ b/homes/aarch64-darwin/darrenbangsund/default.nix @@ -1,6 +1,12 @@ -{ ... }: +{ lib, pkgs, ... }: { - fellowship.home.dev.enable = false; + # fellowship.home = { + # dev.enable = false; + # programs.zeditor = { + # nodePath = lib.getExe pkgs.nodejs_20; + # npmPath = lib.getExe' pkgs.nodejs_20 "npm"; + # }; + # }; programs.zsh.envExtra = '' neofetch diff --git a/modules/home/core/env.nix b/modules/home/core/env.nix index e3578fe..197a873 100644 --- a/modules/home/core/env.nix +++ b/modules/home/core/env.nix @@ -9,12 +9,16 @@ # read secrets into env at runtime to prevent embedding # secrets into the build as sessionVariables does programs.zsh = { - initContent = lib.mkAfter ( - lib.optionalString (builtins.hasAttr "ai/anthropic/api-key" config.sops.secrets) '' - if [ -f "${config.sops.secrets."ai/anthropic/api-key".path}" ]; then - export ANTHROPIC_API_KEY=$(cat "${config.sops.secrets."ai/anthropic/api-key".path}") - fi - '' - ); + initContent = '' + export NX_TUI=false + export NVM_DIR="$HOME/.nvm" + [ -s "$(brew --prefix nvm)/nvm.sh" ] && \. "$(brew --prefix nvm)/nvm.sh" + [ -s "$(brew --prefix nvm)/etc/bash_completion.d/nvm" ] && \. "$(brew --prefix nvm)/etc/bash_completion.d/nvm" + '' + + lib.optionalString (builtins.hasAttr "ai/anthropic/api-key" config.sops.secrets) '' + if [ -f "${config.sops.secrets."ai/anthropic/api-key".path}" ]; then + export ANTHROPIC_API_KEY=$(cat "${config.sops.secrets."ai/anthropic/api-key".path}") + fi + ''; }; } diff --git a/modules/home/core/zeditor.nix b/modules/home/core/zeditor.nix index 48f1b1c..1ac8c31 100644 --- a/modules/home/core/zeditor.nix +++ b/modules/home/core/zeditor.nix @@ -1,28 +1,11 @@ { - config, lib, namespace, pkgs, ... }: -let - cfg = config.${namespace}.home.programs.zeditor; -in { - options.${namespace}.home.programs.zeditor = { - nodePath = lib.mkOption { - type = lib.types.str; - default = "/run/current-system/sw/bin/node"; - description = "Path to node executable for Zed"; - }; - npmPath = lib.mkOption { - type = lib.types.str; - default = "/run/current-system/sw/bin/npm"; - description = "Path to npm executable for Zed"; - }; - }; - - config.programs.zed-editor = { + programs.zed-editor = { enable = true; package = pkgs.zed-editor; installRemoteServer = true; @@ -446,14 +429,14 @@ in inactive_opacity = 1; }; bottom_dock_layout = "contained"; - agent_font_size = null; + # agent_font_size = null; allow_rewrap = "in_comments"; auto_indent = true; auto_indent_on_paste = true; auto_install_extensions = { html = true; }; - auto_update_extensions = null; + auto_update_extensions = { }; autosave = "off"; autoscroll_on_clicks = false; auto_signature_help = false; @@ -517,10 +500,10 @@ in }; }; minimap = { - show = "never"; + show = "always"; thumb = "always"; thumb_border = "left_open"; - current_line_highlight = null; + current_line_highlight = "line"; }; tab_bar = { show = true; @@ -557,15 +540,20 @@ in expand_excerpt_lines = 5; excerpt_context_lines = 2; extend_comment_on_newline = true; - extend_list_on_newline = true; - indent_list_on_tab = true; + # extend_list_on_newline = true; + # indent_list_on_tab = true; status_bar = { active_language_button = true; cursor_position_button = true; line_endings_button = false; - active_encoding_button = "non_utf8"; + # active_encoding_button = "non_utf8"; }; lsp = { + biome = { + settings = { + require_config_file = true; + }; + }; jdtls = { binary = { path = lib.getExe pkgs.jdt-language-server; @@ -741,9 +729,9 @@ in min_column = 0; max_severity = null; }; - update_with_cursor = false; - primary_only = false; - use_rendered = false; + # update_with_cursor = false; + # primary_only = false; + # use_rendered = false; }; git = { git_gutter = "tracked_files"; @@ -799,15 +787,29 @@ in tab_size = 2; enable_language_server = true; hard_tabs = false; + formatter = { + language_server = { + name = "biome"; + }; + }; language_servers = [ "!eslint" "biome" ]; + code_actions_on_format = { + "source.fixAll.biome" = true; + "source.organizeImports.biome" = true; + }; }; TypeScript = { tab_size = 2; hard_tabs = false; enable_language_server = true; + formatter = { + language_server = { + name = "biome"; + }; + }; language_servers = [ "!eslint" "!graphql" @@ -816,10 +818,54 @@ in "biome" "..." ]; + code_actions_on_format = { + "source.fixAll.biome" = true; + "source.organizeImports.biome" = true; + }; + }; + TSX = { + formatter = { + language_server = { + name = "biome"; + }; + }; + code_actions_on_format = { + "source.fixAll.biome" = true; + "source.organizeImports.biome" = true; + }; }; JSON = { tab_size = 2; hard_tabs = false; + formatter = { + language_server = { + name = "biome"; + }; + }; + code_actions_on_format = { + "source.fixAll.biome" = true; + }; + }; + JSONC = { + formatter = { + language_server = { + name = "biome"; + }; + }; + }; + CSS = { + formatter = { + language_server = { + name = "biome"; + }; + }; + }; + GraphQL = { + formatter = { + language_server = { + name = "biome"; + }; + }; }; Nix = { tab_size = 4; @@ -859,14 +905,14 @@ in }; line_indicator_format = "short"; linked_edits = true; - lsp_document_colors = true; + lsp_document_colors = "border"; max_tabs = null; middle_click_paste = true; multi_cursor_modifier = "alt"; node = { ignore_system_version = true; - path = cfg.nodePath; - npm_path = cfg.npmPath; + path = lib.getExe pkgs.nodejs_22; + npm_path = lib.getExe' pkgs.nodejs_22 "npm"; }; proxy = null; on_last_window_closed = "platform_default"; @@ -896,7 +942,7 @@ in "**/*.crt" "**/secrets.yml" ]; - projects_online_by_default = true; + # projects_online_by_default = true; read_ssh_config = true; redact_private_values = false; relative_line_numbers = "disabled"; @@ -993,7 +1039,26 @@ in }; path_hyperlink_regexes = [ "File \"(?[^\"]+)\", line (?[0-9]+)" - "(?x) # optionally starts with 0-2 opening prefix symbols [({\\[<]{0,2} # which may be followed by an opening quote (?["`])? # `path` is the shortest sequence of any non-space character (?(?[^ ]+? # which may end with a line and optionally a column, (?:+[0-9]+(:[0-9]+)?|:?\([0-9]+([,:][0-9]+)?\))? )) # which must be followed by a matching quote (?()\\k) # and optionally a single closing symbol [)}\\]>]? # if line/column matched, may be followed by a description (?():[^ 0-9][^ ]*)? # which may be followed by trailing punctuation [.,:)}\\]>]* # and always includes trailing whitespace or end of line ([ ]+|$)" + "(?x)" + "# optionally starts with 0-2 opening prefix symbols" + "[({\\[<]{0,2}" + "# which may be followed by an opening quote" + "(?[\"'`])?" + "# `path` is the shortest sequence of any non-space character" + "(?(?[^ ]+?" + " # which may end with a line and optionally a column," + " (?:+[0-9]+(:[0-9]+)?|:?\\([0-9]+([,:][0-9]+)?\\))?" + "))" + "# which must be followed by a matching quote" + "(?()\\k)" + "# and optionally a single closing symbol" + "[)}\\]>]?" + "# if line/column matched, may be followed by a description" + "(?():[^ 0-9][^ ]*)?" + "# which may be followed by trailing punctuation" + "[.,:)}\\]>]*" + "# and always includes trailing whitespace or end of line" + "([ ]+|$)" ]; path_hyperlink_timeout_ms = 1; }; @@ -1001,7 +1066,7 @@ in max_columns = 128; max_lines = 32; }; - text_rendering_mode = "platform_default"; + # text_rendering_mode = "platform_default"; theme = { mode = "system"; dark = "Palenight Theme"; @@ -1103,11 +1168,16 @@ in ui_font_fallbacks = null; ui_font_size = 12; ui_font_weight = 400; - agent = { }; + agent = { + default_model = { + provider = "anthropic"; + model = "claude-4-sonnet"; + }; + }; notification_panel = { button = true; dock = "bottom"; }; }; }; -} \ No newline at end of file +} diff --git a/systems/aarch64-darwin/mingabook/default.nix b/systems/aarch64-darwin/mingabook/default.nix index 9c1c6f5..e1a26e9 100644 --- a/systems/aarch64-darwin/mingabook/default.nix +++ b/systems/aarch64-darwin/mingabook/default.nix @@ -16,27 +16,30 @@ stateVersion = 6; }; - fellowship.home.programs.zeditor = { - nodePath = lib.getExe pkgs.nodejs_21; - npmPath = lib.getExe' pkgs.nodejs_21 "npm"; - }; - environment.systemPackages = with pkgs; [ mkcert - nodejs_21 + nodejs_20 pnpm python310 + raycast ]; + # TODO: THIS + services.aerospace = { + enable = false; + }; + homebrew = { taps = [ ]; brews = [ "git-lfs" + "nvm" "tmux" ]; casks = [ "arc" "chromium" + "dbeaver-community" "discord" "firefox" "ghostty" From 190d7692521394f4a5f249837b4d881c15618506 Mon Sep 17 00:00:00 2001 From: arrayofone <11287980+arrayofone@users.noreply.github.com> Date: Thu, 29 Jan 2026 09:31:32 -0800 Subject: [PATCH 9/9] some more stuff --- flake.lock | 316 ++++++------------ .../aarch64-darwin/darrenbangsund/default.nix | 8 +- homes/x86_64-linux/arrayofone/default.nix | 37 +- modules/home/core/default.nix | 58 ++-- modules/home/core/env.nix | 8 +- modules/home/core/git.nix | 34 ++ modules/home/core/ssh.nix | 35 ++ modules/home/core/terminal.nix | 18 - modules/home/core/theme.nix | 19 -- modules/home/core/zeditor.nix | 30 +- modules/home/dev/modules/js/default.nix | 2 +- modules/home/gui/desktop/hyprland/default.nix | 2 +- modules/nixos/hardware/nvidia/default.nix | 2 +- systems/aarch64-darwin/mingabook/default.nix | 4 +- systems/aarch64-darwin/mingabook/homebrew.nix | 2 +- systems/x86_64-linux/baradur/default.nix | 9 +- 16 files changed, 281 insertions(+), 303 deletions(-) create mode 100644 modules/home/core/git.nix create mode 100644 modules/home/core/ssh.nix delete mode 100644 modules/home/core/terminal.nix diff --git a/flake.lock b/flake.lock index 86e7bf8..d39ae95 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ ] }, "locked": { - "lastModified": 1767024902, - "narHash": "sha256-sMdk6QkMDhIOnvULXKUM8WW8iyi551SWw2i6KQHbrrU=", + "lastModified": 1769428758, + "narHash": "sha256-0G/GzF7lkWs/yl82bXuisSqPn6sf8YGTnbEdFOXvOfU=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "b8a0c5ba5a9fbd2c660be7dd98bdde0ff3798556", + "rev": "def5e74c97370f15949a67c62e61f1459fcb0e15", "type": "github" }, "original": { @@ -101,19 +101,41 @@ "type": "github" } }, + "blueprint": { + "inputs": { + "nixpkgs": [ + "ethereum-nix", + "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1769353768, + "narHash": "sha256-zI+7cbMI4wMIR57jMjDSEsVb3grapTnURDxxJPYFIW0=", + "owner": "numtide", + "repo": "blueprint", + "rev": "c7da5c70ad1c9b60b6f5d4f674fbe205d48d8f6c", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "blueprint", + "type": "github" + } + }, "brew-src": { "flake": false, "locked": { - "lastModified": 1763638478, - "narHash": "sha256-n/IMowE9S23ovmTkKX7KhxXC2Yq41EAVFR2FBIXPcT8=", + "lastModified": 1769363988, + "narHash": "sha256-BiGPeulrDVetXP+tjxhMcGLUROZAtZIhU5m4MqawCfM=", "owner": "Homebrew", "repo": "brew", - "rev": "fbfdbaba008189499958a7aeb1e2c36ab10c067d", + "rev": "d01011cac6d72032c75fd2cd9489909e95d9faf2", "type": "github" }, "original": { "owner": "Homebrew", - "ref": "5.0.3", + "ref": "5.0.12", "repo": "brew", "type": "github" } @@ -123,11 +145,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1767967164, - "narHash": "sha256-Cx4VETh9dGoQYDtWhre7g66d7SAr+h1h6f+SSHxVrck=", + "lastModified": 1769432988, + "narHash": "sha256-q4arZjXnLiuMnLzO972lrXIGdzyGb4DGaIt69CcCYdE=", "owner": "catppuccin", "repo": "nix", - "rev": "e973584280e3b0e1d5b5a1a5e9948dc222c54af7", + "rev": "d7a8632c0d8d144478aac1a8c8d5083b770cbb03", "type": "github" }, "original": { @@ -143,11 +165,11 @@ ] }, "locked": { - "lastModified": 1768220509, - "narHash": "sha256-8wMrJP/Xk5Dkm0TxzaERLt3eGFEhHTWaJKUpK3AoL4o=", + "lastModified": 1768764703, + "narHash": "sha256-5ulSDyOG1U+1sJhkJHYsUOWEsmtLl97O0NTVMvgIVyc=", "owner": "nix-darwin", "repo": "nix-darwin", - "rev": "7b1d394e7d9112d4060e12ef3271b38a7c43e83b", + "rev": "0fc4e7ac670a0ed874abacf73c4b072a6a58064b", "type": "github" }, "original": { @@ -156,46 +178,20 @@ "type": "github" } }, - "devshell": { - "inputs": { - "nixpkgs": [ - "ethereum-nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1764011051, - "narHash": "sha256-M7SZyPZiqZUR/EiiBJnmyUbOi5oE/03tCeFrTiUZchI=", - "owner": "numtide", - "repo": "devshell", - "rev": "17ed8d9744ebe70424659b0ef74ad6d41fc87071", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "devshell", - "type": "github" - } - }, "ethereum-nix": { "inputs": { - "devshell": "devshell", - "flake-parts": "flake-parts", - "flake-utils": "flake-utils", - "foundry-nix": "foundry-nix", + "blueprint": "blueprint", "nixpkgs": [ "nixpkgs" ], - "nixpkgs-unstable": "nixpkgs-unstable", - "systems": "systems", "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1767776044, - "narHash": "sha256-yNLLrf4qKubvO11vTH6FjfPV2iCcNusivuzngEEuc+w=", + "lastModified": 1769678452, + "narHash": "sha256-/Z8Oba+qhRskszfR4A4UONGRABrtIznCP59BT9gehHg=", "owner": "nix-community", "repo": "ethereum.nix", - "rev": "34217e7d20d6ed04170a1347db346df068669090", + "rev": "2709011bc5618606015e7e46477fc2b957c58196", "type": "github" }, "original": { @@ -239,11 +235,11 @@ "flake-compat_2": { "flake": false, "locked": { - "lastModified": 1765121682, - "narHash": "sha256-4VBOP18BFeiPkyhy9o4ssBNQEvfvv1kXkasAYd0+rrA=", + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", "owner": "edolstra", "repo": "flake-compat", - "rev": "65f23138d8d09a92e30f1e5c87611b23ef451bf3", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", "type": "github" }, "original": { @@ -269,24 +265,6 @@ } }, "flake-parts": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib" - }, - "locked": { - "lastModified": 1763759067, - "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_2": { "inputs": { "nixpkgs-lib": [ "stylix", @@ -309,17 +287,14 @@ }, "flake-utils": { "inputs": { - "systems": [ - "ethereum-nix", - "systems" - ] + "systems": "systems_5" }, "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", "owner": "numtide", "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", "type": "github" }, "original": { @@ -330,7 +305,7 @@ }, "flake-utils-plus": { "inputs": { - "flake-utils": "flake-utils_2" + "flake-utils": "flake-utils" }, "locked": { "lastModified": 1715533576, @@ -347,50 +322,6 @@ "type": "github" } }, - "flake-utils_2": { - "inputs": { - "systems": "systems_5" - }, - "locked": { - "lastModified": 1694529238, - "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "foundry-nix": { - "inputs": { - "flake-utils": [ - "ethereum-nix", - "flake-utils" - ], - "nixpkgs": [ - "ethereum-nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1764753179, - "narHash": "sha256-2u7C/aKEcCpND60JfREYhKaMg/0cZ/pk1HviizWrCl8=", - "owner": "shazow", - "repo": "foundry.nix", - "rev": "8c21d3ac7a03da27af55d3c94fe95620c9d6f316", - "type": "github" - }, - "original": { - "owner": "shazow", - "ref": "monthly", - "repo": "foundry.nix", - "type": "github" - } - }, "fromYaml": { "flake": false, "locked": { @@ -455,11 +386,11 @@ ] }, "locked": { - "lastModified": 1768271922, - "narHash": "sha256-zmFw7AtcmfMxW3vR7AiGeQQeHhdrd2x7a3hxzd6vJYI=", + "lastModified": 1769699427, + "narHash": "sha256-dAQt3qXugGhg92A+jqaUcmH0elbgEN/mV4vy1+ohLZk=", "owner": "nix-community", "repo": "home-manager", - "rev": "fbd566923adcfa67be512a14a79467e2ab8a5777", + "rev": "2a08ab21abc8b482f41c521b5f9b0df5b18a67eb", "type": "github" }, "original": { @@ -471,11 +402,11 @@ "homebrew-bun": { "flake": false, "locked": { - "lastModified": 1768271356, - "narHash": "sha256-x/pXdRQ/GR4P/buAwQMPXmghekDvWOTOub8+Cocsy/o=", + "lastModified": 1769683249, + "narHash": "sha256-gpeB7ityV7Nr0mYT+uXjmgT45bTG/nOH0KyZQaXxd9g=", "owner": "oven-sh", "repo": "homebrew-bun", - "rev": "31a2a9a35632ce20b087f39e7d78ab9e1bc85669", + "rev": "467bd9fc44e6714aa1d5e75c01e4cfb067b9f7c1", "type": "github" }, "original": { @@ -487,11 +418,11 @@ "homebrew-cask": { "flake": false, "locked": { - "lastModified": 1768322624, - "narHash": "sha256-DiP/H7EUhv6jyyNnlWEHXuIPga6o3ZntWRQCZQ1hQvo=", + "lastModified": 1769714357, + "narHash": "sha256-LUQMkuRmtp/LtGtePWvkN9WYHdLBh6LHd/ibNHrXQDY=", "owner": "homebrew", "repo": "homebrew-cask", - "rev": "00ec6cb3678f970ffa5c1a456cc21066a41067bf", + "rev": "3765e4627b18a843f35201881728fd5ed6ca3baa", "type": "github" }, "original": { @@ -503,11 +434,11 @@ "homebrew-core": { "flake": false, "locked": { - "lastModified": 1768322123, - "narHash": "sha256-s9EqSoeYwmshGF1+ipeklUxKtVY1B4LRhBzp12sfAkE=", + "lastModified": 1769711880, + "narHash": "sha256-EXjliTg+1G8mc70dD2BOq4zaCIGHlS3pDMlyEedY6Ew=", "owner": "homebrew", "repo": "homebrew-core", - "rev": "5f3039348c27467865ffc5304b63f6784c09cdfa", + "rev": "f752456aa895e1db16e52d729f6736689c244a7e", "type": "github" }, "original": { @@ -561,11 +492,11 @@ ] }, "locked": { - "lastModified": 1766946335, - "narHash": "sha256-MRD+Jr2bY11MzNDfenENhiK6pvN+nHygxdHoHbZ1HtE=", + "lastModified": 1769284023, + "narHash": "sha256-xG34vwYJ79rA2wVC8KFuM8r36urJTG6/csXx7LiiSYU=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "4af02a3925b454deb1c36603843da528b67ded6c", + "rev": "13c536659d46893596412d180449353a900a1d31", "type": "github" }, "original": { @@ -643,11 +574,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1768319076, - "narHash": "sha256-is65o80lB9tWMekx77O4+GCQxLeB2kiA60hejzpA+HA=", + "lastModified": 1769694617, + "narHash": "sha256-h8+Wqc4x68mN2qOLX45HsO6Z4eQOfrdtSKiSzcBrCVg=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "e0cf88809de12c39ad8a1ad1c0194967b0029ec8", + "rev": "c92fb5e85f4a5fd3a0f5ffb5892f6a61cfe1be2b", "type": "github" }, "original": { @@ -719,11 +650,11 @@ ] }, "locked": { - "lastModified": 1767723101, - "narHash": "sha256-jObY8O7OI+91hoE137APsDxm0235/Yx+HhFIip187zM=", + "lastModified": 1769285097, + "narHash": "sha256-eVD4U3Oqzz0VU9ylJ5wo76xDcYKv2CpiiRXq4Is4QdA=", "owner": "hyprwm", "repo": "hyprland-plugins", - "rev": "fef398ed5e4faf59bc43b915e46a75cfe8b16697", + "rev": "06c0749a0dac978d89b1a76ae6adc76a3c15dbfa", "type": "github" }, "original": { @@ -827,11 +758,11 @@ ] }, "locked": { - "lastModified": 1764612430, - "narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=", + "lastModified": 1767983607, + "narHash": "sha256-8C2co8NYfR4oMOUEsPROOJ9JHrv9/ktbJJ6X1WsTbXc=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "0d00dc118981531aa731150b6ea551ef037acddd", + "rev": "d4037379e6057246b408bbcf796cf3e9838af5b2", "type": "github" }, "original": { @@ -1110,11 +1041,11 @@ ] }, "locked": { - "lastModified": 1767473322, - "narHash": "sha256-RGOeG+wQHeJ6BKcsSB8r0ZU77g9mDvoQzoTKj2dFHwA=", + "lastModified": 1769202094, + "narHash": "sha256-gdJr/vWWLRW85ucatSjoBULPB2dqBJd/53CZmQ9t91Q=", "owner": "hyprwm", "repo": "hyprwire", - "rev": "d5e7d6b49fe780353c1cf9a1cf39fa8970bd9d11", + "rev": "a45ca05050d22629b3c7969a926d37870d7dd75c", "type": "github" }, "original": { @@ -1128,11 +1059,11 @@ "brew-src": "brew-src" }, "locked": { - "lastModified": 1764473698, - "narHash": "sha256-C91gPgv6udN5WuIZWNehp8qdLqlrzX6iF/YyboOj6XI=", + "lastModified": 1769437432, + "narHash": "sha256-8d7KnCpT2LweRvSzZYEGd9IM3eFX+A78opcnDM0+ndk=", "owner": "zhaofengli", "repo": "nix-homebrew", - "rev": "6a8ab60bfd66154feeaa1021fc3b32684814a62a", + "rev": "a5409abd0d5013d79775d3419bcac10eacb9d8c5", "type": "github" }, "original": { @@ -1205,11 +1136,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1765841014, - "narHash": "sha256-55V0AJ36V5Egh4kMhWtDh117eE3GOjwq5LhwxDn9eHg=", + "lastModified": 1769217863, + "narHash": "sha256-RY9kJDXD6+2Td/59LkZ0PFSereCXHdBX9wIkbYjRKCY=", "owner": "nix-community", "repo": "NixOS-WSL", - "rev": "be4af8042e7a61fa12fda58fe9a3b3babdefe17b", + "rev": "38a5250e57f583662eac3b944830e4b9e169e965", "type": "github" }, "original": { @@ -1220,11 +1151,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1767116409, - "narHash": "sha256-5vKw92l1GyTnjoLzEagJy5V5mDFck72LiQWZSOnSicw=", + "lastModified": 1769018530, + "narHash": "sha256-MJ27Cy2NtBEV5tsK+YraYr2g851f3Fl1LpNHDzDX15c=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "cad22e7d996aea55ecab064e84834289143e44a0", + "rev": "88d3861acdd3d2f0e361767018218e51810df8a1", "type": "github" }, "original": { @@ -1234,37 +1165,6 @@ "type": "github" } }, - "nixpkgs-lib": { - "locked": { - "lastModified": 1761765539, - "narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=", - "owner": "nix-community", - "repo": "nixpkgs.lib", - "rev": "719359f4562934ae99f5443f20aa06c2ffff91fc", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nixpkgs.lib", - "type": "github" - } - }, - "nixpkgs-unstable": { - "locked": { - "lastModified": 1765270179, - "narHash": "sha256-g2a4MhRKu4ymR4xwo+I+auTknXt/+j37Lnf0Mvfl1rE=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "677fbe97984e7af3175b6c121f3c39ee5c8d62c9", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_2": { "locked": { "lastModified": 1766070988, @@ -1283,11 +1183,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1767379071, - "narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=", + "lastModified": 1769461804, + "narHash": "sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "fb7944c166a3b630f177938e478f0378e64ce108", + "rev": "bfc1b8a4574108ceef22f02bafcf6611380c100d", "type": "github" }, "original": { @@ -1315,11 +1215,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1765472234, - "narHash": "sha256-9VvC20PJPsleGMewwcWYKGzDIyjckEz8uWmT0vCDYK0=", + "lastModified": 1768564909, + "narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2fbfb1d73d239d2402a8fe03963e37aab15abe8b", + "rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f", "type": "github" }, "original": { @@ -1331,11 +1231,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1768127708, - "narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", + "lastModified": 1769461804, + "narHash": "sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", + "rev": "bfc1b8a4574108ceef22f02bafcf6611380c100d", "type": "github" }, "original": { @@ -1347,11 +1247,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1768032153, - "narHash": "sha256-6kD1MdY9fsE6FgSwdnx29hdH2UcBKs3/+JJleMShuJg=", + "lastModified": 1769268028, + "narHash": "sha256-mAdJpV0e5IGZjnE4f/8uf0E4hQR7ptRP00gnZKUOdMo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3146c6aa9995e7351a398e17470e15305e6e18ff", + "rev": "ab9fbbcf4858bd6d40ba2bbec37ceb4ab6e1f562", "type": "github" }, "original": { @@ -1396,11 +1296,11 @@ ] }, "locked": { - "lastModified": 1767281941, - "narHash": "sha256-6MkqajPICgugsuZ92OMoQcgSHnD6sJHwk8AxvMcIgTE=", + "lastModified": 1769069492, + "narHash": "sha256-Efs3VUPelRduf3PpfPP2ovEB4CXT7vHf8W+xc49RL/U=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "f0927703b7b1c8d97511c4116eb9b4ec6645a0fa", + "rev": "a1ef738813b15cf8ec759bdff5761b027e3e1d23", "type": "github" }, "original": { @@ -1458,11 +1358,11 @@ "nixpkgs": "nixpkgs_7" }, "locked": { - "lastModified": 1768271704, - "narHash": "sha256-jJqlW8A3OZ5tYbXphF7U8P8g/3Cn8PPwPa4YlJ/9agg=", + "lastModified": 1769469829, + "narHash": "sha256-wFcr32ZqspCxk4+FvIxIL0AZktRs6DuF8oOsLt59YBU=", "owner": "Mic92", "repo": "sops-nix", - "rev": "691b8b6713855d0fe463993867291c158472fc6f", + "rev": "c5eebd4eb2e3372fe12a8d70a248a6ee9dd02eff", "type": "github" }, "original": { @@ -1478,7 +1378,7 @@ "base16-helix": "base16-helix", "base16-vim": "base16-vim", "firefox-gnome-theme": "firefox-gnome-theme", - "flake-parts": "flake-parts_2", + "flake-parts": "flake-parts", "gnome-shell": "gnome-shell", "nixpkgs": [ "nixpkgs" @@ -1492,11 +1392,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1768241331, - "narHash": "sha256-li0Z2Tr5qpH+wyuCMpzXSsHYRleaTukcdLTpAsGcVzY=", + "lastModified": 1769696109, + "narHash": "sha256-6G7lwaKwbYSWW+80qsKfkEVEYeoWgEkhEvboCG2w3ak=", "owner": "danth", "repo": "stylix", - "rev": "a62840a9e95801969a03b91e49c1607b5322224c", + "rev": "cb2e9c4fc23b4e73e4d77b9122d685896c042802", "type": "github" }, "original": { @@ -1684,11 +1584,11 @@ ] }, "locked": { - "lastModified": 1766000401, - "narHash": "sha256-+cqN4PJz9y0JQXfAK5J1drd0U05D5fcAGhzhfVrDlsI=", + "lastModified": 1768158989, + "narHash": "sha256-67vyT1+xClLldnumAzCTBvU0jLZ1YBcf4vANRWP3+Ak=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "42d96e75aa56a3f70cab7e7dc4a32868db28e8fd", + "rev": "e96d59dff5c0d7fddb9d113ba108f03c3ef99eca", "type": "github" }, "original": { diff --git a/homes/aarch64-darwin/darrenbangsund/default.nix b/homes/aarch64-darwin/darrenbangsund/default.nix index b174d76..8c41267 100644 --- a/homes/aarch64-darwin/darrenbangsund/default.nix +++ b/homes/aarch64-darwin/darrenbangsund/default.nix @@ -1,4 +1,4 @@ -{ lib, pkgs, ... }: +{ ... }: { # fellowship.home = { # dev.enable = false; @@ -9,7 +9,11 @@ # }; programs.zsh.envExtra = '' - neofetch + export NX_TUI=false + export NVM_DIR="$HOME/.nvm" + [ -s "$(brew --prefix nvm)/nvm.sh" ] && \. "$(brew --prefix nvm)/nvm.sh" + [ -s "$(brew --prefix nvm)/etc/bash_completion.d/nvm" ] && \. "$(brew --prefix nvm)/etc/bash_completion.d/nvm" + fastfetch ''; home = { diff --git a/homes/x86_64-linux/arrayofone/default.nix b/homes/x86_64-linux/arrayofone/default.nix index 3b19fa7..e31c489 100644 --- a/homes/x86_64-linux/arrayofone/default.nix +++ b/homes/x86_64-linux/arrayofone/default.nix @@ -39,20 +39,55 @@ in postman.enable = true; slack.enable = true; tidal.enable = true; - webcord.enable = true; + webcord.enable = false; }; }; home.dev.enable = true; }; + stylix = { + cursor = { + package = pkgs.bibata-cursors; + name = "Bibata-Modern-Ice"; + size = 32; + }; + + icons = { + enable = true; + package = pkgs.papirus-icon-theme; + light = "Papirus-Light"; + dark = "Papirus-Dark"; + }; + }; + + programs.foot.enable = true; + home = { packages = with pkgs; [ + bibata-cursors clipse fontconfig + neofetch + papirus-icon-theme pinentry-curses ]; + stylix = { + cursor = { + package = pkgs.bibata-cursors; + name = "Bibata-Modern-Ice"; + size = 32; + }; + + icons = { + enable = true; + package = pkgs.papirus-icon-theme; + light = "Papirus-Light"; + dark = "Papirus-Dark"; + }; + }; + stateVersion = "24.05"; }; } diff --git a/modules/home/core/default.nix b/modules/home/core/default.nix index e46b852..a6a44ac 100644 --- a/modules/home/core/default.nix +++ b/modules/home/core/default.nix @@ -8,9 +8,10 @@ # ./editor.nix ./env.nix ./fonts.nix + ./git.nix ./secrets.nix ./shell.nix - ./terminal.nix + ./ssh.nix ./theme.nix ./zeditor.nix ]; @@ -29,6 +30,9 @@ bat btop claude-code + claude-monitor + docker + docker-compose gcc gemini-cli gh @@ -39,14 +43,32 @@ google-cloud-sdk htop jq + k9s kitty + kubectl + kubectx + kubernetes-helm lf lsof - neofetch + fastfetch + lazycli + lazydocker + lazygit + lazyjournal + lazynpm + lazysql + lazyssh + lazyworktree + minikube neovim netcat nixd + nixfmt openssl + podman + podman-compose + podman-tui + protobuf protols ripgrep sops @@ -57,38 +79,6 @@ wireguard-tools zellij zip - - # TODO: are these needed for all systems? - probably not - # awscli2 - docker - docker-compose - emacs - k9s - # kotlin-language-server - kubectl - kubectx - kubernetes-helm - lazydocker - lazysql - minikube - nil - nixfmt - oxker - podman - podman-compose - podman-tui - protobuf - - alacritty - # foot - # ghostty - kitty - nixfmt - zip - unzip - - claude-code - claude-monitor ] ++ [ pkgs.${namespace}.sys diff --git a/modules/home/core/env.nix b/modules/home/core/env.nix index 197a873..09de286 100644 --- a/modules/home/core/env.nix +++ b/modules/home/core/env.nix @@ -9,13 +9,7 @@ # read secrets into env at runtime to prevent embedding # secrets into the build as sessionVariables does programs.zsh = { - initContent = '' - export NX_TUI=false - export NVM_DIR="$HOME/.nvm" - [ -s "$(brew --prefix nvm)/nvm.sh" ] && \. "$(brew --prefix nvm)/nvm.sh" - [ -s "$(brew --prefix nvm)/etc/bash_completion.d/nvm" ] && \. "$(brew --prefix nvm)/etc/bash_completion.d/nvm" - '' - + lib.optionalString (builtins.hasAttr "ai/anthropic/api-key" config.sops.secrets) '' + initContent = lib.optionalString (builtins.hasAttr "ai/anthropic/api-key" config.sops.secrets) '' if [ -f "${config.sops.secrets."ai/anthropic/api-key".path}" ]; then export ANTHROPIC_API_KEY=$(cat "${config.sops.secrets."ai/anthropic/api-key".path}") fi diff --git a/modules/home/core/git.nix b/modules/home/core/git.nix new file mode 100644 index 0000000..a37453f --- /dev/null +++ b/modules/home/core/git.nix @@ -0,0 +1,34 @@ +{ ... }: +{ + programs.git = { + enable = true; + includes = [ + { + condition = "gitdir:~/projects/personal/"; + contents = { + "user" = { + email = "11287980+arrayofone@users.noreply.github.com"; + name = "arrayofone"; + }; + }; + } + { + condition = "gitdir:~/projects/work/"; + contents = { + "user" = { + email = "254569348+darrenminga@users.noreply.github.com"; + name = "darrenminga"; + }; + }; + } + ]; + settings = { + "commit" = { + gpgsign = true; + }; + "tag" = { + gpgsign = true; + }; + }; + }; +} diff --git a/modules/home/core/ssh.nix b/modules/home/core/ssh.nix new file mode 100644 index 0000000..67a0992 --- /dev/null +++ b/modules/home/core/ssh.nix @@ -0,0 +1,35 @@ +{ ... }: +{ + programs.ssh = { + enable = true; + enableDefaultConfig = false; + matchBlocks = { + personal = { + host = "github.com"; + hostname = "github.com"; + user = "git"; + identitiesOnly = true; + identityFile = "~/.ssh/gh-personal"; + }; + work = { + host = "gitwork"; + hostname = "github.com"; + user = "git"; + identitiesOnly = true; + identityFile = "~/.ssh/gh-work"; + }; + "*" = { + forwardAgent = false; + addKeysToAgent = "no"; + compression = false; + serverAliveInterval = 0; + serverAliveCountMax = 3; + hashKnownHosts = false; + userKnownHostsFile = "~/.ssh/known_hosts"; + controlMaster = "no"; + controlPath = "~/.ssh/master-%r@%n:%p"; + controlPersist = "no"; + }; + }; + }; +} diff --git a/modules/home/core/terminal.nix b/modules/home/core/terminal.nix deleted file mode 100644 index 171e338..0000000 --- a/modules/home/core/terminal.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - pkgs, - ... -}: -{ - programs = { - alacritty.enable = true; - foot.enable = false; - ghostty.enable = false; - kitty.enable = true; - }; - - # home.packages = [ pkgs.foot ]; - - programs.foot = { - package = pkgs.foot; - }; -} diff --git a/modules/home/core/theme.nix b/modules/home/core/theme.nix index 4a0fffa..99024d7 100644 --- a/modules/home/core/theme.nix +++ b/modules/home/core/theme.nix @@ -2,7 +2,6 @@ inputs, lib, pkgs, - system, ... }: { @@ -10,12 +9,7 @@ home.packages = [ pkgs.font-awesome - ] - ++ lib.optionals (builtins.elem system pkgs.bibata-cursors.meta.platforms) [ pkgs.bibata-cursors ] - ++ lib.optionals (builtins.elem system pkgs.papirus-icon-theme.meta.platforms) [ - pkgs.papirus-icon-theme ]; - # ++ lib.mkIf (builtins.elem system pkgs.papirus-icon-theme.meta.platforms) [ ]; stylix = { enable = true; @@ -31,12 +25,6 @@ base16Scheme = ./theme/base16/catppuccin/macciato.yaml; - cursor = lib.mkIf (builtins.elem system pkgs.bibata-cursors.meta.platforms) { - package = pkgs.bibata-cursors; - name = "Bibata-Modern-Ice"; - size = 32; - }; - fonts = { monospace = { name = "IntoneMono Nerd Font Mono"; @@ -66,13 +54,6 @@ }; }; - iconTheme = lib.mkIf (builtins.elem system pkgs.papirus-icon-theme.meta.platforms) { - enable = true; - package = pkgs.papirus-icon-theme; - light = "Papirus-Light"; - dark = "Papirus-Dark"; - }; - # override = { # base00 = "1e1e2e"; # base - Catppuccin Mocha # base01 = "181825"; # mantle diff --git a/modules/home/core/zeditor.nix b/modules/home/core/zeditor.nix index 1ac8c31..8f81a51 100644 --- a/modules/home/core/zeditor.nix +++ b/modules/home/core/zeditor.nix @@ -9,7 +9,12 @@ enable = true; package = pkgs.zed-editor; installRemoteServer = true; - extraPackages = [ pkgs.nixd ]; + extraPackages = [ + pkgs.biome + pkgs.nixd + pkgs.package-version-server + pkgs.rust-analyzer + ]; themes = { }; userKeymaps = [ ]; @@ -50,6 +55,7 @@ "java" "kotlin" "nix" + "plantuml" "proto" "sql" "toml" @@ -433,10 +439,8 @@ allow_rewrap = "in_comments"; auto_indent = true; auto_indent_on_paste = true; - auto_install_extensions = { - html = true; - }; - auto_update_extensions = { }; + # auto_install_extensions = { }; + # auto_update_extensions = { }; autosave = "off"; autoscroll_on_clicks = false; auto_signature_help = false; @@ -550,6 +554,10 @@ }; lsp = { biome = { + binary = { + path = lib.getExe pkgs.biome; + ignore_system_version = true; + }; settings = { require_config_file = true; }; @@ -566,16 +574,26 @@ arguments = [ "--stdio" ]; }; }; - nix = { + nixd = { binary = { path = lib.getExe pkgs.nixd; }; }; + package-version-server = { + binary = { + path = lib.getExe pkgs.package-version-server; + }; + }; protobuf-language-server = { binary = { path = lib.getExe pkgs.protols; }; }; + rust-analyzer = { + binary = { + path = lib.getExe pkgs.rust-analyzer; + }; + }; }; global_lsp_settings = { button = true; diff --git a/modules/home/dev/modules/js/default.nix b/modules/home/dev/modules/js/default.nix index 5014c9d..11c6e7d 100644 --- a/modules/home/dev/modules/js/default.nix +++ b/modules/home/dev/modules/js/default.nix @@ -18,7 +18,7 @@ in packages = with pkgs; [ deno nodejs - pnpm + # pnpm typescript yarn ]; diff --git a/modules/home/gui/desktop/hyprland/default.nix b/modules/home/gui/desktop/hyprland/default.nix index 7d1b68d..0f8172d 100644 --- a/modules/home/gui/desktop/hyprland/default.nix +++ b/modules/home/gui/desktop/hyprland/default.nix @@ -403,7 +403,7 @@ in }; experimental = { - xx_color_management_v4 = false; + # xx_color_management_v4 = false; }; debug = { diff --git a/modules/nixos/hardware/nvidia/default.nix b/modules/nixos/hardware/nvidia/default.nix index 575301f..f0be169 100644 --- a/modules/nixos/hardware/nvidia/default.nix +++ b/modules/nixos/hardware/nvidia/default.nix @@ -33,7 +33,7 @@ in powerManagement.finegrained = false; open = true; nvidiaSettings = true; - package = config.boot.kernelPackages.nvidiaPackages.stable; + package = config.boot.kernelPackages.nvidiaPackages.beta; }; }; diff --git a/systems/aarch64-darwin/mingabook/default.nix b/systems/aarch64-darwin/mingabook/default.nix index e1a26e9..80fa5b3 100644 --- a/systems/aarch64-darwin/mingabook/default.nix +++ b/systems/aarch64-darwin/mingabook/default.nix @@ -16,6 +16,8 @@ stateVersion = 6; }; + home-manager.backupFileExtension = "hm-backup"; + environment.systemPackages = with pkgs; [ mkcert nodejs_20 @@ -33,7 +35,7 @@ taps = [ ]; brews = [ "git-lfs" - "nvm" + # "nvm" "tmux" ]; casks = [ diff --git a/systems/aarch64-darwin/mingabook/homebrew.nix b/systems/aarch64-darwin/mingabook/homebrew.nix index 0c5260c..a7edca6 100644 --- a/systems/aarch64-darwin/mingabook/homebrew.nix +++ b/systems/aarch64-darwin/mingabook/homebrew.nix @@ -3,7 +3,7 @@ homebrew = { enable = true; global = { - autoUpdate = false; + autoUpdate = true; }; onActivation = { cleanup = "zap"; diff --git a/systems/x86_64-linux/baradur/default.nix b/systems/x86_64-linux/baradur/default.nix index 27db372..349eb37 100644 --- a/systems/x86_64-linux/baradur/default.nix +++ b/systems/x86_64-linux/baradur/default.nix @@ -22,10 +22,12 @@ }; }; + home-manager.backupFileExtension = "hm-backup"; + networking.hostName = "baradur"; boot = { - kernelPackages = pkgs.linuxPackages_6_6; + kernelPackages = pkgs.linuxPackages_latest; loader = { systemd-boot.enable = false; @@ -171,7 +173,7 @@ }; ollama = { - enable = true; + enable = false; loadModels = [ # general models @@ -193,7 +195,7 @@ }; open-webui = { - enable = true; + enable = false; environment = { "WEBUI_AUTH" = "False"; }; @@ -286,6 +288,7 @@ networking.firewall = { enable = true; allowedTCPPorts = [ + 54323 11434 8082 5432