From 4ea08b3976188eb01a74548d68b227a7794b4caa Mon Sep 17 00:00:00 2001 From: Simon Parri Date: Fri, 9 May 2025 17:54:45 -0500 Subject: Add current configuration --- modules/sets.nix | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 modules/sets.nix (limited to 'modules/sets.nix') 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; + }; +} -- cgit v1.2.3