334 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			334 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
#
 | 
						|
#  Sway NixOS & Home manager configuration
 | 
						|
#
 | 
						|
#  flake.nix
 | 
						|
#   ├─ ./hosts
 | 
						|
#   │   └─ ./laptop
 | 
						|
#   │       └─ home.nix
 | 
						|
#   └─ ./modules
 | 
						|
#       └─ ./desktop
 | 
						|
#           └─ ./sway
 | 
						|
#               └─ home.nix *
 | 
						|
#
 | 
						|
 | 
						|
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
{
 | 
						|
  home.file.".config/sway/scripts/2in1screen".source = ../scripts/2in1screen;
 | 
						|
 | 
						|
  wayland.windowManager.sway = {
 | 
						|
     enable = true;
 | 
						|
     catppuccin.enable = true;
 | 
						|
     checkConfig = false;
 | 
						|
     config = rec {
 | 
						|
        menu = "${pkgs.rofi}/bin/rofi -show combi -show-icons";
 | 
						|
        left = "m";
 | 
						|
        down = "n";
 | 
						|
        up = "e";
 | 
						|
        right = "i";
 | 
						|
        modifier = "Mod4";
 | 
						|
        floating.modifier = "Mod4";
 | 
						|
        floating.titlebar = true;
 | 
						|
        
 | 
						|
        input = {
 | 
						|
            "type:keyboard" = { 
 | 
						|
                xkb_layout = "us,de";
 | 
						|
                xkb_variant = "altgr-intl,";
 | 
						|
                xkb_options = "grp:win_space_toggle";
 | 
						|
            };
 | 
						|
            "type:touchpad" = {
 | 
						|
                tap = "enabled";
 | 
						|
                natural_scroll = "disabled";
 | 
						|
                drag = "enabled";
 | 
						|
                dwt = "enabled";
 | 
						|
                middle_emulation = "enabled";
 | 
						|
                scroll_method = "two_finger";
 | 
						|
                tap_button_map = "lmr";
 | 
						|
            };
 | 
						|
        };
 | 
						|
 | 
						|
        output = {
 | 
						|
            "*" = { 
 | 
						|
                bg = "$HOME/.config/wall fill";
 | 
						|
            };
 | 
						|
            #"HDMI-A-1" = {
 | 
						|
            #    mode = "2560x1440";
 | 
						|
            #    pos = "0,0";
 | 
						|
            #    #scale = "1.1";
 | 
						|
            #};
 | 
						|
            "DP-2" = {
 | 
						|
                mode = "2560x1440";
 | 
						|
                pos = "0,0";
 | 
						|
            };
 | 
						|
            "DP-3" = {
 | 
						|
                mode = "1920x1200";
 | 
						|
                pos = "2560,180";
 | 
						|
            };
 | 
						|
            #"eDP-1" = { 
 | 
						|
            #    mode = "1920x1080";
 | 
						|
            #    #pos = "4480,0";
 | 
						|
            #    pos = "2560,0";
 | 
						|
            #    subpixel = "none";
 | 
						|
            #    scale = "1.3";
 | 
						|
            #};
 | 
						|
        };
 | 
						|
 | 
						|
        terminal = "${pkgs.alacritty}/bin/alacritty";
 | 
						|
    
 | 
						|
        fonts = {
 | 
						|
            names = [ "Cascadia Code" ];
 | 
						|
            size = 10.0;
 | 
						|
        };
 | 
						|
        
 | 
						|
        colors.focused = {
 | 
						|
            background = "#212121";
 | 
						|
            border = "#999999";
 | 
						|
            childBorder = "#999999";
 | 
						|
            indicator = "#999999";
 | 
						|
            text = "#FFFFFF";
 | 
						|
        };
 | 
						|
 | 
						|
        startup = [
 | 
						|
            { command = "exec ${pkgs.rot8}/bin/rot8 -Y -k"; }
 | 
						|
            { command = "xrdb -load ~/.Xresources"; }
 | 
						|
         #   { command = "gsettings set org.gnome.desktop.interface gtk-theme Dracula"; }
 | 
						|
         #   { command = "gsettings set org.gnome.desktop.interface icon-theme Dracula"; }
 | 
						|
         #   { command = "gsettings set org.gnome.desktop.interface cursor-theme Adwaita"; }
 | 
						|
            #{ command = "exec ${pkgs.networkmanagerapplet}/bin/nm-applet --indicator"; }
 | 
						|
            { command = "${pkgs.thunderbird}/bin/thunderbird"; }
 | 
						|
            { command = "${pkgs.firefox}/bin/firefox"; }
 | 
						|
            { command = "${pkgs.element-desktop}/bin/element-desktop"; }
 | 
						|
        ];
 | 
						|
    
 | 
						|
        workspaceAutoBackAndForth = true;
 | 
						|
    
 | 
						|
        gaps.inner = 8;
 | 
						|
        gaps.outer = 4;
 | 
						|
        gaps.smartGaps = true;
 | 
						|
        gaps.smartBorders = "on";
 | 
						|
 | 
						|
        assigns = {
 | 
						|
            "workspace number 1" = [{ app_id = "thunderbird"; }];
 | 
						|
            "workspace number 2" = [{ app_id = "firefox"; }];
 | 
						|
            "workspace number 3" = [{ class = "Element"; }];
 | 
						|
        };
 | 
						|
 | 
						|
        window.commands = [
 | 
						|
            { command = "floating enable"; criteria = { app_id = ".yubioath-flutter-wrapped"; }; }
 | 
						|
            { command = "floating enable"; criteria = { app_id = "pavucontrol"; }; }
 | 
						|
            { command = "floating enable"; criteria = { app_id = "galculator"; }; }
 | 
						|
            { command = "floating enable"; criteria = { app_id = "com.nitrokey."; }; }
 | 
						|
            { command = "floating enable"; criteria = { app_id = "org.keepassxc.KeePassXC."; }; }
 | 
						|
            { command = "floating enable"; criteria = { app_id = "virt-manager"; }; }
 | 
						|
            { command = "floating enable"; criteria = { title = "^OpenSSH Authentication"; }; }
 | 
						|
            { command = "floating enable"; criteria = { class = "pop-up"; }; }
 | 
						|
        ];
 | 
						|
        
 | 
						|
        bars = [
 | 
						|
            { command = "${pkgs.waybar}/bin/waybar"; }
 | 
						|
        ];
 | 
						|
 | 
						|
        defaultWorkspace = "workspace number 2";
 | 
						|
 | 
						|
        keybindings = 
 | 
						|
          let
 | 
						|
            mod = config.wayland.windowManager.sway.config.modifier;
 | 
						|
            alt = "Mod1";
 | 
						|
            left = config.wayland.windowManager.sway.config.left;
 | 
						|
            down = config.wayland.windowManager.sway.config.down;
 | 
						|
            up = config.wayland.windowManager.sway.config.up;
 | 
						|
            right = config.wayland.windowManager.sway.config.right;
 | 
						|
          in
 | 
						|
          {
 | 
						|
            "${mod}+Escape" = "exec swaymsg exit";     # Exit Sway
 | 
						|
            "${mod}+Return" = "exec ${terminal}";      # Open terminal
 | 
						|
            "${mod}+d" = "exec ${menu}";           # Open menu
 | 
						|
            "${mod}+l" = "exec ${pkgs.swaylock}/bin/swaylock"; # Lock Screen
 | 
						|
 | 
						|
            "${mod}+r" = "reload";                     # Reload environment
 | 
						|
            "${mod}+q" = "kill";                       # Kill container
 | 
						|
 | 
						|
            "${mod}+Shift+f" = "exec ${pkgs.pcmanfm}/bin/pcmanfm"; # File Manager
 | 
						|
 | 
						|
 | 
						|
            "${alt}+${left}" = "workspace prev_on_output";         # Navigate to previous or next workspace on output if it exists
 | 
						|
            "${alt}+${right}" = "workspace next_on_output";
 | 
						|
            "${alt}+Shift+${left}" = "move container to workspace prev, workspace prev";    # Move container to next available workspace and focus
 | 
						|
            "${alt}+Shift+${right}" = "move container to workspace next, workspace next";
 | 
						|
 | 
						|
            "XF86TouchpadToggle" = "input type:touchpad events toggle enabled disabled";
 | 
						|
            "XF86AudioPlay" = "exec playerctl play-pause";
 | 
						|
            "XF86AudioNext" = "exec playerctl next";
 | 
						|
            "XF86AudioPrev" = "exec playerctl previous";
 | 
						|
            "XF86AudioStop" = "exec playerctl stop";
 | 
						|
  
 | 
						|
            # Sink volume raise optionally with --device
 | 
						|
            "XF86AudioRaiseVolume" = "exec swayosd-client --output-volume raise";
 | 
						|
            "XF86AudioLowerVolume" = "exec swayosd-client --output-volume lower";
 | 
						|
            # Sink volume toggle mute
 | 
						|
            "XF86AudioMute" = "exec swayosd-client --output-volume mute-toggle";
 | 
						|
            # Source volume toggle mute
 | 
						|
            "XF86AudioMicMute" = "exec swayosd-client --input-volume mute-toggle";
 | 
						|
            
 | 
						|
            # Capslock (If you don't want to use the backend)
 | 
						|
            #bindsym --release Caps_Lock exec swayosd-client --caps-lock;
 | 
						|
            
 | 
						|
            # Brightness raise
 | 
						|
            "XF86MonBrightnessUp" = "exec swayosd-client --brightness raise";
 | 
						|
            # Brightness lower
 | 
						|
            "XF86MonBrightnessDown" = "exec swayosd-client --brightness lower";
 | 
						|
 | 
						|
 | 
						|
            "${mod}+${left}" = "focus left";
 | 
						|
            "${mod}+${down}" = "focus down";
 | 
						|
            "${mod}+${up}" = "focus up";
 | 
						|
            "${mod}+${right}" = "focus right";
 | 
						|
  
 | 
						|
            "${mod}+Shift+${left}" = "move left";
 | 
						|
            "${mod}+Shift+${down}" = "move down";
 | 
						|
            "${mod}+Shift+${up}" = "move up";
 | 
						|
            "${mod}+Shift+${right}" = "move right";
 | 
						|
  
 | 
						|
            "${mod}+${alt}+${left}" = "resize grow width 10px";
 | 
						|
            "${mod}+${alt}+${down}" = "resize shrink height 10px";
 | 
						|
            "${mod}+${alt}+${up}" = "resize grow height 10px";
 | 
						|
            "${mod}+${alt}+${right}" = "resize shrink width 10px";
 | 
						|
  
 | 
						|
            "${mod}+1" = "workspace number 1";
 | 
						|
            "${mod}+2" = "workspace number 2";
 | 
						|
            "${mod}+3" = "workspace number 3";
 | 
						|
            "${mod}+4" = "workspace number 4";
 | 
						|
            "${mod}+5" = "workspace number 5";
 | 
						|
            "${mod}+6" = "workspace number 6";
 | 
						|
            "${mod}+7" = "workspace number 7";
 | 
						|
            "${mod}+8" = "workspace number 8";
 | 
						|
            "${mod}+9" = "workspace number 9";
 | 
						|
            "${mod}+0" = "workspace number 10";
 | 
						|
  
 | 
						|
            "${mod}+Shift+1" = "move container to workspace number 1";
 | 
						|
            "${mod}+Shift+2" = "move container to workspace number 2";
 | 
						|
            "${mod}+Shift+3" = "move container to workspace number 3";
 | 
						|
            "${mod}+Shift+4" = "move container to workspace number 4";
 | 
						|
            "${mod}+Shift+5" = "move container to workspace number 5";
 | 
						|
            "${mod}+Shift+6" = "move container to workspace number 6";
 | 
						|
            "${mod}+Shift+7" = "move container to workspace number 7";
 | 
						|
            "${mod}+Shift+8" = "move container to workspace number 8";
 | 
						|
            "${mod}+Shift+9" = "move container to workspace number 9";
 | 
						|
            "${mod}+Shift+0" = "move container to workspace number 10";
 | 
						|
  
 | 
						|
            "${mod}+Tab" = "workspace next";
 | 
						|
            "${mod}+Alt+Tab" = "workspace prev";
 | 
						|
 | 
						|
            "${mod}+k" = "splith";
 | 
						|
            "${mod}+v" = "splitv";
 | 
						|
  
 | 
						|
            "${mod}+b" = "layout stacking";
 | 
						|
            "${mod}+w" = "layout tabbed";
 | 
						|
            "${mod}+p" = "layout toggle split";
 | 
						|
  
 | 
						|
            "${mod}+f" = "fullscreen";
 | 
						|
            "${mod}+Shift+space" = "floating toggle";
 | 
						|
            "${mod}+h" = "focus mode_toggle";
 | 
						|
            "${mod}+a" = "focus parent";
 | 
						|
  
 | 
						|
            "${mod}+Shift+minus" = "move scratchpad";
 | 
						|
            "${mod}+minus" = "scratchpad show";
 | 
						|
        };
 | 
						|
     };
 | 
						|
    systemd.enable = true;
 | 
						|
    wrapperFeatures.gtk = true;
 | 
						|
    extraSessionCommands = ''
 | 
						|
      export MOZ_ENABLE_WAYLAND="1";
 | 
						|
      export MOZ_WEBRENDER="1";
 | 
						|
      export MOZ_USE_XINPUT2="2";
 | 
						|
      export MOZ_DBUS_REMOTE="1";
 | 
						|
      export WLR_RENDERER="vulkan";
 | 
						|
      export LIBVA_DRIVER_NAME="iHD";
 | 
						|
      export VDPAU_DRIVER="iHD";
 | 
						|
      export XDG_SESSION_TYPE="wayland";
 | 
						|
      export XDG_CURRENT_DESKTOP="sway";
 | 
						|
      #export QT_QPA_PLATFORMTHEME="wayland-egl";
 | 
						|
      export QT_QPA_PLATFORMTHEME="qt6ct";
 | 
						|
      export GST_VAAPI_ALL_DRIVERS="1";
 | 
						|
      export GTK_THEME="Arc";
 | 
						|
      export _JAVA_AWT_WM_NONREPARENTING="1";
 | 
						|
      #export LIBCL_ALWAYS_SOFTWARE="1";       # For applications in VM like alacritty to work
 | 
						|
      #export WLR_NO_HARDWARE_CURSORS="1";     # For cursor in VM
 | 
						|
    '';
 | 
						|
 | 
						|
    extraConfig = ''
 | 
						|
        set $output-primary DP-2
 | 
						|
        set $output-secondary DP-3
 | 
						|
 | 
						|
        workspace 1 output $output-secondary
 | 
						|
        workspace 2 output $output-primary
 | 
						|
        workspace 3 output $output-secondary
 | 
						|
    '';
 | 
						|
  };
 | 
						|
 | 
						|
  programs = {
 | 
						|
    swaylock = {
 | 
						|
      enable = true;
 | 
						|
      settings = {
 | 
						|
          color = "000000";
 | 
						|
          image = "$HOME/.config/lockwall"; 
 | 
						|
          indicator-caps-lock = true;
 | 
						|
          show-keyboard-layout = true;
 | 
						|
      };
 | 
						|
    };
 | 
						|
    rofi = {
 | 
						|
        enable = true;
 | 
						|
        package = pkgs.rofi-wayland;
 | 
						|
        extraConfig = {
 | 
						|
            modi = "window,drun,ssh";
 | 
						|
            kb-primary-paste = "Control+V,Shift+Insert";
 | 
						|
            kb-secondary-paste = "Control+v,Insert";
 | 
						|
        };
 | 
						|
        font = "Cascadia Code";
 | 
						|
        location = "top-left";
 | 
						|
        plugins = [
 | 
						|
          pkgs.rofi-calc
 | 
						|
          pkgs.rofi-bluetooth
 | 
						|
          pkgs.pinentry-rofi
 | 
						|
        ];
 | 
						|
        terminal = "${pkgs.alacritty}/bin/alacritty";
 | 
						|
        theme = "arthur";
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  services = {
 | 
						|
    swayidle = {
 | 
						|
      enable = true;
 | 
						|
      events = [
 | 
						|
        { event = "before-sleep"; command = "${pkgs.swaylock}/bin/swaylock"; }
 | 
						|
        { event = "lock"; command = "${pkgs.swaylock}/bin/swaylock -fF"; }
 | 
						|
        { event = "after-resume"; command = "${pkgs.sway}/bin/swaymsg 'output * dpms on'"; }
 | 
						|
        { event = "unlock"; command = "${pkgs.sway}/bin/swaymsg 'output * dpms on'"; }
 | 
						|
        ];
 | 
						|
      timeouts = [
 | 
						|
        { timeout = 300; command = "${pkgs.swaylock}/bin/swaylock -fF"; }
 | 
						|
        { timeout = 600; command = "${pkgs.sway}/bin/swaymsg 'output * dpms off'"; resumeCommand = "${pkgs.sway}/bin/swaymsg 'output * dpms on'"; }
 | 
						|
      ];
 | 
						|
    };
 | 
						|
    swayosd.enable = true;
 | 
						|
  };
 | 
						|
#  qt = {
 | 
						|
#    enable = true;
 | 
						|
#    style.package = [
 | 
						|
#      	pkgs.dracula-theme
 | 
						|
#      	pkgs.dracula-icon-theme
 | 
						|
#	pkgs.catppuccin-kvantum
 | 
						|
#	pkgs.catppuccin-kde
 | 
						|
#	pkgs.catppuccin-gtk
 | 
						|
#	pkgs.qt6Packages.qtstyleplugin-kvantum
 | 
						|
#    ];
 | 
						|
#    style.name = "kvantum";
 | 
						|
#    platformTheme.name = "qtct";
 | 
						|
#  };
 | 
						|
#  xdg.configFile = {
 | 
						|
#    "Kvantum/Catppuccin".source = "${pkgs.catppuccin-kvantum}/share/Kvantum/Catppuccin-Frappe-Blue";
 | 
						|
#    "Kvantum/kvantum.kvconfig".text = "[General]\ntheme=Catppuccin-Frappe-Blue";
 | 
						|
#  };
 | 
						|
 | 
						|
}
 |