Compare commits

...

26 Commits

Author SHA1 Message Date
Ryan Yin 8a2c5ba577 docs: README - add niri 2025-08-20 13:08:43 +08:00
Ryan Yin f904a672d4 Merge pull request #213 from ryan4yin/niri-spawn-at-startup
feat: niri - more settings
2025-08-20 13:02:23 +08:00
Ryan Yin 379fdd5b46 refactor: niri settings 2025-08-20 12:56:04 +08:00
Ryan Yin 21090c93e8 feat: environment variables for wayland & nvidia 2025-08-20 12:39:43 +08:00
Ryan Yin 2b914efbb1 feat: niri - waybar opacity 2025-08-20 12:23:50 +08:00
Ryan Yin 7b1bab3c9b feat: niri - spawn at startup 2025-08-20 12:12:19 +08:00
Ryan Yin d517d74bf7 feat: shoukei - add Lid & PowerKey settings (#207) 2025-08-20 02:21:07 +08:00
Ryan Yin d83cfcf681 docs: nixos-apple-silicon 2025-08-20 02:10:07 +08:00
Ryan Yin a9d08f15a2 Merge pull request #212 from ryan4yin/niri
feat: add new wayland compositor - niri
2025-08-20 02:00:31 +08:00
Ryan Yin ce4588d0c2 feat: niri - define configs via home-manager 2025-08-20 01:59:42 +08:00
Ryan Yin 69eee64e7e feat: add new wayland compositor - niri 2025-08-20 00:03:25 +08:00
Ryan Yin 09fbea3f77 chore: adjust keyboard backlight via hypridle 2025-08-20 00:00:18 +08:00
Ryan Yin 64a7b2c6cf chore: power management 2025-08-19 23:56:19 +08:00
Ryan Yin c8bc396e89 chore: replace iotop with iotop-c 2025-08-19 23:54:14 +08:00
Ryan Yin 035c07d658 chore: update nixos-appli-silicon, update asahi options 2025-08-19 23:30:19 +08:00
Ryan Yin 30d73dabf1 refactor: justfile - nixos-swtich/darwin-switch (#211) 2025-08-18 21:22:23 +08:00
Ryan Yin adc49e7f6e docs: grafana dashboards 2025-08-18 13:29:39 +08:00
Ryan Yin 74b19dd7dc feat: idols-aquamarine - use default kernel for stability 2025-08-17 17:39:47 +08:00
Ryan Yin 329f03c1e2 fix: remove duplicated values with catppuccin-nix 2025-08-17 17:23:17 +08:00
Ryan Yin 99cf8d6ac6 flake.lock: Update
Flake lock file updates:

• Updated input 'anyrun':
    'github:Kirottu/anyrun/25367153f225a59c5ce5746583e39a71ff052f09' (2025-05-27)
  → 'github:Kirottu/anyrun/0c3fa788227d29cf8b0184e553c83021bcebad7c' (2025-08-17)
• Updated input 'blender-bin':
    'github:edolstra/nix-warez/69acfebb3740542936f71775bcdf322dc328a655?dir=blender' (2025-07-16)
  → 'github:edolstra/nix-warez/e8b2b3214f07970e45ec3fc98d957b0507a3564a?dir=blender' (2025-08-01)
• Updated input 'catppuccin':
    'github:catppuccin/nix/b32de96c3c5384c83b0f4d741ec58a7f97c9ab11' (2025-07-28)
  → 'github:catppuccin/nix/a2ef20ed6fb921073c2d1b1929447c3bd88f595e' (2025-08-16)
• Updated input 'ghostty':
    'github:ghostty-org/ghostty/92c1f4b0b9c6fde6d8f79109de71bf4e30831e86' (2025-07-28)
  → 'github:ghostty-org/ghostty/11d56235f9e4a227b794a87a503785ef9f3349ed' (2025-08-15)
• Updated input 'home-manager':
    'github:nix-community/home-manager/25deca893974aae98c9be151fb47d6284c053470' (2025-07-29)
  → 'github:nix-community/home-manager/8b4ac149687e8520187a66f05e9d4eafebf96522' (2025-08-17)
• Updated input 'nix-darwin':
    'github:lnl7/nix-darwin/e04a388232d9a6ba56967ce5b53a8a6f713cdfcf' (2025-06-30)
  → 'github:lnl7/nix-darwin/7220b01d679e93ede8d7b25d6f392855b81dd475' (2025-08-15)
• Updated input 'nix-gaming':
    'github:fufexan/nix-gaming/ceb9d44f09b0db02332873247a50210a486959ff' (2025-07-27)
  → 'github:fufexan/nix-gaming/f2bf778502254d8852402a83ae346fd803095ccc' (2025-08-17)
• Updated input 'nix-gaming/flake-parts':
    'github:hercules-ci/flake-parts/644e0fc48951a860279da645ba77fe4a6e814c5e' (2025-07-21)
  → 'github:hercules-ci/flake-parts/af66ad14b28a127c5c0f3bbb298218fc63528a18' (2025-08-06)
• Updated input 'nix-gaming/flake-parts/nixpkgs-lib':
    'github:nix-community/nixpkgs.lib/14a40a1d7fb9afa4739275ac642ed7301a9ba1ab' (2025-06-29)
  → 'github:nix-community/nixpkgs.lib/0f36c44e01a6129be94e3ade315a5883f0228a6e' (2025-07-27)
• Updated input 'nixpak':
    'github:nixpak/nixpak/fedd4b59b7c8f18be508dee9d89985a8501982d0' (2025-07-24)
  → 'github:nixpak/nixpak/ae70d05017be7e0aa6c1cf5f267fe6953eb027e6' (2025-08-14)
• Updated input 'nixpak/flake-parts':
    'github:hercules-ci/flake-parts/644e0fc48951a860279da645ba77fe4a6e814c5e' (2025-07-21)
  → 'github:hercules-ci/flake-parts/af66ad14b28a127c5c0f3bbb298218fc63528a18' (2025-08-06)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/dc9637876d0dcc8c9e5e22986b857632effeb727' (2025-07-28)
  → 'github:nixos/nixpkgs/fbcf476f790d8a217c3eab4e12033dc4a0f6d23c' (2025-08-14)
• Updated input 'nixpkgs-darwin':
    'github:nixos/nixpkgs/648f70160c03151bc2121d179291337ad6bc564b' (2025-07-28)
  → 'github:nixos/nixpkgs/32f313e49e42f715491e1ea7b306a87c16fe0388' (2025-08-15)
• Updated input 'nixpkgs-ollama':
    'github:nixos/nixpkgs/dc9637876d0dcc8c9e5e22986b857632effeb727' (2025-07-28)
  → 'github:nixos/nixpkgs/fbcf476f790d8a217c3eab4e12033dc4a0f6d23c' (2025-08-14)
• Updated input 'nixpkgs-stable':
    'github:nixos/nixpkgs/13e8d35b7d6028b7198f8186bc0347c6abaa2701' (2025-07-26)
  → 'github:nixos/nixpkgs/ad7196ae55c295f53a7d1ec39e4a06d922f3b899' (2025-08-15)
• Updated input 'nixpkgs-unstable':
    'github:nixos/nixpkgs/dc9637876d0dcc8c9e5e22986b857632effeb727' (2025-07-28)
  → 'github:nixos/nixpkgs/fbcf476f790d8a217c3eab4e12033dc4a0f6d23c' (2025-08-14)
• Updated input 'pre-commit-hooks':
    'github:cachix/git-hooks.nix/16ec914f6fb6f599ce988427d9d94efddf25fe6d' (2025-06-24)
  → 'github:cachix/git-hooks.nix/9c52372878df6911f9afc1e2a1391f55e4dfc864' (2025-08-05)
• Updated input 'pre-commit-hooks/flake-compat':
    'github:edolstra/flake-compat/0f9255e01c2351cc7d116c072cb317785dd33b33' (2023-10-04)
  → 'github:edolstra/flake-compat/9100a0f413b0c601e0533d1d94ffd501ce2e7885' (2025-05-12)
2025-08-17 17:19:50 +08:00
Ryan Yin d222dc05a9 feat: add kubectl-cnpg 2025-08-17 16:42:07 +08:00
Ryan Yin 84b30c0233 fix: cloudnative-pg dashboard - conflicted label - cluster 2025-08-17 16:25:38 +08:00
Ryan Yin ebf1b6b4d0 feat: add grafana dashboard for cnpg 2025-08-17 03:20:16 +08:00
Ryan Yin 6e246c38b6 fix: loki-logs dashboard 2025-08-16 23:34:16 +08:00
Ryan Yin f5e2f1832a chore: systemd-journal - reduce disk usage 2025-08-16 22:12:08 +08:00
Ryan Yin d53ab3b4e3 fix: grafana loki-logs dashboard 2025-08-16 21:42:30 +08:00
79 changed files with 10590 additions and 338 deletions
+17 -64
View File
@@ -108,19 +108,29 @@ up-nix:
#
############################################################################
# Deploy the nixosConfiguration by hostname match
[linux]
[group('homelab')]
local mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
nixos-switch (hostname) {{mode}}
# Deploy the hyprland nixosConfiguration by hostname match
[linux]
[group('desktop')]
hypr mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
nixos-switch ai-hyprland {{mode}}
nixos-switch $"(hostname)-hyprland" {{mode}}
# Deploy the niri nixosConfiguration by hostname match
[linux]
[group('desktop')]
s-hypr mode="default":
niri mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
nixos-switch shoukei-hyprland {{mode}}
nixos-switch $"(hostname)-niri" {{mode}}
############################################################################
#
@@ -141,23 +151,15 @@ darwin-rollback:
use {{utils_nu}} *;
darwin-rollback
# Depoly to fern(macOS host)
# Deploy the darwinConfiguration by hostname match
[macos]
[group('desktop')]
fe mode="default":
local mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
darwin-build "fern" {{mode}};
darwin-switch "fern" {{mode}}
darwin-build (hostname) {{mode}};
darwin-switch (hostname) {{mode}}
# Depoly to frieren(macOS host)
[macos]
[group('desktop')]
fr mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
darwin-build "frieren" {{mode}};
darwin-switch "frieren" {{mode}}
# Reset launchpad to force it to reindex Applications
[macos]
@@ -178,13 +180,6 @@ reset-launchpad:
col tag:
colmena apply --on '@{{tag}}' --verbose --show-trace
[linux]
[group('homelab')]
local name mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
nixos-switch {{name}} {{mode}}
# Build and upload a vm image
[linux]
[group('homelab')]
@@ -204,37 +199,16 @@ lab:
shoryu:
colmena apply --on '@kubevirt-shoryu' --verbose --show-trace
[linux]
[group('homelab')]
shoryu-local mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
nixos-switch kubevirt-shoryu {{mode}}
[linux]
[group('homelab')]
shushou:
colmena apply --on '@kubevirt-shushou' --verbose --show-trace
[linux]
[group('homelab')]
shushou-local mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
nixos-switch kubevirt-shushou {{mode}}
[linux]
[group('homelab')]
youko:
colmena apply --on '@kubevirt-youko' --verbose --show-trace
[linux]
[group('homelab')]
youko-local mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
nixos-switch kubevirt-youko {{mode}}
############################################################################
#
# Commands for other Virtual Machines
@@ -256,37 +230,16 @@ upload-idols mode="default":
aqua:
colmena apply --on '@aqua' --verbose --show-trace
[linux]
[group('homelab')]
aqua-local mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
nixos-switch aquamarine {{mode}}
[linux]
[group('homelab')]
ruby:
colmena apply --on '@ruby' --verbose --show-trace
[linux]
[group('homelab')]
ruby-local mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
nixos-switch ruby {{mode}}
[linux]
[group('homelab')]
kana:
colmena apply --on '@kana' --verbose --show-trace
[linux]
[group('homelab')]
kana-local mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
nixos-switch kana {{mode}}
############################################################################
#
# Kubernetes related commands
+7 -5
View File
@@ -56,7 +56,7 @@ You don't have to go through the pain I've experienced again! Check out my
| | NixOS(Wayland) |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| **Window Manager** | [Hyprland][Hyprland] |
| **Window Manager** | [Hyprland][Hyprland] / [Niri][Niri] |
| **Terminal Emulator** | [Zellij][Zellij] + [Kitty][Kitty] |
| **Bar** | [Waybar][Waybar] |
| **Application Launcher** | [anyrun][anyrun] |
@@ -116,7 +116,8 @@ For NixOS:
sudo nixos-rebuild switch --flake .#ai-hyprland
# deploy via `just`(a command runner with similar syntax to make) & Justfile
just hypr # deploy my pc with hyprland compositor
# Deploy the hyprland nixosConfiguration by hostname match
just hypr
# or we can deploy with details
just hypr debug
@@ -132,11 +133,11 @@ nix-shell -p just nushell
# 3. comment home-manager's code in lib/macosSystem.nix to speed up the first deployment.
# 4. comment out the proxy settings in scripts/darwin_set_proxy.py if the proxy is not ready yet.
# deploy fern's configuration(Apple Silicon)
just fr
# Deploy the darwinConfiguration by hostname match
just local
# deploy with details
just fr debug
just local debug
```
> [What y'all will need when Nix drives you to drink.](https://www.youtube.com/watch?v=Eni9PPPPBpg)
@@ -175,6 +176,7 @@ Other dotfiles that inspired me:
- [1amSimp1e/dots](https://github.com/1amSimp1e/dots)
[Hyprland]: https://github.com/hyprwm/Hyprland
[Niri]: https://github.com/YaLTeR/niri
[Kitty]: https://github.com/kovidgoyal/kitty
[Nushell]: https://github.com/nushell/nushell
[Starship]: https://github.com/starship/starship
Generated
+205 -61
View File
@@ -33,11 +33,11 @@
"systems": "systems_2"
},
"locked": {
"lastModified": 1748365336,
"narHash": "sha256-pg0w4uOZI32dLASD6UbBezeQg5PwOa0GLv7rTwn3VxY=",
"lastModified": 1755411828,
"narHash": "sha256-TJhktHx79CMN6dCvFMST9PECDS9zW5iWEDyiMleXUSo=",
"owner": "Kirottu",
"repo": "anyrun",
"rev": "25367153f225a59c5ce5746583e39a71ff052f09",
"rev": "0c3fa788227d29cf8b0184e553c83021bcebad7c",
"type": "github"
},
"original": {
@@ -54,11 +54,11 @@
},
"locked": {
"dir": "blender",
"lastModified": 1752701743,
"narHash": "sha256-cQeX9PP5F7fgsuv0CrL16GtlU6MS0i9LLnkkITu8jA8=",
"lastModified": 1754037902,
"narHash": "sha256-d9hAFy/R8o5UM/mrgCBm+xE8NbtgkXYPHLVza07xGgE=",
"owner": "edolstra",
"repo": "nix-warez",
"rev": "69acfebb3740542936f71775bcdf322dc328a655",
"rev": "e8b2b3214f07970e45ec3fc98d957b0507a3564a",
"type": "github"
},
"original": {
@@ -75,11 +75,11 @@
]
},
"locked": {
"lastModified": 1753702336,
"narHash": "sha256-IVFUQV6egGQHnm+I183OT+4ct/ka1IWA5u/0A9I/YV4=",
"lastModified": 1755334713,
"narHash": "sha256-Nxq+mi6aqEbJA4R7i4TLr68ANuIgnEo2aKzJKRYd11s=",
"owner": "catppuccin",
"repo": "nix",
"rev": "b32de96c3c5384c83b0f4d741ec58a7f97c9ab11",
"rev": "a2ef20ed6fb921073c2d1b1929447c3bd88f595e",
"type": "github"
},
"original": {
@@ -196,11 +196,11 @@
"flake-compat_4": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
@@ -256,11 +256,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1753121425,
"narHash": "sha256-TVcTNvOeWWk1DXljFxVRp+E0tzG1LhrVjOGGoMHuXio=",
"lastModified": 1754487366,
"narHash": "sha256-pHYj8gUBapuUzKV/kN/tR3Zvqc7o6gdFB9XKXIp1SQ8=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "644e0fc48951a860279da645ba77fe4a6e814c5e",
"rev": "af66ad14b28a127c5c0f3bbb298218fc63528a18",
"type": "github"
},
"original": {
@@ -277,11 +277,11 @@
]
},
"locked": {
"lastModified": 1753121425,
"narHash": "sha256-TVcTNvOeWWk1DXljFxVRp+E0tzG1LhrVjOGGoMHuXio=",
"lastModified": 1754487366,
"narHash": "sha256-pHYj8gUBapuUzKV/kN/tR3Zvqc7o6gdFB9XKXIp1SQ8=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "644e0fc48951a860279da645ba77fe4a6e814c5e",
"rev": "af66ad14b28a127c5c0f3bbb298218fc63528a18",
"type": "github"
},
"original": {
@@ -335,11 +335,11 @@
"zon2nix": "zon2nix"
},
"locked": {
"lastModified": 1753722074,
"narHash": "sha256-yGQ28k8iz2tGrj5oo/HBkn0ihWA5uUZ1ZErkMtegzTw=",
"lastModified": 1755285323,
"narHash": "sha256-o+TmZKnch5D0IjhWD/rhVK9Ahqafz6oZ61NKDDocXMw=",
"owner": "ghostty-org",
"repo": "ghostty",
"rev": "92c1f4b0b9c6fde6d8f79109de71bf4e30831e86",
"rev": "11d56235f9e4a227b794a87a503785ef9f3349ed",
"type": "github"
},
"original": {
@@ -465,11 +465,11 @@
]
},
"locked": {
"lastModified": 1753807879,
"narHash": "sha256-d8nxwjUxnRyLWc5G/CpGVsqcSU3ZolS/QYWm9L+/CG0=",
"lastModified": 1755397986,
"narHash": "sha256-qwrF5laj6eE3Zht0wKYTmH6QzL7bdOyE2f6jd3WCO8g=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "25deca893974aae98c9be151fb47d6284c053470",
"rev": "8b4ac149687e8520187a66f05e9d4eafebf96522",
"type": "github"
},
"original": {
@@ -539,6 +539,62 @@
"url": "ssh://git@github.com/ryan4yin/nix-secrets.git"
}
},
"niri": {
"inputs": {
"niri-stable": "niri-stable",
"niri-unstable": "niri-unstable",
"nixpkgs": "nixpkgs_2",
"nixpkgs-stable": "nixpkgs-stable_2",
"xwayland-satellite-stable": "xwayland-satellite-stable",
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
"lastModified": 1755424351,
"narHash": "sha256-xcorYLNdtLpb0wH5CPlUcpmYQUxeK95j1X855xQw+DY=",
"owner": "sodiboo",
"repo": "niri-flake",
"rev": "9aa137af01f05386e5bb5050e983750017007a66",
"type": "github"
},
"original": {
"owner": "sodiboo",
"repo": "niri-flake",
"type": "github"
}
},
"niri-stable": {
"flake": false,
"locked": {
"lastModified": 1748151941,
"narHash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "8ba57fcf25d2fc9565131684a839d58703f1dae7",
"type": "github"
},
"original": {
"owner": "YaLTeR",
"ref": "v25.05.1",
"repo": "niri",
"type": "github"
}
},
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1755419373,
"narHash": "sha256-EFH3zbpyLYjEboNV2Lmkxf9joEuFCmeYX+MMLRPStpg=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "a6febb86aa5af0df7bf2792ca027ef95a503d599",
"type": "github"
},
"original": {
"owner": "YaLTeR",
"repo": "niri",
"type": "github"
}
},
"nix-darwin": {
"inputs": {
"nixpkgs": [
@@ -546,11 +602,11 @@
]
},
"locked": {
"lastModified": 1751313918,
"narHash": "sha256-HsJM3XLa43WpG+665aGEh8iS8AfEwOIQWk3Mke3e7nk=",
"lastModified": 1755275010,
"narHash": "sha256-lEApCoWUEWh0Ifc3k1JdVjpMtFFXeL2gG1qvBnoRc2I=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "e04a388232d9a6ba56967ce5b53a8a6f713cdfcf",
"rev": "7220b01d679e93ede8d7b25d6f392855b81dd475",
"type": "github"
},
"original": {
@@ -567,11 +623,11 @@
]
},
"locked": {
"lastModified": 1753582293,
"narHash": "sha256-CimzlksXOfuPcLr4ye/s4hwZhHk98f0gnXB6Dq9RhZo=",
"lastModified": 1755396822,
"narHash": "sha256-gID7ynpJuflQ/+ibrhYUWybiGPduNvvMJSk27oqfK24=",
"owner": "fufexan",
"repo": "nix-gaming",
"rev": "ceb9d44f09b0db02332873247a50210a486959ff",
"rev": "f2bf778502254d8852402a83ae346fd803095ccc",
"type": "github"
},
"original": {
@@ -600,20 +656,21 @@
"flake-compat": "flake-compat_3",
"nixpkgs": [
"nixpkgs"
]
],
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1751622568,
"narHash": "sha256-EE3NBsej517VRa1x+ylAghrvngftxf1KgfHlE9OYyXE=",
"lastModified": 1755124568,
"narHash": "sha256-8fXTYruAwE6OiIz/99P5qknQYag7ZX985pNT+jhIIrU=",
"owner": "nix-community",
"repo": "nixos-apple-silicon",
"rev": "eba4b40c816e5aff8951ae231ac237e8aab8ec1d",
"rev": "2f873fc3ef373e59cd3a7dad4087685fc8ce02ca",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-2025-08-10",
"repo": "nixos-apple-silicon",
"rev": "eba4b40c816e5aff8951ae231ac237e8aab8ec1d",
"type": "github"
}
},
@@ -647,11 +704,11 @@
]
},
"locked": {
"lastModified": 1753324041,
"narHash": "sha256-2JZ82g01Lo3f0SNP2WSDZ0ER1FnAN2WicULZkoEsRx0=",
"lastModified": 1755139484,
"narHash": "sha256-gCMJp0indBuBXnog2C86aby5Pz268gUMZD0ORahulO8=",
"owner": "nixpak",
"repo": "nixpak",
"rev": "fedd4b59b7c8f18be508dee9d89985a8501982d0",
"rev": "ae70d05017be7e0aa6c1cf5f267fe6953eb027e6",
"type": "github"
},
"original": {
@@ -675,11 +732,11 @@
},
"nixpkgs-darwin": {
"locked": {
"lastModified": 1753722563,
"narHash": "sha256-FK8iq76wlacriq3u0kFCehsRYTAqjA9nfprpiSWRWIc=",
"lastModified": 1755268003,
"narHash": "sha256-nNaeJjo861wFR0tjHDyCnHs1rbRtrMgxAKMoig9Sj/w=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "648f70160c03151bc2121d179291337ad6bc564b",
"rev": "32f313e49e42f715491e1ea7b306a87c16fe0388",
"type": "github"
},
"original": {
@@ -691,11 +748,11 @@
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1751159883,
"narHash": "sha256-urW/Ylk9FIfvXfliA1ywh75yszAbiTEVgpPeinFyVZo=",
"lastModified": 1753579242,
"narHash": "sha256-zvaMGVn14/Zz8hnp4VWT9xVnhc8vuL3TStRqwk22biA=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "14a40a1d7fb9afa4739275ac642ed7301a9ba1ab",
"rev": "0f36c44e01a6129be94e3ade315a5883f0228a6e",
"type": "github"
},
"original": {
@@ -706,11 +763,11 @@
},
"nixpkgs-ollama": {
"locked": {
"lastModified": 1753694789,
"narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=",
"lastModified": 1755186698,
"narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "dc9637876d0dcc8c9e5e22986b857632effeb727",
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c",
"type": "github"
},
"original": {
@@ -738,11 +795,27 @@
},
"nixpkgs-stable_2": {
"locked": {
"lastModified": 1753489912,
"narHash": "sha256-uDCFHeXdRIgJpYmtcUxGEsZ+hYlLPBhR83fdU+vbC1s=",
"lastModified": 1755274400,
"narHash": "sha256-rTInmnp/xYrfcMZyFMH3kc8oko5zYfxsowaLv1LVobY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ad7196ae55c295f53a7d1ec39e4a06d922f3b899",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable_3": {
"locked": {
"lastModified": 1755274400,
"narHash": "sha256-rTInmnp/xYrfcMZyFMH3kc8oko5zYfxsowaLv1LVobY=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "13e8d35b7d6028b7198f8186bc0347c6abaa2701",
"rev": "ad7196ae55c295f53a7d1ec39e4a06d922f3b899",
"type": "github"
},
"original": {
@@ -754,11 +827,11 @@
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1753694789,
"narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=",
"lastModified": 1755186698,
"narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "dc9637876d0dcc8c9e5e22986b857632effeb727",
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c",
"type": "github"
},
"original": {
@@ -770,11 +843,27 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1753694789,
"narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=",
"lastModified": 1755186698,
"narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1755186698,
"narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "dc9637876d0dcc8c9e5e22986b857632effeb727",
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c",
"type": "github"
},
"original": {
@@ -850,11 +939,11 @@
]
},
"locked": {
"lastModified": 1750779888,
"narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
"lastModified": 1754416808,
"narHash": "sha256-c6yg0EQ9xVESx6HGDOCMcyRSjaTpNJP10ef+6fRcofA=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
"rev": "9c52372878df6911f9afc1e2a1391f55e4dfc864",
"type": "github"
},
"original": {
@@ -918,15 +1007,16 @@
"lanzaboote": "lanzaboote",
"my-asahi-firmware": "my-asahi-firmware",
"mysecrets": "mysecrets",
"niri": "niri",
"nix-darwin": "nix-darwin",
"nix-gaming": "nix-gaming",
"nixos-apple-silicon": "nixos-apple-silicon",
"nixos-generators": "nixos-generators",
"nixpak": "nixpak",
"nixpkgs": "nixpkgs_2",
"nixpkgs": "nixpkgs_3",
"nixpkgs-darwin": "nixpkgs-darwin",
"nixpkgs-ollama": "nixpkgs-ollama",
"nixpkgs-stable": "nixpkgs-stable_2",
"nixpkgs-stable": "nixpkgs-stable_3",
"nixpkgs-unstable": "nixpkgs-unstable",
"nuenv": "nuenv",
"nur-ryan4yin": "nur-ryan4yin",
@@ -1039,6 +1129,27 @@
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"nixos-apple-silicon",
"nixpkgs"
]
},
"locked": {
"lastModified": 1754847726,
"narHash": "sha256-2vX8QjO5lRsDbNYvN9hVHXLU6oMl+V/PsmIiJREG4rE=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "7d81f6fb2e19bf84f1c65135d1060d829fae2408",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"wallpapers": {
"flake": false,
"locked": {
@@ -1055,6 +1166,39 @@
"type": "github"
}
},
"xwayland-satellite-stable": {
"flake": false,
"locked": {
"lastModified": 1748488455,
"narHash": "sha256-IiLr1alzKFIy5tGGpDlabQbe6LV1c9ABvkH6T5WmyRI=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "3ba30b149f9eb2bbf42cf4758d2158ca8cceef73",
"type": "github"
},
"original": {
"owner": "Supreeeme",
"ref": "v0.6",
"repo": "xwayland-satellite",
"type": "github"
}
},
"xwayland-satellite-unstable": {
"flake": false,
"locked": {
"lastModified": 1755219541,
"narHash": "sha256-yKV6xHaPbEbh5RPxAJnb9yTs1wypr7do86hFFGQm1w8=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "5a184d435927c3423f0ad189ea2b490578450fb7",
"type": "github"
},
"original": {
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"type": "github"
}
},
"zig": {
"inputs": {
"flake-compat": [
+3 -1
View File
@@ -139,10 +139,12 @@
nixos-apple-silicon = {
# 2025-07-04
url = "github:nix-community/nixos-apple-silicon/eba4b40c816e5aff8951ae231ac237e8aab8ec1d";
url = "github:nix-community/nixos-apple-silicon/release-2025-08-10";
inputs.nixpkgs.follows = "nixpkgs";
};
niri.url = "github:sodiboo/niri-flake";
######################## Some non-flake repositories #########################################
polybar-themes = {
+1
View File
@@ -18,6 +18,7 @@
kubectl-tree # kubectl tree
kubectl-node-shell # exec into node
kubepug # kubernetes pre upgrade checker
kubectl-cnpg # cloudnative-pg's cli tool
kubebuilder
istioctl
@@ -1,4 +1,3 @@
general {
lock_cmd = pidof swaylock || swaylock # avoid starting multiple instances
before_sleep_cmd = loginctl lock-session # lock before suspend
@@ -6,12 +5,13 @@ general {
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests
}
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
# listener {
# timeout = 180 # 3 minutes
# on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
# on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
# }
listener {
timeout = 180 # 3 minutes
# List devices: brightnessctl --list
# Adjust keyboard backlight: brightnessctl -d kbd_backlight set 50%
on-timeout = brightnessctl --save --device=kbd_backlight set 0 # turn off keyboard backlight.
on-resume = brightnessctl --restore --device=kbd_backlight # turn on keyboard backlight.
}
# listener {
# timeout = 600 # 10min.
@@ -20,13 +20,13 @@ general {
# }
listener {
timeout = 1200 # 20 minutes
timeout = 1600 # 20 minutes
on-timeout = pidof swaylock || swaylock # lock screen
on-resume = hyprctl dispatch dpms on # monitor wake up
}
listener {
timeout = 1260 # 21 minutes
timeout = 1660 # 31 minutes
on-timeout = hyprctl dispatch dpms off # screen off
on-resume = hyprctl dispatch dpms on && brightnessctl -r # monitor wake up & screen on
}

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

+73
View File
@@ -0,0 +1,73 @@
{
config,
pkgs,
...
}:
{
imports = [
./anyrun.nix
./nvidia.nix
];
# wayland related
home.sessionVariables = {
"NIXOS_OZONE_WL" = "1"; # for any ozone-based browser & electron apps to run on wayland
"MOZ_ENABLE_WAYLAND" = "1"; # for firefox to run on wayland
"MOZ_WEBRENDER" = "1";
# enable native Wayland support for most Electron apps
"ELECTRON_OZONE_PLATFORM_HINT" = "auto";
# misc
"_JAVA_AWT_WM_NONREPARENTING" = "1";
"QT_WAYLAND_DISABLE_WINDOWDECORATION" = "1";
"QT_QPA_PLATFORM" = "wayland";
"SDL_VIDEODRIVER" = "wayland";
"GDK_BACKEND" = "wayland";
"XDG_SESSION_TYPE" = "wayland";
};
home.packages = with pkgs; [
swaybg # the wallpaper
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
];
xdg.configFile =
let
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
confPath = "${config.home.homeDirectory}/nix-config/home/linux/gui/base/desktop/conf";
in
{
"mako".source = mkSymlink "${confPath}/mako";
"waybar".source = mkSymlink "${confPath}/waybar";
"wlogout".source = mkSymlink "${confPath}/wlogout";
"hypr/hypridle.conf".source = mkSymlink "${confPath}/hypridle.conf";
};
# status bar
programs.waybar = {
enable = true;
systemd.enable = true;
};
# Disable catppuccin to avoid conflict with my non-nix config.
catppuccin.waybar.enable = false;
# screen locker
programs.swaylock.enable = true;
# Logout Menu
programs.wlogout.enable = true;
catppuccin.wlogout.enable = false;
# Hyprland idle daemon
services.hypridle.enable = true;
# notification daemon, the same as dunst
services.mako.enable = true;
catppuccin.mako.enable = false;
}
+26
View File
@@ -0,0 +1,26 @@
{
config,
lib,
...
}:
with lib;
let
cfg = config.modules.desktop.nvidia;
in
{
options.modules.desktop.nvidia = {
enable = mkEnableOption "whether nvidia GPU is used";
};
config = mkIf (cfg.enable && cfg.enable) {
home.sessionVariables = {
# for hyprland with nvidia gpu" = " ref https://wiki.hyprland.org/Nvidia/
"LIBVA_DRIVER_NAME" = "nvidia";
"__GLX_VENDOR_LIBRARY_NAME" = "nvidia";
# VA-API hardware video acceleration
"NVD_BACKEND" = "direct";
"GBM_BACKEND" = "nvidia-drm";
};
};
}
-5
View File
@@ -38,10 +38,5 @@
};
gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
iconTheme = {
name = "Papirus-Dark";
package = pkgs.papirus-icon-theme;
};
};
}
@@ -40,7 +40,6 @@ bind = , XF86AudioPlay, exec, playerctl play-pause
bind = , XF86AudioNext, exec, playerctl next
bind = , XF86AudioPrev, exec, playerctl previous
bind = , XF86Search, exec, anyrun
bind = , XF86PowerOff, exec, shutdown -h now
# WORKSPACES
# ============================================================================
+9 -17
View File
@@ -2,21 +2,14 @@
pkgs,
config,
lib,
anyrun,
...
}@args:
with lib;
let
cfg = config.modules.desktop.hyprland;
in
{
imports = [
# anyrun.homeManagerModules.default # the module is already in hm now.
./options
];
options.modules.desktop.hyprland = {
enable = mkEnableOption "hyprland compositor";
enable = lib.mkEnableOption "hyprland compositor";
settings = lib.mkOption {
type =
with lib.types;
@@ -40,14 +33,13 @@ in
};
};
config = mkIf cfg.enable (
mkMerge (
[
{
wayland.windowManager.hyprland.settings = cfg.settings;
}
]
++ (import ./values args)
)
config = lib.mkIf cfg.enable (
lib.mkMerge [
{
wayland.windowManager.hyprland.settings = cfg.settings;
}
(import ./hyprland.nix args)
(import ./xdg.nix args)
]
);
}
@@ -1,6 +1,5 @@
{
pkgs,
pkgs-stable,
config,
...
}:
@@ -11,38 +10,12 @@ in
xdg.configFile =
let
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
hyprPath = "${config.home.homeDirectory}/nix-config/home/linux/gui/hyprland/conf";
confPath = "${config.home.homeDirectory}/nix-config/home/linux/gui/hyprland/conf";
in
{
"mako".source = mkSymlink "${hyprPath}/mako";
"waybar".source = mkSymlink "${hyprPath}/waybar";
"wlogout".source = mkSymlink "${hyprPath}/wlogout";
"hypr/hypridle.conf".source = mkSymlink "${hyprPath}/hypridle.conf";
"hypr/configs".source = mkSymlink "${hyprPath}/configs";
"hypr/configs".source = mkSymlink confPath;
};
# status bar
programs.waybar = {
enable = true;
systemd.enable = true;
};
# Disable catppuccin to avoid conflict with my non-nix config.
catppuccin.waybar.enable = false;
# screen locker
programs.swaylock.enable = true;
# Logout Menu
programs.wlogout.enable = true;
catppuccin.wlogout.enable = false;
# Hyprland idle daemon
services.hypridle.enable = true;
# notification daemon, the same as dunst
services.mako.enable = true;
catppuccin.mako.enable = false;
# NOTE:
# We have to enable hyprland/i3's systemd user service in home-manager,
# so that gammastep/wallpaper-switcher's user service can be start correctly!
@@ -63,16 +36,7 @@ in
"${configPath}/windowrules.conf"
];
env = [
"NIXOS_OZONE_WL,1" # for any ozone-based browser & electron apps to run on wayland
"MOZ_ENABLE_WAYLAND,1" # for firefox to run on wayland
"MOZ_WEBRENDER,1"
# misc
"_JAVA_AWT_WM_NONREPARENTING,1"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"QT_QPA_PLATFORM,wayland"
"SDL_VIDEODRIVER,wayland"
"GDK_BACKEND,wayland"
"XDG_SESSION_TYPE,wayland"
];
};
# gammastep/wallpaper-switcher need this to be enabled.
@@ -1,4 +0,0 @@
{ mylib, ... }:
{
imports = mylib.scanPaths ./.;
}
@@ -1,28 +0,0 @@
{
config,
lib,
...
}:
with lib;
let
cfg = config.modules.desktop.hyprland;
in
{
options.modules.desktop.hyprland = {
nvidia = mkEnableOption "whether nvidia GPU is used";
};
config = mkIf (cfg.enable && cfg.nvidia) {
wayland.windowManager.hyprland.settings.env = [
# for hyprland with nvidia gpu, ref https://wiki.hyprland.org/Nvidia/
"LIBVA_DRIVER_NAME,nvidia"
"__GLX_VENDOR_LIBRARY_NAME,nvidia"
# enable native Wayland support for most Electron apps
"ELECTRON_OZONE_PLATFORM_HINT,auto"
# VA-API hardware video acceleration
"NVD_BACKEND,direct"
"GBM_BACKEND,nvidia-drm"
];
};
}
@@ -1 +0,0 @@
{ mylib, ... }@args: map (path: import path args) (mylib.scanPaths ./.)
@@ -1,20 +0,0 @@
{
pkgs,
...
}:
{
home.packages = with pkgs; [
swaybg # the wallpaper
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
];
}
+59
View File
@@ -0,0 +1,59 @@
{
pkgs,
config,
lib,
niri,
...
}@args:
let
cfg = config.modules.desktop.niri;
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 (
lib.mkMerge [
{
# 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
home.file.".wayland-session" = {
source = pkgs.writeScript "init-session" ''
# trying to stop a previous niri session
systemctl --user is-active niri.service && systemctl --user stop niri.service
# and then we start a new one
/run/current-system/sw/bin/niri-session
'';
executable = true;
};
}
(import ./settings.nix niri)
(import ./keybindings.nix niri)
(import ./spawn-at-startup.nix niri)
(import ./windowrules.nix niri)
]
);
}
+214
View File
@@ -0,0 +1,214 @@
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")])
(plain "Print" [ (flag "screenshot") ])
(plain "Ctrl+Print" [ (flag "screenshot-screen") ])
(plain "Alt+Print" [ (flag "screenshot-window") ])
# The quit action will show a confirmation dialog to avoid accidental exits.
# If you want to skip the confirmation dialog, set the flag like so:
# (plain "Mod+Shift+E" [(leaf "quit" { skip-confirmation=true; })])
(plain "Mod+Shift+E" [ (flag "quit") ])
(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
@@ -0,0 +1,276 @@
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")
# (flag "dwt")
# (flag "dwtp")
(flag "natural-scroll")
# (leaf "accel-speed" 0.2)
# (leaf "accel-profile" "flat")
# (leaf "tap-button-map" "left-middle-right")
])
(plain "mouse" [
# (flag "natural-scroll")
# (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
@@ -0,0 +1,28 @@
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" ])
];
}
+68
View File
@@ -0,0 +1,68 @@
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
# --------------- Terminal ---------------
# foot → ws 13
(plain "window-rule" [
(leaf "match" { app-id = "foot"; })
(leaf "open-on-workspace" "1terminal")
(leaf "open-maximized" true)
])
# Alacritty → ws 10
(plain "window-rule" [
(leaf "match" { app-id = "Alacritty"; })
(leaf "open-on-workspace" "1terminal")
(leaf "open-maximized" true)
])
# Ghostty → ws 14
(plain "window-rule" [
(leaf "match" { app-id = "com.mitchellh.ghostty"; })
(leaf "open-on-workspace" "1terminal")
(leaf "open-maximized" true)
])
# --------------- Networking ---------------
# Clash Verge → ws 7
(plain "window-rule" [
(leaf "match" { app-id = "clash-verge"; })
(leaf "open-on-workspace" "0other")
])
# --------------- Browser ---------------
# Firefox → ws 11
(plain "window-rule" [
(leaf "match" { app-id = "firefox"; })
(leaf "open-on-workspace" "2browser")
(leaf "open-maximized" true)
])
# Google Chrome → ws 12
(plain "window-rule" [
(leaf "match" { app-id = "google-chrome"; })
(leaf "open-on-workspace" "2browser")
(leaf "open-maximized" true)
])
# --------------- Chatting ---------------
# Telegram → ws 6
(plain "window-rule" [
(leaf "match" { app-id = "org.telegram.desktop"; })
(leaf "open-on-workspace" "3chat")
])
];
}
+2 -1
View File
@@ -4,5 +4,6 @@ This is NixOS's configuration for my Macbook Pro 2022 M2, 16G RAM.
Related:
- [M2 Series Feature Support - Asahi Linux](https://asahilinux.org/docs/platform/feature-support/m2/)
- [/nixos-installer/README.shoukei.md](/nixos-installer/README.shoukei.md)
- https://github.com/nix-community/nixos-apple-silicon/blob/main/docs/uefi-standalone.md
- [nixos-apple-silicon - UEFI Boot Standalone NixOS](https://github.com/nix-community/nixos-apple-silicon/blob/main/docs/uefi-standalone.md)
+24 -6
View File
@@ -21,14 +21,32 @@
enable = true;
peripheralFirmwareDirectory = "${my-asahi-firmware}/macbook-pro-m2-a2338";
# build the Asahi Linux Kernel with Rust support
withRust = true;
# use apple-silicon's GPU instead of CPU
useExperimentalGPUDriver = true;
# How to install the Asahi Mesa driver
experimentalGPUInstallMode = "driver"; # driver / replace(for non-flakes) / overlay
# since mesa 25.1(already in nixpkgs), support for asahi is enabled by default.
};
# Lid & PowerKey settings
#
# Suspend: Store system state to RAM - fast, requires minimal power to maintain RAM.
# Hibernate: Store system state & RAM to Disk, and then poweroff the system.
#
# NOTE: Hibernate is not supported by Asahi Linux.
services.logind = {
lidSwitch = "suspend";
lidSwitchExternalPower = "lock";
# 'Docked' means: more than one display is connected or the system is inserted in a docking station
lidSwitchDocked = "ignore";
powerKey = "suspend";
powerKeyLongPress = "poweroff";
};
systemd.targets.sleep.enable = true;
systemd.sleep.extraConfig = ''
AllowSuspend=yes
AllowHibernate=no
AllowSuspendThenHibernate=no
HibernateDelaySec=5min
'';
# After adding this snippet, you need to restart the system for the touchbar to work.
hardware.apple.touchBar = {
enable = true;
@@ -157,4 +157,5 @@ in
# networking.interfaces.wlan0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
}
+47 -8
View File
@@ -1,15 +1,54 @@
{ config, ... }:
{ config, niri, ... }:
let
hostName = "shoukei"; # Define your hostname.
in
{
modules.desktop.hyprland = {
nvidia = false;
settings.source = [
"${config.home.homeDirectory}/nix-config/hosts/12kingdoms-shoukei/hypr-hardware.conf"
];
};
programs.ssh.matchBlocks."github.com".identityFile =
"${config.home.homeDirectory}/.ssh/${hostName}";
modules.desktop.nvidia.enable = false;
modules.desktop.hyprland.settings.source = [
"${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")
])
];
};
}
@@ -6,4 +6,3 @@
# 1.33: scale to 1.33 times
# bitdepth,10: enable 10 bit support
monitor=eDP-1, highres@highrr, 0x0, 1.33, bitdepth,10
@@ -19,6 +19,7 @@
boot.loader.efi.efiSysMountPoint = "/boot";
boot.loader.systemd-boot.enable = true;
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/top-level/linux-kernels.nix
boot.kernelPackages = pkgs.linuxPackages_latest;
# boot.kernelPackages = pkgs.linuxPackages_xanmod_latest;
+73 -10
View File
@@ -1,13 +1,76 @@
{ config, ... }:
{ config, niri, ... }:
{
modules.desktop = {
hyprland = {
nvidia = true;
settings.source = [
"${config.home.homeDirectory}/nix-config/hosts/idols-ai/hypr-hardware.conf"
];
};
};
programs.ssh.matchBlocks."github.com".identityFile = "${config.home.homeDirectory}/.ssh/idols-ai";
modules.desktop.nvidia.enable = true;
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" "1terminal" [ (leaf "open-on-output" "HDMI-A-1") ])
(node "workspace" "2browser" [ (leaf "open-on-output" "DP-2") ])
(node "workspace" "3chat" [ (leaf "open-on-output" "HDMI-A-1") ])
(node "workspace" "4music" [ (leaf "open-on-output" "DP-2") ])
(node "workspace" "5mail" [ (leaf "open-on-output" "DP-2") ])
(node "workspace" "6file" [ (leaf "open-on-output" "HDMI-A-1") ])
(node "workspace" "0other" [ (leaf "open-on-output" "HDMI-A-1") ])
];
};
}
+8 -10
View File
@@ -17,12 +17,11 @@ let
inherit (myvars.networking) proxyGateway proxyGateway6 nameservers;
inherit (myvars.networking.hostsAddr.${hostName}) iface ipv4;
ipv4WithMask = "${ipv4}/24";
in {
imports =
(mylib.scanPaths ./.)
++ [
disko.nixosModules.default
];
in
{
imports = (mylib.scanPaths ./.) ++ [
disko.nixosModules.default
];
# supported file systems, so we can mount any removable disks with these filesystems
boot.supportedFilesystems = [
@@ -41,8 +40,7 @@ in {
# This doesnt define how much memory will be used by the zram swap devices.
zramSwap.memoryPercent = lib.mkForce 100;
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.kernelModules = ["kvm-amd"];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModprobeConfig = "options kvm_amd nested=1"; # for amd cpu
networking = {
@@ -57,9 +55,9 @@ in {
systemd.network.enable = true;
systemd.network.networks."10-${iface}" = {
matchConfig.Name = [iface];
matchConfig.Name = [ iface ];
networkConfig = {
Address = [ipv4WithMask];
Address = [ ipv4WithMask ];
DNS = nameservers;
DHCP = "ipv6"; # enable DHCPv6 only, so we can get a GUA.
IPv6AcceptRA = true; # for Stateless IPv6 Autoconfiguraton (SLAAC)
@@ -17,7 +17,18 @@
1. https://github.com/kubevirt/monitoring/tree/main/dashboards/grafana
## Loki Mixin
An opinionated set of dashboards, alerts, and recording rules to monitor your Loki cluster. The
mixin provides a comprehensive package for monitoring Loki in production.
1. https://github.com/grafana/loki/tree/main/production/loki-mixin-compiled/dashboards
## Databases
1. https://grafana.com/grafana/dashboards/9628-postgresql-database/
1. PostgreSQL: https://grafana.com/grafana/dashboards/9628-postgresql-database/
- Requires Prometheus PostgreSQL exporter metrics. See: wrouesnel/postgres_exporter
1. CloudNative-PG:
- Instance:
https://github.com/cloudnative-pg/grafana-dashboards/blob/main/charts/cluster/grafana-dashboard.json
- Pooler(PGBouncer): https://github.com/cloudnative-pg/grafana-dashboards/issues/7
File diff suppressed because it is too large Load Diff
@@ -644,6 +644,98 @@
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fieldConfig": {
"defaults": {
"unit": "ops"
}
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 4,
"w": 3,
"x": 21,
"y": 0
},
"hiddenSeries": false,
"id": 42,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": false,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "sum(rate(promtail_custom_bad_words_total{cluster=\"$cluster\", exported_namespace=\"$namespace\", container=~\"$container\"}[$__rate_interval])) by (level)",
"legendFormat": "{{level}}",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "bad words",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "timeseries",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
@@ -839,7 +931,7 @@
"multi": false,
"name": "namespace",
"options": [],
"query": "label_values(loki_build_info{cluster=~\"$cluster\"}, namespace)",
"query": "label_values(kube_pod_info{cluster=~\"$cluster\"}, namespace)",
"refresh": 1,
"regex": "",
"sort": 2,
+8
View File
@@ -0,0 +1,8 @@
{
# systemd-journal - reduce disk usage
# https://www.freedesktop.org/software/systemd/man/latest/journald.conf.html
services.journald.extraConfig = ''
SystemMaxUse=2G
RuntimeMaxUse=256M
'';
}
-8
View File
@@ -8,12 +8,4 @@
};
boot.loader.timeout = lib.mkDefault 8; # wait for x seconds to select the boot entry
# for power management
services = {
power-profiles-daemon = {
enable = true;
};
upower.enable = true;
};
}
+1 -1
View File
@@ -17,7 +17,7 @@
# system monitoring
sysstat
iotop
iotop-c
iftop
btop
nmon
@@ -14,17 +14,27 @@ let
# Shoukei (祥瓊, Shōkei)
name = "shoukei";
base-modules = {
nixos-modules = map mylib.relativeToRoot [
# common
"secrets/nixos.nix"
"modules/nixos/desktop.nix"
# host specific
"hosts/12kingdoms-${name}"
# nixos hardening
# "hardening/profiles/default.nix"
"hardening/nixpaks"
"hardening/bwraps"
];
nixos-modules =
(map mylib.relativeToRoot [
# common
"secrets/nixos.nix"
"modules/nixos/desktop.nix"
# host specific
"hosts/12kingdoms-${name}"
# nixos hardening
# "hardening/profiles/default.nix"
"hardening/nixpaks"
"hardening/bwraps"
])
++ [
inputs.niri.nixosModules.niri
{
modules.desktop.fonts.enable = true;
modules.desktop.wayland.enable = true;
modules.secrets.desktop.enable = true;
modules.secrets.preservation.enable = true;
}
];
home-modules = map mylib.relativeToRoot [
# common
"home/linux/gui.nix"
@@ -35,14 +45,6 @@ let
modules-hyprland = {
nixos-modules = [
{
modules.desktop.wayland.enable = true;
modules.secrets.desktop.enable = true;
modules.secrets.preservation.enable = true;
# TODO: remove this option
nixpkgs.config.allowUnsupportedSstem = true;
}
]
++ base-modules.nixos-modules;
home-modules = [
@@ -50,15 +52,28 @@ let
]
++ base-modules.home-modules;
};
modules-niri = {
nixos-modules = [
{ programs.niri.enable = true; }
]
++ base-modules.nixos-modules;
home-modules = [
{ modules.desktop.niri.enable = true; }
]
++ base-modules.home-modules;
};
in
{
nixosConfigurations = {
# host with hyprland compositor
"${name}-hyprland" = mylib.nixosSystem (modules-hyprland // args);
"${name}-niri" = mylib.nixosSystem (modules-niri // args);
};
# generate iso image for hosts with desktop environment
packages = {
"${name}-hyprland" = inputs.self.nixosConfigurations."${name}-hyprland".config.formats.iso;
"${name}-niri" = inputs.self.nixosConfigurations."${name}-niri".config.formats.iso;
};
}
@@ -6,6 +6,7 @@ let
username = myvars.username;
hosts = [
"shoukei-hyprland"
"shoukei-niri"
];
in
lib.genAttrs hosts (_: "/home/${username}")
@@ -7,6 +7,7 @@ let
username = myvars.username;
hosts = [
"shoukei-hyprland"
"shoukei-niri"
];
in
lib.genAttrs hosts (
@@ -5,6 +5,7 @@
let
specialExpected = {
"shoukei-hyprland" = "shoukei";
"shoukei-niri" = "shoukei";
};
specialHostNames = builtins.attrNames specialExpected;
+35 -17
View File
@@ -8,23 +8,34 @@
mylib,
system,
genSpecialArgs,
niri,
...
}@args:
let
# 星野 アイ, Hoshino Ai
name = "ai";
base-modules = {
nixos-modules = map mylib.relativeToRoot [
# common
"secrets/nixos.nix"
"modules/nixos/desktop.nix"
# host specific
"hosts/idols-${name}"
# nixos hardening
# "hardening/profiles/default.nix"
"hardening/nixpaks"
"hardening/bwraps"
];
nixos-modules =
(map mylib.relativeToRoot [
# common
"secrets/nixos.nix"
"modules/nixos/desktop.nix"
# host specific
"hosts/idols-${name}"
# nixos hardening
# "hardening/profiles/default.nix"
"hardening/nixpaks"
"hardening/bwraps"
])
++ [
inputs.niri.nixosModules.niri
{
modules.desktop.fonts.enable = true;
modules.desktop.wayland.enable = true;
modules.secrets.desktop.enable = true;
modules.secrets.preservation.enable = true;
}
];
home-modules = map mylib.relativeToRoot [
# common
"home/linux/gui.nix"
@@ -35,12 +46,6 @@ let
modules-hyprland = {
nixos-modules = [
{
modules.desktop.fonts.enable = true;
modules.desktop.wayland.enable = true;
modules.secrets.desktop.enable = true;
modules.secrets.preservation.enable = true;
}
]
++ base-modules.nixos-modules;
home-modules = [
@@ -48,15 +53,28 @@ let
]
++ base-modules.home-modules;
};
modules-niri = {
nixos-modules = [
{ programs.niri.enable = true; }
]
++ base-modules.nixos-modules;
home-modules = [
{ modules.desktop.niri.enable = true; }
]
++ base-modules.home-modules;
};
in
{
nixosConfigurations = {
# host with hyprland compositor
"${name}-hyprland" = mylib.nixosSystem (modules-hyprland // args);
"${name}-niri" = mylib.nixosSystem (modules-niri // args);
};
# generate iso image for hosts with desktop environment
packages = {
"${name}-hyprland" = inputs.self.nixosConfigurations."${name}-hyprland".config.formats.iso;
"${name}-niri" = inputs.self.nixosConfigurations."${name}-niri".config.formats.iso;
};
}
@@ -6,6 +6,7 @@ let
username = myvars.username;
hosts = [
"ai-hyprland"
"ai-niri"
"ruby"
"k3s-prod-1-master-1"
];
@@ -7,6 +7,7 @@ let
username = myvars.username;
hosts = [
"ai-hyprland"
"ai-niri"
"ruby"
"k3s-prod-1-master-1"
];
@@ -5,6 +5,7 @@
let
specialExpected = {
"ai-hyprland" = "ai";
"ai-niri" = "ai";
};
specialHostNames = builtins.attrNames specialExpected;
+13
View File
@@ -1,9 +1,15 @@
def repeat-str [s: string, n: int] {
(1..$n | each { $s } | str join)
}
# ================= NixOS related =========================
export def nixos-switch [
name: string
mode: string
] {
print $"nixos-switch '($name)' in '($mode)' mode..."
print (repeat-str "=" 50)
if "debug" == $mode {
# show details via nix-output-monitor
nom build $".#nixosConfigurations.($name).config.system.build.toplevel" --show-trace --verbose
@@ -19,6 +25,7 @@ export def nixos-switch [
export def make-editable [
path: string
] {
print (repeat-str "=" 50)
let tmpdir = (mktemp -d)
rsync -avz --copy-links $"($path)/" $tmpdir
rsync -avz --copy-links --chmod=D2755,F744 $"($tmpdir)/" $path
@@ -31,6 +38,8 @@ export def darwin-build [
name: string
mode: string
] {
print $"darwin-build '($name)' in '($mode)' mode..."
print (repeat-str "=" 50)
let target = $".#darwinConfigurations.($name).system"
if "debug" == $mode {
nom build $target --extra-experimental-features "nix-command flakes" --show-trace --verbose
@@ -43,6 +52,8 @@ export def darwin-switch [
name: string
mode: string
] {
print $"darwin-switch '($name)' in '($mode)' mode..."
print (repeat-str "=" 50)
if "debug" == $mode {
sudo -E ./result/sw/bin/darwin-rebuild switch --flake $".#($name)" --show-trace --verbose
} else {
@@ -61,6 +72,8 @@ export def upload-vm [
name: string
mode: string
] {
print $"upload-vm '($name)' in '($mode)' mode..."
print (repeat-str "=" 50)
let target = $".#($name)"
if "debug" == $mode {
nom build $target --show-trace --verbose