diff options
| author | lassulus <lassulus@lassul.us> | 2018-04-26 12:54:03 +0200 | 
|---|---|---|
| committer | lassulus <lassulus@lassul.us> | 2018-04-26 12:54:03 +0200 | 
| commit | e7b4301dda04e17ca5802cddd2c037617674b599 (patch) | |
| tree | 1e76afe6aa0aa8a4ac08387f7926a8ea64165e58 | |
| parent | b1ecac535ecccaad05fcdea394f527e5cf88af3a (diff) | |
| parent | b5d1c2f5e6ab4a44f81366e1b9de0b366d8aa871 (diff) | |
Merge remote-tracking branch 'prism/staging/jeschli'
| -rw-r--r-- | jeschli/1systems/brauerei/config.nix | 30 | ||||
| -rw-r--r-- | jeschli/2configs/emacs.nix | 27 | ||||
| -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 | 
11 files changed, 639 insertions, 27 deletions
| diff --git a/jeschli/1systems/brauerei/config.nix b/jeschli/1systems/brauerei/config.nix index 1203720a5..49f439a06 100644 --- a/jeschli/1systems/brauerei/config.nix +++ b/jeschli/1systems/brauerei/config.nix @@ -6,6 +6,8 @@      ./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; @@ -57,7 +59,6 @@      terminator      tmux      wget -  #  rxvt_unicode    # editors      emacs    # internet @@ -65,6 +66,7 @@      chromium      google-chrome    # programming languages +    exercism      go      gcc      ghc @@ -73,6 +75,9 @@    # go tools      golint      gotools +  # rust +    cargo +    rustc    # dev tools      gnumake      jetbrains.pycharm-professional @@ -105,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. @@ -115,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 = [ @@ -139,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 index d9e6c854a..4c52432d3 100644 --- a/jeschli/2configs/emacs.nix +++ b/jeschli/2configs/emacs.nix @@ -31,6 +31,7 @@ let      (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 @@ -45,30 +46,26 @@ let        (setq org-agenda-files (quote ("~/projects/notes")))      )    ''; -  emacsFile = '' +  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} -    (custom-set-variables -     ;; custom-set-variables was added by Custom. -     ;; If you edit it by hand, you could mess it up, so be careful. -     ;; Your init file should contain only one such instance. -     ;; If there is more than one, they won't work right. -     '(inhibit-startup-screen t) -     '(org-agenda-files nil) -     '(package-selected-packages -       (quote -        (smex ox-jira org-plus-contrib org-mime org-jira neotree molokai-theme let-alist helm-fuzzy-find go-guru go-autocomplete flymake-go exec-path-from-shell evil-org cl-lib-highlight bbdb atom-one-dark-theme)))) -     ${orgMode}    ''; -  dotEmacs = pkgs.writeText "dot-emacs" emacsFile; -  emacs = (pkgs.emacsPackagesNgGen pkgs.emacs).emacsWithPackages (epkgs: [ +  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 ${emacs}/bin/emacs -q -l ${dotEmacs} "$@" +    exec ${emacsWithCustomPackages}/bin/emacs -q -l ${dotEmacs} "$@"    '';  in {    environment.systemPackages = [ diff --git a/jeschli/2configs/xdg.nix b/jeschli/2configs/xdg.nix new file mode 100644 index 000000000..18bac9b38 --- /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 000000000..d2b1b2604 --- /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 000000000..e433a855e --- /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 000000000..df06000f3 --- /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 000000000..6f34e0150 --- /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 000000000..3fa5b5e85 --- /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 000000000..1b9d8c235 --- /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 000000000..5bb391f98 --- /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 () +spawnTermAt ws = do +    env <- liftIO getEnvironment +    let env' = ("XMONAD_SPAWN_WORKSPACE", ws) : env +    forkFile urxvtcPath [] (Just env') + +myKeys :: XConfig Layout -> Map (KeyMask, KeySym) (X ()) +myKeys conf = Map.fromList $ +    [ ((_4  , xK_Escape ), forkFile "/run/wrappers/bin/slock" [] Nothing) +    , ((_4S , xK_c      ), kill) + +    , ((_4  , xK_p      ), forkFile "${pkgs.pass}/bin/passmenu" ["--type"] Nothing) + +    , ((_4  , xK_x      ), chooseAction spawnTermAt) +    , ((_4C , xK_x      ), spawnRootTerm) + +    --, ((_4  , xK_F1     ), withFocused jojo) +    --, ((_4  , xK_F1     ), printAllGeometries) + +    , ((0   , xK_Print   ), gets windowset >>= allWorkspaceNames >>= pager pagerConfig (windows . W.view) ) +    , ((_S  , xK_Print   ), gets windowset >>= allWorkspaceNames >>= pager pagerConfig (windows . W.shift) ) +    , ((_C  , xK_Print   ), toggleWS) +    , ((_4  , xK_Print   ), rhombus horseConfig (liftIO . hPutStrLn stderr) ["Correct", "Horse", "Battery", "Staple", "Stuhl", "Tisch"] ) +     +    -- %! Rotate through the available layout algorithms +    , ((_4  , xK_space  ), sendMessage NextLayout) +    , ((_4S , xK_space  ), setLayout $ XMonad.layoutHook conf) -- reset layout + +    ---- BinarySpacePartition +    --, ((_4  , xK_l), sendMessage $ ExpandTowards R) +    --, ((_4  , xK_h), sendMessage $ ExpandTowards L) +    --, ((_4  , xK_j), sendMessage $ ExpandTowards D) +    --, ((_4  , xK_k), sendMessage $ ExpandTowards U) +    --, ((_4S , xK_l), sendMessage $ ShrinkFrom R) +    --, ((_4S , xK_h), sendMessage $ ShrinkFrom L) +    --, ((_4S , xK_j), sendMessage $ ShrinkFrom D) +    --, ((_4S , xK_k), sendMessage $ ShrinkFrom U) +    --, ((_4  , xK_n), sendMessage Rotate) +    --, ((_4S , xK_n), sendMessage Swap) + +    ---- mouseResizableTile +    --, ((_4    , xK_u), sendMessage ShrinkSlave) +    --, ((_4    , xK_i), sendMessage ExpandSlave) + +    -- move focus up or down the window stack +    --, ((_4  , xK_m      ), windows W.focusMaster) +    , ((_4  , xK_j      ), windows W.focusDown) +    , ((_4  , xK_k      ), windows W.focusUp) + +    -- modifying the window order +    , ((_4S , xK_m      ), windows W.swapMaster) +    , ((_4S , xK_j      ), windows W.swapDown) +    , ((_4S , xK_k      ), windows W.swapUp) + +    -- resizing the master/slave ratio +    , ((_4  , xK_h      ), sendMessage Shrink) -- %! Shrink the master area +    , ((_4  , xK_l      ), sendMessage Expand) -- %! Expand the master area + +    -- floating layer support +    , ((_4  , xK_t      ), withFocused $ windows . W.sink)  -- make tiling + +    -- increase or decrease number of windows in the master area +    , ((_4  , xK_comma  ), sendMessage $ IncMasterN 1) +    , ((_4  , xK_period ), sendMessage $ IncMasterN (-1)) + +    , ((_4  , xK_a      ), addWorkspacePrompt def) +    , ((_4  , xK_r      ), renameWorkspace def) +    , ((_4  , xK_Delete ), removeEmptyWorkspace) + +    , ((_4  , xK_Return ), toggleWS) +    --,  (0   , xK_Print   ) & \k -> (k, gridselectWorkspace wsGSConfig { gs_navigate = makeGSNav k } W.view) +    --,  (_4  , xK_v      ) & \k -> (k, gridselectWorkspace wsGSConfig { gs_navigate = makeGSNav k } W.view) +    --,  (_4S , xK_v      ) & \k -> (k, gridselectWorkspace wsGSConfig { gs_navigate = makeGSNav k } W.shift) +    --,  (_4  , xK_b      ) & \k -> (k, goToSelected        wGSConfig  { gs_navigate = makeGSNav k }) +    , ((noModMask, xF86XK_AudioLowerVolume), amixer ["sset", "Master", "5%-"]) +    , ((noModMask, xF86XK_AudioRaiseVolume), amixer ["sset", "Master", "5%+"]) +    , ((noModMask, xF86XK_AudioMute), amixer ["sset", "Master", "toggle"]) +    ] +    where +    _4 = mod4Mask +    _C = controlMask +    _S = shiftMask +    _M = mod1Mask +    _4C = _4 .|. _C +    _4S = _4 .|. _S +    _4M = _4 .|. _M +    _4CM = _4 .|. _C .|. _M +    _4SM = _4 .|. _S .|. _M + +    amixer args = forkFile amixerPath args Nothing + + +pagerConfig :: PagerConfig +pagerConfig = def +    { pc_font           = myFont +    , pc_cellwidth      = 64 +    --, pc_cellheight     = 36 -- TODO automatically keep screen aspect +    --, pc_borderwidth    = 1 +    --, pc_matchcolor     = "#f0b000" +    , pc_matchmethod    = MatchPrefix +    --, pc_colors         = pagerWorkspaceColors +    , pc_windowColors   = windowColors +    } +    where +    windowColors _ _ _ True _ = ("#ef4242","#ff2323") +    windowColors wsf m c u wf = do +        let y = defaultWindowColors wsf m c u wf +        if m == False && wf == True +            then ("#402020", snd y) +            else y + +horseConfig :: RhombusConfig +horseConfig = def +    { rc_font           = myFont +    , rc_cellwidth      = 64 +    --, rc_cellheight     = 36 -- TODO automatically keep screen aspect +    --, rc_borderwidth    = 1 +    --, rc_matchcolor     = "#f0b000" +    , rc_matchmethod    = MatchPrefix +    --, rc_colors         = pagerWorkspaceColors +    --, rc_paint          = myPaint +    } + +wGSConfig :: GSConfig Window +wGSConfig = def +    { gs_cellheight = 20 +    , gs_cellwidth = 192 +    , gs_cellpadding = 5 +    , gs_font = myFont +    , gs_navigate = navNSearch +    } + +-- wsGSConfig = def +--     { gs_cellheight = 20 +--     , gs_cellwidth = 64 +--     , gs_cellpadding = 5 +--     , gs_font = myFont +--     , gs_navigate = navNSearch +--     } + +-- custom navNSearch +--makeGSNav :: (KeyMask, KeySym) -> TwoD a (Maybe a) +--makeGSNav esc = nav +--    where +--    nav = makeXEventhandler $ shadowWithKeymap keyMap navNSearchDefaultHandler +--    keyMap = Map.fromList +--        [ (esc              , cancel) +--        , ((0,xK_Escape)    , cancel) +--        , ((0,xK_Return)    , select) +--        , ((0,xK_Left)      , move (-1, 0) >> nav) +--        , ((0,xK_Right)     , move ( 1, 0) >> nav) +--        , ((0,xK_Down)      , move ( 0, 1) >> nav) +--        , ((0,xK_Up)        , move ( 0,-1) >> nav) +--        , ((0,xK_BackSpace) , transformSearchString (\s -> if (s == "") then "" else init s) >> nav) +--        ] +--    -- The navigation handler ignores unknown key symbols, therefore we const +--    navNSearchDefaultHandler (_,s,_) = do +--        transformSearchString (++ s) +--        nav + + +(&) :: a -> (a -> c) -> c +(&) = flip ($) + +allWorkspaceNames :: W.StackSet i l a sid sd -> X [i] +allWorkspaceNames ws = +    return $ map W.tag (W.hidden ws) ++ [W.tag $ W.workspace $ W.current ws] +  ''; +  }; +} diff --git a/jeschli/default.nix b/jeschli/default.nix index 7886fef49..b57932719 100644 --- a/jeschli/default.nix +++ b/jeschli/default.nix @@ -1,9 +1,9 @@ -_: +{ pkgs, ... }:  {    imports = [      ../krebs      ./2configs -#    ./3modules -#    ./5pkgs    ]; + +  nixpkgs.config.packageOverrides = import ./5pkgs pkgs;  } | 
