Compare commits

...

62 commits

Author SHA1 Message Date
Samae
8fe9b3bb4d Update flake 2024-09-13 17:51:00 +03:00
Samae
91926d5975 Update 2024-08-25 12:43:11 +03:00
Samae
2d0db0063a Flake update 2024-08-06 08:27:53 +03:00
Samae
1f14f27da7 No incognito 2024-08-06 07:59:03 +03:00
Samae
0b4d60b948 New projects 2024-05-09 15:11:40 +03:00
Samae
7dbaaaf3d2 Add bindings for dunstctl set-paused 2023-10-24 10:02:31 +03:00
Samae
4701c62ce3 Update 2023-10-20 23:06:03 +03:00
Samae
f1a42476a2 Switch to neovide 2023-08-12 15:02:24 +03:00
Samae
2aafb06e25 Gooddbye patchage 2023-08-02 20:00:17 +03:00
Samae
57782266e2 Enable FuzzyMatch 2023-08-01 12:21:23 +03:00
Samae
591521b585 Add sähköpoika project 2023-07-06 19:15:14 +03:00
Samae
b9bd40efbe Move away from logseq 2023-04-02 10:57:15 +03:00
Samae
1d76815c13 back to element 2023-01-17 19:21:40 +02:00
EEva
d30047585b Remove easy-hls 2023-01-11 22:43:32 +02:00
EEva
6335946eeb Add flake support 2022-12-04 18:52:49 +02:00
EEva
2de387233c fix cinny 2022-10-01 13:43:06 +03:00
EEva
4393aafc87 Changes to chat tools 2022-10-01 13:40:56 +03:00
EEva
ea3951d543 Bump version 2022-04-17 08:32:44 +03:00
EEva
e660118219 Changes 2022-02-19 17:24:39 +02:00
EEva
964e01a3fa Moving back to vim 2021-12-09 23:09:00 +02:00
EEva
1eaae43e46 Add youtube project 2021-11-13 21:47:36 +02:00
EEva
a2faa356ab Add dunst 2021-11-04 20:41:24 +02:00
EEva
37c58fbd2c some fixes 2021-10-05 23:40:55 +03:00
EEva
11fb80639d Update Iosevka statement 2021-08-25 20:09:31 +03:00
EEva
96fcfeee3f Some changes 2021-08-25 04:51:46 +03:00
EEva
33ae468829 some cleanup 2021-08-23 00:02:59 +03:00
EEva
a39a26509e Add m8c projects 2021-07-23 22:54:29 +03:00
EEva
fe08cd4141 Move to emacs(client) 2021-07-15 19:20:30 +03:00
EEva (JPotier)
381753c2a0 New projects 2021-05-30 13:07:01 +03:00
EEva (JPotier)
a9cf599139 Add a few more projects 2021-05-06 17:23:24 +03:00
EEva (JPotier)
1d3c55f3e9 Fix pass 2021-05-06 17:23:07 +03:00
EEva (JPotier)
e206492ae9 Add new project 2021-04-18 15:50:37 +03:00
EEva (JPotier)
9fd4e4c1a5 Add LSP support 2021-04-18 15:50:27 +03:00
EEva (JPotier)
2cf1863ef3 Shorten the list of return passes shown when searching 2021-04-02 09:44:53 +03:00
EEva (JPotier)
b6b5e0d467 Project shuffle 2021-03-30 18:46:00 +03:00
EEva (JPotier)
c2aca9ce98 Add new shortcut to center the currently focused window 2021-01-06 10:51:39 +02:00
EEva (JPotier)
b04bc2b679 More apps 2021-01-03 22:13:55 +02:00
EEva (JPotier)
f990027814 Add a few projects 2020-12-26 11:05:29 +02:00
EEva (JPotier)
c768c1ac7c Move to alacritty 2020-12-14 21:49:03 +02:00
EEva (JPotier)
412957c518 Jailbreak base 2020-11-24 20:43:42 +02:00
EEva (JPotier)
368de76deb Add singleApp helper 2020-11-07 09:04:05 +02:00
EEva (JPotier)
3a5d170fe9 move to mlterm 2020-10-17 11:59:18 +03:00
EEva (JPotier)
1cc3ddd9f3 Add ewmh 2020-10-16 19:28:13 +03:00
EEva (JPotier)
e383427104 Prepare EWMH hints 2020-07-25 18:01:23 +03:00
EEva (JPotier)
281accb59c Add notes workspace 2020-03-28 17:41:16 +02:00
EEva (JPotier)
257b473ae1 Shift anoying floating windows 2020-03-21 10:50:12 +02:00
EEva (JPotier)
77a9fd5c11 Update smartspacing 2020-03-10 15:51:05 +02:00
EEva (JPotier)
c5b4569491 Declare other modules 2020-03-10 15:42:24 +02:00
EEva (JPotier)
e8a3d89468 Nord colors 2020-03-08 09:51:14 +02:00
EEva (JPotier)
cc119c89d5 Moar fufture? 2020-03-07 19:51:21 +02:00
EEva (JPotier)
34ebd77a58 Future is coming 2020-03-07 19:14:17 +02:00
EEva (JPotier)
c578bf77d2 Some changes 2020-03-07 17:53:04 +02:00
EEva (JPotier)
037d8df111 Several updates bundle 2019-09-28 15:55:07 +03:00
EEva (JPotier)
c2226d9e19 Projects for home, not work 2019-05-19 20:33:16 +03:00
EEva (JPotier)
3d82dd30c7 This computer does not have copy 2019-05-16 21:17:22 +03:00
afacb0eac5 Adding password manager for my own good 2019-05-16 09:06:31 +03:00
1600ae6e77 Merge branch 'master' of framagit.org:mpo/xmonad-config 2019-05-16 09:05:44 +03:00
eeva
b5b91cdd8d Changes 2019-01-27 21:20:08 +02:00
eeva
82ae92f620 yt-app 2018-06-23 18:28:05 +03:00
eeva
02ef1ead52 Add Project firefox 2018-06-09 10:44:40 +03:00
eeva
a3c2e1680d Add project steam (autostart) 2018-06-08 08:42:44 +03:00
eeva
c41263a44e Default project 2018-06-03 19:11:02 +03:00
16 changed files with 517 additions and 123 deletions

