Compare commits

..

16 commits

43 changed files with 868 additions and 349 deletions

157
flake.lock generated
View file

@ -47,11 +47,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1770681688, "lastModified": 1774983731,
"narHash": "sha256-bGVEgZMxmw9N+IKp5nG+2nyKFezdPWYDxyxXkYW+d2M=", "narHash": "sha256-ZJGManY8rA/7+AZIxiW0CEMW9x8megcoh1xZ/oXq/aY=",
"owner": "9001", "owner": "9001",
"repo": "copyparty", "repo": "copyparty",
"rev": "e5d0a0572da507acfe774e0f86ad541f5daab97f", "rev": "198f631ac80adc33a8f072d598ff0cd1aa2b5abd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -109,11 +109,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1769524058, "lastModified": 1773889306,
"narHash": "sha256-zygdD6X1PcVNR2PsyK4ptzrVEiAdbMqLos7utrMDEWE=", "narHash": "sha256-PAqwnsBSI9SVC2QugvQ3xeYCB0otOwCacB1ueQj2tgw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "71a3fc97d80881e91710fe721f1158d3b96ae14d", "rev": "5ad85c82cc52264f4beddc934ba57f3789f28347",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -182,11 +182,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1769939035, "lastModified": 1774959120,
"narHash": "sha256-Fok2AmefgVA0+eprw2NDwqKkPGEI5wvR+twiZagBvrg=", "narHash": "sha256-Pzk6UbueeWy9WFiDY6iA1aHid+2AMzkS6gg2x2cSkz4=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "a8ca480175326551d6c4121498316261cbb5b260", "rev": "c06f90f1eb6569bdaf6a4a10cb7e66db4454ac2a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -217,6 +217,26 @@
"type": "github" "type": "github"
} }
}, },
"helix-ext": {
"inputs": {
"nixpkgs": "nixpkgs_2",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1774804218,
"narHash": "sha256-5h6eicp0+qzgiDrWc0mlTiX+jvcx8d54Fp922uQ2p0k=",
"owner": "mattwparas",
"repo": "helix",
"rev": "912d8d8b97da21de9b44b4e24a476e193e7cc44d",
"type": "github"
},
"original": {
"owner": "mattwparas",
"ref": "steel-event-system",
"repo": "helix",
"type": "github"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -245,11 +265,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1770654520, "lastModified": 1775047159,
"narHash": "sha256-mg5WZMIPGsFu9MxSrUcuJUPMbfMsF77el5yb/7rc10k=", "narHash": "sha256-UWM4VZvfKaPwA9FMu7iZha5YAE8vsEtUazk+rFxmbTY=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "6c4fdbe1ad198fac36c320fd45c5957324a80b8e", "rev": "1ce9e62690dfdd7e76bd266ccb9a887778410eb2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -267,11 +287,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1769872935, "lastModified": 1774991950,
"narHash": "sha256-07HMIGQ/WJeAQJooA7Kkg1SDKxhAiV6eodvOwTX6WKI=", "narHash": "sha256-kScKj3qJDIWuN9/6PMmgy5esrTUkYinrO5VvILik/zw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "f4ad5068ee8e89e4a7c2e963e10dd35cd77b37b7", "rev": "f2d3e04e278422c7379e067e323734f3e8c585a7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -285,14 +305,14 @@
"blobs": "blobs", "blobs": "blobs",
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_2",
"git-hooks": "git-hooks", "git-hooks": "git-hooks",
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_3"
}, },
"locked": { "locked": {
"lastModified": 1770659507, "lastModified": 1774999302,
"narHash": "sha256-RVZno9CypFN3eHxfULKN1K7mb/Cq0HkznnWqnshxpWY=", "narHash": "sha256-KJfDmGLMVO8Hr4TrTwOAQpOykLLOSgk9dxkaf2dHzFU=",
"owner": "simple-nixos-mailserver", "owner": "simple-nixos-mailserver",
"repo": "nixos-mailserver", "repo": "nixos-mailserver",
"rev": "781e833633ebc0873d251772a74e4400a73f5d78", "rev": "493f0ff8a7571cc4ddd190babfa447489f41c752",
"type": "gitlab" "type": "gitlab"
}, },
"original": { "original": {
@ -301,22 +321,6 @@
"type": "gitlab" "type": "gitlab"
} }
}, },
"mozilla": {
"locked": {
"lastModified": 1750265908,
"narHash": "sha256-ZGo9BPm0L6kkuke6Bp5rb1XwF5Qv3/+a3mowsr0fcU4=",
"owner": "andersk",
"repo": "nixpkgs-mozilla",
"rev": "174a36cd95c9bed0dcbcc8a51f16d0cc8be490f3",
"type": "github"
},
"original": {
"owner": "andersk",
"ref": "channel",
"repo": "nixpkgs-mozilla",
"type": "github"
}
},
"nix-flatpak": { "nix-flatpak": {
"locked": { "locked": {
"lastModified": 1767983141, "lastModified": 1767983141,
@ -335,11 +339,11 @@
}, },
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1770631810, "lastModified": 1774933469,
"narHash": "sha256-b7iK/x+zOXbjhRqa+XBlYla4zFvPZyU5Ln2HJkiSnzc=", "narHash": "sha256-OrnCQeUO2bqaWUl0lkDWyGWjKsOhtCyd7JSfTedQNUE=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "2889685785848de940375bf7fea5e7c5a3c8d502", "rev": "f4c4c2c0c923d7811ac2a63ccc154767e4195337",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -383,11 +387,11 @@
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1770562336, "lastModified": 1774709303,
"narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", "narHash": "sha256-D3Q07BbIA2KnTcSXIqqu9P586uWxN74zNoCH3h2ESHg=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "d6c71932130818840fc8fe9509cf50be8c64634f", "rev": "8110df5ad7abf5d4c0f6fb0f8f978390e77f9685",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -399,11 +403,27 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1770650459, "lastModified": 1770841267,
"narHash": "sha256-hGeOnueXorzwDD1V9ldZr+y+zad4SNyqMnQsa/mIlvI=", "narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1774935083,
"narHash": "sha256-Mh6bLcYAcENBAZk3RoMPMFCGGMZmfaGMERE4siZOgP4=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "fff0554c67696d76a0cdd9cfe14403fbdbf1f378", "rev": "2f4fd5e1abf9bac8c1d22750c701a7a5e6b524c6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -413,13 +433,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_3": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1770562336, "lastModified": 1774709303,
"narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", "narHash": "sha256-D3Q07BbIA2KnTcSXIqqu9P586uWxN74zNoCH3h2ESHg=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "d6c71932130818840fc8fe9509cf50be8c64634f", "rev": "8110df5ad7abf5d4c0f6fb0f8f978390e77f9685",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -429,13 +449,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_4": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1769461804, "lastModified": 1774709303,
"narHash": "sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI=", "narHash": "sha256-D3Q07BbIA2KnTcSXIqqu9P586uWxN74zNoCH3h2ESHg=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "bfc1b8a4574108ceef22f02bafcf6611380c100d", "rev": "8110df5ad7abf5d4c0f6fb0f8f978390e77f9685",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -467,18 +487,39 @@
"copyparty": "copyparty", "copyparty": "copyparty",
"deploy-rs": "deploy-rs", "deploy-rs": "deploy-rs",
"disko": "disko", "disko": "disko",
"helix-ext": "helix-ext",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"mailserver": "mailserver", "mailserver": "mailserver",
"mozilla": "mozilla",
"nix-flatpak": "nix-flatpak", "nix-flatpak": "nix-flatpak",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs_4",
"nixpkgs-stable": "nixpkgs-stable", "nixpkgs-stable": "nixpkgs-stable",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"pin-factorio": "pin-factorio", "pin-factorio": "pin-factorio",
"zen-browser": "zen-browser" "zen-browser": "zen-browser"
} }
}, },
"rust-overlay": {
"inputs": {
"nixpkgs": [
"helix-ext",
"nixpkgs"
]
},
"locked": {
"lastModified": 1770952264,
"narHash": "sha256-CjymNrJZWBtpavyuTkfPVPaZkwzIzGaf0E/3WgcwM14=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "ec6a3d5cdf14bb5a1dd03652bd3f6351004d2188",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"systems": { "systems": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
@ -530,14 +571,14 @@
"zen-browser": { "zen-browser": {
"inputs": { "inputs": {
"home-manager": "home-manager_3", "home-manager": "home-manager_3",
"nixpkgs": "nixpkgs_4" "nixpkgs": "nixpkgs_5"
}, },
"locked": { "locked": {
"lastModified": 1770707140, "lastModified": 1775021133,
"narHash": "sha256-3ZRA2+o5p1+FKWx988WbwB1SQ2Mz5aL95zxhL5iD+O0=", "narHash": "sha256-JB0u0evfSlmNg9HdGDxtXjaCcdKUpFPdSAMGxvJo5Pw=",
"owner": "0xc000022070", "owner": "0xc000022070",
"repo": "zen-browser-flake", "repo": "zen-browser-flake",
"rev": "db14437f8667f7f09784e2a4e73c105bdc1c7023", "rev": "4bf1a6837064486c4f573a9d500c4cf3c1c075c0",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -14,7 +14,8 @@
nixos-hardware.url = "github:NixOS/nixos-hardware/master"; nixos-hardware.url = "github:NixOS/nixos-hardware/master";
nix-flatpak.url = "github:gmodena/nix-flatpak/latest"; nix-flatpak.url = "github:gmodena/nix-flatpak/latest";
zen-browser.url = "github:0xc000022070/zen-browser-flake"; zen-browser.url = "github:0xc000022070/zen-browser-flake";
mozilla.url = "github:andersk/nixpkgs-mozilla/channel"; # mozilla.url = "github:andersk/nixpkgs-mozilla/channel";
helix-ext.url = "github:mattwparas/helix/steel-event-system";
mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver"; mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver";
@ -40,7 +41,7 @@
pin-factorio.url = "github:NixOS/nixpkgs?rev=c5ae371f1a6a7fd27823bc500d9390b38c05fa55"; pin-factorio.url = "github:NixOS/nixpkgs?rev=c5ae371f1a6a7fd27823bc500d9390b38c05fa55";
}; };
outputs = { self, nixpkgs, mailserver, copyparty, deploy-rs, ... }@inputs: { outputs = { self, nixpkgs, deploy-rs, ... }@inputs: {
nixosConfigurations = { nixosConfigurations = {
# Framework Computer # Framework Computer
piaf = nixpkgs.lib.nixosSystem { piaf = nixpkgs.lib.nixosSystem {
@ -53,11 +54,7 @@
zora = nixpkgs.lib.nixosSystem { zora = nixpkgs.lib.nixosSystem {
system = "x86_64-linux"; system = "x86_64-linux";
specialArgs = inputs; specialArgs = inputs;
modules = [ modules = [ ./hosts/zora ];
./hosts/zora
mailserver.nixosModules.default
copyparty.nixosModules.default
];
}; };
# Desktop ISO # Desktop ISO

View file

@ -2,7 +2,7 @@
{ {
# Kernel # Kernel
boot.kernelPackages = pkgs.linuxPackages_6_18; boot.kernelPackages = pkgs.linuxPackages_6_19;
# Boot # Boot
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
@ -74,12 +74,12 @@
# Tweaking failing packages # Tweaking failing packages
nixpkgs.overlays = [ (final: prev: { nixpkgs.overlays = [ (final: prev: {
dfu-programmer = prev.dfu-programmer.overrideAttrs (_: { env.NIX_CFLAGS_COMPILE = "-std=gnu17"; }); # dfu-programmer = final.dfu-programmer.overrideAttrs (_: { env.NIX_CFLAGS_COMPILE = "-std=gnu17"; });
# upower = prev.upower.overrideAttrs (_: { doCheck = false; }); # upower = final.upower.overrideAttrs (_: { doCheck = false; });
# gxml = prev.gxml.overrideAttrs (_: { doCheck = false; }); # gxml = final.gxml.overrideAttrs (_: { doCheck = false; });
# # orc = prev.orc.overrideAttrs (_: { doCheck = false; }); # # orc = final.orc.overrideAttrs (_: { doCheck = false; });
# # gsl = prev.gsl.overrideAttrs (_: { doCheck = false; }); # # gsl = final.gsl.overrideAttrs (_: { doCheck = false; });
# fprintd = prev.fprintd.overrideAttrs (super: { # fprintd = final.fprintd.overrideAttrs (super: {
# # doCheck = false; # # doCheck = false;
# # buildInputs = super.buildInputs or [ ] ++ (with pkgs; [ libpam-wrapper (pkgs.python3.withPackages (python-pkgs: [ python-pkgs.pycairo python-pkgs.dbus-python python-pkgs.python-dbusmock ])) ]); # # buildInputs = super.buildInputs or [ ] ++ (with pkgs; [ libpam-wrapper (pkgs.python3.withPackages (python-pkgs: [ python-pkgs.pycairo python-pkgs.dbus-python python-pkgs.python-dbusmock ])) ]);
# mesonCheckFlags = [ # mesonCheckFlags = [
@ -87,7 +87,7 @@
# "--no-suite" "fprintd" # "--no-suite" "fprintd"
# ]; # ];
# }); # });
# libsrtp = prev.libsrtp.overrideAttrs (_: { # libsrtp = final.libsrtp.overrideAttrs (_: {
# mesonFlags = [ # mesonFlags = [
# "-Dcrypto-library=openssl" # "-Dcrypto-library=openssl"
# "-Dcrypto-library-kdf=disabled" # "-Dcrypto-library-kdf=disabled"
@ -95,8 +95,8 @@
# "-Dtests=disabled" # "-Dtests=disabled"
# ]; # ];
# }); # });
# # # haskellPackages.crypton = pkgs.haskell.lib.overrideCabal prev.crypton (_: { doCheck = false; }); # # # haskellPackages.crypton = pkgs.haskell.lib.overrideCabal final.crypton (_: { doCheck = false; });
# # # haskellPackages.cryptonite = pkgs.haskell.lib.overrideCabal prev.cryptonite (_: { doCheck = false; }); # # # haskellPackages.cryptonite = pkgs.haskell.lib.overrideCabal final.cryptonite (_: { doCheck = false; });
}) ]; }) ];
# nixpkgs.config.packageOverrides = pkgs: { # nixpkgs.config.packageOverrides = pkgs: {

View file

@ -13,7 +13,6 @@
./users.nix ./users.nix
../../users/lyes ../../users/lyes
../../users/lyes/server
../../modules ../../modules
../../modules/server ../../modules/server
@ -21,12 +20,14 @@
../../modules/server/baba ../../modules/server/baba
../../modules/server/biggoron ../../modules/server/biggoron
../../modules/server/biggoron/runner.nix ../../modules/server/biggoron/runner.nix
../../modules/server/facteur
../../modules/server/giovanni ../../modules/server/giovanni
../../modules/server/kalif ../../modules/server/kalif
../../modules/server/lanayru ../../modules/server/lanayru
../../modules/server/link ../../modules/server/link
../../modules/server/maistro ../../modules/server/maistro
../../modules/server/mikau ../../modules/server/mikau
../../modules/server/midona
../../modules/server/nayru ../../modules/server/nayru
../../modules/server/taf ../../modules/server/taf
../../modules/server/tetra ../../modules/server/tetra

View file

@ -113,6 +113,8 @@
type filter hook input priority 0; policy drop; type filter hook input priority 0; policy drop;
iifname lo accept iifname lo accept
iifname incusbr0 accept
iifname podman* accept
tcp dport 22 accept tcp dport 22 accept

View file

@ -3,7 +3,7 @@
{ {
security.acme = { security.acme = {
acceptTerms = true; acceptTerms = true;
defaults.email = "root.security@lyes.eu"; defaults.email = "security@lyes.eu";
}; };
services.nginx = { services.nginx = {
@ -12,28 +12,44 @@
recommendedTlsSettings = true; recommendedTlsSettings = true;
virtualHosts = { virtualHosts = {
"lyes.eu" = { "minish.link" = {
serverAliases = [
"www.minish.link"
"minish.fr"
"www.minish.fr"
];
default = true; default = true;
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
locations."/" = {
root = "/var/data/www/minish.link/";
};
extraConfig = ''
error_page 404 /404.html;
'';
};
"lyes.eu" = {
serverAliases = [ "www.lyes.eu" ];
forceSSL = true;
enableACME = true;
locations."/" = { locations."/" = {
root = "/var/data/www/lyes.eu/"; root = "/var/data/www/lyes.eu/";
}; };
# extraConfig = '' extraConfig = ''
# allow 82.67.15.247; error_page 404 /404.html;
# deny all; '';
# '';
}; };
# 44300 # 44300
"auth.lyes.eu" = { "auth.minish.link" = {
serverAliases = [ "auth.lyes.eu" ];
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
locations."/" = { locations."/" = {
proxyPass = "https://${config.services.kanidm.serverSettings.bindaddress}"; proxyPass = "https://${config.services.kanidm.server.settings.bindaddress}";
}; };
}; };
# 44301 # 44301
"vault.lyes.eu" = { "vault.minish.link" = {
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
locations."/" = { locations."/" = {
@ -42,7 +58,7 @@
}; };
}; };
# 44302 # 44302
"manga.lyes.eu" = { "manga.minish.link" = {
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
locations."/" = { locations."/" = {
@ -51,13 +67,13 @@
}; };
}; };
# 44312 # 44312
"dl.manga.lyes.eu" = { "dl.manga.minish.link" = {
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
locations."/".proxyPass = "http://${config.networking.vpn-netns.vethIP}:${toString config.services.suwayomi-server.settings.server.port}"; locations."/".proxyPass = "http://${config.networking.vpn-netns.vethIP}:${toString config.services.suwayomi-server.settings.server.port}";
}; };
# 44303 # 44303
"git.lyes.eu" = { "git.minish.link" = {
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
extraConfig = '' extraConfig = ''
@ -66,7 +82,7 @@
locations."/".proxyPass = "http://localhost:${toString config.services.forgejo.settings.server.HTTP_PORT}"; locations."/".proxyPass = "http://localhost:${toString config.services.forgejo.settings.server.HTTP_PORT}";
}; };
# 8096 # 8096
"media.lyes.eu" = { "media.minish.link" = {
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
locations = { locations = {
@ -86,7 +102,7 @@
}; };
}; };
# 44304 # 44304
"torrent.lyes.eu" = { "torrent.minish.link" = {
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
locations."/" = { locations."/" = {
@ -94,7 +110,7 @@
}; };
}; };
# 44305 # 44305
"files.lyes.eu" = { "files.minish.link" = {
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
locations."/" = { locations."/" = {

View file

@ -1,4 +1,4 @@
{ nixpkgs-unstable, nixpkgs-stable, pin-factorio, ... }: { nixpkgs-unstable, nixpkgs-stable, pin-factorio, helix-ext, ... }:
{ {
imports = imports =
@ -7,8 +7,8 @@
./system.nix ./system.nix
]; ];
# Import local packages
nixpkgs.overlays = [ nixpkgs.overlays = [
# Import local packages
(final: prev: { (final: prev: {
local = import ../../pkgs { pkgs = final; }; local = import ../../pkgs { pkgs = final; };
}) })
@ -16,23 +16,28 @@
# Unstable # Unstable
(final: prev: { (final: prev: {
unstable = import nixpkgs-unstable { unstable = import nixpkgs-unstable {
system = prev.system; system = final.stdenv.hostPlatform.system;
}; };
}) })
# Stable # Stable
(final: prev: { (final: prev: {
stable = import nixpkgs-stable { stable = import nixpkgs-stable {
system = prev.system; system = final.stdenv.hostPlatform.system;
}; };
}) })
# Pins # Pins
(final: prev: { (final: prev: {
pin = { pin = {
factorio = import pin-factorio { system = prev.system; config.allowUnfree = true; }; factorio = import pin-factorio { system = final.stdenv.hostPlatform.system; config.allowUnfree = true; };
}; };
}) })
# Helix
(final: prev: {
helix-with-extensions = helix-ext.packages."x86_64-linux".helix;
})
]; ];
nixpkgs.config = { nixpkgs.config = {

View file

@ -23,7 +23,7 @@
programs.gamemode.enable = true; programs.gamemode.enable = true;
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
wineWowPackages.waylandFull wineWow64Packages.waylandFull
mangohud mangohud
protonup-ng protonup-ng
]; ];

View file

@ -20,9 +20,12 @@
services.resolved = { services.resolved = {
enable = false; enable = false;
dnssec = "true"; settings = {
domains = [ "~." ]; Resolve = {
fallbackDns = [ DNSOverTLS = true;
DNSSEC = true;
Domains = [ "~." ];
FallbackDns = [
"9.9.9.9" "9.9.9.9"
"149.112.112.112" "149.112.112.112"
"1.1.1.1" "1.1.1.1"
@ -30,8 +33,7 @@
"2620:fe::fe" "2620:fe::fe"
"2620:fe::9" "2620:fe::9"
]; ];
settings.Resolve = { };
DNSOverTLS = true;
}; };
}; };
@ -51,12 +53,6 @@
# Network services # Network services
#services.openssh.enable = true; #services.openssh.enable = true;
#services.syncplay = {
# enable = true;
# port = 8998;
# extraArgs = [ "--password pouicbarilstepson123cassoulet" ];
#};
# Bluetooth # Bluetooth
hardware.bluetooth.enable = true; hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true; hardware.bluetooth.powerOnBoot = true;

View file

@ -39,6 +39,7 @@ in
wofi wofi
wlogout wlogout
slurp slurp
vicinae
]; ];
}; };

View file

@ -1,4 +1,4 @@
{ pkgs, mozilla, ... }: { pkgs, ... }:
{ {
# Boot # Boot
@ -58,8 +58,9 @@
# package = pkgs.firefox-beta; # package = pkgs.firefox-beta;
# Doesn't work ? # Doesn't work ?
# languagePacks = [ "fr" "en-US" ]; # languagePacks = [ "fr" "en-US" ];
# package = pkgs.latest.firefox-nightly-bin;
}; };
nixpkgs.overlays = [ mozilla.overlays.firefox ]; # nixpkgs.overlays = [ mozilla.overlays.firefox ];
# let # let
# # Change this to a rev sha to pin # # Change this to a rev sha to pin
# moz-rev = "master"; # moz-rev = "master";
@ -72,8 +73,6 @@
# nightlyOverlay # nightlyOverlay
# ]; # ];
programs.firefox.package = pkgs.latest.firefox-nightly-bin;
xdg.portal.enable = true; xdg.portal.enable = true;
# Virtualisation # Virtualisation
@ -81,7 +80,8 @@
# virtualisation.virtualbox.host.enable = true; # virtualisation.virtualbox.host.enable = true;
# virtualisation.virtualbox.host.enableExtensionPack = true; # virtualisation.virtualbox.host.enableExtensionPack = true;
# users.extraGroups.vboxusers.members = [ "lyes" ]; # users.extraGroups.vboxusers.members = [ "lyes" ];
# virtualisation.waydroid.enable = true; virtualisation.waydroid.enable = true;
virtualisation.waydroid.package = pkgs.waydroid-nftables;
# Containers # Containers
virtualisation.containers.enable = true; virtualisation.containers.enable = true;

View file

@ -1,13 +1,15 @@
- `agraf` : Copyparty (`files.lyes.eu`) - `agraf` : Copyparty (`files.lyes.eu`)
- `baba` : Nextcloud (`cloud.lyes.eu`) - `baba` : Nextcloud (`cloud.lyes.eu`)
- `biggoron` : Forgejo (`git.lyes.eu`) - `biggoron` : Forgejo (`git.lyes.eu`)
- `facteur` : Syncplay
- `giovanni` : Vaultwarden (`vault.lyes.eu`) - `giovanni` : Vaultwarden (`vault.lyes.eu`)
- `kaepora` : PostgreSQL - `kaepora` : PostgreSQL
- `kalif` : Factorio (`factorio.lyes.eu`) - `kalif` : Factorio (`factorio.lyes.eu`)
- `lanayru` : Suwayomi (`dl.manga.lyes.eu`) - `lanayru` : Suwayomi (`dl.manga.lyes.eu`)
- `link` : Kanidm (`auth.lyes.eu`) - `link` : Kanidm (`auth.minish.link`)
- `maistro` : Incus - `maistro` : Incus
- `mikau` : Jellyfin (`media.lyes.eu`) - `mikau` : Jellyfin (`media.minish.link`)
- `midona` : Gate Minecraft Server Proxy
- `mogma` : VPN NetNS Configuration - `mogma` : VPN NetNS Configuration
- `nayru` : Komga/Manga (`manga.lyes.eu`) - `nayru` : Komga/Manga (`manga.lyes.eu`)
- `taf` : Mail (`taf.lyes.eu`/`mail.lyes.eu`) - `taf` : Mail (`taf.lyes.eu`/`mail.lyes.eu`)

View file

@ -1,6 +1,10 @@
{ config, copyparty, ... }: { config, copyparty, ... }:
{ {
imports = [
copyparty.nixosModules.default
];
services.copyparty = { services.copyparty = {
enable = true; enable = true;
@ -20,7 +24,7 @@
# General options # General options
ed = true; # See hidden files (starting with a dot) ed = true; # See hidden files (starting with a dot)
name = "zora"; # Server name name = "zora"; # Server name
name-url = "https://files.lyes.eu"; # Server URL name-url = "https://files.minish.link"; # Server URL
j = 4; # Max jobs (CPU usage) j = 4; # Max jobs (CPU usage)
# Network options # Network options

View file

@ -7,7 +7,7 @@
services.nextcloud = { services.nextcloud = {
enable = true; enable = true;
package = pkgs.nextcloud32; package = pkgs.nextcloud33;
hostName = "cloud.lyes.eu"; hostName = "cloud.lyes.eu";
https = true; https = true;
configureRedis = true; configureRedis = true;
@ -15,6 +15,7 @@
extraAppsEnable = true; extraAppsEnable = true;
extraApps = { extraApps = {
# inherit (config.services.nextcloud.package.packages.apps) mail calendar contacts cospend user_oidc notes richdocuments tasks dav_push repod gpoddersync phonetrack music;
inherit (config.services.nextcloud.package.packages.apps) mail calendar contacts cospend user_oidc notes richdocuments tasks news dav_push repod gpoddersync phonetrack music; inherit (config.services.nextcloud.package.packages.apps) mail calendar contacts cospend user_oidc notes richdocuments tasks news dav_push repod gpoddersync phonetrack music;
# gpoddersync = pkgs.fetchNextcloudApp { # gpoddersync = pkgs.fetchNextcloudApp {
# hash = "sha256-EQVs1fe0ierjqFZ5+KVc1Yj67zrwjLBAzY5A+QsC7AU="; # hash = "sha256-EQVs1fe0ierjqFZ5+KVc1Yj67zrwjLBAzY5A+QsC7AU=";

View file

@ -37,7 +37,7 @@ in
settings = { settings = {
server = { server = {
DOMAIN = "git.lyes.eu"; DOMAIN = "git.minish.link";
# You need to specify this to remove the port from URLs in the web UI. # You need to specify this to remove the port from URLs in the web UI.
ROOT_URL = "https://${srv.DOMAIN}/"; ROOT_URL = "https://${srv.DOMAIN}/";
HTTP_PORT = 44303; HTTP_PORT = 44303;

View file

@ -4,13 +4,16 @@
podman = { podman = {
enable = true; enable = true;
dockerCompat = true; dockerCompat = true;
dockerSocket.enable = true;
defaultNetwork.settings.dns_enabled = true; defaultNetwork.settings.dns_enabled = true;
autoPrune.enable = true;
}; };
}; };
networking.firewall.trustedInterfaces = [ networking.firewall.trustedInterfaces = [
"podman*" "podman*"
]; ];
networking.firewall.interfaces."podman*".allowedUDPPorts = [ 53 ];
users.users.gitea-runner.isSystemUser = true; users.users.gitea-runner.isSystemUser = true;
users.users.gitea-runner.group = "gitea-runner"; users.users.gitea-runner.group = "gitea-runner";
@ -18,10 +21,11 @@
services.gitea-actions-runner = { services.gitea-actions-runner = {
package = pkgs.forgejo-runner; package = pkgs.forgejo-runner;
instances.default = { instances = {
ptigoron = {
enable = true; enable = true;
name = "ptigoron"; name = "ptigoron";
url = "https://git.lyes.eu"; url = "https://git.minish.link";
# Obtaining the path to the runner token file may differ # Obtaining the path to the runner token file may differ
# tokenFile should be in format TOKEN=<secret>, since it's EnvironmentFile for systemd # tokenFile should be in format TOKEN=<secret>, since it's EnvironmentFile for systemd
tokenFile = config.age.secrets.ptigoron-token.path; tokenFile = config.age.secrets.ptigoron-token.path;
@ -36,6 +40,9 @@
]; ];
}; };
}; };
};
systemd.services.gitea-runner-ptigoron.after = [ "forgejo.service" ];
age.secrets.ptigoron-token = { age.secrets.ptigoron-token = {
file = ../../../secrets/zora/services/ptigoron-token.age; file = ../../../secrets/zora/services/ptigoron-token.age;

View file

@ -0,0 +1,16 @@
{ config, pkgs, ... }:
{
services.syncplay = {
enable = true;
package = pkgs.syncplay-nogui;
passwordFile = config.age.secrets.facteur-pass.path;
};
age.secrets = {
facteur-pass = {
file = ../../../secrets/zora/services/facteur-pass.age;
mode = "444";
};
};
}

View file

@ -42,6 +42,8 @@
}; };
}; };
networking.vpn-netns.encapsulatedServices.suwayomi-server.enable = true;
age.secrets = { age.secrets = {
suwayomi-pass = { suwayomi-pass = {
file = ../../../secrets/zora/services/lanayru-pass.age; file = ../../../secrets/zora/services/lanayru-pass.age;

View file

@ -2,12 +2,13 @@
{ {
services.kanidm = { services.kanidm = {
package = pkgs.kanidmWithSecretProvisioning_1_8; package = pkgs.kanidmWithSecretProvisioning_1_9;
enableClient = true; client = {
enable = true;
clientSettings = { settings = {
uri = "https://auth.lyes.eu"; uri = "https://auth.minish.link";
};
}; };
}; };
} }

View file

@ -1,7 +1,7 @@
{ config, ... }: { config, ... }:
let let
hostname = "auth.${config.networking.domain}"; hostname = "auth.minish.link";
port = "44300"; port = "44300";
in in
{ {
@ -13,8 +13,9 @@ in
services.kanidm = { services.kanidm = {
# package = pkgs.kanidmWithSecretProvisioning_1_7; # package = pkgs.kanidmWithSecretProvisioning_1_7;
enableServer = true; server = {
server.settings = { enable = true;
settings = {
bindaddress = "127.0.0.1:${port}"; bindaddress = "127.0.0.1:${port}";
ldapbindaddress = "0.0.0.0:636"; ldapbindaddress = "0.0.0.0:636";
domain = hostname; domain = hostname;
@ -28,6 +29,7 @@ in
versions = 5; versions = 5;
}; };
}; };
};
provision = { provision = {
enable = true; enable = true;

View file

@ -0,0 +1,77 @@
{ lib, pkgs, ... }:
let
config = lib.toFile "config.yml" ''
config:
lite:
enabled: true
routes:
- host: stepson.minecraft.minish.link
backend: 10.0.100.80:25565
'';
in
{
environment.systemPackages = with pkgs; [ gate ];
systemd.services.gate = {
description = "Gate Minecraft Proxy";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
ExecStart = "${pkgs.gate}/bin/gate --config ${config}";
Restart = "always";
# StandardInput = "socket";
# StandardOutput = "journal";
# StandardError = "journal";
# Hardening
CapabilityBoundingSet = [ "" ];
DeviceAllow = [ "" ];
LockPersonality = true;
PrivateDevices = true;
PrivateTmp = true;
PrivateUsers = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
UMask = "0077";
};
};
services.nginx.streamConfig = ''
server {
listen 24454;
proxy_pass 10.0.100.80:24454;
}
server {
listen 24454 udp;
proxy_pass 10.0.100.80:24454;
}
'';
networking.firewall = {
allowedTCPPorts = [
25565
24454 # Simple Voice Chat stepson
];
allowedUDPPorts = [
25565
24454 # Simple Voice Chat stepson
];
};
}

View file

@ -32,6 +32,8 @@ let
} forwardedServices; } forwardedServices;
serviceList = lib.mapAttrsToList (name: _: name + ".service") forwardedServices; serviceList = lib.mapAttrsToList (name: _: name + ".service") forwardedServices;
encServicesList = lib.mapAttrsToList (name: _: name + ".service") cfg.encapsulatedServices;
in in
lib.mkIf (forwardedServices != { } && cfg.portForwarding.enable) { lib.mkIf (forwardedServices != { } && cfg.portForwarding.enable) {
assertions = [ assertions = [
@ -49,11 +51,11 @@ lib.mkIf (forwardedServices != { } && cfg.portForwarding.enable) {
services.natpmpc-lease = { services.natpmpc-lease = {
description = "Request VPN port forwarding leases."; description = "Request VPN port forwarding leases.";
wantedBy = serviceList; # wantedBy = serviceList;
after = [ "wireguard.target" ]; after = [ "wireguard.target" ] ++ encServicesList;
wants = [ "wireguard.target" ]; wants = [ "wireguard.target" ] ++ encServicesList;
# preStart = "sleep 3"; preStart = "sleep 3";
path = with pkgs; [ path = with pkgs; [
libnatpmp libnatpmp

View file

@ -1,31 +1,17 @@
{ config, lib, ... }: { config, mailserver, ... }:
let
alias = ''
@lyes.eu lyes
lyes@mail.lyes.eu lyes
abuse@taf.lyes.eu lyes
abuse@mail.lyes.eu lyes
abuse@minish.fr lyes
abuse@minish.link lyes
postmaster@taf.lyes.eu lyes
postmaster@mail.lyes.eu lyes
postmaster@minish.fr lyes
postmaster@minish.link lyes
'';
aliasFile = lib.toFile "alias" alias;
in
{ {
imports = [
mailserver.nixosModules.default
];
mailserver = { mailserver = {
enable = true; enable = true;
stateVersion = 3; stateVersion = 3;
fqdn = "taf.lyes.eu"; fqdn = "taf.lyes.eu";
domains = [ domains = [
"lyes.eu" "lyes.eu"
"taf.lyes.eu"
"mail.lyes.eu" "mail.lyes.eu"
"minish.fr"
"minish.link"
]; ];
localDnsResolver = false; localDnsResolver = false;
@ -33,85 +19,175 @@ in
# debug.all = true; # debug.all = true;
ldap = { # ldap = {
enable = true;
uris = [ "ldaps://auth.lyes.eu:636" ];
searchBase = "dc=auth,dc=lyes,dc=eu";
searchScope = "sub";
bind = {
# dn = "dn=token,dc=auth,dc=lyes,dc=eu";
dn = "dn=token";
passwordFile = config.age.secrets.taf-token.path;
};
dovecot = {
userFilter = "(&(memberof=taf_users)(mail=%u))";
passFilter = "(&(memberof=taf_users)(mail=%u))";
};
postfix = {
filter = "(&(memberof=taf_users)(mail=%s))";
mailAttribute = "mail";
uidAttribute = "name";
};
};
# fullTextSearch = {
# enable = true; # enable = true;
# autoIndex = true;
# enforced = "body"; # uris = [ "ldaps://auth.lyes.eu:636" ];
# searchBase = "dc=auth,dc=lyes,dc=eu";
# searchScope = "sub";
# bind = {
# # dn = "dn=token,dc=auth,dc=lyes,dc=eu";
# dn = "dn=token";
# passwordFile = config.age.secrets.taf-token.path;
# }; # };
# loginAccounts = { # dovecot = {
# "lyes@mail.lyes.eu" = { # userFilter = "(name=%u)";
# # hashedPasswordFile = config.age.secrets.lyes-mail-passwd.path; # passFilter = "(name=%u)";
# # aliases = [ # };
# # "@lyes.eu"
# # ]; # postfix = {
# # quota = "1T"; # filter = "(name=%s)";
# mailAttribute = "mail";
# uidAttribute = "name";
# }; # };
# }; # };
loginAccounts = {
"lyes@mail.lyes.eu" = {
hashedPasswordFile = config.age.secrets.lyes-mail-passwd.path;
aliases = [
"@lyes.eu"
];
quota = "1T";
sieveScript = ''
require ["include", "fileinto", "mailbox", "copy", "regex", "variables", "imap4flags"];
include :personal "hiddensieve";
# lyes.eu filters
if address :is :domain "X-Original-To" "lyes.eu" {
# If the mail comes from my crans mailbox
if address :is :localpart "X-Original-To" "crans" {
# Aurore Support
if header :contains "List-Id" "<support.aurore.lists.crans.org>" {
fileinto :create "Crans.aurore.support";
}
# Mailman moderation request
elsif address :matches :all "To" "*-owner@lists.crans.org" {
fileinto :create "Crans.moderation";
}
# Crans Bureau
elsif anyof (
header :contains "List-Id" "<bureau.lists.crans.org>",
header :contains "List-Id" "<achats-crans.lists.crans.org>",
header :contains "List-Id" "<tresorerie.lists.crans.org>"
) {
fileinto :create "Crans.crans.bureau";
}
# Crans CA
elsif header :contains "List-Id" "<ca.lists.crans.org>" {
fileinto :create "Crans.crans.ca";
}
# Crans Root Postmaster
elsif address :is :all "To" "postmaster@crans.org" {
addflag "\\Seen";
fileinto :create "Crans.crans.root.postmaster";
}
# Crans Root Mailer
elsif address :is :all "From" "MAILER-DAEMON@crans.org" {
fileinto :create "Crans.crans.root.mailer";
}
# Crans Nounou
elsif anyof (
header :contains "List-Id" "<nounou.lists.crans.org>",
header :contains "List-Id" "<apprenti-es.lists.crans.org>",
address :is :all "To" "contact@crans.org",
address :is :all "From" "contact@crans.org"
) {
fileinto :create "Crans.crans.nounou";
}
# Crans Root
elsif anyof (
address :is :all "To" "root@crans.org",
address :is :all "From" "root@crans.org",
address :is :all "From" "www-data@crans.org"
) {
fileinto :create "Crans.crans.root";
}
# Crans Gitlab
elsif address :is :all "From" "gitlab@crans.org" {
fileinto :create "Crans.crans.gitlab";
}
# Crans Wiki
elsif address :is :all "From" "wiki@crans.org" {
fileinto :create "Crans.crans.wiki";
}
# Aurore CA
elsif header :contains "List-Id" "<ca.aurore.lists.crans.org>" {
fileinto :create "Crans.aurore.ca";
}
# BDL
elsif anyof (
header :contains "List-Id" "<bdl-bureau.lists.crans.org>",
header :contains "List-Id" "<bdl.lists.crans.org>"
) {
fileinto :create "Crans.asso.bdl";
}
# Med
elsif anyof (
header :contains "List-Id" "<med-bureau.lists.crans.org>",
header :contains "List-Id" "<med.lists.crans.org>"
) {
fileinto :create "Crans.asso.med";
}
# NL BDE
elsif header :contains "List-Id" "<evenements.lists.crans.org>" {
fileinto :create "Crans.asso.nl.bde";
}
# NL BDA
elsif header :contains "List-Id" "<evenement.bda.lists.crans.org>" {
fileinto :create "Crans.asso.nl.bda";
}
# Any other associative mail
elsif anyof (
header :contains "List-Id" "<la5emeparallele-bureau.lists.crans.org>",
header :contains "List-Id" "<la5emeparallele.lists.crans.org>",
header :matches "List-Id" "<*.lists.crans.org>"
) {
fileinto :create "Crans.asso";
}
# Otherwise it's for the generic mailbox
else {
fileinto :create "Crans";
}
}
# Otherwise it's for my different accounts
# It's automatically sorted using the localpart
elsif address :localpart :regex "X-Original-To" "^(([a-zA-Z]+\\.)*([a-zA-Z]+))(-([a-zA-Z0-9_.\\-]*))?''$" {
set :lower "sub_folder" "''${1}";
set "mbox_candidate" "INBOX.''${sub_folder}";
fileinto :create "''${mbox_candidate}";
}
# Other unknown origin
else {
fileinto :create "INBOX.other";
}
}
# It's destined to my main inbox
elsif address :is "X-Original-To" "lyes@mail.lyes.eu" {
fileinto :create "INBOX";
}
# Other unknown origin
else {
fileinto :create "INBOX.other";
}
'';
};
};
# extraVirtualAliases = { # extraVirtualAliases = {
# "@lyes.eu" = "lyes"; # "@lyes.eu" = "lyes@mail.lyes.eu";
# "abuse@mail.lyes.eu" = "lyes";
# # "abuse@minish.fr" = "lyes";
# # "abuse@minish.link" = "lyes";
# "postmaster@mail.lyes.eu" = "lyes";
# # "postmaster@minish.fr" = "lyes";
# # "postmaster@minish.link" = "lyes";
# }; # };
x509.useACMEHost = config.mailserver.fqdn; x509.useACMEHost = config.mailserver.fqdn;
}; };
services.postfix = {
mapFiles."valias" = lib.mkForce aliasFile;
mapFiles."vaccounts" = lib.mkForce aliasFile;
virtual = lib.mkForce alias;
settings = {
main = {
# local_recipient_maps = "";
# virtual_alias_maps = lib.mkForce "ldap:/run/postfix/ldap-virtual-mailbox-map.cf";
maximal_queue_lifetime = "31d";
relay_domains = [
"skaven.org"
"agreg.info"
];
smtpd_recipient_restrictions = [
"permit_mynetworks"
"permit_sasl_authenticated"
];
};
};
};
# services.dovecot2.extraConfig = '' # services.dovecot2.extraConfig = ''
# userdb { # userdb {
# driver = ldap # driver = ldap
@ -128,10 +204,7 @@ in
# } # }
# ''; # '';
services.dovecot2 = { services.dovecot2.sieve.extensions = [ "imap4flags" ];
# enableQuota = lib.mkForce false;
sieve.extensions = [ "imap4flags" ];
};
services.roundcube = { services.roundcube = {
enable = true; enable = true;
@ -148,12 +221,21 @@ in
age.secrets = { age.secrets = {
taf-token = { taf-token = {
owner = "postfix";
file = ../../../secrets/zora/services/taf-token.age; file = ../../../secrets/zora/services/taf-token.age;
}; };
# lyes-mail-passwd = { lyes-mail-passwd = {
# owner = "postfix"; owner = "postfix";
# file = ../../../secrets/lyes/mail-passwd.age; file = ../../../secrets/lyes/mail-passwd.age;
# }; };
lyes-hidden-sieve = {
file = ../../../secrets/lyes/hidden-sieve.age;
path = "/var/sieve/lyes@mail.lyes.eu/scripts/hiddensieve.sieve";
owner = "virtualMail";
group = "virtualMail";
mode = "660";
};
}; };
} }

View file

@ -3,8 +3,14 @@
fetchFromGitHub, fetchFromGitHub,
cmake, cmake,
curl, curl,
qt6, libxml2,
libxml2 qtbase,
wrapQtAppsHook,
qtscxml,
qtquicktimeline,
qtquickeffectmaker,
qtnetworkauth,
qttools,
}: }:
stdenv.mkDerivation (final: { stdenv.mkDerivation (final: {
@ -18,10 +24,20 @@ stdenv.mkDerivation (final: {
hash = "sha256-hqoUkzPNxAIvC/7DL9YIMPmUZqAreqCbG8NKidVtSDM="; hash = "sha256-hqoUkzPNxAIvC/7DL9YIMPmUZqAreqCbG8NKidVtSDM=";
}; };
buildInputs = [ qtbase ];
nativeBuildInputs = [ nativeBuildInputs = [
cmake cmake
curl curl
qt6.full # qt6.env
qtscxml
# qtquick3d
# qtquick3dphysics
qtquicktimeline
qtquickeffectmaker
qtnetworkauth
qttools
libxml2 libxml2
wrapQtAppsHook
]; ];
}) })

View file

@ -0,0 +1,103 @@
{
lib,
stdenv,
fetchFromGitHub,
rustPlatform,
cargo-tauri,
cinny,
desktop-file-utils,
wrapGAppsHook4,
makeBinaryWrapper,
pkg-config,
openssl,
glib-networking,
webkitgtk_4_1,
jq,
moreutils,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "cinny-desktop";
version = "4.11.1";
# nixpkgs-update: no auto update
src = fetchFromGitHub {
owner = "cinnyapp";
repo = "cinny-desktop";
tag = "v4.11.2";
hash = "sha256-iH3OBpLM5JyFo5QLjHSvGMgl0xDP9hpfngW49hvjLMY=";
};
sourceRoot = "${finalAttrs.src.name}/src-tauri";
cargoHash = "sha256-g1xDdqmouHD+qr5OvO2PVjFKAy2AXiatuTrLfh/QxAE=";
postPatch =
let
cinny' =
assert lib.assertMsg (
cinny.version == finalAttrs.version
) "cinny.version (${cinny.version}) != cinny-desktop.version (${finalAttrs.version})";
cinny.override {
conf = {
hashRouter.enabled = true;
};
};
in
# 'del(.app.windows) | del(.plugins.updater) | .bundle.createUpdaterArtifacts = false | .build.frontendDist = "${cinny'}" | del(.build.beforeBuildCommand)' tauri.conf.json \
''
${lib.getExe jq} \
'del(.plugins.tauri.updater) | .bundle.createUpdaterArtifacts = false | .build.frontendDist = "${cinny'}" | del(.build.beforeBuildCommand)' tauri.conf.json \
| ${lib.getExe' moreutils "sponge"} tauri.conf.json
cat tauri.conf.json
'';
postInstall =
lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p "$out/bin"
makeWrapper "$out/Applications/Cinny.app/Contents/MacOS/Cinny" "$out/bin/cinny"
''
+ lib.optionalString stdenv.hostPlatform.isLinux ''
desktop-file-edit \
--set-comment "Yet another matrix client for desktop" \
--set-key="Categories" --set-value="Network;InstantMessaging;" \
$out/share/applications/Cinny.desktop
'';
preFixup = ''
gappsWrapperArgs+=(
--set-default WEBKIT_DISABLE_DMABUF_RENDERER "1"
)
'';
nativeBuildInputs = [
cargo-tauri.hook
]
++ lib.optionals stdenv.hostPlatform.isLinux [
desktop-file-utils
pkg-config
wrapGAppsHook4
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
makeBinaryWrapper
];
buildInputs = lib.optionals stdenv.hostPlatform.isLinux [
glib-networking
openssl
webkitgtk_4_1
];
meta = {
description = "Yet another matrix client for desktop";
homepage = "https://github.com/cinnyapp/cinny-desktop";
maintainers = with lib.maintainers; [
qyriad
rebmit
ryand56
];
license = lib.licenses.agpl3Only;
platforms = lib.platforms.linux ++ lib.platforms.darwin;
mainProgram = "cinny";
};
})

View file

@ -0,0 +1,52 @@
{
lib,
buildNpmPackage,
fetchFromGitHub,
nodejs_22,
}:
buildNpmPackage {
pname = "cinny-unwrapped";
# Remember to update cinny-desktop when bumping this version.
version = "4.11.1";
# nixpkgs-update: no auto update
src = fetchFromGitHub {
owner = "cinnyapp";
repo = "cinny";
# rev = "55e83065767645ed7cd510a6f4b5cf4733b000b4";
tag = "v4.11.1";
# hash = "sha256-2qxmlj4IK6twDh27R6qMJDmYSfsWoofVGuRHxSP72f0=";
hash = "sha256-dwI3zNey/ukF3t2fhH/ePf4o4iBDwZyLWMYebPgXmWU=";
};
nodejs = nodejs_22;
# npmDepsHash = "sha256-qyQ0SXkPSUES/tavKzPra0Q+ZnU9qHvkTC1JgAjL0o8=";
# npmDepsHash = "sha256-2Lrd0jAwAH6HkwLHyivqwaEhcpFAIALuno+MchSIfxo=";
npmDepsHash = "sha256-27WFjb08p09aJRi0S2PvYq3bivEuG5+z2QhFahTSj4Q=";
# Skip rebuilding native modules since they're not needed for the web app
npmRebuildFlags = [
"--ignore-scripts"
];
installPhase = ''
runHook preInstall
cp -r dist $out
runHook postInstall
'';
meta = {
description = "Yet another Matrix client for the web";
homepage = "https://cinny.in/";
maintainers = with lib.maintainers; [
abbe
rebmit
];
license = lib.licenses.agpl3Only;
platforms = lib.platforms.all;
};
}

32
pkgs/cinny/cinny.nix Normal file
View file

@ -0,0 +1,32 @@
{
cinny-unwrapped,
jq,
stdenvNoCC,
writeText,
conf ? { },
}:
let
configOverrides = writeText "cinny-config-overrides.json" (builtins.toJSON conf);
in
if (conf == { }) then
cinny-unwrapped
else
stdenvNoCC.mkDerivation {
pname = "cinny";
inherit (cinny-unwrapped) version meta;
dontUnpack = true;
nativeBuildInputs = [ jq ];
installPhase = ''
runHook preInstall
mkdir -p $out
ln -s ${cinny-unwrapped}/* $out
rm $out/config.json
jq -s '.[0] * .[1]' "${cinny-unwrapped}/config.json" "${configOverrides}" > "$out/config.json"
runHook postInstall
'';
}

View file

@ -1,8 +1,11 @@
{ pkgs ? import <nixpkgs> { } }: { pkgs ? import <nixpkgs> { } }:
{ rec {
quadcastrgb = pkgs.callPackage ./quadcastrgb { }; quadcastrgb = pkgs.callPackage ./quadcastrgb { };
ens-intel-unite = pkgs.callPackage ./ens-intel-unite { }; ens-intel-unite = pkgs.callPackage ./ens-intel-unite { };
KhinsiderDownloader = pkgs.callPackage ./KhinsiderDownloader { }; KhinsiderDownloader = pkgs.qt6Packages.callPackage ./KhinsiderDownloader { };
amy-mono = pkgs.callPackage ./amy-mono { }; amy-mono = pkgs.callPackage ./amy-mono { };
cinny = pkgs.callPackage ./cinny/cinny.nix { inherit cinny-unwrapped; };
cinny-unwrapped = pkgs.callPackage ./cinny/cinny-unwrapped.nix { };
cinny-desktop = pkgs.callPackage ./cinny/cinny-desktop.nix { inherit cinny; };
} }

View file

@ -8,7 +8,7 @@ in
{ {
# Lyes # Lyes
"secrets/lyes/mail-passwd.age".publicKeys = [ lyes zora ]; "secrets/lyes/mail-passwd.age".publicKeys = [ lyes zora ];
"secrets/lyes/sieve.age".publicKeys = [ lyes zora ]; "secrets/lyes/hidden-sieve.age".publicKeys = [ lyes zora ];
# Zora # Zora
"secrets/zora/services/kanidm-admin-password.age".publicKeys = all; "secrets/zora/services/kanidm-admin-password.age".publicKeys = all;
@ -27,4 +27,5 @@ in
"secrets/zora/services/lanayru-pass.age".publicKeys = all; "secrets/zora/services/lanayru-pass.age".publicKeys = all;
"secrets/zora/services/agraf-root-pass.age".publicKeys = all; "secrets/zora/services/agraf-root-pass.age".publicKeys = all;
"secrets/zora/services/agraf-lyes-pass.age".publicKeys = all; "secrets/zora/services/agraf-lyes-pass.age".publicKeys = all;
"secrets/zora/services/facteur-pass.age".publicKeys = all;
} }

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,7 @@
age-encryption.org/v1
-> ssh-ed25519 whuRpQ SjgklfrTXj3TptfA1MxYkbjcWkFNTNwvpHoto0YfEnY
/MhJDiLIqHjUKU8jEe9NPTR/29YYij8E6u6t9/Mj1VM
-> ssh-ed25519 TFqgIg qXDuQIj9gq/hO07+6KBkCKVTd3L6eomSMetxXfVu1yc
RWpVvmkM5hN9yHO4JlPWsTvl8sDG0DOA1y5DGcTlTa0
--- UwLsYqcbzfvzL2SoevAhhG2K1JA3XlHTVeF73nEU21c
÷ÑKÒ¶d¯IT«[îöWFäu×f¹Èê:¶Lp‡Äl8Š€6©X©

Binary file not shown.

View file

@ -24,4 +24,9 @@
via via
]; ];
}; };
# Fixing launch issues with some desktops (sway...)
# systemd.user.extraConfig = ''
# DefaultEnvironment="PATH=/run/current-system/sw/bin"
# '';
} }

View file

@ -20,7 +20,7 @@
shell-integration-features = [ shell-integration-features = [
"sudo" "sudo"
"ssh-env" "ssh-env"
"ssh-terminfo" # "ssh-terminfo"
]; ];
# keybind = [ # keybind = [

View file

@ -23,7 +23,8 @@ in
swaynag.enable = true; swaynag.enable = true;
config = { config = {
startup = [ startup = [
{ command = "poweralertd"; } { command = "${pkgs.poweralertd}/bin/poweralertd"; }
# { command = "${pkgs.vicinae}/bin/vicinae server"; }
{ {
command = '' command = ''
swayidle -w \ swayidle -w \
@ -35,7 +36,7 @@ in
]; ];
modifier = "Mod4"; modifier = "Mod4";
menu = "${pkgs.wofi}/bin/wofi --show drun"; menu = "${pkgs.vicinae}/bin/vicinae toggle";
# Switch to ghostty ? # Switch to ghostty ?
terminal = "${pkgs.ghostty}/bin/ghostty"; terminal = "${pkgs.ghostty}/bin/ghostty";
@ -610,6 +611,52 @@ in
}; };
programs = { programs = {
vicinae = {
enable = true;
systemd = {
enable = true;
autoStart = true;
# environment = {
# USE_LAYER_SHELL = 1;
# };
};
# useLayerShell = false;
settings = {
close_on_focus_loss = false;
consider_preedit = true;
pop_to_root_on_close = true;
launcher_window.layer_shell.enabled = false;
theme = {
light = {
name = "rose-pine-moon";
};
dark = {
name = "rose-pine-moon";
};
};
};
extensions =
let
extsrc = pkgs.fetchFromGitHub {
owner = "vicinaehq";
repo = "extensions";
sha256 = "sha256-KwNv+THKbNUey10q26NZPDMSzYTObRHaSDr81QP9CPY=";
rev = "cf30b80f619282d45b1748eb76e784a4f875bb01";
};
in
lib.map
(ext:
config.lib.vicinae.mkExtension {
name = ext;
src = extsrc + "/extensions/" + ext;
}
)
[
"bluetooth"
"nix"
"power-profile"
];
};
wofi = { wofi = {
enable = true; enable = true;
settings = {}; settings = {};

View file

@ -6,6 +6,7 @@
userDirs = { userDirs = {
enable = true; enable = true;
createDirectories = true; createDirectories = true;
setSessionVariables = true;
desktop = "${config.home.homeDirectory}/Bureau"; desktop = "${config.home.homeDirectory}/Bureau";
documents = "${config.home.homeDirectory}/Documents"; documents = "${config.home.homeDirectory}/Documents";
download = "${config.home.homeDirectory}/Téléchargements"; download = "${config.home.homeDirectory}/Téléchargements";
@ -35,53 +36,66 @@
"x-scheme-handler/sms" = "org.gnome.Shell.Extensions.GSConnect.desktop;"; "x-scheme-handler/sms" = "org.gnome.Shell.Extensions.GSConnect.desktop;";
"x-scheme-handler/tel" = "org.gnome.Shell.Extensions.GSConnect.desktop;"; "x-scheme-handler/tel" = "org.gnome.Shell.Extensions.GSConnect.desktop;";
}; };
defaultApplications = {
"text/plain" = "org.gnome.TextEditor.desktop"; defaultApplications =
"text/markdown" = "org.gnome.TextEditor.desktop"; let
"text/json" = "org.gnome.TextEditor.desktop"; web = "firefox.desktop";
"text/html" = "firefox.desktop"; mail = "thunderbird.desktop";
"text/xml" = "org.gnome.TextEditor.desktop"; editor = "org.gnome.TextEditor.desktop";
"image/avif" = "org.gnome.Loupe.desktop"; image = "org.gnome.Loupe.desktop";
"image/png" = "org.gnome.Loupe.desktop"; video = "mpv.desktop";
"image/jpeg" = "org.gnome.Loupe.desktop"; audio = "mpv.desktop";
"image/svg+xml" = "org.gnome.Loupe.desktop"; office-writer = "writer.desktop";
"image/gif" = "org.gnome.Loupe.desktop"; office-document = "impress.desktop";
"image/webp" = "org.gnome.Loupe.desktop"; office-spreadsheet = "calc.desktop";
"audio/mpeg" = "mpv.desktop"; in
"audio/aac" = "mpv.desktop"; {
"audio/webm" = "mpv.desktop"; "text/plain" = editor;
"audio/ogg" = "mpv.desktop"; "text/markdown" = editor;
"video/x-matroska" = "mpv.desktop"; "text/json" = editor;
"video/mp4" = "mpv.desktop"; "text/html" = web;
"video/webm" = "mpv.desktop"; "text/xml" = editor;
"video/ogg" = "mpv.desktop"; "image/avif" = image;
"image/png" = image;
"image/jpeg" = image;
"image/svg+xml" = image;
"image/gif" = image;
"image/webp" = image;
"audio/mpeg" = audio;
"audio/aac" = audio;
"audio/webm" = audio;
"audio/ogg" = audio;
"video/x-matroska" = video;
"video/mp4" = video;
"video/webm" = video;
"video/ogg" = video;
"application/pdf" = "org.gnome.Papers.desktop"; "application/pdf" = "org.gnome.Papers.desktop";
"application/msword" = "onlyoffice-desktopeditors.desktop"; "application/msword" = office-writer;
"application/vnd.ms-powerpoint" = "onlyoffice-desktopeditors.desktop"; "application/vnd.ms-powerpoint" = office-document;
"application/vnd.ms-excel" = "onlyoffice-desktopeditors.desktop"; "application/vnd.ms-excel" = office-spreadsheet;
"application/vnd.openxmlformats-officedocument.wordprocessingml.document" = "onlyoffice-desktopeditors.desktop"; "application/vnd.openxmlformats-officedocument.wordprocessingml.document" = office-writer;
"application/vnd.openxmlformats-officedocument.presentationml.presentation" = "onlyoffice-desktopeditors.desktop"; "application/vnd.openxmlformats-officedocument.presentationml.presentation" = office-document;
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" = "onlyoffice-desktopeditors.desktop"; "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" = office-spreadsheet;
"application/vnd.oasis.opendocument.text" = "onlyoffice-desktopeditors.desktop"; "application/vnd.oasis.opendocument.text" = office-writer;
"application/vnd.oasis.opendocument.presentation" = "onlyoffice-desktopeditors.desktop"; "application/vnd.oasis.opendocument.presentation" = office-document;
"application/vnd.oasis.opendocument.spreadsheet" = "onlyoffice-desktopeditors.desktop"; "application/vnd.oasis.opendocument.spreadsheet" = office-spreadsheet;
"application/epub+zip" = "com.github.johnfactotum.Foliate.desktop"; "application/epub+zip" = "com.github.johnfactotum.Foliate.desktop";
"application/ogg" = "mpv.desktop"; "application/ogg" = audio;
"application/xml" = "org.gnome.TextEditor.desktop"; "application/xml" = editor;
"application/xhtml+xml" = "firefox.desktop"; "application/xhtml+xml" = web;
"application/x-extension-htm" = "firefox.desktop"; "application/x-extension-htm" = web;
"application/x-extension-html" = "firefox.desktop"; "application/x-extension-html" = web;
"application/x-extension-shtml" = "firefox.desktop"; "application/x-extension-shtml" = web;
"application/x-extension-xhtml" = "firefox.desktop"; "application/x-extension-xhtml" = web;
"application/x-extension-xht" = "firefox.desktop"; "application/x-extension-xht" = web;
"application/x-bittorrent" = "de.haeckerfelix.Fragments.desktop"; "application/x-bittorrent" = "de.haeckerfelix.Fragments.desktop";
"message/rfc822" = "thunderbird.desktop"; "message/rfc822" = mail;
"x-scheme-handler/mailto" = "thunderbird.desktop"; "x-scheme-handler/mailto" = mail;
"x-scheme-handler/mid" = "thunderbird.desktop"; "x-scheme-handler/mid" = mail;
"x-scheme-handler/discord" = "vesktop.desktop"; "x-scheme-handler/discord" = "vesktop.desktop";
"x-scheme-handler/http" = "firefox.desktop"; "x-scheme-handler/http" = web;
"x-scheme-handler/https" = "firefox.desktop"; "x-scheme-handler/https" = web;
"x-scheme-handler/chrome" = "firefox.desktop"; "x-scheme-handler/chrome" = web;
}; };
}; };
}; };

View file

@ -37,7 +37,8 @@ in {
element-desktop element-desktop
fractal fractal
zoom-us zoom-us
# cinny-desktop local.cinny-desktop
mattermost-desktop
# Image # Image
gimp gimp
@ -58,15 +59,16 @@ in {
# stremio # insecure dependency # stremio # insecure dependency
# Audio # Audio
helvum crosspipe
local.quadcastrgb local.quadcastrgb
euphonica euphonica
#local.KhinsiderDownloader local.KhinsiderDownloader
# Games # Games
heroic heroic
cemu cemu
prismlauncher prismlauncher
cubiomes-viewer
# vvvvvv # vvvvvv
ryubing ryubing
dolphin-emu dolphin-emu
@ -75,6 +77,7 @@ in {
# suyu # suyu
pin.factorio.factorio pin.factorio.factorio
sgt-puzzles sgt-puzzles
archipelago
# Reading # Reading
# calibre # calibre
@ -99,6 +102,7 @@ in {
vscodium vscodium
# zed-editor # zed-editor
gcc gcc
gnumake
rustup rustup
python3 python3
zola zola
@ -112,7 +116,7 @@ in {
nodejs nodejs
nil nil
nixd nixd
nixfmt-rfc-style nixfmt
protege # LogIA Course protege # LogIA Course
haskellPackages.Agda haskellPackages.Agda
agdaPackages.standard-library agdaPackages.standard-library
@ -169,6 +173,7 @@ in {
packages = [ packages = [
# Internet # Internet
"net.waterfox.waterfox" "net.waterfox.waterfox"
"io.freetubeapp.FreeTube"
# Messaging # Messaging
"org.signal.Signal" "org.signal.Signal"
@ -196,13 +201,13 @@ in {
nixpkgs.overlays = [ nixpkgs.overlays = [
# Version pins # Version pins
(final: prev: { (final: prev: {
# factorio = prev.factorio.overrideAttrs (super: { # factorio = final.factorio.overrideAttrs (super: {
# version = "2.0.42"; # version = "2.0.42";
# # src.name = "factorio_alpha_x64-2.0.42.tar.xz"; # # src.name = "factorio_alpha_x64-2.0.42.tar.xz";
# # src.sha256 = "1zq6wcqkmn9bzys27v0jlk9m9m1jhaai1mybdv8hz7p2si4l76n9"; # # src.sha256 = "1zq6wcqkmn9bzys27v0jlk9m9m1jhaai1mybdv8hz7p2si4l76n9";
# src = "/nix/store/b9y0dwgxa6hpddrd8nn0g2fizxl3xss7-factorio_alpha_x64-2.0.42.tar.xz"; # src = "/nix/store/b9y0dwgxa6hpddrd8nn0g2fizxl3xss7-factorio_alpha_x64-2.0.42.tar.xz";
# }); # });
# factorio = prev.factorio.overrideAttrs (super: { # factorio = final.factorio.overrideAttrs (super: {
# username = "ntlyes"; # username = "ntlyes";
# token = ""; # token = "";
# src = # src =

View file

@ -1,17 +1,16 @@
{ home-manager, config, ... }: { home-manager, config, inputs, ... }:
{ {
imports = imports = [
[
home-manager.nixosModules.default home-manager.nixosModules.default
]; ];
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.backupFileExtension = "backup"; home-manager.backupFileExtension = "backup";
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.lyes = { ... }: { home-manager.users.lyes = { ... }: {
imports = imports = [
[
./editors ./editors
./shells ./shells
./home.nix ./home.nix

View file

@ -1,8 +1,9 @@
{ ... }: { pkgs, ... }:
{ {
programs.helix = { programs.helix = {
enable = true; enable = true;
package = pkgs.helix-with-extensions;
defaultEditor = true; defaultEditor = true;
settings = { settings = {

View file

@ -1,8 +0,0 @@
{ ... }:
{
imports =
[
./sieve.nix
];
}

View file

@ -1,13 +0,0 @@
{ ... }:
{
age.secrets = {
lyes-sieve = {
file = ../../../secrets/lyes/sieve.age;
path = "/var/sieve/lyes@taf.lyes.eu/default.sieve";
owner = "virtualMail";
group = "virtualMail";
mode = "660";
};
};
}