diff options
Diffstat (limited to 'lass')
| -rw-r--r-- | lass/1systems/helios/config.nix | 11 | ||||
| -rw-r--r-- | lass/1systems/prism/config.nix | 2 | ||||
| -rw-r--r-- | lass/2configs/baseX.nix | 40 | ||||
| -rw-r--r-- | lass/2configs/browsers.nix | 43 | ||||
| -rw-r--r-- | lass/2configs/copyq.nix | 4 | ||||
| -rw-r--r-- | lass/2configs/dcso-dev.nix | 48 | ||||
| -rw-r--r-- | lass/2configs/hw/gpd-pocket.nix | 20 | ||||
| -rw-r--r-- | lass/2configs/mail.nix | 1 | ||||
| -rw-r--r-- | lass/2configs/repo-sync.nix | 25 | ||||
| -rw-r--r-- | lass/2configs/urxvt.nix | 42 | ||||
| -rw-r--r-- | lass/2configs/wine.nix | 22 | ||||
| -rw-r--r-- | lass/2configs/xresources.nix | 63 | ||||
| -rw-r--r-- | lass/3modules/default.nix | 1 | ||||
| -rw-r--r-- | lass/3modules/screenlock.nix | 2 | ||||
| -rw-r--r-- | lass/3modules/xresources.nix | 15 | ||||
| -rw-r--r-- | lass/3modules/xserver/default.nix | 101 | ||||
| -rw-r--r-- | lass/3modules/xserver/xserver.conf.nix | 40 | ||||
| -rw-r--r-- | lass/5pkgs/default.nix | 5 | ||||
| -rw-r--r-- | lass/5pkgs/xmonad-lass.nix | 41 | ||||
| -rw-r--r-- | lass/source.nix | 2 | 
20 files changed, 345 insertions, 183 deletions
| diff --git a/lass/1systems/helios/config.nix b/lass/1systems/helios/config.nix index eb45d92ec..b14ef2a3e 100644 --- a/lass/1systems/helios/config.nix +++ b/lass/1systems/helios/config.nix @@ -13,6 +13,9 @@ with import <stockholm/lib>;      # TODO fix krebs.git.rules.[definition 2-entry 2].lass not defined      #<stockholm/lass/2configs/git.nix>      <stockholm/lass/2configs/dcso-vpn.nix> +    <stockholm/lass/2configs/virtualbox.nix> +    <stockholm/lass/2configs/dcso-dev.nix> +    <stockholm/lass/2configs/steam.nix>      { # automatic hardware detection        boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];        boot.kernelModules = [ "kvm-intel" ]; @@ -60,6 +63,13 @@ with import <stockholm/lib>;          maxTime = 9001;        };      } +    { +      #urban terror port +      krebs.iptables.tables.filter.INPUT.rules = [ +        { predicate = "-p tcp --dport 27960"; target = "ACCEPT"; } +        { predicate = "-p udp --dport 27960"; target = "ACCEPT"; } +      ]; +    }    ];    krebs.build.host = config.krebs.hosts.helios; @@ -91,7 +101,6 @@ with import <stockholm/lib>;    environment.systemPackages = with pkgs; [      ag      vim -    rxvt_unicode      git      rsync      hashPassword diff --git a/lass/1systems/prism/config.nix b/lass/1systems/prism/config.nix index b7f0ea554..b18abf509 100644 --- a/lass/1systems/prism/config.nix +++ b/lass/1systems/prism/config.nix @@ -285,6 +285,8 @@ in {          { predicate = "-p udp --dport 25565"; target = "ACCEPT"; }        ];      } +    <stockholm/krebs/2configs/reaktor-krebs.nix> +    <stockholm/lass/2configs/dcso-dev.nix>    ];    krebs.build.host = config.krebs.hosts.prism; diff --git a/lass/2configs/baseX.nix b/lass/2configs/baseX.nix index 1638264d9..32a9f66cf 100644 --- a/lass/2configs/baseX.nix +++ b/lass/2configs/baseX.nix @@ -7,9 +7,9 @@ in {      ./mpv.nix      ./power-action.nix      ./copyq.nix -    ./xresources.nix      ./livestream.nix      ./dns-stuff.nix +    ./urxvt.nix      {        hardware.pulseaudio = {          enable = true; @@ -41,6 +41,11 @@ in {            default = "-*-clean-*-*-*-*-*-*-*-*-*-*-iso10646-1";          };        }; +      config.services.xresources.resources.X = '' +        *.font:       ${config.lass.fonts.regular} +        *.boldFont:   ${config.lass.fonts.bold} +        *.italicFont: ${config.lass.fonts.italic} +      '';      }    ]; @@ -64,9 +69,11 @@ in {      dic      dmenu      gi +    git-preview      gitAndTools.qgit -    lm_sensors      haskellPackages.hledger +    lm_sensors +    mpv-poll      much      ncdu      nix-repl @@ -74,7 +81,7 @@ in {      pavucontrol      powertop      push -    rxvt_unicode +    rxvt_unicode_with-plugins      screengrab      slock      sxiv @@ -97,26 +104,8 @@ in {      xlibs.fontschumachermisc    ]; +  lass.xserver.enable = true;    services.xserver = { -    enable = true; - -    desktopManager.xterm.enable = false; -    desktopManager.default = "none"; -    displayManager.lightdm.enable = true; -    displayManager.lightdm.autoLogin = { -      enable = true; -      user = "lass"; -    }; -    windowManager.default = "xmonad"; -    windowManager.session = [{ -      name = "xmonad"; -      start = '' -        ${pkgs.xorg.xhost}/bin/xhost +LOCAL: -        ${pkgs.xmonad-lass}/bin/xmonad & -        waitPID=$! -      ''; -    }]; -      layout = "us";      xkbModel = "evdev";      xkbVariant = "altgr-intl"; @@ -127,12 +116,7 @@ in {      HandleLidSwitch=ignore    ''; -  services.xserver.synaptics = { -    enable = true; -    twoFingerScroll = true; -    accelFactor = "0.035"; -  }; -    services.urxvtd.enable = true; +  services.xresources.enable = true;    lass.screenlock.enable = true;  } diff --git a/lass/2configs/browsers.nix b/lass/2configs/browsers.nix index 6c381863c..a858d3fec 100644 --- a/lass/2configs/browsers.nix +++ b/lass/2configs/browsers.nix @@ -5,19 +5,23 @@ let    mainUser = config.users.extraUsers.mainUser; -  browser-select = pkgs.writeScriptBin "browser-select" '' -    BROWSER=$(echo -e "${concatStringsSep "\\n" (attrNames config.lass.browser.paths)}" | ${pkgs.dmenu}/bin/dmenu) +  browser-select = let +    sortedPaths = sort (a: b: a.value.precedence > b.value.precedence) +                       (mapAttrsToList (name: value: { inherit name value; }) +                                       config.lass.browser.paths); +  in pkgs.writeScriptBin "browser-select" '' +    BROWSER=$(echo -e "${concatStringsSep "\\n" (map (getAttr "name") sortedPaths)}" | ${pkgs.dmenu}/bin/dmenu)      case $BROWSER in      ${concatMapStringsSep "\n" (n: '' -      ${n}) -        export BIN=${config.lass.browser.paths.${n}}/bin/${n} +      ${n.name}) +        export BIN=${n.value.path}/bin/${n.name}          ;; -    '') (attrNames config.lass.browser.paths)} +    '') (sortedPaths)}      esac      $BIN "$@"    ''; -  createChromiumUser = name: extraGroups: +  createChromiumUser = name: extraGroups: precedence:      let        bin = pkgs.writeScriptBin name ''          /var/run/wrappers/bin/sudo -u ${name} -i ${pkgs.chromium}/bin/chromium $@ @@ -31,7 +35,7 @@ let          useDefaultShell = true;          createHome = true;        }; -      lass.browser.paths.${name} = bin; +      lass.browser.paths.${name}.path = bin;        security.sudo.extraConfig = ''          ${mainUser.name} ALL=(${name}) NOPASSWD: ALL        ''; @@ -40,7 +44,7 @@ let        ];      }; -  createFirefoxUser = name: extraGroups: +  createFirefoxUser = name: extraGroups: precedence:      let        bin = pkgs.writeScriptBin name ''          /var/run/wrappers/bin/sudo -u ${name} -i ${pkgs.firefox}/bin/firefox $@ @@ -54,7 +58,10 @@ let          useDefaultShell = true;          createHome = true;        }; -      lass.browser.paths.${name} = bin; +      lass.browser.paths.${name} = { +        path = bin; +        inherit precedence; +      };        security.sudo.extraConfig = ''          ${mainUser.name} ALL=(${name}) NOPASSWD: ALL        ''; @@ -79,14 +86,24 @@ in {          type = types.path;        };        options.lass.browser.paths = mkOption { -        type = with types; attrsOf path; +        type = types.attrsOf (types.submodule ({ +          options = { +            path = mkOption { +              type = types.path; +            }; +            precedence = mkOption { +              type = types.int; +              default = 0; +            }; +          }; +        }));        };      } -    ( createFirefoxUser "ff" [ "audio" ] ) -    ( createChromiumUser "cr" [ "video" "audio" ] ) +    ( createFirefoxUser "ff" [ "audio" ] 10 ) +    ( createChromiumUser "cr" [ "video" "audio" ] 9 ) +    ( createChromiumUser "gm" [ "video" "audio" ] 8 )      ( createChromiumUser "wk" [ "video" "audio" ] )      ( createChromiumUser "fb" [ "video" "audio" ] ) -    ( createChromiumUser "gm" [ "video" "audio" ] )      ( createChromiumUser "com" [ "video" "audio" ] )    ];  } diff --git a/lass/2configs/copyq.nix b/lass/2configs/copyq.nix index fa01a99c9..cd10313fc 100644 --- a/lass/2configs/copyq.nix +++ b/lass/2configs/copyq.nix @@ -21,9 +21,9 @@ let  in {    systemd.services.copyq = {      wantedBy = [ "multi-user.target" ]; -    requires = [ "display-manager.service" ]; +    requires = [ "xserver.service" ];      environment = { -      DISPLAY = ":0"; +      DISPLAY = ":${toString config.services.xserver.display}";      };      path = with pkgs; [        qt5.full diff --git a/lass/2configs/dcso-dev.nix b/lass/2configs/dcso-dev.nix new file mode 100644 index 000000000..b7fcc7aab --- /dev/null +++ b/lass/2configs/dcso-dev.nix @@ -0,0 +1,48 @@ +{ config, lib, pkgs, ... }: + +let +  mainUser = config.users.extraUsers.mainUser; +  inherit (import <stockholm/lib>) genid; + +in { +  users.extraUsers = { +    dev = { +      name = "dev"; +      uid = genid "dev"; +      description = "user for collaborative development"; +      home = "/home/dev"; +      useDefaultShell = true; +      createHome = true; +      openssh.authorizedKeys.keys = [ +        config.krebs.users.lass.pubkey +        "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDhQdDQFMxXOjbC+Avx3mlcFHqQpFUk/q9sO6ATA65jCV3YzN11vhZDDv54hABVS2h8TPXs7Lu3PCvK9qouASd2h4Ie9cExUmn50G/iwgFIODsCugVYBzVt1iwaAdwz1Hb9DKYXbVXanzVJjimmrrlQNvsyZg85lcnfyedpPX5ad+4FdSP68LHqEHC18LTitldR6V4P1omaKHlOtVpDgR/72tDgbtNZDBn3EU+TPk9OLTzjc6PinPw4iIvjEfiu14APwXpFDIqT7P7SjOEFpa0v/1z7dhxIy/Z9XbqyEdUfhv3PjZR5K2C+VzR7g6jVEVR2xFId51MpLv/Un4/lalbphBEw3I90Rr8tatOJiFhyrXbaKTcLqp1sIu05OxdPkm3hzfmLIhoKxhaIlXH7WQ9sAqxL1NAQ7O+J6yT4DMnwKzvpkkJjBaGtV84Pp1cccfNRH8XXID3FkWkrUpdgXWBpyLnRq4ilUJTajkU0GSdXkq8kLL3mWg9LPRTg3dmDj61ZB/qhjM61ppwHJvDRN9WI5HruXIU6nOQjh5yE2C/JZfLcsZD4Y1UDBy5/JSZrCVT2sQjFopkkYEkRCbX7oITHOH4iyRdxZkKWLUPboFrcmBpXO+owCEhO4JZrtfFWMC6qM++nrmiZWOrdIOIvdYHWluhKR2shlkisEKQP5pUqkw== markus.hihn@dcso.de" +        "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC1T5+2epslFARSnETdr4wdolA6ocJaD4H9tmz6BZFQKXlwIq+OMp+sSEdwYwW3Lu9+mNbBHPxVVJDWg/We9DXB0ezXPM5Bs1+FcehmkoGwkmgKaFCDt0sL+CfSnog/3wEkN21O/rQxVFqMmiJ7WUDGci6IKCFZ5ZjOsmmfHg5p3LYxU9xv33fNr2v+XauhrGbFtQ7eDz4kSywxN/aw73LN4d8em0V0UV8VPI3Qkw7MamDFwefA+K1TfK8pBzMeruU6N7HLuNkpkAp7kS+K4Zzd72aQtR37a5qMiFUbOxQ9B7iFypuPx0iu6ZwY1s/sM8t3kLmcDJ9O4FOTzlbpneet3as6iJ+Ckr/TlfKor2Tl5pWcXh2FXHoG8VUu5bYmIViJBrKihAlAQfQN0mJ9fdFTnCXVTtbYTy11s4eEVHgUlb7oSpgBnx5bnBONgApbsOX9zyoo8wz8KkZBcf1SQpkV5br8uUAHCcZtHuY6I3kKlv+8lJmgUipiYzMdTi7+dHa49gVEcEKL4ZnJ0msQkl4XT7JjKETLvumC4/TIqVuRu48wuYalkCR9OzxCsTXQ/msBJBztPdYLrEOXVb2HfzuCT+43UuMQ5rP/EoPy0TWQO9BaqfEXqvbOvWjVxj/GMvglQ2ChZTwHxwwTKB8qRVvJLnbZQwizQiSrkzjb6hRJfQ== u0_a165@localhost" +      ]; +      packages = with pkgs; [ +        emacs25-nox + +        (pkgs.symlinkJoin { +          name = "tmux"; +          paths = [ +            (pkgs.writeDashBin "tmux" '' +              exec ${pkgs.tmux}/bin/tmux -f ${pkgs.writeText "tmux.conf" '' +                set-option -g default-terminal screen-256color + +                #use session instead of windows +                bind-key c new-session +                bind-key p switch-client -p +                bind-key n switch-client -n +                bind-key C-s switch-client -l +              ''} "$@" +            '') +            pkgs.tmux +          ]; +        }) +      ]; +    }; +  }; + +  security.sudo.extraConfig = '' +    ${mainUser.name} ALL=(dev) NOPASSWD: ALL +  ''; +} diff --git a/lass/2configs/hw/gpd-pocket.nix b/lass/2configs/hw/gpd-pocket.nix new file mode 100644 index 000000000..e3d212741 --- /dev/null +++ b/lass/2configs/hw/gpd-pocket.nix @@ -0,0 +1,20 @@ +{ pkgs, ... }: + +let +  dummy_firmware = pkgs.writeTextFile { +    name = "brcmfmac4356-pcie.txt"; +    text = builtins.readFile ./brcmfmac4356-pcie.txt; +    destination = "/lib/firmware/brcm/brcmfmac4356-pcie.txt"; +  }; +in { +  hardware.firmware = [ dummy_firmware ]; + +  boot.kernelPackages = pkgs.linuxPackages_4_14; +  boot.kernelParams = [ +    "fbcon=rotate:1" +  ]; +  services.tlp.enable = true; +  services.xserver.displayManager.sessionCommands = '' +    (sleep 2 && ${pkgs.xorg.xrandr}/bin/xrandr --output DSI1 --rotate right) +  ''; +} diff --git a/lass/2configs/mail.nix b/lass/2configs/mail.nix index 91127f737..962efaf3f 100644 --- a/lass/2configs/mail.nix +++ b/lass/2configs/mail.nix @@ -76,6 +76,7 @@ let          "INBOX"     "notmuch://?query=tag:inbox \                       and NOT to:nix-devel\                       and NOT to:shackspace\ +                     and NOT to:security\                       and NOT to:c-base" \          "shack"     "notmuch://?query=to:shackspace"\          "c-base"    "notmuch://?query=to:c-base"\ diff --git a/lass/2configs/repo-sync.nix b/lass/2configs/repo-sync.nix index f3ef23e67..98dbdc227 100644 --- a/lass/2configs/repo-sync.nix +++ b/lass/2configs/repo-sync.nix @@ -22,15 +22,22 @@ let        });      };    in { -    rules = with git; singleton { -      user = with config.krebs.users; [ -        config.krebs.users."${config.networking.hostName}-repo-sync" -        lass -        lass-shodan -      ]; -      repo = [ repo ]; -      perm = push ''refs/*'' [ non-fast-forward create delete merge ]; -    }; +    rules = with git; [ +      { +        user = with config.krebs.users; [ +          config.krebs.users."${config.networking.hostName}-repo-sync" +          lass +          lass-shodan +        ]; +        repo = [ repo ]; +        perm = push ''refs/*'' [ non-fast-forward create delete merge ]; +      } +      { +        user = attrValues config.krebs.users; +        repo = [ repo ]; +        perm = fetch; +      } +    ];      repos."${name}" = repo;    }; diff --git a/lass/2configs/urxvt.nix b/lass/2configs/urxvt.nix index 1358dde7a..ee50b3381 100644 --- a/lass/2configs/urxvt.nix +++ b/lass/2configs/urxvt.nix @@ -1,40 +1,32 @@  { config, pkgs, ... }: - -let -  inherit (config.users.extraUsers) mainUser; - -in +with import <stockholm/lib>;  { -  imports = [ -    ../3modules/urxvtd.nix -    ../3modules/xresources.nix -  ]; - -  services.urxvtd = { -    enable = true; -    users = [ mainUser.name ]; -    urxvtPackage = pkgs.rxvt_unicode_with-plugins; -  }; -  services.xresources.enable = true; +  services.urxvtd.enable = true; +    services.xresources.resources.urxvt = '' -    URxvt*scrollBar:                      false -    URxvt*urgentOnBell:                   true -    URxvt*font:                           -*-clean-*-*-*-*-*-*-*-*-*-*-iso10646-* -    URxvt*boldFont:                       -*-clean-*-*-*-*-*-*-*-*-*-*-iso10646-* +    URxvt*SaveLines: 4096 +    URxvt*scrollBar:            false +    URxvt*urgentOnBell:         true      URxvt.perl-ext-common:      default,clipboard,url-select,keyboard-select -    URxvt.url-select.launcher:  browser-select + +    ${optionalString (hasAttr "browser" config.lass) +      "URxvt.url-select.launcher:  ${config.lass.browser.select}/bin/browser-select" +    } +      URxvt.url-select.underline: true      URxvt.keysym.M-u:           perl:url-select:select_next      URxvt.keysym.M-Escape:      perl:keyboard-select:activate      URxvt.keysym.M-s:           perl:keyboard-select:search -    URxvt.intensityStyles: false +    URxvt.intensityStyles:      false -    URxvt*background:                     #000000 -    URxvt*foreground:                     #ffffff +    URxvt*background:           #000000 +    URxvt*foreground:           #ffffff      !change unreadable blue -    URxvt*color4:                         #268bd2 +    URxvt*color4:               #268bd2 + +    URxvt*color0:               #232342    '';  } diff --git a/lass/2configs/wine.nix b/lass/2configs/wine.nix index 0d2b731ca..d60b1feea 100644 --- a/lass/2configs/wine.nix +++ b/lass/2configs/wine.nix @@ -4,10 +4,6 @@ let    mainUser = config.users.extraUsers.mainUser;  in { -  krebs.per-user.wine.packages = with pkgs; [ -    wine -    #(wineFull.override { wineBuild = "wine64"; }) -  ];    users.users= {      wine = {        name = "wine"; @@ -19,9 +15,27 @@ in {          "video"        ];        createHome = true; +      packages = [ +        pkgs.wine +      ]; +    }; +    wine64 = { +      name = "wine64"; +      description = "user for running wine in 64bit"; +      home = "/home/wine64"; +      useDefaultShell = true; +      extraGroups = [ +        "audio" +        "video" +      ]; +      createHome = true; +      packages = [ +        (pkgs.wine.override { wineBuild = "wineWow"; }) +      ];      };    };    security.sudo.extraConfig = ''      ${mainUser.name} ALL=(wine) NOPASSWD: ALL +    ${mainUser.name} ALL=(wine64) NOPASSWD: ALL    '';  } diff --git a/lass/2configs/xresources.nix b/lass/2configs/xresources.nix deleted file mode 100644 index a3c54f3a1..000000000 --- a/lass/2configs/xresources.nix +++ /dev/null @@ -1,63 +0,0 @@ -{ config, pkgs, ... }: - -with import <stockholm/lib>; - -let - -  xresources = pkgs.writeText "Xresources" '' -    URxvt*scrollBar: false -    URxvt*urgentOnBell: true -    URxvt*SaveLines: 4096 - -    URxvt.font:       ${config.lass.fonts.regular} -    URxvt.boldFont:   ${config.lass.fonts.bold} -    URxvt.italicFont: ${config.lass.fonts.italic} - -    ! ref https://github.com/muennich/urxvt-perls -    URxvt.perl-lib: ${pkgs.urxvt_perls}/lib/urxvt/perl -    URxvt.perl-ext-common:      default,clipboard,url-select,keyboard-select -    ${optionalString (hasAttr "browser" config.lass) -      "URxvt.url-select.launcher:  ${config.lass.browser.select}/bin/browser-select" -    } -    URxvt.url-select.underline: true -    URxvt.keysym.M-u:           perl:url-select:select_next -    URxvt.keysym.M-Escape:      perl:keyboard-select:activate -    URxvt.keysym.M-s:           perl:keyboard-select:search - -    URxvt.intensityStyles: false - -    URxvt*background:    #000000 -    URxvt*foreground:    #d0d7d0 - -    URxvt*cursorColor:   #f042b0 -    URxvt*cursorColor2:  #f0b000 -    URxvt*cursorBlink:   off - -    URxvt*.pointerBlank: true -    URxvt*.pointerBlankDelay: 987654321 -    URxvt*.pointerColor: #f042b0 -    URxvt*.pointerColor2: #050505 - -    URxvt*color0:        #232342 -  ''; - -in { -  systemd.services.xresources = { -    description = "xresources"; -    wantedBy = [ "multi-user.target" ]; -    after = [ "display-manager.service" ]; - -    environment = { -      DISPLAY = ":0"; -    }; - -    restartIfChanged = true; - -    serviceConfig = { -      Type = "simple"; -      ExecStart = "${pkgs.xorg.xrdb}/bin/xrdb -merge ${xresources}"; -      Restart = "on-failure"; -      User = "lass"; -    }; -  }; -} diff --git a/lass/3modules/default.nix b/lass/3modules/default.nix index e14e39bc2..81b52c306 100644 --- a/lass/3modules/default.nix +++ b/lass/3modules/default.nix @@ -11,6 +11,7 @@ _:      ./screenlock.nix      ./umts.nix      ./usershadow.nix +    ./xserver      ./xresources.nix    ];  } diff --git a/lass/3modules/screenlock.nix b/lass/3modules/screenlock.nix index 06ca1f27d..e16ce9868 100644 --- a/lass/3modules/screenlock.nix +++ b/lass/3modules/screenlock.nix @@ -23,7 +23,7 @@ let        before = [ "sleep.target" ];        wantedBy = [ "sleep.target" ];        environment = { -        DISPLAY = ":0"; +        DISPLAY = ":${toString config.services.xserver.display}";        };        serviceConfig = {          SyslogIdentifier = "screenlock"; diff --git a/lass/3modules/xresources.nix b/lass/3modules/xresources.nix index 074963022..017dbff2b 100644 --- a/lass/3modules/xresources.nix +++ b/lass/3modules/xresources.nix @@ -4,16 +4,13 @@  #prefix with Attribute Name  #ex: urxvt -# -#  with builtins;  with lib;  let -  inherit (import ../../tv/4lib { inherit pkgs lib; }) shell-escape; -  inherit (pkgs) writeScript; +  inherit (pkgs) writeScript writeText;  in @@ -46,12 +43,16 @@ in    config =      let        cfg = config.services.xresources; -      xres = concatStringsSep "\n" (attrValues cfg.resources); +      xres = writeText "xresources" (concatStringsSep "\n" (attrValues cfg.resources));      in mkIf cfg.enable {          services.xserver.displayManager.sessionCommands = '' -          echo ${shell-escape xres} | xrdb -merge +          ${pkgs.xorg.xrdb}/bin/xrdb -merge ${xres}          ''; +        environment.systemPackages = [ +          (pkgs.writeDashBin "updateXresources" '' +            ${pkgs.xorg.xrdb}/bin/xrdb -merge ${xres} +          '') +        ];        }; -  } diff --git a/lass/3modules/xserver/default.nix b/lass/3modules/xserver/default.nix new file mode 100644 index 000000000..462c6deef --- /dev/null +++ b/lass/3modules/xserver/default.nix @@ -0,0 +1,101 @@ +{ config, pkgs, ... }@args: +with import <stockholm/lib>; +let + +  out = { +    options.lass.xserver = api; +    config = mkIf cfg.enable imp; +  }; + +  user = config.krebs.build.user; + +  cfg = config.lass.xserver; +  xcfg = config.services.xserver; +  api = { +    enable = mkEnableOption "lass xserver"; +  }; +  imp = { + +    services.xserver = { +      # Don't install feh into systemPackages +      # refs <nixpkgs/nixos/modules/services/x11/desktop-managers> +      desktopManager.session = mkForce []; + +      enable = true; +      display = 11; +      tty = 11; +    }; + +    systemd.services.display-manager.enable = false; + +    systemd.services.xmonad = { +      wantedBy = [ "multi-user.target" ]; +      requires = [ "xserver.service" ]; +      environment = { +        DISPLAY = ":${toString xcfg.display}"; + +        XMONAD_STARTUP_HOOK = pkgs.writeDash "xmonad-startup-hook" '' +          ${pkgs.xorg.xhost}/bin/xhost +LOCAL: & +          ${xcfg.displayManager.sessionCommands} +          wait +        ''; + +        XMONAD_DATA_DIR = "/tmp"; +      }; +      serviceConfig = { +        SyslogIdentifier = "xmonad"; +        ExecStart = "${pkgs.xmonad-lass}/bin/xmonad"; +        ExecStop = "${pkgs.xmonad-lass}/bin/xmonad --shutdown"; +        User = user.name; +        WorkingDirectory = user.home; +      }; +    }; + +    systemd.services.xserver = { +      after = [ +        "systemd-udev-settle.service" +        "local-fs.target" +        "acpid.service" +      ]; +      reloadIfChanged = true; +      environment = { +        XKB_BINDIR = "${pkgs.xorg.xkbcomp}/bin"; # Needed for the Xkb extension. +        XORG_DRI_DRIVER_PATH = "/run/opengl-driver/lib/dri"; # !!! Depends on the driver selected at runtime. +        LD_LIBRARY_PATH = concatStringsSep ":" ( +          [ "${pkgs.xorg.libX11}/lib" "${pkgs.xorg.libXext}/lib" ] +          ++ concatLists (catAttrs "libPath" xcfg.drivers)); +      }; +      serviceConfig = { +        SyslogIdentifier = "xserver"; +        ExecReload = "${pkgs.coreutils}/bin/echo NOP"; +        ExecStart = toString [ +          "${pkgs.xorg.xorgserver}/bin/X" +          ":${toString xcfg.display}" +          "vt${toString xcfg.tty}" +          "-config ${import ./xserver.conf.nix args}" +          "-logfile /dev/null -logverbose 0 -verbose 3" +          "-nolisten tcp" +          "-xkbdir ${pkgs.xkeyboard_config}/etc/X11/xkb" +          (optional (xcfg.dpi != null) "-dpi ${toString xcfg.dpi}") +        ]; +      }; +    }; +    services.xresources.resources.dpi = '' +      ${optionalString (xcfg.dpi != null) "Xft.dpi: ${toString xcfg.dpi}"} +    ''; +    systemd.services.urxvtd = { +      wantedBy = [ "multi-user.target" ]; +      reloadIfChanged = true; +      serviceConfig = { +        SyslogIdentifier = "urxvtd"; +        ExecReload = "${pkgs.coreutils}/bin/echo NOP"; +        ExecStart = "${pkgs.rxvt_unicode_with-plugins}/bin/urxvtd"; +        Restart = "always"; +        RestartSec = "2s"; +        StartLimitBurst = 0; +        User = user.name; +      }; +    }; +  }; + +in out diff --git a/lass/3modules/xserver/xserver.conf.nix b/lass/3modules/xserver/xserver.conf.nix new file mode 100644 index 000000000..6f34e0150 --- /dev/null +++ b/lass/3modules/xserver/xserver.conf.nix @@ -0,0 +1,40 @@ +{ config, lib, pkgs, ... }: + +with import <stockholm/lib>; + +let +  cfg = config.services.xserver; +in + +pkgs.stdenv.mkDerivation { +  name = "xserver.conf"; + +  xfs = optionalString (cfg.useXFS != false) +    ''FontPath "${toString cfg.useXFS}"''; + +  inherit (cfg) config; + +  buildCommand = +    '' +      echo 'Section "Files"' >> $out +      echo $xfs >> $out + +      for i in ${toString config.fonts.fonts}; do +        if test "''${i:0:''${#NIX_STORE}}" == "$NIX_STORE"; then +          for j in $(find $i -name fonts.dir); do +            echo "  FontPath \"$(dirname $j)\"" >> $out +          done +        fi +      done + +      for i in $(find ${toString cfg.modules} -type d); do +        if test $(echo $i/*.so* | wc -w) -ne 0; then +          echo "  ModulePath \"$i\"" >> $out +        fi +      done + +      echo 'EndSection' >> $out + +      echo "$config" >> $out +    ''; +} diff --git a/lass/5pkgs/default.nix b/lass/5pkgs/default.nix index e0775f076..5b668c88f 100644 --- a/lass/5pkgs/default.nix +++ b/lass/5pkgs/default.nix @@ -21,6 +21,9 @@      xmonad-lass = import ./xmonad-lass.nix { inherit config pkgs; };      yt-next = pkgs.callPackage ./yt-next/default.nix {}; -    screengrab = pkgs.writeDashBin "screengrab" "${pkgs.ffmpeg}/bin/ffmpeg -f x11grab -r 25 -s 1024x768 -i :0.0 -c:v huffyuv $1"; +    screengrab = pkgs.writeDashBin "screengrab" '' +      resolution="$(${pkgs.xorg.xrandr}/bin/xrandr | ${pkgs.gnugrep}/bin/grep '*' | ${pkgs.gawk}/bin/awk '{print $1}')" +      ${pkgs.ffmpeg}/bin/ffmpeg -f x11grab -r 25 -i :0.0 -s $resolution -c:v huffyuv $1 +    '';    };  } diff --git a/lass/5pkgs/xmonad-lass.nix b/lass/5pkgs/xmonad-lass.nix index 478686245..65bec117d 100644 --- a/lass/5pkgs/xmonad-lass.nix +++ b/lass/5pkgs/xmonad-lass.nix @@ -3,6 +3,7 @@ pkgs.writeHaskell "xmonad-lass" {    executables.xmonad = {      extra-depends = [        "containers" +      "extra"        "unix"        "X11"        "xmonad" @@ -20,17 +21,15 @@ module Main where  import XMonad  import qualified XMonad.StackSet as W -import Control.Exception +import Control.Monad.Extra (whenJustM)  import Data.List (isInfixOf) -import System.Environment (getArgs, withArgs) -import System.IO (hPutStrLn, stderr) +import System.Environment (getArgs, lookupEnv)  import System.Posix.Process (executeFile)  import XMonad.Actions.CopyWindow (copy, kill1)  import XMonad.Actions.CycleWS (toggleWS)  import XMonad.Actions.DynamicWorkspaces ( addWorkspacePrompt, renameWorkspace, removeEmptyWorkspace)  import XMonad.Actions.DynamicWorkspaces (withWorkspace)  import XMonad.Actions.GridSelect (GSConfig(..), gridselectWorkspace, navNSearch) -import XMonad.Actions.UpdatePointer (updatePointer)  import XMonad.Hooks.FloatNext (floatNext)  import XMonad.Hooks.FloatNext (floatNextHook)  import XMonad.Hooks.ManageDocks (avoidStruts, ToggleStruts(ToggleStruts)) @@ -48,28 +47,30 @@ import XMonad.Layout.SimpleFloat (simpleFloat)  import XMonad.Stockholm.Shutdown  myTerm :: FilePath -myTerm = "${pkgs.rxvt_unicode}/bin/urxvtc" +myTerm = "${pkgs.rxvt_unicode_with-plugins}/bin/urxvtc"  myFont :: String  myFont = "${config.lass.fonts.regular}"  main :: IO ()  main = getArgs >>= \case -    ["--shutdown"] -> sendShutdownEvent -    _ -> mainNoArgs +  ["--shutdown"] -> sendShutdownEvent +  _ -> main' -mainNoArgs :: IO () -mainNoArgs = do -    xmonad' +main' :: IO () +main' = do +    xmonad          $ withUrgencyHook (SpawnUrgencyHook "echo emit Urgency ")          $ def              { terminal           = myTerm              , modMask            = mod4Mask              , layoutHook         = smartBorders $ myLayoutHook -            , logHook            = updatePointer (0.25, 0.25) (0.25, 0.25)              , manageHook         = placeHook (smart (1,0)) <+> floatNextHook +            , startupHook = +                whenJustM (liftIO (lookupEnv "XMONAD_STARTUP_HOOK")) +                          (\path -> forkFile path [] Nothing)              , normalBorderColor  = "#1c1c1c" -            , focusedBorderColor = "#f000b0" +            , focusedBorderColor = "#ff0000"              , handleEventHook    = handleShutdownEvent              , workspaces         = [ "dashboard", "sys", "wp" ]              } `additionalKeysP` myKeyMap @@ -78,22 +79,6 @@ myLayoutHook = defLayout    where      defLayout = minimize $ ((avoidStruts $ Tall 1 (3/100) (1/2) ||| Full ||| Mirror (Tall 1 (3/100) (1/2))) ||| FixedColumn 2 80 80 1) ||| simpleFloat | 
