2 Commits

Author SHA1 Message Date
oysteikt af691352d2 WIP: fix hyprland 2026-05-21 14:37:36 +09:00
oysteikt d4050cda3d WIP: treewide: fixes for nixos 26.05 2026-05-21 14:36:13 +09:00
22 changed files with 516 additions and 346 deletions
+3 -2
View File
@@ -73,6 +73,9 @@
"ipu6-camera-bins-unstable"
"ivsc-firmware"
"ivsc-firmware-unstable"
"semshi"
"vim-polyglot"
"vim-trailing-whitespace"
];
android_sdk.accept_license = true;
segger-jlink.acceptLicense = true;
@@ -155,7 +158,6 @@
};
homeModules = {
cargo = ./home/modules/programs/cargo;
colors = ./home/modules/colors.nix;
direnv-auto-prune = ./home/modules/programs/direnv/auto-prune.nix;
downloads-sorter = ./home/modules/services/downloads-sorter.nix;
@@ -166,7 +168,6 @@
prism-launcher = ./home/modules/programs/prism-launcher;
shellAliases = ./home/modules/shellAliases.nix;
systemd-tmpfiles = ./home/modules/systemd-tmpfiles.nix;
uidGid = ./home/modules/uidGid.nix;
};
homeConfigurations = {
+2
View File
@@ -29,5 +29,7 @@
"work"
"ctf"
];
gtk4.theme = config.gtk.theme;
};
}
+3
View File
@@ -13,11 +13,14 @@ in
enable = true;
userDirs = {
enable = true;
setSessionVariables = true;
desktop = lib.mkDefault "${config.home.homeDirectory}/Desktop";
documents = lib.mkDefault "${config.home.homeDirectory}/documents";
download = lib.mkDefault "${config.home.homeDirectory}/downloads";
music = lib.mkDefault "${config.home.homeDirectory}/music";
pictures = lib.mkDefault "${config.home.homeDirectory}/pictures";
projects = lib.mkDefault "${config.home.homeDirectory}/git";
publicShare = lib.mkDefault "${config.home.homeDirectory}/public";
templates = lib.mkDefault "${config.home.homeDirectory}/templates";
videos = lib.mkDefault "${config.home.homeDirectory}/videos";
-40
View File
@@ -1,40 +0,0 @@
{ config, pkgs, lib, ... }:
let
cfg = config.programs.cargo;
format = pkgs.formats.toml { };
cargoHome = config.systemd.user.sessionVariables.CARGO_HOME or "${config.home.homeDirectory}/.cargo";
relativeCargoHome = lib.strings.removePrefix config.home.homeDirectory cargoHome;
in
{
options.programs.cargo = {
enable = lib.mkEnableOption "cargo, the rust package manager and build tool";
package = lib.mkPackageOption pkgs "cargo" { };
addPackageToEnvironment = lib.mkOption {
description = "Whether to add cargo to the user's environment.";
type = lib.types.bool;
default = true;
example = false;
};
settings = lib.mkOption {
description = "cargo settings";
type = lib.types.submodule {
freeformType = format.type;
};
};
};
config = lib.mkIf cfg.enable {
systemd.user.sessionVariables.CARGO_HOME = lib.mkIf config.home.preferXdgDirectories (lib.mkDefault "${config.xdg.dataHome}/cargo");
home = {
packages = lib.mkIf cfg.addPackageToEnvironment [ cfg.package ];
file."${relativeCargoHome}/config.toml" = lib.mkIf (cfg.settings != { }) {
source = format.generate "cargo-config.toml" cfg.settings;
};
};
};
}
-13
View File
@@ -1,13 +0,0 @@
{ lib, ... }:
{
options.home = {
uid = lib.mkOption {
default = 1000;
type = lib.types.ints.between 0 60000;
};
gid = lib.mkOption {
default = 1000;
type = lib.types.ints.between 0 60000;
};
};
}
+5 -5
View File
@@ -80,11 +80,12 @@
zlib
icu
openssl
xorg.xprop
xprop
] ++ (
lib.optionals (!machineVars.headless) [
alsa-utils
kdePackages.ark
brightnessctl
calibre
cool-retro-term
darktable
@@ -105,7 +106,6 @@
# kdePackages.ktouch
libnotify
libreoffice
light
mission-center
# mopidy
# mopidy-mpd
@@ -134,9 +134,9 @@
xcalib
xclip
xdotool
xorg.xmodmap
(xfce.thunar.override {
thunarPlugins = with xfce; [
xmodmap
(thunar.override {
thunarPlugins = [
thunar-volman
# thunar-dropbox-plugin
thunar-archive-plugin
+2 -1
View File
@@ -1,6 +1,7 @@
{ lib, pkgs, ... }:
{ config, lib, pkgs, ... }:
{
programs.firefox = {
configPath = "${config.xdg.configHome}/mozilla/firefox";
profiles.h7x4 = {
bookmarks = {
force = true;
+102 -57
View File
@@ -1,88 +1,133 @@
{ lib, ... }:
{
wayland.windowManager.hyprland = {
systemd.enable = false;
systemd.enableXdgAutostart = false;
configType = "lua";
settings = {
exec-once = [
"uwsm finalize"
on._args = [
"hyprland.start"
(lib.generators.mkLuaInline ''
function()
hl.exec_cmd("uwsm finalize")
end
'')
];
monitor = [
# TODO: host specific
"eDP-1, 3840x2400@90.00Hz, 0x0, 2"
{
output = "eDP-1";
mode = "3840x2400@90.00Hz";
position = "0x0";
scale = "2";
}
# PVV Demiurgen
"desc:Hewlett Packard HP ZR24w CNT01711G6, 1920x1200, 0x-1200, 1"
"desc:Hewlett Packard HP ZR24w CNT018103H, 1920x1200, 1920x-1200, 1"
{
output = "desc:Hewlett Packard HP ZR24w CNT01711G6";
mode = "1920x1200";
position = "1920x-1200";
scale = "1";
}
{
output = "desc:Hewlett Packard HP ZR24w CNT018103H";
mode = "1920x1200";
position = "0x-1200";
scale = "1";
}
# PVV Eirin
"desc:Hewlett Packard HP ZR24w CNT01710L4, 1920x1200, 0x-1200, 1"
"desc:Hewlett Packard HP ZR24w CNT0181039, 1920x1200, 1920x-1200, 1"
{
output = "desc:Hewlett Packard HP ZR24w CNT01710L4";
mode = "1920x1200";
position = "1920x-1200";
scale = "1";
}
{
output = "desc:Hewlett Packard HP ZR24w CNT0181039";
mode = "1920x1200";
position = "0x-1200";
scale = "1";
}
",preferred,auto,1"
{
output = "";
mode = "preferred";
position = "auto";
scale = "auto";
}
];
general = {
gaps_in = 5;
gaps_out = 15;
config = {
general = {
gaps_in = 5;
gaps_out = 15;
border_size = 2;
border_size = 2;
"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
"col.inactive_border" = "rgba(595959aa)";
"col.active_border" = {
colors = [
"rgba(33ccffee)"
"rgba(00ff99ee)"
];
angle = 45;
};
"col.inactive_border" = "rgba(595959aa)";
resize_on_border = false;
allow_tearing = false;
layout = "master";
};
decoration = {
rounding = 10;
# Change transparency of focused and unfocused windows
active_opacity = 1.0;
inactive_opacity = 1.0;
# drop_shadow = true;
# shadow_range = 4;
# shadow_render_power = 3;
# "col.shadow" = "rgba(1a1a1aee)";
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur = {
enabled = true;
size = 3;
passes = 1;
vibrancy = 0.1696;
resize_on_border = false;
allow_tearing = false;
layout = "master";
};
};
animations.enabled = false;
decoration = {
rounding = 10;
master = {
new_status = "slave";
};
# Change transparency of focused and unfocused windows
active_opacity = 1.0;
inactive_opacity = 1.0;
misc = {
force_default_wallpaper = 0; # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = false; # If true disables the random hyprland logo / anime girl background. :(
};
# drop_shadow = true;
# shadow_range = 4;
# shadow_render_power = 3;
# "col.shadow" = "rgba(1a1a1aee)";
input ={
kb_layout = "us";
kb_variant = "";
kb_model = "";
kb_options = "caps:escape";
kb_rules = "";
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur = {
enabled = true;
size = 3;
passes = 1;
follow_mouse = 1;
vibrancy = 0.1696;
};
};
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
animations.enabled = false;
touchpad = {
natural_scroll = false;
master = {
new_status = "slave";
};
misc = {
force_default_wallpaper = 0; # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = false; # If true disables the random hyprland logo / anime girl background. :(
};
input ={
kb_layout = "us";
kb_variant = "";
kb_model = "";
kb_options = "caps:escape";
kb_rules = "";
follow_mouse = 1;
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
touchpad = {
natural_scroll = false;
};
};
};
};
+163 -61
View File
@@ -7,87 +7,189 @@ in
wayland.windowManager.hyprland.settings = let
exe = lib.getExe;
in {
"$mod" = "SUPER";
mod._var = "SUPER";
# https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h
bind = [
"$mod SHIFT, Q, exec, uwsm stop"
"$mod ALT SHIFT, Q, exec, ${pkgs.systemd}/bin/loginctl terminate-user \"${config.home.username}\""
"$mod, R, exec, uwsm app -- ${exe config.programs.anyrun.package}"
"$mod, T, togglefloating"
bind = let
lua = lib.generators.mkLuaInline;
mod = key: args: {
_args = [
(lua "mod .. \" + ${key}\"")
] ++ args;
};
in [
(mod "SHIFT + Q" [
(lua "hl.dsp.exec_cmd(\"uwsm stop\")")
])
(mod "ALT + SHIFT + Q" [
(lua "hl.dsp.exec_cmd(\"${pkgs.systemd}/bin/loginctl terminate-user '${config.home.username}'\")")
])
(mod "R" [
(lua "hl.dsp.exec_cmd(\"uwsm app -- ${exe config.programs.anyrun.package}\")")
])
(mod "T" [
(lua "hl.dsp.window.float({ action = \"toggle\" })")
])
"$mod, F, fullscreenstate, 1"
"$mod SHIFT, F, fullscreenstate, 3"
"$mod, C, exec, ${cfg.finalPackage}/bin/hyprctl reload"
(mod "F" [
(lua "hl.dsp.window.fullscreen({ action = \"toggle\", mode = \"maximized\" })")
])
(mod "SHIFT + F" [
(lua "hl.dsp.window.fullscreen({ action = \"toggle\", mode = \"fullscreen\" })")
])
"$mod, BACKSPACE, killactive"
(mod "C" [
(lua "hl.dsp.exec_cmd(\"${cfg.finalPackage}/bin/hyprctl reload\")")
])
"$mod SHIFT, RETURN, exec, ${exe pkgs.app2unit} -t service -C -s app-graphical.slice -- ${exe pkgs.alacritty} --class termTerminal -e ${exe pkgs.tmux} new-session -A -s term"
"$mod SHIFT, SPACE, exec, ${exe pkgs.app2unit} -t service -C -s app-graphical.slice -- ${exe pkgs.alacritty} --class termTerminal -e ${exe pkgs.tmux} new-session -A -s term"
(mod "BACKSPACE" [
(lua "hl.dsp.window.close()")
])
"$mod, j, layoutmsg,cyclenext"
"$mod, k, layoutmsg,cycleprev"
"$mod SHIFT, j, layoutmsg, swapnext"
"$mod SHIFT, k, layoutmsg, swapprev"
(mod "SHIFT + BACKSPACE" [
(lua "hl.dsp.window.kill()")
])
"$mod, 1, focusworkspaceoncurrentmonitor, 1"
"$mod, 2, focusworkspaceoncurrentmonitor, 2"
"$mod, 3, focusworkspaceoncurrentmonitor, 3"
"$mod, 4, focusworkspaceoncurrentmonitor, 4"
"$mod, 5, focusworkspaceoncurrentmonitor, 5"
"$mod, 6, focusworkspaceoncurrentmonitor, 6"
"$mod, 7, focusworkspaceoncurrentmonitor, 7"
"$mod, 8, focusworkspaceoncurrentmonitor, 8"
"$mod, 9, focusworkspaceoncurrentmonitor, 9"
(mod "SHIFT + RETURN" [
(lua "hl.dsp.exec_cmd(\"${exe pkgs.app2unit} -t service -C -s app-graphical.slice -- ${exe pkgs.alacritty} --class termTerminal -e ${exe pkgs.tmux} new-session -A -s term\")")
])
(mod "SHIFT + SPACE" [
(lua "hl.dsp.exec_cmd(\"${exe pkgs.app2unit} -t service -C -s app-graphical.slice -- ${exe pkgs.alacritty} --class termTerminal -e ${exe pkgs.tmux} new-session -A -s term\")")
])
"$mod SHIFT, 1, movetoworkspacesilent, 1"
"$mod SHIFT, 2, movetoworkspacesilent, 2"
"$mod SHIFT, 3, movetoworkspacesilent, 3"
"$mod SHIFT, 4, movetoworkspacesilent, 4"
"$mod SHIFT, 5, movetoworkspacesilent, 5"
"$mod SHIFT, 6, movetoworkspacesilent, 6"
"$mod SHIFT, 7, movetoworkspacesilent, 7"
"$mod SHIFT, 8, movetoworkspacesilent, 8"
"$mod SHIFT, 9, movetoworkspacesilent, 9"
(mod "j" [(lua "hl.dsp.layout(\"cyclenext\")")])
(mod "k" [(lua "hl.dsp.layout(\"cycleprev\")")])
(mod "SHIFT + j" [(lua "hl.dsp.layout(\"swapnext\")")])
(mod "SHIFT + k" [(lua "hl.dsp.layout(\"swapprev\")")])
"$mod, b, exec, ${pkgs.fcitx5}/bin/fcitx5-remote -s mozc"
"$mod, n, exec, ${pkgs.fcitx5}/bin/fcitx5-remote -s keyboard-no"
"$mod, m, exec, ${pkgs.fcitx5}/bin/fcitx5-remote -s keyboard-us"
(mod "1" [(lua "hl.dsp.focus({ workspace = 1, on_current_monitor = true })")])
(mod "2" [(lua "hl.dsp.focus({ workspace = 2, on_current_monitor = true })")])
(mod "3" [(lua "hl.dsp.focus({ workspace = 3, on_current_monitor = true })")])
(mod "4" [(lua "hl.dsp.focus({ workspace = 4, on_current_monitor = true })")])
(mod "5" [(lua "hl.dsp.focus({ workspace = 5, on_current_monitor = true })")])
(mod "6" [(lua "hl.dsp.focus({ workspace = 6, on_current_monitor = true })")])
(mod "7" [(lua "hl.dsp.focus({ workspace = 7, on_current_monitor = true })")])
(mod "8" [(lua "hl.dsp.focus({ workspace = 8, on_current_monitor = true })")])
(mod "9" [(lua "hl.dsp.focus({ workspace = 9, on_current_monitor = true })")])
"$mod, l, exec, ${pkgs.systemd}/bin/loginctl lock-session"
(mod "SHIFT + 1" [(lua "hl.dsp.window.move({ workspace = 1 })")])
(mod "SHIFT + 2" [(lua "hl.dsp.window.move({ workspace = 2 })")])
(mod "SHIFT + 3" [(lua "hl.dsp.window.move({ workspace = 3 })")])
(mod "SHIFT + 4" [(lua "hl.dsp.window.move({ workspace = 4 })")])
(mod "SHIFT + 5" [(lua "hl.dsp.window.move({ workspace = 5 })")])
(mod "SHIFT + 6" [(lua "hl.dsp.window.move({ workspace = 6 })")])
(mod "SHIFT + 7" [(lua "hl.dsp.window.move({ workspace = 7 })")])
(mod "SHIFT + 8" [(lua "hl.dsp.window.move({ workspace = 8 })")])
(mod "SHIFT + 9" [(lua "hl.dsp.window.move({ workspace = 9 })")])
(mod "b" [(lua "hl.dsp.exec_cmd(\"${pkgs.fcitx5}/bin/fcitx5-remote -s mozc\")")])
(mod "n" [(lua "hl.dsp.exec_cmd(\"${pkgs.fcitx5}/bin/fcitx5-remote -s keyboard-no\")")])
(mod "m" [(lua "hl.dsp.exec_cmd(\"${pkgs.fcitx5}/bin/fcitx5-remote -s keyboard-us\")")])
(mod "l" [(lua "hl.dsp.exec_cmd(\"${pkgs.systemd}/bin/loginctl lock-session\")")])
# TODO: fix
# "super + minus" = "${pkgs.xcalib}/bin/xcalib -invert -alter"
", Print, exec, ${exe pkgs.grimblast} copy area"
{
_args = [
(lua "\"PRINT\"")
(lua "hl.dsp.exec_cmd(\"${exe pkgs.grimblast} copy area\")")
];
}
{
_args = [
(lua "\"SHIFT + PRINT\"")
(lua "hl.dsp.exec_cmd(\"${lib.getExe pkgs.grimblast} save\")")
];
}
"SHIFT, Print, exec, ${lib.getExe pkgs.grimblast} save"
# "SHIFT, Print, exec, ${lib.getExe pkgs.grimblast} save"
# "shift + @Print" = "${pkgs.maim}/bin/maim --hidecursor --nokeyboard $SCREENSHOT_DIR/$(date +%s).png"
"$mod, Print, exec, ${exe pkgs.woomer}"
];
# "$mod, Print, exec, ${exe pkgs.woomer}"
bindm = [
"$mod, mouse:272, movewindow"
"$mod, Control_L, movewindow"
"$mod, mouse:273, resizewindow"
"$mod, ALT_L, resizewindow"
];
(mod "mouse:272" [
(lua "hl.dsp.window.drag()")
(lua "{ mouse = true }")
])
bindl = [
"$mod, p, exec, ${exe pkgs.mpc} toggle"
",XF86AudioPlay, exec, ${exe pkgs.mpc} toggle"
",XF86AudioPrev, exec, ${exe pkgs.mpc} prev"
",XF86AudioNext, exec, ${exe pkgs.mpc} next"
];
(mod "Control_L" [
(lua "hl.dsp.window.drag()")
(lua "{ mouse = true }")
])
bindle = [
",XF86MonBrightnessUp, exec, ${exe pkgs.brightnessctl} s +5%"
",XF86MonBrightnessDown, exec, ${exe pkgs.brightnessctl} s 5%-"
",XF86AudioLowerVolume, exec, ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%-"
",XF86AudioRaiseVolume, exec, ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%+"
"$mod ,F7, exec, ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%-"
"$mod ,F8, exec, ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%+"
(mod "mouse:273" [
(lua "hl.dsp.window.resize()")
(lua "{ mouse = true }")
])
(mod "ALT_L" [
(lua "hl.dsp.window.resize()")
(lua "{ mouse = true }")
])
(mod "p" [
(lua "hl.dsp.exec_cmd(\"${exe pkgs.mpc} toggle\")")
(lua "{ locked = true }")
])
{
_args = [
(lua "\"XF86AudioPlay\"")
(lua "hl.dsp.exec_cmd(\"${exe pkgs.mpc} toggle\")")
(lua "{ locked = true }")
];
}
{
_args = [
(lua "\"XF86AudioPrev\"")
(lua "hl.dsp.exec_cmd(\"${exe pkgs.mpc} prev\")")
(lua "{ locked = true }")
];
}
{
_args = [
(lua "\"XF86AudioNext\"")
(lua "hl.dsp.exec_cmd(\"${exe pkgs.mpc} next\")")
(lua "{ locked = true }")
];
}
{
_args = [
(lua "\"XF86MonBrightnessUp\"")
(lua "hl.dsp.exec_cmd(\"${exe pkgs.brightnessctl} s +5%\")")
(lua "{ locked = true, repeating = true }")
];
}
{
_args = [
(lua "\"XF86MonBrightnessDown\"")
(lua "hl.dsp.exec_cmd(\"${exe pkgs.brightnessctl} s 5%-\")")
(lua "{ locked = true, repeating = true }")
];
}
{
_args = [
(lua "\"XF86AudioLowerVolume\"")
(lua "hl.dsp.exec_cmd(\"${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%-\")")
(lua "{ locked = true, repeating = true }")
];
}
{
_args = [
(lua "\"XF86AudioRaiseVolume\"")
(lua "hl.dsp.exec_cmd(\"${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%+\")")
(lua "{ locked = true, repeating = true }")
];
}
(mod "F7" [
(lua "hl.dsp.exec_cmd(\"${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%-\")")
(lua "{ locked = true, repeating = true }")
])
(mod "F8" [
(lua "hl.dsp.exec_cmd(\"${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%+\")")
(lua "{ locked = true, repeating = true }")
])
];
};
};
+109 -44
View File
@@ -1,5 +1,4 @@
{ config, pkgs, lib, ... }:
let
{ config, pkgs, lib, ... }: let
cfg = config.wayland.windowManager.hyprland;
in
{
@@ -13,62 +12,128 @@ in
command = "uwsm app -- ${exe pkgs.alacritty} --class ${class} -e ${exe pkgs.tmux} new-session -A -s f";
size = { h = 90; w = 95; };
keys = [
"$mod, RETURN"
"$mod, SPACE"
(lib.generators.mkLuaInline "mod .. \" + RETURN\"")
(lib.generators.mkLuaInline "mod .. \" + SPACE\"")
];
})
(rec {
title = "Ncmpcpp";
class = "floatingNcmpcpp";
command = "uwsm app -- ${exe pkgs.alacritty} --class ${class} -e ${exe pkgs.ncmpcpp}";
size = { h = 95; w = 95; };
keys = [ "$mod, Q" ];
size = { h = 90; w = 95; };
keys = [
(lib.generators.mkLuaInline "mod .. \" + Q\"")
];
})
# "$mod, W, emacs"
# "$mod, E, filebrowser"
# "$mod, X, taskwarriortui"
];
in {
bind = lib.pipe scratchpads [
(map ({ keys, command, class, ... }:
(map (key: let
# TODO: rewrite this to take arguments instead of creating n copies
invokeIfNotRunningAndToggleWorkspace = pkgs.writeShellApplication {
name = "hyprland-toggle-scratchpad-${class}";
runtimeInputs = [ cfg.finalPackage pkgs.jq ];
text = ''
SCRATCHPAD_PROGRAM_EXISTS=$(hyprctl clients -j | jq -r '[.[].class]|any(. == "${class}")')
CURRENT_WORKSPACE_ID=$(hyprctl activeworkspace -j | jq -r '.id')
scratchpads._var = scratchpads;
if [ "$SCRATCHPAD_PROGRAM_EXISTS" != "true" ]; then
${command} &
hyprctl dispatch movetoworkspacesilent "''${CURRENT_WORKSPACE_ID},class:${class}"
hyprctl dispatch focuswindow "class:${class}"
else
SCRATCHPAD_PROGRAM_WORKSPACE_ID=$(hyprctl clients -j | jq '.[] | select( .class == "${class}") | .workspace.id')
if [ "$SCRATCHPAD_PROGRAM_WORKSPACE_ID" != "$CURRENT_WORKSPACE_ID" ]; then
hyprctl dispatch movetoworkspacesilent "''${CURRENT_WORKSPACE_ID},class:${class}"
hyprctl dispatch focuswindow "class:${class}"
else
hyprctl dispatch movetoworkspacesilent "special:${class}Ws,class:${class}"
fi
fi
'';
};
in "${key}, exec, ${lib.getExe invokeIfNotRunningAndToggleWorkspace}"
) keys)
))
lib.flatten
];
fixScratchpad._var = lib.generators.mkLuaInline ''
function(scratchpad, window, monitor_)
local monitor = monitor_
if monitor == nil then
monitor = window.monitor
end
windowrulev2 = lib.pipe scratchpads [
(map ({ class, size, ... }: [
"workspace special:${class}Ws, class:^(${class})$"
"float, class:^${class}$"
"size ${toString size.w}% ${toString size.h}%, class:^(${class})$"
"move ${toString ((100 - size.w) / 2)}% ${toString ((100 - size.h) / 2)}%, class:^(${class})$"
]))
lib.flatten
local scaled_w = monitor.width * (1/monitor.scale)
local scaled_h = monitor.height * (1/monitor.scale)
-- I have no idea why these need to be run twice, but despite the values being the same,
-- it somehow always misplaces the window the first time around...
hl.dispatch(hl.dsp.window.move({
x = monitor.x + (scaled_w * (((100 -scratchpad.size.w) / 2) / 100)),
y = monitor.y + (scaled_h * (((100 -scratchpad.size.h) / 2) / 100)),
relative = false
}))
hl.dispatch(hl.dsp.window.resize({
x = scaled_w * scratchpad.size.w / 100,
y = scaled_h * scratchpad.size.h / 100,
relative = false
}))
hl.dispatch(hl.dsp.window.move({
x = monitor.x + (scaled_w * (((100 -scratchpad.size.w) / 2) / 100)),
y = monitor.y + (scaled_h * (((100 -scratchpad.size.h) / 2) / 100)),
relative = false
}))
hl.dispatch(hl.dsp.window.resize({
x = scaled_w * scratchpad.size.w / 100,
y = scaled_h * scratchpad.size.h / 100,
relative = false
}))
end
'';
invokeScratchpad._var = lib.generators.mkLuaInline ''
function(scratchpad)
local scratchpad_window = hl.get_window("class:^(" .. scratchpad.class .. ")$")
local current_workspace = hl.get_active_workspace()
if scratchpad_window == nil then
hl.dispatch(hl.dsp.exec_cmd(scratchpad.command, {
workspace = current_workspace.id
}))
else
hl.dispatch(hl.dsp.focus({ window = scratchpad_window }))
if scratchpad_window.workspace.id ~= current_workspace.id then
hl.dispatch(hl.dsp.window.move({ workspace = current_workspace.id }))
fixScratchpad(scratchpad, scratchpad_window, current_workspace.monitor)
else
hl.dispatch(hl.dsp.window.move({ workspace = "special:" .. scratchpad.class .. "Ws", follow = false }))
end
end
end
'';
bind = lib.concatLists (lib.imap1 (i: { keys, command, class, size, ... }: map (key: {
_args = [
key
(lib.generators.mkLuaInline "function() invokeScratchpad(scratchpads[${toString i}]) end")
];
}) keys) scratchpads);
window_rule = map ({ class, size, ... }: {
name = "scratchpad_${class}";
match.class = "^(${class})$";
float = true;
size = [
"(monitor_w*${toString (size.w / 100.0)})"
"(monitor_h*${toString (size.h / 100.0)})"
];
move = [
"(monitor_w*${toString (((100 - size.w) / 2) / 100.0)})"
"(monitor_h*${toString (((100 - size.h) / 2) / 100.0)})"
];
}) scratchpads;
# TODO: fix me
on._args = [
"workspace.move_to_monitor"
(lib.mkLuaInline ''
function(workspace, monitor)
for _, scratchpad in pairs(scratchpads) do
local scratchpad_window = hl.get_window("class:^(" .. scratchpad.class .. ")$")
if scratchpad_window == nil or scratchpad_window.workspace.id ~= workspace.id then
-- NOTE: crazy that there's no continue in lua...
goto continue
end
-- hl.notification.create({
-- time = 3000,
-- text = "Fixing scratchpad " .. scratchpad.class .. " to monitor " .. monitor.name
-- })
fixScratchpad(scratchpad, scratchpad_window, monitor)
::continue::
end
end
'')
];
};
};
+98 -25
View File
@@ -4,38 +4,111 @@ let
in
{
config = lib.mkIf cfg.enable {
wayland.windowManager.hyprland.settings.windowrulev2 = [
"float, class:^(Rofi)$"
"float, class:^(xdg-desktop-portal-gtk)$"
"float, title:^(.*Bitwarden Password Manager.*)$"
"float, title:^(Picture-in-Picture)$"
"tile, class:^(Nsxiv)$"
wayland.windowManager.hyprland.settings.window_rule = [
{
match.class = "^(Rofi)$";
float = true;
}
{
match.class = "^(xdg-desktop-portal-gtk)$";
float = true;
}
{
match.title = "^(.*Bitwarden Password Manager.*)$";
float = true;
}
{
match.title = "^(Picture-in-Picture)$";
float = true;
}
{
match.class = "^(Nsxiv)$";
tile = true;
}
"float, class: ^(Gimp-2.*)$, title:^(Open Image)$"
"size 70%, class: ^(Gimp-2.*)$, title:^(Open Image)$"
"center, class: ^(Gimp-2.*)$, title:^(Open Image)$"
{
match.class = "^(Gimp-2.*)$";
match.title = "^(Open Image)$";
"dimaround, class:^(xdg-desktop-portal-gtk)$"
float = true;
size = [
"70%"
"70%"
];
center = true;
}
# {
# match.class = "^(xdg-desktop-portal-gtk)$";
# dimaround = true;
# }
"workspace special silent, title:^(Firefox Sharing Indicator)$"
"workspace special silent, title:^(Zen Sharing Indicator)$"
"workspace special silent, title:^(.*is sharing (your screen|a window)\.)$"
{
match.title = "^(Firefox Sharing Indicator)$";
workspace = "special:silent";
}
{
match.title = "^(Zen Sharing Indicator)$";
workspace = "special:silent";
}
{
match.title = "^(.*is sharing (your screen|a window)\\.)$";
workspace = "special:silent";
}
"workspace 2, class:^(firefox)$"
"workspace 2, class:^(chromium)$"
{
}
"workspace 3, class:^(Emacs)$"
"workspace 3, class:^(code)$"
"workspace 3, class:^(code-url-handler)$"
"workspace 3, class:^(dev.zed.Zed)$"
{
match.class = "^(firefox)$";
workspace = 2;
}
{
match.class = "^(chromium)$";
workspace = 2;
}
"workspace 5, class:^(discord)$"
"workspace 5, class:^(Element)$"
{
match.class = "^(Emacs)$";
workspace = 3;
}
{
match.class = "^(code)$";
workspace = 3;
}
{
match.class = "^(code-url-handler)$";
workspace = 3;
}
{
match.class = "^(dev.zed.Zed)$";
workspace = 3;
}
"float, class:^(xdg-desktop-portal-termfilechooser)$"
"float, class:^(anyrun)$"
"size 70% 80%, class:^(xdg-desktop-portal-termfilechooser)$"
"move 15% 10%, class:^(xdg-desktop-portal-termfilechooser)$"
{
match.class = "^(discord)$";
workspace = 5;
}
{
match.class = "^(Element)$";
workspace = 5;
}
{
match.class = "^(anyrun)$";
float = true;
}
{
match.class = "^(xdg-desktop-portal-termfilechooser)$";
float = true;
size = [
"70%"
"80%"
];
move = [
"15%"
"10%"
];
}
];
};
}
+9 -7
View File
@@ -10,6 +10,9 @@ lib.mkIf cfg.enable {
vimAlias = true;
vimdiffAlias = true;
withPython3 = true;
withRuby = false;
plugins = with pkgs.vimPlugins; [
direnv-vim
fzf-vim
@@ -27,6 +30,7 @@ lib.mkIf cfg.enable {
semshi
{
plugin = goyo-vim;
type = "viml";
# TODO: The mapleader definition should be in extraConfig, but setting
# the mapleader before defining keymaps messes things up.
@@ -73,21 +77,19 @@ lib.mkIf cfg.enable {
vim-better-whitespace
{
plugin = nvim-treesitter.withAllGrammars;
type = "lua";
config = ''
packadd! nvim-treesitter
lua << EOF
require'nvim-treesitter.configs'.setup {
require('nvim-treesitter').setup {
highlight = {
enable = true,
},
}
EOF
'';
}
{
plugin = rainbow-delimiters-nvim;
type = "lua";
config = ''
lua << EOF
local rainbow_delimiters = require 'rainbow-delimiters'
vim.g.rainbow_delimiters = {
["highlight"] = {
@@ -99,11 +101,11 @@ lib.mkIf cfg.enable {
'RainbowDelimiterCyan',
},
}
EOF
'';
}
{
plugin = vim-monokai;
type = "viml";
config = ''
colorscheme monokai
@@ -140,7 +142,7 @@ lib.mkIf cfg.enable {
vnoremap <A-k> :m '<-2<CR>gv=gv
'';
extraLuaConfig = ''
initLua = ''
local function paste_buf()
local content = os.getenv("NVIM_CLIPBOARD")
+1
View File
@@ -1,6 +1,7 @@
{ ... }:
{
programs.yazi = {
shellWrapperName = "y";
keymap = {
manager.prepend_keymap = [
{
+1 -1
View File
@@ -5,7 +5,7 @@ let
in
{
options.services.tumblerd.enable = lib.mkEnableOption "tumblerd";
options.services.tumblerd.package = lib.mkPackageOption pkgs [ "xfce" "tumbler" ] { };
options.services.tumblerd.package = lib.mkPackageOption pkgs "tumbler" { };
config = lib.mkIf cfg.enable {
systemd.user.services.tumblerd = {
-3
View File
@@ -55,9 +55,6 @@ in {
htop_ = p "htop";
htop = p "bottom";
dig_ = p "dig";
dig = p "dogdns";
man_ = p "man";
man = "${pkgs.bat-extras.batman}/bin/batman";
+1 -3
View File
@@ -41,7 +41,6 @@ in {
./services/uptimed.nix
./services/userborn.nix
./services/userdbd.nix
./services/wpa_supplicant.nix
./services/xserver.nix
];
@@ -144,7 +143,6 @@ in {
services = {
udev.packages = with pkgs; [
yubikey-personalization
light
];
};
@@ -186,7 +184,7 @@ in {
man.enable = true;
nixos.enable = true;
man.generateCaches = true;
man.cache.enable = true;
};
# security.lockKernelModules = true;
+4 -6
View File
@@ -32,23 +32,21 @@
ghcid
# haskellPackages.Cabal_3_6_3_0
maven
nixfmt-rfc-style
nixfmt
nixpkgs-fmt
# nixpkgs-hammering
nodePackages.node2nix
nodePackages.npm
nodePackages.sass
nodePackages.typescript
nodePackages.yarn
nodejs
plantuml
python3
rustc
rustc
rustup
sass
sqlcheck
sqlint
sqlite
sqlite-web
typescript
yarn
]);
}
-63
View File
@@ -1,63 +0,0 @@
{ config, lib, ... }:
let
cfg = config.networking.wireless;
in
{
systemd.services.wpa_supplicant.serviceConfig = lib.mkIf (cfg.enable || config.networking.hostName == "xps16") {
RuntimeDirectory = [
"wpa_supplicant"
"wpa_supplicant/root-mnt"
];
RootDirectory = "/run/wpa_supplicant/root-mnt";
BindPaths = [
"/etc"
"/run/dbus/system_bus_socket"
"/tmp"
];
BindReadOnlyPaths = [
# "/bin/sh"
builtins.storeDir
];
# wpa_ctrl puts sockets in /tmp
PrivateTmp = false;
# PrivateTmp = lib.mkIf (configIsGenerated && !cfg.allowAuxiliaryImperativeNetworks) "disconnected";
CapabilityBoundingSet = [
"CAP_NET_ADMIN"
"CAP_BLOCK_SUSPEND"
"CAP_NET_RAW"
"CAP_CHOWN"
];
RestrictNamespaces = true;
SystemCallFilter = [
"@system-service"
"~@resources"
"@chown"
];
ProtectProc = "invisible";
SystemCallArchitectures = "native";
DeviceAllow = "/dev/rfkill";
DevicePolicy = "closed";
NoNewPrivileges = true;
ProtectKernelLogs = true;
ProtectControlGroups = true;
ProtectKernelModules = true;
ProtectSystem = true;
ProtectHome = true;
MemoryDenyWriteExecute = true;
ProtectHostname = true;
LockPersonality = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
"AF_NETLINK"
"AF_PACKET"
# "AF_ALG" # Used for 'linux' TLS backend
] ++ lib.optionals cfg.dbusControlled [
"AF_UNIX"
];
};
}
+1 -3
View File
@@ -86,9 +86,7 @@
docker.enable = true;
};
services.resolved.extraConfig = ''
MulticastDNS=no
'';
services.resolved.settings.Resolve.MulticastDNS = false;
services.zfs.trim.enable = true;
services.zfs.autoScrub.enable = true;
+1 -1
View File
@@ -7,7 +7,7 @@
defaults = {
email = "h7x4@nani.wtf";
dnsProvider = "cloudflare";
credentialsFile = config.sops.secrets."cloudflare/api-key".path;
credentialFiles.CLOUDFLARE_DNS_API_TOKEN_FILE = config.sops.secrets."cloudflare/api-key".path;
dnsPropagationCheck = true;
};
certs."nani.wtf" = {
+9 -9
View File
@@ -6,18 +6,18 @@
wayland.windowManager.hyprland.settings = {
monitor = [
"eDP-1, 3840x2400@90.00Hz, 0x0, 2"
# "eDP-1, 3840x2400@90.00Hz, 0x0, 2"
# Office, childhood home
"desc:Dell Inc. DELL U2713H C6F0K52E19AL, 2560x1440, 1920x0, 1"
"desc:Dell Inc. DELL U2713H C6F0K3CH0MUL, 2560x1440, ${toString (1920 + 2560)}x0, 1"
# # Office, childhood home
# "desc:Dell Inc. DELL U2713H C6F0K52E19AL, 2560x1440, 1920x0, 1"
# "desc:Dell Inc. DELL U2713H C6F0K3CH0MUL, 2560x1440, ${toString (1920 + 2560)}x0, 1"
# PVV
"desc:ASUSTek COMPUTER INC MG248 K2LMQS048969, 1920x1080@60.00Hz, -1920x0, 1"
"desc:Ancor Communications Inc MG248 G7LMQS010063, 1920x1080@60.00Hz, -${toString (1920 * 2)}x0, 1"
# # PVV
# "desc:ASUSTek COMPUTER INC MG248 K2LMQS048969, 1920x1080@60.00Hz, -1920x0, 1"
# "desc:Ancor Communications Inc MG248 G7LMQS010063, 1920x1080@60.00Hz, -${toString (1920 * 2)}x0, 1"
# Home office
"desc:LG Electronics LG SMART UHD 0x000BC43F, 3840x2160@60.00Hz, 1920x0, 1.5"
# # Home office
# "desc:LG Electronics LG SMART UHD 0x000BC43F, 3840x2160@60.00Hz, 1920x0, 1.5"
];
};
}
+2 -2
View File
@@ -5,8 +5,8 @@
libappindicator
libindicator
libnotify
xorg.libXScrnSaver
xorg.libXtst
libXScrnSaver
libXtst
]);
preFixup = ''