diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # dnf-repo releases
 
+## 0.6.4 (2026-06-22)
+- fix handling of --only for enabled repos
+- don't run dnf from /etc/yum.repos.d/ to unbreak relative rpm paths
+
 ## 0.6.3 (2026-05-27)
 - fix 0.6.2 regression in dnf detection logic that defaulted to /usr/bin/dnf5
 - with dnf5 `--save` no longer uses config-manager since
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@
 `$ dnf-repo --version`
 
 ```
-0.6.3
+0.6.4
 ```
 `$ dnf-repo --help`
 
@@ -33,14 +33,14 @@
                 [-s|--save] [-4|--dnf4] [(-w|--weak-deps) | (-W|--no-weak-deps)]
                 [--exact] 
                 [(-d|--disable REPOPAT) | (-e|--enable REPOPAT) | 
-                  (-o|--only REPOPAT) | (-x|--expire REPOPAT) | 
-                  (-X|--clear-expires) | (-E|--delete-repofile REPOPAT) | 
-                  (-z|--timestamp REPOPAT) | (-t|--enable-testing) | 
-                  (-T|--disable-testing) | (-m|--enable-modular) | 
-                  (-M|--disable-modular) | --enable-debuginfo | 
-                  --disable-debuginfo | --enable-source | --disable-source | 
-                  (-c|--add-copr [SERVER/]COPR/PROJECT|URL) [--osname OSNAME] 
-                  [--copr-releasever RELEASEVER] |
+                  (-o|--only REPOPAT) | --base-mirror URL | 
+                  (-x|--expire REPOPAT) | (-X|--clear-expires) | 
+                  (-E|--delete-repofile REPOPAT) | (-z|--timestamp REPOPAT) | 
+                  (-t|--enable-testing) | (-T|--disable-testing) | 
+                  (-m|--enable-modular) | (-M|--disable-modular) | 
+                  --enable-debuginfo | --disable-debuginfo | --enable-source | 
+                  --disable-source | (-c|--add-copr [SERVER/]COPR/PROJECT|URL) 
+                  [--osname OSNAME] [--copr-releasever RELEASEVER] |
                   (-k|--add-koji REPO) | (-r|--add-repofile REPOFILEURL) 
                   [--repo-releasever RELEASEVER] |
                   (-u|--repourl URL)] [DNFARGS]
@@ -62,6 +62,8 @@
   -d,--disable REPOPAT     Disable repos
   -e,--enable REPOPAT      Enable repos
   -o,--only REPOPAT        Only use matching repos
+  --base-mirror URL        Override fedora metalink with a mirror baseurl (eg
+                           'cloudfront', or reset with 'metalink')
   -x,--expire REPOPAT      Expire repo cache (dnf4)
   -X,--clear-expires       Undo cache expirations (dnf4)
   -E,--delete-repofile REPOPAT
diff --git a/dnf-repo.cabal b/dnf-repo.cabal
--- a/dnf-repo.cabal
+++ b/dnf-repo.cabal
@@ -1,5 +1,5 @@
 name:                dnf-repo
-version:             0.6.3
+version:             0.6.4
 synopsis:            A dnf wrapper with fine control of enabled repos
 description:
         A command-line wrapper of the dnf package manager to
@@ -23,6 +23,7 @@
                      ||  == 9.6.7
                      ||  == 9.8.4
                      ||  == 9.10.3
+                     ||  == 9.12.4
 data-dir:            data
 data-files:          koji-REPO.repo
 
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -120,7 +120,8 @@
   hSetBuffering stdout NoBuffering
   unlessM (doesDirectoryExist yumReposD) $
     error' $ yumReposD +-+ "not found!"
-  withCurrentDirectory yumReposD $ do
+  (nameStates,actions) <-
+    withCurrentDirectory yumReposD $ do
     forM_ modes $
       \case
         AddCopr copr mosname mrelease ->
@@ -162,61 +163,62 @@
         _ -> return False
     when (or outputs && (save || moreoutput) && not quiet) $
       warning ""
