Compare commits

...

33 Commits

Author SHA1 Message Date
Ryan Yin 8f3780ba5d feat: replace noctalia-shell with dma-shell
Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2026-01-06 16:59:01 +08:00
Ryan Yin 23ff53dcac fix: noctalia - disable osd for brightness changes due to issue
https://github.com/noctalia-dev/noctalia-shell/issues/1281
2026-01-06 14:29:21 +08:00
Ryan Yin f9d0efd425 fix: noctalia - missing qt6ct.conf on reboot 2026-01-06 10:34:37 +08:00
Ryan Yin 1a9ca02329 noctalia-shell: update launcher widget 2026-01-05 23:41:59 +08:00
Ryan Yin 7216201bd6 docs: add desktop screenshots 2026-01-05 13:28:32 +08:00
Ryan Yin eda3221ac0 chore: noctalia - show cpu/mem usage in detail mode 2026-01-04 19:26:43 +08:00
Ryan Yin 909b8ffe06 chore: noctalia - add desktop widgets 2026-01-04 19:00:36 +08:00
Ryan Yin e1ef5587fd chore: update yazi config 2026-01-04 16:45:44 +08:00
Ryan Yin 6c228998e7 chore: noctalia - upgrade & settings adjustment 2026-01-04 16:33:41 +08:00
Ryan Yin ab8cacb04e flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs-patched':
    'github:ryan4yin/nixpkgs/9da7f1cf7f8a6e2a7cb3001b048546c92a8258b4?narHash=sha256-SlybxLZ1/e4T2lb1czEtWVzDCVSTvk9WLwGhmxFmBxI%3D' (2025-11-11)
  → 'github:ryan4yin/nixpkgs/fd9662e1991b624a72e5e545963136906c5c1adf?narHash=sha256-uIZvxuyjwKJkcGFD/DEdmHuwjyjwkk6SkkR/5Z/cpdw%3D' (2026-01-04)
