flake

Francesco Saccone's Nix flake.
git clone https://git.francescosaccone.com/flake
Log | Files | Refs | README | LICENSE

commit 8fae0ac6047948fe7e7bdd7989ec53c8ccff7fb6
parent 69a898239bbdee060a8dbe2b610465b5bd0a10f3
Author: Francesco Saccone <francesco@francescosaccone.com>
Date:   Sat, 17 May 2025 18:41:55 +0200

refactor: prefix every nixos module in 'fs' attribute set

This avoids possible conflicts with options from Nixpkgs.

Signed-off-by: Francesco Saccone <francesco@francescosaccone.com>

Diffstat:
Mhosts/git-server/default.nix | 201++++++++++++++++++++++++++++++++++++++++---------------------------------------
Mhosts/git-server/scripts.nix | 2+-
Mhosts/laptop/default.nix | 50++++++++++++++++++++++++++------------------------
Mhosts/main-server/default.nix | 132++++++++++++++++++++++++++++++++++++++++---------------------------------------
Mmodules/nixos/programs/monero/default.nix | 6+++---
Mmodules/nixos/security/openssh/default.nix | 4++--
Mmodules/nixos/services/bind/default.nix | 12++++++------
Mmodules/nixos/services/git/daemon/default.nix | 10+++++-----
Mmodules/nixos/services/git/default.nix | 8++++----
Mmodules/nixos/services/ly/default.nix | 4++--
Mmodules/nixos/services/quark/acme/default.nix | 8++++----
Mmodules/nixos/services/quark/default.nix | 12++++++------
Mmodules/nixos/services/quark/tls/default.nix | 6+++---
Mmodules/nixos/services/sway/default.nix | 4++--
14 files changed, 234 insertions(+), 225 deletions(-)

