obliterate home-manager, rename some elements

This commit is contained in:
atagen 2025-08-13 20:27:25 +10:00
parent 5575604452
commit 2e49d9c484
48 changed files with 1283 additions and 1315 deletions

View file

@ -5,12 +5,12 @@
...
}:
{
home.packages = getPkgs {
user.packages = getPkgs {
inherit (pkgs)
avizo
playerctl
;
};
hm.quickServices."avizo-service" = "${lib.getExe' pkgs.avizo "avizo-service"}";
quick.services."avizo-service" = "${lib.getExe' pkgs.avizo "avizo-service"}";
}

View file

@ -1,120 +1,122 @@
{
pkgs,
lib,
config,
inputs,
scope,
...
}:
let
inherit (lib)
range
nameValuePair
mapAttrs'
mergeAttrsList
;
inherit (builtins) listToAttrs replaceStrings;
inherit (config.hm.lib.niri) actions;
hBinds = {
H = "left";
L = "right";
};
vBinds = {
J = "down";
K = "up";
};
makeDirBind =
mods: cmd: keys:
mapAttrs' (
key: dir:
nameValuePair "${mods}+${key}" {
action = actions."${replaceStrings [ "$DIR" ] [ "${dir}" ] "${cmd}"}";
}
) keys;
makeWsBind =
mods: cmd:
listToAttrs (
map (num: {
name = "${mods}+${builtins.toString num}";
value = {
action."${cmd}" = num;
};
}) (range 1 6)
);
tagctl = lib.getExe' inputs.niri-tag.packages.${pkgs.system}.unstable "tagctl";
makeTagBind =
mods: cmd:
listToAttrs (
map (num: {
name = "${mods}+${builtins.toString num}";
value = {
action.spawn = [
tagctl
cmd
(builtins.toString num)
];
};
}) (range 1 6)
);
in
scope "hm.programs.niri.settings" {
binds = mergeAttrsList [
{
"Mod+D".action.spawn = [
"qs"
"ipc"
"call"
"launch"
"toggle"
];
"Mod+F".action.spawn = "firefox";
"Mod+E".action.spawn = "nautilus";
"Mod+Return".action.spawn = "foot";
"Mod+Shift+E".action.spawn = "wlogout";
"Mod+Equal".action.spawn = "bitwarden";
"Mod+Shift+Q".action = actions.close-window;
"Mod+Shift+S".action = actions.screenshot;
"Mod+R".action = actions.switch-preset-column-width;
"Mod+Shift+R".action = actions.maximize-column;
"XF86AudioRaiseVolume".action.spawn = [
"volumectl"
"-u"
"up"
];
"XF86AudioLowerVolume".action.spawn = [
"volumectl"
"-u"
"down"
];
"XF86AudioMute".action.spawn = [
"volumectl"
"toggle-mute"
];
"XF86AudioStop".action.spawn = [
"playerctl"
"stop"
];
"XF86AudioPlay".action.spawn = [
"playerctl"
"play-pause"
];
"XF86AudioNext".action.spawn = [
"playerctl"
"next"
];
"XF86AudioPrev".action.spawn = [
"playerctl"
"previous"
];
"Mod+Space".action = actions.toggle-window-floating;
}
(makeDirBind "Mod" "focus-window-$DIR" vBinds)
(makeDirBind "Mod" "focus-column-or-monitor-$DIR" hBinds)
(makeDirBind "Mod+Shift" "move-column-$DIR-or-to-monitor-$DIR" hBinds)
(makeDirBind "Mod+Ctrl" "consume-or-expel-window-$DIR" hBinds)
(makeDirBind "Mod+Ctrl" "move-window-$DIR" vBinds)
(makeTagBind "Mod" "toggle-tag")
(makeTagBind "Mod+Shift" "toggle")
(makeTagBind "Mod+Ctrl" "exclusive-tag")
];
}
_: { }
# TODO rewrite this with hjem-rum
# {
# pkgs,
# lib,
# config,
# inputs,
# scope,
# ...
# }:
# let
# inherit (lib)
# range
# nameValuePair
# mapAttrs'
# mergeAttrsList
# ;
# inherit (builtins) listToAttrs replaceStrings;
# inherit (config.hm.lib.niri) actions;
# hBinds = {
# H = "left";
# L = "right";
# };
# vBinds = {
# J = "down";
# K = "up";
# };
# makeDirBind =
# mods: cmd: keys:
# mapAttrs' (
# key: dir:
# nameValuePair "${mods}+${key}" {
# action = actions."${replaceStrings [ "$DIR" ] [ "${dir}" ] "${cmd}"}";
# }
# ) keys;
# makeWsBind =
# mods: cmd:
# listToAttrs (
# map (num: {
# name = "${mods}+${builtins.toString num}";
# value = {
# action."${cmd}" = num;
# };
# }) (range 1 6)
# );
# tagctl = lib.getExe' inputs.niri-tag.packages.${pkgs.system}.unstable "tagctl";
# makeTagBind =
# mods: cmd:
# listToAttrs (
# map (num: {
# name = "${mods}+${builtins.toString num}";
# value = {
# action.spawn = [
# tagctl
# cmd
# (builtins.toString num)
# ];
# };
# }) (range 1 6)
# );
# in
# scope "hm.programs.niri.settings" {
# binds = mergeAttrsList [
# {
# "Mod+D".action.spawn = [
# "qs"
# "ipc"
# "call"
# "launch"
# "toggle"
# ];
# "Mod+F".action.spawn = "firefox";
# "Mod+E".action.spawn = "nautilus";
# "Mod+Return".action.spawn = "foot";
# "Mod+Shift+E".action.spawn = "wlogout";
# "Mod+Equal".action.spawn = "bitwarden";
# "Mod+Shift+Q".action = actions.close-window;
# "Mod+Shift+S".action = actions.screenshot;
# "Mod+R".action = actions.switch-preset-column-width;
# "Mod+Shift+R".action = actions.maximize-column;
# "XF86AudioRaiseVolume".action.spawn = [
# "volumectl"
# "-u"
# "up"
# ];
# "XF86AudioLowerVolume".action.spawn = [
# "volumectl"
# "-u"
# "down"
# ];
# "XF86AudioMute".action.spawn = [
# "volumectl"
# "toggle-mute"
# ];
# "XF86AudioStop".action.spawn = [
# "playerctl"
# "stop"
# ];
# "XF86AudioPlay".action.spawn = [
# "playerctl"
# "play-pause"
# ];
# "XF86AudioNext".action.spawn = [
# "playerctl"
# "next"
# ];
# "XF86AudioPrev".action.spawn = [
# "playerctl"
# "previous"
# ];
# "Mod+Space".action = actions.toggle-window-floating;
# }
# (makeDirBind "Mod" "focus-window-$DIR" vBinds)
# (makeDirBind "Mod" "focus-column-or-monitor-$DIR" hBinds)
# (makeDirBind "Mod+Shift" "move-column-$DIR-or-to-monitor-$DIR" hBinds)
# (makeDirBind "Mod+Ctrl" "consume-or-expel-window-$DIR" hBinds)
# (makeDirBind "Mod+Ctrl" "move-window-$DIR" vBinds)
# (makeTagBind "Mod" "toggle-tag")
# (makeTagBind "Mod+Shift" "toggle")
# (makeTagBind "Mod+Ctrl" "exclusive-tag")
# ];
# }

