Compare commits

..
52 Commits
Author SHA1 Message Date
Sweetbread 4e9b23c9ce pkgs: add some utils 2025-03-27 12:56:20 +03:00
Sweetbread c795a16deb feat(ags): add battery bar 2025-03-27 12:56:20 +03:00
Sweetbread 02cd11a936 fix(ags): wifi widget 2025-03-25 19:53:36 +03:00
Sweetbread 4758954aea feat: postgres 2025-03-21 00:12:27 +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
105 changed files with 1268 additions and 4195 deletions

No files matched your search

+1 -1
View File
@@ -5,7 +5,7 @@ creation_rules:
key_groups: key_groups:
- age: - age:
- *primary - *primary
- path_regex: host/(Rias|Senko|Inaho|Eclipse)/secrets/.+$ - path_regex: nixos/hosts/(Rias|Senko|Eclipse)/secrets/.+$
key_groups: key_groups:
- age: - age:
- *primary - *primary
+7 -42
View File
@@ -1,47 +1,12 @@
# ❄️ My NixOS Config # ❄️ My NixOS Config
This configuration is based on [&'s config](https://github.com/Andrey0189/nixos-config) ```bash
git clone https://github.com/Andrey0189/nixos-config
## Users mv nixos-config $HOME/nix # Config is supposed to be in the ~/nix directory
- [Sweetbread](./user/sweetbread) cd $HOME/nix
- [Chest](./user/chest) sudo nixos-rebuild switch --flake .
home-manager switch --flake .
## Hosts
- [Rias](./host/Rias)
- [Senko](./host/Senko)
- [Eclipse](./host/Eclipse)
- [Impreza](./host/Impreza)
## How does this work?
The [flake](./flake.nix) file is the starting point. While installing/rebuilding
the correct `host` is chosen, which includes `./host/${host}/configuration.nix`.
It includes 2 (actually, more, but hey!) files:
- [`./host/modules/common.nix`](./host/modules/common.nix): Common setting
for all hosts (I don't say)
- [`./user/common.nix`](./user/common.nix): Common settings for all users (you
got the idea) and setup of [home-manager](https://github.com/nix-community/home-manager)
It allows me to remove duplications and add multiple users to one host
Example with Rias:
``` ```
./host/Rias/configuration.nix Enjoy!
./host/Rias/modules/*
./host/modules/gpu/nvidia.nix
./host/modules/common.nix
./host/Rias/hardware-configuration.nix
./modules/host.nix
./modules/host/*
./host/modules/packages.nix
./user/common.nix
./user/sweetbread/home.nix
./user/sweetbread/modules/*
./modules/user.nix
./modules/user/*
```
## Programs
Most of programs are defined in [user modules](./modules/user)
![Screenshot](./screenshot.png) ![Screenshot](./screenshot.png)
+41
View File
@@ -0,0 +1,41 @@
{
disko.devices = {
disk = {
my-disk = {
device = "/dev/sdb";
type = "disk";
content = {
type = "gpt";
partitions = {
ESP = {
type = "EF00";
size = "256M";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
swap = {
size = "8G";
content = {
type = "swap";
resumeDevice = true;
};
};
root = {
size = "100%";
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/";
};
};
};
};
};
};
};
}
-60
View File
@@ -1,60 +0,0 @@
{ lib
, pkgs
, mumble ? pkgs.mumble
}:
let
# PipeWire 1.4.0 removed client-rt.conf, changing how clients negotiate
# realtime scheduling. Mumble never adapted, so its PipeWire data-loop
# thread stalls mid-negotiation and its own RT watchdog SIGKILLs the
# whole process almost immediately on every launch (confirmed via
# bpftrace: signal_generate shows Mumble's own "data-loop.0" thread
# sending itself SIGKILL). Reproduced identically on both the packaged
# 1.5.915 (Qt5) and a from-source 1.6.870 RC (Qt6) build, so it's the
# shared PipeWire client integration at fault, not Mumble's UI stack.
#
# Upstream: https://github.com/mumble-voip/mumble/issues/6780
# Bisected there to PipeWire 1.2.7 (last known-good) vs 1.4.1+ (broken).
#
# Fix: give Mumble an old, compatible libpipewire-0.3.so to dlopen at
# runtime. The system's actual PipeWire daemon is untouched (still
# whatever version NixOS ships) - only the client library Mumble talks
# through is pinned back.
pipewireGoodPkgs = import (fetchTarball {
url = "https://channels.nixos.org/nixos-24.11/nixexprs.tar.xz";
sha256 = "189lwv8l10bm9fnksfkzy05pm86gmziy9z3bdn13zc8d636ylchj"; # nix-prefetch-url --unpack https://channels.nixos.org/nixos-24.11/nixexprs.tar.xz
}) { inherit (pkgs) system; };
pipewireGood = pipewireGoodPkgs.pipewire;
# Mumble's own build is Qt5-based; QT_PLUGIN_PATH isn't set by its
# wrapper for the platform/sql plugins mumble actually needs when we
# bypass that wrapper below, so it has to be supplied explicitly.
qt5PluginPath = lib.makeSearchPath "lib/qt-${pkgs.qt5.qtbase.version}/plugins" [
pkgs.qt5.qtbase.bin
pkgs.qt5.qtsvg.bin
pkgs.qt5.qtwayland.bin
];
in
pkgs.symlinkJoin {
name = "mumble-pipewire-fixed-${mumble.version}";
paths = [ mumble ];
nativeBuildInputs = [ pkgs.makeWrapper ];
# mumble's own wrapper always prepends its own (broken, too-new)
# PipeWire path in front of anything we set, so wrapping it a second
# time can't win that ordering fight. Instead we skip straight to the
# real unwrapped binary and set env ourselves.
postBuild = ''
rm -f $out/bin/mumble
makeWrapper ${mumble}/bin/.mumble-wrapped $out/bin/mumble \
--prefix LD_LIBRARY_PATH : "${pipewireGood}/lib" \
--set QT_PLUGIN_PATH "${qt5PluginPath}"
'';
meta = mumble.meta // {
description = mumble.meta.description
+ " (patched: pinned PipeWire client lib to 1.2.7 to work around SIGKILL-on-launch with PipeWire >=1.4.0, see mumble#6780)";
};
}
Generated
+422 -461
View File
File diff suppressed because it is too large. Load diff
+58 -78
View File
@@ -3,108 +3,88 @@
nixConfig = { nixConfig = {
extra-substituters = [ extra-substituters = [
"https://nix.lair.moe/main"
"https://nix-community.cachix.org" "https://nix-community.cachix.org"
"https://cache.garnix.io"
"https://hyprland.cachix.org" "https://hyprland.cachix.org"
"https://ezkea.cachix.org" "https://ezkea.cachix.org"
"https://yazi.cachix.org"
]; ];
extra-trusted-public-keys = [ extra-trusted-public-keys = [
"main:tR2gNhCBJHKAlVgohPNHBhGnWL55tB8SxXmMWJe5lo8="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI=" "ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI="
"yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k="
]; ];
}; };
inputs = { inputs = {
aagl = { aagl.url = "github:ezKEa/aagl-gtk-on-nix";
url = "github:ezKEa/aagl-gtk-on-nix"; nixpkgs.url = "github:nixos/nixpkgs/master";
inputs.nixpkgs.follows = "nixpkgs"; nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
}; 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";
ags = { hyprland.url = "github:hyprwm/Hyprland";
url = "github:Aylur/ags/3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6"; hyprland-plugins = {
inputs.nixpkgs.follows = "nixpkgs"; url = "github:hyprwm/hyprland-plugins";
}; inputs.hyprland.follows = "hyprland";
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
};
helix-steel = {
url = "github:mattwparas/helix/steel-event-system";
inputs.nixpkgs.follows = "nixpkgs";
}; };
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
hyprland = {
url = "github:hyprwm/Hyprland/v0.56.1";
# inputs.nixpkgs.follows = "nixpkgs";
};
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs = {
hyprland.follows = "hyprland";
# nixpkgs.follows = "nixpkgs";
};
};
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-pinned.url = "github:nixos/nixpkgs/ec942ba042dad5ef097e2ef3a3effc034241f011";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-26.05";
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:danth/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
waybar = {
url = "github:Alexays/Waybar";
inputs.nixpkgs.follows = "nixpkgs";
};
yazi = {
url = "github:sxyazi/yazi";
inputs.nixpkgs.follows = "nixpkgs";
};
yazi-plugins = {
url = "github:yazi-rs/plugins";
flake = false;
};
}; };
outputs = { self, nixpkgs, nixpkgs-stable, nixpkgs-pinned, home-manager, ... }@inputs: let outputs = { self, nixpkgs, nixpkgs-stable, home-manager, ... }@inputs: let
system = "x86_64-linux"; system = "x86_64-linux";
config = { allowUnfree = true; };
mkHost = hostname: nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
pkgs-stable = import nixpkgs-stable { inherit system config; };
pkgs-pinned = import nixpkgs-pinned { inherit system config; };
};
modules = [ ./host/${hostname}/configuration.nix ];
};
in { in {
nixosConfigurations = { nixosConfigurations = {
Rias = mkHost "Rias"; Rias = nixpkgs.lib.nixosSystem {
Senko = mkHost "Senko"; specialArgs = {
Eclipse = mkHost "Eclipse"; pkgs-stable = import nixpkgs-stable {
Impreza = mkHost "Impreza"; inherit system;
Inaho = mkHost "Inaho"; config.allowUnfree = true;
};
inherit inputs system;
};
modules = [ ./host/Rias/configuration.nix ];
};
Senko = nixpkgs.lib.nixosSystem {
specialArgs = {
pkgs-stable = import nixpkgs-stable {
inherit system;
config.allowUnfree = true;
};
inherit inputs system;
};
modules = [ ./host/Senko/configuration.nix ];
};
Eclipse = nixpkgs.lib.nixosSystem {
specialArgs = {
pkgs-stable = import nixpkgs-stable {
inherit system;
config.allowUnfree = true;
};
inherit inputs system;
};
modules = [ ./host/Eclipse/configuration.nix ];
};
};
devShells."${system}".default = let
pkgs = import nixpkgs { inherit system; };
in pkgs.mkShell {
shellHook = "zsh";
packages = with pkgs; [
cargo
rustc
rust-analyzer
lldb
];
}; };
}; };
} }
+2 -6
View File
@@ -1,10 +1,10 @@
{ config, pkgs, pkgs-stable, pkgs-pinned, lib, inputs, ... }: { { config, pkgs, pkgs-stable, lib, inputs, ...}: {
imports = [ imports = [
./secrets/secrets.nix ./secrets/secrets.nix
./modules/aagl.nix ./modules/aagl.nix
./modules/grub.nix ./modules/grub.nix
./modules/zram.nix ./modules/zram.nix
../modules/gpu/nvidia.nix ../modules/nvidia.nix
(import ../modules/common.nix { (import ../modules/common.nix {
inherit lib; inherit lib;
@@ -16,7 +16,6 @@
inherit config; inherit config;
inherit pkgs; inherit pkgs;
inherit pkgs-stable; inherit pkgs-stable;
inherit pkgs-pinned;
inherit lib; inherit lib;
inherit inputs; inherit inputs;
name = "chest"; name = "chest";
@@ -25,7 +24,4 @@
nixpkgs.config.allowBroken = true; nixpkgs.config.allowBroken = true;
programs.gamemode.enable = true; programs.gamemode.enable = true;
services.printing.enable = true;
virtualisation.virtualbox.host.enable = true;
users.extraGroups.vboxusers.members = [ "chest" ];
} }
+11 -19
View File
@@ -13,27 +13,21 @@
boot.kernelModules = [ "kvm-intel" ]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = { fileSystems."/" =
device = "/dev/disk/by-label/NixOS"; { device = "/dev/disk/by-uuid/34e32809-6876-4361-95d8-70a479ea8e19";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = { fileSystems."/boot" =
device = "/dev/disk/by-partlabel/EFI\\x20system\\x20partition"; { device = "/dev/disk/by-uuid/2B65-0D2E";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" "nofail" ]; options = [ "fmask=0022" "dmask=0022" ];
}; };
fileSystems."/mnt/D" = { fileSystems."/mnt/D" = {
device = "/dev/disk/by-uuid/E030A4DF30A4BDC2"; device = "/dev/disk/by-uuid/E030A4DF30A4BDC2";
fsType = "ntfs"; fsType = "ntfs";
options = ["umask=0022" "gid=100" "uid=1000" "nofail" ]; options = ["umask=0022" "gid=100" "uid=1002"];
};
fileSystems."/mnt/F" = {
device = "/dev/disk/by-uuid/1C6278FC2848E1EF";
fsType = "ntfs";
options = ["umask=0022" "gid=100" "uid=1000" "nofail" ];
}; };
swapDevices = [ ]; swapDevices = [ ];
@@ -47,6 +41,4 @@
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
boot.loader.grub.useOSProber = true;
} }
-2
View File
@@ -2,8 +2,6 @@
imports = [ inputs.aagl.nixosModules.default ]; imports = [ inputs.aagl.nixosModules.default ];
nix.settings = inputs.aagl.nixConfig; # Set up Cachix nix.settings = inputs.aagl.nixConfig; # Set up Cachix
programs.honkers-railway-launcher.enable = true; programs.honkers-railway-launcher.enable = true;
programs.sleepy-launcher.enable = true;
programs.anime-game-launcher.enable = true;
networking.hosts."0.0.0.0" = [ networking.hosts."0.0.0.0" = [
"overseauspider.yuanshen.com" "overseauspider.yuanshen.com"
"log-upload-os.hoyoverse.com" "log-upload-os.hoyoverse.com"
-40
View File
@@ -1,40 +0,0 @@
{ pkgs, lib, ... }:
let
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
wallpaper = pkgs.fetchurl {
name = "miku_wallpaper.jpg";
url = "https://c.lair.moe/pub/miku_wallpaper.jpeg?raw";
hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w=";
};
in {
wayland.windowManager.hyprland.settings = {
monitor = [
{
output = "DP-3";
mode = "1920x1080@165";
position = "0x0";
scale = 1;
}
{
output = "HDMI-A-1";
mode = "preferred";
position = "-1080x0";
scale = 1;
transform = 1;
}
];
workspace_rule = [
{ workspace = "1"; monitor = "DP-3"; default = true; }
{ workspace = "10"; monitor = "HDMI-A-1"; default = true; }
];
on = [
(hyprLua.onStart [
"hyprctl dispatch 'hl.dsp.focus({ workspace = 1 })'"
"${lib.getExe pkgs.swww} img -o HDMI-A-1 ${wallpaper}"
"${lib.getExe pkgs.linux-wallpaperengine} ~/.local/share/wpe/wallpaper --assets-dir ~/.local/share/wpe/assets --screen-root DP-3 --noautomute"
])
];
};
}
+11 -5
View File
@@ -1,14 +1,20 @@
{ {
"data": "ENC[AES256_GCM,data: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 truncated "data": "ENC[AES256_GCM,data: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 truncated
"sops": { "sops": {
"kms": null,
"gcp_kms": null,
"azure_kv": null,
"hc_vault": null,
"age": [ "age": [
{ {
"recipient": "age1j3uuyax673fvl5x4dveupq3dylngnrq0e5uy7fmclsexkfd25vysk646wk", "recipient": "age1j3uuyax673fvl5x4dveupq3dylngnrq0e5uy7fmclsexkfd25vysk646wk",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPRUJmYnplYlphSVJHUm96\nckhJa2xmeVB4UE5oK3UyRU40dm1vNkV5L0hBCm1LVGt5SEQxVXhlOURvbTN2c1JZ\nMU1TYXBuVmNMc2lMRlBqODg2ZklRb2sKLS0tIDltSkgxeGZBUko4UFhBdFZJUTgv\nUUZmdXUySFVqTGdnY29UcGN3d1VaZFEKLeVk/iuQeblOLY49QU8nILR+Uzchwd4z\nChqX+lGaVjMZnnNztrMT8DjFTkSUZ7pyYR6EYDQ785kWOv5ibqM0iw==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0Qzg2bGx2eDExZ0F2VWxp\nb1BET1BBRE9UcUM5cGRGdTd1U0w1TStNa1RVCnpYK0E4Y1I0ejJKeXlRQnZWUTZt\nNUhFajA1YnhDYjA4SmxRUVlIVzFuUkEKLS0tIDNxSnZDN3BXUDVPcDRhbDF5Z1d0\nYmxvM1N4RlFhcCtQdWNxdUlaeTkwUkUKUrm1CalGhI39U7VFhv+QM5AkXDLyJVLW\nga4G9umSUxNsEboXRkLn6bmzvfZRn21z8uq/ZlrldbDk02p7zUNkyQ==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2026-05-14T20:20:05Z", "lastmodified": "2024-12-26T15:53:41Z",
"mac": "ENC[AES256_GCM,data:HWdhOY15VcrZY4LLKgOLpU4YyQxSvzI5BAXSI9qRCSBa5V4aQOJueu5FjVoBCdATyvo4sE44WzBawYelEDHSx1v9STqZ7jUBdTOp9JsJN4mAtOjgFbLdNeYvP0enXEXC2fJtmspIbCsTE1CWOGvu33jwOhlsTfusrMJSZaFE54I=,iv:5l7/8Ma7d/Ou8URsXsjfi+i1QEq8EiVrsJaV1jJD3Tg=,tag:F7v4z5vmsQ6L1uQgHKAjIw==,type:str]", "mac": "ENC[AES256_GCM,data:b+EuQLffrp+X+fVw80dUe4EQEsyZoUnX40J3/d5XGj7txweQNZZfIFt9RzoG+t3W12dr/o2R87xfMawuTPXvDoAYbfkLrQu7bv9MT7VGgmreBtdDiEm4c3MPxuYnBWOh+nkoMZOXXzC4/wcbZ1NnWlqp0gt/hJYVad/GgrhtPK0=,iv:rRljq/VV0oYacbQxh5psv3x3gCAmvVR9drsuAFXrtB8=,tag:L4M4Cnsl6bunhQxoYYX8+g==,type:str]",
"version": "3.12.2" "pgp": null,
"unencrypted_suffix": "_unencrypted",
"version": "3.9.2"
} }
} }
-29
View File
@@ -1,29 +0,0 @@
{ config, pkgs, pkgs-stable, pkgs-pinned, lib, inputs, ... }: {
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-stable;
inherit pkgs-pinned;
inherit lib;
inherit inputs;
name = "chest";
})
];
nix.settings.cores = 3;
nixpkgs.config.allowBroken = true;
programs.gamemode.enable = true;
hardware.bluetooth.enable = true;
host.laptop = true;
}
-46
View File
@@ -1,46 +0,0 @@
# 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-label/NixOS";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-label/EFI";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" "nofail" ];
};
fileSystems."/mnt/Windows" = {
device = "/dev/disk/by-label/Windows";
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
@@ -1,13 +0,0 @@
{ 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";
};
}
-15
View File
@@ -1,15 +0,0 @@
{ pkgs, lib, ... }:
let
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
wallpaper = pkgs.fetchurl {
name = "miku_wallpaper.jpg";
url = "https://c.lair.moe/pub/miku_wallpaper.jpeg?raw";
hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w=";
};
in {
wayland.windowManager.hyprland.settings.on = [
(hyprLua.onStart [
"${lib.getExe pkgs.swww} img -o eDP-1 ${wallpaper}"
])
];
}
-1
View File
@@ -1 +0,0 @@
../Eclipse/secrets
-49
View File
@@ -1,49 +0,0 @@
ThinkPad T480
CPU: Intel i5-8350U
RAM: 16GB planned (8GB stock + 8GB SO-DIMM)
SSD: 256GB NVMe stock; disko assumes `/dev/nvme0n1`
## Installation notes
This host uses `disko` with GPT + unencrypted EFI System Partition + LUKS + Btrfs subvolumes.
Before formatting, verify the target disk:
```bash
lsblk
```
If the internal drive is not `/dev/nvme0n1`, edit `host/Inaho/disko.nix` first.
For a 2.5" SATA SSD/HDD it will usually be `/dev/sda`.
Then partition, format and mount:
```bash
sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- \
--mode destroy,format,mount ./host/Inaho/disko.nix
```
This destroys the selected disk.
After that install the host:
```bash
sudo nixos-install --flake .#Inaho
```
The flake contains a new `disko` input. If `flake.lock` has not been updated yet, run:
```bash
nix flake lock --update-input disko
```
## After first boot
Update firmware, especially BIOS/UEFI and Thunderbolt, when batteries are installed and charged:
```bash
sudo fwupdmgr refresh
sudo fwupdmgr get-updates
sudo fwupdmgr update
```
-42
View File
@@ -1,42 +0,0 @@
{ config, pkgs, pkgs-stable, pkgs-pinned, lib, inputs, ... }: {
imports = [
inputs.disko.nixosModules.disko
./disko.nix
./secrets/secrets.nix
./modules/grub.nix
./modules/syncthing.nix
../modules/thinkpad.nix
../modules/gpu/intel.nix
(import ../modules/common.nix {
inherit lib;
inherit inputs;
hostname = "Inaho";
})
(import ../../user/common.nix {
inherit config;
inherit pkgs;
inherit pkgs-stable;
inherit pkgs-pinned;
inherit lib;
inherit inputs;
name = "sweetbread";
fullname = "Sweet Bread";
})
];
hardware.bluetooth.enable = true;
host.laptop = true;
hardware.usb-modeswitch.enable = true;
networking.modemmanager.enable = true;
programs.steam = {
enable = true;
gamescopeSession.enable = true;
};
environment.systemPackages = with pkgs; [
pkgs-stable.bottles
];
}
-85
View File
@@ -1,85 +0,0 @@
{ lib, ... }:
let
# Verify with `lsblk` before running disko. For the stock T480 NVMe setup
# this is usually correct; for a 2.5" SATA SSD/HDD change it to /dev/sda.
disk = "/dev/sda";
btrfsMountOptions = [
"compress=zstd"
"noatime"
"ssd"
"discard=async"
];
in {
disko.devices = {
disk = {
main = {
type = "disk";
device = disk;
content = {
type = "gpt";
partitions = {
ESP = {
priority = 1;
name = "ESP";
start = "1M";
size = "512M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "umask=0077" ];
};
};
luks = {
priority = 2;
name = "cryptsystem";
size = "100%";
content = {
type = "luks";
name = "crypted";
settings = {
# Allows fstrim/discard through LUKS for SSDs.
allowDiscards = true;
};
content = {
type = "btrfs";
extraArgs = [ "-f" "-L" "NixOS" ];
subvolumes = {
"/root" = {
mountpoint = "/";
mountOptions = btrfsMountOptions;
};
"/home" = {
mountpoint = "/home";
mountOptions = btrfsMountOptions;
};
"/nix" = {
mountpoint = "/nix";
mountOptions = btrfsMountOptions;
};
"/log" = {
mountpoint = "/var/log";
mountOptions = btrfsMountOptions;
};
"/swap" = {
mountpoint = "/.swapvol";
swap.swapfile.size = "16G";
};
};
};
};
};
};
};
};
};
};
}
-22
View File
@@ -1,22 +0,0 @@
# 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") ];
# File systems and swap are declared in ./disko.nix.
# If you regenerate this file after installation, use:
# nixos-generate-config --no-filesystems --root /mnt
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" "thinkpad_acpi" ];
boot.extraModulePackages = [ ];
networking.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
-13
View File
@@ -1,13 +0,0 @@
{ 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";
};
}
-10
View File
@@ -1,10 +0,0 @@
{
wayland.windowManager.hyprland.settings.monitor = [
{
output = "eDP-1";
mode = "1920x1080@60";
position = "0x0";
scale = 1;
}
];
}
-39
View File
@@ -1,39 +0,0 @@
{ 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 = {
Rias.id = "EC5AGVN-2RKJDHN-NOSB7PQ-IRYCEEW-NPPDUGX-6QGSLUU-YIT5ZZZ-RVPTHQ6";
Akeno.id = "QDW3WJX-J7ETS4R-32CUAIY-EGNM2RD-ZEHOUW2-CHOEOUG-USZOWTR-HHQS2QX";
Koneko.id = "PJFWQRY-ZFUBGDR-NV7KVBL-UBDQ4HT-KPTYP34-MUDFPJU-4EZUHTT-ZLYRMAB";
};
folders = {
"Music" = {
path = "/home/sweetbread/Music";
devices = [ "Rias" "Akeno" "Koneko" ];
};
"Obsidian" = {
path = "/home/sweetbread/Documents/Obsidian";
devices = [ "Rias" "Akeno" "Koneko" ];
};
"Documents" = {
path = "/home/sweetbread/Documents";
devices = [ "Rias" ];
};
};
};
};
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true";
}
-20
View File
@@ -1,20 +0,0 @@
{
sops = {
age.keyFile = "/root/age.key";
secrets = {
vpn_bolt = {
format = "binary";
sopsFile = ../../Rias/secrets/vpn_bolt.db;
};
syncthing_cert = {
format = "binary";
sopsFile = ./syncthing_cert.pem;
};
syncthing_key = {
format = "binary";
sopsFile = ./syncthing_key.pem;
};
};
};
}
-14
View File
@@ -1,14 +0,0 @@
{
"data": "ENC[AES256_GCM,data:rMr83F9VyGV5dp2XqXGAh3X2sCczUb0chH/2Hn9N9tijfRsOLGqHuy/zy29aOHR0PJ4euTU3bhmxWrBV/7oTnnEfI7DFF0vX4eBDaK8BzwAzrzXHYJOAgcwuYSqEEyWiLvTGABuLhTEto9kIMLxVIssa679s7zQSRwemVJSA3fEdtYD0BLAiO/ZtiAEmitgEt4EBRp9DhJPqlh2YfMmP6DpkDSy0hk+S+0NZg7eyrp7fivldiLzjsYDwCsugFcZQtWOqLMHY0kYhou8c2CKXu8UyqVVx24DyWfBfD1TH2pOk1ZsXFsxhFFKp5wcsfi0xDF1BG4hANcHVa6pR6y5JxNzh53xaH3NuvNJFEQSGJw5fNMuCrDnkYLDpU3xezzjvvxI01y7i2A00zsLli1fc9HA67ZlP1OBzsI7FyMgZlnOXQpbqnkj+kZdYAdOTjjMzQvrPusVS3RvqvcWj1qZtnHa1ZGmWh7xG0J10lQB4uDmTSxWoUUi7VmLXTC16HQNMySd8GbFmD/4Nj+/SxDShgsiug7L4hICjPC8Isosy99tE2wRXpjmMYUdlD7zu/vyEMxVPhkWnJyZZPXG+DjGBc/Diaw4ufYNxUs4yIRDceMArirubt/sN/eUoGOBGVWxvGm0/olTott7Yr+YKRSrDyWo9SWCz1qgz/ydpXm+xE7bPtbj9eAObZwneB/0tZTyo8o1WKd9yUST89m91EMQ31R97yCBwDW19VftWVCZH2w+QHNunih4ZUNiALQS745T2petbvc63iNiZswu0l3qoVM8x3y1RhAPLbsZpwQWSca307iDfBTB6uVW4HwLtL30=,iv:ajC3mjCYKUqS7XGIN64NiJoG6wHMvGdcHhazSO860ms=,tag:31fWG7m2neW2Pft9TjmBGg==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuQUNTSDVIeDRuMmtTWXZD\nU0x4OVJrUStFeW5QV0pOZ2hEZnJZQ09UbW5RCmwxbjhuWis1Q3BCTGtOdS8zNE0w\nL0pDK3dBY1hxZ2dCNG96RlA0dkNWVWMKLS0tIHFld2hUdm11dk5hT2ZtRXpId0VG\nRDM0L05jS0lGcnJBYWVNWElIazdlaUEKugvBGcCzYTZL6aC6mI6GCzhiPFYql75z\nSBfalDmqSVU2k1IBqsNHIYSxzOXwUiGS3MSHJUCf7M2y9X3dHJGeyw==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1j3uuyax673fvl5x4dveupq3dylngnrq0e5uy7fmclsexkfd25vysk646wk"
}
],
"lastmodified": "2026-07-21T20:27:59Z",
"mac": "ENC[AES256_GCM,data:lYZH1f3TyvcgqWI9hVOP3l2xImRh+LL0volXVUYSdGBnQTsAJfzMdsol/SsETwNNn+KrANC3ucO0/MXOWDK7ZPJ5Oq9R+OQnM8LK9/5mNfbzgodTw0RaH8FsrrtBCtHn3H2rlrBoPFEArblWKOh0G9iyrmufT09OREGt/G0tE5o=,iv:vmB1CY3sVajvLS8zAS/0I+NgnAOStbUkzQdw6XY45y4=,tag:mZP/eZVn+DJq+OT1ghtOkQ==,type:str]",
"version": "3.13.2"
}
}
-14
View File
@@ -1,14 +0,0 @@
{
"data": "ENC[AES256_GCM,data:2nMwCxU1y0zE5VtnmEf3lT4XyI9e8dokPkipo3TXpxuRJZ9OXCOb0n4pHb4Xx9OlDgAeW2UX70cR1Wtj7QPQx9h/HYZTmUeIP4rvlTPhaxs/2F33ud1lPKceV2DK2q8G/EvPLnlCcLWMvy6BVsqBlNmjAzNonWI=,iv:7H0o0i3zp7K2demt1O2Pw4BNt+2q4PhHBw1K/jC7OH4=,tag:Bx82eo5kQqwlb6egYmopgQ==,type:str]",
"sops": {
"age": [
{
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2Vzl3M3pFblY5SmRQRUtI\nNWFCbWZJQTJTOWFHdTd1YkJEbXFGOFhBTUNNClBKdWhGdmh3Q2dUNkpMUUU3Zmdq\nUFd1M2twNW1KRGErRHUvc1BLY2pMT3MKLS0tIElVZ0RVVFQrb1FuYnJ0OU44RWZK\nbnpJZnFLR3kzV3VRaytQRDMrYkg5S2sKkr97EwJmtcIsRYH4di+tadTWnWzuCDa9\ngY+CKCVEPUgD1AXSgCwCP2AVd/zaKUbm6d6UA2QzZyqGsRim56WFsQ==\n-----END AGE ENCRYPTED FILE-----\n",
"recipient": "age1j3uuyax673fvl5x4dveupq3dylngnrq0e5uy7fmclsexkfd25vysk646wk"
}
],
"lastmodified": "2026-07-21T20:28:23Z",
"mac": "ENC[AES256_GCM,data:ohYjzIYDilW7lsmZFZXpF629yevO2p8laA7Zl0+NCvZ8dB4nthLUePsnLTYCrEo5ADbboM5Cka11FiYbmB1IMR4mEdRwTN37EsQtyYLZbZ+j4XPsuXO0UT0NmWWiFNJlQEWfTVbhaZRDQXcPpVvm+6qQfRub018/0C59oWpmbyA=,iv:SX1QDDUWZyxE0zODAImcGGHJI7KGKYx9/6Q9F+9SVCQ=,tag:AExTZIfAKTCeU9c3Qj+IUw==,type:str]",
"version": "3.13.2"
}
}
-7
View File
@@ -1,7 +0,0 @@
My desktop
- **CPU:** Intel i5-10600KF
- **GPU:** NVidia GeForce RTX 3060 Ti
- **RAM:** 32GB
- **SSD:** 512GB
- **HDD:** 1TB
+3 -9
View File
@@ -1,10 +1,10 @@
{ config, pkgs, pkgs-stable, pkgs-pinned, lib, inputs, ... }: { { config, pkgs, pkgs-stable, lib, inputs, ...}: {
imports = [ imports = [
./secrets/secrets.nix ./secrets/secrets.nix
./modules/grub.nix ./modules/grub.nix
./modules/syncthing.nix ./modules/syncthing.nix
./modules/rgb.nix ../../modules/host/adb.nix
../modules/gpu/nvidia.nix ../modules/nvidia.nix
(import ../modules/common.nix { (import ../modules/common.nix {
inherit lib; inherit lib;
@@ -16,7 +16,6 @@
inherit config; inherit config;
inherit pkgs; inherit pkgs;
inherit pkgs-stable; inherit pkgs-stable;
inherit pkgs-pinned;
inherit lib; inherit lib;
inherit inputs; inherit inputs;
name = "sweetbread"; name = "sweetbread";
@@ -25,9 +24,4 @@
]; ];
programs.gamemode.enable = true; programs.gamemode.enable = true;
services.printing.enable = true;
hardware.opentabletdriver.enable = true;
environment.systemPackages = [ pkgs.android-tools ];
users.users.sweetbread.extraGroups = [ "kvm" ];
} }
+3 -7
View File
@@ -11,10 +11,6 @@
boot.kernelModules = [ "kvm-intel" ]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
environment.etc.crypttab.text = ''
storage UUID=9327148b-788a-4c23-ac73-28464ffabe1b none luks
'';
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-label/NixOS"; device = "/dev/disk/by-label/NixOS";
fsType = "ext4"; fsType = "ext4";
@@ -27,9 +23,9 @@
}; };
fileSystems."/mnt/D" = { fileSystems."/mnt/D" = {
device = "/dev/mapper/storage"; device = "/dev/disk/by-label/Data";
fsType = "ext4"; fsType = "ntfs";
options = [ "noatime" "nofail" ]; options = ["umask=0022" "gid=100" "uid=1000" "nofail" ];
}; };
swapDevices = [ ]; swapDevices = [ ];
-50
View File
@@ -1,50 +0,0 @@
{ pkgs, lib, ... }:
let
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
monitor-switcher = pkgs.writers.writeBashBin "monitor_switcher" /*bash*/ ''
MODE=$1
case $MODE in
"tv")
hyprctl eval 'hl.monitor({ output = "DP-3", mode = "1920x1080@60", position = "3840x0", scale = 1 })'
hyprctl eval 'hl.monitor({ output = "HDMI-A-1", mode = "3840x2160@60", position = "0x0", scale = 1 })'
notify-send "TV mode"
;;
"mirror")
hyprctl eval 'hl.monitor({ output = "HDMI-A-1", mode = "3840x2160@60", position = "0x0", scale = 1 })'
hyprctl eval 'hl.monitor({ output = "DP-3", mode = "preferred", position = "auto", scale = 1, mirror = "HDMI-A-1" })'
notify-send "TV-only mode"
;;
"display"|*)
hyprctl eval 'hl.monitor({ output = "HDMI-A-1", disabled = true })'
hyprctl eval 'hl.monitor({ output = "DP-3", mode = "3440x1440@165", position = "0x0", scale = 1 })'
notify-send "Display mode"
;;
esac
'';
in {
wayland.windowManager.hyprland.settings = {
monitor = [
{
output = "DP-3";
mode = "3440x1440@165";
position = "auto-right";
scale = 1;
}
{
output = "HDMI-A-1";
disabled = true;
}
];
bind = [
(hyprLua.bind "XF86Calculator" (hyprLua.exec "ghostty --title=pulsemixer -e pulsemixer"))
(hyprLua.bind "SUPER + F1" (hyprLua.exec "${lib.getExe monitor-switcher} tv"))
(hyprLua.bind "SUPER + F2" (hyprLua.exec "${lib.getExe monitor-switcher} mirror"))
(hyprLua.bind "SUPER + F3" (hyprLua.exec "${lib.getExe monitor-switcher}"))
];
};
}
-17
View File
@@ -1,17 +0,0 @@
{ pkgs, ... }:{
services.hardware.openrgb = {
enable = true;
package = pkgs.openrgb-with-all-plugins;
};
environment.systemPackages = with pkgs; [
openrgb-with-all-plugins
i2c-tools
pciutils
];
hardware.i2c.enable = true;
boot.kernelModules = [ "i2c-dev" ];
users.groups.i2c.members = [ "sweetbread" ];
}
+3 -19
View File
@@ -11,9 +11,8 @@
settings = { settings = {
devices = { devices = {
Akeno.id = "QDW3WJX-J7ETS4R-32CUAIY-EGNM2RD-ZEHOUW2-CHOEOUG-USZOWTR-HHQS2QX"; Akeno = { id = "YVFVE2M-GSCKJBJ-AMC5JM3-AOMCVNP-RLFAWEZ-35VP4HP-DGP5QD2-6QWEZQW"; };
Koneko.id = "PJFWQRY-ZFUBGDR-NV7KVBL-UBDQ4HT-KPTYP34-MUDFPJU-4EZUHTT-ZLYRMAB"; Koneko = { id = "PJFWQRY-ZFUBGDR-NV7KVBL-UBDQ4HT-KPTYP34-MUDFPJU-4EZUHTT-ZLYRMAB"; };
Inaho.id = "GEHWQFQ-MPIMQ7R-QEWSOEB-BIZAHSZ-5YOFATK-KDIXFMV-JX3OF6G-ZPNZMA4";
}; };
folders = { folders = {
@@ -27,24 +26,9 @@
devices = [ "Akeno" "Koneko" ]; devices = [ "Akeno" "Koneko" ];
}; };
"JoiPlay" = {
path = "/mnt/D/SyncThing/JoiPlay";
devices = [ "Akeno" ];
};
"Music" = { "Music" = {
path = "/home/sweetbread/Music"; path = "/home/sweetbread/Music";
devices = [ "Akeno" "Koneko" "Inaho" ]; devices = [ "Akeno" "Koneko" ];
};
"Obsidian" = {
path = "/mnt/D/Obsidian";
devices = [ "Koneko" "Inaho" ];
};
"Documents" = {
path = "/home/sweetbread/Documents";
devices = [ "Inaho" ];
}; };
}; };
}; };
+11 -5
View File
@@ -1,14 +1,20 @@
{ {
"data": "ENC[AES256_GCM,data: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 truncated "data": "ENC[AES256_GCM,data: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 truncated
"sops": { "sops": {
"kms": null,
"gcp_kms": null,
"azure_kv": null,
"hc_vault": null,
"age": [ "age": [
{ {
"recipient": "age1j3uuyax673fvl5x4dveupq3dylngnrq0e5uy7fmclsexkfd25vysk646wk", "recipient": "age1j3uuyax673fvl5x4dveupq3dylngnrq0e5uy7fmclsexkfd25vysk646wk",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPbnBXd2Z6OTVaNm1qWEt6\nOXFVMlhDVDhOcVRYUXZWSWFGdUI2bVRucGo4CnMxQ2F5T05naFU4WVR6UUc0M21a\nYTNrTU1PV3RuNnIrVW4vZWNoMEVVQTgKLS0tICt0cGZXRk9xKzNQVG9OQTVZWkFR\ndHFqQmt4MG1rWDZRVkxmSHB4RmNnVFUKM1VqUSRY985F38tfQQvpKF4MvpBBsE3t\n9VAPz0y7Dstla47gyfihpN1KhAsyi1dv3CcsM21xgmKaAMyD0IUWGw==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0VURIZlNxcnpJRGtxNmlj\nTCtKTW1FNHZBdTh4TDBLZE85N05Td1JlS3ljCk1SUTg5T29Kc1RaTmNBajRjWHBk\nSzJQay9SYTZVRHkxVlBlQmRFLzBlTGMKLS0tIFk2RkNBRUZid2dVZTBrNUQyVGs4\nUDlvZjZrcUw1TU9RU3hDZ3ZCcWZnTmMK95HDi6MlGesfJzX+GWvJRnP7MxtLv9Z5\nwKH9F23gXF6vpTvzPz34KaTlgyVz3HfT/LryXjPSNg7s1vTJeFIDyw==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2026-04-08T13:22:56Z", "lastmodified": "2024-12-26T16:14:23Z",
"mac": "ENC[AES256_GCM,data:netm/xUuZIRD1KbxO2ob7PQvAzaH310myeNeY31+QQvBzhk+gwEtCkAkYxnXeS1nNAJjMxNafEZi58ewW0EOg8NO/ZgpDLnQySLxPszLC8Is2nVEwvpFCxoHbI8YSKgBwQxG9z9d+vFY6dClN1Jhc/32HCMNIjXWu0+nJ/uinCA=,iv:lP7vZPcqsHhLiKYhB+oCzyl2OcqDhaZy2/c78TQHmNA=,tag:BKWmaCGbZ6UP9xD2NzYsBA==,type:str]", "mac": "ENC[AES256_GCM,data:zbtRtU4Tjz9Oghx1Ctl9KeCQdnMgWWIZGBcZ3hEqsvcjp9AM9DtX4XLWEv1HA2G7XAbr2f2E2bRbnUkln5nx9I77KPsed9ADADYi711Sj3E60XhpCalHd3xCBJCPSE4fT0gSaB87ISzVWM0JaVrmLkDDi7EYpucfqKEFRMNVQgU=,iv:sPoaevJt72UbPb0VDKAT3+xDKhZ/9XQWEzg5jQmYCuM=,tag:QWeuTJv+MG6p1vXmmBgqFg==,type:str]",
"version": "3.12.2" "pgp": null,
"unencrypted_suffix": "_unencrypted",
"version": "3.9.2"
} }
} }
-1
View File
@@ -1 +0,0 @@
My laptop `HP Pavilion 15-cb012ur`
+2 -6
View File
@@ -1,8 +1,8 @@
{ config, pkgs, pkgs-stable, pkgs-pinned, lib, inputs, ... }: { { config, pkgs, pkgs-stable, lib, inputs, ...}: {
imports = [ imports = [
./secrets/secrets.nix ./secrets/secrets.nix
./modules/grub.nix ./modules/grub.nix
../modules/gpu/nvidia.nix ../modules/nvidia.nix
(import ../modules/common.nix { (import ../modules/common.nix {
inherit lib; inherit lib;
@@ -14,7 +14,6 @@
inherit config; inherit config;
inherit pkgs; inherit pkgs;
inherit pkgs-stable; inherit pkgs-stable;
inherit pkgs-pinned;
inherit lib; inherit lib;
inherit inputs; inherit inputs;
name = "sweetbread"; name = "sweetbread";
@@ -24,7 +23,4 @@
hardware.bluetooth.enable = true; hardware.bluetooth.enable = true;
host.laptop = true; host.laptop = true;
host.nvidia.prime.enable = true;
environment.systemPackages = [ pkgs.dbgate ];
} }
+1 -1
View File
@@ -17,7 +17,7 @@
}; };
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/disk/by-partlabel/EFI"; device = "/dev/disk/by-uuid/D706-818C";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" "nofail" ]; options = [ "fmask=0022" "dmask=0022" "nofail" ];
}; };
-10
View File
@@ -1,10 +0,0 @@
{
wayland.windowManager.hyprland.settings.monitor = [
{
output = "eDP-1";
mode = "1920x1080@60";
position = "0x0";
scale = 1;
}
];
}
+1 -1
View File
@@ -4,7 +4,7 @@
secrets = { secrets = {
vpn_bolt = { vpn_bolt = {
format = "binary"; format = "binary";
sopsFile = ../../Rias/secrets/vpn_bolt.db; sopsFile = ./vpn_bolt.db;
}; };
}; };
}; };
+1
View File
@@ -0,0 +1 @@
../../Rias/secrets/vpn_bolt.db
+2 -23
View File
@@ -7,35 +7,14 @@
]; ];
options = { options = {
host = { host.laptop = lib.mkEnableOption "laptop mode";
laptop = lib.mkEnableOption "laptop mode";
nvidia.prime = {
enable = lib.mkEnableOption "NVIDIA PRIME offload for hybrid graphics";
intelBusId = lib.mkOption {
type = lib.types.str;
default = "PCI:0:2:0";
description = "Intel/iGPU Bus ID used by NVIDIA PRIME.";
};
nvidiaBusId = lib.mkOption {
type = lib.types.str;
default = "PCI:1:0:0";
description = "NVIDIA dGPU Bus ID used by NVIDIA PRIME.";
};
};
};
}; };
config = { config = {
nix.settings = {
keep-going = true;
extra-substituters = [ "https://nix.lair.moe/main" ];
extra-trusted-public-keys = [ "main:tR2gNhCBJHKAlVgohPNHBhGnWL55tB8SxXmMWJe5lo8=" ];
experimental-features = [ "nix-command" "flakes" ];
};
networking.hostName = hostname; networking.hostName = hostname;
time.timeZone = lib.mkDefault "Europe/Moscow"; time.timeZone = lib.mkDefault "Europe/Moscow";
i18n.defaultLocale = lib.mkDefault "ru_RU.UTF-8"; i18n.defaultLocale = lib.mkDefault "ru_RU.UTF-8";
nix.settings.experimental-features = [ "nix-command" "flakes" ];
system.stateVersion = "23.05"; system.stateVersion = "23.05";
}; };
} }
-26
View File
@@ -1,26 +0,0 @@
{ config, pkgs-stable, ... }:
{
hardware.graphics = {
enable = true;
extraPackages = with pkgs-stable; [
intel-media-driver
intel-compute-runtime
libvdpau-va-gl
];
extraPackages32 = with pkgs-stable.pkgsi686Linux; [
intel-media-driver
];
};
nixpkgs.config.packageOverrides = pkgs-stable: {
vaapiIntel = pkgs-stable.vaapiIntel.override { enableHybridCodec = true; };
};
environment.systemPackages = with pkgs-stable; [
intel-gpu-tools
libva-utils
clinfo
];
boot.kernelParams = [ "i915.force_probe=*" ];
}
-61
View File
@@ -1,61 +0,0 @@
{ config, pkgs-stable, lib, ... }: let
primeCfg = config.host.nvidia.prime;
isPrimeOffload = primeCfg.enable;
in {
boot = {
kernelParams = [ "nvidia-drm.modeset=1" ];
initrd.kernelModules = lib.optionals isPrimeOffload [ "i915" ];
};
services.xserver.videoDrivers =
if isPrimeOffload
then [ "modesetting" "nvidia" ]
else [ "nvidia" ];
hardware = {
graphics = {
enable = true;
enable32Bit = true;
extraPackages = with pkgs-stable; [
# nvidia-vaapi-driver
intel-media-driver
libvdpau-va-gl
];
extraPackages32 = with pkgs-stable.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 isPrimeOffload {
offload = {
enable = true;
enableOffloadCmd = true;
};
intelBusId = primeCfg.intelBusId;
nvidiaBusId = primeCfg.nvidiaBusId;
};
};
};
environment.sessionVariables = {
__GL_VRR_ALLOWED = 1;
ELECTRON_OZONE_PLATFORM_HINT = "auto";
NIXOS_OZONE_WL = 1;
} // lib.optionalAttrs isPrimeOffload {
LIBVA_DRIVER_NAME = "iHD";
} // lib.optionalAttrs (!isPrimeOffload) {
WLR_NO_HARDWARE_CURSORS = 1;
WLR_DRM_NO_ATOMIC = 1;
GBM_BACKEND = "nvidia-drm";
LIBVA_DRIVER_NAME = "nvidia";
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
};
}
+27
View File
@@ -0,0 +1,27 @@
{ config, pkgs, lib, ... }: {
services.xserver.videoDrivers = [ "nvidia" ];
hardware = {
graphics = {
enable = true;
enable32Bit = true;
extraPackages = with pkgs; [nvidia-vaapi-driver intel-media-driver];
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.beta;
prime = lib.optionalAttrs config.host.laptop {
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0";
};
};
};
}
+15 -10
View File
@@ -15,16 +15,21 @@
ncdu ncdu
tldr tldr
helix helix
pinentry-gnome3
]; ];
fonts = { fonts.packages = with pkgs; [
enableDefaultPackages = false; jetbrains-mono
packages = with pkgs; [ noto-fonts
jetbrains-mono # Best mono font (google-fonts.override{fonts=["Press Start 2P" "Overpass Mono"];})
noto-fonts-cjk-sans # Japanese noto-fonts-emoji
powerline-symbols # Console decoration noto-fonts-cjk-sans
unifont # Other twemoji-color-font
]; font-awesome
}; powerline-fonts
powerline-symbols
ubuntu_font_family
unifont
nerd-fonts.symbols-only
corefonts
];
} }
-83
View File
@@ -1,83 +0,0 @@
{ config, lib, pkgs, ... }: {
# T480-specific hardware defaults.
hardware = {
enableRedistributableFirmware = true;
trackpoint = {
enable = true;
emulateWheel = true;
};
};
boot = {
supportedFilesystems = [ "btrfs" ];
initrd.availableKernelModules = [
"nvme"
"ahci"
"xhci_pci"
"usb_storage"
"usbhid"
"sd_mod"
"rtsx_pci_sdmmc"
];
kernelModules = [ "kvm-intel" "thinkpad_acpi" ];
kernelParams = [
# Prefer S3/deep sleep when BIOS exposes it. If suspend behaves worse,
# remove this and use the BIOS sleep setting instead.
"mem_sleep_default=deep"
];
};
powerManagement.enable = true;
services = {
# Firmware updates for BIOS/UEFI, Thunderbolt, SSDs where LVFS supports it.
fwupd.enable = true;
# Helps Intel laptops keep sane thermal behaviour under load.
thermald.enable = true;
# Fingerprint reader support. If fprintd does not detect the reader,
# leaving this enabled is harmless; login can still use a password.
fprintd.enable = true;
logind.settings.Login = {
HandleLidSwitch = "suspend-then-hibernate";
HandleLidSwitchExternalPower = "suspend-then-hibernate";
HandlePowerKey = "poweroff";
};
tlp.settings = {
# Preserve batteries when the laptop is usually on AC.
# Raise STOP_* to 100 if maximum autonomy matters more than battery wear.
START_CHARGE_THRESH_BAT0 = 70;
STOP_CHARGE_THRESH_BAT0 = 95;
START_CHARGE_THRESH_BAT1 = 70;
STOP_CHARGE_THRESH_BAT1 = 85;
RESTORE_THRESHOLDS_ON_BAT = 1;
# NVMe/SATA SSD power saving without making the system too sluggish.
AHCI_RUNTIME_PM_ON_AC = "on";
AHCI_RUNTIME_PM_ON_BAT = "auto";
SATA_LINKPWR_ON_AC = "med_power_with_dipm";
SATA_LINKPWR_ON_BAT = "med_power_with_dipm";
# Usually safe on ThinkPads; disable if some USB device randomly disconnects.
USB_AUTOSUSPEND = 1;
};
};
networking.networkmanager.wifi.powersave = true;
environment.systemPackages = with pkgs; [
acpi
lm_sensors
pciutils
powertop
smartmontools
usbutils
nvme-cli
];
}
+4 -34
View File
@@ -1,4 +1,4 @@
{ pkgs, ... }: { {
imports = [ imports = [
./host/bluetooth.nix ./host/bluetooth.nix
./host/bootloader.nix ./host/bootloader.nix
@@ -8,48 +8,18 @@
./host/gamemode.nix ./host/gamemode.nix
./host/gpg.nix ./host/gpg.nix
./host/laptop.nix ./host/laptop.nix
./host/network.nix
./host/printing.nix ./host/printing.nix
./host/shutdown-on-lan.nix ./host/shutdown-on-lan.nix
./host/sound.nix ./host/sound.nix
./host/virtmanager.nix ./host/virtmanager.nix
./host/vpn.nix ./host/vpn.nix
./host/yggdrasil.nix
./host/mtp.nix
]; ];
programs = { programs.hyprland.enable = true;
dconf.enable = true;
hyprland.enable = true;
};
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
extraPortals = with pkgs; [
xdg-desktop-portal-hyprland
xdg-desktop-portal-gtk
xdg-desktop-portal-termfilechooser
];
config = {
common = {
default = [ "hyprland" "gtk" ];
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
};
hyprland = {
default = [ "hyprland" "gtk" ];
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
};
};
};
services = { services = {
udisks2.enable = true;
fstrim.enable = true; fstrim.enable = true;
upower.enable = true; upower.enable = true;
}; };
networking.networkmanager.enable = true;
} }
+4
View File
@@ -0,0 +1,4 @@
{
programs.adb.enable = true;
users.users.sweetbread.extraGroups = ["adbusers"]; # FIXME: check users
}
+1
View File
@@ -11,6 +11,7 @@
enable = true; enable = true;
efiSupport = true; efiSupport = true;
device = "nodev"; device = "nodev";
useOSProber = true;
}; };
}; };
consoleLogLevel = 0; consoleLogLevel = 0;
+2 -2
View File
@@ -1,6 +1,6 @@
{ { pkgs, ... }: {
console = { console = {
font = "LatArCyrHeb-19"; font = "${pkgs.kbd}/share/consolefonts/LatArCyrHeb-19.psfu.gz";
colors = [ colors = [
"16161E" "16161E"
"1A1B26" "1A1B26"
+3 -10
View File
@@ -1,15 +1,8 @@
{ lib, ... }: { {
environment.variables = { environment.variables = {
EDITOR = "hx"; EDITOR = "hx";
RANGER_LOAD_DEFAULT_RC = "FALSE"; RANGER_LOAD_DEFAULT_RC = "FALSE";
# GTK/Electron apps do not consistently use the portal picker unless this QT_QPA_PLATFORMTHEME = "qt5ct";
# variable is present in the graphical session environment. GSETTINGS_BACKEND = "keyfile";
GTK_USE_PORTAL = "1";
# Qt/Telegram-like apps otherwise keep using their own picker. This makes
# them ask xdg-desktop-portal for file/folder selection.
QT_QPA_PLATFORMTHEME = lib.mkForce "xdgdesktopportal";
TDESKTOP_USE_GTK_FILE_DIALOG = "1";
}; };
} }
+5 -5
View File
@@ -6,12 +6,12 @@ lib.mkIf config.programs.gamemode.enable {
gamescopeSession.enable = true; gamescopeSession.enable = true;
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs-stable; [
mangohud mangohud
protonup-ng protonup
bottles pkgs.bottles
pkgs-stable.heroic heroic
prismlauncher pkgs.prismlauncher
]; ];
environment.sessionVariables = { environment.sessionVariables = {
+1 -1
View File
@@ -1,4 +1,4 @@
{ { pkgs, ...}: {
programs.gnupg.agent = { programs.gnupg.agent = {
enable = true; enable = true;
enableSSHSupport = true; enableSSHSupport = true;
+3 -3
View File
@@ -4,11 +4,11 @@ lib.mkIf config.host.laptop {
services.tlp = { services.tlp = {
enable = true; enable = true;
settings = { settings = {
CPU_SCALING_GOVERNOR_ON_AC = "powersave"; CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance"; CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power"; CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
CPU_MIN_PERF_ON_AC = 0; CPU_MIN_PERF_ON_AC = 0;
CPU_MAX_PERF_ON_AC = 100; CPU_MAX_PERF_ON_AC = 100;
-5
View File
@@ -1,5 +0,0 @@
{ pkgs, ... }: {
environment.systemPackages = [ pkgs.glib ];
programs.fuse.enable = true;
services.gvfs.enable = true;
}
-15
View File
@@ -1,15 +0,0 @@
{
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" ];
};
};
}
+4 -20
View File
@@ -1,25 +1,9 @@
{ config, lib, pkgs, ... }: { config, lib, ... }:
lib.mkIf config.services.printing.enable { lib.mkIf config.services.printing.enable {
services = { services.avahi = {
printing.drivers = with pkgs; [
brlaser
];
avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
};
hardware.sane = {
enable = true; enable = true;
extraBackends = with pkgs; [ sane-airscan ]; nssmdns4 = true;
openFirewall = true;
}; };
environment.systemPackages = with pkgs; [
sane-frontends
simple-scan
];
} }
+14 -20
View File
@@ -1,8 +1,8 @@
{ pkgs, lib, ... }: { pkgs, lib, ... }:
let let
sol = pkgs.writers.writePython3 "shutdown-on-lan.py" { sol = pkgs.writers.writePython3 "shutdown-on-lan.py" {
libraries = ps: [ ps.psutil ]; libraries = [ pkgs.python312Packages.psutil ];
flakeIgnore = [ "E302" "E305" "E501" "E701" ]; flakeIgnore = [ "E501" "E302" "E305" ];
} /*py*/ '' } /*py*/ ''
# https://habr.com/ru/articles/816765/ # https://habr.com/ru/articles/816765/
@@ -21,26 +21,20 @@
ip_addr = mac_addr = None ip_addr = mac_addr = None
while not ip_addr or not mac_addr or ip_addr == '127.0.0.1': while not ip_addr or not mac_addr or ip_addr == '127.0.0.1':
nets = psutil.net_if_addrs() net = psutil.net_if_addrs()
for net in list(nets.keys())[::-1]: for item in net[list(net.keys())[-1]]:
if net in ('lo', 'tun0'): continue addr = item.address
logger.debug(str(net)) # В IPv4-адресах разделители - точки
for item in nets[net]: if '.' in addr:
# logger.debug(str(item)) ip_addr = addr
addr = item.address # В MAC-адресах разделители либо тире, либо одинарное двоеточие.
logger.debug(addr) # Двойное двоеточие - это разделители для адресов IPv6
# В IPv4-адресах разделители - точки elif ('-' in addr or ':' in addr) and '::' not in addr:
if '.' in addr: # Приводим MAC-адрес к одному формату. Формат может меняться в зависимости от ОС
ip_addr = addr mac_addr = addr.replace(':', '-').upper()
# В MAC-адресах разделители либо тире, либо одинарное двоеточие.
# Двойное двоеточие - это разделители для адресов IPv6
elif ('-' in addr or ':' in addr) and '::' not in addr:
# Приводим MAC-адрес к одному формату. Формат может меняться в зависимости от ОС
mac_addr = addr.replace(':', '-').upper()
if not ip_addr or not mac_addr or ip_addr == '127.0.0.1': if not ip_addr or not mac_addr or ip_addr == '127.0.0.1':
logger.error('Не удалось получить IP или MAC-адрес сетевого интерфейса') logger.debug('Не удалось получить IP или MAC-адрес сетевого интерфейса')
sleep(10) sleep(10)
logger.debug(mac_addr)
return ip_addr, mac_addr return ip_addr, mac_addr
def assemble_wol_packet(mac_address: str) -> str: def assemble_wol_packet(mac_address: str) -> str:
-1
View File
@@ -3,7 +3,6 @@
services = { services = {
pulseaudio.enable = false; pulseaudio.enable = false;
pipewire = { pipewire = {
enable = true; enable = true;
+1 -1
View File
@@ -1,4 +1,4 @@
{ { pkgs, ... }: {
virtualisation.libvirtd.enable = true; virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true; programs.virt-manager.enable = true;
} }
+22 -23
View File
@@ -1,29 +1,28 @@
{ pkgs-pinned, lib, ... }: { {pkgs, config, ...}: {
programs.clash-verge = { systemd.services.v2raya = {
enable = true; enable = true;
package = pkgs-pinned.clash-verge-rev; description = "v2rayA gui client";
serviceMode = true; after = [ "network.target" ];
tunMode = true; serviceConfig = {
autoStart = true; Restart = "always";
ExecStart = "${pkgs.v2raya}/bin/v2rayA";
};
path = with pkgs; [ iptables bash iproute2 ];
wantedBy = [ "multi-user.target" ];
environment = {
V2RAYA_LOG_FILE = "/var/log/v2raya/v2raya.log";
V2RAY_LOCATION_ASSET = "/etc/v2raya";
XRAY_LOCATION_ASSET = "/etc/v2raya";
};
}; };
systemd.services.clash-verge.serviceConfig = { environment.etc = {
CapabilityBoundingSet = lib.mkForce [ "v2raya/ru_geoip.dat".source = pkgs.fetchurl {
"CAP_NET_ADMIN" name = "geoip.dat";
"CAP_NET_RAW" url = "https://github.com/runetfreedom/russia-blocked-geoip/releases/download/202502081519/geoip.dat";
"CAP_SYS_ADMIN" hash = "sha256-uzv+aNlTD/UycNK2WWbI9timBbaFLAK3ME/lOrzpFdg=";
"CAP_DAC_OVERRIDE" };
"CAP_DAC_READ_SEARCH"
"CAP_SYS_PTRACE"
"CAP_SETUID"
"CAP_SETGID"
"CAP_CHOWN"
"CAP_MKNOD"
];
AmbientCapabilities = [ "v2raya/bolt.db".source = config.sops.secrets.vpn_bolt.path;
"CAP_DAC_READ_SEARCH"
"CAP_SYS_PTRACE"
];
}; };
} }
-12
View File
@@ -1,12 +0,0 @@
{
services.yggdrasil = {
enable = true;
persistentKeys = true;
settings = {
Peers = [
"tcp://box.paulll.cc:13337"
"tcp://lair.moe:5001"
];
};
};
}
+10 -14
View File
@@ -1,24 +1,20 @@
{ config, lib, ... }: { {
imports = [ imports = [
./user/btop.nix ./user/kitty.nix
./user/ghostty.nix
./user/helix.nix
./user/hyprland.nix
./user/hyprlock.nix
./user/mako.nix
./user/neofetch.nix
./user/qt.nix ./user/qt.nix
./user/quickshell.nix
./user/stylix.nix
./user/sops.nix ./user/sops.nix
./user/ssh.nix ./user/neofetch.nix
./user/walker.nix
./user/wob.nix
./user/yazi.nix ./user/yazi.nix
./user/ags.nix
./user/zsh.nix ./user/zsh.nix
./user/helix.nix
./user/hyprlock.nix
./user/btop.nix
./user/wofi.nix
./user/mako.nix
./user/packages/art.nix ./user/packages/art.nix
./user/packages/desktop.nix ./user/packages/desktop.nix
./user/packages/coding.nix
./user/packages/utils.nix ./user/packages/utils.nix
]; ];
} }
+22
View File
@@ -0,0 +1,22 @@
{ 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
];
};
wayland.windowManager.hyprland.settings.exec-once = [ "ags run" ];
xdg.configFile."ags".source = (pkgs.callPackage ./packages/drvs/ags.nix { colors = config.lib.stylix.colors; });
}
-23
View File
@@ -1,23 +0,0 @@
{ config, pkgs, ... }: let
ghosttyWithGL = (config.lib.nixGL.wrap pkgs.ghostty);
shaders = pkgs.fetchFromGitHub {
owner = "sahaj-b";
repo = "ghostty-cursor-shaders";
rev = "06d4e90fb5410e9c4d0b3131584060adddf89406";
hash = "sha256-G/UIr1bKnxn1AcHl/4FL/jou6b7M2VeREslYVELxdmw=";
};
in {
programs.ghostty = {
enable = true;
enableZshIntegration = true;
package = ghosttyWithGL;
settings = {
confirm-close-surface = false;
copy-on-select = false;
title-report = true;
custom-shader = "${shaders}/cursor_warp.glsl";
};
};
}
+2 -182
View File
@@ -1,114 +1,12 @@
{ inputs, pkgs, lib, config, ... }: let {
helixSteel =
inputs.helix-steel.packages.${pkgs.system}.default.overrideAttrs (old: {
cargoBuildFlags = (old.cargoBuildFlags or []) ++ [
"--features"
"steel,git"
];
});
comment-headers = pkgs.fetchurl {
url = "https://github.com/codingvivi/comment-dividers.hx/raw/refs/heads/main/comment_headers.scm";
name = "comment_headers.scm";
hash = "sha256-ohgn6DFJl0rdRJuri6Frs/uUlUsPxMvPHDuw4FS3qEE=";
};
patched-comment-headers = pkgs.runCommand "comment_headers.scm" { } ''
install -m 0644 ${comment-headers} "$out"
${pkgs.python3}/bin/python3 - <<'PY'
from pathlib import Path
import os
import sys
p = Path(os.environ["out"])
s = p.read_text()
start_marker = "(define (get-block-delims)"
end_marker = "(define (delete_till_first_nonwhitespace!)"
try:
start = s.index(start_marker)
end = s.index(end_marker, start)
except ValueError as e:
sys.exit(f"failed to find function markers: {e}")
new_get_block_delims = """(define (get-block-delims)
(helix.static.open_above)
(helix.static.insert_string "test_string")
(helix.static.normal_mode)
(helix.static.extend_to_line_bounds)
(helix.static.trim_selections)
(helix.static.toggle_comments)
(let* ([commented-test-string (helix.static.current-highlighted-text!)]
[strings-without-whitespace (split-whitespace commented-test-string)])
(delete-line-noyank!)
(cond
[(and (> (length strings-without-whitespace) 1)
(equal? (last strings-without-whitespace) "test_string"))
(list (first strings-without-whitespace) "")]
[(> (length strings-without-whitespace) 2)
(list (first strings-without-whitespace) (last strings-without-whitespace))]
[else
(list "" "")])))
"""
s = s[:start] + new_get_block_delims + s[end:]
old = "(make-line line-length fill-pattern #f padding-pattern)"
new = "(make-line line-length \"\" fill-pattern padding-pattern)"
if old not in s:
sys.exit("failed to find insert-divider make-line call")
s = s.replace(old, new)
p.write_text(s)
PY
'';
in {
home.packages = with pkgs; [
asm-lsp
fasm
steel
wakatime-cli
];
home.activation.installWakatimeHx = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
export PATH="${pkgs.steel}/bin:$PATH"
export STEEL_HOME="${config.xdg.dataHome}/steel"
if [ ! -f "$STEEL_HOME/cogs/wakatime/wakatime.scm" ]; then
forge pkg install --git https://github.com/Xerxes-2/wakatime.hx.git
fi
'';
programs.helix = { programs.helix = {
enable = true; enable = true;
package = helixSteel;
defaultEditor = true; defaultEditor = true;
languages = {
language-server.asm-lsp.command = "asm-lsp";
language = [
{
name = "nasm";
file-types = [ "asm" "inc" ];
comment-token = ";";
language-servers = [ "asm-lsp" ];
}
];
};
settings = { settings = {
# theme = "catppuccin-mocha"; # theme = "catppuccin-mocha";
editor = { editor = {
rulers = [ 81 ];
insert-final-newline = false; insert-final-newline = false;
indent-guides.render = true;
whitespace.render = { whitespace.render = {
space = "all"; space = "all";
tab = "all"; tab = "all";
@@ -117,86 +15,8 @@ in {
newline = "none"; newline = "none";
}; };
cursor-shape = { indent-guides.render = true;
normal = "block";
insert = "bar";
select = "underline";
};
};
keys.normal = {
space = {
C-a = {
b = ":fasm-build";
r = ":fasm-run";
c = ":fasm-clean";
};
C-c = {
h = ":comment-h1";
j = ":comment-h2";
k = ":comment-h3";
d = ":comment-divider";
};
};
S-down = ["extend_to_line_bounds" "delete_selection" "paste_after"];
S-up = ["extend_to_line_bounds" "delete_selection" "move_line_up" "paste_before"];
}; };
}; };
}; };
xdg.configFile = {
"asm-lsp/.asm-lsp.toml".text = ''
[default_config]
assembler = "fasm"
instruction_set = "x86/x86-64"
[opts]
compiler = "fasm"
diagnostics = true
default_diagnostics = true
'';
"helix/cogs/comment_headers.scm".source = patched-comment-headers;
"helix/helix.scm".text = ''
(require (prefix-in div. "cogs/comment_headers.scm"))
(require (prefix-in helix. "helix/commands.scm"))
(provide comment-h1
comment-h2
comment-h3
comment-divider
fasm-build
fasm-run
fasm-clean)
(define (comment-h1)
(div.insert-h1!))
(define (comment-h2)
(div.insert-h2!))
(define (comment-h3)
(div.insert-h3!))
(define (comment-divider)
(div.insert-divider! 80 "~"))
(define (fasm-build)
(helix.write)
(helix.run-shell-command "just" "build"))
(define (fasm-run)
(helix.write)
(helix.run-shell-command "just" "run"))
(define (fasm-clean)
(helix.run-shell-command "just" "clean"))
'';
"helix/init.scm".text = ''
;; Steel init file
(require "wakatime/wakatime.scm")
'';
};
} }
-231
View File
@@ -1,231 +0,0 @@
{ pkgs, lib, config, osConfig, inputs, username, ... }:
let
optImport = path: lib.optional (builtins.pathExists path) path;
hostname = osConfig.networking.hostName;
hyprLua = import ./hyprland/lua.nix { inherit lib; };
inherit (hyprLua) bind bindWithFlags exec onStart;
direction = {
left = "l";
right = "r";
up = "u";
down = "d";
};
workspaceBinds = lib.concatMap (workspace:
let
key = if workspace == 10 then "0" else toString workspace;
workspaceValue = toString workspace;
in [
(bind "SUPER + ${key}" "hl.dsp.focus({ workspace = ${workspaceValue} })")
(bind "SUPER + SHIFT + ${key}" "hl.dsp.window.move({ workspace = ${workspaceValue}, follow = false })")
]
) (lib.range 1 10);
in {
imports = [
./hyprland/zoom.nix
] ++
optImport ../../host/${hostname}/modules/hyprland.nix ++
optImport ../../user/${username}/modules/hyprland.nix;
home.packages = with pkgs; [
ghostty
pamixer
clipse
wl-clipboard
wl-clip-persist
xclip
awww
wifitui
];
wayland.windowManager.hyprland = {
enable = true;
configType = "lua";
xwayland.enable = true;
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
plugins = with inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}; [
# hyprbars # Version mismatch
];
settings = {
config = {
ecosystem = {
no_donation_nag = true;
no_update_news = true;
};
cursor.no_hardware_cursors = 1;
debug = {
disable_logs = false;
enable_stdout_logs = true;
};
general."col.inactive_border" = lib.mkForce "rgba(00000000)";
decoration = {
inactive_opacity = lib.mkDefault 0.95;
border_part_of_window = false;
};
misc.focus_on_activate = true;
input = {
kb_layout = "us,ru";
kb_options = "grp:caps_toggle";
numlock_by_default = true;
follow_mouse = 1;
touchpad.natural_scroll = false;
sensitivity = 0;
};
gestures = {
workspace_swipe_invert = true;
workspace_swipe_distance = 200;
workspace_swipe_forever = true;
};
};
env = [
{ _args = [ "XDG_SESSION_TYPE" "wayland" ]; }
{ _args = [ "QT_QPA_PLATFORM" "wayland" ]; }
{ _args = [ "QT_QPA_PLATFORMTHEME" "xdgdesktopportal" ]; }
{ _args = [ "GTK_USE_PORTAL" "1" ]; }
{ _args = [ "TDESKTOP_USE_GTK_FILE_DIALOG" "1" ]; }
{ _args = [ "NIXOS_OZONE_WL" "1" ]; }
{ _args = [ "ELECTRON_OZONE_PLATFORM_HINT" "auto" ]; }
{ _args = [ "XDG_CURRENT_DESKTOP" "Hyprland" ]; }
{ _args = [ "XDG_SESSION_DESKTOP" "Hyprland" ]; }
{ _args = [ "XCURSOR_SIZE" (toString config.stylix.cursor.size) ]; }
{ _args = [ "XCURSOR_THEME" config.stylix.cursor.name ]; }
{ _args = [ "XDG_SCREENSHOTS_DIR" "~/screens" ]; }
];
gesture = [
{
fingers = 3;
direction = "horizontal";
action = "workspace";
}
];
workspace_rule = [
{
workspace = "w[t1]";
gaps_out = 0;
}
];
window_rule = [
{ match.class = "imv"; float = true; }
{ match.class = "feh"; float = true; }
{ match.class = "mpv"; float = true; }
{ match.title = "Список друзей"; float = true; }
{ match.title = "wifitui"; float = true; }
{ match.title = "pulsemixer"; float = true; }
{ match.title = "clipse"; float = true; }
{ match.title = "clipse"; size = [ 622 652 ]; }
{ match.focus = true; rounding = 0; }
{
match = {
float = false;
workspace = "w[t1]";
};
border_size = 0;
}
];
on = lib.mkBefore [
(onStart [
"systemctl --user start plasma-polkit-agent"
"${lib.getExe' pkgs.dbus "dbus-update-activation-environment"} --systemd --all"
"systemctl --user import-environment XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE WAYLAND_DISPLAY DISPLAY GTK_USE_PORTAL QT_QPA_PLATFORMTHEME TDESKTOP_USE_GTK_FILE_DIALOG NIXOS_OZONE_WL ELECTRON_OZONE_PLATFORM_HINT"
"awww-daemon"
"wl-clip-persist --clipboard both"
"clipse -listen"
"${lib.getExe' pkgs.udiskie "udiskie"}"
])
];
bind = [
(bind "SUPER + V" (exec "ghostty --title=clipse -e clipse"))
(bind "SUPER + RETURN" (exec "ghostty"))
(bind "SUPER + Q" "hl.dsp.window.close()")
(bind "SUPER + M" "hl.dsp.exit()")
(bind "SUPER + E" (exec "ghostty -e sh -c yazi"))
(bind "SUPER + F" "hl.dsp.window.float({ action = \"toggle\" })")
(bind "SUPER + P" "hl.dsp.window.pseudo({ action = \"toggle\" })")
(bind "SUPER + J" "hl.dsp.layout(\"togglesplit\")")
(bind "SUPER + K" "hl.dsp.layout(\"swapsplit\")")
(bind "SUPER + LEFT" "hl.dsp.focus({ direction = \"${direction.left}\" })")
(bind "SUPER + RIGHT" "hl.dsp.focus({ direction = \"${direction.right}\" })")
(bind "SUPER + UP" "hl.dsp.focus({ direction = \"${direction.up}\" })")
(bind "SUPER + DOWN" "hl.dsp.focus({ direction = \"${direction.down}\" })")
(bind "SUPER + SHIFT + LEFT" "hl.dsp.window.swap({ direction = \"${direction.left}\" })")
(bind "SUPER + SHIFT + RIGHT" "hl.dsp.window.swap({ direction = \"${direction.right}\" })")
(bind "SUPER + SHIFT + UP" "hl.dsp.window.swap({ direction = \"${direction.up}\" })")
(bind "SUPER + SHIFT + DOWN" "hl.dsp.window.swap({ direction = \"${direction.down}\" })")
(bind "SUPER + CTRL + LEFT" "hl.dsp.window.resize({ x = -60, y = 0, relative = true })")
(bind "SUPER + CTRL + RIGHT" "hl.dsp.window.resize({ x = 60, y = 0, relative = true })")
(bind "SUPER + CTRL + UP" "hl.dsp.window.resize({ x = 0, y = -60, relative = true })")
(bind "SUPER + CTRL + DOWN" "hl.dsp.window.resize({ x = 0, y = 60, relative = true })")
] ++ workspaceBinds ++ [
(bind "SUPER + SHIFT + F" "hl.dsp.window.fullscreen({ action = \"toggle\", mode = \"fullscreen\" })")
(bind "SUPER + mouse_down" "hl.dsp.focus({ workspace = \"e-1\" })")
(bind "SUPER + mouse_up" "hl.dsp.focus({ workspace = \"e+1\" })")
(bind "SUPER + F3" (exec "${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set +33%"))
(bind "SUPER + F2" (exec "${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set 33%-"))
(bind "XF86AudioMute" (exec "pamixer -t"))
(bind "XF86AudioMicMute" (exec "pamixer --default-source -m"))
(bind "XF86AudioPlay" (exec "${lib.getExe pkgs.playerctl} play-pause"))
(bind "XF86Explorer" (exec "ghostty -e sh -c yazi"))
(bind "XF86Mail" (exec "thunderbird"))
(bind "XF86WWW" (exec "google-chrome-stable"))
(bind "XF86MonBrightnessDown" (exec "${lib.getExe pkgs.brightnessctl} set 5%-"))
(bind "XF86MonBrightnessUp" (exec "${lib.getExe pkgs.brightnessctl} set +5%"))
(bindWithFlags "XF86AudioRaiseVolume" (exec "pamixer -i 5") { repeating = true; })
(bindWithFlags "XF86AudioLowerVolume" (exec "pamixer -d 5") { repeating = true; })
(bindWithFlags "XF86AudioPrev" (exec "${lib.getExe pkgs.playerctl} position 5-") { click = true; })
(bindWithFlags "XF86AudioNext" (exec "${lib.getExe pkgs.playerctl} position 5+") { click = true; })
(bindWithFlags "XF86AudioPrev" (exec "${lib.getExe pkgs.playerctl} previous") { long_press = true; })
(bindWithFlags "XF86AudioNext" (exec "${lib.getExe pkgs.playerctl} next") { long_press = true; })
(bindWithFlags "SUPER + mouse:272" "hl.dsp.window.drag()" { mouse = true; })
(bindWithFlags "SUPER + mouse:273" "hl.dsp.window.resize()" { mouse = true; })
];
};
};
xdg.portal = {
enable = true;
extraPortals = [
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-termfilechooser
];
config = {
common = {
default = [ "hyprland" "gtk" ];
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
};
hyprland = {
default = [ "hyprland" "gtk" ];
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
};
};
};
}
-35
View File
@@ -1,35 +0,0 @@
{ lib }:
let
inline = lib.generators.mkLuaInline;
quote = builtins.toJSON;
in rec {
inherit inline;
exec = command: "hl.dsp.exec_cmd(${quote command})";
bind = keys: dispatcher: {
_args = [
keys
(inline dispatcher)
];
};
bindWithFlags = keys: dispatcher: flags: {
_args = [
keys
(inline dispatcher)
flags
];
};
onStart = commands: {
_args = [
"hyprland.start"
(inline (
"function()\n"
+ lib.concatMapStringsSep "\n" (command: " hl.exec_cmd(${quote command})") commands
+ "\nend"
))
];
};
}
-32
View File
@@ -1,32 +0,0 @@
{ lib, ... }:
let
hyprLua = import ./lua.nix { inherit lib; };
inherit (hyprLua) bind bindWithFlags;
resetZoom = ''function()
hl.config({ cursor = { zoom_factor = 1 } })
end'';
zoomIn = ''function()
local current = hl.get_config("cursor.zoom_factor")
hl.config({ cursor = { zoom_factor = current * 1.1 } })
end'';
zoomOut = ''function()
local current = hl.get_config("cursor.zoom_factor")
hl.config({ cursor = { zoom_factor = math.max(1, current * 0.9) } })
end'';
in {
wayland.windowManager.hyprland.settings.bind = [
(bind "SUPER + SHIFT + mouse_up" resetZoom)
(bind "SUPER + SHIFT + mouse_down" resetZoom)
(bind "SUPER + SHIFT + minus" resetZoom)
(bind "SUPER + SHIFT + KP_SUBTRACT" resetZoom)
(bind "SUPER + SHIFT + 0" resetZoom)
(bindWithFlags "SUPER + equal" zoomIn { repeating = true; })
(bindWithFlags "SUPER + minus" zoomOut { repeating = true; })
(bindWithFlags "SUPER + KP_ADD" zoomIn { repeating = true; })
(bindWithFlags "SUPER + KP_SUBTRACT" zoomOut { repeating = true; })
];
}
+2 -6
View File
@@ -1,11 +1,7 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
let
hyprLua = import ./hyprland/lua.nix { inherit lib; };
in
lib.mkIf config.programs.hyprlock.enable { lib.mkIf config.programs.hyprlock.enable {
wayland.windowManager.hyprland.settings.on = [ wayland.windowManager.hyprland.settings.exec-once = [ "hyprlock" ];
(hyprLua.onStart [ "hyprlock" ])
];
programs.hyprlock = let programs.hyprlock = let
image = pkgs.fetchurl { image = pkgs.fetchurl {
+14
View File
@@ -0,0 +1,14 @@
{ 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";
}
+20 -12
View File
@@ -1,13 +1,21 @@
{ config, lib, ... }: let { config, pkgs, ... }:
colors = config.lib.stylix.colors.withHashtag; let
accent = colors.${config.stylix.accent}; colors = config.lib.stylix.colors;
in { in {
services.mako = { home.packages = [ pkgs.mako ];
enable = true; xdg.configFile."mako/config".text = ''
background-color=#${colors.base00}
text-color=#${colors.base05}
border-color=#${colors.base0B}
border-radius=10
margin=16
progress-color=over #${colors.base0A}
default-timeout=5000
settings = { [urgency=high]
border-color = lib.mkForce accent; border-color=#${colors.base09}
default-timeout = 5000;
}; [urgency=low]
}; border-color=#${colors.base04}
} '';
}
+4 -4
View File
@@ -1,11 +1,11 @@
{ config, pkgs, ... }: let { config, pkgs, ... }: let
icon = pkgs.fetchurl { icon = pkgs.fetchurl {
url = "https://cloud.lair.moe/pub/nixos-chan.webp?raw"; url = "https://preview.redd.it/a2nga4jvjy291.png?width=640&crop=smart&auto=webp&s=7d1458b41101c960bc13c28a6b92c5a6ddc20210";
name = "nixos-chan.webp"; name = "nixos-chan.png";
sha256 = "sha256-0majB9ljjMdZwvOijEgWdFKxWLje5tHgXHBJUWZfHfY="; sha256 = "sha256-9pleL+PiiylT8/aWw0iGve1iY3h0XohSQ7MVILzabHY=";
}; };
in { in {
home.packages = [ pkgs.fastfetch ]; home.packages = [ pkgs.neofetch ];
xdg.configFile."neofetch/config.conf".text = '' xdg.configFile."neofetch/config.conf".text = ''
print_info() { print_info() {
info title info title
+2 -6
View File
@@ -1,10 +1,6 @@
{ pkgs-pinned, lib, osConfig, ... }: { pkgs-stable, ... }: {
home.packages = with pkgs-stable; [
lib.mkIf (!osConfig.host.laptop) {
home.packages = with pkgs-pinned; [
(blender.override { cudaSupport = true; }) (blender.override { cudaSupport = true; })
aseprite aseprite
krita
gimp
]; ];
} }
+8
View File
@@ -0,0 +1,8 @@
{ pkgs, pkgs-stable, ... }: {
home.packages = with pkgs-stable; [
vscode
jetbrains.pycharm-community
jetbrains.idea-community
android-studio
];
}
-7
View File
@@ -1,7 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
burpsuite
binwalk
exiftool
];
}
+4 -7
View File
@@ -1,15 +1,12 @@
{ pkgs, pkgs-stable, ... }: { { pkgs, inputs, pkgs-stable, ... }: {
home.packages = with pkgs; [ home.packages = with pkgs; [
ayugram-desktop google-chrome
vesktop inputs.ayugram-desktop.packages.${pkgs.system}.ayugram-desktop
pkgs-stable.vesktop
obs-studio obs-studio
mpv mpv
imhex
obsidian obsidian
pkgs-stable.qbittorrent
thunderbird thunderbird
libreoffice libreoffice
pear-desktop
( pkgs.callPackage ../../../drv/mumble.nix {} )
]; ];
} }
+3 -3
View File
@@ -1,4 +1,4 @@
{ stdenv, colors, accent ? colors.base0B, ... }: { stdenv, lib, config, colors, ... }:
stdenv.mkDerivation { stdenv.mkDerivation {
name = "AGS theme"; name = "AGS theme";
@@ -9,9 +9,9 @@
echo \$bg: \#${colors.base00}\; > colors.scss echo \$bg: \#${colors.base00}\; > colors.scss
echo \$surface0: \#${colors.base02}\; >> colors.scss echo \$surface0: \#${colors.base02}\; >> colors.scss
echo \$fg: \#${colors.base05}\; >> colors.scss echo \$fg: \#${colors.base05}\; >> colors.scss
echo \$accent: \#${accent}\; >> colors.scss echo \$accent: \#${colors.base0B}\; >> colors.scss
echo \#${accent} > accent.css echo \#${colors.base0B} > accent.css
''; '';
installPhase = '' installPhase = ''
@@ -1,2 +0,0 @@
accent.css
colors.scss
+18 -26
View File
@@ -3,23 +3,17 @@
$radius: 10px; $radius: 10px;
* {
all: unset;
}
%item { %item {
all: unset;
background: $bg; background: $bg;
border-radius: $radius; border-radius: $radius;
padding: 6px 8px; padding: 4px;
& + &, .item + &, & + .item { margin-left: 4px; } & + &, .item + & { margin-left: 4px; }
icon + label { margin-left: 4px; } label { margin: 0 8px; }
} }
.item + .item { margin-left: 4px; }
window.Bar { window.Bar {
border: none; border: none;
box-shadow: none; box-shadow: none;
@@ -33,10 +27,9 @@ window.Bar {
} }
.Workspaces { .Workspaces {
padding: 0;
button { button {
margin: 0; all: unset;
&:hover label { &:hover label {
background: $surface0; background: $surface0;
color: $accent; color: $accent;
@@ -51,7 +44,7 @@ window.Bar {
label { label {
transition: 200ms; transition: 200ms;
padding: 0 6px; padding: 0 6px;
margin: 0px; margin: 2px;
border-radius: $radius; border-radius: $radius;
border: 1pt solid transparent; border: 1pt solid transparent;
} }
@@ -66,12 +59,12 @@ window.Bar {
.Layout.en { color: $accent; } .Layout.en { color: $accent; }
.SysTray button { .SysTray button {
padding: 4px; all: unset;
padding: 8px;
border-radius: inherit; border-radius: inherit;
&:hover { &:hover {
background: $surface0; background: $surface0;
border-radius: 4px;
} }
} }
@@ -89,17 +82,16 @@ window.Bar {
} }
} }
.Battery label {
padding-left: 0;
margin-left: 0;
}
.Time { padding: 0 8px; }
.AudioSlider icon { margin-left: 8px; }
.Workspaces, .Wifi, .Layout, .Media, .SysTray, .AudioSlider, .Battery, .Time { .Workspaces, .Wifi, .Layout, .Media, .SysTray, .AudioSlider, .Battery, .Time {
@extend %item; @extend %item;
} }
.Wifi, .AudioSlider {
&, button {
&:hover { background-color: $surface0; }
&:active {
background-color: $accent;
color: $bg;
}
}
}
} }
@@ -1,16 +1,11 @@
import { bind } from "astal" import { bind } from "astal"
import { execAsync } from "astal/process"
import Wp from "gi://AstalWp" import Wp from "gi://AstalWp"
export default function Audio() { export default function Audio() {
const speaker = Wp.get_default()?.audio.defaultSpeaker! const speaker = Wp.get_default()?.audio.defaultSpeaker!
return <button return <box className="AudioSlider">
className="AudioSlider" <icon icon={bind(speaker, "volumeIcon")} />
onClicked={() => { execAsync("ghostty --title=pulsemixer -e pulsemixer") }}> <label label={bind(speaker, "volume").as(v => `${Math.floor(v*100)}%`)} />
<box> </box>
<icon icon={bind(speaker, "volumeIcon")} />
<label label={bind(speaker, "volume").as(v => `${Math.floor(v*100)}%`)} />
</box>
</button>
} }
@@ -6,13 +6,11 @@ export default function Wifi() {
const network = Network.get_default() const network = Network.get_default()
const wifi = bind(network, "wifi") const wifi = bind(network, "wifi")
return <box return <box visible={wifi.as(Boolean)}>
visible={wifi.as(Boolean)}
className="item">
{wifi.as(wifi => wifi && ( {wifi.as(wifi => wifi && (
<button <button
className="Wifi" className="Wifi"
onClicked={() => {execAsync("ghostty --title=nmtui -e nmtui")}}> onClicked={() => {execAsync("kitty nmtui")}}>
<box> <box>
<icon <icon
tooltipText={bind(wifi, "ssid").as(String)} tooltipText={bind(wifi, "ssid").as(String)}
+1 -27
View File
@@ -1,4 +1,4 @@
{ pkgs, ... }: { { pkgs, inputs, ... }: {
home.packages = with pkgs; [ home.packages = with pkgs; [
scrot scrot
ffmpeg ffmpeg
@@ -19,31 +19,5 @@
trashy trashy
dig dig
mtr mtr
imagemagick
wl-clipboard
]; ];
xdg.mimeApps = {
enable = true;
defaultApplications = {
"image/bmp" = "imv.desktop";
"image/gif" = "imv.desktop";
"image/jpeg" = "imv.desktop";
"image/jpg" = "imv.desktop";
"image/pjpeg" = "imv.desktop";
"image/png" = "imv.desktop";
"image/tiff" = "imv.desktop";
"image/x-bmp" = "imv.desktop";
"image/x-pcx" = "imv.desktop";
"image/x-png" = "imv.desktop";
"image/x-portable-anymap" = "imv.desktop";
"image/x-portable-bitmap" = "imv.desktop";
"image/x-portable-graymap" = "imv.desktop";
"image/x-portable-pixmap" = "imv.desktop";
"image/x-tga" = "imv.desktop";
"image/x-xbitmap" = "imv.desktop";
"image/heif" = "imv.desktop";
"image/avif" = "imv.desktop";
};
};
} }
+234
View File
@@ -0,0 +1,234 @@
{ pkgs, lib, config, collection, swww_flags, inputs }: {
home.packages = with pkgs; [
kitty
pamixer
wofi
clipse
grimblast
wl-clipboard
cliphist
];
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"${lib.getExe pkgs.swww} img {folder}/{filename} ${swww_flags}")
'';
clipsync = pkgs.writers.writeBash "clipsync" ''
while ${lib.getExe pkgs.clipnotify}; do
${lib.getExe pkgs.xclip} -q -sel clip -t image/png -o > /dev/null && \
${lib.getExe pkgs.xclip} -sel clip -t image/png -o | wl-copy
${lib.getExe pkgs.xclip} -q -sel clip -o > /dev/null && \
${lib.getExe pkgs.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 # Version mismatch
];
settings = {
"$mainMod" = "SUPER";
ecosystem.no_donation_nag = true;
env = [
"LIBVA_DRIVER_NAME,nvidia"
"__GLX_VENDOR_LIBRARY_NAME,nvidia"
"GBM_BACKEND,nvidia"
"XDG_SESSION_TYPE,wayland"
"QT_QPA_PLATFORM,wayland"
"XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_DESKTOP,Hyprland"
"WLR_NO_HARDWARE_CURSORS,1"
"XCURSOR_SIZE,36"
"XDG_SCREENSHOTS_DIR,~/screens"
];
cursor.no_hardware_cursors = true;
debug = {
disable_logs = false;
enable_stdout_logs = true;
};
input = {
kb_layout = "us,ru";
kb_variant = "lang";
kb_options = "grp:caps_toggle";
follow_mouse = 1;
touchpad = {
natural_scroll = false;
};
sensitivity = 0;
};
windowrule = [
"float, ^(imv)$"
"float, ^(feh)$"
"float, ^(mpv)$"
"float, ^(nmtui)$"
"float, title:^(Список друзей)"
"move onscreen cursor -50% -50%, ^(xdragon)$"
];
windowrulev2 = [
"float, class:(clipse)"
"size 622 652, class:(clipse)"
];
exec-once = [
"systemctl --user start plasma-polkit-agent"
"${lib.getExe' pkgs.swww "swww-daemon"}"
"${lib.getExe wallpaper_changer}"
"${clipsync}"
"clipse -listen"
"${lib.getExe' pkgs.udiskie "udiskie"}"
];
bind = [
"$mainMod, V, exec, kitty --class clipse -e clipse"
"$mainMod, Return, exec, kitty"
"$mainMod, Q, killactive,"
"$mainMod, M, exit,"
"$mainMod, E, exec, kitty -e sh -c yazi"
"$mainMod, F, togglefloating,"
"$mainMod, D, exec, wofi --show drun"
"$mainMod, P, pseudo, # dwindle"
"$mainMod, J, togglesplit, # dwindle"
# Move focus with mainMod + arrow keys
"$mainMod, left, movefocus, l"
"$mainMod, right, movefocus, r"
"$mainMod, up, movefocus, u"
"$mainMod, down, movefocus, d"
# Moving windows
"$mainMod SHIFT, left, swapwindow, l"
"$mainMod SHIFT, right, swapwindow, r"
"$mainMod SHIFT, up, swapwindow, u"
"$mainMod SHIFT, down, swapwindow, d"
# Window resizing X Y
"$mainMod CTRL, left, resizeactive, -60 0"
"$mainMod CTRL, right, resizeactive, 60 0"
"$mainMod CTRL, up, resizeactive, 0 -60"
"$mainMod CTRL, down, resizeactive, 0 60"
# Switch workspaces with mainMod + [0-9]
"$mainMod, 1, workspace, 1"
"$mainMod, 2, workspace, 2"
"$mainMod, 3, workspace, 3"
"$mainMod, 4, workspace, 4"
"$mainMod, 5, workspace, 5"
"$mainMod, 6, workspace, 6"
"$mainMod, 7, workspace, 7"
"$mainMod, 8, workspace, 8"
"$mainMod, 9, workspace, 9"
"$mainMod, 0, workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"$mainMod SHIFT, 1, movetoworkspacesilent, 1"
"$mainMod SHIFT, 2, movetoworkspacesilent, 2"
"$mainMod SHIFT, 3, movetoworkspacesilent, 3"
"$mainMod SHIFT, 4, movetoworkspacesilent, 4"
"$mainMod SHIFT, 5, movetoworkspacesilent, 5"
"$mainMod SHIFT, 6, movetoworkspacesilent, 6"
"$mainMod SHIFT, 7, movetoworkspacesilent, 7"
"$mainMod SHIFT, 8, movetoworkspacesilent, 8"
"$mainMod SHIFT, 9, movetoworkspacesilent, 9"
"$mainMod SHIFT, 0, movetoworkspacesilent, 10"
"$mainMod SHIFT, F, fullscreen"
# Scroll through existing workspaces with mainMod + scroll
"$mainMod, mouse_down, workspace, e+1"
"$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%-"
# Volume and Media Control
", XF86AudioRaiseVolume, exec, pamixer -i 5 "
", XF86AudioLowerVolume, exec, pamixer -d 5 "
", XF86AudioMute, exec, pamixer -t"
", XF86AudioMicMute, exec, pamixer --default-source -m"
# Brightness control
", XF86MonBrightnessDown, exec, brightnessctl set 5%- "
", XF86MonBrightnessUp, exec, brightnessctl set +5% "
# Waybar
"$mainMod, B, exec, pkill -SIGUSR1 waybar"
#"$mainMod, W, exec, pkill -SIGUSR2 waybar"
"$mainMod, W, exec, ${lib.getExe wallpaper_changer}"
];
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
];
};
};
}
+1 -11
View File
@@ -1,14 +1,4 @@
{ lib, ... }: { {
# Keep qtct/Kvantum for styling, but tell qtct to delegate standard file
# dialogs to xdg-desktop-portal. This is what makes AyuGram/Telegram-like Qt
# apps use the Yazi picker instead of Qt's built-in dialog.
stylix.targets.qt.standardDialogs = "xdgdesktopportal";
home.sessionVariables = {
QT_QPA_PLATFORMTHEME = lib.mkForce "xdgdesktopportal";
TDESKTOP_USE_GTK_FILE_DIALOG = "1";
};
qt = { qt = {
enable = true; enable = true;
platformTheme.name = "qtct"; platformTheme.name = "qtct";
-182
View File
@@ -1,182 +0,0 @@
{ pkgs, config, ... }: let
c = config.lib.stylix.colors.withHashtag;
font = config.stylix.fonts.sansSerif.name;
in {
programs.quickshell = {
enable = true;
activeConfig = "control-center";
configs = {
control-center = pkgs.writeTextDir "shell.qml" ''
import Quickshell
import Quickshell.Wayland
import Quickshell.Hyprland
import QtQuick
import QtQuick.Layouts
PanelWindow {
id: root
anchors {
top: true
right: true
}
implicitWidth: 360
implicitHeight: wrapper.implicitHeight
color: "transparent"
margins {
top: -12
right: 0
}
exclusionMode: ExclusionMode.Normal
exclusiveZone: 0
WlrLayershell.namespace: "qs-control-center"
WlrLayershell.layer: WlrLayer.Overlay
WlrLayershell.keyboardFocus: WlrKeyboardFocus.OnDemand
Item {
id: wrapper
anchors.fill: parent
readonly property int outerMargin: 12
readonly property int innerMargin: 18
readonly property int buttonHeight: 48
readonly property int spacingSize: 14
implicitWidth: 360
implicitHeight: panel.implicitHeight + outerMargin * 2
Rectangle {
id: panel
x: wrapper.outerMargin
y: wrapper.outerMargin
width: parent.width - wrapper.outerMargin * 2
height: implicitHeight
implicitHeight: content.implicitHeight + wrapper.innerMargin * 2
radius: 20
color: "${c.base00}"
border.color: "${c.base03}"
border.width: 1
ColumnLayout {
id: content
x: wrapper.innerMargin
y: wrapper.innerMargin
width: parent.width - wrapper.innerMargin * 2
spacing: wrapper.spacingSize
Text {
text: "Control Center"
color: "${c.base05}"
font.family: "${font}"
font.pixelSize: 22
font.bold: true
}
Rectangle {
Layout.fillWidth: true
height: wrapper.buttonHeight
radius: 12
color: audioMouse.containsMouse ? "${c.base02}" : "${c.base01}"
border.color: "${c.base03}"
border.width: 1
Text {
anchors.centerIn: parent
text: "Audio settings"
color: "${c.base05}"
font.family: "${font}"
font.pixelSize: 15
}
MouseArea {
id: audioMouse
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: Hyprland.dispatch("exec pavucontrol")
}
}
Rectangle {
Layout.fillWidth: true
height: wrapper.buttonHeight
radius: 12
color: networkMouse.containsMouse ? "${c.base02}" : "${c.base01}"
border.color: "${c.base03}"
border.width: 1
Text {
anchors.centerIn: parent
text: "Network settings"
color: "${c.base05}"
font.family: "${font}"
font.pixelSize: 15
}
MouseArea {
id: networkMouse
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: Hyprland.dispatch("exec nm-connection-editor")
}
}
Rectangle {
Layout.fillWidth: true
height: wrapper.buttonHeight
radius: 12
color: bluetoothMouse.containsMouse ? "${c.base02}" : "${c.base01}"
border.color: "${c.base03}"
border.width: 1
Text {
anchors.centerIn: parent
text: "Bluetooth"
color: "${c.base05}"
font.family: "${font}"
font.pixelSize: 15
}
MouseArea {
id: bluetoothMouse
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: Hyprland.dispatch("exec blueman-manager")
}
}
Rectangle {
Layout.fillWidth: true
height: 1
color: "${c.base03}"
}
Text {
text: "Quickshell + Hyprland"
color: "${c.base04}"
font.family: "${font}"
font.pixelSize: 13
}
}
}
}
}
'';
};
};
}
-12
View File
@@ -1,12 +0,0 @@
{
programs.ssh = {
enable = true;
enableDefaultConfig = false;
settings = {
"*" = {
serverAliveInterval = 30;
serverAliveCountMax = 5;
};
};
};
}
-40
View File
@@ -1,40 +0,0 @@
{ config, lib, ... }: let
inherit (lib) mkOption types;
base16Names = [
"base00"
"base01"
"base02"
"base03"
"base04"
"base05"
"base06"
"base07"
"base08"
"base09"
"base0A"
"base0B"
"base0C"
"base0D"
"base0E"
"base0F"
];
in {
options.stylix.accent = mkOption {
type = types.enum base16Names;
default = "base0B";
description = ''
Base16 colour used as the user accent.
Use it as:
config.lib.stylix.colors.${config.stylix.accent}
config.lib.stylix.colors.withHashtag.${config.stylix.accent}
This module deliberately does not extend config.lib.stylix.colors: Stylix
exports that value as a generated base16 attrset/functor, and replacing or
partially extending it can break Stylix targets which expect metadata such
as `scheme` to be present.
'';
};
}
-17
View File
@@ -1,17 +0,0 @@
{ lib, ... }:
let
hyprLua = import ./hyprland/lua.nix { inherit lib; };
in {
services = {
walker = {
enable = true;
systemd.enable = true;
};
elephant.enable = true;
};
wayland.windowManager.hyprland.settings.bind = [
(hyprLua.bind "SUPER + D" (hyprLua.exec "walker"))
];
}
-77
View File
@@ -1,77 +0,0 @@
{ config, pkgs, lib, ... }: let
c = config.lib.stylix.colors;
wobSocket = ''"''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/wob.sock"'';
volumeStep = pkgs.writeShellScriptBin "volume-step" /*bash*/ ''
volume="$(${lib.getExe' pkgs.wireplumber "wpctl"} get-volume @DEFAULT_AUDIO_SINK@)"
percent="$(printf '%s\n' "$volume" | ${pkgs.gawk}/bin/awk '{print int($2 * 100)}')"
if printf '%s\n' "$volume" | ${pkgs.gnugrep}/bin/grep -q MUTED; then
printf '%s muted\n' "$percent" > ${wobSocket}
else
printf '%s volume\n' "$percent" > ${wobSocket}
fi
'';
brightnessStep = pkgs.writeShellScriptBin "brightness-step" /*bash*/ ''
percent="$(${lib.getExe pkgs.brightnessctl} -m | ${lib.getExe' pkgs.coreutils "cut"} -d, -f4 | ${lib.getExe' pkgs.coreutils "tr"} -d '%')"
printf '%s brightness\n' "$percent" > ${wobSocket}
'';
hyprLua = import ./hyprland/lua.nix { inherit lib; };
in {
systemd.user = {
services.wob.Install.WantedBy = lib.mkForce [ ];
sockets.wob.Install.WantedBy = lib.mkForce [ "sockets.target" ];
};
services.wob = {
enable = true;
systemd = true;
settings = {
"" = {
timeout = 2000;
max = 100;
width = 280;
height = 32;
border_offset = 0;
border_size = 2;
bar_padding = 4;
anchor = "top center";
margin = "0 0 0 0";
overflow_mode = "nowrap";
orientation = "horizontal";
};
"style.volume" = { bar_color = c.base0D; };
"style.brightness" = { bar_color = c.base0A; };
"style.muted" = { bar_color = c.base04; };
};
};
wayland.windowManager.hyprland.settings.bind = [
(hyprLua.bindWithFlags "XF86AudioRaiseVolume" (hyprLua.exec "${lib.getExe volumeStep}") {
repeating = true;
locked = true;
})
(hyprLua.bindWithFlags "XF86AudioLowerVolume" (hyprLua.exec "${lib.getExe volumeStep}") {
repeating = true;
locked = true;
})
(hyprLua.bindWithFlags "XF86MonBrightnessUp" (hyprLua.exec "${lib.getExe brightnessStep}") {
repeating = true;
locked = true;
})
(hyprLua.bindWithFlags "XF86MonBrightnessDown" (hyprLua.exec "${lib.getExe brightnessStep}") {
repeating = true;
locked = true;
})
(hyprLua.bind "XF86AudioMute" (hyprLua.exec "${lib.getExe volumeStep} mute"))
];
}
+7
View File
@@ -0,0 +1,7 @@
{ pkgs, ... }: {
xdg.configFile."wofi/style.css".source = pkgs.fetchurl {
name = "style.css";
url = "https://github.com/joao-vitor-sr/wofi-themes-collection/raw/main/themes/nord.css";
sha256 = "sha256-rMDtE7Q0hmqd9LD+Ur/QR6cMan9ev6e9IyzpwY367c0=";
};
}
+55 -360
View File
@@ -1,366 +1,61 @@
{ pkgs, lib, inputs, ... }: let { pkgs, lib, ... }: let
hostSystem = pkgs.stdenv.hostPlatform.system; yazi-plugins = pkgs.fetchFromGitHub {
owner = "yazi-rs";
yaziPkg = inputs.yazi.packages.${hostSystem}.default.override { repo = "plugins";
_7zz = pkgs._7zz-rar; rev = "07258518f3bffe28d87977bc3e8a88e4b825291b";
}; hash = "sha256-axoMrOl0pdlyRgckFi4DiS+yBKAIHDhVeZQJINh8+wk=";
};
yaziOpen = pkgs.writeShellScriptBin "yazi-open" '' starship = pkgs.fetchFromGitHub {
set -efu owner = "Rolv-Apneseth";
repo = "starship.yazi";
target="''${1:-$HOME}" rev = "d1cd0a38aa6a2c2e86e62a466f43e415f781031e";
sha256 = "sha256-XiEsykudwYmwSNDO41b5layP1DqVa89e6Emv9Qf0mz0=";
case "$target" in };
file://*)
target="$(${lib.getExe pkgs.python3} -c 'import sys, urllib.parse; print(urllib.parse.unquote(urllib.parse.urlparse(sys.argv[1]).path))' "$target")"
;;
esac
if [ -f "$target" ]; then
target="$(dirname "$target")"
fi
if [ ! -e "$target" ]; then
target="$HOME"
fi
exec ${lib.getExe pkgs.ghostty} --title="Yazi" -e ${lib.getExe yaziPkg} "$target"
'';
yaziFileChooser = pkgs.writeShellScriptBin "yazi-file-chooser" ''
set -efu
directory="''${2:-0}"
save="''${3:-0}"
path="''${4:-}"
out="''${5:?missing termfilechooser output path}"
state_dir="''${XDG_STATE_HOME:-$HOME/.local/state}/xdg-desktop-portal-termfilechooser"
last_selected_path="$state_dir/last-selected"
${lib.getExe' pkgs.coreutils "mkdir"} -p "$state_dir"
if [ -s "$last_selected_path" ]; then
IFS= read -r last_selected < "$last_selected_path" || true
if [ -d "$last_selected" ]; then
if [ "$save" = "1" ] && [ -n "$path" ]; then
path="$last_selected/''${path##*/}"
else
path="$last_selected"
fi
fi
fi
if [ -z "$path" ]; then
path="$HOME"
fi
created_placeholder=0
if [ "$save" = "1" ] && [ ! -e "$path" ]; then
placeholder_dir="''${path%/*}"
if [ "$placeholder_dir" != "$path" ]; then
${lib.getExe' pkgs.coreutils "mkdir"} -p "$placeholder_dir"
fi
{
printf '%s\n' 'This file was created by xdg-desktop-portal-termfilechooser.'
printf '%s\n' 'Move/rename it in Yazi, then open/select it to choose the save path.'
} > "$path"
created_placeholder=1
fi
${lib.getExe pkgs.ghostty} --title="Yazi File Picker" -e ${lib.getExe yaziPkg} --chooser-file="$out" --cwd-file="$last_selected_path" "$path"
if [ "$directory" = "1" ] && [ ! -s "$out" ] && [ -s "$last_selected_path" ]; then
IFS= read -r cwd < "$last_selected_path" || true
if [ -n "''${cwd:-}" ] && [ -d "$cwd" ]; then
printf '%s\n' "$cwd" > "$out"
fi
fi
if [ "$created_placeholder" = "1" ] && [ ! -s "$out" ]; then
${lib.getExe' pkgs.coreutils "rm"} -f "$path"
fi
'';
fileManager1 = pkgs.writeShellScriptBin "yazi-filemanager1" ''
exec ${pkgs.python3.withPackages (ps: [ ps.dbus-next ])}/bin/python ${pkgs.writeText "yazi-filemanager1.py" ''
import asyncio
import os
import subprocess
import urllib.parse
from dbus_next.aio import MessageBus
from dbus_next.constants import BusType
from dbus_next.service import ServiceInterface, method
YAZI_OPEN = ${builtins.toJSON (lib.getExe yaziOpen)}
def uri_to_path(uri: str) -> str | None:
parsed = urllib.parse.urlparse(uri)
if parsed.scheme != "file":
return None
return urllib.parse.unquote(parsed.path)
def open_paths(uris: list[str], reveal_items: bool = False) -> None:
for uri in uris:
path = uri_to_path(uri)
if not path:
continue
if reveal_items and os.path.isfile(path):
path = os.path.dirname(path)
subprocess.Popen(
[YAZI_OPEN, path],
start_new_session=True,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
class FileManager1(ServiceInterface):
def __init__(self) -> None:
super().__init__("org.freedesktop.FileManager1")
@method()
def ShowFolders(self, uris: "as", startup_id: "s") -> "":
open_paths(uris)
@method()
def ShowItems(self, uris: "as", startup_id: "s") -> "":
open_paths(uris, reveal_items=True)
@method()
def ShowItemProperties(self, uris: "as", startup_id: "s") -> "":
open_paths(uris, reveal_items=True)
async def main() -> None:
bus = await MessageBus(bus_type=BusType.SESSION).connect()
bus.export("/org/freedesktop/FileManager1", FileManager1())
await bus.request_name("org.freedesktop.FileManager1")
await asyncio.Event().wait()
asyncio.run(main())
''}
'';
in { in {
home.packages = with pkgs; [ programs.yazi = {
( ouch.override { enableUnfree = true; } ) enable = true;
yaziOpen enableZshIntegration = true;
]; shellWrapperName = "y";
home.sessionVariables = { settings = {
GTK_USE_PORTAL = "1"; manager = {
}; show_hidden = true;
};
preview = {
max_width = 1000;
max_height = 1000;
};
};
xdg.configFile."xdg-desktop-portal-termfilechooser/config".text = '' plugins = {
[filechooser] chmod = "${yazi-plugins}/chmod.yazi";
cmd=${lib.getExe yaziFileChooser} full-border = "${yazi-plugins}/full-border.yazi";
default_dir=$HOME max-preview = "${yazi-plugins}/max-preview.yazi";
open_mode=suggested starship = starship;
save_mode=last };
'';
xdg.desktopEntries.yazi = { initLua = ''
name = "Yazi"; require("full-border"):setup()
genericName = "File Manager"; require("starship"):setup()
exec = "${lib.getExe yaziOpen} %U"; '';
terminal = false;
mimeType = [ "inode/directory" ];
categories = [ "System" "FileTools" "FileManager" ];
startupNotify = false;
};
xdg.mimeApps = { keymap = {
enable = true; manager.prepend_keymap = [
defaultApplications = { {
"inode/directory" = "yazi.desktop"; on = "T";
"application/x-gnome-saved-search" = "yazi.desktop"; run = "plugin --sync max-preview";
}; desc = "Maximize or restore the preview pane";
}; }
{
xdg.dataFile."dbus-1/services/org.freedesktop.FileManager1.service".text = '' on = ["c" "m"];
[D-BUS Service] run = "plugin chmod";
Name=org.freedesktop.FileManager1 desc = "Chmod on selected files";
Exec=${lib.getExe fileManager1} }
''; {
on = [ "<C-n>" ];
wayland.windowManager.hyprland.settings.window_rule = [ run = ''shell '${lib.getExe pkgs.xdragon} -x -i -T "$@"' --confirm'';
{ }
match.class = "dragon-drop"; ];
move = [ };
"(cursor_x-(window_w*0.5))" };
"(cursor_y-(window_h*0.5))"
];
}
{
match.title = "Yazi File Picker";
float = true;
}
{
match.title = "Yazi File Picker";
size = [ 1200 800 ];
}
];
programs.yazi = {
package = yaziPkg;
enable = true;
enableZshIntegration = true;
shellWrapperName = "y";
settings = {
mgr = {
show_hidden = true;
};
preview = {
max_width = 1000;
max_height = 1000;
};
plugin = {
preloaders = [
{ url = "*.crdownload"; run = "noop"; }
];
prepend_previewers = [
{ mime = "application/xz"; run = "ouch"; }
{ mime = "application/zip"; run = "ouch"; }
{ mime = "application/rar"; run = "ouch"; }
{ mime = "application/gzip"; run = "ouch"; }
{ mime = "application/7z-compressed"; run = "ouch"; }
];
prepend_fetchers = [
{ group = "git"; url = "*"; run = "git"; }
];
};
};
plugins = let
yaziPlugin = name: pkgs.stdenvNoCC.mkDerivation {
pname = "${name}.yazi";
version = "unstable";
src = inputs.yazi-plugins;
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r ${name}.yazi/* $out/
rm -f $out/LICENSE
cp LICENSE $out/LICENSE
runHook postInstall
'';
};
in with pkgs.yaziPlugins; {
inherit
chmod
ouch
mount
toggle-pane
;
gvfs = {
package = gvfs;
setup = true;
};
full-border = {
package = yaziPlugin "full-border";
setup = true;
};
starship = {
package = starship;
setup = true;
};
git = {
package = yaziPlugin "git";
setup = true;
};
};
initLua = ''
Status:children_add(function()
local h = cx.active.current.hovered
if not h or ya.target_family() ~= "unix" then
return ""
end
return ui.Line {
ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"),
":",
ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"),
" ",
}
end, 500, Status.RIGHT)
'';
keymap = {
mgr.prepend_keymap = [
{
on = "T";
run = "plugin toggle-pane max-preview";
desc = "Maximize or restore the preview pane";
}
{
on = "Y";
run = ''shell -- for path in %s; do echo "file://$path"; done | wl-copy -t text/uri-list'';
desc = "Copy files into system clipboard";
}
{
on = ["c" "m"];
run = "plugin chmod";
desc = "Chmod on selected files";
}
{
on = [ "M" "b" ];
run = "plugin mount";
desc = "Open block-device mount menu";
}
{
on = [ "M" "m" ];
run = "plugin gvfs -- select-then-mount --jump";
desc = "Mount GVFS device and jump to it";
}
{
on = [ "M" "u" ];
run = "plugin gvfs -- select-then-unmount";
desc = "Unmount GVFS device";
}
{
on = [ "M" "U" ];
run = "plugin gvfs -- select-then-unmount --eject";
desc = "Unmount and eject GVFS device";
}
{
on = [ "M" "t" ];
run = "plugin gvfs -- automount-when-cd";
desc = "Enable GVFS automount when entering device";
}
{
on = [ "g" "m" ];
run = "plugin gvfs -- jump-to-device";
desc = "Jump to mounted GVFS device";
}
{
on = [ "`" "`" ];
run = "plugin gvfs -- jump-back-prev-cwd";
desc = "Jump back from GVFS device";
}
{
on = [ "<C-n>" ];
run = "shell '${lib.getExe pkgs.dragon-drop} -x -A -i -T %s'";
}
{
on = [ "g" "<S-d>" ];
run = ''cd /mnt/D'';
desc = "Goto D drive";
}
];
};
};
} }
+20 -25
View File
@@ -1,6 +1,5 @@
{ config, osConfig, pkgs, lib, ... }: { { config, pkgs, ... }: {
home.packages = [ pkgs.nh ]; home.packages = [ pkgs.nh ];
programs = { programs = {
zoxide.enable = true; zoxide.enable = true;
fzf.enable = true; fzf.enable = true;
@@ -37,10 +36,7 @@
read_only = " RO"; read_only = " RO";
}; };
nix_shell.format = "[nix-shell]($style) "; nix_shell.format = "[nix-shell]($style) ";
os = { os.disabled = false;
disabled = false;
style = "white";
};
python = { python = {
symbol = "py "; symbol = "py ";
python_binary = ["python3" "python"]; python_binary = ["python3" "python"];
@@ -55,38 +51,37 @@
autosuggestion.enable = true; autosuggestion.enable = true;
syntaxHighlighting.enable = true; syntaxHighlighting.enable = true;
shellAliases = let shellAliases =
flakeDir = "~/nix"; let
in { flakeDir = "~/nix";
in {
rb = "nh os switch ${flakeDir}"; rb = "nh os switch ${flakeDir}";
trb = "nh os test ${flakeDir}";
upd = "nix flake update --flake ${flakeDir}"; upd = "nix flake update --flake ${flakeDir}";
upg = "sudo nixos-rebuild switch --upgrade --flake ${flakeDir}";
hms = "nh home switch ${flakeDir}";
rhms = ''${pkgs.bash} $(home-manager generations | fzf | awk -F '-> ' '{print $2 "/activate"}')''; #https://github.com/nix-community/home-manager/issues/1114#issuecomment-2067785129
conf = "$EDITOR ${flakeDir}/nixos/hosts/$(hostname)/configuration.nix";
pkgs = "$EDITOR ${flakeDir}/nixos/packages.nix";
ll = "ls -l";
se = "sudoedit";
ff = "fastfetch";
cat = "${pkgs.lib.getExe pkgs.bat}"; cat = "${pkgs.lib.getExe pkgs.bat}";
cd = "z"; cd = "z";
lg = "lazygit"; lg = "lazygit";
s = "nix-shell . --run zsh";
} // lib.optionalAttrs osConfig.boot.loader.grub.useOSProber {
win = "sudo grub-reboot 2; sudo reboot";
}; };
initContent = /*bash*/ '' initExtra = ''
eval "$(zoxide init zsh)" eval "$(zoxide init zsh)"
eval "$(nh completions --shell zsh)"
source "$(fzf-share)/key-bindings.zsh" source "$(fzf-share)/key-bindings.zsh"
source "$(fzf-share)/completion.zsh" source "$(fzf-share)/completion.zsh"
nr() { nix run "nixpkgs#$1" -- "''${@:2}" }
''; '';
envExtra = '' history.size = 10000;
TERM=xterm-256color history.path = "${config.xdg.dataHome}/zsh/history";
'';
history = {
size = 10000;
path = "${config.xdg.dataHome}/zsh/history";
expireDuplicatesFirst = true;
ignoreDups = true;
};
oh-my-zsh.enable = true; oh-my-zsh.enable = true;
}; };
-4
View File
@@ -1,4 +0,0 @@
My gf
- **Theme:** eris
- **Cursor:** [Miku](https://ko-fi.com/s/dcea0e990f)
+5 -19
View File
@@ -1,24 +1,10 @@
{ pkgs, pkgs-pinned, host, ... }: { { pkgs, pkgs-stable, ... }: {
imports = [ disabledModules = [ ../../modules/user/packages/coding.nix ];
../../modules/user/packages/cs_utils.nix
];
disabledModules = [
../../modules/user/packages/art.nix
];
home.packages = with pkgs; [ home.packages = with pkgs; [
nautilus nautilus
vscode burpsuite
exiftool
python3 python3
python3Packages.pip pkgs-stable.jetbrains.pycharm-community
pkgs-pinned.jetbrains.pycharm-oss
aseprite
krita
google-chrome
]; ];
xdg.mimeApps = {
enable = true;
defaultApplications."application/pdf" = "google-chrome.desktop";
};
} }
+2 -4
View File
@@ -1,9 +1,7 @@
{ {
programs.git = { programs.git = {
enable = true; enable = true;
settings.user = { userName = "cheeest";
name = "chest"; userEmail = "e.a.sunduk@gmail.com";
email = "e.a.sunduk@gmail.com";
};
}; };
} }
+52 -41
View File
@@ -1,22 +1,28 @@
{ pkgs, lib, config, ... }: { pkgs, lib, config, inputs, ... }: {
let imports = [(
colors = config.lib.stylix.colors; import ../../../modules/user/patterns/hyprland.nix {
accent = colors.${config.stylix.accent}; inherit lib;
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; }; inherit pkgs;
in { inherit config;
wayland.windowManager.hyprland.settings = { inherit inputs;
config = { collection = "cheeeest/1767552";
swww_flags = "";
}
)];
wayland.windowManager.hyprland = let
colors = config.lib.stylix.colors;
in {
settings = {
monitor = ",preferred,auto,1";
exec-once =["${lib.getExe pkgs.linux-wallpaperengine} /mnt/D/SteamLibrary/steamapps/workshop/content/431960/816353979 --assets-dir /mnt/D/SteamLibrary/steamapps/common/wallpaper_engine/assets --screen-root DP-1 --noautomute"];
general = { general = {
gaps_in = 5; gaps_in = 5;
gaps_out = 5; gaps_out = 5;
border_size = 2; border_size = 2;
"col.active_border" = lib.mkForce { "col.active_border" = "rgba(${colors.base0C}ee) rgba(${colors.base0B}ee) 45deg";
colors = [ "col.inactive_border" = "rgba(${colors.base05}aa)";
"rgba(${accent}ee)"
"rgba(${colors.base0C}ee)"
];
angle = 45;
};
layout = "dwindle"; layout = "dwindle";
}; };
@@ -38,42 +44,47 @@ in {
}; };
}; };
animations.enabled = true; 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;
};
dwindle.smart_split = true;
master.new_status = "master"; 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 = { misc = {
animate_manual_resizes = true; animate_manual_resizes = true;
animate_mouse_windowdragging = true; animate_mouse_windowdragging = true;
enable_swallow = true; enable_swallow = true;
render_ahead_of_time = false;
disable_hyprland_logo = false;
}; };
};
curve = { bind = [
_args = [ ''$mainMod Shift, S, exec, ${lib.getExe pkgs.grim} -g "$(${lib.getExe pkgs.slurp})" - | ${lib.getExe pkgs.swappy} -f -''
"myBezier"
{
type = "bezier";
points = [
[ 0.05 0.9 ]
[ 0.1 1.05 ]
];
}
]; ];
}; };
animation = [
{ leaf = "windows"; enabled = true; speed = 7; bezier = "myBezier"; }
{ leaf = "windowsOut"; enabled = true; speed = 7; bezier = "default"; style = "popin 80%"; }
{ leaf = "border"; enabled = true; speed = 10; bezier = "default"; }
{ leaf = "borderangle"; enabled = true; speed = 8; bezier = "default"; }
{ leaf = "fade"; enabled = true; speed = 7; bezier = "default"; }
{ leaf = "workspaces"; enabled = true; speed = 6; bezier = "default"; }
];
bind = [
(hyprLua.bind "SUPER + SHIFT + S" (hyprLua.exec ''${lib.getExe pkgs.grim} -g "$(${lib.getExe pkgs.slurp})" - | ${lib.getExe pkgs.swappy} -f -''))
];
}; };
} }
+2 -108
View File
@@ -1,87 +1,6 @@
{ pkgs, config, lib, ... }: let { pkgs, config, lib, ... }: {
miku-cursor = pkgs.stdenv.mkDerivation {
name = "Miku cursor";
# Hatsune Miku Cursor
# Author: NOiiRE ❖
# https://ko-fi.com/s/dcea0e990f
src = pkgs.fetchzip {
name = "MikuCursor.zip";
url = "https://ko-fi.com/api/file-upload/cf0bb0a7-feb8-4090-8e2e-68fd33b7b040/download?transactionId=684d8995-2014-4f9f-bb77-39e4dae3bad7";
curlOpts = "-A HTTPie/3.2.4";
extension = "zip";
hash = "sha256-aWnq1SckuRBVmX1T+htbideBbYUGvAqDyRB1v3cbpyA=";
};
nativeBuildInputs = [ pkgs.win2xcur ];
patchPhase = ''
pwd
echo $src
mkdir Miku/cursors -p
win2xcur $src/*.ani -o Miku/cursors
cd Miku/
echo "[Icon theme]" > index.theme
echo "Name=Miku Cursor" >> index.theme
cd cursors/
mv 'Miku normal' default
ln -s default left_ptr
ln -s default arrow
mv 'Miku link' pointer
ln -s pointer hand2
mv 'Miku busy' wait
ln -s wait progress
mv 'Miku help' help
ln -s help question_arrow
mv 'Miku text' text
ln -s text xterm
mv 'Miku hand' pencil
mv 'Miku precision' cross
ln -s cross crosshair
ln -s cross tcross
mv 'Miku unavailable' not-allowed
# mv 'Miku location' ?
# mv 'Miku person' ?
mv 'Miku vert' ns-resize
ln -s ns-resize n-resize
ln -s ns-resize s-resize
ln -s ns-resize v_double_arrow
ln -s ns-resize sb_v_double_arrow
mv 'Miku horz' ew-resize
ln -s ew-resize e-resize
ln -s ew-resize w-resize
ln -s ew-resize h_double_arrow
ln -s ew-resize sb_h_double_arrow
ln -s ew-resize left_side
ln -s ew-resize right_side
mv 'Miku dgn1' nw-resize
ln -s nw-resize top_left_corner
ln -s nw-resize bottom_right_corner
mv 'Miku dgn2' ne-resize
ln -s ne-resize top_right_corner
ln -s ne-resize bottom_left_corner
mv 'Miku move' move
ln -s move nesw-resize
ln -s move grab
ln -s move grabbing
ln -s move fleur
# mv 'Miku alt' ?
cd ../..
'';
installPhase = ''
mkdir $out/share/icons -p
cp Miku $out/share/icons -r
'';
};
in {
stylix = { stylix = {
enable = true; enable = true;
overlays.enable = false;
targets = { targets = {
hyprland.enable = false; hyprland.enable = false;
waybar.enable = false; waybar.enable = false;
@@ -89,7 +8,6 @@ in {
}; };
base16Scheme = "${pkgs.base16-schemes}/share/themes/eris.yaml"; base16Scheme = "${pkgs.base16-schemes}/share/themes/eris.yaml";
accent = "base0E";
polarity = "dark"; polarity = "dark";
image = pkgs.fetchurl { image = pkgs.fetchurl {
@@ -97,29 +15,18 @@ in {
sha256 = "0ypqnq7bsr2giq7nq1c3xrw2m0gkii9j5zhfp512r93wc96zvm50"; sha256 = "0ypqnq7bsr2giq7nq1c3xrw2m0gkii9j5zhfp512r93wc96zvm50";
}; };
icons = { iconTheme = {
enable = true; enable = true;
package = pkgs.pop-icon-theme; package = pkgs.pop-icon-theme;
dark = "Pop-Dark"; dark = "Pop-Dark";
}; };
cursor = {
name = "Miku";
size = 16;
package = miku-cursor;
};
fonts = { fonts = {
monospace = { monospace = {
name = "JetBrains Mono"; name = "JetBrains Mono";
package = pkgs.jetbrains-mono; package = pkgs.jetbrains-mono;
}; };
emoji = {
package = pkgs.noto-fonts-monochrome-emoji;
name = "Noto Emoji";
};
sizes = { sizes = {
applications = 13; applications = 13;
desktop = 12; desktop = 12;
@@ -131,17 +38,4 @@ in {
terminal = .5; terminal = .5;
}; };
}; };
dconf.settings = {
"org/gnome/desktop/interface".color-scheme = "prefer-dark";
};
gtk = {
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = true;
};
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = true;
};
};
} }
-329
View File
@@ -1,329 +0,0 @@
{
osConfig,
config,
inputs,
pkgs,
lib,
...
}: {
home.packages = with pkgs; [
font-awesome
nerd-fonts.symbols-only
playerctl
cava
pulsemixer
];
programs.waybar = {
enable = true;
systemd.enable = true;
package = inputs.waybar.packages.${pkgs.stdenv.hostPlatform.system}.default;
settings.mainBar = {
modules-center = [
"group/left"
"group/center"
"group/right"
];
"group/left" = {
orientation = "inherit";
modules = [
"hyprland/workspaces"
"custom/sep-left"
"hyprland/language"
"keyboard-state"
];
};
"group/center" = {
orientation = "inherit";
modules = [
"cava"
"mpris"
];
};
"group/right" = {
orientation = "inherit";
modules = [
"tray"
"custom/sep-left"
"group/system"
"custom/sep-left"
"pulseaudio"
"custom/sep-left"
"battery"
"clock"
];
};
cava = {
bars = 9;
bar_delimiter = 0;
stereo = false;
input_delay = 0;
format-icons = [" " "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"];
};
clock = {
tooltip = false;
interval = 5;
format = "{:L%d %b - %H:%M %a}";
};
pulseaudio = {
format = "{icon} {volume}%";
format-icons = {
headphone = "";
hands-free = "";
headset = "";
phone = "";
phone-muted = "";
portable = "";
car = "";
default = ["" ""];
};
on-click = "ghostty --title=pulsemixer -e pulsemixer";
};
mpris = {
format = "{dynamic}";
dynamic-len = if osConfig.host.laptop then 16 else 32;
dynamic-order = [ "title" "artist" "album" ];
};
battery = {
interval = 5;
states = {
warning = 30;
critical = 15;
};
format = "{icon} {capacity}% | ";
format-icons = {
default = ["󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
charging = ["󰢟" "󰢜" "󰂆" "󰂇" "󰂈" "󰢝" "󰂉" "󰢞" "󰂊" "󰂋" "󰂅"];
};
};
"custom/sep-left" = {
format = " | ";
tooltip = false;
};
"keyboard-state" = {
capslock = true;
format = "{icon}";
format-icons = {
locked = "CAPS";
unlocked = "";
};
};
"hyprland/language" = {
format-en = "en";
format-ru = "ru";
};
"group/system" = {
orientation = "inherit";
drawer = {
transition-duration = 500;
transition-left-to-right = false;
};
modules = [
"network"
"custom/mem"
"cpu"
"temperature"
];
};
network = {
format = "{ifname}";
format-wifi = " {essid} ({signalStrength}%)";
format-ethernet = "{ifname}";
format-disconnected = "";
tooltip-format = "{ipaddr}";
max-length = 50;
on-click = "ghostty --title=wifitui -e wifitui";
};
"custom/weather" = {
format = "{}";
tooltip = true;
interval = 1800;
exec = "python3 $HOME/.config/waybar/scripts/wttr.py";
return-type = "json";
};
"custom/mem" = {
format = "{} ";
interval = 3;
exec = "free -h | awk '/Mem:/{printf $3}'";
tooltip = false;
};
cpu = {
interval = 2;
format = "{usage}% ";
min-length = 6;
};
temperature = {
hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input";
critical-threshold = 80;
format = "{temperatureC}°C {icon}";
format-icons = ["" "" "" "" ""];
tooltip = false;
};
};
style = let
colors = config.lib.stylix.colors.withHashtag;
accent = colors.${config.stylix.accent};
scssFile = pkgs.writeText "waybar.scss" /*scss*/ ''
window#waybar {
background: transparent;
color: ${colors.base05};
font-weight: bold;
font-size: .85em;
& > * { padding: 0 0 6px 0; }
}
.modules-center {
background: ${colors.base01}CC;
border-radius: 12px;
padding: 10px;
box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.4);
}
#left,
#right,
#center {
background: ${colors.base02};
padding: 0 2px;
margin: 0 8px;
border-radius: 8px;
}
#left { margin-left: 0; }
#right { margin-right: 0; }
#clock { padding-right: 10px; }
#cava { padding: 0 10px; }
#language { padding: 8px; }
#workspaces button {
color: ${colors.base05};
padding: 0 2px;
border-radius: 999px;
border: 1pt solid transparent;
min-width: 20px;
&:hover { background: ${colors.base03}; }
&.active {
background: ${accent};
color: ${colors.base00};
min-width: 25px;
&:hover {
border-color: ${accent};
background: ${colors.base03};
color: ${accent};
}
}
}
#mpris {
border-radius: 8px;
padding: 4px;
&:hover { background: ${colors.base03}; }
&.playing {
border: 2px solid ${accent};
padding: 2px;
}
}
#tray {
widget {
border: 1pt solid transparent;
&:hover { background: ${colors.base03}; }
& > image { padding: 8px; }
}
& > .passive { border-color: ${colors.base03}; }
& > .needs-attention { border-color: ${colors.base09}; }
}
#pulseaudio {
&:hover { background: ${colors.base03}; }
&.muted {
background: ${colors.base08};
color: ${colors.base01};
&:hover {
color: ${colors.base08};
background: ${colors.base03};
}
}
}
#network {
&:hover { background: ${colors.base02}; }
&.disconnected {
color: ${colors.base00};
background: ${colors.base08};
}
}
#system .drawer-child > * {
margin-right: 4px
}
#keyboard-state label.locked {
color: ${colors.base08};
}
#battery {
&.plugged { color: ${colors.base0D}; }
&.charging { color: ${colors.base0B}; }
&:not(.charging) {
&.warning {
color: ${colors.base00};
background-color: ${colors.base09};
}
&.critical {
background-color: ${colors.base08};
color: ${colors.base00};
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
}
&.full {
color: ${colors.base00};
background: ${colors.base0B};
}
}
@keyframes blink {
to {
background-color: ${colors.base00};
color: ${colors.base08};
}
}
'';
cssFile = pkgs.runCommand "waybar.css" {
nativeBuildInputs = [ pkgs.dart-sass ];
} "sass ${scssFile} $out";
in builtins.readFile cssFile;
};
}
+5 -17
View File
@@ -1,28 +1,19 @@
{ config { pkgs, pkgs-stable, lib, inputs, name, fullname ? name, ... }: {
, pkgs
, pkgs-stable
, pkgs-pinned
, lib
, inputs
, name
, fullname ? name
}: {
imports = [ imports = [
inputs.home-manager.nixosModules.home-manager { inputs.home-manager.nixosModules.home-manager {
home-manager = { home-manager = {
useGlobalPkgs = true; useGlobalPkgs = true;
useUserPackages = true; useUserPackages = true;
backupFileExtension = "rebuild"; backupFileExtension = "rebuild";
overwriteBackup = true;
users.${name} = { users.${name} = {
imports = [ imports = [
inputs.sops-nix.homeManagerModules.sops inputs.sops-nix.homeManagerModules.sops
inputs.stylix.homeModules.stylix inputs.stylix.homeManagerModules.stylix
../modules/user.nix ../modules/user.nix
./${name}/modules/git.nix ./${name}/modules/git.nix
./${name}/modules/hyprland.nix
./${name}/modules/style.nix ./${name}/modules/style.nix
./${name}/modules/waybar.nix
./${name}/home.nix ./${name}/home.nix
]; ];
@@ -32,12 +23,9 @@
stateVersion = "23.11"; stateVersion = "23.11";
}; };
}; };
extraSpecialArgs = { extraSpecialArgs = {
inherit inputs; inherit inputs;
inherit pkgs-stable; inherit pkgs-stable;
inherit pkgs-pinned;
username = name;
}; };
}; };
} }
@@ -56,8 +44,8 @@
}; };
services.greetd = let services.greetd = let
tuigreet = lib.getExe pkgs.tuigreet; tuigreet = lib.getExe pkgs.greetd.tuigreet;
session = lib.getExe' inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.default "start-hyprland"; session = lib.getExe inputs.hyprland.packages.${pkgs.system}.default;
in { in {
enable = true; enable = true;
settings = { settings = {
-4
View File
@@ -1,4 +0,0 @@
My config
- **Theme:** [Catppuccin](https://catppuccin.com) Mocha
- **Cursor:** [\[Date A Live\] Kurumi Tokisaki](https://ko-fi.com/s/66a6c36df1)
Loaded 100 of 105 files, more files were not shown because too many files have changed in this diff. Show more