summaryrefslogtreecommitdiffstats
path: root/configs/xserver
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2023-09-11 18:24:28 +0200
committertv <tv@krebsco.de>2023-09-13 18:07:11 +0200
commit0c4f3acb281be6290c55a6e96bc29fab5b5c7a11 (patch)
treedadaec00477a095273475ac345b2066b4748c399 /configs/xserver
parentab1d0479e90f11806d4703ec6fffed3d5f782914 (diff)
stockholm -> hrm
Diffstat (limited to 'configs/xserver')
-rw-r--r--configs/xserver/Xmodmap.nix28
-rw-r--r--configs/xserver/default.nix166
-rw-r--r--configs/xserver/sxiv.nix11
-rw-r--r--configs/xserver/urxvt.nix72
-rw-r--r--configs/xserver/xkiller.nix14
-rw-r--r--configs/xserver/xserver.conf.nix38
6 files changed, 329 insertions, 0 deletions
diff --git a/configs/xserver/Xmodmap.nix b/configs/xserver/Xmodmap.nix
new file mode 100644
index 0000000..8e555e9
--- /dev/null
+++ b/configs/xserver/Xmodmap.nix
@@ -0,0 +1,28 @@
+{ config, pkgs, ... }:
+
+with import ./lib;
+
+pkgs.writeText "Xmodmap" ''
+ !keycode 66 = Caps_Lock
+ !remove Lock = Caps_Lock
+ clear Lock
+
+ ! caps lock
+ keycode 66 = Mode_switch
+
+ keycode 13 = 4 dollar EuroSign cent
+ keycode 30 = u U udiaeresis Udiaeresis
+ keycode 32 = o O odiaeresis Odiaeresis
+ keycode 38 = a A adiaeresis Adiaeresis
+ keycode 39 = s S ssharp
+
+ keycode 33 = p P Greek_pi Greek_PI
+ keycode 40 = d D Greek_delta Greek_DELTA
+ keycode 46 = l L Greek_lambda Greek_LAMBDA
+
+ keycode 54 = c C cacute Cacute
+
+ ! BULLET OPERATOR
+ keycode 17 = 8 asterisk U2219
+ keycode 27 = r R r U211D
+''
diff --git a/configs/xserver/default.nix b/configs/xserver/default.nix
new file mode 100644
index 0000000..df83ba5
--- /dev/null
+++ b/configs/xserver/default.nix
@@ -0,0 +1,166 @@
+{ config, pkgs, ... }@args: let
+ cfg = {
+ cacheDir = cfg.dataDir;
+ configDir = "/var/empty";
+ dataDir = "/run/xdg/${cfg.user.name}/xmonad";
+ user = config.krebs.build.user;
+ xmonad.pkg = pkgs.haskellPackages.xmonad-tv.overrideAttrs (_: {
+ au = {
+ XMONAD_BUILD_SCREEN_WIDTH = 1920;
+ XMONAD_BUILD_TERM_FONT_WIDTH = 10;
+ XMONAD_BUILD_TERM_FONT = "xft:Input Mono:size=12:style=Regular";
+ XMONAD_BUILD_TERM_PADDING = 2;
+ };
+ }.${config.krebs.build.host.name} or {
+ XMONAD_BUILD_SCREEN_WIDTH = 1366;
+ XMONAD_BUILD_TERM_FONT_WIDTH = 6;
+ XMONAD_BUILD_TERM_FONT = "-*-clean-*-*-*-*-*-*-*-*-*-*-iso10646-1";
+ XMONAD_BUILD_TERM_PADDING = 2;
+ });
+ };
+in {
+
+ imports = [
+ ./sxiv.nix
+ ./urxvt.nix
+ ];
+
+ environment.systemPackages = [
+ pkgs.ff
+ pkgs.font-size
+ pkgs.gitAndTools.qgit
+ pkgs.mpv
+ pkgs.xdotool
+ pkgs.xsel
+ pkgs.zathura
+ ];
+
+ fonts.fonts = [
+ pkgs.xorg.fontschumachermisc
+ ];
+
+ services.xserver = {
+
+ # Don't install feh into systemPackages
+ # refs <nixpkgs/nixos/modules/services/x11/desktop-managers>
+ desktopManager.session = mkForce [];
+
+ displayManager.lightdm.enable = mkForce false;
+ displayManager.job.execCmd = mkForce "derp";
+
+ enable = true;
+ display = mkForce 11;
+ tty = mkForce 11;
+ };
+
+ systemd.services.display-manager.enable = false;
+
+ systemd.services.xmonad = let
+ xmonad = "${cfg.xmonad.pkg}/bin/xmonad";
+ xmonad-start = pkgs.writeDash "xmonad-start" ''
+ ${pkgs.coreutils}/bin/mkdir -p "$XMONAD_CACHE_DIR"
+ ${pkgs.coreutils}/bin/mkdir -p "$XMONAD_CONFIG_DIR"
+ ${pkgs.coreutils}/bin/mkdir -p "$XMONAD_DATA_DIR"
+
+ f=$HOME/.dbus/session-bus/$(${pkgs.coreutils}/bin/cat /etc/machine-id)-${
+ toString config.services.xserver.display
+ }
+ if test -e "$f" &&
+ . "$f" &&
+ ${pkgs.coreutils}/bin/kill -0 "$DBUS_SESSION_BUS_PID"
+ then
+ export DBUS_SESSION_BUS_ADDRESS
+ else
+ eval "$(${pkgs.dbus.lib}/bin/dbus-launch --sh-syntax)"
+ fi
+
+ exec ${xmonad}
+ '';
+ xmonad-ready = pkgs.writeDash "xmonad-ready" ''
+ ${pkgs.systemd}/bin/systemd-notify --ready
+ {
+ ${pkgs.xorg.xhost}/bin/xhost +SI:localuser:${cfg.user.name}
+ ${pkgs.xorg.xhost}/bin/xhost -LOCAL:
+ } &
+ ${pkgs.xorg.xmodmap}/bin/xmodmap ${import ./Xmodmap.nix args} &
+ ${pkgs.xorg.xsetroot}/bin/xsetroot -solid '#1c1c1c' &
+ wait
+ '';
+ in {
+ wantedBy = [ "graphical.target" ];
+ requires = [ "xserver.service" ];
+ environment = {
+ DISPLAY = ":${toString config.services.xserver.display}";
+ FZMENU_FZF_DEFAULT_OPTS = toString [
+ "--color=dark,border:126,bg+:090"
+ "--inline-info"
+ ];
+ XMONAD_CACHE_DIR = cfg.cacheDir;
+ XMONAD_CONFIG_DIR = cfg.configDir;
+ XMONAD_DATA_DIR = cfg.dataDir;
+ XMONAD_STARTUP_HOOK = xmonad-ready;
+ XMONAD_WORKSPACES0_FILE = pkgs.writeJSON "xmonad-workspaces0.json" [
+ "Dashboard" # we start here
+ "23"
+ "cr"
+ "ff"
+ "hack"
+ "im"
+ "mail"
+ "stockholm"
+ "za" "zh" "zj" "zs"
+ ];
+ };
+ path = [
+ config.tv.slock.package
+ pkgs.flameshot-once-tv
+ pkgs.pulseaudio.out
+ pkgs.rxvt_unicode
+ pkgs.xcalib
+ "/run/wrappers" # for su
+ ];
+ serviceConfig = {
+ ExecStart = "@${xmonad-start} xmonad-${currentSystem}";
+ ExecStop = "@${xmonad} xmonad-${currentSystem} --shutdown";
+ SyslogIdentifier = "xmonad";
+ User = cfg.user.name;
+ WorkingDirectory = cfg.user.home;
+
+ NotifyAccess = "all";
+ Type = "notify";
+ };
+ };
+
+ systemd.services.xserver = {
+ after = [
+ "acpid.service"
+ "local-fs.target"
+ "systemd-udev-settle.service"
+ ];
+ wants = [
+ "systemd-udev-settle.service"
+ ];
+ restartIfChanged = false;
+ environment = {
+ LD_LIBRARY_PATH = concatStringsSep ":" ([ "/run/opengl-driver/lib" ]
+ ++ concatLists (catAttrs "libPath" config.services.xserver.drivers));
+ };
+ serviceConfig = {
+ SyslogIdentifier = "xserver";
+ ExecStart = toString [
+ "${pkgs.xorg.xorgserver}/bin/X"
+ ":${toString config.services.xserver.display}"
+ "vt${toString config.services.xserver.tty}"
+ "-config ${import ./xserver.conf.nix args}"
+ "-logfile /dev/null -logverbose 0 -verbose 3"
+ "-nolisten tcp"
+ "-xkbdir ${config.services.xserver.xkbDir}"
+ ];
+ };
+ };
+
+ tv.slock = {
+ enable = true;
+ user = cfg.user;
+ };
+}
diff --git a/configs/xserver/sxiv.nix b/configs/xserver/sxiv.nix
new file mode 100644
index 0000000..13cfd65
--- /dev/null
+++ b/configs/xserver/sxiv.nix
@@ -0,0 +1,11 @@
+{ config, pkgs, ... }: let
+ cfg.user = config.krebs.build.user;
+in {
+ tv.Xresources = {
+ "Sxiv.foreground" = "#232323";
+ "Sxiv.background" = "#424242";
+ };
+ users.users.${cfg.user.name}.packages = [
+ pkgs.sxiv
+ ];
+}
diff --git a/configs/xserver/urxvt.nix b/configs/xserver/urxvt.nix
new file mode 100644
index 0000000..c4e619d
--- /dev/null
+++ b/configs/xserver/urxvt.nix
@@ -0,0 +1,72 @@
+{ config, pkgs, ... }: let
+ cfg.user = config.krebs.build.user;
+in {
+ systemd.services.urxvtd = {
+ wantedBy = [ "graphical.target" ];
+ restartIfChanged = false;
+ serviceConfig = {
+ SyslogIdentifier = "urxvtd";
+ ExecStart = "${pkgs.rxvt_unicode}/bin/urxvtd";
+ Restart = "always";
+ RestartSec = "2s";
+ StartLimitBurst = 0;
+ User = cfg.user.name;
+ };
+ };
+ tv.Xresources = {
+ "URxvt*cutchars" = ''"\\`\"'&()*,;<=>?@[]^{|}‘’"'';
+ "URxvt*eightBitInput" = "false";
+ "URxvt*font" = "-*-clean-*-*-*-*-*-*-*-*-*-*-iso10646-1";
+ "URxvt*boldFont" = "-*-clean-*-*-*-*-*-*-*-*-*-*-iso10646-1";
+ "URxvt*scrollBar" = "false";
+ "URxvt*background" = "#050505";
+ "URxvt*foreground" = "#d0d7d0";
+ "URxvt*cursorColor" = "#f042b0";
+ "URxvt*cursorColor2" = "#f0b000";
+ "URxvt*cursorBlink" = "off";
+ "URxvt*jumpScroll" = "true";
+ "URxvt*allowSendEvents" = "false";
+ "URxvt*charClass" = "33:48,37-38:48,45-47:48,61:48,63-64:48";
+ "URxvt*cutNewline" = "False";
+ "URxvt*cutToBeginningOfLine" = "False";
+
+ "URxvt*color0" = "#232342";
+ "URxvt*color3" = "#c07000";
+ "URxvt*color4" = "#4040c0";
+ "URxvt*color7" = "#c0c0c0";
+ "URxvt*color8" = "#707070";
+ "URxvt*color9" = "#ff6060";
+ "URxvt*color10" = "#70ff70";
+ "URxvt*color11" = "#ffff70";
+ "URxvt*color12" = "#7070ff";
+ "URxvt*color13" = "#ff50ff";
+ "URxvt*color14" = "#70ffff";
+ "URxvt*color15" = "#ffffff";
+
+ "URxvt*iso14755" = "False";
+
+ "URxvt*urgentOnBell" = "True";
+ "URxvt*visualBell" = "True";
+
+ # ref https://github.com/muennich/urxvt-perls
+ "URxvt*perl-ext" = "default,url-select";
+ "URxvt*keysym.M-u" = "perl:url-select:select_next";
+ "URxvt*url-select.launcher" =
+ "/etc/profiles/per-user/${cfg.user.name}/bin/ff -new-tab";
+ "URxvt*url-select.underline" = "true";
+ "URxvt*colorUL" = "#4682B4";
+ "URxvt.perl-lib" = "${pkgs.urxvt_perls}/lib/urxvt/perl";
+ "URxvt*saveLines" = "10000";
+ "URxvt*modifier" = "mod1";
+
+ "root-urxvt*background" = "#230000";
+ "root-urxvt*foreground" = "#e0c0c0";
+ "root-urxvt*BorderColor" = "#400000";
+ "root-urxvt*color0" = "#800000";
+
+ "fzmenu-urxvt*background" = "rgb:42/23/42";
+ "fzmenu-urxvt*externalBorder" = "1";
+ "fzmenu-urxvt*geometry" = "70x9";
+ "fzmenu-urxvt*internalBorder" = "1";
+ };
+}
diff --git a/configs/xserver/xkiller.nix b/configs/xserver/xkiller.nix
new file mode 100644
index 0000000..2f97630
--- /dev/null
+++ b/configs/xserver/xkiller.nix
@@ -0,0 +1,14 @@
+{ pkgs, ... }: {
+
+ services.acpid.enable = true;
+ services.acpid.handlers.xkiller = {
+ action = /* sh */ ''
+ event=($1)
+ if test "''${event[2]}" = 00000080; then
+ ${pkgs.systemd}/bin/systemd-cat -t xkiller ${pkgs.xkiller}
+ fi
+ '';
+ event = "button/prog1";
+ };
+
+}
diff --git a/configs/xserver/xserver.conf.nix b/configs/xserver/xserver.conf.nix
new file mode 100644
index 0000000..3a80567
--- /dev/null
+++ b/configs/xserver/xserver.conf.nix
@@ -0,0 +1,38 @@
+{ config, pkgs, ... }:
+
+let
+ cfg = config.services.xserver;
+in
+
+pkgs.stdenv.mkDerivation {
+ name = "xserver.conf";
+
+ fontPath = optionalString (cfg.fontPath != null)
+ ''FontPath "${toString cfg.fontPath}"'';
+
+ inherit (cfg) config;
+
+ buildCommand =
+ ''
+ echo 'Section "Files"' >> $out
+ echo $fontPath >> $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
+ '';
+}