diff --git a/hosts/marpa/configuration.nix b/hosts/marpa/configuration.nix index 0bb79ec..73355be 100644 --- a/hosts/marpa/configuration.nix +++ b/hosts/marpa/configuration.nix @@ -7,11 +7,12 @@ imports = [ inputs.sops-nix.nixosModules.sops ./system/hardware-configuration.nix - ./services.nix + ./services ../../modules/system.nix ../../modules/sops.nix ../../modules/opentablet.nix ../../programs/flatpak.nix + ../../programs/hyprland.nix ../../programs/steam.nix ]; @@ -54,6 +55,8 @@ }; }; + modules.hyprland.enable = true; + security.rtkit.enable = true; nix.settings.trusted-users = ["root" "phundrak"]; @@ -64,8 +67,13 @@ curl openssl wget + alsa-scarlett-gui ]; + boot.extraModprobeConfig = '' + options snd_usb_audio vid=0x1235 pid=0x8212 device_setup=1 + ''; + programs.nix-ld.enable = true; # This value determines the NixOS release from which the default diff --git a/hosts/marpa/services.nix b/hosts/marpa/services/default.nix similarity index 69% rename from hosts/marpa/services.nix rename to hosts/marpa/services/default.nix index a74acfa..7480132 100644 --- a/hosts/marpa/services.nix +++ b/hosts/marpa/services/default.nix @@ -1,23 +1,24 @@ { imports = [ - ../../modules/ssh.nix - ../../modules/sunshine.nix - ../../modules/xserver.nix + ../../../modules/ssh.nix + ../../../modules/sunshine.nix + ../../../modules/xserver.nix ]; modules = { - xserver = { - amdgpu.enable = true; - de = "gnome"; - }; sunshine = { enable = true; autostart = true; }; + xserver = { + amdgpu.enable = true; + de = "gnome"; + }; }; services = { + blueman.enable = true; + fwupd.enable = true; printing.enable = true; openssh.enable = true; - fwupd.enable = true; }; } diff --git a/programs/hyprland.nix b/programs/hyprland.nix index 3c45fe9..e4e00ce 100644 --- a/programs/hyprland.nix +++ b/programs/hyprland.nix @@ -6,44 +6,9 @@ with lib; let cfg = config.modules.hyprland; in { - options.modules.hyprland = { - enable = mkEnableOption "Enables Hyprland"; - config = mkOption { - type = types.lines; - default = ""; - }; - waybar = { - config = mkOption { - type = types.lines; - default = ""; - }; - style = mkOption { - type = types.nullOr types.path; - default = null; - }; - }; - }; - - config = { - wayland.windowManager.hyprland = mkIf cfg.enable { - enable = true; - xwayland.enable = true; - systemd.enable = true; - extraConfig = cfg.config; - }; - services.wpaperd = { - enable = true; - settings = '' - [default] - path = "/home/phundrak/Pictures/Wallpapers/nord" - duration = "5m" - sorting = "ascending" - ''; - }; - programs.waybar = { - enable = true; - inherit (cfg.waybar) config style; - systemd.enableInspect = true; - }; + options.modules.hyprland.enable = mkEnableOption "Enables Hyprland"; + config.programs.hyprland = mkIf cfg.enable { + inherit (cfg) enable; + withUWSM = true; }; } diff --git a/programs/kdeconnect.nix b/programs/kdeconnect.nix deleted file mode 100644 index 446fbd2..0000000 --- a/programs/kdeconnect.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; let - cfg = config.modules.kdeconnect; -in { - options.modules.kdeconnect.enable = mkEnableOption "Enable KDEConnect"; - - config.services.kdeconnect = mkIf cfg.enable { - enable = true; - indicator = true; - }; -} diff --git a/users/modules/eww-config/eww.scss b/users/modules/eww-config/eww.scss new file mode 100644 index 0000000..e69de29 diff --git a/users/modules/eww-config/eww.yuck b/users/modules/eww-config/eww.yuck new file mode 100644 index 0000000..558bf84 --- /dev/null +++ b/users/modules/eww-config/eww.yuck @@ -0,0 +1,12 @@ +(defwindow example + :monitor 0 + :geometry (geometry :x "0%" + :y "20%" + :width "90%" + :height "30px" + :anchor "top center") + :stacking "fg" + :reserve (struts :distance "40px" :side "top") + :windowtype "dock" + :wm-ignore false + "example content") diff --git a/users/modules/eww-config/test b/users/modules/eww-config/test new file mode 100644 index 0000000..e69de29 diff --git a/users/modules/eww.nix b/users/modules/eww.nix new file mode 100644 index 0000000..7ee4937 --- /dev/null +++ b/users/modules/eww.nix @@ -0,0 +1,6 @@ +{ + programs.eww = { + enable = true; + configDir = ./eww-config; + }; +} diff --git a/users/modules/hyprland.nix b/users/modules/hyprland.nix index de9bbc1..3d6f05a 100644 --- a/users/modules/hyprland.nix +++ b/users/modules/hyprland.nix @@ -1,8 +1,300 @@ { - imports = [../../programs/hyprland.nix]; - modules.hyprland = { - enable = true; - config = builtins.readFile ./config/hypr/hyprland.conf; - waybar.style = ./config/waybar/style.css; + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.modules.hyprland; + rofi-emoji = import ../scripts/rofi-emoji.nix {inherit pkgs;}; +in { + imports = [ + ./swaync.nix + ./waybar.nix + ./wlsunset.nix + ]; + + options.modules.hyprland = { + enable = mkEnableOption "Enables Hyprland"; + swaync = mkEnableOption "Enables swaync"; + emacsPkg = mkOption { + type = types.package; + default = pkgs.emacs; + }; + host = mkOption { + type = types.enum ["tilo" "gampo"]; + default = "tilo"; + description = '' + Which host is Hyprland running on. + + This helps determine the monitors layout. + ''; + }; + waybar = { + enable = mkEnableOption "Enables waybar."; + battery = mkEnableOption "Enables battery support."; + style = mkOption { + type = types.path; + example = ./style.css; + }; + }; + }; + + config = mkIf cfg.enable { + wayland.windowManager.hyprland = { + enable = true; + xwayland.enable = true; + systemd.enable = false; + importantPrefixes = ["$left" "$right" "$up" "$down" "$menu"]; + settings = { + input = { + kb_layout = "fr"; + kb_variant = "bepo_afnor"; + kb_options = "caps:ctrl_modifier"; + numlock_by_default = true; + follow_mouse = 1; + touchpad.natural_scroll = false; + sensitivity = "0"; + }; + monitor = + { + "tilo" = [ + "DP-1, 3440x1440@144, 0x725, 1" + "DP-3, 2560x1080@60, 3440x0, 1, transform, 3" + ]; + "gampo" = []; + }."${cfg.host}"; + general = { + gaps_in = 5; + gaps_out = 20; + border_size = 2; + "col.active_border" = "rgb(81a1c1) rgb(a3be8c) 45deg"; + "col.inactive_border" = "rgb(4c566a)"; + layout = "dwindle"; + }; + decoration = { + rounding = 5; + # blur = { + # enable = true; + # size = 9; + # passes = 1; + # }; + # shadow = { + # enable = true; + # color = "rgba(2e3440aa)"; + # range = 4; + # render_power = 3; + # }; + }; + animations = { + enabled = true; + animation = [ + # "windows, 1, 7, myBezier" + "windowsOut, 1, 7, default, popin 80%" + "border, 1, 10, default" + "borderangle, 1, 8, default" + "fade, 1, 7, default" + "workspaces, 1, 6, default" + ]; + }; + dwindle = { + pseudotile = true; + preserve_split = true; + }; + exec-once = [ + "pactl load-module module-switch-on-connect" + "${pkgs.mpc}/bin/mpc stop" + "${pkgs.networkmanagerapplet}/bin/nm-applet" + ]; + }; + extraConfig = '' + $left = c + $right = r + $up = s + $down = t + $menu = ${pkgs.wofi}/bin/wofi --show drun + + bind = SUPER, Return, exec, kitty + bind = SUPER, Space, submap, leader + bind = , Print, submap, screenshot + + submap = leader + bind = , l, exec, plock + bind = , l, submap, reset + bind = , a, submap, apps + bind = , b, submap, buffers + bind = , w, submap, windows + bind = , escape, submap, reset + bind = CTRL, g, submap, reset + + submap = apps + bind = , b, exec, zen + bind = , b, submap, reset + bind = SHIFT, b, exec, qutebrowser + bind = SHIFT, b, submap, reset + bind = , d, exec, vesktop + bind = , d, submap, reset + bind = , e, exec, ${cfg.emacsPkg}/bin/emacsclient -c -n + bind = , e, submap, reset + bind = , g, exec, ${pkgs.gimp}/bin/gimp + bind = , g, submap, reset + bind = , n, exec, ${pkgs.nemo}/bin/nemo + bind = , n, submap, reset + bind = , r, submap, rofi + bind = , u, exec, $menu + bind = , u, submap, reset + bind = , escape, submap, reset + bind = CTRL, g, submap, reset + submap = buffers + bind = , d, killactive, + bind = , d, submap, reset + bind = , escape, submap, reset + bind = CTRL, g, submap, reset + submap = resize + binde = , $left, resizeactive, -10 0 + binde = , $right, resizeactive, 10 0 + binde = , $up, resizeactive, 0 -10 + binde = , $down, resizeactive, 0 10 + bind = , q, submap, reset + bind = , escape, submap, reset + bind = CTRL, g, submap, reset + submap = rofi + bind = , e, exec, ${rofi-emoji}/bin/rofi-emoji + bind = , e, submap, reset + bind = , r, exec, $menu + bind = , r, submap, reset + bind = , y, exec, ytplay + bind = , y, submap, reset + bind = , escape, submap, reset + bind = CTRL, g, submap, reset + submap = screenshot + bind = , Print, exec, screenshot + bind = , Print, submap, reset + bind = , d, exec, screenshot -d 3 + bind = , d, submap, reset + bind = Shift, d, exec, screenshot -sced 3 + bind = Shift, d, submap, reset + bind = , e, exec, screenshot -sec + bind = , e, submap, reset + bind = , s, exec, screenshot -s + bind = , s, submap, reset + bind = Shift, s, exec, screenshot -sc + bind = Shift, s, submap, reset + bind = , escape, submap, reset + bind = CTRL, g, submap, reset + submap = windows + bind = , period, submap, resize + bind = , $left, movefocus, l + bind = , $left, submap, reset + bind = , $right, movefocus, r + bind = , $right, submap, reset + bind = , $up, movefocus, u + bind = , $up, submap, reset + bind = , $down, movefocus, d + bind = , $down, submap, reset + bind = SHIFT, $left, movewindow, l + bind = SHIFT, $left, submap, reset + bind = SHIFT, $right, movewindow, r + bind = SHIFT, $right, submap, reset + bind = SHIFT, $up, movewindow, u + bind = SHIFT, $up, submap, reset + bind = SHIFT, $down, movewindow, d + bind = SHIFT, $down, submap, reset + bind = CTRL_SHIFT, $left, moveworkspacetomonitor, e+0 +1 + bind = CTRL_SHIFT, $left, submap, reset + bind = CTRL_SHIFT, $right, moveworkspacetomonitor, e+0 -1 + bind = CTRL_SHIFT, $right, submap, reset + bind = , d, killactive, + bind = , d, submap, reset + bind = , f, fullscreen, + bind = , f, submap, reset + bind = SHIFT, f, togglefloating, + bind = SHIFT, f, submap, reset + bind = , escape, submap, reset + bind = CTRL, g, submap, reset + + submap = reset + bindl = , XF86AudioPlay, exec, playerctl play-pause + bindl = , XF86AudioPause, exec, playerctl pause + bindl = , XF86AudioStop, exec, playerctl stop + bindl = , XF86AudioPrev, exec, playerctl previous + bindl = , XF86AudioNext, exec, playerctl next + bindl = , XF86AudioForward, exec, playerctl position +1 + bindl = , XF86AudioRewind, exec, playerctl position -1 + bindl = , XF86AudioRaiseVolume, exec, pamixer -i 2 + bindl = , XF86AudioLowerVolume, exec, pamixer -d 2 + bindl = , XF86MonBrightnessUp, exec, xbacklight -perceived -inc 2 + bindl = , XF86MonBrightnessDown, exec, xbacklight -perceived -dec 2 + bindl = , XF86KbdBrightnessUp, exec, xbacklight -perceived -inc 2 + bindl = , XF86KbdBrightnessDown, exec, xbacklight -perceived -dec 2 + bind = SUPER, $left, movefocus, l + bind = SUPER, $right, movefocus, r + bind = SUPER, $up, movefocus, u + bind = SUPER, $down, movefocus, d + bind = SUPER_SHIFT, $left, movewindow, l + bind = SUPER_SHIFT, $left, submap, reset + bind = SUPER_SHIFT, $right, movewindow, r + bind = SUPER_SHIFT, $right, submap, reset + bind = SUPER_SHIFT, $up, movewindow, u + bind = SUPER_SHIFT, $up, submap, reset + bind = SUPER_SHIFT, $down, movewindow, d + bind = SUPER_SHIFT, $down, submap, reset + bind = SUPER_CTRL_SHIFT, $left, moveworkspacetomonitor, e+0 +1 + bind = SUPER_CTRL_SHIFT, $left, submap, reset + bind = SUPER_CTRL_SHIFT, $right, moveworkspacetomonitor, e+0 -1 + bind = SUPER_CTRL_SHIFT, $right, submap, reset + bind = SUPER, Tab, cyclenext, + bind = SUPER_SHIFT, Tab, cyclenext, prev + bindm = SUPER, mouse:272, movewindow + bindm = SUPER, mouse:273, resizewindow + bind = SUPER, quotedbl, workspace, 1 + bind = SUPER, guillemotleft, workspace, 2 + bind = SUPER, guillemotright, workspace, 3 + bind = SUPER, parenleft, workspace, 4 + bind = SUPER, parenright, workspace, 5 + bind = SUPER, at, workspace, 6 + bind = SUPER, plus, workspace, 7 + bind = SUPER, minus, workspace, 8 + bind = SUPER, slash, workspace, 9 + bind = SUPER, asterisk, workspace, 10 + bind = SUPER, mouse_down, workspace, e+1 + bind = SUPER, mouse_up, workspace, e-1 + bind = SUPER_SHIFT, quotedbl, movetoworkspace, 1 + bind = SUPER_SHIFT, guillemotleft, movetoworkspace, 2 + bind = SUPER_SHIFT, guillemotright, movetoworkspace, 3 + bind = SUPER_SHIFT, parenleft, movetoworkspace, 4 + bind = SUPER_SHIFT, parenright, movetoworkspace, 5 + bind = SUPER_SHIFT, at, movetoworkspace, 6 + bind = SUPER_SHIFT, plus, movetoworkspace, 7 + bind = SUPER_SHIFT, minus, movetoworkspace, 8 + bind = SUPER_SHIFT, slash, movetoworkspace, 9 + bind = SUPER_SHIFT, asterisk, movetoworkspace, 10 + ''; + }; + services = { + blueman-applet.enable = true; + wpaperd = { + enable = true; + settings = { + default = { + path = "/home/phundrak/Pictures/Wallpapers/nord"; + duration = "5m"; + sorting = "random"; + mode = "center"; + recursive = true; + }; + DP-3 = { + mode = "fit-border-color"; + }; + }; + }; + }; + modules = { + swaync.enable = cfg.swaync; + waybar = mkIf cfg.waybar.enable { + inherit (cfg.waybar) enable battery style; + }; + wlsunset.enable = true; + }; }; } diff --git a/users/modules/mbsync.nix b/users/modules/mbsync.nix index bff8149..cc6588c 100644 --- a/users/modules/mbsync.nix +++ b/users/modules/mbsync.nix @@ -29,32 +29,6 @@ in { config = mkIf cfg.enable { systemd.user.services.mbsync.unitConfig.After = ["sops-nix.service"]; services.mbsync.enable = cfg.service.enable; - programs.mbsync = { - enable = true; - extraConfig = '' - IMAPAccount Main - Host ${cfg.host} - User ${cfg.user} - PassCmd "cat ${cfg.passwordFile}" - SSLType IMAPS - SSLVersion TLSv1.2 - CertificateFile /etc/ssl/certs/ca-certificates.crt - - IMAPStore main-remote - Account Main - - MaildirStore main-local - Subfolders Verbatim - Path ~/Mail/ - Inbox ~/Mail/Inbox - - Channel main - Far :main-remote: - Near :main-local: - Create Both - SyncState * - Patterns * - ''; - }; + programs.mbsync.enable = true; }; } diff --git a/users/modules/mpv.nix b/users/modules/mpv.nix index 50dbf4e..2706190 100644 --- a/users/modules/mpv.nix +++ b/users/modules/mpv.nix @@ -3,16 +3,14 @@ enable = true; config = { force-window = "immediate"; - ytdl-format = "bestvideo[height<=1080]+bestaudio"; force-seekable = true; # force streams to be seekable - cache-default = 4000000; slang = "jpn,jp,eng,en,fra,fr"; alang = "eng,en,fra,fr"; gpu-api = "vulkan"; osc = true; profile = "gpu-hq"; - geometry = "50%x50%"; - autofit-larger = "90%x90%"; + # geometry = "50%x50%"; + # autofit-larger = "90%x90%"; # Screenshots screenshot-format = "png"; @@ -24,14 +22,12 @@ deband-iterations = 2; deband-threshold = 35; deband-range = 20; - deband-grand = 5; dither-depth = "auto"; sub-auto = "fuzzy"; scale = "ewa_lanczossharp"; - dscale = "mitchel"; cscale = "ewa_lanczossharp"; }; scripts = with pkgs.mpvScripts; [ @@ -43,7 +39,7 @@ quality-menu sponsorblock thumbfast - # twitch-chat + twitch-chat youtube-chat youtube-upnext ]; diff --git a/users/modules/swaync.nix b/users/modules/swaync.nix new file mode 100644 index 0000000..7fa5ac6 --- /dev/null +++ b/users/modules/swaync.nix @@ -0,0 +1,18 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.modules.swaync; +in { + options.modules.swaync = { + enable = mkEnableOption "Enables swaync"; + }; + + config = mkIf cfg.enable { + services.swaync.enable = true; + home.packages = [pkgs.swaynotificationcenter]; + }; +} diff --git a/users/modules/waybar.nix b/users/modules/waybar.nix new file mode 100644 index 0000000..3544809 --- /dev/null +++ b/users/modules/waybar.nix @@ -0,0 +1,154 @@ +{ + config, + lib, + ... +}: +with lib; let + cfg = config.modules.waybar; +in { + options.modules.waybar = { + enable = mkEnableOption "Enables waybar."; + battery = mkEnableOption "Enables battery support."; + style = mkOption { + type = types.path; + example = ./style.css; + }; + }; + config.programs.waybar = mkIf cfg.enable { + inherit (cfg) enable; + systemd.enable = true; + settings = { + topBar = { + height = 24; + spacing = 2; + modules-left = ["hyprland/workspaces" "hyprland/submap" "hyprland/window"]; + modules-center = []; + modules-right = [ + "idle_inhibitor" + "group/audio" + "group/hardware" + "network" + "privacy" + "clock" + "tray" + ]; + + idle_inhibitor = { + format = "{icon}"; + format-icons = { + activated = ""; + deactivated = ""; + }; + }; + + mpris = { + dynamic-order = ["title" "artist" "album"]; + dynamic-importance-order = ["title" "artist" "album"]; + format = "DEFAULT: {player_icon} {dynamic}"; + format-paused = "DEFAULT: {status_icon} {dynamic}"; + player-icons = { + default = "▶"; + mpv = "🎵"; + }; + status-icons.paused = "⏸"; + ignored-players = []; + }; + + pulseaudio = { + format = "{volume}% {icon} {format_source}"; + format-bluetooth = "{volume}% {icon} {format_source}"; + format-bluetooth-muted = " {icon} {format_source}"; + format-muted = " {format_source}"; + format-source = "{volume}% "; + format-source-muted = ""; + format-icons = { + headphone = ""; + hands-free = ""; + headset = ""; + phone = ""; + portable = ""; + car = ""; + default = ["" "" ""]; + }; + on-click = "pavucontrol"; + }; + + network = { + format-wifi = "{essid} ({signalStrength}%) "; + format-ethernet = "{ipaddr}/{cidr} "; + tooltip-format = "{ifname} via {gwaddr} "; + format-linked = "{ifname} (No IP) "; + format-disconnected = "Disconnected ⚠"; + format-alt = "{ifname}: {ipaddr}/{cidr}"; + }; + + "group/audio" = { + modules = ["mpris" "pulseaudio" "pulseaudio/slider"]; + orientation = "inherit"; + drawer.transition-duration = 300; + }; + + "group/hardware" = { + modules = lists.optional cfg.battery "battery" ++ ["cpu" "memory" "disk"]; + orientation = "inherit"; + drawer.transition-duration = 300; + }; + + cpu = { + format = "{usage}% "; + tooltip = false; + }; + + memory.format = "{}% "; + + disk = { + format = "{path}: {used}/{total} ({percentage_used}%)"; + unit = "GB"; + }; + + battery = { + states = { + good = 90; + warning = 30; + critical = 15; + }; + format = "{capacity}% {icon}"; + format-charging = "{capacity}% "; + format-plugged = "{capacity}% "; + format-alt = "{time} {icon}"; + # An empty format will hide the module + format-good = ""; + format-full = ""; + format-icons = ["" "" "" "" ""]; + }; + + clock = { + timezones = ["Europe/Paris" "Asia/Tokyo" "America/New_York" "America/Los_Angeles" "Asia/Kathmandu"]; + tooltip-format = "{:%Y %B}\n{calendar}"; + format-alt = "{:%Y-%m-%d}"; + actions = { + on-click-right = "mode"; + on-scroll-up = "tz_up"; + on-scroll-down = "tz_down"; + }; + calendar = { + mode = "year"; + mode-mon-col = 3; + weeks-pos = "right"; + on-scroll = 1; + format = { + months = "{}"; + days = "{}"; + weeks = "W{:%W}"; + weekdays = "{}"; + today = "{}"; + }; + }; + }; + + tray.spacing = 10; + }; + }; + style = builtins.readFile cfg.style; + }; +} diff --git a/users/modules/wlsunset.nix b/users/modules/wlsunset.nix new file mode 100644 index 0000000..09bbb95 --- /dev/null +++ b/users/modules/wlsunset.nix @@ -0,0 +1,24 @@ +{ + config, + lib, + ... +}: +with lib; let + cfg = config.modules.wlsunset; +in { + options.modules.wlsunset = { + enable = mkEnableOption "Enables wlsunset"; + latitude = mkOption { + type = with types; nullOr (oneOf [str ints.unsigned float]); + default = 48.5; + }; + longitude = mkOption { + type = with types; nullOr (oneOf [str ints.unsigned float]); + default = 2.2; + }; + }; + + config.services.wlsunset = mkIf cfg.enable { + inherit (cfg) enable latitude longitude; + }; +} diff --git a/users/phundrak/config/hypr/hyprland.conf b/users/phundrak/config/hypr/hyprland.conf deleted file mode 100644 index d7450b6..0000000 --- a/users/phundrak/config/hypr/hyprland.conf +++ /dev/null @@ -1,249 +0,0 @@ -env = XCURSOR_SIZE,24 -env = SDL_VIDEODRIVER,wayland - -input { - kb_layout = fr - kb_variant = bepo_afnor - kb_model = - kb_options = caps:ctrl_modifier - kb_rules = - numlock_by_default = true - - follow_mouse = 1 - - touchpad { - natural_scroll = false - } - - sensitivity = 0 # -1.0 - 1.0, 0 means no modification. -} - -monitor = HDMI-A-1, 2560x1080, 0x0, 1 -monitor = eDP-1, 1920x1080@120, 2560x0, 1 - -general { - gaps_in = 5 - gaps_out = 20 - border_size = 2 - col.active_border = rgb(81a1c1) rgb(a3be8c) 45deg - col.inactive_border = rgb(4c566a) - layout = dwindle -} - -decoration { - rounding = 5 - blur { - enabled = true - size = 9 - passes = 1 - } - shadow { - enabled = true - color = rgba(2e3440aa) - range = 4 - render_power = 3 - } -} - -animations { - enabled = true - bezier = myBezier, 0.05, 0.9, 0.1, 1.05 - animation = windows, 1, 7, myBezier - animation = windowsOut, 1, 7, default, popin 80% - animation = border, 1, 10, default - animation = borderangle, 1, 8, default - animation = fade, 1, 7, default - animation = workspaces, 1, 6, default -} - -dwindle { - pseudotile = true - preserve_split = true -} - -exec-once = wpaperd -exec-once = waybar - -exec-once = pactl load-module module-switch-on-connect -exec-once = mpc stop - -exec-once = xfce-polkit - -exec-once = swaync - -exec-once = wlsunset -l 48.5 -L 2.2 -d 1500 - -exec-once = nm-applet -exec-once = blueman-applet - -$left = c -$right = r -$up = s -$down = t -$menu = rofi -combi-modi drun -show combi - -bind = SUPER, Return, exec, kitty -bind = SUPER, Space, submap, leader -bind = , Print, submap, screenshot - -submap = leader -bind = , l, exec, plock -bind = , l, submap, reset -bind = , a, submap, apps -bind = , b, submap, buffers -bind = , w, submap, windows -bind = , escape, submap, reset -bind = CTRL, g, submap, reset - -submap = apps -bind = , b, exec, zen-browser -bind = , b, submap, reset -bind = SHIFT, b, exec, qutebrowser -bind = SHIFT, b, submap, reset -bind = , d, exec, vesktop -bind = , d, submap, reset -bind = , e, exec, emacsclient -c -n -bind = , e, submap, reset -bind = , g, exec, gimp -bind = , g, submap, reset -bind = , n, exec, nemo -bind = , n, submap, reset -bind = , r, submap, rofi -bind = , u, exec, $menu -bind = , u, submap, reset -bind = , escape, submap, reset -bind = CTRL, g, submap, reset -submap = buffers -bind = , d, killactive, -bind = , d, submap, reset -bind = , escape, submap, reset -bind = CTRL, g, submap, reset -submap = resize -binde = , $left, resizeactive, -10 0 -binde = , $right, resizeactive, 10 0 -binde = , $up, resizeactive, 0 -10 -binde = , $down, resizeactive, 0 10 -bind = , q, submap, reset -bind = , escape, submap, reset -bind = CTRL, g, submap, reset -submap = rofi -bind = , a, exec, awiki -bind = , a, submap, reset -bind = , b, exec, bluetooth-connect -bind = , b, submap, reset -bind = , e, exec, rofi-emoji -bind = , e, submap, reset -bind = , r, exec, $menu -bind = , r, submap, reset -bind = , s, exec, rofi -show ssh -bind = , s, submap, reset -bind = , y, exec, ytplay -bind = , y, submap, reset -bind = SHIFT, y, exec, rofi-ytdl -bind = SHIFT, y, submap, reset -bind = , escape, submap, reset -bind = CTRL, g, submap, reset -submap = screenshot -bind = , Print, exec, screenshot -bind = , Print, submap, reset -bind = , d, exec, screenshot -d 3 -bind = , d, submap, reset -bind = Shift, d, exec, screenshot -sced 3 -bind = Shift, d, submap, reset -bind = , e, exec, screenshot -sec -bind = , e, submap, reset -bind = , s, exec, screenshot -s -bind = , s, submap, reset -bind = Shift, s, exec, screenshot -sc -bind = Shift, s, submap, reset -bind = , escape, submap, reset -bind = CTRL, g, submap, reset -submap = windows -bind = , period, submap, resize -bind = , $left, movefocus, l -bind = , $left, submap, reset -bind = , $right, movefocus, r -bind = , $right, submap, reset -bind = , $up, movefocus, u -bind = , $up, submap, reset -bind = , $down, movefocus, d -bind = , $down, submap, reset -bind = SHIFT, $left, movewindow, l -bind = SHIFT, $left, submap, reset -bind = SHIFT, $right, movewindow, r -bind = SHIFT, $right, submap, reset -bind = SHIFT, $up, movewindow, u -bind = SHIFT, $up, submap, reset -bind = SHIFT, $down, movewindow, d -bind = SHIFT, $down, submap, reset -bind = CTRL_SHIFT, $left, moveworkspacetomonitor, e+0 +1 -bind = CTRL_SHIFT, $left, submap, reset -bind = CTRL_SHIFT, $right, moveworkspacetomonitor, e+0 -1 -bind = CTRL_SHIFT, $right, submap, reset -bind = , d, killactive, -bind = , d, submap, reset -bind = , f, fullscreen, -bind = , f, submap, reset -bind = SHIFT, f, togglefloating, -bind = SHIFT, f, submap, reset -bind = , escape, submap, reset -bind = CTRL, g, submap, reset - -submap = reset -bindl = , XF86AudioPlay, exec, playerctl play-pause -bindl = , XF86AudioPause, exec, playerctl pause -bindl = , XF86AudioStop, exec, playerctl stop -bindl = , XF86AudioPrev, exec, playerctl previous -bindl = , XF86AudioNext, exec, playerctl next -bindl = , XF86AudioForward, exec, playerctl position +1 -bindl = , XF86AudioRewind, exec, playerctl position -1 -bindl = , XF86AudioRaiseVolume, exec, pamixer -i 2 -bindl = , XF86AudioLowerVolume, exec, pamixer -d 2 -bindl = , XF86MonBrightnessUp, exec, xbacklight -perceived -inc 2 -bindl = , XF86MonBrightnessDown, exec, xbacklight -perceived -dec 2 -bindl = , XF86KbdBrightnessUp, exec, xbacklight -perceived -inc 2 -bindl = , XF86KbdBrightnessDown, exec, xbacklight -perceived -dec 2 -bind = SUPER, $left, movefocus, l -bind = SUPER, $right, movefocus, r -bind = SUPER, $up, movefocus, u -bind = SUPER, $down, movefocus, d -bind = SUPER_SHIFT, $left, movewindow, l -bind = SUPER_SHIFT, $left, submap, reset -bind = SUPER_SHIFT, $right, movewindow, r -bind = SUPER_SHIFT, $right, submap, reset -bind = SUPER_SHIFT, $up, movewindow, u -bind = SUPER_SHIFT, $up, submap, reset -bind = SUPER_SHIFT, $down, movewindow, d -bind = SUPER_SHIFT, $down, submap, reset -bind = SUPER_CTRL_SHIFT, $left, moveworkspacetomonitor, e+0 +1 -bind = SUPER_CTRL_SHIFT, $left, submap, reset -bind = SUPER_CTRL_SHIFT, $right, moveworkspacetomonitor, e+0 -1 -bind = SUPER_CTRL_SHIFT, $right, submap, reset -bind = SUPER, Tab, cyclenext, -bind = SUPER_SHIFT, Tab, cyclenext, prev -bindm = SUPER, mouse:272, movewindow -bindm = SUPER, mouse:273, resizewindow -bind = SUPER, quotedbl, workspace, 1 -bind = SUPER, guillemotleft, workspace, 2 -bind = SUPER, guillemotright, workspace, 3 -bind = SUPER, parenleft, workspace, 4 -bind = SUPER, parenright, workspace, 5 -bind = SUPER, at, workspace, 6 -bind = SUPER, plus, workspace, 7 -bind = SUPER, minus, workspace, 8 -bind = SUPER, slash, workspace, 9 -bind = SUPER, asterisk, workspace, 10 -bind = SUPER, mouse_down, workspace, e+1 -bind = SUPER, mouse_up, workspace, e-1 -bind = SUPER_SHIFT, quotedbl, movetoworkspace, 1 -bind = SUPER_SHIFT, guillemotleft, movetoworkspace, 2 -bind = SUPER_SHIFT, guillemotright, movetoworkspace, 3 -bind = SUPER_SHIFT, parenleft, movetoworkspace, 4 -bind = SUPER_SHIFT, parenright, movetoworkspace, 5 -bind = SUPER_SHIFT, at, movetoworkspace, 6 -bind = SUPER_SHIFT, plus, movetoworkspace, 7 -bind = SUPER_SHIFT, minus, movetoworkspace, 8 -bind = SUPER_SHIFT, slash, movetoworkspace, 9 -bind = SUPER_SHIFT, asterisk, movetoworkspace, 10 - -windowrulev2 = float,class:^(xfce-polkit)$ diff --git a/users/phundrak/email.nix b/users/phundrak/email.nix new file mode 100644 index 0000000..bd3b6df --- /dev/null +++ b/users/phundrak/email.nix @@ -0,0 +1,37 @@ +{config, ...}: { + accounts.email = { + maildirBasePath = "Mail"; + accounts."lucien@phundrak.com" = { + realName = "Lucien Cartier-Tilet"; + address = "lucien@phundrak.com"; + aliases = [ + "lucien@cartier-tilet.com" + "admin@phundrak.com" + "webmaster@phundrak.com" + "youdontknow@phundrak.com" + ]; + passwordCommand = "cat ${config.sops.secrets.emailPassword.path}"; + signature = { + text = '' + Lucien “Phundrak” Cartier-Tilet + https://phundrak.com (Français) + https://phundrak.com/en (English) + Sent from GNU/Emacs + ''; + showSignature = "append"; + }; + userName = "lucien@phundrak.com"; + imap.host = "mail.phundrak.com"; + smtp.host = "mail.phundrak.com"; + mu.enable = true; + primary = true; + + mbsync = { + create = "maildir"; + enable = true; + expunge = "both"; + remove = "both"; + }; + }; + }; +} diff --git a/users/phundrak/home.nix b/users/phundrak/home.nix index 7a7f098..586050b 100644 --- a/users/phundrak/home.nix +++ b/users/phundrak/home.nix @@ -7,9 +7,11 @@ imports = [ ./light-home.nix ./packages.nix + ./email.nix ../modules/emacs.nix ../modules/kdeconnect.nix ../modules/kitty.nix + ../modules/hyprland.nix ../modules/mbsync.nix ../modules/mpd.nix ../modules/mpv.nix @@ -47,6 +49,11 @@ }; modules = { + shell.starship.jjIntegration = true; + bat.extras = true; + packages.emacsPackage = emacsPkg; + mopidy.enable = true; + emacs = { enable = true; service = true; @@ -54,11 +61,16 @@ mu4eMime = true; org-protocol = true; }; - shell.starship.jjIntegration = true; - bat.extras = true; - packages.emacsPackage = emacsPkg; - mopidy.enable = true; - + hyprland = { + inherit emacsPkg; + enable = true; + swaync = true; + waybar = { + enable = true; + battery = false; + style = ./config/waybar/style.css; + }; + }; mbsync = { enable = true; passwordFile = config.sops.secrets.emailPassword.path; @@ -96,6 +108,12 @@ ]; }; }; + + services = { + mpris-proxy.enable = true; + playerctld.enable = true; + }; + manual.html.enable = true; }; } diff --git a/users/phundrak/packages.nix b/users/phundrak/packages.nix index ae5ef83..5af61c2 100644 --- a/users/phundrak/packages.nix +++ b/users/phundrak/packages.nix @@ -13,7 +13,7 @@ in { default = pkgs.emacs; }; config.home.packages = with pkgs; let - scripts = import ../scripts/scripts.nix { + scripts = import ../scripts { inherit pkgs; config.emacsPkg = cfg.emacsPackage; }; @@ -46,7 +46,6 @@ in { plex-media-player spicetify-cli spotify - spotify-tray # Social vesktop # Discord alternative that works well with wayland diff --git a/users/scripts/scripts.nix b/users/scripts/default.nix similarity index 81% rename from users/scripts/scripts.nix rename to users/scripts/default.nix index 31e6f3f..d246077 100644 --- a/users/scripts/scripts.nix +++ b/users/scripts/default.nix @@ -7,12 +7,13 @@ in [ askpass (import ./backup.nix {inherit pkgs;}) - (import ./hyprland-autostart.nix {inherit pkgs;}) (import ./keygen.nix {inherit pkgs;}) (import ./launch-with-emacsclient.nix { inherit pkgs; emacsPackage = config.emacsPkg; }) (import ./mp42webm.nix {inherit pkgs;}) + (import ./plock.nix {inherit pkgs;}) + (import ./screenshot.nix {inherit pkgs;}) (import ./sshbind.nix {inherit pkgs;}) ] diff --git a/users/scripts/hyprland-autostart.nix b/users/scripts/hyprland-autostart.nix deleted file mode 100644 index 9bf9942..0000000 --- a/users/scripts/hyprland-autostart.nix +++ /dev/null @@ -1,4 +0,0 @@ -{pkgs, ...}: -pkgs.writeShellScriptBin "hyprland-autostart" '' - ${pkgs.waybar}/bin/waybar & - ${pkgs.wlsunset}/bin/wlsunset -l 48.5 -L 2.2 -d 1500'' diff --git a/users/scripts/plock.nix b/users/scripts/plock.nix new file mode 100644 index 0000000..7c17991 --- /dev/null +++ b/users/scripts/plock.nix @@ -0,0 +1,16 @@ +{pkgs, ...}: +pkgs.writeShellScriptBin "plock" '' + TMPBG="/tmp/screen.png" + if [ "$XDG_SESSION_TYPE" = "wayland" ]; then + SCREENER=${pkgs.grim}/bin/grim + LOCKER="${pkgs.swaylock}/bin/swaylock -feF" + else + SCREENER=${pkgs.scrot}/bin/scrot + LOCKER="${pkgs.i3lock}/bin/i3lock -ef" + fi + + $SCREENER "$TMPBG" + ${pkgs.corrupter}/bin/corrupter -add 0 "$TMPBG" "$TMPBG" + $LOCKER -ti "$TMPBG" + rm "$TMPBG" +'' diff --git a/users/scripts/rofi-emoji.nix b/users/scripts/rofi-emoji.nix new file mode 100644 index 0000000..74d4eae --- /dev/null +++ b/users/scripts/rofi-emoji.nix @@ -0,0 +1,18 @@ +{pkgs, ...}: +pkgs.writeShellScriptBin "rofi-emoji" '' + SELECTED_EMOJI=$(grep -v "#" ~/.config/emoji | ${pkgs.wofi}/bin/wofi --dmenu -p "Select emoji" -i | awk '{print $1}' | tr -d '\n') + if [ "$XDG_SESSION_TYPE" = "wayland" ]; then + printf "%s" "$SELECTED_EMOJI" | ${pkgs.wl-clipboard-rs}/bin/wl-copy + else + printf "%s" "$SELECTED_EMOJI" | ${pkgs.xclip}/bin/xclip -sel clip + fi + + if [ "$XDG_SESSION_TYPE" = "wayland" ] + then EMOJI=$(${pkgs.wl-clipboard-rs}/bin/wl-paste) + else EMOJI=$(${pkgs.xclip}/bin/xclip -o) + fi + + test -z "$EMOJI" && notify-send "No emoji copied" -u low && exit + EMOJI="$EMOJI copied to clipboard" + ${pkgs.libnotify}/bin/notify-send -u low "$EMOJI" +'' diff --git a/users/scripts/screenshot.nix b/users/scripts/screenshot.nix new file mode 100644 index 0000000..ee50af9 --- /dev/null +++ b/users/scripts/screenshot.nix @@ -0,0 +1,56 @@ +{pkgs, ...}: +pkgs.writeShellScriptBin "screenshot" '' + OUTFILE_BASE="$HOME/Pictures/Screenshots/Screenshot_$(date +%Y-%m-%d_%H.%M.%S)" + OUTFILE="$OUTFILE_BASE.png" + SUFFIX=0 + + while getopts ':cd:egs' OPTION; do + case "$OPTION" in + c ) + COPY="yes" + ;; + d ) + DELAY="$OPTARG" + ;; + e ) + EDIT="yes" + ;; + g ) + GIMP="yes" + ;; + s ) + SELECT="yes" + ;; + ? ) + echo "Usage: $(basename "$0") [-c] [-d DELAY] [-e] [-g] [-s]" + exit 1 + ;; + esac + done + + if [ "$SELECT" = "yes" ]; then + AREA="$(${pkgs.slurp}/bin/slurp)" + fi + + if [ -n "$DELAY" ]; then + sleep "$DELAY" + fi + + if [ "$SELECT" = "yes" ]; then + ${pkgs.grim}/bin/grim -g "$AREA" "$OUTFILE" + else + ${pkgs.grim}/bin/grim "$OUTFILE" + fi + + if [ "$EDIT" = "yes" ];then + ${pkgs.swappy}/bin/swappy -f "$OUTFILE" -o "$OUTFILE" + fi + + if [ "$GIMP" = "yes" ]; then + ${pkgs.gimp}/bin/gimp "$OUTFILE" + fi + + if [ "$COPY" = "yes" ]; then + ${pkgs.wl-clipboard-rs}/bin/wl-copy < "$OUTFILE" + fi +'' diff --git a/users/scripts/ytplay.nix b/users/scripts/ytplay.nix index fd03d25..274cece 100644 --- a/users/scripts/ytplay.nix +++ b/users/scripts/ytplay.nix @@ -1,18 +1,16 @@ -{pkgs, ...}: let - rofi = pkgs.rofi-wayland; -in - pkgs.writeShellScriptBin "ytplay" '' - URL=$(${rofi}/bin/rofi -dmenu -i -p "Video URL") - if [ -z "$URL" ]; then - echo "You need to provide a URL" - exit 1 - fi - RESOLUTION_CHOICE=$(${pkgs.yt-dlp}/bin/yt-dlp --list-formats "$URL" | \ - grep -E "webm.*[0-9]+x[0-9]" | \ - awk '{print $3 " " $1}' | \ - sort -gu | \ - ${rofi}/bin/rofi -dmenu -i -p "Resolution") - mapfile -t RESOLUTION <<< "$RESOLUTION_CHOICE" - RESOLUTION_CODE=''${RESOLUTION[0]} - ${pkgs.mpv}/bin/mpv --ytdl-format="''${RESOLUTION_CODE}+bestaudio/best" "$URL" - '' +{pkgs, ...}: +pkgs.writeShellScriptBin "ytplay" '' + URL=$(${pkgs.wofi}/bin/wofi --dmenu -i -p "Video URL") + if [ -z "$URL" ]; then + echo "You need to provide a URL" + exit 1 + fi + RESOLUTION_CHOICE=$(${pkgs.yt-dlp}/bin/yt-dlp --list-formats "$URL" | \ + grep -E "webm.*[0-9]+x[0-9]" | \ + awk '{print $3 " " $1}' | \ + sort -gu | \ + ${pkgs.wofi}/bin/wofi --dmenu -i -p "Resolution") + mapfile -t RESOLUTION <<< "$RESOLUTION_CHOICE" + RESOLUTION_CODE=''${RESOLUTION[0]} + ${pkgs.mpv}/bin/mpv --ytdl-format="''${RESOLUTION_CODE}+bestaudio/best" "$URL" +''