diff --git a/config/base.nix b/config/base.nix index 5db4c6e..5f82857 100644 --- a/config/base.nix +++ b/config/base.nix @@ -124,29 +124,7 @@ sops ; }; - variables = - let - XDG_DATA_HOME = "\${HOME}/.local/share"; - XDG_CONFIG_HOME = "\${HOME}/.config"; - XDG_CACHE_HOME = "\${HOME}/.cache"; - in - { - # PATH - inherit XDG_DATA_HOME XDG_CONFIG_HOME XDG_CACHE_HOME; - XDG_BIN_HOME = "\${HOME}/.local/bin"; - XDG_STATE_HOME = "\${HOME}/.local/state"; - # DEV PATH - PSQL_HISTORY = "${XDG_DATA_HOME}/psql_history"; - REDISCLI_HISTFILE = "${XDG_DATA_HOME}/redis/rediscli_history"; - WINEPREFIX = "${XDG_DATA_HOME}/wine"; - # OPTIONS - ELECTRUMDIR = "${XDG_DATA_HOME}/electrum"; - WGETRC = "${XDG_CONFIG_HOME}/wgetrc"; - XCOMPOSECACHE = "${XDG_CACHE_HOME}/X11/xcompose"; - "_JAVA_OPTIONS" = "-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/java"; - ORG_DEVICE = "workstation"; - PATH = [ "\${HOME}/.local/bin" ]; - }; + variables = inputs.self.lib.xdgEnvironment; }; programs = { nh = { diff --git a/config/home-manager.nix b/config/home-manager.nix index e3a96c4..1e2d4ed 100644 --- a/config/home-manager.nix +++ b/config/home-manager.nix @@ -14,22 +14,7 @@ let ${pokemon-colorscripts}/bin/pokemon-colorscripts -r --no-title export command_timeout=60 ''; - commonAliases = { - cp = "cp -i"; - mv = "mv -i"; - mkdir = "mkdir -p"; - mkcd = "(){ mkdir -p \"$1\" && cd \"$1\" }"; - copy = "xclip -selection clipboard"; - cdp = "pwd | copy"; - cfp = "(){ readlink -f \"$1\" | copy }"; - ".." = "cd .."; - "..." = "cd ../.."; - ".3" = "cd ../../.."; - ".4" = "cd ../../../.."; - ".5" = "cd ../../../../.."; - c = "cat"; - sc = "systemctl --user"; - jc = "journalctl --user -xefu"; + commonAliases = inputs.self.lib.commonAliases // { open-gallery = '' cd /srv/pool/scrapping/JawZ/gallery-dl && xdg-open "$(${fd}/bin/fd . ./ Husbands wikifeet -tdirectory -d 1 | ${fzf}/bin/fzf -i)"''; diff --git a/config/jawz.nix b/config/jawz.nix index 363ae8a..79affc4 100644 --- a/config/jawz.nix +++ b/config/jawz.nix @@ -1,11 +1,12 @@ -{ config, lib, ... }: +{ + config, + lib, + inputs, + ... +}: let inherit (config.networking) hostName; - nixosHosts = - lib.attrNames config.my.ips - |> lib.filter ( - name: !(lib.hasPrefix "wg-" name) && name != "vps" && name != "router" && name != hostName - ); + nixosHosts = inputs.self.lib.getNixosHosts config.my.ips hostName lib; nixosHostsMatch = lib.concatStringsSep " " nixosHosts; in { diff --git a/environments/hyprland.nix b/environments/hyprland.nix index 07b28a4..f3173f4 100644 --- a/environments/hyprland.nix +++ b/environments/hyprland.nix @@ -23,13 +23,11 @@ in wl-clipboard-rs wf-recorder grimblast # screenshots - mako # notification daemon libnotify # dependency of mako swaylock-effects # screen locker yazi # file manager imv # images - playerctl # media player control ; }; @@ -78,27 +76,22 @@ in "${mod}, bracketright, changegroupactive, f" "${mod}, S, exec, wofi --show drun icons" "${mod}, P, pin, active" - "${mod}, left, movefocus, l" "${mod}, right, movefocus, r" "${mod}, up, movefocus, u" "${mod}, down, movefocus, d" - "${mod}, h, movefocus, l" "${mod}, l, movefocus, r" "${mod}, k, movefocus, u" "${mod}, j, movefocus, d" - "${mod} SHIFT, left, movewindow, l" "${mod} SHIFT, right, movewindow, r" "${mod} SHIFT, up, movewindow, u" "${mod} SHIFT, down, movewindow, d" - "${mod} SHIFT, h, movewindow, l" "${mod} SHIFT, l, movewindow, r" "${mod} SHIFT, k, movewindow, u" "${mod} SHIFT, j, movewindow, d" - "${mod}, 1, workspace, 1" "${mod}, 2, workspace, 2" "${mod}, 3, workspace, 3" @@ -119,7 +112,6 @@ in "${mod} SHIFT, 8, movetoworkspace, 8" "${mod} SHIFT, 9, movetoworkspace, 9" "${mod} SHIFT, 0, movetoworkspace, 10" - "${mod}, F3, exec, grimblast save area ~/Pictures/screenshots/$(date +'%Y-%m-%d_%H-%M-%S').png" "${mod} SHIFT, F3, exec, grimblast save screen ~/Pictures/screenshots/$(date +'%Y-%m-%d_%H-%M-%S').png" ]; @@ -128,12 +120,10 @@ in "${mod} SHIFT, l, moveactive, 20 0" "${mod} SHIFT, k, moveactive, 0 -20" "${mod} SHIFT, j, moveactive, 0 20" - "${mod} CTRL, l, resizeactive, 30 0" "${mod} CTRL, h, resizeactive, -30 0" "${mod} CTRL, k, resizeactive, 0 -10" "${mod} CTRL, j, resizeactive, 0 10" - ",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+" ",XF86AudioLowerVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%-" ]; diff --git a/environments/waybar-style.nix b/environments/waybar-style.nix index 5193ab2..e74045b 100644 --- a/environments/waybar-style.nix +++ b/environments/waybar-style.nix @@ -30,12 +30,10 @@ in border: none; min-width: 20px; } - #workspaces button.active { background: #${colors.base02}; color: #${colors.base05}; } - #workspaces button:hover { background: #${colors.base01}; color: #${colors.base04}; diff --git a/flake.nix b/flake.nix index c3b6923..5619e78 100644 --- a/flake.nix +++ b/flake.nix @@ -1,6 +1,5 @@ { description = "JawZ NixOS flake setup"; - inputs = { flake-parts.url = "github:hercules-ci/flake-parts"; nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-25.05"; diff --git a/modules/modules.nix b/modules/modules.nix index 4857ebc..2a7b1e4 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -1,22 +1,21 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let filterNames = file: file != "librewolf.nix"; - autoImport = - dir: - builtins.readDir ./${dir} - |> builtins.attrNames - |> builtins.filter (file: builtins.match ".*\\.nix" file != null && filterNames file) - |> map (file: ./${dir}/${file}); in { imports = - autoImport "apps" - ++ autoImport "dev" - ++ autoImport "scripts" - ++ autoImport "servers" - ++ autoImport "services" - ++ autoImport "shell" - ++ autoImport "network" + inputs.self.lib.autoImport ./apps filterNames + ++ inputs.self.lib.autoImport ./dev filterNames + ++ inputs.self.lib.autoImport ./scripts filterNames + ++ inputs.self.lib.autoImport ./servers filterNames + ++ inputs.self.lib.autoImport ./services filterNames + ++ inputs.self.lib.autoImport ./shell filterNames + ++ inputs.self.lib.autoImport ./network filterNames ++ [ ./nix/build.nix ./users/nixremote.nix diff --git a/modules/network/nginx.nix b/modules/network/nginx.nix index 099e7fc..3c70625 100644 --- a/modules/network/nginx.nix +++ b/modules/network/nginx.nix @@ -1,6 +1,10 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let - setup = import ../factories/mkserver.nix { inherit lib config; }; proxyReverseServices = [ "firefox-syncserver" "readeck" @@ -44,11 +48,11 @@ let cfg = config.my.servers.${serviceName}; proxyFunc = if serviceConfig.type == "proxyReverse" then - setup.proxyReverse + inputs.self.lib.proxyReverse else if serviceConfig.type == "proxyReverseFix" then - setup.proxyReverseFix + inputs.self.lib.proxyReverseFix else if serviceConfig.type == "proxyReversePrivate" then - setup.proxyReversePrivate + inputs.self.lib.proxyReversePrivate else throw "Unknown proxy type: ${serviceConfig.type}"; in diff --git a/modules/servers/atticd.nix b/modules/servers/atticd.nix index 37d357e..3b0e619 100644 --- a/modules/servers/atticd.nix +++ b/modules/servers/atticd.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.atticd; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.atticd = setup.mkOptions "atticd" "cache" 2343; + options.my.servers.atticd = inputs.self.lib.mkServerOptions "atticd" "cache" 2343 lib; config = lib.mkIf (cfg.enable && config.my.secureHost) { sops.secrets."private_cache_keys/atticd".sopsFile = ../../secrets/keys.yaml; services.atticd = { diff --git a/modules/servers/audiobookshelf.nix b/modules/servers/audiobookshelf.nix index cdcb04d..b9b0698 100644 --- a/modules/servers/audiobookshelf.nix +++ b/modules/servers/audiobookshelf.nix @@ -1,10 +1,16 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.audiobookshelf; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.audiobookshelf = setup.mkOptions "audiobookshelf" "audiobooks" 5687; + options.my.servers.audiobookshelf = + inputs.self.lib.mkServerOptions "audiobookshelf" "audiobooks" 5687 + lib; config = lib.mkIf (cfg.enable && config.my.secureHost) { my.servers.audiobookshelf.enableSocket = true; services.audiobookshelf = { diff --git a/modules/servers/bazarr.nix b/modules/servers/bazarr.nix index b7617ac..3f0369b 100644 --- a/modules/servers/bazarr.nix +++ b/modules/servers/bazarr.nix @@ -1,10 +1,16 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.bazarr; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.bazarr = setup.mkOptions "bazarr" "subs" config.services.bazarr.listenPort; + options.my.servers.bazarr = + inputs.self.lib.mkServerOptions "bazarr" "subs" config.services.bazarr.listenPort + lib; config.services.bazarr = lib.mkIf cfg.enable { inherit (cfg) enable; group = "piracy"; diff --git a/modules/servers/drpp.nix b/modules/servers/drpp.nix index 9481770..541fb5c 100644 --- a/modules/servers/drpp.nix +++ b/modules/servers/drpp.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.drpp; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.drpp = setup.mkOptions "drpp" "drpp" 0; + options.my.servers.drpp = inputs.self.lib.mkServerOptions "drpp" "drpp" 0 lib; config.virtualisation.oci-containers.containers.drpp = lib.mkIf cfg.enable { image = "ghcr.io/phin05/discord-rich-presence-plex:latest"; environment = { diff --git a/modules/servers/firefox-syncserver.nix b/modules/servers/firefox-syncserver.nix index 04e486d..e39329a 100644 --- a/modules/servers/firefox-syncserver.nix +++ b/modules/servers/firefox-syncserver.nix @@ -1,10 +1,16 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.firefox-syncserver; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.firefox-syncserver = setup.mkOptions "firefox-syncserver" "sync" 4233; + options.my.servers.firefox-syncserver = + inputs.self.lib.mkServerOptions "firefox-syncserver" "sync" 4233 + lib; config = lib.mkIf (cfg.enable && config.my.secureHost) { # sops.secrets.firefox-syncserver.sopsFile = ../../secrets/env.yaml; services.firefox-syncserver = { diff --git a/modules/servers/flame.nix b/modules/servers/flame.nix index f77c929..fc98487 100644 --- a/modules/servers/flame.nix +++ b/modules/servers/flame.nix @@ -1,14 +1,18 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.flame; cfgS = config.my.servers.flameSecret; enable = (cfg.enable || cfgS.enable) && config.my.secureHost; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { options.my.servers = { - flame = setup.mkOptions "flame" "start" 5005; - flameSecret = setup.mkOptions "flameSecret" "qampqwn4wprhqny8h8zj" 5007; + flame = inputs.self.lib.mkServerOptions "flame" "start" 5005 lib; + flameSecret = inputs.self.lib.mkServerOptions "flameSecret" "qampqwn4wprhqny8h8zj" 5007 lib; }; config = lib.mkIf enable { sops.secrets = { diff --git a/modules/servers/gitea.nix b/modules/servers/gitea.nix index afdb1a1..ba23892 100644 --- a/modules/servers/gitea.nix +++ b/modules/servers/gitea.nix @@ -1,19 +1,19 @@ { lib, config, + inputs, pkgs, ... }: let cfg = config.my.servers.gitea; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { imports = [ ../nix/gitea-actions-runners/ryujinx.nix ../nix/gitea-actions-runners/nixos.nix ]; - options.my.servers.gitea = setup.mkOptions "gitea" "git" 9083; + options.my.servers.gitea = inputs.self.lib.mkServerOptions "gitea" "git" 9083 lib; config = lib.mkIf (cfg.enable && config.my.secureHost) { sops.secrets.gitea.sopsFile = ../../secrets/env.yaml; services.gitea = { diff --git a/modules/servers/homepage.nix b/modules/servers/homepage.nix index 97a269b..1761dba 100644 --- a/modules/servers/homepage.nix +++ b/modules/servers/homepage.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.homepage; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.homepage = setup.mkOptions "homepage" "home" 8082; + options.my.servers.homepage = inputs.self.lib.mkServerOptions "homepage" "home" 8082 lib; config = lib.mkIf config.my.secureHost { sops.secrets = lib.mkIf cfg.enable { homepage.sopsFile = ../../secrets/homepage.yaml; diff --git a/modules/servers/jellyfin.nix b/modules/servers/jellyfin.nix index 3cf1469..13a0464 100644 --- a/modules/servers/jellyfin.nix +++ b/modules/servers/jellyfin.nix @@ -19,10 +19,9 @@ let pkgs.gum sub-sync ]; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.jellyfin = setup.mkOptions "jellyfin" "flix" 8096; + options.my.servers.jellyfin = inputs.self.lib.mkServerOptions "jellyfin" "flix" 8096 lib; config = lib.mkIf (cfg.enable && config.my.secureHost) { environment.systemPackages = [ pkgs.jellyfin-ffmpeg diff --git a/modules/servers/kavita.nix b/modules/servers/kavita.nix index c37f0cc..55600d3 100644 --- a/modules/servers/kavita.nix +++ b/modules/servers/kavita.nix @@ -1,10 +1,16 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.kavita; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.kavita = setup.mkOptions "kavita" "library" config.services.kavita.settings.Port; + options.my.servers.kavita = + inputs.self.lib.mkServerOptions "kavita" "library" config.services.kavita.settings.Port + lib; config = lib.mkIf (cfg.enable && config.my.secureHost) { sops.secrets.kavita-token = { owner = config.users.users.kavita.name; diff --git a/modules/servers/lidarr.nix b/modules/servers/lidarr.nix index 86204a3..58c7b01 100644 --- a/modules/servers/lidarr.nix +++ b/modules/servers/lidarr.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.lidarr; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.lidarr = setup.mkOptions "lidarr" "music" 8686; + options.my.servers.lidarr = inputs.self.lib.mkServerOptions "lidarr" "music" 8686 lib; config.virtualisation.oci-containers.containers.lidarr = lib.mkIf cfg.enable { autoStart = true; image = "linuxserver/lidarr:version-2.13.3.4711"; diff --git a/modules/servers/maloja.nix b/modules/servers/maloja.nix index e2e3df4..21b3192 100644 --- a/modules/servers/maloja.nix +++ b/modules/servers/maloja.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.maloja; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.maloja = setup.mkOptions "maloja" "maloja" 42010; + options.my.servers.maloja = inputs.self.lib.mkServerOptions "maloja" "maloja" 42010 lib; config = lib.mkIf (cfg.enable && config.my.secureHost) { sops.secrets.maloja.sopsFile = ../../secrets/env.yaml; virtualisation.oci-containers.containers.maloja = { diff --git a/modules/servers/mealie.nix b/modules/servers/mealie.nix index 5187b03..f3865d7 100644 --- a/modules/servers/mealie.nix +++ b/modules/servers/mealie.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.mealie; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.mealie = setup.mkOptions "mealie" "mealie" 9925; + options.my.servers.mealie = inputs.self.lib.mkServerOptions "mealie" "mealie" 9925 lib; config = lib.mkIf (cfg.enable && config.my.secureHost) { sops.secrets.mealie.sopsFile = ../../secrets/env.yaml; services.mealie = { diff --git a/modules/servers/metube.nix b/modules/servers/metube.nix index c9898e8..02a3f19 100644 --- a/modules/servers/metube.nix +++ b/modules/servers/metube.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.metube; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.metube = setup.mkOptions "metube" "bajameesta" 8881; + options.my.servers.metube = inputs.self.lib.mkServerOptions "metube" "bajameesta" 8881 lib; config.virtualisation.oci-containers.containers.metube = lib.mkIf cfg.enable { image = "ghcr.io/alexta69/metube:latest"; ports = [ "${toString cfg.port}:8081" ]; diff --git a/modules/servers/microbin.nix b/modules/servers/microbin.nix index 60d73cb..0313d73 100644 --- a/modules/servers/microbin.nix +++ b/modules/servers/microbin.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.microbin; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.microbin = setup.mkOptions "microbin" "copy" 8086; + options.my.servers.microbin = inputs.self.lib.mkServerOptions "microbin" "copy" 8086 lib; config.services.microbin = lib.mkIf (cfg.enable && config.my.secureHost) { inherit (cfg) enable; settings = { diff --git a/modules/servers/multi-scrobbler.nix b/modules/servers/multi-scrobbler.nix index 5aef9b1..2d9b942 100644 --- a/modules/servers/multi-scrobbler.nix +++ b/modules/servers/multi-scrobbler.nix @@ -1,10 +1,16 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.multi-scrobbler; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.multi-scrobbler = setup.mkOptions "multi-scrobbler" "scrobble" 9078; + options.my.servers.multi-scrobbler = + inputs.self.lib.mkServerOptions "multi-scrobbler" "scrobble" 9078 + lib; config = lib.mkIf (cfg.enable && config.my.secureHost) { sops.secrets.multi-scrobbler.sopsFile = ../../secrets/env.yaml; virtualisation.oci-containers.containers.multi-scrobbler = { diff --git a/modules/servers/nextcloud.nix b/modules/servers/nextcloud.nix index 9a59d27..1431b34 100644 --- a/modules/servers/nextcloud.nix +++ b/modules/servers/nextcloud.nix @@ -31,12 +31,11 @@ let pytensorflow = pkgs.python311.withPackages (ps: [ ps.tensorflow ]); cfg = config.my.servers.nextcloud; cfgC = config.my.servers.collabora; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { options.my.servers = { - nextcloud = setup.mkOptions "nextcloud" "cloud" 80; - collabora = setup.mkOptions "collabora" "collabora" 9980; + nextcloud = inputs.self.lib.mkServerOptions "nextcloud" "cloud" 80 lib; + collabora = inputs.self.lib.mkServerOptions "collabora" "collabora" 9980 lib; go-vod.enable = lib.mkEnableOption "Go-VOD video transcoding service"; }; config = lib.mkIf (cfg.enable && config.my.servers.postgres.enable && config.my.secureHost) { diff --git a/modules/servers/nix-serve.nix b/modules/servers/nix-serve.nix index 1489a75..fdceba8 100644 --- a/modules/servers/nix-serve.nix +++ b/modules/servers/nix-serve.nix @@ -1,15 +1,15 @@ { lib, + inputs, config, pkgs, ... }: let cfg = config.my.servers.nix-serve; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.nix-serve = setup.mkOptions "nix-serve" "cache" 5000; + options.my.servers.nix-serve = inputs.self.lib.mkServerOptions "nix-serve" "cache" 5000 lib; config = lib.mkIf (cfg.enable && config.my.secureHost) { sops.secrets."private_cache_keys/miniserver".sopsFile = ../../secrets/keys.yaml; services.nix-serve = { diff --git a/modules/servers/ombi.nix b/modules/servers/ombi.nix index 24c4beb..11050d8 100644 --- a/modules/servers/ombi.nix +++ b/modules/servers/ombi.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.ombi; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.ombi = setup.mkOptions "ombi" "requests" 3425; + options.my.servers.ombi = inputs.self.lib.mkServerOptions "ombi" "requests" 3425 lib; config.services.ombi = lib.mkIf cfg.enable { inherit (cfg) enable port; }; diff --git a/modules/servers/plex-discord-bot.nix b/modules/servers/plex-discord-bot.nix index 6ee478a..9a8175d 100644 --- a/modules/servers/plex-discord-bot.nix +++ b/modules/servers/plex-discord-bot.nix @@ -1,11 +1,15 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.plex-discord-bot; - setup = import ../factories/mkserver.nix { inherit lib config; }; name = "plex-discord-bot"; in { - options.my.servers.plex-discord-bot = setup.mkOptions name name 0; + options.my.servers.plex-discord-bot = inputs.self.lib.mkServerOptions name name 0 lib; config.virtualisation.oci-containers.containers.plex-discord-bot = lib.mkIf cfg.enable { image = "ghcr.io/phin05/discord-rich-presence-plex:latest"; environment = { diff --git a/modules/servers/plex.nix b/modules/servers/plex.nix index 0e805ea..2b89770 100644 --- a/modules/servers/plex.nix +++ b/modules/servers/plex.nix @@ -1,14 +1,14 @@ { lib, + inputs, config, ... }: let cfg = config.my.servers.plex; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.plex = setup.mkOptions "plex" "plex" 32400; + options.my.servers.plex = inputs.self.lib.mkServerOptions "plex" "plex" 32400 lib; config.services = lib.mkIf (cfg.enable && config.my.secureHost) { plex = { inherit (cfg) enable; diff --git a/modules/servers/portfolio.nix b/modules/servers/portfolio.nix index 417be54..c987c09 100644 --- a/modules/servers/portfolio.nix +++ b/modules/servers/portfolio.nix @@ -1,14 +1,14 @@ { config, lib, + inputs, ... }: let cfg = config.my.websites.portfolio; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.websites.portfolio = setup.mkOptions "portfolio" "portfolio" 0; + options.my.websites.portfolio = inputs.self.lib.mkServerOptions "portfolio" "portfolio" 0 lib; config.services.nginx.virtualHosts."danilo-reyes.com" = lib.mkIf cfg.enableProxy { forceSSL = true; enableACME = true; diff --git a/modules/servers/prowlarr.nix b/modules/servers/prowlarr.nix index 8474cd0..e11bcb3 100644 --- a/modules/servers/prowlarr.nix +++ b/modules/servers/prowlarr.nix @@ -1,14 +1,14 @@ { lib, + inputs, config, ... }: let cfg = config.my.servers.prowlarr; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.prowlarr = setup.mkOptions "prowlarr" "indexer" 9696; + options.my.servers.prowlarr = inputs.self.lib.mkServerOptions "prowlarr" "indexer" 9696 lib; config = lib.mkIf cfg.enable { users.users.prowlarr = { group = "piracy"; diff --git a/modules/servers/radarr.nix b/modules/servers/radarr.nix index 2f3ace1..16156ad 100644 --- a/modules/servers/radarr.nix +++ b/modules/servers/radarr.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.radarr; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.radarr = setup.mkOptions "radarr" "movies" 7878; + options.my.servers.radarr = inputs.self.lib.mkServerOptions "radarr" "movies" 7878 lib; config = lib.mkIf cfg.enable { services.radarr = { inherit (cfg) enable; diff --git a/modules/servers/readeck.nix b/modules/servers/readeck.nix index 1c7181b..04e5a28 100644 --- a/modules/servers/readeck.nix +++ b/modules/servers/readeck.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.readeck; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.readeck = setup.mkOptions "readeck" "laters" 9546; + options.my.servers.readeck = inputs.self.lib.mkServerOptions "readeck" "laters" 9546 lib; config = lib.mkIf (cfg.enable && config.my.secureHost) { sops.secrets.readeck.sopsFile = ../../secrets/env.yaml; services.readeck = { diff --git a/modules/servers/ryot.nix b/modules/servers/ryot.nix index 800e760..995eb9a 100644 --- a/modules/servers/ryot.nix +++ b/modules/servers/ryot.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.ryot; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.ryot = setup.mkOptions "ryot" "tracker" 8765; + options.my.servers.ryot = inputs.self.lib.mkServerOptions "ryot" "tracker" 8765 lib; config = lib.mkIf (cfg.enable && config.my.servers.postgres.enable && config.my.secureHost) { sops.secrets.ryot.sopsFile = ../../secrets/env.yaml; virtualisation.oci-containers.containers.ryot = { diff --git a/modules/servers/shiori.nix b/modules/servers/shiori.nix index 2b8c09a..0ba0e92 100644 --- a/modules/servers/shiori.nix +++ b/modules/servers/shiori.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.shiori; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.shiori = setup.mkOptions "shiori" "bookmarks" 4368; + options.my.servers.shiori = inputs.self.lib.mkServerOptions "shiori" "bookmarks" 4368 lib; config = lib.mkIf (cfg.enable && config.my.servers.postgres.enable && config.my.secureHost) { sops.secrets.shiori.sopsFile = ../../secrets/env.yaml; services.shiori = { diff --git a/modules/servers/sonarr.nix b/modules/servers/sonarr.nix index d2a0920..efd0db0 100644 --- a/modules/servers/sonarr.nix +++ b/modules/servers/sonarr.nix @@ -1,10 +1,14 @@ -{ lib, config, ... }: +{ + lib, + config, + inputs, + ... +}: let cfg = config.my.servers.sonarr; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.sonarr = setup.mkOptions "sonarr" "series" 8989; + options.my.servers.sonarr = inputs.self.lib.mkServerOptions "sonarr" "series" 8989 lib; config.services.sonarr = lib.mkIf cfg.enable { inherit (cfg) enable; group = "piracy"; diff --git a/modules/servers/stash.nix b/modules/servers/stash.nix index d3655cb..949ffee 100644 --- a/modules/servers/stash.nix +++ b/modules/servers/stash.nix @@ -1,5 +1,6 @@ { lib, + inputs, config, pkgs, ... @@ -7,7 +8,6 @@ let cfg = config.my.servers.stash; cfgS = config.services.stash; - setup = import ../factories/mkserver.nix { inherit lib config; }; stashPythonFHS = pkgs.buildFHSEnv { name = "stash-python-fhs"; targetPkgs = @@ -28,7 +28,7 @@ let }; in { - options.my.servers.stash = setup.mkOptions "stash" "xxx" 9999; + options.my.servers.stash = inputs.self.lib.mkServerOptions "stash" "xxx" 9999 lib; config = lib.mkIf (cfg.enable && config.my.secureHost) { sops.secrets = { "stash/password".sopsFile = ../../secrets/secrets.yaml; diff --git a/modules/servers/synapse.nix b/modules/servers/synapse.nix index 32a7eaf..cfca71e 100644 --- a/modules/servers/synapse.nix +++ b/modules/servers/synapse.nix @@ -1,5 +1,6 @@ { lib, + inputs, config, pkgs, ... @@ -8,7 +9,6 @@ let cfg = config.my.servers.synapse; cfgE = config.my.servers.element; domain = "wedsgk5ac2qcaf9yb.click"; - setup = import ../factories/mkserver.nix { inherit lib config; }; clientConfig."m.homeserver".base_url = cfg.url; serverConfig."m.server" = "${cfg.host}:443"; mkWellKnown = data: '' @@ -19,8 +19,8 @@ let in { options.my.servers = { - synapse = setup.mkOptions "synapse" "pYLemuAfsrzNBaH77xSu" 8008; - element = setup.mkOptions "element" "55a608953f6d64c199" 5345; + synapse = inputs.self.lib.mkServerOptions "synapse" "pYLemuAfsrzNBaH77xSu" 8008 lib; + element = inputs.self.lib.mkServerOptions "element" "55a608953f6d64c199" 5345 lib; }; config = lib.mkIf (cfg.enable && config.my.secureHost) { my.servers = { diff --git a/modules/servers/tranga.nix b/modules/servers/tranga.nix index db92c02..bf5fbd2 100644 --- a/modules/servers/tranga.nix +++ b/modules/servers/tranga.nix @@ -1,10 +1,14 @@ -{ config, lib, ... }: +{ + config, + lib, + inputs, + ... +}: let - setup = import ../factories/mkserver.nix { inherit lib config; }; cfg = config.my.servers.tranga; in { - options.my.servers.tranga = setup.mkOptions "tranga" "tranga" 9555; + options.my.servers.tranga = inputs.self.lib.mkServerOptions "tranga" "tranga" 9555 lib; config = lib.mkIf cfg.enable { virtualisation.oci-containers.containers = { tranga-api = { diff --git a/modules/servers/vaultwarden.nix b/modules/servers/vaultwarden.nix index 07fdbbc..3e6614b 100644 --- a/modules/servers/vaultwarden.nix +++ b/modules/servers/vaultwarden.nix @@ -1,15 +1,15 @@ { lib, + inputs, config, pkgs, ... }: let cfg = config.my.servers.vaultwarden; - setup = import ../factories/mkserver.nix { inherit lib config; }; in { - options.my.servers.vaultwarden = setup.mkOptions "vaultwarden" "vault" 8222; + options.my.servers.vaultwarden = inputs.self.lib.mkServerOptions "vaultwarden" "vault" 8222 lib; config = lib.mkIf (cfg.enable && config.my.servers.postgres.enable && config.my.secureHost) { sops.secrets.vaultwarden.sopsFile = ../../secrets/env.yaml; services.vaultwarden = { diff --git a/parts/core.nix b/parts/core.nix index 10c7089..aec4a3f 100644 --- a/parts/core.nix +++ b/parts/core.nix @@ -49,6 +49,149 @@ in |> builtins.attrNames |> map (file: baseNameOf file |> builtins.replaceStrings [ ".nix" ] [ "" ]) |> builtins.filter (name: name != "emacs"); + autoImport = + dir: filterFn: + builtins.readDir dir + |> builtins.attrNames + |> builtins.filter (file: builtins.match ".*\\.nix" file != null && filterFn file) + |> map (file: dir + "/${file}"); + mkServerOptions = name: subdomain: port: lib: { + enable = lib.mkEnableOption "this server service"; + enableCron = lib.mkEnableOption "enable cronjob"; + enableProxy = lib.mkEnableOption "enable reverse proxy"; + port = lib.mkOption { + type = lib.types.int; + default = port; + }; + name = lib.mkOption { + type = lib.types.str; + default = name; + }; + domain = lib.mkOption { + type = lib.types.str; + default = "servidos.lat"; + }; + host = lib.mkOption { + type = lib.types.str; + default = "${subdomain}.servidos.lat"; + }; + hostName = lib.mkOption { + type = lib.types.str; + default = "miniserver"; + }; + url = lib.mkOption { + type = lib.types.str; + default = "https://${subdomain}.servidos.lat"; + }; + ip = lib.mkOption { + type = lib.types.str; + default = "127.0.0.1"; + }; + local = lib.mkOption { + type = lib.types.str; + default = "http://127.0.0.1:${toString port}"; + }; + isLocal = lib.mkOption { + type = lib.types.bool; + default = true; + }; + enableSocket = lib.mkOption { + type = lib.types.bool; + default = false; + }; + certPath = lib.mkOption { + type = lib.types.nullOr lib.types.path; + default = null; + }; + }; + proxy = locations: { + inherit locations; + forceSSL = true; + enableACME = true; + http2 = true; + }; + proxyReverse = + cfg: + inputs.self.lib.proxy { + "/" = { + proxyPass = "http://${cfg.ip}:${toString cfg.port}/"; + proxyWebsockets = cfg.enableSocket or false; + }; + }; + proxyReverseFix = + cfg: + let + useLocalhost = cfg.hostName == cfg.hostName; + localHeaders = '' + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + ''; + in + inputs.self.lib.proxyReverse cfg + // { + extraConfig = '' + ${if useLocalhost then localHeaders else ""} + proxy_set_header X-Forwarded-Host $host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + proxy_redirect off; + proxy_http_version 1.1; + ''; + }; + proxyReversePrivate = + cfg: + inputs.self.lib.proxyReverse cfg + // { + extraConfig = '' + ssl_verify_client on; + ssl_client_certificate ${cfg.certPath}; + error_page 403 /403.html; + ''; + }; + commonAliases = { + cp = "cp -i"; + mv = "mv -i"; + mkdir = "mkdir -p"; + mkcd = "(){ mkdir -p \"$1\" && cd \"$1\" }"; + copy = "xclip -selection clipboard"; + cdp = "pwd | copy"; + cfp = "(){ readlink -f \"$1\" | copy }"; + ".." = "cd .."; + "..." = "cd ../.."; + ".3" = "cd ../../.."; + ".4" = "cd ../../../.."; + ".5" = "cd ../../../../.."; + c = "cat"; + sc = "systemctl --user"; + jc = "journalctl --user -xefu"; + }; + xdgEnvironment = + let + XDG_DATA_HOME = "\${HOME}/.local/share"; + XDG_CONFIG_HOME = "\${HOME}/.config"; + XDG_CACHE_HOME = "\${HOME}/.cache"; + in + { + inherit XDG_DATA_HOME XDG_CONFIG_HOME XDG_CACHE_HOME; + XDG_BIN_HOME = "\${HOME}/.local/bin"; + XDG_STATE_HOME = "\${HOME}/.local/state"; + PSQL_HISTORY = "${XDG_DATA_HOME}/psql_history"; + REDISCLI_HISTFILE = "${XDG_DATA_HOME}/redis/rediscli_history"; + WINEPREFIX = "${XDG_DATA_HOME}/wine"; + ELECTRUMDIR = "${XDG_DATA_HOME}/electrum"; + WGETRC = "${XDG_CONFIG_HOME}/wgetrc"; + XCOMPOSECACHE = "${XDG_CACHE_HOME}/X11/xcompose"; + "_JAVA_OPTIONS" = "-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/java"; + ORG_DEVICE = "workstation"; + PATH = [ "\${HOME}/.local/bin" ]; + }; + getNixosHosts = + ips: hostName: lib: + builtins.attrNames ips + |> builtins.filter ( + name: !(lib.hasPrefix "wg-" name) && name != "vps" && name != "router" && name != hostName + ); }; }; }