about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--flake.lock27
-rw-r--r--flake.nix64
-rw-r--r--package.yaml3
-rwxr-xr-xscripts/nsp-console.sh7
-rwxr-xr-xscripts/toggle-compton.sh7
-rwxr-xr-xscripts/toggle-redshift.sh9
-rwxr-xr-xscripts/toggle-touchpad.sh7
-rwxr-xr-xscripts/toggle-trackpoint.sh7
-rwxr-xr-xscripts/xmobar/fcitx.sh12
-rwxr-xr-xscripts/xshot-select-upload.sh6
-rwxr-xr-xscripts/xshot-upload.sh6
-rw-r--r--src/lib/XMonad/Custom/Config.hs46
-rwxr-xr-xtest.sh44
-rw-r--r--treefmt.toml24
15 files changed, 178 insertions, 92 deletions
diff --git a/.gitignore b/.gitignore
index b384021..39c8a93 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 .direnv/
+.pre-commit-config.yaml
 .stack-work/
 cabal.project.local
 dist-newstyle/
diff --git a/flake.lock b/flake.lock
index 51dae57..f0c5f50 100644
--- a/flake.lock
+++ b/flake.lock
@@ -49,11 +49,36 @@
         "type": "github"
       }
     },
+    "pre-commit-hooks": {
+      "inputs": {
+        "flake-utils": [
+          "flake-utils"
+        ],
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1639823344,
+        "narHash": "sha256-jlsQb2y6A5dB1R0wVPLOfDGM0wLyfYqEJNzMtXuzCXw=",
+        "owner": "cachix",
+        "repo": "pre-commit-hooks.nix",
+        "rev": "ff9c0b459ddc4b79c06e19d44251daa8e9cd1746",
+        "type": "github"
+      },
+      "original": {
+        "owner": "cachix",
+        "ref": "master",
+        "repo": "pre-commit-hooks.nix",
+        "type": "github"
+      }
+    },
     "root": {
       "inputs": {
         "flake-compat": "flake-compat",
         "flake-utils": "flake-utils",
-        "nixpkgs": "nixpkgs"
+        "nixpkgs": "nixpkgs",
+        "pre-commit-hooks": "pre-commit-hooks"
       }
     }
   },
diff --git a/flake.nix b/flake.nix
index 426f9bd..9664dd0 100644
--- a/flake.nix
+++ b/flake.nix
@@ -24,25 +24,38 @@
       ref = "master";
       flake = false;
     };
+
+    pre-commit-hooks = {
+      type = "github";
+      owner = "cachix";
+      repo = "pre-commit-hooks.nix";
+      ref = "master";
+      inputs = {
+        nixpkgs.follows = "nixpkgs";
+        flake-utils.follows = "flake-utils";
+      };
+    };
   };
 
