Compare commits

...
Sign in to create a new pull request.

30 commits
master ... niri

Author SHA1 Message Date
53f33fa74b changed readme 2025-06-03 10:03:48 -03:00
698292e00a remove cursor 2025-06-02 21:45:31 -03:00
83c1f23d61 add proton-ge directly in steam 2025-06-02 21:43:19 -03:00
63a32cee92 drop nat to alexandria; open 25566 2025-06-02 21:00:26 -03:00
6287704cf3 removed nix-minecraft 2025-06-02 20:32:06 -03:00
c3631f1ef8 jvm options 2025-06-02 19:29:24 -03:00
0ec2a2cc7d flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/f9186c64fcc6ee5f0114547acf9e814c806a640b?narHash=sha256-tdVx4kghhdy62LKuTnwE2RytOe8o88tah/yhpyuL0D4%3D' (2025-05-22)
  → 'github:nix-community/home-manager/c7fdb7e90bff1a51b79c1eed458fb39e6649a82a?narHash=sha256-EB%2BLzYHK0D5aqxZiYoPeoZoOzSAs8eqBDxm3R%2B6wMKU%3D' (2025-06-02)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/2795c506fe8fb7b03c36ccb51f75b6df0ab2553f?narHash=sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q%3D' (2025-05-20)
  → 'github:nixos/nixpkgs/910796cabe436259a29a72e8d3f5e180fc6dfacc?narHash=sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8%3D' (2025-05-31)
• Updated input 'nixpkgs-stable':
    'github:nixos/nixpkgs/7282cb574e0607e65224d33be8241eae7cfe0979?narHash=sha256-hYKMs3ilp09anGO7xzfGs3JqEgUqFMnZ8GMAqI6/k04%3D' (2025-05-28)
  → 'github:nixos/nixpkgs/a59eb7800787c926045d51b70982ae285faa2346?narHash=sha256-q8jG2HJWgooWa9H0iatZqBPF3bp0504e05MevFmnFLY%3D' (2025-05-31)
2025-06-02 19:18:56 -03:00
8f3d0e7a7d it was mkForce instead of mkDefault before 2025-06-02 19:10:16 -03:00
fdb1b8aeb5 cannot mkDefault flatpak to false 2025-06-02 19:08:21 -03:00
40e311e5e4 will continue on other host 2025-06-02 19:02:39 -03:00
f5adb9d6d7 move flatpaks to programs file 2025-06-02 15:43:17 -03:00
afc7385c95 fix ssh keys and disallow root login 2025-06-02 13:01:07 -03:00
907d8bc9d2 masquarade nat from alexandria 2025-06-01 21:32:24 -03:00
9838e913b5 I should stop blindly trusting llms 2025-06-01 19:25:28 -03:00
8f165dbc05 fix kernel ip forwarding on trantor 2025-06-01 19:23:30 -03:00
982e7edd2d enable ip forwarding on trantor's kernel 2025-06-01 19:22:16 -03:00
830376454c semicolons 2025-06-01 19:15:48 -03:00
830b945d91 better ssh icon 2025-06-01 19:13:40 -03:00
fd1da06173 better see if ssh'd 2025-06-01 19:11:29 -03:00
e79b2eeb05 iptables doesn't understand hostnames 2025-06-01 19:01:23 -03:00
45b1a1e7ec goodbye nextcloud 2025-06-01 18:49:31 -03:00
ba224d45a4 need to open ports on alexandria 2025-06-01 18:20:32 -03:00
632f4d9b38 can't be bothered with nextcloud anymore 2025-06-01 18:16:32 -03:00
66b68ce658 forward minecraft server traffic from trantor to alexandria 2025-06-01 17:53:46 -03:00
37558060f4 adding trantor; upgrading stable to 25.05 2025-06-01 16:43:41 -03:00
58c5ddd075 slowly making niri a better session 2025-06-01 15:46:05 -03:00
4b17075968 added toggleaudiosink pkg 2025-05-23 07:33:18 -03:00
95e23247b0 niri comin along 2025-05-23 07:16:03 -03:00
b500c0a4cc flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/6697e8babbd8f323dfd5e28f160a0128582c128b?narHash=sha256-E1WjB%2BzvDw4x058mg3MIdK5j2huvnNpTEEt2brhg2H8%3D' (2025-05-17)
  → 'github:ryantm/agenix/4835b1dc898959d8547a871ef484930675cb47f1?narHash=sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY%2BD81k%3D' (2025-05-18)
