Compare commits
27 Commits
quickshell
...
e6a2690baa
| Author | SHA1 | Date | |
|---|---|---|---|
|
e6a2690baa
|
|||
|
f642f9c9cc
|
|||
|
7d08e1f5ef
|
|||
|
3cb73506f1
|
|||
|
4be7cd0c0f
|
|||
|
2d038b2ae2
|
|||
|
dd8afc8954
|
|||
|
e69600cc77
|
|||
|
17ef457181
|
|||
|
a39b966a91
|
|||
|
a0b044dbc9
|
|||
|
94764e7a5a
|
|||
|
fef786d317
|
|||
|
8ca0a6cc0f
|
|||
|
3263d72b59
|
|||
|
1c7e5b9f05
|
|||
|
1da34bf704
|
|||
|
88107f9fe7
|
|||
|
5d1f622782
|
|||
|
0ed99176ad
|
|||
|
4dddb0e803
|
|||
|
4353f9da34
|
|||
| 66e772ce62 | |||
| 422259838b | |||
| 390e75ce8e | |||
| a3b627359b | |||
| be75d12e9c |
@@ -1,4 +1,8 @@
|
||||
{ config, hostname, ... }:
|
||||
{
|
||||
config,
|
||||
hostname,
|
||||
...
|
||||
}:
|
||||
{
|
||||
# I prefer this to the default issue text
|
||||
# ported from ArchLinux IIRC
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
sopsRoot,
|
||||
secrets,
|
||||
...
|
||||
}:
|
||||
{
|
||||
sops.secrets.et-imxyy-nix-server-nixremote = {
|
||||
sopsFile = sopsRoot + /et-imxyy-nix-server-nixremote.toml;
|
||||
sopsFile = secrets.et-imxyy-nix-server-nixremote;
|
||||
format = "binary";
|
||||
};
|
||||
environment.systemPackages = [ pkgs.easytier ];
|
||||
@@ -15,10 +14,8 @@
|
||||
enable = true;
|
||||
script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix-server-nixremote.path}";
|
||||
serviceConfig = {
|
||||
Restart = lib.mkOverride 500 "always";
|
||||
RestartMaxDelaySec = lib.mkOverride 500 "1m";
|
||||
RestartSec = lib.mkOverride 500 "100ms";
|
||||
RestartSteps = lib.mkOverride 500 9;
|
||||
Restart = "always";
|
||||
RestartSec = 30;
|
||||
User = "root";
|
||||
};
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
@@ -37,6 +34,7 @@
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBWOy0QmAyxENg/O5m3cus8U3c9jCLioivwcWsh5/a82 imxyy-hisense-pad"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8pivvE8PMtsOxmccfNhH/4KehDKhBfUfJbQZxo/SZT imxyy-ace5"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKALTBn/QSGcSPgMg0ViSazFcaA0+nEF05EJpjbsI6dE imxyy_soope_@imxyy-cloudwin"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/ imxyy@imxyy-nix-x16"
|
||||
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIENauvvhVMLsUwH9cPYsvnOg7VCL3a4yEiKm8I524TE efl@efl-nix"
|
||||
];
|
||||
|
||||
@@ -7,26 +7,22 @@
|
||||
}
|
||||
];
|
||||
services.postgresql.ensureDatabases = [ "coder" ];
|
||||
virtualisation.oci-containers = {
|
||||
containers = {
|
||||
coder = {
|
||||
image = "ghcr.io/coder/coder:latest";
|
||||
environment = {
|
||||
CODER_ACCESS_URL = "https://coder.imxyy.top";
|
||||
CODER_HTTP_ADDRESS = "0.0.0.0:8086";
|
||||
CODER_PG_CONNECTION_URL = "postgresql://coder:coderdatabase@127.0.0.1/coder?sslmode=disable";
|
||||
};
|
||||
extraOptions = [
|
||||
"--network=host"
|
||||
"--group-add=${toString config.users.groups.podman.gid}"
|
||||
];
|
||||
volumes = [
|
||||
"/var/lib/coder:/home/coder/.config"
|
||||
"/var/run/docker.sock:/var/run/docker.sock"
|
||||
];
|
||||
ports = [ "8086:8086" ];
|
||||
};
|
||||
virtualisation.oci-containers.containers.coder = {
|
||||
image = "ghcr.io/coder/coder:latest";
|
||||
environment = {
|
||||
CODER_ACCESS_URL = "https://coder.imxyy.top";
|
||||
CODER_HTTP_ADDRESS = "0.0.0.0:8086";
|
||||
CODER_PG_CONNECTION_URL = "postgresql://coder:coderdatabase@127.0.0.1/coder?sslmode=disable";
|
||||
};
|
||||
extraOptions = [
|
||||
"--network=host"
|
||||
"--group-add=${toString config.users.groups.podman.gid}"
|
||||
];
|
||||
volumes = [
|
||||
"/var/lib/coder:/home/coder/.config"
|
||||
"/var/run/docker.sock:/var/run/docker.sock"
|
||||
];
|
||||
ports = [ "8086:8086" ];
|
||||
};
|
||||
services.caddy.virtualHosts."coder.imxyy.top" = {
|
||||
extraConfig = ''
|
||||
|
||||
@@ -1,14 +1,10 @@
|
||||
{
|
||||
virtualisation.oci-containers = {
|
||||
containers = {
|
||||
sun-panel = {
|
||||
image = "hslr/sun-panel:latest";
|
||||
volumes = [
|
||||
"/var/lib/sun-panel:/app/conf"
|
||||
];
|
||||
ports = [ "8085:3002" ];
|
||||
};
|
||||
};
|
||||
virtualisation.oci-containers.containers.sun-panel = {
|
||||
image = "hslr/sun-panel:latest";
|
||||
volumes = [
|
||||
"/var/lib/sun-panel:/app/conf"
|
||||
];
|
||||
ports = [ "8085:3002" ];
|
||||
};
|
||||
services.caddy.virtualHosts."home.imxyy.top" = {
|
||||
extraConfig = ''
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
{ ... }:
|
||||
{
|
||||
users.users.immich = {
|
||||
home = "/mnt/nas/immich";
|
||||
createHome = true;
|
||||
};
|
||||
services.immich = {
|
||||
enable = true;
|
||||
host = "127.0.0.1";
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
WorkingDirectory = "/opt/minecraft/fabric1.20.6";
|
||||
ExecStart = "${lib.getExe' pkgs.openjdk21 "java"} -Xms1G -Xmx5G -jar fabric-server-mc.1.20.6-loader.0.15.11-launcher.1.0.1.jar";
|
||||
Restart = "always";
|
||||
RestartSec = "10s";
|
||||
RestartSec = 120;
|
||||
};
|
||||
};
|
||||
my.persist = {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ config, sopsRoot, ... }:
|
||||
{ config, secrets, ... }:
|
||||
{
|
||||
sops.secrets.minio-env = {
|
||||
sopsFile = sopsRoot + /minio.env;
|
||||
sopsFile = secrets.minio;
|
||||
format = "dotenv";
|
||||
};
|
||||
services.minio = {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
lib,
|
||||
pkgs,
|
||||
username,
|
||||
sopsRoot,
|
||||
secrets,
|
||||
...
|
||||
}:
|
||||
{
|
||||
@@ -132,16 +132,18 @@
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBWOy0QmAyxENg/O5m3cus8U3c9jCLioivwcWsh5/a82 imxyy-hisense-pad"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8pivvE8PMtsOxmccfNhH/4KehDKhBfUfJbQZxo/SZT imxyy-ace5"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKALTBn/QSGcSPgMg0ViSazFcaA0+nEF05EJpjbsI6dE imxyy_soope_@imxyy-cloudwin"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/ imxyy@imxyy-nix-x16"
|
||||
];
|
||||
users.users.${username}.openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEFLUkyeaK8ZPPZdVNEmtx8zvoxi7xqS2Z6oxRBuUPO imxyy@imxyy-nix"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBWOy0QmAyxENg/O5m3cus8U3c9jCLioivwcWsh5/a82 imxyy-hisense-pad"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8pivvE8PMtsOxmccfNhH/4KehDKhBfUfJbQZxo/SZT imxyy-ace5"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKALTBn/QSGcSPgMg0ViSazFcaA0+nEF05EJpjbsI6dE imxyy_soope_@imxyy-cloudwin"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMb5G/ieEYBOng66YeyttBQLThyM6W//z2POsNyq4Rw/ imxyy@imxyy-nix-x16"
|
||||
];
|
||||
|
||||
sops.secrets.dae-imxyy-nix-server = {
|
||||
sopsFile = sopsRoot + /dae-imxyy-nix-server.dae;
|
||||
sopsFile = secrets.dae-imxyy-nix-server;
|
||||
format = "binary";
|
||||
};
|
||||
services.dae = {
|
||||
@@ -150,7 +152,7 @@
|
||||
};
|
||||
systemd.services.dae.after = [ "sops-nix.service" ];
|
||||
sops.secrets.mihomo = {
|
||||
sopsFile = sopsRoot + /mihomo.yaml;
|
||||
sopsFile = secrets.mihomo;
|
||||
format = "yaml";
|
||||
key = "";
|
||||
};
|
||||
@@ -162,7 +164,7 @@
|
||||
};
|
||||
|
||||
sops.secrets.frp-env = {
|
||||
sopsFile = sopsRoot + /frp.env;
|
||||
sopsFile = secrets.frp;
|
||||
format = "dotenv";
|
||||
};
|
||||
systemd.services.frp.serviceConfig.EnvironmentFile = [
|
||||
@@ -407,6 +409,21 @@
|
||||
customDomains = [ "immich.imxyy.top" ];
|
||||
}
|
||||
|
||||
{
|
||||
name = "memo-http";
|
||||
type = "http";
|
||||
localIP = "127.0.0.1";
|
||||
localPort = 80;
|
||||
customDomains = [ "memo.imxyy.top" ];
|
||||
}
|
||||
{
|
||||
name = "memo-https";
|
||||
type = "https";
|
||||
localIP = "127.0.0.1";
|
||||
localPort = 443;
|
||||
customDomains = [ "memo.imxyy.top" ];
|
||||
}
|
||||
|
||||
{
|
||||
name = "minecraft";
|
||||
type = "tcp";
|
||||
@@ -449,12 +466,6 @@
|
||||
};
|
||||
};
|
||||
systemd.services."headscale" = {
|
||||
serviceConfig = {
|
||||
Restart = lib.mkOverride 500 "always";
|
||||
RestartMaxDelaySec = lib.mkOverride 500 "1m";
|
||||
RestartSec = lib.mkOverride 500 "100ms";
|
||||
RestartSteps = lib.mkOverride 500 9;
|
||||
};
|
||||
after = [
|
||||
"podman-obligator.service"
|
||||
];
|
||||
@@ -464,7 +475,7 @@
|
||||
};
|
||||
|
||||
sops.secrets.et-imxyy-nix-server = {
|
||||
sopsFile = sopsRoot + /et-imxyy-nix-server.toml;
|
||||
sopsFile = secrets.et-imxyy-nix-server;
|
||||
format = "binary";
|
||||
};
|
||||
environment.systemPackages = [ pkgs.easytier ];
|
||||
@@ -472,10 +483,8 @@
|
||||
enable = true;
|
||||
script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix-server.path}";
|
||||
serviceConfig = {
|
||||
Restart = lib.mkOverride 500 "always";
|
||||
RestartMaxDelaySec = lib.mkOverride 500 "1m";
|
||||
RestartSec = lib.mkOverride 500 "100ms";
|
||||
RestartSteps = lib.mkOverride 500 9;
|
||||
Restart = "always";
|
||||
RestartSec = 30;
|
||||
User = "root";
|
||||
};
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
@@ -485,27 +494,23 @@
|
||||
];
|
||||
};
|
||||
|
||||
virtualisation.oci-containers = {
|
||||
containers = {
|
||||
obligator = {
|
||||
image = "anderspitman/obligator:latest";
|
||||
volumes = [
|
||||
"/var/lib/obligator:/data"
|
||||
"/var/lib/obligator:/api"
|
||||
];
|
||||
ports = [ "8081:1616" ];
|
||||
cmd = [
|
||||
"-storage-dir"
|
||||
"/data"
|
||||
"-api-socket-dir"
|
||||
"/api"
|
||||
"-root-uri"
|
||||
"https://oidc.imxyy.top"
|
||||
"-port"
|
||||
"1616"
|
||||
];
|
||||
};
|
||||
};
|
||||
virtualisation.oci-containers.containers.obligator = {
|
||||
image = "anderspitman/obligator:latest";
|
||||
volumes = [
|
||||
"/var/lib/obligator:/data"
|
||||
"/var/lib/obligator:/api"
|
||||
];
|
||||
ports = [ "8081:1616" ];
|
||||
cmd = [
|
||||
"-storage-dir"
|
||||
"/data"
|
||||
"-api-socket-dir"
|
||||
"/api"
|
||||
"-root-uri"
|
||||
"https://oidc.imxyy.top"
|
||||
"-port"
|
||||
"1616"
|
||||
];
|
||||
};
|
||||
services.caddy.virtualHosts."headscale.imxyy.top" = {
|
||||
extraConfig = ''
|
||||
@@ -571,6 +576,7 @@
|
||||
"ai"
|
||||
"sy"
|
||||
"minio"
|
||||
"immich"
|
||||
];
|
||||
in
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
lib,
|
||||
config,
|
||||
username,
|
||||
sopsRoot,
|
||||
secrets,
|
||||
...
|
||||
}:
|
||||
{
|
||||
@@ -13,17 +13,16 @@
|
||||
timeout = 0;
|
||||
};
|
||||
|
||||
hardware.bluetooth.enable = true;
|
||||
hardware.bluetooth.powerOnBoot = true;
|
||||
|
||||
systemd.services.nix-daemon = {
|
||||
environment.TMPDIR = "/var/cache/nix";
|
||||
serviceConfig.CacheDirectory = "nix";
|
||||
};
|
||||
environment.variables.NIX_REMOTE = "daemon";
|
||||
|
||||
my.audio.enable = false;
|
||||
|
||||
sops.secrets.imxyy-nix-server-hashed-password = {
|
||||
sopsFile = sopsRoot + /imxyy-nix-server-hashed-password.txt;
|
||||
sopsFile = secrets.imxyy-nix-server-hashed-password;
|
||||
format = "binary";
|
||||
neededForUsers = true;
|
||||
};
|
||||
|
||||
@@ -1,49 +1,54 @@
|
||||
{
|
||||
config,
|
||||
sopsRoot,
|
||||
secrets,
|
||||
...
|
||||
}:
|
||||
{
|
||||
sops.secrets = {
|
||||
flatnote-env = {
|
||||
sopsFile = sopsRoot + /flatnote.env;
|
||||
sopsFile = secrets.flatnote;
|
||||
format = "dotenv";
|
||||
};
|
||||
siyuan-env = {
|
||||
sopsFile = sopsRoot + /siyuan.env;
|
||||
sopsFile = secrets.siyuan;
|
||||
format = "dotenv";
|
||||
};
|
||||
};
|
||||
virtualisation.oci-containers = {
|
||||
containers = {
|
||||
flatnotes = {
|
||||
image = "dullage/flatnotes:latest";
|
||||
volumes = [
|
||||
"/mnt/nas/flatnotes/data:/data"
|
||||
];
|
||||
environmentFiles = [
|
||||
"${config.sops.secrets.flatnote-env.path}"
|
||||
];
|
||||
ports = [ "8093:8080" ];
|
||||
};
|
||||
siyuan = {
|
||||
image = "apkdv/siyuan-unlock:v3.1.30";
|
||||
volumes = [
|
||||
"/mnt/nas/siyuan/workspace:/workspace"
|
||||
"/mnt/nas/siyuan:/home/siyuan"
|
||||
];
|
||||
cmd = [
|
||||
"--workspace=/workspace"
|
||||
];
|
||||
environment = {
|
||||
PUID = "0";
|
||||
PGID = "0";
|
||||
};
|
||||
environmentFiles = [
|
||||
"${config.sops.secrets.siyuan-env.path}"
|
||||
];
|
||||
ports = [ "8095:6806" ];
|
||||
virtualisation.oci-containers.containers = {
|
||||
flatnotes = {
|
||||
image = "dullage/flatnotes:latest";
|
||||
volumes = [
|
||||
"/mnt/nas/flatnotes/data:/data"
|
||||
];
|
||||
environmentFiles = [
|
||||
"${config.sops.secrets.flatnote-env.path}"
|
||||
];
|
||||
ports = [ "8093:8080" ];
|
||||
};
|
||||
siyuan = {
|
||||
image = "apkdv/siyuan-unlock:v3.1.30";
|
||||
volumes = [
|
||||
"/mnt/nas/siyuan/workspace:/workspace"
|
||||
"/mnt/nas/siyuan:/home/siyuan"
|
||||
];
|
||||
cmd = [
|
||||
"--workspace=/workspace"
|
||||
];
|
||||
environment = {
|
||||
PUID = "0";
|
||||
PGID = "0";
|
||||
};
|
||||
environmentFiles = [
|
||||
"${config.sops.secrets.siyuan-env.path}"
|
||||
];
|
||||
ports = [ "8095:6806" ];
|
||||
};
|
||||
memos = {
|
||||
image = "neosmemo/memos:stable";
|
||||
volumes = [
|
||||
"/mnt/nas/memos:/var/opt/memos"
|
||||
];
|
||||
ports = [ "8097:5230" ];
|
||||
};
|
||||
};
|
||||
services.caddy.virtualHosts = {
|
||||
@@ -57,5 +62,10 @@
|
||||
reverse_proxy :8095
|
||||
'';
|
||||
};
|
||||
"memo.imxyy.top" = {
|
||||
extraConfig = ''
|
||||
reverse_proxy :8097
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ config, sopsRoot, ... }:
|
||||
{ config, secrets, ... }:
|
||||
{
|
||||
sops.secrets.vaultwarden-env = {
|
||||
sopsFile = sopsRoot + /vaultwarden.env;
|
||||
sopsFile = secrets.vaultwarden;
|
||||
format = "dotenv";
|
||||
};
|
||||
services.postgresql.ensureUsers = [
|
||||
|
||||
@@ -13,7 +13,7 @@ let
|
||||
in
|
||||
{
|
||||
boot = {
|
||||
initrd.kernelModules = [
|
||||
initrd.kernelModules = lib.mkBefore [
|
||||
"vfio_pci"
|
||||
"vfio"
|
||||
"vfio_iommu_type1"
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
username,
|
||||
...
|
||||
@@ -10,8 +8,6 @@
|
||||
home.packages = with pkgs; [
|
||||
localsend
|
||||
|
||||
rclone
|
||||
|
||||
wpsoffice-cn
|
||||
wps-office-fonts
|
||||
ttf-wps-fonts
|
||||
@@ -20,24 +16,32 @@
|
||||
anki
|
||||
|
||||
ayugram-desktop
|
||||
telegram-desktop
|
||||
signal-desktop
|
||||
discord
|
||||
qq
|
||||
wechat
|
||||
|
||||
gnome-clocks
|
||||
|
||||
wineWowPackages.waylandFull
|
||||
|
||||
pavucontrol
|
||||
pamixer
|
||||
];
|
||||
programs.zsh = {
|
||||
sessionVariables = {
|
||||
PATH = "/home/${username}/bin:$PATH";
|
||||
};
|
||||
};
|
||||
|
||||
programs.niri.settings = {
|
||||
environment.STEAM_FORCE_DESKTOPUI_SCALING = "1.25";
|
||||
outputs = {
|
||||
eDP-1 = {
|
||||
enable = true;
|
||||
mode = {
|
||||
width = 1920;
|
||||
height = 1200;
|
||||
refresh = 60.002;
|
||||
};
|
||||
scale = 1.25;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
my = {
|
||||
@@ -46,8 +50,6 @@
|
||||
coding.all.enable = true;
|
||||
desktop.all.enable = true;
|
||||
|
||||
desktop.browser.librewolf.enable = lib.mkForce false;
|
||||
|
||||
i18n.fcitx5.enable = true;
|
||||
|
||||
xdg = {
|
||||
@@ -92,15 +94,6 @@
|
||||
"image/png" = imageviewer;
|
||||
"image/webp" = imageviewer;
|
||||
};
|
||||
extraBookmarks =
|
||||
let
|
||||
homedir = config.my.home.home.homeDirectory;
|
||||
in
|
||||
[
|
||||
"file://${homedir}/NAS NAS"
|
||||
"file://${homedir}/NAS/imxyy_soope_ NAS imxyy_soope_"
|
||||
"file://${homedir}/NAS/imxyy_soope_/OS NAS OS"
|
||||
];
|
||||
};
|
||||
persist = {
|
||||
enable = true;
|
||||
@@ -118,22 +111,16 @@
|
||||
".local/state"
|
||||
".local/share/Anki2"
|
||||
".local/share/shotwell"
|
||||
".local/share/cheat.sh"
|
||||
".local/share/Kingsoft"
|
||||
|
||||
".local/share/AyuGramDesktop"
|
||||
".local/share/TelegramDesktop"
|
||||
".config/Signal"
|
||||
".config/discord"
|
||||
".config/QQ"
|
||||
".xwechat"
|
||||
|
||||
".config/Kingsoft"
|
||||
".config/dconf"
|
||||
".config/gh"
|
||||
".config/pulse"
|
||||
".config/pip"
|
||||
".config/libreoffice"
|
||||
".config/sunshine"
|
||||
];
|
||||
};
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
sopsRoot,
|
||||
secrets,
|
||||
...
|
||||
}:
|
||||
{
|
||||
@@ -10,10 +9,51 @@
|
||||
"biosdevname=0"
|
||||
"net.ifnames=0"
|
||||
];
|
||||
networking.networkmanager.enable = true;
|
||||
networking = {
|
||||
networkmanager.enable = true;
|
||||
firewall.enable = false;
|
||||
nftables = {
|
||||
enable = true;
|
||||
flushRuleset = true;
|
||||
ruleset = ''
|
||||
table inet firewall {
|
||||
set LANv4 {
|
||||
type ipv4_addr
|
||||
flags interval
|
||||
|
||||
elements = { 10.0.0.0/8, 100.64.0.0/10, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16 }
|
||||
}
|
||||
set LANv6 {
|
||||
type ipv6_addr
|
||||
flags interval
|
||||
|
||||
elements = { fd00::/8, fe80::/10 }
|
||||
}
|
||||
|
||||
chain output {
|
||||
type filter hook output priority 100; policy accept;
|
||||
}
|
||||
|
||||
chain input {
|
||||
type filter hook input priority 0; policy drop;
|
||||
iif lo accept
|
||||
ct state invalid drop
|
||||
ct state established,related accept
|
||||
|
||||
ip saddr @LANv4 accept
|
||||
ip6 saddr @LANv6 accept
|
||||
}
|
||||
|
||||
chain forward {
|
||||
type filter hook forward priority 0; policy drop;
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
sops.secrets.dae-imxyy-nix-x16 = {
|
||||
sopsFile = sopsRoot + /dae-imxyy-nix-x16.dae;
|
||||
sopsFile = secrets.dae-imxyy-nix-x16;
|
||||
format = "binary";
|
||||
};
|
||||
services.dae = {
|
||||
@@ -22,7 +62,7 @@
|
||||
};
|
||||
systemd.services.dae.after = [ "sops-nix.service" ];
|
||||
sops.secrets.mihomo = {
|
||||
sopsFile = sopsRoot + /mihomo.yaml;
|
||||
sopsFile = secrets.mihomo;
|
||||
format = "yaml";
|
||||
key = "";
|
||||
};
|
||||
@@ -34,7 +74,7 @@
|
||||
};
|
||||
|
||||
sops.secrets.et-imxyy-nix-x16 = {
|
||||
sopsFile = sopsRoot + /et-imxyy-nix-x16.toml;
|
||||
sopsFile = secrets.et-imxyy-nix-x16;
|
||||
format = "binary";
|
||||
};
|
||||
environment.systemPackages = with pkgs; [
|
||||
@@ -44,10 +84,8 @@
|
||||
enable = true;
|
||||
script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix-x16.path}";
|
||||
serviceConfig = {
|
||||
Restart = lib.mkOverride 500 "always";
|
||||
RestartMaxDelaySec = lib.mkOverride 500 "1m";
|
||||
RestartSec = lib.mkOverride 500 "100ms";
|
||||
RestartSteps = lib.mkOverride 500 9;
|
||||
Restart = "always";
|
||||
RestartSec = 30;
|
||||
User = "root";
|
||||
};
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
username,
|
||||
sopsRoot,
|
||||
secrets,
|
||||
...
|
||||
}:
|
||||
{
|
||||
@@ -36,36 +35,6 @@
|
||||
};
|
||||
environment.variables.NIX_REMOTE = "daemon";
|
||||
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = false;
|
||||
alsa.support32Bit = false;
|
||||
pulse.enable = false;
|
||||
audio.enable = false;
|
||||
};
|
||||
services.pulseaudio = {
|
||||
enable = true;
|
||||
support32Bit = true;
|
||||
package = pkgs.pulseaudioFull;
|
||||
extraConfig = ''
|
||||
load-module module-switch-on-connect
|
||||
unload-module module-suspend-on-idle
|
||||
'';
|
||||
};
|
||||
hardware.bluetooth = {
|
||||
enable = true;
|
||||
powerOnBoot = true;
|
||||
settings = {
|
||||
General = {
|
||||
Enable = "Source,Sink,Media,Socket";
|
||||
Disable = "HeadSet";
|
||||
MultiProfile = "multiple";
|
||||
};
|
||||
};
|
||||
};
|
||||
users.extraUsers.${username}.extraGroups = [ "audio" ];
|
||||
|
||||
fonts = {
|
||||
enableDefaultPackages = false;
|
||||
fontDir.enable = true;
|
||||
@@ -134,7 +103,7 @@
|
||||
];
|
||||
|
||||
sops.secrets.imxyy-nix-rclone = {
|
||||
sopsFile = sopsRoot + /imxyy-nix-rclone.conf;
|
||||
sopsFile = secrets.imxyy-nix-rclone;
|
||||
format = "binary";
|
||||
};
|
||||
fileSystems = {
|
||||
@@ -154,21 +123,6 @@
|
||||
"vfs-cache-mode=full"
|
||||
];
|
||||
};
|
||||
"/home/${username}/NAS" = {
|
||||
device = "//10.0.0.1/share";
|
||||
fsType = "cifs";
|
||||
options = [
|
||||
"username=nas"
|
||||
"password=nasshare"
|
||||
"x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s"
|
||||
"nodev"
|
||||
"nofail"
|
||||
"uid=1000"
|
||||
"gid=100"
|
||||
"vers=3"
|
||||
"rw"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
my.persist.nixosDirs = [ "/etc/NetworkManager/system-connections" ];
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
username,
|
||||
...
|
||||
@@ -10,8 +8,6 @@
|
||||
home.packages = with pkgs; [
|
||||
localsend
|
||||
|
||||
rclone
|
||||
|
||||
wpsoffice-cn
|
||||
wps-office-fonts
|
||||
ttf-wps-fonts
|
||||
@@ -20,18 +16,11 @@
|
||||
anki
|
||||
|
||||
ayugram-desktop
|
||||
telegram-desktop
|
||||
signal-desktop
|
||||
discord
|
||||
qq
|
||||
wechat
|
||||
|
||||
gnome-clocks
|
||||
|
||||
wineWowPackages.waylandFull
|
||||
|
||||
pavucontrol
|
||||
pamixer
|
||||
];
|
||||
programs.zsh = {
|
||||
shellAliases = {
|
||||
@@ -91,8 +80,6 @@
|
||||
coding.all.enable = true;
|
||||
desktop.all.enable = true;
|
||||
|
||||
desktop.browser.librewolf.enable = lib.mkForce false;
|
||||
|
||||
i18n.fcitx5.enable = true;
|
||||
|
||||
xdg = {
|
||||
@@ -137,16 +124,6 @@
|
||||
"image/png" = imageviewer;
|
||||
"image/webp" = imageviewer;
|
||||
};
|
||||
extraBookmarks =
|
||||
let
|
||||
homedir = config.my.home.home.homeDirectory;
|
||||
in
|
||||
[
|
||||
"file://${homedir}/Documents/%E7%8F%AD%E7%BA%A7%E4%BA%8B%E5%8A%A1 班级事务"
|
||||
"file://${homedir}/NAS NAS"
|
||||
"file://${homedir}/NAS/imxyy_soope_ NAS imxyy_soope_"
|
||||
"file://${homedir}/NAS/imxyy_soope_/OS NAS OS"
|
||||
];
|
||||
};
|
||||
persist = {
|
||||
enable = true;
|
||||
@@ -162,22 +139,16 @@
|
||||
".local/state"
|
||||
".local/share/Anki2"
|
||||
".local/share/shotwell"
|
||||
".local/share/cheat.sh"
|
||||
".local/share/Kingsoft"
|
||||
|
||||
".local/share/AyuGramDesktop"
|
||||
".local/share/TelegramDesktop"
|
||||
".config/Signal"
|
||||
".config/discord"
|
||||
".config/QQ"
|
||||
".xwechat"
|
||||
|
||||
".config/Kingsoft"
|
||||
".config/dconf"
|
||||
".config/gh"
|
||||
".config/pulse"
|
||||
".config/pip"
|
||||
".config/libreoffice"
|
||||
".config/sunshine"
|
||||
];
|
||||
};
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
sopsRoot,
|
||||
username,
|
||||
secrets,
|
||||
...
|
||||
}:
|
||||
{
|
||||
@@ -86,7 +85,7 @@
|
||||
};
|
||||
|
||||
sops.secrets.dae-imxyy-nix = {
|
||||
sopsFile = sopsRoot + /dae-imxyy-nix.dae;
|
||||
sopsFile = secrets.dae-imxyy-nix;
|
||||
format = "binary";
|
||||
};
|
||||
services.dae = {
|
||||
@@ -95,7 +94,7 @@
|
||||
};
|
||||
systemd.services.dae.after = [ "sops-nix.service" ];
|
||||
sops.secrets.mihomo = {
|
||||
sopsFile = sopsRoot + /mihomo.yaml;
|
||||
sopsFile = secrets.mihomo;
|
||||
format = "yaml";
|
||||
key = "";
|
||||
};
|
||||
@@ -107,7 +106,7 @@
|
||||
};
|
||||
|
||||
sops.secrets.et-imxyy-nix = {
|
||||
sopsFile = sopsRoot + /et-imxyy-nix.toml;
|
||||
sopsFile = secrets.et-imxyy-nix;
|
||||
format = "binary";
|
||||
};
|
||||
environment.systemPackages = [ pkgs.easytier ];
|
||||
@@ -115,10 +114,8 @@
|
||||
enable = true;
|
||||
script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix.path}";
|
||||
serviceConfig = {
|
||||
Restart = lib.mkOverride 500 "always";
|
||||
RestartMaxDelaySec = lib.mkOverride 500 "1m";
|
||||
RestartSec = lib.mkOverride 500 "100ms";
|
||||
RestartSteps = lib.mkOverride 500 9;
|
||||
Restart = "always";
|
||||
RestartSec = 30;
|
||||
User = "root";
|
||||
};
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
pkgs,
|
||||
config,
|
||||
username,
|
||||
sopsRoot,
|
||||
secrets,
|
||||
...
|
||||
}:
|
||||
let
|
||||
@@ -22,7 +22,7 @@ let
|
||||
temp = line.split(" ")
|
||||
bus = temp[1]
|
||||
device = temp[3][:-1]
|
||||
subprocess.run(["${lib.getExe usbreset}", f"/dev/bus/usb/{bus}/{device}"])
|
||||
subprocess.run(["${lib.getExe' pkgs.usbutils "usbreset"}", f"{bus}/{device}"])
|
||||
return True
|
||||
|
||||
if __name__ == "__main__":
|
||||
@@ -36,44 +36,6 @@ let
|
||||
with open("/tmp/.btreseted", "w"):
|
||||
...
|
||||
'';
|
||||
usbreset = pkgs.writeCBin "usbreset" ''
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include <linux/usbdevice_fs.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const char *filename;
|
||||
int fd;
|
||||
int rc;
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "Usage: usbreset device-filename\n");
|
||||
return 1;
|
||||
}
|
||||
filename = argv[1];
|
||||
|
||||
fd = open(filename, O_WRONLY);
|
||||
if (fd < 0) {
|
||||
perror("Error opening output file");
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Resetting USB device %s\n", filename);
|
||||
rc = ioctl(fd, USBDEVFS_RESET, 0);
|
||||
if (rc < 0) {
|
||||
perror("Error in ioctl");
|
||||
return 1;
|
||||
}
|
||||
printf("Reset successful\n");
|
||||
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
||||
'';
|
||||
in
|
||||
{
|
||||
security.pam.loginLimits = [
|
||||
@@ -111,36 +73,6 @@ in
|
||||
};
|
||||
environment.variables.NIX_REMOTE = "daemon";
|
||||
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = false;
|
||||
alsa.support32Bit = false;
|
||||
pulse.enable = false;
|
||||
audio.enable = false;
|
||||
};
|
||||
services.pulseaudio = {
|
||||
enable = true;
|
||||
support32Bit = true;
|
||||
package = pkgs.pulseaudioFull;
|
||||
extraConfig = ''
|
||||
load-module module-switch-on-connect
|
||||
unload-module module-suspend-on-idle
|
||||
'';
|
||||
};
|
||||
hardware.bluetooth = {
|
||||
enable = true;
|
||||
powerOnBoot = true;
|
||||
settings = {
|
||||
General = {
|
||||
Enable = "Source,Sink,Media,Socket";
|
||||
Disable = "HeadSet";
|
||||
MultiProfile = "multiple";
|
||||
};
|
||||
};
|
||||
};
|
||||
users.extraUsers.${username}.extraGroups = [ "audio" ];
|
||||
|
||||
fonts = {
|
||||
enableDefaultPackages = false;
|
||||
fontDir.enable = true;
|
||||
@@ -225,7 +157,7 @@ in
|
||||
];
|
||||
|
||||
sops.secrets.imxyy-nix-rclone = {
|
||||
sopsFile = sopsRoot + /imxyy-nix-rclone.conf;
|
||||
sopsFile = secrets.imxyy-nix-rclone;
|
||||
format = "binary";
|
||||
};
|
||||
fileSystems = {
|
||||
|
||||
165
flake.lock
generated
165
flake.lock
generated
@@ -37,11 +37,11 @@
|
||||
"base16-helix": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1748408240,
|
||||
"narHash": "sha256-9M2b1rMyMzJK0eusea0x3lyh3mu5nMeEDSc4RZkGm+g=",
|
||||
"lastModified": 1752979451,
|
||||
"narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=",
|
||||
"owner": "tinted-theming",
|
||||
"repo": "base16-helix",
|
||||
"rev": "6c711ab1a9db6f51e2f6887cc3345530b33e152e",
|
||||
"rev": "27cf1e66e50abc622fb76a3019012dc07c678fac",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -107,11 +107,11 @@
|
||||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752141190,
|
||||
"narHash": "sha256-RHNq77Z84BtLTwyRtrBffm5V9006Dqw4vh3vrvULlxM=",
|
||||
"lastModified": 1753452257,
|
||||
"narHash": "sha256-Q8r+/655196nmMd4t93SxNdZ/RLP8UuS7Lml9ymOPXc=",
|
||||
"owner": "chaotic-cx",
|
||||
"repo": "nyx",
|
||||
"rev": "ef0794b8e94eea166407141f7e92da75f6df925a",
|
||||
"rev": "e8e28d053b45299a4aef1da2e9d5d1e742025c12",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -128,11 +128,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1750940343,
|
||||
"narHash": "sha256-qmc/jreM09MOwQ8dOa/+yyh99rU7TowSqo8L33VHfto=",
|
||||
"lastModified": 1753219021,
|
||||
"narHash": "sha256-wYL0oMGwFPbhYT0G2NcR4ud00TI06TEWOrvPpN4eNl0=",
|
||||
"owner": "Bali10050",
|
||||
"repo": "Darkly",
|
||||
"rev": "77770c8d3c35f7ad39da2c57122c360096df0aac",
|
||||
"rev": "79ec260ff2a9af1f4de10e670c75b31b7fbcd5da",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -171,11 +171,11 @@
|
||||
"rust-analyzer-src": "rust-analyzer-src"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752129689,
|
||||
"narHash": "sha256-0Xq5tZbvgZvxbbxv6kRHFuZE4Tq2za016NXh32nX0+Q=",
|
||||
"lastModified": 1753425938,
|
||||
"narHash": "sha256-zmFdkhodqdHZnSsWqXkQwhUgqQ+FaPhc4tHvUMnWm18=",
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"rev": "70bb04a7de606a75ba0a2ee9d47b99802780b35d",
|
||||
"rev": "a3c87849545a6f4d60ce4a8dbb08da9c009905ac",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -457,11 +457,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1748528448,
|
||||
"narHash": "sha256-Tyn+PgBm78Ibq28/WbEz8+pYJZMdbJKsyXMCpT6TjrM=",
|
||||
"lastModified": 1751817769,
|
||||
"narHash": "sha256-j7ORyAJFNxYWwF+6fs2z5IcJ40TpVwrkFYU9/CGHwfA=",
|
||||
"owner": "imxyy1soope1",
|
||||
"repo": "go-musicfox",
|
||||
"rev": "1870fd3501631577ad4daef1489b03885abcb037",
|
||||
"rev": "179b9440b6f209e7fd6ade589117b72bdd9042a6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -500,11 +500,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1751824240,
|
||||
"narHash": "sha256-aDDC0CHTlL7QDKWWhdbEgVPK6KwWt+ca0QkmHYZxMzI=",
|
||||
"lastModified": 1753365873,
|
||||
"narHash": "sha256-+Swd3wJppukESlWkbdopl9ZThjNVIFARVlb/eA2xjUA=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "fd9e55f5fac45a26f6169310afca64d56b681935",
|
||||
"rev": "e2fe7256c4ebbb35bfd1b4c6f52b57a3845ab1d0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -520,11 +520,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752202894,
|
||||
"narHash": "sha256-knafgng4gCjZIUMyAEWjxxdols6n/swkYnbWr+oF+1w=",
|
||||
"lastModified": 1753470191,
|
||||
"narHash": "sha256-hOUWU5L62G9sm8NxdiLWlLIJZz9H52VuFiDllHdwmVA=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "fab659b346c0d4252208434c3c4b3983a4b38fec",
|
||||
"rev": "a1817d1c0e5eabe7dfdfe4caa46c94d9d8f3fdb6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -542,11 +542,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1743604125,
|
||||
"narHash": "sha256-ZD61DNbsBt1mQbinAaaEqKaJk2RFo9R/j+eYWeGMx7A=",
|
||||
"lastModified": 1752603129,
|
||||
"narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "180fd43eea296e62ae68e079fcf56aba268b9a1a",
|
||||
"rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -595,11 +595,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1751529406,
|
||||
"narHash": "sha256-jwKDHyUycp678zDYa5Hyfq3msO73YMXdZPxp96dU7po=",
|
||||
"lastModified": 1753333833,
|
||||
"narHash": "sha256-S5RHVk+6PMwThIJY2mSbeoWTY1JrBSy1v1E1LDOFQW8=",
|
||||
"owner": "Jovian-Experiments",
|
||||
"repo": "Jovian-NixOS",
|
||||
"rev": "b2e5ce654e4f5bf8905c2e07a96dcf4966e6277d",
|
||||
"rev": "e462677116c12bf23bd681a6a87dc7f98e689adf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -668,11 +668,11 @@
|
||||
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752078530,
|
||||
"narHash": "sha256-TrRmlYdhWcadWvBpDjB9Xlry4uT4ZUIO46d+o5tjtCQ=",
|
||||
"lastModified": 1753374784,
|
||||
"narHash": "sha256-R6vHaUJiehdXSnzZqCOxmtmAnHA4GBOpS/UKydzAI38=",
|
||||
"owner": "sodiboo",
|
||||
"repo": "niri-flake",
|
||||
"rev": "d231d92313192d4d0c78d6ef04167fed9dee87cf",
|
||||
"rev": "da95771a65821bc98118cf3478eb2fc6fbfe035a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -701,11 +701,11 @@
|
||||
"niri-unstable": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1750791124,
|
||||
"narHash": "sha256-F5iVU/hjoSHSSe0gllxm0PcAaseEtGNanYK5Ha3k2Tg=",
|
||||
"lastModified": 1752870529,
|
||||
"narHash": "sha256-23DJk5EfEDCq7Xy1QELcayG0VxbbWpdQ6t7jbhae1Ok=",
|
||||
"owner": "YaLTeR",
|
||||
"repo": "niri",
|
||||
"rev": "37458d94b288945f6cfbd3c5c233f634d59f246c",
|
||||
"rev": "fefc0bc0a71556eb75352e2b611e50eb5d3bf9c2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -804,11 +804,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752199438,
|
||||
"narHash": "sha256-xSBMmGtq8K4Qv80TMqREmESCAsRLJRHAbFH2T/2Bf1Y=",
|
||||
"lastModified": 1753450337,
|
||||
"narHash": "sha256-l0QLEenVKuU6U2g1wI0zuf9IAm7QpisIbf8wAI6BUX4=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NixOS-WSL",
|
||||
"rev": "d34d9412556d3a896e294534ccd25f53b6822e80",
|
||||
"rev": "a8dfcd2962f6e788759a75b36ca86b14aa44d8e5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -819,11 +819,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1751984180,
|
||||
"narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=",
|
||||
"lastModified": 1753250450,
|
||||
"narHash": "sha256-i+CQV2rPmP8wHxj0aq4siYyohHwVlsh40kV89f3nw1s=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0",
|
||||
"rev": "fc02ee70efb805d3b2865908a13ddd4474557ecf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -847,11 +847,11 @@
|
||||
},
|
||||
"nixpkgs-master": {
|
||||
"locked": {
|
||||
"lastModified": 1752206449,
|
||||
"narHash": "sha256-NVAbC/s4CupABWGXF8M9mDiVw/n0YCftxwc1KatVjDk=",
|
||||
"lastModified": 1753502843,
|
||||
"narHash": "sha256-GC9AscLIjgfiOEpUCoa0PjzheC/ktxwRu+EbyisIfAA=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "1bd4d0d4a678d48b63eb18f457d74df2fcee6c69",
|
||||
"rev": "3df1e8c22800589a7eeac3892a27932829e8ba6e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -863,11 +863,11 @@
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1752203688,
|
||||
"narHash": "sha256-uJ054F5PVGPu5SvLPMevhdY/EfK0X5DUyRtXhQYNUyo=",
|
||||
"lastModified": 1753489912,
|
||||
"narHash": "sha256-uDCFHeXdRIgJpYmtcUxGEsZ+hYlLPBhR83fdU+vbC1s=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a70a12c75e13aa546c20ce0fe515de634d52c39e",
|
||||
"rev": "13e8d35b7d6028b7198f8186bc0347c6abaa2701",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -879,11 +879,11 @@
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1752124863,
|
||||
"narHash": "sha256-5rWuf6RAlMDp/CAEuyYEz7ryxzgjxOCgUDhWEef864c=",
|
||||
"lastModified": 1753418588,
|
||||
"narHash": "sha256-pdpkbarGU0sP38sWt56FQRRGnpOy6pGfVkoRNP3fhRw=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "40de82b434526744da778ed53c742c1282d9e75e",
|
||||
"rev": "a0a889d240ff8fda7209aec00d1877d440b23735",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -943,11 +943,11 @@
|
||||
},
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1751984180,
|
||||
"narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=",
|
||||
"lastModified": 1753250450,
|
||||
"narHash": "sha256-i+CQV2rPmP8wHxj0aq4siYyohHwVlsh40kV89f3nw1s=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0",
|
||||
"rev": "fc02ee70efb805d3b2865908a13ddd4474557ecf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -963,11 +963,11 @@
|
||||
"nixpkgs": "nixpkgs_5"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752207112,
|
||||
"narHash": "sha256-dnVoQSGQqEGJQzS6iHAG95c0oFrezzBinwu1bDLj9J4=",
|
||||
"lastModified": 1753498336,
|
||||
"narHash": "sha256-FbQQZpHpVEDZGChNFX+ITiuK3JcusatsbeSOlEFuk7U=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"rev": "f166dc14862dfec043f9545e8291cc4402f8b866",
|
||||
"rev": "af0aef6562e29628d3050ee105b926ee22c3c170",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1001,26 +1001,6 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"quickshell": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752146885,
|
||||
"narHash": "sha256-ZJK989GL+bTCQSxbG8v8/7tHMCEl/FPovkeDBNyClQE=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "d7079b75241c6e2b67f2429996fa7679ffc052e2",
|
||||
"revCount": 616,
|
||||
"type": "git",
|
||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"chaotic": "chaotic",
|
||||
@@ -1040,7 +1020,6 @@
|
||||
"nixpkgs-stable": "nixpkgs-stable",
|
||||
"nixpkgs-unstable": "nixpkgs-unstable",
|
||||
"nur": "nur",
|
||||
"quickshell": "quickshell",
|
||||
"sops-nix": "sops-nix",
|
||||
"stylix": "stylix",
|
||||
"zen": "zen"
|
||||
@@ -1049,11 +1028,11 @@
|
||||
"rust-analyzer-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1752086493,
|
||||
"narHash": "sha256-USpVUdiWXDfPoh+agbvoBQaBhg3ZdKZgHXo/HikMfVo=",
|
||||
"lastModified": 1753350080,
|
||||
"narHash": "sha256-f5KlFKKTjs1i2ZGUmo+vDXYOzWm7MAML5YSK9OuN/cQ=",
|
||||
"owner": "rust-lang",
|
||||
"repo": "rust-analyzer",
|
||||
"rev": "6e3abe164b9036048dce1a3aa65a7e7e5200c0d3",
|
||||
"rev": "922e04a134f789737b5b7a954bd62a8f4cbb0e8b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1071,11 +1050,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1751856221,
|
||||
"narHash": "sha256-/QE1eV0ckFvgRMcKjZqgdJDoXFNwSMepwRoBjaw2MCk=",
|
||||
"lastModified": 1753325142,
|
||||
"narHash": "sha256-7A8epLZ/LW9tek4OJY4IHesH7BgfBKr3aEm9JjUwqQo=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "34cae4b56929c5b340e1c5b10d9a98a425b2a51e",
|
||||
"rev": "cf608fb54d8854f31d7f7c499e2d2c928af48036",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1091,11 +1070,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1751606940,
|
||||
"narHash": "sha256-KrDPXobG7DFKTOteqdSVeL1bMVitDcy7otpVZWDE6MA=",
|
||||
"lastModified": 1752544651,
|
||||
"narHash": "sha256-GllP7cmQu7zLZTs9z0J2gIL42IZHa9CBEXwBY9szT0U=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "3633fc4acf03f43b260244d94c71e9e14a2f6e0d",
|
||||
"rev": "2c8def626f54708a9c38a5861866660395bb3461",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1125,11 +1104,11 @@
|
||||
"tinted-zed": "tinted-zed"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752201883,
|
||||
"narHash": "sha256-SZVbQ4YThvYU50cJ4W4GNMy7/rVOJI8qmXqbEcRNsug=",
|
||||
"lastModified": 1753490930,
|
||||
"narHash": "sha256-noQ6sJ1twQvvGH34d13iM0uh95Syx+kb3nw45wTalIM=",
|
||||
"owner": "danth",
|
||||
"repo": "stylix",
|
||||
"rev": "d395780b9c5c36f191b990b2021c71af180a1982",
|
||||
"rev": "744431e17676177c18c4c52e8781ba6e91db30d6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1269,11 +1248,11 @@
|
||||
"xwayland-satellite-unstable": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1751228685,
|
||||
"narHash": "sha256-MENtauGBhJ+kDeFaawvWGXaFG3Il6qQzjaP0RmtfM0k=",
|
||||
"lastModified": 1752338000,
|
||||
"narHash": "sha256-Fxlp/yKtynug0jyuauAmvZU2SzHCfwlwWf85j+IvQ0U=",
|
||||
"owner": "Supreeeme",
|
||||
"repo": "xwayland-satellite",
|
||||
"rev": "557ebeb616e03d5e4a8049862bbbd1f02c6f020b",
|
||||
"rev": "ba78881a68182ce338041846164cbfed0d70935c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1290,11 +1269,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752164817,
|
||||
"narHash": "sha256-LJFIx27IOUowLsJn5wci9mHZ4CesJsiAivQWDjnZPCc=",
|
||||
"lastModified": 1753502836,
|
||||
"narHash": "sha256-VOytqgYsI6CfsVhbwVnDQS239+ht7pFLNVrRCKemBqU=",
|
||||
"owner": "0xc000022070",
|
||||
"repo": "zen-browser-flake",
|
||||
"rev": "9193992c4c2c4349b4280ec2b49648cae208fe63",
|
||||
"rev": "cd46b6cddf3f83ad439108b8ead8cf65f041d445",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
30
flake.nix
30
flake.nix
@@ -32,9 +32,6 @@
|
||||
niri.inputs.nixpkgs.follows = "nixpkgs";
|
||||
niri.inputs.nixpkgs-stable.follows = "nixpkgs-stable";
|
||||
|
||||
quickshell.url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
|
||||
quickshell.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
darkly.url = "github:Bali10050/Darkly";
|
||||
darkly.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
@@ -71,10 +68,10 @@
|
||||
let
|
||||
inherit (self) outputs;
|
||||
vars = import ./vars.nix;
|
||||
forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed;
|
||||
forAllSystems = lib.genAttrs lib.systems.flakeExposed;
|
||||
forAllHosts =
|
||||
mkSystem:
|
||||
nixpkgs.lib.attrsets.mergeAttrsList (
|
||||
lib.mergeAttrsList (
|
||||
builtins.map (hostname: {
|
||||
${hostname} = mkSystem hostname;
|
||||
}) (builtins.attrNames (builtins.readDir ./config/hosts))
|
||||
@@ -139,17 +136,6 @@
|
||||
darkly-qt5 = inputs.darkly.packages.${final.system}.darkly-qt5;
|
||||
darkly-qt6 = inputs.darkly.packages.${final.system}.darkly-qt6;
|
||||
})
|
||||
(final: prev: {
|
||||
quickshell = inputs.quickshell.packages.${final.system}.default.override {
|
||||
withJemalloc = true;
|
||||
withQtSvg = true;
|
||||
withWayland = true;
|
||||
withPipewire = false;
|
||||
withPam = false;
|
||||
withX11 = false;
|
||||
withHyprland = false;
|
||||
};
|
||||
})
|
||||
(final: prev: {
|
||||
inherit lib;
|
||||
})
|
||||
@@ -185,8 +171,16 @@
|
||||
outputs
|
||||
hostname
|
||||
;
|
||||
sopsRoot = ./secrets;
|
||||
} // vars;
|
||||
secrets =
|
||||
with lib.haumea;
|
||||
load {
|
||||
src = ./secrets;
|
||||
loader = [
|
||||
(matchers.always loaders.path)
|
||||
];
|
||||
};
|
||||
}
|
||||
// vars;
|
||||
modules =
|
||||
(lib.umport {
|
||||
paths = [ ./modules ];
|
||||
|
||||
26
modules/audio.nix
Normal file
26
modules/audio.nix
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
username,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
default = true;
|
||||
optionName = "default audio settings";
|
||||
optionPath = [ "audio" ];
|
||||
config' = {
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
audio.enable = true;
|
||||
};
|
||||
users.extraUsers.${username}.extraGroups = [ "audio" ];
|
||||
my.persist.homeDirs = [ ".local/state/wireplumber" ];
|
||||
my.home.home.packages = [ pkgs.pwvucontrol ];
|
||||
};
|
||||
}
|
||||
20
modules/bluetooth.nix
Normal file
20
modules/bluetooth.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
default = true;
|
||||
optionName = "default bluetooth settings";
|
||||
optionPath = [ "bluetooth" ];
|
||||
config' = {
|
||||
hardware.bluetooth = {
|
||||
enable = true;
|
||||
powerOnBoot = true;
|
||||
settings = {
|
||||
General = {
|
||||
Enable = "Source,Sink,Media,Socket";
|
||||
Disable = "HeadSet";
|
||||
MultiProfile = "multiple";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -9,7 +9,6 @@ lib.my.makeSwitch {
|
||||
];
|
||||
config' = {
|
||||
my.cli.media = {
|
||||
cava.enable = true;
|
||||
go-musicfox.enable = true;
|
||||
mpd.enable = true;
|
||||
ffmpeg.enable = true;
|
||||
|
||||
@@ -1,167 +0,0 @@
|
||||
## Configuration file for CAVA. Default values are commented out. Use either ';' or '#' for commenting.
|
||||
|
||||
|
||||
[general]
|
||||
|
||||
# Smoothing mode. Can be 'normal', 'scientific' or 'waves'.
|
||||
mode = normal
|
||||
|
||||
# Accepts only non-negative values.
|
||||
framerate = 60
|
||||
|
||||
# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off
|
||||
# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens.
|
||||
; autosens = 1
|
||||
; overshoot = 20
|
||||
|
||||
# Manual sensitivity in %. Autosens must be turned off for this to take effect.
|
||||
# 200 means double height. Accepts only non-negative values.
|
||||
; sensitivity = 100
|
||||
|
||||
# The number of bars (0-200). 0 sets it to auto (fill up console).
|
||||
# Bars' width and space between bars in number of characters.
|
||||
bars = 0
|
||||
bar_width = 5
|
||||
bar_spacing = 1
|
||||
|
||||
# Lower and higher cutoff frequencies for lowest and highest bars
|
||||
# the bandwidth of the visualizer.
|
||||
# Note: there is a minimum total bandwidth of 43Mhz x number of bars.
|
||||
# Cava will automatically increase the higher cutoff if a too low band is specified.
|
||||
; lower_cutoff_freq = 50
|
||||
; higher_cutoff_freq = 10000
|
||||
|
||||
|
||||
|
||||
[input]
|
||||
|
||||
# Audio capturing method. Possible methods are: 'pulse', 'alsa' or 'fifo'.
|
||||
# Defaults to 'pulse', 'alsa' or 'fifo', in that order, dependent on what support cava was built with.
|
||||
#
|
||||
# All input methods uses the same config variable 'source'
|
||||
# to define where it should get the audio.
|
||||
#
|
||||
# For pulseaudio 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink
|
||||
# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them).
|
||||
#
|
||||
# For alsa 'source' will be the capture device.
|
||||
# For fifo 'source' will be the path to fifo-file.
|
||||
method = pulse
|
||||
source = auto
|
||||
|
||||
; method = alsa
|
||||
; source = hw:Loopback,1
|
||||
|
||||
; method = fifo
|
||||
; source = /tmp/mpd.fifo
|
||||
|
||||
|
||||
|
||||
[output]
|
||||
|
||||
# Ouput method. Can be 'ncurses', 'noncurses' or 'raw'.
|
||||
# 'noncurses' is for systems that does not suport ncurses.
|
||||
# 'raw' is a 16 bit data stream of the bar heights that can be used to send to other applications.
|
||||
# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above.
|
||||
method = ncurses
|
||||
|
||||
# Visual styles. Can be 'stereo' or 'mono'.
|
||||
# 'stereo' mirrors both channels with low frequencies in center.
|
||||
# 'mono' averages both channels and outputs left to right lowest to highest frequencies.
|
||||
style = mono
|
||||
|
||||
# Raw output target. A fifo will be created if target does not exist.
|
||||
; raw_target = /dev/stdout
|
||||
|
||||
# Raw data format. Can be 'binary' or 'ascii'.
|
||||
; data_format = binary
|
||||
|
||||
# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
|
||||
; bit_format = 16bit
|
||||
|
||||
# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
|
||||
; ascii_max_range = 1000
|
||||
|
||||
# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters.
|
||||
# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)).
|
||||
; bar_delimiter = 59
|
||||
; frame_delimiter = 10
|
||||
|
||||
|
||||
|
||||
# [color]
|
||||
|
||||
# # Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
|
||||
# # Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires a
|
||||
# # terminal that can change color definitions such as Gnome-terminal or rxvt.
|
||||
# ; background = black
|
||||
# ; foreground = cyan
|
||||
|
||||
# # Gradient mode, only hex defined colors are supported, background must also be defined in hex
|
||||
# # or remain commented out. 1 = on, 0 = off. Warning: for certain terminal emulators cava will
|
||||
# # not able to restore color definitions on exit, simply restart your terminal to restore colors.
|
||||
# gradient = 1
|
||||
# gradient_color_1 = '#0099ff'
|
||||
# gradient_color_2 = '#ff3399'
|
||||
|
||||
|
||||
|
||||
[smoothing]
|
||||
|
||||
# Multiplier for the integral smoothing calculations. Takes values from 0-0.99.
|
||||
# Higher values means smoother, but less precise. Set to 0 to disable.
|
||||
; integral = 0.7
|
||||
|
||||
# Disables or enables the so-called "Monstercat smoothing". Set to 0 to disable.
|
||||
; monstercat = 1
|
||||
; waves = 1
|
||||
|
||||
# Set gravity multiplier for "drop off". Higher values means bars will drop faster.
|
||||
# Accepts only non-negative values. 0.5 means half gravity, 2 means double. Set to 0 to disable "drop off".
|
||||
; gravity = 2
|
||||
|
||||
|
||||
# In bar height, bars that would have been lower that this will not be drawn.
|
||||
; ignore = 0
|
||||
|
||||
|
||||
[eq]
|
||||
|
||||
# This one is tricky. You can have as much keys as you want.
|
||||
# Remember to uncomment more then one key! More keys = more precision.
|
||||
# Look at readme.md on github for further explanations and examples.
|
||||
#; 1 = 1 # bass
|
||||
#; 2 = 1
|
||||
#; 3 = 1 # midtone
|
||||
#; 4 = 1
|
||||
#; 5 = 1 # treble
|
||||
1=1
|
||||
2=1
|
||||
3=2
|
||||
4=1
|
||||
5=1
|
||||
|
||||
[color]
|
||||
|
||||
#background = '#191724'
|
||||
gradient = 1
|
||||
gradient_count = 6
|
||||
gradient_color_1 = '#31748f'
|
||||
gradient_color_2 = '#9ccfd8'
|
||||
gradient_color_3 = '#c4a7e7'
|
||||
gradient_color_4 = '#ebbcba'
|
||||
gradient_color_5 = '#f6c177'
|
||||
gradient_color_6 = '#eb6f92'
|
||||
|
||||
[color]
|
||||
|
||||
gradient = 1
|
||||
|
||||
gradient_color_1 = '#94e2d5'
|
||||
gradient_color_2 = '#89dceb'
|
||||
gradient_color_3 = '#74c7ec'
|
||||
gradient_color_4 = '#89b4fa'
|
||||
gradient_color_5 = '#cba6f7'
|
||||
gradient_color_6 = '#f5c2e7'
|
||||
gradient_color_7 = '#eba0ac'
|
||||
gradient_color_8 = '#f38ba8'
|
||||
@@ -1,167 +0,0 @@
|
||||
## Configuration file for CAVA. Default values are commented out. Use either ';' or '#' for commenting.
|
||||
|
||||
|
||||
[general]
|
||||
|
||||
# Smoothing mode. Can be 'normal', 'scientific' or 'waves'.
|
||||
mode = normal
|
||||
|
||||
# Accepts only non-negative values.
|
||||
framerate = 60
|
||||
|
||||
# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off
|
||||
# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens.
|
||||
; autosens = 1
|
||||
; overshoot = 20
|
||||
|
||||
# Manual sensitivity in %. Autosens must be turned off for this to take effect.
|
||||
# 200 means double height. Accepts only non-negative values.
|
||||
; sensitivity = 100
|
||||
|
||||
# The number of bars (0-200). 0 sets it to auto (fill up console).
|
||||
# Bars' width and space between bars in number of characters.
|
||||
bars = 0
|
||||
bar_width = 2
|
||||
bar_spacing = 1
|
||||
|
||||
# Lower and higher cutoff frequencies for lowest and highest bars
|
||||
# the bandwidth of the visualizer.
|
||||
# Note: there is a minimum total bandwidth of 43Mhz x number of bars.
|
||||
# Cava will automatically increase the higher cutoff if a too low band is specified.
|
||||
; lower_cutoff_freq = 50
|
||||
; higher_cutoff_freq = 10000
|
||||
|
||||
|
||||
|
||||
[input]
|
||||
|
||||
# Audio capturing method. Possible methods are: 'pulse', 'alsa' or 'fifo'.
|
||||
# Defaults to 'pulse', 'alsa' or 'fifo', in that order, dependent on what support cava was built with.
|
||||
#
|
||||
# All input methods uses the same config variable 'source'
|
||||
# to define where it should get the audio.
|
||||
#
|
||||
# For pulseaudio 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink
|
||||
# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them).
|
||||
#
|
||||
# For alsa 'source' will be the capture device.
|
||||
# For fifo 'source' will be the path to fifo-file.
|
||||
method = pulse
|
||||
source = auto
|
||||
|
||||
; method = alsa
|
||||
; source = hw:Loopback,1
|
||||
|
||||
; method = fifo
|
||||
; source = /tmp/mpd.fifo
|
||||
|
||||
|
||||
|
||||
[output]
|
||||
|
||||
# Ouput method. Can be 'ncurses', 'noncurses' or 'raw'.
|
||||
# 'noncurses' is for systems that does not suport ncurses.
|
||||
# 'raw' is a 16 bit data stream of the bar heights that can be used to send to other applications.
|
||||
# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above.
|
||||
method = ncurses
|
||||
|
||||
# Visual styles. Can be 'stereo' or 'mono'.
|
||||
# 'stereo' mirrors both channels with low frequencies in center.
|
||||
# 'mono' averages both channels and outputs left to right lowest to highest frequencies.
|
||||
style = mono
|
||||
|
||||
# Raw output target. A fifo will be created if target does not exist.
|
||||
; raw_target = /dev/stdout
|
||||
|
||||
# Raw data format. Can be 'binary' or 'ascii'.
|
||||
; data_format = binary
|
||||
|
||||
# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
|
||||
; bit_format = 16bit
|
||||
|
||||
# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
|
||||
; ascii_max_range = 1000
|
||||
|
||||
# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters.
|
||||
# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)).
|
||||
; bar_delimiter = 59
|
||||
; frame_delimiter = 10
|
||||
|
||||
|
||||
|
||||
# [color]
|
||||
|
||||
# # Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
|
||||
# # Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires a
|
||||
# # terminal that can change color definitions such as Gnome-terminal or rxvt.
|
||||
# ; background = black
|
||||
# ; foreground = cyan
|
||||
|
||||
# # Gradient mode, only hex defined colors are supported, background must also be defined in hex
|
||||
# # or remain commented out. 1 = on, 0 = off. Warning: for certain terminal emulators cava will
|
||||
# # not able to restore color definitions on exit, simply restart your terminal to restore colors.
|
||||
# gradient = 1
|
||||
# gradient_color_1 = '#0099ff'
|
||||
# gradient_color_2 = '#ff3399'
|
||||
|
||||
|
||||
|
||||
[smoothing]
|
||||
|
||||
# Multiplier for the integral smoothing calculations. Takes values from 0-0.99.
|
||||
# Higher values means smoother, but less precise. Set to 0 to disable.
|
||||
; integral = 0.7
|
||||
|
||||
# Disables or enables the so-called "Monstercat smoothing". Set to 0 to disable.
|
||||
; monstercat = 1
|
||||
; waves = 1
|
||||
|
||||
# Set gravity multiplier for "drop off". Higher values means bars will drop faster.
|
||||
# Accepts only non-negative values. 0.5 means half gravity, 2 means double. Set to 0 to disable "drop off".
|
||||
; gravity = 1
|
||||
|
||||
|
||||
# In bar height, bars that would have been lower that this will not be drawn.
|
||||
; ignore = 0
|
||||
|
||||
|
||||
[eq]
|
||||
|
||||
# This one is tricky. You can have as much keys as you want.
|
||||
# Remember to uncomment more then one key! More keys = more precision.
|
||||
# Look at readme.md on github for further explanations and examples.
|
||||
#; 1 = 1 # bass
|
||||
#; 2 = 1
|
||||
#; 3 = 1 # midtone
|
||||
#; 4 = 1
|
||||
#; 5 = 1 # treble
|
||||
1=1
|
||||
2=1
|
||||
3=2
|
||||
4=1
|
||||
5=1
|
||||
|
||||
[color]
|
||||
|
||||
#background = '#191724'
|
||||
gradient = 1
|
||||
gradient_count = 6
|
||||
gradient_color_1 = '#31748f'
|
||||
gradient_color_2 = '#9ccfd8'
|
||||
gradient_color_3 = '#c4a7e7'
|
||||
gradient_color_4 = '#ebbcba'
|
||||
gradient_color_5 = '#f6c177'
|
||||
gradient_color_6 = '#eb6f92'
|
||||
|
||||
[color]
|
||||
|
||||
gradient = 1
|
||||
|
||||
gradient_color_1 = '#94e2d5'
|
||||
gradient_color_2 = '#89dceb'
|
||||
gradient_color_3 = '#74c7ec'
|
||||
gradient_color_4 = '#89b4fa'
|
||||
gradient_color_5 = '#cba6f7'
|
||||
gradient_color_6 = '#f5c2e7'
|
||||
gradient_color_7 = '#eba0ac'
|
||||
gradient_color_8 = '#f38ba8'
|
||||
@@ -1,79 +0,0 @@
|
||||
#version 330
|
||||
|
||||
in vec2 fragCoord;
|
||||
out vec4 fragColor;
|
||||
|
||||
// bar values. defaults to left channels first (low to high), then right (high to low).
|
||||
uniform float bars[512];
|
||||
|
||||
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||
uniform int bar_width; // bar width (configurable), not used here
|
||||
uniform int bar_spacing; // space bewteen bars (configurable)
|
||||
|
||||
uniform vec3 u_resolution; // window resolution
|
||||
|
||||
//colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
|
||||
uniform vec3 bg_color; // background color
|
||||
uniform vec3 fg_color; // foreground color
|
||||
|
||||
uniform int gradient_count;
|
||||
uniform vec3 gradient_colors[8]; // gradient colors
|
||||
|
||||
vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max)
|
||||
{
|
||||
//create color based on fraction of this color and next color
|
||||
float yr = (y - y_min) / (y_max - y_min);
|
||||
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
// find which bar to use based on where we are on the x axis
|
||||
float x = u_resolution.x * fragCoord.x;
|
||||
int bar = int(bars_count * fragCoord.x);
|
||||
|
||||
//calculate a bar size
|
||||
float bar_size = u_resolution.x / bars_count;
|
||||
|
||||
//the y coordinate and bar values are the same
|
||||
float y = bars[bar];
|
||||
|
||||
// make sure there is a thin line at bottom
|
||||
if (y * u_resolution.y < 1.0)
|
||||
{
|
||||
y = 1.0 / u_resolution.y;
|
||||
}
|
||||
|
||||
//draw the bar up to current height
|
||||
if (y > fragCoord.y)
|
||||
{
|
||||
//make some space between bars basen on settings
|
||||
if (x > (bar + 1) * (bar_size) - bar_spacing)
|
||||
{
|
||||
fragColor = vec4(bg_color,1.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gradient_count == 0)
|
||||
{
|
||||
fragColor = vec4(fg_color,1.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
//find which color in the configured gradient we are at
|
||||
int color = int((gradient_count - 1) * fragCoord.y);
|
||||
|
||||
//find where on y this and next color is supposed to be
|
||||
float y_min = color / (gradient_count - 1.0);
|
||||
float y_max = (color + 1.0) / (gradient_count - 1.0);
|
||||
|
||||
//make color
|
||||
fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fragColor = vec4(bg_color,1.0);
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
#version 330
|
||||
|
||||
in vec2 fragCoord;
|
||||
out vec4 fragColor;
|
||||
|
||||
// bar values. defaults to left channels first (low to high), then right (high to low).
|
||||
uniform float bars[512];
|
||||
|
||||
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||
|
||||
uniform vec3 u_resolution; // window resolution, not used here
|
||||
|
||||
//colors, configurable in cava config file
|
||||
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
|
||||
uniform vec3 fg_color; // foreground color, not used here
|
||||
|
||||
float normalize_C(float x, float x_min, float x_max, float r_min, float r_max )
|
||||
{
|
||||
float xr;
|
||||
xr = (r_max-r_min) * (x - x_min) / (x_max - x_min) + r_min;
|
||||
return xr;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
// find which bar to use based on where we are on the x axis
|
||||
int bar = int(bars_count * fragCoord.x);
|
||||
|
||||
// create a normal along the y axis based on the bar height
|
||||
float x = normalize_C(fragCoord.y, 1.0, 0.0, 0.0, bars[bar]);
|
||||
|
||||
// set color
|
||||
fragColor.r=fg_color.x*x;
|
||||
fragColor.g=fg_color.y*x;
|
||||
fragColor.b=fg_color.z*x;
|
||||
fragColor.a=1.0;
|
||||
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
#version 330
|
||||
|
||||
in vec2 fragCoord;
|
||||
out vec4 fragColor;
|
||||
|
||||
// bar values. defaults to left channels first (low to high), then right (high to low).
|
||||
uniform float bars[512];
|
||||
|
||||
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||
|
||||
uniform vec3 u_resolution; // window resolution, not used here
|
||||
|
||||
//colors, configurable in cava config file
|
||||
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
|
||||
uniform vec3 fg_color; // foreground color, not used here
|
||||
|
||||
void main()
|
||||
{
|
||||
// find which bar to use based on where we are on the x axis
|
||||
int bar = int(bars_count * fragCoord.x);
|
||||
|
||||
float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0;
|
||||
float y = (bars[bar]) * bar_y;
|
||||
|
||||
float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count;
|
||||
float bar_r = 1.0 - abs((bar_x - 0.5)) * 2;
|
||||
|
||||
bar_r = bar_r * bar_r * 2;
|
||||
|
||||
// set color
|
||||
fragColor.r = fg_color.x * y * bar_r;
|
||||
fragColor.g = fg_color.y * y * bar_r;
|
||||
fragColor.b = fg_color.z * y * bar_r;
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
#version 330
|
||||
|
||||
|
||||
// Input vertex data, different for all executions of this shader.
|
||||
layout(location = 0) in vec3 vertexPosition_modelspace;
|
||||
|
||||
// Output data ; will be interpolated for each fragment.
|
||||
out vec2 fragCoord;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = vec4(vertexPosition_modelspace,1);
|
||||
fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0;
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomePackageConfig {
|
||||
inherit config pkgs;
|
||||
packageName = "cava";
|
||||
packagePath = [ "cava" ];
|
||||
optionPath = [
|
||||
"cli"
|
||||
"media"
|
||||
"cava"
|
||||
];
|
||||
extraConfig = {
|
||||
my.home.xdg.configFile."cava" = {
|
||||
source = ./config;
|
||||
recursive = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -23,8 +23,3 @@ audio_output {
|
||||
type "pipewire"
|
||||
name "pipewire"
|
||||
}
|
||||
|
||||
audio_output {
|
||||
type "pulse"
|
||||
name "pulseaudio"
|
||||
}
|
||||
|
||||
@@ -80,6 +80,10 @@ lib.my.makeSwitch {
|
||||
enableAutoUpdates = true;
|
||||
settings.updates.auto_update = true;
|
||||
};
|
||||
programs.television = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -44,11 +44,11 @@ lib.my.makeSwitch {
|
||||
jj = {
|
||||
ignore_timeout = true;
|
||||
description = "The current jj status";
|
||||
when = "jj root";
|
||||
symbol = " ";
|
||||
when = true;
|
||||
command = ''
|
||||
jj log --revisions @ --no-graph --ignore-working-copy --color always --limit 1 --template '
|
||||
separate(" ",
|
||||
" ",
|
||||
change_id.shortest(4),
|
||||
bookmarks,
|
||||
"|",
|
||||
@@ -64,19 +64,9 @@ lib.my.makeSwitch {
|
||||
"(no description set)",
|
||||
) ++ raw_escape_sequence("\x1b[0m"),
|
||||
)
|
||||
'
|
||||
' || (starship module git_branch && starship module git_status)
|
||||
'';
|
||||
};
|
||||
git_branch = {
|
||||
when = true;
|
||||
command = "jj root >/dev/null 2>&1 || starship module git_branch";
|
||||
description = "Only show git_branch if we're not in a jj repo";
|
||||
};
|
||||
git_status = {
|
||||
when = true;
|
||||
command = "jj root >/dev/null 2>&1 || starship module git_status";
|
||||
description = "Only show git_status if we're not in a jj repo";
|
||||
};
|
||||
};
|
||||
git_state.disabled = true;
|
||||
git_commit.disabled = true;
|
||||
|
||||
@@ -26,6 +26,7 @@ lib.my.makeHomeProgramConfig {
|
||||
ui = {
|
||||
graph.style = "square";
|
||||
default-command = "status";
|
||||
conflict-marker-style = "snapshot";
|
||||
};
|
||||
signing = {
|
||||
backend = "ssh";
|
||||
|
||||
@@ -4,5 +4,3 @@ require("core.keymaps")
|
||||
require("langs.langs-setup")
|
||||
|
||||
require("plugins.plugins-setup")
|
||||
|
||||
require("core.autostart")
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
-- Open tree when in config dir
|
||||
local configdir = vim.fn.system("echo $HOME/.config")
|
||||
configdir = string.sub(configdir, 1, string.len(configdir) - 1)
|
||||
if string.find(vim.fn.system("pwd"), configdir) ~= nil then
|
||||
vim.cmd("NvimTreeOpen")
|
||||
vim.cmd("NvimTmuxNavigateRight")
|
||||
end
|
||||
@@ -13,27 +13,13 @@ keymap.set("n", "<leader>nh", ":nohl<CR>", opt)
|
||||
keymap.set("n", "<leader>sv", "<C-w>v", opt)
|
||||
keymap.set("n", "<leader>sh", "<C-w>s", opt)
|
||||
|
||||
keymap.set("i", "<S-up>", "<ESC>v<up>", opt)
|
||||
keymap.set("i", "<S-down>", "<ESC>v<down>", opt)
|
||||
keymap.set("n", "<S-up>", "v<up>", opt)
|
||||
keymap.set("n", "<S-down>", "v<down>", opt)
|
||||
keymap.set("v", "<S-up>", "<up>", opt)
|
||||
keymap.set("v", "<S-down>", "<down>", opt)
|
||||
|
||||
keymap.set("i", "<S-left>", "<ESC>v<left>", opt)
|
||||
keymap.set("i", "<S-right>", "<ESC>v<right>", opt)
|
||||
keymap.set("n", "<S-left>", "v<left>", opt)
|
||||
keymap.set("n", "<S-right>", "v<right>", opt)
|
||||
keymap.set("v", "<S-left>", "<left>", opt)
|
||||
keymap.set("v", "<S-right>", "<right>", opt)
|
||||
|
||||
keymap.set("v", ".", ">gv", opt)
|
||||
keymap.set("v", ",", "<gv", opt)
|
||||
|
||||
keymap.set({ "n", "v" }, "<pageup>", "9k", opt)
|
||||
keymap.set({ "n", "v" }, "<pagedown>", "9j", opt)
|
||||
keymap.set("i", "<pageup>", "<up><up><up><up><up><up><up><up><up>", opt)
|
||||
keymap.set("i", "<pagedown>", "<down><down><down><down><down><down><down><down><down>", opt)
|
||||
keymap.set("i", "<pageup>", string.rep("<up>", 9), opt)
|
||||
keymap.set("i", "<pagedown>", string.rep("<down>", 9), opt)
|
||||
|
||||
keymap.set("n", "<leader>ww", ":w<CR>", opt)
|
||||
keymap.set("n", "<leader>so", ":so<CR>", opt)
|
||||
@@ -54,15 +40,6 @@ keymap.set("n", "L", ":BufferLineCycleNext<CR>", opt)
|
||||
keymap.set("n", "<A-h>", ":BufferLineMovePrev<CR>", opt)
|
||||
keymap.set("n", "<A-l>", ":BufferLineMoveNext<CR>", opt)
|
||||
|
||||
-- reload config
|
||||
keymap.set("n", "<leader>rc", ":so ~/.config/nvim/init.lua<CR>", opt)
|
||||
keymap.set("n", "<leader>rp", ":so ~/.config/nvim/lua/plugins/plugins-setup.lua<CR>", opt)
|
||||
|
||||
-- Workspaces
|
||||
keymap.set("n", "<leader>wo", ":Telescope workspaces<CR>", opt)
|
||||
keymap.set("n", "<leader>wa", ":WorkspacesAdd<CR>", opt)
|
||||
keymap.set("n", "<leader>wr", ":WorkspacesRemove<CR>", opt)
|
||||
|
||||
-- Neovide config
|
||||
if vim.g.neovide then
|
||||
keymap.set("v", "<C-C>", '"+y', opt)
|
||||
|
||||
@@ -16,7 +16,6 @@ lib.my.makeSwitch {
|
||||
my.home = {
|
||||
home.packages = with pkgs; [
|
||||
nodejs
|
||||
nodePackages.npm
|
||||
|
||||
typescript
|
||||
];
|
||||
|
||||
@@ -16,7 +16,6 @@ lib.my.makeSwitch {
|
||||
terminal.all.enable = true;
|
||||
wm.all.enable = true;
|
||||
style.enable = true;
|
||||
quickshell.enable = true;
|
||||
wine.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -10,7 +10,6 @@ lib.my.makeSwitch {
|
||||
config' = {
|
||||
my.desktop.browser = {
|
||||
firefox.enable = true;
|
||||
librewolf.enable = true;
|
||||
chromium.enable = true;
|
||||
zen.enable = true;
|
||||
};
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeHomeProgramConfig {
|
||||
inherit config;
|
||||
programName = "librewolf";
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"browser"
|
||||
"librewolf"
|
||||
];
|
||||
extraConfig = {
|
||||
my.persist.homeDirs = [
|
||||
".librewolf"
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
import Quickshell
|
||||
import Quickshell.Services.UPower
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import org.kde.kirigami
|
||||
|
||||
Rectangle {
|
||||
id: bat
|
||||
|
||||
Layout.preferredWidth: batIcon.width
|
||||
Layout.fillHeight: true
|
||||
color: 'transparent'
|
||||
|
||||
readonly property var battery: UPower.displayDevice
|
||||
readonly property int percentage: Math.round(battery.percentage * 100)
|
||||
property var size: height * 0.4
|
||||
|
||||
visible: battery.isLaptopBattery
|
||||
|
||||
Icon {
|
||||
id: batIcon
|
||||
anchors.centerIn: parent
|
||||
|
||||
implicitHeight: bat.size
|
||||
implicitWidth: bat.size
|
||||
|
||||
// This recolors the entire svg, instead of only classless components.
|
||||
// Hopefully in the future classes can be selected for recoloring.
|
||||
isMask: true
|
||||
color: 'white'
|
||||
|
||||
source: {
|
||||
const nearestTen = Math.round(bat.percentage / 10) * 10;
|
||||
const number = nearestTen.toString().padStart(2, "0");
|
||||
let charging;
|
||||
|
||||
if (bat.battery.state == UPowerDeviceState.Charging) {
|
||||
charging = "-charging";
|
||||
} else if (bat.battery.state.toString() == UPowerDeviceState.FullyCharged) {
|
||||
charging = "-charged";
|
||||
} else {
|
||||
charging = "";
|
||||
}
|
||||
|
||||
return Quickshell.iconPath(`battery-level-${number}${charging}-symbolic`);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import "../../utils"
|
||||
|
||||
Rectangle {
|
||||
Layout.fillHeight: true
|
||||
color: "transparent"
|
||||
implicitWidth: clockText.width
|
||||
|
||||
Text {
|
||||
id: clockText
|
||||
text: Time.time
|
||||
color: Colors.fg
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
Rectangle {
|
||||
Layout.fillHeight: true
|
||||
color: "salmon"
|
||||
implicitWidth: mprisText.width
|
||||
|
||||
Text {
|
||||
id: mprisText
|
||||
text: "Mpris"
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import "../../utils"
|
||||
|
||||
Rectangle {
|
||||
id: resources
|
||||
|
||||
Layout.fillHeight: true
|
||||
color: "transparent"
|
||||
implicitWidth: rowLayout.width
|
||||
|
||||
property int valueSize: 8
|
||||
property int textSize: 6
|
||||
|
||||
property string valueColor: "white"
|
||||
property string textColor: "lightgray"
|
||||
|
||||
RowLayout {
|
||||
id: rowLayout
|
||||
anchors.centerIn: parent
|
||||
|
||||
ColumnLayout {
|
||||
id: cpuColumn
|
||||
Label {
|
||||
color: textColor
|
||||
font.pointSize: textSize
|
||||
text: "CPU"
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
}
|
||||
Label {
|
||||
color: valueColor
|
||||
font.pointSize: valueSize
|
||||
text: Resources.cpu_percent + "%"
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Label {
|
||||
color: textColor
|
||||
font.pointSize: textSize
|
||||
text: "MEM"
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
}
|
||||
Label {
|
||||
color: valueColor
|
||||
font.pointSize: valueSize
|
||||
text: Resources.mem_percent + "%"
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
import QtQuick
|
||||
|
||||
Text {
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
Rectangle {
|
||||
Layout.fillHeight: true
|
||||
color: "lightblue"
|
||||
implicitWidth: trayText.width
|
||||
|
||||
Text {
|
||||
id: trayText
|
||||
text: "Tray"
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
Rectangle {
|
||||
id: ws
|
||||
|
||||
property bool hovered: false
|
||||
|
||||
Layout.preferredWidth: parent.height * 0.4
|
||||
Layout.preferredHeight: parent.height * 0.4
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
radius: height / 2
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
|
||||
onEntered: () => {
|
||||
ws.hovered = true;
|
||||
}
|
||||
onExited: () => {
|
||||
ws.hovered = false;
|
||||
}
|
||||
onClicked: () => console.log(`workspace ?`)
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import "../../../utils"
|
||||
import Quickshell.Hyprland
|
||||
|
||||
Rectangle {
|
||||
id: workspaces
|
||||
|
||||
color: 'transparent'
|
||||
|
||||
width: workspacesRow.implicitWidth
|
||||
Layout.fillHeight: true
|
||||
|
||||
RowLayout {
|
||||
id: workspacesRow
|
||||
|
||||
height: parent.height
|
||||
implicitWidth: (parent.height * 0.5 + spacing) * 2 - spacing
|
||||
anchors.centerIn: parent
|
||||
|
||||
spacing: height / 7
|
||||
|
||||
Repeater {
|
||||
id: repeater
|
||||
|
||||
model: HyprlandUtils.maxWorkspace
|
||||
|
||||
Workspace {
|
||||
id: ws
|
||||
required property int index
|
||||
property HyprlandWorkspace currWorkspace: Hyprland.workspaces.values.find(e => e.id == index + 1) || null
|
||||
property bool nonexistent: currWorkspace === null
|
||||
property bool focused: index + 1 === Hyprland.focusedMonitor.activeWorkspace.id
|
||||
|
||||
Layout.preferredWidth: {
|
||||
if (focused) {
|
||||
return parent.height * 0.8;
|
||||
} else {
|
||||
return parent.height * 0.4;
|
||||
}
|
||||
}
|
||||
|
||||
color: {
|
||||
if (nonexistent) {
|
||||
return Colors.bgBlur;
|
||||
} else {
|
||||
return Colors.monitorColors[Hyprland.monitors.values.indexOf(Hyprland.workspaces.values.find(e => e.id === index + 1).monitor)];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
import "./windows"
|
||||
import Quickshell // for ShellRoot and PanelWindow
|
||||
|
||||
ShellRoot {
|
||||
Bar {}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
import Quickshell
|
||||
pragma Singleton
|
||||
|
||||
Singleton {
|
||||
property var bgBar: Qt.rgba(0, 0, 0, 0.21)
|
||||
property var bgBlur: Qt.rgba(0, 0, 0, 0.3)
|
||||
property var fg: "white"
|
||||
property list<var> monitorColors: ["#e06c75", "#e5c07b", "#98c379", "#61afef"]
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
pragma Singleton
|
||||
|
||||
import Quickshell
|
||||
import Quickshell.Hyprland
|
||||
import QtQuick
|
||||
|
||||
Singleton {
|
||||
id: hyprland
|
||||
|
||||
property list<HyprlandWorkspace> workspaces: sortWorkspaces(Hyprland.workspaces.values)
|
||||
property HyprlandWorkspace focusedWorkspace: Hyprland.focusedMonitor?.activeWorkspace
|
||||
property int maxWorkspace: findMaxId()
|
||||
|
||||
function sortWorkspaces(ws) {
|
||||
return [...ws].sort((a, b) => a?.id - b?.id);
|
||||
}
|
||||
|
||||
function switchWorkspace(w: int): void {
|
||||
console.log(`workspace: focus ${focusedWorkspace.id} -> ${w}`);
|
||||
Hyprland.dispatch(`workspace ${w}`);
|
||||
}
|
||||
|
||||
function findMaxId(): int {
|
||||
let num = hyprland.workspaces.length;
|
||||
return hyprland.workspaces[num - 1]?.id;
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: Hyprland
|
||||
function onRawEvent(event) {
|
||||
// console.log("EVENT NAME", event.name);
|
||||
// consow.wg("EVENT DATA", event.data);
|
||||
let eventName = event.name;
|
||||
|
||||
switch (eventName) {
|
||||
// Both of these are required in order to detect workspace changes
|
||||
// even when switching monitors.
|
||||
// case "workspacev2":
|
||||
// {
|
||||
// // hyprland.focusedWorkspace = Hyprland.focusedMonitor?.activeWorkspace;
|
||||
// console.log(`workspace: ${hyprland.focusedWorkspace.id}`);
|
||||
// console.log(`num workspaces ${hyprland.workspaces.length}`)
|
||||
// console.log(`num workspaces (real) ${Hyprland.workspaces.values.length}`)
|
||||
// break;
|
||||
// }
|
||||
// case "focusedmonv2":
|
||||
// {
|
||||
// // hyprland.focusedWorkspace = Hyprland.focusedMonitor?.activeWorkspace;
|
||||
// console.log(`workspace: ${hyprland.focusedWorkspace.id}`);
|
||||
// console.log(`num workspaces ${hyprland.workspaces.length}`)
|
||||
// console.log(`num workspaces (real) ${Hyprland.workspaces.values.length}`)
|
||||
// break;
|
||||
// }
|
||||
case "createworkspacev2":
|
||||
{
|
||||
hyprland.workspaces = hyprland.sortWorkspaces(Hyprland.workspaces.values);
|
||||
hyprland.maxWorkspace = findMaxId();
|
||||
}
|
||||
case "destroyworkspacev2":
|
||||
{
|
||||
hyprland.workspaces = hyprland.sortWorkspaces(Hyprland.workspaces.values);
|
||||
hyprland.maxWorkspace = findMaxId();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
pragma Singleton
|
||||
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import QtQuick
|
||||
|
||||
Singleton {
|
||||
property int cpu_percent
|
||||
property string cpu_freq
|
||||
property int mem_percent
|
||||
property string mem_used
|
||||
|
||||
Process {
|
||||
id: process_cpu_percent
|
||||
running: true
|
||||
command: ["sh", "-c", "top -bn1 | rg '%Cpu' | awk '{print 100-$8}'"]
|
||||
stdout: SplitParser {
|
||||
onRead: data => cpu_percent = Math.round(data)
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: process_cpu_freq
|
||||
running: true
|
||||
command: ["sh", "-c", "lscpu --parse=MHZ"]
|
||||
stdout: SplitParser {
|
||||
onRead: data => {
|
||||
// delete the first 4 lines (comments)
|
||||
const mhz = data.split("\n").slice(4);
|
||||
// compute mean frequency
|
||||
const freq = mhz.reduce((acc, e) => acc + Number(e), 0) / mhz.length;
|
||||
|
||||
cpu_freq = Math.round(freq) + " MHz";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: process_mem_percent
|
||||
running: true
|
||||
command: ["sh", "-c", "free | awk 'NR==2{print $3/$2*100}'"]
|
||||
stdout: SplitParser {
|
||||
onRead: data => mem_percent = Math.round(data)
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: process_mem_used
|
||||
running: true
|
||||
command: ["sh", "-c", "free --si -h | awk 'NR==2{print $3}'"]
|
||||
stdout: SplitParser {
|
||||
onRead: data => mem_used = data
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
interval: 2000
|
||||
running: true
|
||||
repeat: true
|
||||
onTriggered: () => {
|
||||
process_cpu_percent.running = true
|
||||
process_cpu_freq.running = true
|
||||
process_mem_percent.running = true
|
||||
process_mem_used.running = true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
pragma Singleton
|
||||
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import QtQuick
|
||||
|
||||
Singleton {
|
||||
property var locale: Qt.locale()
|
||||
|
||||
function createDate(): string {
|
||||
let date = new Date();
|
||||
let hh = date.getHours().toString().padStart(2, 0);
|
||||
let mm = date.getMinutes().toString().padStart(2, 0)
|
||||
let weekday = locale.dayName(date.getDay(), Locale.ShortFormat)
|
||||
let month = locale.monthName(date.getMonth(), Locale.ShortFormat)
|
||||
let day = date.getDate()
|
||||
|
||||
return `${weekday} ${month} ${day} ${hh}:${mm}`
|
||||
}
|
||||
|
||||
property var time: createDate()
|
||||
|
||||
Timer {
|
||||
interval: 1000
|
||||
running: true
|
||||
repeat: true
|
||||
onTriggered: time = createDate()
|
||||
}
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
//@ pragma NativeTextRendering
|
||||
|
||||
import Quickshell
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import "../utils"
|
||||
import "../components/bar"
|
||||
import "../components/bar/workspaces"
|
||||
|
||||
Scope {
|
||||
PanelWindow {
|
||||
id: barWindow
|
||||
screen: Quickshell.screens[0]
|
||||
|
||||
anchors {
|
||||
top: true
|
||||
left: true
|
||||
right: true
|
||||
}
|
||||
height: 32
|
||||
|
||||
color: "transparent"
|
||||
|
||||
Rectangle {
|
||||
id: bar
|
||||
anchors.fill: parent
|
||||
|
||||
color: Colors.bgBlur
|
||||
|
||||
// left
|
||||
// RowLayout {
|
||||
// id: barLeft
|
||||
//
|
||||
// anchors.bottom: parent.bottom
|
||||
// anchors.left: parent.left
|
||||
// anchors.top: parent.top
|
||||
//
|
||||
// anchors.leftMargin: height / 4
|
||||
// anchors.rightMargin: height / 4
|
||||
// spacing: height / 4
|
||||
//
|
||||
// Workspaces {}
|
||||
// }
|
||||
|
||||
// middle
|
||||
RowLayout {
|
||||
id: barMiddle
|
||||
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.top: parent.top
|
||||
|
||||
anchors.leftMargin: height / 4
|
||||
anchors.rightMargin: height / 4
|
||||
spacing: height / 4
|
||||
|
||||
Mpris {}
|
||||
}
|
||||
|
||||
// right
|
||||
RowLayout {
|
||||
id: barRight
|
||||
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
|
||||
anchors.leftMargin: height / 4
|
||||
anchors.rightMargin: height / 4
|
||||
spacing: height / 4
|
||||
|
||||
Tray {}
|
||||
Resources {}
|
||||
Battery {}
|
||||
Clock {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
default = false;
|
||||
optionName = "quickshell";
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"quickshell"
|
||||
];
|
||||
config' = {
|
||||
my.home = {
|
||||
home.packages = [ pkgs.quickshell ];
|
||||
home.sessionVariables.QML2_IMPORT_PATH = lib.concatStringsSep ":" [
|
||||
"${pkgs.quickshell}/lib/qt-6/qml"
|
||||
"${pkgs.kdePackages.qtdeclarative}/lib/qt-6/qml"
|
||||
"${pkgs.kdePackages.kirigami.unwrapped}/lib/qt-6/qml"
|
||||
];
|
||||
xdg.configFile."quickshell" = {
|
||||
source = ./config;
|
||||
recursive = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -64,6 +64,15 @@ lib.my.makeSwitch {
|
||||
];
|
||||
platformTheme.name = "qtct";
|
||||
};
|
||||
|
||||
xdg.configFile = {
|
||||
"qt5ct/qt5ct.conf".source = pkgs.replaceVars ./qtct/qt5ct.conf {
|
||||
darker = pkgs.libsForQt5.qt5ct + /share/qt5ct/colors/darker.conf;
|
||||
};
|
||||
"qt6ct/qt6ct.conf".source = pkgs.replaceVars ./qtct/qt6ct.conf {
|
||||
darker = pkgs.qt6ct + /share/qt6ct/colors/darker.conf;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
32
modules/desktop/style/qtct/qt5ct.conf
Normal file
32
modules/desktop/style/qtct/qt5ct.conf
Normal file
@@ -0,0 +1,32 @@
|
||||
[Appearance]
|
||||
color_scheme_path=@darker@
|
||||
custom_palette=true
|
||||
icon_theme=Papirus-Dark
|
||||
standard_dialogs=xdgdesktopportal
|
||||
style=Darkly
|
||||
|
||||
[Fonts]
|
||||
fixed="Noto Sans CJK SC,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
|
||||
general="Noto Sans CJK SC,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
|
||||
|
||||
[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\x3\t\0\0\x4\x1b\0\0\0\0\0\0\0\0\0\0\x3\t\0\0\x4\x1b\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0\x3\t\0\0\x4\x1b)
|
||||
|
||||
[Troubleshooting]
|
||||
force_raster_widgets=1
|
||||
ignored_applications=@Invalid()
|
||||
32
modules/desktop/style/qtct/qt6ct.conf
Normal file
32
modules/desktop/style/qtct/qt6ct.conf
Normal file
@@ -0,0 +1,32 @@
|
||||
[Appearance]
|
||||
color_scheme_path=@darker@
|
||||
custom_palette=true
|
||||
icon_theme=Papirus-Dark
|
||||
standard_dialogs=xdgdesktopportal
|
||||
style=Darkly
|
||||
|
||||
[Fonts]
|
||||
fixed="Noto Sans CJK SC,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
|
||||
general="Noto Sans CJK SC,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
|
||||
|
||||
[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\x3\t\0\0\x4\x1b\0\0\0\0\0\0\0\0\0\0\x3\t\0\0\x4\x1b\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\0\0\x3\t\0\0\x4\x1b)
|
||||
|
||||
[Troubleshooting]
|
||||
force_raster_widgets=1
|
||||
ignored_applications=@Invalid()
|
||||
@@ -10,7 +10,7 @@
|
||||
input = {
|
||||
focus-follows-mouse = {
|
||||
enable = true;
|
||||
max-scroll-amount = "40%";
|
||||
max-scroll-amount = "0%";
|
||||
};
|
||||
workspace-auto-back-and-forth = true;
|
||||
};
|
||||
@@ -151,17 +151,19 @@
|
||||
"XF86AudioRaiseVolume" = {
|
||||
allow-when-locked = true;
|
||||
action.spawn = [
|
||||
"pamixer"
|
||||
"-i"
|
||||
"2"
|
||||
"wpctl"
|
||||
"set-volume"
|
||||
"@DEFAULT_SINK@"
|
||||
"2%+"
|
||||
];
|
||||
};
|
||||
"XF86AudioLowerVolume" = {
|
||||
allow-when-locked = true;
|
||||
action.spawn = [
|
||||
"pamixer"
|
||||
"-d"
|
||||
"2"
|
||||
"wpctl"
|
||||
"set-volume"
|
||||
"@DEFAULT_SINK@"
|
||||
"2%-"
|
||||
];
|
||||
};
|
||||
"XF86AudioMute" = {
|
||||
|
||||
@@ -19,8 +19,8 @@ _: {
|
||||
modules-right = [
|
||||
"custom/notification"
|
||||
"tray"
|
||||
"pulseaudio"
|
||||
"pulseaudio#microphone"
|
||||
"wireplumber"
|
||||
"wireplumber#source"
|
||||
];
|
||||
|
||||
"niri/workspaces" = {
|
||||
@@ -73,7 +73,6 @@ _: {
|
||||
stopped = "";
|
||||
};
|
||||
tooltip = false;
|
||||
toottip-format = "{status_icon} Musicfox {artist} - {album} - {title}";
|
||||
on-scroll-up = "playerctl -p musicfox volume 0.05+";
|
||||
on-scroll-down = "playerctl -p musicfox volume 0.05-";
|
||||
};
|
||||
@@ -81,37 +80,21 @@ _: {
|
||||
format = " {:%H:%M %m.%d}";
|
||||
tooltip = false;
|
||||
};
|
||||
pulseaudio = {
|
||||
format = "{icon} {volume}%";
|
||||
wireplumber = {
|
||||
format = " {volume}%";
|
||||
tooltip = false;
|
||||
format-muted = " Muted";
|
||||
on-click = "pamixer -t";
|
||||
on-click-middle = "pavucontrol & disown";
|
||||
on-scroll-up = "pamixer -i 5";
|
||||
on-scroll-down = "pamixer -d 5";
|
||||
on-click = "wpctl set-mute @DEFAULT_SINK@ toggle";
|
||||
on-click-middle = "pwvucontrol";
|
||||
scroll-step = 5;
|
||||
format-icons = {
|
||||
headphone = "";
|
||||
hands-free = "";
|
||||
headset = "";
|
||||
phone = "";
|
||||
portable = "";
|
||||
car = "";
|
||||
default = [
|
||||
""
|
||||
""
|
||||
""
|
||||
];
|
||||
};
|
||||
};
|
||||
"pulseaudio#microphone" = {
|
||||
format = "{format_source}";
|
||||
"wireplumber#source" = {
|
||||
node-type = "Audio/Source";
|
||||
format = " {volume}%";
|
||||
tooltip = false;
|
||||
format-source = " {volume}%";
|
||||
format-source-muted = " Muted";
|
||||
on-click = "pamixer --default-source -t";
|
||||
on-scroll-up = "pamixer --default-source -i 5";
|
||||
on-scroll-down = "pamixer --default-source -d 5";
|
||||
format-muted = " Muted";
|
||||
on-click = "wpctl set-mute @DEFAULT_SOURCE@ toggle";
|
||||
on-click-middle = "pwvucontrol";
|
||||
scroll-step = 5;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ tooltip * {
|
||||
#window,
|
||||
#clock,
|
||||
#battery,
|
||||
#pulseaudio,
|
||||
#wireplumber,
|
||||
#network,
|
||||
#workspaces,
|
||||
#taskbar,
|
||||
@@ -219,13 +219,13 @@ window#waybar.empty #window {
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
#wireplumber {
|
||||
color: #89b4fa;
|
||||
border-right: 0px;
|
||||
border-radius: 10px 0px 0px 10px;
|
||||
}
|
||||
|
||||
#pulseaudio.microphone {
|
||||
#wireplumber.source {
|
||||
color: #cba6f7;
|
||||
margin-right: 5px;
|
||||
border-left: 0px;
|
||||
@@ -238,10 +238,3 @@ window#waybar.empty #window {
|
||||
margin-right: 10px;
|
||||
border-left: 0px;
|
||||
}
|
||||
|
||||
#custom-weather {
|
||||
border-radius: 0px 10px 10px 0px;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
@@ -11,16 +11,15 @@ let
|
||||
cfg = config.my.autologin;
|
||||
gettycfg = config.services.getty;
|
||||
|
||||
baseArgs =
|
||||
[
|
||||
"--login-program"
|
||||
"${gettycfg.loginProgram}"
|
||||
]
|
||||
++ optionals (gettycfg.loginOptions != null) [
|
||||
"--login-options"
|
||||
gettycfg.loginOptions
|
||||
]
|
||||
++ gettycfg.extraArgs;
|
||||
baseArgs = [
|
||||
"--login-program"
|
||||
"${gettycfg.loginProgram}"
|
||||
]
|
||||
++ optionals (gettycfg.loginOptions != null) [
|
||||
"--login-options"
|
||||
gettycfg.loginOptions
|
||||
]
|
||||
++ gettycfg.extraArgs;
|
||||
|
||||
gettyCmd = args: "@${pkgs.util-linux}/sbin/agetty agetty ${escapeShellArgs baseArgs} ${args}";
|
||||
|
||||
|
||||
@@ -102,6 +102,27 @@ lib.my.makeSwitch {
|
||||
ignoreUserConfig = true;
|
||||
};
|
||||
};
|
||||
nixpkgs.overlays = [
|
||||
(
|
||||
final: prev:
|
||||
lib.infuse prev (
|
||||
lib.mergeAttrsList (
|
||||
map
|
||||
(pkg: {
|
||||
${pkg}.__output.preInstall.__append = ''
|
||||
gappsWrapperArgs+=(
|
||||
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--wayland-text-input-version=3}}"
|
||||
)
|
||||
'';
|
||||
})
|
||||
[
|
||||
"qq"
|
||||
"vscodium"
|
||||
]
|
||||
)
|
||||
)
|
||||
)
|
||||
];
|
||||
my.home.programs.niri.settings = {
|
||||
binds."Mod+Space".action.spawn = [
|
||||
"fcitx5-remote"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
secrets,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
@@ -48,6 +49,14 @@ lib.my.makeSwitch {
|
||||
];
|
||||
};
|
||||
|
||||
sops.secrets.nix-github-token = {
|
||||
sopsFile = secrets.nix-github-token;
|
||||
format = "binary";
|
||||
};
|
||||
nix.extraOptions = ''
|
||||
!include ${config.sops.secrets.nix-github-token.path}
|
||||
'';
|
||||
|
||||
# uncomment to enable auto gc
|
||||
/*
|
||||
nix.gc = {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
pkgs,
|
||||
username,
|
||||
userdesc,
|
||||
sopsRoot,
|
||||
secrets,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
@@ -16,7 +16,7 @@ lib.my.makeSwitch {
|
||||
programs.zsh.enable = true;
|
||||
|
||||
sops.secrets.imxyy-nix-hashed-password = {
|
||||
sopsFile = sopsRoot + /imxyy-nix-hashed-password.txt;
|
||||
sopsFile = secrets.imxyy-nix-hashed-password;
|
||||
format = "binary";
|
||||
neededForUsers = true;
|
||||
};
|
||||
|
||||
@@ -220,10 +220,13 @@ in
|
||||
(lib.mkIf cfg.enable {
|
||||
virtualisation.libvirtd = {
|
||||
enable = true;
|
||||
qemu.verbatimConfig = ''
|
||||
dynamic_ownership = 0
|
||||
remember_owner = 0
|
||||
'';
|
||||
qemu = {
|
||||
package = pkgs.qemu_kvm;
|
||||
verbatimConfig = ''
|
||||
dynamic_ownership = 0
|
||||
remember_owner = 0
|
||||
'';
|
||||
};
|
||||
};
|
||||
programs.virt-manager.enable = true;
|
||||
users.users.${username}.extraGroups = [ "libvirtd" ];
|
||||
|
||||
@@ -53,10 +53,6 @@ in
|
||||
"file://${homedir}/Videos 视频"
|
||||
"file://${homedir}/Music 音乐"
|
||||
"file://${homedir}/workspace 工作空间"
|
||||
"file://${homedir}/Documents/%E7%8F%AD%E7%BA%A7%E4%BA%8B%E5%8A%A1 班级事务"
|
||||
"file://${homedir}/NAS NAS"
|
||||
"file://${homedir}/NAS/imxyy_soope_ NAS imxyy_soope_"
|
||||
"file://${homedir}/NAS/imxyy_soope_/OS NAS OS"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
@@ -22,11 +22,6 @@
|
||||
cage.__output.patches.__append = [ ./cage-specify-output-name.patch ];
|
||||
matrix-synapse.__assign = final.stable.matrix-synapse;
|
||||
bottles.__input.removeWarningPopup.__assign = true;
|
||||
qq.__output.preInstall.__append = ''
|
||||
gappsWrapperArgs+=(
|
||||
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--wayland-text-input-version=3}}"
|
||||
)
|
||||
'';
|
||||
|
||||
sing-box.__assign = prev.sing-box.overrideAttrs (finalAttrs: {
|
||||
version = "1.11.14";
|
||||
|
||||
27
secrets/nix-github-token.conf
Normal file
27
secrets/nix-github-token.conf
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"data": "ENC[AES256_GCM,data:qSfqMFxikz62vn1V+RxswNkkwqyQQriu1uwtMp/D94MKc4eLL+nbXbL7y5KzR1/DndMQMfrqmJdLpyPEUHkJT5r5jzW/nWVr38blvw1aqyU7TZFOiE+hKnQOJmjY+3Aq4Hgs4pDNNWUdHlphkf1vhMNJ2feZyjPlbw==,iv:ANO9NAKltzSS1EpM8om+7fjOdLMkdw3oYqeGpis+vgE=,tag:JI6RHeNDQINLKUSijEyxbw==,type:str]",
|
||||
"sops": {
|
||||
"age": [
|
||||
{
|
||||
"recipient": "age1jf5pg2x6ta8amj40xdy0stvcvrdlkwc2nrwtmkpymu0qclk0eg5qmm9kns",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJY2J3dEJpTnhhVHcwY2tR\nSUttdW9vVCtnVDlPSjY1RmgyaVBLU0haV0FFCkR4Z0lIT3pEclZwc0FvNnozNzVa\nY05SaHZYeXJsUmhLYWxLN2JFRzllWGMKLS0tIHdqK3Zwb2FtY3lPVUc3TUloMXpk\nWlpyWFpLZnRNVnRZeHVCTmcxd1dob1kKe8GkgjHfA7i0N+Uurf4blkoAKrIgqKFK\n3Oore9s6WepbA81eA+xAuozQGLbCISufcmePKa7S1UWTYdsWTW1Tfg==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1hpgg6psejh4y6jcdd34wxuml75fnweqpe0kh8376yqsctsfn9qxs037kk6",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiNUxEWDJTUys1RnVrTW9x\nWDBQVitHV0tUSFdJTGZNUGVseHdOWFJ2NHcwCkxlT2xXUDZRUk5pUWNJdU9GUS9H\nNEtzdlVsckdscWZiQUZYL0RwWFd4SUUKLS0tIEF1NjZZNVVDdTc1ckpBRHNaSlQ2\nc1o4ZnFaWkpZL1d0MUtaWExTTWh5RjAKcR5TAybOqaYZBBZpm2OUcS919x1SBvuw\nH/1bgJTRLzzLeSgMRz0Uq/Gf4UPhcs25Um/Y6l4l5bNuqKNGhZEyzA==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1r0fv0tagxupfacv0aaxk5ss7sqvswv6kq8tk3x46ndqrj6f5afvqegahxq",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwUmJodXN4THBraGpsVytO\nTkpWNHpmTm1NVnFiand4aGdnKzdELzY4emhBCldZRVdWSHBmZ2hDZ2F3bWR6eVBs\ncUF2eEg1alpYaE5sOGN6SU1jOC8zU00KLS0tIE5FeG5MTW80dG5NSkc0Qzl4WElE\nSmFHcmFwcHNsN0hjOGJJNjhMK3pyL3cKZ9NscSDpi7gaRDPIZweq70YwHEp73Z3Q\nUby/vj/LUl3ellAKFWiMibuZ3TjdfZrjGfhxN1Hq4eN4zd3n5UbLnw==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1tp7th3rrv3x0l6jl76n0hjqjp223w2y586pkgr0hcjwdm254jd5shkj6a8",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3WUNZZGQrY05SUDJ5ZUdM\nRnc0MUc3SW5pK1JkTW1HT1oraDJhV0pvNlhRCmdwNHpLSzFYaUVtR2U2dzREa3h4\nWGVpbElES2dKalk0aGZSY3VBKzFNRW8KLS0tIFU0RmVuUWZsU2w2eUJ0QTYvTU5U\nTEFBdElDYnRaWDdkUE5HVUJ4Yy9nczAKAClAVe5wDhv3Ibt9auzTW1Jd8lej59uh\nSIC9MicNIm8Vkbc8MflGW07wkFWZE84KXw2eoP0e0vdHSWxP99hchg==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
}
|
||||
],
|
||||
"lastmodified": "2025-07-22T09:31:55Z",
|
||||
"mac": "ENC[AES256_GCM,data:fm3hg9bCZP71zLnOYCRofWAB2ohIVIW+2M5QgzkmaO7pnnXHtsnCXrtOiNn5nM/p9Sx29o9reL3iAzMiD5gWT2crnSVu5dWglbpp1HGHnGCycxmCRcQcXuUWWAHNl0+HGBMOW9Bh8gxug9Hhs0eRPYhAMoqFCyiCtlpJT/dROHQ=,iv:2cSLRaa1MKlZvHaXt9Mz5houkBVHaehlxiqbSN4nhNE=,tag:Vhi9ObK6uYA9Dh68+gMe8A==,type:str]",
|
||||
"unencrypted_suffix": "_unencrypted",
|
||||
"version": "3.10.2"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user