From 218a8c4d9010538fc6b3d533b32142bb68f5e874 Mon Sep 17 00:00:00 2001 From: Robert Helgesson Date: Sun, 16 Dec 2018 12:23:01 +0100 Subject: [PATCH] modules: support conditional module inclusion Also make use of this functionality for the `programs.chromium` module. See #501 --- modules/misc/news.nix | 4 +- modules/modules.nix | 209 ++++++++++++++++++++++-------------------- 2 files changed, 112 insertions(+), 101 deletions(-) diff --git a/modules/misc/news.nix b/modules/misc/news.nix index e609cadb..95948551 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -6,6 +6,8 @@ let cfg = config.news; + hostPlatform = pkgs.stdenv.hostPlatform; + entryModule = types.submodule ({ config, ... }: { options = { id = mkOption { @@ -734,7 +736,7 @@ in { time = "2018-08-19T20:46:09+00:00"; - condition = pkgs.stdenv.isLinux; + condition = hostPlatform.isLinux; message = '' A new modules is available: 'programs.chromium'. ''; diff --git a/modules/modules.nix b/modules/modules.nix index c3298d25..aa9c4583 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -12,106 +12,115 @@ with lib; let - modules = [ - ./accounts/email.nix - ./files.nix - ./home-environment.nix - ./manual.nix - ./misc/fontconfig.nix - ./misc/gtk.nix - ./misc/lib.nix - ./misc/news.nix - ./misc/nixpkgs.nix - ./misc/pam.nix - ./misc/qt.nix - ./misc/version.nix - ./misc/xdg.nix - ./programs/afew.nix - ./programs/alot.nix - ./programs/astroid.nix - ./programs/autorandr.nix - ./programs/bash.nix - ./programs/beets.nix - ./programs/browserpass.nix - ./programs/command-not-found/command-not-found.nix - ./programs/direnv.nix - ./programs/eclipse.nix - ./programs/emacs.nix - ./programs/feh.nix - ./programs/firefox.nix - ./programs/fish.nix - ./programs/fzf.nix - ./programs/git.nix - ./programs/gnome-terminal.nix - ./programs/go.nix - ./programs/home-manager.nix - ./programs/htop.nix - ./programs/info.nix - ./programs/jq.nix - ./programs/lesspipe.nix - ./programs/man.nix - ./programs/mbsync.nix - ./programs/mercurial.nix - ./programs/msmtp.nix - ./programs/neovim.nix - ./programs/newsboat.nix - ./programs/noti.nix - ./programs/notmuch.nix - ./programs/obs-studio.nix - ./programs/offlineimap.nix - ./programs/pidgin.nix - ./programs/rofi.nix - ./programs/ssh.nix - ./programs/taskwarrior.nix - ./programs/termite.nix - ./programs/texlive.nix - ./programs/tmux.nix - ./programs/urxvt.nix - ./programs/vim.nix - ./programs/vscode.nix - ./programs/zathura.nix - ./programs/zsh.nix - ./services/blueman-applet.nix - ./services/compton.nix - ./services/dunst.nix - ./services/flameshot.nix - ./services/gnome-keyring.nix - ./services/gpg-agent.nix - ./services/kbfs.nix - ./services/kdeconnect.nix - ./services/keepassx.nix - ./services/keybase.nix - ./services/mbsync.nix - ./services/mpd.nix - ./services/network-manager-applet.nix - ./services/nextcloud-client.nix - ./services/owncloud-client.nix - ./services/parcellite.nix - ./services/pasystray.nix - ./services/polybar.nix - ./services/random-background.nix - ./services/redshift.nix - ./services/screen-locker.nix - ./services/stalonetray.nix - ./services/status-notifier-watcher.nix - ./services/syncthing.nix - ./services/taffybar.nix - ./services/tahoe-lafs.nix - ./services/udiskie.nix - ./services/unclutter.nix - ./services/window-managers/awesome.nix - ./services/window-managers/i3.nix - ./services/window-managers/xmonad.nix - ./services/xscreensaver.nix - ./systemd.nix - ./xcursor.nix - ./xresources.nix - ./xsession.nix - - - ] - ++ - optional pkgs.stdenv.isLinux ./programs/chromium.nix; + hostPlatform = pkgs.stdenv.hostPlatform; + + checkPlatform = any (meta.platformMatch pkgs.stdenv.hostPlatform); + + loadModule = file: { condition ? true }: { + inherit file condition; + }; + + allModules = [ + (loadModule ./accounts/email.nix { }) + (loadModule ./files.nix { }) + (loadModule ./home-environment.nix { }) + (loadModule ./manual.nix { }) + (loadModule ./misc/fontconfig.nix { }) + (loadModule ./misc/gtk.nix { }) + (loadModule ./misc/lib.nix { }) + (loadModule ./misc/news.nix { }) + (loadModule ./misc/nixpkgs.nix { }) + (loadModule ./misc/pam.nix { }) + (loadModule ./misc/qt.nix { }) + (loadModule ./misc/version.nix { }) + (loadModule ./misc/xdg.nix { }) + (loadModule ./programs/afew.nix { }) + (loadModule ./programs/alot.nix { }) + (loadModule ./programs/astroid.nix { }) + (loadModule ./programs/autorandr.nix { }) + (loadModule ./programs/bash.nix { }) + (loadModule ./programs/beets.nix { }) + (loadModule ./programs/browserpass.nix { }) + (loadModule ./programs/chromium.nix { condition = hostPlatform.isLinux; }) + (loadModule ./programs/command-not-found/command-not-found.nix { }) + (loadModule ./programs/direnv.nix { }) + (loadModule ./programs/eclipse.nix { }) + (loadModule ./programs/emacs.nix { }) + (loadModule ./programs/feh.nix { }) + (loadModule ./programs/firefox.nix { }) + (loadModule ./programs/fish.nix { }) + (loadModule ./programs/fzf.nix { }) + (loadModule ./programs/git.nix { }) + (loadModule ./programs/gnome-terminal.nix { }) + (loadModule ./programs/go.nix { }) + (loadModule ./programs/home-manager.nix { }) + (loadModule ./programs/htop.nix { }) + (loadModule ./programs/info.nix { }) + (loadModule ./programs/jq.nix { }) + (loadModule ./programs/lesspipe.nix { }) + (loadModule ./programs/man.nix { }) + (loadModule ./programs/mbsync.nix { }) + (loadModule ./programs/mercurial.nix { }) + (loadModule ./programs/msmtp.nix { }) + (loadModule ./programs/neovim.nix { }) + (loadModule ./programs/newsboat.nix { }) + (loadModule ./programs/noti.nix { }) + (loadModule ./programs/notmuch.nix { }) + (loadModule ./programs/obs-studio.nix { }) + (loadModule ./programs/offlineimap.nix { }) + (loadModule ./programs/pidgin.nix { }) + (loadModule ./programs/rofi.nix { }) + (loadModule ./programs/ssh.nix { }) + (loadModule ./programs/taskwarrior.nix { }) + (loadModule ./programs/termite.nix { }) + (loadModule ./programs/texlive.nix { }) + (loadModule ./programs/tmux.nix { }) + (loadModule ./programs/urxvt.nix { }) + (loadModule ./programs/vim.nix { }) + (loadModule ./programs/vscode.nix { }) + (loadModule ./programs/zathura.nix { }) + (loadModule ./programs/zsh.nix { }) + (loadModule ./services/blueman-applet.nix { }) + (loadModule ./services/compton.nix { }) + (loadModule ./services/dunst.nix { }) + (loadModule ./services/flameshot.nix { }) + (loadModule ./services/gnome-keyring.nix { }) + (loadModule ./services/gpg-agent.nix { }) + (loadModule ./services/kbfs.nix { }) + (loadModule ./services/kdeconnect.nix { }) + (loadModule ./services/keepassx.nix { }) + (loadModule ./services/keybase.nix { }) + (loadModule ./services/mbsync.nix { }) + (loadModule ./services/mpd.nix { }) + (loadModule ./services/network-manager-applet.nix { }) + (loadModule ./services/nextcloud-client.nix { }) + (loadModule ./services/owncloud-client.nix { }) + (loadModule ./services/parcellite.nix { }) + (loadModule ./services/pasystray.nix { }) + (loadModule ./services/polybar.nix { }) + (loadModule ./services/random-background.nix { }) + (loadModule ./services/redshift.nix { }) + (loadModule ./services/screen-locker.nix { }) + (loadModule ./services/stalonetray.nix { }) + (loadModule ./services/status-notifier-watcher.nix { }) + (loadModule ./services/syncthing.nix { }) + (loadModule ./services/taffybar.nix { }) + (loadModule ./services/tahoe-lafs.nix { }) + (loadModule ./services/udiskie.nix { }) + (loadModule ./services/unclutter.nix { }) + (loadModule ./services/window-managers/awesome.nix { }) + (loadModule ./services/window-managers/i3.nix { }) + (loadModule ./services/window-managers/xmonad.nix { }) + (loadModule ./services/xscreensaver.nix { }) + (loadModule ./systemd.nix { }) + (loadModule ./xcursor.nix { }) + (loadModule ./xresources.nix { }) + (loadModule ./xsession.nix { }) + (loadModule { }) + (loadModule { }) + ]; + + modules = map (getAttr "file") (filter (getAttr "condition") allModules); pkgsModule = { options.nixosSubmodule = mkOption {