-    mpkgmgr <-
-      if dnf4
-      then do
-        mdnf3 <- checkSystemPathFile "dnf-3"
-        case mdnf3 of
-          Just _ -> return $ Just Dnf4
-          Nothing -> error' "dnf-3 not found"
-      else do
-        mdnf5 <- checkSystemPathFile "dnf5"
-        case mdnf5 of
-          Just _ -> return $ Just Dnf5
-          Nothing -> do
-            mdnf3 <- checkSystemPathFile "dnf-3"
-            case mdnf3 of
-              Just _ -> return $ Just Dnf4
-              Nothing -> return Nothing
-    when save $
-      if null actions
-        then putStrLn "no changes to save"
-        else do
-        let changes = concatMap (saveRepo (mpkgmgr == Just Dnf4)) actions
-        unless (null changes) $ do
-          ok <- yesNo $ "Save changed repo" +-+ "enabled state" ++ ['s' | length changes > 1]
-          when ok $
-            if mpkgmgr == Just Dnf4
-            then doSudo dryrun debug (pkgMgrCmd Dnf4) $ "config-manager" : changes
-            else doSudo dryrun debug "sh" ["-c", unwords $ "sed" : "-i" : map show changes ++ ["/etc/yum.repos.d/*.repo"]]
-    if null args
-      then
-      when (null actions || listrepos) $ do
-      when save $ putStrLn ""
-      listRepos $ map (updateState actions) nameStates
+    return (nameStates,actions)
+  mpkgmgr <-
+    if dnf4
+    then do
+      mdnf3 <- checkSystemPathFile "dnf-3"
+      case mdnf3 of
+        Just _ -> return $ Just Dnf4
+        Nothing -> error' "dnf-3 not found"
+    else do
+      mdnf5 <- checkSystemPathFile "dnf5"
+      case mdnf5 of
+        Just _ -> return $ Just Dnf5
+        Nothing -> do
+          mdnf3 <- checkSystemPathFile "dnf-3"
+          case mdnf3 of
+            Just _ -> return $ Just Dnf4
+            Nothing -> return Nothing
+  when save $
+    if null actions
+      then putStrLn "no changes to save"
       else do
-      when save $ putStrLn ""
-      case mpkgmgr of
-        Just dnf ->
-          let repoargs = mapMaybe changeRepo actions
-              weakdeps = maybe [] (\w -> ["--setopt=install_weak_deps=" ++ show w]) mweakdeps
-              quietopt = if quiet then ("-q" :) else id
-              cachedir = ["--setopt=cachedir=/var/cache/dnf" </> relver | relver <- maybeToList (maybeReleaseVer args)]
-              extraargs =
-                -- special case for "dnf-repo [-c owner/project|-e repo] install"
-                case actions of
-                  [action] ->
-                    case action of
-                      Enable repo True | args == ["install"] ->
-                                           [takeWhileEnd (/= ':') repo]
-                      _ -> []
-                  _ -> []
-              -- FIXME default to "install" of no command?
-          in doSudo dryrun debug (pkgMgrCmd dnf) $
-             quietopt repoargs ++ cachedir ++ weakdeps ++ map mungeArg args ++
-             extraargs
-        -- FIXME rpm-ostree install supports --enablerepo
-        Nothing -> error' "missing dnf (rpm-ostree is not supported)"
+      let changes = concatMap (saveRepo (mpkgmgr == Just Dnf4)) actions
+      unless (null changes) $ do
+        ok <- yesNo $ "Save changed repo" +-+ "enabled state" ++ ['s' | length changes > 1]
+        when ok $
+          if mpkgmgr == Just Dnf4
+          then doSudo dryrun debug (pkgMgrCmd Dnf4) $ "config-manager" : changes
+          else doSudo dryrun debug "sh" ["-c", unwords $ "sed" : "-i" : map show changes ++ ["/etc/yum.repos.d/*.repo"]]
+  if null args
+    then
+    when (null actions || listrepos) $ do
+    when save $ putStrLn ""
+    listRepos $ map (updateState actions) nameStates
+    else do
+    when save $ putStrLn ""
+    case mpkgmgr of
+      Just dnf ->
+        let repoargs = mapMaybe changeRepo actions
+            weakdeps = maybe [] (\w -> ["--setopt=install_weak_deps=" ++ show w]) mweakdeps
+            quietopt = if quiet then ("-q" :) else id
+            cachedir = ["--setopt=cachedir=/var/cache/dnf" </> relver | relver <- maybeToList (maybeReleaseVer args)]
+            extraargs =
+              -- special case for "dnf-repo [-c owner/project|-e repo] install"
+              case actions of
+                [action] ->
+                  case action of
+                    Enable repo True | args == ["install"] ->
+                                         [takeWhileEnd (/= ':') repo]
+                    _ -> []
+                _ -> []
+            -- FIXME default to "install" of no command?
+        in doSudo dryrun debug (pkgMgrCmd dnf) $
+           quietopt repoargs ++ cachedir ++ weakdeps ++ map mungeArg args ++
+           extraargs
+      -- FIXME rpm-ostree install supports --enablerepo
+      Nothing -> error' "missing dnf (rpm-ostree is not supported)"
   where
     mungeArg :: String -> String
     mungeArg "distrosync" = "distro-sync"
