Compare commits

...

9 Commits

12 changed files with 131 additions and 86 deletions

View File

@ -19,7 +19,7 @@
profiles = { profiles = {
desktop.enable = true; desktop.enable = true;
personal.enable = true; personal.enable = true;
# webis.enable = true; webis.enable = true;
}; };
}; };

View File

@ -37,6 +37,7 @@
rootFsOptions = { rootFsOptions = {
compression = "zstd"; compression = "zstd";
"com.sun:auto-snapshot" = "false"; "com.sun:auto-snapshot" = "false";
"acltype" = "posixacl"; # NOTE: needed for systemd https://github.com/NixOS/nixpkgs/issues/16954
}; };
mountpoint = null; mountpoint = null;

View File

@ -42,6 +42,7 @@
".local/share/zoxide" ".local/share/zoxide"
".local/state/nvim" ".local/state/nvim"
".config/kdeconnect" ".config/kdeconnect"
".cat_installer" # eduroam
".mozilla" ".mozilla"
"Documents" "Documents"
"Downloads" "Downloads"

View File

@ -100,10 +100,14 @@ in
enable = true; enable = true;
startInBackground = true; startInBackground = true;
}; };
systemd.user.services.nextcloud-client.Service = {
RestartSec = "500ms";
Restart = "on-failure";
};
}; };
services = { services = {
illum.enable = true; illum.enable = true;
resolved.enable = true;
gnome.gnome-keyring.enable = true; gnome.gnome-keyring.enable = true;
pipewire = { pipewire = {
enable = true; enable = true;
@ -111,5 +115,16 @@ in
pulse.enable = true; pulse.enable = true;
}; };
}; };
# faster startup https://majiehong.com/post/2021-07-30_slow_nixos_startup/
networking = {
# no need to wait interfaces to have an IP to continue booting
dhcpcd.wait = "background";
# avoid checking if IP is already taken to boot a few seconds faster
dhcpcd.extraConfig = "noarp";
};
# disable network-online.target
systemd.services.NetworkManager-wait-online.enable = false;
}; };
} }

View File

