Compare commits

..

5 commits

26 changed files with 834 additions and 344 deletions

View file

@ -155,11 +155,11 @@
},
"locked": {
"dir": "pkgs/firefox-addons",
"lastModified": 1732680201,
"narHash": "sha256-3PA+AlonG9xzJrT1NvnD0Id2dBvIVNrSijVwlIinzNo=",
"lastModified": 1732467630,
"narHash": "sha256-tm4ZWvjaL1xZmfdi6f1KuEf82XuFspFrX9p6pj+qbSE=",
"owner": "rycee",
"repo": "nur-expressions",
"rev": "77e347b8897e917e99bf2929a7178d8caa6fd473",
"rev": "1f325824ab3a25d9099bc610b9e3825867fe4c1a",
"type": "gitlab"
},
"original": {
@ -427,11 +427,11 @@
]
},
"locked": {
"lastModified": 1732482255,
"narHash": "sha256-GUffLwzawz5WRVfWaWCg78n/HrBJrOG7QadFY6rtV8A=",
"lastModified": 1732472774,
"narHash": "sha256-nfD12L8mm1Zcg0keslWrQgaqj+ZSjQnK6Hf6ryIZA0c=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "a9953635d7f34e7358d5189751110f87e3ac17da",
"rev": "83002f18468c4471d5f8de8c542ed2422badbf8f",
"type": "github"
},
"original": {
@ -581,11 +581,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
"lastModified": 1732659819,
"narHash": "sha256-Z1KdUhm4IQAVEodkl19XvPdZyWbU36bBKnregIffxsw=",
"lastModified": 1732366896,
"narHash": "sha256-dQrHznGma8aWeBESRUCc1onWYoGrM35GDl/uwEB7eG8=",
"owner": "sodiboo",
"repo": "niri-flake",
"rev": "b1ccd1e910af3f72ba02d64f61121b42b4c3184e",
"rev": "3131d857c946c75557f5b6fb99a113b6949ea04d",
"type": "github"
},
"original": {
@ -614,11 +614,11 @@
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1732647766,
"narHash": "sha256-ZUcQN/2bqL4BK+ifHX9Om4HJOZQAMefK7iziO/ZeEDo=",
"lastModified": 1732363756,
"narHash": "sha256-/E2aRhcvlH2PkkpC2n79UCMZyIkQKWfG4m//UHkeNgU=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "4c480a1ea3280733bc428d9cb38150bfc1a7c36c",
"rev": "9c7e8d04d27d2f914ad3e9a54c64b64c34aea4d4",
"type": "github"
},
"original": {
@ -634,11 +634,11 @@
]
},
"locked": {
"lastModified": 1732519917,
"narHash": "sha256-AGXhwHdJV0q/WNgqwrR2zriubLr785b02FphaBtyt1Q=",
"lastModified": 1732461762,
"narHash": "sha256-3SMxtkXlmzPmF4NXCt6lLF2IkdyAmO824PlScUKVhB0=",
"owner": "nix-community",
"repo": "nix-index-database",
"rev": "f4a5ca5771ba9ca31ad24a62c8d511a405303436",
"rev": "bedc30c64442579943c1c6e7579db263d810884f",
"type": "github"
},
"original": {
@ -649,11 +649,11 @@
},
"nixos-hardware": {
"locked": {
"lastModified": 1732483221,
"narHash": "sha256-kF6rDeCshoCgmQz+7uiuPdREVFuzhIorGOoPXMalL2U=",
"lastModified": 1731797098,
"narHash": "sha256-UhWmEZhwJZmVZ1jfHZFzCg+ZLO9Tb/v3Y6LC0UNyeTo=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "45348ad6fb8ac0e8415f6e5e96efe47dd7f39405",
"rev": "672ac2ac86f7dff2f6f3406405bddecf960e0db6",
"type": "github"
},
"original": {
@ -800,11 +800,11 @@
},
"nixpkgs_6": {
"locked": {
"lastModified": 1732521221,
"narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=",
"lastModified": 1732014248,
"narHash": "sha256-y/MEyuJ5oBWrWAic/14LaIr/u5E0wRVzyYsouYY3W6w=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d",
"rev": "23e89b7da85c3640bbc2173fe04f4bd114342367",
"type": "github"
},
"original": {
@ -816,11 +816,11 @@
},
"nixpkgs_7": {
"locked": {
"lastModified": 1732521221,
"narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=",
"lastModified": 1732014248,
"narHash": "sha256-y/MEyuJ5oBWrWAic/14LaIr/u5E0wRVzyYsouYY3W6w=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d",
"rev": "23e89b7da85c3640bbc2173fe04f4bd114342367",
"type": "github"
},
"original": {
@ -1014,11 +1014,11 @@
]
},
"locked": {
"lastModified": 1732639391,
"narHash": "sha256-kFtXjoCIqx9xe0ZryPXpqS6l/HVg71aNcuL8Y5e8+pI=",
"lastModified": 1732465698,
"narHash": "sha256-xiue+Kj2Jm8PwyZQcHl4CaYmMIgo5oi37hVHqiw2Unk=",
"owner": "nix-community",
"repo": "plasma-manager",
"rev": "06e3209d11797d9c741e25df06ab61048746bf93",
"rev": "16d65cd02b5de665d1bcfec1616c02c71a1014a6",
"type": "github"
},
"original": {
@ -2948,11 +2948,11 @@
"nixpkgs": "nixpkgs_9"
},
"locked": {
"lastModified": 1732643199,
"narHash": "sha256-uI7TXEb231o8dkwB5AUCecx3AQtosRmL6hKgnckvjps=",
"lastModified": 1732292307,
"narHash": "sha256-5WSng844vXt8uytT5djmqBCkopyle6ciFgteuA9bJpw=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "84637a7ab04179bdc42aa8fd0af1909fba76ad0c",
"rev": "705df92694af7093dfbb27109ce16d828a79155f",
"type": "github"
},
"original": {

156
home/programs/ags/config.js Normal file
View file

@ -0,0 +1,156 @@
const mpris = await Service.import("mpris");
const audio = await Service.import("audio");
const battery = await Service.import("battery");
const systemtray = await Service.import("systemtray");
import { NotificationPopups } from "./notificationPopups.js";
const date = Variable("", {
poll: [1000, 'date "+%H:%M %b %e."'],
});
// widgets can be only assigned as a child in one container
// so to make a reuseable widget, make it a function
// then you can simply instantiate one by calling it
function Clock() {
return Widget.Label({
class_name: "clock",
label: date.bind(),
});
}
function Media() {
const label = Utils.watch("", mpris, "player-changed", () => {
if (mpris.players[0]) {
const { track_artists, track_title } = mpris.players[0];
return `${track_artists.join(", ")} - ${track_title}`;
} else {
return "Nothing is playing";
}
});
return Widget.Button({
class_name: "media",
on_primary_click: () => mpris.getPlayer("")?.playPause(),
on_scroll_up: () => mpris.getPlayer("")?.next(),
on_scroll_down: () => mpris.getPlayer("")?.previous(),
child: Widget.Label({ label }),
});
}
function Volume() {
const icons = {
101: "overamplified",
67: "high",
34: "medium",
1: "low",
0: "muted",
};
function getIcon() {
const icon = audio.speaker.is_muted
? 0
: [101, 67, 34, 1, 0].find(
(threshold) => threshold <= audio.speaker.volume * 100,
);
return `audio-volume-${icons[icon]}-symbolic`;
}
const icon = Widget.Icon({
icon: Utils.watch(getIcon(), audio.speaker, getIcon),
});
const slider = Widget.Slider({
hexpand: true,
draw_value: false,
on_change: ({ value }) => (audio.speaker.volume = value),
setup: (self) =>
self.hook(audio.speaker, () => {
self.value = audio.speaker.volume || 0;
}),
});
return Widget.Box({
class_name: "volume",
css: "min-width: 180px",
children: [icon, slider],
});
}
function BatteryLabel() {
const value = battery.bind("percent").as((p) => (p > 0 ? p / 100 : 0));
const icon = battery
.bind("percent")
.as((p) => `battery-level-${Math.floor(p / 10) * 10}-symbolic`);
return Widget.Box({
class_name: "battery",
visible: battery.bind("available"),
children: [
Widget.Icon({ icon }),
Widget.LevelBar({
widthRequest: 140,
vpack: "center",
value,
}),
],
});
}
function SysTray() {
const items = systemtray.bind("items").as((items) =>
items.map((item) =>
Widget.Button({
child: Widget.Icon({ icon: item.bind("icon") }),
on_primary_click: (_, event) => item.activate(event),
on_secondary_click: (_, event) => item.openMenu(event),
tooltip_markup: item.bind("tooltip_markup"),
}),
),
);
return Widget.Box({
children: items,
});
}
// layout of the bar
function Left() {
return Widget.Box({});
}
function Center() {
return Widget.Box({
spacing: 8,
children: [Media()],
});
}
function Right() {
return Widget.Box({
hpack: "end",
spacing: 8,
children: [Volume(), BatteryLabel(), Clock(), SysTray()],
});
}
function Bar() {
return Widget.Window({
name: "bar", // name has to be unique
class_name: "bar",
anchor: ["top", "left", "right"],
exclusivity: "exclusive",
child: Widget.CenterBox({
start_widget: Left(),
center_widget: Center(),
end_widget: Right(),
}),
});
}
App.config({
style: "./style.css",
windows: [Bar(), NotificationPopups()],
});
export {};

View file

@ -0,0 +1,42 @@
{
inputs,
pkgs,
config,
...
}: let
cfg = config.programs.ags;
in {
imports = [inputs.ags.homeManagerModules.default];
home.packages = with pkgs; [
libdbusmenu-gtk3
dart-sass
];
programs.ags = {
enable = true;
# null or path, leave as null if you don't want hm to manage the config
configDir = ./.;
# additional packages to add to gjs's runtime
extraPackages = with pkgs; [
gtksourceview
webkitgtk
accountsservice
];
};
systemd.user.services.ags = {
Unit = {
Description = "Aylur's Gtk Shell";
PartOf = [
"graphical-session.target"
];
};
Service = {
ExecStart = "${cfg.package}/bin/ags";
Restart = "on-failure";
};
Install.WantedBy = ["graphical-session.target"];
};
}

View file

@ -0,0 +1,124 @@
const notifications = await Service.import("notifications");
/** @param {import('resource:///com/github/Aylur/ags/service/notifications.js').Notification} n */
function NotificationIcon({ app_entry, app_icon, image }) {
if (image) {
return Widget.Box({
css:
`background-image: url("${image}");` +
"background-size: contain;" +
"background-repeat: no-repeat;" +
"background-position: center;",
});
}
let icon = "dialog-information-symbolic";
if (Utils.lookUpIcon(app_icon)) icon = app_icon;
if (app_entry && Utils.lookUpIcon(app_entry)) icon = app_entry;
return Widget.Box({
child: Widget.Icon(icon),
});
}
/** @param {import('resource:///com/github/Aylur/ags/service/notifications.js').Notification} n */
function Notification(n) {
const icon = Widget.Box({
vpack: "start",
class_name: "icon",
child: NotificationIcon(n),
});
const title = Widget.Label({
class_name: "title",
xalign: 0,
justification: "left",
hexpand: true,
max_width_chars: 24,
truncate: "end",
wrap: true,
label: n.summary,
use_markup: true,
});
const body = Widget.Label({
class_name: "body",
hexpand: true,
use_markup: true,
xalign: 0,
justification: "left",
label: n.body,
wrap: true,
});
const actions = Widget.Box({
class_name: "actions",
children: n.actions.map(({ id, label }) =>
Widget.Button({
class_name: "action-button",
on_clicked: () => {
n.invoke(id);
n.dismiss();
},
hexpand: true,
child: Widget.Label(label),
}),
),
});
return Widget.EventBox(
{
attribute: { id: n.id },
on_primary_click: n.dismiss,
},
Widget.Box(
{
class_name: `notification ${n.urgency}`,
vertical: true,
},
Widget.Box([icon, Widget.Box({ vertical: true }, title, body)]),
actions,
),
);
}
export function NotificationPopups(monitor = 0) {
const list = Widget.Box({
vertical: true,
children: notifications.popups.map(Notification),
});
function onNotified(_, /** @type {number} */ id) {
const n = notifications.getNotification(id);
if (n) list.children = [Notification(n), ...list.children];
}
function onDismissed(_, /** @type {number} */ id) {
list.children.find((n) => n.attribute.id === id)?.destroy();
}
list
.hook(notifications, onNotified, "notified")
.hook(notifications, onDismissed, "dismissed");
return Widget.Window({
monitor,
name: `notifications${monitor}`,
class_name: "notification-popups",
anchor: ["top", "right"],
child: Widget.Box({
css: "min-width: 2px; min-height: 2px;",
class_name: "notifications",
vertical: true,
child: list,
/** this is a simple one liner that could be used instead of
hooking into the 'notified' and 'dismissed' signals.
but its not very optimized becuase it will recreate
the whole list everytime a notification is added or dismissed */
// children: notifications.bind('popups')
// .as(popups => popups.map(Notification))
}),
});
}

View file

@ -0,0 +1,15 @@
# Starter Config
if suggestions don't work, first make sure
you have TypeScript LSP working in your editor
if you do not want typechecking only suggestions
```json
// tsconfig.json
"checkJs": false
```
types are symlinked to:
/home/nezia/.local/share/com.github.Aylur.ags/types

View file

@ -0,0 +1,57 @@
window.notification-popups box.notifications {
padding: 0.5em;
}
.icon {
min-width: 68px;
min-height: 68px;
margin-right: 1em;
}
.icon image {
font-size: 58px;
/* to center the icon */
margin: 5px;
color: @theme_fg_color;
}
.icon box {
min-width: 68px;
min-height: 68px;
border-radius: 7px;
}
.notification {
min-width: 350px;
border-radius: 11px;
padding: 1em;
margin: 0.5em;
border: 1px solid @wm_borders_edge;
background-color: @theme_bg_color;
}
.notification.critical {
border: 1px solid lightcoral;
}
.title {
color: @theme_fg_color;
font-size: 1.4em;
}
.body {
color: @theme_unfocused_fg_color;
}
.actions .action-button {
margin: 0 0.4em;
margin-top: 0.8em;
}
.actions .action-button:first-child {
margin-left: 0;
}
.actions .action-button:last-child {
margin-right: 0;
}

View file

@ -0,0 +1,18 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "ES2022",
"lib": [
"ES2022"
],
"allowJs": true,
"checkJs": true,
"strict": true,
"noImplicitAny": false,
"baseUrl": ".",
"typeRoots": [
"./types"
],
"skipLibCheck": true
}
}

View file

@ -14,36 +14,28 @@
# idk where to put this
programs = {
fzf.enable = true;
fastfetch.enable = true;
hyfetch = {
enable = true;
settings = {
preset = "nonbinary";
mode = "rgb";
backend = "fastfetch";
color_align.mode = "horizontal";
};
};
hyfetch.enable = true;
};
# miscellaneous programs that do not need to be configured
home.packages = with pkgs; [
cinny-desktop
entr
fractal
geary
gnome-control-center
imhex
logisim-evolution
mission-center
nautilus
obsidian
playerctl
proton-pass
simple-scan
vesktop
wl-clipboard
fractal
gnome-control-center
playerctl
nautilus
simple-scan
entr
inputs.neovim-flake.packages.${pkgs.system}.default
# https://nixpkgs-tracker.ocfox.me/?pr=357219
# mission-center
# cinny-desktop
];
}