1
.envrc Normal file
View file

@ -0,0 +1 @@
use flake

3
.gitignore vendored
View file

@ -2,7 +2,10 @@
artwork/
*.hi
*.o
.direnv/
prompt-history
xmonad-x86_64-linux
xmonad.errors
xmonad.state
dist-newstyle
result*

5
CHANGELOG.md Normal file
View file

@ -0,0 +1,5 @@
# Revision history for xmonad-config
## 0.1.0.0 -- YYYY-mm-dd
* First version. Released on an unsuspecting world.

2
Setup.hs Normal file
View file

@ -0,0 +1,2 @@
import Distribution.Simple
main = defaultMain

27
flake.lock Normal file
View file

@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1725983898,
"narHash": "sha256-4b3A9zPpxAxLnkF9MawJNHDtOOl6ruL0r6Og1TEDGCE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1355a0cbfeac61d785b7183c0caaec1f97361b43",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

57
flake.nix Normal file
View file

@ -0,0 +1,57 @@
{
description = "Build my xmonad config";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
outputs = {
self,
nixpkgs,
}: let
forAllSystems = function:
nixpkgs.lib.genAttrs ["x86_64-linux" "aarch64-linux"] (system:
function rec {
inherit system;
compilerVersion = "ghc966";
pkgs = nixpkgs.legacyPackages.${system};
hsPkgs = pkgs.haskell.packages.${compilerVersion}.override {
overrides = hfinal: hprev: {
# Internal Packages
xmonad-config = hfinal.callCabal2nix "xmonad-config" ./. {};
xmonad-contrib = pkgs.haskell.lib.compose.doJailbreak (pkgs.haskell.lib.compose.overrideCabal (drv: {
version = "0.18.1";
sha256 = "sha256-BXOdIErNhNNS3slNBhiskH/zljVREjx0fu836BOGZDI=";
})
hprev.xmonad-contrib);
xmonad-extras = pkgs.haskell.lib.compose.doJailbreak (pkgs.haskell.lib.compose.overrideCabal (drv: {
version = "0.17.2";
sha256 = "sha256-KAqC6sDbvd79lhyByfbA0cYwSINJ+JkivsieUE2rm2U=";
})
hprev.xmonad-extras);
};
};
});
in {
formatter = forAllSystems ({pkgs, ...}: pkgs.alejandra);
packages = forAllSystems ({hsPkgs, ...}: ({
default = hsPkgs.xmonad-config;
}));
devShells = forAllSystems ({
hsPkgs,
pkgs,
...
}: {
default = hsPkgs.shellFor {
name = "xmonad-config";
packages = p: [
p.xmonad-config
];
buildInputs = with pkgs; [
hsPkgs.haskell-language-server
hsPkgs.cabal-install
cabal2nix
haskellPackages.ghcid
];
};
});
};
}