View file

@ -1,92 +1,122 @@
{
lib,
scope,
pkgs,
...
}:
let
officialAddon = name: {
install_url = lib.strings.concatStrings [
"https://addons.mozilla.org/firefox/downloads/latest/"
name
"/latest.xpi"
{
user.packages = [ pkgs.chromium ];
programs.chromium = {
enable = true;
homepageLocation = "about:blank";
extraOpts = {
"BrowserSignin" = 0;
"SyncDisabled" = true;
"DriveDisabled" = true;
"AIModeSettings" = 1;
"GenAiDefaultSettings" = 1;
"SafeBrowsingProtectionLevel" = 0;
"DeviceAutoUpdateDisabled" = true;
"PasswordManagerEnabled" = false;
"SpellcheckEnabled" = true;
"SpellcheckLanguage" = [
"en-AU"
];
"CloudReportingEnabled" = false;
"GoogleWorkspaceCloudUpload" = "disallowed";
"MicrosoftOfficeCloudUpload" = "disallowed";
};
extensions = [
"ddkjiahejlhfcafbddmgiahcphecmpfh" # ublock origin lite
"eimadpbcbfnmbkopoojfekhnkhdbieeh" # dark reader
"hfjbmagddngcpeloejdejnfgbamkjaeg" # vimium c
"bkmmlbllpjdpgcgdohbaghfaecnddhni" # webrtc protect
"nngceckbapebfimnlniiiahkandclblb" # bitwarden
];
installation_mode = "force_installed";
};
lock-false = {
Value = false;
Status = "locked";
};
lock-true = {
Value = true;
Status = "locked";
};
in
scope "hm.programs.firefox" {
enable = true;
policies = {
DisableTelemetry = true;
DisableFirefoxStudies = true;
EnableTrackingProtection = {
Value = true;
Locked = true;
Cryptomining = true;
Fingerprinting = true;
};
DisablePocket = true;
DisableFirefoxAccounts = true;
DisableAccounts = true;
DisableFirefoxScreenshots = true;
DisableAppUpdate = true;
DisablePrivateBrowsing = true;
DontCheckDefaultBrowser = true;
OverrideFirstRunPage = "";
OverridePostUpdatePage = "";
DisplayBookmarksToolbar = "newtab"; # alternatives: "always" or "newtab"
DisplayMenuBar = "default-off"; # alternatives: "always", "never" or "default-on"
SearchBar = "unified"; # alternative: "separate"
ExtensionSettings = {
"*".installation_mode = "blocked"; # blocks all addons except the ones specified below
"uBlock0@raymondhill.net" = officialAddon "ublock-origin";
"addon@darkreader.org" = officialAddon "darkreader";
"vimium-c@gdh1995.cn" = officialAddon "vimium-c";
"{b86e4813-687a-43e6-ab65-0bde4ab75758}" = officialAddon "localcdn-fork-of-decentraleyes";
"jid1-5Fs7iTLscUaZBgwr@jetpack" = officialAddon "happy-bonobo-disable-webrtc";
"{446900e4-71c2-419f-a6a7-df9c091e268b}" = officialAddon "bitwarden-password-mananger";
};
Preferences = {
"extensions.pocket.enabled" = lock-false;
"extensions.screenshots.disabled" = lock-true;
"browser.topsites.contile.enabled" = lock-false;
"browser.formfill.enable" = lock-false;
"browser.search.suggest.enabled" = lock-false;
"browser.search.suggest.enabled.private" = lock-false;
"browser.urlbar.suggest.searches" = lock-false;
"browser.urlbar.showSearchSuggestionsFirst" = lock-false;
"browser.newtabpage.activity-stream.feeds.section.topstories" = lock-false;
"browser.newtabpage.activity-stream.feeds.snippets" = lock-false;
"browser.newtabpage.activity-stream.section.highlights.includePocket" = lock-false;
"browser.newtabpage.activity-stream.section.highlights.includeBookmarks" = lock-false;
"browser.newtabpage.activity-stream.section.highlights.includeDownloads" = lock-false;
"browser.newtabpage.activity-stream.section.highlights.includeVisited" = lock-false;
"browser.newtabpage.activity-stream.showSponsored" = lock-false;
"browser.newtabpage.activity-stream.system.showSponsored" = lock-false;
"browser.newtabpage.activity-stream.showSponsoredTopSites" = lock-false;
};
};
profiles.default = {
id = 0;
name = "Default";
settings = {
"browser.startup.homepage" = "about:blank";
"browser.shell.didSkipDefaultBrowserCheckOnFirstRun" = true;
"browser.policies.applied" = true;
"widget.use-xdg-desktop-portal.file-picker" = 1;
"widget.use-xdg-desktop-portal.mime-handler" = 1;
};
};
}
# let
# officialAddon = name: {
# install_url = lib.strings.concatStrings [
# "https://addons.mozilla.org/firefox/downloads/latest/"
# name
# "/latest.xpi"
# ];
# installation_mode = "force_installed";
# };
# lock-false = {
# Value = false;
# Status = "locked";
# };
# lock-true = {
# Value = true;
# Status = "locked";
# };
# in
# scope "hm.programs.firefox" {
# enable = true;
# policies = {
# DisableTelemetry = true;
# DisableFirefoxStudies = true;
# EnableTrackingProtection = {
# Value = true;
# Locked = true;
# Cryptomining = true;
# Fingerprinting = true;
# };
# DisablePocket = true;
# DisableFirefoxAccounts = true;
# DisableAccounts = true;
# DisableFirefoxScreenshots = true;
# DisableAppUpdate = true;
# DisablePrivateBrowsing = true;
# DontCheckDefaultBrowser = true;
# OverrideFirstRunPage = "";
# OverridePostUpdatePage = "";
# DisplayBookmarksToolbar = "newtab"; # alternatives: "always" or "newtab"
# DisplayMenuBar = "default-off"; # alternatives: "always", "never" or "default-on"
# SearchBar = "unified"; # alternative: "separate"
# ExtensionSettings = {
# "*".installation_mode = "blocked"; # blocks all addons except the ones specified below
# "uBlock0@raymondhill.net" = officialAddon "ublock-origin";
# "addon@darkreader.org" = officialAddon "darkreader";
# "vimium-c@gdh1995.cn" = officialAddon "vimium-c";
# "{b86e4813-687a-43e6-ab65-0bde4ab75758}" = officialAddon "localcdn-fork-of-decentraleyes";
# "jid1-5Fs7iTLscUaZBgwr@jetpack" = officialAddon "happy-bonobo-disable-webrtc";
# "{446900e4-71c2-419f-a6a7-df9c091e268b}" = officialAddon "bitwarden-password-mananger";
# };
# Preferences = {
# "extensions.pocket.enabled" = lock-false;
# "extensions.screenshots.disabled" = lock-true;
# "browser.topsites.contile.enabled" = lock-false;
# "browser.formfill.enable" = lock-false;
# "browser.search.suggest.enabled" = lock-false;
# "browser.search.suggest.enabled.private" = lock-false;
# "browser.urlbar.suggest.searches" = lock-false;
# "browser.urlbar.showSearchSuggestionsFirst" = lock-false;
# "browser.newtabpage.activity-stream.feeds.section.topstories" = lock-false;
# "browser.newtabpage.activity-stream.feeds.snippets" = lock-false;
# "browser.newtabpage.activity-stream.section.highlights.includePocket" = lock-false;
# "browser.newtabpage.activity-stream.section.highlights.includeBookmarks" = lock-false;
# "browser.newtabpage.activity-stream.section.highlights.includeDownloads" = lock-false;
# "browser.newtabpage.activity-stream.section.highlights.includeVisited" = lock-false;
# "browser.newtabpage.activity-stream.showSponsored" = lock-false;
# "browser.newtabpage.activity-stream.system.showSponsored" = lock-false;
# "browser.newtabpage.activity-stream.showSponsoredTopSites" = lock-false;
# };
# };
# profiles.default = {
# id = 0;
# name = "Default";
# settings = {
# "browser.startup.homepage" = "about:blank";
# "browser.shell.didSkipDefaultBrowserCheckOnFirstRun" = true;
# "browser.policies.applied" = true;
# "widget.use-xdg-desktop-portal.file-picker" = 1;
# "widget.use-xdg-desktop-portal.mime-handler" = 1;
# };
# };
# }

View file

@ -1,18 +1,18 @@
{ config, pkgs, ... }:
{
home.packages = [ pkgs.fluffychat ];
hm.programs.firefox.webapps = {
"Microsoft-Teams" = {
url = "https://teams.microsoft.com";
extraSettings = config.hm.programs.firefox.profiles.default.settings;
name = "Microsoft Teams";
icon = ../assets/ms_teams.png;
};
"Facebook-Messenger" = {
url = "https://www.messenger.com";
extraSettings = config.hm.programs.firefox.profiles.default.settings;
name = "Facebook Messenger";
icon = ../assets/fb_msg.png;
};
};
user.packages = [ pkgs.fluffychat ];
# hm.programs.firefox.webapps = {
# "Microsoft-Teams" = {
# url = "https://teams.microsoft.com";
# extraSettings = config.hm.programs.firefox.profiles.default.settings;
# name = "Microsoft Teams";
# icon = ../assets/ms_teams.png;
# };
# "Facebook-Messenger" = {
# url = "https://www.messenger.com";
# extraSettings = config.hm.programs.firefox.profiles.default.settings;
# name = "Facebook Messenger";
# icon = ../assets/fb_msg.png;
# };
# };
}

108
graphical/desktop/niri-config.kdl Executable file
View file

@ -0,0 +1,108 @@
input {
keyboard {
xkb {
layout ""
model ""
rules ""
variant ""
}
repeat-delay 600
repeat-rate 25
track-layout "global"
}
warp-mouse-to-focus
}
output "DP-1" {
scale 1
transform "90"
}
output "DP-2" {
scale 1
transform "normal"
variable-refresh-rate on-demand=false
}
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
prefer-no-csd
layout {
gaps 32
struts {
left 0
right 0
top 0
bottom 0
}
focus-ring {
width 4
active-color "#FFAB5B"
inactive-color "#272A2A"
}
border { off; }
default-column-width { proportion 0.500000; }
preset-column-widths {
proportion 0.666667
proportion 0.500000
proportion 0.333333
}
center-focused-column "never"
always-center-single-column
}
cursor {
xcursor-theme "Afterglow-Recolored-Dracula-Orange"
xcursor-size 16
hide-when-typing
hide-after-inactive-ms 5000
}
hotkey-overlay { skip-at-startup; }
binds {
Mod+1 { spawn "tagctl" "toggle-tag" "1"; }
Mod+2 { spawn "tagctl" "toggle-tag" "2"; }
Mod+3 { spawn "tagctl" "toggle-tag" "3"; }
Mod+4 { spawn "tagctl" "toggle-tag" "4"; }
Mod+5 { spawn "tagctl" "toggle-tag" "5"; }
Mod+6 { spawn "tagctl" "toggle-tag" "6"; }
Mod+Ctrl+1 { spawn "tagctl" "exclusive-tag" "1"; }
Mod+Ctrl+2 { spawn "tagctl" "exclusive-tag" "2"; }
Mod+Ctrl+3 { spawn "tagctl" "exclusive-tag" "3"; }
Mod+Ctrl+4 { spawn "tagctl" "exclusive-tag" "4"; }
Mod+Ctrl+5 { spawn "tagctl" "exclusive-tag" "5"; }
Mod+Ctrl+6 { spawn "tagctl" "exclusive-tag" "6"; }
Mod+Ctrl+H { consume-or-expel-window-left; }
Mod+Ctrl+J { move-window-down; }
Mod+Ctrl+K { move-window-up; }
Mod+Ctrl+L { consume-or-expel-window-right; }
Mod+D { spawn "qs" "ipc" "call" "launch" "toggle"; }
Mod+E { spawn "nautilus"; }
Mod+Equal { spawn "bitwarden"; }
Mod+F { spawn "chromium"; }
Mod+H { focus-column-or-monitor-left; }
Mod+J { focus-window-down; }
Mod+K { focus-window-up; }
Mod+L { focus-column-or-monitor-right; }
Mod+R { switch-preset-column-width; }
Mod+Return { spawn "foot"; }
Mod+Shift+1 { spawn "tagctl" "toggle" "1"; }
Mod+Shift+2 { spawn "tagctl" "toggle" "2"; }
Mod+Shift+3 { spawn "tagctl" "toggle" "3"; }
Mod+Shift+4 { spawn "tagctl" "toggle" "4"; }
Mod+Shift+5 { spawn "tagctl" "toggle" "5"; }
Mod+Shift+6 { spawn "tagctl" "toggle" "6"; }
Mod+Shift+E { spawn "qs" "ipc" "call" "logout" "toggle"; }
Mod+Shift+H { move-column-left-or-to-monitor-left; }
Mod+Shift+L { move-column-right-or-to-monitor-right; }
Mod+Shift+Q { close-window; }
Mod+Shift+R { maximize-column; }
Mod+Shift+S { screenshot; }
Mod+Space { toggle-window-floating; }
XF86AudioLowerVolume { spawn "volumectl" "-u" "down"; }
XF86AudioMute { spawn "volumectl" "toggle-mute"; }
XF86AudioNext { spawn "playerctl" "next"; }
XF86AudioPlay { spawn "playerctl" "play-pause"; }
XF86AudioPrev { spawn "playerctl" "previous"; }
XF86AudioRaiseVolume { spawn "volumectl" "-u" "up"; }
XF86AudioStop { spawn "playerctl" "stop"; }
}
window-rule {
geometry-corner-radius 0.000000 10.000000 0.000000 10.000000
clip-to-geometry true
}
xwayland-satellite { path "/nix/store/dqljjf1m5h6jscfgvc7q9kkn00mx0myj-xwayland-satellite-unstable-2025-08-07-e0d1dad/bin/xwayland-satellite"; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 KiB

View file

Before

Width:  |  Height:  |  Size: 2.7 MiB

After

Width:  |  Height:  |  Size: 2.7 MiB

Before After
Before After

View file

@ -111,7 +111,7 @@ Singleton {
leftMargin: 10
}
font {
family: "Inria Sans"
family: "MS W98 UI"
pointSize: 12
}
color: "#202e2f"
@ -205,7 +205,7 @@ Singleton {
Text {
font {
family: "Inria Sans"
family: "MS W98 UI"
pointSize: 12
}
color: "#ffab5b"

View file

@ -0,0 +1,184 @@
pragma ComponentBehavior: Bound
import Quickshell
import QtQuick
import QtQuick.Controls
import Quickshell.Io
import Quickshell.Wayland
Singleton {
id: topLevel
required property real width
required property real height
property real openTime: 600
Timer {
id: closeTimer
interval: topLevel.openTime
running: false
repeat: false
onTriggered: logoutData.active = false
}
PersistentProperties {
id: logoutData
property bool open: false
property bool active: false
property real openness: 0
property var buttons: [
{
name: "Lock",
icon: "",
key: "l",
action: ["loginctl", "lock-session"]
},
{
name: "Logout",
icon: "",
key: "e",
action: ["loginctl", "terminate-user", "1000"]
},
{
name: "Suspend",
icon: "",
key: "s",
action: ["systemctl", "suspend"]
},
{
name: "Shutdown",
icon: "",
key: "d",
action: ["systemctl", "poweroff"]
},
{
name: "Reboot",
icon: "",
key: "r",
action: ["systemctl", "reboot"]
}
]
onOpenChanged: {
if (open) {
openness = 1.0;
logoutData.active = true;
} else {
openness = 0.0;
closeTimer.start();
}
}
Behavior on openness {
NumberAnimation {
duration: topLevel.openTime
easing.type: Easing.InOutQuad
}
}
}
IpcHandler {
target: "logout"
function open(): void {
logoutData.open = true;
}
function close(): void {
logoutData.open = false;
}
function toggle(): void {
logoutData.open = !logoutData.open;
}
}
LazyLoader {
id: loader
activeAsync: logoutData.active
PanelWindow {
id: logoutBase
anchors {
top: true
bottom: true
right: true
left: true
}
color: "transparent"
implicitWidth: topLevel.width
implicitHeight: topLevel.height
WlrLayershell {
layer: WlrLayer.Overlay
namespace: "shell:logout"
keyboardFocus: WlrKeyboardFocus.Exclusive
color: "transparent"
}
focusable: true
exclusionMode: ExclusionMode.Ignore
Rectangle {
id: gridParent
radius: 24
implicitWidth: parent.width
color: "#1b2021"
border.color: "#ffab5b"
border.width: 2
property var margins: {
"h": parent.width / 24,
"v": parent.height / 12
}
property var dims: {
"h": (parent.width - margins.h) / 6,
"v": (parent.height - margins.v) / 4
}
anchors {
fill: parent
leftMargin: 128 - topLevel.width * (1.0 - logoutData.openness)
rightMargin: 128 + topLevel.width * (1.0 - logoutData.openness)
margins: 128
}
Grid {
columns: 3
columnSpacing: gridParent.dims.h
rowSpacing: gridParent.dims.v * logoutData.openness
anchors {
fill: parent
leftMargin: gridParent.margins.h
rightMargin: gridParent.margins.h
topMargin: gridParent.margins.v
bottomMargin: gridParent.margins.v
}
Repeater {
model: logoutData.buttons.length
Button {
id: button
required property int index
Process {
id: thisProcess
running: false
command: logoutData.buttons[button.index].action
}
implicitWidth: gridParent.dims.h
implicitHeight: gridParent.dims.v
font {
family: "Inria Sans"
pointSize: 12
}
background: Rectangle {
color: button.hovered ? "#ffb852" : "#272a2a"
border.color: "#ffab5b"
border.width: 2
radius: 6
}
text: logoutData.buttons[index].name
onClicked: {
logoutData.open = false;
thisProcess.running = true;
}
}
}
}
}
}
}
}

View file

@ -1,6 +1,7 @@
// components
import "bink" as Bink
import "launcher" as Launcher
import "logout" as Logout
// singletons
import "title"
import "tags"
@ -30,7 +31,7 @@ ShellRoot {
asynchronous: true
width: 2560
height: 1440
source: "assets/wallpaper.jpg"
source: "assets/pathway-m.png"
}
}
}
@ -90,7 +91,7 @@ ShellRoot {
TextMetrics {
id: textInfo
font {
family: "Inria Sans"
family: "MS W98 UI"
pointSize: 12
}
elideWidth: 550
@ -126,7 +127,7 @@ ShellRoot {
color: "transparent"
Text {
font {
family: "Inria Sans"
family: "MS W98 UI"
pointSize: 12
}
color: Colours.c.yellow_b
@ -233,4 +234,9 @@ ShellRoot {
Launcher.Launcher {
width: 190
}
Logout.Logout {
width: 2560
height: 1440
}
}

View file

@ -1,27 +1,41 @@
{
pkgs,
localPkgs,
scope,
...
}:
{
scope "user" {
home.packages = [
pkgs.direnv
packages = [
localPkgs.rbw-helper
];
hm.programs.direnv = {
programs.direnv = {
enable = true;
nix-direnv = {
enable = true;
};
enableFishIntegration = true;
integrations.fish.enable = true;
};
hm.programs.git = {
programs.git = {
enable = true;
userName = "atagen";
userEmail = "boss@atagen.co";
settings = {
user = {
name = "atagen";
email = "boss@atagen.co";
};
merge = {
conflictstyle = "diff3";
};
init = {
defaultBranch = "main";
};
url = {
"https://github.com/".insteadOf = "github:";
"https://git.atagen.co/".insteadOf = "atagen:";
};
credential.helper = "rbw";
};
integrations = {
difftastic.enable = true;
};
};
}

View file

@ -4,7 +4,7 @@
getPkgs,
...
}:
scope "home.packages"
scope "user.packages"
<| getPkgs {
inherit (pkgs)
libreoffice

View file

@ -4,4 +4,4 @@
scope,
...
}:
scope "home.packages" [ inputs.zedless.packages.${pkgs.system}.default ]
scope "user.packages" [ inputs.zedless.packages.${pkgs.system}.default ]

View file

@ -4,7 +4,7 @@
getPkgs,
...
}:
scope "home.packages"
scope "user.packages"
<| getPkgs {
inherit (pkgs)
file-roller

View file

@ -1,32 +1,23 @@
{
pkgs,
lib,
...
}:
{
xdg.autostart.enable = true;
xdg.portal.enable = true;
hm.xdg = {
xdg.autostart.enable = lib.mkForce false;
xdg.portal = {
enable = true;
portal =
let
gtk = pkgs.xdg-desktop-portal-gtk;
gnome = pkgs.xdg-desktop-portal-gnome;
in
{
enable = true;
config = {
common = {
default = [
"gnome"
];
};
};
extraPortals = [
gnome
gtk
config = {
common = {
default = [
"gnome"
];
};
};
extraPortals = [
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-gnome
];
};
environment.pathsToLink = [

View file

@ -1,47 +0,0 @@
{
pkgs,
config,
scope,
...
}:
let
inherit (config) rice;
pal = rice.palette.hex;
pkg = pkgs.wlogout;
in
scope "hm" {
programs.wlogout = {
enable = true;
package = pkg;
layout = builtins.fromJSON (builtins.readFile ./logout/layout);
style =
with pal;
(builtins.replaceStrings
[
"/usr/share/wlogout"
"/etc/wlogout"
"#WINBG"
"#BTNCOL"
"#BTNBG"
"#BTNFOCUSBG"
"#WINLOGO"
]
[
"${pkg}/share/wlogout"
"${pkg}/etc/wlogout"
util.bg
bright.yellow
util.bg
normal.black
(builtins.path {
name = "winlogo";
path = ../assets/winlogo.png;
sha256 = "7c1ff96b553c7a7ca3a7b7cf8efe830ab7feea92355aed288a10ee7347c24108";
})
]
(builtins.readFile ./logout/style.css)
);
};
home.packages = [ pkg ];
}

View file

@ -4,7 +4,7 @@
getPkgs,
...
}:
scope "home.packages"
scope "user.packages"
<| getPkgs {
inherit (pkgs)
mpv

View file

@ -1,14 +1,16 @@
{ pkgs, ... }:
{ pkgs, lib, ... }:
{
hm.programs.rbw = {
enable = true;
settings = {
user.xdg.config.files."rbw/config.json" = {
generator = lib.generators.toJSON { };
value = {
email = "boss@atagen.co";
pinentry = pkgs.pinentry-gnome3;
pinentry = lib.getExe pkgs.pinentry-qt;
base_url = "https://v.atagen.co";
};
};
hm.programs.git.extraConfig.credential.helper = "rbw";
home.packages = [ pkgs.bitwarden ];
user.packages = [
pkgs.rbw
pkgs.bitwarden
];
}

View file

@ -1,32 +1,31 @@
{ pkgs, config, ... }:
let
inherit (config) rice;
in
{
# for quickshell
qt.enable = true;
home.packages = [
user.packages = [
pkgs.gtk-engine-murrine
];
hm.fonts.fontconfig.enable = true;
hm.qt = {
qt = {
enable = true;
style.name = "adwaita-dark";
platformTheme.name = "adwaita";
style = "adwaita-dark";
platformTheme = "gnome";
};
hm.gtk = {
enable = true;
theme = {
inherit (rice.gtk-theme) package name;
user.misc.gtk =
let
inherit (config) rice;
in
{
enable = true;
packages = [
rice.gtk-theme.package
rice.fonts.sans.package
rice.icons.package
];
settings = {
application-prefer-dark-theme = true;
font-name = "${rice.fonts.sans.name} ${builtins.toString rice.fonts.sans.size}";
theme-name = rice.gtk-theme.name;
icon-theme-name = rice.icons.name;
};
};
iconTheme = {
inherit (rice.icons) package name;
};
font = {
inherit (rice.fonts.sans) size package name;
};
};
}

View file

@ -4,56 +4,55 @@
...
}:
{
config.hm.options = {
quickServices =
with lib;
mkOption {
type = with types; attrsOf str;
default = { };
};
quickOneShots =
with lib;
mkOption {
type = with types; attrsOf str;
default = { };
};
# for specifying an additional systemd target
extraTarget =
with lib;
mkOption {
type = with types; listOf str;
default = [ ];
};
options = {
quick = {
services =
with lib;
mkOption {
type = with types; attrsOf str;
default = { };
};
oneShots =
with lib;
mkOption {
type = with types; attrsOf str;
default = { };
};
};
};
config.hm.config = {
config = {
systemd.user.services =
builtins.mapAttrs (name: cmd: {
Unit = {
unitConfig = {
Description = "${name}";
Requires = [ "graphical-session.target" ] ++ config.hm.extraTarget;
After = [ "graphical-session.target" ] ++ config.hm.extraTarget;
Requires = [
"graphical-session.target"
];
After = [
"graphical-session.target"
"niri.target"
];
};
Service = {
serviceConfig = {
ExecStart = cmd;
};
Install = {
WantedBy = [ "graphical-session.target" ] ++ config.hm.extraTarget;
};
}) config.hm.quickServices
wantedBy = [ "graphical-session.target" ];
}) config.quick.services
// builtins.mapAttrs (name: cmd: {
Unit = {
unitConfig = {
Description = "${name}";
After = [ "graphical-session.target" ] ++ config.extraTarget;
Requires = [ "graphical-session.target" ];
After = [
"graphical-session.target"
"niri.target"
];
};
Service = {
serviceConfig = {
ExecStart = cmd;
Type = "oneshot";
};
Install = {
WantedBy = [ "graphical-session.target" ] ++ config.extraTarget;
};
}) config.hm.quickOneShots;
wantedBy = [ "graphical-session.target" ];
}) config.quick.oneShots;
};
}

View file

@ -7,7 +7,7 @@
}:
{
home.packages =
user.packages =
let
inherit (config.rice) icons cursor;
in

View file

@ -3,13 +3,11 @@
lib,
inputs,
mainUser,
config,
getPkgs,
...
}:
let
inherit (lib) getExe getExe';
inherit (config) rice;
in
{
# quickshell stuff
@ -25,24 +23,27 @@ in
})
];
hm.systemd.user.services.quickshell = {
Unit.PartOf = [ "graphical-session.target" ];
Unit.After = [
"graphical-session.target"
"niri.service"
];
Install.WantedBy = [ "graphical-session.target" ];
Service = {
ExecStart = "${getExe' (inputs.quickshell.packages.${pkgs.system}.default.override {
withHyprland = false;
withI3 = false;
}) "qs"}";
systemd.user.services.quickshell = {
path = [ inputs.niri.packages.${pkgs.system}.niri-unstable ];
unitConfig = {
Description = "Quickshell";
Requires = [
"graphical-session.target"
];
After = [
"graphical-session.target"
"niri.target"
];
};
serviceConfig.ExecStart = "${getExe' (inputs.quickshell.packages.${pkgs.system}.default.override {
withHyprland = false;
withI3 = false;
}) "qs"}";
};
hm.quickServices = {
"swaync" = "${getExe pkgs.swaynotificationcenter}";
"swayidle" =
quick.services = {
swaync = "${getExe pkgs.swaynotificationcenter}";
swayidle =
let
niri = inputs.niri.packages.${pkgs.system}.niri-unstable;
systemctl = getExe' pkgs.systemd "systemctl";
@ -54,23 +55,9 @@ in
'';
};
hm.systemd.user.targets.tray = {
Unit = {
Description = "Home Manager System Tray";
Requires = [ "graphical-session.target" ];
};
};
imports = [ inputs.arbys.nixosModules.arbys ];
environment = {
arbys = {
enable = true;
clobber = true;
};
files."/home/${mainUser}/.config/quickshell" = {
source = "/home/${mainUser}/.nix/graphical/shell/quickshell";
uid = 1000;
gid = 100;
};
environment.files."/home/${mainUser}/.config/quickshell" = {
source = "/home/${mainUser}/.nix/graphical/desktop/quickshell";
uid = 1000;
gid = 100;
};
}

View file

@ -1,17 +1,21 @@
{ lib, pkgs, ... }:
{
services.udisks2.enable = true;
hm.services.udiskie.enable = true;
# fix reliance on nonexistent graphical-session-pre.target
hm.systemd.user.services.udiskie = lib.mkForce {
Unit = {
systemd.user.services.udiskie = {
unitConfig = {
Description = "udiskie mount daemon";
After = [ ];
PartOf = [ "graphical-session.target" ];
After = [
"graphical-session.target"
"niri.target"
];
PartOf = [
"sysinit-reactivation.target"
"graphical-session.target"
];
};
serviceConfig.ExecStart = [ (lib.getExe' pkgs.udiskie "udiskie") ];
Service.ExecStart = [ "${pkgs.udiskie}/bin/udiskie --appindicator" ];
Install.WantedBy = [ "graphical-session.target" ];
wantedBy = [ "graphical-session.target" ];
};
}

View file

@ -1,14 +0,0 @@
{ config, ... }:
{
imports = [
./webapps/firefox-webapp.nix
];
hm.programs.firefox.webapps = {
"Open-WebUI" = {
url = "http://127.0.0.1:8088";
extraSettings = config.hm.programs.firefox.profiles.default.settings;
name = "Open-WebUI";
icon = ../assets/openwebui.png;
};
};
}

View file

@ -1,260 +0,0 @@
{
config,
lib,
...
}:
let
inherit (builtins) getAttr stringLength substring;
inherit (lib)
mkOption
getExe
listToAttrs
attrsToList
imap
;
inherit (lib.attrsets)
mapAttrs
mapAttrs'
nameValuePair
;
inherit (lib.strings) concatStringsSep toUpper;
enumerate =
a:
listToAttrs (
imap (
id:
{
name,
value,
}:
{
inherit name;
value = value // {
inherit id;
};
}
) (attrsToList a)
);
make-app-profiles =
cfg:
mapAttrs' (
name: cfg:
nameValuePair "home-manager-webapp-${name}" {
inherit (cfg) id;
userChrome = ''
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
browser {
margin-right: 0px; margin-bottom: 0px;
}
#TabsToolbar {
visibility: collapse !important;
}
#nav-bar {
margin-top: 0;
margin-bottom: -42px;
z-index: -100;
}
#main-window[windowtype="navigator:browser"] {
background-color: transparent !important;
}
.tab-background[selected="true"] {
background: ${cfg.backgroundColor} !important;
}
'';
settings = cfg.extraSettings // {
"browser.startup.homepage" = builtins.toString cfg.url;
"browser.sessionstore.resume_session_once" = false;
"browser.sessionstore.resume_from_crash" = false;
"browser.cache.disk.enable" = false;
"browser.cache.disk.capacity" = 0;
"browser.cache.disk.filesystem_reported" = 1;
"browser.cache.disk.smart_size.enabled" = false;
"browser.cache.disk.smart_size.first_run" = false;
"browser.cache.disk.smart_size.use_old_max" = false;
"browser.ctrlTab.previews" = true;
"browser.tabs.warnOnClose" = false;
"plugin.state.flash" = 2;
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"browser.tabs.drawInTitlebar" = false;
"browser.tabs.inTitlebar" = 0;
"browser.contentblocking.category" = "strict";
"network.cookie.lifetimePolicy" = 0;
"layout.css.prefers-color-scheme.content-override" = getAttr cfg.theme {
dark = 0;
light = 1;
system = 2;
};
};
}
) cfg;
in
{
config.hm.options.programs.firefox.webapps = mkOption {
default = { };
type =
with lib.types;
attrsOf (submodule {
options = {
####################
# Firefox settings #
####################
url = mkOption {
type = str;
description = "The URL of the webapp to launch.";
};
# id = mkOption {
# type = int;
# description = "The Firefox profile ID to set.";
# };
hidden = mkOption {
type = bool;
description = "Hide this webapp from the list of applications (but still generate a .desktop file).";
default = false;
};
extraArgs = mkOption {
type = listOf str;
default = [ ];
description = "Extra args to launch Firefox with.";
};
extraSettings = mkOption {
type = attrsOf (either bool (either int str));
default = { };
description = "Additional Firefox profile settings.";
};
backgroundColor = mkOption {
type = str;
default = "rgba(0, 0, 0, 0)";
description = "The background color to use for loading pages.";
};
theme = mkOption {
type = enum [
"dark"
"light"
"system"
];
default = "system";
description = "The application CSS theme to use, if supported.";
};
#########################
# Desktop file settings #
#########################
# Copied from xdg.desktopEntries, with slight modification for default settings
name = mkOption {
type = nullOr str;
default = null;
description = "Specific name of the application. Defaults to the capitalized attribute name.";
};
mimeType = mkOption {
description = "The MIME type(s) supported by this application.";
type = nullOr (listOf str);
default = [
"text/html"
"text/xml"
"application/xhtml_xml"
];
};
# Copied verbatim from xdg.desktopEntries.
genericName = mkOption {
type = nullOr str;
default = null;
description = "Generic name of the application.";
};
comment = mkOption {
type = nullOr str;
default = null;
description = "Tooltip for the entry.";
};
categories = mkOption {
type = nullOr (listOf str);
default = null;
description = "Categories in which the entry should be shown in a menu.";
};
icon = mkOption {
type = nullOr (either str path);
default = null;
description = "Icon to display in file manager, menus, etc.";
};
prefersNonDefaultGPU = mkOption {
type = nullOr bool;
default = null;
description = ''
If true, the application prefers to be run on a more
powerful discrete GPU if available.
'';
};
};
});
description = "Websites to create special site-specific Firefox instances for.";
};
config.hm.config = {
programs.firefox.profiles = make-app-profiles (enumerate config.hm.programs.firefox.webapps);
xdg.desktopEntries = mapAttrs (name: cfg: {
inherit (cfg)
genericName
comment
categories
icon
mimeType
prefersNonDefaultGPU
;
name =
if cfg.name == null then
(toUpper (substring 0 1 name)) + (substring 1 (stringLength name) name)
else
cfg.name;
startupNotify = true;
terminal = false;
type = "Application";
exec = concatStringsSep " " (
[
"${getExe config.hm.programs.firefox.package}"
"--name"
"${name}"
"--app-id"
"${name}"
"--class"
"${name}"
"-P"
"${config.hm.programs.firefox.profiles."home-manager-webapp-${name}".path}"
"--no-remote"
]
++ cfg.extraArgs
++ [ "${cfg.url}" ]
);
settings = {
X-MultipleArgs = "false"; # Consider enabling, don't know what this does
StartupWMClass = "${name}";
NoDisplay = lib.boolToString cfg.hidden;
};
}) config.hm.programs.firefox.webapps;
};
}

View file

@ -1,252 +0,0 @@
{
config,
pkgs,
lib,
...
}:
let
inherit (lib)
mkOption
mkForce
getExe
getExe'
listToAttrs
flatten
mapAttrsToList
mapAttrs
mapAttrs'
nameValuePair
toLower
replaceStrings
concatMapStringsSep
;
partOf = cfg: "${replaceStrings [ " " ] [ "-" ] (toLower cfg.name)}.target";
# make a firefox webapp + hidden .desktop entry for the client app
make-firefox =
cfg:
mapAttrs' (
name: cfg:
nameValuePair "${name}-client" {
inherit (cfg) name;
url = "http://127.0.0.1:${builtins.toString cfg.port}";
extraSettings = config.hm.programs.firefox.profiles.default.settings;
hidden = true;
}
) cfg;
# make a systemd service for running the frontend
make-systemd-service =
cfg:
mapAttrs' (
name: cfg:
if (cfg.service != null) then
nameValuePair "${cfg.name}-frontend" {
Unit = {
Description = "${cfg.name} Frontend";
WantedBy = mkForce [ ];
};
Service = cfg.service;
}
else
nameValuePair "" { }
) cfg;
# modify systemd units to be PartOf this target
modify-systemd-services =
cfg:
listToAttrs (
flatten (
mapAttrsToList (
name: cfg:
(map (req: {
name = "${req}";
value = {
Unit = {
PartOf = partOf cfg;
};
};
}) cfg.requires.services)
) cfg
)
);
modify-quadlets =
cfg:
listToAttrs (
flatten (
mapAttrsToList (
name: cfg:
(map (req: {
name = "${req}";
value = {
extraConfig.Unit.PartOf = partOf cfg;
};
}) cfg.requires.containers)
) cfg
)
);
# make a systemd target to collate dependencies
make-systemd-target =
cfg:
mapAttrs (name: cfg: {
Unit = {
Description = "${cfg.name} Target";
WantedBy = mkForce [ ];
Requires =
(map (req: req + ".service") cfg.requires.services)
++ (map (req: "podman-" + req + ".service") cfg.requires.containers);
};
}) cfg;
# make desktop shortcuts and a script which will handle starting everything
make-xdg =
cfg:
mapAttrs (name: cfg: {
inherit (cfg) name icon genericName;
type = "Application";
exec = "${
let
notify-send = "${getExe' pkgs.libnotify "notify-send"} -a \"${cfg.name}\"";
systemctl = "${getExe' pkgs.systemd "systemctl"}";
dex = "${getExe pkgs.dex}";
podman = "${getExe pkgs.podman}";
makeContainerCheck =
container: ''[ "$(${podman} inspect -f {{.State.Health.Status}} ${container})" == "healthy" ]'';
# makeContainerCheck = container: ''
# [ ${podman} inspect -f {{.State.Status}} ${container})" != "running" ]
# '';
containerChecks =
if (cfg.requires.containers != [ ]) then
''
container_checks() {
if ''
+ (concatMapStringsSep " && " makeContainerCheck cfg.requires.containers)
+ ''
; then
return 0
else
return 1
fi
}
''
else
''
container_checks() {
return 0
}
'';
in
pkgs.writeShellScript "${name}" ''
set -euo pipefail
exit_error() {
${notify-send} -w "Failure" $1
exit 1
}
${containerChecks}
${notify-send} "Launching ${name} backend.." "Please be patient."
${systemctl} --user start ${name}.target || exit_error "Failed to launch!"
checks=0
until container_checks; do
sleep 2
checks=$((checks+1))
if [ $((checks%10)) -eq 0 ]; then
${notify-send} "Waiting for backend."
fi
if [ $checks -ge 60 ]; then
${systemctl} --no-block --user stop ${name}.target
exit_error "Failed to launch!"
fi
done
${notify-send} "Launching ${name}.."
${dex} -w ~/.nix-profile/share/applications/${name}-client.desktop
${notify-send} "Goodbye" "Shutting down."
${systemctl} --user stop ${name}.target
exit 0
''
}";
}) cfg;
cfg = config.hm.localWebApps;
in
{
config.hm.options.localWebApps = mkOption {
default = { };
type =
with lib.types;
attrsOf (submodule {
options = {
name = mkOption {
type = str;
description = "Display name of the webapp.";
};
genericName = mkOption {
type = nullOr str;
description = "Generic name of the webapp.";
default = null;
};
icon = mkOption {
type = nullOr (either str path);
description = "Path to a file to use for application icon.";
default = null;
};
requires = mkOption {
type = nullOr (submodule {
options = {
containers = mkOption {
type = listOf str;
default = [ ];
};
services = mkOption {
type = listOf str;
default = [ ];
};
};
});
default = null;
description = "Containers or services this app requires.";
};
service = mkOption {
type = nullOr (submodule {
options = {
execStartPre = mkOption {
type = nullOr str;
default = null;
};
execStart = mkOption {
type = nullOr str;
default = null;
};
execStop = mkOption {
type = nullOr str;
default = null;
};
};
});
default = null;
description = "Submodule containing exec[StartPre/Start/Stop] commands for any required systemd service";
};
port = mkOption {
type = int;
description = "Local port the webapp should host on.";
};
};
});
};
config.hm.config = {
programs.firefox.webapps = make-firefox cfg;
systemd.user.targets = make-systemd-target cfg;
systemd.user.services = (make-systemd-service cfg) // (modify-systemd-services cfg);
services.podman.containers = modify-quadlets cfg;
xdg.desktopEntries = make-xdg cfg;
};
}

View file

@ -1,74 +1,25 @@
{
pkgs,
lib,
# lib,
mainUser,
inputs,
config,
# config,
...
}:
let
inherit (config) rice;
in
# let
# inherit (config) rice;
# in
{
imports = [
inputs.niri.nixosModules.niri
inputs.niri-tag.nixosModules.niri-tag
];
hm.programs.niri.settings = {
input = {
warp-mouse-to-focus.enable = true;
};
cursor = {
hide-after-inactive-ms = 5000;
hide-when-typing = true;
size = 16;
theme = rice.cursor.name;
};
layout = {
always-center-single-column = true;
gaps = config.rice.borders.gaps;
default-column-width.proportion = 0.5;
preset-column-widths = map (p: { proportion = p; }) [
(2.0 / 3.0)
0.5
(1.0 / 3.0)
];
focus-ring =
let
pal = rice.palette.hex;
in
{
active = {
color = pal.bright.yellow;
};
inactive = {
color = pal.normal.black;
};
};
};
prefer-no-csd = true;
hotkey-overlay.skip-at-startup = true;
window-rules =
let
v = 10.0;
in
[
{
geometry-corner-radius = {
bottom-left = v;
bottom-right = 0.0;
top-left = 0.0;
top-right = v;
};
clip-to-geometry = true;
}
];
xwayland-satellite = {
enable = true;
path = lib.getExe inputs.niri.packages.${pkgs.system}.xwayland-satellite-unstable;
};
};
# user.desktops.niri = {
# enable = true;
# configFile = ./desktop/niri-config.kdl;
# };
user.xdg.config.files."niri/config.kdl".source = ./desktop/niri-config.kdl;
user.packages = [ inputs.niri.packages.${pkgs.system}.niri-unstable ];
services.greetd = {
enable = true;
restart = false;
@ -91,3 +42,62 @@ in
services.niri-tag.enable = true;
}
# old hm config, TODO template from this
# {
# values = {
# input = {
# warp-mouse-to-focus.enable = true;
# };
# cursor = {
# hide-after-inactive-ms = 5000;
# hide-when-typing = true;
# size = 16;
# theme = rice.cursor.name;
# };
# layout = {
# always-center-single-column = true;
# gaps = config.rice.borders.gaps;
# default-column-width.proportion = 0.5;
# preset-column-widths = map (p: { proportion = p; }) [
# (2.0 / 3.0)
# 0.5
# (1.0 / 3.0)
# ];
# focus-ring =
# let
# pal = rice.palette.hex;
# in
# {
# active = {
# color = pal.bright.yellow;
# };
# inactive = {
# color = pal.normal.black;
# };
# };
# };
# prefer-no-csd = true;
# hotkey-overlay.skip-at-startup = true;
# window-rules =
# let
# v = 10.0;
# in
# [
# {
# geometry-corner-radius = {
# bottom-left = v;
# bottom-right = 0.0;
# top-left = 0.0;
# top-right = v;
# };
# clip-to-geometry = true;
# }
# ];
# xwayland-satellite = {
# enable = true;
# path = lib.getExe inputs.niri.packages.${pkgs.system}.xwayland-satellite-unstable;
# };
# };
# }
#