Files
dotfiles/homes/julian/features/hyprland/default.nix
T

157 lines
4.0 KiB
Nix

{
pkgs,
inputs,
config,
lib,
...
}: {
imports = [
# inputs.hyprland.homeManagerModules.default
# ./waybar
# ./wofi
# ./mako
# ./hyprlock
./wlogout
# ../gammastep
# ./swayidle.nix
./swaylock.nix
./waypipe.nix
# ./hyprbars.nix
# inputs.noctalia.homeModules.default # Use for latest version from inputs
];
xdg.portal = {
extraPortals = [pkgs.xdg-desktop-portal-wlr];
config.hyprland = {
default = [
"wlr"
"gtk"
];
};
};
home.pointerCursor = {
hyprcursor.enable = true;
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic";
size = 24;
};
# noctalia-shell ipc call state all | jq .settings | xclip
xdg.configFile."noctalia/settings.json".source = ./noctalia.json;
# programs.noctalia = {
# enable = true;
# # noctalia config export full > noctalia.toml
# settings = ./noctalia.toml;
# };
home.packages = with pkgs; [
unstable.noctalia-shell # Use for stable version instead of latest from the input
hyprpicker
hyprcursor
brightnessctl
playerctl
frajul.hyprshot-gui
frajul.wl-ocr
wf-recorder
wl-clipboard
(pkgs.writeShellScriptBin "toggle-screen-mirroring"
(
builtins.replaceStrings
["@INTERNAL_MONITOR@" "@EXTERNAL_MONITOR@"]
[(builtins.elemAt config.monitors 0).name (builtins.elemAt config.monitors 1).name]
(builtins.readFile ./toggle-screen-mirroring.sh)
))
(pkgs.writeShellScriptBin "correct-workspace-locations" (
lib.concatStringsSep "\n" (
builtins.concatLists (
map (
monitor:
map (ws: "hyprctl dispatch 'hl.dsp.workspace.move({workspace=\"${ws}\", monitor=\"${monitor.name}\"})'") monitor.workspaces
)
config.monitors
)
)
))
];
services.cliphist = {
enable = true;
};
home.sessionVariables = {
MOZ_ENABLE_WAYLAND = 1;
QT_QPA_PLATFORM = "wayland";
LIBSEAT_BACKEND = "logind";
};
services.network-manager-applet.enable = true;
wayland.windowManager.hyprland = {
enable = true;
configType = "lua";
extraConfig =
# Variables controllable by nix
''
-- Nix controlled variables
local terminal = "${config.terminal}"
local fileManager = "pcmanfm"
-- local menu = "wofi --show drun,run"
-- local menu = "noctalia msg panel-toggle launcher"
local menu = "noctalia-shell ipc call launcher toggle"
local calculator = "qalculate-gtk"
local browser = "firefox"
local editor = "emacs"
''
+ "-- Main config from `hyprland.lua`\n"
+ builtins.readFile ./hyprland.lua
+ "-- Monitor config\n"
+ lib.concatStringsSep "\n" (
map (
monitor: "hl.monitor({ output = \"${monitor.name}\", mode = \"${toString monitor.width}x${toString monitor.height}@${toString monitor.refreshRate}\", position = \"${monitor.position}\", scale = \"auto\", mirror = \"\"})"
)
config.monitors
)
+ "\n-- For plugging in random monitors\n"
+ "hl.monitor({ output = \"\", mode = \"preferred\", position = \"auto\", scale = \"auto\", mirror = \"\"})\n"
+ "-- Assign workspaces to monitors\n"
+ lib.concatStringsSep "\n" (
builtins.concatLists (
map (
monitor:
map (ws: "hl.workspace_rule({ workspace = \"${ws}\", monitor = \"${monitor.name}\"})") monitor.workspaces
)
config.monitors
)
);
systemd = {
enable = true;
# Same as default, but stop graphical-session too
extraCommands = lib.mkBefore [
"systemctl --user stop graphical-session.target"
"systemctl --user start hyprland-session.target"
];
variables = [
"DISPLAY"
"HYPRLAND_INSTANCE_SIGNATURE"
"WAYLAND_DISPLAY"
"XDG_CURRENT_DESKTOP"
];
};
xwayland.enable = true;
plugins = [
# hyprlandPlugins.hyprbars
];
};
}