--- # Choices of components ──────────────────────────────────────────────────────────── # NOTE: verified with `requirements/accepted_variables.yml`, so keep them as top-level snapshot_tool: btrbk initramfs_generator: mkinitfs usershell: fish seat_manager: seatd dhcp_client: udhcpc # acpid implementation to use when elogind is not present acpid_daemon: busybox device_manager: udev crond_provider: cronie syslog_provider: busybox ntp_client: ntpsec dns_resolver: dnscrypt-proxy sudo_provider: doas # Configurations ─────────────────────────────────────────────────────────────────── repository: https://ftp.udx.icscoe.jp/Linux/alpine username: follie # Don't specify "seat" or "polkitd" group here usergroups: [wheel, input, audio, video, libvirt, users, pipewire] # Commands the wheel group is allowed to run without password nopasswd_commands: [halt, reboot, poweroff, pm-suspend, dhcp_release] # Public NTP pools: https://www.ntppool.org/en/use.html # Public NTS-enabled servers: https://github.com/jauderho/nts-servers ntp_opts: # NOTE: peer option isn't available in ntpsec. # Also, we are just the NTP client => no need to exchange time with anyone pools: [] servers: - time.cloudflare.com - ntpmon.dcs1.biz - nts.netnod.se - ntp.zeitgitter.net - virginia.time.system76.com - ntp3.fau.de - gps.ntp.br # include 'nts' option on each server directive (common NTP pools don't support NTS yet) nts_enabled: true dnscrypt: adblock: true server_names: - quad9-doh-ip4-port443-filter-pri - quad9-doh-ip6-port443-filter-pri - quad9-dnscrypt-ip4-filter-pri - cloudflare-security - cloudflare-security-ipv6 bootstrap_resolvers: [9.9.9.9:53, 1.1.1.1:53] netprobe_address: 1.1.1.1:53 local_doh: enabled: false listen_addresses: [127.0.0.1:3012] path: '/dns-query' anonymized_dns: # not compatible with DoH and ODoH servers enabled: false routes: - server_name: '*' via: - anon-tiarap - anon-tiarap-ipv6 - anon-cs-tokyo - anon-cs-sk unbound_upstream_nameservers: - 9.9.9.9@853#dns.quad9.net - 149.112.112.112@853#dns.quad9.net - 2620:fe::fe@853#dns.quad9.net - 2620:fe::9@853#dns.quad9.net - 1.1.1.1@853#cloudflare-dns.com - 1.0.0.1@853#cloudflare-dns.com - 2606:4700:4700::1111@853#cloudflare-dns.com - 2606:4700:4700::1001@853#cloudflare-dns.com # Enable/Disable access to /sys/firmware/efi/efivars disable_uefi_access: false # Should polkit be used # NOTE: have no effect when seat_manager == 'elogind' use_polkit: false # Should be a file name existed inside /usr/share/consolefonts/ console_font: ter-h22b.psf.gz # 'virtlockd' and 'virtlogd' will always be started so don't list them here libvirt_daemons: - virtinterfaced - virtnetworkd - virtnodedevd - virtqemud - virtstoraged - virtproxyd # Whether to use `iwd` or `eiwd` iwd_without_dbus: false # RFC 7217: generate a stable IPv6 link-local address for SLAAC # NOTE: this is the default for dhcpcd (slaac private), and `stable-privacy` flag doesn't appear in `ip a` in this case ipv6_stable_privacy_addr: true # Public facing network interfaces to configured # - ip4_addr, ip6_addr should include netmask (e.g. 192.168.1.10/24) # - don't include wireless interfaces here as they should use dhcp with iwctl # - udhcpc: https://wiki.alpinelinux.org/wiki/Configure_Networking network_interfaces: - name: eth0 ip4_type: dhcp ip6_type: auto # Punching holes on the machine # 546/UDP (IPv6 link-local client) is hardcoded (opened) so don't specify it here opened_ports: tcp: [] udp: [] # earlyoom kills processes on its own so make it optional earlyoom: set_priority: true mem_min_percent: 5,2 swap_min_percent: 10,5 # auditd by default rotates its logfile when reaching file size limit auditd_logrotate_daily: false # Configuration for filesystem snapshot tools ───────────────────────────────── snapper: - name: home subvolume: /home pre_post_cleanup: enabled: true number_cleanup: enabled: false timeline: cleanup_enabled: true min_age: 1800 hourly: 8 daily: 4 weekly: 2 monthly: 0 yearly: 0 - name: root subvolume: / pre_post_cleanup: enabled: true min_age: 900 number_cleanup: enabled: true min_age: 1800 limit: 10-30 limit_important: 10 timeline: cleanup_enabled: false # NOTE: some caveats to reduce config complexity # - use the same targets for all subvolumes in each volume definition # - use the same global retention policy for snapshot/backup/archive # - there's only 1 global ssh config, 1 global crontab btrbk: cron: hourly: snapshot daily: resume options: lockfile: /var/lock/btrbk.lock logfile: /var/log/btrbk.log syslog: cron timestamp_format: long snapshot: min_age: 6h policy: 16h 8d 4w 2m volumes: - path: /mnt/root snapshot_dir: '@snapshots' subvolumes: ['@home', '@'] - path: /mnt/media snapshot_dir: '@snapshots' subvolumes: ['@'] # See /etc/sanoid/sanoid.defaults.conf file for all config options sanoid: templates: production: frequent_period: 30 hourly: 16 daily: 8 weekly: 4 monthly: 2 autosnap: 'yes' autoprune: 'yes' datasets: rpool/ALPINE/root: use_template: production rpool/ALPINE/home: use_template: production frequent_period: 15 zrepl: # Secrets encrypted with ansible-vault ──────────────────────────────────────── password: '{{ vault_password }}'