diff --git a/src/State.hs b/src/State.hs
--- a/src/State.hs
+++ b/src/State.hs
@@ -218,28 +218,27 @@
     selectRepoMode mode acc (name,(enabled,file,murl)) =
       case mode of
         AddCopr repo _ _ ->
-          maybeChange repo isSuffixOf (not enabled) False (Enable name)
+          maybeChange repo isSuffixOf (not enabled) (Enable name)
         AddKoji repo ->
-          maybeChange repo isSuffixOf (not enabled) False (Enable name)
+          maybeChange repo isSuffixOf (not enabled) (Enable name)
         AddRepo repo _ ->
-          maybeChange (takeBaseName repo) isSuffixOf (not enabled) False (Enable name)
+          maybeChange (takeBaseName repo) isSuffixOf (not enabled) (Enable name)
         RepoURL url -> Just $ BaseURL url
         EnableRepo pat ->
-          maybeChange pat matchesRepo (not enabled) False (Enable name)
+          maybeChange pat matchesRepo (not enabled) (Enable name)
         DisableRepo pat ->
-          maybeChange pat matchesRepo enabled False (Disable name)
+          maybeChange pat matchesRepo enabled (Disable name)
         OnlyRepo pat ->
-          maybeChange pat matchesRepo (not enabled) True (Only name)
+          maybeChange pat matchesRepo True (Only name)
         ExpireRepo pat ->
-          maybeChange pat matchesRepo True False (Expire name)
+          maybeChange pat matchesRepo True (Expire name)
         ClearExpires -> Just UnExpire
         DeleteRepo pat ->
           maybeChange pat matchesRepo
           (not enabled || error ("disable repo before deleting:" +-+ name))
-          False
           (Delete file)
         TimeStampRepo pat ->
-          maybeChange pat matchesRepo (not enabled) False (TimeStamp name murl)
+          maybeChange pat matchesRepo (not enabled) (TimeStamp name murl)
         Specific change ->
           let substr =  repoSubstr change in
             if change `elem`
@@ -248,24 +247,21 @@
               maybeChange substr
               (\p n -> p `isInfixOf` n &&
                        repoStatus acc (removeInfix substr name))
-              (not enabled) False (Enable name)
+              (not enabled) (Enable name)
             else
-              maybeChange substr isInfixOf enabled False (Disable name)
+              maybeChange substr isInfixOf enabled (Disable name)
       where
-        maybeChange :: String -> (String -> String -> Bool) -> Bool -> Bool
+        maybeChange :: String -> (String -> String -> Bool) -> Bool
                     -> (Bool -> ChangeEnable) -> Maybe ChangeEnable
-        maybeChange pat matcher state always change =
+        maybeChange pat matcher state change =
           if pat `matcher` name
           then
-            if always
-            then Just $ change state
+            if state
+            then Just $ change True
             else
-              if state
-              then Just $ change True
-              else
-                if isGlob pat
-                then Nothing
-                else Just $ change False
+              if isGlob pat
+              then Nothing
+              else Just $ change False
           else Nothing
 
     repoStatus :: [ChangeEnable] -> String -> Bool
