back to plasma

This commit is contained in:
William 2025-06-06 10:36:26 -03:00
parent 0d37685470
commit 4dcd29bacb
25 changed files with 385 additions and 610 deletions

38
flake.lock generated
View file

@ -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": 1747688870,
"narHash": "sha256-ypL9WAZfmJr5V70jEVzqGjjQzF0uCkz+AFQF7n9NmNc=",
"lastModified": 1749154018,
"narHash": "sha256-gjN3j7joRvT3a8Zgcylnd4NFsnXeDBumqiu4HmY1RIg=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "d5f1f641b289553927b3801580598d200a501863",
"rev": "7aae0ee71a17b19708b93b3ed448a1a0952bf111",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-24.11",
"ref": "release-25.05",
"repo": "home-manager",
"type": "github"
}
@ -195,16 +216,16 @@
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1748995628,
"narHash": "sha256-bFufQGSAEYQgjtc4wMrobS5HWN0hDP+ZX+zthYcml9U=",
"lastModified": 1749086602,
"narHash": "sha256-DJcgJMekoxVesl9kKjfLPix2Nbr42i7cpEHJiTnBUwU=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "8eb3b6a2366a7095939cd22f0dc0e9991313294b",
"rev": "4792576cb003c994bd7cc1edada3129def20b27d",
"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,14 @@
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";
};
@ -24,6 +24,11 @@
inputs.nixpkgs.follows = "nixpkgs-stable";
};
disko = {
url = "github:nix-community/disko?ref=v1.11.0";
inputs.nixpkgs.follows = "nixpkgs-stable";
};
nix-flatpak.url = "github:gmodena/nix-flatpak/latest";
impermanence.url = "github:nix-community/impermanence";
@ -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
@ -80,6 +87,11 @@
];
serverModules = [
self.nixosModules.qbittorrent
{
nixpkgs.overlays = [
self.overlays.serverOverlay
];
}
];
typeModules = if type == "server" then serverModules else workstationModules;
allModules = defaultModules ++ typeModules ++ extraModules;
@ -105,6 +117,12 @@
alexandria = mkHost {
hostname = "alexandria";
type = "server";
extraModules = [ self.nixosModules.qbittorrent ];
};
trantor = mkHost {
hostname = "trantor";
type = "server";
system = "aarch64-linux";
};
};
@ -113,6 +131,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 +155,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,6 @@ in
./jellyfin.nix
./librespeed.nix
./memos.nix
./nextcloud.nix
./nginx.nix
./searx.nix
./services.nix

View file

@ -4,14 +4,10 @@
networking = {
firewall = {
allowedTCPPorts = [
80 # HTTP
443 # HTTPS
25565 # Minecraft
];
allowedUDPPorts = [
24454 # Minecraft Simple Voice Chat
25565 # Minecraft
80
443
];
allowedUDPPorts = [ ];
};
};
}

View file

@ -1,103 +0,0 @@
{
lib,
config,
pkgs,
...
}:
{
services = {
nextcloud = {
enable = true;
package = pkgs.nextcloud30;
datadir = "/data/nextcloud";
hostName = "cloud.baduhai.dev";
configureRedis = true;
https = true;
autoUpdateApps.enable = true;
secretFile = config.age.secrets."nextcloud-secrets.json".path;
database.createLocally = true;
maxUploadSize = "16G";
caching = {
apcu = true;
redis = true;
};
settings = {
trusted_proxies = [ "127.0.0.1" ];
default_phone_region = "BR";
maintenance_window_start = "4";
enabledPreviewProviders = [
"OC\\Preview\\BMP"
"OC\\Preview\\EMF"
"OC\\Preview\\Font"
"OC\\Preview\\GIF"
"OC\\Preview\\HEIC"
"OC\\Preview\\Illustrator"
"OC\\Preview\\JPEG"
"OC\\Preview\\Krita"
"OC\\Preview\\MarkDown"
"OC\\Preview\\Movie"
"OC\\Preview\\MP3"
"OC\\Preview\\MSOffice2003"
"OC\\Preview\\MSOffice2007"
"OC\\Preview\\MSOfficeDoc"
"OC\\Preview\\OpenDocument"
"OC\\Preview\\PDF"
"OC\\Preview\\Photoshop"
"OC\\Preview\\PNG"
"OC\\Preview\\Postscript"
"OC\\Preview\\SVG"
"OC\\Preview\\TIFF"
"OC\\Preview\\TXT"
"OC\\Preview\\XBitmap"
];
};
config = {
dbtype = "pgsql";
adminpassFile = config.age.secrets.nextcloud-adminpass.path;
};
phpOptions = {
"opcache.interned_strings_buffer" = "16";
};
};
collabora-online = {
enable = true;
port = lib.strings.toInt config.ports.collabora;
settings.ssl = {
enable = false;
termination = true;
};
};
nginx.virtualHosts = {
${config.services.nextcloud.hostName} = {
useACMEHost = "baduhai.dev";
forceSSL = true;
kTLS = true;
};
"office.baduhai.dev" = {
useACMEHost = "baduhai.dev";
forceSSL = true;
kTLS = true;
locations."/" = {
proxyPass = "http://127.0.0.1:${config.ports.collabora}";
proxyWebsockets = true;
};
};
};
};
age.secrets = {
"nextcloud-secrets.json" = {
file = ../../../secrets/nextcloud-secrets.json.age;
owner = "nextcloud";
group = "hosted";
};
nextcloud-adminpass = {
file = ../../../secrets/nextcloud-adminpass.age;
owner = "nextcloud";
group = "hosted";
};
};
}