@ -142,80 +142,81 @@ in
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
# Window binds # Window binds
bind = $mainMod , F , togglefloating , bind = $mainMod , F , togglefloating ,
bind = $mainMod , P , pseudo , bind = $mainMod , P , pseudo ,
bind = $mainMod , Q , killactive , bind = $mainMod , Q , killactive ,
bind = $mainMod , T , togglesplit , bind = $mainMod , T , togglesplit ,
bind = $mainMod SHIFT , F , fullscreen , bind = $mainMod SHIFT , F , fullscreen ,
# Program binds # Program binds
bind = $mainMod , B , exec , rofi-bluetooth bind = $mainMod , B , exec , rofi-bluetooth
bind = $mainMod , C , exec , rofi -show calc -modi calc -no-show-match -no-sort | wl-copy bind = $mainMod , C , exec , rofi -show calc -modi calc -no-show-match -no-sort | wl-copy
bind = $mainMod , D , exec , hyprctl keyword general:layout dwindle bind = $mainMod , D , exec , hyprctl keyword general:layout dwindle
bind = $mainMod , M , exec , hyprctl keyword general:layout master bind = $mainMod , M , exec , hyprctl keyword general:layout master
bind = $mainMod , R , exec , rofi -show combi bind = $mainMod , R , exec , rofi -show combi
bind = $mainMod , RETURN , exec , kitty bind = $mainMod , RETURN , exec , kitty
bind = $mainMod SHIFT , RETURN , exec , kitty -- tmux new -A -s home
# XF86 keys # XF86 keys
binde = , XF86AudioLowerVolume , exec , pamixer -d 5 binde = , XF86AudioLowerVolume , exec , pamixer -d 5
binde = , XF86AudioRaiseVolume , exec , pamixer -i 5 binde = , XF86AudioRaiseVolume , exec , pamixer -i 5
bind = , XF86AudioMute , exec , pamixer -t bind = , XF86AudioMute , exec , pamixer -t
bind = , XF86AudioNext , exec , playerctl -p "spotifyd,firefox" next bind = , XF86AudioNext , exec , playerctl -p "spotifyd,firefox" next
bind = , XF86AudioPlay , exec , playerctl -p "spotifyd,firefox" play-pause bind = , XF86AudioPlay , exec , playerctl -p "spotifyd,firefox" play-pause
bind = , XF86AudioPrev , exec , playerctl -p "spotifyd,firefox" previous bind = , XF86AudioPrev , exec , playerctl -p "spotifyd,firefox" previous
# Move focus with mainMod + hjkl # Move focus with mainMod + hjkl
binde = $mainMod, H, movefocus, l binde = $mainMod , H , movefocus , l
binde = $mainMod, L, movefocus, r binde = $mainMod , L , movefocus , r
binde = $mainMod, K, movefocus, u binde = $mainMod , K , movefocus , u
binde = $mainMod, J, movefocus, d binde = $mainMod , J , movefocus , d
# Change current active window size with mainMod + SHIFT + hjkl # Change current active window size with mainMod + SHIFT + hjkl
binde = $mainMod SHIFT, H, resizeactive, -10 0 binde = $mainMod SHIFT , H , resizeactive , -10 0
binde = $mainMod SHIFT, J, resizeactive, 0 10 binde = $mainMod SHIFT , J , resizeactive , 0 10
binde = $mainMod SHIFT, K, resizeactive, 0 -10 binde = $mainMod SHIFT , K , resizeactive , 0 -10
binde = $mainMod SHIFT, L, resizeactive, 10 0 binde = $mainMod SHIFT , L , resizeactive , 10 0
# Move current active window with mainMod + ALT + hjkl # Move current active window with mainMod + ALT + hjkl
bind = $mainMod ALT, H, movewindow, l bind = $mainMod ALT , H , movewindow , l
bind = $mainMod ALT, J, movewindow, d bind = $mainMod ALT , J , movewindow , d
bind = $mainMod ALT, K, movewindow, u bind = $mainMod ALT , K , movewindow , u
bind = $mainMod ALT, L, movewindow, r bind = $mainMod ALT , L , movewindow , r
# Switch workspaces with mainMod + [0-9] # Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1 bind = $mainMod , 1 , workspace , 1
bind = $mainMod, 2, workspace, 2 bind = $mainMod , 2 , workspace , 2
bind = $mainMod, 3, workspace, 3 bind = $mainMod , 3 , workspace , 3
bind = $mainMod, 4, workspace, 4 bind = $mainMod , 4 , workspace , 4
bind = $mainMod, 5, workspace, 5 bind = $mainMod , 5 , workspace , 5
bind = $mainMod, 6, workspace, 6 bind = $mainMod , 6 , workspace , 6
bind = $mainMod, 7, workspace, 7 bind = $mainMod , 7 , workspace , 7
bind = $mainMod, 8, workspace, 8 bind = $mainMod , 8 , workspace , 8
bind = $mainMod, 9, workspace, 9 bind = $mainMod , 9 , workspace , 9
bind = $mainMod, 0, workspace, 10 bind = $mainMod , 0 , workspace , 10
# Move active window to a workspace with mainMod + SHIFT + [0-9] # Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1 bind = $mainMod SHIFT , 1 , movetoworkspace , 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2 bind = $mainMod SHIFT , 2 , movetoworkspace , 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3 bind = $mainMod SHIFT , 3 , movetoworkspace , 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4 bind = $mainMod SHIFT , 4 , movetoworkspace , 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5 bind = $mainMod SHIFT , 5 , movetoworkspace , 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6 bind = $mainMod SHIFT , 6 , movetoworkspace , 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7 bind = $mainMod SHIFT , 7 , movetoworkspace , 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8 bind = $mainMod SHIFT , 8 , movetoworkspace , 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9 bind = $mainMod SHIFT , 9 , movetoworkspace , 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10 bind = $mainMod SHIFT , 0 , movetoworkspace , 10
# Scroll through existing workspaces with mainMod + scroll # Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1 bind = $mainMod , mouse_down , workspace , e+1
bind = $mainMod, mouse_up, workspace, e-1 bind = $mainMod , mouse_up , workspace , e-1
# Move/resize windows with mainMod + LMB/RMB and dragging # Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow bindm = $mainMod , mouse:272 , movewindow
bindm = $mainMod, mouse:273, resizewindow bindm = $mainMod , mouse:273 , resizewindow
# Toggle waybar # Toggle waybar
bindr = $mainMod, SUPER_L, exec, pkill -USR1 waybar bindr = $mainMod , SUPER_L , exec , pkill -USR1 waybar
# Extra Config # Extra Config
${cfg.extraConfig} ${cfg.extraConfig}

