Compare commits

...
123 Commits
Author SHA1 Message Date
Chest 69fb7af5eb aagl_zzz 2025-12-01 14:00:02 +03:00
Chest d98a5c0299 cat 2025-12-01 14:00:02 +03:00
Sweetbread da2270ecdc zsh: add more aliases 2025-12-01 01:18:40 +03:00
Sweetbread 661a345fc7 boot: left os prober only for Impreza 2025-12-01 01:18:40 +03:00
Sweetbread 05e8560841 flake: remove devshell 2025-12-01 01:18:40 +03:00
Sweetbread ba2d24a66d flake: remove host definition dublication 2025-12-01 01:18:40 +03:00
Sweetbread b6901adbc8 zsh: config history 2025-12-01 01:18:40 +03:00
Sweetbread b9b79f7988 zsh: optimise aliases 2025-12-01 01:18:40 +03:00
Sweetbread e8d5b71b72 hyprland: separate settings for user and host 2025-12-01 01:18:40 +03:00
Sweetbread dec1530e98 Update system 2025-12-01 01:18:39 +03:00
Sweetbread cae32c1b4f pkgs: return office to everyone 2025-11-15 20:09:47 +03:00
Sweetbread a0ea0dd7f1 pdf 2025-11-15 20:09:47 +03:00
Sweetbread a42b17d363 fixup! Add Miku cursor 2025-11-02 19:35:06 +03:00
Sweetbread f970e20730 system: update 2025-10-31 13:40:32 +03:00
Sweetbread 4c34c5c364 pkgs: add torrent client 2025-10-24 13:15:25 +03:00
Sweetbread c4ceb67dfc Add Miku cursor 2025-10-10 00:51:20 +03:00
Sweetbread 9706b7954c Add Kurumi cursor 2025-10-10 00:50:52 +03:00
Sweetbread 396db61e5e nvidia: set envvar 2025-09-29 17:50:36 +03:00
Sweetbread 063cfe0ac0 style: set dark mode 2025-09-29 17:49:38 +03:00
Sweetbread 82e9a0e807 pkgs: add opentabletdriver 2025-09-26 00:12:45 +03:00
Sweetbread 3304573292 system: update 2025-09-26 00:12:45 +03:00
Sweetbread 26753a5b98 hypr: add focus 2025-09-24 18:29:37 +03:00
Sweetbread 51280986ed tex: add packages 2025-09-19 00:57:03 +03:00
Sweetbread 6a6be514df pkgs: add vivaldi 2025-09-07 20:00:31 +03:00
Sweetbread 0b7bf06f58 fix: set imv as a image viewer 2025-09-04 19:00:49 +03:00
Sweetbread c11584e31e yazi: set up plugins 2025-09-01 20:39:31 +03:00
Sweetbread 6fc5cee147 system: update 2025-09-01 15:48:20 +03:00
Sweetbread adc82860eb feat: scanning 2025-09-01 15:47:40 +03:00
Sweetbread bd9bf6ccc7 wip: fix: clipboard 2025-09-01 15:47:40 +03:00
Sweetbread 75bb7846f9 pkgs: replace grimblast with hyprshot 2025-08-24 20:01:35 +03:00
Sweetbread 7747587e69 pkgs: fastfetch instead of neofetch 2025-08-24 20:01:35 +03:00
Sweetbread 7c37e7122f system: update 2025-08-24 20:01:35 +03:00
Sweetbread 02aef91f3a system: change mount path to partlabel 2025-07-22 22:17:18 +03:00
Chest ba0aac7807 New install 2025-07-22 22:17:04 +03:00
Chest b27399db29 flake: update aagl 2025-07-02 15:15:52 +03:00
Chest a98c3f84ce feat: F disk 2025-07-02 15:15:52 +03:00
Sweetbread 7069a9e1f0 yazi: do not preload .crdownload 2025-06-26 19:50:54 +03:00
Sweetbread 86a972fd61 hyprland: add media app binds 2025-06-25 17:25:12 +03:00
Sweetbread d793b0e635 hyprland: add media binds 2025-06-24 23:30:29 +03:00
Sweetbread 1f034a5ebc pkgs: add texstudio 2025-06-09 16:28:02 +03:00
Sweetbread b96b2986f0 system: update 2025-06-08 02:53:46 +03:00
Sweetbread 4570dfb4b4 chore: something... 2025-06-08 01:18:25 +03:00
Sweetbread 88efa96ac7 pkgs: remove libreoffice for chest 2025-05-21 17:02:09 +03:00
Sweetbread 48ce8bdf9d system: update 2025-05-05 17:21:43 +03:00
Sweetbread 724633d928 system: change channels 2025-05-05 16:46:17 +03:00
Sweetbread 7eedb9098a pkgs(chest): turn off some packages 2025-05-03 23:27:53 +03:00
Sweetbread 6432eb6171 style: decrease gaps 2025-04-22 11:49:15 +03:00
Sweetbread 4b7d0a0980 system: update nixpkgs-fixed 2025-04-22 00:33:22 +03:00
Sweetbread de77adcfcb style: ags 2025-04-22 00:33:22 +03:00
Sweetbread 16f84aaa04 system: update 2025-04-22 00:33:22 +03:00
Sweetbread 24f013c765 refactor: move utils to a separate file 2025-04-18 02:52:44 +03:00
Sweetbread a84a509cf8 pkgs: add krita and gimp 2025-04-18 02:46:26 +03:00
Sweetbread df54654750 fix: wallpapers 2025-04-18 02:46:26 +03:00
Chest cddf52d5d3 add binwalk 2025-04-16 00:21:35 +03:00
Chest 01c5f62314 aagl 2025-04-16 00:21:35 +03:00
Sweetbread 3279001345 Remove hyprlock 2025-04-16 00:20:20 +03:00
Sweetbread 2ea3557973 feat: add intel graphics config 2025-04-13 19:38:10 +03:00
Sweetbread 9cdd54c6e8 feat: add dependencies to host in home-manager 2025-04-13 18:22:04 +03:00
Sweetbread 28bf565203 pkgs: add pinentry 2025-04-12 00:20:59 +03:00
Sweetbread b1df12ae65 fix(ags): set margins 2025-04-11 23:49:16 +03:00
Chest 5912338271 host: Impreza 2025-04-11 23:49:16 +03:00
Sweetbread a5d2aad596 fix: change nick 2025-04-09 17:30:37 +03:00
Sweetbread 56add43822 feat: yggdrasil 2025-04-09 17:30:37 +03:00
Sweetbread d524383340 style: cursor 2025-04-09 17:30:37 +03:00
Sweetbread 51566b7224 style: font 2025-04-09 17:30:37 +03:00
Sweetbread 2d322ab1f2 system: update 2025-04-09 17:30:37 +03:00
Sweetbread 8c39e606e3 feat(yazi): add d drive shortcut 2025-04-03 23:39:04 +03:00
Sweetbread d275bc88b2 feat: add my custom dns server 2025-04-03 23:39:04 +03:00
Sweetbread 3acbf43b4e feat: add pulsemixer 2025-04-03 23:39:04 +03:00
Sweetbread 729fe36326 fix: brightness setting 2025-04-03 23:39:04 +03:00
Sweetbread 530be0cf44 feat: kitty to ghostty 2025-04-03 23:39:04 +03:00
Sweetbread 6105e157c7 pkgs: add some utils 2025-04-03 23:39:04 +03:00
Sweetbread 4b0e3a61e9 feat(ags): add battery bar 2025-04-03 23:39:04 +03:00
Sweetbread 680b3cd3d6 fix(ags): wifi widget 2025-04-03 23:39:04 +03:00
Sweetbread 830336ee06 feat: postgres 2025-04-03 23:39:04 +03:00
Sweetbread 01bc1610bf system: Update 2025-03-13 15:11:27 +03:00
Sweetbread d26818f47a git: Change mail 2025-03-12 20:52:32 +03:00
Sweetbread ca50e2af2b pkgs: Add prismlauncher 2025-03-10 16:42:31 +03:00
Sweetbread 0cc88081d1 system: Update 2025-03-01 22:41:11 +03:00
Chest dee91dd001 Add pkgs 2025-03-01 22:22:27 +03:00
Sweetbread 510e179b78 system: Update 2025-02-13 23:53:19 +03:00
Sweetbread ea39ab9992 perf: Home-manager to module
feat: Optionise config
2025-02-13 23:53:19 +03:00
Sweetbread f2c215460b fix(helix): No end newline 2025-01-31 19:45:16 +03:00
Sweetbread 96d83ec1b4 pkgs: Add trashy 2025-01-27 13:57:18 +03:00
Sweetbread a3f6c55b93 style: Change opacity and wallpaper 2025-01-27 13:55:48 +03:00
Sweetbread 879ea3474a system: Update 2025-01-27 13:55:48 +03:00
Sweetbread 41cf1a5894 pkgs: litecli 2025-01-27 13:55:48 +03:00
Sweetbread b294b8c8ee feat(zsh): lg alias 2025-01-27 13:55:48 +03:00
Sweetbread e677754de3 style: Reduce gap 2025-01-25 20:00:59 +03:00
Sweetbread 4f11c8139f wip: console
Font changes to default after reload
2025-01-25 19:38:13 +03:00
Sweetbread e46c205fe3 ags: To derivation 2025-01-25 19:38:13 +03:00
Sweetbread 290b694877 pkgs: Udiskie 2025-01-25 19:38:13 +03:00
Sweetbread 8ad47d16eb system: Update 2025-01-25 19:38:13 +03:00
Sweetbread e3f8430193 pkgs: Remove extra packages 2025-01-25 19:38:13 +03:00
Sweetbread 46d4249637 style: Btop 2025-01-25 19:38:13 +03:00
Sweetbread 8c1f94d05a feat(devshell): Add pkgs for helix and switching to zsh 2025-01-25 19:38:13 +03:00
Sweetbread bac068cf69 fix(starship): Remove extra space 2025-01-25 19:38:13 +03:00
Sweetbread 6cbc8b393d pkgs: Update aagl 2025-01-25 19:38:13 +03:00
Sweetbread ac3eee4bb0 pkgs: git-lfs 2025-01-25 19:38:13 +03:00
Sweetbread 045f44e2d2 pkgs: To 24.11 2025-01-25 19:38:13 +03:00
Sweetbread a198789a17 ags: Add keyboard layout widget 2025-01-25 19:38:13 +03:00
Sweetbread 7fa285f0cc docs: Change screenshot 2025-01-25 19:38:13 +03:00
Sweetbread bebf7e8b6d pkgs: Add Pycharm to chest 2025-01-25 19:38:13 +03:00
Sweetbread 6f2c1bed14 ags: style 2025-01-25 19:38:13 +03:00
Sweetbread dfa96985d6 pkgs: Remove dev packages 2025-01-25 19:38:13 +03:00
Sweetbread 2a6196cc70 fix: Show GPU stats in BTop 2025-01-25 19:38:13 +03:00
Sweetbread 23a0e060ef grub: Add theme 2025-01-25 19:38:13 +03:00
Sweetbread 040923c626 fix: Bootloader 2025-01-25 19:38:13 +03:00
Sweetbread 2c3de69e72 fix: Icons 2025-01-25 19:38:13 +03:00
Sweetbread 8ea1207bb9 feat: ags 2025-01-10 22:15:02 +03:00
Sweetbread 21fe030dc7 pkgs: New utils 2024-12-28 20:00:44 +03:00
Sweetbread f6950c7e78 system: Update 2024-12-28 20:00:44 +03:00
Sweetbread f76b88cf4b vpn: Update 2024-12-28 20:00:44 +03:00
Sweetbread 6e5568e330 pkgs: Add rtorrent 2024-12-28 20:00:44 +03:00
Sweetbread 1308aae228 syncthing: New device 2024-12-28 20:00:44 +03:00
Sweetbread ded07cb14a pkgs: Add aseprite 2024-12-28 20:00:44 +03:00
Sweetbread 81ab925d88 pkgs: Add libreoffice 2024-12-28 20:00:44 +03:00
Sweetbread e909e76c9e develop: Add Rust 2024-12-28 20:00:44 +03:00
Sweetbread 3fc9f416f9 feat: Drag and Drop in yazi 2024-12-28 20:00:44 +03:00
Sweetbread c3672ea118 system: Update 2024-12-28 20:00:44 +03:00
Sweetbread 1dee7a5769 vpn: Update 2024-12-28 20:00:44 +03:00
Sweetbread e0a0721dea pkgs: Flakify AAGL 2024-12-28 20:00:44 +03:00
Sweetbread 5cad49555e pkgs: Syncthing 2024-12-28 20:00:44 +03:00
137 changed files with 2557 additions and 2409 deletions
+1
View File
@@ -0,0 +1 @@
screenshot.png filter=lfs diff=lfs merge=lfs -text
+1 -1
View File
@@ -5,7 +5,7 @@ creation_rules:
key_groups:
- age:
- *primary
- path_regex: nixos/hosts/(Rias|Senko|Eclipse)/secrets/.+$
- path_regex: host/(Rias|Senko|Eclipse)/secrets/.+$
key_groups:
- age:
- *primary
Generated
+441 -260
View File
File diff suppressed because it is too large Load Diff
+32 -90
View File
@@ -2,28 +2,35 @@
description = "My system configuration";
nixConfig = {
allowUnfree = true;
extra-substituters = [
"https://cache.garnix.io"
"https://nix-community.cachix.org"
# "https://cache.garnix.io"
"https://hyprland.cachix.org"
"https://ezkea.cachix.org"
"https://risdeveau.cachix.org"
];
extra-trusted-public-keys = [
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
# "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI="
"risdeveau.cachix.org-1:TsoFSVeLl7iKtUYGX7qsvKPjf2vbNLfLC5v3SAdU8r0="
];
};
inputs = {
aagl.url = "github:ezKEa/aagl-gtk-on-nix";
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.05";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
nixpkgs-fixed.url = "github:nixos/nixpkgs/ce01daebf8489ba97bd1609d185ea276efdeb121";
sops-nix.url = "github:Mic92/sops-nix";
stylix.url = "github:danth/stylix";
ags.url = "github:Aylur/ags";
ayugram-desktop.url = "github:/ayugram-port/ayugram-desktop/release?submodules=1";
tlock.url = "git+https://github.com/eklairs/tlock?submodules=1";
ags.url = "github:Aylur/ags/3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6";
yazi.url = "github:sxyazi/yazi";
hyprpanel.url = "github:Jas-SinghFSU/HyprPanel";
hyprland.url = "github:hyprwm/Hyprland";
hyprland.url = "github:hyprwm/Hyprland/v0.52.1-b";
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs.hyprland.follows = "hyprland";
@@ -35,91 +42,26 @@
};
};
outputs = { self, nixpkgs, nixpkgs-stable, home-manager, ... }@inputs: let
outputs = { self, nixpkgs, nixpkgs-stable, nixpkgs-fixed, home-manager, ... }@inputs: let
system = "x86_64-linux";
pkgs = import nixpkgs {
inherit system;
overlays = [ inputs.hyprpanel.overlay ];
config = { allowUnfree = true; };
mkHost = hostname: nixpkgs-stable.lib.nixosSystem {
specialArgs = {
inherit
inputs
system
;
pkgs-unstable = import nixpkgs { inherit system config; };
pkgs-fixed = import nixpkgs-fixed { inherit system config; };
};
modules = [ ./host/${hostname}/configuration.nix ];
};
in {
nixosConfigurations = {
Rias = nixpkgs.lib.nixosSystem {
specialArgs = {
pkgs-stable = import nixpkgs-stable {
inherit system;
config.allowUnfree = true;
};
inherit inputs system;
};
modules = [
./nixos/hosts/Rias/configuration.nix
inputs.sops-nix.nixosModules.sops
];
};
Senko = nixpkgs.lib.nixosSystem {
specialArgs = {
pkgs-stable = import nixpkgs-stable {
inherit system;
config.allowUnfree = true;
};
inherit inputs system;
};
modules = [
./nixos/hosts/Senko/configuration.nix
inputs.sops-nix.nixosModules.sops
];
};
Eclipse = nixpkgs.lib.nixosSystem {
specialArgs = {
pkgs-stable = import nixpkgs-stable {
inherit system;
config.allowUnfree = true;
};
inherit inputs system;
};
modules = [
./nixos/hosts/Eclipse/configuration.nix
inputs.sops-nix.nixosModules.sops
];
};
};
homeConfigurations = {
sweetbread = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
extraSpecialArgs = {
inherit inputs;
pkgs-stable = import nixpkgs-stable {
inherit system;
config.allowUnfree = true;
};
};
modules = [
./home-manager/users/sweetbread/home.nix
inputs.sops-nix.homeManagerModules.sops
inputs.stylix.homeManagerModules.stylix
inputs.ags.homeManagerModules.default
];
};
chest = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
extraSpecialArgs = {
inherit inputs;
pkgs-stable = import nixpkgs-stable {
inherit system;
config.allowUnfree = true;
};
};
modules = [
./home-manager/users/chest/home.nix
inputs.sops-nix.homeManagerModules.sops
inputs.stylix.homeManagerModules.stylix
inputs.ags.homeManagerModules.default
];
};
Rias = mkHost "Rias";
Senko = mkHost "Senko";
Eclipse = mkHost "Eclipse";
Impreza = mkHost "Impreza";
};
};
}
-325
View File
@@ -1,325 +0,0 @@
{ inputs, pkgs, config, ... }: {
# imports = [ inputs.ags.homeManagerModules.default ];
programs.ags = {
enable = true;
# null or path, leave as null if you don't want hm to manage the config
configDir = null;
# additional packages to add to gjs's runtime
extraPackages = with pkgs; [
gtksourceview
webkitgtk
accountsservice
];
};
xdg.configFile."ags/config.js".text = /*js*/ ''
const hyprland = await Service.import("hyprland")
const notifications = await Service.import("notifications")
const mpris = await Service.import("mpris")
const audio = await Service.import("audio")
const battery = await Service.import("battery")
const systemtray = await Service.import("systemtray")
const date = Variable("", {
poll: [1000, 'date "+%H:%M:%S %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 Workspaces() {
const activeId = hyprland.active.workspace.bind("id")
const workspaces = hyprland.bind("workspaces")
.as(ws => ws.map(({ id }) => Widget.Button({
on_clicked: () => hyprland.messageAsync(`dispatch workspace ''${id}`),
child: Widget.Label(`''${id}`),
class_name: activeId.as(i => `''${i === id ? "focused" : ""}`),
})))
return Widget.Box({
class_name: "workspaces",
children: workspaces,
})
}
function ClientTitle() {
return Widget.Label({
class_name: "client-title",
label: hyprland.active.client.bind("title"),
})
}
function Clock() {
return Widget.Label({
class_name: "clock",
label: date.bind(),
})
}
// we don't need dunst or any other notification daemon
// because the Notifications module is a notification daemon itself
function Notification() {
const popups = notifications.bind("popups")
return Widget.Box({
class_name: "notification",
visible: popups.as(p => p.length > 0),
children: [
Widget.Icon({
icon: "preferences-system-notifications-symbolic",
}),
Widget.Label({
label: popups.as(p => p[0]?.summary || ""),
}),
],
})
}
function Media() {
const label = Utils.watch("default", 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"
}
})
print(Object.values(label))
if (label != "default") {
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({
spacing: 8,
children: [
Workspaces(),
ClientTitle(),
],
})
}
function Center() {
return Widget.Box({
spacing: 8,
children: [
Media(),
Notification(),
],
})
}
function Right() {
return Widget.Box({
hpack: "end",
spacing: 8,
children: [
Volume(),
BatteryLabel(),
Clock(),
SysTray(),
],
})
}
function Bar(monitor = 0) {
return Widget.Window({
name: `bar-''${monitor}`, // name has to be unique
class_name: "bar",
monitor,
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(),
// you can call it, for each monitor
// Bar(0),
// Bar(1)
],
})
export { }
'';
xdg.configFile."ags/style.css".text = let
colors = config.lib.stylix.colors;
color = {
base = colors.base00;
mantle = colors.base01;
surface0 = colors.base02;
surface1 = colors.base03;
surface2 = colors.base04;
text = colors.base05;
rosewater = colors.base06;
lavander = colors.base07;
red = colors.base08;
peach = colors.base09;
yellow = colors.base0A;
green = colors.base0B;
teal = colors.base0C;
blue = colors.base0D;
mauve = colors.base0E;
flamingo = colors.base0F;
};
in /*css*/ ''
* {
border: none;
box-shadow: none;
text-shadow: none;
}
window.bar {
background-color: transparent;
color: #${color.text};
}
button {
/* size: 20px; */
background-color: transparent;
border-radius: 10px;
}
button:active {
background-color: /*#${color.surface0}*/ red;
}
label {
font-weight: bold;
}
.workspaces {
background-color: #${color.base};
border-radius: 10px;
}
.workspaces button {
color: #${color.surface2};
background: transparent;
padding: 5px;
}
.workspaces button:hover {
color: #${color.text};
}
.workspaces button.focused {
background-color: #${color.surface0};
color: #${color.text};
}
.client-title {
color: @theme_selected_bg_color;
}
.notification {
color: yellow;
}
levelbar block,
highlight {
min-height: 10px;
}
'';
# home.packages = [ pkgs.ags ];
}
-18
View File
@@ -1,18 +0,0 @@
# Simple Bar
setup
```bash
mkdir -p ~/.config/ags
git clone https://github.com/Aylur/ags.git /tmp/ags
cp -r /tmp/ags/example/simple-bar/* ~/.config/ags
# optionally setup types
ags --init -c ~/.config/ags/config.js
```
running
```bash
ags -c ~/.config/ags/config.js &
```
-219
View File
@@ -1,219 +0,0 @@
const hyprland = await Service.import("hyprland")
const notifications = await Service.import("notifications")
const mpris = await Service.import("mpris")
const audio = await Service.import("audio")
const battery = await Service.import("battery")
const systemtray = await Service.import("systemtray")
const date = Variable("", {
poll: [1000, 'date "+%H:%M:%S %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 Workspaces() {
const activeId = hyprland.active.workspace.bind("id")
const workspaces = hyprland.bind("workspaces")
.as(ws => ws.map(({ id }) => Widget.Button({
on_clicked: () => hyprland.messageAsync(`dispatch workspace ${id}`),
child: Widget.Label(`${id}`),
class_name: activeId.as(i => `${i === id ? "focused" : ""}`),
})))
return Widget.Box({
class_name: "workspaces",
children: workspaces,
})
}
function ClientTitle() {
return Widget.Label({
class_name: "client-title",
label: hyprland.active.client.bind("title"),
})
}
function Clock() {
return Widget.Label({
class_name: "clock",
label: date.bind(),
})
}
// we don't need dunst or any other notification daemon
// because the Notifications module is a notification daemon itself
function Notification() {
const popups = notifications.bind("popups")
return Widget.Box({
class_name: "notification",
visible: popups.as(p => p.length > 0),
children: [
Widget.Icon({
icon: "preferences-system-notifications-symbolic",
}),
Widget.Label({
label: popups.as(p => p[0]?.summary || ""),
}),
],
})
}
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({
spacing: 8,
children: [
Workspaces(),
ClientTitle(),
],
})
}
function Center() {
return Widget.Box({
spacing: 8,
children: [
Media(),
Notification(),
],
})
}
function Right() {
return Widget.Box({
hpack: "end",
spacing: 8,
children: [
Volume(),
BatteryLabel(),
Clock(),
SysTray(),
],
})
}
function Bar(monitor = 0) {
return Widget.Window({
name: `bar-${monitor}`, // name has to be unique
class_name: "bar",
monitor,
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(),
// you can call it, for each monitor
// Bar(0),
// Bar(1)
],
})
export { }
-16
View File
@@ -1,16 +0,0 @@
{
imports = [
./kitty.nix
./qt.nix
./sops.nix
./neofetch.nix
./syncthing.nix
./yazi.nix
./ags.nix
./zsh.nix
./helix.nix
./wms/wofi.nix
./wms/mako.nix
];
}
-14
View File
@@ -1,14 +0,0 @@
{ lib, pkgs, ... }: {
programs.kitty = {
enable = true;
settings = lib.mkDefault {
dynamic_background_opacity = "yes";
background_opacity = 0.5;
background_blur = true;
background = "#1d2021";
font_size = 13.0;
cursor_blink_interval = "0.5 ease-in-out";
};
};
programs.zsh.envExtra = "TERM=xterm-256color";
}
-3
View File
@@ -1,3 +0,0 @@
{
services.syncthing.enable = true;
}
-56
View File
@@ -1,56 +0,0 @@
{ pkgs, lib, ... }: let
yazi-plugins = pkgs.fetchFromGitHub {
owner = "yazi-rs";
repo = "plugins";
rev = "c5785059611624e20a37ba573620f30acc28a26a";
hash = "sha256-wlSBtabIsEUJhuHmXwgpSnwZp9WaVQFBg6s1XXjubrE=";
};
in {
programs.yazi = {
enable = true;
enableZshIntegration = true;
shellWrapperName = "y";
settings = {
manager = {
show_hidden = true;
};
preview = {
max_width = 1000;
max_height = 1000;
};
};
plugins = {
chmod = "${yazi-plugins}/chmod.yazi";
full-border = "${yazi-plugins}/full-border.yazi";
max-preview = "${yazi-plugins}/max-preview.yazi";
starship = pkgs.fetchFromGitHub {
owner = "Rolv-Apneseth";
repo = "starship.yazi";
rev = "77a65f5a367f833ad5e6687261494044006de9c3";
sha256 = "sha256-sAB0958lLNqqwkpucRsUqLHFV/PJYoJL2lHFtfHDZF8=";
};
};
initLua = ''
require("full-border"):setup()
require("starship"):setup()
'';
keymap = {
manager.prepend_keymap = [
{
on = "T";
run = "plugin --sync max-preview";
desc = "Maximize or restore the preview pane";
}
{
on = ["c" "m"];
run = "plugin chmod";
desc = "Chmod on selected files";
}
];
};
};
}
-5
View File
@@ -1,5 +0,0 @@
{ pkgs-stable, ... }: {
home.packages = with pkgs-stable; [
(blender.override { cudaSupport = true; })
];
}
-17
View File
@@ -1,17 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
vscode
jetbrains.pycharm-community
jetbrains.idea-community
android-studio
cmake
gnumake
nodejs
(python3.withPackages (ps: with ps; [ requests bpython ]))
python311Packages.pip
rocmPackages.llvm.clang-tools-extra
rocmPackages.llvm.clang
ncurses
];
}
-11
View File
@@ -1,11 +0,0 @@
{ pkgs, inputs, ... }: {
home.packages = with pkgs; [
google-chrome
inputs.ayugram-desktop.packages.${pkgs.system}.ayugram-desktop
vesktop
obs-studio
mpv
obsidian
thunderbird
];
}
-14
View File
@@ -1,14 +0,0 @@
{ pkgs, inputs, ... }: {
home.packages = with pkgs; [
scrot
ffmpeg
yt-dlp
bat
fd
feh
imv
gromit-mpx
notify-desktop
inputs.tlock.packages.${system}.default
];
}
-455
View File
@@ -1,455 +0,0 @@
{ pkgs, config, active_color }: {
home.packages = [ pkgs.pulsemixer ];
wayland.windowManager.hyprland.settings.windowrule = [
"float, ^(pulsemixer)"
"float, ^(nmtui)"
];
xdg.configFile."waybar/scripts/wttr.py".source = pkgs.fetchurl {
name = "waybar-wttr.py";
url = "https://gist.githubusercontent.com/bjesus/f8db49e1434433f78e5200dc403d58a3/raw/47f9ffd573dc8e8edce0ea6708601b8e685a70ab/waybar-wttr.py";
sha256 = "15j2cqg405q37wrrlm70mhp7rx6xnrn92rfm1ix6g3nl98ksh45g";
};
programs.waybar =
let
colors = config.lib.stylix.colors;
in {
enable = true;
settings = {
mainBar = {
layer = "top";
position = "top";
margin = "9 13 -10 18";
modules-left = ["hyprland/workspaces" "hyprland/language" "keyboard-state" "hyprland/submap"];
modules-center = ["mpris" "wlr/taskbar"];
modules-right = ["group/system" "battery" "pulseaudio" "clock" "tray"];
"hyprland/workspaces" = {
disable-scroll = true;
};
"wlr/taskbar" = {
on-click = "activate";
on-click-middle = "close";
on-click-right = "minimize";
};
"group/system" = {
orientation = "inherit";
drawer = {
transition-duration = 500;
transition-left-to-right = false;
};
modules = [
"network"
"custom/mem"
"cpu"
"temperature"
"backlight"
];
};
"hyprland/language" = {
format-en = "US";
format-ru = "RU";
min-length = 5;
tooltip = false;
};
"keyboard-state" = {
capslock = true;
format = "{icon}";
format-icons = {
locked = "CUPS";
unlocked = "";
};
};
"clock" = {
tooltip = false;
format = "{:%a, %d %b %R}";
};
"custom/weather" = {
format = "{}";
tooltip = true;
interval = 1800;
exec = "python3 $HOME/.config/waybar/scripts/wttr.py";
return-type = "json";
};
"pulseaudio" = {
# scroll-step = 1; # %, can be a float
reverse-scrolling = 1;
format = "{volume}% {icon} {format_source}";
format-bluetooth = "{volume}% {icon} {format_source}";
format-bluetooth-muted = " {icon} {format_source}";
format-muted = " {format_source}";
format-source = "{volume}% ";
format-source-muted = "";
format-icons = {
headphone = "";
hands-free = "";
headset = "";
phone = "";
portable = "";
car = "";
default = ["" "" ""];
};
on-click = "kitty --class pulsemixer -e pulsemixer";
min-length = 13;
};
"custom/mem" = {
format = "{} ";
interval = 3;
exec = "free -h | awk '/Mem:/{printf $3}'";
tooltip = false;
};
"cpu" = {
interval = 2;
format = "{usage}% ";
min-length = 6;
};
"temperature" = {
# thermal-zone = 2;
# hwmon-path = "/sys/class/hwmon/hwmon2/temp1_input";
critical-threshold = 80;
# format-critical = "{temperatureC}°C {icon}";
format = "{temperatureC}°C {icon}";
format-icons = ["" "" "" "" ""];
tooltip = false;
};
"network" = {
format = "{ifname}";
format-wifi = "{essid} ({signalStrength}%) ";
format-ethernet = "{ifname} ";
format-disconnected = "";
tooltip-format = "{ifname}";
tooltip-format-wifi = "{essid} ({signalStrength}%) ";
tooltip-format-ethernet = "{ifname} ";
tooltip-format-disconnected = "Disconnected";
max-length = 50;
on-click = "kitty --class nmtui -e sh -c nmtui";
};
"backlight" = {
device = "intel_backlight";
format = "{percent}% {icon}";
format-icons = [""];
min-length = 7;
};
battery = {
states = {
warning = 30;
critical = 15;
};
format = "{capacity}%";
format-charging = "{capacity}% {time}";
format-plugged = "{capacity}%";
format-alt = "{time}";
format-time = "{H}:{m}";
};
mpris = {
format = "{title}";
format-len = "20";
};
tray = {
icon-size = 16;
spacing = 0;
};
};
};
style = /*css*/
''
* {
border: none;
border-radius: 0;
/* `otf-font-awesome` is required to be installed for icons */
font-family: JetBrains Mono;
font-weight: bold;
min-height: 20px;
}
window#waybar {
background: transparent;
}
window#waybar.hidden {
opacity: 0.2;
}
#workspaces {
margin-right: 8px;
border-radius: 10px;
transition: none;
background: #${colors.base00};
}
#workspaces button {
transition: none;
color: #${colors.base04};
background: transparent;
padding: 5px;
font-size: 18px;
}
#workspaces button.persistent {
font-size: 12px;
}
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
#workspaces button:hover {
transition: none;
box-shadow: inherit;
text-shadow: inherit;
border-radius: inherit;
color: #${colors.base05};
}
#workspaces button.active {
background: #${colors.base02};
color: #${colors.base05};
border-radius: inherit;
}
#taskbar {
border-radius: 10px;
color: #${colors.base05};
background: #${colors.base00};
}
#taskbar button {
transition: none;
background: transparent;
border-radius: 10px;
padding: 8px;
margin: 0px;
}
#taskbar button:hover {
transition: none;
box-shadow: inherit;
text-shadow: inherit;
border-radius: inherit;
background: #${colors.base02};
}
#taskbar button.active {
background: ${active_color};
}
#language {
padding: 8px 0px 8px 8px;
border-radius: 10px 0px 0px 10px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#keyboard-state {
margin-right: 8px;
padding: 8px 8px 8px 0px;
border-radius: 0px 10px 10px 0px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#custom-pacman {
padding-left: 16px;
padding-right: 8px;
border-radius: 10px 0px 0px 10px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#custom-mail {
margin-right: 8px;
padding-right: 16px;
border-radius: 0px 10px 10px 0px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#submap {
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#clock {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#network {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#network.disconnected {
color: #${colors.base00};
background-color: #${colors.base08};
}
#custom-weather {
padding-right: 16px;
border-radius: 0px 10px 10px 0px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#pulseaudio {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#pulseaudio.muted {
background-color: #${colors.base08};
color: #${colors.base01};
}
#custom-mem {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#cpu {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#temperature {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#temperature.critical {
background-color: #${colors.base08};
}
#backlight {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#battery {
margin-right: 8px;
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#battery.charging {
color: #${colors.base05};
background-color: #${colors.base0B};
}
#battery.warning:not(.charging) {
background-color: #${colors.base09};
color: black;
}
#battery.critical:not(.charging) {
background-color: #${colors.base08};
color: #${colors.base05};
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#tray {
padding-left: 16px;
padding-right: 16px;
border-radius: 10px;
transition: none;
color: #${colors.base05};
background: #${colors.base00};
}
#mpris{
background: #${colors.base00};
border-radius: 10px;
color: #${colors.base05};
padding: 0px 8px;
margin: 0px 8px;
}
#mpris.playing {
background-color: #${colors.base0B};
color: #${colors.base01};
}
#mpris.paused {
background-color: #${colors.base0A};
color: #${colors.base01};
}
@keyframes blink {
to {
background-color: #${colors.base05};
color: #${colors.base00};
}
}
'';
};
}
-26
View File
@@ -1,26 +0,0 @@
{ pkgs, ... }: {
imports = [
../../modules/bundle.nix
../../packages/desktop.nix
../../packages/art.nix
./modules/aagl.nix
./modules/git.nix
./modules/hyprland.nix
./modules/style.nix
./modules/waybar.nix
];
nixpkgs.config.allowUnfree = true;
home = {
username = "chest";
homeDirectory = "/home/chest";
stateVersion = "23.11";
packages = with pkgs; [
nautilus
];
};
}
-11
View File
@@ -1,11 +0,0 @@
let
aagl-gtk-on-nix = import (
builtins.fetchTarball {
url = "https://github.com/ezKEa/aagl-gtk-on-nix/archive/main.tar.gz";
sha256 = "14fnbcvmr1b8jkkjfbyarljwawgh3as9skdyvyc10b1nqh0641h0";
}
);
in
{
home.packages = [ aagl-gtk-on-nix.the-honkers-railway-launcher ];
}
-7
View File
@@ -1,7 +0,0 @@
{
programs.git = {
enable = true;
userName = "cheeest";
userEmail = "a.e.sunduk@gmail.com";
};
}
@@ -1,35 +0,0 @@
{ pkgs, config, lib, ... }: {
stylix = {
enable = true;
targets = {
hyprland.enable = false;
waybar.enable = false;
kitty.variant256Colors = true;
};
base16Scheme = "${pkgs.base16-schemes}/share/themes/eris.yaml";
polarity = "dark";
image = pkgs.fetchurl {
url = "https://w.wallhaven.cc/full/kx/wallhaven-kxedr7.jpg";
sha256 = "0ypqnq7bsr2giq7nq1c3xrw2m0gkii9j5zhfp512r93wc96zvm50";
};
fonts = {
monospace = {
name = "JetBrains Mono";
package = pkgs.jetbrains-mono;
};
sizes = {
applications = 13;
desktop = 12;
};
};
opacity = {
popups = .8;
terminal = .5;
};
};
}
@@ -1,9 +0,0 @@
{ pkgs, config, ... }: {
imports = [(
import ../../../patterns/waybar.nix {
inherit pkgs;
inherit config;
active_color = "#d197d9";
}
)];
}
-26
View File
@@ -1,26 +0,0 @@
{ pkgs, ... }: {
imports = [
../../modules/bundle.nix
../../modules/hyprlock.nix
../../packages/coding.nix
../../packages/desktop.nix
../../packages/utils.nix
../../packages/art.nix
./modules/git.nix
./modules/hyprland.nix
./modules/style.nix
./modules/waybar.nix
];
nixpkgs.config.allowUnfree = true;
home = {
username = "sweetbread";
homeDirectory = "/home/sweetbread";
stateVersion = "23.11";
};
services.syncthing.enable = true;
}
@@ -1,7 +0,0 @@
{
programs.git = {
enable = true;
userName = "Sweetbread";
userEmail = "sweetbread@coders-squad.com";
};
}
@@ -1,97 +0,0 @@
{ pkgs, lib, config, inputs, ... }: {
imports = [(
import ../../../patterns/hyprland.nix {
inherit lib;
inherit pkgs;
inherit config;
inherit inputs;
collection = "sweetbread/1764377";
swww_flags = "--transition-type center";
}
)];
wayland.windowManager.hyprland = let
colors = config.lib.stylix.colors;
in {
settings = {
monitor = [
"DP-3, 3440x1440@165.00Hz, auto-right, 1"
# "HDMI-A-1, 3840x2160@60.00Hz, auto-left, 2"
"HDMI-A-1, disabled"
",preferred,auto,1"
];
general = {
gaps_in = 5;
gaps_out = 20;
border_size = 3;
"col.active_border" = "rgba(${colors.base0C}ee) rgba(${colors.base0B}ee) 45deg";
"col.inactive_border" = "rgba(${colors.base05}aa)";
layout = "dwindle";
};
decoration = {
rounding = 10;
blur = {
enabled = true;
size = 16;
passes = 2;
new_optimizations = true;
};
shadow = {
enabled = true;
range = 4;
render_power = 3;
color = "rgba(1a1a1aee)";
};
};
animations = {
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
dwindle = {
pseudotile = true;
smart_split = true;
};
master.new_status = "master";
gestures = {
workspace_swipe = true;
workspace_swipe_fingers = 3;
workspace_swipe_invert = true;
workspace_swipe_distance = 200;
workspace_swipe_forever = true;
};
misc = {
animate_manual_resizes = true;
animate_mouse_windowdragging = true;
enable_swallow = true;
render_ahead_of_time = false;
disable_hyprland_logo = false;
};
bind = [
" , Print, exec, grimblast --notify --freeze copy output"
"CTRL, Print, exec, grimblast --notify --freeze copy area"
"ALT , Print, exec, grimblast --notify --freeze copy active"
];
};
};
}
@@ -1,40 +0,0 @@
{ pkgs, config, lib, ... }: {
stylix = {
enable = true;
targets = {
hyprland.enable = false;
waybar.enable = false;
kitty.variant256Colors = true;
};
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
polarity = "dark";
image = pkgs.fetchurl {
url = "https://w.wallhaven.cc/full/kx/wallhaven-kxedr7.jpg";
sha256 = "0ypqnq7bsr2giq7nq1c3xrw2m0gkii9j5zhfp512r93wc96zvm50";
};
fonts = {
monospace = {
name = "JetBrains Mono";
package = pkgs.jetbrains-mono;
};
serif = {
name = "Gabriela";
package = (pkgs.google-fonts.override { fonts = [ "Gabriela" ]; });
};
sizes = {
applications = 13;
desktop = 12;
};
};
opacity = {
popups = .8;
terminal = .75;
};
};
}
@@ -1,9 +0,0 @@
{ pkgs, config, ... }: {
imports = [(
import ../../../patterns/waybar.nix {
inherit pkgs;
inherit config;
active_color = "#${config.lib.stylix.colors.base0B}";
}
)];
}
+35
View File
@@ -0,0 +1,35 @@
{ config, pkgs, pkgs-unstable, pkgs-fixed, lib, inputs, ...}: let
laptop = false;
in {
imports = [
./secrets/secrets.nix
./modules/aagl.nix
./modules/grub.nix
./modules/zram.nix
../modules/gpu/nvidia.nix
(import ../modules/common.nix {
inherit lib;
inherit inputs;
hostname = "Eclipse";
})
(import ../../user/common.nix {
inherit config;
inherit pkgs;
inherit pkgs-unstable;
inherit pkgs-fixed;
inherit lib;
inherit inputs;
inherit laptop;
name = "chest";
})
];
nixpkgs.config.allowBroken = true;
programs.gamemode.enable = true;
services.printing.enable = true;
virtualisation.virtualbox.host.enable = true;
users.extraGroups.vboxusers.members = [ "chest" ];
}
@@ -13,21 +13,27 @@
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/34e32809-6876-4361-95d8-70a479ea8e19";
fileSystems."/" = {
device = "/dev/disk/by-label/NixOS";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/2B65-0D2E";
fileSystems."/boot" = {
device = "/dev/disk/by-partlabel/EFI\\x20system\\x20partition";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
options = [ "fmask=0022" "dmask=0022" "nofail" ];
};
fileSystems."/mnt/D" = {
device = "/dev/disk/by-uuid/E030A4DF30A4BDC2";
fsType = "ntfs";
options = ["umask=0022" "gid=100" "uid=1002"];
options = ["umask=0022" "gid=100" "uid=1000" "nofail" ];
};
fileSystems."/mnt/F" = {
device = "/dev/disk/by-uuid/1C6278FC2848E1EF";
fsType = "ntfs";
options = ["umask=0022" "gid=100" "uid=1000" "nofail" ];
};
swapDevices = [ ];
+30
View File
@@ -0,0 +1,30 @@
{ inputs, ... }: {
imports = [ inputs.aagl.nixosModules.default ];
nix.settings = inputs.aagl.nixConfig; # Set up Cachix
programs.honkers-railway-launcher.enable = true;
programs.sleepy-launcher.enable = true;
networking.hosts."0.0.0.0" = [
"overseauspider.yuanshen.com"
"log-upload-os.hoyoverse.com"
"log-upload-os.mihoyo.com"
"dump.gamesafe.qq.com"
"apm-log-upload-os.hoyoverse.com"
"zzz-log-upload-os.hoyoverse.com"
"log-upload.mihoyo.com"
"devlog-upload.mihoyo.com"
"uspider.yuanshen.com"
"sg-public-data-api.hoyoverse.com"
"hkrpg-log-upload-os.hoyoverse.com"
"public-data-api.mihoyo.com"
"prd-lender.cdp.internal.unity3d.com"
"thind-prd-knob.data.ie.unity3d.com"
"thind-gke-usc.prd.data.corp.unity3d.com"
"cdp.cloud.unity3d.com"
"remote-config-proxy-prd.uca.cloud.unity3d.com"
"pc.crashsight.wetest.net"
];
}
+19
View File
@@ -0,0 +1,19 @@
{
wayland.windowManager.hyprland = {
settings = {
monitor = [
"DP-3 , 1920x1080@165, 0x0 , 1"
"HDMI-A-1, preferred , -1080x0, 1, transform, 1"
];
workspace = [
"1, monitor:DP-3, default:true"
"10, monitor:HDMI-A-1, default:true"
];
exec-once = [
"hyprctl dispatch workspace 1"
];
};
};
}
@@ -2,7 +2,7 @@
zramSwap = {
enable = true;
algorithm = "lz4";
memoryPercent = 100;
memoryPercent = 125;
priority = 999;
};
}
File diff suppressed because one or more lines are too long
+31
View File
@@ -0,0 +1,31 @@
{ config, pkgs, pkgs-unstable, pkgs-fixed, lib, inputs, ...}: let
laptop = true;
in {
imports = [
./secrets/secrets.nix
./modules/grub.nix
../modules/gpu/intel.nix
(import ../modules/common.nix {
inherit lib;
inherit inputs;
hostname = "Impreza";
})
(import ../../user/common.nix {
inherit config;
inherit pkgs;
inherit pkgs-unstable;
inherit pkgs-fixed;
inherit lib;
inherit inputs;
inherit laptop;
name = "chest";
})
];
nixpkgs.config.allowBroken = true;
programs.gamemode.enable = true;
hardware.bluetooth.enable = true;
host.laptop = laptop;
}
+46
View File
@@ -0,0 +1,46 @@
# Do not modify this file! It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/31247de4-e9c0-4690-8bce-8380377b6872";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/328A-299C";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
fileSystems."/mnt/Windows" =
{ device = "/dev/disk/by-uuid/84E48B00E48AF428";
fsType = "ntfs";
options = [ "umask=0022" "gid=100" "uid=1000" "nofail" ];
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
boot.loader.grub.useOSProber = true;
}
+13
View File
@@ -0,0 +1,13 @@
{ pkgs, ... }: let
theme = pkgs.fetchFromGitHub {
owner = "OliveThePuffin";
repo = "yorha-grub-theme";
rev = "4d9cd37baf56c4f5510cc4ff61be278f11077c81";
hash = "sha256-XVzYDwJM7Q9DvdF4ZOqayjiYpasUeMhAWWcXtnhJ0WQ=";
};
in {
boot.loader.grub = {
gfxmodeEfi = "1920x1080";
theme = "${theme}/yorha-1920x1080";
};
}
+1
View File
@@ -0,0 +1 @@
../Eclipse/secrets
+33
View File
@@ -0,0 +1,33 @@
{ config, pkgs, pkgs-unstable, pkgs-fixed, lib, inputs, ...}: let
laptop = false;
in {
imports = [
./secrets/secrets.nix
./modules/grub.nix
./modules/syncthing.nix
../../modules/host/adb.nix
../modules/gpu/nvidia.nix
(import ../modules/common.nix {
inherit lib;
inherit inputs;
hostname = "Rias";
})
(import ../../user/common.nix {
inherit config;
inherit pkgs;
inherit pkgs-unstable;
inherit pkgs-fixed;
inherit lib;
inherit inputs;
inherit laptop;
name = "sweetbread";
fullname = "Sweet Bread";
})
];
programs.gamemode.enable = true;
services.printing.enable = true;
hardware.opentabletdriver.enable = true;
}
+44
View File
@@ -0,0 +1,44 @@
{ pkgs, lib, ...}: {
wayland.windowManager.hyprland = let
monitor-switcher = pkgs.writers.writeBashBin "monitor_switcher" /*bash*/ ''
MODE=$1
case $MODE in
"tv")
hyprctl keyword monitor "DP-3, 1920x1080@60, 3840x0, 1"
hyprctl keyword monitor "HDMI-A-1, 3840x2160@60, 0x0, 1"
notify-send "TV mode"
;;
"mirror")
hyprctl keyword monitor "HDMI-A-1, 3840x2160@60, 0x0, 1"
hyprctl keyword monitor "DP-3, preferred, auto, 1, mirror, HDMI-A-1"
notify-send "TV-only mode"
;;
"display"|*)
hyprctl keyword monitor "HDMI-A-1, disable"
hyprctl keyword monitor "DP-3, 3440x1440@165, 0x0, 1"
notify-send "Display mode"
;;
esac
'';
in {
settings = {
monitor = [
"DP-3, 3440x1440@165, auto-right, 1"
# "HDMI-A-1, 3840x2160@60, auto-left, 2"
"HDMI-A-1, disabled"
];
bind = [
'', XF86Calculator, exec, ghostty --title=pulsemixer -e pulsemixer''
''$mainMod, F1, exec, ${lib.getExe monitor-switcher} tv''
''$mainMod, F2, exec, ${lib.getExe monitor-switcher} mirror''
''$mainMod, F3, exec, ${lib.getExe monitor-switcher}''
];
};
};
}
+43
View File
@@ -0,0 +1,43 @@
{ config, ... }: {
services.syncthing = {
enable = true;
openDefaultPorts = true;
user = "sweetbread";
dataDir = "/home/sweetbread/.config/syncthing";
key = config.sops.secrets.syncthing_key.path;
cert = config.sops.secrets.syncthing_cert.path;
settings = {
devices = {
Akeno = { id = "QDW3WJX-J7ETS4R-32CUAIY-EGNM2RD-ZEHOUW2-CHOEOUG-USZOWTR-HHQS2QX"; };
Koneko = { id = "PJFWQRY-ZFUBGDR-NV7KVBL-UBDQ4HT-KPTYP34-MUDFPJU-4EZUHTT-ZLYRMAB"; };
};
folders = {
"Books" = {
path = "/mnt/D/SyncThing/Books";
devices = [ "Akeno" "Koneko" ];
};
".RPI" = {
path = "/mnt/D/SyncThing/.RPI";
devices = [ "Akeno" "Koneko" ];
};
"JoiPlay" = {
path = "/mnt/D/SyncThing/JoiPlay";
devices = [ "Akeno" ];
};
"Music" = {
path = "/home/sweetbread/Music";
devices = [ "Akeno" "Koneko" ];
};
};
};
};
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true";
}
+20
View File
@@ -0,0 +1,20 @@
{
sops = {
age.keyFile = "/root/age.key";
secrets = {
vpn_bolt = {
format = "binary";
sopsFile = ./vpn_bolt.db;
};
syncthing_cert = {
format = "binary";
sopsFile = ./syncthing_cert.pem;
};
syncthing_key = {
format = "binary";
sopsFile = ./syncthing_key.pem;
};
};
};
}
+20
View File
@@ -0,0 +1,20 @@
{
"data": "ENC[AES256_GCM,data:FrQVoWDaUZUh8OfSjJ4f1TsPutY6PyMTIPYgWfG1wg/t8orJC52QsoZEabj46tIcLDSJaGSETf3lvCXnmesFAeqUuMK4axAcqPSBRd+kSoCSg/KzHdkQD5C4JiYWUWdIdvMYMUz086mFiHSyyzvbPYCAKrWYtQsQcJPEYmuvQl/0vFPjquR9Mla+/89MXebWBSGys43PKzQUfWjgrLmR7v2ac7lbRxnhBNP/eGayM4auzZVCtLV0UBs3TS5GTPSKAcQeAmmHbzdRJg8vVM1deKv9s/Tjy3ygRthqjCuVF2xcLetb2SDhYKMcgZRXT+AtnEyiV72wxqaExtWsUjJvR8b7COsFpBWbXT+AY+FkSKaGz00DaXncBKSP/zmiUYyaMplvQESFlIpduzF/DRuyQrq+KAwnJZql0rlvfzcEYgQKJENeQwHAq8Itu+HcHzmCEbY4d+LvEznEwlQ6eL6y3tNzoWzfhRQUz4Ki+54DPLGlGtOe9dTM8cWHtl/mZniNzY6FXNiEqbHrepzq7WEXSPi69Hj2OfdvSTQX4HMnp5Tw0i95zhfHDmzp62Kr6YLj0KYZsj6gsC3/6SYB0YNn5pMo1IpBonJxyKeAUz9NvrMcy1/7z/h9OOejPPM3xm48XJ4/7mMhOyB13VPYMZZMUajqUgu2qdGgDxl+DY140LAoQ8bRs3wvTwCwZuCA9Fj4gtn4+04EIil+lPjwEYH/2VIX4MmhxlyxZ2ECAqWf9LJgRy+3asvE8qPxmXNLSd1JqThAYoezJOZf6T5blzOwaXKzmom1hAtkptVjz+fvudwSZQcMOBnrSI1lkWeaeTFvQQOe4jUhaRB83NfbSpm6CFhqHJKjDorP6L5zwOx663YyJcZB2sAcotKGzDi3lQqfh8HGmrGLnc1+J+d9L7NbccgsfWYzfk04tqwv6WI+rpXqR0HlLyg+SDjtl49tuC1c6U9atNKPpyuqWHW2DiM8dgERmJfNz8OGjK2mnU7onGeUyrBvXrIcfe+z/fuymzJ5eHnU3VfMxz9Py97AK7M7KN/tRhR7Grx6Sqs=,iv:imkydsFKhiTrqyi1rXidCLCDGtL8RuY6ZiiiHyMFeAg=,tag:HwvqV4xt0nQZb1El+XrO+w==,type:str]",
"sops": {
"kms": null,
"gcp_kms": null,
"azure_kv": null,
"hc_vault": null,
"age": [
{
"recipient": "age1j3uuyax673fvl5x4dveupq3dylngnrq0e5uy7fmclsexkfd25vysk646wk",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5TGk2MWdnZzc3UVZ2Ui9w\nVWgxcFJDUThhM0pDbVR1ZXd6U3BhLzM0U1ZNClJpaHlCdU9mTURKSzdSbE52SFR6\ncUdzVkJ2MElNUHg3UzJHc0tNb3dJamMKLS0tIGErZXJGOXFLUCt1SG93aW01aEEw\nTmNiN1VUUUp2TWlKTlpDWDVwVUk2VjgKpUD72/hlXLEzciW/kewu0hZanGA8+Gfh\ndCro8OOJaOe2INCrioOL9kMZvdpxq96fw+kir1FkkJBkepJgcdCTgA==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2024-12-17T12:28:22Z",
"mac": "ENC[AES256_GCM,data:n4Bj/FaPaN+IyVXz8Bmu+tfuULxcJpDnAiYhGawMhbfFCL2tGFVi7G0WdnopdSrZV++9iZnb4z5a/al1WbmIIy/iJS7v2EKNzK08U9xdJDKgEQKXJms/df13f/FRDxV3nfCHX8UBtSJNdcXBY5O77o+VUUcjkpbzVrwWjAaMcOk=,iv:5z25Ereng1O47fk8w4OA52Gk4CAqW2Ot97Cp7UR0zqw=,tag:h9WL5ESZwd9BCa7bbUahOg==,type:str]",
"pgp": null,
"unencrypted_suffix": "_unencrypted",
"version": "3.9.1"
}
}
+20
View File
@@ -0,0 +1,20 @@
{
"data": "ENC[AES256_GCM,data:6VJ1TgANh3bVkWEsPFQYFLjdrbsggQ3mCOpLWIo7Q9hCxsUeI0sL4npsXAVoEfTndWkv1zBgzVjzw+KcY8IDu27uTwguPrPk/R0T1aAa1Y8LEoOVmqZVw6GxiiqEYVcbOERkSi3kFSocynzFljDAqPnaYUVoAkB9mFPtO5KeXMjKXMtkJhcFjPkIzLzcHHBEeVUynn4utQaKspj6xVWc+NX/+G+Oh4kfm4RJyD/v5WEWQh2bFtiVwLhgRNiw210SuFZJqst8SoAXjG3LivpAJXapnn1xC3t8Vn4RXHC+JVl/7amDkGY+GOK+k68ou0TS+dWMAEZhiVWsOToeb4C5wPbvDADNRFx78HORsKprAcPgOvYkvaDX+A242KVz4w9j,iv:uD6GkozkTM4mP0jfQ9+oNN4o/kMiscYbggF0Lgum3Wk=,tag:CHO2KBgWnRQ9zvYC4br38A==,type:str]",
"sops": {
"kms": null,
"gcp_kms": null,
"azure_kv": null,
"hc_vault": null,
"age": [
{
"recipient": "age1j3uuyax673fvl5x4dveupq3dylngnrq0e5uy7fmclsexkfd25vysk646wk",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3di9JS0g0cUFxK1cwSkU3\nTmdHRW5NTjQzWWtSR2xYUnlEOG1va3BhY3k0CnRrZkRydGQ0SkczVTB0TkRDejVt\nS0NweDBuNDErNUVjazRTQ1RFYks4NWcKLS0tIGRPL1Z1aWNyS0FBSnZhZWFCWHBS\nVzhLYUdkNWhyVEx2aGtuWGZHM3J2Uk0KrZsGNRPlUB02xJvNeD3VFbRIVAL8bnei\nxS/mwnx6V2o+yJX7RHEj7D466L6zzm0CtDaz7PT4vyJxDBjpRuMBhg==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2024-12-17T12:28:38Z",
"mac": "ENC[AES256_GCM,data:g/WhHfiukviJDExEsVFo4JOkVayeZEZpexmEvUn2IOGQ13qTD1rVakR/0cF/XowxsiCBwicn5Fc5FRFe696MBzIyetNNt75jWKC/tasWGk5khrQI6Jwj3kt1nmsQmdahQ4shmjfiLmeELy8fGBe7ASCvu+gZCEfg8OaZRRxmh/E=,iv:S1FlplJsJcsv4Cm8AOYfW15rFE7a5bcUBej7hp6tnNI=,tag:AdgkSbl5ikGnpvG9Z4D9Sg==,type:str]",
"pgp": null,
"unencrypted_suffix": "_unencrypted",
"version": "3.9.1"
}
}
File diff suppressed because one or more lines are too long
+32
View File
@@ -0,0 +1,32 @@
{ config, pkgs, pkgs-unstable, pkgs-fixed, lib, inputs, ...}: let
laptop = true;
in {
imports = [
./secrets/secrets.nix
./modules/grub.nix
../modules/gpu/nvidia.nix
(import ../modules/common.nix {
inherit lib;
inherit inputs;
hostname = "Senko";
})
(import ../../user/common.nix {
inherit config;
inherit pkgs;
inherit pkgs-unstable;
inherit pkgs-fixed;
inherit lib;
inherit inputs;
inherit laptop;
name = "sweetbread";
fullname = "Sweet Bread";
})
];
hardware.bluetooth.enable = true;
host.laptop = laptop;
environment.systemPackages = [ pkgs.dbgate ];
}
@@ -17,7 +17,7 @@
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/D706-818C";
device = "/dev/disk/by-partlabel/EFI";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" "nofail" ];
};
+13
View File
@@ -0,0 +1,13 @@
{ pkgs, ... }: let
theme = pkgs.fetchFromGitHub {
owner = "Patato777";
repo = "dotfiles";
rev = "cc363921707807d7ad3e36b462f0df793a0fe18a";
hash = "sha256-fpXGFNrzbV6K9hoZRX4tGieTLzhpPeGm6wn8CF4OGow=";
};
in {
boot.loader.grub = {
gfxmodeEfi = "1920x1080";
theme = "${theme}/grub/themes/virtuaverse";
};
}
+9
View File
@@ -0,0 +1,9 @@
{
wayland.windowManager.hyprland = {
settings = {
monitor = [
"eDP-1, 1920x1080@60, 0x0, 1"
];
};
};
}
+11
View File
@@ -0,0 +1,11 @@
{
sops = {
age.keyFile = "/root/age.key";
secrets = {
vpn_bolt = {
format = "binary";
sopsFile = ./vpn_bolt.db;
};
};
};
}
+1
View File
@@ -0,0 +1 @@
../../Rias/secrets/vpn_bolt.db
+20
View File
@@ -0,0 +1,20 @@
{ lib, inputs, hostname }: {
imports = [
inputs.sops-nix.nixosModules.sops
../${hostname}/hardware-configuration.nix
../../modules/host.nix
./packages.nix
];
options = {
host.laptop = lib.mkEnableOption "laptop mode";
};
config = {
networking.hostName = hostname;
time.timeZone = lib.mkDefault "Europe/Moscow";
i18n.defaultLocale = lib.mkDefault "ru_RU.UTF-8";
nix.settings.experimental-features = [ "nix-command" "flakes" ];
system.stateVersion = "23.05";
};
}
+26
View File
@@ -0,0 +1,26 @@
{ config, pkgs, ... }:
{
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
intel-media-driver
intel-compute-runtime
libvdpau-va-gl
];
extraPackages32 = with pkgs.pkgsi686Linux; [
intel-media-driver
];
};
nixpkgs.config.packageOverrides = pkgs: {
vaapiIntel = pkgs.vaapiIntel.override { enableHybridCodec = true; };
};
environment.systemPackages = with pkgs; [
intel-gpu-tools
libva-utils
clinfo
];
boot.kernelParams = [ "i915.force_probe=*" ];
}
+44
View File
@@ -0,0 +1,44 @@
{ config, pkgs, lib, ... }: {
boot.kernelParams = [ "nvidia-drm.modeset=1" ];
services.xserver.videoDrivers = [ "nvidia" ];
hardware = {
graphics = {
enable = true;
enable32Bit = true;
extraPackages = with pkgs; [
nvidia-vaapi-driver
intel-media-driver
libvdpau-va-gl
];
extraPackages32 = with pkgs.pkgsi686Linux; [nvidia-vaapi-driver intel-media-driver];
};
nvidia = {
modesetting.enable = true;
powerManagement = {
enable = true;
finegrained = false;
};
open = false;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable;
prime = lib.optionalAttrs config.host.laptop {
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0";
};
};
};
environment.sessionVariables = {
WLR_NO_HARDWARE_CURSORS = 1;
WLR_DRM_NO_ATOMIC = 1;
GBM_BACKEND = "nvidia-drm";
LIBVA_DRIVER_NAME = "nvidia";
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
__GL_VRR_ALLOWED = 1;
ELECTRON_OZONE_PLATFORM_HINT = "auto";
NIXOS_OZONE_WL = 1;
};
}
+30
View File
@@ -0,0 +1,30 @@
{ pkgs-unstable, inputs, ... }: {
nixpkgs.config.allowUnfree = true;
environment.systemPackages = with pkgs-unstable; [
file
tree
wget
git
(btop.override { cudaSupport = true; })
unzip
yazi
zip
lazygit
httpie
ncdu
tldr
helix
pinentry-gnome3
];
fonts = {
enableDefaultPackages = false;
packages = with pkgs-unstable; [
jetbrains-mono # Best mono font
noto-fonts-cjk-sans # Japanese
powerline-symbols # Console decoration
unifont # Other
];
};
}
+26
View File
@@ -0,0 +1,26 @@
{
imports = [
./host/bluetooth.nix
./host/bootloader.nix
./host/console.nix
./host/db.nix
./host/env.nix
./host/gamemode.nix
./host/gpg.nix
./host/laptop.nix
./host/printing.nix
./host/shutdown-on-lan.nix
./host/sound.nix
./host/virtmanager.nix
./host/vpn.nix
./host/network.nix
./host/yggdrasil.nix
];
programs.hyprland.enable = true;
services = {
udisks2.enable = true;
fstrim.enable = true;
upower.enable = true;
};
}
@@ -1,6 +1,6 @@
{
hardware.bluetooth = {
enable = true;
{ config, lib, ... }: {
hardware.bluetooth =
lib.mkIf config.hardware.bluetooth.enable {
powerOnBoot = true;
settings = {
General = {
@@ -2,21 +2,17 @@
boot = {
loader = {
timeout = 3;
# systemd-boot.enable = true;
efi.efiSysMountPoint = "/boot";
efi = {
efiSysMountPoint = "/boot";
canTouchEfiVariables = true;
};
grub = {
enable = true;
efiSupport = true;
efiInstallAsRemovable = true;
device = "nodev";
};
# efi.canTouchEfiVariables = true;
};
# initrd = {
# verbose = false;
# # systemd.enable = true;
# };
consoleLogLevel = 0;
kernelParams = [
# "quiet"
@@ -31,7 +27,6 @@
enable = true;
theme = "black_hud";
themePackages = with pkgs; [
# By default we would install all themes
(adi1090x-plymouth-themes.override {
selected_themes = [ "black_hud" ];
})
+23
View File
@@ -0,0 +1,23 @@
{ pkgs, ... }: {
console = {
font = "${pkgs.kbd}/share/consolefonts/LatArCyrHeb-19.psfu.gz";
colors = [
"16161E"
"1A1B26"
"2F3549"
"444B6A"
"787C99"
"787C99"
"CBCCD1"
"D5D6DB"
"F7768E"
"FF9E64"
"E0AF68"
"41A6B5"
"7DCFFF"
"7AA2F7"
"BB9AF7"
"D18616"
];
};
}
+10
View File
@@ -0,0 +1,10 @@
{ lib, ... }:{
services.postgresql = {
enable = true;
ensureDatabases = [ "mydatabase" ];
authentication = lib.mkOverride 10 ''
#type database DBuser auth-method
local all all trust
'';
};
}
@@ -1,13 +1,17 @@
{pkgs, ...}: {
programs.steam.enable = true;
programs.steam.gamescopeSession.enable = true;
programs.gamemode.enable = true;
{ config, pkgs, pkgs-unstable, lib, ... }:
lib.mkIf config.programs.gamemode.enable {
programs.steam = {
enable = true;
gamescopeSession.enable = true;
};
environment.systemPackages = with pkgs; [
mangohud
protonup
bottles
heroic
prismlauncher
];
environment.sessionVariables = {
+19
View File
@@ -0,0 +1,19 @@
{ config, lib, ... }:
lib.mkIf config.host.laptop {
services.tlp = {
enable = true;
settings = {
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
CPU_MIN_PERF_ON_AC = 0;
CPU_MAX_PERF_ON_AC = 100;
CPU_MIN_PERF_ON_BAT = 0;
CPU_MAX_PERF_ON_BAT = 75;
};
};
}
+15
View File
@@ -0,0 +1,15 @@
{
networking = {
enableIPv6 = true;
useDHCP = false;
nameservers = [ "64.188.64.176" "1.1.1.1" ];
dhcpcd.extraConfig = "nohook resolv.conf";
networkmanager = {
enable = true;
dns = "none";
insertNameservers = [ "64.188.64.176" "1.1.1.1" ];
};
};
}
+25
View File
@@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
lib.mkIf config.services.printing.enable {
services = {
printing.drivers = with pkgs; [
brlaser
];
avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
};
hardware.sane = {
enable = true;
extraBackends = with pkgs; [ sane-airscan ];
};
environment.systemPackages = with pkgs; [
sane-frontends
simple-scan
];
}
@@ -2,7 +2,7 @@
let
sol = pkgs.writers.writePython3 "shutdown-on-lan.py" {
libraries = [ pkgs.python312Packages.psutil ];
flakeIgnore = [ "E501" "E302" "E305" ];
flakeIgnore = [ "E302" "E305" "E501" "E701" ];
} /*py*/ ''
# https://habr.com/ru/articles/816765/
@@ -21,9 +21,14 @@
ip_addr = mac_addr = None
while not ip_addr or not mac_addr or ip_addr == '127.0.0.1':
net = psutil.net_if_addrs()
for item in net[list(net.keys())[-1]]:
nets = psutil.net_if_addrs()
for net in list(nets.keys())[::-1]:
if net in ('lo', 'tun0'): continue
logger.debug(str(net))
for item in nets[net]:
# logger.debug(str(item))
addr = item.address
logger.debug(addr)
# В IPv4-адресах разделители - точки
if '.' in addr:
ip_addr = addr
@@ -33,8 +38,9 @@
# Приводим MAC-адрес к одному формату. Формат может меняться в зависимости от ОС
mac_addr = addr.replace(':', '-').upper()
if not ip_addr or not mac_addr or ip_addr == '127.0.0.1':
logger.debug('Не удалось получить IP или MAC-адрес сетевого интерфейса')
logger.error('Не удалось получить IP или MAC-адрес сетевого интерфейса')
sleep(10)
logger.debug(mac_addr)
return ip_addr, mac_addr
def assemble_wol_packet(mac_address: str) -> str:
+18
View File
@@ -0,0 +1,18 @@
{
security.rtkit.enable = true;
services = {
pulseaudio.enable = false;
pipewire = {
enable = true;
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
};
};
}
+5
View File
@@ -0,0 +1,5 @@
{ pkgs, ... }: {
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
}
@@ -1,11 +1,11 @@
{pkgs, config, ...}: {
{ pkgs, pkgs-unstable, config, ...}: {
systemd.services.v2raya = {
enable = true;
description = "v2rayA gui client";
after = [ "network.target" ];
serviceConfig = {
Restart = "always";
ExecStart = "${pkgs.v2raya}/bin/v2rayA";
ExecStart = "${pkgs-unstable.v2raya}/bin/v2rayA";
};
path = with pkgs; [ iptables bash iproute2 ];
wantedBy = [ "multi-user.target" ];
@@ -19,8 +19,8 @@
environment.etc = {
"v2raya/ru_geoip.dat".source = pkgs.fetchurl {
name = "geoip.dat";
url = "https://github.com/runetfreedom/russia-blocked-geoip/releases/download/202411071531/geoip.dat";
hash = "sha256-BBQUTzUIWpSjFxv3R6hGfoE+WTeNcVpc7Ge3eOCKxuY=";
url = "https://github.com/runetfreedom/russia-blocked-geoip/releases/download/202511300923/geoip.dat";
hash = "sha256-irYvR6UpXRojrFYCSt2zjOa3V6YzJWdUX+2IIKDR7nY=";
};
"v2raya/bolt.db".source = config.sops.secrets.vpn_bolt.path;
+11
View File
@@ -0,0 +1,11 @@
{
services.yggdrasil = {
enable = true;
persistentKeys = true;
settings = {
Peers = [
"tcp://codrs.ru:5001"
];
};
};
}
+21
View File
@@ -0,0 +1,21 @@
{ config, lib, ... }: {
imports = [
./user/qt.nix
./user/sops.nix
./user/neofetch.nix
./user/yazi.nix
./user/ags.nix
./user/zsh.nix
./user/helix.nix
./user/hyprlock.nix
./user/btop.nix
./user/wofi.nix
./user/mako.nix
./user/ghostty.nix
./user/hyprland.nix
./user/packages/art.nix
./user/packages/desktop.nix
./user/packages/coding.nix
./user/packages/utils.nix
] ;
}
+26
View File
@@ -0,0 +1,26 @@
{ config, inputs, pkgs, ... }: {
imports = [ inputs.ags.homeManagerModules.default ];
programs.ags = {
enable = true;
configDir = null;
extraPackages = with inputs.ags.packages.${pkgs.system}; [
battery
mpris
hyprland
network
tray
wireplumber
];
};
home.packages = with pkgs; [
pulsemixer
];
wayland.windowManager.hyprland.settings.exec-once = [ "ags run" ];
xdg.configFile."ags".source = (pkgs.callPackage ./packages/drvs/ags.nix { colors = config.lib.stylix.colors; });
}
+15
View File
@@ -0,0 +1,15 @@
{ pkgs, ... }: {
programs.btop = {
enable = true;
package = pkgs.btop.override { cudaSupport = true; };
settings = {
shown_boxes = "proc cpu gpu0 mem net";
# color_theme = "TTY";
update_ms = 1000;
cpu_single_graph = true;
only_physical = false;
net_auto = false;
net_iface = "eno1";
};
};
}
+11
View File
@@ -0,0 +1,11 @@
{
programs.ghostty = {
enable = true;
enableZshIntegration = true;
settings = {
confirm-close-surface = false;
copy-on-select = false;
title-report = true;
};
};
}
@@ -6,6 +6,7 @@
settings = {
# theme = "catppuccin-mocha";
editor = {
insert-final-newline = false;
whitespace.render = {
space = "all";
tab = "all";
@@ -1,97 +1,50 @@
{ pkgs, lib, config, collection, swww_flags, inputs }: {
{ pkgs, lib, config, osConfig, inputs, username, ... }: let
optImport = path: lib.optional (builtins.pathExists path) path;
hostname = osConfig.networking.hostName;
in {
imports =
optImport ../../host/${hostname}/modules/hyprland.nix ++
optImport ../../user/${username}/modules/hyprland.nix;
home.packages = with pkgs; [
swww
kitty
ghostty
pamixer
wofi
clipse
grimblast
wl-clipboard
wl-clip-persist
xclip
clipnotify
];
wayland.windowManager.hyprland =
let
wayland.windowManager.hyprland = let
colors = config.lib.stylix.colors;
wallpaper_changer = pkgs.writers.writePython3Bin "wallpaper_changer" {
libraries = [ pkgs.python3Packages.requests ];
flakeIgnore = [ "E501" "E111" "E701" "E241" "E731" ];
} /*py*/ ''
import requests as requests
from random import choice
from os import system, mkdir, listdir
from os.path import exists
notify = lambda s: system(f"notify-desktop Wallpaper '{s}'")
folder = "${config.home.homeDirectory}/Wallpapers"
url = "https://wallhaven.cc/api/v1/collections/${collection}"
with open("${config.sops.secrets."tokens/apis/wallhaven".path}") as f:
token = f.read()
notify("Updating wallpaper!")
try:
json = requests.get(url, params={'apikey': token}).json()
wallpaper = choice(json['data'])
link = wallpaper['path']
format = wallpaper['file_type']
id = wallpaper['id']
if format == "image/jpeg": ext = "jpg"
else: ext = "png"
filename = f"{id}.{ext}"
if not exists(f"{folder}/{filename}"):
if not exists(folder):
mkdir(f"{folder}")
notify("Downloading...")
with open(f"{folder}/{filename}", 'wb') as f:
r = requests.get(link)
f.write(r.content)
except requests.exceptions.ConnectionError:
notify("Offline mode")
filename = choice(listdir(folder))
finally:
system(f"swww img {folder}/{filename} ${swww_flags}")
'';
clipsync = pkgs.writers.writeBash "clipsync" ''
while clipnotify; do
xclip -q -sel clip -t image/png -o > /dev/null && \
xclip -sel clip -t image/png -o | wl-copy
xclip -q -sel clip -o > /dev/null && \
xclip -sel clip -o | wl-copy
done
'';
in {
enable = true;
xwayland.enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
plugins = with inputs.hyprland-plugins.packages.${pkgs.system}; [
hyprbars
# hyprbars # Version mismatch
];
settings = {
"$mainMod" = "SUPER";
ecosystem = {
no_donation_nag = true;
no_update_news = true;
};
env = [
"LIBVA_DRIVER_NAME,nvidia"
"XDG_SESSION_TYPE,wayland"
"GBM_BACKEND,nvidia"
"__GLX_VENDOR_LIBRARY_NAME,nvidia"
"WLR_NO_HARDWARE_CURSORS,1"
"XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_TYPE,wayland"
"XDG_SESSION_DESKTOP,Hyprland"
"XCURSOR_SIZE,36"
"QT_QPA_PLATFORM,wayland"
"XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_DESKTOP,Hyprland"
"XCURSOR_SIZE, ${toString config.stylix.cursor.size}"
"XCURSOR_THEME, ${config.stylix.cursor.name}"
"XDG_SCREENSHOTS_DIR,~/screens"
];
@@ -102,10 +55,14 @@
enable_stdout_logs = true;
};
misc = {
focus_on_activate = true;
};
input = {
kb_layout = "us,ru";
kb_variant = "lang";
kb_options = "grp:caps_toggle";
numlock_by_default = true;
follow_mouse = 1;
@@ -113,38 +70,46 @@
natural_scroll = false;
};
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
sensitivity = 0;
};
windowrule = [
"float, ^(imv)$"
"float, ^(feh)$"
"float, ^(mpv)$"
"float, ^(nmtui)$"
"float, title:^(Список друзей)"
gestures = {
workspace_swipe_invert = true;
workspace_swipe_distance = 200;
workspace_swipe_forever = true;
};
gesture = [
"3, horizontal, workspace"
];
windowrulev2 = [
"float, class:(clipse)"
"size 622 652, class:(clipse)"
windowrule = [
"float, class:^(imv)$"
"float, class:^(feh)$"
"float, class:^(mpv)$"
"float, title:^(Список друзей)"
"move onscreen cursor -50% -50%, class:^(xdragon)$"
"float, title:(nmtui)"
"float, title:(pulsemixer)"
"float, title:(clipse)"
"size 622 652, title:(clipse)"
];
exec-once = [
"systemctl --user start plasma-polkit-agent"
"swww init"
"${lib.getExe wallpaper_changer}"
"${lib.getExe pkgs.hyprpanel}"
"${clipsync}"
"${lib.getExe' pkgs.swww "swww-daemon"}"
"wl-clip-persist --clipboard both"
"clipse -listen"
"${lib.getExe' pkgs.udiskie "udiskie"}"
];
bind = [
"$mainMod, V, exec, kitty --class clipse -e clipse"
"$mainMod, V, exec, ghostty --title=clipse -e clipse"
"$mainMod, Return, exec, kitty"
"$mainMod, Return, exec, ghostty"
"$mainMod, Q, killactive,"
"$mainMod, M, exit,"
"$mainMod, E, exec, kitty -e sh -c yazi"
"$mainMod, E, exec, ghostty -e sh -c yazi"
"$mainMod, F, togglefloating,"
"$mainMod, D, exec, wofi --show drun"
"$mainMod, P, pseudo, # dwindle"
@@ -199,24 +164,36 @@
"$mainMod, mouse_up, workspace, e-1"
# Keyboard backlight
"$mainMod, F3, exec, brightnessctl -d *::kbd_backlight set +33%"
"$mainMod, F2, exec, brightnessctl -d *::kbd_backlight set 33%-"
"$mainMod, F3, exec, ${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set +33%"
"$mainMod, F2, exec, ${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set 33%-"
# Volume and Media Control
", XF86AudioRaiseVolume, exec, pamixer -i 5 "
", XF86AudioLowerVolume, exec, pamixer -d 5 "
", XF86AudioMute, exec, pamixer -t"
", XF86AudioMicMute, exec, pamixer --default-source -m"
", XF86AudioPlay, exec, ${lib.getExe pkgs.playerctl} play-pause"
", XF86Explorer, exec, ghostty -e sh -c yazi"
", XF86Mail, exec, thunderbird"
", XF86WWW, exec, google-chrome-stable" # TODO: Replace hard-code to some variable
# Brightness control
", XF86MonBrightnessDown, exec, brightnessctl set 5%- "
", XF86MonBrightnessUp, exec, brightnessctl set +5% "
", XF86MonBrightnessDown, exec, ${lib.getExe pkgs.brightnessctl} set 5%- "
", XF86MonBrightnessUp, exec, ${lib.getExe pkgs.brightnessctl} set +5% "
];
# Waybar
"$mainMod, B, exec, pkill -SIGUSR1 waybar"
#"$mainMod, W, exec, pkill -SIGUSR2 waybar"
binde = [
", XF86AudioRaiseVolume, exec, pamixer -i 5 "
", XF86AudioLowerVolume, exec, pamixer -d 5 "
];
"$mainMod, W, exec, ${lib.getExe wallpaper_changer}"
bindc = [
", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} position 5-"
", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} position 5+"
];
bindo = [
", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} previous"
", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} next"
];
# Move/resize windows with mainMod + LMB/RMB and dragging
@@ -1,4 +1,6 @@
{ pkgs, lib, ... }: {
{ config, pkgs, lib, ... }:
lib.mkIf config.programs.hyprlock.enable {
wayland.windowManager.hyprland.settings.exec-once = [ "hyprlock" ];
programs.hyprlock = let
@@ -8,12 +10,9 @@
hash = "sha256-wRFs/Inw1wEzF5UKFn/o6e/xH5ZJ3SVNxxno+mDx2Fs=";
};
in {
enable = true;
settings = {
background = {
path = lib.mkForce "${image}";
color = "rgba(25, 20, 20, 1.0)";
blur_passes = 0;
blur_size = 7;
noise = 0.0117;
@@ -58,17 +57,12 @@
dots_center = false;
dots_rounding = -1;
dots_fade_time = 200;
# outer_color = "rgb(151515)";
# inner_color = "rgb(200, 200, 200)";
# font_color = "rgb(10, 10, 10)";
font_family = "Noto Sans";
fade_on_empty = true;
fade_timeout = 1000;
placeholder_text = "<i>Input Password...</i>";
hide_input = false;
rounding = -1;
# check_color = "rgb(204, 136, 34)";
# fail_color = "rgb(204, 34, 34)";
fail_text = "<i>$FAIL <b>($ATTEMPTS)</b></i>";
fail_timeout = 2000;
fail_transition = 300;
@@ -1,11 +1,11 @@
{ config, pkgs, ... }: let
icon = pkgs.fetchurl {
url = "https://preview.redd.it/a2nga4jvjy291.png?width=640&crop=smart&auto=webp&s=7d1458b41101c960bc13c28a6b92c5a6ddc20210";
name = "nixos-chan.png";
sha256 = "sha256-9pleL+PiiylT8/aWw0iGve1iY3h0XohSQ7MVILzabHY=";
url = "https://cloud.codrs.ru/pub/nixos-chan.webp?raw";
name = "nixos-chan.webp";
sha256 = "sha256-0majB9ljjMdZwvOijEgWdFKxWLje5tHgXHBJUWZfHfY=";
};
in {
home.packages = [ pkgs.neofetch ];
home.packages = [ pkgs.fastfetch ];
xdg.configFile."neofetch/config.conf".text = ''
print_info() {
info title
+10
View File
@@ -0,0 +1,10 @@
{ pkgs-fixed, lib, host, ... }:
lib.mkIf (!host.laptop) {
home.packages = with pkgs-fixed; [
(blender.override { cudaSupport = true; })
aseprite
krita
gimp
];
}
+6
View File
@@ -0,0 +1,6 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
jetbrains.idea-community
android-studio
];
}
+7
View File
@@ -0,0 +1,7 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
burpsuite
binwalk
exiftool
];
}
+12
View File
@@ -0,0 +1,12 @@
{ pkgs, inputs, pkgs-fixed, ... }: {
home.packages = with pkgs; [
pkgs-fixed.ayugram-desktop
vesktop
obs-studio
mpv
obsidian
qbittorrent
thunderbird
libreoffice
];
}
+24
View File
@@ -0,0 +1,24 @@
{ stdenv, lib, config, colors, ... }:
stdenv.mkDerivation {
name = "AGS theme";
src = ./ags;
dontUnpack = true;
patchPhase = ''
echo \$bg: \#${colors.base00}\; > colors.scss
echo \$surface0: \#${colors.base02}\; >> colors.scss
echo \$fg: \#${colors.base05}\; >> colors.scss
echo \$accent: \#${colors.base0B}\; >> colors.scss
echo \#${colors.base0B} > accent.css
'';
installPhase = ''
ls
mkdir $out
cp $src/* $out -r
mv colors.scss $out
mv accent.css $out
'';
}
@@ -0,0 +1,2 @@
accent.css
colors.scss
+12
View File
@@ -0,0 +1,12 @@
# Simple Bar Example
![simple-bar](https://github.com/user-attachments/assets/a306c864-56b7-44c4-8820-81f424f32b9b)
A simple bar for Hyprland using
- [Battery library](https://aylur.github.io/astal/guide/libraries/battery).
- [Hyprland library](https://aylur.github.io/astal/guide/libraries/hyprland).
- [Mpris library](https://aylur.github.io/astal/guide/libraries/mpris).
- [Network library](https://aylur.github.io/astal/guide/libraries/network).
- [Tray library](https://aylur.github.io/astal/guide/libraries/tray).
- [WirePlumber library](https://aylur.github.io/astal/guide/libraries/wireplumber).
+13
View File
@@ -0,0 +1,13 @@
import { App } from "astal/gtk3"
import style from "./style.scss"
import Bar from "./widget/Bar"
App.start({
css: style,
instanceName: "ags",
requestHandler(request, res) {
print(request)
res("ok")
},
main: () => App.get_monitors().map(Bar),
})
+105
View File
@@ -0,0 +1,105 @@
@use "sass:color";
@use "colors.scss" as *;
$radius: 10px;
* {
all: unset;
}
%item {
background: $bg;
border-radius: $radius;
padding: 6px 8px;
& + &, .item + &, & + .item { margin-left: 4px; }
icon + label { margin-left: 4px; }
}
.item + .item { margin-left: 4px; }
window.Bar {
border: none;
box-shadow: none;
background-color: transparent;
color: $fg;
font-size: 1.1em;
font-weight: bold;
.Container {
margin: 10px 10px 0;
}
.Workspaces {
padding: 0;
button {
margin: 0;
&:hover label {
background: $surface0;
color: $accent;
}
&:active label {
background: $surface0;
color: $accent;
}
}
label {
transition: 200ms;
padding: 0 6px;
margin: 0px;
border-radius: $radius;
border: 1pt solid transparent;
}
.focused label {
background: $accent;
color: $bg;
border-color: $accent;
}
}
.Layout.en { color: $accent; }
.SysTray button {
padding: 4px;
border-radius: inherit;
&:hover {
background: $surface0;
border-radius: 4px;
}
}
.Media {
&.playing {
border: 2pt solid $accent;
}
.Cover {
min-height: 1.2em;
min-width: 1.2em;
border-radius: $radius;
background-position: center;
background-size: contain;
}
}
.Workspaces, .Wifi, .Layout, .Media, .SysTray, .AudioSlider, .Battery, .Time {
@extend %item;
}
.Wifi, .AudioSlider {
&, button {
&:hover { background-color: $surface0; }
&:active {
background-color: $accent;
color: $bg;
}
}
}
}
@@ -0,0 +1,39 @@
import { App } from "astal/gtk3"
import { Astal, Gtk, Gdk } from "astal/gtk3"
import Time from "./elements/Time"
import Wifi from "./elements/Wifi"
import Audio from "./elements/Audio"
import Media from "./elements/Media"
import Layout from "./elements/Keyboard"
import SysTray from "./elements/SysTray"
import Workspaces from "./elements/Workspaces"
import BatteryLevel from "./elements/Battery"
export default function Bar(monitor: Gdk.Monitor) {
const { TOP, LEFT, RIGHT } = Astal.WindowAnchor
return <window
className="Bar"
gdkmonitor={monitor}
exclusivity={Astal.Exclusivity.EXCLUSIVE}
anchor={TOP | LEFT | RIGHT}>
<centerbox className="Container">
<box hexpand halign={Gtk.Align.START}>
<Workspaces />
<Layout />
</box>
<box>
<Media />
</box>
<box hexpand halign={Gtk.Align.END} >
<SysTray />
<Wifi />
<Audio />
<BatteryLevel />
<Time />
</box>
</centerbox>
</window>
}
@@ -0,0 +1,16 @@
import { bind } from "astal"
import { execAsync } from "astal/process"
import Wp from "gi://AstalWp"
export default function Audio() {
const speaker = Wp.get_default()?.audio.defaultSpeaker!
return <button
className="AudioSlider"
onClicked={() => { execAsync("ghostty --title=pulsemixer -e pulsemixer") }}>
<box>
<icon icon={bind(speaker, "volumeIcon")} />
<label label={bind(speaker, "volume").as(v => `${Math.floor(v*100)}%`)} />
</box>
</button>
}
@@ -0,0 +1,30 @@
import { bind } from "astal";
import Battery from "gi://AstalBattery";
import accent from "../../accent.css";
export default function BatteryLevel() {
const bat = Battery.get_default();
const percent = bind(bat, "percentage").as(p => Math.floor(p * 100));
return (
<box
className="Battery"
visible={bind(bat, "isPresent")}
css={percent.as(p => `
background-image: linear-gradient(
to right,
${accent} 0%,
${accent} ${p}%,
transparent ${p}%,
transparent 100%
);
background-size: 100% 3px;
background-repeat: no-repeat;
background-position: bottom;
`)}
>
<icon icon={bind(bat, "batteryIconName")} />
<label label={percent.as(p => `${p}%`)} />
</box>
);
}
@@ -0,0 +1,12 @@
import { Variable, bind } from "astal"
import Hyprland from "gi://AstalHyprland"
export default function Layout() {
const hl = Hyprland.get_default();
let layout = Variable("en");
hl.connect("keyboard-layout", (_, __, l) => { layout.set(`${l}`.slice(0, 2).toLowerCase()) })
return <box className={bind(layout).as((l) => `Layout ${l}`)}>
<label label={bind(layout)}/>
</box>
}
@@ -0,0 +1,29 @@
import { Variable, bind } from "astal"
import { Gtk } from "astal/gtk3"
import Mpris from "gi://AstalMpris"
export default function Media() {
const mpris = Mpris.get_default()
// console.log(bind(mpris, "players").as(ps => ps[0] ? `${ps[0].title} ${ps[0].artist} ${ps[0].get_playback_status()}` : "-"));
return <box>
{bind(mpris, "players").as(ps => ps[0] ? (
<button
className={bind(ps[0], "playback-status").as(s => s == 0 ? "Media playing" : "Media")}
onClicked={() => ps[0].play_pause()}>
<box>
<box
className="Cover"
valign={Gtk.Align.CENTER}
css={bind(ps[0], "coverArt").as(cover =>
`background-image: url('${cover}');`
)}
/>
<label
label={bind(ps[0], "title").as(() =>ps[0].title.length < 80 ? ps[0].title : `${ps[0].title.slice(0, 77)}...`)}
/>
</box>
</button>
) : ("") )}
</box>
}
@@ -0,0 +1,22 @@
import { bind } from "astal"
import Tray from "gi://AstalTray"
export default function SysTray() {
const tray = Tray.get_default()
return <box className="item">
{bind(tray, "items").as(i => (i.length > 0) ? (
<box className="SysTray">
{bind(tray, "items").as(items => items.map(item => (
<menubutton
tooltipMarkup={bind(item, "tooltipMarkup")}
usePopover={false}
actionGroup={bind(item, "action-group").as(ag => ["dbusmenu", ag])}
menuModel={bind(item, "menu-model")}>
<icon gicon={bind(item, "gicon")} />
</menubutton>
)))}
</box>
) : ("") )}
</box>
}
@@ -0,0 +1,12 @@
import { Variable, GLib } from "astal"
export default function Time({ format = "%e %b - %H:%M %a" }) {
const time = Variable<string>("").poll(1000, () =>
GLib.DateTime.new_now_local().format(format)!)
return <label
className="Time"
onDestroy={() => time.drop()}
label={time()}
/>
}
@@ -0,0 +1,28 @@
import { bind } from "astal"
import Network from "gi://AstalNetwork"
import { execAsync } from "astal/process"
export default function Wifi() {
const network = Network.get_default()
const wifi = bind(network, "wifi")
return <box
visible={wifi.as(Boolean)}
className="item">
{wifi.as(wifi => wifi && (
<button
className="Wifi"
onClicked={() => {execAsync("ghostty --title=nmtui -e nmtui")}}>
<box>
<icon
tooltipText={bind(wifi, "ssid").as(String)}
icon={bind(wifi, "iconName")}
/>
<label
label={bind(wifi, "ssid").as(String)}
/>
</box>
</button>
))}
</box>
}

Some files were not shown because too many files have changed in this diff Show More