diff --git a/flake.lock b/flake.lock index fcef8c0..7241ae8 100644 --- a/flake.lock +++ b/flake.lock @@ -1,61 +1,61 @@ { "nodes": { - "flake-compat": { - "flake": false, + "ags": { + "inputs": { + "nixpkgs": "nixpkgs", + "systems": "systems" + }, "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "lastModified": 1725841979, + "narHash": "sha256-SXYqzpHPuXFR6w/cUKo3VN8XRn6XA2mGbdRXs9oLk6k=", + "owner": "Aylur", + "repo": "ags", + "rev": "aaef50bb2c80ef4b4a359329d72669a95e7c4796", "type": "github" }, "original": { - "owner": "edolstra", - "repo": "flake-compat", + "owner": "Aylur", + "repo": "ags", + "type": "github" + } + }, + "aquamarine": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1725753098, + "narHash": "sha256-/NO/h/qD/eJXAQr/fHA4mdDgYsNT9thHQ+oT6KPi2ac=", + "owner": "hyprwm", + "repo": "aquamarine", + "rev": "e4a13203112a036fc7f437d391c7810f3dd5ab52", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "aquamarine", "type": "github" } }, "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1705309234, - "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_2": { "inputs": { "systems": "systems_2" }, - "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_3": { - "inputs": { - "systems": "systems_3" - }, "locked": { "lastModified": 1705309234, "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", @@ -74,15 +74,14 @@ "inputs": { "nixpkgs-stable": "nixpkgs-stable", "nixpkgs-unstable": "nixpkgs-unstable", - "zig": "zig", - "zls": "zls" + "zig": "zig" }, "locked": { - "lastModified": 1721363963, - "narHash": "sha256-l9JqbMW3KO24lH0OsNIQrzNHZ/AJcCro/ihq+ZK15oU=", + "lastModified": 1726286796, + "narHash": "sha256-5mop4eJrzPTuEsUaqRZizzjySOx+vK9ZXl7HlJqWh1M=", "ref": "refs/heads/main", - "rev": "1eb18895bf881b229219d2b411c14707a795d1fc", - "revCount": 6627, + "rev": "4241eac890b8f4b6bbadf27b2d109ce483813fe9", + "revCount": 7314, "type": "git", "url": "ssh://git@github.com/ghostty-org/ghostty" }, @@ -91,28 +90,6 @@ "url": "ssh://git@github.com/ghostty-org/ghostty" } }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "ghostty", - "zls", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": [ @@ -120,11 +97,11 @@ ] }, "locked": { - "lastModified": 1721135958, - "narHash": "sha256-H548rpPMsn25LDKn1PCFmPxmWlClJJGnvdzImHkqjuY=", + "lastModified": 1726440980, + "narHash": "sha256-ChhIrjtdu5d83W+YDRH+Ec5g1MmM0xk6hJnkz15Ot7M=", "owner": "nix-community", "repo": "home-manager", - "rev": "afd2021bedff2de92dfce0e257a3d03ae65c603d", + "rev": "a9c9cc6e50f7cbd2d58ccb1cd46a1e06e9e445ff", "type": "github" }, "original": { @@ -149,11 +126,11 @@ ] }, "locked": { - "lastModified": 1720108799, - "narHash": "sha256-AxRkTJlbB8r7aG6gvc7IaLhc2T9TO4/8uqanKRxukBQ=", + "lastModified": 1722623071, + "narHash": "sha256-sLADpVgebpCBFXkA1FlCXtvEPu1tdEsTfqK1hfeHySE=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "a5c0d57325c5f0814c39110a70ca19c070ae9486", + "rev": "912d56025f03d41b1ad29510c423757b4379eb1c", "type": "github" }, "original": { @@ -169,14 +146,14 @@ "nixpkgs": [ "nixpkgs" ], - "systems": "systems_4" + "systems": "systems_3" }, "locked": { - "lastModified": 1721332982, - "narHash": "sha256-UiNq9EDnnWXaG7d5AExvPlzapuw4VyWnFHTo38Q3kn4=", + "lastModified": 1725204025, + "narHash": "sha256-DdPf2Hm/ywtXqQutmxuzvMLgTzuV1nuzbrsahyhB8uU=", "owner": "hyprwm", "repo": "hypridle", - "rev": "e5366d34b5e1f06a1233667cded3ef05b482778c", + "rev": "22b058b47a57b609e00c5c8a90697f33c7fe1fd3", "type": "github" }, "original": { @@ -187,20 +164,21 @@ }, "hyprland": { "inputs": { + "aquamarine": "aquamarine", "hyprcursor": "hyprcursor", "hyprlang": "hyprlang_2", "hyprutils": "hyprutils_2", "hyprwayland-scanner": "hyprwayland-scanner", - "nixpkgs": "nixpkgs", - "systems": "systems_5", + "nixpkgs": "nixpkgs_2", + "systems": "systems_4", "xdph": "xdph" }, "locked": { - "lastModified": 1721332628, - "narHash": "sha256-kEB88spCIG7xTvKPlkghDNqZz26YHa0B06Ku2zsGFgo=", + "lastModified": 1726430622, + "narHash": "sha256-50vt1snpVwS5lqvvH4p6DHiEWspJUZuJ1kYy1DKtrfM=", "ref": "refs/heads/main", - "rev": "8e15f91c2417c8f05d69a93f1294185ccc5f8f3e", - "revCount": 4931, + "rev": "9e356562446f44c471ae38a80506a9df039305d6", + "revCount": 5224, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -228,11 +206,11 @@ ] }, "locked": { - "lastModified": 1720876257, - "narHash": "sha256-drNSMTp5qV8nm4e6XijygrCtnbaKzP0oEKfYV+1mIfg=", + "lastModified": 1723143591, + "narHash": "sha256-dPcWAeRJoG5CyWC32X3XX+Og0v/k1/S1N0T5dQWT32k=", "owner": "hyprwm", "repo": "hyprland-plugins", - "rev": "928164d6d2560a20328c74b6b3e5da271e8e0b5a", + "rev": "b73d7b901d8cb1172dd25c7b7159f0242c625a77", "type": "github" }, "original": { @@ -255,11 +233,11 @@ ] }, "locked": { - "lastModified": 1718746314, - "narHash": "sha256-HUklK5u86w2Yh9dOkk4FdsL8eehcOZ95jPhLixGDRQY=", + "lastModified": 1721326555, + "narHash": "sha256-zCu4R0CSHEactW9JqYki26gy8h9f6rHmSwj4XJmlHgg=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "1b61f0093afff20ab44d88ad707aed8bf2215290", + "rev": "5a11232266bf1a1f5952d5b179c3f4b2facaaa84", "type": "github" }, "original": { @@ -313,11 +291,11 @@ ] }, "locked": { - "lastModified": 1720381373, - "narHash": "sha256-lyC/EZdHULsaAKVryK11lgHY9u6pXr7qR4irnxNWC7k=", + "lastModified": 1725997860, + "narHash": "sha256-d/rZ/fHR5l1n7PeyLw0StWMNLXVU9c4HFyfskw568so=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "5df0174fd09de4ac5475233d65ffc703e89b82eb", + "rev": "dfeb5811dd6485490cce18d6cc1e38a055eea876", "type": "github" }, "original": { @@ -362,14 +340,14 @@ "nixpkgs": [ "nixpkgs" ], - "systems": "systems_6" + "systems": "systems_5" }, "locked": { - "lastModified": 1721402798, - "narHash": "sha256-41nFfp21bY5cr6Pb5x8OgtTXRlZJgKlKWWfxbjT0fwc=", + "lastModified": 1725535663, + "narHash": "sha256-hsvbU1utffVOFTRa3arPepv8en42VltR33L72vK3QVo=", "owner": "hyprwm", "repo": "hyprlock", - "rev": "20c01d91d4d04767ab6ea997a23cfa65fe043cf6", + "rev": "153977aab35a72f3e142e32aed6b268b659d18e1", "type": "github" }, "original": { @@ -415,11 +393,11 @@ ] }, "locked": { - "lastModified": 1721071737, - "narHash": "sha256-qmC9jGfbE4+EIBbbSAkrfR/p49wShjpv4/KztgE/P54=", + "lastModified": 1724966483, + "narHash": "sha256-WXDgKIbzjYKczxSZOsJplCS1i1yrTUpsDPuJV/xpYLo=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "eb1ceff2b87f6820789249f63faa8e9dcb54d05f", + "rev": "8976e3f6a5357da953a09511d0c7f6a890fb6ec2", "type": "github" }, "original": { @@ -465,11 +443,11 @@ ] }, "locked": { - "lastModified": 1720215857, - "narHash": "sha256-JPdL+Qul+jEueAn8CARfcWP83eJgwkhMejQYfDvrgvU=", + "lastModified": 1721324119, + "narHash": "sha256-SOOqIT27/X792+vsLSeFdrNTF+OSRp5qXv6Te+fb2Qg=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "d5fa094ca27e0039be5e94c0a80ae433145af8bb", + "rev": "a048a6cb015340bd82f97c1f40a4b595ca85cc30", "type": "github" }, "original": { @@ -478,25 +456,13 @@ "type": "github" } }, - "langref": { - "flake": false, - "locked": { - "narHash": "sha256-O6p2tiKD8ZMhSX+DeA/o5hhAvcPkU2J9lFys/r11peY=", - "type": "file", - "url": "https://raw.githubusercontent.com/ziglang/zig/0fb2015fd3422fc1df364995f9782dfe7255eccd/doc/langref.html.in" - }, - "original": { - "type": "file", - "url": "https://raw.githubusercontent.com/ziglang/zig/0fb2015fd3422fc1df364995f9782dfe7255eccd/doc/langref.html.in" - } - }, "nixpkgs": { "locked": { - "lastModified": 1720957393, - "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=", + "lastModified": 1725634671, + "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb", + "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", "type": "github" }, "original": { @@ -508,16 +474,16 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1705957679, - "narHash": "sha256-Q8LJaVZGJ9wo33wBafvZSzapYsjOaNjP/pOnSiKVGHY=", + "lastModified": 1726062281, + "narHash": "sha256-PyFVySdGj3enKqm8RQuo4v1KLJLmNLOq2yYOHsI6e2Q=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9a333eaa80901efe01df07eade2c16d183761fa3", + "rev": "e65aa8301ba4f0ab8cb98f944c14aa9da07394f8", "type": "github" }, "original": { "owner": "nixos", - "ref": "release-23.05", + "ref": "release-24.05", "repo": "nixpkgs", "type": "github" } @@ -540,11 +506,27 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1721138476, - "narHash": "sha256-+W5eZOhhemLQxelojLxETfbFbc19NWawsXBlapYpqIA=", + "lastModified": 1725983898, + "narHash": "sha256-4b3A9zPpxAxLnkF9MawJNHDtOOl6ruL0r6Og1TEDGCE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1355a0cbfeac61d785b7183c0caaec1f97361b43", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1726243404, + "narHash": "sha256-sjiGsMh+1cWXb53Tecsm4skyFNag33GPbVgCdfj3n9I=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ad0b5eed1b6031efaed382844806550c3dcb4206", + "rev": "345c263f2f53a3710abe117f28a5cb86d0ba4059", "type": "github" }, "original": { @@ -556,27 +538,28 @@ }, "root": { "inputs": { + "ags": "ags", "ghostty": "ghostty", "home-manager": "home-manager", "hypridle": "hypridle", "hyprland": "hyprland", "hyprland-plugins": "hyprland-plugins", "hyprlock": "hyprlock", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_3" } }, "systems": { "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", "type": "github" }, "original": { "owner": "nix-systems", - "repo": "default", + "repo": "default-linux", "type": "github" } }, @@ -597,16 +580,16 @@ }, "systems_3": { "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", "type": "github" }, "original": { "owner": "nix-systems", - "repo": "default", + "repo": "default-linux", "type": "github" } }, @@ -640,21 +623,6 @@ "type": "github" } }, - "systems_6": { - "locked": { - "lastModified": 1689347949, - "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", - "owner": "nix-systems", - "repo": "default-linux", - "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default-linux", - "type": "github" - } - }, "xdph": { "inputs": { "hyprland-protocols": "hyprland-protocols", @@ -672,11 +640,11 @@ ] }, "locked": { - "lastModified": 1720194466, - "narHash": "sha256-Rizg9efi6ue95zOp0MeIV2ZedNo+5U9G2l6yirgBUnA=", + "lastModified": 1726046979, + "narHash": "sha256-6SEsjurq9cdTkITA6d49ncAJe4O/8CgRG5/F//s6Xh8=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "b9b97e5ba23fe7bd5fa4df54696102e8aa863cf6", + "rev": "e695669fd8e1d1be9eaae40f35e00f8bd8b64c18", "type": "github" }, "original": { @@ -709,56 +677,6 @@ "repo": "zig-overlay", "type": "github" } - }, - "zig-overlay": { - "inputs": { - "flake-compat": "flake-compat", - "flake-utils": "flake-utils_3", - "nixpkgs": [ - "ghostty", - "zls", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1718539737, - "narHash": "sha256-hvQ900gSqzGnJWMRQwv65TixciIbC44iX0Nh5ENRwCU=", - "owner": "mitchellh", - "repo": "zig-overlay", - "rev": "6eb42ce6f85d247b1aecf854c45d80902821d0ad", - "type": "github" - }, - "original": { - "owner": "mitchellh", - "repo": "zig-overlay", - "type": "github" - } - }, - "zls": { - "inputs": { - "flake-utils": "flake-utils_2", - "gitignore": "gitignore", - "langref": "langref", - "nixpkgs": [ - "ghostty", - "nixpkgs-stable" - ], - "zig-overlay": "zig-overlay" - }, - "locked": { - "lastModified": 1718930611, - "narHash": "sha256-FtfVhs6XHNfSQRQorrrz03nD0LCNp2FCnGllRntHBts=", - "owner": "zigtools", - "repo": "zls", - "rev": "0b9746b60c2020ab948f6556f1c729858b82a0f0", - "type": "github" - }, - "original": { - "owner": "zigtools", - "ref": "master", - "repo": "zls", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index e4c8732..411824f 100644 --- a/flake.nix +++ b/flake.nix @@ -8,7 +8,9 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + ags.url = "github:Aylur/ags"; hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; + # hyprland.url = "github:hyprwm/Hyprland"; hyprland-plugins = { url = "github:hyprwm/hyprland-plugins"; inputs.hyprland.follows = "hyprland"; diff --git a/hosts/default/configuration.nix b/hosts/default/configuration.nix index cdadf9e..01c6ee2 100644 --- a/hosts/default/configuration.nix +++ b/hosts/default/configuration.nix @@ -40,7 +40,7 @@ }; # Set your time zone. - time.timeZone = "America/New_York"; + time.timeZone = "Europe/Madrid"; # Select internationalisation properties. i18n= { @@ -73,12 +73,16 @@ dwm.enable = true; }; }; + # displayManager.sddm = { # enable = true; # wayland.enable = true; # }; - desktopManager.plasma6.enable = true; + + # desktopManager.plasma6.enable = true; + libinput.enable = true; + greetd = { enable = true; restart = true; @@ -88,18 +92,30 @@ }; }; }; + blueman.enable = true; + printing.enable = true; # Enable CUPS to print documents. gvfs.enable = true; + auto-cpufreq.enable = true; thermald.enable = true; + + power-profiles-daemon.enable = false; + + ## enable/disable camera + # pipewire.wireplumber.extraConfig = { + # "10-enable-camera" = { + # "wireplumber.profiles" = { + # main = { + # "monitor.libcamera" = "enabled"; + # }; + # }; + # }; + # }; }; - # powerManagement = { - # enable = true; - # powertop.enable = true; - # }; - services.power-profiles-daemon.enable = false; + security.pam.services.hyprlock = {}; environment.etc."greetd/environments".text = '' Hyprland @@ -109,16 +125,19 @@ hardware = { bluetooth.enable = true; - graphics.enable = true; - pulseaudio.enable = true; + graphics = { + enable = true; + extraPackages = with pkgs;[ + intel-compute-runtime + intel-media-driver + ]; + }; + pulseaudio.enable = false; # System76 Devices system76.enableAll = true; }; - # security.pam.services.swaylock = {}; - security.pam.services.hyprlock = {}; - fonts.packages = with pkgs; [ noto-fonts noto-fonts-cjk @@ -206,6 +225,7 @@ file ripgrep wget + glib spotify discord wl-clipboard diff --git a/hosts/default/home.nix b/hosts/default/home.nix index a1bf93a..25590e8 100644 --- a/hosts/default/home.nix +++ b/hosts/default/home.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, callPackage, ... }: +{ config, pkgs, lib, callPackage, inputs, ... }: { home.username = "liamm"; @@ -6,6 +6,7 @@ imports = [ # home-manager + inputs.ags.homeManagerModules.default ../../modules/home-manager/dunst.nix ../../modules/home-manager/tmux.nix ../../modules/home-manager/fastfetch.nix @@ -40,24 +41,27 @@ genymotion gimp gnome-keyring - gnome.gnome-sound-recorder - gnome.gvfs - nautilus + gnome-sound-recorder + gtk4 + gvfs grim grimblast htop imagemagick + imhex keepassxc libsForQt5.polkit-kde-agent libtool libreoffice mpv + nautilus networkmanagerapplet nwg-look openvpn pamixer pavucontrol picom + powertop praat prismlauncher qbittorrent @@ -170,6 +174,10 @@ # BEGIN PROGRAMS programs = { + ags = { + enable = true; + configDir = ../../modules/home-manager/ags; + }; bash = { enable = true; enableCompletion = true; diff --git a/modules/desktop/hyprland.nix b/modules/desktop/hyprland.nix index 0950ba0..84bf69e 100644 --- a/modules/desktop/hyprland.nix +++ b/modules/desktop/hyprland.nix @@ -8,15 +8,11 @@ }: { - imports = with inputs; [ - # hypridle.homeManagerModules.default - # hyprlock.homeManagerModules.default - # hyprpaper.homeManagerModules.default - ]; home.packages = with pkgs; [ hyprpicker hyprlock hypridle + hyprpaper ]; wayland.windowManager.hyprland = { package = inputs.hyprland.packages.${pkgs.system}.hyprland; @@ -29,7 +25,7 @@ ]; }; plugins = [ - # inputs.hyprland-plugins.packages.${pkgs.system}.hyprexpo + #inputs.hyprland-plugins.packages.${pkgs.system}.hyprexpo ]; settings = { monitor = [ @@ -40,7 +36,7 @@ exec-once = [ "wl-clipboard-history -t" "wl-paste -p --watch wl-copy -p ''" - "swww init" + # "ags" ]; env = [ "WLR_NO_HARDWARE_CURSORS,1" @@ -49,9 +45,10 @@ "XDG_CURRENT_DESKTOP,Hyprland" "XDG_SESSION_TYPE,wayland" "XDG_SESSION_DESKTOP,Hyprland" + "GTK_THEME,${config.gtk.theme.name}" "QT_QPA_PLATFORM,xcb;Hyprland" - # "XCURSOR_THEME,${config.gtk.cursorTheme.name}" - # "XCURSOR_SIZE,24" + "XCURSOR_THEME,${config.gtk.cursorTheme.name}" + "XCURSOR_SIZE,24" ]; input = { kb_layout = "us"; @@ -130,6 +127,7 @@ gestures = { workspace_swipe = true; + workspace_swipe_forever = true; }; windowrule = [ @@ -178,7 +176,7 @@ bind = [ # "$mainMod, grave, hyprexpo:expo, toggle" # can be: toggle, off/disable or on/enable "$altMod, Return, exec, ghostty" - "$mainMod, Return, exec, ghostty" # for apps that yoink alt- binds + "$mainMod, Return, exec, GDK_BACKEND=x11 ghostty" # Until NixOS Fixes EGL Drivers "$altMod SHIFT, Return, exec, alacritty" "$mainMod SHIFT, D, exec, discord --enable-blink-features=MiddleClickAutoscroll" "$mainMod SHIFT, E, exec, emacsclient -c -a 'emacs'" @@ -352,7 +350,7 @@ }; background = [ { - path = "/home/liamm/pictures/desert.png"; + path = "/home/liamm/pictures/.wallpapers/bloody_snow.jpg"; blur_passes = 2; blur_size = 8; } @@ -417,39 +415,55 @@ }; }; - services.hypridle = { - enable = true; - settings = { - general = { - lock_cmd = "${pkgs.procps}/bin/pidof hyprlock || ${pkgs.hyprlock}/bin/hyprlock"; # avoid starting multiple sessions - before_sleep_cmd = "${pkgs.systemd}/bin/loginctl lock-session"; # lock before suspend. - after_sleep_cmd = "${pkgs.hyprland}/bin/hyprctl dispatch dpms on"; # to avoid having to hit key twice to turn on display + services = { + hyprpaper = { + enable = true; + settings = { + ipc = "on"; + splash = false; + preload = [ + "~/pictures/desert.png" + "~/pictures/.wallpapers/bloody_snow.jpg" + ]; + wallpaper = [ + "eDP-1,~/pictures/.wallpapers/bloody_snow.jpg" + ]; + }; + }; + hypridle = { + enable = true; + settings = { + general = { + lock_cmd = "${pkgs.procps}/bin/pidof hyprlock || ${pkgs.hyprlock}/bin/hyprlock"; # avoid starting multiple sessions + before_sleep_cmd = "${pkgs.systemd}/bin/loginctl lock-session"; # lock before suspend. + after_sleep_cmd = "${pkgs.hyprland}/bin/hyprctl dispatch dpms on"; # to avoid having to hit key twice to turn on display + }; + listeners = [ + { + timeout = 120; + on-timeout = "${pkgs.brightnessctl}/bin/brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor. + on-resume = "${pkgs.brightnessctl}/bin/brightnessctl -r"; # monitor backlight restor. + } + { + timeout = 120; + on-timeout = "${pkgs.brightnessctl}/bin/brightnessctl -sd rgb:kbd_backlight set 0"; # turn off keyboard backlight. + on-resume = "${pkgs.brightnessctl}/bin/brightnessctl -rd rgb:kbd_backlight"; # turn on keyboard backlight. + } + { + timeout = 180; + on-timeout = "${pkgs.systemd}/bin/loginctl lock-session"; # lock screen when timeout has passed + } + { + timeout = 300; + on-timeout = "${pkgs.hyprland}/bin/hyprctl dispatch dpms off"; # screen off when timeout has passed + on-resume = "${pkgs.hyprland}/bin/hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired. + } + { + timeout = 300; + on-timeout = "${pkgs.systemd}/bin/systemctl suspend"; # suspend pc + } + ]; }; - listeners = [ - { - timeout = 120; - on-timeout = "${pkgs.brightnessctl}/bin/brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor. - on-resume = "${pkgs.brightnessctl}/bin/brightnessctl -r"; # monitor backlight restor. - } - { - timeout = 120; - on-timeout = "${pkgs.brightnessctl}/bin/brightnessctl -sd rgb:kbd_backlight set 0"; # turn off keyboard backlight. - on-resume = "${pkgs.brightnessctl}/bin/brightnessctl -rd rgb:kbd_backlight"; # turn on keyboard backlight. - } - { - timeout = 180; - on-timeout = "${pkgs.systemd}/bin/loginctl lock-session"; # lock screen when timeout has passed - } - { - timeout = 300; - on-timeout = "${pkgs.hyprland}/bin/hyprctl dispatch dpms off"; # screen off when timeout has passed - on-resume = "${pkgs.hyprland}/bin/hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired. - } - { - timeout = 300; - on-timeout = "${pkgs.systemd}/bin/systemctl suspend"; # suspend pc - } - ]; }; }; } diff --git a/modules/home-manager/ags/applauncher.js b/modules/home-manager/ags/applauncher.js new file mode 100644 index 0000000..551f734 --- /dev/null +++ b/modules/home-manager/ags/applauncher.js @@ -0,0 +1,109 @@ +const { query } = await Service.import("applications") +const WINDOW_NAME = "applauncher" + +/** @param {import('resource:///com/github/Aylur/ags/service/applications.js').Application} app */ +const AppItem = app => Widget.Button({ + on_clicked: () => { + App.closeWindow(WINDOW_NAME) + app.launch() + }, + attribute: { app }, + child: Widget.Box({ + children: [ + Widget.Icon({ + icon: app.icon_name || "", + size: 42, + }), + Widget.Label({ + class_name: "title", + label: app.name, + xalign: 0, + vpack: "center", + truncate: "end", + }), + ], + }), +}) + +const Applauncher = ({ width = 500, height = 500, spacing = 12 }) => { + // list of application buttons + let applications = query("").map(AppItem) + + // container holding the buttons + const list = Widget.Box({ + vertical: true, + children: applications, + spacing, + }) + + // repopulate the box, so the most frequent apps are on top of the list + function repopulate() { + applications = query("").map(AppItem) + list.children = applications + } + + // search entry + const entry = Widget.Entry({ + hexpand: true, + css: `margin-bottom: ${spacing}px;`, + + // to launch the first item on Enter + on_accept: () => { + // make sure we only consider visible (searched for) applications + const results = applications.filter((item) => item.visible); + if (results[0]) { + App.toggleWindow(WINDOW_NAME) + results[0].attribute.app.launch() + } + }, + + // filter out the list + on_change: ({ text }) => applications.forEach(item => { + item.visible = item.attribute.app.match(text ?? "") + }), + }) + + return Widget.Box({ + vertical: true, + css: `margin: ${spacing * 2}px;`, + children: [ + entry, + + // wrap the list in a scrollable + Widget.Scrollable({ + hscroll: "never", + css: `min-width: ${width}px;` + + `min-height: ${height}px;`, + child: list, + }), + ], + setup: self => self.hook(App, (_, windowName, visible) => { + if (windowName !== WINDOW_NAME) + return + + // when the applauncher shows up + if (visible) { + repopulate() + entry.text = "" + entry.grab_focus() + } + }), + }) +} + +// there needs to be only one instance +export function applauncher() { + return Widget.Window({ + name: WINDOW_NAME, + setup: self => self.keybind("Escape", () => { + App.closeWindow(WINDOW_NAME) + }), + visible: false, + keymode: "exclusive", + child: Applauncher({ + width: 500, + height: 500, + spacing: 12, + }), + }) +} diff --git a/modules/home-manager/ags/config.js b/modules/home-manager/ags/config.js index e69de29..3be9672 100644 --- a/modules/home-manager/ags/config.js +++ b/modules/home-manager/ags/config.js @@ -0,0 +1,236 @@ +const hyprland = await Service.import("hyprland") +const notifications = await Service.import("notifications") +const mpris = await Service.import("mpris") +const audio = await Service.import("audio") +import { applauncher } from "./applauncher.js" +const battery = await Service.import("battery") +const systemtray = await Service.import("systemtray") + +const date = Variable("", { + poll: [1000, 'date "+%H:%M:%S %b %e."'], +}) + +// widgets can be only assigned as a child in one container +// so to make a reuseable widget, make it a function +// then you can simply instantiate one by calling it + +function Workspaces() { + const activeId = hyprland.active.workspace.bind("id") + const workspaces = hyprland.bind("workspaces") + .as(ws => ws.map(({ id }) => Widget.Button({ + on_clicked: () => hyprland.messageAsync(`dispatch workspace ${id}`), + child: Widget.Label(`${id}`), + class_name: activeId.as(i => `${i === id ? "focused" : ""}`), + }))) + + return Widget.Box({ + class_name: "workspaces", + children: workspaces, + }) +} + + +function ClientTitle() { + return Widget.Label({ + class_name: "client-title", + label: hyprland.active.client.bind("title"), + }) +} + + +function Clock() { + return Widget.Label({ + class_name: "clock", + label: date.bind(), + }) +} + + +// we don't need dunst or any other notification daemon +// because the Notifications module is a notification daemon itself +function Notification() { + const popups = notifications.bind("popups") + return Widget.Box({ + class_name: "notification", + visible: popups.as(p => p.length > 0), + children: [ + Widget.Icon({ + icon: "preferences-system-notifications-symbolic", + }), + Widget.Label({ + label: popups.as(p => p[0]?.summary || ""), + }), + ], + }) +} + + +function Media() { + const label = Utils.watch("", mpris, "player-changed", () => { + if (mpris.players[0]) { + const { track_artists, track_title } = mpris.players[0] + return `${track_artists.join(", ")} - ${track_title}` + } else { + return "Nothing is playing" + } + }) + + return Widget.Button({ + class_name: "media", + on_primary_click: () => mpris.getPlayer("")?.playPause(), + on_scroll_up: () => mpris.getPlayer("")?.next(), + on_scroll_down: () => mpris.getPlayer("")?.previous(), + child: Widget.Label({ label }), + }) +} + +function Volume() { + const icons = { + 101: "overamplified", + 67: "high", + 34: "medium", + 1: "low", + 0: "muted", + } + + function getIcon() { + const icon = audio.speaker.is_muted ? 0 : [101, 67, 34, 1, 0].find( + threshold => threshold <= audio.speaker.volume * 100) + + return `audio-volume-${icons[icon]}-symbolic` + } + + const icon = Widget.Icon({ + icon: Utils.watch(getIcon(), audio.speaker, getIcon), + }) + + const slider = Widget.Slider({ + hexpand: true, + draw_value: false, + on_change: ({ value }) => audio.speaker.volume = value, + setup: self => self.hook(audio.speaker, () => { + self.value = audio.speaker.volume || 0 + }), + }) + + const vol = ` ${audio.speaker.volume}%`; + const scroller = Widget.EventBox({ + onScrollUp: () => { audio.speaker.volume = audio.speaker.volume + 10 }, + onScrollDown: () => { audio.speaker.volume = audio.speaker.volume + 10 }, + }); + + return Widget.Box({ + class_name: "volume", + css: "min-width: 180px", + children: [ + icon, + //scroller, + slider, + //Widget.Label({ label: vol }), + ], + }) +} + + +function BatteryLabel() { + const icon = battery.bind("percent").as(p => + `battery-level-${Math.floor(p / 10) * 10}-symbolic`) + + //let bat_lvl = battery.bind('percent').as(p => p > 0 ? p / 100 : 0); + let bat_lvl = battery.percent; + let str = ` ${bat_lvl}%`; + + return Widget.Box({ + class_name: "battery", + visible: battery.bind("available"), + children: [ + Widget.Icon({ icon }), + Widget.Label({ label: str }), + ], + }) +} + + +function SysTray() { + const items = systemtray.bind("items") + .as(items => items.map(item => Widget.Button({ + child: Widget.Icon({ icon: item.bind("icon") }), + on_primary_click: (_, event) => item.activate(event), + on_secondary_click: (_, event) => item.openMenu(event), + tooltip_markup: item.bind("tooltip_markup"), + }))) + + return Widget.Box({ + children: items, + }) +} + + +function Wofi() { + return Widget.Button({ + on_clicked: () => applauncher(), + child: Widget.Label(""), + }); +} +// layout of the bar +function Left() { + const applauncher_button = Widget.Button({ + on_clicked: () => applauncher, + child: Widget.Label("Wofi"), + }); + return Widget.Box({ + spacing: 8, + children: [ + Workspaces(), + ClientTitle(), + Wofi(), + ], + }) +} + +function Center() { + return Widget.Box({ + spacing: 8, + children: [ + Media(), + Notification(), + ], + }) +} + +function Right() { + return Widget.Box({ + hpack: "end", + spacing: 8, + children: [ + Volume(), + BatteryLabel(), + Clock(), + SysTray(), + ], + }) +} + +function Bar(monitor = 0) { + return Widget.Window({ + name: `bar-${monitor}`, // name has to be unique + class_name: "bar", + monitor, + anchor: ["top", "left", "right"], + exclusivity: "exclusive", + child: Widget.CenterBox({ + start_widget: Left(), + center_widget: Center(), + end_widget: Right(), + }), + }) +} + +App.config({ + style: "./style.css", + windows: [ + Bar(0), + ], +}) + +export { } diff --git a/modules/home-manager/ags/style.css b/modules/home-manager/ags/style.css index e69de29..b63c61e 100644 --- a/modules/home-manager/ags/style.css +++ b/modules/home-manager/ags/style.css @@ -0,0 +1,41 @@ +window.bar { + background-color: @theme_bg_color; + color: @theme_fg_color; + backdrop-filter: blur(10px); +} + +button { + min-width: 0; + padding-top: 0; + padding-bottom: 0; + background-color: transparent; +} + +button:active { + background-color: @theme_selected_bg_color; +} + +button:hover { + border-bottom: 3px solid @theme_fg_color; +} + +label { + font-weight: bold; +} + +.workspaces button.focused { + border-bottom: 3px solid @theme_selected_bg_color; +} + +.client-title { + color: @theme_selected_bg_color; +} + +.notification { + color: yellow; +} + +levelbar block, +highlight { + min-height: 10px; +} diff --git a/modules/home-manager/fastfetch.nix b/modules/home-manager/fastfetch.nix index ecfed9a..126be0d 100644 --- a/modules/home-manager/fastfetch.nix +++ b/modules/home-manager/fastfetch.nix @@ -5,7 +5,7 @@ enable = true; settings = { logo = { - source = "~/pictures/smol-penguin.png"; + source = "~/pictures/lil-penguin.png"; type = "kitty-direct"; width = 18; height = 9; @@ -47,6 +47,8 @@ "vulkan" "disk" "battery" + "break" + "colors" ]; }; }; diff --git a/modules/old_configs/emacs/config.org b/modules/old_configs/emacs/config.org index a00ccb4..b07d068 100644 --- a/modules/old_configs/emacs/config.org +++ b/modules/old_configs/emacs/config.org @@ -31,7 +31,6 @@ - [[#shells-and-terminals][SHELLS AND TERMINALS]] - [[#eshell][Eshell]] - [[#vterm][Vterm]] - - [[#vterm-toggle][Vterm-Toggle]] - [[#sudo-edit][SUDO EDIT]] - [[#theme][THEME]] - [[#transparency][TRANSPARENCY]] @@ -188,7 +187,6 @@ (lm/leader-keys "t" '(:ignore t :wk "Toggle") "t l" '(display-line-numbers-mode :wk "Toggle line numbers") - "t v" '(vterm-toggle :wk "Toggle Vterm") "t i" '(org-toggle-inline-images :wk "Toggle inline images") "t t" '(visual-line-mode :wk "Toggle truncated lines")) @@ -224,6 +222,10 @@ "w J" '(evil-window-move-very-bottom :wk "Move split to bottom") "w K" '(evil-window-move-very-top :wk "Move split to top") "w L" '(evil-window-move-far-right :wk "Move split to right") + "w >" '(evil-window-increase-width :wk "Increase window width") + "w ." '(evil-window-increase-width :wk "Increase window width") + "w <" '(evil-window-decrease-width :wk "Increase window width") + "w ," '(evil-window-decrease-width :wk "Increase window width") "w c" '(evil-window-delete :wk "Close window") "w o" '(delete-other-windows :wk "Delete other windows") "w =" '(balance-windows :wk "Balance windows") @@ -295,15 +297,11 @@ (setq dashboard-set-file-icons t) (setq dashboard-banner-logo-title "Welcome to Emacs!") (setq dashboard-startup-banner 'logo) ;; default logo - ;; (setq dashboard-startup-banner "~/pictures/vsmol-penguin.png") (setq dashboard-center-content t) (setq dashboard-items '((recents . 5) (agenda . 5) (bookmarks . 3) - ;; (registers . 3) (projects . 3))) - ;; (dashboard-modify-heading-icons '((recents . "file-text") - ;; (bookmarks . "book"))) :config (dashboard-setup-startup-hook)) @@ -601,31 +599,6 @@ Vterm is a terminal emulator within Emacs. The 'shell-file-name' setting sets t vterm-max-scrollback 5000)) #+end_src -** Vterm-Toggle -Vterm-Toggle toggles between vterm buffer and whatever you're editing -#+begin_src emacs-lisp - (use-package vterm-toggle - :after vterm - :config - (setq vterm-toggle-fullscreen-p nil) - (setq vterm-toggle-scope 'project) - (add-to-list 'display-buffer-alist - '((lambda (buffer-or-name _) - (let ((buffer (get-buffer buffer-or-name))) - (with-current-buffer buffer - (or (equal major-mode 'vterm-mode) - (string-prefix-p vterm-buffer-name (buffer-name buffer)))))) - (display-buffer-reuse-window display-buffer-at-bottom) - ;;(display-buffer-reuse-window display-buffer-in-direction) - ;;display-buffer-in-direction/direction/dedicated is added in emacs27 - ;;(direction . bottom) - ;;(dedicated . t) ;dedicated is supported in emacs27 - (reusable-frames . visible) - (window-height . 0.3)))) - - -#+end_src - * SUDO EDIT Enable editing of privileged files diff --git a/modules/old_configs/ghostty/config b/modules/old_configs/ghostty/config index b7fbc43..22409e6 100644 --- a/modules/old_configs/ghostty/config +++ b/modules/old_configs/ghostty/config @@ -12,7 +12,6 @@ keybind = ctrl+shift+n=new_window # window stuff background-opacity=0.9 -#background-opacity=1 unfocused-split-opacity = 0.9 confirm-close-surface = false window-theme = dark @@ -22,7 +21,7 @@ window-decoration = false gtk-wide-tabs = true # macos specific -macos-non-native-fullscreen = true +#macos-non-native-fullscreen = true # font font-size = 12 diff --git a/modules/old_configs/waybar/config.jsonc b/modules/old_configs/waybar/config.jsonc index ad23b2e..e9102ca 100644 --- a/modules/old_configs/waybar/config.jsonc +++ b/modules/old_configs/waybar/config.jsonc @@ -13,7 +13,7 @@ "spacing": 0, "gtk-layer-shell": true, "modules-left": [ - //"custom/notification", + "custom/notification", "custom/kernel", // "custom/updates", "clock", @@ -49,44 +49,27 @@ "interval": "once" }, - // "custom/updates": { - // // maybe add check to not attempt run when offline - // "exec": "( checkupdates; paru -Qua ) | wc -l", - // "interval": 7200, - // "format": "󰏖\n{}", - // "on-click": "( checkupdates; paru -Qua ) | wc -l", - // }, - "clock": { "interval": 1, - "format": " \n{:%d/%m\n 󰥔\n%R}", + "format": "\n{:%d/%m\n 󰥔 \n %R}", "tooltip": true, - "tooltip-format": "{:%Y %B}\n{calendar}" + "tooltip-format": "{:%Y %B} {calendar}" }, "disk": { "interval": 30, "path": "/home", - "format": "\n {path}:\n {percentage_used}%", + "format": "\n {path}\n {percentage_used}%", "alt-format": " {path}:{used}\/{total}", "tooltip-format": " {path}:{used}\/{total}", }, "keyboard-state": { "capslock": true, - "format": "CAPS\n {icon}", + "format": "CAPS\n {icon}", "format-icons": {"locked": "", "unlocked": ""} }, - //"keyboard-state#Num": { - // "numlock": true, - // "format": "#lk: {icon}", - // "format-icons": {"locked": "", "unlocked": ""} - //}, "modules-center": [ - //"hyprland/workspaces", "wlr/taskbar" - //"river/tags" - //"hyprland/submap", - //"hyprland/window" ], "river/tags": { "on-click": "activate", @@ -143,22 +126,15 @@ }, "hyprland/window": { "format": "{icon}", - //"format": " {:.40} ", "separate-outputs": false }, "modules-right": [ "tray", "custom/wofi", - // "cpu", - // "memory", - // "backlight", "pulseaudio#microphone", "pulseaudio#audio", - //"bluetooth", "backlight", "network", - //"network#wlan0", - //"network#enp46s0", "battery" ], "tray": {