Compare commits
5 commits
main
...
add-notifi
Author | SHA1 | Date | |
---|---|---|---|
3b7cb68189 | |||
b1e6fe4407 | |||
20bbc9736c | |||
59adcecd10 | |||
74cb29526e |
26 changed files with 834 additions and 344 deletions
60
flake.lock
60
flake.lock
|
@ -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
156
home/programs/ags/config.js
Normal 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 {};
|
42
home/programs/ags/default.nix
Normal file
42
home/programs/ags/default.nix
Normal 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"];
|
||||||
|
};
|
||||||
|
}
|
124
home/programs/ags/notificationPopups.js
Normal file
124
home/programs/ags/notificationPopups.js
Normal 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))
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
}
|
15
home/programs/ags/src/README.md
Normal file
15
home/programs/ags/src/README.md
Normal 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
|
57
home/programs/ags/style.css
Normal file
57
home/programs/ags/style.css
Normal 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;
|
||||||
|
}
|
18
home/programs/ags/tsconfig.json
Normal file
18
home/programs/ags/tsconfig.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -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";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
||||||
|
})
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
37
home/programs/plasma/default.nix
Normal file
37
home/programs/plasma/default.nix
Normal 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
|
||||||
|
];
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}))
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
_: {
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./programs
|
./programs
|
||||||
./shell
|
./shell
|
||||||
|
|
|
@ -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;
|
||||||
|
});
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
37
home/terminal/emulators/konsole.nix
Normal file
37
home/terminal/emulators/konsole.nix
Normal 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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,9 +0,0 @@
|
||||||
_: {
|
|
||||||
programs.bat = {
|
|
||||||
enable = true;
|
|
||||||
config.theme = "ansi";
|
|
||||||
};
|
|
||||||
home.sessionVariables = {
|
|
||||||
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,6 +1,5 @@
|
||||||
{pkgs, ...}: {
|
{pkgs, ...}: {
|
||||||
imports = [
|
imports = [
|
||||||
./bat.nix
|
|
||||||
./git.nix
|
./git.nix
|
||||||
./gnupg.nix
|
./gnupg.nix
|
||||||
./tmux.nix
|
./tmux.nix
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
_: {
|
|
||||||
documentation = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
man = {
|
|
||||||
enable = true;
|
|
||||||
man-db.enable = false;
|
|
||||||
mandoc.enable = true;
|
|
||||||
generateCaches = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
Loading…
Reference in a new issue