View file

@ -14,6 +14,17 @@
dpi-aware = "auto";
font = "monospace:size=14";
};
colors = let
inherit (osConfig.theme.scheme) palette;
in {
background = "${palette.base00}ff";
text = "${palette.base05}ff";
input = "${palette.base05}ff";
selection = "${palette.base02}ff";
selection-text = "${palette.base07}ff";
selection-match = "${palette.base0D}ff";
border = "${palette.base0E}ff";
};
border.width = 5;
};
};

View file

@ -1,8 +1,18 @@
{
pkgs,
config,
osConfig,
lib,
...
}: {
}: let
isDark = osConfig.theme.scheme.variant == "dark";
in {
home.pointerCursor = {
inherit (osConfig.theme.cursorTheme) name package size;
gtk.enable = true;
x11.enable = true;
};
gtk = {
enable = true;
@ -14,6 +24,7 @@
gtk3.extraConfig = {
gtk-decoration-layout = ":menu";
gtk-application-prefer-dark-theme = isDark;
};
gtk4.extraConfig = {
@ -21,5 +32,21 @@
};
gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
iconTheme = {
inherit (osConfig.theme.gtk.iconTheme) name package;
};
theme = lib.mkIf (!osConfig.services.xserver.desktopManager.gnome.enable) {
inherit (osConfig.theme.gtk.theme) name package;
};
};
dconf.settings = {
"org/gnome/desktop/interface" = {
color-scheme =
if isDark
then "prefer-dark"
else "default";
};
};
}

