diff options
| author | nin <nin@c-base.org> | 2018-05-02 15:13:40 +0200 | 
|---|---|---|
| committer | nin <nin@c-base.org> | 2018-05-02 15:13:40 +0200 | 
| commit | e7645e76c9db8f5436bd0e1c143c40186e7adcf0 (patch) | |
| tree | de7d471a46993e410762fe9eb6514b9cefe31371 | |
| parent | d50f14be0c8bc161118745d544aca63d43e5ebac (diff) | |
| parent | b1982d73e145eec0833328c125c0b88b1dda1229 (diff) | |
Merge branch 'master' of prism:stockholm
| -rw-r--r-- | jeschli/1systems/bln/config.nix | 128 | ||||
| -rw-r--r-- | jeschli/1systems/bln/hardware-configuration.nix | 23 | ||||
| -rw-r--r-- | jeschli/1systems/bolide/config.nix | 1 | ||||
| -rw-r--r-- | jeschli/1systems/brauerei/config.nix | 31 | ||||
| -rw-r--r-- | jeschli/2configs/emacs.nix | 74 | ||||
| -rw-r--r-- | jeschli/2configs/virtualbox.nix | 2 | ||||
| -rw-r--r-- | jeschli/2configs/xdg.nix | 14 | ||||
| -rw-r--r-- | jeschli/2configs/xserver/Xmodmap.nix | 27 | ||||
| -rw-r--r-- | jeschli/2configs/xserver/Xresources.nix | 52 | ||||
| -rw-r--r-- | jeschli/2configs/xserver/default.nix | 141 | ||||
| -rw-r--r-- | jeschli/2configs/xserver/xserver.conf.nix | 40 | ||||
| -rw-r--r-- | jeschli/5pkgs/default.nix | 11 | ||||
| -rw-r--r-- | jeschli/5pkgs/simple/default.nix | 24 | ||||
| -rw-r--r-- | jeschli/5pkgs/simple/xmonad-jeschli/default.nix | 294 | ||||
| -rw-r--r-- | jeschli/default.nix | 6 | ||||
| -rw-r--r-- | jeschli/source.nix | 5 | ||||
| -rw-r--r-- | lib/types.nix | 8 | ||||
| -rw-r--r-- | nin/2configs/games.nix | 4 | ||||
| -rw-r--r-- | tv/2configs/urlwatch.nix | 5 | ||||
| -rw-r--r-- | tv/2configs/xserver/default.nix | 1 | ||||
| -rw-r--r-- | tv/5pkgs/simple/xmonad-tv/default.nix | 2 | 
21 files changed, 759 insertions, 134 deletions
| diff --git a/jeschli/1systems/bln/config.nix b/jeschli/1systems/bln/config.nix index 8a3090a..c9a7a34 100644 --- a/jeschli/1systems/bln/config.nix +++ b/jeschli/1systems/bln/config.nix @@ -1,42 +1,19 @@ -# Edit this configuration file to define what should be installed on -# your system.  Help is available in the configuration.nix(5) man page -# and in the NixOS manual (accessible by running ‘nixos-help’). -  { config, lib, pkgs, ... }:  # bln config file  {    imports = -    [ # Include the results of the hardware scan. -      <stockholm/jeschli> +    [ <stockholm/jeschli>        <stockholm/jeschli/2configs/virtualbox.nix>        <stockholm/jeschli/2configs/urxvt.nix> +      <stockholm/jeschli/2configs/emacs.nix>        ./hardware-configuration.nix -      # ./dcso-vpn.nix      ]; + +  boot.loader.systemd-boot.enable = true; +  boot.loader.efi.canTouchEfiVariables = true; +    jeschliFontSize = 20; -  # Use the GRUB 2 boot loader. -  boot.loader.grub.enable = true; -  boot.loader.grub.version = 2; -  # boot.loader.grub.efiSupport = true; -  # boot.loader.grub.efiInstallAsRemovable = true; -  # boot.loader.efi.efiSysMountPoint = "/boot/efi"; -  # Define on which hard drive you want to install Grub. -  boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only -  boot.loader.grub.extraEntries = '' -    menuentry "Debian GNU/Linux, kernel 4.9.0-4-amd64" { -      search --set=drive1 --fs-uuid f169fd32-bf96-4da0-bc34-294249ffa606 -      linux ($drive1)/vmlinuz-4.9.0-4-amd64 root=/dev/mapper/pool-debian ro -      initrd ($drive1)/initrd.img-4.9.0-4-amd64 -    } -  ''; -  boot.initrd.luks.devices = [ -    { -      name = "root"; -      device = "/dev/disk/by-uuid/cba5d550-c3c8-423e-a913-14b5210bdd32"; -      preLVM = true; -      allowDiscards = true; -    } -  ]; +    environment.shellAliases = {      n = "nix-shell";      gd = "cd /home/markus/go/src/gitlab.dcso.lolcat"; @@ -46,23 +23,13 @@        LOGNAME=jeschli exec nix-shell -I stockholm="$PWD" --run 'deploy  --system="bln"'      '';    }; -  networking.hostName = lib.mkForce "BLN02NB0154"; # Define your hostname. +  networking.hostName = lib.mkForce "BLN02NB0232";    networking.networkmanager.enable = true; -  # networking.wireless.enable = true;  # Enables wireless support via wpa_supplicant. - -  # Select internationalisation properties. -  # i18n = { -  #   consoleFont = "Lat2-Terminus16"; -  #   consoleKeyMap = "us"; -  #   defaultLocale = "en_US.UTF-8"; -  # };    # Set your time zone.    time.timeZone = "Europe/Berlin"; - -  # List packages installed in system profile. To search by name, run: -  # $ nix-env -qaP | grep wget +  # Setup Packages    nixpkgs.config.allowUnfree = true;    environment.variables = { GOROOT= [ "${pkgs.go.out}/share/go" ]; };    environment.systemPackages = with pkgs; [ @@ -85,7 +52,7 @@      emacs    # databases      sqlite -  # internet  +  # internet      thunderbird      hipchat      chromium @@ -114,79 +81,44 @@    ]; - -  # Some programs need SUID wrappers, can be configured further or are -  # started in user sessions.    programs.bash.enableCompletion = true;    programs.vim.defaultEditor = true; -  # programs.mtr.enable = true; -  # programs.gnupg.agent = { enable = true; enableSSHSupport = true; }; - -  # List services that you want to enable: -  # Enable the OpenSSH daemon.    services.openssh.enable = true; -  # Open ports in the firewall. -  # networking.firewall.allowedTCPPorts = [ ... ]; -  # networking.firewall.allowedUDPPorts = [ ... ]; -  # Or disable the firewall altogether. -  # networking.firewall.enable = false; -    # Enable CUPS to print documents.    services.printing.enable = true;    services.printing.drivers = [ pkgs.postscript-lexmark ]; +    # Enable the X11 windowing system.    services.xserver.enable = true; -  # services.xserver.xrandrHeads = [ -  #  { output = "eDP1"; } -  #  { output = "DP-2-2-8"; primary = true; } -  #  { output = "DP-2-1-8"; monitorConfig = ''Option "Rotate" "left"''; } -  # ]; -  # services.xserver.layout = "us"; -  # services.xserver.xkbOptions = "eurosign:e"; - -  # Enable touchpad support. -  # services.xserver.libinput.enable = true; - -  # Enable the KDE Desktop Environment. -#  services.xserver.displayManager.lightdm.enable = true; +  services.xserver.videoDrivers = [ "nvidia" ]; +    services.xserver.windowManager.xmonad.enable = true;    services.xserver.windowManager.xmonad.enableContribAndExtras = true; -#   services.xserver.desktopManager.gnome3.enable = true; -  # services.xserver.displayManager.gdm.enable = true;    services.xserver.displayManager.sddm.enable = true; -  #services.xserver.desktopManager.plasma5.enable = true; -#  services.xserver.displayManager.sessionCommands = '' -#    (sleep 1 && ${pkgs.xorg.xrandr}/bin/xrandr --output VIRTUAL1 --off --output eDP1 --mode 1920x1080 --pos 5120x688 --rotate normal --output DP1 --off --output DP2-1 --mode 2560x1440 --pos 2560x328 --rotate normal --output DP2-2 --primary --mode 2560x1440 --pos 0x328 --rotate normal --output DP2-3 --off --output HDMI2 --off --output HDMI1 --off --output DP2 --off -#''; +  services.xserver.dpi = 100; +  fonts.fontconfig.dpi = 100; -  # Define a user account. Don't forget to set a password with ‘passwd’. -  users.extraUsers.markus = { +  users.extraUsers.jeschli = {      isNormalUser = true; -    extraGroups = ["docker"]; +    extraGroups = ["docker" "vboxusers"];      uid = 1000;    }; -  # This value determines the NixOS release with which your system is to be -  # compatible, in order to avoid breaking some software such as database -  # servers. You should change this only after NixOS release notes say you -  # should. -  system.stateVersion = "17.09"; # Did you read the comment? - +  system.stateVersion = "17.09";    # Gogland Debugger workaround -#  nixpkgs.config.packageOverrides = super: { -#    idea.gogland = lib.overrideDerivation super.idea.gogland (attrs: { -#      postFixup = '' -#	interp="$(cat $NIX_CC/nix-support/dynamic-linker)" -#	patchelf --set-interpreter $interp $out/gogland*/plugins/intellij-go-plugin/lib/dlv/linux/dlv -#        chmod +x $out/gogland*/plugins/intellij-go-plugin/lib/dlv/linux/dlv -#     ''; -#    }); -#  }; - -#  virtualisation.docker.enable = true; -   +  #  nixpkgs.config.packageOverrides = super: { +  #    idea.gogland = lib.overrideDerivation super.idea.gogland (attrs: { +  #      postFixup = '' +  #	interp="$(cat $NIX_CC/nix-support/dynamic-linker)" +  #	patchelf --set-interpreter $interp $out/gogland*/plugins/intellij-go-plugin/lib/dlv/linux/dlv +  #        chmod +x $out/gogland*/plugins/intellij-go-plugin/lib/dlv/linux/dlv +  #     ''; +  #    }); +  #  }; + +  virtualisation.docker.enable = true;    # DCSO Certificates    security.pki.certificateFiles = [ @@ -197,7 +129,7 @@     (pkgs.fetchurl { url = "http://pki.dcso.de/ca/PEM/DCSOCACOMPC3G1.pem"; sha256 = "0w88qaqhwxzvdkx40kzj2gka1yi85ipppjdkxah4mscwfhlryrnk"; })     (pkgs.fetchurl { url = "http://pki.dcso.de/ca/PEM/DCSOCAIDENC2G1.pem"; sha256 = "1z2qkyhgjvri13bvi06ynkb7mjmpcznmc9yw8chx1lnwc3cxa7kf"; })     (pkgs.fetchurl { url = "http://pki.dcso.de/ca/PEM/DCSOCAIDENC3G1.pem"; sha256 = "0smdjjvz95n652cb45yhzdb2lr83zg52najgbzf6lm3w71f8mv7f"; }) -  ];  +  ];    hardware.bluetooth.enable = true;    krebs.build.host = config.krebs.hosts.bln; diff --git a/jeschli/1systems/bln/hardware-configuration.nix b/jeschli/1systems/bln/hardware-configuration.nix index 7141622..b774bfc 100644 --- a/jeschli/1systems/bln/hardware-configuration.nix +++ b/jeschli/1systems/bln/hardware-configuration.nix @@ -1,6 +1,3 @@ -# Do not modify this file!  It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations.  Please make changes -# to /etc/nixos/configuration.nix instead.  { config, lib, pkgs, ... }:  { @@ -8,27 +5,29 @@      [ <nixpkgs/nixos/modules/installer/scan/not-detected.nix>      ]; -  boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ]; +  boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sr_mod" "rtsx_pci_sdmmc" ];    boot.kernelModules = [ "kvm-intel" ];    boot.extraModulePackages = [ ]; +  boot.initrd.luks.devices.crypted.device = "/dev/disk/by-uuid/25534522-5748-4dcc-a5ca-80a3ac70f59d"; +    fileSystems."/" = -    { device = "/dev/disk/by-uuid/02144ea4-947d-440e-bbf9-99cab0dccf05"; +    { device = "/dev/disk/by-uuid/496c8889-96db-446d-9bac-60d4347faeac";        fsType = "ext4";      }; -  fileSystems."/boot" = -    { device = "/dev/disk/by-uuid/f169fd32-bf96-4da0-bc34-294249ffa606"; -      fsType = "ext2"; -    }; -    fileSystems."/home" = -    { device = "/dev/disk/by-uuid/68ef2163-7b3d-4dbb-add9-d3543ad7c738"; +    { device = "/dev/disk/by-uuid/2785adf5-a99e-49d7-86d6-99f393f457ea";        fsType = "ext4";      }; +  fileSystems."/boot" = +    { device = "/dev/disk/by-uuid/927E-01A0"; +      fsType = "vfat"; +    }; +    swapDevices = [ ]; -  nix.maxJobs = lib.mkDefault 4; +  nix.maxJobs = lib.mkDefault 8;    powerManagement.cpuFreqGovernor = "powersave";  } diff --git a/jeschli/1systems/bolide/config.nix b/jeschli/1systems/bolide/config.nix index 8364080..699a85b 100644 --- a/jeschli/1systems/bolide/config.nix +++ b/jeschli/1systems/bolide/config.nix @@ -10,6 +10,7 @@        ./hardware-configuration.nix        <stockholm/jeschli>        <stockholm/jeschli/2configs/urxvt.nix> +      <stockholm/jeschli/2configs/emacs.nix>      ];    krebs.build.host = config.krebs.hosts.bolide; diff --git a/jeschli/1systems/brauerei/config.nix b/jeschli/1systems/brauerei/config.nix index eb2bb11..49f439a 100644 --- a/jeschli/1systems/brauerei/config.nix +++ b/jeschli/1systems/brauerei/config.nix @@ -5,6 +5,9 @@      <stockholm/jeschli>      ./hardware-configuration.nix      <stockholm/jeschli/2configs/urxvt.nix> +    <stockholm/jeschli/2configs/emacs.nix> +    <stockholm/jeschli/2configs/xdg.nix> +    <stockholm/jeschli/2configs/xserver>    ];    krebs.build.host = config.krebs.hosts.brauerei; @@ -56,7 +59,6 @@      terminator      tmux      wget -  #  rxvt_unicode    # editors      emacs    # internet @@ -64,6 +66,7 @@      chromium      google-chrome    # programming languages +    exercism      go      gcc      ghc @@ -72,6 +75,9 @@    # go tools      golint      gotools +  # rust +    cargo +    rustc    # dev tools      gnumake      jetbrains.pycharm-professional @@ -104,8 +110,8 @@    # services.printing.enable = true;    # Enable the X11 windowing system. -  services.xserver.enable = true; -  services.xserver.layout = "us"; +  # services.xserver.enable = true; +  # services.xserver.layout = "us";    # services.xserver.xkbOptions = "eurosign:e";    # Enable touchpad support. @@ -114,18 +120,18 @@    # Enable the KDE Desktop Environment.    # services.xserver.displayManager.sddm.enable = true;    # services.xserver.desktopManager.plasma5.enable = true; -  services.xserver.displayManager.sddm.enable = true; -  services.xserver.windowManager.xmonad.enable = true; -  services.xserver.windowManager.xmonad.enableContribAndExtras = true; -# +  #  services.xserver.displayManager.sddm.enable = true; +  #  services.xserver.windowManager.xmonad.enable = true; +  #  services.xserver.windowManager.xmonad.enableContribAndExtras = true; +  #    # Define a user account. Don't forget to set a password with ‘passwd’. -  users.extraUsers.jeschli = { +  users.extraUsers.jeschli = { # TODO: define as krebs.users      isNormalUser = true;      uid = 1000;    };    users.extraUsers.jamie = {      isNormalUser = true; -    uid = 1001; +    uid = 1001; # TODO genid    };    users.users.root.openssh.authorizedKeys.keys = [ @@ -138,4 +144,11 @@    # should.    system.stateVersion = "17.09"; # Did you read the comment? +  hardware.trackpoint = { +    enable = true; +    sensitivity = 220; +    speed = 0; +    emulateWheel = true; +  }; +  } diff --git a/jeschli/2configs/emacs.nix b/jeschli/2configs/emacs.nix new file mode 100644 index 0000000..4c52432 --- /dev/null +++ b/jeschli/2configs/emacs.nix @@ -0,0 +1,74 @@ +{ config, pkgs, ... }: + +let +  packageRepos = '' +    (require 'package) ;; You might already have this line +    (let* ((no-ssl (and (memq system-type '(windows-nt ms-dos)) +                        (not (gnutls-available-p)))) +           (url (concat (if no-ssl "http" "https") "://melpa.org/packages/"))) +      (add-to-list 'package-archives (cons "melpa" url) t) +      (add-to-list 'package-archives +                 '("org" . "http://orgmode.org/elpa/") t) +    ) +    (when (< emacs-major-version 24) +      ;; For important compatibility libraries like cl-lib +      (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/"))) +    (package-initialize) +  ''; +  evilMode = '' +    ;; Evil Mode +    (add-to-list 'load-path "~/.emacs.d/evil") +    (require 'evil) +    (evil-mode 1) +    (require 'evil-org) +    (add-hook 'org-mode-hook 'evil-org-mode) +    (evil-org-set-key-theme '(navigation insert textobjects additional calendar)) +    (require 'evil-org-agenda) +    (evil-org-agenda-set-keys) +  ''; +  windowCosmetics = '' +    (tool-bar-mode -1)                  ; Disable the button bar atop screen +    (scroll-bar-mode -1)                ; Disable scroll bar +    (setq inhibit-startup-screen t)     ; Disable startup screen with graphics +    (setq-default indent-tabs-mode nil) ; Use spaces instead of tabs +    (setq default-tab-width 2)          ; Two spaces is a tab +    (setq tab-width 2)                  ; Four spaces is a tab +    (setq visible-bell nil)             ; Disable annoying visual bell graphic +    (setq ring-bell-function 'ignore)   ; Disable super annoying audio bell +  ''; +  orgMode = '' +    (add-to-list 'auto-mode-alist '("\\.\\(org\\|org_archive\\|txt\\)$" . org-mode)) +    (global-set-key "\C-cl" 'org-store-link) +    (global-set-key "\C-ca" 'org-agenda) +    (global-set-key "\C-cb" 'org-iswitchb) +    (if (boundp 'org-user-agenda-files) +      (setq org-agenda-files org-user-agenda-files) +      (setq org-agenda-files (quote ("~/projects/notes"))) +    ) +  ''; +  recentFiles = '' +    (recentf-mode 1) +    (setq recentf-max-menu-items 25) +    (global-set-key "\C-x\ \C-r" 'recentf-open-files) +  ''; +  dotEmacs = pkgs.writeText "dot-emacs" '' +    ${packageRepos} +    ${orgMode} +    ${recentFiles} +    ${windowCosmetics} +  ''; +  emacsWithCustomPackages = (pkgs.emacsPackagesNgGen pkgs.emacs).emacsWithPackages (epkgs: [ +    epkgs.melpaStablePackages.magit +    epkgs.melpaPackages.mmm-mode +    epkgs.melpaPackages.nix-mode +    epkgs.melpaPackages.go-mode +    epkgs.melpaPackages.google-this +  ]); +  myEmacs = pkgs.writeDashBin "my-emacs" '' +    exec ${emacsWithCustomPackages}/bin/emacs -q -l ${dotEmacs} "$@" +  ''; +in { +  environment.systemPackages = [ +    myEmacs +  ]; +} diff --git a/jeschli/2configs/virtualbox.nix b/jeschli/2configs/virtualbox.nix index b2cb851..c9bb8c4 100644 --- a/jeschli/2configs/virtualbox.nix +++ b/jeschli/2configs/virtualbox.nix @@ -1,7 +1,7 @@  { config, pkgs, ... }:  let -  mainUser = config.users.extraUsers.markus; +  mainUser = config.users.extraUsers.jeschli;  in {    #services.virtualboxHost.enable = true; diff --git a/jeschli/2configs/xdg.nix b/jeschli/2configs/xdg.nix new file mode 100644 index 0000000..18bac9b --- /dev/null +++ b/jeschli/2configs/xdg.nix @@ -0,0 +1,14 @@ +{ config, lib, pkgs, ... }: + +with import <stockholm/lib>; + +{ +  environment.variables.XDG_RUNTIME_DIR = "/run/xdg/$LOGNAME"; + +  systemd.tmpfiles.rules = let +    forUsers = flip map users; +    isUser = { name, group, ... }: +      name == "root" || hasSuffix "users" group; +    users = filter isUser (mapAttrsToList (_: id) config.users.users); +  in forUsers (u: "d /run/xdg/${u.name} 0700 ${u.name} ${u.group} -"); +} diff --git a/jeschli/2configs/xserver/Xmodmap.nix b/jeschli/2configs/xserver/Xmodmap.nix new file mode 100644 index 0000000..d2b1b26 --- /dev/null +++ b/jeschli/2configs/xserver/Xmodmap.nix @@ -0,0 +1,27 @@ +{ config, pkgs, ... }: + +with import <stockholm/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  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/jeschli/2configs/xserver/Xresources.nix b/jeschli/2configs/xserver/Xresources.nix new file mode 100644 index 0000000..e433a85 --- /dev/null +++ b/jeschli/2configs/xserver/Xresources.nix @@ -0,0 +1,52 @@ +{ config, lib, pkgs, ... }: + +with import <stockholm/lib>; + +pkgs.writeText "Xresources" /* xdefaults */ '' +  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:48,45-47:48,64:48,38:48,61:48,63: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.underline: true +  URxvt*colorUL: #4682B4 +  URxvt.perl-lib: ${pkgs.urxvt_perls}/lib/urxvt/perl +  URxvt*saveLines: 10000 + +  root-urxvt*background: #230000 +  root-urxvt*foreground: #e0c0c0 +  root-urxvt*BorderColor: #400000 +  root-urxvt*color0: #800000 +'' diff --git a/jeschli/2configs/xserver/default.nix b/jeschli/2configs/xserver/default.nix new file mode 100644 index 0000000..df06000 --- /dev/null +++ b/jeschli/2configs/xserver/default.nix @@ -0,0 +1,141 @@ +{ config, pkgs, ... }@args: +with import <stockholm/lib>; +let +  cfg = { +    cacheDir = cfg.dataDir; +    configDir = "/var/empty"; +    dataDir = "/run/xdg/${cfg.user.name}/xmonad"; +    user = config.krebs.users.jeschli; +  }; +in { + +  environment.systemPackages = [ +    pkgs.font-size +    pkgs.gitAndTools.qgit +    pkgs.mpv +    pkgs.sxiv +    pkgs.xdotool +    pkgs.xsel +    pkgs.zathura +  ]; + +  fonts.fonts = [ +    pkgs.xlibs.fontschumachermisc +  ]; + +  # TODO dedicated group, i.e. with a single user [per-user-setuid] +  # TODO krebs.setuid.slock.path vs /run/wrappers/bin +  krebs.setuid.slock = { +    filename = "${pkgs.slock}/bin/slock"; +    group = "wheel"; +    envp = { +      DISPLAY = ":${toString config.services.xserver.display}"; +      USER = cfg.user.name; +    }; +  }; + +  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; +   +    synaptics = { +      enable = true; +      twoFingerScroll = true; +      accelFactor = "0.035"; +    }; +  }; + +  systemd.services.display-manager.enable = false; + +  systemd.services.xmonad = { +    wantedBy = [ "multi-user.target" ]; +    requires = [ "xserver.service" ]; +    environment = { +      DISPLAY = ":${toString config.services.xserver.display}"; + +      XMONAD_CACHE_DIR = cfg.cacheDir; +      XMONAD_CONFIG_DIR = cfg.configDir; +      XMONAD_DATA_DIR = cfg.dataDir; + +      XMONAD_STARTUP_HOOK = pkgs.writeDash "xmonad-startup-hook" '' +        ${pkgs.xorg.xhost}/bin/xhost +LOCAL: & +        ${pkgs.xorg.xmodmap}/bin/xmodmap ${import ./Xmodmap.nix args} & +        ${pkgs.xorg.xrdb}/bin/xrdb ${import ./Xresources.nix args} & +        ${pkgs.xorg.xsetroot}/bin/xsetroot -solid '#1c1c1c' & +        wait +      ''; + +      # XXX JSON is close enough :) +      XMONAD_WORKSPACES0_FILE = pkgs.writeText "xmonad.workspaces0" (toJSON [ +        "dashboard" # we start here +        "stockholm" +        "pycharm" +        "chromium" +        "iRC" +        "git" +        "hipbird" +      ]); +    }; +    serviceConfig = { +      SyslogIdentifier = "xmonad"; +      ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p ${toString [ +        "\${XMONAD_CACHE_DIR}" +        "\${XMONAD_CONFIG_DIR}" +        "\${XMONAD_DATA_DIR}" +      ]}"; +      ExecStart = "${pkgs.xmonad-jeschli}/bin/xmonad"; +      ExecStop = "${pkgs.xmonad-jeschli}/bin/xmonad --shutdown"; +      User = cfg.user.name; +      WorkingDirectory = cfg.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" config.services.xserver.drivers)); +    }; +    serviceConfig = { +      SyslogIdentifier = "xserver"; +      ExecReload = "${pkgs.coreutils}/bin/echo NOP"; +      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 ${pkgs.xkeyboard_config}/etc/X11/xkb" +      ]; +    }; +  }; + +  systemd.services.urxvtd = { +    wantedBy = [ "multi-user.target" ]; +    reloadIfChanged = true; +    serviceConfig = { +      SyslogIdentifier = "urxvtd"; +      ExecReload = "${pkgs.coreutils}/bin/echo NOP"; +      ExecStart = "${pkgs.rxvt_unicode}/bin/urxvtd"; +      Restart = "always"; +      RestartSec = "2s"; +      StartLimitBurst = 0; +      User = cfg.user.name; +    }; +  }; +} diff --git a/jeschli/2configs/xserver/xserver.conf.nix b/jeschli/2configs/xserver/xserver.conf.nix new file mode 100644 index 0000000..6f34e01 --- /dev/null +++ b/jeschli/2configs/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/jeschli/5pkgs/default.nix b/jeschli/5pkgs/default.nix new file mode 100644 index 0000000..3fa5b5e --- /dev/null +++ b/jeschli/5pkgs/default.nix @@ -0,0 +1,11 @@ +with import <stockholm/lib>; + +self: super: + +# Import files and subdirectories like they are overlays. +foldl' mergeAttrs {} +  (map +    (name: import (./. + "/${name}") self super) +    (filter +      (name: name != "default.nix" && !hasPrefix "." name) +      (attrNames (readDir ./.)))) diff --git a/jeschli/5pkgs/simple/default.nix b/jeschli/5pkgs/simple/default.nix new file mode 100644 index 0000000..1b9d8c2 --- /dev/null +++ b/jeschli/5pkgs/simple/default.nix @@ -0,0 +1,24 @@ +with import <stockholm/lib>; + +self: super: + +let +  # This callPackage will try to detect obsolete overrides. +  callPackage = path: args: let +    override = self.callPackage path args; +    upstream = optionalAttrs (override ? "name") +      (super.${(parseDrvName override.name).name} or {}); +  in if upstream ? "name" && +        override ? "name" && +        compareVersions upstream.name override.name != -1 +    then trace "Upstream `${upstream.name}' gets overridden by `${override.name}'." override +    else override; +in + +  listToAttrs +    (map +      (name: nameValuePair (removeSuffix ".nix" name) +                           (callPackage (./. + "/${name}") {})) +      (filter +        (name: name != "default.nix" && !hasPrefix "." name) +        (attrNames (readDir ./.)))) diff --git a/jeschli/5pkgs/simple/xmonad-jeschli/default.nix b/jeschli/5pkgs/simple/xmonad-jeschli/default.nix new file mode 100644 index 0000000..5bb391f --- /dev/null +++ b/jeschli/5pkgs/simple/xmonad-jeschli/default.nix @@ -0,0 +1,294 @@ +{ pkgs, ... }: +pkgs.writeHaskell "xmonad-jeschli" { +  executables.xmonad = { +    extra-depends = [ +      "containers" +      "extra" +      "unix" +      "X11" +      "xmonad" +      "xmonad-contrib" +      "xmonad-stockholm" +    ]; +    text = /* haskell */ '' +{-# LANGUAGE DeriveDataTypeable #-} -- for XS +{-# LANGUAGE FlexibleContexts #-} -- for xmonad' +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE ScopedTypeVariables #-} + + +module Main where + +import Control.Exception +import Control.Monad.Extra (whenJustM) +import Graphics.X11.ExtraTypes.XF86 +import Text.Read (readEither) +import XMonad +import System.IO (hPutStrLn, stderr) +import System.Environment (getArgs, withArgs, getEnv, getEnvironment, lookupEnv) +import System.Posix.Process (executeFile) +import XMonad.Actions.DynamicWorkspaces ( addWorkspacePrompt, renameWorkspace +                                        , removeEmptyWorkspace) +import XMonad.Actions.GridSelect +import XMonad.Actions.CycleWS (toggleWS) +--import XMonad.Actions.CopyWindow ( copy ) +import XMonad.Layout.NoBorders ( smartBorders ) +import qualified XMonad.StackSet as W +import Data.Map (Map) +import qualified Data.Map as Map +-- TODO import XMonad.Layout.WorkspaceDir +import XMonad.Hooks.UrgencyHook (SpawnUrgencyHook(..), withUrgencyHook) +-- import XMonad.Layout.Tabbed +--import XMonad.Layout.MouseResizableTile +import XMonad.Layout.Reflect (reflectVert) +import XMonad.Layout.FixedColumn (FixedColumn(..)) +import XMonad.Hooks.Place (placeHook, smart) +import XMonad.Hooks.FloatNext (floatNextHook) +import XMonad.Actions.PerWorkspaceKeys (chooseAction) +import XMonad.Layout.PerWorkspace (onWorkspace) +--import XMonad.Layout.BinarySpacePartition + +--import XMonad.Actions.Submap +import XMonad.Stockholm.Pager +import XMonad.Stockholm.Rhombus +import XMonad.Stockholm.Shutdown + + +amixerPath :: FilePath +amixerPath = "${pkgs.alsaUtils}/bin/amixer" + +urxvtcPath :: FilePath +urxvtcPath = "${pkgs.rxvt_unicode}/bin/urxvtc" + +myFont :: String +myFont = "-schumacher-*-*-*-*-*-*-*-*-*-*-*-iso10646-*" + +main :: IO () +main = getArgs >>= \case +    ["--shutdown"] -> sendShutdownEvent +    _ -> mainNoArgs + +mainNoArgs :: IO () +mainNoArgs = do +    workspaces0 <- getWorkspaces0 +    xmonad +        -- $ withUrgencyHookC dzenUrgencyHook { args = ["-bg", "magenta", "-fg", "magenta", "-h", "2"], duration = 500000 } +        --                   urgencyConfig { remindWhen = Every 1 } +        -- $ withUrgencyHook borderUrgencyHook "magenta" +        -- $ withUrgencyHookC BorderUrgencyHook { urgencyBorderColor = "magenta" } urgencyConfig { suppressWhen = Never } +        $ withUrgencyHook (SpawnUrgencyHook "echo emit Urgency ") +        $ def +            { terminal          = urxvtcPath +            , modMask           = mod4Mask +            , keys              = myKeys +            , workspaces        = workspaces0 +            , layoutHook        = smartBorders $ FixedColumn 1 20 80 10 ||| Full +            -- , handleEventHook   = myHandleEventHooks <+> handleTimerEvent +            --, handleEventHook   = handleTimerEvent +            , manageHook        = placeHook (smart (1,0)) <+> floatNextHook +            , startupHook = +                whenJustM (liftIO (lookupEnv "XMONAD_STARTUP_HOOK")) +                          (\path -> forkFile path [] Nothing) +            , normalBorderColor  = "#1c1c1c" +            , focusedBorderColor = "#f000b0" +            , handleEventHook = handleShutdownEvent +            } + + +getWorkspaces0 :: IO [String] +getWorkspaces0 = +    try (getEnv "XMONAD_WORKSPACES0_FILE") >>= \case +      Left e -> warn (displaySomeException e) +      Right p -> try (readFile p) >>= \case +        Left e -> warn (displaySomeException e) +        Right x -> case readEither x of +          Left e -> warn e +          Right y -> return y +  where +    warn msg = hPutStrLn stderr ("getWorkspaces0: " ++ msg) >> return [] + +displaySomeException :: SomeException -> String +displaySomeException = displayException + + +forkFile :: FilePath -> [String] -> Maybe [(String, String)] -> X () +forkFile path args env = +    xfork (executeFile path False args env) >> return () + +spawnRootTerm :: X () +spawnRootTerm = +    forkFile +        urxvtcPath +        ["-name", "root-urxvt", "-e", "/run/wrappers/bin/su", "-"] +        Nothing + +spawnTermAt :: String -> X () +spawn | 
