Compare commits

..

5 commits

26 changed files with 834 additions and 344 deletions

View file

@ -155,11 +155,11 @@
}, },
"locked": { "locked": {
"dir": "pkgs/firefox-addons", "dir": "pkgs/firefox-addons",
"lastModified": 1732680201, "lastModified": 1732467630,
"narHash": "sha256-3PA+AlonG9xzJrT1NvnD0Id2dBvIVNrSijVwlIinzNo=", "narHash": "sha256-tm4ZWvjaL1xZmfdi6f1KuEf82XuFspFrX9p6pj+qbSE=",
"owner": "rycee", "owner": "rycee",
"repo": "nur-expressions", "repo": "nur-expressions",
"rev": "77e347b8897e917e99bf2929a7178d8caa6fd473", "rev": "1f325824ab3a25d9099bc610b9e3825867fe4c1a",
"type": "gitlab" "type": "gitlab"
}, },
"original": { "original": {
@ -427,11 +427,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1732482255, "lastModified": 1732472774,
"narHash": "sha256-GUffLwzawz5WRVfWaWCg78n/HrBJrOG7QadFY6rtV8A=", "narHash": "sha256-nfD12L8mm1Zcg0keslWrQgaqj+ZSjQnK6Hf6ryIZA0c=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "a9953635d7f34e7358d5189751110f87e3ac17da", "rev": "83002f18468c4471d5f8de8c542ed2422badbf8f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -581,11 +581,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable" "xwayland-satellite-unstable": "xwayland-satellite-unstable"
}, },
"locked": { "locked": {
"lastModified": 1732659819, "lastModified": 1732366896,
"narHash": "sha256-Z1KdUhm4IQAVEodkl19XvPdZyWbU36bBKnregIffxsw=", "narHash": "sha256-dQrHznGma8aWeBESRUCc1onWYoGrM35GDl/uwEB7eG8=",
"owner": "sodiboo", "owner": "sodiboo",
"repo": "niri-flake", "repo": "niri-flake",
"rev": "b1ccd1e910af3f72ba02d64f61121b42b4c3184e", "rev": "3131d857c946c75557f5b6fb99a113b6949ea04d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -614,11 +614,11 @@
"niri-unstable": { "niri-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1732647766, "lastModified": 1732363756,
"narHash": "sha256-ZUcQN/2bqL4BK+ifHX9Om4HJOZQAMefK7iziO/ZeEDo=", "narHash": "sha256-/E2aRhcvlH2PkkpC2n79UCMZyIkQKWfG4m//UHkeNgU=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "4c480a1ea3280733bc428d9cb38150bfc1a7c36c", "rev": "9c7e8d04d27d2f914ad3e9a54c64b64c34aea4d4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -634,11 +634,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1732519917, "lastModified": 1732461762,
"narHash": "sha256-AGXhwHdJV0q/WNgqwrR2zriubLr785b02FphaBtyt1Q=", "narHash": "sha256-3SMxtkXlmzPmF4NXCt6lLF2IkdyAmO824PlScUKVhB0=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-index-database", "repo": "nix-index-database",
"rev": "f4a5ca5771ba9ca31ad24a62c8d511a405303436", "rev": "bedc30c64442579943c1c6e7579db263d810884f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -649,11 +649,11 @@
}, },
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1732483221, "lastModified": 1731797098,
"narHash": "sha256-kF6rDeCshoCgmQz+7uiuPdREVFuzhIorGOoPXMalL2U=", "narHash": "sha256-UhWmEZhwJZmVZ1jfHZFzCg+ZLO9Tb/v3Y6LC0UNyeTo=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "45348ad6fb8ac0e8415f6e5e96efe47dd7f39405", "rev": "672ac2ac86f7dff2f6f3406405bddecf960e0db6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -800,11 +800,11 @@
}, },
"nixpkgs_6": { "nixpkgs_6": {
"locked": { "locked": {
"lastModified": 1732521221, "lastModified": 1732014248,
"narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", "narHash": "sha256-y/MEyuJ5oBWrWAic/14LaIr/u5E0wRVzyYsouYY3W6w=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", "rev": "23e89b7da85c3640bbc2173fe04f4bd114342367",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -816,11 +816,11 @@
}, },
"nixpkgs_7": { "nixpkgs_7": {
"locked": { "locked": {
"lastModified": 1732521221, "lastModified": 1732014248,
"narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", "narHash": "sha256-y/MEyuJ5oBWrWAic/14LaIr/u5E0wRVzyYsouYY3W6w=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", "rev": "23e89b7da85c3640bbc2173fe04f4bd114342367",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1014,11 +1014,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1732639391, "lastModified": 1732465698,
"narHash": "sha256-kFtXjoCIqx9xe0ZryPXpqS6l/HVg71aNcuL8Y5e8+pI=", "narHash": "sha256-xiue+Kj2Jm8PwyZQcHl4CaYmMIgo5oi37hVHqiw2Unk=",
"owner": "nix-community", "owner": "nix-community",
"repo": "plasma-manager", "repo": "plasma-manager",
"rev": "06e3209d11797d9c741e25df06ab61048746bf93", "rev": "16d65cd02b5de665d1bcfec1616c02c71a1014a6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -2948,11 +2948,11 @@
"nixpkgs": "nixpkgs_9" "nixpkgs": "nixpkgs_9"
}, },
"locked": { "locked": {
"lastModified": 1732643199, "lastModified": 1732292307,
"narHash": "sha256-uI7TXEb231o8dkwB5AUCecx3AQtosRmL6hKgnckvjps=", "narHash": "sha256-5WSng844vXt8uytT5djmqBCkopyle6ciFgteuA9bJpw=",
"owner": "numtide", "owner": "numtide",
"repo": "treefmt-nix", "repo": "treefmt-nix",
"rev": "84637a7ab04179bdc42aa8fd0af1909fba76ad0c", "rev": "705df92694af7093dfbb27109ce16d828a79155f",
"type": "github" "type": "github"
}, },
"original": { "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 # idk where to put this
programs = { programs = {
fzf.enable = true; fzf.enable = true;
fastfetch.enable = true; hyfetch.enable = true;
hyfetch = {
enable = true;
settings = {
preset = "nonbinary";
mode = "rgb";
backend = "fastfetch";
color_align.mode = "horizontal";
};
};
}; };
# miscellaneous programs that do not need to be configured # miscellaneous programs that do not need to be configured
home.packages = with pkgs; [ home.packages = with pkgs; [
cinny-desktop
entr
fractal
geary geary
gnome-control-center
imhex imhex
logisim-evolution logisim-evolution
mission-center
nautilus
obsidian obsidian
playerctl
proton-pass proton-pass
simple-scan
vesktop vesktop
wl-clipboard wl-clipboard
fractal
gnome-control-center
playerctl
nautilus
simple-scan
entr
inputs.neovim-flake.packages.${pkgs.system}.default 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"; dpi-aware = "auto";
font = "monospace:size=14"; 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; border.width = 5;
}; };
}; };

View file

@ -1,8 +1,18 @@
{ {
pkgs, pkgs,
config, 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 = { gtk = {
enable = true; enable = true;
@ -14,6 +24,7 @@
gtk3.extraConfig = { gtk3.extraConfig = {
gtk-decoration-layout = ":menu"; gtk-decoration-layout = ":menu";
gtk-application-prefer-dark-theme = isDark;
}; };
gtk4.extraConfig = { gtk4.extraConfig = {
@ -21,5 +32,21 @@
}; };
gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc"; 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,7 +1,17 @@
_: { {
osConfig,
lib,
lib',
...
}: let
inherit (osConfig.theme.scheme) palette;
inherit (lib) mkIf mkMerge;
inherit (lib') rgba;
in {
programs.zathura = { programs.zathura = {
enable = true; enable = true;
options = { options = mkMerge [
{
font = "Inter 12"; font = "Inter 12";
selection-notification = true; selection-notification = true;
@ -12,6 +22,47 @@ _: {
scroll-full-overlap = "0.01"; scroll-full-overlap = "0.01";
scroll-step = "100"; scroll-step = "100";
zoom-min = "10"; 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, lib,
pkgs, pkgs,
config, config,
osConfig,
... ...
}: { }: let
inherit (lib) mkMerge mkIf;
in {
imports = [./binds.nix]; imports = [./binds.nix];
xdg.portal = { xdg.portal = {
@ -19,7 +22,8 @@
}; };
}; };
programs.niri = { programs.niri = mkMerge [
{
settings = { settings = {
input = { input = {
power-key-handling.enable = false; power-key-handling.enable = false;
@ -90,7 +94,13 @@
"_JAVA_AWT_WM_NONREPARENTING" = "1"; # https://wiki.archlinux.org/title/Sway#Java_applications "_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 # copied from https://github.com/linyinfeng/dotfiles/blob/c00fe3b1562ad947672863a43e455bc2f01a56b6/home-manager/profiles/niri/default.nix#L594-L611
systemd.user.services.xwayland-satellite = { 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,11 +1,19 @@
{pkgs, ...}: { {
pkgs,
osConfig,
lib,
...
}: let
inherit (lib) mkMerge mkIf;
in {
# requires `security.pam.services.swaylock = { };` at the system level or else # requires `security.pam.services.swaylock = { };` at the system level or else
# unlock will not work. # unlock will not work.
programs.swaylock = { programs.swaylock = {
enable = true; enable = true;
package = pkgs.swaylock-effects; package = pkgs.swaylock-effects;
settings = { settings = mkMerge [
{
clock = true; clock = true;
timestr = "%H:%M"; timestr = "%H:%M";
@ -19,6 +27,38 @@
effect-pixelate = 5; 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, pkgs,
lib, lib,
lib',
osConfig, osConfig,
config, config,
... ...
}: let }: let
inherit (lib) getExe mkMerge mkIf; inherit (lib) getExe mkMerge mkIf optionalString;
inherit (lib') generateGtkColors;
inherit (osConfig.theme.scheme) palette;
inherit (builtins) readFile; inherit (builtins) readFile;
in { in {
programs.waybar = { programs.waybar = {
enable = true; enable = true;
systemd.enable = true; systemd.enable = true;
style = readFile ./style.css; style =
optionalString osConfig.theme.enable generateGtkColors lib palette
+ readFile ./style.css;
settings = { settings = {
mainBar = mkMerge [ mainBar = mkMerge [
{ {
@ -156,12 +161,12 @@ in {
(mkIf config.services.swaync.enable { (mkIf config.services.swaync.enable {
"custom/notification" = { "custom/notification" = {
tooltip = false; tooltip = false;
format = "{icon} "; format = "{icon}";
format-icons = { format-icons = {
notification = "󱥁"; notification = "󱅫";
none = "󰍥"; none = "󰂚";
dnd-notification = "󱅮"; dnd-notification = "󱏧";
dnd-none = "󱅯"; dnd-none = "󱏧";
}; };
return-type = "json"; return-type = "json";
exec = "swaync-client -swb"; exec = "swaync-client -swb";

View file

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

View file

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

View file

@ -4,6 +4,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib) mkIf;
in { in {
programs.foot = { programs.foot = {
enable = true; enable = true;
@ -13,6 +14,33 @@ in {
font = "monospace:size=14"; font = "monospace:size=14";
shell = "${lib.getExe config.programs.fish.package}"; 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 = { programs.gnome-terminal = {
enable = true; enable = true;
showMenubar = true; showMenubar = true;
@ -10,6 +14,14 @@ _: {
boldIsBright = true; boldIsBright = true;
visibleName = "default"; visibleName = "default";
font = "Intel One Mono 14"; 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, ...}: { {pkgs, ...}: {
imports = [ imports = [
./bat.nix
./git.nix ./git.nix
./gnupg.nix ./gnupg.nix
./tmux.nix ./tmux.nix

View file

@ -13,32 +13,20 @@ in {
system system
"${system}/hardware/uni-sync.nix" "${system}/hardware/uni-sync.nix"
"${system}/programs/gnome.nix"
"${system}/programs/games.nix" "${system}/programs/games.nix"
"${system}/hardware/nvidia.nix" "${system}/hardware/nvidia.nix"
"${system}/services/logind.nix" "${system}/services/syncthing.nix"
"${system}/services/greetd.nix"
"${system}/programs/niri"
"${system}/services/documentation.nix"
]; ];
home-manager = { home-manager = {
users.nezia.imports = [ users.nezia.imports = [
"${home}" home
"${home}/services/udiskie.nix"
"${home}/programs/games" "${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}/terminal/emulators/foot.nix"
"${home}/programs/gnome"
]; ];
extraSpecialArgs = specialArgs; extraSpecialArgs = specialArgs;
}; };

View file

@ -2,13 +2,11 @@
inputs, inputs,
config, config,
lib, lib,
lib',
pkgs, pkgs,
... ...
}: let }: let
inherit (lib) mkEnableOption mkOption mkIf attrNames; inherit (lib) mkEnableOption mkOption mkIf attrNames;
inherit (lib.types) path package enum; inherit (lib.types) path package enum;
inherit (lib') generateGtkColors;
cfg = config.theme; cfg = config.theme;
in { in {
imports = [./gtk.nix]; imports = [./gtk.nix];
@ -23,6 +21,13 @@ in {
default = "catppuccin-macchiato"; default = "catppuccin-macchiato";
}; };
scheme = mkOption {
description = ''
Resolved scheme from the tinted-theming library.
'';
type = lib.types.attrs;
};
wallpaper = mkOption { wallpaper = mkOption {
description = '' description = ''
Location of the wallpaper that will be used throughout the system. 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}; 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 = { config = {
allowUnfree = true; allowUnfree = true;
permittedInsecurePackages = [ permittedInsecurePackages = [
"cinny-4.2.3" "cinny-4.2.2"
"cinny-unwrapped-4.2.3" "cinny-unwrapped-4.2.2"
"segger-jlink-qt4-796s" "segger-jlink-qt4-796s"
]; ];
segger-jlink.acceptLicense = true; 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;
};
};
}