View file

@ -4,11 +4,12 @@ module KeyBindings (
) where
import Control.Monad (void)
import Data.Foldable (forM_)
import Data.List (sort, isSuffixOf)
import Data.Maybe (isJust)
import Graphics.X11.Types
import System.Exit
import Text.EditDistance
-- import Text.EditDistance
import XMonad
import XMonad.Actions.CycleWS
import XMonad.Actions.DynamicProjects
@ -17,13 +18,18 @@ import XMonad.Layout.ToggleLayouts
import XMonad.Operations
import XMonad.Prompt
import XMonad.Prompt.ConfirmPrompt
import XMonad.Prompt.FuzzyMatch
import XMonad.Prompt.Shell
import XMonad.Util.EZConfig
import XMonad.Util.NamedScratchpad
import qualified Solarized as S
import qualified Nord as N
import qualified Scratchpad as R
import qualified XMonad.StackSet as W
-- Custom (in libs)
import Password (passPrompt)
modify :: XConfig l -> XConfig l
modify conf = conf
{ modMask = mod4Mask -- Use the "Win" key for the mod key
@ -49,7 +55,7 @@ modify conf = conf
, ("M-S-<Delete>", spawn "/run/current-system/sw/bin/mpc pause; /run/current-system/sw/bin/xset s activate")
, ("M-S-<Left>", shiftToPrev >> prevWS)
, ("M-S-<Right>", shiftToNext >> nextWS)
, ("M-s s", spawn "/run/current-system/sw/bin/flameshot gui")
, ("M-s s", spawn "flameshot gui")
, ("M-s t", spawn "/run/current-system/sw/bin/scrot /tmp/screen.png")
-- Workspace and tasks
, ("M-b", switchProjectPrompt promptConfig)
@ -57,40 +63,57 @@ modify conf = conf
, ("M-p n", switchProjectPrompt promptConfig)
, ("M-p r", renameProjectPrompt promptConfig)
, ("M-p s", shellPrompt promptConfig)
, ("M-p c", withFocused centerWindow)
, ("M-d", passPrompt promptConfig)
-- Scratchpads
, ("M-p p", namedScratchpadAction R.pads "htop")
-- Dunst
, ("C-<Space>", spawn "dunstctl close")
, ("C-S-<Space>", spawn "dunstctl close-all")
, ("M-n p", spawn "dunstctl set-paused toggle")
]
viewProject :: WorkspaceId -> X ()
viewProject id = do
project <- lookupProject id
case project of
Just p -> switchProject p
Nothing -> return ()
forM_ project switchProject
-- Borrowed from https://www.reddit.com/r/xmonad/comments/gzq316/how_can_i_centre_a_floating_window_without/fthtx29/
centerWindow :: Window -> X ()
centerWindow win = do
(_, W.RationalRect x y w h) <- floatLocation win
windows $ W.float win (W.RationalRect ((1 - w) / 2) ((1 - h) / 2) w h)
return ()
promptConfig = def
{ position = Bottom
, alwaysHighlight = True
, bgColor = S.magenta
, bgHLight = S.base0
, borderColor = S.magenta
, borderColor = N.nord9
-- Normal
, bgColor = N.nord9
, fgColor = N.background
-- Selection
, bgHLight = N.nord6
, fgHLight = N.background
--
, defaultText = ""
, fgColor = S.base02
, fgHLight = S.base03
, font = "xft:Iosevka Term:style=Regular:size=8"
, font = "xft:Iosevka Samae:style=Regular:size=8:charwidth=5"
, height = 24
, promptBorderWidth = 5
-- Fuzzysearch by default
, searchPredicate = fuzzyMatch
, sorter = fuzzySort
}
-- Slightly taken from
-- https://mail.haskell.org/pipermail/xmonad/2010-October/010671.html
data FuzzySpawn = FuzzySpawn deriving (Read, Show)
instance XPrompt FuzzySpawn where showXPrompt _ = "RunC: "
fuzzyPrompt config = do
cmds <- io getCommands
let compl s
| null s = []
| otherwise = let weight c = levenshteinDistance defaultEditCosts s c
in map snd $ take 20 $ sort $ map (\c -> (weight c,c)) cmds
mkXPrompt FuzzySpawn config (return . compl) spawn
-- -- Slightly taken from
-- -- https://mail.haskell.org/pipermail/xmonad/2010-October/010671.html
-- data FuzzySpawn = FuzzySpawn deriving (Read, Show)
-- instance XPrompt FuzzySpawn where showXPrompt _ = "RunC: "
-- fuzzyPrompt config = do
-- cmds <- io getCommands
-- let compl s
-- | null s = []
-- | otherwise = let weight c = levenshteinDistance defaultEditCosts s c
-- in map snd $ take 20 $ sort $ map (\c -> (weight c,c)) cmds
-- mkXPrompt FuzzySpawn config (return . compl) spawn
--

