Compare commits
No commits in common. "master" and "master" have entirely different histories.
11
README.md
11
README.md
|
@ -1,11 +0,0 @@
|
||||||
## Unified nix configuration
|
|
||||||
|
|
||||||
Switch server: `nixos-rebuild switch --target-host root@posixlycorrect.com --use-substitutes --show-trace --flake .\#vps`
|
|
||||||
|
|
||||||
Switch current machine: `sudo nixos-rebuild switch --flake . --show-trace`
|
|
||||||
|
|
||||||
Switch current home manager: `home-manager switch --flake . --show-trace`
|
|
||||||
|
|
||||||
Update homepage: `nix flake update --commit-lock-file --update-input homepage`
|
|
||||||
|
|
||||||
Update whole flake: `nix flake update --commit-lock-file`
|
|
|
@ -13,6 +13,17 @@ in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
xdg = {
|
xdg = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
mimeApps = {
|
||||||
|
enable = true;
|
||||||
|
defaultApplications = {};
|
||||||
|
};
|
||||||
|
portal = {
|
||||||
|
# this shouldnt be on baseline, as servers have no GUI
|
||||||
|
enable = true;
|
||||||
|
xdgOpenUsePortal = true;
|
||||||
|
extraPortals = with pkgs; [xdg-desktop-portal-gtk]; #wtf is this
|
||||||
|
configPackages = with pkgs; [xdg-desktop-portal-gtk]; #wtf is this
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
home = {
|
home = {
|
||||||
|
|
19
home/modules/browsers.nix
Normal file
19
home/modules/browsers.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.local.apps.browsers;
|
||||||
|
in {
|
||||||
|
options.local.apps.browsers = {
|
||||||
|
enable = mkEnableOption "Browser home settings";
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
chromium
|
||||||
|
firefox
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
|
@ -8,9 +8,9 @@
|
||||||
./terminal
|
./terminal
|
||||||
./neovim.nix
|
./neovim.nix
|
||||||
./baseline.nix
|
./baseline.nix
|
||||||
./gaming.nix
|
./gaming
|
||||||
./yubikey.nix
|
./yubikey.nix
|
||||||
./firefox.nix
|
./browsers.nix
|
||||||
./gui
|
./gui
|
||||||
./zsh
|
./zsh
|
||||||
./gpg.nix
|
./gpg.nix
|
||||||
|
|
|
@ -13,7 +13,6 @@ in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
calibre
|
calibre
|
||||||
chromium
|
|
||||||
discord
|
discord
|
||||||
gwenview
|
gwenview
|
||||||
libreoffice-fresh
|
libreoffice-fresh
|
||||||
|
@ -29,6 +28,7 @@ in {
|
||||||
vpsfree-client
|
vpsfree-client
|
||||||
vscodium-fhs
|
vscodium-fhs
|
||||||
zola
|
zola
|
||||||
|
zoom-us
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
cfg = config.local.apps.browsers;
|
|
||||||
in {
|
|
||||||
options.local.apps.browsers = {
|
|
||||||
enable = mkEnableOption "firefox settings";
|
|
||||||
|
|
||||||
workspace = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
description = ''
|
|
||||||
Workspace in which Firefox should open. If not set, Firefox will not open at startup.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.firefox.enable = true;
|
|
||||||
|
|
||||||
xsession.windowManager.i3.config.startup = optional (cfg.workspace != null) {
|
|
||||||
command = "${lib.getExe pkgs.i3-gaps} 'workspace ${cfg.workspace}; exec ${lib.getExe pkgs.firefox}'";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -12,6 +12,11 @@ in {
|
||||||
};
|
};
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.packages = [
|
home.packages = [
|
||||||
|
# Steam. todo: move to the steam module later
|
||||||
|
(pkgs.callPackage ./package.nix {})
|
||||||
|
pkgs.protonup
|
||||||
|
pkgs.winetricks
|
||||||
|
pkgs.protontricks
|
||||||
pkgs.lutris
|
pkgs.lutris
|
||||||
pkgs.openrct2
|
pkgs.openrct2
|
||||||
pkgs.prismlauncher
|
pkgs.prismlauncher
|
9
home/modules/gaming/package.nix
Normal file
9
home/modules/gaming/package.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
writeShellScriptBin,
|
||||||
|
steam-run,
|
||||||
|
steam,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
writeShellScriptBin "steam" ''
|
||||||
|
exec ${steam-run}/bin/steam-run ${steam}/bin/steam -console
|
||||||
|
''
|
|
@ -81,9 +81,8 @@ in {
|
||||||
./fonts.nix
|
./fonts.nix
|
||||||
./i3.nix
|
./i3.nix
|
||||||
./polybar.nix
|
./polybar.nix
|
||||||
./startx.nix
|
./startx.nix # move to ly once 24.11 comes out :(
|
||||||
./picom.nix
|
./picom.nix
|
||||||
./theme.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
config = let
|
config = let
|
||||||
|
@ -114,16 +113,45 @@ in {
|
||||||
picom.enable = true;
|
picom.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
xdg = {
|
gtk = {
|
||||||
enable = true;
|
enable = true;
|
||||||
mimeApps = {
|
|
||||||
enable = true;
|
iconTheme = {
|
||||||
defaultApplications = {
|
name = "Papirus-Dark";
|
||||||
"application/pdf" = with pkgs; ["qpdfview"];
|
package = pkgs.papirus-icon-theme;
|
||||||
"text/uri-list" = with pkgs; ["firefox"];
|
};
|
||||||
"x-scheme-handler/file" = with pkgs; ["kitty"];
|
theme = {
|
||||||
|
package = pkgs.materia-theme;
|
||||||
|
name = "Materia-dark";
|
||||||
|
};
|
||||||
|
|
||||||
|
gtk2.extraConfig = ''
|
||||||
|
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
|
||||||
|
gtk-menu-images=1
|
||||||
|
gtk-button-images=1
|
||||||
|
'';
|
||||||
|
|
||||||
|
gtk3.extraConfig = {
|
||||||
|
gtk-application-prefer-dark-theme = 1;
|
||||||
|
};
|
||||||
|
gtk4.extraConfig = {
|
||||||
|
gtk-application-prefer-dark-theme = 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#qt = { mentioning qt makes qt applications not work, I should probably check how to fix this
|
||||||
|
# enable = true;
|
||||||
|
# style.name = "bb10dark";
|
||||||
|
#};
|
||||||
|
|
||||||
|
home.sessionVariables = {
|
||||||
|
# Use gtk in jvm apps
|
||||||
|
_JAVA_OPTIONS = concatStringsSep " " [
|
||||||
|
"-Dawt.useSystemAAFontSettings=on"
|
||||||
|
"-Dswing.aatext=true"
|
||||||
|
"-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"
|
||||||
|
"-Dswing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,43 +45,47 @@ with lib; {
|
||||||
# y se sobreescriba las cosas que pongo acá
|
# y se sobreescriba las cosas que pongo acá
|
||||||
# NO QUITARLO. ver man home-configuration.nix
|
# NO QUITARLO. ver man home-configuration.nix
|
||||||
keybindings = mkOptionDefault {
|
keybindings = mkOptionDefault {
|
||||||
"${mod}+Return" = "exec ${lib.getExe pkgs.kitty} ${lib.getExe pkgs.tmux}";
|
"${mod}+Return" = "exec ${pkgs.kitty}/bin/kitty ${pkgs.tmux}/bin/tmux";
|
||||||
"${mod}+Tab" = "focus right";
|
"${mod}+Tab" = "focus right";
|
||||||
"${mod}+Shift+Tab" = "focus left";
|
"${mod}+Shift+Tab" = "focus left";
|
||||||
"${mod}+Shift+s" = "exec ${lib.getExe pkgs.maim} -s -u | ${lib.getExe pkgs.xclip} -selection clipboard -t image/png -i";
|
"${mod}+Shift+s" = "exec ${pkgs.maim}/bin/maim -s -u | ${pkgs.xclip}/bin/xclip -selection clipboard -t image/png -i";
|
||||||
"${mod}+Shift+w" = "move workspace to output right";
|
"${mod}+Shift+w" = "move workspace to output right";
|
||||||
"${mod}+l" = "exec ${lib.getExe pkgs.betterlockscreen} -l";
|
"${mod}+l" = "exec ${pkgs.betterlockscreen}/bin/betterlockscreen -l";
|
||||||
};
|
};
|
||||||
|
|
||||||
startup = [
|
startup = [
|
||||||
{
|
{
|
||||||
command = "${lib.getExe pkgs.xss-lock} --transfer-sleep-lock -- ${lib.getExe pkgs.i3lock} --nofork";
|
command = "${pkgs.xss-lock}/bin/xss-lock --transfer-sleep-lock -- ${pkgs.i3lock}/bin/i3lock --nofork";
|
||||||
notification = false;
|
notification = false;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
command = "${lib.getExe pkgs.networkmanagerapplet}";
|
command = "${pkgs.networkmanagerapplet}/bin/nm-applet";
|
||||||
notification = false;
|
notification = false;
|
||||||
}
|
}
|
||||||
#todo: sería nice hostear esta imagen en el server y fetchearla si no existe
|
#todo: sería nice hostear esta imagen en el server y fetchearla si no existe
|
||||||
{
|
{
|
||||||
command = "${lib.getExe pkgs.feh} --bg-fill ${config.home.homeDirectory}/Pictures/wallpapers/jupiter.png";
|
command = "${pkgs.feh}/bin/feh --bg-fill ${config.home.homeDirectory}/Pictures/wallpapers/jupiter.png";
|
||||||
notification = false;
|
notification = false;
|
||||||
always = true;
|
always = true;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
#todo: move this to telegram module
|
#todo: move this to browsers module
|
||||||
command = "${lib.getExe pkgs.i3-gaps} 'workspace 2; exec ${lib.getExe pkgs.tdesktop}'";
|
command = "${pkgs.i3-gaps}/bin/i3-msg 'workspace 1; exec ${pkgs.firefox}/bin/firefox'";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
command = "${lib.getExe pkgs.i3-gaps} 'workspace 2; exec ${lib.getExe pkgs.gajim}'";
|
#todo: move this to telegram module
|
||||||
|
command = "${pkgs.i3-gaps}/bin/i3-msg 'workspace 2; exec ${pkgs.tdesktop}/bin/telegram-desktop'";
|
||||||
}
|
}
|
||||||
|
#{
|
||||||
|
# command = "${pkgs.i3-gaps}/bin/i3-msg 'workspace 2; exec ${pkgs.element-desktop}/bin/element-desktop'";
|
||||||
|
#}
|
||||||
{
|
{
|
||||||
command = "${pkgs.systemd}/bin/systemctl --user restart polybar.service";
|
command = "${pkgs.systemd}/bin/systemctl --user restart polybar.service";
|
||||||
notification = false;
|
notification = false;
|
||||||
always = true;
|
always = true;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
command = "${lib.getExe pkgs.autorandr} -c";
|
command = "${pkgs.autorandr}/bin/autorandr -c";
|
||||||
notification = false;
|
notification = false;
|
||||||
always = true;
|
always = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; {
|
|
||||||
gtk = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
iconTheme = {
|
|
||||||
name = "Papirus-Dark";
|
|
||||||
package = pkgs.papirus-icon-theme;
|
|
||||||
};
|
|
||||||
theme = {
|
|
||||||
package = pkgs.materia-theme;
|
|
||||||
name = "Materia-dark";
|
|
||||||
};
|
|
||||||
|
|
||||||
gtk2.extraConfig = ''
|
|
||||||
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
|
|
||||||
gtk-menu-images=1
|
|
||||||
gtk-button-images=1
|
|
||||||
'';
|
|
||||||
|
|
||||||
gtk3.extraConfig = {
|
|
||||||
gtk-application-prefer-dark-theme = 1;
|
|
||||||
};
|
|
||||||
gtk4.extraConfig = {
|
|
||||||
gtk-application-prefer-dark-theme = 1;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.sessionVariables = {
|
|
||||||
# Use gtk in jvm apps
|
|
||||||
_JAVA_OPTIONS = concatStringsSep " " [
|
|
||||||
"-Dawt.useSystemAAFontSettings=on"
|
|
||||||
"-Dswing.aatext=true"
|
|
||||||
"-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"
|
|
||||||
"-Dswing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -40,11 +40,8 @@
|
||||||
neovim.enable = true;
|
neovim.enable = true;
|
||||||
gaming.enable = true;
|
gaming.enable = true;
|
||||||
yubikey.enable = true;
|
yubikey.enable = true;
|
||||||
|
browsers.enable = true;
|
||||||
defaultDesktopPack.enable = true;
|
defaultDesktopPack.enable = true;
|
||||||
firefox = {
|
|
||||||
enable = true;
|
|
||||||
workspace = 1;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
gui = {
|
gui = {
|
||||||
|
|
|
@ -8,4 +8,5 @@ with lib;
|
||||||
"steam-original"
|
"steam-original"
|
||||||
"steam-unwrapped"
|
"steam-unwrapped"
|
||||||
"steam-run"
|
"steam-run"
|
||||||
|
"zoom"
|
||||||
]
|
]
|
||||||
|
|
|
@ -13,7 +13,5 @@
|
||||||
./android.nix
|
./android.nix
|
||||||
./users.nix
|
./users.nix
|
||||||
./bluetooth.nix
|
./bluetooth.nix
|
||||||
./net.nix
|
|
||||||
./steam.nix
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,186 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; {
|
|
||||||
options.local.sys.nets = with lib.types;
|
|
||||||
mkOption {
|
|
||||||
readOnly = true;
|
|
||||||
|
|
||||||
type = attrsOf (submodule ({config, ...}: {
|
|
||||||
options = let
|
|
||||||
v4config = config.v4;
|
|
||||||
v6config = config.v6;
|
|
||||||
in {
|
|
||||||
hosts = mkOption {
|
|
||||||
default = {};
|
|
||||||
|
|
||||||
type = attrsOf (submodule {
|
|
||||||
options = {
|
|
||||||
v4 = mkOption {
|
|
||||||
default = null;
|
|
||||||
|
|
||||||
type = nullOr (submodule ({config, ...}: {
|
|
||||||
options = {
|
|
||||||
suffix = mkOption {
|
|
||||||
type = str;
|
|
||||||
};
|
|
||||||
|
|
||||||
address = mkOption {
|
|
||||||
type = str;
|
|
||||||
readOnly = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
cidr = mkOption {
|
|
||||||
type = str;
|
|
||||||
readOnly = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
single = mkOption {
|
|
||||||
type = str;
|
|
||||||
readOnly = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
address =
|
|
||||||
if v4config.bits == 0
|
|
||||||
then config.suffix
|
|
||||||
else if v4config.bits == 32
|
|
||||||
then v4config.subnet
|
|
||||||
else "${v4config.prefix}.${config.suffix}";
|
|
||||||
|
|
||||||
cidr = "${config.address}/${toString v4config.bits}";
|
|
||||||
single = "${config.address}/32";
|
|
||||||
};
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
|
|
||||||
v6 = mkOption {
|
|
||||||
default = null;
|
|
||||||
|
|
||||||
type = nullOr (submodule ({config, ...}: {
|
|
||||||
options = {
|
|
||||||
suffix = mkOption {
|
|
||||||
type = str;
|
|
||||||
};
|
|
||||||
|
|
||||||
address = mkOption {
|
|
||||||
type = str;
|
|
||||||
readOnly = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
cidr = mkOption {
|
|
||||||
type = str;
|
|
||||||
readOnly = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
single = mkOption {
|
|
||||||
type = str;
|
|
||||||
readOnly = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
address = let
|
|
||||||
hextets = fragment: length (splitString ":" fragment);
|
|
||||||
separator =
|
|
||||||
if doubleColon
|
|
||||||
then "::"
|
|
||||||
else ":";
|
|
||||||
doubleColon = hextets v6config.prefix + hextets config.suffix < 8;
|
|
||||||
|
|
||||||
joined =
|
|
||||||
if v6config.bits == 128
|
|
||||||
then v6config.prefix
|
|
||||||
else if v6config.bits == 0
|
|
||||||
then config.suffix
|
|
||||||
else "${v6config.prefix}${separator}${config.suffix}";
|
|
||||||
in
|
|
||||||
joined;
|
|
||||||
|
|
||||||
cidr = "${config.address}/${toString v6config.bits}";
|
|
||||||
single = "${config.address}/128";
|
|
||||||
};
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
};
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
v4 = mkOption {
|
|
||||||
default = null;
|
|
||||||
|
|
||||||
type = nullOr (submodule ({config, ...}: {
|
|
||||||
options = {
|
|
||||||
bits = mkOption {
|
|
||||||
type = enum [0 8 16 24 32];
|
|
||||||
};
|
|
||||||
|
|
||||||
prefix = mkOption {
|
|
||||||
type = str;
|
|
||||||
};
|
|
||||||
|
|
||||||
subnet = mkOption {
|
|
||||||
type = str;
|
|
||||||
readOnly = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
cidr = mkOption {
|
|
||||||
type = str;
|
|
||||||
readOnly = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
cidr = "${config.subnet}/${toString config.bits}";
|
|
||||||
subnet =
|
|
||||||
if config.bits != 0
|
|
||||||
then config.prefix + strings.replicate (4 - config.bits / 8) ".0"
|
|
||||||
else "0.0.0.0";
|
|
||||||
};
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
|
|
||||||
v6 = mkOption {
|
|
||||||
default = null;
|
|
||||||
|
|
||||||
type = nullOr (submodule ({config, ...}: {
|
|
||||||
options = {
|
|
||||||
bits = mkOption {
|
|
||||||
type =
|
|
||||||
addCheck (ints.between 0 128) (b: mod b 4 == 0)
|
|
||||||
// {
|
|
||||||
description = "IPv6 subnet bits at nibble boundary";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
prefix = mkOption {
|
|
||||||
type = str;
|
|
||||||
};
|
|
||||||
|
|
||||||
subnet = mkOption {
|
|
||||||
type = str;
|
|
||||||
readOnly = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
cidr = mkOption {
|
|
||||||
type = str;
|
|
||||||
readOnly = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
cidr = "${config.subnet}/${toString config.bits}";
|
|
||||||
subnet =
|
|
||||||
if config.bits == 128 || length (splitString "::" config.prefix) > 1
|
|
||||||
then config.prefix
|
|
||||||
else "${config.prefix}::";
|
|
||||||
};
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
cfg = config.local.sys.steam;
|
|
||||||
in {
|
|
||||||
options.local.sys.steam = {
|
|
||||||
enable = mkEnableOption "steam settings";
|
|
||||||
};
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.steam = {
|
|
||||||
enable = true;
|
|
||||||
remotePlay.openFirewall = true;
|
|
||||||
dedicatedServer.openFirewall = true;
|
|
||||||
localNetworkGameTransfers.openFirewall = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
environment = {
|
|
||||||
systemPackages = with pkgs; [
|
|
||||||
protontricks
|
|
||||||
protonup
|
|
||||||
protonup-ng
|
|
||||||
winetricks
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -19,7 +19,6 @@
|
||||||
graphics.enable = true;
|
graphics.enable = true;
|
||||||
virtualisation.enable = true;
|
virtualisation.enable = true;
|
||||||
androidSupport.enable = true;
|
androidSupport.enable = true;
|
||||||
steam.enable = true;
|
|
||||||
|
|
||||||
users = {
|
users = {
|
||||||
fabian = {
|
fabian = {
|
||||||
|
|
|
@ -13,7 +13,6 @@ with lib; {
|
||||||
flakes.impermanence.nixosModule
|
flakes.impermanence.nixosModule
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./srv
|
./srv
|
||||||
./networkMap.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
local.sys = {
|
local.sys = {
|
||||||
|
@ -51,67 +50,9 @@ with lib; {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
networking.firewall.allowedUDPPorts = [51820]; #TODO
|
systemd.extraConfig = ''
|
||||||
|
|
||||||
systemd = {
|
|
||||||
extraConfig = ''
|
|
||||||
DefaultTimeoutStartSec=900s
|
DefaultTimeoutStartSec=900s
|
||||||
'';
|
'';
|
||||||
|
|
||||||
network = let
|
|
||||||
inherit (config.local.sys) nets;
|
|
||||||
in {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
netdevs = {
|
|
||||||
wg-vpn = {
|
|
||||||
netdevConfig = {
|
|
||||||
Name = "wg-vpn";
|
|
||||||
Kind = "wireguard";
|
|
||||||
};
|
|
||||||
|
|
||||||
wireguardConfig = {
|
|
||||||
PrivateKeyFile = "/var/trust/wg/vpn/key.priv";
|
|
||||||
ListenPort = "51820";
|
|
||||||
};
|
|
||||||
|
|
||||||
wireguardPeers = [
|
|
||||||
{
|
|
||||||
PublicKey = "wwUp3Uu/rSxbp+6J745O+cpnZHGWOJYWfWEsTjRE3yU=";
|
|
||||||
PresharedKeyFile = "/var/trust/wg/vpn/vps-posixlycorrect.psk";
|
|
||||||
AllowedIPs = ["${nets.vpn-posixlycorrect.v6.cidr}"];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
PublicKey = "YFqg/ED26KygSRSmGzvUXpwnXPqMOI3R3caVfAtHVks=";
|
|
||||||
PresharedKeyFile = "/var/trust/wg/vpn/vps-pixel8.psk";
|
|
||||||
AllowedIPs = ["${nets.vpn-pixel8.v6.cidr}"];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networks = {
|
|
||||||
wg-vpn = {
|
|
||||||
name = "wg-vpn";
|
|
||||||
|
|
||||||
networkConfig = {
|
|
||||||
Address = [
|
|
||||||
nets.vpn-vps.hosts.vps.v6.cidr
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
routes = [
|
|
||||||
{
|
|
||||||
Destination = nets.vpn.v6.cidr;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
Source = nets.vpn.v6.cidr;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
time.timeZone = "Europe/Amsterdam";
|
time.timeZone = "Europe/Amsterdam";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,78 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
flakes,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; {
|
|
||||||
local.sys.nets = {
|
|
||||||
default = {
|
|
||||||
v4 = {
|
|
||||||
bits = 32;
|
|
||||||
prefix = "37.205.12.34";
|
|
||||||
};
|
|
||||||
|
|
||||||
v6 = {
|
|
||||||
bits = 64;
|
|
||||||
prefix = "2a03:3b40:fe:102";
|
|
||||||
};
|
|
||||||
|
|
||||||
hosts = {
|
|
||||||
vps.v6.suffix = "1";
|
|
||||||
vps.v4.suffix = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
vpn = {
|
|
||||||
v6 = {
|
|
||||||
bits = 48;
|
|
||||||
prefix = "2a03:3b40:2b";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
vpn-vps = {
|
|
||||||
v6 = {
|
|
||||||
bits = 64;
|
|
||||||
prefix = "2a03:3b40:2b:1000";
|
|
||||||
};
|
|
||||||
|
|
||||||
hosts = {
|
|
||||||
vps.v6.suffix = "1";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
vpn-posixlycorrect = {
|
|
||||||
v6 = {
|
|
||||||
bits = 64;
|
|
||||||
prefix = "2a03:3b40:2b:1001";
|
|
||||||
};
|
|
||||||
|
|
||||||
hosts = {
|
|
||||||
posixlycorrect.v6.suffix = "1";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
vpn-pixel8 = {
|
|
||||||
v6 = {
|
|
||||||
bits = 64;
|
|
||||||
prefix = "2a03:3b40:2b:1002";
|
|
||||||
};
|
|
||||||
|
|
||||||
hosts = {
|
|
||||||
pixel8.v6.suffix = "1";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
vpn-t14 = {
|
|
||||||
v6 = {
|
|
||||||
bits = 64;
|
|
||||||
prefix = "2a03:3b40:2b:1003";
|
|
||||||
};
|
|
||||||
|
|
||||||
hosts = {
|
|
||||||
t14.v6.suffix = "1";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -18,6 +18,5 @@ with lib; {
|
||||||
./shiori.nix
|
./shiori.nix
|
||||||
./calibre-web.nix
|
./calibre-web.nix
|
||||||
./immich.nix
|
./immich.nix
|
||||||
./wiki-js.nix
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,10 +47,12 @@ with lib; {
|
||||||
LANDING_PAGE = "explore";
|
LANDING_PAGE = "explore";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# You can temporarily allow registration to create an admin user.
|
||||||
service.DISABLE_REGISTRATION = true;
|
service.DISABLE_REGISTRATION = true;
|
||||||
|
|
||||||
|
# ver https://github.com/nektos/act
|
||||||
actions = {
|
actions = {
|
||||||
ENABLED = true;
|
ENABLED = false;
|
||||||
};
|
};
|
||||||
mailer = {
|
mailer = {
|
||||||
ENABLED = false;
|
ENABLED = false;
|
||||||
|
|
|
@ -28,46 +28,6 @@ with lib; {
|
||||||
environment = {
|
environment = {
|
||||||
IMMICH_TELEMETRY_EXCLUDE = "host,api,io,repo,job";
|
IMMICH_TELEMETRY_EXCLUDE = "host,api,io,repo,job";
|
||||||
};
|
};
|
||||||
settings = {
|
|
||||||
machineLearning = {
|
|
||||||
enabled = false;
|
|
||||||
};
|
|
||||||
job = {
|
|
||||||
backgroundTask = {
|
|
||||||
concurrency = 1;
|
|
||||||
};
|
|
||||||
smartSearch = {
|
|
||||||
concurrency = 1;
|
|
||||||
};
|
|
||||||
metadataExtraction = {
|
|
||||||
concurrency = 1;
|
|
||||||
};
|
|
||||||
faceDetection = {
|
|
||||||
concurrency = 1;
|
|
||||||
};
|
|
||||||
search = {
|
|
||||||
concurrency = 1;
|
|
||||||
};
|
|
||||||
sidecar = {
|
|
||||||
concurrency = 1;
|
|
||||||
};
|
|
||||||
library = {
|
|
||||||
concurrency = 1;
|
|
||||||
};
|
|
||||||
migration = {
|
|
||||||
concurrency = 1;
|
|
||||||
};
|
|
||||||
thumbnailGeneration = {
|
|
||||||
concurrency = 1;
|
|
||||||
};
|
|
||||||
videoConversion = {
|
|
||||||
concurrency = 1;
|
|
||||||
};
|
|
||||||
notifications = {
|
|
||||||
concurrency = 1;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
{
|
{
|
||||||
config,
|
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; {
|
||||||
inherit (config.local.sys) nets;
|
|
||||||
in {
|
|
||||||
networking = {
|
networking = {
|
||||||
nftables.enable = false; # learn how to use this later
|
nftables.enable = true;
|
||||||
firewall = {
|
firewall = {
|
||||||
enable = true;
|
enable = true;
|
||||||
allowedTCPPorts = [80 443];
|
allowedTCPPorts = [80 443];
|
||||||
|
@ -55,11 +52,7 @@ in {
|
||||||
fail2ban = {
|
fail2ban = {
|
||||||
enable = true;
|
enable = true;
|
||||||
bantime = "10m";
|
bantime = "10m";
|
||||||
ignoreIP = [
|
ignoreIP = ["37.205.12.34"]; # Never ban the server's own IP
|
||||||
nets.default.hosts.vps.v6.cidr
|
|
||||||
nets.default.hosts.vps.v4.address
|
|
||||||
nets.vpn.v6.cidr
|
|
||||||
];
|
|
||||||
bantime-increment = {
|
bantime-increment = {
|
||||||
enable = true;
|
enable = true;
|
||||||
formula = "ban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)";
|
formula = "ban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)";
|
||||||
|
|
|
@ -13,7 +13,6 @@ with lib; {
|
||||||
openDefaultPorts = true;
|
openDefaultPorts = true;
|
||||||
guiAddress = "127.0.0.1:8384";
|
guiAddress = "127.0.0.1:8384";
|
||||||
settings.options.urAccepted = -1;
|
settings.options.urAccepted = -1;
|
||||||
dataDir = "/mnt/export2179/syncthing";
|
|
||||||
relay = {
|
relay = {
|
||||||
enable = true;
|
enable = true;
|
||||||
pools = [];
|
pools = [];
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; {
|
|
||||||
systemd.services.wiki-js = {
|
|
||||||
requires = ["postgresql.service"];
|
|
||||||
after = ["postgresql.service"];
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
|
||||||
nginx = {
|
|
||||||
virtualHosts."wjs.posixlycorrect.com" = {
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
extraConfig = ''
|
|
||||||
proxy_headers_hash_max_size 512;
|
|
||||||
proxy_headers_hash_bucket_size 128;
|
|
||||||
'';
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://127.0.0.1:3000";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
wiki-js = {
|
|
||||||
enable = true;
|
|
||||||
environmentFile = "/var/trust/wiki-js/env.txt";
|
|
||||||
settings = {
|
|
||||||
bindIP = "127.0.0.1";
|
|
||||||
port = 3000;
|
|
||||||
db = {
|
|
||||||
db = "wiki-js";
|
|
||||||
user = "wiki-js";
|
|
||||||
type = "postgres";
|
|
||||||
host = "/run/postgresql";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
postgresql = {
|
|
||||||
enable = true;
|
|
||||||
ensureDatabases = ["wiki-js"];
|
|
||||||
ensureUsers = [
|
|
||||||
{
|
|
||||||
name = "wiki-js";
|
|
||||||
ensureDBOwnership = true;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
Loading…
Reference in a new issue