~ruther/nixos-config

2d5802f3b180217c2653ff1dcccf852aea34f569 — Frantisek Bohacek 11 months ago c691a94
feat: use custom session start script instead of DM
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=$!
      '';
    }];
  };
}

Do not follow this link