View file

@ -9,4 +9,3 @@ modify :: XConfig l -> XConfig l
modify conf = conf
{ logHook = logHook conf >> updatePointer (0.5,0.5) (0,0)
}

91
lib/Nord.hs Normal file
View file

@ -0,0 +1,91 @@
module Nord
( nord0
, nord1
, nord2
, nord3
, nord4
, nord5
, nord6
, nord7
, nord8
, nord9
, nord10
, nord11
, nord12
, nord13
, nord14
, nord15
, yellow
, orange
, red
, purple
, green
, background
, backgroundhl
, foreground
, foregroundhl
, foregroundll
) where
-- POLAR NIGHT
-- The origin color or the Polar Night palette.
nord0 = "#2E3440";
-- A brighter shade color based on nord0.
nord1 = "#3B4252";
-- An even more brighter shade color of nord0.
nord2 = "#434C5E";
-- The brightest shade color based on nord0.
nord3 = "#4C566A";
-- SNOW STORM
-- The origin color or the Snow Storm palette.
nord4 = "#D8DEE9";
-- A brighter shade color of nord4.
nord5 = "#E5E9F0";
-- The brightest shade color based on nord4.
nord6 = "#ECEFF4";
-- FROST
-- A calm and highly contrasted color reminiscent of frozen polar water.
nord7 = "#8FBCBB";
-- The bright and shiny primary accent color reminiscent of pure and clear ice.
nord8 = "#88C0D0";
-- A more darkened and less saturated color reminiscent of arctic waters.
nord9 = "#81A1C1";
-- A dark and intensive color reminiscent of the deep arctic ocean.
nord10 = "#5E81AC";
-- AURORA
-- RED
nord11 = "#BF616A";
-- ORANGE
nord12 = "#D08770";
-- YELLOW
nord13 = "#EBCB8B";
-- GREEN
nord14 = "#A3BE8C";
-- PURPLE
nord15 = "#B48EAD";
foregroundhl = nord6
foreground = nord5
foregroundll = nord4
backgroundhl = nord1
background = nord0
red = nord11
orange = nord12
yellow = nord13
green = nord14
purple = nord15