2026-01-04 16:18:10 +08:00
Ryan Yin 26c7076816 chore: noctalia - do not show cpu temporature 2026-01-04 13:30:55 +08:00
Ryan Yin 6853991712 docs: update desktop screenshots
Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2026-01-04 11:36:06 +08:00
Ryan Yin 6db329c55d chore: noctalia - folders & images 2026-01-04 10:48:38 +08:00
Ryan Yin e83b7a867f refactor: auto start apps on login via xdg-autostart (#242)
Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2026-01-03 11:03:14 -06:00
Ryan Yin e3fb563b79 fix: noctalia - brightness adjustment - apple silicon 2026-01-04 00:16:25 +08:00
Ryan Yin 74c8912897 refactor: replace gammastep by noctalia-shell, update README (#241) 2026-01-03 10:06:22 -06:00
Ryan Yin fb7a0cd178 feat: replace waybar/mako/anyrun/wlogout/swaylock with noctolia-shell, remove hyprland (#240) 2026-01-03 09:36:54 -06:00
Ryan Yin 847adc7d63 feat: add power management service 2026-01-03 20:16:37 +08:00
Ryan Yin 94e431abfc fix: error - only one wireless daemon is allowed at the time, speed up wechat download 2026-01-02 22:37:38 +08:00
Ryan Yin f4f3ff347c flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs-master':
    'github:nixos/nixpkgs/6a81c8cfb009e8dbd462d8c75f49a121efcb6e17?narHash=sha256-XqmvlUkYpaQzV2CksGR8MzjeqTBKkB3gSf26pYoNqWw%3D' (2025-12-25)
  → 'github:nixos/nixpkgs/eaf3f6b552c15b55d516e8cdca6579f7ec902865?narHash=sha256-bgO3UKGjkqbwQTgHInJIEJeqmV%2Bv8pSWxCPKUl64igk%3D' (2026-01-02)
2026-01-02 21:54:41 +08:00
Ryan Yin ff3cd9111f flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/a6531044f6d0bef691ea18d4d4ce44d0daa6e816?narHash=sha256-3xY8CZ4rSnQ0NqGhMKAy5vgC%2B2IVK0NoVEzDoOh4DA4%3D' (2025-12-21)
  → 'github:NixOS/nixpkgs/0744ef1b047f07d31d9962d757ffe38ec14a4d41?narHash=sha256-SosfgQSqVmOkqVgNYJnxW5FvoIQX4grOcpIKNrIwz4o%3D' (2025-12-29)
2026-01-02 21:53:21 +08:00
Ryan Yin f6266d72e6 feat: persistent mozc's config & antigravity's data 2026-01-02 20:57:33 +08:00
Ryan Yin bc1bbf3318 fix: git aliases 2025-12-29 21:57:50 +08:00
Ryan Yin e9906c9322 feat: add antigravity
Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2025-12-27 17:12:08 +08:00
Ryan Yin 72d14c7c9b Merge pull request #239 from ryan4yin/update
feat: update inputs, remove asahi's mesa workaround
2025-12-25 13:17:21 +08:00
Ryan Yin 9f4ff5a8a3 feat: update inputs, remove asahi's mesa workaround 2025-12-25 13:12:43 +08:00
Ryan Yin 38354330ea flake.lock: Update
Flake lock file updates:

• Updated input 'aagl':
    'github:ezKEa/aagl-gtk-on-nix/e272196d003064dfb177ed9cae6a12021b806048?narHash=sha256-aB2OhrotdYU8w3uQLio5a/IiyAQvzywOKr81oldqxss%3D' (2025-11-26)
  → 'github:ezKEa/aagl-gtk-on-nix/1dc0259e0dd6c3eba5ff96b7f597b6cf5627c62c?narHash=sha256-DzRLGukYRf%2BcnGyF9ukg/1n4mtgG3hKBrzE1fHCNZ2w%3D' (2025-12-22)
• Updated input 'catppuccin':
    'github:catppuccin/nix/931c6465c3eac4709684dbc320bca243252927df?narHash=sha256-jPpxBhrBOAKrXPxdrdXnq4w7x3UIkUZjarNLNYkb7Zo%3D' (2025-11-24)
  → 'github:catppuccin/nix/de1b60ca45a578f59f7d84c8d338b346017b2161?narHash=sha256-l8x0gU8mnYaGMl%2BgWrsSHKBJlZWD8KXJfHTkRlFiPI0%3D' (2025-12-17)
• Updated input 'ghostty':
    'github:ghostty-org/ghostty/d9529947a40e16f8e7efd8a1f680d01ff99f213b?narHash=sha256-bTElYF0d4XEGK9pT4I22%2BXSGZIN26lWEvk5D06cyZak%3D' (2025-11-26)
  → 'github:ghostty-org/ghostty/4af425e11c5547090caa20f9ad358dd30bfecbe9?narHash=sha256-Dk8zpqQfr%2BQjYH0SrZMVJh6%2BJ3iulIY/eZz7hP7tNjA%3D' (2025-12-24)
• Updated input 'ghostty/flake-compat':
    'github:edolstra/flake-compat/9100a0f413b0c601e0533d1d94ffd501ce2e7885?narHash=sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX%2BfjA8Xf8PUmqCY%3D' (2025-05-12)
  → 'github:edolstra/flake-compat/f387cd2afec9419c8ee37694406ca490c3f34ee5?narHash=sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4%3D' (2025-10-27)
• Added input 'ghostty/home-manager':
    'github:nix-community/home-manager/4fb695d10890e9fc6a19deadf85ff79ffb78da86?narHash=sha256-CPM7zm6csUx7vSfKvzMDIjepEJv1u/usmaT7zydzbuI%3D' (2025-08-21)
• Added input 'ghostty/home-manager/nixpkgs':
    follows 'ghostty/nixpkgs'
• Updated input 'ghostty/nixpkgs':
    'https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre877938.82c2e0d6dde5/nixexprs.tar.xz?narHash=sha256-sV6pJNzFkiPc6j9Bi9JuHBnWdVhtKB/mHgVmMPvDFlk%3D' (1980-01-01)
  → 'https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre896415.1d4c88323ac3/nixexprs.tar.xz?narHash=sha256-gI9PpaoX4/f28HkjcTbFVpFhtOxSDtOEdFaHZrdETe0%3D' (2025-11-15)
• Updated input 'ghostty/zig':
    'github:mitchellh/zig-overlay/365085b6652259753b598d43b723858184980bbe?narHash=sha256-/zj5GYO5PKhBWGzbHbqT%2BehY8EghuABdQ2WGfCwZpCQ%3D' (2025-10-14)
  → 'github:mitchellh/zig-overlay/64f8b42cfc615b2cf99144adf2b7728c7847c72a?narHash=sha256-sGv/NHCmEnJivguGwB5w8LRmVqr1P72OjS%2BNzcJsssE%3D' (2025-11-16)
• Updated input 'ghostty/zon2nix/nixpkgs':
    'https://releases.nixos.org/nixos/unstable/nixos-25.11pre864002.8eaee1103447/nixexprs.tar.xz?narHash=sha256-XDY3A83bclygHDtesRoaRTafUd80Q30D/Daf9KSG6bs%3D' (2025-09-20)
  → follows 'ghostty/nixpkgs'
• Updated input 'helix':
    'github:mattwparas/helix/92bc3db129c639b4133a0a117cc8f3943b840886?narHash=sha256-HoGhLWTqiwr2GCUPSen7f20snqxyTGWhcd84VClHmI4%3D' (2025-11-24)
  → 'github:mattwparas/helix/a01f45b75ac20f8fa5ec7fd9f3c32e3ae8ab5d34?narHash=sha256-xDVuEKcBIY4cA7g9UwI8keimoHxQz/%2BfUXY7DA8EcsA%3D' (2025-12-08)
• Updated input 'home-manager':
    'github:nix-community/home-manager/89c9508bbe9b40d36b3dc206c2483ef176f15173?narHash=sha256-rB45jv4uwC90vM9UZ70plfvY/2Kdygs%2BzlQ07dGQFk4%3D' (2025-12-17)
  → 'github:nix-community/home-manager/7eca7f7081036a7b740090994c9ec543927f89a7?narHash=sha256-hHKQhHkXxuPJwLkI8wdu826GLV5AcuW9/HVdc9eBnTU%3D' (2025-12-24)
• Updated input 'nix-darwin':
    'github:lnl7/nix-darwin/e95de00a471d07435e0527ff4db092c84998698e?narHash=sha256-HN84sByg9FhJnojkGGDSrcjcbeioFWoNXfuyYfJ1kBE%3D' (2025-11-26)
  → 'github:lnl7/nix-darwin/c2b36207f2c396c79dbed9d40536db221bd4e363?narHash=sha256-N/sxS27%2Bt9nGvGWqwwAceSMW/Y5ddcypS/aiTnZ7ScA%3D' (2025-12-23)
• Updated input 'nix-gaming':
    'github:fufexan/nix-gaming/80e0aed8c6dd00c9fa41f82c808a8972632e3016?narHash=sha256-N6DsDLb8oDBWQ%2BQAq7qKmgk4jhW9AkzHjvXiUiT//Cw%3D' (2025-11-26)
  → 'github:fufexan/nix-gaming/4e3926b98be61b018915ded9f8f8706a4ce1a267?narHash=sha256-fvzdJMWM3Nisav0AYbCO9yQ0LbM2Od8Ulp6YBw2r3Ac%3D' (2025-12-24)
• Updated input 'nix-gaming/flake-parts':
    'github:hercules-ci/flake-parts/2cccadc7357c0ba201788ae99c4dfa90728ef5e0?narHash=sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q%3D' (2025-11-21)
  → 'github:hercules-ci/flake-parts/a34fae9c08a15ad73f295041fec82323541400a9?narHash=sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw%3D' (2025-12-15)
• Updated input 'nix-gaming/flake-parts/nixpkgs-lib':
    'github:nix-community/nixpkgs.lib/719359f4562934ae99f5443f20aa06c2ffff91fc?narHash=sha256-b0yj6kfvO8ApcSE%2BQmA6mUfu8IYG6/uU28OFn4PaC8M%3D' (2025-10-29)
  → 'github:nix-community/nixpkgs.lib/2075416fcb47225d9b68ac469a5c4801a9c4dd85?narHash=sha256-k00uTP4JNfmejrCLJOwdObYC9jHRrr/5M/a/8L2EIdo%3D' (2025-12-14)
• Updated input 'nixos-generators':
    'github:nix-community/nixos-generators/032decf9db65efed428afd2fa39d80f7089085eb?narHash=sha256-PeSkNMvkpEvts%2B9DjFiop1iT2JuBpyknmBUs0Un0a4I%3D' (2025-07-07)
  → 'github:nix-community/nixos-generators/032a1878682fafe829edfcf5fdfad635a2efe748?narHash=sha256-NHF7QWa0ZPT8hsJrvijREW3%2BnifmF2rTXgS2v0tpcEA%3D' (2025-11-27)
• Updated input 'nixpak':
    'github:nixpak/nixpak/fd7e8f5d315158089ffbc34cc20792e43be6e666?narHash=sha256-gFjePmr09rRoAUfih4eeHX7aU3GTBUeaZvglKV%2B1ztI%3D' (2025-11-20)
  → 'github:nixpak/nixpak/51f7e5693113653be96f2606ec8ba0e2ea10936b?narHash=sha256-al5IYCT3vLDDFuEyOoOx5FIeZ00T/d%2BJ1QPK1LMXPCI%3D' (2025-12-23)
• Updated input 'nixpak/flake-parts':
    'github:hercules-ci/flake-parts/52a2caecc898d0b46b2b905f058ccc5081f842da?narHash=sha256-8oNVE8TrD19ulHinjaqONf9QWCKK%2Bw4url56cdStMpM%3D' (2025-11-12)
  → 'github:hercules-ci/flake-parts/a34fae9c08a15ad73f295041fec82323541400a9?narHash=sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw%3D' (2025-12-15)
• Updated input 'nixpak/hercules-ci-effects':
    'github:hercules-ci/hercules-ci-effects/b0585849abe7d02a774a853f7952d07bb910fd9e?narHash=sha256-jZi%2B9yKmeTMsJ4ZNqRei/wL16%2BQwYGrCl4EJ3QHfoDU%3D' (2025-11-15)
  → 'github:hercules-ci/hercules-ci-effects/edcbb19948b6caf1700434e369fde6ff9e6a3c93?narHash=sha256-UQhfCggNGDc7eam%2BEittlYmeW89CZVT1KkFIHZWBH7k%3D' (2025-12-15)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/0254eab410b90ef2420c1059f908ae777e3b02f9?narHash=sha256-/US2Ei9JHXHVBAxV4FX49Q7H5s4UNBrIiOA6Xjzgq44%3D' (2025-12-06)
  → 'github:nixos/nixpkgs/a6531044f6d0bef691ea18d4d4ce44d0daa6e816?narHash=sha256-3xY8CZ4rSnQ0NqGhMKAy5vgC%2B2IVK0NoVEzDoOh4DA4%3D' (2025-12-21)
• Updated input 'nixpkgs-2505':
    'github:nixos/nixpkgs/6c8f0cca84510cc79e09ea99a299c9bc17d03cb6?narHash=sha256-M5aFEFPppI4UhdOxwdmceJ9bDJC4T6C6CzCK1E2FZyo%3D' (2025-12-01)
  → 'github:nixos/nixpkgs/a6c3a6141ec1b367c58ead3f7f846c772a25f4e5?narHash=sha256-vS6LSOMDOB3s%2BL6tqw9IGujxnmUAZQnEG%2BVi640LayI%3D' (2025-12-22)
• Updated input 'nixpkgs-darwin':
    'github:nixos/nixpkgs/dc205f7b4fdb04c8b7877b43edb7b73be7730081?narHash=sha256-sUoHmPr/EwXzRMpv1u/kH%2BdXuvJEyyF2Q7muE%2Bt0EU4%3D' (2025-11-25)
  → 'github:nixos/nixpkgs/8142186f001295e5a3239f485c8a49bf2de2695a?narHash=sha256-acLU/ag9VEoKkzOD202QASX25nG1eArXg5A0mHjKgxM%3D' (2025-12-23)
• Updated input 'nixpkgs-master':
    'github:nixos/nixpkgs/e50ab9bb181f9fb3ce00e7a6007c70ddaa007203?narHash=sha256-acPMRCAPgPykzkwATwD1EfF7xgmbraAvIJyCeR6bKxc%3D' (2025-12-18)
  → 'github:nixos/nixpkgs/6a81c8cfb009e8dbd462d8c75f49a121efcb6e17?narHash=sha256-XqmvlUkYpaQzV2CksGR8MzjeqTBKkB3gSf26pYoNqWw%3D' (2025-12-25)
• Updated input 'nixpkgs-stable':
    'github:nixos/nixpkgs/a320ce8e6e2cc6b4397eef214d202a50a4583829?narHash=sha256-6zddwDs2n%2Bn01l%2B1TG6PlyokDdXzu/oBmEejcH5L5%2BA%3D' (2025-11-24)
  → 'github:nixos/nixpkgs/76701a179d3a98b07653e2b0409847499b2a07d3?narHash=sha256-5G1NDO2PulBx1RoaA6U1YoUDX0qZslpPxv%2Bn5GX6Qto%3D' (2025-12-23)
• Updated input 'nur-ryan4yin':
    'github:ryan4yin/nur-packages/89e4e49bc0279d5c379526b16360e20ca901e226?narHash=sha256-/E/H334pr4qo8bdTLjYahL7Tx3HMMJvKmNHDbhjq3Dc%3D' (2025-11-25)
  → 'github:ryan4yin/nur-packages/420e007374a83784ce915f0d0bffd670f302ee1b?narHash=sha256-23X12PirpI3HhJZVm2Z/9BTbEHlXjJxizB6Mot7qeLU%3D' (2025-12-14)
• Updated input 'pre-commit-hooks':
    'github:cachix/git-hooks.nix/50b9238891e388c9fdc6a5c49e49c42533a1b5ce?narHash=sha256-QlcnByMc8KBjpU37rbq5iP7Cp97HvjRP0ucfdh%2BM4Qc%3D' (2025-11-24)
  → 'github:cachix/git-hooks.nix/b68b780b69702a090c8bb1b973bab13756cc7a27?narHash=sha256-t3T/xm8zstHRLx%2BpIHxVpQTiySbKqcQbK%2Br%2B01XVKc0%3D' (2025-12-16)
2025-12-25 12:40:13 +08:00
Ryan Yin bda311ad9a chore: use glm 4.7 for claude code 2025-12-24 11:45:06 +08:00
Ryan Yin 2bc25074a6 feat: apple touchbar - remove search key 2025-12-19 16:20:47 +08:00
Ryan Yin 219a7a6e0b feat: apple touchbar - add f1 f2 & f12 2025-12-19 16:19:19 +08:00
Ryan Yin 85394e25f4 fix: waybar - style for wireplumber.source 2025-12-19 16:04:16 +08:00
Ryan Yin a0fc2040a9 Keybindings and waybar (#238)
* feat: niri & hyprland - adjust keybindings
* feat: waybar - add micphone icon, use WirePlumber, etc
2025-12-19 01:52:39 -06:00
Ryan Yin b7f5aed4b8 docs: how to update nixos-unstable 2025-12-19 10:15:42 +08:00
108 changed files with 1685 additions and 2042 deletions
+6 -9
View File
@@ -100,7 +100,12 @@ repair-store *paths:
# Update all Nixpkgs inputs # Update all Nixpkgs inputs
[group('nix')] [group('nix')]
up-nix: up-nix:
nix flake update nixpkgs nixpkgs-stable nixpkgs-unstable nixpkgs-darwin nixpkgs-patched nix flake update --commit-lock-file nixpkgs-stable nixpkgs-master nixpkgs-darwin nixpkgs-patched
# override nixpkgs's commit hash
[group('nix')]
override-pkgs hash:
nix flake update --commit-lock-file nixpkgs --override-input nixpkgs github:NixOS/nixpkgs/{{hash}}
############################################################################ ############################################################################
# #
@@ -116,14 +121,6 @@ local mode="default":
use {{utils_nu}} *; use {{utils_nu}} *;
nixos-switch (hostname) {{mode}} nixos-switch (hostname) {{mode}}
# Deploy the hyprland nixosConfiguration by hostname match
[linux]
[group('desktop')]
hypr mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
nixos-switch $"(hostname)-hyprland" {{mode}}
# Deploy the niri nixosConfiguration by hostname match # Deploy the niri nixosConfiguration by hostname match
[linux] [linux]
[group('desktop')] [group('desktop')]
+30 -49
View File
@@ -23,7 +23,7 @@
This repository is home to the nix code that builds my systems: This repository is home to the nix code that builds my systems:
1. NixOS Desktops: NixOS with home-manager, hyprland, agenix, etc. 1. NixOS Desktops: NixOS with home-manager, niri, agenix, etc.
2. macOS Desktops: nix-darwin with home-manager, share the same home-manager configuration with 2. macOS Desktops: nix-darwin with home-manager, share the same home-manager configuration with
NixOS Desktops. NixOS Desktops.
3. NixOS Servers: virtual machines running on Proxmox/KubeVirt, with various services, such as 3. NixOS Servers: virtual machines running on Proxmox/KubeVirt, with various services, such as
@@ -54,36 +54,36 @@ You don't have to go through the pain I've experienced again! Check out my
## Components ## Components
| | NixOS(Wayland) | | | NixOS(Wayland) |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------- | | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| **Window Manager** | [Hyprland][Hyprland] / [Niri][Niri] | | **Window Manager** | [Niri][Niri] |
| **Terminal Emulator** | [Zellij][Zellij] + [foot][foot]/[Kitty][Kitty]/[Alacritty][Alacritty]/[Ghostty][Ghostty] | | **Terminal Emulator** | [Zellij][Zellij] + [foot][foot]/[Kitty][Kitty]/[Alacritty][Alacritty]/[Ghostty][Ghostty] |
| **Bar** | [Waybar][Waybar] | | **Status Bar** / **Notifier** / **Launcher** / **lockscreens** | [noctalia-shell][noctalia-shell] |
| **Application Launcher** | [anyrun][anyrun] | | **Display Manager** | [tuigreet][tuigreet] |
| **Notification Daemon** | [Mako][Mako] | | **Color Scheme** | [catppuccin-nix][catppuccin-nix] |
| **Display Manager** | [tuigreet][tuigreet] | | **network management tool** | [NetworkManager][NetworkManager] |
| **Color Scheme** | [catppuccin-nix][catppuccin-nix] | | **Input method framework** | [Fcitx5][Fcitx5] + [rime][rime] + [小鹤音形 flypy][flypy] |
| **network management tool** | [NetworkManager][NetworkManager] | | **System resource monitor** | [Btop][Btop] |
| **Input method framework** | [Fcitx5][Fcitx5] + [rime][rime] + [小鹤音形 flypy][flypy] | | **File Manager** | [Yazi][Yazi] + [thunar][thunar] |
| **System resource monitor** | [Btop][Btop] | | **Shell** | [Nushell][Nushell] + [Starship][Starship] |
| **File Manager** | [Yazi][Yazi] + [thunar][thunar] | | **Media Player** | [mpv][mpv] |
| **Shell** | [Nushell][Nushell] + [Starship][Starship] | | **Text Editor** | [Neovim][Neovim] |
| **Media Player** | [mpv][mpv] | | **Fonts** | [Nerd fonts][Nerd fonts] |
| **Text Editor** | [Neovim][Neovim] | | **Image Viewer** | [imv][imv] |
| **Fonts** | [Nerd fonts][Nerd fonts] | | **Screenshot Software** | Niri's builtin function |
| **Image Viewer** | [imv][imv] | | **Screen Recording** | [OBS][OBS] |
| **Screenshot Software** | [hyprshot][hyprshot] | | **Filesystem & Encryption** | tmpfs as `/`, [Btrfs][Btrfs] subvolumes on a [LUKS][LUKS] encrypted partition for persistent, unlock via passphrase |
| **Screen Recording** | [OBS][OBS] | | **Secure Boot** | [lanzaboote][lanzaboote] |
| **Filesystem & Encryption** | tmpfs as `/`, [Btrfs][Btrfs] subvolumes on a [LUKS][LUKS] encrypted partition for persistent, unlock via passphrase |
| **Secure Boot** | [lanzaboote][lanzaboote] |
Wallpapers: https://github.com/ryan4yin/wallpapers Wallpapers: https://github.com/ryan4yin/wallpapers
## Hyprland + AstroNvim ## Screenshots
![](./_img/hyprland_2023-07-29_1.webp) ![desktop](./_img/2026-01-05_niri-noctalia_desktop.webp)
![](./_img/hyprland_2023-07-29_2.webp) ![overview](./_img/2026-01-04_niri-noctalia_overview.webp)
![nvim](./_img/2026-01-04_niri-noctalia_nvim.webp)
## Neovim ## Neovim
@@ -111,17 +111,13 @@ For NixOS:
```bash ```bash
# deploy one of the configuration based on the hostname # deploy one of the configuration based on the hostname
sudo nixos-rebuild switch --flake .#ai-hyprland sudo nixos-rebuild switch --flake .#ai-niri
# deploy via `just`(a command runner with similar syntax to make) & Justfile
# Deploy the hyprland nixosConfiguration by hostname match
just hypr
# Deploy the niri nixosConfiguration by hostname match # Deploy the niri nixosConfiguration by hostname match
just niri just niri
# or we can deploy with details # or we can deploy with details
just hypr debug just niri debug
``` ```
For macOS: For macOS:
@@ -157,26 +153,17 @@ Other dotfiles that inspired me:
- [davidtwco/veritas](https://github.com/davidtwco/veritas) - [davidtwco/veritas](https://github.com/davidtwco/veritas)
- [gvolpe/nix-config](https://github.com/gvolpe/nix-config) - [gvolpe/nix-config](https://github.com/gvolpe/nix-config)
- [Ruixi-rebirth/flakes](https://github.com/Ruixi-rebirth/flakes) - [Ruixi-rebirth/flakes](https://github.com/Ruixi-rebirth/flakes)
- [fufexan/dotfiles](https://github.com/fufexan/dotfiles): gtk theme, xdg, git, media, anyrun, - [fufexan/dotfiles](https://github.com/fufexan/dotfiles): gtk theme, xdg, git, media, etc.
etc.
- [nix-community/srvos](https://github.com/nix-community/srvos): a collection of opinionated and - [nix-community/srvos](https://github.com/nix-community/srvos): a collection of opinionated and
sharable NixOS configurations for servers sharable NixOS configurations for servers
- Modularized NixOS Configuration - Modularized NixOS Configuration
- [hlissner/dotfiles](https://github.com/hlissner/dotfiles) - [hlissner/dotfiles](https://github.com/hlissner/dotfiles)
- [viperML/dotfiles](https://github.com/viperML/dotfiles) - [viperML/dotfiles](https://github.com/viperML/dotfiles)
- Hyprland(wayland)
- [notwidow/hyprland](https://github.com/notwidow/hyprland): This is where I start my hyprland
journey.
- [HeinzDev/Hyprland-dotfiles](https://github.com/HeinzDev/Hyprland-dotfiles): Refer to the waybar
configuration here.
- [Zeioth/zeioth-hyprland-config](https://github.com/Zeioth/zeioth-hyprland-config)
- [linuxmobile/kaku](https://github.com/linuxmobile/kaku)
- Neovim/AstroNvim - Neovim/AstroNvim
- [maxbrunet/dotfiles](https://github.com/maxbrunet/dotfiles): astronvim with nix flakes. - [maxbrunet/dotfiles](https://github.com/maxbrunet/dotfiles): astronvim with nix flakes.
- Misc - Misc
- [1amSimp1e/dots](https://github.com/1amSimp1e/dots) - [1amSimp1e/dots](https://github.com/1amSimp1e/dots)
[Hyprland]: https://github.com/hyprwm/Hyprland
[Niri]: https://github.com/YaLTeR/niri [Niri]: https://github.com/YaLTeR/niri
[Kitty]: https://github.com/kovidgoyal/kitty [Kitty]: https://github.com/kovidgoyal/kitty
[foot]: https://codeberg.org/dnkl/foot [foot]: https://codeberg.org/dnkl/foot
@@ -184,11 +171,6 @@ Other dotfiles that inspired me:
[Ghostty]: https://github.com/ghostty-org/ghostty [Ghostty]: https://github.com/ghostty-org/ghostty
[Nushell]: https://github.com/nushell/nushell [Nushell]: https://github.com/nushell/nushell
[Starship]: https://github.com/starship/starship [Starship]: https://github.com/starship/starship
[Waybar]: https://github.com/Alexays/Waybar
[polybar]: https://github.com/polybar/polybar
[rofi]: https://github.com/davatorium/rofi
[anyrun]: https://github.com/Kirottu/anyrun
[Dunst]: https://github.com/dunst-project/dunst
[Fcitx5]: https://github.com/fcitx/fcitx5 [Fcitx5]: https://github.com/fcitx/fcitx5
[rime]: https://wiki.archlinux.org/title/Rime [rime]: https://wiki.archlinux.org/title/Rime
[flypy]: https://flypy.cc/ [flypy]: https://flypy.cc/
@@ -197,10 +179,8 @@ Other dotfiles that inspired me:
[Zellij]: https://github.com/zellij-org/zellij [Zellij]: https://github.com/zellij-org/zellij
[Neovim]: https://github.com/neovim/neovim [Neovim]: https://github.com/neovim/neovim
[AstroNvim]: https://github.com/AstroNvim/AstroNvim [AstroNvim]: https://github.com/AstroNvim/AstroNvim
[Hyprshot]: https://github.com/Gustash/Hyprshot
[imv]: https://sr.ht/~exec64/imv/ [imv]: https://sr.ht/~exec64/imv/
[OBS]: https://obsproject.com [OBS]: https://obsproject.com
[Mako]: https://github.com/emersion/mako
[Nerd fonts]: https://github.com/ryanoasis/nerd-fonts [Nerd fonts]: https://github.com/ryanoasis/nerd-fonts
[catppuccin-nix]: https://github.com/catppuccin/nix [catppuccin-nix]: https://github.com/catppuccin/nix
[NetworkManager]: https://wiki.gnome.org/Projects/NetworkManager [NetworkManager]: https://wiki.gnome.org/Projects/NetworkManager
@@ -212,3 +192,4 @@ Other dotfiles that inspired me:
[Btrfs]: https://btrfs.readthedocs.io [Btrfs]: https://btrfs.readthedocs.io
[LUKS]: https://wiki.archlinux.org/title/Dm-crypt/Encrypting_an_entire_system [LUKS]: https://wiki.archlinux.org/title/Dm-crypt/Encrypting_an_entire_system
[lanzaboote]: https://github.com/nix-community/lanzaboote [lanzaboote]: https://github.com/nix-community/lanzaboote
[noctalia-shell]: https://github.com/noctalia-dev/noctalia-shell
Binary file not shown.

After

Width:  |  Height:  |  Size: 463 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 359 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 382 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Generated
+180 -178
View File
@@ -7,11 +7,11 @@
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1764168798, "lastModified": 1766424307,
"narHash": "sha256-aB2OhrotdYU8w3uQLio5a/IiyAQvzywOKr81oldqxss=", "narHash": "sha256-DzRLGukYRf+cnGyF9ukg/1n4mtgG3hKBrzE1fHCNZ2w=",
"owner": "ezKEa", "owner": "ezKEa",
"repo": "aagl-gtk-on-nix", "repo": "aagl-gtk-on-nix",
"rev": "e272196d003064dfb177ed9cae6a12021b806048", "rev": "1dc0259e0dd6c3eba5ff96b7f597b6cf5627c62c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -45,29 +45,6 @@
"type": "github" "type": "github"
} }
}, },
"anyrun": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_2"
},
"locked": {
"lastModified": 1758121794,
"narHash": "sha256-IlnFA/a9Clgbt+FuavIKWtauhtH4Fo/rGJIjJDDeYRs=",
"owner": "anyrun-org",
"repo": "anyrun",
"rev": "c787318f590102b68fbd2e5b02ea47e96f4ecb62",
"type": "github"
},
"original": {
"owner": "anyrun-org",
"ref": "v25.9.3",
"repo": "anyrun",
"type": "github"
}
},
"blender-bin": { "blender-bin": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -97,11 +74,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1763974424, "lastModified": 1765990358,
"narHash": "sha256-jPpxBhrBOAKrXPxdrdXnq4w7x3UIkUZjarNLNYkb7Zo=", "narHash": "sha256-l8x0gU8mnYaGMl+gWrsSHKBJlZWD8KXJfHTkRlFiPI0=",
"owner": "catppuccin", "owner": "catppuccin",
"repo": "nix", "repo": "nix",
"rev": "931c6465c3eac4709684dbc320bca243252927df", "rev": "de1b60ca45a578f59f7d84c8d338b346017b2161",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -147,6 +124,27 @@
"type": "github" "type": "github"
} }
}, },
"dgop": {
"inputs": {
"nixpkgs": [
"dms",
"nixpkgs"
]
},
"locked": {
"lastModified": 1762835999,
"narHash": "sha256-UykYGrGFOFTmDpKTLNxj1wvd1gbDG4TkqLNSbV0TYwk=",
"owner": "AvengeMedia",
"repo": "dgop",
"rev": "799301991cd5dcea9b64245f9d500dcc76615653",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"repo": "dgop",
"type": "github"
}
},
"disko": { "disko": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -168,6 +166,29 @@
"type": "github" "type": "github"
} }
}, },
"dms": {
"inputs": {
"dgop": "dgop",
"nixpkgs": [
"nixpkgs"
],
"quickshell": "quickshell"
},
"locked": {
"lastModified": 1765552734,
"narHash": "sha256-rWjWYu5rs3ZOJ4YJpvIscBZSYu74thJHc0VYyYKJTUc=",
"owner": "AvengeMedia",
"repo": "DankMaterialShell",
"rev": "7fb358bada0d3a229ec5ee6aaad0f9b64f367331",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"ref": "stable",
"repo": "DankMaterialShell",
"type": "github"
}
},
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
@@ -187,11 +208,11 @@
"flake-compat_2": { "flake-compat_2": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1747046372, "lastModified": 1761588595,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -248,27 +269,6 @@
} }
}, },
"flake-parts": { "flake-parts": {
"inputs": {
"nixpkgs-lib": [
"anyrun",
"nixpkgs"
]
},
"locked": {
"lastModified": 1754487366,
"narHash": "sha256-pHYj8gUBapuUzKV/kN/tR3Zvqc7o6gdFB9XKXIp1SQ8=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "af66ad14b28a127c5c0f3bbb298218fc63528a18",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_2": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"lanzaboote", "lanzaboote",
@@ -289,16 +289,16 @@
"type": "github" "type": "github"
} }
}, },
"flake-parts_3": { "flake-parts_2": {
"inputs": { "inputs": {
"nixpkgs-lib": "nixpkgs-lib" "nixpkgs-lib": "nixpkgs-lib"
}, },
"locked": { "locked": {
"lastModified": 1763759067, "lastModified": 1765835352,
"narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", "narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", "rev": "a34fae9c08a15ad73f295041fec82323541400a9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -307,7 +307,7 @@
"type": "github" "type": "github"
} }
}, },
"flake-parts_4": { "flake-parts_3": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"nixpak", "nixpak",
@@ -315,11 +315,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1762980239, "lastModified": 1765835352,
"narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", "narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", "rev": "a34fae9c08a15ad73f295041fec82323541400a9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -330,7 +330,7 @@
}, },
"flake-utils": { "flake-utils": {
"inputs": { "inputs": {
"systems": "systems_3" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@@ -348,7 +348,7 @@
}, },
"flake-utils_2": { "flake-utils_2": {
"inputs": { "inputs": {
"systems": "systems_4" "systems": "systems_3"
}, },
"locked": { "locked": {
"lastModified": 1681202837, "lastModified": 1681202837,
@@ -368,16 +368,17 @@
"inputs": { "inputs": {
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_2",
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"home-manager": "home-manager_2",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs_3",
"zig": "zig", "zig": "zig",
"zon2nix": "zon2nix" "zon2nix": "zon2nix"
}, },
"locked": { "locked": {
"lastModified": 1764166758, "lastModified": 1766616155,
"narHash": "sha256-bTElYF0d4XEGK9pT4I22+XSGZIN26lWEvk5D06cyZak=", "narHash": "sha256-Dk8zpqQfr+QjYH0SrZMVJh6+J3iulIY/eZz7hP7tNjA=",
"owner": "ghostty-org", "owner": "ghostty-org",
"repo": "ghostty", "repo": "ghostty",
"rev": "d9529947a40e16f8e7efd8a1f680d01ff99f213b", "rev": "4af425e11c5547090caa20f9ad358dd30bfecbe9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -459,11 +460,11 @@
"rust-overlay": "rust-overlay_2" "rust-overlay": "rust-overlay_2"
}, },
"locked": { "locked": {
"lastModified": 1763950724, "lastModified": 1765214490,
"narHash": "sha256-HoGhLWTqiwr2GCUPSen7f20snqxyTGWhcd84VClHmI4=", "narHash": "sha256-xDVuEKcBIY4cA7g9UwI8keimoHxQz/+fUXY7DA8EcsA=",
"owner": "mattwparas", "owner": "mattwparas",
"repo": "helix", "repo": "helix",
"rev": "92bc3db129c639b4133a0a117cc8f3943b840886", "rev": "a01f45b75ac20f8fa5ec7fd9f3c32e3ae8ab5d34",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -485,11 +486,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1763182882, "lastModified": 1765774562,
"narHash": "sha256-jZi+9yKmeTMsJ4ZNqRei/wL16+QwYGrCl4EJ3QHfoDU=", "narHash": "sha256-UQhfCggNGDc7eam+EittlYmeW89CZVT1KkFIHZWBH7k=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "hercules-ci-effects", "repo": "hercules-ci-effects",
"rev": "b0585849abe7d02a774a853f7952d07bb910fd9e", "rev": "edcbb19948b6caf1700434e369fde6ff9e6a3c93",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -522,15 +523,37 @@
"home-manager_2": { "home-manager_2": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"ghostty",
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1765980955, "lastModified": 1755776884,
"narHash": "sha256-rB45jv4uwC90vM9UZ70plfvY/2Kdygs+zlQ07dGQFk4=", "narHash": "sha256-CPM7zm6csUx7vSfKvzMDIjepEJv1u/usmaT7zydzbuI=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "89c9508bbe9b40d36b3dc206c2483ef176f15173", "rev": "4fb695d10890e9fc6a19deadf85ff79ffb78da86",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-25.05",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_3": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1766553851,
"narHash": "sha256-hHKQhHkXxuPJwLkI8wdu826GLV5AcuW9/HVdc9eBnTU=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "7eca7f7081036a7b740090994c9ec543927f89a7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -544,7 +567,7 @@
"inputs": { "inputs": {
"crane": "crane", "crane": "crane",
"flake-compat": "flake-compat_3", "flake-compat": "flake-compat_3",
"flake-parts": "flake-parts_2", "flake-parts": "flake-parts",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
@@ -607,11 +630,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1764161084, "lastModified": 1766524813,
"narHash": "sha256-HN84sByg9FhJnojkGGDSrcjcbeioFWoNXfuyYfJ1kBE=", "narHash": "sha256-N/sxS27+t9nGvGWqwwAceSMW/Y5ddcypS/aiTnZ7ScA=",
"owner": "lnl7", "owner": "lnl7",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "e95de00a471d07435e0527ff4db092c84998698e", "rev": "c2b36207f2c396c79dbed9d40536db221bd4e363",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -622,17 +645,17 @@
}, },
"nix-gaming": { "nix-gaming": {
"inputs": { "inputs": {
"flake-parts": "flake-parts_3", "flake-parts": "flake-parts_2",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1764122225, "lastModified": 1766541727,
"narHash": "sha256-N6DsDLb8oDBWQ+QAq7qKmgk4jhW9AkzHjvXiUiT//Cw=", "narHash": "sha256-fvzdJMWM3Nisav0AYbCO9yQ0LbM2Od8Ulp6YBw2r3Ac=",
"owner": "fufexan", "owner": "fufexan",
"repo": "nix-gaming", "repo": "nix-gaming",
"rev": "80e0aed8c6dd00c9fa41f82c808a8972632e3016", "rev": "4e3926b98be61b018915ded9f8f8706a4ce1a267",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -664,16 +687,15 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1763596466, "lastModified": 1766064315,
"narHash": "sha256-CTSUc4Fk1lHMQZMJ5LczPDYGLq5UjXDFKLSpuA3mKmI=", "narHash": "sha256-aMoYLYIj+yYGhDKuSromj+VZYnMyN3lRRAZ+dk1IOiE=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixos-apple-silicon", "repo": "nixos-apple-silicon",
"rev": "73b7103c4e3996e3e20868d510b0e8797f279323", "rev": "f94f4496775f9ca6e8a9e9e83f5aa4e4210fbb5d",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "release-2025-11-18",
"repo": "nixos-apple-silicon", "repo": "nixos-apple-silicon",
"type": "github" "type": "github"
} }
@@ -686,11 +708,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751903740, "lastModified": 1764234087,
"narHash": "sha256-PeSkNMvkpEvts+9DjFiop1iT2JuBpyknmBUs0Un0a4I=", "narHash": "sha256-NHF7QWa0ZPT8hsJrvijREW3+nifmF2rTXgS2v0tpcEA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixos-generators", "repo": "nixos-generators",
"rev": "032decf9db65efed428afd2fa39d80f7089085eb", "rev": "032a1878682fafe829edfcf5fdfad635a2efe748",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -701,18 +723,18 @@
}, },
"nixpak": { "nixpak": {
"inputs": { "inputs": {
"flake-parts": "flake-parts_4", "flake-parts": "flake-parts_3",
"hercules-ci-effects": "hercules-ci-effects", "hercules-ci-effects": "hercules-ci-effects",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1763605982, "lastModified": 1766515644,
"narHash": "sha256-gFjePmr09rRoAUfih4eeHX7aU3GTBUeaZvglKV+1ztI=", "narHash": "sha256-al5IYCT3vLDDFuEyOoOx5FIeZ00T/d+J1QPK1LMXPCI=",
"owner": "nixpak", "owner": "nixpak",
"repo": "nixpak", "repo": "nixpak",
"rev": "fd7e8f5d315158089ffbc34cc20792e43be6e666", "rev": "51f7e5693113653be96f2606ec8ba0e2ea10936b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -739,11 +761,11 @@
}, },
"nixpkgs-2505": { "nixpkgs-2505": {
"locked": { "locked": {
"lastModified": 1764560356, "lastModified": 1766399428,
"narHash": "sha256-M5aFEFPppI4UhdOxwdmceJ9bDJC4T6C6CzCK1E2FZyo=", "narHash": "sha256-vS6LSOMDOB3s+L6tqw9IGujxnmUAZQnEG+Vi640LayI=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6c8f0cca84510cc79e09ea99a299c9bc17d03cb6", "rev": "a6c3a6141ec1b367c58ead3f7f846c772a25f4e5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -755,11 +777,11 @@
}, },
"nixpkgs-darwin": { "nixpkgs-darwin": {
"locked": { "locked": {
"lastModified": 1764081664, "lastModified": 1766532406,
"narHash": "sha256-sUoHmPr/EwXzRMpv1u/kH+dXuvJEyyF2Q7muE+t0EU4=", "narHash": "sha256-acLU/ag9VEoKkzOD202QASX25nG1eArXg5A0mHjKgxM=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "dc205f7b4fdb04c8b7877b43edb7b73be7730081", "rev": "8142186f001295e5a3239f485c8a49bf2de2695a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -771,11 +793,11 @@
}, },
"nixpkgs-lib": { "nixpkgs-lib": {
"locked": { "locked": {
"lastModified": 1761765539, "lastModified": 1765674936,
"narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=", "narHash": "sha256-k00uTP4JNfmejrCLJOwdObYC9jHRrr/5M/a/8L2EIdo=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixpkgs.lib", "repo": "nixpkgs.lib",
"rev": "719359f4562934ae99f5443f20aa06c2ffff91fc", "rev": "2075416fcb47225d9b68ac469a5c4801a9c4dd85",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -786,11 +808,11 @@
}, },
"nixpkgs-master": { "nixpkgs-master": {
"locked": { "locked": {
"lastModified": 1766076739, "lastModified": 1767513250,
"narHash": "sha256-acPMRCAPgPykzkwATwD1EfF7xgmbraAvIJyCeR6bKxc=", "narHash": "sha256-FWOxiKWAk8HpIb5SHg0XfLZ3DrtWuGnb2GBeJY02no0=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e50ab9bb181f9fb3ce00e7a6007c70ddaa007203", "rev": "2fd271ae7a341a2b2f3728f9d22f6890822f4888",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -800,29 +822,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-mesa": {
"locked": {
"lastModified": 1761817761,
"narHash": "sha256-qAEhDH77SIUUOUQC6DYYR+LGTAK+OctxBJPpo9rGMwc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "2b1f0ea3ee3952e68b164efa0a1c5e394ef2e781",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "2b1f0ea3ee3952e68b164efa0a1c5e394ef2e781",
"type": "github"
}
},
"nixpkgs-patched": { "nixpkgs-patched": {
"locked": { "locked": {
"lastModified": 1762844143, "lastModified": 1767514635,
"narHash": "sha256-SlybxLZ1/e4T2lb1czEtWVzDCVSTvk9WLwGhmxFmBxI=", "narHash": "sha256-uIZvxuyjwKJkcGFD/DEdmHuwjyjwkk6SkkR/5Z/cpdw=",
"owner": "ryan4yin", "owner": "ryan4yin",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9da7f1cf7f8a6e2a7cb3001b048546c92a8258b4", "rev": "fd9662e1991b624a72e5e545963136906c5c1adf",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -834,11 +840,11 @@
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1764020296, "lastModified": 1766473571,
"narHash": "sha256-6zddwDs2n+n01l+1TG6PlyokDdXzu/oBmEejcH5L5+A=", "narHash": "sha256-5G1NDO2PulBx1RoaA6U1YoUDX0qZslpPxv+n5GX6Qto=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a320ce8e6e2cc6b4397eef214d202a50a4583829", "rev": "76701a179d3a98b07653e2b0409847499b2a07d3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -866,11 +872,11 @@
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 315532800, "lastModified": 1763191728,
"narHash": "sha256-sV6pJNzFkiPc6j9Bi9JuHBnWdVhtKB/mHgVmMPvDFlk=", "narHash": "sha256-gI9PpaoX4/f28HkjcTbFVpFhtOxSDtOEdFaHZrdETe0=",
"rev": "82c2e0d6dde50b17ae366d2aa36f224dc19af469", "rev": "1d4c88323ac36805d09657d13a5273aea1b34f0c",
"type": "tarball", "type": "tarball",
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre877938.82c2e0d6dde5/nixexprs.tar.xz" "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre896415.1d4c88323ac3/nixexprs.tar.xz"
}, },
"original": { "original": {
"type": "tarball", "type": "tarball",
@@ -879,24 +885,11 @@
}, },
"nixpkgs_4": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1758360447, "lastModified": 1766996594,
"narHash": "sha256-XDY3A83bclygHDtesRoaRTafUd80Q30D/Daf9KSG6bs=", "narHash": "sha256-SosfgQSqVmOkqVgNYJnxW5FvoIQX4grOcpIKNrIwz4o=",
"rev": "8eaee110344796db060382e15d3af0a9fc396e0e",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/unstable/nixos-25.11pre864002.8eaee1103447/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
}
},
"nixpkgs_5": {
"locked": {
"lastModified": 1764979303,
"narHash": "sha256-/US2Ei9JHXHVBAxV4FX49Q7H5s4UNBrIiOA6Xjzgq44=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "0254eab410b90ef2420c1059f908ae777e3b02f9", "rev": "0744ef1b047f07d31d9962d757ffe38ec14a4d41",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -950,11 +943,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1764057454, "lastModified": 1765716208,
"narHash": "sha256-/E/H334pr4qo8bdTLjYahL7Tx3HMMJvKmNHDbhjq3Dc=", "narHash": "sha256-23X12PirpI3HhJZVm2Z/9BTbEHlXjJxizB6Mot7qeLU=",
"owner": "ryan4yin", "owner": "ryan4yin",
"repo": "nur-packages", "repo": "nur-packages",
"rev": "89e4e49bc0279d5c379526b16360e20ca901e226", "rev": "420e007374a83784ce915f0d0bffd670f302ee1b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -972,11 +965,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1763988335, "lastModified": 1765911976,
"narHash": "sha256-QlcnByMc8KBjpU37rbq5iP7Cp97HvjRP0ucfdh+M4Qc=", "narHash": "sha256-t3T/xm8zstHRLx+pIHxVpQTiySbKqcQbK+r+01XVKc0=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "50b9238891e388c9fdc6a5c49e49c42533a1b5ce", "rev": "b68b780b69702a090c8bb1b973bab13756cc7a27",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1026,18 +1019,40 @@
"type": "github" "type": "github"
} }
}, },
"quickshell": {
"inputs": {
"nixpkgs": [
"dms",
"nixpkgs"
]
},
"locked": {
"lastModified": 1764663772,
"narHash": "sha256-sHqLmm0wAt3PC4vczJeBozI1/f4rv9yp3IjkClHDXDs=",
"ref": "refs/heads/master",
"rev": "26531fc46ef17e9365b03770edd3fb9206fcb460",
"revCount": 713,
"type": "git",
"url": "https://git.outfoxxed.me/quickshell/quickshell"
},
"original": {
"rev": "26531fc46ef17e9365b03770edd3fb9206fcb460",
"type": "git",
"url": "https://git.outfoxxed.me/quickshell/quickshell"
}
},
"root": { "root": {
"inputs": { "inputs": {
"aagl": "aagl", "aagl": "aagl",
"agenix": "agenix", "agenix": "agenix",
"anyrun": "anyrun",
"blender-bin": "blender-bin", "blender-bin": "blender-bin",
"catppuccin": "catppuccin", "catppuccin": "catppuccin",
"disko": "disko", "disko": "disko",
"dms": "dms",
"ghostty": "ghostty", "ghostty": "ghostty",
"haumea": "haumea", "haumea": "haumea",
"helix": "helix", "helix": "helix",
"home-manager": "home-manager_2", "home-manager": "home-manager_3",
"lanzaboote": "lanzaboote", "lanzaboote": "lanzaboote",
"my-asahi-firmware": "my-asahi-firmware", "my-asahi-firmware": "my-asahi-firmware",
"mysecrets": "mysecrets", "mysecrets": "mysecrets",
@@ -1046,11 +1061,10 @@
"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_5", "nixpkgs": "nixpkgs_4",
"nixpkgs-2505": "nixpkgs-2505", "nixpkgs-2505": "nixpkgs-2505",
"nixpkgs-darwin": "nixpkgs-darwin", "nixpkgs-darwin": "nixpkgs-darwin",
"nixpkgs-master": "nixpkgs-master", "nixpkgs-master": "nixpkgs-master",
"nixpkgs-mesa": "nixpkgs-mesa",
"nixpkgs-patched": "nixpkgs-patched", "nixpkgs-patched": "nixpkgs-patched",
"nixpkgs-stable": "nixpkgs-stable", "nixpkgs-stable": "nixpkgs-stable",
"nu_scripts": "nu_scripts", "nu_scripts": "nu_scripts",
@@ -1159,21 +1173,6 @@
} }
}, },
"systems_2": { "systems_2": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_3": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@@ -1188,7 +1187,7 @@
"type": "github" "type": "github"
} }
}, },
"systems_4": { "systems_3": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@@ -1235,11 +1234,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1760401936, "lastModified": 1763295135,
"narHash": "sha256-/zj5GYO5PKhBWGzbHbqT+ehY8EghuABdQ2WGfCwZpCQ=", "narHash": "sha256-sGv/NHCmEnJivguGwB5w8LRmVqr1P72OjS+NzcJsssE=",
"owner": "mitchellh", "owner": "mitchellh",
"repo": "zig-overlay", "repo": "zig-overlay",
"rev": "365085b6652259753b598d43b723858184980bbe", "rev": "64f8b42cfc615b2cf99144adf2b7728c7847c72a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1250,7 +1249,10 @@
}, },
"zon2nix": { "zon2nix": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_4" "nixpkgs": [
"ghostty",
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1758405547, "lastModified": 1758405547,
+9 -12
View File
@@ -34,10 +34,11 @@
# which represents the GitHub repository URL + branch/commit-id/tag. # which represents the GitHub repository URL + branch/commit-id/tag.
# Official NixOS package source, using nixos's unstable branch by default # Official NixOS package source, using nixos's unstable branch by default
# Find git commit hash with build status here(3 jobs per day):
# https://hydra.nixos.org/jobset/nixpkgs/unstable
# update via nix flake update nixpkgs --override-input nixpkgs github:NixOS/nixpkgs/<commit-hash>
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.11"; nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.11";
# revert mesa to 25.2.6
nixpkgs-mesa.url = "github:nixos/nixpkgs/2b1f0ea3ee3952e68b164efa0a1c5e394ef2e781";
nixpkgs-2505.url = "github:nixos/nixpkgs/nixos-25.05"; nixpkgs-2505.url = "github:nixos/nixpkgs/nixos-25.05";
# nixpkgs with some custom patches # nixpkgs with some custom patches
@@ -79,15 +80,6 @@
url = "github:nix-community/preservation"; url = "github:nix-community/preservation";
}; };
# community wayland nixpkgs
# nixpkgs-wayland.url = "github:nix-community/nixpkgs-wayland";
# anyrun - a wayland launcher
anyrun = {
url = "github:/anyrun-org/anyrun/v25.9.3";
inputs.nixpkgs.follows = "nixpkgs";
};
# generate iso/qcow2/docker/... image from nixos configuration # generate iso/qcow2/docker/... image from nixos configuration
nixos-generators = { nixos-generators = {
url = "github:nix-community/nixos-generators"; url = "github:nix-community/nixos-generators";
@@ -139,7 +131,7 @@
nixos-apple-silicon = { nixos-apple-silicon = {
# asahi-6.17.7-2 # asahi-6.17.7-2
url = "github:nix-community/nixos-apple-silicon/release-2025-11-18"; url = "github:nix-community/nixos-apple-silicon";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
@@ -150,6 +142,11 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
dms = {
url = "github:AvengeMedia/DankMaterialShell/stable";
inputs.nixpkgs.follows = "nixpkgs";
};
# -------------- Gaming --------------------- # -------------- Gaming ---------------------
nix-gaming = { nix-gaming = {
+8 -6
View File
@@ -16,17 +16,19 @@ let
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/we/wechat/package.nix # https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/we/wechat/package.nix
sources = { sources = {
aarch64-linux = { aarch64-linux = {
version = "4.0.1.11"; version = "4.1.0.13";
src = fetchurl { src = fetchurl {
url = "https://web.archive.org/web/20250512112413if_/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_arm64.AppImage"; # url = "https://web.archive.org/web/20251209092116if_/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_arm64.AppImage";
hash = "sha256-Rg+FWNgOPC02ILUskQqQmlz1qNb9AMdvLcRWv7NQhGk="; url = "https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_arm64.AppImage";
hash = "sha256-/d5crM6IGd0k0fSlBSQx4TpIVX/8iib+an0VMkWMNdw=";
}; };
}; };
x86_64-linux = { x86_64-linux = {
version = "4.0.1.11"; version = "4.1.0.13";
src = fetchurl { src = fetchurl {
url = "https://web.archive.org/web/20250512110825if_/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_x86_64.AppImage"; # url = "https://web.archive.org/web/20251219062558if_/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_x86_64.AppImage";
hash = "sha256-gBWcNQ1o1AZfNsmu1Vi1Kilqv3YbR+wqOod4XYAeVKo="; url = "https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_x86_64.AppImage";
hash = "sha256-+r5Ebu40GVGG2m2lmCFQ/JkiDsN/u7XEtnLrB98602w=";
}; };
}; };
}; };
-1
View File
@@ -23,7 +23,6 @@ in
(_: super: { (_: super: {
nixpaks = { nixpaks = {
qq = wrapper pkgs-master ./qq.nix; qq = wrapper pkgs-master ./qq.nix;
wechat = wrapper super ./wechat.nix;
telegram-desktop = wrapper super ./telegram-desktop.nix; telegram-desktop = wrapper super ./telegram-desktop.nix;
firefox = wrapper super ./firefox.nix; firefox = wrapper super ./firefox.nix;
}; };
+1 -2
View File
@@ -22,7 +22,6 @@ home/
├── linux/ # Linux-specific home manager configurations ├── linux/ # Linux-specific home manager configurations
│ ├── base/ # Linux base configurations │ ├── base/ # Linux base configurations
│ ├── gui/ # Linux GUI applications │ ├── gui/ # Linux GUI applications
│ │ ├── hyprland/ # Hyprland window manager
│ │ ├── niri/ # Niri window manager │ │ ├── niri/ # Niri window manager
│ │ └── ... │ │ └── ...
│ ├── editors/ # Linux-specific editors │ ├── editors/ # Linux-specific editors
@@ -40,7 +39,7 @@ home/
- Shared configurations for editors, shells, and essential tools - Shared configurations for editors, shells, and essential tools
2. **linux**: Linux-specific configuration 2. **linux**: Linux-specific configuration
- Desktop environments (Hyprland, Niri) - Desktop environments (Noctalia Shell, Niri compositor)
- Linux-specific GUI applications - Linux-specific GUI applications
- System integration tools - System integration tools
+1 -1
View File
@@ -77,7 +77,7 @@
# }; # };
}; };
aliases = { alias = {
# common aliases # common aliases
br = "branch"; br = "branch";
co = "checkout"; co = "checkout";
+1 -1
View File
@@ -8,7 +8,7 @@
enableBashIntegration = true; enableBashIntegration = true;
enableNushellIntegration = true; enableNushellIntegration = true;
settings = { settings = {
manager = { mgr = {
show_hidden = true; show_hidden = true;
sort_dir_first = true; sort_dir_first = true;
}; };
+1 -1
View File
@@ -24,7 +24,7 @@
# https://docs.bigmodel.cn/cn/coding-plan/tool/claude # https://docs.bigmodel.cn/cn/coding-plan/tool/claude
$env.ANTHROPIC_BASE_URL = "https://open.bigmodel.cn/api/anthropic" $env.ANTHROPIC_BASE_URL = "https://open.bigmodel.cn/api/anthropic"
$env.ANTHROPIC_AUTH_TOKEN = $env.ZAI_API_KEY $env.ANTHROPIC_AUTH_TOKEN = $env.ZAI_API_KEY
$env.ANTHROPIC_MODEL = "glm-4.6" $env.ANTHROPIC_MODEL = "glm-4.7"
$env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "glm-4.5-air" $env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "glm-4.5-air"
# using claude-code with qwen llm # using claude-code with qwen llm
+1 -3
View File
@@ -15,7 +15,6 @@ cases.
### Desktop Configurations ### Desktop Configurations
- **gui/**: Desktop environment configurations - **gui/**: Desktop environment configurations
- **hyprland/**: Hyprland window manager with custom keybindings and settings
- **niri/**: Niri compositor configuration - **niri/**: Niri compositor configuration
- **base/**: Common desktop applications and services - **base/**: Common desktop applications and services
- **editors/**: Text editor configurations for desktop environments - **editors/**: Text editor configurations for desktop environments
@@ -29,6 +28,5 @@ cases.
## Usage ## Usage
- **Lightweight/Terminal**: Use `core.nix` or `tui.nix` for terminal-focused setups - **Lightweight/Terminal**: Use `core.nix` or `tui.nix` for terminal-focused setups
- **Desktops**: Use `gui.nix` for full desktop environments with window managers like Hyprland or - **Desktops**: Use `gui.nix` for full desktop environments with Noctalia Shell and Niri compositor
Niri
- **Custom**: Mix and match configurations as needed for your specific use case - **Custom**: Mix and match configurations as needed for your specific use case
+3 -6
View File
@@ -7,24 +7,21 @@ Manager.
### Window Managers ### Window Managers
- **hyprland**: Hyprland compositor configuration with custom keybindings, settings, and window
rules
- **niri**: Niri compositor configuration with custom settings, keybindings, spawn-at-startup rules, - **niri**: Niri compositor configuration with custom settings, keybindings, spawn-at-startup rules,
and window rules and window rules
### Base Desktop Environment ### Base Desktop Environment
- **base**: Common desktop configurations shared across all environments, including: - **base**: Common desktop configurations shared across all environments, including:
- Desktop applications (anyrun, mako, waybar, wlogout) - **Noctalia Shell**: All-in-one Wayland desktop shell (replaces gammastep, swaylock, anyrun,
mako, waybar, wallpaper-switcher, wlogout, and other desktop tools)
- Creative tools and media applications - Creative tools and media applications
- Development tools - Development tools
- Eye protection utilities (gammastep)
- Fcitx5 input method framework - Fcitx5 input method framework
- Games and gaming utilities - Games and gaming utilities
- GTK theme configurations - GTK theme configurations
- Immutable file handling - Immutable file handling
- Note-taking applications - Note-taking applications
- Wallpaper management with auto-switcher
- Wayland applications - Wayland applications
- XDG desktop configurations - XDG desktop configurations
@@ -37,7 +34,7 @@ Manager.
1. **Configuration Location**: Desktop environment configuration files are located in `~/.config`, 1. **Configuration Location**: Desktop environment configuration files are located in `~/.config`,
which can be easily managed by Home Manager. which can be easily managed by Home Manager.
2. **User-specific Services**: Many user-specific systemd services (gammastep, wallpaper-switcher, 2. **User-specific Services**: User-specific systemd services (noctalia-shell, fcitx5, hypridle,
etc.) can be easily managed by Home Manager. If desktop environments were configured via NixOS etc.) can be easily managed by Home Manager. If desktop environments were configured via NixOS
Module, these user-level services might fail to start automatically. With Home Manager modules, Module, these user-level services might fail to start automatically. With Home Manager modules,
we can control systemd service dependency order more effectively. we can control systemd service dependency order more effectively.
+84
View File
@@ -0,0 +1,84 @@
# Base Desktop Environment Configuration
This directory contains base configurations for Linux desktop environments, providing essential
components for a complete Wayland desktop experience.
## Overview
The configuration is organized into modular components that can be selectively enabled:
- **Desktop Shell**: Noctalia Shell for unified desktop environment
- **Applications**: Desktop tools, browsers, editors, media players, etc.
- **Development Tools**: IDEs and development utilities
- **System Integration**: Input methods, theming, XDG specifications, GPU settings
## Noctalia Shell
**Noctalia Shell** is an all-in-one Wayland desktop shell that replaces multiple separate tools with
a single, unified solution. It provides:
- **Unified Configuration**: All components configured in a single `settings.json` file
- **Consistent Experience**: Cohesive visual design and interaction patterns
- **Reduced Complexity**: No need to maintain multiple separate config files
### Component Replacement
Noctalia Shell consolidates functionality that previously required multiple tools:
| Traditional Component | Purpose | Noctalia Replacement |
| ---------------------- | -------------------- | ------------------------------ |
| **gammastep** | Blue light filter | `nightLight` configuration |
| **swaylock** | Screen locker | Built-in lock screen |
| **anyrun** | Application launcher | `appLauncher` |
| **mako** | Notification daemon | `notifications` |
| **waybar** | Status bar | `bar` (with widgets) |
| **wallpaper-switcher** | Wallpaper management | `wallpaper` (with transitions) |
| **wlogout** | Session menu | `sessionMenu` |
| **wl-clipboard** | Clipboard management | Built-in clipboard manager |
## Configuration Modules
### Desktop Shell
- **[`noctalia/default.nix`](./noctalia/default.nix)**: Package installation and systemd service
- **[`noctalia/settings.json`](./noctalia/settings.json)**: Main configuration with all settings
Key features: bar, control center, night light, wallpaper, session menu, system monitor,
audio/volume, brightness, screen recorder, calendar, color schemes, dock, notifications, OSD, and
more.
- **[`hypridle/`](./hypridle/)**: Idle management
### Desktop Environment
- **[`gtk.nix`](./gtk.nix)**: GTK theme configuration
- **[`xdg.nix`](./xdg.nix)**: XDG specifications
- **[`nvidia.nix`](./nvidia.nix)**: NVIDIA GPU settings
### Input & Localization
- **[`fcitx5/`](./fcitx5/)**: Fcitx5 input method with Mozc (Japanese input)
### Applications
- **[`desktop-tools.nix`](./desktop-tools.nix)**: Daily GUI apps (foliate, remmina, messaging)
- **[`browsers.nix`](./browsers.nix)**: Web browsers
- **[`editors.nix`](./editors.nix)**: Desktop text editors
- **[`media.nix`](./media.nix)**: Media players
- **[`gaming.nix`](./gaming.nix)**: Gaming applications
- **[`creative.nix`](./creative.nix)**: Creative software
- **[`note-taking.nix`](./note-taking.nix)**: Note-taking apps
### Development
- **[`dev-tools.nix`](./dev-tools.nix)**: Development tools and IDEs
### System Utilities
- **[`misc.nix`](./misc.nix)**: Wayland tools (screenshots, screen recording, color picker, audio)
- **[`immutable-file.nix`](./immutable-file.nix)**: Immutable file handling
## Related Documentation
- Noctalia Shell: https://docs.noctalia.dev/docs
- Parent: [`../README.md`](../README.md)
@@ -1,14 +1,5 @@
{ mylib, pkgs, ... }:
{ {
config,
pkgs,
...
}:
{
imports = [
./anyrun.nix
./nvidia.nix
];
# wayland related # wayland related
home.sessionVariables = { home.sessionVariables = {
"NIXOS_OZONE_WL" = "1"; # for any ozone-based browser & electron apps to run on wayland "NIXOS_OZONE_WL" = "1"; # for any ozone-based browser & electron apps to run on wayland
@@ -16,10 +7,14 @@
"MOZ_WEBRENDER" = "1"; "MOZ_WEBRENDER" = "1";
# enable native Wayland support for most Electron apps # enable native Wayland support for most Electron apps
"ELECTRON_OZONE_PLATFORM_HINT" = "auto"; "ELECTRON_OZONE_PLATFORM_HINT" = "auto";
# misc
"_JAVA_AWT_WM_NONREPARENTING" = "1"; # qt
"QT_WAYLAND_DISABLE_WINDOWDECORATION" = "1"; "QT_WAYLAND_DISABLE_WINDOWDECORATION" = "1";
"QT_QPA_PLATFORM" = "wayland"; "QT_QPA_PLATFORM" = "wayland";
"QT_QPA_PLATFORMTHEME" = "qt6ct"; # Qt6 applications look for icon themes based on this env.
# misc
"_JAVA_AWT_WM_NONREPARENTING" = "1";
"SDL_VIDEODRIVER" = "wayland"; "SDL_VIDEODRIVER" = "wayland";
"GDK_BACKEND" = "wayland"; "GDK_BACKEND" = "wayland";
"XDG_SESSION_TYPE" = "wayland"; "XDG_SESSION_TYPE" = "wayland";
@@ -39,37 +34,9 @@
wf-recorder # screen recording wf-recorder # screen recording
]; ];
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 # screen locker
programs.swaylock.enable = true; programs.swaylock.enable = true;
# Logout Menu # Logout Menu
programs.wlogout.enable = true; 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;
} }
-66
View File
@@ -1,66 +0,0 @@
{
pkgs,
anyrun,
...
}:
let
anyrunPackages = anyrun.packages.${pkgs.stdenv.hostPlatform.system};
in
{
imports = [
(
{ modulesPath, ... }:
{
# Important! We disable home-manager's module to avoid option
# definition collisions
disabledModules = [ "${modulesPath}/programs/anyrun.nix" ];
}
)
anyrun.homeManagerModules.default
];
programs.anyrun = {
enable = true;
# The package should come from the same flake as all the plugins to avoid breakage.
package = anyrunPackages.anyrun;
config = {
# The horizontal position.
# when using `fraction`, it sets a fraction of the width or height of the screen
x.fraction = 0.5; # at the middle of the screen
# The vertical position.
y.fraction = 0.05; # at the top of the screen
# The width of the runner.
width.fraction = 0.3; # 30% of the screen
hideIcons = false;
ignoreExclusiveZones = false;
layer = "overlay";
hidePluginInfo = false;
closeOnClick = true;
showResultsImmediately = true;
maxEntries = null;
# https://github.com/anyrun-org/anyrun/tree/master/plugins
plugins = with anyrunPackages; [
applications # Launch applications
dictionary # Look up word definitions using the Free Dictionary API.
nix-run # search & run graphical apps from nixpkgs via `nix run`, without installing it.
# randr # quickly change monitor configurations on the fly
rink # A simple calculator plugin
symbols # Look up unicode symbols and custom user defined symbols.
translate # ":zh <text to translate>" Quickly translate text using the Google Translate API.
niri-focus # Search for & focus the window via title/appid on Niri
];
};
extraConfigFiles = {
"symbols.ron".source = ./conf/anyrun/symbols.ron;
"applications.ron".source = ./conf/anyrun/applications.ron;
};
};
# https://github.com/anyrun-org/anyrun/discussions/179
xdg.configFile."anyrun/style.css".source = ./conf/anyrun/style.css;
}
@@ -1,16 +0,0 @@
Config(
// Also show the Desktop Actions defined in the desktop files, e.g. "New Window" from LibreWolf
desktop_actions: true,
max_entries: 5,
// The terminal used for running terminal based desktop entries, if left as `None` a static list of terminals is used
// to determine what terminal to use.
terminal: Some(Terminal(
// The main terminal command
command: "alacritty",
// What arguments should be passed to the terminal process to run the command correctly
// {} is replaced with the command in the desktop entry
args: "-e {}",
)),
)
@@ -1,101 +0,0 @@
/* ===== Color variables ===== */
:root {
--bg-color: #313244;
--fg-color: #cdd6f4;
--primary-color: #89b4fa;
--secondary-color: #cba6f7;
--border-color: var(--primary-color);
--selected-bg-color: var(--primary-color);
--selected-fg-color: var(--bg-color);
}
/* ===== Global reset ===== */
* {
all: unset;
font-family: "JetBrainsMono Nerd Font", monospace;
}
/* ===== Transparent window ===== */
window {
background: transparent;
}
/* ===== Main container ===== */
box.main {
border-radius: 16px;
background-color: color-mix(in srgb, var(--bg-color) 80%, transparent);
border: 0.5px solid color-mix(in srgb, var(--fg-color) 25%, transparent);
padding: 12px; /* add uniform padding around the whole box */
}
/* ===== Input field ===== */
text {
font-size: 1.3rem;
background: transparent;
border: 1px solid var(--border-color);
border-radius: 16px;
margin-bottom: 12px;
padding: 5px 10px;
min-height: 44px;
caret-color: var(--primary-color);
}
/* ===== List container ===== */
.matches {
background-color: transparent;
}
/* ===== Single match row ===== */
.match {
font-size: 1.1rem;
padding: 4px 10px; /* tight vertical spacing */
border-radius: 6px;
}
/* Remove default label margins */
.match * {
margin: 0;
padding: 0;
line-height: 1;
}
/* Selected / hover state */
.match:selected,
.match:hover {
background-color: var(--selected-bg-color);
color: var(--selected-fg-color);
}
.match:selected label.plugin.info,
.match:hover label.plugin.info {
color: var(--selected-fg-color);
}
.match:selected label.match.description,
.match:hover label.match.description {
color: color-mix(in srgb, var(--selected-fg-color) 90%, transparent);
}
/* ===== Plugin info label ===== */
label.plugin.info {
color: var(--fg-color);
font-size: 1rem;
min-width: 160px;
text-align: left;
}
/* ===== Description label ===== */
label.match.description {
font-size: 0rem;
color: var(--fg-color);
}
/* ===== Fade-in animation ===== */
@keyframes fade {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@@ -1,10 +0,0 @@
Config(
// The prefix that the search needs to begin with to yield symbol results
prefix: "",
// Custom user defined symbols to be included along the unicode symbols
symbols: {
// "name": "text to be copied"
"shrug": "¯\\_(ツ)_/¯",
},
max_entries: 3,
)
@@ -1,51 +0,0 @@
## Mako configuration file
# GLOBAL CONFIGURATION OPTIONS
max-history=100
sort=-time
# BINDING OPTIONS
on-button-left=dismiss
on-button-middle=none
on-button-right=dismiss-all
on-touch=dismiss
on-notify=exec mpv /usr/share/sounds/freedesktop/stereo/message.oga
# STYLE OPTIONS
font=Maple Mono NF CN
width=300
height=100
margin=10
padding=15
border-size=2
border-radius=0
icons=1
max-icon-size=48
icon-location=left
markup=1
actions=1
history=1
text-alignment=left
default-timeout=5000
ignore-timeout=0
max-visible=5
layer=overlay
anchor=top-right
background-color=#1e1e2e
text-color=#d9e0ee
border-color=#313244
progress-color=over #89b4fa
[urgency=low]
border-color=#313244
default-timeout=2000
[urgency=normal]
border-color=#313244
default-timeout=5000
[urgency=high]
border-color=#f38ba8
text-color=#f38ba8
default-timeout=0
Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

@@ -1,156 +0,0 @@
{
"position": "top",
"layer": "top",
"modules-left": ["custom/launcher", "temperature", "backlight", "hyprland/workspaces"],
"modules-center": ["custom/playerctl"],
"modules-right": [
"pulseaudio",
"memory",
"cpu",
"network",
"battery",
"clock",
"idle_inhibitor",
"custom/powermenu",
"tray",
],
"hyprland/workspaces": {
"format": "{icon}",
"on-click": "activate",
"format-icons": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"focused": "",
"default": "",
},
},
"clock": {
"interval": 60,
"align": 0,
"rotate": 0,
"tooltip-format": "<big>{:%B %Y}</big>\n<tt><small>{calendar}</small></tt>",
"format": " {:%H:%M}",
"format-alt": " {:%a %b %d, %G}",
},
"cpu": {
"format": "CPU {usage}%",
"interval": 1,
"on-click-middle": "foot btop",
"on-click-right": "foot btop",
},
"memory": {
"format": "MEM {percentage}%",
"interval": 1,
"states": {
"warning": 85,
},
},
"custom/launcher": {
"format": "\uf313 ",
"on-click": "anyrun",
"on-click-middle": "exec default_wall",
"on-click-right": "exec wallpaper_random",
"tooltip": false,
},
"custom/powermenu": {
"format": "\uf011",
"on-click": "wlogout",
"tooltip": false,
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "\uf06e",
"deactivated": "\uf070",
},
"tooltip": false,
},
"custom/playerctl": {
"format": "{icon} <span>{}</span>",
"return-type": "json",
"max-length": 55,
"exec": "playerctl -a metadata --format '{\"text\": \" {{markup_escape(title)}}\", \"tooltip\": \"{{playerName}} : {{markup_escape(title)}}\", \"alt\": \"{{status}}\", \"class\": \"{{status}}\"}' -F",
"on-click-middle": "playerctl previous",
"on-click": "playerctl play-pause",
"on-click-right": "playerctl next",
"format-icons": {
"Paused": "<span foreground='#6dd9d9'></span>",
"Playing": "<span foreground='#82db97'></span>",
},
},
"network": {
"interval": 5,
"format": "{ifname}",
"format-wifi": " {signalStrength}% Down: {bandwidthDownBytes} Up: {bandwidthUpBytes} {essid}",
"format-ethernet": " {ifname} Down: {bandwidthDownBytes} Up: {bandwidthUpBytes}",
"format-disconnected": "Disconnected ⚠",
"tooltip-format": " {ifname} via {gwaddri}",
"tooltip-format-wifi": " {ifname} @ {essid}\nIP: {ipaddr}\nStrength: {signalStrength}%\nFreq: {frequency}MHz\nDown: {bandwidthDownBytes} Up: {bandwidthUpBytes}",
"tooltip-format-ethernet": " {ifname}\nIP: {ipaddr}\n Down: {bandwidthDownBytes} Up: {bandwidthUpBytes}",
"tooltip-format-disconnected": "Disconnected",
"max-length": 50,
"on-click-middle": "nm-connection-editor",
"on-click-right": "foot nmtui",
},
"pulseaudio": {
//"format": "{volume}% {icon} {format_source}",
"format": "{icon} {volume}%",
"format-muted": " Mute",
"format-bluetooth": " {volume}% {format_source}",
"format-bluetooth-muted": " Mute",
"format-source": " {volume}%",
"format-source-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["", "", ""],
},
"scroll-step": 5.0,
// Commands to execute on events
"on-click": "amixer set Master toggle",
"on-click-right": "GSK_RENDERER=opengl pavucontrol",
"smooth-scrolling-threshold": 1,
},
"temperature": {
"format": "\uf2c9 {temperatureC}\u00b0C",
"tooltip": false,
},
"backlight": {
"format": "{icon} {percent}%",
"format-icons": ["", "", "", "", "", "", "", "", ""],
},
"tray": {
"icon-size": 15,
"spacing": 5,
},
"battery": {
"interval": 60,
"states": {
"warning": 30,
"critical": 15,
},
"max-length": 20,
"format": "{icon} {capacity}%",
"format-warning": "{icon} {capacity}%",
"format-critical": "{icon} {capacity}%",
"format-charging": "<span font-family='Font Awesome 6 Free'></span> {capacity}%",
"format-plugged": " {capacity}%",
"format-alt": "{icon} {time}",
"format-full": " {capacity}%",
"format-icons": [" ", " ", " ", " ", " "],
},
}
@@ -1,38 +0,0 @@
/*
* https://github.com/catppuccin/waybar/blob/main/themes/mocha.css
*
* Catppuccin Mocha palette
* Maintainer: rubyowo
*
*/
@define-color base #1e1e2e;
@define-color mantle #181825;
@define-color crust #11111b;
@define-color text #cdd6f4;
@define-color subtext0 #a6adc8;
@define-color subtext1 #bac2de;
@define-color surface0 #313244;
@define-color surface1 #45475a;
@define-color surface2 #585b70;
@define-color overlay0 #6c7086;
@define-color overlay1 #7f849c;
@define-color overlay2 #9399b2;
@define-color blue #89b4fa;
@define-color lavender #b4befe;
@define-color sapphire #74c7ec;
@define-color sky #89dceb;
@define-color teal #94e2d5;
@define-color green #a6e3a1;
@define-color yellow #f9e2af;
@define-color peach #fab387;
@define-color maroon #eba0ac;
@define-color red #f38ba8;
@define-color mauve #cba6f7;
@define-color pink #f5c2e7;
@define-color flamingo #f2cdcd;
@define-color rosewater #f5e0dc;
@@ -1,151 +0,0 @@
@import "mocha.css";
* {
/* https://docs.gtk.org/gtk3/css-overview.html#colors */
color: @text;
font-family: "Maple Mono NF CN";
font-size: 12pt;
font-weight: bold;
border-radius: 8px;
transition-property: background-color;
transition-duration: 0.5s;
}
@keyframes blink_red {
to {
background-color: rgb(242, 143, 173);
color: rgb(26, 24, 38);
}
}
.warning,
.critical,
.urgent {
animation-name: blink_red;
animation-duration: 1s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
window#waybar {
background-color: transparent;
border: 2px solid alpha(@crust, 0.3);
}
window > box {
margin-left: 5px;
margin-right: 5px;
margin-top: 5px;
background-color: shade(@base, 0.9);
padding: 3px;
padding-left: 8px;
border: 2px none #33ccff;
}
#workspaces {
padding-left: 0px;
padding-right: 4px;
}
#workspaces button {
padding-top: 5px;
padding-bottom: 5px;
padding-left: 6px;
padding-right: 6px;
}
#workspaces button.active {
background-color: rgb(181, 232, 224);
color: rgb(26, 24, 38);
}
#workspaces button.urgent {
color: rgb(26, 24, 38);
}
#workspaces button:hover {
background-color: rgb(248, 189, 150);
color: rgb(26, 24, 38);
}
tooltip {
background: rgb(48, 45, 65);
}
tooltip label {
color: rgb(217, 224, 238);
}
#custom-launcher {
font-size: 20px;
padding-left: 8px;
padding-right: 6px;
color: #7ebae4;
}
#mode,
#clock,
#memory,
#temperature,
#cpu,
#custom-wall,
#temperature,
#backlight,
#pulseaudio,
#network,
#battery,
#custom-powermenu {
padding-left: 10px;
padding-right: 10px;
}
/* #mode { */
/* margin-left: 10px; */
/* background-color: rgb(248, 189, 150); */
/* color: rgb(26, 24, 38); */
/* } */
#memory {
color: rgb(181, 232, 224);
}
#cpu {
color: rgb(245, 194, 231);
}
#clock {
color: rgb(217, 224, 238);
}
#idle_inhibitor {
color: rgb(221, 182, 242);
padding-right: 8px;
}
#battery {
min-width: 55px;
color: rgb(126, 186, 244);
}
#battery.charging,
#battery.full,
#battery.plugged {
color: #26a65b;
}
#battery.critical:not(.charging) {
color: #f53c3c;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#custom-wall {
color: #33ccff;
}
#temperature {
color: rgb(150, 205, 251);
}
#backlight {
color: rgb(248, 189, 150);
}
#pulseaudio {
color: rgb(245, 224, 220);
}
#network {
color: #abe9b3;
}
#network.disconnected {
color: rgb(255, 255, 255);
}
#custom-powermenu {
color: rgb(242, 143, 173);
padding-right: 8px;
}
#tray {
padding-right: 8px;
padding-left: 10px;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

@@ -1,36 +0,0 @@
{
"label" : "lock",
"action" : "~/.config/hypr/scripts/lockscreen",
"text" : "Lock",
"keybind" : "l"
}
{
"label" : "hibernate",
"action" : "systemctl hibernate",
"text" : "Hibernate",
"keybind" : "h"
}
{
"label" : "logout",
"action" : "loginctl terminate-user $USER",
"text" : "Logout",
"keybind" : "e"
}
{
"label" : "shutdown",
"action" : "systemctl poweroff",
"text" : "Shutdown",
"keybind" : "s"
}
{
"label" : "suspend",
"action" : "systemctl suspend",
"text" : "Suspend",
"keybind" : "u"
}
{
"label" : "reboot",
"action" : "systemctl reboot",
"text" : "Reboot",
"keybind" : "r"
}
@@ -1,57 +0,0 @@
/** ********** Fonts ********** **/
* {
font-family: "Maple Mono NF CN", sans-serif;
font-size: 14px;
font-weight: bold;
}
/** ********** Main Window ********** **/
window {
background-color: #1e1e2e;
}
/** ********** Buttons ********** **/
button {
background-color: #242434;
color: #ffffff;
border: 2px solid #282838;
border-radius: 20px;
background-repeat: no-repeat;
background-position: center;
background-size: 35%;
}
button:focus,
button:active,
button:hover {
background-color: #89b4fa;
outline-style: none;
}
/** ********** Icons ********** **/
#lock {
background-image: image(url("icons/lock.png"), url("/usr/share/wlogout/icons/lock.png"));
}
#logout {
background-image: image(url("icons/logout.png"), url("/usr/share/wlogout/icons/logout.png"));
}
#suspend {
background-image: image(url("icons/suspend.png"), url("/usr/share/wlogout/icons/suspend.png"));
}
#hibernate {
background-image: image(
url("icons/hibernate.png"),
url("/usr/share/wlogout/icons/hibernate.png")
);
}
#shutdown {
background-image: image(url("icons/shutdown.png"), url("/usr/share/wlogout/icons/shutdown.png"));
}
#reboot {
background-image: image(url("icons/reboot.png"), url("/usr/share/wlogout/icons/reboot.png"));
}
+50
View File
@@ -0,0 +1,50 @@
{
config,
pkgs,
wallpapers,
dms,
...
}:
{
imports = [
dms.homeModules.dankMaterialShell.default
];
home.packages = [
pkgs.qt6Packages.qt6ct # for icon theme
];
home.file."Pictures/Wallpapers".source = wallpapers;
xdg.configFile =
let
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
confPath = "${config.home.homeDirectory}/nix-config/home/linux/gui/base/dma-shell";
in
{
"DankMaterialShell/settings.json".source = mkSymlink "${confPath}/settings.json";
"qt6ct/qt6ct.conf".source = mkSymlink "${confPath}/qt6ct.conf";
};
systemd.user.services.dms.Service.Environment = [
"QT_QPA_PLATFORM=wayland"
"QT_QPA_PLATFORMTHEME=qt6ct"
];
programs.dankMaterialShell = {
enable = true;
systemd = {
enable = true; # Systemd service for auto-start
restartIfChanged = true; # Auto-restart dms.service when dankMaterialShell changes
};
# Core features
enableSystemMonitoring = true; # System monitoring widgets (dgop)
enableClipboard = true; # Clipboard history manager
enableVPN = true; # VPN management widget
enableDynamicTheming = true; # Wallpaper-based theming (matugen)
enableAudioWavelength = true; # Audio visualizer (cava)
enableCalendarEvents = true; # Calendar integration (khal)
};
}
+31
View File
@@ -0,0 +1,31 @@
[Appearance]
custom_palette=false
icon_theme=Papirus
standard_dialogs=default
style=Fusion
[Fonts]
fixed="Maple Mono NF CN,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular"
general="Maple Mono NF CN,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular"
[Interface]
activate_item_on_single_click=1
buttonbox_layout=0
cursor_flash_time=1000
dialog_buttons_have_icons=1
double_click_interval=400
gui_effects=@Invalid()
keyboard_scheme=2
menus_have_icons=true
show_shortcuts_in_context_menus=true
stylesheets=@Invalid()
toolbutton_style=4
underline_shortcut=1
wheel_scroll_lines=3
[SettingsWindow]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3H\0\0\x3\xf5\0\0\0\0\0\0\0\0\0\0\x3H\0\0\x3\xf5\0\0\0\0\0\0\0\0\x6\xab\0\0\0\0\0\0\0\0\0\0\x3H\0\0\x3\xf5)
[Troubleshooting]
force_raster_widgets=1
ignored_applications=@Invalid()
+348
View File
@@ -0,0 +1,348 @@
{
"currentThemeName": "dynamic",
"customThemeFile": "",
"matugenScheme": "scheme-tonal-spot",
"runUserMatugenTemplates": true,
"matugenTargetMonitor": "",
"popupTransparency": 1,
"dockTransparency": 1,
"widgetBackgroundColor": "sch",
"widgetColorMode": "colorful",
"cornerRadius": 12,
"use24HourClock": true,
"showSeconds": true,
"useFahrenheit": false,
"nightModeEnabled": false,
"animationSpeed": 1,
"customAnimationDuration": 500,
"wallpaperFillMode": "Fill",
"blurredWallpaperLayer": false,
"blurWallpaperOnOverview": false,
"showLauncherButton": true,
"showWorkspaceSwitcher": true,
"showFocusedWindow": true,
"showWeather": true,
"showMusic": true,
"showClipboard": true,
"showCpuUsage": true,
"showMemUsage": true,
"showCpuTemp": true,
"showGpuTemp": true,
"selectedGpuIndex": 0,
"enabledGpuPciIds": [],
"showSystemTray": true,
"showClock": true,
"showNotificationButton": true,
"showBattery": true,
"showControlCenterButton": true,
"showCapsLockIndicator": true,
"controlCenterShowNetworkIcon": false,
"controlCenterShowBluetoothIcon": false,
"controlCenterShowAudioIcon": false,
"controlCenterShowVpnIcon": false,
"controlCenterShowBrightnessIcon": false,
"controlCenterShowMicIcon": false,
"controlCenterShowBatteryIcon": false,
"controlCenterShowPrinterIcon": false,
"showPrivacyButton": true,
"privacyShowMicIcon": false,
"privacyShowCameraIcon": false,
"privacyShowScreenShareIcon": false,
"controlCenterWidgets": [
{
"id": "volumeSlider",
"enabled": true,
"width": 50
},
{
"id": "brightnessSlider",
"enabled": true,
"width": 50
},
{
"id": "wifi",
"enabled": true,
"width": 50
},
{
"id": "bluetooth",
"enabled": true,
"width": 50
},
{
"id": "audioOutput",
"enabled": true,
"width": 50
},
{
"id": "audioInput",
"enabled": true,
"width": 50
},
{
"id": "nightMode",
"enabled": true,
"width": 50
},
{
"id": "darkMode",
"enabled": true,
"width": 50
}
],
"showWorkspaceIndex": false,
"showWorkspacePadding": false,
"workspaceScrolling": false,
"showWorkspaceApps": false,
"maxWorkspaceIcons": 3,
"workspacesPerMonitor": true,
"showOccupiedWorkspacesOnly": false,
"dwlShowAllTags": false,
"workspaceNameIcons": {
"1terminal": {
"type": "icon",
"value": "terminal"
},
"2browser": {
"type": "icon",
"value": "desktop_windows"
},
"3chat": {
"type": "icon",
"value": "forum"
},
"4music": {
"type": "icon",
"value": "music_note"
},
"5mail": {
"type": "icon",
"value": "mail"
},
"6file": {
"type": "icon",
"value": "folder"
},
"0other": {
"type": "icon",
"value": "update"
}
},
"waveProgressEnabled": true,
"scrollTitleEnabled": true,
"clockCompactMode": false,
"focusedWindowCompactMode": false,
"runningAppsCompactMode": true,
"keyboardLayoutNameCompactMode": false,
"runningAppsCurrentWorkspace": false,
"runningAppsGroupByApp": false,
"centeringMode": "index",
"clockDateFormat": "",
"lockDateFormat": "",
"mediaSize": 1,
"appLauncherViewMode": "list",
"spotlightModalViewMode": "list",
"sortAppsAlphabetically": false,
"appLauncherGridColumns": 4,
"spotlightCloseNiriOverview": true,
"niriOverviewOverlayEnabled": true,
"weatherLocation": "New York, NY",
"weatherCoordinates": "40.7128,-74.0060",
"useAutoLocation": true,
"weatherEnabled": true,
"networkPreference": "auto",
"vpnLastConnected": "",
"iconTheme": "System Default",
"launcherLogoMode": "os",
"launcherLogoCustomPath": "",
"launcherLogoColorOverride": "primary",
"launcherLogoColorInvertOnMode": false,
"launcherLogoBrightness": 0.5,
"launcherLogoContrast": 1,
"launcherLogoSizeOffset": 0,
"fontFamily": "Inter Variable",
"monoFontFamily": "Maple Mono NF CN",
"fontWeight": 400,
"fontScale": 1,
"notepadUseMonospace": true,
"notepadFontFamily": "",
"notepadFontSize": 14,
"notepadShowLineNumbers": false,
"notepadTransparencyOverride": -1,
"notepadLastCustomTransparency": 0.7,
"soundsEnabled": true,
"useSystemSoundTheme": false,
"soundNewNotification": true,
"soundVolumeChanged": true,
"soundPluggedIn": true,
"acMonitorTimeout": 1800,
"acLockTimeout": 1200,
"acSuspendTimeout": 3600,
"acSuspendBehavior": 0,
"acProfileName": "",
"batteryMonitorTimeout": 900,
"batteryLockTimeout": 600,
"batterySuspendTimeout": 1200,
"batterySuspendBehavior": 0,
"batteryProfileName": "0",
"lockBeforeSuspend": true,
"loginctlLockIntegration": true,
"fadeToLockEnabled": true,
"fadeToLockGracePeriod": 5,
"launchPrefix": "",
"brightnessDevicePins": {},
"wifiNetworkPins": {},
"bluetoothDevicePins": {},
"audioInputDevicePins": {},
"audioOutputDevicePins": {},
"gtkThemingEnabled": false,
"qtThemingEnabled": false,
"syncModeWithPortal": true,
"terminalsAlwaysDark": true,
"showDock": false,
"dockAutoHide": false,
"dockGroupByApp": true,
"dockOpenOnOverview": false,
"dockPosition": 1,
"dockSpacing": 4,
"dockBottomGap": 0,
"dockMargin": 0,
"dockIconSize": 40,
"dockIndicatorStyle": "circle",
"dockBorderEnabled": false,
"dockBorderColor": "surfaceText",
"dockBorderOpacity": 1,
"dockBorderThickness": 1,
"notificationOverlayEnabled": false,
"modalDarkenBackground": true,
"lockScreenShowPowerActions": true,
"enableFprint": false,
"maxFprintTries": 15,
"lockScreenActiveMonitor": "all",
"lockScreenInactiveColor": "#000000",
"hideBrightnessSlider": false,
"notificationTimeoutLow": 5000,
"notificationTimeoutNormal": 5000,
"notificationTimeoutCritical": 0,
"notificationPopupPosition": 0,
"osdAlwaysShowValue": true,
"osdPosition": 5,
"osdVolumeEnabled": true,
"osdMediaVolumeEnabled": true,
"osdBrightnessEnabled": true,
"osdIdleInhibitorEnabled": true,
"osdMicMuteEnabled": true,
"osdCapsLockEnabled": true,
"osdPowerProfileEnabled": true,
"osdAudioOutputEnabled": true,
"powerActionConfirm": true,
"powerActionHoldDuration": 0.5,
"powerMenuActions": ["reboot", "logout", "poweroff", "lock", "suspend", "restart"],
"powerMenuDefaultAction": "logout",
"powerMenuGridLayout": false,
"customPowerActionLock": "",
"customPowerActionLogout": "",
"customPowerActionSuspend": "",
"customPowerActionHibernate": "",
"customPowerActionReboot": "",
"customPowerActionPowerOff": "",
"updaterUseCustomCommand": false,
"updaterCustomCommand": "",
"updaterTerminalAdditionalParams": "",
"displayNameMode": "system",
"screenPreferences": {},
"showOnLastDisplay": {},
"barConfigs": [
{
"id": "default",
"name": "Main Bar",
"enabled": true,
"position": 0,
"screenPreferences": ["all"],
"showOnLastDisplay": true,
"leftWidgets": [
{
"id": "launcherButton",
"enabled": true
},
{
"id": "clock",
"enabled": true
},
{
"id": "cpuUsage",
"enabled": true,
"minimumWidth": true
},
{
"id": "memUsage",
"enabled": true,
"minimumWidth": true
},
{
"id": "network_speed_monitor",
"enabled": true
}
],
"centerWidgets": [
{
"id": "music",
"enabled": true
},
{
"id": "runningApps",
"enabled": true
}
],
"rightWidgets": [
{
"id": "clipboard",
"enabled": true
},
{
"id": "notificationButton",
"enabled": true
},
{
"id": "battery",
"enabled": true
},
{
"id": "systemTray",
"enabled": true
},
{
"id": "controlCenterButton",
"enabled": true
}
],
"spacing": 4,
"innerPadding": 4,
"bottomGap": 0,
"transparency": 1,
"widgetTransparency": 1,
"squareCorners": false,
"noBackground": false,
"gothCornersEnabled": false,
"gothCornerRadiusOverride": false,
"gothCornerRadiusValue": 12,
"borderEnabled": false,
"borderColor": "surfaceText",
"borderOpacity": 1,
"borderThickness": 1,
"widgetOutlineEnabled": false,
"widgetOutlineColor": "primary",
"widgetOutlineOpacity": 1,
"widgetOutlineThickness": 1,
"fontScale": 1,
"autoHide": false,
"autoHideDelay": 250,
"openOnOverview": true,
"visible": true,
"popupGapsAuto": true,
"popupGapsManual": 4,
"maximizeDetection": true
}
],
"configVersion": 2
}
+2 -1
View File
@@ -47,7 +47,8 @@ in
{ {
home.packages = [ home.packages = [
pkgs.zed-editor pkgs.zed-editor
code-cursor pkgs-master.code-cursor
pkgs-master.antigravity-fhs
]; ];
programs.vscode = { programs.vscode = {
-49
View File
@@ -1,49 +0,0 @@
{
pkgs,
lib,
...
}:
{
# Adjust the color temperature(& brightness) of your screen according to
# your surroundings. This may help your eyes hurt less if you are
# working in front of the screen at night.
#
# works fine with both x11 & wayland(hyprland)
#
# https://gitlab.com/chinstrap/gammastep
services.gammastep = {
enable = true;
# add a gammastep icon in the system tray
# has problem with wayland, so disable it
tray = false;
temperature = {
day = 6000;
night = 4500;
};
# https://gitlab.com/chinstrap/gammastep/-/blob/master/gammastep.conf.sample?ref_type=heads
settings = {
general = {
fade = "1"; # gradually apply the new screen temperature/brightness over a couple of seconds.
# it is a fake brightness adjustment obtained by manipulating the gamma ramps,
# which means that it does not reduce the backlight of the screen.
# Preferably only use it if your normal backlight adjustment is too coarse-grained.
#
# brightness-day = "1.3";
# brightness-night = "1";
location-provider = "manual";
# by default, Redshift will use the current elevation of the sun
# to determine whether it is daytime, night or in transition (dawn/dusk).
# dawn-time = "6:00-8:45";
# dusk-time = "18:35-20:15";
};
manual = {
# China, Shenzhen
lat = "22.5"; # latitude
lon = "114.1"; # longitude
};
};
};
}
+8
View File
@@ -0,0 +1,8 @@
# fcitx5 - IME
## Available Configurations
- `profile` → Symlink will be created at: `~/.config/fcitx5/profile`
- `config1.db` (Mozc config) → Symlink will be created at: `~/.config/mozc/config1.db`
- Main changes from the defaults: use half-width for all alphabets, numbers, and punctuation.
- https://github.com/google/mozc/blob/2.30.5544.102/docs/configurations.md
+6 -2
View File
@@ -1,4 +1,4 @@
{ pkgs, ... }: { config, pkgs, ... }:
{ {
xdg.configFile = { xdg.configFile = {
"fcitx5/profile" = { "fcitx5/profile" = {
@@ -7,6 +7,8 @@
# so we need to force replace it in every rebuild to avoid file conflict. # so we need to force replace it in every rebuild to avoid file conflict.
force = true; force = true;
}; };
"mozc/config1.db".source =
config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/nix-config/home/linux/gui/base/fcitx5/mozc-config1.db";
}; };
i18n.inputMethod = { i18n.inputMethod = {
@@ -22,7 +24,9 @@
# fcitx5-chinese-addons # we use rime instead # fcitx5-chinese-addons # we use rime instead
# Japanese # Japanese
fcitx5-mozc-ut # ctrl-i / F7 - convert to takakana
# ctrl-u / F6 - convert to hiragana
fcitx5-mozc-ut # Moze with UT dictionary
]; ];
}; };
} }
Binary file not shown.
+9
View File
@@ -0,0 +1,9 @@
{
...
}:
{
xdg.configFile."hypr/hypridle.conf".source = ./hypridle.conf;
# Hyprland idle daemon
services.hypridle.enable = true;
}
@@ -1,7 +1,7 @@
general { general {
lock_cmd = pidof swaylock || swaylock # avoid starting multiple instances lock_cmd = noctalia-shell ipc call lockScreen lock # avoid starting multiple instances
before_sleep_cmd = loginctl lock-session # lock before suspend before_sleep_cmd = loginctl lock-session # lock before suspend
after_sleep_cmd = hyprctl dispatch dpms on # resume dpms after suspend # after_sleep_cmd = hyprctl dispatch dpms on # resume dpms after suspend
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests
} }
@@ -20,16 +20,14 @@ listener {
# } # }
listener { listener {
timeout = 1600 # 20 minutes timeout = 1200 # 20 minutes
on-timeout = pidof swaylock || swaylock # lock screen on-timeout = noctalia-shell ipc call lockScreen lock # lock screen
on-resume = hyprctl dispatch dpms on # monitor wake up
} }
listener { # listener {
timeout = 1660 # 31 minutes # timeout = 1660 # 31 minutes
on-timeout = hyprctl dispatch dpms off # screen off # on-resume = brightnessctl -r # monitor wake up & screen on
on-resume = hyprctl dispatch dpms on && brightnessctl -r # monitor wake up & screen on # }
}
# listener { # listener {
# timeout = 1800 # 30min # timeout = 1800 # 30min
+1 -1
View File
@@ -18,7 +18,7 @@
vulkan-tools vulkan-tools
mesa-demos mesa-demos
nvitop nvitop
(pkgs-x64.zoom-us.override { hyprlandXdgDesktopPortalSupport = true; }) (pkgs-x64.zoom-us)
]; ];
programs.mpv = { programs.mpv = {
+57
View File
@@ -0,0 +1,57 @@
{
lib,
config,
pkgs,
pkgs-patched,
wallpapers,
...
}:
let
package = pkgs-patched.noctalia-shell;
in
{
# home.packages = [
# package
# pkgs.qt6Packages.qt6ct # for icon theme
# pkgs.app2unit # Launch Desktop Entries (or arbitrary commands) as Systemd user units
# ]
# ++ (lib.optionals pkgs.stdenv.isx86_64 [
# pkgs.gpu-screen-recorder # recoding screen
# ]);
#
# home.file."Pictures/Wallpapers".source = wallpapers;
#
# xdg.configFile =
# let
# mkSymlink = config.lib.file.mkOutOfStoreSymlink;
# confPath = "${config.home.homeDirectory}/nix-config/home/linux/gui/base/noctalia";
# in
# {
# "noctalia/settings.json".source = mkSymlink "${confPath}/settings.json";
# "qt6ct/qt6ct.conf".source = mkSymlink "${confPath}/qt6ct.conf";
# };
#
# systemd.user.services.noctalia-shell = {
# Unit = {
# Description = "Noctalia Shell - Wayland desktop shell";
# Documentation = "https://docs.noctalia.dev/docs";
# PartOf = [ config.wayland.systemd.target ];
# After = [ config.wayland.systemd.target ];
# };
#
# Service = {
# ExecStart = lib.getExe package;
# Restart = "on-failure";
#
# Environment = [
# "QT_QPA_PLATFORM=wayland;xcb"
# "QT_QPA_PLATFORMTHEME=qt6ct"
# "QT_AUTO_SCREEN_SCALE_FACTOR=1"
# ];
# };
#
# Install.WantedBy = [ config.wayland.systemd.target ];
# };
}
+31
View File
@@ -0,0 +1,31 @@
[Appearance]
custom_palette=false
icon_theme=Papirus
standard_dialogs=default
style=Fusion
[Fonts]
fixed="Maple Mono NF CN,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular"
general="Maple Mono NF CN,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular"
[Interface]
activate_item_on_single_click=1
buttonbox_layout=0
cursor_flash_time=1000
dialog_buttons_have_icons=1
double_click_interval=400
gui_effects=@Invalid()
keyboard_scheme=2
menus_have_icons=true
show_shortcuts_in_context_menus=true
stylesheets=@Invalid()
toolbutton_style=4
underline_shortcut=1
wheel_scroll_lines=3
[SettingsWindow]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3H\0\0\x3\xf5\0\0\0\0\0\0\0\0\0\0\x3H\0\0\x3\xf5\0\0\0\0\0\0\0\0\x6\xab\0\0\0\0\0\0\0\0\0\0\x3H\0\0\x3\xf5)
[Troubleshooting]
force_raster_widgets=1
ignored_applications=@Invalid()
+562
View File
@@ -0,0 +1,562 @@
{
"appLauncher": {
"customLaunchPrefix": "",
"customLaunchPrefixEnabled": false,
"enableClipPreview": true,
"enableClipboardHistory": true,
"iconMode": "native",
"ignoreMouseInput": false,
"pinnedExecs": [],
"position": "center",
"screenshotAnnotationTool": "",
"showCategories": true,
"showIconBackground": true,
"sortByMostUsed": true,
"terminalCommand": "xterm -e",
"useApp2Unit": true,
"viewMode": "list"
},
"audio": {
"cavaFrameRate": 30,
"externalMixer": "pwvucontrol || pavucontrol",
"mprisBlacklist": [],
"preferredPlayer": "",
"visualizerType": "linear",
"volumeOverdrive": false,
"volumeStep": 1
},
"bar": {
"backgroundOpacity": 0.2,
"capsuleOpacity": 1,
"density": "comfortable",
"exclusive": true,
"floating": false,
"marginHorizontal": 0.25,
"marginVertical": 0.25,
"monitors": [],
"outerCorners": true,
"position": "top",
"showCapsule": true,
"showOutline": false,
"useSeparateOpacity": true,
"widgets": {
"center": [
{
"characterCount": 2,
"colorizeIcons": false,
"enableScrollWheel": true,
"followFocusedScreen": false,
"groupedBorderOpacity": 1,
"hideUnoccupied": false,
"iconScale": 0.8,
"id": "Workspace",
"labelMode": "index",
"showApplications": false,
"showLabelsOnlyWhenOccupied": true,
"unfocusedIconsOpacity": 1
}
],
"left": [
{
"icon": "rocket",
"id": "Launcher",
"usePrimaryColor": false
},
{
"customFont": "",
"formatHorizontal": "HH:mm ddd, MMM dd",
"formatVertical": "HH mm - dd MM",
"id": "Clock",
"tooltipFormat": "HH:mm ddd, MMM dd",
"useCustomFont": false,
"usePrimaryColor": false
},
{
"compactMode": false,
"diskPath": "/persistent",
"id": "SystemMonitor",
"showCpuTemp": false,
"showCpuUsage": true,
"showDiskUsage": true,
"showGpuTemp": false,
"showLoadAverage": true,
"showMemoryAsPercent": true,
"showMemoryUsage": true,
"showNetworkStats": true,
"useMonospaceFont": true,
"usePrimaryColor": false
},
{
"colorizeIcons": false,
"hideMode": "hidden",
"id": "ActiveWindow",
"maxWidth": 145,
"scrollingMode": "hover",
"showIcon": true,
"useFixedWidth": false
},
{
"hideMode": "hidden",
"hideWhenIdle": false,
"id": "MediaMini",
"maxWidth": 145,
"scrollingMode": "hover",
"showAlbumArt": false,
"showArtistFirst": true,
"showProgressRing": true,
"showVisualizer": false,
"useFixedWidth": false,
"visualizerType": "linear"
}
],
"right": [
{
"id": "ScreenRecorder"
},
{
"hideWhenZero": false,
"id": "NotificationHistory",
"showUnreadBadge": true
},
{
"deviceNativePath": "",
"displayMode": "alwaysShow",
"hideIfNotDetected": true,
"id": "Battery",
"showNoctaliaPerformance": true,
"showPowerProfiles": true,
"warningThreshold": 30
},
{
"displayMode": "alwaysShow",
"id": "Volume"
},
{
"displayMode": "alwaysShow",
"id": "Brightness"
},
{
"blacklist": [],
"colorizeIcons": false,
"drawerEnabled": true,
"hidePassive": false,
"id": "Tray",
"pinned": []
},
{
"colorizeDistroLogo": false,
"colorizeSystemIcon": "none",
"customIconPath": "",
"enableColorization": false,
"icon": "noctalia",
"id": "ControlCenter",
"useDistroLogo": true
}
]
}
},
"brightness": {
"brightnessStep": 3,
"enableDdcSupport": false,
"enforceMinimum": true
},
"calendar": {
"cards": [
{
"enabled": true,
"id": "calendar-header-card"
},
{
"enabled": true,
"id": "calendar-month-card"
},
{
"enabled": true,
"id": "timer-card"
},
{
"enabled": true,
"id": "weather-card"
}
]
},
"colorSchemes": {
"darkMode": true,
"generateTemplatesForPredefined": true,
"manualSunrise": "06:30",
"manualSunset": "18:30",
"matugenSchemeType": "scheme-rainbow",
"predefinedScheme": "Noctalia (default)",
"schedulingMode": "off",
"useWallpaperColors": true
},
"controlCenter": {
"cards": [
{
"enabled": true,
"id": "profile-card"
},
{
"enabled": true,
"id": "shortcuts-card"
},
{
"enabled": true,
"id": "audio-card"
},
{
"enabled": true,
"id": "brightness-card"
},
{
"enabled": true,
"id": "weather-card"
},
{
"enabled": true,
"id": "media-sysmon-card"
}
],
"diskPath": "/persistent",
"position": "close_to_bar_button",
"shortcuts": {
"left": [
{
"id": "WiFi"
},
{
"id": "Bluetooth"
},
{
"id": "ScreenRecorder"
},
{
"id": "WallpaperSelector"
}
],
"right": [
{
"id": "Notifications"
},
{
"id": "PowerProfile"
},
{
"id": "KeepAwake"
},
{
"id": "NightLight"
}
]
}
},
"desktopWidgets": {
"enabled": true,
"gridSnap": true,
"monitorWidgets": [
{
"name": "eDP-1",
"widgets": [
{
"clockStyle": "digital",
"customFont": "",
"format": "HH:mm\\nd MMMM yyyy",
"id": "Clock",
"roundedCorners": true,
"scale": 0.7378548922663623,
"showBackground": true,
"useCustomFont": false,
"usePrimaryColor": false,
"x": 92,
"y": 161
},
{
"hideMode": "visible",
"id": "MediaPlayer",
"roundedCorners": true,
"scale": 1.1501312913284876,
"showAlbumArt": true,
"showBackground": true,
"showButtons": true,
"showVisualizer": true,
"visualizerType": "linear",
"x": 92,
"y": 299
},
{
"id": "Weather",
"scale": 1.339282355295889,
"showBackground": true,
"x": 230,
"y": 161
}
]
}
]
},
"dock": {
"animationSpeed": 1,
"backgroundOpacity": 1,
"colorizeIcons": false,
"deadOpacity": 0.6,
"displayMode": "auto_hide",
"enabled": false,
"floatingRatio": 1,
"inactiveIndicators": false,
"monitors": [],
"onlySameOutput": true,
"pinnedApps": [],
"pinnedStatic": false,
"size": 1
},
"general": {
"allowPanelsOnScreenWithoutBar": true,
"animationDisabled": false,
"animationSpeed": 1,
"avatarImage": "~/nix-config/_img/myself.jpg",
"boxRadiusRatio": 1,
"compactLockScreen": false,
"dimmerOpacity": 0.2,
"enableShadows": true,
"forceBlackScreenCorners": false,
"iRadiusRatio": 1,
"language": "",
"lockOnSuspend": true,
"radiusRatio": 1,
"scaleRatio": 1,
"screenRadiusRatio": 1,
"shadowDirection": "bottom_right",
"shadowOffsetX": 2,
"shadowOffsetY": 3,
"showHibernateOnLockScreen": false,
"showScreenCorners": false,
"showSessionButtonsOnLockScreen": true
},
"hooks": {
"darkModeChange": "",
"enabled": false,
"performanceModeDisabled": "",
"performanceModeEnabled": "",
"screenLock": "",
"screenUnlock": "",
"wallpaperChange": ""
},
"location": {
"analogClockInCalendar": false,
"firstDayOfWeek": 1,
"name": "Changsha",
"showCalendarEvents": true,
"showCalendarWeather": true,
"showWeekNumberInCalendar": false,
"use12hourFormat": false,
"useFahrenheit": false,
"weatherEnabled": true,
"weatherShowEffects": true
},
"network": {
"bluetoothDetailsViewMode": "grid",
"bluetoothHideUnnamedDevices": false,
"bluetoothRssiPollIntervalMs": 10000,
"bluetoothRssiPollingEnabled": false,
"wifiDetailsViewMode": "grid",
"wifiEnabled": true
},
"nightLight": {
"autoSchedule": true,
"dayTemp": "6500",
"enabled": true,
"forced": true,
"manualSunrise": "06:30",
"manualSunset": "18:30",
"nightTemp": "4000"
},
"notifications": {
"backgroundOpacity": 1,
"criticalUrgencyDuration": 15,
"enableKeyboardLayoutToast": true,
"enabled": true,
"location": "top_right",
"lowUrgencyDuration": 3,
"monitors": [],
"normalUrgencyDuration": 8,
"overlayLayer": true,
"respectExpireTimeout": false,
"saveToHistory": {
"critical": true,
"low": true,
"normal": true
},
"sounds": {
"criticalSoundFile": "",
"enabled": true,
"excludedApps": "discord,firefox,chrome,chromium,edge",
"lowSoundFile": "",
"normalSoundFile": "",
"separateSounds": false,
"volume": 0.5
}
},
"osd": {
"autoHideMs": 2000,
"backgroundOpacity": 1,
"enabled": true,
"enabledTypes": [0, 1, 4, 3],
"location": "top_right",
"monitors": [],
"overlayLayer": true
},
"screenRecorder": {
"audioCodec": "opus",
"audioSource": "default_output",
"colorRange": "limited",
"copyToClipboard": false,
"directory": "~/Videos",
"frameRate": 30,
"quality": "high",
"showCursor": true,
"videoCodec": "h264",
"videoSource": "portal"
},
"sessionMenu": {
"countdownDuration": 10000,
"enableCountdown": true,
"largeButtonsLayout": "grid",
"largeButtonsStyle": true,
"position": "center",
"powerOptions": [
{
"action": "lock",
"command": "",
"countdownEnabled": true,
"enabled": true
},
{
"action": "suspend",
"command": "",
"countdownEnabled": true,
"enabled": true
},
{
"action": "hibernate",
"command": "",
"countdownEnabled": true,
"enabled": true
},
{
"action": "reboot",
"command": "",
"countdownEnabled": true,
"enabled": true
},
{
"action": "logout",
"command": "",
"countdownEnabled": true,
"enabled": true
},
{
"action": "shutdown",
"command": "",
"countdownEnabled": true,
"enabled": true
}
],
"showHeader": true,
"showNumberLabels": true
},
"settingsVersion": 37,
"systemMonitor": {
"cpuCriticalThreshold": 95,
"cpuPollingInterval": 10000,
"cpuWarningThreshold": 80,
"criticalColor": "",
"diskCriticalThreshold": 90,
"diskPollingInterval": 250,
"diskWarningThreshold": 80,
"enableDgpuMonitoring": false,
"externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor",
"gpuCriticalThreshold": 90,
"gpuPollingInterval": 3000,
"gpuWarningThreshold": 80,
"loadAvgPollingInterval": 3000,
"memCriticalThreshold": 90,
"memPollingInterval": 250,
"memWarningThreshold": 80,
"networkPollingInterval": 3000,
"tempCriticalThreshold": 90,
"tempPollingInterval": 3000,
"tempWarningThreshold": 80,
"useCustomColors": false,
"warningColor": ""
},
"templates": {
"alacritty": false,
"cava": false,
"code": false,
"discord": false,
"emacs": false,
"enableUserTemplates": false,
"foot": false,
"fuzzel": false,
"ghostty": false,
"gtk": false,
"helix": false,
"hyprland": false,
"kcolorscheme": false,
"kitty": false,
"mango": false,
"niri": false,
"pywalfox": false,
"qt": false,
"spicetify": false,
"telegram": false,
"vicinae": false,
"walker": false,
"wezterm": false,
"yazi": false,
"zed": false
},
"ui": {
"boxBorderEnabled": false,
"fontDefault": "Maple Mono NF CN",
"fontDefaultScale": 1,
"fontFixed": "Maple Mono NF CN",
"fontFixedScale": 1,
"panelBackgroundOpacity": 0.85,
"panelsAttachedToBar": true,
"settingsPanelMode": "attached",
"tooltipsEnabled": true
},
"wallpaper": {
"directory": "~/Pictures/Wallpapers",
"enableMultiMonitorDirectories": false,
"enabled": true,
"fillColor": "#000000",
"fillMode": "crop",
"hideWallpaperFilenames": false,
"monitorDirectories": [],
"overviewEnabled": true,
"panelPosition": "follow_bar",
"randomEnabled": true,
"randomIntervalSec": 600,
"recursiveSearch": false,
"setWallpaperOnAllMonitors": true,
"solidColor": "#1a1a2e",
"transitionDuration": 1500,
"transitionEdgeSmoothness": 0.05,
"transitionType": "random",
"useSolidColor": false,
"useWallhaven": false,
"wallhavenApiKey": "",
"wallhavenCategories": "111",
"wallhavenOrder": "desc",
"wallhavenPurity": "100",
"wallhavenQuery": "",
"wallhavenRatios": "",
"wallhavenResolutionHeight": "",
"wallhavenResolutionMode": "atleast",
"wallhavenResolutionWidth": "",
"wallhavenSorting": "relevance",
"wallpaperChangeMode": "random"
}
}
-41
View File
@@ -1,41 +0,0 @@
{
pkgs,
config,
lib,
wallpapers,
...
}:
{
systemd.user.services.wallpaper = {
Unit = {
Description = "Wallpaper Switcher daemon";
After = [
"graphical-session.target"
];
Wants = [ "graphical-session-pre.target" ];
};
Install.WantedBy = [ "graphical-session.target" ];
Service = {
ExecStart = lib.getExe (
pkgs.writeShellApplication {
name = "wallpaper";
runtimeInputs = with pkgs; [
procps
feh
swaybg
python3
];
text = ''
export WALLPAPERS_DIR="${wallpapers}"
export WALLPAPERS_STATE_FILEPATH="${config.xdg.stateHome}/wallpaper-switcher/switcher_state"
export WALLPAPER_WAIT_MIN=60
export WALLPAPER_WAIT_MAX=180
exec ${./wallpaper-switcher.py}
'';
}
);
RestartSec = 3;
Restart = "on-failure";
};
};
}
@@ -1,169 +0,0 @@
#!/usr/bin/env python3
"""
This script will randomly select a wallpaper from the wallpapers directory.
It will skip the last wallpaper used, so that you don't get the same wallpaper.
It will also set the wallpaper using `feh` for X11, or `swaybg` for Wayland.
Maintainer: ryan4yin [xiaoyin_c@qq.com]
"""
import os
import time
import random
import json
from pathlib import Path
from typing import Union
import subprocess
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class WallpaperSwitcher:
def __init__(
self,
wait_min,
wait_max,
wallpapers_dir: Path,
state_filepath: Path,
image_extensions: Union[tuple, list],
) -> None:
self.wallpapers_dir = wallpapers_dir
self.image_extensions = image_extensions
self.state_filepath = state_filepath
self.wait_min = wait_min
self.wait_max = wait_max
# initialize the state file
self.state_filepath.parent.mkdir(parents=True, exist_ok=True)
self.current_state = self.state_filepath.open("a+", encoding="utf-8")
self.current_wallpaper_list = list()
def run(self):
"""
Iterate on all wallpapers in the wallpapers directory, cycling through them in a random order.
"""
self.initialize_state()
while True:
for i, w in enumerate(self.current_wallpaper_list):
if i < self.current_wallpaper_index:
continue
logger.info(
f"Setting wallpaper {i+1}/{len(self.current_wallpaper_list)}: {w}"
)
self.set_wallpaper(w)
# update the state
self.current_wallpaper_index = i
self.save_state()
wait_time = random.randint(self.wait_min, self.wait_max)
logger.info(f"Waiting {wait_time} seconds...")
time.sleep(wait_time)
# reset the state
self.reset_state()
def save_state(self):
wallpaper_list = [w.as_posix() for w in self.current_wallpaper_list]
state = {
"current_wallpaper_list": wallpaper_list,
"current_wallpaper_index": self.current_wallpaper_index,
}
self.current_state.truncate(0)
self.current_state.write(json.dumps(state, indent=4))
self.current_state.flush()
def initialize_state(self):
self.current_state.seek(0)
data = self.current_state.read()
if not data:
logger.info("No state found, resetting...")
self.reset_state()
else:
logger.info("State found, reloading...")
state = json.loads(data)
wallpapers = [Path(w) for w in state["current_wallpaper_list"]]
self.current_wallpaper_list = wallpapers
self.current_wallpaper_index = state["current_wallpaper_index"]
def reset_state(self):
logger.info(f"Rescanning & shuffle wallpapers in {self.wallpapers_dir} ...")
wallpapers = list(
filter(
lambda x: x.suffix in self.image_extensions,
self.wallpapers_dir.iterdir(),
)
)
random.shuffle(wallpapers)
self.current_wallpaper_list = wallpapers
self.current_wallpaper_index = 0
def set_wallpaper(self, path: Path):
# check if we are running under x11 or wayland
if (
"WAYLAND_DISPLAY" in os.environ
or os.environ.get("XDG_SESSION_TYPE") == "wayland"
):
self.set_wallpaper_wayland(path)
else:
self.set_wallpaper_x11(path)
def set_wallpaper_x11(self, path: Path):
subprocess.run(["feh", "--bg-fill", path])
def set_wallpaper_wayland(self, path: Path):
# find all swaybg processes
swaybg_pids = subprocess.run(
["pgrep", "-f", "swaybg"], stdout=subprocess.PIPE
).stdout.decode("utf-8")
# run swaybg in the background, and make it running even after the parent process exits
subprocess.Popen(
["swaybg", "--output", "*", "--mode", "fill", "--image", path],
start_new_session=True,
)
time.sleep(1)
# kill all old swaybg processes
for pid in swaybg_pids.splitlines():
try:
os.kill(int(pid), 9)
except ProcessLookupError:
pass
def main():
wallpapers_dir = os.getenv("WALLPAPERS_DIR")
state_filepath = os.getenv("WALLPAPERS_STATE_FILEPATH")
if not wallpapers_dir:
raise Exception("WALLPAPERS_DIR not set")
if not state_filepath:
raise Exception("WALLPAPERS_STATE_FILEPATH not set")
image_postfix = (
".jpg",
".jpeg",
".png",
# ".gif",
# ".webp"
)
wait_min = int(os.getenv("WALLPAPER_WAIT_MIN", 60))
wait_max = int(os.getenv("WALLPAPER_WAIT_MAX", 300))
wallpaper_switcher = WallpaperSwitcher(
wait_min,
wait_max,
Path(wallpapers_dir).expanduser(),
Path(state_filepath).expanduser(),
image_postfix,
)
wallpaper_switcher.run()
if __name__ == "__main__":
main()
-106
View File
@@ -1,106 +0,0 @@
# XDG stands for "Cross-Desktop Group", with X used to mean "cross".
# It's a bunch of specifications from freedesktop.org intended to standardize desktops and
# other GUI applications on various systems (primarily Unix-like) to be interoperable:
# https://www.freedesktop.org/wiki/Specifications/
{
config,
pkgs,
...
}:
{
home.packages = with pkgs; [
xdg-utils # provides cli tools such as `xdg-mime` `xdg-open`
xdg-user-dirs
];
xdg.configFile."mimeapps.list".force = true;
xdg = {
enable = true;
cacheHome = "${config.home.homeDirectory}/.cache";
configHome = "${config.home.homeDirectory}/.config";
dataHome = "${config.home.homeDirectory}/.local/share";
stateHome = "${config.home.homeDirectory}/.local/state";
# manage $XDG_CONFIG_HOME/mimeapps.list
# xdg search all desktop entries from $XDG_DATA_DIRS, check it by command:
# echo $XDG_DATA_DIRS
# the system-level desktop entries can be list by command:
# ls -l /run/current-system/sw/share/applications/
# the user-level desktop entries can be list by command(user ryan):
# ls /etc/profiles/per-user/ryan/share/applications/
mimeApps = {
enable = true;
# let `xdg-open` to open the url with the correct application.
defaultApplications =
let
browser = [
"google-chrome.desktop"
"firefox.desktop"
];
editor = [
"nvim.desktop"
"Helix.desktop"
"code.desktop"
"code-insiders.desktop"
];
in
{
"application/json" = browser;
"application/pdf" = browser; # TODO: pdf viewer
"text/html" = browser;
"text/xml" = browser;
"text/plain" = editor;
"application/xml" = browser;
"application/xhtml+xml" = browser;
"application/xhtml_xml" = browser;
"application/rdf+xml" = browser;
"application/rss+xml" = browser;
"application/x-extension-htm" = browser;
"application/x-extension-html" = browser;
"application/x-extension-shtml" = browser;
"application/x-extension-xht" = browser;
"application/x-extension-xhtml" = browser;
"application/x-wine-extension-ini" = editor;
# define default applications for some url schemes.
"x-scheme-handler/about" = browser; # open `about:` url with `browser`
"x-scheme-handler/ftp" = browser; # open `ftp:` url with `browser`
"x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser;
# https://github.com/microsoft/vscode/issues/146408
"x-scheme-handler/vscode" = [ "code-url-handler.desktop" ]; # open `vscode://` url with `code-url-handler.desktop`
"x-scheme-handler/vscode-insiders" = [ "code-insiders-url-handler.desktop" ]; # open `vscode-insiders://` url with `code-insiders-url-handler.desktop`
"x-scheme-handler/zoommtg" = [ "Zoom.desktop" ];
# all other unknown schemes will be opened by this default application.
# "x-scheme-handler/unknown" = editor;
"x-scheme-handler/tg" = [ "org.telegram.desktop.desktop " ];
"audio/*" = [ "mpv.desktop" ];
"video/*" = [ "mpv.desktop" ];
"image/*" = [ "imv-dir.desktop" ];
"image/gif" = [ "imv-dir.desktop" ];
"image/jpeg" = [ "imv-dir.desktop" ];
"image/png" = [ "imv-dir.desktop" ];
"image/webp" = [ "imv-dir.desktop" ];
"inode/directory" = [ "yazi.desktop" ];
};
associations.removed = {
# ......
};
};
userDirs = {
enable = true;
createDirectories = true;
extraConfig = {
XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots";
};
};
};
}
+23
View File
@@ -0,0 +1,23 @@
{ pkgs, lib, ... }:
{
# XDG autostart entries - ensures apps start after portal services are ready
xdg.autostart.enable = true;
# This fixes nixpak sandboxed apps (like firefox) accessing mapped folders correctly
xdg.autostart.entries = [
"${pkgs.foot}/share/applications/foot.desktop"
"${pkgs.alacritty}/share/applications/Alacritty.desktop"
"${pkgs.ghostty}/share/applications/com.mitchellh.ghostty.desktop"
"${pkgs.clash-verge-rev}/share/applications/clash-verge.desktop"
# nixpaks
"${pkgs.nixpaks.firefox}/share/applications/org.mozilla.firefox.desktop"
"${pkgs.nixpaks.telegram-desktop}/share/applications/org.telegram.desktop.desktop"
]
++ (
if pkgs.stdenv.isx86_64 then
[ "${pkgs.google-chrome}/share/applications/google-chrome.desktop" ]
else
[ "${pkgs.chromium}/share/applications/chromium-browser.desktop" ]
);
}
+35
View File
@@ -0,0 +1,35 @@
# XDG stands for "Cross-Desktop Group", with X used to mean "cross".
# It's a bunch of specifications from freedesktop.org intended to standardize desktops and
# other GUI applications on various systems (primarily Unix-like) to be interoperable:
# https://www.freedesktop.org/wiki/Specifications/
{
mylib,
config,
pkgs,
...
}:
{
imports = mylib.scanPaths ./.;
home.packages = with pkgs; [
xdg-utils # provides cli tools such as `xdg-mime` `xdg-open`
xdg-user-dirs
];
xdg = {
enable = true;
cacheHome = "${config.home.homeDirectory}/.cache";
configHome = "${config.home.homeDirectory}/.config";
dataHome = "${config.home.homeDirectory}/.local/share";
stateHome = "${config.home.homeDirectory}/.local/state";
userDirs = {
enable = true;
createDirectories = true;
extraConfig = {
XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots";
};
};
};
}
+76
View File
@@ -0,0 +1,76 @@
{
xdg.configFile."mimeapps.list".force = true;
# manage $XDG_CONFIG_HOME/mimeapps.list
# xdg search all desktop entries from $XDG_DATA_DIRS, check it by command:
# echo $XDG_DATA_DIRS
# the system-level desktop entries can be list by command:
# ls -l /run/current-system/sw/share/applications/
# the user-level desktop entries can be list by command(user ryan):
# ls /etc/profiles/per-user/ryan/share/applications/
xdg.mimeApps = {
enable = true;
# let `xdg-open` to open the url with the correct application.
defaultApplications =
let
browser = [
"google-chrome.desktop"
"firefox.desktop"
];
editor = [
"nvim.desktop"
"Helix.desktop"
"code.desktop"
"code-insiders.desktop"
];
in
{
"application/json" = browser;
"application/pdf" = browser; # TODO: pdf viewer
"text/html" = browser;
"text/xml" = browser;
"text/plain" = editor;
"application/xml" = browser;
"application/xhtml+xml" = browser;
"application/xhtml_xml" = browser;
"application/rdf+xml" = browser;
"application/rss+xml" = browser;
"application/x-extension-htm" = browser;
"application/x-extension-html" = browser;
"application/x-extension-shtml" = browser;
"application/x-extension-xht" = browser;
"application/x-extension-xhtml" = browser;
"application/x-wine-extension-ini" = editor;
# define default applications for some url schemes.
"x-scheme-handler/about" = browser; # open `about:` url with `browser`
"x-scheme-handler/ftp" = browser; # open `ftp:` url with `browser`
"x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser;
# https://github.com/microsoft/vscode/issues/146408
"x-scheme-handler/vscode" = [ "code-url-handler.desktop" ]; # open `vscode://` url with `code-url-handler.desktop`
"x-scheme-handler/vscode-insiders" = [ "code-insiders-url-handler.desktop" ]; # open `vscode-insiders://` url with `code-insiders-url-handler.desktop`
"x-scheme-handler/zoommtg" = [ "Zoom.desktop" ];
# all other unknown schemes will be opened by this default application.
# "x-scheme-handler/unknown" = editor;
"x-scheme-handler/tg" = [ "org.telegram.desktop.desktop " ];
"audio/*" = [ "mpv.desktop" ];
"video/*" = [ "mpv.desktop" ];
"image/*" = [ "imv-dir.desktop" ];
"image/gif" = [ "imv-dir.desktop" ];
"image/jpeg" = [ "imv-dir.desktop" ];
"image/png" = [ "imv-dir.desktop" ];
"image/webp" = [ "imv-dir.desktop" ];
"inode/directory" = [ "yazi.desktop" ];
};
associations.removed = {
# ......
};
};
}
-9
View File
@@ -1,9 +0,0 @@
# Hyprland
## Troubleshooting
show hyprland's log:
```bash
hyprctl rollinglog
```
-22
View File
@@ -1,22 +0,0 @@
#-- Startup ----------------------------------------------------
## Fix anyrun
## https://github.com/anyrun-org/anyrun/issues/153
exec-once = ln -s "$XDG_RUNTIME_DIR/hypr" /tmp/hypr
## Launch my daily-used apps at startup
# Terminals
exec-once = foot
exec-once = alacritty
# Network
exec-once = clash-verge &
# Browsers
exec-once = firefox
exec-once = google-chrome-stable
exec-once = chromium-browser
# Chat
exec-once = Telegram
# Switch to Terminals & Browsers
exec-once = sleep 3; hyprctl dispatch workspace 1
exec-once = sleep 3; hyprctl dispatch workspace 4
-5
View File
@@ -1,5 +0,0 @@
# -- Fcitx5 input method
windowrule=pseudo,class:^(fcitx)$ # enable this will make fcitx5 works, but fcitx5-configtool will not work!
exec-once=cp ~/.config/fcitx5/profile-bak ~/.config/fcitx5/profile # restore fcitx5 profile managed by nixos
exec-once=fcitx5 -d --replace # start fcitx5 daemon
bind=ALT,E,exec,pkill fcitx5 -9;sleep 1;fcitx5 -d --replace; sleep 1;fcitx5-remote -r
@@ -1,149 +0,0 @@
# https://wiki.hyprland.org/Configuring/Binds/
#
# Format:
# bind = MODS, key, dispatcher, params
#-- Keybindings ----------------------------------------------------
$mod = ALT # use ALT instead of SUPER, to match the mod key with aerospace on darwin.
$files = thunar
$browser = firefox
# SYSTEM
# ============================================================================
# - Drag modifier
# BIND MOD KEY DISPATCHER
bindm = $mod, mouse:272, movewindow
bindm = $mod, mouse:273, resizewindow
# - System
# BIND MOD KEY DISPATCHER VALUE
bind = $mod, q, killactive # kill window
# - Terminal
# BIND MOD KEY DISPATCHER VALUE
bind = $mod, Return, exec, foot
bind = $mod SHIFT, Return, exec, alacritty
bind = $mod, d, exec, anyrun
# - Hardware control
# BIND MOD KEY DISPATCHER VALUE
# https://wiki.archlinux.org/title/WirePlumber
bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindl = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bind = , XF86MonBrightnessUp, exec, brightnessctl set 5%+
bind = , XF86MonBrightnessDown, exec, brightnessctl set 5%-
bind = , XF86AudioPlay, exec, playerctl play-pause
bind = , XF86AudioNext, exec, playerctl next
bind = , XF86AudioPrev, exec, playerctl previous
bind = , XF86Search, exec, anyrun
# WORKSPACES
# ============================================================================
# - Switch to workspace
# BIND MOD KEY DISPATCHER VALUE
bind = $mod, 1, workspace, 1
bind = $mod, 2, workspace, 2
bind = $mod, 3, workspace, 3
bind = $mod, 4, workspace, 4
bind = $mod, 5, workspace, 5
bind = $mod, 6, workspace, 6
bind = $mod, 7, workspace, 7
bind = $mod, 8, workspace, 8
bind = $mod, 9, workspace, 9
bind = $mod, 0, workspace, 10
# - Move focussed window to workspace
# BIND MOD KEY DISPATCHER VALUE
bind = $mod SHIFT, 1, movetoworkspace, 1
bind = $mod SHIFT, 2, movetoworkspace, 2
bind = $mod SHIFT, 3, movetoworkspace, 3
bind = $mod SHIFT, 4, movetoworkspace, 4
bind = $mod SHIFT, 5, movetoworkspace, 5
bind = $mod SHIFT, 6, movetoworkspace, 6
bind = $mod SHIFT, 7, movetoworkspace, 7
bind = $mod SHIFT, 8, movetoworkspace, 8
bind = $mod SHIFT, 9, movetoworkspace, 9
bind = $mod SHIFT, 0, movetoworkspace, 10
bind = $mod, mouse_down, workspace, e+1
bind = $mod, mouse_up, workspace, e-1
# Window
# ============================================================================
# Move Window
bind = $mod SHIFT, left, movewindow, l
bind = $mod SHIFT, right, movewindow, r
bind = $mod SHIFT, up, movewindow, u
bind = $mod SHIFT, down, movewindow, d
# Focus Window
bind = $mod, left, movefocus, l
bind = $mod, right, movefocus, r
bind = $mod, up, movefocus, u
bind = $mod, down, movefocus, d
# Resize Window
bind = $mod CTRL, left, resizeactive, -20 0
bind = $mod CTRL, right, resizeactive, 20 0
bind = $mod CTRL, up, resizeactive, 0 -20
bind = $mod CTRL, down, resizeactive, 0 20
# MODES
# ============================================================================
# BIND MOD KEY DISPATCHER VALUE
bind = $mod SHIFT, d, submap, mode_displays
bind = $mod SHIFT, a, submap, mode_move
bind = $mod , r, submap, mode_resize
bind = $mod SHIFT, s, submap, mode_screenshot
bind = $mod SHIFT, e, submap, mode_shutdown
# LAYOUT
# ============================================================================
# ## Action // Toggle floating ##
bind = $mod, space, togglefloating
# ## Action // Toggle fullscreen ##
bind = $mod, f, fullscreen
# ## Action // Switch to window stacking ##
# bind = $mod, s, layout stacking
# ## Action // Switch to window tabbing ##
# bind = $mod, w, layout tabbed
# ## Action // Toggle window splitting ##
# bind = $mod, e, layout toggle split
# Misc
# ============================================================================
# -- Screenshots --
bind = , Print, exec, hyprshot -m output -o ~/Pictures/Screenshots -- imv
bind = $mod, Print, exec, hyprshot -m window -o ~/Pictures/Screenshots -- imv
bind = CTRL, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots
# -- Others --
bind = CTRL ALT, l, exec, swaylock
bind = $mod SHIFT, x, exec, wlogout
bind = $mod, n, exec, nm-connection-editor # need install network-manager-applet
# Gestures
# ============================================================================
# https://wiki.hypr.land/Configuring/Gestures/
# gesture = fingers, direction, action, options
gesture = 3, horizontal, workspace
gesture = 3, down, mod: ALT, close
gesture = 3, up, mod: SUPER, scale: 1.5, fullscreen
-140
View File
@@ -1,140 +0,0 @@
# WINDOWS AND BORDERS
# ================================================
general {
layout = dwindle
# Cursor
no_focus_fallback = true
# Gaps
gaps_in = 5
gaps_out = 5
# Borders
border_size = 2
col.active_border = 0xff4477ff
col.inactive_border = 0xff2f343f
# Resize
resize_on_border = false
hover_icon_on_border = false
# Allow tearing (you must add a window rule to the window to allow tearing)
allow_tearing = false
}
cursor {
inactive_timeout = 900 # Hide the cursor after n ms (also works on screenlock)
no_warps = false # Never move the cursor automatically
}
ecosystem {
no_donation_nag = true
no_update_news = true
}
misc {
# Allow windows to steal focus - (only xorg apps currently)
focus_on_activate = false
# Enable if you use personalized wallpapers
disable_hyprland_logo = true
}
# VISUAL EFFECTS
# ================================================
# See: https://wiki.hyprland.org/Configuring/Variables
decoration {
# Round borders
rounding = 8
# Shadow
shadow {
enabled = true
range = 4
render_power = 3
color = rgba(1a1a1aee)
}
active_opacity=1.0
inactive_opacity=0.9
fullscreen_opacity=1.0
blur {
enabled=true
new_optimizations = true
size=3 # minimum 1
passes=1 # minimum 1, more passes = more resource intensive.
ignore_opacity=false
}
}
# See: https://wiki.hyprland.org/Configuring/Animations
animations {
enabled = yes
# BEZIERS NAME X0 Y0 X1 Y1
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
# ANIMATION NAME ON SPEED CURVE STYLE
animation = windows, 1, 2, myBezier
animation = windowsOut, 1, 2, default, popin 80%
animation = border, 1, 5, default
animation = fadeIn, 1, 2, default
animation = fadeOut, 1, 2, default
animation = workspaces, 1, 6, default, fade
animation = specialWorkspace, 1, 3, myBezier, slide
}
# LAYOUT DETAILS
# ================================================
# See: https://wiki.hyprland.org/Configuring/Dwindle-Layout/
dwindle {
pseudotile = yes
preserve_split = yes
}
# See: https://wiki.hyprland.org/Configuring/Master-Layout
master {
new_on_top = true
}
#-- Input ----------------------------------------------------
# Configure mouse and touchpad here.
input {
kb_layout=us
kb_variant=
kb_model=
kb_options=
kb_rules=
# mouse focus will not switch to the hovered window unless the mouse crosses a window boundary
follow_mouse=1
mouse_refocus=false
natural_scroll=0
touchpad {
natural_scroll = 1
clickfinger_behavior = true
disable_while_typing = true # seems useless...
# tap - 轻触触摸板, click - 点击触摸板
# disable tap related features to avoid palm rejection.
tap-to-click = false
tap-and-drag = false
}
force_no_accel=0
# repeat_rate=
# repeat_delay=
numlock_by_default=1
}
# Monitors
# ===================================================
monitor = , preferred, auto, 1
@@ -1,65 +0,0 @@
# You can discover a class with 'hyprctl clients'
# Check the syntax on: https://wiki.hyprland.org/Configuring/Window-Rules/
# WINDOW RULES
# ============================================================================
# Workspace RULE WINDOW
# Terminals
windowrulev2 = workspace 1, class:^(foot)$
windowrulev2 = workspace 2, class:^(Alacritty)$
# Work Chat / Meeting
windowrulev2 = workspace 3, class:^(Zoom Workplace)$
# Browsers
windowrulev2 = workspace 4, class:^(firefox)$
windowrulev2 = workspace 5, class:^(google-chrome)$
windowrulev2 = workspace 5, class:^(chromium-browser)$
# Chat
windowrulev2 = workspace 6, class:^(QQ)$
windowrulev2 = workspace 6, class:^(wechat)$
windowrulev2 = workspace 6, class:^(org.telegram.desktop)$
# Music
# windowrulev2 = workspace 7, class:^(music)$
# Mail / Calendar
windowrulev2 = workspace 8, class:^(thunderbird)$,title:^(.*Reminder)
# File Manager & Image/PDF Viewer
windowrulev2 = workspace 9, class:^(thunder)$
windowrulev2 = workspace 9, class:^(code)$ # VS Code
windowrulev2 = workspace 9, class:^(cursor)$ # Cursor AI Editor
# Other
windowrulev2 = workspace 10, class:^(org.wireshark.Wireshark)$
windowrulev2 = workspace 10, class:^(clash-verge)$
# Float RULE WINDOW
windowrulev2 = float, class:^(Zoom Workplace)$
windowrulev2 = float, class:^(pulsemixer)$
windowrulev2 = float, class:^(org.pulseaudio.pavucontrol)$
windowrulev2 = float, class:^(nm-connection-editor)$
windowrulev2 = float, class:^(feh|imv|Gpicview)$
windowrulev2 = float, title:^(File Transfer*)$
windowrulev2 = float, title:^(Firefox — Sharing Indicator)$
windowrulev2 = float, class:^(firefox)$,title:^(library)
windowrulev2 = float, title:^(Save File)$
windowrulev2 = float, class:^(blueman-manager)$
windowrulev2 = float, class:^(thunderbird)$,title:^(.*Reminder)
# HOT FIXES
# ============================================================================
# Steam
# Fix: Steam menus disappearing on mouseover
windowrulev2 = stayfocused, title:^()$, class:^(steam)$
windowrulev2 = minsize 1 1, title:^()$, class:^(steam)$
# Fix: Steam starts in a broken position as float window
windowrulev2 = tile, class:^(steam)$
windowrulev2 = fullscreen, class:^(steam)$
# Games
# windowrulev2 = immediate, class:^(steam_app_xxx)$ # game 1
# wlogout
windowrulev2 = float, class:^(wlogout)$
windowrulev2 = move 0 0, class:^(wlogout)$
windowrulev2 = size 100% 100%, class:^(wlogout)$
windowrulev2 = animation slide, class:^(wlogout)$
-45
View File
@@ -1,45 +0,0 @@
{
pkgs,
config,
lib,
...
}@args:
let
cfg = config.modules.desktop.hyprland;
in
{
options.modules.desktop.hyprland = {
enable = lib.mkEnableOption "hyprland compositor";
settings = lib.mkOption {
type =
with lib.types;
let
valueType =
nullOr (oneOf [
bool
int
float
str
path
(attrsOf valueType)
(listOf valueType)
])
// {
description = "Hyprland configuration value";
};
in
valueType;
default = { };
};
};
config = lib.mkIf cfg.enable (
lib.mkMerge [
{
wayland.windowManager.hyprland.settings = cfg.settings;
}
(import ./hyprland.nix args)
(import ./xdg.nix args)
]
);
}
-56
View File
@@ -1,56 +0,0 @@
{
pkgs,
config,
...
}:
let
package = pkgs.hyprland;
in
{
xdg.configFile =
let
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
confPath = "${config.home.homeDirectory}/nix-config/home/linux/gui/hyprland/conf";
in
{
"hypr/configs".source = mkSymlink confPath;
};
# NOTE:
# We have to enable hyprland/i3's systemd user service in home-manager,
# so that gammastep/wallpaper-switcher's user service can be start correctly!
# they are all depending on hyprland/i3's user graphical-session
wayland.windowManager.hyprland = {
inherit package;
enable = true;
settings = {
source =
let
configPath = "${config.home.homeDirectory}/.config/hypr/configs";
in
[
"${configPath}/exec.conf"
"${configPath}/fcitx5.conf"
"${configPath}/keybindings.conf"
"${configPath}/settings.conf"
"${configPath}/windowrules.conf"
];
env = [
];
};
# gammastep/wallpaper-switcher need this to be enabled.
systemd = {
enable = true;
variables = [ "--all" ];
};
};
services.polkit-gnome.enable = true; # polkit
# NOTE: this executable is used by greetd to start a wayland session when system boot up
# with such a vendor-no-locking script, we can switch to another wayland compositor without modifying greetd's config in NixOS module
home.file.".wayland-session" = {
source = "${package}/bin/Hyprland";
executable = true;
};
}
-30
View File
@@ -1,30 +0,0 @@
{ pkgs, ... }:
{
xdg.portal = {
enable = true;
config = {
common = {
# Use xdg-desktop-portal-gtk for every portal interface...
default = [
"hyprland"
"gtk"
];
};
};
# Sets environment variable NIXOS_XDG_OPEN_USE_PORTAL to 1
# This will make xdg-open use the portal to open programs,
# which resolves bugs involving programs opening inside FHS envs or with unexpected env vars set from wrappers.
# xdg-open is used by almost all programs to open a unknown file/uri
# alacritty as an example, it use xdg-open as default, but you can also custom this behavior
# and vscode has open like `External Uri Openers`
xdgOpenUsePortal = true;
# ls /etc/profiles/per-user/ryan/share/xdg-desktop-portal/portals
extraPortals = with pkgs; [
xdg-desktop-portal-gtk # for provides file picker / OpenURI
# xdg-desktop-portal-wlr
xdg-desktop-portal-hyprland # for Hyprland
];
};
}
+1 -6
View File
@@ -6,8 +6,8 @@
// This is the main configuration file that includes all other config files // This is the main configuration file that includes all other config files
include "./keybindings.kdl" include "./keybindings.kdl"
include "./windowrules.kdl" include "./windowrules.kdl"
include "./spawn-at-startup.kdl"
include "./niri-hardware.kdl" include "./niri-hardware.kdl"
include "./noctalia-shell.kdl"
// Input device configuration. // Input device configuration.
// Find the full list of options on the wiki: // Find the full list of options on the wiki:
@@ -225,8 +225,3 @@ animations {
// Window rules let you adjust behavior for individual windows. // Window rules let you adjust behavior for individual windows.
// Find more information on the wiki: // Find more information on the wiki:
// https://yalter.github.io/niri/Configuration:-Window-Rules // https://yalter.github.io/niri/Configuration:-Window-Rules
layer-rule {
match namespace="waybar"
opacity 0.800000
}
+41 -17
View File
@@ -16,8 +16,14 @@ binds {
// Suggested binds for running programs: terminal, app launcher, screen locker. // Suggested binds for running programs: terminal, app launcher, screen locker.
Mod+Return { spawn "foot"; } Mod+Return { spawn "foot"; }
Mod+Shift+Return { spawn "alacritty"; } Mod+Shift+Return { spawn "alacritty"; }
Mod+D { spawn "anyrun"; }
CTRL+Alt+L { spawn "swaylock"; } // Launcher
Mod+D { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; }
Mod+Space { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; }
XF86Search { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; }
// Locker
CTRL+Alt+L { spawn "noctalia-shell" "ipc" "call" "lockScreen" "lock"; }
// Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc. // Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc.
// Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`. // Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`.
@@ -28,30 +34,44 @@ binds {
// The allow-when-locked=true property makes them work even when the session is locked. // The allow-when-locked=true property makes them work even when the session is locked.
// Using spawn-sh allows to pass multiple arguments together with the command. // Using spawn-sh allows to pass multiple arguments together with the command.
// "-l 1.0" limits the volume to 100%. // "-l 1.0" limits the volume to 100%.
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+ -l 1.0"; } // XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.01+ --limit 1.0"; }
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; } // XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.01-"; }
XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; } // XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; } // XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
XF86AudioRaiseVolume allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "increase"; }
XF86AudioLowerVolume allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "decrease"; }
XF86AudioMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteOutput"; }
XF86AudioMicMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteInput"; }
// Example media keys mapping using playerctl. // Example media keys mapping using playerctl.
// This will work with any MPRIS-enabled media player. // This will work with any MPRIS-enabled media player.
XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; } // XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; }
XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; } // XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; }
XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; } // XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; }
XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; } // XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; }
XF86AudioPlay allow-when-locked=true { spawn-sh "noctalia-shell ipc call media playPause"; }
XF86AudioStop allow-when-locked=true { spawn-sh "noctalia-shell ipc call media pause"; }
XF86AudioPrev allow-when-locked=true { spawn-sh "octalia-shell ipc call media previous"; }
XF86AudioNext allow-when-locked=true { spawn-sh "noctalia-shell ipc call media next"; }
// Example brightness key mappings for brightnessctl. // Example brightness key mappings for brightnessctl.
// You can use regular spawn with multiple arguments too (to avoid going through "sh"), // You can use regular spawn with multiple arguments too (to avoid going through "sh"),
// but you need to manually put each argument in separate "" quotes. // but you need to manually put each argument in separate "" quotes.
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; } // XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "1%+"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; } // XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "1%-"; }
XF86MonBrightnessUp allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "brightness" "increase"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "brightness" "decrease"; }
// keyboard backlight
XF86KbdBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--device=kbd_backlight" "set" "10%+"; }
XF86KbdBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--device=kbd_backlight" "set" "10%-"; }
// Open/close the Overview: a zoomed-out view of workspaces and windows. // Open/close the Overview: a zoomed-out view of workspaces and windows.
// You can also move the mouse into the top-left hot corner, // You can also move the mouse into the top-left hot corner,
// or do a four-finger swipe up on a touchpad. // or do a four-finger swipe up on a touchpad.
// Mod+O repeat=false { toggle-overview; } // Mod+O repeat=false { toggle-overview; }
Mod+Q repeat=false { close-window; }
Mod+Left { focus-column-left; } Mod+Left { focus-column-left; }
Mod+Down { focus-window-down; } Mod+Down { focus-window-down; }
Mod+Up { focus-window-up; } Mod+Up { focus-window-up; }
@@ -178,8 +198,6 @@ binds {
// Makes the column "fill the rest of the space". // Makes the column "fill the rest of the space".
Mod+Ctrl+F { expand-column-to-available-width; } Mod+Ctrl+F { expand-column-to-available-width; }
Mod+C { center-column; }
// Center all fully visible columns on screen. // Center all fully visible columns on screen.
Mod+Ctrl+C { center-visible-columns; } Mod+Ctrl+C { center-visible-columns; }
@@ -200,7 +218,6 @@ binds {
// Move the focused window between the floating and the tiling layout. // Move the focused window between the floating and the tiling layout.
Mod+V { toggle-window-floating; } Mod+V { toggle-window-floating; }
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
// Toggle tabbed column display mode. // Toggle tabbed column display mode.
// Windows in this column will appear as vertical tabs, // Windows in this column will appear as vertical tabs,
@@ -229,11 +246,18 @@ binds {
// which ensures niri always processes them, even when an inhibitor is active. // which ensures niri always processes them, even when an inhibitor is active.
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
Mod+Shift+E { wlogout; }
// The quit action will show a confirmation dialog to avoid accidental exits. // The quit action will show a confirmation dialog to avoid accidental exits.
Ctrl+Alt+Delete { quit; } Ctrl+Alt+Delete { quit; }
Mod+Q repeat=false { close-window; }
// Powers off the monitors. To turn them back on, do any input like // Powers off the monitors. To turn them back on, do any input like
// moving the mouse or pressing any other key. // moving the mouse or pressing any other key.
Mod+Shift+P { power-off-monitors; } Mod+Shift+P { power-off-monitors; }
// Utility shortcuts
Mod+Shift+V { spawn "noctalia-shell" "ipc" "call" "launcher" "clipboard"; }
Mod+C { spawn "noctalia-shell" "ipc" "call" "launcher" "calculator"; }
Mod+S { spawn "noctalia-shell" "ipc" "call" "controlCenter" "toggle"; }
Mod+E { spawn "noctalia-shell" "ipc" "call" "sessionMenu" "toggle"; }
} }
@@ -0,0 +1,20 @@
// https://docs.noctalia.dev/getting-started/compositor-settings/niri/
window-rule {
// Rounded corners for a modern look.
geometry-corner-radius 20
// Clips window contents to the rounded corner boundaries.
clip-to-geometry true
}
debug {
// Allows notification actions and window activation from Noctalia.
honor-xdg-activation-with-invalid-serial
}
// Set the overview wallpaper on the backdrop.
layer-rule {
match namespace="^noctalia-overview*"
place-within-backdrop true
}
@@ -1,26 +0,0 @@
// Add lines like this to spawn processes at startup.
// Note that running niri as a session supports xdg-desktop-autostart,
// which may be more convenient to use.
// See the binds section below for more spawn examples.
// This line starts waybar, a commonly used bar for Wayland compositors.
// spawn-at-startup "waybar"
// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup:
// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell"
// Terminal applications
spawn-at-startup "foot"
spawn-at-startup "alacritty"
spawn-at-startup "ghostty"
// Network proxy
spawn-at-startup "clash-verge"
// Web browsers
spawn-at-startup "firefox"
spawn-at-startup "google-chrome-stable"
spawn-at-startup "chromium-browser"
// Communication applications
spawn-at-startup "Telegram"
+1
View File
@@ -28,6 +28,7 @@ in
{ {
"niri/config.kdl".source = mkSymlink "${confPath}/config.kdl"; "niri/config.kdl".source = mkSymlink "${confPath}/config.kdl";
"niri/keybindings.kdl".source = mkSymlink "${confPath}/keybindings.kdl"; "niri/keybindings.kdl".source = mkSymlink "${confPath}/keybindings.kdl";
"niri/noctalia-shell.kdl".source = mkSymlink "${confPath}/noctalia-shell.kdl";
"niri/spawn-at-startup.kdl".source = mkSymlink "${confPath}/spawn-at-startup.kdl"; "niri/spawn-at-startup.kdl".source = mkSymlink "${confPath}/spawn-at-startup.kdl";
"niri/windowrules.kdl".source = mkSymlink "${confPath}/windowrules.kdl"; "niri/windowrules.kdl".source = mkSymlink "${confPath}/windowrules.kdl";
}; };
+16 -16
View File
@@ -3,7 +3,6 @@
pkgs, pkgs,
nixos-apple-silicon, nixos-apple-silicon,
my-asahi-firmware, my-asahi-firmware,
nixpkgs-mesa,
... ...
}: }:
{ {
@@ -13,13 +12,6 @@
zramSwap.memoryPercent = lib.mkForce 75; zramSwap.memoryPercent = lib.mkForce 75;
# Workaround for Mesa 25.3.1 regression
# https://github.com/nix-community/nixos-apple-silicon/issues/380
# https://github.com/NixOS/nixpkgs/pull/461866
hardware.graphics.package =
assert pkgs.mesa.version == "25.3.1";
(import nixpkgs-mesa { localSystem = pkgs.stdenv.hostPlatform; }).mesa;
nix.settings = { nix.settings = {
extra-substituters = [ extra-substituters = [
"https://nixos-apple-silicon.cachix.org" "https://nixos-apple-silicon.cachix.org"
@@ -36,10 +28,10 @@
muvm # run x86_64 Apps/Games in a microVM, used as a workaround of apple silicon's 16k page size. muvm # run x86_64 Apps/Games in a microVM, used as a workaround of apple silicon's 16k page size.
]; ];
networking.wireless.iwd = { # networking.wireless.iwd = {
enable = true; # enable = true;
settings.General.EnableNetworkConfiguration = true; # settings.DriverQuirks.DefaultInterface = true;
}; # };
# configures the network interface(include wireless) via `nmcli` & `nmtui` # configures the network interface(include wireless) via `nmcli` & `nmtui`
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
@@ -199,10 +191,6 @@
Icon = "mic_off"; Icon = "mic_off";
Action = "MicMute"; Action = "MicMute";
} }
{
Icon = "search";
Action = "Search";
}
{ {
Icon = "backlight_low"; Icon = "backlight_low";
Action = "IllumDown"; Action = "IllumDown";
@@ -250,6 +238,18 @@
Text = "Print"; Text = "Print";
Action = "Print"; Action = "Print";
} }
{
Text = "F1";
Action = "F1";
}
{
Text = "F2";
Action = "F2";
}
{
Text = "F12";
Action = "F12";
}
]; ];
}; };
}; };
+1
View File
@@ -19,6 +19,7 @@ in
# disable sunshine for securrity # disable sunshine for securrity
services.sunshine.enable = lib.mkForce false; services.sunshine.enable = lib.mkForce false;
services.tuned.ppdSettings.main.default = lib.mkForce "power-saver";
networking = { networking = {
inherit hostName; inherit hostName;
-3
View File
@@ -8,9 +8,6 @@ in
"${config.home.homeDirectory}/.ssh/${hostName}"; "${config.home.homeDirectory}/.ssh/${hostName}";
modules.desktop.nvidia.enable = false; modules.desktop.nvidia.enable = false;
modules.desktop.hyprland.settings.source = [
"${config.home.homeDirectory}/nix-config/hosts/12kingdoms-shoukei/hypr-hardware.conf"
];
xdg.configFile."niri/niri-hardware.kdl".source = xdg.configFile."niri/niri-hardware.kdl".source =
mkSymlink "${config.home.homeDirectory}/nix-config/hosts/12kingdoms-shoukei/niri-hardware.kdl"; mkSymlink "${config.home.homeDirectory}/nix-config/hosts/12kingdoms-shoukei/niri-hardware.kdl";
@@ -1,8 +0,0 @@
# https://wiki.hyprland.org/Configuring/Monitors/
#
# Configure your Display resolution, offset, scale and Monitors here, use `hyprctl monitors` to get the info.
# highres: get the best possible resolution
# auto: position automatically
# 1.33: scale to 1.33 times
# bitdepth,10: enable 10 bit support
monitor=eDP-1, highres@highrr, 0x0, 1.33, bitdepth,10
+1
View File
@@ -25,6 +25,7 @@ in
]; ];
services.sunshine.enable = lib.mkForce true; services.sunshine.enable = lib.mkForce true;
services.tuned.ppdSettings.main.default = lib.mkForce "performance";
networking = { networking = {
inherit hostName; inherit hostName;
-3
View File
@@ -7,9 +7,6 @@ in
modules.desktop.nvidia.enable = true; modules.desktop.nvidia.enable = true;
modules.desktop.hyprland.settings.source = [
"${config.home.homeDirectory}/nix-config/hosts/idols-ai/hypr-hardware.conf"
];
xdg.configFile."niri/niri-hardware.kdl".source = xdg.configFile."niri/niri-hardware.kdl".source =
mkSymlink "${config.home.homeDirectory}/nix-config/hosts/idols-ai/niri-hardware.kdl"; mkSymlink "${config.home.homeDirectory}/nix-config/hosts/idols-ai/niri-hardware.kdl";
} }
-35
View File
@@ -1,35 +0,0 @@
# https://wiki.hyprland.org/Configuring/Monitors/
#
# Configure your Display resolution, offset, scale and Monitors here, use `hyprctl monitors` to get the info.
# highres: get the best possible resolution
# auto: position automatically
# 1.5: scale to 1.5 times
# bitdepth,10: enable 10 bit support
#
# P32A2V - 3840x2160@144
# Hyprshot have problems which HDR.
# monitor=DP-2, highres@highrr, 0x0, 1.5, bitdepth,10, cm, hdr, sdrbrightness, 1.3, sdrsaturation, 1
monitor=DP-2, highres@highrr, 0x0, 1.5, bitdepth,10
# 27D1U - 3840x2160@60
monitor=HDMI-A-1, highres@highrr, auto-right, 1.5, bitdepth,10
# Bind Workspace to Monitors
# Terminals
workspace = 1, monitor:HDMI-A-1
workspace = 2, monitor:HDMI-A-1
# Work Chat / Meeting
workspace = 3, monitor:HDMI-A-1
# Browsers
workspace = 4, monitor:DP-2
workspace = 5, monitor:DP-2
# Chat
workspace = 6, monitor:HDMI-A-1
# Music
workspace = 7, monitor:HDMI-A-1
# Mail / Calendar
workspace = 8, monitor:DP-2
# File Manager & Image/PDF Viewer
workspace = 9, monitor:DP-2
# Other
workspace = 10, monitor:HDMI-A-1
+7
View File
@@ -141,6 +141,10 @@ in
".config/zed" ".config/zed"
".local/share/zed" ".local/share/zed"
# google ai editor (antigravity)
".config/Antigravity"
".antigravity"
# ai agents # ai agents
".claude" ".claude"
".gemini" ".gemini"
@@ -304,6 +308,9 @@ in
# Digital Painting # Digital Painting
".local/share/krita" ".local/share/krita"
# Japanese IME
".config/mozc" # used by fcitx5-mozc
".config/nushell" ".config/nushell"
]; ];
files = [ files = [
+1 -1
View File
@@ -36,7 +36,7 @@
# thunar file manager(part of xfce) related options # thunar file manager(part of xfce) related options
thunar = { thunar = {
enable = true; enable = true;
plugins = with pkgs.xfce; [ plugins = with pkgs; [
thunar-archive-plugin thunar-archive-plugin
thunar-volman thunar-volman
]; ];
+17
View File
@@ -0,0 +1,17 @@
{ ... }:
{
# TuneD - Tuning Profile Delivery Mechanism for Linux
# A modern replacement for PPD(power-profiles-daemon)
services.tuned = {
enable = true;
settings.dynamic_tuning = true;
ppdSupport = true; # translation of power-profiles-daemon API calls to TuneD
ppdSettings.main.default = "balanced"; # balanced / performance / power-saver
};
# DBus service that provides power management support to applications
# Required by `tuned-ppd` for handling power supply changes
services.upower.enable = true;
services.power-profiles-daemon.enable = false; # conflicts with tuned
services.tlp.enable = false; # conflicts with tuned
}
@@ -51,18 +51,6 @@ let
]; ];
}; };
modules-hyprland = {
nixos-modules = [
]
++ base-modules.nixos-modules;
home-modules = [
{
modules.desktop.hyprland.enable = true;
}
]
++ base-modules.home-modules;
};
modules-niri = { modules-niri = {
nixos-modules = [ nixos-modules = [
{ programs.niri.enable = true; } { programs.niri.enable = true; }
@@ -76,14 +64,11 @@ let
in in
{ {
nixosConfigurations = { nixosConfigurations = {
# host with hyprland compositor
"${name}-hyprland" = mylib.nixosSystem (modules-hyprland // args);
"${name}-niri" = mylib.nixosSystem (modules-niri // 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}-niri" = inputs.self.nixosConfigurations."${name}-niri".config.formats.iso; "${name}-niri" = inputs.self.nixosConfigurations."${name}-niri".config.formats.iso;
}; };
} }

Some files were not shown because too many files have changed in this diff Show More