diff --git a/hosts/git-server/default.nix b/hosts/git-server/default.nix @@ -13,120 +13,125 @@ let scripts = import ./scripts.nix { inherit config pkgs inputs; }; stagit = { - destDir = config.services.quark.directory; - reposDir = config.services.git.directory; + destDir = config.fs.services.quark.directory; + reposDir = config.fs.services.git.directory; }; in { imports = [ ./disk-config.nix ]; - services = { - dns = { - enable = true; - domain = rootDomain; - records = import "${mainServer}/dns.nix" rootDomain; - }; - quark = { - enable = true; - user = "git"; - preStart = { - scripts = - let - stagitCreate = scripts.stagitCreate { - inherit (stagit) destDir reposDir; - httpBaseUrl = "https://${gitDomain}"; - }; - - stagitCreateAndChown = - let - script = pkgs.writeShellScriptBin "stagit-create-and-chown" '' - ${stagitCreate} - ${pkgs.sbase}/bin/chown -R git:git ${stagit.destDir} - ${pkgs.sbase}/bin/chmod -R u+rw ${stagit.destDir} - ''; - in - "${script}/bin/stagit-create-and-chown"; - - copyRepositories = pkgs.writeShellScript "copy-repositories" '' - ${pkgs.sbase}/bin/cp -R \ - ${config.services.git.directory}/* \ - ${config.services.quark.directory} - ''; + fs = { + services = { - fullScript = '' - ${copyRepositories} - ${stagitCreateAndChown} - ''; - in - [ fullScript ]; - }; - acme = { + dns = { enable = true; - email = "admin@${rootDomain}"; - domain = gitDomain; + domain = rootDomain; + records = import "${mainServer}/dns.nix" rootDomain; }; - tls = { + + quark = { enable = true; - pemFiles = - let - inherit (config.services.quark.acme) directory; - in - [ - "${directory}/${gitDomain}/fullchain.pem" - "${directory}/${gitDomain}/privkey.pem" - ]; + user = "git"; + preStart = { + scripts = + let + stagitCreate = scripts.stagitCreate { + inherit (stagit) destDir reposDir; + httpBaseUrl = "https://${gitDomain}"; + }; + + stagitCreateAndChown = + let + script = pkgs.writeShellScriptBin "stagit-create-and-chown" '' + ${stagitCreate} + ${pkgs.sbase}/bin/chown -R git:git ${stagit.destDir} + ${pkgs.sbase}/bin/chmod -R u+rw ${stagit.destDir} + ''; + in + "${script}/bin/stagit-create-and-chown"; + + copyRepositories = pkgs.writeShellScript "copy-repositories" '' + ${pkgs.sbase}/bin/cp -R \ + ${config.fs.services.git.directory}/* \ + ${config.fs.services.quark.directory} + ''; + + fullScript = '' + ${copyRepositories} + ${stagitCreateAndChown} + ''; + in + [ fullScript ]; + }; + acme = { + enable = true; + email = "admin@${rootDomain}"; + domain = gitDomain; + }; + tls = { + enable = true; + pemFiles = + let + inherit (config.fs.services.quark.acme) directory; + in + [ + "${directory}/${gitDomain}/fullchain.pem" + "${directory}/${gitDomain}/privkey.pem" + ]; + }; }; - }; - git = { - enable = true; - repositories = - { - flake = { - description = "Francesco Saccone's Nix flake."; - }; - hermes = { - description = "HTTP GET/HEAD-only web server for static content."; - }; - password-store = { - description = "Francesco Saccone's password store."; - }; - site = { - description = "Francesco Saccone's site content."; - }; - } - |> builtins.mapAttrs ( - name: - { description }: + + git = { + enable = true; + repositories = { - additionalFiles = { - inherit description; - owner = "Francesco Saccone"; - url = "https://${gitDomain}/${name}"; + flake = { + description = "Francesco Saccone's Nix flake."; + }; + hermes = { + description = "HTTP GET/HEAD-only web server for static content."; + }; + password-store = { + description = "Francesco Saccone's password store."; + }; + site = { + description = "Francesco Saccone's site content."; }; - hooks.postReceive = - builtins.concatStringsSep "\n" [ - (scripts.stagitPostReceive { - inherit (stagit) destDir reposDir; - inherit name; - httpBaseUrl = "https://${gitDomain}"; - }) - "git update-server-info" # Dumb HTTP protocol - ] - |> pkgs.writeShellScript "post-receive"; } - ); - daemon = { - enable = true; + |> builtins.mapAttrs ( + name: + { description }: + { + additionalFiles = { + inherit description; + owner = "Francesco Saccone"; + url = "https://${gitDomain}/${name}"; + }; + hooks.postReceive = + builtins.concatStringsSep "\n" [ + (scripts.stagitPostReceive { + inherit (stagit) destDir reposDir; + inherit name; + httpBaseUrl = "https://${gitDomain}"; + }) + "git update-server-info" # Dumb HTTP protocol + ] + |> pkgs.writeShellScript "post-receive"; + } + ); + daemon = { + enable = true; + }; }; }; - }; - security.openssh.listen = { - enable = true; - port = 22; - authorizedKeyFiles = rec { - root = [ "${mainServer}/ssh/francescosaccone.pub" ]; - git = root; + security.openssh.listen = { + enable = true; + port = 22; + authorizedKeyFiles = rec { + root = [ "${mainServer}/ssh/francescosaccone.pub" ]; + git = root; + }; }; }; diff --git a/hosts/git-server/scripts.nix b/hosts/git-server/scripts.nix @@ -77,7 +77,7 @@ in let createIndex = stagit.createIndex { inherit destDir reposDir; }; createRepositories = - config.services.git.repositories + config.fs.services.git.repositories |> builtins.attrNames |> builtins.map ( name: diff --git a/hosts/laptop/default.nix b/hosts/laptop/default.nix @@ -6,37 +6,37 @@ ... }: { - programs.monero = { - enable = true; - mining = { + fs = { + programs.monero = { enable = true; - address = builtins.concatStringsSep "" [ - "47y5LAtYdpZ4GAE7CMx1soEHjUKzpVQFYM5Pv836FcsZd6k3TFcdvHMAHDpwZgnx" - "4DdG2zkZkSewLgguU23FYJP7HacSVcx" - ]; + mining = { + enable = true; + address = builtins.concatStringsSep "" [ + "47y5LAtYdpZ4GAE7CMx1soEHjUKzpVQFYM5Pv836FcsZd6k3TFcdvHMAHDpwZgnx" + "4DdG2zkZkSewLgguU23FYJP7HacSVcx" + ]; + }; }; - }; - services = { - ly = { - enable = true; - }; - sway = { - enable = true; + services = { + ly = { + enable = true; + }; + sway = { + enable = true; + }; }; - tlp = { - enable = true; + + security = { + openssh.agent = { + enable = true; + }; }; }; - security = { - doas = { - enable = true; - wheelNeedsPassword = true; - }; - openssh.agent = { - enable = true; - }; + security.doas = { + enable = true; + wheelNeedsPassword = true; }; networking.networkmanager = { @@ -52,6 +52,8 @@ jack.enable = true; }; + services.tlp.enable = true; + fonts.packages = [ pkgs.ibm-plex ]; users.users."francesco" = { diff --git a/hosts/main-server/default.nix b/hosts/main-server/default.nix @@ -10,78 +10,80 @@ in rec { imports = [ ./disk-config.nix ]; - services = { - dns = { - enable = true; - inherit (networking) domain; - records = import ./dns.nix domain; - }; - quark = { - enable = true; - preStart = { - scripts = - let - generateAtom = builtins.concatStringsSep " " [ - "${inputs.site}/scripts/generate-atom.sh" - config.services.quark.directory - "\"Francesco Saccone's blog\"" - "https://${domain}" - ]; - generateSitemap = builtins.concatStringsSep " " [ - "${inputs.site}/scripts/generate-sitemap.sh" - config.services.quark.directory - "https://${domain}" - ]; - generateHtml = builtins.concatStringsSep " " [ - "${inputs.site}/scripts/generate-html.sh" - config.services.quark.directory - ]; - copyStaticContent = pkgs.writeShellScript "copy-static-content" '' - ${pkgs.sbase}/bin/cp -r \ - ${inputs.site}/public \ - ${inputs.site}/favicon.ico \ - ${inputs.site}/robots.txt \ - ${config.services.quark.directory} - ''; - in - [ - generateAtom - generateSitemap - generateHtml - copyStaticContent - ]; - packages = [ - pkgs.coreutils - pkgs.findutils - pkgs.gnused - pkgs.lowdown - ]; - }; - acme = { + fs = { + services = { + dns = { enable = true; - email = "admin@${domain}"; - inherit domain; - extraDomains = [ "www.${domain}" ]; + inherit (networking) domain; + records = import ./dns.nix domain; }; - tls = { + quark = { enable = true; - pemFiles = - let - inherit (config.services.quark.acme) directory; - in - [ - "${directory}/${domain}/fullchain.pem" - "${directory}/${domain}/privkey.pem" + preStart = { + scripts = + let + generateAtom = builtins.concatStringsSep " " [ + "${inputs.site}/scripts/generate-atom.sh" + config.fs.services.quark.directory + "\"Francesco Saccone's blog\"" + "https://${domain}" + ]; + generateSitemap = builtins.concatStringsSep " " [ + "${inputs.site}/scripts/generate-sitemap.sh" + config.fs.services.quark.directory + "https://${domain}" + ]; + generateHtml = builtins.concatStringsSep " " [ + "${inputs.site}/scripts/generate-html.sh" + config.fs.services.quark.directory + ]; + copyStaticContent = pkgs.writeShellScript "copy-static-content" '' + ${pkgs.sbase}/bin/cp -r \ + ${inputs.site}/public \ + ${inputs.site}/favicon.ico \ + ${inputs.site}/robots.txt \ + ${config.fs.services.quark.directory} + ''; + in + [ + generateAtom + generateSitemap + generateHtml + copyStaticContent + ]; + packages = [ + pkgs.coreutils + pkgs.findutils + pkgs.gnused + pkgs.lowdown ]; + }; + acme = { + enable = true; + email = "admin@${domain}"; + inherit domain; + extraDomains = [ "www.${domain}" ]; + }; + tls = { + enable = true; + pemFiles = + let + inherit (config.fs.services.quark.acme) directory; + in + [ + "${directory}/${domain}/fullchain.pem" + "${directory}/${domain}/privkey.pem" + ]; + }; }; }; - }; - security.openssh.listen = { - enable = true; - port = 22; - authorizedKeyFiles = rec { - root = [ ./ssh/francescosaccone.pub ]; + security.openssh.listen = { + enable = true; + port = 22; + authorizedKeyFiles = rec { + root = [ ./ssh/francescosaccone.pub ]; + }; }; }; diff --git a/modules/nixos/programs/monero/default.nix b/modules/nixos/programs/monero/default.nix @@ -6,7 +6,7 @@ ... }: { - options.programs.monero = { + options.fs.programs.monero = { enable = lib.mkOption { description = "Whether to enable Monero."; default = false; @@ -25,7 +25,7 @@ }; }; - config = lib.mkIf config.programs.monero.enable { + config = lib.mkIf config.fs.programs.monero.enable { users = { users = { monero = { @@ -51,7 +51,7 @@ port = 18081; }; mining = { - inherit (config.programs.monero.mining) enable address; + inherit (config.fs.programs.monero.mining) enable address; threads = 0; }; }; diff --git a/modules/nixos/security/openssh/default.nix b/modules/nixos/security/openssh/default.nix @@ -6,7 +6,7 @@ ... }: { - options.security.openssh = { + options.fs.security.openssh = { agent = { enable = lib.mkOption { description = "Whether to enable the OpenSSH agent."; @@ -40,7 +40,7 @@ config = let - inherit (config.security.openssh) agent listen; + inherit (config.fs.security.openssh) agent listen; in { programs.ssh = lib.mkIf agent.enable { diff --git a/modules/nixos/services/bind/default.nix b/modules/nixos/services/bind/default.nix @@ -6,7 +6,7 @@ ... }: { - options.services.dns = { + options.fs.services.dns = { enable = lib.mkOption { description = "Whether to enable BIND DNS server."; default = false; @@ -48,15 +48,15 @@ }; }; - config = lib.mkIf config.services.dns.enable { + config = lib.mkIf config.fs.services.dns.enable { services.bind = { enable = true; package = pkgs.bind; - zones.${config.services.dns.domain} = { + zones.${config.fs.services.dns.domain} = { master = true; file = - config.services.dns.records + config.fs.services.dns.records |> builtins.map ( { name, @@ -66,7 +66,7 @@ data, }: let - inherit (config.services.dns) domain; + inherit (config.fs.services.dns) domain; subdomain = if name != "@" then "${name}." else ""; in [ @@ -79,7 +79,7 @@ |> builtins.concatStringsSep " " ) |> builtins.concatStringsSep "\n" - |> pkgs.writeText "${config.services.dns.domain}"; + |> pkgs.writeText "${config.fs.services.dns.domain}"; }; }; diff --git a/modules/nixos/services/git/daemon/default.nix b/modules/nixos/services/git/daemon/default.nix @@ -6,7 +6,7 @@ ... }: { - options.services.git.daemon = { + options.fs.services.git.daemon = { enable = lib.mkOption { description = "Whether to enable the Git daemon."; default = false; @@ -16,9 +16,9 @@ config = let - inherit (config.services.git) daemon; + inherit (config.fs.services.git) daemon; in - lib.mkIf (config.services.git.enable && daemon.enable) { + lib.mkIf (config.fs.services.git.enable && daemon.enable) { systemd = { services = { git-daemon = { @@ -31,10 +31,10 @@ ${pkgs.git}/bin/git daemon \ --verbose \ --syslog \ - --base-path=${config.services.git.directory} \ + --base-path=${config.fs.services.git.directory} \ --port=9418 \ --export-all \ - ${config.services.git.directory} + ${config.fs.services.git.directory} ''; in { diff --git a/modules/nixos/services/git/default.nix b/modules/nixos/services/git/default.nix @@ -8,7 +8,7 @@ { imports = [ ./daemon ]; - options.services.git = { + options.fs.services.git = { enable = lib.mkOption { description = "Whether to set up a Git server."; default = false; @@ -59,7 +59,7 @@ }; }; - config = lib.mkIf config.services.git.enable { + config = lib.mkIf config.fs.services.git.enable { users = { users = { git = { @@ -67,7 +67,7 @@ isSystemUser = true; group = "git"; createHome = true; - home = config.services.git.directory; + home = config.fs.services.git.directory; shell = "${pkgs.git}/bin/git-shell"; }; }; @@ -88,7 +88,7 @@ wantedBy = [ "multi-user.target" ]; serviceConfig = let - inherit (config.services.git) repositories directory; + inherit (config.fs.services.git) repositories directory; script = repositories |> builtins.mapAttrs ( diff --git a/modules/nixos/services/ly/default.nix b/modules/nixos/services/ly/default.nix @@ -6,7 +6,7 @@ ... }: { - options.services.ly = { + options.fs.services.ly = { enable = lib.mkOption { description = "Whether to enable Ly display manager."; default = false; @@ -14,7 +14,7 @@ }; }; - config = lib.mkIf config.services.ly.enable { + config = lib.mkIf config.fs.services.ly.enable { services.displayManager = { ly = { enable = true; diff --git a/modules/nixos/services/quark/acme/default.nix b/modules/nixos/services/quark/acme/default.nix @@ -6,7 +6,7 @@ ... }: { - options.services.quark.acme = { + options.fs.services.quark.acme = { enable = lib.mkOption { description = "Whether to enable the Certbot ACME client."; default = false; @@ -37,9 +37,9 @@ config = let - inherit (config.services.quark) acme; + inherit (config.fs.services.quark) acme; in - lib.mkIf (acme.enable && config.services.quark.enable) { + lib.mkIf (acme.enable && config.fs.services.quark.enable) { systemd = { services = { acme = { @@ -54,7 +54,7 @@ | ${pkgs.gnugrep}/bin/grep -q "No certificates"; then ${pkgs.certbot}/bin/certbot certonly --quiet --webroot \ --agree-tos --email ${acme.email} \ - -w ${config.services.quark.directory} \ + -w ${config.fs.services.quark.directory} \ -d ${builtins.concatStringsSep " -d " domains} else ${pkgs.certbot}/bin/certbot renew --quiet diff --git a/modules/nixos/services/quark/default.nix b/modules/nixos/services/quark/default.nix @@ -11,7 +11,7 @@ ./tls ]; - options.services.quark = { + options.fs.services.quark = { enable = lib.mkOption { description = "Whether to enable Quark web server."; default = false; @@ -43,7 +43,7 @@ }; }; - config = lib.mkIf config.services.quark.enable { + config = lib.mkIf config.fs.services.quark.enable { users = { users = { quark = { @@ -63,7 +63,7 @@ services = { quark = let - inherit (config.services.quark) preStart; + inherit (config.fs.services.quark) preStart; in rec { enable = true; @@ -77,8 +77,8 @@ ${pkgs.quark}/bin/quark \ -p 80 \ - -d ${config.services.quark.directory} \ - -u ${config.services.quark.user} \ + -d ${config.fs.services.quark.directory} \ + -u ${config.fs.services.quark.user} \ -g quark \ -i index.html ''; @@ -97,7 +97,7 @@ enable = true; wantedBy = [ "multi-user.target" ]; pathConfig = { - PathModified = [ config.services.quark.directory ]; + PathModified = [ config.fs.services.quark.directory ]; }; }; }; diff --git a/modules/nixos/services/quark/tls/default.nix b/modules/nixos/services/quark/tls/default.nix @@ -6,7 +6,7 @@ ... }: { - options.services.quark.tls = { + options.fs.services.quark.tls = { enable = lib.mkOption { description = "Whether to enable the Hitch reverse proxy."; default = false; @@ -20,9 +20,9 @@ config = let - inherit (config.services.quark) tls; + inherit (config.fs.services.quark) tls; in - lib.mkIf (tls.enable && config.services.quark.enable) { + lib.mkIf (tls.enable && config.fs.services.quark.enable) { users = { users = { hitch = { diff --git a/modules/nixos/services/sway/default.nix b/modules/nixos/services/sway/default.nix @@ -6,7 +6,7 @@ ... }: { - options.services.sway = { + options.fs.services.sway = { enable = lib.mkOption { description = "Whether to enable Sway."; default = false; @@ -14,7 +14,7 @@ }; }; - config = lib.mkIf config.services.sway.enable { + config = lib.mkIf config.fs.services.sway.enable { services.displayManager = { defaultSession = "Sway"; };