update: fixed issues and update flake inputs

This commit is contained in:
danny 2025-12-29 16:03:31 +08:00
parent 4b6183f0ec
commit b3c5ad2880
80 changed files with 3307 additions and 2059 deletions

View file

@ -8,18 +8,7 @@ in
{
systemConf = {
inherit hostname username;
face = ../../../home/config/.face;
domain = "net.dn";
hyprland = {
enable = true;
monitors = [
{
desc = "LG Display 0x0665";
output = "eDP-1";
props = "preferred, 0x0, 1.25";
}
];
};
niri.enable = true;
};
imports = [

View file

@ -5,78 +5,88 @@
}:
let
inherit (lib) mkForce;
inherit (config.networking) hostName;
inherit (config.systemConf) username;
in
{
home-manager = {
users."${username}" = {
home.sessionVariables = {
BROWSER = mkForce "chromium";
};
home-manager.users."${username}" = {
home.sessionVariables = {
BROWSER = mkForce "chromium";
};
programs.chromium = {
enable = true;
extensions = [
# Bitwarden
services.kanshi.settings = [
{
profile.name = hostName;
profile.outputs = [
{
id = "nngceckbapebfimnlniiiahkandclblb";
}
# Vimium
{
id = "dbepggeogbaibhgnhhndojpepiihcmeb";
}
# Dark Reader
{
id = "eimadpbcbfnmbkopoojfekhnkhdbieeh";
}
# Vertical Tabs
{
id = "efobhjmgoddhfdhaflheioeagkcknoji";
criteria = "LG Display 0x0665";
position = "0,0";
scale = 1.25;
}
];
};
}
];
imports = [
../../../../home/presets/basic.nix
(import ../../../../home/user/bitwarden.nix {
email = "danny@net.dn";
baseUrl = "https://bitwarden.net.dn";
})
programs.hyprlock.monitors = [
"LG Display"
];
# waybar
(import ../../../../home/user/waybar.nix {
settings = [
{
output = "eDP-1";
height = 46;
modules-left = [
"custom/os"
"hyprland/workspaces"
"clock"
"mpris"
];
modules-right = [
"wlr/taskbar"
"temperature"
"custom/wallRand"
"custom/wireguard"
"custom/recording"
"idle_inhibitor"
"network"
"pulseaudio"
"battery"
"custom/swaync"
];
}
];
})
# Git
(import ../../../../home/user/git.nix {
inherit username;
email = "danny10132024@gmail.com";
})
programs.chromium = {
enable = true;
extensions = [
# Bitwarden
{
id = "nngceckbapebfimnlniiiahkandclblb";
}
# Vimium
{
id = "dbepggeogbaibhgnhhndojpepiihcmeb";
}
# Dark Reader
{
id = "eimadpbcbfnmbkopoojfekhnkhdbieeh";
}
# Vertical Tabs
{
id = "efobhjmgoddhfdhaflheioeagkcknoji";
}
];
};
imports = [
../../../../home/presets/basic.nix
(import ../../../../home/user/bitwarden.nix {
email = "danny@net.dn";
baseUrl = "https://bitwarden.net.dn";
})
# waybar
(import ../../../../home/user/waybar.nix {
settings = [
{
output = "eDP-1";
height = 46;
modules-left = [
"custom/os"
"hyprland/workspaces"
"clock"
"mpris"
];
modules-right = [
"wlr/taskbar"
"temperature"
"custom/wallRand"
"custom/wireguard"
"custom/recording"
"idle_inhibitor"
"network"
"pulseaudio"
"battery"
"custom/swaync"
];
}
];
})
];
};
}

View file

@ -1,5 +1,5 @@
wireguard:
wg0.conf: ENC[AES256_GCM,data:drqs+CkZVZH4K87jWZLy33NuqPeqLkyTp6mDoxcOsEYGaIR38pommv4TSynAOvrUC3dCw9O+qLHEiSwlJGoZOQKFzHxUefKrCtkRMCE3ytDKFmJbLoKT/GPxnOOenIm8JxKX6nsLaqCk36ODXzTA8iU8ICN2zqoCiodjx72Ge2KckQzSak04v28B6viuzfl8zipD1Fetm72sOBTX0I0WwoziDBBL77x1hX/8POob3ISrTejhik18dxAPLB9H3iVl1aOHhszsrAYB26IfujY/FxRqIrn8v+H2aFen3oowRjd/wTPtc/rLZj/7n6/Sl3NDzOE+jIYYG7yym7lkUM9Z,iv:oS01iUSG0ufUzIsfPD/jF3/TPEDDBp+CnnLQnyze8dM=,tag:mtmY3OVz3k7eu5Lxe14KLg==,type:str]
wg0.conf: ENC[AES256_GCM,data:9wegrw4ZbY+T/gNYi0gt4n6Db1/rRpsiqVbQr8QoYTwOiWBjKO2PGTTM5aK3khk5t2pYOTSqEBn5+5J/JYZpQ6nvJMcqn0+31KMuMT9/0akxOm112Tj31vOdBwRvSQVLBzmQtPABgMlV36lRtpVU71lwiNO4M33ygzL/tm7EMt0e75Nr9CZkGI7BGtnATBzbj3ysftsbFPF2iIgZ9fej4I78rJ1HavAsAgcrxksWAJjFZyFGWinkW4eiwDKlqBvRUW0tE8TF897ZmX90UnwXwjtyJcyJH6nzwrRDJgxR7uyRL/HIusmVZHCNSlo8dSaxAROXOw5ULjmQpXzzPAVUxw==,iv:FCv2ADYZXflBYuI9B9xvUSAYX8+v2Qf9EJjZ/TX27sA=,tag:caR4HS3yYrjNP1IzxgoOXA==,type:str]
sops:
age:
- recipient: age1uvsvf5ljaezh5wze32p685kfentyle0l2mvysc67yvgct2h4850qqph9lv
@ -20,7 +20,7 @@ sops:
V09NYXpBYXBtYWdBajJubmVFL2loY0EKJdYKQHPriOT0eouvRUiCyqLSTzugUZxl
BFTwfCez1/K2ERKQkKsMfIARbHaI2SRyDxM2O1IJ+DOIJ2383K6Gvw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-11-21T12:34:30Z"
mac: ENC[AES256_GCM,data:LUqoXWMhmQQgqq1AX7I2v7z58ywstjWzsVTav9iu0RrkCxeB1u5V90E4tcnfjtquLwjiabpLSRpkUXE33DhqcgxLIklX0Cpld5TK1Bsdn8DXyKk1Lhfdf3OL7cn14kb4CqXTNlDyqwM+BBsYmdFQzPjb8IPiD9y+mTO5yHuAta0=,iv:mbHhZdv+0lDI9cNUsI3oatwbItQ6Xfvgm0UMQdu9FKA=,tag:aPFWPwahvMjBojzthZZ6vQ==,type:str]
lastmodified: "2025-12-19T12:39:58Z"
mac: ENC[AES256_GCM,data:tTvNyD6Lekc0RUIr9CpCjhWl2Gb9pHRubeoTrwceUCkm074EjYIzvqwiX5fzt6Cc5/H/k8NWJZBAoI3tOeCrXpo1Lbb0fCjGqxTldGN44pLR/5q9bdAxLom3EEqKiBBryVxqAkkm1a98UXPtnh+oDyaFsqTbS65LolEtFEbV/3U=,iv:J0gMlpWc9TVSCRxcdUnlXtNnmahvbc12EsLeFB4BJlY=,tag:h0EaNQ/sl+3sU9+g4ohjtw==,type:str]
unencrypted_suffix: _unencrypted
version: 3.11.0

View file

@ -3,7 +3,7 @@
...
}:
{
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.kernelPackages = pkgs.linuxPackages_6_17;
fileSystems."/mnt/ssd" = {
device = "/dev/disk/by-label/DN-SSD";

View file

@ -1,28 +1,46 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "vmd" "xhci_pci" "thunderbolt" "nvme" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ];
boot.initrd.availableKernelModules = [
"vmd"
"xhci_pci"
"thunderbolt"
"nvme"
"usb_storage"
"usbhid"
"sd_mod"
"rtsx_pci_sdmmc"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-label/NIXROOT";
fsType = "ext4";
};
fileSystems."/" = {
device = "/dev/disk/by-label/NIXROOT";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-label/NIXBOOT";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
fileSystems."/boot" = {
device = "/dev/disk/by-label/NIXBOOT";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
];
};
swapDevices = [ ];

View file

@ -1,3 +1,7 @@
{ config, lib, ... }:
let
inherit (lib) mkForce;
in
{
imports = [
(import ../../../modules/nvidia.nix {
@ -6,4 +10,6 @@
nvidia-bus-id = "PCI:1:0:0";
})
];
hardware.nvidia.package = mkForce config.boot.kernelPackages.nvidiaPackages.beta;
}

View file

@ -11,24 +11,10 @@ in
{
systemConf = {
inherit hostname username;
domain = "net.dn";
enableHomeManager = true;
nvidia.enable = true;
hyprland = {
enable = true;
monitors = [
{
desc = "ASUSTek COMPUTER INC ASUS VG32VQ1B 0x00002271";
output = "DP-2";
props = "2560x1440@165, 0x0, 1";
}
{
desc = "Acer Technologies XV272U V3 1322131231233";
output = "DP-3";
props = "2560x1440@180, -1440x-600, 1, transform, 1";
}
];
};
hyprland.enable = false;
niri.enable = true;
sddm.package = (
pkgs.sddm-astronaut.override {
embeddedTheme = "purple_leaves";
@ -65,6 +51,8 @@ in
./sops
./utility
./virtualisation
../../modules/shells/noctalia
../../modules/sunshine.nix
];
# Live Sync D

View file

@ -1,6 +1,6 @@
{
imports = [
# ./netbird.nix
./osx-kvm.nix
# ./osx-kvm.nix
];
}

View file

@ -1,6 +1,5 @@
{
pkgs,
pkgs-stable,
config,
...
}:
@ -18,8 +17,8 @@ let
});
in
{
environment.systemPackages = [
pkgs-stable.shadps4
environment.systemPackages = with pkgs; [
shadps4
];
home-manager = {

View file

@ -1,81 +1,187 @@
{
config,
lib,
helper,
...
}:
let
inherit (lib) optionalString;
inherit (helper) getMonitors;
inherit (builtins) elemAt;
inherit (config.networking) hostName;
inherit (config.systemConf) username;
inherit (config.systemConf.hyprland) monitors;
inherit (lib) optionalString mkForce;
wmName = if config.programs.hyprland.enable then "hyprland" else "niri";
in
{
home-manager.users."${username}" = {
imports = [
../../../../home/presets/basic.nix
../../../../home/user/zellij.nix
./expr
./wm
home-manager.users."${username}" =
{
osConfig,
config,
pkgs,
...
}:
let
monitors = getMonitors hostName config;
mainMonitor = (elemAt monitors 0).criteria;
secondMonitor = (elemAt monitors 1).criteria;
mainMonitorSwayFormat = "desc:ASUSTek COMPUTER INC - ASUS VG32VQ1B";
in
{
home.packages = with pkgs; [
mattermost-desktop
];
# Bitwarden client
(import ../../../../home/user/bitwarden.nix {
email = "danny@net.dn";
baseUrl = "https://bitwarden.net.dn";
})
# NOTE: Disable idle
services.hypridle.enable = mkForce false;
# waybar
(import ../../../../home/user/waybar.nix {
settings = [
# monitor 1
# hyprlock shows on main monitor
programs.hyprlock.monitors = [
mainMonitorSwayFormat
];
services.kanshi.settings = [
{
profile.name = "${hostName}";
profile.outputs = [
{
criteria = "ASUSTek COMPUTER INC ASUS VG32VQ1B 0x00002271";
mode = "2560x1440@164.554001Hz";
position = "0,0";
scale = 1.0;
}
{
criteria = "Acer Technologies XV272U V3 1322131231233";
mode = "2560x1440@179.876999Hz";
position = "-1440,-600";
transform = "90";
}
];
}
];
programs.ghostty.settings = {
background-opacity = 0.9;
};
# ==== Shells ==== #
# Caelestia
programs.caelestia.settings = {
osd = {
enableBrightness = false;
enableMicrophone = true;
};
};
# Noctalia
programs.noctalia-shell.filteredIds = [
"Brightness"
];
# ==== WM ==== #
programs.niri.settings = {
binds = with config.lib.niri.actions; {
"Mod+G".action = focus-workspace "game";
"Mod+Shift+G".action.move-column-to-workspace = [ "game" ];
# Overrides
"Mod+B".action = mkForce (focus-workspace "browser");
"Mod+Shift+B".action.move-column-to-workspace = [ "browser" ];
};
hotkey-overlay = {
hide-not-bound = true;
skip-at-startup = true;
};
workspaces."browser" = {
open-on-output = secondMonitor;
};
# Other settings are located in `public/dn/common.nix`
workspaces."game" = {
open-on-output = mainMonitor;
};
window-rules = [
# Second Monitor App
{
output = "${(builtins.elemAt monitors 0).output}";
height = 48;
modules-left = [
"custom/os"
"hyprland/workspaces"
"clock"
"custom/cava"
"mpris"
];
modules-right = [
"wlr/taskbar"
(optionalString config.programs.gamemode.enable "custom/gamemode")
"custom/bitwarden"
"custom/airplay"
"custom/wallRand"
"custom/wireguard"
"custom/recording"
"idle_inhibitor"
"network"
"cpu"
"memory"
"pulseaudio"
"custom/swaync"
];
}
# monitor 2
{
output = "${(builtins.elemAt monitors 1).output}";
height = 54;
modules-left = [
"clock"
"mpris"
];
modules-right = [
"wlr/taskbar"
"temperature"
"cpu"
"memory"
"pulseaudio"
matches = [
{
app-id = "^discord$";
}
{
app-id = "^thunderbird$";
}
];
open-on-output = secondMonitor;
}
];
})
};
# Git
(import ../../../../home/user/git.nix {
inherit username;
email = "danny10132024@gmail.com";
})
];
};
imports = [
../../../../home/presets/basic.nix
../../../../home/user/zellij.nix
./expr
./wm
# Bitwarden client
(import ../../../../home/user/bitwarden.nix {
email = "danny@net.dn";
baseUrl = "https://bitwarden.net.dn";
})
# waybar
(import ../../../../home/user/waybar.nix {
matchByDesc = true;
settings = [
# monitor 1
{
output = "${(builtins.elemAt monitors 0).criteria}";
height = 48;
modules-left = [
"custom/os"
"${wmName}/workspaces"
"clock"
"custom/cava"
"mpris"
];
modules-right = [
"wlr/taskbar"
(optionalString osConfig.programs.gamemode.enable "custom/gamemode")
"custom/bitwarden"
"custom/airplay"
"custom/wallRand"
"custom/wireguard"
"custom/recording"
"idle_inhibitor"
"network"
"cpu"
"memory"
"pulseaudio"
"custom/swaync"
];
}
# monitor 2
{
output = "${(builtins.elemAt monitors 1).criteria}";
height = 54;
modules-left = [
"clock"
"mpris"
];
modules-right = [
"wlr/taskbar"
"temperature"
"cpu"
"memory"
"pulseaudio"
];
}
];
})
];
};
}

View file

@ -4,7 +4,7 @@
./mail.nix
./nginx.nix
./wireguard.nix
./nextcloud.nix
# ./nextcloud.nix
# ./netbird.nix
];
}

View file

@ -5,10 +5,26 @@
...
}:
let
inherit (lib) mkIf mkForce;
hostname = "drive.dnywe.com";
port = 31007;
in
{
sops.secrets = {
"nextcloud/adminPassword" = mkIf config.services.nextcloud.enable {
owner = "nextcloud";
group = "nextcloud";
};
"nextcloud/signaling.conf" = mkIf config.services.nextcloud.enable {
owner = "signaling";
group = "signaling";
mode = "0640";
};
"nextcloud/whiteboard" = mkIf config.services.nextcloud.enable {
owner = "nextcloud";
};
};
imports = [
(import ../../../modules/nextcloud.nix {
configureACME = false;
@ -25,10 +41,10 @@ in
];
services.nextcloud = {
https = lib.mkForce false;
# enable = mkForce false;
https = mkForce false;
extraApps = {
inherit (config.services.nextcloud.package.packages.apps) spreed;
twofactor_totp = pkgs.fetchNextcloudApp {
url = "https://github.com/nextcloud-releases/twofactor_totp/releases/download/v6.4.1/twofactor_totp-v6.4.1.tar.gz";
sha256 = "sha256-Wa2P6tpp75IxCsTG4B5DQ8+iTzR7yjKBi4ZDBcv+AOI=";
@ -49,15 +65,15 @@ in
};
};
users.groups.signaling = {
users.groups.signaling = mkIf config.services.nextcloud.enable {
};
users.users.signaling = {
users.users.signaling = mkIf config.services.nextcloud.enable {
isSystemUser = true;
group = "signaling";
};
systemd.services.nextcloud-spreed-signaling = {
systemd.services.nextcloud-spreed-signaling = mkIf config.services.nextcloud.enable {
requiredBy = [
"multi-users.target"
"phpfpm-nextcloud.service"
@ -71,7 +87,7 @@ in
};
};
services.nats = {
services.nats = mkIf config.services.nextcloud.enable {
enable = true;
settings = {
host = "127.0.0.1";

View file

@ -1,5 +1,5 @@
wireguard:
wg0.conf: ENC[AES256_GCM,data:AL5GVljm3Ta9Deb2SiUNEvtTSL1L9E5lcMhE6szjXCCfBnOpK8RiVe/b6JGC9RzE6DFiiQdZoKBWLy7rcrIjrDA09bCaQO5Gjjl2YtEkI0FULcMI8PuIQ8j2sYgjk0FAXRsmNy5U/v6afIum5wN2iTsYL1y3DObeRoNrsQNhBYDQBE0ZmcJxgtQYihUuGuEYcDLhzhFXfYKZrG1Grwqpcn0KK8K5A3qPgtq8fn86KuMZ6i4MHAiG7OJgXMpgTHjmWpJ819qsswjkpF1RgjgpET28IiNza9FIbxiflIXXagSZeigtLIJ6dOZwBgt0f5dgfr41dN/hT5SEHFADdXIa,iv:OsB8mf+WB9C/kvGzTs/LxqjimPISDGhU2P2GjbkYEbc=,tag:lCxtFVViYejQhZUfmdkGrg==,type:str]
wg0.conf: ENC[AES256_GCM,data:ozySeNEvkiLt9TGrZCrlJWKT5gcSlZ9T8AeXGO97SPgxI394eCQ/LOkVFl7AykhZvs7YkxMpZzAZxc0oNdTYuDlqfrNr0pqTUJmpX+5PVRmDb5z2MJvERktVkJ4LSvVodoYznDwT/y9q199AFKf3t4EoWuRyR/il6P8HuGVHXrKRYUrwuB4nuq1SIByY+8D2gzohFB/s6pSOPYy6/xCt0Nm+x0wmcdrlyOb0S+4WXlcou2ll98o9q2YDdVBKeW4jyUjFqXM2XzD0JXpAi9ZFlyzxyYNwa4oMYATyCBCH4BNHqe850QHEoCaOovioEdDH/tluB2X/891ixqzURypzbg==,iv:3Q5xOgGcg8/DIwHt4fHsQGtN8f2hGpVDtf47PcwW62I=,tag:SbJqhWi3+h1O5ZIOayDrUw==,type:str]
dovecot:
openldap: ENC[AES256_GCM,data:U3YYreEqoh+F0Mrli52jgQowrUqIUPmdQps=,iv:vTjHBFsue+89GOCDigVIktgGSZNZv8A2e3GM80o6TXc=,tag:GGh+hsT+yV/I12meXxflbQ==,type:str]
nextcloud:
@ -38,7 +38,7 @@ sops:
MEdmWkFwNXZoR1ZVRnQ0aWlkYzZwSmsK0EFecUIdqlDKX08oRCoDQQ3QCX1wzb8w
lghDJhWlfuKr+X24GoE4UK04aJVLqVMRRI4BJW+LQXeHS+dWKu3mQA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-11-22T10:29:33Z"
mac: ENC[AES256_GCM,data:hcqqPP7EEDrFWwKU3Yl0XM6h17pLXBsmISMd94qYzaxmT/nKnF5bn8dq6M1C9t0Q0vvLjrPm94Gv2HPPJOX960whYMfwuXv/RkORJGb4qXdkXsGJaCrR9M51HArrd7Ba3pjoEyp3Jz9xTNrqg8kCDphBs0oZRV6dQDJUTdLbR50=,iv:eH5T27fthAad/dM5NxXyQawiVmTGgwJbeRXAiut9kL4=,tag:3lGkJMZKo8O1Zm1fB3DJ9Q==,type:str]
lastmodified: "2025-12-19T12:39:37Z"
mac: ENC[AES256_GCM,data:JSwphdjAfZcLSuctzruwVjBQXhbQKnEda93KlrH8eoSJcFXBRCMz0v+HY2nBlrC9lwp9vgT3HnGmR6hIPi48UtyxYcGOJy33OY4M1it0WGE2r8Ikg++5cBUtacK4QdwuMCADhNT5ZHs5T7UUX0GMLeqAtrcJ3FKt+4+catsOvnE=,iv:7ZTi86IkbScizZlOCk+uXDyWzrFDsLRuLuzjUFsMFR0=,tag:3/i7BZ8XYALj7RYj4dIUgA==,type:str]
unencrypted_suffix: _unencrypted
version: 3.11.0

View file

@ -6,18 +6,6 @@ in
sops = {
secrets = {
"wireguard/wg0.conf" = { };
"nextcloud/adminPassword" = mkIf config.services.nextcloud.enable {
owner = "nextcloud";
group = "nextcloud";
};
"nextcloud/signaling.conf" = mkIf config.services.nextcloud.enable {
owner = "signaling";
group = "signaling";
mode = "0640";
};
"nextcloud/whiteboard" = mkIf config.services.nextcloud.enable {
owner = "nextcloud";
};
"lam/env" = { };

View file

@ -2,5 +2,6 @@
imports = [
../../../modules/virtualization.nix
../../../modules/wine.nix
./kvm.nix
];
}

View file

@ -0,0 +1,24 @@
{ config, pkgs, ... }:
let
inherit (config.systemConf) username;
in
{
programs.virt-manager.enable = true;
users.groups.libvirtd.members = [ username ];
virtualisation = {
libvirtd = {
enable = true;
qemu.swtpm.enable = true;
qemu.vhostUserPackages = with pkgs; [ virtiofsd ];
};
spiceUSBRedirection.enable = true;
};
environment.systemPackages = with pkgs; [
# dnsmasq
qemu
quickemu
];
}

View file

@ -61,6 +61,12 @@ in
"nextcloud"
"vaultwarden"
"paperless"
"keycloak"
"pdns"
"powerdnsadmin"
"roundcube"
"grafana"
"crowdsec"
];
location = "${backupPath}/postgresql";
};

View file

@ -9,8 +9,6 @@ in
{
systemConf = {
inherit hostname username;
domain = "net.dn";
hyprland.enable = false;
security = {
allowedDomains = [
"github.com"
@ -25,6 +23,9 @@ in
allowedIPs = [
"10.0.0.0/24"
"127.0.0.1"
# CrowdSec
"52.51.161.146"
"34.250.8.127"
];
allowedIPv6 = [
"ff02::/16"
@ -45,7 +46,7 @@ in
'';
imports = [
../public/dn/default.nix
../public/dn
./common
./home
./network

View file

@ -1,34 +1,20 @@
{
inputs,
config,
pkgs,
...
}:
let
inherit (config.systemConf) username;
in
{
home-manager = {
users."${username}" = {
imports = [
../../../../home/user/config.nix
../../../../home/user/direnv.nix
../../../../home/user/environment.nix
../../../../home/user/nvf
../../../../home/user/shell.nix
../../../../home/user/yazi.nix
{
home.packages = with pkgs; [
inputs.ghostty.packages.${system}.default
];
}
# Git
(import ../../../../home/user/git.nix {
inherit username;
email = "danny10132024@gmail.com";
})
];
};
home-manager.users."${username}" = {
imports = [
../../../../home/user/config.nix
../../../../home/user/direnv.nix
../../../../home/user/environment.nix
../../../../home/user/nvf
../../../../home/user/shell.nix
../../../../home/user/yazi.nix
../../../../home/user/ghostty.nix
];
};
}

View file

@ -159,6 +159,12 @@ let
publicKey = "5th0G9c7vHrhcByvPJAbrn2LXjLPqDEMsHzda0FGUTQ=";
allowedIPs = [ "10.0.0.148/32" ];
}
# DN Win
{
dns = "win";
publicKey = "LuKw1w879a3kRaBK+faToVmb9uLhbj6tf/DstgMMJzQ=";
allowedIPs = [ "10.0.0.149/32" ];
}
];
in
{
@ -424,7 +430,8 @@ in
# python
''
import cachelib
BIND_ADDRESS = "127.0.0.1"
PORT = 8081
SESSION_TYPE = 'cachelib'
SESSION_CACHELIB = cachelib.simple.SimpleCache()
SQLALCHEMY_DATABASE_URI = 'postgresql://powerdnsadmin@/powerdnsadmin?host=localhost'

View file

@ -1,5 +1,5 @@
{
imports = [
./atticd.nix
# ./atticd.nix
];
}

View file

@ -1,6 +1,6 @@
{
imports = [
./fail2ban.nix
./crowdsec.nix
# ./crowdsec.nix
];
}

View file

@ -7,7 +7,7 @@
}:
let
inherit (helper.grafana) mkDashboard;
inherit (lib) optionalAttrs;
inherit (lib) optionalAttrs optional;
inherit (config.networking) hostName;
datasourceTemplate = [
@ -78,28 +78,33 @@ in
}
];
})
(optionalAttrs config.services.crowdsec.settings.general.prometheus.enabled {
job_name = "crowdsec";
static_configs = [
{
targets = [
"localhost:${toString config.services.crowdsec.settings.general.prometheus.listen_port}"
];
labels = {
machine = "${hostName}";
};
}
];
relabel_configs = [
{
source_labels = [ "__address__" ];
target_label = "instance";
regex = "(.*):[0-9]+";
replacement = "CrowdSec - \${1}";
}
];
})
];
]
++ (optional
(config.services.crowdsec.enable && config.services.crowdsec.settings.general.prometheus.enabled)
[
{
job_name = "crowdsec";
static_configs = [
{
targets = [
"localhost:${toString config.services.crowdsec.settings.general.prometheus.listen_port}"
];
labels = {
machine = "${hostName}";
};
}
];
relabel_configs = [
{
source_labels = [ "__address__" ];
target_label = "instance";
regex = "(.*):[0-9]+";
replacement = "CrowdSec - \${1}";
}
];
}
]
);
})
(import ../../../modules/grafana.nix {

View file

@ -11,15 +11,15 @@ ldap:
env: ENC[AES256_GCM,data:XmIz9JEswvK1jVmTsTgdDZJXeK7j8E/b6nF+uuZpvpoe5/IogjMrzcWi3EB1i44z1Dxgoim8QM8ZtczY,iv:1jK/J2qfKODrbrNpSHl110jPvbNLl0zI//laowerJOc=,tag:tkBVxDC8Ebn3Aac+LATQFA==,type:str]
oauth:
password: ENC[AES256_GCM,data:lzS/OtqHb/24IJnOKxMBQA==,iv:BI1n7Jjklye6WM2ss7jpaGgokrJpAG2Ipil7VrY30XM=,tag:i3OByJ6LDwvAsS5CTrEQig==,type:str]
adminEnv: ENC[AES256_GCM,data:LECZ1/KtaEB7kUN6zNDUr08g2SVtGhWEvy2QA9jzU3vJ1U8NDnPXjfDkkH1bIw==,iv:pPz7J+DdF7zkqzFlevoeYQGZnA2PQDoRYcpOaOeHN3A=,tag:e0iVPSZQ1V3aWYtKpGnBGg==,type:str]
adminEnv: ENC[AES256_GCM,data:tF7ECUxG5QeNIvx3IFpTtY7NnSXROGHi48jGXZNgJVX5cABNIYBUqYW9/p2KbA==,iv:7oNmOBEs0b9mB6Ay7IULH2AumQOdIyQ+hDHm5kV6lTY=,tag:jkfA6D8CKg1jC21dS7Sumw==,type:str]
powerdns-admin:
secret: ENC[AES256_GCM,data:M5hD8B7kikseQJZCWUIlc7OJcQn0nwnx0QOSQe+Mf8TaztvyFfSfxv0vowNsx0MyGef4teuK+DW9/UTbRFEHeg==,iv:xaSgzhqMU9+ud1xfXLVkg3v2xcmIo35BOhml5VfHKBI=,tag:L1v95+HsIqNjVA1LGNbEJQ==,type:str]
salt: ENC[AES256_GCM,data:Vtn3/gJlElrFkPwoa05wlxVL/Sk4lNLghp1gi6o4V5A=,iv:/lRVfNOpERS963+9JNf8wATIY9FcicT8xQ9Cbw2by/s=,tag:x5WiNa56l7y3CKwbaamLLA==,type:str]
salt: ENC[AES256_GCM,data:rs4tZrVF4kb6/97wjQA2Npb2QeS6vjN3L1zRgmM=,iv:c0VTEtnahMSfs/PqeFQxYpDstLxPKaW1RyXMc6SQJu8=,tag:dXHUO2KJvP5Sz22Gv6ws/w==,type:str]
powerdns: ENC[AES256_GCM,data:d4qzUAjyHUxLynvP6vSxCzrihfb/X3KYHeRA/w+CButld7ulxL9W6PerhvNcJytgfJDQINvcgnMKjijJ/vC7VeO9p7ZyArh4/PWZwgiJ,iv:orfh5F4uCYq2IplG0Y7Q/RcSqIm5Xyzn3ejzPsm+/0k=,tag:YqfvBlJRpkmMy29z3wyJ1g==,type:str]
rspamd-trainer: ENC[AES256_GCM,data:EqWVADi7zr6AUZL5mlN1/xbpjuRIS3Zn,iv:M/xk7LywcRiKQM9LrnTnCKu3OS/YBf23CRkxh4ll1+c=,tag:4lH3hhMxWIzEUExJOt/41Q==,type:str]
rspamd: ENC[AES256_GCM,data:qEXHXdcvk24pAHEl6MI=,iv:L5tmoTu5Qk5sxDj3EmWfc39AHwRTT4T4gB1O2EsTQkY=,tag:vIhAOnEpWxtP0eU4stkQww==,type:str]
acme:
env: ENC[AES256_GCM,data:gHoAyc6+LK7jrTfrIlPJx+RNe90xTpVVykDEfor3+ifRDRCPfxLmfj1nWylRp7r3N/Ha8AlElvNPmn4mVMsM2OsXmZoYoO+YOVq1zShXHI3A2dHgzJGxaCu/zuf2AWefEsBDWhjbGxWUpjjcEh6mOgvuh0HHGdW0uq6EL5LqDZiPMGdYNdJLEuy6s9pdQt69mVWAwGVA9eTvbnG0W91/35SUeOSs+la+YRCSPQ==,iv:QebJyJ1+6dYQulVkDdkFx34KkiH9xzsX+C3TYDdIMkw=,tag:h7Oxt04PqkFDdb7ZuyVnlQ==,type:str]
env: ENC[AES256_GCM,data:DQaHr13K3faeyQk/05sVmmZRNvEbjmMP8y3nES1vyFO+oNX9nyyWcy5YEAO5tjRTxi/yM1ISlhbXWct4iRwAkvnhtoFRK/jpAfDv+W3J1LotaRxiPWSXUs5lS7uS0DpveRwQVv6qEl3Cs8vitHAJfRCKJoYv5HTJyvOnoWqHbnk=,iv:co3V0vu2c26NKHuoNoRv7td8qu6m0NTlvkr3EJBQGvM=,tag:leTY/DGg85Pm8gsAHah29Q==,type:str]
postsrsd:
secret: ENC[AES256_GCM,data:JZNwSymEjIFb8h3gnvFajxSaNYRxjA/NUruA4WX+uSqX0ufVcbVWgxQTr7U=,iv:ydGnCESCLbwyGKc+5witXDkT3OgW27LKen7PkqUL6mU=,tag:M3RGI6LgU5n2e6ZiXxTFfQ==,type:str]
grafana:
@ -70,7 +70,7 @@ sops:
OFloWEFuTC9GTXJsMG5NNktmdmIrY1kK0yN0ae0xNaydujV5lt2FiwXdyursG0DK
9i/B3TTAm9csDMMSTSFbiAUJDzG7kIqn++JU/cxvsGScSnhMqjEK/g==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-11-24T10:30:46Z"
mac: ENC[AES256_GCM,data:yBegCnXXKimHlZ5UcPL6O9VbhdpASMd09t7m2fxLFGYgHXYFsuRda8puVpe9EiukNRJzhkWZRjJUHI+nE2cdibx5Ewaom8lbe8pKB1A7qrVSXjU+f5HTMjUdB+ACAcGlErc0wniekwSQj2LfIYknYm2nVz2M5VeDbYxz7F5PAO0=,iv:vMdsGEe1ZPQdNtSXhtwC0StiuhBVViCuBGTURep37UM=,tag:mB2kZZcrGnmChQQRc4wvTA==,type:str]
lastmodified: "2025-12-29T05:31:41Z"
mac: ENC[AES256_GCM,data:7vRB92qX6NPYafjpTY0wS23bq5Jn57xkWamJZ2ZgD4/2rW+qRilmO6sqaZEktWr7q2jQzgSvdgZsgbuhkxoqQXrTVP7osjr8qQ20jL9OXLxSgPQry2QqNBqlSdjEUov/bygJA0oI46K8pdk6OrT07Few/nXMrvUixFAGGUsKmJc=,iv:Gd5X70COnDL4Ntps/bedF92uUH6hCosDj2dsbF0KQHw=,tag:O3vq/kFnay5le7F1Q2heJQ==,type:str]
unencrypted_suffix: _unencrypted
version: 3.11.0

View file

@ -0,0 +1,72 @@
{ config, ... }:
let
inherit (config.systemConf) username;
in
{
systemConf = {
face = ../../../../home/config/.face;
domain = "net.dn";
};
home-manager.users."${username}" =
{ ... }:
{
imports = [
# Git
(import ../../../../home/user/git.nix {
inherit username;
email = "Danny01161013@gmail.com";
})
];
# ==== Niri ==== #
programs.niri.settings = {
input.keyboard.xkb = {
layout = "us";
options = "caps:escape";
};
workspaces."game" = { };
window-rules = [
# Steam Game Fullscreen
{
matches = [
{
app-id = "^steam_app_(.*)$";
is-floating = false;
}
];
open-fullscreen = true;
}
# Steam & Steam Game
{
matches = [
{ app-id = "^steam_app_*"; }
{ app-id = "^pioneergame.exe$"; }
{
app-id = "^steam$";
title = "^Steam$";
}
];
open-on-workspace = "game";
}
# Steam Dialog float
{
matches = [
{ app-id = "^steam$"; }
{ title = "(.*)(EasyAntiCheat_EOS_Setup)(.*)"; }
{
app-id = "^pioneergame.exe$";
title = "^$";
}
];
excludes = [
{
title = "^Steam$";
}
];
open-floating = true;
}
];
};
};
}

View file

@ -1,5 +1,6 @@
{
imports = [
./yubikey.nix
./common.nix
];
}

View file

@ -1,5 +1,5 @@
ntfy: ENC[AES256_GCM,data:7m7hwmDWu6qP/mX7QujXPiDAmRC542CKyWzFaOL5sHza,iv:nn1F44LSFmrV2USRDD0z8CNfUhi40LZnvoU3j0nklcU=,tag:WhqQpThDaG10kNTk1tZxOQ==,type:str]
u2f_keys: ENC[AES256_GCM,data:boiKENOBo4hBWx9d+KVweCQrmFasDVUejuWrw60oPybPEW0pqTWz5GhQjfG6J0PWNFr/ObABT5eofKiSoy/pZ9uBQQGFO1nAA41axhI1Y9nuyBkkrNPYRnZsojdOcahNGMz1hplXTMzSdKgwutzA4/dsGG1ki/EOiuYRUgzQ/IzjEfqWGeBDlHoq9ohhTFFpsdNgZqgu23m3+Z0hcpquJdY3bhBi0L1nU3B88wJ7MiLyp2mVM3GA7i8jeIUmwqJCEuA3OkG3r3oUHO/l61N+0qtss8bmghf6bsJYtvkhCjXOiEE9R8dpCzjwXEhgAGcYiqiPWzLCl3WyYaytNlVJF/MHC+R0S1ruBV0RLrzCnvxaav8iqa4l3y2ErRB0qUgvO386suGNh2cEYTEEKF4GcQM6mzXbLzUqK4H+nGBC3SdArdphTIgWXP7C+romXzwgGVBLWW/4atRkj0ZF,iv:Rxke3HDAvcLv9sks5jDhNsfxXwSD4TgfGoN7v9HDntk=,tag:IkCsaFVPdgobd9+EX3CwIw==,type:str]
u2f_keys: ENC[AES256_GCM,data:0EofFtgar18YzbzXiT6NdC9nwMTQoYkeU8snRTwhUX2Hz+k4B46839xZet4Df5a8xpaB2CuoPvRkEMSxknBWGKkK+gZr2m+zogbpMTGQVTYqmqlnunywrhe9u9FQ5D1hwU4PYcOgDqox5dw4QMg/AUontu5BYTG3WKCCTDVIL+i6PejwXKcfoKHd9G1K2QHV33S40EM4/jjijgxW+NoO6vkEWIwxih/DxQ4YZYTHHBZXhKRD7Hwhikd6G3Vs3/xD/UOVVJKtkyn1wKNQf+O30Q2LNOhDQ8/weNfN9IAMpVtRqvEtFXA2rfp9zI7TY1iuSN9nN9hYuZJeCktvK1WiRvspU5wYn2jDtM83zCA8Udnq1XJbsGEv2aA3SYyxoldtkjFcjlupGa1lJiaANxhmpOfJp0IIkeXqnIkLE/FzRFiced58H1UV6InlH5S/Lz42854ec/jDlgvzCnDoWIsgfgQf+KmwRHznzeepPW7S3tyB/jbJETEfCJfZ3E6YmeAMWd85drTKsySjBGiM7mueb4thGstfgnAEO/Y3PuVc/qGS1j95lUc0w0zbr3VzwibxCsS02PgMIUE5gZPEllknbhh6QiqbS2AtTAb9pIwrpYfEmcZU2blofQ8WzkLEjqNnRGaDXzgIEw4OirM0tSaFGmT9Vy1XN4yvSVssjsW/wXg19U4S/6FS+zOvyg+lIkT3NOfu5dKQecz8cH0czEN5MoVj3fm5LBhFmDOawP5AAA8dLafMEepxbBIGr/9nzDP17trMfzFf78hymHTgQk/qFb6oWl9Ai1dFZRwHO7HcXpBveTpPMCaeNOjcvRrvKsm2HSzsWPCVsfX6nrmNjqyFJXpPuuNaPezclL/ApPdEXpi9Q+aVHAgjllBLAH/R8UJu71cJAo+x7TCWykG31xLO0xodtJ5Lwk3O1lMnznnQXT/fCVaFYV24OT/nS7hQOtDvlJOCfmSpZTmZxX31xF4Gt0Auok+0uPJzDfbFQH9WwifXn6F8ixdsLK/VJMEk8EZbHpkNSV6hzWJkiOeJCDl7SBKEcQ+FizYSfZuOcVEt83ScJuVa7IScVLdatnTTTpR4c5GASYLr3lahqYwhuZGcQEUIwjDXu8Oymo0Sbvnmev60wY5Q3BEMSX1iwt3QWdCe5Kzq2vEUQHP9s6lg7DgOeIA2xQRK5siqwOhw9i1qaHbPG+1yTFOx7gRu0+yBy2Qzkwsc9naD8Ce0hpwQmu4Nvpd5TjMnS51ljDMWBok5evdOtGeWL9mDz6VdxtuHbcBShmEOk+lfKKjpDeK5319veBX5ugCm8WXeDmIIhG12gI07xRVzPaeYEhnRG2pHy/+JdjlyGeh0oHCJOYPhxtwVbqXwmH83BGn3H05bdIWEjXs=,iv:pAdO+Uja/Zyf5uLMa9zbKvEMoOOjQgkqHYnEH+Bxd5k=,tag:mYngzcv0bGwVJBHOR6D4uw==,type:str]
sops:
age:
- recipient: age1uvsvf5ljaezh5wze32p685kfentyle0l2mvysc67yvgct2h4850qqph9lv
@ -29,7 +29,7 @@ sops:
QWV3VjRjNC9RaXNwbDdLWmVQNS94UzAKeLZSqcXRwkVoUUKd4PuRusbJwFlubdJy
kcxGMzvfT0BMYDp61vV+F5Vh4TkgddCzp6Lphbb/6orkWWpjmE9I4g==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-11-21T12:34:46Z"
mac: ENC[AES256_GCM,data:jec/S+h3feoez+1OaWkZHAlSNhsLv8R4yXPIFjVUaYionJKMUAAizLtVsmpVHNRn8OCBhb7zi+Yk4GClZQqg/I8iTY3tzDTIJJsHoj+KsxuQohRASDikaYLTfdad44vin8ayxSKjSScK3JpwX5B12Rffx8DCPqUtXY0TGa0ULoQ=,iv:R1YiVCx3WDZO4b2d9TbdTnWmVmG4MQye4TUWWdIa4Yk=,tag:ACZoECWIqDRITghc8KwUsA==,type:str]
lastmodified: "2025-12-09T08:03:16Z"
mac: ENC[AES256_GCM,data:6njhvipu8iUze0mmgFIWT6Neqy2xvNPB/4fW7OObHknXAh3VGAveBnigxAJmULua6HdQx4hZ2UkUrVBG8oStjCihFYJA0eBA9j9mM3rF7Piq2U98oGtw4A9Qj2PVC7Y8pOOuX25VRmDn78cw1PpwSEZL3zZ+8cqS5btHywJackY=,iv:AeRcrhhxl5v5YLNWUPx9qvGcMKHFQD/m87PJAGWa9iE=,tag:TN1KCUNa7lVWgxQ16WRijg==,type:str]
unencrypted_suffix: _unencrypted
version: 3.11.0

View file

@ -1,7 +1,5 @@
{ hostname }:
{
config,
lib,
pkgs,
...
}:
@ -12,20 +10,11 @@ in
systemConf = {
inherit hostname username;
domain = "net.dn";
hyprland = {
enable = true;
monitors = [
{
desc = "AU Optronics 0x82ED";
props = "prefered, 0x0, 1";
output = "eDP-1";
}
{
desc = "AOC 24B30HM2 27ZQ4HA00101";
props = "prefered, 1920x540, 1";
output = "HDMI-A-2";
}
];
hyprland.enable = true;
face = pkgs.fetchurl {
url = "https://files.net.dn/skydrive.jpg";
hash = "sha256-aMjl6VL1Zy+r3ElfFyhFOlJKWn42JOnAFfBXF+GPB/Q=";
curlOpts = "-k";
};
};

View file

@ -5,96 +5,96 @@
...
}:
let
inherit (config.networking) hostName;
inherit (config.systemConf) username;
inherit (lib) mkForce optionalString;
inherit (lib) optionalString;
memeSelector = pkgs.callPackage ../../../../home/scripts/memeSelector.nix {
url = "https://nextcloud.net.dn/public.php/dav/files/pygHoPB5LxDZbeY/";
};
faceIcon = pkgs.fetchurl {
url = "https://files.net.dn/skydrive.jpg";
hash = "sha256-aMjl6VL1Zy+r3ElfFyhFOlJKWn42JOnAFfBXF+GPB/Q=";
curlOpts = "-k";
};
in
{
environment.systemPackages = map lib.lowPrio [
pkgs.curl
pkgs.gitMinimal
memeSelector
];
home-manager = {
users."${username}" = {
imports = [
../../../../home/presets/basic.nix
home-manager.users."${username}" = {
services.kanshi.settings = [
{
profile.name = hostName;
profile.outputs = [
{
criteria = "AU Optronics 0x82ED";
}
{
criteria = "AOC 24B30HM2 27ZQ4HA00101";
position = "1920,540";
}
];
}
];
{
home.file.".face" = {
source = mkForce faceIcon;
};
}
programs.hyprlock.monitors = [
"desc:AU Optronics"
"desc:AOC 24B30HM2"
];
{
wayland.windowManager.hyprland = {
settings = {
input = {
kb_options = lib.mkForce [ ];
};
bind = [
"$mainMod ctrl, M, exec, ${memeSelector}/bin/memeSelector"
];
};
};
}
(import ../../../../home/user/waybar.nix {
settings = [
# monitor 1
{
output = "eDP-1";
modules-left = [
"custom/os"
"hyprland/workspaces"
"clock"
"custom/cava"
"mpris"
];
modules-right = [
"wlr/taskbar"
(optionalString config.programs.gamemode.enable "custom/gamemode")
"custom/airplay"
"custom/wallRand"
"custom/wireguard"
"custom/recording"
"idle_inhibitor"
"network"
"cpu"
"memory"
"pulseaudio"
"custom/swaync"
];
}
{
output = "HDMI-A-2";
modules-left = [
"clock"
"mpris"
];
modules-right = [
"wlr/taskbar"
"temperature"
"cpu"
"memory"
"pulseaudio"
];
}
];
})
];
wayland.windowManager.hyprland = {
settings = {
input.kb_options = lib.mkForce [ ];
bind = [
"$mainMod ctrl, M, exec, ${memeSelector}/bin/memeSelector"
];
};
};
imports = [
../../../../home/presets/basic.nix
(import ../../../../home/user/waybar.nix {
settings = [
# monitor 1
{
output = "eDP-1";
modules-left = [
"custom/os"
"hyprland/workspaces"
"clock"
"custom/cava"
"mpris"
];
modules-right = [
"wlr/taskbar"
(optionalString config.programs.gamemode.enable "custom/gamemode")
"custom/airplay"
"custom/wallRand"
"custom/wireguard"
"custom/recording"
"idle_inhibitor"
"network"
"cpu"
"memory"
"pulseaudio"
"custom/swaync"
];
}
{
output = "HDMI-A-2";
modules-left = [
"clock"
"mpris"
];
modules-right = [
"wlr/taskbar"
"temperature"
"cpu"
"memory"
"pulseaudio"
];
}
];
})
];
};
}

View file

@ -1,5 +1,5 @@
wireguard:
wg0.conf: ENC[AES256_GCM,data:6+FDJQiL+h0lOk74oBmE4yhav9fYMHxetTGkl8B9guqt1qe0l+K2xPzO4QETVCQl/AVs7Y8lnM1ucGCP6JScaiQONq0+cl5Am4+HJr6VhxEooPkt33qYtm6yzPqj/skyAMTsBE8NSmQ0W0nC6JSfl4IWiyksEkybotfClnFA7M5HCVm7pJ+/OXXM/UdiHHD2SanEfU1klA1pQrbxTOUHV/OUpt+d/upP21SGKBgvvm7P67qDeI+3bj9b+Og+Oz2P9YF1K1lcsC+xcdT50NOQ83p9UpUMYMaUGoPh6DcCVrDD2yr5CG01CbnP0SYqiY3vY5YfRDCEIeHFEk3clog3,iv:xQLcrm7Bj2Yoij8PkLIaWH7n81lF2IUGvhKmG3PGCAQ=,tag:YGCasXRmkv8QRgMGgfteiA==,type:str]
wg0.conf: ENC[AES256_GCM,data:AAxGzCQIk+fq97R48lmeNwjx6z5MGc01F+vAg8MAyFSoc2x7txXT2d6CVD8/IHH/OWqHqEXRZq/T6Gd7WakSW0QxnV/+TJiezBfQwEXjHn7JZWeL9FAQ/ki+81ORkEyxi+Qy7vSVYaZ/LwzsHk9SdPDyDcTOHKzvL83p9RifgEqQEm4a6Bcvf3s7g1VtH3eDOTC2biHY3LCck08OsagMdrndRK2FjWdsPo+MuimqvIQb+eUhJ63p7/XrVcudypJWVhWU4EmY00VBN+stURJMFAuvUcEhwhmJBBRufiadzfjqXQtCCS04MXgpQyv1eufo89d1LzvQiseTQCejlsyF4Q==,iv:A1iJ1C7oCQqRhaDZxEPr8N9cyViTMZRttwLZ4PWhqiU=,tag:A6Or7u2A3HgDcv6e3SXpEg==,type:str]
sops:
age:
- recipient: age1ar5h06qv72pduau043r04kschwcq0x0lm33wqvxzdh9grmp3cq3sy0ngnz
@ -20,7 +20,7 @@ sops:
SFlTZ1BoanoyRTB2ZkJWSHRpcnZwZDQKZ+KF6Jh3zRPr+bDmpeVqdo0qW7vnyFtv
V5K8QYFEq9ZEz2u2DEZtyzBYBtTvF3TZz+DL63NHGH7vUVU4cpzxYg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-10-01T05:33:09Z"
mac: ENC[AES256_GCM,data:DJzfOk3BSHFdhVbW1WUOfHVw0qt1VlLKAkavtwcerd4Mb6HmY3IE9XSAapmcgDjeAdonDlOOTZCArcymkjT8q1lvqkhNsCbR2BYyZTzOcbI52pqoKGfaYE9kUtg2i1bNnQAuNF6oTqJEoJv3zVUUP0NgdUMtOa9QJio+mJyJ3F0=,iv:KaBis+WF8AuQV7wThQ3OrhFZUl+CF4OZ8D5otSIJRrg=,tag:EjjGdYisgWztKK8yfdXBcg==,type:str]
lastmodified: "2025-12-19T12:40:34Z"
mac: ENC[AES256_GCM,data:pm8Fx9jFzk4ybdUEzA5IKA6iZdEswq6w1eNGWT9bir/YVK5rQz2x6ZLbmj3gY6C2QiEgWZGzA9XtHajDWNi+8tpefBfEwEuVztqjXTFM+toKTQcGKIJ5F3uOboE3zsbd9qe2n6zpECzUAeQulwlq2qQqPVSBGOZFUhI9hT23oVY=,iv:hi1sqP6PHz2J6f7lnMnhJd5Sk82aDIeyHqF9R81ofFw=,tag:0SLvYRjbAQ4iIoPNcyqfsg==,type:str]
unencrypted_suffix: _unencrypted
version: 3.10.2
version: 3.11.0

View file

@ -3,14 +3,11 @@
proxy ? true,
}:
{
pkgs,
config,
lib,
inputs,
...
}:
let
inherit (pkgs.stdenv.hostPlatform) system;
inherit (builtins) toString;
inherit (lib) mkIf;
@ -20,7 +17,6 @@ in
services = {
actual = {
enable = true;
package = inputs.actual-budget-server.packages.${system}.default;
settings = {
port = 31000;
hostname = "127.0.0.1";

View file

@ -1,19 +1,15 @@
{
services = {
blueman.enable = true;
};
services.blueman.enable = true;
hardware = {
bluetooth = {
enable = true;
powerOnBoot = true;
settings.General = {
experimental = true;
Privacy = "device";
JustWorksRepairing = "always";
Class = "0x000100";
FastConnectable = true;
};
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
settings.General = {
experimental = true;
Privacy = "device";
JustWorksRepairing = "always";
Class = "0x000100";
FastConnectable = true;
};
};

View file

@ -27,9 +27,27 @@ in
protontricks.enable = true;
gamescopeSession.enable = true;
extest.enable = true;
extraCompatPackages = with pkgs; [
proton-ge-bin
];
extraCompatPackages =
with pkgs;
let
proton-ge-10-25 =
(proton-ge-bin.overrideAttrs (
_: finalAttrs: {
pname = "proton-ge-bin";
version = "GE-Proton10-25";
src = fetchzip {
url = "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/${finalAttrs.version}/${finalAttrs.version}.tar.gz";
hash = "sha256-RKko4QMxtnuC1SAHTSEQGBzVyl3ywnirFSYJ1WKSY0k=";
};
}
)).override
{ steamDisplayName = "GE-Proton10-25"; };
in
[
proton-ge-bin
proton-ge-10-25
];
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;

View file

@ -11,7 +11,7 @@
optimise.automatic = true;
gc = {
automatic = true;
dates = "weekly";
dates = [ "03:15" ];
options = "--delete-older-than 7d";
};
};

View file

@ -1,20 +1,29 @@
{
pkgs,
inputs,
config,
...
}:
let
inherit (pkgs.stdenv.hostPlatform) system;
pkgs-hyprland = inputs.hyprland.inputs.nixpkgs.legacyPackages.${system};
wm =
if config.programs.hyprland.enable then
"hyprland"
else if config.programs.niri.enable then
"niri"
else
null;
pkgs-wm = if wm != null then inputs.${wm}.inputs.nixpkgs.legacyPackages.${system} else pkgs;
in
{
hardware = {
graphics = {
enable = true;
enable32Bit = true;
package32 = pkgs-hyprland.pkgsi686Linux.mesa;
package = pkgs-hyprland.mesa;
package32 = pkgs-wm.pkgsi686Linux.mesa;
package = pkgs-wm.mesa;
extraPackages = with pkgs; [
intel-media-driver # LIBVA_DRIVER_NAME=iHD
libva-vdpau-driver

View file

@ -7,6 +7,7 @@
}:
let
inherit (lib) mkIf;
inherit (config.systemConf) username;
hyprlandEnabled = config.programs.hyprland.enable;
in
@ -18,14 +19,6 @@ in
portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland;
};
xdg.portal = mkIf hyprlandEnabled {
enable = true;
xdgOpenUsePortal = true;
extraPortals = [
pkgs.xdg-desktop-portal-gtk
];
};
environment.sessionVariables = mkIf hyprlandEnabled {
NIXOS_OZONE_WL = "1";
WLR_NO_HARDWARE_CURSORS = "1";
@ -39,15 +32,6 @@ in
hyprpicker
hyprshot
kitty
# qt5.qtwayland
# qt6.qtwayland
wlogout
wl-clipboard
# Util
grim
slurp
]
);
@ -59,4 +43,8 @@ in
];
};
};
home-manager.users."${username}" = mkIf hyprlandEnabled {
imports = [ ../../home/user/hyprland.nix ];
};
}

View file

@ -13,8 +13,8 @@
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
supportedLocales = [ "en_US.UTF-8/UTF-8" ];
supportedLocales = [
"en_US.UTF-8/UTF-8"
];
};
}

View file

@ -47,7 +47,7 @@ in
];
};
systemd.services."phpfpm-nextcloud".postStart = ''
systemd.services."phpfpm-nextcloud".postStart = mkIf config.services.nextcloud.enable ''
${config.services.nextcloud.occ}/bin/nextcloud-occ config:app:set recognize node_binary --value '${lib.getExe pkgs.nodejs_22}'
${config.services.nextcloud.occ}/bin/nextcloud-occ config:app:set recognize tensorflow.purejs --value 'true'
'';
@ -112,7 +112,7 @@ in
};
};
services.nextcloud-whiteboard-server = {
services.nextcloud-whiteboard-server = mkIf config.services.nextcloud.enable {
enable = true;
settings = {
NEXTCLOUD_URL = "http${optionalString https "s"}://${hostname}";

313
system/modules/niri.nix Normal file
View file

@ -0,0 +1,313 @@
{
config,
pkgs,
lib,
...
}:
let
inherit (lib)
getExe
pipe
map
listToAttrs
genList
;
inherit (builtins) fetchurl;
inherit (config.systemConf) username;
# nvidia-offload-enabled = config.hardware.nvidia.prime.offload.enableOffloadCmd;
prefix = "nvidia-offload";
terminal = "ghostty";
browser = "zen-twilight";
brightnessStep = builtins.toString 10;
volumeStep = builtins.toString 4;
execOnceScript = pkgs.writeShellScript "startupExec" ''
# Fix nemo open in terminal
dconf write /org/cinnamon/desktop/applications/terminal/exec "''\'${terminal}''\'" &
dconf write /org/cinnamon/desktop/applications/terminal/exec-arg "''\'''\'" &
# Hint dark theme
dconf write /org/gnome/desktop/interface/color-scheme '"prefer-dark"' &
systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME &
'';
niri_peekaboo = fetchurl {
url = "https://raw.githubusercontent.com/heyoeyo/niri_tweaks/refs/heads/main/niri_peekaboo.py";
sha256 = "sha256:0l1x0bsa9vr089jhzgcz3xbh1hg15sw6njb91q0j9pdbrp2ym3dc";
};
in
{
programs.niri = {
enable = true;
package = pkgs.niri-unstable;
};
home-manager.users."${username}" =
{
osConfig,
config,
...
}:
let
rofiWall = import ../../home/scripts/rofiwall.nix { inherit config pkgs; };
rbwSelector = import ../../home/scripts/rbwSelector.nix { inherit pkgs; };
rNiri = pkgs.writeShellScriptBin "rNiri" ''
NIRI_SOCKET="/run/user/1000/$(ls /run/user/1000 | grep niri | head -n 1)" niri $@
'';
toggleWlogout = pkgs.writeShellScript "toggleWlogout" ''
if ${pkgs.busybox}/bin/pgrep wlogout > /dev/null; then
${pkgs.busybox}/bin/pkill wlogout
else
${config.programs.wlogout.package}/bin/wlogout --protocol layer-shell
fi
'';
in
with config.lib.niri.actions;
{
home.packages = with pkgs; [
nautilus # xdg-desktop-portal-gnome file picker
rNiri
];
xdg.portal = {
extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];
};
services.nfsm.enable = false;
programs.niri.package = osConfig.programs.niri.package;
programs.niri.settings = {
spawn-at-startup = [
{ argv = [ "${execOnceScript}" ]; }
];
screenshot-path = "~/Pictures/Screenshots/%Y-%m-%d_%H-%M-%S.png";
prefer-no-csd = true;
xwayland-satellite = {
enable = true;
path = getExe pkgs.xwayland-satellite-unstable;
};
animations = {
workspace-switch.kind.spring = {
damping-ratio = 1.0;
stiffness = 1000;
epsilon = 0.0001;
};
window-open.kind.easing = {
duration-ms = 150;
curve = "ease-out-expo";
};
window-close.kind.easing = {
duration-ms = 150;
curve = "ease-out-quad";
};
window-resize.kind.spring = {
damping-ratio = 1.0;
stiffness = 800;
epsilon = 0.0001;
};
};
layout.border = {
enable = true;
width = 4;
active.gradient = {
from = "#24273A";
to = "#EBDBB2";
angle = 45;
in' = "oklab";
relative-to = "window";
};
inactive.gradient = {
from = "#24273A";
to = "#24273A";
angle = 45;
in' = "oklab";
relative-to = "window";
};
};
window-rules = [
# Global
{
geometry-corner-radius =
let
round = 12.0;
in
{
bottom-left = round;
bottom-right = round;
top-left = round;
top-right = round;
};
clip-to-geometry = true;
opacity = 1.0;
draw-border-with-background = false;
}
# Float
{
matches = [
{ app-id = "^xdg-desktop-portal-gtk$"; }
{ app-id = "^(org.gnome.Nautilus)$"; }
];
open-floating = true;
}
];
input = {
focus-follows-mouse.enable = true;
mouse.accel-speed = -0.1;
keyboard = {
repeat-delay = 250;
repeat-rate = 35;
};
};
binds =
let
sh = spawn "sh" "-c";
in
{
# ==== Launch ==== #
"Mod+Return".action = sh ''${prefix} ${terminal}'';
"Mod+F".action = sh ''${browser}'';
"Mod+E".action = sh ''${prefix} ${terminal} -e yazi'';
"Mod+Ctrl+P".action = spawn "${rbwSelector}";
"Mod+Ctrl+M".action = spawn "${toggleWlogout}";
# Rofi
"Mod+Ctrl+W".action = spawn "${rofiWall}";
"Alt+Space".action = spawn "rofi" "-config" "~/.config/rofi/apps.rasi" "-show" "drun";
"Mod+Period".action = spawn "rofi" "-modi" "emoji" "-show" "emoji";
"Mod+Ctrl+C".action = spawn "rofi" "-modi" "calc" "-show" "calc" "-no-show-match" "-no-sort";
# ==== Media ==== #
"XF86AudioPrev".action = spawn "playerctl" "previous";
"XF86AudioNext".action = spawn "playerctl" "next";
"Mod+Ctrl+Comma".action = spawn "playerctl" "previous";
"Mod+Ctrl+Period".action = spawn "playerctl" "next";
"XF86AudioPlay".action = spawn "playerctl" "play-pause";
"XF86AudioStop".action = spawn "playerctl" "stop";
"XF86AudioMute".action = spawn "wpctl" "set-mute" "@DEFAULT_SINK@" "toggle";
"XF86AudioRaiseVolume".action =
sh ''wpctl set-mute @DEFAULT_SINK@ 0 && wpctl set-volume @DEFAULT_SINK@ ${volumeStep}%+'';
"XF86AudioLowerVolume".action =
sh ''wpctl set-mute @DEFAULT_SINK@ 0 && wpctl set-volume @DEFAULT_SINK@ ${volumeStep}%-'';
"XF86MonBrightnessDown".action = spawn "brightnessctl set ${brightnessStep}%-";
"XF86MonBrightnessUp".action = spawn "brightnessctl set ${brightnessStep}%+";
# ==== Movement ==== #
# Mouse Scroll
"Mod+WheelScrollDown" = {
cooldown-ms = 150;
action = focus-workspace-down;
};
"Mod+WheelScrollUp" = {
cooldown-ms = 150;
action = focus-workspace-up;
};
"Mod+Shift+WheelScrollDown" = {
cooldown-ms = 150;
action = focus-column-or-monitor-right;
};
"Mod+Shift+WheelScrollUp" = {
cooldown-ms = 150;
action = focus-column-or-monitor-left;
};
"Mod+WheelScrollRight".action = focus-column-right;
"Mod+WheelScrollLeft".action = focus-column-left;
# Touchpad
"TouchpadScrollDown" = {
cooldown-ms = 150;
action = focus-window-or-workspace-down;
};
"TouchpadScrollUp" = {
cooldown-ms = 150;
action = focus-window-or-workspace-up;
};
# Monitor Focus
"Mod+Ctrl+H".action = focus-monitor-left;
"Mod+Ctrl+L".action = focus-monitor-right;
# Workspace Focus
"Mod+Ctrl+J".action = focus-workspace-down;
"Mod+Ctrl+K".action = focus-workspace-up;
# General Focus
"Mod+J".action = focus-window-or-workspace-down;
"Mod+K".action = focus-window-or-workspace-up;
"Mod+H".action = focus-column-or-monitor-left;
"Mod+L".action = focus-column-or-monitor-right;
# Workspace Move
"Mod+Ctrl+Shift+J".action = move-workspace-down;
"Mod+Ctrl+Shift+K".action = move-workspace-up;
# Window & Column Move
"Mod+Shift+J".action = move-window-down-or-to-workspace-down;
"Mod+Shift+K".action = move-window-up-or-to-workspace-up;
"Mod+Shift+L".action = move-column-right-or-to-monitor-right;
"Mod+Shift+H".action = move-column-left-or-to-monitor-left;
# Window Comsume
"Mod+Ctrl+Shift+L".action = consume-or-expel-window-right;
"Mod+Ctrl+Shift+H".action = consume-or-expel-window-left;
# ==== Action ==== #
# General
"Mod+C".action = center-window;
"Mod+O".action = toggle-overview;
"Mod+Q".action = close-window;
"F11".action = if config.services.nfsm.enable then (spawn "nfsm-cli") else fullscreen-window;
"Mod+Shift+slash".action = show-hotkey-overlay;
"Mod+Ctrl+Shift+P".action = spawn "${getExe pkgs.python312}" "${niri_peekaboo}";
# Column Scale
"Mod+W".action = switch-preset-column-width;
"Mod+S".action = switch-preset-window-height;
"Mod+P".action = expand-column-to-available-width;
"Mod+M".action = maximize-column;
"Mod+Ctrl+S".action = reset-window-height;
# Float
"Mod+V".action = toggle-window-floating;
"Mod+Ctrl+V".action = switch-focus-between-floating-and-tiling;
# Screenshot
"Mod+Shift+S".action.screenshot = [ { show-pointer = false; } ];
"Ctrl+Shift+S".action.screenshot-window = [
{
write-to-disk = false;
}
];
"Mod+Ctrl+Shift+S".action.screenshot-screen = [
{
write-to-disk = false;
}
];
}
# Map Mod+{1 ~ 9} to workspace{1 ~ 9}
// (pipe 9 [
(x: genList (i: i + 1) x)
(
x:
map (i: {
name = "Mod+${toString i}";
value.action = focus-workspace i;
}) x
)
(x: listToAttrs x)
]);
};
};
}

View file

@ -5,11 +5,11 @@
settings = {
substituters = [
"https://yazi.cachix.org"
"https://cache.net.dn/dn-main"
# "https://cache.net.dn/dn-main"
];
trusted-public-keys = [
"yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k="
"dn-main:ZjQmZEOWpe0TjZgHGwkgtPdOUXpN82RL9wy30EW1V7k="
# "dn-main:ZjQmZEOWpe0TjZgHGwkgtPdOUXpN82RL9wy30EW1V7k="
];
warn-dirty = false;
trusted-users = [

View file

@ -10,6 +10,7 @@
../plymouth.nix
../polkit.nix
../hyprland.nix
../niri.nix
];
programs.gdk-pixbuf.modulePackages = [ pkgs.librsvg ];

View file

@ -0,0 +1,140 @@
{
backgroundOpacity = 1;
capsuleOpacity = 1;
density = "comfortable";
exclusive = true;
floating = true;
marginHorizontal = 0.25;
marginVertical = 0.25;
outerCorners = false;
postition = "top";
showCapsule = true;
widgets = {
center = [
{
colorizeIcons = false;
hideMode = "hidden";
id = "ActiveWindow";
maxWidth = 145;
scrollingMode = "hover";
showIcon = true;
useFixedWidth = false;
}
];
left = [
{
icon = "rocket";
id = "CustomButton";
leftClickExec = "noctalia-shell ipc call launcher toggle";
leftClickUpdateText = false;
maxTextLength = {
horizontal = 10;
vertical = 10;
};
middleClickExec = "";
middleClickUpdateText = false;
parseJson = false;
rightClickExec = "";
rightClickUpdateText = false;
textCollapse = "";
textCommand = "";
textIntervalMs = 3000;
textStream = false;
wheelDownExec = "";
wheelDownUpdateText = false;
wheelExec = "";
wheelMode = "unified";
wheelUpExec = "";
wheelUpUpdateText = false;
wheelUpdateText = false;
}
{
customFont = "";
formatHorizontal = "HH:mm ddd, MMM dd";
formatVertical = "HH mm - dd MM";
id = "Clock";
useCustomFont = false;
usePrimaryColor = true;
}
{
characterCount = 4;
followFocusedScreen = false;
hideUnoccupied = false;
id = "Workspace";
labelMode = "index";
}
{
hideMode = "hidden";
hideWhenIdle = false;
id = "MediaMini";
maxWidth = 250;
scrollingMode = "hover";
showAlbumArt = true;
showArtistFirst = false;
showProgressRing = true;
showVisualizer = true;
useFixedWidth = false;
visualizerType = "linear";
}
];
right = [
{
blacklist = [
"Bluetooth*"
];
colorizeIcons = false;
drawerEnabled = false;
id = "Tray";
pinned = [
];
}
{
diskPath = "/";
id = "SystemMonitor";
showCpuTemp = true;
showCpuUsage = true;
showDiskUsage = false;
showMemoryAsPercent = false;
showMemoryUsage = true;
showNetworkStats = false;
usePrimaryColor = false;
}
{
id = "ScreenRecorder";
}
{
id = "KeepAwake";
}
{
displayMode = "onhover";
id = "Volume";
}
{
displayMode = "onhover";
id = "Brightness";
}
{
displayMode = "onhover";
id = "VPN";
}
{
displayMode = "onhover";
id = "Bluetooth";
}
{
hideWhenZero = true;
id = "NotificationHistory";
showUnreadBadge = true;
}
{
colorizeDistroLogo = false;
colorizeSystemIcon = "primary";
customIconPath = "";
enableColorization = true;
icon = "noctalia";
id = "ControlCenter";
useDistroLogo = true;
}
];
};
}

View file

@ -0,0 +1,55 @@
{
cards = [
{
enabled = true;
id = "profile-card";
}
{
enabled = true;
id = "shortcuts-card";
}
{
enabled = true;
id = "audio-card";
}
{
enabled = true;
id = "weather-card";
}
{
enabled = true;
id = "media-sysmon-card";
}
];
position = "bottom_center";
shortcuts = {
left = [
{
id = "WiFi";
}
{
id = "Bluetooth";
}
{
id = "ScreenRecorder";
}
{
id = "WallpaperSelector";
}
];
right = [
{
id = "Notifications";
}
{
id = "PowerProfile";
}
{
id = "KeepAwake";
}
{
id = "NightLight";
}
];
};
}

View file

@ -0,0 +1,282 @@
{ lib, config, ... }:
let
inherit (config.systemConf) username;
inherit (lib) mkForce mapAttrs;
in
{
# ==== Extra Services Settings ==== #
services.power-profiles-daemon.enable = true;
networking.networkmanager.enable = true;
services.upower.enable = true;
hardware.bluetooth.enable = true;
# ================================= #
home-manager.users.${username} =
{ config, ... }:
{
# ==== Disabled Services ==== #
services.swww.enable = mkForce false; # Wallpaper
programs.waybar.enable = mkForce false; # Bar
services.swayidle.enable = mkForce false; # Idle
services.sunsetr.enable = mkForce false; # Bluelight filter
programs.hyprlock.enable = mkForce false; # Lock
services.swaync.enable = mkForce false; # Notification daemon
systemd.user.services.noctalia-shell.Service.Environment = [
"QT_QPA_PLATFORMTHEME=gtk3"
];
programs.noctalia-shell = {
enable = true;
systemd.enable = true;
settings = {
settingsVersion = 25;
appLauncher = {
customLaunchPrefix = "";
customLaunchPrefixEnabled = false;
enableClipPreview = true;
enableClipboardHistory = true;
pinnedExecs = [
];
position = "top_center";
sortByMostUsed = true;
terminalCommand = "ghostty -e";
useApp2Unit = false;
viewMode = "list";
};
audio = {
cavaFrameRate = 30;
externalMixer = "pwvucontrol";
mprisBlacklist = [
];
preferredPlayer = "mpv";
visualizerQuality = "high";
visualizerType = "linear";
volumeOverdrive = false;
volumeStep = 5;
};
bar = import ./bar.nix;
brightness = {
brightnessStep = 5;
enableDdcSupport = false;
enforceMinium = true;
};
calendar = {
cards = [
{
enabled = true;
id = "banner-card";
}
{
enabled = true;
id = "calendar-card";
}
{
enabled = true;
id = "timer-card";
}
{
enabled = true;
id = "weather-card";
}
];
};
changelog = {
lastSeenVersion = "";
};
colorSchemes = {
darkMode = true;
generateTemplatesForPredefined = true;
manualSunrise = "06:30";
manualSunset = "18:30";
matugenSchemeType = "scheme-neutral";
predefinedScheme = "Noctalia (default)";
schedulingMode = "off";
useWallpaperColors = true;
};
controlCenter = import ./controlCenter.nix;
dock = {
backgroundOpacity = 1;
colorizeIcons = false;
displayMode = "auto_hide";
enabled = true;
floatingRatio = 1;
monitors = [
];
onlySameOutput = true;
pinnedApps = [
];
radiusRatio = 0.68;
size = 1;
};
general = {
allowPanelsOnScreenWithoutBar = true;
animationDisabled = false;
animationSpeed = 1.5;
avatarImage = "${config.home.homeDirectory}/.face";
compactLockScreen = false;
dimmerOpacity = 0.4;
enableShadows = true;
forceBlackScreenCorners = true;
language = "";
lockOnSuspend = true;
radiusRatio = 1;
scaleRatio = 1;
screenRadiusRatio = 1.09;
shadowDirection = "bottom_right";
shadowOffsetX = 2;
shadowOffsetY = 3;
showHibernateOnLockScreen = false;
showScreenCorners = true;
};
hooks = {
enabled = false;
darkModeChange = "";
wallpaperChange = "";
};
location = {
analogClockInCalendar = false;
firstDayOfWeek = -1;
name = "Taipei, TW";
showCalendarEvents = true;
showCalendarWeather = true;
showWeekNumberInCalendar = false;
use12hourFormat = false;
useFahrenheit = false;
weatherEnabled = true;
weatherShowEffects = true;
};
network = {
wifiEnabled = true;
};
nightLight = {
enabled = true;
autoSchedule = true;
dayTemp = "6000";
nightTemp = "5500";
forced = false;
manualSunrise = "06:30";
manualSunset = "18:30";
};
notifications = {
backgroundOpacity = 1;
criticalUrgencyDuration = 15;
enableKeyboardLayoutToast = true;
enabled = true;
location = "bottom_right";
lowUrgencyDuration = 3;
monitors = [
];
normalUrgencyDuration = 8;
overlayLayer = true;
respectExpireTimeout = false;
};
osd = {
autoHideMs = 1500;
backgroundOpacity = 1;
enabled = true;
enabledTypes = [
0
1
2
];
location = "right";
monitors = [
];
overlayLayer = true;
};
screenRecorder = {
audioCodec = "opus";
audioSource = "default_output";
colorRange = "limited";
directory = "${config.home.homeDirectory}/Videos";
frameRate = 60;
quality = "very_high";
showCursor = true;
videoCodec = "h264";
videoSource = "portal";
};
sessionMenu = import ./sessionMenu.nix;
systemMonitor = import ./systemMonitor.nix;
templates = import ./templates.nix;
ui = {
fontDefault = config.stylix.fonts.sansSerif.name;
fontDefaultScale = 1;
fontFixed = config.stylix.fonts.monospace.name;
fontFixedScale = 1;
panelBackgroundOpacity = 1;
panelsAttachedToBar = true;
settingsPanelAttachToBar = true;
tooltipsEnabled = true;
};
wallpaper = {
directory = "${config.home.homeDirectory}/Pictures/Wallpapers";
enableMultiMonitorDirectories = false;
enabled = true;
fillColor = "#000000";
fillMode = "crop";
hideWallpaperFilenames = true;
monitorDirectories = [
];
overviewEnabled = false;
panelPosition = "follow_bar";
randomEnabled = false;
randomIntervalSec = 300;
recursiveSearch = false;
setWallpaperOnAllMonitors = true;
transitionDuration = 1500;
transitionEdgeSmoothness = 0.05;
transitionType = "random";
useWallhaven = false;
wallhavenCategories = "111";
wallhavenOrder = "desc";
wallhavenPurity = "100";
wallhavenQuery = "";
wallhavenResolutionHeight = "";
wallhavenResolutionMode = "atleast";
wallhavenResolutionWidth = "";
wallhavenSorting = "relevance";
};
};
};
programs.niri.settings =
with config.lib.niri.actions;
let
noctalia = spawn "noctalia-shell" "ipc" "call";
in
{
binds = mapAttrs (name: value: mkForce value) {
# Core
"Mod+Slash".action = noctalia "controlCenter" "toggle";
"Alt+Space".action = noctalia "launcher" "toggle";
"Mod+Ctrl+M".action = noctalia "lockScreen" "lock";
# Utilities
"Mod+Comma".action = noctalia "launcher" "clipboard";
"Mod+Period".action = noctalia "launcher" "emoji";
"Mod+F12".action = noctalia "screenRecorder" "toggle";
"Mod+N".action = noctalia "notifications" "toggleHistory";
"Mod+Ctrl+N".action = noctalia "notifications" "toggleDND";
"Mod+Ctrl+W".action = noctalia "wallpaper" "toggle";
"Mod+Ctrl+C".action = noctalia "launcher" "calculator";
"Mod+Ctrl+Slash".action = noctalia "wallpaper" "random";
# Media
"XF86AudioPlay".action = noctalia "media" "playPause";
"XF86AudioStop".action = noctalia "media" "pause";
"XF86AudioPrev".action = noctalia "media" "previous";
"XF86AudioNext".action = noctalia "media" "next";
"Mod+Ctrl+Comma".action = noctalia "media" "previous";
"Mod+Ctrl+Period".action = noctalia "media" "next";
"XF86AudioMute".action = noctalia "volume" "muteOutput";
"XF86AudioRaiseVolume".action = noctalia "volume" "increase";
"XF86AudioLowerVolume".action = noctalia "volume" "decrease";
"XF86MonBrightnessDown".action = noctalia "brightness" "decrease";
"XF86MonBrightnessUp".action = noctalia "brightness" "increase";
};
};
};
}

View file

@ -0,0 +1,38 @@
{
countdownDuration = 10000;
enableCountdown = true;
position = "bottom_center";
powerOptions = [
{
action = "lock";
countdownEnabled = true;
enabled = true;
}
{
action = "suspend";
countdownEnabled = true;
enabled = true;
}
{
action = "hibernate";
countdownEnabled = true;
enabled = true;
}
{
action = "reboot";
countdownEnabled = true;
enabled = true;
}
{
action = "logout";
countdownEnabled = true;
enabled = true;
}
{
action = "shutdown";
countdownEnabled = true;
enabled = true;
}
];
showHeader = false;
}

View file

@ -0,0 +1,18 @@
{
cpuCriticalThreshold = 90;
cpuPollingInterval = 3000;
cpuWarningThreshold = 80;
criticalColor = "";
diskCriticalThreshold = 90;
diskPollingInterval = 3000;
diskWarningThreshold = 80;
memCriticalThreshold = 90;
memPollingInterval = 3000;
memWarningThreshold = 80;
networkPollingInterval = 3000;
tempCriticalThreshold = 90;
tempPollingInterval = 3000;
tempWarningThreshold = 80;
useCustomColors = false;
warningColor = "";
}

View file

@ -0,0 +1,22 @@
{
alacritty = false;
cava = false;
code = false;
discord = false;
emacs = false;
enableUserTemplates = false;
foot = false;
fuzzel = false;
ghostty = false;
gtk = false;
kcolorscheme = false;
kitty = false;
niri = false;
pywalfox = false;
qt = false;
spicetify = false;
telegram = false;
vicinae = false;
walker = false;
wezterm = false;
}

View file

@ -19,7 +19,7 @@
};
environment.systemPackages = with pkgs; [
pavucontrol
pwvucontrol
playerctl
];
}

View file

@ -20,6 +20,7 @@ in
enable = true;
base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-medium.yaml";
polarity = "dark";
enableReleaseChecks = false;
fonts = {
serif = config.stylix.fonts.monospace;
@ -49,7 +50,6 @@ in
noto-fonts-cjk-serif
noto-fonts-color-emoji
liberation_ttf
# dfkai-sb
sf-pro-display-bold
];
@ -57,6 +57,8 @@ in
};
home-manager.users."${username}" = {
stylix.enableReleaseChecks = false;
stylix.targets.neovim.transparentBackground = {
main = true;
numberLine = true;