68
lib/Password.hs Normal file
View file

@ -0,0 +1,68 @@
-- Initially from
-- https://github.com/MasseR/xmonad-masser/blob/master/src/XMonad/Password.hs
module Password (passGeneratePrompt, passPrompt) where
import Control.Monad.Trans (liftIO)
import Data.Function (on)
import Data.List (foldl', scanl', sort, sortBy)
import System.Directory (getHomeDirectory)
import System.FilePath.Posix (dropExtension, takeExtension, (</>))
import System.Posix.Env (getEnv)
import XMonad.Core
import XMonad.Prompt
import XMonad.Util.Run (runProcessWithInput)
newtype Pass = Pass { passLabel :: String }
-- Rosetta code levenshtein
levenshtein :: String -> String -> Int
levenshtein s1 s2 = last $ foldl' transform [0..length s1] s2
where
transform [] _ = []
transform ns@(n:ns1) c = scanl' calc (n+1) $ zip3 s1 ns ns1
where
calc z (c1, x, y) = minimum [y+1, z+1, x + (fromEnum (c1 /= c) * 2)]
instance XPrompt Pass where
showXPrompt p = passLabel p <> ": "
commandToComplete _ = id
nextCompletion _ = getNextCompletion
passGeneratePrompt :: XPConfig -> X ()
passGeneratePrompt _ = return () -- Not implemented
passPrompt :: XPConfig -> X ()
passPrompt = mkPassPrompt "Select password" selectPassword
mkPassPrompt :: String -> (String -> X ()) -> XPConfig -> X ()
mkPassPrompt label f conf = do
-- I'm just sorting here, but could use some kind of fuzzy matching instead,
-- but it requires a bit more effort
passwords <- sort <$> liftIO getPasswords
mkXPrompt (Pass label) conf (passComplFun passwords) f
where
getPasswords = do
passwordStoreDir <- (</> "pass") <$> getHomeDirectory
files <- runProcessWithInput "find"
[ passwordStoreDir, "-type", "f", "-name", "*.gpg", "-printf"
, "%p\n"] []
return . lines $ files
-- | Find all entries (`allPasses`) matching `input`
passComplFun :: [String] -> String -> IO [String]
passComplFun allPasses input = pure $
sortBy (compare `on` levenshtein input)
. take 10
. filter (consumes input)
$ allPasses
where
consumes [] _ = True -- everything consumed
consumes (_:_) [] = False -- all not consumed
consumes (a:xs) (a':ys) | a == a' = consumes xs ys
| otherwise = consumes (a:xs) ys
selectPassword :: String -> X ()
selectPassword pass = spawn $ "gpg --decrypt " ++ pass ++ " | copy"
-- “copy” comes with the xmonad module in the nix configuration

View file

@ -6,70 +6,131 @@ import XMonad
import XMonad.Actions.DynamicProjects
import XMonad.Util.Run
term = "kitty"
spawnGuiTextEditor :: X ()
spawnGuiTextEditor = safeSpawn "neovide" []
singleTermAppWithName :: String -> String -> Project
singleTermAppWithName name app = Project
{ projectName = name
, projectDirectory = "/tmp"
, projectStartHook = Just $ do safeSpawn term ["zsh","-c",app]
}
singleAppWithName :: String -> String -> Project
singleAppWithName name app = Project
{ projectName = name
, projectDirectory = "/tmp"
, projectStartHook = Just $ do spawn app
}
singleApp :: String -> Project
singleApp app = singleAppWithName app app
projects :: [Project]
projects = [ Project { projectName = "admin"
, projectDirectory = "~/admin"
, projectStartHook = Just $ do safeSpawn "vim" ["-g"]
safeSpawnProg "st"
projects =
[ singleApp "carla"
, singleApp "obs"
, singleApp "reaper"
, singleApp "renoise"
, singleApp "mixxx"
, singleAppWithName "Books" "calibre"
, singleAppWithName "discord" "Discord"
, singleAppWithName "matrix" "element-desktop"
, singleAppWithName "signal" "signal-desktop"
, singleAppWithName "vcv" "Rack"
, singleTermAppWithName "email" "neomutt"
, Project { projectName = "admin"
, projectDirectory = "~/admin/nixos-config"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "mordor"
, projectDirectory = "~/mordor"
, projectStartHook = Just $ do safeSpawn "vim" ["-g"]
safeSpawnProg "st"
, Project { projectName = "nixpkgs"
, projectDirectory = "~/admin/nixpkgs"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "mordor-docs"
, projectDirectory = "~/mordor-2"
, projectStartHook = Just $ do safeSpawn "vim" ["-g"]
safeSpawnProg "st"
, Project { projectName = "overlays-personal"
, projectDirectory = "~/admin/overlays-personal"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "mordor-other"
, projectDirectory = "~/mordor-3"
, projectStartHook = Just $ do safeSpawn "vim" ["-g"]
safeSpawnProg "st"
}
, Project { projectName = "email"
, projectDirectory = "~/mail"
, projectStartHook = Just $ do safeSpawnProg "st"
}
, Project { projectName = "frs"
, Project { projectName = "steam"
, projectDirectory = "/tmp"
, projectStartHook = Just $ do safeSpawnProg "frs"
, projectStartHook = Just $ safeSpawn "steam" ["-pipewire"]
}
, Project { projectName = "fre"
, Project { projectName = "youtube"
, projectDirectory = "/tmp"
, projectStartHook = Just $ do safeSpawnProg "fre"
, projectStartHook = Just $ safeSpawn "chromium"
["--app=youtube.com"]
}
, Project { projectName = "network-graph"
, projectDirectory = "~/relex/catch-a-network-bug/csvplotter"
, projectStartHook = Just $ do safeSpawn "zathura" ["weekXGraph.pdf"]
safeSpawnProg "st"
, Project { projectName = "cdc-config"
, projectDirectory = "~/admin/cdc-config"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "orc"
, Project { projectName = "saehkoepoika-config"
, projectDirectory = "~/admin/saehkoepoika-configuration-nix"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "cdc-documentation"
, projectDirectory = "~/admin/cdc-documentation"
, projectStartHook = Just $ do
safeSpawnProg term
spawnGuiTextEditor
}
, Project { projectName = "adventOfCode"
, projectDirectory = "~/candy/adventofcode"
, projectStartHook = Just $ do
safeSpawnProg term
spawnGuiTextEditor
}
, Project { projectName = "rukokuoppa"
, projectDirectory = "~/candy/rukokuoppa"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "notes"
, projectDirectory = "~/zk/org-roam-private"
, projectStartHook = Just $ safeSpawn "emacs" ["~/zk/org-roam-private"]
}
, Project { projectName = "groceries"
, projectDirectory = "/tmp"
, projectStartHook = Just $ do safeSpawnProg "st"
, projectStartHook = Just $ safeSpawnProg "obsidian"
}
, Project { projectName = "mordor-ops"
, projectDirectory = "~/relex/mordor-ops"
, projectStartHook = Just $ do safeSpawn "vim" ["-g"]
safeSpawnProg "st"
, Project { projectName = "xmonad"
, projectDirectory = "~/.xmonad"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "mordor-deploy"
, projectDirectory = "~/relex/mordor-deploy"
, projectStartHook = Just $ do safeSpawn "vim" ["-g"]
safeSpawnProg "st"
, Project { projectName = "waymonad"
, projectDirectory = "~/candy/waymonad"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "scaleout-ops"
, projectDirectory = "~/relex/scaleout-ops"
, projectStartHook = Just $ do safeSpawn "vim" ["-g"]
safeSpawnProg "st"
, Project { projectName = "accounting"
, projectDirectory = "~/accounting"
, projectStartHook = Just $ do safeSpawnProg term
}
, Project { projectName = "arrangements"
, projectDirectory = "~/candy/Arrangements"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "flim"
, projectDirectory = "/flims/rtorrent/download"
, projectStartHook = Just $ do safeSpawnProg term
}
, Project { projectName = "sound"
, projectDirectory = "/tmp"
, projectStartHook = Just $ do safeSpawnProg "pavucontrol"
safeSpawnProg "easyeffects"
}
, Project { projectName = "daily"
, Project { projectName = "web"
, projectDirectory = "/tmp"
, projectStartHook = Just $ do safeSpawn "nix" ["run", "nixpkgs.chromium", "-c", "chromium"]
, projectStartHook = Just $ do spawn "firefox"
}
]

View file

@ -12,11 +12,11 @@ import qualified XMonad.StackSet as W
modify :: XConfig l -> XConfig l
modify conf = conf
{ manageHook = namedScratchpadManageHook pads
{ manageHook = manageHook conf <> namedScratchpadManageHook pads
}
pads =
[ NS "htop" "/run/current-system/sw/bin/st -t htop -e tmux" (title =? "htop")
[ NS "htop" "kitty --title htop tmux" (title =? "htop")
(customFloating $ W.RationalRect (1/3) (1/3) (1/3) (1/3))
-- , NS "stardict" "stardict" (className =? "Stardict")
-- (customFloating $ W.RationalRect (1/6) (1/6) (2/3) (2/3))

View file

@ -6,7 +6,7 @@ module StatusBar (
import Data.List
import Data.Monoid
import Solarized as S
import Nord as N
import XMonad.Core
import XMonad.Hooks.DynamicBars (dynStatusBarStartup,dynStatusBarEventHook,multiPP)
import XMonad.Hooks.DynamicLog
@ -38,17 +38,17 @@ killXmobar :: IO ()
killXmobar = return ()
otherPP = currentPP
{ ppCurrent = xmobarColor S.foreground S.background
, ppVisible = xmobarColor S.foreground S.background
, ppHidden = xmobarColor S.foreground S.background
, ppHiddenNoWindows = xmobarColor S.backgroundhl S.background
{ ppCurrent = xmobarColor N.foreground N.background
, ppVisible = xmobarColor N.foreground N.background
, ppHidden = xmobarColor N.foreground N.background
, ppHiddenNoWindows = xmobarColor N.backgroundhl N.background
}
currentPP = def
{ ppCurrent = xmobarColor' S.orange
, ppVisible = xmobarColor' S.yellow -- other screen
, ppHidden = xmobarColor' S.foreground -- other workspaces with windows
, ppHiddenNoWindows = xmobarColor' S.foregroundll -- other workspaces
{ ppCurrent = xmobarColor' N.orange
, ppVisible = xmobarColor' N.yellow -- other screen
, ppHidden = xmobarColor' N.foreground -- other workspaces with windows
, ppHiddenNoWindows = xmobarColor' N.foregroundll -- other workspaces
, ppSep = " "
, ppWsSep = " "
, ppLayout = printLayout

15
shell.nix Normal file
View file

@ -0,0 +1,15 @@
{pkgs}: let
inherit (pkgs) callPackage fetchFromGitHub mkShell;
easy-hls-src = fetchFromGitHub {
owner = "jkachmar";
repo = "easy-hls-nix";
rev = "291cf77f512a7121bb6801cde35ee1e8b7287f91";
sha256 = "1bvbcp9zwmh53sm16ycp8phhc6vzc72a71sf0bvyjgfbn6zp68bc";
};
easy-hls = callPackage easy-hls-src {};
in
mkShell {
buildInputs = [
easy-hls
];
}

36
xmonad-config.cabal Normal file
View file

@ -0,0 +1,36 @@
cabal-version: >=1.10
name: xmonad-config
version: 0.13.0.0
-- synopsis:
-- description:
-- bug-reports:
license: AGPL-3.0-or-later
author: EEva (JPotier)
maintainer: jpo.contributes.to.nixos@marvid.fr
-- copyright:
-- category:
build-type: Simple
extra-source-files: CHANGELOG.md
executable xmonad
main-is: xmonad.hs
other-modules: KeyBindings
, MouseBindings
, Nord
, Password
, Projects
, Scratchpad
-- other-extensions:
build-depends: base
, X11
, directory
, filepath
, mtl
, unix
, xmonad
, xmonad-contrib >= 0.18.1
, xmonad-extras
hs-source-dirs: .
, lib
default-language: Haskell2010

View file

@ -9,12 +9,14 @@ import XMonad.Actions.DynamicProjects
import XMonad.Config.Desktop
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageHelpers
import XMonad.Layout.NoBorders (noBorders, smartBorders)
import XMonad.Layout.NoBorders (noBorders, smartBorders, hasBorder, BorderMessage (HasBorder))
import XMonad.Layout.ResizableTile (ResizableTall(..))
import XMonad.Layout.Spacing
import XMonad.Layout.ToggleLayouts (toggleLayouts)
import XMonad.Util.EZConfig
import qualified Solarized as S
import XMonad.Util.Hacks (fixSteamFlicker)
import qualified Nord as N
import qualified XMonad.Layout.Spacing as SS (Border(..))
-- Tidy modules
import KeyBindings as Keys (modify)
@ -25,42 +27,46 @@ import Scratchpad (modify)
--------- toggle btw vvvvvvvvvv or vvvvv
layouts = toggleLayouts fullscreen tiled
where
fullscreen = (noBorders Full)
tiled = smarts $ resizableTall ||| (Mirror resizableTall)
smarts = (smartSpacingWithEdge 5) . smartBorders
smallBorder = SS.Border 5 5 5 5
fullscreen = noBorders Full
tiled = smarts $ resizableTall ||| Mirror resizableTall
smarts = spacingRaw True smallBorder True smallBorder True . smartBorders
resizableTall = ResizableTall 1 (5/100) (1/2) []
-- Use the `xprop' tool to get the info you need for these matches.
-- For className, use the second value that xprop gives you.
-------------- Here be the law of windows
myManageHook = composeOne
[ className =? "Pavucontrol" -?> doShift "music"
, className =? "Pinentry" -?> doFloat
, className =? "Steam" -?> doShift "steam"
, className =? "VirtualBox" -?> doFloat
, className =? "csgo_linux64" -?> doShift "csgo"
, className =? "mpv" -?> doFullFloat <+> (doShift "flims")
, className =? "qemu-system-x86_64" -?> doFloat
, className =? "qutebrowser" -?> doShift "web"
, isDialog -?> doCenterFloat
, isDialog -?> doCenterFloat
myManageHook = composeAll
[ className =? "Patchage" --> doShift "patchage"
, className =? "Pavucontrol" --> doShift "music"
, className =? "Pinentry" --> doCenterFloat
, className =? "REAPER" --> hasBorder False
, className =? "Renoise" --> hasBorder False
, className =? "steam" --> doShift "steam"
, className =? "steamwebhelper" --> doShift "steam"
, className =? "cs2" --> doShift "steam"
, isDialog --> doCenterFloat
-- Move transient windows to their parent:
, transience
, transience'
]
fixSteam :: XConfig l -> XConfig l
fixSteam c = c { handleEventHook = fixSteamFlicker <+> handleEventHook c }
------------ build the full config
withConfig =
Projects.modify -- Apply projects config
fixSteam -- And workaround steam bug
$ Projects.modify -- Apply projects config
$ Keys.modify -- Apply keybindings config
$ Mouse.modify -- Apply mouse bindings config
$ Scratchpad.modify -- Apply scratchpad managehook config
$ desktopConfig -- on a default desktop config
{ manageHook = myManageHook <+> manageHook desktopConfig
{ manageHook = myManageHook
, layoutHook = desktopLayoutModifiers layouts
, terminal = "/run/current-system/sw/bin/st"
, normalBorderColor = S.base03
, focusedBorderColor = S.violet
, terminal = "kitty"
, normalBorderColor = N.backgroundhl
, focusedBorderColor = N.nord9
, borderWidth = 5
}