Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8a2c5ba577 | |||
| f904a672d4 | |||
| 379fdd5b46 | |||
| 21090c93e8 | |||
| 2b914efbb1 | |||
| 7b1bab3c9b | |||
| d517d74bf7 | |||
| d83cfcf681 | |||
| a9d08f15a2 | |||
| ce4588d0c2 | |||
| 69eee64e7e | |||
| 09fbea3f77 | |||
| 64a7b2c6cf | |||
| c8bc396e89 | |||
| 035c07d658 | |||
| 30d73dabf1 | |||
| adc49e7f6e | |||
| 74b19dd7dc | |||
| 329f03c1e2 | |||
| 99cf8d6ac6 | |||
| d222dc05a9 | |||
| 84b30c0233 | |||
| ebf1b6b4d0 | |||
| 6e246c38b6 | |||
| f5e2f1832a | |||
| d53ab3b4e3 |
@@ -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]
|
[linux]
|
||||||
[group('desktop')]
|
[group('desktop')]
|
||||||
hypr mode="default":
|
hypr mode="default":
|
||||||
#!/usr/bin/env nu
|
#!/usr/bin/env nu
|
||||||
use {{utils_nu}} *;
|
use {{utils_nu}} *;
|
||||||
nixos-switch ai-hyprland {{mode}}
|
nixos-switch $"(hostname)-hyprland" {{mode}}
|
||||||
|
|
||||||
|
# Deploy the niri nixosConfiguration by hostname match
|
||||||
[linux]
|
[linux]
|
||||||
[group('desktop')]
|
[group('desktop')]
|
||||||
s-hypr mode="default":
|
niri mode="default":
|
||||||
#!/usr/bin/env nu
|
#!/usr/bin/env nu
|
||||||
use {{utils_nu}} *;
|
use {{utils_nu}} *;
|
||||||
nixos-switch shoukei-hyprland {{mode}}
|
nixos-switch $"(hostname)-niri" {{mode}}
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
#
|
#
|
||||||
@@ -141,23 +151,15 @@ darwin-rollback:
|
|||||||
use {{utils_nu}} *;
|
use {{utils_nu}} *;
|
||||||
darwin-rollback
|
darwin-rollback
|
||||||
|
|
||||||
# Depoly to fern(macOS host)
|
# Deploy the darwinConfiguration by hostname match
|
||||||
[macos]
|
[macos]
|
||||||
[group('desktop')]
|
[group('desktop')]
|
||||||
fe mode="default":
|
local mode="default":
|
||||||
#!/usr/bin/env nu
|
#!/usr/bin/env nu
|
||||||
use {{utils_nu}} *;
|
use {{utils_nu}} *;
|
||||||
darwin-build "fern" {{mode}};
|
darwin-build (hostname) {{mode}};
|
||||||
darwin-switch "fern" {{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
|
# Reset launchpad to force it to reindex Applications
|
||||||
[macos]
|
[macos]
|
||||||
@@ -178,13 +180,6 @@ reset-launchpad:
|
|||||||
col tag:
|
col tag:
|
||||||
colmena apply --on '@{{tag}}' --verbose --show-trace
|
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
|
# Build and upload a vm image
|
||||||
[linux]
|
[linux]
|
||||||
[group('homelab')]
|
[group('homelab')]
|
||||||
@@ -204,37 +199,16 @@ lab:
|
|||||||
shoryu:
|
shoryu:
|
||||||
colmena apply --on '@kubevirt-shoryu' --verbose --show-trace
|
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]
|
[linux]
|
||||||
[group('homelab')]
|
[group('homelab')]
|
||||||
shushou:
|
shushou:
|
||||||
colmena apply --on '@kubevirt-shushou' --verbose --show-trace
|
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]
|
[linux]
|
||||||
[group('homelab')]
|
[group('homelab')]
|
||||||
youko:
|
youko:
|
||||||
colmena apply --on '@kubevirt-youko' --verbose --show-trace
|
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
|
# Commands for other Virtual Machines
|
||||||
@@ -256,37 +230,16 @@ upload-idols mode="default":
|
|||||||
aqua:
|
aqua:
|
||||||
colmena apply --on '@aqua' --verbose --show-trace
|
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]
|
[linux]
|
||||||
[group('homelab')]
|
[group('homelab')]
|
||||||
ruby:
|
ruby:
|
||||||
colmena apply --on '@ruby' --verbose --show-trace
|
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]
|
[linux]
|
||||||
[group('homelab')]
|
[group('homelab')]
|
||||||
kana:
|
kana:
|
||||||
colmena apply --on '@kana' --verbose --show-trace
|
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
|
# Kubernetes related commands
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ You don't have to go through the pain I've experienced again! Check out my
|
|||||||
|
|
||||||
| | NixOS(Wayland) |
|
| | NixOS(Wayland) |
|
||||||
| --------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
| --------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
||||||
| **Window Manager** | [Hyprland][Hyprland] |
|
| **Window Manager** | [Hyprland][Hyprland] / [Niri][Niri] |
|
||||||
| **Terminal Emulator** | [Zellij][Zellij] + [Kitty][Kitty] |
|
| **Terminal Emulator** | [Zellij][Zellij] + [Kitty][Kitty] |
|
||||||
| **Bar** | [Waybar][Waybar] |
|
| **Bar** | [Waybar][Waybar] |
|
||||||
| **Application Launcher** | [anyrun][anyrun] |
|
| **Application Launcher** | [anyrun][anyrun] |
|
||||||
@@ -116,7 +116,8 @@ For NixOS:
|
|||||||
sudo nixos-rebuild switch --flake .#ai-hyprland
|
sudo nixos-rebuild switch --flake .#ai-hyprland
|
||||||
|
|
||||||
# deploy via `just`(a command runner with similar syntax to make) & Justfile
|
# 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
|
# or we can deploy with details
|
||||||
just hypr debug
|
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.
|
# 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.
|
# 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)
|
# Deploy the darwinConfiguration by hostname match
|
||||||
just fr
|
just local
|
||||||
|
|
||||||
# deploy with details
|
# 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)
|
> [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)
|
- [1amSimp1e/dots](https://github.com/1amSimp1e/dots)
|
||||||
|
|
||||||
[Hyprland]: https://github.com/hyprwm/Hyprland
|
[Hyprland]: https://github.com/hyprwm/Hyprland
|
||||||
|
[Niri]: https://github.com/YaLTeR/niri
|
||||||
[Kitty]: https://github.com/kovidgoyal/kitty
|
[Kitty]: https://github.com/kovidgoyal/kitty
|
||||||
[Nushell]: https://github.com/nushell/nushell
|
[Nushell]: https://github.com/nushell/nushell
|
||||||
[Starship]: https://github.com/starship/starship
|
[Starship]: https://github.com/starship/starship
|
||||||
|
|||||||
@@ -33,11 +33,11 @@
|
|||||||
"systems": "systems_2"
|
"systems": "systems_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748365336,
|
"lastModified": 1755411828,
|
||||||
"narHash": "sha256-pg0w4uOZI32dLASD6UbBezeQg5PwOa0GLv7rTwn3VxY=",
|
"narHash": "sha256-TJhktHx79CMN6dCvFMST9PECDS9zW5iWEDyiMleXUSo=",
|
||||||
"owner": "Kirottu",
|
"owner": "Kirottu",
|
||||||
"repo": "anyrun",
|
"repo": "anyrun",
|
||||||
"rev": "25367153f225a59c5ce5746583e39a71ff052f09",
|
"rev": "0c3fa788227d29cf8b0184e553c83021bcebad7c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -54,11 +54,11 @@
|
|||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"dir": "blender",
|
"dir": "blender",
|
||||||
"lastModified": 1752701743,
|
"lastModified": 1754037902,
|
||||||
"narHash": "sha256-cQeX9PP5F7fgsuv0CrL16GtlU6MS0i9LLnkkITu8jA8=",
|
"narHash": "sha256-d9hAFy/R8o5UM/mrgCBm+xE8NbtgkXYPHLVza07xGgE=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "nix-warez",
|
"repo": "nix-warez",
|
||||||
"rev": "69acfebb3740542936f71775bcdf322dc328a655",
|
"rev": "e8b2b3214f07970e45ec3fc98d957b0507a3564a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -75,11 +75,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753702336,
|
"lastModified": 1755334713,
|
||||||
"narHash": "sha256-IVFUQV6egGQHnm+I183OT+4ct/ka1IWA5u/0A9I/YV4=",
|
"narHash": "sha256-Nxq+mi6aqEbJA4R7i4TLr68ANuIgnEo2aKzJKRYd11s=",
|
||||||
"owner": "catppuccin",
|
"owner": "catppuccin",
|
||||||
"repo": "nix",
|
"repo": "nix",
|
||||||
"rev": "b32de96c3c5384c83b0f4d741ec58a7f97c9ab11",
|
"rev": "a2ef20ed6fb921073c2d1b1929447c3bd88f595e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -196,11 +196,11 @@
|
|||||||
"flake-compat_4": {
|
"flake-compat_4": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1696426674,
|
"lastModified": 1747046372,
|
||||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -256,11 +256,11 @@
|
|||||||
"nixpkgs-lib": "nixpkgs-lib"
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753121425,
|
"lastModified": 1754487366,
|
||||||
"narHash": "sha256-TVcTNvOeWWk1DXljFxVRp+E0tzG1LhrVjOGGoMHuXio=",
|
"narHash": "sha256-pHYj8gUBapuUzKV/kN/tR3Zvqc7o6gdFB9XKXIp1SQ8=",
|
||||||
"owner": "hercules-ci",
|
"owner": "hercules-ci",
|
||||||
"repo": "flake-parts",
|
"repo": "flake-parts",
|
||||||
"rev": "644e0fc48951a860279da645ba77fe4a6e814c5e",
|
"rev": "af66ad14b28a127c5c0f3bbb298218fc63528a18",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -277,11 +277,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753121425,
|
"lastModified": 1754487366,
|
||||||
"narHash": "sha256-TVcTNvOeWWk1DXljFxVRp+E0tzG1LhrVjOGGoMHuXio=",
|
"narHash": "sha256-pHYj8gUBapuUzKV/kN/tR3Zvqc7o6gdFB9XKXIp1SQ8=",
|
||||||
"owner": "hercules-ci",
|
"owner": "hercules-ci",
|
||||||
"repo": "flake-parts",
|
"repo": "flake-parts",
|
||||||
"rev": "644e0fc48951a860279da645ba77fe4a6e814c5e",
|
"rev": "af66ad14b28a127c5c0f3bbb298218fc63528a18",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -335,11 +335,11 @@
|
|||||||
"zon2nix": "zon2nix"
|
"zon2nix": "zon2nix"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753722074,
|
"lastModified": 1755285323,
|
||||||
"narHash": "sha256-yGQ28k8iz2tGrj5oo/HBkn0ihWA5uUZ1ZErkMtegzTw=",
|
"narHash": "sha256-o+TmZKnch5D0IjhWD/rhVK9Ahqafz6oZ61NKDDocXMw=",
|
||||||
"owner": "ghostty-org",
|
"owner": "ghostty-org",
|
||||||
"repo": "ghostty",
|
"repo": "ghostty",
|
||||||
"rev": "92c1f4b0b9c6fde6d8f79109de71bf4e30831e86",
|
"rev": "11d56235f9e4a227b794a87a503785ef9f3349ed",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -465,11 +465,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753807879,
|
"lastModified": 1755397986,
|
||||||
"narHash": "sha256-d8nxwjUxnRyLWc5G/CpGVsqcSU3ZolS/QYWm9L+/CG0=",
|
"narHash": "sha256-qwrF5laj6eE3Zht0wKYTmH6QzL7bdOyE2f6jd3WCO8g=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "25deca893974aae98c9be151fb47d6284c053470",
|
"rev": "8b4ac149687e8520187a66f05e9d4eafebf96522",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -539,6 +539,62 @@
|
|||||||
"url": "ssh://git@github.com/ryan4yin/nix-secrets.git"
|
"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": {
|
"nix-darwin": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -546,11 +602,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1751313918,
|
"lastModified": 1755275010,
|
||||||
"narHash": "sha256-HsJM3XLa43WpG+665aGEh8iS8AfEwOIQWk3Mke3e7nk=",
|
"narHash": "sha256-lEApCoWUEWh0Ifc3k1JdVjpMtFFXeL2gG1qvBnoRc2I=",
|
||||||
"owner": "lnl7",
|
"owner": "lnl7",
|
||||||
"repo": "nix-darwin",
|
"repo": "nix-darwin",
|
||||||
"rev": "e04a388232d9a6ba56967ce5b53a8a6f713cdfcf",
|
"rev": "7220b01d679e93ede8d7b25d6f392855b81dd475",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -567,11 +623,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753582293,
|
"lastModified": 1755396822,
|
||||||
"narHash": "sha256-CimzlksXOfuPcLr4ye/s4hwZhHk98f0gnXB6Dq9RhZo=",
|
"narHash": "sha256-gID7ynpJuflQ/+ibrhYUWybiGPduNvvMJSk27oqfK24=",
|
||||||
"owner": "fufexan",
|
"owner": "fufexan",
|
||||||
"repo": "nix-gaming",
|
"repo": "nix-gaming",
|
||||||
"rev": "ceb9d44f09b0db02332873247a50210a486959ff",
|
"rev": "f2bf778502254d8852402a83ae346fd803095ccc",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -600,20 +656,21 @@
|
|||||||
"flake-compat": "flake-compat_3",
|
"flake-compat": "flake-compat_3",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
],
|
||||||
|
"treefmt-nix": "treefmt-nix"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1751622568,
|
"lastModified": 1755124568,
|
||||||
"narHash": "sha256-EE3NBsej517VRa1x+ylAghrvngftxf1KgfHlE9OYyXE=",
|
"narHash": "sha256-8fXTYruAwE6OiIz/99P5qknQYag7ZX985pNT+jhIIrU=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixos-apple-silicon",
|
"repo": "nixos-apple-silicon",
|
||||||
"rev": "eba4b40c816e5aff8951ae231ac237e8aab8ec1d",
|
"rev": "2f873fc3ef373e59cd3a7dad4087685fc8ce02ca",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
|
"ref": "release-2025-08-10",
|
||||||
"repo": "nixos-apple-silicon",
|
"repo": "nixos-apple-silicon",
|
||||||
"rev": "eba4b40c816e5aff8951ae231ac237e8aab8ec1d",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -647,11 +704,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753324041,
|
"lastModified": 1755139484,
|
||||||
"narHash": "sha256-2JZ82g01Lo3f0SNP2WSDZ0ER1FnAN2WicULZkoEsRx0=",
|
"narHash": "sha256-gCMJp0indBuBXnog2C86aby5Pz268gUMZD0ORahulO8=",
|
||||||
"owner": "nixpak",
|
"owner": "nixpak",
|
||||||
"repo": "nixpak",
|
"repo": "nixpak",
|
||||||
"rev": "fedd4b59b7c8f18be508dee9d89985a8501982d0",
|
"rev": "ae70d05017be7e0aa6c1cf5f267fe6953eb027e6",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -675,11 +732,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-darwin": {
|
"nixpkgs-darwin": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753722563,
|
"lastModified": 1755268003,
|
||||||
"narHash": "sha256-FK8iq76wlacriq3u0kFCehsRYTAqjA9nfprpiSWRWIc=",
|
"narHash": "sha256-nNaeJjo861wFR0tjHDyCnHs1rbRtrMgxAKMoig9Sj/w=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "648f70160c03151bc2121d179291337ad6bc564b",
|
"rev": "32f313e49e42f715491e1ea7b306a87c16fe0388",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -691,11 +748,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-lib": {
|
"nixpkgs-lib": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1751159883,
|
"lastModified": 1753579242,
|
||||||
"narHash": "sha256-urW/Ylk9FIfvXfliA1ywh75yszAbiTEVgpPeinFyVZo=",
|
"narHash": "sha256-zvaMGVn14/Zz8hnp4VWT9xVnhc8vuL3TStRqwk22biA=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixpkgs.lib",
|
"repo": "nixpkgs.lib",
|
||||||
"rev": "14a40a1d7fb9afa4739275ac642ed7301a9ba1ab",
|
"rev": "0f36c44e01a6129be94e3ade315a5883f0228a6e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -706,11 +763,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-ollama": {
|
"nixpkgs-ollama": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753694789,
|
"lastModified": 1755186698,
|
||||||
"narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=",
|
"narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "dc9637876d0dcc8c9e5e22986b857632effeb727",
|
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -738,11 +795,27 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-stable_2": {
|
"nixpkgs-stable_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753489912,
|
"lastModified": 1755274400,
|
||||||
"narHash": "sha256-uDCFHeXdRIgJpYmtcUxGEsZ+hYlLPBhR83fdU+vbC1s=",
|
"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",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "13e8d35b7d6028b7198f8186bc0347c6abaa2701",
|
"rev": "ad7196ae55c295f53a7d1ec39e4a06d922f3b899",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -754,11 +827,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-unstable": {
|
"nixpkgs-unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753694789,
|
"lastModified": 1755186698,
|
||||||
"narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=",
|
"narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "dc9637876d0dcc8c9e5e22986b857632effeb727",
|
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -770,11 +843,27 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753694789,
|
"lastModified": 1755186698,
|
||||||
"narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=",
|
"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",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "dc9637876d0dcc8c9e5e22986b857632effeb727",
|
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -850,11 +939,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1750779888,
|
"lastModified": 1754416808,
|
||||||
"narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
|
"narHash": "sha256-c6yg0EQ9xVESx6HGDOCMcyRSjaTpNJP10ef+6fRcofA=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "git-hooks.nix",
|
"repo": "git-hooks.nix",
|
||||||
"rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
|
"rev": "9c52372878df6911f9afc1e2a1391f55e4dfc864",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -918,15 +1007,16 @@
|
|||||||
"lanzaboote": "lanzaboote",
|
"lanzaboote": "lanzaboote",
|
||||||
"my-asahi-firmware": "my-asahi-firmware",
|
"my-asahi-firmware": "my-asahi-firmware",
|
||||||
"mysecrets": "mysecrets",
|
"mysecrets": "mysecrets",
|
||||||
|
"niri": "niri",
|
||||||
"nix-darwin": "nix-darwin",
|
"nix-darwin": "nix-darwin",
|
||||||
"nix-gaming": "nix-gaming",
|
"nix-gaming": "nix-gaming",
|
||||||
"nixos-apple-silicon": "nixos-apple-silicon",
|
"nixos-apple-silicon": "nixos-apple-silicon",
|
||||||
"nixos-generators": "nixos-generators",
|
"nixos-generators": "nixos-generators",
|
||||||
"nixpak": "nixpak",
|
"nixpak": "nixpak",
|
||||||
"nixpkgs": "nixpkgs_2",
|
"nixpkgs": "nixpkgs_3",
|
||||||
"nixpkgs-darwin": "nixpkgs-darwin",
|
"nixpkgs-darwin": "nixpkgs-darwin",
|
||||||
"nixpkgs-ollama": "nixpkgs-ollama",
|
"nixpkgs-ollama": "nixpkgs-ollama",
|
||||||
"nixpkgs-stable": "nixpkgs-stable_2",
|
"nixpkgs-stable": "nixpkgs-stable_3",
|
||||||
"nixpkgs-unstable": "nixpkgs-unstable",
|
"nixpkgs-unstable": "nixpkgs-unstable",
|
||||||
"nuenv": "nuenv",
|
"nuenv": "nuenv",
|
||||||
"nur-ryan4yin": "nur-ryan4yin",
|
"nur-ryan4yin": "nur-ryan4yin",
|
||||||
@@ -1039,6 +1129,27 @@
|
|||||||
"type": "github"
|
"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": {
|
"wallpapers": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
@@ -1055,6 +1166,39 @@
|
|||||||
"type": "github"
|
"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": {
|
"zig": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": [
|
"flake-compat": [
|
||||||
|
|||||||
@@ -139,10 +139,12 @@
|
|||||||
|
|
||||||
nixos-apple-silicon = {
|
nixos-apple-silicon = {
|
||||||
# 2025-07-04
|
# 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";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
niri.url = "github:sodiboo/niri-flake";
|
||||||
|
|
||||||
######################## Some non-flake repositories #########################################
|
######################## Some non-flake repositories #########################################
|
||||||
|
|
||||||
polybar-themes = {
|
polybar-themes = {
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
kubectl-tree # kubectl tree
|
kubectl-tree # kubectl tree
|
||||||
kubectl-node-shell # exec into node
|
kubectl-node-shell # exec into node
|
||||||
kubepug # kubernetes pre upgrade checker
|
kubepug # kubernetes pre upgrade checker
|
||||||
|
kubectl-cnpg # cloudnative-pg's cli tool
|
||||||
|
|
||||||
kubebuilder
|
kubebuilder
|
||||||
istioctl
|
istioctl
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
general {
|
general {
|
||||||
lock_cmd = pidof swaylock || swaylock # avoid starting multiple instances
|
lock_cmd = pidof swaylock || swaylock # avoid starting multiple instances
|
||||||
before_sleep_cmd = loginctl lock-session # lock before suspend
|
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
|
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 {
|
||||||
# listener {
|
timeout = 180 # 3 minutes
|
||||||
# timeout = 180 # 3 minutes
|
# List devices: brightnessctl --list
|
||||||
# on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
|
# Adjust keyboard backlight: brightnessctl -d kbd_backlight set 50%
|
||||||
# on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
|
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 {
|
# listener {
|
||||||
# timeout = 600 # 10min.
|
# timeout = 600 # 10min.
|
||||||
@@ -20,13 +20,13 @@ general {
|
|||||||
# }
|
# }
|
||||||
|
|
||||||
listener {
|
listener {
|
||||||
timeout = 1200 # 20 minutes
|
timeout = 1600 # 20 minutes
|
||||||
on-timeout = pidof swaylock || swaylock # lock screen
|
on-timeout = pidof swaylock || swaylock # lock screen
|
||||||
on-resume = hyprctl dispatch dpms on # monitor wake up
|
on-resume = hyprctl dispatch dpms on # monitor wake up
|
||||||
}
|
}
|
||||||
|
|
||||||
listener {
|
listener {
|
||||||
timeout = 1260 # 21 minutes
|
timeout = 1660 # 31 minutes
|
||||||
on-timeout = hyprctl dispatch dpms off # screen off
|
on-timeout = hyprctl dispatch dpms off # screen off
|
||||||
on-resume = hyprctl dispatch dpms on && brightnessctl -r # monitor wake up & screen on
|
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 |
@@ -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;
|
||||||
|
}
|
||||||
@@ -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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -38,10 +38,5 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
|
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 = , XF86AudioNext, exec, playerctl next
|
||||||
bind = , XF86AudioPrev, exec, playerctl previous
|
bind = , XF86AudioPrev, exec, playerctl previous
|
||||||
bind = , XF86Search, exec, anyrun
|
bind = , XF86Search, exec, anyrun
|
||||||
bind = , XF86PowerOff, exec, shutdown -h now
|
|
||||||
|
|
||||||
# WORKSPACES
|
# WORKSPACES
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@@ -2,21 +2,14 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
anyrun,
|
|
||||||
...
|
...
|
||||||
}@args:
|
}@args:
|
||||||
with lib;
|
|
||||||
let
|
let
|
||||||
cfg = config.modules.desktop.hyprland;
|
cfg = config.modules.desktop.hyprland;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
|
||||||
# anyrun.homeManagerModules.default # the module is already in hm now.
|
|
||||||
./options
|
|
||||||
];
|
|
||||||
|
|
||||||
options.modules.desktop.hyprland = {
|
options.modules.desktop.hyprland = {
|
||||||
enable = mkEnableOption "hyprland compositor";
|
enable = lib.mkEnableOption "hyprland compositor";
|
||||||
settings = lib.mkOption {
|
settings = lib.mkOption {
|
||||||
type =
|
type =
|
||||||
with lib.types;
|
with lib.types;
|
||||||
@@ -40,14 +33,13 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable (
|
config = lib.mkIf cfg.enable (
|
||||||
mkMerge (
|
lib.mkMerge [
|
||||||
[
|
{
|
||||||
{
|
wayland.windowManager.hyprland.settings = cfg.settings;
|
||||||
wayland.windowManager.hyprland.settings = cfg.settings;
|
}
|
||||||
}
|
(import ./hyprland.nix args)
|
||||||
]
|
(import ./xdg.nix args)
|
||||||
++ (import ./values args)
|
]
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-stable,
|
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
@@ -11,38 +10,12 @@ in
|
|||||||
xdg.configFile =
|
xdg.configFile =
|
||||||
let
|
let
|
||||||
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
|
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
|
in
|
||||||
{
|
{
|
||||||
"mako".source = mkSymlink "${hyprPath}/mako";
|
"hypr/configs".source = mkSymlink confPath;
|
||||||
"waybar".source = mkSymlink "${hyprPath}/waybar";
|
|
||||||
"wlogout".source = mkSymlink "${hyprPath}/wlogout";
|
|
||||||
"hypr/hypridle.conf".source = mkSymlink "${hyprPath}/hypridle.conf";
|
|
||||||
"hypr/configs".source = mkSymlink "${hyprPath}/configs";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# 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:
|
# NOTE:
|
||||||
# We have to enable hyprland/i3's systemd user service in home-manager,
|
# 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!
|
# so that gammastep/wallpaper-switcher's user service can be start correctly!
|
||||||
@@ -63,16 +36,7 @@ in
|
|||||||
"${configPath}/windowrules.conf"
|
"${configPath}/windowrules.conf"
|
||||||
];
|
];
|
||||||
env = [
|
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.
|
# 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
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -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)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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")])
|
||||||
|
])
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -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; })
|
||||||
|
])
|
||||||
|
])
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -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" ])
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -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")
|
||||||
|
])
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -4,5 +4,6 @@ This is NixOS's configuration for my Macbook Pro 2022 M2, 16G RAM.
|
|||||||
|
|
||||||
Related:
|
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)
|
- [/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)
|
||||||
|
|||||||
@@ -21,14 +21,32 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
peripheralFirmwareDirectory = "${my-asahi-firmware}/macbook-pro-m2-a2338";
|
peripheralFirmwareDirectory = "${my-asahi-firmware}/macbook-pro-m2-a2338";
|
||||||
|
|
||||||
# build the Asahi Linux Kernel with Rust support
|
# since mesa 25.1(already in nixpkgs), support for asahi is enabled by default.
|
||||||
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
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# 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.
|
# After adding this snippet, you need to restart the system for the touchbar to work.
|
||||||
hardware.apple.touchBar = {
|
hardware.apple.touchBar = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -157,4 +157,5 @@ in
|
|||||||
# networking.interfaces.wlan0.useDHCP = lib.mkDefault true;
|
# networking.interfaces.wlan0.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
|
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
|
||||||
|
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,54 @@
|
|||||||
{ config, ... }:
|
{ config, niri, ... }:
|
||||||
let
|
let
|
||||||
hostName = "shoukei"; # Define your hostname.
|
hostName = "shoukei"; # Define your hostname.
|
||||||
in
|
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 =
|
programs.ssh.matchBlocks."github.com".identityFile =
|
||||||
"${config.home.homeDirectory}/.ssh/${hostName}";
|
"${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
|
# 1.33: scale to 1.33 times
|
||||||
# bitdepth,10: enable 10 bit support
|
# bitdepth,10: enable 10 bit support
|
||||||
monitor=eDP-1, highres@highrr, 0x0, 1.33, bitdepth,10
|
monitor=eDP-1, highres@highrr, 0x0, 1.33, bitdepth,10
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
boot.loader.efi.efiSysMountPoint = "/boot";
|
boot.loader.efi.efiSysMountPoint = "/boot";
|
||||||
boot.loader.systemd-boot.enable = true;
|
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_latest;
|
||||||
# boot.kernelPackages = pkgs.linuxPackages_xanmod_latest;
|
# boot.kernelPackages = pkgs.linuxPackages_xanmod_latest;
|
||||||
|
|
||||||
|
|||||||
@@ -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";
|
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") ])
|
||||||
|
];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,12 +17,11 @@ let
|
|||||||
inherit (myvars.networking) proxyGateway proxyGateway6 nameservers;
|
inherit (myvars.networking) proxyGateway proxyGateway6 nameservers;
|
||||||
inherit (myvars.networking.hostsAddr.${hostName}) iface ipv4;
|
inherit (myvars.networking.hostsAddr.${hostName}) iface ipv4;
|
||||||
ipv4WithMask = "${ipv4}/24";
|
ipv4WithMask = "${ipv4}/24";
|
||||||
in {
|
in
|
||||||
imports =
|
{
|
||||||
(mylib.scanPaths ./.)
|
imports = (mylib.scanPaths ./.) ++ [
|
||||||
++ [
|
disko.nixosModules.default
|
||||||
disko.nixosModules.default
|
];
|
||||||
];
|
|
||||||
|
|
||||||
# supported file systems, so we can mount any removable disks with these filesystems
|
# supported file systems, so we can mount any removable disks with these filesystems
|
||||||
boot.supportedFilesystems = [
|
boot.supportedFilesystems = [
|
||||||
@@ -41,8 +40,7 @@ in {
|
|||||||
# This doesn’t define how much memory will be used by the zram swap devices.
|
# This doesn’t define how much memory will be used by the zram swap devices.
|
||||||
zramSwap.memoryPercent = lib.mkForce 100;
|
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
|
boot.extraModprobeConfig = "options kvm_amd nested=1"; # for amd cpu
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
@@ -57,9 +55,9 @@ in {
|
|||||||
systemd.network.enable = true;
|
systemd.network.enable = true;
|
||||||
|
|
||||||
systemd.network.networks."10-${iface}" = {
|
systemd.network.networks."10-${iface}" = {
|
||||||
matchConfig.Name = [iface];
|
matchConfig.Name = [ iface ];
|
||||||
networkConfig = {
|
networkConfig = {
|
||||||
Address = [ipv4WithMask];
|
Address = [ ipv4WithMask ];
|
||||||
DNS = nameservers;
|
DNS = nameservers;
|
||||||
DHCP = "ipv6"; # enable DHCPv6 only, so we can get a GUA.
|
DHCP = "ipv6"; # enable DHCPv6 only, so we can get a GUA.
|
||||||
IPv6AcceptRA = true; # for Stateless IPv6 Autoconfiguraton (SLAAC)
|
IPv6AcceptRA = true; # for Stateless IPv6 Autoconfiguraton (SLAAC)
|
||||||
|
|||||||
@@ -17,7 +17,18 @@
|
|||||||
|
|
||||||
1. https://github.com/kubevirt/monitoring/tree/main/dashboards/grafana
|
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
|
## 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
|
||||||
|
|||||||
@@ -644,6 +644,98 @@
|
|||||||
"alignLevel": null
|
"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": {},
|
"aliasColors": {},
|
||||||
"bars": false,
|
"bars": false,
|
||||||
@@ -839,7 +931,7 @@
|
|||||||
"multi": false,
|
"multi": false,
|
||||||
"name": "namespace",
|
"name": "namespace",
|
||||||
"options": [],
|
"options": [],
|
||||||
"query": "label_values(loki_build_info{cluster=~\"$cluster\"}, namespace)",
|
"query": "label_values(kube_pod_info{cluster=~\"$cluster\"}, namespace)",
|
||||||
"refresh": 1,
|
"refresh": 1,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 2,
|
"sort": 2,
|
||||||
|
|||||||
@@ -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,12 +8,4 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
boot.loader.timeout = lib.mkDefault 8; # wait for x seconds to select the boot entry
|
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;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
# system monitoring
|
# system monitoring
|
||||||
sysstat
|
sysstat
|
||||||
iotop
|
iotop-c
|
||||||
iftop
|
iftop
|
||||||
btop
|
btop
|
||||||
nmon
|
nmon
|
||||||
|
|||||||
@@ -14,17 +14,27 @@ let
|
|||||||
# Shoukei (祥瓊, Shōkei)
|
# Shoukei (祥瓊, Shōkei)
|
||||||
name = "shoukei";
|
name = "shoukei";
|
||||||
base-modules = {
|
base-modules = {
|
||||||
nixos-modules = map mylib.relativeToRoot [
|
nixos-modules =
|
||||||
# common
|
(map mylib.relativeToRoot [
|
||||||
"secrets/nixos.nix"
|
# common
|
||||||
"modules/nixos/desktop.nix"
|
"secrets/nixos.nix"
|
||||||
# host specific
|
"modules/nixos/desktop.nix"
|
||||||
"hosts/12kingdoms-${name}"
|
# host specific
|
||||||
# nixos hardening
|
"hosts/12kingdoms-${name}"
|
||||||
# "hardening/profiles/default.nix"
|
# nixos hardening
|
||||||
"hardening/nixpaks"
|
# "hardening/profiles/default.nix"
|
||||||
"hardening/bwraps"
|
"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 [
|
home-modules = map mylib.relativeToRoot [
|
||||||
# common
|
# common
|
||||||
"home/linux/gui.nix"
|
"home/linux/gui.nix"
|
||||||
@@ -35,14 +45,6 @@ let
|
|||||||
|
|
||||||
modules-hyprland = {
|
modules-hyprland = {
|
||||||
nixos-modules = [
|
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;
|
++ base-modules.nixos-modules;
|
||||||
home-modules = [
|
home-modules = [
|
||||||
@@ -50,15 +52,28 @@ let
|
|||||||
]
|
]
|
||||||
++ base-modules.home-modules;
|
++ 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
|
in
|
||||||
{
|
{
|
||||||
nixosConfigurations = {
|
nixosConfigurations = {
|
||||||
# host with hyprland compositor
|
# host with hyprland compositor
|
||||||
"${name}-hyprland" = mylib.nixosSystem (modules-hyprland // args);
|
"${name}-hyprland" = mylib.nixosSystem (modules-hyprland // args);
|
||||||
|
"${name}-niri" = mylib.nixosSystem (modules-niri // args);
|
||||||
};
|
};
|
||||||
|
|
||||||
# generate iso image for hosts with desktop environment
|
# generate iso image for hosts with desktop environment
|
||||||
packages = {
|
packages = {
|
||||||
"${name}-hyprland" = inputs.self.nixosConfigurations."${name}-hyprland".config.formats.iso;
|
"${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;
|
username = myvars.username;
|
||||||
hosts = [
|
hosts = [
|
||||||
"shoukei-hyprland"
|
"shoukei-hyprland"
|
||||||
|
"shoukei-niri"
|
||||||
];
|
];
|
||||||
in
|
in
|
||||||
lib.genAttrs hosts (_: "/home/${username}")
|
lib.genAttrs hosts (_: "/home/${username}")
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ let
|
|||||||
username = myvars.username;
|
username = myvars.username;
|
||||||
hosts = [
|
hosts = [
|
||||||
"shoukei-hyprland"
|
"shoukei-hyprland"
|
||||||
|
"shoukei-niri"
|
||||||
];
|
];
|
||||||
in
|
in
|
||||||
lib.genAttrs hosts (
|
lib.genAttrs hosts (
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
let
|
let
|
||||||
specialExpected = {
|
specialExpected = {
|
||||||
"shoukei-hyprland" = "shoukei";
|
"shoukei-hyprland" = "shoukei";
|
||||||
|
"shoukei-niri" = "shoukei";
|
||||||
};
|
};
|
||||||
specialHostNames = builtins.attrNames specialExpected;
|
specialHostNames = builtins.attrNames specialExpected;
|
||||||
|
|
||||||
|
|||||||
@@ -8,23 +8,34 @@
|
|||||||
mylib,
|
mylib,
|
||||||
system,
|
system,
|
||||||
genSpecialArgs,
|
genSpecialArgs,
|
||||||
|
niri,
|
||||||
...
|
...
|
||||||
}@args:
|
}@args:
|
||||||
let
|
let
|
||||||
# 星野 アイ, Hoshino Ai
|
# 星野 アイ, Hoshino Ai
|
||||||
name = "ai";
|
name = "ai";
|
||||||
base-modules = {
|
base-modules = {
|
||||||
nixos-modules = map mylib.relativeToRoot [
|
nixos-modules =
|
||||||
# common
|
(map mylib.relativeToRoot [
|
||||||
"secrets/nixos.nix"
|
# common
|
||||||
"modules/nixos/desktop.nix"
|
"secrets/nixos.nix"
|
||||||
# host specific
|
"modules/nixos/desktop.nix"
|
||||||
"hosts/idols-${name}"
|
# host specific
|
||||||
# nixos hardening
|
"hosts/idols-${name}"
|
||||||
# "hardening/profiles/default.nix"
|
# nixos hardening
|
||||||
"hardening/nixpaks"
|
# "hardening/profiles/default.nix"
|
||||||
"hardening/bwraps"
|
"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 [
|
home-modules = map mylib.relativeToRoot [
|
||||||
# common
|
# common
|
||||||
"home/linux/gui.nix"
|
"home/linux/gui.nix"
|
||||||
@@ -35,12 +46,6 @@ let
|
|||||||
|
|
||||||
modules-hyprland = {
|
modules-hyprland = {
|
||||||
nixos-modules = [
|
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;
|
++ base-modules.nixos-modules;
|
||||||
home-modules = [
|
home-modules = [
|
||||||
@@ -48,15 +53,28 @@ let
|
|||||||
]
|
]
|
||||||
++ base-modules.home-modules;
|
++ 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
|
in
|
||||||
{
|
{
|
||||||
nixosConfigurations = {
|
nixosConfigurations = {
|
||||||
# host with hyprland compositor
|
# host with hyprland compositor
|
||||||
"${name}-hyprland" = mylib.nixosSystem (modules-hyprland // args);
|
"${name}-hyprland" = mylib.nixosSystem (modules-hyprland // args);
|
||||||
|
"${name}-niri" = mylib.nixosSystem (modules-niri // args);
|
||||||
};
|
};
|
||||||
|
|
||||||
# generate iso image for hosts with desktop environment
|
# generate iso image for hosts with desktop environment
|
||||||
packages = {
|
packages = {
|
||||||
"${name}-hyprland" = inputs.self.nixosConfigurations."${name}-hyprland".config.formats.iso;
|
"${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;
|
username = myvars.username;
|
||||||
hosts = [
|
hosts = [
|
||||||
"ai-hyprland"
|
"ai-hyprland"
|
||||||
|
"ai-niri"
|
||||||
"ruby"
|
"ruby"
|
||||||
"k3s-prod-1-master-1"
|
"k3s-prod-1-master-1"
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ let
|
|||||||
username = myvars.username;
|
username = myvars.username;
|
||||||
hosts = [
|
hosts = [
|
||||||
"ai-hyprland"
|
"ai-hyprland"
|
||||||
|
"ai-niri"
|
||||||
"ruby"
|
"ruby"
|
||||||
"k3s-prod-1-master-1"
|
"k3s-prod-1-master-1"
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
let
|
let
|
||||||
specialExpected = {
|
specialExpected = {
|
||||||
"ai-hyprland" = "ai";
|
"ai-hyprland" = "ai";
|
||||||
|
"ai-niri" = "ai";
|
||||||
};
|
};
|
||||||
specialHostNames = builtins.attrNames specialExpected;
|
specialHostNames = builtins.attrNames specialExpected;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
|
def repeat-str [s: string, n: int] {
|
||||||
|
(1..$n | each { $s } | str join)
|
||||||
|
}
|
||||||
|
|
||||||
# ================= NixOS related =========================
|
# ================= NixOS related =========================
|
||||||
|
|
||||||
export def nixos-switch [
|
export def nixos-switch [
|
||||||
name: string
|
name: string
|
||||||
mode: string
|
mode: string
|
||||||
] {
|
] {
|
||||||
|
print $"nixos-switch '($name)' in '($mode)' mode..."
|
||||||
|
print (repeat-str "=" 50)
|
||||||
if "debug" == $mode {
|
if "debug" == $mode {
|
||||||
# show details via nix-output-monitor
|
# show details via nix-output-monitor
|
||||||
nom build $".#nixosConfigurations.($name).config.system.build.toplevel" --show-trace --verbose
|
nom build $".#nixosConfigurations.($name).config.system.build.toplevel" --show-trace --verbose
|
||||||
@@ -19,6 +25,7 @@ export def nixos-switch [
|
|||||||
export def make-editable [
|
export def make-editable [
|
||||||
path: string
|
path: string
|
||||||
] {
|
] {
|
||||||
|
print (repeat-str "=" 50)
|
||||||
let tmpdir = (mktemp -d)
|
let tmpdir = (mktemp -d)
|
||||||
rsync -avz --copy-links $"($path)/" $tmpdir
|
rsync -avz --copy-links $"($path)/" $tmpdir
|
||||||
rsync -avz --copy-links --chmod=D2755,F744 $"($tmpdir)/" $path
|
rsync -avz --copy-links --chmod=D2755,F744 $"($tmpdir)/" $path
|
||||||
@@ -31,6 +38,8 @@ export def darwin-build [
|
|||||||
name: string
|
name: string
|
||||||
mode: string
|
mode: string
|
||||||
] {
|
] {
|
||||||
|
print $"darwin-build '($name)' in '($mode)' mode..."
|
||||||
|
print (repeat-str "=" 50)
|
||||||
let target = $".#darwinConfigurations.($name).system"
|
let target = $".#darwinConfigurations.($name).system"
|
||||||
if "debug" == $mode {
|
if "debug" == $mode {
|
||||||
nom build $target --extra-experimental-features "nix-command flakes" --show-trace --verbose
|
nom build $target --extra-experimental-features "nix-command flakes" --show-trace --verbose
|
||||||
@@ -43,6 +52,8 @@ export def darwin-switch [
|
|||||||
name: string
|
name: string
|
||||||
mode: string
|
mode: string
|
||||||
] {
|
] {
|
||||||
|
print $"darwin-switch '($name)' in '($mode)' mode..."
|
||||||
|
print (repeat-str "=" 50)
|
||||||
if "debug" == $mode {
|
if "debug" == $mode {
|
||||||
sudo -E ./result/sw/bin/darwin-rebuild switch --flake $".#($name)" --show-trace --verbose
|
sudo -E ./result/sw/bin/darwin-rebuild switch --flake $".#($name)" --show-trace --verbose
|
||||||
} else {
|
} else {
|
||||||
@@ -61,6 +72,8 @@ export def upload-vm [
|
|||||||
name: string
|
name: string
|
||||||
mode: string
|
mode: string
|
||||||
] {
|
] {
|
||||||
|
print $"upload-vm '($name)' in '($mode)' mode..."
|
||||||
|
print (repeat-str "=" 50)
|
||||||
let target = $".#($name)"
|
let target = $".#($name)"
|
||||||
if "debug" == $mode {
|
if "debug" == $mode {
|
||||||
nom build $target --show-trace --verbose
|
nom build $target --show-trace --verbose
|
||||||
|
|||||||