M home/modules/profiles/desktop/default.nix => home/modules/profiles/desktop/default.nix +62 -2
@@ 1,8 1,9 @@
-{ config, lib, ... }:
+{ config, lib, pkgs, ... }:
{
imports = [
./qtile
+ ./dwl
./gnome.nix
];
@@ 13,6 14,65 @@
};
config = lib.mkIf config.profiles.desktop.enable {
- # TODO?
+ home.file.".start-session".source = pkgs.writeShellScript "start-session" ''
+ sessions=($(ls ~/.sessions))
+ session_indices=(''${!sessions[@]})
+
+ timeout=3
+ selected="start-dwl" # default
+
+ echo "Default session to start is $selected"
+
+ echo "Available sessions:"
+ for i in ''${!sessions[@]}; do
+ echo " $((i+1))) ''${sessions[$i]}"
+ done
+ echo " q) Enter tty."
+
+ echo -n "Choose session to start: "
+ read -t"$timeout" -n1 user_input
+ echo
+
+ if [[ $user_input == "q" ]]; then
+ exit
+ elif [[ $user_input ]]; then
+ user_input=$((user_input-1))
+ echo $user_input
+ echo ''${session_indices[@]}
+ if [[ " ''${session_indices[@]} " =~ " $user_input " ]]; then
+ selected="''${sessions[$user_input]}"
+ echo "Got $user_input. Going to start $selected"
+ else
+ echo "Got unknown option. Exiting."
+ exit
+ fi
+ else
+ echo "Got no input, starting $selected"
+ fi
+
+ echo "Going to start $selected"
+
+ exec "~/.sessions/$selected"
+
+ '';
+
+ programs = {
+ bash = {
+ enable = true;
+ profileExtra = ''
+ if [[ "$(tty)" == "/dev/tty1" && "$(id -u)" != 0 ]]; then
+ ~/.start-session
+ fi
+ '';
+ };
+ zsh = {
+ enable = true;
+ profileExtra = ''
+ if [[ "$(tty)" == "/dev/tty1" && "$(id -u)" != 0 ]]; then
+ ~/.start-session
+ fi
+ '';
+ };
+ };
};
}
M home/modules/profiles/desktop/gnome.nix => home/modules/profiles/desktop/gnome.nix +17 -1
@@ 1,4 1,4 @@
-{ config, lib, ... }:
+{ config, lib, pkgs, ... }:
{
options = {
@@ 8,6 8,22 @@
};
config = lib.mkIf config.profiles.desktop.gnome.enable {
+ profiles.desktop.enable = true;
+
+ home.file.".sessions/start-gnome".source = pkgs.writeShellApplication {
+ name = "start-gnome";
+ runtimeInputs = [
+ pkgs.xorg.xinit
+ ];
+ text = ''
+ startx ${pkgs.writeShellScript "gnome-internal" ''
+ gnome-session
+ pid=$!
+ wait $pid
+ systemctl stop --user graphical-session.target
+ ''}
+ '';
+ } + "/bin/start-gnome";
dconf.settings = {
"org/gnome/shell" = {
M home/modules/profiles/desktop/qtile/config/autostart.sh => home/modules/profiles/desktop/qtile/config/autostart.sh +2 -1
@@ 1,6 1,7 @@
#!/usr/bin/env sh
-systemctl start --user wm-services.target
+# systemctl start --user wm-services.target
+systemctl start --user xorg-wm-services.target
# Browser
firefox &
M home/modules/profiles/desktop/qtile/default.nix => home/modules/profiles/desktop/qtile/default.nix +16 -1
@@ 23,7 23,7 @@ let
startup = {
apps = config.home-config.startup.apps;
hooks = [
- "systemctl start --user wm-services.target"
+ "systemctl start --user xorg-wm-services.target"
];
};
};
@@ 41,11 41,26 @@ in {
};
config = lib.mkIf config.profiles.desktop.qtile.enable {
+ profiles.desktop.enable = true;
home.packages = [
pkgs.ksnip
];
+ home.file.".sessions/start-qtile".source = pkgs.writeShellApplication {
+ name = "start-qtile";
+ runtimeInputs = [
+ pkgs.xorg.xinit
+ ];
+ text = ''
+ startx ${pkgs.writeShellScript "qtile-internal" ''
+ autorandr -c
+ qtile start -b x11
+ systemctl stop --user graphical-session.target
+ ''}
+ '';
+ } + "/bin/start-qtile";
+
# xdg.configFile."qtile/config.py".text = ''
# import sys
# sys.path.insert(0, "${./config}")
M home/modules/profiles/desktop/qtile/services.nix => home/modules/profiles/desktop/qtile/services.nix +21 -3
@@ 16,6 16,7 @@ in {
services = { # Applets
network-manager-applet.enable = true; # Network
+ blueman-applet.enable = true;
autorandr.enable = true;
dunst = {
@@ 140,10 141,19 @@ in {
};
xdg.dataFile."dbus-1/services/org.knopwob.dunst.service".source = "${pkgs.dunst}/share/dbus-1/services/org.knopwob.dunst.service";
+ systemd.user.targets.xorg-wm-services = {
+ Unit = {
+ Description = "A target that is enabled when starting Qtile";
+ Requires = [ "graphical-session.target" "wm-services.target" ];
+ PartOf = [ "graphical-session.target" ];
+ };
+ };
+
systemd.user.targets.wm-services = {
Unit = {
Description = "A target that is enabled when starting Qtile";
Requires = [ "graphical-session.target" ];
+ PartOf = [ "graphical-session.target" ];
};
};
@@ 171,11 181,19 @@ in {
Install.WantedBy = lib.mkForce [ "wm-services.target" ];
};
- autorandr = lib.mkIf config.services.autorandr.enable {
- Unit.PartOf = lib.mkForce [ "wm-services.target" ];
+ blueman-applet = lib.mkIf config.services.network-manager-applet.enable {
+ Unit = {
+ After = lib.mkForce [];
+ PartOf = lib.mkForce [ "wm-services.target" ];
+ };
Install.WantedBy = lib.mkForce [ "wm-services.target" ];
};
+ autorandr = lib.mkIf config.services.autorandr.enable {
+ Unit.PartOf = lib.mkForce [ "xorg-wm-services.target" ];
+ Install.WantedBy = lib.mkForce [ "xorg-wm-services.target" ];
+ };
+
dunst = lib.mkIf config.services.dunst.enable {
Unit = {
PartOf = lib.mkForce [ "wm-services.target" ];
@@ 211,7 229,7 @@ in {
redshift = lib.mkIf config.services.redshift.enable {
Unit = {
- PartOf = lib.mkForce [ "wm-services.target" ];
+ PartOf = lib.mkForce [ "xorg-wm-services.target" ];
};
Install = {
WantedBy = lib.mkForce [ "wm-services.target" ];
M nixos/hosts/configuration.nix => nixos/hosts/configuration.nix +2 -0
@@ 6,6 6,8 @@
../modules
];
+ services.xserver.displayManager.startx.enable = true;
+
home-manager.useUserPackages = true;
home-manager.useGlobalPkgs = true;
home-manager.extraSpecialArgs = {
M nixos/modules/profiles/desktop/default.nix => nixos/modules/profiles/desktop/default.nix +1 -1
@@ 23,7 23,7 @@
xserver = {
enable = true;
- displayManager.gdm.enable = true;
+ # displayManager.gdm.enable = true;
xkb = {
layout = "us,cz"; # Keyboard layout & €-sign
M nixos/modules/profiles/desktop/qtile.nix => nixos/modules/profiles/desktop/qtile.nix +23 -3
@@ 8,6 8,15 @@ let
ppkgs.pyudev
ppkgs.pydbus
];
+ finalPackage = pkgs.qtile-unwrapped.overridePythonAttrs(oldAttrs: {
+ propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ pythonEnvPackages pkgs.python3Packages;
+ passthru.providedSessions = [ "qtile" "qtile-wayland" ];
+ postInstall = (oldAttrs.postInstall or "") + ''
+ mkdir -p $out/share/xsessions $out/share/wayland-sessions
+ cp resources/qtile-wayland.desktop $out/share/wayland-sessions
+ cp resources/qtile.desktop $out/share/xsessions
+ '';
+ });
in {
options = {
profiles.desktop.qtile = {
@@ 21,11 30,22 @@ in {
services.xserver.windowManager.qtile = {
enable = true;
- package = pkgs.qtile-unwrapped.overridePythonAttrs(oldAttrs: {
- propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ pythonEnvPackages pkgs.python3Packages;
- });
+ package = finalPackage;
extraPackages = pythonEnvPackages;
};
+
+ # xdg.portal.wlr.enable = true;
+ # xdg.portal.config.qtile.default = lib.mkDefault [ "wlr" "gtk" ];
+
+ services.displayManager.sessionPackages = [ finalPackage ];
+
+ services.xserver.windowManager.session = [{
+ name = "qtile-wayland";
+ start = ''
+ ${finalPackage}/bin/qtile start -b wayland &
+ waitPID=$!
+ '';
+ }];
};
}