summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorSimon Parri <simonparri@ganzeria.com>2025-05-09 17:54:45 -0500
committerSimon Parri <simonparri@ganzeria.com>2025-05-09 17:54:45 -0500
commit4ea08b3976188eb01a74548d68b227a7794b4caa (patch)
tree505c0df98ed00ed592be15895b8ed3eb7aa9e2c3 /modules
downloadnixos-config-4ea08b3976188eb01a74548d68b227a7794b4caa.tar.gz
nixos-config-4ea08b3976188eb01a74548d68b227a7794b4caa.zip
Add current configuration
Diffstat (limited to 'modules')
-rw-r--r--modules/default.nix42
-rw-r--r--modules/envfs.nix12
-rw-r--r--modules/gui.nix20
-rw-r--r--modules/hosts.nix25
-rw-r--r--modules/laptop.nix16
-rw-r--r--modules/locales.nix60
-rw-r--r--modules/overlays/default.nix8
-rw-r--r--modules/overlays/emacs.nix25
-rw-r--r--modules/overlays/g45_h264.nix25
-rw-r--r--modules/pc.nix39
-rw-r--r--modules/rsyslogd.conf23
-rw-r--r--modules/sets.nix170
-rw-r--r--modules/syslog.nix19
13 files changed, 484 insertions, 0 deletions
diff --git a/modules/default.nix b/modules/default.nix
new file mode 100644
index 0000000..e57947a
--- /dev/null
+++ b/modules/default.nix
@@ -0,0 +1,42 @@
+{ nixpkgs, hostname, lib, config, ... }:
+
+{
+ imports = [
+ ./gui.nix
+ ./laptop.nix
+ ./locales.nix
+ ./envfs.nix
+ ./pc.nix
+ ./sets.nix
+ ./syslog.nix
+ ./hosts.nix
+ ./overlays
+ ];
+
+ options = {
+ this.defaults.enable = lib.mkEnableOption "default settings" // {
+ default = true;
+ };
+ };
+
+ config = lib.mkIf config.this.defaults.enable {
+ networking.hostName = hostname;
+
+ security.sudo.enable = false;
+
+ services.logind.lidSwitch = "ignore";
+ services.logind.powerKey = "suspend";
+
+ services.udev.extraRules = ''
+ KERNEL=="uinput", MODE="0660", GROUP="input"
+ '';
+
+ nix = {
+ channel.enable = false;
+ #registry.nixpkgs.flake = nixpkgs;
+ settings = {
+ experimental-features = [ "nix-command" "flakes" ];
+ };
+ };
+ };
+}
diff --git a/modules/envfs.nix b/modules/envfs.nix
new file mode 100644
index 0000000..638d1a0
--- /dev/null
+++ b/modules/envfs.nix
@@ -0,0 +1,12 @@
+{ config, lib, ... }:
+
+{
+ options = {
+ this.envfs.enable = lib.mkEnableOption "envfs";
+ };
+
+ config = lib.mkIf config.this.envfs.enable {
+ services.envfs.enable = true;
+ environment.variables.ENVFS_RESOLVE_ALWAYS = 1;
+ };
+}
diff --git a/modules/gui.nix b/modules/gui.nix
new file mode 100644
index 0000000..376afb5
--- /dev/null
+++ b/modules/gui.nix
@@ -0,0 +1,20 @@
+{ lib, pkgs, config, ... }:
+
+{
+ options = {
+ this.gui.enable = lib.mkEnableOption "GUI";
+ this.gui.extraPackages = lib.mkOption {
+ type = with lib.types; listOf package;
+ default = with pkgs; [ xorg.xmodmap xorg.xkbcomp ];
+ };
+ };
+
+ config = lib.mkIf config.this.gui.enable {
+ services.xserver.enable = true;
+ services.xserver.displayManager.startx.enable = true;
+ services.speechd.enable = false;
+ services.openssh.settings.X11Forwarding = true;
+
+ environment.systemPackages = config.this.gui.extraPackages;
+ };
+}
diff --git a/modules/hosts.nix b/modules/hosts.nix
new file mode 100644
index 0000000..0c66c70
--- /dev/null
+++ b/modules/hosts.nix
@@ -0,0 +1,25 @@
+{ lib, config, ... }:
+
+let cfg = config.this.hosts;
+in
+{
+ options = {
+ this.hosts.lan.home = lib.mkEnableOption "Home LAN /etc/hosts";
+ this.hosts.mine = lib.mkEnableOption "my /etc/hosts";
+ this.hosts.alef.zoar.cx = lib.mkEnableOption "alef.zoar.cx /etc/hosts";
+ };
+
+ config = {
+ networking.hosts =
+ lib.optionalAttrs cfg.lan.home {
+ "172.19.0.14" = ["sage.alef.zoar.cx" "sage"];
+ "192.168.1.5" = ["rosemary.alef.zoar.cx" "rosemary"];
+ } //
+ lib.optionalAttrs cfg.mine {
+ "45.61.184.234" = ["alfheim"];
+ } //
+ lib.optionalAttrs cfg.alef.zoar.cx {
+ "173.16.167.196" = ["sage.alef.zoar.cx" "sage"];
+ };
+ };
+}
diff --git a/modules/laptop.nix b/modules/laptop.nix
new file mode 100644
index 0000000..28d0708
--- /dev/null
+++ b/modules/laptop.nix
@@ -0,0 +1,16 @@
+{ lib, config, pkgs, ... }:
+
+{
+ options = {
+ this.laptop.enable = lib.mkEnableOption "laptop settings";
+ };
+
+ config = lib.mkIf config.this.laptop.enable {
+ powerManagement.enable = true;
+ powerManagement.powertop.enable = true;
+ services.tlp.enable = true;
+ environment.systemPackages = with pkgs; [
+ acpi
+ ];
+ };
+}
diff --git a/modules/locales.nix b/modules/locales.nix
new file mode 100644
index 0000000..73627f8
--- /dev/null
+++ b/modules/locales.nix
@@ -0,0 +1,60 @@
+{ lib, config, pkgs, ... }:
+
+let localeMap = {
+ c = "C.UTF-8";
+ us = "en_US.UTF-8";
+ it = "it_IT.UTF-8";
+ jp = "ja_JP.UTF-8";
+ };
+
+ dictOverlay = with pkgs.aspellDicts; {
+ us = en;
+ };
+ dicts = pkgs.aspellDicts // dictOverlay;
+
+ getSafe' = with builtins;
+ (key: attrs: if hasAttr key attrs then [(getAttr key attrs)] else []);
+
+ inherit (lib) types;
+ cfg = config.this.locales;
+in
+{
+ options = {
+ this.locales = {
+ default = lib.mkOption {
+ type = types.str;
+ default = "us";
+ };
+ extra = lib.mkOption {
+ type = types.listOf types.str;
+ default = [];
+ };
+ dictionaries = {
+ enable = lib.mkEnableOption "dictionaries";
+ extra = lib.mkOption {
+ type = types.listOf types.str;
+ default = [];
+ };
+ };
+
+ all = lib.mkOption {
+ description = "READ-ONLY!";
+ default = ["c" cfg.default] ++ cfg.extra;
+ };
+ };
+ };
+
+ config = {
+ i18n = {
+ defaultLocale = localeMap.${cfg.default};
+ supportedLocales =
+ builtins.map (l: localeMap.${l} + "/UTF-8") cfg.all;
+ };
+
+ environment.systemPackages =
+ (lib.optionals cfg.dictionaries.enable
+ (builtins.concatMap (l: getSafe' l dicts)
+ cfg.all))
+ ++ builtins.map (d: pkgs.aspellDicts.${d}) cfg.dictionaries.extra;
+ };
+}
diff --git a/modules/overlays/default.nix b/modules/overlays/default.nix
new file mode 100644
index 0000000..60253ca
--- /dev/null
+++ b/modules/overlays/default.nix
@@ -0,0 +1,8 @@
+{ ... }:
+
+{
+ imports = [
+ ./emacs.nix
+ ./g45_h264.nix
+ ];
+}
diff --git a/modules/overlays/emacs.nix b/modules/overlays/emacs.nix
new file mode 100644
index 0000000..7ed9658
--- /dev/null
+++ b/modules/overlays/emacs.nix
@@ -0,0 +1,25 @@
+{ lib, config, ... }:
+
+{
+ options = {
+ this.overlays.emacs.enable = lib.mkEnableOption "custom-built Emacs overlay";
+ };
+
+ config = lib.mkIf config.this.overlays.emacs.enable {
+ nixpkgs.overlays = [
+ (final: prev: {
+ emacs = (prev.emacs.override {
+ withNativeCompilation = false;
+ withXwidgets = false;
+ withX = true;
+ withGTK3 = false;
+ withAthena = false;
+ }).overrideAttrs (attrs: with builtins; with attrs; {
+ configureFlags = filter (f: !elem f
+ ["--with-x-toolkit=lucid" "--with-toolkit-scroll-bars"])
+ configureFlags ++ ["--with-x-toolkit=no" "--without-toolkit-scroll-bars"];
+ });
+ })
+ ];
+ };
+}
diff --git a/modules/overlays/g45_h264.nix b/modules/overlays/g45_h264.nix
new file mode 100644
index 0000000..9df5ae1
--- /dev/null
+++ b/modules/overlays/g45_h264.nix
@@ -0,0 +1,25 @@
+{ lib, config, pkgs, ... }:
+
+{
+ options = {
+ this.overlays.g45_h264.enable = lib.mkEnableOption "intel-vaapi-driver with h264 support on gm45";
+ };
+
+ config = lib.mkIf config.this.overlays.g45_h264.enable {
+ nixpkgs.overlays = [
+ (final: prev: {
+ intel-vaapi-driver =
+ prev.intel-vaapi-driver.overrideAttrs
+ (attrs: attrs // {
+ src = pkgs.fetchzip {
+ url = "https://bitbucket.org/alium/g45-h264/downloads/intel-driver-g45-h264-2.4.1.tar.gz";
+ sha256 = "h23mQV7WdtQjhkpUlnyHcwVTz+T3BZSuqfuKru4LClo=";
+ name = "intel-driver-g45-h264-2.4.1-source";
+ };
+ version = "2.4.1-g45-h264";
+ preBuild = "patchShebangs src";
+ });
+ })
+ ];
+ };
+}
diff --git a/modules/pc.nix b/modules/pc.nix
new file mode 100644
index 0000000..0b31149
--- /dev/null
+++ b/modules/pc.nix
@@ -0,0 +1,39 @@
+{ lib, config, pkgs, ... }:
+
+let cfg = config.this.pc;
+in
+{
+ imports = [
+ ./locales.nix
+ ./syslog.nix
+ ./overlays
+ ];
+
+ options = {
+ this.pc.enable = lib.mkEnableOption "PC-specific settings";
+ this.pc.minimal = lib.mkEnableOption "limited set of features";
+ };
+
+ config = lib.mkIf cfg.enable {
+ networking.networkmanager.enable = true;
+ networking.firewall.enable = false;
+
+ services.openssh.enable = true;
+
+ services.chrony.enable = !cfg.minimal;
+ services.atd.enable = !cfg.minimal;
+ this.syslog.enable = !cfg.minimal;
+ this.envfs.enable = !cfg.minimal;
+
+ services.locate = {
+ enable = !cfg.minimal;
+ pruneBindMounts = true;
+ package = pkgs.plocate;
+ localuser = null;
+ };
+
+ this.overlays.emacs.enable = !cfg.minimal;
+
+ this.locales.dictionaries.enable = !cfg.minimal;
+ };
+}
diff --git a/modules/rsyslogd.conf b/modules/rsyslogd.conf
new file mode 100644
index 0000000..b9da515
--- /dev/null
+++ b/modules/rsyslogd.conf
@@ -0,0 +1,23 @@
+# This more-or-less copies Debian's syslog configuration
+
+module(load="imklog") # provides kernel logging support
+
+# Set the default permissions for all log files.
+$FileOwner root
+$FileGroup adm
+$FileCreateMode 0640
+$DirCreateMode 0755
+$Umask 0022
+
+# Log anything besides private authentication messages to a single log file
+*.*;auth,authpriv.none -/var/log/syslog
+
+# Log commonly used facilities to their own log file
+auth,authpriv.* /var/log/auth.log
+cron.* -/var/log/cron.log
+kern.* -/var/log/kern.log
+mail.* -/var/log/mail.log
+user.* -/var/log/user.log
+
+# Emergencies are sent to everybody logged in.
+*.emerg :omusrmsg:*
diff --git a/modules/sets.nix b/modules/sets.nix
new file mode 100644
index 0000000..65ca568
--- /dev/null
+++ b/modules/sets.nix
@@ -0,0 +1,170 @@
+{ lib, config, pkgs, ... }:
+
+let
+ cfg = config.this.sets;
+
+ attrFromPath' = (path: attrs:
+ (lib.hasAttrByPath path attrs) &&
+ (lib.getAttrFromPath path attrs));
+ doSets = (sets:
+ let recur = (path: a:
+ if (builtins.typeOf a) == "set" then
+ builtins.attrValues
+ (builtins.mapAttrs (k: v: recur (path++[k]) v) a)
+ else
+ lib.optionals (attrFromPath' path cfg) a
+ ); in
+ lib.flatten (recur [] sets));
+in
+{
+ imports = [
+ ./locales.nix
+ ];
+
+ options.this.sets = {
+ arch.tools = lib.mkEnableOption "package set";
+ cli.tools.minimal = lib.mkEnableOption "package set" // { default = cfg.cli.tools.full; };
+ cli.tools.full = lib.mkEnableOption "package set";
+ cli.shell = lib.mkEnableOption "package set";
+ comm.im = lib.mkEnableOption "package set";
+ de.utils = lib.mkEnableOption "package set";
+ gui.minimal = lib.mkEnableOption "package set" // { default = cfg.gui.full; };
+ gui.full = lib.mkEnableOption "package set";
+ gui.theme = lib.mkEnableOption "package set";
+ gui.fonts = lib.mkEnableOption "package set";
+ image.utils = lib.mkEnableOption "package set";
+ image.tools = lib.mkEnableOption "package set";
+ manga.dl = lib.mkEnableOption "package set";
+ media.tools = lib.mkEnableOption "package set";
+ net.tools.minimal = lib.mkEnableOption "package set" // { default = cfg.net.tools.full; };
+ net.tools.full = lib.mkEnableOption "package set";
+ script.utils = lib.mkEnableOption "package set";
+ sound.tools = lib.mkEnableOption "package set";
+ sys.tools = lib.mkEnableOption "package set";
+ writing.tools = lib.mkEnableOption "package set";
+
+ gui.usePicom = lib.mkEnableOption "picom package" // { default = true; };
+ gui.useEmoji = lib.mkEnableOption "emoji font package" // { default = true; };
+ };
+
+ config = {
+ environment.systemPackages =
+ with pkgs;
+ doSets {
+ arch.tools = [
+ p7zip
+ unrar-free
+ unzip
+ zip
+ ];
+ cli.tools.minimal = [
+ pv
+ wget
+ ];
+ cli.tools.full = [
+ git
+ lftp
+ gnumake
+ jq
+ rsync
+ sshfs
+ tmux
+ ];
+ cli.shell = [
+ fzf
+ ];
+ comm.im = [
+ gajim
+ ];
+ de.utils = [
+ aspell
+ feh
+ pass
+ ];
+ gui.minimal = [
+ autocutsel
+ dunst
+ rxvt-unicode
+ unclutter-xfixes
+ ];
+ gui.full = [
+ arandr
+ redshift
+ screenkey
+ tigervnc
+ x11vnc
+ ];
+ gui.theme = [
+ adwaita-icon-theme
+ papirus-icon-theme
+ pywal
+ xsettingsd
+ ] ++ lib.optional cfg.gui.usePicom picom;
+ image.utils = [
+ imagemagick
+ ];
+ image.tools = [
+ gimp
+ inkscape
+ ];
+ manga.dl = [
+ gallery-dl
+ img2pdf
+ ];
+ media.tools = [
+ beets
+ exiftool
+ mpv
+ yt-dlp
+ ];
+ net.tools.minimal = [
+ host
+ traceroute
+ whois
+ ];
+ net.tools.full = [
+ nmap
+ ];
+ script.utils = [
+ espeak-ng
+ firejail
+ ruby
+ ];
+ sound.tools = [
+ alsa-tools
+ pulseaudio
+ pulsemixer
+ ];
+ sys.tools = [
+ lsof
+ pciutils
+ usbutils
+ vim
+ ];
+ writing.tools = [
+ pandoc
+ proselint
+ ];
+ };
+ programs.mosh.enable = cfg.cli.tools.full;
+ programs.zsh = {
+ enable = cfg.cli.shell;
+ syntaxHighlighting.enable = cfg.cli.shell;
+ };
+ programs.gnupg.agent = {
+ enable = cfg.de.utils;
+ pinentryPackage = pkgs.pinentry-qt;
+ };
+
+ fonts.packages = lib.optionals cfg.gui.fonts (
+ lib.optional cfg.gui.useEmoji
+ pkgs.noto-fonts-emoji ++
+ lib.optional (builtins.elem "jp" config.this.locales.all)
+ pkgs.noto-fonts-cjk-sans
+ ++ [
+ pkgs.dejavu_fonts
+ pkgs.unifont
+ ]);
+ fonts.enableDefaultPackages = lib.mkIf cfg.gui.fonts false;
+ };
+}
diff --git a/modules/syslog.nix b/modules/syslog.nix
new file mode 100644
index 0000000..13783eb
--- /dev/null
+++ b/modules/syslog.nix
@@ -0,0 +1,19 @@
+{ lib, config, ... }:
+
+let cfg = config.this.syslog;
+in
+{
+ options = {
+ this.syslog.enable = lib.mkEnableOption "syslogger";
+ };
+
+ config = lib.mkIf cfg.enable {
+ services.rsyslogd = {
+ enable = true;
+ defaultConfig = builtins.readFile ./rsyslogd.conf;
+ };
+ services.logrotate = {
+ enable = true;
+ };
+ };
+}