View File

@ -1,7 +1,6 @@
{ config { config
, lib , lib
, pkgs , pkgs
, inputs
, ... , ...
} @ args: } @ args:
@ -9,8 +8,7 @@ with lib;
let let
cfg = config.my.programs.hyprland; cfg = config.my.programs.hyprland;
hyprland-nvidia = pkgs.hyprland.override { enableNvidiaPatches = true; }; hyprland = config.programs.hyprland.finalPackage;
hyprland = if cfg.nvidiaSupport then hyprland-nvidia else pkgs.hyprland;
in in
{ {
options.my.programs.hyprland = { options.my.programs.hyprland = {
@ -50,16 +48,33 @@ in
rofi.enable = true; rofi.enable = true;
}; };
wallpapers.enable = true; wallpapers.enable = true;
services.dunst.enable = true; services = {
services.wallpaper.enable = true; dunst.enable = true;
wallpaper = {
enable = true;
target = "hyprland-session.target";
};
spotify-player.target = "hyprland-session.target";
};
};
programs.hyprland = {
enable = true;
enableNvidiaPatches = cfg.nvidiaSupport;
}; };
home-manager.users.moritz = { home-manager.users.moritz = {
# enable home-manager module # enable home-manager module
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
package = hyprland; enableNvidiaPatches = cfg.nvidiaSupport;
extraConfig = import ./_config.nix args; extraConfig = import ./_config.nix args;
systemd.extraCommands = [
"systemctl --user stop hyprland-session.target"
"sleep 1.5"
"systemctl --user start hyprland-session.target"
"systemctl --user start xdg-desktop-portal-hyprland.service"
];
}; };
# add waybar as a status bar # add waybar as a status bar
@ -69,7 +84,7 @@ in
# start using systemd service # start using systemd service
systemd = { systemd = {
enable = true; enable = true;
target = "graphical-session.target"; target = "hyprland-session.target";
}; };
settings = { settings = {
@ -128,23 +143,13 @@ in
timeout = 30 * 60; timeout = 30 * 60;
command = "${pkgs.systemd}/bin/systemctl suspend-and-hibernate"; command = "${pkgs.systemd}/bin/systemctl suspend-and-hibernate";
}; };
systemdTarget = "graphical-session.target"; systemdTarget = "hyprland-session.target";
};
systemd.user.services.nextcloud-client.Service = {
RestartSec = "500ms";
Restart = "on-failure";
}; };
}; };
# adds pam module for swaylock # adds pam module for swaylock
security.pam.services.swaylock = { }; security.pam.services.swaylock = { };
systemd.user.services.xdg-desktop-portal-hyprland = {
after = [ "hyprland-session.target" ];
requiredBy = [ "xdg-desktop-portal.service" ];
};
# add user packages for wayland and hyprland in particular # add user packages for wayland and hyprland in particular
users.users.moritz.packages = with pkgs; [ users.users.moritz.packages = with pkgs; [
brightnessctl # control brightness brightnessctl # control brightness
@ -177,7 +182,6 @@ in
__GL_VRR_ALLOWED = "0"; __GL_VRR_ALLOWED = "0";
}); });
services = { services = {
dbus.enable = true; dbus.enable = true;
# use pipewire (needed for screensharing) # use pipewire (needed for screensharing)
@ -196,18 +200,31 @@ in
user = "moritz"; user = "moritz";
}; };
defaultSession = "hyprland"; defaultSession = "hyprland";
sessionPackages = [ hyprland ]; # can't set the defaultSession otherwise
}; };
}; };
}; };
security.rtkit.enable = true; security.rtkit.enable = true;
home-manager.users.moritz.systemd.user.services =
let
units = [ "waybar" ];
mkAfter = _: {
Unit = {
After = [ "hyprland-session.target" ];
Wants = [ "hyprland-session.target" ];
};
};
in
genAttrs units mkAfter;
# desktop portal (for screensharing) systemd.user.services =
xdg.portal = { let
enable = true; units = [ "pipewire" "xdg-desktop-portal" "xdg-desktop-portal-hyprland" "wireplumber" ];
wlr.enable = mkForce false; mkAfter = _: {
extraPortals = [ pkgs.xdg-desktop-portal-hyprland ]; after = [ "hyprland-session.target" ];
}; wants = [ "hyprland-session.target" ];
};
in
genAttrs units mkAfter;
}; };
} }

