chore: bump all

This commit is contained in:
2026-06-07 13:26:45 -06:00
parent ce31e48d42
commit 5d31f53b70
15 changed files with 771 additions and 680 deletions
+7 -4
View File
@@ -17,9 +17,12 @@ in {
};
config = lib.mkIf cfg.enable {
xdg.configFile = {
"DankMaterialShell/settings.json".source =
json.generate "settings.json" cfg.settings;
};
stylix.targets.dank-material-shell.enable = true;
programs.dank-material-shell.enable = true;
# xdg.configFile = {
# "DankMaterialShell/settings.json".source =
# json.generate "settings.json" cfg.settings;
# };
};
}
+15
View File
@@ -0,0 +1,15 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.guile;
in {
options.sydnix.guile = {
enable = lib.mkEnableOption "Guile Scheme";
};
config = lib.mkIf cfg.enable {
home.file.".guile".text = ''
(use-modules (ice-9 readline))
(activate-readline)
'';
};
}
+2 -2
View File
@@ -45,8 +45,8 @@ in {
config = mkIf cfg.enable {
home.persistence = {
"/persist/home/${config.home.username}" = {
allowOther = true;
"/persist" = {
# allowOther = true;
directories = cfg.directories ++ cfg.cache.directories;
files = cfg.files ++ cfg.cache.files;
};
+1 -1
View File
@@ -20,7 +20,7 @@ in {
# https://github.com/ValveSoftware/steam-for-linux/issues/10552
# https://github.com/nix-community/impermanence/issues/165
# { directory = ".local/share/Steam"; method = "symlink"; }
{ directory = ".steam"; method = "symlink"; }
{ directory = ".steam"; }
];
home.packages = [
+1 -1
View File
@@ -7,6 +7,6 @@ in {
};
config = lib.mkIf cfg.overlay.enable {
nixpkgs.overlays = [ inputs.sydpkgs.overlays.default ];
# nixpkgs.overlays = [ inputs.sydpkgs.overlays.default ];
};
}
+359 -409
View File
@@ -11,416 +11,366 @@ in {
enable = lib.mkEnableOption "Dank Material Shell";
};
config = lib.mkIf cfg.enable
(let
theme = {
dark = with config.lib.stylix.colors.withHashtag; {
name = "Stylix generatated dark theme";
primary = base0D;
primaryText = base00;
primaryContainer = base0C;
secondary = base0E;
surface = base01;
surfaceText = base05;
surfaceVariant = base02;
surfaceVariantText = base04;
surfaceTint = base0D;
background = base00;
backgroundText = base05;
outline = base03;
surfaceContainer = base01;
surfaceContainerHigh = base02;
surfaceContainerHighest = base03;
error = base08;
warning = base0A;
info = base0C;
} // {
primary = base06;
surfaceContainerHigh = "#2a2a37"; # Sunk Ink 2
surfaceContainerHighest = base05;
};
light = with config.lib.stylix.colors.withHashtag; {
name = "Stylix generatated light theme";
primary = base0D;
primaryText = base07;
primaryContainer = base0C;
secondary = base0E;
surface = base06;
surfaceText = base01;
surfaceVariant = base07;
surfaceVariantText = base02;
surfaceTint = base0D;
background = base07;
backgroundText = base00;
outline = base04;
surfaceContainer = base06;
surfaceContainerHigh = base05;
surfaceContainerHighest = base04;
error = base08;
warning = base0A;
info = base0C;
};
};
in {
programs.niri.settings = {
# Open DMS windows as floating by default
window-rules = [
{
matches = [{app-id = "#org.quickshell$";}];
open-floating = true;
}
];
# Blur wallpaper when overview is open.
layer-rules = [
{
matches = [{ namespace = "dms:blurwallpaper"; }];
place-within-backdrop = true;
}
];
spawn-at-startup = [
{
command = [
(lib.getExe' pkgs.wl-clipboard "wl-paste")
"--watch" "cliphist" "store"
];
}
];
};
sydnix.users.crumb.niri = {
polkit.enable = false;
swaylock.enable = false;
portal.enable = false;
swaync.enable = false;
gammastep.enable = false;
binds =
let dms-ipc = config.lib.niri.actions.spawn "dms" "ipc";
in {
"Mod+D" = {
action = dms-ipc "spotlight" "toggle";
hotkey-overlay.title = "Toggle Application Launcher";
};
"Mod+P" = {
action = dms-ipc "notepad" "toggle";
hotkey-overlay.title = "Toggle Notepad";
};
"Mod+Ctrl+L" = {
action = dms-ipc "lock" "lock";
hotkey-overlay.title = "Toggle Lock Screen";
};
"XF86AudioRaiseVolume" = {
allow-when-locked = true;
action = dms-ipc "audio" "increment" "3";
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
action = dms-ipc "audio" "decrement" "3";
};
"XF86AudioMute" = {
allow-when-locked = true;
action = dms-ipc "audio" "mute";
};
"XF86AudioMicMute" = {
allow-when-locked = true;
action = dms-ipc "audio" "micmute";
};
"XF86MonBrightnessUp" = {
allow-when-locked = true;
action = dms-ipc "brightness" "increment" "5" "";
};
"XF86MonBrightnessDown" = {
allow-when-locked = true;
action = dms-ipc "brightness" "decrement" "5" "";
};
config = lib.mkIf cfg.enable {
programs.niri.settings = {
# Open DMS windows as floating by default
window-rules = [
{
matches = [{app-id = "#org.quickshell$";}];
open-floating = true;
}
];
# Blur wallpaper when overview is open.
layer-rules = [
{
matches = [{ namespace = "dms:blurwallpaper"; }];
place-within-backdrop = true;
}
];
spawn-at-startup = [
{
command = [
(lib.getExe' pkgs.wl-clipboard "wl-paste")
"--watch" "cliphist" "store"
];
}
];
};
sydnix.users.crumb.niri = {
polkit.enable = false;
swaylock.enable = false;
portal.enable = false;
swaync.enable = false;
gammastep.enable = false;
binds =
let dms-ipc = config.lib.niri.actions.spawn "dms" "ipc";
in {
"Mod+D" = {
action = dms-ipc "spotlight" "toggle";
hotkey-overlay.title = "Toggle Application Launcher";
};
"Mod+P" = {
action = dms-ipc "notepad" "toggle";
hotkey-overlay.title = "Toggle Notepad";
};
"Mod+Ctrl+L" = {
action = dms-ipc "lock" "lock";
hotkey-overlay.title = "Toggle Lock Screen";
};
"XF86AudioRaiseVolume" = {
allow-when-locked = true;
action = dms-ipc "audio" "increment" "3";
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
action = dms-ipc "audio" "decrement" "3";
};
"XF86AudioMute" = {
allow-when-locked = true;
action = dms-ipc "audio" "mute";
};
"XF86AudioMicMute" = {
allow-when-locked = true;
action = dms-ipc "audio" "micmute";
};
"XF86MonBrightnessUp" = {
allow-when-locked = true;
action = dms-ipc "brightness" "increment" "5" "";
};
"XF86MonBrightnessDown" = {
allow-when-locked = true;
action = dms-ipc "brightness" "decrement" "5" "";
};
};
sydnix.dank-material-shell = {
enable = true;
settings = {
theme = "dark";
currentThemeName = "custom";
customThemeFile =
pkgs.writeText
"dankMaterialShell-stylix-theme.json"
(builtins.toJSON theme);
popupTransparency = 1;
dockTransparency = 1;
use24HourClock = true;
showSeconds = false;
useFahrenheit = false;
nightModeEnabled = true;
animationSpeed = 1;
customAnimationDuration = 500;
wallpaperFillMode = "Fill";
blurredWallpaperLayer = false;
blurWallpaperOnOverview = true;
showLauncherButton = true;
showWorkspaceSwitcher = true;
showFocusedWindow = true;
showWeather = false;
showMusic = true;
showClipboard = true;
showCpuUsage = true;
showMemUsage = true;
showCpuTemp = true;
showGpuTemp = true;
selectedGpuIndex = 0;
enabledGpuPciIds = [];
showSystemTray = true;
showClock = true;
showNotificationButton = true;
showBattery = true;
showControlCenterButton = true;
showCapsLockIndicator = true;
controlCenterShowNetworkIcon = true;
controlCenterShowBluetoothIcon = on ["fruitbook"];
controlCenterShowAudioIcon = true;
controlCenterShowVpnIcon = true;
controlCenterShowBrightnessIcon = false;
controlCenterShowMicIcon = false;
controlCenterShowBatteryIcon = false;
controlCenterShowPrinterIcon = false;
showPrivacyButton = true;
privacyShowMicIcon = false;
privacyShowCameraIcon = false;
privacyShowScreenShareIcon = false;
controlCenterWidgets = [
{
id = "volumeSlider";
enabled = true;
width = 50;
}
{
id = "brightnessSlider";
enabled = true;
width = 50;
}
{
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 = "nightMode";
enabled = true;
width = 50;
}
{
id = "darkMode";
enabled = true;
width = 50;
}
];
showWorkspaceIndex = false;
showWorkspacePadding = false;
workspaceScrolling = false;
showWorkspaceApps = false;
maxWorkspaceIcons = 3;
workspacesPerMonitor = true;
showOccupiedWorkspacesOnly = false;
dwlShowAllTags = false;
workspaceNameIcons = {};
waveProgressEnabled = true;
scrollTitleEnabled = true;
clockCompactMode = false;
focusedWindowCompactMode = false;
runningAppsCompactMode = true;
keyboardLayoutNameCompactMode = false;
runningAppsCurrentWorkspace = false;
runningAppsGroupByApp = false;
centeringMode = "index";
clockDateFormat = "";
lockDateFormat = "";
mediaSize = 1;
appLauncherViewMode = "list";
spotlightModalViewMode = "list";
sortAppsAlphabetically = false;
appLauncherGridColumns = 4;
spotlightCloseNiriOverview = true;
niriOverviewOverlayEnabled = true;
weatherLocation = "Arvada, Colorado";
weatherCoordinates = "39.8005505,-105.0811573";
useAutoLocation = false;
weatherEnabled = true;
networkPreference = "auto";
vpnLastConnected = "";
iconTheme = "System Default";
launcherLogoMode = "apps";
launcherLogoCustomPath = "";
launcherLogoColorOverride = "";
launcherLogoColorInvertOnMode = false;
launcherLogoBrightness = 0.5;
launcherLogoContrast = 1;
launcherLogoSizeOffset = 0;
fontFamily = "Inter Variable";
monoFontFamily = "Fira Code";
fontWeight = 400;
fontScale = 1;
notepadUseMonospace = true;
notepadFontFamily = "";
notepadFontSize = 14;
notepadShowLineNumbers = false;
notepadTransparencyOverride = -1;
notepadLastCustomTransparency = 0.7;
soundsEnabled = true;
useSystemSoundTheme = false;
soundNewNotification = true;
soundVolumeChanged = true;
soundPluggedIn = true;
acMonitorTimeout = 0;
acLockTimeout = 0;
acSuspendTimeout = 0;
acSuspendBehavior = 0;
acProfileName = "";
batteryMonitorTimeout = 0;
batteryLockTimeout = 0;
batterySuspendTimeout = 0;
batterySuspendBehavior = 0;
batteryProfileName = "";
lockBeforeSuspend = true;
loginctlLockIntegration = true;
fadeToLockEnabled = true;
fadeToLockGracePeriod = 5;
launchPrefix = "";
brightnessDevicePins = {};
wifiNetworkPins = {};
bluetoothDevicePins = {};
audioInputDevicePins.preferredInput =
"alsa_input.usb-Generic_Blue_Microphones_2041BAB03EZ8-00.analog-stereo";
audioOutputDevicePins.preferredOutput =
"alsa_output.usb-Jieli_Technology_CA-2890_USB_Speaker_Bar_4250315A3537380E-00.analog-stereo";
gtkThemingEnabled = false;
qtThemingEnabled = false;
syncModeWithPortal = true;
terminalsAlwaysDark = false;
showDock = false;
dockAutoHide = false;
dockGroupByApp = false;
dockOpenOnOverview = false;
dockPosition = 1;
dockSpacing = 4;
dockBottomGap = 0;
dockMargin = 0;
dockIconSize = 40;
dockIndicatorStyle = "circle";
dockBorderEnabled = false;
dockBorderColor = "surfaceText";
dockBorderOpacity = 1;
dockBorderThickness = 1;
notificationOverlayEnabled = false;
modalDarkenBackground = true;
lockScreenShowPowerActions = true;
enableFprint = false;
maxFprintTries = 15;
lockScreenActiveMonitor = "all";
lockScreenInactiveColor = "#000000";
hideBrightnessSlider = false;
notificationTimeoutLow = 5000;
notificationTimeoutNormal = 5000;
notificationTimeoutCritical = 0;
notificationPopupPosition = 0;
osdAlwaysShowValue = false;
osdPosition = 5;
osdVolumeEnabled = true;
osdMediaVolumeEnabled = true;
osdBrightnessEnabled = true;
osdIdleInhibitorEnabled = true;
osdMicMuteEnabled = true;
osdCapsLockEnabled = true;
osdPowerProfileEnabled = false;
osdAudioOutputEnabled = true;
powerActionConfirm = true;
powerActionHoldDuration = 0.5;
powerMenuActions = [
"reboot"
"logout"
"poweroff"
"lock"
"suspend"
"restart"
];
powerMenuDefaultAction = "logout";
powerMenuGridLayout = false;
customPowerActionLock = "";
customPowerActionLogout = "";
customPowerActionSuspend = "";
customPowerActionHibernate = "";
customPowerActionReboot = "";
customPowerActionPowerOff = "";
updaterUseCustomCommand = false;
updaterCustomCommand = "";
updaterTerminalAdditionalParams = "";
displayNameMode = "system";
screenPreferences.wallpaper = [];
showOnLastDisplay = {};
barConfigs = [
{
id = "default";
name = "Main Bar";
enabled = true;
position = 2;
screenPreferences = [
"all"
];
showOnLastDisplay = true;
leftWidgets = [
"launcherButton"
"workspaceSwitcher"
"focusedWindow"
];
centerWidgets = [
"music"
"clock"
"weather"
];
rightWidgets = [
"systemTray"
"clipboard"
"cpuUsage"
"memUsage"
"notificationButton"
"battery"
"controlCenterButton"
];
spacing = 4;
innerPadding = 4;
bottomGap = 0;
transparency = 1;
widgetTransparency = 1;
squareCorners = false;
noBackground = false;
gothCornersEnabled = false;
gothCornerRadiusOverride = false;
gothCornerRadiusValue = 12;
borderEnabled = false;
borderColor = "surfaceText";
borderOpacity = 1;
borderThickness = 1;
fontScale = 1;
autoHide = false;
autoHideDelay = 250;
openOnOverview = false;
visible = true;
popupGapsAuto = true;
popupGapsManual = 4;
}
];
configVersion = 2;
};
};
sydnix.dank-material-shell = {
enable = true;
settings = {
theme = "dark";
currentThemeName = "custom";
# customThemeFile =
# pkgs.writeText
# "dankMaterialShell-stylix-theme.json"
# (builtins.toJSON theme);
popupTransparency = 1;
dockTransparency = 1;
use24HourClock = true;
showSeconds = false;
useFahrenheit = false;
nightModeEnabled = true;
animationSpeed = 1;
customAnimationDuration = 500;
wallpaperFillMode = "Fill";
blurredWallpaperLayer = false;
blurWallpaperOnOverview = true;
showLauncherButton = true;
showWorkspaceSwitcher = true;
showFocusedWindow = true;
showWeather = false;
showMusic = true;
showClipboard = true;
showCpuUsage = true;
showMemUsage = true;
showCpuTemp = true;
showGpuTemp = true;
selectedGpuIndex = 0;
enabledGpuPciIds = [];
showSystemTray = true;
showClock = true;
showNotificationButton = true;
showBattery = true;
showControlCenterButton = true;
showCapsLockIndicator = true;
controlCenterShowNetworkIcon = true;
controlCenterShowBluetoothIcon = on ["fruitbook"];
controlCenterShowAudioIcon = true;
controlCenterShowVpnIcon = true;
controlCenterShowBrightnessIcon = false;
controlCenterShowMicIcon = false;
controlCenterShowBatteryIcon = false;
controlCenterShowPrinterIcon = false;
showPrivacyButton = true;
privacyShowMicIcon = false;
privacyShowCameraIcon = false;
privacyShowScreenShareIcon = false;
controlCenterWidgets = [
{
id = "volumeSlider";
enabled = true;
width = 50;
}
{
id = "brightnessSlider";
enabled = true;
width = 50;
}
{
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 = "nightMode";
enabled = true;
width = 50;
}
{
id = "darkMode";
enabled = true;
width = 50;
}
];
showWorkspaceIndex = false;
showWorkspacePadding = false;
workspaceScrolling = false;
showWorkspaceApps = false;
maxWorkspaceIcons = 3;
workspacesPerMonitor = true;
showOccupiedWorkspacesOnly = false;
dwlShowAllTags = false;
workspaceNameIcons = {};
waveProgressEnabled = true;
scrollTitleEnabled = true;
clockCompactMode = false;
focusedWindowCompactMode = false;
runningAppsCompactMode = true;
keyboardLayoutNameCompactMode = false;
runningAppsCurrentWorkspace = false;
runningAppsGroupByApp = false;
centeringMode = "index";
clockDateFormat = "";
lockDateFormat = "";
mediaSize = 1;
appLauncherViewMode = "list";
spotlightModalViewMode = "list";
sortAppsAlphabetically = false;
appLauncherGridColumns = 4;
spotlightCloseNiriOverview = true;
niriOverviewOverlayEnabled = true;
weatherLocation = "Arvada, Colorado";
weatherCoordinates = "39.8005505,-105.0811573";
useAutoLocation = false;
weatherEnabled = true;
networkPreference = "auto";
vpnLastConnected = "";
iconTheme = "System Default";
launcherLogoMode = "apps";
launcherLogoCustomPath = "";
launcherLogoColorOverride = "";
launcherLogoColorInvertOnMode = false;
launcherLogoBrightness = 0.5;
launcherLogoContrast = 1;
launcherLogoSizeOffset = 0;
fontFamily = "Inter Variable";
monoFontFamily = "Fira Code";
fontWeight = 400;
fontScale = 1;
notepadUseMonospace = true;
notepadFontFamily = "";
notepadFontSize = 14;
notepadShowLineNumbers = false;
notepadTransparencyOverride = -1;
notepadLastCustomTransparency = 0.7;
soundsEnabled = true;
useSystemSoundTheme = false;
soundNewNotification = true;
soundVolumeChanged = true;
soundPluggedIn = true;
acMonitorTimeout = 0;
acLockTimeout = 0;
acSuspendTimeout = 0;
acSuspendBehavior = 0;
acProfileName = "";
batteryMonitorTimeout = 0;
batteryLockTimeout = 0;
batterySuspendTimeout = 0;
batterySuspendBehavior = 0;
batteryProfileName = "";
lockBeforeSuspend = true;
loginctlLockIntegration = true;
fadeToLockEnabled = true;
fadeToLockGracePeriod = 5;
launchPrefix = "";
brightnessDevicePins = {};
wifiNetworkPins = {};
bluetoothDevicePins = {};
audioInputDevicePins.preferredInput =
"alsa_input.usb-Generic_Blue_Microphones_2041BAB03EZ8-00.analog-stereo";
audioOutputDevicePins.preferredOutput =
"alsa_output.usb-Jieli_Technology_CA-2890_USB_Speaker_Bar_4250315A3537380E-00.analog-stereo";
gtkThemingEnabled = false;
qtThemingEnabled = false;
syncModeWithPortal = true;
terminalsAlwaysDark = false;
showDock = false;
dockAutoHide = false;
dockGroupByApp = false;
dockOpenOnOverview = false;
dockPosition = 1;
dockSpacing = 4;
dockBottomGap = 0;
dockMargin = 0;
dockIconSize = 40;
dockIndicatorStyle = "circle";
dockBorderEnabled = false;
dockBorderColor = "surfaceText";
dockBorderOpacity = 1;
dockBorderThickness = 1;
notificationOverlayEnabled = false;
modalDarkenBackground = true;
lockScreenShowPowerActions = true;
enableFprint = false;
maxFprintTries = 15;
lockScreenActiveMonitor = "all";
lockScreenInactiveColor = "#000000";
hideBrightnessSlider = false;
notificationTimeoutLow = 5000;
notificationTimeoutNormal = 5000;
notificationTimeoutCritical = 0;
notificationPopupPosition = 0;
osdAlwaysShowValue = false;
osdPosition = 5;
osdVolumeEnabled = true;
osdMediaVolumeEnabled = true;
osdBrightnessEnabled = true;
osdIdleInhibitorEnabled = true;
osdMicMuteEnabled = true;
osdCapsLockEnabled = true;
osdPowerProfileEnabled = false;
osdAudioOutputEnabled = true;
powerActionConfirm = true;
powerActionHoldDuration = 0.5;
powerMenuActions = [
"reboot"
"logout"
"poweroff"
"lock"
"suspend"
"restart"
];
powerMenuDefaultAction = "logout";
powerMenuGridLayout = false;
customPowerActionLock = "";
customPowerActionLogout = "";
customPowerActionSuspend = "";
customPowerActionHibernate = "";
customPowerActionReboot = "";
customPowerActionPowerOff = "";
updaterUseCustomCommand = false;
updaterCustomCommand = "";
updaterTerminalAdditionalParams = "";
displayNameMode = "system";
screenPreferences.wallpaper = [];
showOnLastDisplay = {};
barConfigs = [
{
id = "default";
name = "Main Bar";
enabled = true;
position = 2;
screenPreferences = [
"all"
];
showOnLastDisplay = true;
leftWidgets = [
"launcherButton"
"workspaceSwitcher"
"focusedWindow"
];
centerWidgets = [
"music"
"clock"
"weather"
];
rightWidgets = [
"systemTray"
"clipboard"
"cpuUsage"
"memUsage"
"notificationButton"
"battery"
"controlCenterButton"
];
spacing = 4;
innerPadding = 4;
bottomGap = 0;
transparency = 1;
widgetTransparency = 1;
squareCorners = false;
noBackground = false;
gothCornersEnabled = false;
gothCornerRadiusOverride = false;
gothCornerRadiusValue = 12;
borderEnabled = false;
borderColor = "surfaceText";
borderOpacity = 1;
borderThickness = 1;
fontScale = 1;
autoHide = false;
autoHideDelay = 250;
openOnOverview = false;
visible = true;
popupGapsAuto = true;
popupGapsManual = 4;
}
];
configVersion = 2;
};
});
};
};
}
+44 -6
View File
@@ -7,9 +7,9 @@ in {
};
config = lib.mkIf cfg.enable {
programs.dms-shell = {
programs.dank-material-shell = {
enable = true;
enableDynamicTheming = false;
# enableDynamicTheming = false;
};
# Start after xwayland-satellite, if possible. So DMS can start
@@ -19,10 +19,48 @@ in {
after = ["xwayland-satellite.service"];
};
services.displayManager.dms-greeter = {
enable = true;
compositor.name = assert config.sydnix.niri.enable; "niri";
configHome = "/home/msyds"; # Really stupid.
# programs.dank-material-shell.greeter = {
# enable = true;
# compositor.name = "niri";
# # configHome = "/home/msyds";
# logs = {
# save = true;
# path = "/tmp/dms-greeter.log";
# };
# };
# services.greetd.settings.default_session.command = "";
services.displayManager = {
autoLogin.enable = false;
dms-greeter = {
enable = true;
compositor = {
name = assert config.sydnix.niri.enable; "niri";
# see: https://github.com/AvengeMedia/DankMaterialShell/commit/5ceb908b8b69c253e259b5437020192dcad4bfde
customConfig = ''
hotkey-overlay {
skip-at-startup
}
environment {
DMS_RUN_GREETER "1"
}
gestures {
hot-corners {
off
}
}
layout {
background-color "#000000"
}
'';
};
# configHome = "/home/msyds"; # Really stupid.
logs = {
save = true;
path = "/var/lib/dms-greeter/log";
};
};
};
};
}
+42 -27
View File
@@ -24,36 +24,51 @@ in {
};
config = mkIf cfg.enable {
boot.initrd.postDeviceCommands = ''
# Mount the btrfs filesystem.
mkdir -p /btrfs-tmp
mount -t btrfs "${cfg.device}" /btrfs-tmp
boot.initrd.systemd.services.rollback = {
description = ''
Rollback root filesystem to empty while maintaining old roots
'';
wantedBy = [ "initrd.target" ];
before = [ "sysroot.mount" ];
path = with pkgs; [
coreutils
findutils
util-linuxMinimal.bin
btrfs-progs
];
unitConfig.DefaultDependencies = "no";
serviceConfig.Type = "oneshot";
script = ''
# Mount the btrfs filesystem.
mkdir -p /btrfs-tmp
mount -t btrfs "${cfg.device}" /btrfs-tmp
# If the moribund subvolume exists, send it do 'death row' (old-roots),
# where live for about three days before its eventual deletion.
if [[ -e "/btrfs-tmp/${cfg.subvolume}" ]]; then
mkdir -p /btrfs-tmp/old-roots
timestamp=$(date --date="@$(stat -c %Y "/btrfs-tmp/${cfg.subvolume}")" "+%Y-%m-%-d_%H:%M:%S")
mv "/btrfs-tmp/${cfg.subvolume}" "/btrfs-tmp/old-roots/$timestamp"
fi
# If the moribund subvolume exists, send it do 'death row' (old-roots),
# where live for about three days before its eventual deletion.
if [[ -e "/btrfs-tmp/${cfg.subvolume}" ]]; then
mkdir -p /btrfs-tmp/old-roots
timestamp=$(date --date="@$(stat -c %Y "/btrfs-tmp/${cfg.subvolume}")" "+%Y-%m-%-d_%H:%M:%S")
mv "/btrfs-tmp/${cfg.subvolume}" "/btrfs-tmp/old-roots/$timestamp"
fi
delete_subvolume_recursively() {
IFS=$'\n'
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "/btrfs-tmp/$i"
done
btrfs subvolume delete "$1"
}
delete_subvolume_recursively() {
IFS=$'\n'
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "/btrfs-tmp/$i"
done
btrfs subvolume delete "$1"
}
# Delete previous roots older than three days.
# TODO: I would prefer archiving the last N previous roots, rather than
# time.
for i in $(find /btrfs-tmp/old-roots/ -maxdepth 1 -mtime +3); do
delete_subvolume_recursively "$i"
done
# Delete previous roots older than three days.
# TODO: I would prefer archiving the last N previous roots, rather than
# time.
for i in $(find /btrfs-tmp/old-roots/ -maxdepth 1 -mtime +3); do
delete_subvolume_recursively "$i"
done
btrfs subvolume create "/btrfs-tmp/${cfg.subvolume}"
umount /btrfs-tmp
'';
btrfs subvolume create "/btrfs-tmp/${cfg.subvolume}"
umount /btrfs-tmp
'';
};
};
}
+1 -1
View File
@@ -14,7 +14,7 @@ in {
package = pkgs.niri-unstable;
};
security.pam.services.swaylock = {};
# security.pam.services.swaylock = {};
};
}