diff --git a/hosts/marpa/configuration.nix b/hosts/marpa/configuration.nix
index 29f2f34..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"];
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/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/#home.nix# b/users/phundrak/#home.nix#
new file mode 100644
index 0000000..6c2f733
--- /dev/null
+++ b/users/phundrak/#home.nix#
@@ -0,0 +1,116 @@
+{
+ pkgs,
+ config,
+ inputs,
+ ...
+}: {
+ imports = [
+ ./light-home.nix
+ ./packages.nix
+ ../modules/emacs.nix
+ ../modules/kdeconnect.nix
+ ../modules/kitty.nix
+ ../modules/hyprland.nix
+ ../modules/mbsync.nix
+ ../modules/mpd.nix
+ ../modules/mpv.nix
+ ../modules/wofi.nix
+ ../modules/yt-dlp.nix
+ ../modules/emoji.nix
+ ../modules/qt.nix
+ ];
+
+ config = let
+ emacsPkg = with pkgs; ((emacsPackagesFor emacsNativeComp).emacsWithPackages (
+ epkgs: [
+ epkgs.vterm
+ epkgs.mu4e
+ epkgs.pdf-tools
+ ]
+ ));
+ askpass = import ../scripts/askpass.nix {inherit pkgs;};
+ launchWithEmacsclient = import ../scripts/launch-with-emacsclient.nix {
+ inherit pkgs;
+ emacsPackage = emacsPkg;
+ };
+ in {
+ sops.secrets = {
+ emailPassword = {};
+ "mopidy/bandcamp" = {};
+ "mopidy/spotify" = {};
+ };
+
+ home.sessionVariables = {
+ EDITOR = "${emacsPkg}/bin/emacsclient -c -a ${emacsPkg}/bin/emacs";
+ LAUNCH_EDITOR = "${launchWithEmacsclient}/bin/launch-with-emacsclient";
+ SUDO_ASKPASS = "${askpass}/bin/askpass";
+ LSP_USE_PLISTS = "true";
+ };
+
+ modules = {
+ shell.starship.jjIntegration = true;
+ bat.extras = true;
+ packages.emacsPackage = emacsPkg;
+ mopidy.enable = true;
+
+ emacs = {
+ enable = true;
+ service = true;
+ package = emacsPkg;
+ };
+ 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;
+ };
+ ssh = {
+ enable = true;
+ hosts = config.sops.secrets."ssh/hosts".path;
+ };
+ vcs.git = {
+ browser = "${inputs.zen-browser.packages.${pkgs.system}.default}/bin/zen";
+ emacs = {
+ integration = true;
+ pkg = emacsPkg;
+ };
+ sendmail = {
+ enable = true;
+ passwordFile = config.sops.secrets.emailPassword.path;
+ };
+ };
+ };
+
+ programs = {
+ zsh.enableVteIntegration = true;
+ mu.enable = true;
+ obs-studio = {
+ enable = true;
+ plugins = with pkgs; [
+ obs-studio-plugins.input-overlay
+ obs-studio-plugins.obs-backgroundremoval
+ obs-studio-plugins.obs-mute-filter
+ obs-studio-plugins.obs-pipewire-audio-capture
+ obs-studio-plugins.obs-source-clone
+ obs-studio-plugins.obs-source-record
+ obs-studio-plugins.obs-tuna
+ ];
+ };
+ };
+
+ services = {
+ mpris-proxy.enable = true;
+ playerctld.enable = true;
+ };
+
+ manual.html.enable = true;
+ };
+}
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/home.nix b/users/phundrak/home.nix
index 8d180a7..6c2f733 100644
--- a/users/phundrak/home.nix
+++ b/users/phundrak/home.nix
@@ -10,6 +10,7 @@
../modules/emacs.nix
../modules/kdeconnect.nix
../modules/kitty.nix
+ ../modules/hyprland.nix
../modules/mbsync.nix
../modules/mpd.nix
../modules/mpv.nix
@@ -47,16 +48,26 @@
};
modules = {
- emacs = {
- enable = true;
- service = true;
- package = emacsPkg;
- };
shell.starship.jjIntegration = true;
bat.extras = true;
packages.emacsPackage = emacsPkg;
mopidy.enable = true;
+ emacs = {
+ enable = true;
+ service = true;
+ package = emacsPkg;
+ };
+ 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;
diff --git a/users/scripts/default.nix b/users/scripts/default.nix
index 31e6f3f..d246077 100644
--- a/users/scripts/default.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"
+''