• Updated input 'home-manager':
    'github:nix-community/home-manager/ae755329092c87369b9e9a1510a8cf1ce2b1c708?narHash=sha256-5rCGrnkglKKj4cav1U3HC%2BSIUNJh08pqOK4spQv9RjA%3D' (2025-05-16)
  → 'github:nix-community/home-manager/f9186c64fcc6ee5f0114547acf9e814c806a640b?narHash=sha256-tdVx4kghhdy62LKuTnwE2RytOe8o88tah/yhpyuL0D4%3D' (2025-05-22)
• Updated input 'home-manager-stable':
    'github:nix-community/home-manager/1eec32f0efe3b830927989767a9e6ece0d82d608?narHash=sha256-3MmiUN/jOHBHQUnjqzg6qKArc17j2OS6jisEppDY4g8%3D' (2025-05-15)
  → 'github:nix-community/home-manager/d5f1f641b289553927b3801580598d200a501863?narHash=sha256-ypL9WAZfmJr5V70jEVzqGjjQzF0uCkz%2BAFQF7n9NmNc%3D' (2025-05-19)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/e06158e58f3adee28b139e9c2bcfcc41f8625b46?narHash=sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4%2BwYK4%3D' (2025-05-15)
  → 'github:nixos/nixpkgs/2795c506fe8fb7b03c36ccb51f75b6df0ab2553f?narHash=sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q%3D' (2025-05-20)
• Updated input 'nixpkgs-stable':
    'github:nixos/nixpkgs/ba8b70ee098bc5654c459d6a95dfc498b91ff858?narHash=sha256-IKKIXTSYJMmUtE%2BKav5Rob8SgLPnfnq4Qu8LyT4gdqQ%3D' (2025-05-15)
  → 'github:nixos/nixpkgs/72841a4a8761d1aed92ef6169a636872c986c76d?narHash=sha256-LXkWBVqilgx7Pohwqu/ABxDVw%2BCmi5/Mj2S2mpUH0Fw%3D' (2025-05-19)
2025-05-22 13:13:25 -03:00
180a071620 niri config 2025-05-22 09:52:44 -03:00
26 changed files with 394 additions and 555 deletions

56
flake.lock generated
View file

