diff --git a/config/etc.nix b/config/etc.nix index 2133839..e52cdd0 100644 --- a/config/etc.nix +++ b/config/etc.nix @@ -6,6 +6,7 @@ with lib; environment.etc = mkIf (elem "etcfiles" config.machine.conffiles) { "i3/config".source = ./etc/i3/config; "i3/py3status".source = ./etc/i3/py3status; + "sway/config".source = mkDefault ./etc/sway/config; "mpv/input.conf".source = ./etc/mpv/input.conf; "mpv/mpv.conf".source = ./etc/mpv/mpv.conf; "youtube-dl.conf".source = ./etc/youtube-dl.conf; diff --git a/config/etc/sway/config b/config/etc/sway/config new file mode 100644 index 0000000..115cac4 --- /dev/null +++ b/config/etc/sway/config @@ -0,0 +1,217 @@ +# Read `man 5 sway` for a complete reference. + +### Variables +# +# Logo key. Use Mod1 for Alt. +set $mod Mod4 +# Home row direction keys, like vim +set $left h +set $down j +set $up k +set $right l +# Your preferred terminal emulator +set $term gnome-terminal +# Your preferred application launcher +# Note: it's recommended that you pass the final command to sway +set $menu dmenu_path | dmenu | xargs swaymsg exec + +### Output configuration +# +# Default wallpaper +output * bg ~/Pictures/wallpaper.jpg fill +output eDP-1 scale 1.5 +# +# Example configuration: +# +# output HDMI-A-1 resolution 1920x1080 position 1920,0 +# +# You can get the names of your outputs by running: swaymsg -t get_outputs + +### Idle configuration +# +# Example configuration: +# +# exec swayidle -w \ +# timeout 300 'swaylock -f -c 000000' \ +# timeout 600 'swaymsg "output * dpms off"' \ +# resume 'swaymsg "output * dpms on"' \ +# before-sleep 'swaylock -f -c 000000' +# +# This will lock your screen after 300 seconds of inactivity, then turn off +# your displays after another 300 seconds, and turn your screens back on when +# resumed. It will also lock your screen before your computer goes to sleep. + +### Input configuration +# You can get the names of your inputs by running: swaymsg -t get_inputs xkb_options grp:alt_shift_toggle# Read `man 5 sway-input` for more information about this section. +input "1118:2496:Microsoft_Surface_Type_Cover_Touchpad" { + dwt enabled + tap enabled + natural_scroll disabled + middle_emulation enabled +} + +input "1118:2496:Microsoft_Surface_Type_Cover_Keyboard" { + xkb_layout de + xkb_variant nodeadkeys +} + +### Key bindings +# +# Basics: +# +# start a terminal +bindsym $mod+Return exec $term + +# kill focused window +bindsym $mod+Shift+q kill + +# start your launcher +bindsym $mod+d exec $menu + +# Drag floating windows by holding down $mod and left mouse button. +# Resize them with right mouse button + $mod. +# Despite the name, also works for non-floating windows. +# Change normal to inverse to use left mouse button for resizing and right +# mouse button for dragging. +floating_modifier $mod normal + +# reload the configuration file +bindsym $mod+Shift+c reload + +# exit sway (logs you out of your Wayland session) +bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit' +# +# Moving around: +# +# Move your focus around +bindsym $mod+$left focus left +bindsym $mod+$down focus down +bindsym $mod+$up focus up +bindsym $mod+$right focus right +# or use $mod+[up|down|left|right] +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +# _move_ the focused window with the same, but add Shift +bindsym $mod+Shift+$left move left +bindsym $mod+Shift+$down move down +bindsym $mod+Shift+$up move up +bindsym $mod+Shift+$right move right +# ditto, with arrow keys +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right +# +# Workspaces: +# +# switch to workspace +bindsym $mod+1 workspace 1 +bindsym $mod+2 workspace 2 +bindsym $mod+3 workspace 3 +bindsym $mod+4 workspace 4 +bindsym $mod+5 workspace 5 +bindsym $mod+6 workspace 6 +bindsym $mod+7 workspace 7 +bindsym $mod+8 workspace 8 +bindsym $mod+9 workspace 9 +bindsym $mod+0 workspace 10 +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace 1 +bindsym $mod+Shift+2 move container to workspace 2 +bindsym $mod+Shift+3 move container to workspace 3 +bindsym $mod+Shift+4 move container to workspace 4 +bindsym $mod+Shift+5 move container to workspace 5 +bindsym $mod+Shift+6 move container to workspace 6 +bindsym $mod+Shift+7 move container to workspace 7 +bindsym $mod+Shift+8 move container to workspace 8 +bindsym $mod+Shift+9 move container to workspace 9 +bindsym $mod+Shift+0 move container to workspace 10 +# Note: workspaces can have any name you want, not just numbers. +# We just use 1-10 as the default. +# +# Layout stuff: +# +# You can "split" the current object of your focus with +# $mod+b or $mod+v, for horizontal and vertical splits +# respectively. +bindsym $mod+b splith +bindsym $mod+v splitv + +# Switch the current container between different layout styles +bindsym $mod+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+e layout toggle split + +# Make the current focus fullscreen +bindsym $mod+f fullscreen + +# Toggle the current focus between tiling and floating mode +bindsym $mod+Shift+space floating toggle + +# Swap focus between the tiling area and the floating area +bindsym $mod+space focus mode_toggle + +# move focus to the parent container +bindsym $mod+a focus parent +# +# Scratchpad: +# +# Sway has a "scratchpad", which is a bag of holding for windows. +# You can send windows there and get them back later. + +# Move the currently focused window to the scratchpad +bindsym $mod+p move scratchpad + +# Show the next scratchpad window or hide the focused scratchpad window. +# If there are multiple scratchpad windows, this command cycles through them. +bindsym $mod+Shift+p scratchpad show +# +# Resizing containers: +# +mode "resize" { + # left will shrink the containers width + # right will grow the containers width + # up will shrink the containers height + # down will grow the containers height + bindsym $left resize shrink width 10px + bindsym $down resize grow height 10px + bindsym $up resize shrink height 10px + bindsym $right resize grow width 10px + + # ditto, with arrow keys + bindsym Left resize shrink width 10px + bindsym Down resize grow height 10px + bindsym Up resize shrink height 10px + bindsym Right resize grow width 10px + + # return to default mode + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+r mode "resize" + +# +# Status Bar: +# +# Read `man 5 sway-bar` for more information about this section. +bar { + position top + + # When the status_command prints a new line to stdout, swaybar updates. + # The default just shows the current date and time. + #status_command while date +'%Y-%m-%d %l:%M:%S %p'; do sleep 1; done + status_command i3status + #status_command py3status -c /etc/i3/py3status + colors { + separator #586e75 + background #002b36 + statusline #aea79f + focused_workspace #586e75 #586e75 #ffffff + active_workspace #073642 #073642 #ffffff + inactive_workspace #002b36 #002b36 #aea79f + urgent_workspace #77216f #77216f #ffffff + } +} diff --git a/config/fonts.nix b/config/fonts.nix index 567af7e..a518041 100644 --- a/config/fonts.nix +++ b/config/fonts.nix @@ -14,8 +14,12 @@ mkIf (elem "fonts" config.machine.conffiles) { fonts = with pkgs; [ corefonts # Microsoft free fonts dejavu_fonts + font-awesome-ttf inconsolata # monospaced + noto-fonts noto-fonts-cjk + noto-fonts-emoji + noto-fonts-extra powerline-fonts source-han-sans-japanese source-han-sans-korean diff --git a/machines/Lilim/hardware-configuration.nix b/machines/Lilim/hardware-configuration.nix index fbf3081..a9e507b 100644 --- a/machines/Lilim/hardware-configuration.nix +++ b/machines/Lilim/hardware-configuration.nix @@ -36,7 +36,7 @@ in { enableKSM = true; opengl = { driSupport = true; - extraPackages = with pkgs; [ intel-media-driver libvdpau-va-gl vaapiIntel vaapiVdpau ]; + extraPackages = with pkgs; [ intel-media-driver libvdpau-va-gl vaapiIntel vaapiVdpau intel-media-driver ]; driSupport32Bit = true; extraPackages32 = with pkgs.pkgsi686Linux; [ libvdpau-va-gl vaapiIntel vaapiVdpau ]; }; diff --git a/machines/Lilim/options.nix b/machines/Lilim/options.nix index f5eb911..1f52138 100644 --- a/machines/Lilim/options.nix +++ b/machines/Lilim/options.nix @@ -31,7 +31,7 @@ with lib; ]; services = [ "containers" - "xserver" + "desktop" "docker" "udev" "cups" @@ -43,6 +43,7 @@ with lib; allowedUDPPortRanges = [ { from = 1714; to = 1764; } ]; allowedTCPPortRanges = [ { from = 1714; to = 1764; } ]; }; + desktop.wms = [ "i3" ]; }; config.system.copySysConf = { diff --git a/options/machine.nix b/options/machine.nix index 6974960..f795e45 100644 --- a/options/machine.nix +++ b/options/machine.nix @@ -73,5 +73,12 @@ with lib; ''; }; }; + desktop.wms = mkOption { + type = types.listOf types.string; + default = []; + description = '' + The list of wms to be enabled. + ''; + }; }; } diff --git a/services/default.nix b/services/default.nix index b455f70..1584c78 100644 --- a/services/default.nix +++ b/services/default.nix @@ -14,6 +14,6 @@ ./nginx.nix ./openssh.nix ./udev.nix - ./xserver.nix + ./desktop.nix ]; } diff --git a/services/desktop.nix b/services/desktop.nix new file mode 100644 index 0000000..38474f7 --- /dev/null +++ b/services/desktop.nix @@ -0,0 +1,59 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.machine; + ifelse = a: b: c: if a then b else c; +in mkIf (elem "desktop" cfg.services) { + programs.sway = mkIf (elem "sway" cfg.desktop.wms) # (import ./desktop/sway.nix { inherit pkgs; }); +{ + enable = true; + extraPackages = with pkgs; [ + file i3status dmenu + qt5.qtwayland + grim slurp + swaylock + swayidle + light + mako + wl-clipboard + wf-recorder + ]; + extraSessionCommands = '' + export GDK_BACKEND=wayland + export CLUTTER_BACKEND=wayland + export SDL_VIDEODRIVER=wayland + # needs qt5.qtwayland in systemPackages + export QT_QPA_PLATFORM=wayland-egl + export QT_WAYLAND_FORCE_DPI=physical + 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 + ''; + }; + + services.gnome3.gvfs.enable = true; + environment.variables.GIO_EXTRA_MODULES = [ "${pkgs.gnome3.gvfs}/lib/gio/modules" ]; + services.xserver = { + enable = !(elem "sway" cfg.desktop.wms); + layout = "de"; + videoDrivers = [ "intel" ]; + windowManager = mkIf (cfg.desktop.wms != []) { + i3 = mkIf (elem "i3" cfg.desktop.wms) (import ./desktop/i3.nix { inherit pkgs; }); + default = elemAt cfg.desktop.wms 0; + }; + # add switch for Lilim + libinput = { + enable = true; + tapping = true; + disableWhileTyping = false; + naturalScrolling = false; + horizontalScrolling = true; + }; + # Still waiting for streamlined dpi settings... will write a propper solution once it's done >.< + # see https://github.com/NixOS/nixpkgs/pull/25892 + dpi = ifelse (cfg.hostName == "Lilim") 192 null; + }; +} diff --git a/services/desktop/gnome3.nix b/services/desktop/gnome3.nix new file mode 100644 index 0000000..e69de29 diff --git a/services/desktop/i3.nix b/services/desktop/i3.nix new file mode 100644 index 0000000..02916ca --- /dev/null +++ b/services/desktop/i3.nix @@ -0,0 +1,16 @@ +{ pkgs }: + +#with lib; + +#mkIf (elem "i3" cfg.xserver.wms) { +# i3 = +{ + enable = true; + configFile = ../../config/etc/i3/config; + extraPackages = with pkgs; [ + dmenu + file + i3lock + i3status + ]; +} diff --git a/services/desktop/sway.nix b/services/desktop/sway.nix new file mode 100644 index 0000000..e3cca98 --- /dev/null +++ b/services/desktop/sway.nix @@ -0,0 +1,29 @@ +{ pkgs }: + +{ + enable = true; + extraPackages = with pkgs; [ + xwayland + file i3status dmenu + qt5.qtwayland + grim slurp + swaylock + swayidle + light + mako + wl-clipboard + wf-recorder + ]; + extraSessionCommands = '' + export GDK_BACKEND=wayland + export CLUTTER_BACKEND=wayland + export SDL_VIDEODRIVER=wayland + # needs qt5.qtwayland in systemPackages + export QT_QPA_PLATFORM=wayland-egl + export QT_WAYLAND_FORCE_DPI=physical + 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 + ''; + } diff --git a/services/xserver.nix b/services/xserver.nix deleted file mode 100644 index 6dd035f..0000000 --- a/services/xserver.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; - -mkIf (elem "xserver" config.machine.services) { - services.gnome3.gvfs.enable = true; - environment.variables.GIO_EXTRA_MODULES = [ "${pkgs.gnome3.gvfs}/lib/gio/modules" ]; - services.xserver = { - enable = true; - layout = "de"; - videoDrivers = [ "intel" ]; - windowManager = { - i3 = { - enable = true; - configFile = ../config/etc/i3/config; - extraPackages = with pkgs; [ - dmenu - file - i3lock - i3status - ]; - }; - default = "i3"; - }; - # add switch for Lilim - libinput = { - enable = true; - tapping = true; - disableWhileTyping = false; - naturalScrolling = false; - horizontalScrolling =true; - }; - dpi = 192; - }; -}