diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..d1362b3 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,17 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Build Hyprland Configuration", + "type": "shell", + "command": "nix", + "args": [ + "build", + ".#homeConfigurations.panotaka@Bellerophon.activationPackage" + ], + "group": "build", + "isBackground": false, + "problemMatcher": [] + } + ] +} \ No newline at end of file diff --git a/flake.lock b/flake.lock index e7c8115..1ef902b 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,47 @@ { "nodes": { + "ags": { + "inputs": { + "astal": "astal", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1755729720, + "narHash": "sha256-F6NKjTnVe5we9N7HAux1LEibshcTOndmm18TePGWQ68=", + "owner": "aylur", + "repo": "ags", + "rev": "c674fe0e4130cec4f16e620c1fe30183cdb055f4", + "type": "github" + }, + "original": { + "owner": "aylur", + "repo": "ags", + "type": "github" + } + }, + "astal": { + "inputs": { + "nixpkgs": [ + "ags", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1752404970, + "narHash": "sha256-XULTToDUkIshNXEO+YP2mAHdQv8bxWDvKjbamBfOC8E=", + "owner": "aylur", + "repo": "astal", + "rev": "2c5eb54f39e1710c6e2c80915a240978beb3269a", + "type": "github" + }, + "original": { + "owner": "aylur", + "repo": "astal", + "type": "github" + } + }, "base16": { "inputs": { "fromYaml": "fromYaml" @@ -37,11 +79,11 @@ "base16-helix": { "flake": false, "locked": { - "lastModified": 1748408240, - "narHash": "sha256-9M2b1rMyMzJK0eusea0x3lyh3mu5nMeEDSc4RZkGm+g=", + "lastModified": 1752979451, + "narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=", "owner": "tinted-theming", "repo": "base16-helix", - "rev": "6c711ab1a9db6f51e2f6887cc3345530b33e152e", + "rev": "27cf1e66e50abc622fb76a3019012dc07c678fac", "type": "github" }, "original": { @@ -108,11 +150,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1754965112, - "narHash": "sha256-22HMBoUpOHdjpSrmNqpVZNRA+p4dYpTKN7JDwd/8N3k=", + "lastModified": 1755784454, + "narHash": "sha256-5LJOcUS2LoSg7qrNCPdOlBHA9YL3cMJVAqXu26DJNjw=", "owner": "cachix", "repo": "devenv", - "rev": "262213d0fbc94e1c5a556ba0d4382f0318a71f78", + "rev": "6edd3ff0206feedfd50a9e3295e0d9302131eaed", "type": "github" }, "original": { @@ -128,11 +170,11 @@ ] }, "locked": { - "lastModified": 1754971456, - "narHash": "sha256-p04ZnIBGzerSyiY2dNGmookCldhldWAu03y0s3P8CB0=", + "lastModified": 1755519972, + "narHash": "sha256-bU4nqi3IpsUZJeyS8Jk85ytlX61i4b0KCxXX9YcOgVc=", "owner": "nix-community", "repo": "disko", - "rev": "8246829f2e675a46919718f9a64b71afe3bfb22d", + "rev": "4073ff2f481f9ef3501678ff479ed81402caae6d", "type": "github" }, "original": { @@ -219,11 +261,11 @@ ] }, "locked": { - "lastModified": 1749398372, - "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", + "lastModified": 1751413152, + "narHash": "sha256-Tyw1RjYEsp5scoigs1384gIg6e0GoBVjms4aXFfRssQ=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", + "rev": "77826244401ea9de6e3bac47c2db46005e1f30b5", "type": "github" }, "original": { @@ -320,27 +362,27 @@ "gnome-shell": { "flake": false, "locked": { - "lastModified": 1744584021, - "narHash": "sha256-0RJ4mJzf+klKF4Fuoc8VN8dpQQtZnKksFmR2jhWE1Ew=", + "lastModified": 1748186689, + "narHash": "sha256-UaD7Y9f8iuLBMGHXeJlRu6U1Ggw5B9JnkFs3enZlap0=", "owner": "GNOME", "repo": "gnome-shell", - "rev": "52c517c8f6c199a1d6f5118fae500ef69ea845ae", + "rev": "8c88f917db0f1f0d80fa55206c863d3746fa18d0", "type": "github" }, "original": { "owner": "GNOME", - "ref": "48.1", + "ref": "48.2", "repo": "gnome-shell", "type": "github" } }, "hardware": { "locked": { - "lastModified": 1754564048, - "narHash": "sha256-dz303vGuzWjzOPOaYkS9xSW+B93PSAJxvBd6CambXVA=", + "lastModified": 1755330281, + "narHash": "sha256-aJHFJWP9AuI8jUGzI77LYcSlkA9wJnOIg4ZqftwNGXA=", "owner": "nixos", "repo": "nixos-hardware", - "rev": "26ed7a0d4b8741fe1ef1ee6fa64453ca056ce113", + "rev": "3dac8a872557e0ca8c083cdcfc2f218d18e113b0", "type": "github" }, "original": { @@ -356,16 +398,15 @@ ] }, "locked": { - "lastModified": 1753592768, - "narHash": "sha256-oV695RvbAE4+R9pcsT9shmp6zE/+IZe6evHWX63f2Qg=", + "lastModified": 1755755322, + "narHash": "sha256-spCxkNihCk3uT3LUrUwzdEAjLA/E0EtEgF3KVI05nlM=", "owner": "nix-community", "repo": "home-manager", - "rev": "fc3add429f21450359369af74c2375cb34a2d204", + "rev": "282b4c98de97da6667cb03de4f427371734bc39c", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-25.05", "repo": "home-manager", "type": "github" } @@ -378,11 +419,11 @@ ] }, "locked": { - "lastModified": 1754974548, - "narHash": "sha256-XMjUjKD/QRPcqUnmSDczSYdw46SilnG0+wkho654DFM=", + "lastModified": 1752603129, + "narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=", "owner": "nix-community", "repo": "home-manager", - "rev": "27a26be51ff0162a8f67660239f9407dba68d7c5", + "rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b", "type": "github" }, "original": { @@ -391,6 +432,64 @@ "type": "github" } }, + "niri": { + "inputs": { + "niri-stable": "niri-stable", + "niri-unstable": "niri-unstable", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable", + "xwayland-satellite-stable": "xwayland-satellite-stable", + "xwayland-satellite-unstable": "xwayland-satellite-unstable" + }, + "locked": { + "lastModified": 1755424351, + "narHash": "sha256-xcorYLNdtLpb0wH5CPlUcpmYQUxeK95j1X855xQw+DY=", + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "9aa137af01f05386e5bb5050e983750017007a66", + "type": "github" + }, + "original": { + "owner": "sodiboo", + "repo": "niri-flake", + "type": "github" + } + }, + "niri-stable": { + "flake": false, + "locked": { + "lastModified": 1748151941, + "narHash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "8ba57fcf25d2fc9565131684a839d58703f1dae7", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "ref": "v25.05.1", + "repo": "niri", + "type": "github" + } + }, + "niri-unstable": { + "flake": false, + "locked": { + "lastModified": 1755419373, + "narHash": "sha256-EFH3zbpyLYjEboNV2Lmkxf9joEuFCmeYX+MMLRPStpg=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "a6febb86aa5af0df7bf2792ca027ef95a503d599", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", + "type": "github" + } + }, "nix": { "inputs": { "flake-compat": [ @@ -414,11 +513,11 @@ ] }, "locked": { - "lastModified": 1752773918, - "narHash": "sha256-dOi/M6yNeuJlj88exI+7k154z+hAhFcuB8tZktiW7rg=", + "lastModified": 1755029779, + "narHash": "sha256-3+GHIYGg4U9XKUN4rg473frIVNn8YD06bjwxKS1IPrU=", "owner": "cachix", "repo": "nix", - "rev": "031c3cf42d2e9391eee373507d8c12e0f9606779", + "rev": "b0972b0eee6726081d10b1199f54de6d2917f861", "type": "github" }, "original": { @@ -435,11 +534,11 @@ ] }, "locked": { - "lastModified": 1751313918, - "narHash": "sha256-HsJM3XLa43WpG+665aGEh8iS8AfEwOIQWk3Mke3e7nk=", + "lastModified": 1755751773, + "narHash": "sha256-d1H34kko9J5fWrxCVgfa1TkIwdkGt/eDSVopAWenw24=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "e04a388232d9a6ba56967ce5b53a8a6f713cdfcf", + "rev": "3a0a38a1e7ac2c4b4150ea37a491fdffdc9c92e1", "type": "github" }, "original": { @@ -456,11 +555,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1754964312, - "narHash": "sha256-6H7a1ZB6NKYUTYfw4IjmiPI0n1AaLJmX7FBSksdLbOA=", + "lastModified": 1755741555, + "narHash": "sha256-95N5X0MHiGkCSudjPqA/Grvnhlz+XEzjnnLruG37iog=", "owner": "nix-community", "repo": "nix4vscode", - "rev": "82694090541069224a4645899c06905fbb367c3c", + "rev": "69b1b5ad001042ce730ca5c2ecc0f693ccadc94b", "type": "github" }, "original": { @@ -471,16 +570,15 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1754564048, - "narHash": "sha256-dz303vGuzWjzOPOaYkS9xSW+B93PSAJxvBd6CambXVA=", + "lastModified": 1755330281, + "narHash": "sha256-aJHFJWP9AuI8jUGzI77LYcSlkA9wJnOIg4ZqftwNGXA=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "26ed7a0d4b8741fe1ef1ee6fa64453ca056ce113", + "rev": "3dac8a872557e0ca8c083cdcfc2f218d18e113b0", "type": "github" }, "original": { "owner": "NixOS", - "ref": "master", "repo": "nixos-hardware", "type": "github" } @@ -519,27 +617,43 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1751274312, - "narHash": "sha256-/bVBlRpECLVzjV19t5KMdMFWSwKLtb5RyXdjz3LJT+g=", + "lastModified": 1755274400, + "narHash": "sha256-rTInmnp/xYrfcMZyFMH3kc8oko5zYfxsowaLv1LVobY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "50ab793786d9de88ee30ec4e4c24fb4236fc2674", + "rev": "ad7196ae55c295f53a7d1ec39e4a06d922f3b899", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-24.11", + "ref": "nixos-25.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1755704039, + "narHash": "sha256-gKlP0LbyJ3qX0KObfIWcp5nbuHSb5EHwIvU6UcNBg2A=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9cb344e96d5b6918e94e1bca2d9f3ea1e9615545", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } }, "nixpkgs-unstable": { "locked": { - "lastModified": 1754725699, - "narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=", + "lastModified": 1755615617, + "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054", + "rev": "20075955deac2583bb12f07151c2df830ef346b4", "type": "github" }, "original": { @@ -551,16 +665,16 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1754767907, - "narHash": "sha256-8OnUzRQZkqtUol9vuUuQC30hzpMreKptNyET2T9lB6g=", + "lastModified": 1755615617, + "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c5f08b62ed75415439d48152c2a784e36909b1bc", + "rev": "20075955deac2583bb12f07151c2df830ef346b4", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-25.05", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } @@ -574,15 +688,14 @@ "nixpkgs": [ "stylix", "nixpkgs" - ], - "treefmt-nix": "treefmt-nix" + ] }, "locked": { - "lastModified": 1751320053, - "narHash": "sha256-3m6RMw0FbbaUUa01PNaMLoO7D99aBClmY5ed9V3vz+0=", + "lastModified": 1751906969, + "narHash": "sha256-BSQAOdPnzdpOuCdAGSJmefSDlqmStFNScEnrWzSqKPw=", "owner": "nix-community", "repo": "NUR", - "rev": "cbde1735782f9c2bb2c63d5e05fba171a14a4670", + "rev": "ddb679f4131e819efe3bbc6457ba19d7ad116f25", "type": "github" }, "original": { @@ -600,11 +713,11 @@ ] }, "locked": { - "lastModified": 1754416808, - "narHash": "sha256-c6yg0EQ9xVESx6HGDOCMcyRSjaTpNJP10ef+6fRcofA=", + "lastModified": 1755446520, + "narHash": "sha256-I0Ok1OGDwc1jPd8cs2VvAYZsHriUVFGIUqW+7uSsOUM=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "9c52372878df6911f9afc1e2a1391f55e4dfc864", + "rev": "4b04db83821b819bbbe32ed0a025b31e7971f22e", "type": "github" }, "original": { @@ -615,16 +728,18 @@ }, "root": { "inputs": { + "ags": "ags", "devenv": "devenv", "disko": "disko", "hardware": "hardware", "home-manager": "home-manager", + "niri": "niri", "nix-darwin": "nix-darwin", "nix4vscode": "nix4vscode", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs_2", "nixpkgs-darwin": "nixpkgs-darwin", - "nixpkgs-stable": "nixpkgs-stable", + "nixpkgs-stable": "nixpkgs-stable_2", "nixpkgs-unstable": "nixpkgs-unstable", "pre-commit-hooks": "pre-commit-hooks", "stylix": "stylix", @@ -652,16 +767,15 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1754852587, - "narHash": "sha256-M+CDFvZ4ZuKK3mlbxv+37yAwL6X3tIklYgurqbhO7Q4=", + "lastModified": 1755708361, + "narHash": "sha256-RmqBx2EamhIk0WVhQSNb8iehaVhilO7D0YAnMoFPqJQ=", "owner": "danth", "repo": "stylix", - "rev": "61ffae2453d00cb63a133b750232804b209db4d1", + "rev": "2355da455d7188228aaf20ac16ea9386e5aa6f0c", "type": "github" }, "original": { "owner": "danth", - "ref": "release-25.05", "repo": "stylix", "type": "github" } @@ -778,25 +892,36 @@ "type": "github" } }, - "treefmt-nix": { - "inputs": { - "nixpkgs": [ - "stylix", - "nur", - "nixpkgs" - ] - }, + "xwayland-satellite-stable": { + "flake": false, "locked": { - "lastModified": 1733222881, - "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "49717b5af6f80172275d47a418c9719a31a78b53", + "lastModified": 1748488455, + "narHash": "sha256-IiLr1alzKFIy5tGGpDlabQbe6LV1c9ABvkH6T5WmyRI=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "3ba30b149f9eb2bbf42cf4758d2158ca8cceef73", "type": "github" }, "original": { - "owner": "numtide", - "repo": "treefmt-nix", + "owner": "Supreeeme", + "ref": "v0.6", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "xwayland-satellite-unstable": { + "flake": false, + "locked": { + "lastModified": 1755219541, + "narHash": "sha256-yKV6xHaPbEbh5RPxAJnb9yTs1wypr7do86hFFGQm1w8=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "5a184d435927c3423f0ad189ea2b490578450fb7", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "repo": "xwayland-satellite", "type": "github" } }, @@ -808,11 +933,11 @@ ] }, "locked": { - "lastModified": 1754972926, - "narHash": "sha256-2CEQSI3o7XWMc/DOdeNf6gTKjgGf8hHS0TB0HYPmSmA=", + "lastModified": 1755745641, + "narHash": "sha256-dk5XmelXuuIPr7twSyVlxcORlRKr7ch68wXd1Bz+T4c=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "508a7c0c5c993d237773be89f5ca91ff8c997b44", + "rev": "e00337af97e646e0ecb94097983f33bda767fb41", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 914703c..41abe8b 100644 --- a/flake.nix +++ b/flake.nix @@ -114,18 +114,18 @@ # # NOTE(starter): As with typical flake-based configs, you'll need to update the nixOS, hm, # and darwin version numbers below when new releases are available. - nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; # The next two inputs are for pinning nixpkgs to stable vs unstable regardless of what the above is set to. # This is particularly useful when an upcoming stable release is in beta because you can effectively # keep 'nixpkgs-stable' set to stable for critical packages while setting 'nixpkgs' to the beta branch to # get a jump start on deprecation changes. # See also 'stable-packages' and 'unstable-packages' overlays at 'overlays/default.nix" - nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-24.11"; + nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.05"; nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; hardware.url = "github:nixos/nixos-hardware"; home-manager = { - url = "github:nix-community/home-manager/release-25.05"; + url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; @@ -144,7 +144,7 @@ }; nixos-hardware = { - url = "github:NixOS/nixos-hardware/master"; + url = "github:NixOS/nixos-hardware"; }; nix4vscode = { @@ -160,7 +160,7 @@ devenv.url = "github:cachix/devenv"; stylix = { - url = "github:danth/stylix/release-25.05"; + url = "github:danth/stylix"; inputs.nixpkgs.follows = "nixpkgs"; }; @@ -172,6 +172,16 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + niri = { + url = "github:sodiboo/niri-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + ags = { + url = "github:aylur/ags"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + # # ========= Personal Repositories ========= # diff --git a/home/panotaka/common/core/default.nix b/home/panotaka/common/core/default.nix index 06517ce..90d3859 100644 --- a/home/panotaka/common/core/default.nix +++ b/home/panotaka/common/core/default.nix @@ -21,6 +21,7 @@ in { # FIXME(starter): add/edit as desired ./fonts.nix ./kitty.nix + ./ghostty.nix ./git.nix ./ssh.nix ./shell @@ -28,7 +29,7 @@ in { inherit hostSpec; - services.ssh-agent.enable = true; + #services.ssh-agent.enable = true; home = { username = lib.mkDefault config.hostSpec.username; diff --git a/home/panotaka/common/core/ghostty.nix b/home/panotaka/common/core/ghostty.nix new file mode 100644 index 0000000..49a2a31 --- /dev/null +++ b/home/panotaka/common/core/ghostty.nix @@ -0,0 +1,9 @@ +{ + programs.ghostty = { + # Enable Ghostty (adjust package/settings in host/home files if needed) + enable = true; + # Example: set a specific package or settings here if desired + # package = pkgs.ghostty; # uncomment to pin package + # settings = { theme = "default"; }; + }; +} diff --git a/home/panotaka/common/core/kitty.nix b/home/panotaka/common/core/kitty.nix index 8d1373f..e974bd0 100644 --- a/home/panotaka/common/core/kitty.nix +++ b/home/panotaka/common/core/kitty.nix @@ -1,5 +1,5 @@ { programs.kitty = { enable = true; - }; + }; } diff --git a/home/panotaka/common/optional/coding/vscode/default.nix b/home/panotaka/common/optional/coding/vscode/default.nix index c2650ce..b1a14a8 100644 --- a/home/panotaka/common/optional/coding/vscode/default.nix +++ b/home/panotaka/common/optional/coding/vscode/default.nix @@ -35,6 +35,7 @@ "ms-python.python" "jock.svg" "redhat.vscode-yaml" + "arrterian.nix-env-selector" ]; userSettings = { # --- Privacy & Telemetry --- @@ -73,6 +74,7 @@ "terraform.telemetry.enabled" = false; "vsicons.dontShowNewVersionMessage" = true; "workbench.welcomePage.walkthroughs.openOnInstall" = false; + "nixEnvSelector.useFlakes" = true; }; }; } diff --git a/home/panotaka/common/optional/desktops/gnome/default.nix b/home/panotaka/common/optional/desktops/gnome/default.nix index 0f15e88..4c4430f 100644 --- a/home/panotaka/common/optional/desktops/gnome/default.nix +++ b/home/panotaka/common/optional/desktops/gnome/default.nix @@ -23,7 +23,8 @@ gnomeExtensions.caffeine gnomeExtensions.clipboard-indicator gnomeExtensions.launch-new-instance - gnomeExtensions.pop-shell + gnomeExtensions.paperwm + gnomeExtensions.just-perfection ]; # GNOME desktop settings via dconf @@ -49,7 +50,8 @@ "caffeine@patapon.info" "clipboard-indicator@tudmotu.com" "launch-new-instance@gnome-shell-extensions.gcampax.github.com" - "pop-shell@system76.com" + "paperwm@paperwm.github.com" + "just-perfection@just-perfection" ]; }; @@ -70,21 +72,19 @@ experimental-features = ["scale-monitor-framebuffer" "variable-refresh-rate"]; }; - # Unset conflicting Pop Shell keybindings to avoid conflicts with screen lock - "org/gnome/shell/extensions/pop-shell" = { - # Unset the HJKL directional bindings - tile-up = []; # Default was ['k'] - tile-down = []; # Default was ['j'] - tile-left = []; # Default was ['h'] - tile-right = []; # Default was ['l'] - - # Unset the launcher binding that also uses Meta+L - activate-launcher = []; # Default was ['slash', 'l'] + # PaperWM extension settings placeholder + "org/gnome/shell/extensions/paperwm" = { + # Add any PaperWM-specific dconf keys here if needed }; # Ensure the standard GNOME screen lock shortcut is active "org/gnome/settings-daemon/plugins/media-keys" = { screensaver = ["l"]; }; + + # Keybindings for window management + "org/gnome/desktop/wm/keybindings" = { + close = ["q"]; + }; }; } diff --git a/home/panotaka/common/optional/desktops/gnome/zenbook-screen.nix b/home/panotaka/common/optional/desktops/gnome/zenbook-screen.nix index 99f70dd..5c0a2bf 100644 --- a/home/panotaka/common/optional/desktops/gnome/zenbook-screen.nix +++ b/home/panotaka/common/optional/desktops/gnome/zenbook-screen.nix @@ -656,5 +656,18 @@ in { "org/gnome/desktop/peripherals/touchscreens/${duoConfig.secondary_touch_id}" = { output = ["SDC" "0x419d" "0x00000000" duoConfig.secondary_display]; }; + + # Custom keybind for ZenBook display configuration + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/zenbook-displays" = { + name = "ZenBook Display Configuration"; + command = "${zenbook-duo-tools}/bin/duo auto"; + binding = "z"; + }; + + "org/gnome/settings-daemon/plugins/media-keys" = { + custom-keybindings = [ + "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/zenbook-displays/" + ]; + }; }; } diff --git a/home/panotaka/common/optional/desktops/hyprland/default.nix b/home/panotaka/common/optional/desktops/hyprland/default.nix index 52139d5..b7d1b9b 100644 --- a/home/panotaka/common/optional/desktops/hyprland/default.nix +++ b/home/panotaka/common/optional/desktops/hyprland/default.nix @@ -12,19 +12,15 @@ ./keyring.nix ]; - # Add network utility packages + # Add essential packages home.packages = with pkgs; [ - networkmanager # Network utility - uwsm # Universal Wayland Session Manager + networkmanagerapplet # NetworkManager system tray applet ]; - # Configure UWSM for Hyprland session management + # Configure Hyprland session management wayland.windowManager.hyprland = { enable = true; - plugins = with pkgs.hyprlandPlugins; [ - # Add any additional Hyprland plugins here - hyprspace - ]; + settings = { # Set mod key "$mod" = "SUPER"; @@ -35,35 +31,86 @@ "input:touchpad:middle_button_emulation" = false; # Disable middle-click paste "misc:middle_click_paste" = false; - # Enable 3-finger swipe to change workspaces - "gestures:workspace_swipe" = true; - "gestures:workspace_swipe_fingers" = 3; - "plugin:overview:reverseSwipe" = true; + # Built-in touchpad gesture configuration + "gestures" = { + # Enable workspace swipe gesture on touchpad (vertical for workspaces) + workspace_swipe = true; + # Use 3 fingers for workspace switching + workspace_swipe_fingers = 3; + # Distance for gesture recognition + workspace_swipe_distance = 300; + # Invert direction to match natural scrolling + workspace_swipe_invert = true; + # Enable workspace swiping from touchscreen edge + workspace_swipe_touch = true; + # Touchscreen invert direction + workspace_swipe_touch_invert = true; + # Create new workspace when swiping right on last workspace + workspace_swipe_create_new = true; + # Lock direction once threshold is reached + workspace_swipe_direction_lock = true; + # Direction lock threshold in pixels + workspace_swipe_direction_lock_threshold = 10; + }; - # UWSM integration - finalize session with important variables + # Essential startup services exec-once = [ - "uwsm finalize HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP WAYLAND_DISPLAY" + # Start polkit authentication agent for secure authentication + "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" + # Start NetworkManager applet for network management + "nm-applet --indicator" + ]; + + # Layer rules for proper panel/bar integration + layerrule = [ + # Waybar should be on top and reserve space + "blur,waybar" + "ignorezero,waybar" ]; # Keybinds bind = [ - # Launch terminal (kitty) via UWSM - "$mod,RETURN,exec,uwsm app -- kitty" - # Launch browser (zen) via UWSM - "$mod,B,exec,uwsm app -- zen" + # Launch terminal (kitty) + "$mod,RETURN,exec,kitty" + # Launch browser (zen) + "$mod,B,exec,zen" # Close window "$mod,Q,killactive" - # Logout - use UWSM stop - "$mod SHIFT,E,exec,uwsm stop" + # Logout + "$mod SHIFT,E,exit" - # Network utility (NetworkManager TUI) via UWSM - "$mod,N,exec,uwsm app -- kitty -e nmtui" - # Secrets manager (Seahorse - GNOME keyring GUI) via UWSM - "$mod,K,exec,uwsm app -- seahorse" + # Network utility (NetworkManager applet) + "$mod,N,exec,nm-applet" + # Secrets manager (Seahorse - GNOME keyring GUI) + "$mod,K,exec,seahorse" - # Overview - apply to all displays - "$mod,TAB,exec,hyprctl dispatch overview:toggle all" + # Standard window navigation + "$mod,Right,movefocus,r" + "$mod,Left,movefocus,l" + "$mod,Up,movefocus,u" + "$mod,Down,movefocus,d" + + # Move windows + "$mod SHIFT,Right,movewindow,r" + "$mod SHIFT,Left,movewindow,l" + "$mod SHIFT,Up,movewindow,u" + "$mod SHIFT,Down,movewindow,d" + + # Resize windows + "$mod,equal,resizeactive,10 0" + "$mod,minus,resizeactive,-10 0" + "$mod SHIFT,equal,resizeactive,0 10" + "$mod SHIFT,minus,resizeactive,0 -10" + + # Toggle split direction + "$mod,V,togglesplit" + + # Focus controls with vim keys + "$mod,H,movefocus,l" + "$mod,L,movefocus,r" + "$mod,K,movefocus,u" + "$mod,J,movefocus,d" # Move active window to workspace "$mod SHIFT,1,movetoworkspace,1" @@ -77,24 +124,47 @@ "$mod SHIFT,9,movetoworkspace,9" "$mod SHIFT,0,movetoworkspace,10" - # Cycle through workspaces - "$mod,Right,workspace,e+1" - "$mod,Left,workspace,e-1" + # Workspace switching with Meta+PageUp/PageDown + "META,Prior,workspace,e-1" # Meta+PageUp = previous workspace + "META,Next,workspace,e+1" # Meta+PageDown = next workspace + + # Workspace switching with Super+Tab/Shift+Tab + "$mod,Tab,workspace,e+1" # Super+Tab = next workspace + "$mod SHIFT,Tab,workspace,e-1" # Super+Shift+Tab = previous workspace ]; - # Mouse binds for workspace switching + # Mouse binds for window management bindm = [ - # Mod + scroll to change workspaces + # Mod + left click to move windows "$mod,mouse:272,movewindow" + # Mod + right click to resize windows "$mod,mouse:273,resizewindow" ]; - # Scroll binds for workspace switching + # Scroll binds - super+shift for workspaces binde = [ - # Mod + scroll wheel to switch workspaces - "$mod,mouse_down,workspace,e+1" - "$mod,mouse_up,workspace,e-1" + # Super+Shift+Scroll: workspace switching + "$mod SHIFT,mouse_down,workspace,e+1" + "$mod SHIFT,mouse_up,workspace,e-1" ]; }; }; + + # Session variables for proper Wayland integration + home.sessionVariables = { + NIXOS_OZONE_WL = "1"; + MOZ_ENABLE_WAYLAND = "1"; + QT_QPA_PLATFORM = "wayland"; + SDL_VIDEODRIVER = "wayland"; + _JAVA_AWT_WM_NONREPARENTING = "1"; + }; + + # Shell aliases for NetworkManager integration + home.shellAliases = { + # NetworkManager aliases for easier network management + nmcli-wifi-list = "nmcli dev wifi list"; + nmcli-connect = "nmcli dev wifi connect"; + nmcli-status = "nmcli general status"; + nmcli-connections = "nmcli connection show"; + }; } diff --git a/home/panotaka/common/optional/desktops/hyprland/hypridle.nix b/home/panotaka/common/optional/desktops/hyprland/hypridle.nix index 2c336a2..fde468e 100644 --- a/home/panotaka/common/optional/desktops/hyprland/hypridle.nix +++ b/home/panotaka/common/optional/desktops/hyprland/hypridle.nix @@ -3,7 +3,7 @@ enable = true; settings = { general = { - lock_cmd = "pidof hyprlock || uwsm app -- hyprlock"; + lock_cmd = "pidof hyprlock || hyprlock"; before_sleep_cmd = "loginctl lock-session"; after_sleep_cmd = "hyprctl dispatch dpms on"; }; diff --git a/home/panotaka/common/optional/desktops/hyprland/hyprlock.nix b/home/panotaka/common/optional/desktops/hyprland/hyprlock.nix index e6758e5..8946139 100644 --- a/home/panotaka/common/optional/desktops/hyprland/hyprlock.nix +++ b/home/panotaka/common/optional/desktops/hyprland/hyprlock.nix @@ -3,9 +3,9 @@ enable = true; }; - # Use UWSM to launch hyprlock + # Launch hyprlock wayland.windowManager.hyprland.settings.bind = [ - "$mod,L,exec,uwsm app -- hyprlock" + "$mod,L,exec,hyprlock" ]; home.packages = with pkgs; [ diff --git a/home/panotaka/common/optional/desktops/hyprland/keyring.nix b/home/panotaka/common/optional/desktops/hyprland/keyring.nix index 21af794..c78de35 100644 --- a/home/panotaka/common/optional/desktops/hyprland/keyring.nix +++ b/home/panotaka/common/optional/desktops/hyprland/keyring.nix @@ -3,6 +3,9 @@ home.packages = with pkgs; [ seahorse # GUI for managing keyrings and passwords libsecret # Secret service API library + gnome-keyring # GNOME keyring daemon + polkit_gnome # Polkit authentication agent for GNOME + networkmanager # Ensure NetworkManager is available for password integration ]; # Session variables for proper keyring integration @@ -15,17 +18,27 @@ SECRET_SERVICE_API = "1"; # Ensure proper D-Bus session bus integration DBUS_SESSION_BUS_ADDRESS = "unix:path=$XDG_RUNTIME_DIR/bus"; - # Enable password store integration - PASSWORD_STORE_ENABLE_EXTENSIONS = "true"; # Set keyring backend for applications that support it KEYRING_BACKEND = "gnome-keyring"; + # Ensure XDG runtime directory is available + XDG_RUNTIME_DIR = "/run/user/1000"; + # Enable keyring unlock via PAM + GNOME_KEYRING_UNLOCK_PASSWORD = "1"; }; - # Additional session setup for keyring integration + # Enable GNOME keyring service + services.gnome-keyring = { + enable = true; + components = ["pkcs11" "secrets" "ssh"]; + }; + + # Enable additional Wayland session variables for Hyprland wayland.windowManager.hyprland.settings.env = [ - # Ensure XDG runtime directory is available - "XDG_RUNTIME_DIR,/run/user/1000" - # Enable keyring unlock via PAM + # Ensure all keyring environment variables are available to Hyprland + "SSH_AUTH_SOCK,$XDG_RUNTIME_DIR/keyring/ssh" + "GNOME_KEYRING_CONTROL,$XDG_RUNTIME_DIR/keyring" + "SECRET_SERVICE_API,1" + "KEYRING_BACKEND,gnome-keyring" "GNOME_KEYRING_UNLOCK_PASSWORD,1" ]; } diff --git a/home/panotaka/common/optional/desktops/hyprland/waybar.nix b/home/panotaka/common/optional/desktops/hyprland/waybar.nix index adc3e1b..e9fcf15 100644 --- a/home/panotaka/common/optional/desktops/hyprland/waybar.nix +++ b/home/panotaka/common/optional/desktops/hyprland/waybar.nix @@ -124,9 +124,9 @@ }; }; - # Auto-start waybar with Hyprland via UWSM + # Auto-start waybar with Hyprland wayland.windowManager.hyprland.settings.exec-once = [ - "uwsm app -- waybar" + "waybar" ]; home.packages = with pkgs; [ diff --git a/home/panotaka/common/optional/desktops/hyprland/wofi.nix b/home/panotaka/common/optional/desktops/hyprland/wofi.nix index cee417c..1639209 100644 --- a/home/panotaka/common/optional/desktops/hyprland/wofi.nix +++ b/home/panotaka/common/optional/desktops/hyprland/wofi.nix @@ -23,18 +23,18 @@ print_command = true; layer = "overlay"; sort_order = "default"; - term = "kitty"; #, SU + term = "kitty"; exec_search = false; }; }; - # Add wofi keybind to Hyprland: just $mod for drun (toggle behavior) with UWSM integration + # Add wofi keybind to Hyprland: just $mod for drun (toggle behavior) wayland.windowManager.hyprland.settings.bindr = [ - "$mod, SUPER_L, exec, pkill wofi || wofi --show drun --launch-prefix='uwsm app -- '" + "$mod, SUPER_L, exec, pkill wofi || wofi --show drun" ]; - # Add wofi keybind to Hyprland: $mod+R for run (toggle behavior) with UWSM integration + # Add wofi keybind to Hyprland: $mod+R for run (toggle behavior) wayland.windowManager.hyprland.settings.bind = [ - "$mod,R,exec, pkill wofi || wofi --show run --launch-prefix='uwsm app -- '" + "$mod,R,exec, pkill wofi || wofi --show run" ]; home.packages = with pkgs; [ diff --git a/home/panotaka/common/optional/desktops/hyprland/zenbook-screen.nix b/home/panotaka/common/optional/desktops/hyprland/zenbook-screen.nix index 9508cec..0dccc39 100644 --- a/home/panotaka/common/optional/desktops/hyprland/zenbook-screen.nix +++ b/home/panotaka/common/optional/desktops/hyprland/zenbook-screen.nix @@ -171,15 +171,20 @@ in { vfr = true; }; - # Auto-start the event-driven display management via UWSM + # Auto-start the event-driven display management exec-once = [ - "uwsm app -- ${zenbook-autostart}/bin/zenbook-autostart" + "${zenbook-autostart}/bin/zenbook-autostart" # Additional trigger after a delay to handle race conditions - "sleep 5 && uwsm app -- ${zenbook-set-displays}/bin/zenbook-set-displays" + "sleep 5 && ${zenbook-set-displays}/bin/zenbook-set-displays" # Monitor for display hotplug events (DRM/KMS events) - "uwsm app -- sh -c 'while ${pkgs.inotify-tools}/bin/inotifywait -e modify /sys/class/drm/*/status 2>/dev/null; do sleep 1 && ${zenbook-set-displays}/bin/zenbook-set-displays; done' &" + "sh -c 'while ${pkgs.inotify-tools}/bin/inotifywait -e modify /sys/class/drm/*/status 2>/dev/null; do sleep 1 && ${zenbook-set-displays}/bin/zenbook-set-displays; done' &" # Monitor for graphics card state changes - "uwsm app -- sh -c '${pkgs.udev}/bin/udevadm monitor --udev --subsystem-match=drm | while read line; do if echo \"$line\" | grep -q \"change\"; then sleep 2 && ${zenbook-set-displays}/bin/zenbook-set-displays; fi; done' &" + "sh -c '${pkgs.udev}/bin/udevadm monitor --udev --subsystem-match=drm | while read line; do if echo \"$line\" | grep -q \"change\"; then sleep 2 && ${zenbook-set-displays}/bin/zenbook-set-displays; fi; done' &" + ]; + + # Keybind to run zenbook-set-displays + bind = [ + "$mod,Z,exec,${zenbook-set-displays}/bin/zenbook-set-displays" ]; }; diff --git a/home/panotaka/common/optional/desktops/niri/README.md b/home/panotaka/common/optional/desktops/niri/README.md new file mode 100644 index 0000000..871f97f --- /dev/null +++ b/home/panotaka/common/optional/desktops/niri/README.md @@ -0,0 +1,52 @@ +# Niri Configuration + +This directory contains the niri desktop configuration, similar to the Hyprland setup but using the niri scrollable tiling Wayland compositor. + +## Features + +- **Scrollable tiling**: Niri's unique column-based scrollable tiling layout +- **Waybar integration**: Status bar with niri-specific modules +- **Wofi launcher**: Application launcher and runner +- **Swaylock screen locking**: Screen lock with swayidle integration +- **Keyring support**: GNOME keyring integration for password management +- **Screenshot support**: Grim + Slurp for screenshots +- **Media controls**: Volume and brightness control keybindings + +## Files + +- `default.nix`: Main niri configuration with keybindings and settings +- `waybar.nix`: Status bar configuration with niri modules +- `wofi.nix`: Application launcher configuration +- `swaylock.nix`: Screen lock configuration +- `swayidle.nix`: Idle management and auto-lock +- `keyring.nix`: GNOME keyring integration + +## Key Bindings + +- `Super + Return`: Launch terminal (kitty) +- `Super + B`: Launch browser (zen) +- `Super + Q`: Close window +- `Super + Shift + E`: Quit niri +- `Super`: Launch application launcher (wofi drun) +- `Super + D`: Launch run prompt (wofi run) +- `Super + L`: Lock screen (swaylock) +- `Super + 1-0`: Switch to workspace 1-10 +- `Super + Shift + 1-0`: Move window to workspace 1-10 +- `Super + Arrow Keys`: Navigate between columns/windows +- `Super + Ctrl + Arrow Keys`: Move windows/columns +- `Super + R`: Switch column width preset +- `Super + Shift + R`: Reset window height +- `Print`: Take screenshot +- `Super + Print`: Take area screenshot + +## Usage + +To use this niri configuration, import it in your home manager configuration: + +```nix +imports = [ + ./common/optional/desktops/niri +]; +``` + +Make sure the niri-flake is added to your system's flake inputs. diff --git a/home/panotaka/common/optional/desktops/niri/ags/README.md b/home/panotaka/common/optional/desktops/niri/ags/README.md new file mode 100644 index 0000000..c5a095e --- /dev/null +++ b/home/panotaka/common/optional/desktops/niri/ags/README.md @@ -0,0 +1,103 @@ +# AGS Bar Configuration for Niri + +This AGS configuration provides a comprehensive status bar for the Niri Wayland compositor with the following features: + +## Features + +### 🕒 Clock Widget +- Displays current time and date +- Updates every second +- Format: `HH:MM Mon DD` + +### 🔊 Volume Control +- Shows current volume level and mute status +- **Left click**: Toggle mute +- Visual feedback with icons: + - 🔇 Muted + - 🔈 Low volume (0-33%) + - 🔉 Medium volume (34-66%) + - 🔊 High volume (67-100%) + +### 🔋 Battery Indicator +- Shows battery percentage +- Charging status indicator +- Icons: + - 🔌 Charging + - 🔋 Battery levels + - đŸĒĢ Low battery + +### đŸ”ĩ Bluetooth Widget +- Shows Bluetooth power status +- **Left click**: Toggle Bluetooth on/off +- **Right click**: Auto-connect to paired devices +- Shows number of connected devices +- Icons: + - đŸ”ĩ Bluetooth enabled + - âšĢ Bluetooth disabled + - 📱 Connected devices counter + +### 🌐 Network Widget +- Shows network connection status +- **Left click**: Toggle WiFi / show connection info +- Auto-connects to known networks +- Icons: + - 🌐 Wired connection + - đŸ“ļ WiFi strength indicator + - ❌ No connection +- Displays current WiFi SSID when connected + +## Multi-Monitor Support + +The bar automatically appears on all connected monitors using AGS's reactive monitor binding system. When monitors are added or removed, the bar will automatically adjust. + +## Styling + +The bar uses a modern dark theme with: +- Semi-transparent background +- Catppuccin-inspired color scheme +- Hover effects and smooth transitions +- Color-coded widget borders: + - đŸŸĸ Volume (Green) + - 🟡 Battery (Yellow) + - đŸ”ĩ Bluetooth (Blue) + - 🔴 Network (Pink) + +## Files + +- `app.tsx` - Main application entry point +- `Bar.tsx` - Bar component with all widgets +- `style.css` - Styling and theme +- `package.json` - Project configuration +- `tsconfig.json` - TypeScript configuration + +## Usage + +The bar starts automatically with Niri via the `spawn-at-startup` configuration in the main Niri config. To manually restart: + +```bash +pkill ags && ags run +``` + +## Customization + +To customize the bar: + +1. **Add new widgets**: Create functions in `Bar.tsx` and add them to the left/center/right sections +2. **Modify styling**: Edit `style.css` to change colors, spacing, and animations +3. **Change layout**: Modify the `centerbox` structure in the main Bar component +4. **Add keybindings**: Use Niri's keybinding system to interact with AGS widgets + +## Dependencies + +All required Astal libraries are automatically provided via the Nix configuration: +- `astal.battery` - Battery information +- `astal.bluetooth` - Bluetooth control +- `astal.network` - Network management +- `astal.wireplumber` - Audio control + +## Notes + +- The configuration uses modern AGS v2 syntax with JSX +- TypeScript errors in the editor are expected (AGS handles compilation) +- Network auto-connection relies on NetworkManager's saved connections +- Bluetooth auto-connection attempts to connect to paired devices diff --git a/home/panotaka/common/optional/desktops/niri/ags/config/Bar.tsx b/home/panotaka/common/optional/desktops/niri/ags/config/Bar.tsx new file mode 100644 index 0000000..57beed1 --- /dev/null +++ b/home/panotaka/common/optional/desktops/niri/ags/config/Bar.tsx @@ -0,0 +1,226 @@ +import { Astal, Gtk, Gdk } from "ags/gtk4" +import { bind, Variable } from "ags" +import Wp from "gi://AstalWp" +import Battery from "gi://AstalBattery" +import Bluetooth from "gi://AstalBluetooth" +import Network from "gi://AstalNetwork" +import App from "ags/gtk4/app" + +type BarProps = { + gdkmonitor: Gdk.Monitor +} + +function Clock() { + const time = Variable("").poll(1000, 'date "+%H:%M %b %e"') + + return ( +