Initial commit
This commit is contained in:
commit
8ba34427d3
25
flake.lock
Normal file
25
flake.lock
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1637345130,
|
||||||
|
"narHash": "sha256-UoR2tCBvMFdCNxQDSrnc08MbwOMH2mYbQo8ZwZH00I0=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "41aaf69b7dd245611467fa7344dd244eacd915d1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
8
flake.nix
Normal file
8
flake.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
description = "XMonad module";
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs }: {
|
||||||
|
|
||||||
|
nixosModule = import ./modules/xmonad/default.nix;
|
||||||
|
};
|
||||||
|
}
|
31
modules/xmonad/buildXmonad.nix
Normal file
31
modules/xmonad/buildXmonad.nix
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# Create the xmonad.dhall end result with all the binaries resolved
|
||||||
|
#
|
||||||
|
# Use it as such: callPackage ./buildXmonad.nix {} ./xmonad.dhall { inherit teams; }
|
||||||
|
{ lib, xmonad-masser, dhallPackages, runCommand }:
|
||||||
|
path:
|
||||||
|
packages:
|
||||||
|
|
||||||
|
let
|
||||||
|
xmonadDeps = with dhallPackages;
|
||||||
|
buildDhallDirectoryPackage {
|
||||||
|
name = "xmonad-masser";
|
||||||
|
src = "${xmonad-masser}/share/x86_64-linux-ghc-8.10.7/xmonad-masser-0.1.0.0/dhall";
|
||||||
|
file = "package.dhall";
|
||||||
|
source = false;
|
||||||
|
document = false;
|
||||||
|
dependencies = [ (Prelude.overridePackage { file = "package.dhall"; }) ];
|
||||||
|
};
|
||||||
|
xmonadInput = runCommand "packages.dhall"
|
||||||
|
packages
|
||||||
|
''
|
||||||
|
substituteAll ${path} $out
|
||||||
|
'';
|
||||||
|
xmonadConfig = with dhallPackages; buildDhallPackage {
|
||||||
|
name = "xmonad.dhall";
|
||||||
|
code = xmonadInput;
|
||||||
|
dependencies = [ Prelude xmonadDeps ];
|
||||||
|
source = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
in xmonadConfig
|
||||||
|
|
235
modules/xmonad/default.nix
Normal file
235
modules/xmonad/default.nix
Normal file
@ -0,0 +1,235 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.programs.xmonad;
|
||||||
|
|
||||||
|
xmonadConfig = with pkgs; callPackage ./buildXmonad.nix {inherit (pkgs.haskellPackages) xmonad-masser; } cfg.dhallConfigPath cfg.packages;
|
||||||
|
gifs = with pkgs; stdenv.mkDerivation {
|
||||||
|
name = "gifs";
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://gateway.pinata.cloud/ipfs/QmQRb5Zt9QRbd6VuUuQ44wfkBaN4BYWfeH9JALpM2DU9dJ/animated.tar.gz";
|
||||||
|
sha256 = "14qb9y9zkmz13yl87713ib0wjcri727kgd3dwn0d6jrh94z948sq";
|
||||||
|
};
|
||||||
|
installPhase = ''
|
||||||
|
mkdir $out
|
||||||
|
ls $out
|
||||||
|
cp -rv *.{gif,mp4} $out/
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
saver_mpv = pkgs.writeScript "saver_mpv" ''
|
||||||
|
#!${pkgs.bash}/bin/bash
|
||||||
|
PATH=${makeBinPath [pkgs.mpv pkgs.coreutils pkgs.findutils]}:$PATH
|
||||||
|
video=`find ${gifs} -type f | sort -R | head -n 1`
|
||||||
|
mpv \
|
||||||
|
--no-input-terminal \
|
||||||
|
--really-quiet \
|
||||||
|
--scale=oversample \
|
||||||
|
--loop \
|
||||||
|
--no-stop-screensaver \
|
||||||
|
--wid="''${XSCREENSAVER_WINDOW}" \
|
||||||
|
--no-audio "$video" &
|
||||||
|
exec ${pkgs.xsecurelock}/libexec/xsecurelock/saver_blank
|
||||||
|
'';
|
||||||
|
lock = pkgs.writeScript "lock.sh" ''
|
||||||
|
#!${pkgs.bash}/bin/bash
|
||||||
|
PATH=${makeBinPath [pkgs.gnupg pkgs.coreutils pkgs.findutils]}:$PATH
|
||||||
|
|
||||||
|
gpg-connect-agent reloadagent /bye
|
||||||
|
|
||||||
|
|
||||||
|
export XSECURELOCK_SAVER=${saver_mpv}
|
||||||
|
export XSECURELOCK_PASSWORD_PROMPT="emoticon"
|
||||||
|
${pkgs.xsecurelock}/bin/xsecurelock
|
||||||
|
'';
|
||||||
|
|
||||||
|
in {
|
||||||
|
options = {
|
||||||
|
programs.xmonad = {
|
||||||
|
enable = mkEnableOption "Enable xmonad";
|
||||||
|
dhallConfigPath = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
};
|
||||||
|
packages = mkOption {
|
||||||
|
type = types.attrsOf types.package;
|
||||||
|
default = {};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
source-code-pro
|
||||||
|
dmenu
|
||||||
|
gnome3.zenity
|
||||||
|
rofi
|
||||||
|
haskellPackages.xmobar
|
||||||
|
xlibs.xmodmap
|
||||||
|
xlibs.xev
|
||||||
|
xlibs.xset
|
||||||
|
xorg.xbacklight
|
||||||
|
xclip
|
||||||
|
xcalib
|
||||||
|
i3lock
|
||||||
|
];
|
||||||
|
services.screen-locker = {
|
||||||
|
enable = true;
|
||||||
|
lockCmd = "${lock}";
|
||||||
|
};
|
||||||
|
services.random-background = {
|
||||||
|
enable = true;
|
||||||
|
enableXinerama = true;
|
||||||
|
imageDirectory = "%h/backgrounds";
|
||||||
|
};
|
||||||
|
services.picom = {
|
||||||
|
enable = true;
|
||||||
|
activeOpacity = "1.0";
|
||||||
|
inactiveOpacity = "0.95";
|
||||||
|
backend = "glx";
|
||||||
|
fade = true;
|
||||||
|
fadeDelta = 5;
|
||||||
|
opacityRule = [ "100:name *= 'i3lock'"];
|
||||||
|
};
|
||||||
|
xsession = {
|
||||||
|
enable = true;
|
||||||
|
windowManager.xmonad = {
|
||||||
|
enable = true;
|
||||||
|
enableContribAndExtras = true;
|
||||||
|
extraPackages = h: [h.xmonad-contrib h.xmonad-masser];
|
||||||
|
config =
|
||||||
|
|
||||||
|
let toAppKey = k: _: "${k} :: FilePath";
|
||||||
|
toApp = k: v: ''Application {_applicationName = "${k}", _applicationAction = "${v}"}'';
|
||||||
|
applications = concatStringsSep "\n , " (mapAttrsToList toApp cfg.applications);
|
||||||
|
orNothingStr = x: if null == x then "Nothing" else ''Just "${x}"'';
|
||||||
|
quoted = x: ''"${x}"'';
|
||||||
|
toTopic = k: v: ''TopicRule {_topicRuleName = "${k}", _topicRuleHome = ${orNothingStr v.home}, _topicRuleAction = ${orNothingStr v.action}, _topicRuleClasses = [${concatStringsSep ", " (map quoted v.classes)}]}'';
|
||||||
|
topics = concatStringsSep "\n , " (mapAttrsToList toTopic cfg.topics);
|
||||||
|
toSearch = k: v: ''Search {_searchName="${k}", _searchKey="${v.key}", _searchUrl="${v.url}"}'';
|
||||||
|
searches = concatStringsSep "\n , " (mapAttrsToList toSearch cfg.searches);
|
||||||
|
in pkgs.writeText "xmonad.hs"
|
||||||
|
''
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE NamedFieldPuns #-}
|
||||||
|
module Main where
|
||||||
|
-- This is autogenerated file, don't touch
|
||||||
|
|
||||||
|
import XMonad.Config.MasseR
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = masser
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
initExtra = ''
|
||||||
|
xmodmap ~/.Xmodmap
|
||||||
|
${pkgs.xcape}/bin/xcape -e 'Hyper_L=Tab'
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
services.dunst = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
global = {
|
||||||
|
geometry = "300x5-30+20";
|
||||||
|
indicate_hidden = "yes";
|
||||||
|
sort = "yes";
|
||||||
|
word_wrap = "no";
|
||||||
|
stack_duplicates = "yes";
|
||||||
|
show_indicators = "yes";
|
||||||
|
browser = "${pkgs.firefox}/bin/firefox";
|
||||||
|
transparency = "0";
|
||||||
|
separator_height = "2";
|
||||||
|
padding = "8";
|
||||||
|
horizontal_padding = 8;
|
||||||
|
frame_width = "8";
|
||||||
|
frame_color = "#aaaaaa";
|
||||||
|
separator_color = "frame";
|
||||||
|
font = "Monospace 8";
|
||||||
|
format = "<b>%s</b>\\n%b";
|
||||||
|
};
|
||||||
|
urgency_low = {
|
||||||
|
background = "#222222";
|
||||||
|
foreground = "#888888";
|
||||||
|
};
|
||||||
|
urgency_normal = {
|
||||||
|
background = "#285577";
|
||||||
|
foreground = "#ffffff";
|
||||||
|
};
|
||||||
|
urgency_critical = {
|
||||||
|
background = "#900000";
|
||||||
|
foreground = "#ffffff";
|
||||||
|
frame_color = "#ff0000";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services.unclutter = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
home.file.".xmonad/xmonad.dhall".source = xmonadConfig + "/source.dhall";
|
||||||
|
# programs.xmonad =
|
||||||
|
# let
|
||||||
|
# musicToggle = pkgs.writeScript "musictoggle" ''
|
||||||
|
# ${pkgs.mpc_cli}/bin/mpc toggle
|
||||||
|
# '';
|
||||||
|
# # musicCurrent = with pkgs; writeScript "musiccurrent" ''
|
||||||
|
# # export PATH=${lib.makeBinPath [sp gawk]}
|
||||||
|
# # sp current | awk '/^Title/ {$1 = ""; print $0}'
|
||||||
|
# # '';
|
||||||
|
# musicCurrent = with pkgs; writeScript "musiccurrent" ''
|
||||||
|
# export PATH=${lib.makeBinPath [mpc_cli]}
|
||||||
|
# mpc --format "%title%" current
|
||||||
|
# '';
|
||||||
|
# xmobarConf = pkgs.writeText "xmobar" ''
|
||||||
|
# Config {
|
||||||
|
# font = "xft:Inconsolata-9"
|
||||||
|
# , bgColor = "#3F3F3F"
|
||||||
|
# , fgColor = "#DCDCCC"
|
||||||
|
# , position = Top
|
||||||
|
# , lowerOnStart = True
|
||||||
|
# , pickBroadest = True
|
||||||
|
# , commands = [
|
||||||
|
# Run MultiCpu ["-t", "CPU: <total>%"] 30
|
||||||
|
# , Run Memory ["-t", "Mem: <usedbar> (<cache>M)"] 3600
|
||||||
|
# , Run Date "%a %b %_d %Y %H:%M:%S" "date" 20
|
||||||
|
# , Run StdinReader
|
||||||
|
# , Run Battery [ "--template" , "Batt: <acstatus>"
|
||||||
|
# , "--Low" , "10" -- units: %
|
||||||
|
# , "--High" , "80" -- units: %
|
||||||
|
# , "--low" , "darkred"
|
||||||
|
# , "--normal" , "darkorange"
|
||||||
|
# , "--high" , "darkgreen"
|
||||||
|
#
|
||||||
|
# , "--" -- battery specific options
|
||||||
|
# -- discharging status
|
||||||
|
# , "-o" , "<left>% (<timeleft>)"
|
||||||
|
# -- AC "on" status
|
||||||
|
# , "-O" , "<fc=#dAA520>Charging</fc>"
|
||||||
|
# -- charged status
|
||||||
|
# , "-i" , "<fc=#006000>Charged</fc>"
|
||||||
|
# ] 120
|
||||||
|
# , Run DynNetwork [ "--template" , "<dev>: <tx>kB/s|<rxbar>kB/s"
|
||||||
|
# , "--Low" , "1000" -- units: B/s
|
||||||
|
# , "--High" , "500000" -- units: B/s
|
||||||
|
# , "--normal" , "darkorange"
|
||||||
|
# , "--high" , "darkred"
|
||||||
|
# ] 30
|
||||||
|
# ]
|
||||||
|
# , sepChar = "%"
|
||||||
|
# , alignSep = "}{"
|
||||||
|
# , template = "%StdinReader% }{%dynnetwork% | %battery% | %multicpu% | %memory% | <fc=#FFFFCC>%date%</fc>"
|
||||||
|
# }
|
||||||
|
# '';
|
||||||
|
# # browser = "${pkgs.qutebrowser}/bin/qutebrowser";
|
||||||
|
# chromiumApp = name: url: pkgs.writeScriptBin "${name}" ''
|
||||||
|
# ${pkgs.chromium}/bin/chromium --user-data-dir=~/.config/chromium-${name} --app=${url}
|
||||||
|
# '';
|
||||||
|
# custom_teams = chromiumApp "teams" "https://teams.microsoft.com";
|
||||||
|
# flowdock = chromiumApp "flowdock" "https://flowdock.com/app";
|
||||||
|
# wiki = chromiumApp "wiki" "https://wiki.relexsolutions.com";
|
||||||
|
# xmonadConfig = with pkgs; callPackage ./buildXmonad.nix {} cfg.dhallConfigPath cfg.packages;
|
||||||
|
# in
|
||||||
|
# {
|
||||||
|
# enable = true;
|
||||||
|
# configPackage = xmonadConfig;
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user