View File

@ -36,6 +36,7 @@ in
fish fish
isort isort
jq jq
nil
nixd nixd
nixpkgs-fmt nixpkgs-fmt
nodePackages.bash-language-server nodePackages.bash-language-server

View File

@ -134,11 +134,12 @@ end
local servers = { local servers = {
"bashls", "bashls",
"gopls",
"nil_ls",
"nixd", "nixd",
"pylsp", "pylsp",
"ruff_lsp", "ruff_lsp",
"typst_lsp", "typst_lsp",
"gopls",
} }
for _, lsp in ipairs(servers) do for _, lsp in ipairs(servers) do
lspconfig_setup(lsp, {}) lspconfig_setup(lsp, {})

View File

@ -1,6 +1,6 @@
local telekasten = require("telekasten") local telekasten = require("telekasten")
telekasten.setup({ telekasten.setup({
home = vim.fn.expand("~/Nextcloud/Notes/zettelkasten"), home = vim.fn.expand("~/Documents/Nextcloud/Notes/zettelkasten"),
auto_set_filetype = false, auto_set_filetype = false,
image_subdir = "assets", image_subdir = "assets",
}) })

View File

@ -30,6 +30,10 @@ in
type = types.package; type = types.package;
default = pkgs.spotify-player; default = pkgs.spotify-player;
}; };
target = mkOption {
type = types.str;
default = "graphical-session.target";
};
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -44,9 +48,8 @@ in
} }
]; ];
systemd.user.services.spotify-player = { systemd.user.services.spotify-player = {
after = [ "graphical-session.target" "network.target" ]; after = [ cfg.target "network.target" ];
partOf = [ "graphical-session.target" ]; wantedBy = [ cfg.target ];
wantedBy = [ "graphical-session.target" ];
serviceConfig = { serviceConfig = {
Type = "forking"; Type = "forking";
Restart = "always"; Restart = "always";

View File

@ -10,12 +10,17 @@ in
type = types.str; type = types.str;
default = "30m"; default = "30m";
}; };
target = mkOption {
type = types.str;
default = "graphical-session.target";
};
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
systemd.user.services.wallpaper = { systemd.user.services.wallpaper = {
script = "${getExe config.my.programs.wallpaper.package} -r -v"; script = "${getExe config.my.programs.wallpaper.package} -r -v";
wantedBy = [ "graphical-session.target" ]; wantedBy = [ cfg.target ];
after = [ cfg.target ];
serviceConfig = { serviceConfig = {
Restart = "always"; Restart = "always";
RuntimeMaxSec = cfg.frequency; RuntimeMaxSec = cfg.frequency;

Binary file not shown.