@ -10,11 +10,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1747514353,
"narHash": "sha256-E1WjB+zvDw4x058mg3MIdK5j2huvnNpTEEt2brhg2H8=",
"lastModified": 1747575206,
"narHash": "sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY+D81k=",
"owner": "ryantm",
"repo": "agenix",
"rev": "6697e8babbd8f323dfd5e28f160a0128582c128b",
"rev": "4835b1dc898959d8547a871ef484930675cb47f1",
"type": "github"
},
"original": {
@ -67,6 +67,27 @@
"type": "github"
}
},
"disko": {
"inputs": {
"nixpkgs": [
"nixpkgs-stable"
]
},
"locked": {
"lastModified": 1736864502,
"narHash": "sha256-ItkIZyebGvNH2dK9jVGzJHGPtb6BSWLN8Gmef16NeY0=",
"owner": "nix-community",
"repo": "disko",
"rev": "0141aabed359f063de7413f80d906e1d98c0c123",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "v1.11.0",
"repo": "disko",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
@ -111,16 +132,16 @@
]
},
"locked": {
"lastModified": 1747331121,
"narHash": "sha256-3MmiUN/jOHBHQUnjqzg6qKArc17j2OS6jisEppDY4g8=",
"lastModified": 1748665073,
"narHash": "sha256-RMhjnPKWtCoIIHiuR9QKD7xfsKb3agxzMfJY8V9MOew=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "1eec32f0efe3b830927989767a9e6ece0d82d608",
"rev": "282e1e029cb6ab4811114fc85110613d72771dea",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-24.11",
"ref": "release-25.05",
"repo": "home-manager",
"type": "github"
}
@ -132,11 +153,11 @@
]
},
"locked": {
"lastModified": 1747439237,
"narHash": "sha256-5rCGrnkglKKj4cav1U3HC+SIUNJh08pqOK4spQv9RjA=",
"lastModified": 1748830238,
"narHash": "sha256-EB+LzYHK0D5aqxZiYoPeoZoOzSAs8eqBDxm3R+6wMKU=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "ae755329092c87369b9e9a1510a8cf1ce2b1c708",
"rev": "c7fdb7e90bff1a51b79c1eed458fb39e6649a82a",
"type": "github"
},
"original": {
@ -179,11 +200,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1747327360,
"narHash": "sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4+wYK4=",
"lastModified": 1748693115,
"narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "e06158e58f3adee28b139e9c2bcfcc41f8625b46",
"rev": "910796cabe436259a29a72e8d3f5e180fc6dfacc",
"type": "github"
},
"original": {
@ -195,16 +216,16 @@
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1747335874,
"narHash": "sha256-IKKIXTSYJMmUtE+Kav5Rob8SgLPnfnq4Qu8LyT4gdqQ=",
"lastModified": 1748708770,
"narHash": "sha256-q8jG2HJWgooWa9H0iatZqBPF3bp0504e05MevFmnFLY=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ba8b70ee098bc5654c459d6a95dfc498b91ff858",
"rev": "a59eb7800787c926045d51b70982ae285faa2346",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.11",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
@ -213,6 +234,7 @@
"inputs": {
"agenix": "agenix",
"deploy-rs": "deploy-rs",
"disko": "disko",
"home-manager": "home-manager_2",
"home-manager-stable": "home-manager-stable",
"impermanence": "impermanence",

View file

@ -3,14 +3,19 @@
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
home-manager = {
url = "github:nix-community/home-manager/master";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager-stable = {
url = "github:nix-community/home-manager/release-24.11";
url = "github:nix-community/home-manager/release-25.05";
inputs.nixpkgs.follows = "nixpkgs-stable";
};
disko = {
url = "github:nix-community/disko?ref=v1.11.0";
inputs.nixpkgs.follows = "nixpkgs-stable";
};
@ -36,10 +41,11 @@
nixpkgs-stable,
home-manager,
home-manager-stable,
disko,
agenix,
deploy-rs,
impermanence,
nix-flatpak,
impermanence,
...
}:
{
@ -62,6 +68,7 @@
defaultModules = [
./hosts/${hostname}.nix
agenix.nixosModules.default
disko.nixosModules.default
hm.nixosModules.default
impermanence.nixosModules.impermanence
nix-flatpak.nixosModules.nix-flatpak
@ -79,7 +86,11 @@
}
];
serverModules = [
self.nixosModules.qbittorrent
{
nixpkgs.overlays = [
self.overlays.serverOverlay
];
}
];
typeModules = if type == "server" then serverModules else workstationModules;
allModules = defaultModules ++ typeModules ++ extraModules;
@ -105,6 +116,12 @@
alexandria = mkHost {
hostname = "alexandria";
type = "server";
extraModules = [ self.nixosModules.qbittorrent ];
};
trantor = mkHost {
hostname = "trantor";
type = "server";
system = "aarch64-linux";
};
};
@ -113,6 +130,9 @@
};
workstationOverlay = final: prev: {
plasticity = nixpkgs.legacyPackages."x86_64-linux".callPackage ./packages/plasticity.nix { };
toggleaudiosink =
nixpkgs.legacyPackages."x86_64-linux".callPackage ./packages/toggleaudiosink.nix
{ };
};
serverOverlay = final: prev: {
};
@ -134,6 +154,18 @@
};
};
trantor = {
hostname = "trantor";
profiles = {
system = {
user = "root";
sshUser = "root";
remoteBuild = true;
path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.alexandria;
};
};
};
io = {
hostname = "io";
profiles = {

View file

@ -19,7 +19,7 @@ in
./jellyfin.nix
./librespeed.nix
./memos.nix
./nextcloud.nix
# ./nextcloud.nix
./nginx.nix
./searx.nix
./services.nix

View file

@ -9,7 +9,7 @@
25565 # Minecraft
];
allowedUDPPorts = [
24454 # Minecraft Simple Voice Chat
19132 # Minecraft Bedrock
25565 # Minecraft
];
};

View file

