feat: add river and foot modules

This commit is contained in:
Moritz Böhme 2024-03-21 17:19:06 +01:00
parent 298aa410eb
commit e714349fe1
No known key found for this signature in database
GPG key ID: 970C6E89EB0547A9
10 changed files with 485 additions and 230 deletions

View file

@ -47,6 +47,26 @@
prompt = "#${mauve}";
spinner = "#${rosewater}";
};
foot.settings.colors = {
foreground = text; # Text
background = base; # Base
regular0 = surface1; # Surface 1
regular1 = red; # red
regular2 = green; # green
regular3 = yellow; # yellow
regular4 = blue;
regular5 = pink;
regular6 = teal;
regular7 = subtext1;
bright0 = surface2;
bright1 = red;
bright2 = green;
bright3 = yellow;
bright4 = blue;
bright5 = pink;
bright6 = teal;
bright7 = subtext0;
};
kitty.extraConfig = ''
# vim:ft=kitty

View file

@ -77,7 +77,7 @@ in
isNormalUser = true;
home = "/home/moritz";
extraGroups = [ "wheel" "networkmanager" "video" ];
initialPassword = "password"; # CHANGE ME PLEASE
# initialPassword = "password"; # CHANGE ME PLEASE
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGoAqa2m7hIzZ2LS96Z+RCIlRvhBM/j7h27tMBCwMT+a" # Moritz
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDhtwHDGAZshiQWKkCcPWV9tC83b+bKBgjDcjP/N2CKO" # Laptop

30
modules/programs/foot.nix Normal file
View file

@ -0,0 +1,30 @@
{ config
, lib
, ...
}:
with lib;
let
cfg = config.my.programs.foot;
in
{
options.my.programs.foot.enable = mkEnableOption "foot";
config = mkIf cfg.enable {
home-manager.users.moritz = {
# HACK: to make foot server work
systemd.user.services.foot.Service.Environment = "PATH=/run/current-system/sw/bin/";
programs.foot = {
enable = true;
server.enable = true;
settings = {
main = {
term = "xterm-256color";
font = "FiraCode Nerd Font:size=8";
dpi-aware = true;
};
};
};
};
};
}

View file

@ -154,8 +154,9 @@ in
bind = $mainMod , D , exec , hyprctl keyword general:layout dwindle
bind = $mainMod , M , exec , hyprctl keyword general:layout master
bind = $mainMod , R , exec , rofi -show combi
bind = $mainMod , RETURN , exec , kitty
bind = $mainMod SHIFT , RETURN , exec , kitty -- tmux new "ts || tn home ~"
bind = $mainMod , RETURN , exec , footclient
bind = $mainMod SHIFT , RETURN , exec , foot
# bind = $mainMod SHIFT , RETURN , exec , kitty -- tmux new "ts || tn home ~"
# XF86 keys
binde = , XF86AudioLowerVolume , exec , pamixer -d 5

View file

@ -48,7 +48,7 @@ in
];
programs = {
wallpaper.enable = true;
kitty.enable = true;
foot.enable = true;
rofi.enable = true;
};
wallpapers.enable = true;

View file

@ -0,0 +1,207 @@
{ config
, lib
, pkgs
, inputs
, ...
} @ args:
with lib;
let
cfg = config.my.programs.river;
in
{
options.my.programs.river = {
enable = mkEnableOption "river";
keyboardLayouts = mkOption {
type = types.listOf types.str;
description = "list of keyboard layouts";
default = [ "de" "us" ];
};
monitors = mkOption {
type = types.listOf types.str;
description = "monitor settings";
default = [ ",preferred,auto,1" ];
};
};
config = mkIf cfg.enable {
programs.river.enable = true;
my = {
programs = {
wallpaper.enable = true;
foot.enable = true;
rofi.enable = true;
};
wallpapers.enable = true;
services = {
dunst.enable = true;
wallpaper = {
enable = true;
# target = "hyprland-session.target";
};
# spotify-player.target = "hyprland-session.target";
};
};
home-manager.users.moritz = {
# enable home-manager module
wayland.windowManager.river = {
enable = true;
settings = {
border-width = 2;
declare-mode = [
"locked"
"normal"
"passthrough"
];
map = {
normal = {
"Super Q" = "close";
"Super Return" = "spawn footclient";
"Super+Shift Return" = "spawn foot";
};
};
};
};
# add waybar as a status bar
programs.waybar = {
enable = true;
# start using systemd service
systemd = {
enable = true;
# target = "hyprland-session.target";
};
settings = {
mainBar = {
start_hidden = true;
layer = "top";
position = "top";
height = 20;
modules-left = [ "river/mode" ];
modules-center = [ "river/window" ];
modules-right = [ "network" "memory" "cpu" "battery" "clock" ];
};
};
};
# lock screen after timeout
programs.swaylock = {
enable = true;
settings = {
color = "000000";
};
};
services.swayidle = {
enable = true;
events = [
{
event = "before-sleep";
command = "${getExe pkgs.swaylock} -fF";
}
{
event = "lock";
command = "${getExe pkgs.swaylock} -fF";
}
];
timeouts =
let
lockTimeout = 10;
in
[
{
timeout = lockTimeout * 60 - 10;
command = "${pkgs.libnotify}/bin/notify-send 'Locking screen!'";
}
{
timeout = lockTimeout * 60 + 10;
command = "${pkgs.systemd}/bin/loginctl lock-session";
}
];
# systemdTarget = "hyprland-session.target";
};
};
# adds pam module for swaylock
security.pam.services.swaylock = { };
# add user packages for wayland and hyprland in particular
users.users.moritz.packages = with pkgs; [
brightnessctl # control brightness
grimblast # screenshot tool for hyprland
pamixer # pulse audio cli
playerctl # control media playback
slurp # region select for wayland (for screensharing)
wdisplays # manage monitors
wl-clipboard # clipboard tool for wayland
];
# additional environment variables
# environment.sessionVariables =
# {
# XDG_CURRENT_DESKTOP = "Hyprland";
# XDG_SESSION_TYPE = "wayland";
# XDG_SESSION_DESKTOP = "Hyprland";
# QT_AUTO_SCREEN_SCALE_FACTOR = "1";
# QT_QPA_PLATFORM = "wayland;xcb";
# QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
# QT_QPA_PLATFORMTHEME = "qt5ct";
# _JAVA_AWT_WM_NONEREPARENTING = "1";
# } // (optionalAttrs cfg.nvidiaSupport
# {
# LIBVA_DRIVER_NAME = "nvidia";
# GBM_BACKEND = "nvidia-drm";
# __GLX_VENDOR_LIBRARY_NAME = "nvidia";
# WLR_NO_HARDWARE_CURSORS = "1";
# __GL_VRR_ALLOWED = "0";
# });
services = {
dbus.enable = true;
# use pipewire (needed for screensharing)
pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
xserver = {
enable = true;
displayManager = {
lightdm.enable = true;
autoLogin = {
enable = true;
user = "moritz";
};
defaultSession = "river";
};
};
};
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;
#
# systemd.user.services =
# let
# units = [ "pipewire" "xdg-desktop-portal" "xdg-desktop-portal-hyprland" "wireplumber" ];
# mkAfter = _: {
# after = [ "hyprland-session.target" ];
# wants = [ "hyprland-session.target" ];
# };
# in
# genAttrs units mkAfter;
};
}