1
0
Fork 0
forked from emily/nixfiles
nixfiles-emily/config/profiles/graphical/default.nix

703 lines
22 KiB
Nix

{ config, pkgs, lib, inputs, ... }: {
imports = [
inputs.home-manager.nixosModules.home-manager
inputs.stylix.nixosModules.stylix
./nixvim.nix
./scripts.nix
];
kyouma.machine-type.graphical = true;
hardware.opengl.enable = true;
boot.plymouth.enable = true;
security.pam.services.swaylock = {};
services.dbus.packages = [ pkgs.gcr ];
services.geoclue2.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
};
services.udisks2.enable = true;
environment.variables = {
SDL_VIDEODRIVER = "wayland";
QT_QPA_PLATFORM = "wayland";
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
GDK_BACKEND = "wayland,x11";
MOZ_ENABLE_WAYLAND = "1";
CLUTTER_BACKEND = "wayland";
};
xdg.icons.enable = true;
xdg.portal = {
enable = true;
wlr.enable = true;
configPackages = [ pkgs.xdg-desktop-portal-hyprland ];
};
stylix= {
image = pkgs.fetchurl {
url = "https://kyouma.net/wallpaper.png";
sha256 = "1f46b439a864cd28b8ea93563b4762f1efb2648bae0148fd6b45f3033b10b0e8";
};
polarity = "dark";
#base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-macchiato.yaml";
fonts = {
sansSerif = {
package = pkgs.noto-fonts;
name = "Noto Sans";
};
serif = config.stylix.fonts.sansSerif;
monospace = {
package = pkgs.jetbrains-mono;
name = "JetBrains Mono Regular";
};
sizes.terminal = 11;
};
cursor = {
package = pkgs.capitaine-cursors;
name = "capitaine";
size = 24;
};
targets = {
console.enable = false;
gnome.enable = true;
fish.enable = false;
};
};
home-manager.users.emily = {
stylix.targets = {
hyprland.enable = false;
kitty.enable = false;
mako.enable = false;
rofi.enable = false;
swaylock.enable = false;
waybar.enable = false;
nixvim.enable = false;
fish.enable = false;
};
home.keyboard = {
layout = "de";
variant = "neo_qwerty";
};
home.file.".local/bin/hypr/playerctl.sh" = let
playerctl = "${pkgs.playerctl}/bin/playerctl";
title = "$(${playerctl} metadata --format '{{markup_escape(title)}}')";
artist = "$(${playerctl} metadata --format '{{markup_escape(artist)}}')";
status = "$(${playerctl} status 2> /dev/null)";
in {
enable = true;
executable = true;
text = ''
#!${pkgs.bash}/bin/bash
if [ "${status}" = "Playing" ]; then
echo -e " ${title}\nPlaying: ${artist} - ${title}\nplaying"
elif [ "${status}" = "Paused" ]; then
echo -e " ${title}\nPaused: ${artist} - ${title}\npaused"
else
echo -e ""
fi
'';
};
home.file."Pictures/wallpapers/sylviaritter/wallpaper.png" = {
enable = true;
source = config.stylix.image;
};
home.file."Pictures/wallpapers/lockscreen.png" = {
enable = true;
source = config.stylix.image;
};
home.file.".local/bin/hypr" = {
enable = true;
executable = true;
recursive = true;
source = ./files/scripts;
};
wayland.windowManager.hyprland = {
enable = true;
settings = let
kitty = "${pkgs.kitty}/bin/kitty";
pactl = "${pkgs.pulseaudio}/bin/pactl";
playerctl = "${pkgs.playerctl}/bin/playerctl";
notifysend = "${pkgs.libnotify}/bin/notify-send";
swaylock = "${pkgs.swaylock}/bin/swaylock";
dolphin = "${pkgs.libsForQt5.dolphin}/bin/dolphin";
firefox = "${pkgs.firefox}/bin/firefox";
brightnessctl = "${pkgs.brightnessctl}/bin/brightnessctl";
screenshot = "~/.local/bin/hypr/screenshot.sh";
rofi = "${pkgs.rofi-wayland}/bin/rofi";
in {
general = {
border_size = 1;
gaps_in = 4;
gaps_out = 8;
"col.active_border" = "0xFFB4A1DB 0xFFD04E9D 45deg";
"col.inactive_border" = "1e2030 1e2030 45deg";
cursor_inactive_timeout = 30;
layout = "dwindle";
};
decoration = {
rounding = 8;
shadow_range = 10;
"col.shadow" = "0x66000000";
"col.shadow_inactive" = "0x66000000";
blur = {
enabled = true;
passes = 2;
};
};
dwindle.no_gaps_when_only = 1;
animations = {
bezier = [
"wind, 0.2, 0.9, 0.2, 1.05"
"winMov, 0.2, 0.9, 0.2, 1.08"
"winIn, 0.2, 0.9, 0.2, 1.08"
"winOut, 0.2, 0, 0.9, 0.2"
"liner, 1, 1, 1, 1"
];
animation = [
"windows, 1, 6, wind, slide"
"windowsIn, 1, 6, winIn, slide"
"windowsOut, 1, 6, winOut, slide"
"windowsMove, 1, 6, winMov, slide"
"border, 1, 1, liner"
"borderangle, 1, 30, liner, loop"
"fade, 1, 10, default"
"fadeOut, 1, 12, default"
"workspaces, 1, 8, wind"
];
};
input = {
kb_layout = "de";
kb_variant = "neo_qwerty";
kb_options = "grp:alt_shift_toggle";
accel_profile = "adaptive";
scroll_method = "2fg";
float_switch_override_focus = 2;
touchpad = {
natural_scroll = true;
tap-to-click = false;
drag_lock = true;
};
};
gestures = {
workspace_swipe = true;
workspace_swipe_distance = 3200;
workspace_swipe_min_speed_to_force = 40;
workspace_swipe_cancel_ratio = 0.15;
workspace_swipe_forever = true;
};
group = {
"col.border_inactive" = "0xFFDB695B";
"col.border_active" = "0xFF4BC66D";
groupbar = {
render_titles = false;
};
};
xwayland = {
force_zero_scaling = true;
use_nearest_neighbor = false;
};
misc = {
disable_hyprland_logo = true;
disable_splash_rendering = true;
vrr = 1;
};
device = [
{
name = "syna8013:00-06cb:ce69-touchpad";
sensitivity = 0.3;
}
{
name = "logitech-m705";
sensitivity = 0.1;
accel_profile = "flat";
}
{
name = "tpps/2-ibm-trackpoint";
sensitivity = 0.2;
scroll_method = "on_button_down";
accel_profile = "flat";
}
{
name = "tpps/2-elan-trackpoint";
sensitivity = 0;
scroll_method = "on_button_down";
accel_profile = "flat";
}
];
layerrule = [ "blur, waybar" ];
monitor = [
"eDP-1, 3840x2400@60, 0x0, 1, bitdepth, 10"
#"eDP-1, 2560x1600@60, 0x0, 1, bitdepth, 10"
#"eDP-1, 1920x1200@60, 0x0, 1, bitdepth, 10"
"desc:ASUSTek COMPUTER INC ASUS VA24E M7LMTF021529, 1920x1080@60, -320x-1080, 1"
"desc:ASUSTek COMPUTER INC ASUS VA24E M7LMTF021525, 1920x1080@60, 1600x-1080, 1"
",preferred,auto,1"
];
workspace = [
"1, monitor:eDP-1, default:true"
"2, monitor:eDP-1"
"3, monitor:eDP-1"
"8, monitor:DP-2"
"9, monitor:DP-3"
"10, monitor:eDP-1"
];
windowrule = [
"float, foot-float"
"float, yad|nm-connection-editor|pavucontrol"
"float, xfce-polkit|kvantummanager|qt5ct|zenity|waypaper"
"float, feh|com.github.weclaw1.ImageRoll|Gpicview|Gimp|MPlayer"
"float, VirtualBox Manager|qemu|Qemu-system-x86_64|PacketTracer"
"float, title:File Operation Progress|Open Files|Media viewer"
"float, title:Confirm to replace files"
"size 60% 64%, com.github.weclaw1.ImageRoll "
"center, com.github.weclaw1.ImageRoll"
"animation slide down,foot-full"
"animation slide up,Rofi"
];
"$mod" = "SUPER";
"$notifycmd" = "${notifysend} -h string:x-canonical-private-synchronous:hypr-cfg -u low";
bind = [
"$mod, Return, exec, ${kitty}"
"$mod, F1, exec, ${dolphin}"
"$mod, F2, exec, ${firefox}"
# Rofi
"$mod, D, exec, ${rofi} -show drun -theme ~/.config/rofi/launcher.rasi"
"$mod, R, exec, ${rofi} -show run -theme ~/.config/rofi/runner.rasi"
"$mod, A, exec, ~/.local/bin/hypr/rofi_screenshot.sh"
# Misc
"$mod, C, exec, ~/.local/bin/hypr/colorpicker.sh"
"CTRL_ALT, L, exec, ${swaylock} -f -i $XDG_PICTURES_DIR/wallpapers/lockscreen.png"
# Function keys
", XF86AudioMute, exec, ${pactl} set-sink-mute @DEFAULT_SINK@ toggle"
", XF86AudioMicMute, exec, ${pactl} set-source-mute @DEFAULT_SOURCE@ toggle"
", XF86AudioNext, exec, ${playerctl} next"
", XF86AudioPrev, exec, ${playerctl} previous"
", XF86AudioPlay, exec, ${playerctl} play"
", XF86AudioStop, exec, ${playerctl} pause"
# Scratchpad
"$mod SHIFT, MINUS, movetoworkspace,special"
"$mod, MINUS, togglespecialworkspace,"
# Screenshots
", Print, exec, ${screenshot} --now"
"ALT, Print, exec, ${screenshot} --in5"
"SHIFT, Print, exec, ${screenshot} --in10"
"$mod, Print, exec, ${screenshot} --area"
# Hyprland
"$mod SHIFT, Q, killactive,"
"CTRL_ALT, Delete, exit,"
"$mod, F, fullscreen, 0"
"$mod, F, exec, $notifycmd 'Fullscreen Mode'"
"$mod, S, pseudo,"
"$mod, S, exec, $notifycmd 'Pseudo Mode'"
"$mod SHIFT, Space, togglefloating,"
"$mod SHIFT, Space, centerwindow,"
# windowgroup
"$mod, G, togglegroup"
"$mod, G, exec, $notifycmd 'Toggled Group Mode'"
"$mod, H, changegroupactive, b"
"$mod, L, changegroupactive, f"
# Change Focusconfig
"$mod, left, movefocus, l"
"$mod, H, movefocus, l"
"$mod, right, movefocus, r"
"$mod, L, movefocus, r"
"$mod, up, movefocus, u"
"$mod, K, movefocus, u"
"$mod, down, movefocus, d"
"$mod, J, movefocus, d"
# Move Active
"$mod SHIFT, left, movewindow, l"
"$mod SHIFT, H, movewindow, l"
"$mod SHIFT, right, movewindow, r"
"$mod SHIFT, L, movewindow, r"
"$mod SHIFT, up, movewindow, u"
"$mod SHIFT, K, movewindow, u"
"$mod SHIFT, down, movewindow, d"
"$mod SHIFT, J, movewindow, d"
# Switch between windows
"$mod,Tab,cyclenext,"
"$mod,Tab,bringactivetotop,"
# Workspaces
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
"$mod, 6, workspace, 6"
"$mod, 7, workspace, 7"
"$mod, 8, workspace, 8"
"$mod, 9, workspace, 9"
"$mod, 0, workspace, 10"
# Send to Workspaces
"$mod SHIFT, 1, movetoworkspace, 1"
"$mod SHIFT, 2, movetoworkspace, 2"
"$mod SHIFT, 3, movetoworkspace, 3"
"$mod SHIFT, 4, movetoworkspace, 4"
"$mod SHIFT, 5, movetoworkspace, 5"
"$mod SHIFT, 6, movetoworkspace, 6"
"$mod SHIFT, 7, movetoworkspace, 7"
"$mod SHIFT, 8, movetoworkspace, 8"
"$mod SHIFT, 9, movetoworkspace, 9"
"$mod SHIFT, 0, movetoworkspace, 10"
# Change Workspace Mode
"$mod CTRL, F, workspaceopt, allfloat"
"$mod CTRL, F, exec, $notifycmd 'Toggled All Float Mode'"
"$mod CTRL, S, workspaceopt, allpseudo"
"$mod CTRL, S, exec, $notifycmd 'Toggled All Pseudo Mode'"
# Misc
"$mod SHIFT, P, pin,"
"$mod SHIFT, P, exec, $notifycmd 'Toggled Pin'"
"$mod SHIFT, S, swapnext"
"$mod SHIFT, O, toggleopaque"
];
binde = [
# Function keys repeat
", XF86MonBrightnessUp, exec, ${brightnessctl} s +10%"
", XF86MonBrightnessDown, exec, ${brightnessctl} s 10%-"
", XF86AudioRaiseVolume, exec, ${pactl} set-sink-volume @DEFAULT_SINK@ +5%"
", XF86AudioLowerVolume, exec, ${pactl} set-sink-volume @DEFAULT_SINK@ -5%"
# Resize Active
"$mod CTRL, left, resizeactive, -20 0"
"$mod CTRL, H, resizeactive, -20 0"
"$mod CTRL, right, resizeactive, 20 0"
"$mod CTRL, L, resizeactive, 20 0"
"$mod CTRL, up, resizeactive, 0 -20"
"$mod CTRL, K, resizeactive, 0 -20"
"$mod CTRL, down, resizeactive, 0 20"
"$mod CTRL, J, resizeactive, 0 20"
# Move Active (Floating Only)
"$mod ALT, left, moveactive, -80 0"
"$mod ALT, H, moveactive, -80 0"
"$mod ALT, right, moveactive, 80 0"
"$mod ALT, L, moveactive, 80 0"
"$mod ALT, up, moveactive, 0 -80"
"$mod ALT, K, moveactive, 0 -80"
"$mod ALT, down, moveactive, 0 80"
"$mod ALT, J, moveactive, 0 80"
];
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
exec-once = [
"${pkgs.wpaperd}/bin/wpaperd"
];
};
};
programs.imv.enable = true;
programs.swaylock.enable = true;
programs.wpaperd = {
enable = true;
settings.default = {
path = "/home/emily/Pictures/wallpapers/sylviaritter/";
duration = "60m";
sorting = "random";
};
};
programs.waybar = {
enable = true;
style = ./files/waybar-style.css;
systemd = {
enable = true;
target = "hyprland-session.target";
};
settings = {
hyprbar = {
layer = "top";
position = "top";
#output = "eDP-1";
margin = "0 0 0 0";
modules-left = [ "hyprland/workspaces" "custom/playerctl" "tray" ];
modules-center = [ "clock" ];
modules-right = [ "backlight" "pulseaudio" "temperature" "cpu" "memory" "battery" "network" ];
"hyprland/workspaces" = {
format = "{icon}";
sort-by-number = true;
active-only = false;
on-click = "activate";
format-icons = {
"1" = "1";
"2" = "2";
"3" = "3";
"4" = "4";
"5" = "5";
"6" = "6";
"7" = "7";
"8" = "8";
"9" = "9";
"10" = "0";
urgent = "";
focused = "";
default = "";
};
};
idle_inhibitor = {
format = "{icon}";
format-icons = {
activated = "";
deactivated = "";
};
};
tray = {
icon-size = 18;
spacing = 8;
};
clock = {
#tooltip-format = "{:%A %d %B | %H:%M}";
format = " {:%Y-%m-%d %H:%M:%OS}";
format-alt = " {:%Y %b %d %a %H:%M:%OS}";
interval = 1;
};
cpu = {
format = " {usage:02}";
interval = 2;
on-click = "${pkgs.kitty}/bin/kitty -e ${pkgs.htop}/bin/htop";
};
memory = {
format = " {used:0.2f}";
on-click = "${pkgs.kitty}/bin/kitty -e ${pkgs.htop}/bin/htop";
};
temperature = {
hwmon-path = "/sys/class/hwmon/hwmon1/temp1_input";
critical-threshold = 80;
format = " {temperatureC}°C";
};
backlight = {
format = "{icon} {percent: >3}%";
format-icons = ["" ""];
on-scroll-down = "${pkgs.brightnessctl}/bin/brightnessctl -c backlight set 1%-";
on-scroll-up = "${pkgs.brightnessctl}/bin/brightnessctl -c backlight set +1%";
};
battery = {
states = {
good = 90;
warning = 30;
critical = 15;
};
format = "";
format-discharging = "{icon} {capacity: >3}% {power:0.1f}W";
format-charging = " {capacity: >3}% {power:0.1f}W";
interval = 3;
format-icons = ["" "" "" "" ""];
};
network = {
format = " Disabled";
format-wifi = " {essid}";
format-ethernet = " Wired";
format-disconnected = " Disconnected";
on-click = "${pkgs.networkmanagerapplet}/bin/nm-connection-editor";
};
pulseaudio = {
scroll-step = 5;
format = "{icon} {volume: >3}%";
format-bluetooth = "{icon} {volume: >3}%";
format-muted = " muted";
format-icons = {
headphones = "";
handsfree = "";
headset = "";
phone = "";
portable = "";
car = "";
default = ["" ""];
};
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
};
"custom/playerctl" = {
interval = 1;
exec = "~/.local/bin/hypr/playerctl.sh";
on-click-middle = "${pkgs.playerctl}/bin/playerctl play-pause";
on-click-right = "${pkgs.playerctl}/bin/playerctl next";
on-click = "${pkgs.playerctl}/bin/playerctl previous";
escape = true;
};
};
};
};
programs.kitty = {
enable = true;
font.size = 13;
font.name = "JetBrains Mono";
settings = {
enable_audio_bell = false;
scrollback_lines = 65536;
remember_window_size = false;
initial_window_width = 1200;
initial_window_height = 800;
bold_font = "auto";
italic_font = "auto";
bold_italic_font = "auto";
background = "#090312";
background_opacity = "0.7";
};
keybindings = {
"shift+right" = "next_tab";
"ctrl+l" = "next_tab";
"shift+left" = "previous_tab";
"ctrl+h" = "previous_tab";
};
};
programs.rofi = {
enable = true;
package = pkgs.rofi-wayland;
};
programs.zoxide = {
enable = true;
options = [ "--cmd cd" ];
};
programs.fzf.enable = true;
qt = {
enable = true;
platformTheme.name = "qtct";
style.name = "kvantum-dark";
style.package = with pkgs; [
libsForQt5.qtstyleplugin-kvantum
qt6Packages.qtstyleplugin-kvantum
(catppuccin-kvantum.override { accent = "Mauve"; variant = "Macchiato"; })
];
};
gtk.iconTheme.name = "Adwaita";
gtk.iconTheme.package = pkgs.gnome.adwaita-icon-theme;
services.gammastep = {
enable = true;
provider = "geoclue2";
temperature.day = 6500;
temperature.night = 3700;
settings.general.adjustment-method = "wayland";
};
services.mako = {
enable = true;
anchor = "top-right";
backgroundColor = "#24273a";
borderColor = "#c6a0f6";
borderRadius = 15;
borderSize = 2;
defaultTimeout = 5000;
layer = "overlay";
maxIconSize = 48;
padding = "15";
progressColor = "over #B4A1DB";
sort = "-time";
textColor = "#cad3f5";
extraConfig = ''
max-history=100
on-button-left=dismiss
on-button-right=dismiss-all
on-notify=exec ${pkgs.mpv}/bin/mpv /usr/share/sounds/freedesktop/stereo/message.oga
[urgency=low]
border-color=#B4A1DB
default-timeout=2000
[urgency=normal]
border-color=#B4A1DB
default-timeout=5000
[urgency=high]
border-color=#D04E9D
text-color=#D04E9D
default-timeout=0
[category=mpd]
border-color=#E49186
default-timeout=2000
group-by=category
'';
};
services.gpg-agent = {
enable = true;
enableSshSupport = true;
pinentryPackage = pkgs.pinentry-gnome3;
};
services.swayidle =
let
swaylock = "${pkgs.swaylock}/bin/swaylock";
in {
enable = true;
systemdTarget = "hyprland-session.target";
events = [
{ event = "before-sleep"; command = "${swaylock} -f -i $XDG_PICTURES_DIR/wallpapers/lockscreen.png"; }
{ event = "lock"; command = "${swaylock} -f -i $XDG_PICTURES_DIR/wallpapers/lockscreen.png"; }
];
};
services.syncthing = {
enable = true;
tray.enable = true;
tray.command = "syncthingtray --replace";
};
services.udiskie = {
enable = true;
automount = false;
};
systemd.user.services.syncthingtray.Service = {
ExecStartPre = "${pkgs.coreutils-full}/bin/sleep 2";
Restart = "on-failure";
RestartSec = "1s";
};
systemd.user.targets.tray.Unit = {
BindsTo = "waybar.service";
After = "waybar.service";
};
xdg.configFile."mako-icons" = {
enable = true;
recursive = true;
source = ./files/icons;
};
xdg.configFile."rofi" = {
enable = true;
recursive = true;
source = ./files/rofi;
};
xdg.userDirs =
let
home = config.home-manager.users.emily.home.homeDirectory;
in {
enable = true;
desktop = null;
documents = "${home}/docs";
download = "${home}/Downloads";
music = "${home}/music";
pictures = "${home}/Pictures";
publicShare = null;
templates = null;
videos = "${home}/videos";
};
};
}