@ -9,7 +9,7 @@
services = {
nextcloud = {
enable = true;
package = pkgs.nextcloud30;
package = pkgs.nextcloud31;
datadir = "/data/nextcloud";
hostName = "cloud.baduhai.dev";
configureRedis = true;

View file

@ -5,7 +5,6 @@
./boot.nix
./console.nix
./desktop.nix
./flatpak.nix
./impermanence.nix
./locale.nix
./networking.nix

View file

@ -18,14 +18,6 @@
# Workstation specific configuration
(lib.mkIf hostType.isWorkstation {
services = {
displayManager.sddm = {
enable = true;
wayland = {
enable = true;
compositor = "kwin";
};
};
desktopManager.plasma6.enable = true;
pipewire = {
enable = true;
alsa.enable = true;
@ -34,9 +26,20 @@
jack.enable = true;
wireplumber.enable = true;
};
greetd = {
enable = true;
settings.default_session.command = "${pkgs.greetd.tuigreet}/bin/tuigreet --remember --asterisks --time";
};
# programs.hyprland.enable = true;
};
programs.niri.enable = true;
environment.systemPackages = with pkgs; [
anyrun
foot
gsettings-desktop-schemas
swaybg
swww
xwayland-satellite
];
hardware = {
xpadneo.enable = true;
@ -52,7 +55,6 @@
enable = true;
xdgOpenUsePortal = true;
extraPortals = with pkgs; [
kdePackages.xdg-desktop-portal-kde
xdg-desktop-portal-gtk
xdg-desktop-portal-gnome
];

View file

@ -1,35 +0,0 @@
{
hostType,
lib,
...
}:
{
config = lib.mkMerge [
# Common configuration
{
}
# Server specific configuration
(lib.mkIf hostType.isServer {
})
# Workstation specific configuration
(lib.mkIf hostType.isWorkstation {
services.flatpak = {
enable = true;
packages = [
"com.github.k4zmu2a.spacecadetpinball"
"com.github.tchx84.Flatseal"
"com.steamgriddb.SGDBoop"
"app.zen_browser.zen"
"io.github.Foldex.AdwSteamGtk"
"io.itch.itch"
"org.freedesktop.Platform.VulkanLayer.MangoHud/x86_64/24.08"
];
uninstallUnmanaged = true;
update.auto.enable = true;
};
})
];
}

View file

@ -27,14 +27,12 @@
];
directories = [
"/etc/NetworkManager/system-connections"
"/etc/waydroid-extra/images/"
"/var/lib/bluetooth"
"/var/lib/flatpak"
"/var/lib/nixos"
"/var/lib/systemd/coredump"
"/var/lib/systemd/timers"
"/var/lib/tailscale"
"/var/lib/waydroid"
"/var/log"
];
};

View file

@ -18,7 +18,10 @@
enable = true;
extraUpFlags = [ "--operator=user" ];
};
openssh.enable = true;
openssh = {
enable = true;
settings.PermitRootLogin = "no";
};
};
}

View file

