nixos-configs/common/home-manager/sway/default.nix

213 lines
7.5 KiB
Nix

{ config, nixosConfig, pkgs, lib, ... }:
with lib;
let
cfg = nixosConfig.within.sway;
nanpa = pkgs.tulpa.dev.cadey.nanpa;
in {
config = mkIf cfg.enable {
wayland.windowManager.sway = {
enable = true;
wrapperFeatures.gtk = true;
# emulate my dwm config
config = with pkgs;
let
focused = rec {
border = "#d3869b";
background = border;
text = "#32302f";
};
active = rec {
border = "#b16286";
background = border;
text = "#32302f";
};
in {
terminal = "${pkgs.st}/bin/st";
bars = [{
fonts = [ "Primihi 11" "Hack 10" ];
colors = {
background = "#282828";
statusline = "#ebdbb2";
separator = "#666666";
focusedWorkspace = focused;
activeWorkspace = active;
inactiveWorkspace = {
border = "#333333";
background = "#222222";
text = "#888888";
};
urgentWorkspace = {
border = "#2f343a";
background = "#900000";
text = "#ffffff";
};
bindingMode = {
border = "#2f343a";
background = "#900000";
text = "#ffffff";
};
};
command = "${pkgs.sway}/bin/swaybar";
hiddenState = "hide";
mode = "dock";
position = "top";
statusCommand = if cfg.i3status then
"${pkgs.i3status}/bin/i3status"
else
"${pkgs.tulpa.dev.cadey.cabytcini}/bin/cabytcinysuhei";
workspaceButtons = true;
workspaceNumbers = false;
trayOutput = "primary";
}];
colors = {
focused = rec {
background = "#d3869b";
border = "#bdae93";
text = "#32302f";
indicator = "#2e9ef4";
childBorder = "#3d3285";
};
focusedInactive = rec {
background = "#b16286";
border = "#bdae93";
text = "#ebdbb2";
indicator = "#b57614";
childBorder = "#3d3285";
};
unfocused = rec {
background = "#8f3f71";
border = "#bdae93";
text = "#ebdbb2";
indicator = "#b57614";
childBorder = "#3d3285";
};
};
floating = {
criteria =
[ { title = "Steam - Update News"; } { class = "Pavucontrol"; } ];
titlebar = true;
};
focus = { followMouse = "yes"; };
fonts = [ "Primihi 12" "Hack 10" ];
gaps = {
horizontal = 3;
vertical = 3;
inner = 3;
smartBorders = "on";
smartGaps = true;
};
workspaceAutoBackAndForth = true;
keybindings =
let modifier = config.wayland.windowManager.sway.config.modifier;
in lib.mkOptionDefault {
"${modifier}+Shift+Return" =
"exec ${pkgs.st}/bin/st";
"${modifier}+Shift+c" = "kill";
"${modifier}+p" =
"exec ${pkgs.dmenu}/bin/dmenu_path | ${pkgs.dmenu}/bin/dmenu -nb '#1d2021' -nf '#ebdbb2' -sb '#b16286' -sf '#fbf1c7' | ${pkgs.findutils}/bin/xargs swaymsg exec --";
"${modifier}+t" = "layout toggle split";
"${modifier}+f" = "layout tabbed";
"${modifier}+u" = "layout stacking";
"${modifier}+e" = "exec $HOME/bin/e";
"${modifier}+s" = "exec grim";
"${modifier}+Shift+s" = "exec slurp | grim -g -";
"${modifier}+1" = "exec ${nanpa}/bin/nanpac switch 1";
"${modifier}+2" = "exec ${nanpa}/bin/nanpac switch 2";
"${modifier}+3" = "exec ${nanpa}/bin/nanpac switch 3";
"${modifier}+4" = "exec ${nanpa}/bin/nanpac switch 4";
"${modifier}+5" = "exec ${nanpa}/bin/nanpac switch 5";
"${modifier}+6" = "exec ${nanpa}/bin/nanpac switch 6";
"${modifier}+7" = "exec ${nanpa}/bin/nanpac switch 7";
"${modifier}+8" = "exec ${nanpa}/bin/nanpac switch 8";
"${modifier}+9" = "exec ${nanpa}/bin/nanpac switch 9";
"${modifier}+m" = "focus output DP-1";
"${modifier}+k" = "focus output HDMI-A-1";
"${modifier}+Shift+1" = "exec ${nanpa}/bin/nanpac move 1";
"${modifier}+Shift+2" = "exec ${nanpa}/bin/nanpac move 2";
"${modifier}+Shift+3" = "exec ${nanpa}/bin/nanpac move 3";
"${modifier}+Shift+4" = "exec ${nanpa}/bin/nanpac move 4";
"${modifier}+Shift+5" = "exec ${nanpa}/bin/nanpac move 5";
"${modifier}+Shift+6" = "exec ${nanpa}/bin/nanpac move 6";
"${modifier}+Shift+7" = "exec ${nanpa}/bin/nanpac move 7";
"${modifier}+Shift+8" = "exec ${nanpa}/bin/nanpac move 8";
"${modifier}+Shift+9" = "exec ${nanpa}/bin/nanpac move 9";
"${modifier}+Shift+0" = "sticky toggle";
"${modifier}+Shift+minus" = "move scratchpad";
"${modifier}+minus" = "scratchpad show";
};
output = nixosConfig.cadey.sway.output;
startup = [
{
command = "systemctl --user restart waybar";
always = true;
}
{ command = "mako -c ${./mako.conf}"; }
{ command = "firefox"; }
{ command = "Discord"; }
{
command = "systemctl --user restart nanpad";
always = true;
}
{
command =
"systemctl --user restart xdg-desktop-portal xdg-desktop-portal-wlr";
always = true;
}
];
window = { border = 1; };
};
extraSessionCommands = ''
export SDL_VIDEODRIVER=wayland
# needs qt5.qtwayland in systemPackages
export QT_QPA_PLATFORM=wayland
export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
# Fix for some Java AWT applications (e.g. Android Studio),
# use this if they aren't displayed properly:
export _JAVA_AWT_WM_NONREPARENTING=1
'';
};
home.packages = with pkgs; [
grim # for screenshots
slurp
swaylock
swayidle
wl-clipboard
mako # notification daemon
alacritty # Alacritty is the default terminal in the config
dmenu # Dmenu is the default in the config but i recommend wofi since its wayland native
];
home.file.".config/mako/config".source = ./mako.conf;
systemd.user.services = {
nanpad = {
Unit.Description = "workspace nanpa daemon";
Service = {
Type = "simple";
ExecStart = "${nanpa}/bin/nanpad";
};
Install.WantedBy = [ "sway-session.target" ];
};
xdg-desktop-portal = {
Unit.Description = "XDG Desktop Portal";
Service.ExecStart =
"${pkgs.xdg-desktop-portal}/libexec/xdg-desktop-portal";
Install.WantedBy = [ "sway-session.target" ];
};
xdg-desktop-portal-wlr = {
Unit.Description = "XDG Desktop Portal for wlroots compositors";
Service.ExecStart =
"${pkgs.xdg-desktop-portal-wlr}/libexec/xdg-desktop-portal-wlr";
Install.WantedBy = [ "sway-session.target" ];
};
};
};
}