-  outputs = { self, nixpkgs, flake-utils, ... }:
-    flake-utils.lib.eachDefaultSystem (system:
+  outputs = inputs:
+    with inputs;
+    let name = "xmonad-ng";
+    in flake-utils.lib.eachDefaultSystem (system:
       let
         pkgs = nixpkgs.legacyPackages.${system};
 
         project = returnShellEnv:
           pkgs.haskellPackages.developPackage {
-            inherit returnShellEnv;
-            name = "xmonad-ng";
+            inherit name returnShellEnv;
             root = ./.;
             overrides = self: _:
               with pkgs.haskell.lib;
-              let version = "0.17.0";
+              let
+                mkPackage = packageName:
+                  dontCheck (self.callHackage packageName "0.17.0" { });
               in {
-                xmonad = dontCheck (self.callHackage "xmonad" version { });
-                xmonad-contrib =
-                  dontCheck (self.callHackage "xmonad-contrib" version { });
+                xmonad = mkPackage "xmonad";
+                xmonad-contrib = mkPackage "xmonad-contrib";
               };
             modifier = drv:
               pkgs.haskell.lib.addBuildTools drv (with pkgs.haskellPackages; [
@@ -57,8 +70,39 @@
       in {
         defaultPackage = project false;
 
-        devShell = project true;
+        checks.preCommit = pre-commit-hooks.lib.${system}.run {
+          src = ./.;
+          hooks = {
+            nix-linter.enable = true;
+            nixfmt.enable = true;
+            hpack.enable = true;
+            hlint.enable = true;
+            yamllint.enable = true;
+            brittany.enable = true;
+            shellcheck.enable = true;
+            shfmt = {
+              enable = true;
+              name = "shfmt";
+              entry = "${pkgs.shfmt}/bin/shfmt -s -w";
+              types = [ "shell" ];
+            };
+            prettier = {
+              enable = true;
+              types = [ ];
+              files = "\\.((yaml)|\\d)$";
+            };
+          };
+        };
+
+        shells = {
+          dev = project true;
+          commit = pkgs.mkShell {
+            inherit (self.checks.${system}.preCommit) shellHook;
+          };
+        };
+
+        devShell = self.shells.${system}.dev;
       }) // {
-        overlay = _: _: { xmonad-ng = self.defaultPackage; };
+        overlay = _: _: { ${name} = self.defaultPackage; };
       };
 }
diff --git a/package.yaml b/package.yaml
index e197d7b..30a47f9 100644
--- a/package.yaml
+++ b/package.yaml
@@ -40,8 +40,7 @@ executable:
     - -threaded
     - -v0
     - -with-rtsopts=-N
-  dependencies:
-    xmonad-ng
+  dependencies: xmonad-ng
   when:
     - condition: false
       other-modules: Paths_xmonad_ng
diff --git a/scripts/nsp-console.sh b/scripts/nsp-console.sh
index 510ecdb..4ac9e32 100755
--- a/scripts/nsp-console.sh
+++ b/scripts/nsp-console.sh
@@ -1,8 +1,7 @@
 #!/bin/sh
 
-if tmux list-sessions | grep "scratchpad"
-then
-    tmux attach-session -t "scratchpad"
+if tmux list-sessions | grep "scratchpad"; then
+	tmux attach-session -t "scratchpad"
 else
-    tmux new-session -s "scratchpad" -n "scratchpad" -c "$HOME"
+	tmux new-session -s "scratchpad" -n "scratchpad" -c "$HOME"
 fi
diff --git a/scripts/toggle-compton.sh b/scripts/toggle-compton.sh
index e5a3aaa..0fcb1bf 100755
--- a/scripts/toggle-compton.sh
+++ b/scripts/toggle-compton.sh
@@ -1,8 +1,7 @@
 #!/bin/sh
 
-if ! pgrep compton > /dev/null 2>&1
-then
-    compton -b
+if ! pgrep compton >/dev/null 2>&1; then
+	compton -b
 else
-    pkill compton
+	pkill compton
 fi
diff --git a/scripts/toggle-redshift.sh b/scripts/toggle-redshift.sh
index 2813aea..2af8258 100755
--- a/scripts/toggle-redshift.sh
+++ b/scripts/toggle-redshift.sh
@@ -1,9 +1,8 @@
 #!/usr/bin/env bash
 
-if ! pgrep redshift > /dev/null 2>&1
-then
-    redshift &
-    disown redshift
+if ! pgrep redshift >/dev/null 2>&1; then
+	redshift &
+	disown redshift
 else
-    pkill redshift
+	pkill redshift
 fi
diff --git a/scripts/toggle-touchpad.sh b/scripts/toggle-touchpad.sh
index 449bd5b..2a1c061 100755
--- a/scripts/toggle-touchpad.sh
+++ b/scripts/toggle-touchpad.sh
@@ -3,9 +3,8 @@
 ID=$(xinput list | grep -Eo 'TouchPad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}')
 STATE=$(xinput list-props "$ID" | awk '/Device Enabled/ {print $4}')
 
-if [ "$STATE" = 1 ]
-then
-    xinput disable "$ID"
+if [ "$STATE" = 1 ]; then
+	xinput disable "$ID"
 else
-    xinput enable "$ID"
+	xinput enable "$ID"
 fi
diff --git a/scripts/toggle-trackpoint.sh b/scripts/toggle-trackpoint.sh
index 1429dcf..d385553 100755
--- a/scripts/toggle-trackpoint.sh
+++ b/scripts/toggle-trackpoint.sh
@@ -3,9 +3,8 @@
 ID=$(xinput list | grep -Eo 'TrackPoint\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}')
 STATE=$(xinput list-props "$ID" | awk '/Device Enabled/ {print $4}')
 
-if [ "$STATE" = 1 ]
-then
-    xinput disable "$ID"
+if [ "$STATE" = 1 ]; then
+	xinput disable "$ID"
 else
-    xinput enable "$ID"
+	xinput enable "$ID"
 fi
diff --git a/scripts/xmobar/fcitx.sh b/scripts/xmobar/fcitx.sh
index 48eefa0..f159c41 100755
--- a/scripts/xmobar/fcitx.sh
+++ b/scripts/xmobar/fcitx.sh
@@ -2,14 +2,12 @@
 
 STATUS="$(fcitx-remote)"
 
-if [ "$STATUS" = 0 ]
-then
-    OUT="Off"
-elif [ "$STATUS" = 1 ]
-then
-    OUT="Disabled"
+if [ "$STATUS" = 0 ]; then
+	OUT="Off"
+elif [ "$STATUS" = 1 ]; then
+	OUT="Disabled"
 else
-    OUT="Enabled"
+	OUT="Enabled"
 fi
 
 echo "$OUT"
diff --git a/scripts/xshot-select-upload.sh b/scripts/xshot-select-upload.sh
index 040251e..70c08c4 100755
--- a/scripts/xshot-select-upload.sh
+++ b/scripts/xshot-select-upload.sh
@@ -2,6 +2,6 @@
 
 PIC="$HOME/pictures/screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"
 
-maim --format=png --hidecursor --quality 8 --select "$PIC" && \
-    curl --form "file=@$PIC" "https://0x0.st" | \
-    xclip -quiet
+maim --format=png --hidecursor --quality 8 --select "$PIC" &&
+	curl --form "file=@$PIC" "https://0x0.st" |
+	xclip -quiet
diff --git a/scripts/xshot-upload.sh b/scripts/xshot-upload.sh
index ed037de..17b614a 100755
--- a/scripts/xshot-upload.sh
+++ b/scripts/xshot-upload.sh
@@ -2,6 +2,6 @@
 
 PIC="$HOME/pictures/screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"
 
-maim --format=png --hidecursor --quality 8 "$PIC" && \
-    curl --form "file=@$PIC" "https://0x0.st" | \
-    xclip -quiet
+maim --format=png --hidecursor --quality 8 "$PIC" &&
+	curl --form "file=@$PIC" "https://0x0.st" |
+	xclip -quiet
diff --git a/src/lib/XMonad/Custom/Config.hs b/src/lib/XMonad/Custom/Config.hs
index 84f4069..4a4af2d 100644
--- a/src/lib/XMonad/Custom/Config.hs
+++ b/src/lib/XMonad/Custom/Config.hs
@@ -11,8 +11,8 @@
 --
 
 module XMonad.Custom.Config
-    ( myConfig
-    ) where
+  ( myConfig
+  ) where
 
 import           Flow
 import           XMonad
@@ -31,24 +31,24 @@ import           XMonad.Hooks.UrgencyHook
 import           XMonad.Layout.IndependentScreens
 
 myConfig = do
-    screens <- countScreens
-    def { borderWidth        = C.border
-        , workspaces         = C.myWorkspaces screens
-        , layoutHook         = C.layoutHook
-        , terminal           = C.term C.applications
-        , normalBorderColor  = C.colorN
-        , focusedBorderColor = C.colorF
-        , modMask            = C.modMask
-        , keys               = C.keys
-        , mouseBindings      = C.mouseBindings
-        , manageHook         = C.manageHook
-        , handleEventHook    = C.handleEventHook
-        , focusFollowsMouse  = False
-        , clickJustFocuses   = False
-        }
-        |> withUrgencyHook (borderUrgencyHook C.red1)
-        |> withNavigation2DConfig C.myNavigation2DConfig
-        |> ewmh
-        |> ewmhFullscreen
-        |> docks
-        |> (return :: a -> IO a)
+  screens <- countScreens
+  def { borderWidth        = C.border
+      , workspaces         = C.myWorkspaces screens
+      , layoutHook         = C.layoutHook
+      , terminal           = C.term C.applications
+      , normalBorderColor  = C.colorN
+      , focusedBorderColor = C.colorF
+      , modMask            = C.modMask
+      , keys               = C.keys
+      , mouseBindings      = C.mouseBindings
+      , manageHook         = C.manageHook
+      , handleEventHook    = C.handleEventHook
+      , focusFollowsMouse  = False
+      , clickJustFocuses   = False
+      }
+    |> withUrgencyHook (borderUrgencyHook C.red1)
+    |> withNavigation2DConfig C.myNavigation2DConfig
+    |> ewmh
+    |> ewmhFullscreen
+    |> docks
+    |> (return :: a -> IO a)
diff --git a/test.sh b/test.sh
index fd86536..3fe68f2 100755
--- a/test.sh
+++ b/test.sh
@@ -22,28 +22,28 @@ DISPLAY_NUMBER=5
 ################################################################################
 while getopts "hs:" o; do
 	case "${o}" in
-		d)
-			SCREEN_SIZE=$OPTARG
-			;;
-
-		h)
-			usage
-			exit
-			;;
-
-		n)
-			DISPLAY_NUMBER=$OPTARG
-			;;
-
-		s)
-			SCREENS=$OPTARG
-			;;
-
-		*)
-			echo
-			usage
-			exit 1
-			;;
+	d)
+		SCREEN_SIZE=$OPTARG
+		;;
+
+	h)
+		usage
+		exit
+		;;
+
+	n)
+		DISPLAY_NUMBER=$OPTARG
+		;;
+
+	s)
+		SCREENS=$OPTARG
+		;;
+
+	*)
+		echo
+		usage
+		exit 1
+		;;
 	esac
 done
 
diff --git a/treefmt.toml b/treefmt.toml
new file mode 100644
index 0000000..ff039ef
--- /dev/null
+++ b/treefmt.toml
@@ -0,0 +1,24 @@
+[formatter.haskell]
+command = ""
+includes = ["*.hs"]
+
+[formatter.shell]
+command = "/bin/sh"
+options = [
+    "-euc",
+    """
+shellcheck "$@"
+shfmt -s -w "$@"
+    """,
+    "--",
+]
+includes = ["*.sh"]
+
+[formatter.prettier]
+command = "prettier"
+options = ["--write"]
+includes = ["*.yaml"]
+
+[formatter.nix]
+command = "nixfmt"
+includes = ["*.nix"]

Consider giving Nix/NixOS a try! <3