@ -1,5 +1,6 @@
{
hostType,
inputs,
lib,
pkgs,
...
@ -32,9 +33,10 @@
ls = "${pkgs.eza}/bin/eza --icons --group-directories-first";
neofetch = "fastfetch";
tree = "ls --tree";
tsh = "ssh -o RequestTTY=yes $argv tmux -u -CC new -A -s tmux-main";
syscleanup = "sudo nix-collect-garbage -d; sudo /run/current-system/bin/switch-to-configuration boot";
};
services.flatpak.enable = lib.mkDefault false;
}
# Server specific configuration
@ -42,31 +44,8 @@
})
# Workstation specific configuration
(lib.mkIf hostType.isWorkstation (
let
kdepkgs = with pkgs.kdePackages; [
ark
dolphin-plugins
kolourpaint
];
kwrite = pkgs.symlinkJoin {
name = "kwrite";
paths = [ pkgs.kdePackages.kate ];
postBuild = ''
rm -rf $out/bin/kate \
$out/bin/.kate-wrapped \
$out/share/applications/org.kde.kate.desktop \
$out/share/man \
$out/share/icons/hicolor/*/apps/kate.png \
$out/share/icons/hicolor/scalable/apps/kate.svg \
$out/share/appdata/org.kde.kate.appdata.xml
'';
};
in
{
environment.systemPackages =
with pkgs;
[
(lib.mkIf hostType.isWorkstation ({
environment.systemPackages = with pkgs; [
### Dev Tools ###
bat
deploy-rs
@ -79,8 +58,6 @@
### Internet Browsers & Communication ###
beeper
brave
microsoft-edge
nextcloud-client
tor-browser
vesktop
### Office & Productivity ###
@ -89,7 +66,6 @@
aspellDicts.en
aspellDicts.en-computers
aspellDicts.pt_BR
kwrite
libreoffice-qt
obsidian
(octaveFull.withPackages (octavePackages: with octavePackages; [ signal ]))
@ -105,14 +81,14 @@
heroic
mangohud
prismlauncher
protonup
### System Utilities ###
adwaita-icon-theme
junction
kara
kde-rounded-corners
libfido2
# lilipod BROKEN
morewaita-icon-theme
nautilus
mission-center
p7zip
qbittorrent
@ -120,17 +96,20 @@
quickgui
rustdesk
steam-run
toggleaudiosink
unrar
### Media ###
mpv
obs-studio
qview
]
++ kdepkgs;
];
programs = {
adb.enable = true;
steam.enable = true;
steam = {
enable = true;
extraCompatPackages = [ pkgs.proton-ge-bin ];
};
dconf.enable = true;
nix-ld.enable = true;
kdeconnect.enable = true;
@ -157,18 +136,29 @@
];
};
environment.plasma6.excludePackages = (
with pkgs.kdePackages;
[
discover
elisa
gwenview
kate
khelpcenter
oxygen
]
);
}
))
services.flatpak = {
enable = true;
packages = [
### Dev Tools ###
### Internet Browsers & Communication ###
"app.zen_browser.zen"
### Office & Productivity ###
### Graphics & Design ###
"com.boxy_svg.BoxySVG"
### Gaming & Entertainment ###
"com.github.k4zmu2a.spacecadetpinball"
"io.itch.itch"
"io.mrarm.mcpelauncher"
"org.freedesktop.Platform.VulkanLayer.MangoHud/x86_64/24.08"
### System Utilities ###
"com.github.tchx84.Flatseal"
"io.github.Foldex.AdwSteamGtk"
"com.steamgriddb.SGDBoop"
### Media ###
];
uninstallUnmanaged = true;
update.auto.enable = true;
};
}))
];
}

View file

@ -0,0 +1,9 @@
{ ... }:
{
boot = {
loader.efi.efiSysMountPoint = "/boot";
initrd.systemd.enable = true;
kernel.sysctl."net.ipv4.ip_forward" = 1;
};
}

View file

@ -0,0 +1,10 @@
{ ... }:
{
imports = [
./boot.nix
./disko.nix
./hardware-configuration.nix
./networking.nix
];
}

View file

@ -0,0 +1,32 @@
{
disko.devices = {
disk = {
main = {
type = "disk";
device = "/dev/sda";
content = {
type = "gpt";
partitions = {
boot = {
size = "512M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
root = {
size = "100%";
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/";
};
};
};
};
};
};
};
}

View file

@ -0,0 +1,27 @@
{
lib,
modulesPath,
...
}:
{
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
boot = {
kernelModules = [ ];
extraModulePackages = [ ];
initrd = {
availableKernelModules = [
"xhci_pci"
"virtio_pci"
"virtio_scsi"
"usbhid"
];
kernelModules = [ ];
};
};
networking.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
}

View file

@ -0,0 +1,10 @@
{ ... }:
{
networking = {
firewall = {
allowedTCPPorts = [ 25566 ];
allowedUDPPorts = [ 25566 ];
};
};
}

View file

@ -20,17 +20,13 @@
"wheel"
];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKcwF1yuWEfYGScNocEbs0AmGxyTIzGc4/IhpU587SJE"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA1v3+q3EaruiiStWjubEJWvtejam/r41uoOpCdwJtLL"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA1v3+q3EaruiiStWjubEJWvtejam/r41uoOpCdwJtLL user@rotterdam"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO3Y0PVpGfJHonqDS7qoCFhqzUvqGq9I9sax+F9e/5cs user@io"
];
hashedPassword = "$6$Pj7v/CpstyuWQQV0$cNujVDhfMBdwlGVEnnd8t71.kZPixbo0u25cd.874iaqLTH4V5fa1f98V5zGapjQCz5JyZmsR94xi00sUrntT0";
};
root = {
shell = pkgs.fish;
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKcwF1yuWEfYGScNocEbs0AmGxyTIzGc4/IhpU587SJE"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA1v3+q3EaruiiStWjubEJWvtejam/r41uoOpCdwJtLL"
];
hashedPassword = "!";
};
};

View file

@ -32,7 +32,6 @@
virtualisation = {
libvirtd.enable = true;
lxd.enable = true;
waydroid.enable = true;
};
})
];

13
hosts/trantor.nix Normal file
View file

@ -0,0 +1,13 @@
{ ... }:
{
networking.hostName = "trantor";
imports = [
./modules/trantor
./modules
];
nix.nixPath = [ "nixos-config=${./trantor.nix}" ];
}

View file

@ -0,0 +1,48 @@
{
pkgs ? import <nixpkgs> { },
}:
pkgs.writeShellScriptBin "toggleaudiosink" ''
#!/usr/bin/env bash
sound_server="pipewire"
# Grab a count of how many audio sinks we have
sink_count=$(${pkgs.pulseaudio}/bin/pactl list sinks | grep -c "Sink #[[:digit:]]")
# Create an array of the actual sink IDs
sinks=()
mapfile -t sinks < <(${pkgs.pulseaudio}/bin/pactl list sinks | grep 'Sink #[[:digit:]]' | sed -n -e 's/.*Sink #\([[:digit:]]\)/\1/p')
# Get the ID of the active sink
active_sink_name=$(${pkgs.pulseaudio}/bin/pactl info | grep 'Default Sink:' | sed -n -e 's/.*Default Sink:[[:space:]]\+\(.*\)/\1/p')
active_sink=$(${pkgs.pulseaudio}/bin/pactl list sinks | grep -B 2 "$active_sink_name" | sed -n -e 's/Sink #\([[:digit:]]\)/\1/p' | head -n 1)
# Get the ID of the last sink in the array
final_sink=''${sinks[$((sink_count - 1))]}
# Find the index of the active sink
for index in "''${!sinks[@]}"; do
if [[ "''${sinks[$index]}" == "$active_sink" ]]; then
active_sink_index=$index
fi
done
# Default to the first sink in the list
next_sink=''${sinks[0]}
next_sink_index=0
# If we're not at the end of the list, move up the list
if [[ $active_sink -ne $final_sink ]]; then
next_sink_index=$((active_sink_index + 1))
next_sink=''${sinks[$next_sink_index]}
fi
# Change the default sink
# Get the name of the next sink
next_sink_name=$(${pkgs.pulseaudio}/bin/pactl list sinks | grep -C 2 "Sink #$next_sink" | sed -n -e 's/.*Name:[[:space:]]\+\(.*\)/\1/p' | head -n 1)
${pkgs.pulseaudio}/bin/pactl set-default-sink "$next_sink_name"
# Move all inputs to the new sink
for app in $(${pkgs.pulseaudio}/bin/pactl list sink-inputs | sed -n -e 's/.*Sink Input #\([[:digit:]]\)/\1/p'); do
${pkgs.pulseaudio}/bin/pactl "move-sink-input $app $next_sink"
done
''

View file

@ -2,6 +2,7 @@ All my personal Nix and NixOS hosts, in a flake.
|Host|Description|Nixpkgs version|
|:---|:---:|---:|
|alexandria|Personal server/NAS|24.05|
|alexandria|Personal server/NAS|25.05|
|io|Mobile workstation|unstable|
|rotterdam|Workstation|unstable|
|trantor|VPS in Oracle Cloud|25.05|

View file

@ -19,7 +19,6 @@
programs = {
bash = {
enable = true;
historyFile = "~/.cache/bash_history";
};
helix = {

View file

@ -2,7 +2,7 @@
{
imports = [
# ./hyprland.nix
./programs.nix
./home.nix
];
}

View file

@ -0,0 +1,24 @@
{ pkgs, ... }:
{
home.pointerCursor = {
package = pkgs.kdePackages.breeze;
name = "Breeze_Light";
gtk.enable = true;
x11.enable = true;
};
gtk = {
enable = true;
iconTheme = {
package = pkgs.morewaita-icon-theme;
name = "MoreWaita";
};
gtk3.extraConfig = {
gtk-decoration-layout = "appmenu:";
};
gtk4.extraConfig = {
gtk-decoration-layout = "appmenu:";
};
};
}

View file

@ -1,299 +0,0 @@
{
lib,
pkgs,
...
}:
let
heightfittr = pkgs.writeShellApplication {
name = "heightfittr";
runtimeInputs = with pkgs; [
socat
hyprland
];
text = ''
function handle {
case "$1" in
*openwindow*)
hyprctl dispatch scroller:fitheight all > /dev/null
;;
*closewindow*)
hyprctl dispatch scroller:fitheight all > /dev/null
;;
esac
}
socat - "UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" | while read -r line; do
handle "$line"
done
'';
};
scrollermodetoggle = pkgs.writeShellApplication {
name = "scrollermodetoggle";
runtimeInputs = with pkgs; [ hyprland ];
text = ''
if [ -f "$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/colmode" ]; then
rm "$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/colmode"
hyprctl --batch 'dispatch scroller:setmode row; notify 2 1000 0 "Row Mode"'
else
touch "$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/colmode"
hyprctl --batch 'dispatch scroller:setmode col; notify 2 1000 0 "Column Mode"'
fi
'';
};
in
{
wayland.windowManager.hyprland = {
enable = true;
plugins = with pkgs.hyprlandPlugins; [ hyprscroller ];
extraConfig = ''
################
### MONITORS ###
################
monitor=,preferred,auto,1
#################
### AUTOSTART ###
#################
# exec-once = ${pkgs.gnome-settings-daemon}/libexec/gsd-rfkill
# exec-once = waybar
# exec-once = syshud
exec-once = ${lib.getExe heightfittr}
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
#####################
### LOOK AND FEEL ###
#####################
general {
gaps_in = 5
gaps_out = 20
border_size = 2
resize_on_border = true
allow_tearing = false
layout = scroller
}
misc {
font_family = Inter
}
plugin {
scroller {
column_default_width = onethird
focuswrap = false
column_widths = onethird onehalf twothirds
center_row_if_space_available = true
}
}
decoration {
rounding = 10
rounding_power = 2
dim_inactive = true
dim_strength = 0.3
shadow {
enabled = true
range = 4
render_power = 3
}
blur {
enabled = true
size = 8
passes = 1
vibrancy = 0.1696
}
layerrule = blur, waybar
layerrule = ignorealpha 0.5, waybar
layerrule = ignorezero, waybar
}
animations {
enabled = yes, please :)
bezier = easeOutQuint,0.23,1,0.32,1
bezier = easeInOutCubic,0.65,0.05,0.36,1
bezier = linear,0,0,1,1
bezier = almostLinear,0.5,0.5,0.75,1.0
bezier = quick,0.15,0,0.1,1
animation = global, 1, 1, default
animation = border, 1, 1, easeOutQuint
animation = windows, 1, 1, easeOutQuint
animation = windowsIn, 1, 1, easeOutQuint, popin 87%
animation = windowsOut, 1, 1, linear, popin 87%
animation = fadeIn, 1, 1, almostLinear
animation = fadeOut, 1, 1, almostLinear
animation = fade, 1, 1, quick
animation = layers, 1, 1, easeOutQuint
animation = layersIn, 1, 1, easeOutQuint, fade
animation = layersOut, 1, 1, linear, fade
animation = fadeLayersIn, 1, 1, almostLinear
animation = fadeLayersOut, 1, 1, almostLinear
animation = workspaces, 1, 1, almostLinear, slidevert
}
misc {
force_default_wallpaper = 0
disable_hyprland_logo = true
}
#############
### INPUT ###
#############
input {
kb_layout = us
kb_variant = altgr-intl
follow_mouse = 1
sensitivity = 0
accel_profile = flat
natural_scroll = true
touchpad {
natural_scroll = true
clickfinger_behavior = true
}
}
###################
### KEYBINDINGS ###
###################
$mainMod = SUPER
$terminal = ghostty
$menu = ulauncher-toggle
# APP SHORTCUTS
bind = ALT, SPACE, exec, $menu
bind = $mainMod, RETURN, exec, $terminal
# SESSION MANAGEMENT
bind = CTRL ALT, DELETE, exit,
bind = $mainMod, mouse_up, exec, hyprnome
bind = $mainMod, mouse_down, exec, hyprnome --previous
bind = CTRL ALT, j, exec, hyprnome
bind = CTRL ALT, k, exec, hyprnome --previous
bind = $mainMod CTRL ALT, j, exec, hyprnome --move
bind = $mainMod CTRL ALT, k, exec, hyprnome --move --previous
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
bind = CTRL ALT SHIFT, a, exec, bash /home/user/.local/bin/toggle-audio-output.sh
# WINDOW MANAGEMENT
bind = ALT, F4, killactive,
bind = $mainMod, space, togglefloating,
bind = $mainMod, f, fullscreen
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
bind = SUPER, h, movefocus, l
bind = SUPER, l, movefocus, r
bind = SUPER, k, movefocus, u
bind = SUPER, j, movefocus, d
bind = $mainMod CTRL, h, movewindow, l
bind = $mainMod CTRL, l, movewindow, r
bind = $mainMod CTRL, k, movewindow, u
bind = $mainMod CTRL, j, movewindow, d
bind = $mainMod, v, exec, ${lib.getExe scrollermodetoggle}
bind = $mainMod, r, scroller:cyclewidth, next
bind = $mainMod CTRL, r, scroller:cyclewidth, prev
bind = $mainMod, p, scroller:pin,
bind = $mainMod, c, scroller:alignwindow, center
bind = $mainMod CTRL, f, scroller:fitsize, all
####################
### WINDOW RULES ###
####################
windowrulev2 = suppressevent maximize, class:.*
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
# ulauncher
windowrule = float, ulauncher
windowrule = pin, ulauncher
windowrule = noborder, ulauncher
windowrule = noshadow, ulauncher
windowrule = nomaxsize, ulauncher
windowrule = noblur, ulauncher
windowrulev2 = animation slide top, class:^(ulauncher)$
# browsers
windowrulev2 = plugin:scroller:columnwidth onehalf, class:(firefox)
windowrulev2 = plugin:scroller:columnwidth onehalf, class:(zen)
windowrulev2 = plugin:scroller:columnwidth onehalf, class:(brave)
'';
};
services = {
# swaync = {
# enable = true;
# settings = {
# positionX = "left";
# positionY = "top";
# layer = "overlay";
# control-center-layer = "top";
# layer-shell = true;
# cssPriority = "application";
# control-center-margin-top = 20;
# control-center-margin-bottom = 20;
# control-center-margin-right = 20;
# control-center-margin-left = 20;
# notification-2fa-action = true;
# notification-inline-replies = false;
# notification-icon-size = 64;
# notification-body-image-height = 100;
# notification-body-image-width = 200;
# timeout = 10;
# timeout-low = 5;
# timeout-critical = 0;
# fit-to-screen = true;
# relative-timestamps = true;
# control-center-width = 500;
# control-center-height = 600;
# notification-window-width = 500;
# keyboard-shortcuts = true;
# image-visibility = "when-available";
# transition-time = 200;
# hide-on-clear = false;
# hide-on-action = true;
# script-fail-notify = true;
# widgets = [
# "inhibitors"
# "title"
# "dnd"
# "notifications"
# "mpris"
# ];
# widget-config = {
# inhibitors = {
# text = "Inhibitors";
# button-text = "Clear All";
# clear-all-button = true;
# };
# title = {
# text = "Notifications";
# clear-all-button = true;
# button-text = "Clear All";
# };
# dnd = {
# text = "Do Not Disturb";
# };
# mpris = {
# image-size = 96;
# image-radius = 12;
# };
# };
# };
# };
# clipman.enable = true;
};
# programs = {
# hyprlock.enable = true;
# };
home.packages = with pkgs; [
brightnessctl
ghostty
hyprnome
playerctl
swaynotificationcenter
syshud
ulauncher
waybar
# inputs.mithril.packages.${pkgs.system}.mithril-control-center
];
}

View file

@ -57,10 +57,13 @@
settings = {
add_newline = false;
format = ''
$directory$git_branch$git_status$nix_shell
$hostname$directory$git_branch$git_status$nix_shell
[ ](bold green)
'';
right_format = "$cmd_duration$character";
hostname = {
ssh_symbol = " ";
};
character = {
error_symbol = "[](red)";
success_symbol = "[󱐋](green)";
@ -111,10 +114,6 @@
(lib.mkIf hostType.isWorkstation {
fonts.fontconfig.enable = true;
# home.packages = with pkgs; [
# ulauncher
# ];
programs = {
password-store.package = pkgs.pass-wayland;
@ -137,46 +136,6 @@
};
};
};
gtk = {
gtk3.extraConfig = {
gtk-decoration-layout = "appmenu:";
};
gtk4.extraConfig = {
gtk-decoration-layout = "appmenu:";
};
};
# systemd.user.services.ulauncher = {
# Unit = {
# Description = "Ulauncher Application Launcher";
# After = [ "graphical-session.target" ];
# };
# Service = {
# Type = "simple";
# Environment =
# let
# pydeps = pkgs.python3.withPackages (
# pp: with pp; [
# # dependencies for ulauncher-albert-calculate-anything
# parsedatetime
# pint
# pytz
# requests
# simpleeval
# ]
# );
# in
# [
# "PYTHONPATH=${pydeps}/${pydeps.sitePackages}"
# ];
# ExecStart = pkgs.writeShellScript "ulauncher-env-wrapper.sh" ''
# export PATH="''${XDG_BIN_HOME}:$HOME/.nix-profile/bin:/etc/profiles/per-user/$USER/bin:/nix/var/nix/profiles/default/bin:/run/current-system/sw/bin"
# export GDK_BACKEND=wayland
# exec ${pkgs.ulauncher}/bin/ulauncher --hide-window
# '';
# };
# };
})
];
}