View file

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

View file

@ -18,11 +18,17 @@
# Workstation specific configuration
(lib.mkIf hostType.isWorkstation {
services = {
displayManager.sddm = {
enable = true;
wayland = {
displayManager = {
autoLogin = {
enable = true;
compositor = "kwin";
user = "user";
};
sddm = {
enable = true;
wayland = {
enable = true;
compositor = "kwin";
};
};
};
desktopManager.plasma6.enable = true;
@ -36,8 +42,6 @@
};
};
# programs.hyprland.enable = true;
hardware = {
xpadneo.enable = true;
bluetooth.enable = true;

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

@ -9,32 +9,32 @@
config = lib.mkMerge [
# Common configuration
{
environment.systemPackages = with pkgs; [
### Dev Tools ###
agenix
git
helix
### System Utilities ###
btop
fastfetch
nixos-firewall-tool
sysz
wget
tmux
];
environment = {
systemPackages = with pkgs; [
### Dev Tools ###
agenix
git
helix
### System Utilities ###
btop
fastfetch
nixos-firewall-tool
sysz
wget
tmux
];
shellAliases = {
ls = "${pkgs.eza}/bin/eza --icons --group-directories-first";
neofetch = "fastfetch";
tree = "ls --tree";
syscleanup = "sudo nix-collect-garbage -d; sudo /run/current-system/bin/switch-to-configuration boot";
};
};
programs = {
fish.enable = true;
command-not-found.enable = false;
};
environment.shellAliases = {
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";
};
}
# Server specific configuration
@ -64,73 +64,86 @@
};
in
{
environment.systemPackages =
with pkgs;
[
### Dev Tools ###
bat
deploy-rs
fd
fzf
nixfmt-rfc-style
nix-init
nix-output-monitor
ripgrep
### Internet Browsers & Communication ###
beeper
brave
microsoft-edge
nextcloud-client
tor-browser
vesktop
### Office & Productivity ###
aspell
aspellDicts.de
aspellDicts.en
aspellDicts.en-computers
aspellDicts.pt_BR
kwrite
libreoffice-qt
obsidian
(octaveFull.withPackages (octavePackages: with octavePackages; [ signal ]))
onlyoffice-desktopeditors
rnote
### Graphics & Design ###
gimp
inkscape
orca-slicer
plasticity
### Gaming & Entertainment ###
clonehero
heroic
mangohud
prismlauncher
protonup
### System Utilities ###
adwaita-icon-theme
junction
kara
kde-rounded-corners
libfido2
# lilipod BROKEN
mission-center
p7zip
qbittorrent
quickemu
quickgui
rustdesk
steam-run
unrar
### Media ###
mpv
obs-studio
qview
]
++ kdepkgs;
environment = {
systemPackages =
with pkgs;
[
### Dev Tools ###
bat
deploy-rs
fd
fzf
nixfmt-rfc-style
nix-init
nix-output-monitor
ripgrep
### Internet Browsers & Communication ###
beeper
brave
tor-browser
vesktop
### Office & Productivity ###
aspell
aspellDicts.de
aspellDicts.en
aspellDicts.en-computers
aspellDicts.pt_BR
kwrite
libreoffice-qt
obsidian
onlyoffice-desktopeditors
rnote
### Graphics & Design ###
gimp
inkscape
orca-slicer
plasticity
### Gaming & Entertainment ###
clonehero
heroic
mangohud
prismlauncher
protonup
### System Utilities ###
adwaita-icon-theme
junction
kara
kde-rounded-corners
libfido2
# lilipod BROKEN
mission-center
p7zip
qbittorrent
quickemu
quickgui
rustdesk
steam-run
unrar
### Media ###
mpv
obs-studio
qview
]
++ kdepkgs;
plasma6.excludePackages = (
with pkgs.kdePackages;
[
discover
elisa
gwenview
kate
khelpcenter
oxygen
]
);
};
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,17 +170,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

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

View file

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

View file

@ -0,0 +1,20 @@
{ pkgs, ... }:
{
home.pointerCursor = {
package = pkgs.kdePackages.breeze;
name = "Breeze_Light";
gtk.enable = true;
x11.enable = true;
};
gtk = {
enable = true;
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 = "<U+EB3A> ";
};
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;
@ -146,37 +145,6 @@
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
# '';
# };
# };
})
];
}