diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,17 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
 and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
 
+## [1.8.0] - 2025-07-11
+
+### Added
+
+- daemon: the path to the daemon's socket can be configured with the `CACHIX_DAEMON_SOCKET` environment variable @joshuaspence
+
+### Changed
+
+- daemon: the permissions on the daemon's socket file are now set to 666 @joshuaspence
+- deps: build with GHC 9.8
+
 ## [1.7.9] - 2025-06-02
 
 ### Fixed
diff --git a/cachix.cabal b/cachix.cabal
--- a/cachix.cabal
+++ b/cachix.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.2
 name:               cachix
-version:            1.7.9
+version:            1.8.0
 synopsis:
   Command-line client for Nix binary cache hosting https://cachix.org
 
diff --git a/src/Cachix/Daemon.hs b/src/Cachix/Daemon.hs
--- a/src/Cachix/Daemon.hs
+++ b/src/Cachix/Daemon.hs
@@ -40,6 +40,7 @@
 import Network.Socket qualified as Socket
 import Network.Socket.ByteString qualified as Socket.BS
 import Protolude hiding (bracket)
+import System.Environment (lookupEnv)
 import System.IO.Error (isResourceVanishedError)
 import System.Posix.Process (getProcessID)
 import System.Posix.Signals qualified as Signal
@@ -73,7 +74,10 @@
   daemonEventLoop <- EventLoop.new
   daemonPid <- getProcessID
 
-  daemonSocketPath <- maybe getSocketPath pure (Options.daemonSocketPath daemonOptions)
+  envSocket <- fmap toS <$> lookupEnv "CACHIX_DAEMON_SOCKET"
+  let cmdSocket = Options.daemonSocketPath daemonOptions
+  daemonSocketPath <- maybe getSocketPath pure (envSocket <|> cmdSocket)
+
   daemonSocketThread <- newEmptyMVar
   daemonClients <- SocketStore.newSocketStore
 
diff --git a/src/Cachix/Daemon/Client.hs b/src/Cachix/Daemon/Client.hs
--- a/src/Cachix/Daemon/Client.hs
+++ b/src/Cachix/Daemon/Client.hs
@@ -15,6 +15,7 @@
 import Network.Socket.ByteString qualified as Socket.BS
 import Network.Socket.ByteString.Lazy qualified as Socket.LBS
 import Protolude
+import System.Environment (lookupEnv)
 import System.IO.Error (isResourceVanishedError)
 
 data SocketError
@@ -130,7 +131,8 @@
 
 withDaemonConn :: Maybe FilePath -> (Socket.Socket -> IO a) -> IO a
 withDaemonConn optionalSocketPath f = do
-  socketPath <- maybe getSocketPath pure optionalSocketPath
+  envSocketPath <- lookupEnv "CACHIX_DAEMON_SOCKET"
+  socketPath <- maybe getSocketPath pure (envSocketPath <|> optionalSocketPath)
   bracket (open socketPath `onException` failedToConnectTo socketPath) Socket.close f
   where
     open socketPath = do
diff --git a/src/Cachix/Daemon/Listen.hs b/src/Cachix/Daemon/Listen.hs
--- a/src/Cachix/Daemon/Listen.hs
+++ b/src/Cachix/Daemon/Listen.hs
@@ -41,6 +41,7 @@
 import System.Environment qualified as System
 import System.FilePath ((</>))
 import System.IO.Error (isDoesNotExistError, isResourceVanishedError)
+import System.Posix.Files (setFileMode)
 
 -- TODO: reconcile with Client
 data ListenError
@@ -59,11 +60,13 @@
   EventLoop DaemonEvent a ->
   FilePath ->
   m ()
-listen eventloop daemonSocketPath = forever $ do
-  E.bracketOnError (openSocket daemonSocketPath) closeSocket $ \sock -> do
-    liftIO $ Socket.listen sock Socket.maxListenQueue
-    (conn, _peerAddr) <- liftIO $ Socket.accept sock
-    EventLoop.send eventloop (AddSocketClient conn)
+listen eventloop daemonSocketPath = do
+  sock <- openSocket daemonSocketPath
+  E.bracket (pure sock) closeSocket $ \sock' -> do
+    liftIO $ Socket.listen sock' Socket.maxListenQueue
+    forever $ do
+      (conn, _peerAddr) <- liftIO $ Socket.accept sock'
+      EventLoop.send eventloop (AddSocketClient conn)
 
 -- | Handle incoming messages from a client.
 --
@@ -148,7 +151,7 @@
   deleteSocketFileIfExists socketFilePath
   sock <- Socket.socket Socket.AF_UNIX Socket.Stream Socket.defaultProtocol
   Socket.bind sock $ Socket.SockAddrUnix socketFilePath
-  -- setFileMode socketFilePath socketFileMode
+  setFileMode socketFilePath 0o666
   return sock
   where
     deleteSocketFileIfExists path =
