Compare commits

...

57 Commits

Author SHA1 Message Date
Ryan Yin 6a23332ce1 chore: niri - hotkey-overlay skip-at-startup 2025-12-19 10:09:18 +08:00
Ryan Yin 12decc32b6 fix: niri keybinding for wlogout 2025-12-19 10:06:04 +08:00
Ryan Yin e7e9a43dbb flake.lock: Update
Flake lock file updates:

• Updated input 'mysecrets':
    'git+ssh://git@github.com/ryan4yin/nix-secrets.git?ref=refs/heads/main&rev=76c00cee0b7749518eef167a842a6c7a6d245a4e&shallow=1' (2025-10-21)
  → 'git+ssh://git@github.com/ryan4yin/nix-secrets.git?ref=refs/heads/main&rev=cfe34c222cf7ee4290438c97e6cc734aa7792346&shallow=1' (2025-12-18)
2025-12-19 09:57:01 +08:00
Ryan Yin 29760ddb27 refactor: update niri, write config in kdl, remove niri-flake (#237)
• Updated input 'nixpkgs':
  → 'github:NixOS/nixpkgs/0254eab410b90ef2420c1059f908ae777e3b02f9?narHash=sha256-/US2Ei9JHXHVBAxV4FX49Q7H5s4UNBrIiOA6Xjzgq44%3D' (2025-12-06)

• Updated input 'home-manager':
    'github:nix-community/home-manager/f4cb25928fafa9ae68660fe71f730fc820a59028?narHash=sha256-5xOuutXM7UPTUcn3uDAD8UlPQsXmqPrX81cXoDOAGcA%3D' (2025-11-26)
  → 'github:nix-community/home-manager/89c9508bbe9b40d36b3dc206c2483ef176f15173?narHash=sha256-rB45jv4uwC90vM9UZ70plfvY/2Kdygs%2BzlQ07dGQFk4%3D' (2025-12-17)

• Updated input 'nixpkgs-master':
    'github:nixos/nixpkgs/6812bcfd614abedbdb3f68d7b6554eda6ca3e014?narHash=sha256-sNF/PZcuzYBHKRBkerEiPf5mkZM15A3fWD%2BlqpwKc60%3D' (2025-12-15)
  → 'github:nixos/nixpkgs/e50ab9bb181f9fb3ce00e7a6007c70ddaa007203?narHash=sha256-acPMRCAPgPykzkwATwD1EfF7xgmbraAvIJyCeR6bKxc%3D' (2025-12-18)

Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2025-12-18 19:56:46 -06:00
Ryan Yin 307f5a490c feat: fcitx5 - add new group for internaional chars input
Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2025-12-17 19:18:52 +08:00
Ryan Yin 2e53101fb7 feat: fcitx5 - add japanese ime 2025-12-17 15:50:35 +08:00
Ryan Yin b6c1456f46 chore: update nixpkgs-master 2025-12-15 16:48:33 +08:00
Ryan Yin cdf4ab580f flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs-master':
    'github:nixos/nixpkgs/5c46f3bd98147c8d82366df95bbef2cab3a967ea?narHash=sha256-nXv6xb7cq%2BXpjBYIjWEGTLCqQetxJu6zvVlrqHMsCOA%3D' (2025-11-26)
  → 'github:nixos/nixpkgs/6812bcfd614abedbdb3f68d7b6554eda6ca3e014?narHash=sha256-sNF/PZcuzYBHKRBkerEiPf5mkZM15A3fWD%2BlqpwKc60%3D' (2025-12-15)
2025-12-15 16:42:05 +08:00
Ryan Yin fdcc3be59d chore: update claude models 2025-12-03 14:09:06 +08:00
Ryan Yin 3c2ad0bec2 feat(darwin): set terminal font size to 15 2025-12-01 11:13:42 +08:00
Ryan Yin 81dbc5b8de feat(darwin): adjust terminal font size 2025-12-01 10:57:39 +08:00
Ryan Yin 618f26017c feat(darwin): aerosapce - adjust windows 2025-12-01 10:14:53 +08:00
Ryan Yin 4163d09af8 feat: optimizing swap on zram 2025-11-28 19:21:36 +08:00
Ryan Yin 13031e30c2 chore: upgrade code-cursor, avoid compile zed-editor from source 2025-11-27 11:08:10 +08:00
Ryan Yin 3d2a2d50af fix: foot - do not resize the window on font resizing 2025-11-27 11:06:06 +08:00
Ryan Yin 3bf1b986cf feat: upgrade nixpkgs stable to 25.11, update nixos-apple-silicon, gh… (#236)
* feat: upgrade nixpkgs stable to 25.11, update nixos-apple-silicon, ghostty, anyrun, etc
* fix: asahi-nixos - revert mesa to 25.2.6
* fix: disable gitui - it's broken on aarch64-darwin currently

---------

Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2025-11-26 20:54:44 -06:00
Ryan Yin 7cf0e96efa feat: helix with steel, preserve steel's package 2025-11-23 16:16:02 +08:00
Ryan Yin 87a1d56247 feat: helix - add steel as the plugin system
fix: evaluation warning - 'system' has been renamed to/replaced by 'stdenv.hostPlatform.system'

Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2025-11-23 13:40:26 +08:00
Ryan Yin def33a486b fix: vscode - password-store (#235)
* feat: vscode + code-cursor, fix password-store, update

Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2025-11-16 07:47:47 -06:00
Ryan Yin 62bac83db4 fix: README - badge 2025-11-12 07:23:28 -06:00
Ryan Yin e0d0ff9203 flake.lock: Update (#233)
* flake.lock: Update

Flake lock file updates:

• Updated input 'aagl':
    'github:ezKEa/aagl-gtk-on-nix/944f9903859ad16db762fbe573fb6f05f7367e16?narHash=sha256-SeDqOZQoARl/xxEMdej09IScCf77SEQfRAjED7lBgMY%3D' (2025-09-22)
  → 'github:ezKEa/aagl-gtk-on-nix/1172be1377bc65581004f4d5927b58c5c7d96639?narHash=sha256-OAXK4p7WIYUcp8xx9m0RZUpV6XUDEhkoM4efI8dzPiU%3D' (2025-11-03)
• Updated input 'aagl/flake-compat':
    'github:edolstra/flake-compat/9100a0f413b0c601e0533d1d94ffd501ce2e7885?narHash=sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX%2BfjA8Xf8PUmqCY%3D' (2025-05-12)
  → 'github:edolstra/flake-compat/f387cd2afec9419c8ee37694406ca490c3f34ee5?narHash=sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4%3D' (2025-10-27)
• Updated input 'aagl/rust-overlay':
    'github:oxalica/rust-overlay/d2bac276ac7e669a1f09c48614538a37e3eb6d0f?narHash=sha256-kx2uELmVnAbiekj/YFfWR26OXqXedImkhe2ocnbumTA%3D' (2025-09-22)
  → 'github:oxalica/rust-overlay/59c45eb69d9222a4362673141e00ff77842cd219?narHash=sha256-myRIDh%2BPxaREz%2Bz9LzbqBJF%2BSnTFJwkthKDX9zMyddY%3D' (2025-10-30)
• Updated input 'catppuccin':
    'github:catppuccin/nix/2e0aacdd6abbecd1b1c0511a2fcd1460a6bc6645?narHash=sha256-yqh6EEhlpVWRoKl85o1s%2BQZ72UHWTvornnc3C0Ls484%3D' (2025-09-19)
  → 'github:catppuccin/nix/728cb0a667ce37bb0c68557dba819c7fb54ff1c8?narHash=sha256-KGoSj8qMOOPaNE48RTtuNBbqOvKLTeklnRHWWvE/TXo%3D' (2025-11-07)
• Updated input 'ghostty':
    'github:ghostty-org/ghostty/f97518cc100599186846282457be520fda11f467?narHash=sha256-y0B40QQ//4fpTAUfhZjoDEiUejhb2hXl5LcpNenRpYM%3D' (2025-09-23)
  → 'github:ghostty-org/ghostty/bed219c132f1940a23eba50cdd7a40e4c2718149?narHash=sha256-sic0p21KmUz/u9KsdVTIfZRDDRg9brTWs2IDb4F%2By48%3D' (2025-11-10)
• Updated input 'ghostty/nixpkgs':
    'https://releases.nixos.org/nixos/25.05/nixos-25.05.802491.7c43f080a7f2/nixexprs.tar.xz?narHash=sha256-zRDR%2BEbbeObu4V2X5QCd2Bk5eltfDlCr5yvhBwUT6pY%3D' (2025-05-25)
  → 'https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre877938.82c2e0d6dde5/nixexprs.tar.xz?narHash=sha256-sV6pJNzFkiPc6j9Bi9JuHBnWdVhtKB/mHgVmMPvDFlk%3D' (1980-01-01)
• Updated input 'ghostty/zig':
    'github:mitchellh/zig-overlay/aafb1b093fb838f7a02613b719e85ec912914221?narHash=sha256-3i0IL3s18hdDlbsf0/E%2B5kyPRkZwGPbSFngq5eToiAA%3D' (2025-05-26)
  → 'github:mitchellh/zig-overlay/365085b6652259753b598d43b723858184980bbe?narHash=sha256-/zj5GYO5PKhBWGzbHbqT%2BehY8EghuABdQ2WGfCwZpCQ%3D' (2025-10-14)
• Updated input 'home-manager':
    'github:nix-community/home-manager/676c0159ed51d10489a249ecdc61e115c2a90d03?narHash=sha256-XhSTUBFOtuumxAUVxTVD5k7nE/FgK11YUxAgzNQcmLU%3D' (2025-09-24)
  → 'github:nix-community/home-manager/37a3d97f2873e0f68711117c34d04b7c7ead8f4e?narHash=sha256-t2U/GLLXHa2%2BkJkwnFNRVc2fEJ/lUfyZXBE5iKzJdcs%3D' (2025-11-10)
• Updated input 'niri':
    'github:sodiboo/niri-flake/6e26dd2cece5430571b45ffe3d97213431b3e86f?narHash=sha256-/f1k6oL2UqpDxe0MasJyLpXJj80Az/TxBbEf4hinmgI%3D' (2025-09-23)
  → 'github:sodiboo/niri-flake/44c5a2c19b7b22d1b2375ef95f656291a0af3a1b?narHash=sha256-eu8Gkb/y/5pRS3Ml/sg3oeUtFFzlJMpDrJRgPgOXz38%3D' (2025-11-10)
• Updated input 'niri/niri-unstable':
    'github:YaLTeR/niri/3850739e445b95a73c2466a718ccaf3a9a406c06?narHash=sha256-EQecFZ5VZtNjN/yzDA/RV13fK3EdLPblcf9p5wVNACo%3D' (2025-09-23)
  → 'github:YaLTeR/niri/978c4e6c8afc0199e2cbd9037bdc7c41fbbab2a3?narHash=sha256-LCddK36/6u73jed1yuqbu6JKWIITsc42qoM883DgwJg%3D' (2025-11-10)
• Updated input 'niri/nixpkgs':
    'github:NixOS/nixpkgs/554be6495561ff07b6c724047bdd7e0716aa7b46?narHash=sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc%3D' (2025-09-21)
  → 'github:NixOS/nixpkgs/b6a8526db03f735b89dd5ff348f53f752e7ddc8e?narHash=sha256-rXXuz51Bq7DHBlfIjN7jO8Bu3du5TV%2B3DSADBX7/9YQ%3D' (2025-11-08)
• Updated input 'niri/nixpkgs-stable':
    'github:NixOS/nixpkgs/d1d883129b193f0b495d75c148c2c3a7d95789a0?narHash=sha256-zMTCFGe8aVGTEr2RqUi/QzC1nOIQ0N1HRsbqB4f646k%3D' (2025-09-23)
  → 'github:NixOS/nixpkgs/c2448301fb856e351aab33e64c33a3fc8bcf637d?narHash=sha256-HiRDeUOD1VLklHeOmaKDzf%2B8Hb7vSWPVFcWwaTrpm%2BU%3D' (2025-11-10)
• Updated input 'niri/xwayland-satellite-unstable':
    'github:Supreeeme/xwayland-satellite/03368548ba745e17a85bd631613a59cb2d8469a4?narHash=sha256-sB2GAOjhjoWnjU6A/uHNJiY6O3UeztV5pJAN2g1FkXU%3D' (2025-09-22)
  → 'github:Supreeeme/xwayland-satellite/6338574bc5c036487486acde264f38f39ea15fad?narHash=sha256-Z1TKiux8K09a93w4PFDFsj8HFugXNy3iCC3Z8MpR5Rk%3D' (2025-11-10)
• Updated input 'nix-darwin':
    'github:lnl7/nix-darwin/25381509d5c91bbf3c30e23abc6d8476d2143cd1?narHash=sha256-yGA6MV0E4JSEXqLTb4ZZkmdJZcoQ8HUzihRRX12Bvpg%3D' (2025-09-21)
  → 'github:lnl7/nix-darwin/5125a3cd414dc98bbe2c528227aa6b62ee61f733?narHash=sha256-/QLk1bzmbcqJt9sU43%2By/3tHtXhAy0l8Ck0MoO2%2BevQ%3D' (2025-11-08)
• Updated input 'nix-gaming':
    'github:fufexan/nix-gaming/6418c314274a8ce27078402ab1fbac7c06da7a36?narHash=sha256-Ff5IFCEABf3CStKvf8MqJe7jwrHk2J8swdYTrwOj9dk%3D' (2025-09-24)
  → 'github:fufexan/nix-gaming/eefca17cb40462878ee1c46ac6910b2ec21adaa8?narHash=sha256-M4rbwlO4peCHRvA%2BWNYCmg8je4YBF7kSY9tG%2Bp1kEKo%3D' (2025-11-11)
• Updated input 'nix-gaming/flake-parts':
    'github:hercules-ci/flake-parts/4524271976b625a4a605beefd893f270620fd751?narHash=sha256-%2BuWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw%3D' (2025-09-01)
  → 'github:hercules-ci/flake-parts/26d05891e14c88eb4a5d5bee659c0db5afb609d8?narHash=sha256-xxdepIcb39UJ94%2BYydGP221rjnpkDZUlykKuF54PsqI%3D' (2025-11-06)
• Updated input 'nix-gaming/flake-parts/nixpkgs-lib':
    'github:nix-community/nixpkgs.lib/a73b9c743612e4244d865a2fdee11865283c04e6?narHash=sha256-x2rJ%2BOvzq0sCMpgfgGaaqgBSwY%2BLST%2BWbZ6TytnT9Rk%3D' (2025-08-10)
  → 'github:nix-community/nixpkgs.lib/719359f4562934ae99f5443f20aa06c2ffff91fc?narHash=sha256-b0yj6kfvO8ApcSE%2BQmA6mUfu8IYG6/uU28OFn4PaC8M%3D' (2025-10-29)
• Updated input 'nixpak':
    'github:nixpak/nixpak/17df00be4383dbf88c42ed1fa519cc6dd71df042?narHash=sha256-eGksZmv1ie834yfgJW0z85eZZo10A/JE%2B6dhHNWQajQ%3D' (2025-09-18)
  → 'github:nixpak/nixpak/e4bcce21a735a07c409b696b31c17f6640ca0aa2?narHash=sha256-riBOo30D8DhqQobcIYAC6sDl9PHBUq9ukjS4NjnjEM4%3D' (2025-11-06)
• Updated input 'nixpak/flake-parts':
    'github:hercules-ci/flake-parts/4524271976b625a4a605beefd893f270620fd751?narHash=sha256-%2BuWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw%3D' (2025-09-01)
  → 'github:hercules-ci/flake-parts/0010412d62a25d959151790968765a70c436598b?narHash=sha256-z5PlZ47j50VNF3R%2BIMS9LmzI5fYRGY/Z5O5tol1c9I4%3D' (2025-11-01)
• Updated input 'nixpak/hercules-ci-effects':
    'github:hercules-ci/hercules-ci-effects/1a3667d33e247ad35ca250698d63f49a5453d824?narHash=sha256-ENUhCRWgSX4ni751HieNuQoq06dJvApV/Nm89kh%2B/A0%3D' (2025-09-16)
  → 'github:hercules-ci/hercules-ci-effects/7db2b867219a26781437d840ce457b75b7645154?narHash=sha256-pLE7U5gOtlA/2wbKCsVRYf5DqMQ5TWBCrCfZGytDDeo%3D' (2025-10-23)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/554be6495561ff07b6c724047bdd7e0716aa7b46?narHash=sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc%3D' (2025-09-21)
  → 'github:nixos/nixpkgs/b6a8526db03f735b89dd5ff348f53f752e7ddc8e?narHash=sha256-rXXuz51Bq7DHBlfIjN7jO8Bu3du5TV%2B3DSADBX7/9YQ%3D' (2025-11-08)
• Updated input 'nixpkgs-darwin':
    'github:nixos/nixpkgs/a1f79a1770d05af18111fbbe2a3ab2c42c0f6cd0?narHash=sha256-5rdAi7CTvM/kSs6fHe1bREIva5W3TbImsto%2BdxG4mBo%3D' (2025-09-21)
  → 'github:nixos/nixpkgs/e1ebeec86b771e9d387dd02d82ffdc77ac753abc?narHash=sha256-g/da4FzvckvbiZT075Sb1/YDNDr%2BtGQgh4N8i5ceYMg%3D' (2025-11-07)
• Updated input 'nixpkgs-master':
    'github:nixos/nixpkgs/2a8c7895537748fb6d8f0a14c08a482ffe549441?narHash=sha256-MFd2bpd3V/Nr2UhFE0uhF/21JNi5GrbCXqwCFCt4Mlg%3D' (2025-11-01)
  → 'github:nixos/nixpkgs/31fa703ba440e16d86d31598dc0601b117769b91?narHash=sha256-QiSTsHcXiu2O84iPhedQde/62TlUWwj%2BjqoYNpE%2BQ28%3D' (2025-11-11)
• Updated input 'nixpkgs-stable':
    'github:nixos/nixpkgs/d1d883129b193f0b495d75c148c2c3a7d95789a0?narHash=sha256-zMTCFGe8aVGTEr2RqUi/QzC1nOIQ0N1HRsbqB4f646k%3D' (2025-09-23)
  → 'github:nixos/nixpkgs/c2448301fb856e351aab33e64c33a3fc8bcf637d?narHash=sha256-HiRDeUOD1VLklHeOmaKDzf%2B8Hb7vSWPVFcWwaTrpm%2BU%3D' (2025-11-10)
• Updated input 'nu_scripts':
    'github:nushell/nu_scripts/0b97c5e1444b13db7c263bee646dea1e1ffe4ddb?narHash=sha256-tKMLaSNniylbo9f0wdUzUZm059RPqyFQlxMtiTPIkWQ%3D' (2025-10-15)
  → 'github:nushell/nu_scripts/449dd3d06598714c2ba0ee3fa3556e24d034c624?narHash=sha256-4ibgz7y1fsBn2aDuptqpdLd4Wdfx2sKGs7wVRJxCWW0%3D' (2025-11-02)
• Updated input 'pre-commit-hooks':
    'github:cachix/git-hooks.nix/54df955a695a84cd47d4a43e08e1feaf90b1fd9b?narHash=sha256-ytw7ROXaWZ7OfwHrQ9xvjpUWeGVm86pwnEd1QhzawIo%3D' (2025-09-17)
  → 'github:cachix/git-hooks.nix/8e7576e79b88c16d7ee3bbd112c8d90070832885?narHash=sha256-j%2BrNQ119ffYUkYt2YYS6rnd6Jh/crMZmbqpkGLXaEt0%3D' (2025-11-06)

* fix: adb and fastboot's udev rules are now integrated within systemd

* fix: programs.git - renamed options

* fix: package rename

* fix: comment out joplin-desktop - Electron version 36.9.5 is EOL

* fix: rust-overlay - aagl & lanzaboote

* fix: nu_scripts
2025-11-10 22:45:53 -06:00
Ryan Yin 1385a34f1a fix: nu_scripts 2025-11-11 12:45:04 +08:00
Ryan Yin 744fbf9ce5 fix: rust-overlay - aagl & lanzaboote 2025-11-11 11:59:40 +08:00
Ryan Yin a23073bfee fix: comment out joplin-desktop - Electron version 36.9.5 is EOL 2025-11-11 11:09:49 +08:00
Ryan Yin 60d1909055 fix: package rename 2025-11-11 11:06:20 +08:00
Ryan Yin cd4389a40f fix: programs.git - renamed options 2025-11-11 10:59:04 +08:00
Ryan Yin d0035905e1 fix: adb and fastboot's udev rules are now integrated within systemd 2025-11-11 10:58:30 +08:00
Ryan Yin fdf66fbae0 flake.lock: Update
Flake lock file updates:

• Updated input 'aagl':
    'github:ezKEa/aagl-gtk-on-nix/944f9903859ad16db762fbe573fb6f05f7367e16?narHash=sha256-SeDqOZQoARl/xxEMdej09IScCf77SEQfRAjED7lBgMY%3D' (2025-09-22)
  → 'github:ezKEa/aagl-gtk-on-nix/1172be1377bc65581004f4d5927b58c5c7d96639?narHash=sha256-OAXK4p7WIYUcp8xx9m0RZUpV6XUDEhkoM4efI8dzPiU%3D' (2025-11-03)
• Updated input 'aagl/flake-compat':
    'github:edolstra/flake-compat/9100a0f413b0c601e0533d1d94ffd501ce2e7885?narHash=sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX%2BfjA8Xf8PUmqCY%3D' (2025-05-12)
  → 'github:edolstra/flake-compat/f387cd2afec9419c8ee37694406ca490c3f34ee5?narHash=sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4%3D' (2025-10-27)
• Updated input 'aagl/rust-overlay':
    'github:oxalica/rust-overlay/d2bac276ac7e669a1f09c48614538a37e3eb6d0f?narHash=sha256-kx2uELmVnAbiekj/YFfWR26OXqXedImkhe2ocnbumTA%3D' (2025-09-22)
  → 'github:oxalica/rust-overlay/59c45eb69d9222a4362673141e00ff77842cd219?narHash=sha256-myRIDh%2BPxaREz%2Bz9LzbqBJF%2BSnTFJwkthKDX9zMyddY%3D' (2025-10-30)
• Updated input 'catppuccin':
    'github:catppuccin/nix/2e0aacdd6abbecd1b1c0511a2fcd1460a6bc6645?narHash=sha256-yqh6EEhlpVWRoKl85o1s%2BQZ72UHWTvornnc3C0Ls484%3D' (2025-09-19)
  → 'github:catppuccin/nix/728cb0a667ce37bb0c68557dba819c7fb54ff1c8?narHash=sha256-KGoSj8qMOOPaNE48RTtuNBbqOvKLTeklnRHWWvE/TXo%3D' (2025-11-07)
• Updated input 'ghostty':
    'github:ghostty-org/ghostty/f97518cc100599186846282457be520fda11f467?narHash=sha256-y0B40QQ//4fpTAUfhZjoDEiUejhb2hXl5LcpNenRpYM%3D' (2025-09-23)
  → 'github:ghostty-org/ghostty/bed219c132f1940a23eba50cdd7a40e4c2718149?narHash=sha256-sic0p21KmUz/u9KsdVTIfZRDDRg9brTWs2IDb4F%2By48%3D' (2025-11-10)
• Updated input 'ghostty/nixpkgs':
    'https://releases.nixos.org/nixos/25.05/nixos-25.05.802491.7c43f080a7f2/nixexprs.tar.xz?narHash=sha256-zRDR%2BEbbeObu4V2X5QCd2Bk5eltfDlCr5yvhBwUT6pY%3D' (2025-05-25)
  → 'https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre877938.82c2e0d6dde5/nixexprs.tar.xz?narHash=sha256-sV6pJNzFkiPc6j9Bi9JuHBnWdVhtKB/mHgVmMPvDFlk%3D' (1980-01-01)
• Updated input 'ghostty/zig':
    'github:mitchellh/zig-overlay/aafb1b093fb838f7a02613b719e85ec912914221?narHash=sha256-3i0IL3s18hdDlbsf0/E%2B5kyPRkZwGPbSFngq5eToiAA%3D' (2025-05-26)
  → 'github:mitchellh/zig-overlay/365085b6652259753b598d43b723858184980bbe?narHash=sha256-/zj5GYO5PKhBWGzbHbqT%2BehY8EghuABdQ2WGfCwZpCQ%3D' (2025-10-14)
• Updated input 'home-manager':
    'github:nix-community/home-manager/676c0159ed51d10489a249ecdc61e115c2a90d03?narHash=sha256-XhSTUBFOtuumxAUVxTVD5k7nE/FgK11YUxAgzNQcmLU%3D' (2025-09-24)
  → 'github:nix-community/home-manager/37a3d97f2873e0f68711117c34d04b7c7ead8f4e?narHash=sha256-t2U/GLLXHa2%2BkJkwnFNRVc2fEJ/lUfyZXBE5iKzJdcs%3D' (2025-11-10)
• Updated input 'niri':
    'github:sodiboo/niri-flake/6e26dd2cece5430571b45ffe3d97213431b3e86f?narHash=sha256-/f1k6oL2UqpDxe0MasJyLpXJj80Az/TxBbEf4hinmgI%3D' (2025-09-23)
  → 'github:sodiboo/niri-flake/44c5a2c19b7b22d1b2375ef95f656291a0af3a1b?narHash=sha256-eu8Gkb/y/5pRS3Ml/sg3oeUtFFzlJMpDrJRgPgOXz38%3D' (2025-11-10)
• Updated input 'niri/niri-unstable':
    'github:YaLTeR/niri/3850739e445b95a73c2466a718ccaf3a9a406c06?narHash=sha256-EQecFZ5VZtNjN/yzDA/RV13fK3EdLPblcf9p5wVNACo%3D' (2025-09-23)
  → 'github:YaLTeR/niri/978c4e6c8afc0199e2cbd9037bdc7c41fbbab2a3?narHash=sha256-LCddK36/6u73jed1yuqbu6JKWIITsc42qoM883DgwJg%3D' (2025-11-10)
• Updated input 'niri/nixpkgs':
    'github:NixOS/nixpkgs/554be6495561ff07b6c724047bdd7e0716aa7b46?narHash=sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc%3D' (2025-09-21)
  → 'github:NixOS/nixpkgs/b6a8526db03f735b89dd5ff348f53f752e7ddc8e?narHash=sha256-rXXuz51Bq7DHBlfIjN7jO8Bu3du5TV%2B3DSADBX7/9YQ%3D' (2025-11-08)
• Updated input 'niri/nixpkgs-stable':
    'github:NixOS/nixpkgs/d1d883129b193f0b495d75c148c2c3a7d95789a0?narHash=sha256-zMTCFGe8aVGTEr2RqUi/QzC1nOIQ0N1HRsbqB4f646k%3D' (2025-09-23)
  → 'github:NixOS/nixpkgs/c2448301fb856e351aab33e64c33a3fc8bcf637d?narHash=sha256-HiRDeUOD1VLklHeOmaKDzf%2B8Hb7vSWPVFcWwaTrpm%2BU%3D' (2025-11-10)
• Updated input 'niri/xwayland-satellite-unstable':
    'github:Supreeeme/xwayland-satellite/03368548ba745e17a85bd631613a59cb2d8469a4?narHash=sha256-sB2GAOjhjoWnjU6A/uHNJiY6O3UeztV5pJAN2g1FkXU%3D' (2025-09-22)
  → 'github:Supreeeme/xwayland-satellite/6338574bc5c036487486acde264f38f39ea15fad?narHash=sha256-Z1TKiux8K09a93w4PFDFsj8HFugXNy3iCC3Z8MpR5Rk%3D' (2025-11-10)
• Updated input 'nix-darwin':
    'github:lnl7/nix-darwin/25381509d5c91bbf3c30e23abc6d8476d2143cd1?narHash=sha256-yGA6MV0E4JSEXqLTb4ZZkmdJZcoQ8HUzihRRX12Bvpg%3D' (2025-09-21)
  → 'github:lnl7/nix-darwin/5125a3cd414dc98bbe2c528227aa6b62ee61f733?narHash=sha256-/QLk1bzmbcqJt9sU43%2By/3tHtXhAy0l8Ck0MoO2%2BevQ%3D' (2025-11-08)
• Updated input 'nix-gaming':
    'github:fufexan/nix-gaming/6418c314274a8ce27078402ab1fbac7c06da7a36?narHash=sha256-Ff5IFCEABf3CStKvf8MqJe7jwrHk2J8swdYTrwOj9dk%3D' (2025-09-24)
  → 'github:fufexan/nix-gaming/eefca17cb40462878ee1c46ac6910b2ec21adaa8?narHash=sha256-M4rbwlO4peCHRvA%2BWNYCmg8je4YBF7kSY9tG%2Bp1kEKo%3D' (2025-11-11)
• Updated input 'nix-gaming/flake-parts':
    'github:hercules-ci/flake-parts/4524271976b625a4a605beefd893f270620fd751?narHash=sha256-%2BuWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw%3D' (2025-09-01)
  → 'github:hercules-ci/flake-parts/26d05891e14c88eb4a5d5bee659c0db5afb609d8?narHash=sha256-xxdepIcb39UJ94%2BYydGP221rjnpkDZUlykKuF54PsqI%3D' (2025-11-06)
• Updated input 'nix-gaming/flake-parts/nixpkgs-lib':
    'github:nix-community/nixpkgs.lib/a73b9c743612e4244d865a2fdee11865283c04e6?narHash=sha256-x2rJ%2BOvzq0sCMpgfgGaaqgBSwY%2BLST%2BWbZ6TytnT9Rk%3D' (2025-08-10)
  → 'github:nix-community/nixpkgs.lib/719359f4562934ae99f5443f20aa06c2ffff91fc?narHash=sha256-b0yj6kfvO8ApcSE%2BQmA6mUfu8IYG6/uU28OFn4PaC8M%3D' (2025-10-29)
• Updated input 'nixpak':
    'github:nixpak/nixpak/17df00be4383dbf88c42ed1fa519cc6dd71df042?narHash=sha256-eGksZmv1ie834yfgJW0z85eZZo10A/JE%2B6dhHNWQajQ%3D' (2025-09-18)
  → 'github:nixpak/nixpak/e4bcce21a735a07c409b696b31c17f6640ca0aa2?narHash=sha256-riBOo30D8DhqQobcIYAC6sDl9PHBUq9ukjS4NjnjEM4%3D' (2025-11-06)
• Updated input 'nixpak/flake-parts':
    'github:hercules-ci/flake-parts/4524271976b625a4a605beefd893f270620fd751?narHash=sha256-%2BuWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw%3D' (2025-09-01)
  → 'github:hercules-ci/flake-parts/0010412d62a25d959151790968765a70c436598b?narHash=sha256-z5PlZ47j50VNF3R%2BIMS9LmzI5fYRGY/Z5O5tol1c9I4%3D' (2025-11-01)
• Updated input 'nixpak/hercules-ci-effects':
    'github:hercules-ci/hercules-ci-effects/1a3667d33e247ad35ca250698d63f49a5453d824?narHash=sha256-ENUhCRWgSX4ni751HieNuQoq06dJvApV/Nm89kh%2B/A0%3D' (2025-09-16)
  → 'github:hercules-ci/hercules-ci-effects/7db2b867219a26781437d840ce457b75b7645154?narHash=sha256-pLE7U5gOtlA/2wbKCsVRYf5DqMQ5TWBCrCfZGytDDeo%3D' (2025-10-23)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/554be6495561ff07b6c724047bdd7e0716aa7b46?narHash=sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc%3D' (2025-09-21)
  → 'github:nixos/nixpkgs/b6a8526db03f735b89dd5ff348f53f752e7ddc8e?narHash=sha256-rXXuz51Bq7DHBlfIjN7jO8Bu3du5TV%2B3DSADBX7/9YQ%3D' (2025-11-08)
• Updated input 'nixpkgs-darwin':
    'github:nixos/nixpkgs/a1f79a1770d05af18111fbbe2a3ab2c42c0f6cd0?narHash=sha256-5rdAi7CTvM/kSs6fHe1bREIva5W3TbImsto%2BdxG4mBo%3D' (2025-09-21)
  → 'github:nixos/nixpkgs/e1ebeec86b771e9d387dd02d82ffdc77ac753abc?narHash=sha256-g/da4FzvckvbiZT075Sb1/YDNDr%2BtGQgh4N8i5ceYMg%3D' (2025-11-07)
• Updated input 'nixpkgs-master':
    'github:nixos/nixpkgs/2a8c7895537748fb6d8f0a14c08a482ffe549441?narHash=sha256-MFd2bpd3V/Nr2UhFE0uhF/21JNi5GrbCXqwCFCt4Mlg%3D' (2025-11-01)
  → 'github:nixos/nixpkgs/31fa703ba440e16d86d31598dc0601b117769b91?narHash=sha256-QiSTsHcXiu2O84iPhedQde/62TlUWwj%2BjqoYNpE%2BQ28%3D' (2025-11-11)
• Updated input 'nixpkgs-stable':
    'github:nixos/nixpkgs/d1d883129b193f0b495d75c148c2c3a7d95789a0?narHash=sha256-zMTCFGe8aVGTEr2RqUi/QzC1nOIQ0N1HRsbqB4f646k%3D' (2025-09-23)
  → 'github:nixos/nixpkgs/c2448301fb856e351aab33e64c33a3fc8bcf637d?narHash=sha256-HiRDeUOD1VLklHeOmaKDzf%2B8Hb7vSWPVFcWwaTrpm%2BU%3D' (2025-11-10)
• Updated input 'nu_scripts':
    'github:nushell/nu_scripts/0b97c5e1444b13db7c263bee646dea1e1ffe4ddb?narHash=sha256-tKMLaSNniylbo9f0wdUzUZm059RPqyFQlxMtiTPIkWQ%3D' (2025-10-15)
  → 'github:nushell/nu_scripts/449dd3d06598714c2ba0ee3fa3556e24d034c624?narHash=sha256-4ibgz7y1fsBn2aDuptqpdLd4Wdfx2sKGs7wVRJxCWW0%3D' (2025-11-02)
• Updated input 'pre-commit-hooks':
    'github:cachix/git-hooks.nix/54df955a695a84cd47d4a43e08e1feaf90b1fd9b?narHash=sha256-ytw7ROXaWZ7OfwHrQ9xvjpUWeGVm86pwnEd1QhzawIo%3D' (2025-09-17)
  → 'github:cachix/git-hooks.nix/8e7576e79b88c16d7ee3bbd112c8d90070832885?narHash=sha256-j%2BrNQ119ffYUkYt2YYS6rnd6Jh/crMZmbqpkGLXaEt0%3D' (2025-11-06)
2025-11-11 10:47:15 +08:00
Ryan Yin 125bce3bc2 fix: cuda12.8-cuda_cudart-12.8.90 is marked as broken 2025-11-02 16:21:24 +08:00
Ryan Yin 6ae7fee541 feat: gaming - add bbe 2025-11-02 16:13:04 +08:00
Ryan Yin 8d1c70cc72 docs: gaming 2025-11-02 16:13:04 +08:00
Ryan Yin de05214ec5 chore: nixpaks - update dbus policies
Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2025-11-01 21:26:01 +08:00
Ryan Yin 34fdd92351 feat: comment out nixpkgs-unstable, we use unstable by default (#232)
* feat: comment out nixpkgs-unstable, we use unstable by default

Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>

* fix: typo...

---------

Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2025-11-01 07:21:57 -06:00
Ryan Yin 0c2dcc0734 feat: update nixpkgs-patched & nixpaks-common 2025-11-01 20:01:22 +08:00
Ryan Yin 2f47f7dc76 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs-patched':
    'github:ryan4yin/nixpkgs/b599843bad24621dcaa5ab60dac98f9b0eb1cabe?narHash=sha256-tLdkkC6XnsY9EOZW9TlpesTclELy8W7lL2ClL%2Bnma8o%3D' (2025-09-08)
  → 'github:ryan4yin/nixpkgs/08dacfca559e1d7da38f3cf05f1f45ee9bfd213c?narHash=sha256-o9KF3DJL7g7iYMZq9SWgfS1BFlNbsm6xplRjVlOCkXI%3D' (2025-10-28)
2025-11-01 20:00:08 +08:00
Ryan Yin 082327c693 chore: ~/.claude.json - bindmount 2025-11-01 18:33:09 +08:00
Ryan Yin 1436c6c069 chore: nixpaks 2025-11-01 16:34:00 +08:00
Ryan Yin b034b383d7 feat: add flameshot 2025-11-01 15:00:10 +08:00
Ryan Yin 863f6a31f7 feat: upgrade code-cursor
Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2025-11-01 13:54:17 +08:00
Ryan Yin 0cdc201974 fix: claude-code 2025-11-01 12:10:52 +08:00
Ryan Yin 40b782d94b fix: niri - screencapture 2025-11-01 11:41:29 +08:00
Ryan Yin 23de363622 feat: add jc
Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2025-11-01 10:30:25 +08:00
Ryan Yin 2195a599d6 feat: update model for claude-code 2025-10-21 13:17:51 +08:00
Ryan Yin c58e76574e feat: update model for claude-code 2025-10-21 09:45:02 +08:00
Ryan Yin 7fbd31a70a fix: fontconfig serif & sans (#230) 2025-10-19 09:28:09 +08:00
Ryan Yin e8a227dcb7 feat(nixos): hyprland - gestures 2025-10-18 20:02:45 +08:00
Ryan Yin 74420b4161 fix(nixos): hyprland - enable polkit-gnome to get auth work 2025-10-18 19:55:30 +08:00
Ryan Yin aabe1c65fa fix: nixos-installer - use nixos-unstable (#228)
Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2025-10-16 21:16:58 -06:00
Ryan Yin b25d30dd62 chore: nixos-installer - update flake.nix 2025-10-16 15:22:17 +08:00
Ryan Yin 57cd863aa5 feat: remove determinate nix 2025-10-16 13:23:36 +08:00
Ryan Yin 492708cfc7 feat: nixos-apple-silicon - build full NixOS kernel to enable BTF/BPF 2025-10-16 13:15:35 +08:00
Ryan Yin a5bd9c1d09 chore: use nu_scripts from git 2025-10-16 10:14:45 +08:00
Ryan Yin 73642f6686 refactor: install core cli tools at system-level 2025-10-15 12:48:58 +08:00
Ryan Yin d06fdb3076 feat: add procs - replacement of ps 2025-10-15 11:13:26 +08:00
Ryan Yin 956a997eb8 feat(nixos): add systemctl-tui 2025-10-15 10:57:55 +08:00
Ryan Yin f9bb934218 fix(home/base/tui/shell): nushell - use both git-completions & git-aliases 2025-10-15 10:49:53 +08:00
Ryan Yin 0029bdc8c7 feat: gcloud aliases (#226) 2025-10-14 19:49:14 -06:00
96 changed files with 1842 additions and 1986 deletions
+1 -1
View File
@@ -100,7 +100,7 @@ repair-store *paths:
# Update all Nixpkgs inputs
[group('nix')]
up-nix:
nix flake update nixpkgs nixpkgs-stable nixpkgs-unstable nixpkgs-darwin nixpkgs-ollama
nix flake update nixpkgs nixpkgs-stable nixpkgs-unstable nixpkgs-darwin nixpkgs-patched
############################################################################
#
+2 -2
View File
@@ -8,9 +8,9 @@
<a href="https://github.com/ryan4yin/nix-config/stargazers">
<img alt="Stargazers" src="https://img.shields.io/github/stars/ryan4yin/nix-config?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41"></a>
<a href="https://nixos.org/">
<img src="https://img.shields.io/badge/NixOS-25.05-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a>
<img src="https://img.shields.io/badge/NixOS-25.11-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a>
<a href="https://github.com/ryan4yin/nixos-and-flakes-book">
<img src="https://img.shields.io/static/v1?label=Nix Flakes&message=learning&style=for-the-badge&logo=nixos&color=DDB6F2&logoColor=D9E0EE&labelColor=302D41"></a>
<img src="https://img.shields.io/badge/Nix%20Flakes-learning-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a>
</a>
</p>
Generated
+311 -601
View File
File diff suppressed because it is too large Load Diff
+24 -19
View File
@@ -35,16 +35,18 @@
# Official NixOS package source, using nixos's unstable branch by default
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable-small";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
nixpkgs-ollama.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.11";
# revert mesa to 25.2.6
nixpkgs-mesa.url = "github:nixos/nixpkgs/2b1f0ea3ee3952e68b164efa0a1c5e394ef2e781";
nixpkgs-2505.url = "github:nixos/nixpkgs/nixos-25.05";
# nixpkgs with some custom patches
nixpkgs-patched.url = "github:ryan4yin/nixpkgs/nixos-unstable-patched";
# get some latest packages from the master branch
nixpkgs-master.url = "github:nixos/nixpkgs/master";
# for macos
# nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-25.05-darwin";
# nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-25.11-darwin";
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-unstable";
nix-darwin = {
url = "github:lnl7/nix-darwin";
@@ -54,7 +56,7 @@
# home-manager, used for managing user configuration
home-manager = {
url = "github:nix-community/home-manager/master";
# url = "github:nix-community/home-manager/release-25.05";
# url = "github:nix-community/home-manager/release-25.11";
# The `follows` keyword in inputs is used for inheritance.
# Here, `inputs.nixpkgs` of home-manager is kept consistent with the `inputs.nixpkgs` of the current flake,
@@ -62,8 +64,6 @@
inputs.nixpkgs.follows = "nixpkgs";
};
determinate.url = "https://flakehub.com/f/DeterminateSystems/determinate/*";
# https://github.com/catppuccin/nix
catppuccin = {
url = "github:catppuccin/nix";
@@ -71,7 +71,7 @@
};
lanzaboote = {
url = "github:nix-community/lanzaboote/v0.4.2";
url = "github:nix-community/lanzaboote/v0.4.3";
inputs.nixpkgs.follows = "nixpkgs";
};
@@ -84,7 +84,7 @@
# anyrun - a wayland launcher
anyrun = {
url = "github:/anyrun-org/anyrun/v25.9.0";
url = "github:/anyrun-org/anyrun/v25.9.3";
inputs.nixpkgs.follows = "nixpkgs";
};
@@ -129,7 +129,7 @@
};
ghostty = {
url = "github:ghostty-org/ghostty";
url = "github:ghostty-org/ghostty/tip"; # Latest Continuous Release
};
blender-bin = {
@@ -138,12 +138,17 @@
};
nixos-apple-silicon = {
# 2025-08-25 asahi-6.15.10-3
url = "github:nix-community/nixos-apple-silicon/b99bf9bf7445416fe55da09034fc4a6cd733805c";
# asahi-6.17.7-2
url = "github:nix-community/nixos-apple-silicon/release-2025-11-18";
inputs.nixpkgs.follows = "nixpkgs";
};
niri.url = "github:sodiboo/niri-flake";
helix = {
# Helix with steel as plugin system
# https://github.com/helix-editor/helix/pull/8675
url = "github:mattwparas/helix/steel-event-system";
inputs.nixpkgs.follows = "nixpkgs";
};
# -------------- Gaming ---------------------
@@ -152,14 +157,14 @@
inputs.nixpkgs.follows = "nixpkgs";
};
aagl = {
url = "github:ezKEa/aagl-gtk-on-nix";
inputs.nixpkgs.follows = "nixpkgs";
url = "github:ezKEa/aagl-gtk-on-nix/release-25.11";
# inputs.nixpkgs.follows = "nixpkgs";
};
######################## Some non-flake repositories #########################################
polybar-themes = {
url = "github:adi1090x/polybar-themes";
nu_scripts = {
url = "github:ryan4yin/nu_scripts";
flake = false;
};
+2 -2
View File
@@ -1,6 +1,6 @@
{
pkgs,
pkgs-patched,
pkgs-master,
nixpak,
...
}:
@@ -22,7 +22,7 @@ in
nixpkgs.overlays = [
(_: super: {
nixpaks = {
qq = wrapper pkgs-patched ./qq.nix;
qq = wrapper pkgs-master ./qq.nix;
wechat = wrapper super ./wechat.nix;
telegram-desktop = wrapper super ./telegram-desktop.nix;
firefox = wrapper super ./firefox.nix;
+3 -16
View File
@@ -5,7 +5,7 @@
# - Firefox's flatpak manifest: https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/docker/firefox-flatpak/runme.sh#l151
{
lib,
firefox-wayland,
firefox,
mkNixPak,
buildEnv,
makeDesktopItem,
@@ -23,7 +23,7 @@ let
}:
{
app = {
package = firefox-wayland;
package = firefox;
binPath = "bin/firefox";
};
flatpak.appId = appId;
@@ -34,20 +34,6 @@ let
./modules/common.nix
];
# list all dbus services:
# ls -al /run/current-system/sw/share/dbus-1/services/
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
dbus.policies = {
"org.mozilla.firefox.*" = "own"; # firefox
"org.mozilla.firefox_beta.*" = "own"; # firefox beta
"org.mpris.MediaPlayer2.firefox.*" = "own";
"org.gnome.Shell.Screencast" = "talk";
# System tray icon
"org.freedesktop.Notifications" = "talk";
"org.kde.StatusNotifierWatcher" = "talk";
};
bubblewrap = {
# To trace all the home files Firefox accesses, you can use the following nushell command:
# just trace-access firefox
@@ -61,6 +47,7 @@ let
sloth.xdgDownloadDir
sloth.xdgMusicDir
sloth.xdgVideosDir
sloth.xdgPicturesDir
];
bind.ro = [
"/sys/bus/pci"
+61 -63
View File
@@ -1,32 +1,35 @@
# https://github.com/mnixry/nixos-config/blob/74913c2b90d06e31170bbbaa0074f915721da224/desktop/packages/nixpaks-common.nix
# https://github.com/Kraftland/portable/blob/09c4a4227538a3f42de208a6ecbdc938ac9c00dd/portable.sh
# https://flatpak.github.io/xdg-desktop-portal/docs/api-reference.html
{
lib,
pkgs,
sloth,
config,
...
}:
{
config = {
dbus =
let
inherit (config.flatpak) appId;
in
{
config = {
# list all dbus services:
# ls -al /run/current-system/sw/share/dbus-1/services/
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
dbus = {
# `--see`: The bus name can be enumerated by the application.
# `--talk`: The application can send messages to, and receive replies and signals from, the bus name.
# `--own`: The application can own the bus name
policies = {
"${appId}" = "own";
"${appId}.*" = "own";
"org.freedesktop.DBus" = "talk";
"org.gtk.vfs.*" = "talk";
"org.gtk.vfs" = "talk";
"ca.desrt.dconf" = "talk";
"org.freedesktop.portal.*" = "talk";
"org.a11y.Bus" = "talk";
"org.freedesktop.appearance" = "talk";
"org.freedesktop.appearance.*" = "talk";
}
// (builtins.listToAttrs (
map (id: lib.nameValuePair "org.kde.StatusNotifierItem-${toString id}-1" "own") (
lib.lists.range 2 11
lib.lists.range 2 29
)
))
// {
@@ -36,19 +39,19 @@
"org.mpris.MediaPlayer2.${appId}.*" = "own";
"org.mpris.MediaPlayer2.${lib.lists.last (lib.strings.splitString "." appId)}" = "own";
"org.mpris.MediaPlayer2.${lib.lists.last (lib.strings.splitString "." appId)}.*" = "own";
# Conditionally allows a custom, friendlier MPRIS name if 'mprisName' is set.
# "org.mpris.MediaPlayer2.${mprisName}" = "own";
# "org.mpris.MediaPlayer2.${mprisName}.*" = "own";
# --- General Desktop Integration ---
"com.canonical.AppMenu.Registrar" = "talk"; # For Ubuntu AppMenu
"org.freedesktop.FileManager1" = "talk";
"org.freedesktop.Notifications" = "talk";
"org.kde.StatusNotifierWatcher" = "talk";
"org.gnome.Shell.Screencast" = "talk";
# --- Accessibility (a11y) ---
# --- Accessibility (a11y) 无障碍服务 ---
"org.a11y.Bus" = "see";
# --- Portal Access ---
# "org.freedesktop.portal.*" = "talk";
"org.freedesktop.portal.Documents" = "talk";
"org.freedesktop.portal.FileTransfer" = "talk";
"org.freedesktop.portal.FileTransfer.*" = "talk";
@@ -65,10 +68,9 @@
"org.freedesktop.portal.IBus" = "talk";
"org.freedesktop.portal.IBus.*" = "talk";
};
rules = {
# 'call' rules permit specific method calls on D-Bus interfaces.
call = {
# --- Accessibility ---
# '--call' rules permit specific method calls on D-Bus interfaces.
rules.call = {
# --- Accessibility (a11y) 无障碍服务 ---
"org.a11y.Bus" = [
"org.a11y.Bus.GetAddress@/org/a11y/bus"
"org.freedesktop.DBus.Properties.Get@/org/a11y/bus"
@@ -94,13 +96,37 @@
# --- Main Desktop Portal Interface ---
# A comprehensive list of permissions for interacting with the desktop environment.
"org.freedesktop.portal.Desktop" = [
# Device Access
# Properties & Settings
"org.freedesktop.DBus.Properties.GetAll"
"org.freedesktop.DBus.Properties.Get@/org/freedesktop/portal/desktop"
"org.freedesktop.portal.Session.Close"
"org.freedesktop.portal.Settings.ReadAll"
"org.freedesktop.portal.Settings.Read"
"org.freedesktop.portal.Account.GetUserInformation"
# Network & Proxy
"org.freedesktop.portal.NetworkMonitor"
"org.freedesktop.portal.NetworkMonitor.*"
"org.freedesktop.portal.ProxyResolver.Lookup"
"org.freedesktop.portal.ProxyResolver.Lookup.*"
# Screenshot / Screen Capture & Sharing
"org.freedesktop.portal.ScreenCast"
"org.freedesktop.portal.ScreenCast.*"
"org.freedesktop.portal.Screenshot"
"org.freedesktop.portal.Screenshot.Screenshot"
# Device Access(Camera / USB)
"org.freedesktop.portal.Camera"
"org.freedesktop.portal.Camera.*"
"org.freedesktop.portal.Usb"
"org.freedesktop.portal.Usb.*"
# File Chooser & Documents
# Remote Desktop
"org.freedesktop.portal.RemoteDesktop"
"org.freedesktop.portal.RemoteDesktop.*"
# File Operations
"org.freedesktop.portal.Documents"
"org.freedesktop.portal.Documents.*"
"org.freedesktop.portal.FileChooser"
@@ -108,12 +134,6 @@
"org.freedesktop.portal.FileTransfer"
"org.freedesktop.portal.FileTransfer.*"
# Input Methods
"org.freedesktop.portal.Fcitx"
"org.freedesktop.portal.Fcitx.*"
"org.freedesktop.portal.IBus"
"org.freedesktop.portal.IBus.*"
# Notifications & Printing
"org.freedesktop.portal.Notification"
"org.freedesktop.portal.Notification.*"
@@ -121,63 +141,41 @@
"org.freedesktop.portal.Print.*"
# Open/Launch Handlers
"org.freedesktop.portal.Email.ComposeEmail"
"org.freedesktop.portal.OpenURI"
"org.freedesktop.portal.OpenURI.*"
"org.freedesktop.portal.Email.ComposeEmail"
# Properties & Session Management
"org.freedesktop.DBus.Properties.GetAll"
"org.freedesktop.DBus.Properties.Get@/org/freedesktop/portal/desktop"
"org.freedesktop.portal.Session.Close"
# Screen Capture & Sharing
"org.freedesktop.portal.RemoteDesktop"
"org.freedesktop.portal.RemoteDesktop.*"
"org.freedesktop.portal.ScreenCast"
"org.freedesktop.portal.ScreenCast.*"
"org.freedesktop.portal.Screenshot"
"org.freedesktop.portal.Screenshot.Screenshot"
# Input Methods
"org.freedesktop.portal.Fcitx"
"org.freedesktop.portal.Fcitx.*"
"org.freedesktop.portal.IBus"
"org.freedesktop.portal.IBus.*"
# Secrets (Keyring)
"org.freedesktop.portal.Secret"
"org.freedesktop.portal.Secret.RetrieveSecret"
# Settings
"org.freedesktop.portal.Settings.Read"
"org.freedesktop.portal.Settings.ReadAll"
# Get/Update GlobalShortcuts
# "org.freedesktop.portal.GlobalShortcuts"
# "org.freedesktop.portal.GlobalShortcuts.*"
# System Information
"org.freedesktop.portal.Account.GetUserInformation"
"org.freedesktop.portal.NetworkMonitor"
"org.freedesktop.portal.NetworkMonitor.*"
"org.freedesktop.portal.ProxyResolver.Lookup"
"org.freedesktop.portal.ProxyResolver.Lookup.*"
# -- get the user's location
# "org.freedesktop.portal.Location"
# "org.freedesktop.portal.Location.*"
# Generic Request Fallback
"org.freedesktop.portal.Request"
# --- Conditional Portal Rules ---
# These would be enabled based on config flags in a real implementation.
# Enabled if 'allowGlobalShortcuts = true'
"org.freedesktop.portal.GlobalShortcuts"
"org.freedesktop.portal.GlobalShortcuts.*"
# Enabled if 'allowInhibit = true'
# -- inhibit the user session from ending, suspending, idling or getting switched away.
"org.freedesktop.portal.Inhibit"
"org.freedesktop.portal.Inhibit.*"
# Enabled if 'XDG_CURRENT_DESKTOP = "GNOME"'
"org.freedesktop.portal.Location"
"org.freedesktop.portal.Location.*"
# Generic Request Fallback
"org.freedesktop.portal.Request"
];
};
# 'broadcast' rules permit receiving signals from D-Bus names.
broadcast = {
rules.broadcast = {
"org.freedesktop.portal.*" = [ "@/org/freedesktop/portal/*" ];
};
};
args = [
"--filter"
"--sloppy-names"
+1 -13
View File
@@ -31,19 +31,6 @@ let
./modules/common.nix
];
# list all dbus services:
# ls -al /run/current-system/sw/share/dbus-1/services/
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
dbus.policies = {
"org.gnome.Shell.Screencast" = "talk";
# System tray icon
"org.freedesktop.Notifications" = "talk";
"org.kde.StatusNotifierWatcher" = "talk";
# File Manager
"org.freedesktop.FileManager1" = "talk";
# Uses legacy StatusNotifier implementation
"org.kde.*" = "own";
};
bubblewrap = {
# To trace all the home files QQ accesses, you can use the following nushell command:
# just trace-access qq
@@ -53,6 +40,7 @@ let
sloth.xdgDownloadDir
sloth.xdgMusicDir
sloth.xdgVideosDir
sloth.xdgPicturesDir
];
sockets = {
x11 = false;
+1 -4
View File
@@ -24,10 +24,6 @@ let
dbus = {
enable = true;
policies = {
"org.gnome.Mutter.IdleMonitor" = "talk";
"org.freedesktop.Notifications" = "talk";
"org.kde.StatusNotifierWatcher" = "talk";
"com.canonical.AppMenu.Registrar" = "talk";
"com.canonical.indicator.application" = "talk";
"org.ayatana.indicator.application" = "talk";
"org.sigxcpu.Feedback" = "talk";
@@ -40,6 +36,7 @@ let
sloth.xdgDownloadDir
sloth.xdgMusicDir
sloth.xdgVideosDir
sloth.xdgPicturesDir
];
sockets = {
x11 = false;
+8 -31
View File
@@ -1,34 +1,6 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
# Misc
cowsay
gnupg
gnumake
# Modern cli tools, replacement of grep/sed/...
# Interactively filter its input using fuzzy searching, not limit to filenames.
fzf
# search for files by name, faster than find
fd
# search for files by its content, replacement of grep
(ripgrep.override { withPCRE2 = true; })
# A fast and polyglot tool for code searching, linting, rewriting at large scale
# supported languages: only some mainstream languages currently(do not support nix/nginx/yaml/toml/...)
ast-grep
sad # CLI search and replace, just like sed, but with diff preview.
yq-go # yaml processor https://github.com/mikefarah/yq
just # a command runner like make, but simpler
hyperfine # command-line benchmarking tool
gping # ping, but with a graph(TUI)
doggo # DNS client for humans
duf # Disk Usage/Free Utility - a better 'df' alternative
du-dust # A more intuitive version of `du` in rust
gdu # disk usage analyzer(replacement of `du`)
# nix related
#
# it provides the command `nom` works just like `nix
@@ -42,10 +14,15 @@
# https://github.com/utdemir/nix-tree
nix-tree # A TUI to visualize the dependency graph of a nix derivation
# productivity
# misc
cowsay
gnupg
caddy # A webserver with automatic HTTPS via Let's Encrypt(replacement of nginx)
croc # File transfer between computers securely and easily
ncdu # analyzer your disk usage Interactively, via TUI(replacement of `du`)
# A fast and polyglot tool for code searching, linting, rewriting at large scale
# supported languages: only some mainstream languages currently(do not support nix/nginx/yaml/toml/...)
ast-grep
# other core cli tools are installed at system-level
];
# A modern replacement for ls
+1 -3
View File
@@ -1,6 +1,4 @@
{ pkgs, ... }:
{
programs.helix = {
enable = true;
};
programs.helix.enable = true;
}
+30 -28
View File
@@ -40,18 +40,27 @@
enable = true;
lfs.enable = true;
userName = myvars.userfullname;
userEmail = myvars.useremail;
# signing = {
# key = "xxx";
# signByDefault = true;
# };
includes = [
{
# use different email & name for work
# use different email & name for work:
#
# [user]
# email = "xxx@xxx.com"
# name = "Ryan Yin"
path = "~/work/.gitconfig";
condition = "gitdir:~/work/";
}
];
extraConfig = {
settings = {
user.email = myvars.useremail;
user.name = myvars.userfullname;
init.defaultBranch = "main";
trim.bases = "develop,master,main"; # for git-trim
push.autoSetupRemote = true;
@@ -63,30 +72,9 @@
"ssh://git@github.com/ryan4yin" = {
insteadOf = "https://github.com/ryan4yin";
};
# "ssh://git@gitlab.com/" = {
# insteadOf = "https://gitlab.com/";
# "ssh://git@bitbucket.com/ryan4yin" = {
# insteadOf = "https://bitbucket.com/ryan4yin";
# };
# "ssh://git@bitbucket.com/" = {
# insteadOf = "https://bitbucket.com/";
# };
};
};
# signing = {
# key = "xxx";
# signByDefault = true;
# };
# A syntax-highlighting pager for git, diff, grep, and blame output
delta = {
enable = true;
options = {
diff-so-fancy = true;
line-numbers = true;
true-color = "always";
# features => named groups of settings, used to keep related settings organized
# features = "";
};
};
aliases = {
@@ -117,10 +105,24 @@
foreach = "submodule foreach";
};
};
};
# A syntax-highlighting pager for git, diff, grep, and blame output
programs.delta = {
enable = true;
enableGitIntegration = true;
options = {
diff-so-fancy = true;
line-numbers = true;
true-color = "always";
# features => named groups of settings, used to keep related settings organized
# features = "";
};
};
# Git terminal UI (written in go).
programs.lazygit.enable = true;
# Yet another Git TUI (written in rust).
programs.gitui.enable = true;
programs.gitui.enable = false;
}
-1
View File
@@ -27,7 +27,6 @@ in
# NOTE: nushell will be launched in bash, so it can inherit all the eenvironment variables.
programs.nushell = {
enable = true;
# package = pkgs-unstable.nushell;
configFile.source = ./config.nu;
inherit shellAliases;
};
+1 -1
View File
@@ -52,7 +52,7 @@ Error opening terminal: xterm-kitty.
NixOS preserve the `TERMINFO` and `TERMINFO_DIRS` environment variables, for `root` and the `wheel`
group:
[nixpkgs/nixos/modules/config/terminfo.nix](https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/config/terminfo.nix#L18)
[nixpkgs/nixos/modules/config/terminfo.nix](https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/config/terminfo.nix#L18)
For nix-darwin, take a look at <https://github.com/LnL7/nix-darwin/wiki/Terminfo-issues>
+1 -3
View File
@@ -1,6 +1,5 @@
{
pkgs,
pkgs-unstable,
...
}:
###########################################################
@@ -26,7 +25,6 @@
{
programs.alacritty = {
enable = true;
# package = pkgs-unstable.alacritty;
# https://alacritty.org/config-alacritty.html
settings = {
window = {
@@ -52,7 +50,7 @@
bold_italic = {
family = "Maple Mono NF CN";
};
size = if pkgs.stdenv.isDarwin then 14 else 13;
size = 13;
};
terminal = {
# Spawn a nushell in login mode via `bash`
+2 -1
View File
@@ -17,8 +17,9 @@
settings = {
main = {
term = "foot"; # or "xterm-256color" for maximum compatibility
font = "Maple Mono NF CN:size=14";
font = "Maple Mono NF CN:size=13";
dpi-aware = "no"; # scale via window manager instead
resize-keep-grid = "no"; # do not resize the window on font resizing
# Spawn a nushell in login mode via `bash`
shell = "${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'";
+1 -1
View File
@@ -16,7 +16,7 @@
pkgs.hello # pkgs.ghostty is currently broken on darwin
else
pkgs.ghostty; # the stable version
# package = ghostty.packages.${pkgs.system}.default; # the latest version
# package = ghostty.packages.${pkgs.stdenv.hostPlatform.system}.default; # the latest version
enableBashIntegration = false;
installBatSyntax = false;
# installVimSyntax = true;
+1 -1
View File
@@ -19,7 +19,7 @@
font = {
name = "Maple Mono NF CN";
# use different font size on macOS
size = if pkgs.stdenv.isDarwin then 14 else 13;
size = 13;
};
# consistent with other terminal emulators
+2 -2
View File
@@ -1,6 +1,6 @@
{
pkgs,
pkgs-stable,
pkgs-2505,
nur-ryan4yin,
...
}:
@@ -25,7 +25,7 @@
istioctl
clusterctl # for kubernetes cluster-api
kubevirt # virtctl
pkgs-stable.kubernetes-helm
pkgs-2505.kubernetes-helm
fluxcd
argocd
-1
View File
@@ -1,6 +1,5 @@
{
pkgs,
pkgs-unstable,
...
}:
{
+23 -2
View File
@@ -1,8 +1,29 @@
{ pkgs, ... }:
{
config,
pkgs,
helix,
...
}:
let
helixPackages = helix.packages.${pkgs.stdenv.hostPlatform.system};
in
{
# to make steel work, we need to git clone this repo to your home directory.
home.sessionVariables.HELIX_STEEL_CONFIG = "${config.home.homeDirectory}/nix-config/home/base/tui/editors/helix/steel";
home.packages = with pkgs; [
steel
];
programs.helix = {
enable = true;
package = pkgs.helix;
# enable steel as the plugin system
# https://github.com/helix-editor/helix/pull/8675
# https://github.com/mattwparas/helix/blob/steel-event-system/STEEL.md
package = helixPackages.default.overrideAttrs (prevAttrs: {
cargoBuildFeatures = prevAttrs.cargoBuildFeatures or [ ] ++ [ "steel" ];
});
settings = {
editor = {
line-number = "relative";
@@ -0,0 +1,40 @@
;; The helix.scm module will be loaded first before anything else,
;; the runtime will require this module, and any functions exported
;; will now be available to be used as typed commands, e.g. :git-add :open-helix-scm
(require "helix/editor.scm")
(require (prefix-in helix. "helix/commands.scm"))
(require (prefix-in helix.static. "helix/static.scm"))
(provide shell git-add open-helix-scm open-init-scm)
(define (current-path)
(let* ([focus (editor-focus)]
[focus-doc-id (editor->doc-id focus)])
(editor-document->path focus-doc-id)))
;;@doc
;; Specialized shell implementation, where % is a wildcard for the current file
(define (shell . args)
(helix.run-shell-command
(string-join
;; Replace the % with the current file
(map (lambda (x) (if (equal? x "%") (current-path) x)) args)
" ")))
;;@doc
;; Adds the current file to git
(define (git-add)
(shell "git" "add" "%"))
;;@doc
;; Open the helix.scm file
(define (open-helix-scm)
(helix.open (helix.static.get-helix-scm-path)))
;;@doc
;; Opens the init.scm file
(define (open-init-scm)
(helix.open (helix.static.get-init-scm-path)))
@@ -0,0 +1,24 @@
;; The init.scm file is run at the top level, immediately after the helix.scm module is required.
;; The helix context is available here, so you can interact with the editor.
;; configure the LSP for steel
(require "helix/configuration.scm")
(define-lsp "steel-language-server" (command "steel-language-server") (args '()))
(define-language "scheme"
(language-servers '("steel-language-server")))
;; show splash screen - when you open with no argument
(require "mattwparas-helix-package/splash.scm")
(when (equal? (command-line) '("hx"))
(show-splash))
;; Terminal & shell
(require "steel-pty/term.scm")
(set-default-shell! "nu")
;; File Watcher
(require "helix-file-watcher/file-watcher.scm")
(spawn-watcher)
;; File Tree
(require "mattwparas-helix-package/cogs/file-tree.scm")
+1 -2
View File
@@ -2,7 +2,6 @@
config,
lib,
pkgs,
pkgs-unstable,
...
}:
###############################################################################
@@ -29,7 +28,7 @@ in
programs.neovim = {
enable = true;
package = pkgs-unstable.neovim-unwrapped;
package = pkgs.neovim-unwrapped;
# defaultEditor = true; # set EDITOR at system-wide level
viAlias = true;
+8 -8
View File
@@ -1,6 +1,6 @@
{
pkgs,
pkgs-unstable,
pkgs-master,
...
}:
{
@@ -36,7 +36,7 @@
marksman # language server for markdown
glow # markdown previewer
pandoc # document converter
pkgs-unstable.hugo # static site generator
pkgs-master.hugo # static site generator
#-- sql
sqlfluff
@@ -90,11 +90,11 @@
#-- rust
# we'd better use the rust-overlays for rust development
pkgs-unstable.rustc
pkgs-unstable.rust-analyzer
pkgs-unstable.cargo # rust package manager
pkgs-unstable.rustfmt
pkgs-unstable.clippy # rust linter
pkgs-master.rustc
pkgs-master.rust-analyzer
pkgs-master.cargo # rust package manager
pkgs-master.rustfmt
pkgs-master.clippy # rust linter
#-- golang
go
@@ -141,7 +141,7 @@
# fnlfmt # fennel
# (
# if pkgs.stdenv.isLinux && pkgs.stdenv.isx86
# then pkgs-unstable.akkuPackages.scheme-langserver
# then pkgs-master.akkuPackages.scheme-langserver
# else pkgs.emptyDirectory
# )
# ]
-1
View File
@@ -1,6 +1,5 @@
{
pkgs,
pkgs-unstable,
...
}:
{
-53
View File
@@ -1,53 +0,0 @@
{
config,
pkgs-unstable,
...
}:
let
inherit (pkgs-unstable) nu_scripts;
in
{
programs.nushell = {
# load the alias file for work
# the file must exist, otherwise nushell will complain about it!
#
# currently, nushell does not support conditional sourcing of files
# https://github.com/nushell/nushell/issues/8214
extraConfig = ''
source /etc/agenix/alias-for-work.nushell
# using claude-code with kimi k2
$env.ANTHROPIC_BASE_URL = "https://api.moonshot.cn/anthropic/"
$env.ANTHROPIC_API_KEY = $env.MOONSHOT_API_KEY
# Directories in this constant are searched by the
# `use` and `source` commands.
const NU_LIB_DIRS = $NU_LIB_DIRS ++ ['${nu_scripts}/share/nu_scripts']
# completion
use custom-completions/cargo/cargo-completions.nu *
use custom-completions/curl/curl-completions.nu *
use custom-completions/git/git-completions.nu *
use custom-completions/glow/glow-completions.nu *
use custom-completions/just/just-completions.nu *
use custom-completions/make/make-completions.nu *
use custom-completions/man/man-completions.nu *
use custom-completions/nix/nix-completions.nu *
use custom-completions/ssh/ssh-completions.nu *
use custom-completions/tar/tar-completions.nu *
use custom-completions/tcpdump/tcpdump-completions.nu *
use custom-completions/zellij/zellij-completions.nu *
# use custom-completions/zoxide/zoxide-completions.nu *
# alias
# use aliases/git/git-aliases.nu *
use aliases/eza/eza-aliases.nu *
use aliases/bat/bat-aliases.nu *
# modules
use modules/argx *
use modules/lg *
use modules/kubernetes *
'';
};
}
+39
View File
@@ -0,0 +1,39 @@
# Google Cloud CLI aliases
# Based on https://cloud.google.com/sdk/docs/configurations
# Note: Avoided conflicts with common git aliases (gc, gca, gcl, gcs, gcu, gs, etc.)
# Configuration management
export alias gccfg = gcloud config configurations create
export alias gcact = gcloud config configurations activate
export alias gclist = gcloud config configurations list
export alias gcdel = gcloud config configurations delete
export alias gcset = gcloud config set
export alias gcunset = gcloud config unset
export alias gcconfig = gcloud config list
# Authentication
export alias gclogin = gcloud auth login
export alias gcauth = gcloud auth list
export alias gcapp = gcloud auth application-default login
# Project management
export alias gcproj = gcloud config set project
export alias gcget = gcloud config get-value project
# Compute Engine
export alias gcinst = gcloud compute instances list
export alias gccreate = gcloud compute instances create
export alias gcdelete = gcloud compute instances delete
export alias gcssh = gcloud compute ssh
export alias gck8sget = gcloud container clusters get-credentials
# Storage
export alias gcst = gcloud storage
export alias gcstls = gcloud storage ls
export alias gcstcp = gcloud storage cp
export alias gcstrm = gcloud storage rm
# General shortcuts
export alias gcloud = gcloud
export alias gcinfo = gcloud info
export alias gcver = gcloud version
+72
View File
@@ -0,0 +1,72 @@
{
nu_scripts,
...
}:
{
programs.nushell = {
# load the alias file for work
# the file must exist, otherwise nushell will complain about it!
#
# currently, nushell does not support conditional sourcing of files
# https://github.com/nushell/nushell/issues/8214
extraConfig = ''
source /etc/agenix/alias-for-work.nushell
$env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1"
# using claude-code with kimi k2
# https://platform.moonshot.cn/docs/guide/agent-support
# $env.ANTHROPIC_BASE_URL = "https://api.moonshot.cn/anthropic/"
# $env.ANTHROPIC_AUTH_TOKEN = $env.MOONSHOT_API_KEY
# $env.ANTHROPIC_MODEL = "kimi-k2-thinking"
# $env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "kimi-k2-thinking-turbo"
# using claude-code with glm llm
# https://docs.bigmodel.cn/cn/coding-plan/tool/claude
$env.ANTHROPIC_BASE_URL = "https://open.bigmodel.cn/api/anthropic"
$env.ANTHROPIC_AUTH_TOKEN = $env.ZAI_API_KEY
$env.ANTHROPIC_MODEL = "glm-4.6"
$env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "glm-4.5-air"
# using claude-code with qwen llm
# https://bailian.console.aliyun.com/?tab=doc#/doc/?type=model&url=2949529
# $env.ANTHROPIC_BASE_URL = "https://dashscope.aliyuncs.com/apps/anthropic"
# $env.ANTHROPIC_AUTH_TOKEN = $env.DASHSCOPE_API_KEY
# $env.ANTHROPIC_MODEL = "qwen-plus" # qwen-max,
# $env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "qwen-turbo"
# Directories in this constant are searched by the
# `use` and `source` commands.
const NU_LIB_DIRS = $NU_LIB_DIRS ++ ['${nu_scripts}']
# -*- completion -*-
use custom-completions/cargo/cargo-completions.nu *
use custom-completions/curl/curl-completions.nu *
use custom-completions/git/git-completions.nu *
use custom-completions/glow/glow-completions.nu *
use custom-completions/just/just-completions.nu *
use custom-completions/make/make-completions.nu *
use custom-completions/man/man-completions.nu *
use custom-completions/nix/nix-completions.nu *
use custom-completions/ssh/ssh-completions.nu *
use custom-completions/tar/tar-completions.nu *
use custom-completions/tcpdump/tcpdump-completions.nu *
use custom-completions/zellij/zellij-completions.nu *
use custom-completions/zoxide/zoxide-completions.nu *
# -*- alias -*-
use aliases/git/git-aliases.nu *
use aliases/eza/eza-aliases.nu *
use aliases/bat/bat-aliases.nu *
use ${./aliases/gcloud.nu} *
# -*- modules -*-
# argx & lg is required by the kubernetes module
use modules/argx *
use modules/lg *
# k8s/helm aliases, completions,
use modules/kubernetes *
# a wrapper around the jc cli tool, convert cli outputs to nushell tables
# use modules/jc
'';
};
}
+21 -21
View File
@@ -130,8 +130,8 @@ alt-3 = 'workspace 3Work'
alt-4 = 'workspace 4Firefox'
alt-5 = 'workspace 5Chrome'
alt-6 = 'workspace 6Chat'
alt-7 = 'workspace 7Music'
alt-8 = 'workspace 8Mail'
alt-7 = 'workspace 7Work'
alt-8 = 'workspace 8Music'
alt-9 = 'workspace 9File'
alt-0 = 'workspace 0Other'
alt-a = 'workspace A' # In your config, you can drop workspace bindings that you don't need
@@ -146,8 +146,8 @@ alt-shift-3 = 'move-node-to-workspace 3Work'
alt-shift-4 = 'move-node-to-workspace 4Firefox'
alt-shift-5 = 'move-node-to-workspace 5Chrome'
alt-shift-6 = 'move-node-to-workspace 6Chat'
alt-shift-7 = 'move-node-to-workspace 7Music'
alt-shift-8 = 'move-node-to-workspace 8Mail'
alt-shift-7 = 'move-node-to-workspace 7Work'
alt-shift-8 = 'move-node-to-workspace 8Music'
alt-shift-9 = 'move-node-to-workspace 9File'
alt-shift-0 = 'move-node-to-workspace 0Other'
alt-shift-a = 'move-node-to-workspace A'
@@ -246,22 +246,22 @@ run = 'move-node-to-workspace 6Chat'
if.app-id = 'com.tencent.qq'
run = 'move-node-to-workspace 6Chat'
[[on-window-detected]]
if.app-id = 'com.tencent.QQMusicMac'
run = 'move-node-to-workspace 7Music'
[[on-window-detected]]
if.app-id = 'com.netease.163music'
run = 'move-node-to-workspace 7Music'
[[on-window-detected]]
if.app-id = 'com.apple.mail'
run = 'move-node-to-workspace 8Mail'
run = 'move-node-to-workspace 7Work'
# calendar
[[on-window-detected]]
if.app-id = 'com.apple.iCal'
run = 'move-node-to-workspace 8Mail'
run = 'move-node-to-workspace 7Work'
[[on-window-detected]]
if.app-id = 'com.tencent.QQMusicMac'
run = 'move-node-to-workspace 8Music'
[[on-window-detected]]
if.app-id = 'com.netease.163music'
run = 'move-node-to-workspace 8Music'
[[on-window-detected]]
if.app-id = 'com.apple.finder'
@@ -296,6 +296,11 @@ run = ['layout floating', 'move-node-to-workspace 0Other']
if.app-id = 'ai.elementlabs.lmstudio'
run = ['layout floating', 'move-node-to-workspace 0Other']
# Clash Verge - has problem with floating
[[on-window-detected]]
if.app-id = 'io.github.clash-verge-rev.clash-verge-rev'
run = ['move-node-to-workspace 0Other']
[[on-window-detected]]
if.app-id = 'us.zoom.xos'
run = 'move-node-to-workspace 0Other'
@@ -310,11 +315,6 @@ run = ['layout floating']
if.app-id = 'com.apple.systempreferences'
run = ['layout floating']
# Clash Verge - has problem with floating
[[on-window-detected]]
if.app-id = 'io.github.clash-verge-rev.clash-verge-rev'
run = ['move-node-to-workspace 0Other']
# Make all windows float by default
[[on-window-detected]]
check-further-callbacks = true
@@ -331,7 +331,7 @@ run = ['layout floating']
4Firefox = ['main']
5Chrome = ['main']
6Chat = ['built-in']
7Music = ['built-in']
8Mail = ['main']
7Work = ['main']
8Music = ['built-in']
9File = ['main']
0Other = ['main']
+9
View File
@@ -0,0 +1,9 @@
{ lib, ... }:
let
fontSize = 15;
in
{
programs.alacritty.settings.font.size = lib.mkForce fontSize;
programs.ghostty.settings.font-size = lib.mkForce fontSize;
programs.kitty.font.size = lib.mkForce fontSize;
}
+15
View File
@@ -0,0 +1,15 @@
{
pkgs,
...
}:
{
home.packages = with pkgs; [
nixpaks.firefox
];
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
programs.google-chrome = {
enable = true;
package = if pkgs.stdenv.isAarch64 then pkgs.chromium else pkgs.google-chrome;
};
}
+5 -12
View File
@@ -1,9 +1,6 @@
{
lib,
pkgs,
pkgs-unstable,
# pkgs-stable,
nur-ryan4yin,
blender-bin,
...
}:
@@ -23,11 +20,11 @@
# aseprite # Animated sprite editor & pixel art tool
# this app consumes a lot of storage, so do not install it currently
# kicad # 3d printing, eletrical engineering
# kicad # 3d printing, electrical engineering
]
++ (lib.optionals pkgs.stdenv.isx86_64 [
# https://github.com/edolstra/nix-warez/blob/master/blender/flake.nix
blender-bin.packages.${pkgs.system}.blender_4_2 # 3d modeling
blender-bin.packages.${pkgs.stdenv.hostPlatform.system}.blender_4_2 # 3d modeling
ldtk # A modern, versatile 2D level editor
@@ -36,16 +33,14 @@
# yosys # fpga synthesis
# nextpnr # fpga place and route
# openfpgaloader # fpga programming
# nur-ryan4yin.packages.${pkgs.system}.gowin-eda-edu-ide # app: `gowin-env` => `gw_ide` / `gw_pack` / ...
# nur-ryan4yin.packages.${pkgs.stdenv.hostPlatform.system}.gowin-eda-edu-ide # app: `gowin-env` => `gw_ide` / `gw_pack` / ...
]);
programs = {
# live streaming
obs-studio = {
enable = pkgs.stdenv.isx86_64;
plugins =
with pkgs.obs-studio-plugins;
[
plugins = with pkgs.obs-studio-plugins; [
# screen capture
wlrobs
# obs-ndi
@@ -68,11 +63,9 @@
obs-backgroundremoval
# advanced-scene-switcher
obs-pipewire-audio-capture
]
++ (lib.optionals pkgs.stdenv.isx86_64 [
obs-vaapi
obs-3d-effect
]);
];
};
};
}
+1 -1
View File
@@ -5,7 +5,7 @@
}:
let
anyrunPackages = anyrun.packages.${pkgs.system};
anyrunPackages = anyrun.packages.${pkgs.stdenv.hostPlatform.system};
in
{
+4 -2
View File
@@ -30,11 +30,13 @@
wl-clipboard # copying and pasting
hyprpicker # color picker
brightnessctl
hyprshot # screen shot
wf-recorder # screen recording
# audio
alsa-utils # provides amixer/alsamixer/...
networkmanagerapplet # provide GUI app: nm-connection-editor
# screenshot/screencast
flameshot
hyprshot # screen shot
wf-recorder # screen recording
];
xdg.configFile =
+59
View File
@@ -0,0 +1,59 @@
{
lib,
pkgs,
pkgs-master,
...
}:
let
vscodeCliArgs = [
# https://code.visualstudio.com/docs/configure/settings-sync#_recommended-configure-the-keyring-to-use-with-vs-code
# For use with any package that implements the Secret Service API
# (for example gnome-keyring, kwallet5, KeepassXC)
"--password-store=gnome-libsecret"
];
code-cursor = pkgs-master.code-cursor;
# (pkgs-master.code-cursor.override {
# commandLineArgs = lib.concatStringsSep " " vscodeCliArgs;
# }).overrideAttrs
# (oldAttrs: rec {
# pname = "cursor";
# version = "2.1.36";
# src =
# with pkgs-master;
# appimageTools.extract {
# inherit pname version;
# src =
# let
# sources = {
# x86_64-linux = fetchurl {
# # curl -s https://api2.cursor.sh/updates/api/download/stable/linux-x64/cursor | jq
# url = "https://downloads.cursor.com/production/9cd7c8b6cebcbccc1242df211dee45a4b6fe15e4/linux/x64/Cursor-2.1.36-x86_64.AppImage";
# hash = "sha256-aaprRB2BAaUCHj7m5aGacCBHisjN2pVZ+Ca3u1ifxBA=";
# };
# aarch64-linux = fetchurl {
# # curl -s https://api2.cursor.sh/updates/api/download/stable/linux-arm64/cursor | jq
# url = "https://downloads.cursor.com/production/9cd7c8b6cebcbccc1242df211dee45a4b6fe15e4/linux/arm64/Cursor-2.1.36-aarch64.AppImage";
# hash = "sha256-S2vFYBI6m0zjBJEDbk7gc6/zFiKWyhM73OUm1xsNx6Q=";
# };
# };
# in
# sources.${stdenv.hostPlatform.system};
# };
# sourceRoot = "${pname}-${version}-extracted/usr/share/cursor";
# });
in
{
home.packages = [
pkgs.zed-editor
code-cursor
];
programs.vscode = {
enable = true;
package = pkgs-master.vscode.override {
commandLineArgs = vscodeCliArgs;
};
};
}
+8 -6
View File
@@ -14,13 +14,15 @@
type = "fcitx5";
fcitx5.waylandFrontend = true;
fcitx5.addons = with pkgs; [
# for flypy chinese input method
fcitx5-rime
# needed enable rime using configtool after installed
fcitx5-configtool
# fcitx5-chinese-addons # we use rime instead
# fcitx5-mozc # japanese input method
qt6Packages.fcitx5-configtool # GUI for fcitx5
fcitx5-gtk # gtk im module
# Chinese
fcitx5-rime # for flypy chinese input method
# fcitx5-chinese-addons # we use rime instead
# Japanese
fcitx5-mozc-ut
];
};
}
+35 -2
View File
@@ -1,10 +1,10 @@
[Groups/0]
# Group Name
Name=Default
Name=Intl
# Layout
Default Layout=us
# Default Input Method
DefaultIM=rime
DefaultIM=keyboard-us-altgr-intl
[Groups/0/Items/0]
# Name
@@ -14,10 +14,43 @@ Layout=
[Groups/0/Items/1]
# Name
Name=keyboard-us-intl
# Layout
Layout=
[Groups/0/Items/2]
# Name
Name=keyboard-us-altgr-intl
# Layout
Layout=
[Groups/1]
# Group Name
Name=Default
# Layout
Default Layout=us
# Default Input Method
DefaultIM=rime
[Groups/1/Items/0]
# Name
Name=keyboard-us
# Layout
Layout=
[Groups/1/Items/1]
# Name
Name=rime
# Layout
Layout=
[Groups/1/Items/2]
# Name
Name=mozc
# Layout
Layout=
[GroupOrder]
0=Default
1=Intl
+5
View File
@@ -39,6 +39,10 @@ in
# https://github.com/Open-Wine-Components/umu-launcher
# a unified launcher for Windows games on Linux
umu-launcher
# Sed-like editor for binary files
# required by some games to fix problems
bbe
])
++ (with pkgs-x64; [
# a game launcher - great for epic games and gog games
@@ -50,6 +54,7 @@ in
]);
# a GUI game launcher for Steam/GoG/Epic
# https://lutris.net/games?ordering=-popularity
programs.lutris = {
enable = true;
defaultWinePackage = pkgs-x64.proton-ge-bin;
+2 -6
View File
@@ -1,15 +1,11 @@
{
pkgs,
pkgs-x64,
pkgs-unstable,
nur-ryan4yin,
...
}:
# media - control and enjoy audio/video
{
home.packages =
with pkgs;
[
home.packages = with pkgs; [
# audio control
pavucontrol
playerctl
@@ -20,7 +16,7 @@
libva-utils
vdpauinfo
vulkan-tools
glxinfo
mesa-demos
nvitop
(pkgs-x64.zoom-us.override { hyprlandXdgDesktopPortalSupport = true; })
];
+3 -4
View File
@@ -1,6 +1,5 @@
{
pkgs,
pkgs-unstable,
...
}:
{
@@ -15,10 +14,10 @@
freerdp # required by remmina
# my custom hardened packages
pkgs.nixpaks.qq
pkgs.nixpaks.telegram-desktop
nixpaks.qq
nixpaks.telegram-desktop
# qqmusic
pkgs.bwraps.wechat
bwraps.wechat
# discord # update too frequently, use the web version instead
];
+1 -1
View File
@@ -5,6 +5,6 @@
(lib.optionals pkgs.stdenv.isx86_64 [
# https://joplinapp.org/help/
joplin # joplin-cli
joplin-desktop
# joplin-desktop
]);
}
-53
View File
@@ -1,53 +0,0 @@
{
pkgs,
...
}:
{
home.packages = with pkgs; [
# firefox-wayland
nixpaks.firefox
];
programs = {
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
google-chrome = {
enable = true;
package = if pkgs.stdenv.isAarch64 then pkgs.chromium else pkgs.google-chrome;
# https://wiki.archlinux.org/title/Chromium#Native_Wayland_support
commandLineArgs = [
"--ozone-platform-hint=auto"
"--ozone-platform=wayland"
# make it use GTK_IM_MODULE if it runs with Gtk4, so fcitx5 can work with it.
# (only supported by chromium/chrome at this time, not electron)
"--gtk-version=4"
# make it use text-input-v1, which works for kwin 5.27 and weston
"--enable-wayland-ime"
# enable hardware acceleration - vulkan api
# "--enable-features=Vulkan"
];
};
vscode = {
enable = true;
package = pkgs.vscode.override {
isInsiders = false;
# https://wiki.archlinux.org/title/Wayland#Electron
commandLineArgs = [
"--ozone-platform-hint=auto"
"--ozone-platform=wayland"
# make it use GTK_IM_MODULE if it runs with Gtk4, so fcitx5 can work with it.
# (only supported by chromium/chrome at this time, not electron)
"--gtk-version=4"
# make it use text-input-v1, which works for kwin 5.27 and weston
"--enable-wayland-ime"
# TODO: fix https://github.com/microsoft/vscode/issues/187436
# still not works...
"--password-store=gnome" # use gnome-keyring as password store
];
};
};
};
}
-7
View File
@@ -1,7 +0,0 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
zed-editor
code-cursor
];
}
@@ -136,3 +136,14 @@ bind = CTRL, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots
bind = CTRL ALT, l, exec, swaylock
bind = $mod SHIFT, x, exec, wlogout
bind = $mod, n, exec, nm-connection-editor # need install network-manager-applet
# Gestures
# ============================================================================
# https://wiki.hypr.land/Configuring/Gestures/
# gesture = fingers, direction, action, options
gesture = 3, horizontal, workspace
gesture = 3, down, mod: ALT, close
gesture = 3, up, mod: SUPER, scale: 1.5, fullscreen
@@ -103,11 +103,6 @@ master {
new_on_top = true
}
# See: https://wiki.hyprland.org/Configuring/Variables
gestures {
workspace_swipe = off
}
#-- Input ----------------------------------------------------
# Configure mouse and touchpad here.
input {
+1
View File
@@ -45,6 +45,7 @@ in
variables = [ "--all" ];
};
};
services.polkit-gnome.enable = true; # polkit
# NOTE: this executable is used by greetd to start a wayland session when system boot up
# with such a vendor-no-locking script, we can switch to another wayland compositor without modifying greetd's config in NixOS module
+1 -5
View File
@@ -7,12 +7,8 @@
common = {
# Use xdg-desktop-portal-gtk for every portal interface...
default = [
"gtk"
"hyprland"
];
# except for the secret portal, which is handled by gnome-keyring
"org.freedesktop.impl.portal.Secret" = [
"gnome-keyring"
"gtk"
];
};
};
+232
View File
@@ -0,0 +1,232 @@
// This config is in the KDL format: https://kdl.dev
// "/-" comments out the following node.
// Check the wiki for a full description of the configuration:
// https://yalter.github.io/niri/Configuration:-Introduction
// This is the main configuration file that includes all other config files
include "./keybindings.kdl"
include "./windowrules.kdl"
include "./spawn-at-startup.kdl"
include "./niri-hardware.kdl"
// Input device configuration.
// Find the full list of options on the wiki:
// https://yalter.github.io/niri/Configuration:-Input
input {
keyboard {
xkb {
// You can set rules, model, layout, variant and options.
// For more information, see xkeyboard-config(7).
// For example:
// layout "us,ru"
// options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
// If this section is empty, niri will fetch xkb settings
// from org.freedesktop.locale1. You can control these using
// localectl set-x11-keymap.
}
// Enable numlock on startup, omitting this setting disables it.
// numlock
// You can set the keyboard repeat parameters. The defaults match wlroots and sway.
// Delay is in milliseconds before the repeat starts. Rate is in characters per second.
// repeat-delay 600
// repeat-rate 25
// Niri can remember the keyboard layout globally (the default) or per-window.
// - "global" - layout change is global for all windows.
// - "window" - layout is tracked for each window individually.
// track-layout "global"
}
// Next sections include libinput settings.
// Omitting settings disables them, or leaves them at their default values.
// All commented-out settings here are examples, not defaults.
touchpad {
// tap // tap-to-click
dwt // disable-when-typing.
// dwtp // disable-when-trackpointing.
natural-scroll // inverts the scrolling direction.
// accel-speed 0.2
// accel-profile "flat"
// tap-button-map "left-middle-right"
}
mouse {
// natural-scroll // inverts the scrolling direction.
// accel-speed 0.2
// accel-profile "flat"
}
// Uncomment this to make the mouse warp to the center of newly focused windows.
// warp-mouse-to-focus
// Focus windows and outputs automatically when moving the mouse into them.
// Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
// focus-follows-mouse max-scroll-amount="0%"
}
// Settings that influence how windows are positioned and sized.
// Find more information on the wiki:
// https://yalter.github.io/niri/Configuration:-Layout
layout {
// Set gaps around windows in logical pixels.
gaps 8
// When to center a column when changing focus, options are:
// - "never", default behavior, focusing an off-screen column will keep at the left
// or right edge of the screen.
// - "always", the focused column will always be centered.
// - "on-overflow", focusing a column will center it if it doesn't fit
// together with the previously focused column.
center-focused-column "never"
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
preset-column-widths {
// Proportion sets the width as a fraction of the output width, taking gaps into account.
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
// The default preset widths are 1/3, 1/2 and 2/3 of the output.
proportion 0.333333
proportion 0.500000
proportion 0.666667
// Fixed sets the width in logical pixels exactly.
// fixed 1920
}
// You can change the default width of the new windows.
default-column-width { proportion 0.500000; }
// If you leave the brackets empty, the windows themselves will decide their initial width.
// default-column-width {}
// By default focus ring and border are rendered as a solid background rectangle
// behind windows. That is, they will show up through semitransparent windows.
// This is because windows using client-side decorations can have an arbitrary shape.
//
// If you don't like that, you should uncomment `prefer-no-csd` below.
// Niri will draw focus ring and border *around* windows that agree to omit their
// client-side decorations.
//
// Alternatively, you can override it with a window rule called
// `draw-border-with-background`.
// You can change how the focus ring looks.
focus-ring {
// Uncomment this line to disable the focus ring.
// off
// How many logical pixels the ring extends out from the windows.
width 4
// Colors can be set in a variety of ways:
// - CSS named colors: "red"
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
// Color of the ring on the active monitor.
active-color "#7fc8ff"
// Color of the ring on inactive monitors.
//
// The focus ring only draws around the active window, so the only place
// where you can see its inactive-color is on other monitors.
inactive-color "#505050"
// You can also use gradients. They take precedence over solid colors.
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
// The angle is the same as in linear-gradient, and is optional,
// defaulting to 180 (top-to-bottom gradient).
// You can use any CSS linear-gradient tool on the web to set these up.
// Changing the color space is also supported, check the wiki for more info.
//
// active-gradient from="#80c8ff" to="#c7ff7f" angle=45
// You can also color the gradient relative to the entire view
// of the workspace, rather than relative to just the window itself.
// To do that, set relative-to="workspace-view".
//
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
}
// You can also add a border. It's similar to the focus ring, but always visible.
border {
// The settings are the same as for the focus ring.
// If you enable the border, you probably want to disable the focus ring.
off
width 4
active-color "#ffc87f"
inactive-color "#505050"
// Color of the border around windows that request your attention.
urgent-color "#9b0000"
// Gradients can use a few different interpolation color spaces.
// For example, this is a pastel rainbow gradient via in="oklch longer hue".
//
// active-gradient from="#e5989b" to="#ffb4a2" angle=45 relative-to="workspace-view" in="oklch longer hue"
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
}
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
// You can think of them as a kind of outer gaps. They are set in logical pixels.
// Left and right struts will cause the next window to the side to always be visible.
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
// layer-shell panels and regular gaps.
struts {
// left 64
// right 64
// top 64
// bottom 64
}
}
cursor {
// Change the theme and size of the cursor as well as set the
// `XCURSOR_THEME` and `XCURSOR_SIZE` env variables.
// xcursor-theme "default"
// xcursor-size 24
}
hotkey-overlay {
// Uncomment this line to disable the "Important Hotkeys" pop-up at startup.
skip-at-startup
}
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
// If the client will specifically ask for CSD, the request will be honored.
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
// This option will also fix border/focus ring drawing behind some semitransparent windows.
// After enabling or disabling this, you need to restart the apps for this to take effect.
// prefer-no-csd
// You can change the path where screenshots are saved.
// A ~ at the front will be expanded to the home directory.
// The path is formatted with strftime(3) to give you the screenshot date and time.
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
// You can also set this to null to disable saving screenshots to disk.
// screenshot-path null
// Animation settings.
// The wiki explains how to configure individual animations:
// https://yalter.github.io/niri/Configuration:-Animations
animations {
// Uncomment to turn off all animations.
// off
// Slow down all animations by this factor. Values below 1 speed them up instead.
// slowdown 3.0
}
// Window rules let you adjust behavior for individual windows.
// Find more information on the wiki:
// https://yalter.github.io/niri/Configuration:-Window-Rules
layer-rule {
match namespace="waybar"
opacity 0.800000
}
+239
View File
@@ -0,0 +1,239 @@
binds {
// Keys consist of modifiers separated by + signs, followed by an XKB key name
// in the end. To find an XKB name for a particular key, you may use a program
// like wev.
//
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
// when running as a winit window.
//
// Most actions that you can bind here can also be invoked programmatically with
// `niri msg action do-something`.
// Mod-Shift-/, which is usually the same as Mod-?,
// shows a list of important hotkeys.
Mod+Shift+Slash { show-hotkey-overlay; }
// Suggested binds for running programs: terminal, app launcher, screen locker.
Mod+Return { spawn "foot"; }
Mod+Shift+Return { spawn "alacritty"; }
Mod+D { spawn "anyrun"; }
CTRL+Alt+L { spawn "swaylock"; }
// Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc.
// Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`.
// For example, this is a standard bind to toggle the screen reader (orca).
// Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; }
// Example volume keys mappings for PipeWire & WirePlumber.
// The allow-when-locked=true property makes them work even when the session is locked.
// Using spawn-sh allows to pass multiple arguments together with the command.
// "-l 1.0" limits the volume to 100%.
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+ -l 1.0"; }
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; }
XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
// Example media keys mapping using playerctl.
// This will work with any MPRIS-enabled media player.
XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; }
XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; }
XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; }
XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; }
// Example brightness key mappings for brightnessctl.
// You can use regular spawn with multiple arguments too (to avoid going through "sh"),
// but you need to manually put each argument in separate "" quotes.
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; }
// Open/close the Overview: a zoomed-out view of workspaces and windows.
// You can also move the mouse into the top-left hot corner,
// or do a four-finger swipe up on a touchpad.
// Mod+O repeat=false { toggle-overview; }
Mod+Q repeat=false { close-window; }
Mod+Left { focus-column-left; }
Mod+Down { focus-window-down; }
Mod+Up { focus-window-up; }
Mod+Right { focus-column-right; }
Mod+H { focus-column-left; }
Mod+J { focus-window-down; }
Mod+K { focus-window-up; }
Mod+L { focus-column-right; }
Mod+Ctrl+Left { move-column-left; }
Mod+Ctrl+Down { move-window-down; }
Mod+Ctrl+Up { move-window-up; }
Mod+Ctrl+Right { move-column-right; }
Mod+Ctrl+H { move-column-left; }
Mod+Ctrl+J { move-window-down; }
Mod+Ctrl+K { move-window-up; }
Mod+Ctrl+L { move-column-right; }
// Alternative commands that move across workspaces when reaching
// the first or last window in a column.
// Mod+J { focus-window-or-workspace-down; }
// Mod+K { focus-window-or-workspace-up; }
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Ctrl+Home { move-column-to-first; }
Mod+Ctrl+End { move-column-to-last; }
Mod+Shift+Left { focus-monitor-left; }
Mod+Shift+Down { focus-monitor-down; }
Mod+Shift+Up { focus-monitor-up; }
Mod+Shift+Right { focus-monitor-right; }
Mod+Shift+H { focus-monitor-left; }
Mod+Shift+J { focus-monitor-down; }
Mod+Shift+K { focus-monitor-up; }
Mod+Shift+L { focus-monitor-right; }
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
// Alternatively, there are commands to move just a single window:
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
// ...
// And you can also move a whole workspace to another monitor:
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
// ...
"Mod+Page_Down" { focus-workspace-down; }
"Mod+Page_Up" { focus-workspace-up; }
Mod+U { focus-workspace-down; }
Mod+I { focus-workspace-up; }
"Mod+Ctrl+Page_Down" { move-column-to-workspace-down; }
"Mod+Ctrl+Page_Up" { move-column-to-workspace-up; }
Mod+Ctrl+U { move-column-to-workspace-down; }
Mod+Ctrl+I { move-column-to-workspace-up; }
"Mod+Shift+Page_Down" { move-workspace-down; }
"Mod+Shift+Page_Up" { move-workspace-up; }
Mod+Shift+U { move-workspace-down; }
Mod+Shift+I { move-workspace-up; }
// You can refer to workspaces by index. However, keep in mind that
// niri is a dynamic workspace system, so these commands are kind of
// "best effort". Trying to refer to a workspace index bigger than
// the current workspace count will instead refer to the bottommost
// (empty) workspace.
//
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
// will all refer to the 3rd workspace.
Mod+1 { focus-workspace "1terminal"; }
Mod+2 { focus-workspace "2browser"; }
Mod+3 { focus-workspace "3chat"; }
Mod+4 { focus-workspace "4music"; }
Mod+5 { focus-workspace "5mail"; }
Mod+6 { focus-workspace "6file"; }
Mod+7 { focus-workspace 7; }
Mod+8 { focus-workspace 8; }
Mod+9 { focus-workspace 9; }
Mod+0 { focus-workspace "0other"; }
Mod+Ctrl+1 { move-column-to-workspace "1terminal"; }
Mod+Ctrl+2 { move-column-to-workspace "2browser"; }
Mod+Ctrl+3 { move-column-to-workspace "3chat"; }
Mod+Ctrl+4 { move-column-to-workspace "4music"; }
Mod+Ctrl+5 { move-column-to-workspace "5mail"; }
Mod+Ctrl+6 { move-column-to-workspace "6file"; }
Mod+Ctrl+7 { move-column-to-workspace 7; }
Mod+Ctrl+8 { move-column-to-workspace 8; }
Mod+Ctrl+9 { move-column-to-workspace 9; }
Mod+Ctrl+0 { move-column-to-workspace "0other"; }
// Alternatively, there are commands to move just a single window:
// Mod+Ctrl+1 { move-window-to-workspace 1; }
// Switches focus between the current and the previous workspace.
// Mod+Tab { focus-workspace-previous; }
// The following binds move the focused window in and out of a column.
// If the window is alone, they will consume it into the nearby column to the side.
// If the window is already in a column, they will expel it out.
Mod+BracketLeft { consume-or-expel-window-left; }
Mod+BracketRight { consume-or-expel-window-right; }
// Consume one window from the right to the bottom of the focused column.
Mod+Comma { consume-window-into-column; }
// Expel the bottom window from the focused column to the right.
Mod+Period { expel-window-from-column; }
Mod+R { switch-preset-column-width; }
// Cycling through the presets in reverse order is also possible.
// Mod+R { switch-preset-column-width-back; }
Mod+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
// Expand the focused column to space not taken up by other fully visible columns.
// Makes the column "fill the rest of the space".
Mod+Ctrl+F { expand-column-to-available-width; }
Mod+C { center-column; }
// Center all fully visible columns on screen.
Mod+Ctrl+C { center-visible-columns; }
// Finer width adjustments.
// This command can also:
// * set width in pixels: "1000"
// * adjust width in pixels: "-5" or "+5"
// * set width as a percentage of screen width: "25%"
// * adjust width as a percentage of screen width: "-10%" or "+10%"
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
// set-column-width "100" will make the column occupy 200 physical screen pixels.
Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; }
// Finer height adjustments when in column with other windows.
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+Shift+Equal { set-window-height "+10%"; }
// Move the focused window between the floating and the tiling layout.
Mod+V { toggle-window-floating; }
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
// Toggle tabbed column display mode.
// Windows in this column will appear as vertical tabs,
// rather than stacked on top of each other.
Mod+W { toggle-column-tabbed-display; }
// Actions to switch layouts.
// Note: if you uncomment these, make sure you do NOT have
// a matching layout switch hotkey configured in xkb options above.
// Having both at once on the same hotkey will break the switching,
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
// Mod+Space { switch-layout "next"; }
// Mod+Shift+Space { switch-layout "prev"; }
Print { screenshot; }
Ctrl+Print { screenshot-screen; }
Alt+Print { screenshot-window; }
// Applications such as remote-desktop clients and software KVM switches may
// request that niri stops processing the keyboard shortcuts defined here
// so they may, for example, forward the key presses as-is to a remote machine.
// It's a good idea to bind an escape hatch to toggle the inhibitor,
// so a buggy application can't hold your session hostage.
//
// The allow-inhibiting=false property can be applied to other binds as well,
// which ensures niri always processes them, even when an inhibitor is active.
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
Mod+Shift+E { wlogout; }
// The quit action will show a confirmation dialog to avoid accidental exits.
Ctrl+Alt+Delete { quit; }
// Powers off the monitors. To turn them back on, do any input like
// moving the mouse or pressing any other key.
Mod+Shift+P { power-off-monitors; }
}
@@ -0,0 +1,26 @@
// Add lines like this to spawn processes at startup.
// Note that running niri as a session supports xdg-desktop-autostart,
// which may be more convenient to use.
// See the binds section below for more spawn examples.
// This line starts waybar, a commonly used bar for Wayland compositors.
// spawn-at-startup "waybar"
// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup:
// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell"
// Terminal applications
spawn-at-startup "foot"
spawn-at-startup "alacritty"
spawn-at-startup "ghostty"
// Network proxy
spawn-at-startup "clash-verge"
// Web browsers
spawn-at-startup "firefox"
spawn-at-startup "google-chrome-stable"
spawn-at-startup "chromium-browser"
// Communication applications
spawn-at-startup "Telegram"
+103
View File
@@ -0,0 +1,103 @@
// Window rules let you adjust behavior for individual windows.
// Find more information on the wiki:
// https://yalter.github.io/niri/Configuration:-Window-Rules
// Terminal applications - open in workspace 1
window-rule {
match app-id="foot"
open-on-workspace "1terminal"
open-maximized true
}
window-rule {
match app-id="Alacritty"
open-on-workspace "1terminal"
open-maximized true
}
window-rule {
match app-id="com.mitchellh.ghostty"
open-on-workspace "1terminal"
open-maximized true
}
// Web browsers - open in workspace 2
window-rule {
match app-id="firefox"
open-on-workspace "2browser"
open-maximized true
}
window-rule {
match app-id="google-chrome"
open-on-workspace "2browser"
open-maximized true
}
window-rule {
match app-id="chromium-browser"
open-on-workspace "2browser"
open-maximized true
}
// Chat applications - open in workspace 3
window-rule {
match app-id="org.telegram.desktop"
open-on-workspace "3chat"
}
window-rule {
match app-id="wechat"
open-on-workspace "3chat"
}
window-rule {
match app-id="QQ"
open-on-workspace "3chat"
}
// Gaming applications - open in workspace 4
window-rule {
match app-id="steam"
open-on-workspace "4gaming"
}
window-rule {
match app-id="steam_app_default"
open-on-workspace "4gaming"
}
window-rule {
match app-id="heroic"
open-on-workspace "4gaming"
}
window-rule {
match app-id="net.lutris.Lutris"
open-on-workspace "4gaming"
}
window-rule {
match app-id="com.vysp3r.ProtonPlus"
open-on-workspace "4gaming"
}
window-rule {
// Run anime games on Linux
match app-id="^moe.launcher"
open-on-workspace "4gaming"
}
window-rule {
// All *.exe (Windows applications)
match app-id=".exe$"
open-on-workspace "4gaming"
}
// File management applications - open in workspace 6
window-rule {
match app-id="com.github.johnfactotum.Foliate"
open-on-workspace "6file"
}
window-rule {
match app-id="thunar"
open-on-workspace "6file"
}
// Other applications - open in workspace 0
window-rule {
match app-id="clash-verge"
open-on-workspace "0other"
}
window-rule {
match app-id="Zoom Workplace"
open-on-workspace "0other"
}
+29 -27
View File
@@ -2,7 +2,6 @@
pkgs,
config,
lib,
niri,
...
}@args:
let
@@ -11,27 +10,6 @@ in
{
options.modules.desktop.niri = {
enable = lib.mkEnableOption "niri compositor";
settings = lib.mkOption {
type =
with lib.types;
let
valueType =
nullOr (oneOf [
bool
int
float
str
path
(attrsOf valueType)
(listOf valueType)
])
// {
description = "niri configuration value";
};
in
valueType;
default = { };
};
};
config = lib.mkIf cfg.enable (
@@ -42,7 +20,35 @@ in
xwayland-satellite
];
programs.niri.config = cfg.settings;
xdg.configFile =
let
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
confPath = "${config.home.homeDirectory}/nix-config/home/linux/gui/niri/conf";
in
{
"niri/config.kdl".source = mkSymlink "${confPath}/config.kdl";
"niri/keybindings.kdl".source = mkSymlink "${confPath}/keybindings.kdl";
"niri/spawn-at-startup.kdl".source = mkSymlink "${confPath}/spawn-at-startup.kdl";
"niri/windowrules.kdl".source = mkSymlink "${confPath}/windowrules.kdl";
};
systemd.user.services.niri-flake-polkit = {
Unit = {
Description = "PolicyKit Authentication Agent provided by niri-flake";
After = [
"graphical-session.target"
];
Wants = [ "graphical-session-pre.target" ];
};
Install.WantedBy = [ "niri.service" ];
Service = {
Type = "simple";
ExecStart = "${pkgs.kdePackages.polkit-kde-agent-1}/libexec/polkit-kde-authentication-agent-1";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
# NOTE: this executable is used by greetd to start a wayland session when system boot up
# with such a vendor-no-locking script, we can switch to another wayland compositor without modifying greetd's config in NixOS module
@@ -56,10 +62,6 @@ in
executable = true;
};
}
(import ./settings.nix niri)
(import ./keybindings.nix niri)
(import ./spawn-at-startup.nix niri)
(import ./windowrules.nix niri)
]
);
-214
View File
@@ -1,214 +0,0 @@
niri: {
programs.niri.config =
let
inherit (niri.lib.kdl)
node
plain
leaf
flag
;
in
[
(plain "binds" [
# Keys consist of modifiers separated by + signs, followed by an XKB key name
# in the end. To find an XKB name for a particular key, you may use a program
# like wev.
#
# "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
# when running as a winit window.
#
# Most actions that you can bind here can also be invoked programmatically with
# `niri msg action do-something`.
# Mod-Shift-/, which is usually the same as Mod-?,
# shows a list of important hotkeys.
(plain "Mod+Shift+Slash" [ (flag "show-hotkey-overlay") ])
# Suggested binds for running programs: terminal, app launcher, screen locker.
(plain "Mod+Return" [ (leaf "spawn" [ "foot" ]) ])
(plain "Mod+Shift+Return" [ (leaf "spawn" [ "alacritty" ]) ])
(plain "Mod+D" [ (leaf "spawn" [ "anyrun" ]) ])
(plain "CTRL+Alt+L" [ (leaf "spawn" [ "swaylock" ]) ])
# You can also use a shell:
# (plain "Mod+T" [(leaf "spawn" [ "bash" "-c" "notify-send hello && exec alacritty" ])])
# Example volume keys mappings for PipeWire & WirePlumber.
(plain "XF86AudioRaiseVolume" [
(leaf "spawn" [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.1+"
])
])
(plain "XF86AudioLowerVolume" [
(leaf "spawn" [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.1-"
])
])
(plain "Mod+Q" [ (flag "close-window") ])
(plain "Mod+Left" [ (flag "focus-column-left") ])
(plain "Mod+Down" [ (flag "focus-window-down") ])
(plain "Mod+Up" [ (flag "focus-window-up") ])
(plain "Mod+Right" [ (flag "focus-column-right") ])
(plain "Mod+H" [ (flag "focus-column-left") ])
(plain "Mod+J" [ (flag "focus-window-down") ])
(plain "Mod+K" [ (flag "focus-window-up") ])
(plain "Mod+L" [ (flag "focus-column-right") ])
(plain "Mod+Ctrl+Left" [ (flag "move-column-left") ])
(plain "Mod+Ctrl+Down" [ (flag "move-window-down") ])
(plain "Mod+Ctrl+Up" [ (flag "move-window-up") ])
(plain "Mod+Ctrl+Right" [ (flag "move-column-right") ])
(plain "Mod+Ctrl+H" [ (flag "move-column-left") ])
(plain "Mod+Ctrl+J" [ (flag "move-window-down") ])
(plain "Mod+Ctrl+K" [ (flag "move-window-up") ])
(plain "Mod+Ctrl+L" [ (flag "move-column-right") ])
# Alternative commands that move across workspaces when reaching
# the first or last window in a column.
# (plain "Mod+J" [(flag "focus-window-or-workspace-down")])
# (plain "Mod+K" [(flag "focus-window-or-workspace-up")])
# (plain "Mod+Ctrl+J" [(flag "move-window-down-or-to-workspace-down")])
# (plain "Mod+Ctrl+K" [(flag "move-window-up-or-to-workspace-up")])
(plain "Mod+Home" [ (flag "focus-column-first") ])
(plain "Mod+End" [ (flag "focus-column-last") ])
(plain "Mod+Ctrl+Home" [ (flag "move-column-to-first") ])
(plain "Mod+Ctrl+End" [ (flag "move-column-to-last") ])
(plain "Mod+Shift+Left" [ (flag "focus-monitor-left") ])
(plain "Mod+Shift+Down" [ (flag "focus-monitor-down") ])
(plain "Mod+Shift+Up" [ (flag "focus-monitor-up") ])
(plain "Mod+Shift+Right" [ (flag "focus-monitor-right") ])
(plain "Mod+Shift+H" [ (flag "focus-monitor-left") ])
(plain "Mod+Shift+J" [ (flag "focus-monitor-down") ])
(plain "Mod+Shift+K" [ (flag "focus-monitor-up") ])
(plain "Mod+Shift+L" [ (flag "focus-monitor-right") ])
(plain "Mod+Shift+Ctrl+Left" [ (flag "move-column-to-monitor-left") ])
(plain "Mod+Shift+Ctrl+Down" [ (flag "move-column-to-monitor-down") ])
(plain "Mod+Shift+Ctrl+Up" [ (flag "move-column-to-monitor-up") ])
(plain "Mod+Shift+Ctrl+Right" [ (flag "move-column-to-monitor-right") ])
(plain "Mod+Shift+Ctrl+H" [ (flag "move-column-to-monitor-left") ])
(plain "Mod+Shift+Ctrl+J" [ (flag "move-column-to-monitor-down") ])
(plain "Mod+Shift+Ctrl+K" [ (flag "move-column-to-monitor-up") ])
(plain "Mod+Shift+Ctrl+L" [ (flag "move-column-to-monitor-right") ])
# Alternatively, there are commands to move just a single window:
# (plain "Mod+Shift+Ctrl+Left" [(flag "move-window-to-monitor-left")])
# ...
# And you can also move a whole workspace to another monitor:
# (plain "Mod+Shift+Ctrl+Left" [(flag "move-workspace-to-monitor-left")])
# ...
(plain "Mod+Page_Down" [ (flag "focus-workspace-down") ])
(plain "Mod+Page_Up" [ (flag "focus-workspace-up") ])
(plain "Mod+U" [ (flag "focus-workspace-down") ])
(plain "Mod+I" [ (flag "focus-workspace-up") ])
(plain "Mod+Ctrl+Page_Down" [ (flag "move-column-to-workspace-down") ])
(plain "Mod+Ctrl+Page_Up" [ (flag "move-column-to-workspace-up") ])
(plain "Mod+Ctrl+U" [ (flag "move-column-to-workspace-down") ])
(plain "Mod+Ctrl+I" [ (flag "move-column-to-workspace-up") ])
# Alternatively, there are commands to move just a single window:
# (plain "Mod+Ctrl+Page_Down" [(flag "move-window-to-workspace-down")])
# ...
(plain "Mod+Shift+Page_Down" [ (flag "move-workspace-down") ])
(plain "Mod+Shift+Page_Up" [ (flag "move-workspace-up") ])
(plain "Mod+Shift+U" [ (flag "move-workspace-down") ])
(plain "Mod+Shift+I" [ (flag "move-workspace-up") ])
# You can refer to workspaces by index. However, keep in mind that
# niri is a dynamic workspace system, so these commands are kind of
# "best effort". Trying to refer to a workspace index bigger than
# the current workspace count will instead refer to the bottommost
# (empty) workspace.
#
# For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
# will all refer to the 3rd workspace.
(plain "Mod+1" [ (leaf "focus-workspace" "1terminal") ])
(plain "Mod+2" [ (leaf "focus-workspace" "2browser") ])
(plain "Mod+3" [ (leaf "focus-workspace" "3chat") ])
(plain "Mod+4" [ (leaf "focus-workspace" "4music") ])
(plain "Mod+5" [ (leaf "focus-workspace" "5mail") ])
(plain "Mod+6" [ (leaf "focus-workspace" "6file") ])
(plain "Mod+7" [ (leaf "focus-workspace" 7) ])
(plain "Mod+8" [ (leaf "focus-workspace" 8) ])
(plain "Mod+9" [ (leaf "focus-workspace" 9) ])
(plain "Mod+0" [ (leaf "focus-workspace" "0other") ])
(plain "Mod+Ctrl+1" [ (leaf "move-column-to-workspace" "1terminal") ])
(plain "Mod+Ctrl+2" [ (leaf "move-column-to-workspace" "2browser") ])
(plain "Mod+Ctrl+3" [ (leaf "move-column-to-workspace" "3chat") ])
(plain "Mod+Ctrl+4" [ (leaf "move-column-to-workspace" "4music") ])
(plain "Mod+Ctrl+5" [ (leaf "move-column-to-workspace" "5mail") ])
(plain "Mod+Ctrl+6" [ (leaf "move-column-to-workspace" "6file") ])
(plain "Mod+Ctrl+7" [ (leaf "move-column-to-workspace" 7) ])
(plain "Mod+Ctrl+8" [ (leaf "move-column-to-workspace" 8) ])
(plain "Mod+Ctrl+9" [ (leaf "move-column-to-workspace" 9) ])
(plain "Mod+Ctrl+0" [ (leaf "move-column-to-workspace" "0other") ])
# Alternatively, there are commands to move just a single window:
# (plain "Mod+Ctrl+1" [(leaf "move-window-to-workspace" 1)])
(plain "Mod+Comma" [ (flag "consume-window-into-column") ])
(plain "Mod+Period" [ (flag "expel-window-from-column") ])
# There are also commands that consume or expel a single window to the side.
# (plain "Mod+BracketLeft" [(flag "consume-or-expel-window-left")])
# (plain "Mod+BracketRight" [(flag "consume-or-expel-window-right")])
(plain "Mod+R" [ (flag "switch-preset-column-width") ])
(plain "Mod+F" [ (flag "maximize-column") ])
(plain "Mod+Shift+F" [ (flag "fullscreen-window") ])
(plain "Mod+C" [ (flag "center-column") ])
# Finer width adjustments.
# This command can also:
# * set width in pixels: "1000"
# * adjust width in pixels: "-5" or "+5"
# * set width as a percentage of screen width: "25%"
# * adjust width as a percentage of screen width: "-10%" or "+10%"
# Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
# (leaf "set-column-width" "100") will make the column occupy 200 physical screen pixels.
(plain "Mod+Minus" [ (leaf "set-column-width" "-10%") ])
(plain "Mod+Equal" [ (leaf "set-column-width" "+10%") ])
# Finer height adjustments when in column with other windows.
(plain "Mod+Shift+Minus" [ (leaf "set-window-height" "-10%") ])
(plain "Mod+Shift+Equal" [ (leaf "set-window-height" "+10%") ])
# Actions to switch layouts.
# Note: if you uncomment these, make sure you do NOT have
# a matching layout switch hotkey configured in xkb options above.
# Having both at once on the same hotkey will break the switching,
# since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
# (plain "Mod+Space" [(leaf "switch-layout" "next")])
# (plain "Mod+Shift+Space" [(leaf "switch-layout" "prev")])
# Take an area screenshot. Select the area to screenshot with mouse
(plain "Print" [ (flag "screenshot") ])
# Take a screenshot of the focused monitor
(plain "Ctrl+Print" [ (flag "screenshot-screen") ])
# Take a screenshot of the focused window
(plain "Alt+Print" [ (flag "screenshot-window") ])
(plain "Mod+Shift+E" [ (leaf "spawn" [ "wlogout" ]) ])
(plain "Mod+Shift+P" [ (flag "power-off-monitors") ])
# This debug bind will tint all surfaces green, unless they are being
# directly scanned out. It's therefore useful to check if direct scanout
# is working.
# (plain "Mod+Shift+Ctrl+T" [(flag "toggle-debug-tint")])
])
];
}
-276
View File
@@ -1,276 +0,0 @@
niri: {
programs.niri.config =
let
inherit (niri.lib.kdl)
node
plain
leaf
flag
;
in
[
(plain "input" [
(plain "keyboard" [
(plain "xkb" [
# You can set rules, model, layout, variant and options.
# For more information, see xkeyboard-config(7).
# For example:
# (leaf "layout" "us,ru")
# (leaf "options" "grp:win_space_toggle,compose:ralt,ctrl:nocaps")
])
# You can set the keyboard repeat parameters. The defaults match wlroots and sway.
# Delay is in milliseconds before the repeat starts. Rate is in characters per second.
# (leaf "repeat-delay" 600)
# (leaf "repeat-rate" 25)
# Niri can remember the keyboard layout globally (the default) or per-window.
# - "global" - layout change is global for all windows.
# - "window" - layout is tracked for each window individually.
# (leaf "track-layout" "global")
])
# Next sections include libinput settings.
# Omitting settings disables them, or leaves them at their default values.
(plain "touchpad" [
# (flag "tap") # tap-to-click
(flag "dwt") # disable-when-typing.
# (flag "dwtp") # disable-when-trackpointing.
(flag "natural-scroll") # inverts the scrolling direction.
# (leaf "accel-speed" 0.2)
# (leaf "accel-profile" "flat")
# (leaf "tap-button-map" "left-middle-right")
])
(plain "mouse" [
# (flag "natural-scroll") # inverts the scrolling direction.
# (leaf "accel-speed" 0.2)
# (leaf "accel-profile" "flat")
])
# By default, niri will take over the power button to make it sleep
# instead of power off.
# Uncomment this if you would like to configure the power button elsewhere
# (i.e. logind.conf).
# (flag "disable-power-key-handling")
])
(plain "layout" [
# By default focus ring and border are rendered as a solid background rectangle
# behind windows. That is, they will show up through semitransparent windows.
# This is because windows using client-side decorations can have an arbitrary shape.
#
# If you don't like that, you should uncomment `prefer-no-csd` below.
# Niri will draw focus ring and border *around* windows that agree to omit their
# client-side decorations.
# You can change how the focus ring looks.
(plain "focus-ring" [
# Uncomment this line to disable the focus ring.
# (flag "off")
# How many logical pixels the ring extends out from the windows.
(leaf "width" 4)
# Colors can be set in a variety of ways:
# - CSS named colors: "red"
# - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
# - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
# Color of the ring on the active monitor.
(leaf "active-color" "#7fc8ff")
# Color of the ring on inactive monitors.
(leaf "inactive-color" "#505050")
# Additionally, there's a legacy RGBA syntax:
# (leaf "active-color" [ 127 200 255 255 ])
# You can also use gradients. They take precedence over solid colors.
# Gradients are rendered the same as CSS linear-gradient(angle, from, to).
# The angle is the same as in linear-gradient, and is optional,
# defaulting to 180 (top-to-bottom gradient).
# You can use any CSS linear-gradient tool on the web to set these up.
#
# (leaf "active-gradient" { from="#80c8ff"; to="#bbddff"; angle=45; })
# You can also color the gradient relative to the entire view
# of the workspace, rather than relative to just the window itself.
# To do that, set relative-to="workspace-view";
#
# (leaf "inactive-gradient" { from="#505050"; to="#808080"; angle=45; relative-to="workspace-view"; })
])
# You can also add a border. It's similar to the focus ring, but always visible.
(plain "border" [
# The settings are the same as for the focus ring.
# If you enable the border, you probably want to disable the focus ring.
(flag "off")
(leaf "width" 4)
(leaf "active-color" "#ffc87f")
(leaf "inactive-color" "#505050")
# (leaf "active-gradient" { from="#ffbb66"; to="#ffc880"; angle=45; relative-to="workspace-view"; })
# (leaf "inactive-gradient" { from="#505050"; to="#808080"; angle=45; relative-to="workspace-view"; })
])
# You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
(plain "preset-column-widths" [
# Proportion sets the width as a fraction of the output width, taking gaps into account.
# For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
# The default preset widths are 1/3, 1/2 and 2/3 of the output.
(leaf "proportion" (1.0 / 3.0))
(leaf "proportion" (1.0 / 2.0))
(leaf "proportion" (2.0 / 3.0))
# Fixed sets the width in logical pixels exactly.
# (leaf "fixed" 1920)
])
# You can change the default width of the new windows.
(plain "default-column-width" [
(leaf "proportion" 0.5)
])
# If you leave the children empty, the windows themselves will decide their initial width.
# (plain "default-column-width" [])
# Set gaps around windows in logical pixels.
(leaf "gaps" 8)
# Struts shrink the area occupied by windows, similarly to layer-shell panels.
# You can think of them as a kind of outer gaps. They are set in logical pixels.
# Left and right struts will cause the next window to the side to always be visible.
# Top and bottom struts will simply add outer gaps in addition to the area occupied by
# layer-shell panels and regular gaps.
(plain "struts" [
# (leaf "left" 64)
# (leaf "right" 64)
# (leaf "top" 64)
# (leaf "bottom" 64)
])
# When to center a column when changing focus, options are:
# - "never", default behavior, focusing an off-screen column will keep at the left
# or right edge of the screen.
# - "on-overflow", focusing a column will center it if it doesn't fit
# together with the previously focused column.
# - "always", the focused column will always be centered.
(leaf "center-focused-column" "never")
])
(plain "cursor" [
# Change the theme and size of the cursor as well as set the
# `XCURSOR_THEME` and `XCURSOR_SIZE` env variables.
# (leaf "xcursor-theme" "default")
# (leaf "xcursor-size" 24)
])
# Uncomment this line to ask the clients to omit their client-side decorations if possible.
# If the client will specifically ask for CSD, the request will be honored.
# Additionally, clients will be informed that they are tiled, removing some rounded corners.
# (flag "prefer-no-csd")
# You can change the path where screenshots are saved.
# A ~ at the front will be expanded to the home directory.
# The path is formatted with strftime(3) to give you the screenshot date and time.
(leaf "screenshot-path" "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png")
# You can also set this to null to disable saving screenshots to disk.
# (leaf "screenshot-path" null)
# Settings for the "Important Hotkeys" overlay.
(plain "hotkey-overlay" [
# Uncomment this line if you don't want to see the hotkey help at niri startup.
# (flag "skip-at-startup")
])
(plain "layer-rule" [
(leaf "match" { namespace = "waybar"; })
(leaf "opacity" 0.8)
])
# Animation settings.
(plain "animations" [
# Uncomment to turn off all animations.
# (flag "off")
# Slow down all animations by this factor. Values below 1 speed them up instead.
# (leaf "slowdown" 3.0)
# You can configure all individual animations.
# Available settings are the same for all of them.
# - off disables the animation.
#
# Niri supports two animation types: easing and spring.
# You can set properties for only ONE of them.
#
# Easing has the following settings:
# - duration-ms sets the duration of the animation in milliseconds.
# - curve sets the easing curve. Currently, available curves
# are "ease-out-cubic" and "ease-out-expo".
#
# Spring animations work better with touchpad gestures, because they
# take into account the velocity of your fingers as you release the swipe.
# The parameters are less obvious and generally should be tuned
# with trial and error. Notably, you cannot directly set the duration.
# You can use this app to help visualize how the spring parameters
# change the animation: https://flathub.org/apps/app.drey.Elastic
#
# A spring animation is configured like this:
# - (leaf "spring" { damping-ratio=1.0; stiffness=1000; epsilon=0.0001; })
#
# The damping ratio goes from 0.1 to 10.0 and has the following properties:
# - below 1.0: underdamped spring, will oscillate in the end.
# - above 1.0: overdamped spring, won't oscillate.
# - 1.0: critically damped spring, comes to rest in minimum possible time
# without oscillations.
#
# However, even with damping ratio = 1.0 the spring animation may oscillate
# if "launched" with enough velocity from a touchpad swipe.
#
# Lower stiffness will result in a slower animation more prone to oscillation.
#
# Set epsilon to a lower value if the animation "jumps" in the end.
#
# The spring mass is hardcoded to 1.0 and cannot be changed. Instead, change
# stiffness proportionally. E.g. increasing mass by 2x is the same as
# decreasing stiffness by 2x.
# Animation when switching workspaces up and down,
# including after the touchpad gesture.
(plain "workspace-switch" [
# (flag "off")
# (leaf "spring" { damping-ratio=1.0; stiffness=1000; epsilon=0.0001; })
])
# All horizontal camera view movement:
# - When a window off-screen is focused and the camera scrolls to it.
# - When a new window appears off-screen and the camera scrolls to it.
# - When a window resizes bigger and the camera scrolls to show it in full.
# - And so on.
(plain "horizontal-view-movement" [
# (flag "off")
# (leaf "spring" { damping-ratio=1.0; stiffness=800; epsilon=0.0001; })
])
# Window opening animation. Note that this one has different defaults.
(plain "window-open" [
# (flag "off")
# (leaf "duration-ms" 150)
# (leaf "curve" "ease-out-expo")
# Example for a slightly bouncy window opening:
# (leaf "spring" { damping-ratio=0.8; stiffness=1000; epsilon=0.0001; })
])
# Config parse error and new default config creation notification
# open/close animation.
(plain "config-notification-open-close" [
# (flag "off")
# (leaf "spring" { damping-ratio=0.6; stiffness=1000; epsilon=0.001; })
])
])
];
}
-28
View File
@@ -1,28 +0,0 @@
niri: {
programs.niri.config =
let
inherit (niri.lib.kdl)
node
plain
leaf
flag
;
in
[
# Add lines like this to spawn processes at startup.
# Note that running niri as a session supports xdg-desktop-autostart,
# which may be more convenient to use.
# --------------- Terminal ---------------
(leaf "spawn-at-startup" [ "foot" ])
(leaf "spawn-at-startup" [ "alacritty" ])
(leaf "spawn-at-startup" [ "ghostty" ])
# --------------- Networking ---------------
(leaf "spawn-at-startup" [ "clash-verge" ])
# --------------- Browser ---------------
(leaf "spawn-at-startup" [ "firefox" ])
(leaf "spawn-at-startup" [ "google-chrome-stable" ])
(leaf "spawn-at-startup" [ "chromium-browser" ])
# --------------- Chatting ---------------
(leaf "spawn-at-startup" [ "Telegram" ])
];
}
-122
View File
@@ -1,122 +0,0 @@
niri: {
programs.niri.config =
let
inherit (niri.lib.kdl)
node
plain
leaf
flag
;
in
[
# ============= Window Rules =============
# Get all the window's information via:
# niri msg windows
# --------------- 1Terminal ---------------
(plain "window-rule" [
(leaf "match" { app-id = "foot"; })
(leaf "open-on-workspace" "1terminal")
(leaf "open-maximized" true)
])
(plain "window-rule" [
(leaf "match" { app-id = "Alacritty"; })
(leaf "open-on-workspace" "1terminal")
(leaf "open-maximized" true)
])
(plain "window-rule" [
(leaf "match" { app-id = "com.mitchellh.ghostty"; })
(leaf "open-on-workspace" "1terminal")
(leaf "open-maximized" true)
])
# --------------- 2Browser ---------------
(plain "window-rule" [
(leaf "match" { app-id = "firefox"; })
(leaf "open-on-workspace" "2browser")
(leaf "open-maximized" true)
])
(plain "window-rule" [
(leaf "match" { app-id = "google-chrome"; })
(leaf "open-on-workspace" "2browser")
(leaf "open-maximized" true)
])
(plain "window-rule" [
(leaf "match" { app-id = "chromium-browser"; })
(leaf "open-on-workspace" "2browser")
(leaf "open-maximized" true)
])
# --------------- 3Chatting ---------------
(plain "window-rule" [
(leaf "match" { app-id = "org.telegram.desktop"; })
(leaf "open-on-workspace" "3chat")
])
(plain "window-rule" [
(leaf "match" { app-id = "wechat"; })
(leaf "open-on-workspace" "3chat")
])
(plain "window-rule" [
(leaf "match" { app-id = "QQ"; })
(leaf "open-on-workspace" "3chat")
])
# --------------- 4Gaming ---------------
(plain "window-rule" [
(leaf "match" { app-id = "steam"; })
(leaf "open-on-workspace" "4gaming")
])
(plain "window-rule" [
(leaf "match" { app-id = "steam_app_default"; })
(leaf "open-on-workspace" "4gaming")
])
(plain "window-rule" [
(leaf "match" { app-id = "heroic"; })
(leaf "open-on-workspace" "4gaming")
])
(plain "window-rule" [
(leaf "match" { app-id = "net.lutris.Lutris"; })
(leaf "open-on-workspace" "4gaming")
])
(plain "window-rule" [
(leaf "match" { app-id = "com.vysp3r.ProtonPlus"; })
(leaf "open-on-workspace" "4gaming")
])
(plain "window-rule" [
# Run anime games on Linux
(leaf "match" { app-id = "^moe.launcher"; })
(leaf "open-on-workspace" "4gaming")
])
(plain "window-rule" [
# All *.exe (Windows APPs)
(leaf "match" { app-id = "\.exe$"; })
(leaf "open-on-workspace" "4gaming")
])
# --------------- 6File ---------------
(plain "window-rule" [
(leaf "match" { app-id = "com.github.johnfactotum.Foliate"; })
(leaf "open-on-workspace" "6file")
])
(plain "window-rule" [
(leaf "match" { app-id = "thunar"; })
(leaf "open-on-workspace" "6file")
])
# --------------- 0Other ---------------
(plain "window-rule" [
(leaf "match" { app-id = "clash-verge"; })
(leaf "open-on-workspace" "0other")
])
(plain "window-rule" [
(leaf "match" { app-id = "Zoom Workplace"; })
(leaf "open-on-workspace" "0other")
])
];
}
+23 -3
View File
@@ -1,7 +1,9 @@
{
pkgs-unstable,
lib,
pkgs,
nixos-apple-silicon,
my-asahi-firmware,
nixpkgs-mesa,
...
}:
{
@@ -9,7 +11,25 @@
nixos-apple-silicon.nixosModules.default
];
environment.systemPackages = with pkgs-unstable; [
zramSwap.memoryPercent = lib.mkForce 75;
# Workaround for Mesa 25.3.1 regression
# https://github.com/nix-community/nixos-apple-silicon/issues/380
# https://github.com/NixOS/nixpkgs/pull/461866
hardware.graphics.package =
assert pkgs.mesa.version == "25.3.1";
(import nixpkgs-mesa { localSystem = pkgs.stdenv.hostPlatform; }).mesa;
nix.settings = {
extra-substituters = [
"https://nixos-apple-silicon.cachix.org"
];
extra-trusted-public-keys = [
"nixos-apple-silicon.cachix.org-1:8psDu5SA5dAD7qA0zMy5UT292TxeEPzIz8VVEr2Js20="
];
};
environment.systemPackages = with pkgs; [
box64 # Linux Userspace x86 and x86_64 Emulator, run x86_64 apps(such as games, gui apps) on aarch64.
# https://asahilinux.org/2024/12/muvm-x11-bridging/
# https://github.com/nix-community/nixos-apple-silicon/issues/237
@@ -57,7 +77,7 @@
# After adding this snippet, you need to restart the system for the touchbar to work.
hardware.apple.touchBar = {
enable = true;
package = pkgs-unstable.tiny-dfr;
package = pkgs.tiny-dfr;
# https://github.com/WhatAmISupposedToPutHere/tiny-dfr/blob/master/share/tiny-dfr/config.toml
settings = {
# F{number} keys are shown when Fn is not pressed by default.
+4 -41
View File
@@ -1,6 +1,7 @@
{ config, niri, ... }:
{ config, ... }:
let
hostName = "shoukei"; # Define your hostname.
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
in
{
programs.ssh.matchBlocks."github.com".identityFile =
@@ -11,44 +12,6 @@ in
"${config.home.homeDirectory}/nix-config/hosts/12kingdoms-shoukei/hypr-hardware.conf"
];
modules.desktop.niri = {
settings =
let
inherit (niri.lib.kdl)
node
plain
leaf
flag
;
in
[
(node "output" "eDP-1" [
(leaf "scale" 1.5)
(leaf "transform" "normal")
(leaf "mode" "2560x1600@60")
(leaf "position" {
x = 0;
y = 0;
})
])
# ============= Named Workspaces =============
(node "workspace" "1terminal" [ (leaf "open-on-output" "eDP-1") ])
(node "workspace" "2browser" [ (leaf "open-on-output" "eDP-1") ])
(node "workspace" "3chat" [ (leaf "open-on-output" "eDP-1") ])
(node "workspace" "4music" [ (leaf "open-on-output" "eDP-1") ])
(node "workspace" "5mail" [ (leaf "open-on-output" "eDP-1") ])
(node "workspace" "6file" [ (leaf "open-on-output" "eDP-1") ])
(node "workspace" "0other" [ (leaf "open-on-output" "eDP-1") ])
# Settings for debugging. Not meant for normal use.
# These can change or stop working at any point with little notice.
(plain "debug" [
# Override the DRM device that niri will use for all rendering.
# Fix: niri fails to correctly detect the primary render device
(leaf "render-drm-device" "/dev/dri/renderD128")
])
];
};
xdg.configFile."niri/niri-hardware.kdl".source =
mkSymlink "${config.home.homeDirectory}/nix-config/hosts/12kingdoms-shoukei/niri-hardware.kdl";
}
@@ -0,0 +1,15 @@
output "eDP-1" {
scale 1.500000
transform "normal"
mode "2560x1600@60"
position x=0 y=0
}
workspace "1terminal" { open-on-output "eDP-1"; }
workspace "2browser" { open-on-output "eDP-1"; }
workspace "3chat" { open-on-output "eDP-1"; }
workspace "4music" { open-on-output "eDP-1"; }
workspace "5mail" { open-on-output "eDP-1"; }
workspace "6file" { open-on-output "eDP-1"; }
workspace "0other" { open-on-output "eDP-1"; }
debug { render-drm-device "/dev/dri/renderD128"; }
+2 -7
View File
@@ -1,19 +1,14 @@
{
pkgs,
nixpkgs-ollama,
...
}:
let
pkgs-ollama = import nixpkgs-ollama {
inherit (pkgs) system;
# To use cuda, we need to allow the installation of non-free software
config.allowUnfree = true;
};
in
{
services.ollama = rec {
enable = true;
package = pkgs-ollama.ollama;
package = pkgs.ollama;
acceleration = "cuda";
host = "0.0.0.0";
port = 11434;
+1 -1
View File
@@ -69,5 +69,5 @@ in
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "25.05"; # Did you read the comment?
system.stateVersion = "25.11"; # Did you read the comment?
}
+6 -68
View File
@@ -1,4 +1,7 @@
{ config, niri, ... }:
{ config, ... }:
let
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
in
{
programs.ssh.matchBlocks."github.com".identityFile = "${config.home.homeDirectory}/.ssh/idols-ai";
@@ -7,71 +10,6 @@
modules.desktop.hyprland.settings.source = [
"${config.home.homeDirectory}/nix-config/hosts/idols-ai/hypr-hardware.conf"
];
modules.desktop.niri = {
settings =
let
inherit (niri.lib.kdl)
node
plain
leaf
flag
;
in
[
# running `niri msg outputs` to find outputs
(node "output" "DP-2" [
# Uncomment this line to disable this output.
# (flag "off")
# Scale is a floating-point number, but at the moment only integer values work.
(leaf "scale" 1.5)
# Transform allows to rotate the output counter-clockwise, valid values are:
# normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
(leaf "transform" "normal")
# Resolution and, optionally, refresh rate of the output.
# The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
# If the refresh rate is omitted, niri will pick the highest refresh rate
# for the resolution.
# If the mode is omitted altogether or is invalid, niri will pick one automatically.
# Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
(leaf "mode" "3840x2160@144")
# Position of the output in the global coordinate space.
# This affects directional monitor actions like "focus-monitor-left", and cursor movement.
# The cursor can only move between directly adjacent outputs.
# Output scale has to be taken into account for positioning:
# outputs are sized in logical, or scaled, pixels.
# For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
# so to put another output directly adjacent to it on the right, set its x to 1920.
# It the position is unset or results in an overlap, the output is instead placed
# automatically.
(leaf "position" {
x = 0;
y = 0;
})
])
(node "output" "HDMI-A-1" [
(leaf "scale" 1.5)
(leaf "transform" "normal")
(leaf "mode" "3840x2160@60")
(leaf "position" {
x = 2560; # on the right of DP-2
y = 0;
})
])
# ============= Named Workspaces =============
(node "workspace" "2browser" [ (leaf "open-on-output" "DP-2") ])
(node "workspace" "4gaming" [ (leaf "open-on-output" "DP-2") ])
(node "workspace" "5music" [ (leaf "open-on-output" "DP-2") ])
(node "workspace" "1terminal" [ (leaf "open-on-output" "HDMI-A-1") ])
(node "workspace" "3chat" [ (leaf "open-on-output" "HDMI-A-1") ])
(node "workspace" "6file" [ (leaf "open-on-output" "HDMI-A-1") ])
(node "workspace" "0other" [ (leaf "open-on-output" "HDMI-A-1") ])
];
};
xdg.configFile."niri/niri-hardware.kdl".source =
mkSymlink "${config.home.homeDirectory}/nix-config/hosts/idols-ai/niri-hardware.kdl";
}
+47
View File
@@ -0,0 +1,47 @@
// running `niri msg outputs` to find outputs
output "DP-2" {
// Uncomment this line to disable this output.
// off
// Scale is a floating-point number, but at the moment only integer values work.
scale 1.5
// Transform allows to rotate the output counter-clockwise, valid values are:
// normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
transform "normal"
// Resolution and, optionally, refresh rate of the output.
// The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
// If the refresh rate is omitted, niri will pick the highest refresh rate
// for the resolution.
// If the mode is omitted altogether or is invalid, niri will pick one automatically.
// Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
mode "3840x2160@144"
// Position of the output in the global coordinate space.
// This affects directional monitor actions like "focus-monitor-left", and cursor movement.
// The cursor can only move between directly adjacent outputs.
// Output scale has to be taken into account for positioning:
// outputs are sized in logical, or scaled, pixels.
// For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
// so to put another output directly adjacent to it on the right, set its x to 1920.
// It the position is unset or results in an overlap, the output is instead placed
// automatically.
position x=0 y=0
}
output "HDMI-A-1" {
scale 1.5
transform "normal"
mode "3840x2160@60"
position x=2560 y=0 // on the right of DP-2
}
// ============= Named Workspaces =============
workspace "2browser" { open-on-output "DP-2"; }
workspace "4gaming" { open-on-output "DP-2"; }
workspace "5music" { open-on-output "DP-2"; }
workspace "1terminal" { open-on-output "HDMI-A-1"; }
workspace "3chat" { open-on-output "HDMI-A-1"; }
workspace "6file" { open-on-output "HDMI-A-1"; }
workspace "0other" { open-on-output "HDMI-A-1"; }
+4 -1
View File
@@ -149,6 +149,9 @@ in
".local/share/nvim"
".local/state/nvim"
# helix & steel
".local/share/steel"
# doom-emacs
# "org" # org files
# ".config/emacs"
@@ -318,7 +321,7 @@ in
}
{
file = ".claude.json";
how = "symlink";
how = "bindmount";
}
];
};
+2 -2
View File
@@ -1,6 +1,6 @@
{ pkgs, ... }:
{
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/misc/gitea.nix
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/misc/gitea.nix
services.gitea = {
enable = true;
user = "gitea";
@@ -49,7 +49,7 @@
ENABLED = true;
MAILER_TYPE = "sendmail";
FROM = "do-not-reply@writefor.fun";
SENDMAIL_PATH = "${pkgs.system-sendmail}/bin/sendmail";
SENDMAIL_PATH = "${pkgs.stdenv.hostPlatform.system-sendmail}/bin/sendmail";
};
other = {
SHOW_FOOTER_VERSION = false;
+1 -1
View File
@@ -4,7 +4,7 @@ let
configDir = "/data/apps/minio/config";
in
{
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/web-servers/minio.nix
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/web-servers/minio.nix
services.minio = {
enable = true;
browser = true; # Enable or disable access to web UI.
@@ -22,7 +22,7 @@ in
chown -R ${user}:${user} ${configDir}
'';
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/virtualisation/oci-containers.nix
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/virtualisation/oci-containers.nix
virtualisation.oci-containers.containers = {
# check its logs via `journalctl -u podman-homepage`
homepage = {
@@ -17,7 +17,7 @@ in
"d ${dataDir} 0755 ${user} ${user}"
];
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/virtualisation/oci-containers.nix
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/virtualisation/oci-containers.nix
virtualisation.oci-containers.containers = {
# check its logs via `journalctl -u podman-homepage`
uptime-kuma = {
+1 -1
View File
@@ -78,7 +78,7 @@
};
};
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/monitoring/prometheus/exporters/v2ray.nix
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/monitoring/prometheus/exporters/v2ray.nix
# https://github.com/wi1dcard/v2ray-exporter
services.prometheus.exporters.v2ray = {
enable = true;
+1 -1
View File
@@ -5,7 +5,7 @@ let
rcloneConfigFile = "/etc/agenix/rclone-conf-for-restic-backup";
in
{
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/backup/restic.nix
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/backup/restic.nix
services.restic.backups = {
homelab-backup = {
inherit passwordFile;
+1 -1
View File
@@ -9,7 +9,7 @@ let
in
{
# the headless Transmission BitTorrent daemon
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/torrent/transmission.nix
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/torrent/transmission.nix
# https://wiki.archlinux.org/title/transmission
services.transmission = {
enable = true;
@@ -6,14 +6,18 @@
environment.systemPackages = with pkgs; [
# core tools
tealdeer # a very fast version of tldr
nushell # nushell
fastfetch
neovim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
just # justfile
nushell # nushell
gnumake # Makefile
just # a command runner like gnumake, but simpler
git # used by nix flakes
git-lfs # used by huggingface models
# system monitoring
procs # a moreden ps
btop
# archives
zip
xz
@@ -24,21 +28,49 @@
# Text Processing
# Docs: https://github.com/learnbyexample/Command-line-text-processing
gnugrep # GNU grep, provides `grep`/`egrep`/`fgrep`
gnused # GNU sed, very powerful(mainly for replacing text in files)
gawk # GNU awk, a pattern scanning and processing language
gnutar
gnused # GNU sed, very powerful(mainly for replacing text in files)
sad # CLI search and replace, just like sed, but with diff preview.
jq # A lightweight and flexible command-line JSON processor
yq-go # yaml processor https://github.com/mikefarah/yq
jc # converts the output of popular cli tools & file-types to JSON, YAML
# Interactively filter its input using fuzzy searching, not limit to filenames.
fzf
# search for files by name, faster than find
fd
findutils
# search for files by its content, replacement of grep
(ripgrep.override { withPCRE2 = true; })
duf # Disk Usage/Free Utility - a better 'df' alternative
dust # A more intuitive version of `du` in rust
gdu # disk usage analyzer(replacement of `du`)
ncdu # analyzer your disk usage Interactively, via TUI(replacement of `du`)
# networking tools
mtr # A network diagnostic tool
iperf3
mtr # A network diagnostic tool(traceroute)
gping # ping, but with a graph(TUI)
dnsutils # `dig` + `nslookup`
ldns # replacement of `dig`, it provide the command `drill`
doggo # DNS client for humans
wget
curl
curlie # curl with httpie
httpie
aria2 # A lightweight multi-protocol & multi-source command-line download utility
socat # replacement of openbsd-netcat
nmap # A utility for network discovery and security auditing
ipcalc # it is a calculator for the IPv4/v6 addresses
iperf3 # network performance test
hyperfine # command-line benchmarking tool
tcpdump # network sniffer
# file transfer
rsync
croc # File transfer between computers securely and easily
# security
libargon2
@@ -46,10 +78,8 @@
# misc
file
findutils
which
tree
gnutar
rsync
tealdeer # a very fast version of tldr
];
}
+1 -3
View File
@@ -2,7 +2,6 @@
config,
lib,
pkgs,
pkgs-unstable,
...
}:
##########################################################################
@@ -95,7 +94,7 @@ in
programs.zsh.enable = true;
environment.shells = [
pkgs.zsh
pkgs-unstable.nushell # my custom shell
pkgs.nushell # my custom shell
];
# homebrew need to be installed manually, see https://brew.sh
@@ -130,7 +129,6 @@ in
"wget" # download tool
"curl" # no not install curl via nixpkgs, it's not working well on macOS!
"aria2" # download tool
"httpie" # http client
"wireguard-tools" # wireguard
# Usage:
+1 -1
View File
@@ -1,6 +1,6 @@
{
# enable the node exporter on all nixos hosts
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/monitoring/prometheus/exporters/node.nix
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/monitoring/prometheus/exporters/node.nix
services.prometheus.exporters.node = {
enable = true;
listenAddress = "0.0.0.0";
-5
View File
@@ -8,9 +8,4 @@
# dynamically update /etc/hosts for testing
# Note that changes made in this way will be discarded when switching configurations.
environment.etc.hosts.mode = "0644";
networking.hosts."127.0.0.1" = [
# Block this domain to prevent QQ from auto-updating.
"qqpatch.gtimg.cn"
];
}
-6
View File
@@ -1,7 +1,6 @@
{
config,
lib,
determinate,
...
}:
{
@@ -12,11 +11,6 @@
# https://lix.systems/add-to-config/
# nix.package = pkgs.lix;
# we use determinate nix instead
imports = [
determinate.nixosModules.default
];
# to install chrome, you need to enable unfree packages
nixpkgs.config.allowUnfree = lib.mkForce true;
+1 -2
View File
@@ -6,7 +6,6 @@
# system call monitoring
strace # system call monitoring
ltrace # library call monitoring
tcpdump # network sniffer
lsof # list open files
# ebpf related tools
@@ -19,9 +18,9 @@
sysstat
iotop-c
iftop
btop
nmon
sysbench
systemctl-tui
# system tools
psmisc # killall/pstree/prtstat/fuser/...
+1 -1
View File
@@ -15,6 +15,6 @@
};
# Add terminfo database of all known terminals to the system profile.
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/config/terminfo.nix
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/config/terminfo.nix
environment.enableAllTerminfo = true;
}
+24 -1
View File
@@ -11,10 +11,33 @@
# Priority of the zram swap devices.
# It should be a number higher than the priority of your disk-based swap devices
# (so that the system will fill the zram swap devices before falling back to disk swap).
priority = 5;
priority = 100;
# Maximum total amount of memory that can be stored in the zram swap devices (as a percentage of your total memory).
# Defaults to 1/2 of your total RAM. Run zramctl to check how good memory is compressed.
# This doesnt define how much memory will be used by the zram swap devices.
memoryPercent = 50;
};
# Optimizing swap on zram
boot.kernel.sysctl = {
# vm.swappiness - Controls kernel preference for swapping (range: 0-200, default: 60)
# For in-memory swap devices like zram/zswap, values above 100 are recommended.
"vm.swappiness" = 180;
# vm.watermark_boost_factor - Controls aggressiveness of memory reclaim (default: 15000)
# Setting to 0 disables watermark boost, preventing premature memory reclamation.
# This allows fuller memory utilization before the kernel starts reclaiming pages.
"vm.watermark_boost_factor" = 0;
# vm.watermark_scale_factor - Controls kswapd wakeup frequency (range: 1-1000, default: 10)
# A higher value triggers background memory reclamation earlier (at 12.5% memory pressure).
# Value 125 means kswapd becomes active when free memory drops below 1/125 of total memory,
# balancing memory more proactively to prevent sudden swap storms at high swappiness values.
"vm.watermark_scale_factor" = 125;
# vm.page-cluster - Controls swap readahead (range: 0-6, default: 3)
# 0 means read only 1 page (2^0) at a time, disabling readahead.
# For low-latency devices like zram, readahead hurts performance by fetching unnecessary data.
"vm.page-cluster" = 0;
};
}
+1 -1
View File
@@ -35,7 +35,7 @@
# nix-ld's nixos module will set default values for `NIX_LD` and `NIX_LD_LIBRARY_PATH` environment variables, so
# it can work out of the box:
#
# - https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/programs/nix-ld.nix#L37-L40
# - https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/programs/nix-ld.nix#L37-L40
#
# You can overwrite `NIX_LD_LIBRARY_PATH` in the environment where you run the non-NixOS binaries to customize the
# search path for shared libraries.
+2 -2
View File
@@ -15,7 +15,7 @@
defaultFonts = {
serif = [
# 西文: 衬线字体(笔画末端有修饰(衬线)的字体,通常用于印刷。)
"Source Sans 3"
"Source Serif 4"
# 中文: 宋体(港台称明體)
"Source Han Serif SC" # 思源宋体
"Source Han Serif TC"
@@ -23,7 +23,7 @@
# SansSerif 也简写做 Sans, Sans 在法语中就是「without」或者「无」的意思
sansSerif = [
# 西文: 无衬线字体(指笔画末端没有修饰(衬线)的字体,通常用于屏幕显示)
"Source Serif 4"
"Source Sans 3"
# 中文: 黑体
"LXGW WenKai Screen" # 霞鹜文楷 屏幕阅读版
"Source Han Sans SC" # 思源黑体
+1 -1
View File
@@ -73,7 +73,7 @@ in
programs.gamemode.enable = true;
# run anime games on Linux
# https://github.com/an-anime-team/r
# https://github.com/an-anime-team/
networking.mihoyo-telemetry.block = true;
environment.systemPackages = with aagl.packages."x86_64-linux"; [
anime-game-launcher # Genshin: Impact
-2
View File
@@ -1,8 +1,6 @@
{
config,
lib,
pkgs,
pkgs-unstable,
...
}:
{
@@ -22,7 +22,7 @@
# journalctl --user -u sunshine --since "2 minutes ago"
#
# References:
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/networking/sunshine.nix
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/networking/sunshine.nix
#
# ===============================================================================
services.sunshine = {
@@ -24,7 +24,7 @@
# which is already persistent across reboots(via preservation)
#
# References:
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/networking/tailscale.nix
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/networking/tailscale.nix
#
# =============================================================
{
-2
View File
@@ -15,7 +15,6 @@
# https://nixos.wiki/wiki/PipeWire
services.pipewire = {
enable = true;
# package = pkgs-unstable.pipewire;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
@@ -53,7 +52,6 @@
udev.packages = with pkgs; [
gnome-settings-daemon
android-udev-rules # required by adb
# platformio # udev rules for platformio
# openocd # required by paltformio, see https://github.com/NixOS/nixpkgs/issues/224895
# openfpgaloader
+1 -1
View File
@@ -65,7 +65,7 @@
# https://github.com/casualsnek/waydroid_script
# https://github.com/AtaraxiaSjel/nur/tree/master/pkgs/waydroid-script
# https://wiki.archlinux.org/title/Waydroid#ARM_Apps_Incompatible
# nur-ataraxiasjel.packages.${pkgs.system}.waydroid-script
# nur-ataraxiasjel.packages.${pkgs.stdenv.hostPlatform.system}.waydroid-script
# Need to add [File (in the menu bar) -> Add connection] when start for the first time
# virt-manager
+10 -5
View File
@@ -1,4 +1,4 @@
{ pkgs, ... }:
{ lib, pkgs, ... }:
{
xdg.terminal-exec = {
enable = true;
@@ -23,6 +23,13 @@
};
};
xdg = {
autostart.enable = lib.mkDefault true;
menus.enable = lib.mkDefault true;
mime.enable = lib.mkDefault true;
icons.enable = lib.mkDefault true;
};
xdg.portal = {
enable = true;
@@ -31,10 +38,7 @@
# Use xdg-desktop-portal-gtk for every portal interface...
default = [
"gtk"
];
# except for the secret portal, which is handled by gnome-keyring
"org.freedesktop.impl.portal.Secret" = [
"gnome-keyring"
"gnome"
];
};
};
@@ -50,6 +54,7 @@
# ls /run/current-system/sw/share/xdg-desktop-portal/portals/
extraPortals = with pkgs; [
xdg-desktop-portal-gtk # for provides file picker / OpenURI
xdg-desktop-portal-gnome # for screensharing
];
};
}
+8
View File
@@ -0,0 +1,8 @@
# List all the just commands
default:
@just --list
# Enter a shell session which has all the necessary tools for this flake
[linux]
test:
nix build ".#nixosConfigurations.ai.config.system.build.toplevel" --show-trace --verbose
+3 -2
View File
@@ -2,12 +2,13 @@
description = "NixOS configuration of Ryan Yin";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
preservation.url = "github:nix-community/preservation";
nuenv.url = "github:DeterminateSystems/nuenv";
nixos-apple-silicon = {
url = "github:nix-community/nixos-apple-silicon/release-2025-05-30";
# 2025-10-07 asahi-6.16.8-1
url = "github:nix-community/nixos-apple-silicon/24ab28e47b586f741910b3a2f0428f3523a0fff3";
inputs.nixpkgs.follows = "nixpkgs";
};
@@ -27,7 +27,6 @@ let
"hardening/bwraps"
])
++ [
inputs.niri.nixosModules.niri
{
modules.desktop.fonts.enable = true;
modules.desktop.wayland.enable = true;
+13 -3
View File
@@ -18,8 +18,13 @@ let
inherit mylib myvars;
# use unstable branch for some packages to get the latest updates
pkgs-unstable = import inputs.nixpkgs-unstable {
inherit system; # refer the `system` parameter form outer scope recursively
# pkgs-unstable = import inputs.nixpkgs-unstable {
# inherit system; # refer the `system` parameter form outer scope recursively
# # To use chrome, we need to allow the installation of non-free software
# config.allowUnfree = true;
# };
pkgs-2505 = import inputs.nixpkgs-2505 {
inherit system;
# To use chrome, we need to allow the installation of non-free software
config.allowUnfree = true;
};
@@ -30,7 +35,12 @@ let
};
pkgs-patched = import inputs.nixpkgs-patched {
inherit system;
# To use chrome, we need to allow the installation of non-free software
# to use chrome, we need to allow the installation of non-free software
config.allowUnfree = true;
};
pkgs-master = import inputs.nixpkgs-master {
inherit system;
# to use chrome, we need to allow the installation of non-free software
config.allowUnfree = true;
};
-1
View File
@@ -28,7 +28,6 @@ let
"hardening/bwraps"
])
++ [
inputs.niri.nixosModules.niri
{
modules.desktop.fonts.enable = true;
modules.desktop.wayland.enable = true;
+1 -1
View File
@@ -18,7 +18,7 @@
};
environment.systemPackages = [
agenix.packages."${pkgs.system}".default
agenix.packages."${pkgs.stdenv.hostPlatform.system}".default
];
# if you changed this key, you need to regenerate all encrypt files from the decrypt contents!
+1 -1
View File
@@ -53,7 +53,7 @@ in
config = mkIf (cfg.desktop.enable || enabledServerSecrets) (mkMerge [
{
environment.systemPackages = [
agenix.packages."${pkgs.system}".default
agenix.packages."${pkgs.stdenv.hostPlatform.system}".default
];
# if you changed this key, you need to regenerate all encrypt files from the decrypt contents!