View file

@ -1,17 +1,68 @@
_: {
{
osConfig,
lib,
lib',
...
}: let
inherit (osConfig.theme.scheme) palette;
inherit (lib) mkIf mkMerge;
inherit (lib') rgba;
in {
programs.zathura = {
enable = true;
options = {
font = "Inter 12";
selection-notification = true;
options = mkMerge [
{
font = "Inter 12";
selection-notification = true;
selection-clipboard = "clipboard";
adjust-open = "best-fit";
pages-per-row = "1";
scroll-page-aware = "true";
scroll-full-overlap = "0.01";
scroll-step = "100";
zoom-min = "10";
};
selection-clipboard = "clipboard";
adjust-open = "best-fit";
pages-per-row = "1";
scroll-page-aware = "true";
scroll-full-overlap = "0.01";
scroll-step = "100";
zoom-min = "10";
}
(mkIf osConfig.theme.enable {
default-fg = palette.base05;
default-bg = palette.base00;
completion-bg = palette.base02;
completion-fg = palette.base05;
completion-highlight-bg = palette.base03;
completion-highlight-fg = palette.base05;
completion-group-bg = palette.base02;
completion-group-fg = palette.base0D;
statusbar-fg = palette.base05;
statusbar-bg = palette.base02;
notification-bg = palette.base02;
notification-fg = palette.base05;
notification-error-bg = palette.base02;
notification-error-fg = palette.base08;
notification-warning-bg = palette.base02;
notification-warning-fg = palette.base0A;
inputbar-fg = palette.base05;
inputbar-bg = palette.base02;
recolor = true;
recolor-lightcolor = palette.base00;
recolor-darkcolor = palette.base05;
index-fg = palette.base05;
index-bg = palette.base00;
index-active-fg = palette.base05;
index-active-bg = palette.base02;
render-loading-bg = palette.base00;
render-loading-fg = palette.base05;
highlight-color = rgba lib palette.base03 ".5";
highlight-fg = rgba lib palette.base0E ".5";
highlight-active-color = rgba lib palette.base0E ".5";
})
];
};
}

View file

@ -2,8 +2,11 @@
lib,
pkgs,
config,
osConfig,
...
}: {
}: let
inherit (lib) mkMerge mkIf;
in {
imports = [./binds.nix];
xdg.portal = {
@ -19,78 +22,85 @@
};
};
programs.niri = {
settings = {
input = {
power-key-handling.enable = false;
keyboard.xkb = {
layout = "us";
options = "compose:ralt";
};
};
prefer-no-csd = true;
hotkey-overlay.skip-at-startup = true;
layout = {
focus-ring = {
enable = true;
};
always-center-single-column = true;
};
# https://github.com/sodiboo/system/blob/2978f4d79c51a5bd7e38a9cd75e3ec9046aa7e75/niri.mod.nix#L418-L434
outputs = let
cfg = config.programs.niri.settings.outputs;
in {
"HDMI-A-1" = {
mode = {
width = 1920;
height = 1080;
refresh = 60.0;
programs.niri = mkMerge [
{
settings = {
input = {
power-key-handling.enable = false;
keyboard.xkb = {
layout = "us";
options = "compose:ralt";
};
position.x = -cfg."HDMI-A-1".mode.width;
position.y = 0;
};
"DP-1" = {
mode = {
width = 2560;
height = 1440;
refresh = 144.0;
prefer-no-csd = true;
hotkey-overlay.skip-at-startup = true;
layout = {
focus-ring = {
enable = true;
};
position.x = 0;
position.y = 0;
always-center-single-column = true;
};
# https://github.com/sodiboo/system/blob/2978f4d79c51a5bd7e38a9cd75e3ec9046aa7e75/niri.mod.nix#L418-L434
outputs = let
cfg = config.programs.niri.settings.outputs;
in {
"HDMI-A-1" = {
mode = {
width = 1920;
height = 1080;
refresh = 60.0;
};
position.x = -cfg."HDMI-A-1".mode.width;
position.y = 0;
};
"DP-1" = {
mode = {
width = 2560;
height = 1440;
refresh = 144.0;
};
position.x = 0;
position.y = 0;
};
};
window-rules = [
{
draw-border-with-background = false;
geometry-corner-radius = let
r = 8.0;
in {
top-left = r;
top-right = r;
bottom-left = r;
bottom-right = r;
};
clip-to-geometry = true;
}
{
matches = [
{app-id = "foot";}
];
default-column-width = {proportion = 0.5;};
}
];
environment = {
"NIXOS_OZONE_WL" = "1";
"DISPLAY" = ":0";
"_JAVA_AWT_WM_NONREPARENTING" = "1"; # https://wiki.archlinux.org/title/Sway#Java_applications
};
};
window-rules = [
{
draw-border-with-background = false;
geometry-corner-radius = let
r = 8.0;
in {
top-left = r;
top-right = r;
bottom-left = r;
bottom-right = r;
};
clip-to-geometry = true;
}
{
matches = [
{app-id = "foot";}
];
default-column-width = {proportion = 0.5;};
}
];
environment = {
"NIXOS_OZONE_WL" = "1";
"DISPLAY" = ":0";
"_JAVA_AWT_WM_NONREPARENTING" = "1"; # https://wiki.archlinux.org/title/Sway#Java_applications
};
};
};
}
(mkIf osConfig.theme.enable (let
inherit (osConfig.theme.scheme) palette;
in {
settings.layout.focus-ring.active.color = palette.base0E;
}))
];
# copied from https://github.com/linyinfeng/dotfiles/blob/c00fe3b1562ad947672863a43e455bc2f01a56b6/home-manager/profiles/niri/default.nix#L594-L611
systemd.user.services.xwayland-satellite = {

View file

@ -0,0 +1,37 @@
{
inputs,
config,
pkgs,
...
}: {
imports = [
inputs.plasma-manager.homeManagerModules.plasma-manager
];
rograms.plasma = {
enable = true;
workspace = {
lookAndFeel = "org.kde.breezedark.desktop";
inherit (config.theme) wallpaper;
};
input = {
touchpads = [
{
enable = true;
naturalScroll = true;
vendorId = "093a";
productId = "0274";
name = "PIXA3854:00 093A:0274 Touchpad";
}
];
keyboard = {
options = [
"compose:ralt"
];
};
};
};
home.packages = with pkgs; [
qalculate-qt
];
}

View file

@ -1,24 +1,64 @@
{pkgs, ...}: {
{
pkgs,
osConfig,
lib,
...
}: let
inherit (lib) mkMerge mkIf;
in {
# requires `security.pam.services.swaylock = { };` at the system level or else
# unlock will not work.
programs.swaylock = {
enable = true;
package = pkgs.swaylock-effects;
settings = {
clock = true;
timestr = "%H:%M";
settings = mkMerge [
{
clock = true;
timestr = "%H:%M";
indicator = true;
indicator-radius = 111;
indicator-thickness = 9;
indicator = true;
indicator-radius = 111;
indicator-thickness = 9;
screenshots = true;
effect-blur = "7x5";
effect-vignette = "0.75:0.75";
effect-pixelate = 5;
screenshots = true;
effect-blur = "7x5";
effect-vignette = "0.75:0.75";
effect-pixelate = 5;
ignore-empty-password = false; # needed for PAM to work with fprintd / password
};
ignore-empty-password = false; # needed for PAM to work with fprintd / password
}
(mkIf
osConfig.theme.enable
(let
inherit (osConfig.theme.scheme) palette;
in {
inside-color = palette.base01;
inside-clear-color = palette.base0C;
inside-caps-lock-color = palette.base09;
inside-ver-color = palette.base0D;
inside-wrong-color = palette.base08;
key-hl-color = palette.base0B;
layout-bg-color = palette.base00;
layout-border-color = palette.base05;
layout-text-color = palette.base07;
line-color = palette.base00;
line-clear-color = palette.base0C;
line-caps-lock-color = palette.base09;
line-ver-color = palette.base0D;
line-wrong-color = palette.base08;
ring-color = palette.base02;
ring-clear-color = palette.base0C;
ring-caps-lock-color = palette.base09;
ring-ver-color = palette.base0D;
ring-wrong-color = palette.base08;
separator-color = palette.base02;
text-color = palette.base07;
text-clear-color = palette.base04;
text-caps-lock-color = palette.base04;
text-ver-color = palette.base04;
text-wrong-color = palette.base04;
}))
];
};
}

View file

@ -1,17 +1,22 @@
{
pkgs,
lib,
lib',
osConfig,
config,
...
}: let
inherit (lib) getExe mkMerge mkIf;
inherit (lib) getExe mkMerge mkIf optionalString;
inherit (lib') generateGtkColors;
inherit (osConfig.theme.scheme) palette;
inherit (builtins) readFile;
in {
programs.waybar = {
enable = true;
systemd.enable = true;
style = readFile ./style.css;
style =
optionalString osConfig.theme.enable generateGtkColors lib palette
+ readFile ./style.css;
settings = {
mainBar = mkMerge [
{
@ -156,12 +161,12 @@ in {
(mkIf config.services.swaync.enable {
"custom/notification" = {
tooltip = false;
format = "{icon} ";
format = "{icon}";
format-icons = {
notification = "󱥁";
none = "󰍥";
dnd-notification = "󱅮";
dnd-none = "󱅯";
notification = "󱅫";
none = "󰂚";
dnd-notification = "󱏧";
dnd-none = "󱏧";
};
return-type = "json";
exec = "swaync-client -swb";

View file

@ -5,11 +5,15 @@
...
}: let
inherit (lib) optionalString;
inherit (lib') generateGtkColors;
inherit (osConfig.theme.scheme) palette;
inherit (builtins) readFile;
in {
services.swaync = {
enable = true;
style = readFile ./style.css;
style =
optionalString osConfig.theme.enable generateGtkColors lib palette
+ readFile ./style.css;
settings = {
positionX = "right";
positionY = "top";

View file

@ -1,4 +1,4 @@
_: {
{
imports = [
./programs
./shell

View file

@ -4,6 +4,7 @@
lib,
...
}: let
inherit (lib) mkIf;
in {
programs.foot = {
enable = true;
@ -13,6 +14,33 @@ in {
font = "monospace:size=14";
shell = "${lib.getExe config.programs.fish.package}";
};
colors = mkIf osConfig.theme.enable (let
inherit (lib) mapAttrs;
inherit (lib.strings) removePrefix;
# because someone thought this was a great idea: https://github.com/tinted-theming/schemes/commit/61058a8d2e2bd4482b53d57a68feb56cdb991f0b
palette = mapAttrs (_: color: removePrefix "#" color) osConfig.theme.scheme.palette;
in {
background = palette.base00;
foreground = palette.base05;
regular0 = palette.base01;
regular1 = palette.base08;
regular2 = palette.base0B;
regular3 = palette.base0A;
regular4 = palette.base0D;
regular5 = palette.base0E;
regular6 = palette.base0C;
regular7 = palette.base06;
bright0 = palette.base02;
bright1 = palette.base08;
bright2 = palette.base0B;
bright3 = palette.base0A;
bright4 = palette.base0D;
bright5 = palette.base0E;
bright6 = palette.base0C;
bright7 = palette.base07;
});
};
};
}

View file

@ -1,4 +1,8 @@
_: {
{
config,
inputs,
...
}: {
programs.gnome-terminal = {
enable = true;
showMenubar = true;
@ -10,6 +14,14 @@ _: {
boldIsBright = true;
visibleName = "default";
font = "Intel One Mono 14";
colors = let
inherit (inputs.basix.schemeData.base16.${config.theme.scheme}) palette;
in {
backgroundColor = "#${palette.base00}";
foregroundColor = builtins.trace "#${palette.base05}" "#${palette.base05}";
palette = builtins.attrValues (builtins.mapAttrs (_: color: "#${color}") palette);
};
};
};
};

View file

@ -0,0 +1,37 @@
{
config,
inputs,
pkgs,
...
}: {
programs.konsole = let
inherit (config.theme) scheme;
schemeData = inputs.basix.schemeData.base16.${scheme};
in {
enable = true;
defaultProfile = "default";
profiles = {
default = {
font = {
name = "monospace";
size = 14;
};
colorScheme = schemeData.name;
};
};
extraConfig = {
"MainWindow" = {
"MenuBar" = "Disabled";
"ToolBarsMovable" = "Disabled";
};
"KonsoleWindow" = {
"ShowMenuBarByDefault" = "false";
};
};
customColorSchemes = {
"${schemeData.name}" = pkgs.lib.mkKonsoleColorScheme schemeData;
};
};
}

View file

@ -1,9 +0,0 @@
_: {
programs.bat = {
enable = true;
config.theme = "ansi";
};
home.sessionVariables = {
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
};
}

View file

@ -1,6 +1,5 @@
{pkgs, ...}: {
imports = [
./bat.nix
./git.nix
./gnupg.nix
./tmux.nix

View file

@ -13,32 +13,20 @@ in {
system
"${system}/hardware/uni-sync.nix"
"${system}/programs/gnome.nix"
"${system}/programs/games.nix"
"${system}/hardware/nvidia.nix"
"${system}/services/logind.nix"
"${system}/services/greetd.nix"
"${system}/programs/niri"
"${system}/services/documentation.nix"
"${system}/services/syncthing.nix"
];
home-manager = {
users.nezia.imports = [
"${home}"
"${home}/services/udiskie.nix"
home
"${home}/programs/games"
"${home}/programs/niri"
"${home}/programs/waybar"
"${home}/services/swaync"
"${home}/programs/fuzzel.nix"
"${home}/programs/swaybg.nix"
"${home}/programs/swaylock.nix"
"${home}/programs/swayidle.nix"
"${home}/terminal/emulators/foot.nix"
"${home}/programs/gnome"
];
extraSpecialArgs = specialArgs;
};

View file

@ -2,13 +2,11 @@
inputs,
config,
lib,
lib',
pkgs,
...
}: let
inherit (lib) mkEnableOption mkOption mkIf attrNames;
inherit (lib.types) path package enum;
inherit (lib') generateGtkColors;
cfg = config.theme;
in {
imports = [./gtk.nix];
@ -23,6 +21,13 @@ in {
default = "catppuccin-macchiato";
};
scheme = mkOption {
description = ''
Resolved scheme from the tinted-theming library.
'';
type = lib.types.attrs;
};
wallpaper = mkOption {
description = ''
Location of the wallpaper that will be used throughout the system.
@ -57,154 +62,7 @@ in {
};
};
};
config = let
config.theme = mkIf cfg.enable {
scheme = inputs.basix.schemeData.base16.${config.theme.schemeName};
in
mkIf cfg.enable
{
home-manager.users.nezia = {
home.pointerCursor = {
inherit (config.theme.cursorTheme) name package size;
};
gtk = {
iconTheme = {
inherit (config.theme.gtk.iconTheme) name package;
};
theme = lib.mkIf (!config.services.xserver.desktopManager.gnome.enable) {
inherit (config.theme.gtk.theme) name package;
};
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = scheme.variant == "dark";
};
};
services.swaync.style =
generateGtkColors lib scheme.palette;
programs = {
niri = {
settings.layout.focus-ring.active.color = scheme.palette.base0E;
};
foot.settings.colors = let
inherit (lib.strings) removePrefix;
# because someone thought this was a great idea: https://github.com/tinted-theming/schemes/commit/61058a8d2e2bd4482b53d57a68feb56cdb991f0b
palette = builtins.mapAttrs (_: color: removePrefix "#" color) scheme.palette;
in {
background = palette.base00;
foreground = palette.base05;
regular0 = palette.base01;
regular1 = palette.base08;
regular2 = palette.base0B;
regular3 = palette.base0A;
regular4 = palette.base0D;
regular5 = palette.base0E;
regular6 = palette.base0C;
regular7 = palette.base06;
bright0 = palette.base02;
bright1 = palette.base08;
bright2 = palette.base0B;
bright3 = palette.base0A;
bright4 = palette.base0D;
bright5 = palette.base0E;
bright6 = palette.base0C;
bright7 = palette.base07;
};
waybar.style =
generateGtkColors lib scheme.palette;
fuzzel.settings.colors = {
background = "${scheme.palette.base00}ff";
text = "${scheme.palette.base05}ff";
input = "${scheme.palette.base05}ff";
selection = "${scheme.palette.base02}ff";
selection-text = "${scheme.palette.base07}ff";
selection-match = "${scheme.palette.base0D}ff";
border = "${scheme.palette.base0E}ff";
};
swaylock.settings = {
inside-color = scheme.palette.base01;
inside-clear-color = scheme.palette.base0C;
inside-caps-lock-color = scheme.palette.base09;
inside-ver-color = scheme.palette.base0D;
inside-wrong-color = scheme.palette.base08;
key-hl-color = scheme.palette.base0B;
layout-bg-color = scheme.palette.base00;
layout-border-color = scheme.palette.base05;
layout-text-color = scheme.palette.base07;
line-color = scheme.palette.base00;
line-clear-color = scheme.palette.base0C;
line-caps-lock-color = scheme.palette.base09;
line-ver-color = scheme.palette.base0D;
line-wrong-color = scheme.palette.base08;
ring-color = scheme.palette.base02;
ring-clear-color = scheme.palette.base0C;
ring-caps-lock-color = scheme.palette.base09;
ring-ver-color = scheme.palette.base0D;
ring-wrong-color = scheme.palette.base08;
separator-color = scheme.palette.base02;
text-color = scheme.palette.base07;
text-clear-color = scheme.palette.base04;
text-caps-lock-color = scheme.palette.base04;
text-ver-color = scheme.palette.base04;
text-wrong-color = scheme.palette.base04;
};
zathura.options = {
default-fg = scheme.palette.base05;
default-bg = scheme.palette.base00;
completion-bg = scheme.palette.base02;
completion-fg = scheme.palette.base05;
completion-highlight-bg = scheme.palette.base03;
completion-highlight-fg = scheme.palette.base05;
completion-group-bg = scheme.palette.base02;
completion-group-fg = scheme.palette.base0D;
statusbar-fg = scheme.palette.base05;
statusbar-bg = scheme.palette.base02;
notification-bg = scheme.palette.base02;
notification-fg = scheme.palette.base05;
notification-error-bg = scheme.palette.base02;
notification-error-fg = scheme.palette.base08;
notification-warning-bg = scheme.palette.base02;
notification-warning-fg = scheme.palette.base0A;
inputbar-fg = scheme.palette.base05;
inputbar-bg = scheme.palette.base02;
recolor = true;
recolor-lightcolor = scheme.palette.base00;
recolor-darkcolor = scheme.palette.base05;
index-fg = scheme.palette.base05;
index-bg = scheme.palette.base00;
index-active-fg = scheme.palette.base05;
index-active-bg = scheme.palette.base02;
render-loading-bg = scheme.palette.base00;
render-loading-fg = scheme.palette.base05;
highlight-color = lib'.rgba lib scheme.palette.base03 ".5";
highlight-fg = lib'.rgba lib scheme.palette.base0E ".5";
highlight-active-color = lib'.rgba lib scheme.palette.base0E ".5";
};
gnome-terminal.profile = {
"4621184a-b921-42cf-80a0-7784516606f2".colors = {
backgroundColor = "#${scheme.palette.base00}";
foregroundColor = "#${scheme.palette.base05}" "#${scheme.palette.base05}";
palette = builtins.attrValues (builtins.mapAttrs (_: color: "#${color}") scheme.palette);
};
};
};
};
};
};
}

View file

@ -3,8 +3,8 @@
config = {
allowUnfree = true;
permittedInsecurePackages = [
"cinny-4.2.3"
"cinny-unwrapped-4.2.3"
"cinny-4.2.2"
"cinny-unwrapped-4.2.2"
"segger-jlink-qt4-796s"
];
segger-jlink.acceptLicense = true;

View file

@ -1,12 +0,0 @@
_: {
documentation = {
enable = true;
man = {
enable = true;
man-db.enable = false;
mandoc.enable = true;
generateCaches = true;
};
};
}