DankMaterialShell1 adds app launcher, lock screen, bar and so on in one consistent package.

dankMaterialShell = {
  url = "github:AvengeMedia/DankMaterialShell";
  inputs.nixpkgs.follows = "nixpkgs";
};
dmsPlugins = {
  url = "github:AvengeMedia/dms-plugins";
  flake = false;
};
dankCalculator = {
  url = "github:rochacbruno/DankCalculator";
  flake = false;
};
niriWindows = {
  url = "github:rochacbruno/DankNiriWindows";
  flake = false;
};
dms-emoji-launcher = {
  url = "github:devnullvoid/dms-emoji-launcher";
  flake = false;
};
flake.nix:inputs

Greeter

{ pkgs, config, ... }:
 
{
  imports = [ inputs.dankMaterialShell.nixosModules.greeter ];
  programs.dankMaterialShell.greeter = {
    enable = true;
    compositor.name = "niri";
  };
}
nixos

Configuration

inputs.dankMaterialShell.homeModules.dankMaterialShell.default
inputs.dankMaterialShell.homeModules.dankMaterialShell.niri
home-manager
{
  lib,
  pkgs,
  config,
  nixosConfig,
  ...
}:
 
{
  programs.dank-material-shell = {
    enable = true;
    niri = {
      enableKeybinds = true;
      includes.enable = false;
    };
    systemd.enable = true;
    settings = {
      acMonitorTimeout = 300;
      acLockTimeout = 305;
      fadeToLockEnabled = true;
      fadeToLockGracePeriod = 5;
      lockBeforeSuspend = true;
      useAutoLocation = true;
      showWorkspaceApps = true;
      fontFamily = config.stylix.fonts.sansSerif.name;
      monoFontFamily = config.stylix.fonts.monospace.name;
      controlCenterWidgets = [
        {
          id = "nightMode";
          enabled = true;
          width = 25;
        }
        {
          id = "darkMode";
          enabled = true;
          width = 25;
        }
        {
          id = "idleInhibitor";
          enabled = true;
          width = 25;
        }
        {
          id = "doNotDisturb";
          enabled = true;
          width = 25;
        }
        {
          id = "wifi";
          enabled = true;
          width = 50;
        }
        {
          id = "bluetooth";
          enabled = true;
          width = 50;
        }
        {
          id = "audioOutput";
          enabled = true;
          width = 50;
        }
        {
          id = "audioInput";
          enabled = true;
          width = 50;
        }
        {
          id = "volumeSlider";
          enabled = true;
          width = 50;
        }
        {
          id = "brightnessSlider";
          enabled = true;
          width = 50;
        }
      ];
    };
    session = {
      wallpaperPath = config.stylix.image;
    };
    plugins = {
      calculator.src = inputs.dankCalculator;
      dankBatteryAlerts.src = "${inputs.dmsPlugins}/DankBatteryAlerts";
      dankPomodoroTimer.src = "${inputs.dmsPlugins}/DankPomodoroTimer";
      emojiLauncher.src = inputs.dms-emoji-launcher;
      niriWindows.src = inputs.niriWindows;
    };
  };
  xdg.configFile."DankMaterialShell/plugin_settings.json".source =
    (pkgs.formats.json { }).generate "plugin_settings.json"
      {
        calculator.enabled = true;
        dankBatteryAlerts.enabled = true;
        dankPomodoroTimer.enabled = true;
        emojiLauncher.enabled = true;
        niriWindows.enabled = true;
      };
}
home-manager

Footnotes

  1. https://github.com/AvengeMedia/DankMaterialShell