Compare commits
195 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8f3780ba5d | |||
| 23ff53dcac | |||
| f9d0efd425 | |||
| 1a9ca02329 | |||
| 7216201bd6 | |||
| eda3221ac0 | |||
| 909b8ffe06 | |||
| e1ef5587fd | |||
| 6c228998e7 | |||
| ab8cacb04e | |||
| 26c7076816 | |||
| 6853991712 | |||
| 6db329c55d | |||
| e83b7a867f | |||
| e3fb563b79 | |||
| 74c8912897 | |||
| fb7a0cd178 | |||
| 847adc7d63 | |||
| 94e431abfc | |||
| f4f3ff347c | |||
| ff3cd9111f | |||
| f6266d72e6 | |||
| bc1bbf3318 | |||
| e9906c9322 | |||
| 72d14c7c9b | |||
| 9f4ff5a8a3 | |||
| 38354330ea | |||
| bda311ad9a | |||
| 2bc25074a6 | |||
| 219a7a6e0b | |||
| 85394e25f4 | |||
| a0fc2040a9 | |||
| b7f5aed4b8 | |||
| 6a23332ce1 | |||
| 12decc32b6 | |||
| e7e9a43dbb | |||
| 29760ddb27 | |||
| 307f5a490c | |||
| 2e53101fb7 | |||
| b6c1456f46 | |||
| cdf4ab580f | |||
| fdcc3be59d | |||
| 3c2ad0bec2 | |||
| 81dbc5b8de | |||
| 618f26017c | |||
| 4163d09af8 | |||
| 13031e30c2 | |||
| 3d2a2d50af | |||
| 3bf1b986cf | |||
| 7cf0e96efa | |||
| 87a1d56247 | |||
| def33a486b | |||
| 62bac83db4 | |||
| e0d0ff9203 | |||
| 1385a34f1a | |||
| 744fbf9ce5 | |||
| a23073bfee | |||
| 60d1909055 | |||
| cd4389a40f | |||
| d0035905e1 | |||
| fdf66fbae0 | |||
| 125bce3bc2 | |||
| 6ae7fee541 | |||
| 8d1c70cc72 | |||
| de05214ec5 | |||
| 34fdd92351 | |||
| 0c2dcc0734 | |||
| 2f47f7dc76 | |||
| 082327c693 | |||
| 1436c6c069 | |||
| b034b383d7 | |||
| 863f6a31f7 | |||
| 0cdc201974 | |||
| 40b782d94b | |||
| 23de363622 | |||
| 2195a599d6 | |||
| c58e76574e | |||
| 7fbd31a70a | |||
| e8a227dcb7 | |||
| 74420b4161 | |||
| aabe1c65fa | |||
| b25d30dd62 | |||
| 57cd863aa5 | |||
| 492708cfc7 | |||
| a5bd9c1d09 | |||
| 73642f6686 | |||
| d06fdb3076 | |||
| 956a997eb8 | |||
| f9bb934218 | |||
| 0029bdc8c7 | |||
| 18946a0814 | |||
| 5479ea26cd | |||
| 7885d10e29 | |||
| 935a1dccda | |||
| 958f5878c1 | |||
| 5e727543c1 | |||
| 38f9a3e1bb | |||
| 902f558995 | |||
| 2961a9591a | |||
| a8ac95ebad | |||
| 3ac0cea3cc | |||
| 58e333a23b | |||
| ba86a02fca | |||
| 7b28c08ab6 | |||
| 6f09e34c21 | |||
| 553e8d16e5 | |||
| ebce6504c6 | |||
| e3a33fdf03 | |||
| 16c8b893d3 | |||
| 9509c15ac3 | |||
| 6a74052413 | |||
| 205b1466de | |||
| 8b2b43d28a | |||
| 0c6e5dc32e | |||
| 95abfef3a9 | |||
| 070aeae8db | |||
| 35f9816db9 | |||
| 9f97c659d6 | |||
| d6954ea964 | |||
| 755596484b | |||
| d729ca1377 | |||
| 918403b098 | |||
| 1b663c757b | |||
| a5b57cd16e | |||
| 48a9d7c507 | |||
| 7a82b8085a | |||
| c8182216ae | |||
| e5b9a4917e | |||
| f771ec76a0 | |||
| 01b69e810e | |||
| 7f112010c2 | |||
| e902a9bdb1 | |||
| 07d6a5e102 | |||
| b6796f9592 | |||
| 4c04c8e3a3 | |||
| e14c197e8f | |||
| a1d51ffe0c | |||
| 8d7b622430 | |||
| da1e7253da | |||
| 123d90a8dd | |||
| 2483ee2707 | |||
| 3eec0b94a0 | |||
| ac68092d88 | |||
| 601816a5ee | |||
| 3a21601778 | |||
| d1eadc6f40 | |||
| 3c90833fb4 | |||
| fcc90318f2 | |||
| ccec1d4c29 | |||
| c56593516d | |||
| 8e356dd6fc | |||
| 7a1a9644c6 | |||
| eb38e7c6af | |||
| 1099cc7ab0 | |||
| d21131deca | |||
| 497823f9a3 | |||
| 76ca2dbb65 | |||
| e685d4416e | |||
| cb47adb6b3 | |||
| a9bc0ebdb8 | |||
| 1a3b80b608 | |||
| 7a6f4fb3ea | |||
| 5c236517bc | |||
| bccd5475df | |||
| c199f11582 | |||
| 0a27530c11 | |||
| 41d521e6f5 | |||
| b7f12a6ff2 | |||
| 155c02ed66 | |||
| 8a2c5ba577 | |||
| f904a672d4 | |||
| 379fdd5b46 | |||
| 21090c93e8 | |||
| 2b914efbb1 | |||
| 7b1bab3c9b | |||
| d517d74bf7 | |||
| d83cfcf681 | |||
| a9d08f15a2 | |||
| ce4588d0c2 | |||
| 69eee64e7e | |||
| 09fbea3f77 | |||
| 64a7b2c6cf | |||
| c8bc396e89 | |||
| 035c07d658 | |||
| 30d73dabf1 | |||
| adc49e7f6e | |||
| 74b19dd7dc | |||
| 329f03c1e2 | |||
| 99cf8d6ac6 | |||
| d222dc05a9 | |||
| 84b30c0233 | |||
| ebf1b6b4d0 | |||
| 6e246c38b6 | |||
| f5e2f1832a | |||
| d53ab3b4e3 |
@@ -25,9 +25,9 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Install nix
|
- name: Install nix
|
||||||
uses: cachix/install-nix-action@v24
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
install_url: https://nixos.org/nix/install
|
install_url: https://nixos.org/nix/install
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
|
|||||||
@@ -8,3 +8,4 @@ logs/
|
|||||||
core*
|
core*
|
||||||
!core/
|
!core/
|
||||||
!core.nix
|
!core.nix
|
||||||
|
!coredns*
|
||||||
|
|||||||
@@ -1,10 +1,21 @@
|
|||||||
[files]
|
[files]
|
||||||
|
# Respect .ignore files.
|
||||||
ignore-dot = true
|
ignore-dot = true
|
||||||
|
# Respect ignore files.
|
||||||
ignore-files = true
|
ignore-files = true
|
||||||
extend-exclude = ["themes/", "data/", "static-surprises/", "resources/"]
|
# Typos-specific ignore globs (gitignore syntax).
|
||||||
|
# NOTE: This setting is ignored when you pass the path directly on the command line, as cachix/git-hooks.nix does.
|
||||||
|
# To ignore those files, you must also exclude those directories via git-hooks.hooks.typos.settings.exclude.
|
||||||
|
extend-exclude = [
|
||||||
|
"data/",
|
||||||
|
"rime-data/",
|
||||||
|
]
|
||||||
|
|
||||||
[default]
|
[default]
|
||||||
|
# Check binary files as text.
|
||||||
binary = false
|
binary = false
|
||||||
|
# Verify spelling in file names.
|
||||||
|
check-filename = true
|
||||||
# ignore some special identifiers(sha256, mac address, crypto keys, etc)
|
# ignore some special identifiers(sha256, mac address, crypto keys, etc)
|
||||||
extend-ignore-re = [
|
extend-ignore-re = [
|
||||||
"iterm2",
|
"iterm2",
|
||||||
|
|||||||
@@ -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-ollama
|
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}}
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
#
|
#
|
||||||
@@ -108,19 +113,21 @@ up-nix:
|
|||||||
#
|
#
|
||||||
############################################################################
|
############################################################################
|
||||||
|
|
||||||
|
# Deploy the nixosConfiguration by hostname match
|
||||||
[linux]
|
[linux]
|
||||||
[group('desktop')]
|
[group('homelab')]
|
||||||
hypr mode="default":
|
local mode="default":
|
||||||
#!/usr/bin/env nu
|
#!/usr/bin/env nu
|
||||||
use {{utils_nu}} *;
|
use {{utils_nu}} *;
|
||||||
nixos-switch ai-hyprland {{mode}}
|
nixos-switch (hostname) {{mode}}
|
||||||
|
|
||||||
|
# Deploy the niri nixosConfiguration by hostname match
|
||||||
[linux]
|
[linux]
|
||||||
[group('desktop')]
|
[group('desktop')]
|
||||||
s-hypr mode="default":
|
niri mode="default":
|
||||||
#!/usr/bin/env nu
|
#!/usr/bin/env nu
|
||||||
use {{utils_nu}} *;
|
use {{utils_nu}} *;
|
||||||
nixos-switch shoukei-hyprland {{mode}}
|
nixos-switch $"(hostname)-niri" {{mode}}
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
#
|
#
|
||||||
@@ -141,23 +148,15 @@ darwin-rollback:
|
|||||||
use {{utils_nu}} *;
|
use {{utils_nu}} *;
|
||||||
darwin-rollback
|
darwin-rollback
|
||||||
|
|
||||||
# Depoly to fern(macOS host)
|
# Deploy the darwinConfiguration by hostname match
|
||||||
[macos]
|
[macos]
|
||||||
[group('desktop')]
|
[group('desktop')]
|
||||||
fe mode="default":
|
local mode="default":
|
||||||
#!/usr/bin/env nu
|
#!/usr/bin/env nu
|
||||||
use {{utils_nu}} *;
|
use {{utils_nu}} *;
|
||||||
darwin-build "fern" {{mode}};
|
darwin-build (hostname) {{mode}};
|
||||||
darwin-switch "fern" {{mode}}
|
darwin-switch (hostname) {{mode}}
|
||||||
|
|
||||||
# Depoly to frieren(macOS host)
|
|
||||||
[macos]
|
|
||||||
[group('desktop')]
|
|
||||||
fr mode="default":
|
|
||||||
#!/usr/bin/env nu
|
|
||||||
use {{utils_nu}} *;
|
|
||||||
darwin-build "frieren" {{mode}};
|
|
||||||
darwin-switch "frieren" {{mode}}
|
|
||||||
|
|
||||||
# Reset launchpad to force it to reindex Applications
|
# Reset launchpad to force it to reindex Applications
|
||||||
[macos]
|
[macos]
|
||||||
@@ -178,13 +177,6 @@ reset-launchpad:
|
|||||||
col tag:
|
col tag:
|
||||||
colmena apply --on '@{{tag}}' --verbose --show-trace
|
colmena apply --on '@{{tag}}' --verbose --show-trace
|
||||||
|
|
||||||
[linux]
|
|
||||||
[group('homelab')]
|
|
||||||
local name mode="default":
|
|
||||||
#!/usr/bin/env nu
|
|
||||||
use {{utils_nu}} *;
|
|
||||||
nixos-switch {{name}} {{mode}}
|
|
||||||
|
|
||||||
# Build and upload a vm image
|
# Build and upload a vm image
|
||||||
[linux]
|
[linux]
|
||||||
[group('homelab')]
|
[group('homelab')]
|
||||||
@@ -204,37 +196,16 @@ lab:
|
|||||||
shoryu:
|
shoryu:
|
||||||
colmena apply --on '@kubevirt-shoryu' --verbose --show-trace
|
colmena apply --on '@kubevirt-shoryu' --verbose --show-trace
|
||||||
|
|
||||||
[linux]
|
|
||||||
[group('homelab')]
|
|
||||||
shoryu-local mode="default":
|
|
||||||
#!/usr/bin/env nu
|
|
||||||
use {{utils_nu}} *;
|
|
||||||
nixos-switch kubevirt-shoryu {{mode}}
|
|
||||||
|
|
||||||
[linux]
|
[linux]
|
||||||
[group('homelab')]
|
[group('homelab')]
|
||||||
shushou:
|
shushou:
|
||||||
colmena apply --on '@kubevirt-shushou' --verbose --show-trace
|
colmena apply --on '@kubevirt-shushou' --verbose --show-trace
|
||||||
|
|
||||||
[linux]
|
|
||||||
[group('homelab')]
|
|
||||||
shushou-local mode="default":
|
|
||||||
#!/usr/bin/env nu
|
|
||||||
use {{utils_nu}} *;
|
|
||||||
nixos-switch kubevirt-shushou {{mode}}
|
|
||||||
|
|
||||||
[linux]
|
[linux]
|
||||||
[group('homelab')]
|
[group('homelab')]
|
||||||
youko:
|
youko:
|
||||||
colmena apply --on '@kubevirt-youko' --verbose --show-trace
|
colmena apply --on '@kubevirt-youko' --verbose --show-trace
|
||||||
|
|
||||||
[linux]
|
|
||||||
[group('homelab')]
|
|
||||||
youko-local mode="default":
|
|
||||||
#!/usr/bin/env nu
|
|
||||||
use {{utils_nu}} *;
|
|
||||||
nixos-switch kubevirt-youko {{mode}}
|
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
#
|
#
|
||||||
# Commands for other Virtual Machines
|
# Commands for other Virtual Machines
|
||||||
@@ -256,37 +227,16 @@ upload-idols mode="default":
|
|||||||
aqua:
|
aqua:
|
||||||
colmena apply --on '@aqua' --verbose --show-trace
|
colmena apply --on '@aqua' --verbose --show-trace
|
||||||
|
|
||||||
[linux]
|
|
||||||
[group('homelab')]
|
|
||||||
aqua-local mode="default":
|
|
||||||
#!/usr/bin/env nu
|
|
||||||
use {{utils_nu}} *;
|
|
||||||
nixos-switch aquamarine {{mode}}
|
|
||||||
|
|
||||||
[linux]
|
[linux]
|
||||||
[group('homelab')]
|
[group('homelab')]
|
||||||
ruby:
|
ruby:
|
||||||
colmena apply --on '@ruby' --verbose --show-trace
|
colmena apply --on '@ruby' --verbose --show-trace
|
||||||
|
|
||||||
[linux]
|
|
||||||
[group('homelab')]
|
|
||||||
ruby-local mode="default":
|
|
||||||
#!/usr/bin/env nu
|
|
||||||
use {{utils_nu}} *;
|
|
||||||
nixos-switch ruby {{mode}}
|
|
||||||
|
|
||||||
[linux]
|
[linux]
|
||||||
[group('homelab')]
|
[group('homelab')]
|
||||||
kana:
|
kana:
|
||||||
colmena apply --on '@kana' --verbose --show-trace
|
colmena apply --on '@kana' --verbose --show-trace
|
||||||
|
|
||||||
[linux]
|
|
||||||
[group('homelab')]
|
|
||||||
kana-local mode="default":
|
|
||||||
#!/usr/bin/env nu
|
|
||||||
use {{utils_nu}} *;
|
|
||||||
nixos-switch kana {{mode}}
|
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
#
|
#
|
||||||
# Kubernetes related commands
|
# Kubernetes related commands
|
||||||
|
|||||||
@@ -8,9 +8,9 @@
|
|||||||
<a href="https://github.com/ryan4yin/nix-config/stargazers">
|
<a href="https://github.com/ryan4yin/nix-config/stargazers">
|
||||||
<img alt="Stargazers" src="https://img.shields.io/github/stars/ryan4yin/nix-config?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41"></a>
|
<img alt="Stargazers" src="https://img.shields.io/github/stars/ryan4yin/nix-config?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41"></a>
|
||||||
<a href="https://nixos.org/">
|
<a href="https://nixos.org/">
|
||||||
<img src="https://img.shields.io/badge/NixOS-25.05-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a>
|
<img src="https://img.shields.io/badge/NixOS-25.11-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a>
|
||||||
<a href="https://github.com/ryan4yin/nixos-and-flakes-book">
|
<a href="https://github.com/ryan4yin/nixos-and-flakes-book">
|
||||||
<img src="https://img.shields.io/static/v1?label=Nix Flakes&message=learning&style=for-the-badge&logo=nixos&color=DDB6F2&logoColor=D9E0EE&labelColor=302D41"></a>
|
<img src="https://img.shields.io/badge/Nix%20Flakes-learning-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -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
|
||||||
@@ -55,16 +55,14 @@ 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] |
|
| **Window Manager** | [Niri][Niri] |
|
||||||
| **Terminal Emulator** | [Zellij][Zellij] + [Kitty][Kitty] |
|
| **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** | [GDM][GDM] |
|
|
||||||
| **Color Scheme** | [Catppuccin][Catppuccin] |
|
|
||||||
| **network management tool** | [NetworkManager][NetworkManager] |
|
| **network management tool** | [NetworkManager][NetworkManager] |
|
||||||
| **Input method framework** | [Fcitx5][Fcitx5] |
|
| **Input method framework** | [Fcitx5][Fcitx5] + [rime][rime] + [小鹤音形 flypy][flypy] |
|
||||||
| **System resource monitor** | [Btop][Btop] |
|
| **System resource monitor** | [Btop][Btop] |
|
||||||
| **File Manager** | [Yazi][Yazi] + [thunar][thunar] |
|
| **File Manager** | [Yazi][Yazi] + [thunar][thunar] |
|
||||||
| **Shell** | [Nushell][Nushell] + [Starship][Starship] |
|
| **Shell** | [Nushell][Nushell] + [Starship][Starship] |
|
||||||
@@ -72,18 +70,20 @@ You don't have to go through the pain I've experienced again! Check out my
|
|||||||
| **Text Editor** | [Neovim][Neovim] |
|
| **Text Editor** | [Neovim][Neovim] |
|
||||||
| **Fonts** | [Nerd fonts][Nerd fonts] |
|
| **Fonts** | [Nerd fonts][Nerd fonts] |
|
||||||
| **Image Viewer** | [imv][imv] |
|
| **Image Viewer** | [imv][imv] |
|
||||||
| **Screenshot Software** | [hyprshot][hyprshot] |
|
| **Screenshot Software** | Niri's builtin function |
|
||||||
| **Screen Recording** | [OBS][OBS] |
|
| **Screen Recording** | [OBS][OBS] |
|
||||||
| **Filesystem & Encryption** | tmpfs on `/`, [Btrfs][Btrfs] subvolumes on a [LUKS][LUKS] encrypted partition for persistent, unlock via passphrase |
|
| **Filesystem & Encryption** | tmpfs as `/`, [Btrfs][Btrfs] subvolumes on a [LUKS][LUKS] encrypted partition for persistent, unlock via passphrase |
|
||||||
| **Secure Boot** | [lanzaboote][lanzaboote] |
|
| **Secure Boot** | [lanzaboote][lanzaboote] |
|
||||||
|
|
||||||
Wallpapers: https://github.com/ryan4yin/wallpapers
|
Wallpapers: https://github.com/ryan4yin/wallpapers
|
||||||
|
|
||||||
## Hyprland + AstroNvim
|
## Screenshots
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Neovim
|
## Neovim
|
||||||
|
|
||||||
@@ -109,17 +109,15 @@ For NixOS:
|
|||||||
> To deploy this flake from NixOS's official ISO image (purest installation method), please refer to
|
> To deploy this flake from NixOS's official ISO image (purest installation method), please refer to
|
||||||
> [./nixos-installer/](./nixos-installer/)
|
> [./nixos-installer/](./nixos-installer/)
|
||||||
|
|
||||||
> Need to restart the machine when switching between `wayland` and `xorg`.
|
|
||||||
|
|
||||||
```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 niri nixosConfiguration by hostname match
|
||||||
just hypr # deploy my pc with hyprland compositor
|
just niri
|
||||||
|
|
||||||
# or we can deploy with details
|
# or we can deploy with details
|
||||||
just hypr debug
|
just niri debug
|
||||||
```
|
```
|
||||||
|
|
||||||
For macOS:
|
For macOS:
|
||||||
@@ -132,11 +130,11 @@ nix-shell -p just nushell
|
|||||||
# 3. comment home-manager's code in lib/macosSystem.nix to speed up the first deployment.
|
# 3. comment home-manager's code in lib/macosSystem.nix to speed up the first deployment.
|
||||||
# 4. comment out the proxy settings in scripts/darwin_set_proxy.py if the proxy is not ready yet.
|
# 4. comment out the proxy settings in scripts/darwin_set_proxy.py if the proxy is not ready yet.
|
||||||
|
|
||||||
# deploy fern's configuration(Apple Silicon)
|
# Deploy the darwinConfiguration by hostname match
|
||||||
just fr
|
just local
|
||||||
|
|
||||||
# deploy with details
|
# deploy with details
|
||||||
just fr debug
|
just local debug
|
||||||
```
|
```
|
||||||
|
|
||||||
> [What y'all will need when Nix drives you to drink.](https://www.youtube.com/watch?v=Eni9PPPPBpg)
|
> [What y'all will need when Nix drives you to drink.](https://www.youtube.com/watch?v=Eni9PPPPBpg)
|
||||||
@@ -155,52 +153,43 @@ 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
|
||||||
[Kitty]: https://github.com/kovidgoyal/kitty
|
[Kitty]: https://github.com/kovidgoyal/kitty
|
||||||
|
[foot]: https://codeberg.org/dnkl/foot
|
||||||
|
[Alacritty]: https://github.com/alacritty/alacritty
|
||||||
|
[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
|
||||||
|
[flypy]: https://flypy.cc/
|
||||||
[Btop]: https://github.com/aristocratos/btop
|
[Btop]: https://github.com/aristocratos/btop
|
||||||
[mpv]: https://github.com/mpv-player/mpv
|
[mpv]: https://github.com/mpv-player/mpv
|
||||||
[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]: https://github.com/catppuccin/catppuccin
|
[catppuccin-nix]: https://github.com/catppuccin/nix
|
||||||
[NetworkManager]: https://wiki.gnome.org/Projects/NetworkManager
|
[NetworkManager]: https://wiki.gnome.org/Projects/NetworkManager
|
||||||
[wl-clipboard]: https://github.com/bugaevc/wl-clipboard
|
[wl-clipboard]: https://github.com/bugaevc/wl-clipboard
|
||||||
[GDM]: https://wiki.archlinux.org/title/GDM
|
[tuigreet]: https://github.com/apognu/tuigreet
|
||||||
[thunar]: https://gitlab.xfce.org/xfce/thunar
|
[thunar]: https://gitlab.xfce.org/xfce/thunar
|
||||||
[Yazi]: https://github.com/sxyazi/yazi
|
[Yazi]: https://github.com/sxyazi/yazi
|
||||||
[Catppuccin]: https://github.com/catppuccin/catppuccin
|
[Catppuccin]: https://github.com/catppuccin/catppuccin
|
||||||
[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
|
||||||
|
|||||||
|
After Width: | Height: | Size: 463 KiB |
|
After Width: | Height: | Size: 581 KiB |
|
After Width: | Height: | Size: 588 KiB |
|
Before Width: | Height: | Size: 450 KiB |
|
Before Width: | Height: | Size: 320 KiB |
|
Before Width: | Height: | Size: 359 KiB |
|
Before Width: | Height: | Size: 382 KiB |
|
After Width: | Height: | Size: 13 KiB |
@@ -3,5 +3,21 @@
|
|||||||
This is my private Private Key Infrastructure (PKI) / Certificate Authority (CA) for my personal
|
This is my private Private Key Infrastructure (PKI) / Certificate Authority (CA) for my personal
|
||||||
use. It is used to issue certificates for my own servers and services.
|
use. It is used to issue certificates for my own servers and services.
|
||||||
|
|
||||||
All the private keys are ignored by git, and will be stored in my private secrets repo
|
## Current Structure
|
||||||
[../secrets](../secrets/)
|
|
||||||
|
- **ecc-ca.crt** - ECC CA certificate file
|
||||||
|
- **ecc-ca.srl** - CA serial number file for certificate tracking
|
||||||
|
- **ecc-csr.conf** - OpenSSL configuration file for certificate signing requests
|
||||||
|
- **ecc-server.crt** - Server certificate signed by the ECC CA
|
||||||
|
- **gen-certs.sh** - Shell script to generate certificates automatically
|
||||||
|
|
||||||
|
## Security Notes
|
||||||
|
|
||||||
|
All private keys (`.key` files) are ignored by git and stored in a private secrets repository. The
|
||||||
|
public certificates and configuration files are committed to this repository for reference.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Run `./gen-certs.sh` to generate new certificates using the ECC CA configuration.
|
||||||
|
|
||||||
|
See [../secrets](../secrets/) for the corresponding private key management.
|
||||||
|
|||||||
@@ -16,14 +16,14 @@
|
|||||||
nixConfig = {
|
nixConfig = {
|
||||||
# substituers will be appended to the default substituters when fetching packages
|
# substituers will be appended to the default substituters when fetching packages
|
||||||
extra-substituters = [
|
extra-substituters = [
|
||||||
"https://anyrun.cachix.org"
|
|
||||||
# "https://nix-gaming.cachix.org"
|
# "https://nix-gaming.cachix.org"
|
||||||
# "https://nixpkgs-wayland.cachix.org"
|
# "https://nixpkgs-wayland.cachix.org"
|
||||||
|
# "https://install.determinate.systems"
|
||||||
];
|
];
|
||||||
extra-trusted-public-keys = [
|
extra-trusted-public-keys = [
|
||||||
"anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
|
|
||||||
# "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="
|
# "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="
|
||||||
# "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
|
# "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
|
||||||
|
# "cache.flakehub.com-3:hJuILl5sVK4iKm86JzgdXW12Y2Hwd5G07qKtHTOcDCM="
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -34,15 +34,20 @@
|
|||||||
# 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-unstable.url = "github:nixos/nixpkgs/nixos-unstable-small";
|
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.11";
|
||||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
nixpkgs-2505.url = "github:nixos/nixpkgs/nixos-25.05";
|
||||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
|
|
||||||
|
|
||||||
nixpkgs-ollama.url = "github:nixos/nixpkgs/nixos-unstable";
|
# nixpkgs with some custom patches
|
||||||
|
nixpkgs-patched.url = "github:ryan4yin/nixpkgs/nixos-unstable-patched";
|
||||||
|
# get some latest packages from the master branch
|
||||||
|
nixpkgs-master.url = "github:nixos/nixpkgs/master";
|
||||||
|
|
||||||
# for macos
|
# for macos
|
||||||
# nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-25.05-darwin";
|
# nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-25.11-darwin";
|
||||||
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||||
nix-darwin = {
|
nix-darwin = {
|
||||||
url = "github:lnl7/nix-darwin";
|
url = "github:lnl7/nix-darwin";
|
||||||
@@ -52,7 +57,7 @@
|
|||||||
# home-manager, used for managing user configuration
|
# home-manager, used for managing user configuration
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager/master";
|
url = "github:nix-community/home-manager/master";
|
||||||
# url = "github:nix-community/home-manager/release-25.05";
|
# url = "github:nix-community/home-manager/release-25.11";
|
||||||
|
|
||||||
# The `follows` keyword in inputs is used for inheritance.
|
# The `follows` keyword in inputs is used for inheritance.
|
||||||
# Here, `inputs.nixpkgs` of home-manager is kept consistent with the `inputs.nixpkgs` of the current flake,
|
# Here, `inputs.nixpkgs` of home-manager is kept consistent with the `inputs.nixpkgs` of the current flake,
|
||||||
@@ -67,7 +72,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
lanzaboote = {
|
lanzaboote = {
|
||||||
url = "github:nix-community/lanzaboote/v0.4.2";
|
url = "github:nix-community/lanzaboote/v0.4.3";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -75,14 +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:Kirottu/anyrun";
|
|
||||||
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";
|
||||||
@@ -97,11 +94,6 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
nix-gaming = {
|
|
||||||
url = "github:fufexan/nix-gaming";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
disko = {
|
disko = {
|
||||||
url = "github:nix-community/disko/v1.11.0";
|
url = "github:nix-community/disko/v1.11.0";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
@@ -129,7 +121,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
ghostty = {
|
ghostty = {
|
||||||
url = "github:ghostty-org/ghostty";
|
url = "github:ghostty-org/ghostty/tip"; # Latest Continuous Release
|
||||||
};
|
};
|
||||||
|
|
||||||
blender-bin = {
|
blender-bin = {
|
||||||
@@ -138,15 +130,38 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
nixos-apple-silicon = {
|
nixos-apple-silicon = {
|
||||||
# 2025-07-04
|
# asahi-6.17.7-2
|
||||||
url = "github:nix-community/nixos-apple-silicon/eba4b40c816e5aff8951ae231ac237e8aab8ec1d";
|
url = "github:nix-community/nixos-apple-silicon";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
helix = {
|
||||||
|
# Helix with steel as plugin system
|
||||||
|
# https://github.com/helix-editor/helix/pull/8675
|
||||||
|
url = "github:mattwparas/helix/steel-event-system";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
dms = {
|
||||||
|
url = "github:AvengeMedia/DankMaterialShell/stable";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
# -------------- Gaming ---------------------
|
||||||
|
|
||||||
|
nix-gaming = {
|
||||||
|
url = "github:fufexan/nix-gaming";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
aagl = {
|
||||||
|
url = "github:ezKEa/aagl-gtk-on-nix/release-25.11";
|
||||||
|
# inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
######################## Some non-flake repositories #########################################
|
######################## Some non-flake repositories #########################################
|
||||||
|
|
||||||
polybar-themes = {
|
nu_scripts = {
|
||||||
url = "github:adi1090x/polybar-themes";
|
url = "github:ryan4yin/nu_scripts";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -12,14 +12,53 @@
|
|||||||
1. Accessing the network when they don't need to.
|
1. Accessing the network when they don't need to.
|
||||||
1. Accessing hardware devices they don't need.
|
1. Accessing hardware devices they don't need.
|
||||||
|
|
||||||
## Current Status
|
## Current Structure
|
||||||
|
|
||||||
1. **System Level**:
|
### 1. **System Level**
|
||||||
- [ ] AppArmor
|
|
||||||
- [ ] Kernel & System Hardening
|
- **AppArmor** (`apparmor/`): AppArmor profiles and configuration
|
||||||
1. **Per-App Level**:
|
- **Kernel & System Hardening** (`profiles/`): System-wide hardening profiles
|
||||||
- Nixpak (Bubblewrap, running at user-level)
|
|
||||||
- Firejail (a SUID program, meaning it's running as root)
|
### 2. **Per-App Level**
|
||||||
|
|
||||||
|
- **Nixpak** (`nixpaks/`): Bubblewrap-based sandboxing for applications
|
||||||
|
- Firefox configuration
|
||||||
|
- QQ (Chinese messaging app) configuration
|
||||||
|
- Modular system with reusable components
|
||||||
|
- **Firejail** (legacy): SUID-based sandboxing (not used)
|
||||||
|
- **Bubblewrap** (`bwraps/`): Direct bubblewrap configurations
|
||||||
|
- WeChat sandboxing configuration
|
||||||
|
|
||||||
|
## Current Implementation Status
|
||||||
|
|
||||||
|
| Component | Status | Notes |
|
||||||
|
| ----------------- | --------- | ------------------------------ |
|
||||||
|
| AppArmor Profiles | 🚧 WIP | Basic structure in place |
|
||||||
|
| Nixpak Firefox | ✅ Active | Firefox sandboxing via nixpak |
|
||||||
|
| Nixpak QQ | ✅ Active | QQ application sandboxing |
|
||||||
|
| Bubblewrap WeChat | ✅ Active | WeChat specific sandboxing |
|
||||||
|
| System Profiles | 🚧 WIP | Hardened system configurations |
|
||||||
|
|
||||||
|
## Directory Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
hardening/
|
||||||
|
├── README.md
|
||||||
|
├── apparmor/ # AppArmor security profiles
|
||||||
|
│ └── default.nix
|
||||||
|
├── bwraps/ # Direct bubblewrap configurations
|
||||||
|
│ ├── default.nix
|
||||||
|
│ └── wechat.nix
|
||||||
|
├── nixpaks/ # Nixpak application sandboxing
|
||||||
|
│ ├── default.nix
|
||||||
|
│ ├── firefox.nix
|
||||||
|
│ ├── qq.nix
|
||||||
|
│ └── modules/ # Reusable nixpak modules
|
||||||
|
│ ├── gui-base.nix
|
||||||
|
│ └── network.nix
|
||||||
|
└── profiles/ # System hardening profiles
|
||||||
|
└── default.nix
|
||||||
|
```
|
||||||
|
|
||||||
## Kernel Hardening
|
## Kernel Hardening
|
||||||
|
|
||||||
@@ -69,13 +108,6 @@ provide a much higher level of security.
|
|||||||
- [Paranoid NixOS Setup - xeiaso](https://xeiaso.net/blog/paranoid-nixos-2021-07-18/)
|
- [Paranoid NixOS Setup - xeiaso](https://xeiaso.net/blog/paranoid-nixos-2021-07-18/)
|
||||||
- [nix-mineral](https://github.com/cynicsketch/nix-mineral): NixOS module for convenient system
|
- [nix-mineral](https://github.com/cynicsketch/nix-mineral): NixOS module for convenient system
|
||||||
hardening.
|
hardening.
|
||||||
- nixpak configs:
|
|
||||||
- https://github.com/pokon548/OysterOS/tree/b97604d89953373d6316286b96f6a964af2c398d/desktop/application
|
|
||||||
- https://github.com/segment-tree/my-nixos/tree/ceb6041f73bd9edcb78a8818b27a28f7c629193b/hm/me/apps/nixpak
|
|
||||||
- https://github.com/Keksgesicht/nixos-config/tree/91cc77d8d6b598da7c4dbed143e0009c2dea6940/packages/nixpak
|
|
||||||
- https://github.com/bluskript/nix-config/blob/7ecb6a7254c1ac4969072f4c4febdc19f8b83b30/pkgs/nixpak/default.nix
|
|
||||||
- firejail configs:
|
|
||||||
- https://github.com/stelcodes/nixos-config/blob/f8967c82a5e5f3d128eb1aaf7498b5f918f719ec/packages/overlay.nix#L261
|
|
||||||
- apparmor configs:
|
- apparmor configs:
|
||||||
- https://github.com/zramctl/dotfiles/blob/4fe177f6984154960942bb47d5a375098ec6ed6a/modules/nixos/security/apparmor.nix#L4
|
- https://github.com/zramctl/dotfiles/blob/4fe177f6984154960942bb47d5a375098ec6ed6a/modules/nixos/security/apparmor.nix#L4
|
||||||
- https://git.grimmauld.de/Grimmauld/grimm-nixos-laptop/src/branch/main/hardening
|
- https://git.grimmauld.de/Grimmauld/grimm-nixos-laptop/src/branch/main/hardening
|
||||||
|
|||||||
@@ -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,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
|
pkgs-master,
|
||||||
nixpak,
|
nixpak,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
@@ -14,21 +15,16 @@ let
|
|||||||
(sloth.concat' sloth.homeDir mapdir)
|
(sloth.concat' sloth.homeDir mapdir)
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
wrapper = _pkgs: path: (_pkgs.callPackage path callArgs).config.script;
|
wrapper = _pkgs: path: (_pkgs.callPackage path callArgs);
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# Add nixpaked Apps into nixpkgs, and reference them in home-manager or other nixos modules
|
# Add nixpaked Apps into nixpkgs, and reference them in home-manager or other nixos modules
|
||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [
|
||||||
(_: super: {
|
(_: super: {
|
||||||
nixpaks = {
|
nixpaks = {
|
||||||
qq = wrapper super ./qq.nix;
|
qq = wrapper pkgs-master ./qq.nix;
|
||||||
qq-desktop-item = super.callPackage ./qq-desktop-item.nix { };
|
telegram-desktop = wrapper super ./telegram-desktop.nix;
|
||||||
|
|
||||||
wechat = wrapper super ./wechat.nix;
|
|
||||||
wechat-desktop-item = super.callPackage ./wechat-desktop-item.nix { };
|
|
||||||
|
|
||||||
firefox = wrapper super ./firefox.nix;
|
firefox = wrapper super ./firefox.nix;
|
||||||
firefox-desktop-item = super.callPackage ./firefox-desktop-item.nix { };
|
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
{ makeDesktopItem }:
|
|
||||||
makeDesktopItem {
|
|
||||||
name = "firefox";
|
|
||||||
desktopName = "firefox";
|
|
||||||
exec = "firefox %U";
|
|
||||||
terminal = false;
|
|
||||||
icon = "firefox";
|
|
||||||
type = "Application";
|
|
||||||
categories = [ "Network" ];
|
|
||||||
comment = "firefox boxed";
|
|
||||||
}
|
|
||||||
@@ -5,11 +5,16 @@
|
|||||||
# - Firefox's flatpak manifest: https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/docker/firefox-flatpak/runme.sh#l151
|
# - Firefox's flatpak manifest: https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/docker/firefox-flatpak/runme.sh#l151
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
firefox,
|
||||||
mkNixPak,
|
mkNixPak,
|
||||||
|
buildEnv,
|
||||||
|
makeDesktopItem,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
mkNixPak {
|
|
||||||
|
let
|
||||||
|
appId = "org.mozilla.firefox";
|
||||||
|
wrapped = mkNixPak {
|
||||||
config =
|
config =
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
@@ -18,37 +23,19 @@ mkNixPak {
|
|||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
app = {
|
app = {
|
||||||
package = pkgs.firefox-wayland;
|
package = firefox;
|
||||||
binPath = "bin/firefox";
|
binPath = "bin/firefox";
|
||||||
};
|
};
|
||||||
flatpak.appId = "org.mozilla.firefox";
|
flatpak.appId = appId;
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
./modules/gui-base.nix
|
./modules/gui-base.nix
|
||||||
./modules/network.nix
|
./modules/network.nix
|
||||||
|
./modules/common.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# list all dbus services:
|
|
||||||
# ls -al /run/current-system/sw/share/dbus-1/services/
|
|
||||||
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
|
|
||||||
dbus.policies = {
|
|
||||||
"org.mozilla.firefox.*" = "own"; # firefox
|
|
||||||
"org.mozilla.firefox_beta.*" = "own"; # firefox beta
|
|
||||||
"org.mpris.MediaPlayer2.firefox.*" = "own";
|
|
||||||
"org.freedesktop.NetworkManager" = "talk";
|
|
||||||
|
|
||||||
"org.gnome.Shell.Screencast" = "talk";
|
|
||||||
# System tray icon
|
|
||||||
"org.freedesktop.Notifications" = "talk";
|
|
||||||
"org.kde.StatusNotifierWatcher" = "talk";
|
|
||||||
# File Manager
|
|
||||||
"org.freedesktop.FileManager1" = "talk";
|
|
||||||
# Uses legacy StatusNotifier implementation
|
|
||||||
"org.kde.*" = "own";
|
|
||||||
};
|
|
||||||
|
|
||||||
bubblewrap = {
|
bubblewrap = {
|
||||||
# To trace all the home files QQ accesses, you can use the following nushell command:
|
# To trace all the home files Firefox accesses, you can use the following nushell command:
|
||||||
# just trace-access firefox
|
# just trace-access firefox
|
||||||
# See the Justfile in the root of this repository for more information.
|
# See the Justfile in the root of this repository for more information.
|
||||||
bind.rw = [
|
bind.rw = [
|
||||||
@@ -60,6 +47,7 @@ mkNixPak {
|
|||||||
sloth.xdgDownloadDir
|
sloth.xdgDownloadDir
|
||||||
sloth.xdgMusicDir
|
sloth.xdgMusicDir
|
||||||
sloth.xdgVideosDir
|
sloth.xdgVideosDir
|
||||||
|
sloth.xdgPicturesDir
|
||||||
];
|
];
|
||||||
bind.ro = [
|
bind.ro = [
|
||||||
"/sys/bus/pci"
|
"/sys/bus/pci"
|
||||||
@@ -85,4 +73,55 @@ mkNixPak {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
exePath = lib.getExe wrapped.config.script;
|
||||||
|
in
|
||||||
|
buildEnv {
|
||||||
|
inherit (wrapped.config.script) name meta passthru;
|
||||||
|
paths = [
|
||||||
|
wrapped.config.script
|
||||||
|
(makeDesktopItem {
|
||||||
|
name = appId;
|
||||||
|
desktopName = "Firefox";
|
||||||
|
genericName = "Firefox Boxed";
|
||||||
|
comment = "Firefox Browser";
|
||||||
|
exec = "${exePath} %U";
|
||||||
|
terminal = false;
|
||||||
|
icon = "firefox";
|
||||||
|
startupNotify = true;
|
||||||
|
startupWMClass = "firefox";
|
||||||
|
type = "Application";
|
||||||
|
categories = [
|
||||||
|
"Network"
|
||||||
|
"WebBrowser"
|
||||||
|
];
|
||||||
|
mimeTypes = [
|
||||||
|
"text/html"
|
||||||
|
"text/xml"
|
||||||
|
"application/xhtml+xml"
|
||||||
|
"application/vnd.mozilla.xul+xml"
|
||||||
|
"x-scheme-handler/http"
|
||||||
|
"x-scheme-handler/https"
|
||||||
|
];
|
||||||
|
|
||||||
|
actions = {
|
||||||
|
new-private-window = {
|
||||||
|
name = "New Private Window";
|
||||||
|
exec = "${exePath} --private-window %U";
|
||||||
|
};
|
||||||
|
new-window = {
|
||||||
|
name = "New Window";
|
||||||
|
exec = "${exePath} --new-window %U";
|
||||||
|
};
|
||||||
|
profile-manager-window = {
|
||||||
|
name = "Profile Manager";
|
||||||
|
exec = "${exePath} --ProfileManager";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = {
|
||||||
|
X-Flatpak = appId;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,234 @@
|
|||||||
|
# https://github.com/mnixry/nixos-config/blob/74913c2b90d06e31170bbbaa0074f915721da224/desktop/packages/nixpaks-common.nix
|
||||||
|
# https://github.com/Kraftland/portable/blob/09c4a4227538a3f42de208a6ecbdc938ac9c00dd/portable.sh
|
||||||
|
# https://flatpak.github.io/xdg-desktop-portal/docs/api-reference.html
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
sloth,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (config.flatpak) appId;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
# list all dbus services:
|
||||||
|
# ls -al /run/current-system/sw/share/dbus-1/services/
|
||||||
|
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
|
||||||
|
dbus = {
|
||||||
|
# `--see`: The bus name can be enumerated by the application.
|
||||||
|
# `--talk`: The application can send messages to, and receive replies and signals from, the bus name.
|
||||||
|
# `--own`: The application can own the bus name
|
||||||
|
policies = {
|
||||||
|
"${appId}" = "own";
|
||||||
|
"${appId}.*" = "own";
|
||||||
|
"org.freedesktop.DBus" = "talk";
|
||||||
|
"ca.desrt.dconf" = "talk";
|
||||||
|
"org.freedesktop.appearance" = "talk";
|
||||||
|
"org.freedesktop.appearance.*" = "talk";
|
||||||
|
}
|
||||||
|
// (builtins.listToAttrs (
|
||||||
|
map (id: lib.nameValuePair "org.kde.StatusNotifierItem-${toString id}-1" "own") (
|
||||||
|
lib.lists.range 2 29
|
||||||
|
)
|
||||||
|
))
|
||||||
|
// {
|
||||||
|
# --- MPRIS Media Control ---
|
||||||
|
# Allows the app to register as a media player. These are derived from the appID.
|
||||||
|
"org.mpris.MediaPlayer2.${appId}" = "own";
|
||||||
|
"org.mpris.MediaPlayer2.${appId}.*" = "own";
|
||||||
|
"org.mpris.MediaPlayer2.${lib.lists.last (lib.strings.splitString "." appId)}" = "own";
|
||||||
|
"org.mpris.MediaPlayer2.${lib.lists.last (lib.strings.splitString "." appId)}.*" = "own";
|
||||||
|
|
||||||
|
# --- General Desktop Integration ---
|
||||||
|
"com.canonical.AppMenu.Registrar" = "talk"; # For Ubuntu AppMenu
|
||||||
|
"org.freedesktop.FileManager1" = "talk";
|
||||||
|
"org.freedesktop.Notifications" = "talk";
|
||||||
|
"org.kde.StatusNotifierWatcher" = "talk";
|
||||||
|
"org.gnome.Shell.Screencast" = "talk";
|
||||||
|
|
||||||
|
# --- Accessibility (a11y) 无障碍服务 ---
|
||||||
|
"org.a11y.Bus" = "see";
|
||||||
|
|
||||||
|
# --- Portal Access ---
|
||||||
|
# "org.freedesktop.portal.*" = "talk";
|
||||||
|
"org.freedesktop.portal.Documents" = "talk";
|
||||||
|
"org.freedesktop.portal.FileTransfer" = "talk";
|
||||||
|
"org.freedesktop.portal.FileTransfer.*" = "talk";
|
||||||
|
"org.freedesktop.portal.Notification" = "talk";
|
||||||
|
"org.freedesktop.portal.OpenURI" = "talk";
|
||||||
|
"org.freedesktop.portal.OpenURI.OpenFile" = "talk";
|
||||||
|
"org.freedesktop.portal.OpenURI.OpenURI" = "talk";
|
||||||
|
"org.freedesktop.portal.Print" = "talk";
|
||||||
|
"org.freedesktop.portal.Request" = "see";
|
||||||
|
|
||||||
|
# --- Input Method Portals ---
|
||||||
|
"org.freedesktop.portal.Fcitx" = "talk";
|
||||||
|
"org.freedesktop.portal.Fcitx.*" = "talk";
|
||||||
|
"org.freedesktop.portal.IBus" = "talk";
|
||||||
|
"org.freedesktop.portal.IBus.*" = "talk";
|
||||||
|
};
|
||||||
|
# '--call' rules permit specific method calls on D-Bus interfaces.
|
||||||
|
rules.call = {
|
||||||
|
# --- Accessibility (a11y) 无障碍服务 ---
|
||||||
|
"org.a11y.Bus" = [
|
||||||
|
"org.a11y.Bus.GetAddress@/org/a11y/bus"
|
||||||
|
"org.freedesktop.DBus.Properties.Get@/org/a11y/bus"
|
||||||
|
];
|
||||||
|
|
||||||
|
# --- General Portal Rules ---
|
||||||
|
"org.freedesktop.FileManager1" = [ "*" ];
|
||||||
|
"org.freedesktop.Notifications.*" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.Documents" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.FileTransfer" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.FileTransfer.*" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.Fcitx" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.Fcitx.*" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.IBus" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.IBus.*" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.Notification" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.OpenURI" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.OpenURI.OpenFile" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.OpenURI.OpenURI" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.Print" = [ "*" ];
|
||||||
|
"org.freedesktop.portal.Request" = [ "*" ];
|
||||||
|
|
||||||
|
# --- Main Desktop Portal Interface ---
|
||||||
|
# A comprehensive list of permissions for interacting with the desktop environment.
|
||||||
|
"org.freedesktop.portal.Desktop" = [
|
||||||
|
# Properties & Settings
|
||||||
|
"org.freedesktop.DBus.Properties.GetAll"
|
||||||
|
"org.freedesktop.DBus.Properties.Get@/org/freedesktop/portal/desktop"
|
||||||
|
"org.freedesktop.portal.Session.Close"
|
||||||
|
"org.freedesktop.portal.Settings.ReadAll"
|
||||||
|
"org.freedesktop.portal.Settings.Read"
|
||||||
|
"org.freedesktop.portal.Account.GetUserInformation"
|
||||||
|
|
||||||
|
# Network & Proxy
|
||||||
|
"org.freedesktop.portal.NetworkMonitor"
|
||||||
|
"org.freedesktop.portal.NetworkMonitor.*"
|
||||||
|
"org.freedesktop.portal.ProxyResolver.Lookup"
|
||||||
|
"org.freedesktop.portal.ProxyResolver.Lookup.*"
|
||||||
|
|
||||||
|
# Screenshot / Screen Capture & Sharing
|
||||||
|
"org.freedesktop.portal.ScreenCast"
|
||||||
|
"org.freedesktop.portal.ScreenCast.*"
|
||||||
|
"org.freedesktop.portal.Screenshot"
|
||||||
|
"org.freedesktop.portal.Screenshot.Screenshot"
|
||||||
|
|
||||||
|
# Device Access(Camera / USB)
|
||||||
|
"org.freedesktop.portal.Camera"
|
||||||
|
"org.freedesktop.portal.Camera.*"
|
||||||
|
"org.freedesktop.portal.Usb"
|
||||||
|
"org.freedesktop.portal.Usb.*"
|
||||||
|
|
||||||
|
# Remote Desktop
|
||||||
|
"org.freedesktop.portal.RemoteDesktop"
|
||||||
|
"org.freedesktop.portal.RemoteDesktop.*"
|
||||||
|
|
||||||
|
# File Operations
|
||||||
|
"org.freedesktop.portal.Documents"
|
||||||
|
"org.freedesktop.portal.Documents.*"
|
||||||
|
"org.freedesktop.portal.FileChooser"
|
||||||
|
"org.freedesktop.portal.FileChooser.*"
|
||||||
|
"org.freedesktop.portal.FileTransfer"
|
||||||
|
"org.freedesktop.portal.FileTransfer.*"
|
||||||
|
|
||||||
|
# Notifications & Printing
|
||||||
|
"org.freedesktop.portal.Notification"
|
||||||
|
"org.freedesktop.portal.Notification.*"
|
||||||
|
"org.freedesktop.portal.Print"
|
||||||
|
"org.freedesktop.portal.Print.*"
|
||||||
|
|
||||||
|
# Open/Launch Handlers
|
||||||
|
"org.freedesktop.portal.OpenURI"
|
||||||
|
"org.freedesktop.portal.OpenURI.*"
|
||||||
|
"org.freedesktop.portal.Email.ComposeEmail"
|
||||||
|
|
||||||
|
# Input Methods
|
||||||
|
"org.freedesktop.portal.Fcitx"
|
||||||
|
"org.freedesktop.portal.Fcitx.*"
|
||||||
|
"org.freedesktop.portal.IBus"
|
||||||
|
"org.freedesktop.portal.IBus.*"
|
||||||
|
|
||||||
|
# Secrets (Keyring)
|
||||||
|
"org.freedesktop.portal.Secret"
|
||||||
|
"org.freedesktop.portal.Secret.RetrieveSecret"
|
||||||
|
|
||||||
|
# Get/Update GlobalShortcuts
|
||||||
|
# "org.freedesktop.portal.GlobalShortcuts"
|
||||||
|
# "org.freedesktop.portal.GlobalShortcuts.*"
|
||||||
|
|
||||||
|
# -- get the user's location
|
||||||
|
# "org.freedesktop.portal.Location"
|
||||||
|
# "org.freedesktop.portal.Location.*"
|
||||||
|
|
||||||
|
# -- inhibit the user session from ending, suspending, idling or getting switched away.
|
||||||
|
"org.freedesktop.portal.Inhibit"
|
||||||
|
"org.freedesktop.portal.Inhibit.*"
|
||||||
|
|
||||||
|
# Generic Request Fallback
|
||||||
|
"org.freedesktop.portal.Request"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# 'broadcast' rules permit receiving signals from D-Bus names.
|
||||||
|
rules.broadcast = {
|
||||||
|
"org.freedesktop.portal.*" = [ "@/org/freedesktop/portal/*" ];
|
||||||
|
};
|
||||||
|
args = [
|
||||||
|
"--filter"
|
||||||
|
"--sloppy-names"
|
||||||
|
"--log"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
etc.sslCertificates.enable = true;
|
||||||
|
bubblewrap = {
|
||||||
|
network = lib.mkDefault true;
|
||||||
|
sockets = {
|
||||||
|
wayland = true;
|
||||||
|
pulse = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
bind.rw = with sloth; [
|
||||||
|
[
|
||||||
|
(mkdir appDataDir)
|
||||||
|
xdgDataHome
|
||||||
|
]
|
||||||
|
[
|
||||||
|
(mkdir appConfigDir)
|
||||||
|
xdgConfigHome
|
||||||
|
]
|
||||||
|
[
|
||||||
|
(mkdir appCacheDir)
|
||||||
|
xdgCacheHome
|
||||||
|
]
|
||||||
|
|
||||||
|
(sloth.concat [
|
||||||
|
sloth.runtimeDir
|
||||||
|
"/"
|
||||||
|
(sloth.envOr "WAYLAND_DISPLAY" "no")
|
||||||
|
])
|
||||||
|
(sloth.concat' sloth.runtimeDir "/at-spi/bus")
|
||||||
|
(sloth.concat' sloth.runtimeDir "/gvfsd")
|
||||||
|
(sloth.concat' sloth.runtimeDir "/dconf")
|
||||||
|
|
||||||
|
(sloth.concat' sloth.xdgCacheHome "/fontconfig")
|
||||||
|
(sloth.concat' sloth.xdgCacheHome "/mesa_shader_cache")
|
||||||
|
(sloth.concat' sloth.xdgCacheHome "/mesa_shader_cache_db")
|
||||||
|
(sloth.concat' sloth.xdgCacheHome "/radv_builtin_shaders")
|
||||||
|
];
|
||||||
|
bind.ro = [
|
||||||
|
(sloth.concat' sloth.runtimeDir "/doc")
|
||||||
|
(sloth.concat' sloth.xdgConfigHome "/kdeglobals")
|
||||||
|
(sloth.concat' sloth.xdgConfigHome "/gtk-2.0")
|
||||||
|
(sloth.concat' sloth.xdgConfigHome "/gtk-3.0")
|
||||||
|
(sloth.concat' sloth.xdgConfigHome "/gtk-4.0")
|
||||||
|
(sloth.concat' sloth.xdgConfigHome "/fontconfig")
|
||||||
|
(sloth.concat' sloth.xdgConfigHome "/dconf")
|
||||||
|
];
|
||||||
|
bind.dev = [ "/dev/shm" ] ++ (map (id: "/dev/video${toString id}") (lib.lists.range 0 9));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -16,15 +16,7 @@ in
|
|||||||
config = {
|
config = {
|
||||||
dbus.policies = {
|
dbus.policies = {
|
||||||
"${config.flatpak.appId}" = "own";
|
"${config.flatpak.appId}" = "own";
|
||||||
"org.freedesktop.DBus" = "talk";
|
# we add other policies in ./common.nix
|
||||||
"org.gtk.vfs.*" = "talk";
|
|
||||||
"org.gtk.vfs" = "talk";
|
|
||||||
"ca.desrt.dconf" = "talk";
|
|
||||||
"org.a11y.Bus" = "talk";
|
|
||||||
|
|
||||||
# for default portal & gtk/hyprland's portal
|
|
||||||
"org.freedesktop.portal.*" = "talk";
|
|
||||||
"org.freedesktop.impl.portal.desktop.*" = "talk";
|
|
||||||
};
|
};
|
||||||
# https://github.com/nixpak/nixpak/blob/master/modules/gpu.nix
|
# https://github.com/nixpak/nixpak/blob/master/modules/gpu.nix
|
||||||
# 1. bind readonly - /run/opengl-driver
|
# 1. bind readonly - /run/opengl-driver
|
||||||
@@ -69,8 +61,8 @@ in
|
|||||||
(sloth.concat' sloth.xdgConfigHome "/fontconfig")
|
(sloth.concat' sloth.xdgConfigHome "/fontconfig")
|
||||||
|
|
||||||
"/etc/fonts" # for fontconfig
|
"/etc/fonts" # for fontconfig
|
||||||
"/etc/machine-id"
|
"/etc/localtime" # this is a symlink to /etc/zoneinfo/xxx
|
||||||
"/etc/localtime"
|
"/etc/zoneinfo"
|
||||||
|
|
||||||
# Fix: libEGL warning: egl: failed to create dri2 screen
|
# Fix: libEGL warning: egl: failed to create dri2 screen
|
||||||
"/etc/egl"
|
"/etc/egl"
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
makeDesktopItem,
|
|
||||||
qq,
|
|
||||||
}:
|
|
||||||
makeDesktopItem {
|
|
||||||
name = "qq";
|
|
||||||
desktopName = "QQ";
|
|
||||||
exec = "${qq}/bin/qq %U";
|
|
||||||
terminal = false;
|
|
||||||
# To find the icon name(nushell):
|
|
||||||
# let p = NIXPKGS_ALLOW_UNFREE=1 nix eval --impure nixpkgs#qq.outPath | str trim --char '"'
|
|
||||||
# tree $"($p)/share/icons"
|
|
||||||
icon = "${qq}/share/icons/hicolor/512x512/apps/qq.png";
|
|
||||||
type = "Application";
|
|
||||||
categories = [ "Network" ];
|
|
||||||
comment = "QQ boxed";
|
|
||||||
}
|
|
||||||
@@ -5,59 +5,42 @@
|
|||||||
# - QQ's flatpak manifest: https://github.com/flathub/com.qq.QQ/blob/master/com.qq.QQ.yaml
|
# - QQ's flatpak manifest: https://github.com/flathub/com.qq.QQ/blob/master/com.qq.QQ.yaml
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
qq,
|
||||||
mkNixPak,
|
mkNixPak,
|
||||||
|
buildEnv,
|
||||||
|
makeDesktopItem,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
mkNixPak {
|
|
||||||
|
let
|
||||||
|
appId = "com.qq.QQ";
|
||||||
|
|
||||||
|
wrapped = mkNixPak {
|
||||||
config =
|
config =
|
||||||
{ sloth, ... }:
|
{ sloth, ... }:
|
||||||
{
|
{
|
||||||
app = {
|
app = {
|
||||||
package = pkgs.qq.override {
|
package = qq;
|
||||||
# fix fcitx5 input method
|
|
||||||
commandLineArgs = lib.concatStringsSep " " [ "--enable-wayland-ime" ];
|
|
||||||
};
|
|
||||||
binPath = "bin/qq";
|
binPath = "bin/qq";
|
||||||
};
|
};
|
||||||
flatpak.appId = "com.tencent.qq";
|
flatpak.appId = appId;
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
./modules/gui-base.nix
|
./modules/gui-base.nix
|
||||||
./modules/network.nix
|
./modules/network.nix
|
||||||
|
./modules/common.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# list all dbus services:
|
|
||||||
# ls -al /run/current-system/sw/share/dbus-1/services/
|
|
||||||
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
|
|
||||||
dbus.policies = {
|
|
||||||
"org.gnome.Shell.Screencast" = "talk";
|
|
||||||
# System tray icon
|
|
||||||
"org.freedesktop.Notifications" = "talk";
|
|
||||||
"org.kde.StatusNotifierWatcher" = "talk";
|
|
||||||
# File Manager
|
|
||||||
"org.freedesktop.FileManager1" = "talk";
|
|
||||||
# Uses legacy StatusNotifier implementation
|
|
||||||
"org.kde.*" = "own";
|
|
||||||
};
|
|
||||||
bubblewrap = {
|
bubblewrap = {
|
||||||
# To trace all the home files QQ accesses, you can use the following nushell command:
|
# To trace all the home files QQ accesses, you can use the following nushell command:
|
||||||
# just trace-access qq
|
# just trace-access qq
|
||||||
# See the Justfile in the root of this repository for more information.
|
# See the Justfile in the root of this repository for more information.
|
||||||
bind.rw = [
|
bind.rw = [
|
||||||
# given the read write permission to the following directories.
|
|
||||||
# NOTE: sloth.mkdir is used to create the directory if it does not exist!
|
|
||||||
(sloth.mkdir (
|
|
||||||
sloth.concat [
|
|
||||||
sloth.xdgConfigHome
|
|
||||||
"/QQ"
|
|
||||||
]
|
|
||||||
))
|
|
||||||
|
|
||||||
sloth.xdgDocumentsDir
|
sloth.xdgDocumentsDir
|
||||||
sloth.xdgDownloadDir
|
sloth.xdgDownloadDir
|
||||||
sloth.xdgMusicDir
|
sloth.xdgMusicDir
|
||||||
sloth.xdgVideosDir
|
sloth.xdgVideosDir
|
||||||
|
sloth.xdgPicturesDir
|
||||||
];
|
];
|
||||||
sockets = {
|
sockets = {
|
||||||
x11 = false;
|
x11 = false;
|
||||||
@@ -66,4 +49,31 @@ mkNixPak {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
exePath = lib.getExe wrapped.config.script;
|
||||||
|
in
|
||||||
|
buildEnv {
|
||||||
|
inherit (wrapped.config.script) name meta passthru;
|
||||||
|
paths = [
|
||||||
|
wrapped.config.script
|
||||||
|
(makeDesktopItem {
|
||||||
|
name = appId;
|
||||||
|
desktopName = "QQ";
|
||||||
|
genericName = "QQ Boxed";
|
||||||
|
comment = "Tencent QQ, also known as QQ, is an instant messaging software service and web portal developed by the Chinese technology company Tencent.";
|
||||||
|
exec = "${exePath} %U";
|
||||||
|
terminal = false;
|
||||||
|
icon = "${qq}/share/icons/hicolor/512x512/apps/qq.png";
|
||||||
|
startupNotify = true;
|
||||||
|
startupWMClass = "QQ";
|
||||||
|
type = "Application";
|
||||||
|
categories = [
|
||||||
|
"InstantMessaging"
|
||||||
|
"Network"
|
||||||
|
];
|
||||||
|
extraConfig = {
|
||||||
|
X-Flatpak = appId;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
telegram-desktop,
|
||||||
|
buildEnv,
|
||||||
|
mkNixPak,
|
||||||
|
makeDesktopItem,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
appId = "org.telegram.desktop";
|
||||||
|
wrapped = mkNixPak {
|
||||||
|
config =
|
||||||
|
{ sloth, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./modules/gui-base.nix
|
||||||
|
./modules/network.nix
|
||||||
|
./modules/common.nix
|
||||||
|
];
|
||||||
|
app.package = telegram-desktop;
|
||||||
|
flatpak = {
|
||||||
|
appId = appId;
|
||||||
|
};
|
||||||
|
dbus = {
|
||||||
|
enable = true;
|
||||||
|
policies = {
|
||||||
|
"com.canonical.indicator.application" = "talk";
|
||||||
|
"org.ayatana.indicator.application" = "talk";
|
||||||
|
"org.sigxcpu.Feedback" = "talk";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
bubblewrap = {
|
||||||
|
bind.rw = [
|
||||||
|
sloth.xdgDocumentsDir
|
||||||
|
sloth.xdgDownloadDir
|
||||||
|
sloth.xdgMusicDir
|
||||||
|
sloth.xdgVideosDir
|
||||||
|
sloth.xdgPicturesDir
|
||||||
|
];
|
||||||
|
sockets = {
|
||||||
|
x11 = false;
|
||||||
|
wayland = true;
|
||||||
|
pipewire = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exePath = lib.getExe wrapped.config.script;
|
||||||
|
in
|
||||||
|
buildEnv {
|
||||||
|
inherit (wrapped.config.script) name meta passthru;
|
||||||
|
paths = [
|
||||||
|
wrapped.config.script
|
||||||
|
(makeDesktopItem {
|
||||||
|
name = appId;
|
||||||
|
desktopName = "Telegram";
|
||||||
|
comment = "New era of messaging";
|
||||||
|
tryExec = "${exePath}";
|
||||||
|
exec = "${exePath} -- %u";
|
||||||
|
icon = appId;
|
||||||
|
startupNotify = true;
|
||||||
|
startupWMClass = appId;
|
||||||
|
terminal = false;
|
||||||
|
type = "Application";
|
||||||
|
categories = [
|
||||||
|
"Chat"
|
||||||
|
"Network"
|
||||||
|
"InstantMessaging"
|
||||||
|
"Qt"
|
||||||
|
];
|
||||||
|
mimeTypes = [
|
||||||
|
"x-scheme-handler/tg"
|
||||||
|
"x-scheme-handler/tonsite"
|
||||||
|
];
|
||||||
|
keywords = [
|
||||||
|
"tg"
|
||||||
|
"chat"
|
||||||
|
"im"
|
||||||
|
"messaging"
|
||||||
|
"messenger"
|
||||||
|
"sms"
|
||||||
|
"tdesktop"
|
||||||
|
];
|
||||||
|
actions = {
|
||||||
|
quit = {
|
||||||
|
name = "Quit Telegram";
|
||||||
|
exec = "${exePath} -quit";
|
||||||
|
icon = "application-exit";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extraConfig = {
|
||||||
|
X-Flatpak = appId;
|
||||||
|
DBusActivatable = "true";
|
||||||
|
SingleMainWindow = "true";
|
||||||
|
X-GNOME-UsesNotifications = "true";
|
||||||
|
X-GNOME-SingleWindow = "true";
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,5 +1,48 @@
|
|||||||
# Home Manager's Submodules
|
# Home Manager's Submodules
|
||||||
|
|
||||||
1. `base`: The base module that is suitable for both Linux and macOS.
|
This directory contains all Home Manager configurations organized by platform and functionality.
|
||||||
2. `linux`: Linux-specific configuration.
|
|
||||||
3. `darwin`: macOS-specific configuration.
|
## Current Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
home/
|
||||||
|
├── base/ # Cross-platform home manager configurations
|
||||||
|
│ ├── core/ # Essential applications and settings
|
||||||
|
│ │ ├── editors/ # Editor configurations (Neovim, Helix)
|
||||||
|
│ │ ├── shells/ # Shell configurations (Nushell, Zellij)
|
||||||
|
│ │ └── ...
|
||||||
|
│ ├── gui/ # GUI applications and desktop settings
|
||||||
|
│ │ ├── terminal/ # Terminal emulators (Kitty, Alacritty, etc.)
|
||||||
|
│ │ └── ...
|
||||||
|
│ ├── tui/ # Terminal/TUI applications
|
||||||
|
│ │ ├── editors/ # TUI editors and related tools
|
||||||
|
│ │ ├── encryption/ # GPG, password-store, etc.
|
||||||
|
│ │ └── ...
|
||||||
|
│ └── home.nix # Main home manager entry point
|
||||||
|
├── linux/ # Linux-specific home manager configurations
|
||||||
|
│ ├── base/ # Linux base configurations
|
||||||
|
│ ├── gui/ # Linux GUI applications
|
||||||
|
│ │ ├── niri/ # Niri window manager
|
||||||
|
│ │ └── ...
|
||||||
|
│ ├── editors/ # Linux-specific editors
|
||||||
|
│ └── ...
|
||||||
|
└── darwin/ # macOS-specific home manager configurations
|
||||||
|
├── aerospace/ # macOS window manager
|
||||||
|
├── proxy/ # Proxy configurations
|
||||||
|
└── ...
|
||||||
|
```
|
||||||
|
|
||||||
|
## Module Overview
|
||||||
|
|
||||||
|
1. **base**: The base module suitable for both Linux and macOS
|
||||||
|
- Cross-platform applications and settings
|
||||||
|
- Shared configurations for editors, shells, and essential tools
|
||||||
|
|
||||||
|
2. **linux**: Linux-specific configuration
|
||||||
|
- Desktop environments (Noctalia Shell, Niri compositor)
|
||||||
|
- Linux-specific GUI applications
|
||||||
|
- System integration tools
|
||||||
|
|
||||||
|
3. **darwin**: macOS-specific configuration
|
||||||
|
- macOS applications and services
|
||||||
|
- Platform-specific integrations (Aerospace, Squirrel, etc.)
|
||||||
|
|||||||
@@ -1,5 +1,66 @@
|
|||||||
# Home Manager's Base Submodules
|
# Home Manager's Base Submodules
|
||||||
|
|
||||||
1. `server`: Configuration which is suitable for both servers and desktops.
|
This directory contains cross-platform base configurations that are shared between Linux and Darwin
|
||||||
1. `desktop`: Configuration for desktop environments, such as Hyprland, I3, etc.
|
systems.
|
||||||
1. `core.nix`: Minimal home-manager's config
|
|
||||||
|
## Configuration Structure
|
||||||
|
|
||||||
|
### Core System
|
||||||
|
|
||||||
|
- **core/**: Essential cross-platform configurations
|
||||||
|
- **core.nix**: Minimal home-manager configuration
|
||||||
|
- **shells/**: Shell configurations (bash, zsh, fish, nu)
|
||||||
|
- **editors/**: Text editor configurations
|
||||||
|
- **neovim/**: Neovim with custom plugins and settings
|
||||||
|
- **helix/**: Helix editor configuration
|
||||||
|
- **btop.nix**: System monitoring tools
|
||||||
|
- **git.nix**: Git configuration and aliases
|
||||||
|
- **npm.nix**: Node.js package management
|
||||||
|
- **pip.nix**: Python package management
|
||||||
|
- **starship.nix**: Cross-shell prompt configuration
|
||||||
|
- **theme.nix**: Color schemes and theming
|
||||||
|
- **yazi.nix**: Terminal file manager configuration
|
||||||
|
- **zellij/**: Terminal multiplexer with custom layouts
|
||||||
|
|
||||||
|
### Desktop Environment
|
||||||
|
|
||||||
|
- **gui/**: Cross-platform GUI applications and configurations
|
||||||
|
- **dev-tools.nix**: Development tools and IDEs
|
||||||
|
- **media.nix**: Media players and utilities
|
||||||
|
- **terminal/**: Terminal emulator configurations
|
||||||
|
- **alacritty/**: Alacritty terminal
|
||||||
|
- **kitty/**: Kitty terminal
|
||||||
|
- **foot/**: Foot terminal (Linux)
|
||||||
|
- **ghostty/**: Ghostty terminal
|
||||||
|
|
||||||
|
### Terminal Interface
|
||||||
|
|
||||||
|
- **tui/**: Terminal-based interface configurations
|
||||||
|
- **cloud/**: Cloud development tools (Terraform, etc.)
|
||||||
|
- **container.nix**: Container tools (Docker, Podman)
|
||||||
|
- **dev-tools.nix**: Terminal-based development tools
|
||||||
|
- **editors/**: Terminal editor configurations
|
||||||
|
- **encryption/**: Encryption and security tools
|
||||||
|
- **gpg/**: GPG key management
|
||||||
|
- **password-store/**: Password management with pass
|
||||||
|
- **shell.nix**: Shell environment configurations
|
||||||
|
- **ssh/**: SSH configuration and management
|
||||||
|
- **zellij/**: Terminal workspace management
|
||||||
|
|
||||||
|
### System Management
|
||||||
|
|
||||||
|
- **home.nix**: Main home manager configuration file
|
||||||
|
|
||||||
|
## Platform Compatibility
|
||||||
|
|
||||||
|
All configurations in this directory are designed to work across:
|
||||||
|
|
||||||
|
- **Linux**: All distributions with Nix and Home Manager
|
||||||
|
- **macOS**: Darwin systems with Home Manager
|
||||||
|
- **WSL**: Windows Subsystem for Linux
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
These base configurations provide the foundation for both Linux and Darwin systems, ensuring
|
||||||
|
consistent environments across different platforms while allowing for platform-specific
|
||||||
|
customizations.
|
||||||
|
|||||||
@@ -1,34 +1,6 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# Misc
|
|
||||||
cowsay
|
|
||||||
gnupg
|
|
||||||
gnumake
|
|
||||||
|
|
||||||
# Modern cli tools, replacement of grep/sed/...
|
|
||||||
|
|
||||||
# Interactively filter its input using fuzzy searching, not limit to filenames.
|
|
||||||
fzf
|
|
||||||
# search for files by name, faster than find
|
|
||||||
fd
|
|
||||||
# search for files by its content, replacement of grep
|
|
||||||
(ripgrep.override { withPCRE2 = true; })
|
|
||||||
|
|
||||||
# A fast and polyglot tool for code searching, linting, rewriting at large scale
|
|
||||||
# supported languages: only some mainstream languages currently(do not support nix/nginx/yaml/toml/...)
|
|
||||||
ast-grep
|
|
||||||
|
|
||||||
sad # CLI search and replace, just like sed, but with diff preview.
|
|
||||||
yq-go # yaml processor https://github.com/mikefarah/yq
|
|
||||||
just # a command runner like make, but simpler
|
|
||||||
hyperfine # command-line benchmarking tool
|
|
||||||
gping # ping, but with a graph(TUI)
|
|
||||||
doggo # DNS client for humans
|
|
||||||
duf # Disk Usage/Free Utility - a better 'df' alternative
|
|
||||||
du-dust # A more intuitive version of `du` in rust
|
|
||||||
gdu # disk usage analyzer(replacement of `du`)
|
|
||||||
|
|
||||||
# nix related
|
# nix related
|
||||||
#
|
#
|
||||||
# it provides the command `nom` works just like `nix
|
# it provides the command `nom` works just like `nix
|
||||||
@@ -42,10 +14,15 @@
|
|||||||
# https://github.com/utdemir/nix-tree
|
# https://github.com/utdemir/nix-tree
|
||||||
nix-tree # A TUI to visualize the dependency graph of a nix derivation
|
nix-tree # A TUI to visualize the dependency graph of a nix derivation
|
||||||
|
|
||||||
# productivity
|
# misc
|
||||||
|
cowsay
|
||||||
|
gnupg
|
||||||
caddy # A webserver with automatic HTTPS via Let's Encrypt(replacement of nginx)
|
caddy # A webserver with automatic HTTPS via Let's Encrypt(replacement of nginx)
|
||||||
croc # File transfer between computers securely and easily
|
# A fast and polyglot tool for code searching, linting, rewriting at large scale
|
||||||
ncdu # analyzer your disk usage Interactively, via TUI(replacement of `du`)
|
# supported languages: only some mainstream languages currently(do not support nix/nginx/yaml/toml/...)
|
||||||
|
ast-grep
|
||||||
|
|
||||||
|
# other core cli tools are installed at system-level
|
||||||
];
|
];
|
||||||
|
|
||||||
# A modern replacement for ‘ls’
|
# A modern replacement for ‘ls’
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
# Editors
|
# Editors
|
||||||
|
|
||||||
See [desktop/editors/](../../desktop/editors/) for more details.
|
This directory contains editor configurations that are shared across different environments.
|
||||||
|
|
||||||
|
## Available Editors
|
||||||
|
|
||||||
|
- **neovim/**: Neovim configuration with AstroNvim
|
||||||
|
- **helix/**: Helix editor configuration
|
||||||
|
|
||||||
|
These configurations are designed to work across both terminal and GUI environments.
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
programs.helix = {
|
programs.helix.enable = true;
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,18 +40,27 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
lfs.enable = true;
|
lfs.enable = true;
|
||||||
|
|
||||||
userName = myvars.userfullname;
|
# signing = {
|
||||||
userEmail = myvars.useremail;
|
# key = "xxx";
|
||||||
|
# signByDefault = true;
|
||||||
|
# };
|
||||||
|
|
||||||
includes = [
|
includes = [
|
||||||
{
|
{
|
||||||
# use different email & name for work
|
# use different email & name for work:
|
||||||
|
#
|
||||||
|
# [user]
|
||||||
|
# email = "xxx@xxx.com"
|
||||||
|
# name = "Ryan Yin"
|
||||||
path = "~/work/.gitconfig";
|
path = "~/work/.gitconfig";
|
||||||
condition = "gitdir:~/work/";
|
condition = "gitdir:~/work/";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
extraConfig = {
|
settings = {
|
||||||
|
user.email = myvars.useremail;
|
||||||
|
user.name = myvars.userfullname;
|
||||||
|
|
||||||
init.defaultBranch = "main";
|
init.defaultBranch = "main";
|
||||||
trim.bases = "develop,master,main"; # for git-trim
|
trim.bases = "develop,master,main"; # for git-trim
|
||||||
push.autoSetupRemote = true;
|
push.autoSetupRemote = true;
|
||||||
@@ -63,33 +72,12 @@
|
|||||||
"ssh://git@github.com/ryan4yin" = {
|
"ssh://git@github.com/ryan4yin" = {
|
||||||
insteadOf = "https://github.com/ryan4yin";
|
insteadOf = "https://github.com/ryan4yin";
|
||||||
};
|
};
|
||||||
# "ssh://git@gitlab.com/" = {
|
# "ssh://git@bitbucket.com/ryan4yin" = {
|
||||||
# insteadOf = "https://gitlab.com/";
|
# insteadOf = "https://bitbucket.com/ryan4yin";
|
||||||
# };
|
|
||||||
# "ssh://git@bitbucket.com/" = {
|
|
||||||
# insteadOf = "https://bitbucket.com/";
|
|
||||||
# };
|
# };
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
# signing = {
|
alias = {
|
||||||
# key = "xxx";
|
|
||||||
# signByDefault = true;
|
|
||||||
# };
|
|
||||||
|
|
||||||
# A syntax-highlighting pager for git, diff, grep, and blame output
|
|
||||||
delta = {
|
|
||||||
enable = true;
|
|
||||||
options = {
|
|
||||||
diff-so-fancy = true;
|
|
||||||
line-numbers = true;
|
|
||||||
true-color = "always";
|
|
||||||
# features => named groups of settings, used to keep related settings organized
|
|
||||||
# features = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
aliases = {
|
|
||||||
# common aliases
|
# common aliases
|
||||||
br = "branch";
|
br = "branch";
|
||||||
co = "checkout";
|
co = "checkout";
|
||||||
@@ -117,10 +105,24 @@
|
|||||||
foreach = "submodule foreach";
|
foreach = "submodule foreach";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# A syntax-highlighting pager for git, diff, grep, and blame output
|
||||||
|
programs.delta = {
|
||||||
|
enable = true;
|
||||||
|
enableGitIntegration = true;
|
||||||
|
options = {
|
||||||
|
diff-so-fancy = true;
|
||||||
|
line-numbers = true;
|
||||||
|
true-color = "always";
|
||||||
|
# features => named groups of settings, used to keep related settings organized
|
||||||
|
# features = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# Git terminal UI (written in go).
|
# Git terminal UI (written in go).
|
||||||
programs.lazygit.enable = true;
|
programs.lazygit.enable = true;
|
||||||
|
|
||||||
# Yet another Git TUI (written in rust).
|
# Yet another Git TUI (written in rust).
|
||||||
programs.gitui.enable = true;
|
programs.gitui.enable = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ in
|
|||||||
# NOTE: nushell will be launched in bash, so it can inherit all the eenvironment variables.
|
# NOTE: nushell will be launched in bash, so it can inherit all the eenvironment variables.
|
||||||
programs.nushell = {
|
programs.nushell = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# package = pkgs-unstable.nushell;
|
|
||||||
configFile.source = ./config.nu;
|
configFile.source = ./config.nu;
|
||||||
inherit shellAliases;
|
inherit shellAliases;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,20 +6,24 @@
|
|||||||
enableZshIntegration = true;
|
enableZshIntegration = true;
|
||||||
enableNushellIntegration = true;
|
enableNushellIntegration = true;
|
||||||
|
|
||||||
|
# https://starship.rs/config/
|
||||||
settings = {
|
settings = {
|
||||||
|
# Get editor completions based on the config schema
|
||||||
|
"$schema" = "https://starship.rs/config-schema.json";
|
||||||
character = {
|
character = {
|
||||||
success_symbol = "[›](bold green)";
|
success_symbol = "[➜](bold green)";
|
||||||
error_symbol = "[›](bold red)";
|
error_symbol = "[➜](bold red)";
|
||||||
};
|
};
|
||||||
aws = {
|
# I never rely on the defaults, so this module is useless to me—disabled.
|
||||||
symbol = "🅰 ";
|
# I prefer adding --project, --region to very gcloud/aws command.
|
||||||
};
|
aws.disabled = true;
|
||||||
gcloud = {
|
gcloud.disabled = true;
|
||||||
# do not show the account/project's info
|
|
||||||
# to avoid the leak of sensitive information when sharing the terminal
|
kubernetes = {
|
||||||
format = "on [$symbol$active(\($region\))]($style) ";
|
symbol = "⛵";
|
||||||
symbol = "🅶 ️";
|
disabled = false;
|
||||||
};
|
};
|
||||||
|
os.disabled = false;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ Error opening terminal: xterm-kitty.
|
|||||||
|
|
||||||
NixOS preserve the `TERMINFO` and `TERMINFO_DIRS` environment variables, for `root` and the `wheel`
|
NixOS preserve the `TERMINFO` and `TERMINFO_DIRS` environment variables, for `root` and the `wheel`
|
||||||
group:
|
group:
|
||||||
[nixpkgs/nixos/modules/config/terminfo.nix](https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/config/terminfo.nix#L18)
|
[nixpkgs/nixos/modules/config/terminfo.nix](https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/config/terminfo.nix#L18)
|
||||||
|
|
||||||
For nix-darwin, take a look at <https://github.com/LnL7/nix-darwin/wiki/Terminfo-issues>
|
For nix-darwin, take a look at <https://github.com/LnL7/nix-darwin/wiki/Terminfo-issues>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
###########################################################
|
###########################################################
|
||||||
@@ -26,7 +25,6 @@
|
|||||||
{
|
{
|
||||||
programs.alacritty = {
|
programs.alacritty = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# package = pkgs-unstable.alacritty;
|
|
||||||
# https://alacritty.org/config-alacritty.html
|
# https://alacritty.org/config-alacritty.html
|
||||||
settings = {
|
settings = {
|
||||||
window = {
|
window = {
|
||||||
@@ -52,7 +50,7 @@
|
|||||||
bold_italic = {
|
bold_italic = {
|
||||||
family = "Maple Mono NF CN";
|
family = "Maple Mono NF CN";
|
||||||
};
|
};
|
||||||
size = if pkgs.stdenv.isDarwin then 14 else 13;
|
size = 13;
|
||||||
};
|
};
|
||||||
terminal = {
|
terminal = {
|
||||||
# Spawn a nushell in login mode via `bash`
|
# Spawn a nushell in login mode via `bash`
|
||||||
|
|||||||
@@ -17,8 +17,9 @@
|
|||||||
settings = {
|
settings = {
|
||||||
main = {
|
main = {
|
||||||
term = "foot"; # or "xterm-256color" for maximum compatibility
|
term = "foot"; # or "xterm-256color" for maximum compatibility
|
||||||
font = "Maple Mono NF CN:size=14";
|
font = "Maple Mono NF CN:size=13";
|
||||||
dpi-aware = "no"; # scale via window manager instead
|
dpi-aware = "no"; # scale via window manager instead
|
||||||
|
resize-keep-grid = "no"; # do not resize the window on font resizing
|
||||||
|
|
||||||
# Spawn a nushell in login mode via `bash`
|
# Spawn a nushell in login mode via `bash`
|
||||||
shell = "${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'";
|
shell = "${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'";
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
pkgs.hello # pkgs.ghostty is currently broken on darwin
|
pkgs.hello # pkgs.ghostty is currently broken on darwin
|
||||||
else
|
else
|
||||||
pkgs.ghostty; # the stable version
|
pkgs.ghostty; # the stable version
|
||||||
# package = ghostty.packages.${pkgs.system}.default; # the latest version
|
# package = ghostty.packages.${pkgs.stdenv.hostPlatform.system}.default; # the latest version
|
||||||
enableBashIntegration = false;
|
enableBashIntegration = false;
|
||||||
installBatSyntax = false;
|
installBatSyntax = false;
|
||||||
# installVimSyntax = true;
|
# installVimSyntax = true;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
font = {
|
font = {
|
||||||
name = "Maple Mono NF CN";
|
name = "Maple Mono NF CN";
|
||||||
# use different font size on macOS
|
# use different font size on macOS
|
||||||
size = if pkgs.stdenv.isDarwin then 14 else 13;
|
size = 13;
|
||||||
};
|
};
|
||||||
|
|
||||||
# consistent with other terminal emulators
|
# consistent with other terminal emulators
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
pkgs-2505,
|
||||||
nur-ryan4yin,
|
nur-ryan4yin,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
@@ -14,16 +14,18 @@
|
|||||||
|
|
||||||
kubectl
|
kubectl
|
||||||
kubectx # kubectx & kubens
|
kubectx # kubectx & kubens
|
||||||
|
kubie # same as kubectl-ctx, but per-shell (won’t touch kubeconfig).
|
||||||
kubectl-view-secret # kubectl view-secret
|
kubectl-view-secret # kubectl view-secret
|
||||||
kubectl-tree # kubectl tree
|
kubectl-tree # kubectl tree
|
||||||
kubectl-node-shell # exec into node
|
kubectl-node-shell # exec into node
|
||||||
kubepug # kubernetes pre upgrade checker
|
kubepug # kubernetes pre upgrade checker
|
||||||
|
kubectl-cnpg # cloudnative-pg's cli tool
|
||||||
|
|
||||||
kubebuilder
|
kubebuilder
|
||||||
istioctl
|
istioctl
|
||||||
clusterctl # for kubernetes cluster-api
|
clusterctl # for kubernetes cluster-api
|
||||||
kubevirt # virtctl
|
kubevirt # virtctl
|
||||||
kubernetes-helm
|
pkgs-2505.kubernetes-helm
|
||||||
fluxcd
|
fluxcd
|
||||||
argocd
|
argocd
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
@@ -18,6 +17,8 @@
|
|||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
colmena # nixos's remote deployment tool
|
colmena # nixos's remote deployment tool
|
||||||
|
|
||||||
|
tokei # count lines of code, alternative to cloc
|
||||||
|
|
||||||
# db related
|
# db related
|
||||||
mycli
|
mycli
|
||||||
pgcli
|
pgcli
|
||||||
@@ -34,7 +35,6 @@
|
|||||||
devbox
|
devbox
|
||||||
bfg-repo-cleaner # remove large files from git history
|
bfg-repo-cleaner # remove large files from git history
|
||||||
k6 # load testing tool
|
k6 # load testing tool
|
||||||
protobuf # protocol buffer compiler
|
|
||||||
|
|
||||||
# solve coding extercises - learn by doing
|
# solve coding extercises - learn by doing
|
||||||
exercism
|
exercism
|
||||||
|
|||||||
@@ -1,8 +1,29 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
helix,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
helixPackages = helix.packages.${pkgs.stdenv.hostPlatform.system};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# to make steel work, we need to git clone this repo to your home directory.
|
||||||
|
home.sessionVariables.HELIX_STEEL_CONFIG = "${config.home.homeDirectory}/nix-config/home/base/tui/editors/helix/steel";
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
steel
|
||||||
|
];
|
||||||
|
|
||||||
programs.helix = {
|
programs.helix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.helix;
|
# enable steel as the plugin system
|
||||||
|
# https://github.com/helix-editor/helix/pull/8675
|
||||||
|
# https://github.com/mattwparas/helix/blob/steel-event-system/STEEL.md
|
||||||
|
package = helixPackages.default.overrideAttrs (prevAttrs: {
|
||||||
|
cargoBuildFeatures = prevAttrs.cargoBuildFeatures or [ ] ++ [ "steel" ];
|
||||||
|
});
|
||||||
settings = {
|
settings = {
|
||||||
editor = {
|
editor = {
|
||||||
line-number = "relative";
|
line-number = "relative";
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
;; The helix.scm module will be loaded first before anything else,
|
||||||
|
;; the runtime will require this module, and any functions exported
|
||||||
|
;; will now be available to be used as typed commands, e.g. :git-add :open-helix-scm
|
||||||
|
|
||||||
|
(require "helix/editor.scm")
|
||||||
|
(require (prefix-in helix. "helix/commands.scm"))
|
||||||
|
(require (prefix-in helix.static. "helix/static.scm"))
|
||||||
|
|
||||||
|
(provide shell git-add open-helix-scm open-init-scm)
|
||||||
|
|
||||||
|
(define (current-path)
|
||||||
|
(let* ([focus (editor-focus)]
|
||||||
|
[focus-doc-id (editor->doc-id focus)])
|
||||||
|
(editor-document->path focus-doc-id)))
|
||||||
|
|
||||||
|
;;@doc
|
||||||
|
;; Specialized shell implementation, where % is a wildcard for the current file
|
||||||
|
(define (shell . args)
|
||||||
|
(helix.run-shell-command
|
||||||
|
(string-join
|
||||||
|
;; Replace the % with the current file
|
||||||
|
(map (lambda (x) (if (equal? x "%") (current-path) x)) args)
|
||||||
|
" ")))
|
||||||
|
|
||||||
|
;;@doc
|
||||||
|
;; Adds the current file to git
|
||||||
|
(define (git-add)
|
||||||
|
(shell "git" "add" "%"))
|
||||||
|
|
||||||
|
;;@doc
|
||||||
|
;; Open the helix.scm file
|
||||||
|
(define (open-helix-scm)
|
||||||
|
(helix.open (helix.static.get-helix-scm-path)))
|
||||||
|
|
||||||
|
;;@doc
|
||||||
|
;; Opens the init.scm file
|
||||||
|
(define (open-init-scm)
|
||||||
|
(helix.open (helix.static.get-init-scm-path)))
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
;; The init.scm file is run at the top level, immediately after the helix.scm module is required.
|
||||||
|
;; The helix context is available here, so you can interact with the editor.
|
||||||
|
|
||||||
|
;; configure the LSP for steel
|
||||||
|
(require "helix/configuration.scm")
|
||||||
|
(define-lsp "steel-language-server" (command "steel-language-server") (args '()))
|
||||||
|
(define-language "scheme"
|
||||||
|
(language-servers '("steel-language-server")))
|
||||||
|
|
||||||
|
;; show splash screen - when you open with no argument
|
||||||
|
(require "mattwparas-helix-package/splash.scm")
|
||||||
|
(when (equal? (command-line) '("hx"))
|
||||||
|
(show-splash))
|
||||||
|
|
||||||
|
;; Terminal & shell
|
||||||
|
(require "steel-pty/term.scm")
|
||||||
|
(set-default-shell! "nu")
|
||||||
|
|
||||||
|
;; File Watcher
|
||||||
|
(require "helix-file-watcher/file-watcher.scm")
|
||||||
|
(spawn-watcher)
|
||||||
|
|
||||||
|
;; File Tree
|
||||||
|
(require "mattwparas-helix-package/cogs/file-tree.scm")
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@@ -29,7 +28,7 @@ in
|
|||||||
|
|
||||||
programs.neovim = {
|
programs.neovim = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs-unstable.neovim-unwrapped;
|
package = pkgs.neovim-unwrapped;
|
||||||
|
|
||||||
# defaultEditor = true; # set EDITOR at system-wide level
|
# defaultEditor = true; # set EDITOR at system-wide level
|
||||||
viAlias = true;
|
viAlias = true;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
pkgs-master,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
@@ -30,13 +30,13 @@
|
|||||||
|
|
||||||
#-- dockerfile
|
#-- dockerfile
|
||||||
hadolint # Dockerfile linter
|
hadolint # Dockerfile linter
|
||||||
nodePackages.dockerfile-language-server-nodejs
|
dockerfile-language-server
|
||||||
|
|
||||||
#-- markdown
|
#-- markdown
|
||||||
marksman # language server for markdown
|
marksman # language server for markdown
|
||||||
glow # markdown previewer
|
glow # markdown previewer
|
||||||
pandoc # document converter
|
pandoc # document converter
|
||||||
pkgs-unstable.hugo # static site generator
|
pkgs-master.hugo # static site generator
|
||||||
|
|
||||||
#-- sql
|
#-- sql
|
||||||
sqlfluff
|
sqlfluff
|
||||||
@@ -63,14 +63,15 @@
|
|||||||
vscode-extensions.vadimcn.vscode-lldb.adapter # codelldb - debugger
|
vscode-extensions.vadimcn.vscode-lldb.adapter # codelldb - debugger
|
||||||
|
|
||||||
#-- python
|
#-- python
|
||||||
pipx # Install and Run Python Applications in Isolated Environments
|
|
||||||
uv # python project package manager
|
|
||||||
pyright # python language server
|
|
||||||
(python313.withPackages (
|
(python313.withPackages (
|
||||||
ps: with ps; [
|
ps: with ps; [
|
||||||
|
# python language server
|
||||||
|
pyright
|
||||||
ruff
|
ruff
|
||||||
|
|
||||||
|
pipx # Install and Run Python Applications in Isolated Environments
|
||||||
black # python formatter
|
black # python formatter
|
||||||
# debugpy
|
uv # python project package manager
|
||||||
|
|
||||||
# my commonly used python packages
|
# my commonly used python packages
|
||||||
jupyter
|
jupyter
|
||||||
@@ -80,16 +81,20 @@
|
|||||||
pyquery
|
pyquery
|
||||||
pyyaml
|
pyyaml
|
||||||
boto3
|
boto3
|
||||||
|
|
||||||
|
# misc
|
||||||
|
protobuf # protocol buffer compiler
|
||||||
|
numpy
|
||||||
]
|
]
|
||||||
))
|
))
|
||||||
|
|
||||||
#-- rust
|
#-- rust
|
||||||
# we'd better use the rust-overlays for rust development
|
# we'd better use the rust-overlays for rust development
|
||||||
pkgs-unstable.rustc
|
pkgs-master.rustc
|
||||||
pkgs-unstable.rust-analyzer
|
pkgs-master.rust-analyzer
|
||||||
pkgs-unstable.cargo # rust package manager
|
pkgs-master.cargo # rust package manager
|
||||||
pkgs-unstable.rustfmt
|
pkgs-master.rustfmt
|
||||||
pkgs-unstable.clippy # rust linter
|
pkgs-master.clippy # rust linter
|
||||||
|
|
||||||
#-- golang
|
#-- golang
|
||||||
go
|
go
|
||||||
@@ -136,7 +141,7 @@
|
|||||||
# fnlfmt # fennel
|
# fnlfmt # fennel
|
||||||
# (
|
# (
|
||||||
# if pkgs.stdenv.isLinux && pkgs.stdenv.isx86
|
# if pkgs.stdenv.isLinux && pkgs.stdenv.isx86
|
||||||
# then pkgs-unstable.akkuPackages.scheme-langserver
|
# then pkgs-master.akkuPackages.scheme-langserver
|
||||||
# else pkgs.emptyDirectory
|
# else pkgs.emptyDirectory
|
||||||
# )
|
# )
|
||||||
# ]
|
# ]
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
pkgs-unstable,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (pkgs-unstable) nu_scripts;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
programs.nushell = {
|
|
||||||
# load the alias file for work
|
|
||||||
# the file must exist, otherwise nushell will complain about it!
|
|
||||||
#
|
|
||||||
# currently, nushell does not support conditional sourcing of files
|
|
||||||
# https://github.com/nushell/nushell/issues/8214
|
|
||||||
extraConfig = ''
|
|
||||||
source /etc/agenix/alias-for-work.nushell
|
|
||||||
|
|
||||||
# using claude-code with kimi k2
|
|
||||||
$env.ANTHROPIC_BASE_URL = "https://api.moonshot.cn/anthropic/"
|
|
||||||
$env.ANTHROPIC_API_KEY = $env.MOONSHOT_API_KEY
|
|
||||||
|
|
||||||
# Directories in this constant are searched by the
|
|
||||||
# `use` and `source` commands.
|
|
||||||
const NU_LIB_DIRS = $NU_LIB_DIRS ++ ['${nu_scripts}/share/nu_scripts']
|
|
||||||
|
|
||||||
# completion
|
|
||||||
use custom-completions/cargo/cargo-completions.nu *
|
|
||||||
use custom-completions/curl/curl-completions.nu *
|
|
||||||
use custom-completions/git/git-completions.nu *
|
|
||||||
use custom-completions/glow/glow-completions.nu *
|
|
||||||
use custom-completions/just/just-completions.nu *
|
|
||||||
use custom-completions/make/make-completions.nu *
|
|
||||||
use custom-completions/man/man-completions.nu *
|
|
||||||
use custom-completions/nix/nix-completions.nu *
|
|
||||||
use custom-completions/ssh/ssh-completions.nu *
|
|
||||||
use custom-completions/tar/tar-completions.nu *
|
|
||||||
use custom-completions/tcpdump/tcpdump-completions.nu *
|
|
||||||
use custom-completions/zellij/zellij-completions.nu *
|
|
||||||
# use custom-completions/zoxide/zoxide-completions.nu *
|
|
||||||
|
|
||||||
# alias
|
|
||||||
# use aliases/git/git-aliases.nu *
|
|
||||||
use aliases/eza/eza-aliases.nu *
|
|
||||||
use aliases/bat/bat-aliases.nu *
|
|
||||||
|
|
||||||
# modules
|
|
||||||
use modules/argx *
|
|
||||||
use modules/lg *
|
|
||||||
use modules/kubernetes *
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# Google Cloud CLI aliases
|
||||||
|
# Based on https://cloud.google.com/sdk/docs/configurations
|
||||||
|
# Note: Avoided conflicts with common git aliases (gc, gca, gcl, gcs, gcu, gs, etc.)
|
||||||
|
|
||||||
|
# Configuration management
|
||||||
|
export alias gccfg = gcloud config configurations create
|
||||||
|
export alias gcact = gcloud config configurations activate
|
||||||
|
export alias gclist = gcloud config configurations list
|
||||||
|
export alias gcdel = gcloud config configurations delete
|
||||||
|
export alias gcset = gcloud config set
|
||||||
|
export alias gcunset = gcloud config unset
|
||||||
|
export alias gcconfig = gcloud config list
|
||||||
|
|
||||||
|
# Authentication
|
||||||
|
export alias gclogin = gcloud auth login
|
||||||
|
export alias gcauth = gcloud auth list
|
||||||
|
export alias gcapp = gcloud auth application-default login
|
||||||
|
|
||||||
|
# Project management
|
||||||
|
export alias gcproj = gcloud config set project
|
||||||
|
export alias gcget = gcloud config get-value project
|
||||||
|
|
||||||
|
# Compute Engine
|
||||||
|
export alias gcinst = gcloud compute instances list
|
||||||
|
export alias gccreate = gcloud compute instances create
|
||||||
|
export alias gcdelete = gcloud compute instances delete
|
||||||
|
export alias gcssh = gcloud compute ssh
|
||||||
|
export alias gck8sget = gcloud container clusters get-credentials
|
||||||
|
|
||||||
|
# Storage
|
||||||
|
export alias gcst = gcloud storage
|
||||||
|
export alias gcstls = gcloud storage ls
|
||||||
|
export alias gcstcp = gcloud storage cp
|
||||||
|
export alias gcstrm = gcloud storage rm
|
||||||
|
|
||||||
|
# General shortcuts
|
||||||
|
export alias gcloud = gcloud
|
||||||
|
export alias gcinfo = gcloud info
|
||||||
|
export alias gcver = gcloud version
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
{
|
||||||
|
nu_scripts,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
programs.nushell = {
|
||||||
|
# load the alias file for work
|
||||||
|
# the file must exist, otherwise nushell will complain about it!
|
||||||
|
#
|
||||||
|
# currently, nushell does not support conditional sourcing of files
|
||||||
|
# https://github.com/nushell/nushell/issues/8214
|
||||||
|
extraConfig = ''
|
||||||
|
source /etc/agenix/alias-for-work.nushell
|
||||||
|
|
||||||
|
$env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1"
|
||||||
|
# using claude-code with kimi k2
|
||||||
|
# https://platform.moonshot.cn/docs/guide/agent-support
|
||||||
|
# $env.ANTHROPIC_BASE_URL = "https://api.moonshot.cn/anthropic/"
|
||||||
|
# $env.ANTHROPIC_AUTH_TOKEN = $env.MOONSHOT_API_KEY
|
||||||
|
# $env.ANTHROPIC_MODEL = "kimi-k2-thinking"
|
||||||
|
# $env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "kimi-k2-thinking-turbo"
|
||||||
|
|
||||||
|
# using claude-code with glm llm
|
||||||
|
# https://docs.bigmodel.cn/cn/coding-plan/tool/claude
|
||||||
|
$env.ANTHROPIC_BASE_URL = "https://open.bigmodel.cn/api/anthropic"
|
||||||
|
$env.ANTHROPIC_AUTH_TOKEN = $env.ZAI_API_KEY
|
||||||
|
$env.ANTHROPIC_MODEL = "glm-4.7"
|
||||||
|
$env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "glm-4.5-air"
|
||||||
|
|
||||||
|
# using claude-code with qwen llm
|
||||||
|
# https://bailian.console.aliyun.com/?tab=doc#/doc/?type=model&url=2949529
|
||||||
|
# $env.ANTHROPIC_BASE_URL = "https://dashscope.aliyuncs.com/apps/anthropic"
|
||||||
|
# $env.ANTHROPIC_AUTH_TOKEN = $env.DASHSCOPE_API_KEY
|
||||||
|
# $env.ANTHROPIC_MODEL = "qwen-plus" # 千万别用 qwen-max, 价格
|
||||||
|
# $env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "qwen-turbo"
|
||||||
|
|
||||||
|
# Directories in this constant are searched by the
|
||||||
|
# `use` and `source` commands.
|
||||||
|
const NU_LIB_DIRS = $NU_LIB_DIRS ++ ['${nu_scripts}']
|
||||||
|
|
||||||
|
# -*- completion -*-
|
||||||
|
use custom-completions/cargo/cargo-completions.nu *
|
||||||
|
use custom-completions/curl/curl-completions.nu *
|
||||||
|
use custom-completions/git/git-completions.nu *
|
||||||
|
use custom-completions/glow/glow-completions.nu *
|
||||||
|
use custom-completions/just/just-completions.nu *
|
||||||
|
use custom-completions/make/make-completions.nu *
|
||||||
|
use custom-completions/man/man-completions.nu *
|
||||||
|
use custom-completions/nix/nix-completions.nu *
|
||||||
|
use custom-completions/ssh/ssh-completions.nu *
|
||||||
|
use custom-completions/tar/tar-completions.nu *
|
||||||
|
use custom-completions/tcpdump/tcpdump-completions.nu *
|
||||||
|
use custom-completions/zellij/zellij-completions.nu *
|
||||||
|
use custom-completions/zoxide/zoxide-completions.nu *
|
||||||
|
|
||||||
|
# -*- alias -*-
|
||||||
|
use aliases/git/git-aliases.nu *
|
||||||
|
use aliases/eza/eza-aliases.nu *
|
||||||
|
use aliases/bat/bat-aliases.nu *
|
||||||
|
use ${./aliases/gcloud.nu} *
|
||||||
|
|
||||||
|
# -*- modules -*-
|
||||||
|
# argx & lg is required by the kubernetes module
|
||||||
|
use modules/argx *
|
||||||
|
use modules/lg *
|
||||||
|
# k8s/helm aliases, completions,
|
||||||
|
use modules/kubernetes *
|
||||||
|
# a wrapper around the jc cli tool, convert cli outputs to nushell tables
|
||||||
|
# use modules/jc
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -9,8 +9,21 @@
|
|||||||
programs.ssh = {
|
programs.ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
|
# default config
|
||||||
|
enableDefaultConfig = false;
|
||||||
|
matchBlocks."*" = {
|
||||||
|
forwardAgent = false;
|
||||||
# "a private key that is used during authentication will be added to ssh-agent if it is running"
|
# "a private key that is used during authentication will be added to ssh-agent if it is running"
|
||||||
addKeysToAgent = "yes";
|
addKeysToAgent = "yes";
|
||||||
|
compression = true;
|
||||||
|
serverAliveInterval = 0;
|
||||||
|
serverAliveCountMax = 3;
|
||||||
|
hashKnownHosts = false;
|
||||||
|
userKnownHostsFile = "~/.ssh/known_hosts";
|
||||||
|
controlMaster = "no";
|
||||||
|
controlPath = "~/.ssh/master-%r@%n:%p";
|
||||||
|
controlPersist = "no";
|
||||||
|
};
|
||||||
|
|
||||||
matchBlocks = {
|
matchBlocks = {
|
||||||
"github.com" = {
|
"github.com" = {
|
||||||
|
|||||||
@@ -1,6 +1,33 @@
|
|||||||
# Home Manager's Darwin Submodules
|
# Home Manager's Darwin Submodules
|
||||||
|
|
||||||
1. `core.nix`: some basic configuration.
|
This directory contains macOS-specific Home Manager configurations for Darwin systems.
|
||||||
2. `shell.nix`: shell related.
|
|
||||||
3. `rime-squirrel.nix`: [rime-squirrel](https://github.com/rime/squirrel)'s configuration.
|
## Configuration Modules
|
||||||
4. `default.nix`: the entrypoint of darwin's configuration, it import all the submodules above.
|
|
||||||
|
### Core Configurations
|
||||||
|
|
||||||
|
- **default.nix**: Entry point that imports all Darwin configurations
|
||||||
|
- **shell.nix**: Shell configurations and environment settings
|
||||||
|
- **rime-squirrel.nix**: [Rime Squirrel](https://github.com/rime/squirrel) input method
|
||||||
|
configuration
|
||||||
|
|
||||||
|
### Window Management
|
||||||
|
|
||||||
|
- **aerospace/**: [Aerospace](https://github.com/nikitabobko/AeroSpace) tiling window manager
|
||||||
|
configuration
|
||||||
|
- Custom keybindings and workspace management
|
||||||
|
- Application-specific window rules
|
||||||
|
|
||||||
|
### Network Configuration
|
||||||
|
|
||||||
|
- **proxy/**: Network proxy configurations
|
||||||
|
- `proxychains.conf`: Proxy chains configuration for network routing
|
||||||
|
- Proxy settings for development tools and applications
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- macOS-specific package installations and configurations
|
||||||
|
- Native macOS applications and utilities
|
||||||
|
- Touch ID and system integration
|
||||||
|
- Homebrew integration for additional packages
|
||||||
|
- macOS-specific shell configurations and aliases
|
||||||
|
|||||||
@@ -130,8 +130,8 @@ alt-3 = 'workspace 3Work'
|
|||||||
alt-4 = 'workspace 4Firefox'
|
alt-4 = 'workspace 4Firefox'
|
||||||
alt-5 = 'workspace 5Chrome'
|
alt-5 = 'workspace 5Chrome'
|
||||||
alt-6 = 'workspace 6Chat'
|
alt-6 = 'workspace 6Chat'
|
||||||
alt-7 = 'workspace 7Music'
|
alt-7 = 'workspace 7Work'
|
||||||
alt-8 = 'workspace 8Mail'
|
alt-8 = 'workspace 8Music'
|
||||||
alt-9 = 'workspace 9File'
|
alt-9 = 'workspace 9File'
|
||||||
alt-0 = 'workspace 0Other'
|
alt-0 = 'workspace 0Other'
|
||||||
alt-a = 'workspace A' # In your config, you can drop workspace bindings that you don't need
|
alt-a = 'workspace A' # In your config, you can drop workspace bindings that you don't need
|
||||||
@@ -146,8 +146,8 @@ alt-shift-3 = 'move-node-to-workspace 3Work'
|
|||||||
alt-shift-4 = 'move-node-to-workspace 4Firefox'
|
alt-shift-4 = 'move-node-to-workspace 4Firefox'
|
||||||
alt-shift-5 = 'move-node-to-workspace 5Chrome'
|
alt-shift-5 = 'move-node-to-workspace 5Chrome'
|
||||||
alt-shift-6 = 'move-node-to-workspace 6Chat'
|
alt-shift-6 = 'move-node-to-workspace 6Chat'
|
||||||
alt-shift-7 = 'move-node-to-workspace 7Music'
|
alt-shift-7 = 'move-node-to-workspace 7Work'
|
||||||
alt-shift-8 = 'move-node-to-workspace 8Mail'
|
alt-shift-8 = 'move-node-to-workspace 8Music'
|
||||||
alt-shift-9 = 'move-node-to-workspace 9File'
|
alt-shift-9 = 'move-node-to-workspace 9File'
|
||||||
alt-shift-0 = 'move-node-to-workspace 0Other'
|
alt-shift-0 = 'move-node-to-workspace 0Other'
|
||||||
alt-shift-a = 'move-node-to-workspace A'
|
alt-shift-a = 'move-node-to-workspace A'
|
||||||
@@ -246,22 +246,22 @@ run = 'move-node-to-workspace 6Chat'
|
|||||||
if.app-id = 'com.tencent.qq'
|
if.app-id = 'com.tencent.qq'
|
||||||
run = 'move-node-to-workspace 6Chat'
|
run = 'move-node-to-workspace 6Chat'
|
||||||
|
|
||||||
[[on-window-detected]]
|
|
||||||
if.app-id = 'com.tencent.QQMusicMac'
|
|
||||||
run = 'move-node-to-workspace 7Music'
|
|
||||||
|
|
||||||
[[on-window-detected]]
|
|
||||||
if.app-id = 'com.netease.163music'
|
|
||||||
run = 'move-node-to-workspace 7Music'
|
|
||||||
|
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
if.app-id = 'com.apple.mail'
|
if.app-id = 'com.apple.mail'
|
||||||
run = 'move-node-to-workspace 8Mail'
|
run = 'move-node-to-workspace 7Work'
|
||||||
|
|
||||||
# calendar
|
# calendar
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
if.app-id = 'com.apple.iCal'
|
if.app-id = 'com.apple.iCal'
|
||||||
run = 'move-node-to-workspace 8Mail'
|
run = 'move-node-to-workspace 7Work'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.tencent.QQMusicMac'
|
||||||
|
run = 'move-node-to-workspace 8Music'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.netease.163music'
|
||||||
|
run = 'move-node-to-workspace 8Music'
|
||||||
|
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
if.app-id = 'com.apple.finder'
|
if.app-id = 'com.apple.finder'
|
||||||
@@ -296,6 +296,11 @@ run = ['layout floating', 'move-node-to-workspace 0Other']
|
|||||||
if.app-id = 'ai.elementlabs.lmstudio'
|
if.app-id = 'ai.elementlabs.lmstudio'
|
||||||
run = ['layout floating', 'move-node-to-workspace 0Other']
|
run = ['layout floating', 'move-node-to-workspace 0Other']
|
||||||
|
|
||||||
|
# Clash Verge - has problem with floating
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'io.github.clash-verge-rev.clash-verge-rev'
|
||||||
|
run = ['move-node-to-workspace 0Other']
|
||||||
|
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
if.app-id = 'us.zoom.xos'
|
if.app-id = 'us.zoom.xos'
|
||||||
run = 'move-node-to-workspace 0Other'
|
run = 'move-node-to-workspace 0Other'
|
||||||
@@ -310,11 +315,6 @@ run = ['layout floating']
|
|||||||
if.app-id = 'com.apple.systempreferences'
|
if.app-id = 'com.apple.systempreferences'
|
||||||
run = ['layout floating']
|
run = ['layout floating']
|
||||||
|
|
||||||
# Clash Verge - has problem with floating
|
|
||||||
[[on-window-detected]]
|
|
||||||
if.app-id = 'io.github.clash-verge-rev.clash-verge-rev'
|
|
||||||
run = ['move-node-to-workspace 0Other']
|
|
||||||
|
|
||||||
# Make all windows float by default
|
# Make all windows float by default
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
check-further-callbacks = true
|
check-further-callbacks = true
|
||||||
@@ -331,7 +331,7 @@ run = ['layout floating']
|
|||||||
4Firefox = ['main']
|
4Firefox = ['main']
|
||||||
5Chrome = ['main']
|
5Chrome = ['main']
|
||||||
6Chat = ['built-in']
|
6Chat = ['built-in']
|
||||||
7Music = ['built-in']
|
7Work = ['main']
|
||||||
8Mail = ['main']
|
8Music = ['built-in']
|
||||||
9File = ['main']
|
9File = ['main']
|
||||||
0Other = ['main']
|
0Other = ['main']
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
let
|
||||||
|
fontSize = 15;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
programs.alacritty.settings.font.size = lib.mkForce fontSize;
|
||||||
|
programs.ghostty.settings.font-size = lib.mkForce fontSize;
|
||||||
|
programs.kitty.font.size = lib.mkForce fontSize;
|
||||||
|
}
|
||||||
@@ -1,10 +1,32 @@
|
|||||||
# Home Manager's Linux Submodules
|
# Home Manager's Linux Submodules
|
||||||
|
|
||||||
1. `base`: The base module that is suitable for any NixOS environment.
|
This directory contains Linux-specific Home Manager configurations organized for different use
|
||||||
2. `desktop`: Configuration for desktop environments, such as Hyprland, I3, etc.
|
cases.
|
||||||
3. `server.nix`: Configuration which is suitable for both servers and desktops. It import only
|
|
||||||
`base` as its submodule.
|
## Configuration Modules
|
||||||
1. used by all my nixos servers.
|
|
||||||
4. `desktop.nix`: the entrypoint of desktop's configuration, it import both `base` and `desktop` as
|
### Core Configurations
|
||||||
its submodules.
|
|
||||||
1. used by all my nixos desktops.
|
- **core.nix**: Essential Linux-specific configurations and settings
|
||||||
|
- **base/**: Base Linux configurations including shell, tools, and utilities
|
||||||
|
- `shell.nix`: Shell configurations and aliases
|
||||||
|
- `tools.nix`: Essential command-line tools and utilities
|
||||||
|
|
||||||
|
### Desktop Configurations
|
||||||
|
|
||||||
|
- **gui/**: Desktop environment configurations
|
||||||
|
- **niri/**: Niri compositor configuration
|
||||||
|
- **base/**: Common desktop applications and services
|
||||||
|
- **editors/**: Text editor configurations for desktop environments
|
||||||
|
|
||||||
|
### Available Entry Points
|
||||||
|
|
||||||
|
- **core.nix**: Core Linux configuration, suitable for basic setups
|
||||||
|
- **tui.nix**: Terminal-based interface configuration for lightweight environments
|
||||||
|
- **gui.nix**: Graphical user interface configuration entry point, imports desktop environments
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
- **Lightweight/Terminal**: Use `core.nix` or `tui.nix` for terminal-focused setups
|
||||||
|
- **Desktops**: Use `gui.nix` for full desktop environments with Noctalia Shell and Niri compositor
|
||||||
|
- **Custom**: Mix and match configurations as needed for your specific use case
|
||||||
|
|||||||
@@ -1,17 +1,46 @@
|
|||||||
# Desktop Related
|
# Desktop Environment Configurations
|
||||||
|
|
||||||
3. `base`: all common configurations for all desktops.
|
This directory contains desktop environment and window manager configurations managed by Home
|
||||||
4. `hyprland`: Hyprland's configuration.
|
|
||||||
|
|
||||||
## Why install I3/Hyprland in Home Manager instead of a NixOS Module?
|
|
||||||
|
|
||||||
1. I3 & Hyprland's configuration file is located in `~/.config`, which can be easily managed by Home
|
|
||||||
Manager.
|
Manager.
|
||||||
2. I have many user-specific systemd services, such gammastep, wallpaper-switcher, etc. Which can be
|
|
||||||
easily managed by Home Manager, but if we add i3/hyprland in a NixOS Module, those user-level
|
## Available Configurations
|
||||||
services may failed to start automatically. With i3/hyprland in a Home Manager Module, we can
|
|
||||||
control their systemd service's dependent order more easily, so we can avoid issues like this.
|
### Window Managers
|
||||||
3. By install packages as less as possible in NixOS Module, we can:
|
|
||||||
1. Make the NixOS system more secure and stable.
|
- **niri**: Niri compositor configuration with custom settings, keybindings, spawn-at-startup rules,
|
||||||
2. Make this flake more portable to other non-NixOS systems, as home-manager can be installed on
|
and window rules
|
||||||
any Linux system.
|
|
||||||
|
### Base Desktop Environment
|
||||||
|
|
||||||
|
- **base**: Common desktop configurations shared across all environments, including:
|
||||||
|
- **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
|
||||||
|
- Development tools
|
||||||
|
- Fcitx5 input method framework
|
||||||
|
- Games and gaming utilities
|
||||||
|
- GTK theme configurations
|
||||||
|
- Immutable file handling
|
||||||
|
- Note-taking applications
|
||||||
|
- Wayland applications
|
||||||
|
- XDG desktop configurations
|
||||||
|
|
||||||
|
### Editor Configurations
|
||||||
|
|
||||||
|
- **editors**: Text editor configurations and integrations
|
||||||
|
|
||||||
|
## Why install Desktop Environments in Home Manager instead of NixOS Module?
|
||||||
|
|
||||||
|
1. **Configuration Location**: Desktop environment configuration files are located in `~/.config`,
|
||||||
|
which can be easily managed by Home Manager.
|
||||||
|
|
||||||
|
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
|
||||||
|
Module, these user-level services might fail to start automatically. With Home Manager modules,
|
||||||
|
we can control systemd service dependency order more effectively.
|
||||||
|
|
||||||
|
3. **System Benefits**: By minimizing package installation through NixOS Module:
|
||||||
|
- Makes the NixOS system more secure and stable
|
||||||
|
- Increases portability to non-NixOS systems, as Home Manager can be installed on any Linux
|
||||||
|
system
|
||||||
|
- Allows for easier switching between different window managers without system-level changes
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
nixpaks.firefox
|
||||||
|
];
|
||||||
|
|
||||||
|
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
|
||||||
|
programs.google-chrome = {
|
||||||
|
enable = true;
|
||||||
|
package = if pkgs.stdenv.isAarch64 then pkgs.chromium else pkgs.google-chrome;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
# pkgs-stable,
|
|
||||||
nur-ryan4yin,
|
|
||||||
blender-bin,
|
blender-bin,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
@@ -23,29 +20,27 @@
|
|||||||
# aseprite # Animated sprite editor & pixel art tool
|
# aseprite # Animated sprite editor & pixel art tool
|
||||||
|
|
||||||
# this app consumes a lot of storage, so do not install it currently
|
# this app consumes a lot of storage, so do not install it currently
|
||||||
# kicad # 3d printing, eletrical engineering
|
# kicad # 3d printing, electrical engineering
|
||||||
]
|
]
|
||||||
++ (lib.optionals pkgs.stdenv.isx86_64 [
|
++ (lib.optionals pkgs.stdenv.isx86_64 [
|
||||||
# https://github.com/edolstra/nix-warez/blob/master/blender/flake.nix
|
# https://github.com/edolstra/nix-warez/blob/master/blender/flake.nix
|
||||||
blender-bin.packages.${pkgs.system}.blender_4_2 # 3d modeling
|
blender-bin.packages.${pkgs.stdenv.hostPlatform.system}.blender_4_2 # 3d modeling
|
||||||
|
|
||||||
ldtk # A modern, versatile 2D level editor
|
ldtk # A modern, versatile 2D level editor
|
||||||
|
|
||||||
# fpga
|
# fpga
|
||||||
python313Packages.apycula # gowin fpga
|
# python313Packages.apycula # gowin fpga
|
||||||
yosys # fpga synthesis
|
# yosys # fpga synthesis
|
||||||
nextpnr # fpga place and route
|
# nextpnr # fpga place and route
|
||||||
openfpgaloader # fpga programming
|
# openfpgaloader # fpga programming
|
||||||
# nur-ryan4yin.packages.${pkgs.system}.gowin-eda-edu-ide # app: `gowin-env` => `gw_ide` / `gw_pack` / ...
|
# nur-ryan4yin.packages.${pkgs.stdenv.hostPlatform.system}.gowin-eda-edu-ide # app: `gowin-env` => `gw_ide` / `gw_pack` / ...
|
||||||
]);
|
]);
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
# live streaming
|
# live streaming
|
||||||
obs-studio = {
|
obs-studio = {
|
||||||
enable = pkgs.stdenv.isx86_64;
|
enable = pkgs.stdenv.isx86_64;
|
||||||
plugins =
|
plugins = with pkgs.obs-studio-plugins; [
|
||||||
with pkgs.obs-studio-plugins;
|
|
||||||
[
|
|
||||||
# screen capture
|
# screen capture
|
||||||
wlrobs
|
wlrobs
|
||||||
# obs-ndi
|
# obs-ndi
|
||||||
@@ -68,11 +63,9 @@
|
|||||||
obs-backgroundremoval
|
obs-backgroundremoval
|
||||||
# advanced-scene-switcher
|
# advanced-scene-switcher
|
||||||
obs-pipewire-audio-capture
|
obs-pipewire-audio-capture
|
||||||
]
|
|
||||||
++ (lib.optionals pkgs.stdenv.isx86_64 [
|
|
||||||
obs-vaapi
|
obs-vaapi
|
||||||
obs-3d-effect
|
obs-3d-effect
|
||||||
]);
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{ mylib, pkgs, ... }:
|
||||||
|
{
|
||||||
|
# wayland related
|
||||||
|
home.sessionVariables = {
|
||||||
|
"NIXOS_OZONE_WL" = "1"; # for any ozone-based browser & electron apps to run on wayland
|
||||||
|
"MOZ_ENABLE_WAYLAND" = "1"; # for firefox to run on wayland
|
||||||
|
"MOZ_WEBRENDER" = "1";
|
||||||
|
# enable native Wayland support for most Electron apps
|
||||||
|
"ELECTRON_OZONE_PLATFORM_HINT" = "auto";
|
||||||
|
|
||||||
|
# qt
|
||||||
|
"QT_WAYLAND_DISABLE_WINDOWDECORATION" = "1";
|
||||||
|
"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";
|
||||||
|
"GDK_BACKEND" = "wayland";
|
||||||
|
"XDG_SESSION_TYPE" = "wayland";
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
swaybg # the wallpaper
|
||||||
|
wl-clipboard # copying and pasting
|
||||||
|
hyprpicker # color picker
|
||||||
|
brightnessctl
|
||||||
|
# audio
|
||||||
|
alsa-utils # provides amixer/alsamixer/...
|
||||||
|
networkmanagerapplet # provide GUI app: nm-connection-editor
|
||||||
|
# screenshot/screencast
|
||||||
|
flameshot
|
||||||
|
hyprshot # screen shot
|
||||||
|
wf-recorder # screen recording
|
||||||
|
];
|
||||||
|
|
||||||
|
# screen locker
|
||||||
|
programs.swaylock.enable = true;
|
||||||
|
|
||||||
|
# Logout Menu
|
||||||
|
programs.wlogout.enable = true;
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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()
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
pkgs-master,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
vscodeCliArgs = [
|
||||||
|
# https://code.visualstudio.com/docs/configure/settings-sync#_recommended-configure-the-keyring-to-use-with-vs-code
|
||||||
|
# For use with any package that implements the Secret Service API
|
||||||
|
# (for example gnome-keyring, kwallet5, KeepassXC)
|
||||||
|
"--password-store=gnome-libsecret"
|
||||||
|
];
|
||||||
|
|
||||||
|
code-cursor = pkgs-master.code-cursor;
|
||||||
|
# (pkgs-master.code-cursor.override {
|
||||||
|
# commandLineArgs = lib.concatStringsSep " " vscodeCliArgs;
|
||||||
|
# }).overrideAttrs
|
||||||
|
# (oldAttrs: rec {
|
||||||
|
# pname = "cursor";
|
||||||
|
# version = "2.1.36";
|
||||||
|
# src =
|
||||||
|
# with pkgs-master;
|
||||||
|
# appimageTools.extract {
|
||||||
|
# inherit pname version;
|
||||||
|
# src =
|
||||||
|
# let
|
||||||
|
# sources = {
|
||||||
|
# x86_64-linux = fetchurl {
|
||||||
|
# # curl -s https://api2.cursor.sh/updates/api/download/stable/linux-x64/cursor | jq
|
||||||
|
# url = "https://downloads.cursor.com/production/9cd7c8b6cebcbccc1242df211dee45a4b6fe15e4/linux/x64/Cursor-2.1.36-x86_64.AppImage";
|
||||||
|
# hash = "sha256-aaprRB2BAaUCHj7m5aGacCBHisjN2pVZ+Ca3u1ifxBA=";
|
||||||
|
# };
|
||||||
|
# aarch64-linux = fetchurl {
|
||||||
|
# # curl -s https://api2.cursor.sh/updates/api/download/stable/linux-arm64/cursor | jq
|
||||||
|
# url = "https://downloads.cursor.com/production/9cd7c8b6cebcbccc1242df211dee45a4b6fe15e4/linux/arm64/Cursor-2.1.36-aarch64.AppImage";
|
||||||
|
# hash = "sha256-S2vFYBI6m0zjBJEDbk7gc6/zFiKWyhM73OUm1xsNx6Q=";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# in
|
||||||
|
# sources.${stdenv.hostPlatform.system};
|
||||||
|
# };
|
||||||
|
# sourceRoot = "${pname}-${version}-extracted/usr/share/cursor";
|
||||||
|
# });
|
||||||
|
in
|
||||||
|
{
|
||||||
|
home.packages = [
|
||||||
|
pkgs.zed-editor
|
||||||
|
pkgs-master.code-cursor
|
||||||
|
pkgs-master.antigravity-fhs
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.vscode = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs-master.vscode.override {
|
||||||
|
commandLineArgs = vscodeCliArgs;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -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
|
||||||
@@ -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 = {
|
||||||
@@ -14,13 +16,17 @@
|
|||||||
type = "fcitx5";
|
type = "fcitx5";
|
||||||
fcitx5.waylandFrontend = true;
|
fcitx5.waylandFrontend = true;
|
||||||
fcitx5.addons = with pkgs; [
|
fcitx5.addons = with pkgs; [
|
||||||
# for flypy chinese input method
|
qt6Packages.fcitx5-configtool # GUI for fcitx5
|
||||||
fcitx5-rime
|
|
||||||
# needed enable rime using configtool after installed
|
|
||||||
fcitx5-configtool
|
|
||||||
fcitx5-chinese-addons
|
|
||||||
# fcitx5-mozc # japanese input method
|
|
||||||
fcitx5-gtk # gtk im module
|
fcitx5-gtk # gtk im module
|
||||||
|
|
||||||
|
# Chinese
|
||||||
|
fcitx5-rime # for flypy chinese input method
|
||||||
|
# fcitx5-chinese-addons # we use rime instead
|
||||||
|
|
||||||
|
# Japanese
|
||||||
|
# ctrl-i / F7 - convert to takakana
|
||||||
|
# ctrl-u / F6 - convert to hiragana
|
||||||
|
fcitx5-mozc-ut # Moze with UT dictionary
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
[Groups/0]
|
[Groups/0]
|
||||||
# Group Name
|
# Group Name
|
||||||
Name=Default
|
Name=Intl
|
||||||
# Layout
|
# Layout
|
||||||
Default Layout=us
|
Default Layout=us
|
||||||
# Default Input Method
|
# Default Input Method
|
||||||
DefaultIM=rime
|
DefaultIM=keyboard-us-altgr-intl
|
||||||
|
|
||||||
[Groups/0/Items/0]
|
[Groups/0/Items/0]
|
||||||
# Name
|
# Name
|
||||||
@@ -14,10 +14,43 @@ Layout=
|
|||||||
|
|
||||||
[Groups/0/Items/1]
|
[Groups/0/Items/1]
|
||||||
# Name
|
# Name
|
||||||
|
Name=keyboard-us-intl
|
||||||
|
# Layout
|
||||||
|
Layout=
|
||||||
|
|
||||||
|
[Groups/0/Items/2]
|
||||||
|
# Name
|
||||||
|
Name=keyboard-us-altgr-intl
|
||||||
|
# Layout
|
||||||
|
Layout=
|
||||||
|
|
||||||
|
[Groups/1]
|
||||||
|
# Group Name
|
||||||
|
Name=Default
|
||||||
|
# Layout
|
||||||
|
Default Layout=us
|
||||||
|
# Default Input Method
|
||||||
|
DefaultIM=rime
|
||||||
|
|
||||||
|
[Groups/1/Items/0]
|
||||||
|
# Name
|
||||||
|
Name=keyboard-us
|
||||||
|
# Layout
|
||||||
|
Layout=
|
||||||
|
|
||||||
|
[Groups/1/Items/1]
|
||||||
|
# Name
|
||||||
Name=rime
|
Name=rime
|
||||||
# Layout
|
# Layout
|
||||||
Layout=
|
Layout=
|
||||||
|
|
||||||
|
[Groups/1/Items/2]
|
||||||
|
# Name
|
||||||
|
Name=mozc
|
||||||
|
# Layout
|
||||||
|
Layout=
|
||||||
|
|
||||||
[GroupOrder]
|
[GroupOrder]
|
||||||
0=Default
|
0=Default
|
||||||
|
1=Intl
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs,
|
|
||||||
nix-gaming,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
# nix-gaming.packages.${pkgs.system}.osu-laser-bin
|
|
||||||
gamescope # SteamOS session compositing window manager
|
|
||||||
prismlauncher # A free, open source launcher for Minecraft
|
|
||||||
winetricks # A script to install DLLs needed to work around problems in Wine
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
pkgs-x64,
|
||||||
|
osConfig,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.desktop.gaming;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.desktop = {
|
||||||
|
gaming = {
|
||||||
|
enable = mkEnableOption "Install Game Suite(steam, lutris, etc)";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# ==========================================================================
|
||||||
|
# Other Optimizations
|
||||||
|
# Usage:
|
||||||
|
# Lutris - enable advanced options, go to the System options -> Command prefix, add: `mangohud`
|
||||||
|
# Steam - add this as a launch option: `mangohud %command%` / `gamemoderun %command%`
|
||||||
|
# ==========================================================================
|
||||||
|
|
||||||
|
home.packages =
|
||||||
|
(with pkgs; [
|
||||||
|
# https://github.com/flightlessmango/MangoHud
|
||||||
|
# a simple overlay program for monitoring FPS, temperature, CPU and GPU load, and more.
|
||||||
|
mangohud
|
||||||
|
|
||||||
|
# GUI for installing custom Proton versions like GE_Proton
|
||||||
|
# proton - a Wine distribution aimed at gaming
|
||||||
|
protonplus
|
||||||
|
# Script to install various redistributable runtime libraries in Wine.
|
||||||
|
winetricks
|
||||||
|
# https://github.com/Open-Wine-Components/umu-launcher
|
||||||
|
# a unified launcher for Windows games on Linux
|
||||||
|
umu-launcher
|
||||||
|
|
||||||
|
# Sed-like editor for binary files
|
||||||
|
# required by some games to fix problems
|
||||||
|
bbe
|
||||||
|
])
|
||||||
|
++ (with pkgs-x64; [
|
||||||
|
# a game launcher - great for epic games and gog games
|
||||||
|
(heroic.override {
|
||||||
|
extraPkgs = _pkgs: [
|
||||||
|
pkgs.gamescope # aarch64
|
||||||
|
];
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
|
||||||
|
# a GUI game launcher for Steam/GoG/Epic
|
||||||
|
# https://lutris.net/games?ordering=-popularity
|
||||||
|
programs.lutris = {
|
||||||
|
enable = true;
|
||||||
|
defaultWinePackage = pkgs-x64.proton-ge-bin;
|
||||||
|
steamPackage = osConfig.programs.steam.package;
|
||||||
|
protonPackages = [ pkgs-x64.proton-ge-bin ];
|
||||||
|
winePackages = with pkgs-x64; [
|
||||||
|
wineWow64Packages.full
|
||||||
|
wineWowPackages.stagingFull
|
||||||
|
];
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
winetricks
|
||||||
|
gamescope
|
||||||
|
gamemode
|
||||||
|
mangohud
|
||||||
|
umu-launcher
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -38,10 +38,5 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
|
gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
|
||||||
|
|
||||||
iconTheme = {
|
|
||||||
name = "Papirus-Dark";
|
|
||||||
package = pkgs.papirus-icon-theme;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
xdg.configFile."hypr/hypridle.conf".source = ./hypridle.conf;
|
||||||
|
|
||||||
|
# Hyprland idle daemon
|
||||||
|
services.hypridle.enable = true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
general {
|
||||||
|
lock_cmd = noctalia-shell ipc call lockScreen lock # avoid starting multiple instances
|
||||||
|
before_sleep_cmd = loginctl lock-session # lock before suspend
|
||||||
|
# after_sleep_cmd = hyprctl dispatch dpms on # resume dpms after suspend
|
||||||
|
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 180 # 3 minutes
|
||||||
|
# List devices: brightnessctl --list
|
||||||
|
# Adjust keyboard backlight: brightnessctl -d kbd_backlight set 50%
|
||||||
|
on-timeout = brightnessctl --save --device=kbd_backlight set 0 # turn off keyboard backlight.
|
||||||
|
on-resume = brightnessctl --restore --device=kbd_backlight # turn on keyboard backlight.
|
||||||
|
}
|
||||||
|
|
||||||
|
# listener {
|
||||||
|
# timeout = 600 # 10min.
|
||||||
|
# on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||||
|
# on-resume = brightnessctl -r # monitor backlight restore.
|
||||||
|
# }
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 1200 # 20 minutes
|
||||||
|
on-timeout = noctalia-shell ipc call lockScreen lock # lock screen
|
||||||
|
}
|
||||||
|
|
||||||
|
# listener {
|
||||||
|
# timeout = 1660 # 31 minutes
|
||||||
|
# on-resume = brightnessctl -r # monitor wake up & screen on
|
||||||
|
# }
|
||||||
|
|
||||||
|
# listener {
|
||||||
|
# timeout = 1800 # 30min
|
||||||
|
# on-timeout = systemctl suspend # suspend pc
|
||||||
|
# }
|
||||||
@@ -1,14 +1,11 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
pkgs-x64,
|
||||||
nur-ryan4yin,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
# media - control and enjoy audio/video
|
# media - control and enjoy audio/video
|
||||||
{
|
{
|
||||||
home.packages =
|
home.packages = with pkgs; [
|
||||||
with pkgs;
|
|
||||||
[
|
|
||||||
# audio control
|
# audio control
|
||||||
pavucontrol
|
pavucontrol
|
||||||
playerctl
|
playerctl
|
||||||
@@ -19,12 +16,10 @@
|
|||||||
libva-utils
|
libva-utils
|
||||||
vdpauinfo
|
vdpauinfo
|
||||||
vulkan-tools
|
vulkan-tools
|
||||||
glxinfo
|
mesa-demos
|
||||||
nvitop
|
nvitop
|
||||||
]
|
(pkgs-x64.zoom-us)
|
||||||
++ (lib.optionals pkgs.stdenv.isx86_64 [
|
];
|
||||||
(zoom-us.override { hyprlandXdgDesktopPortalSupport = true; })
|
|
||||||
]);
|
|
||||||
|
|
||||||
programs.mpv = {
|
programs.mpv = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
@@ -10,19 +9,16 @@
|
|||||||
# do not support .pdf
|
# do not support .pdf
|
||||||
foliate
|
foliate
|
||||||
|
|
||||||
# instant messaging
|
|
||||||
telegram-desktop
|
|
||||||
# discord # update too frequently, use the web version instead
|
|
||||||
|
|
||||||
# remote desktop(rdp connect)
|
# remote desktop(rdp connect)
|
||||||
remmina
|
remmina
|
||||||
freerdp # required by remmina
|
freerdp # required by remmina
|
||||||
|
|
||||||
# my custom hardened packages
|
# my custom hardened packages
|
||||||
pkgs.nixpaks.qq
|
nixpaks.qq
|
||||||
pkgs.nixpaks.qq-desktop-item
|
nixpaks.telegram-desktop
|
||||||
# qqmusic
|
# qqmusic
|
||||||
pkgs.bwraps.wechat
|
bwraps.wechat
|
||||||
|
# discord # update too frequently, use the web version instead
|
||||||
];
|
];
|
||||||
|
|
||||||
# allow fontconfig to discover fonts and configurations installed through home.packages
|
# allow fontconfig to discover fonts and configurations installed through home.packages
|
||||||
|
|||||||
@@ -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 ];
|
||||||
|
# };
|
||||||
|
}
|
||||||
@@ -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()
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,6 @@
|
|||||||
(lib.optionals pkgs.stdenv.isx86_64 [
|
(lib.optionals pkgs.stdenv.isx86_64 [
|
||||||
# https://joplinapp.org/help/
|
# https://joplinapp.org/help/
|
||||||
joplin # joplin-cli
|
joplin # joplin-cli
|
||||||
joplin-desktop
|
# joplin-desktop
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.desktop.nvidia;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.desktop.nvidia = {
|
||||||
|
enable = mkEnableOption "whether nvidia GPU is used";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf (cfg.enable && cfg.enable) {
|
||||||
|
home.sessionVariables = {
|
||||||
|
# for hyprland with nvidia gpu" = " ref https://wiki.hyprland.org/Nvidia/
|
||||||
|
"LIBVA_DRIVER_NAME" = "nvidia";
|
||||||
|
"__GLX_VENDOR_LIBRARY_NAME" = "nvidia";
|
||||||
|
# VA-API hardware video acceleration
|
||||||
|
"NVD_BACKEND" = "direct";
|
||||||
|
|
||||||
|
"GBM_BACKEND" = "nvidia-drm";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
wallpapers,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
systemd.user.services.wallpaper = {
|
|
||||||
Unit = {
|
|
||||||
Description = "Wallpaper Switcher daemon";
|
|
||||||
After = [
|
|
||||||
"graphical-session-pre.target"
|
|
||||||
"xdg-desktop-autostart.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()
|
|
||||||
@@ -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";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -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" ]
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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 = {
|
||||||
|
# ......
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
zed-editor
|
|
||||||
code-cursor
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
# Hyprland
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
show hyprland's log:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
hyprctl rollinglog
|
|
||||||
```
|
|
||||||
@@ -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
|
|
||||||
@@ -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,139 +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
|
|
||||||
bind = , XF86PowerOff, exec, shutdown -h now
|
|
||||||
|
|
||||||
# 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
|
|
||||||
@@ -1,145 +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
|
|
||||||
}
|
|
||||||
|
|
||||||
# See: https://wiki.hyprland.org/Configuring/Variables
|
|
||||||
gestures {
|
|
||||||
workspace_swipe = off
|
|
||||||
}
|
|
||||||
|
|
||||||
#-- 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)$
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
|
|
||||||
general {
|
|
||||||
lock_cmd = pidof swaylock || swaylock # avoid starting multiple instances
|
|
||||||
before_sleep_cmd = loginctl lock-session # lock before suspend
|
|
||||||
after_sleep_cmd = hyprctl dispatch dpms on # resume dpms after suspend
|
|
||||||
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests
|
|
||||||
}
|
|
||||||
|
|
||||||
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
|
|
||||||
# listener {
|
|
||||||
# timeout = 180 # 3 minutes
|
|
||||||
# on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
|
|
||||||
# on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
|
|
||||||
# }
|
|
||||||
|
|
||||||
# listener {
|
|
||||||
# timeout = 600 # 10min.
|
|
||||||
# on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
|
||||||
# on-resume = brightnessctl -r # monitor backlight restore.
|
|
||||||
# }
|
|
||||||
|
|
||||||
listener {
|
|
||||||
timeout = 1200 # 20 minutes
|
|
||||||
on-timeout = pidof swaylock || swaylock # lock screen
|
|
||||||
on-resume = hyprctl dispatch dpms on # monitor wake up
|
|
||||||
}
|
|
||||||
|
|
||||||
listener {
|
|
||||||
timeout = 1260 # 21 minutes
|
|
||||||
on-timeout = hyprctl dispatch dpms off # screen off
|
|
||||||
on-resume = hyprctl dispatch dpms on && brightnessctl -r # monitor wake up & screen on
|
|
||||||
}
|
|
||||||
|
|
||||||
# listener {
|
|
||||||
# timeout = 1800 # 30min
|
|
||||||
# on-timeout = systemctl suspend # suspend pc
|
|
||||||
# }
|
|
||||||
@@ -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
|
|
||||||
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 23 KiB |